diff --git a/.ci/all.sh b/.ci/all.sh new file mode 100755 index 0000000000..e8a7f272e4 --- /dev/null +++ b/.ci/all.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# +# all.sh +# Copyright (c) 2024 james@firefly-iii.org +# +# This file is part of Firefly III (https://github.com/firefly-iii). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + +$SCRIPT_DIR/phpcs.sh +$SCRIPT_DIR/phpstan.sh +$SCRIPT_DIR/phpmd.sh diff --git a/.ci/php-cs-fixer/.php-cs-fixer.php b/.ci/php-cs-fixer/.php-cs-fixer.php index 1e5a1c2dff..9fc7397742 100644 --- a/.ci/php-cs-fixer/.php-cs-fixer.php +++ b/.ci/php-cs-fixer/.php-cs-fixer.php @@ -35,10 +35,39 @@ $finder = PhpCsFixer\Finder::create() $config = new PhpCsFixer\Config(); -return $config->setRules([ - '@PSR12' => true, - 'declare_strict_types' => true, - 'strict_param' => true, - 'array_syntax' => ['syntax' => 'short'], - ]) +return $config->setRules( + [ + // rule sets + '@PHP83Migration' => true, + '@PhpCsFixer' => true, + '@PhpCsFixer:risky' => true, + '@PSR12' => true, + '@PSR12:risky' => true, + 'declare_strict_types' => true, + 'strict_param' => true, + 'no_unused_imports' => true, + 'single_space_around_construct' => true, + 'statement_indentation' => true, + 'void_return' => true, + + // disabled rules + 'native_function_invocation' => false, // annoying + 'php_unit_data_provider_name' => false, // bloody annoying long test names + 'static_lambda' => false, // breaks the Response macro for API's. + 'phpdoc_summary' => false, // annoying. + 'comment_to_phpdoc' => false, // breaks phpstan lines in combination with PHPStorm. + 'type_declaration_spaces' => false, + 'cast_spaces' => false, + + // complex rules + 'array_syntax' => ['syntax' => 'short'], + 'binary_operator_spaces' => [ + 'default' => 'at_least_single_space', + 'operators' => [ + '=>' => 'align_single_space_by_scope', + '=' => 'align_single_space_minimal_by_scope', + '??=' => 'align_single_space_minimal_by_scope', + ], + ], + ]) ->setFinder($finder); diff --git a/.ci/php-cs-fixer/composer.lock b/.ci/php-cs-fixer/composer.lock index b783d43031..32efdba47e 100644 --- a/.ci/php-cs-fixer/composer.lock +++ b/.ci/php-cs-fixer/composer.lock @@ -226,50 +226,49 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.35.1", + "version": "v3.51.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "ec1ccc264994b6764882669973ca435cf05bab08" + "reference": "127fa74f010da99053e3f5b62672615b72dd6efd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/ec1ccc264994b6764882669973ca435cf05bab08", - "reference": "ec1ccc264994b6764882669973ca435cf05bab08", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/127fa74f010da99053e3f5b62672615b72dd6efd", + "reference": "127fa74f010da99053e3f5b62672615b72dd6efd", "shasum": "" }, "require": { - "composer/semver": "^3.3", + "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", + "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-mbstring": "^1.28", + "symfony/polyfill-php80": "^1.28", + "symfony/polyfill-php81": "^1.28", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { "facile-it/paraunit": "^1.3 || ^2.0", "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", + "keradus/cli-executor": "^2.1", "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", + "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "symfony/phpunit-bridge": "^6.2.3", - "symfony/yaml": "^5.4 || ^6.0" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", + "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2", + "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -307,7 +306,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.35.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.51.0" }, "funding": [ { @@ -315,7 +314,7 @@ "type": "github" } ], - "time": "2023-10-12T13:47:26+00:00" + "time": "2024-02-28T19:50:06+00:00" }, { "name": "psr/container", @@ -472,29 +471,29 @@ }, { "name": "sebastian/diff", - "version": "5.0.3", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" + "reference": "ab83243ecc233de5655b76f577711de9f842e712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ab83243ecc233de5655b76f577711de9f842e712", + "reference": "ab83243ecc233de5655b76f577711de9f842e712", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", + "phpunit/phpunit": "^11.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -527,7 +526,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.1" }, "funding": [ { @@ -535,47 +534,50 @@ "type": "github" } ], - "time": "2023-05-01T07:48:21+00:00" + "time": "2024-03-02T07:30:33+00:00" }, { "name": "symfony/console", - "version": "v6.3.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + "reference": "6b099f3306f7c9c2d2786ed736d0026b2903205f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "url": "https://api.github.com/repos/symfony/console/zipball/6b099f3306f7c9c2d2786ed736d0026b2903205f", + "reference": "6b099f3306f7c9c2d2786ed736d0026b2903205f", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -609,7 +611,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.4" + "source": "https://github.com/symfony/console/tree/v7.0.4" }, "funding": [ { @@ -625,11 +627,11 @@ "type": "tidelift" } ], - "time": "2023-08-16T10:10:12+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -676,7 +678,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -696,24 +698,24 @@ }, { "name": "symfony/event-dispatcher", - "version": "v6.3.2", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e", + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -722,13 +724,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -756,7 +758,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3" }, "funding": [ { @@ -772,11 +774,11 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -832,7 +834,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -852,20 +854,20 @@ }, { "name": "symfony/filesystem", - "version": "v6.3.1", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" + "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/2890e3a825bc0c0558526c04499c13f83e1b6b12", + "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, @@ -895,7 +897,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.3.1" + "source": "https://github.com/symfony/filesystem/tree/v7.0.3" }, "funding": [ { @@ -911,27 +913,27 @@ "type": "tidelift" } ], - "time": "2023-06-01T08:30:39+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/finder", - "version": "v6.3.5", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", + "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -959,7 +961,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.5" + "source": "https://github.com/symfony/finder/tree/v7.0.0" }, "funding": [ { @@ -975,24 +977,24 @@ "type": "tidelift" } ], - "time": "2023-09-26T12:56:25+00:00" + "time": "2023-10-31T17:59:56+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.3.0", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" + "reference": "700ff4096e346f54cb628ea650767c8130f1001f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/700ff4096e346f54cb628ea650767c8130f1001f", + "reference": "700ff4096e346f54cb628ea650767c8130f1001f", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -1026,7 +1028,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.3.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.0.0" }, "funding": [ { @@ -1042,20 +1044,20 @@ "type": "tidelift" } ], - "time": "2023-05-12T14:21:09+00:00" + "time": "2023-08-08T10:20:21+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -1069,9 +1071,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1108,7 +1107,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -1124,20 +1123,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -1148,9 +1147,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1189,7 +1185,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -1205,20 +1201,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { @@ -1229,9 +1225,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1273,7 +1266,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { @@ -1289,20 +1282,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -1316,9 +1309,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1356,7 +1346,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -1372,20 +1362,20 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { @@ -1393,9 +1383,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1439,7 +1426,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -1455,20 +1442,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", "shasum": "" }, "require": { @@ -1476,9 +1463,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1518,7 +1502,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" }, "funding": [ { @@ -1534,24 +1518,24 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/process", - "version": "v6.3.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "url": "https://api.github.com/repos/symfony/process/zipball/0e7727191c3b71ebec6d529fa0e50a01ca5679e9", + "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -1579,7 +1563,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.4" + "source": "https://github.com/symfony/process/tree/v7.0.4" }, "funding": [ { @@ -1595,25 +1579,25 @@ "type": "tidelift" } ], - "time": "2023-08-07T10:39:22+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -1661,7 +1645,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" }, "funding": [ { @@ -1677,24 +1661,24 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.3.0", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" + "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/983900d6fddf2b0cbaacacbbad07610854bd8112", + "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -1723,7 +1707,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.3.0" + "source": "https://github.com/symfony/stopwatch/tree/v7.0.3" }, "funding": [ { @@ -1739,24 +1723,24 @@ "type": "tidelift" } ], - "time": "2023-02-16T10:14:28+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/string", - "version": "v6.3.5", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339" + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/13d76d0fb049051ed12a04bef4f9de8715bea339", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339", + "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b", + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -1766,11 +1750,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -1809,7 +1793,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.5" + "source": "https://github.com/symfony/string/tree/v7.0.4" }, "funding": [ { @@ -1825,7 +1809,7 @@ "type": "tidelift" } ], - "time": "2023-09-18T10:38:32+00:00" + "time": "2024-02-01T13:17:36+00:00" } ], "packages-dev": [], @@ -1836,5 +1820,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/.ci/phpcs.sh b/.ci/phpcs.sh index 49c6420f04..29b38f892e 100755 --- a/.ci/phpcs.sh +++ b/.ci/phpcs.sh @@ -28,11 +28,29 @@ SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) # enable test .env file. # cp .ci/.env.ci .env +OUTPUT_FORMAT=txt +EXTRA_PARAMS="" + +if [[ $GITHUB_ACTIONS = "true" ]] +then + OUTPUT_FORMAT=txt + EXTRA_PARAMS="" +fi + # clean up php code cd $SCRIPT_DIR/php-cs-fixer composer update --quiet rm -f .php-cs-fixer.cache -PHP_CS_FIXER_IGNORE_ENV=true ./vendor/bin/php-cs-fixer fix --config $SCRIPT_DIR/php-cs-fixer/.php-cs-fixer.php --allow-risky=yes +PHP_CS_FIXER_IGNORE_ENV=true +./vendor/bin/php-cs-fixer fix \ + --config $SCRIPT_DIR/php-cs-fixer/.php-cs-fixer.php \ + --format=$OUTPUT_FORMAT \ + --allow-risky=yes $EXTRA_PARAMS + +EXIT_CODE=$? + +echo "Exit code for CS fixer is $EXIT_CODE." + cd $SCRIPT_DIR/.. -exit 0 +exit $EXIT_CODE diff --git a/.ci/phpmd.sh b/.ci/phpmd.sh old mode 100644 new mode 100755 index 0cbadc94c6..393305ed74 --- a/.ci/phpmd.sh +++ b/.ci/phpmd.sh @@ -22,16 +22,29 @@ SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +OUTPUT_FORMAT=text + +if [[ $GITHUB_ACTIONS = "true" ]] +then + OUTPUT_FORMAT=github +fi + cd $SCRIPT_DIR/phpmd composer update --quiet ./vendor/bin/phpmd \ - $SCRIPT_DIR/../app text phpmd.xml \ + $SCRIPT_DIR/../app,$SCRIPT_DIR/../database,$SCRIPT_DIR/../routes,$SCRIPT_DIR/../config \ + $OUTPUT_FORMAT phpmd.xml \ --exclude $SCRIPT_DIR/../app/resources/** \ --exclude $SCRIPT_DIR/../app/frontend/** \ --exclude $SCRIPT_DIR/../app/public/** \ - --exclude $SCRIPT_DIR/../app/vendor/** \ + --exclude $SCRIPT_DIR/../app/vendor/** + +EXIT_CODE=$? cd $SCRIPT_DIR/.. -exit 0 +echo "Exit code is $EXIT_CODE." + +# for the time being, exit 0 +exit $EXIT_CODE diff --git a/.ci/phpmd/composer.lock b/.ci/phpmd/composer.lock index 88f4ba6d7f..a561f0b918 100644 --- a/.ci/phpmd/composer.lock +++ b/.ci/phpmd/composer.lock @@ -9,16 +9,16 @@ "packages-dev": [ { "name": "composer/pcre", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", "shasum": "" }, "require": { @@ -60,7 +60,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" + "source": "https://github.com/composer/pcre/tree/3.1.1" }, "funding": [ { @@ -76,7 +76,7 @@ "type": "tidelift" } ], - "time": "2022-11-17T09:50:14+00:00" + "time": "2023-10-11T07:11:09+00:00" }, { "name": "composer/xdebug-handler", @@ -146,28 +146,28 @@ }, { "name": "pdepend/pdepend", - "version": "2.14.0", + "version": "2.16.2", "source": { "type": "git", "url": "https://github.com/pdepend/pdepend.git", - "reference": "1121d4b04af06e33e9659bac3a6741b91cab1de1" + "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/1121d4b04af06e33e9659bac3a6741b91cab1de1", - "reference": "1121d4b04af06e33e9659bac3a6741b91cab1de1", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58", + "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58", "shasum": "" }, "require": { "php": ">=5.3.7", - "symfony/config": "^2.3.0|^3|^4|^5|^6.0", - "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0", - "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0" + "symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/polyfill-mbstring": "^1.19" }, "require-dev": { "easy-doc/easy-doc": "0.0.0|^1.2.3", "gregwar/rst": "^1.0", - "phpunit/phpunit": "^4.8.36|^5.7.27", "squizlabs/php_codesniffer": "^2.0.0" }, "bin": [ @@ -197,7 +197,7 @@ ], "support": { "issues": "https://github.com/pdepend/pdepend/issues", - "source": "https://github.com/pdepend/pdepend/tree/2.14.0" + "source": "https://github.com/pdepend/pdepend/tree/2.16.2" }, "funding": [ { @@ -205,26 +205,26 @@ "type": "tidelift" } ], - "time": "2023-05-26T13:15:18+00:00" + "time": "2023-12-17T18:09:59+00:00" }, { "name": "phpmd/phpmd", - "version": "2.13.0", + "version": "2.15.0", "source": { "type": "git", "url": "https://github.com/phpmd/phpmd.git", - "reference": "dad0228156856b3ad959992f9748514fa943f3e3" + "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/dad0228156856b3ad959992f9748514fa943f3e3", - "reference": "dad0228156856b3ad959992f9748514fa943f3e3", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0", + "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0", "shasum": "" }, "require": { "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", "ext-xml": "*", - "pdepend/pdepend": "^2.12.1", + "pdepend/pdepend": "^2.16.1", "php": ">=5.3.9" }, "require-dev": { @@ -233,8 +233,7 @@ "ext-simplexml": "*", "gregwar/rst": "^1.0", "mikey179/vfsstream": "^1.6.8", - "phpunit/phpunit": "^4.8.36 || ^5.7.27", - "squizlabs/php_codesniffer": "^2.0" + "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2" }, "bin": [ "src/bin/phpmd" @@ -271,6 +270,7 @@ "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", "homepage": "https://phpmd.org/", "keywords": [ + "dev", "mess detection", "mess detector", "pdepend", @@ -280,7 +280,7 @@ "support": { "irc": "irc://irc.freenode.org/phpmd", "issues": "https://github.com/phpmd/phpmd/issues", - "source": "https://github.com/phpmd/phpmd/tree/2.13.0" + "source": "https://github.com/phpmd/phpmd/tree/2.15.0" }, "funding": [ { @@ -288,7 +288,7 @@ "type": "tidelift" } ], - "time": "2022-09-10T08:44:15+00:00" + "time": "2023-12-11T08:22:20+00:00" }, { "name": "psr/container", @@ -395,34 +395,34 @@ }, { "name": "symfony/config", - "version": "v6.3.0", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "a5e00dec161b08c946a2c16eed02adbeedf827ae" + "reference": "44deeba7233f08f383185ffa37dace3b3bc87364" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/a5e00dec161b08c946a2c16eed02adbeedf827ae", - "reference": "a5e00dec161b08c946a2c16eed02adbeedf827ae", + "url": "https://api.github.com/repos/symfony/config/zipball/44deeba7233f08f383185ffa37dace3b3bc87364", + "reference": "44deeba7233f08f383185ffa37dace3b3bc87364", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0", + "symfony/filesystem": "^6.4|^7.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4", + "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/messenger": "^5.4|^6.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -450,7 +450,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.3.0" + "source": "https://github.com/symfony/config/tree/v7.0.4" }, "funding": [ { @@ -466,44 +466,43 @@ "type": "tidelift" } ], - "time": "2023-04-25T10:46:17+00:00" + "time": "2024-02-26T07:52:39+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.3.1", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "7abf242af21f196b65f20ab00ff251fdf3889b8d" + "reference": "47f37af245df8457ea63409fc242b3cc825ce5eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7abf242af21f196b65f20ab00ff251fdf3889b8d", - "reference": "7abf242af21f196b65f20ab00ff251fdf3889b8d", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/47f37af245df8457ea63409fc242b3cc825ce5eb", + "reference": "47f37af245df8457ea63409fc242b3cc825ce5eb", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.2.10" + "symfony/service-contracts": "^3.3", + "symfony/var-exporter": "^6.4|^7.0" }, "conflict": { "ext-psr": "<1.1|>=2", - "symfony/config": "<6.1", - "symfony/finder": "<5.4", - "symfony/proxy-manager-bridge": "<6.3", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "psr/container-implementation": "1.1|2.0", "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.1", - "symfony/expression-language": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -531,7 +530,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.3.1" + "source": "https://github.com/symfony/dependency-injection/tree/v7.0.4" }, "funding": [ { @@ -547,11 +546,11 @@ "type": "tidelift" } ], - "time": "2023-06-24T11:51:27+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -598,7 +597,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -618,20 +617,20 @@ }, { "name": "symfony/filesystem", - "version": "v6.3.1", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" + "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/2890e3a825bc0c0558526c04499c13f83e1b6b12", + "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, @@ -661,7 +660,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.3.1" + "source": "https://github.com/symfony/filesystem/tree/v7.0.3" }, "funding": [ { @@ -677,20 +676,20 @@ "type": "tidelift" } ], - "time": "2023-06-01T08:30:39+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -704,9 +703,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -743,7 +739,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -759,20 +755,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -786,9 +782,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -826,7 +819,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -842,25 +835,25 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -908,7 +901,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" }, "funding": [ { @@ -924,27 +917,27 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.3.0", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "db5416d04269f2827d8c54331ba4cfa42620d350" + "reference": "dfb0acb6803eb714f05d97dd4c5abe6d5fa9fe41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/db5416d04269f2827d8c54331ba4cfa42620d350", - "reference": "db5416d04269f2827d8c54331ba4cfa42620d350", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/dfb0acb6803eb714f05d97dd4c5abe6d5fa9fe41", + "reference": "dfb0acb6803eb714f05d97dd4c5abe6d5fa9fe41", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -982,7 +975,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.3.0" + "source": "https://github.com/symfony/var-exporter/tree/v7.0.4" }, "funding": [ { @@ -998,7 +991,7 @@ "type": "tidelift" } ], - "time": "2023-04-21T08:48:44+00:00" + "time": "2024-02-26T10:35:24+00:00" } ], "aliases": [], @@ -1008,5 +1001,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/.ci/phpmd/phpmd.xml b/.ci/phpmd/phpmd.xml index 47c3f85687..e3b4cd3782 100644 --- a/.ci/phpmd/phpmd.xml +++ b/.ci/phpmd/phpmd.xml @@ -20,53 +20,75 @@ --> - Bla bla + xmlns="http://pmd.sf.net/ruleset/1.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd" + xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"> + Firefly III ruleset. + + + + - + + + - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.ci/phpstan.neon b/.ci/phpstan.neon index f846b62d11..7e804a9a43 100644 --- a/.ci/phpstan.neon +++ b/.ci/phpstan.neon @@ -1,42 +1,33 @@ -includes: - - ../vendor/nunomaduro/larastan/extension.neon - - ../vendor/ergebnis/phpstan-rules/rules.neon - - ../vendor/phpstan/phpstan-deprecation-rules/rules.neon - - ../vendor/thecodingmachine/phpstan-strict-rules/phpstan-strict-rules.neon - parameters: + universalObjectCratesClasses: + - Illuminate\Database\Eloquent\Model + # TODO: slowly remove these parameters and fix the issues found. + reportUnmatchedIgnoredErrors: false + checkGenericClassInNonGenericObjectType: false # remove this rule when all other issues are solved. ignoreErrors: + # TODO: slowly remove these exceptions and fix the issues found. + - '#Dynamic call to static method#' # all the Laravel ORM things depend on this. + - '#Control structures using switch should not be used.#' # switch is fine in some cases. + - '#with no value type specified in iterable type array#' # remove this rule when all other issues are solved. + - '#has no value type specified in iterable type array#' # remove this rule when all other issues are solved. - '#is not allowed to extend#' + - '#switch is forbidden to use#' - '#is neither abstract nor final#' - - '#has a nullable return type declaration#' - - '#with a nullable type declaration#' + - '#on left side of \?\?\= always exists and is not nullable#' + - '#has a nullable return type declaration#' # perhaps throw errors instead? + - '#with a nullable type declaration#' # decide what action should be if param is null. - '#with null as default value#' - - '#is not covariant with PHPDoc type array#' + - + message: '#Constructor in [a-zA-Z0-9\\_]+ has parameter \$[a-zA-Z0-9\\_]+ with default value#' + paths: + - ../app/Exceptions/IntervalException.php + - ../app/Support/Navigation.php - message: '#but containers should not be injected#' paths: - ../app/Support/Authentication/RemoteUserGuard.php - - message: '#Control structures using switch should not be used.#' - paths: - - ../app/Api/V1/Controllers/Data/DestroyController.php - - ../app/Console/Commands/Correction/FixAccountTypes.php - - ../app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php - - ../app/Exceptions/GracefulNotFoundHandler.php - - ../app/Generator/Webhook/StandardMessageGenerator.php - - ../app/Support/Amount.php - - ../app/Support/Navigation.php - - ../app/Support/ParseDateString.php - - ../app/Support/Search/AccountSearch.php - - ../app/Support/Search/OperatorQuerySearch.php - - ../app/Support/Twig/General.php - - ../app/Transformers/RecurrenceTransformer.php - - ../app/Validation/AccountValidator.php - - ../app/Validation/RecurrenceValidation.php - - ../app/Validation/TransactionValidation.php - - - - message: '#Function compact\(\) should not be used#' + message: '#Function compact\(\) should not be used#' # too useful in template rendering. paths: - ../app/Generator/Report/Account/MonthReportGenerator.php - ../app/Generator/Report/Audit/MonthReportGenerator.php @@ -57,7 +48,6 @@ parameters: message: '#Either catch a more specific exception#' paths: - ../app/Support/Form/FormSupport.php - paths: - ../app - ../database @@ -66,5 +56,6 @@ parameters: - ../bootstrap/app.php # The level 8 is the highest level. original was 5 - level: 4 + # 7 is more than enough, higher just leaves NULL things. + level: 7 diff --git a/.ci/phpstan.sh b/.ci/phpstan.sh index 3b3beea910..84ff119226 100755 --- a/.ci/phpstan.sh +++ b/.ci/phpstan.sh @@ -29,7 +29,20 @@ SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) # cp .ci/.env.ci .env # Do static code analysis. -# ./vendor/bin/phpstan analyse -c .ci/phpstan.neon --no-progress -./vendor/bin/phpstan analyse -c .ci/phpstan.neon --xdebug --error-format=table > phpstan-report.txt +if [[ $GITHUB_ACTIONS = "" ]] +then + ./vendor/bin/phpstan analyse -c .ci/phpstan.neon --error-format=table > phpstan-report.txt + EXIT_CODE=$? + echo "The PHPstan report can be found in phpstan-report.txt. Exit code is $EXIT_CODE." +fi -echo 'The PHPstan report can be found in phpstan-report.txt' +if [[ $GITHUB_ACTIONS = "true" ]] +then + ./vendor/bin/phpstan analyse -c .ci/phpstan.neon --no-progress --error-format=github + EXIT_CODE=$? + + # temporary exit code 0 + # EXIT_CODE=0 +fi + +exit $EXIT_CODE diff --git a/.ci/phpunit.sh b/.ci/phpunit.sh deleted file mode 100755 index 58b307c329..0000000000 --- a/.ci/phpunit.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash - -# -# phpunit.sh -# Copyright (c) 2021 james@firefly-iii.org -# -# This file is part of Firefly III (https://github.com/firefly-iii). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -# enable test .env file. -cp $SCRIPT_DIR/../.env $SCRIPT_DIR/../.env.backup -cp $SCRIPT_DIR/.env.ci $SCRIPT_DIR/../.env - -COVERAGE=false -RESET=false -FILE=storage/database/database.sqlite - -while getopts "cr" o; do - case "${o}" in - c) COVERAGE=true;; - r) RESET=true;; - esac -done - -# reset if necessary. -if [ $RESET = "true" ] ; then - rm -f $FILE -fi - -# download test database -if [ -f "$FILE" ]; then - echo 'DB exists, will use it' -else - echo 'Download new DB' - wget --quiet https://github.com/firefly-iii/test-fixtures/raw/main/test-database.sqlite -O $FILE -fi - -# run phpunit -if [ $COVERAGE = "true" ] ; then - echo 'Run with coverage' - XDEBUG_MODE=coverage ./vendor/bin/phpunit --configuration phpunit.xml --coverage-html $SCRIPT_DIR/coverage -else - echo 'Run without coverage' - ./vendor/bin/phpunit --configuration phpunit.xml -fi - -# restore .env file -mv $SCRIPT_DIR/../.env.backup $SCRIPT_DIR/../.env - -cd $SCRIPT_DIR/.. diff --git a/.env.example b/.env.example index ec2b4a8762..9bf6ec8409 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,6 @@ # You can leave this on "local". If you change it to production most console commands will ask for extra confirmation. # Never set it to "testing". -APP_ENV=local +APP_ENV=production # Set to true if you want to see debug information in error screens. APP_DEBUG=false @@ -78,7 +78,7 @@ PAPERTRAIL_HOST= PAPERTRAIL_PORT= # Database credentials. Make sure the database exists. I recommend a dedicated user for Firefly III -# For other database types, please see the FAQ: https://docs.firefly-iii.org/firefly-iii/faq/self-hosted/#i-want-to-use-sqlite +# For other database types, please see the FAQ: https://docs.firefly-iii.org/references/faq/install/#i-want-to-use-sqlite # If you use Docker or similar, you can set these variables from a file by appending them with _FILE # Use "pgsql" for PostgreSQL # Use "mysql" for MySQL and MariaDB. @@ -122,7 +122,7 @@ SESSION_DRIVER=file # If you use Docker or similar, you can set REDIS_HOST_FILE, REDIS_PASSWORD_FILE or # REDIS_PORT_FILE to set the value from a file instead of from an environment variable -# can be tcp, unix or http +# can be tcp or unix. http is not supported REDIS_SCHEME=tcp # use only when using 'unix' for REDIS_SCHEME. Leave empty otherwise. @@ -150,7 +150,7 @@ COOKIE_SECURE=false COOKIE_SAMESITE=lax # If you want Firefly III to email you, update these settings -# For instructions, see: https://docs.firefly-iii.org/firefly-iii/advanced-installation/email/#email +# For instructions, see: https://docs.firefly-iii.org/how-to/firefly-iii/advanced/notifications/#email # If you use Docker or similar, you can set these variables from a file by appending them with _FILE MAIL_MAILER=log MAIL_HOST=null @@ -195,6 +195,16 @@ MAP_DEFAULT_LAT=51.983333 MAP_DEFAULT_LONG=5.916667 MAP_DEFAULT_ZOOM=6 +# +# Some objects have room for an URL, like transactions and webhooks. +# By default, the following protocols are allowed: +# http, https, ftp, ftps, mailto +# +# To change this, set your preferred comma separated set below. +# Be sure to include http, https and other default ones if you need to. +# +VALID_URL_PROTOCOLS= + # # Firefly III authentication settings # @@ -204,7 +214,7 @@ MAP_DEFAULT_ZOOM=6 # - 'web' (default, uses built in DB) # - 'remote_user_guard' for Authelia etc # Read more about these settings in the documentation. -# https://docs.firefly-iii.org/firefly-iii/advanced-installation/authentication +# https://docs.firefly-iii.org/how-to/firefly-iii/advanced/authentication/ # # LDAP is no longer supported :( # @@ -259,7 +269,7 @@ ALLOW_WEBHOOKS=false # 1. Set this token to any 32-character value (this is important!). # 2. Use this token in the cron URL instead of a user's command line token that you can find in /profile # -# For more info: https://docs.firefly-iii.org/firefly-iii/advanced-installation/cron/ +# For more info: https://docs.firefly-iii.org/how-to/firefly-iii/advanced/cron/ # # You can set this variable from a file by appending it with _FILE # @@ -314,18 +324,15 @@ PUSHER_SECRET= PUSHER_ID= DEMO_USERNAME= DEMO_PASSWORD= + +# +# The v2 layout is very experimental. If it breaks you get to keep both parts. +# Be wary of data loss. +# FIREFLY_III_LAYOUT=v1 # -# If you have trouble configuring your Firefly III installation, DON'T BOTHER setting this variable. -# It won't work. It doesn't do ANYTHING. Don't believe the lies you read online. I'm not joking. -# This configuration value WILL NOT HELP. -# -# Notable exception to this rule is Synology, which, according to some users, will use APP_URL to rewrite stuff. -# -# This variable is ONLY used in some of the emails Firefly III sends around. Nowhere else. -# So when configuring anything WEB related this variable doesn't do anything. Nothing -# -# If you're stuck I understand you get desperate but look SOMEWHERE ELSE. +# Please make sure this URL matches the external URL of your Firefly III installation. +# It is used to validate specific requests and to generate URLs in emails. # APP_URL=http://localhost diff --git a/.env.testing b/.env.testing new file mode 100644 index 0000000000..2ca0859f2a --- /dev/null +++ b/.env.testing @@ -0,0 +1,26 @@ +APP_ENV=testing +APP_DEBUG=true +SITE_OWNER=mail@example.com +APP_KEY=TestTestTestTestTestTestTestTest +DEFAULT_LANGUAGE=en_US +DEFAULT_LOCALE=equal +TZ=Europe/Amsterdam +LOG_CHANNEL=stdout +APP_LOG_LEVEL=debug +AUDIT_LOG_LEVEL=info +AUDIT_LOG_CHANNEL=audit_stdout +DB_CONNECTION=sqlite +CACHE_DRIVER=array +SESSION_DRIVER=array +MAIL_MAILER=log +SEND_ERROR_MESSAGE=true +ENABLE_EXTERNAL_MAP=false +ENABLE_EXTERNAL_RATES=true +AUTHENTICATION_GUARD=web +ALLOW_WEBHOOKS=true +APP_NAME=FireflyIII +BROADCAST_DRIVER=log +QUEUE_DRIVER=sync +CACHE_PREFIX=firefly +FIREFLY_III_LAYOUT=v1 +APP_URL=http://localhost diff --git a/.github/ISSUE_TEMPLATE/fr.yml b/.github/ISSUE_TEMPLATE/fr.yml index 679d35ae2a..d14c5249bd 100644 --- a/.github/ISSUE_TEMPLATE/fr.yml +++ b/.github/ISSUE_TEMPLATE/fr.yml @@ -8,7 +8,7 @@ body: options: - label: I've read the [support guidelines](https://github.com/firefly-iii/firefly-iii/blob/main/.github/support.md) required: true - - label: My request is not listed as [a very good idea, but unfortunately...](https://docs.firefly-iii.org/firefly-iii/more-information/what-its-not/) + - label: My request is not listed as [a very good idea, but unfortunately...](https://docs.firefly-iii.org/explanation/more-information/what-its-not/) required: true - label: I've used [the search](https://github.com/firefly-iii/firefly-iii/issues?q=is%3Aissue) and this has not been requested before. required: true diff --git a/.github/contributing.md b/.github/contributing.md index 95080457fb..00df224461 100644 --- a/.github/contributing.md +++ b/.github/contributing.md @@ -1,3 +1,3 @@ -# [Contributing guidelines](https://docs.firefly-iii.org/firefly-iii/support/#contributing-code) +# [Contributing guidelines](https://docs.firefly-iii.org/explanation/support/#contributing-code) -[Contributing guidelines](https://docs.firefly-iii.org/firefly-iii/support/#contributing-code) +[Contributing guidelines](https://docs.firefly-iii.org/explanation/support/#contributing-code) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 50269b374b..8d18a78293 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,11 +1,16 @@ version: 2 updates: + # Check for updates to GitHub Actions every week + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + # composer updates - package-ecosystem: "composer" directory: "/" # Location of package manifests target-branch: develop - labels: [ "bug" ] versioning-strategy: increase schedule: interval: "weekly" @@ -14,15 +19,6 @@ updates: - package-ecosystem: "npm" directory: "/" target-branch: develop - labels: [ "bug" ] - versioning-strategy: increase - schedule: - interval: "weekly" - - - package-ecosystem: "github-actions" - directory: "/" - target-branch: develop - labels: [ "bug" ] versioning-strategy: increase schedule: interval: "weekly" diff --git a/.github/label-actions.yml b/.github/label-actions.yml new file mode 100644 index 0000000000..6c9982d2cc --- /dev/null +++ b/.github/label-actions.yml @@ -0,0 +1,111 @@ +# Configuration for Label Actions - https://github.com/dessant/label-actions + +# The `feature` label is added to issues +feature: + issues: + # Post a comment, `{issue-author}` is an optional placeholder + comment: | + Hi there! + + This is an automatic reply. `Share and enjoy` + + This issue has been marked as a feature request. The requested (new) feature will become a part of Firefly III or the data importer in due course. + + If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or "I need this too" or whatever. Such comments are not helpful, and do not influence [the roadmap](https://roadmap.firefly-iii.org/). Your comment may be :skull: deleted. You can subscribe to this issue to get updates. + + Thank you for your contributions. + +epic: + issues: + # Post a comment, `{issue-author}` is an optional placeholder + comment: | + Hi there! + + This is an automatic reply. `Share and enjoy` + + This issue has been marked as an epic. In epics, large amounts of works are collected that will be part of a major new feature. If you have more ideas that could be a part of this epic, feel free to reply. + + *However*, please be aware there is NO need to reply with "+1" or "me too" or "I need this too" or whatever. Such comments are not helpful, and do not influence [the roadmap](https://roadmap.firefly-iii.org/). Your comment may be :skull: deleted. + + If you are merely interested in this epic's progress, you can subscribe to this issue to get updates. + + Thank you for your contributions. + +enhancement: + issues: + # Post a comment, `{issue-author}` is an optional placeholder + comment: | + Hi there! + + This is an automatic reply. `Share and enjoy` + + This issue has been marked as an enhancement. The requested enhancement to an existing feature will become a part of Firefly III or the data importer in due course. + + If you come across this issue, please be aware there is NO need to reply with "+1" or "me too" or "I need this too" or whatever. Such comments are not helpful, and do not influence [the roadmap](https://roadmap.firefly-iii.org/). Your comment may be :skull: deleted. You can subscribe to this issue to get updates. + + Thank you for your contributions. + +triage: + issues: + # Post a comment, `{issue-author}` is an optional placeholder + comment: | + Hi there! + + This is an automatic reply. `Share and enjoy` + + This issue has been marked as being in triage. The root cause is not known yet, or the issue needs more investigation. You can help by sharing debug information (from `/debug`) if you also have this issue or when you haven't already done so. + + Thank you for your contributions. + +needs-moar-debug: + issues: + comment: | + Hi there! + + This is an automatic reply. `Share and enjoy` + + To learn more about this issue, please make sure you share at least: + + 1. The table you can find on the `/debug` page + 2. Firefly III version + 2. Docker, self-hosted, or hosted by a third party? + 3. Operating system and browser + + Thank you for your contributions. + unlabel: needs-moar-debug + + +needs-moar-logs: + issues: + comment: | + Hi there! + + This is an automatic reply. `Share and enjoy` + + To learn more about this issue, please share the relevant log files from your Firefly III or data importer installation. + + The relevant instructions can be found in the documentation: [How to debug Firefly III?](https://docs.firefly-iii.org/how-to/general/debug/) Once debug mode is activated per these instructions, you can repeat your action and find the logs, depending on your method of installation. All is explained on the page. + + Please share the relevant log lines in your issue, either inline or as an attachment. If you feel the logs contain sensitive information, you may also send them to [james@firefly-iii.org](mailto:james@firefly-iii.org). Without these logs, it may not be possible to properly investigate this issue. + + Thank you for your contributions. + unlabel: needs-moar-logs + +v2-layout-issue: + issues: + comment: | + Hi there! + + This is an automatic reply. `Share and enjoy` + + It seems your issue is about the new v2-layout that is currently in development for Firefly III. + + These issues are collected in [a GitHub discussion](https://github.com/firefly-iii/firefly-iii/issues/8361). + + Please note that the v2 layout is still very much in development. + + Thank you for your contributions. + close: true + close-reason: completed + lock: false + unlabel: v2-layout-issue diff --git a/.github/support.md b/.github/support.md index 80e4b99ad8..78cbed51e8 100644 --- a/.github/support.md +++ b/.github/support.md @@ -27,7 +27,7 @@ Only then [create a new issue](https://github.com/firefly-iii/firefly-iii/issues - Issues can be converted into discussions if it's not a bug or feature request. - Features that won't be implemented will be labelled " - wontfix". [This isn't personal](https://docs.firefly-iii.org/firefly-iii/about-firefly-iii/what-its-not/). + wontfix". [This isn't personal](https://docs.firefly-iii.org/explanation/more-information/what-its-not/). - Issues can be closed if they're duplicates of other issues. - Issues can be closed if the answer is in the FAQ. - Issues will be closed automatically after 14 days. diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml index 5f820b0c40..0be8f1c3fc 100644 --- a/.github/workflows/cleanup.yml +++ b/.github/workflows/cleanup.yml @@ -1,6 +1,9 @@ # This workflow prunes old workflow runs for an entire repository. -name: Prune old builds +name: "Chore - Prune old builds" + +permissions: + actions: write on: schedule: @@ -12,9 +15,9 @@ jobs: timeout-minutes: 10 steps: - name: Prune cancelled/skipped runs - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: - github-token: ${{ secrets.GH_ACTIONS_PERSONAL_ACCESS_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} script: | const cancelled = await github.rest.actions.listWorkflowRunsForRepo({ owner: context.repo.owner, @@ -22,14 +25,14 @@ jobs: repo: context.repo.repo, status: 'cancelled', }); - + const skipped = await github.rest.actions.listWorkflowRunsForRepo({ owner: context.repo.owner, per_page: 100, repo: context.repo.repo, status: 'skipped', }); - + for (const response of [cancelled, skipped]) { for (const run of response.data.workflow_runs) { console.log(`Run id ${run.id} of '${run.name}' is a cancelled/skipped run. Deleting...`); @@ -42,31 +45,33 @@ jobs: } - name: Prune runs older than 3 days - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: - github-token: ${{ secrets.GH_ACTIONS_PERSONAL_ACCESS_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} script: | const days_to_expiration = 3; const ms_in_day = 86400000; const now = Date.now(); const pages = 5; - + // we don't want to prune old runs from test.yml // because we track the duration of runs over time - + const workflows = [ 'cleanup.yml', + 'close-duplicates.yml', 'closed-issues.yml', - 'depsreview.yaml', - 'laravel.yml', + 'debug-info-actions.yml', + 'depsreview.yml', + 'label-actions.yml', 'lock.yml', - 'qodana.yml', + 'release.yml', 'sonarcloud.yml', 'stale.yml' ] - + let runs_to_delete = []; - + for (const workflow of workflows) { for (let page = 0; page < pages; page += 1) { let response = await github.rest.actions.listWorkflowRuns({ @@ -76,7 +81,7 @@ jobs: repo: context.repo.repo, workflow_id: workflow }); - + if (response.data.workflow_runs.length > 0) { for (const run of response.data.workflow_runs) { if (now - Date.parse(run.created_at) > ms_in_day * days_to_expiration) { @@ -86,7 +91,7 @@ jobs: } } } - + for (const run of runs_to_delete) { console.log(`Run id ${run[0]} of '${run[1]}' is older than ${days_to_expiration} days. Deleting...`); try { diff --git a/.github/workflows/close-duplicates.yml b/.github/workflows/close-duplicates.yml new file mode 100644 index 0000000000..493aaedf52 --- /dev/null +++ b/.github/workflows/close-duplicates.yml @@ -0,0 +1,39 @@ +name: "Issues - Command to close duplicate issues" + +# the workflow to execute on is comments that are newly created +on: + issue_comment: + types: [created] + +permissions: + issues: write + checks: read + +jobs: + close_duplicates: + runs-on: ubuntu-latest + steps: + - uses: github/command@v1.1.0 + id: command + with: + allowed_contexts: "issue" + command: ".duplicate" + - name: reply + if: ${{ steps.command.outputs.continue == 'true' }} + run: | + + ISSUE_TITLE=$(gh issue view ${{ steps.command.outputs.params }} --json title --jq '.title') + + gh issue comment "$NUMBER" --body "Hi there! + + This is an automatic reply. \`Share and enjoy\`. + + Your issue is probably a duplicate of issue #${{ steps.command.outputs.params }}: [$ISSUE_TITLE](https://github.com/firefly-iii/firefly-iii/issues/${{ steps.command.outputs.params }}). Please refer to issue #${{ steps.command.outputs.params }} for support. + + You can close this issue now. If you believe this is not in fact a duplicate, please reply and let us know. Otherwise, this issue will be automatically closed in a few days time. + + Thank you for your contributions." + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + NUMBER: ${{ github.event.issue.number }} diff --git a/.github/workflows/closed-issues.yml b/.github/workflows/closed-issues.yml index 22a9c3438f..2681e20242 100644 --- a/.github/workflows/closed-issues.yml +++ b/.github/workflows/closed-issues.yml @@ -1,10 +1,11 @@ -name: "Reply to closed issue" +--- +name: Issues - Reply to closed issue on: issues: types: - closed jobs: - auto_comment: + command_and_close: runs-on: ubuntu-latest steps: - uses: aws-actions/closed-issue-message@v1 @@ -21,4 +22,4 @@ jobs: If there is more to discuss, please open [a new issue](https://github.com/firefly-iii/firefly-iii/issues/new/choose) or [discussion](https://github.com/firefly-iii/firefly-iii/discussions/). Thank you for your contributions. - repo-token: "${{ secrets.GITHUB_TOKEN }}" + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/debug-info-actions.yml b/.github/workflows/debug-info-actions.yml new file mode 100644 index 0000000000..be7b336eaf --- /dev/null +++ b/.github/workflows/debug-info-actions.yml @@ -0,0 +1,32 @@ +name: 'Issues - Respond to hidden commands' + +# the workflow to execute on is comments that are newly created +on: + issues: + types: [opened, edited] + issue_comment: + types: [created] + +# permissions needed for reacting to IssueOps commands on issues and PRs +permissions: + contents: read + pull-requests: write + issues: write + checks: read + +jobs: + respond: + runs-on: ubuntu-latest + steps: + - run: | + ISSUE_BODY=$(gh issue view $NUMBER --json body) + if [[ $ISSUE_BODY == *".eOxNZAmyGz6CXMyf"* ]]; then + gh issue comment "$NUMBER" --body "$V2_ISSUE_REPLY_BODY" + gh issue close "$NUMBER" --reason completed + fi + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + NUMBER: ${{ github.event.issue.number }} + V2_ISSUE_REPLY_BODY: ${{ secrets.V2_ISSUE_REPLY_BODY }} + LABELS: v2-layout-issue diff --git a/.github/workflows/depsreview.yaml b/.github/workflows/depsreview.yaml deleted file mode 100644 index d5ed859514..0000000000 --- a/.github/workflows/depsreview.yaml +++ /dev/null @@ -1,14 +0,0 @@ -name: 'Dependency Review' -on: [ pull_request ] - -permissions: - contents: read - -jobs: - dependency-review: - runs-on: ubuntu-latest - steps: - - name: 'Checkout Repository' - uses: actions/checkout@v3 - - name: 'Dependency Review' - uses: actions/dependency-review-action@v3 diff --git a/.github/workflows/depsreview.yml b/.github/workflows/depsreview.yml new file mode 100644 index 0000000000..0be36de48c --- /dev/null +++ b/.github/workflows/depsreview.yml @@ -0,0 +1,16 @@ +name: 'Code - Dependency review' +on: [ pull_request ] + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: 'Checkout repository' + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: 'Dependency review' + uses: actions/dependency-review-action@v4 diff --git a/.github/workflows/label-actions.yml b/.github/workflows/label-actions.yml new file mode 100644 index 0000000000..c80e42651e --- /dev/null +++ b/.github/workflows/label-actions.yml @@ -0,0 +1,21 @@ +name: 'Issues - Reply to specific labels' + +on: + issues: + types: [labeled, unlabeled] + pull_request_target: + types: [labeled, unlabeled] + discussion: + types: [labeled, unlabeled] + +permissions: + contents: read + issues: write + pull-requests: write + discussions: write + +jobs: + action: + runs-on: ubuntu-latest + steps: + - uses: dessant/label-actions@v4 diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml deleted file mode 100644 index 75babbfe2d..0000000000 --- a/.github/workflows/laravel.yml +++ /dev/null @@ -1,146 +0,0 @@ -name: Firefly III - -on: - push: - branches-ignore: - - '**' - -jobs: - prepare: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Copy .env - run: test -f .env || cp .ci/.env.ci .env - - name: Prepare dependencies - run: | - set -euxo pipefail - export PATH=$PATH:$HOME/.composer/vendor/bin/ - composer global require hirak/prestissimo --no-plugins --no-scripts - composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-suggest - - touch ./storage/database/database.sqlite - - name: Prepare Firefly III - run: | - chmod -R 777 storage bootstrap/cache - php artisan migrate --seed - php artisan firefly-iii:upgrade-database - - name: Upload database - uses: actions/upload-artifact@v2 - with: - name: database - path: storage/database/database.sqlite - - name: Upload cache - uses: actions/upload-artifact@v2 - with: - name: cache - path: bootstrap/cache/ - - name: Upload composer cache - uses: actions/upload-artifact@v2 - with: - name: composer - path: ~/.composer - - laravel-tests: - - runs-on: ubuntu-latest - - needs: - - prepare - - steps: - - uses: actions/checkout@v3 - - name: Copy .env - run: test -f .env || cp .ci/.env.ci .env - - name: Download database - uses: actions/download-artifact@v2 - with: - name: database - path: storage/database/database.sqlite - - name: Download cache - uses: actions/download-artifact@v2 - with: - name: cache - path: bootstrap/cache/ - - name: Download vendor - uses: actions/download-artifact@v2 - with: - name: composer - path: ~/.composer - - name: Install composer - run: composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-suggest - - - name: PHPUnit tests - uses: php-actions/phpunit@v1 - with: - config: phpunit.xml - memory: 512M - - coding-standards: - - runs-on: ubuntu-latest - - needs: - - prepare - - steps: - - uses: actions/checkout@v3 - - name: Copy .env - run: test -f .env || cp .ci/.env.ci .env - - name: Download database - uses: actions/download-artifact@v2 - with: - name: database - path: storage/database/database.sqlite - - name: Download cache - uses: actions/download-artifact@v2 - with: - name: cache - path: bootstrap/cache/ - - name: Download vendor - uses: actions/download-artifact@v2 - with: - name: composer - path: ~/.composer - - name: install depenencies - run: | - composer global require nette/coding-standard - composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-suggest - - - name: Execute code standard - run: /home/runner/.composer/vendor/bin/ecs check app tests --config ./.ci/firefly-iii-standard.yml - - phpstan: - - runs-on: ubuntu-latest - - needs: - - prepare - - steps: - - uses: actions/checkout@v3 - - name: Copy .env - run: test -f .env || cp .ci/.env.ci .env - - name: Download database - uses: actions/download-artifact@v2 - with: - name: database - path: storage/database/database.sqlite - - name: Download cache - uses: actions/download-artifact@v2 - with: - name: cache - path: bootstrap/cache/ - - name: Download vendor - uses: actions/download-artifact@v2 - with: - name: composer - path: ~/.composer - - name: Install depenencies - run: | - composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-suggest - - - name: Execute PHPStan - run: vendor/bin/phpstan analyse -c .ci/phpstan.neon diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index f01515c30d..d32b27d5ee 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -1,4 +1,4 @@ -name: Lock old issues +name: 'Issues - Lock old issues' on: workflow_dispatch: @@ -15,5 +15,5 @@ jobs: - uses: JC5/lock-threads@main with: github-token: ${{ github.token }} - issue-inactive-days: 90 - pr-inactive-days: 90 + issue-inactive-days: 7 + pr-inactive-days: 7 diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml deleted file mode 100644 index da78ebabe8..0000000000 --- a/.github/workflows/qodana.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Qodana -on: - workflow_dispatch: - push: - branches: - - main - - develop -jobs: - qodana: - runs-on: ubuntu-latest - name: 'Qodana Scan' - steps: - - name: Setup PHP with no coverage driver - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - coverage: none - extensions: bcmath, intl - env: - update: true - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Install dependencies - run: | - composer install --no-scripts - cp .env.example .env - php artisan key:generate - php artisan clear-compiled - php artisan ide-helper:generate; - - - name: 'Qodana Scan' - uses: JetBrains/qodana-action@main - env: - QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..231ec6ee55 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,173 @@ +name: 'Code - Create new release' + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to release' + required: true + default: 'develop' + schedule: + - cron: '15 0 * * MON,THU' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Switch branch + run: | + if [[ "develop" == "$version" ]]; then + git checkout --track origin/develop + git pull + else + git config user.name github-actions + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + git checkout --track origin/develop + git pull + git checkout main + git merge develop + fi + env: + version: ${{ github.event_name == 'schedule' && 'develop' || github.event.inputs.version }} + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + extensions: mbstring, intl, zip, bcmath + - name: crowdin action + uses: crowdin/github-action@v1 + with: + upload_sources: true + download_translations: true + push_translations: false + push_sources: false + env: + GITHUB_TOKEN: ${{ github.token }} + CROWDIN_PROJECT_NR: ${{ secrets.CROWDIN_PROJECT_NR }} + CROWDIN_TOKEN: ${{ secrets.CROWDIN_TOKEN }} + - name: Cleanup translations + id: cleanup-transactions + uses: JC5/firefly-iii-dev@v34 + with: + action: 'ff3:crowdin-warning' + output: '' + env: + FIREFLY_III_ROOT: /github/workspace + GH_TOKEN: '' + - name: Cleanup changelog + id: cleanup-changelog + uses: JC5/firefly-iii-dev@v34 + with: + action: 'ff3:changelog' + output: '' + env: + FIREFLY_III_ROOT: /github/workspace + GH_TOKEN: ${{ secrets.CHANGELOG_TOKEN }} + - name: Extract changelog + id: extract-changelog + uses: JC5/firefly-iii-dev@v34 + with: + action: 'ff3:extract-changelog' + output: 'output' + env: + FIREFLY_III_ROOT: /github/workspace + GH_TOKEN: "" + - name: Replace version + id: replace-version + uses: JC5/firefly-iii-dev@v34 + with: + action: 'ff3:version' + output: '' + env: + FIREFLY_III_ROOT: /github/workspace + GH_TOKEN: "" + FF_III_VERSION: ${{ github.event_name == 'schedule' && 'develop' || github.event.inputs.version }} + - name: Generate JSON v1 + id: json-v1 + uses: JC5/firefly-iii-dev@v34 + with: + action: 'ff3:json-translations v1' + output: '' + env: + FIREFLY_III_ROOT: /github/workspace + GH_TOKEN: '' + - name: Generate JSON v2 + id: json-v2 + uses: JC5/firefly-iii-dev@v34 + with: + action: 'ff3:json-translations v2' + output: '' + env: + FIREFLY_III_ROOT: /github/workspace + GH_TOKEN: '' + - name: Code cleanup + id: code-cleanup + uses: JC5/firefly-iii-dev@v34 + with: + action: 'ff3:code' + output: '' + env: + FIREFLY_III_ROOT: /github/workspace + GH_TOKEN: '' + - name: Build new JS + run: | + npm upgrade + npm run build + - name: Build old JS + id: old-js + uses: JC5/firefly-iii-dev@v34 + with: + action: 'ff3:old-js' + output: '' + env: + FIREFLY_III_ROOT: /github/workspace + GH_TOKEN: '' + - name: Run CI + run: | + rm -rf vendor composer.lock + composer validate --strict + composer update --no-dev --no-scripts --no-plugins -q + sudo chown -R runner:docker resources/lang + .ci/phpcs.sh + - name: Release + run: | + sudo timedatectl set-timezone Europe/Amsterdam + git config user.name github-actions + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + git config advice.addIgnoredFile false + + if [[ "develop" == "$version" ]]; then + [[ -z $(git status --untracked-files=normal --porcelain) ]] && echo "this branch is clean, no need to push..." && exit 0; + fi + + git add -A + if test -f "output.txt"; then + git reset output.txt + fi + git commit -m "Auto commit for release '$version' on $(date +'%Y-%m-%d')" || true + git push + + if [[ "develop" == "$version" ]]; then + echo "Create nightly release." + git tag -a $version-$(date +'%Y%m%d') -m "Nightly development release '$version' on $(date +'%Y-%m-%d')" + git push origin $version-$(date +'%Y%m%d') + gh release create $version-$(date +'%Y%m%d') -p --verify-tag \ + -t "Development release for $(date +'%Y-%m-%d')" \ + -n "Bi-weekly development release of Firefly III with the latest fixes, translations and features. This release was created on **$(date +'%Y-%m-%d')** and may contain bugs. Use at your own risk. Docker users can find this release under the \`develop\` tag." + else + echo "Create default release." + git tag -a $version -m "Here be changelog" + git push origin $version + gh release create $version -F output.txt -t "$version" --verify-tag + rm output.txt + git checkout develop + git merge main + git push + fi + env: + GH_TOKEN: ${{ github.token }} + version: ${{ github.event_name == 'schedule' && 'develop' || github.event.inputs.version }} diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index e9ba1b9b27..862d9d4dc7 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -1,38 +1,67 @@ -name: Sonarcloud +name: 'Code - Run Sonarcloud' on: - pull_request: + pull_request: + workflow_dispatch: push: branches: - main - develop +env: + DB_CONNECTION: sqlite + APP_KEY: UfpBqqeXx7zpNodsC6yjYQcRfDdm4Bxh jobs: sonarcloud: name: SonarCloud runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 0 - + uses: actions/checkout@v4 - name: Setup PHP with Xdebug uses: shivammathur/setup-php@v2 with: - php-version: '8.2' + php-version: '8.3' coverage: xdebug + extensions: >- + bcmath + curl + fileinfo + iconv + intl + json + sqlite3 + mbstring + openssl + pdo + session + simplexml + sodium + tokenizer + xml + xmlwriter + + - name: Copy standard configuration + run: cp .env.testing .env - name: Install Composer dependencies run: composer install --prefer-dist --no-interaction --no-progress --no-scripts - - name: Copy environment file - run: cp .env.example .env + - name: PHPStan + run: .ci/phpstan.sh - - name: Generate app key - run: php artisan key:generate + - name: PHPMD + run: .ci/phpmd.sh + + - name: PHP CS Fixer + run: .ci/phpcs.sh + + - name: "Create database file" + run: touch storage/database/database.sqlite + + - name: "Upgrades the database to the latest version" + run: php artisan firefly-iii:upgrade-database + + - name: "Integrity Database Report" + run: php artisan firefly-iii:report-integrity - name: "Run tests with coverage" run: composer coverage diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 817763ac59..e412dd4938 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,4 +1,4 @@ -name: "Close stale issues" +name: "Issues - Mark and close stale issues" on: schedule: - cron: "30 1 * * *" @@ -14,21 +14,25 @@ jobs: pull-requests: write # for actions/stale to close stale PRs runs-on: ubuntu-latest steps: - - uses: actions/stale@v6 + - uses: actions/stale@v9 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: > - Hi there! This is an automatic reply. `Share and enjoy` - - This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. + Hi there! + This is an automatic reply. `Share and enjoy` + + This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. + Thank you for your contributions. stale-pr-message: > - Hi there! This is an automatic reply. `Share and enjoy` + Hi there! + + This is an automatic reply. `Share and enjoy` - This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. + This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. days-before-stale: 14 days-before-close: 7 - exempt-issue-labels: 'enhancement,feature,bug,announcement,epic' + exempt-issue-labels: 'enhancement,feature,bug,announcement,epic,triage' diff --git a/.gitignore b/.gitignore index ab681f4f44..7a00e55ffc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ /node_modules -/frontend/node_modules /storage/*.key /vendor -/.vagrant +public/hot npm-debug.log yarn-error.log .env diff --git a/app/Api/V1/Controllers/Autocomplete/AccountController.php b/app/Api/V1/Controllers/Autocomplete/AccountController.php index ecbfba6e61..141412f486 100644 --- a/app/Api/V1/Controllers/Autocomplete/AccountController.php +++ b/app/Api/V1/Controllers/Autocomplete/AccountController.php @@ -32,7 +32,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use JsonException; /** * Class AccountController @@ -41,6 +40,7 @@ class AccountController extends Controller { use AccountFilter; + /** @var array */ private array $balanceTypes; private AccountRepositoryInterface $repository; @@ -60,30 +60,25 @@ class AccountController extends Controller return $next($request); } ); - $this->balanceTypes = [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE,]; + $this->balanceTypes = [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]; } /** * Documentation for this endpoint: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getAccountsAC * - * @param AutocompleteRequest $request - * - * @return JsonResponse - * @throws JsonException * @throws FireflyException * @throws FireflyException */ public function accounts(AutocompleteRequest $request): JsonResponse { - $data = $request->getData(); - $types = $data['types']; - $query = $data['query']; - $date = $data['date'] ?? today(config('app.timezone')); + $data = $request->getData(); + $types = $data['types']; + $query = $data['query']; + $date = $data['date'] ?? today(config('app.timezone')); + $return = []; + $result = $this->repository->searchAccount((string)$query, $types, $this->parameters->get('limit')); - $return = []; - - $result = $this->repository->searchAccount((string)$query, $types, $this->parameters->get('limit')); // TODO this code is duplicated in the V2 Autocomplete controller, which means this code is due to be deprecated. $defaultCurrency = app('amount')->getDefaultCurrency(); @@ -101,7 +96,7 @@ class AccountController extends Controller ); } - $return[] = [ + $return[] = [ 'id' => (string)$account->id, 'name' => $account->name, 'name_with_balance' => $nameWithBalance, @@ -117,10 +112,10 @@ class AccountController extends Controller // custom order. usort( $return, - function ($a, $b) { + static function (array $left, array $right) { $order = [AccountType::ASSET, AccountType::REVENUE, AccountType::EXPENSE]; - $posA = array_search($a['type'], $order, true); - $posB = array_search($b['type'], $order, true); + $posA = (int)array_search($left['type'], $order, true); + $posB = (int)array_search($right['type'], $order, true); return $posA - $posB; } diff --git a/app/Api/V1/Controllers/Autocomplete/BillController.php b/app/Api/V1/Controllers/Autocomplete/BillController.php index 542fd4a25f..be64d6fd96 100644 --- a/app/Api/V1/Controllers/Autocomplete/BillController.php +++ b/app/Api/V1/Controllers/Autocomplete/BillController.php @@ -58,10 +58,6 @@ class BillController extends Controller /** * Documentation for this endpoint is at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBillsAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function bills(AutocompleteRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Autocomplete/BudgetController.php b/app/Api/V1/Controllers/Autocomplete/BudgetController.php index f3334df101..0674e2dd2e 100644 --- a/app/Api/V1/Controllers/Autocomplete/BudgetController.php +++ b/app/Api/V1/Controllers/Autocomplete/BudgetController.php @@ -58,10 +58,6 @@ class BudgetController extends Controller /** * Documentation for this endpoint is at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBudgetsAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function budgets(AutocompleteRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Autocomplete/CategoryController.php b/app/Api/V1/Controllers/Autocomplete/CategoryController.php index a35b7e11a6..6a1b104aae 100644 --- a/app/Api/V1/Controllers/Autocomplete/CategoryController.php +++ b/app/Api/V1/Controllers/Autocomplete/CategoryController.php @@ -58,10 +58,6 @@ class CategoryController extends Controller /** * Documentation for this endpoint is at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCategoriesAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function categories(AutocompleteRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Autocomplete/CurrencyController.php b/app/Api/V1/Controllers/Autocomplete/CurrencyController.php index 2250b32f33..abf6b7b468 100644 --- a/app/Api/V1/Controllers/Autocomplete/CurrencyController.php +++ b/app/Api/V1/Controllers/Autocomplete/CurrencyController.php @@ -26,7 +26,7 @@ namespace FireflyIII\Api\V1\Controllers\Autocomplete; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; @@ -58,10 +58,6 @@ class CurrencyController extends Controller /** * Documentation for this endpoint is at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCurrenciesAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function currencies(AutocompleteRequest $request): JsonResponse { @@ -87,9 +83,6 @@ class CurrencyController extends Controller * Documentation for this endpoint is at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCurrenciesCodeAC * - * @param AutocompleteRequest $request - * - * @return JsonResponse * @deprecated */ public function currenciesWithCode(AutocompleteRequest $request): JsonResponse diff --git a/app/Api/V1/Controllers/Autocomplete/ObjectGroupController.php b/app/Api/V1/Controllers/Autocomplete/ObjectGroupController.php index 67cd318e38..e76794da2c 100644 --- a/app/Api/V1/Controllers/Autocomplete/ObjectGroupController.php +++ b/app/Api/V1/Controllers/Autocomplete/ObjectGroupController.php @@ -58,10 +58,6 @@ class ObjectGroupController extends Controller /** * Documentation for this endpoint is at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getObjectGroupsAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function objectGroups(AutocompleteRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Autocomplete/PiggyBankController.php b/app/Api/V1/Controllers/Autocomplete/PiggyBankController.php index 74ac1c0498..3474edd3a1 100644 --- a/app/Api/V1/Controllers/Autocomplete/PiggyBankController.php +++ b/app/Api/V1/Controllers/Autocomplete/PiggyBankController.php @@ -62,10 +62,6 @@ class PiggyBankController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getPiggiesAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function piggyBanks(AutocompleteRequest $request): JsonResponse { @@ -97,10 +93,6 @@ class PiggyBankController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getPiggiesBalanceAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function piggyBanksWithBalance(AutocompleteRequest $request): JsonResponse { @@ -108,6 +100,7 @@ class PiggyBankController extends Controller $piggies = $this->piggyRepository->searchPiggyBank($data['query'], $this->parameters->get('limit')); $defaultCurrency = app('amount')->getDefaultCurrency(); $response = []; + /** @var PiggyBank $piggy */ foreach ($piggies as $piggy) { $currency = $this->accountRepository->getAccountCurrency($piggy->account) ?? $defaultCurrency; diff --git a/app/Api/V1/Controllers/Autocomplete/RecurrenceController.php b/app/Api/V1/Controllers/Autocomplete/RecurrenceController.php index 74c1262ae4..cd60887127 100644 --- a/app/Api/V1/Controllers/Autocomplete/RecurrenceController.php +++ b/app/Api/V1/Controllers/Autocomplete/RecurrenceController.php @@ -56,10 +56,6 @@ class RecurrenceController extends Controller /** * This endpoint is documented at: * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getRecurringAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function recurring(AutocompleteRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Autocomplete/RuleController.php b/app/Api/V1/Controllers/Autocomplete/RuleController.php index 0f45c8fd44..a396fd4d4f 100644 --- a/app/Api/V1/Controllers/Autocomplete/RuleController.php +++ b/app/Api/V1/Controllers/Autocomplete/RuleController.php @@ -55,10 +55,6 @@ class RuleController extends Controller /** * This endpoint is documented at: * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getRulesAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function rules(AutocompleteRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Autocomplete/RuleGroupController.php b/app/Api/V1/Controllers/Autocomplete/RuleGroupController.php index c3c1af2503..7ea36c83dc 100644 --- a/app/Api/V1/Controllers/Autocomplete/RuleGroupController.php +++ b/app/Api/V1/Controllers/Autocomplete/RuleGroupController.php @@ -55,10 +55,6 @@ class RuleGroupController extends Controller /** * This endpoint is documented at: * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getRuleGroupsAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function ruleGroups(AutocompleteRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Autocomplete/TagController.php b/app/Api/V1/Controllers/Autocomplete/TagController.php index c0bf758e75..c79e4feb4e 100644 --- a/app/Api/V1/Controllers/Autocomplete/TagController.php +++ b/app/Api/V1/Controllers/Autocomplete/TagController.php @@ -58,17 +58,13 @@ class TagController extends Controller /** * This endpoint is documented at: * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTagAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function tags(AutocompleteRequest $request): JsonResponse { - $data = $request->getData(); - + $data = $request->getData(); $result = $this->repository->searchTags($data['query'], $this->parameters->get('limit')); $array = []; + /** @var Tag $tag */ foreach ($result as $tag) { $array[] = [ diff --git a/app/Api/V1/Controllers/Autocomplete/TransactionController.php b/app/Api/V1/Controllers/Autocomplete/TransactionController.php index a8033ed624..0abe42e50d 100644 --- a/app/Api/V1/Controllers/Autocomplete/TransactionController.php +++ b/app/Api/V1/Controllers/Autocomplete/TransactionController.php @@ -63,15 +63,11 @@ class TransactionController extends Controller /** * This endpoint is documented at: * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTransactionsAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function transactions(AutocompleteRequest $request): JsonResponse { - $data = $request->getData(); - $result = $this->repository->searchJournalDescriptions($data['query'], $this->parameters->get('limit')); + $data = $request->getData(); + $result = $this->repository->searchJournalDescriptions($data['query'], $this->parameters->get('limit')); // limit and unique $filtered = $result->unique('description'); @@ -93,10 +89,6 @@ class TransactionController extends Controller /** * This endpoint is documented at: * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTransactionsIDAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function transactionsWithID(AutocompleteRequest $request): JsonResponse { @@ -117,7 +109,7 @@ class TransactionController extends Controller } // limit and unique - $array = []; + $array = []; /** @var TransactionJournal $journal */ foreach ($result as $journal) { diff --git a/app/Api/V1/Controllers/Autocomplete/TransactionTypeController.php b/app/Api/V1/Controllers/Autocomplete/TransactionTypeController.php index 66f1f23a8f..272a23afa2 100644 --- a/app/Api/V1/Controllers/Autocomplete/TransactionTypeController.php +++ b/app/Api/V1/Controllers/Autocomplete/TransactionTypeController.php @@ -54,10 +54,6 @@ class TransactionTypeController extends Controller /** * This endpoint is documented at * * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getTransactionTypesAC - * - * @param AutocompleteRequest $request - * - * @return JsonResponse */ public function transactionTypes(AutocompleteRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Chart/AccountController.php b/app/Api/V1/Controllers/Chart/AccountController.php index 5c554c17f2..de628ffcfb 100644 --- a/app/Api/V1/Controllers/Chart/AccountController.php +++ b/app/Api/V1/Controllers/Chart/AccountController.php @@ -30,14 +30,11 @@ use FireflyIII\Api\V1\Requests\Data\DateRequest; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; +use FireflyIII\Models\Preference; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\ApiSupport; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class AccountController @@ -46,13 +43,10 @@ class AccountController extends Controller { use ApiSupport; - private CurrencyRepositoryInterface $currencyRepository; - private AccountRepositoryInterface $repository; + private AccountRepositoryInterface $repository; /** * AccountController constructor. - * - */ public function __construct() { @@ -64,9 +58,6 @@ class AccountController extends Controller $this->repository = app(AccountRepositoryInterface::class); $this->repository->setUser($user); - $this->currencyRepository = app(CurrencyRepositoryInterface::class); - $this->currencyRepository->setUser($user); - return $next($request); } ); @@ -76,25 +67,23 @@ class AccountController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/charts/getChartAccountOverview * - * @param DateRequest $request - * - * @return JsonResponse * @throws FireflyException - * @throws JsonException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function overview(DateRequest $request): JsonResponse { // parameters for chart: - $dates = $request->getAll(); + $dates = $request->getAll(); + /** @var Carbon $start */ - $start = $dates['start']; + $start = $dates['start']; + /** @var Carbon $end */ - $end = $dates['end']; + $end = $dates['end']; // user's preferences $defaultSet = $this->repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray(); + + /** @var Preference $frontPage */ $frontPage = app('preferences')->get('frontPageAccounts', $defaultSet); $default = app('amount')->getDefaultCurrency(); @@ -103,17 +92,17 @@ class AccountController extends Controller $frontPage->save(); } - // get accounts: - $accounts = $this->repository->getAccountsById($frontPage->data); - $chartData = []; + $accounts = $this->repository->getAccountsById($frontPage->data); + $chartData = []; + /** @var Account $account */ foreach ($accounts as $account) { - $currency = $this->repository->getAccountCurrency($account); + $currency = $this->repository->getAccountCurrency($account); if (null === $currency) { $currency = $default; } - $currentSet = [ + $currentSet = [ 'label' => $account->name, 'currency_id' => (string)$currency->id, 'currency_code' => $currency->code, @@ -129,16 +118,16 @@ class AccountController extends Controller $currentStart = clone $start; $range = app('steam')->balanceInRange($account, $start, clone $end); // 2022-10-11 this method no longer converts to float. - $previous = array_values($range)[0]; + $previous = array_values($range)[0]; while ($currentStart <= $end) { - $format = $currentStart->format('Y-m-d'); - $label = $currentStart->toAtomString(); - $balance = array_key_exists($format, $range) ? $range[$format] : $previous; - $previous = $balance; + $format = $currentStart->format('Y-m-d'); + $label = $currentStart->toAtomString(); + $balance = array_key_exists($format, $range) ? $range[$format] : $previous; + $previous = $balance; $currentStart->addDay(); $currentSet['entries'][$label] = $balance; } - $chartData[] = $currentSet; + $chartData[] = $currentSet; } return response()->json($chartData); diff --git a/app/Api/V1/Controllers/Controller.php b/app/Api/V1/Controllers/Controller.php index 1e2b2b45d7..74160af153 100644 --- a/app/Api/V1/Controllers/Controller.php +++ b/app/Api/V1/Controllers/Controller.php @@ -27,22 +27,22 @@ namespace FireflyIII\Api\V1\Controllers; use Carbon\Carbon; use Carbon\Exceptions\InvalidDateException; use Carbon\Exceptions\InvalidFormatException; +use FireflyIII\Models\Preference; +use FireflyIII\User; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; -use Illuminate\Support\Facades\Log; use League\Fractal\Manager; use League\Fractal\Serializer\JsonApiSerializer; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\ParameterBag; /** * Class Controller. * - + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings(PHPMD.NumberOfChildren) */ abstract class Controller extends BaseController { @@ -50,7 +50,9 @@ abstract class Controller extends BaseController use DispatchesJobs; use ValidatesRequests; - protected const CONTENT_TYPE = 'application/vnd.api+json'; + protected const string CONTENT_TYPE = 'application/vnd.api+json'; + + /** @var array */ protected array $allowedSort; protected ParameterBag $parameters; @@ -76,45 +78,42 @@ abstract class Controller extends BaseController /** * Method to grab all parameters from the URL. - * - * @return ParameterBag - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ private function getParameters(): ParameterBag { - $bag = new ParameterBag(); - $page = (int)request()->get('page'); + $bag = new ParameterBag(); + $page = (int)request()->get('page'); if ($page < 1) { $page = 1; } - if ($page > pow(2, 16)) { - $page = pow(2, 16); + if ($page > 2 ** 16) { + $page = 2 ** 16; } $bag->set('page', $page); // some date fields: - $dates = ['start', 'end', 'date']; + $dates = ['start', 'end', 'date']; foreach ($dates as $field) { $date = null; + try { $date = request()->query->get($field); } catch (BadRequestException $e) { - Log::error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $field)); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $field)); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $value = null; } - $obj = null; + $obj = null; if (null !== $date) { try { - $obj = Carbon::parse($date); - } catch (InvalidDateException | InvalidFormatException $e) { + $obj = Carbon::parse((string)$date); + } catch (InvalidDateException|InvalidFormatException $e) { // don't care app('log')->warning( sprintf( 'Ignored invalid date "%s" in API controller parameter check: %s', - substr($date, 0, 20), + substr((string)$date, 0, 20), $e->getMessage() ) ); @@ -129,17 +128,23 @@ abstract class Controller extends BaseController try { $value = request()->query->get($integer); } catch (BadRequestException $e) { - Log::error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $integer)); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $integer)); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $value = null; } if (null !== $value) { $bag->set($integer, (int)$value); } - if (null === $value && 'limit' === $integer && auth()->check()) { + if (null === $value + && 'limit' === $integer // @phpstan-ignore-line + && auth()->check()) { // set default for user: - $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; + /** @var User $user */ + $user = auth()->user(); + + /** @var Preference $pageSize */ + $pageSize = (int)app('preferences')->getForUser($user, 'listPageSize', 50)->data; $bag->set($integer, $pageSize); } } @@ -148,26 +153,22 @@ abstract class Controller extends BaseController return $this->getSortParameters($bag); } - /** - * @param ParameterBag $bag - * - * @return ParameterBag - */ private function getSortParameters(ParameterBag $bag): ParameterBag { $sortParameters = []; + try { $param = (string)request()->query->get('sort'); } catch (BadRequestException $e) { - Log::error('Request field "sort" contains a non-scalar value. Value set to NULL.'); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error('Request field "sort" contains a non-scalar value. Value set to NULL.'); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $param = ''; } if ('' === $param) { return $bag; } - $parts = explode(',', $param); + $parts = explode(',', $param); foreach ($parts as $part) { $part = trim($part); $direction = 'asc'; @@ -186,8 +187,6 @@ abstract class Controller extends BaseController /** * Method to help build URL's. - * - * @return string */ final protected function buildParams(): string { @@ -199,22 +198,20 @@ abstract class Controller extends BaseController } if ($value instanceof Carbon) { $params[$key] = $value->format('Y-m-d'); + continue; } $params[$key] = $value; } - return $return . http_build_query($params); + return $return.http_build_query($params); } - /** - * @return Manager - */ final protected function getManager(): Manager { // create some objects: $manager = new Manager(); - $baseUrl = request()->getSchemeAndHttpHost() . '/api/v1'; + $baseUrl = request()->getSchemeAndHttpHost().'/api/v1'; $manager->setSerializer(new JsonApiSerializer($baseUrl)); return $manager; diff --git a/app/Api/V1/Controllers/Data/Bulk/TransactionController.php b/app/Api/V1/Controllers/Data/Bulk/TransactionController.php index 56afbde1cd..869c17ae87 100644 --- a/app/Api/V1/Controllers/Data/Bulk/TransactionController.php +++ b/app/Api/V1/Controllers/Data/Bulk/TransactionController.php @@ -44,9 +44,6 @@ class TransactionController extends Controller { private AccountRepositoryInterface $repository; - /** - * - */ public function __construct() { parent::__construct(); @@ -63,10 +60,6 @@ class TransactionController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/bulkUpdateTransactions - * - * @param TransactionRequest $request - * - * @return JsonResponse */ public function update(TransactionRequest $request): JsonResponse { @@ -76,12 +69,12 @@ class TransactionController extends Controller // this deserves better code, but for now a loop of basic if-statements // to respond to what is in the $query. // this is OK because only one thing can be in the query at the moment. - if ($this->updatesTransactionAccount($params)) { + if ($this->isUpdateTransactionAccount($params)) { $original = $this->repository->find((int)$params['where']['account_id']); $destination = $this->repository->find((int)$params['update']['account_id']); /** @var AccountDestroyService $service */ - $service = app(AccountDestroyService::class); + $service = app(AccountDestroyService::class); $service->moveTransactions($original, $destination); } @@ -89,11 +82,9 @@ class TransactionController extends Controller } /** - * @param array $params - * - * @return bool + * @param array> $params */ - private function updatesTransactionAccount(array $params): bool + private function isUpdateTransactionAccount(array $params): bool { return array_key_exists('account_id', $params['where']) && array_key_exists('account_id', $params['update']); } diff --git a/app/Api/V1/Controllers/Data/DestroyController.php b/app/Api/V1/Controllers/Data/DestroyController.php index 8b22e7c673..f0f044b768 100644 --- a/app/Api/V1/Controllers/Data/DestroyController.php +++ b/app/Api/V1/Controllers/Data/DestroyController.php @@ -58,160 +58,53 @@ class DestroyController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/destroyData * - * @param DestroyRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function destroy(DestroyRequest $request): JsonResponse { - $objects = $request->getObjects(); - $this->unused = $request->boolean('unused', false); - switch ($objects) { - default: - throw new FireflyException(sprintf('200033: This endpoint can\'t handle object "%s"', $objects)); - case 'budgets': - $this->destroyBudgets(); - break; - case 'bills': - $this->destroyBills(); - break; - case 'piggy_banks': - $this->destroyPiggyBanks(); - break; - case 'rules': - $this->destroyRules(); - break; - case 'recurring': - $this->destroyRecurringTransactions(); - break; - case 'categories': - $this->destroyCategories(); - break; - case 'tags': - $this->destroyTags(); - break; - case 'object_groups': - $this->destroyObjectGroups(); - break; - case 'not_assets_liabilities': - $this->destroyAccounts( - [ - AccountType::BENEFICIARY, - AccountType::CASH, - AccountType::CREDITCARD, - AccountType::DEFAULT, - AccountType::EXPENSE, - AccountType::IMPORT, - AccountType::INITIAL_BALANCE, - AccountType::LIABILITY_CREDIT, - AccountType::RECONCILIATION, - AccountType::REVENUE, - ] - ); - break; - case 'accounts': - $this->destroyAccounts( - [ - AccountType::ASSET, - AccountType::BENEFICIARY, - AccountType::CASH, - AccountType::CREDITCARD, - AccountType::DEBT, - AccountType::DEFAULT, - AccountType::EXPENSE, - AccountType::IMPORT, - AccountType::INITIAL_BALANCE, - AccountType::LIABILITY_CREDIT, - AccountType::LOAN, - AccountType::MORTGAGE, - AccountType::RECONCILIATION, - AccountType::REVENUE, - ] - ); - break; - case 'asset_accounts': - $this->destroyAccounts( - [ - AccountType::ASSET, - AccountType::DEFAULT, - ] - ); - break; - case 'expense_accounts': - $this->destroyAccounts( - [ - AccountType::BENEFICIARY, - AccountType::EXPENSE, - ] - ); - break; - case 'revenue_accounts': - $this->destroyAccounts( - [ - AccountType::REVENUE, - ] - ); - break; - case 'liabilities': - $this->destroyAccounts( - [ - AccountType::DEBT, - AccountType::LOAN, - AccountType::MORTGAGE, - AccountType::CREDITCARD, - ] - ); - break; - case 'transactions': - $this->destroyTransactions( - [ - TransactionType::WITHDRAWAL, - TransactionType::DEPOSIT, - TransactionType::TRANSFER, - TransactionType::RECONCILIATION, - TransactionType::OPENING_BALANCE, - ] - ); - break; - case 'withdrawals': - $this->destroyTransactions( - [ - TransactionType::WITHDRAWAL, - ] - ); - break; - case 'deposits': - $this->destroyTransactions( - [ - TransactionType::DEPOSIT, - ] - ); - break; - case 'transfers': - $this->destroyTransactions( - [ - TransactionType::TRANSFER, - ] - ); - break; - } + $objects = $request->getObjects(); + $this->unused = $request->boolean('unused', false); + + $allExceptAssets = [AccountType::BENEFICIARY, AccountType::CASH, AccountType::CREDITCARD, AccountType::DEFAULT, AccountType::EXPENSE, AccountType::IMPORT, AccountType::INITIAL_BALANCE, AccountType::LIABILITY_CREDIT, AccountType::RECONCILIATION, AccountType::REVENUE]; + $all = [AccountType::ASSET, AccountType::BENEFICIARY, AccountType::CASH, AccountType::CREDITCARD, AccountType::DEBT, AccountType::DEFAULT, AccountType::EXPENSE, AccountType::IMPORT, AccountType::INITIAL_BALANCE, AccountType::LIABILITY_CREDIT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::RECONCILIATION]; + $liabilities = [AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD]; + $transactions = [TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER, TransactionType::RECONCILIATION]; + + match ($objects) { + 'budgets' => $this->destroyBudgets(), + 'bills' => $this->destroyBills(), + 'piggy_banks' => $this->destroyPiggyBanks(), + 'rules' => $this->destroyRules(), + 'recurring' => $this->destroyRecurringTransactions(), + 'categories' => $this->destroyCategories(), + 'tags' => $this->destroyTags(), + 'object_groups' => $this->destroyObjectGroups(), + 'not_assets_liabilities' => $this->destroyAccounts($allExceptAssets), + 'accounts' => $this->destroyAccounts($all), + 'asset_accounts' => $this->destroyAccounts([AccountType::ASSET, AccountType::DEFAULT]), + 'expense_accounts' => $this->destroyAccounts([AccountType::BENEFICIARY, AccountType::EXPENSE]), + 'revenue_accounts' => $this->destroyAccounts([AccountType::REVENUE]), + 'liabilities' => $this->destroyAccounts($liabilities), + 'transactions' => $this->destroyTransactions($transactions), + 'withdrawals' => $this->destroyTransactions([TransactionType::WITHDRAWAL]), + 'deposits' => $this->destroyTransactions([TransactionType::DEPOSIT]), + 'transfers' => $this->destroyTransactions([TransactionType::TRANSFER]), + default => throw new FireflyException(sprintf('200033: This endpoint can\'t handle object "%s"', $objects)), + }; + app('preferences')->mark(); return response()->json([], 204); } - /** - * - */ private function destroyBudgets(): void { /** @var AvailableBudgetRepositoryInterface $abRepository */ - $abRepository = app(AvailableBudgetRepositoryInterface::class); + $abRepository = app(AvailableBudgetRepositoryInterface::class); $abRepository->destroyAll(); /** @var BudgetLimitRepositoryInterface $blRepository */ - $blRepository = app(BudgetLimitRepositoryInterface::class); + $blRepository = app(BudgetLimitRepositoryInterface::class); $blRepository->destroyAll(); /** @var BudgetRepositoryInterface $budgetRepository */ @@ -219,9 +112,6 @@ class DestroyController extends Controller $budgetRepository->destroyAll(); } - /** - * - */ private function destroyBills(): void { /** @var BillRepositoryInterface $repository */ @@ -229,9 +119,6 @@ class DestroyController extends Controller $repository->destroyAll(); } - /** - * - */ private function destroyPiggyBanks(): void { /** @var PiggyBankRepositoryInterface $repository */ @@ -239,9 +126,6 @@ class DestroyController extends Controller $repository->destroyAll(); } - /** - * - */ private function destroyRules(): void { /** @var RuleGroupRepositoryInterface $repository */ @@ -249,9 +133,6 @@ class DestroyController extends Controller $repository->destroyAll(); } - /** - * - */ private function destroyRecurringTransactions(): void { /** @var RecurringRepositoryInterface $repository */ @@ -259,9 +140,6 @@ class DestroyController extends Controller $repository->destroyAll(); } - /** - * - */ private function destroyCategories(): void { /** @var CategoryRepositoryInterface $categoryRepos */ @@ -269,9 +147,6 @@ class DestroyController extends Controller $categoryRepos->destroyAll(); } - /** - * - */ private function destroyTags(): void { /** @var TagRepositoryInterface $tagRepository */ @@ -279,9 +154,6 @@ class DestroyController extends Controller $tagRepository->destroyAll(); } - /** - * @return void - */ private function destroyObjectGroups(): void { /** @var ObjectGroupRepositoryInterface $repository */ @@ -290,7 +162,7 @@ class DestroyController extends Controller } /** - * @param array $types + * @param array $types */ private function destroyAccounts(array $types): void { @@ -303,19 +175,22 @@ class DestroyController extends Controller foreach ($collection as $account) { $count = $account->transactions()->count(); if (true === $this->unused && 0 === $count) { - Log::info(sprintf('Deleted unused account #%d "%s"', $account->id, $account->name)); + app('log')->info(sprintf('Deleted unused account #%d "%s"', $account->id, $account->name)); + Log::channel('audit')->info(sprintf('Deleted unused account #%d "%s"', $account->id, $account->name)); $service->destroy($account, null); + continue; } if (false === $this->unused) { - Log::info(sprintf('Deleting account #%d "%s"', $account->id, $account->name)); + app('log')->info(sprintf('Deleting account #%d "%s"', $account->id, $account->name)); + Log::channel('audit')->warning(sprintf('Deleted account #%d "%s"', $account->id, $account->name)); $service->destroy($account, null); } } } /** - * @param array $types + * @param array $types */ private function destroyTransactions(array $types): void { @@ -323,6 +198,7 @@ class DestroyController extends Controller $repository = app(JournalRepositoryInterface::class); $journals = $repository->findByType($types); $service = app(JournalDestroyService::class); + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $service->destroy($journal); diff --git a/app/Api/V1/Controllers/Data/Export/ExportController.php b/app/Api/V1/Controllers/Data/Export/ExportController.php index c722088a2e..8eda16cf8f 100644 --- a/app/Api/V1/Controllers/Data/Export/ExportController.php +++ b/app/Api/V1/Controllers/Data/Export/ExportController.php @@ -29,8 +29,6 @@ use FireflyIII\Api\V1\Requests\Data\Export\ExportRequest; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Support\Export\ExportDataGenerator; use Illuminate\Http\Response as LaravelResponse; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class ExportController @@ -59,10 +57,9 @@ class ExportController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportAccounts * - * @param ExportRequest $request - * - * @return LaravelResponse * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function accounts(ExportRequest $request): LaravelResponse { @@ -72,12 +69,7 @@ class ExportController extends Controller } /** - * @param string $key - * - * @return LaravelResponse * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ private function returnExport(string $key): LaravelResponse { @@ -90,13 +82,14 @@ class ExportController extends Controller $response ->header('Content-Description', 'File Transfer') ->header('Content-Type', 'application/octet-stream') - ->header('Content-Disposition', 'attachment; filename=' . $fileName) + ->header('Content-Disposition', 'attachment; filename='.$fileName) ->header('Content-Transfer-Encoding', 'binary') ->header('Connection', 'Keep-Alive') ->header('Expires', '0') ->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') ->header('Pragma', 'public') - ->header('Content-Length', (string)strlen($data[$key])); + ->header('Content-Length', (string)strlen($data[$key])) + ; return $response; } @@ -105,10 +98,9 @@ class ExportController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportBills * - * @param ExportRequest $request - * - * @return LaravelResponse * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function bills(ExportRequest $request): LaravelResponse { @@ -121,10 +113,9 @@ class ExportController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportBudgets * - * @param ExportRequest $request - * - * @return LaravelResponse * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function budgets(ExportRequest $request): LaravelResponse { @@ -137,10 +128,9 @@ class ExportController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportCategories * - * @param ExportRequest $request - * - * @return LaravelResponse * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function categories(ExportRequest $request): LaravelResponse { @@ -153,10 +143,9 @@ class ExportController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportPiggies * - * @param ExportRequest $request - * - * @return LaravelResponse * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function piggyBanks(ExportRequest $request): LaravelResponse { @@ -169,10 +158,9 @@ class ExportController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportRecurring * - * @param ExportRequest $request - * - * @return LaravelResponse * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function recurring(ExportRequest $request): LaravelResponse { @@ -185,10 +173,9 @@ class ExportController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportRules * - * @param ExportRequest $request - * - * @return LaravelResponse * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function rules(ExportRequest $request): LaravelResponse { @@ -201,10 +188,9 @@ class ExportController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportTags * - * @param ExportRequest $request - * - * @return LaravelResponse * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function tags(ExportRequest $request): LaravelResponse { @@ -217,9 +203,6 @@ class ExportController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/exportTransactions * - * @param ExportRequest $request - * - * @return LaravelResponse * @throws FireflyException */ public function transactions(ExportRequest $request): LaravelResponse diff --git a/app/Api/V1/Controllers/Data/PurgeController.php b/app/Api/V1/Controllers/Data/PurgeController.php index b3af771d6d..593e60c623 100644 --- a/app/Api/V1/Controllers/Data/PurgeController.php +++ b/app/Api/V1/Controllers/Data/PurgeController.php @@ -35,6 +35,7 @@ use FireflyIII\Models\RuleGroup; use FireflyIII\Models\Tag; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; +use FireflyIII\User; use Illuminate\Http\JsonResponse; /** @@ -46,11 +47,10 @@ class PurgeController extends Controller * TODO cleanup and use repositories. * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/purgeData - * - * @return JsonResponse */ public function purge(): JsonResponse { + /** @var User $user */ $user = auth()->user(); // some manual code, too lazy to call all repositories. @@ -62,8 +62,10 @@ class PurgeController extends Controller Bill::whereUserId($user->id)->onlyTrashed()->forceDelete(); // piggies - $set = PiggyBank::leftJoin('accounts', 'accounts.id', 'piggy_banks.account_id') - ->where('accounts.user_id', $user->id)->onlyTrashed()->get(['piggy_banks.*']); + $set = PiggyBank::leftJoin('accounts', 'accounts.id', 'piggy_banks.account_id') + ->where('accounts.user_id', $user->id)->onlyTrashed()->get(['piggy_banks.*']) + ; + /** @var PiggyBank $piggy */ foreach ($set as $piggy) { $piggy->forceDelete(); @@ -84,7 +86,6 @@ class PurgeController extends Controller // tags Tag::whereUserId($user->id)->onlyTrashed()->forceDelete(); - // accounts Account::whereUserId($user->id)->onlyTrashed()->forceDelete(); diff --git a/app/Api/V1/Controllers/Insight/Expense/AccountController.php b/app/Api/V1/Controllers/Insight/Expense/AccountController.php index ad9d660d5e..6649561c78 100644 --- a/app/Api/V1/Controllers/Insight/Expense/AccountController.php +++ b/app/Api/V1/Controllers/Insight/Expense/AccountController.php @@ -28,12 +28,10 @@ use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Insight\GenericRequest; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\ApiSupport; use Illuminate\Http\JsonResponse; /** - * * Class AccountController * * Shows expense information grouped or limited by date. @@ -43,27 +41,21 @@ class AccountController extends Controller { use ApiSupport; - private CurrencyRepositoryInterface $currencyRepository; private OperationsRepositoryInterface $opsRepository; private AccountRepositoryInterface $repository; /** * AccountController constructor. - * - */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { - $user = auth()->user(); - $this->repository = app(AccountRepositoryInterface::class); + $user = auth()->user(); + $this->repository = app(AccountRepositoryInterface::class); $this->repository->setUser($user); - $this->currencyRepository = app(CurrencyRepositoryInterface::class); - $this->currencyRepository->setUser($user); - $this->opsRepository = app(OperationsRepositoryInterface::class); $this->opsRepository->setUser($user); @@ -75,10 +67,6 @@ class AccountController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseAsset - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function asset(GenericRequest $request): JsonResponse { @@ -106,10 +94,6 @@ class AccountController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseExpense - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function expense(GenericRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Insight/Expense/BillController.php b/app/Api/V1/Controllers/Insight/Expense/BillController.php index a584c55913..bb88f850b1 100644 --- a/app/Api/V1/Controllers/Insight/Expense/BillController.php +++ b/app/Api/V1/Controllers/Insight/Expense/BillController.php @@ -60,18 +60,14 @@ class BillController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseBill * * Expenses per bill, possibly filtered by bill and account. - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function bill(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $bills = $request->getBills(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $bills = $request->getBills(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // get all bills: if (0 === $bills->count()) { @@ -79,7 +75,7 @@ class BillController extends Controller } // collect all expenses in this period (regardless of type) by the given bills and accounts. - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::WITHDRAWAL])->setRange($start, $end)->setSourceAccounts($accounts); $collector->setBills($bills); @@ -92,7 +88,7 @@ class BillController extends Controller $foreignKey = sprintf('%d-%d', $billId, $foreignCurrencyId); if (0 !== $currencyId) { - $response[$key] = $response[$key] ?? [ + $response[$key] ??= [ 'id' => (string)$billId, 'name' => $journal['bill_name'], 'difference' => '0', @@ -104,7 +100,7 @@ class BillController extends Controller $response[$key]['difference_float'] = (float)$response[$key]['difference']; // intentional float } if (0 !== $foreignCurrencyId) { - $response[$foreignKey] = $response[$foreignKey] ?? [ + $response[$foreignKey] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$foreignCurrencyId, @@ -123,20 +119,16 @@ class BillController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseNoBill * * Expenses for no bill filtered by account. - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function noBill(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // collect all expenses in this period (regardless of type) by the given bills and accounts. - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::WITHDRAWAL])->setRange($start, $end)->setSourceAccounts($accounts); $collector->withoutBill(); @@ -147,7 +139,7 @@ class BillController extends Controller $foreignCurrencyId = (int)$journal['foreign_currency_id']; if (0 !== $currencyId) { - $response[$currencyId] = $response[$currencyId] ?? [ + $response[$currencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$currencyId, @@ -157,7 +149,7 @@ class BillController extends Controller $response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; // intentional float } if (0 !== $foreignCurrencyId) { - $response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [ + $response[$foreignCurrencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$foreignCurrencyId, diff --git a/app/Api/V1/Controllers/Insight/Expense/BudgetController.php b/app/Api/V1/Controllers/Insight/Expense/BudgetController.php index 27e600482b..475ea2f5fb 100644 --- a/app/Api/V1/Controllers/Insight/Expense/BudgetController.php +++ b/app/Api/V1/Controllers/Insight/Expense/BudgetController.php @@ -43,8 +43,6 @@ class BudgetController extends Controller /** * AccountController constructor. - * - */ public function __construct() { @@ -67,10 +65,6 @@ class BudgetController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseBudget - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function budget(GenericRequest $request): JsonResponse { @@ -82,9 +76,11 @@ class BudgetController extends Controller if (0 === $budgets->count()) { $budgets = $this->repository->getActiveBudgets(); } + /** @var Budget $budget */ foreach ($budgets as $budget) { $expenses = $this->opsRepository->sumExpenses($start, $end, $assetAccounts, new Collection([$budget])); + /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ @@ -104,10 +100,6 @@ class BudgetController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseNoBudget - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function noBudget(GenericRequest $request): JsonResponse { @@ -116,6 +108,7 @@ class BudgetController extends Controller $assetAccounts = $request->getAssetAccounts(); $result = []; $expenses = $this->noRepository->sumExpenses($start, $end, $assetAccounts); + /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ diff --git a/app/Api/V1/Controllers/Insight/Expense/CategoryController.php b/app/Api/V1/Controllers/Insight/Expense/CategoryController.php index b7972097f7..5ee6e77378 100644 --- a/app/Api/V1/Controllers/Insight/Expense/CategoryController.php +++ b/app/Api/V1/Controllers/Insight/Expense/CategoryController.php @@ -44,8 +44,6 @@ class CategoryController extends Controller /** * AccountController constructor. - * - */ public function __construct() { @@ -68,10 +66,6 @@ class CategoryController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferCategory - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function category(GenericRequest $request): JsonResponse { @@ -83,9 +77,11 @@ class CategoryController extends Controller if (0 === $categories->count()) { $categories = $this->repository->getCategories(); } + /** @var Category $category */ foreach ($categories as $category) { $expenses = $this->opsRepository->sumExpenses($start, $end, $assetAccounts, new Collection([$category])); + /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ @@ -105,10 +101,6 @@ class CategoryController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferNoCategory - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function noCategory(GenericRequest $request): JsonResponse { @@ -117,6 +109,7 @@ class CategoryController extends Controller $assetAccounts = $request->getAssetAccounts(); $result = []; $expenses = $this->noRepository->sumExpenses($start, $end, $assetAccounts); + /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ diff --git a/app/Api/V1/Controllers/Insight/Expense/PeriodController.php b/app/Api/V1/Controllers/Insight/Expense/PeriodController.php index eb583d0693..ad708ecd2d 100644 --- a/app/Api/V1/Controllers/Insight/Expense/PeriodController.php +++ b/app/Api/V1/Controllers/Insight/Expense/PeriodController.php @@ -37,20 +37,16 @@ class PeriodController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseTotal - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function total(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // collect all expenses in this period (regardless of type) - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::WITHDRAWAL])->setRange($start, $end)->setSourceAccounts($accounts); $genericSet = $collector->getExtractedJournals(); foreach ($genericSet as $journal) { @@ -58,7 +54,7 @@ class PeriodController extends Controller $foreignCurrencyId = (int)$journal['foreign_currency_id']; if (0 !== $currencyId) { - $response[$currencyId] = $response[$currencyId] ?? [ + $response[$currencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$currencyId, @@ -68,7 +64,7 @@ class PeriodController extends Controller $response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; // intentional float } if (0 !== $foreignCurrencyId) { - $response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [ + $response[$foreignCurrencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$foreignCurrencyId, diff --git a/app/Api/V1/Controllers/Insight/Expense/TagController.php b/app/Api/V1/Controllers/Insight/Expense/TagController.php index 9068f402f6..b2b2b6b4ea 100644 --- a/app/Api/V1/Controllers/Insight/Expense/TagController.php +++ b/app/Api/V1/Controllers/Insight/Expense/TagController.php @@ -59,20 +59,16 @@ class TagController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseNoTag * * Expenses for no tag filtered by account. - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function noTag(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // collect all expenses in this period (regardless of type) by the given bills and accounts. - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::WITHDRAWAL])->setRange($start, $end)->setSourceAccounts($accounts); $collector->withoutTags(); @@ -83,7 +79,7 @@ class TagController extends Controller $foreignCurrencyId = (int)$journal['foreign_currency_id']; if (0 !== $currencyId) { - $response[$currencyId] = $response[$currencyId] ?? [ + $response[$currencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$currencyId, @@ -93,7 +89,7 @@ class TagController extends Controller $response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; // float but on purpose. } if (0 !== $foreignCurrencyId) { - $response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [ + $response[$foreignCurrencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$foreignCurrencyId, @@ -112,18 +108,14 @@ class TagController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightExpenseTag * * Expenses per tag, possibly filtered by tag and account. - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function tag(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $tags = $request->getTags(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $tags = $request->getTags(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // get all tags: if (0 === $tags->count()) { @@ -131,10 +123,11 @@ class TagController extends Controller } // collect all expenses in this period (regardless of type) by the given bills and accounts. - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::WITHDRAWAL])->setRange($start, $end)->setSourceAccounts($accounts); $collector->setTags($tags); $genericSet = $collector->getExtractedJournals(); + /** @var array $journal */ foreach ($genericSet as $journal) { $currencyId = (int)$journal['currency_id']; @@ -148,7 +141,7 @@ class TagController extends Controller // on currency ID if (0 !== $currencyId) { - $response[$key] = $response[$key] ?? [ + $response[$key] ??= [ 'id' => (string)$tagId, 'name' => $tag['name'], 'difference' => '0', diff --git a/app/Api/V1/Controllers/Insight/Income/AccountController.php b/app/Api/V1/Controllers/Insight/Income/AccountController.php index 5d8aabc7f3..17e9d34205 100644 --- a/app/Api/V1/Controllers/Insight/Income/AccountController.php +++ b/app/Api/V1/Controllers/Insight/Income/AccountController.php @@ -28,12 +28,10 @@ use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Insight\GenericRequest; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\ApiSupport; use Illuminate\Http\JsonResponse; /** - * * Class AccountController * * Shows income information grouped or limited by date. @@ -43,27 +41,21 @@ class AccountController extends Controller { use ApiSupport; - private CurrencyRepositoryInterface $currencyRepository; private OperationsRepositoryInterface $opsRepository; private AccountRepositoryInterface $repository; /** * AccountController constructor. - * - */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { - $user = auth()->user(); - $this->repository = app(AccountRepositoryInterface::class); + $user = auth()->user(); + $this->repository = app(AccountRepositoryInterface::class); $this->repository->setUser($user); - $this->currencyRepository = app(CurrencyRepositoryInterface::class); - $this->currencyRepository->setUser($user); - $this->opsRepository = app(OperationsRepositoryInterface::class); $this->opsRepository->setUser($user); @@ -75,10 +67,6 @@ class AccountController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeAsset - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function asset(GenericRequest $request): JsonResponse { @@ -87,6 +75,7 @@ class AccountController extends Controller $assetAccounts = $request->getAssetAccounts(); $income = $this->opsRepository->sumIncomeByDestination($start, $end, $assetAccounts); $result = []; + /** @var array $entry */ foreach ($income as $entry) { $result[] = [ @@ -105,10 +94,6 @@ class AccountController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeRevenue - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function revenue(GenericRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Insight/Income/CategoryController.php b/app/Api/V1/Controllers/Insight/Income/CategoryController.php index f992540f1b..1f989dfe81 100644 --- a/app/Api/V1/Controllers/Insight/Income/CategoryController.php +++ b/app/Api/V1/Controllers/Insight/Income/CategoryController.php @@ -44,8 +44,6 @@ class CategoryController extends Controller /** * AccountController constructor. - * - */ public function __construct() { @@ -68,10 +66,6 @@ class CategoryController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeCategory - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function category(GenericRequest $request): JsonResponse { @@ -83,9 +77,11 @@ class CategoryController extends Controller if (0 === $categories->count()) { $categories = $this->repository->getCategories(); } + /** @var Category $category */ foreach ($categories as $category) { $expenses = $this->opsRepository->sumIncome($start, $end, $assetAccounts, new Collection([$category])); + /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ @@ -105,10 +101,6 @@ class CategoryController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeNoCategory - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function noCategory(GenericRequest $request): JsonResponse { @@ -117,6 +109,7 @@ class CategoryController extends Controller $assetAccounts = $request->getAssetAccounts(); $result = []; $expenses = $this->noRepository->sumIncome($start, $end, $assetAccounts); + /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ diff --git a/app/Api/V1/Controllers/Insight/Income/PeriodController.php b/app/Api/V1/Controllers/Insight/Income/PeriodController.php index cff22e7cbb..c207625407 100644 --- a/app/Api/V1/Controllers/Insight/Income/PeriodController.php +++ b/app/Api/V1/Controllers/Insight/Income/PeriodController.php @@ -37,20 +37,16 @@ class PeriodController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeTotal - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function total(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // collect all expenses in this period (regardless of type) - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::DEPOSIT])->setRange($start, $end)->setDestinationAccounts($accounts); $genericSet = $collector->getExtractedJournals(); foreach ($genericSet as $journal) { @@ -58,7 +54,7 @@ class PeriodController extends Controller $foreignCurrencyId = (int)$journal['foreign_currency_id']; if (0 !== $currencyId) { - $response[$currencyId] = $response[$currencyId] ?? [ + $response[$currencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$currencyId, @@ -68,7 +64,7 @@ class PeriodController extends Controller $response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; // float but on purpose. } if (0 !== $foreignCurrencyId) { - $response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [ + $response[$foreignCurrencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$foreignCurrencyId, diff --git a/app/Api/V1/Controllers/Insight/Income/TagController.php b/app/Api/V1/Controllers/Insight/Income/TagController.php index 87cb0bb4b3..ce35e5773c 100644 --- a/app/Api/V1/Controllers/Insight/Income/TagController.php +++ b/app/Api/V1/Controllers/Insight/Income/TagController.php @@ -60,20 +60,16 @@ class TagController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeTag * * Expenses for no tag filtered by account. - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function noTag(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // collect all expenses in this period (regardless of type) by the given bills and accounts. - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::DEPOSIT])->setRange($start, $end)->setDestinationAccounts($accounts); $collector->withoutTags(); @@ -84,7 +80,7 @@ class TagController extends Controller $foreignCurrencyId = (int)$journal['foreign_currency_id']; if (0 !== $currencyId) { - $response[$currencyId] = $response[$currencyId] ?? [ + $response[$currencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$currencyId, @@ -94,7 +90,7 @@ class TagController extends Controller $response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; } if (0 !== $foreignCurrencyId) { - $response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [ + $response[$foreignCurrencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$foreignCurrencyId, @@ -116,18 +112,14 @@ class TagController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightIncomeNoTag * * Expenses per tag, possibly filtered by tag and account. - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function tag(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $tags = $request->getTags(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $tags = $request->getTags(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // get all tags: if (0 === $tags->count()) { @@ -135,10 +127,11 @@ class TagController extends Controller } // collect all expenses in this period (regardless of type) by the given bills and accounts. - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::DEPOSIT])->setRange($start, $end)->setDestinationAccounts($accounts); $collector->setTags($tags); $genericSet = $collector->getExtractedJournals(); + /** @var array $journal */ foreach ($genericSet as $journal) { $currencyId = (int)$journal['currency_id']; @@ -152,7 +145,7 @@ class TagController extends Controller // on currency ID if (0 !== $currencyId) { - $response[$key] = $response[$key] ?? [ + $response[$key] ??= [ 'id' => (string)$tagId, 'name' => $tag['name'], 'difference' => '0', diff --git a/app/Api/V1/Controllers/Insight/Transfer/AccountController.php b/app/Api/V1/Controllers/Insight/Transfer/AccountController.php index 09d1fc2b8b..95fff5b468 100644 --- a/app/Api/V1/Controllers/Insight/Transfer/AccountController.php +++ b/app/Api/V1/Controllers/Insight/Transfer/AccountController.php @@ -40,8 +40,6 @@ class AccountController extends Controller /** * AccountController constructor. - * - */ public function __construct() { @@ -60,10 +58,6 @@ class AccountController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransfers - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function asset(GenericRequest $request): JsonResponse { diff --git a/app/Api/V1/Controllers/Insight/Transfer/CategoryController.php b/app/Api/V1/Controllers/Insight/Transfer/CategoryController.php index f88bb8dd75..12c4f02f34 100644 --- a/app/Api/V1/Controllers/Insight/Transfer/CategoryController.php +++ b/app/Api/V1/Controllers/Insight/Transfer/CategoryController.php @@ -43,8 +43,6 @@ class CategoryController extends Controller /** * AccountController constructor. - * - */ public function __construct() { @@ -67,10 +65,6 @@ class CategoryController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferCategory - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function category(GenericRequest $request): JsonResponse { @@ -82,9 +76,11 @@ class CategoryController extends Controller if (0 === $categories->count()) { $categories = $this->repository->getCategories(); } + /** @var Category $category */ foreach ($categories as $category) { $expenses = $this->opsRepository->sumTransfers($start, $end, $assetAccounts, new Collection([$category])); + /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ @@ -104,10 +100,6 @@ class CategoryController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferNoCategory - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function noCategory(GenericRequest $request): JsonResponse { @@ -116,6 +108,7 @@ class CategoryController extends Controller $assetAccounts = $request->getAssetAccounts(); $result = []; $expenses = $this->noRepository->sumTransfers($start, $end, $assetAccounts); + /** @var array $expense */ foreach ($expenses as $expense) { $result[] = [ diff --git a/app/Api/V1/Controllers/Insight/Transfer/PeriodController.php b/app/Api/V1/Controllers/Insight/Transfer/PeriodController.php index fc4a35a196..6b011ec63d 100644 --- a/app/Api/V1/Controllers/Insight/Transfer/PeriodController.php +++ b/app/Api/V1/Controllers/Insight/Transfer/PeriodController.php @@ -37,20 +37,16 @@ class PeriodController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferTotal - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function total(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // collect all expenses in this period (regardless of type) - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::TRANSFER])->setRange($start, $end)->setDestinationAccounts($accounts); $genericSet = $collector->getExtractedJournals(); foreach ($genericSet as $journal) { @@ -58,7 +54,7 @@ class PeriodController extends Controller $foreignCurrencyId = (int)$journal['foreign_currency_id']; if (0 !== $currencyId) { - $response[$currencyId] = $response[$currencyId] ?? [ + $response[$currencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$currencyId, @@ -68,7 +64,7 @@ class PeriodController extends Controller $response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; } if (0 !== $foreignCurrencyId) { - $response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [ + $response[$foreignCurrencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$foreignCurrencyId, diff --git a/app/Api/V1/Controllers/Insight/Transfer/TagController.php b/app/Api/V1/Controllers/Insight/Transfer/TagController.php index e880067197..4c79f40fb7 100644 --- a/app/Api/V1/Controllers/Insight/Transfer/TagController.php +++ b/app/Api/V1/Controllers/Insight/Transfer/TagController.php @@ -57,20 +57,16 @@ class TagController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferNoTag - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function noTag(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // collect all expenses in this period (regardless of type) by the given bills and accounts. - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::TRANSFER])->setRange($start, $end)->setDestinationAccounts($accounts); $collector->withoutTags(); @@ -81,7 +77,7 @@ class TagController extends Controller $foreignCurrencyId = (int)$journal['foreign_currency_id']; if (0 !== $currencyId) { - $response[$currencyId] = $response[$currencyId] ?? [ + $response[$currencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$currencyId, @@ -91,7 +87,7 @@ class TagController extends Controller $response[$currencyId]['difference_float'] = (float)$response[$currencyId]['difference']; } if (0 !== $foreignCurrencyId) { - $response[$foreignCurrencyId] = $response[$foreignCurrencyId] ?? [ + $response[$foreignCurrencyId] ??= [ 'difference' => '0', 'difference_float' => 0, 'currency_id' => (string)$foreignCurrencyId, @@ -113,18 +109,14 @@ class TagController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/insight/insightTransferTag * * Transfers per tag, possibly filtered by tag and account. - * - * @param GenericRequest $request - * - * @return JsonResponse */ public function tag(GenericRequest $request): JsonResponse { - $accounts = $request->getAssetAccounts(); - $tags = $request->getTags(); - $start = $request->getStart(); - $end = $request->getEnd(); - $response = []; + $accounts = $request->getAssetAccounts(); + $tags = $request->getTags(); + $start = $request->getStart(); + $end = $request->getEnd(); + $response = []; // get all tags: if (0 === $tags->count()) { @@ -132,10 +124,11 @@ class TagController extends Controller } // collect all expenses in this period (regardless of type) by the given bills and accounts. - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes([TransactionType::TRANSFER])->setRange($start, $end)->setDestinationAccounts($accounts); $collector->setTags($tags); $genericSet = $collector->getExtractedJournals(); + /** @var array $journal */ foreach ($genericSet as $journal) { $currencyId = (int)$journal['currency_id']; @@ -149,7 +142,7 @@ class TagController extends Controller // on currency ID if (0 !== $currencyId) { - $response[$key] = $response[$key] ?? [ + $response[$key] ??= [ 'id' => (string)$tagId, 'name' => $tag['name'], 'difference' => '0', diff --git a/app/Api/V1/Controllers/Models/Account/DestroyController.php b/app/Api/V1/Controllers/Models/Account/DestroyController.php index b157b011fd..cebf3afc26 100644 --- a/app/Api/V1/Controllers/Models/Account/DestroyController.php +++ b/app/Api/V1/Controllers/Models/Account/DestroyController.php @@ -33,14 +33,12 @@ use Illuminate\Http\JsonResponse; */ class DestroyController extends Controller { - public const RESOURCE_KEY = 'accounts'; + public const string RESOURCE_KEY = 'accounts'; private AccountRepositoryInterface $repository; /** * AccountController constructor. - * - */ public function __construct() { @@ -60,10 +58,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/deleteAccount * * Remove the specified resource from storage. - * - * @param Account $account - * - * @return JsonResponse */ public function destroy(Account $account): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/Account/ListController.php b/app/Api/V1/Controllers/Models/Account/ListController.php index 6e3660121c..edcdf2dfea 100644 --- a/app/Api/V1/Controllers/Models/Account/ListController.php +++ b/app/Api/V1/Controllers/Models/Account/ListController.php @@ -47,14 +47,12 @@ class ListController extends Controller { use TransactionFilter; - public const RESOURCE_KEY = 'accounts'; + public const string RESOURCE_KEY = 'accounts'; private AccountRepositoryInterface $repository; /** * AccountController constructor. - * - */ public function __construct() { @@ -73,29 +71,26 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/listAttachmentByAccount * - * @param Account $account - * - * @return JsonResponse * @throws FireflyException */ public function attachments(Account $account): JsonResponse { - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); - $collection = $this->repository->getAttachments($account); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getAttachments($account); $count = $collection->count(); $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.accounts.attachments', [$account->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.accounts.attachments', [$account->id]).$this->buildParams()); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($attachments, $transformer, 'attachments'); + $resource = new FractalCollection($attachments, $transformer, 'attachments'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -105,33 +100,30 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/listPiggyBankByAccount * - * @param Account $account - * - * @return JsonResponse * @throws FireflyException */ public function piggyBanks(Account $account): JsonResponse { // create some objects: - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. - $collection = $this->repository->getPiggyBanks($account); - $count = $collection->count(); - $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->getPiggyBanks($account); + $count = $collection->count(); + $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.accounts.piggy-banks', [$account->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.accounts.piggy-banks', [$account->id]).$this->buildParams()); /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); + $resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -143,28 +135,25 @@ class ListController extends Controller * * Show all transaction groups related to the account. * - * - * @param Request $request - * @param Account $account - * - * @return JsonResponse * @throws FireflyException */ public function transactions(Request $request, Account $account): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $pageSize = $this->parameters->get('limit'); + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); + /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($admin)->setAccounts(new Collection([$account])) - ->withAPIInformation()->setLimit($pageSize)->setPage($this->parameters->get('page'))->setTypes($types); + ->withAPIInformation()->setLimit($pageSize)->setPage($this->parameters->get('page'))->setTypes($types) + ; if (null !== $this->parameters->get('start')) { $collector->setStart($this->parameters->get('start')); @@ -173,15 +162,15 @@ class ListController extends Controller $collector->setEnd($this->parameters->get('end')); } - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.accounts.transactions', [$account->id]) . $this->buildParams()); - $groups = $paginator->getCollection(); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.accounts.transactions', [$account->id]).$this->buildParams()); + $groups = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($groups, $transformer, 'transactions'); + $resource = new FractalCollection($groups, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/Account/ShowController.php b/app/Api/V1/Controllers/Models/Account/ShowController.php index 8decc0a0dd..e0aa98eb54 100644 --- a/app/Api/V1/Controllers/Models/Account/ShowController.php +++ b/app/Api/V1/Controllers/Models/Account/ShowController.php @@ -43,14 +43,12 @@ class ShowController extends Controller { use AccountFilter; - public const RESOURCE_KEY = 'accounts'; + public const string RESOURCE_KEY = 'accounts'; private AccountRepositoryInterface $repository; /** * AccountController constructor. - * - */ public function __construct() { @@ -71,40 +69,36 @@ class ShowController extends Controller * * Display a listing of the resource. * - * @param Request $request - * - * @return JsonResponse * @throws FireflyException */ public function index(Request $request): JsonResponse { - $manager = $this->getManager(); - $type = $request->get('type') ?? 'all'; + $manager = $this->getManager(); + $type = $request->get('type') ?? 'all'; $this->parameters->set('type', $type); // types to get, page size: - $types = $this->mapAccountTypes($this->parameters->get('type')); - $pageSize = $this->parameters->get('limit'); + $types = $this->mapAccountTypes($this->parameters->get('type')); + $pageSize = $this->parameters->get('limit'); // get list of accounts. Count it and split it. $this->repository->resetAccountOrder(); - $collection = $this->repository->getAccountsByType($types, $this->parameters->get('sort') ?? []); - $count = $collection->count(); + $collection = $this->repository->getAccountsByType($types, $this->parameters->get('sort') ?? []); + $count = $collection->count(); // continue sort: - - $accounts = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $accounts = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.accounts.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.accounts.index').$this->buildParams()); /** @var AccountTransformer $transformer */ $transformer = app(AccountTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($accounts, $transformer, self::RESOURCE_KEY); + $resource = new FractalCollection($accounts, $transformer, self::RESOURCE_KEY); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -115,22 +109,18 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/getAccount * * Show single instance. - * - * @param Account $account - * - * @return JsonResponse */ public function show(Account $account): JsonResponse { // get list of accounts. Count it and split it. $this->repository->resetAccountOrder(); $account->refresh(); - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var AccountTransformer $transformer */ $transformer = app(AccountTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($account, $transformer, self::RESOURCE_KEY); + $resource = new Item($account, $transformer, self::RESOURCE_KEY); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Account/StoreController.php b/app/Api/V1/Controllers/Models/Account/StoreController.php index cb49ece28f..f5ed92468b 100644 --- a/app/Api/V1/Controllers/Models/Account/StoreController.php +++ b/app/Api/V1/Controllers/Models/Account/StoreController.php @@ -35,14 +35,12 @@ use League\Fractal\Resource\Item; */ class StoreController extends Controller { - public const RESOURCE_KEY = 'accounts'; + public const string RESOURCE_KEY = 'accounts'; private AccountRepositoryInterface $repository; /** * AccountController constructor. - * - */ public function __construct() { @@ -62,23 +60,19 @@ class StoreController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/storeAccount * * Store a new instance. - * - * @param StoreRequest $request - * - * @return JsonResponse */ public function store(StoreRequest $request): JsonResponse { - $data = $request->getAllAccountData(); + $data = $request->getAllAccountData(); $this->repository->resetAccountOrder(); - $account = $this->repository->store($data); - $manager = $this->getManager(); + $account = $this->repository->store($data); + $manager = $this->getManager(); /** @var AccountTransformer $transformer */ $transformer = app(AccountTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($account, $transformer, self::RESOURCE_KEY); + $resource = new Item($account, $transformer, self::RESOURCE_KEY); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Account/UpdateController.php b/app/Api/V1/Controllers/Models/Account/UpdateController.php index 1be3f42970..2031ba7005 100644 --- a/app/Api/V1/Controllers/Models/Account/UpdateController.php +++ b/app/Api/V1/Controllers/Models/Account/UpdateController.php @@ -29,23 +29,19 @@ use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Transformers\AccountTransformer; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Log; use League\Fractal\Resource\Item; -use Preferences; /** * Class UpdateController */ class UpdateController extends Controller { - public const RESOURCE_KEY = 'accounts'; + public const string RESOURCE_KEY = 'accounts'; private AccountRepositoryInterface $repository; /** * AccountController constructor. - * - */ public function __construct() { @@ -65,26 +61,21 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/accounts/updateAccount * * Update account. - * - * @param UpdateRequest $request - * @param Account $account - * - * @return JsonResponse */ public function update(UpdateRequest $request, Account $account): JsonResponse { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); $data = $request->getUpdateData(); - $data['type'] = config('firefly.shortNamesByFullName.' . $account->accountType->type); + $data['type'] = config('firefly.shortNamesByFullName.'.$account->accountType->type); $account = $this->repository->update($account, $data); $manager = $this->getManager(); $account->refresh(); - Preferences::mark(); + app('preferences')->mark(); /** @var AccountTransformer $transformer */ - $transformer = app(AccountTransformer::class); + $transformer = app(AccountTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($account, $transformer, self::RESOURCE_KEY); + $resource = new Item($account, $transformer, self::RESOURCE_KEY); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Attachment/DestroyController.php b/app/Api/V1/Controllers/Models/Attachment/DestroyController.php index ba81be4ecf..98d27ec070 100644 --- a/app/Api/V1/Controllers/Models/Attachment/DestroyController.php +++ b/app/Api/V1/Controllers/Models/Attachment/DestroyController.php @@ -29,6 +29,8 @@ use FireflyIII\Models\Attachment; use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\Log; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class DestroyController @@ -39,8 +41,6 @@ class DestroyController extends Controller /** * DestroyController constructor. - * - */ public function __construct() { @@ -63,14 +63,15 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/deleteAttachment * * Remove the specified resource from storage. - * - * - * @param Attachment $attachment - * - * @return JsonResponse */ public function destroy(Attachment $attachment): JsonResponse { + if (true === auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); + + throw new NotFoundHttpException(); + } + $this->repository->destroy($attachment); app('preferences')->mark(); diff --git a/app/Api/V1/Controllers/Models/Attachment/ShowController.php b/app/Api/V1/Controllers/Models/Attachment/ShowController.php index 12e53d298c..0518aec90e 100644 --- a/app/Api/V1/Controllers/Models/Attachment/ShowController.php +++ b/app/Api/V1/Controllers/Models/Attachment/ShowController.php @@ -33,9 +33,11 @@ use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Response as LaravelResponse; use Illuminate\Pagination\LengthAwarePaginator; +use Illuminate\Support\Facades\Log; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class ShowController @@ -46,8 +48,6 @@ class ShowController extends Controller /** * ShowController constructor. - * - */ public function __construct() { @@ -71,13 +71,15 @@ class ShowController extends Controller * * Download an attachment. * - * @param Attachment $attachment - * - * @return LaravelResponse - * @throws FireflyException + * @throws FireflyException */ public function download(Attachment $attachment): LaravelResponse { + if (true === auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); + + throw new NotFoundHttpException(); + } if (false === $attachment->uploaded) { throw new FireflyException('200000: File has not been uploaded (yet).'); } @@ -85,27 +87,29 @@ class ShowController extends Controller throw new FireflyException('200000: File has not been uploaded (yet).'); } if ($this->repository->exists($attachment)) { - $content = $this->repository->getContent($attachment); + $content = $this->repository->getContent($attachment); if ('' === $content) { throw new FireflyException('200002: File is empty (zero bytes).'); } - $quoted = sprintf('"%s"', addcslashes(basename($attachment->filename), '"\\')); + $quoted = sprintf('"%s"', addcslashes(basename($attachment->filename), '"\\')); /** @var LaravelResponse $response */ $response = response($content); $response ->header('Content-Description', 'File Transfer') ->header('Content-Type', 'application/octet-stream') - ->header('Content-Disposition', 'attachment; filename=' . $quoted) + ->header('Content-Disposition', 'attachment; filename='.$quoted) ->header('Content-Transfer-Encoding', 'binary') ->header('Connection', 'Keep-Alive') ->header('Expires', '0') ->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') ->header('Pragma', 'public') - ->header('Content-Length', (string)strlen($content)); + ->header('Content-Length', (string)strlen($content)) + ; return $response; } + throw new FireflyException('200003: File does not exist.'); } @@ -115,15 +119,20 @@ class ShowController extends Controller * * Display a listing of the resource. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { - $manager = $this->getManager(); + if (true === auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); + + throw new NotFoundHttpException(); + } + + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of attachments. Count it and split it. $collection = $this->repository->get(); @@ -131,14 +140,14 @@ class ShowController extends Controller $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.attachments.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.attachments.index').$this->buildParams()); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($attachments, $transformer, 'attachments'); + $resource = new FractalCollection($attachments, $transformer, 'attachments'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -149,19 +158,21 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/getAttachment * * Display the specified resource. - * - * @param Attachment $attachment - * - * @return JsonResponse */ public function show(Attachment $attachment): JsonResponse { - $manager = $this->getManager(); + if (true === auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); + + throw new NotFoundHttpException(); + } + $manager = $this->getManager(); + /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($attachment, $transformer, 'attachments'); + $resource = new Item($attachment, $transformer, 'attachments'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Attachment/StoreController.php b/app/Api/V1/Controllers/Models/Attachment/StoreController.php index 6eeb9160c6..5c9edf7d3c 100644 --- a/app/Api/V1/Controllers/Models/Attachment/StoreController.php +++ b/app/Api/V1/Controllers/Models/Attachment/StoreController.php @@ -36,6 +36,7 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use League\Fractal\Resource\Item; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class StoreController @@ -46,8 +47,6 @@ class StoreController extends Controller /** * StoreController constructor. - * - */ public function __construct() { @@ -71,43 +70,45 @@ class StoreController extends Controller * * Store a newly created resource in storage. * - * @param StoreRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function store(StoreRequest $request): JsonResponse { - Log::debug(sprintf('Now in %s', __METHOD__)); - $data = $request->getAll(); - $attachment = $this->repository->store($data); - $manager = $this->getManager(); + if (true === auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); + + throw new NotFoundHttpException(); + } + app('log')->debug(sprintf('Now in %s', __METHOD__)); + $data = $request->getAll(); + $attachment = $this->repository->store($data); + $manager = $this->getManager(); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($attachment, $transformer, 'attachments'); + $resource = new Item($attachment, $transformer, 'attachments'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } /** * Upload an attachment. - * - * - * @param Request $request - * @param Attachment $attachment - * - * @return JsonResponse */ public function upload(Request $request, Attachment $attachment): JsonResponse { + if (true === auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); + + throw new NotFoundHttpException(); + } + /** @var AttachmentHelperInterface $helper */ $helper = app(AttachmentHelperInterface::class); $body = $request->getContent(); if ('' === $body) { - Log::error('Body of attachment is empty.'); + app('log')->error('Body of attachment is empty.'); return response()->json([], 422); } diff --git a/app/Api/V1/Controllers/Models/Attachment/UpdateController.php b/app/Api/V1/Controllers/Models/Attachment/UpdateController.php index e50ce2cc80..6fcc11f472 100644 --- a/app/Api/V1/Controllers/Models/Attachment/UpdateController.php +++ b/app/Api/V1/Controllers/Models/Attachment/UpdateController.php @@ -31,7 +31,9 @@ use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface; use FireflyIII\Transformers\AttachmentTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\Log; use League\Fractal\Resource\Item; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class UpdateController @@ -42,8 +44,6 @@ class UpdateController extends Controller /** * UpdateController constructor. - * - */ public function __construct() { @@ -66,23 +66,23 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/updateAttachment * * Update the specified resource in storage. - * - * @param UpdateRequest $request - * @param Attachment $attachment - * - * @return JsonResponse */ public function update(UpdateRequest $request, Attachment $attachment): JsonResponse { - $data = $request->getAll(); + if (true === auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('Demo user tries to access attachment API in %s', __METHOD__)); + + throw new NotFoundHttpException(); + } + $data = $request->getAll(); $this->repository->update($attachment, $data); - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($attachment, $transformer, 'attachments'); + $resource = new Item($attachment, $transformer, 'attachments'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/AvailableBudget/ShowController.php b/app/Api/V1/Controllers/Models/AvailableBudget/ShowController.php index 268fa4a317..165645d40f 100644 --- a/app/Api/V1/Controllers/Models/AvailableBudget/ShowController.php +++ b/app/Api/V1/Controllers/Models/AvailableBudget/ShowController.php @@ -44,8 +44,6 @@ class ShowController extends Controller /** * AvailableBudgetController constructor. - * - */ public function __construct() { @@ -68,18 +66,17 @@ class ShowController extends Controller * * Display a listing of the resource. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); - $start = $this->parameters->get('start'); - $end = $this->parameters->get('end'); + $start = $this->parameters->get('start'); + $end = $this->parameters->get('end'); // get list of available budgets. Count it and split it. $collection = $this->abRepository->getAvailableBudgetsByDate($start, $end); @@ -87,14 +84,14 @@ class ShowController extends Controller $availableBudgets = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.available-budgets.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.available-budgets.index').$this->buildParams()); /** @var AvailableBudgetTransformer $transformer */ - $transformer = app(AvailableBudgetTransformer::class); + $transformer = app(AvailableBudgetTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($availableBudgets, $transformer, 'available_budgets'); + $resource = new FractalCollection($availableBudgets, $transformer, 'available_budgets'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -105,20 +102,16 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/available_budgets/getAvailableBudget * * Display the specified resource. - * - * @param AvailableBudget $availableBudget - * - * @return JsonResponse */ public function show(AvailableBudget $availableBudget): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var AvailableBudgetTransformer $transformer */ $transformer = app(AvailableBudgetTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($availableBudget, $transformer, 'available_budgets'); + $resource = new Item($availableBudget, $transformer, 'available_budgets'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Bill/DestroyController.php b/app/Api/V1/Controllers/Models/Bill/DestroyController.php index befa62ddc1..d589a1c218 100644 --- a/app/Api/V1/Controllers/Models/Bill/DestroyController.php +++ b/app/Api/V1/Controllers/Models/Bill/DestroyController.php @@ -37,8 +37,6 @@ class DestroyController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -58,10 +56,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/deleteBill * * Remove the specified resource from storage. - * - * @param Bill $bill - * - * @return JsonResponse */ public function destroy(Bill $bill): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/Bill/ListController.php b/app/Api/V1/Controllers/Models/Bill/ListController.php index df2535bb49..24985d9e08 100644 --- a/app/Api/V1/Controllers/Models/Bill/ListController.php +++ b/app/Api/V1/Controllers/Models/Bill/ListController.php @@ -50,8 +50,6 @@ class ListController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -72,29 +70,26 @@ class ListController extends Controller * * Display a listing of the resource. * - * @param Bill $bill - * - * @return JsonResponse * @throws FireflyException */ public function attachments(Bill $bill): JsonResponse { - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); - $collection = $this->repository->getAttachments($bill); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getAttachments($bill); $count = $collection->count(); $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.bills.attachments', [$bill->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.bills.attachments', [$bill->id]).$this->buildParams()); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($attachments, $transformer, 'attachments'); + $resource = new FractalCollection($attachments, $transformer, 'attachments'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -106,31 +101,28 @@ class ListController extends Controller * * List all of them. * - * @param Bill $bill - * - * @return JsonResponse * @throws FireflyException */ public function rules(Bill $bill): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. - $collection = $this->repository->getRulesForBill($bill); - $count = $collection->count(); - $rules = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->getRulesForBill($bill); + $count = $collection->count(); + $rules = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.bills.rules', [$bill->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.bills.rules', [$bill->id]).$this->buildParams()); /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($rules, $transformer, 'rules'); + $resource = new FractalCollection($rules, $transformer, 'rules'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -142,28 +134,23 @@ class ListController extends Controller * * Show all transactions. * - * @param Request $request - * - * @param Bill $bill - * - * @return JsonResponse * @throws FireflyException */ public function transactions(Request $request, Bill $bill): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $pageSize = $this->parameters->get('limit'); + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // include source + destination account name and type. @@ -175,7 +162,8 @@ class ListController extends Controller // set page to retrieve ->setPage($this->parameters->get('page')) // set types of transactions to return. - ->setTypes($types); + ->setTypes($types) + ; if (null !== $this->parameters->get('start')) { $collector->setStart($this->parameters->get('start')); @@ -185,15 +173,15 @@ class ListController extends Controller } // get paginator. - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.bills.transactions', [$bill->id]) . $this->buildParams()); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.bills.transactions', [$bill->id]).$this->buildParams()); $transactions = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/Bill/ShowController.php b/app/Api/V1/Controllers/Models/Bill/ShowController.php index 7848ce9cc9..b18abdddd0 100644 --- a/app/Api/V1/Controllers/Models/Bill/ShowController.php +++ b/app/Api/V1/Controllers/Models/Bill/ShowController.php @@ -43,8 +43,6 @@ class ShowController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -65,24 +63,23 @@ class ShowController extends Controller * * Display a listing of the resource. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { $this->repository->correctOrder(); - $bills = $this->repository->getBills(); - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); - $count = $bills->count(); - $bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); - $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); + $bills = $this->repository->getBills(); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $count = $bills->count(); + $bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); /** @var BillTransformer $transformer */ $transformer = app(BillTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($bills, $transformer, 'bills'); + $resource = new FractalCollection($bills, $transformer, 'bills'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -93,19 +90,16 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/getBill * * Show the specified bill. - * - * @param Bill $bill - * - * @return JsonResponse */ public function show(Bill $bill): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var BillTransformer $transformer */ $transformer = app(BillTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($bill, $transformer, 'bills'); + $resource = new Item($bill, $transformer, 'bills'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Bill/StoreController.php b/app/Api/V1/Controllers/Models/Bill/StoreController.php index 2a819f8912..d5c08063d5 100644 --- a/app/Api/V1/Controllers/Models/Bill/StoreController.php +++ b/app/Api/V1/Controllers/Models/Bill/StoreController.php @@ -43,8 +43,6 @@ class StoreController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -65,22 +63,19 @@ class StoreController extends Controller * * Store a bill. * - * @param StoreRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function store(StoreRequest $request): JsonResponse { - $data = $request->getAll(); - $bill = $this->repository->store($data); - $manager = $this->getManager(); + $data = $request->getAll(); + $bill = $this->repository->store($data); + $manager = $this->getManager(); /** @var BillTransformer $transformer */ $transformer = app(BillTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($bill, $transformer, 'bills'); + $resource = new Item($bill, $transformer, 'bills'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Bill/UpdateController.php b/app/Api/V1/Controllers/Models/Bill/UpdateController.php index e17e2945f9..3c8c81bd76 100644 --- a/app/Api/V1/Controllers/Models/Bill/UpdateController.php +++ b/app/Api/V1/Controllers/Models/Bill/UpdateController.php @@ -40,8 +40,6 @@ class UpdateController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -61,23 +59,18 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/updateBill * * Update a bill. - * - * @param UpdateRequest $request - * @param Bill $bill - * - * @return JsonResponse */ public function update(UpdateRequest $request, Bill $bill): JsonResponse { - $data = $request->getAll(); - $bill = $this->repository->update($bill, $data); - $manager = $this->getManager(); + $data = $request->getAll(); + $bill = $this->repository->update($bill, $data); + $manager = $this->getManager(); /** @var BillTransformer $transformer */ $transformer = app(BillTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($bill, $transformer, 'bills'); + $resource = new Item($bill, $transformer, 'bills'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Budget/DestroyController.php b/app/Api/V1/Controllers/Models/Budget/DestroyController.php index 8f6847aee9..d7a473e7de 100644 --- a/app/Api/V1/Controllers/Models/Budget/DestroyController.php +++ b/app/Api/V1/Controllers/Models/Budget/DestroyController.php @@ -37,8 +37,6 @@ class DestroyController extends Controller /** * DestroyController constructor. - * - */ public function __construct() { @@ -58,10 +56,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/deleteBudget * * Remove the specified resource from storage. - * - * @param Budget $budget - * - * @return JsonResponse */ public function destroy(Budget $budget): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/Budget/ListController.php b/app/Api/V1/Controllers/Models/Budget/ListController.php index 88bf49569c..c7892fb394 100644 --- a/app/Api/V1/Controllers/Models/Budget/ListController.php +++ b/app/Api/V1/Controllers/Models/Budget/ListController.php @@ -40,9 +40,7 @@ use Illuminate\Pagination\LengthAwarePaginator; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; -/*** - * Class ListController - */ +// Class ListController class ListController extends Controller { use TransactionFilter; @@ -52,8 +50,6 @@ class ListController extends Controller /** * ListController constructor. - * - */ public function __construct() { @@ -74,29 +70,26 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listAttachmentByBudget * - * @param Budget $budget - * - * @return JsonResponse * @throws FireflyException */ public function attachments(Budget $budget): JsonResponse { - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); - $collection = $this->repository->getAttachments($budget); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getAttachments($budget); $count = $collection->count(); $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.budgets.attachments', [$budget->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.budgets.attachments', [$budget->id]).$this->buildParams()); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($attachments, $transformer, 'attachments'); + $resource = new FractalCollection($attachments, $transformer, 'attachments'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -108,26 +101,23 @@ class ListController extends Controller * * Display a listing of the resource. * - * @param Budget $budget - * - * @return JsonResponse * @throws FireflyException */ public function budgetLimits(Budget $budget): JsonResponse { - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); $this->parameters->set('budget_id', $budget->id); $collection = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end')); $count = $collection->count(); $budgetLimits = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.budgets.budget-limits', [$budget->id]) . $this->buildParams()); + $paginator->setPath(route('api.v1.budgets.budget-limits', [$budget->id]).$this->buildParams()); /** @var BudgetLimitTransformer $transformer */ - $transformer = app(BudgetLimitTransformer::class); + $transformer = app(BudgetLimitTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); + $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -139,29 +129,24 @@ class ListController extends Controller * * Show all transactions. * - * @param Request $request - * - * @param Budget $budget - * - * @return JsonResponse * @throws FireflyException */ public function transactions(Request $request, Budget $budget): JsonResponse { - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on budget. @@ -173,7 +158,8 @@ class ListController extends Controller // set page to retrieve ->setPage($this->parameters->get('page')) // set types of transactions to return. - ->setTypes($types); + ->setTypes($types) + ; if (null !== $this->parameters->get('start')) { $collector->setStart($this->parameters->get('start')); @@ -182,14 +168,14 @@ class ListController extends Controller $collector->setEnd($this->parameters->get('end')); } - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.budgets.transactions', [$budget->id]) . $this->buildParams()); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.budgets.transactions', [$budget->id]).$this->buildParams()); $transactions = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -201,27 +187,24 @@ class ListController extends Controller * * Show all transactions. * - * @param Request $request - * - * @return JsonResponse * @throws FireflyException */ public function withoutBudget(Request $request): JsonResponse { - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on budget. @@ -233,7 +216,8 @@ class ListController extends Controller // set page to retrieve ->setPage($this->parameters->get('page')) // set types of transactions to return. - ->setTypes($types); + ->setTypes($types) + ; if (null !== $this->parameters->get('start')) { $collector->setStart($this->parameters->get('start')); @@ -242,14 +226,14 @@ class ListController extends Controller $collector->setEnd($this->parameters->get('end')); } - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.budgets.without-budget') . $this->buildParams()); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.budgets.without-budget').$this->buildParams()); $transactions = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/Budget/ShowController.php b/app/Api/V1/Controllers/Models/Budget/ShowController.php index 8f36f0fbfb..5c266ed4e8 100644 --- a/app/Api/V1/Controllers/Models/Budget/ShowController.php +++ b/app/Api/V1/Controllers/Models/Budget/ShowController.php @@ -45,8 +45,6 @@ class ShowController extends Controller /** * ListController constructor. - * - */ public function __construct() { @@ -69,30 +67,29 @@ class ShowController extends Controller * * Display a listing of the resource. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. - $collection = $this->repository->getBudgets(); - $count = $collection->count(); - $budgets = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->getBudgets(); + $count = $collection->count(); + $budgets = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($budgets, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.budgets.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($budgets, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.budgets.index').$this->buildParams()); /** @var BudgetTransformer $transformer */ $transformer = app(BudgetTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($budgets, $transformer, 'budgets'); + $resource = new FractalCollection($budgets, $transformer, 'budgets'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -100,20 +97,16 @@ class ShowController extends Controller /** * Show a budget. - * - * @param Budget $budget - * - * @return JsonResponse */ public function show(Budget $budget): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var BudgetTransformer $transformer */ $transformer = app(BudgetTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($budget, $transformer, 'budgets'); + $resource = new Item($budget, $transformer, 'budgets'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Budget/StoreController.php b/app/Api/V1/Controllers/Models/Budget/StoreController.php index a70f823a9b..3bc7df5f3c 100644 --- a/app/Api/V1/Controllers/Models/Budget/StoreController.php +++ b/app/Api/V1/Controllers/Models/Budget/StoreController.php @@ -40,8 +40,6 @@ class StoreController extends Controller /** * StoreController constructor. - * - */ public function __construct() { @@ -62,23 +60,19 @@ class StoreController extends Controller * * Store a budget. * - * @param StoreRequest $request - * - * @return JsonResponse * @throws FireflyException - * */ public function store(StoreRequest $request): JsonResponse { - $budget = $this->repository->store($request->getAll()); + $budget = $this->repository->store($request->getAll()); $budget->refresh(); - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var BudgetTransformer $transformer */ $transformer = app(BudgetTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($budget, $transformer, 'budgets'); + $resource = new Item($budget, $transformer, 'budgets'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Budget/UpdateController.php b/app/Api/V1/Controllers/Models/Budget/UpdateController.php index 5836be33f1..e6e6405255 100644 --- a/app/Api/V1/Controllers/Models/Budget/UpdateController.php +++ b/app/Api/V1/Controllers/Models/Budget/UpdateController.php @@ -40,8 +40,6 @@ class UpdateController extends Controller /** * UpdateController constructor. - * - */ public function __construct() { @@ -61,23 +59,18 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/updateBudget * * Update a budget. - * - * @param UpdateRequest $request - * @param Budget $budget - * - * @return JsonResponse */ public function update(UpdateRequest $request, Budget $budget): JsonResponse { - $data = $request->getAll(); - $budget = $this->repository->update($budget, $data); - $manager = $this->getManager(); + $data = $request->getAll(); + $budget = $this->repository->update($budget, $data); + $manager = $this->getManager(); /** @var BudgetTransformer $transformer */ $transformer = app(BudgetTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($budget, $transformer, 'budgets'); + $resource = new Item($budget, $transformer, 'budgets'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/BudgetLimit/DestroyController.php b/app/Api/V1/Controllers/Models/BudgetLimit/DestroyController.php index c459b1cee3..968ad1434d 100644 --- a/app/Api/V1/Controllers/Models/BudgetLimit/DestroyController.php +++ b/app/Api/V1/Controllers/Models/BudgetLimit/DestroyController.php @@ -40,8 +40,6 @@ class DestroyController extends Controller /** * BudgetLimitController constructor. - * - */ public function __construct() { @@ -64,10 +62,6 @@ class DestroyController extends Controller * * Remove the specified resource from storage. * - * @param Budget $budget - * @param BudgetLimit $budgetLimit - * - * @return JsonResponse * @throws FireflyException */ public function destroy(Budget $budget, BudgetLimit $budgetLimit): JsonResponse diff --git a/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php b/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php index adc69dc9a0..5dac95e7bd 100644 --- a/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php +++ b/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php @@ -28,7 +28,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\Budget; use FireflyIII\Models\BudgetLimit; -use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\TransactionGroupTransformer; use FireflyIII\User; @@ -44,55 +43,28 @@ class ListController extends Controller { use TransactionFilter; - private BudgetLimitRepositoryInterface $blRepository; - - /** - * BudgetLimitController constructor. - * - - */ - public function __construct() - { - parent::__construct(); - $this->middleware( - function ($request, $next) { - /** @var User $user */ - $user = auth()->user(); - $this->blRepository = app(BudgetLimitRepositoryInterface::class); - $this->blRepository->setUser($user); - - return $next($request); - } - ); - } - /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listTransactionByBudgetLimit * Show all transactions. * - * @param Request $request - * @param Budget $budget - * @param BudgetLimit $budgetLimit - * - * @return JsonResponse * @throws FireflyException */ public function transactions(Request $request, Budget $budget, BudgetLimit $budgetLimit): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $pageSize = $this->parameters->get('limit'); + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on budget. @@ -104,19 +76,20 @@ class ListController extends Controller // set page to retrieve ->setPage($this->parameters->get('page')) // set types of transactions to return. - ->setTypes($types); + ->setTypes($types) + ; $collector->setRange($budgetLimit->start_date, $budgetLimit->end_date); $collector->setTypes($types); - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.budgets.limits.transactions', [$budget->id, $budgetLimit->id]) . $this->buildParams()); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.budgets.limits.transactions', [$budget->id, $budgetLimit->id]).$this->buildParams()); $transactions = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/BudgetLimit/ShowController.php b/app/Api/V1/Controllers/Models/BudgetLimit/ShowController.php index 1a4c4e6302..c26cddcd19 100644 --- a/app/Api/V1/Controllers/Models/BudgetLimit/ShowController.php +++ b/app/Api/V1/Controllers/Models/BudgetLimit/ShowController.php @@ -33,7 +33,6 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Transformers\BudgetLimitTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; @@ -49,8 +48,6 @@ class ShowController extends Controller /** * BudgetLimitController constructor. - * - */ public function __construct() { @@ -74,29 +71,23 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listBudgetLimitByBudget * * Display a listing of the budget limits for this budget. - * - * @param Request $request - * @param Budget $budget - * - * @return JsonResponse - * @throws FireflyException */ - public function index(Request $request, Budget $budget): JsonResponse + public function index(Budget $budget): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); $manager->parseIncludes('budget'); $pageSize = $this->parameters->get('limit'); $collection = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end')); $count = $collection->count(); $budgetLimits = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.budgets.limits.index', [$budget->id]) . $this->buildParams()); + $paginator->setPath(route('api.v1.budgets.limits.index', [$budget->id]).$this->buildParams()); /** @var BudgetLimitTransformer $transformer */ - $transformer = app(BudgetLimitTransformer::class); + $transformer = app(BudgetLimitTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); + $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -108,27 +99,24 @@ class ShowController extends Controller * * Display a listing of the budget limits for this budget. * - * @param SameDateRequest $request - * - * @return JsonResponse - * @throws FireflyException + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function indexAll(SameDateRequest $request): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); $manager->parseIncludes('budget'); $pageSize = $this->parameters->get('limit'); $collection = $this->blRepository->getAllBudgetLimits($this->parameters->get('start'), $this->parameters->get('end')); $count = $collection->count(); $budgetLimits = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.budget-limits.index') . $this->buildParams()); + $paginator->setPath(route('api.v1.budget-limits.index').$this->buildParams()); /** @var BudgetLimitTransformer $transformer */ - $transformer = app(BudgetLimitTransformer::class); + $transformer = app(BudgetLimitTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); + $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -138,26 +126,21 @@ class ShowController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/getBudgetLimit * - * @param Request $request - * @param Budget $budget - * @param BudgetLimit $budgetLimit - * - * @return JsonResponse * @throws FireflyException */ - public function show(Request $request, Budget $budget, BudgetLimit $budgetLimit): JsonResponse + public function show(Budget $budget, BudgetLimit $budgetLimit): JsonResponse { - if ((int)$budget->id !== (int)$budgetLimit->budget_id) { + if ($budget->id !== $budgetLimit->budget_id) { throw new FireflyException('20028: The budget limit does not belong to the budget.'); } // continue! - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var BudgetLimitTransformer $transformer */ $transformer = app(BudgetLimitTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($budgetLimit, $transformer, 'budget_limits'); + $resource = new Item($budgetLimit, $transformer, 'budget_limits'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/BudgetLimit/StoreController.php b/app/Api/V1/Controllers/Models/BudgetLimit/StoreController.php index 3cb8d1858b..32913dc1d3 100644 --- a/app/Api/V1/Controllers/Models/BudgetLimit/StoreController.php +++ b/app/Api/V1/Controllers/Models/BudgetLimit/StoreController.php @@ -41,8 +41,6 @@ class StoreController extends Controller /** * BudgetLimitController constructor. - * - */ public function __construct() { @@ -64,11 +62,6 @@ class StoreController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/storeBudgetLimit * * Store a newly created resource in storage. - * - * @param StoreRequest $request - * @param Budget $budget - * - * @return JsonResponse */ public function store(StoreRequest $request, Budget $budget): JsonResponse { @@ -77,13 +70,14 @@ class StoreController extends Controller $data['end_date'] = $data['end']; $data['budget_id'] = $budget->id; - $budgetLimit = $this->blRepository->store($data); - $manager = $this->getManager(); + $budgetLimit = $this->blRepository->store($data); + $manager = $this->getManager(); + /** @var BudgetLimitTransformer $transformer */ - $transformer = app(BudgetLimitTransformer::class); + $transformer = app(BudgetLimitTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($budgetLimit, $transformer, 'budget_limits'); + $resource = new Item($budgetLimit, $transformer, 'budget_limits'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/BudgetLimit/UpdateController.php b/app/Api/V1/Controllers/Models/BudgetLimit/UpdateController.php index 8cf724245d..31a9e81244 100644 --- a/app/Api/V1/Controllers/Models/BudgetLimit/UpdateController.php +++ b/app/Api/V1/Controllers/Models/BudgetLimit/UpdateController.php @@ -46,8 +46,6 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/updateBudgetLimit * * BudgetLimitController constructor. - * - */ public function __construct() { @@ -69,16 +67,11 @@ class UpdateController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/updateBudgetLimit * - * @param UpdateRequest $request - * @param Budget $budget - * @param BudgetLimit $budgetLimit - * - * @return JsonResponse * @throws FireflyException */ public function update(UpdateRequest $request, Budget $budget, BudgetLimit $budgetLimit): JsonResponse { - if ((int)$budget->id !== (int)$budgetLimit->budget_id) { + if ($budget->id !== $budgetLimit->budget_id) { throw new FireflyException('20028: The budget limit does not belong to the budget.'); } $data = $request->getAll(); @@ -87,10 +80,10 @@ class UpdateController extends Controller $manager = $this->getManager(); /** @var BudgetLimitTransformer $transformer */ - $transformer = app(BudgetLimitTransformer::class); + $transformer = app(BudgetLimitTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($budgetLimit, $transformer, 'budget_limits'); + $resource = new Item($budgetLimit, $transformer, 'budget_limits'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Category/DestroyController.php b/app/Api/V1/Controllers/Models/Category/DestroyController.php index 3e977e948d..10d6b8ebe6 100644 --- a/app/Api/V1/Controllers/Models/Category/DestroyController.php +++ b/app/Api/V1/Controllers/Models/Category/DestroyController.php @@ -37,8 +37,6 @@ class DestroyController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -58,10 +56,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/deleteCategory * * Remove the specified resource from storage. - * - * @param Category $category - * - * @return JsonResponse */ public function destroy(Category $category): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/Category/ListController.php b/app/Api/V1/Controllers/Models/Category/ListController.php index ffc37839e1..4377a47b80 100644 --- a/app/Api/V1/Controllers/Models/Category/ListController.php +++ b/app/Api/V1/Controllers/Models/Category/ListController.php @@ -49,8 +49,6 @@ class ListController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -69,29 +67,26 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/listAttachmentByCategory * - * @param Category $category - * - * @return JsonResponse * @throws FireflyException */ public function attachments(Category $category): JsonResponse { - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); - $collection = $this->repository->getAttachments($category); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getAttachments($category); $count = $collection->count(); $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.categories.attachments', [$category->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.categories.attachments', [$category->id]).$this->buildParams()); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($attachments, $transformer, 'attachments'); + $resource = new FractalCollection($attachments, $transformer, 'attachments'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -103,28 +98,23 @@ class ListController extends Controller * * Show all transactions. * - * @param Request $request - * - * @param Category $category - * - * @return JsonResponse * @throws FireflyException */ public function transactions(Request $request, Category $category): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $pageSize = $this->parameters->get('limit'); + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on category. @@ -136,7 +126,8 @@ class ListController extends Controller // set page to retrieve ->setPage($this->parameters->get('page')) // set types of transactions to return. - ->setTypes($types); + ->setTypes($types) + ; if (null !== $this->parameters->get('start')) { $collector->setStart($this->parameters->get('start')); @@ -145,15 +136,15 @@ class ListController extends Controller $collector->setEnd($this->parameters->get('end')); } - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.categories.transactions', [$category->id]) . $this->buildParams()); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.categories.transactions', [$category->id]).$this->buildParams()); $transactions = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/Category/ShowController.php b/app/Api/V1/Controllers/Models/Category/ShowController.php index 5a772647a1..8ff9c81972 100644 --- a/app/Api/V1/Controllers/Models/Category/ShowController.php +++ b/app/Api/V1/Controllers/Models/Category/ShowController.php @@ -43,8 +43,6 @@ class ShowController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -65,29 +63,28 @@ class ShowController extends Controller * * Display a listing of the resource. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. - $collection = $this->repository->getCategories(); - $count = $collection->count(); - $categories = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->getCategories(); + $count = $collection->count(); + $categories = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($categories, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.categories.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($categories, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.categories.index').$this->buildParams()); /** @var CategoryTransformer $transformer */ $transformer = app(CategoryTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($categories, $transformer, 'categories'); + $resource = new FractalCollection($categories, $transformer, 'categories'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -98,20 +95,16 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/getCategory * * Show the category. - * - * @param Category $category - * - * @return JsonResponse */ public function show(Category $category): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var CategoryTransformer $transformer */ $transformer = app(CategoryTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($category, $transformer, 'categories'); + $resource = new Item($category, $transformer, 'categories'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Category/StoreController.php b/app/Api/V1/Controllers/Models/Category/StoreController.php index 9ae15f6382..12ccc9517b 100644 --- a/app/Api/V1/Controllers/Models/Category/StoreController.php +++ b/app/Api/V1/Controllers/Models/Category/StoreController.php @@ -40,8 +40,6 @@ class StoreController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -62,21 +60,18 @@ class StoreController extends Controller * * Store new category. * - * @param StoreRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function store(StoreRequest $request): JsonResponse { - $category = $this->repository->store($request->getAll()); - $manager = $this->getManager(); + $category = $this->repository->store($request->getAll()); + $manager = $this->getManager(); /** @var CategoryTransformer $transformer */ $transformer = app(CategoryTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($category, $transformer, 'categories'); + $resource = new Item($category, $transformer, 'categories'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Category/UpdateController.php b/app/Api/V1/Controllers/Models/Category/UpdateController.php index c5bf2f04f4..9efa912e72 100644 --- a/app/Api/V1/Controllers/Models/Category/UpdateController.php +++ b/app/Api/V1/Controllers/Models/Category/UpdateController.php @@ -40,8 +40,6 @@ class UpdateController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -61,23 +59,18 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/updateCategory * * Update the category. - * - * @param UpdateRequest $request - * @param Category $category - * - * @return JsonResponse */ public function update(UpdateRequest $request, Category $category): JsonResponse { - $data = $request->getAll(); - $category = $this->repository->update($category, $data); - $manager = $this->getManager(); + $data = $request->getAll(); + $category = $this->repository->update($category, $data); + $manager = $this->getManager(); /** @var CategoryTransformer $transformer */ $transformer = app(CategoryTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($category, $transformer, 'categories'); + $resource = new Item($category, $transformer, 'categories'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/ObjectGroup/DestroyController.php b/app/Api/V1/Controllers/Models/ObjectGroup/DestroyController.php index d9da7ec3e9..f253d9a956 100644 --- a/app/Api/V1/Controllers/Models/ObjectGroup/DestroyController.php +++ b/app/Api/V1/Controllers/Models/ObjectGroup/DestroyController.php @@ -38,8 +38,6 @@ class DestroyController extends Controller /** * ObjectGroupController constructor. - * - */ public function __construct() { @@ -61,10 +59,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/object_groups/deleteObjectGroup * * Remove the specified resource from storage. - * - * @param ObjectGroup $objectGroup - * - * @return JsonResponse */ public function destroy(ObjectGroup $objectGroup): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/ObjectGroup/ListController.php b/app/Api/V1/Controllers/Models/ObjectGroup/ListController.php index 33dc0d4e5b..97cc5d794f 100644 --- a/app/Api/V1/Controllers/Models/ObjectGroup/ListController.php +++ b/app/Api/V1/Controllers/Models/ObjectGroup/ListController.php @@ -44,8 +44,6 @@ class ListController extends Controller /** * ObjectGroupController constructor. - * - */ public function __construct() { @@ -68,30 +66,27 @@ class ListController extends Controller * * List all bills in this object group * - * @param ObjectGroup $objectGroup - * - * @return JsonResponse * @throws FireflyException */ public function bills(ObjectGroup $objectGroup): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of piggy banks. Count it and split it. - $collection = $this->repository->getBills($objectGroup); - $count = $collection->count(); - $bills = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->getBills($objectGroup); + $count = $collection->count(); + $bills = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.currencies.bills', [$objectGroup->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.currencies.bills', [$objectGroup->id]).$this->buildParams()); /** @var BillTransformer $transformer */ $transformer = app(BillTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($bills, $transformer, 'bills'); + $resource = new FractalCollection($bills, $transformer, 'bills'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -103,33 +98,30 @@ class ListController extends Controller * * List all piggies under the object group. * - * @param ObjectGroup $objectGroup - * - * @return JsonResponse * @throws FireflyException */ public function piggyBanks(ObjectGroup $objectGroup): JsonResponse { // create some objects: - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of piggy banks. Count it and split it. - $collection = $this->repository->getPiggyBanks($objectGroup); - $count = $collection->count(); - $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->getPiggyBanks($objectGroup); + $count = $collection->count(); + $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.object-groups.piggy-banks', [$objectGroup->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.object-groups.piggy-banks', [$objectGroup->id]).$this->buildParams()); /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); + $resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/ObjectGroup/ShowController.php b/app/Api/V1/Controllers/Models/ObjectGroup/ShowController.php index ae8e202aa3..c7452c3d5b 100644 --- a/app/Api/V1/Controllers/Models/ObjectGroup/ShowController.php +++ b/app/Api/V1/Controllers/Models/ObjectGroup/ShowController.php @@ -24,13 +24,11 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\Models\ObjectGroup; use FireflyIII\Api\V1\Controllers\Controller; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\ObjectGroup; use FireflyIII\Repositories\ObjectGroup\ObjectGroupRepositoryInterface; use FireflyIII\Transformers\ObjectGroupTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; @@ -45,8 +43,6 @@ class ShowController extends Controller /** * ObjectGroupController constructor. - * - */ public function __construct() { @@ -68,18 +64,13 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/object_groups/listObjectGroups * * Display a listing of the resource. - * - * @param Request $request - * - * @return JsonResponse - * @throws FireflyException */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); $this->repository->resetOrder(); $collection = $this->repository->get(); @@ -87,14 +78,14 @@ class ShowController extends Controller $objectGroups = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($objectGroups, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.object-groups.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($objectGroups, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.object-groups.index').$this->buildParams()); /** @var ObjectGroupTransformer $transformer */ - $transformer = app(ObjectGroupTransformer::class); + $transformer = app(ObjectGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($objectGroups, $transformer, 'object_groups'); + $resource = new FractalCollection($objectGroups, $transformer, 'object_groups'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -105,21 +96,17 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/object_groups/getObjectGroup * * Show single instance. - * - * @param ObjectGroup $objectGroup - * - * @return JsonResponse */ public function show(ObjectGroup $objectGroup): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); $this->repository->resetOrder(); $objectGroup->refresh(); /** @var ObjectGroupTransformer $transformer */ $transformer = app(ObjectGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($objectGroup, $transformer, 'object_groups'); + $resource = new Item($objectGroup, $transformer, 'object_groups'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/ObjectGroup/UpdateController.php b/app/Api/V1/Controllers/Models/ObjectGroup/UpdateController.php index 21ebcbf6fc..02b6d0f6ac 100644 --- a/app/Api/V1/Controllers/Models/ObjectGroup/UpdateController.php +++ b/app/Api/V1/Controllers/Models/ObjectGroup/UpdateController.php @@ -41,8 +41,6 @@ class UpdateController extends Controller /** * ObjectGroupController constructor. - * - */ public function __construct() { @@ -62,23 +60,18 @@ class UpdateController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/object_groups/updateObjectGroup - * - * @param UpdateRequest $request - * @param ObjectGroup $objectGroup - * - * @return JsonResponse */ public function update(UpdateRequest $request, ObjectGroup $objectGroup): JsonResponse { - $data = $request->getUpdateData(); + $data = $request->getUpdateData(); $this->repository->update($objectGroup, $data); $this->repository->resetOrder(); - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var ObjectGroupTransformer $transformer */ $transformer = app(ObjectGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($objectGroup, $transformer, 'object_groups'); + $resource = new Item($objectGroup, $transformer, 'object_groups'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/PiggyBank/DestroyController.php b/app/Api/V1/Controllers/Models/PiggyBank/DestroyController.php index 6c1c4fd021..69dfa0485b 100644 --- a/app/Api/V1/Controllers/Models/PiggyBank/DestroyController.php +++ b/app/Api/V1/Controllers/Models/PiggyBank/DestroyController.php @@ -37,8 +37,6 @@ class DestroyController extends Controller /** * Constructor. - * - */ public function __construct() { @@ -58,10 +56,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/piggy_banks/deletePiggyBank * * Delete the resource. - * - * @param PiggyBank $piggyBank - * - * @return JsonResponse */ public function destroy(PiggyBank $piggyBank): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/PiggyBank/ListController.php b/app/Api/V1/Controllers/Models/PiggyBank/ListController.php index 96a62a4940..4b48b6335a 100644 --- a/app/Api/V1/Controllers/Models/PiggyBank/ListController.php +++ b/app/Api/V1/Controllers/Models/PiggyBank/ListController.php @@ -43,8 +43,6 @@ class ListController extends Controller /** * Constructor. - * - */ public function __construct() { @@ -63,29 +61,26 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/piggy_banks/listAttachmentByPiggyBank * - * @param PiggyBank $piggyBank - * - * @return JsonResponse * @throws FireflyException */ public function attachments(PiggyBank $piggyBank): JsonResponse { - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); - $collection = $this->repository->getAttachments($piggyBank); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getAttachments($piggyBank); $count = $collection->count(); $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.piggy-banks.attachments', [$piggyBank->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.piggy-banks.attachments', [$piggyBank->id]).$this->buildParams()); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($attachments, $transformer, 'attachments'); + $resource = new FractalCollection($attachments, $transformer, 'attachments'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -97,30 +92,27 @@ class ListController extends Controller * * List single resource. * - * @param PiggyBank $piggyBank - * - * @return JsonResponse * @throws FireflyException */ public function piggyBankEvents(PiggyBank $piggyBank): JsonResponse { // types to get, page size: - $pageSize = $this->parameters->get('limit'); - $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $manager = $this->getManager(); - $collection = $this->repository->getEvents($piggyBank); - $count = $collection->count(); - $events = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->getEvents($piggyBank); + $count = $collection->count(); + $events = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($events, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.piggy-banks.events', [$piggyBank->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($events, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.piggy-banks.events', [$piggyBank->id]).$this->buildParams()); /** @var PiggyBankEventTransformer $transformer */ $transformer = app(PiggyBankEventTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($events, $transformer, 'piggy_bank_events'); + $resource = new FractalCollection($events, $transformer, 'piggy_bank_events'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/PiggyBank/ShowController.php b/app/Api/V1/Controllers/Models/PiggyBank/ShowController.php index 22bb4f3624..12fcc88eb1 100644 --- a/app/Api/V1/Controllers/Models/PiggyBank/ShowController.php +++ b/app/Api/V1/Controllers/Models/PiggyBank/ShowController.php @@ -43,8 +43,6 @@ class ShowController extends Controller /** * Constructor. - * - */ public function __construct() { @@ -65,29 +63,28 @@ class ShowController extends Controller * * List all of them. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. - $collection = $this->repository->getPiggyBanks(); - $count = $collection->count(); - $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->getPiggyBanks(); + $count = $collection->count(); + $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.piggy-banks.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.piggy-banks.index').$this->buildParams()); /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); + $resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -98,20 +95,16 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/piggy_banks/getPiggyBank * * List single resource. - * - * @param PiggyBank $piggyBank - * - * @return JsonResponse */ public function show(PiggyBank $piggyBank): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($piggyBank, $transformer, 'piggy_banks'); + $resource = new Item($piggyBank, $transformer, 'piggy_banks'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/PiggyBank/StoreController.php b/app/Api/V1/Controllers/Models/PiggyBank/StoreController.php index a29e0b03d8..ecc97d6662 100644 --- a/app/Api/V1/Controllers/Models/PiggyBank/StoreController.php +++ b/app/Api/V1/Controllers/Models/PiggyBank/StoreController.php @@ -40,8 +40,6 @@ class StoreController extends Controller /** * Constructor. - * - */ public function __construct() { @@ -62,21 +60,18 @@ class StoreController extends Controller * * Store new object. * - * @param StoreRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function store(StoreRequest $request): JsonResponse { - $piggyBank = $this->repository->store($request->getAll()); - $manager = $this->getManager(); + $piggyBank = $this->repository->store($request->getAll()); + $manager = $this->getManager(); /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($piggyBank, $transformer, 'piggy_banks'); + $resource = new Item($piggyBank, $transformer, 'piggy_banks'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/PiggyBank/UpdateController.php b/app/Api/V1/Controllers/Models/PiggyBank/UpdateController.php index 9e7e841ee9..06e0a29b04 100644 --- a/app/Api/V1/Controllers/Models/PiggyBank/UpdateController.php +++ b/app/Api/V1/Controllers/Models/PiggyBank/UpdateController.php @@ -40,8 +40,6 @@ class UpdateController extends Controller /** * Constructor. - * - */ public function __construct() { @@ -61,27 +59,23 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/piggy_banks/updatePiggyBank * * Update piggy bank. - * - * @param UpdateRequest $request - * @param PiggyBank $piggyBank - * - * @return JsonResponse */ public function update(UpdateRequest $request, PiggyBank $piggyBank): JsonResponse { - $data = $request->getAll(); - $piggyBank = $this->repository->update($piggyBank, $data); + $data = $request->getAll(); + $piggyBank = $this->repository->update($piggyBank, $data); if (array_key_exists('current_amount', $data) && '' !== $data['current_amount']) { $this->repository->setCurrentAmount($piggyBank, $data['current_amount']); } - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($piggyBank, $transformer, 'piggy_banks'); + $resource = new Item($piggyBank, $transformer, 'piggy_banks'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Recurrence/DestroyController.php b/app/Api/V1/Controllers/Models/Recurrence/DestroyController.php index 41018c5403..9985c6e826 100644 --- a/app/Api/V1/Controllers/Models/Recurrence/DestroyController.php +++ b/app/Api/V1/Controllers/Models/Recurrence/DestroyController.php @@ -37,8 +37,6 @@ class DestroyController extends Controller /** * RecurrenceController constructor. - * - */ public function __construct() { @@ -58,10 +56,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/recurrences/deleteRecurrence * * Delete the resource. - * - * @param Recurrence $recurrence - * - * @return JsonResponse */ public function destroy(Recurrence $recurrence): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/Recurrence/ListController.php b/app/Api/V1/Controllers/Models/Recurrence/ListController.php index 9d81586362..162ef9f84b 100644 --- a/app/Api/V1/Controllers/Models/Recurrence/ListController.php +++ b/app/Api/V1/Controllers/Models/Recurrence/ListController.php @@ -47,8 +47,6 @@ class ListController extends Controller /** * RecurrenceController constructor. - * - */ public function __construct() { @@ -69,29 +67,25 @@ class ListController extends Controller * * Show transactions for this recurrence. * - * @param Request $request - * @param Recurrence $recurrence - * - * @return JsonResponse * @throws FireflyException */ public function transactions(Request $request, Recurrence $recurrence): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $pageSize = $this->parameters->get('limit'); + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); // whatever is returned by the query, it must be part of these journals: - $journalIds = $this->repository->getJournalIds($recurrence); + $journalIds = $this->repository->getJournalIds($recurrence); /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on journal IDs. @@ -103,7 +97,8 @@ class ListController extends Controller // set page to retrieve ->setPage($this->parameters->get('page')) // set types of transactions to return. - ->setTypes($types); + ->setTypes($types) + ; if (null !== $this->parameters->get('start')) { $collector->setStart($this->parameters->get('start')); @@ -112,15 +107,15 @@ class ListController extends Controller $collector->setEnd($this->parameters->get('end')); } - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.transactions.index') . $this->buildParams()); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.transactions.index').$this->buildParams()); $transactions = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/Recurrence/ShowController.php b/app/Api/V1/Controllers/Models/Recurrence/ShowController.php index 54d1f86c30..83b8fc2b13 100644 --- a/app/Api/V1/Controllers/Models/Recurrence/ShowController.php +++ b/app/Api/V1/Controllers/Models/Recurrence/ShowController.php @@ -43,8 +43,6 @@ class ShowController extends Controller /** * RecurrenceController constructor. - * - */ public function __construct() { @@ -65,30 +63,29 @@ class ShowController extends Controller * * List all of them. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. - $collection = $this->repository->get(); - $count = $collection->count(); - $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->get(); + $count = $collection->count(); + $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.recurrences.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.recurrences.index').$this->buildParams()); /** @var RecurrenceTransformer $transformer */ $transformer = app(RecurrenceTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($piggyBanks, $transformer, 'recurrences'); + $resource = new FractalCollection($piggyBanks, $transformer, 'recurrences'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -99,20 +96,16 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/recurrences/getRecurrence * * List single resource. - * - * @param Recurrence $recurrence - * - * @return JsonResponse */ public function show(Recurrence $recurrence): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var RecurrenceTransformer $transformer */ $transformer = app(RecurrenceTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($recurrence, $transformer, 'recurrences'); + $resource = new Item($recurrence, $transformer, 'recurrences'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Recurrence/StoreController.php b/app/Api/V1/Controllers/Models/Recurrence/StoreController.php index e213ce03ea..617a509817 100644 --- a/app/Api/V1/Controllers/Models/Recurrence/StoreController.php +++ b/app/Api/V1/Controllers/Models/Recurrence/StoreController.php @@ -40,8 +40,6 @@ class StoreController extends Controller /** * RecurrenceController constructor. - * - */ public function __construct() { @@ -62,22 +60,19 @@ class StoreController extends Controller * * Store new object. * - * @param StoreRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function store(StoreRequest $request): JsonResponse { - $data = $request->getAll(); - $recurrence = $this->repository->store($data); - $manager = $this->getManager(); + $data = $request->getAll(); + $recurrence = $this->repository->store($data); + $manager = $this->getManager(); /** @var RecurrenceTransformer $transformer */ $transformer = app(RecurrenceTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($recurrence, $transformer, 'recurrences'); + $resource = new Item($recurrence, $transformer, 'recurrences'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Recurrence/UpdateController.php b/app/Api/V1/Controllers/Models/Recurrence/UpdateController.php index 04a1a92a19..d56c98efb5 100644 --- a/app/Api/V1/Controllers/Models/Recurrence/UpdateController.php +++ b/app/Api/V1/Controllers/Models/Recurrence/UpdateController.php @@ -40,8 +40,6 @@ class UpdateController extends Controller /** * RecurrenceController constructor. - * - */ public function __construct() { @@ -61,23 +59,18 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/recurrences/updateRecurrence * * Update single recurrence. - * - * @param UpdateRequest $request - * @param Recurrence $recurrence - * - * @return JsonResponse */ public function update(UpdateRequest $request, Recurrence $recurrence): JsonResponse { - $data = $request->getAll(); - $recurrence = $this->repository->update($recurrence, $data); - $manager = $this->getManager(); + $data = $request->getAll(); + $recurrence = $this->repository->update($recurrence, $data); + $manager = $this->getManager(); /** @var RecurrenceTransformer $transformer */ $transformer = app(RecurrenceTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($recurrence, $transformer, 'recurrences'); + $resource = new Item($recurrence, $transformer, 'recurrences'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Rule/DestroyController.php b/app/Api/V1/Controllers/Models/Rule/DestroyController.php index 20e035f882..ad0b52e9ad 100644 --- a/app/Api/V1/Controllers/Models/Rule/DestroyController.php +++ b/app/Api/V1/Controllers/Models/Rule/DestroyController.php @@ -38,8 +38,6 @@ class DestroyController extends Controller /** * RuleController constructor. - * - */ public function __construct() { @@ -47,7 +45,7 @@ class DestroyController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleRepository = app(RuleRepositoryInterface::class); $this->ruleRepository->setUser($user); @@ -62,10 +60,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rules/deleteRule * * Delete the resource. - * - * @param Rule $rule - * - * @return JsonResponse */ public function destroy(Rule $rule): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/Rule/ShowController.php b/app/Api/V1/Controllers/Models/Rule/ShowController.php index b4b93c7767..a075a0e8be 100644 --- a/app/Api/V1/Controllers/Models/Rule/ShowController.php +++ b/app/Api/V1/Controllers/Models/Rule/ShowController.php @@ -44,8 +44,6 @@ class ShowController extends Controller /** * RuleController constructor. - * - */ public function __construct() { @@ -53,7 +51,7 @@ class ShowController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleRepository = app(RuleRepositoryInterface::class); $this->ruleRepository->setUser($user); @@ -69,30 +67,29 @@ class ShowController extends Controller * * List all of them. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. - $collection = $this->ruleRepository->getAll(); - $count = $collection->count(); - $rules = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->ruleRepository->getAll(); + $count = $collection->count(); + $rules = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.rules.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.rules.index').$this->buildParams()); /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($rules, $transformer, 'rules'); + $resource = new FractalCollection($rules, $transformer, 'rules'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -103,19 +100,16 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rules/getRule * * List single resource. - * - * @param Rule $rule - * - * @return JsonResponse */ public function show(Rule $rule): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($rule, $transformer, 'rules'); + $resource = new Item($rule, $transformer, 'rules'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Rule/StoreController.php b/app/Api/V1/Controllers/Models/Rule/StoreController.php index 1d5e7ac89c..fab9191954 100644 --- a/app/Api/V1/Controllers/Models/Rule/StoreController.php +++ b/app/Api/V1/Controllers/Models/Rule/StoreController.php @@ -40,8 +40,6 @@ class StoreController extends Controller /** * RuleController constructor. - * - */ public function __construct() { @@ -49,7 +47,7 @@ class StoreController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleRepository = app(RuleRepositoryInterface::class); $this->ruleRepository->setUser($user); @@ -64,20 +62,17 @@ class StoreController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rules/storeRule * * Store new object. - * - * @param StoreRequest $request - * - * @return JsonResponse */ public function store(StoreRequest $request): JsonResponse { - $rule = $this->ruleRepository->store($request->getAll()); - $manager = $this->getManager(); + $rule = $this->ruleRepository->store($request->getAll()); + $manager = $this->getManager(); + /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($rule, $transformer, 'rules'); + $resource = new Item($rule, $transformer, 'rules'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Rule/TriggerController.php b/app/Api/V1/Controllers/Models/Rule/TriggerController.php index 1f409a592d..fdc855ba53 100644 --- a/app/Api/V1/Controllers/Models/Rule/TriggerController.php +++ b/app/Api/V1/Controllers/Models/Rule/TriggerController.php @@ -46,8 +46,6 @@ class TriggerController extends Controller /** * RuleController constructor. - * - */ public function __construct() { @@ -55,7 +53,7 @@ class TriggerController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleRepository = app(RuleRepositoryInterface::class); $this->ruleRepository->setUser($user); @@ -68,18 +66,13 @@ class TriggerController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rules/testRule - * - * @param TestRequest $request - * @param Rule $rule - * - * @return JsonResponse */ public function testRule(TestRequest $request, Rule $rule): JsonResponse { - $parameters = $request->getTestParameters(); + $parameters = $request->getTestParameters(); /** @var RuleEngineInterface $ruleEngine */ - $ruleEngine = app(RuleEngineInterface::class); + $ruleEngine = app(RuleEngineInterface::class); $ruleEngine->setRules(new Collection([$rule])); // overrule the rule(s) if necessary. @@ -96,21 +89,21 @@ class TriggerController extends Controller $ruleEngine->addOperator(['type' => 'account_id', 'value' => implode(',', $parameters['accounts'])]); } - // file the rule(s) $transactions = $ruleEngine->find(); $count = $transactions->count(); - $paginator = new LengthAwarePaginator($transactions, $count, 31337, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.rules.test', [$rule->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($transactions, $count, 31337, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.rules.test', [$rule->id]).$this->buildParams()); // resulting list is presented as JSON thing. - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -121,11 +114,6 @@ class TriggerController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rules/fireRule * * Execute the given rule group on a set of existing transactions. - * - * @param TriggerRequest $request - * @param Rule $rule - * - * @return JsonResponse */ public function triggerRule(TriggerRequest $request, Rule $rule): JsonResponse { @@ -150,7 +138,6 @@ class TriggerController extends Controller $ruleEngine->addOperator(['type' => 'account_id', 'value' => implode(',', $parameters['accounts'])]); } - // fire the rule(s) $ruleEngine->fire(); diff --git a/app/Api/V1/Controllers/Models/Rule/UpdateController.php b/app/Api/V1/Controllers/Models/Rule/UpdateController.php index f4b1f1a8a5..16efffe784 100644 --- a/app/Api/V1/Controllers/Models/Rule/UpdateController.php +++ b/app/Api/V1/Controllers/Models/Rule/UpdateController.php @@ -41,8 +41,6 @@ class UpdateController extends Controller /** * RuleController constructor. - * - */ public function __construct() { @@ -50,7 +48,7 @@ class UpdateController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleRepository = app(RuleRepositoryInterface::class); $this->ruleRepository->setUser($user); @@ -65,23 +63,18 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rules/updateRule * * Update a rule. - * - * @param UpdateRequest $request - * @param Rule $rule - * - * @return JsonResponse */ public function update(UpdateRequest $request, Rule $rule): JsonResponse { - $data = $request->getAll(); - $rule = $this->ruleRepository->update($rule, $data); - $manager = $this->getManager(); + $data = $request->getAll(); + $rule = $this->ruleRepository->update($rule, $data); + $manager = $this->getManager(); /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($rule, $transformer, 'rules'); + $resource = new Item($rule, $transformer, 'rules'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/RuleGroup/DestroyController.php b/app/Api/V1/Controllers/Models/RuleGroup/DestroyController.php index 62f390aef4..67ad164cda 100644 --- a/app/Api/V1/Controllers/Models/RuleGroup/DestroyController.php +++ b/app/Api/V1/Controllers/Models/RuleGroup/DestroyController.php @@ -38,8 +38,6 @@ class DestroyController extends Controller /** * RuleGroupController constructor. - * - */ public function __construct() { @@ -47,7 +45,7 @@ class DestroyController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleGroupRepository = app(RuleGroupRepositoryInterface::class); $this->ruleGroupRepository->setUser($user); @@ -62,10 +60,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rule_groups/deleteRuleGroup * * Delete the resource. - * - * @param RuleGroup $ruleGroup - * - * @return JsonResponse */ public function destroy(RuleGroup $ruleGroup): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/RuleGroup/ListController.php b/app/Api/V1/Controllers/Models/RuleGroup/ListController.php index 5c197da60d..ac881f47c3 100644 --- a/app/Api/V1/Controllers/Models/RuleGroup/ListController.php +++ b/app/Api/V1/Controllers/Models/RuleGroup/ListController.php @@ -43,8 +43,6 @@ class ListController extends Controller /** * RuleGroupController constructor. - * - */ public function __construct() { @@ -52,7 +50,7 @@ class ListController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleGroupRepository = app(RuleGroupRepositoryInterface::class); $this->ruleGroupRepository->setUser($user); @@ -66,31 +64,28 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rule_groups/listRuleByGroup * - * @param RuleGroup $group - * - * @return JsonResponse * @throws FireflyException */ public function rules(RuleGroup $group): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. - $collection = $this->ruleGroupRepository->getRules($group); - $count = $collection->count(); - $rules = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->ruleGroupRepository->getRules($group); + $count = $collection->count(); + $rules = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.rule-groups.rules', [$group->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.rule-groups.rules', [$group->id]).$this->buildParams()); /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($rules, $transformer, 'rules'); + $resource = new FractalCollection($rules, $transformer, 'rules'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/RuleGroup/ShowController.php b/app/Api/V1/Controllers/Models/RuleGroup/ShowController.php index cfe41894c4..bda98d5f41 100644 --- a/app/Api/V1/Controllers/Models/RuleGroup/ShowController.php +++ b/app/Api/V1/Controllers/Models/RuleGroup/ShowController.php @@ -44,8 +44,6 @@ class ShowController extends Controller /** * RuleGroupController constructor. - * - */ public function __construct() { @@ -53,7 +51,7 @@ class ShowController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleGroupRepository = app(RuleGroupRepositoryInterface::class); $this->ruleGroupRepository->setUser($user); @@ -68,29 +66,28 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rule_groups/listRuleGroup * List all of them. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of rule groups. Count it and split it. - $collection = $this->ruleGroupRepository->get(); - $count = $collection->count(); - $ruleGroups = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->ruleGroupRepository->get(); + $count = $collection->count(); + $ruleGroups = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($ruleGroups, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.rule-groups.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($ruleGroups, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.rule-groups.index').$this->buildParams()); /** @var RuleGroupTransformer $transformer */ $transformer = app(RuleGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($ruleGroups, $transformer, 'rule_groups'); + $resource = new FractalCollection($ruleGroups, $transformer, 'rule_groups'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -101,19 +98,16 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rule_groups/getRuleGroup * * List single resource. - * - * @param RuleGroup $ruleGroup - * - * @return JsonResponse */ public function show(RuleGroup $ruleGroup): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var RuleGroupTransformer $transformer */ $transformer = app(RuleGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($ruleGroup, $transformer, 'rule_groups'); + $resource = new Item($ruleGroup, $transformer, 'rule_groups'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/RuleGroup/StoreController.php b/app/Api/V1/Controllers/Models/RuleGroup/StoreController.php index 02e1433a6b..746cb7a4d6 100644 --- a/app/Api/V1/Controllers/Models/RuleGroup/StoreController.php +++ b/app/Api/V1/Controllers/Models/RuleGroup/StoreController.php @@ -42,8 +42,6 @@ class StoreController extends Controller /** * RuleGroupController constructor. - * - */ public function __construct() { @@ -51,12 +49,12 @@ class StoreController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleGroupRepository = app(RuleGroupRepositoryInterface::class); $this->ruleGroupRepository->setUser($user); - $this->accountRepository = app(AccountRepositoryInterface::class); + $this->accountRepository = app(AccountRepositoryInterface::class); $this->accountRepository->setUser($user); return $next($request); @@ -69,21 +67,17 @@ class StoreController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rule_groups/storeRuleGroup * * Store new object. - * - * @param StoreRequest $request - * - * @return JsonResponse */ public function store(StoreRequest $request): JsonResponse { - $ruleGroup = $this->ruleGroupRepository->store($request->getAll()); - $manager = $this->getManager(); + $ruleGroup = $this->ruleGroupRepository->store($request->getAll()); + $manager = $this->getManager(); /** @var RuleGroupTransformer $transformer */ $transformer = app(RuleGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($ruleGroup, $transformer, 'rule_groups'); + $resource = new Item($ruleGroup, $transformer, 'rule_groups'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/RuleGroup/TriggerController.php b/app/Api/V1/Controllers/Models/RuleGroup/TriggerController.php index cda13829b7..7eceb14721 100644 --- a/app/Api/V1/Controllers/Models/RuleGroup/TriggerController.php +++ b/app/Api/V1/Controllers/Models/RuleGroup/TriggerController.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\Models\RuleGroup; -use Exception; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Models\RuleGroup\TestRequest; use FireflyIII\Api\V1\Requests\Models\RuleGroup\TriggerRequest; @@ -47,8 +46,6 @@ class TriggerController extends Controller /** * RuleGroupController constructor. - * - */ public function __construct() { @@ -56,7 +53,7 @@ class TriggerController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleGroupRepository = app(RuleGroupRepositoryInterface::class); $this->ruleGroupRepository->setUser($user); @@ -70,23 +67,18 @@ class TriggerController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rule_groups/testRuleGroup * - * @param TestRequest $request - * @param RuleGroup $group - * - * @return JsonResponse * @throws FireflyException - * */ public function testGroup(TestRequest $request, RuleGroup $group): JsonResponse { - $rules = $this->ruleGroupRepository->getActiveRules($group); + $rules = $this->ruleGroupRepository->getActiveRules($group); if (0 === $rules->count()) { throw new FireflyException('200023: No rules in this rule group.'); } - $parameters = $request->getTestParameters(); + $parameters = $request->getTestParameters(); /** @var RuleEngineInterface $ruleEngine */ - $ruleEngine = app(RuleEngineInterface::class); + $ruleEngine = app(RuleEngineInterface::class); $ruleEngine->setRules($rules); // overrule the rule(s) if necessary. @@ -107,16 +99,17 @@ class TriggerController extends Controller $transactions = $ruleEngine->find(); $count = $transactions->count(); - $paginator = new LengthAwarePaginator($transactions, $count, 31337, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.rule-groups.test', [$group->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($transactions, $count, 31337, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.rule-groups.test', [$group->id]).$this->buildParams()); // resulting list is presented as JSON thing. - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -128,15 +121,11 @@ class TriggerController extends Controller * * Execute the given rule group on a set of existing transactions. * - * @param TriggerRequest $request - * @param RuleGroup $group - * - * @return JsonResponse - * @throws Exception + * @throws \Exception */ public function triggerGroup(TriggerRequest $request, RuleGroup $group): JsonResponse { - $rules = $this->ruleGroupRepository->getActiveRules($group); + $rules = $this->ruleGroupRepository->getActiveRules($group); if (0 === $rules->count()) { throw new FireflyException('200023: No rules in this rule group.'); } @@ -158,7 +147,7 @@ class TriggerController extends Controller // add a range: $ruleEngine->addOperator(['type' => 'date_before', 'value' => $parameters['end']->format('Y-m-d')]); } - if (array_key_exists('accounts', $parameters) && '' !== $parameters['accounts']) { + if (array_key_exists('accounts', $parameters) && is_array($parameters['accounts']) && count($parameters['accounts']) > 0) { $ruleEngine->addOperator(['type' => 'account_id', 'value' => implode(',', $parameters['accounts'])]); } diff --git a/app/Api/V1/Controllers/Models/RuleGroup/UpdateController.php b/app/Api/V1/Controllers/Models/RuleGroup/UpdateController.php index 1d2b19b6ac..e65a7de47d 100644 --- a/app/Api/V1/Controllers/Models/RuleGroup/UpdateController.php +++ b/app/Api/V1/Controllers/Models/RuleGroup/UpdateController.php @@ -41,8 +41,6 @@ class UpdateController extends Controller /** * RuleGroupController constructor. - * - */ public function __construct() { @@ -50,7 +48,7 @@ class UpdateController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->ruleGroupRepository = app(RuleGroupRepositoryInterface::class); $this->ruleGroupRepository->setUser($user); @@ -65,22 +63,17 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rule_groups/updateRuleGroup * * Update a rule group. - * - * @param UpdateRequest $request - * @param RuleGroup $ruleGroup - * - * @return JsonResponse */ public function update(UpdateRequest $request, RuleGroup $ruleGroup): JsonResponse { - $ruleGroup = $this->ruleGroupRepository->update($ruleGroup, $request->getAll()); - $manager = $this->getManager(); + $ruleGroup = $this->ruleGroupRepository->update($ruleGroup, $request->getAll()); + $manager = $this->getManager(); /** @var RuleGroupTransformer $transformer */ $transformer = app(RuleGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($ruleGroup, $transformer, 'rule_groups'); + $resource = new Item($ruleGroup, $transformer, 'rule_groups'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Tag/DestroyController.php b/app/Api/V1/Controllers/Models/Tag/DestroyController.php index a0b7f2c3b9..ffe999a4fe 100644 --- a/app/Api/V1/Controllers/Models/Tag/DestroyController.php +++ b/app/Api/V1/Controllers/Models/Tag/DestroyController.php @@ -38,8 +38,6 @@ class DestroyController extends Controller /** * TagController constructor. - * - */ public function __construct() { @@ -47,7 +45,7 @@ class DestroyController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->repository = app(TagRepositoryInterface::class); $this->repository->setUser($user); @@ -62,10 +60,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/tags/deleteTag * * Delete the resource. - * - * @param Tag $tag - * - * @return JsonResponse */ public function destroy(Tag $tag): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/Tag/ListController.php b/app/Api/V1/Controllers/Models/Tag/ListController.php index 864c01385c..4bf4156661 100644 --- a/app/Api/V1/Controllers/Models/Tag/ListController.php +++ b/app/Api/V1/Controllers/Models/Tag/ListController.php @@ -49,8 +49,6 @@ class ListController extends Controller /** * TagController constructor. - * - */ public function __construct() { @@ -58,7 +56,7 @@ class ListController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->repository = app(TagRepositoryInterface::class); $this->repository->setUser($user); @@ -72,29 +70,26 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/tags/listAttachmentByTag * - * @param Tag $tag - * - * @return JsonResponse * @throws FireflyException */ public function attachments(Tag $tag): JsonResponse { - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); - $collection = $this->repository->getAttachments($tag); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getAttachments($tag); $count = $collection->count(); $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.tags.attachments', [$tag->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.tags.attachments', [$tag->id]).$this->buildParams()); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($attachments, $transformer, 'attachments'); + $resource = new FractalCollection($attachments, $transformer, 'attachments'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -106,26 +101,23 @@ class ListController extends Controller * * Show all transactions. * - * @param Request $request - * @param Tag $tag - * - * @return JsonResponse * @throws FireflyException */ public function transactions(Request $request, Tag $tag): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $pageSize = $this->parameters->get('limit'); + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); + /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on tag. @@ -137,7 +129,8 @@ class ListController extends Controller // set page to retrieve ->setPage($this->parameters->get('page')) // set types of transactions to return. - ->setTypes($types); + ->setTypes($types) + ; if (null !== $this->parameters->get('start')) { $collector->setStart($this->parameters->get('start')); @@ -145,15 +138,15 @@ class ListController extends Controller if (null !== $this->parameters->get('end')) { $collector->setEnd($this->parameters->get('end')); } - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.tags.transactions', [$tag->id]) . $this->buildParams()); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.tags.transactions', [$tag->id]).$this->buildParams()); $transactions = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/Tag/ShowController.php b/app/Api/V1/Controllers/Models/Tag/ShowController.php index 9c50ddf6c1..8d62cc28e8 100644 --- a/app/Api/V1/Controllers/Models/Tag/ShowController.php +++ b/app/Api/V1/Controllers/Models/Tag/ShowController.php @@ -44,8 +44,6 @@ class ShowController extends Controller /** * TagController constructor. - * - */ public function __construct() { @@ -53,7 +51,7 @@ class ShowController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->repository = app(TagRepositoryInterface::class); $this->repository->setUser($user); @@ -69,29 +67,28 @@ class ShowController extends Controller * * List all of them. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. - $collection = $this->repository->get(); - $count = $collection->count(); - $rules = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->get(); + $count = $collection->count(); + $rules = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.tags.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.tags.index').$this->buildParams()); /** @var TagTransformer $transformer */ $transformer = app(TagTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($rules, $transformer, 'tags'); + $resource = new FractalCollection($rules, $transformer, 'tags'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -102,19 +99,16 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/tags/getTag * * List single resource. - * - * @param Tag $tag - * - * @return JsonResponse */ public function show(Tag $tag): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var TagTransformer $transformer */ $transformer = app(TagTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($tag, $transformer, 'tags'); + $resource = new Item($tag, $transformer, 'tags'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Tag/StoreController.php b/app/Api/V1/Controllers/Models/Tag/StoreController.php index 309ee7a14b..a66fbbd231 100644 --- a/app/Api/V1/Controllers/Models/Tag/StoreController.php +++ b/app/Api/V1/Controllers/Models/Tag/StoreController.php @@ -40,8 +40,6 @@ class StoreController extends Controller /** * TagController constructor. - * - */ public function __construct() { @@ -49,7 +47,7 @@ class StoreController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->repository = app(TagRepositoryInterface::class); $this->repository->setUser($user); @@ -64,20 +62,17 @@ class StoreController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/tags/storeTag * * Store new object. - * - * @param StoreRequest $request - * - * @return JsonResponse */ public function store(StoreRequest $request): JsonResponse { - $rule = $this->repository->store($request->getAll()); - $manager = $this->getManager(); + $rule = $this->repository->store($request->getAll()); + $manager = $this->getManager(); + /** @var TagTransformer $transformer */ $transformer = app(TagTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($rule, $transformer, 'tags'); + $resource = new Item($rule, $transformer, 'tags'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Tag/UpdateController.php b/app/Api/V1/Controllers/Models/Tag/UpdateController.php index 89c9eafa22..f4cda86433 100644 --- a/app/Api/V1/Controllers/Models/Tag/UpdateController.php +++ b/app/Api/V1/Controllers/Models/Tag/UpdateController.php @@ -41,8 +41,6 @@ class UpdateController extends Controller /** * TagController constructor. - * - */ public function __construct() { @@ -50,7 +48,7 @@ class UpdateController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->repository = app(TagRepositoryInterface::class); $this->repository->setUser($user); @@ -65,21 +63,17 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/tags/updateTag * * Update a rule. - * - * @param UpdateRequest $request - * @param Tag $tag - * - * @return JsonResponse */ public function update(UpdateRequest $request, Tag $tag): JsonResponse { - $rule = $this->repository->update($tag, $request->getAll()); - $manager = $this->getManager(); + $rule = $this->repository->update($tag, $request->getAll()); + $manager = $this->getManager(); + /** @var TagTransformer $transformer */ $transformer = app(TagTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($rule, $transformer, 'tags'); + $resource = new Item($rule, $transformer, 'tags'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Transaction/DestroyController.php b/app/Api/V1/Controllers/Models/Transaction/DestroyController.php index a15a24ff33..a1780773f1 100644 --- a/app/Api/V1/Controllers/Models/Transaction/DestroyController.php +++ b/app/Api/V1/Controllers/Models/Transaction/DestroyController.php @@ -33,7 +33,6 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepository; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Log; /** * Class DestroyController @@ -45,8 +44,6 @@ class DestroyController extends Controller /** * TransactionController constructor. - * - */ public function __construct() { @@ -54,9 +51,9 @@ class DestroyController extends Controller $this->middleware( function ($request, $next) { /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); - $this->repository = app(JournalRepositoryInterface::class); + $this->repository = app(JournalRepositoryInterface::class); $this->repository->setUser($admin); $this->groupRepository = app(TransactionGroupRepository::class); @@ -72,16 +69,13 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/deleteTransaction * * Remove the specified resource from storage. - * - * @param TransactionGroup $transactionGroup - * - * @return JsonResponse */ public function destroy(TransactionGroup $transactionGroup): JsonResponse { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); // grab asset account(s) from group: $accounts = []; + /** @var TransactionJournal $journal */ foreach ($transactionGroup->transactionJournals as $journal) { /** @var Transaction $transaction */ @@ -100,7 +94,7 @@ class DestroyController extends Controller /** @var Account $account */ foreach ($accounts as $account) { - Log::debug(sprintf('Now going to trigger updated account event for account #%d', $account->id)); + app('log')->debug(sprintf('Now going to trigger updated account event for account #%d', $account->id)); event(new UpdatedAccount($account)); } @@ -112,10 +106,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/deleteTransactionJournal * * Remove the specified resource from storage. - * - * @param TransactionJournal $transactionJournal - * - * @return JsonResponse */ public function destroyJournal(TransactionJournal $transactionJournal): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/Transaction/ListController.php b/app/Api/V1/Controllers/Models/Transaction/ListController.php index 25d9d098d0..cbc9c153b8 100644 --- a/app/Api/V1/Controllers/Models/Transaction/ListController.php +++ b/app/Api/V1/Controllers/Models/Transaction/ListController.php @@ -47,8 +47,6 @@ class ListController extends Controller /** * TransactionController constructor. - * - */ public function __construct() { @@ -56,7 +54,7 @@ class ListController extends Controller $this->middleware( function ($request, $next) { /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); $this->journalAPIRepository = app(JournalAPIRepositoryInterface::class); $this->journalAPIRepository->setUser($admin); @@ -70,16 +68,13 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/listAttachmentByTransaction * - * @param TransactionGroup $transactionGroup - * - * @return JsonResponse * @throws FireflyException */ public function attachments(TransactionGroup $transactionGroup): JsonResponse { - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); - $collection = new Collection(); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $collection = new Collection(); foreach ($transactionGroup->transactionJournals as $transactionJournal) { $collection = $this->journalAPIRepository->getAttachments($transactionJournal)->merge($collection); } @@ -88,14 +83,14 @@ class ListController extends Controller $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.transactions.attachments', [$transactionGroup->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.transactions.attachments', [$transactionGroup->id]).$this->buildParams()); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($attachments, $transformer, 'attachments'); + $resource = new FractalCollection($attachments, $transformer, 'attachments'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -105,30 +100,27 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/listEventByTransaction * - * @param TransactionGroup $transactionGroup - * - * @return JsonResponse * @throws FireflyException */ public function piggyBankEvents(TransactionGroup $transactionGroup): JsonResponse { - $manager = $this->getManager(); - $collection = new Collection(); - $pageSize = $this->parameters->get('limit'); + $manager = $this->getManager(); + $collection = new Collection(); + $pageSize = $this->parameters->get('limit'); foreach ($transactionGroup->transactionJournals as $transactionJournal) { $collection = $this->journalAPIRepository->getPiggyBankEvents($transactionJournal)->merge($collection); } - $count = $collection->count(); - $events = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $count = $collection->count(); + $events = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($events, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.transactions.piggy-bank-events', [$transactionGroup->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($events, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.transactions.piggy-bank-events', [$transactionGroup->id]).$this->buildParams()); /** @var PiggyBankEventTransformer $transformer */ $transformer = app(PiggyBankEventTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($events, $transformer, 'piggy_bank_events'); + $resource = new FractalCollection($events, $transformer, 'piggy_bank_events'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); // /** @var PiggyBankEventTransformer $transformer */ // $transformer = app(PiggyBankEventTransformer::class); @@ -143,9 +135,6 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/listLinksByJournal * - * @param TransactionJournal $transactionJournal - * - * @return JsonResponse * @throws FireflyException */ public function transactionLinks(TransactionJournal $transactionJournal): JsonResponse @@ -157,14 +146,14 @@ class ListController extends Controller $journalLinks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($journalLinks, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.transaction-journals.transaction-links', [$transactionJournal->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($journalLinks, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.transaction-journals.transaction-links', [$transactionJournal->id]).$this->buildParams()); /** @var TransactionLinkTransformer $transformer */ - $transformer = app(TransactionLinkTransformer::class); + $transformer = app(TransactionLinkTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($journalLinks, $transformer, 'transaction_links'); + $resource = new FractalCollection($journalLinks, $transformer, 'transaction_links'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/Transaction/ShowController.php b/app/Api/V1/Controllers/Models/Transaction/ShowController.php index 2819c50fb2..7140254beb 100644 --- a/app/Api/V1/Controllers/Models/Transaction/ShowController.php +++ b/app/Api/V1/Controllers/Models/Transaction/ShowController.php @@ -51,25 +51,23 @@ class ShowController extends Controller * * Show all transactions. * - * @param Request $request - * - * @return JsonResponse * @throws FireflyException */ public function index(Request $request): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $pageSize = $this->parameters->get('limit'); + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); + /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // all info needed for the API: @@ -79,19 +77,20 @@ class ShowController extends Controller // set page to retrieve ->setPage($this->parameters->get('page')) // set types of transactions to return. - ->setTypes($types); + ->setTypes($types) + ; if (null !== $this->parameters->get('start') || null !== $this->parameters->get('end')) { $collector->setRange($this->parameters->get('start'), $this->parameters->get('end')); } - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.transactions.index') . $this->buildParams()); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.transactions.index').$this->buildParams()); $transactions = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -102,10 +101,6 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/getTransactionByJournal * * Show a single transaction, by transaction journal. - * - * @param TransactionJournal $transactionJournal - * - * @return JsonResponse */ public function showJournal(TransactionJournal $transactionJournal): JsonResponse { @@ -117,34 +112,34 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/getTransaction * * Show a single transaction. - * - * @param TransactionGroup $transactionGroup - * - * @return JsonResponse */ public function show(TransactionGroup $transactionGroup): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); + // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on transaction group. ->setTransactionGroup($transactionGroup) // all info needed for the API: - ->withAPIInformation(); + ->withAPIInformation() + ; $selectedGroup = $collector->getGroups()->first(); if (null === $selectedGroup) { throw new NotFoundHttpException(); } + /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($selectedGroup, $transformer, 'transactions'); + $resource = new Item($selectedGroup, $transformer, 'transactions'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Transaction/StoreController.php b/app/Api/V1/Controllers/Models/Transaction/StoreController.php index 29c4a262e8..716fa898e3 100644 --- a/app/Api/V1/Controllers/Models/Transaction/StoreController.php +++ b/app/Api/V1/Controllers/Models/Transaction/StoreController.php @@ -38,7 +38,6 @@ use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Log; use Illuminate\Validation\ValidationException; use League\Fractal\Resource\Item; -use Validator; /** * Class StoreController @@ -51,8 +50,6 @@ class StoreController extends Controller /** * TransactionController constructor. - * - */ public function __construct() { @@ -60,7 +57,7 @@ class StoreController extends Controller $this->middleware( function ($request, $next) { /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); $this->groupRepository = app(TransactionGroupRepositoryInterface::class); $this->groupRepository->setUser($admin); @@ -76,62 +73,66 @@ class StoreController extends Controller * * Store a new transaction. * - * @param StoreRequest $request - * - * @return JsonResponse * @throws FireflyException|ValidationException */ public function store(StoreRequest $request): JsonResponse { - Log::debug('Now in API StoreController::store()'); - $data = $request->getAll(); - $data['user'] = auth()->user()->id; + app('log')->debug('Now in API StoreController::store()'); + $data = $request->getAll(); + $data['user'] = auth()->user()->id; Log::channel('audit') - ->info('Store new transaction over API.', $data); + ->info('Store new transaction over API.', $data) + ; try { $transactionGroup = $this->groupRepository->store($data); - } catch (DuplicateTransactionException $e) { + } catch (DuplicateTransactionException $e) { // @phpstan-ignore-line app('log')->warning('Caught a duplicate transaction. Return error message.'); - $validator = Validator::make( + $validator = \Validator::make( ['transactions' => [['description' => $e->getMessage()]]], ['transactions.0.description' => new IsDuplicateTransaction()] ); - throw new ValidationException($validator, 0, $e); - } catch (FireflyException $e) { + + throw new ValidationException($validator); // @phpstan-ignore-line + } catch (FireflyException $e) { // @phpstan-ignore-line app('log')->warning('Caught an exception. Return error message.'); - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); $message = sprintf('Internal exception: %s', $e->getMessage()); - $validator = Validator::make(['transactions' => [['description' => $message]]], ['transactions.0.description' => new IsDuplicateTransaction()]); - throw new ValidationException($validator, 0, $e); + $validator = \Validator::make(['transactions' => [['description' => $message]]], ['transactions.0.description' => new IsDuplicateTransaction()]); + + throw new ValidationException($validator); // @phpstan-ignore-line } app('preferences')->mark(); - $applyRules = $data['apply_rules'] ?? true; - $fireWebhooks = $data['fire_webhooks'] ?? true; + $applyRules = $data['apply_rules'] ?? true; + $fireWebhooks = $data['fire_webhooks'] ?? true; event(new StoredTransactionGroup($transactionGroup, $applyRules, $fireWebhooks)); - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); + // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on transaction group. ->setTransactionGroup($transactionGroup) // all info needed for the API: - ->withAPIInformation(); + ->withAPIInformation() + ; $selectedGroup = $collector->getGroups()->first(); if (null === $selectedGroup) { throw new FireflyException('200032: Cannot find transaction. Possibly, a rule deleted this transaction after its creation.'); } + /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($selectedGroup, $transformer, 'transactions'); + $resource = new Item($selectedGroup, $transformer, 'transactions'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/Transaction/UpdateController.php b/app/Api/V1/Controllers/Models/Transaction/UpdateController.php index 8da2d15204..5f9946b44a 100644 --- a/app/Api/V1/Controllers/Models/Transaction/UpdateController.php +++ b/app/Api/V1/Controllers/Models/Transaction/UpdateController.php @@ -32,7 +32,6 @@ use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface use FireflyIII\Transformers\TransactionGroupTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Log; use League\Fractal\Resource\Item; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -45,8 +44,6 @@ class UpdateController extends Controller /** * TransactionController constructor. - * - */ public function __construct() { @@ -54,7 +51,7 @@ class UpdateController extends Controller $this->middleware( function ($request, $next) { /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); $this->groupRepository = app(TransactionGroupRepositoryInterface::class); $this->groupRepository->setUser($admin); @@ -69,45 +66,43 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/updateTransaction * * Update a transaction. - * - * @param UpdateRequest $request - * @param TransactionGroup $transactionGroup - * - * @return JsonResponse */ public function update(UpdateRequest $request, TransactionGroup $transactionGroup): JsonResponse { - Log::debug('Now in update routine for transaction group!'); - $data = $request->getAll(); + app('log')->debug('Now in update routine for transaction group!'); + $data = $request->getAll(); $transactionGroup = $this->groupRepository->update($transactionGroup, $data); $manager = $this->getManager(); app('preferences')->mark(); - $applyRules = $data['apply_rules'] ?? true; - $fireWebhooks = $data['fire_webhooks'] ?? true; + $applyRules = $data['apply_rules'] ?? true; + $fireWebhooks = $data['fire_webhooks'] ?? true; event(new UpdatedTransactionGroup($transactionGroup, $applyRules, $fireWebhooks)); /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); + // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on transaction group. ->setTransactionGroup($transactionGroup) // all info needed for the API: - ->withAPIInformation(); + ->withAPIInformation() + ; - $selectedGroup = $collector->getGroups()->first(); + $selectedGroup = $collector->getGroups()->first(); if (null === $selectedGroup) { throw new NotFoundHttpException(); } + /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($selectedGroup, $transformer, 'transactions'); + $resource = new Item($selectedGroup, $transformer, 'transactions'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php index 1cfb07d391..e2512cf47c 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/DestroyController.php @@ -27,11 +27,10 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Validator; /** * Class DestroyController @@ -43,8 +42,6 @@ class DestroyController extends Controller /** * CurrencyRepository constructor. - * - */ public function __construct() { @@ -66,9 +63,6 @@ class DestroyController extends Controller * * Remove the specified resource from storage. * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException */ public function destroy(TransactionCurrency $currency): JsonResponse @@ -80,15 +74,15 @@ class DestroyController extends Controller if (!$this->userRepository->hasRole($admin, 'owner')) { // access denied: $messages = ['currency_code' => '200005: You need the "owner" role to do this.']; - Validator::make([], $rules, $messages)->validate(); + \Validator::make([], $rules, $messages)->validate(); } if ($this->repository->currencyInUse($currency)) { $messages = ['currency_code' => '200006: Currency in use.']; - Validator::make([], $rules, $messages)->validate(); + \Validator::make([], $rules, $messages)->validate(); } if ($this->repository->isFallbackCurrency($currency)) { $messages = ['currency_code' => '200026: Currency is fallback.']; - Validator::make([], $rules, $messages)->validate(); + \Validator::make([], $rules, $messages)->validate(); } $this->repository->destroy($currency); diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php index cd52b0060b..2607c280de 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php @@ -38,7 +38,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; use FireflyIII\Repositories\Rule\RuleRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; @@ -65,48 +64,24 @@ class ListController extends Controller use AccountFilter; use TransactionFilter; - private CurrencyRepositoryInterface $repository; - - /** - * CurrencyRepository constructor. - * - - */ - public function __construct() - { - parent::__construct(); - $this->middleware( - function ($request, $next) { - $this->repository = app(CurrencyRepositoryInterface::class); - $this->repository->setUser(auth()->user()); - - return $next($request); - } - ); - } - /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/listAccountByCurrency * Display a list of accounts. * - * @param Request $request - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException */ public function accounts(Request $request, TransactionCurrency $currency): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // read type from URL - $type = $request->get('type') ?? 'all'; + $type = $request->get('type') ?? 'all'; $this->parameters->set('type', $type); // types to get, page size: - $types = $this->mapAccountTypes($this->parameters->get('type')); - $pageSize = $this->parameters->get('limit'); + $types = $this->mapAccountTypes($this->parameters->get('type')); + $pageSize = $this->parameters->get('limit'); // get list of accounts. Count it and split it. /** @var AccountRepositoryInterface $accountRepository */ @@ -114,7 +89,7 @@ class ListController extends Controller $unfiltered = $accountRepository->getAccountsByType($types); // filter list on currency preference: - $collection = $unfiltered->filter( + $collection = $unfiltered->filter( static function (Account $account) use ($currency, $accountRepository) { $currencyId = (int)$accountRepository->getMetaValue($account, 'currency_id'); @@ -122,17 +97,17 @@ class ListController extends Controller } ); - $count = $collection->count(); - $accounts = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $count = $collection->count(); + $accounts = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.currencies.accounts', [$currency->code]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.currencies.accounts', [$currency->code]).$this->buildParams()); /** @var AccountTransformer $transformer */ - $transformer = app(AccountTransformer::class); + $transformer = app(AccountTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($accounts, $transformer, 'accounts'); + $resource = new FractalCollection($accounts, $transformer, 'accounts'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -144,33 +119,30 @@ class ListController extends Controller * * Display a listing of the resource. * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException */ public function availableBudgets(TransactionCurrency $currency): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of available budgets. Count it and split it. /** @var AvailableBudgetRepositoryInterface $abRepository */ - $abRepository = app(AvailableBudgetRepositoryInterface::class); + $abRepository = app(AvailableBudgetRepositoryInterface::class); $collection = $abRepository->getAvailableBudgetsByCurrency($currency); $count = $collection->count(); $availableBudgets = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.currencies.available-budgets', [$currency->code]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.currencies.available-budgets', [$currency->code]).$this->buildParams()); /** @var AvailableBudgetTransformer $transformer */ - $transformer = app(AvailableBudgetTransformer::class); + $transformer = app(AvailableBudgetTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($availableBudgets, $transformer, 'available_budgets'); + $resource = new FractalCollection($availableBudgets, $transformer, 'available_budgets'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -182,38 +154,35 @@ class ListController extends Controller * * List all bills * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException */ public function bills(TransactionCurrency $currency): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var BillRepositoryInterface $billRepos */ - $billRepos = app(BillRepositoryInterface::class); - $pageSize = $this->parameters->get('limit'); - $unfiltered = $billRepos->getBills(); + $billRepos = app(BillRepositoryInterface::class); + $pageSize = $this->parameters->get('limit'); + $unfiltered = $billRepos->getBills(); // filter and paginate list: - $collection = $unfiltered->filter( + $collection = $unfiltered->filter( static function (Bill $bill) use ($currency) { return $bill->transaction_currency_id === $currency->id; } ); - $count = $collection->count(); - $bills = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $count = $collection->count(); + $bills = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.currencies.bills', [$currency->code]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.currencies.bills', [$currency->code]).$this->buildParams()); /** @var BillTransformer $transformer */ $transformer = app(BillTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($bills, $transformer, 'bills'); + $resource = new FractalCollection($bills, $transformer, 'bills'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -225,9 +194,6 @@ class ListController extends Controller * * List all budget limits * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException */ public function budgetLimits(TransactionCurrency $currency): JsonResponse @@ -241,13 +207,13 @@ class ListController extends Controller $count = $collection->count(); $budgetLimits = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.currencies.budget-limits', [$currency->code]) . $this->buildParams()); + $paginator->setPath(route('api.v1.currencies.budget-limits', [$currency->code]).$this->buildParams()); /** @var BudgetLimitTransformer $transformer */ - $transformer = app(BudgetLimitTransformer::class); + $transformer = app(BudgetLimitTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); + $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -259,16 +225,13 @@ class ListController extends Controller * * List all recurring transactions. * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException */ public function recurrences(TransactionCurrency $currency): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); // types to get, page size: - $pageSize = $this->parameters->get('limit'); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. /** @var RecurringRepositoryInterface $recurringRepos */ @@ -276,8 +239,8 @@ class ListController extends Controller $unfiltered = $recurringRepos->getAll(); // filter selection - $collection = $unfiltered->filter( - static function (Recurrence $recurrence) use ($currency) { + $collection = $unfiltered->filter( // @phpstan-ignore-line + static function (Recurrence $recurrence) use ($currency) { // @phpstan-ignore-line /** @var RecurrenceTransaction $transaction */ foreach ($recurrence->recurrenceTransactions as $transaction) { if ($transaction->transaction_currency_id === $currency->id || $transaction->foreign_currency_id === $currency->id) { @@ -288,18 +251,18 @@ class ListController extends Controller return null; } ); - $count = $collection->count(); - $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $count = $collection->count(); + $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.currencies.recurrences', [$currency->code]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.currencies.recurrences', [$currency->code]).$this->buildParams()); /** @var RecurrenceTransformer $transformer */ - $transformer = app(RecurrenceTransformer::class); + $transformer = app(RecurrenceTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($piggyBanks, $transformer, 'recurrences'); + $resource = new FractalCollection($piggyBanks, $transformer, 'recurrences'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -311,23 +274,20 @@ class ListController extends Controller * * List all of them. * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException */ public function rules(TransactionCurrency $currency): JsonResponse { - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); // get list of budgets. Count it and split it. /** @var RuleRepositoryInterface $ruleRepos */ - $ruleRepos = app(RuleRepositoryInterface::class); - $unfiltered = $ruleRepos->getAll(); + $ruleRepos = app(RuleRepositoryInterface::class); + $unfiltered = $ruleRepos->getAll(); - $collection = $unfiltered->filter( - static function (Rule $rule) use ($currency) { + $collection = $unfiltered->filter( // @phpstan-ignore-line + static function (Rule $rule) use ($currency) { // @phpstan-ignore-line /** @var RuleTrigger $trigger */ foreach ($rule->ruleTriggers as $trigger) { if ('currency_is' === $trigger->trigger_type && $currency->name === $trigger->trigger_value) { @@ -339,18 +299,18 @@ class ListController extends Controller } ); - $count = $collection->count(); - $rules = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $count = $collection->count(); + $rules = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.rules.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.rules.index').$this->buildParams()); /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($rules, $transformer, 'rules'); + $resource = new FractalCollection($rules, $transformer, 'rules'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -362,28 +322,23 @@ class ListController extends Controller * * Show all transactions. * - * @param Request $request - * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException */ public function transactions(Request $request, TransactionCurrency $currency): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $pageSize = $this->parameters->get('limit'); + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on currency. @@ -395,22 +350,23 @@ class ListController extends Controller // set page to retrieve ->setPage($this->parameters->get('page')) // set types of transactions to return. - ->setTypes($types); + ->setTypes($types) + ; if (null !== $this->parameters->get('start')) { $collector->setStart($this->parameters->get('start')); } if (null !== $this->parameters->get('end')) { $collector->setEnd($this->parameters->get('end')); } - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.currencies.transactions', [$currency->code]) . $this->buildParams()); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.currencies.transactions', [$currency->code]).$this->buildParams()); $transactions = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php index 3c5b7c65c0..363d599869 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/ShowController.php @@ -27,13 +27,13 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; +use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Pagination\LengthAwarePaginator; -use JsonException; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; @@ -50,8 +50,6 @@ class ShowController extends Controller /** * CurrencyRepository constructor. - * - */ public function __construct() { @@ -72,28 +70,25 @@ class ShowController extends Controller * * Display a listing of the resource. * - * @return JsonResponse * @throws FireflyException - * @throws JsonException */ public function index(): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $collection = $this->repository->getAll(); - $count = $collection->count(); + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getAll(); + $count = $collection->count(); + // slice them: - $currencies = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); - $paginator = new LengthAwarePaginator($currencies, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.currencies.index') . $this->buildParams()); - $manager = $this->getManager(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); + $currencies = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $paginator = new LengthAwarePaginator($currencies, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.currencies.index').$this->buildParams()); + $manager = $this->getManager(); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($currencies, $transformer, 'currencies'); + $resource = new FractalCollection($currencies, $transformer, 'currencies'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -105,23 +100,24 @@ class ShowController extends Controller * * Show a currency. * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException - * @throws JsonException */ public function show(TransactionCurrency $currency): JsonResponse { + /** @var User $user */ + $user = auth()->user(); $manager = $this->getManager(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); + $defaultCurrency = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); $this->parameters->set('defaultCurrency', $defaultCurrency); + // update fields with user info. + $currency->refreshForUser($user); + /** @var CurrencyTransformer $transformer */ - $transformer = app(CurrencyTransformer::class); + $transformer = app(CurrencyTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($currency, $transformer, 'currencies'); + $resource = new Item($currency, $transformer, 'currencies'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } @@ -132,21 +128,23 @@ class ShowController extends Controller * * Show a currency. * - * @return JsonResponse * @throws FireflyException - * @throws JsonException */ public function showDefault(): JsonResponse { - $manager = $this->getManager(); - $currency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $currency); + /** @var User $user */ + $user = auth()->user(); + $manager = $this->getManager(); + $currency = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); + + // update fields with user info. + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($currency, $transformer, 'currencies'); + $resource = new Item($currency, $transformer, 'currencies'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php index 61a4c63d22..fd041a704e 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/StoreController.php @@ -27,12 +27,12 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\StoreRequest; use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; +use FireflyIII\User; use Illuminate\Http\JsonResponse; -use JsonException; use League\Fractal\Resource\Item; /** @@ -47,8 +47,6 @@ class StoreController extends Controller /** * CurrencyRepository constructor. - * - */ public function __construct() { @@ -69,28 +67,26 @@ class StoreController extends Controller * * Store new currency. * - * @param StoreRequest $request - * - * @return JsonResponse * @throws FireflyException - * @throws JsonException */ public function store(StoreRequest $request): JsonResponse { - $currency = $this->repository->store($request->getAll()); + $currency = $this->repository->store($request->getAll()); if (true === $request->boolean('default')) { - app('preferences')->set('currencyPreference', $currency->code); + $this->repository->makeDefault($currency); app('preferences')->mark(); } - $manager = $this->getManager(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); + $manager = $this->getManager(); + + /** @var User $user */ + $user = auth()->user(); + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($currency, $transformer, 'currencies'); + $resource = new Item($currency, $transformer, 'currencies'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php index e0f978c048..d7d2288c9a 100644 --- a/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php +++ b/app/Api/V1/Controllers/Models/TransactionCurrency/UpdateController.php @@ -28,12 +28,12 @@ use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\UpdateRequest; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\CurrencyTransformer; +use FireflyIII\User; use Illuminate\Http\JsonResponse; -use JsonException; use League\Fractal\Resource\Item; /** @@ -48,8 +48,6 @@ class UpdateController extends Controller /** * CurrencyRepository constructor. - * - */ public function __construct() { @@ -70,11 +68,7 @@ class UpdateController extends Controller * * Disable a currency. * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException - * @throws JsonException */ public function disable(TransactionCurrency $currency): JsonResponse { @@ -82,17 +76,23 @@ class UpdateController extends Controller if ($this->repository->currencyInUse($currency)) { return response()->json([], 409); } - $this->repository->disable($currency); - $manager = $this->getManager(); + // must not be the only one in use: + if (1 === $this->repository->get()->count()) { + return response()->json([], 409); + } - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); + /** @var User $user */ + $user = auth()->user(); + $this->repository->disable($currency); + $manager = $this->getManager(); + + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($currency, $transformer, 'currencies'); + $resource = new Item($currency, $transformer, 'currencies'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } @@ -103,27 +103,25 @@ class UpdateController extends Controller * * Make the currency a default currency. * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException */ public function makeDefault(TransactionCurrency $currency): JsonResponse { + /** @var User $user */ + $user = auth()->user(); $this->repository->enable($currency); + $this->repository->makeDefault($currency); - app('preferences')->set('currencyPreference', $currency->code); app('preferences')->mark(); - $manager = $this->getManager(); - - $this->parameters->set('defaultCurrency', $currency); + $manager = $this->getManager(); + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($currency, $transformer, 'currencies'); + $resource = new Item($currency, $transformer, 'currencies'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } @@ -134,25 +132,23 @@ class UpdateController extends Controller * * Enable a currency. * - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException - * @throws JsonException */ public function enable(TransactionCurrency $currency): JsonResponse { $this->repository->enable($currency); - $manager = $this->getManager(); + $manager = $this->getManager(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); + /** @var User $user */ + $user = auth()->user(); + + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($currency, $transformer, 'currencies'); + $resource = new Item($currency, $transformer, 'currencies'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } @@ -163,33 +159,32 @@ class UpdateController extends Controller * * Update a currency. * - * @param UpdateRequest $request - * @param TransactionCurrency $currency - * - * @return JsonResponse * @throws FireflyException - * @throws JsonException */ public function update(UpdateRequest $request, TransactionCurrency $currency): JsonResponse { - $data = $request->getAll(); - $currency = $this->repository->update($currency, $data); + $data = $request->getAll(); - if (true === $request->boolean('default')) { - app('preferences')->set('currencyPreference', $currency->code); - app('preferences')->mark(); + /** @var User $user */ + $user = auth()->user(); + + // safety catch on currency disablement. + $set = $this->repository->get(); + if (array_key_exists('enabled', $data) && false === $data['enabled'] && 1 === count($set) && $set->first()->id === $currency->id) { + return response()->json([], 409); } + $currency = $this->repository->update($currency, $data); - $manager = $this->getManager(); + app('preferences')->mark(); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->parameters->set('defaultCurrency', $defaultCurrency); + $manager = $this->getManager(); + $currency->refreshForUser($user); /** @var CurrencyTransformer $transformer */ $transformer = app(CurrencyTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($currency, $transformer, 'currencies'); + $resource = new Item($currency, $transformer, 'currencies'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/TransactionLink/DestroyController.php b/app/Api/V1/Controllers/Models/TransactionLink/DestroyController.php index 1c9b1fc9a7..e5c0b5ff46 100644 --- a/app/Api/V1/Controllers/Models/TransactionLink/DestroyController.php +++ b/app/Api/V1/Controllers/Models/TransactionLink/DestroyController.php @@ -39,8 +39,6 @@ class DestroyController extends Controller /** * TransactionLinkController constructor. - * - */ public function __construct() { @@ -48,7 +46,7 @@ class DestroyController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->repository = app(LinkTypeRepositoryInterface::class); @@ -64,10 +62,6 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/links/deleteTransactionLink * * Delete the resource. - * - * @param TransactionJournalLink $link - * - * @return JsonResponse */ public function destroy(TransactionJournalLink $link): JsonResponse { diff --git a/app/Api/V1/Controllers/Models/TransactionLink/ShowController.php b/app/Api/V1/Controllers/Models/TransactionLink/ShowController.php index 485cbd51b2..f5874f90ae 100644 --- a/app/Api/V1/Controllers/Models/TransactionLink/ShowController.php +++ b/app/Api/V1/Controllers/Models/TransactionLink/ShowController.php @@ -46,8 +46,6 @@ class ShowController extends Controller /** * TransactionLinkController constructor. - * - */ public function __construct() { @@ -55,7 +53,7 @@ class ShowController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->repository = app(LinkTypeRepositoryInterface::class); @@ -72,21 +70,18 @@ class ShowController extends Controller * * List all transaction links there are. * - * @param Request $request - * - * @return JsonResponse * @throws FireflyException */ public function index(Request $request): JsonResponse { // create some objects: - $manager = $this->getManager(); + $manager = $this->getManager(); // read type from URL - $name = $request->get('name'); + $name = $request->get('name'); // types to get, page size: - $pageSize = $this->parameters->get('limit'); - $linkType = $this->repository->findByName($name); + $pageSize = $this->parameters->get('limit'); + $linkType = $this->repository->findByName($name); // get list of transaction links. Count it and split it. $collection = $this->repository->getJournalLinks($linkType); @@ -94,14 +89,14 @@ class ShowController extends Controller $journalLinks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($journalLinks, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.transaction-links.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($journalLinks, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.transaction-links.index').$this->buildParams()); /** @var TransactionLinkTransformer $transformer */ - $transformer = app(TransactionLinkTransformer::class); + $transformer = app(TransactionLinkTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($journalLinks, $transformer, 'transaction_links'); + $resource = new FractalCollection($journalLinks, $transformer, 'transaction_links'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -112,20 +107,16 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/links/getTransactionLink * * List single resource. - * - * @param TransactionJournalLink $journalLink - * - * @return JsonResponse */ public function show(TransactionJournalLink $journalLink): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var TransactionLinkTransformer $transformer */ $transformer = app(TransactionLinkTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($journalLink, $transformer, 'transaction_links'); + $resource = new Item($journalLink, $transformer, 'transaction_links'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/TransactionLink/StoreController.php b/app/Api/V1/Controllers/Models/TransactionLink/StoreController.php index 861dbbcc79..f3083cb7fe 100644 --- a/app/Api/V1/Controllers/Models/TransactionLink/StoreController.php +++ b/app/Api/V1/Controllers/Models/TransactionLink/StoreController.php @@ -47,8 +47,6 @@ class StoreController extends Controller /** * TransactionLinkController constructor. - * - */ public function __construct() { @@ -56,7 +54,7 @@ class StoreController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->repository = app(LinkTypeRepositoryInterface::class); $this->journalRepository = app(JournalRepositoryInterface::class); @@ -75,29 +73,26 @@ class StoreController extends Controller * * Store new object. * - * @param StoreRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function store(StoreRequest $request): JsonResponse { - $manager = $this->getManager(); - $data = $request->getAll(); - $inward = $this->journalRepository->find($data['inward_id'] ?? 0); - $outward = $this->journalRepository->find($data['outward_id'] ?? 0); + $manager = $this->getManager(); + $data = $request->getAll(); + $inward = $this->journalRepository->find($data['inward_id'] ?? 0); + $outward = $this->journalRepository->find($data['outward_id'] ?? 0); if (null === $inward || null === $outward) { throw new FireflyException('200024: Source or destination does not exist.'); } $data['direction'] = 'inward'; - $journalLink = $this->repository->storeLink($data, $inward, $outward); + $journalLink = $this->repository->storeLink($data, $inward, $outward); /** @var TransactionLinkTransformer $transformer */ - $transformer = app(TransactionLinkTransformer::class); + $transformer = app(TransactionLinkTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($journalLink, $transformer, 'transaction_links'); + $resource = new Item($journalLink, $transformer, 'transaction_links'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/TransactionLink/UpdateController.php b/app/Api/V1/Controllers/Models/TransactionLink/UpdateController.php index f432b93c70..289774ad39 100644 --- a/app/Api/V1/Controllers/Models/TransactionLink/UpdateController.php +++ b/app/Api/V1/Controllers/Models/TransactionLink/UpdateController.php @@ -44,8 +44,6 @@ class UpdateController extends Controller /** * TransactionLinkController constructor. - * - */ public function __construct() { @@ -53,7 +51,7 @@ class UpdateController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $this->repository = app(LinkTypeRepositoryInterface::class); $this->journalRepository = app(JournalRepositoryInterface::class); @@ -71,11 +69,6 @@ class UpdateController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/links/updateTransactionLink * * Update object. - * - * @param UpdateRequest $request - * @param TransactionJournalLink $journalLink - * - * @return JsonResponse */ public function update(UpdateRequest $request, TransactionJournalLink $journalLink): JsonResponse { @@ -87,7 +80,7 @@ class UpdateController extends Controller $transformer = app(TransactionLinkTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($journalLink, $transformer, 'transaction_links'); + $resource = new Item($journalLink, $transformer, 'transaction_links'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/TransactionLinkType/DestroyController.php b/app/Api/V1/Controllers/Models/TransactionLinkType/DestroyController.php index 4eca004d35..7abbff55d7 100644 --- a/app/Api/V1/Controllers/Models/TransactionLinkType/DestroyController.php +++ b/app/Api/V1/Controllers/Models/TransactionLinkType/DestroyController.php @@ -43,8 +43,6 @@ class DestroyController extends Controller /** * LinkTypeController constructor. - * - */ public function __construct() { @@ -67,9 +65,6 @@ class DestroyController extends Controller * * Delete the resource. * - * @param LinkType $linkType - * - * @return JsonResponse * @throws FireflyException */ public function destroy(LinkType $linkType): JsonResponse diff --git a/app/Api/V1/Controllers/Models/TransactionLinkType/ListController.php b/app/Api/V1/Controllers/Models/TransactionLinkType/ListController.php index 3e18860ccb..a135a815bf 100644 --- a/app/Api/V1/Controllers/Models/TransactionLinkType/ListController.php +++ b/app/Api/V1/Controllers/Models/TransactionLinkType/ListController.php @@ -48,8 +48,6 @@ class ListController extends Controller /** * LinkTypeController constructor. - * - */ public function __construct() { @@ -70,30 +68,26 @@ class ListController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/links/listTransactionByLinkType * - * @param Request $request - * @param LinkType $linkType - * - * @return JsonResponse * @throws FireflyException */ public function transactions(Request $request, LinkType $linkType): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $type = $request->get('type') ?? 'default'; + $pageSize = $this->parameters->get('limit'); + $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); // whatever is returned by the query, it must be part of these journals: - $journalIds = $this->repository->getJournalIds($linkType); + $journalIds = $this->repository->getJournalIds($linkType); /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on journal IDs. @@ -105,22 +99,23 @@ class ListController extends Controller // set page to retrieve ->setPage($this->parameters->get('page')) // set types of transactions to return. - ->setTypes($types); + ->setTypes($types) + ; if (null !== $this->parameters->get('start')) { $collector->setStart($this->parameters->get('start')); } if (null !== $this->parameters->get('end')) { $collector->setEnd($this->parameters->get('end')); } - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.transactions.index') . $this->buildParams()); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.transactions.index').$this->buildParams()); $transactions = $paginator->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $resource = new FractalCollection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Models/TransactionLinkType/ShowController.php b/app/Api/V1/Controllers/Models/TransactionLinkType/ShowController.php index cc63966521..9fa5e2e497 100644 --- a/app/Api/V1/Controllers/Models/TransactionLinkType/ShowController.php +++ b/app/Api/V1/Controllers/Models/TransactionLinkType/ShowController.php @@ -48,8 +48,6 @@ class ShowController extends Controller /** * LinkTypeController constructor. - * - */ public function __construct() { @@ -70,30 +68,28 @@ class ShowController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/links/listLinkType * - * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { // create some objects: - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); // get list of accounts. Count it and split it. - $collection = $this->repository->get(); - $count = $collection->count(); - $linkTypes = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->get(); + $count = $collection->count(); + $linkTypes = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($linkTypes, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.link-types.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($linkTypes, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.link-types.index').$this->buildParams()); /** @var LinkTypeTransformer $transformer */ $transformer = app(LinkTypeTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($linkTypes, $transformer, 'link_types'); + $resource = new FractalCollection($linkTypes, $transformer, 'link_types'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -104,19 +100,16 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/links/getLinkType * * List single resource. - * - * @param LinkType $linkType - * - * @return JsonResponse */ public function show(LinkType $linkType): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var LinkTypeTransformer $transformer */ $transformer = app(LinkTypeTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($linkType, $transformer, 'link_types'); + $resource = new Item($linkType, $transformer, 'link_types'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/TransactionLinkType/StoreController.php b/app/Api/V1/Controllers/Models/TransactionLinkType/StoreController.php index e42f5d74c2..c915dd6589 100644 --- a/app/Api/V1/Controllers/Models/TransactionLinkType/StoreController.php +++ b/app/Api/V1/Controllers/Models/TransactionLinkType/StoreController.php @@ -34,7 +34,6 @@ use FireflyIII\Transformers\LinkTypeTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; use League\Fractal\Resource\Item; -use Validator; /** * Class StoreController @@ -48,8 +47,6 @@ class StoreController extends Controller /** * LinkTypeController constructor. - * - */ public function __construct() { @@ -73,31 +70,28 @@ class StoreController extends Controller * * Store new object. * - * @param StoreRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function store(StoreRequest $request): JsonResponse { /** @var User $admin */ - $admin = auth()->user(); - $rules = ['name' => 'required']; + $admin = auth()->user(); + $rules = ['name' => 'required']; if (!$this->userRepository->hasRole($admin, 'owner')) { // access denied: $messages = ['name' => '200005: You need the "owner" role to do this.']; - Validator::make([], $rules, $messages)->validate(); + \Validator::make([], $rules, $messages)->validate(); } - $data = $request->getAll(); + $data = $request->getAll(); // if currency ID is 0, find the currency by the code: - $linkType = $this->repository->store($data); - $manager = $this->getManager(); + $linkType = $this->repository->store($data); + $manager = $this->getManager(); /** @var LinkTypeTransformer $transformer */ $transformer = app(LinkTypeTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($linkType, $transformer, 'link_types'); + $resource = new Item($linkType, $transformer, 'link_types'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Models/TransactionLinkType/UpdateController.php b/app/Api/V1/Controllers/Models/TransactionLinkType/UpdateController.php index 60bab00568..0b79bd30a1 100644 --- a/app/Api/V1/Controllers/Models/TransactionLinkType/UpdateController.php +++ b/app/Api/V1/Controllers/Models/TransactionLinkType/UpdateController.php @@ -35,7 +35,6 @@ use FireflyIII\Transformers\LinkTypeTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; use League\Fractal\Resource\Item; -use Validator; /** * Class UpdateController @@ -49,8 +48,6 @@ class UpdateController extends Controller /** * LinkTypeController constructor. - * - */ public function __construct() { @@ -74,10 +71,6 @@ class UpdateController extends Controller * * Update object. * - * @param UpdateRequest $request - * @param LinkType $linkType - * - * @return JsonResponse * @throws FireflyException */ public function update(UpdateRequest $request, LinkType $linkType): JsonResponse @@ -87,22 +80,23 @@ class UpdateController extends Controller } /** @var User $admin */ - $admin = auth()->user(); - $rules = ['name' => 'required']; + $admin = auth()->user(); + $rules = ['name' => 'required']; if (!$this->userRepository->hasRole($admin, 'owner')) { $messages = ['name' => '200005: You need the "owner" role to do this.']; - Validator::make([], $rules, $messages)->validate(); + \Validator::make([], $rules, $messages)->validate(); } - $data = $request->getAll(); + $data = $request->getAll(); $this->repository->update($linkType, $data); - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var LinkTypeTransformer $transformer */ $transformer = app(LinkTypeTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($linkType, $transformer, 'link_types'); + $resource = new Item($linkType, $transformer, 'link_types'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Search/AccountController.php b/app/Api/V1/Controllers/Search/AccountController.php index 2da3d3a254..98204fcef7 100644 --- a/app/Api/V1/Controllers/Search/AccountController.php +++ b/app/Api/V1/Controllers/Search/AccountController.php @@ -32,7 +32,6 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Support\Facades\Log; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; @@ -60,39 +59,36 @@ class AccountController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/search/searchAccounts - * - * @param Request $request - * - * @return JsonResponse|Response */ - public function search(Request $request): JsonResponse | Response + public function search(Request $request): JsonResponse|Response { - Log::debug('Now in account search()'); - $manager = $this->getManager(); - $query = trim((string)$request->get('query')); - $field = trim((string)$request->get('field')); - $type = $request->get('type') ?? 'all'; + app('log')->debug('Now in account search()'); + $manager = $this->getManager(); + $query = trim((string)$request->get('query')); + $field = trim((string)$request->get('field')); + $type = $request->get('type') ?? 'all'; if ('' === $query || !in_array($field, $this->validFields, true)) { return response(null, 422); } - $types = $this->mapAccountTypes($type); + $types = $this->mapAccountTypes($type); /** @var AccountSearch $search */ - $search = app(AccountSearch::class); + $search = app(AccountSearch::class); $search->setUser(auth()->user()); $search->setTypes($types); $search->setField($field); $search->setQuery($query); - $accounts = $search->search(); + $accounts = $search->search(); + /** @var AccountTransformer $transformer */ $transformer = app(AccountTransformer::class); $transformer->setParameters($this->parameters); - $count = $accounts->count(); - $perPage = 0 === $count ? 1 : $count; - $paginator = new LengthAwarePaginator($accounts, $count, $perPage, 1); + $count = $accounts->count(); + $perPage = 0 === $count ? 1 : $count; + $paginator = new LengthAwarePaginator($accounts, $count, $perPage, 1); - $resource = new FractalCollection($accounts, $transformer, 'accounts'); + $resource = new FractalCollection($accounts, $transformer, 'accounts'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); diff --git a/app/Api/V1/Controllers/Search/TransactionController.php b/app/Api/V1/Controllers/Search/TransactionController.php index 2588d0520a..962a454253 100644 --- a/app/Api/V1/Controllers/Search/TransactionController.php +++ b/app/Api/V1/Controllers/Search/TransactionController.php @@ -42,35 +42,31 @@ class TransactionController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/search/searchTransactions * - * @param Request $request - * @param SearchInterface $searcher - * - * @return JsonResponse * @throws FireflyException */ public function search(Request $request, SearchInterface $searcher): JsonResponse { - $manager = $this->getManager(); - $fullQuery = (string)$request->get('query'); - $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = $this->parameters->get('limit'); + $manager = $this->getManager(); + $fullQuery = (string)$request->get('query'); + $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); + $pageSize = $this->parameters->get('limit'); $searcher->parseQuery($fullQuery); $searcher->setPage($page); $searcher->setLimit($pageSize); - $groups = $searcher->searchTransactions(); - $parameters = ['search' => $fullQuery]; - $url = route('api.v1.search.transactions') . '?' . http_build_query($parameters); + $groups = $searcher->searchTransactions(); + $parameters = ['search' => $fullQuery]; + $url = route('api.v1.search.transactions').'?'.http_build_query($parameters); $groups->setPath($url); $transactions = $groups->getCollection(); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Collection($transactions, $transformer, 'transactions'); + $resource = new Collection($transactions, $transformer, 'transactions'); $resource->setPaginator(new IlluminatePaginatorAdapter($groups)); - $array = $manager->createData($resource)->toArray(); + $array = $manager->createData($resource)->toArray(); return response()->json($array)->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Summary/BasicController.php b/app/Api/V1/Controllers/Summary/BasicController.php index 28ec3b227a..0ac913f809 100644 --- a/app/Api/V1/Controllers/Summary/BasicController.php +++ b/app/Api/V1/Controllers/Summary/BasicController.php @@ -25,21 +25,19 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\Summary; use Carbon\Carbon; -use Exception; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Data\DateRequest; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Helpers\Report\NetWorthInterface; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; -use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; @@ -57,8 +55,6 @@ class BasicController extends Controller /** * BasicController constructor. - * - */ public function __construct() { @@ -90,28 +86,29 @@ class BasicController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/summary/getBasicSummary * - * @param DateRequest $request - * - * @return JsonResponse - * @throws Exception + * @throws \Exception */ public function basic(DateRequest $request): JsonResponse { // parameters for boxes: - $dates = $request->getAll(); - $start = $dates['start']; - $end = $dates['end']; - $code = $request->get('currency_code'); + $dates = $request->getAll(); + $start = $dates['start']; + $end = $dates['end']; + $code = $request->get('currency_code'); // balance information: $balanceData = $this->getBalanceInformation($start, $end); $billData = $this->getBillInformation($start, $end); $spentData = $this->getLeftToSpendInfo($start, $end); - $networthData = $this->getNetWorthInfo($start, $end); - $total = array_merge($balanceData, $billData, $spentData, $networthData); + $netWorthData = $this->getNetWorthInfo($start, $end); + // $balanceData = []; + // $billData = []; + // $spentData = []; + // $netWorthData = []; + $total = array_merge($balanceData, $billData, $spentData, $netWorthData); // give new keys - $return = []; + $return = []; foreach ($total as $entry) { if (null === $code || ($code === $entry['currency_code'])) { $return[$entry['key']] = $entry; @@ -121,65 +118,50 @@ class BasicController extends Controller return response()->json($return); } - /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ private function getBalanceInformation(Carbon $start, Carbon $end): array { // prep some arrays: - $incomes = []; - $expenses = []; - $sums = []; - $return = []; + $incomes = []; + $expenses = []; + $sums = []; + $return = []; // collect income of user using the new group collector. /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); - $collector - ->setRange($start, $end) - // set page to retrieve - ->setPage($this->parameters->get('page')) - // set types of transactions to return. - ->setTypes([TransactionType::DEPOSIT]); + $collector->setRange($start, $end)->setPage($this->parameters->get('page'))->setTypes([TransactionType::DEPOSIT]); + + $set = $collector->getExtractedJournals(); - $set = $collector->getExtractedJournals(); /** @var array $transactionJournal */ foreach ($set as $transactionJournal) { $currencyId = (int)$transactionJournal['currency_id']; - $incomes[$currencyId] = $incomes[$currencyId] ?? '0'; + $incomes[$currencyId] ??= '0'; $incomes[$currencyId] = bcadd( $incomes[$currencyId], bcmul($transactionJournal['amount'], '-1') ); - $sums[$currencyId] = $sums[$currencyId] ?? '0'; + $sums[$currencyId] ??= '0'; $sums[$currencyId] = bcadd($sums[$currencyId], bcmul($transactionJournal['amount'], '-1')); } // collect expenses of user using the new group collector. /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); - $collector - ->setRange($start, $end) - // set page to retrieve - ->setPage($this->parameters->get('page')) - // set types of transactions to return. - ->setTypes([TransactionType::WITHDRAWAL]); - $set = $collector->getExtractedJournals(); + $collector->setRange($start, $end)->setPage($this->parameters->get('page'))->setTypes([TransactionType::WITHDRAWAL]); + $set = $collector->getExtractedJournals(); /** @var array $transactionJournal */ foreach ($set as $transactionJournal) { $currencyId = (int)$transactionJournal['currency_id']; - $expenses[$currencyId] = $expenses[$currencyId] ?? '0'; + $expenses[$currencyId] ??= '0'; $expenses[$currencyId] = bcadd($expenses[$currencyId], $transactionJournal['amount']); - $sums[$currencyId] = $sums[$currencyId] ?? '0'; + $sums[$currencyId] ??= '0'; $sums[$currencyId] = bcadd($sums[$currencyId], $transactionJournal['amount']); } // format amounts: - $keys = array_keys($sums); + $keys = array_keys($sums); foreach ($keys as $currencyId) { $currency = $this->currencyRepos->find($currencyId); if (null === $currency) { @@ -196,8 +178,8 @@ class BasicController extends Controller 'currency_decimal_places' => $currency->decimal_places, 'value_parsed' => app('amount')->formatAnything($currency, $sums[$currencyId] ?? '0', false), 'local_icon' => 'balance-scale', - 'sub_title' => app('amount')->formatAnything($currency, $expenses[$currencyId] ?? '0', false) . - ' + ' . app('amount')->formatAnything($currency, $incomes[$currencyId] ?? '0', false), + 'sub_title' => app('amount')->formatAnything($currency, $expenses[$currencyId] ?? '0', false). + ' + '.app('amount')->formatAnything($currency, $incomes[$currencyId] ?? '0', false), ]; $return[] = [ 'key' => sprintf('spent-in-%s', $currency->code), @@ -228,12 +210,6 @@ class BasicController extends Controller return $return; } - /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ private function getBillInformation(Carbon $start, Carbon $end): array { app('log')->debug(sprintf('Now in getBillInformation("%s", "%s")', $start->format('Y-m-d'), $end->format('Y-m-d-'))); @@ -244,7 +220,8 @@ class BasicController extends Controller $paidAmount = $this->billRepository->sumPaidInRange($start, $end); $unpaidAmount = $this->billRepository->sumUnpaidInRange($start, $end); - $return = []; + $return = []; + /** * @var array $info */ @@ -283,15 +260,12 @@ class BasicController extends Controller ]; } app('log')->debug(sprintf('Done with getBillInformation("%s", "%s")', $start->format('Y-m-d'), $end->format('Y-m-d-'))); + return $return; } /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - * @throws Exception + * @throws \Exception */ private function getLeftToSpendInfo(Carbon $start, Carbon $end): array { @@ -307,13 +281,13 @@ class BasicController extends Controller $spentInCurrency = $row['sum']; $leftToSpend = bcadd($amount, $spentInCurrency); - $days = $today->diffInDays($end) + 1; - $perDay = '0'; + $days = $today->diffInDays($end) + 1; + $perDay = '0'; if (0 !== $days && bccomp($leftToSpend, '0') > -1) { $perDay = bcdiv($leftToSpend, (string)$days); } - $return[] = [ + $return[] = [ 'key' => sprintf('left-to-spend-in-%s', $row['currency_code']), 'title' => trans('firefly.box_left_to_spend_in_currency', ['currency' => $row['currency_symbol']]), 'monetary_value' => $leftToSpend, @@ -335,17 +309,11 @@ class BasicController extends Controller return $return; } - /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ private function getNetWorthInfo(Carbon $start, Carbon $end): array { /** @var User $user */ - $user = auth()->user(); - $date = today(config('app.timezone'))->startOfDay(); + $user = auth()->user(); + $date = today(config('app.timezone'))->startOfDay(); // start and end in the future? use $end if ($this->notInDateRange($date, $start, $end)) { /** @var Carbon $date */ @@ -355,12 +323,12 @@ class BasicController extends Controller /** @var NetWorthInterface $netWorthHelper */ $netWorthHelper = app(NetWorthInterface::class); $netWorthHelper->setUser($user); - $allAccounts = $this->accountRepository->getActiveAccountsByType( + $allAccounts = $this->accountRepository->getActiveAccountsByType( [AccountType::ASSET, AccountType::DEFAULT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::DEBT] ); // filter list on preference of being included. - $filtered = $allAccounts->filter( + $filtered = $allAccounts->filter( function (Account $account) { $includeNetWorth = $this->accountRepository->getMetaValue($account, 'include_net_worth'); @@ -368,25 +336,26 @@ class BasicController extends Controller } ); - $netWorthSet = $netWorthHelper->getNetWorthByCurrency($filtered, $date); - $return = []; - foreach ($netWorthSet as $data) { - /** @var TransactionCurrency $currency */ - $currency = $data['currency']; + $netWorthSet = $netWorthHelper->byAccounts($filtered, $date); + $return = []; + foreach ($netWorthSet as $key => $data) { + if ('native' === $key) { + continue; + } $amount = $data['balance']; if (0 === bccomp($amount, '0')) { continue; } // return stuff $return[] = [ - 'key' => sprintf('net-worth-in-%s', $currency->code), - 'title' => trans('firefly.box_net_worth_in_currency', ['currency' => $currency->symbol]), + 'key' => sprintf('net-worth-in-%s', $data['currency_code']), + 'title' => trans('firefly.box_net_worth_in_currency', ['currency' => $data['currency_symbol']]), 'monetary_value' => $amount, - 'currency_id' => (string)$currency->id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => $currency->decimal_places, - 'value_parsed' => app('amount')->formatAnything($currency, $data['balance'], false), + 'currency_id' => (string)$data['currency_id'], + 'currency_code' => $data['currency_code'], + 'currency_symbol' => $data['currency_symbol'], + 'currency_decimal_places' => $data['currency_decimal_places'], + 'value_parsed' => app('amount')->formatFlat($data['currency_symbol'], $data['currency_decimal_places'], $data['balance'], false), 'local_icon' => 'line-chart', 'sub_title' => '', ]; @@ -397,13 +366,6 @@ class BasicController extends Controller /** * Check if date is outside session range. - * - * @param Carbon $date - * - * @param Carbon $start - * @param Carbon $end - * - * @return bool */ protected function notInDateRange(Carbon $date, Carbon $start, Carbon $end): bool // Validate a preference { diff --git a/app/Api/V1/Controllers/System/AboutController.php b/app/Api/V1/Controllers/System/AboutController.php index 390309d991..0b1bb117a9 100644 --- a/app/Api/V1/Controllers/System/AboutController.php +++ b/app/Api/V1/Controllers/System/AboutController.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\System; -use DB; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Transformers\UserTransformer; use Illuminate\Http\JsonResponse; @@ -42,8 +41,6 @@ class AboutController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/about/getAbout * * Returns system information. - * - * @return JsonResponse */ public function about(): JsonResponse { @@ -51,15 +48,15 @@ class AboutController extends Controller $replace = ['\~', '# ']; $phpVersion = str_replace($search, $replace, PHP_VERSION); $phpOs = str_replace($search, $replace, PHP_OS); - $currentDriver = DB::getDriverName(); + $currentDriver = \DB::getDriverName(); $data = [ - 'version' => config('firefly.version'), - 'api_version' => config('firefly.api_version'), - 'php_version' => $phpVersion, - 'os' => $phpOs, - 'driver' => $currentDriver, - ]; + 'version' => config('firefly.version'), + 'api_version' => config('firefly.api_version'), + 'php_version' => $phpVersion, + 'os' => $phpOs, + 'driver' => $currentDriver, + ]; return response()->api(['data' => $data])->header('Content-Type', self::CONTENT_TYPE); } @@ -69,18 +66,16 @@ class AboutController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/about/getCurrentUser * * Returns information about the user. - * - * @return JsonResponse */ public function user(): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); /** @var UserTransformer $transformer */ $transformer = app(UserTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item(auth()->user(), $transformer, 'users'); + $resource = new Item(auth()->user(), $transformer, 'users'); return response()->api($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/System/ConfigurationController.php b/app/Api/V1/Controllers/System/ConfigurationController.php index b91efd9360..d1ae4de98d 100644 --- a/app/Api/V1/Controllers/System/ConfigurationController.php +++ b/app/Api/V1/Controllers/System/ConfigurationController.php @@ -29,10 +29,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Support\Binder\EitherConfigKey; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; -use Validator; /** * Class ConfigurationController @@ -60,18 +56,16 @@ class ConfigurationController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/configuration/getConfiguration * - * @return JsonResponse - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function index(): JsonResponse { try { $dynamicData = $this->getDynamicConfiguration(); } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException('200030: Could not load config variables.', 0, $e); } $staticData = $this->getStaticConfiguration(); @@ -96,10 +90,6 @@ class ConfigurationController extends Controller /** * Get all config values. - * - * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ private function getDynamicConfiguration(): array { @@ -116,9 +106,6 @@ class ConfigurationController extends Controller ]; } - /** - * @return array - */ private function getStaticConfiguration(): array { $list = EitherConfigKey::$static; @@ -133,12 +120,6 @@ class ConfigurationController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/configuration/getSingleConfiguration - * - * @param string $configKey - * - * @return JsonResponse - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function show(string $configKey): JsonResponse { @@ -169,20 +150,14 @@ class ConfigurationController extends Controller * * Update the configuration. * - * @param UpdateRequest $request - * @param string $name - * - * @return JsonResponse - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function update(UpdateRequest $request, string $name): JsonResponse { - $rules = ['value' => 'required']; + $rules = ['value' => 'required']; if (!$this->repository->hasRole(auth()->user(), 'owner')) { $messages = ['value' => '200005: You need the "owner" role to do this.']; - Validator::make([], $rules, $messages)->validate(); + \Validator::make([], $rules, $messages)->validate(); } $data = $request->getAll(); $shortName = str_replace('configuration.', '', $name); diff --git a/app/Api/V1/Controllers/System/CronController.php b/app/Api/V1/Controllers/System/CronController.php index da110e13b8..397e579ecb 100644 --- a/app/Api/V1/Controllers/System/CronController.php +++ b/app/Api/V1/Controllers/System/CronController.php @@ -27,9 +27,6 @@ use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\System\CronRequest; use FireflyIII\Support\Http\Controllers\CronRunner; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class CronController @@ -41,27 +38,20 @@ class CronController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/about/getCron - * - * @param CronRequest $request - * @param string $token - * - * @return JsonResponse - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ - public function cron(CronRequest $request, string $token): JsonResponse + public function cron(CronRequest $request): JsonResponse { - $config = $request->getAll(); + $config = $request->getAll(); - Log::debug(sprintf('Now in %s', __METHOD__)); - Log::debug(sprintf('Date is %s', $config['date']->toIsoString())); + app('log')->debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Date is %s', $config['date']->toIsoString())); $return = []; $return['recurring_transactions'] = $this->runRecurring($config['force'], $config['date']); $return['auto_budgets'] = $this->runAutoBudget($config['force'], $config['date']); if (true === config('cer.download_enabled')) { $return['exchange_rates'] = $this->exchangeRatesCronJob($config['force'], $config['date']); } - $return['bill_warnings'] = $this->billWarningCronJob($config['force'], $config['date']); + $return['bill_warnings'] = $this->billWarningCronJob($config['force'], $config['date']); return response()->json($return); } diff --git a/app/Api/V1/Controllers/System/UserController.php b/app/Api/V1/Controllers/System/UserController.php index b0c6e519bc..b650b2d3c2 100644 --- a/app/Api/V1/Controllers/System/UserController.php +++ b/app/Api/V1/Controllers/System/UserController.php @@ -33,7 +33,6 @@ use FireflyIII\Transformers\UserTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Support\Facades\Log; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; @@ -47,8 +46,6 @@ class UserController extends Controller /** * UserController constructor. - * - */ public function __construct() { @@ -68,9 +65,6 @@ class UserController extends Controller * * Remove the specified resource from storage. * - * @param User $user - * - * @return JsonResponse * @throws FireflyException */ public function destroy(User $user): JsonResponse @@ -86,6 +80,7 @@ class UserController extends Controller return response()->json([], 204); } + throw new FireflyException('200025: No access to function.'); } @@ -95,30 +90,29 @@ class UserController extends Controller * * Display a listing of the resource. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { // user preferences - $pageSize = $this->parameters->get('limit'); - $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $manager = $this->getManager(); // build collection - $collection = $this->repository->all(); - $count = $collection->count(); - $users = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $collection = $this->repository->all(); + $count = $collection->count(); + $users = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($users, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.users.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($users, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.users.index').$this->buildParams()); // make resource /** @var UserTransformer $transformer */ $transformer = app(UserTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($users, $transformer, 'users'); + $resource = new FractalCollection($users, $transformer, 'users'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -129,21 +123,18 @@ class UserController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/users/getUser * * Show a single user. - * - * @param User $user - * - * @return JsonResponse */ public function show(User $user): JsonResponse { // make manager - $manager = $this->getManager(); + $manager = $this->getManager(); + // make resource /** @var UserTransformer $transformer */ $transformer = app(UserTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($user, $transformer, 'users'); + $resource = new Item($user, $transformer, 'users'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } @@ -153,16 +144,12 @@ class UserController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/users/storeUser * * Store a new user. - * - * @param UserStoreRequest $request - * - * @return JsonResponse */ public function store(UserStoreRequest $request): JsonResponse { - $data = $request->getAll(); - $user = $this->repository->store($data); - $manager = $this->getManager(); + $data = $request->getAll(); + $user = $this->repository->store($data); + $manager = $this->getManager(); // make resource @@ -170,7 +157,7 @@ class UserController extends Controller $transformer = app(UserTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($user, $transformer, 'users'); + $resource = new Item($user, $transformer, 'users'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } @@ -180,30 +167,26 @@ class UserController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/users/updateUser * * Update a user. - * - * @param UserUpdateRequest $request - * @param User $user - * - * @return JsonResponse */ public function update(UserUpdateRequest $request, User $user): JsonResponse { - $data = $request->getAll(); + $data = $request->getAll(); // can only update 'blocked' when user is admin. if (!$this->repository->hasRole(auth()->user(), 'owner')) { - Log::debug('Quietly drop fields "blocked" and "blocked_code" from request.'); + app('log')->debug('Quietly drop fields "blocked" and "blocked_code" from request.'); unset($data['blocked'], $data['blocked_code']); } - $user = $this->repository->update($user, $data); - $manager = $this->getManager(); + $user = $this->repository->update($user, $data); + $manager = $this->getManager(); + // make resource /** @var UserTransformer $transformer */ $transformer = app(UserTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($user, $transformer, 'users'); + $resource = new Item($user, $transformer, 'users'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/User/PreferencesController.php b/app/Api/V1/Controllers/User/PreferencesController.php index 325e567814..ca61956772 100644 --- a/app/Api/V1/Controllers/User/PreferencesController.php +++ b/app/Api/V1/Controllers/User/PreferencesController.php @@ -41,8 +41,8 @@ use League\Fractal\Resource\Item; */ class PreferencesController extends Controller { - public const DATE_FORMAT = 'Y-m-d'; - public const RESOURCE_KEY = 'preferences'; + public const string DATE_FORMAT = 'Y-m-d'; + public const string RESOURCE_KEY = 'preferences'; /** * This endpoint is documented at: @@ -50,7 +50,6 @@ class PreferencesController extends Controller * * List all of them. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse @@ -62,14 +61,14 @@ class PreferencesController extends Controller $preferences = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($preferences, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.preferences.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($preferences, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.preferences.index').$this->buildParams()); /** @var PreferenceTransformer $transformer */ $transformer = app(PreferenceTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($preferences, $transformer, self::RESOURCE_KEY); + $resource = new FractalCollection($preferences, $transformer, self::RESOURCE_KEY); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -80,19 +79,16 @@ class PreferencesController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/preferences/getPreference * * Return a single preference by name. - * - * @param Preference $preference - * - * @return JsonResponse */ public function show(Preference $preference): JsonResponse { - $manager = $this->getManager(); + $manager = $this->getManager(); + /** @var PreferenceTransformer $transformer */ $transformer = app(PreferenceTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($preference, $transformer, 'preferences'); + $resource = new Item($preference, $transformer, 'preferences'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } @@ -101,22 +97,19 @@ class PreferencesController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/preferences/storePreference * - * @param PreferenceStoreRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function store(PreferenceStoreRequest $request): JsonResponse { - $manager = $this->getManager(); - $data = $request->getAll(); - $pref = app('preferences')->set($data['name'], $data['data']); + $manager = $this->getManager(); + $data = $request->getAll(); + $pref = app('preferences')->set($data['name'], $data['data']); /** @var PreferenceTransformer $transformer */ $transformer = app(PreferenceTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($pref, $transformer, 'preferences'); + $resource = new Item($pref, $transformer, 'preferences'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } @@ -125,23 +118,19 @@ class PreferencesController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/preferences/updatePreference * - * @param PreferenceUpdateRequest $request - * @param Preference $preference - * - * @return JsonResponse * @throws FireflyException */ public function update(PreferenceUpdateRequest $request, Preference $preference): JsonResponse { - $manager = $this->getManager(); - $data = $request->getAll(); - $pref = app('preferences')->set($preference->name, $data['data']); + $manager = $this->getManager(); + $data = $request->getAll(); + $pref = app('preferences')->set($preference->name, $data['data']); /** @var PreferenceTransformer $transformer */ $transformer = app(PreferenceTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($pref, $transformer, 'preferences'); + $resource = new Item($pref, $transformer, 'preferences'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Webhook/AttemptController.php b/app/Api/V1/Controllers/Webhook/AttemptController.php index 901e22519e..222e25fc5e 100644 --- a/app/Api/V1/Controllers/Webhook/AttemptController.php +++ b/app/Api/V1/Controllers/Webhook/AttemptController.php @@ -32,20 +32,20 @@ use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface; use FireflyIII\Transformers\WebhookAttemptTransformer; use Illuminate\Http\JsonResponse; use Illuminate\Pagination\LengthAwarePaginator; +use Illuminate\Support\Facades\Log; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class AttemptController */ class AttemptController extends Controller { - public const RESOURCE_KEY = 'webhook_attempts'; + public const string RESOURCE_KEY = 'webhook_attempts'; private WebhookRepositoryInterface $repository; - /** - */ public function __construct() { parent::__construct(); @@ -63,10 +63,6 @@ class AttemptController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/webhooks/getWebhookMessageAttempts * - * @param Webhook $webhook - * @param WebhookMessage $message - * - * @return JsonResponse * @throws FireflyException */ public function index(Webhook $webhook, WebhookMessage $message): JsonResponse @@ -74,22 +70,28 @@ class AttemptController extends Controller if ($message->webhook_id !== $webhook->id) { throw new FireflyException('200040: Webhook and webhook message are no match'); } + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning(sprintf('User lists webhook attempts of webhook #%d and message #%d, but webhooks are DISABLED.', $webhook->id, $message->id)); - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); - $collection = $this->repository->getAttempts($message); - $count = $collection->count(); - $attempts = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + Log::channel('audit')->info(sprintf('User lists webhook attempts of webhook #%d and message #%d.', $webhook->id, $message->id)); + + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getAttempts($message); + $count = $collection->count(); + $attempts = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($attempts, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.webhooks.attempts.index', [$webhook->id, $message->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($attempts, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.webhooks.attempts.index', [$webhook->id, $message->id]).$this->buildParams()); /** @var WebhookAttemptTransformer $transformer */ $transformer = app(WebhookAttemptTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($attempts, $transformer, 'webhook_attempts'); + $resource = new FractalCollection($attempts, $transformer, 'webhook_attempts'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -101,11 +103,6 @@ class AttemptController extends Controller * * Show single instance. * - * @param Webhook $webhook - * @param WebhookMessage $message - * @param WebhookAttempt $attempt - * - * @return JsonResponse * @throws FireflyException */ public function show(Webhook $webhook, WebhookMessage $message, WebhookAttempt $attempt): JsonResponse @@ -117,12 +114,20 @@ class AttemptController extends Controller throw new FireflyException('200041: Webhook message and webhook attempt are no match'); } - $manager = $this->getManager(); + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning(sprintf('User views single webhook attempt #%d of webhook #%d and message #%d, but webhooks are DISABLED', $attempt->id, $webhook->id, $message->id)); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + + Log::channel('audit')->info(sprintf('User views single webhook attempt #%d of webhook #%d and message #%d.', $attempt->id, $webhook->id, $message->id)); + + $manager = $this->getManager(); /** @var WebhookAttemptTransformer $transformer */ $transformer = app(WebhookAttemptTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($attempt, $transformer, self::RESOURCE_KEY); + $resource = new Item($attempt, $transformer, self::RESOURCE_KEY); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Webhook/DestroyController.php b/app/Api/V1/Controllers/Webhook/DestroyController.php index da914b57d4..4899c7be20 100644 --- a/app/Api/V1/Controllers/Webhook/DestroyController.php +++ b/app/Api/V1/Controllers/Webhook/DestroyController.php @@ -31,6 +31,8 @@ use FireflyIII\Models\WebhookAttempt; use FireflyIII\Models\WebhookMessage; use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\Log; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class DestroyController @@ -39,8 +41,6 @@ class DestroyController extends Controller { private WebhookRepositoryInterface $repository; - /** - */ public function __construct() { parent::__construct(); @@ -59,13 +59,16 @@ class DestroyController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/webhooks/deleteWebhook * * Remove the specified resource from storage. - * - * @param Webhook $webhook - * - * @return JsonResponse */ public function destroy(Webhook $webhook): JsonResponse { + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning(sprintf('User tries to destroy webhook #%d. but webhooks are DISABLED.', $webhook->id)); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + + Log::channel('audit')->info(sprintf('User destroys webhook #%d.', $webhook->id)); $this->repository->destroy($webhook); app('preferences')->mark(); @@ -78,11 +81,6 @@ class DestroyController extends Controller * * Remove the specified resource from storage. * - * @param Webhook $webhook - * @param WebhookMessage $message - * @param WebhookAttempt $attempt - * - * @return JsonResponse * @throws FireflyException */ public function destroyAttempt(Webhook $webhook, WebhookMessage $message, WebhookAttempt $attempt): JsonResponse @@ -94,6 +92,14 @@ class DestroyController extends Controller throw new FireflyException('200041: Webhook message and webhook attempt are no match'); } + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning(sprintf('User tries to destroy webhook #%d, message #%d, attempt #%d, but webhooks are DISABLED.', $webhook->id, $message->id, $attempt->id)); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + + Log::channel('audit')->info(sprintf('User destroys webhook #%d, message #%d, attempt #%d.', $webhook->id, $message->id, $attempt->id)); + $this->repository->destroyAttempt($attempt); app('preferences')->mark(); @@ -106,10 +112,6 @@ class DestroyController extends Controller * * Remove the specified resource from storage. * - * @param Webhook $webhook - * @param WebhookMessage $message - * - * @return JsonResponse * @throws FireflyException */ public function destroyMessage(Webhook $webhook, WebhookMessage $message): JsonResponse @@ -117,6 +119,14 @@ class DestroyController extends Controller if ($message->webhook_id !== $webhook->id) { throw new FireflyException('200040: Webhook and webhook message are no match'); } + + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning(sprintf('User tries to destroy webhook #%d, message #%d, but webhooks are DISABLED.', $webhook->id, $message->id)); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + Log::channel('audit')->info(sprintf('User destroys webhook #%d, message #%d.', $webhook->id, $message->id)); + $this->repository->destroyMessage($message); app('preferences')->mark(); diff --git a/app/Api/V1/Controllers/Webhook/MessageController.php b/app/Api/V1/Controllers/Webhook/MessageController.php index 53b427af0e..4bef15df7f 100644 --- a/app/Api/V1/Controllers/Webhook/MessageController.php +++ b/app/Api/V1/Controllers/Webhook/MessageController.php @@ -31,20 +31,20 @@ use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface; use FireflyIII\Transformers\WebhookMessageTransformer; use Illuminate\Http\JsonResponse; use Illuminate\Pagination\LengthAwarePaginator; +use Illuminate\Support\Facades\Log; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class MessageController */ class MessageController extends Controller { - public const RESOURCE_KEY = 'webhook_messages'; + public const string RESOURCE_KEY = 'webhook_messages'; private WebhookRepositoryInterface $repository; - /** - */ public function __construct() { parent::__construct(); @@ -62,29 +62,32 @@ class MessageController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/webhooks/getWebhookMessages * - * @param Webhook $webhook - * - * @return JsonResponse * @throws FireflyException */ public function index(Webhook $webhook): JsonResponse { - $manager = $this->getManager(); - $pageSize = $this->parameters->get('limit'); - $collection = $this->repository->getMessages($webhook); + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning(sprintf('User tries to view messages of webhook #%d, but webhooks are DISABLED.', $webhook->id)); - $count = $collection->count(); - $messages = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + Log::channel('audit')->info(sprintf('User views messages of webhook #%d.', $webhook->id)); + $manager = $this->getManager(); + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getMessages($webhook); + + $count = $collection->count(); + $messages = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($messages, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.webhooks.messages.index', [$webhook->id]) . $this->buildParams()); + $paginator = new LengthAwarePaginator($messages, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.webhooks.messages.index', [$webhook->id]).$this->buildParams()); /** @var WebhookMessageTransformer $transformer */ $transformer = app(WebhookMessageTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($messages, $transformer, 'webhook_messages'); + $resource = new FractalCollection($messages, $transformer, 'webhook_messages'); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -96,10 +99,6 @@ class MessageController extends Controller * * Show single instance. * - * @param Webhook $webhook - * @param WebhookMessage $message - * - * @return JsonResponse * @throws FireflyException */ public function show(Webhook $webhook, WebhookMessage $message): JsonResponse @@ -107,13 +106,20 @@ class MessageController extends Controller if ($message->webhook_id !== $webhook->id) { throw new FireflyException('200040: Webhook and webhook message are no match'); } + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning(sprintf('User tries to view message #%d of webhook #%d, but webhooks are DISABLED.', $message->id, $webhook->id)); - $manager = $this->getManager(); + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + + Log::channel('audit')->info(sprintf('User views message #%d of webhook #%d.', $message->id, $webhook->id)); + + $manager = $this->getManager(); /** @var WebhookMessageTransformer $transformer */ $transformer = app(WebhookMessageTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($message, $transformer, self::RESOURCE_KEY); + $resource = new Item($message, $transformer, self::RESOURCE_KEY); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Webhook/ShowController.php b/app/Api/V1/Controllers/Webhook/ShowController.php index 4ad46fdacc..039e5eb693 100644 --- a/app/Api/V1/Controllers/Webhook/ShowController.php +++ b/app/Api/V1/Controllers/Webhook/ShowController.php @@ -34,20 +34,20 @@ use FireflyIII\Transformers\WebhookTransformer; use Illuminate\Http\JsonResponse; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class ShowController */ class ShowController extends Controller { - public const RESOURCE_KEY = 'webhooks'; + public const string RESOURCE_KEY = 'webhooks'; private WebhookRepositoryInterface $repository; - /** - */ public function __construct() { parent::__construct(); @@ -67,26 +67,32 @@ class ShowController extends Controller * * Display a listing of the webhooks of the user. * - * @return JsonResponse * @throws FireflyException */ public function index(): JsonResponse { - $manager = $this->getManager(); - $collection = $this->repository->all(); - $pageSize = $this->parameters->get('limit'); - $count = $collection->count(); - $webhooks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->info('User tries to view all webhooks, but webhooks are DISABLED.'); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + + Log::channel('audit')->info('User views all webhooks.'); + $manager = $this->getManager(); + $collection = $this->repository->all(); + $pageSize = $this->parameters->get('limit'); + $count = $collection->count(); + $webhooks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); // make paginator: - $paginator = new LengthAwarePaginator($webhooks, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.webhooks.index') . $this->buildParams()); + $paginator = new LengthAwarePaginator($webhooks, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.webhooks.index').$this->buildParams()); /** @var WebhookTransformer $transformer */ $transformer = app(WebhookTransformer::class); $transformer->setParameters($this->parameters); - $resource = new FractalCollection($webhooks, $transformer, self::RESOURCE_KEY); + $resource = new FractalCollection($webhooks, $transformer, self::RESOURCE_KEY); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); @@ -97,19 +103,22 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/webhooks/getWebhook * * Show single instance. - * - * @param Webhook $webhook - * - * @return JsonResponse */ public function show(Webhook $webhook): JsonResponse { - $manager = $this->getManager(); + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->info(sprintf('User tries to view webhook #%d, but webhooks are DISABLED.', $webhook->id)); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + + Log::channel('audit')->info(sprintf('User views webhook #%d.', $webhook->id)); + $manager = $this->getManager(); /** @var WebhookTransformer $transformer */ $transformer = app(WebhookTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($webhook, $transformer, self::RESOURCE_KEY); + $resource = new Item($webhook, $transformer, self::RESOURCE_KEY); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } @@ -119,15 +128,18 @@ class ShowController extends Controller * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/webhooks/triggerWebhookTransaction * * This method recycles part of the code of the StoredGroupEventHandler. - * - * @param Webhook $webhook - * @param TransactionGroup $group - * - * @return JsonResponse */ public function triggerTransaction(Webhook $webhook, TransactionGroup $group): JsonResponse { + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->info(sprintf('User tries to trigger webhook #%d on transaction group #%d, but webhooks are DISABLED.', $webhook->id, $group->id)); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + app('log')->debug(sprintf('Now in triggerTransaction(%d, %d)', $webhook->id, $group->id)); + Log::channel('audit')->info(sprintf('User triggers webhook #%d on transaction group #%d.', $webhook->id, $group->id)); + /** @var MessageGeneratorInterface $engine */ $engine = app(MessageGeneratorInterface::class); $engine->setUser(auth()->user()); diff --git a/app/Api/V1/Controllers/Webhook/StoreController.php b/app/Api/V1/Controllers/Webhook/StoreController.php index 6c573a7929..e134feb34c 100644 --- a/app/Api/V1/Controllers/Webhook/StoreController.php +++ b/app/Api/V1/Controllers/Webhook/StoreController.php @@ -28,18 +28,18 @@ use FireflyIII\Api\V1\Requests\Models\Webhook\CreateRequest; use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface; use FireflyIII\Transformers\WebhookTransformer; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\Log; use League\Fractal\Resource\Item; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class StoreController */ class StoreController extends Controller { - public const RESOURCE_KEY = 'webhooks'; + public const string RESOURCE_KEY = 'webhooks'; private WebhookRepositoryInterface $repository; - /** - */ public function __construct() { parent::__construct(); @@ -56,21 +56,26 @@ class StoreController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/webhooks/storeWebhook - * - * @param CreateRequest $request - * - * @return JsonResponse */ public function store(CreateRequest $request): JsonResponse { - $data = $request->getData(); - $webhook = $this->repository->store($data); - $manager = $this->getManager(); + $data = $request->getData(); + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->info('User tries to store new webhook, but webhooks are DISABLED.', $data); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + + $webhook = $this->repository->store($data); + $manager = $this->getManager(); + + Log::channel('audit')->info('User stores new webhook', $data); + /** @var WebhookTransformer $transformer */ $transformer = app(WebhookTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($webhook, $transformer, 'webhooks'); + $resource = new Item($webhook, $transformer, 'webhooks'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Controllers/Webhook/SubmitController.php b/app/Api/V1/Controllers/Webhook/SubmitController.php index bf325fdbb4..50092296d5 100644 --- a/app/Api/V1/Controllers/Webhook/SubmitController.php +++ b/app/Api/V1/Controllers/Webhook/SubmitController.php @@ -28,6 +28,8 @@ use FireflyIII\Jobs\SendWebhookMessage; use FireflyIII\Models\Webhook; use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\Log; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class SubmitController @@ -36,8 +38,6 @@ class SubmitController extends Controller { private WebhookRepositoryInterface $repository; - /** - */ public function __construct() { parent::__construct(); @@ -54,13 +54,16 @@ class SubmitController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/webhooks/submitWebook - * - * @param Webhook $webhook - * - * @return JsonResponse */ public function submit(Webhook $webhook): JsonResponse { + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->info(sprintf('User tries to submit webhook #%d, but webhooks are DISABLED.', $webhook->id)); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + + Log::channel('audit')->info(sprintf('User submits webhook #%d', $webhook->id)); // count messages that can be sent. $messages = $this->repository->getReadyMessages($webhook); if (0 === $messages->count()) { diff --git a/app/Api/V1/Controllers/Webhook/UpdateController.php b/app/Api/V1/Controllers/Webhook/UpdateController.php index 658412801b..680e423043 100644 --- a/app/Api/V1/Controllers/Webhook/UpdateController.php +++ b/app/Api/V1/Controllers/Webhook/UpdateController.php @@ -29,7 +29,9 @@ use FireflyIII\Models\Webhook; use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface; use FireflyIII\Transformers\WebhookTransformer; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\Log; use League\Fractal\Resource\Item; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class UpdateController @@ -38,8 +40,6 @@ class UpdateController extends Controller { private WebhookRepositoryInterface $repository; - /** - */ public function __construct() { parent::__construct(); @@ -56,22 +56,26 @@ class UpdateController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/webhooks/updateWebhook - * - * @param Webhook $webhook - * @param UpdateRequest $request - * - * @return JsonResponse */ public function update(Webhook $webhook, UpdateRequest $request): JsonResponse { - $data = $request->getData(); - $webhook = $this->repository->update($webhook, $data); - $manager = $this->getManager(); + $data = $request->getData(); + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->info(sprintf('User tries to update webhook #%d, but webhooks are DISABLED.', $webhook->id), $data); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + + $webhook = $this->repository->update($webhook, $data); + $manager = $this->getManager(); + + Log::channel('audit')->info(sprintf('User updates webhook #%d', $webhook->id), $data); + /** @var WebhookTransformer $transformer */ $transformer = app(WebhookTransformer::class); $transformer->setParameters($this->parameters); - $resource = new Item($webhook, $transformer, 'webhooks'); + $resource = new Item($webhook, $transformer, 'webhooks'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); } diff --git a/app/Api/V1/Middleware/ApiDemoUser.php b/app/Api/V1/Middleware/ApiDemoUser.php index 02553d67f0..e031bfa039 100644 --- a/app/Api/V1/Middleware/ApiDemoUser.php +++ b/app/Api/V1/Middleware/ApiDemoUser.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Middleware; -use Closure; use FireflyIII\User; use Illuminate\Http\Request; @@ -35,14 +34,11 @@ class ApiDemoUser /** * Handle an incoming request. * - * @param Request $request - * @param Closure $next - * * @return mixed */ - public function handle(Request $request, Closure $next) + public function handle(Request $request, \Closure $next) { - /** @var User|null $user */ + /** @var null|User $user */ $user = $request->user(); if (null === $user) { diff --git a/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php b/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php index 875d1f7335..39bafac82c 100644 --- a/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php +++ b/app/Api/V1/Requests/Autocomplete/AutocompleteRequest.php @@ -33,12 +33,9 @@ use Illuminate\Foundation\Http\FormRequest; */ class AutocompleteRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; - /** - * @return array - */ public function getData(): array { $types = $this->convertString('types'); @@ -57,9 +54,6 @@ class AutocompleteRequest extends FormRequest ]; } - /** - * @return array - */ public function rules(): array { return [ diff --git a/app/Api/V1/Requests/Data/Bulk/MoveTransactionsRequest.php b/app/Api/V1/Requests/Data/Bulk/MoveTransactionsRequest.php index 59df3d2678..4ec6250dd2 100644 --- a/app/Api/V1/Requests/Data/Bulk/MoveTransactionsRequest.php +++ b/app/Api/V1/Requests/Data/Bulk/MoveTransactionsRequest.php @@ -28,6 +28,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -38,9 +39,6 @@ class MoveTransactionsRequest extends FormRequest use ChecksLogin; use ConvertsDataTypes; - /** - * @return array - */ public function getAll(): array { return [ @@ -62,16 +60,12 @@ class MoveTransactionsRequest extends FormRequest /** * Configure the validator instance with special rules for after the basic validation rules. - * - * @param Validator $validator * TODO this is duplicate. - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { // validate start before end only if both are there. $data = $validator->getData(); if (array_key_exists('original_account', $data) && array_key_exists('destination_account', $data)) { @@ -79,20 +73,18 @@ class MoveTransactionsRequest extends FormRequest } } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } - /** - * @param Validator $validator - * - * @return void - */ private function validateMove(Validator $validator): void { - $data = $validator->getData(); - $repository = app(AccountRepositoryInterface::class); + $data = $validator->getData(); + $repository = app(AccountRepositoryInterface::class); $repository->setUser(auth()->user()); - $original = $repository->find((int)$data['original_account']); - $destination = $repository->find((int)$data['destination_account']); + $original = $repository->find((int)$data['original_account']); + $destination = $repository->find((int)$data['destination_account']); // not the same type: if ($original->accountType->type !== $destination->accountType->type) { diff --git a/app/Api/V1/Requests/Data/Bulk/TransactionRequest.php b/app/Api/V1/Requests/Data/Bulk/TransactionRequest.php index 07b29a7a60..fb8f302f76 100644 --- a/app/Api/V1/Requests/Data/Bulk/TransactionRequest.php +++ b/app/Api/V1/Requests/Data/Bulk/TransactionRequest.php @@ -32,7 +32,6 @@ use FireflyIII\Validation\Api\Data\Bulk\ValidatesBulkTransactionQuery; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; -use JsonException; /** * Class TransactionRequest @@ -43,27 +42,22 @@ class TransactionRequest extends FormRequest use ConvertsDataTypes; use ValidatesBulkTransactionQuery; - /** - * @return array - */ public function getAll(): array { $data = []; + try { $data = [ 'query' => json_decode($this->get('query'), true, 8, JSON_THROW_ON_ERROR), ]; - } catch (JsonException $e) { + } catch (\JsonException $e) { // dont really care. the validation should catch invalid json. - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); } return $data; } - /** - * @return array - */ public function rules(): array { return [ @@ -71,18 +65,16 @@ class TransactionRequest extends FormRequest ]; } - /** - * @param Validator $validator - * - * @return void - */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { // validate transaction query data. $this->validateTransactionQuery($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/Data/DateRequest.php b/app/Api/V1/Requests/Data/DateRequest.php index a6e1cdf23b..416ee8793a 100644 --- a/app/Api/V1/Requests/Data/DateRequest.php +++ b/app/Api/V1/Requests/Data/DateRequest.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Data; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; @@ -35,26 +36,28 @@ use Illuminate\Foundation\Http\FormRequest; */ class DateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { + $start = $this->getCarbonDate('start'); + $end = $this->getCarbonDate('end'); + if ($start->diffInYears($end) > 5) { + throw new FireflyException('Date range out of range.'); + } + return [ - 'start' => $this->getCarbonDate('start'), - 'end' => $this->getCarbonDate('end'), + 'start' => $start, + 'end' => $end, ]; } /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { diff --git a/app/Api/V1/Requests/Data/DestroyRequest.php b/app/Api/V1/Requests/Data/DestroyRequest.php index ea96e92c26..5296652d51 100644 --- a/app/Api/V1/Requests/Data/DestroyRequest.php +++ b/app/Api/V1/Requests/Data/DestroyRequest.php @@ -32,13 +32,11 @@ use Illuminate\Foundation\Http\FormRequest; */ class DestroyRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return string */ public function getObjects(): string { @@ -47,13 +45,11 @@ class DestroyRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { - $valid = 'budgets,bills,piggy_banks,rules,recurring,categories,tags,object_groups' . - ',accounts,asset_accounts,expense_accounts,revenue_accounts,liabilities,transactions,withdrawals,deposits,transfers' . + $valid = 'budgets,bills,piggy_banks,rules,recurring,categories,tags,object_groups'. + ',accounts,asset_accounts,expense_accounts,revenue_accounts,liabilities,transactions,withdrawals,deposits,transfers'. ',not_assets_liabilities'; return [ diff --git a/app/Api/V1/Requests/Data/Export/ExportRequest.php b/app/Api/V1/Requests/Data/Export/ExportRequest.php index bb74c60cdb..3b858c60ff 100644 --- a/app/Api/V1/Requests/Data/Export/ExportRequest.php +++ b/app/Api/V1/Requests/Data/Export/ExportRequest.php @@ -38,21 +38,18 @@ class ExportRequest extends FormRequest use ChecksLogin; use ConvertsDataTypes; - /** - * @return array - */ public function getAll(): array { - $result = [ + $result = [ 'start' => $this->getCarbonDate('start') ?? today(config('app.timezone'))->subYear(), 'end' => $this->getCarbonDate('end') ?? today(config('app.timezone')), 'type' => $this->convertString('type'), ]; - $parts = explode(',', $this->convertString('accounts')); - $repository = app(AccountRepositoryInterface::class); + $parts = explode(',', $this->convertString('accounts')); + $repository = app(AccountRepositoryInterface::class); $repository->setUser(auth()->user()); - $accounts = new Collection(); + $accounts = new Collection(); foreach ($parts as $part) { $accountId = (int)$part; if (0 !== $accountId) { @@ -69,14 +66,12 @@ class ExportRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ 'type' => 'in:csv', - 'accounts' => 'min:1|max:65536', + 'accounts' => 'min:1|max:32768', 'start' => 'date|before:end', 'end' => 'date|after:start', ]; diff --git a/app/Api/V1/Requests/Data/SameDateRequest.php b/app/Api/V1/Requests/Data/SameDateRequest.php index 549bf58563..9f419653f7 100644 --- a/app/Api/V1/Requests/Data/SameDateRequest.php +++ b/app/Api/V1/Requests/Data/SameDateRequest.php @@ -35,13 +35,11 @@ use Illuminate\Foundation\Http\FormRequest; */ class SameDateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -53,8 +51,6 @@ class SameDateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { diff --git a/app/Api/V1/Requests/Insight/GenericRequest.php b/app/Api/V1/Requests/Insight/GenericRequest.php index 0eb22bc584..1bde6efeb7 100644 --- a/app/Api/V1/Requests/Insight/GenericRequest.php +++ b/app/Api/V1/Requests/Insight/GenericRequest.php @@ -42,8 +42,8 @@ use Illuminate\Support\Collection; */ class GenericRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; private Collection $accounts; private Collection $bills; @@ -53,8 +53,6 @@ class GenericRequest extends FormRequest /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -64,13 +62,11 @@ class GenericRequest extends FormRequest ]; } - /** - * @return Collection - */ public function getAssetAccounts(): Collection { $this->parseAccounts(); $return = new Collection(); + /** @var Account $account */ foreach ($this->accounts as $account) { $type = $account->accountType->type; @@ -82,9 +78,6 @@ class GenericRequest extends FormRequest return $return; } - /** - * - */ private function parseAccounts(): void { if (0 !== $this->accounts->count()) { @@ -92,7 +85,7 @@ class GenericRequest extends FormRequest } $repository = app(AccountRepositoryInterface::class); $repository->setUser(auth()->user()); - $array = $this->get('accounts'); + $array = $this->get('accounts'); if (is_array($array)) { foreach ($array as $accountId) { $accountId = (int)$accountId; @@ -104,9 +97,6 @@ class GenericRequest extends FormRequest } } - /** - * @return Collection - */ public function getBills(): Collection { $this->parseBills(); @@ -114,9 +104,6 @@ class GenericRequest extends FormRequest return $this->bills; } - /** - * - */ private function parseBills(): void { if (0 !== $this->bills->count()) { @@ -124,7 +111,7 @@ class GenericRequest extends FormRequest } $repository = app(BillRepositoryInterface::class); $repository->setUser(auth()->user()); - $array = $this->get('bills'); + $array = $this->get('bills'); if (is_array($array)) { foreach ($array as $billId) { $billId = (int)$billId; @@ -136,9 +123,6 @@ class GenericRequest extends FormRequest } } - /** - * @return Collection - */ public function getBudgets(): Collection { $this->parseBudgets(); @@ -146,9 +130,6 @@ class GenericRequest extends FormRequest return $this->budgets; } - /** - * - */ private function parseBudgets(): void { if (0 !== $this->budgets->count()) { @@ -156,7 +137,7 @@ class GenericRequest extends FormRequest } $repository = app(BudgetRepositoryInterface::class); $repository->setUser(auth()->user()); - $array = $this->get('budgets'); + $array = $this->get('budgets'); if (is_array($array)) { foreach ($array as $budgetId) { $budgetId = (int)$budgetId; @@ -168,9 +149,6 @@ class GenericRequest extends FormRequest } } - /** - * @return Collection - */ public function getCategories(): Collection { $this->parseCategories(); @@ -178,9 +156,6 @@ class GenericRequest extends FormRequest return $this->categories; } - /** - * - */ private function parseCategories(): void { if (0 !== $this->categories->count()) { @@ -188,7 +163,7 @@ class GenericRequest extends FormRequest } $repository = app(CategoryRepositoryInterface::class); $repository->setUser(auth()->user()); - $array = $this->get('categories'); + $array = $this->get('categories'); if (is_array($array)) { foreach ($array as $categoryId) { $categoryId = (int)$categoryId; @@ -200,9 +175,6 @@ class GenericRequest extends FormRequest } } - /** - * @return Carbon - */ public function getEnd(): Carbon { $date = $this->getCarbonDate('end'); @@ -211,17 +183,15 @@ class GenericRequest extends FormRequest return $date; } - /** - * @return Collection - */ public function getExpenseAccounts(): Collection { $this->parseAccounts(); $return = new Collection(); + /** @var Account $account */ foreach ($this->accounts as $account) { $type = $account->accountType->type; - if ($type === AccountType::EXPENSE) { + if (AccountType::EXPENSE === $type) { $return->push($account); } } @@ -229,17 +199,15 @@ class GenericRequest extends FormRequest return $return; } - /** - * @return Collection - */ public function getRevenueAccounts(): Collection { $this->parseAccounts(); $return = new Collection(); + /** @var Account $account */ foreach ($this->accounts as $account) { $type = $account->accountType->type; - if ($type === AccountType::REVENUE) { + if (AccountType::REVENUE === $type) { $return->push($account); } } @@ -247,9 +215,6 @@ class GenericRequest extends FormRequest return $return; } - /** - * @return Carbon - */ public function getStart(): Carbon { $date = $this->getCarbonDate('start'); @@ -258,9 +223,6 @@ class GenericRequest extends FormRequest return $date; } - /** - * @return Collection - */ public function getTags(): Collection { $this->parseTags(); @@ -268,9 +230,6 @@ class GenericRequest extends FormRequest return $this->tags; } - /** - * - */ private function parseTags(): void { if (0 !== $this->tags->count()) { @@ -278,7 +237,7 @@ class GenericRequest extends FormRequest } $repository = app(TagRepositoryInterface::class); $repository->setUser(auth()->user()); - $array = $this->get('tags'); + $array = $this->get('tags'); if (is_array($array)) { foreach ($array as $tagId) { $tagId = (int)$tagId; @@ -292,8 +251,6 @@ class GenericRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { diff --git a/app/Api/V1/Requests/Models/Account/StoreRequest.php b/app/Api/V1/Requests/Models/Account/StoreRequest.php index d46322bea9..c78184381d 100644 --- a/app/Api/V1/Requests/Models/Account/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Account/StoreRequest.php @@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Requests\Models\Account; use FireflyIII\Models\Location; use FireflyIII\Rules\IsBoolean; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Rules\UniqueAccountNumber; use FireflyIII\Rules\UniqueIban; use FireflyIII\Support\Request\AppendsLocationData; @@ -35,18 +36,13 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class StoreRequest - * - */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; use AppendsLocationData; use ChecksLogin; + use ConvertsDataTypes; - /** - * @return array - */ public function getAllAccountData(): array { $active = true; @@ -57,7 +53,7 @@ class StoreRequest extends FormRequest if (null !== $this->get('include_net_worth')) { $includeNetWorth = $this->boolean('include_net_worth'); } - $data = [ + $data = [ 'name' => $this->convertString('name'), 'active' => $active, 'include_net_worth' => $includeNetWorth, @@ -80,7 +76,7 @@ class StoreRequest extends FormRequest 'interest_period' => $this->convertString('interest_period'), ]; // append location information. - $data = $this->appendLocationData($data, null); + $data = $this->appendLocationData($data, null); if ('liability' === $data['account_type_name'] || 'liabilities' === $data['account_type_name']) { $data['account_type_name'] = $this->convertString('liability_type'); @@ -93,8 +89,6 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -104,10 +98,10 @@ class StoreRequest extends FormRequest $type = $this->convertString('type'); $rules = [ 'name' => 'required|max:1024|min:1|uniqueAccountForUser', - 'type' => 'required|max:1024|min:1|' . sprintf('in:%s', $types), + 'type' => 'required|max:1024|min:1|'.sprintf('in:%s', $types), 'iban' => ['iban', 'nullable', new UniqueIban(null, $type)], 'bic' => 'bic|nullable', - 'account_number' => ['between:1,255', 'nullable', new UniqueAccountNumber(null, $type)], + 'account_number' => ['min:1', 'max:255', 'nullable', new UniqueAccountNumber(null, $type)], 'opening_balance' => 'numeric|required_with:opening_balance_date|nullable', 'opening_balance_date' => 'date|required_with:opening_balance|nullable', 'virtual_balance' => 'numeric|nullable', @@ -120,12 +114,12 @@ class StoreRequest extends FormRequest 'credit_card_type' => sprintf('nullable|in:%s|required_if:account_role,ccAsset', $ccPaymentTypes), 'monthly_payment_date' => 'nullable|date|required_if:account_role,ccAsset|required_if:credit_card_type,monthlyFull', 'liability_type' => 'nullable|required_if:type,liability|required_if:type,liabilities|in:loan,debt,mortgage', - 'liability_amount' => 'required_with:liability_start_date|min:0|numeric|max:1000000000', + 'liability_amount' => ['required_with:liability_start_date', new IsValidPositiveAmount()], 'liability_start_date' => 'required_with:liability_amount|date', 'liability_direction' => 'nullable|required_if:type,liability|required_if:type,liabilities|in:credit,debit', - 'interest' => 'between:0,100|numeric', - 'interest_period' => sprintf('nullable|in:%s', join(',', config('firefly.interest_periods'))), - 'notes' => 'min:0|max:65536', + 'interest' => 'min:0|max:100|numeric', + 'interest_period' => sprintf('nullable|in:%s', implode(',', config('firefly.interest_periods'))), + 'notes' => 'min:0|max:32768', ]; return Location::requestRules($rules); diff --git a/app/Api/V1/Requests/Models/Account/UpdateRequest.php b/app/Api/V1/Requests/Models/Account/UpdateRequest.php index d50f9d10eb..5ea693c645 100644 --- a/app/Api/V1/Requests/Models/Account/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Account/UpdateRequest.php @@ -36,18 +36,13 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use AppendsLocationData; use ChecksLogin; + use ConvertsDataTypes; - /** - * @return array - */ public function getUpdateData(): array { $fields = [ @@ -82,8 +77,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -93,12 +86,12 @@ class UpdateRequest extends FormRequest $types = implode(',', array_keys(config('firefly.subTitlesByIdentifier'))); $ccPaymentTypes = implode(',', array_keys(config('firefly.ccTypes'))); - $rules = [ + $rules = [ 'name' => sprintf('min:1|max:1024|uniqueAccountForUser:%d', $account->id), 'type' => sprintf('in:%s', $types), 'iban' => ['iban', 'nullable', new UniqueIban($account, $this->convertString('type'))], 'bic' => 'bic|nullable', - 'account_number' => ['between:1,255', 'nullable', new UniqueAccountNumber($account, $this->convertString('type'))], + 'account_number' => ['min:1', 'max:255', 'nullable', new UniqueAccountNumber($account, $this->convertString('type'))], 'opening_balance' => 'numeric|required_with:opening_balance_date|nullable', 'opening_balance_date' => 'date|required_with:opening_balance|nullable', 'virtual_balance' => 'numeric|nullable', @@ -109,12 +102,12 @@ class UpdateRequest extends FormRequest 'include_net_worth' => [new IsBoolean()], 'account_role' => sprintf('in:%s|nullable|required_if:type,asset', $accountRoles), 'credit_card_type' => sprintf('in:%s|nullable|required_if:account_role,ccAsset', $ccPaymentTypes), - 'monthly_payment_date' => 'date' . '|nullable|required_if:account_role,ccAsset|required_if:credit_card_type,monthlyFull', + 'monthly_payment_date' => 'date|nullable|required_if:account_role,ccAsset|required_if:credit_card_type,monthlyFull', 'liability_type' => 'required_if:type,liability|in:loan,debt,mortgage', 'liability_direction' => 'required_if:type,liability|in:credit,debit', - 'interest' => 'required_if:type,liability|between:0,100|numeric', + 'interest' => 'required_if:type,liability|min:0|max:100|numeric', 'interest_period' => 'required_if:type,liability|in:daily,monthly,yearly', - 'notes' => 'min:0|max:65536', + 'notes' => 'min:0|max:32768', ]; return Location::requestRules($rules); diff --git a/app/Api/V1/Requests/Models/Attachment/StoreRequest.php b/app/Api/V1/Requests/Models/Attachment/StoreRequest.php index 565c8a4cd4..174cd2f543 100644 --- a/app/Api/V1/Requests/Models/Attachment/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Attachment/StoreRequest.php @@ -30,18 +30,14 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class StoreRequest - * - */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -56,8 +52,6 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -72,9 +66,9 @@ class StoreRequest extends FormRequest $model = $this->convertString('attachable_type'); return [ - 'filename' => 'required|between:1,255', - 'title' => 'between:1,255', - 'notes' => 'between:1,65000', + 'filename' => 'required|min:1|max:255', + 'title' => ['min:1', 'max:255'], + 'notes' => 'min:1|max:32768', 'attachable_type' => sprintf('required|in:%s', $models), 'attachable_id' => ['required', 'numeric', new IsValidAttachmentModel($model)], ]; diff --git a/app/Api/V1/Requests/Models/Attachment/UpdateRequest.php b/app/Api/V1/Requests/Models/Attachment/UpdateRequest.php index 854a156df4..0ec07affd5 100644 --- a/app/Api/V1/Requests/Models/Attachment/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Attachment/UpdateRequest.php @@ -30,18 +30,14 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -58,8 +54,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -74,9 +68,9 @@ class UpdateRequest extends FormRequest $model = $this->convertString('attachable_type'); return [ - 'filename' => 'between:1,255', - 'title' => 'between:1,255', - 'notes' => 'between:1,65000', + 'filename' => ['min:1', 'max:255'], + 'title' => ['min:1', 'max:255'], + 'notes' => 'min:1|max:32768', 'attachable_type' => sprintf('in:%s', $models), 'attachable_id' => ['numeric', new IsValidAttachmentModel($model)], ]; diff --git a/app/Api/V1/Requests/Models/AvailableBudget/Request.php b/app/Api/V1/Requests/Models/AvailableBudget/Request.php index f92de0da5a..9abf3d3ee2 100644 --- a/app/Api/V1/Requests/Models/AvailableBudget/Request.php +++ b/app/Api/V1/Requests/Models/AvailableBudget/Request.php @@ -24,25 +24,23 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Models\AvailableBudget; use Carbon\Carbon; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** * Class Request - * - */ class Request extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -60,15 +58,13 @@ class Request extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ 'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_code' => 'min:3|max:51|exists:transaction_currencies,code', - 'amount' => 'numeric|gt:0', + 'amount' => ['nullable', new IsValidPositiveAmount()], 'start' => 'date', 'end' => 'date', ]; @@ -76,15 +72,11 @@ class Request extends FormRequest /** * Configure the validator instance with special rules for after the basic validation rules. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + static function (Validator $validator): void { // validate start before end only if both are there. $data = $validator->getData(); if (array_key_exists('start', $data) && array_key_exists('end', $data)) { @@ -96,5 +88,8 @@ class Request extends FormRequest } } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/Models/Bill/StoreRequest.php b/app/Api/V1/Requests/Models/Bill/StoreRequest.php index 416d73ac99..70d48c2a2e 100644 --- a/app/Api/V1/Requests/Models/Bill/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Bill/StoreRequest.php @@ -25,6 +25,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Models\Bill; use FireflyIII\Rules\IsBoolean; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; @@ -33,22 +34,18 @@ use Illuminate\Validation\Validator; /** * Class StoreRequest - * - */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { - Log::debug('Raw fields in Bill StoreRequest', $this->all()); + app('log')->debug('Raw fields in Bill StoreRequest', $this->all()); $fields = [ 'name' => ['name', 'convertString'], 'amount_min' => ['amount_min', 'convertString'], @@ -72,38 +69,32 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ - 'name' => 'between:1,255|uniqueObjectForUser:bills,name', - 'amount_min' => 'numeric|gt:0|required', - 'amount_max' => 'numeric|gt:0|required', + 'name' => 'min:1|max:255|uniqueObjectForUser:bills,name', + 'amount_min' => ['required', new IsValidPositiveAmount()], + 'amount_max' => ['required', new IsValidPositiveAmount()], 'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_code' => 'min:3|max:51|exists:transaction_currencies,code', 'date' => 'date|required', 'end_date' => 'date|after:date', 'extension_date' => 'date|after:date', 'repeat_freq' => 'in:weekly,monthly,quarterly,half-year,yearly|required', - 'skip' => 'between:0,31', + 'skip' => 'min:0|max:31|numeric', 'active' => [new IsBoolean()], - 'notes' => 'between:1,65536', + 'notes' => 'min:1|max:32768', ]; } /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - static function (Validator $validator) { + static function (Validator $validator): void { $data = $validator->getData(); $min = (string)($data['amount_min'] ?? '0'); $max = (string)($data['amount_max'] ?? '0'); @@ -113,5 +104,8 @@ class StoreRequest extends FormRequest } } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/Models/Bill/UpdateRequest.php b/app/Api/V1/Requests/Models/Bill/UpdateRequest.php index 25adeb2705..0df5139965 100644 --- a/app/Api/V1/Requests/Models/Bill/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Bill/UpdateRequest.php @@ -26,25 +26,23 @@ namespace FireflyIII\Api\V1\Requests\Models\Bill; use FireflyIII\Models\Bill; use FireflyIII\Rules\IsBoolean; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -71,8 +69,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -80,32 +76,28 @@ class UpdateRequest extends FormRequest $bill = $this->route()->parameter('bill'); return [ - 'name' => sprintf('between:1,255|uniqueObjectForUser:bills,name,%d', $bill->id), - 'amount_min' => 'numeric|gt:0', - 'amount_max' => 'numeric|gt:0', + 'name' => sprintf('min:1|max:255|uniqueObjectForUser:bills,name,%d', $bill->id), + 'amount_min' => ['nullable', new IsValidPositiveAmount()], + 'amount_max' => ['nullable', new IsValidPositiveAmount()], 'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_code' => 'min:3|max:51|exists:transaction_currencies,code', 'date' => 'date', 'end_date' => 'date|after:date', 'extension_date' => 'date|after:date', 'repeat_freq' => 'in:weekly,monthly,quarterly,half-year,yearly', - 'skip' => 'between:0,31', + 'skip' => 'min:0|max:31|numeric', 'active' => [new IsBoolean()], - 'notes' => 'between:1,65536', + 'notes' => 'min:1|max:32768', ]; } /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - static function (Validator $validator) { + static function (Validator $validator): void { $data = $validator->getData(); if (array_key_exists('amount_min', $data) && array_key_exists('amount_max', $data)) { $min = $data['amount_min'] ?? '0'; @@ -117,5 +109,8 @@ class UpdateRequest extends FormRequest } } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/Models/Budget/StoreRequest.php b/app/Api/V1/Requests/Models/Budget/StoreRequest.php index 78714bb474..243136dd05 100644 --- a/app/Api/V1/Requests/Models/Budget/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Budget/StoreRequest.php @@ -24,27 +24,25 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Models\Budget; use FireflyIII\Rules\IsBoolean; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Validation\AutoBudget\ValidatesAutoBudgetRequest; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** * Class StoreRequest - * - */ class StoreRequest extends FormRequest { + use ChecksLogin; use ConvertsDataTypes; use ValidatesAutoBudgetRequest; - use ChecksLogin; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -67,38 +65,35 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ - 'name' => 'required|between:1,100|uniqueObjectForUser:budgets,name', + 'name' => 'required|min:1|max:255|uniqueObjectForUser:budgets,name', 'active' => [new IsBoolean()], 'currency_id' => 'exists:transaction_currencies,id', 'currency_code' => 'exists:transaction_currencies,code', - 'notes' => 'nullable|between:1,65536', + 'notes' => 'nullable|min:1|max:32768', // auto budget info 'auto_budget_type' => 'in:reset,rollover,adjusted,none', - 'auto_budget_amount' => 'numeric|min:0|max:1000000000|required_if:auto_budget_type,reset|required_if:auto_budget_type,rollover|required_if:auto_budget_type,adjusted', + 'auto_budget_amount' => ['required_if:auto_budget_type,reset', 'required_if:auto_budget_type,rollover', 'required_if:auto_budget_type,adjusted', new IsValidPositiveAmount()], 'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly|required_if:auto_budget_type,reset|required_if:auto_budget_type,rollover|required_if:auto_budget_type,adjusted', ]; } /** * Configure the validator instance with special rules for after the basic validation rules. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { // validate all account info $this->validateAutoBudgetAmount($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/Models/Budget/UpdateRequest.php b/app/Api/V1/Requests/Models/Budget/UpdateRequest.php index 2fd5e43560..2e8509db61 100644 --- a/app/Api/V1/Requests/Models/Budget/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Budget/UpdateRequest.php @@ -25,27 +25,25 @@ namespace FireflyIII\Api\V1\Requests\Models\Budget; use FireflyIII\Models\Budget; use FireflyIII\Rules\IsBoolean; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Validation\AutoBudget\ValidatesAutoBudgetRequest; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { + use ChecksLogin; use ConvertsDataTypes; use ValidatesAutoBudgetRequest; - use ChecksLogin; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -77,8 +75,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -86,31 +82,30 @@ class UpdateRequest extends FormRequest $budget = $this->route()->parameter('budget'); return [ - 'name' => sprintf('between:1,100|uniqueObjectForUser:budgets,name,%d', $budget->id), + 'name' => sprintf('min:1|max:100|uniqueObjectForUser:budgets,name,%d', $budget->id), 'active' => [new IsBoolean()], - 'notes' => 'nullable|between:1,65536', + 'notes' => 'nullable|min:1|max:32768', 'auto_budget_type' => 'in:reset,rollover,adjusted,none', 'auto_budget_currency_id' => 'exists:transaction_currencies,id', 'auto_budget_currency_code' => 'exists:transaction_currencies,code', - 'auto_budget_amount' => 'min:0|max:1000000000', + 'auto_budget_amount' => ['nullable', new IsValidPositiveAmount()], 'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly', ]; } /** * Configure the validator instance with special rules for after the basic validation rules. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { // validate all account info $this->validateAutoBudgetAmount($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/Models/BudgetLimit/StoreRequest.php b/app/Api/V1/Requests/Models/BudgetLimit/StoreRequest.php index 1c003221ef..a47e705ff8 100644 --- a/app/Api/V1/Requests/Models/BudgetLimit/StoreRequest.php +++ b/app/Api/V1/Requests/Models/BudgetLimit/StoreRequest.php @@ -23,24 +23,21 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Models\BudgetLimit; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; /** * Class StoreRequest - * - */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -55,15 +52,13 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ 'start' => 'required|before:end|date', 'end' => 'required|after:start|date', - 'amount' => 'required|gt:0', + 'amount' => ['required', new IsValidPositiveAmount()], 'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_code' => 'min:3|max:51|exists:transaction_currencies,code', ]; diff --git a/app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php b/app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php index 4df2b88936..67060a6dd2 100644 --- a/app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php @@ -24,25 +24,23 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Models\BudgetLimit; use Carbon\Carbon; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -59,15 +57,13 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ 'start' => 'date', 'end' => 'date', - 'amount' => 'gt:0', + 'amount' => ['nullable', new IsValidPositiveAmount()], 'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_code' => 'min:3|max:51|exists:transaction_currencies,code', ]; @@ -75,16 +71,12 @@ class UpdateRequest extends FormRequest /** * Configure the validator instance with special rules for after the basic validation rules. - * - * @param Validator $validator - * TODO duplicate code - * - * @return void + * TODO duplicate code. */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + static function (Validator $validator): void { // validate start before end only if both are there. $data = $validator->getData(); if (array_key_exists('start', $data) && array_key_exists('end', $data)) { @@ -96,5 +88,8 @@ class UpdateRequest extends FormRequest } } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/Models/Category/StoreRequest.php b/app/Api/V1/Requests/Models/Category/StoreRequest.php index 5bff239013..a1cc9268de 100644 --- a/app/Api/V1/Requests/Models/Category/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Category/StoreRequest.php @@ -23,25 +23,20 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Models\Category; -use FireflyIII\Rules\ZeroOrMore; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; /** * Class StoreRequest - * - */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -53,13 +48,11 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ - 'name' => 'required|between:1,100|uniqueObjectForUser:categories,name', + 'name' => 'required|min:1|max:100|uniqueObjectForUser:categories,name', ]; } } diff --git a/app/Api/V1/Requests/Models/Category/UpdateRequest.php b/app/Api/V1/Requests/Models/Category/UpdateRequest.php index aaaf9bfde1..48653cf597 100644 --- a/app/Api/V1/Requests/Models/Category/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Category/UpdateRequest.php @@ -30,18 +30,14 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -55,8 +51,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -64,7 +58,7 @@ class UpdateRequest extends FormRequest $category = $this->route()->parameter('category'); return [ - 'name' => sprintf('between:1,100|uniqueObjectForUser:categories,name,%d', $category->id), + 'name' => sprintf('min:1|max:100|uniqueObjectForUser:categories,name,%d', $category->id), ]; } } diff --git a/app/Api/V1/Requests/Models/ObjectGroup/UpdateRequest.php b/app/Api/V1/Requests/Models/ObjectGroup/UpdateRequest.php index 9a9f96d8da..17b5a41e16 100644 --- a/app/Api/V1/Requests/Models/ObjectGroup/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/ObjectGroup/UpdateRequest.php @@ -31,17 +31,12 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; - /** - * @return array - */ public function getUpdateData(): array { $fields = [ @@ -54,8 +49,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { diff --git a/app/Api/V1/Requests/Models/PiggyBank/StoreRequest.php b/app/Api/V1/Requests/Models/PiggyBank/StoreRequest.php index d737a7e00e..f6069a68ed 100644 --- a/app/Api/V1/Requests/Models/PiggyBank/StoreRequest.php +++ b/app/Api/V1/Requests/Models/PiggyBank/StoreRequest.php @@ -23,24 +23,21 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Models\PiggyBank; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; /** * Class StoreRequest - * - */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -63,18 +60,16 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ - 'name' => 'required|between:1,255|uniquePiggyBankForUser', - 'current_amount' => ['numeric', 'gte:0', 'lte:target_amount'], + 'name' => 'required|min:1|max:255|uniquePiggyBankForUser', + 'current_amount' => ['nullable', new IsValidPositiveAmount()], 'account_id' => 'required|numeric|belongsToUser:accounts,id', 'object_group_id' => 'numeric|belongsToUser:object_groups,id', - 'object_group_title' => 'between:1,255', - 'target_amount' => ['numeric', 'gte:0', 'lte:target_amount', 'required'], + 'object_group_title' => ['min:1', 'max:255'], + 'target_amount' => ['required', new IsValidPositiveAmount()], 'start_date' => 'date|nullable', 'target_date' => 'date|nullable|after:start_date', 'notes' => 'max:65000', diff --git a/app/Api/V1/Requests/Models/PiggyBank/UpdateRequest.php b/app/Api/V1/Requests/Models/PiggyBank/UpdateRequest.php index 7eb4ae1dba..a169e0434c 100644 --- a/app/Api/V1/Requests/Models/PiggyBank/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/PiggyBank/UpdateRequest.php @@ -25,6 +25,7 @@ namespace FireflyIII\Api\V1\Requests\Models\PiggyBank; use FireflyIII\Models\PiggyBank; use FireflyIII\Rules\IsAssetAccountId; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Rules\LessThanPiggyTarget; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; @@ -32,18 +33,14 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -65,8 +62,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -74,9 +69,9 @@ class UpdateRequest extends FormRequest $piggyBank = $this->route()->parameter('piggyBank'); return [ - 'name' => 'between:1,255|uniquePiggyBankForUser:' . $piggyBank->id, - 'current_amount' => ['numeric', 'gte:0', new LessThanPiggyTarget()], - 'target_amount' => 'numeric|gte:0', + 'name' => 'min:1|max:255|uniquePiggyBankForUser:'.$piggyBank->id, + 'current_amount' => ['nullable', new LessThanPiggyTarget(), new IsValidPositiveAmount()], + 'target_amount' => ['nullable', new IsValidPositiveAmount()], 'start_date' => 'date|nullable', 'target_date' => 'date|nullable|after:start_date', 'notes' => 'max:65000', diff --git a/app/Api/V1/Requests/Models/Recurrence/StoreRequest.php b/app/Api/V1/Requests/Models/Recurrence/StoreRequest.php index bfd273969d..e6f9b52d28 100644 --- a/app/Api/V1/Requests/Models/Recurrence/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Recurrence/StoreRequest.php @@ -25,6 +25,7 @@ namespace FireflyIII\Api\V1\Requests\Models\Recurrence; use FireflyIII\Rules\BelongsUser; use FireflyIII\Rules\IsBoolean; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\GetRecurrenceData; @@ -32,6 +33,7 @@ use FireflyIII\Validation\CurrencyValidation; use FireflyIII\Validation\RecurrenceValidation; use FireflyIII\Validation\TransactionValidation; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -39,17 +41,15 @@ use Illuminate\Validation\Validator; */ class StoreRequest extends FormRequest { + use ChecksLogin; use ConvertsDataTypes; - use RecurrenceValidation; - use TransactionValidation; use CurrencyValidation; use GetRecurrenceData; - use ChecksLogin; + use RecurrenceValidation; + use TransactionValidation; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -76,18 +76,18 @@ class StoreRequest extends FormRequest /** * Returns the transaction data as it is found in the submitted data. It's a complex method according to code * standards but it just has a lot of ??-statements because of the fields that may or may not exist. - * - * @return array */ private function getTransactionData(): array { - $return = []; + $return = []; + // transaction data: - /** @var array|null $transactions */ + /** @var null|array $transactions */ $transactions = $this->get('transactions'); if (null === $transactions) { return []; } + /** @var array $transaction */ foreach ($transactions as $transaction) { $return[] = $this->getSingleTransactionData($transaction); @@ -98,21 +98,21 @@ class StoreRequest extends FormRequest /** * Returns the repetition data as it is found in the submitted data. - * - * @return array */ private function getRepetitionData(): array { - $return = []; + $return = []; + // repetition data: - /** @var array|null $repetitions */ + /** @var null|array $repetitions */ $repetitions = $this->get('repetitions'); if (null === $repetitions) { return []; } + /** @var array $repetition */ foreach ($repetitions as $repetition) { - $current = []; + $current = []; if (array_key_exists('type', $repetition)) { $current['type'] = $repetition['type']; } @@ -134,60 +134,54 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ - 'type' => 'required|in:withdrawal,transfer,deposit', - 'title' => 'required|between:1,255|uniqueObjectForUser:recurrences,title', - 'description' => 'between:1,65000', - 'first_date' => 'required|date', - 'apply_rules' => [new IsBoolean()], - 'active' => [new IsBoolean()], - 'repeat_until' => 'nullable|date', - 'nr_of_repetitions' => 'nullable|numeric|between:1,31', + 'type' => 'required|in:withdrawal,transfer,deposit', + 'title' => 'required|min:1|max:255|uniqueObjectForUser:recurrences,title', + 'description' => 'min:1|max:32768', + 'first_date' => 'required|date', + 'apply_rules' => [new IsBoolean()], + 'active' => [new IsBoolean()], + 'repeat_until' => 'nullable|date', + 'nr_of_repetitions' => 'nullable|numeric|min:1|max:31', - 'repetitions.*.type' => 'required|in:daily,weekly,ndom,monthly,yearly', - 'repetitions.*.moment' => 'between:0,10', - 'repetitions.*.skip' => 'nullable|numeric|between:0,31', - 'repetitions.*.weekend' => 'numeric|min:1|max:4', + 'repetitions.*.type' => 'required|in:daily,weekly,ndom,monthly,yearly', + 'repetitions.*.moment' => 'min:0|max:10', + 'repetitions.*.skip' => 'nullable|numeric|min:0|max:31', + 'repetitions.*.weekend' => 'numeric|min:1|max:4', - 'transactions.*.description' => 'required|between:1,255', - 'transactions.*.amount' => 'required|numeric|gt:0', - 'transactions.*.foreign_amount' => 'nullable|numeric|gt:0', + 'transactions.*.description' => 'required|min:1|max:255', + 'transactions.*.amount' => ['required', new IsValidPositiveAmount()], + 'transactions.*.foreign_amount' => ['nullable', new IsValidPositiveAmount()], 'transactions.*.currency_id' => 'nullable|numeric|exists:transaction_currencies,id', 'transactions.*.currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code', 'transactions.*.foreign_currency_id' => 'nullable|numeric|exists:transaction_currencies,id', 'transactions.*.foreign_currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code', 'transactions.*.source_id' => ['numeric', 'nullable', new BelongsUser()], - 'transactions.*.source_name' => 'between:1,255|nullable', + 'transactions.*.source_name' => 'min:1|max:255|nullable', 'transactions.*.destination_id' => ['numeric', 'nullable', new BelongsUser()], - 'transactions.*.destination_name' => 'between:1,255|nullable', + 'transactions.*.destination_name' => 'min:1|max:255|nullable', // new and updated fields: 'transactions.*.budget_id' => ['nullable', 'mustExist:budgets,id', new BelongsUser()], - 'transactions.*.budget_name' => ['between:1,255', 'nullable', new BelongsUser()], + 'transactions.*.budget_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], 'transactions.*.category_id' => ['nullable', 'mustExist:categories,id', new BelongsUser()], - 'transactions.*.category_name' => 'between:1,255|nullable', + 'transactions.*.category_name' => 'min:1|max:255|nullable', 'transactions.*.piggy_bank_id' => ['nullable', 'numeric', 'mustExist:piggy_banks,id', new BelongsUser()], - 'transactions.*.piggy_bank_name' => ['between:1,255', 'nullable', new BelongsUser()], - 'transactions.*.tags' => 'nullable|between:1,64000', + 'transactions.*.piggy_bank_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], + 'transactions.*.tags' => 'nullable|min:1|max:255', ]; } /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { $this->validateRecurringConfig($validator); $this->validateOneRecurrenceTransaction($validator); $this->validateOneRepetition($validator); @@ -197,5 +191,8 @@ class StoreRequest extends FormRequest $this->validateAccountInformation($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php b/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php index 8d5f790c4c..6bc7913069 100644 --- a/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Recurrence/UpdateRequest.php @@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Requests\Models\Recurrence; use FireflyIII\Models\Recurrence; use FireflyIII\Rules\BelongsUser; use FireflyIII\Rules\IsBoolean; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\GetRecurrenceData; @@ -33,6 +34,7 @@ use FireflyIII\Validation\CurrencyValidation; use FireflyIII\Validation\RecurrenceValidation; use FireflyIII\Validation\TransactionValidation; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -40,22 +42,20 @@ use Illuminate\Validation\Validator; */ class UpdateRequest extends FormRequest { + use ChecksLogin; use ConvertsDataTypes; - use RecurrenceValidation; - use TransactionValidation; use CurrencyValidation; use GetRecurrenceData; - use ChecksLogin; + use RecurrenceValidation; + use TransactionValidation; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { // this is the way: - $fields = [ + $fields = [ 'title' => ['title', 'convertString'], 'description' => ['description', 'convertString'], 'first_date' => ['first_date', 'convertDateTime'], @@ -65,38 +65,36 @@ class UpdateRequest extends FormRequest 'active' => ['active', 'boolean'], 'notes' => ['notes', 'convertString'], ]; - $reps = $this->getRepetitionData(); - $transactions = $this->getTransactionData(); - $return = [ + $reps = $this->getRepetitionData(); + $transactions = $this->getTransactionData(); + $return = [ 'recurrence' => $this->getAllData($fields), ]; if (null !== $reps) { $return['repetitions'] = $reps; } - if (null !== $transactions) { - $return['transactions'] = $transactions; - } + $return['transactions'] = $transactions; return $return; } /** * Returns the repetition data as it is found in the submitted data. - * - * @return array|null */ private function getRepetitionData(): ?array { - $return = []; + $return = []; + // repetition data: - /** @var array|null $repetitions */ + /** @var null|array $repetitions */ $repetitions = $this->get('repetitions'); if (null === $repetitions) { return null; } + /** @var array $repetition */ foreach ($repetitions as $repetition) { - $current = []; + $current = []; if (array_key_exists('type', $repetition)) { $current['type'] = $repetition['type']; } @@ -124,18 +122,18 @@ class UpdateRequest extends FormRequest /** * Returns the transaction data as it is found in the submitted data. It's a complex method according to code * standards but it just has a lot of ??-statements because of the fields that may or may not exist. - * - * @return array|null */ - private function getTransactionData(): ?array + private function getTransactionData(): array { - $return = []; + $return = []; + // transaction data: - /** @var array|null $transactions */ + /** @var null|array $transactions */ $transactions = $this->get('transactions'); if (null === $transactions) { - return null; + return []; } + /** @var array $transaction */ foreach ($transactions as $transaction) { $return[] = $this->getSingleTransactionData($transaction); @@ -146,8 +144,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -155,57 +151,51 @@ class UpdateRequest extends FormRequest $recurrence = $this->route()->parameter('recurrence'); return [ - 'title' => sprintf('between:1,255|uniqueObjectForUser:recurrences,title,%d', $recurrence->id), - 'description' => 'between:1,65000', - 'first_date' => 'date', - 'apply_rules' => [new IsBoolean()], - 'active' => [new IsBoolean()], - 'repeat_until' => 'nullable|date', - 'nr_of_repetitions' => 'nullable|numeric|between:1,31', + 'title' => sprintf('min:1|max:255|uniqueObjectForUser:recurrences,title,%d', $recurrence->id), + 'description' => 'min:1|max:32768', + 'first_date' => 'date', + 'apply_rules' => [new IsBoolean()], + 'active' => [new IsBoolean()], + 'repeat_until' => 'nullable|date', + 'nr_of_repetitions' => 'nullable|numeric|min:1|max:31', - 'repetitions.*.type' => 'in:daily,weekly,ndom,monthly,yearly', - 'repetitions.*.moment' => 'between:0,10', - 'repetitions.*.skip' => 'nullable|numeric|between:0,31', - 'repetitions.*.weekend' => 'nullable|numeric|min:1|max:4', + 'repetitions.*.type' => 'in:daily,weekly,ndom,monthly,yearly', + 'repetitions.*.moment' => 'min:0|max:10|numeric', + 'repetitions.*.skip' => 'nullable|numeric|min:0|max:31', + 'repetitions.*.weekend' => 'nullable|numeric|min:1|max:4', - 'transactions.*.description' => 'between:1,255', - 'transactions.*.amount' => 'numeric|gt:0', - 'transactions.*.foreign_amount' => 'nullable|numeric|gt:0', + 'transactions.*.description' => ['min:1', 'max:255'], + 'transactions.*.amount' => [new IsValidPositiveAmount()], + 'transactions.*.foreign_amount' => ['nullable', new IsValidPositiveAmount()], 'transactions.*.currency_id' => 'nullable|numeric|exists:transaction_currencies,id', 'transactions.*.currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code', 'transactions.*.foreign_currency_id' => 'nullable|numeric|exists:transaction_currencies,id', 'transactions.*.foreign_currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code', 'transactions.*.source_id' => ['numeric', 'nullable', new BelongsUser()], - 'transactions.*.source_name' => 'between:1,255|nullable', + 'transactions.*.source_name' => 'min:1|max:255|nullable', 'transactions.*.destination_id' => ['numeric', 'nullable', new BelongsUser()], - 'transactions.*.destination_name' => 'between:1,255|nullable', + 'transactions.*.destination_name' => 'min:1|max:255|nullable', // new and updated fields: 'transactions.*.budget_id' => ['nullable', 'mustExist:budgets,id', new BelongsUser()], - 'transactions.*.budget_name' => ['between:1,255', 'nullable', new BelongsUser()], + 'transactions.*.budget_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], 'transactions.*.category_id' => ['nullable', 'mustExist:categories,id', new BelongsUser()], - 'transactions.*.category_name' => 'between:1,255|nullable', + 'transactions.*.category_name' => 'min:1|max:255|nullable', 'transactions.*.piggy_bank_id' => ['nullable', 'numeric', 'mustExist:piggy_banks,id', new BelongsUser()], - 'transactions.*.piggy_bank_name' => ['between:1,255', 'nullable', new BelongsUser()], - 'transactions.*.tags' => 'nullable|between:1,64000', - + 'transactions.*.piggy_bank_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], + 'transactions.*.tags' => 'nullable|min:1|max:255', ]; } /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { - //$this->validateOneRecurrenceTransaction($validator); - //$this->validateOneRepetitionUpdate($validator); - + function (Validator $validator): void { + // $this->validateOneRecurrenceTransaction($validator); + // $this->validateOneRepetitionUpdate($validator); /** @var Recurrence $recurrence */ $recurrence = $this->route()->parameter('recurrence'); @@ -216,6 +206,8 @@ class UpdateRequest extends FormRequest $this->valUpdateAccountInfo($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } - } diff --git a/app/Api/V1/Requests/Models/Rule/StoreRequest.php b/app/Api/V1/Requests/Models/Rule/StoreRequest.php index 2b241f0e96..dff5c76d8d 100644 --- a/app/Api/V1/Requests/Models/Rule/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Rule/StoreRequest.php @@ -28,27 +28,24 @@ use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\GetRuleConfiguration; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; -use function is_array; - /** * Class StoreRequest */ class StoreRequest extends FormRequest { + use ChecksLogin; use ConvertsDataTypes; use GetRuleConfiguration; - use ChecksLogin; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { - $fields = [ + $fields = [ 'title' => ['title', 'convertString'], 'description' => ['description', 'convertString'], 'rule_group_id' => ['rule_group_id', 'convertInteger'], @@ -59,7 +56,7 @@ class StoreRequest extends FormRequest 'stop_processing' => ['stop_processing', 'boolean'], 'active' => ['active', 'boolean'], ]; - $data = $this->getAllData($fields); + $data = $this->getAllData($fields); $data['triggers'] = $this->getRuleTriggers(); $data['actions'] = $this->getRuleActions(); @@ -67,9 +64,6 @@ class StoreRequest extends FormRequest return $data; } - /** - * @return array - */ private function getRuleTriggers(): array { $triggers = $this->get('triggers'); @@ -88,9 +82,6 @@ class StoreRequest extends FormRequest return $return; } - /** - * @return array - */ private function getRuleActions(): array { $actions = $this->get('actions'); @@ -111,30 +102,28 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { - $validTriggers = $this->getTriggers(); - $validActions = array_keys(config('firefly.rule-actions')); + $validTriggers = $this->getTriggers(); + $validActions = array_keys(config('firefly.rule-actions')); // some triggers and actions require text: $contextTriggers = implode(',', $this->getTriggersWithContext()); $contextActions = implode(',', config('firefly.context-rule-actions')); return [ - 'title' => 'required|between:1,100|uniqueObjectForUser:rules,title', - 'description' => 'between:1,5000|nullable', + 'title' => 'required|min:1|max:100|uniqueObjectForUser:rules,title', + 'description' => 'min:1|max:32768|nullable', 'rule_group_id' => 'belongsToUser:rule_groups|required_without:rule_group_title', - 'rule_group_title' => 'nullable|between:1,255|required_without:rule_group_id|belongsToUser:rule_groups,title', + 'rule_group_title' => 'nullable|min:1|max:255|required_without:rule_group_id|belongsToUser:rule_groups,title', 'trigger' => 'required|in:store-journal,update-journal', - 'triggers.*.type' => 'required|in:' . implode(',', $validTriggers), - 'triggers.*.value' => 'required_if:actions.*.type,' . $contextTriggers . '|min:1|ruleTriggerValue|max:1024', + 'triggers.*.type' => 'required|in:'.implode(',', $validTriggers), + 'triggers.*.value' => 'required_if:actions.*.type,'.$contextTriggers.'|min:1|ruleTriggerValue|max:1024', 'triggers.*.stop_processing' => [new IsBoolean()], 'triggers.*.active' => [new IsBoolean()], - 'actions.*.type' => 'required|in:' . implode(',', $validActions), - 'actions.*.value' => 'required_if:actions.*.type,' . $contextActions . '|ruleActionValue', + 'actions.*.type' => 'required|in:'.implode(',', $validActions), + 'actions.*.value' => 'required_if:actions.*.type,'.$contextActions.'|ruleActionValue', 'actions.*.stop_processing' => [new IsBoolean()], 'actions.*.active' => [new IsBoolean()], 'strict' => [new IsBoolean()], @@ -145,27 +134,24 @@ class StoreRequest extends FormRequest /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { $this->atLeastOneTrigger($validator); $this->atLeastOneAction($validator); $this->atLeastOneActiveTrigger($validator); $this->atLeastOneActiveAction($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } /** * Adds an error to the validator when there are no triggers in the array of data. - * - * @param Validator $validator */ protected function atLeastOneTrigger(Validator $validator): void { @@ -179,8 +165,6 @@ class StoreRequest extends FormRequest /** * Adds an error to the validator when there are no repetitions in the array of data. - * - * @param Validator $validator */ protected function atLeastOneAction(Validator $validator): void { @@ -194,13 +178,13 @@ class StoreRequest extends FormRequest /** * Adds an error to the validator when there are no ACTIVE triggers in the array of data. - * - * @param Validator $validator */ protected function atLeastOneActiveTrigger(Validator $validator): void { - $data = $validator->getData(); - $triggers = $data['triggers'] ?? []; + $data = $validator->getData(); + + /** @var null|array|int|string $triggers */ + $triggers = $data['triggers'] ?? []; // need at least one trigger if (!is_countable($triggers) || 0 === count($triggers)) { return; @@ -223,13 +207,13 @@ class StoreRequest extends FormRequest /** * Adds an error to the validator when there are no ACTIVE actions in the array of data. - * - * @param Validator $validator */ protected function atLeastOneActiveAction(Validator $validator): void { - $data = $validator->getData(); - $actions = $data['actions'] ?? []; + $data = $validator->getData(); + + /** @var null|array|int|string $actions */ + $actions = $data['actions'] ?? []; // need at least one trigger if (!is_countable($actions) || 0 === count($actions)) { return; diff --git a/app/Api/V1/Requests/Models/Rule/TestRequest.php b/app/Api/V1/Requests/Models/Rule/TestRequest.php index 331c4922c3..1b081e2e88 100644 --- a/app/Api/V1/Requests/Models/Rule/TestRequest.php +++ b/app/Api/V1/Requests/Models/Rule/TestRequest.php @@ -34,12 +34,9 @@ use Illuminate\Foundation\Http\FormRequest; */ class TestRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; - /** - * @return array - */ public function getTestParameters(): array { return [ @@ -47,39 +44,34 @@ class TestRequest extends FormRequest 'start' => $this->getDate('start'), 'end' => $this->getDate('end'), 'accounts' => $this->getAccounts(), - ]; } - /** - * @return int - */ private function getPage(): int { return 0 === (int)$this->query('page') ? 1 : (int)$this->query('page'); } - /** - * @param string $field - * - * @return Carbon|null - */ private function getDate(string $field): ?Carbon { - return null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field)); + $value = $this->query($field); + if (is_array($value)) { + return null; + } + $value = (string)$value; + $result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', substr($value, 0, 10)); + if (false === $result) { + return null; + } + + return $result; } - /** - * @return array - */ private function getAccounts(): array { return $this->get('accounts'); } - /** - * @return array - */ public function rules(): array { return [ diff --git a/app/Api/V1/Requests/Models/Rule/TriggerRequest.php b/app/Api/V1/Requests/Models/Rule/TriggerRequest.php index 12785842c1..f0ccc1b0b5 100644 --- a/app/Api/V1/Requests/Models/Rule/TriggerRequest.php +++ b/app/Api/V1/Requests/Models/Rule/TriggerRequest.php @@ -34,12 +34,9 @@ use Illuminate\Foundation\Http\FormRequest; */ class TriggerRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; - /** - * @return array - */ public function getTriggerParameters(): array { return [ @@ -49,27 +46,26 @@ class TriggerRequest extends FormRequest ]; } - /** - * @param string $field - * - * @return Carbon|null - */ private function getDate(string $field): ?Carbon { - return null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', substr($this->query($field), 0, 10)); + $value = $this->query($field); + if (is_array($value)) { + return null; + } + $value = (string)$value; + $result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', substr($value, 0, 10)); + if (false === $result) { + return null; + } + + return $result; } - /** - * @return array - */ private function getAccounts(): array { return $this->get('accounts') ?? []; } - /** - * @return array - */ public function rules(): array { return [ diff --git a/app/Api/V1/Requests/Models/Rule/UpdateRequest.php b/app/Api/V1/Requests/Models/Rule/UpdateRequest.php index 363dc7eef6..3e89716d7f 100644 --- a/app/Api/V1/Requests/Models/Rule/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Rule/UpdateRequest.php @@ -29,27 +29,24 @@ use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\GetRuleConfiguration; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; -use function is_array; - /** * Class UpdateRequest */ class UpdateRequest extends FormRequest { + use ChecksLogin; use ConvertsDataTypes; use GetRuleConfiguration; - use ChecksLogin; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { - $fields = [ + $fields = [ 'title' => ['title', 'convertString'], 'description' => ['description', 'stringWithNewlines'], 'rule_group_id' => ['rule_group_id', 'convertInteger'], @@ -73,9 +70,6 @@ class UpdateRequest extends FormRequest return $return; } - /** - * @return array|null - */ private function getRuleTriggers(): ?array { if (!$this->has('triggers')) { @@ -99,9 +93,6 @@ class UpdateRequest extends FormRequest return $return; } - /** - * @return array|null - */ private function getRuleActions(): ?array { if (!$this->has('actions')) { @@ -125,65 +116,60 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { - $validTriggers = $this->getTriggers(); - $validActions = array_keys(config('firefly.rule-actions')); + $validTriggers = $this->getTriggers(); + $validActions = array_keys(config('firefly.rule-actions')); /** @var Rule $rule */ - $rule = $this->route()->parameter('rule'); + $rule = $this->route()->parameter('rule'); // some triggers and actions require text: $contextTriggers = implode(',', $this->getTriggersWithContext()); $contextActions = implode(',', config('firefly.context-rule-actions')); return [ - 'title' => sprintf('between:1,100|uniqueObjectForUser:rules,title,%d', $rule->id), - 'description' => 'between:1,5000|nullable', + 'title' => sprintf('min:1|max:100|uniqueObjectForUser:rules,title,%d', $rule->id), + 'description' => 'min:1|max:32768|nullable', 'rule_group_id' => 'belongsToUser:rule_groups', - 'rule_group_title' => 'nullable|between:1,255|belongsToUser:rule_groups,title', + 'rule_group_title' => 'nullable|min:1|max:255|belongsToUser:rule_groups,title', 'trigger' => 'in:store-journal,update-journal', - 'triggers.*.type' => 'required|in:' . implode(',', $validTriggers), - 'triggers.*.value' => 'required_if:actions.*.type,' . $contextTriggers . '|min:1|ruleTriggerValue|max:1024', + 'triggers.*.type' => 'required|in:'.implode(',', $validTriggers), + 'triggers.*.value' => 'required_if:actions.*.type,'.$contextTriggers.'|min:1|ruleTriggerValue|max:1024', 'triggers.*.stop_processing' => [new IsBoolean()], 'triggers.*.active' => [new IsBoolean()], - 'actions.*.type' => 'required|in:' . implode(',', $validActions), - 'actions.*.value' => 'required_if:actions.*.type,' . $contextActions . '|ruleActionValue', + 'actions.*.type' => 'required|in:'.implode(',', $validActions), + 'actions.*.value' => 'required_if:actions.*.type,'.$contextActions.'|ruleActionValue', 'actions.*.stop_processing' => [new IsBoolean()], 'actions.*.active' => [new IsBoolean()], 'strict' => [new IsBoolean()], 'stop_processing' => [new IsBoolean()], 'active' => [new IsBoolean()], - 'order' => 'numeric|between:1,1337', + 'order' => 'numeric|min:1|max:2048', ]; } /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { $this->atLeastOneTrigger($validator); $this->atLeastOneValidTrigger($validator); $this->atLeastOneAction($validator); $this->atLeastOneValidAction($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } /** * Adds an error to the validator when there are no repetitions in the array of data. - * - * @param Validator $validator */ protected function atLeastOneTrigger(Validator $validator): void { @@ -197,8 +183,6 @@ class UpdateRequest extends FormRequest /** * Adds an error to the validator when there are no repetitions in the array of data. - * - * @param Validator $validator */ protected function atLeastOneValidTrigger(Validator $validator): void { @@ -226,8 +210,6 @@ class UpdateRequest extends FormRequest /** * Adds an error to the validator when there are no repetitions in the array of data. - * - * @param Validator $validator */ protected function atLeastOneAction(Validator $validator): void { @@ -241,8 +223,6 @@ class UpdateRequest extends FormRequest /** * Adds an error to the validator when there are no repetitions in the array of data. - * - * @param Validator $validator */ protected function atLeastOneValidAction(Validator $validator): void { diff --git a/app/Api/V1/Requests/Models/RuleGroup/StoreRequest.php b/app/Api/V1/Requests/Models/RuleGroup/StoreRequest.php index 00ffa6ec55..fbefe0606b 100644 --- a/app/Api/V1/Requests/Models/RuleGroup/StoreRequest.php +++ b/app/Api/V1/Requests/Models/RuleGroup/StoreRequest.php @@ -33,13 +33,11 @@ use Illuminate\Foundation\Http\FormRequest; */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -62,14 +60,12 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ - 'title' => 'required|between:1,100|uniqueObjectForUser:rule_groups,title', - 'description' => 'between:1,5000|nullable', + 'title' => 'required|min:1|max:100|uniqueObjectForUser:rule_groups,title', + 'description' => 'min:1|max:32768|nullable', 'active' => [new IsBoolean()], ]; } diff --git a/app/Api/V1/Requests/Models/RuleGroup/TestRequest.php b/app/Api/V1/Requests/Models/RuleGroup/TestRequest.php index 81226973b5..c7927ee67d 100644 --- a/app/Api/V1/Requests/Models/RuleGroup/TestRequest.php +++ b/app/Api/V1/Requests/Models/RuleGroup/TestRequest.php @@ -34,12 +34,9 @@ use Illuminate\Foundation\Http\FormRequest; */ class TestRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; - /** - * @return array - */ public function getTestParameters(): array { return [ @@ -49,27 +46,26 @@ class TestRequest extends FormRequest ]; } - /** - * @param string $field - * - * @return Carbon|null - */ private function getDate(string $field): ?Carbon { - return null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field)); + $value = $this->query($field); + if (is_array($value)) { + return null; + } + $value = (string)$value; + $result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', substr($value, 0, 10)); + if (false === $result) { + return null; + } + + return $result; } - /** - * @return array - */ private function getAccounts(): array { return $this->get('accounts'); } - /** - * @return array - */ public function rules(): array { return [ diff --git a/app/Api/V1/Requests/Models/RuleGroup/TriggerRequest.php b/app/Api/V1/Requests/Models/RuleGroup/TriggerRequest.php index 4d9514307a..37f2a65513 100644 --- a/app/Api/V1/Requests/Models/RuleGroup/TriggerRequest.php +++ b/app/Api/V1/Requests/Models/RuleGroup/TriggerRequest.php @@ -34,12 +34,9 @@ use Illuminate\Foundation\Http\FormRequest; */ class TriggerRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; - /** - * @return array - */ public function getTriggerParameters(): array { return [ @@ -49,27 +46,30 @@ class TriggerRequest extends FormRequest ]; } - /** - * @param string $field - * - * @return Carbon|null - */ private function getDate(string $field): ?Carbon { - return null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field)); + $value = $this->query($field); + if (is_array($value)) { + return null; + } + $value = (string)$value; + $result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', substr($value, 0, 10)); + if (false === $result) { + return null; + } + + return $result; } - /** - * @return array - */ private function getAccounts(): array { + if (null === $this->get('accounts')) { + return []; + } + return $this->get('accounts'); } - /** - * @return array - */ public function rules(): array { return [ diff --git a/app/Api/V1/Requests/Models/RuleGroup/UpdateRequest.php b/app/Api/V1/Requests/Models/RuleGroup/UpdateRequest.php index a417570bce..3889c2ee61 100644 --- a/app/Api/V1/Requests/Models/RuleGroup/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/RuleGroup/UpdateRequest.php @@ -34,13 +34,11 @@ use Illuminate\Foundation\Http\FormRequest; */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -57,8 +55,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -66,8 +62,8 @@ class UpdateRequest extends FormRequest $ruleGroup = $this->route()->parameter('ruleGroup'); return [ - 'title' => 'between:1,100|uniqueObjectForUser:rule_groups,title,' . $ruleGroup->id, - 'description' => 'between:1,5000|nullable', + 'title' => 'min:1|max:100|uniqueObjectForUser:rule_groups,title,'.$ruleGroup->id, + 'description' => 'min:1|max:32768|nullable', 'active' => [new IsBoolean()], ]; } diff --git a/app/Api/V1/Requests/Models/Tag/StoreRequest.php b/app/Api/V1/Requests/Models/Tag/StoreRequest.php index 5f0ce7737b..4a17b58cf1 100644 --- a/app/Api/V1/Requests/Models/Tag/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Tag/StoreRequest.php @@ -31,19 +31,15 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class StoreRequest - * - */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; - use ChecksLogin; use AppendsLocationData; + use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -59,14 +55,12 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { $rules = [ 'tag' => 'required|min:1|uniqueObjectForUser:tags,tag|max:1024', - 'description' => 'min:1|nullable|max:65536', + 'description' => 'min:1|nullable|max:32768', 'date' => 'date|nullable', ]; diff --git a/app/Api/V1/Requests/Models/Tag/UpdateRequest.php b/app/Api/V1/Requests/Models/Tag/UpdateRequest.php index d364e8605f..be069c289e 100644 --- a/app/Api/V1/Requests/Models/Tag/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Tag/UpdateRequest.php @@ -33,19 +33,15 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; - use ChecksLogin; use AppendsLocationData; + use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -62,17 +58,15 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { /** @var Tag $tag */ - $tag = $this->route()->parameter('tagOrId'); + $tag = $this->route()->parameter('tagOrId'); // TODO check if uniqueObjectForUser is obsolete $rules = [ - 'tag' => 'min:1|max:1024|uniqueObjectForUser:tags,tag,' . $tag->id, - 'description' => 'min:1|nullable|max:65536', + 'tag' => 'min:1|max:1024|uniqueObjectForUser:tags,tag,'.$tag->id, + 'description' => 'min:1|nullable|max:32768', 'date' => 'date|nullable', ]; diff --git a/app/Api/V1/Requests/Models/Transaction/StoreRequest.php b/app/Api/V1/Requests/Models/Transaction/StoreRequest.php index 932d3061cf..7910be0d16 100644 --- a/app/Api/V1/Requests/Models/Transaction/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Transaction/StoreRequest.php @@ -27,6 +27,8 @@ namespace FireflyIII\Api\V1\Requests\Models\Transaction; use FireflyIII\Rules\BelongsUser; use FireflyIII\Rules\IsBoolean; use FireflyIII\Rules\IsDateOrTime; +use FireflyIII\Rules\IsValidPositiveAmount; +use FireflyIII\Rules\IsValidZeroOrMoreAmount; use FireflyIII\Support\NullArrayObject; use FireflyIII\Support\Request\AppendsLocationData; use FireflyIII\Support\Request\ChecksLogin; @@ -43,21 +45,19 @@ use Illuminate\Validation\Validator; */ class StoreRequest extends FormRequest { - use TransactionValidation; - use GroupValidation; - use CurrencyValidation; - use ConvertsDataTypes; - use ChecksLogin; use AppendsLocationData; + use ChecksLogin; + use ConvertsDataTypes; + use CurrencyValidation; + use GroupValidation; + use TransactionValidation; /** * Get all data. Is pretty complex because of all the ??-statements. - * - * @return array */ public function getAll(): array { - Log::debug('get all data in TransactionStoreRequest'); + app('log')->debug('get all data in TransactionStoreRequest'); return [ 'group_title' => $this->convertString('group_title'), @@ -71,95 +71,93 @@ class StoreRequest extends FormRequest /** * Get transaction data. - * - * @return array */ private function getTransactionData(): array { $return = []; + /** * @var array $transaction */ foreach ($this->get('transactions') as $transaction) { $object = new NullArrayObject($transaction); $return[] = [ - 'type' => $this->clearString($object['type'], false), - 'date' => $this->dateFromValue($object['date']), - 'order' => $this->integerFromValue((string)$object['order']), + 'type' => $this->clearString($object['type']), + 'date' => $this->dateFromValue($object['date']), + 'order' => $this->integerFromValue((string)$object['order']), 'currency_id' => $this->integerFromValue((string)$object['currency_id']), - 'currency_code' => $this->clearString((string)$object['currency_code'], false), + 'currency_code' => $this->clearString((string)$object['currency_code']), // foreign currency info: 'foreign_currency_id' => $this->integerFromValue((string)$object['foreign_currency_id']), - 'foreign_currency_code' => $this->clearString((string)$object['foreign_currency_code'], false), + 'foreign_currency_code' => $this->clearString((string)$object['foreign_currency_code']), // amount and foreign amount. Cannot be 0. - 'amount' => $this->clearString((string)$object['amount'], false), - 'foreign_amount' => $this->clearString((string)$object['foreign_amount'], false), + 'amount' => $this->clearString((string)$object['amount']), + 'foreign_amount' => $this->clearString((string)$object['foreign_amount']), // description. - 'description' => $this->clearString($object['description'], false), + 'description' => $this->clearString($object['description']), // source of transaction. If everything is null, assume cash account. 'source_id' => $this->integerFromValue((string)$object['source_id']), - 'source_name' => $this->clearString((string)$object['source_name'], false), - 'source_iban' => $this->clearString((string)$object['source_iban'], false), - 'source_number' => $this->clearString((string)$object['source_number'], false), - 'source_bic' => $this->clearString((string)$object['source_bic'], false), + 'source_name' => $this->clearString((string)$object['source_name']), + 'source_iban' => $this->clearString((string)$object['source_iban']), + 'source_number' => $this->clearString((string)$object['source_number']), + 'source_bic' => $this->clearString((string)$object['source_bic']), // destination of transaction. If everything is null, assume cash account. 'destination_id' => $this->integerFromValue((string)$object['destination_id']), - 'destination_name' => $this->clearString((string)$object['destination_name'], false), - 'destination_iban' => $this->clearString((string)$object['destination_iban'], false), - 'destination_number' => $this->clearString((string)$object['destination_number'], false), - 'destination_bic' => $this->clearString((string)$object['destination_bic'], false), + 'destination_name' => $this->clearString((string)$object['destination_name']), + 'destination_iban' => $this->clearString((string)$object['destination_iban']), + 'destination_number' => $this->clearString((string)$object['destination_number']), + 'destination_bic' => $this->clearString((string)$object['destination_bic']), // budget info 'budget_id' => $this->integerFromValue((string)$object['budget_id']), - 'budget_name' => $this->clearString((string)$object['budget_name'], false), + 'budget_name' => $this->clearString((string)$object['budget_name']), // category info 'category_id' => $this->integerFromValue((string)$object['category_id']), - 'category_name' => $this->clearString((string)$object['category_name'], false), + 'category_name' => $this->clearString((string)$object['category_name']), // journal bill reference. Optional. Will only work for withdrawals 'bill_id' => $this->integerFromValue((string)$object['bill_id']), - 'bill_name' => $this->clearString((string)$object['bill_name'], false), + 'bill_name' => $this->clearString((string)$object['bill_name']), // piggy bank reference. Optional. Will only work for transfers 'piggy_bank_id' => $this->integerFromValue((string)$object['piggy_bank_id']), - 'piggy_bank_name' => $this->clearString((string)$object['piggy_bank_name'], false), + 'piggy_bank_name' => $this->clearString((string)$object['piggy_bank_name']), // some other interesting properties 'reconciled' => $this->convertBoolean((string)$object['reconciled']), - 'notes' => $this->clearString((string)$object['notes']), + 'notes' => $this->clearStringKeepNewlines((string)$object['notes']), 'tags' => $this->arrayFromValue($object['tags']), // all custom fields: - 'internal_reference' => $this->clearString((string)$object['internal_reference'], false), - 'external_id' => $this->clearString((string)$object['external_id'], false), + 'internal_reference' => $this->clearString((string)$object['internal_reference']), + 'external_id' => $this->clearString((string)$object['external_id']), 'original_source' => sprintf('ff3-v%s|api-v%s', config('firefly.version'), config('firefly.api_version')), 'recurrence_id' => $this->integerFromValue($object['recurrence_id']), - 'bunq_payment_id' => $this->clearString((string)$object['bunq_payment_id'], false), - 'external_url' => $this->clearString((string)$object['external_url'], false), + 'bunq_payment_id' => $this->clearString((string)$object['bunq_payment_id']), + 'external_url' => $this->clearString((string)$object['external_url']), - 'sepa_cc' => $this->clearString((string)$object['sepa_cc'], false), - 'sepa_ct_op' => $this->clearString((string)$object['sepa_ct_op'], false), - 'sepa_ct_id' => $this->clearString((string)$object['sepa_ct_id'], false), - 'sepa_db' => $this->clearString((string)$object['sepa_db'], false), - 'sepa_country' => $this->clearString((string)$object['sepa_country'], false), - 'sepa_ep' => $this->clearString((string)$object['sepa_ep'], false), - 'sepa_ci' => $this->clearString((string)$object['sepa_ci'], false), - 'sepa_batch_id' => $this->clearString((string)$object['sepa_batch_id'], false), + 'sepa_cc' => $this->clearString((string)$object['sepa_cc']), + 'sepa_ct_op' => $this->clearString((string)$object['sepa_ct_op']), + 'sepa_ct_id' => $this->clearString((string)$object['sepa_ct_id']), + 'sepa_db' => $this->clearString((string)$object['sepa_db']), + 'sepa_country' => $this->clearString((string)$object['sepa_country']), + 'sepa_ep' => $this->clearString((string)$object['sepa_ep']), + 'sepa_ci' => $this->clearString((string)$object['sepa_ci']), + 'sepa_batch_id' => $this->clearString((string)$object['sepa_batch_id']), // custom date fields. Must be Carbon objects. Presence is optional. - 'interest_date' => $this->dateFromValue($object['interest_date']), - 'book_date' => $this->dateFromValue($object['book_date']), - 'process_date' => $this->dateFromValue($object['process_date']), - 'due_date' => $this->dateFromValue($object['due_date']), - 'payment_date' => $this->dateFromValue($object['payment_date']), - 'invoice_date' => $this->dateFromValue($object['invoice_date']), - + 'interest_date' => $this->dateFromValue($object['interest_date']), + 'book_date' => $this->dateFromValue($object['book_date']), + 'process_date' => $this->dateFromValue($object['process_date']), + 'due_date' => $this->dateFromValue($object['due_date']), + 'payment_date' => $this->dateFromValue($object['payment_date']), + 'invoice_date' => $this->dateFromValue($object['invoice_date']), ]; } @@ -168,16 +166,15 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { - Log::debug('Collect rules of TransactionStoreRequest'); + app('log')->debug('Collect rules of TransactionStoreRequest'); + $validProtocols = config('firefly.valid_url_protocols'); return [ // basic fields for group: - 'group_title' => 'between:1,1000|nullable', + 'group_title' => 'min:1|max:1000|nullable', 'error_if_duplicate_hash' => [new IsBoolean()], 'apply_rules' => [new IsBoolean()], @@ -193,47 +190,48 @@ class StoreRequest extends FormRequest 'transactions.*.foreign_currency_code' => 'min:3|max:51|exists:transaction_currencies,code|nullable', // amount - 'transactions.*.amount' => 'required|numeric|gt:0', - 'transactions.*.foreign_amount' => 'numeric', + 'transactions.*.amount' => ['required', new IsValidPositiveAmount()], + 'transactions.*.foreign_amount' => ['nullable', new IsValidZeroOrMoreAmount()], // description - 'transactions.*.description' => 'nullable|between:1,1000', + 'transactions.*.description' => 'nullable|min:1|max:1000', // source of transaction 'transactions.*.source_id' => ['numeric', 'nullable', new BelongsUser()], - 'transactions.*.source_name' => 'between:1,255|nullable', - 'transactions.*.source_iban' => 'between:1,255|nullable|iban', - 'transactions.*.source_number' => 'between:1,255|nullable', - 'transactions.*.source_bic' => 'between:1,255|nullable|bic', + 'transactions.*.source_name' => 'min:1|max:255|nullable', + 'transactions.*.source_iban' => 'min:1|max:255|nullable|iban', + 'transactions.*.source_number' => 'min:1|max:255|nullable', + 'transactions.*.source_bic' => 'min:1|max:255|nullable|bic', // destination of transaction 'transactions.*.destination_id' => ['numeric', 'nullable', new BelongsUser()], - 'transactions.*.destination_name' => 'between:1,255|nullable', - 'transactions.*.destination_iban' => 'between:1,255|nullable|iban', - 'transactions.*.destination_number' => 'between:1,255|nullable', - 'transactions.*.destination_bic' => 'between:1,255|nullable|bic', + 'transactions.*.destination_name' => 'min:1|max:255|nullable', + 'transactions.*.destination_iban' => 'min:1|max:255|nullable|iban', + 'transactions.*.destination_number' => 'min:1|max:255|nullable', + 'transactions.*.destination_bic' => 'min:1|max:255|nullable|bic', // budget, category, bill and piggy 'transactions.*.budget_id' => ['mustExist:budgets,id', new BelongsUser()], - 'transactions.*.budget_name' => ['between:1,255', 'nullable', new BelongsUser()], + 'transactions.*.budget_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], 'transactions.*.category_id' => ['mustExist:categories,id', new BelongsUser(), 'nullable'], - 'transactions.*.category_name' => 'between:1,255|nullable', + 'transactions.*.category_name' => 'min:1|max:255|nullable', 'transactions.*.bill_id' => ['numeric', 'nullable', 'mustExist:bills,id', new BelongsUser()], - 'transactions.*.bill_name' => ['between:1,255', 'nullable', new BelongsUser()], + 'transactions.*.bill_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], 'transactions.*.piggy_bank_id' => ['numeric', 'nullable', 'mustExist:piggy_banks,id', new BelongsUser()], - 'transactions.*.piggy_bank_name' => ['between:1,255', 'nullable', new BelongsUser()], + 'transactions.*.piggy_bank_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], // other interesting fields 'transactions.*.reconciled' => [new IsBoolean()], - 'transactions.*.notes' => 'min:1|max:50000|nullable', - 'transactions.*.tags' => 'between:0,255', + 'transactions.*.notes' => 'min:1|max:32768|nullable', + 'transactions.*.tags' => 'min:0|max:255', + 'transactions.*.tags.*' => 'min:0|max:255', // meta info fields 'transactions.*.internal_reference' => 'min:1|max:255|nullable', 'transactions.*.external_id' => 'min:1|max:255|nullable', 'transactions.*.recurrence_id' => 'min:1|max:255|nullable', 'transactions.*.bunq_payment_id' => 'min:1|max:255|nullable', - 'transactions.*.external_url' => 'min:1|max:255|nullable|url', + 'transactions.*.external_url' => sprintf('min:1|max:255|nullable|url:%s', $validProtocols), // SEPA fields: 'transactions.*.sepa_cc' => 'min:1|max:255|nullable', @@ -257,22 +255,18 @@ class StoreRequest extends FormRequest /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { // must be valid array. $this->validateTransactionArray($validator); // must submit at least one transaction. - Log::debug('Now going to validateOneTransaction'); + app('log')->debug('Now going to validateOneTransaction'); $this->validateOneTransaction($validator); - Log::debug('Now done with validateOneTransaction'); + app('log')->debug('Now done with validateOneTransaction'); // all journals must have a description $this->validateDescriptions($validator); @@ -293,5 +287,8 @@ class StoreRequest extends FormRequest $this->validateGroupDescription($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php b/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php index 0d8f931568..b6a3f570b4 100644 --- a/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Transaction/UpdateRequest.php @@ -29,6 +29,8 @@ use FireflyIII\Models\TransactionGroup; use FireflyIII\Rules\BelongsUser; use FireflyIII\Rules\IsBoolean; use FireflyIII\Rules\IsDateOrTime; +use FireflyIII\Rules\IsValidPositiveAmount; +use FireflyIII\Rules\IsValidZeroOrMoreAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Validation\GroupValidation; @@ -42,10 +44,10 @@ use Illuminate\Validation\Validator; */ class UpdateRequest extends FormRequest { - use TransactionValidation; - use GroupValidation; - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; + use GroupValidation; + use TransactionValidation; private array $arrayFields; private array $booleanFields; @@ -58,81 +60,20 @@ class UpdateRequest extends FormRequest /** * Get all data. Is pretty complex because of all the ??-statements. * - * @return array * @throws FireflyException */ public function getAll(): array { - Log::debug(sprintf('Now in %s', __METHOD__)); - $this->integerFields = [ - 'order', - 'currency_id', - 'foreign_currency_id', - 'transaction_journal_id', - 'source_id', - 'destination_id', - 'budget_id', - 'category_id', - 'bill_id', - 'recurrence_id', - ]; - - $this->dateFields = [ - 'date', - 'interest_date', - 'book_date', - 'process_date', - 'due_date', - 'payment_date', - 'invoice_date', - ]; - - $this->textareaFields = [ - 'notes', - ]; - - $this->floatFields = [ // not really floats, for validation. - 'amount', - 'foreign_amount', - ]; - - $this->stringFields = [ - 'type', - 'currency_code', - 'foreign_currency_code', - 'description', - 'source_name', - 'source_iban', - 'source_number', - 'source_bic', - 'destination_name', - 'destination_iban', - 'destination_number', - 'destination_bic', - 'budget_name', - 'category_name', - 'bill_name', - 'internal_reference', - 'external_id', - 'bunq_payment_id', - 'sepa_cc', - 'sepa_ct_op', - 'sepa_ct_id', - 'sepa_db', - 'sepa_country', - 'sepa_ep', - 'sepa_ci', - 'sepa_batch_id', - 'external_url', - ]; - $this->booleanFields = [ - 'reconciled', - ]; - - $this->arrayFields = [ - 'tags', - ]; - $data = []; + app('log')->debug(sprintf('Now in %s', __METHOD__)); + $this->integerFields = ['order', 'currency_id', 'foreign_currency_id', 'transaction_journal_id', 'source_id', 'destination_id', 'budget_id', 'category_id', 'bill_id', 'recurrence_id']; + $this->dateFields = ['date', 'interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date']; + $this->textareaFields = ['notes']; + // not really floats, for validation. + $this->floatFields = ['amount', 'foreign_amount']; + $this->stringFields = ['type', 'currency_code', 'foreign_currency_code', 'description', 'source_name', 'source_iban', 'source_number', 'source_bic', 'destination_name', 'destination_iban', 'destination_number', 'destination_bic', 'budget_name', 'category_name', 'bill_name', 'internal_reference', 'external_id', 'bunq_payment_id', 'sepa_cc', 'sepa_ct_op', 'sepa_ct_id', 'sepa_db', 'sepa_country', 'sepa_ep', 'sepa_ci', 'sepa_batch_id', 'external_url']; + $this->booleanFields = ['reconciled']; + $this->arrayFields = ['tags']; + $data = []; if ($this->has('transactions')) { $data['transactions'] = $this->getTransactionData(); } @@ -152,20 +93,22 @@ class UpdateRequest extends FormRequest /** * Get transaction data. * - * @return array * @throws FireflyException */ private function getTransactionData(): array { - Log::debug(sprintf('Now in %s', __METHOD__)); - $return = []; + app('log')->debug(sprintf('Now in %s', __METHOD__)); + $return = []; - if (!is_countable($this->get('transactions'))) { + /** @var null|array $transactions */ + $transactions = $this->get('transactions'); + + if (!is_countable($transactions)) { return $return; } - /** @var array $transaction */ - foreach ($this->get('transactions') as $transaction) { + /** @var null|array $transaction */ + foreach ($transactions as $transaction) { if (!is_array($transaction)) { throw new FireflyException('Invalid data submitted: transaction is not array.'); } @@ -187,10 +130,8 @@ class UpdateRequest extends FormRequest /** * For each field, add it to the array if a reference is present in the request: * - * @param array $current - * @param array $transaction - * - * @return array + * @param array $current + * @param array $transaction */ private function getIntegerData(array $current, array $transaction): array { @@ -204,31 +145,12 @@ class UpdateRequest extends FormRequest } /** - * @param array $current - * @param array $transaction - * - * @return array + * @param array $current + * @param array $transaction */ private function getStringData(array $current, array $transaction): array { foreach ($this->stringFields as $fieldName) { - if (array_key_exists($fieldName, $transaction)) { - $current[$fieldName] = $this->clearString((string)$transaction[$fieldName], false); - } - } - - return $current; - } - - /** - * @param array $current - * @param array $transaction - * - * @return array - */ - private function getNlStringData(array $current, array $transaction): array - { - foreach ($this->textareaFields as $fieldName) { if (array_key_exists($fieldName, $transaction)) { $current[$fieldName] = $this->clearString((string)$transaction[$fieldName]); } @@ -238,17 +160,30 @@ class UpdateRequest extends FormRequest } /** - * @param array $current - * @param array $transaction - * - * @return array + * @param array $current + * @param array $transaction + */ + private function getNlStringData(array $current, array $transaction): array + { + foreach ($this->textareaFields as $fieldName) { + if (array_key_exists($fieldName, $transaction)) { + $current[$fieldName] = $this->clearStringKeepNewlines((string)$transaction[$fieldName]); // keep newlines + } + } + + return $current; + } + + /** + * @param array $current + * @param array $transaction */ private function getDateData(array $current, array $transaction): array { foreach ($this->dateFields as $fieldName) { - Log::debug(sprintf('Now at date field %s', $fieldName)); + app('log')->debug(sprintf('Now at date field %s', $fieldName)); if (array_key_exists($fieldName, $transaction)) { - Log::debug(sprintf('New value: "%s"', (string)$transaction[$fieldName])); + app('log')->debug(sprintf('New value: "%s"', (string)$transaction[$fieldName])); $current[$fieldName] = $this->dateFromValue((string)$transaction[$fieldName]); } } @@ -257,10 +192,8 @@ class UpdateRequest extends FormRequest } /** - * @param array $current - * @param array $transaction - * - * @return array + * @param array $current + * @param array $transaction */ private function getBooleanData(array $current, array $transaction): array { @@ -274,10 +207,8 @@ class UpdateRequest extends FormRequest } /** - * @param array $current - * @param array $transaction - * - * @return array + * @param array $current + * @param array $transaction */ private function getArrayData(array $current, array $transaction): array { @@ -291,10 +222,8 @@ class UpdateRequest extends FormRequest } /** - * @param array $current - * @param array $transaction - * - * @return array + * @param array $current + * @param array $transaction */ private function getFloatData(array $current, array $transaction): array { @@ -315,16 +244,15 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); + $validProtocols = config('firefly.valid_url_protocols'); return [ // basic fields for group: - 'group_title' => 'between:1,1000|nullable', + 'group_title' => 'min:1|max:1000|nullable', 'apply_rules' => [new IsBoolean()], // transaction rules (in array for splits): @@ -335,7 +263,6 @@ class UpdateRequest extends FormRequest // group id: 'transactions.*.transaction_journal_id' => ['nullable', 'numeric', new BelongsUser()], - // currency info 'transactions.*.currency_id' => 'numeric|exists:transaction_currencies,id|nullable', 'transactions.*.currency_code' => 'min:3|max:51|exists:transaction_currencies,code|nullable', @@ -343,39 +270,40 @@ class UpdateRequest extends FormRequest 'transactions.*.foreign_currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code', // amount - 'transactions.*.amount' => 'numeric|gt:0|max:100000000000', - 'transactions.*.foreign_amount' => 'nullable|numeric|gte:0', + 'transactions.*.amount' => [new IsValidPositiveAmount()], + 'transactions.*.foreign_amount' => ['nullable', new IsValidZeroOrMoreAmount()], // description - 'transactions.*.description' => 'nullable|between:1,1000', + 'transactions.*.description' => 'nullable|min:1|max:1000', // source of transaction 'transactions.*.source_id' => ['numeric', 'nullable', new BelongsUser()], - 'transactions.*.source_name' => 'between:1,255|nullable', + 'transactions.*.source_name' => 'min:1|max:255|nullable', // destination of transaction 'transactions.*.destination_id' => ['numeric', 'nullable', new BelongsUser()], - 'transactions.*.destination_name' => 'between:1,255|nullable', + 'transactions.*.destination_name' => 'min:1|max:255|nullable', // budget, category, bill and piggy 'transactions.*.budget_id' => ['mustExist:budgets,id', new BelongsUser(), 'nullable'], - 'transactions.*.budget_name' => ['between:1,255', 'nullable', new BelongsUser()], + 'transactions.*.budget_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], 'transactions.*.category_id' => ['mustExist:categories,id', new BelongsUser(), 'nullable'], - 'transactions.*.category_name' => 'between:1,255|nullable', + 'transactions.*.category_name' => 'min:1|max:255|nullable', 'transactions.*.bill_id' => ['numeric', 'nullable', 'mustExist:bills,id', new BelongsUser()], - 'transactions.*.bill_name' => ['between:1,255', 'nullable', new BelongsUser()], + 'transactions.*.bill_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], // other interesting fields 'transactions.*.reconciled' => [new IsBoolean()], - 'transactions.*.notes' => 'min:1|max:50000|nullable', - 'transactions.*.tags' => 'between:0,255|nullable', + 'transactions.*.notes' => 'min:1|max:32768|nullable', + 'transactions.*.tags' => 'min:0|max:255|nullable', + 'transactions.*.tags.*' => 'min:0|max:255', // meta info fields 'transactions.*.internal_reference' => 'min:1|max:255|nullable', 'transactions.*.external_id' => 'min:1|max:255|nullable', 'transactions.*.recurrence_id' => 'min:1|max:255|nullable', 'transactions.*.bunq_payment_id' => 'min:1|max:255|nullable', - 'transactions.*.external_url' => 'min:1|max:255|nullable|url', + 'transactions.*.external_url' => sprintf('min:1|max:255|nullable|url:%s', $validProtocols), // SEPA fields: 'transactions.*.sepa_cc' => 'min:1|max:255|nullable', @@ -399,34 +327,39 @@ class UpdateRequest extends FormRequest /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { - Log::debug('Now in withValidator'); + app('log')->debug('Now in withValidator'); + /** @var TransactionGroup $transactionGroup */ $transactionGroup = $this->route()->parameter('transactionGroup'); $validator->after( - function (Validator $validator) use ($transactionGroup) { + function (Validator $validator) use ($transactionGroup): void { // if more than one, verify that there are journal ID's present. $this->validateJournalIds($validator, $transactionGroup); // all transaction types must be equal: $this->validateTransactionTypesForUpdate($validator); + // user wants to update a reconciled transaction. + // source, destination, amount + foreign_amount cannot be changed + // and must be omitted from the request. + $this->preventUpdateReconciled($validator, $transactionGroup); + // validate source/destination is equal, depending on the transaction journal type. $this->validateEqualAccountsForUpdate($validator, $transactionGroup); - // a catch when users submit splits with no source or destination info at all. - $this->preventNoAccountInfo($validator, ); + // see method: + // $this->preventNoAccountInfo($validator, ); // validate that the currency fits the source and/or destination account. // validate all account info $this->validateAccountInformationUpdate($validator, $transactionGroup); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/Models/TransactionCurrency/StoreRequest.php b/app/Api/V1/Requests/Models/TransactionCurrency/StoreRequest.php index 479348c85b..17ec1b4e3b 100644 --- a/app/Api/V1/Requests/Models/TransactionCurrency/StoreRequest.php +++ b/app/Api/V1/Requests/Models/TransactionCurrency/StoreRequest.php @@ -30,18 +30,14 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class StoreRequest - * - */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -66,19 +62,16 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { return [ - 'name' => 'required|between:1,255|unique:transaction_currencies,name', - 'code' => 'required|between:3,51|unique:transaction_currencies,code', - 'symbol' => 'required|between:1,51|unique:transaction_currencies,symbol', - 'decimal_places' => 'between:0,20|numeric|min:0|max:12', + 'name' => 'required|min:1|max:255|unique:transaction_currencies,name', + 'code' => 'required|min:3|max:32|unique:transaction_currencies,code', + 'symbol' => 'required|min:1|max:32|unique:transaction_currencies,symbol', + 'decimal_places' => 'numeric|min:0|max:12', 'enabled' => [new IsBoolean()], 'default' => [new IsBoolean()], - ]; } } diff --git a/app/Api/V1/Requests/Models/TransactionCurrency/UpdateRequest.php b/app/Api/V1/Requests/Models/TransactionCurrency/UpdateRequest.php index 5e673d42b4..1344f8d546 100644 --- a/app/Api/V1/Requests/Models/TransactionCurrency/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/TransactionCurrency/UpdateRequest.php @@ -31,22 +31,18 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { - // return nothing that isn't explicitely in the array: + // return nothing that isn't explicitly in the array: $fields = [ 'name' => ['name', 'convertString'], 'code' => ['code', 'convertString'], @@ -57,13 +53,10 @@ class UpdateRequest extends FormRequest ]; return $this->getAllData($fields); - // return $return; } /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -71,10 +64,10 @@ class UpdateRequest extends FormRequest $currency = $this->route()->parameter('currency_code'); return [ - 'name' => sprintf('between:1,255|unique:transaction_currencies,name,%d', $currency->id), - 'code' => sprintf('between:3,51|unique:transaction_currencies,code,%d', $currency->id), - 'symbol' => sprintf('between:1,51|unique:transaction_currencies,symbol,%d', $currency->id), - 'decimal_places' => 'between:0,20|numeric|min:0|max:12', + 'name' => sprintf('min:1|max:255|unique:transaction_currencies,name,%d', $currency->id), + 'code' => sprintf('min:3|max:32|unique:transaction_currencies,code,%d', $currency->id), + 'symbol' => sprintf('min:1|max:32|unique:transaction_currencies,symbol,%d', $currency->id), + 'decimal_places' => 'numeric|min:0|max:12', 'enabled' => [new IsBoolean()], 'default' => [new IsBoolean()], ]; diff --git a/app/Api/V1/Requests/Models/TransactionLink/StoreRequest.php b/app/Api/V1/Requests/Models/TransactionLink/StoreRequest.php index dd97a2a4c1..788cadf1b8 100644 --- a/app/Api/V1/Requests/Models/TransactionLink/StoreRequest.php +++ b/app/Api/V1/Requests/Models/TransactionLink/StoreRequest.php @@ -29,6 +29,7 @@ use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\User; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -36,13 +37,11 @@ use Illuminate\Validation\Validator; */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -57,8 +56,6 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -67,46 +64,43 @@ class StoreRequest extends FormRequest 'link_type_name' => 'exists:link_types,name|required_without:link_type_id', 'inward_id' => 'required|belongsToUser:transaction_journals,id|different:outward_id', 'outward_id' => 'required|belongsToUser:transaction_journals,id|different:inward_id', - 'notes' => 'between:0,65000', + 'notes' => 'min:1|max:32768|nullable', ]; } /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { $this->validateExistingLink($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } - /** - * @param Validator $validator - */ private function validateExistingLink(Validator $validator): void { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); + /** @var LinkTypeRepositoryInterface $repository */ - $repository = app(LinkTypeRepositoryInterface::class); + $repository = app(LinkTypeRepositoryInterface::class); $repository->setUser($user); /** @var JournalRepositoryInterface $journalRepos */ $journalRepos = app(JournalRepositoryInterface::class); $journalRepos->setUser($user); - $data = $validator->getData(); - $inwardId = (int)($data['inward_id'] ?? 0); - $outwardId = (int)($data['outward_id'] ?? 0); - $inward = $journalRepos->find($inwardId); - $outward = $journalRepos->find($outwardId); + $data = $validator->getData(); + $inwardId = (int)($data['inward_id'] ?? 0); + $outwardId = (int)($data['outward_id'] ?? 0); + $inward = $journalRepos->find($inwardId); + $outward = $journalRepos->find($outwardId); if (null === $inward) { $validator->errors()->add('inward_id', 'Invalid inward ID.'); diff --git a/app/Api/V1/Requests/Models/TransactionLink/UpdateRequest.php b/app/Api/V1/Requests/Models/TransactionLink/UpdateRequest.php index 92cc96c909..f5fcd7d48e 100644 --- a/app/Api/V1/Requests/Models/TransactionLink/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/TransactionLink/UpdateRequest.php @@ -29,6 +29,7 @@ use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -36,13 +37,11 @@ use Illuminate\Validation\Validator; */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -57,8 +56,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -67,46 +64,43 @@ class UpdateRequest extends FormRequest 'link_type_name' => 'exists:link_types,name', 'inward_id' => 'belongsToUser:transaction_journals,id|different:outward_id', 'outward_id' => 'belongsToUser:transaction_journals,id|different:inward_id', - 'notes' => 'between:0,65000', + 'notes' => 'min:1|max:32768|nullable', ]; } /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { $this->validateUpdate($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } - /** - * @param Validator $validator - */ private function validateUpdate(Validator $validator): void { /** @var TransactionJournalLink $existing */ - $existing = $this->route()->parameter('journalLink'); - $data = $validator->getData(); + $existing = $this->route()->parameter('journalLink'); + $data = $validator->getData(); + /** @var LinkTypeRepositoryInterface $repository */ - $repository = app(LinkTypeRepositoryInterface::class); + $repository = app(LinkTypeRepositoryInterface::class); $repository->setUser(auth()->user()); /** @var JournalRepositoryInterface $journalRepos */ $journalRepos = app(JournalRepositoryInterface::class); $journalRepos->setUser(auth()->user()); - $inwardId = $data['inward_id'] ?? $existing->source_id; - $outwardId = $data['outward_id'] ?? $existing->destination_id; - $inward = $journalRepos->find((int)$inwardId); - $outward = $journalRepos->find((int)$outwardId); + $inwardId = $data['inward_id'] ?? $existing->source_id; + $outwardId = $data['outward_id'] ?? $existing->destination_id; + $inward = $journalRepos->find((int)$inwardId); + $outward = $journalRepos->find((int)$outwardId); if (null === $inward) { $inward = $existing->source; } @@ -118,7 +112,7 @@ class UpdateRequest extends FormRequest $validator->errors()->add('outward_id', 'Inward ID must be different from outward ID.'); } - $inDB = $repository->findSpecificLink($existing->linkType, $inward, $outward); + $inDB = $repository->findSpecificLink($existing->linkType, $inward, $outward); if (null === $inDB) { return; } diff --git a/app/Api/V1/Requests/Models/TransactionLinkType/StoreRequest.php b/app/Api/V1/Requests/Models/TransactionLinkType/StoreRequest.php index cc9a4a0dcf..abcde7dd2c 100644 --- a/app/Api/V1/Requests/Models/TransactionLinkType/StoreRequest.php +++ b/app/Api/V1/Requests/Models/TransactionLinkType/StoreRequest.php @@ -29,18 +29,14 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class StoreRequest - * - */ class StoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -53,8 +49,6 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { diff --git a/app/Api/V1/Requests/Models/TransactionLinkType/UpdateRequest.php b/app/Api/V1/Requests/Models/TransactionLinkType/UpdateRequest.php index ed3d1e7c95..7f660107e4 100644 --- a/app/Api/V1/Requests/Models/TransactionLinkType/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/TransactionLinkType/UpdateRequest.php @@ -31,18 +31,14 @@ use Illuminate\Validation\Rule; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -55,8 +51,6 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { diff --git a/app/Api/V1/Requests/Models/Webhook/CreateRequest.php b/app/Api/V1/Requests/Models/Webhook/CreateRequest.php index 24c4084bf0..94e58c9ffa 100644 --- a/app/Api/V1/Requests/Models/Webhook/CreateRequest.php +++ b/app/Api/V1/Requests/Models/Webhook/CreateRequest.php @@ -37,16 +37,13 @@ class CreateRequest extends FormRequest use ChecksLogin; use ConvertsDataTypes; - /** - * @return array - */ public function getData(): array { - $triggers = Webhook::getTriggersForValidation(); - $responses = Webhook::getResponsesForValidation(); - $deliveries = Webhook::getDeliveriesForValidation(); + $triggers = Webhook::getTriggersForValidation(); + $responses = Webhook::getResponsesForValidation(); + $deliveries = Webhook::getDeliveriesForValidation(); - $fields = [ + $fields = [ 'title' => ['title', 'convertString'], 'active' => ['active', 'boolean'], 'trigger' => ['trigger', 'convertString'], @@ -57,31 +54,30 @@ class CreateRequest extends FormRequest // this is the way. $return = $this->getAllData($fields); - $return['trigger'] = $triggers[$return['trigger']] ?? intval($return['trigger']); - $return['response'] = $responses[$return['response']] ?? intval($return['response']); - $return['delivery'] = $deliveries[$return['delivery']] ?? intval($return['delivery']); + $return['trigger'] = $triggers[$return['trigger']] ?? (int)$return['trigger']; + $return['response'] = $responses[$return['response']] ?? (int)$return['response']; + $return['delivery'] = $deliveries[$return['delivery']] ?? (int)$return['delivery']; return $return; } /** * Rules for this request. - * - * @return array */ public function rules(): array { - $triggers = implode(',', array_keys(Webhook::getTriggersForValidation())); - $responses = implode(',', array_keys(Webhook::getResponsesForValidation())); - $deliveries = implode(',', array_keys(Webhook::getDeliveriesForValidation())); + $triggers = implode(',', array_keys(Webhook::getTriggersForValidation())); + $responses = implode(',', array_keys(Webhook::getResponsesForValidation())); + $deliveries = implode(',', array_keys(Webhook::getDeliveriesForValidation())); + $validProtocols = config('firefly.valid_url_protocols'); return [ - 'title' => 'required|between:1,512|uniqueObjectForUser:webhooks,title', + 'title' => 'required|min:1|max:255|uniqueObjectForUser:webhooks,title', 'active' => [new IsBoolean()], 'trigger' => sprintf('required|in:%s', $triggers), 'response' => sprintf('required|in:%s', $responses), 'delivery' => sprintf('required|in:%s', $deliveries), - 'url' => ['required', 'url', 'uniqueWebhook'], + 'url' => ['required', sprintf('url:%s', $validProtocols), 'uniqueWebhook'], ]; } } diff --git a/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php b/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php index 157c2f5716..5fc21ee4f2 100644 --- a/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php +++ b/app/Api/V1/Requests/Models/Webhook/UpdateRequest.php @@ -37,16 +37,13 @@ class UpdateRequest extends FormRequest use ChecksLogin; use ConvertsDataTypes; - /** - * @return array - */ public function getData(): array { - $triggers = Webhook::getTriggersForValidation(); - $responses = Webhook::getResponsesForValidation(); - $deliveries = Webhook::getDeliveriesForValidation(); + $triggers = Webhook::getTriggersForValidation(); + $responses = Webhook::getResponsesForValidation(); + $deliveries = Webhook::getDeliveriesForValidation(); - $fields = [ + $fields = [ 'title' => ['title', 'convertString'], 'active' => ['active', 'boolean'], 'trigger' => ['trigger', 'convertString'], @@ -56,7 +53,7 @@ class UpdateRequest extends FormRequest ]; // this is the way. - $return = $this->getAllData($fields); + $return = $this->getAllData($fields); if (array_key_exists('trigger', $return)) { $return['trigger'] = $triggers[$return['trigger']] ?? 0; } @@ -76,25 +73,24 @@ class UpdateRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { - $triggers = implode(',', array_keys(Webhook::getTriggersForValidation())); - $responses = implode(',', array_keys(Webhook::getResponsesForValidation())); - $deliveries = implode(',', array_keys(Webhook::getDeliveriesForValidation())); + $triggers = implode(',', array_keys(Webhook::getTriggersForValidation())); + $responses = implode(',', array_keys(Webhook::getResponsesForValidation())); + $deliveries = implode(',', array_keys(Webhook::getDeliveriesForValidation())); + $validProtocols = config('firefly.valid_url_protocols'); /** @var Webhook $webhook */ - $webhook = $this->route()->parameter('webhook'); + $webhook = $this->route()->parameter('webhook'); return [ - 'title' => sprintf('between:1,512|uniqueObjectForUser:webhooks,title,%d', $webhook->id), + 'title' => sprintf('min:1|max:255|uniqueObjectForUser:webhooks,title,%d', $webhook->id), 'active' => [new IsBoolean()], 'trigger' => sprintf('in:%s', $triggers), 'response' => sprintf('in:%s', $responses), 'delivery' => sprintf('in:%s', $deliveries), - 'url' => ['url', sprintf('uniqueExistingWebhook:%d', $webhook->id)], + 'url' => [sprintf('url:%s', $validProtocols), sprintf('uniqueExistingWebhook:%d', $webhook->id)], ]; } } diff --git a/app/Api/V1/Requests/System/CronRequest.php b/app/Api/V1/Requests/System/CronRequest.php index 3af1094aa2..4ce959c635 100644 --- a/app/Api/V1/Requests/System/CronRequest.php +++ b/app/Api/V1/Requests/System/CronRequest.php @@ -29,8 +29,6 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class CronRequest - * - */ class CronRequest extends FormRequest { @@ -38,8 +36,6 @@ class CronRequest extends FormRequest /** * Verify the request. - * - * @return bool */ public function authorize(): bool { @@ -48,8 +44,6 @@ class CronRequest extends FormRequest /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -69,8 +63,6 @@ class CronRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { diff --git a/app/Api/V1/Requests/System/UpdateRequest.php b/app/Api/V1/Requests/System/UpdateRequest.php index 5c6c59fe07..2f9c39af0e 100644 --- a/app/Api/V1/Requests/System/UpdateRequest.php +++ b/app/Api/V1/Requests/System/UpdateRequest.php @@ -31,27 +31,23 @@ use Illuminate\Foundation\Http\FormRequest; /** * Class UpdateRequest - * - */ class UpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { $name = $this->route()->parameter('dynamicConfigKey'); - if ($name === 'configuration.is_demo_site' || $name === 'configuration.single_user_mode') { + if ('configuration.is_demo_site' === $name || 'configuration.single_user_mode' === $name) { return ['value' => $this->boolean('value')]; } - if ($name === 'configuration.permission_update_check' || $name === 'configuration.last_update_check') { + if ('configuration.permission_update_check' === $name || 'configuration.last_update_check' === $name) { return ['value' => $this->convertInteger('value')]; } @@ -60,20 +56,18 @@ class UpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { $name = $this->route()->parameter('configName'); - if ($name === 'configuration.is_demo_site' || $name === 'configuration.single_user_mode') { + if ('configuration.is_demo_site' === $name || 'configuration.single_user_mode' === $name) { return ['value' => ['required', new IsBoolean()]]; } - if ($name === 'configuration.permission_update_check') { - return ['value' => 'required|numeric|between:-1,1']; + if ('configuration.permission_update_check' === $name) { + return ['value' => 'required|numeric|min:-1|max:1']; } - if ($name === 'configuration.last_update_check') { + if ('configuration.last_update_check' === $name) { return ['value' => 'required|numeric|min:464272080']; } diff --git a/app/Api/V1/Requests/System/UserStoreRequest.php b/app/Api/V1/Requests/System/UserStoreRequest.php index 28dae61728..9ca9409ec8 100644 --- a/app/Api/V1/Requests/System/UserStoreRequest.php +++ b/app/Api/V1/Requests/System/UserStoreRequest.php @@ -34,13 +34,11 @@ use Illuminate\Foundation\Http\FormRequest; */ class UserStoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Logged in + owner - * - * @return bool */ public function authorize(): bool { @@ -49,8 +47,6 @@ class UserStoreRequest extends FormRequest /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -69,8 +65,6 @@ class UserStoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { diff --git a/app/Api/V1/Requests/System/UserUpdateRequest.php b/app/Api/V1/Requests/System/UserUpdateRequest.php index 87013e88fd..19cda61d3d 100644 --- a/app/Api/V1/Requests/System/UserUpdateRequest.php +++ b/app/Api/V1/Requests/System/UserUpdateRequest.php @@ -29,6 +29,7 @@ use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\User; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -36,13 +37,11 @@ use Illuminate\Validation\Validator; */ class UserUpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Logged in + owner - * - * @return bool */ public function authorize(): bool { @@ -51,8 +50,6 @@ class UserUpdateRequest extends FormRequest /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -71,8 +68,6 @@ class UserUpdateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -89,17 +84,13 @@ class UserUpdateRequest extends FormRequest /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { - /** @var User|null $current */ + /** @var null|User $current */ $current = $this->route()->parameter('user'); $validator->after( - static function (Validator $validator) use ($current) { + static function (Validator $validator) use ($current): void { $isAdmin = auth()->user()->hasRole('owner'); // not admin, and not own user? if (auth()->check() && false === $isAdmin && $current?->id !== auth()->user()->id) { @@ -107,5 +98,8 @@ class UserUpdateRequest extends FormRequest } } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V1/Requests/User/PreferenceStoreRequest.php b/app/Api/V1/Requests/User/PreferenceStoreRequest.php index 9a4a896682..21be1db0d4 100644 --- a/app/Api/V1/Requests/User/PreferenceStoreRequest.php +++ b/app/Api/V1/Requests/User/PreferenceStoreRequest.php @@ -35,9 +35,6 @@ class PreferenceStoreRequest extends FormRequest use ChecksLogin; use ConvertsDataTypes; - /** - * @return array - */ public function getAll(): array { $array = [ diff --git a/app/Api/V1/Requests/User/PreferenceUpdateRequest.php b/app/Api/V1/Requests/User/PreferenceUpdateRequest.php index cac9397713..3f62c47f87 100644 --- a/app/Api/V1/Requests/User/PreferenceUpdateRequest.php +++ b/app/Api/V1/Requests/User/PreferenceUpdateRequest.php @@ -36,9 +36,6 @@ class PreferenceUpdateRequest extends FormRequest use ChecksLogin; use ConvertsDataTypes; - /** - * @return array - */ public function getAll(): array { $array = [ diff --git a/app/Api/V2/Controllers/Autocomplete/AccountController.php b/app/Api/V2/Controllers/Autocomplete/AccountController.php index 5da7fc8381..46082d4c79 100644 --- a/app/Api/V2/Controllers/Autocomplete/AccountController.php +++ b/app/Api/V2/Controllers/Autocomplete/AccountController.php @@ -32,7 +32,6 @@ use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface as AdminAccountRepositoryInterface; use FireflyIII\Support\Http\Api\AccountFilter; -use http\Env\Response; use Illuminate\Http\JsonResponse; /** @@ -57,7 +56,7 @@ class AccountController extends Controller $this->repository = app(AccountRepositoryInterface::class); $this->adminRepository = app(AdminAccountRepositoryInterface::class); - $userGroup = $this->validateUserGroup($request); + $userGroup = $this->validateUserGroup($request); if (null !== $userGroup) { $this->adminRepository->setUserGroup($userGroup); } @@ -65,7 +64,7 @@ class AccountController extends Controller return $next($request); } ); - $this->balanceTypes = [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE,]; + $this->balanceTypes = [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]; } /** @@ -77,9 +76,6 @@ class AccountController extends Controller * 4. Endpoint is documented. * 5. Collector uses user_group_id * - * @param AutocompleteRequest $request - * - * @return JsonResponse * @throws FireflyException * @throws FireflyException */ @@ -91,8 +87,9 @@ class AccountController extends Controller $date = $this->parameters->get('date') ?? today(config('app.timezone')); $result = $this->adminRepository->searchAccount((string)$query, $types, $data['limit']); $defaultCurrency = app('amount')->getDefaultCurrency(); + $groupedResult = []; + $allItems = []; - $allItems = []; /** @var Account $account */ foreach ($result as $account) { $nameWithBalance = $account->name; @@ -102,12 +99,12 @@ class AccountController extends Controller $balance = app('steam')->balance($account, $date); $nameWithBalance = sprintf('%s (%s)', $account->name, app('amount')->formatAnything($currency, $balance, false)); } - $type = (string)trans(sprintf('firefly.%s', $account->accountType->type)); - $groupedResult[$type] = $groupedResult[$type] ?? [ + $type = (string)trans(sprintf('firefly.%s', $account->accountType->type)); + $groupedResult[$type] ??= [ 'group ' => $type, 'items' => [], ]; - $allItems[] = [ + $allItems[] = [ 'id' => (string)$account->id, 'value' => (string)$account->id, 'name' => $account->name, @@ -124,14 +121,15 @@ class AccountController extends Controller usort( $allItems, - function (array $a, array $b): int { - $order = [AccountType::ASSET, AccountType::REVENUE, AccountType::EXPENSE]; - $pos_a = array_search($a['type'], $order, true); - $pos_b = array_search($b['type'], $order, true); + static function (array $left, array $right): int { + $order = [AccountType::ASSET, AccountType::REVENUE, AccountType::EXPENSE]; + $posLeft = (int)array_search($left['type'], $order, true); + $posRight = (int)array_search($right['type'], $order, true); - return $pos_a - $pos_b; + return $posLeft - $posRight; } ); + return response()->json($allItems); } } diff --git a/app/Api/V2/Controllers/Autocomplete/CategoryController.php b/app/Api/V2/Controllers/Autocomplete/CategoryController.php new file mode 100644 index 0000000000..0df59ffbe2 --- /dev/null +++ b/app/Api/V2/Controllers/Autocomplete/CategoryController.php @@ -0,0 +1,83 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Api\V2\Controllers\Autocomplete; + +use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Api\V2\Request\Autocomplete\AutocompleteRequest; +use FireflyIII\Models\Category; +use FireflyIII\Repositories\UserGroups\Category\CategoryRepositoryInterface; +use Illuminate\Http\JsonResponse; + +/** + * Class CategoryController + */ +class CategoryController extends Controller +{ + private CategoryRepositoryInterface $repository; + + /** + * AccountController constructor. + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(CategoryRepositoryInterface::class); + + $userGroup = $this->validateUserGroup($request); + if (null !== $userGroup) { + $this->repository->setUserGroup($userGroup); + } + + return $next($request); + } + ); + } + + /** + * Documentation for this endpoint: + * TODO list of checks + * 1. use dates from ParameterBag + * 2. Request validates dates + * 3. Request includes user_group_id + * 4. Endpoint is documented. + * 5. Collector uses user_group_id + */ + public function categories(AutocompleteRequest $request): JsonResponse + { + $data = $request->getData(); + $result = $this->repository->searchCategory($data['query'], $this->parameters->get('limit')); + $filtered = $result->map( + static function (Category $item) { + return [ + 'id' => (string)$item->id, + 'name' => $item->name, + ]; + } + ); + + return response()->json($filtered); + } +} diff --git a/app/Api/V2/Controllers/Autocomplete/TagController.php b/app/Api/V2/Controllers/Autocomplete/TagController.php new file mode 100644 index 0000000000..2c977f3bf6 --- /dev/null +++ b/app/Api/V2/Controllers/Autocomplete/TagController.php @@ -0,0 +1,85 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Api\V2\Controllers\Autocomplete; + +use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Api\V2\Request\Autocomplete\AutocompleteRequest; +use FireflyIII\Models\Tag; +use FireflyIII\Repositories\UserGroups\Tag\TagRepositoryInterface; +use Illuminate\Http\JsonResponse; + +/** + * Class TagController + */ +class TagController extends Controller +{ + private TagRepositoryInterface $repository; + + /** + * AccountController constructor. + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(TagRepositoryInterface::class); + + $userGroup = $this->validateUserGroup($request); + if (null !== $userGroup) { + $this->repository->setUserGroup($userGroup); + } + + return $next($request); + } + ); + } + + /** + * Documentation for this endpoint: + * TODO list of checks + * 1. use dates from ParameterBag + * 2. Request validates dates + * 3. Request includes user_group_id + * 4. Endpoint is documented. + * 5. Collector uses user_group_id + */ + public function tags(AutocompleteRequest $request): JsonResponse + { + $data = $request->getData(); + $result = $this->repository->searchTag($data['query'], $data['limit']); + $filtered = $result->map( + static function (Tag $item) { + return [ + 'id' => (string)$item->id, + 'name' => $item->tag, + 'value' => (string)$item->id, + 'label' => $item->tag, + ]; + } + ); + + return response()->json($filtered); + } +} diff --git a/app/Api/V2/Controllers/Autocomplete/TransactionController.php b/app/Api/V2/Controllers/Autocomplete/TransactionController.php index 175e787969..e255adfe1b 100644 --- a/app/Api/V2/Controllers/Autocomplete/TransactionController.php +++ b/app/Api/V2/Controllers/Autocomplete/TransactionController.php @@ -46,7 +46,7 @@ class TransactionController extends Controller function ($request, $next) { $this->repository = app(JournalRepositoryInterface::class); - $userGroup = $this->validateUserGroup($request); + $userGroup = $this->validateUserGroup($request); if (null !== $userGroup) { $this->repository->setUserGroup($userGroup); } @@ -64,14 +64,11 @@ class TransactionController extends Controller * 3. Request includes user_group_id * 4. Endpoint is documented. * 5. Collector uses user_group_id - * - * - * @return JsonResponse */ public function transactionDescriptions(AutocompleteRequest $request): JsonResponse { - $data = $request->getData(); - $result = $this->repository->searchJournalDescriptions($data['query'], $data['limit']); + $data = $request->getData(); + $result = $this->repository->searchJournalDescriptions($data['query'], $data['limit']); // limit and unique $filtered = $result->unique('description'); @@ -88,7 +85,5 @@ class TransactionController extends Controller } return response()->json($array); - } - } diff --git a/app/Api/V2/Controllers/Chart/AccountController.php b/app/Api/V2/Controllers/Chart/AccountController.php index b45fa09e9f..0df13c4e0e 100644 --- a/app/Api/V2/Controllers/Chart/AccountController.php +++ b/app/Api/V2/Controllers/Chart/AccountController.php @@ -26,7 +26,7 @@ namespace FireflyIII\Api\V2\Controllers\Chart; use Carbon\Carbon; use FireflyIII\Api\V2\Controllers\Controller; -use FireflyIII\Api\V2\Request\Generic\DateRequest; +use FireflyIII\Api\V2\Request\Chart\DashboardChartRequest; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; @@ -35,8 +35,7 @@ use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface; use FireflyIII\Support\Http\Api\CleansChartData; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; use Illuminate\Http\JsonResponse; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; +use Illuminate\Support\Collection; /** * Class AccountController @@ -48,9 +47,6 @@ class AccountController extends Controller private AccountRepositoryInterface $repository; - /** - * - */ public function __construct() { parent::__construct(); @@ -78,80 +74,97 @@ class AccountController extends Controller * * TODO validate and set user_group_id from request * - * @param DateRequest $request - * - * @return JsonResponse - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function dashboard(DateRequest $request): JsonResponse + public function dashboard(DashboardChartRequest $request): JsonResponse { /** @var Carbon $start */ - $start = $this->parameters->get('start'); + $start = $this->parameters->get('start'); + /** @var Carbon $end */ - $end = $this->parameters->get('end'); + $end = $this->parameters->get('end'); $end->endOfDay(); - // user's preferences - $defaultSet = $this->repository->getAccountsByType([AccountType::ASSET, AccountType::DEFAULT])->pluck('id')->toArray(); - $frontPage = app('preferences')->get('frontPageAccounts', $defaultSet); /** @var TransactionCurrency $default */ $default = app('amount')->getDefaultCurrency(); - $accounts = $this->repository->getAccountsById($frontPage->data); + $params = $request->getAll(); + + /** @var Collection $accounts */ + $accounts = $params['accounts']; $chartData = []; - if (!(is_array($frontPage->data) && count($frontPage->data) > 0)) { - $frontPage->data = $defaultSet; - $frontPage->save(); + // user's preferences + if (0 === $accounts->count()) { + $defaultSet = $this->repository->getAccountsByType([AccountType::ASSET, AccountType::DEFAULT])->pluck('id')->toArray(); + $frontPage = app('preferences')->get('frontPageAccounts', $defaultSet); + + if (!(is_array($frontPage->data) && count($frontPage->data) > 0)) { + $frontPage->data = $defaultSet; + $frontPage->save(); + } + + $accounts = $this->repository->getAccountsById($frontPage->data); } + + // both options are overruled by "preselected" + if ('all' === $params['preselected']) { + $accounts = $this->repository->getAccountsByType([AccountType::ASSET, AccountType::DEFAULT, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]); + } + if ('assets' === $params['preselected']) { + $accounts = $this->repository->getAccountsByType([AccountType::ASSET, AccountType::DEFAULT]); + } + if ('liabilities' === $params['preselected']) { + $accounts = $this->repository->getAccountsByType([AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]); + } + /** @var Account $account */ foreach ($accounts as $account) { - $currency = $this->repository->getAccountCurrency($account); + $currency = $this->repository->getAccountCurrency($account); if (null === $currency) { $currency = $default; } - $currentSet = [ - 'label' => $account->name, + $currentSet = [ + 'label' => $account->name, // the currency that belongs to the account. - 'currency_id' => (string)$currency->id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => $currency->decimal_places, + 'currency_id' => (string)$currency->id, + 'currency_code' => $currency->code, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, // the default currency of the user (could be the same!) - 'native_id' => (string)$default->id, - 'native_code' => $default->code, - 'native_symbol' => $default->symbol, - 'native_decimal_places' => (int)$default->decimal_places, - 'start' => $start->toAtomString(), - 'end' => $end->toAtomString(), - 'period' => '1D', - 'entries' => [], - 'native_entries' => [], + 'native_currency_id' => (string)$default->id, + 'native_currency_code' => $default->code, + 'native_currency_symbol' => $default->symbol, + 'native_currency_decimal_places' => $default->decimal_places, + 'start' => $start->toAtomString(), + 'end' => $end->toAtomString(), + 'period' => '1D', + 'entries' => [], + 'native_entries' => [], ]; - $currentStart = clone $start; - $range = app('steam')->balanceInRange($account, $start, clone $end, $currency); - $rangeConverted = app('steam')->balanceInRangeConverted($account, $start, clone $end, $default); + $currentStart = clone $start; + $range = app('steam')->balanceInRange($account, $start, clone $end, $currency); + $rangeConverted = app('steam')->balanceInRangeConverted($account, $start, clone $end, $default); $previous = array_values($range)[0]; $previousConverted = array_values($rangeConverted)[0]; while ($currentStart <= $end) { - $format = $currentStart->format('Y-m-d'); - $label = $currentStart->toAtomString(); - $balance = array_key_exists($format, $range) ? $range[$format] : $previous; - $balanceConverted = array_key_exists($format, $rangeConverted) ? $rangeConverted[$format] : $previousConverted; - $previous = $balance; - $previousConverted = $balanceConverted; + $format = $currentStart->format('Y-m-d'); + $label = $currentStart->toAtomString(); + $balance = array_key_exists($format, $range) ? $range[$format] : $previous; + $balanceConverted = array_key_exists($format, $rangeConverted) ? $rangeConverted[$format] : $previousConverted; + $previous = $balance; + $previousConverted = $balanceConverted; $currentStart->addDay(); $currentSet['entries'][$label] = $balance; $currentSet['native_entries'][$label] = $balanceConverted; } - $chartData[] = $currentSet; + $chartData[] = $currentSet; } return response()->json($this->clean($chartData)); } - } diff --git a/app/Api/V2/Controllers/Chart/BalanceController.php b/app/Api/V2/Controllers/Chart/BalanceController.php index 8ba070f627..a35e4c8480 100644 --- a/app/Api/V2/Controllers/Chart/BalanceController.php +++ b/app/Api/V2/Controllers/Chart/BalanceController.php @@ -1,6 +1,5 @@ middleware( - function ($request, $next) { - $this->repository = app(AccountRepositoryInterface::class); - - return $next($request); - } - ); - } - /** * The code is practically a duplicate of ReportController::operations. * @@ -74,189 +55,47 @@ class BalanceController extends Controller * TODO validate and set user_group_id * TODO collector set group, not user * - * @param BalanceChartRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function balance(BalanceChartRequest $request): JsonResponse { - $params = $request->getAll(); + $params = $request->getAll(); + /** @var Carbon $start */ - $start = $this->parameters->get('start'); + $start = $this->parameters->get('start'); + /** @var Carbon $end */ - $end = $this->parameters->get('end'); + $end = $this->parameters->get('end'); $end->endOfDay(); + /** @var Collection $accounts */ $accounts = $params['accounts']; + + /** @var string $preferredRange */ $preferredRange = $params['period']; - // set some formats, based on input parameters. - $format = app('navigation')->preferredCarbonFormatByPeriod($preferredRange); - // prepare for currency conversion and data collection: - $ids = $accounts->pluck('id')->toArray(); /** @var TransactionCurrency $default */ - $default = app('amount')->getDefaultCurrency(); - $converter = new ExchangeRateConverter(); - $currencies = [(int)$default->id => $default,]; // currency cache - $data = []; - $chartData = []; + $default = app('amount')->getDefaultCurrency(); // get journals for entire period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->withAccountInformation(); $collector->setXorAccounts($accounts); $collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::RECONCILIATION, TransactionType::TRANSFER]); - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); - // set array for default currency (even if unused later on) - $defaultCurrencyId = (int)$default->id; - $data[$defaultCurrencyId] = [ - 'currency_id' => (string)$defaultCurrencyId, - 'currency_symbol' => $default->symbol, - 'currency_code' => $default->code, - 'currency_name' => $default->name, - 'currency_decimal_places' => (int)$default->decimal_places, - 'native_id' => (string)$defaultCurrencyId, - 'native_symbol' => $default->symbol, - 'native_code' => $default->code, - 'native_name' => $default->name, - 'native_decimal_places' => (int)$default->decimal_places, - ]; + $object = new AccountBalanceGrouped(); + $object->setPreferredRange($preferredRange); + $object->setDefault($default); + $object->setAccounts($accounts); + $object->setJournals($journals); + $object->setStart($start); + $object->setEnd($end); + $object->groupByCurrencyAndPeriod(); + $chartData = $object->convertToChartData(); - - // loop. group by currency and by period. - /** @var array $journal */ - foreach ($journals as $journal) { - // format the date according to the period - $period = $journal['date']->format($format); - - // collect (and cache) currency information for this journal. - $currencyId = (int)$journal['currency_id']; - $currency = $currencies[$currencyId] ?? TransactionCurrency::find($currencyId); - $currencies[$currencyId] = $currency; // may just re-assign itself, don't mind. - - // set the array with monetary info, if it does not exist. - $data[$currencyId] = $data[$currencyId] ?? [ - 'currency_id' => (string)$currencyId, - 'currency_symbol' => $journal['currency_symbol'], - 'currency_code' => $journal['currency_code'], - 'currency_name' => $journal['currency_name'], - 'currency_decimal_places' => $journal['currency_decimal_places'], - // native currency info (could be the same) - 'native_id' => (string)$default->id, - 'native_code' => $default->code, - 'native_symbol' => $default->symbol, - 'native_decimal_places' => (int)$default->decimal_places, - ]; - - // set the array (in monetary info) with spent/earned in this $period, if it does not exist. - $data[$currencyId][$period] = $data[$currencyId][$period] ?? [ - 'period' => $period, - 'spent' => '0', - 'earned' => '0', - 'native_spent' => '0', - 'native_earned' => '0', - ]; - // is this journal's amount in- our outgoing? - $key = 'spent'; - $amount = app('steam')->negative($journal['amount']); - // deposit = incoming - // transfer or reconcile or opening balance, and these accounts are the destination. - if ( - TransactionType::DEPOSIT === $journal['transaction_type_type'] - || - - ( - ( - TransactionType::TRANSFER === $journal['transaction_type_type'] - || TransactionType::RECONCILIATION === $journal['transaction_type_type'] - || TransactionType::OPENING_BALANCE === $journal['transaction_type_type'] - ) - && in_array($journal['destination_account_id'], $ids, true) - ) - ) { - $key = 'earned'; - $amount = app('steam')->positive($journal['amount']); - } - // get conversion rate - $rate = $converter->getCurrencyRate($currency, $default, $journal['date']); - $amountConverted = bcmul($amount, $rate); - - // perhaps transaction already has the foreign amount in the native currency. - if ((int)$journal['foreign_currency_id'] === (int)$default->id) { - $amountConverted = $journal['foreign_amount'] ?? '0'; - $amountConverted = 'earned' === $key ? app('steam')->positive($amountConverted) : app('steam')->negative($amountConverted); - } - - // add normal entry - $data[$currencyId][$period][$key] = bcadd($data[$currencyId][$period][$key], $amount); - - // add converted entry - $convertedKey = sprintf('native_%s', $key); - $data[$currencyId][$period][$convertedKey] = bcadd($data[$currencyId][$period][$convertedKey], $amountConverted); - } - - // loop this data, make chart bars for each currency: - /** @var array $currency */ - foreach ($data as $currency) { - // income and expense array prepped: - $income = [ - 'label' => 'earned', - 'currency_id' => (string)$currency['currency_id'], - 'currency_symbol' => $currency['currency_symbol'], - 'currency_code' => $currency['currency_code'], - 'currency_decimal_places' => $currency['currency_decimal_places'], - 'native_id' => (string)$currency['native_id'], - 'native_symbol' => $currency['native_symbol'], - 'native_code' => $currency['native_code'], - 'native_decimal_places' => $currency['native_decimal_places'], - 'start' => $start->toAtomString(), - 'end' => $end->toAtomString(), - 'period' => $preferredRange, - 'entries' => [], - 'native_entries' => [], - ]; - $expense = [ - 'label' => 'spent', - 'currency_id' => (string)$currency['currency_id'], - 'currency_symbol' => $currency['currency_symbol'], - 'currency_code' => $currency['currency_code'], - 'currency_decimal_places' => $currency['currency_decimal_places'], - 'native_id' => (string)$currency['native_id'], - 'native_symbol' => $currency['native_symbol'], - 'native_code' => $currency['native_code'], - 'native_decimal_places' => $currency['native_decimal_places'], - 'start' => $start->toAtomString(), - 'end' => $end->toAtomString(), - 'period' => $preferredRange, - 'entries' => [], - 'native_entries' => [], - - ]; - // loop all possible periods between $start and $end, and add them to the correct dataset. - $currentStart = clone $start; - while ($currentStart <= $end) { - $key = $currentStart->format($format); - $label = $currentStart->toAtomString(); - // normal entries - $income['entries'][$label] = app('steam')->bcround(($currency[$key]['earned'] ?? '0'), $currency['currency_decimal_places']); - $expense['entries'][$label] = app('steam')->bcround(($currency[$key]['spent'] ?? '0'), $currency['currency_decimal_places']); - - // converted entries - $income['native_entries'][$label] = app('steam')->bcround(($currency[$key]['native_earned'] ?? '0'), $currency['native_decimal_places']); - $expense['native_entries'][$label] = app('steam')->bcround(($currency[$key]['native_spent'] ?? '0'), $currency['native_decimal_places']); - - // next loop - $currentStart = app('navigation')->addPeriod($currentStart, $preferredRange, 0); - } - - $chartData[] = $income; - $chartData[] = $expense; - } return response()->json($this->clean($chartData)); } - } diff --git a/app/Api/V2/Controllers/Chart/BudgetController.php b/app/Api/V2/Controllers/Chart/BudgetController.php index 39008f0106..72987816f4 100644 --- a/app/Api/V2/Controllers/Chart/BudgetController.php +++ b/app/Api/V2/Controllers/Chart/BudgetController.php @@ -1,6 +1,5 @@ opsRepository = app(OperationsRepositoryInterface::class); $this->currency = app('amount')->getDefaultCurrency(); - $userGroup = $this->validateUserGroup($request); + $userGroup = $this->validateUserGroup($request); if (null !== $userGroup) { $this->repository->setUserGroup($userGroup); $this->opsRepository->setUserGroup($userGroup); @@ -78,38 +77,32 @@ class BudgetController extends Controller } /** - * @param DateRequest $request - * * TODO see autocomplete/accountcontroller - * - * @return JsonResponse - * @throws FireflyException */ public function dashboard(DateRequest $request): JsonResponse { - $params = $request->getAll(); + $params = $request->getAll(); + /** @var Carbon $start */ - $start = $params['start']; + $start = $params['start']; + /** @var Carbon $end */ - $end = $params['end']; + $end = $params['end']; // code from FrontpageChartGenerator, but not in separate class $budgets = $this->repository->getActiveBudgets(); $data = []; + /** @var Budget $budget */ foreach ($budgets as $budget) { // could return multiple arrays, so merge. $data = array_merge($data, $this->processBudget($budget, $start, $end)); } + return response()->json($this->clean($data)); } /** - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException */ private function processBudget(Budget $budget, Carbon $start, Carbon $end): array @@ -130,24 +123,24 @@ class BudgetController extends Controller $return = []; foreach ($rows as $row) { $current = [ - 'label' => $budget->name, - 'currency_id' => (string)$row['currency_id'], - 'currency_code' => $row['currency_code'], - 'currency_name' => $row['currency_name'], - 'currency_decimal_places' => $row['currency_decimal_places'], - 'native_id' => (string)$row['native_id'], - 'native_code' => $row['native_code'], - 'native_name' => $row['native_name'], - 'native_decimal_places' => $row['native_decimal_places'], - 'period' => null, - 'start' => $row['start'], - 'end' => $row['end'], - 'entries' => [ + 'label' => $budget->name, + 'currency_id' => (string)$row['currency_id'], + 'currency_code' => $row['currency_code'], + 'currency_name' => $row['currency_name'], + 'currency_decimal_places' => $row['currency_decimal_places'], + 'native_currency_id' => (string)$row['native_currency_id'], + 'native_currency_code' => $row['native_currency_code'], + 'native_currency_name' => $row['native_currency_name'], + 'native_currency_decimal_places' => $row['native_currency_decimal_places'], + 'period' => null, + 'start' => $row['start'], + 'end' => $row['end'], + 'entries' => [ 'spent' => $row['spent'], 'left' => $row['left'], 'overspent' => $row['overspent'], ], - 'native_entries' => [ + 'native_entries' => [ 'spent' => $row['native_spent'], 'left' => $row['native_left'], 'overspent' => $row['native_overspent'], @@ -155,6 +148,7 @@ class BudgetController extends Controller ]; $return[] = $current; } + return $return; } @@ -162,33 +156,26 @@ class BudgetController extends Controller * When no budget limits are present, the expenses of the whole period are collected and grouped. * This is grouped per currency. Because there is no limit set, "left to spend" and "overspent" are empty. * - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException */ private function noBudgetLimits(Budget $budget, Carbon $start, Carbon $end): array { - $budgetId = (int)$budget->id; - $spent = $this->opsRepository->listExpenses($start, $end, null, new Collection([$budget])); - return $this->processExpenses($budgetId, $spent, $start, $end); + $spent = $this->opsRepository->listExpenses($start, $end, null, new Collection([$budget])); + + return $this->processExpenses($budget->id, $spent, $start, $end); } /** - * Shared between the "noBudgetLimits" function and "processLimit". + * Shared between the "noBudgetLimits" function and "processLimit". Will take a single set of expenses and return + * its info. * - * Will take a single set of expenses and return its info. + * @param array> $array * - * @param int $budgetId - * @param array $array - * - * @return array * @throws FireflyException */ private function processExpenses(int $budgetId, array $array, Carbon $start, Carbon $end): array { + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); $converter = new ExchangeRateConverter(); $return = []; @@ -200,36 +187,35 @@ class BudgetController extends Controller * @var array $block */ foreach ($array as $currencyId => $block) { - $this->currencies[$currencyId] = $this->currencies[$currencyId] ?? TransactionCurrency::find($currencyId); - $return[$currencyId] = $return[$currencyId] ?? [ - 'currency_id' => (string)$currencyId, - 'currency_code' => $block['currency_code'], - 'currency_name' => $block['currency_name'], - 'currency_symbol' => $block['currency_symbol'], - 'currency_decimal_places' => (int)$block['currency_decimal_places'], - 'native_id' => (string)$this->currency->id, - 'native_code' => $this->currency->code, - 'native_name' => $this->currency->name, - 'native_symbol' => $this->currency->symbol, - 'native_decimal_places' => (int)$this->currency->decimal_places, - 'start' => $start->toAtomString(), - 'end' => $end->toAtomString(), - 'spent' => '0', - 'native_spent' => '0', - 'left' => '0', - 'native_left' => '0', - 'overspent' => '0', - 'native_overspent' => '0', - + $this->currencies[$currencyId] ??= TransactionCurrency::find($currencyId); + $return[$currencyId] ??= [ + 'currency_id' => (string)$currencyId, + 'currency_code' => $block['currency_code'], + 'currency_name' => $block['currency_name'], + 'currency_symbol' => $block['currency_symbol'], + 'currency_decimal_places' => (int)$block['currency_decimal_places'], + 'native_currency_id' => (string)$this->currency->id, + 'native_currency_code' => $this->currency->code, + 'native_currency_name' => $this->currency->name, + 'native_currency_symbol' => $this->currency->symbol, + 'native_currency_decimal_places' => $this->currency->decimal_places, + 'start' => $start->toAtomString(), + 'end' => $end->toAtomString(), + 'spent' => '0', + 'native_spent' => '0', + 'left' => '0', + 'native_left' => '0', + 'overspent' => '0', + 'native_overspent' => '0', ]; - $currentBudgetArray = $block['budgets'][$budgetId]; - //var_dump($return); + $currentBudgetArray = $block['budgets'][$budgetId]; + + // var_dump($return); /** @var array $journal */ foreach ($currentBudgetArray['transaction_journals'] as $journal) { - // convert the amount to the native currency. - $rate = $converter->getCurrencyRate($this->currencies[$currencyId], $this->currency, $journal['date']); - $convertedAmount = bcmul($journal['amount'], $rate); + $rate = $converter->getCurrencyRate($this->currencies[$currencyId], $this->currency, $journal['date']); + $convertedAmount = bcmul($journal['amount'], $rate); if ($journal['foreign_currency_id'] === $this->currency->id) { $convertedAmount = $journal['foreign_amount']; } @@ -238,6 +224,8 @@ class BudgetController extends Controller $return[$currencyId]['native_spent'] = bcadd($return[$currencyId]['native_spent'], $convertedAmount); } } + $converter->summarize(); + return $return; } @@ -249,16 +237,13 @@ class BudgetController extends Controller * * If you have a budget limit in EUR, and a transaction in GBP, it will not be considered for the EUR budget limit. * - * @param Budget $budget - * @param Collection $limits - * - * @return array * @throws FireflyException */ private function budgetLimits(Budget $budget, Collection $limits): array { app('log')->debug(sprintf('Now in budgetLimits(#%d)', $budget->id)); $data = []; + /** @var BudgetLimit $limit */ foreach ($limits as $limit) { $data = array_merge($data, $this->processLimit($budget, $limit)); @@ -268,26 +253,21 @@ class BudgetController extends Controller } /** - * @param Budget $budget - * @param BudgetLimit $limit - * - * @return array * @throws FireflyException */ private function processLimit(Budget $budget, BudgetLimit $limit): array { - $budgetId = (int)$budget->id; - $end = clone $limit->end_date; + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); + $end = clone $limit->end_date; $end->endOfDay(); $spent = $this->opsRepository->listExpenses($limit->start_date, $end, null, new Collection([$budget])); - $limitCurrencyId = (int)$limit->transaction_currency_id; + $limitCurrencyId = $limit->transaction_currency_id; $limitCurrency = $limit->transactionCurrency; $converter = new ExchangeRateConverter(); $filtered = []; $rate = $converter->getCurrencyRate($limitCurrency, $this->currency, $limit->start_date); $convertedLimitAmount = bcmul($limit->amount, $rate); - /** @var array $entry */ foreach ($spent as $currencyId => $entry) { // only spent the entry where the entry's currency matches the budget limit's currency @@ -296,9 +276,9 @@ class BudgetController extends Controller $filtered[$currencyId] = $entry; } } - $result = $this->processExpenses($budgetId, $filtered, $limit->start_date, $end); + $result = $this->processExpenses($budget->id, $filtered, $limit->start_date, $end); if (1 === count($result)) { - $compare = bccomp((string)$limit->amount, app('steam')->positive($result[$limitCurrencyId]['spent'])); + $compare = bccomp($limit->amount, app('steam')->positive($result[$limitCurrencyId]['spent'])); if (1 === $compare) { // convert this amount into the native currency: $result[$limitCurrencyId]['left'] = bcadd($limit->amount, $result[$limitCurrencyId]['spent']); @@ -309,8 +289,8 @@ class BudgetController extends Controller $result[$limitCurrencyId]['native_overspent'] = app('steam')->positive(bcadd($convertedLimitAmount, $result[$limitCurrencyId]['native_spent'])); } } + $converter->summarize(); + return $result; } - - } diff --git a/app/Api/V2/Controllers/Chart/CategoryController.php b/app/Api/V2/Controllers/Chart/CategoryController.php index 0ca99d6c36..09124d9a8c 100644 --- a/app/Api/V2/Controllers/Chart/CategoryController.php +++ b/app/Api/V2/Controllers/Chart/CategoryController.php @@ -1,6 +1,5 @@ accountRepos->setUserGroup($userGroup); } + return $next($request); } ); @@ -70,15 +71,17 @@ class CategoryController extends Controller * TODO may be worth to move to a handler but the data is simple enough. * TODO see autoComplete/account controller * - * @param DateRequest $request - * - * @return JsonResponse * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function dashboard(DateRequest $request): JsonResponse { + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); + /** @var Carbon $start */ - $start = $this->parameters->get('start'); + $start = $this->parameters->get('start'); + /** @var Carbon $end */ $end = $this->parameters->get('end'); $accounts = $this->accountRepos->getAccountsByType([AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::ASSET, AccountType::DEFAULT]); @@ -89,56 +92,56 @@ class CategoryController extends Controller // get journals for entire period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->withAccountInformation(); $collector->setXorAccounts($accounts)->withCategoryInformation(); $collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::RECONCILIATION]); - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); /** @var array $journal */ foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $currency = $currencies[$currencyId] ?? $this->currencyRepos->find($currencyId); - $currencies[$currencyId] = $currency; - $categoryName = null === $journal['category_name'] ? (string)trans('firefly.no_category') : $journal['category_name']; - $amount = app('steam')->positive($journal['amount']); - $nativeAmount = $converter->convert($default, $currency, $journal['date'], $amount); - $key = sprintf('%s-%s', $categoryName, $currency->code); - if ((int)$journal['foreign_currency_id'] === (int)$default->id) { + $currencyId = (int)$journal['currency_id']; + $currency = $currencies[$currencyId] ?? $this->currencyRepos->find($currencyId); + $currencies[$currencyId] = $currency; + $categoryName = null === $journal['category_name'] ? (string)trans('firefly.no_category') : $journal['category_name']; + $amount = app('steam')->positive($journal['amount']); + $nativeAmount = $converter->convert($default, $currency, $journal['date'], $amount); + $key = sprintf('%s-%s', $categoryName, $currency->code); + if ((int)$journal['foreign_currency_id'] === $default->id) { $nativeAmount = app('steam')->positive($journal['foreign_amount']); } // create arrays - $return[$key] = $return[$key] ?? [ - 'label' => $categoryName, - 'currency_id' => (string)$currency->id, - 'currency_code' => $currency->code, - 'currency_name' => $currency->name, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, - 'native_id' => (string)$default->id, - 'native_code' => $default->code, - 'native_name' => $default->name, - 'native_symbol' => $default->symbol, - 'native_decimal_places' => (int)$default->decimal_places, - 'period' => null, - 'start' => $start->toAtomString(), - 'end' => $end->toAtomString(), - 'amount' => '0', - 'native_amount' => '0', + $return[$key] ??= [ + 'label' => $categoryName, + 'currency_id' => (string)$currency->id, + 'currency_code' => $currency->code, + 'currency_name' => $currency->name, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, + 'native_currency_id' => (string)$default->id, + 'native_currency_code' => $default->code, + 'native_currency_name' => $default->name, + 'native_currency_symbol' => $default->symbol, + 'native_currency_decimal_places' => $default->decimal_places, + 'period' => null, + 'start' => $start->toAtomString(), + 'end' => $end->toAtomString(), + 'amount' => '0', + 'native_amount' => '0', ]; - // add monies $return[$key]['amount'] = bcadd($return[$key]['amount'], $amount); $return[$key]['native_amount'] = bcadd($return[$key]['native_amount'], $nativeAmount); } - $return = array_values($return); + $return = array_values($return); // order by native amount - usort($return, function (array $a, array $b) { + usort($return, static function (array $a, array $b) { return (float)$a['native_amount'] < (float)$b['native_amount'] ? 1 : -1; }); + $converter->summarize(); + return response()->json($this->clean($return)); } - } diff --git a/app/Api/V2/Controllers/Controller.php b/app/Api/V2/Controllers/Controller.php index 6783b2e812..99f30570d0 100644 --- a/app/Api/V2/Controllers/Controller.php +++ b/app/Api/V2/Controllers/Controller.php @@ -33,7 +33,6 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Routing\Controller as BaseController; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; @@ -46,17 +45,17 @@ use Symfony\Component\HttpFoundation\ParameterBag; /** * Class Controller + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings(PHPMD.NumberOfChildren) */ class Controller extends BaseController { use ValidatesUserGroupTrait; - protected const CONTENT_TYPE = 'application/vnd.api+json'; + protected const string CONTENT_TYPE = 'application/vnd.api+json'; protected ParameterBag $parameters; - /** - * - */ public function __construct() { $this->middleware( @@ -66,22 +65,22 @@ class Controller extends BaseController return $next($request); } ); - } /** * TODO duplicate from V1 controller * Method to grab all parameters from the URL. * - * @return ParameterBag + * @SuppressWarnings(PHPMD.NPathComplexity) */ private function getParameters(): ParameterBag { - $bag = new ParameterBag(); + $bag = new ParameterBag(); $bag->set('limit', 50); + try { $page = (int)request()->get('page'); - } catch (ContainerExceptionInterface | NotFoundExceptionInterface $e) { + } catch (ContainerExceptionInterface|NotFoundExceptionInterface $e) { $page = 1; } @@ -100,19 +99,20 @@ class Controller extends BaseController foreach ($dates as $field) { $date = null; $obj = null; + try { $date = request()->query->get($field); } catch (BadRequestException $e) { - Log::error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $field)); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $field)); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } if (null !== $date) { try { - $obj = Carbon::parse($date, config('app.timezone')); - } catch (InvalidDateException | InvalidFormatException $e) { + $obj = Carbon::parse((string)$date, config('app.timezone')); + } catch (InvalidDateException|InvalidFormatException $e) { // don't care - app('log')->warning(sprintf('Ignored invalid date "%s" in API v2 controller parameter check: %s', substr($date, 0, 20), $e->getMessage())); + app('log')->warning(sprintf('Ignored invalid date "%s" in API v2 controller parameter check: %s', substr((string)$date, 0, 20), $e->getMessage())); } // out of range? set to null. if (null !== $obj && ($obj->year <= 1900 || $obj->year > 2099)) { @@ -128,8 +128,8 @@ class Controller extends BaseController try { $value = request()->query->get($integer); } catch (BadRequestException $e) { - Log::error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $integer)); - Log::error($e->getMessage()); + app('log')->error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $integer)); + app('log')->error($e->getMessage()); $value = null; } if (null !== $value) { @@ -148,20 +148,13 @@ class Controller extends BaseController return $bag; } - /** - * @param string $key - * @param LengthAwarePaginator $paginator - * @param AbstractTransformer $transformer - * - * @return array - */ final protected function jsonApiList(string $key, LengthAwarePaginator $paginator, AbstractTransformer $transformer): array { - $manager = new Manager(); - $baseUrl = request()->getSchemeAndHttpHost() . '/api/v2'; + $manager = new Manager(); + $baseUrl = request()->getSchemeAndHttpHost().'/api/v2'; $manager->setSerializer(new JsonApiSerializer($baseUrl)); - $objects = $paginator->getCollection(); + $objects = $paginator->getCollection(); // the transformer, at this point, needs to collect information that ALL items in the collection // require, like meta-data and stuff like that, and save it for later. @@ -176,17 +169,13 @@ class Controller extends BaseController /** * Returns a JSON API object and returns it. * - * @param string $key - * @param Model $object - * @param AbstractTransformer $transformer - * - * @return array + * @param array|Model $object */ - final protected function jsonApiObject(string $key, array | Model $object, AbstractTransformer $transformer): array + final protected function jsonApiObject(string $key, array|Model $object, AbstractTransformer $transformer): array { // create some objects: - $manager = new Manager(); - $baseUrl = request()->getSchemeAndHttpHost() . '/api/v2'; + $manager = new Manager(); + $baseUrl = request()->getSchemeAndHttpHost().'/api/v2'; $manager->setSerializer(new JsonApiSerializer($baseUrl)); $transformer->collectMetaData(new Collection([$object])); diff --git a/app/Api/V2/Controllers/Data/Bulk/AccountController.php b/app/Api/V2/Controllers/Data/Bulk/AccountController.php index d869b8843f..3dbfd0343d 100644 --- a/app/Api/V2/Controllers/Data/Bulk/AccountController.php +++ b/app/Api/V2/Controllers/Data/Bulk/AccountController.php @@ -29,6 +29,4 @@ use FireflyIII\Api\V2\Controllers\Controller; /** * Class AccountController */ -class AccountController extends Controller -{ -} +class AccountController extends Controller {} diff --git a/app/Api/V2/Controllers/Data/Export/AccountController.php b/app/Api/V2/Controllers/Data/Export/AccountController.php index 3787530d57..4526f0f399 100644 --- a/app/Api/V2/Controllers/Data/Export/AccountController.php +++ b/app/Api/V2/Controllers/Data/Export/AccountController.php @@ -29,6 +29,4 @@ use FireflyIII\Api\V2\Controllers\Controller; /** * Class AccountController */ -class AccountController extends Controller -{ -} +class AccountController extends Controller {} diff --git a/app/Api/V2/Controllers/Data/MassDestroy/AccountController.php b/app/Api/V2/Controllers/Data/MassDestroy/AccountController.php index 51c18b60fe..6d11f3473e 100644 --- a/app/Api/V2/Controllers/Data/MassDestroy/AccountController.php +++ b/app/Api/V2/Controllers/Data/MassDestroy/AccountController.php @@ -29,6 +29,4 @@ use FireflyIII\Api\V2\Controllers\Controller; /** * Class AccountController */ -class AccountController extends Controller -{ -} +class AccountController extends Controller {} diff --git a/app/Api/V2/Controllers/Model/Account/ShowController.php b/app/Api/V2/Controllers/Model/Account/ShowController.php index 8f62d0b94d..e6c43c7cf1 100644 --- a/app/Api/V2/Controllers/Model/Account/ShowController.php +++ b/app/Api/V2/Controllers/Model/Account/ShowController.php @@ -28,9 +28,10 @@ use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Models\Account; use FireflyIII\Transformers\V2\AccountTransformer; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; /** + * Show = show a single account. + * Index = show all accounts * Class ShowController */ class ShowController extends Controller @@ -38,13 +39,14 @@ class ShowController extends Controller /** * TODO this endpoint is not yet reachable. */ - public function show(Request $request, Account $account): JsonResponse + public function show(Account $account): JsonResponse { $transformer = new AccountTransformer(); $transformer->setParameters($this->parameters); return response() ->api($this->jsonApiObject('accounts', $account, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } } diff --git a/app/Api/V2/Controllers/Model/Bill/IndexController.php b/app/Api/V2/Controllers/Model/Bill/IndexController.php new file mode 100644 index 0000000000..3ddc846b36 --- /dev/null +++ b/app/Api/V2/Controllers/Model/Bill/IndexController.php @@ -0,0 +1,80 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Api\V2\Controllers\Model\Bill; + +use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface; +use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; +use FireflyIII\Transformers\V2\BillTransformer; +use Illuminate\Http\JsonResponse; +use Illuminate\Pagination\LengthAwarePaginator; + +/** + * Class ShowController + */ +class IndexController extends Controller +{ + use ValidatesUserGroupTrait; + + private BillRepositoryInterface $repository; + + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(BillRepositoryInterface::class); + + // new way of user group validation + $userGroup = $this->validateUserGroup($request); + if (null !== $userGroup) { + $this->repository->setUserGroup($userGroup); + } + + return $next($request); + } + ); + } + + /** + * TODO see autocomplete/accountcontroller for list. + */ + public function index(): JsonResponse + { + $this->repository->correctOrder(); + $bills = $this->repository->getBills(); + $pageSize = $this->parameters->get('limit'); + $count = $bills->count(); + $bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); + $transformer = new BillTransformer(); + $transformer->setParameters($this->parameters); // give params to transformer + + return response() + ->json($this->jsonApiList('subscriptions', $paginator, $transformer)) + ->header('Content-Type', self::CONTENT_TYPE) + ; + } +} diff --git a/app/Api/V2/Controllers/Model/Bill/ShowController.php b/app/Api/V2/Controllers/Model/Bill/ShowController.php index 6c2793fa1c..db6d59e420 100644 --- a/app/Api/V2/Controllers/Model/Bill/ShowController.php +++ b/app/Api/V2/Controllers/Model/Bill/ShowController.php @@ -1,6 +1,5 @@ repository = app(BillRepositoryInterface::class); // new way of user group validation - $userGroup = $this->validateUserGroup($request); + $userGroup = $this->validateUserGroup($request); if (null !== $userGroup) { $this->repository->setUserGroup($userGroup); } @@ -63,39 +58,17 @@ class ShowController extends Controller ); } - /** - * @param Request $request - * - * TODO see autocomplete/accountcontroller for list. - * - * @return JsonResponse - */ - public function index(Request $request): JsonResponse - { - $this->repository->correctOrder(); - $bills = $this->repository->getBills(); - $pageSize = $this->parameters->get('limit'); - $count = $bills->count(); - $bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); - $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); - $transformer = new BillTransformer(); - $transformer->setParameters($this->parameters); // give params to transformer - - return response() - ->json($this->jsonApiList('subscriptions', $paginator, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); - } - /** * TODO this endpoint is not documented */ - public function show(Request $request, Bill $bill): JsonResponse + public function show(Bill $bill): JsonResponse { $transformer = new BillTransformer(); $transformer->setParameters($this->parameters); return response() ->api($this->jsonApiObject('subscriptions', $bill, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } } diff --git a/app/Api/V2/Controllers/Model/Bill/SumController.php b/app/Api/V2/Controllers/Model/Bill/SumController.php index 782cd940c6..76dd2dca96 100644 --- a/app/Api/V2/Controllers/Model/Bill/SumController.php +++ b/app/Api/V2/Controllers/Model/Bill/SumController.php @@ -26,7 +26,6 @@ namespace FireflyIII\Api\V2\Controllers\Model\Bill; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Request\Generic\DateRequest; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; use Illuminate\Http\JsonResponse; @@ -40,9 +39,6 @@ class SumController extends Controller private BillRepositoryInterface $repository; - /** - * - */ public function __construct() { parent::__construct(); @@ -50,12 +46,11 @@ class SumController extends Controller function ($request, $next) { $this->repository = app(BillRepositoryInterface::class); - $userGroup = $this->validateUserGroup($request); + $userGroup = $this->validateUserGroup($request); if (null !== $userGroup) { $this->repository->setUserGroup($userGroup); } - return $next($request); } ); @@ -67,9 +62,7 @@ class SumController extends Controller * * TODO see autocomplete/accountcontroller for list. * - * @param DateRequest $request - * - * @return JsonResponse + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function paid(DateRequest $request): JsonResponse { @@ -85,9 +78,7 @@ class SumController extends Controller * * TODO see autocomplete/accountcontroller for list. * - * @param DateRequest $request - * - * @return JsonResponse + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function unpaid(DateRequest $request): JsonResponse { diff --git a/app/Api/V2/Controllers/Model/Budget/ListController.php b/app/Api/V2/Controllers/Model/Budget/IndexController.php similarity index 75% rename from app/Api/V2/Controllers/Model/Budget/ListController.php rename to app/Api/V2/Controllers/Model/Budget/IndexController.php index b7bbaff1c7..a1b7ab41c6 100644 --- a/app/Api/V2/Controllers/Model/Budget/ListController.php +++ b/app/Api/V2/Controllers/Model/Budget/IndexController.php @@ -28,13 +28,12 @@ use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Transformers\V2\BudgetTransformer; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; /** - * Class ListController + * Class IndexController */ -class ListController extends Controller +class IndexController extends Controller { private BudgetRepositoryInterface $repository; @@ -53,24 +52,20 @@ class ListController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v2)#/budgets/listBudgets - * - * @param Request $request - * - * @return JsonResponse */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - echo 'this needs move to Administration'; - exit; - $collection = $this->repository->getActiveBudgets(); - $total = $collection->count(); - $collection->slice($this->pageXSize * $this->parameters->get('page'), $this->pXageSize); + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getActiveBudgets(); + $total = $collection->count(); + $collection->slice($pageSize * $this->parameters->get('page'), $pageSize); - $paginator = new LengthAwarePaginator($collection, $total, $this->pagXeSize, $this->parameters->get('page')); + $paginator = new LengthAwarePaginator($collection, $total, $pageSize, $this->parameters->get('page')); $transformer = new BudgetTransformer(); return response() ->api($this->jsonApiList('budgets', $paginator, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } } diff --git a/app/Api/V2/Controllers/Model/Budget/ShowController.php b/app/Api/V2/Controllers/Model/Budget/ShowController.php index 70a0490b45..6e5f9499c1 100644 --- a/app/Api/V2/Controllers/Model/Budget/ShowController.php +++ b/app/Api/V2/Controllers/Model/Budget/ShowController.php @@ -1,6 +1,5 @@ getAll(); - $result = $this->repository->budgetedInPeriodForBudget($budget, $data['start'], $data['end']); - $converted = $this->cerSum(array_values($result)); + $data = $request->getAll(); + $result = $this->repository->budgetedInPeriodForBudget($budget, $data['start'], $data['end']); - return response()->json($converted); + return response()->json($result); + } + + /** + * Show a budget. + */ + public function show(Budget $budget): JsonResponse + { + $transformer = new BudgetTransformer(); + $transformer->setParameters($this->parameters); + + return response() + ->api($this->jsonApiObject('budgets', $budget, $transformer)) + ->header('Content-Type', self::CONTENT_TYPE) + ; } /** * This endpoint is documented at: * TODO add URL - * */ public function spent(DateRequest $request, Budget $budget): JsonResponse { - $data = $request->getAll(); - $result = $this->repository->spentInPeriodForBudget($budget, $data['start'], $data['end']); - $converted = $this->cerSum(array_values($result)); + $data = $request->getAll(); + $result = $this->repository->spentInPeriodForBudget($budget, $data['start'], $data['end']); - return response()->json($converted); + return response()->json($result); } } diff --git a/app/Api/V2/Controllers/Model/Budget/SumController.php b/app/Api/V2/Controllers/Model/Budget/SumController.php index 394ee1bc00..0147fd061c 100644 --- a/app/Api/V2/Controllers/Model/Budget/SumController.php +++ b/app/Api/V2/Controllers/Model/Budget/SumController.php @@ -26,9 +26,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\Budget; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Request\Generic\DateRequest; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; -use FireflyIII\Support\Http\Api\ConvertsExchangeRates; use Illuminate\Http\JsonResponse; /** @@ -36,13 +34,8 @@ use Illuminate\Http\JsonResponse; */ class SumController extends Controller { - use ConvertsExchangeRates; - private BudgetRepositoryInterface $repository; - /** - * - */ public function __construct() { parent::__construct(); @@ -58,34 +51,24 @@ class SumController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v2)#/budgets/getBudgetedForBudget - * - * @param DateRequest $request - * - * @return JsonResponse */ public function budgeted(DateRequest $request): JsonResponse { - $data = $request->getAll(); - $result = $this->repository->budgetedInPeriod($data['start'], $data['end']); - $converted = $this->cerSum(array_values($result)); + $data = $request->getAll(); + $result = $this->repository->budgetedInPeriod($data['start'], $data['end']); - return response()->json($converted); + return response()->json($result); } /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v2)#/budgets/getSpentForBudget - * - * @param DateRequest $request - * - * @return JsonResponse */ public function spent(DateRequest $request): JsonResponse { - $data = $request->getAll(); - $result = $this->repository->spentInPeriod($data['start'], $data['end']); - $converted = $this->cerSum(array_values($result)); + $data = $request->getAll(); + $result = $this->repository->spentInPeriod($data['start'], $data['end']); - return response()->json($converted); + return response()->json($result); } } diff --git a/app/Api/V2/Controllers/Model/BudgetLimit/IndexController.php b/app/Api/V2/Controllers/Model/BudgetLimit/IndexController.php new file mode 100644 index 0000000000..c0c27c83e0 --- /dev/null +++ b/app/Api/V2/Controllers/Model/BudgetLimit/IndexController.php @@ -0,0 +1,65 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Api\V2\Controllers\Model\BudgetLimit; + +use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Models\Budget; +use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; +use FireflyIII\Transformers\V2\BudgetLimitTransformer; +use Illuminate\Http\JsonResponse; +use Illuminate\Pagination\LengthAwarePaginator; + +class IndexController extends Controller +{ + private BudgetLimitRepositoryInterface $repository; + + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(BudgetLimitRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * This endpoint is documented at: + * TODO add URL + */ + public function index(Budget $budget): JsonResponse + { + $pageSize = $this->parameters->get('limit'); + $collection = $this->repository->getBudgetLimits($budget); + $total = $collection->count(); + $collection->slice($pageSize * $this->parameters->get('page'), $pageSize); + + $paginator = new LengthAwarePaginator($collection, $total, $pageSize, $this->parameters->get('page')); + $transformer = new BudgetLimitTransformer(); + + return response()->api($this->jsonApiList('budget-limits', $paginator, $transformer))->header('Content-Type', self::CONTENT_TYPE); + } +} diff --git a/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php b/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php index cf7ef4f9d7..5272aa7a4d 100644 --- a/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php +++ b/app/Api/V2/Controllers/Model/BudgetLimit/ListController.php @@ -25,49 +25,47 @@ declare(strict_types=1); namespace FireflyIII\Api\V2\Controllers\Model\BudgetLimit; use FireflyIII\Api\V2\Controllers\Controller; -use FireflyIII\Api\V2\Request\Generic\DateRequest; -use FireflyIII\Models\Budget; -use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; -use FireflyIII\Transformers\V2\BudgetLimitTransformer; use Illuminate\Http\JsonResponse; -use Illuminate\Pagination\LengthAwarePaginator; /** * Class ListController */ class ListController extends Controller { - private BudgetLimitRepositoryInterface $repository; - - public function __construct() - { - parent::__construct(); - $this->middleware( - function ($request, $next) { - $this->repository = app(BudgetLimitRepositoryInterface::class); - - return $next($request); - } - ); - } + // private BudgetLimitRepositoryInterface $repository; + // + // public function __construct() + // { + // parent::__construct(); + // $this->middleware( + // function ($request, $next) { + // $this->repository = app(BudgetLimitRepositoryInterface::class); + // + // return $next($request); + // } + // ); + // } /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v2)#/budgets/listBudgetLimitByBudget + * // DateRequest $request, Budget $budget */ - public function index(DateRequest $request, Budget $budget): JsonResponse + public function index(): JsonResponse { - $pageSize = $this->parameters->get('limit'); - $dates = $request->getAll(); - $collection = $this->repository->getBudgetLimits($budget, $dates['start'], $dates['end']); - $total = $collection->count(); - $collection->slice($pageSize * $this->parameters->get('page'), $pageSize); - - $paginator = new LengthAwarePaginator($collection, $total, $pageSize, $this->parameters->get('page')); - $transformer = new BudgetLimitTransformer(); - - return response() - ->api($this->jsonApiList('budget_limits', $paginator, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + return response()->json([]); + // throw new FireflyException('Needs refactoring, move to IndexController.'); + // $pageSize = $this->parameters->get('limit'); + // $dates = $request->getAll(); + // $collection = $this->repository->getBudgetLimits($budget, $dates['start'], $dates['end']); + // $total = $collection->count(); + // $collection->slice($pageSize * $this->parameters->get('page'), $pageSize); + // + // $paginator = new LengthAwarePaginator($collection, $total, $pageSize, $this->parameters->get('page')); + // $transformer = new BudgetLimitTransformer(); + // + // return response() + // ->api($this->jsonApiList('budget-limits', $paginator, $transformer)) + // ->header('Content-Type', self::CONTENT_TYPE); } } diff --git a/app/Api/V2/Controllers/Model/Currency/IndexController.php b/app/Api/V2/Controllers/Model/Currency/IndexController.php new file mode 100644 index 0000000000..bcaaae0d7d --- /dev/null +++ b/app/Api/V2/Controllers/Model/Currency/IndexController.php @@ -0,0 +1,72 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Api\V2\Controllers\Model\Currency; + +use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; +use FireflyIII\Transformers\V2\CurrencyTransformer; +use Illuminate\Http\JsonResponse; +use Illuminate\Pagination\LengthAwarePaginator; + +/** + * Class IndexController + */ +class IndexController extends Controller +{ + private CurrencyRepositoryInterface $repository; + + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(CurrencyRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * TODO This endpoint is not yet documented. + * + * Display a listing of the resource. + */ + public function index(): JsonResponse + { + $bills = $this->repository->getAll(); + $pageSize = $this->parameters->get('limit'); + $count = $bills->count(); + $bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); + $transformer = new CurrencyTransformer(); + $transformer->setParameters($this->parameters); // give params to transformer + + return response() + ->json($this->jsonApiList('currencies', $paginator, $transformer)) + ->header('Content-Type', self::CONTENT_TYPE) + ; + } +} diff --git a/app/Api/V2/Controllers/Model/PiggyBank/ShowController.php b/app/Api/V2/Controllers/Model/PiggyBank/IndexController.php similarity index 87% rename from app/Api/V2/Controllers/Model/PiggyBank/ShowController.php rename to app/Api/V2/Controllers/Model/PiggyBank/IndexController.php index e75e8b8866..bdad3f4cf1 100644 --- a/app/Api/V2/Controllers/Model/PiggyBank/ShowController.php +++ b/app/Api/V2/Controllers/Model/PiggyBank/IndexController.php @@ -1,6 +1,5 @@ repository = app(PiggyBankRepositoryInterface::class); - $userGroup = $this->validateUserGroup($request); + $userGroup = $this->validateUserGroup($request); if (null !== $userGroup) { $this->repository->setUserGroup($userGroup); } @@ -61,13 +58,9 @@ class ShowController extends Controller } /** - * @param Request $request - * * TODO see autocomplete/accountcontroller for list. - * - * @return JsonResponse */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { $piggies = $this->repository->getPiggyBanks(); $pageSize = $this->parameters->get('limit'); @@ -79,6 +72,7 @@ class ShowController extends Controller return response() ->json($this->jsonApiList('piggy-banks', $paginator, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } } diff --git a/app/Api/V2/Controllers/Model/Transaction/ShowController.php b/app/Api/V2/Controllers/Model/Transaction/ShowController.php new file mode 100644 index 0000000000..c2adf07d15 --- /dev/null +++ b/app/Api/V2/Controllers/Model/Transaction/ShowController.php @@ -0,0 +1,43 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Api\V2\Controllers\Model\Transaction; + +use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Models\TransactionGroup; +use FireflyIII\Transformers\V2\TransactionGroupTransformer; +use Illuminate\Http\JsonResponse; + +class ShowController extends Controller +{ + /** + * TODO this endpoint is not yet reachable. + */ + public function show(TransactionGroup $transactionGroup): JsonResponse + { + $transformer = new TransactionGroupTransformer(); + $transformer->setParameters($this->parameters); + + return response()->api($this->jsonApiObject('transactions', $transactionGroup, $transformer))->header('Content-Type', self::CONTENT_TYPE); + } +} diff --git a/app/Api/V2/Controllers/Model/Transaction/StoreController.php b/app/Api/V2/Controllers/Model/Transaction/StoreController.php index dc14f8b22e..d41596d714 100644 --- a/app/Api/V2/Controllers/Model/Transaction/StoreController.php +++ b/app/Api/V2/Controllers/Model/Transaction/StoreController.php @@ -1,6 +1,5 @@ middleware( function ($request, $next) { $this->groupRepository = app(TransactionGroupRepositoryInterface::class); + return $next($request); } ); @@ -63,13 +63,11 @@ class StoreController extends Controller /** * TODO this method is practically the same as the V1 method and borrows as much code as possible. * - * @return JsonResponse * @throws FireflyException * @throws ValidationException */ public function post(StoreRequest $request): JsonResponse { - app('log')->debug('Now in API v2 StoreController::store()'); $data = $request->getAll(); $userGroup = $request->getUserGroup(); @@ -82,47 +80,50 @@ class StoreController extends Controller try { $transactionGroup = $this->groupRepository->store($data); - } catch (DuplicateTransactionException $e) { + } catch (DuplicateTransactionException $e) { // @phpstan-ignore-line app('log')->warning('Caught a duplicate transaction. Return error message.'); $validator = Validator::make( ['transactions' => [['description' => $e->getMessage()]]], ['transactions.0.description' => new IsDuplicateTransaction()] ); - throw new ValidationException($validator, 0, $e); - } catch (FireflyException $e) { + + throw new ValidationException($validator); // @phpstan-ignore-line + } catch (FireflyException $e) { // @phpstan-ignore-line app('log')->warning('Caught an exception. Return error message.'); app('log')->error($e->getMessage()); $message = sprintf('Internal exception: %s', $e->getMessage()); $validator = Validator::make(['transactions' => [['description' => $message]]], ['transactions.0.description' => new IsDuplicateTransaction()]); - throw new ValidationException($validator, 0, $e); + + throw new ValidationException($validator); // @phpstan-ignore-line } app('preferences')->mark(); - $applyRules = $data['apply_rules'] ?? true; - $fireWebhooks = $data['fire_webhooks'] ?? true; + $applyRules = $data['apply_rules'] ?? true; + $fireWebhooks = $data['fire_webhooks'] ?? true; event(new StoredTransactionGroup($transactionGroup, $applyRules, $fireWebhooks)); /** @var User $admin */ - $admin = auth()->user(); + $admin = auth()->user(); + // use new group collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setUser($admin) // filter on transaction group. - ->setTransactionGroup($transactionGroup); + ->setTransactionGroup($transactionGroup) + ; - $selectedGroup = $collector->getGroups()->first(); + $selectedGroup = $collector->getGroups()->first(); if (null === $selectedGroup) { throw new FireflyException('200032: Cannot find transaction. Possibly, a rule deleted this transaction after its creation.'); } - $transformer = new TransactionGroupTransformer(); + $transformer = new TransactionGroupTransformer(); $transformer->setParameters($this->parameters); return response() ->api($this->jsonApiObject('transactions', $selectedGroup, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } - - } diff --git a/app/Api/V2/Controllers/Model/Transaction/UpdateController.php b/app/Api/V2/Controllers/Model/Transaction/UpdateController.php new file mode 100644 index 0000000000..61129391cf --- /dev/null +++ b/app/Api/V2/Controllers/Model/Transaction/UpdateController.php @@ -0,0 +1,93 @@ +middleware( + function ($request, $next) { + $this->groupRepository = app(TransactionGroupRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * This endpoint is documented at: + * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/updateTransaction + * + * Update a transaction. + * + * @throws FireflyException + */ + public function update(UpdateRequest $request, TransactionGroup $transactionGroup): JsonResponse + { + app('log')->debug('Now in update routine for transaction group [v2]!'); + $data = $request->getAll(); + $transactionGroup = $this->groupRepository->update($transactionGroup, $data); + $applyRules = $data['apply_rules'] ?? true; + $fireWebhooks = $data['fire_webhooks'] ?? true; + + event(new UpdatedTransactionGroup($transactionGroup, $applyRules, $fireWebhooks)); + app('preferences')->mark(); + + /** @var User $admin */ + $admin = auth()->user(); + + // use new group collector: + /** @var GroupCollectorInterface $collector */ + $collector = app(GroupCollectorInterface::class); + $collector->setUser($admin)->setTransactionGroup($transactionGroup); + + $selectedGroup = $collector->getGroups()->first(); + if (null === $selectedGroup) { + throw new FireflyException('200032: Cannot find transaction. Possibly, a rule deleted this transaction after its creation.'); + } + + $transformer = new TransactionGroupTransformer(); + $transformer->setParameters($this->parameters); + + return response()->api($this->jsonApiObject('transactions', $selectedGroup, $transformer))->header('Content-Type', self::CONTENT_TYPE); + } +} diff --git a/app/Api/V2/Controllers/Search/AccountController.php b/app/Api/V2/Controllers/Search/AccountController.php index 9c107899cf..af87a73b5a 100644 --- a/app/Api/V2/Controllers/Search/AccountController.php +++ b/app/Api/V2/Controllers/Search/AccountController.php @@ -29,6 +29,4 @@ use FireflyIII\Api\V2\Controllers\Controller; /** * Class AccountController */ -class AccountController extends Controller -{ -} +class AccountController extends Controller {} diff --git a/app/Api/V2/Controllers/Summary/BasicController.php b/app/Api/V2/Controllers/Summary/BasicController.php index 3b35875c86..c166f3573b 100644 --- a/app/Api/V2/Controllers/Summary/BasicController.php +++ b/app/Api/V2/Controllers/Summary/BasicController.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Api\V2\Controllers\Summary; use Carbon\Carbon; -use Exception; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Request\Generic\DateRequest; use FireflyIII\Exceptions\FireflyException; @@ -33,7 +32,6 @@ use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Helpers\Report\NetWorthInterface; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; -use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionType; use FireflyIII\Models\UserGroup; use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface; @@ -41,11 +39,13 @@ use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface; use FireflyIII\Repositories\UserGroups\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\UserGroups\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\UserGroups\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Api\ExchangeRateConverter; +use FireflyIII\Support\Http\Api\SummaryBalanceGrouped; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; use FireflyIII\User; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\Log; /** * Class BasicController @@ -63,8 +63,6 @@ class BasicController extends Controller /** * BasicController constructor. - * - */ public function __construct() { @@ -78,7 +76,7 @@ class BasicController extends Controller $this->currencyRepos = app(CurrencyRepositoryInterface::class); $this->opsRepository = app(OperationsRepositoryInterface::class); - $userGroup = $this->validateUserGroup($request); + $userGroup = $this->validateUserGroup($request); if (null !== $userGroup) { $this->abRepository->setUserGroup($userGroup); $this->accountRepository->setUserGroup($userGroup); @@ -96,16 +94,15 @@ class BasicController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v2)#/summary/getBasicSummary * - * @param DateRequest $request + * @throws \Exception * - * @return JsonResponse - * @throws Exception + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function basic(DateRequest $request): JsonResponse { // parameters for boxes: - $start = $this->parameters->get('start'); - $end = $this->parameters->get('end'); + $start = $this->parameters->get('start'); + $end = $this->parameters->get('end'); // balance information: $balanceData = $this->getBalanceInformation($start, $end); @@ -113,34 +110,22 @@ class BasicController extends Controller $spentData = $this->getLeftToSpendInfo($start, $end); $netWorthData = $this->getNetWorthInfo($start, $end); $total = array_merge($balanceData, $billData, $spentData, $netWorthData); + return response()->json($total); } /** - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException */ private function getBalanceInformation(Carbon $start, Carbon $end): array { - // prep some arrays: - $incomes = [ - 'native' => '0', - ]; - $expenses = [ - 'native' => '0', - ]; - $sums = [ - 'native' => '0', - ]; - $return = []; - $currencies = []; - $converter = new ExchangeRateConverter(); - $default = app('amount')->getDefaultCurrency(); + $object = new SummaryBalanceGrouped(); + $default = app('amount')->getDefaultCurrency(); + + $object->setDefault($default); + /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); // collect income of user using the new group collector. /** @var GroupCollectorInterface $collector */ @@ -152,33 +137,11 @@ class BasicController extends Controller ->setPage($this->parameters->get('page')) // set types of transactions to return. ->setTypes([TransactionType::DEPOSIT]) - ->setRange($start, $end); + ->setRange($start, $end) + ; - $set = $collector->getExtractedJournals(); - /** @var array $transactionJournal */ - foreach ($set as $transactionJournal) { - // transaction info: - $currencyId = (int)$transactionJournal['currency_id']; - $amount = bcmul($transactionJournal['amount'], '-1'); - $currency = $currencies[$currencyId] ?? TransactionCurrency::find($currencyId); - $currencies[$currencyId] = $currency; - $nativeAmount = $converter->convert($currency, $default, $transactionJournal['date'], $amount); - if ((int)$transactionJournal['foreign_currency_id'] === (int)$default->id) { - // use foreign amount instead - $nativeAmount = $transactionJournal['foreign_amount']; - } - // prep the arrays - $incomes[$currencyId] = $incomes[$currencyId] ?? '0'; - $incomes['native'] = $incomes['native'] ?? '0'; - $sums[$currencyId] = $sums[$currencyId] ?? '0'; - $sums['native'] = $sums['native'] ?? '0'; - - // add values: - $incomes[$currencyId] = bcadd($incomes[$currencyId], $amount); - $sums[$currencyId] = bcadd($sums[$currencyId], $amount); - $incomes['native'] = bcadd($incomes['native'], $nativeAmount); - $sums['native'] = bcadd($sums['native'], $nativeAmount); - } + $set = $collector->getExtractedJournals(); + $object->groupTransactions('income', $set); // collect expenses of user using the new group collector. /** @var GroupCollectorInterface $collector */ @@ -190,105 +153,14 @@ class BasicController extends Controller ->setPage($this->parameters->get('page')) // set types of transactions to return. ->setTypes([TransactionType::WITHDRAWAL]) - ->setRange($start, $end); - $set = $collector->getExtractedJournals(); + ->setRange($start, $end) + ; + $set = $collector->getExtractedJournals(); + $object->groupTransactions('expense', $set); - /** @var array $transactionJournal */ - foreach ($set as $transactionJournal) { - // transaction info - $currencyId = (int)$transactionJournal['currency_id']; - $amount = $transactionJournal['amount']; - $currency = $currencies[$currencyId] ?? $this->currencyRepos->find($currencyId); - $currencies[$currencyId] = $currency; - $nativeAmount = $converter->convert($currency, $default, $transactionJournal['date'], $amount); - if ((int)$transactionJournal['foreign_currency_id'] === (int)$default->id) { - // use foreign amount instead - $nativeAmount = $transactionJournal['foreign_amount']; - } - - // prep arrays - $expenses[$currencyId] = $expenses[$currencyId] ?? '0'; - $expenses['native'] = $expenses['native'] ?? '0'; - $sums[$currencyId] = $sums[$currencyId] ?? '0'; - $sums['native'] = $sums['native'] ?? '0'; - - // add values - $expenses[$currencyId] = bcadd($expenses[$currencyId], $amount); - $sums[$currencyId] = bcadd($sums[$currencyId], $amount); - $expenses['native'] = bcadd($expenses['native'], $nativeAmount); - $sums['native'] = bcadd($sums['native'], $nativeAmount); - } - - // create special array for native currency: - $return[] = [ - 'key' => 'balance-in-native', - 'value' => $sums['native'], - 'currency_id' => (string)$default->id, - 'currency_code' => $default->code, - 'currency_symbol' => $default->symbol, - 'currency_decimal_places' => $default->decimal_places, - ]; - $return[] = [ - 'key' => 'spent-in-native', - 'value' => $expenses['native'], - 'currency_id' => (string)$default->id, - 'currency_code' => $default->code, - 'currency_symbol' => $default->symbol, - 'currency_decimal_places' => $default->decimal_places, - ]; - $return[] = [ - 'key' => 'earned-in-native', - 'value' => $incomes['native'], - 'currency_id' => (string)$default->id, - 'currency_code' => $default->code, - 'currency_symbol' => $default->symbol, - 'currency_decimal_places' => $default->decimal_places, - ]; - - // format amounts: - $keys = array_keys($sums); - foreach ($keys as $currencyId) { - if ('native' === $currencyId) { - // skip native entries. - continue; - } - $currency = $currencies[$currencyId] ?? $this->currencyRepos->find($currencyId); - $currencies[$currencyId] = $currency; - // create objects for big array. - $return[] = [ - 'key' => sprintf('balance-in-%s', $currency->code), - 'value' => $sums[$currencyId] ?? '0', - 'currency_id' => (string)$currency->id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => $currency->decimal_places, - ]; - $return[] = [ - 'key' => sprintf('spent-in-%s', $currency->code), - 'value' => $expenses[$currencyId] ?? '0', - 'currency_id' => (string)$currency->id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => $currency->decimal_places, - ]; - $return[] = [ - 'key' => sprintf('earned-in-%s', $currency->code), - 'value' => $incomes[$currencyId] ?? '0', - 'currency_id' => (string)$currency->id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => $currency->decimal_places, - ]; - } - return $return; + return $object->groupData(); } - /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ private function getBillInformation(Carbon $start, Carbon $end): array { /* @@ -298,7 +170,8 @@ class BasicController extends Controller $paidAmount = $this->billRepository->sumPaidInRange($start, $end); $unpaidAmount = $this->billRepository->sumUnpaidInRange($start, $end); - $return = []; + $return = []; + /** * @var array $info */ @@ -316,10 +189,10 @@ class BasicController extends Controller $return[] = [ 'key' => 'bills-paid-in-native', 'value' => $nativeAmount, - 'currency_id' => (string)$info['native_id'], - 'currency_code' => $info['native_code'], - 'currency_symbol' => $info['native_symbol'], - 'currency_decimal_places' => $info['native_decimal_places'], + 'currency_id' => (string)$info['native_currency_id'], + 'currency_code' => $info['native_currency_code'], + 'currency_symbol' => $info['native_currency_symbol'], + 'currency_decimal_places' => $info['native_currency_decimal_places'], ]; } @@ -340,10 +213,10 @@ class BasicController extends Controller $return[] = [ 'key' => 'bills-unpaid-in-native', 'value' => $nativeAmount, - 'currency_id' => (string)$info['native_id'], - 'currency_code' => $info['native_code'], - 'currency_symbol' => $info['native_symbol'], - 'currency_decimal_places' => $info['native_decimal_places'], + 'currency_id' => (string)$info['native_currency_id'], + 'currency_code' => $info['native_currency_code'], + 'currency_symbol' => $info['native_currency_symbol'], + 'currency_decimal_places' => $info['native_currency_decimal_places'], ]; } @@ -351,23 +224,20 @@ class BasicController extends Controller } /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - * @throws Exception + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ private function getLeftToSpendInfo(Carbon $start, Carbon $end): array { + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); app('log')->debug('Now in getLeftToSpendInfo'); - $return = []; - $today = today(config('app.timezone')); - $available = $this->abRepository->getAvailableBudgetWithCurrency($start, $end); - $budgets = $this->budgetRepository->getActiveBudgets(); - $spent = $this->opsRepository->listExpenses($start, $end, null, $budgets); - $default = app('amount')->getDefaultCurrency(); - $currencies = []; - $converter = new ExchangeRateConverter(); + $return = []; + $today = today(config('app.timezone')); + $available = $this->abRepository->getAvailableBudgetWithCurrency($start, $end); + $budgets = $this->budgetRepository->getActiveBudgets(); + $spent = $this->opsRepository->listExpenses($start, $end, null, $budgets); + $default = app('amount')->getDefaultCurrency(); + $currencies = []; + $converter = new ExchangeRateConverter(); // native info: $nativeLeft = [ @@ -376,7 +246,7 @@ class BasicController extends Controller 'currency_id' => (string)$default->id, 'currency_code' => $default->code, 'currency_symbol' => $default->symbol, - 'currency_decimal_places' => (int)$default->decimal_places, + 'currency_decimal_places' => $default->decimal_places, ]; $nativePerDay = [ 'key' => 'left-per-day-to-spend-in-native', @@ -384,7 +254,7 @@ class BasicController extends Controller 'currency_id' => (string)$default->id, 'currency_code' => $default->code, 'currency_symbol' => $default->symbol, - 'currency_decimal_places' => (int)$default->decimal_places, + 'currency_decimal_places' => $default->decimal_places, ]; /** @@ -393,13 +263,14 @@ class BasicController extends Controller */ foreach ($spent as $currencyId => $row) { app('log')->debug(sprintf('Processing spent array in currency #%d', $currencyId)); - $currencyId = (int)$currencyId; - $spent = '0'; - $spentNative = '0'; + $spent = '0'; + $spentNative = '0'; + // get the sum from the array of transactions (double loop but who cares) /** @var array $budget */ foreach ($row['budgets'] as $budget) { app('log')->debug(sprintf('Processing expenses in budget "%s".', $budget['name'])); + /** @var array $journal */ foreach ($budget['transaction_journals'] as $journal) { $journalCurrencyId = $journal['currency_id']; @@ -407,11 +278,11 @@ class BasicController extends Controller $currencies[$currencyId] = $currency; $amount = app('steam')->negative($journal['amount']); $amountNative = $converter->convert($default, $currency, $start, $amount); - if ((int)$journal['foreign_currency_id'] === (int)$default->id) { + if ((int)$journal['foreign_currency_id'] === $default->id) { $amountNative = $journal['foreign_amount']; } - $spent = bcadd($spent, $amount); - $spentNative = bcadd($spentNative, $amountNative); + $spent = bcadd($spent, $amount); + $spentNative = bcadd($spentNative, $amountNative); } app('log')->debug(sprintf('Total spent in budget "%s" is %s', $budget['name'], $spent)); } @@ -427,9 +298,9 @@ class BasicController extends Controller app('log')->debug(sprintf('Amount left is %s', $left)); // how much left per day? - $days = $today->diffInDays($end) + 1; - $perDay = '0'; - $perDayNative = '0'; + $days = $today->diffInDays($end) + 1; + $perDay = '0'; + $perDayNative = '0'; if (0 !== $days && bccomp($left, '0') > -1) { $perDay = bcdiv($left, (string)$days); } @@ -438,7 +309,7 @@ class BasicController extends Controller } // left - $return[] = [ + $return[] = [ 'key' => sprintf('left-to-spend-in-%s', $row['currency_code']), 'value' => $left, 'currency_id' => (string)$row['currency_id'], @@ -447,10 +318,10 @@ class BasicController extends Controller 'currency_decimal_places' => (int)$row['currency_decimal_places'], ]; // left (native) - $nativeLeft['value'] = $leftNative; + $nativeLeft['value'] = $leftNative; // left per day: - $return[] = [ + $return[] = [ 'key' => sprintf('left-per-day-to-spend-in-%s', $row['currency_code']), 'value' => $perDay, 'currency_id' => (string)$row['currency_id'], @@ -460,25 +331,20 @@ class BasicController extends Controller ]; // left per day (native) - $nativePerDay['value'] = $perDayNative; + $nativePerDay['value'] = $perDayNative; } - $return[] = $nativeLeft; - $return[] = $nativePerDay; + $return[] = $nativeLeft; + $return[] = $nativePerDay; + $converter->summarize(); return $return; } - /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ private function getNetWorthInfo(Carbon $start, Carbon $end): array { /** @var UserGroup $userGroup */ - $userGroup = auth()->user()->userGroup; - $date = today(config('app.timezone'))->startOfDay(); + $userGroup = auth()->user()->userGroup; + $date = today(config('app.timezone'))->startOfDay(); // start and end in the future? use $end if ($this->notInDateRange($date, $start, $end)) { /** @var Carbon $date */ @@ -488,12 +354,12 @@ class BasicController extends Controller /** @var NetWorthInterface $netWorthHelper */ $netWorthHelper = app(NetWorthInterface::class); $netWorthHelper->setUserGroup($userGroup); - $allAccounts = $this->accountRepository->getActiveAccountsByType( + $allAccounts = $this->accountRepository->getActiveAccountsByType( [AccountType::ASSET, AccountType::DEFAULT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::DEBT] ); // filter list on preference of being included. - $filtered = $allAccounts->filter( + $filtered = $allAccounts->filter( function (Account $account) { $includeNetWorth = $this->accountRepository->getMetaValue($account, 'include_net_worth'); @@ -501,10 +367,10 @@ class BasicController extends Controller } ); - $netWorthSet = $netWorthHelper->byAccounts($filtered, $date); - $return = []; + $netWorthSet = $netWorthHelper->byAccounts($filtered, $date); + $return = []; // in native amount - $return[] = [ + $return[] = [ 'key' => 'net-worth-in-native', 'value' => $netWorthSet['native']['balance'], 'currency_id' => (string)$netWorthSet['native']['currency_id'], @@ -531,13 +397,6 @@ class BasicController extends Controller /** * Check if date is outside session range. - * - * @param Carbon $date - * - * @param Carbon $start - * @param Carbon $end - * - * @return bool */ protected function notInDateRange(Carbon $date, Carbon $start, Carbon $end): bool // Validate a preference { diff --git a/app/Api/V2/Controllers/Summary/NetWorthController.php b/app/Api/V2/Controllers/Summary/NetWorthController.php index 553721d3f6..52921a98f7 100644 --- a/app/Api/V2/Controllers/Summary/NetWorthController.php +++ b/app/Api/V2/Controllers/Summary/NetWorthController.php @@ -27,7 +27,9 @@ namespace FireflyIII\Api\V2\Controllers\Summary; use FireflyIII\Api\V2\Controllers\Controller; use FireflyIII\Api\V2\Request\Generic\SingleDateRequest; use FireflyIII\Helpers\Report\NetWorthInterface; -use FireflyIII\Support\Http\Api\ConvertsExchangeRates; +use FireflyIII\Models\Account; +use FireflyIII\Models\AccountType; +use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; use Illuminate\Http\JsonResponse; @@ -37,24 +39,22 @@ use Illuminate\Http\JsonResponse; class NetWorthController extends Controller { use ValidatesUserGroupTrait; - use ConvertsExchangeRates; - private NetWorthInterface $netWorth; + private NetWorthInterface $netWorth; + private AccountRepositoryInterface $repository; - /** - * - */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { - $this->netWorth = app(NetWorthInterface::class); - + $this->netWorth = app(NetWorthInterface::class); + $this->repository = app(AccountRepositoryInterface::class); // new way of user group validation - $userGroup = $this->validateUserGroup($request); + $userGroup = $this->validateUserGroup($request); if (null !== $userGroup) { $this->netWorth->setUserGroup($userGroup); + $this->repository->setUserGroup($userGroup); } return $next($request); @@ -65,17 +65,24 @@ class NetWorthController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v2)#/net-worth/getNetWorth - * - * @param SingleDateRequest $request - * - * @return JsonResponse */ public function get(SingleDateRequest $request): JsonResponse { - $date = $request->getDate(); - $result = $this->netWorth->sumNetWorthByCurrency($date); - $converted = $this->cerSum($result); + $date = $request->getDate(); + $accounts = $this->repository->getAccountsByType([AccountType::ASSET, AccountType::DEFAULT, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]); - return response()->api($converted); + // filter list on preference of being included. + $filtered = $accounts->filter( + function (Account $account) { + $includeNetWorth = $this->repository->getMetaValue($account, 'include_net_worth'); + + return null === $includeNetWorth || '1' === $includeNetWorth; + } + ); + + // skip accounts that should not be in the net worth + $result = $this->netWorth->byAccounts($filtered, $date); + + return response()->api($result); } } diff --git a/app/Api/V2/Controllers/System/ConfigurationController.php b/app/Api/V2/Controllers/System/ConfigurationController.php index 0002de25a4..e7c9b63ec6 100644 --- a/app/Api/V2/Controllers/System/ConfigurationController.php +++ b/app/Api/V2/Controllers/System/ConfigurationController.php @@ -27,6 +27,4 @@ namespace FireflyIII\Api\V2\Controllers\System; /** * Class ConfigurationController */ -class ConfigurationController -{ -} +class ConfigurationController {} diff --git a/app/Api/V2/Controllers/System/DebugController.php b/app/Api/V2/Controllers/System/DebugController.php index 5f9838c023..d87a51973c 100644 --- a/app/Api/V2/Controllers/System/DebugController.php +++ b/app/Api/V2/Controllers/System/DebugController.php @@ -29,6 +29,4 @@ use FireflyIII\Api\V2\Controllers\Controller; /** * Class DebugController */ -class DebugController extends Controller -{ -} +class DebugController extends Controller {} diff --git a/app/Api/V2/Controllers/System/PreferencesController.php b/app/Api/V2/Controllers/System/PreferencesController.php index 915ab2ce3d..5cc40ea225 100644 --- a/app/Api/V2/Controllers/System/PreferencesController.php +++ b/app/Api/V2/Controllers/System/PreferencesController.php @@ -37,15 +37,12 @@ class PreferencesController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v2)#/preferences/getPreference - * - * @param Preference $preference - * - * @return JsonResponse */ public function get(Preference $preference): JsonResponse { return response() ->json($this->jsonApiObject('preferences', $preference, new PreferenceTransformer())) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } } diff --git a/app/Api/V2/Controllers/System/VersionUpdateController.php b/app/Api/V2/Controllers/System/VersionUpdateController.php index 35d4b3fb3f..979bdb1ece 100644 --- a/app/Api/V2/Controllers/System/VersionUpdateController.php +++ b/app/Api/V2/Controllers/System/VersionUpdateController.php @@ -29,6 +29,4 @@ use FireflyIII\Api\V2\Controllers\Controller; /** * Class VersionUpdateController */ -class VersionUpdateController extends Controller -{ -} +class VersionUpdateController extends Controller {} diff --git a/app/Api/V2/Controllers/Transaction/List/AccountController.php b/app/Api/V2/Controllers/Transaction/List/AccountController.php index ceb6f7802d..56f9c612e1 100644 --- a/app/Api/V2/Controllers/Transaction/List/AccountController.php +++ b/app/Api/V2/Controllers/Transaction/List/AccountController.php @@ -43,30 +43,25 @@ class AccountController extends Controller /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v2)#/accounts/listTransactionByAccount - * - * @param ListRequest $request - * @param Account $account - * - * @return JsonResponse */ public function list(ListRequest $request, Account $account): JsonResponse { // collect transactions: - $page = $request->getPage(); - $page = max($page, 1); - $pageSize = $this->parameters->get('limit'); - + $page = $request->getPage(); + $page = max($page, 1); + $pageSize = $this->parameters->get('limit'); /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setAccounts(new Collection([$account])) - ->withAPIInformation() - ->setLimit($pageSize) - ->setPage($page) - ->setTypes($request->getTransactionTypes()); + ->withAPIInformation() + ->setLimit($pageSize) + ->setPage($page) + ->setTypes($request->getTransactionTypes()) + ; - $start = $request->getStartDate(); - $end = $request->getEndDate(); + $start = $request->getStartDate(); + $end = $request->getEndDate(); if (null !== $start) { app('log')->debug(sprintf('Set start date to %s', $start->toIso8601String())); $collector->setStart($start); @@ -87,6 +82,7 @@ class AccountController extends Controller return response() ->json($this->jsonApiList('transactions', $paginator, new TransactionGroupTransformer())) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } } diff --git a/app/Api/V2/Controllers/Transaction/List/TransactionController.php b/app/Api/V2/Controllers/Transaction/List/TransactionController.php index 9bcc831a16..50731dbf73 100644 --- a/app/Api/V2/Controllers/Transaction/List/TransactionController.php +++ b/app/Api/V2/Controllers/Transaction/List/TransactionController.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V2\Controllers\Transaction\List; use FireflyIII\Api\V2\Controllers\Controller; +use FireflyIII\Api\V2\Request\Model\Transaction\InfiniteListRequest; use FireflyIII\Api\V2\Request\Model\Transaction\ListRequest; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Transformers\V2\TransactionGroupTransformer; @@ -34,29 +35,24 @@ use Illuminate\Http\JsonResponse; */ class TransactionController extends Controller { - /** - * @param ListRequest $request - * - * @return JsonResponse - */ public function list(ListRequest $request): JsonResponse { // collect transactions: - $pageSize = $this->parameters->get('limit'); - $page = $request->getPage(); - $page = max($page, 1); - + $pageSize = $this->parameters->get('limit'); + $page = $request->getPage(); + $page = max($page, 1); /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setUserGroup(auth()->user()->userGroup) - ->withAPIInformation() - ->setLimit($pageSize) - ->setPage($page) - ->setTypes($request->getTransactionTypes()); + ->withAPIInformation() + ->setLimit($pageSize) + ->setPage($page) + ->setTypes($request->getTransactionTypes()) + ; - $start = $this->parameters->get('start'); - $end = $this->parameters->get('end'); + $start = $this->parameters->get('start'); + $end = $this->parameters->get('end'); if (null !== $start) { $collector->setStart($start); } @@ -64,9 +60,6 @@ class TransactionController extends Controller $collector->setEnd($end); } - // $collector->dumpQuery(); - // exit; - $paginator = $collector->getPaginatedGroups(); $params = $request->buildParams($pageSize); $paginator->setPath( @@ -79,8 +72,48 @@ class TransactionController extends Controller return response() ->json($this->jsonApiList('transactions', $paginator, new TransactionGroupTransformer())) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } + public function infiniteList(InfiniteListRequest $request): JsonResponse + { + // get sort instructions + $instructions = $request->getSortInstructions(); + // collect transactions: + /** @var GroupCollectorInterface $collector */ + $collector = app(GroupCollectorInterface::class); + $collector->setUserGroup(auth()->user()->userGroup) + ->withAPIInformation() + ->setStartRow($request->getStartRow()) + ->setEndRow($request->getEndRow()) + ->setTypes($request->getTransactionTypes()) + ->setSorting($instructions) + ; + + $start = $this->parameters->get('start'); + $end = $this->parameters->get('end'); + if (null !== $start) { + $collector->setStart($start); + } + if (null !== $end) { + $collector->setEnd($end); + } + + $paginator = $collector->getPaginatedGroups(); + $params = $request->buildParams(); + $paginator->setPath( + sprintf( + '%s?%s', + route('api.v2.infinite.transactions.list'), + $params + ) + ); + + return response() + ->json($this->jsonApiList('transactions', $paginator, new TransactionGroupTransformer())) + ->header('Content-Type', self::CONTENT_TYPE) + ; + } } diff --git a/app/Api/V2/Controllers/Transaction/Sum/BillController.php b/app/Api/V2/Controllers/Transaction/Sum/BillController.php index fc976b62f5..19428e98e2 100644 --- a/app/Api/V2/Controllers/Transaction/Sum/BillController.php +++ b/app/Api/V2/Controllers/Transaction/Sum/BillController.php @@ -29,6 +29,4 @@ use FireflyIII\Api\V2\Controllers\Controller; /** * Class BillController */ -class BillController extends Controller -{ -} +class BillController extends Controller {} diff --git a/app/Api/V2/Controllers/UserGroup/DestroyController.php b/app/Api/V2/Controllers/UserGroup/DestroyController.php index 123b9eded6..216d00b9e9 100644 --- a/app/Api/V2/Controllers/UserGroup/DestroyController.php +++ b/app/Api/V2/Controllers/UserGroup/DestroyController.php @@ -1,6 +1,5 @@ user(); + $user = auth()->user(); + // to access this function: must be group owner or sysadmin. // need owner role or system owner role to delete user group. - $access = $user->hasRoleInGroup($userGroup, UserRoleEnum::OWNER, false, true); + $access = $user->hasSpecificRoleInGroup($userGroup, UserRoleEnum::OWNER) || $user->hasRole('owner'); if (false === $access) { throw new NotFoundHttpException(); } $this->repository->destroy($userGroup); + return response()->json([], 204); } } diff --git a/app/Api/V2/Controllers/UserGroup/ShowController.php b/app/Api/V2/Controllers/UserGroup/ShowController.php index fbc441427e..3701ab81b4 100644 --- a/app/Api/V2/Controllers/UserGroup/ShowController.php +++ b/app/Api/V2/Controllers/UserGroup/ShowController.php @@ -1,6 +1,5 @@ parameters->get('limit'); + $collection = new Collection(); + $pageSize = $this->parameters->get('limit'); // if the user has the system owner role, get all. Otherwise, get only the users' groups. if (!auth()->user()->hasRole('owner')) { $collection = $this->repository->get(); @@ -72,8 +62,8 @@ class ShowController extends Controller if (auth()->user()->hasRole('owner')) { $collection = $this->repository->getAll(); } - $count = $collection->count(); - $userGroups = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $count = $collection->count(); + $userGroups = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $paginator = new LengthAwarePaginator($userGroups, $count, $pageSize, $this->parameters->get('page')); $transformer = new UserGroupTransformer(); @@ -81,22 +71,18 @@ class ShowController extends Controller return response() ->json($this->jsonApiList('user-groups', $paginator, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } - /** - * @param Request $request - * @param UserGroup $userGroup - * - * @return JsonResponse - */ - public function show(Request $request, UserGroup $userGroup): JsonResponse + public function show(UserGroup $userGroup): JsonResponse { $transformer = new UserGroupTransformer(); $transformer->setParameters($this->parameters); return response() ->api($this->jsonApiObject('user-groups', $userGroup, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } } diff --git a/app/Api/V2/Controllers/UserGroup/StoreController.php b/app/Api/V2/Controllers/UserGroup/StoreController.php index 4e74ab7c75..9b094cb3b9 100644 --- a/app/Api/V2/Controllers/UserGroup/StoreController.php +++ b/app/Api/V2/Controllers/UserGroup/StoreController.php @@ -1,6 +1,5 @@ getAll(); @@ -67,7 +58,7 @@ class StoreController extends Controller return response() ->api($this->jsonApiObject('user-groups', $userGroup, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } - } diff --git a/app/Api/V2/Controllers/UserGroup/UpdateController.php b/app/Api/V2/Controllers/UserGroup/UpdateController.php index 8630952bf6..afbcf1e9ee 100644 --- a/app/Api/V2/Controllers/UserGroup/UpdateController.php +++ b/app/Api/V2/Controllers/UserGroup/UpdateController.php @@ -1,6 +1,5 @@ getAll(); @@ -73,15 +63,10 @@ class UpdateController extends Controller return response() ->api($this->jsonApiObject('user-groups', $userGroup, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } - /** - * @param UpdateMembershipRequest $request - * @param UserGroup $userGroup - * - * @return JsonResponse - */ public function updateMembership(UpdateMembershipRequest $request, UserGroup $userGroup): JsonResponse { $all = $request->getAll(); @@ -91,6 +76,7 @@ class UpdateController extends Controller return response() ->api($this->jsonApiObject('user-groups', $userGroup, $transformer)) - ->header('Content-Type', self::CONTENT_TYPE); + ->header('Content-Type', self::CONTENT_TYPE) + ; } } diff --git a/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php b/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php index 9da06a81be..8e5daf6b28 100644 --- a/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php +++ b/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php @@ -27,24 +27,18 @@ use FireflyIII\Enums\UserRoleEnum; use FireflyIII\Models\AccountType; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; -use FireflyIII\User; -use FireflyIII\Validation\Administration\ValidatesAdministrationAccess; use Illuminate\Foundation\Http\FormRequest; -use Illuminate\Validation\Validator; /** * Class AutocompleteRequest */ class AutocompleteRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; protected array $acceptedRoles = [UserRoleEnum::MANAGE_TRANSACTIONS]; - /** - * @return array - */ public function getData(): array { $types = $this->convertString('types'); @@ -57,8 +51,6 @@ class AutocompleteRequest extends FormRequest // remove 'initial balance' and another from allowed types. its internal $array = array_diff($array, [AccountType::INITIAL_BALANCE, AccountType::RECONCILIATION]); - /** @var User $user */ - $user = auth()->user(); return [ 'types' => $array, @@ -68,9 +60,6 @@ class AutocompleteRequest extends FormRequest ]; } - /** - * @return array - */ public function rules(): array { return [ diff --git a/app/Api/V2/Request/Chart/BalanceChartRequest.php b/app/Api/V2/Request/Chart/BalanceChartRequest.php index b2e137fe35..ed440c5d96 100644 --- a/app/Api/V2/Request/Chart/BalanceChartRequest.php +++ b/app/Api/V2/Request/Chart/BalanceChartRequest.php @@ -1,6 +1,5 @@ 'required|date|after:1900-01-01|before:2099-12-31', 'end' => 'required|date|after_or_equal:start|before:2099-12-31|after:1900-01-01', 'accounts.*' => 'required|exists:accounts,id', - 'period' => sprintf('required|in:%s', join(',', config('firefly.valid_view_ranges'))), + 'period' => sprintf('required|in:%s', implode(',', config('firefly.valid_view_ranges'))), ]; } - /** - * @param Validator $validator - * - * @return void - */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + static function (Validator $validator): void { // validate transaction query data. $data = $validator->getData(); if (!array_key_exists('accounts', $data)) { $validator->errors()->add('accounts', trans('validation.filled', ['attribute' => 'accounts'])); + return; } if (!is_array($data['accounts'])) { @@ -88,5 +80,8 @@ class BalanceChartRequest extends FormRequest } } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Api/V2/Request/Chart/DashboardChartRequest.php b/app/Api/V2/Request/Chart/DashboardChartRequest.php new file mode 100644 index 0000000000..4b708a161d --- /dev/null +++ b/app/Api/V2/Request/Chart/DashboardChartRequest.php @@ -0,0 +1,85 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Api\V2\Request\Chart; + +use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; +use FireflyIII\Support\Request\ChecksLogin; +use FireflyIII\Support\Request\ConvertsDataTypes; +use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; + +/** + * Class DashboardChartRequest + */ +class DashboardChartRequest extends FormRequest +{ + use ChecksLogin; + use ConvertsDataTypes; + use ValidatesUserGroupTrait; + + /** + * Get all data from the request. + */ + public function getAll(): array + { + return [ + 'accounts' => $this->getAccountList(), + 'preselected' => $this->convertString('preselected'), + ]; + } + + /** + * The rules that the incoming request must be matched against. + */ + public function rules(): array + { + return [ + 'start' => 'required|date|after:1900-01-01|before:2099-12-31', + 'end' => 'required|date|after_or_equal:start|before:2099-12-31|after:1900-01-01', + 'preselected' => sprintf('in:%s', implode(',', config('firefly.preselected_accounts'))), + 'accounts.*' => 'exists:accounts,id', + ]; + } + + public function withValidator(Validator $validator): void + { + $validator->after( + static function (Validator $validator): void { + // validate transaction query data. + $data = $validator->getData(); + if (!array_key_exists('accounts', $data)) { + // $validator->errors()->add('accounts', trans('validation.filled', ['attribute' => 'accounts'])); + return; + } + if (!is_array($data['accounts'])) { + $validator->errors()->add('accounts', trans('validation.filled', ['attribute' => 'accounts'])); + } + } + ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } +} diff --git a/app/Api/V2/Request/Generic/DateRequest.php b/app/Api/V2/Request/Generic/DateRequest.php index 4f8eff34d8..73aff18330 100644 --- a/app/Api/V2/Request/Generic/DateRequest.php +++ b/app/Api/V2/Request/Generic/DateRequest.php @@ -35,13 +35,11 @@ use Illuminate\Foundation\Http\FormRequest; */ class DateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return array */ public function getAll(): array { @@ -53,8 +51,6 @@ class DateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { diff --git a/app/Api/V2/Request/Generic/SingleDateRequest.php b/app/Api/V2/Request/Generic/SingleDateRequest.php index c76e6df39a..a9a3465b44 100644 --- a/app/Api/V2/Request/Generic/SingleDateRequest.php +++ b/app/Api/V2/Request/Generic/SingleDateRequest.php @@ -36,13 +36,11 @@ use Illuminate\Foundation\Http\FormRequest; */ class SingleDateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data from the request. - * - * @return Carbon */ public function getDate(): Carbon { @@ -51,8 +49,6 @@ class SingleDateRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { diff --git a/app/Api/V2/Request/Model/Transaction/InfiniteListRequest.php b/app/Api/V2/Request/Model/Transaction/InfiniteListRequest.php new file mode 100644 index 0000000000..90d6df7fe0 --- /dev/null +++ b/app/Api/V2/Request/Model/Transaction/InfiniteListRequest.php @@ -0,0 +1,132 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Api\V2\Request\Model\Transaction; + +use Carbon\Carbon; +use FireflyIII\Support\Http\Api\TransactionFilter; +use FireflyIII\Support\Request\ChecksLogin; +use FireflyIII\Support\Request\ConvertsDataTypes; +use Illuminate\Foundation\Http\FormRequest; + +/** + * Class InfiniteListRequest + * Used specifically to list transactions. + */ +class InfiniteListRequest extends FormRequest +{ + use ChecksLogin; + use ConvertsDataTypes; + use TransactionFilter; + + public function buildParams(): string + { + $array = [ + 'start_row' => $this->getStartRow(), + 'end_row' => $this->getEndRow(), + ]; + + $start = $this->getStartDate(); + $end = $this->getEndDate(); + if (null !== $start && null !== $end) { + $array['start'] = $start->format('Y-m-d'); + $array['end'] = $end->format('Y-m-d'); + } + + return http_build_query($array); + } + + public function getStartRow(): int + { + $startRow = $this->convertInteger('start_row'); + + return $startRow < 0 || $startRow > 4294967296 ? 0 : $startRow; + } + + public function getEndRow(): int + { + $endRow = $this->convertInteger('end_row'); + + return $endRow <= 0 || $endRow > 4294967296 ? 100 : $endRow; + } + + public function getStartDate(): ?Carbon + { + return $this->getCarbonDate('start'); + } + + public function getEndDate(): ?Carbon + { + return $this->getCarbonDate('end'); + } + + public function getPage(): int + { + $page = $this->convertInteger('page'); + + return 0 === $page || $page > 65536 ? 1 : $page; + } + + public function getSortInstructions(): array + { + $allowed = config('firefly.sorting.allowed.transactions'); + $set = $this->get('sorting', []); + $result = []; + if (0 === count($set)) { + return []; + } + foreach ($set as $info) { + $column = $info['column'] ?? 'NOPE'; + $direction = $info['direction'] ?? 'NOPE'; + if ('asc' !== $direction && 'desc' !== $direction) { + // skip invalid direction + continue; + } + if (false === in_array($column, $allowed, true)) { + // skip invalid column + continue; + } + $result[$column] = $direction; + } + + return $result; + } + + public function getTransactionTypes(): array + { + $type = (string)$this->get('type', 'default'); + + return $this->mapTransactionTypes($type); + } + + public function rules(): array + { + return [ + 'start' => 'date', + 'end' => 'date|after:start', + 'start_row' => 'integer|min:0|max:4294967296', + 'end_row' => 'integer|min:0|max:4294967296|gt:start_row', + ]; + } +} diff --git a/app/Api/V2/Request/Model/Transaction/ListRequest.php b/app/Api/V2/Request/Model/Transaction/ListRequest.php index 8913feea10..45286d5cbf 100644 --- a/app/Api/V2/Request/Model/Transaction/ListRequest.php +++ b/app/Api/V2/Request/Model/Transaction/ListRequest.php @@ -40,9 +40,6 @@ class ListRequest extends FormRequest use ConvertsDataTypes; use TransactionFilter; - /** - * @return string - */ public function buildParams(int $pageSize): string { $array = [ @@ -56,46 +53,34 @@ class ListRequest extends FormRequest $array['start'] = $start->format('Y-m-d'); $array['end'] = $end->format('Y-m-d'); } + return http_build_query($array); } - /** - * @return int - */ public function getPage(): int { $page = $this->convertInteger('page'); + return 0 === $page || $page > 65536 ? 1 : $page; } - /** - * @return Carbon|null - */ public function getStartDate(): ?Carbon { return $this->getCarbonDate('start'); } - /** - * @return Carbon|null - */ public function getEndDate(): ?Carbon { return $this->getCarbonDate('end'); } - /** - * @return array - */ public function getTransactionTypes(): array { $type = (string)$this->get('type', 'default'); + return $this->mapTransactionTypes($type); } - /** - * @return array - */ public function rules(): array { return [ diff --git a/app/Api/V2/Request/Model/Transaction/StoreRequest.php b/app/Api/V2/Request/Model/Transaction/StoreRequest.php index 4404f6f72e..872edca91e 100644 --- a/app/Api/V2/Request/Model/Transaction/StoreRequest.php +++ b/app/Api/V2/Request/Model/Transaction/StoreRequest.php @@ -28,6 +28,7 @@ use FireflyIII\Models\UserGroup; use FireflyIII\Rules\BelongsUserGroup; use FireflyIII\Rules\IsBoolean; use FireflyIII\Rules\IsDateOrTime; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\NullArrayObject; use FireflyIII\Support\Request\AppendsLocationData; use FireflyIII\Support\Request\ChecksLogin; @@ -37,6 +38,7 @@ use FireflyIII\Validation\CurrencyValidation; use FireflyIII\Validation\GroupValidation; use FireflyIII\Validation\TransactionValidation; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -50,19 +52,18 @@ use Illuminate\Validation\Validator; */ class StoreRequest extends FormRequest { - use ChecksLogin; - use ConvertsDataTypes; - - use TransactionValidation; - use GroupValidation; - use CurrencyValidation; use AppendsLocationData; + use ChecksLogin; + + use ConvertsDataTypes; + use CurrencyValidation; + use GroupValidation; + use TransactionValidation; + protected array $acceptedRoles = [UserRoleEnum::MANAGE_TRANSACTIONS]; /** * Get all data. - * - * @return array */ public function getAll(): array { @@ -75,101 +76,100 @@ class StoreRequest extends FormRequest 'fire_webhooks' => $this->boolean('fire_webhooks', true), 'transactions' => $this->getTransactionData(), ]; - // TODO include location and ability to process it. } /** * Get transaction data. - * - * @return array */ private function getTransactionData(): array { $return = []; + /** * @var array $transaction */ foreach ($this->get('transactions') as $transaction) { $object = new NullArrayObject($transaction); - $return[] = [ - 'type' => $this->clearString($object['type'], false), - 'date' => $this->dateFromValue($object['date']), - 'order' => $this->integerFromValue((string)$object['order']), + $result = [ + 'type' => $this->clearString($object['type']), + 'date' => $this->dateFromValue($object['date']), + 'order' => $this->integerFromValue((string)$object['order']), 'currency_id' => $this->integerFromValue((string)$object['currency_id']), - 'currency_code' => $this->clearString((string)$object['currency_code'], false), + 'currency_code' => $this->clearString((string)$object['currency_code']), // foreign currency info: 'foreign_currency_id' => $this->integerFromValue((string)$object['foreign_currency_id']), - 'foreign_currency_code' => $this->clearString((string)$object['foreign_currency_code'], false), + 'foreign_currency_code' => $this->clearString((string)$object['foreign_currency_code']), // amount and foreign amount. Cannot be 0. - 'amount' => $this->clearString((string)$object['amount'], false), - 'foreign_amount' => $this->clearString((string)$object['foreign_amount'], false), + 'amount' => $this->clearString((string)$object['amount']), + 'foreign_amount' => $this->clearString((string)$object['foreign_amount']), // description. - 'description' => $this->clearString($object['description'], false), + 'description' => $this->clearString($object['description']), // source of transaction. If everything is null, assume cash account. 'source_id' => $this->integerFromValue((string)$object['source_id']), - 'source_name' => $this->clearString((string)$object['source_name'], false), - 'source_iban' => $this->clearString((string)$object['source_iban'], false), - 'source_number' => $this->clearString((string)$object['source_number'], false), - 'source_bic' => $this->clearString((string)$object['source_bic'], false), + 'source_name' => $this->clearString((string)$object['source_name']), + 'source_iban' => $this->clearString((string)$object['source_iban']), + 'source_number' => $this->clearString((string)$object['source_number']), + 'source_bic' => $this->clearString((string)$object['source_bic']), // destination of transaction. If everything is null, assume cash account. 'destination_id' => $this->integerFromValue((string)$object['destination_id']), - 'destination_name' => $this->clearString((string)$object['destination_name'], false), - 'destination_iban' => $this->clearString((string)$object['destination_iban'], false), - 'destination_number' => $this->clearString((string)$object['destination_number'], false), - 'destination_bic' => $this->clearString((string)$object['destination_bic'], false), + 'destination_name' => $this->clearString((string)$object['destination_name']), + 'destination_iban' => $this->clearString((string)$object['destination_iban']), + 'destination_number' => $this->clearString((string)$object['destination_number']), + 'destination_bic' => $this->clearString((string)$object['destination_bic']), // budget info 'budget_id' => $this->integerFromValue((string)$object['budget_id']), - 'budget_name' => $this->clearString((string)$object['budget_name'], false), + 'budget_name' => $this->clearString((string)$object['budget_name']), // category info 'category_id' => $this->integerFromValue((string)$object['category_id']), - 'category_name' => $this->clearString((string)$object['category_name'], false), + 'category_name' => $this->clearString((string)$object['category_name']), // journal bill reference. Optional. Will only work for withdrawals 'bill_id' => $this->integerFromValue((string)$object['bill_id']), - 'bill_name' => $this->clearString((string)$object['bill_name'], false), + 'bill_name' => $this->clearString((string)$object['bill_name']), // piggy bank reference. Optional. Will only work for transfers 'piggy_bank_id' => $this->integerFromValue((string)$object['piggy_bank_id']), - 'piggy_bank_name' => $this->clearString((string)$object['piggy_bank_name'], false), + 'piggy_bank_name' => $this->clearString((string)$object['piggy_bank_name']), // some other interesting properties 'reconciled' => $this->convertBoolean((string)$object['reconciled']), - 'notes' => $this->clearString((string)$object['notes']), + 'notes' => $this->clearStringKeepNewlines((string)$object['notes']), 'tags' => $this->arrayFromValue($object['tags']), // all custom fields: - 'internal_reference' => $this->clearString((string)$object['internal_reference'], false), - 'external_id' => $this->clearString((string)$object['external_id'], false), + 'internal_reference' => $this->clearString((string)$object['internal_reference']), + 'external_id' => $this->clearString((string)$object['external_id']), 'original_source' => sprintf('ff3-v%s|api-v%s', config('firefly.version'), config('firefly.api_version')), 'recurrence_id' => $this->integerFromValue($object['recurrence_id']), - 'bunq_payment_id' => $this->clearString((string)$object['bunq_payment_id'], false), - 'external_url' => $this->clearString((string)$object['external_url'], false), + 'bunq_payment_id' => $this->clearString((string)$object['bunq_payment_id']), + 'external_url' => $this->clearString((string)$object['external_url']), - 'sepa_cc' => $this->clearString((string)$object['sepa_cc'], false), - 'sepa_ct_op' => $this->clearString((string)$object['sepa_ct_op'], false), - 'sepa_ct_id' => $this->clearString((string)$object['sepa_ct_id'], false), - 'sepa_db' => $this->clearString((string)$object['sepa_db'], false), - 'sepa_country' => $this->clearString((string)$object['sepa_country'], false), - 'sepa_ep' => $this->clearString((string)$object['sepa_ep'], false), - 'sepa_ci' => $this->clearString((string)$object['sepa_ci'], false), - 'sepa_batch_id' => $this->clearString((string)$object['sepa_batch_id'], false), + 'sepa_cc' => $this->clearString((string)$object['sepa_cc']), + 'sepa_ct_op' => $this->clearString((string)$object['sepa_ct_op']), + 'sepa_ct_id' => $this->clearString((string)$object['sepa_ct_id']), + 'sepa_db' => $this->clearString((string)$object['sepa_db']), + 'sepa_country' => $this->clearString((string)$object['sepa_country']), + 'sepa_ep' => $this->clearString((string)$object['sepa_ep']), + 'sepa_ci' => $this->clearString((string)$object['sepa_ci']), + 'sepa_batch_id' => $this->clearString((string)$object['sepa_batch_id']), // custom date fields. Must be Carbon objects. Presence is optional. - 'interest_date' => $this->dateFromValue($object['interest_date']), - 'book_date' => $this->dateFromValue($object['book_date']), - 'process_date' => $this->dateFromValue($object['process_date']), - 'due_date' => $this->dateFromValue($object['due_date']), - 'payment_date' => $this->dateFromValue($object['payment_date']), - 'invoice_date' => $this->dateFromValue($object['invoice_date']), - + 'interest_date' => $this->dateFromValue($object['interest_date']), + 'book_date' => $this->dateFromValue($object['book_date']), + 'process_date' => $this->dateFromValue($object['process_date']), + 'due_date' => $this->dateFromValue($object['due_date']), + 'payment_date' => $this->dateFromValue($object['payment_date']), + 'invoice_date' => $this->dateFromValue($object['invoice_date']), ]; + $result = $this->addFromromTransactionStore($transaction, $result); + $return[] = $result; } return $return; @@ -177,8 +177,6 @@ class StoreRequest extends FormRequest /** * The rules that the incoming request must be matched against. - * - * @return array */ public function rules(): array { @@ -191,7 +189,7 @@ class StoreRequest extends FormRequest return [ // basic fields for group: - 'group_title' => 'between:1,1000|nullable', + 'group_title' => 'min:1|max:1000|nullable', 'error_if_duplicate_hash' => [new IsBoolean()], 'apply_rules' => [new IsBoolean()], @@ -207,40 +205,41 @@ class StoreRequest extends FormRequest 'transactions.*.foreign_currency_code' => 'min:3|max:51|exists:transaction_currencies,code|nullable', // amount - 'transactions.*.amount' => 'required|numeric|gt:0', - 'transactions.*.foreign_amount' => 'numeric', + 'transactions.*.amount' => ['required', new IsValidPositiveAmount()], + 'transactions.*.foreign_amount' => ['nullable', new IsValidPositiveAmount()], // description - 'transactions.*.description' => 'nullable|between:1,1000', + 'transactions.*.description' => 'nullable|min:1|max:1000', // source of transaction 'transactions.*.source_id' => ['numeric', 'nullable', new BelongsUserGroup($userGroup)], - 'transactions.*.source_name' => 'between:1,255|nullable', - 'transactions.*.source_iban' => 'between:1,255|nullable|iban', - 'transactions.*.source_number' => 'between:1,255|nullable', - 'transactions.*.source_bic' => 'between:1,255|nullable|bic', + 'transactions.*.source_name' => 'min:1|max:255|nullable', + 'transactions.*.source_iban' => 'min:1|max:255|nullable|iban', + 'transactions.*.source_number' => 'min:1|max:255|nullable', + 'transactions.*.source_bic' => 'min:1|max:255|nullable|bic', // destination of transaction 'transactions.*.destination_id' => ['numeric', 'nullable', new BelongsUserGroup($userGroup)], - 'transactions.*.destination_name' => 'between:1,255|nullable', - 'transactions.*.destination_iban' => 'between:1,255|nullable|iban', - 'transactions.*.destination_number' => 'between:1,255|nullable', - 'transactions.*.destination_bic' => 'between:1,255|nullable|bic', + 'transactions.*.destination_name' => 'min:1|max:255|nullable', + 'transactions.*.destination_iban' => 'min:1|max:255|nullable|iban', + 'transactions.*.destination_number' => 'min:1|max:255|nullable', + 'transactions.*.destination_bic' => 'min:1|max:255|nullable|bic', // budget, category, bill and piggy 'transactions.*.budget_id' => ['mustExist:budgets,id', new BelongsUserGroup($userGroup)], - 'transactions.*.budget_name' => ['between:1,255', 'nullable', new BelongsUserGroup($userGroup)], + 'transactions.*.budget_name' => ['min:1', 'max:255', 'nullable', new BelongsUserGroup($userGroup)], 'transactions.*.category_id' => ['mustExist:categories,id', new BelongsUserGroup($userGroup), 'nullable'], - 'transactions.*.category_name' => 'between:1,255|nullable', + 'transactions.*.category_name' => 'min:1|max:255|nullable', 'transactions.*.bill_id' => ['numeric', 'nullable', 'mustExist:bills,id', new BelongsUserGroup($userGroup)], - 'transactions.*.bill_name' => ['between:1,255', 'nullable', new BelongsUserGroup($userGroup)], + 'transactions.*.bill_name' => ['min:1', 'max:255', 'nullable', new BelongsUserGroup($userGroup)], 'transactions.*.piggy_bank_id' => ['numeric', 'nullable', 'mustExist:piggy_banks,id', new BelongsUserGroup($userGroup)], - 'transactions.*.piggy_bank_name' => ['between:1,255', 'nullable', new BelongsUserGroup($userGroup)], + 'transactions.*.piggy_bank_name' => ['min:1', 'max:255', 'nullable', new BelongsUserGroup($userGroup)], // other interesting fields 'transactions.*.reconciled' => [new IsBoolean()], - 'transactions.*.notes' => 'min:1|max:50000|nullable', - 'transactions.*.tags' => 'between:0,255', + 'transactions.*.notes' => 'min:1|max:32768|nullable', + 'transactions.*.tags' => 'min:0|max:255', + 'transactions.*.tags.*' => 'min:0|max:255', // meta info fields 'transactions.*.internal_reference' => 'min:1|max:255|nullable', @@ -266,24 +265,23 @@ class StoreRequest extends FormRequest 'transactions.*.due_date' => 'date|nullable', 'transactions.*.payment_date' => 'date|nullable', 'transactions.*.invoice_date' => 'date|nullable', + + // TODO include location and ability to process it. ]; } /** * Configure the validator instance. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); + /** @var UserGroup $userGroup */ $userGroup = $this->getUserGroup(); $validator->after( - function (Validator $validator) use ($user, $userGroup) { + function (Validator $validator) use ($user, $userGroup): void { // must be valid array. $this->validateTransactionArray($validator); // does not need group validation. @@ -311,7 +309,8 @@ class StoreRequest extends FormRequest $this->validateGroupDescription($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } - - } diff --git a/app/Api/V2/Request/Model/Transaction/UpdateRequest.php b/app/Api/V2/Request/Model/Transaction/UpdateRequest.php new file mode 100644 index 0000000000..b5a10e4e97 --- /dev/null +++ b/app/Api/V2/Request/Model/Transaction/UpdateRequest.php @@ -0,0 +1,366 @@ +debug(sprintf('Now in %s', __METHOD__)); + $this->integerFields = ['order', 'currency_id', 'foreign_currency_id', 'transaction_journal_id', 'source_id', 'destination_id', 'budget_id', 'category_id', 'bill_id', 'recurrence_id']; + $this->dateFields = ['date', 'interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date']; + $this->textareaFields = ['notes']; + // not really floats, for validation. + $this->floatFields = ['amount', 'foreign_amount']; + $this->stringFields = ['type', 'currency_code', 'foreign_currency_code', 'description', 'source_name', 'source_iban', 'source_number', 'source_bic', 'destination_name', 'destination_iban', 'destination_number', 'destination_bic', 'budget_name', 'category_name', 'bill_name', 'internal_reference', 'external_id', 'bunq_payment_id', 'sepa_cc', 'sepa_ct_op', 'sepa_ct_id', 'sepa_db', 'sepa_country', 'sepa_ep', 'sepa_ci', 'sepa_batch_id', 'external_url']; + $this->booleanFields = ['reconciled']; + $this->arrayFields = ['tags']; + $data = []; + if ($this->has('transactions')) { + $data['transactions'] = $this->getTransactionData(); + } + if ($this->has('apply_rules')) { + $data['apply_rules'] = $this->boolean('apply_rules', true); + } + if ($this->has('fire_webhooks')) { + $data['fire_webhooks'] = $this->boolean('fire_webhooks', true); + } + if ($this->has('group_title')) { + $data['group_title'] = $this->convertString('group_title'); + } + + return $data; + } + + /** + * Get transaction data. + * + * @throws FireflyException + */ + private function getTransactionData(): array + { + app('log')->debug(sprintf('Now in %s', __METHOD__)); + $return = []; + + /** @var null|array $transactions */ + $transactions = $this->get('transactions'); + + if (!is_countable($transactions)) { + return $return; + } + + /** @var null|array $transaction */ + foreach ($transactions as $transaction) { + if (!is_array($transaction)) { + throw new FireflyException('Invalid data submitted: transaction is not array.'); + } + // default response is to update nothing in the transaction: + $current = []; + $current = $this->getIntegerData($current, $transaction); + $current = $this->getStringData($current, $transaction); + $current = $this->getNlStringData($current, $transaction); + $current = $this->getDateData($current, $transaction); + $current = $this->getBooleanData($current, $transaction); + $current = $this->getArrayData($current, $transaction); + $current = $this->getFloatData($current, $transaction); + $return[] = $current; + } + + return $return; + } + + /** + * For each field, add it to the array if a reference is present in the request: + * + * @param array $current + * @param array $transaction + */ + private function getIntegerData(array $current, array $transaction): array + { + foreach ($this->integerFields as $fieldName) { + if (array_key_exists($fieldName, $transaction)) { + $current[$fieldName] = $this->integerFromValue((string)$transaction[$fieldName]); + } + } + + return $current; + } + + /** + * @param array $current + * @param array $transaction + */ + private function getStringData(array $current, array $transaction): array + { + foreach ($this->stringFields as $fieldName) { + if (array_key_exists($fieldName, $transaction)) { + $current[$fieldName] = $this->clearString((string)$transaction[$fieldName]); + } + } + + return $current; + } + + /** + * @param array $current + * @param array $transaction + */ + private function getNlStringData(array $current, array $transaction): array + { + foreach ($this->textareaFields as $fieldName) { + if (array_key_exists($fieldName, $transaction)) { + $current[$fieldName] = $this->clearStringKeepNewlines((string)$transaction[$fieldName]); // keep newlines + } + } + + return $current; + } + + /** + * @param array $current + * @param array $transaction + */ + private function getDateData(array $current, array $transaction): array + { + foreach ($this->dateFields as $fieldName) { + app('log')->debug(sprintf('Now at date field %s', $fieldName)); + if (array_key_exists($fieldName, $transaction)) { + app('log')->debug(sprintf('New value: "%s"', (string)$transaction[$fieldName])); + $current[$fieldName] = $this->dateFromValue((string)$transaction[$fieldName]); + } + } + + return $current; + } + + /** + * @param array $current + * @param array $transaction + */ + private function getBooleanData(array $current, array $transaction): array + { + foreach ($this->booleanFields as $fieldName) { + if (array_key_exists($fieldName, $transaction)) { + $current[$fieldName] = $this->convertBoolean((string)$transaction[$fieldName]); + } + } + + return $current; + } + + /** + * @param array $current + * @param array $transaction + */ + private function getArrayData(array $current, array $transaction): array + { + foreach ($this->arrayFields as $fieldName) { + if (array_key_exists($fieldName, $transaction)) { + $current[$fieldName] = $this->arrayFromValue($transaction[$fieldName]); + } + } + + return $current; + } + + /** + * @param array $current + * @param array $transaction + */ + private function getFloatData(array $current, array $transaction): array + { + foreach ($this->floatFields as $fieldName) { + if (array_key_exists($fieldName, $transaction)) { + $value = $transaction[$fieldName]; + if (is_float($value)) { + $current[$fieldName] = sprintf('%.12f', $value); + } + if (!is_float($value)) { + $current[$fieldName] = (string)$value; + } + } + } + + return $current; + } + + /** + * The rules that the incoming request must be matched against. + */ + public function rules(): array + { + app('log')->debug(sprintf('Now in %s', __METHOD__)); + $validProtocols = config('firefly.valid_url_protocols'); + + return [ + // basic fields for group: + 'group_title' => 'min:1|max:1000|nullable', + 'apply_rules' => [new IsBoolean()], + + // transaction rules (in array for splits): + 'transactions.*.type' => 'in:withdrawal,deposit,transfer,opening-balance,reconciliation', + 'transactions.*.date' => [new IsDateOrTime()], + 'transactions.*.order' => 'numeric|min:0', + + // group id: + 'transactions.*.transaction_journal_id' => ['nullable', 'numeric', new BelongsUser()], + + // currency info + 'transactions.*.currency_id' => 'numeric|exists:transaction_currencies,id|nullable', + 'transactions.*.currency_code' => 'min:3|max:51|exists:transaction_currencies,code|nullable', + 'transactions.*.foreign_currency_id' => 'nullable|numeric|exists:transaction_currencies,id', + 'transactions.*.foreign_currency_code' => 'nullable|min:3|max:51|exists:transaction_currencies,code', + + // amount + 'transactions.*.amount' => ['nullable', new IsValidPositiveAmount()], + 'transactions.*.foreign_amount' => ['nullable', new IsValidZeroOrMoreAmount()], + + // description + 'transactions.*.description' => 'nullable|min:1|max:1000', + + // source of transaction + 'transactions.*.source_id' => ['numeric', 'nullable', new BelongsUser()], + 'transactions.*.source_name' => 'min:1|max:255|nullable', + + // destination of transaction + 'transactions.*.destination_id' => ['numeric', 'nullable', new BelongsUser()], + 'transactions.*.destination_name' => 'min:1|max:255|nullable', + + // budget, category, bill and piggy + 'transactions.*.budget_id' => ['mustExist:budgets,id', new BelongsUser(), 'nullable'], + 'transactions.*.budget_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], + 'transactions.*.category_id' => ['mustExist:categories,id', new BelongsUser(), 'nullable'], + 'transactions.*.category_name' => 'min:1|max:255|nullable', + 'transactions.*.bill_id' => ['numeric', 'nullable', 'mustExist:bills,id', new BelongsUser()], + 'transactions.*.bill_name' => ['min:1', 'max:255', 'nullable', new BelongsUser()], + + // other interesting fields + 'transactions.*.reconciled' => [new IsBoolean()], + 'transactions.*.notes' => 'min:1|max:32768|nullable', + 'transactions.*.tags' => 'min:0|max:255|nullable', + 'transactions.*.tags.*' => 'min:0|max:255', + + // meta info fields + 'transactions.*.internal_reference' => 'min:1|max:255|nullable', + 'transactions.*.external_id' => 'min:1|max:255|nullable', + 'transactions.*.recurrence_id' => 'min:1|max:255|nullable', + 'transactions.*.bunq_payment_id' => 'min:1|max:255|nullable', + 'transactions.*.external_url' => sprintf('min:1|max:255|nullable|url:%s', $validProtocols), + + // SEPA fields: + 'transactions.*.sepa_cc' => 'min:1|max:255|nullable', + 'transactions.*.sepa_ct_op' => 'min:1|max:255|nullable', + 'transactions.*.sepa_ct_id' => 'min:1|max:255|nullable', + 'transactions.*.sepa_db' => 'min:1|max:255|nullable', + 'transactions.*.sepa_country' => 'min:1|max:255|nullable', + 'transactions.*.sepa_ep' => 'min:1|max:255|nullable', + 'transactions.*.sepa_ci' => 'min:1|max:255|nullable', + 'transactions.*.sepa_batch_id' => 'min:1|max:255|nullable', + + // dates + 'transactions.*.interest_date' => 'date|nullable', + 'transactions.*.book_date' => 'date|nullable', + 'transactions.*.process_date' => 'date|nullable', + 'transactions.*.due_date' => 'date|nullable', + 'transactions.*.payment_date' => 'date|nullable', + 'transactions.*.invoice_date' => 'date|nullable', + ]; + } + + /** + * Configure the validator instance. + */ + public function withValidator(Validator $validator): void + { + app('log')->debug('Now in withValidator'); + + /** @var TransactionGroup $transactionGroup */ + $transactionGroup = $this->route()->parameter('userGroupTransaction'); + $validator->after( + function (Validator $validator) use ($transactionGroup): void { + // if more than one, verify that there are journal ID's present. + $this->validateJournalIds($validator, $transactionGroup); + + // all transaction types must be equal: + $this->validateTransactionTypesForUpdate($validator); + + // user wants to update a reconciled transaction. + // source, destination, amount + foreign_amount cannot be changed + // and must be omitted from the request. + $this->preventUpdateReconciled($validator, $transactionGroup); + + // validate source/destination is equal, depending on the transaction journal type. + $this->validateEqualAccountsForUpdate($validator, $transactionGroup); + + // see method: + // $this->preventNoAccountInfo($validator, ); + + // validate that the currency fits the source and/or destination account. + // validate all account info + $this->validateAccountInformationUpdate($validator, $transactionGroup); + } + ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } +} diff --git a/app/Api/V2/Request/UserGroup/StoreRequest.php b/app/Api/V2/Request/UserGroup/StoreRequest.php index 21e5a76719..38685c84d9 100644 --- a/app/Api/V2/Request/UserGroup/StoreRequest.php +++ b/app/Api/V2/Request/UserGroup/StoreRequest.php @@ -1,6 +1,5 @@ 'unique:user_groups,title|required|min:2|max:255', + 'title' => 'unique:user_groups,title|required|min:1|max:255', ]; } } diff --git a/app/Api/V2/Request/UserGroup/UpdateMembershipRequest.php b/app/Api/V2/Request/UserGroup/UpdateMembershipRequest.php index 3a671268d8..c4a2fa9b81 100644 --- a/app/Api/V2/Request/UserGroup/UpdateMembershipRequest.php +++ b/app/Api/V2/Request/UserGroup/UpdateMembershipRequest.php @@ -1,6 +1,5 @@ value; } + return [ 'id' => 'exists:users,id|required_without:email', 'email' => 'exists:users,email|required_without:id', - 'roles.*' => 'required|in:' . join(',', $validRoles), + 'roles.*' => 'required|in:'.implode(',', $validRoles), ]; } } diff --git a/app/Api/V2/Request/UserGroup/UpdateRequest.php b/app/Api/V2/Request/UserGroup/UpdateRequest.php index d3b0481fcc..c0e0e50bb4 100644 --- a/app/Api/V2/Request/UserGroup/UpdateRequest.php +++ b/app/Api/V2/Request/UserGroup/UpdateRequest.php @@ -1,6 +1,5 @@ route()->parameter('userGroup'); + return [ - 'title' => sprintf('required|min:2|max:255|unique:user_groups,title,%d', $userGroup->id), + 'title' => sprintf('required|min:1|max:255|unique:user_groups,title,%d', $userGroup->id), ]; } } diff --git a/app/Api/V2/Response/Sum/AutoSum.php b/app/Api/V2/Response/Sum/AutoSum.php index 5953c7ed71..6ed1faa73e 100644 --- a/app/Api/V2/Response/Sum/AutoSum.php +++ b/app/Api/V2/Response/Sum/AutoSum.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Api\V2\Response\Sum; -use Closure; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; use Illuminate\Database\Eloquent\Model; @@ -38,24 +37,21 @@ use Illuminate\Support\Collection; class AutoSum { /** - * @param Collection $objects - * @param Closure $getCurrency - * @param Closure $getSum - * - * @return array * @throws FireflyException */ - public function autoSum(Collection $objects, Closure $getCurrency, Closure $getSum): array + public function autoSum(Collection $objects, \Closure $getCurrency, \Closure $getSum): array { $return = []; + /** @var Model $object */ foreach ($objects as $object) { /** @var TransactionCurrency $currency */ - $currency = $getCurrency($object); - /** @var string $amount */ - $amount = $getSum($object); + $currency = $getCurrency($object); - $return[$currency->id] = $return[$currency->id] ?? [ + /** @var string $amount */ + $amount = $getSum($object); + + $return[$currency->id] ??= [ 'id' => (string)$currency->id, 'name' => $currency->name, 'symbol' => $currency->symbol, @@ -68,6 +64,7 @@ class AutoSum } var_dump(array_values($return)); + throw new FireflyException('Not implemented'); } } diff --git a/app/Console/Commands/Correction/CorrectAmounts.php b/app/Console/Commands/Correction/CorrectAmounts.php index a35b941aaa..cc7d11042b 100644 --- a/app/Console/Commands/Correction/CorrectAmounts.php +++ b/app/Console/Commands/Correction/CorrectAmounts.php @@ -34,7 +34,6 @@ use FireflyIII\Models\PiggyBankRepetition; use FireflyIII\Models\RecurrenceTransaction; use FireflyIII\Models\RuleTrigger; use Illuminate\Console\Command; -use ValueError; /** * Class ReportSkeleton @@ -46,9 +45,6 @@ class CorrectAmounts extends Command protected $description = 'This command makes sure positive and negative amounts are recorded correctly.'; protected $signature = 'firefly-iii:fix-amount-pos-neg'; - /** - * @return int - */ public function handle(): int { // auto budgets must be positive @@ -70,13 +66,9 @@ class CorrectAmounts extends Command // rule_triggers must be positive or zero (amount_less, amount_more, amount_is) $this->fixRuleTriggers(); - return 0; } - /** - * @return void - */ private function fixAutoBudgets(): void { $set = AutoBudget::where('amount', '<', 0)->get(); @@ -86,17 +78,15 @@ class CorrectAmounts extends Command return; } + /** @var AutoBudget $item */ foreach ($set as $item) { - $item->amount = app('steam')->positive((string)$item->amount); + $item->amount = app('steam')->positive($item->amount); $item->save(); } $this->friendlyInfo(sprintf('Corrected %d auto budget amount(s).', $count)); } - /** - * @return void - */ private function fixAvailableBudgets(): void { $set = AvailableBudget::where('amount', '<', 0)->get(); @@ -106,17 +96,15 @@ class CorrectAmounts extends Command return; } + /** @var AvailableBudget $item */ foreach ($set as $item) { - $item->amount = app('steam')->positive((string)$item->amount); + $item->amount = app('steam')->positive($item->amount); $item->save(); } $this->friendlyInfo(sprintf('Corrected %d available budget amount(s).', $count)); } - /** - * @return void - */ private function fixBills(): void { $set = Bill::where('amount_min', '<', 0)->orWhere('amount_max', '<', 0)->get(); @@ -126,18 +114,16 @@ class CorrectAmounts extends Command return; } + /** @var Bill $item */ foreach ($set as $item) { - $item->amount_min = app('steam')->positive((string)$item->amount_min); - $item->amount_max = app('steam')->positive((string)$item->amount_max); + $item->amount_min = app('steam')->positive($item->amount_min); + $item->amount_max = app('steam')->positive($item->amount_max); $item->save(); } $this->friendlyInfo(sprintf('Corrected %d bill amount(s).', $count)); } - /** - * @return void - */ private function fixBudgetLimits(): void { $set = BudgetLimit::where('amount', '<', 0)->get(); @@ -147,17 +133,15 @@ class CorrectAmounts extends Command return; } + /** @var BudgetLimit $item */ foreach ($set as $item) { - $item->amount = app('steam')->positive((string)$item->amount); + $item->amount = app('steam')->positive($item->amount); $item->save(); } $this->friendlyInfo(sprintf('Corrected %d budget limit amount(s).', $count)); } - /** - * @return void - */ private function fixExchangeRates(): void { $set = CurrencyExchangeRate::where('rate', '<', 0)->get(); @@ -167,17 +151,15 @@ class CorrectAmounts extends Command return; } - /** @var BudgetLimit $item */ + + /** @var CurrencyExchangeRate $item */ foreach ($set as $item) { - $item->rate = app('steam')->positive((string)$item->rate); + $item->rate = app('steam')->positive($item->rate); $item->save(); } $this->friendlyInfo(sprintf('Corrected %d currency exchange rate(s).', $count)); } - /** - * @return void - */ private function fixRepetitions(): void { $set = PiggyBankRepetition::where('currentamount', '<', 0)->get(); @@ -187,17 +169,15 @@ class CorrectAmounts extends Command return; } + /** @var PiggyBankRepetition $item */ foreach ($set as $item) { - $item->currentamount = app('steam')->positive((string)$item->currentamount); + $item->currentamount = app('steam')->positive($item->currentamount); $item->save(); } $this->friendlyInfo(sprintf('Corrected %d piggy bank repetition amount(s).', $count)); } - /** - * @return void - */ private function fixPiggyBanks(): void { $set = PiggyBank::where('targetamount', '<', 0)->get(); @@ -207,59 +187,58 @@ class CorrectAmounts extends Command return; } - /** @var PiggyBankRepetition $item */ + + /** @var PiggyBank $item */ foreach ($set as $item) { - $item->targetamount = app('steam')->positive((string)$item->targetamount); + $item->targetamount = app('steam')->positive($item->targetamount); $item->save(); } $this->friendlyInfo(sprintf('Corrected %d piggy bank amount(s).', $count)); } - /** - * @return void - */ private function fixRecurrences(): void { $set = RecurrenceTransaction::where('amount', '<', 0) - ->orWhere('foreign_amount', '<', 0) - ->get(); + ->orWhere('foreign_amount', '<', 0) + ->get() + ; $count = $set->count(); if (0 === $count) { $this->friendlyPositive('All recurring transaction amounts are positive.'); return; } - /** @var PiggyBankRepetition $item */ + + /** @var RecurrenceTransaction $item */ foreach ($set as $item) { - $item->amount = app('steam')->positive((string)$item->amount); - $item->foreign_amount = app('steam')->positive((string)$item->foreign_amount); + $item->amount = app('steam')->positive($item->amount); + $item->foreign_amount = app('steam')->positive($item->foreign_amount); $item->save(); } $this->friendlyInfo(sprintf('Corrected %d recurring transaction amount(s).', $count)); } - /** - * @return void - */ private function fixRuleTriggers(): void { $set = RuleTrigger::whereIn('trigger_type', ['amount_less', 'amount_more', 'amount_is'])->get(); $fixed = 0; + /** @var RuleTrigger $item */ foreach ($set as $item) { // basic check: $check = 0; + try { $check = bccomp((string)$item->trigger_value, '0'); - } catch (ValueError $e) { + } catch (\ValueError $e) { $this->friendlyError(sprintf('Rule #%d contained invalid %s-trigger "%s". The trigger has been removed, and the rule is disabled.', $item->rule_id, $item->trigger_type, $item->trigger_value)); $item->rule->active = false; $item->rule->save(); $item->forceDelete(); } if (-1 === $check) { - $fixed++; - $item->trigger_value = app('steam')->positive((string)$item->trigger_value); + ++$fixed; + $item->trigger_value = app('steam')->positive($item->trigger_value); $item->save(); } } @@ -270,5 +249,4 @@ class CorrectAmounts extends Command } $this->friendlyInfo(sprintf('Corrected %d rule trigger amount(s).', $fixed)); } - } diff --git a/app/Console/Commands/Correction/CorrectDatabase.php b/app/Console/Commands/Correction/CorrectDatabase.php index e7db8d30c5..8c22aaeab5 100644 --- a/app/Console/Commands/Correction/CorrectDatabase.php +++ b/app/Console/Commands/Correction/CorrectDatabase.php @@ -23,15 +23,11 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; -use Artisan; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use Illuminate\Console\Command; -use Schema; /** * Class CorrectDatabase - * - */ class CorrectDatabase extends Command { @@ -46,7 +42,7 @@ class CorrectDatabase extends Command public function handle(): int { // if table does not exist, return false - if (!Schema::hasTable('users')) { + if (!\Schema::hasTable('users')) { $this->friendlyError('No "users"-table, will not continue.'); return 1; diff --git a/app/Console/Commands/Correction/CorrectOpeningBalanceCurrencies.php b/app/Console/Commands/Correction/CorrectOpeningBalanceCurrencies.php index 6fb2ea7116..a1dcf6c476 100644 --- a/app/Console/Commands/Correction/CorrectOpeningBalanceCurrencies.php +++ b/app/Console/Commands/Correction/CorrectOpeningBalanceCurrencies.php @@ -47,13 +47,12 @@ class CorrectOpeningBalanceCurrencies extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { $journals = $this->getJournals(); $count = 0; + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $count += $this->correctJournal($journal); @@ -71,22 +70,15 @@ class CorrectOpeningBalanceCurrencies extends Command return 0; } - /** - * @return Collection - */ private function getJournals(): Collection { - /** @var Collection */ + // @var Collection return TransactionJournal::leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') - ->whereNull('transaction_journals.deleted_at') - ->where('transaction_types.type', TransactionType::OPENING_BALANCE)->get(['transaction_journals.*']); + ->whereNull('transaction_journals.deleted_at') + ->where('transaction_types.type', TransactionType::OPENING_BALANCE)->get(['transaction_journals.*']) + ; } - /** - * @param TransactionJournal $journal - * - * @return int - */ private function correctJournal(TransactionJournal $journal): int { // get the asset account for this opening balance: @@ -103,17 +95,13 @@ class CorrectOpeningBalanceCurrencies extends Command return $this->setCorrectCurrency($account, $journal); } - /** - * @param TransactionJournal $journal - * - * @return Account|null - */ private function getAccount(TransactionJournal $journal): ?Account { $transactions = $journal->transactions()->get(); + /** @var Transaction $transaction */ foreach ($transactions as $transaction) { - /** @var Account $account */ + /** @var null|Account $account */ $account = $transaction->account()->first(); if (null !== $account && AccountType::INITIAL_BALANCE !== $account->accountType()->first()->type) { return $account; @@ -123,45 +111,34 @@ class CorrectOpeningBalanceCurrencies extends Command return null; } - /** - * @param Account $account - * @param TransactionJournal $journal - * - * @return int - */ private function setCorrectCurrency(Account $account, TransactionJournal $journal): int { $currency = $this->getCurrency($account); $count = 0; - if ((int)$journal->transaction_currency_id !== (int)$currency->id) { + if ((int)$journal->transaction_currency_id !== $currency->id) { $journal->transaction_currency_id = $currency->id; $journal->save(); - $count = 1; + $count = 1; } /** @var Transaction $transaction */ foreach ($journal->transactions as $transaction) { - if ((int)$transaction->transaction_currency_id !== (int)$currency->id) { + if ($transaction->transaction_currency_id !== $currency->id) { $transaction->transaction_currency_id = $currency->id; $transaction->save(); - $count = 1; + $count = 1; } } return $count; } - /** - * @param Account $account - * - * @return TransactionCurrency - */ private function getCurrency(Account $account): TransactionCurrency { /** @var AccountRepositoryInterface $repos */ $repos = app(AccountRepositoryInterface::class); $repos->setUser($account->user); - return $repos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUser($account->user); + return $repos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUserGroup($account->userGroup); } } diff --git a/app/Console/Commands/Correction/CorrectionSkeleton.php.stub b/app/Console/Commands/Correction/CorrectionSkeleton.php.stub index 7d25d8ff5e..801dd0d845 100644 --- a/app/Console/Commands/Correction/CorrectionSkeleton.php.stub +++ b/app/Console/Commands/Correction/CorrectionSkeleton.php.stub @@ -10,17 +10,8 @@ use Illuminate\Console\Command; */ class CorrectionSkeleton extends Command { - /** - * The console command description. - * - * @var string - */ protected $description = 'DESCRIPTION HERE'; - /** - * The name and signature of the console command. - * - * @var string - */ + protected $signature = 'firefly-iii:CORR_COMMAND'; /** diff --git a/app/Console/Commands/Correction/CreateAccessTokens.php b/app/Console/Commands/Correction/CreateAccessTokens.php index ab53dc2bcf..cf1ec32d0d 100644 --- a/app/Console/Commands/Correction/CreateAccessTokens.php +++ b/app/Console/Commands/Correction/CreateAccessTokens.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; -use Exception; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; @@ -36,24 +35,14 @@ class CreateAccessTokens extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Creates user access tokens which are used for command line access to personal data.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:create-access-tokens'; + + protected $signature = 'firefly-iii:create-access-tokens'; /** * Execute the console command. * - * @return int - * @throws Exception + * @throws \Exception */ public function handle(): int { @@ -61,8 +50,9 @@ class CreateAccessTokens extends Command /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); - $count = 0; - $users = $repository->all(); + $count = 0; + $users = $repository->all(); + /** @var User $user */ foreach ($users as $user) { $pref = app('preferences')->getForUser($user, 'access_token'); diff --git a/app/Console/Commands/Correction/CreateLinkTypes.php b/app/Console/Commands/Correction/CreateLinkTypes.php index 43620515eb..dd43d97456 100644 --- a/app/Console/Commands/Correction/CreateLinkTypes.php +++ b/app/Console/Commands/Correction/CreateLinkTypes.php @@ -34,23 +34,12 @@ class CreateLinkTypes extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Creates all link types.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:create-link-types'; + + protected $signature = 'firefly-iii:create-link-types'; /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -62,8 +51,9 @@ class CreateLinkTypes extends Command 'Reimbursement' => ['(partially) reimburses', 'is (partially) reimbursed by'], ]; foreach ($set as $name => $values) { - $link = LinkType::where('name', $name) - ->first(); + $link = LinkType::where('name', $name) + ->first() + ; if (null === $link) { $link = new LinkType(); $link->name = $name; @@ -78,6 +68,7 @@ class CreateLinkTypes extends Command if (0 === $count) { $this->friendlyPositive('All link types are OK'); } + return 0; } } diff --git a/app/Console/Commands/Correction/DeleteEmptyGroups.php b/app/Console/Commands/Correction/DeleteEmptyGroups.php index 6948cfaa8f..aa769e9dde 100644 --- a/app/Console/Commands/Correction/DeleteEmptyGroups.php +++ b/app/Console/Commands/Correction/DeleteEmptyGroups.php @@ -41,15 +41,14 @@ class DeleteEmptyGroups extends Command /** * Execute the console command. * - * @return int * @throws Exception; - * */ public function handle(): int { $groupIds - = TransactionGroup::leftJoin('transaction_journals', 'transaction_groups.id', '=', 'transaction_journals.transaction_group_id') - ->whereNull('transaction_journals.id')->get(['transaction_groups.id'])->pluck('id')->toArray(); + = TransactionGroup::leftJoin('transaction_journals', 'transaction_groups.id', '=', 'transaction_journals.transaction_group_id') + ->whereNull('transaction_journals.id')->get(['transaction_groups.id'])->pluck('id')->toArray() + ; $total = count($groupIds); if ($total > 0) { diff --git a/app/Console/Commands/Correction/DeleteEmptyJournals.php b/app/Console/Commands/Correction/DeleteEmptyJournals.php index 3ed726205c..a42fbbfbd0 100644 --- a/app/Console/Commands/Correction/DeleteEmptyJournals.php +++ b/app/Console/Commands/Correction/DeleteEmptyJournals.php @@ -23,13 +23,11 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; -use DB; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use Illuminate\Console\Command; use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Log; /** * Class DeleteEmptyJournals @@ -38,23 +36,12 @@ class DeleteEmptyJournals extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Delete empty and uneven transaction journals.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:delete-empty-journals'; + + protected $signature = 'firefly-iii:delete-empty-journals'; /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -70,27 +57,28 @@ class DeleteEmptyJournals extends Command private function deleteUnevenJournals(): void { $set = Transaction::whereNull('deleted_at') - ->groupBy('transactions.transaction_journal_id') - ->get([DB::raw('COUNT(transactions.transaction_journal_id) as the_count'), 'transaction_journal_id']); + ->groupBy('transactions.transaction_journal_id') + ->get([\DB::raw('COUNT(transactions.transaction_journal_id) as the_count'), 'transaction_journal_id']) // @phpstan-ignore-line + ; $total = 0; + /** @var Transaction $row */ foreach ($set as $row) { $count = (int)$row->the_count; if (1 === $count % 2) { // uneven number, delete journal and transactions: try { - TransactionJournal::find((int)$row->transaction_journal_id)->delete(); + TransactionJournal::find($row->transaction_journal_id)->delete(); } catch (QueryException $e) { - Log::info(sprintf('Could not delete journal: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + app('log')->info(sprintf('Could not delete journal: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); } - - Transaction::where('transaction_journal_id', (int)$row->transaction_journal_id)->delete(); + Transaction::where('transaction_journal_id', $row->transaction_journal_id)->delete(); $this->friendlyWarning( sprintf('Deleted transaction journal #%d because it had an uneven number of transactions.', $row->transaction_journal_id) ); - $total++; + ++$total; } } if (0 === $total) { @@ -98,26 +86,23 @@ class DeleteEmptyJournals extends Command } } - /** - * @return void - */ private function deleteEmptyJournals(): void { $count = 0; $set = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->groupBy('transaction_journals.id') - ->whereNull('transactions.transaction_journal_id') - ->get(['transaction_journals.id']); + ->groupBy('transaction_journals.id') + ->whereNull('transactions.transaction_journal_id') + ->get(['transaction_journals.id']) + ; foreach ($set as $entry) { try { TransactionJournal::find($entry->id)->delete(); } catch (QueryException $e) { - Log::info(sprintf('Could not delete entry: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + app('log')->info(sprintf('Could not delete entry: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); } - $this->friendlyInfo(sprintf('Deleted empty transaction journal #%d', $entry->id)); ++$count; } diff --git a/app/Console/Commands/Correction/DeleteOrphanedTransactions.php b/app/Console/Commands/Correction/DeleteOrphanedTransactions.php index 802609decd..aacaa23ca3 100644 --- a/app/Console/Commands/Correction/DeleteOrphanedTransactions.php +++ b/app/Console/Commands/Correction/DeleteOrphanedTransactions.php @@ -23,12 +23,10 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; -use Exception; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use Illuminate\Console\Command; -use stdClass; /** * Deletes transactions where the journal has been deleted. @@ -37,24 +35,14 @@ class DeleteOrphanedTransactions extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Deletes orphaned transactions.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:delete-orphaned-transactions'; + + protected $signature = 'firefly-iii:delete-orphaned-transactions'; /** * Execute the console command. * - * @return int - * @throws Exception + * @throws \Exception */ public function handle(): int { @@ -65,23 +53,22 @@ class DeleteOrphanedTransactions extends Command return 0; } - /** - * @return void - */ private function deleteOrphanedJournals(): void { $set = TransactionJournal::leftJoin('transaction_groups', 'transaction_journals.transaction_group_id', 'transaction_groups.id') - ->whereNotNull('transaction_groups.deleted_at') - ->whereNull('transaction_journals.deleted_at') - ->get(['transaction_journals.id', 'transaction_journals.transaction_group_id']); + ->whereNotNull('transaction_groups.deleted_at') + ->whereNull('transaction_journals.deleted_at') + ->get(['transaction_journals.id', 'transaction_journals.transaction_group_id']) + ; $count = $set->count(); if (0 === $count) { $this->friendlyPositive('No orphaned journals.'); + return; } $this->friendlyInfo(sprintf('Found %d orphaned journal(s).', $count)); foreach ($set as $entry) { - $journal = TransactionJournal::withTrashed()->find((int)$entry->id); + $journal = TransactionJournal::withTrashed()->find($entry->id); if (null !== $journal) { $journal->delete(); $this->friendlyWarning( @@ -96,22 +83,24 @@ class DeleteOrphanedTransactions extends Command } /** - * @throws Exception + * @throws \Exception */ private function deleteOrphanedTransactions(): void { $count = 0; $set = Transaction::leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->whereNotNull('transaction_journals.deleted_at') - ->whereNull('transactions.deleted_at') - ->whereNotNull('transactions.id') - ->get( - [ - 'transaction_journals.id as journal_id', - 'transactions.id as transaction_id', - ] - ); - /** @var stdClass $entry */ + ->whereNotNull('transaction_journals.deleted_at') + ->whereNull('transactions.deleted_at') + ->whereNotNull('transactions.id') + ->get( + [ + 'transaction_journals.id as journal_id', + 'transactions.id as transaction_id', + ] + ) + ; + + /** @var \stdClass $entry */ foreach ($set as $entry) { $transaction = Transaction::find((int)$entry->transaction_id); if (null !== $transaction) { @@ -131,24 +120,23 @@ class DeleteOrphanedTransactions extends Command } } - /** - * - */ private function deleteFromOrphanedAccounts(): void { $set = Transaction::leftJoin('accounts', 'transactions.account_id', '=', 'accounts.id') - ->whereNotNull('accounts.deleted_at') - ->get(['transactions.*']); + ->whereNotNull('accounts.deleted_at') + ->get(['transactions.*']) + ; $count = 0; + /** @var Transaction $transaction */ foreach ($set as $transaction) { // delete journals - $journal = TransactionJournal::find((int)$transaction->transaction_journal_id); - if ($journal) { + $journal = TransactionJournal::find($transaction->transaction_journal_id); + if (null !== $journal) { $journal->delete(); } - Transaction::where('transaction_journal_id', (int)$transaction->transaction_journal_id)->delete(); + Transaction::where('transaction_journal_id', $transaction->transaction_journal_id)->delete(); $this->friendlyWarning( sprintf( 'Deleted transaction journal #%d because account #%d was already deleted.', @@ -156,7 +144,7 @@ class DeleteOrphanedTransactions extends Command $transaction->account_id ) ); - $count++; + ++$count; } if (0 === $count) { $this->friendlyPositive('No orphaned accounts.'); diff --git a/app/Console/Commands/Correction/DeleteZeroAmount.php b/app/Console/Commands/Correction/DeleteZeroAmount.php index f0e52cdccf..4e0b86734d 100644 --- a/app/Console/Commands/Correction/DeleteZeroAmount.php +++ b/app/Console/Commands/Correction/DeleteZeroAmount.php @@ -35,29 +35,19 @@ class DeleteZeroAmount extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Delete transactions with zero amount.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:delete-zero-amount'; + + protected $signature = 'firefly-iii:delete-zero-amount'; /** * Execute the console command. - * - * @return int */ public function handle(): int { $set = Transaction::where('amount', 0)->get(['transaction_journal_id'])->pluck('transaction_journal_id')->toArray(); $set = array_unique($set); $journals = TransactionJournal::whereIn('id', $set)->get(); + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $this->friendlyWarning(sprintf('Deleted transaction journal #%d because the amount is zero (0.00).', $journal->id)); diff --git a/app/Console/Commands/Correction/EnableCurrencies.php b/app/Console/Commands/Correction/EnableCurrencies.php index f2b2e094b5..a87843d0f6 100644 --- a/app/Console/Commands/Correction/EnableCurrencies.php +++ b/app/Console/Commands/Correction/EnableCurrencies.php @@ -26,11 +26,15 @@ namespace FireflyIII\Console\Commands\Correction; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\AccountMeta; use FireflyIII\Models\BudgetLimit; +use FireflyIII\Models\GroupMembership; use FireflyIII\Models\Transaction; -use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionJournal; +use FireflyIII\Models\UserGroup; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use Illuminate\Console\Command; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; +use Symfony\Component\Console\Command\Command as CommandAlias; /** * Class EnableCurrencies @@ -44,56 +48,98 @@ class EnableCurrencies extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { - $found = []; + $userGroups = UserGroup::get(); + foreach ($userGroups as $userGroup) { + $this->correctCurrencies($userGroup); + } + + return CommandAlias::SUCCESS; + } + + private function correctCurrencies(UserGroup $userGroup): void + { + /** @var CurrencyRepositoryInterface $repos */ + $repos = app(CurrencyRepositoryInterface::class); + + // first check if the user has any default currency (not necessarily the case, so can be forced). + $defaultCurrency = app('amount')->getDefaultCurrencyByUserGroup($userGroup); + + Log::debug(sprintf('Now correcting currencies for user group #%d', $userGroup->id)); + $found = [$defaultCurrency->id]; + // get all meta entries - /** @var Collection $meta */ - $meta = AccountMeta::where('name', 'currency_id')->groupBy('data')->get(['data']); + $meta = AccountMeta::leftJoin('accounts', 'accounts.id', '=', 'account_meta.account_id') + ->where('accounts.user_group_id', $userGroup->id) + ->where('account_meta.name', 'currency_id')->groupBy('data')->get(['data']) + ; foreach ($meta as $entry) { $found[] = (int)$entry->data; } // get all from journals: - $journals = TransactionJournal::groupBy('transaction_currency_id')->get(['transaction_currency_id']); + $journals = TransactionJournal::where('user_group_id', $userGroup->id) + ->groupBy('transaction_currency_id')->get(['transaction_currency_id']) + ; foreach ($journals as $entry) { $found[] = (int)$entry->transaction_currency_id; } // get all from transactions - $transactions = Transaction::groupBy('transaction_currency_id', 'foreign_currency_id')->get(['transaction_currency_id', 'foreign_currency_id']); + $transactions = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.user_group_id', $userGroup->id) + ->groupBy('transactions.transaction_currency_id', 'transactions.foreign_currency_id') + ->get(['transactions.transaction_currency_id', 'transactions.foreign_currency_id']) + ; foreach ($transactions as $entry) { $found[] = (int)$entry->transaction_currency_id; $found[] = (int)$entry->foreign_currency_id; } // get all from budget limits - $limits = BudgetLimit::groupBy('transaction_currency_id')->get(['transaction_currency_id']); + $limits = BudgetLimit::leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') + ->groupBy('transaction_currency_id') + ->get(['budget_limits.transaction_currency_id']) + ; foreach ($limits as $entry) { - $found[] = (int)$entry->transaction_currency_id; + $found[] = $entry->transaction_currency_id; } - $found = array_values(array_unique($found)); - $found = array_values( + // also get all currencies already enabled. + $alreadyEnabled = $userGroup->currencies()->get(['transaction_currencies.id'])->pluck('id')->toArray(); + foreach ($alreadyEnabled as $currencyId) { + $found[] = $currencyId; + } + + $found = array_values(array_unique($found)); + $found = array_values( array_filter( $found, - function (int $currencyId) { - return $currencyId !== 0; + static function (int $currencyId) { + return 0 !== $currencyId; } ) ); - $disabled = TransactionCurrency::whereIn('id', $found)->where('enabled', false)->count(); - if ($disabled > 0) { - $this->friendlyInfo(sprintf('%d currencies were (was) disabled while in use by transactions. This has been corrected.', $disabled)); - } - if (0 === $disabled) { - $this->friendlyPositive('All currencies are correctly enabled or disabled.'); - } - TransactionCurrency::whereIn('id', $found)->update(['enabled' => true]); - return 0; + $valid = new Collection(); + + /** @var int $currencyId */ + foreach ($found as $currencyId) { + $currency = $repos->find($currencyId); + if (null !== $currency) { + $valid->push($currency); + } + } + $ids = $valid->pluck('id')->toArray(); + Log::debug(sprintf('Found currencies for user group #%d: %s', $userGroup->id, implode(', ', $ids))); + $userGroup->currencies()->sync($ids); + + /** @var GroupMembership $membership */ + foreach ($userGroup->groupMemberships()->get() as $membership) { + // make sure no individual different preferences. + $membership->user->currencies()->sync([]); + } } } diff --git a/app/Console/Commands/Correction/FixAccountOrder.php b/app/Console/Commands/Correction/FixAccountOrder.php index acc0276934..4928584052 100644 --- a/app/Console/Commands/Correction/FixAccountOrder.php +++ b/app/Console/Commands/Correction/FixAccountOrder.php @@ -42,8 +42,6 @@ class FixAccountOrder extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -64,8 +62,6 @@ class FixAccountOrder extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * - */ private function stupidLaravel(): void { diff --git a/app/Console/Commands/Correction/FixAccountTypes.php b/app/Console/Commands/Correction/FixAccountTypes.php index a9d74e3d11..cc963e024f 100644 --- a/app/Console/Commands/Correction/FixAccountTypes.php +++ b/app/Console/Commands/Correction/FixAccountTypes.php @@ -34,7 +34,6 @@ use FireflyIII\Models\TransactionType; use Illuminate\Console\Command; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Query\JoinClause; -use JsonException; /** * Class FixAccountTypes @@ -52,8 +51,7 @@ class FixAccountTypes extends Command /** * Execute the console command. * - * @return int - * @throws FireflyException|JsonException + * @throws FireflyException */ public function handle(): int { @@ -62,30 +60,31 @@ class FixAccountTypes extends Command $this->expected = config('firefly.source_dests'); $expected = config('firefly.source_dests'); - $query = TransactionJournal::leftJoin('transaction_types', 'transaction_journals.transaction_type_id', '=', 'transaction_types.id') - ->leftJoin( - 'transactions as source', - static function (JoinClause $join) { - $join->on('transaction_journals.id', '=', 'source.transaction_journal_id')->where('source.amount', '<', 0); - } - ) - ->leftJoin( - 'transactions as destination', - static function (JoinClause $join) { - $join->on('transaction_journals.id', '=', 'destination.transaction_journal_id')->where('destination.amount', '>', 0); - } - ) - ->leftJoin('accounts as source_account', 'source.account_id', '=', 'source_account.id') - ->leftJoin('accounts as destination_account', 'destination.account_id', '=', 'destination_account.id') - ->leftJoin('account_types as source_account_type', 'source_account.account_type_id', '=', 'source_account_type.id') - ->leftJoin('account_types as destination_account_type', 'destination_account.account_type_id', '=', 'destination_account_type.id'); + $query = TransactionJournal::leftJoin('transaction_types', 'transaction_journals.transaction_type_id', '=', 'transaction_types.id') + ->leftJoin( + 'transactions as source', + static function (JoinClause $join): void { + $join->on('transaction_journals.id', '=', 'source.transaction_journal_id')->where('source.amount', '<', 0); + } + ) + ->leftJoin( + 'transactions as destination', + static function (JoinClause $join): void { + $join->on('transaction_journals.id', '=', 'destination.transaction_journal_id')->where('destination.amount', '>', 0); + } + ) + ->leftJoin('accounts as source_account', 'source.account_id', '=', 'source_account.id') + ->leftJoin('accounts as destination_account', 'destination.account_id', '=', 'destination_account.id') + ->leftJoin('account_types as source_account_type', 'source_account.account_type_id', '=', 'source_account_type.id') + ->leftJoin('account_types as destination_account_type', 'destination_account.account_type_id', '=', 'destination_account_type.id') + ; // list all valid combinations, those are allowed. So we select those which are broken. - $query->where(function (Builder $q) use ($expected) { + $query->where(static function (Builder $q) use ($expected): void { foreach ($expected as $transactionType => $info) { foreach ($info as $source => $destinations) { foreach ($destinations as $destination) { - $q->whereNot(function (Builder $q1) use ($transactionType, $source, $destination) { + $q->whereNot(static function (Builder $q1) use ($transactionType, $source, $destination): void { $q1->where('transaction_types.type', $transactionType); $q1->where('source_account_type.type', $source); $q1->where('destination_account_type.type', $destination); @@ -95,18 +94,18 @@ class FixAccountTypes extends Command } }); - $resultSet = $query->get( + $resultSet = $query->get( [ 'transaction_journals.id', - //'transaction_type_id as type_id', + // 'transaction_type_id as type_id', 'transaction_types.type as journal_type', - //'source.id as source_transaction_id', - //'source_account.id as source_account_id', - //'source_account_type.id as source_account_type_id', + // 'source.id as source_transaction_id', + // 'source_account.id as source_account_id', + // 'source_account_type.id as source_account_type_id', 'source_account_type.type as source_account_type', - //'destination.id as destination_transaction_id', - //'destination_account.id as destination_account_id', - //'destination_account_type.id as destination_account_type_id', + // 'destination.id as destination_transaction_id', + // 'destination_account.id as destination_account_id', + // 'destination_account_type.id as destination_account_type_id', 'destination_account_type.type as destination_account_type', ] ); @@ -114,7 +113,7 @@ class FixAccountTypes extends Command $this->friendlyLine(sprintf('Found %d journals that need to be fixed.', $resultSet->count())); foreach ($resultSet as $entry) { app('log')->debug(sprintf('Now fixing journal #%d', $entry->id)); - $journal = TransactionJournal::find((int)$entry->id); + $journal = TransactionJournal::find($entry->id); if (null !== $journal) { $this->inspectJournal($journal); } @@ -131,24 +130,15 @@ class FixAccountTypes extends Command return 0; } - /** - * @return void - */ private function stupidLaravel(): void { $this->count = 0; } - /** - * @param TransactionJournal $journal - * - * @throws FireflyException - * @throws JsonException - */ private function inspectJournal(TransactionJournal $journal): void { app('log')->debug(sprintf('Now inspecting journal #%d', $journal->id)); - $transactions = $journal->transactions()->count(); + $transactions = $journal->transactions()->count(); if (2 !== $transactions) { app('log')->debug(sprintf('Journal has %d transactions, so can\'t fix.', $transactions)); $this->friendlyError(sprintf('Cannot inspect transaction journal #%d because it has %d transaction(s) instead of 2.', $journal->id, $transactions)); @@ -175,168 +165,224 @@ class FixAccountTypes extends Command return; } - $expectedTypes = $this->expected[$type][$sourceAccountType]; + $expectedTypes = $this->expected[$type][$sourceAccountType]; if (!in_array($destAccountType, $expectedTypes, true)) { app('log')->debug(sprintf('[b] Going to fix journal #%d', $journal->id)); $this->fixJournal($journal, $type, $sourceTransaction, $destTransaction); } } - /** - * @param TransactionJournal $journal - * - * @return Transaction - */ private function getSourceTransaction(TransactionJournal $journal): Transaction { return $journal->transactions->firstWhere('amount', '<', 0); } - /** - * @param TransactionJournal $journal - * - * @return Transaction - */ private function getDestinationTransaction(TransactionJournal $journal): Transaction { return $journal->transactions->firstWhere('amount', '>', 0); } - /** - * @param TransactionJournal $journal - * @param string $type - * @param Transaction $source - * @param Transaction $dest - * - * @throws FireflyException - * @throws JsonException - */ - private function fixJournal(TransactionJournal $journal, string $type, Transaction $source, Transaction $dest): void + private function fixJournal(TransactionJournal $journal, string $transactionType, Transaction $source, Transaction $dest): void { app('log')->debug(sprintf('Going to fix journal #%d', $journal->id)); - $this->count++; + ++$this->count; // variables: - $combination = sprintf('%s%s%s', $type, $source->account->accountType->type, $dest->account->accountType->type); + $sourceType = $source->account->accountType->type; + $destinationType = $dest->account->accountType->type; + $combination = sprintf('%s%s%s', $transactionType, $source->account->accountType->type, $dest->account->accountType->type); app('log')->debug(sprintf('Combination is "%s"', $combination)); - switch ($combination) { - case sprintf('%s%s%s', TransactionType::TRANSFER, AccountType::ASSET, AccountType::LOAN): - case sprintf('%s%s%s', TransactionType::TRANSFER, AccountType::ASSET, AccountType::DEBT): - case sprintf('%s%s%s', TransactionType::TRANSFER, AccountType::ASSET, AccountType::MORTGAGE): - // from an asset to a liability should be a withdrawal: - $withdrawal = TransactionType::whereType(TransactionType::WITHDRAWAL)->first(); - $journal->transactionType()->associate($withdrawal); - $journal->save(); - $message = sprintf('Converted transaction #%d from a transfer to a withdrawal.', $journal->id); - $this->friendlyInfo($message); - app('log')->debug($message); - // check it again: - $this->inspectJournal($journal); - return; - case sprintf('%s%s%s', TransactionType::TRANSFER, AccountType::LOAN, AccountType::ASSET): - case sprintf('%s%s%s', TransactionType::TRANSFER, AccountType::DEBT, AccountType::ASSET): - case sprintf('%s%s%s', TransactionType::TRANSFER, AccountType::MORTGAGE, AccountType::ASSET): - // from a liability to an asset should be a deposit. - $deposit = TransactionType::whereType(TransactionType::DEPOSIT)->first(); - $journal->transactionType()->associate($deposit); - $journal->save(); - $message = sprintf('Converted transaction #%d from a transfer to a deposit.', $journal->id); - $this->friendlyInfo($message); - app('log')->debug($message); - // check it again: - $this->inspectJournal($journal); - return; - case sprintf('%s%s%s', TransactionType::WITHDRAWAL, AccountType::ASSET, AccountType::REVENUE): - // withdrawals with a revenue account as destination instead of an expense account. - $this->factory->setUser($journal->user); - $oldDest = $dest->account; - $result = $this->factory->findOrCreate($dest->account->name, AccountType::EXPENSE); - $dest->account()->associate($result); - $dest->save(); - $message = sprintf( - 'Transaction journal #%d, destination account changed from #%d ("%s") to #%d ("%s").', - $journal->id, - $oldDest->id, - $oldDest->name, - $result->id, - $result->name - ); - $this->friendlyWarning($message); - app('log')->debug($message); - $this->inspectJournal($journal); - return; - case sprintf('%s%s%s', TransactionType::DEPOSIT, AccountType::EXPENSE, AccountType::ASSET): - // deposits with an expense account as source instead of a revenue account. - // find revenue account. - $this->factory->setUser($journal->user); - $result = $this->factory->findOrCreate($source->account->name, AccountType::REVENUE); - $oldSource = $dest->account; - $source->account()->associate($result); - $source->save(); - $message = sprintf( - 'Transaction journal #%d, source account changed from #%d ("%s") to #%d ("%s").', - $journal->id, - $oldSource->id, - $oldSource->name, - $result->id, - $result->name - ); - $this->friendlyWarning($message); - app('log')->debug($message); - $this->inspectJournal($journal); - return; + if ($this->shouldBeTransfer($transactionType, $sourceType, $destinationType)) { + $this->makeTransfer($journal); + + return; + } + if ($this->shouldBeDeposit($transactionType, $sourceType, $destinationType)) { + $this->makeDeposit($journal); + + return; + } + if ($this->shouldGoToExpenseAccount($transactionType, $sourceType, $destinationType)) { + $this->makeExpenseDestination($journal, $dest); + + return; + } + if ($this->shouldComeFromRevenueAccount($transactionType, $sourceType, $destinationType)) { + $this->makeRevenueSource($journal, $source); + + return; } - app('log')->debug(sprintf('Fallback to fix transaction journal #%d of type "%s".', $journal->id, $type)); // transaction has no valid source. - $validSources = array_keys($this->expected[$type]); - if (!in_array($source->account->accountType->type, $validSources, true)) { - app('log')->debug('Journal has no valid source.'); - // perhaps we can create the account of type we need: + $validSources = array_keys($this->expected[$transactionType]); + $canCreateSource = $this->canCreateSource($validSources); + $hasValidSource = $this->hasValidAccountType($validSources, $sourceType); + if (!$hasValidSource && $canCreateSource) { + $this->giveNewRevenue($journal, $source); - if (in_array(AccountTypeEnum::REVENUE->value, $validSources, true)) { - app('log')->debug(sprintf('An account of type "%s" could be a valid source.', AccountTypeEnum::REVENUE->value)); - $this->factory->setUser($journal->user); - $newSource = $this->factory->findOrCreate($source->account->name, AccountTypeEnum::REVENUE->value); - $source->account()->associate($newSource); - $source->save(); - $this->friendlyPositive(sprintf('Firefly III gave transaction #%d a new source %s: #%d ("%s").', $journal->transaction_group_id, AccountTypeEnum::REVENUE->value, $newSource->id, $newSource->name)); - app('log')->debug(sprintf('Associated account #%d with transaction #%d', $newSource->id, $source->id)); - $this->inspectJournal($journal); - return; - } - if (!in_array(AccountTypeEnum::REVENUE->value, $validSources, true)) { - app('log')->debug('This transaction type has no source we can create. Just give error.'); - $message = sprintf('The source account of %s #%d cannot be of type "%s". Firefly III cannot fix this. You may have to remove the transaction yourself.', $type, $journal->id, $source->account->accountType->type); - $this->friendlyError($message); - app('log')->debug($message); - } + return; + } + if (!$canCreateSource && !$hasValidSource) { + app('log')->debug('This transaction type has no source we can create. Just give error.'); + $message = sprintf('The source account of %s #%d cannot be of type "%s". Firefly III cannot fix this. You may have to remove the transaction yourself.', $transactionType, $journal->id, $source->account->accountType->type); + $this->friendlyError($message); + app('log')->debug($message); + + return; } - // transaction has no valid destination: - $sourceType = $source->account->accountType->type; - $validDestinations = $this->expected[$type][$sourceType] ?? []; - if (!in_array($dest->account->accountType->type, $validDestinations, true)) { - app('log')->debug('Journal has no valid destination (perhaps because the source is also broken).'); - // perhaps we can create the account of type we need: - if (in_array(AccountTypeEnum::EXPENSE->value, $validDestinations, true)) { - app('log')->debug(sprintf('An account of type "%s" could be a valid destination.', AccountTypeEnum::EXPENSE->value)); - $this->factory->setUser($journal->user); - $newDestination = $this->factory->findOrCreate($dest->account->name, AccountTypeEnum::EXPENSE->value); - $dest->account()->associate($newDestination); - $dest->save(); - $this->friendlyPositive(sprintf('Firefly III gave transaction #%d a new destination %s: #%d ("%s").', $journal->transaction_group_id, AccountTypeEnum::EXPENSE->value, $newDestination->id, $newDestination->name)); - app('log')->debug(sprintf('Associated account #%d with transaction #%d', $newDestination->id, $source->id)); - $this->inspectJournal($journal); - return; - } - if (!in_array(AccountTypeEnum::EXPENSE->value, $validSources, true)) { - app('log')->debug('This transaction type has no destination we can create. Just give error.'); - $message = sprintf('The destination account of %s #%d cannot be of type "%s". Firefly III cannot fix this. You may have to remove the transaction yourself.', $type, $journal->id, $dest->account->accountType->type); - $this->friendlyError($message); - app('log')->debug($message); - return; - } + /** @var array $validDestinations */ + $validDestinations = $this->expected[$transactionType][$sourceType] ?? []; + $canCreateDestination = $this->canCreateDestination($validDestinations); + $hasValidDestination = $this->hasValidAccountType($validDestinations, $destinationType); + if (!$hasValidDestination && $canCreateDestination) { + $this->giveNewExpense($journal, $dest); + + return; + } + if (!$canCreateDestination && !$hasValidDestination) { + app('log')->debug('This transaction type has no destination we can create. Just give error.'); + $message = sprintf('The destination account of %s #%d cannot be of type "%s". Firefly III cannot fix this. You may have to remove the transaction yourself.', $transactionType, $journal->id, $dest->account->accountType->type); + $this->friendlyError($message); + app('log')->debug($message); } } + + private function shouldBeTransfer(string $transactionType, string $sourceType, string $destinationType): bool + { + return TransactionType::TRANSFER === $transactionType && AccountType::ASSET === $sourceType && $this->isLiability($destinationType); + } + + private function isLiability(string $destinationType): bool + { + return AccountType::LOAN === $destinationType || AccountType::DEBT === $destinationType || AccountType::MORTGAGE === $destinationType; + } + + private function makeTransfer(TransactionJournal $journal): void + { + // from an asset to a liability should be a withdrawal: + $withdrawal = TransactionType::whereType(TransactionType::WITHDRAWAL)->first(); + $journal->transactionType()->associate($withdrawal); + $journal->save(); + $message = sprintf('Converted transaction #%d from a transfer to a withdrawal.', $journal->id); + $this->friendlyInfo($message); + app('log')->debug($message); + // check it again: + $this->inspectJournal($journal); + } + + private function shouldBeDeposit(string $transactionType, string $sourceType, string $destinationType): bool + { + return TransactionType::TRANSFER === $transactionType && $this->isLiability($sourceType) && AccountType::ASSET === $destinationType; + } + + private function makeDeposit(TransactionJournal $journal): void + { + // from a liability to an asset should be a deposit. + $deposit = TransactionType::whereType(TransactionType::DEPOSIT)->first(); + $journal->transactionType()->associate($deposit); + $journal->save(); + $message = sprintf('Converted transaction #%d from a transfer to a deposit.', $journal->id); + $this->friendlyInfo($message); + app('log')->debug($message); + // check it again: + $this->inspectJournal($journal); + } + + private function shouldGoToExpenseAccount(string $transactionType, string $sourceType, string $destinationType): bool + { + return TransactionType::WITHDRAWAL === $transactionType && AccountType::ASSET === $sourceType && AccountType::REVENUE === $destinationType; + } + + private function makeExpenseDestination(TransactionJournal $journal, Transaction $destination): void + { + // withdrawals with a revenue account as destination instead of an expense account. + $this->factory->setUser($journal->user); + $oldDest = $destination->account; + $result = $this->factory->findOrCreate($destination->account->name, AccountType::EXPENSE); + $destination->account()->associate($result); + $destination->save(); + $message = sprintf( + 'Transaction journal #%d, destination account changed from #%d ("%s") to #%d ("%s").', + $journal->id, + $oldDest->id, + $oldDest->name, + $result->id, + $result->name + ); + $this->friendlyWarning($message); + app('log')->debug($message); + $this->inspectJournal($journal); + } + + private function shouldComeFromRevenueAccount(string $transactionType, string $sourceType, string $destinationType): bool + { + return TransactionType::DEPOSIT === $transactionType && AccountType::EXPENSE === $sourceType && AccountType::ASSET === $destinationType; + } + + private function makeRevenueSource(TransactionJournal $journal, Transaction $source): void + { + // deposits with an expense account as source instead of a revenue account. + // find revenue account. + $this->factory->setUser($journal->user); + $result = $this->factory->findOrCreate($source->account->name, AccountType::REVENUE); + $oldSource = $source->account; + $source->account()->associate($result); + $source->save(); + $message = sprintf( + 'Transaction journal #%d, source account changed from #%d ("%s") to #%d ("%s").', + $journal->id, + $oldSource->id, + $oldSource->name, + $result->id, + $result->name + ); + $this->friendlyWarning($message); + app('log')->debug($message); + $this->inspectJournal($journal); + } + + /** + * Can only create revenue accounts out of the blue. + */ + private function canCreateSource(array $validSources): bool + { + return in_array(AccountTypeEnum::REVENUE->value, $validSources, true); + } + + private function hasValidAccountType(array $validTypes, string $accountType): bool + { + return in_array($accountType, $validTypes, true); + } + + private function giveNewRevenue(TransactionJournal $journal, Transaction $source): void + { + app('log')->debug(sprintf('An account of type "%s" could be a valid source.', AccountTypeEnum::REVENUE->value)); + $this->factory->setUser($journal->user); + $name = $source->account->name; + $newSource = $this->factory->findOrCreate($name, AccountTypeEnum::REVENUE->value); + $source->account()->associate($newSource); + $source->save(); + $this->friendlyPositive(sprintf('Firefly III gave transaction #%d a new source %s: #%d ("%s").', $journal->transaction_group_id, AccountTypeEnum::REVENUE->value, $newSource->id, $newSource->name)); + app('log')->debug(sprintf('Associated account #%d with transaction #%d', $newSource->id, $source->id)); + $this->inspectJournal($journal); + } + + private function canCreateDestination(array $validDestinations): bool + { + return in_array(AccountTypeEnum::EXPENSE->value, $validDestinations, true); + } + + private function giveNewExpense(TransactionJournal $journal, Transaction $destination): void + { + app('log')->debug(sprintf('An account of type "%s" could be a valid destination.', AccountTypeEnum::EXPENSE->value)); + $this->factory->setUser($journal->user); + $name = $destination->account->name; + $newDestination = $this->factory->findOrCreate($name, AccountTypeEnum::EXPENSE->value); + $destination->account()->associate($newDestination); + $destination->save(); + $this->friendlyPositive(sprintf('Firefly III gave transaction #%d a new destination %s: #%d ("%s").', $journal->transaction_group_id, AccountTypeEnum::EXPENSE->value, $newDestination->id, $newDestination->name)); + app('log')->debug(sprintf('Associated account #%d with transaction #%d', $newDestination->id, $destination->id)); + $this->inspectJournal($journal); + } } diff --git a/app/Console/Commands/Correction/FixFrontpageAccounts.php b/app/Console/Commands/Correction/FixFrontpageAccounts.php index 884b4d43e1..66c9348504 100644 --- a/app/Console/Commands/Correction/FixFrontpageAccounts.php +++ b/app/Console/Commands/Correction/FixFrontpageAccounts.php @@ -28,7 +28,6 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\AccountType; use FireflyIII\Models\Preference; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Support\Facades\Preferences; use FireflyIII\User; use Illuminate\Console\Command; @@ -44,15 +43,14 @@ class FixFrontpageAccounts extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { $users = User::get(); + /** @var User $user */ foreach ($users as $user) { - $preference = Preferences::getForUser($user, 'frontPageAccounts'); + $preference = app('preferences')->getForUser($user, 'frontPageAccounts'); if (null !== $preference) { $this->fixPreference($preference); } @@ -62,19 +60,17 @@ class FixFrontpageAccounts extends Command return 0; } - /** - * @param Preference $preference - */ private function fixPreference(Preference $preference): void { - $fixed = []; + $fixed = []; + /** @var AccountRepositoryInterface $repository */ $repository = app(AccountRepositoryInterface::class); if (null === $preference->user) { return; } $repository->setUser($preference->user); - $data = $preference->data; + $data = $preference->data; if (is_array($data)) { /** @var string $accountId */ foreach ($data as $accountId) { @@ -87,6 +83,6 @@ class FixFrontpageAccounts extends Command } } } - Preferences::setForUser($preference->user, 'frontPageAccounts', $fixed); + app('preferences')->setForUser($preference->user, 'frontPageAccounts', $fixed); } } diff --git a/app/Console/Commands/Correction/FixGroupAccounts.php b/app/Console/Commands/Correction/FixGroupAccounts.php index 9ddb1cddf6..51847ce2c0 100644 --- a/app/Console/Commands/Correction/FixGroupAccounts.php +++ b/app/Console/Commands/Correction/FixGroupAccounts.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; -use DB; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Events\UpdatedTransactionGroup; use FireflyIII\Handlers\Events\UpdatedGroupEventHandler; @@ -44,14 +43,14 @@ class FixGroupAccounts extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { - $groups = []; - $res = TransactionJournal::groupBy('transaction_group_id') - ->get(['transaction_group_id', DB::raw('COUNT(transaction_group_id) as the_count')]); + $groups = []; + $res = TransactionJournal::groupBy('transaction_group_id') + ->get(['transaction_group_id', \DB::raw('COUNT(transaction_group_id) as the_count')])// @phpstan-ignore-line + ; + /** @var TransactionJournal $journal */ foreach ($res as $journal) { if ((int)$journal->the_count > 1) { diff --git a/app/Console/Commands/Correction/FixIbans.php b/app/Console/Commands/Correction/FixIbans.php index 7afbd3c2cf..27e79a1c5b 100644 --- a/app/Console/Commands/Correction/FixIbans.php +++ b/app/Console/Commands/Correction/FixIbans.php @@ -39,12 +39,10 @@ class FixIbans extends Command protected $description = 'Removes spaces from IBANs'; protected $signature = 'firefly-iii:fix-ibans'; - private int $count = 0; + private int $count = 0; /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -58,11 +56,6 @@ class FixIbans extends Command return 0; } - /** - * @param Collection $accounts - * - * @return void - */ private function filterIbans(Collection $accounts): void { /** @var Account $account */ @@ -74,38 +67,33 @@ class FixIbans extends Command $account->iban = $iban; $account->save(); $this->friendlyInfo(sprintf('Removed spaces from IBAN of account #%d', $account->id)); - $this->count++; + ++$this->count; } } } } - /** - * @param Collection $accounts - * - * @return void - */ private function countAndCorrectIbans(Collection $accounts): void { $set = []; + /** @var Account $account */ foreach ($accounts as $account) { - $userId = (int)$account->user_id; - $set[$userId] = $set[$userId] ?? []; - $iban = (string)$account->iban; + $userId = $account->user_id; + $set[$userId] ??= []; + $iban = (string)$account->iban; if ('' === $iban) { continue; } - $type = $account->accountType->type; + $type = $account->accountType->type; if (in_array($type, [AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], true)) { $type = 'liabilities'; } if (array_key_exists($iban, $set[$userId])) { // iban already in use! two exceptions exist: if ( - !(AccountType::EXPENSE === $set[$userId][$iban] && AccountType::REVENUE === $type) - && // allowed combination - !(AccountType::REVENUE === $set[$userId][$iban] && AccountType::EXPENSE === $type) // also allowed combination. + !(AccountType::EXPENSE === $set[$userId][$iban] && AccountType::REVENUE === $type) // allowed combination + && !(AccountType::REVENUE === $set[$userId][$iban] && AccountType::EXPENSE === $type) // also allowed combination. ) { $this->friendlyWarning( sprintf( @@ -118,7 +106,7 @@ class FixIbans extends Command ); $account->iban = null; $account->save(); - $this->count++; + ++$this->count; } } diff --git a/app/Console/Commands/Correction/FixLongDescriptions.php b/app/Console/Commands/Correction/FixLongDescriptions.php index d9a2a04144..6830dd40e9 100644 --- a/app/Console/Commands/Correction/FixLongDescriptions.php +++ b/app/Console/Commands/Correction/FixLongDescriptions.php @@ -36,37 +36,37 @@ class FixLongDescriptions extends Command { use ShowsFriendlyMessages; - private const MAX_LENGTH = 1000; - protected $description = 'Fixes long descriptions in journals and groups.'; - protected $signature = 'firefly-iii:fix-long-descriptions'; + private const int MAX_LENGTH = 1000; + protected $description = 'Fixes long descriptions in journals and groups.'; + protected $signature = 'firefly-iii:fix-long-descriptions'; /** * Execute the console command. - * - * @return int */ public function handle(): int { $journals = TransactionJournal::get(['id', 'description']); $count = 0; + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { if (strlen($journal->description) > self::MAX_LENGTH) { $journal->description = substr($journal->description, 0, self::MAX_LENGTH); $journal->save(); $this->friendlyWarning(sprintf('Truncated description of transaction journal #%d', $journal->id)); - $count++; + ++$count; } } - $groups = TransactionGroup::get(['id', 'title']); + $groups = TransactionGroup::get(['id', 'title']); + /** @var TransactionGroup $group */ foreach ($groups as $group) { if (strlen((string)$group->title) > self::MAX_LENGTH) { $group->title = substr($group->title, 0, self::MAX_LENGTH); $group->save(); $this->friendlyWarning(sprintf('Truncated description of transaction group #%d', $group->id)); - $count++; + ++$count; } } if (0 === $count) { diff --git a/app/Console/Commands/Correction/FixPiggies.php b/app/Console/Commands/Correction/FixPiggies.php index 8e15fc700a..7c5779e3b9 100644 --- a/app/Console/Commands/Correction/FixPiggies.php +++ b/app/Console/Commands/Correction/FixPiggies.php @@ -42,8 +42,6 @@ class FixPiggies extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -55,13 +53,15 @@ class FixPiggies extends Command if (null === $event->transaction_journal_id) { continue; } - /** @var TransactionJournal|null $journal */ + + /** @var null|TransactionJournal $journal */ $journal = $event->transactionJournal; if (null === $journal) { $event->transaction_journal_id = null; $event->save(); - $count++; + ++$count; + continue; } } diff --git a/app/Console/Commands/Correction/FixRecurringTransactions.php b/app/Console/Commands/Correction/FixRecurringTransactions.php index ac2fc02cf8..a7c3e70bb3 100644 --- a/app/Console/Commands/Correction/FixRecurringTransactions.php +++ b/app/Console/Commands/Correction/FixRecurringTransactions.php @@ -40,16 +40,14 @@ class FixRecurringTransactions extends Command { use ShowsFriendlyMessages; - protected $description = 'Fixes recurring transactions with the wrong transaction type.'; - protected $signature = 'firefly-iii:fix-recurring-transactions'; - private int $count = 0; + protected $description = 'Fixes recurring transactions with the wrong transaction type.'; + protected $signature = 'firefly-iii:fix-recurring-transactions'; + private int $count = 0; private RecurringRepositoryInterface $recurringRepos; private UserRepositoryInterface $userRepos; /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -66,8 +64,6 @@ class FixRecurringTransactions extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * - */ private function stupidLaravel(): void { @@ -75,34 +71,27 @@ class FixRecurringTransactions extends Command $this->userRepos = app(UserRepositoryInterface::class); } - /** - * - */ private function correctTransactions(): void { $users = $this->userRepos->all(); + /** @var User $user */ foreach ($users as $user) { $this->processUser($user); } } - /** - * @param User $user - */ private function processUser(User $user): void { $this->recurringRepos->setUser($user); $recurrences = $this->recurringRepos->get(); + /** @var Recurrence $recurrence */ foreach ($recurrences as $recurrence) { $this->processRecurrence($recurrence); } } - /** - * @param Recurrence $recurrence - */ private function processRecurrence(Recurrence $recurrence): void { /** @var RecurrenceTransaction $transaction */ @@ -111,10 +100,6 @@ class FixRecurringTransactions extends Command } } - /** - * @param Recurrence $recurrence - * @param RecurrenceTransaction $transaction - */ private function processTransaction(Recurrence $recurrence, RecurrenceTransaction $transaction): void { $source = $transaction->sourceAccount; @@ -129,7 +114,7 @@ class FixRecurringTransactions extends Command if (null !== $transactionType) { $recurrence->transaction_type_id = $transactionType->id; $recurrence->save(); - $this->count++; + ++$this->count; } } } diff --git a/app/Console/Commands/Correction/FixTransactionTypes.php b/app/Console/Commands/Correction/FixTransactionTypes.php index 9fbd8a42ce..a5bcfb9e15 100644 --- a/app/Console/Commands/Correction/FixTransactionTypes.php +++ b/app/Console/Commands/Correction/FixTransactionTypes.php @@ -45,22 +45,21 @@ class FixTransactionTypes extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { $count = 0; $journals = $this->collectJournals(); + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $fixed = $this->fixJournal($journal); if (true === $fixed) { - $count++; + ++$count; } } if ($count > 0) { - $this->friendlyInfo('Corrected transaction type of %d transaction journals.', $count); + $this->friendlyInfo(sprintf('Corrected transaction type of %d transaction journals.', $count)); return 0; } @@ -71,23 +70,18 @@ class FixTransactionTypes extends Command /** * Collect all transaction journals. - * - * @return Collection */ private function collectJournals(): Collection { return TransactionJournal::with(['transactionType', 'transactions', 'transactions.account', 'transactions.account.accountType']) - ->get(); + ->get() + ; } - /** - * @param TransactionJournal $journal - * - * @return bool - */ private function fixJournal(TransactionJournal $journal): bool { - $type = $journal->transactionType->type; + $type = $journal->transactionType->type; + try { $source = $this->getSourceAccount($journal); $destination = $this->getDestinationAccount($journal); @@ -117,14 +111,11 @@ class FixTransactionTypes extends Command } /** - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ private function getSourceAccount(TransactionJournal $journal): Account { - $collection = $journal->transactions->filter( + $collection = $journal->transactions->filter( static function (Transaction $transaction) { return $transaction->amount < 0; } @@ -135,10 +126,12 @@ class FixTransactionTypes extends Command if (1 !== $collection->count()) { throw new FireflyException(sprintf('300002: Journal #%d has multiple source transactions.', $journal->id)); } + /** @var Transaction $transaction */ $transaction = $collection->first(); - /** @var Account|null $account */ - $account = $transaction->account; + + /** @var null|Account $account */ + $account = $transaction->account; if (null === $account) { throw new FireflyException(sprintf('300003: Journal #%d, transaction #%d has no source account.', $journal->id, $transaction->id)); } @@ -147,14 +140,11 @@ class FixTransactionTypes extends Command } /** - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ private function getDestinationAccount(TransactionJournal $journal): Account { - $collection = $journal->transactions->filter( + $collection = $journal->transactions->filter( static function (Transaction $transaction) { return $transaction->amount > 0; } @@ -165,10 +155,12 @@ class FixTransactionTypes extends Command if (1 !== $collection->count()) { throw new FireflyException(sprintf('300005: Journal #%d has multiple destination transactions.', $journal->id)); } + /** @var Transaction $transaction */ $transaction = $collection->first(); - /** @var Account|null $account */ - $account = $transaction->account; + + /** @var null|Account $account */ + $account = $transaction->account; if (null === $account) { throw new FireflyException(sprintf('300006: Journal #%d, transaction #%d has no destination account.', $journal->id, $transaction->id)); } @@ -176,10 +168,6 @@ class FixTransactionTypes extends Command return $account; } - /** - * @param TransactionJournal $journal - * @param string $expectedType - */ private function changeJournal(TransactionJournal $journal, string $expectedType): void { $type = TransactionType::whereType($expectedType)->first(); diff --git a/app/Console/Commands/Correction/FixUnevenAmount.php b/app/Console/Commands/Correction/FixUnevenAmount.php index 9b09734392..608a3ea32c 100644 --- a/app/Console/Commands/Correction/FixUnevenAmount.php +++ b/app/Console/Commands/Correction/FixUnevenAmount.php @@ -23,12 +23,11 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; -use DB; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use Illuminate\Console\Command; -use stdClass; +use Illuminate\Support\Facades\Log; /** * Class FixUnevenAmount @@ -42,20 +41,23 @@ class FixUnevenAmount extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { $count = 0; - $journals = DB::table('transactions') - ->groupBy('transaction_journal_id') - ->whereNull('deleted_at') - ->get(['transaction_journal_id', DB::raw('SUM(amount) AS the_sum')]); - /** @var stdClass $entry */ + $journals = \DB::table('transactions') + ->groupBy('transaction_journal_id') + ->whereNull('deleted_at') + ->get(['transaction_journal_id', \DB::raw('SUM(amount) AS the_sum')]) + ; + + /** @var \stdClass $entry */ foreach ($journals as $entry) { $sum = (string)$entry->the_sum; - if (!is_numeric($sum) || '' === $sum || str_contains($sum, 'e') || str_contains($sum, ',')) { + if (!is_numeric($sum) + || '' === $sum // @phpstan-ignore-line + || str_contains($sum, 'e') + || str_contains($sum, ',')) { $message = sprintf( 'Journal #%d has an invalid sum ("%s"). No sure what to do.', $entry->transaction_journal_id, @@ -63,10 +65,20 @@ class FixUnevenAmount extends Command ); $this->friendlyWarning($message); app('log')->warning($message); - $count++; + ++$count; + continue; } - if (0 !== bccomp((string)$entry->the_sum, '0')) { + $res = -1; + + try { + $res = bccomp($sum, '0'); + } catch (\ValueError $e) { + $this->friendlyError(sprintf('Could not bccomp("%s", "0").', $sum)); + Log::error($e->getMessage()); + Log::error($e->getTraceAsString()); + } + if (0 !== $res) { $message = sprintf( 'Sum of journal #%d is %s instead of zero.', $entry->transaction_journal_id, @@ -74,8 +86,8 @@ class FixUnevenAmount extends Command ); $this->friendlyWarning($message); app('log')->warning($message); - $this->fixJournal((int)$entry->transaction_journal_id); - $count++; + $this->fixJournal($entry->transaction_journal_id); + ++$count; } } if (0 === $count) { @@ -85,18 +97,16 @@ class FixUnevenAmount extends Command return 0; } - /** - * @param int $param - */ private function fixJournal(int $param): void { // one of the transactions is bad. - $journal = TransactionJournal::find($param); - if (!$journal) { + $journal = TransactionJournal::find($param); + if (null === $journal) { return; } - /** @var Transaction|null $source */ - $source = $journal->transactions()->where('amount', '<', 0)->first(); + + /** @var null|Transaction $source */ + $source = $journal->transactions()->where('amount', '<', 0)->first(); if (null === $source) { $this->friendlyError( @@ -107,16 +117,16 @@ class FixUnevenAmount extends Command ) ); Transaction::where('transaction_journal_id', $journal->id ?? 0)->forceDelete(); - TransactionJournal::where('id', $journal->description ?? 0)->forceDelete(); + TransactionJournal::where('id', $journal->id ?? 0)->forceDelete(); return; } - $amount = bcmul('-1', (string)$source->amount); + $amount = bcmul('-1', $source->amount); // fix amount of destination: - /** @var Transaction|null $destination */ - $destination = $journal->transactions()->where('amount', '>', 0)->first(); + /** @var null|Transaction $destination */ + $destination = $journal->transactions()->where('amount', '>', 0)->first(); if (null === $destination) { $this->friendlyError( @@ -128,7 +138,7 @@ class FixUnevenAmount extends Command ); Transaction::where('transaction_journal_id', $journal->id ?? 0)->forceDelete(); - TransactionJournal::where('id', $journal->description ?? 0)->forceDelete(); + TransactionJournal::where('id', $journal->id ?? 0)->forceDelete(); return; } @@ -136,7 +146,7 @@ class FixUnevenAmount extends Command $destination->amount = $amount; $destination->save(); - $message = sprintf('Corrected amount in transaction journal #%d', $param); + $message = sprintf('Corrected amount in transaction journal #%d', $param); $this->friendlyInfo($message); } } diff --git a/app/Console/Commands/Correction/RemoveBills.php b/app/Console/Commands/Correction/RemoveBills.php index a68ad038b4..e4dd225720 100644 --- a/app/Console/Commands/Correction/RemoveBills.php +++ b/app/Console/Commands/Correction/RemoveBills.php @@ -40,17 +40,16 @@ class RemoveBills extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { - /** @var TransactionType|null $withdrawal */ + /** @var null|TransactionType $withdrawal */ $withdrawal = TransactionType::where('type', TransactionType::WITHDRAWAL)->first(); if (null === $withdrawal) { return 0; } - $journals = TransactionJournal::whereNotNull('bill_id')->where('transaction_type_id', '!=', $withdrawal->id)->get(); + $journals = TransactionJournal::whereNotNull('bill_id')->where('transaction_type_id', '!=', $withdrawal->id)->get(); + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $this->friendlyWarning(sprintf('Transaction journal #%d will be unlinked from bill #%d.', $journal->id, $journal->bill_id)); diff --git a/app/Console/Commands/Correction/RenameMetaFields.php b/app/Console/Commands/Correction/RenameMetaFields.php index 1005114e61..e25c333e16 100644 --- a/app/Console/Commands/Correction/RenameMetaFields.php +++ b/app/Console/Commands/Correction/RenameMetaFields.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; -use DB; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use Illuminate\Console\Command; @@ -37,17 +36,13 @@ class RenameMetaFields extends Command protected $description = 'Rename changed meta fields.'; protected $signature = 'firefly-iii:rename-meta-fields'; - private int $count; + private int $count = 0; /** * Execute the console command. - * - * @return int */ public function handle(): int { - $this->count = 0; - $changes = [ 'original-source' => 'original_source', 'importHash' => 'import_hash', @@ -71,18 +66,16 @@ class RenameMetaFields extends Command if (0 !== $this->count) { $this->friendlyInfo(sprintf('Renamed %d meta field(s).', $this->count)); } + return 0; } - /** - * @param string $original - * @param string $update - */ private function rename(string $original, string $update): void { - $total = DB::table('journal_meta') - ->where('name', '=', $original) - ->update(['name' => $update]); + $total = \DB::table('journal_meta') + ->where('name', '=', $original) + ->update(['name' => $update]) + ; $this->count += $total; } } diff --git a/app/Console/Commands/Correction/TransferBudgets.php b/app/Console/Commands/Correction/TransferBudgets.php index 12372a57ef..e1bb7d3345 100644 --- a/app/Console/Commands/Correction/TransferBudgets.php +++ b/app/Console/Commands/Correction/TransferBudgets.php @@ -27,7 +27,6 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Log; /** * Class TransferBudgets @@ -41,24 +40,24 @@ class TransferBudgets extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { $set = TransactionJournal::distinct() - ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') - ->leftJoin('budget_transaction_journal', 'transaction_journals.id', '=', 'budget_transaction_journal.transaction_journal_id') - ->whereNotIn('transaction_types.type', [TransactionType::WITHDRAWAL]) - ->whereNotNull('budget_transaction_journal.budget_id')->get(['transaction_journals.*']); + ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') + ->leftJoin('budget_transaction_journal', 'transaction_journals.id', '=', 'budget_transaction_journal.transaction_journal_id') + ->whereNotIn('transaction_types.type', [TransactionType::WITHDRAWAL]) + ->whereNotNull('budget_transaction_journal.budget_id')->get(['transaction_journals.*']) + ; $count = 0; + /** @var TransactionJournal $entry */ foreach ($set as $entry) { $message = sprintf('Transaction journal #%d is a %s, so has no longer a budget.', $entry->id, $entry->transactionType->type); $this->friendlyInfo($message); - Log::debug($message); + app('log')->debug($message); $entry->budgets()->sync([]); - $count++; + ++$count; } if (0 === $count) { $message = 'No invalid budget/journal entries.'; @@ -66,9 +65,10 @@ class TransferBudgets extends Command } if (0 !== $count) { $message = sprintf('Corrected %d invalid budget/journal entries (entry).', $count); - Log::debug($message); + app('log')->debug($message); $this->friendlyInfo($message); } + return 0; } } diff --git a/app/Console/Commands/Correction/TriggerCreditCalculation.php b/app/Console/Commands/Correction/TriggerCreditCalculation.php index 21be5aa4fe..1cefe73a3a 100644 --- a/app/Console/Commands/Correction/TriggerCreditCalculation.php +++ b/app/Console/Commands/Correction/TriggerCreditCalculation.php @@ -1,6 +1,5 @@ whereIn('account_types.type', config('firefly.valid_liabilities')) - ->get(['accounts.*']); + ->whereIn('account_types.type', config('firefly.valid_liabilities')) + ->get(['accounts.*']) + ; foreach ($accounts as $account) { $this->processAccount($account); } } - /** - * @param Account $account - * - * @return void - */ private function processAccount(Account $account): void { /** @var CreditRecalculateService $object */ diff --git a/app/Console/Commands/Export/ExportData.php b/app/Console/Commands/Export/ExportData.php index d3c03f1e8c..4e0ba1731a 100644 --- a/app/Console/Commands/Export/ExportData.php +++ b/app/Console/Commands/Export/ExportData.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Export; use Carbon\Carbon; -use Exception; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Console\Commands\VerifiesAccessToken; use FireflyIII\Exceptions\FireflyException; @@ -36,10 +35,6 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Support\Export\ExportDataGenerator; use Illuminate\Console\Command; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use InvalidArgumentException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class ExportData @@ -49,18 +44,9 @@ class ExportData extends Command use ShowsFriendlyMessages; use VerifiesAccessToken; - /** - * The console command description. - * - * @var string - */ protected $description = 'Command to export data from Firefly III.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:export-data + + protected $signature = 'firefly-iii:export-data {--user=1 : The user ID that the export should run for.} {--token= : The user\'s access token.} {--start= : First transaction to export. Defaults to your very first transaction. Only applies to transaction export.} @@ -83,10 +69,7 @@ class ExportData extends Command /** * Execute the console command. * - * @return int * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -98,9 +81,10 @@ class ExportData extends Command } // set up repositories. $this->stupidLaravel(); - $user = $this->getUser(); + $user = $this->getUser(); $this->journalRepository->setUser($user); $this->accountRepository->setUser($user); + // get the options. try { $options = $this->parseOptions(); @@ -109,9 +93,10 @@ class ExportData extends Command return 1; } + // make export object and configure it. /** @var ExportDataGenerator $exporter */ - $exporter = app(ExportDataGenerator::class); + $exporter = app(ExportDataGenerator::class); $exporter->setUser($user); $exporter->setStart($options['start']); @@ -126,7 +111,7 @@ class ExportData extends Command $exporter->setExportRules($options['export']['rules']); $exporter->setExportBills($options['export']['bills']); $exporter->setExportPiggies($options['export']['piggies']); - $data = $exporter->export(); + $data = $exporter->export(); if (0 === count($data)) { $this->friendlyError('You must export *something*. Use --export-transactions or another option. See docs.firefly-iii.org'); } @@ -148,8 +133,6 @@ class ExportData extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * - */ private function stupidLaravel(): void { @@ -158,9 +141,8 @@ class ExportData extends Command } /** - * @return array * @throws FireflyException - * @throws Exception + * @throws \Exception */ private function parseOptions(): array { @@ -190,26 +172,33 @@ class ExportData extends Command } /** - * @param string $field - * - * @return Carbon - * @throws Exception + * @throws \Exception */ private function getDateParameter(string $field): Carbon { $date = today(config('app.timezone'))->subYear(); $error = false; - if (null !== $this->option($field)) { + + if (!in_array($field, ['start', 'end'], true)) { + throw new FireflyException(sprintf('Invalid field "%s" given, can only be "start" or "end".', $field)); + } + + if (is_string($this->option($field))) { try { $date = Carbon::createFromFormat('!Y-m-d', $this->option($field)); - } catch (InvalidArgumentException $e) { - Log::error($e->getMessage()); + } catch (\InvalidArgumentException $e) { + app('log')->error($e->getMessage()); $this->friendlyError(sprintf('%s date "%s" must be formatted YYYY-MM-DD. Field will be ignored.', $field, $this->option('start'))); $error = true; } + if (false === $date) { + $this->friendlyError(sprintf('%s date "%s" must be formatted YYYY-MM-DD.', $field, $this->option('start'))); + + throw new FireflyException(sprintf('%s date "%s" must be formatted YYYY-MM-DD.', $field, $this->option('start'))); + } } if (null === $this->option($field)) { - Log::info(sprintf('No date given in field "%s"', $field)); + app('log')->info(sprintf('No date given in field "%s"', $field)); $error = true; } @@ -217,12 +206,17 @@ class ExportData extends Command $journal = $this->journalRepository->firstNull(); $date = null === $journal ? today(config('app.timezone'))->subYear() : $journal->date; $date->startOfDay(); - } - if (true === $error && 'end' === $field) { + return $date; + } + // field can only be 'end' at this point, so no need to include it in the check. + if (true === $error) { $date = today(config('app.timezone')); $date->endOfDay(); + + return $date; } + if ('end' === $field) { $date->endOfDay(); } @@ -231,22 +225,22 @@ class ExportData extends Command } /** - * @return Collection * @throws FireflyException */ private function getAccountsParameter(): Collection { $final = new Collection(); $accounts = new Collection(); - $accountList = $this->option('accounts'); + $accountList = (string)$this->option('accounts'); $types = [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]; - if (null !== $accountList && '' !== (string)$accountList) { + if ('' !== $accountList) { $accountIds = explode(',', $accountList); $accounts = $this->accountRepository->getAccountsById($accountIds); } - if (null === $accountList) { + if ('' === $accountList) { $accounts = $this->accountRepository->getAccountsByType($types); } + // filter accounts, /** @var Account $account */ foreach ($accounts as $account) { @@ -262,14 +256,12 @@ class ExportData extends Command } /** - * @return string * @throws FireflyException - * */ private function getExportDirectory(): string { $directory = (string)$this->option('export_directory'); - if (null === $directory) { + if ('' === $directory) { $directory = './'; } if (!is_writable($directory)) { @@ -280,9 +272,6 @@ class ExportData extends Command } /** - * @param array $options - * @param array $data - * * @throws FireflyException */ private function exportData(array $options, array $data): void diff --git a/app/Console/Commands/Integrity/CreateGroupMemberships.php b/app/Console/Commands/Integrity/CreateGroupMemberships.php index 5351c496f9..0927f1b7cb 100644 --- a/app/Console/Commands/Integrity/CreateGroupMemberships.php +++ b/app/Console/Commands/Integrity/CreateGroupMemberships.php @@ -40,14 +40,13 @@ class CreateGroupMemberships extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '560_create_group_memberships'; - protected $description = 'Update group memberships'; - protected $signature = 'firefly-iii:create-group-memberships'; + public const string CONFIG_NAME = '560_create_group_memberships'; + protected $description = 'Update group memberships'; + protected $signature = 'firefly-iii:create-group-memberships'; /** * Execute the console command. * - * @return int * @throws FireflyException */ public function handle(): int @@ -59,12 +58,12 @@ class CreateGroupMemberships extends Command } /** - * * @throws FireflyException */ private function createGroupMemberships(): void { $users = User::get(); + /** @var User $user */ foreach ($users as $user) { self::createGroupMembership($user); @@ -74,26 +73,25 @@ class CreateGroupMemberships extends Command /** * TODO move to helper. * - * @param User $user - * * @throws FireflyException */ public static function createGroupMembership(User $user): void { // check if membership exists - $userGroup = UserGroup::where('title', $user->email)->first(); + $userGroup = UserGroup::where('title', $user->email)->first(); if (null === $userGroup) { $userGroup = UserGroup::create(['title' => $user->email]); } - $userRole = UserRole::where('title', UserRoleEnum::OWNER->value)->first(); + $userRole = UserRole::where('title', UserRoleEnum::OWNER->value)->first(); if (null === $userRole) { throw new FireflyException('Firefly III could not find a user role. Please make sure all migrations have run.'); } $membership = GroupMembership::where('user_id', $user->id) - ->where('user_group_id', $userGroup->id) - ->where('user_role_id', $userRole->id)->first(); + ->where('user_group_id', $userGroup->id) + ->where('user_role_id', $userRole->id)->first() + ; if (null === $membership) { GroupMembership::create( [ diff --git a/app/Console/Commands/Integrity/ReportEmptyObjects.php b/app/Console/Commands/Integrity/ReportEmptyObjects.php index 2152694ed8..1aa793c763 100644 --- a/app/Console/Commands/Integrity/ReportEmptyObjects.php +++ b/app/Console/Commands/Integrity/ReportEmptyObjects.php @@ -29,7 +29,6 @@ use FireflyIII\Models\Budget; use FireflyIII\Models\Category; use FireflyIII\Models\Tag; use Illuminate\Console\Command; -use stdClass; /** * Class ReportEmptyObjects @@ -38,23 +37,12 @@ class ReportEmptyObjects extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Reports on empty database objects.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:report-empty-objects'; + + protected $signature = 'firefly-iii:report-empty-objects'; /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -73,13 +61,14 @@ class ReportEmptyObjects extends Command private function reportEmptyBudgets(): void { $set = Budget::leftJoin('budget_transaction_journal', 'budgets.id', '=', 'budget_transaction_journal.budget_id') - ->leftJoin('users', 'budgets.user_id', '=', 'users.id') - ->distinct() - ->whereNull('budget_transaction_journal.budget_id') - ->whereNull('budgets.deleted_at') - ->get(['budgets.id', 'budgets.name', 'budgets.user_id', 'users.email']); + ->leftJoin('users', 'budgets.user_id', '=', 'users.id') + ->distinct() + ->whereNull('budget_transaction_journal.budget_id') + ->whereNull('budgets.deleted_at') + ->get(['budgets.id', 'budgets.name', 'budgets.user_id', 'users.email']) + ; - /** @var stdClass $entry */ + /** @var \stdClass $entry */ foreach ($set as $entry) { $line = sprintf( 'User #%d (%s) has budget #%d ("%s") which has no transaction journals.', @@ -98,13 +87,14 @@ class ReportEmptyObjects extends Command private function reportEmptyCategories(): void { $set = Category::leftJoin('category_transaction_journal', 'categories.id', '=', 'category_transaction_journal.category_id') - ->leftJoin('users', 'categories.user_id', '=', 'users.id') - ->distinct() - ->whereNull('category_transaction_journal.category_id') - ->whereNull('categories.deleted_at') - ->get(['categories.id', 'categories.name', 'categories.user_id', 'users.email']); + ->leftJoin('users', 'categories.user_id', '=', 'users.id') + ->distinct() + ->whereNull('category_transaction_journal.category_id') + ->whereNull('categories.deleted_at') + ->get(['categories.id', 'categories.name', 'categories.user_id', 'users.email']) + ; - /** @var stdClass $entry */ + /** @var \stdClass $entry */ foreach ($set as $entry) { $line = sprintf( 'User #%d (%s) has category #%d ("%s") which has no transaction journals.', @@ -117,19 +107,17 @@ class ReportEmptyObjects extends Command } } - /** - * - */ private function reportEmptyTags(): void { $set = Tag::leftJoin('tag_transaction_journal', 'tags.id', '=', 'tag_transaction_journal.tag_id') - ->leftJoin('users', 'tags.user_id', '=', 'users.id') - ->distinct() - ->whereNull('tag_transaction_journal.tag_id') - ->whereNull('tags.deleted_at') - ->get(['tags.id', 'tags.tag', 'tags.user_id', 'users.email']); + ->leftJoin('users', 'tags.user_id', '=', 'users.id') + ->distinct() + ->whereNull('tag_transaction_journal.tag_id') + ->whereNull('tags.deleted_at') + ->get(['tags.id', 'tags.tag', 'tags.user_id', 'users.email']) + ; - /** @var stdClass $entry */ + /** @var \stdClass $entry */ foreach ($set as $entry) { $line = sprintf( 'User #%d (%s) has tag #%d ("%s") which has no transaction journals.', @@ -148,14 +136,15 @@ class ReportEmptyObjects extends Command private function reportAccounts(): void { $set = Account::leftJoin('transactions', 'transactions.account_id', '=', 'accounts.id') - ->leftJoin('users', 'accounts.user_id', '=', 'users.id') - ->groupBy(['accounts.id', 'accounts.encrypted', 'accounts.name', 'accounts.user_id', 'users.email']) - ->whereNull('transactions.account_id') - ->get( - ['accounts.id', 'accounts.encrypted', 'accounts.name', 'accounts.user_id', 'users.email'] - ); + ->leftJoin('users', 'accounts.user_id', '=', 'users.id') + ->groupBy(['accounts.id', 'accounts.encrypted', 'accounts.name', 'accounts.user_id', 'users.email']) + ->whereNull('transactions.account_id') + ->get( + ['accounts.id', 'accounts.encrypted', 'accounts.name', 'accounts.user_id', 'users.email'] + ) + ; - /** @var stdClass $entry */ + /** @var \stdClass $entry */ foreach ($set as $entry) { $line = 'User #%d (%s) has account #%d ("%s") which has no transactions.'; $line = sprintf($line, $entry->user_id, $entry->email, $entry->id, $entry->name); @@ -169,10 +158,11 @@ class ReportEmptyObjects extends Command private function reportBudgetLimits(): void { $set = Budget::leftJoin('budget_limits', 'budget_limits.budget_id', '=', 'budgets.id') - ->leftJoin('users', 'budgets.user_id', '=', 'users.id') - ->groupBy(['budgets.id', 'budgets.name', 'budgets.encrypted', 'budgets.user_id', 'users.email']) - ->whereNull('budget_limits.id') - ->get(['budgets.id', 'budgets.name', 'budgets.user_id', 'budgets.encrypted', 'users.email']); + ->leftJoin('users', 'budgets.user_id', '=', 'users.id') + ->groupBy(['budgets.id', 'budgets.name', 'budgets.encrypted', 'budgets.user_id', 'users.email']) + ->whereNull('budget_limits.id') + ->get(['budgets.id', 'budgets.name', 'budgets.user_id', 'budgets.encrypted', 'users.email']) + ; /** @var Budget $entry */ foreach ($set as $entry) { diff --git a/app/Console/Commands/Integrity/ReportIntegrity.php b/app/Console/Commands/Integrity/ReportIntegrity.php index 5075e69ea9..5d4d48064e 100644 --- a/app/Console/Commands/Integrity/ReportIntegrity.php +++ b/app/Console/Commands/Integrity/ReportIntegrity.php @@ -23,32 +23,19 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Integrity; -use Artisan; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use Illuminate\Console\Command; -use Schema; /** * Class ReportIntegrity - * - */ class ReportIntegrity extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Will report on the integrity of your database.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:report-integrity'; + + protected $signature = 'firefly-iii:report-integrity'; /** * Execute the console command. @@ -56,7 +43,7 @@ class ReportIntegrity extends Command public function handle(): int { // if table does not exist, return false - if (!Schema::hasTable('users')) { + if (!\Schema::hasTable('users')) { return 1; } $commands = [ diff --git a/app/Console/Commands/Integrity/ReportSkeleton.php.stub b/app/Console/Commands/Integrity/ReportSkeleton.php.stub index bf37df022f..fa771b24c9 100644 --- a/app/Console/Commands/Integrity/ReportSkeleton.php.stub +++ b/app/Console/Commands/Integrity/ReportSkeleton.php.stub @@ -10,17 +10,9 @@ use Illuminate\Console\Command; */ class ReportSkeleton extends Command { - /** - * The console command description. - * - * @var string - */ + protected $description = 'DESCRIPTION HERE'; - /** - * The name and signature of the console command. - * - * @var string - */ + protected $signature = 'firefly-iii:INT_COMMAND'; /** diff --git a/app/Console/Commands/Integrity/ReportSum.php b/app/Console/Commands/Integrity/ReportSum.php index 9dc5192edf..a586b9b507 100644 --- a/app/Console/Commands/Integrity/ReportSum.php +++ b/app/Console/Commands/Integrity/ReportSum.php @@ -40,8 +40,6 @@ class ReportSum extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -64,6 +62,7 @@ class ReportSum extends Command if (!is_numeric($sum)) { $message = sprintf('Error: Transactions for user #%d (%s) have an invalid sum ("%s").', $user->id, $user->email, $sum); $this->friendlyError($message); + continue; } if (0 !== bccomp($sum, '0')) { diff --git a/app/Console/Commands/Integrity/RestoreOAuthKeys.php b/app/Console/Commands/Integrity/RestoreOAuthKeys.php index 463b270c91..b84a7eec14 100644 --- a/app/Console/Commands/Integrity/RestoreOAuthKeys.php +++ b/app/Console/Commands/Integrity/RestoreOAuthKeys.php @@ -40,8 +40,6 @@ class RestoreOAuthKeys extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -50,9 +48,6 @@ class RestoreOAuthKeys extends Command return 0; } - /** - * - */ private function restoreOAuthKeys(): void { if (!$this->keysInDatabase() && !$this->keysOnDrive()) { @@ -84,41 +79,26 @@ class RestoreOAuthKeys extends Command $this->friendlyPositive('OAuth keys are OK'); } - /** - * @return bool - */ private function keysInDatabase(): bool { return OAuthKeys::keysInDatabase(); } - /** - * @return bool - */ private function keysOnDrive(): bool { return OAuthKeys::hasKeyFiles(); } - /** - * - */ private function generateKeys(): void { OAuthKeys::generateKeys(); } - /** - * - */ private function storeKeysInDB(): void { OAuthKeys::storeKeysInDB(); } - /** - * - */ private function restoreKeysFromDB(): bool { return OAuthKeys::restoreKeysFromDB(); diff --git a/app/Console/Commands/Integrity/UpdateGroupInformation.php b/app/Console/Commands/Integrity/UpdateGroupInformation.php index 305026d943..e3e8c5eaef 100644 --- a/app/Console/Commands/Integrity/UpdateGroupInformation.php +++ b/app/Console/Commands/Integrity/UpdateGroupInformation.php @@ -66,6 +66,7 @@ class UpdateGroupInformation extends Command // recurrences, rule groups, rules, tags, transaction groups, transaction journals, webhooks $users = User::get(); + /** @var User $user */ foreach ($users as $user) { $this->updateGroupInfo($user); @@ -74,11 +75,6 @@ class UpdateGroupInformation extends Command return 0; } - /** - * @param User $user - * - * @return void - */ private function updateGroupInfo(User $user): void { $group = $user->userGroup; @@ -87,7 +83,7 @@ class UpdateGroupInformation extends Command return; } - $set = [ + $set = [ Account::class, Attachment::class, AvailableBudget::class, @@ -109,13 +105,6 @@ class UpdateGroupInformation extends Command } } - /** - * @param User $user - * @param UserGroup $group - * @param string $className - * - * @return void - */ private function updateGroupInfoForObject(User $user, UserGroup $group, string $className): void { try { diff --git a/app/Console/Commands/ShowsFriendlyMessages.php b/app/Console/Commands/ShowsFriendlyMessages.php index bc40b466d1..1046218d0f 100644 --- a/app/Console/Commands/ShowsFriendlyMessages.php +++ b/app/Console/Commands/ShowsFriendlyMessages.php @@ -1,6 +1,5 @@ error(sprintf(' [x] %s', trim($message))); } - /** - * @param string $message - * - * @return void - */ public function friendlyInfo(string $message): void { $this->friendlyNeutral($message); } - /** - * @param string $message - * - * @return void - */ public function friendlyNeutral(string $message): void { $this->line(sprintf(' [i] %s', trim($message))); } - /** - * @param string $message - * - * @return void - */ public function friendlyLine(string $message): void { $this->line(sprintf(' %s', trim($message))); } - /** - * @param string $message - * - * @return void - */ public function friendlyPositive(string $message): void { $this->info(sprintf(' [✓] %s', trim($message))); } - /** - * @param string $message - * - * @return void - */ public function friendlyWarning(string $message): void { $this->warn(sprintf(' [!] %s', trim($message))); } - } diff --git a/app/Console/Commands/System/CreateDatabase.php b/app/Console/Commands/System/CreateDatabase.php index b34914e310..64b1c65895 100644 --- a/app/Console/Commands/System/CreateDatabase.php +++ b/app/Console/Commands/System/CreateDatabase.php @@ -27,7 +27,6 @@ namespace FireflyIII\Console\Commands\System; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use Illuminate\Console\Command; use PDO; -use PDOException; /** * Class CreateDatabase @@ -36,23 +35,14 @@ class CreateDatabase extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Tries to create the database if it doesn\'t exist yet.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:create-database'; + + protected $signature = 'firefly-iii:create-database'; /** * Execute the console command. * - * @return int + * @suppressWarnings(PHPMD.MissingImport) */ public function handle(): int { @@ -62,9 +52,7 @@ class CreateDatabase extends Command return 0; } // try to set up a raw connection: - $pdo = false; $exists = false; - $checked = false; // checked for existence of DB? $dsn = sprintf('mysql:host=%s;port=%d;charset=utf8mb4', env('DB_HOST', 'localhost'), env('DB_PORT', '3306')); if ('' !== env('DB_SOCKET', '')) { @@ -73,39 +61,39 @@ class CreateDatabase extends Command $this->friendlyLine(sprintf('DSN is %s', $dsn)); $options = [ - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::ATTR_EMULATE_PREPARES => false, + \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, + \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, + \PDO::ATTR_EMULATE_PREPARES => false, ]; // when it fails, display error try { - $pdo = new PDO($dsn, env('DB_USERNAME'), env('DB_PASSWORD'), $options); - } catch (PDOException $e) { + $pdo = new \PDO($dsn, env('DB_USERNAME'), env('DB_PASSWORD'), $options); + } catch (\PDOException $e) { $this->friendlyError(sprintf('Error when connecting to DB: %s', $e->getMessage())); + + return 1; } // only continue when no error. - if (false !== $pdo) { - // with PDO, try to list DB's ( - $stmt = $pdo->query('SHOW DATABASES;'); - $checked = true; - // slightly more complex but less error prone. - foreach ($stmt as $row) { - $name = $row['Database'] ?? false; - if ($name === env('DB_DATABASE')) { - $exists = true; - } + // with PDO, try to list DB's ( + /** @var array $stmt */ + $stmt = $pdo->query('SHOW DATABASES;'); + // slightly more complex but less error-prone. + foreach ($stmt as $row) { + $name = $row['Database'] ?? false; + if ($name === env('DB_DATABASE')) { + $exists = true; } } - if (false === $exists && true === $checked) { + if (false === $exists) { $this->friendlyError(sprintf('Database "%s" does not exist.', env('DB_DATABASE'))); // try to create it. $pdo->exec(sprintf('CREATE DATABASE `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;', env('DB_DATABASE'))); $this->friendlyInfo(sprintf('Created database "%s"', env('DB_DATABASE'))); } - if (true === $exists && true === $checked) { + if (true === $exists) { $this->friendlyInfo(sprintf('Database "%s" exists.', env('DB_DATABASE'))); } diff --git a/app/Console/Commands/System/CreateFirstUser.php b/app/Console/Commands/System/CreateFirstUser.php index a547a3e47a..8a4d5dc882 100644 --- a/app/Console/Commands/System/CreateFirstUser.php +++ b/app/Console/Commands/System/CreateFirstUser.php @@ -28,35 +28,21 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Repositories\User\UserRepositoryInterface; use Illuminate\Console\Command; use Illuminate\Support\Facades\Hash; -use Str; /** * Class CreateFirstUser - * - * @package FireflyIII\Console\Commands */ class CreateFirstUser extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Creates a new user and gives admin rights. Outputs the password on the command line. Strictly for testing.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:create-first-user {email}'; + + protected $signature = 'firefly-iii:create-first-user {email}'; private UserRepositoryInterface $repository; /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -66,7 +52,7 @@ class CreateFirstUser extends Command return 1; } $this->stupidLaravel(); - $count = $this->repository->count(); + $count = $this->repository->count(); if ($count > 0) { $this->friendlyError('Already have more than zero users in DB.'); @@ -78,11 +64,11 @@ class CreateFirstUser extends Command 'email' => $this->argument('email'), 'role' => 'owner', ]; - $password = Str::random(24); + $password = \Str::random(24); $user = $this->repository->store($data); $user->password = Hash::make($password); $user->save(); - $user->setRememberToken(Str::random(60)); + $user->setRememberToken(\Str::random(60)); $this->friendlyInfo(sprintf('Created new admin user (ID #%d) with email address "%s" and password "%s".', $user->id, $user->email, $password)); $this->friendlyWarning('Change this password.'); @@ -94,8 +80,6 @@ class CreateFirstUser extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * - */ private function stupidLaravel(): void { diff --git a/app/Console/Commands/System/ForceDecimalSize.php b/app/Console/Commands/System/ForceDecimalSize.php index 70b2e7384d..19cda1faa2 100644 --- a/app/Console/Commands/System/ForceDecimalSize.php +++ b/app/Console/Commands/System/ForceDecimalSize.php @@ -41,7 +41,6 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Log; /** * Class ForceDecimalSize @@ -54,48 +53,47 @@ class ForceDecimalSize extends Command { use ShowsFriendlyMessages; - protected $description = 'This command resizes DECIMAL columns in MySQL or PostgreSQL and correct amounts (only MySQL).'; - protected $signature = 'firefly-iii:force-decimal-size'; + protected $description = 'This command resizes DECIMAL columns in MySQL or PostgreSQL and correct amounts (only MySQL).'; + protected $signature = 'firefly-iii:force-decimal-size'; private string $cast; private array $classes = [ - 'accounts' => Account::class, - 'auto_budgets' => AutoBudget::class, - 'available_budgets' => AvailableBudget::class, - 'bills' => Bill::class, - 'budget_limits' => BudgetLimit::class, - 'piggy_bank_events' => PiggyBankEvent::class, - 'piggy_bank_repetitions' => PiggyBankRepetition::class, - 'piggy_banks' => PiggyBank::class, - 'recurrences_transactions' => RecurrenceTransaction::class, - 'transactions' => Transaction::class, - ]; + 'accounts' => Account::class, + 'auto_budgets' => AutoBudget::class, + 'available_budgets' => AvailableBudget::class, + 'bills' => Bill::class, + 'budget_limits' => BudgetLimit::class, + 'piggy_bank_events' => PiggyBankEvent::class, + 'piggy_bank_repetitions' => PiggyBankRepetition::class, + 'piggy_banks' => PiggyBank::class, + 'recurrences_transactions' => RecurrenceTransaction::class, + 'transactions' => Transaction::class, + ]; private string $operator; private string $regularExpression; private array $tables - = [ - 'accounts' => ['virtual_balance'], - 'auto_budgets' => ['amount'], - 'available_budgets' => ['amount'], - 'bills' => ['amount_min', 'amount_max'], - 'budget_limits' => ['amount'], - 'currency_exchange_rates' => ['rate', 'user_rate'], - 'limit_repetitions' => ['amount'], - 'piggy_bank_events' => ['amount'], - 'piggy_bank_repetitions' => ['currentamount'], - 'piggy_banks' => ['targetamount'], - 'recurrences_transactions' => ['amount', 'foreign_amount'], - 'transactions' => ['amount', 'foreign_amount'], - ]; + = [ + 'accounts' => ['virtual_balance'], + 'auto_budgets' => ['amount'], + 'available_budgets' => ['amount'], + 'bills' => ['amount_min', 'amount_max'], + 'budget_limits' => ['amount'], + 'currency_exchange_rates' => ['rate', 'user_rate'], + 'limit_repetitions' => ['amount'], + 'piggy_bank_events' => ['amount'], + 'piggy_bank_repetitions' => ['currentamount'], + 'piggy_banks' => ['targetamount'], + 'recurrences_transactions' => ['amount', 'foreign_amount'], + 'transactions' => ['amount', 'foreign_amount'], + ]; /** * Execute the console command. - * */ public function handle(): int { - Log::debug('Now in ForceDecimalSize::handle()'); + app('log')->debug('Now in ForceDecimalSize::handle()'); $this->determineDatabaseType(); $this->friendlyError('Running this command is dangerous and can cause data loss.'); @@ -109,9 +107,6 @@ class ForceDecimalSize extends Command return 0; } - /** - * @return void - */ private function determineDatabaseType(): void { // switch stuff based on database connection: @@ -130,14 +125,12 @@ class ForceDecimalSize extends Command /** * This method checks if a basic check can be done or if it needs to be complicated. - * - * @return void */ private function correctAmounts(): void { // if sqlite, add function? if ('sqlite' === (string)config('database.default')) { - DB::connection()->getPdo()->sqliteCreateFunction('REGEXP', function ($pattern, $value) { + DB::connection()->getPdo()->sqliteCreateFunction('REGEXP', static function ($pattern, $value) { mb_regex_encoding('UTF-8'); $pattern = trim($pattern, '"'); @@ -156,13 +149,13 @@ class ForceDecimalSize extends Command /** * This method loops all enabled currencies and then calls the method that will fix all objects in this currency. * - * @return void * @throws FireflyException */ private function correctAmountsByCurrency(): void { /** @var Collection $enabled */ $enabled = TransactionCurrency::whereEnabled(1)->get(); + /** @var TransactionCurrency $currency */ foreach ($enabled as $currency) { $this->correctByCurrency($currency); @@ -172,9 +165,6 @@ class ForceDecimalSize extends Command /** * This method loops the available tables that may need fixing, and calls for the right method that can fix them. * - * @param TransactionCurrency $currency - * - * @return void * @throws FireflyException */ private function correctByCurrency(TransactionCurrency $currency): void @@ -184,36 +174,50 @@ class ForceDecimalSize extends Command * @var array $fields */ foreach ($this->tables as $name => $fields) { - switch ($name) { + switch ($name) { // @phpstan-ignore-line default: $message = sprintf('Cannot handle table "%s"', $name); $this->friendlyError($message); + throw new FireflyException($message); + case 'accounts': $this->correctAccountAmounts($currency, $fields); + break; + case 'auto_budgets': case 'available_budgets': case 'bills': case 'budget_limits': case 'recurrences_transactions': $this->correctGeneric($currency, $name); + break; + case 'currency_exchange_rates': case 'limit_repetitions': // do nothing break; + case 'piggy_bank_events': $this->correctPiggyEventAmounts($currency, $fields); + break; + case 'piggy_bank_repetitions': $this->correctPiggyRepetitionAmounts($currency, $fields); + break; + case 'piggy_banks': $this->correctPiggyAmounts($currency, $fields); + break; + case 'transactions': $this->correctTransactionAmounts($currency); + break; } } @@ -221,11 +225,6 @@ class ForceDecimalSize extends Command /** * This method loops over all accounts and validates the amounts. - * - * @param TransactionCurrency $currency - * @param array $fields - * - * @return void */ private function correctAccountAmounts(TransactionCurrency $currency, array $fields): void { @@ -234,33 +233,36 @@ class ForceDecimalSize extends Command $regularExpression = $this->regularExpression; /** @var Builder $query */ - $query = Account::leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') - ->where('account_meta.name', 'currency_id') - ->where('account_meta.data', json_encode((string)$currency->id)); - $query->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression) { + $query = Account::leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') + ->where('account_meta.name', 'currency_id') + ->where('account_meta.data', json_encode((string)$currency->id)) + ; + $query->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression): void { foreach ($fields as $field) { $q->orWhere( - DB::raw(sprintf('CAST(accounts.%s AS %s)', $field, $cast)), + DB::raw(sprintf('CAST(accounts.%s AS %s)', $field, $cast)), // @phpstan-ignore-line $operator, DB::raw(sprintf($regularExpression, $currency->decimal_places)) ); } }); - $result = $query->get(['accounts.*']); + $result = $query->get(['accounts.*']); if (0 === $result->count()) { $this->friendlyPositive(sprintf('All accounts in %s are OK', $currency->code)); return; } + /** @var Account $account */ foreach ($result as $account) { + /** @var string $field */ foreach ($fields as $field) { - $value = $account->$field; + $value = $account->{$field}; if (null === $value) { continue; } // fix $field by rounding it down correctly. - $pow = pow(10, (int)$currency->decimal_places); + $pow = 10 ** $currency->decimal_places; $correct = bcdiv((string)round($value * $pow), (string)$pow, 12); $this->friendlyInfo(sprintf('Account #%d has %s with value "%s", this has been corrected to "%s".', $account->id, $field, $value, $correct)); Account::find($account->id)->update([$field => $correct]); @@ -270,11 +272,6 @@ class ForceDecimalSize extends Command /** * This method fixes all auto budgets in currency $currency. - * - * @param TransactionCurrency $currency - * @param string $table - * - * @return void */ private function correctGeneric(TransactionCurrency $currency, string $table): void { @@ -285,11 +282,12 @@ class ForceDecimalSize extends Command $regularExpression = $this->regularExpression; /** @var Builder $query */ - $query = $class::where('transaction_currency_id', $currency->id)->where( - static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression) { + $query = $class::where('transaction_currency_id', $currency->id)->where( + static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression): void { + /** @var string $field */ foreach ($fields as $field) { $q->orWhere( - DB::raw(sprintf('CAST(%s AS %s)', $field, $cast)), + DB::raw(sprintf('CAST(%s AS %s)', $field, $cast)), // @phpstan-ignore-line $operator, DB::raw(sprintf($regularExpression, $currency->decimal_places)) ); @@ -297,21 +295,23 @@ class ForceDecimalSize extends Command } ); - $result = $query->get(['*']); + $result = $query->get(['*']); if (0 === $result->count()) { $this->friendlyPositive(sprintf('All %s in %s are OK', $table, $currency->code)); return; } + /** @var Model $item */ foreach ($result as $item) { + /** @var string $field */ foreach ($fields as $field) { - $value = $item->$field; + $value = $item->{$field}; if (null === $value) { continue; } // fix $field by rounding it down correctly. - $pow = pow(10, (int)$currency->decimal_places); + $pow = 10 ** $currency->decimal_places; $correct = bcdiv((string)round($value * $pow), (string)$pow, 12); $this->friendlyWarning(sprintf('%s #%d has %s with value "%s", this has been corrected to "%s".', $table, $item->id, $field, $value, $correct)); $class::find($item->id)->update([$field => $correct]); @@ -321,11 +321,6 @@ class ForceDecimalSize extends Command /** * This method fixes all piggy bank events in currency $currency. - * - * @param TransactionCurrency $currency - * @param array $fields - * - * @return void */ private function correctPiggyEventAmounts(TransactionCurrency $currency, array $fields): void { @@ -334,36 +329,39 @@ class ForceDecimalSize extends Command $regularExpression = $this->regularExpression; /** @var Builder $query */ - $query = PiggyBankEvent::leftJoin('piggy_banks', 'piggy_bank_events.piggy_bank_id', '=', 'piggy_banks.id') - ->leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id') - ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') - ->where('account_meta.name', 'currency_id') - ->where('account_meta.data', json_encode((string)$currency->id)) - ->where(static function (Builder $q) use ($fields, $currency, $cast, $operator, $regularExpression) { - foreach ($fields as $field) { - $q->orWhere( - DB::raw(sprintf('CAST(piggy_bank_events.%s AS %s)', $field, $cast)), - $operator, - DB::raw(sprintf($regularExpression, $currency->decimal_places)) - ); - } - }); + $query = PiggyBankEvent::leftJoin('piggy_banks', 'piggy_bank_events.piggy_bank_id', '=', 'piggy_banks.id') + ->leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id') + ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') + ->where('account_meta.name', 'currency_id') + ->where('account_meta.data', json_encode((string)$currency->id)) + ->where(static function (Builder $q) use ($fields, $currency, $cast, $operator, $regularExpression): void { + foreach ($fields as $field) { + $q->orWhere( + DB::raw(sprintf('CAST(piggy_bank_events.%s AS %s)', $field, $cast)), // @phpstan-ignore-line + $operator, + DB::raw(sprintf($regularExpression, $currency->decimal_places)) + ); + } + }) + ; - $result = $query->get(['piggy_bank_events.*']); + $result = $query->get(['piggy_bank_events.*']); if (0 === $result->count()) { $this->friendlyPositive(sprintf('All piggy bank events in %s are OK', $currency->code)); return; } + /** @var PiggyBankEvent $item */ foreach ($result as $item) { + /** @var string $field */ foreach ($fields as $field) { - $value = $item->$field; + $value = $item->{$field}; if (null === $value) { continue; } // fix $field by rounding it down correctly. - $pow = pow(10, (int)$currency->decimal_places); + $pow = 10 ** $currency->decimal_places; $correct = bcdiv((string)round($value * $pow), (string)$pow, 12); $this->friendlyWarning( sprintf('Piggy bank event #%d has %s with value "%s", this has been corrected to "%s".', $item->id, $field, $value, $correct) @@ -375,49 +373,48 @@ class ForceDecimalSize extends Command /** * This method fixes all piggy bank repetitions in currency $currency. - * - * @param TransactionCurrency $currency - * @param array $fields - * - * @return void */ - private function correctPiggyRepetitionAmounts(TransactionCurrency $currency, array $fields) + private function correctPiggyRepetitionAmounts(TransactionCurrency $currency, array $fields): void { $operator = $this->operator; $cast = $this->cast; $regularExpression = $this->regularExpression; + // select all piggy bank repetitions with this currency and issue. /** @var Builder $query */ - $query = PiggyBankRepetition::leftJoin('piggy_banks', 'piggy_bank_repetitions.piggy_bank_id', '=', 'piggy_banks.id') - ->leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id') - ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') - ->where('account_meta.name', 'currency_id') - ->where('account_meta.data', json_encode((string)$currency->id)) - ->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression) { - foreach ($fields as $field) { - $q->orWhere( - DB::raw(sprintf('CAST(piggy_bank_repetitions.%s AS %s)', $field, $cast)), - $operator, - DB::raw(sprintf($regularExpression, $currency->decimal_places)) - ); - } - }); + $query = PiggyBankRepetition::leftJoin('piggy_banks', 'piggy_bank_repetitions.piggy_bank_id', '=', 'piggy_banks.id') + ->leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id') + ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') + ->where('account_meta.name', 'currency_id') + ->where('account_meta.data', json_encode((string)$currency->id)) + ->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression): void { + foreach ($fields as $field) { + $q->orWhere( + DB::raw(sprintf('CAST(piggy_bank_repetitions.%s AS %s)', $field, $cast)), // @phpstan-ignore-line + $operator, + DB::raw(sprintf($regularExpression, $currency->decimal_places)) + ); + } + }) + ; - $result = $query->get(['piggy_bank_repetitions.*']); + $result = $query->get(['piggy_bank_repetitions.*']); if (0 === $result->count()) { $this->friendlyPositive(sprintf('All piggy bank repetitions in %s', $currency->code)); return; } + /** @var PiggyBankRepetition $item */ foreach ($result as $item) { + /** @var string $field */ foreach ($fields as $field) { - $value = $item->$field; + $value = $item->{$field}; if (null === $value) { continue; } // fix $field by rounding it down correctly. - $pow = pow(10, (int)$currency->decimal_places); + $pow = 10 ** $currency->decimal_places; $correct = bcdiv((string)round($value * $pow), (string)$pow, 12); $this->friendlyWarning( sprintf('Piggy bank repetition #%d has %s with value "%s", this has been corrected to "%s".', $item->id, $field, $value, $correct) @@ -429,11 +426,6 @@ class ForceDecimalSize extends Command /** * This method fixes all piggy banks in currency $currency. - * - * @param TransactionCurrency $currency - * @param array $fields - * - * @return void */ private function correctPiggyAmounts(TransactionCurrency $currency, array $fields): void { @@ -442,35 +434,38 @@ class ForceDecimalSize extends Command $regularExpression = $this->regularExpression; /** @var Builder $query */ - $query = PiggyBank::leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id') - ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') - ->where('account_meta.name', 'currency_id') - ->where('account_meta.data', json_encode((string)$currency->id)) - ->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression) { - foreach ($fields as $field) { - $q->orWhere( - DB::raw(sprintf('CAST(piggy_banks.%s AS %s)', $field, $cast)), - $operator, - DB::raw(sprintf($regularExpression, $currency->decimal_places)) - ); - } - }); + $query = PiggyBank::leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id') + ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') + ->where('account_meta.name', 'currency_id') + ->where('account_meta.data', json_encode((string)$currency->id)) + ->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression): void { + foreach ($fields as $field) { + $q->orWhere( + DB::raw(sprintf('CAST(piggy_banks.%s AS %s)', $field, $cast)), // @phpstan-ignore-line + $operator, + DB::raw(sprintf($regularExpression, $currency->decimal_places)) + ); + } + }) + ; - $result = $query->get(['piggy_banks.*']); + $result = $query->get(['piggy_banks.*']); if (0 === $result->count()) { $this->friendlyPositive(sprintf('All piggy banks in %s are OK', $currency->code)); return; } + /** @var PiggyBank $item */ foreach ($result as $item) { + /** @var string $field */ foreach ($fields as $field) { - $value = $item->$field; + $value = $item->{$field}; if (null === $value) { continue; } // fix $field by rounding it down correctly. - $pow = pow(10, (int)$currency->decimal_places); + $pow = 10 ** $currency->decimal_places; $correct = bcdiv((string)round($value * $pow), (string)$pow, 12); $this->friendlyWarning(sprintf('Piggy bank #%d has %s with value "%s", this has been corrected to "%s".', $item->id, $field, $value, $correct)); PiggyBank::find($item->id)->update([$field => $correct]); @@ -480,17 +475,13 @@ class ForceDecimalSize extends Command /** * This method fixes all transactions in currency $currency. - * - * @param TransactionCurrency $currency - * - * @return void */ private function correctTransactionAmounts(TransactionCurrency $currency): void { // select all transactions with this currency and issue. /** @var Builder $query */ - $query = Transaction::where('transaction_currency_id', $currency->id)->where( - DB::raw(sprintf('CAST(amount as %s)', $this->cast)), + $query = Transaction::where('transaction_currency_id', $currency->id)->where( + DB::raw(sprintf('CAST(amount as %s)', $this->cast)), // @phpstan-ignore-line $this->operator, DB::raw(sprintf($this->regularExpression, $currency->decimal_places)) ); @@ -502,21 +493,21 @@ class ForceDecimalSize extends Command /** @var Transaction $item */ foreach ($result as $item) { - $value = $item->amount; - if (null === $value) { + $value = $item->amount; + if ('' === $value) { continue; } // fix $field by rounding it down correctly. - $pow = pow(10, (int)$currency->decimal_places); - $correct = bcdiv((string)round($value * $pow), (string)$pow, 12); + $pow = (float)10 ** $currency->decimal_places; + $correct = bcdiv((string)round((float)$value * $pow), (string)$pow, 12); $this->friendlyWarning(sprintf('Transaction #%d has amount with value "%s", this has been corrected to "%s".', $item->id, $value, $correct)); Transaction::find($item->id)->update(['amount' => $correct]); } // select all transactions with this FOREIGN currency and issue. /** @var Builder $query */ - $query = Transaction::where('foreign_currency_id', $currency->id)->where( - DB::raw(sprintf('CAST(foreign_amount as %s)', $this->cast)), + $query = Transaction::where('foreign_currency_id', $currency->id)->where( + DB::raw(sprintf('CAST(foreign_amount as %s)', $this->cast)), // @phpstan-ignore-line $this->operator, DB::raw(sprintf($this->regularExpression, $currency->decimal_places)) ); @@ -527,15 +518,16 @@ class ForceDecimalSize extends Command return; } + /** @var Transaction $item */ foreach ($result as $item) { - $value = $item->foreign_amount; + $value = $item->foreign_amount; if (null === $value) { continue; } // fix $field by rounding it down correctly. - $pow = pow(10, (int)$currency->decimal_places); - $correct = bcdiv((string)round($value * $pow), (string)$pow, 12); + $pow = (float)10 ** $currency->decimal_places; + $correct = bcdiv((string)round((float)$value * $pow), (string)$pow, 12); $this->friendlyWarning( sprintf('Transaction #%d has foreign amount with value "%s", this has been corrected to "%s".', $item->id, $value, $correct) ); @@ -543,9 +535,6 @@ class ForceDecimalSize extends Command } } - /** - * @return void - */ private function updateDecimals(): void { $this->friendlyInfo('Going to force the size of DECIMAL columns. Please hold.'); @@ -559,22 +548,19 @@ class ForceDecimalSize extends Command /** @var string $field */ foreach ($fields as $field) { $this->friendlyLine(sprintf('Updating table "%s", field "%s"...', $name, $field)); + if ('pgsql' === $type) { + DB::select(sprintf('ALTER TABLE %s ALTER COLUMN %s TYPE DECIMAL(32,12);', $name, $field)); + sleep(1); - switch ($type) { - default: - $this->friendlyError(sprintf('Cannot handle database type "%s".', $type)); - - return; - case 'pgsql': - $query = sprintf('ALTER TABLE %s ALTER COLUMN %s TYPE DECIMAL(32,12);', $name, $field); - break; - case 'mysql': - $query = sprintf('ALTER TABLE %s CHANGE COLUMN %s %s DECIMAL(32, 12);', $name, $field, $field); - break; + return; } + if ('mysql' === $type) { + DB::select(sprintf('ALTER TABLE %s CHANGE COLUMN %s %s DECIMAL(32, 12);', $name, $field, $field)); + sleep(1); - DB::select($query); - sleep(1); + return; + } + $this->friendlyError(sprintf('Cannot handle database type "%s".', $type)); } } } diff --git a/app/Console/Commands/System/ForceMigration.php b/app/Console/Commands/System/ForceMigration.php index f437fa9482..5e63b0764e 100644 --- a/app/Console/Commands/System/ForceMigration.php +++ b/app/Console/Commands/System/ForceMigration.php @@ -40,18 +40,9 @@ class ForceMigration extends Command use ShowsFriendlyMessages; use VerifiesAccessToken; - /** - * The console command description. - * - * @var string - */ protected $description = 'This command will force-run all database migrations.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:force-migrations + + protected $signature = 'firefly-iii:force-migrations {--user=1 : The user ID.} {--token= : The user\'s access token.}'; @@ -82,9 +73,6 @@ class ForceMigration extends Command return 0; } - /** - * @return void - */ private function forceMigration(): void { DB::commit(); diff --git a/app/Console/Commands/System/OutputVersion.php b/app/Console/Commands/System/OutputVersion.php index eea501b031..88835900b8 100644 --- a/app/Console/Commands/System/OutputVersion.php +++ b/app/Console/Commands/System/OutputVersion.php @@ -1,6 +1,5 @@ fileName(); $encryptedContent = $disk->get($fileName); if (null === $encryptedContent) { - Log::error(sprintf('No content for attachment #%d under filename "%s"', $attachment->id, $fileName)); + app('log')->error(sprintf('No content for attachment #%d under filename "%s"', $attachment->id, $fileName)); + continue; } + try { - $decryptedContent = Crypt::decrypt($encryptedContent); // verified + $decryptedContent = \Crypt::decrypt($encryptedContent); // verified } catch (DecryptException $e) { - Log::error(sprintf('Could not decrypt data of attachment #%d: %s', $attachment->id, $e->getMessage())); + app('log')->error(sprintf('Could not decrypt data of attachment #%d: %s', $attachment->id, $e->getMessage())); $decryptedContent = $encryptedContent; } - $tempFileName = tempnam(sys_get_temp_dir(), 'FireflyIII'); + $tempFileName = tempnam(sys_get_temp_dir(), 'FireflyIII'); + if (false === $tempFileName) { + app('log')->error(sprintf('Could not create temporary file for attachment #%d', $attachment->id)); + + exit(1); + } file_put_contents($tempFileName, $decryptedContent); - $md5 = md5_file($tempFileName); - $mime = mime_content_type($tempFileName); - $attachment->md5 = $md5; - $attachment->mime = $mime; + $attachment->md5 = (string)md5_file($tempFileName); + $attachment->mime = (string)mime_content_type($tempFileName); $attachment->save(); $this->friendlyInfo(sprintf('Fixed attachment #%d', $attachment->id)); } diff --git a/app/Console/Commands/System/SetLatestVersion.php b/app/Console/Commands/System/SetLatestVersion.php index ab510eb394..71889bd0b0 100644 --- a/app/Console/Commands/System/SetLatestVersion.php +++ b/app/Console/Commands/System/SetLatestVersion.php @@ -34,23 +34,12 @@ class SetLatestVersion extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Set latest version in DB.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:set-latest-version {--james-is-cool}'; + + protected $signature = 'firefly-iii:set-latest-version {--james-is-cool}'; /** * Execute the console command. - * - * @return int */ public function handle(): int { diff --git a/app/Console/Commands/System/UpgradeFireflyInstructions.php b/app/Console/Commands/System/UpgradeFireflyInstructions.php index 3623a42956..525cd4eab8 100644 --- a/app/Console/Commands/System/UpgradeFireflyInstructions.php +++ b/app/Console/Commands/System/UpgradeFireflyInstructions.php @@ -26,29 +26,16 @@ namespace FireflyIII\Console\Commands\System; use FireflyIII\Support\System\GeneratesInstallationId; use Illuminate\Console\Command; -use function FireflyIII\Console\Commands\str_starts_with; - /** * Class UpgradeFireflyInstructions. - * - */ class UpgradeFireflyInstructions extends Command { use GeneratesInstallationId; - /** - * The console command description. - * - * @var string - */ protected $description = 'Instructions in case of upgrade trouble.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly:instructions {task}'; + + protected $signature = 'firefly:instructions {task}'; /** * Execute the console command. @@ -56,10 +43,10 @@ class UpgradeFireflyInstructions extends Command public function handle(): int { $this->generateInstallationId(); - if ('update' === (string)$this->argument('task')) { + if ('update' === $this->argument('task')) { $this->updateInstructions(); } - if ('install' === (string)$this->argument('task')) { + if ('install' === $this->argument('task')) { $this->installInstructions(); } @@ -71,25 +58,38 @@ class UpgradeFireflyInstructions extends Command */ private function updateInstructions(): void { - /** @var string $version */ - $version = config('firefly.version'); + $version = (string)config('firefly.version'); + + /** @var array $config */ $config = config('upgrade.text.upgrade'); $text = ''; + + /** @var string $compare */ foreach (array_keys($config) as $compare) { // if string starts with: - if (\str_starts_with($version, $compare)) { - $text = $config[$compare]; + if (str_starts_with($version, $compare)) { + $text = (string)$config[$compare]; } } + // validate some settings. + if ('' === $text && 'local' === (string)config('app.env')) { + $text = 'Please set APP_ENV=production for a safer environment.'; + } + + $prefix = 'v'; + if (str_starts_with($version, 'develop')) { + $prefix = ''; + } + $this->newLine(); $this->showLogo(); $this->newLine(); $this->showLine(); $this->boxed(''); - if (null === $text || '' === $text) { - $this->boxed(sprintf('Thank you for updating to Firefly III, v%s', $version)); + if ('' === $text) { + $this->boxed(sprintf('Thank you for updating to Firefly III, %s%s', $prefix, $version)); $this->boxedInfo('There are no extra upgrade instructions.'); $this->boxed('Firefly III should be ready for use.'); $this->boxed(''); @@ -98,7 +98,7 @@ class UpgradeFireflyInstructions extends Command return; } - $this->boxed(sprintf('Thank you for updating to Firefly III, v%s!', $version)); + $this->boxed(sprintf('Thank you for updating to Firefly III, %s%s!', $prefix, $version)); $this->boxedInfo($text); $this->boxed(''); $this->showLine(); @@ -106,13 +106,11 @@ class UpgradeFireflyInstructions extends Command /** * The logo takes up 8 lines of code. So 8 colors can be used. - * - * @return void */ private function showLogo(): void { - $today = date('m-d'); - $month = date('m'); + $today = date('m-d'); + $month = date('m'); // variation in colors and effects just because I can! // default is Ukraine flag: $colors = ['blue', 'blue', 'blue', 'yellow', 'yellow', 'yellow', 'default', 'default']; @@ -155,27 +153,23 @@ class UpgradeFireflyInstructions extends Command /** * Show a nice box. - * - * @param string $text */ private function boxed(string $text): void { $parts = explode("\n", wordwrap($text)); foreach ($parts as $string) { - $this->line('| ' . sprintf('%-77s', $string) . '|'); + $this->line('| '.sprintf('%-77s', $string).'|'); } } /** * Show a nice info box. - * - * @param string $text */ private function boxedInfo(string $text): void { $parts = explode("\n", wordwrap($text)); foreach ($parts as $string) { - $this->info('| ' . sprintf('%-77s', $string) . '|'); + $this->info('| '.sprintf('%-77s', $string).'|'); } } @@ -184,23 +178,37 @@ class UpgradeFireflyInstructions extends Command */ private function installInstructions(): void { - /** @var string $version */ - $version = config('firefly.version'); + $version = (string)config('firefly.version'); + + /** @var array $config */ $config = config('upgrade.text.install'); $text = ''; + + /** @var string $compare */ foreach (array_keys($config) as $compare) { // if string starts with: - if (\str_starts_with($version, $compare)) { - $text = $config[$compare]; + if (str_starts_with($version, $compare)) { + $text = (string)$config[$compare]; } } + + // validate some settings. + if ('' === $text && 'local' === (string)config('app.env')) { + $text = 'Please set APP_ENV=production for a safer environment.'; + } + + $prefix = 'v'; + if (str_starts_with($version, 'develop')) { + $prefix = ''; + } + $this->newLine(); $this->showLogo(); $this->newLine(); $this->showLine(); $this->boxed(''); - if (null === $text || '' === $text) { - $this->boxed(sprintf('Thank you for installing Firefly III, v%s!', $version)); + if ('' === $text) { + $this->boxed(sprintf('Thank you for installing Firefly III, %s%s!', $prefix, $version)); $this->boxedInfo('There are no extra installation instructions.'); $this->boxed('Firefly III should be ready for use.'); $this->boxed(''); @@ -209,7 +217,7 @@ class UpgradeFireflyInstructions extends Command return; } - $this->boxed(sprintf('Thank you for installing Firefly III, v%s!', $version)); + $this->boxed(sprintf('Thank you for installing Firefly III, %s%s!', $prefix, $version)); $this->boxedInfo($text); $this->boxed(''); $this->showLine(); diff --git a/app/Console/Commands/System/VerifySecurityAlerts.php b/app/Console/Commands/System/VerifySecurityAlerts.php index 3c82bb45bd..aa60146808 100644 --- a/app/Console/Commands/System/VerifySecurityAlerts.php +++ b/app/Console/Commands/System/VerifySecurityAlerts.php @@ -27,9 +27,7 @@ namespace FireflyIII\Console\Commands\System; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use Illuminate\Console\Command; use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Log; use League\Flysystem\FilesystemException; -use Storage; /** * Class VerifySecurityAlerts @@ -38,23 +36,13 @@ class VerifySecurityAlerts extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Verify security alerts'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:verify-security-alerts'; + + protected $signature = 'firefly-iii:verify-security-alerts'; /** * Execute the console command. * - * @return int * @throws FilesystemException */ public function handle(): int @@ -63,10 +51,10 @@ class VerifySecurityAlerts extends Command // check for security advisories. $version = config('firefly.version'); - $disk = Storage::disk('resources'); + $disk = \Storage::disk('resources'); // Next line is ignored because it's a Laravel Facade. if (!$disk->has('alerts.json')) { // @phpstan-ignore-line - Log::debug('No alerts.json file present.'); + app('log')->debug('No alerts.json file present.'); return 0; } @@ -76,19 +64,19 @@ class VerifySecurityAlerts extends Command /** @var array $array */ foreach ($json as $array) { if ($version === $array['version'] && true === $array['advisory']) { - Log::debug(sprintf('Version %s has an alert!', $array['version'])); + app('log')->debug(sprintf('Version %s has an alert!', $array['version'])); // add advisory to configuration. $this->saveSecurityAdvisory($array); // depends on level if ('info' === $array['level']) { - Log::debug('INFO level alert'); + app('log')->debug('INFO level alert'); $this->friendlyInfo($array['message']); return 0; } if ('warning' === $array['level']) { - Log::debug('WARNING level alert'); + app('log')->debug('WARNING level alert'); $this->friendlyWarning('------------------------ :o'); $this->friendlyWarning($array['message']); $this->friendlyWarning('------------------------ :o'); @@ -96,7 +84,7 @@ class VerifySecurityAlerts extends Command return 0; } if ('danger' === $array['level']) { - Log::debug('DANGER level alert'); + app('log')->debug('DANGER level alert'); $this->friendlyError('------------------------ :-('); $this->friendlyError($array['message']); $this->friendlyError('------------------------ :-('); @@ -107,36 +95,29 @@ class VerifySecurityAlerts extends Command return 0; } } - Log::debug(sprintf('No security alerts for version %s', $version)); + app('log')->debug(sprintf('No security alerts for version %s', $version)); $this->friendlyPositive(sprintf('No security alerts for version %s', $version)); + return 0; } - /** - * @return void - */ private function removeOldAdvisory(): void { try { app('fireflyconfig')->delete('upgrade_security_message'); app('fireflyconfig')->delete('upgrade_security_level'); } catch (QueryException $e) { - Log::debug(sprintf('Could not delete old security advisory, but thats OK: %s', $e->getMessage())); + app('log')->debug(sprintf('Could not delete old security advisory, but thats OK: %s', $e->getMessage())); } } - /** - * @param array $array - * - * @return void - */ private function saveSecurityAdvisory(array $array): void { try { app('fireflyconfig')->set('upgrade_security_message', $array['message']); app('fireflyconfig')->set('upgrade_security_level', $array['level']); } catch (QueryException $e) { - Log::debug(sprintf('Could not save new security advisory, but thats OK: %s', $e->getMessage())); + app('log')->debug(sprintf('Could not save new security advisory, but thats OK: %s', $e->getMessage())); } } } diff --git a/app/Console/Commands/Tools/ApplyRules.php b/app/Console/Commands/Tools/ApplyRules.php index 97b8b526b1..ee108f678a 100644 --- a/app/Console/Commands/Tools/ApplyRules.php +++ b/app/Console/Commands/Tools/ApplyRules.php @@ -47,19 +47,10 @@ class ApplyRules extends Command use ShowsFriendlyMessages; use VerifiesAccessToken; - /** - * The console command description. - * - * @var string - */ protected $description = 'This command will apply your rules and rule groups on a selection of your transactions.'; - /** - * The name and signature of the console command. - * - * @var string - */ + protected $signature - = 'firefly-iii:apply-rules + = 'firefly-iii:apply-rules {--user=1 : The user ID.} {--token= : The user\'s access token.} {--accounts= : A comma-separated list of asset accounts or liabilities to apply your rules to.} @@ -82,12 +73,11 @@ class ApplyRules extends Command /** * Execute the console command. * - * @return int * @throws FireflyException */ public function handle(): int { - $start = microtime(true); + $start = microtime(true); $this->stupidLaravel(); if (!$this->verifyAccessToken()) { $this->friendlyError('Invalid access token.'); @@ -99,19 +89,19 @@ class ApplyRules extends Command $this->ruleRepository->setUser($this->getUser()); $this->ruleGroupRepository->setUser($this->getUser()); - $result = $this->verifyInput(); + $result = $this->verifyInput(); if (false === $result) { return 1; } - $this->allRules = $this->option('all_rules'); + $this->allRules = $this->option('all_rules'); // always get all the rules of the user. $this->grabAllRules(); // loop all groups and rules and indicate if they're included: - $rulesToApply = $this->getRulesToApply(); - $count = $rulesToApply->count(); + $rulesToApply = $this->getRulesToApply(); + $count = $rulesToApply->count(); if (0 === $count) { $this->friendlyError('No rules or rule groups have been included.'); $this->friendlyWarning('Make a selection using:'); @@ -124,7 +114,7 @@ class ApplyRules extends Command // create new rule engine: /** @var RuleEngineInterface $ruleEngine */ - $ruleEngine = app(RuleEngineInterface::class); + $ruleEngine = app(RuleEngineInterface::class); $ruleEngine->setRules($rulesToApply); $ruleEngine->setUser($this->getUser()); @@ -133,7 +123,7 @@ class ApplyRules extends Command foreach ($this->accounts as $account) { $filterAccountList[] = $account->id; } - $list = implode(',', $filterAccountList); + $list = implode(',', $filterAccountList); $ruleEngine->addOperator(['type' => 'account_id', 'value' => $list]); // add the date as a filter: @@ -143,11 +133,11 @@ class ApplyRules extends Command // start running rules. $this->friendlyLine(sprintf('Will apply %d rule(s) to your transaction(s).', $count)); - // file the rule(s) + // fire the rule(s) $ruleEngine->fire(); $this->friendlyLine(''); - $end = round(microtime(true) - $start, 2); + $end = round(microtime(true) - $start, 2); $this->friendlyPositive(sprintf('Done in %s seconds!', $end)); return 0; @@ -157,8 +147,6 @@ class ApplyRules extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * - */ private function stupidLaravel(): void { @@ -173,7 +161,6 @@ class ApplyRules extends Command } /** - * @return bool * @throws FireflyException */ private function verifyInput(): bool @@ -196,19 +183,18 @@ class ApplyRules extends Command } /** - * @return bool * @throws FireflyException */ private function verifyInputAccounts(): bool { - $accountString = $this->option('accounts'); + $accountString = $this->option('accounts'); if (null === $accountString || '' === $accountString) { $this->friendlyError('Please use the --accounts option to indicate the accounts to apply rules to.'); return false; } - $finalList = new Collection(); - $accountList = explode(',', $accountString); + $finalList = new Collection(); + $accountList = explode(',', $accountString); /** @var AccountRepositoryInterface $accountRepository */ $accountRepository = app(AccountRepositoryInterface::class); @@ -226,14 +212,11 @@ class ApplyRules extends Command return false; } - $this->accounts = $finalList; + $this->accounts = $finalList; return true; } - /** - * @return bool - */ private function verifyInputRuleGroups(): bool { $ruleGroupString = $this->option('rule_groups'); @@ -241,7 +224,7 @@ class ApplyRules extends Command // can be empty. return true; } - $ruleGroupList = explode(',', $ruleGroupString); + $ruleGroupList = explode(',', $ruleGroupString); foreach ($ruleGroupList as $ruleGroupId) { $ruleGroup = $this->ruleGroupRepository->find((int)$ruleGroupId); @@ -256,9 +239,6 @@ class ApplyRules extends Command return true; } - /** - * @return bool - */ private function verifyInputRules(): bool { $ruleString = $this->option('rules'); @@ -266,7 +246,7 @@ class ApplyRules extends Command // can be empty. return true; } - $ruleList = explode(',', $ruleString); + $ruleList = explode(',', $ruleString); foreach ($ruleList as $ruleId) { $rule = $this->ruleRepository->find((int)$ruleId); @@ -284,13 +264,13 @@ class ApplyRules extends Command private function verifyInputDates(): void { // parse start date. - $inputStart = today(config('app.timezone'))->startOfMonth(); - $startString = $this->option('start_date'); + $inputStart = today(config('app.timezone'))->startOfMonth(); + $startString = $this->option('start_date'); if (null === $startString) { /** @var JournalRepositoryInterface $repository */ $repository = app(JournalRepositoryInterface::class); $repository->setUser($this->getUser()); - $first = $repository->firstNull(); + $first = $repository->firstNull(); if (null !== $first) { $inputStart = $first->date; } @@ -300,11 +280,16 @@ class ApplyRules extends Command } // parse end date - $inputEnd = today(config('app.timezone')); - $endString = $this->option('end_date'); + $inputEnd = today(config('app.timezone')); + $endString = $this->option('end_date'); if (null !== $endString && '' !== $endString) { $inputEnd = Carbon::createFromFormat('Y-m-d', $endString); } + if (false === $inputEnd || false === $inputStart) { + Log::error('Could not parse start or end date in verifyInputDate().'); + + return; + } if ($inputStart > $inputEnd) { [$inputEnd, $inputStart] = [$inputStart, $inputEnd]; @@ -314,28 +299,25 @@ class ApplyRules extends Command $this->endDate = $inputEnd; } - /** - */ private function grabAllRules(): void { $this->groups = $this->ruleGroupRepository->getActiveGroups(); } - /** - * @return Collection - */ private function getRulesToApply(): Collection { $rulesToApply = new Collection(); + /** @var RuleGroup $group */ foreach ($this->groups as $group) { $rules = $this->ruleGroupRepository->getActiveStoreRules($group); + /** @var Rule $rule */ foreach ($rules as $rule) { // if in rule selection, or group in selection or all rules, it's included. $test = $this->includeRule($rule, $group); if (true === $test) { - Log::debug(sprintf('Will include rule #%d "%s"', $rule->id, $rule->title)); + app('log')->debug(sprintf('Will include rule #%d "%s"', $rule->id, $rule->title)); $rulesToApply->push($rule); } } @@ -344,12 +326,6 @@ class ApplyRules extends Command return $rulesToApply; } - /** - * @param Rule $rule - * @param RuleGroup $group - * - * @return bool - */ private function includeRule(Rule $rule, RuleGroup $group): bool { return in_array($group->id, $this->ruleGroupSelection, true) diff --git a/app/Console/Commands/Tools/Cron.php b/app/Console/Commands/Tools/Cron.php index bf9d13ada0..4b3b0177b9 100644 --- a/app/Console/Commands/Tools/Cron.php +++ b/app/Console/Commands/Tools/Cron.php @@ -33,93 +33,67 @@ use FireflyIII\Support\Cronjobs\ExchangeRatesCronjob; use FireflyIII\Support\Cronjobs\RecurringCronjob; use Illuminate\Console\Command; use Illuminate\Support\Facades\Log; -use InvalidArgumentException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class Cron - * - */ class Cron extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Runs all Firefly III cron-job related commands. Configure a cron job according to the official Firefly III documentation.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:cron + + protected $signature = 'firefly-iii:cron {--F|force : Force the cron job(s) to execute.} {--date= : Set the date in YYYY-MM-DD to make Firefly III think that\'s the current date.} '; - /** - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ public function handle(): int { - $date = null; + $date = null; + try { $date = new Carbon($this->option('date')); - } catch (InvalidArgumentException $e) { + } catch (\InvalidArgumentException $e) { $this->friendlyError(sprintf('"%s" is not a valid date', $this->option('date'))); } - $force = (bool)$this->option('force'); + $force = (bool)$this->option('force'); // @phpstan-ignore-line - /* - * Fire exchange rates cron job. - */ + // Fire exchange rates cron job. if (true === config('cer.download_enabled')) { try { $this->exchangeRatesCronJob($force, $date); } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $this->friendlyError($e->getMessage()); } } - /* - * Fire recurring transaction cron job. - */ + // Fire recurring transaction cron job. try { $this->recurringCronJob($force, $date); } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $this->friendlyError($e->getMessage()); } - /* - * Fire auto-budget cron job: - */ + // Fire auto-budget cron job: try { $this->autoBudgetCronJob($force, $date); } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $this->friendlyError($e->getMessage()); } - /* - * Fire bill warning cron job - */ + // Fire bill warning cron job try { $this->billWarningCronJob($force, $date); } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $this->friendlyError($e->getMessage()); } @@ -128,12 +102,9 @@ class Cron extends Command return 0; } - /** - * @param bool $force - * @param Carbon|null $date - */ private function exchangeRatesCronJob(bool $force, ?Carbon $date): void { + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); $exchangeRates = new ExchangeRatesCronjob(); $exchangeRates->setForce($force); // set date in cron job: @@ -155,12 +126,7 @@ class Cron extends Command } /** - * @param bool $force - * @param Carbon|null $date - * - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ private function recurringCronJob(bool $force, ?Carbon $date): void { @@ -184,11 +150,6 @@ class Cron extends Command } } - /** - * @param bool $force - * @param Carbon|null $date - * - */ private function autoBudgetCronJob(bool $force, ?Carbon $date): void { $autoBudget = new AutoBudgetCronjob(); @@ -212,12 +173,7 @@ class Cron extends Command } /** - * @param bool $force - * @param Carbon|null $date - * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ private function billWarningCronJob(bool $force, ?Carbon $date): void { diff --git a/app/Console/Commands/Upgrade/AccountCurrencies.php b/app/Console/Commands/Upgrade/AccountCurrencies.php index 73b6ffdf62..0ebe0d7b56 100644 --- a/app/Console/Commands/Upgrade/AccountCurrencies.php +++ b/app/Console/Commands/Upgrade/AccountCurrencies.php @@ -34,9 +34,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class AccountCurrencies @@ -45,10 +42,10 @@ class AccountCurrencies extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_account_currencies'; + public const string CONFIG_NAME = '480_account_currencies'; - protected $description = 'Give all accounts proper currency info.'; - protected $signature = 'firefly-iii:account-currencies {--F|force : Force the execution of this command.}'; + protected $description = 'Give all accounts proper currency info.'; + protected $signature = 'firefly-iii:account-currencies {--F|force : Force the execution of this command.}'; private AccountRepositoryInterface $accountRepos; private int $count; private UserRepositoryInterface $userRepos; @@ -56,8 +53,6 @@ class AccountCurrencies extends Command /** * Each (asset) account must have a reference to a preferred currency. If the account does not have one, it's * forced upon the account. - * - * @return int */ public function handle(): int { @@ -85,7 +80,6 @@ class AccountCurrencies extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * */ private function stupidLaravel(): void { @@ -94,55 +88,31 @@ class AccountCurrencies extends Command $this->count = 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); + return (bool)$configVar?->data; } - /** - * - */ private function updateAccountCurrencies(): void { - $users = $this->userRepos->all(); - $defaultCurrencyCode = (string)config('firefly.default_currency', 'EUR'); + $users = $this->userRepos->all(); foreach ($users as $user) { - $this->updateCurrenciesForUser($user, $defaultCurrencyCode); + $this->updateCurrenciesForUser($user); } } /** - * @param User $user - * @param string $systemCurrencyCode - * * @throws FireflyException */ - private function updateCurrenciesForUser(User $user, string $systemCurrencyCode): void + private function updateCurrenciesForUser(User $user): void { $this->accountRepos->setUser($user); - $accounts = $this->accountRepos->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); + $accounts = $this->accountRepos->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); // get user's currency preference: - $defaultCurrencyCode = app('preferences')->getForUser($user, 'currencyPreference', $systemCurrencyCode)->data; - if (!is_string($defaultCurrencyCode)) { - $defaultCurrencyCode = $systemCurrencyCode; - } - - /** @var TransactionCurrency|null $defaultCurrency */ - $defaultCurrency = TransactionCurrency::where('code', $defaultCurrencyCode)->first(); - - if (null === $defaultCurrency) { - Log::error(sprintf('Users currency pref "%s" does not exist!', $defaultCurrencyCode)); - $this->friendlyError(sprintf('User has a preference for "%s", but this currency does not exist.', $defaultCurrencyCode)); - - return; - } + $defaultCurrency = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); /** @var Account $account */ foreach ($accounts as $account) { @@ -150,10 +120,6 @@ class AccountCurrencies extends Command } } - /** - * @param Account $account - * @param TransactionCurrency $currency - */ private function updateAccount(Account $account, TransactionCurrency $currency): void { $this->accountRepos->setUser($account->user); @@ -166,7 +132,7 @@ class AccountCurrencies extends Command AccountMeta::where('account_id', $account->id)->where('name', 'currency_id')->forceDelete(); AccountMeta::create(['account_id' => $account->id, 'name' => 'currency_id', 'data' => $currency->id]); $this->friendlyInfo(sprintf('Account #%d ("%s") now has a currency setting (%s).', $account->id, $account->name, $currency->code)); - $this->count++; + ++$this->count; return; } @@ -175,7 +141,7 @@ class AccountCurrencies extends Command if (0 === $accountCurrency && $obCurrency > 0) { AccountMeta::create(['account_id' => $account->id, 'name' => 'currency_id', 'data' => $obCurrency]); $this->friendlyInfo(sprintf('Account #%d ("%s") now has a currency setting (#%d).', $account->id, $account->name, $obCurrency)); - $this->count++; + ++$this->count; return; } @@ -185,19 +151,16 @@ class AccountCurrencies extends Command $openingBalance->transaction_currency_id = $accountCurrency; $openingBalance->save(); $openingBalance->transactions->each( - static function (Transaction $transaction) use ($accountCurrency) { + static function (Transaction $transaction) use ($accountCurrency): void { $transaction->transaction_currency_id = $accountCurrency; $transaction->save(); } ); $this->friendlyInfo(sprintf('Account #%d ("%s") now has a correct currency for opening balance.', $account->id, $account->name)); - $this->count++; + ++$this->count; } } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/AppendBudgetLimitPeriods.php b/app/Console/Commands/Upgrade/AppendBudgetLimitPeriods.php index 12961e4843..39263ad0c6 100644 --- a/app/Console/Commands/Upgrade/AppendBudgetLimitPeriods.php +++ b/app/Console/Commands/Upgrade/AppendBudgetLimitPeriods.php @@ -26,9 +26,6 @@ namespace FireflyIII\Console\Commands\Upgrade; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\BudgetLimit; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class AppendBudgetLimitPeriods @@ -37,26 +34,14 @@ class AppendBudgetLimitPeriods extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '550_budget_limit_periods'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Append budget limits with their (estimated) timeframe.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:budget-limit-periods {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '550_budget_limit_periods'; + + protected $description = 'Append budget limits with their (estimated) timeframe.'; + + protected $signature = 'firefly-iii:budget-limit-periods {--F|force : Force the execution of this command.}'; /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -72,11 +57,6 @@ class AppendBudgetLimitPeriods extends Command return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -84,24 +64,19 @@ class AppendBudgetLimitPeriods extends Command return (bool)$configVar->data; } - /** - * - */ private function theresNoLimit(): void { $limits = BudgetLimit::whereNull('period')->get(); + /** @var BudgetLimit $limit */ foreach ($limits as $limit) { $this->fixLimit($limit); } } - /** - * @param BudgetLimit $limit - */ - private function fixLimit(BudgetLimit $limit) + private function fixLimit(BudgetLimit $limit): void { - $period = $this->getLimitPeriod($limit); + $period = $this->getLimitPeriod($limit); if (null === $period) { $message = sprintf( @@ -118,21 +93,16 @@ class AppendBudgetLimitPeriods extends Command $limit->period = $period; $limit->save(); - $msg = sprintf( + $msg = sprintf( 'Budget limit #%d (%s - %s) period is "%s".', $limit->id, $limit->start_date->format('Y-m-d'), $limit->end_date->format('Y-m-d'), $period ); - Log::debug($msg); + app('log')->debug($msg); } - /** - * @param BudgetLimit $limit - * - * @return string|null - */ private function getLimitPeriod(BudgetLimit $limit): ?string { // is daily @@ -181,9 +151,6 @@ class AppendBudgetLimitPeriods extends Command return null; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/BackToJournals.php b/app/Console/Commands/Upgrade/BackToJournals.php index 3f6e2c5ca1..d3c3d29000 100644 --- a/app/Console/Commands/Upgrade/BackToJournals.php +++ b/app/Console/Commands/Upgrade/BackToJournals.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Upgrade; -use DB; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\Budget; use FireflyIII\Models\Category; @@ -31,8 +30,6 @@ use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use Illuminate\Console\Command; use Illuminate\Support\Collection; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class BackToJournals @@ -41,26 +38,14 @@ class BackToJournals extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_back_to_journals'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Move meta data back to journals, not individual transactions.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:back-to-journals {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '480_back_to_journals'; + + protected $description = 'Move meta data back to journals, not individual transactions.'; + + protected $signature = 'firefly-iii:back-to-journals {--F|force : Force the execution of this command.}'; /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -76,7 +61,6 @@ class BackToJournals extends Command $this->friendlyWarning('Forcing the command.'); } - $this->migrateAll(); $this->friendlyInfo('Updated category and budget info for all transaction journals'); $this->markAsExecuted(); @@ -84,11 +68,6 @@ class BackToJournals extends Command return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isMigrated(): bool { $configVar = app('fireflyconfig')->get(MigrateToGroups::CONFIG_NAME, false); @@ -96,11 +75,6 @@ class BackToJournals extends Command return (bool)$configVar->data; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -108,22 +82,16 @@ class BackToJournals extends Command return (bool)$configVar->data; } - /** - * - */ private function migrateAll(): void { $this->migrateBudgets(); $this->migrateCategories(); // empty tables - DB::table('budget_transaction')->delete(); - DB::table('category_transaction')->delete(); + \DB::table('budget_transaction')->delete(); + \DB::table('category_transaction')->delete(); } - /** - * - */ private function migrateBudgets(): void { $journals = new Collection(); @@ -133,51 +101,48 @@ class BackToJournals extends Command $collected = TransactionJournal::whereIn('id', $journalIds)->with(['transactions', 'budgets', 'transactions.budgets'])->get(); $journals = $journals->merge($collected); } + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $this->migrateBudgetsForJournal($journal); } } - /** - * @return array - */ private function getIdsForBudgets(): array { - $transactions = DB::table('budget_transaction')->distinct()->pluck('transaction_id')->toArray(); + $transactions = \DB::table('budget_transaction')->distinct()->pluck('transaction_id')->toArray(); $array = []; $chunks = array_chunk($transactions, 500); foreach ($chunks as $chunk) { - $set = DB::table('transactions')->whereIn('transactions.id', $chunk)->pluck('transaction_journal_id')->toArray(); + $set = \DB::table('transactions')->whereIn('transactions.id', $chunk)->pluck('transaction_journal_id')->toArray(); $array = array_merge($array, $set); } return $array; } - /** - * @param TransactionJournal $journal - */ private function migrateBudgetsForJournal(TransactionJournal $journal): void { // grab category from first transaction - /** @var Transaction|null $transaction */ - $transaction = $journal->transactions->first(); + /** @var null|Transaction $transaction */ + $transaction = $journal->transactions->first(); if (null === $transaction) { $this->friendlyInfo(sprintf('Transaction journal #%d has no transactions. Will be fixed later.', $journal->id)); return; } - /** @var Budget|null $budget */ - $budget = $transaction->budgets->first(); - /** @var Budget|null $journalBudget */ + + /** @var null|Budget $budget */ + $budget = $transaction->budgets->first(); + + /** @var null|Budget $journalBudget */ $journalBudget = $journal->budgets->first(); // both have a budget, but they don't match. if (null !== $budget && null !== $journalBudget && $budget->id !== $journalBudget->id) { // sync to journal: - $journal->budgets()->sync([(int)$budget->id]); + $journal->budgets()->sync([$budget->id]); return; } @@ -185,82 +150,73 @@ class BackToJournals extends Command // transaction has a budget, but the journal doesn't. if (null !== $budget && null === $journalBudget) { // sync to journal: - $journal->budgets()->sync([(int)$budget->id]); + $journal->budgets()->sync([$budget->id]); } } - /** - * - */ private function migrateCategories(): void { $journals = new Collection(); $allIds = $this->getIdsForCategories(); - - $chunks = array_chunk($allIds, 500); + $chunks = array_chunk($allIds, 500); foreach ($chunks as $chunk) { $collected = TransactionJournal::whereIn('id', $chunk)->with(['transactions', 'categories', 'transactions.categories'])->get(); $journals = $journals->merge($collected); } + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $this->migrateCategoriesForJournal($journal); } } - /** - * @return array - */ private function getIdsForCategories(): array { - $transactions = DB::table('category_transaction')->distinct()->pluck('transaction_id')->toArray(); + $transactions = \DB::table('category_transaction')->distinct()->pluck('transaction_id')->toArray(); $array = []; $chunks = array_chunk($transactions, 500); foreach ($chunks as $chunk) { - $set = DB::table('transactions') - ->whereIn('transactions.id', $chunk) - ->pluck('transaction_journal_id')->toArray(); + $set = \DB::table('transactions') + ->whereIn('transactions.id', $chunk) + ->pluck('transaction_journal_id')->toArray() + ; $array = array_merge($array, $set); } return $array; } - /** - * @param TransactionJournal $journal - */ private function migrateCategoriesForJournal(TransactionJournal $journal): void { // grab category from first transaction - /** @var Transaction|null $transaction */ - $transaction = $journal->transactions->first(); + /** @var null|Transaction $transaction */ + $transaction = $journal->transactions->first(); if (null === $transaction) { $this->friendlyInfo(sprintf('Transaction journal #%d has no transactions. Will be fixed later.', $journal->id)); return; } - /** @var Category|null $category */ - $category = $transaction->categories->first(); - /** @var Category|null $journalCategory */ + + /** @var null|Category $category */ + $category = $transaction->categories->first(); + + /** @var null|Category $journalCategory */ $journalCategory = $journal->categories->first(); // both have a category, but they don't match. if (null !== $category && null !== $journalCategory && $category->id !== $journalCategory->id) { // sync to journal: - $journal->categories()->sync([(int)$category->id]); + $journal->categories()->sync([$category->id]); } // transaction has a category, but the journal doesn't. if (null !== $category && null === $journalCategory) { - $journal->categories()->sync([(int)$category->id]); + $journal->categories()->sync([$category->id]); } } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/BudgetLimitCurrency.php b/app/Console/Commands/Upgrade/BudgetLimitCurrency.php index 7cbd97aba6..f59008138b 100644 --- a/app/Console/Commands/Upgrade/BudgetLimitCurrency.php +++ b/app/Console/Commands/Upgrade/BudgetLimitCurrency.php @@ -25,10 +25,10 @@ namespace FireflyIII\Console\Commands\Upgrade; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Budget; use FireflyIII\Models\BudgetLimit; +use FireflyIII\User; use Illuminate\Console\Command; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class BudgetLimitCurrency @@ -37,27 +37,16 @@ class BudgetLimitCurrency extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_bl_currency'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Give budget limits a currency'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:bl-currency {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '480_bl_currency'; + + protected $description = 'Give budget limits a currency'; + + protected $signature = 'firefly-iii:bl-currency {--F|force : Force the execution of this command.}'; /** * Execute the console command. * - * @return int - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -67,23 +56,25 @@ class BudgetLimitCurrency extends Command return 0; } - $count = 0; $budgetLimits = BudgetLimit::get(); + /** @var BudgetLimit $budgetLimit */ foreach ($budgetLimits as $budgetLimit) { if (null === $budgetLimit->transaction_currency_id) { + /** @var null|Budget $budget */ $budget = $budgetLimit->budget; if (null !== $budget) { + /** @var null|User $user */ $user = $budget->user; if (null !== $user) { - $currency = app('amount')->getDefaultCurrencyByUser($user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); $budgetLimit->transaction_currency_id = $currency->id; $budgetLimit->save(); $this->friendlyInfo( sprintf('Budget limit #%d (part of budget "%s") now has a currency setting (%s).', $budgetLimit->id, $budget->name, $currency->name) ); - $count++; + ++$count; } } } @@ -96,11 +87,6 @@ class BudgetLimitCurrency extends Command return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -111,9 +97,6 @@ class BudgetLimitCurrency extends Command return false; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/CCLiabilities.php b/app/Console/Commands/Upgrade/CCLiabilities.php index b41f41c9a5..78d6511d9d 100644 --- a/app/Console/Commands/Upgrade/CCLiabilities.php +++ b/app/Console/Commands/Upgrade/CCLiabilities.php @@ -29,8 +29,6 @@ use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use Illuminate\Console\Command; use Illuminate\Support\Collection; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class CCLiabilities @@ -39,17 +37,14 @@ class CCLiabilities extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_cc_liabilities'; - protected $description = 'Convert old credit card liabilities.'; - protected $signature = 'firefly-iii:cc-liabilities {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '480_cc_liabilities'; + protected $description = 'Convert old credit card liabilities.'; + protected $signature = 'firefly-iii:cc-liabilities {--F|force : Force the execution of this command.}'; /** * Execute the console command. * - * @return int - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -59,7 +54,6 @@ class CCLiabilities extends Command return 0; } - $ccType = AccountType::where('type', AccountType::CREDITCARD)->first(); $debtType = AccountType::where('type', AccountType::DEBT)->first(); if (null === $ccType || null === $debtType) { @@ -68,6 +62,7 @@ class CCLiabilities extends Command return 0; } + /** @var Collection $accounts */ $accounts = Account::where('account_type_id', $ccType->id)->get(); foreach ($accounts as $account) { @@ -88,20 +83,13 @@ class CCLiabilities extends Command return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); + return (bool)$configVar?->data; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/DecryptDatabase.php b/app/Console/Commands/Upgrade/DecryptDatabase.php index 0f584f9296..e4332d5fd5 100644 --- a/app/Console/Commands/Upgrade/DecryptDatabase.php +++ b/app/Console/Commands/Upgrade/DecryptDatabase.php @@ -24,18 +24,11 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Upgrade; -use Crypt; -use DB; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Preference; use Illuminate\Console\Command; use Illuminate\Contracts\Encryption\DecryptException; -use Illuminate\Support\Facades\Log; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; -use stdClass; /** * Class DecryptDatabase @@ -49,10 +42,6 @@ class DecryptDatabase extends Command /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -69,6 +58,7 @@ class DecryptDatabase extends Command 'transactions' => ['description'], 'journal_links' => ['comment'], ]; + /** * @var string $table * @var array $fields @@ -76,16 +66,10 @@ class DecryptDatabase extends Command foreach ($tables as $table => $fields) { $this->decryptTable($table, $fields); } + return 0; } - /** - * @param string $table - * @param array $fields - * - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function decryptTable(string $table, array $fields): void { if ($this->isDecrypted($table)) { @@ -102,21 +86,15 @@ class DecryptDatabase extends Command app('fireflyconfig')->set($configName, true); } - /** - * @param string $table - * - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isDecrypted(string $table): bool { $configName = sprintf('is_decrypted_%s', $table); $configVar = null; + try { $configVar = app('fireflyconfig')->get($configName, false); } catch (FireflyException $e) { - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); } if (null !== $configVar) { return (bool)$configVar->data; @@ -125,40 +103,32 @@ class DecryptDatabase extends Command return false; } - /** - * @param string $table - * @param string $field - */ private function decryptField(string $table, string $field): void { - $rows = DB::table($table)->get(['id', $field]); - /** @var stdClass $row */ + $rows = \DB::table($table)->get(['id', $field]); + + /** @var \stdClass $row */ foreach ($rows as $row) { $this->decryptRow($table, $field, $row); } } - /** - * @param string $table - * @param string $field - * @param stdClass $row - */ - private function decryptRow(string $table, string $field, stdClass $row): void + private function decryptRow(string $table, string $field, \stdClass $row): void { - $original = $row->$field; + $original = $row->{$field}; if (null === $original) { return; } - $id = (int)$row->id; - $value = ''; + $id = (int)$row->id; + $value = ''; try { $value = $this->tryDecrypt($original); } catch (FireflyException $e) { $message = sprintf('Could not decrypt field "%s" in row #%d of table "%s": %s', $field, $id, $table, $e->getMessage()); $this->friendlyError($message); - Log::error($message); - Log::error($e->getTraceAsString()); + app('log')->error($message); + app('log')->error($e->getTraceAsString()); } // A separate routine for preferences table: @@ -169,7 +139,7 @@ class DecryptDatabase extends Command } if ($value !== $original) { - DB::table($table)->where('id', $id)->update([$field => $value]); + \DB::table($table)->where('id', $id)->update([$field => $value]); } } @@ -179,12 +149,13 @@ class DecryptDatabase extends Command * @param mixed $value * * @return string + * * @throws FireflyException */ private function tryDecrypt($value) { try { - $value = Crypt::decrypt($value); + $value = \Crypt::decrypt($value); } catch (DecryptException $e) { if ('The MAC is invalid.' === $e->getMessage()) { throw new FireflyException($e->getMessage(), 0, $e); @@ -194,16 +165,12 @@ class DecryptDatabase extends Command return $value; } - /** - * @param int $id - * @param string $value - */ private function decryptPreferencesRow(int $id, string $value): void { // try to json_decrypt the value. try { $newValue = json_decode($value, true, 512, JSON_THROW_ON_ERROR) ?? $value; - } catch (JsonException $e) { + } catch (\JsonException $e) { $message = sprintf('Could not JSON decode preference row #%d: %s. This does not have to be a problem.', $id, $e->getMessage()); $this->friendlyError($message); app('log')->warning($message); @@ -213,8 +180,8 @@ class DecryptDatabase extends Command return; } - /** @var Preference $object */ - $object = Preference::find((int)$id); + /** @var null|Preference $object */ + $object = Preference::find($id); if (null !== $object) { $object->data = $newValue; $object->save(); diff --git a/app/Console/Commands/Upgrade/FixPostgresSequences.php b/app/Console/Commands/Upgrade/FixPostgresSequences.php index 71399ebd29..3bbdc04464 100644 --- a/app/Console/Commands/Upgrade/FixPostgresSequences.php +++ b/app/Console/Commands/Upgrade/FixPostgresSequences.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Upgrade; -use DB; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use Illuminate\Console\Command; @@ -35,104 +34,37 @@ class FixPostgresSequences extends Command { use ShowsFriendlyMessages; - /** - * The console command description. - * - * @var string - */ protected $description = 'Fixes issues with PostgreSQL sequences.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:fix-pgsql-sequences'; + + protected $signature = 'firefly-iii:fix-pgsql-sequences'; /** * Execute the console command. - * - * @return int */ public function handle(): int { - if (DB::connection()->getName() !== 'pgsql') { + if ('pgsql' !== \DB::connection()->getName()) { return 0; } $this->friendlyLine('Going to verify PostgreSQL table sequences.'); - $tablesToCheck = [ - '2fa_tokens', - 'account_meta', - 'account_types', - 'accounts', - 'attachments', - 'auto_budgets', - 'available_budgets', - 'bills', - 'budget_limits', - 'budget_transaction', - 'budget_transaction_journal', - 'budgets', - 'categories', - 'category_transaction', - 'category_transaction_journal', - 'configuration', - 'currency_exchange_rates', - 'failed_jobs', - 'group_journals', - 'jobs', - 'journal_links', - 'journal_meta', - 'limit_repetitions', - 'link_types', - 'locations', - 'migrations', - 'notes', - 'oauth_clients', - 'oauth_personal_access_clients', - 'object_groups', - 'permissions', - 'piggy_bank_events', - 'piggy_bank_repetitions', - 'piggy_banks', - 'preferences', - 'recurrences', - 'recurrences_meta', - 'recurrences_repetitions', - 'recurrences_transactions', - 'roles', - 'rt_meta', - 'rule_actions', - 'rule_groups', - 'rule_triggers', - 'rules', - 'tag_transaction_journal', - 'tags', - 'transaction_currencies', - 'transaction_groups', - 'transaction_journals', - 'transaction_types', - 'transactions', - 'users', - 'webhook_attempts', - 'webhook_messages', - 'webhooks', - ]; + $tablesToCheck = ['2fa_tokens', 'account_meta', 'account_types', 'accounts', 'attachments', 'auto_budgets', 'available_budgets', 'bills', 'budget_limits', 'budget_transaction', 'budget_transaction_journal', 'budgets', 'categories', 'category_transaction', 'category_transaction_journal', 'configuration', 'currency_exchange_rates', 'failed_jobs', 'group_journals', 'jobs', 'journal_links', 'journal_meta', 'limit_repetitions', 'link_types', 'locations', 'migrations', 'notes', 'oauth_clients', 'oauth_personal_access_clients', 'object_groups', 'permissions', 'piggy_bank_events', 'piggy_bank_repetitions', 'piggy_banks', 'preferences', 'recurrences', 'recurrences_meta', 'recurrences_repetitions', 'recurrences_transactions', 'roles', 'rt_meta', 'rule_actions', 'rule_groups', 'rule_triggers', 'rules', 'tag_transaction_journal', 'tags', 'transaction_currencies', 'transaction_groups', 'transaction_journals', 'transaction_types', 'transactions', 'users', 'webhook_attempts', 'webhook_messages', 'webhooks']; foreach ($tablesToCheck as $tableToCheck) { $this->friendlyLine(sprintf('Checking the next id sequence for table "%s".', $tableToCheck)); - $highestId = DB::table($tableToCheck)->select(DB::raw('MAX(id)'))->first(); - $nextId = DB::table($tableToCheck)->select(DB::raw(sprintf('nextval(\'%s_id_seq\')', $tableToCheck)))->first(); + $highestId = \DB::table($tableToCheck)->select(\DB::raw('MAX(id)'))->first(); + $nextId = \DB::table($tableToCheck)->select(\DB::raw(sprintf('nextval(\'%s_id_seq\')', $tableToCheck)))->first(); if (null === $nextId) { $this->friendlyInfo(sprintf('nextval is NULL for table "%s", go to next table.', $tableToCheck)); + continue; } - if ($nextId->nextval < $highestId->max) { - DB::select(sprintf('SELECT setval(\'%s_id_seq\', %d)', $tableToCheck, $highestId->max)); - $highestId = DB::table($tableToCheck)->select(DB::raw('MAX(id)'))->first(); - $nextId = DB::table($tableToCheck)->select(DB::raw(sprintf('nextval(\'%s_id_seq\')', $tableToCheck)))->first(); - if ($nextId->nextval > $highestId->max) { + if ($nextId->nextval < $highestId->max) { // @phpstan-ignore-line + \DB::select(sprintf('SELECT setval(\'%s_id_seq\', %d)', $tableToCheck, $highestId->max)); + $highestId = \DB::table($tableToCheck)->select(\DB::raw('MAX(id)'))->first(); + $nextId = \DB::table($tableToCheck)->select(\DB::raw(sprintf('nextval(\'%s_id_seq\')', $tableToCheck)))->first(); + if ($nextId->nextval > $highestId->max) { // @phpstan-ignore-line $this->friendlyInfo(sprintf('Table "%s" autoincrement corrected.', $tableToCheck)); } if ($nextId->nextval <= $highestId->max) { @@ -144,7 +76,6 @@ class FixPostgresSequences extends Command } } - return 0; } } diff --git a/app/Console/Commands/Upgrade/MigrateAttachments.php b/app/Console/Commands/Upgrade/MigrateAttachments.php index db0e4dedb0..08015d38c5 100644 --- a/app/Console/Commands/Upgrade/MigrateAttachments.php +++ b/app/Console/Commands/Upgrade/MigrateAttachments.php @@ -28,9 +28,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Attachment; use FireflyIII\Models\Note; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class MigrateAttachments @@ -39,38 +36,26 @@ class MigrateAttachments extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_migrate_attachments'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Migrates attachment meta-data.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:migrate-attachments {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '480_migrate_attachments'; + + protected $description = 'Migrates attachment meta-data.'; + + protected $signature = 'firefly-iii:migrate-attachments {--F|force : Force the execution of this command.}'; /** * Execute the console command. * - * @return int - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function handle(): int { - $start = microtime(true); + $start = microtime(true); if ($this->isExecuted() && true !== $this->option('force')) { $this->friendlyInfo('This command has already been executed.'); return 0; } - $attachments = Attachment::get(); $count = 0; @@ -80,20 +65,20 @@ class MigrateAttachments extends Command $attDescription = (string)$att->description; if ('' !== $attDescription) { // find or create note: - $note = $att->notes()->first(); + $note = $att->notes()->first(); if (null === $note) { $note = new Note(); $note->noteable()->associate($att); } - $note->text = $attDescription; + $note->text = $attDescription; $note->save(); // clear description: $att->description = ''; $att->save(); - Log::debug(sprintf('Migrated attachment #%s description to note #%d.', $att->id, $note->id)); - $count++; + app('log')->debug(sprintf('Migrated attachment #%s description to note #%d.', $att->id, $note->id)); + ++$count; } } if (0 === $count) { @@ -102,18 +87,13 @@ class MigrateAttachments extends Command if (0 !== $count) { $this->friendlyInfo(sprintf('Updated %d attachment(s).', $count)); } - $end = round(microtime(true) - $start, 2); + $end = round(microtime(true) - $start, 2); $this->friendlyInfo(sprintf('Migrated attachment notes in %s seconds.', $end)); $this->markAsExecuted(); return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -124,9 +104,6 @@ class MigrateAttachments extends Command return false; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/MigrateJournalNotes.php b/app/Console/Commands/Upgrade/MigrateJournalNotes.php index 293ce3738c..960125b369 100644 --- a/app/Console/Commands/Upgrade/MigrateJournalNotes.php +++ b/app/Console/Commands/Upgrade/MigrateJournalNotes.php @@ -27,9 +27,6 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\Note; use FireflyIII\Models\TransactionJournalMeta; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class MigrateJournalNotes @@ -38,26 +35,14 @@ class MigrateJournalNotes extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_migrate_notes'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Migrate notes for transaction journals.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:migrate-notes {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '480_migrate_notes'; + + protected $description = 'Migrate notes for transaction journals.'; + + protected $signature = 'firefly-iii:migrate-notes {--F|force : Force the execution of this command.}'; /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -71,10 +56,11 @@ class MigrateJournalNotes extends Command $count = 0; $set = TransactionJournalMeta::whereName('notes')->get(); + /** @var TransactionJournalMeta $meta */ foreach ($set as $meta) { - $journal = $meta->transactionJournal; - $note = $journal->notes()->first(); + $journal = $meta->transactionJournal; + $note = $journal->notes()->first(); if (null === $note) { $note = new Note(); $note->noteable()->associate($journal); @@ -82,10 +68,10 @@ class MigrateJournalNotes extends Command $note->text = $meta->data; $note->save(); - Log::debug(sprintf('Migrated meta note #%d to Note #%d', $meta->id, $note->id)); + app('log')->debug(sprintf('Migrated meta note #%d to Note #%d', $meta->id, $note->id)); $meta->delete(); - $count++; + ++$count; } if (0 === $count) { @@ -95,18 +81,13 @@ class MigrateJournalNotes extends Command $this->friendlyInfo(sprintf('Migrated %d note(s).', $count)); } - $end = round(microtime(true) - $start, 2); + $end = round(microtime(true) - $start, 2); $this->friendlyInfo(sprintf('Migrated notes in %s seconds.', $end)); $this->markAsExecuted(); return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -117,9 +98,6 @@ class MigrateJournalNotes extends Command return false; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/MigrateRecurrenceMeta.php b/app/Console/Commands/Upgrade/MigrateRecurrenceMeta.php index 10c1ebd0a5..207e45d1fa 100644 --- a/app/Console/Commands/Upgrade/MigrateRecurrenceMeta.php +++ b/app/Console/Commands/Upgrade/MigrateRecurrenceMeta.php @@ -29,9 +29,6 @@ use FireflyIII\Models\Recurrence; use FireflyIII\Models\RecurrenceMeta; use FireflyIII\Models\RecurrenceTransactionMeta; use Illuminate\Console\Command; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class MigrateRecurrenceMeta @@ -40,27 +37,14 @@ class MigrateRecurrenceMeta extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '481_migrate_recurrence_meta'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Migrate recurrence meta data'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:migrate-recurrence-meta {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '481_migrate_recurrence_meta'; + + protected $description = 'Migrate recurrence meta data'; + + protected $signature = 'firefly-iii:migrate-recurrence-meta {--F|force : Force the execution of this command.}'; /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws JsonException - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -83,11 +67,6 @@ class MigrateRecurrenceMeta extends Command return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -98,15 +77,12 @@ class MigrateRecurrenceMeta extends Command return false; } - /** - * @return int - * @throws JsonException - */ private function migrateMetaData(): int { - $count = 0; + $count = 0; // get all recurrence meta data: $collection = RecurrenceMeta::with('recurrence')->get(); + /** @var RecurrenceMeta $meta */ foreach ($collection as $meta) { $count += $this->migrateEntry($meta); @@ -115,16 +91,10 @@ class MigrateRecurrenceMeta extends Command return $count; } - /** - * @param RecurrenceMeta $meta - * - * @return int - * @throws JsonException - */ private function migrateEntry(RecurrenceMeta $meta): int { - /** @var Recurrence|null $recurrence */ - $recurrence = $meta->recurrence; + /** @var null|Recurrence $recurrence */ + $recurrence = $meta->recurrence; if (null === $recurrence) { return 0; } @@ -132,7 +102,7 @@ class MigrateRecurrenceMeta extends Command if (null === $firstTransaction) { return 0; } - $value = $meta->value; + $value = $meta->value; if ('tags' === $meta->name) { $array = explode(',', $meta->value); @@ -151,9 +121,6 @@ class MigrateRecurrenceMeta extends Command return 1; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/MigrateRecurrenceType.php b/app/Console/Commands/Upgrade/MigrateRecurrenceType.php index c6a509495b..7aec519d9c 100644 --- a/app/Console/Commands/Upgrade/MigrateRecurrenceType.php +++ b/app/Console/Commands/Upgrade/MigrateRecurrenceType.php @@ -25,12 +25,7 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Upgrade; use FireflyIII\Console\Commands\ShowsFriendlyMessages; -use FireflyIII\Models\Recurrence; -use FireflyIII\Models\RecurrenceTransaction; -use FireflyIII\Models\TransactionType; use Illuminate\Console\Command; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class MigrateRecurrenceType @@ -39,26 +34,14 @@ class MigrateRecurrenceType extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '550_migrate_recurrence_type'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Migrate transaction type of recurring transaction.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:migrate-recurrence-type {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '550_migrate_recurrence_type'; + + protected $description = 'Migrate transaction type of recurring transaction.'; + + protected $signature = 'firefly-iii:migrate-recurrence-type {--F|force : Force the execution of this command.}'; /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -67,69 +50,19 @@ class MigrateRecurrenceType extends Command return 0; } - - $this->migrateTypes(); + $this->friendlyWarning('This command has been disabled.'); $this->markAsExecuted(); - return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); + return (bool)$configVar?->data; } - /** - * - */ - private function migrateTypes(): void - { - $set = Recurrence::get(); - /** @var Recurrence $recurrence */ - foreach ($set as $recurrence) { - if ($recurrence->transactionType->type !== TransactionType::INVALID) { - $this->migrateRecurrence($recurrence); - } - } - } - - /** - * @param Recurrence $recurrence - * - * @return void - */ - private function migrateRecurrence(Recurrence $recurrence): void - { - $originalType = (int)$recurrence->transaction_type_id; - $newType = $this->getInvalidType(); - $recurrence->transaction_type_id = $newType->id; - $recurrence->save(); - /** @var RecurrenceTransaction $transaction */ - foreach ($recurrence->recurrenceTransactions as $transaction) { - $transaction->transaction_type_id = $originalType; - $transaction->save(); - } - $this->friendlyInfo(sprintf('Updated recurrence #%d to new transaction type model.', $recurrence->id)); - } - - /** - * - */ - private function getInvalidType(): TransactionType - { - return TransactionType::whereType(TransactionType::INVALID)->firstOrCreate(['type' => TransactionType::INVALID]); - } - - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/MigrateTagLocations.php b/app/Console/Commands/Upgrade/MigrateTagLocations.php index c2d53c178e..76a7f81a9e 100644 --- a/app/Console/Commands/Upgrade/MigrateTagLocations.php +++ b/app/Console/Commands/Upgrade/MigrateTagLocations.php @@ -28,8 +28,6 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\Location; use FireflyIII\Models\Tag; use Illuminate\Console\Command; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class MigrateTagLocations @@ -38,26 +36,14 @@ class MigrateTagLocations extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '500_migrate_tag_locations'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Migrate tag locations.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:migrate-tag-locations {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '500_migrate_tag_locations'; + + protected $description = 'Migrate tag locations.'; + + protected $signature = 'firefly-iii:migrate-tag-locations {--F|force : Force the execution of this command.}'; /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -72,11 +58,6 @@ class MigrateTagLocations extends Command return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -87,12 +68,10 @@ class MigrateTagLocations extends Command return false; } - /** - * @return void - */ private function migrateTagLocations(): void { $tags = Tag::get(); + /** @var Tag $tag */ foreach ($tags as $tag) { if ($this->hasLocationDetails($tag)) { @@ -101,19 +80,11 @@ class MigrateTagLocations extends Command } } - /** - * @param Tag $tag - * - * @return bool - */ private function hasLocationDetails(Tag $tag): bool { return null !== $tag->latitude && null !== $tag->longitude && null !== $tag->zoomLevel; } - /** - * @param Tag $tag - */ private function migrateLocationDetails(Tag $tag): void { $location = new Location(); @@ -123,15 +94,12 @@ class MigrateTagLocations extends Command $location->locatable()->associate($tag); $location->save(); - $tag->longitude = null; - $tag->latitude = null; - $tag->zoomLevel = null; + $tag->longitude = null; + $tag->latitude = null; + $tag->zoomLevel = null; $tag->save(); } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/MigrateToGroups.php b/app/Console/Commands/Upgrade/MigrateToGroups.php index 78a364b4a9..e18ba489fd 100644 --- a/app/Console/Commands/Upgrade/MigrateToGroups.php +++ b/app/Console/Commands/Upgrade/MigrateToGroups.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Console\Commands\Upgrade; -use DB; -use Exception; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Factory\TransactionGroupFactory; use FireflyIII\Models\Budget; @@ -36,9 +34,6 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Services\Internal\Destroy\JournalDestroyService; use Illuminate\Console\Command; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * This command will take split transactions and migrate them to "transaction groups". @@ -51,9 +46,9 @@ class MigrateToGroups extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_migrated_to_groups'; - protected $description = 'Migrates a pre-4.7.8 transaction structure to the 4.7.8+ transaction structure.'; - protected $signature = 'firefly-iii:migrate-to-groups {--F|force : Force the migration, even if it fired before.}'; + public const string CONFIG_NAME = '480_migrated_to_groups'; + protected $description = 'Migrates a pre-4.7.8 transaction structure to the 4.7.8+ transaction structure.'; + protected $signature = 'firefly-iii:migrate-to-groups {--F|force : Force the migration, even if it fired before.}'; private JournalCLIRepositoryInterface $cliRepository; private int $count; private TransactionGroupFactory $groupFactory; @@ -62,10 +57,6 @@ class MigrateToGroups extends Command /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -81,7 +72,6 @@ class MigrateToGroups extends Command $this->friendlyWarning('Forcing the migration.'); } - $this->makeGroupsFromSplitJournals(); $this->makeGroupsFromAll(); @@ -100,8 +90,6 @@ class MigrateToGroups extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * - */ private function stupidLaravel(): void { @@ -112,11 +100,6 @@ class MigrateToGroups extends Command $this->cliRepository = app(JournalCLIRepositoryInterface::class); } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isMigrated(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -128,13 +111,14 @@ class MigrateToGroups extends Command } /** - * @throws Exception + * @throws \Exception */ private function makeGroupsFromSplitJournals(): void { $splitJournals = $this->cliRepository->getSplitJournals(); if ($splitJournals->count() > 0) { $this->friendlyLine(sprintf('Going to convert %d split transaction(s). Please hold..', $splitJournals->count())); + /** @var TransactionJournal $journal */ foreach ($splitJournals as $journal) { $this->makeMultiGroup($journal); @@ -143,19 +127,17 @@ class MigrateToGroups extends Command } /** - * @param TransactionJournal $journal - * - * @throws Exception + * @throws \Exception */ private function makeMultiGroup(TransactionJournal $journal): void { // double check transaction count. if ($journal->transactions->count() <= 2) { - Log::debug(sprintf('Will not try to convert journal #%d because it has 2 or less transactions.', $journal->id)); + app('log')->debug(sprintf('Will not try to convert journal #%d because it has 2 or fewer transactions.', $journal->id)); return; } - Log::debug(sprintf('Will now try to convert journal #%d', $journal->id)); + app('log')->debug(sprintf('Will now try to convert journal #%d', $journal->id)); $this->journalRepository->setUser($journal->user); $this->groupFactory->setUser($journal->user); @@ -167,106 +149,24 @@ class MigrateToGroups extends Command 'transactions' => [], ]; $destTransactions = $this->getDestinationTransactions($journal); - $budgetId = $this->cliRepository->getJournalBudgetId($journal); - $categoryId = $this->cliRepository->getJournalCategoryId($journal); - $notes = $this->cliRepository->getNoteText($journal); - $tags = $this->cliRepository->getTags($journal); - $internalRef = $this->cliRepository->getMetaField($journal, 'internal-reference'); - $sepaCC = $this->cliRepository->getMetaField($journal, 'sepa_cc'); - $sepaCtOp = $this->cliRepository->getMetaField($journal, 'sepa_ct_op'); - $sepaCtId = $this->cliRepository->getMetaField($journal, 'sepa_ct_id'); - $sepaDb = $this->cliRepository->getMetaField($journal, 'sepa_db'); - $sepaCountry = $this->cliRepository->getMetaField($journal, 'sepa_country'); - $sepaEp = $this->cliRepository->getMetaField($journal, 'sepa_ep'); - $sepaCi = $this->cliRepository->getMetaField($journal, 'sepa_ci'); - $sepaBatchId = $this->cliRepository->getMetaField($journal, 'sepa_batch_id'); - $externalId = $this->cliRepository->getMetaField($journal, 'external-id'); - $originalSource = $this->cliRepository->getMetaField($journal, 'original-source'); - $recurrenceId = $this->cliRepository->getMetaField($journal, 'recurrence_id'); - $bunq = $this->cliRepository->getMetaField($journal, 'bunq_payment_id'); - $hash = $this->cliRepository->getMetaField($journal, 'import_hash'); - $hashTwo = $this->cliRepository->getMetaField($journal, 'import_hash_v2'); - $interestDate = $this->cliRepository->getMetaDate($journal, 'interest_date'); - $bookDate = $this->cliRepository->getMetaDate($journal, 'book_date'); - $processDate = $this->cliRepository->getMetaDate($journal, 'process_date'); - $dueDate = $this->cliRepository->getMetaDate($journal, 'due_date'); - $paymentDate = $this->cliRepository->getMetaDate($journal, 'payment_date'); - $invoiceDate = $this->cliRepository->getMetaDate($journal, 'invoice_date'); - Log::debug(sprintf('Will use %d positive transactions to create a new group.', $destTransactions->count())); + app('log')->debug(sprintf('Will use %d positive transactions to create a new group.', $destTransactions->count())); /** @var Transaction $transaction */ foreach ($destTransactions as $transaction) { - Log::debug(sprintf('Now going to add transaction #%d to the array.', $transaction->id)); - $opposingTr = $this->findOpposingTransaction($journal, $transaction); - - if (null === $opposingTr) { - $this->friendlyError( - sprintf( - 'Journal #%d has no opposing transaction for transaction #%d. Cannot upgrade this entry.', - $journal->id, - $transaction->id - ) - ); - continue; - } - - // overrule journal category with transaction category. - $budgetId = $this->getTransactionBudget($transaction, $opposingTr) ?? $budgetId; - $categoryId = $this->getTransactionCategory($transaction, $opposingTr) ?? $categoryId; - - $tArray = [ - 'type' => strtolower($journal->transactionType->type), - 'date' => $journal->date, - 'user' => $journal->user_id, - 'currency_id' => $transaction->transaction_currency_id, - 'foreign_currency_id' => $transaction->foreign_currency_id, - 'amount' => $transaction->amount, - 'foreign_amount' => $transaction->foreign_amount, - 'description' => $transaction->description ?? $journal->description, - 'source_id' => $opposingTr->account_id, - 'destination_id' => $transaction->account_id, - 'budget_id' => $budgetId, - 'category_id' => $categoryId, - 'bill_id' => $journal->bill_id, - 'notes' => $notes, - 'tags' => $tags, - 'internal_reference' => $internalRef, - 'sepa_cc' => $sepaCC, - 'sepa_ct_op' => $sepaCtOp, - 'sepa_ct_id' => $sepaCtId, - 'sepa_db' => $sepaDb, - 'sepa_country' => $sepaCountry, - 'sepa_ep' => $sepaEp, - 'sepa_ci' => $sepaCi, - 'sepa_batch_id' => $sepaBatchId, - 'external_id' => $externalId, - 'original-source' => $originalSource, - 'recurrence_id' => $recurrenceId, - 'bunq_payment_id' => $bunq, - 'import_hash' => $hash, - 'import_hash_v2' => $hashTwo, - 'interest_date' => $interestDate, - 'book_date' => $bookDate, - 'process_date' => $processDate, - 'due_date' => $dueDate, - 'payment_date' => $paymentDate, - 'invoice_date' => $invoiceDate, - ]; - - $data['transactions'][] = $tArray; + $data['transactions'][] = $this->generateTransaction($journal, $transaction); } - Log::debug(sprintf('Now calling transaction journal factory (%d transactions in array)', count($data['transactions']))); - $group = $this->groupFactory->create($data); - Log::debug('Done calling transaction journal factory'); + app('log')->debug(sprintf('Now calling transaction journal factory (%d transactions in array)', count($data['transactions']))); + $group = $this->groupFactory->create($data); + app('log')->debug('Done calling transaction journal factory'); // delete the old transaction journal. $this->service->destroy($journal); - $this->count++; + ++$this->count; // report on result: - Log::debug( + app('log')->debug( sprintf( 'Migrated journal #%d into group #%d with these journals: #%s', $journal->id, @@ -284,11 +184,6 @@ class MigrateToGroups extends Command ); } - /** - * @param TransactionJournal $journal - * - * @return Collection - */ private function getDestinationTransactions(TransactionJournal $journal): Collection { return $journal->transactions->filter( @@ -299,19 +194,103 @@ class MigrateToGroups extends Command } /** - * @param TransactionJournal $journal - * @param Transaction $transaction - * - * @return Transaction|null + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ + private function generateTransaction(TransactionJournal $journal, Transaction $transaction): array + { + app('log')->debug(sprintf('Now going to add transaction #%d to the array.', $transaction->id)); + $opposingTr = $this->findOpposingTransaction($journal, $transaction); + + if (null === $opposingTr) { + $this->friendlyError( + sprintf( + 'Journal #%d has no opposing transaction for transaction #%d. Cannot upgrade this entry.', + $journal->id, + $transaction->id + ) + ); + + return []; + } + + $budgetId = $this->cliRepository->getJournalBudgetId($journal); + $categoryId = $this->cliRepository->getJournalCategoryId($journal); + $notes = $this->cliRepository->getNoteText($journal); + $tags = $this->cliRepository->getTags($journal); + $internalRef = $this->cliRepository->getMetaField($journal, 'internal-reference'); + $sepaCC = $this->cliRepository->getMetaField($journal, 'sepa_cc'); + $sepaCtOp = $this->cliRepository->getMetaField($journal, 'sepa_ct_op'); + $sepaCtId = $this->cliRepository->getMetaField($journal, 'sepa_ct_id'); + $sepaDb = $this->cliRepository->getMetaField($journal, 'sepa_db'); + $sepaCountry = $this->cliRepository->getMetaField($journal, 'sepa_country'); + $sepaEp = $this->cliRepository->getMetaField($journal, 'sepa_ep'); + $sepaCi = $this->cliRepository->getMetaField($journal, 'sepa_ci'); + $sepaBatchId = $this->cliRepository->getMetaField($journal, 'sepa_batch_id'); + $externalId = $this->cliRepository->getMetaField($journal, 'external-id'); + $originalSource = $this->cliRepository->getMetaField($journal, 'original-source'); + $recurrenceId = $this->cliRepository->getMetaField($journal, 'recurrence_id'); + $bunq = $this->cliRepository->getMetaField($journal, 'bunq_payment_id'); + $hash = $this->cliRepository->getMetaField($journal, 'import_hash'); + $hashTwo = $this->cliRepository->getMetaField($journal, 'import_hash_v2'); + $interestDate = $this->cliRepository->getMetaDate($journal, 'interest_date'); + $bookDate = $this->cliRepository->getMetaDate($journal, 'book_date'); + $processDate = $this->cliRepository->getMetaDate($journal, 'process_date'); + $dueDate = $this->cliRepository->getMetaDate($journal, 'due_date'); + $paymentDate = $this->cliRepository->getMetaDate($journal, 'payment_date'); + $invoiceDate = $this->cliRepository->getMetaDate($journal, 'invoice_date'); + + // overrule journal category with transaction category. + $budgetId = $this->getTransactionBudget($transaction, $opposingTr) ?? $budgetId; + $categoryId = $this->getTransactionCategory($transaction, $opposingTr) ?? $categoryId; + + return [ + 'type' => strtolower($journal->transactionType->type), + 'date' => $journal->date, + 'user' => $journal->user_id, + 'currency_id' => $transaction->transaction_currency_id, + 'foreign_currency_id' => $transaction->foreign_currency_id, + 'amount' => $transaction->amount, + 'foreign_amount' => $transaction->foreign_amount, + 'description' => $transaction->description ?? $journal->description, + 'source_id' => $opposingTr->account_id, + 'destination_id' => $transaction->account_id, + 'budget_id' => $budgetId, + 'category_id' => $categoryId, + 'bill_id' => $journal->bill_id, + 'notes' => $notes, + 'tags' => $tags, + 'internal_reference' => $internalRef, + 'sepa_cc' => $sepaCC, + 'sepa_ct_op' => $sepaCtOp, + 'sepa_ct_id' => $sepaCtId, + 'sepa_db' => $sepaDb, + 'sepa_country' => $sepaCountry, + 'sepa_ep' => $sepaEp, + 'sepa_ci' => $sepaCi, + 'sepa_batch_id' => $sepaBatchId, + 'external_id' => $externalId, + 'original-source' => $originalSource, + 'recurrence_id' => $recurrenceId, + 'bunq_payment_id' => $bunq, + 'import_hash' => $hash, + 'import_hash_v2' => $hashTwo, + 'interest_date' => $interestDate, + 'book_date' => $bookDate, + 'process_date' => $processDate, + 'due_date' => $dueDate, + 'payment_date' => $paymentDate, + 'invoice_date' => $invoiceDate, + ]; + } + private function findOpposingTransaction(TransactionJournal $journal, Transaction $transaction): ?Transaction { $set = $journal->transactions->filter( static function (Transaction $subject) use ($transaction) { $amount = (float)$transaction->amount * -1 === (float)$subject->amount; // intentional float $identifier = $transaction->identifier === $subject->identifier; - Log::debug(sprintf('Amount the same? %s', var_export($amount, true))); - Log::debug(sprintf('ID the same? %s', var_export($identifier, true))); + app('log')->debug(sprintf('Amount the same? %s', var_export($amount, true))); + app('log')->debug(sprintf('ID the same? %s', var_export($identifier, true))); return $amount && $identifier; } @@ -320,67 +299,55 @@ class MigrateToGroups extends Command return $set->first(); } - /** - * @param Transaction $left - * @param Transaction $right - * - * @return int|null - */ private function getTransactionBudget(Transaction $left, Transaction $right): ?int { - Log::debug('Now in getTransactionBudget()'); + app('log')->debug('Now in getTransactionBudget()'); // try to get a budget ID from the left transaction: - /** @var Budget|null $budget */ + /** @var null|Budget $budget */ $budget = $left->budgets()->first(); if (null !== $budget) { - Log::debug(sprintf('Return budget #%d, from transaction #%d', $budget->id, $left->id)); + app('log')->debug(sprintf('Return budget #%d, from transaction #%d', $budget->id, $left->id)); - return (int)$budget->id; + return $budget->id; } // try to get a budget ID from the right transaction: - /** @var Budget|null $budget */ + /** @var null|Budget $budget */ $budget = $right->budgets()->first(); if (null !== $budget) { - Log::debug(sprintf('Return budget #%d, from transaction #%d', $budget->id, $right->id)); + app('log')->debug(sprintf('Return budget #%d, from transaction #%d', $budget->id, $right->id)); - return (int)$budget->id; + return $budget->id; } - Log::debug('Neither left or right have a budget, return NULL'); + app('log')->debug('Neither left or right have a budget, return NULL'); // if all fails, return NULL. return null; } - /** - * @param Transaction $left - * @param Transaction $right - * - * @return int|null - */ private function getTransactionCategory(Transaction $left, Transaction $right): ?int { - Log::debug('Now in getTransactionCategory()'); + app('log')->debug('Now in getTransactionCategory()'); // try to get a category ID from the left transaction: - /** @var Category|null $category */ + /** @var null|Category $category */ $category = $left->categories()->first(); if (null !== $category) { - Log::debug(sprintf('Return category #%d, from transaction #%d', $category->id, $left->id)); + app('log')->debug(sprintf('Return category #%d, from transaction #%d', $category->id, $left->id)); - return (int)$category->id; + return $category->id; } // try to get a category ID from the left transaction: - /** @var Category|null $category */ + /** @var null|Category $category */ $category = $right->categories()->first(); if (null !== $category) { - Log::debug(sprintf('Return category #%d, from transaction #%d', $category->id, $category->id)); + app('log')->debug(sprintf('Return category #%d, from transaction #%d', $category->id, $category->id)); - return (int)$category->id; + return $category->id; } - Log::debug('Neither left or right have a category, return NULL'); + app('log')->debug('Neither left or right have a category, return NULL'); // if all fails, return NULL. return null; @@ -394,8 +361,9 @@ class MigrateToGroups extends Command $orphanedJournals = $this->cliRepository->getJournalsWithoutGroup(); $total = count($orphanedJournals); if ($total > 0) { - Log::debug(sprintf('Going to convert %d transaction journals. Please hold..', $total)); + app('log')->debug(sprintf('Going to convert %d transaction journals. Please hold..', $total)); $this->friendlyInfo(sprintf('Going to convert %d transaction journals. Please hold..', $total)); + /** @var array $array */ foreach ($orphanedJournals as $array) { $this->giveGroup($array); @@ -406,12 +374,9 @@ class MigrateToGroups extends Command } } - /** - * @param array $array - */ private function giveGroup(array $array): void { - $groupId = DB::table('transaction_groups')->insertGetId( + $groupId = \DB::table('transaction_groups')->insertGetId( [ 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), @@ -419,13 +384,10 @@ class MigrateToGroups extends Command 'user_id' => $array['user_id'], ] ); - DB::table('transaction_journals')->where('id', $array['id'])->update(['transaction_group_id' => $groupId]); - $this->count++; + \DB::table('transaction_journals')->where('id', $array['id'])->update(['transaction_group_id' => $groupId]); + ++$this->count; } - /** - * - */ private function markAsMigrated(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/MigrateToRules.php b/app/Console/Commands/Upgrade/MigrateToRules.php index 6e8c804894..34db0ce8f7 100644 --- a/app/Console/Commands/Upgrade/MigrateToRules.php +++ b/app/Console/Commands/Upgrade/MigrateToRules.php @@ -34,8 +34,6 @@ use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Console\Command; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class MigrateToRules @@ -44,36 +42,21 @@ class MigrateToRules extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_bills_to_rules'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Migrate bills to rules.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:bills-to-rules {--F|force : Force the execution of this command.}'; - /** @var BillRepositoryInterface */ - private $billRepository; - private $count; - /** @var RuleGroupRepositoryInterface */ - private $ruleGroupRepository; - /** @var RuleRepositoryInterface */ - private $ruleRepository; - /** @var UserRepositoryInterface */ - private $userRepository; + public const string CONFIG_NAME = '480_bills_to_rules'; + + protected $description = 'Migrate bills to rules.'; + + protected $signature = 'firefly-iii:bills-to-rules {--F|force : Force the execution of this command.}'; + private BillRepositoryInterface $billRepository; + private int $count; + private RuleGroupRepositoryInterface $ruleGroupRepository; + private RuleRepositoryInterface $ruleRepository; + private UserRepositoryInterface $userRepository; /** * Execute the console command. * - * @return int - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -85,8 +68,8 @@ class MigrateToRules extends Command return 0; } - $users = $this->userRepository->all(); + /** @var User $user */ foreach ($users as $user) { $this->migrateUser($user); @@ -108,8 +91,6 @@ class MigrateToRules extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * - */ private function stupidLaravel(): void { @@ -120,11 +101,6 @@ class MigrateToRules extends Command $this->ruleRepository = app(RuleRepositoryInterface::class); } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -138,8 +114,6 @@ class MigrateToRules extends Command /** * Migrate bills to new rule structure for a specific user. * - * @param User $user - * * @throws FireflyException */ private function migrateUser(User $user): void @@ -150,19 +124,20 @@ class MigrateToRules extends Command /** @var Preference $lang */ $lang = app('preferences')->getForUser($user, 'language', 'en_US'); - $groupTitle = (string)trans('firefly.rulegroup_for_bills_title', [], $lang->data); + $language = null !== $lang->data && !is_array($lang->data) ? (string)$lang->data : 'en_US'; + $groupTitle = (string)trans('firefly.rulegroup_for_bills_title', [], $language); $ruleGroup = $this->ruleGroupRepository->findByTitle($groupTitle); if (null === $ruleGroup) { $ruleGroup = $this->ruleGroupRepository->store( [ - 'title' => (string)trans('firefly.rulegroup_for_bills_title', [], $lang->data), - 'description' => (string)trans('firefly.rulegroup_for_bills_description', [], $lang->data), + 'title' => (string)trans('firefly.rulegroup_for_bills_title', [], $language), + 'description' => (string)trans('firefly.rulegroup_for_bills_description', [], $language), 'active' => true, ] ); } - $bills = $this->billRepository->getBills(); + $bills = $this->billRepository->getBills(); /** @var Bill $bill */ foreach ($bills as $bill) { @@ -170,26 +145,22 @@ class MigrateToRules extends Command } } - /** - * @param RuleGroup $ruleGroup - * @param Bill $bill - * @param Preference $language - */ private function migrateBill(RuleGroup $ruleGroup, Bill $bill, Preference $language): void { if ('MIGRATED_TO_RULES' === $bill->match) { return; } + $languageString = null !== $language->data && !is_array($language->data) ? (string)$language->data : 'en_US'; // get match thing: - $match = implode(' ', explode(',', $bill->match)); - $newRule = [ + $match = implode(' ', explode(',', $bill->match)); + $newRule = [ 'rule_group_id' => $ruleGroup->id, 'active' => true, 'strict' => false, 'stop_processing' => false, // field is no longer used. - 'title' => (string)trans('firefly.rule_for_bill_title', ['name' => $bill->name], $language->data), - 'description' => (string)trans('firefly.rule_for_bill_description', ['name' => $bill->name], $language->data), + 'title' => (string)trans('firefly.rule_for_bill_title', ['name' => $bill->name], $languageString), + 'description' => (string)trans('firefly.rule_for_bill_description', ['name' => $bill->name], $languageString), 'trigger' => 'store-journal', 'triggers' => [ [ @@ -226,7 +197,7 @@ class MigrateToRules extends Command $this->ruleRepository->store($newRule); // update bill: - $newBillData = [ + $newBillData = [ 'currency_id' => $bill->transaction_currency_id, 'name' => $bill->name, 'match' => 'MIGRATED_TO_RULES', @@ -238,12 +209,9 @@ class MigrateToRules extends Command 'active' => $bill->active, ]; $this->billRepository->update($bill, $newBillData); - $this->count++; + ++$this->count; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php b/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php index 093223fe36..a6dba4b748 100644 --- a/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php +++ b/app/Console/Commands/Upgrade/OtherCurrenciesCorrections.php @@ -31,12 +31,9 @@ use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalCLIRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Console\Command; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class OtherCurrenciesCorrections @@ -45,22 +42,17 @@ class OtherCurrenciesCorrections extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_other_currencies'; - protected $description = 'Update all journal currency information.'; - protected $signature = 'firefly-iii:other-currencies {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '480_other_currencies'; + protected $description = 'Update all journal currency information.'; + protected $signature = 'firefly-iii:other-currencies {--F|force : Force the execution of this command.}'; private array $accountCurrencies; private AccountRepositoryInterface $accountRepos; private JournalCLIRepositoryInterface $cliRepos; private int $count; - private CurrencyRepositoryInterface $currencyRepos; private JournalRepositoryInterface $journalRepos; /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -72,7 +64,6 @@ class OtherCurrenciesCorrections extends Command return 0; } - $this->updateOtherJournalsCurrencies(); $this->markAsExecuted(); @@ -85,24 +76,16 @@ class OtherCurrenciesCorrections extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * - */ private function stupidLaravel(): void { $this->count = 0; $this->accountCurrencies = []; $this->accountRepos = app(AccountRepositoryInterface::class); - $this->currencyRepos = app(CurrencyRepositoryInterface::class); $this->journalRepos = app(JournalRepositoryInterface::class); $this->cliRepos = app(JournalCLIRepositoryInterface::class); } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -122,7 +105,7 @@ class OtherCurrenciesCorrections extends Command private function updateOtherJournalsCurrencies(): void { $set = $this->cliRepos->getAllJournals( - [TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::OPENING_BALANCE, TransactionType::RECONCILIATION,] + [TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::OPENING_BALANCE, TransactionType::RECONCILIATION] ); /** @var TransactionJournal $journal */ @@ -131,17 +114,13 @@ class OtherCurrenciesCorrections extends Command } } - /** - * @param TransactionJournal $journal - */ private function updateJournalCurrency(TransactionJournal $journal): void { $this->accountRepos->setUser($journal->user); $this->journalRepos->setUser($journal->user); - $this->currencyRepos->setUser($journal->user); $this->cliRepos->setUser($journal->user); - $leadTransaction = $this->getLeadTransaction($journal); + $leadTransaction = $this->getLeadTransaction($journal); if (null === $leadTransaction) { $this->friendlyError(sprintf('Could not reliably determine which transaction is in the lead for transaction journal #%d.', $journal->id)); @@ -149,8 +128,8 @@ class OtherCurrenciesCorrections extends Command return; } - $account = $leadTransaction->account; - $currency = $this->getCurrency($account); + $account = $leadTransaction->account; + $currency = $this->getCurrency($account); if (null === $currency) { $this->friendlyError( sprintf( @@ -160,21 +139,21 @@ class OtherCurrenciesCorrections extends Command $journal->id ) ); - $this->count++; + ++$this->count; return; } // fix each transaction: $journal->transactions->each( - static function (Transaction $transaction) use ($currency) { + static function (Transaction $transaction) use ($currency): void { if (null === $transaction->transaction_currency_id) { $transaction->transaction_currency_id = $currency->id; $transaction->save(); } // when mismatch in transaction: - if ((int)$transaction->transaction_currency_id !== (int)$currency->id) { - $transaction->foreign_currency_id = (int)$transaction->transaction_currency_id; + if ($transaction->transaction_currency_id !== $currency->id) { + $transaction->foreign_currency_id = $transaction->transaction_currency_id; $transaction->foreign_amount = $transaction->amount; $transaction->transaction_currency_id = $currency->id; $transaction->save(); @@ -183,31 +162,33 @@ class OtherCurrenciesCorrections extends Command ); // also update the journal, of course: $journal->transaction_currency_id = $currency->id; - $this->count++; + ++$this->count; $journal->save(); } /** * Gets the transaction that determines the transaction that "leads" and will determine * the currency to be used by all transactions, and the journal itself. - * - * @param TransactionJournal $journal - * - * @return Transaction|null */ private function getLeadTransaction(TransactionJournal $journal): ?Transaction { /** @var Transaction $lead */ $lead = null; + switch ($journal->transactionType->type) { default: break; + case TransactionType::WITHDRAWAL: $lead = $journal->transactions()->where('amount', '<', 0)->first(); + break; + case TransactionType::DEPOSIT: $lead = $journal->transactions()->where('amount', '>', 0)->first(); + break; + case TransactionType::OPENING_BALANCE: // whichever isn't an initial balance account: $lead = $journal->transactions()->leftJoin('accounts', 'transactions.account_id', '=', 'accounts.id')->leftJoin( @@ -216,7 +197,9 @@ class OtherCurrenciesCorrections extends Command '=', 'account_types.id' )->where('account_types.type', '!=', AccountType::INITIAL_BALANCE)->first(['transactions.*']); + break; + case TransactionType::RECONCILIATION: // whichever isn't the reconciliation account: $lead = $journal->transactions()->leftJoin('accounts', 'transactions.account_id', '=', 'accounts.id')->leftJoin( @@ -225,27 +208,23 @@ class OtherCurrenciesCorrections extends Command '=', 'account_types.id' )->where('account_types.type', '!=', AccountType::RECONCILIATION)->first(['transactions.*']); + break; } return $lead; } - /** - * @param Account $account - * - * @return TransactionCurrency|null - */ private function getCurrency(Account $account): ?TransactionCurrency { - $accountId = $account->id; + $accountId = $account->id; if (array_key_exists($accountId, $this->accountCurrencies) && 0 === $this->accountCurrencies[$accountId]) { return null; } if (array_key_exists($accountId, $this->accountCurrencies) && $this->accountCurrencies[$accountId] instanceof TransactionCurrency) { return $this->accountCurrencies[$accountId]; } - $currency = $this->accountRepos->getAccountCurrency($account); + $currency = $this->accountRepos->getAccountCurrency($account); if (null === $currency) { $this->accountCurrencies[$accountId] = 0; @@ -256,9 +235,6 @@ class OtherCurrenciesCorrections extends Command return $currency; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/RenameAccountMeta.php b/app/Console/Commands/Upgrade/RenameAccountMeta.php index 8451c88f0c..e62899a19c 100644 --- a/app/Console/Commands/Upgrade/RenameAccountMeta.php +++ b/app/Console/Commands/Upgrade/RenameAccountMeta.php @@ -27,8 +27,6 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\AccountMeta; use Illuminate\Console\Command; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class RenameAccountMeta @@ -37,27 +35,16 @@ class RenameAccountMeta extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_rename_account_meta'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Rename account meta-data to new format.'; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'firefly-iii:rename-account-meta {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '480_rename_account_meta'; + + protected $description = 'Rename account meta-data to new format.'; + + protected $signature = 'firefly-iii:rename-account-meta {--F|force : Force the execution of this command.}'; /** * Execute the console command. * - * @return int - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -98,11 +85,6 @@ class RenameAccountMeta extends Command return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -113,9 +95,6 @@ class RenameAccountMeta extends Command return false; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/TransactionIdentifier.php b/app/Console/Commands/Upgrade/TransactionIdentifier.php index 4f27a372ca..b241c6d394 100644 --- a/app/Console/Commands/Upgrade/TransactionIdentifier.php +++ b/app/Console/Commands/Upgrade/TransactionIdentifier.php @@ -30,10 +30,6 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Journal\JournalCLIRepositoryInterface; use Illuminate\Console\Command; use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; -use Schema; /** * Class TransactionIdentifier @@ -42,9 +38,9 @@ class TransactionIdentifier extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_transaction_identifier'; - protected $description = 'Fixes transaction identifiers.'; - protected $signature = 'firefly-iii:transaction-identifiers {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '480_transaction_identifier'; + protected $description = 'Fixes transaction identifiers.'; + protected $signature = 'firefly-iii:transaction-identifiers {--F|force : Force the execution of this command.}'; private JournalCLIRepositoryInterface $cliRepository; private int $count; @@ -58,10 +54,7 @@ class TransactionIdentifier extends Command * When either of these are the same amount, FF3 can't keep them apart: +3/-3, +3/-3, +3/-3. This happens more * often than you would think. So each set gets a number (1,2,3) to keep them apart. * - * @return int - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -74,11 +67,12 @@ class TransactionIdentifier extends Command } // if table does not exist, return false - if (!Schema::hasTable('transaction_journals')) { + if (!\Schema::hasTable('transaction_journals')) { return 0; } $journals = $this->cliRepository->getSplitJournals(); + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $this->updateJournalIdentifiers($journal); @@ -100,8 +94,6 @@ class TransactionIdentifier extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * - */ private function stupidLaravel(): void { @@ -109,11 +101,6 @@ class TransactionIdentifier extends Command $this->count = 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -127,8 +114,6 @@ class TransactionIdentifier extends Command /** * Grab all positive transactions from this journal that are not deleted. for each one, grab the negative opposing * one which has 0 as an identifier and give it the same identifier. - * - * @param TransactionJournal $transactionJournal */ private function updateJournalIdentifiers(TransactionJournal $transactionJournal): void { @@ -145,33 +130,28 @@ class TransactionIdentifier extends Command $opposing->identifier = $identifier; $transaction->save(); $opposing->save(); - $exclude[] = $transaction->id; - $exclude[] = $opposing->id; - $this->count++; + $exclude[] = $transaction->id; + $exclude[] = $opposing->id; + ++$this->count; } ++$identifier; } } - /** - * @param Transaction $transaction - * @param array $exclude - * - * @return Transaction|null - */ private function findOpposing(Transaction $transaction, array $exclude): ?Transaction { // find opposing: - $amount = bcmul((string)$transaction->amount, '-1'); + $amount = bcmul($transaction->amount, '-1'); try { /** @var Transaction $opposing */ $opposing = Transaction::where('transaction_journal_id', $transaction->transaction_journal_id) - ->where('amount', $amount)->where('identifier', '=', 0) - ->whereNotIn('id', $exclude) - ->first(); + ->where('amount', $amount)->where('identifier', '=', 0) + ->whereNotIn('id', $exclude) + ->first() + ; } catch (QueryException $e) { - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); $this->friendlyError('Firefly III could not find the "identifier" field in the "transactions" table.'); $this->friendlyError(sprintf('This field is required for Firefly III version %s to run.', config('firefly.version'))); $this->friendlyError('Please run "php artisan migrate" to add this field to the table.'); @@ -183,9 +163,6 @@ class TransactionIdentifier extends Command return $opposing; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/TransferCurrenciesCorrections.php b/app/Console/Commands/Upgrade/TransferCurrenciesCorrections.php index 556994f292..5733fa365f 100644 --- a/app/Console/Commands/Upgrade/TransferCurrenciesCorrections.php +++ b/app/Console/Commands/Upgrade/TransferCurrenciesCorrections.php @@ -32,9 +32,6 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Journal\JournalCLIRepositoryInterface; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class TransferCurrenciesCorrections @@ -43,9 +40,9 @@ class TransferCurrenciesCorrections extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '480_transfer_currencies'; - protected $description = 'Updates transfer currency information.'; - protected $signature = 'firefly-iii:transfer-currencies {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '480_transfer_currencies'; + protected $description = 'Updates transfer currency information.'; + protected $signature = 'firefly-iii:transfer-currencies {--F|force : Force the execution of this command.}'; private array $accountCurrencies; private AccountRepositoryInterface $accountRepos; private JournalCLIRepositoryInterface $cliRepos; @@ -60,10 +57,6 @@ class TransferCurrenciesCorrections extends Command /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -75,16 +68,17 @@ class TransferCurrenciesCorrections extends Command return 0; } - $this->startUpdateRoutine(); $this->markAsExecuted(); if (0 === $this->count) { $this->friendlyPositive('All transfers have correct currency information.'); + return 0; } $this->friendlyInfo(sprintf('Verified currency information of %d transfer(s).', $this->count)); + return 0; } @@ -92,8 +86,6 @@ class TransferCurrenciesCorrections extends Command * Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is * executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should * be called from the handle method instead of using the constructor to initialize the command. - * - */ private function stupidLaravel(): void { @@ -106,8 +98,6 @@ class TransferCurrenciesCorrections extends Command /** * Reset all the class fields for the current transfer. - * - */ private function resetInformation(): void { @@ -119,11 +109,6 @@ class TransferCurrenciesCorrections extends Command $this->destinationCurrency = null; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -145,27 +130,23 @@ class TransferCurrenciesCorrections extends Command private function startUpdateRoutine(): void { $set = $this->cliRepos->getAllJournals([TransactionType::TRANSFER]); + /** @var TransactionJournal $journal */ foreach ($set as $journal) { $this->updateTransferCurrency($journal); } } - /** - * @param TransactionJournal $transfer - */ private function updateTransferCurrency(TransactionJournal $transfer): void { $this->resetInformation(); - if ($this->isSplitJournal($transfer)) { $this->friendlyWarning(sprintf('Transaction journal #%d is a split journal. Cannot continue.', $transfer->id)); return; } - $this->getSourceInformation($transfer); $this->getDestinationInformation($transfer); @@ -187,7 +168,6 @@ class TransferCurrenciesCorrections extends Command return; } - // fix source transaction having no currency. $this->fixSourceNoCurrency(); @@ -216,10 +196,6 @@ class TransferCurrenciesCorrections extends Command /** * Is this a split transaction journal? - * - * @param TransactionJournal $transfer - * - * @return bool */ private function isSplitJournal(TransactionJournal $transfer): bool { @@ -228,10 +204,6 @@ class TransferCurrenciesCorrections extends Command /** * Extract source transaction, source account + source account currency from the journal. - * - * @param TransactionJournal $journal - * - */ private function getSourceInformation(TransactionJournal $journal): void { @@ -240,31 +212,21 @@ class TransferCurrenciesCorrections extends Command $this->sourceCurrency = null === $this->sourceAccount ? null : $this->getCurrency($this->sourceAccount); } - /** - * @param TransactionJournal $transfer - * - * @return Transaction|null - */ private function getSourceTransaction(TransactionJournal $transfer): ?Transaction { return $transfer->transactions()->where('amount', '<', 0)->first(); } - /** - * @param Account $account - * - * @return TransactionCurrency|null - */ private function getCurrency(Account $account): ?TransactionCurrency { - $accountId = $account->id; + $accountId = $account->id; if (array_key_exists($accountId, $this->accountCurrencies) && 0 === $this->accountCurrencies[$accountId]) { return null; } if (array_key_exists($accountId, $this->accountCurrencies) && $this->accountCurrencies[$accountId] instanceof TransactionCurrency) { return $this->accountCurrencies[$accountId]; } - $currency = $this->accountRepos->getAccountCurrency($account); + $currency = $this->accountRepos->getAccountCurrency($account); if (null === $currency) { $this->accountCurrencies[$accountId] = 0; @@ -277,10 +239,6 @@ class TransferCurrenciesCorrections extends Command /** * Extract destination transaction, destination account + destination account currency from the journal. - * - * @param TransactionJournal $journal - * - */ private function getDestinationInformation(TransactionJournal $journal): void { @@ -289,11 +247,6 @@ class TransferCurrenciesCorrections extends Command $this->destinationCurrency = null === $this->destinationAccount ? null : $this->getCurrency($this->destinationAccount); } - /** - * @param TransactionJournal $transfer - * - * @return Transaction|null - */ private function getDestinationTransaction(TransactionJournal $transfer): ?Transaction { return $transfer->transactions()->where('amount', '>', 0)->first(); @@ -301,8 +254,6 @@ class TransferCurrenciesCorrections extends Command /** * Is either the source or destination transaction NULL? - * - * @return bool */ private function isEmptyTransactions(): bool { @@ -311,15 +262,12 @@ class TransferCurrenciesCorrections extends Command || null === $this->destinationAccount; } - /** - * @return bool - */ private function isNoCurrencyPresent(): bool { // source account must have a currency preference. if (null === $this->sourceCurrency) { $message = sprintf('Account #%d ("%s") must have currency preference but has none.', $this->sourceAccount->id, $this->sourceAccount->name); - Log::error($message); + app('log')->error($message); $this->friendlyError($message); return true; @@ -332,7 +280,7 @@ class TransferCurrenciesCorrections extends Command $this->destinationAccount->id, $this->destinationAccount->name ); - Log::error($message); + app('log')->error($message); $this->friendlyError($message); return true; @@ -350,14 +298,15 @@ class TransferCurrenciesCorrections extends Command if (null === $this->sourceTransaction->transaction_currency_id && null !== $this->sourceCurrency) { $this->sourceTransaction ->transaction_currency_id - = (int)$this->sourceCurrency->id; + = $this->sourceCurrency->id + ; $message = sprintf( 'Transaction #%d has no currency setting, now set to %s.', $this->sourceTransaction->id, $this->sourceCurrency->code ); $this->friendlyInfo($message); - $this->count++; + ++$this->count; $this->sourceTransaction->save(); } } @@ -370,9 +319,9 @@ class TransferCurrenciesCorrections extends Command { if (null !== $this->sourceCurrency && null === $this->sourceTransaction->foreign_amount - && (int)$this->sourceTransaction->transaction_currency_id !== (int)$this->sourceCurrency->id + && (int)$this->sourceTransaction->transaction_currency_id !== $this->sourceCurrency->id ) { - $message = sprintf( + $message = sprintf( 'Transaction #%d has a currency setting #%d that should be #%d. Amount remains %s, currency is changed.', $this->sourceTransaction->id, $this->sourceTransaction->transaction_currency_id, @@ -380,8 +329,8 @@ class TransferCurrenciesCorrections extends Command $this->sourceTransaction->amount ); $this->friendlyWarning($message); - $this->count++; - $this->sourceTransaction->transaction_currency_id = (int)$this->sourceCurrency->id; + ++$this->count; + $this->sourceTransaction->transaction_currency_id = $this->sourceCurrency->id; $this->sourceTransaction->save(); } } @@ -395,14 +344,15 @@ class TransferCurrenciesCorrections extends Command if (null === $this->destinationTransaction->transaction_currency_id && null !== $this->destinationCurrency) { $this->destinationTransaction ->transaction_currency_id - = (int)$this->destinationCurrency->id; + = $this->destinationCurrency->id + ; $message = sprintf( 'Transaction #%d has no currency setting, now set to %s.', $this->destinationTransaction->id, $this->destinationCurrency->code ); $this->friendlyInfo($message); - $this->count++; + ++$this->count; $this->destinationTransaction->save(); } } @@ -415,9 +365,9 @@ class TransferCurrenciesCorrections extends Command { if (null !== $this->destinationCurrency && null === $this->destinationTransaction->foreign_amount - && (int)$this->destinationTransaction->transaction_currency_id !== (int)$this->destinationCurrency->id + && (int)$this->destinationTransaction->transaction_currency_id !== $this->destinationCurrency->id ) { - $message = sprintf( + $message = sprintf( 'Transaction #%d has a currency setting #%d that should be #%d. Amount remains %s, currency is changed.', $this->destinationTransaction->id, $this->destinationTransaction->transaction_currency_id, @@ -425,8 +375,8 @@ class TransferCurrenciesCorrections extends Command $this->destinationTransaction->amount ); $this->friendlyWarning($message); - $this->count++; - $this->destinationTransaction->transaction_currency_id = (int)$this->destinationCurrency->id; + ++$this->count; + $this->destinationTransaction->transaction_currency_id = $this->destinationCurrency->id; $this->destinationTransaction->save(); } } @@ -438,10 +388,10 @@ class TransferCurrenciesCorrections extends Command */ private function fixInvalidForeignCurrency(): void { - if ((int)$this->destinationCurrency->id === (int)$this->sourceCurrency->id) { + if ($this->destinationCurrency->id === $this->sourceCurrency->id) { // update both transactions to match: - $this->sourceTransaction->foreign_amount = null; - $this->sourceTransaction->foreign_currency_id = null; + $this->sourceTransaction->foreign_amount = null; + $this->sourceTransaction->foreign_currency_id = null; $this->destinationTransaction->foreign_amount = null; $this->destinationTransaction->foreign_currency_id = null; @@ -458,7 +408,7 @@ class TransferCurrenciesCorrections extends Command */ private function fixMismatchedForeignCurrency(): void { - if ((int)$this->sourceCurrency->id !== (int)$this->destinationCurrency->id) { + if ($this->sourceCurrency->id !== $this->destinationCurrency->id) { $this->sourceTransaction->transaction_currency_id = $this->sourceCurrency->id; $this->sourceTransaction->foreign_currency_id = $this->destinationCurrency->id; $this->destinationTransaction->transaction_currency_id = $this->sourceCurrency->id; @@ -466,7 +416,7 @@ class TransferCurrenciesCorrections extends Command $this->sourceTransaction->save(); $this->destinationTransaction->save(); - $this->count++; + ++$this->count; $this->friendlyInfo( sprintf('Verified foreign currency ID of transaction #%d and #%d', $this->sourceTransaction->id, $this->destinationTransaction->id) ); @@ -480,9 +430,9 @@ class TransferCurrenciesCorrections extends Command private function fixSourceNullForeignAmount(): void { if (null === $this->sourceTransaction->foreign_amount && null !== $this->destinationTransaction->foreign_amount) { - $this->sourceTransaction->foreign_amount = bcmul((string)$this->destinationTransaction->foreign_amount, '-1'); + $this->sourceTransaction->foreign_amount = bcmul($this->destinationTransaction->foreign_amount, '-1'); $this->sourceTransaction->save(); - $this->count++; + ++$this->count; $this->friendlyInfo( sprintf( 'Restored foreign amount of source transaction #%d to %s', @@ -500,9 +450,9 @@ class TransferCurrenciesCorrections extends Command private function fixDestNullForeignAmount(): void { if (null === $this->destinationTransaction->foreign_amount && null !== $this->sourceTransaction->foreign_amount) { - $this->destinationTransaction->foreign_amount = bcmul((string)$this->sourceTransaction->foreign_amount, '-1'); + $this->destinationTransaction->foreign_amount = bcmul($this->sourceTransaction->foreign_amount, '-1'); $this->destinationTransaction->save(); - $this->count++; + ++$this->count; $this->friendlyInfo( sprintf( 'Restored foreign amount of destination transaction #%d to %s', @@ -515,12 +465,10 @@ class TransferCurrenciesCorrections extends Command /** * This method makes sure that the transaction journal uses the currency given in the source transaction. - * - * @param TransactionJournal $journal */ private function fixTransactionJournalCurrency(TransactionJournal $journal): void { - if ((int)$journal->transaction_currency_id !== (int)$this->sourceCurrency->id) { + if ((int)$journal->transaction_currency_id !== $this->sourceCurrency->id) { $oldCurrencyCode = $journal->transactionCurrency->code ?? '(nothing)'; $journal->transaction_currency_id = $this->sourceCurrency->id; $message = sprintf( @@ -530,15 +478,12 @@ class TransferCurrenciesCorrections extends Command $this->sourceCurrency->code, $oldCurrencyCode ); - $this->count++; + ++$this->count; $this->friendlyInfo($message); $journal->save(); } } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php b/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php new file mode 100644 index 0000000000..ff59b5169c --- /dev/null +++ b/app/Console/Commands/Upgrade/UpgradeCurrencyPreferences.php @@ -0,0 +1,151 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Console\Commands\Upgrade; + +use FireflyIII\Console\Commands\ShowsFriendlyMessages; +use FireflyIII\Models\Preference; +use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Models\UserGroup; +use FireflyIII\User; +use Illuminate\Console\Command; +use Illuminate\Support\Collection; + +/** + * Class UpgradeCurrencyPreferences + */ +class UpgradeCurrencyPreferences extends Command +{ + use ShowsFriendlyMessages; + + public const string CONFIG_NAME = '610_upgrade_currency_prefs'; + + protected $description = 'Upgrade user currency preferences'; + + protected $signature = 'firefly-iii:upgrade-currency-preferences {--F|force : Force the execution of this command.}'; + + /** + * Execute the console command. + */ + public function handle(): int + { + if ($this->isExecuted() && true !== $this->option('force')) { + $this->friendlyInfo('This command has already been executed.'); + + return 0; + } + $this->runUpgrade(); + + $this->friendlyPositive('Currency preferences migrated.'); + + $this->markAsExecuted(); + + return 0; + } + + private function isExecuted(): bool + { + $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); + if (null !== $configVar) { + return (bool)$configVar->data; + } + + return false; + } + + private function runUpgrade(): void + { + $groups = UserGroup::get(); + + /** @var UserGroup $group */ + foreach ($groups as $group) { + $this->upgradeGroupPreferences($group); + } + + $users = User::get(); + + /** @var User $user */ + foreach ($users as $user) { + $this->upgradeUserPreferences($user); + } + } + + private function upgradeGroupPreferences(UserGroup $group): void + { + $currencies = TransactionCurrency::get(); + $enabled = new Collection(); + + /** @var TransactionCurrency $currency */ + foreach ($currencies as $currency) { + if ($currency->enabled) { + $enabled->push($currency); + } + } + $group->currencies()->sync($enabled->pluck('id')->toArray()); + } + + private function upgradeUserPreferences(User $user): void + { + $currencies = TransactionCurrency::get(); + $enabled = new Collection(); + + /** @var TransactionCurrency $currency */ + foreach ($currencies as $currency) { + if ($currency->enabled) { + $enabled->push($currency); + } + } + $user->currencies()->sync($enabled->pluck('id')->toArray()); + + // set the default currency for the user and for the group: + $preference = $this->getPreference($user); + $defaultCurrency = TransactionCurrency::where('code', $preference)->first(); + if (null === $defaultCurrency) { + // get EUR + $defaultCurrency = TransactionCurrency::where('code', 'EUR')->first(); + } + $user->currencies()->updateExistingPivot($defaultCurrency->id, ['user_default' => true]); + $user->userGroup->currencies()->updateExistingPivot($defaultCurrency->id, ['group_default' => true]); + } + + private function getPreference(User $user): string + { + $preference = Preference::where('user_id', $user->id)->where('name', 'currencyPreference')->first(['id', 'user_id', 'name', 'data', 'updated_at', 'created_at']); + + if (null === $preference) { + return 'EUR'; + } + + if (null !== $preference->data && !is_array($preference->data)) { + return (string)$preference->data; + } + + return 'EUR'; + } + + private function markAsExecuted(): void + { + app('fireflyconfig')->set(self::CONFIG_NAME, true); + } +} diff --git a/app/Console/Commands/Upgrade/UpgradeDatabase.php b/app/Console/Commands/Upgrade/UpgradeDatabase.php index 45f073768f..bf701b585b 100644 --- a/app/Console/Commands/Upgrade/UpgradeDatabase.php +++ b/app/Console/Commands/Upgrade/UpgradeDatabase.php @@ -25,14 +25,11 @@ namespace FireflyIII\Console\Commands\Upgrade; set_time_limit(0); -use Artisan; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use Illuminate\Console\Command; /** * Class UpgradeDatabase - * - */ class UpgradeDatabase extends Command { @@ -43,8 +40,6 @@ class UpgradeDatabase extends Command /** * Execute the console command. - * - * @return int */ public function handle(): int { @@ -72,6 +67,7 @@ class UpgradeDatabase extends Command // also just in case, some integrity commands: 'firefly-iii:create-group-memberships', 'firefly-iii:upgrade-group-information', + 'firefly-iii:upgrade-currency-preferences', ]; $args = []; if ($this->option('force')) { @@ -89,9 +85,6 @@ class UpgradeDatabase extends Command return 0; } - /** - * @return void - */ private function callInitialCommands(): void { $this->call('migrate', ['--seed' => true, '--force' => true, '--no-interaction' => true]); diff --git a/app/Console/Commands/Upgrade/UpgradeLiabilities.php b/app/Console/Commands/Upgrade/UpgradeLiabilities.php index 3723b2858d..0f36506a8e 100644 --- a/app/Console/Commands/Upgrade/UpgradeLiabilities.php +++ b/app/Console/Commands/Upgrade/UpgradeLiabilities.php @@ -33,8 +33,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Services\Internal\Support\CreditRecalculateService; use FireflyIII\User; use Illuminate\Console\Command; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class UpgradeLiabilities @@ -43,16 +41,12 @@ class UpgradeLiabilities extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '560_upgrade_liabilities'; - protected $description = 'Upgrade liabilities to new 5.6.0 structure.'; - protected $signature = 'firefly-iii:upgrade-liabilities {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '560_upgrade_liabilities'; + protected $description = 'Upgrade liabilities to new 5.6.0 structure.'; + protected $signature = 'firefly-iii:upgrade-liabilities {--F|force : Force the execution of this command.}'; /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -64,14 +58,10 @@ class UpgradeLiabilities extends Command $this->upgradeLiabilities(); $this->markAsExecuted(); + return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -82,27 +72,24 @@ class UpgradeLiabilities extends Command return false; } - /** - * - */ private function upgradeLiabilities(): void { $users = User::get(); + /** @var User $user */ foreach ($users as $user) { $this->upgradeForUser($user); } } - /** - * @param User $user - */ private function upgradeForUser(User $user): void { $accounts = $user->accounts() - ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') - ->whereIn('account_types.type', config('firefly.valid_liabilities')) - ->get(['accounts.*']); + ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') + ->whereIn('account_types.type', config('firefly.valid_liabilities')) + ->get(['accounts.*']) + ; + /** @var Account $account */ foreach ($accounts as $account) { $this->upgradeLiability($account); @@ -112,13 +99,10 @@ class UpgradeLiabilities extends Command } } - /** - * @param Account $account - */ private function upgradeLiability(Account $account): void { /** @var AccountRepositoryInterface $repository */ - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); $repository->setUser($account->user); // get opening balance, and correct if necessary. @@ -129,7 +113,7 @@ class UpgradeLiabilities extends Command } // add liability direction property (if it does not yet exist!) - $value = $repository->getMetaValue($account, 'liability_direction'); + $value = $repository->getMetaValue($account, 'liability_direction'); if (null === $value) { /** @var AccountMetaFactory $factory */ $factory = app(AccountMetaFactory::class); @@ -137,10 +121,6 @@ class UpgradeLiabilities extends Command } } - /** - * @param Account $account - * @param TransactionJournal $openingBalance - */ private function correctOpeningBalance(Account $account, TransactionJournal $openingBalance): void { $source = $this->getSourceTransaction($openingBalance); @@ -149,9 +129,9 @@ class UpgradeLiabilities extends Command return; } // source MUST be the liability. - if ((int)$destination->account_id === (int)$account->id) { + if ($destination->account_id === $account->id) { // so if not, switch things around: - $sourceAccountId = (int)$source->account_id; + $sourceAccountId = $source->account_id; $source->account_id = $destination->account_id; $destination->account_id = $sourceAccountId; $source->save(); @@ -159,29 +139,16 @@ class UpgradeLiabilities extends Command } } - /** - * @param TransactionJournal $journal - * - * @return Transaction|null - */ private function getSourceTransaction(TransactionJournal $journal): ?Transaction { return $journal->transactions()->where('amount', '<', 0)->first(); } - /** - * @param TransactionJournal $journal - * - * @return Transaction|null - */ private function getDestinationTransaction(TransactionJournal $journal): ?Transaction { return $journal->transactions()->where('amount', '>', 0)->first(); } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/UpgradeLiabilitiesEight.php b/app/Console/Commands/Upgrade/UpgradeLiabilitiesEight.php index ccd8e4721b..0fb2c9bb84 100644 --- a/app/Console/Commands/Upgrade/UpgradeLiabilitiesEight.php +++ b/app/Console/Commands/Upgrade/UpgradeLiabilitiesEight.php @@ -26,7 +26,6 @@ namespace FireflyIII\Console\Commands\Upgrade; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\Account; -use FireflyIII\Models\AccountType; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; @@ -35,9 +34,6 @@ use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService; use FireflyIII\Services\Internal\Support\CreditRecalculateService; use FireflyIII\User; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class UpgradeLiabilitiesEight @@ -46,16 +42,12 @@ class UpgradeLiabilitiesEight extends Command { use ShowsFriendlyMessages; - public const CONFIG_NAME = '600_upgrade_liabilities'; - protected $description = 'Upgrade liabilities to new 6.0.0 structure.'; - protected $signature = 'firefly-iii:liabilities-600 {--F|force : Force the execution of this command.}'; + public const string CONFIG_NAME = '600_upgrade_liabilities'; + protected $description = 'Upgrade liabilities to new 6.0.0 structure.'; + protected $signature = 'firefly-iii:liabilities-600 {--F|force : Force the execution of this command.}'; /** * Execute the console command. - * - * @return int - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function handle(): int { @@ -70,11 +62,6 @@ class UpgradeLiabilitiesEight extends Command return 0; } - /** - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function isExecuted(): bool { $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); @@ -85,27 +72,24 @@ class UpgradeLiabilitiesEight extends Command return false; } - /** - * - */ private function upgradeLiabilities(): void { $users = User::get(); + /** @var User $user */ foreach ($users as $user) { $this->upgradeForUser($user); } } - /** - * @param User $user - */ private function upgradeForUser(User $user): void { $accounts = $user->accounts() - ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') - ->whereIn('account_types.type', config('firefly.valid_liabilities')) - ->get(['accounts.*']); + ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') + ->whereIn('account_types.type', config('firefly.valid_liabilities')) + ->get(['accounts.*']) + ; + /** @var Account $account */ foreach ($accounts as $account) { $this->upgradeLiability($account); @@ -115,16 +99,13 @@ class UpgradeLiabilitiesEight extends Command } } - /** - * @param Account $account - */ private function upgradeLiability(Account $account): void { /** @var AccountRepositoryInterface $repository */ $repository = app(AccountRepositoryInterface::class); $repository->setUser($account->user); - $direction = $repository->getMetaValue($account, 'liability_direction'); + $direction = $repository->getMetaValue($account, 'liability_direction'); if ('credit' === $direction && $this->hasBadOpening($account)) { $this->deleteCreditTransaction($account); $this->reverseOpeningBalance($account); @@ -138,26 +119,23 @@ class UpgradeLiabilitiesEight extends Command } } - /** - * @param Account $account - * - * @return bool - */ private function hasBadOpening(Account $account): bool { $openingBalanceType = TransactionType::whereType(TransactionType::OPENING_BALANCE)->first(); $liabilityType = TransactionType::whereType(TransactionType::LIABILITY_CREDIT)->first(); $openingJournal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transactions.account_id', $account->id) - ->where('transaction_journals.transaction_type_id', $openingBalanceType->id) - ->first(['transaction_journals.*']); + ->where('transactions.account_id', $account->id) + ->where('transaction_journals.transaction_type_id', $openingBalanceType->id) + ->first(['transaction_journals.*']) + ; if (null === $openingJournal) { return false; } - $liabilityJournal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transactions.account_id', $account->id) - ->where('transaction_journals.transaction_type_id', $liabilityType->id) - ->first(['transaction_journals.*']); + $liabilityJournal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') + ->where('transactions.account_id', $account->id) + ->where('transaction_journals.transaction_type_id', $liabilityType->id) + ->first(['transaction_journals.*']) + ; if (null === $liabilityJournal) { return false; } @@ -168,18 +146,14 @@ class UpgradeLiabilitiesEight extends Command return true; } - /** - * @param Account $account - * - * @return void - */ private function deleteCreditTransaction(Account $account): void { $liabilityType = TransactionType::whereType(TransactionType::LIABILITY_CREDIT)->first(); $liabilityJournal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transactions.account_id', $account->id) - ->where('transaction_journals.transaction_type_id', $liabilityType->id) - ->first(['transaction_journals.*']); + ->where('transactions.account_id', $account->id) + ->where('transaction_journals.transaction_type_id', $liabilityType->id) + ->first(['transaction_journals.*']) + ; if (null !== $liabilityJournal) { $group = $liabilityJournal->transactionGroup; $service = new TransactionGroupDestroyService(); @@ -189,24 +163,23 @@ class UpgradeLiabilitiesEight extends Command } } - /** - * @param Account $account - * - * @return void - */ private function reverseOpeningBalance(Account $account): void { $openingBalanceType = TransactionType::whereType(TransactionType::OPENING_BALANCE)->first(); + /** @var TransactionJournal $openingJournal */ - $openingJournal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transactions.account_id', $account->id) - ->where('transaction_journals.transaction_type_id', $openingBalanceType->id) - ->first(['transaction_journals.*']); - /** @var Transaction|null $source */ - $source = $openingJournal->transactions()->where('amount', '<', 0)->first(); - /** @var Transaction|null $dest */ - $dest = $openingJournal->transactions()->where('amount', '>', 0)->first(); - if ($source && $dest) { + $openingJournal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') + ->where('transactions.account_id', $account->id) + ->where('transaction_journals.transaction_type_id', $openingBalanceType->id) + ->first(['transaction_journals.*']) + ; + + /** @var null|Transaction $source */ + $source = $openingJournal->transactions()->where('amount', '<', 0)->first(); + + /** @var null|Transaction $dest */ + $dest = $openingJournal->transactions()->where('amount', '>', 0)->first(); + if (null !== $source && null !== $dest) { $sourceId = $source->account_id; $destId = $dest->account_id; $dest->account_id = $sourceId; @@ -216,53 +189,49 @@ class UpgradeLiabilitiesEight extends Command return; } - Log::warning('Did not find opening balance.'); + app('log')->warning('Did not find opening balance.'); } - /** - * @param $account - * - * @return int - */ - private function deleteTransactions($account): int + private function deleteTransactions(Account $account): int { $count = 0; $journals = TransactionJournal::leftJoin('transactions', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transactions.account_id', $account->id)->get(['transaction_journals.*']); + ->where('transactions.account_id', $account->id)->get(['transaction_journals.*']) + ; + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { - $delete = false; - /** @var Transaction $source */ - $source = $journal->transactions()->where('amount', '<', 0)->first(); - /** @var Transaction $dest */ - $dest = $journal->transactions()->where('amount', '>', 0)->first(); + // $delete = false; + // /** @var Transaction $source */ + // $source = $journal->transactions()->where('amount', '<', 0)->first(); + // /** @var Transaction $dest */ + // $dest = $journal->transactions()->where('amount', '>', 0)->first(); - // if source is this liability and destination is expense, remove transaction. - // if source is revenue and destination is liability, remove transaction. - if ((int)$source->account_id === (int)$account->id && $dest->account->accountType->type === AccountType::EXPENSE) { - $delete = true; - } - if ((int)$dest->account_id === (int)$account->id && $source->account->accountType->type === AccountType::REVENUE) { - $delete = true; - } + /** + * // if source is this liability and destination is expense, remove transaction. + * // if source is revenue and destination is liability, remove transaction. + * if ($source->account_id === $account->id && $dest->account->accountType->type === AccountType::EXPENSE) { + * $delete = true; + * } + * if ($dest->account_id === $account->id && $source->account->accountType->type === AccountType::REVENUE) { + * $delete = true; + * } + * + * // overruled. No transaction will be deleted, ever. + * // code is kept in place, so I can revisit my reasoning. + * $delete = false; + */ - // overruled. No transaction will be deleted, ever. - // code is kept in place so i can revisit my reasoning. - $delete = false; - - if ($delete) { - $service = app(TransactionGroupDestroyService::class); - $service->destroy($journal->transactionGroup); - $count++; - } + // if ($delete) { + $service = app(TransactionGroupDestroyService::class); + $service->destroy($journal->transactionGroup); + ++$count; + // } } return $count; } - /** - * - */ private function markAsExecuted(): void { app('fireflyconfig')->set(self::CONFIG_NAME, true); diff --git a/app/Console/Commands/Upgrade/UpgradeSkeleton.php.stub b/app/Console/Commands/Upgrade/UpgradeSkeleton.php.stub index 4ba6803d78..437c42e220 100644 --- a/app/Console/Commands/Upgrade/UpgradeSkeleton.php.stub +++ b/app/Console/Commands/Upgrade/UpgradeSkeleton.php.stub @@ -10,18 +10,11 @@ use Illuminate\Console\Command; */ class UpgradeSkeleton extends Command { - public const CONFIG_NAME = '480_some_name'; - /** - * The console command description. - * - * @var string - */ + use ShowsFriendlyMessages; + public const string CONFIG_NAME = '480_some_name'; + protected $description = 'SOME DESCRIPTION'; - /** - * The name and signature of the console command. - * - * @var string - */ + protected $signature = 'firefly-iii:UPGRSKELETON {--F|force : Force the execution of this command.}'; /** diff --git a/app/Console/Commands/VerifiesAccessToken.php b/app/Console/Commands/VerifiesAccessToken.php index d6c45610c3..47ddcf88fa 100644 --- a/app/Console/Commands/VerifiesAccessToken.php +++ b/app/Console/Commands/VerifiesAccessToken.php @@ -26,24 +26,21 @@ namespace FireflyIII\Console\Commands; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Trait VerifiesAccessToken. * * Verifies user access token for sensitive commands. - * - */ trait VerifiesAccessToken { /** - * @return User * @throws FireflyException */ public function getUser(): User { - $userId = (int)$this->option('user'); + $userId = (int)$this->option('user'); + /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); $user = $repository->find($userId); @@ -57,7 +54,7 @@ trait VerifiesAccessToken /** * Abstract method to make sure trait knows about method "option". * - * @param string|null $key + * @param null|string $key * * @return mixed */ @@ -66,31 +63,31 @@ trait VerifiesAccessToken /** * Returns false when given token does not match given user token. * - * @return bool * @throws FireflyException */ protected function verifyAccessToken(): bool { - $userId = (int)$this->option('user'); - $token = (string)$this->option('token'); + $userId = (int)$this->option('user'); + $token = (string)$this->option('token'); + /** @var UserRepositoryInterface $repository */ - $repository = app(UserRepositoryInterface::class); - $user = $repository->find($userId); + $repository = app(UserRepositoryInterface::class); + $user = $repository->find($userId); if (null === $user) { - Log::error(sprintf('verifyAccessToken(): no such user for input "%d"', $userId)); + app('log')->error(sprintf('verifyAccessToken(): no such user for input "%d"', $userId)); return false; } $accessToken = app('preferences')->getForUser($user, 'access_token'); if (null === $accessToken) { - Log::error(sprintf('User #%d has no access token, so cannot access command line options.', $userId)); + app('log')->error(sprintf('User #%d has no access token, so cannot access command line options.', $userId)); return false; } if ($accessToken->data !== $token) { - Log::error(sprintf('Invalid access token for user #%d.', $userId)); - Log::error(sprintf('Token given is "%s", expected something else.', $token)); + app('log')->error(sprintf('Invalid access token for user #%d.', $userId)); + app('log')->error(sprintf('Token given is "%s", expected something else.', $token)); return false; } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 3282712a95..8e2776a54e 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -26,12 +26,9 @@ namespace FireflyIII\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; -use Illuminate\Support\Facades\Log; /** * File to make sure commands work. - * - */ class Kernel extends ConsoleKernel { @@ -40,21 +37,19 @@ class Kernel extends ConsoleKernel */ protected function commands(): void { - $this->load(__DIR__ . '/Commands'); + $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } /** * Define the application's command schedule. - * - * @param Schedule $schedule */ protected function schedule(Schedule $schedule): void { $schedule->call( - static function () { - Log::error( + static function (): void { + app('log')->error( 'Firefly III no longer users the Laravel scheduler to do cron jobs! Please read the instructions at https://docs.firefly-iii.org/' ); echo "\n"; diff --git a/app/Enums/ClauseType.php b/app/Enums/ClauseType.php index 6b78943a0e..47f50192f8 100644 --- a/app/Enums/ClauseType.php +++ b/app/Enums/ClauseType.php @@ -29,7 +29,7 @@ namespace FireflyIII\Enums; */ class ClauseType { - public const TRANSACTION = 'transaction'; - public const UPDATE = 'update'; - public const WHERE = 'where'; + public const string TRANSACTION = 'transaction'; + public const string UPDATE = 'update'; + public const string WHERE = 'where'; } diff --git a/frontend/src/components/models.ts b/app/Enums/SearchDirection.php similarity index 78% rename from frontend/src/components/models.ts rename to app/Enums/SearchDirection.php index 440b03cfdc..ea87e1d481 100644 --- a/frontend/src/components/models.ts +++ b/app/Enums/SearchDirection.php @@ -1,6 +1,7 @@ +. */ -export interface Todo { - id: number; - content: string; -} +declare(strict_types=1); -export interface Meta { - totalCount: number; +namespace FireflyIII\Enums; + +enum SearchDirection +{ + case SOURCE; + case DESTINATION; + case BOTH; } diff --git a/frontend/src/api/preferences/index.js b/app/Enums/StringPosition.php similarity index 70% rename from frontend/src/api/preferences/index.js rename to app/Enums/StringPosition.php index fac50967d5..19745d0f8a 100644 --- a/frontend/src/api/preferences/index.js +++ b/app/Enums/StringPosition.php @@ -1,6 +1,7 @@ +. */ -import {api} from "boot/axios"; +declare(strict_types=1); -export default class Preferences { - getByName(name) { - return api.get('/api/v1/preferences/' + name); - } +namespace FireflyIII\Enums; - postByName(name, value) { - return api.post('/api/v1/preferences', {name: name, data: value}); - } +/** + * Class StringPosition + * + * stringPosition: 1 = start (default), 2 = end, 3 = contains, 4 = is + */ +enum StringPosition +{ + case STARTS; + case ENDS; + case CONTAINS; + case IS; } diff --git a/app/Enums/UserRoleEnum.php b/app/Enums/UserRoleEnum.php index af98413c55..8906fb3535 100644 --- a/app/Enums/UserRoleEnum.php +++ b/app/Enums/UserRoleEnum.php @@ -30,13 +30,13 @@ namespace FireflyIII\Enums; enum UserRoleEnum: string { // most basic rights, cannot see other members, can see everything else. - case READ_ONLY = 'ro'; + case READ_ONLY = 'ro'; // required to even USE the group properly (in this order) - case MANAGE_TRANSACTIONS = 'mng_trx'; + case MANAGE_TRANSACTIONS = 'mng_trx'; // required to edit, add or change categories/tags/object-groups - case MANAGE_META = 'mng_meta'; + case MANAGE_META = 'mng_meta'; // manage other financial objects: case MANAGE_BUDGETS = 'mng_budgets'; @@ -49,14 +49,14 @@ enum UserRoleEnum: string case MANAGE_CURRENCIES = 'mng_currencies'; // view and generate reports - case VIEW_REPORTS = 'view_reports'; + case VIEW_REPORTS = 'view_reports'; // view memberships. needs FULL to manage them. - case VIEW_MEMBERSHIPS = 'view_memberships'; + case VIEW_MEMBERSHIPS = 'view_memberships'; // everything the creator can, except remove/change original creator and delete group - case FULL = 'full'; + case FULL = 'full'; // reserved for original creator - case OWNER = 'owner'; + case OWNER = 'owner'; } diff --git a/app/Enums/WebhookDelivery.php b/app/Enums/WebhookDelivery.php index c09f3b1b07..3322d761e8 100644 --- a/app/Enums/WebhookDelivery.php +++ b/app/Enums/WebhookDelivery.php @@ -29,6 +29,6 @@ namespace FireflyIII\Enums; */ enum WebhookDelivery: int { - //case XML = 200; + // case XML = 200; case JSON = 300; } diff --git a/app/Enums/WebhookTrigger.php b/app/Enums/WebhookTrigger.php index 4e48851ba1..bdb2a58bf2 100644 --- a/app/Enums/WebhookTrigger.php +++ b/app/Enums/WebhookTrigger.php @@ -29,10 +29,10 @@ namespace FireflyIII\Enums; */ enum WebhookTrigger: int { - case STORE_TRANSACTION = 100; - //case BEFORE_STORE_TRANSACTION = 101; - case UPDATE_TRANSACTION = 110; - //case BEFORE_UPDATE_TRANSACTION = 111; + case STORE_TRANSACTION = 100; + // case BEFORE_STORE_TRANSACTION = 101; + case UPDATE_TRANSACTION = 110; + // case BEFORE_UPDATE_TRANSACTION = 111; case DESTROY_TRANSACTION = 120; - //case BEFORE_DESTROY_TRANSACTION = 121; + // case BEFORE_DESTROY_TRANSACTION = 121; } diff --git a/app/Events/ActuallyLoggedIn.php b/app/Events/ActuallyLoggedIn.php index 557dad3b38..6bb21a5a04 100644 --- a/app/Events/ActuallyLoggedIn.php +++ b/app/Events/ActuallyLoggedIn.php @@ -25,6 +25,7 @@ declare(strict_types=1); namespace FireflyIII\Events; use FireflyIII\User; +use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Queue\SerializesModels; /** @@ -36,11 +37,10 @@ class ActuallyLoggedIn extends Event public User $user; - /** - * @param User $user - */ - public function __construct(User $user) + public function __construct(null|Authenticatable|User $user) { - $this->user = $user; + if ($user instanceof User) { + $this->user = $user; + } } } diff --git a/app/Events/Admin/InvitationCreated.php b/app/Events/Admin/InvitationCreated.php index 3df959e956..c057b35b06 100644 --- a/app/Events/Admin/InvitationCreated.php +++ b/app/Events/Admin/InvitationCreated.php @@ -42,8 +42,6 @@ class InvitationCreated extends Event /** * Create a new event instance. - * - * @param InvitedUser $invitee */ public function __construct(InvitedUser $invitee) { diff --git a/app/Events/AdminRequestedTestMessage.php b/app/Events/AdminRequestedTestMessage.php index 1c8d0fa1de..4f32c7841c 100644 --- a/app/Events/AdminRequestedTestMessage.php +++ b/app/Events/AdminRequestedTestMessage.php @@ -26,12 +26,9 @@ namespace FireflyIII\Events; use FireflyIII\User; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Log; /** * Class AdminRequestedTestMessage. - * - */ class AdminRequestedTestMessage extends Event { @@ -41,12 +38,10 @@ class AdminRequestedTestMessage extends Event /** * Create a new event instance. - * - * @param User $user */ public function __construct(User $user) { - Log::debug(sprintf('Triggered AdminRequestedTestMessage for user #%d (%s)', $user->id, $user->email)); + app('log')->debug(sprintf('Triggered AdminRequestedTestMessage for user #%d (%s)', $user->id, $user->email)); $this->user = $user; } } diff --git a/app/Events/DestroyedTransactionGroup.php b/app/Events/DestroyedTransactionGroup.php index febad99260..9911864c1e 100644 --- a/app/Events/DestroyedTransactionGroup.php +++ b/app/Events/DestroyedTransactionGroup.php @@ -26,12 +26,9 @@ namespace FireflyIII\Events; use FireflyIII\Models\TransactionGroup; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Log; /** * Class DestroyedTransactionGroup. - * - */ class DestroyedTransactionGroup extends Event { @@ -41,12 +38,10 @@ class DestroyedTransactionGroup extends Event /** * Create a new event instance. - * - * @param TransactionGroup $transactionGroup */ public function __construct(TransactionGroup $transactionGroup) { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); $this->transactionGroup = $transactionGroup; } } diff --git a/app/Events/DestroyedTransactionLink.php b/app/Events/DestroyedTransactionLink.php index fee5c47c9e..c4b748c83b 100644 --- a/app/Events/DestroyedTransactionLink.php +++ b/app/Events/DestroyedTransactionLink.php @@ -33,12 +33,10 @@ class DestroyedTransactionLink extends Event { use SerializesModels; - private TransactionJournalLink $link; /// @phpstan-ignore-line PHPStan thinks this property is never read. + private TransactionJournalLink $link; // @phpstan-ignore-line /** * DestroyedTransactionLink constructor. - * - * @param TransactionJournalLink $link */ public function __construct(TransactionJournalLink $link) { diff --git a/app/Events/DetectedNewIPAddress.php b/app/Events/DetectedNewIPAddress.php index 567bba32cc..3b2ba133be 100644 --- a/app/Events/DetectedNewIPAddress.php +++ b/app/Events/DetectedNewIPAddress.php @@ -38,9 +38,6 @@ class DetectedNewIPAddress extends Event /** * Create a new event instance. This event is triggered when a new user registers. - * - * @param User $user - * @param string $ipAddress */ public function __construct(User $user, string $ipAddress) { diff --git a/app/Events/Event.php b/app/Events/Event.php index ff329a8c3a..12c302afdb 100644 --- a/app/Events/Event.php +++ b/app/Events/Event.php @@ -26,9 +26,5 @@ namespace FireflyIII\Events; /** * Class Event. - * - */ -abstract class Event -{ -} +abstract class Event {} diff --git a/app/Events/Model/BudgetLimit/Created.php b/app/Events/Model/BudgetLimit/Created.php index e0133a3f21..2600c41632 100644 --- a/app/Events/Model/BudgetLimit/Created.php +++ b/app/Events/Model/BudgetLimit/Created.php @@ -1,6 +1,5 @@ budgetLimit = $budgetLimit; diff --git a/app/Events/Model/BudgetLimit/Deleted.php b/app/Events/Model/BudgetLimit/Deleted.php index 059d594ab5..06aab6e0ca 100644 --- a/app/Events/Model/BudgetLimit/Deleted.php +++ b/app/Events/Model/BudgetLimit/Deleted.php @@ -1,6 +1,5 @@ budgetLimit = $budgetLimit; diff --git a/app/Events/Model/BudgetLimit/Updated.php b/app/Events/Model/BudgetLimit/Updated.php index 828ae98a07..6429635ea0 100644 --- a/app/Events/Model/BudgetLimit/Updated.php +++ b/app/Events/Model/BudgetLimit/Updated.php @@ -1,6 +1,5 @@ budgetLimit = $budgetLimit; diff --git a/app/Events/Model/PiggyBank/ChangedAmount.php b/app/Events/Model/PiggyBank/ChangedAmount.php index 79d2068c30..9521641ab3 100644 --- a/app/Events/Model/PiggyBank/ChangedAmount.php +++ b/app/Events/Model/PiggyBank/ChangedAmount.php @@ -29,7 +29,6 @@ use FireflyIII\Models\PiggyBank; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Log; /** * Class ChangedAmount @@ -45,15 +44,10 @@ class ChangedAmount extends Event /** * Create a new event instance. - * - * @param PiggyBank $piggyBank - * @param string $amount - * @param TransactionJournal|null $transactionJournal - * @param TransactionGroup|null $transactionGroup */ public function __construct(PiggyBank $piggyBank, string $amount, ?TransactionJournal $transactionJournal, ?TransactionGroup $transactionGroup) { - Log::debug(sprintf('Created piggy bank event for piggy bank #%d with amount %s', $piggyBank->id, $amount)); + app('log')->debug(sprintf('Created piggy bank event for piggy bank #%d with amount %s', $piggyBank->id, $amount)); $this->piggyBank = $piggyBank; $this->transactionJournal = $transactionJournal; $this->transactionGroup = $transactionGroup; diff --git a/app/Events/Model/Rule/RuleActionFailedOnArray.php b/app/Events/Model/Rule/RuleActionFailedOnArray.php index fe11bf9a0b..8c6ca6aa9d 100644 --- a/app/Events/Model/Rule/RuleActionFailedOnArray.php +++ b/app/Events/Model/Rule/RuleActionFailedOnArray.php @@ -1,6 +1,5 @@ debug('Created new RuleActionFailedOnArray'); diff --git a/app/Events/Model/Rule/RuleActionFailedOnObject.php b/app/Events/Model/Rule/RuleActionFailedOnObject.php index a9df1869ee..bfc14bd78d 100644 --- a/app/Events/Model/Rule/RuleActionFailedOnObject.php +++ b/app/Events/Model/Rule/RuleActionFailedOnObject.php @@ -1,6 +1,5 @@ debug('Created new RuleActionFailedOnObject'); diff --git a/app/Events/NewVersionAvailable.php b/app/Events/NewVersionAvailable.php index 9051f76e9c..db3626b490 100644 --- a/app/Events/NewVersionAvailable.php +++ b/app/Events/NewVersionAvailable.php @@ -37,8 +37,6 @@ class NewVersionAvailable extends Event /** * Create a new event instance. This event is triggered when a new version is available. - * - * @param string $message */ public function __construct(string $message) { diff --git a/app/Events/RegisteredUser.php b/app/Events/RegisteredUser.php index 16e29abfd2..0a4d116d8f 100644 --- a/app/Events/RegisteredUser.php +++ b/app/Events/RegisteredUser.php @@ -29,8 +29,6 @@ use Illuminate\Queue\SerializesModels; /** * Class RegisteredUser. - * - */ class RegisteredUser extends Event { @@ -40,8 +38,6 @@ class RegisteredUser extends Event /** * Create a new event instance. This event is triggered when a new user registers. - * - * @param User $user */ public function __construct(User $user) { diff --git a/app/Events/RequestedNewPassword.php b/app/Events/RequestedNewPassword.php index 5967426dcd..71634ce001 100644 --- a/app/Events/RequestedNewPassword.php +++ b/app/Events/RequestedNewPassword.php @@ -29,8 +29,6 @@ use Illuminate\Queue\SerializesModels; /** * Class RequestedNewPassword. - * - */ class RequestedNewPassword extends Event { @@ -38,17 +36,15 @@ class RequestedNewPassword extends Event /** @var string The users IP address */ public $ipAddress; + /** @var string The token */ public $token; + /** @var User The user */ public $user; /** * Create a new event instance. This event is triggered when a users tries to reset his or her password. - * - * @param User $user - * @param string $token - * @param string $ipAddress */ public function __construct(User $user, string $token, string $ipAddress) { diff --git a/app/Events/RequestedReportOnJournals.php b/app/Events/RequestedReportOnJournals.php index 8b9edbd7eb..01ed141159 100644 --- a/app/Events/RequestedReportOnJournals.php +++ b/app/Events/RequestedReportOnJournals.php @@ -29,12 +29,9 @@ use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class RequestedReportOnJournals - * - */ class RequestedReportOnJournals { @@ -47,13 +44,10 @@ class RequestedReportOnJournals /** * Create a new event instance. - * - * @param int $userId - * @param Collection $groups */ public function __construct(int $userId, Collection $groups) { - Log::debug('In event RequestedReportOnJournals.'); + app('log')->debug('In event RequestedReportOnJournals.'); $this->userId = $userId; $this->groups = $groups; } diff --git a/app/Events/RequestedVersionCheckStatus.php b/app/Events/RequestedVersionCheckStatus.php index 9379beacb3..63b9f4f898 100644 --- a/app/Events/RequestedVersionCheckStatus.php +++ b/app/Events/RequestedVersionCheckStatus.php @@ -29,21 +29,16 @@ use Illuminate\Queue\SerializesModels; /** * Class RequestedVersionCheckStatus - * - */ class RequestedVersionCheckStatus extends Event { use SerializesModels; - /** @var User The user */ - public $user; + public User $user; /** * Create a new event instance. This event is triggered when Firefly III wants to know * what the deal is with the version checker. - * - * @param User $user */ public function __construct(User $user) { diff --git a/app/Events/StoredAccount.php b/app/Events/StoredAccount.php index d126dd3468..441afed64a 100644 --- a/app/Events/StoredAccount.php +++ b/app/Events/StoredAccount.php @@ -38,8 +38,6 @@ class StoredAccount extends Event /** * Create a new event instance. - * - * @param Account $account */ public function __construct(Account $account) { diff --git a/app/Events/StoredTransactionGroup.php b/app/Events/StoredTransactionGroup.php index 40d65bf776..268525635f 100644 --- a/app/Events/StoredTransactionGroup.php +++ b/app/Events/StoredTransactionGroup.php @@ -29,8 +29,6 @@ use Illuminate\Queue\SerializesModels; /** * Class StoredTransactionGroup. - * - */ class StoredTransactionGroup extends Event { @@ -42,10 +40,6 @@ class StoredTransactionGroup extends Event /** * Create a new event instance. - * - * @param TransactionGroup $transactionGroup - * @param bool $applyRules - * @param bool $fireWebhooks */ public function __construct(TransactionGroup $transactionGroup, bool $applyRules, bool $fireWebhooks) { diff --git a/app/Events/TriggeredAuditLog.php b/app/Events/TriggeredAuditLog.php index 95f7fe5b71..19d66b07da 100644 --- a/app/Events/TriggeredAuditLog.php +++ b/app/Events/TriggeredAuditLog.php @@ -42,6 +42,8 @@ class TriggeredAuditLog extends Event /** * Create a new event instance. + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct(Model $changer, Model $auditable, string $field, mixed $before, mixed $after) { diff --git a/app/Events/UpdatedAccount.php b/app/Events/UpdatedAccount.php index 66640720b2..3deceba692 100644 --- a/app/Events/UpdatedAccount.php +++ b/app/Events/UpdatedAccount.php @@ -38,8 +38,6 @@ class UpdatedAccount extends Event /** * Create a new event instance. - * - * @param Account $account */ public function __construct(Account $account) { diff --git a/app/Events/UpdatedTransactionGroup.php b/app/Events/UpdatedTransactionGroup.php index b3a79a56f2..9827d81d06 100644 --- a/app/Events/UpdatedTransactionGroup.php +++ b/app/Events/UpdatedTransactionGroup.php @@ -29,8 +29,6 @@ use Illuminate\Queue\SerializesModels; /** * Class UpdatedTransactionGroup. - * - */ class UpdatedTransactionGroup extends Event { @@ -42,10 +40,6 @@ class UpdatedTransactionGroup extends Event /** * Create a new event instance. - * - * @param TransactionGroup $transactionGroup - * @param bool $applyRules - * @param bool $fireWebhooks */ public function __construct(TransactionGroup $transactionGroup, bool $applyRules, bool $fireWebhooks) { diff --git a/app/Events/UserChangedEmail.php b/app/Events/UserChangedEmail.php index a71a4b7580..1d2e11fcf7 100644 --- a/app/Events/UserChangedEmail.php +++ b/app/Events/UserChangedEmail.php @@ -29,8 +29,6 @@ use Illuminate\Queue\SerializesModels; /** * Class UserChangedEmail. - * - */ class UserChangedEmail extends Event { @@ -42,10 +40,6 @@ class UserChangedEmail extends Event /** * UserChangedEmail constructor. - * - * @param User $user - * @param string $newEmail - * @param string $oldEmail */ public function __construct(User $user, string $newEmail, string $oldEmail) { diff --git a/app/Events/WarnUserAboutBill.php b/app/Events/WarnUserAboutBill.php index d0673f5755..98b7d5c449 100644 --- a/app/Events/WarnUserAboutBill.php +++ b/app/Events/WarnUserAboutBill.php @@ -29,8 +29,6 @@ use Illuminate\Queue\SerializesModels; /** * Class WarnUserAboutBill. - * - */ class WarnUserAboutBill extends Event { @@ -40,11 +38,6 @@ class WarnUserAboutBill extends Event public int $diff; public string $field; - /** - * @param Bill $bill - * @param string $field - * @param int $diff - */ public function __construct(Bill $bill, string $field, int $diff) { $this->bill = $bill; diff --git a/app/Exceptions/BadHttpHeaderException.php b/app/Exceptions/BadHttpHeaderException.php index 1ac5a5359c..19e1e5a7af 100644 --- a/app/Exceptions/BadHttpHeaderException.php +++ b/app/Exceptions/BadHttpHeaderException.php @@ -24,12 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Exceptions; -use Exception; - -/** - * - */ -class BadHttpHeaderException extends Exception +class BadHttpHeaderException extends \Exception { public int $statusCode = 406; } diff --git a/app/Exceptions/DuplicateTransactionException.php b/app/Exceptions/DuplicateTransactionException.php index 28c614f53c..b8d6ece025 100644 --- a/app/Exceptions/DuplicateTransactionException.php +++ b/app/Exceptions/DuplicateTransactionException.php @@ -24,11 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Exceptions; -use Exception; - /** * Class DuplicateTransactionException */ -class DuplicateTransactionException extends Exception -{ -} +class DuplicateTransactionException extends \Exception {} diff --git a/app/Exceptions/FireflyException.php b/app/Exceptions/FireflyException.php index 9d57980b0e..18b3fb0a35 100644 --- a/app/Exceptions/FireflyException.php +++ b/app/Exceptions/FireflyException.php @@ -24,13 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Exceptions; -use Exception; - /** * Class FireflyException. - * - */ -class FireflyException extends Exception -{ -} +class FireflyException extends \Exception {} diff --git a/app/Exceptions/GracefulNotFoundHandler.php b/app/Exceptions/GracefulNotFoundHandler.php index 94ba81ec38..2f9ca2abf1 100644 --- a/app/Exceptions/GracefulNotFoundHandler.php +++ b/app/Exceptions/GracefulNotFoundHandler.php @@ -30,15 +30,9 @@ use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\User; -use Illuminate\Contracts\Foundation\Application; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; -use Illuminate\Http\JsonResponse; -use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; -use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; use Symfony\Component\HttpFoundation\Response; -use Throwable; /** * Class GracefulNotFoundHandler @@ -48,19 +42,19 @@ class GracefulNotFoundHandler extends ExceptionHandler /** * Render an exception into an HTTP response. * - * @param Request $request - * @param Throwable $e + * @param Request $request * - * @return Application|JsonResponse|\Illuminate\Http\Response|Redirector|RedirectResponse|Response - * @throws Throwable + * @throws \Throwable + * + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ - public function render($request, Throwable $e) + public function render($request, \Throwable $e): Response { $route = $request->route(); if (null === $route) { return parent::render($request, $e); } - $name = $route->getName(); + $name = $route->getName(); if (!auth()->check()) { return parent::render($request, $e); } @@ -70,57 +64,69 @@ class GracefulNotFoundHandler extends ExceptionHandler app('log')->warning(sprintf('GracefulNotFoundHandler cannot handle route with name "%s"', $name)); return parent::render($request, $e); + case 'accounts.show': case 'accounts.edit': case 'accounts.show.all': return $this->handleAccount($request, $e); + case 'transactions.show': case 'transactions.edit': return $this->handleGroup($request, $e); + case 'attachments.show': case 'attachments.edit': case 'attachments.download': case 'attachments.view': // redirect to original attachment holder. return $this->handleAttachment($request, $e); + case 'bills.show': $request->session()->reflash(); return redirect(route('bills.index')); + case 'currencies.show': $request->session()->reflash(); return redirect(route('currencies.index')); + case 'budgets.show': case 'budgets.edit': case 'budgets.show.limit': $request->session()->reflash(); return redirect(route('budgets.index')); + case 'piggy-banks.show': $request->session()->reflash(); return redirect(route('piggy-banks.index')); + case 'recurring.show': case 'recurring.edit': $request->session()->reflash(); return redirect(route('recurring.index')); + case 'tags.show.all': case 'tags.show': case 'tags.edit': $request->session()->reflash(); return redirect(route('tags.index')); + case 'categories.show': case 'categories.show.all': $request->session()->reflash(); return redirect(route('categories.index')); + case 'rules.edit': $request->session()->reflash(); return redirect(route('rules.index')); + case 'transactions.mass.edit': case 'transactions.mass.delete': case 'transactions.bulk.edit': @@ -135,29 +141,28 @@ class GracefulNotFoundHandler extends ExceptionHandler } /** - * @param Request $request - * @param Throwable $exception - * - * @return Response - * @throws Throwable + * @throws \Throwable */ - private function handleAccount(Request $request, Throwable $exception) + private function handleAccount(Request $request, \Throwable $exception): Response { - Log::debug('404 page is probably a deleted account. Redirect to overview of account types.'); + app('log')->debug('404 page is probably a deleted account. Redirect to overview of account types.'); + /** @var User $user */ - $user = auth()->user(); - $route = $request->route(); - $param = $route->parameter('account'); + $user = auth()->user(); + $route = $request->route(); + $param = $route->parameter('account'); + $accountId = 0; if ($param instanceof Account) { - $accountId = (int)$param->id; + $accountId = $param->id; } - if (!($param instanceof Account)) { + if (!($param instanceof Account) && !is_object($param)) { $accountId = (int)$param; } - /** @var Account|null $account */ - $account = $user->accounts()->with(['accountType'])->withTrashed()->find($accountId); + + /** @var null|Account $account */ + $account = $user->accounts()->with(['accountType'])->withTrashed()->find($accountId); if (null === $account) { - Log::error(sprintf('Could not find account %d, so give big fat error.', $accountId)); + app('log')->error(sprintf('Could not find account %d, so give big fat error.', $accountId)); return parent::render($request, $exception); } @@ -169,35 +174,36 @@ class GracefulNotFoundHandler extends ExceptionHandler } /** - * @param Request $request - * @param Throwable $exception - * * @return Response - * @throws Throwable + * + * @throws \Throwable */ - private function handleGroup(Request $request, Throwable $exception) + private function handleGroup(Request $request, \Throwable $exception) { - Log::debug('404 page is probably a deleted group. Redirect to overview of group types.'); + app('log')->debug('404 page is probably a deleted group. Redirect to overview of group types.'); + /** @var User $user */ $user = auth()->user(); $route = $request->route(); - $groupId = (int)$route->parameter('transactionGroup'); + $param = $route->parameter('transactionGroup'); + $groupId = !is_object($param) ? (int)$param : 0; - /** @var TransactionGroup|null $group */ - $group = $user->transactionGroups()->withTrashed()->find($groupId); + /** @var null|TransactionGroup $group */ + $group = $user->transactionGroups()->withTrashed()->find($groupId); if (null === $group) { - Log::error(sprintf('Could not find group %d, so give big fat error.', $groupId)); + app('log')->error(sprintf('Could not find group %d, so give big fat error.', $groupId)); return parent::render($request, $exception); } - /** @var TransactionJournal|null $journal */ + + /** @var null|TransactionJournal $journal */ $journal = $group->transactionJournals()->withTrashed()->first(); if (null === $journal) { - Log::error(sprintf('Could not find journal for group %d, so give big fat error.', $groupId)); + app('log')->error(sprintf('Could not find journal for group %d, so give big fat error.', $groupId)); return parent::render($request, $exception); } - $type = $journal->transactionType->type; + $type = $journal->transactionType->type; $request->session()->reflash(); if (TransactionType::RECONCILIATION === $type) { @@ -208,30 +214,31 @@ class GracefulNotFoundHandler extends ExceptionHandler } /** - * @param Request $request - * @param Throwable $exception - * * @return Response - * @throws Throwable + * + * @throws \Throwable */ - private function handleAttachment(Request $request, Throwable $exception) + private function handleAttachment(Request $request, \Throwable $exception) { - Log::debug('404 page is probably a deleted attachment. Redirect to parent object.'); + app('log')->debug('404 page is probably a deleted attachment. Redirect to parent object.'); + /** @var User $user */ $user = auth()->user(); $route = $request->route(); - $attachmentId = (int)$route->parameter('attachment'); - /** @var Attachment|null $attachment */ - $attachment = $user->attachments()->withTrashed()->find($attachmentId); + $param = $route->parameter('attachment'); + $attachmentId = is_object($param) ? 0 : (int)$param; + + /** @var null|Attachment $attachment */ + $attachment = $user->attachments()->withTrashed()->find($attachmentId); if (null === $attachment) { - Log::error(sprintf('Could not find attachment %d, so give big fat error.', $attachmentId)); + app('log')->error(sprintf('Could not find attachment %d, so give big fat error.', $attachmentId)); return parent::render($request, $exception); } // get bindable. if (TransactionJournal::class === $attachment->attachable_type) { // is linked to journal, get group of journal (if not also deleted) - /** @var TransactionJournal $journal */ + /** @var null|TransactionJournal $journal */ $journal = $user->transactionJournals()->withTrashed()->find($attachment->attachable_id); if (null !== $journal) { return redirect(route('transactions.show', [$journal->transaction_group_id])); @@ -239,14 +246,14 @@ class GracefulNotFoundHandler extends ExceptionHandler } if (Bill::class === $attachment->attachable_type) { // is linked to bill. - /** @var Bill $bill */ + /** @var null|Bill $bill */ $bill = $user->bills()->withTrashed()->find($attachment->attachable_id); if (null !== $bill) { return redirect(route('bills.show', [$bill->id])); } } - Log::error(sprintf('Could not redirect attachment %d, its linked to a %s.', $attachmentId, $attachment->attachable_type)); + app('log')->error(sprintf('Could not redirect attachment %d, its linked to a %s.', $attachmentId, $attachment->attachable_type)); return parent::render($request, $exception); } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index b9bf1e6a36..f43d151f90 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -24,37 +24,32 @@ declare(strict_types=1); namespace FireflyIII\Exceptions; -use ErrorException; use FireflyIII\Jobs\MailError; use Illuminate\Auth\AuthenticationException; -use Illuminate\Contracts\Foundation\Application; use Illuminate\Database\QueryException; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; -use Illuminate\Routing\Redirector; use Illuminate\Session\TokenMismatchException; use Illuminate\Support\Arr; -use Illuminate\Support\Facades\Log; use Illuminate\Validation\ValidationException as LaravelValidationException; use Laravel\Passport\Exceptions\OAuthServerException as LaravelOAuthException; use League\OAuth2\Server\Exception\OAuthServerException; use Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Throwable; /** * Class Handler - * - */ class Handler extends ExceptionHandler { /** - * @var array> + * @var array> */ protected $dontReport = [ @@ -70,54 +65,62 @@ class Handler extends ExceptionHandler ]; /** - * Render an exception into an HTTP response. + * Render an exception into an HTTP response. It's complex but lucky for us, we never use it because + * Firefly III never crashes. * - * @param Request $request - * @param Throwable $e + * @param Request $request * - * @return mixed - * @throws Throwable + * @throws \Throwable + * + * @SuppressWarnings(PHPMD.NPathComplexity) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ - public function render($request, Throwable $e) + public function render($request, \Throwable $e): Response { $expectsJson = $request->expectsJson(); // if the user requests anything /api/, assume the user wants to see JSON. if (str_starts_with($request->getRequestUri(), '/api/')) { - Log::debug('API endpoint, always assume user wants JSON.'); + app('log')->debug('API endpoint, always assume user wants JSON.'); $expectsJson = true; } - Log::debug('Now in Handler::render()'); + app('log')->debug('Now in Handler::render()'); if ($e instanceof LaravelValidationException && $expectsJson) { // ignore it: controller will handle it. - Log::debug(sprintf('Return to parent to handle LaravelValidationException(%d)', $e->status)); + app('log')->debug(sprintf('Return to parent to handle LaravelValidationException(%d)', $e->status)); + return parent::render($request, $e); } if ($e instanceof NotFoundHttpException && $expectsJson) { // JSON error: - Log::debug('Return JSON not found error.'); + app('log')->debug('Return JSON not found error.'); + return response()->json(['message' => 'Resource not found', 'exception' => 'NotFoundHttpException'], 404); } if ($e instanceof AuthenticationException && $expectsJson) { // somehow Laravel handler does not catch this: - Log::debug('Return JSON unauthenticated error.'); + app('log')->debug('Return JSON unauthenticated error.'); + return response()->json(['message' => 'Unauthenticated', 'exception' => 'AuthenticationException'], 401); } if ($e instanceof OAuthServerException && $expectsJson) { - Log::debug('Return JSON OAuthServerException.'); + app('log')->debug('Return JSON OAuthServerException.'); + // somehow Laravel handler does not catch this: return response()->json(['message' => $e->getMessage(), 'exception' => 'OAuthServerException'], 401); } if ($e instanceof BadRequestHttpException) { - Log::debug('Return JSON BadRequestHttpException.'); + app('log')->debug('Return JSON BadRequestHttpException.'); + return response()->json(['message' => $e->getMessage(), 'exception' => 'BadRequestHttpException'], 400); } if ($e instanceof BadHttpHeaderException) { // is always API exception. - Log::debug('Return JSON BadHttpHeaderException.'); + app('log')->debug('Return JSON BadHttpHeaderException.'); + return response()->json(['message' => $e->getMessage(), 'exception' => 'BadHttpHeaderException'], $e->statusCode); } @@ -125,9 +128,10 @@ class Handler extends ExceptionHandler $errorCode = 500; $errorCode = $e instanceof MethodNotAllowedHttpException ? 405 : $errorCode; - $isDebug = config('app.debug', false); + $isDebug = (bool)config('app.debug', false); if ($isDebug) { - Log::debug(sprintf('Return JSON %s with debug.', get_class($e))); + app('log')->debug(sprintf('Return JSON %s with debug.', get_class($e))); + return response()->json( [ 'message' => $e->getMessage(), @@ -139,7 +143,8 @@ class Handler extends ExceptionHandler $errorCode ); } - Log::debug(sprintf('Return JSON %s.', get_class($e))); + app('log')->debug(sprintf('Return JSON %s.', get_class($e))); + return response()->json( ['message' => sprintf('Internal Firefly III Exception: %s', $e->getMessage()), 'exception' => get_class($e)], $errorCode @@ -147,7 +152,7 @@ class Handler extends ExceptionHandler } if ($e instanceof NotFoundHttpException) { - Log::debug('Refer to GracefulNotFoundHandler'); + app('log')->debug('Refer to GracefulNotFoundHandler'); $handler = app(GracefulNotFoundHandler::class); return $handler->render($request, $e); @@ -155,20 +160,20 @@ class Handler extends ExceptionHandler // special view for database errors with extra instructions if ($e instanceof QueryException) { - Log::debug('Return Firefly III database exception view.'); + app('log')->debug('Return Firefly III database exception view.'); $isDebug = config('app.debug'); return response()->view('errors.DatabaseException', ['exception' => $e, 'debug' => $isDebug], 500); } - if ($e instanceof FireflyException || $e instanceof ErrorException || $e instanceof OAuthServerException) { - Log::debug('Return Firefly III error view.'); + if ($e instanceof FireflyException || $e instanceof \ErrorException || $e instanceof OAuthServerException) { + app('log')->debug('Return Firefly III error view.'); $isDebug = config('app.debug'); return response()->view('errors.FireflyException', ['exception' => $e, 'debug' => $isDebug], 500); } - Log::debug(sprintf('Error "%s" has no Firefly III treatment, parent will handle.', get_class($e))); + app('log')->debug(sprintf('Error "%s" has no Firefly III treatment, parent will handle.', get_class($e))); return parent::render($request, $e); } @@ -176,21 +181,17 @@ class Handler extends ExceptionHandler /** * Report or log an exception. * - * @param Throwable $e - * - * @return void - * @throws Throwable - * + * @throws \Throwable */ - public function report(Throwable $e) + public function report(\Throwable $e): void { - $doMailError = config('firefly.send_error_message'); + $doMailError = (bool)config('firefly.send_error_message'); if ($this->shouldntReportLocal($e) || !$doMailError) { parent::report($e); return; } - $userData = [ + $userData = [ 'id' => 0, 'email' => 'unknown@example.com', ]; @@ -199,9 +200,9 @@ class Handler extends ExceptionHandler $userData['email'] = auth()->user()->email; } - $headers = request()->headers->all(); + $headers = request()->headers->all(); - $data = [ + $data = [ 'class' => get_class($e), 'errorMessage' => $e->getMessage(), 'time' => date('r'), @@ -215,42 +216,33 @@ class Handler extends ExceptionHandler 'json' => request()->acceptsJson(), 'method' => request()->method(), 'headers' => $headers, + 'post' => 'POST' === request()->method() ? json_encode(request()->all()) : '', ]; // create job that will mail. - $ipAddress = request()->ip() ?? '0.0.0.0'; - $job = new MailError($userData, (string)config('firefly.site_owner'), $ipAddress, $data); + $ipAddress = request()->ip() ?? '0.0.0.0'; + $job = new MailError($userData, (string)config('firefly.site_owner'), $ipAddress, $data); dispatch($job); parent::report($e); } - /** - * @param Throwable $e - * - * @return bool - */ - private function shouldntReportLocal(Throwable $e): bool + private function shouldntReportLocal(\Throwable $e): bool { - return !is_null( - Arr::first( - $this->dontReport, - function ($type) use ($e) { - return $e instanceof $type; - } - ) + return null !== Arr::first( + $this->dontReport, + static function ($type) use ($e) { + return $e instanceof $type; + } ); } /** * Convert a validation exception into a response. * - * @param Request $request - * @param LaravelValidationException $exception - * - * @return Application|RedirectResponse|Redirector + * @param Request $request */ - protected function invalid($request, LaravelValidationException $exception): Application | RedirectResponse | Redirector + protected function invalid($request, LaravelValidationException $exception): \Illuminate\Http\Response|JsonResponse|RedirectResponse { // protect against open redirect when submitting invalid forms. $previous = app('steam')->getSafePreviousUrl(); @@ -258,15 +250,12 @@ class Handler extends ExceptionHandler return redirect($redirect ?? $previous) ->withInput(Arr::except($request->input(), $this->dontFlash)) - ->withErrors($exception->errors(), $request->input('_error_bag', $exception->errorBag)); + ->withErrors($exception->errors(), $request->input('_error_bag', $exception->errorBag)) + ; } /** * Only return the redirectTo property from the exception if it is a valid URL. Return NULL otherwise. - * - * @param LaravelValidationException $exception - * - * @return string|null */ private function getRedirectUrl(LaravelValidationException $exception): ?string { diff --git a/app/Support/Calendar/Exceptions/IntervalException.php b/app/Exceptions/IntervalException.php similarity index 65% rename from app/Support/Calendar/Exceptions/IntervalException.php rename to app/Exceptions/IntervalException.php index 6192dcc51e..c411b2dd1c 100644 --- a/app/Support/Calendar/Exceptions/IntervalException.php +++ b/app/Exceptions/IntervalException.php @@ -1,9 +1,8 @@ availableIntervals = []; + $this->periodicity = Periodicity::Monthly; + } + public static function unavailable( Periodicity $periodicity, array $intervals, int $code = 0, - ?Throwable $previous = null - ): IntervalException { - $message = sprintf( + ?\Throwable $previous = null + ): self { + $message = sprintf( 'The periodicity %s is unknown. Choose one of available periodicity: %s', $periodicity->name, - join(', ', $intervals) + implode(', ', $intervals) ); - $exception = new IntervalException($message, $code, $previous); + $exception = new self($message, $code, $previous); $exception->periodicity = $periodicity; $exception->availableIntervals = $intervals; + return $exception; } } diff --git a/app/Exceptions/NotImplementedException.php b/app/Exceptions/NotImplementedException.php index 31ce17a23f..37bc63c0bb 100644 --- a/app/Exceptions/NotImplementedException.php +++ b/app/Exceptions/NotImplementedException.php @@ -24,13 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Exceptions; -use Exception; - /** * Class NotImplementedException. - * - */ -class NotImplementedException extends Exception -{ -} +class NotImplementedException extends \Exception {} diff --git a/app/Exceptions/ValidationException.php b/app/Exceptions/ValidationException.php index f8f3db344f..1927df03ef 100644 --- a/app/Exceptions/ValidationException.php +++ b/app/Exceptions/ValidationException.php @@ -24,13 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Exceptions; -use Exception; - /** * Class ValidationExceptions. - * - */ -class ValidationException extends Exception -{ -} +class ValidationException extends \Exception {} diff --git a/app/Factory/AccountFactory.php b/app/Factory/AccountFactory.php index 080da2d31b..faaaaa6c52 100644 --- a/app/Factory/AccountFactory.php +++ b/app/Factory/AccountFactory.php @@ -34,7 +34,6 @@ use FireflyIII\Services\Internal\Support\LocationServiceTrait; use FireflyIII\Services\Internal\Update\AccountUpdateService; use FireflyIII\User; use Illuminate\Support\Facades\Log; -use JsonException; /** * Factory to create or return accounts. @@ -56,8 +55,6 @@ class AccountFactory /** * AccountFactory constructor. - * - */ public function __construct() { @@ -70,25 +67,20 @@ class AccountFactory } /** - * @param string $accountName - * @param string $accountType - * - * @return Account * @throws FireflyException - * @throws JsonException */ public function findOrCreate(string $accountName, string $accountType): Account { - Log::debug(sprintf('findOrCreate("%s", "%s")', $accountName, $accountType)); + app('log')->debug(sprintf('findOrCreate("%s", "%s")', $accountName, $accountType)); - $type = $this->accountRepository->getAccountTypeByType($accountType); + $type = $this->accountRepository->getAccountTypeByType($accountType); if (null === $type) { throw new FireflyException(sprintf('Cannot find account type "%s"', $accountType)); } $return = $this->user->accounts->where('account_type_id', $type->id)->where('name', $accountName)->first(); if (null === $return) { - Log::debug('Found nothing. Will create a new one.'); + app('log')->debug('Found nothing. Will create a new one.'); $return = $this->create( [ 'user_id' => $this->user->id, @@ -107,26 +99,22 @@ class AccountFactory } /** - * @param array $data - * - * @return Account * @throws FireflyException - * @throws JsonException */ public function create(array $data): Account { - Log::debug('Now in AccountFactory::create()'); + app('log')->debug('Now in AccountFactory::create()'); $type = $this->getAccountType($data); $data['iban'] = $this->filterIban($data['iban'] ?? null); // account may exist already: - $return = $this->find($data['name'], $type->type); + $return = $this->find($data['name'], $type->type); if (null !== $return) { return $return; } - $return = $this->createAccount($type, $data); + $return = $this->createAccount($type, $data); event(new StoredAccount($return)); @@ -134,9 +122,6 @@ class AccountFactory } /** - * @param array $data - * - * @return AccountType|null * @throws FireflyException */ protected function getAccountType(array $data): ?AccountType @@ -161,35 +146,25 @@ class AccountFactory } if (null === $result) { app('log')->warning(sprintf('Found NO account type based on %d and "%s"', $accountTypeId, $accountTypeName)); + throw new FireflyException(sprintf('AccountFactory::create() was unable to find account type #%d ("%s").', $accountTypeId, $accountTypeName)); } - Log::debug(sprintf('Found account type based on %d and "%s": "%s"', $accountTypeId, $accountTypeName, $result->type)); + app('log')->debug(sprintf('Found account type based on %d and "%s": "%s"', $accountTypeId, $accountTypeName, $result->type)); return $result; } - /** - * @param string $accountName - * @param string $accountType - * - * @return Account|null - */ public function find(string $accountName, string $accountType): ?Account { - Log::debug(sprintf('Now in AccountFactory::find("%s", "%s")', $accountName, $accountType)); + app('log')->debug(sprintf('Now in AccountFactory::find("%s", "%s")', $accountName, $accountType)); $type = AccountType::whereType($accountType)->first(); - /** @var Account|null */ + // @var Account|null return $this->user->accounts()->where('account_type_id', $type->id)->where('name', $accountName)->first(); } /** - * @param AccountType $type - * @param array $data - * - * @return Account * @throws FireflyException - * @throws JsonException */ private function createAccount(AccountType $type, array $data): Account { @@ -217,31 +192,31 @@ class AccountFactory $databaseData['virtual_balance'] = null; } // create account! - $account = Account::create($databaseData); + $account = Account::create($databaseData); Log::channel('audit')->info(sprintf('Account #%d ("%s") has been created.', $account->id, $account->name)); // update meta data: - $data = $this->cleanMetaDataArray($account, $data); + $data = $this->cleanMetaDataArray($account, $data); $this->storeMetaData($account, $data); // create opening balance (only asset accounts) try { $this->storeOpeningBalance($account, $data); } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } // create credit liability data (only liabilities) try { $this->storeCreditLiability($account, $data); } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } // create notes - $notes = array_key_exists('notes', $data) ? $data['notes'] : ''; + $notes = array_key_exists('notes', $data) ? $data['notes'] : ''; $this->updateNote($account, $notes); // create location @@ -257,22 +232,17 @@ class AccountFactory } /** - * @param Account $account - * @param array $data - * - * @return array * @throws FireflyException - * @throws JsonException */ private function cleanMetaDataArray(Account $account, array $data): array { - $currencyId = array_key_exists('currency_id', $data) ? (int)$data['currency_id'] : 0; - $currencyCode = array_key_exists('currency_code', $data) ? (string)$data['currency_code'] : ''; - $accountRole = array_key_exists('account_role', $data) ? (string)$data['account_role'] : null; - $currency = $this->getCurrency($currencyId, $currencyCode); + $currencyId = array_key_exists('currency_id', $data) ? (int)$data['currency_id'] : 0; + $currencyCode = array_key_exists('currency_code', $data) ? (string)$data['currency_code'] : ''; + $accountRole = array_key_exists('account_role', $data) ? (string)$data['account_role'] : null; + $currency = $this->getCurrency($currencyId, $currencyCode); // only asset account may have a role: - if ($account->accountType->type !== AccountType::ASSET) { + if (AccountType::ASSET !== $account->accountType->type) { $accountRole = ''; } // only liability may have direction: @@ -285,26 +255,22 @@ class AccountFactory return $data; } - /** - * @param Account $account - * @param array $data - */ private function storeMetaData(Account $account, array $data): void { - $fields = $this->validFields; - if ($account->accountType->type === AccountType::ASSET) { + $fields = $this->validFields; + if (AccountType::ASSET === $account->accountType->type) { $fields = $this->validAssetFields; } - if ($account->accountType->type === AccountType::ASSET && 'ccAsset' === $data['account_role']) { + if (AccountType::ASSET === $account->accountType->type && 'ccAsset' === $data['account_role']) { $fields = $this->validCCFields; } // remove currency_id if necessary. - $type = $account->accountType->type; - $list = config('firefly.valid_currency_account_types'); + $type = $account->accountType->type; + $list = config('firefly.valid_currency_account_types'); if (!in_array($type, $list, true)) { $pos = array_search('currency_id', $fields, true); - if ($pos !== false) { + if (false !== $pos) { unset($fields[$pos]); } } @@ -329,9 +295,6 @@ class AccountFactory } /** - * @param Account $account - * @param array $data - * * @throws FireflyException */ private function storeOpeningBalance(Account $account, array $data): void @@ -351,45 +314,39 @@ class AccountFactory } /** - * @param Account $account - * @param array $data - * * @throws FireflyException */ private function storeCreditLiability(Account $account, array $data): void { - Log::debug('storeCreditLiability'); + app('log')->debug('storeCreditLiability'); $account->refresh(); $accountType = $account->accountType->type; $direction = $this->accountRepository->getMetaValue($account, 'liability_direction'); $valid = config('firefly.valid_liabilities'); if (in_array($accountType, $valid, true)) { - Log::debug('Is a liability with credit ("i am owed") direction.'); + app('log')->debug('Is a liability with credit ("i am owed") direction.'); if ($this->validOBData($data)) { - Log::debug('Has valid CL data.'); + app('log')->debug('Has valid CL data.'); $openingBalance = $data['opening_balance']; $openingBalanceDate = $data['opening_balance_date']; // store credit transaction. $this->updateCreditTransaction($account, $direction, $openingBalance, $openingBalanceDate); } if (!$this->validOBData($data)) { - Log::debug('Does NOT have valid CL data, deletr any CL transaction.'); + app('log')->debug('Does NOT have valid CL data, deletr any CL transaction.'); $this->deleteCreditTransaction($account); } } } /** - * @param Account $account - * @param array $data - * * @throws FireflyException */ private function storeOrder(Account $account, array $data): void { - $accountType = $account->accountType->type; - $maxOrder = $this->accountRepository->maxOrder($accountType); - $order = null; + $accountType = $account->accountType->type; + $maxOrder = $this->accountRepository->maxOrder($accountType); + $order = null; if (!array_key_exists('order', $data)) { $order = $maxOrder + 1; } @@ -403,9 +360,6 @@ class AccountFactory $updateService->update($account, ['order' => $order]); } - /** - * @param User $user - */ public function setUser(User $user): void { $this->user = $user; diff --git a/app/Factory/AccountMetaFactory.php b/app/Factory/AccountMetaFactory.php index e92b88a6cc..cad3bdddb6 100644 --- a/app/Factory/AccountMetaFactory.php +++ b/app/Factory/AccountMetaFactory.php @@ -26,7 +26,6 @@ namespace FireflyIII\Factory; use FireflyIII\Models\Account; use FireflyIII\Models\AccountMeta; -use Illuminate\Support\Facades\Log; /** * Class AccountMetaFactory @@ -35,16 +34,10 @@ class AccountMetaFactory { /** * Create update or delete meta data. - * - * @param Account $account - * @param string $field - * @param string $value - * - * @return AccountMeta|null */ public function crud(Account $account, string $field, string $value): ?AccountMeta { - /** @var AccountMeta|null $entry */ + /** @var null|AccountMeta $entry */ $entry = $account->accountMeta()->where('name', $field)->first(); // must not be an empty string: if ('' !== $value) { @@ -66,11 +59,6 @@ class AccountMetaFactory return $entry; } - /** - * @param array $data - * - * @return AccountMeta|null - */ public function create(array $data): ?AccountMeta { return AccountMeta::create($data); diff --git a/app/Factory/AttachmentFactory.php b/app/Factory/AttachmentFactory.php index bf4f63da5a..75b60e8738 100644 --- a/app/Factory/AttachmentFactory.php +++ b/app/Factory/AttachmentFactory.php @@ -38,21 +38,18 @@ class AttachmentFactory private User $user; /** - * @param array $data - * - * @return Attachment|null * @throws FireflyException */ public function create(array $data): ?Attachment { // append if necessary. - $model = !str_contains($data['attachable_type'], 'FireflyIII') ? sprintf('FireflyIII\\Models\\%s', $data['attachable_type']) + $model = !str_contains($data['attachable_type'], 'FireflyIII') ? sprintf('FireflyIII\\Models\\%s', $data['attachable_type']) : $data['attachable_type']; // get journal instead of transaction. if (Transaction::class === $model) { - /** @var Transaction|null $transaction */ - $transaction = $this->user->transactions()->find((int)$data['attachable_id']); + /** @var null|Transaction $transaction */ + $transaction = $this->user->transactions()->find((int)$data['attachable_id']); if (null === $transaction) { throw new FireflyException('Unexpectedly could not find transaction'); } @@ -77,7 +74,7 @@ class AttachmentFactory ); $notes = (string)($data['notes'] ?? ''); if ('' !== $notes) { - $note = new Note(); + $note = new Note(); $note->noteable()->associate($attachment); $note->text = $notes; $note->save(); @@ -86,9 +83,6 @@ class AttachmentFactory return $attachment; } - /** - * @param User $user - */ public function setUser(User $user): void { $this->user = $user; diff --git a/app/Factory/BillFactory.php b/app/Factory/BillFactory.php index c2bf305d3a..cc359db009 100644 --- a/app/Factory/BillFactory.php +++ b/app/Factory/BillFactory.php @@ -30,8 +30,6 @@ use FireflyIII\Repositories\ObjectGroup\CreatesObjectGroups; use FireflyIII\Services\Internal\Support\BillServiceTrait; use FireflyIII\User; use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class BillFactory @@ -44,24 +42,21 @@ class BillFactory private User $user; /** - * @param array $data - * - * @return Bill|null * @throws FireflyException - * @throws JsonException */ public function create(array $data): ?Bill { - Log::debug(sprintf('Now in %s', __METHOD__), $data); - $factory = app(TransactionCurrencyFactory::class); - $currency = $factory->find((int)($data['currency_id'] ?? null), (string)($data['currency_code'] ?? null)) ?? - app('amount')->getDefaultCurrencyByUser($this->user); + app('log')->debug(sprintf('Now in %s', __METHOD__), $data); + $factory = app(TransactionCurrencyFactory::class); + $currency = $factory->find((int)($data['currency_id'] ?? null), (string)($data['currency_code'] ?? null)) ?? + app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); try { $skip = array_key_exists('skip', $data) ? $data['skip'] : 0; $active = array_key_exists('active', $data) ? $data['active'] : 0; + /** @var Bill $bill */ - $bill = Bill::create( + $bill = Bill::create( [ 'name' => $data['name'], 'match' => 'MIGRATED_TO_RULES', @@ -80,8 +75,9 @@ class BillFactory ] ); } catch (QueryException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException('400000: Could not store bill.', 0, $e); } @@ -97,7 +93,7 @@ class BillFactory } } // try also with ID: - $objectGroupId = (int)($data['object_group_id'] ?? 0); + $objectGroupId = (int)($data['object_group_id'] ?? 0); if (0 !== $objectGroupId) { $objectGroup = $this->findObjectGroupById($objectGroupId); if (null !== $objectGroup) { @@ -109,12 +105,6 @@ class BillFactory return $bill; } - /** - * @param int|null $billId - * @param null|string $billName - * - * @return Bill|null - */ public function find(?int $billId, ?string $billName): ?Bill { $billId = (int)$billId; @@ -134,19 +124,11 @@ class BillFactory return $bill; } - /** - * @param string $name - * - * @return Bill|null - */ public function findByName(string $name): ?Bill { return $this->user->bills()->where('name', 'LIKE', sprintf('%%%s%%', $name))->first(); } - /** - * @param User $user - */ public function setUser(User $user): void { $this->user = $user; diff --git a/app/Factory/BudgetFactory.php b/app/Factory/BudgetFactory.php index 728f69c51f..f5b438b714 100644 --- a/app/Factory/BudgetFactory.php +++ b/app/Factory/BudgetFactory.php @@ -33,12 +33,6 @@ class BudgetFactory { private User $user; - /** - * @param int|null $budgetId - * @param null|string $budgetName - * - * @return Budget|null - */ public function find(?int $budgetId, ?string $budgetName): ?Budget { $budgetId = (int)$budgetId; @@ -50,7 +44,7 @@ class BudgetFactory // first by ID: if ($budgetId > 0) { - /** @var Budget $budget */ + /** @var null|Budget $budget */ $budget = $this->user->budgets()->find($budgetId); if (null !== $budget) { return $budget; @@ -67,19 +61,11 @@ class BudgetFactory return null; } - /** - * @param string $name - * - * @return Budget|null - */ public function findByName(string $name): ?Budget { return $this->user->budgets()->where('name', $name)->first(); } - /** - * @param User $user - */ public function setUser(User $user): void { $this->user = $user; diff --git a/app/Factory/CategoryFactory.php b/app/Factory/CategoryFactory.php index e94ad3f50e..b5adc0d7e6 100644 --- a/app/Factory/CategoryFactory.php +++ b/app/Factory/CategoryFactory.php @@ -27,7 +27,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Category; use FireflyIII\User; use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Log; /** * Class CategoryFactory @@ -37,10 +36,6 @@ class CategoryFactory private User $user; /** - * @param int|null $categoryId - * @param null|string $categoryName - * - * @return Category|null * @throws FireflyException */ public function findOrCreate(?int $categoryId, ?string $categoryName): ?Category @@ -48,14 +43,14 @@ class CategoryFactory $categoryId = (int)$categoryId; $categoryName = (string)$categoryName; - Log::debug(sprintf('Going to find category with ID %d and name "%s"', $categoryId, $categoryName)); + app('log')->debug(sprintf('Going to find category with ID %d and name "%s"', $categoryId, $categoryName)); if ('' === $categoryName && 0 === $categoryId) { return null; } // first by ID: if ($categoryId > 0) { - /** @var Category $category */ + /** @var null|Category $category */ $category = $this->user->categories()->find($categoryId); if (null !== $category) { return $category; @@ -67,6 +62,7 @@ class CategoryFactory if (null !== $category) { return $category; } + try { return Category::create( [ @@ -76,8 +72,9 @@ class CategoryFactory ] ); } catch (QueryException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException('400003: Could not store new category.', 0, $e); } } @@ -85,19 +82,11 @@ class CategoryFactory return null; } - /** - * @param string $name - * - * @return Category|null - */ public function findByName(string $name): ?Category { return $this->user->categories()->where('name', $name)->first(); } - /** - * @param User $user - */ public function setUser(User $user): void { $this->user = $user; diff --git a/app/Factory/PiggyBankEventFactory.php b/app/Factory/PiggyBankEventFactory.php index 3489ef96ec..5ae8ed384e 100644 --- a/app/Factory/PiggyBankEventFactory.php +++ b/app/Factory/PiggyBankEventFactory.php @@ -26,7 +26,6 @@ namespace FireflyIII\Factory; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; -use Illuminate\Support\Facades\Log; /** * Create piggy bank events. @@ -35,15 +34,11 @@ use Illuminate\Support\Facades\Log; */ class PiggyBankEventFactory { - /** - * @param TransactionJournal $journal - * @param PiggyBank|null $piggyBank - */ public function create(TransactionJournal $journal, ?PiggyBank $piggyBank): void { - Log::debug(sprintf('Now in PiggyBankEventCreate for a %s', $journal->transactionType->type)); + app('log')->debug(sprintf('Now in PiggyBankEventCreate for a %s', $journal->transactionType->type)); if (null === $piggyBank) { - Log::debug('Piggy bank is null'); + app('log')->debug('Piggy bank is null'); return; } @@ -54,14 +49,14 @@ class PiggyBankEventFactory $repetition = $piggyRepos->getRepetition($piggyBank); if (null === $repetition) { - Log::error(sprintf('No piggy bank repetition on %s!', $journal->date->format('Y-m-d'))); + app('log')->error(sprintf('No piggy bank repetition on %s!', $journal->date->format('Y-m-d'))); return; } - Log::debug('Found repetition'); - $amount = $piggyRepos->getExactAmount($piggyBank, $repetition, $journal); + app('log')->debug('Found repetition'); + $amount = $piggyRepos->getExactAmount($piggyBank, $repetition, $journal); if (0 === bccomp($amount, '0')) { - Log::debug('Amount is zero, will not create event.'); + app('log')->debug('Amount is zero, will not create event.'); return; } diff --git a/app/Factory/PiggyBankFactory.php b/app/Factory/PiggyBankFactory.php index 7d6d85fe2d..505c92d0da 100644 --- a/app/Factory/PiggyBankFactory.php +++ b/app/Factory/PiggyBankFactory.php @@ -33,12 +33,6 @@ class PiggyBankFactory { private User $user; - /** - * @param int|null $piggyBankId - * @param null|string $piggyBankName - * - * @return PiggyBank|null - */ public function find(?int $piggyBankId, ?string $piggyBankName): ?PiggyBank { $piggyBankId = (int)$piggyBankId; @@ -48,7 +42,7 @@ class PiggyBankFactory } // first find by ID: if ($piggyBankId > 0) { - /** @var PiggyBank $piggyBank */ + /** @var null|PiggyBank $piggyBank */ $piggyBank = $this->user->piggyBanks()->find($piggyBankId); if (null !== $piggyBank) { return $piggyBank; @@ -57,7 +51,7 @@ class PiggyBankFactory // then find by name: if ('' !== $piggyBankName) { - /** @var PiggyBank $piggyBank */ + /** @var null|PiggyBank $piggyBank */ $piggyBank = $this->findByName($piggyBankName); if (null !== $piggyBank) { return $piggyBank; @@ -67,19 +61,11 @@ class PiggyBankFactory return null; } - /** - * @param string $name - * - * @return PiggyBank|null - */ public function findByName(string $name): ?PiggyBank { return $this->user->piggyBanks()->where('piggy_banks.name', $name)->first(); } - /** - * @param User $user - */ public function setUser(User $user): void { $this->user = $user; diff --git a/app/Factory/RecurrenceFactory.php b/app/Factory/RecurrenceFactory.php index a826b06a66..fc9769ab0a 100644 --- a/app/Factory/RecurrenceFactory.php +++ b/app/Factory/RecurrenceFactory.php @@ -29,25 +29,21 @@ use FireflyIII\Models\Recurrence; use FireflyIII\Services\Internal\Support\RecurringTransactionTrait; use FireflyIII\Services\Internal\Support\TransactionTypeTrait; use FireflyIII\User; -use Illuminate\Support\Facades\Log; use Illuminate\Support\MessageBag; -use JsonException; /** * Class RecurrenceFactory */ class RecurrenceFactory { - use TransactionTypeTrait; use RecurringTransactionTrait; + use TransactionTypeTrait; private MessageBag $errors; private User $user; /** * Constructor. - * - */ public function __construct() { @@ -55,11 +51,9 @@ class RecurrenceFactory } /** - * @param array $data - * - * @return Recurrence * @throws FireflyException - * @throws JsonException + * + * @SuppressWarnings(PHPMD.NPathComplexity) */ public function create(array $data): Recurrence { @@ -67,8 +61,8 @@ class RecurrenceFactory $type = $this->findTransactionType(ucfirst($data['recurrence']['type'])); } catch (FireflyException $e) { $message = sprintf('Cannot make a recurring transaction of type "%s"', $data['recurrence']['type']); - Log::error($message); - Log::error($e->getTraceAsString()); + app('log')->error($message); + app('log')->error($e->getTraceAsString()); throw new FireflyException($message, 0, $e); } @@ -104,7 +98,7 @@ class RecurrenceFactory } $repeatUntilString = $repeatUntil?->format('Y-m-d'); - $recurrence = new Recurrence( + $recurrence = new Recurrence( [ 'user_id' => $this->user->id, 'user_group_id' => $this->user->user_group_id, @@ -126,32 +120,27 @@ class RecurrenceFactory } $this->createRepetitions($recurrence, $data['repetitions'] ?? []); + try { $this->createTransactions($recurrence, $data['transactions'] ?? []); } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $recurrence->forceDelete(); $message = sprintf('Could not create recurring transaction: %s', $e->getMessage()); $this->errors->add('store', $message); + throw new FireflyException($message, 0, $e); } - return $recurrence; } - /** - * @return MessageBag - */ public function getErrors(): MessageBag { return $this->errors; } - /** - * @param User $user - */ public function setUser(User $user): void { $this->user = $user; diff --git a/app/Factory/TagFactory.php b/app/Factory/TagFactory.php index dcfd9b8741..efe89c3d22 100644 --- a/app/Factory/TagFactory.php +++ b/app/Factory/TagFactory.php @@ -26,7 +26,6 @@ namespace FireflyIII\Factory; use FireflyIII\Models\Location; use FireflyIII\Models\Tag; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Class TagFactory @@ -35,20 +34,15 @@ class TagFactory { private User $user; - /** - * @param string $tag - * - * @return Tag|null - */ public function findOrCreate(string $tag): ?Tag { - $tag = trim($tag); - Log::debug(sprintf('Now in TagFactory::findOrCreate("%s")', $tag)); + $tag = trim($tag); + app('log')->debug(sprintf('Now in TagFactory::findOrCreate("%s")', $tag)); - /** @var Tag|null $dbTag */ - $dbTag = $this->user->tags()->where('tag', $tag)->first(); + /** @var null|Tag $dbTag */ + $dbTag = $this->user->tags()->where('tag', $tag)->first(); if (null !== $dbTag) { - Log::debug(sprintf('Tag exists (#%d), return it.', $dbTag->id)); + app('log')->debug(sprintf('Tag exists (#%d), return it.', $dbTag->id)); return $dbTag; } @@ -63,20 +57,15 @@ class TagFactory ] ); if (null === $newTag) { - Log::error(sprintf('TagFactory::findOrCreate("%s") but tag is unexpectedly NULL!', $tag)); + app('log')->error(sprintf('TagFactory::findOrCreate("%s") but tag is unexpectedly NULL!', $tag)); return null; } - Log::debug(sprintf('Created new tag #%d ("%s")', $newTag->id, $newTag->tag)); + app('log')->debug(sprintf('Created new tag #%d ("%s")', $newTag->id, $newTag->tag)); return $newTag; } - /** - * @param array $data - * - * @return Tag|null - */ public function create(array $data): ?Tag { $zoomLevel = 0 === (int)$data['zoom_level'] ? null : (int)$data['zoom_level']; @@ -93,6 +82,8 @@ class TagFactory 'longitude' => null, 'zoomLevel' => null, ]; + + /** @var null|Tag $tag */ $tag = Tag::create($array); if (null !== $tag && null !== $latitude && null !== $longitude) { // create location object. @@ -107,9 +98,6 @@ class TagFactory return $tag; } - /** - * @param User $user - */ public function setUser(User $user): void { $this->user = $user; diff --git a/app/Factory/TransactionCurrencyFactory.php b/app/Factory/TransactionCurrencyFactory.php index f1d61b7e20..6c03fde0d8 100644 --- a/app/Factory/TransactionCurrencyFactory.php +++ b/app/Factory/TransactionCurrencyFactory.php @@ -26,7 +26,6 @@ namespace FireflyIII\Factory; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Log; /** * Class TransactionCurrencyFactory @@ -34,9 +33,6 @@ use Illuminate\Support\Facades\Log; class TransactionCurrencyFactory { /** - * @param array $data - * - * @return TransactionCurrency * @throws FireflyException */ public function create(array $data): TransactionCurrency @@ -45,10 +41,9 @@ class TransactionCurrencyFactory $data['symbol'] = e($data['symbol']); $data['name'] = e($data['name']); $data['decimal_places'] = (int)$data['decimal_places']; - $data['enabled'] = (bool)$data['enabled']; // if the code already exists (deleted) // force delete it and then create the transaction: - $count = TransactionCurrency::withTrashed()->whereCode($data['code'])->count(); + $count = TransactionCurrency::withTrashed()->whereCode($data['code'])->count(); if (1 === $count) { $old = TransactionCurrency::withTrashed()->whereCode($data['code'])->first(); $old->forceDelete(); @@ -63,32 +58,27 @@ class TransactionCurrencyFactory 'code' => $data['code'], 'symbol' => $data['symbol'], 'decimal_places' => $data['decimal_places'], - 'enabled' => $data['enabled'], + 'enabled' => false, ] ); } catch (QueryException $e) { $result = null; - Log::error(sprintf('Could not create new currency: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + app('log')->error(sprintf('Could not create new currency: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); + throw new FireflyException('400004: Could not store new currency.', 0, $e); } return $result; } - /** - * @param int|null $currencyId - * @param null|string $currencyCode - * - * @return TransactionCurrency|null - */ public function find(?int $currencyId, ?string $currencyCode): ?TransactionCurrency { - $currencyCode = (string)e($currencyCode); + $currencyCode = e($currencyCode); $currencyId = (int)$currencyId; if ('' === $currencyCode && 0 === $currencyId) { - Log::debug('Cannot find anything on empty currency code and empty currency ID!'); + app('log')->debug('Cannot find anything on empty currency code and empty currency ID!'); return null; } diff --git a/app/Factory/TransactionFactory.php b/app/Factory/TransactionFactory.php index cc63aa1fc0..15308c674f 100644 --- a/app/Factory/TransactionFactory.php +++ b/app/Factory/TransactionFactory.php @@ -33,8 +33,6 @@ use FireflyIII\Rules\UniqueIban; use FireflyIII\Services\Internal\Update\AccountUpdateService; use FireflyIII\User; use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Log; -use Validator; /** * Class TransactionFactory @@ -50,8 +48,6 @@ class TransactionFactory /** * Constructor. - * - */ public function __construct() { @@ -62,10 +58,6 @@ class TransactionFactory /** * Create transaction with negative amount (for source accounts). * - * @param string $amount - * @param string|null $foreignAmount - * - * @return Transaction * @throws FireflyException */ public function createNegative(string $amount, ?string $foreignAmount): Transaction @@ -81,10 +73,6 @@ class TransactionFactory } /** - * @param string $amount - * @param string|null $foreignAmount - * - * @return Transaction * @throws FireflyException */ private function create(string $amount, ?string $foreignAmount): Transaction @@ -103,20 +91,22 @@ class TransactionFactory 'foreign_currency_id' => null, 'identifier' => 0, ]; + try { - /** @var Transaction|null $result */ + /** @var null|Transaction $result */ $result = Transaction::create($data); } catch (QueryException $e) { - Log::error(sprintf('Could not create transaction: %s', $e->getMessage()), $data); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error(sprintf('Could not create transaction: %s', $e->getMessage()), $data); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException(sprintf('Query exception when creating transaction: %s', $e->getMessage()), 0, $e); } if (null === $result) { throw new FireflyException('Transaction is NULL.'); } - Log::debug( + app('log')->debug( sprintf( 'Created transaction #%d (%s %s, account %s), part of journal #%d', $result->id, @@ -128,7 +118,9 @@ class TransactionFactory ); // do foreign currency thing: add foreign currency info to $one and $two if necessary. - if (null !== $this->foreignCurrency && null !== $foreignAmount && $this->foreignCurrency->id !== $this->currency->id && '' !== $foreignAmount) { + if (null !== $this->foreignCurrency + && null !== $foreignAmount + && $this->foreignCurrency->id !== $this->currency->id) { $result->foreign_currency_id = $this->foreignCurrency->id; $result->foreign_amount = $foreignAmount; } @@ -141,44 +133,43 @@ class TransactionFactory } /** - * @return void * @throws FireflyException */ private function updateAccountInformation(): void { if (!array_key_exists('iban', $this->accountInformation)) { - Log::debug('No IBAN information in array, will not update.'); + app('log')->debug('No IBAN information in array, will not update.'); + return; } if ('' !== (string)$this->account->iban) { - Log::debug('Account already has IBAN information, will not update.'); + app('log')->debug('Account already has IBAN information, will not update.'); + return; } if ($this->account->iban === $this->accountInformation['iban']) { - Log::debug('Account already has this IBAN, will not update.'); + app('log')->debug('Account already has this IBAN, will not update.'); + return; } // validate info: - $validator = Validator::make(['iban' => $this->accountInformation['iban']], [ + $validator = \Validator::make(['iban' => $this->accountInformation['iban']], [ 'iban' => ['required', new UniqueIban($this->account, $this->account->accountType->type)], ]); if ($validator->fails()) { - Log::debug('Invalid or non-unique IBAN, will not update.'); + app('log')->debug('Invalid or non-unique IBAN, will not update.'); + return; } - Log::debug('Will update account with IBAN information.'); - $service = app(AccountUpdateService::class); + app('log')->debug('Will update account with IBAN information.'); + $service = app(AccountUpdateService::class); $service->update($this->account, ['iban' => $this->accountInformation['iban']]); } /** * Create transaction with positive amount (for destination accounts). * - * @param string $amount - * @param string|null $foreignAmount - * - * @return Transaction * @throws FireflyException */ public function createPositive(string $amount, ?string $foreignAmount): Transaction @@ -193,68 +184,41 @@ class TransactionFactory return $this->create(app('steam')->positive($amount), $foreignAmount); } - /** - * @param Account $account - * - - */ public function setAccount(Account $account): void { $this->account = $account; } - /** - * @param array $accountInformation - */ public function setAccountInformation(array $accountInformation): void { $this->accountInformation = $accountInformation; } - /** - * @param TransactionCurrency $currency - * - - */ public function setCurrency(TransactionCurrency $currency): void { $this->currency = $currency; } /** - * @param TransactionCurrency|null $foreignCurrency |null - * - + * @param null|TransactionCurrency $foreignCurrency |null */ public function setForeignCurrency(?TransactionCurrency $foreignCurrency): void { $this->foreignCurrency = $foreignCurrency; } - /** - * @param TransactionJournal $journal - * - - */ public function setJournal(TransactionJournal $journal): void { $this->journal = $journal; } - /** - * @param bool $reconciled - * - - */ public function setReconciled(bool $reconciled): void { $this->reconciled = $reconciled; } /** - * @param User $user - * - + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function setUser(User $user): void { diff --git a/app/Factory/TransactionGroupFactory.php b/app/Factory/TransactionGroupFactory.php index 9304a24650..d75a170c59 100644 --- a/app/Factory/TransactionGroupFactory.php +++ b/app/Factory/TransactionGroupFactory.php @@ -27,13 +27,9 @@ use FireflyIII\Exceptions\DuplicateTransactionException; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionGroup; use FireflyIII\User; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class TransactionGroupFactory - * - */ class TransactionGroupFactory { @@ -51,26 +47,24 @@ class TransactionGroupFactory /** * Store a new transaction journal. * - * @param array $data - * - * @return TransactionGroup * @throws DuplicateTransactionException * @throws FireflyException - * @throws JsonException */ public function create(array $data): TransactionGroup { - Log::debug('Now in TransactionGroupFactory::create()'); + app('log')->debug('Now in TransactionGroupFactory::create()'); $this->journalFactory->setUser($this->user); $this->journalFactory->setErrorOnHash($data['error_if_duplicate_hash'] ?? false); + try { $collection = $this->journalFactory->create($data); } catch (DuplicateTransactionException $e) { app('log')->warning('GroupFactory::create() caught journalFactory::create() with a duplicate!'); + throw new DuplicateTransactionException($e->getMessage(), 0, $e); } - $title = $data['group_title'] ?? null; - $title = '' === $title ? null : $title; + $title = $data['group_title'] ?? null; + $title = '' === $title ? null : $title; if (null !== $title) { $title = substr($title, 0, 1000); @@ -79,7 +73,7 @@ class TransactionGroupFactory throw new FireflyException('Created zero transaction journals.'); } - $group = new TransactionGroup(); + $group = new TransactionGroup(); $group->user()->associate($this->user); $group->userGroup()->associate($data['user_group'] ?? $this->user->userGroup); $group->title = $title; @@ -92,8 +86,6 @@ class TransactionGroupFactory /** * Set the user. - * - * @param User $user */ public function setUser(User $user): void { diff --git a/app/Factory/TransactionJournalFactory.php b/app/Factory/TransactionJournalFactory.php index 7321c86b81..bbe9ce33b1 100644 --- a/app/Factory/TransactionJournalFactory.php +++ b/app/Factory/TransactionJournalFactory.php @@ -25,11 +25,10 @@ declare(strict_types=1); namespace FireflyIII\Factory; use Carbon\Carbon; -use Exception; use FireflyIII\Exceptions\DuplicateTransactionException; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; -use FireflyIII\Models\Preference; +use FireflyIII\Models\Location; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionJournal; @@ -39,20 +38,20 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Services\Internal\Destroy\JournalDestroyService; use FireflyIII\Services\Internal\Support\JournalServiceTrait; use FireflyIII\Support\NullArrayObject; use FireflyIII\User; use FireflyIII\Validation\AccountValidator; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class TransactionJournalFactory + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class TransactionJournalFactory { @@ -72,7 +71,7 @@ class TransactionJournalFactory /** * Constructor. * - * @throws Exception + * @throws \Exception */ public function __construct() { @@ -93,50 +92,49 @@ class TransactionJournalFactory /** * Store a new (set of) transaction journals. * - * @param array $data - * - * @return Collection * @throws DuplicateTransactionException * @throws FireflyException - * @throws JsonException */ public function create(array $data): Collection { - Log::debug('Now in TransactionJournalFactory::create()'); + app('log')->debug('Now in TransactionJournalFactory::create()'); // convert to special object. - $dataObject = new NullArrayObject($data); + $dataObject = new NullArrayObject($data); - Log::debug('Start of TransactionJournalFactory::create()'); + app('log')->debug('Start of TransactionJournalFactory::create()'); $collection = new Collection(); $transactions = $dataObject['transactions'] ?? []; if (0 === count($transactions)) { - Log::error('There are no transactions in the array, the TransactionJournalFactory cannot continue.'); + app('log')->error('There are no transactions in the array, the TransactionJournalFactory cannot continue.'); return new Collection(); } + try { /** @var array $row */ foreach ($transactions as $index => $row) { - Log::debug(sprintf('Now creating journal %d/%d', $index + 1, count($transactions))); + app('log')->debug(sprintf('Now creating journal %d/%d', $index + 1, count($transactions))); $journal = $this->createJournal(new NullArrayObject($row)); if (null !== $journal) { $collection->push($journal); } if (null === $journal) { - Log::error('The createJournal() method returned NULL. This may indicate an error.'); + app('log')->error('The createJournal() method returned NULL. This may indicate an error.'); } } } catch (DuplicateTransactionException $e) { app('log')->warning('TransactionJournalFactory::create() caught a duplicate journal in createJournal()'); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $this->forceDeleteOnError($collection); + throw new DuplicateTransactionException($e->getMessage(), 0, $e); } catch (FireflyException $e) { app('log')->warning('TransactionJournalFactory::create() caught an exception.'); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $this->forceDeleteOnError($collection); + throw new FireflyException($e->getMessage(), 0, $e); } @@ -144,12 +142,13 @@ class TransactionJournalFactory } /** - * @param NullArrayObject $row + * TODO typeOverrule: the account validator may have another opinion on the transaction type. not sure what to do + * with this. * - * @return TransactionJournal|null * @throws DuplicateTransactionException * @throws FireflyException - * @throws JsonException + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ private function createJournal(NullArrayObject $row): ?TransactionJournal { @@ -158,33 +157,30 @@ class TransactionJournalFactory $this->errorIfDuplicate($row['import_hash_v2']); /** Some basic fields */ - $type = $this->typeRepository->findTransactionType(null, $row['type']); - $carbon = $row['date'] ?? today(config('app.timezone')); - $order = $row['order'] ?? 0; - $currency = $this->currencyRepository->findCurrency((int)$row['currency_id'], $row['currency_code']); - $foreignCurrency = $this->currencyRepository->findCurrencyNull($row['foreign_currency_id'], $row['foreign_currency_code']); - $bill = $this->billRepository->findBill((int)$row['bill_id'], $row['bill_name']); - $billId = TransactionType::WITHDRAWAL === $type->type && null !== $bill ? $bill->id : null; - $description = (string)$row['description']; + $type = $this->typeRepository->findTransactionType(null, $row['type']); + $carbon = $row['date'] ?? today(config('app.timezone')); + $order = $row['order'] ?? 0; + $currency = $this->currencyRepository->findCurrency((int)$row['currency_id'], $row['currency_code']); + $foreignCurrency = $this->currencyRepository->findCurrencyNull($row['foreign_currency_id'], $row['foreign_currency_code']); + $bill = $this->billRepository->findBill((int)$row['bill_id'], $row['bill_name']); + $billId = TransactionType::WITHDRAWAL === $type->type && null !== $bill ? $bill->id : null; + $description = (string)$row['description']; - /** Manipulate basic fields */ + // Manipulate basic fields $carbon->setTimezone(config('app.timezone')); try { // validate source and destination using a new Validator. $this->validateAccounts($row); } catch (FireflyException $e) { - Log::error('Could not validate source or destination.'); - Log::error($e->getMessage()); + app('log')->error('Could not validate source or destination.'); + app('log')->error($e->getMessage()); return null; } - // typeOverrule: the account validator may have another opinion on the transaction type. - // not sure what to do with this. - /** create or get source and destination accounts */ - $sourceInfo = [ + $sourceInfo = [ 'id' => $row['source_id'], 'name' => $row['source_name'], 'iban' => $row['source_iban'], @@ -193,7 +189,7 @@ class TransactionJournalFactory 'currency_id' => $currency->id, ]; - $destInfo = [ + $destInfo = [ 'id' => $row['destination_id'], 'name' => $row['destination_name'], 'iban' => $row['destination_iban'], @@ -201,28 +197,26 @@ class TransactionJournalFactory 'bic' => $row['destination_bic'], 'currency_id' => $currency->id, ]; - Log::debug('Source info:', $sourceInfo); - Log::debug('Destination info:', $destInfo); - Log::debug('Now calling getAccount for the source.'); - $sourceAccount = $this->getAccount($type->type, 'source', $sourceInfo); - Log::debug('Now calling getAccount for the destination.'); - $destinationAccount = $this->getAccount($type->type, 'destination', $destInfo); - Log::debug('Done with getAccount(2x)'); + app('log')->debug('Source info:', $sourceInfo); + app('log')->debug('Destination info:', $destInfo); + $sourceAccount = $this->getAccount($type->type, 'source', $sourceInfo); + $destinationAccount = $this->getAccount($type->type, 'destination', $destInfo); + app('log')->debug('Done with getAccount(2x)'); // this is the moment for a reconciliation sanity check (again). if (TransactionType::RECONCILIATION === $type->type) { [$sourceAccount, $destinationAccount] = $this->reconciliationSanityCheck($sourceAccount, $destinationAccount); } - $currency = $this->getCurrencyByAccount($type->type, $currency, $sourceAccount, $destinationAccount); - $foreignCurrency = $this->compareCurrencies($currency, $foreignCurrency); - $foreignCurrency = $this->getForeignByAccount($type->type, $foreignCurrency, $destinationAccount); - $description = $this->getDescription($description); + $currency = $this->getCurrencyByAccount($type->type, $currency, $sourceAccount, $destinationAccount); + $foreignCurrency = $this->compareCurrencies($currency, $foreignCurrency); + $foreignCurrency = $this->getForeignByAccount($type->type, $foreignCurrency, $destinationAccount); + $description = $this->getDescription($description); - Log::debug(sprintf('Date: %s (%s)', $carbon->toW3cString(), $carbon->getTimezone()->getName())); + app('log')->debug(sprintf('Date: %s (%s)', $carbon->toW3cString(), $carbon->getTimezone()->getName())); /** Create a basic journal. */ - $journal = TransactionJournal::create( + $journal = TransactionJournal::create( [ 'user_id' => $this->user->id, 'user_group_id' => $this->user->user_group_id, @@ -236,10 +230,10 @@ class TransactionJournalFactory 'completed' => 0, ] ); - Log::debug(sprintf('Created new journal #%d: "%s"', $journal->id, $journal->description)); + app('log')->debug(sprintf('Created new journal #%d: "%s"', $journal->id, $journal->description)); /** Create two transactions. */ - $transactionFactory = app(TransactionFactory::class); + $transactionFactory = app(TransactionFactory::class); $transactionFactory->setUser($this->user); $transactionFactory->setJournal($journal); $transactionFactory->setAccount($sourceAccount); @@ -247,19 +241,18 @@ class TransactionJournalFactory $transactionFactory->setAccountInformation($sourceInfo); $transactionFactory->setForeignCurrency($foreignCurrency); $transactionFactory->setReconciled($row['reconciled'] ?? false); + try { $negative = $transactionFactory->createNegative((string)$row['amount'], (string)$row['foreign_amount']); } catch (FireflyException $e) { - Log::error('Exception creating negative transaction.'); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error(sprintf('Exception creating negative transaction: %s', $e->getMessage())); $this->forceDeleteOnError(new Collection([$journal])); + throw new FireflyException($e->getMessage(), 0, $e); } - // and the destination one: /** @var TransactionFactory $transactionFactory */ - $transactionFactory = app(TransactionFactory::class); + $transactionFactory = app(TransactionFactory::class); $transactionFactory->setUser($this->user); $transactionFactory->setJournal($journal); $transactionFactory->setAccount($destinationAccount); @@ -267,58 +260,43 @@ class TransactionJournalFactory $transactionFactory->setCurrency($currency); $transactionFactory->setForeignCurrency($foreignCurrency); $transactionFactory->setReconciled($row['reconciled'] ?? false); + try { $transactionFactory->createPositive((string)$row['amount'], (string)$row['foreign_amount']); } catch (FireflyException $e) { - Log::error('Exception creating positive transaction.'); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); - app('log')->warning('Delete negative transaction.'); + app('log')->error(sprintf('Exception creating positive transaction: %s', $e->getMessage())); $this->forceTrDelete($negative); $this->forceDeleteOnError(new Collection([$journal])); + throw new FireflyException($e->getMessage(), 0, $e); } - // verify that journal has two transactions. Otherwise, delete and cancel. - $journal->completed = true; + $journal->completed = true; $journal->save(); - - /** Link all other data to the journal. */ - - /** Link budget */ $this->storeBudget($journal, $row); - - /** Link category */ $this->storeCategory($journal, $row); - - /** Set notes */ $this->storeNotes($journal, $row['notes']); - - /** Set piggy bank */ $this->storePiggyEvent($journal, $row); - - /** Set tags */ $this->storeTags($journal, $row['tags']); - - /** set all meta fields */ $this->storeMetaFields($journal, $row); + $this->storeLocation($journal, $row); return $journal; } - /** - * @param NullArrayObject $row - * - * @return string - * @throws JsonException - */ private function hashArray(NullArrayObject $row): string { $dataRow = $row->getArrayCopy(); unset($dataRow['import_hash_v2'], $dataRow['original_source']); - $json = json_encode($dataRow, JSON_THROW_ON_ERROR); - $hash = hash('sha256', $json); - Log::debug(sprintf('The hash is: %s', $hash), $dataRow); + + try { + $json = json_encode($dataRow, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + app('log')->error(sprintf('Could not encode dataRow: %s', $e->getMessage())); + $json = microtime(); + } + $hash = hash('sha256', $json); + app('log')->debug(sprintf('The hash is: %s', $hash), $dataRow); return $hash; } @@ -326,68 +304,66 @@ class TransactionJournalFactory /** * If this transaction already exists, throw an error. * - * @param string $hash - * * @throws DuplicateTransactionException - * @throws JsonException */ private function errorIfDuplicate(string $hash): void { - Log::debug(sprintf('In errorIfDuplicate(%s)', $hash)); + app('log')->debug(sprintf('In errorIfDuplicate(%s)', $hash)); if (false === $this->errorOnHash) { return; } - Log::debug('Will verify duplicate!'); - /** @var TransactionJournalMeta|null $result */ + app('log')->debug('Will verify duplicate!'); + + /** @var null|TransactionJournalMeta $result */ $result = TransactionJournalMeta::withTrashed() - ->where('data', json_encode($hash, JSON_THROW_ON_ERROR)) - ->with(['transactionJournal', 'transactionJournal.transactionGroup']) - ->first(); + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id') + ->whereNotNull('transaction_journals.id') + ->where('transaction_journals.user_id', $this->user->id) + ->where('data', json_encode($hash, JSON_THROW_ON_ERROR)) + ->with(['transactionJournal', 'transactionJournal.transactionGroup']) + ->first(['journal_meta.*']) + ; if (null !== $result) { app('log')->warning(sprintf('Found a duplicate in errorIfDuplicate because hash %s is not unique!', $hash)); $journal = $result->transactionJournal()->withTrashed()->first(); $group = $journal?->transactionGroup()->withTrashed()->first(); - $groupId = $group?->id; - if (null === $group) { - $groupId = 0; - } + $groupId = (int)$group?->id; + throw new DuplicateTransactionException(sprintf('Duplicate of transaction #%d.', $groupId)); } } /** - * @param NullArrayObject $data - * * @throws FireflyException */ private function validateAccounts(NullArrayObject $data): void { - Log::debug(sprintf('Now in %s', __METHOD__)); - $transactionType = $data['type'] ?? 'invalid'; + app('log')->debug(sprintf('Now in %s', __METHOD__)); + $transactionType = $data['type'] ?? 'invalid'; $this->accountValidator->setUser($this->user); $this->accountValidator->setTransactionType($transactionType); // validate source account. - $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, + $array = [ + 'id' => null !== $data['source_id'] ? (int)$data['source_id'] : null, + 'name' => null !== $data['source_name'] ? (string)$data['source_name'] : null, + 'iban' => null !== $data['source_iban'] ? (string)$data['source_iban'] : null, + 'number' => null !== $data['source_number'] ? (string)$data['source_number'] : null, ]; - $validSource = $this->accountValidator->validateSource($array); + $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.'); + app('log')->debug('Source seems valid.'); // validate destination account - $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, + $array = [ + 'id' => null !== $data['destination_id'] ? (int)$data['destination_id'] : null, + 'name' => null !== $data['destination_name'] ? (string)$data['destination_name'] : null, + 'iban' => null !== $data['destination_iban'] ? (string)$data['destination_iban'] : null, + 'number' => null !== $data['destination_number'] ? (string)$data['destination_number'] : null, ]; $validDestination = $this->accountValidator->validateDestination($array); @@ -399,8 +375,6 @@ class TransactionJournalFactory /** * Set the user. - * - * @param User $user */ public function setUser(User $user): void { @@ -414,49 +388,40 @@ class TransactionJournalFactory $this->accountRepository->setUser($this->user); } - /** - * @param Account|null $sourceAccount - * @param Account|null $destinationAccount - * - * @return array - */ private function reconciliationSanityCheck(?Account $sourceAccount, ?Account $destinationAccount): array { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); if (null !== $sourceAccount && null !== $destinationAccount) { - Log::debug('Both accounts exist, simply return them.'); + app('log')->debug('Both accounts exist, simply return them.'); + return [$sourceAccount, $destinationAccount]; } - if (null !== $sourceAccount && null === $destinationAccount) { - Log::debug('Destination account is NULL, source account is not.'); + if (null === $destinationAccount) { // @phpstan-ignore-line + app('log')->debug('Destination account is NULL, source account is not.'); $account = $this->accountRepository->getReconciliation($sourceAccount); - Log::debug(sprintf('Will return account #%d ("%s") of type "%s"', $account->id, $account->name, $account->accountType->type)); + app('log')->debug(sprintf('Will return account #%d ("%s") of type "%s"', $account->id, $account->name, $account->accountType->type)); + return [$sourceAccount, $account]; } - if (null === $sourceAccount && null !== $destinationAccount) { - Log::debug('Source account is NULL, destination account is not.'); + if (null === $sourceAccount) { // @phpstan-ignore-line + app('log')->debug('Source account is NULL, destination account is not.'); $account = $this->accountRepository->getReconciliation($destinationAccount); - Log::debug(sprintf('Will return account #%d ("%s") of type "%s"', $account->id, $account->name, $account->accountType->type)); + app('log')->debug(sprintf('Will return account #%d ("%s") of type "%s"', $account->id, $account->name, $account->accountType->type)); + return [$account, $destinationAccount]; } - Log::debug('Unused fallback'); + app('log')->debug('Unused fallback'); // @phpstan-ignore-line + return [$sourceAccount, $destinationAccount]; } /** - * @param string $type - * @param TransactionCurrency|null $currency - * @param Account $source - * @param Account $destination - * - * @return TransactionCurrency * @throws FireflyException - * @throws JsonException */ private function getCurrencyByAccount(string $type, ?TransactionCurrency $currency, Account $source, Account $destination): TransactionCurrency { - Log::debug('Now in getCurrencyByAccount()'); + app('log')->debug('Now in getCurrencyByAccount()'); return match ($type) { default => $this->getCurrency($currency, $source), @@ -465,35 +430,26 @@ class TransactionJournalFactory } /** - * @param TransactionCurrency|null $currency - * @param Account $account - * - * @return TransactionCurrency * @throws FireflyException - * @throws JsonException */ private function getCurrency(?TransactionCurrency $currency, Account $account): TransactionCurrency { - Log::debug('Now in getCurrency()'); - /** @var Preference|null $preference */ + app('log')->debug('Now in getCurrency()'); + + /** @var null|TransactionCurrency $preference */ $preference = $this->accountRepository->getAccountCurrency($account); if (null === $preference && null === $currency) { // return user's default: - return app('amount')->getDefaultCurrencyByUser($this->user); + return app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); } - $result = ($preference ?? $currency) ?? app('amount')->getSystemCurrency(); - Log::debug(sprintf('Currency is now #%d (%s) because of account #%d (%s)', $result->id, $result->code, $account->id, $account->name)); + $result = $preference ?? $currency; + app('log')->debug(sprintf('Currency is now #%d (%s) because of account #%d (%s)', $result->id, $result->code, $account->id, $account->name)); return $result; } /** * Set foreign currency to NULL if it's the same as the normal currency: - * - * @param TransactionCurrency|null $currency - * @param TransactionCurrency|null $foreignCurrency - * - * @return TransactionCurrency|null */ private function compareCurrencies(?TransactionCurrency $currency, ?TransactionCurrency $foreignCurrency): ?TransactionCurrency { @@ -508,13 +464,7 @@ class TransactionJournalFactory } /** - * @param string $type - * @param TransactionCurrency|null $foreignCurrency - * @param Account $destination - * - * @return TransactionCurrency|null * @throws FireflyException - * @throws JsonException */ private function getForeignByAccount(string $type, ?TransactionCurrency $foreignCurrency, Account $destination): ?TransactionCurrency { @@ -525,11 +475,6 @@ class TransactionJournalFactory return $foreignCurrency; } - /** - * @param string $description - * - * @return string - */ private function getDescription(string $description): string { $description = '' === $description ? '(empty description)' : $description; @@ -540,23 +485,19 @@ class TransactionJournalFactory /** * Force the deletion of an entire set of transaction journals and their meta object in case of * an error creating a group. - * - * @param Collection $collection */ private function forceDeleteOnError(Collection $collection): void { - Log::debug(sprintf('forceDeleteOnError on collection size %d item(s)', $collection->count())); + app('log')->debug(sprintf('forceDeleteOnError on collection size %d item(s)', $collection->count())); $service = app(JournalDestroyService::class); + /** @var TransactionJournal $journal */ foreach ($collection as $journal) { - Log::debug(sprintf('forceDeleteOnError on journal #%d', $journal->id)); + app('log')->debug(sprintf('forceDeleteOnError on journal #%d', $journal->id)); $service->destroy($journal); } } - /** - * @param Transaction $transaction - */ private function forceTrDelete(Transaction $transaction): void { $transaction->delete(); @@ -564,29 +505,22 @@ class TransactionJournalFactory /** * Link a piggy bank to this journal. - * - * @param TransactionJournal $journal - * @param NullArrayObject $data */ private function storePiggyEvent(TransactionJournal $journal, NullArrayObject $data): void { - Log::debug('Will now store piggy event.'); + app('log')->debug('Will now store piggy event.'); $piggyBank = $this->piggyRepository->findPiggyBank((int)$data['piggy_bank_id'], $data['piggy_bank_name']); if (null !== $piggyBank) { $this->piggyEventFactory->create($journal, $piggyBank); - Log::debug('Create piggy event.'); + app('log')->debug('Create piggy event.'); return; } - Log::debug('Create no piggy event'); + app('log')->debug('Create no piggy event'); } - /** - * @param TransactionJournal $journal - * @param NullArrayObject $transaction - */ private function storeMetaFields(TransactionJournal $journal, NullArrayObject $transaction): void { foreach ($this->fields as $field) { @@ -594,39 +528,43 @@ class TransactionJournalFactory } } - /** - * @param TransactionJournal $journal - * @param NullArrayObject $data - * @param string $field - */ protected function storeMeta(TransactionJournal $journal, NullArrayObject $data, string $field): void { - $set = [ + $set = [ 'journal' => $journal, 'name' => $field, 'data' => (string)($data[$field] ?? ''), ]; if ($data[$field] instanceof Carbon) { $data[$field]->setTimezone(config('app.timezone')); - Log::debug(sprintf('%s Date: %s (%s)', $field, $data[$field], $data[$field]->timezone->getName())); + app('log')->debug(sprintf('%s Date: %s (%s)', $field, $data[$field], $data[$field]->timezone->getName())); $set['data'] = $data[$field]->format('Y-m-d H:i:s'); } - Log::debug(sprintf('Going to store meta-field "%s", with value "%s".', $set['name'], $set['data'])); + app('log')->debug(sprintf('Going to store meta-field "%s", with value "%s".', $set['name'], $set['data'])); /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); $factory->updateOrCreate($set); } - /** - * @param bool $errorOnHash - */ + private function storeLocation(TransactionJournal $journal, NullArrayObject $data): void + { + if (true === $data['store_location']) { + $location = new Location(); + $location->longitude = $data['longitude']; + $location->latitude = $data['latitude']; + $location->zoom_level = $data['zoom_level']; + $location->locatable()->associate($journal); + $location->save(); + } + } + public function setErrorOnHash(bool $errorOnHash): void { $this->errorOnHash = $errorOnHash; if (true === $errorOnHash) { - Log::info('Will trigger duplication alert for this journal.'); + app('log')->info('Will trigger duplication alert for this journal.'); } } } diff --git a/app/Factory/TransactionJournalMetaFactory.php b/app/Factory/TransactionJournalMetaFactory.php index 41cfe13971..28f3516609 100644 --- a/app/Factory/TransactionJournalMetaFactory.php +++ b/app/Factory/TransactionJournalMetaFactory.php @@ -25,40 +25,35 @@ namespace FireflyIII\Factory; use Carbon\Carbon; use FireflyIII\Models\TransactionJournalMeta; -use Illuminate\Support\Facades\Log; /** * Class TransactionJournalMetaFactory */ class TransactionJournalMetaFactory { - /** - * @param array $data - * - * @return TransactionJournalMeta|null - */ public function updateOrCreate(array $data): ?TransactionJournalMeta { - //Log::debug('In updateOrCreate()'); - $value = $data['data']; - /** @var TransactionJournalMeta|null $entry */ - $entry = $data['journal']->transactionJournalMeta()->where('name', $data['name'])->first(); + // app('log')->debug('In updateOrCreate()'); + $value = $data['data']; + + /** @var null|TransactionJournalMeta $entry */ + $entry = $data['journal']->transactionJournalMeta()->where('name', $data['name'])->first(); if (null === $value && null !== $entry) { - //Log::debug('Value is empty, delete meta value.'); + // app('log')->debug('Value is empty, delete meta value.'); $entry->delete(); return null; } if ($data['data'] instanceof Carbon) { - Log::debug('Is a carbon object.'); + app('log')->debug('Is a carbon object.'); $value = $data['data']->toW3cString(); } if ('' === (string)$value) { - // Log::debug('Is an empty string.'); + // app('log')->debug('Is an empty string.'); // don't store blank strings. if (null !== $entry) { - Log::debug('Will not store empty strings, delete meta value'); + app('log')->debug('Will not store empty strings, delete meta value'); $entry->delete(); } @@ -66,13 +61,13 @@ class TransactionJournalMetaFactory } if (null === $entry) { - //Log::debug('Will create new object.'); - Log::debug(sprintf('Going to create new meta-data entry to store "%s".', $data['name'])); - $entry = new TransactionJournalMeta(); + // app('log')->debug('Will create new object.'); + app('log')->debug(sprintf('Going to create new meta-data entry to store "%s".', $data['name'])); + $entry = new TransactionJournalMeta(); $entry->transactionJournal()->associate($data['journal']); $entry->name = $data['name']; } - Log::debug('Will update value and return.'); + app('log')->debug('Will update value and return.'); $entry->data = $value; $entry->save(); diff --git a/app/Factory/TransactionTypeFactory.php b/app/Factory/TransactionTypeFactory.php index 64294ef1ee..b7bde85c90 100644 --- a/app/Factory/TransactionTypeFactory.php +++ b/app/Factory/TransactionTypeFactory.php @@ -31,11 +31,6 @@ use FireflyIII\Models\TransactionType; */ class TransactionTypeFactory { - /** - * @param string $type - * - * @return TransactionType|null - */ public function find(string $type): ?TransactionType { return TransactionType::whereType(ucfirst($type))->first(); diff --git a/app/Factory/UserGroupFactory.php b/app/Factory/UserGroupFactory.php index f4d3169772..d392b69832 100644 --- a/app/Factory/UserGroupFactory.php +++ b/app/Factory/UserGroupFactory.php @@ -1,6 +1,5 @@ title = $data['title']; + $userGroup = new UserGroup(); + $userGroup->title = $data['title']; $userGroup->save(); // grab the OWNER role: - $role = UserRole::whereTitle(UserRoleEnum::OWNER->value)->first(); + $role = UserRole::whereTitle(UserRoleEnum::OWNER->value)->first(); if (null === $role) { throw new FireflyException('Role "owner" does not exist.'); } @@ -62,5 +58,4 @@ class UserGroupFactory return $userGroup; } - } diff --git a/app/Generator/Chart/Basic/ChartJsGenerator.php b/app/Generator/Chart/Basic/ChartJsGenerator.php index 0662b6200a..3675871dec 100644 --- a/app/Generator/Chart/Basic/ChartJsGenerator.php +++ b/app/Generator/Chart/Basic/ChartJsGenerator.php @@ -34,10 +34,6 @@ class ChartJsGenerator implements GeneratorInterface * Expects data as:. * * key => [value => x, 'currency_symbol' => 'x'] - * - * @param array $data - * - * @return array */ public function multiCurrencyPieChart(array $data): array { @@ -48,16 +44,16 @@ class ChartJsGenerator implements GeneratorInterface 'labels' => [], ]; - $amounts = array_column($data, 'amount'); - $next = next($amounts); - $sortFlag = SORT_ASC; + $amounts = array_column($data, 'amount'); + $next = next($amounts); + $sortFlag = SORT_ASC; if (!is_bool($next) && 1 === bccomp((string)$next, '0')) { $sortFlag = SORT_DESC; } array_multisort($amounts, $sortFlag, $data); unset($next, $sortFlag, $amounts); - $index = 0; + $index = 0; foreach ($data as $key => $valueArray) { // make larger than 0 $chartData['datasets'][0]['data'][] = app('steam')->positive((string)$valueArray['amount']); @@ -99,19 +95,15 @@ class ChartJsGenerator implements GeneratorInterface * ] * * // it's five. - * - * @param array $data - * - * @return array */ public function multiSet(array $data): array { reset($data); - $first = current($data); + $first = current($data); if (!is_array($first)) { return []; } - $labels = is_array($first['entries']) ? array_keys($first['entries']) : []; + $labels = is_array($first['entries']) ? array_keys($first['entries']) : []; $chartData = [ 'count' => count($data), @@ -121,7 +113,7 @@ class ChartJsGenerator implements GeneratorInterface unset($first, $labels); foreach ($data as $set) { - $currentSet = [ + $currentSet = [ 'label' => $set['label'] ?? '(no label)', 'type' => $set['type'] ?? 'line', 'data' => array_values($set['entries']), @@ -148,10 +140,6 @@ class ChartJsGenerator implements GeneratorInterface * Expects data as:. * * key => value - * - * @param array $data - * - * @return array */ public function pieChart(array $data): array { @@ -165,20 +153,20 @@ class ChartJsGenerator implements GeneratorInterface // sort by value, keep keys. // different sort when values are positive and when they're negative. asort($data); - $next = next($data); + $next = next($data); if (!is_bool($next) && 1 === bccomp((string)$next, '0')) { // next is positive, sort other way around. arsort($data); } unset($next); - $index = 0; + $index = 0; foreach ($data as $key => $value) { // make larger than 0 $chartData['datasets'][0]['data'][] = app('steam')->positive((string)$value); $chartData['datasets'][0]['backgroundColor'][] = ChartColour::getColour($index); - $chartData['labels'][] = $key; + $chartData['labels'][] = $key; ++$index; } @@ -189,11 +177,6 @@ class ChartJsGenerator implements GeneratorInterface * Will generate a (ChartJS) compatible array from the given input. Expects this format:. * * 'label-of-entry' => value - * - * @param string $setLabel - * @param array $data - * - * @return array */ public function singleSet(string $setLabel, array $data): array { diff --git a/app/Generator/Chart/Basic/GeneratorInterface.php b/app/Generator/Chart/Basic/GeneratorInterface.php index a43c85bba9..f55193b96c 100644 --- a/app/Generator/Chart/Basic/GeneratorInterface.php +++ b/app/Generator/Chart/Basic/GeneratorInterface.php @@ -28,11 +28,6 @@ namespace FireflyIII\Generator\Chart\Basic; */ interface GeneratorInterface { - /** - * @param array $data - * - * @return array - */ public function multiCurrencyPieChart(array $data): array; /** @@ -62,10 +57,6 @@ interface GeneratorInterface * ] * * // it's five. - * - * @param array $data - * - * @return array */ public function multiSet(array $data): array; @@ -73,10 +64,6 @@ interface GeneratorInterface * Expects data as:. * * key => value - * - * @param array $data - * - * @return array */ public function pieChart(array $data): array; @@ -84,11 +71,6 @@ interface GeneratorInterface * Will generate a (ChartJS) compatible array from the given input. Expects this format:. * * 'label-of-entry' => value - * - * @param string $setLabel - * @param array $data - * - * @return array */ public function singleSet(string $setLabel, array $data): array; } diff --git a/app/Generator/Report/Account/MonthReportGenerator.php b/app/Generator/Report/Account/MonthReportGenerator.php index 8275835d8c..49487a84b5 100644 --- a/app/Generator/Report/Account/MonthReportGenerator.php +++ b/app/Generator/Report/Account/MonthReportGenerator.php @@ -27,13 +27,9 @@ use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Generator\Report\ReportGeneratorInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class MonthReportGenerator. - * - */ class MonthReportGenerator implements ReportGeneratorInterface { @@ -45,7 +41,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Generate the report. * - * @return string * @throws FireflyException */ public function generate(): string @@ -54,15 +49,18 @@ class MonthReportGenerator implements ReportGeneratorInterface $doubleIds = implode(',', $this->expense->pluck('id')->toArray()); $reportType = 'account'; $preferredPeriod = $this->preferredPeriod(); + try { $result = view('reports.double.report', compact('accountIds', 'reportType', 'doubleIds', 'preferredPeriod')) ->with('start', $this->start)->with('end', $this->end) ->with('doubles', $this->expense) - ->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.double.report: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + ->render() + ; + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.double.report: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = sprintf('Could not render report view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } @@ -71,8 +69,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Return the preferred period. - * - * @return string */ protected function preferredPeriod(): string { @@ -81,10 +77,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set accounts. - * - * @param Collection $accounts - * - * @return ReportGeneratorInterface */ public function setAccounts(Collection $accounts): ReportGeneratorInterface { @@ -95,10 +87,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set budgets. - * - * @param Collection $budgets - * - * @return ReportGeneratorInterface */ public function setBudgets(Collection $budgets): ReportGeneratorInterface { @@ -107,10 +95,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set categories. - * - * @param Collection $categories - * - * @return ReportGeneratorInterface */ public function setCategories(Collection $categories): ReportGeneratorInterface { @@ -119,10 +103,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set end date. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setEndDate(Carbon $date): ReportGeneratorInterface { @@ -133,10 +113,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set expense collection. - * - * @param Collection $expense - * - * @return ReportGeneratorInterface */ public function setExpense(Collection $expense): ReportGeneratorInterface { @@ -147,10 +123,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set start date. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setStartDate(Carbon $date): ReportGeneratorInterface { @@ -161,10 +133,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set collection of tags. - * - * @param Collection $tags - * - * @return ReportGeneratorInterface */ public function setTags(Collection $tags): ReportGeneratorInterface { diff --git a/app/Generator/Report/Account/MultiYearReportGenerator.php b/app/Generator/Report/Account/MultiYearReportGenerator.php index 8ac4322348..06619ce900 100644 --- a/app/Generator/Report/Account/MultiYearReportGenerator.php +++ b/app/Generator/Report/Account/MultiYearReportGenerator.php @@ -25,15 +25,11 @@ namespace FireflyIII\Generator\Report\Account; /** * Class MultiYearReportGenerator. - * - */ class MultiYearReportGenerator extends MonthReportGenerator { /** * Returns the preferred period. - * - * @return string */ protected function preferredPeriod(): string { diff --git a/app/Generator/Report/Account/YearReportGenerator.php b/app/Generator/Report/Account/YearReportGenerator.php index 0f73b14d13..e911928c85 100644 --- a/app/Generator/Report/Account/YearReportGenerator.php +++ b/app/Generator/Report/Account/YearReportGenerator.php @@ -25,15 +25,11 @@ namespace FireflyIII\Generator\Report\Account; /** * Class YearReportGenerator. - * - */ class YearReportGenerator extends MonthReportGenerator { /** * Returns the preferred period. - * - * @return string */ protected function preferredPeriod(): string { diff --git a/app/Generator/Report/Audit/MonthReportGenerator.php b/app/Generator/Report/Audit/MonthReportGenerator.php index 30f5c162c9..8e12fbea01 100644 --- a/app/Generator/Report/Audit/MonthReportGenerator.php +++ b/app/Generator/Report/Audit/MonthReportGenerator.php @@ -31,9 +31,6 @@ use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; -use Throwable; /** * Class MonthReportGenerator. @@ -47,15 +44,14 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Generates the report. * - * @return string * @throws FireflyException - * @throws JsonException */ public function generate(): string { - $auditData = []; - $dayBefore = clone $this->start; + $auditData = []; + $dayBefore = clone $this->start; $dayBefore->subDay(); + /** @var Account $account */ foreach ($this->accounts as $account) { // balance the day before: @@ -93,14 +89,17 @@ class MonthReportGenerator implements ReportGeneratorInterface 'payment_date', 'invoice_date', ]; + try { $result = view('reports.audit.report', compact('reportType', 'accountIds', 'auditData', 'hideable', 'defaultShow')) ->with('start', $this->start)->with('end', $this->end)->with('accounts', $this->accounts) - ->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.audit.report: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + ->render() + ; + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.audit.report: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = sprintf('Could not render report view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } @@ -110,12 +109,7 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Get the audit report. * - * @param Account $account - * @param Carbon $date - * - * @return array * @throws FireflyException - * @throws JsonException */ public function getAuditReport(Account $account, Carbon $date): array { @@ -128,15 +122,16 @@ class MonthReportGenerator implements ReportGeneratorInterface $journalRepository->setUser($account->user); /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts(new Collection([$account]))->setRange($this->start, $this->end)->withAccountInformation() - ->withBudgetInformation()->withCategoryInformation()->withBillInformation(); - $journals = $collector->getExtractedJournals(); - $journals = array_reverse($journals, true); - $dayBeforeBalance = app('steam')->balance($account, $date); - $startBalance = $dayBeforeBalance; - $defaultCurrency = app('amount')->getDefaultCurrencyByUser($account->user); - $currency = $accountRepository->getAccountCurrency($account) ?? $defaultCurrency; + ->withBudgetInformation()->withCategoryInformation()->withBillInformation() + ; + $journals = $collector->getExtractedJournals(); + $journals = array_reverse($journals, true); + $dayBeforeBalance = app('steam')->balance($account, $date); + $startBalance = $dayBeforeBalance; + $defaultCurrency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); + $currency = $accountRepository->getAccountCurrency($account) ?? $defaultCurrency; foreach ($journals as $index => $journal) { $journals[$index]['balance_before'] = $startBalance; @@ -154,19 +149,19 @@ class MonthReportGenerator implements ReportGeneratorInterface } } - $newBalance = bcadd($startBalance, $transactionAmount); - $journals[$index]['balance_after'] = $newBalance; - $startBalance = $newBalance; + $newBalance = bcadd($startBalance, $transactionAmount); + $journals[$index]['balance_after'] = $newBalance; + $startBalance = $newBalance; // add meta dates for each journal. - $journals[$index]['interest_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'interest_date'); - $journals[$index]['book_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'book_date'); - $journals[$index]['process_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'process_date'); - $journals[$index]['due_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'due_date'); - $journals[$index]['payment_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'payment_date'); - $journals[$index]['invoice_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'invoice_date'); + $journals[$index]['interest_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'interest_date'); + $journals[$index]['book_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'book_date'); + $journals[$index]['process_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'process_date'); + $journals[$index]['due_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'due_date'); + $journals[$index]['payment_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'payment_date'); + $journals[$index]['invoice_date'] = $journalRepository->getMetaDateById($journal['transaction_journal_id'], 'invoice_date'); } - $locale = app('steam')->getLocale(); + $locale = app('steam')->getLocale(); return [ 'journals' => $journals, @@ -181,10 +176,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Account collection setter. - * - * @param Collection $accounts - * - * @return ReportGeneratorInterface */ public function setAccounts(Collection $accounts): ReportGeneratorInterface { @@ -195,10 +186,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Budget collection setter. - * - * @param Collection $budgets - * - * @return ReportGeneratorInterface */ public function setBudgets(Collection $budgets): ReportGeneratorInterface { @@ -207,10 +194,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Category collection setter. - * - * @param Collection $categories - * - * @return ReportGeneratorInterface */ public function setCategories(Collection $categories): ReportGeneratorInterface { @@ -219,10 +202,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * End date setter. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setEndDate(Carbon $date): ReportGeneratorInterface { @@ -233,10 +212,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Expenses collection setter. - * - * @param Collection $expense - * - * @return ReportGeneratorInterface */ public function setExpense(Collection $expense): ReportGeneratorInterface { @@ -246,10 +221,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Start date collection setter. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setStartDate(Carbon $date): ReportGeneratorInterface { @@ -260,10 +231,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Tags collection setter. - * - * @param Collection $tags - * - * @return ReportGeneratorInterface */ public function setTags(Collection $tags): ReportGeneratorInterface { diff --git a/app/Generator/Report/Audit/MultiYearReportGenerator.php b/app/Generator/Report/Audit/MultiYearReportGenerator.php index 1677320748..2dde9586a0 100644 --- a/app/Generator/Report/Audit/MultiYearReportGenerator.php +++ b/app/Generator/Report/Audit/MultiYearReportGenerator.php @@ -25,9 +25,5 @@ namespace FireflyIII\Generator\Report\Audit; /** * Class MultiYearReportGenerator. - * - */ -class MultiYearReportGenerator extends MonthReportGenerator -{ -} +class MultiYearReportGenerator extends MonthReportGenerator {} diff --git a/app/Generator/Report/Audit/YearReportGenerator.php b/app/Generator/Report/Audit/YearReportGenerator.php index df7144b367..6357823820 100644 --- a/app/Generator/Report/Audit/YearReportGenerator.php +++ b/app/Generator/Report/Audit/YearReportGenerator.php @@ -25,9 +25,5 @@ namespace FireflyIII\Generator\Report\Audit; /** * Class YearReportGenerator. - * - */ -class YearReportGenerator extends MonthReportGenerator -{ -} +class YearReportGenerator extends MonthReportGenerator {} diff --git a/app/Generator/Report/Budget/MonthReportGenerator.php b/app/Generator/Report/Budget/MonthReportGenerator.php index 477c2e1f68..7ec1cad458 100644 --- a/app/Generator/Report/Budget/MonthReportGenerator.php +++ b/app/Generator/Report/Budget/MonthReportGenerator.php @@ -29,14 +29,10 @@ use FireflyIII\Generator\Report\ReportGeneratorInterface; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\TransactionType; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class MonthReportGenerator. * TODO include info about tags. - * - */ class MonthReportGenerator implements ReportGeneratorInterface { @@ -57,13 +53,13 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Generates the report. * - * @return string * @throws FireflyException */ public function generate(): string { $accountIds = implode(',', $this->accounts->pluck('id')->toArray()); $budgetIds = implode(',', $this->budgets->pluck('id')->toArray()); + try { $result = view( 'reports.budget.month', @@ -72,11 +68,13 @@ class MonthReportGenerator implements ReportGeneratorInterface ->with('start', $this->start)->with('end', $this->end) ->with('budgets', $this->budgets) ->with('accounts', $this->accounts) - ->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.account.report: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + ->render() + ; + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.account.report: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = sprintf('Could not render report view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } @@ -85,10 +83,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Unused category setter. - * - * @param Collection $categories - * - * @return ReportGeneratorInterface */ public function setCategories(Collection $categories): ReportGeneratorInterface { @@ -97,10 +91,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the end date of the report. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setEndDate(Carbon $date): ReportGeneratorInterface { @@ -111,10 +101,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Unused expense setter. - * - * @param Collection $expense - * - * @return ReportGeneratorInterface */ public function setExpense(Collection $expense): ReportGeneratorInterface { @@ -123,10 +109,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the start date of the report. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setStartDate(Carbon $date): ReportGeneratorInterface { @@ -137,10 +119,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Unused tags setter. - * - * @param Collection $tags - * - * @return ReportGeneratorInterface */ public function setTags(Collection $tags): ReportGeneratorInterface { @@ -149,24 +127,23 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Get the expenses. - * - * @return array */ protected function getExpenses(): array { if (0 !== count($this->expenses)) { - Log::debug('Return previous set of expenses.'); + app('log')->debug('Return previous set of expenses.'); return $this->expenses; } /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts($this->accounts)->setRange($this->start, $this->end) - ->setTypes([TransactionType::WITHDRAWAL]) - ->withAccountInformation() - ->withBudgetInformation() - ->setBudgets($this->budgets); + ->setTypes([TransactionType::WITHDRAWAL]) + ->withAccountInformation() + ->withBudgetInformation() + ->setBudgets($this->budgets) + ; $journals = $collector->getExtractedJournals(); $this->expenses = $journals; @@ -176,10 +153,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the involved budgets. - * - * @param Collection $budgets - * - * @return ReportGeneratorInterface */ public function setBudgets(Collection $budgets): ReportGeneratorInterface { @@ -190,10 +163,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the involved accounts. - * - * @param Collection $accounts - * - * @return ReportGeneratorInterface */ public function setAccounts(Collection $accounts): ReportGeneratorInterface { diff --git a/app/Generator/Report/Budget/MultiYearReportGenerator.php b/app/Generator/Report/Budget/MultiYearReportGenerator.php index a470db9a99..77a8579374 100644 --- a/app/Generator/Report/Budget/MultiYearReportGenerator.php +++ b/app/Generator/Report/Budget/MultiYearReportGenerator.php @@ -25,9 +25,5 @@ namespace FireflyIII\Generator\Report\Budget; /** * Class MultiYearReportGenerator. - * - */ -class MultiYearReportGenerator extends MonthReportGenerator -{ -} +class MultiYearReportGenerator extends MonthReportGenerator {} diff --git a/app/Generator/Report/Budget/YearReportGenerator.php b/app/Generator/Report/Budget/YearReportGenerator.php index 8b0cd930b7..4251a99e49 100644 --- a/app/Generator/Report/Budget/YearReportGenerator.php +++ b/app/Generator/Report/Budget/YearReportGenerator.php @@ -25,9 +25,5 @@ namespace FireflyIII\Generator\Report\Budget; /** * Class YearReportGenerator. - * - */ -class YearReportGenerator extends MonthReportGenerator -{ -} +class YearReportGenerator extends MonthReportGenerator {} diff --git a/app/Generator/Report/Category/MonthReportGenerator.php b/app/Generator/Report/Category/MonthReportGenerator.php index b7ed3cd4e5..b840358ccf 100644 --- a/app/Generator/Report/Category/MonthReportGenerator.php +++ b/app/Generator/Report/Category/MonthReportGenerator.php @@ -29,14 +29,10 @@ use FireflyIII\Generator\Report\ReportGeneratorInterface; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\TransactionType; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class MonthReportGenerator. * TODO include info about tags - * - */ class MonthReportGenerator implements ReportGeneratorInterface { @@ -59,7 +55,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Generates the report. * - * @return string * @throws FireflyException */ public function generate(): string @@ -74,21 +69,19 @@ class MonthReportGenerator implements ReportGeneratorInterface ->with('start', $this->start)->with('end', $this->end) ->with('categories', $this->categories) ->with('accounts', $this->accounts) - ->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.category.month: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + ->render() + ; + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.category.month: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = sprintf('Could not render report view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } } /** * Empty budget setter. - * - * @param Collection $budgets - * - * @return ReportGeneratorInterface */ public function setBudgets(Collection $budgets): ReportGeneratorInterface { @@ -97,10 +90,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the end date for this report. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setEndDate(Carbon $date): ReportGeneratorInterface { @@ -111,10 +100,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the expenses involved in this report. - * - * @param Collection $expense - * - * @return ReportGeneratorInterface */ public function setExpense(Collection $expense): ReportGeneratorInterface { @@ -123,10 +108,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the start date for this report. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setStartDate(Carbon $date): ReportGeneratorInterface { @@ -137,10 +118,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Unused tag setter. - * - * @param Collection $tags - * - * @return ReportGeneratorInterface */ public function setTags(Collection $tags): ReportGeneratorInterface { @@ -149,22 +126,21 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Get the expenses for this report. - * - * @return array */ protected function getExpenses(): array { if (0 !== count($this->expenses)) { - Log::debug('Return previous set of expenses.'); + app('log')->debug('Return previous set of expenses.'); return $this->expenses; } /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts($this->accounts)->setRange($this->start, $this->end) - ->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) - ->setCategories($this->categories)->withAccountInformation(); + ->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) + ->setCategories($this->categories)->withAccountInformation() + ; $transactions = $collector->getExtractedJournals(); $this->expenses = $transactions; @@ -174,10 +150,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the categories involved in this report. - * - * @param Collection $categories - * - * @return ReportGeneratorInterface */ public function setCategories(Collection $categories): ReportGeneratorInterface { @@ -188,10 +160,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the involved accounts. - * - * @param Collection $accounts - * - * @return ReportGeneratorInterface */ public function setAccounts(Collection $accounts): ReportGeneratorInterface { @@ -202,8 +170,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Get the income for this report. - * - * @return array */ protected function getIncome(): array { @@ -212,11 +178,12 @@ class MonthReportGenerator implements ReportGeneratorInterface } /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts($this->accounts)->setRange($this->start, $this->end) - ->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER]) - ->setCategories($this->categories)->withAccountInformation(); + ->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER]) + ->setCategories($this->categories)->withAccountInformation() + ; $transactions = $collector->getExtractedJournals(); $this->income = $transactions; diff --git a/app/Generator/Report/Category/MultiYearReportGenerator.php b/app/Generator/Report/Category/MultiYearReportGenerator.php index f8525587c0..c7fb20662a 100644 --- a/app/Generator/Report/Category/MultiYearReportGenerator.php +++ b/app/Generator/Report/Category/MultiYearReportGenerator.php @@ -25,9 +25,5 @@ namespace FireflyIII\Generator\Report\Category; /** * Class MultiYearReportGenerator. - * - */ -class MultiYearReportGenerator extends MonthReportGenerator -{ -} +class MultiYearReportGenerator extends MonthReportGenerator {} diff --git a/app/Generator/Report/Category/YearReportGenerator.php b/app/Generator/Report/Category/YearReportGenerator.php index 982ef37fe5..49f3d2f84f 100644 --- a/app/Generator/Report/Category/YearReportGenerator.php +++ b/app/Generator/Report/Category/YearReportGenerator.php @@ -25,9 +25,5 @@ namespace FireflyIII\Generator\Report\Category; /** * Class YearReportGenerator. - * - */ -class YearReportGenerator extends MonthReportGenerator -{ -} +class YearReportGenerator extends MonthReportGenerator {} diff --git a/app/Generator/Report/ReportGeneratorFactory.php b/app/Generator/Report/ReportGeneratorFactory.php index a577f8f076..fcb97f979f 100644 --- a/app/Generator/Report/ReportGeneratorFactory.php +++ b/app/Generator/Report/ReportGeneratorFactory.php @@ -28,20 +28,12 @@ use FireflyIII\Exceptions\FireflyException; /** * Class ReportGeneratorFactory. - * - */ class ReportGeneratorFactory { /** * Static report generator class. * - * @param string $type - * @param Carbon $start - * @param Carbon $end - * - * @return ReportGeneratorInterface - * * @throws FireflyException */ public static function reportGenerator(string $type, Carbon $start, Carbon $end): ReportGeneratorInterface @@ -57,7 +49,7 @@ class ReportGeneratorFactory $period = 'MultiYear'; } - $class = sprintf('FireflyIII\Generator\Report\%s\%sReportGenerator', $type, $period); + $class = sprintf('FireflyIII\Generator\Report\%s\%sReportGenerator', $type, $period); if (class_exists($class)) { /** @var ReportGeneratorInterface $obj */ $obj = app($class); @@ -66,6 +58,7 @@ class ReportGeneratorFactory return $obj; } + throw new FireflyException(sprintf('Cannot generate report. There is no "%s"-report for period "%s".', $type, $period)); } } diff --git a/app/Generator/Report/ReportGeneratorInterface.php b/app/Generator/Report/ReportGeneratorInterface.php index c56c71afbd..67a0991e4e 100644 --- a/app/Generator/Report/ReportGeneratorInterface.php +++ b/app/Generator/Report/ReportGeneratorInterface.php @@ -33,71 +33,41 @@ interface ReportGeneratorInterface { /** * Generate the report. - * - * @return string */ public function generate(): string; /** * Set the involved accounts. - * - * @param Collection $accounts - * - * @return ReportGeneratorInterface */ - public function setAccounts(Collection $accounts): ReportGeneratorInterface; + public function setAccounts(Collection $accounts): self; /** * Set the involved budgets. - * - * @param Collection $budgets - * - * @return ReportGeneratorInterface */ - public function setBudgets(Collection $budgets): ReportGeneratorInterface; + public function setBudgets(Collection $budgets): self; /** * Set the involved categories. - * - * @param Collection $categories - * - * @return ReportGeneratorInterface */ - public function setCategories(Collection $categories): ReportGeneratorInterface; + public function setCategories(Collection $categories): self; /** * Set the end date. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ - public function setEndDate(Carbon $date): ReportGeneratorInterface; + public function setEndDate(Carbon $date): self; /** * Set the expense accounts. - * - * @param Collection $expense - * - * @return ReportGeneratorInterface */ - public function setExpense(Collection $expense): ReportGeneratorInterface; + public function setExpense(Collection $expense): self; /** * Set the start date. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ - public function setStartDate(Carbon $date): ReportGeneratorInterface; + public function setStartDate(Carbon $date): self; /** * Set the tags. - * - * @param Collection $tags - * - * @return ReportGeneratorInterface */ - public function setTags(Collection $tags): ReportGeneratorInterface; + public function setTags(Collection $tags): self; } diff --git a/app/Generator/Report/Standard/MonthReportGenerator.php b/app/Generator/Report/Standard/MonthReportGenerator.php index a79956d9b1..fe70dc3041 100644 --- a/app/Generator/Report/Standard/MonthReportGenerator.php +++ b/app/Generator/Report/Standard/MonthReportGenerator.php @@ -27,27 +27,24 @@ use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Generator\Report\ReportGeneratorInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class MonthReportGenerator. - * - */ class MonthReportGenerator implements ReportGeneratorInterface { /** @var Collection The accounts involved in the report. */ private $accounts; + /** @var Carbon The end date. */ private $end; + /** @var Carbon The start date. */ private $start; /** * Generates the report. * - * @return string * @throws FireflyException */ public function generate(): string @@ -57,20 +54,17 @@ class MonthReportGenerator implements ReportGeneratorInterface try { return view('reports.default.month', compact('accountIds', 'reportType'))->with('start', $this->start)->with('end', $this->end)->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.default.month: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.default.month: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = 'Could not render report view.'; + throw new FireflyException($result, 0, $e); } } /** * Sets the accounts involved in the report. - * - * @param Collection $accounts - * - * @return ReportGeneratorInterface */ public function setAccounts(Collection $accounts): ReportGeneratorInterface { @@ -81,10 +75,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Unused budget setter. - * - * @param Collection $budgets - * - * @return ReportGeneratorInterface */ public function setBudgets(Collection $budgets): ReportGeneratorInterface { @@ -93,10 +83,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Unused category setter. - * - * @param Collection $categories - * - * @return ReportGeneratorInterface */ public function setCategories(Collection $categories): ReportGeneratorInterface { @@ -105,10 +91,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the end date of the report. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setEndDate(Carbon $date): ReportGeneratorInterface { @@ -119,10 +101,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the expenses used in this report. - * - * @param Collection $expense - * - * @return ReportGeneratorInterface */ public function setExpense(Collection $expense): ReportGeneratorInterface { @@ -131,10 +109,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the start date of this report. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setStartDate(Carbon $date): ReportGeneratorInterface { @@ -145,10 +119,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the tags used in this report. - * - * @param Collection $tags - * - * @return ReportGeneratorInterface */ public function setTags(Collection $tags): ReportGeneratorInterface { diff --git a/app/Generator/Report/Standard/MultiYearReportGenerator.php b/app/Generator/Report/Standard/MultiYearReportGenerator.php index 9647dfd555..f40dcfe8eb 100644 --- a/app/Generator/Report/Standard/MultiYearReportGenerator.php +++ b/app/Generator/Report/Standard/MultiYearReportGenerator.php @@ -27,27 +27,24 @@ use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Generator\Report\ReportGeneratorInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class MonthReportGenerator. - * - */ class MultiYearReportGenerator implements ReportGeneratorInterface { /** @var Collection The accounts involved. */ private $accounts; + /** @var Carbon The end date. */ private $end; + /** @var Carbon The start date. */ private $start; /** * Generates the report. * - * @return string * @throws FireflyException */ public function generate(): string @@ -61,20 +58,17 @@ class MultiYearReportGenerator implements ReportGeneratorInterface 'reports.default.multi-year', compact('accountIds', 'reportType') )->with('start', $this->start)->with('end', $this->end)->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.default.multi-year: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.default.multi-year: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = sprintf('Could not render report view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } } /** * Sets the accounts used in the report. - * - * @param Collection $accounts - * - * @return ReportGeneratorInterface */ public function setAccounts(Collection $accounts): ReportGeneratorInterface { @@ -85,10 +79,6 @@ class MultiYearReportGenerator implements ReportGeneratorInterface /** * Sets the budgets used in the report. - * - * @param Collection $budgets - * - * @return ReportGeneratorInterface */ public function setBudgets(Collection $budgets): ReportGeneratorInterface { @@ -97,10 +87,6 @@ class MultiYearReportGenerator implements ReportGeneratorInterface /** * Sets the categories used in the report. - * - * @param Collection $categories - * - * @return ReportGeneratorInterface */ public function setCategories(Collection $categories): ReportGeneratorInterface { @@ -109,10 +95,6 @@ class MultiYearReportGenerator implements ReportGeneratorInterface /** * Sets the end date used in the report. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setEndDate(Carbon $date): ReportGeneratorInterface { @@ -123,10 +105,6 @@ class MultiYearReportGenerator implements ReportGeneratorInterface /** * Unused setter for expenses. - * - * @param Collection $expense - * - * @return ReportGeneratorInterface */ public function setExpense(Collection $expense): ReportGeneratorInterface { @@ -135,10 +113,6 @@ class MultiYearReportGenerator implements ReportGeneratorInterface /** * Set the start date of the report. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setStartDate(Carbon $date): ReportGeneratorInterface { @@ -149,10 +123,6 @@ class MultiYearReportGenerator implements ReportGeneratorInterface /** * Set the tags for the report. - * - * @param Collection $tags - * - * @return ReportGeneratorInterface */ public function setTags(Collection $tags): ReportGeneratorInterface { diff --git a/app/Generator/Report/Standard/YearReportGenerator.php b/app/Generator/Report/Standard/YearReportGenerator.php index 8cd9c768eb..74b3b57ea9 100644 --- a/app/Generator/Report/Standard/YearReportGenerator.php +++ b/app/Generator/Report/Standard/YearReportGenerator.php @@ -27,27 +27,24 @@ use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Generator\Report\ReportGeneratorInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class MonthReportGenerator. - * - */ class YearReportGenerator implements ReportGeneratorInterface { /** @var Collection The accounts involved. */ private $accounts; + /** @var Carbon The end date. */ private $end; + /** @var Carbon The start date. */ private $start; /** * Generates the report. * - * @return string * @throws FireflyException */ public function generate(): string @@ -61,10 +58,11 @@ class YearReportGenerator implements ReportGeneratorInterface 'reports.default.year', compact('accountIds', 'reportType') )->with('start', $this->start)->with('end', $this->end)->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.account.report: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.account.report: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = 'Could not render report view.'; + throw new FireflyException($result, 0, $e); } @@ -73,10 +71,6 @@ class YearReportGenerator implements ReportGeneratorInterface /** * Set the accounts. - * - * @param Collection $accounts - * - * @return ReportGeneratorInterface */ public function setAccounts(Collection $accounts): ReportGeneratorInterface { @@ -87,10 +81,6 @@ class YearReportGenerator implements ReportGeneratorInterface /** * Unused budget setter. - * - * @param Collection $budgets - * - * @return ReportGeneratorInterface */ public function setBudgets(Collection $budgets): ReportGeneratorInterface { @@ -99,10 +89,6 @@ class YearReportGenerator implements ReportGeneratorInterface /** * Unused categories setter. - * - * @param Collection $categories - * - * @return ReportGeneratorInterface */ public function setCategories(Collection $categories): ReportGeneratorInterface { @@ -111,10 +97,6 @@ class YearReportGenerator implements ReportGeneratorInterface /** * Set the end date. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setEndDate(Carbon $date): ReportGeneratorInterface { @@ -125,10 +107,6 @@ class YearReportGenerator implements ReportGeneratorInterface /** * Set the expenses used. - * - * @param Collection $expense - * - * @return ReportGeneratorInterface */ public function setExpense(Collection $expense): ReportGeneratorInterface { @@ -137,10 +115,6 @@ class YearReportGenerator implements ReportGeneratorInterface /** * Set the start date. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setStartDate(Carbon $date): ReportGeneratorInterface { @@ -151,10 +125,6 @@ class YearReportGenerator implements ReportGeneratorInterface /** * Unused tags setter. - * - * @param Collection $tags - * - * @return ReportGeneratorInterface */ public function setTags(Collection $tags): ReportGeneratorInterface { diff --git a/app/Generator/Report/Tag/MonthReportGenerator.php b/app/Generator/Report/Tag/MonthReportGenerator.php index 29ffb4ce91..23149855f0 100644 --- a/app/Generator/Report/Tag/MonthReportGenerator.php +++ b/app/Generator/Report/Tag/MonthReportGenerator.php @@ -27,13 +27,9 @@ use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Generator\Report\ReportGeneratorInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class MonthReportGenerator. - * - */ class MonthReportGenerator implements ReportGeneratorInterface { @@ -54,7 +50,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Generate the report. * - * @return string * @throws FireflyException */ public function generate(): string @@ -69,10 +64,11 @@ class MonthReportGenerator implements ReportGeneratorInterface 'reports.tag.month', compact('accountIds', 'reportType', 'tagIds') )->with('start', $this->start)->with('end', $this->end)->with('tags', $this->tags)->with('accounts', $this->accounts)->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.tag.month: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.tag.month: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = sprintf('Could not render report view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } @@ -81,10 +77,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the accounts. - * - * @param Collection $accounts - * - * @return ReportGeneratorInterface */ public function setAccounts(Collection $accounts): ReportGeneratorInterface { @@ -95,10 +87,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Unused budget setter. - * - * @param Collection $budgets - * - * @return ReportGeneratorInterface */ public function setBudgets(Collection $budgets): ReportGeneratorInterface { @@ -107,10 +95,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Unused category setter. - * - * @param Collection $categories - * - * @return ReportGeneratorInterface */ public function setCategories(Collection $categories): ReportGeneratorInterface { @@ -119,10 +103,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the end date of the report. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setEndDate(Carbon $date): ReportGeneratorInterface { @@ -133,10 +113,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the expenses in this report. - * - * @param Collection $expense - * - * @return ReportGeneratorInterface */ public function setExpense(Collection $expense): ReportGeneratorInterface { @@ -145,10 +121,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the start date. - * - * @param Carbon $date - * - * @return ReportGeneratorInterface */ public function setStartDate(Carbon $date): ReportGeneratorInterface { @@ -159,10 +131,6 @@ class MonthReportGenerator implements ReportGeneratorInterface /** * Set the tags used in this report. - * - * @param Collection $tags - * - * @return ReportGeneratorInterface */ public function setTags(Collection $tags): ReportGeneratorInterface { diff --git a/app/Generator/Report/Tag/MultiYearReportGenerator.php b/app/Generator/Report/Tag/MultiYearReportGenerator.php index 6830d8aea2..f4f4b3eca3 100644 --- a/app/Generator/Report/Tag/MultiYearReportGenerator.php +++ b/app/Generator/Report/Tag/MultiYearReportGenerator.php @@ -25,9 +25,5 @@ namespace FireflyIII\Generator\Report\Tag; /** * Class MultiYearReportGenerator. - * - */ -class MultiYearReportGenerator extends MonthReportGenerator -{ -} +class MultiYearReportGenerator extends MonthReportGenerator {} diff --git a/app/Generator/Report/Tag/YearReportGenerator.php b/app/Generator/Report/Tag/YearReportGenerator.php index 0dd2aaa36f..91b94cdd7d 100644 --- a/app/Generator/Report/Tag/YearReportGenerator.php +++ b/app/Generator/Report/Tag/YearReportGenerator.php @@ -25,9 +25,5 @@ namespace FireflyIII\Generator\Report\Tag; /** * Class YearReportGenerator. - * - */ -class YearReportGenerator extends MonthReportGenerator -{ -} +class YearReportGenerator extends MonthReportGenerator {} diff --git a/app/Generator/Webhook/MessageGeneratorInterface.php b/app/Generator/Webhook/MessageGeneratorInterface.php index 1437122341..fbe441bad4 100644 --- a/app/Generator/Webhook/MessageGeneratorInterface.php +++ b/app/Generator/Webhook/MessageGeneratorInterface.php @@ -31,35 +31,15 @@ use Illuminate\Support\Collection; */ interface MessageGeneratorInterface { - /** - * - */ public function generateMessages(): void; - /** - * @return int - */ public function getVersion(): int; - /** - * @param Collection $objects - */ public function setObjects(Collection $objects): void; - /** - * @param int $trigger - */ public function setTrigger(int $trigger): void; - /** - * @param User $user - */ public function setUser(User $user): void; - /** - * @param Collection $webhooks - * - * @return void - */ public function setWebhooks(Collection $webhooks): void; } diff --git a/app/Generator/Webhook/StandardMessageGenerator.php b/app/Generator/Webhook/StandardMessageGenerator.php index f71c0a8ecb..0a8302710a 100644 --- a/app/Generator/Webhook/StandardMessageGenerator.php +++ b/app/Generator/Webhook/StandardMessageGenerator.php @@ -37,8 +37,6 @@ use FireflyIII\Transformers\TransactionGroupTransformer; use FireflyIII\User; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; use Ramsey\Uuid\Uuid; use Symfony\Component\HttpFoundation\ParameterBag; @@ -53,63 +51,75 @@ class StandardMessageGenerator implements MessageGeneratorInterface private int $version = 0; private Collection $webhooks; - /** - * - */ public function __construct() { $this->objects = new Collection(); $this->webhooks = new Collection(); } - /** - * - */ public function generateMessages(): void { - Log::debug(__METHOD__); + app('log')->debug(__METHOD__); // get the webhooks: if (0 === $this->webhooks->count()) { $this->webhooks = $this->getWebhooks(); } // do some debugging - Log::debug( + app('log')->debug( sprintf('StandardMessageGenerator will generate messages for %d object(s) and %d webhook(s).', $this->objects->count(), $this->webhooks->count()) ); $this->run(); } - /** - * @return Collection - */ + public function getVersion(): int + { + return $this->version; + } + + public function setObjects(Collection $objects): void + { + $this->objects = $objects; + } + + public function setTrigger(int $trigger): void + { + $this->trigger = $trigger; + } + + public function setUser(User $user): void + { + $this->user = $user; + } + + public function setWebhooks(Collection $webhooks): void + { + $this->webhooks = $webhooks; + } + private function getWebhooks(): Collection { return $this->user->webhooks()->where('active', true)->where('trigger', $this->trigger)->get(['webhooks.*']); } - /** - * - */ private function run(): void { - Log::debug('Now in StandardMessageGenerator::run'); + app('log')->debug('Now in StandardMessageGenerator::run'); + /** @var Webhook $webhook */ foreach ($this->webhooks as $webhook) { $this->runWebhook($webhook); } - Log::debug('Done with StandardMessageGenerator::run'); + app('log')->debug('Done with StandardMessageGenerator::run'); } /** - * @param Webhook $webhook - * * @throws FireflyException - * @throws JsonException */ private function runWebhook(Webhook $webhook): void { - Log::debug(sprintf('Now in runWebhook(#%d)', $webhook->id)); + app('log')->debug(sprintf('Now in runWebhook(#%d)', $webhook->id)); + /** @var Model $object */ foreach ($this->objects as $object) { $this->generateMessage($webhook, $object); @@ -117,17 +127,13 @@ class StandardMessageGenerator implements MessageGeneratorInterface } /** - * @param Webhook $webhook - * @param Model $model - * * @throws FireflyException - * @throws JsonException */ private function generateMessage(Webhook $webhook, Model $model): void { - $class = get_class($model); + $class = get_class($model); // Line is ignored because all of Firefly III's Models have an id property. - Log::debug(sprintf('Now in generateMessage(#%d, %s#%d)', $webhook->id, $class, $model->id)); // @phpstan-ignore-line + app('log')->debug(sprintf('Now in generateMessage(#%d, %s#%d)', $webhook->id, $class, $model->id)); $uuid = Uuid::uuid4(); $basicMessage = [ @@ -144,45 +150,55 @@ class StandardMessageGenerator implements MessageGeneratorInterface switch ($class) { default: // Line is ignored because all of Firefly III's Models have an id property. - Log::error( + app('log')->error( sprintf('Webhook #%d was given %s#%d to deal with but can\'t extract user ID from it.', $webhook->id, $class, $model->id) - ); // @phpstan-ignore-line + ); return; + case TransactionGroup::class: - /** @var TransactionGroup $model */ + // @var TransactionGroup $model $basicMessage['user_id'] = $model->user->id; + break; } // then depends on the response what to put in the message: switch ($webhook->response) { default: - Log::error( + app('log')->error( sprintf('The response code for webhook #%d is "%d" and the message generator cant handle it. Soft fail.', $webhook->id, $webhook->response) ); return; + case WebhookResponse::NONE->value: $basicMessage['content'] = []; + break; + case WebhookResponse::TRANSACTIONS->value: - $transformer = new TransactionGroupTransformer(); + /** @var TransactionGroup $model */ + $transformer = new TransactionGroupTransformer(); + try { $basicMessage['content'] = $transformer->transformObject($model); } catch (FireflyException $e) { - Log::error( + app('log')->error( sprintf('The transformer could not include the requested transaction group for webhook #%d: %s', $webhook->id, $e->getMessage()) ); - Log::error($e->getTraceAsString()); + app('log')->error($e->getTraceAsString()); return; } + break; + case WebhookResponse::ACCOUNTS->value: - $accounts = $this->collectAccounts($model); + /** @var TransactionGroup $model */ + $accounts = $this->collectAccounts($model); foreach ($accounts as $account) { - $transformer = new AccountTransformer(); + $transformer = new AccountTransformer(); $transformer->setParameters(new ParameterBag()); $basicMessage['content'][] = $transformer->transform($account); } @@ -190,22 +206,10 @@ class StandardMessageGenerator implements MessageGeneratorInterface $this->storeMessage($webhook, $basicMessage); } - /** - * @inheritDoc - */ - public function getVersion(): int - { - return $this->version; - } - - /** - * @param TransactionGroup $transactionGroup - * - * @return Collection - */ private function collectAccounts(TransactionGroup $transactionGroup): Collection { $accounts = new Collection(); + /** @var TransactionJournal $journal */ foreach ($transactionGroup->transactionJournals as $journal) { /** @var Transaction $transaction */ @@ -217,53 +221,15 @@ class StandardMessageGenerator implements MessageGeneratorInterface return $accounts->unique(); } - /** - * @param Webhook $webhook - * @param array $message - * - * @return void - */ private function storeMessage(Webhook $webhook, array $message): void { - $webhookMessage = new WebhookMessage(); + $webhookMessage = new WebhookMessage(); $webhookMessage->webhook()->associate($webhook); $webhookMessage->sent = false; $webhookMessage->errored = false; $webhookMessage->uuid = $message['uuid']; $webhookMessage->message = $message; $webhookMessage->save(); - Log::debug(sprintf('Stored new webhook message #%d', $webhookMessage->id)); - } - - /** - * @param Collection $objects - */ - public function setObjects(Collection $objects): void - { - $this->objects = $objects; - } - - /** - * @param int $trigger - */ - public function setTrigger(int $trigger): void - { - $this->trigger = $trigger; - } - - /** - * @param User $user - */ - public function setUser(User $user): void - { - $this->user = $user; - } - - /** - * @inheritDoc - */ - public function setWebhooks(Collection $webhooks): void - { - $this->webhooks = $webhooks; + app('log')->debug(sprintf('Stored new webhook message #%d', $webhookMessage->id)); } } diff --git a/app/Handlers/Events/APIEventHandler.php b/app/Handlers/Events/APIEventHandler.php index c1d78be08e..bbe989922c 100644 --- a/app/Handlers/Events/APIEventHandler.php +++ b/app/Handlers/Events/APIEventHandler.php @@ -23,10 +23,8 @@ declare(strict_types=1); namespace FireflyIII\Handlers\Events; -use Exception; use FireflyIII\Notifications\User\NewAccessToken; use FireflyIII\Repositories\User\UserRepositoryInterface; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Notification; use Laravel\Passport\Events\AccessTokenCreated; @@ -37,13 +35,11 @@ class APIEventHandler { /** * Respond to the creation of an access token. - * - * @param AccessTokenCreated $event - * */ public function accessTokenCreated(AccessTokenCreated $event): void { - Log::debug(__METHOD__); + app('log')->debug(__METHOD__); + /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); $user = $repository->find((int)$event->userId); @@ -51,18 +47,20 @@ class APIEventHandler if (null !== $user) { try { Notification::send($user, new NewAccessToken()); - } catch (Exception $e) { + } catch (\Exception $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } } } diff --git a/app/Handlers/Events/AdminEventHandler.php b/app/Handlers/Events/AdminEventHandler.php index acf73ff5a4..fb8565b137 100644 --- a/app/Handlers/Events/AdminEventHandler.php +++ b/app/Handlers/Events/AdminEventHandler.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Handlers\Events; -use Exception; use FireflyIII\Events\Admin\InvitationCreated; use FireflyIII\Events\AdminRequestedTestMessage; use FireflyIII\Events\NewVersionAvailable; @@ -31,8 +30,6 @@ use FireflyIII\Notifications\Admin\TestNotification; use FireflyIII\Notifications\Admin\UserInvitation; use FireflyIII\Notifications\Admin\VersionCheckResult; use FireflyIII\Repositories\User\UserRepositoryInterface; -use FireflyIII\Support\Facades\FireflyConfig; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Notification; /** @@ -40,14 +37,9 @@ use Illuminate\Support\Facades\Notification; */ class AdminEventHandler { - /** - * @param InvitationCreated $event - * - * @return void - */ public function sendInvitationNotification(InvitationCreated $event): void { - $sendMail = FireflyConfig::get('notification_invite_created', true)->data; + $sendMail = app('fireflyconfig')->get('notification_invite_created', true)->data; if (false === $sendMail) { return; } @@ -59,18 +51,20 @@ class AdminEventHandler if ($repository->hasRole($user, 'owner')) { try { Notification::send($user, new UserInvitation($event->invitee)); - } catch (Exception $e) { + } catch (\Exception $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } } } @@ -78,14 +72,10 @@ class AdminEventHandler /** * Send new version message to admin. - * - * @param NewVersionAvailable $event - * - * @return void */ public function sendNewVersion(NewVersionAvailable $event): void { - $sendMail = FireflyConfig::get('notification_new_version', true)->data; + $sendMail = app('fireflyconfig')->get('notification_new_version', true)->data; if (false === $sendMail) { return; } @@ -97,18 +87,20 @@ class AdminEventHandler if ($repository->hasRole($user, 'owner')) { try { Notification::send($user, new VersionCheckResult($event->message)); - } catch (Exception $e) { + } catch (\Exception $e) {// @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } } } @@ -116,10 +108,6 @@ class AdminEventHandler /** * Sends a test message to an administrator. - * - * @param AdminRequestedTestMessage $event - * - * @return void */ public function sendTestMessage(AdminRequestedTestMessage $event): void { @@ -129,20 +117,23 @@ class AdminEventHandler if (!$repository->hasRole($event->user, 'owner')) { return; } + try { Notification::send($event->user, new TestNotification($event->user->email)); - } catch (Exception $e) { + } catch (\Exception $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } } } diff --git a/app/Handlers/Events/AuditEventHandler.php b/app/Handlers/Events/AuditEventHandler.php index a0edd222bd..d881b19ed4 100644 --- a/app/Handlers/Events/AuditEventHandler.php +++ b/app/Handlers/Events/AuditEventHandler.php @@ -33,14 +33,9 @@ use FireflyIII\Repositories\AuditLogEntry\ALERepositoryInterface; */ class AuditEventHandler { - /** - * @param TriggeredAuditLog $event - * - * @return void - */ public function storeAuditEvent(TriggeredAuditLog $event): void { - $array = [ + $array = [ 'auditable' => $event->auditable, 'changer' => $event->changer, 'action' => $event->field, diff --git a/app/Handlers/Events/AutomationHandler.php b/app/Handlers/Events/AutomationHandler.php index defb50f90f..d3f5bc8631 100644 --- a/app/Handlers/Events/AutomationHandler.php +++ b/app/Handlers/Events/AutomationHandler.php @@ -23,14 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Handlers\Events; -use Exception; use FireflyIII\Events\RequestedReportOnJournals; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionGroup; use FireflyIII\Notifications\User\TransactionCreation; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Transformers\TransactionGroupTransformer; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Notification; /** @@ -41,53 +39,59 @@ class AutomationHandler /** * Respond to the creation of X journals. * - * @param RequestedReportOnJournals $event - * * @throws FireflyException */ public function reportJournals(RequestedReportOnJournals $event): void { - Log::debug('In reportJournals.'); + app('log')->debug('In reportJournals.'); + /** @var UserRepositoryInterface $repository */ - $repository = app(UserRepositoryInterface::class); - $user = $repository->find($event->userId); - $sendReport = app('preferences')->getForUser($user, 'notification_transaction_creation', false)->data; + $repository = app(UserRepositoryInterface::class); + $user = $repository->find($event->userId); + + /** @var bool $sendReport */ + $sendReport = app('preferences')->getForUser($user, 'notification_transaction_creation', false)->data; if (false === $sendReport) { - Log::debug('Not sending report, because config says so.'); + app('log')->debug('Not sending report, because config says so.'); + return; } - if (null === $user || 0 === $event->groups->count()) { - Log::debug('No transaction groups in event, nothing to email about.'); + app('log')->debug('No transaction groups in event, nothing to email about.'); + return; } - Log::debug('Continue with message!'); + app('log')->debug('Continue with message!'); // transform groups into array: /** @var TransactionGroupTransformer $transformer */ $transformer = app(TransactionGroupTransformer::class); $groups = []; + /** @var TransactionGroup $group */ foreach ($event->groups as $group) { $groups[] = $transformer->transformObject($group); } + try { Notification::send($user, new TransactionCreation($groups)); - } catch (Exception $e) { + } catch (\Exception $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } - Log::debug('If there is no error above this line, message was sent.'); + app('log')->debug('If there is no error above this line, message was sent.'); } } diff --git a/app/Handlers/Events/BillEventHandler.php b/app/Handlers/Events/BillEventHandler.php index f360c1e4a6..7d87e6727f 100644 --- a/app/Handlers/Events/BillEventHandler.php +++ b/app/Handlers/Events/BillEventHandler.php @@ -24,11 +24,8 @@ declare(strict_types=1); namespace FireflyIII\Handlers\Events; -use Exception; use FireflyIII\Events\WarnUserAboutBill; use FireflyIII\Notifications\User\BillReminder; -use FireflyIII\Support\Facades\Preferences; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Notification; /** @@ -36,39 +33,38 @@ use Illuminate\Support\Facades\Notification; */ class BillEventHandler { - /** - * @param WarnUserAboutBill $event - * - * @return void - */ public function warnAboutBill(WarnUserAboutBill $event): void { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); + + $bill = $event->bill; - $bill = $event->bill; /** @var bool $preference */ - $preference = Preferences::getForUser($bill->user, 'notification_bill_reminder', true)->data; + $preference = app('preferences')->getForUser($bill->user, 'notification_bill_reminder', true)->data; if (true === $preference) { - Log::debug('Bill reminder is true!'); + app('log')->debug('Bill reminder is true!'); + try { Notification::send($bill->user, new BillReminder($bill, $event->field, $event->diff)); - } catch (Exception $e) { + } catch (\Exception $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } } if (false === $preference) { - Log::debug('User has disabled bill reminders.'); + app('log')->debug('User has disabled bill reminders.'); } } } diff --git a/app/Handlers/Events/DestroyedGroupEventHandler.php b/app/Handlers/Events/DestroyedGroupEventHandler.php index a7948333ff..db437d989c 100644 --- a/app/Handlers/Events/DestroyedGroupEventHandler.php +++ b/app/Handlers/Events/DestroyedGroupEventHandler.php @@ -28,21 +28,18 @@ use FireflyIII\Events\DestroyedTransactionGroup; use FireflyIII\Events\RequestedSendWebhookMessages; use FireflyIII\Generator\Webhook\MessageGeneratorInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class DestroyedGroupEventHandler */ class DestroyedGroupEventHandler { - /** - * @param DestroyedTransactionGroup $destroyedGroupEvent - */ public function triggerWebhooks(DestroyedTransactionGroup $destroyedGroupEvent): void { - Log::debug('DestroyedTransactionGroup:triggerWebhooks'); - $group = $destroyedGroupEvent->transactionGroup; - $user = $group->user; + app('log')->debug('DestroyedTransactionGroup:triggerWebhooks'); + $group = $destroyedGroupEvent->transactionGroup; + $user = $group->user; + /** @var MessageGeneratorInterface $engine */ $engine = app(MessageGeneratorInterface::class); $engine->setUser($user); diff --git a/app/Handlers/Events/Model/BudgetLimitHandler.php b/app/Handlers/Events/Model/BudgetLimitHandler.php index 8abe31998a..0211e9e78c 100644 --- a/app/Handlers/Events/Model/BudgetLimitHandler.php +++ b/app/Handlers/Events/Model/BudgetLimitHandler.php @@ -1,6 +1,5 @@ budgetLimit->id)); + app('log')->debug(sprintf('BudgetLimitHandler::created(#%s)', $event->budgetLimit->id)); $this->updateAvailableBudget($event->budgetLimit); } - /** - * @param BudgetLimit $budgetLimit - * - * @return void - */ private function updateAvailableBudget(BudgetLimit $budgetLimit): void { - Log::debug(sprintf('Now in updateAvailableBudget(#%d)', $budgetLimit->id)); - $budget = Budget::find($budgetLimit->budget_id); + app('log')->debug(sprintf('Now in updateAvailableBudget(#%d)', $budgetLimit->id)); + $budget = Budget::find($budgetLimit->budget_id); if (null === $budget) { - Log::warning('Budget is null, probably deleted, find deleted version.'); + app('log')->warning('Budget is null, probably deleted, find deleted version.'); $budget = Budget::withTrashed()->find($budgetLimit->budget_id); } if (null === $budget) { - Log::warning('Budget is still null, cannot continue, will delete budget limit.'); + app('log')->warning('Budget is still null, cannot continue, will delete budget limit.'); $budgetLimit->forceDelete(); + return; } - $user = $budget->user; + + /** @var null|User $user */ + $user = $budget->user; // sanity check. It happens when the budget has been deleted so the original user is unknown. if (null === $user) { - Log::warning('User is null, cannot continue.'); + app('log')->warning('User is null, cannot continue.'); $budgetLimit->forceDelete(); + return; } @@ -87,33 +80,38 @@ class BudgetLimitHandler // all have to be created or updated. try { $viewRange = app('preferences')->getForUser($user, 'viewRange', '1M')->data; - } catch (ContainerExceptionInterface | NotFoundExceptionInterface $e) { + } catch (ContainerExceptionInterface|NotFoundExceptionInterface $e) { app('log')->error($e->getMessage()); $viewRange = '1M'; } + // safety catch + if (null === $viewRange || is_array($viewRange)) { + $viewRange = '1M'; + } + $viewRange = (string)$viewRange; - $start = app('navigation')->startOfPeriod($budgetLimit->start_date, $viewRange); - $end = app('navigation')->startOfPeriod($budgetLimit->end_date, $viewRange); - $end = app('navigation')->endOfPeriod($end, $viewRange); + $start = app('navigation')->startOfPeriod($budgetLimit->start_date, $viewRange); + $end = app('navigation')->startOfPeriod($budgetLimit->end_date, $viewRange); + $end = app('navigation')->endOfPeriod($end, $viewRange); // limit period in total is: $limitPeriod = Period::make($start, $end, precision: Precision::DAY(), boundaries: Boundaries::EXCLUDE_NONE()); app('log')->debug(sprintf('Limit period is from %s to %s', $start->format('Y-m-d'), $end->format('Y-m-d'))); // from the start until the end of the budget limit, need to loop! - $current = clone $start; + $current = clone $start; while ($current <= $end) { - $currentEnd = app('navigation')->endOfPeriod($current, $viewRange); + $currentEnd = app('navigation')->endOfPeriod($current, $viewRange); // create or find AB for this particular period, and set the amount accordingly. - /** @var AvailableBudget $availableBudget */ + /** @var null|AvailableBudget $availableBudget */ $availableBudget = $user->availableBudgets()->where('start_date', $current->format('Y-m-d'))->where( 'end_date', $currentEnd->format('Y-m-d') )->where('transaction_currency_id', $budgetLimit->transaction_currency_id)->first(); if (null !== $availableBudget) { - Log::debug('Found 1 AB, will update.'); + app('log')->debug('Found 1 AB, will update.'); $this->calculateAmount($availableBudget); } if (null === $availableBudget) { @@ -124,13 +122,13 @@ class BudgetLimitHandler // no need to calculate if period is equal. if ($currentPeriod->equals($limitPeriod)) { - $amount = 0 === (int)$budgetLimit->id ? '0' : $budgetLimit->amount; + $amount = 0 === $budgetLimit->id ? '0' : $budgetLimit->amount; } if (0 === bccomp($amount, '0')) { - Log::debug('Amount is zero, will not create AB.'); + app('log')->debug('Amount is zero, will not create AB.'); } if (0 !== bccomp($amount, '0')) { - Log::debug(sprintf('Will create AB for period %s to %s', $current->format('Y-m-d'), $currentEnd->format('Y-m-d'))); + app('log')->debug(sprintf('Will create AB for period %s to %s', $current->format('Y-m-d'), $currentEnd->format('Y-m-d'))); $availableBudget = new AvailableBudget( [ 'user_id' => $budgetLimit->budget->user->id, @@ -142,26 +140,22 @@ class BudgetLimitHandler ] ); $availableBudget->save(); + app('log')->debug(sprintf('ID of new AB is #%d', $availableBudget->id)); } } // prep for next loop - $current = app('navigation')->addPeriod($current, $viewRange, 0); + $current = app('navigation')->addPeriod($current, $viewRange, 0); } } - /** - * @param AvailableBudget $availableBudget - * - * @return void - */ private function calculateAmount(AvailableBudget $availableBudget): void { - $repository = app(BudgetLimitRepositoryInterface::class); + $repository = app(BudgetLimitRepositoryInterface::class); $repository->setUser($availableBudget->user); - $newAmount = '0'; - $abPeriod = Period::make($availableBudget->start_date, $availableBudget->end_date, Precision::DAY()); - Log::debug( + $newAmount = '0'; + $abPeriod = Period::make($availableBudget->start_date, $availableBudget->end_date, Precision::DAY()); + app('log')->debug( sprintf( 'Now at AB #%d, ("%s" to "%s")', $availableBudget->id, @@ -170,11 +164,12 @@ class BudgetLimitHandler ) ); // have to recalculate everything just in case. - $set = $repository->getAllBudgetLimitsByCurrency($availableBudget->transactionCurrency, $availableBudget->start_date, $availableBudget->end_date); - Log::debug(sprintf('Found %d interesting budget limit(s).', $set->count())); + $set = $repository->getAllBudgetLimitsByCurrency($availableBudget->transactionCurrency, $availableBudget->start_date, $availableBudget->end_date); + app('log')->debug(sprintf('Found %d interesting budget limit(s).', $set->count())); + /** @var BudgetLimit $budgetLimit */ foreach ($set as $budgetLimit) { - Log::debug( + app('log')->debug( sprintf( 'Found interesting budget limit #%d ("%s" to "%s")', $budgetLimit->id, @@ -210,23 +205,19 @@ class BudgetLimitHandler } } if (0 === bccomp('0', $newAmount)) { - Log::debug('New amount is zero, deleting AB.'); + app('log')->debug('New amount is zero, deleting AB.'); $availableBudget->delete(); + return; } - Log::debug(sprintf('Concluded new amount for this AB must be %s', $newAmount)); + app('log')->debug(sprintf('Concluded new amount for this AB must be %s', $newAmount)); $availableBudget->amount = app('steam')->bcround($newAmount, $availableBudget->transactionCurrency->decimal_places); $availableBudget->save(); } - /** - * @param BudgetLimit $budgetLimit - * - * @return string - */ private function getDailyAmount(BudgetLimit $budgetLimit): string { - if (0 === (int)$budgetLimit->id) { + if (0 === $budgetLimit->id) { return '0'; } $limitPeriod = Period::make( @@ -236,35 +227,25 @@ class BudgetLimitHandler boundaries: Boundaries::EXCLUDE_NONE() ); $days = $limitPeriod->length(); - $amount = bcdiv((string)$budgetLimit->amount, (string)$days, 12); - Log::debug( + $amount = bcdiv($budgetLimit->amount, (string)$days, 12); + app('log')->debug( sprintf('Total amount for budget limit #%d is %s. Nr. of days is %d. Amount per day is %s', $budgetLimit->id, $budgetLimit->amount, $days, $amount) ); + return $amount; } - /** - * @param Deleted $event - * - * @return void - */ public function deleted(Deleted $event): void { - Log::debug(sprintf('BudgetLimitHandler::deleted(#%s)', $event->budgetLimit->id)); + app('log')->debug(sprintf('BudgetLimitHandler::deleted(#%s)', $event->budgetLimit->id)); $budgetLimit = $event->budgetLimit; - $budgetLimit->id = null; + $budgetLimit->id = 0; $this->updateAvailableBudget($event->budgetLimit); } - /** - * @param Updated $event - * - * @return void - */ public function updated(Updated $event): void { - Log::debug(sprintf('BudgetLimitHandler::updated(#%s)', $event->budgetLimit->id)); + app('log')->debug(sprintf('BudgetLimitHandler::updated(#%s)', $event->budgetLimit->id)); $this->updateAvailableBudget($event->budgetLimit); } - } diff --git a/app/Handlers/Events/Model/PiggyBankEventHandler.php b/app/Handlers/Events/Model/PiggyBankEventHandler.php index 5eca00f652..f97319bac6 100644 --- a/app/Handlers/Events/Model/PiggyBankEventHandler.php +++ b/app/Handlers/Events/Model/PiggyBankEventHandler.php @@ -26,18 +26,12 @@ namespace FireflyIII\Handlers\Events\Model; use FireflyIII\Events\Model\PiggyBank\ChangedAmount; use FireflyIII\Models\PiggyBankEvent; -use Illuminate\Support\Facades\Log; /** * Class PiggyBankEventHandler */ class PiggyBankEventHandler { - /** - * @param ChangedAmount $event - * - * @return void - */ public function changePiggyAmount(ChangedAmount $event): void { // find journal if group is present. @@ -45,14 +39,16 @@ class PiggyBankEventHandler if (null !== $event->transactionGroup) { $journal = $event->transactionGroup->transactionJournals()->first(); } - $date = $journal?->date ?? today(config('app.timezone')); + $date = $journal?->date ?? today(config('app.timezone')); // sanity check: event must not already exist for this journal and piggy bank. if (null !== $journal) { $exists = PiggyBankEvent::where('piggy_bank_id', $event->piggyBank->id) - ->where('transaction_journal_id', $journal->id) - ->exists(); + ->where('transaction_journal_id', $journal->id) + ->exists() + ; if ($exists) { - Log::warning('Already have event for this journal and piggy, will not create another.'); + app('log')->warning('Already have event for this journal and piggy, will not create another.'); + return; } } diff --git a/app/Handlers/Events/Model/RuleHandler.php b/app/Handlers/Events/Model/RuleHandler.php index 99f9aa208b..ea3bb107c8 100644 --- a/app/Handlers/Events/Model/RuleHandler.php +++ b/app/Handlers/Events/Model/RuleHandler.php @@ -1,6 +1,5 @@ ruleAction; - $rule = $ruleAction->rule; - $preference = Preferences::getForUser($rule->user, 'notification_rule_action_failures', true)->data; + $ruleAction = $event->ruleAction; + $rule = $ruleAction->rule; + + /** @var bool $preference */ + $preference = app('preferences')->getForUser($rule->user, 'notification_rule_action_failures', true)->data; if (false === $preference) { return; } app('log')->debug('Now in ruleActionFailedOnArray'); - $journal = $event->journal; - $error = $event->error; - $user = $ruleAction->rule->user; + $journal = $event->journal; + $error = $event->error; + $user = $ruleAction->rule->user; $mainMessage = trans('rules.main_message', ['rule' => $rule->title, 'action' => $ruleAction->action_type, 'group' => $journal['transaction_group_id'], 'error' => $error]); $groupTitle = $journal['description'] ?? ''; @@ -61,27 +58,27 @@ class RuleHandler $ruleLink = route('rules.edit', [$rule->id]); $params = [$mainMessage, $groupTitle, $groupLink, $ruleTitle, $ruleLink]; - - Notification::send($user, new RuleActionFailed($params)); + try { + Notification::send($user, new RuleActionFailed($params)); + } catch (ClientException $e) { + Log::error(sprintf('[a] Error sending notification that the rule action failed: %s', $e->getMessage())); + } } - /** - * @param RuleActionFailedOnObject $event - * - * @return void - */ public function ruleActionFailedOnObject(RuleActionFailedOnObject $event): void { - $ruleAction = $event->ruleAction; - $rule = $ruleAction->rule; - $preference = Preferences::getForUser($rule->user, 'notification_rule_action_failures', true)->data; + $ruleAction = $event->ruleAction; + $rule = $ruleAction->rule; + + /** @var bool $preference */ + $preference = app('preferences')->getForUser($rule->user, 'notification_rule_action_failures', true)->data; if (false === $preference) { return; } app('log')->debug('Now in ruleActionFailedOnObject'); - $journal = $event->journal; - $error = $event->error; - $user = $ruleAction->rule->user; + $journal = $event->journal; + $error = $event->error; + $user = $ruleAction->rule->user; $mainMessage = trans('rules.main_message', ['rule' => $rule->title, 'action' => $ruleAction->action_type, 'group' => $journal->transaction_group_id, 'error' => $error]); $groupTitle = $journal->description ?? ''; @@ -90,8 +87,10 @@ class RuleHandler $ruleLink = route('rules.edit', [$rule->id]); $params = [$mainMessage, $groupTitle, $groupLink, $ruleTitle, $ruleLink]; - - Notification::send($user, new RuleActionFailed($params)); + try { + Notification::send($user, new RuleActionFailed($params)); + } catch (ClientException $e) { + Log::error(sprintf('[b] Error sending notification that the rule action failed: %s', $e->getMessage())); + } } - } diff --git a/app/Handlers/Events/StoredAccountEventHandler.php b/app/Handlers/Events/StoredAccountEventHandler.php index a4a48f4cbf..574148def2 100644 --- a/app/Handlers/Events/StoredAccountEventHandler.php +++ b/app/Handlers/Events/StoredAccountEventHandler.php @@ -32,14 +32,12 @@ use FireflyIII\Services\Internal\Support\CreditRecalculateService; */ class StoredAccountEventHandler { - /** - * @param StoredAccount $event - */ public function recalculateCredit(StoredAccount $event): void { $account = $event->account; + /** @var CreditRecalculateService $object */ - $object = app(CreditRecalculateService::class); + $object = app(CreditRecalculateService::class); $object->setAccount($account); $object->recalculate(); } diff --git a/app/Handlers/Events/StoredGroupEventHandler.php b/app/Handlers/Events/StoredGroupEventHandler.php index 853f299fb2..53faaffe21 100644 --- a/app/Handlers/Events/StoredGroupEventHandler.php +++ b/app/Handlers/Events/StoredGroupEventHandler.php @@ -32,7 +32,6 @@ use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use FireflyIII\Services\Internal\Support\CreditRecalculateService; use FireflyIII\TransactionRules\Engine\RuleEngineInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class StoredGroupEventHandler @@ -41,26 +40,25 @@ class StoredGroupEventHandler { /** * This method grabs all the users rules and processes them. - * - * @param StoredTransactionGroup $storedGroupEvent */ public function processRules(StoredTransactionGroup $storedGroupEvent): void { if (false === $storedGroupEvent->applyRules) { - Log::info(sprintf('Will not run rules on group #%d', $storedGroupEvent->transactionGroup->id)); + app('log')->info(sprintf('Will not run rules on group #%d', $storedGroupEvent->transactionGroup->id)); return; } - Log::debug('Now in StoredGroupEventHandler::processRules()'); + app('log')->debug('Now in StoredGroupEventHandler::processRules()'); + + $journals = $storedGroupEvent->transactionGroup->transactionJournals; + $array = []; - $journals = $storedGroupEvent->transactionGroup->transactionJournals; - $array = []; /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $array[] = $journal->id; } - $journalIds = implode(',', $array); - Log::debug(sprintf('Add local operator for journal(s): %s', $journalIds)); + $journalIds = implode(',', $array); + app('log')->debug(sprintf('Add local operator for journal(s): %s', $journalIds)); // collect rules: $ruleGroupRepository = app(RuleGroupRepositoryInterface::class); @@ -68,22 +66,20 @@ class StoredGroupEventHandler // add the groups to the rule engine. // it should run the rules in the group and cancel the group if necessary. - $groups = $ruleGroupRepository->getRuleGroupsWithRules('store-journal'); + $groups = $ruleGroupRepository->getRuleGroupsWithRules('store-journal'); // create and fire rule engine. - $newRuleEngine = app(RuleEngineInterface::class); + $newRuleEngine = app(RuleEngineInterface::class); $newRuleEngine->setUser($storedGroupEvent->transactionGroup->user); $newRuleEngine->addOperator(['type' => 'journal_id', 'value' => $journalIds]); $newRuleEngine->setRuleGroups($groups); $newRuleEngine->fire(); } - /** - * @param StoredTransactionGroup $event - */ public function recalculateCredit(StoredTransactionGroup $event): void { - $group = $event->transactionGroup; + $group = $event->transactionGroup; + /** @var CreditRecalculateService $object */ $object = app(CreditRecalculateService::class); $object->setGroup($group); @@ -92,20 +88,19 @@ class StoredGroupEventHandler /** * This method processes all webhooks that respond to the "stored transaction group" trigger (100) - * - * @param StoredTransactionGroup $storedGroupEvent */ public function triggerWebhooks(StoredTransactionGroup $storedGroupEvent): void { - Log::debug(__METHOD__); - $group = $storedGroupEvent->transactionGroup; + app('log')->debug(__METHOD__); + $group = $storedGroupEvent->transactionGroup; if (false === $storedGroupEvent->fireWebhooks) { - Log::info(sprintf('Will not fire webhooks for transaction group #%d', $group->id)); + app('log')->info(sprintf('Will not fire webhooks for transaction group #%d', $group->id)); return; } - $user = $group->user; + $user = $group->user; + /** @var MessageGeneratorInterface $engine */ $engine = app(MessageGeneratorInterface::class); $engine->setUser($user); diff --git a/app/Handlers/Events/UpdatedAccountEventHandler.php b/app/Handlers/Events/UpdatedAccountEventHandler.php index 6874fcbba4..59c137e817 100644 --- a/app/Handlers/Events/UpdatedAccountEventHandler.php +++ b/app/Handlers/Events/UpdatedAccountEventHandler.php @@ -32,14 +32,12 @@ use FireflyIII\Services\Internal\Support\CreditRecalculateService; */ class UpdatedAccountEventHandler { - /** - * @param UpdatedAccount $event - */ public function recalculateCredit(UpdatedAccount $event): void { $account = $event->account; + /** @var CreditRecalculateService $object */ - $object = app(CreditRecalculateService::class); + $object = app(CreditRecalculateService::class); $object->setAccount($account); $object->recalculate(); } diff --git a/app/Handlers/Events/UpdatedGroupEventHandler.php b/app/Handlers/Events/UpdatedGroupEventHandler.php index 991edabd6d..3daa2604b9 100644 --- a/app/Handlers/Events/UpdatedGroupEventHandler.php +++ b/app/Handlers/Events/UpdatedGroupEventHandler.php @@ -35,7 +35,6 @@ use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use FireflyIII\Services\Internal\Support\CreditRecalculateService; use FireflyIII\TransactionRules\Engine\RuleEngineInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class UpdatedGroupEventHandler @@ -44,65 +43,60 @@ class UpdatedGroupEventHandler { /** * This method will check all the rules when a journal is updated. - * - * @param UpdatedTransactionGroup $updatedGroupEvent */ public function processRules(UpdatedTransactionGroup $updatedGroupEvent): void { if (false === $updatedGroupEvent->applyRules) { - Log::info(sprintf('Will not run rules on group #%d', $updatedGroupEvent->transactionGroup->id)); + app('log')->info(sprintf('Will not run rules on group #%d', $updatedGroupEvent->transactionGroup->id)); return; } - $journals = $updatedGroupEvent->transactionGroup->transactionJournals; - $array = []; + $journals = $updatedGroupEvent->transactionGroup->transactionJournals; + $array = []; + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { $array[] = $journal->id; } - $journalIds = implode(',', $array); - Log::debug(sprintf('Add local operator for journal(s): %s', $journalIds)); + $journalIds = implode(',', $array); + app('log')->debug(sprintf('Add local operator for journal(s): %s', $journalIds)); // collect rules: $ruleGroupRepository = app(RuleGroupRepositoryInterface::class); $ruleGroupRepository->setUser($updatedGroupEvent->transactionGroup->user); - $groups = $ruleGroupRepository->getRuleGroupsWithRules('update-journal'); + $groups = $ruleGroupRepository->getRuleGroupsWithRules('update-journal'); // file rule engine. - $newRuleEngine = app(RuleEngineInterface::class); + $newRuleEngine = app(RuleEngineInterface::class); $newRuleEngine->setUser($updatedGroupEvent->transactionGroup->user); $newRuleEngine->addOperator(['type' => 'journal_id', 'value' => $journalIds]); $newRuleEngine->setRuleGroups($groups); $newRuleEngine->fire(); } - /** - * @param UpdatedTransactionGroup $event - */ public function recalculateCredit(UpdatedTransactionGroup $event): void { - $group = $event->transactionGroup; + $group = $event->transactionGroup; + /** @var CreditRecalculateService $object */ $object = app(CreditRecalculateService::class); $object->setGroup($group); $object->recalculate(); } - /** - * @param UpdatedTransactionGroup $updatedGroupEvent - */ public function triggerWebhooks(UpdatedTransactionGroup $updatedGroupEvent): void { - Log::debug(__METHOD__); - $group = $updatedGroupEvent->transactionGroup; + app('log')->debug(__METHOD__); + $group = $updatedGroupEvent->transactionGroup; if (false === $updatedGroupEvent->fireWebhooks) { - Log::info(sprintf('Will not fire webhooks for transaction group #%d', $group->id)); + app('log')->info(sprintf('Will not fire webhooks for transaction group #%d', $group->id)); return; } - $user = $group->user; + $user = $group->user; + /** @var MessageGeneratorInterface $engine */ $engine = app(MessageGeneratorInterface::class); $engine->setUser($user); @@ -115,45 +109,50 @@ class UpdatedGroupEventHandler /** * This method will make sure all source / destination accounts are the same. - * - * @param UpdatedTransactionGroup $updatedGroupEvent */ public function unifyAccounts(UpdatedTransactionGroup $updatedGroupEvent): void { - $group = $updatedGroupEvent->transactionGroup; + $group = $updatedGroupEvent->transactionGroup; if (1 === $group->transactionJournals->count()) { return; } + // first journal: - /** @var TransactionJournal|null $first */ - $first = $group->transactionJournals() - ->orderBy('transaction_journals.date', 'DESC') - ->orderBy('transaction_journals.order', 'ASC') - ->orderBy('transaction_journals.id', 'DESC') - ->orderBy('transaction_journals.description', 'DESC') - ->first(); + /** @var null|TransactionJournal $first */ + $first = $group->transactionJournals() + ->orderBy('transaction_journals.date', 'DESC') + ->orderBy('transaction_journals.order', 'ASC') + ->orderBy('transaction_journals.id', 'DESC') + ->orderBy('transaction_journals.description', 'DESC') + ->first() + ; if (null === $first) { app('log')->warning(sprintf('Group #%d has no transaction journals.', $group->id)); + return; } - $all = $group->transactionJournals()->get()->pluck('id')->toArray(); + $all = $group->transactionJournals()->get()->pluck('id')->toArray(); + /** @var Account $sourceAccount */ $sourceAccount = $first->transactions()->where('amount', '<', '0')->first()->account; - /** @var Account $destAccount */ - $destAccount = $first->transactions()->where('amount', '>', '0')->first()->account; - $type = $first->transactionType->type; + /** @var Account $destAccount */ + $destAccount = $first->transactions()->where('amount', '>', '0')->first()->account; + + $type = $first->transactionType->type; if (TransactionType::TRANSFER === $type || TransactionType::WITHDRAWAL === $type) { // set all source transactions to source account: Transaction::whereIn('transaction_journal_id', $all) - ->where('amount', '<', 0)->update(['account_id' => $sourceAccount->id]); + ->where('amount', '<', 0)->update(['account_id' => $sourceAccount->id]) + ; } if (TransactionType::TRANSFER === $type || TransactionType::DEPOSIT === $type) { // set all destination transactions to destination account: Transaction::whereIn('transaction_journal_id', $all) - ->where('amount', '>', 0)->update(['account_id' => $destAccount->id]); + ->where('amount', '>', 0)->update(['account_id' => $destAccount->id]) + ; } } } diff --git a/app/Handlers/Events/UserEventHandler.php b/app/Handlers/Events/UserEventHandler.php index 6f534d04a1..8f414e6b97 100644 --- a/app/Handlers/Events/UserEventHandler.php +++ b/app/Handlers/Events/UserEventHandler.php @@ -25,7 +25,6 @@ namespace FireflyIII\Handlers\Events; use Carbon\Carbon; use Database\Seeders\ExchangeRateSeeder; -use Exception; use FireflyIII\Enums\UserRoleEnum; use FireflyIII\Events\ActuallyLoggedIn; use FireflyIII\Events\Admin\InvitationCreated; @@ -45,10 +44,8 @@ use FireflyIII\Notifications\User\UserLogin; use FireflyIII\Notifications\User\UserNewPassword; use FireflyIII\Notifications\User\UserRegistration as UserRegistrationNotification; use FireflyIII\Repositories\User\UserRepositoryInterface; -use FireflyIII\Support\Facades\FireflyConfig; use FireflyIII\User; use Illuminate\Auth\Events\Login; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Notification; use Mail; @@ -63,8 +60,6 @@ class UserEventHandler { /** * This method will bestow upon a user the "owner" role if he is the first user in the system. - * - * @param RegisteredUser $event */ public function attachUserRole(RegisteredUser $event): void { @@ -73,15 +68,13 @@ class UserEventHandler // first user ever? if (1 === $repository->count()) { - Log::debug('User count is one, attach role.'); + app('log')->debug('User count is one, attach role.'); $repository->attachRole($event->user, 'owner'); } } /** * Fires to see if a user is admin. - * - * @param Login $event */ public function checkSingleUserIsAdmin(Login $event): void { @@ -89,8 +82,8 @@ class UserEventHandler $repository = app(UserRepositoryInterface::class); /** @var User $user */ - $user = $event->user; - $count = $repository->count(); + $user = $event->user; + $count = $repository->count(); // only act when there is 1 user in the system and he has no admin rights. if (1 === $count && !$repository->hasRole($user, 'owner')) { @@ -99,17 +92,17 @@ class UserEventHandler if (null === $role) { // create role, does not exist. Very strange situation so let's raise a big fuss about it. $role = $repository->createRole('owner', 'Site Owner', 'User runs this instance of FF3'); - Log::error('Could not find role "owner". This is weird.'); + app('log')->error('Could not find role "owner". This is weird.'); } - Log::info(sprintf('Gave user #%d role #%d ("%s")', $user->id, $role->id, $role->name)); + app('log')->info(sprintf('Gave user #%d role #%d ("%s")', $user->id, $role->id, $role->name)); // give user the role $repository->attachRole($user, 'owner'); } } /** - * @param RegisteredUser $event + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function createExchangeRates(RegisteredUser $event): void { @@ -118,34 +111,35 @@ class UserEventHandler } /** - * @param RegisteredUser $event - * * @throws FireflyException */ public function createGroupMembership(RegisteredUser $event): void { - $user = $event->user; - $groupExists = true; - $groupTitle = $user->email; - $index = 1; + $user = $event->user; + $groupExists = true; + $groupTitle = $user->email; + $index = 1; + /** @var UserGroup $group */ - $group = null; + $group = null; // create a new group. - while (true === $groupExists) { + while (true === $groupExists) { // @phpstan-ignore-line $groupExists = UserGroup::where('title', $groupTitle)->count() > 0; if (false === $groupExists) { $group = UserGroup::create(['title' => $groupTitle]); + break; } - $groupTitle = sprintf('%s-%d', $user->email, $index); - $index++; + $groupTitle = sprintf('%s-%d', $user->email, $index); + ++$index; if ($index > 99) { throw new FireflyException('Email address can no longer be used for registrations.'); } } - /** @var UserRole|null $role */ - $role = UserRole::where('title', UserRoleEnum::OWNER->value)->first(); + + /** @var null|UserRole $role */ + $role = UserRole::where('title', UserRoleEnum::OWNER->value)->first(); if (null === $role) { throw new FireflyException('The user role is unexpectedly empty. Did you run all migrations?'); } @@ -163,8 +157,6 @@ class UserEventHandler /** * Set the demo user back to English. * - * @param Login $event - * * @throws FireflyException */ public function demoUserBackToEnglish(Login $event): void @@ -173,7 +165,7 @@ class UserEventHandler $repository = app(UserRepositoryInterface::class); /** @var User $user */ - $user = $event->user; + $user = $event->user; if ($repository->hasRole($user, 'demo')) { // set user back to English. app('preferences')->setForUser($user, 'language', 'en_US'); @@ -183,39 +175,41 @@ class UserEventHandler } /** - * @param DetectedNewIPAddress $event - * * @throws FireflyException */ public function notifyNewIPAddress(DetectedNewIPAddress $event): void { $user = $event->user; - $email = $user->email; $ipAddress = $event->ipAddress; if ($user->hasRole('demo')) { return; // do not email demo user. } - $list = app('preferences')->getForUser($user, 'login_ip_history', [])->data; + $list = app('preferences')->getForUser($user, 'login_ip_history', [])->data; + if (!is_array($list)) { + $list = []; + } /** @var array $entry */ foreach ($list as $index => $entry) { if (false === $entry['notified']) { try { Notification::send($user, new UserLogin($ipAddress)); - } catch (Exception $e) { + } catch (\Exception $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } } $list[$index]['notified'] = true; @@ -224,12 +218,9 @@ class UserEventHandler app('preferences')->setForUser($user, 'login_ip_history', $list); } - /** - * @param RegisteredUser $event - */ public function sendAdminRegistrationNotification(RegisteredUser $event): void { - $sendMail = FireflyConfig::get('notification_admin_new_reg', true)->data; + $sendMail = (bool)app('fireflyconfig')->get('notification_admin_new_reg', true)->data; if ($sendMail) { /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); @@ -238,18 +229,20 @@ class UserEventHandler if ($repository->hasRole($user, 'owner')) { try { Notification::send($user, new AdminRegistrationNotification($event->user)); - } catch (Exception $e) { + } catch (\Exception $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } } } @@ -260,8 +253,6 @@ class UserEventHandler * Send email to confirm email change. Will not be made into a notification, because * this requires some custom fields from the user and not just the "user" object. * - * @param UserChangedEmail $event - * * @throws FireflyException */ public function sendEmailChangeConfirmMail(UserChangedEmail $event): void @@ -273,10 +264,11 @@ class UserEventHandler $url = route('profile.confirm-email-change', [$token->data]); try { - Mail::to($newEmail)->send(new ConfirmEmailChangeMail($newEmail, $oldEmail, $url)); - } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + \Mail::to($newEmail)->send(new ConfirmEmailChangeMail($newEmail, $oldEmail, $url)); + } catch (\Exception $e) { + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($e->getMessage(), 0, $e); } } @@ -285,8 +277,6 @@ class UserEventHandler * Send email to be able to undo email change. Will not be made into a notification, because * this requires some custom fields from the user and not just the "user" object. * - * @param UserChangedEmail $event - * * @throws FireflyException */ public function sendEmailChangeUndoMail(UserChangedEmail $event): void @@ -297,43 +287,42 @@ class UserEventHandler $token = app('preferences')->getForUser($user, 'email_change_undo_token', 'invalid'); $hashed = hash('sha256', sprintf('%s%s', (string)config('app.key'), $oldEmail)); $url = route('profile.undo-email-change', [$token->data, $hashed]); + try { - Mail::to($oldEmail)->send(new UndoEmailChangeMail($newEmail, $oldEmail, $url)); - } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + \Mail::to($oldEmail)->send(new UndoEmailChangeMail($newEmail, $oldEmail, $url)); + } catch (\Exception $e) { + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($e->getMessage(), 0, $e); } } /** * Send a new password to the user. - * - * @param RequestedNewPassword $event */ public function sendNewPassword(RequestedNewPassword $event): void { try { Notification::send($event->user, new UserNewPassword(route('password.reset', [$event->token]))); - } catch (Exception $e) { + } catch (\Exception $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } } /** - * @param InvitationCreated $event - * - * @return void * @throws FireflyException */ public function sendRegistrationInvite(InvitationCreated $event): void @@ -341,11 +330,13 @@ class UserEventHandler $invitee = $event->invitee->email; $admin = $event->invitee->user->email; $url = route('invite', [$event->invitee->invite_code]); + try { - Mail::to($invitee)->send(new InvitationMail($invitee, $admin, $url)); - } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + \Mail::to($invitee)->send(new InvitationMail($invitee, $admin, $url)); + } catch (\Exception $e) { + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($e->getMessage(), 0, $e); } } @@ -353,44 +344,42 @@ class UserEventHandler /** * This method will send the user a registration mail, welcoming him or her to Firefly III. * This message is only sent when the configuration of Firefly III says so. - * - * @param RegisteredUser $event - * */ public function sendRegistrationMail(RegisteredUser $event): void { - $sendMail = FireflyConfig::get('notification_user_new_reg', true)->data; + $sendMail = (bool)app('fireflyconfig')->get('notification_user_new_reg', true)->data; if ($sendMail) { try { Notification::send($event->user, new UserRegistrationNotification()); - } catch (Exception $e) { + } catch (\Exception $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } } } /** - * @param ActuallyLoggedIn $event - * * @throws FireflyException */ public function storeUserIPAddress(ActuallyLoggedIn $event): void { - Log::debug('Now in storeUserIPAddress'); - $user = $event->user; + app('log')->debug('Now in storeUserIPAddress'); + $user = $event->user; if ($user->hasRole('demo')) { - Log::debug('Do not log demo user logins'); + app('log')->debug('Do not log demo user logins'); + return; } @@ -399,25 +388,25 @@ class UserEventHandler $preference = app('preferences')->getForUser($user, 'login_ip_history', [])->data; } catch (FireflyException $e) { // don't care. - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); return; } - $inArray = false; - $ip = request()->ip(); - Log::debug(sprintf('User logging in from IP address %s', $ip)); + $inArray = false; + $ip = request()->ip(); + app('log')->debug(sprintf('User logging in from IP address %s', $ip)); // update array if in array foreach ($preference as $index => $row) { if ($row['ip'] === $ip) { - Log::debug('Found IP in array, refresh time.'); + app('log')->debug('Found IP in array, refresh time.'); $preference[$index]['time'] = now(config('app.timezone'))->format('Y-m-d H:i:s'); $inArray = true; } // clean up old entries (6 months) $carbon = Carbon::createFromFormat('Y-m-d H:i:s', $preference[$index]['time']); - if ($carbon->diffInMonths(today()) > 6) { - Log::debug(sprintf('Entry for %s is very old, remove it.', $row['ip'])); + if (false !== $carbon && $carbon->diffInMonths(today()) > 6) { + app('log')->debug(sprintf('Entry for %s is very old, remove it.', $row['ip'])); unset($preference[$index]); } } @@ -430,8 +419,9 @@ class UserEventHandler ]; } $preference = array_values($preference); + /** @var bool $send */ - $send = app('preferences')->getForUser($user, 'notification_user_login', true)->data; + $send = app('preferences')->getForUser($user, 'notification_user_login', true)->data; app('preferences')->setForUser($user, 'login_ip_history', $preference); if (false === $inArray && true === $send) { diff --git a/app/Handlers/Events/VersionCheckEventHandler.php b/app/Handlers/Events/VersionCheckEventHandler.php index 5b39792b23..70a104ac07 100644 --- a/app/Handlers/Events/VersionCheckEventHandler.php +++ b/app/Handlers/Events/VersionCheckEventHandler.php @@ -28,9 +28,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Update\UpdateTrait; use FireflyIII\Models\Configuration; use FireflyIII\Repositories\User\UserRepositoryInterface; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class VersionCheckEventHandler @@ -42,32 +39,29 @@ class VersionCheckEventHandler /** * Checks with GitHub to see if there is a new version. * - * @param RequestedVersionCheckStatus $event - * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface + * * @deprecated ? */ public function checkForUpdates(RequestedVersionCheckStatus $event): void { - Log::debug('Now in checkForUpdates()'); + app('log')->debug('Now in checkForUpdates()'); // should not check for updates: - $permission = app('fireflyconfig')->get('permission_update_check', -1); - $value = (int)$permission->data; + $permission = app('fireflyconfig')->get('permission_update_check', -1); + $value = (int)$permission->data; if (1 !== $value) { - Log::debug('Update check is not enabled.'); + app('log')->debug('Update check is not enabled.'); $this->warnToCheckForUpdates($event); return; } /** @var UserRepositoryInterface $repository */ - $repository = app(UserRepositoryInterface::class); - $user = $event->user; + $repository = app(UserRepositoryInterface::class); + $user = $event->user; if (!$repository->hasRole($user, 'owner')) { - Log::debug('User is not admin, done.'); + app('log')->debug('User is not admin, done.'); return; } @@ -76,34 +70,30 @@ class VersionCheckEventHandler $lastCheckTime = app('fireflyconfig')->get('last_update_check', time()); $now = time(); $diff = $now - $lastCheckTime->data; - Log::debug(sprintf('Last check time is %d, current time is %d, difference is %d', $lastCheckTime->data, $now, $diff)); + app('log')->debug(sprintf('Last check time is %d, current time is %d, difference is %d', $lastCheckTime->data, $now, $diff)); if ($diff < 604800) { - Log::debug(sprintf('Checked for updates less than a week ago (on %s).', date('Y-m-d H:i:s', $lastCheckTime->data))); + app('log')->debug(sprintf('Checked for updates less than a week ago (on %s).', date('Y-m-d H:i:s', $lastCheckTime->data))); return; } // last check time was more than a week ago. - Log::debug('Have not checked for a new version in a week!'); - $release = $this->getLatestRelease(); + app('log')->debug('Have not checked for a new version in a week!'); + $release = $this->getLatestRelease(); session()->flash($release['level'], $release['message']); app('fireflyconfig')->set('last_update_check', time()); } /** - * @param RequestedVersionCheckStatus $event - * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ protected function warnToCheckForUpdates(RequestedVersionCheckStatus $event): void { /** @var UserRepositoryInterface $repository */ - $repository = app(UserRepositoryInterface::class); - $user = $event->user; + $repository = app(UserRepositoryInterface::class); + $user = $event->user; if (!$repository->hasRole($user, 'owner')) { - Log::debug('User is not admin, done.'); + app('log')->debug('User is not admin, done.'); return; } @@ -112,14 +102,14 @@ class VersionCheckEventHandler $lastCheckTime = app('fireflyconfig')->get('last_update_warning', time()); $now = time(); $diff = $now - $lastCheckTime->data; - Log::debug(sprintf('Last warning time is %d, current time is %d, difference is %d', $lastCheckTime->data, $now, $diff)); + app('log')->debug(sprintf('Last warning time is %d, current time is %d, difference is %d', $lastCheckTime->data, $now, $diff)); if ($diff < 604800 * 4) { - Log::debug(sprintf('Warned about updates less than four weeks ago (on %s).', date('Y-m-d H:i:s', $lastCheckTime->data))); + app('log')->debug(sprintf('Warned about updates less than four weeks ago (on %s).', date('Y-m-d H:i:s', $lastCheckTime->data))); return; } // last check time was more than a week ago. - Log::debug('Have warned about a new version in four weeks!'); + app('log')->debug('Have warned about a new version in four weeks!'); session()->flash('info', (string)trans('firefly.disabled_but_check')); app('fireflyconfig')->set('last_update_warning', time()); diff --git a/app/Handlers/Events/WebhookEventHandler.php b/app/Handlers/Events/WebhookEventHandler.php index c678510606..863800c594 100644 --- a/app/Handlers/Events/WebhookEventHandler.php +++ b/app/Handlers/Events/WebhookEventHandler.php @@ -25,7 +25,6 @@ namespace FireflyIII\Handlers\Events; use FireflyIII\Jobs\SendWebhookMessage; use FireflyIII\Models\WebhookMessage; -use Illuminate\Support\Facades\Log; /** * Class WebhookEventHandler @@ -37,23 +36,24 @@ class WebhookEventHandler */ public function sendWebhookMessages(): void { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); // kick off the job! $messages = WebhookMessage::where('webhook_messages.sent', false) - ->get(['webhook_messages.*']) - ->filter( - function (WebhookMessage $message) { - return $message->webhookAttempts()->count() <= 2; - } - )->splice(0, 5); - Log::debug(sprintf('Found %d webhook message(s) ready to be send.', $messages->count())); + ->get(['webhook_messages.*']) + ->filter( + static function (WebhookMessage $message) { + return $message->webhookAttempts()->count() <= 2; + } + )->splice(0, 5) + ; + app('log')->debug(sprintf('Found %d webhook message(s) ready to be send.', $messages->count())); foreach ($messages as $message) { if (false === $message->sent) { - Log::debug(sprintf('Send message #%d', $message->id)); + app('log')->debug(sprintf('Send message #%d', $message->id)); SendWebhookMessage::dispatch($message)->afterResponse(); } if (false !== $message->sent) { - Log::debug(sprintf('Skip message #%d', $message->id)); + app('log')->debug(sprintf('Skip message #%d', $message->id)); } } } diff --git a/app/Handlers/Observer/AccountObserver.php b/app/Handlers/Observer/AccountObserver.php index b5ad9971a7..9d8cb9de9e 100644 --- a/app/Handlers/Observer/AccountObserver.php +++ b/app/Handlers/Observer/AccountObserver.php @@ -32,10 +32,6 @@ class AccountObserver { /** * Also delete related objects. - * - * @param Account $account - * - * @return void */ public function deleting(Account $account): void { @@ -52,7 +48,5 @@ class AccountObserver } $account->notes()->delete(); $account->locations()->delete(); - } - } diff --git a/app/Handlers/Observer/BillObserver.php b/app/Handlers/Observer/BillObserver.php index 42206dc7f0..5d93e8609f 100644 --- a/app/Handlers/Observer/BillObserver.php +++ b/app/Handlers/Observer/BillObserver.php @@ -30,11 +30,6 @@ use FireflyIII\Models\Bill; */ class BillObserver { - /** - * @param Bill $bill - * - * @return void - */ public function deleting(Bill $bill): void { app('log')->debug('Observe "deleting" of a bill.'); @@ -43,5 +38,4 @@ class BillObserver } $bill->notes()->delete(); } - } diff --git a/app/Handlers/Observer/BudgetObserver.php b/app/Handlers/Observer/BudgetObserver.php index 1c8dc4791e..d13abec746 100644 --- a/app/Handlers/Observer/BudgetObserver.php +++ b/app/Handlers/Observer/BudgetObserver.php @@ -24,28 +24,30 @@ declare(strict_types=1); namespace FireflyIII\Handlers\Observer; use FireflyIII\Models\Budget; +use FireflyIII\Models\BudgetLimit; /** * Class BudgetObserver */ class BudgetObserver { - /** - * @param Budget $budget - * - * @return void - */ public function deleting(Budget $budget): void { app('log')->debug('Observe "deleting" of a budget.'); foreach ($budget->attachments()->get() as $attachment) { $attachment->delete(); } + $budgetLimits = $budget->budgetlimits()->get(); - $budget->budgetlimits()->delete(); + /** @var BudgetLimit $budgetLimit */ + foreach ($budgetLimits as $budgetLimit) { + // this loop exists so several events are fired. + $budgetLimit->delete(); + } $budget->notes()->delete(); $budget->autoBudgets()->delete(); - } + // recalculate available budgets. + } } diff --git a/app/Handlers/Observer/CategoryObserver.php b/app/Handlers/Observer/CategoryObserver.php index d1029ef2cf..0cc866761a 100644 --- a/app/Handlers/Observer/CategoryObserver.php +++ b/app/Handlers/Observer/CategoryObserver.php @@ -30,11 +30,6 @@ use FireflyIII\Models\Category; */ class CategoryObserver { - /** - * @param Category $category - * - * @return void - */ public function deleting(Category $category): void { app('log')->debug('Observe "deleting" of a category.'); @@ -43,5 +38,4 @@ class CategoryObserver } $category->notes()->delete(); } - } diff --git a/app/Handlers/Observer/PiggyBankObserver.php b/app/Handlers/Observer/PiggyBankObserver.php index e448e8378b..7e9b879892 100644 --- a/app/Handlers/Observer/PiggyBankObserver.php +++ b/app/Handlers/Observer/PiggyBankObserver.php @@ -31,28 +31,19 @@ use FireflyIII\Models\PiggyBankRepetition; */ class PiggyBankObserver { - /** - * @param PiggyBank $piggyBank - * - * @return void - */ public function created(PiggyBank $piggyBank): void { app('log')->debug('Observe "created" of a piggy bank.'); - $repetition = new PiggyBankRepetition(); + $repetition = new PiggyBankRepetition(); $repetition->piggyBank()->associate($piggyBank); $repetition->startdate = $piggyBank->startdate; $repetition->targetdate = $piggyBank->targetdate; - $repetition->currentamount = 0; + $repetition->currentamount = '0'; $repetition->save(); } /** * Also delete related objects. - * - * @param PiggyBank $piggyBank - * - * @return void */ public function deleting(PiggyBank $piggyBank): void { @@ -67,5 +58,4 @@ class PiggyBankObserver $piggyBank->notes()->delete(); } - } diff --git a/app/Handlers/Observer/RecurrenceObserver.php b/app/Handlers/Observer/RecurrenceObserver.php index 086a79966a..c892315f60 100644 --- a/app/Handlers/Observer/RecurrenceObserver.php +++ b/app/Handlers/Observer/RecurrenceObserver.php @@ -30,11 +30,6 @@ use FireflyIII\Models\Recurrence; */ class RecurrenceObserver { - /** - * @param Recurrence $recurrence - * - * @return void - */ public function deleting(Recurrence $recurrence): void { app('log')->debug('Observe "deleting" of a recurrence.'); @@ -48,7 +43,5 @@ class RecurrenceObserver $transaction->delete(); } $recurrence->notes()->delete(); - } - } diff --git a/app/Handlers/Observer/RecurrenceTransactionObserver.php b/app/Handlers/Observer/RecurrenceTransactionObserver.php index 45cb092f63..f88cb38b5d 100644 --- a/app/Handlers/Observer/RecurrenceTransactionObserver.php +++ b/app/Handlers/Observer/RecurrenceTransactionObserver.php @@ -30,15 +30,9 @@ use FireflyIII\Models\RecurrenceTransaction; */ class RecurrenceTransactionObserver { - /** - * @param RecurrenceTransaction $transaction - * - * @return void - */ public function deleting(RecurrenceTransaction $transaction): void { app('log')->debug('Observe "deleting" of a recurrence transaction.'); $transaction->recurrenceTransactionMeta()->delete(); } - } diff --git a/app/Handlers/Observer/RuleGroupObserver.php b/app/Handlers/Observer/RuleGroupObserver.php index 1b14d7276a..c7e1c223bf 100644 --- a/app/Handlers/Observer/RuleGroupObserver.php +++ b/app/Handlers/Observer/RuleGroupObserver.php @@ -30,18 +30,11 @@ use FireflyIII\Models\RuleGroup; */ class RuleGroupObserver { - /** - * @param RuleGroup $ruleGroup - * - * @return void - */ public function deleting(RuleGroup $ruleGroup): void { app('log')->debug('Observe "deleting" of a rule group.'); foreach ($ruleGroup->rules()->get() as $rule) { $rule->delete(); } - } - } diff --git a/app/Handlers/Observer/RuleObserver.php b/app/Handlers/Observer/RuleObserver.php index 098b7037d1..3121a6b62e 100644 --- a/app/Handlers/Observer/RuleObserver.php +++ b/app/Handlers/Observer/RuleObserver.php @@ -30,16 +30,10 @@ use FireflyIII\Models\Rule; */ class RuleObserver { - /** - * @param Rule $rule - * - * @return void - */ public function deleting(Rule $rule): void { app('log')->debug('Observe "deleting" of a rule.'); $rule->ruleActions()->delete(); $rule->ruleTriggers()->delete(); } - } diff --git a/app/Handlers/Observer/TagObserver.php b/app/Handlers/Observer/TagObserver.php index 85c6c16c63..1994a30aa1 100644 --- a/app/Handlers/Observer/TagObserver.php +++ b/app/Handlers/Observer/TagObserver.php @@ -30,11 +30,6 @@ use FireflyIII\Models\Tag; */ class TagObserver { - /** - * @param Tag $tag - * - * @return void - */ public function deleting(Tag $tag): void { app('log')->debug('Observe "deleting" of a tag.'); @@ -44,7 +39,5 @@ class TagObserver } $tag->locations()->delete(); - } - } diff --git a/app/Handlers/Observer/TransactionGroupObserver.php b/app/Handlers/Observer/TransactionGroupObserver.php index 5b351cec06..418356668c 100644 --- a/app/Handlers/Observer/TransactionGroupObserver.php +++ b/app/Handlers/Observer/TransactionGroupObserver.php @@ -37,5 +37,4 @@ class TransactionGroupObserver $journal->delete(); } } - } diff --git a/app/Handlers/Observer/TransactionJournalObserver.php b/app/Handlers/Observer/TransactionJournalObserver.php index c24f1089da..3bb106783e 100644 --- a/app/Handlers/Observer/TransactionJournalObserver.php +++ b/app/Handlers/Observer/TransactionJournalObserver.php @@ -30,17 +30,12 @@ use FireflyIII\Models\TransactionJournal; */ class TransactionJournalObserver { - /** - * @param TransactionJournal $transactionJournal - * - * @return void - */ public function deleting(TransactionJournal $transactionJournal): void { app('log')->debug('Observe "deleting" of a transaction journal.'); // to make sure the listener doesn't get back to use and loop - TransactionJournal::withoutEvents(function () use ($transactionJournal) { + TransactionJournal::withoutEvents(static function () use ($transactionJournal): void { foreach ($transactionJournal->transactions()->get() as $transaction) { $transaction->delete(); } @@ -53,5 +48,4 @@ class TransactionJournalObserver $transactionJournal->destJournalLinks()->delete(); $transactionJournal->auditLogEntries()->delete(); } - } diff --git a/app/Handlers/Observer/TransactionObserver.php b/app/Handlers/Observer/TransactionObserver.php index d1d117f1a0..1c39335bc1 100644 --- a/app/Handlers/Observer/TransactionObserver.php +++ b/app/Handlers/Observer/TransactionObserver.php @@ -30,10 +30,9 @@ use FireflyIII\Models\Transaction; */ class TransactionObserver { - public function deleting(Transaction $transaction): void + public function deleting(?Transaction $transaction): void { app('log')->debug('Observe "deleting" of a transaction.'); $transaction?->transactionJournal?->delete(); } - } diff --git a/app/Handlers/Observer/WebhookMessageObserver.php b/app/Handlers/Observer/WebhookMessageObserver.php index 5744e3e5f8..6248dc4d3c 100644 --- a/app/Handlers/Observer/WebhookMessageObserver.php +++ b/app/Handlers/Observer/WebhookMessageObserver.php @@ -30,11 +30,6 @@ use FireflyIII\Models\WebhookMessage; */ class WebhookMessageObserver { - /** - * @param WebhookMessage $webhookMessage - * - * @return void - */ public function deleting(WebhookMessage $webhookMessage): void { app('log')->debug('Observe "deleting" of a webhook message.'); diff --git a/app/Handlers/Observer/WebhookObserver.php b/app/Handlers/Observer/WebhookObserver.php index dd19ebacb5..6a0799db99 100644 --- a/app/Handlers/Observer/WebhookObserver.php +++ b/app/Handlers/Observer/WebhookObserver.php @@ -30,17 +30,11 @@ use FireflyIII\Models\Webhook; */ class WebhookObserver { - /** - * @param Webhook $webhook - * - * @return void - */ public function deleting(Webhook $webhook): void { app('log')->debug('Observe "deleting" of a webhook.'); - foreach ($webhook->webhookMessages() as $message) { + foreach ($webhook->webhookMessages()->get() as $message) { $message->delete(); } } - } diff --git a/app/Helpers/Attachments/AttachmentHelper.php b/app/Helpers/Attachments/AttachmentHelper.php index 8c9c038992..b3b22d058a 100644 --- a/app/Helpers/Attachments/AttachmentHelper.php +++ b/app/Helpers/Attachments/AttachmentHelper.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Helpers\Attachments; -use Crypt; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Attachment; use FireflyIII\Models\PiggyBank; @@ -48,13 +47,10 @@ class AttachmentHelper implements AttachmentHelperInterface protected array $allowedMimes = []; protected int $maxUploadSize = 0; - /** @var Filesystem The disk where attachments are stored. */ - protected $uploadDisk; + protected Filesystem $uploadDisk; /** * AttachmentHelper constructor. - * - */ public function __construct() { @@ -68,17 +64,13 @@ class AttachmentHelper implements AttachmentHelperInterface /** * Returns the content of an attachment. - * - * - * @param Attachment $attachment - * - * @return string */ public function getAttachmentContent(Attachment $attachment): string { $encryptedData = (string)$this->uploadDisk->get(sprintf('at-%d.data', $attachment->id)); + try { - $unencryptedData = Crypt::decrypt($encryptedData); // verified + $unencryptedData = \Crypt::decrypt($encryptedData); // verified } catch (DecryptException $e) { Log::error(sprintf('Could not decrypt data of attachment #%d: %s', $attachment->id, $e->getMessage())); $unencryptedData = $encryptedData; @@ -89,20 +81,14 @@ class AttachmentHelper implements AttachmentHelperInterface /** * Returns the file path relative to upload disk for an attachment, - * - * @param Attachment $attachment - * - * @return string */ public function getAttachmentLocation(Attachment $attachment): string { - return sprintf('%sat-%d.data', DIRECTORY_SEPARATOR, (int)$attachment->id); + return sprintf('%sat-%d.data', \DIRECTORY_SEPARATOR, $attachment->id); } /** * Get all attachments. - * - * @return Collection */ public function getAttachments(): Collection { @@ -111,8 +97,6 @@ class AttachmentHelper implements AttachmentHelperInterface /** * Get all errors. - * - * @return MessageBag */ public function getErrors(): MessageBag { @@ -121,8 +105,6 @@ class AttachmentHelper implements AttachmentHelperInterface /** * Get all messages. - * - * @return MessageBag */ public function getMessages(): MessageBag { @@ -131,15 +113,11 @@ class AttachmentHelper implements AttachmentHelperInterface /** * Uploads a file as a string. - * - * @param Attachment $attachment - * @param string $content - * - * @return bool */ public function saveAttachmentFromApi(Attachment $attachment, string $content): bool { - $resource = tmpfile(); + Log::debug(sprintf('Now in %s', __METHOD__)); + $resource = tmpfile(); if (false === $resource) { Log::error('Cannot create temp-file for file upload.'); @@ -152,51 +130,65 @@ class AttachmentHelper implements AttachmentHelperInterface return false; } - $path = stream_get_meta_data($resource)['uri']; - fwrite($resource, $content); - $finfo = finfo_open(FILEINFO_MIME_TYPE); - $mime = finfo_file($finfo, $path); - $allowedMime = config('firefly.allowedMimes'); + $path = stream_get_meta_data($resource)['uri']; + Log::debug(sprintf('Path is %s', $path)); + $result = fwrite($resource, $content); + if (false === $result) { + Log::error('Could not write temp file.'); + + return false; + } + Log::debug(sprintf('Wrote %d bytes to temp file.', $result)); + $finfo = finfo_open(FILEINFO_MIME_TYPE); + if (false === $finfo) { + Log::error('Could not open finfo.'); + fclose($resource); + + return false; + } + $mime = (string)finfo_file($finfo, $path); + $allowedMime = config('firefly.allowedMimes'); if (!in_array($mime, $allowedMime, true)) { Log::error(sprintf('Mime type %s is not allowed for API file upload.', $mime)); fclose($resource); return false; } + Log::debug(sprintf('Found mime "%s" in file "%s"', $mime, $path)); // is allowed? Save the file, without encryption. - $parts = explode('/', $attachment->fileName()); - $file = $parts[count($parts) - 1]; + $parts = explode('/', $attachment->fileName()); + $file = $parts[count($parts) - 1]; + Log::debug(sprintf('Write file to disk in file named "%s"', $file)); $this->uploadDisk->put($file, $content); // update attachment. - $attachment->md5 = md5_file($path); + $attachment->md5 = (string)md5_file($path); $attachment->mime = $mime; $attachment->size = strlen($content); $attachment->uploaded = true; $attachment->save(); + Log::debug('Done!'); + return true; } /** * Save attachments that get uploaded with models, through the app. * - * @param object $model - * @param array|null $files - * - * @return bool * @throws FireflyException */ public function saveAttachmentsForModel(object $model, ?array $files): bool { - if (!($model instanceof Model)) { + if (!$model instanceof Model) { return false; } Log::debug(sprintf('Now in saveAttachmentsForModel for model %s', get_class($model))); if (is_array($files)) { Log::debug('$files is an array.'); - /** @var UploadedFile $entry */ + + /** @var null|UploadedFile $entry */ foreach ($files as $entry) { if (null !== $entry) { $this->processFile($entry, $model); @@ -214,10 +206,6 @@ class AttachmentHelper implements AttachmentHelperInterface /** * Process the upload of a file. * - * @param UploadedFile $file - * @param Model $model - * - * @return Attachment|null * @throws FireflyException * @throws EncryptException */ @@ -227,16 +215,16 @@ class AttachmentHelper implements AttachmentHelperInterface $validation = $this->validateUpload($file, $model); $attachment = null; if (false !== $validation) { - $user = $model->user; // @phpstan-ignore-line + $user = $model->user; // ignore lines about polymorphic calls. if ($model instanceof PiggyBank) { $user = $model->account->user; } - $attachment = new Attachment(); // create Attachment object. + $attachment = new Attachment(); // create Attachment object. $attachment->user()->associate($user); $attachment->attachable()->associate($model); - $attachment->md5 = md5_file($file->getRealPath()); + $attachment->md5 = (string)md5_file($file->getRealPath()); $attachment->filename = $file->getClientOriginalName(); $attachment->mime = $file->getMimeType(); $attachment->size = $file->getSize(); @@ -244,14 +232,14 @@ class AttachmentHelper implements AttachmentHelperInterface $attachment->save(); Log::debug('Created attachment:', $attachment->toArray()); - $fileObject = $file->openFile(); + $fileObject = $file->openFile(); $fileObject->rewind(); if (0 === $file->getSize()) { throw new FireflyException('Cannot upload empty or non-existent file.'); } - $content = $fileObject->fread($file->getSize()); + $content = (string)$fileObject->fread($file->getSize()); Log::debug(sprintf('Full file length is %d and upload size is %d.', strlen($content), $file->getSize())); // store it without encryption. @@ -260,8 +248,8 @@ class AttachmentHelper implements AttachmentHelperInterface $attachment->save(); $this->attachments->push($attachment); - $name = e($file->getClientOriginalName()); // add message: - $msg = (string)trans('validation.file_attached', ['name' => $name]); + $name = e($file->getClientOriginalName()); // add message: + $msg = (string)trans('validation.file_attached', ['name' => $name]); $this->messages->add('attachments', $msg); } @@ -270,11 +258,6 @@ class AttachmentHelper implements AttachmentHelperInterface /** * Verify if the file was uploaded correctly. - * - * @param UploadedFile $file - * @param Model $model - * - * @return bool */ protected function validateUpload(UploadedFile $file, Model $model): bool { @@ -288,7 +271,6 @@ class AttachmentHelper implements AttachmentHelperInterface $result = false; } - // can't seem to reach this point. if (true === $result && !$this->validSize($file)) { $result = false; @@ -303,22 +285,18 @@ class AttachmentHelper implements AttachmentHelperInterface /** * Verify if the mime of a file is valid. - * - * @param UploadedFile $file - * - * @return bool */ protected function validMime(UploadedFile $file): bool { Log::debug('Now in validMime()'); - $mime = e($file->getMimeType()); - $name = e($file->getClientOriginalName()); + $mime = e($file->getMimeType()); + $name = e($file->getClientOriginalName()); Log::debug(sprintf('Name is %s, and mime is %s', $name, $mime)); Log::debug('Valid mimes are', $this->allowedMimes); $result = true; if (!in_array($mime, $this->allowedMimes, true)) { - $msg = (string)trans('validation.file_invalid_mime', ['name' => $name, 'mime' => $mime]); + $msg = (string)trans('validation.file_invalid_mime', ['name' => $name, 'mime' => $mime]); $this->errors->add('attachments', $msg); Log::error($msg); @@ -330,11 +308,6 @@ class AttachmentHelper implements AttachmentHelperInterface /** * Verify if the size of a file is valid. - * - * - * @param UploadedFile $file - * - * @return bool */ protected function validSize(UploadedFile $file): bool { @@ -342,7 +315,7 @@ class AttachmentHelper implements AttachmentHelperInterface $name = e($file->getClientOriginalName()); $result = true; if ($size > $this->maxUploadSize) { - $msg = (string)trans('validation.file_too_large', ['name' => $name]); + $msg = (string)trans('validation.file_too_large', ['name' => $name]); $this->errors->add('attachments', $msg); Log::error($msg); @@ -354,28 +327,23 @@ class AttachmentHelper implements AttachmentHelperInterface /** * Check if a model already has this file attached. - * - * @param UploadedFile $file - * @param Model $model - * - * @return bool */ protected function hasFile(UploadedFile $file, Model $model): bool { - $md5 = md5_file($file->getRealPath()); - $name = $file->getClientOriginalName(); - $class = get_class($model); - $count = 0; + $md5 = md5_file($file->getRealPath()); + $name = $file->getClientOriginalName(); + $class = get_class($model); + $count = 0; // ignore lines about polymorphic calls. if ($model instanceof PiggyBank) { $count = $model->account->user->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count(); } - if (!($model instanceof PiggyBank)) { - $count = $model->user->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count(); // @phpstan-ignore-line + if (!$model instanceof PiggyBank) { + $count = $model->user->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count(); } $result = false; if ($count > 0) { - $msg = (string)trans('validation.file_already_attached', ['name' => $name]); + $msg = (string)trans('validation.file_already_attached', ['name' => $name]); $this->errors->add('attachments', $msg); Log::error($msg); $result = true; diff --git a/app/Helpers/Attachments/AttachmentHelperInterface.php b/app/Helpers/Attachments/AttachmentHelperInterface.php index 766193e86b..4640d5deb8 100644 --- a/app/Helpers/Attachments/AttachmentHelperInterface.php +++ b/app/Helpers/Attachments/AttachmentHelperInterface.php @@ -34,60 +34,36 @@ interface AttachmentHelperInterface { /** * Get content of an attachment. - * - * @param Attachment $attachment - * - * @return string */ public function getAttachmentContent(Attachment $attachment): string; /** * Get the location of an attachment. - * - * @param Attachment $attachment - * - * @return string */ public function getAttachmentLocation(Attachment $attachment): string; /** * Get all attachments. - * - * @return Collection */ public function getAttachments(): Collection; /** * Get all errors. - * - * @return MessageBag */ public function getErrors(): MessageBag; /** * Get all messages/ - * - * @return MessageBag */ public function getMessages(): MessageBag; /** * Uploads a file as a string. - * - * @param Attachment $attachment - * @param string $content - * - * @return bool */ public function saveAttachmentFromApi(Attachment $attachment, string $content): bool; /** * Save attachments that got uploaded. - * - * @param object $model - * @param null|array $files - * - * @return bool */ public function saveAttachmentsForModel(object $model, ?array $files): bool; } diff --git a/app/Helpers/Collector/Extensions/AccountCollection.php b/app/Helpers/Collector/Extensions/AccountCollection.php index afb2466ea4..1de78d7f31 100644 --- a/app/Helpers/Collector/Extensions/AccountCollection.php +++ b/app/Helpers/Collector/Extensions/AccountCollection.php @@ -35,10 +35,6 @@ trait AccountCollection { /** * These accounts must not be included. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ public function excludeAccounts(Collection $accounts): GroupCollectorInterface { @@ -55,10 +51,6 @@ trait AccountCollection /** * These accounts must not be destination accounts. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ public function excludeDestinationAccounts(Collection $accounts): GroupCollectorInterface { @@ -74,10 +66,6 @@ trait AccountCollection /** * These accounts must not be source accounts. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ public function excludeSourceAccounts(Collection $accounts): GroupCollectorInterface { @@ -93,22 +81,18 @@ trait AccountCollection /** * Define which accounts can be part of the source and destination transactions. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ public function setAccounts(Collection $accounts): GroupCollectorInterface { if ($accounts->count() > 0) { $accountIds = $accounts->pluck('id')->toArray(); $this->query->where( - static function (EloquentBuilder $query) use ($accountIds) { + static function (EloquentBuilder $query) use ($accountIds): void { // @phpstan-ignore-line $query->whereIn('source.account_id', $accountIds); $query->orWhereIn('destination.account_id', $accountIds); } ); - //app('log')->debug(sprintf('GroupCollector: setAccounts: %s', implode(', ', $accountIds))); + // app('log')->debug(sprintf('GroupCollector: setAccounts: %s', implode(', ', $accountIds))); } return $this; @@ -116,17 +100,13 @@ trait AccountCollection /** * Both source AND destination must be in this list of accounts. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ public function setBothAccounts(Collection $accounts): GroupCollectorInterface { if ($accounts->count() > 0) { $accountIds = $accounts->pluck('id')->toArray(); $this->query->where( - static function (EloquentBuilder $query) use ($accountIds) { + static function (EloquentBuilder $query) use ($accountIds): void { // @phpstan-ignore-line $query->whereIn('source.account_id', $accountIds); $query->whereIn('destination.account_id', $accountIds); } @@ -139,10 +119,6 @@ trait AccountCollection /** * Define which accounts can be part of the source and destination transactions. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ public function setDestinationAccounts(Collection $accounts): GroupCollectorInterface { @@ -158,22 +134,18 @@ trait AccountCollection /** * Define which accounts can NOT be part of the source and destination transactions. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ public function setNotAccounts(Collection $accounts): GroupCollectorInterface { if ($accounts->count() > 0) { $accountIds = $accounts->pluck('id')->toArray(); $this->query->where( - static function (EloquentBuilder $query) use ($accountIds) { + static function (EloquentBuilder $query) use ($accountIds): void { // @phpstan-ignore-line $query->whereNotIn('source.account_id', $accountIds); $query->whereNotIn('destination.account_id', $accountIds); } ); - //app('log')->debug(sprintf('GroupCollector: setAccounts: %s', implode(', ', $accountIds))); + // app('log')->debug(sprintf('GroupCollector: setAccounts: %s', implode(', ', $accountIds))); } return $this; @@ -181,10 +153,6 @@ trait AccountCollection /** * Define which accounts can be part of the source and destination transactions. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ public function setSourceAccounts(Collection $accounts): GroupCollectorInterface { @@ -200,28 +168,24 @@ trait AccountCollection /** * Either account can be set, but NOT both. This effectively excludes internal transfers. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ public function setXorAccounts(Collection $accounts): GroupCollectorInterface { if ($accounts->count() > 0) { $accountIds = $accounts->pluck('id')->toArray(); $this->query->where( - static function (EloquentBuilder $q1) use ($accountIds) { + static function (EloquentBuilder $q1) use ($accountIds): void { // @phpstan-ignore-line // sourceAccount is in the set, and destination is NOT. $q1->where( - static function (EloquentBuilder $q2) use ($accountIds) { + static function (EloquentBuilder $q2) use ($accountIds): void { $q2->whereIn('source.account_id', $accountIds); $q2->whereNotIn('destination.account_id', $accountIds); } ); // destination is in the set, and source is NOT $q1->orWhere( - static function (EloquentBuilder $q3) use ($accountIds) { + static function (EloquentBuilder $q3) use ($accountIds): void { $q3->whereNotIn('source.account_id', $accountIds); $q3->whereIn('destination.account_id', $accountIds); } @@ -237,8 +201,6 @@ trait AccountCollection /** * Will include the source and destination account names and types. - * - * @return GroupCollectorInterface */ public function withAccountInformation(): GroupCollectorInterface { @@ -249,9 +211,9 @@ trait AccountCollection $this->query->leftJoin('account_types as source_account_type', 'source_account_type.id', '=', 'source_account.account_type_id'); // add source account fields: - $this->fields[] = 'source_account.name as source_account_name'; - $this->fields[] = 'source_account.iban as source_account_iban'; - $this->fields[] = 'source_account_type.type as source_account_type'; + $this->fields[] = 'source_account.name as source_account_name'; + $this->fields[] = 'source_account.iban as source_account_iban'; + $this->fields[] = 'source_account_type.type as source_account_type'; // same for dest $this->query->leftJoin('accounts as dest_account', 'dest_account.id', '=', 'destination.account_id'); diff --git a/app/Helpers/Collector/Extensions/AmountCollection.php b/app/Helpers/Collector/Extensions/AmountCollection.php index 7e71d6e422..6daf0192a7 100644 --- a/app/Helpers/Collector/Extensions/AmountCollection.php +++ b/app/Helpers/Collector/Extensions/AmountCollection.php @@ -34,15 +34,11 @@ trait AmountCollection { /** * Get transactions with a specific amount. - * - * @param string $amount - * - * @return GroupCollectorInterface */ public function amountIs(string $amount): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($amount) { + static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line $q->where('source.amount', app('steam')->negative($amount)); } ); @@ -50,13 +46,10 @@ trait AmountCollection return $this; } - /** - * @inheritDoc - */ public function amountIsNot(string $amount): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($amount) { + static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line $q->where('source.amount', '!=', app('steam')->negative($amount)); } ); @@ -66,15 +59,11 @@ trait AmountCollection /** * Get transactions where the amount is less than. - * - * @param string $amount - * - * @return GroupCollectorInterface */ public function amountLess(string $amount): GroupCollectorInterface { $this->query->where( - function (EloquentBuilder $q) use ($amount) { + static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line $q->where('destination.amount', '<=', app('steam')->positive($amount)); } ); @@ -84,15 +73,11 @@ trait AmountCollection /** * Get transactions where the amount is more than. - * - * @param string $amount - * - * @return GroupCollectorInterface */ public function amountMore(string $amount): GroupCollectorInterface { $this->query->where( - function (EloquentBuilder $q) use ($amount) { + static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line $q->where('destination.amount', '>=', app('steam')->positive($amount)); } ); @@ -102,15 +87,11 @@ trait AmountCollection /** * Get transactions with a specific foreign amount. - * - * @param string $amount - * - * @return GroupCollectorInterface */ public function foreignAmountIs(string $amount): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($amount) { + static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line $q->whereNotNull('source.foreign_amount'); $q->where('source.foreign_amount', app('steam')->negative($amount)); } @@ -121,15 +102,11 @@ trait AmountCollection /** * Get transactions with a specific foreign amount. - * - * @param string $amount - * - * @return GroupCollectorInterface */ public function foreignAmountIsNot(string $amount): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($amount) { + static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line $q->whereNull('source.foreign_amount'); $q->orWhere('source.foreign_amount', '!=', app('steam')->negative($amount)); } @@ -140,15 +117,11 @@ trait AmountCollection /** * Get transactions where the amount is less than. - * - * @param string $amount - * - * @return GroupCollectorInterface */ public function foreignAmountLess(string $amount): GroupCollectorInterface { $this->query->where( - function (EloquentBuilder $q) use ($amount) { + static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line $q->whereNotNull('destination.foreign_amount'); $q->where('destination.foreign_amount', '<=', app('steam')->positive($amount)); } @@ -159,15 +132,11 @@ trait AmountCollection /** * Get transactions where the amount is more than. - * - * @param string $amount - * - * @return GroupCollectorInterface */ public function foreignAmountMore(string $amount): GroupCollectorInterface { $this->query->where( - function (EloquentBuilder $q) use ($amount) { + static function (EloquentBuilder $q) use ($amount): void { // @phpstan-ignore-line $q->whereNotNull('destination.foreign_amount'); $q->where('destination.foreign_amount', '>=', app('steam')->positive($amount)); } diff --git a/app/Helpers/Collector/Extensions/AttachmentCollection.php b/app/Helpers/Collector/Extensions/AttachmentCollection.php index 161422d107..6140a20ba4 100644 --- a/app/Helpers/Collector/Extensions/AttachmentCollection.php +++ b/app/Helpers/Collector/Extensions/AttachmentCollection.php @@ -29,23 +29,24 @@ use FireflyIII\Models\Attachment; use FireflyIII\Models\TransactionJournal; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; -use Illuminate\Support\Facades\Log; /** * Trait AttachmentCollection */ trait AttachmentCollection { - /** - * @param string $name - * - * @return GroupCollectorInterface - */ public function attachmentNameContains(string $name): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($name): bool { + + /** + * @param int $index + * @param array $object + * + * @return bool + */ + $filter = static function (array $object) use ($name): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ @@ -59,6 +60,7 @@ trait AttachmentCollection } } } + return false; }; $this->postFilters[] = $filter; @@ -68,12 +70,10 @@ trait AttachmentCollection /** * Has attachments - * - * @return GroupCollectorInterface */ public function hasAttachments(): GroupCollectorInterface { - Log::debug('Add filter on attachment ID.'); + app('log')->debug('Add filter on attachment ID.'); $this->joinAttachmentTables(); $this->query->whereNotNull('attachments.attachable_id'); $this->query->whereNull('attachments.deleted_at'); @@ -90,20 +90,18 @@ trait AttachmentCollection // join some extra tables: $this->hasJoinedAttTables = true; $this->query->leftJoin('attachments', 'attachments.attachable_id', '=', 'transaction_journals.id') - ->where( - static function (EloquentBuilder $q1) { - $q1->where('attachments.attachable_type', TransactionJournal::class); - $q1->where('attachments.uploaded', true); - $q1->whereNull('attachments.deleted_at'); - $q1->orWhereNull('attachments.attachable_type'); - } - ); + ->where( + static function (EloquentBuilder $q1): void { // @phpstan-ignore-line + $q1->where('attachments.attachable_type', TransactionJournal::class); + $q1->where('attachments.uploaded', true); + $q1->whereNull('attachments.deleted_at'); + $q1->orWhereNull('attachments.attachable_type'); + } + ) + ; } } - /** - * @inheritDoc - */ public function withAttachmentInformation(): GroupCollectorInterface { $this->fields[] = 'attachments.id as attachment_id'; @@ -115,16 +113,20 @@ trait AttachmentCollection return $this; } - /** - * @param string $name - * - * @return GroupCollectorInterface - */ public function attachmentNameDoesNotContain(string $name): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($name): bool { + + /** + * @param int $index + * @param array $object + * + * @return bool + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + $filter = static function (array $object) use ($name): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ @@ -138,6 +140,7 @@ trait AttachmentCollection } } } + return false; }; $this->postFilters[] = $filter; @@ -145,16 +148,20 @@ trait AttachmentCollection return $this; } - /** - * @param string $name - * - * @return GroupCollectorInterface - */ public function attachmentNameDoesNotEnd(string $name): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($name): bool { + + /** + * @param int $index + * @param array $object + * + * @return bool + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + $filter = static function (array $object) use ($name): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ @@ -168,6 +175,7 @@ trait AttachmentCollection } } } + return false; }; $this->postFilters[] = $filter; @@ -175,16 +183,20 @@ trait AttachmentCollection return $this; } - /** - * @param string $name - * - * @return GroupCollectorInterface - */ public function attachmentNameDoesNotStart(string $name): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($name): bool { + + /** + * @param int $index + * @param array $object + * + * @return bool + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + $filter = static function (array $object) use ($name): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ @@ -198,6 +210,7 @@ trait AttachmentCollection } } } + return false; }; $this->postFilters[] = $filter; @@ -205,16 +218,11 @@ trait AttachmentCollection return $this; } - /** - * @param string $name - * - * @return GroupCollectorInterface - */ public function attachmentNameEnds(string $name): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($name): bool { + $filter = static function (array $object) use ($name): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ @@ -228,6 +236,7 @@ trait AttachmentCollection } } } + return false; }; $this->postFilters[] = $filter; @@ -235,16 +244,11 @@ trait AttachmentCollection return $this; } - /** - * @param string $name - * - * @return GroupCollectorInterface - */ public function attachmentNameIs(string $name): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($name): bool { + $filter = static function (array $object) use ($name): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ @@ -255,6 +259,7 @@ trait AttachmentCollection } } } + return false; }; $this->postFilters[] = $filter; @@ -262,16 +267,11 @@ trait AttachmentCollection return $this; } - /** - * @param string $name - * - * @return GroupCollectorInterface - */ public function attachmentNameIsNot(string $name): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($name): bool { + $filter = static function (array $object) use ($name): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ @@ -282,6 +282,7 @@ trait AttachmentCollection } } } + return false; }; $this->postFilters[] = $filter; @@ -289,16 +290,11 @@ trait AttachmentCollection return $this; } - /** - * @param string $name - * - * @return GroupCollectorInterface - */ public function attachmentNameStarts(string $name): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($name): bool { + $filter = static function (array $object) use ($name): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ @@ -312,6 +308,7 @@ trait AttachmentCollection } } } + return false; }; $this->postFilters[] = $filter; @@ -319,26 +316,23 @@ trait AttachmentCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function attachmentNotesAre(string $value): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($value): bool { + $filter = static function (array $object) use ($value): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ foreach ($transaction['attachments'] as $attachment) { - /** @var Attachment|null $object */ + /** @var null|Attachment $object */ $object = auth()->user()->attachments()->find($attachment['id']); $notes = (string)$object?->notes()->first()?->text; - return $notes !== '' && $notes === $value; + + return '' !== $notes && $notes === $value; } } + return false; }; $this->postFilters[] = $filter; @@ -346,26 +340,23 @@ trait AttachmentCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function attachmentNotesAreNot(string $value): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($value): bool { + $filter = static function (array $object) use ($value): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ foreach ($transaction['attachments'] as $attachment) { - /** @var Attachment|null $object */ + /** @var null|Attachment $object */ $object = auth()->user()->attachments()->find($attachment['id']); $notes = (string)$object?->notes()->first()?->text; - return $notes !== '' && $notes !== $value; + + return '' !== $notes && $notes !== $value; } } + return false; }; $this->postFilters[] = $filter; @@ -373,26 +364,23 @@ trait AttachmentCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function attachmentNotesContains(string $value): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($value): bool { + $filter = static function (array $object) use ($value): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ foreach ($transaction['attachments'] as $attachment) { - /** @var Attachment|null $object */ + /** @var null|Attachment $object */ $object = auth()->user()->attachments()->find($attachment['id']); $notes = (string)$object?->notes()->first()?->text; - return $notes !== '' && str_contains(strtolower($notes), strtolower($value)); + + return '' !== $notes && str_contains(strtolower($notes), strtolower($value)); } } + return false; }; $this->postFilters[] = $filter; @@ -400,26 +388,23 @@ trait AttachmentCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function attachmentNotesDoNotContain(string $value): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($value): bool { + $filter = static function (array $object) use ($value): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ foreach ($transaction['attachments'] as $attachment) { - /** @var Attachment|null $object */ + /** @var null|Attachment $object */ $object = auth()->user()->attachments()->find($attachment['id']); $notes = (string)$object?->notes()->first()?->text; - return $notes !== '' && !str_contains(strtolower($notes), strtolower($value)); + + return '' !== $notes && !str_contains(strtolower($notes), strtolower($value)); } } + return false; }; $this->postFilters[] = $filter; @@ -427,26 +412,23 @@ trait AttachmentCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function attachmentNotesDoNotEnd(string $value): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($value): bool { + $filter = static function (array $object) use ($value): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ foreach ($transaction['attachments'] as $attachment) { - /** @var Attachment|null $object */ + /** @var null|Attachment $object */ $object = auth()->user()->attachments()->find($attachment['id']); $notes = (string)$object?->notes()->first()?->text; - return $notes !== '' && !str_ends_with(strtolower($notes), strtolower($value)); + + return '' !== $notes && !str_ends_with(strtolower($notes), strtolower($value)); } } + return false; }; $this->postFilters[] = $filter; @@ -454,26 +436,23 @@ trait AttachmentCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function attachmentNotesDoNotStart(string $value): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($value): bool { + $filter = static function (array $object) use ($value): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ foreach ($transaction['attachments'] as $attachment) { - /** @var Attachment|null $object */ + /** @var null|Attachment $object */ $object = auth()->user()->attachments()->find($attachment['id']); $notes = (string)$object?->notes()->first()?->text; - return $notes !== '' && !str_starts_with(strtolower($notes), strtolower($value)); + + return '' !== $notes && !str_starts_with(strtolower($notes), strtolower($value)); } } + return false; }; $this->postFilters[] = $filter; @@ -481,26 +460,23 @@ trait AttachmentCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function attachmentNotesEnds(string $value): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($value): bool { + $filter = static function (array $object) use ($value): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ foreach ($transaction['attachments'] as $attachment) { - /** @var Attachment|null $object */ + /** @var null|Attachment $object */ $object = auth()->user()->attachments()->find($attachment['id']); $notes = (string)$object?->notes()->first()?->text; - return $notes !== '' && str_ends_with(strtolower($notes), strtolower($value)); + + return '' !== $notes && str_ends_with(strtolower($notes), strtolower($value)); } } + return false; }; $this->postFilters[] = $filter; @@ -508,26 +484,23 @@ trait AttachmentCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function attachmentNotesStarts(string $value): GroupCollectorInterface { $this->hasAttachments(); $this->withAttachmentInformation(); - $filter = function (int $index, array $object) use ($value): bool { + $filter = static function (array $object) use ($value): bool { /** @var array $transaction */ foreach ($object['transactions'] as $transaction) { /** @var array $attachment */ foreach ($transaction['attachments'] as $attachment) { - /** @var Attachment|null $object */ + /** @var null|Attachment $object */ $object = auth()->user()->attachments()->find($attachment['id']); $notes = (string)$object?->notes()->first()?->text; - return $notes !== '' && str_starts_with(strtolower($notes), strtolower($value)); + + return '' !== $notes && str_starts_with(strtolower($notes), strtolower($value)); } } + return false; }; $this->postFilters[] = $filter; @@ -537,27 +510,26 @@ trait AttachmentCollection /** * Has attachments - * - * @return GroupCollectorInterface */ public function hasNoAttachments(): GroupCollectorInterface { - Log::debug('Add filter on no attachments.'); + app('log')->debug('Add filter on no attachments.'); $this->joinAttachmentTables(); - $this->query->where(function (Builder $q1) { + $this->query->where(static function (Builder $q1): void { // @phpstan-ignore-line $q1 ->whereNull('attachments.attachable_id') - ->orWhere(function (Builder $q2) { + ->orWhere(static function (Builder $q2): void { $q2 ->whereNotNull('attachments.attachable_id') - ->whereNotNull('attachments.deleted_at'); + ->whereNotNull('attachments.deleted_at') + ; // id is not null // deleted at is not null. - }); + }) + ; }); - return $this; } } diff --git a/app/Helpers/Collector/Extensions/CollectorProperties.php b/app/Helpers/Collector/Extensions/CollectorProperties.php index bfdb78349b..fa6c626fbc 100644 --- a/app/Helpers/Collector/Extensions/CollectorProperties.php +++ b/app/Helpers/Collector/Extensions/CollectorProperties.php @@ -33,30 +33,34 @@ use Illuminate\Database\Eloquent\Relations\HasMany; */ trait CollectorProperties { - public const TEST = 'Test'; - private bool $expandGroupSearch; - private array $fields; - private bool $hasAccountInfo; - private bool $hasBillInformation; - private bool $hasBudgetInformation; - private bool $hasCatInformation; - private bool $hasJoinedAttTables; - private bool $hasJoinedMetaTables; - private bool $hasJoinedTagTables; - private bool $hasNotesInformation; - private array $integerFields; - private ?int $limit; - private ?int $page; - private array $postFilters; + /** @var array */ + public array $sorting; + public const string TEST = 'Test'; + private ?int $endRow; + private bool $expandGroupSearch; + private array $fields; + private bool $hasAccountInfo; + private bool $hasBillInformation; + private bool $hasBudgetInformation; + private bool $hasCatInformation; + private bool $hasJoinedAttTables; + private bool $hasJoinedMetaTables; + private bool $hasJoinedTagTables; + private bool $hasNotesInformation; + private array $integerFields; + private ?int $limit; + private ?int $page; + private array $postFilters; private HasMany $query; - private array $stringFields; + private ?int $startRow; + private array $stringFields; /* * This array is used to collect ALL tags the user may search for (using 'setTags'). * This way the user can call 'setTags' multiple times and get a joined result. * */ - private array $tags; - private int $total; - private ?User $user; + private array $tags; + private int $total; + private ?User $user; private ?UserGroup $userGroup; } diff --git a/app/Helpers/Collector/Extensions/MetaCollection.php b/app/Helpers/Collector/Extensions/MetaCollection.php index a8217a4b0a..305d2a88f4 100644 --- a/app/Helpers/Collector/Extensions/MetaCollection.php +++ b/app/Helpers/Collector/Extensions/MetaCollection.php @@ -33,19 +33,17 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\JoinClause; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; /** * Trait MetaCollection */ trait MetaCollection { - /** - * @inheritDoc - */ public function excludeBills(Collection $bills): GroupCollectorInterface { $this->withBillInformation(); - $this->query->where(static function (EloquentBuilder $q1) use ($bills) { + $this->query->where(static function (EloquentBuilder $q1) use ($bills): void { // @phpstan-ignore-line $q1->whereNotIn('transaction_journals.bill_id', $bills->pluck('id')->toArray()); $q1->orWhereNull('transaction_journals.bill_id'); }); @@ -55,8 +53,6 @@ trait MetaCollection /** * Will include bill name + ID, if any. - * - * @return GroupCollectorInterface */ public function withBillInformation(): GroupCollectorInterface { @@ -74,16 +70,12 @@ trait MetaCollection /** * Exclude a specific budget. - * - * @param Budget $budget - * - * @return GroupCollectorInterface */ public function excludeBudget(Budget $budget): GroupCollectorInterface { $this->withBudgetInformation(); - $this->query->where(static function (EloquentBuilder $q2) use ($budget) { + $this->query->where(static function (EloquentBuilder $q2) use ($budget): void { // @phpstan-ignore-line $q2->where('budgets.id', '!=', $budget->id); $q2->orWhereNull('budgets.id'); }); @@ -93,8 +85,6 @@ trait MetaCollection /** * Will include budget ID + name, if any. - * - * @return GroupCollectorInterface */ public function withBudgetInformation(): GroupCollectorInterface { @@ -112,14 +102,11 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function excludeBudgets(Collection $budgets): GroupCollectorInterface { if ($budgets->count() > 0) { $this->withBudgetInformation(); - $this->query->where(static function (EloquentBuilder $q1) use ($budgets) { + $this->query->where(static function (EloquentBuilder $q1) use ($budgets): void { // @phpstan-ignore-line $q1->whereNotIn('budgets.id', $budgets->pluck('id')->toArray()); $q1->orWhereNull('budgets.id'); }); @@ -128,14 +115,11 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function excludeCategories(Collection $categories): GroupCollectorInterface { if ($categories->count() > 0) { $this->withCategoryInformation(); - $this->query->where(static function (EloquentBuilder $q1) use ($categories) { + $this->query->where(static function (EloquentBuilder $q1) use ($categories): void { // @phpstan-ignore-line $q1->whereNotIn('categories.id', $categories->pluck('id')->toArray()); $q1->orWhereNull('categories.id'); }); @@ -146,8 +130,6 @@ trait MetaCollection /** * Will include category ID + name, if any. - * - * @return GroupCollectorInterface */ public function withCategoryInformation(): GroupCollectorInterface { @@ -167,16 +149,12 @@ trait MetaCollection /** * Exclude a specific category. - * - * @param Category $category - * - * @return GroupCollectorInterface */ public function excludeCategory(Category $category): GroupCollectorInterface { $this->withCategoryInformation(); - $this->query->where(static function (EloquentBuilder $q2) use ($category) { + $this->query->where(static function (EloquentBuilder $q2) use ($category): void { // @phpstan-ignore-line $q2->where('categories.id', '!=', $category->id); $q2->orWhereNull('categories.id'); }); @@ -184,9 +162,6 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function excludeExternalId(string $externalId): GroupCollectorInterface { $this->joinMetaDataTables(); @@ -204,14 +179,11 @@ trait MetaCollection if (false === $this->hasJoinedMetaTables) { $this->hasJoinedMetaTables = true; $this->query->leftJoin('journal_meta', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id'); - $this->fields[] = 'journal_meta.name as meta_name'; - $this->fields[] = 'journal_meta.data as meta_data'; + $this->fields[] = 'journal_meta.name as meta_name'; + $this->fields[] = 'journal_meta.data as meta_data'; } } - /** - * @inheritDoc - */ public function excludeExternalUrl(string $url): GroupCollectorInterface { $this->joinMetaDataTables(); @@ -221,12 +193,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function excludeInternalReference(string $internalReference): GroupCollectorInterface { - $internalReference = json_encode($internalReference); + $internalReference = (string)json_encode($internalReference); $internalReference = str_replace('\\', '\\\\', trim($internalReference, '"')); $this->joinMetaDataTables(); @@ -236,9 +205,6 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function excludeRecurrenceId(string $recurringId): GroupCollectorInterface { $this->joinMetaDataTables(); @@ -248,12 +214,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function externalIdContains(string $externalId): GroupCollectorInterface { - $externalId = json_encode($externalId); + $externalId = (string)json_encode($externalId); $externalId = str_replace('\\', '\\\\', trim($externalId, '"')); $this->joinMetaDataTables(); @@ -263,12 +226,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function externalIdDoesNotContain(string $externalId): GroupCollectorInterface { - $externalId = json_encode($externalId); + $externalId = (string)json_encode($externalId); $externalId = str_replace('\\', '\\\\', trim($externalId, '"')); $this->joinMetaDataTables(); @@ -278,12 +238,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function externalIdDoesNotEnd(string $externalId): GroupCollectorInterface { - $externalId = json_encode($externalId); + $externalId = (string)json_encode($externalId); $externalId = str_replace('\\', '\\\\', trim($externalId, '"')); $this->joinMetaDataTables(); @@ -293,12 +250,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function externalIdDoesNotStart(string $externalId): GroupCollectorInterface { - $externalId = json_encode($externalId); + $externalId = (string)json_encode($externalId); $externalId = str_replace('\\', '\\\\', trim($externalId, '"')); $this->joinMetaDataTables(); @@ -308,12 +262,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function externalIdEnds(string $externalId): GroupCollectorInterface { - $externalId = json_encode($externalId); + $externalId = (string)json_encode($externalId); $externalId = str_replace('\\', '\\\\', trim($externalId, '"')); $this->joinMetaDataTables(); @@ -323,12 +274,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function externalIdStarts(string $externalId): GroupCollectorInterface { - $externalId = json_encode($externalId); + $externalId = (string)json_encode($externalId); $externalId = str_replace('\\', '\\\\', trim($externalId, '"')); $this->joinMetaDataTables(); @@ -338,15 +286,10 @@ trait MetaCollection return $this; } - /** - * @param string $url - * - * @return GroupCollectorInterface - */ public function externalUrlContains(string $url): GroupCollectorInterface { $this->joinMetaDataTables(); - $url = json_encode($url); + $url = (string)json_encode($url); $url = str_replace('\\', '\\\\', trim($url, '"')); $this->query->where('journal_meta.name', '=', 'external_url'); $this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s%%', $url)); @@ -354,15 +297,10 @@ trait MetaCollection return $this; } - /** - * @param string $url - * - * @return GroupCollectorInterface - */ public function externalUrlDoesNotContain(string $url): GroupCollectorInterface { $this->joinMetaDataTables(); - $url = json_encode($url); + $url = (string)json_encode($url); $url = str_replace('\\', '\\\\', trim($url, '"')); $this->query->where('journal_meta.name', '=', 'external_url'); $this->query->where('journal_meta.data', 'NOT LIKE', sprintf('%%%s%%', $url)); @@ -370,15 +308,10 @@ trait MetaCollection return $this; } - /** - * @param string $url - * - * @return GroupCollectorInterface - */ public function externalUrlDoesNotEnd(string $url): GroupCollectorInterface { $this->joinMetaDataTables(); - $url = json_encode($url); + $url = (string)json_encode($url); $url = str_replace('\\', '\\\\', ltrim($url, '"')); $this->query->where('journal_meta.name', '=', 'external_url'); $this->query->where('journal_meta.data', 'NOT LIKE', sprintf('%%%s', $url)); @@ -386,17 +319,12 @@ trait MetaCollection return $this; } - /** - * @param string $url - * - * @return GroupCollectorInterface - */ public function externalUrlDoesNotStart(string $url): GroupCollectorInterface { $this->joinMetaDataTables(); - $url = json_encode($url); + $url = (string)json_encode($url); $url = str_replace('\\', '\\\\', rtrim($url, '"')); - //var_dump($url); + // var_dump($url); $this->query->where('journal_meta.name', '=', 'external_url'); $this->query->where('journal_meta.data', 'NOT LIKE', sprintf('%s%%', $url)); @@ -404,15 +332,10 @@ trait MetaCollection return $this; } - /** - * @param string $url - * - * @return GroupCollectorInterface - */ public function externalUrlEnds(string $url): GroupCollectorInterface { $this->joinMetaDataTables(); - $url = json_encode($url); + $url = (string)json_encode($url); $url = str_replace('\\', '\\\\', ltrim($url, '"')); $this->query->where('journal_meta.name', '=', 'external_url'); $this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s', $url)); @@ -420,17 +343,12 @@ trait MetaCollection return $this; } - /** - * @param string $url - * - * @return GroupCollectorInterface - */ public function externalUrlStarts(string $url): GroupCollectorInterface { $this->joinMetaDataTables(); - $url = json_encode($url); + $url = (string)json_encode($url); $url = str_replace('\\', '\\\\', rtrim($url, '"')); - //var_dump($url); + // var_dump($url); $this->query->where('journal_meta.name', '=', 'external_url'); $this->query->where('journal_meta.data', 'LIKE', sprintf('%s%%', $url)); @@ -440,8 +358,6 @@ trait MetaCollection /** * Where has no tags. - * - * @return GroupCollectorInterface */ public function hasAnyTag(): GroupCollectorInterface { @@ -451,9 +367,6 @@ trait MetaCollection return $this; } - /** - * @return GroupCollectorInterface - */ public function withTagInformation(): GroupCollectorInterface { $this->fields[] = 'tags.id as tag_id'; @@ -482,15 +395,12 @@ trait MetaCollection } } - /** - * @inheritDoc - */ public function internalReferenceContains(string $internalReference): GroupCollectorInterface { - $internalReference = json_encode($internalReference); + $internalReference = (string)json_encode($internalReference); $internalReference = str_replace('\\', '\\\\', trim($internalReference, '"')); - //var_dump($internalReference); - //exit; + // var_dump($internalReference); + // exit; $this->joinMetaDataTables(); $this->query->where('journal_meta.name', '=', 'internal_reference'); @@ -499,12 +409,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function internalReferenceDoesNotContain(string $internalReference): GroupCollectorInterface { - $internalReference = json_encode($internalReference); + $internalReference = (string)json_encode($internalReference); $internalReference = str_replace('\\', '\\\\', trim($internalReference, '"')); $this->joinMetaDataTables(); @@ -514,12 +421,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function internalReferenceDoesNotEnd(string $internalReference): GroupCollectorInterface { - $internalReference = json_encode($internalReference); + $internalReference = (string)json_encode($internalReference); $internalReference = str_replace('\\', '\\\\', trim($internalReference, '"')); $this->joinMetaDataTables(); @@ -529,12 +433,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function internalReferenceDoesNotStart(string $internalReference): GroupCollectorInterface { - $internalReference = json_encode($internalReference); + $internalReference = (string)json_encode($internalReference); $internalReference = str_replace('\\', '\\\\', trim($internalReference, '"')); $this->joinMetaDataTables(); @@ -544,12 +445,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function internalReferenceEnds(string $internalReference): GroupCollectorInterface { - $internalReference = json_encode($internalReference); + $internalReference = (string)json_encode($internalReference); $internalReference = str_replace('\\', '\\\\', trim($internalReference, '"')); $this->joinMetaDataTables(); @@ -559,12 +457,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function internalReferenceStarts(string $internalReference): GroupCollectorInterface { - $internalReference = json_encode($internalReference); + $internalReference = (string)json_encode($internalReference); $internalReference = str_replace('\\', '\\\\', trim($internalReference, '"')); $this->joinMetaDataTables(); @@ -574,11 +469,6 @@ trait MetaCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function notesContain(string $value): GroupCollectorInterface { $this->withNotes(); @@ -587,16 +477,13 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function withNotes(): GroupCollectorInterface { if (false === $this->hasNotesInformation) { // join bill table $this->query->leftJoin( 'notes', - static function (JoinClause $join) { + static function (JoinClause $join): void { $join->on('notes.noteable_id', '=', 'transaction_journals.id'); $join->where('notes.noteable_type', '=', 'FireflyIII\Models\TransactionJournal'); $join->whereNull('notes.deleted_at'); @@ -610,15 +497,10 @@ trait MetaCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function notesDoNotContain(string $value): GroupCollectorInterface { $this->withNotes(); - $this->query->where(static function (Builder $q) use ($value) { + $this->query->where(static function (Builder $q) use ($value): void { // @phpstan-ignore-line $q->whereNull('notes.text'); $q->orWhere('notes.text', 'NOT LIKE', sprintf('%%%s%%', $value)); }); @@ -626,15 +508,10 @@ trait MetaCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function notesDontEndWith(string $value): GroupCollectorInterface { $this->withNotes(); - $this->query->where(static function (Builder $q) use ($value) { + $this->query->where(static function (Builder $q) use ($value): void { // @phpstan-ignore-line $q->whereNull('notes.text'); $q->orWhere('notes.text', 'NOT LIKE', sprintf('%%%s', $value)); }); @@ -642,15 +519,10 @@ trait MetaCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function notesDontStartWith(string $value): GroupCollectorInterface { $this->withNotes(); - $this->query->where(static function (Builder $q) use ($value) { + $this->query->where(static function (Builder $q) use ($value): void { // @phpstan-ignore-line $q->whereNull('notes.text'); $q->orWhere('notes.text', 'NOT LIKE', sprintf('%s%%', $value)); }); @@ -658,11 +530,6 @@ trait MetaCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function notesEndWith(string $value): GroupCollectorInterface { $this->withNotes(); @@ -671,11 +538,6 @@ trait MetaCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function notesExactly(string $value): GroupCollectorInterface { $this->withNotes(); @@ -684,15 +546,10 @@ trait MetaCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function notesExactlyNot(string $value): GroupCollectorInterface { $this->withNotes(); - $this->query->where(static function (Builder $q) use ($value) { + $this->query->where(static function (Builder $q) use ($value): void { // @phpstan-ignore-line $q->whereNull('notes.text'); $q->orWhere('notes.text', '!=', sprintf('%s', $value)); }); @@ -700,11 +557,6 @@ trait MetaCollection return $this; } - /** - * @param string $value - * - * @return GroupCollectorInterface - */ public function notesStartWith(string $value): GroupCollectorInterface { $this->withNotes(); @@ -713,12 +565,65 @@ trait MetaCollection return $this; } + /** + * Limit results to a SPECIFIC set of tags. + */ + public function setAllTags(Collection $tags): GroupCollectorInterface + { + Log::debug(sprintf('Now in setAllTags(%d tag(s))', $tags->count())); + $this->withTagInformation(); + $this->query->whereNotNull('tag_transaction_journal.tag_id'); + + // this method adds a "postFilter" to the collector. + $list = $tags->pluck('tag')->toArray(); + $list = array_map('strtolower', $list); + $filter = static function (array $object) use ($list): bool|array { + $includedJournals = []; + $return = $object; + unset($return['transactions']); + $return['transactions'] = []; + Log::debug(sprintf('Now in setAllTags(%s) filter', implode(', ', $list))); + $expectedTagCount = count($list); + $foundTagCount = 0; + foreach ($object['transactions'] as $transaction) { + $transactionTagCount = count($transaction['tags']); + app('log')->debug(sprintf('Transaction #%d has %d tag(s)', $transaction['transaction_journal_id'], $transactionTagCount)); + if ($transactionTagCount < $expectedTagCount) { + app('log')->debug(sprintf('Transaction has %d tag(s), we expect %d tag(s), return false.', $transactionTagCount, $expectedTagCount)); + + return false; + } + foreach ($transaction['tags'] as $tag) { + Log::debug(sprintf('"%s" versus', strtolower($tag['name'])), $list); + if (in_array(strtolower($tag['name']), $list, true)) { + app('log')->debug(sprintf('Transaction has tag "%s" so count++.', $tag['name'])); + ++$foundTagCount; + $journalId = $transaction['transaction_journal_id']; + // #8377 prevent adding a transaction twice when multiple tag searches find this transaction + if (!in_array($journalId, $includedJournals, true)) { + $includedJournals[] = $journalId; + $return['transactions'][] = $transaction; + } + } + } + } + Log::debug(sprintf('Found %d tags, need at least %d.', $foundTagCount, $expectedTagCount)); + + // found at least the expected tags. + $result = $foundTagCount >= $expectedTagCount; + if (true === $result) { + return $return; + } + + return false; + }; + $this->postFilters[] = $filter; + + return $this; + } + /** * Limit the search to a specific bill. - * - * @param Bill $bill - * - * @return GroupCollectorInterface */ public function setBill(Bill $bill): GroupCollectorInterface { @@ -730,10 +635,6 @@ trait MetaCollection /** * Limit the search to a specific set of bills. - * - * @param Collection $bills - * - * @return GroupCollectorInterface */ public function setBills(Collection $bills): GroupCollectorInterface { @@ -745,10 +646,6 @@ trait MetaCollection /** * Limit the search to a specific budget. - * - * @param Budget $budget - * - * @return GroupCollectorInterface */ public function setBudget(Budget $budget): GroupCollectorInterface { @@ -760,10 +657,6 @@ trait MetaCollection /** * Limit the search to a specific set of budgets. - * - * @param Collection $budgets - * - * @return GroupCollectorInterface */ public function setBudgets(Collection $budgets): GroupCollectorInterface { @@ -777,10 +670,6 @@ trait MetaCollection /** * Limit the search to a specific bunch of categories. - * - * @param Collection $categories - * - * @return GroupCollectorInterface */ public function setCategories(Collection $categories): GroupCollectorInterface { @@ -794,10 +683,6 @@ trait MetaCollection /** * Limit the search to a specific category. - * - * @param Category $category - * - * @return GroupCollectorInterface */ public function setCategory(Category $category): GroupCollectorInterface { @@ -807,9 +692,6 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function setExternalId(string $externalId): GroupCollectorInterface { $this->joinMetaDataTables(); @@ -819,9 +701,6 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function setExternalUrl(string $url): GroupCollectorInterface { $this->joinMetaDataTables(); @@ -831,12 +710,9 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function setInternalReference(string $internalReference): GroupCollectorInterface { - $internalReference = json_encode($internalReference); + $internalReference = (string)json_encode($internalReference); $internalReference = str_replace('\\', '\\\\', trim($internalReference, '"')); $this->joinMetaDataTables(); @@ -846,9 +722,6 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function setRecurrenceId(string $recurringId): GroupCollectorInterface { $this->joinMetaDataTables(); @@ -858,9 +731,6 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function setSepaCT(string $sepaCT): GroupCollectorInterface { $this->joinMetaDataTables(); @@ -873,41 +743,50 @@ trait MetaCollection /** * Limit results to a specific tag. - * - * @param Tag $tag - * - * @return GroupCollectorInterface */ public function setTag(Tag $tag): GroupCollectorInterface { $this->withTagInformation(); - $this->query->where('tag_transaction_journal.tag_id', $tag->id); + $this->setTags(new Collection([$tag])); return $this; } /** - * Limit results to a specific set of tags. - * - * @param Collection $tags - * - * @return GroupCollectorInterface + * Limit results to any of the tags in the list. */ public function setTags(Collection $tags): GroupCollectorInterface { + Log::debug(sprintf('Now in setTags(%d tag(s))', $tags->count())); $this->withTagInformation(); - $this->tags = array_merge($this->tags, $tags->pluck('id')->toArray()); - $this->query->whereIn('tag_transaction_journal.tag_id', $this->tags); + $this->query->whereNotNull('tag_transaction_journal.tag_id'); + + // this method adds a "postFilter" to the collector. + $list = $tags->pluck('tag')->toArray(); + $list = array_map('strtolower', $list); + $filter = static function (array $object) use ($list): bool { + Log::debug(sprintf('Now in setTags(%s) filter', implode(', ', $list))); + foreach ($object['transactions'] as $transaction) { + foreach ($transaction['tags'] as $tag) { + Log::debug(sprintf('"%s" versus', strtolower($tag['name'])), $list); + if (in_array(strtolower($tag['name']), $list, true)) { + app('log')->debug(sprintf('Transaction has tag "%s" so return true.', $tag['name'])); + + return true; + } + } + } + app('log')->debug('Transaction has no tags from the list, so return false.'); + + return false; + }; + $this->postFilters[] = $filter; return $this; } /** * Without tags - * - * @param Collection $tags - * - * @return GroupCollectorInterface */ public function setWithoutSpecificTags(Collection $tags): GroupCollectorInterface { @@ -915,25 +794,28 @@ trait MetaCollection // this method adds a "postFilter" to the collector. $list = $tags->pluck('tag')->toArray(); - $filter = function (int $index, array $object) use ($list): bool { + $list = array_map('strtolower', $list); + $filter = static function (array $object) use ($list): bool { + Log::debug(sprintf('Now in setWithoutSpecificTags(%s) filter', implode(', ', $list))); foreach ($object['transactions'] as $transaction) { + app('log')->debug(sprintf('Transaction has %d tag(s)', count($transaction['tags']))); foreach ($transaction['tags'] as $tag) { - if (in_array($tag['name'], $list, true)) { + Log::debug(sprintf('"%s" versus', strtolower($tag['name'])), $list); + if (in_array(strtolower($tag['name']), $list, true)) { + app('log')->debug(sprintf('Transaction has tag "%s", but should not have it, return false.', $tag['name'])); + return false; } } } + return true; }; $this->postFilters[] = $filter; - return $this; } - /** - * @return GroupCollectorInterface - */ public function withAnyNotes(): GroupCollectorInterface { $this->withNotes(); @@ -944,8 +826,6 @@ trait MetaCollection /** * Limit results to transactions without a bill. - * - * @return GroupCollectorInterface */ public function withBill(): GroupCollectorInterface { @@ -957,8 +837,6 @@ trait MetaCollection /** * Limit results to a transactions without a budget.. - * - * @return GroupCollectorInterface */ public function withBudget(): GroupCollectorInterface { @@ -970,8 +848,6 @@ trait MetaCollection /** * Limit results to a transactions without a category. - * - * @return GroupCollectorInterface */ public function withCategory(): GroupCollectorInterface { @@ -981,9 +857,6 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function withExternalId(): GroupCollectorInterface { $this->joinMetaDataTables(); @@ -993,9 +866,6 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function withExternalUrl(): GroupCollectorInterface { $this->joinMetaDataTables(); @@ -1007,8 +877,6 @@ trait MetaCollection /** * Limit results to a transactions without a bill. - * - * @return GroupCollectorInterface */ public function withoutBill(): GroupCollectorInterface { @@ -1019,8 +887,6 @@ trait MetaCollection /** * Limit results to a transactions without a budget.. - * - * @return GroupCollectorInterface */ public function withoutBudget(): GroupCollectorInterface { @@ -1032,8 +898,6 @@ trait MetaCollection /** * Limit results to a transactions without a category. - * - * @return GroupCollectorInterface */ public function withoutCategory(): GroupCollectorInterface { @@ -1043,20 +907,17 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function withoutExternalId(): GroupCollectorInterface { $this->joinMetaDataTables(); // TODO not sure if this will work properly. - $this->query->where(function (Builder $q1) { - $q1->where(function (Builder $q2) { + $this->query->where(static function (Builder $q1): void { // @phpstan-ignore-line + $q1->where(static function (Builder $q2): void { $q2->where('journal_meta.name', '=', 'external_id'); $q2->whereNull('journal_meta.data'); - })->orWhere(function (Builder $q3) { + })->orWhere(static function (Builder $q3): void { $q3->where('journal_meta.name', '!=', 'external_id'); - })->orWhere(function (Builder $q4) { + })->orWhere(static function (Builder $q4): void { $q4->whereNull('journal_meta.name'); }); }); @@ -1064,20 +925,17 @@ trait MetaCollection return $this; } - /** - * @inheritDoc - */ public function withoutExternalUrl(): GroupCollectorInterface { $this->joinMetaDataTables(); // TODO not sure if this will work properly. - $this->query->where(function (Builder $q1) { - $q1->where(function (Builder $q2) { + $this->query->where(static function (Builder $q1): void { // @phpstan-ignore-line + $q1->where(static function (Builder $q2): void { $q2->where('journal_meta.name', '=', 'external_url'); $q2->whereNull('journal_meta.data'); - })->orWhere(function (Builder $q3) { + })->orWhere(static function (Builder $q3): void { $q3->where('journal_meta.name', '!=', 'external_url'); - })->orWhere(function (Builder $q4) { + })->orWhere(static function (Builder $q4): void { $q4->whereNull('journal_meta.name'); }); }); @@ -1085,13 +943,10 @@ trait MetaCollection return $this; } - /** - * @return GroupCollectorInterface - */ public function withoutNotes(): GroupCollectorInterface { $this->withNotes(); - $this->query->where(function (Builder $q) { + $this->query->where(static function (Builder $q): void { // @phpstan-ignore-line $q->whereNull('notes.text'); $q->orWhere('notes.text', ''); }); @@ -1101,8 +956,6 @@ trait MetaCollection /** * Where has no tags. - * - * @return GroupCollectorInterface */ public function withoutTags(): GroupCollectorInterface { diff --git a/app/Helpers/Collector/Extensions/TimeCollection.php b/app/Helpers/Collector/Extensions/TimeCollection.php index 3908686d69..c596cfdb77 100644 --- a/app/Helpers/Collector/Extensions/TimeCollection.php +++ b/app/Helpers/Collector/Extensions/TimeCollection.php @@ -32,68 +32,45 @@ use FireflyIII\Helpers\Collector\GroupCollectorInterface; */ trait TimeCollection { - /** - * @param string $day - * - * @return GroupCollectorInterface - */ public function dayAfter(string $day): GroupCollectorInterface { $this->query->whereDay('transaction_journals.date', '>=', $day); + return $this; } - /** - * @param string $day - * - * @return GroupCollectorInterface - */ public function dayBefore(string $day): GroupCollectorInterface { $this->query->whereDay('transaction_journals.date', '<=', $day); + return $this; } - /** - * @param string $day - * - * @return GroupCollectorInterface - */ public function dayIs(string $day): GroupCollectorInterface { $this->query->whereDay('transaction_journals.date', '=', $day); + return $this; } - /** - * @param string $day - * - * @return GroupCollectorInterface - */ public function dayIsNot(string $day): GroupCollectorInterface { $this->query->whereDay('transaction_journals.date', '!=', $day); + return $this; } - /** - * @param Carbon $start - * @param Carbon $end - * @param string $field - * - * @return GroupCollectorInterface - */ public function excludeMetaDateRange(Carbon $start, Carbon $end, string $field): GroupCollectorInterface { if ($end < $start) { [$start, $end] = [$end, $start]; } - $end = clone $end; // this is so weird, but it works if $end and $start secretly point to the same object. + $end = clone $end; // this is so weird, but it works if $end and $start secretly point to the same object. $end->endOfDay(); $start->startOfDay(); $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $start, $end): bool { + $filter = static function (array $object) use ($field, $start, $end): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon) { return $transaction[$field]->lt($start) || $transaction[$field]->gt($end); @@ -107,9 +84,6 @@ trait TimeCollection return $this; } - /** - * @inheritDoc - */ public function withMetaDate(string $field): GroupCollectorInterface { $this->joinMetaDataTables(); @@ -119,13 +93,6 @@ trait TimeCollection return $this; } - /** - * @param Carbon $start - * @param Carbon $end - * @param string $field - * - * @return GroupCollectorInterface - */ public function excludeObjectRange(Carbon $start, Carbon $end, string $field): GroupCollectorInterface { $after = $start->format('Y-m-d 00:00:00'); @@ -137,12 +104,6 @@ trait TimeCollection return $this; } - /** - * @param Carbon $start - * @param Carbon $end - * - * @return GroupCollectorInterface - */ public function excludeRange(Carbon $start, Carbon $end): GroupCollectorInterface { if ($end < $start) { @@ -157,16 +118,10 @@ trait TimeCollection return $this; } - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaDayAfter(string $day, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $day): bool { + $filter = static function (array $object) use ($field, $day): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -181,16 +136,10 @@ trait TimeCollection return $this; } - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaDayBefore(string $day, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $day): bool { + $filter = static function (array $object) use ($field, $day): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -205,16 +154,10 @@ trait TimeCollection return $this; } - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaDayIs(string $day, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $day): bool { + $filter = static function (array $object) use ($field, $day): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -225,19 +168,14 @@ trait TimeCollection return false; }; $this->postFilters[] = $filter; + return $this; } - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaDayIsNot(string $day, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $day): bool { + $filter = static function (array $object) use ($field, $day): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -248,19 +186,14 @@ trait TimeCollection return false; }; $this->postFilters[] = $filter; + return $this; } - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaMonthAfter(string $month, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $month): bool { + $filter = static function (array $object) use ($field, $month): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -275,16 +208,10 @@ trait TimeCollection return $this; } - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaMonthBefore(string $month, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $month): bool { + $filter = static function (array $object) use ($field, $month): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -299,16 +226,10 @@ trait TimeCollection return $this; } - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaMonthIs(string $month, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $month): bool { + $filter = static function (array $object) use ($field, $month): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -319,19 +240,14 @@ trait TimeCollection return false; }; $this->postFilters[] = $filter; + return $this; } - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaMonthIsNot(string $month, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $month): bool { + $filter = static function (array $object) use ($field, $month): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -342,19 +258,14 @@ trait TimeCollection return false; }; $this->postFilters[] = $filter; + return $this; } - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaYearAfter(string $year, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $year): bool { + $filter = static function (array $object) use ($field, $year): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -369,16 +280,10 @@ trait TimeCollection return $this; } - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaYearBefore(string $year, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $year): bool { + $filter = static function (array $object) use ($field, $year): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -393,16 +298,10 @@ trait TimeCollection return $this; } - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaYearIs(string $year, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $year): bool { + $filter = static function (array $object) use ($field, $year): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -417,22 +316,17 @@ trait TimeCollection return $this; } - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ public function metaYearIsNot(string $year, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $year): bool { + $filter = static function (array $object) use ($field, $year): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { return $year !== (string)$transaction[$field]->year; } } + return true; }; $this->postFilters[] = $filter; @@ -440,200 +334,120 @@ trait TimeCollection return $this; } - /** - * @param string $month - * - * @return GroupCollectorInterface - */ public function monthAfter(string $month): GroupCollectorInterface { $this->query->whereMonth('transaction_journals.date', '>=', $month); + return $this; } - /** - * @param string $month - * - * @return GroupCollectorInterface - */ public function monthBefore(string $month): GroupCollectorInterface { $this->query->whereMonth('transaction_journals.date', '<=', $month); + return $this; } - /** - * @param string $month - * - * @return GroupCollectorInterface - */ public function monthIs(string $month): GroupCollectorInterface { $this->query->whereMonth('transaction_journals.date', '=', $month); + return $this; } - /** - * @param string $month - * - * @return GroupCollectorInterface - */ public function monthIsNot(string $month): GroupCollectorInterface { $this->query->whereMonth('transaction_journals.date', '!=', $month); + return $this; } - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectDayAfter(string $day, string $field): GroupCollectorInterface { $this->query->whereDay(sprintf('transaction_journals.%s', $field), '>=', $day); + return $this; } - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectDayBefore(string $day, string $field): GroupCollectorInterface { $this->query->whereDay(sprintf('transaction_journals.%s', $field), '<=', $day); + return $this; } - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectDayIs(string $day, string $field): GroupCollectorInterface { $this->query->whereDay(sprintf('transaction_journals.%s', $field), '=', $day); + return $this; } - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectDayIsNot(string $day, string $field): GroupCollectorInterface { $this->query->whereDay(sprintf('transaction_journals.%s', $field), '!=', $day); + return $this; } - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectMonthAfter(string $month, string $field): GroupCollectorInterface { $this->query->whereMonth(sprintf('transaction_journals.%s', $field), '>=', $month); + return $this; } - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectMonthBefore(string $month, string $field): GroupCollectorInterface { $this->query->whereMonth(sprintf('transaction_journals.%s', $field), '<=', $month); + return $this; } - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectMonthIs(string $month, string $field): GroupCollectorInterface { $this->query->whereMonth(sprintf('transaction_journals.%s', $field), '=', $month); + return $this; } - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectMonthIsNot(string $month, string $field): GroupCollectorInterface { $this->query->whereMonth(sprintf('transaction_journals.%s', $field), '!=', $month); + return $this; } - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectYearAfter(string $year, string $field): GroupCollectorInterface { $this->query->whereYear(sprintf('transaction_journals.%s', $field), '>=', $year); + return $this; } - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectYearBefore(string $year, string $field): GroupCollectorInterface { $this->query->whereYear(sprintf('transaction_journals.%s', $field), '<=', $year); + return $this; } - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectYearIs(string $year, string $field): GroupCollectorInterface { $this->query->whereYear(sprintf('transaction_journals.%s', $field), '=', $year); + return $this; } - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ public function objectYearIsNot(string $year, string $field): GroupCollectorInterface { $this->query->whereYear(sprintf('transaction_journals.%s', $field), '!=', $year); + return $this; } /** * Collect transactions after a specific date. - * - * @param Carbon $date - * - * @return GroupCollectorInterface */ public function setAfter(Carbon $date): GroupCollectorInterface { @@ -645,14 +459,10 @@ trait TimeCollection /** * Collect transactions before a specific date. - * - * @param Carbon $date - * - * @return GroupCollectorInterface */ public function setBefore(Carbon $date): GroupCollectorInterface { - $beforeStr = $date->format('Y-m-d 00:00:00'); + $beforeStr = $date->format('Y-m-d 23:59:59'); $this->query->where('transaction_journals.date', '<=', $beforeStr); return $this; @@ -660,10 +470,6 @@ trait TimeCollection /** * Collect transactions created on a specific date. - * - * @param Carbon $date - * - * @return GroupCollectorInterface */ public function setCreatedAt(Carbon $date): GroupCollectorInterface { @@ -677,10 +483,6 @@ trait TimeCollection /** * Set the end time of the results to return. - * - * @param Carbon $end - * - * @return GroupCollectorInterface */ public function setEnd(Carbon $end): GroupCollectorInterface { @@ -692,17 +494,11 @@ trait TimeCollection return $this; } - /** - * @param Carbon $date - * @param string $field - * - * @return GroupCollectorInterface - */ public function setMetaAfter(Carbon $date, string $field): GroupCollectorInterface { $this->withMetaDate($field); $date->startOfDay(); - $filter = function (int $index, array $object) use ($field, $date): bool { + $filter = static function (array $object) use ($field, $date): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -717,16 +513,10 @@ trait TimeCollection return $this; } - /** - * @param Carbon $date - * @param string $field - * - * @return GroupCollectorInterface - */ public function setMetaBefore(Carbon $date, string $field): GroupCollectorInterface { $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $date): bool { + $filter = static function (array $object) use ($field, $date): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -741,24 +531,17 @@ trait TimeCollection return $this; } - /** - * @param Carbon $start - * @param Carbon $end - * @param string $field - * - * @return GroupCollectorInterface - */ public function setMetaDateRange(Carbon $start, Carbon $end, string $field): GroupCollectorInterface { if ($end < $start) { [$start, $end] = [$end, $start]; } - $end = clone $end; // this is so weird, but it works if $end and $start secretly point to the same object. + $end = clone $end; // this is so weird, but it works if $end and $start secretly point to the same object. $end->endOfDay(); $start->startOfDay(); $this->withMetaDate($field); - $filter = function (int $index, array $object) use ($field, $start, $end): bool { + $filter = static function (array $object) use ($field, $start, $end): bool { foreach ($object['transactions'] as $transaction) { if (array_key_exists($field, $transaction) && $transaction[$field] instanceof Carbon ) { @@ -769,15 +552,10 @@ trait TimeCollection return false; }; $this->postFilters[] = $filter; + return $this; } - /** - * @param Carbon $date - * @param string $field - * - * @return GroupCollectorInterface - */ public function setObjectAfter(Carbon $date, string $field): GroupCollectorInterface { $afterStr = $date->format('Y-m-d 00:00:00'); @@ -786,26 +564,14 @@ trait TimeCollection return $this; } - /** - * @param Carbon $date - * @param string $field - * - * @return GroupCollectorInterface - */ public function setObjectBefore(Carbon $date, string $field): GroupCollectorInterface { $afterStr = $date->format('Y-m-d 00:00:00'); $this->query->where(sprintf('transaction_journals.%s', $field), '<=', $afterStr); + return $this; } - /** - * @param Carbon $start - * @param Carbon $end - * @param string $field - * - * @return GroupCollectorInterface - */ public function setObjectRange(Carbon $start, Carbon $end, string $field): GroupCollectorInterface { $after = $start->format('Y-m-d 00:00:00'); @@ -820,11 +586,6 @@ trait TimeCollection * Set the start and end time of the results to return. * * Can either or both be NULL - * - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return GroupCollectorInterface */ public function setRange(?Carbon $start, ?Carbon $end): GroupCollectorInterface { @@ -847,10 +608,6 @@ trait TimeCollection /** * Set the start time of the results to return. - * - * @param Carbon $start - * - * @return GroupCollectorInterface */ public function setStart(Carbon $start): GroupCollectorInterface { @@ -863,10 +620,6 @@ trait TimeCollection /** * Collect transactions updated on a specific date. - * - * @param Carbon $date - * - * @return GroupCollectorInterface */ public function setUpdatedAt(Carbon $date): GroupCollectorInterface { @@ -878,47 +631,31 @@ trait TimeCollection return $this; } - /** - * @param string $year - * - * @return GroupCollectorInterface - */ public function yearAfter(string $year): GroupCollectorInterface { $this->query->whereYear('transaction_journals.date', '>=', $year); + return $this; } - /** - * @param string $year - * - * @return GroupCollectorInterface - */ public function yearBefore(string $year): GroupCollectorInterface { $this->query->whereYear('transaction_journals.date', '<=', $year); + return $this; } - /** - * @param string $year - * - * @return GroupCollectorInterface - */ public function yearIs(string $year): GroupCollectorInterface { $this->query->whereYear('transaction_journals.date', '=', $year); + return $this; } - /** - * @param string $year - * - * @return GroupCollectorInterface - */ public function yearIsNot(string $year): GroupCollectorInterface { $this->query->whereYear('transaction_journals.date', '!=', $year); + return $this; } } diff --git a/app/Helpers/Collector/GroupCollector.php b/app/Helpers/Collector/GroupCollector.php index eee489d612..0e3b1de766 100644 --- a/app/Helpers/Collector/GroupCollector.php +++ b/app/Helpers/Collector/GroupCollector.php @@ -25,8 +25,6 @@ namespace FireflyIII\Helpers\Collector; use Carbon\Carbon; use Carbon\Exceptions\InvalidFormatException; -use Closure; -use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\Extensions\AccountCollection; use FireflyIII\Helpers\Collector\Extensions\AmountCollection; @@ -48,29 +46,30 @@ use Illuminate\Support\Facades\Log; /** * Class GroupCollector - * - */ class GroupCollector implements GroupCollectorInterface { - use CollectorProperties; use AccountCollection; use AmountCollection; - use TimeCollection; - use MetaCollection; use AttachmentCollection; + use CollectorProperties; + use MetaCollection; + use TimeCollection; /** * Group collector constructor. */ public function __construct() { - $this->postFilters = []; - $this->tags = []; - $this->user = null; - $this->userGroup = null; - $this->limit = null; - $this->page = null; + $this->sorting = []; + $this->postFilters = []; + $this->tags = []; + $this->user = null; + $this->userGroup = null; + $this->limit = null; + $this->page = null; + $this->startRow = null; + $this->endRow = null; $this->hasAccountInfo = false; $this->hasCatInformation = false; @@ -102,30 +101,32 @@ class GroupCollector implements GroupCollectorInterface $this->stringFields = ['amount', 'foreign_amount']; $this->total = 0; $this->fields = [ - # group + // group 'transaction_groups.id as transaction_group_id', 'transaction_groups.user_id as user_id', 'transaction_groups.user_group_id as user_group_id', 'transaction_groups.created_at as created_at', 'transaction_groups.updated_at as updated_at', 'transaction_groups.title as transaction_group_title', + 'transaction_groups.created_at as group_created_at', + 'transaction_groups.updated_at as group_updated_at', - # journal + // journal 'transaction_journals.id as transaction_journal_id', 'transaction_journals.transaction_type_id', 'transaction_journals.description', 'transaction_journals.date', 'transaction_journals.order', - # types + // types 'transaction_types.type as transaction_type_type', - # source info (always present) + // source info (always present) 'source.id as source_transaction_id', 'source.account_id as source_account_id', 'source.reconciled', - # currency info: + // currency info: 'source.amount as amount', 'source.transaction_currency_id as currency_id', 'currency.code as currency_code', @@ -133,7 +134,7 @@ class GroupCollector implements GroupCollectorInterface 'currency.symbol as currency_symbol', 'currency.decimal_places as currency_decimal_places', - # foreign currency info + // foreign currency info 'source.foreign_amount as foreign_amount', 'source.foreign_currency_id as foreign_currency_id', 'foreign_currency.code as foreign_currency_code', @@ -141,20 +142,17 @@ class GroupCollector implements GroupCollectorInterface 'foreign_currency.symbol as foreign_currency_symbol', 'foreign_currency.decimal_places as foreign_currency_decimal_places', - # destination account info (always present) + // destination account info (always present) 'destination.account_id as destination_account_id', ]; } - /** - * @inheritDoc - */ public function descriptionDoesNotEnd(array $array): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($array) { + static function (EloquentBuilder $q) use ($array): void { // @phpstan-ignore-line $q->where( - static function (EloquentBuilder $q1) use ($array) { + static function (EloquentBuilder $q1) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%%%s', $word); $q1->where('transaction_journals.description', 'NOT LIKE', $keyword); @@ -162,7 +160,7 @@ class GroupCollector implements GroupCollectorInterface } ); $q->where( - static function (EloquentBuilder $q2) use ($array) { + static function (EloquentBuilder $q2) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%%%s', $word); $q2->where('transaction_groups.title', 'NOT LIKE', $keyword); @@ -176,15 +174,12 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * @inheritDoc - */ public function descriptionDoesNotStart(array $array): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($array) { + static function (EloquentBuilder $q) use ($array): void { // @phpstan-ignore-line $q->where( - static function (EloquentBuilder $q1) use ($array) { + static function (EloquentBuilder $q1) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%s%%', $word); $q1->where('transaction_journals.description', 'NOT LIKE', $keyword); @@ -192,7 +187,7 @@ class GroupCollector implements GroupCollectorInterface } ); $q->where( - static function (EloquentBuilder $q2) use ($array) { + static function (EloquentBuilder $q2) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%s%%', $word); $q2->where('transaction_groups.title', 'NOT LIKE', $keyword); @@ -206,15 +201,12 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * @inheritDoc - */ public function descriptionEnds(array $array): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($array) { + static function (EloquentBuilder $q) use ($array): void { // @phpstan-ignore-line $q->where( - static function (EloquentBuilder $q1) use ($array) { + static function (EloquentBuilder $q1) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%%%s', $word); $q1->where('transaction_journals.description', 'LIKE', $keyword); @@ -222,7 +214,7 @@ class GroupCollector implements GroupCollectorInterface } ); $q->orWhere( - static function (EloquentBuilder $q2) use ($array) { + static function (EloquentBuilder $q2) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%%%s', $word); $q2->where('transaction_groups.title', 'LIKE', $keyword); @@ -235,13 +227,10 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * @inheritDoc - */ public function descriptionIs(string $value): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($value) { + static function (EloquentBuilder $q) use ($value): void { // @phpstan-ignore-line $q->where('transaction_journals.description', '=', $value); $q->orWhere('transaction_groups.title', '=', $value); } @@ -250,16 +239,13 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * @inheritDoc - */ public function descriptionIsNot(string $value): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($value) { + static function (EloquentBuilder $q) use ($value): void { // @phpstan-ignore-line $q->where('transaction_journals.description', '!=', $value); $q->where( - static function (EloquentBuilder $q2) use ($value) { + static function (EloquentBuilder $q2) use ($value): void { $q2->where('transaction_groups.title', '!=', $value); $q2->orWhereNull('transaction_groups.title'); } @@ -270,15 +256,12 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * @inheritDoc - */ public function descriptionStarts(array $array): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($array) { + static function (EloquentBuilder $q) use ($array): void { // @phpstan-ignore-line $q->where( - static function (EloquentBuilder $q1) use ($array) { + static function (EloquentBuilder $q1) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%s%%', $word); $q1->where('transaction_journals.description', 'LIKE', $keyword); @@ -286,7 +269,7 @@ class GroupCollector implements GroupCollectorInterface } ); $q->orWhere( - static function (EloquentBuilder $q2) use ($array) { + static function (EloquentBuilder $q2) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%s%%', $word); $q2->where('transaction_groups.title', 'LIKE', $keyword); @@ -299,9 +282,6 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * - */ public function dumpQuery(): void { $query = $this->query->select($this->fields)->toSql(); @@ -311,8 +291,8 @@ class GroupCollector implements GroupCollectorInterface if (is_int($param)) { $replace = (string)$param; } - $pos = strpos($query, '?'); - if ($pos !== false) { + $pos = strpos($query, '?'); + if (false !== $pos) { $query = substr_replace($query, $replace, $pos, 1); } } @@ -323,29 +303,22 @@ class GroupCollector implements GroupCollectorInterface echo ''; } - /** - * - */ public function dumpQueryInLogs(): void { - Log::debug($this->query->select($this->fields)->toSql()); - Log::debug('Bindings', $this->query->getBindings()); + app('log')->debug($this->query->select($this->fields)->toSql()); + app('log')->debug('Bindings', $this->query->getBindings()); } /** * Limit results to NOT a specific currency, either foreign or normal one. - * - * @param TransactionCurrency $currency - * - * @return GroupCollectorInterface */ public function excludeCurrency(TransactionCurrency $currency): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($currency) { + static function (EloquentBuilder $q) use ($currency): void { // @phpstan-ignore-line $q->where('source.transaction_currency_id', '!=', $currency->id); $q->where( - static function (EloquentBuilder $q2) use ($currency) { + static function (EloquentBuilder $q2) use ($currency): void { $q2->where('source.foreign_currency_id', '!=', $currency->id); $q2->orWhereNull('source.foreign_currency_id'); } @@ -356,12 +329,9 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * @inheritDoc - */ public function excludeForeignCurrency(TransactionCurrency $currency): GroupCollectorInterface { - $this->query->where(static function (EloquentBuilder $q2) use ($currency) { + $this->query->where(static function (EloquentBuilder $q2) use ($currency): void { // @phpstan-ignore-line $q2->where('source.foreign_currency_id', '!=', $currency->id); $q2->orWhereNull('source.foreign_currency_id'); }); @@ -371,10 +341,6 @@ class GroupCollector implements GroupCollectorInterface /** * Limit the result to NOT a set of specific transaction groups. - * - * @param array $groupIds - * - * @return GroupCollectorInterface */ public function excludeIds(array $groupIds): GroupCollectorInterface { @@ -385,10 +351,6 @@ class GroupCollector implements GroupCollectorInterface /** * Limit the result to NOT a set of specific journals. - * - * @param array $journalIds - * - * @return GroupCollectorInterface */ public function excludeJournalIds(array $journalIds): GroupCollectorInterface { @@ -396,7 +358,6 @@ class GroupCollector implements GroupCollectorInterface // make all integers. $integerIDs = array_map('intval', $journalIds); - $this->query->whereNotIn('transaction_journals.id', $integerIDs); } @@ -405,10 +366,6 @@ class GroupCollector implements GroupCollectorInterface /** * Search for words in descriptions. - * - * @param array $array - * - * @return GroupCollectorInterface */ public function excludeSearchWords(array $array): GroupCollectorInterface { @@ -416,9 +373,9 @@ class GroupCollector implements GroupCollectorInterface return $this; } $this->query->where( - static function (EloquentBuilder $q) use ($array) { + static function (EloquentBuilder $q) use ($array): void { // @phpstan-ignore-line $q->where( - static function (EloquentBuilder $q1) use ($array) { + static function (EloquentBuilder $q1) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%%%s%%', $word); $q1->where('transaction_journals.description', 'NOT LIKE', $keyword); @@ -426,7 +383,7 @@ class GroupCollector implements GroupCollectorInterface } ); $q->where( - static function (EloquentBuilder $q2) use ($array) { + static function (EloquentBuilder $q2) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%%%s%%', $word); $q2->where('transaction_groups.title', 'NOT LIKE', $keyword); @@ -440,9 +397,6 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * @inheritDoc - */ public function excludeTypes(array $types): GroupCollectorInterface { $this->query->whereNotIn('transaction_types.type', $types); @@ -450,9 +404,6 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * @inheritDoc - */ public function exists(): GroupCollectorInterface { $this->query->whereNull('transaction_groups.deleted_at'); @@ -460,12 +411,10 @@ class GroupCollector implements GroupCollectorInterface 'transaction_types.type', [TransactionType::LIABILITY_CREDIT, TransactionType::OPENING_BALANCE, TransactionType::RECONCILIATION] ); + return $this; } - /** - * @inheritDoc - */ public function findNothing(): GroupCollectorInterface { $this->query->where('transaction_groups.id', -1); @@ -473,9 +422,6 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * @return bool - */ public function getExpandGroupSearch(): bool { return $this->expandGroupSearch; @@ -483,13 +429,12 @@ class GroupCollector implements GroupCollectorInterface /** * Return the transaction journals without group information. Is useful in some instances. - * - * @return array */ public function getExtractedJournals(): array { $selection = $this->getGroups(); $return = []; + /** @var array $group */ foreach ($selection as $group) { $count = count($group['transactions']); @@ -505,8 +450,6 @@ class GroupCollector implements GroupCollectorInterface /** * Return the groups. - * - * @return Collection */ public function getGroups(): Collection { @@ -516,14 +459,16 @@ class GroupCollector implements GroupCollectorInterface // add to query: $this->query->orWhereIn('transaction_journals.transaction_group_id', $groupIds); } - - $result = $this->query->get($this->fields); + $result = $this->query->get($this->fields); // now to parse this into an array. - $collection = $this->parseArray($result); + $collection = $this->parseArray($result); // filter the array using all available post filters: - $collection = $this->postFilterCollection($collection); + $collection = $this->postFilterCollection($collection); + + // sort the collection, if sort instructions are present. + $collection = $this->sortCollection($collection); // count it and continue: $this->total = $collection->count(); @@ -534,40 +479,41 @@ class GroupCollector implements GroupCollectorInterface return $collection->slice($offset, $this->limit); } + // OR filter the array according to the start and end row variable + if (null !== $this->startRow && null !== $this->endRow) { + return $collection->slice($this->startRow, $this->endRow); + } return $collection; } - /** - * @return array - */ private function getCollectedGroupIds(): array { return $this->query->get(['transaction_journals.transaction_group_id'])->pluck('transaction_group_id')->toArray(); } /** - * @param Collection $collection - * - * @return Collection * @throws FireflyException */ private function parseArray(Collection $collection): Collection { $groups = []; + /** @var TransactionJournal $augumentedJournal */ foreach ($collection as $augumentedJournal) { - $groupId = (int)$augumentedJournal->transaction_group_id; + $groupId = (int)$augumentedJournal->transaction_group_id; if (!array_key_exists($groupId, $groups)) { // make new array - $parsedGroup = $this->parseAugmentedJournal($augumentedJournal); - $groupArray = [ + $parsedGroup = $this->parseAugmentedJournal($augumentedJournal); + $groupArray = [ 'id' => (int)$augumentedJournal->transaction_group_id, - 'user_id' => (int)$augumentedJournal->user_id, - 'user_group_id' => (int)$augumentedJournal->user_group_id, + 'user_id' => $augumentedJournal->user_id, + 'user_group_id' => $augumentedJournal->user_group_id, // Field transaction_group_title was added by the query. 'title' => $augumentedJournal->transaction_group_title, // @phpstan-ignore-line + 'created_at' => new Carbon($augumentedJournal->group_created_at, config('app.timezone')), + 'updated_at' => new Carbon($augumentedJournal->group_updated_at, config('app.timezone')), 'transaction_type' => $parsedGroup['transaction_type_type'], 'count' => 1, 'sums' => [], @@ -577,6 +523,7 @@ class GroupCollector implements GroupCollectorInterface $journalId = (int)$augumentedJournal->transaction_journal_id; // @phpstan-ignore-line $groupArray['transactions'][$journalId] = $parsedGroup; $groups[$groupId] = $groupArray; + continue; } // or parse the rest. @@ -590,7 +537,7 @@ class GroupCollector implements GroupCollectorInterface if (!array_key_exists($journalId, $groups[$groupId]['transactions'])) { // create second, third, fourth split: - $groups[$groupId]['count']++; + ++$groups[$groupId]['count']; $groups[$groupId]['transactions'][$journalId] = $this->parseAugmentedJournal($augumentedJournal); } } @@ -601,9 +548,6 @@ class GroupCollector implements GroupCollectorInterface } /** - * @param TransactionJournal $augumentedJournal - * - * @return array * @throws FireflyException */ private function parseAugmentedJournal(TransactionJournal $augumentedJournal): array @@ -617,6 +561,7 @@ class GroupCollector implements GroupCollectorInterface $result['book_date'] = null; $result['due_date'] = null; $result['process_date'] = null; + try { $result['date'] = new Carbon($result['date'], 'UTC'); $result['created_at'] = new Carbon($result['created_at'], 'UTC'); @@ -626,13 +571,14 @@ class GroupCollector implements GroupCollectorInterface $result['date']->setTimezone(config('app.timezone')); $result['created_at']->setTimezone(config('app.timezone')); $result['updated_at']->setTimezone(config('app.timezone')); - } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); + } catch (\Exception $e) { // intentional generic exception + app('log')->error($e->getMessage()); + throw new FireflyException($e->getMessage(), 0, $e); } // try to process meta date value (if present) - $dates = ['interest_date', 'payment_date', 'invoice_date', 'book_date', 'due_date', 'process_date']; + $dates = ['interest_date', 'payment_date', 'invoice_date', 'book_date', 'due_date', 'process_date']; if (array_key_exists('meta_name', $result) && in_array($result['meta_name'], $dates, true)) { $name = $result['meta_name']; if (array_key_exists('meta_data', $result) && '' !== (string)$result['meta_data']) { @@ -641,19 +587,20 @@ class GroupCollector implements GroupCollectorInterface } // convert values to integers: - $result = $this->convertToInteger($result); + $result = $this->convertToInteger($result); // convert back to strings because SQLite is dumb like that. - $result = $this->convertToStrings($result); + $result = $this->convertToStrings($result); - $result['reconciled'] = 1 === (int)$result['reconciled']; + $result['reconciled'] = 1 === (int)$result['reconciled']; if (array_key_exists('tag_id', $result) && null !== $result['tag_id']) { // assume the other fields are present as well. - $tagId = (int)$augumentedJournal['tag_id']; - $tagDate = null; + $tagId = (int)$augumentedJournal['tag_id']; + $tagDate = null; + try { $tagDate = Carbon::parse($augumentedJournal['tag_date']); } catch (InvalidFormatException $e) { - Log::debug(sprintf('Could not parse date: %s', $e->getMessage())); + app('log')->debug(sprintf('Could not parse date: %s', $e->getMessage())); } $result['tags'][$tagId] = [ @@ -682,7 +629,6 @@ class GroupCollector implements GroupCollectorInterface $result['tag_name'], $result['tag_date'], $result['tag_description'], $result['tag_latitude'], $result['tag_longitude'], $result['tag_zoom_level'], $result['attachment_filename'], $result['attachment_id'] - ); return $result; @@ -690,10 +636,6 @@ class GroupCollector implements GroupCollectorInterface /** * Convert a selected set of fields to arrays. - * - * @param array $array - * - * @return array */ private function convertToInteger(array $array): array { @@ -704,11 +646,6 @@ class GroupCollector implements GroupCollectorInterface return $array; } - /** - * @param array $array - * - * @return array - */ private function convertToStrings(array $array): array { foreach ($this->stringFields as $field) { @@ -718,23 +655,18 @@ class GroupCollector implements GroupCollectorInterface return $array; } - /** - * @param array $existingJournal - * @param TransactionJournal $newJournal - * - * @return array - */ private function mergeTags(array $existingJournal, TransactionJournal $newJournal): array { $newArray = $newJournal->toArray(); if (array_key_exists('tag_id', $newArray)) { // assume the other fields are present as well. - $tagId = (int)$newJournal['tag_id']; + $tagId = (int)$newJournal['tag_id']; + + $tagDate = null; - $tagDate = null; try { $tagDate = Carbon::parse($newArray['tag_date']); } catch (InvalidFormatException $e) { - Log::debug(sprintf('Could not parse date: %s', $e->getMessage())); + app('log')->debug(sprintf('Could not parse date: %s', $e->getMessage())); } $existingJournal['tags'][$tagId] = [ @@ -748,17 +680,11 @@ class GroupCollector implements GroupCollectorInterface return $existingJournal; } - /** - * @param array $existingJournal - * @param TransactionJournal $newJournal - * - * @return array - */ private function mergeAttachments(array $existingJournal, TransactionJournal $newJournal): array { $newArray = $newJournal->toArray(); if (array_key_exists('attachment_id', $newArray)) { - $attachmentId = (int)$newJournal['attachment_id']; + $attachmentId = (int)$newJournal['attachment_id']; $existingJournal['attachments'][$attachmentId] = [ 'id' => $attachmentId, @@ -768,11 +694,6 @@ class GroupCollector implements GroupCollectorInterface return $existingJournal; } - /** - * @param array $groups - * - * @return array - */ private function parseSums(array $groups): array { /** @@ -782,7 +703,10 @@ class GroupCollector implements GroupCollectorInterface foreach ($groups as $groudId => $group) { /** @var array $transaction */ foreach ($group['transactions'] as $transaction) { - $currencyId = (int)$transaction['currency_id']; + $currencyId = (int)$transaction['currency_id']; + if (null === $transaction['amount']) { + throw new FireflyException(sprintf('Amount is NULL for a transaction in group #%d, please investigate.', $groudId)); + } // set default: if (!array_key_exists($currencyId, $groups[$groudId]['sums'])) { @@ -795,7 +719,7 @@ class GroupCollector implements GroupCollectorInterface $groups[$groudId]['sums'][$currencyId]['amount'] = bcadd($groups[$groudId]['sums'][$currencyId]['amount'], $transaction['amount']); if (null !== $transaction['foreign_amount'] && null !== $transaction['foreign_currency_id']) { - $currencyId = (int)$transaction['foreign_currency_id']; + $currencyId = (int)$transaction['foreign_currency_id']; // set default: if (!array_key_exists($currencyId, $groups[$groudId]['sums'])) { @@ -813,43 +737,53 @@ class GroupCollector implements GroupCollectorInterface return $groups; } - /** - * @param Collection $collection - * - * @return Collection - */ private function postFilterCollection(Collection $collection): Collection { $currentCollection = $collection; + $countFilters = count($this->postFilters); + $countCollection = count($currentCollection); + if (0 === $countFilters && 0 === $countCollection) { + return $currentCollection; + } + app('log')->debug(sprintf('GroupCollector: postFilterCollection has %d filter(s) and %d transaction(s).', count($this->postFilters), count($currentCollection))); + /** - * @var Closure $function + * @var \Closure $function */ foreach ($this->postFilters as $function) { - $nextCollection = new Collection(); + app('log')->debug('Applying filter...'); + $nextCollection = new Collection(); + // loop everything in the current collection // and save it (or not) in the new collection. // that new collection is the next current collection /** - * @var int $ii * @var array $item */ - foreach ($currentCollection as $ii => $item) { - $result = $function($ii, $item); + foreach ($currentCollection as $item) { + $result = $function($item); if (false === $result) { // skip other filters, continue to next item. continue; } - $nextCollection->push($item); + // if the result is a bool, use the unedited results. + if (true === $result) { + $nextCollection->push($item); + } + // if the result is an array, the filter has changed what's being returned. + if (is_array($result)) { + $nextCollection->push($result); + } } $currentCollection = $nextCollection; + app('log')->debug(sprintf('GroupCollector: postFilterCollection has %d transaction(s) left.', count($currentCollection))); } + return $currentCollection; } /** * Same as getGroups but everything is in a paginator. - * - * @return LengthAwarePaginator */ public function getPaginatedGroups(): LengthAwarePaginator { @@ -857,54 +791,47 @@ class GroupCollector implements GroupCollectorInterface if (0 === $this->limit) { $this->setLimit(50); } + if (null !== $this->startRow && null !== $this->endRow) { + $total = $this->endRow - $this->startRow; + + return new LengthAwarePaginator($set, $this->total, $total, 1); + } return new LengthAwarePaginator($set, $this->total, $this->limit, $this->page); } /** * Limit the number of returned entries. - * - * @param int $limit - * - * @return GroupCollectorInterface */ public function setLimit(int $limit): GroupCollectorInterface { $this->limit = $limit; - //app('log')->debug(sprintf('GroupCollector: The limit is now %d', $limit)); + // app('log')->debug(sprintf('GroupCollector: The limit is now %d', $limit)); return $this; } - /** - * @inheritDoc - */ public function isNotReconciled(): GroupCollectorInterface { $this->query->where('source.reconciled', 0)->where('destination.reconciled', 0); + return $this; } - /** - * @inheritDoc - */ public function isReconciled(): GroupCollectorInterface { $this->query->where('source.reconciled', 1)->where('destination.reconciled', 1); + return $this; } /** * Limit results to a specific currency, either foreign or normal one. - * - * @param TransactionCurrency $currency - * - * @return GroupCollectorInterface */ public function setCurrency(TransactionCurrency $currency): GroupCollectorInterface { $this->query->where( - static function (EloquentBuilder $q) use ($currency) { + static function (EloquentBuilder $q) use ($currency): void { // @phpstan-ignore-line $q->where('source.transaction_currency_id', $currency->id); $q->orWhere('source.foreign_currency_id', $currency->id); } @@ -913,17 +840,20 @@ class GroupCollector implements GroupCollectorInterface return $this; } - /** - * @param bool $expandGroupSearch - */ - public function setExpandGroupSearch(bool $expandGroupSearch): void + public function setEndRow(int $endRow): self { - $this->expandGroupSearch = $expandGroupSearch; + $this->endRow = $endRow; + + return $this; + } + + public function setExpandGroupSearch(bool $expandGroupSearch): GroupCollectorInterface + { + $this->expandGroupSearch = $expandGroupSearch; + + return $this; } - /** - * @inheritDoc - */ public function setForeignCurrency(TransactionCurrency $currency): GroupCollectorInterface { $this->query->where('source.foreign_currency_id', $currency->id); @@ -933,10 +863,6 @@ class GroupCollector implements GroupCollectorInterface /** * Limit the result to a set of specific transaction groups. - * - * @param array $groupIds - * - * @return GroupCollectorInterface */ public function setIds(array $groupIds): GroupCollectorInterface { @@ -947,17 +873,13 @@ class GroupCollector implements GroupCollectorInterface /** * Limit the result to a set of specific journals. - * - * @param array $journalIds - * - * @return GroupCollectorInterface */ public function setJournalIds(array $journalIds): GroupCollectorInterface { if (0 !== count($journalIds)) { // make all integers. $integerIDs = array_map('intval', $journalIds); - + Log::debug(sprintf('GroupCollector: setJournalIds: %s', implode(', ', $integerIDs))); $this->query->whereIn('transaction_journals.id', $integerIDs); } @@ -967,26 +889,18 @@ class GroupCollector implements GroupCollectorInterface /** * Set the page to get. - * - * @param int $page - * - * @return GroupCollectorInterface */ public function setPage(int $page): GroupCollectorInterface { $page = 0 === $page ? 1 : $page; $this->page = $page; - //app('log')->debug(sprintf('GroupCollector: page is now %d', $page)); + // app('log')->debug(sprintf('GroupCollector: page is now %d', $page)); return $this; } /** * Search for words in descriptions. - * - * @param array $array - * - * @return GroupCollectorInterface */ public function setSearchWords(array $array): GroupCollectorInterface { @@ -994,9 +908,9 @@ class GroupCollector implements GroupCollectorInterface return $this; } $this->query->where( - static function (EloquentBuilder $q) use ($array) { + static function (EloquentBuilder $q) use ($array): void { // @phpstan-ignore-line $q->where( - static function (EloquentBuilder $q1) use ($array) { + static function (EloquentBuilder $q1) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%%%s%%', $word); $q1->where('transaction_journals.description', 'LIKE', $keyword); @@ -1004,7 +918,7 @@ class GroupCollector implements GroupCollectorInterface } ); $q->orWhere( - static function (EloquentBuilder $q2) use ($array) { + static function (EloquentBuilder $q2) use ($array): void { foreach ($array as $word) { $keyword = sprintf('%%%s%%', $word); $q2->where('transaction_groups.title', 'LIKE', $keyword); @@ -1017,12 +931,15 @@ class GroupCollector implements GroupCollectorInterface return $this; } + public function setStartRow(int $startRow): self + { + $this->startRow = $startRow; + + return $this; + } + /** * Limit the search to one specific transaction group. - * - * @param TransactionGroup $transactionGroup - * - * @return GroupCollectorInterface */ public function setTransactionGroup(TransactionGroup $transactionGroup): GroupCollectorInterface { @@ -1033,10 +950,6 @@ class GroupCollector implements GroupCollectorInterface /** * Limit the included transaction types. - * - * @param array $types - * - * @return GroupCollectorInterface */ public function setTypes(array $types): GroupCollectorInterface { @@ -1047,10 +960,6 @@ class GroupCollector implements GroupCollectorInterface /** * Set the user object and start the query. - * - * @param User $user - * - * @return GroupCollectorInterface */ public function setUser(User $user): GroupCollectorInterface { @@ -1067,27 +976,29 @@ class GroupCollector implements GroupCollectorInterface */ private function startQuery(): void { - //app('log')->debug('GroupCollector::startQuery'); + // app('log')->debug('GroupCollector::startQuery'); $this->query = $this->user - //->transactionGroups() - //->leftJoin('transaction_journals', 'transaction_journals.transaction_group_id', 'transaction_groups.id') + // ->transactionGroups() + // ->leftJoin('transaction_journals', 'transaction_journals.transaction_group_id', 'transaction_groups.id') ->transactionJournals() ->leftJoin('transaction_groups', 'transaction_journals.transaction_group_id', 'transaction_groups.id') // join source transaction. ->leftJoin( 'transactions as source', - function (JoinClause $join) { + static function (JoinClause $join): void { $join->on('source.transaction_journal_id', '=', 'transaction_journals.id') - ->where('source.amount', '<', 0); + ->where('source.amount', '<', 0) + ; } ) // join destination transaction ->leftJoin( 'transactions as destination', - function (JoinClause $join) { + static function (JoinClause $join): void { $join->on('destination.transaction_journal_id', '=', 'transaction_journals.id') - ->where('destination.amount', '>', 0); + ->where('destination.amount', '>', 0) + ; } ) // left join transaction type. @@ -1102,15 +1013,12 @@ class GroupCollector implements GroupCollectorInterface ->orderBy('transaction_journals.order', 'ASC') ->orderBy('transaction_journals.id', 'DESC') ->orderBy('transaction_journals.description', 'DESC') - ->orderBy('source.amount', 'DESC'); + ->orderBy('source.amount', 'DESC') + ; } /** * Set the user object and start the query. - * - * @param User $user - * - * @return GroupCollectorInterface */ public function setUserGroup(UserGroup $userGroup): GroupCollectorInterface { @@ -1127,7 +1035,7 @@ class GroupCollector implements GroupCollectorInterface */ private function startQueryForGroup(): void { - //app('log')->debug('GroupCollector::startQuery'); + // app('log')->debug('GroupCollector::startQuery'); $this->query = $this->userGroup ->transactionJournals() ->leftJoin('transaction_groups', 'transaction_journals.transaction_group_id', 'transaction_groups.id') @@ -1135,17 +1043,19 @@ class GroupCollector implements GroupCollectorInterface // join source transaction. ->leftJoin( 'transactions as source', - function (JoinClause $join) { + static function (JoinClause $join): void { $join->on('source.transaction_journal_id', '=', 'transaction_journals.id') - ->where('source.amount', '<', 0); + ->where('source.amount', '<', 0) + ; } ) // join destination transaction ->leftJoin( 'transactions as destination', - function (JoinClause $join) { + static function (JoinClause $join): void { $join->on('destination.transaction_journal_id', '=', 'transaction_journals.id') - ->where('destination.amount', '>', 0); + ->where('destination.amount', '>', 0) + ; } ) // left join transaction type. @@ -1160,24 +1070,61 @@ class GroupCollector implements GroupCollectorInterface ->orderBy('transaction_journals.order', 'ASC') ->orderBy('transaction_journals.id', 'DESC') ->orderBy('transaction_journals.description', 'DESC') - ->orderBy('source.amount', 'DESC'); + ->orderBy('source.amount', 'DESC') + ; } /** * Automatically include all stuff required to make API calls work. - * - * @return GroupCollectorInterface */ public function withAPIInformation(): GroupCollectorInterface { // include source + destination account name and type. $this->withAccountInformation() // include category ID + name (if any) - ->withCategoryInformation() + ->withCategoryInformation() // include budget ID + name (if any) - ->withBudgetInformation() + ->withBudgetInformation() // include bill ID + name (if any) - ->withBillInformation(); + ->withBillInformation() + ; + + return $this; + } + + #[\Override] + public function sortCollection(Collection $collection): Collection + { + /** + * @var string $field + * @var string $direction + */ + foreach ($this->sorting as $field => $direction) { + $func = 'ASC' === $direction ? 'sortBy' : 'sortByDesc'; + $collection = $collection->{$func}(function (array $product, int $key) use ($field) { // @phpstan-ignore-line + // depends on $field: + if ('description' === $field) { + if (1 === count($product['transactions'])) { + return array_values($product['transactions'])[0][$field]; + } + if (count($product['transactions']) > 1) { + return $product['title']; + } + + return 'zzz'; + } + + exit('here we are'); + }); + } + + return $collection; + } + + #[\Override] + public function setSorting(array $instructions): GroupCollectorInterface + { + $this->sorting = $instructions; return $this; } diff --git a/app/Helpers/Collector/GroupCollectorInterface.php b/app/Helpers/Collector/GroupCollectorInterface.php index 49880b7cf2..a77fb36adb 100644 --- a/app/Helpers/Collector/GroupCollectorInterface.php +++ b/app/Helpers/Collector/GroupCollectorInterface.php @@ -42,1504 +42,693 @@ interface GroupCollectorInterface { /** * Get transactions with a specific amount. - * - * @param string $amount - * - * @return GroupCollectorInterface */ - public function amountIs(string $amount): GroupCollectorInterface; + public function amountIs(string $amount): self; - /** - * @param string $amount - * - * @return GroupCollectorInterface - */ - public function amountIsNot(string $amount): GroupCollectorInterface; + public function amountIsNot(string $amount): self; /** * Get transactions where the amount is less than. - * - * @param string $amount - * - * @return GroupCollectorInterface */ - public function amountLess(string $amount): GroupCollectorInterface; + public function amountLess(string $amount): self; /** * Get transactions where the foreign amount is more than. - * - * @param string $amount - * - * @return GroupCollectorInterface */ - public function amountMore(string $amount): GroupCollectorInterface; + public function amountMore(string $amount): self; - /** - * @param string $name - * - * @return GroupCollectorInterface - */ - public function attachmentNameContains(string $name): GroupCollectorInterface; + public function attachmentNameContains(string $name): self; - /** - * @param string $name - * - * @return GroupCollectorInterface - */ - public function attachmentNameDoesNotContain(string $name): GroupCollectorInterface; + public function attachmentNameDoesNotContain(string $name): self; - /** - * @param string $name - * - * @return GroupCollectorInterface - */ - public function attachmentNameDoesNotEnd(string $name): GroupCollectorInterface; + public function attachmentNameDoesNotEnd(string $name): self; - /** - * @param string $name - * - * @return GroupCollectorInterface - */ - public function attachmentNameDoesNotStart(string $name): GroupCollectorInterface; + public function attachmentNameDoesNotStart(string $name): self; - /** - * @param string $name - * - * @return GroupCollectorInterface - */ - public function attachmentNameEnds(string $name): GroupCollectorInterface; + public function attachmentNameEnds(string $name): self; - /** - * @param string $name - * - * @return GroupCollectorInterface - */ - public function attachmentNameIs(string $name): GroupCollectorInterface; + public function attachmentNameIs(string $name): self; - /** - * @param string $name - * - * @return GroupCollectorInterface - */ - public function attachmentNameIsNot(string $name): GroupCollectorInterface; + public function attachmentNameIsNot(string $name): self; - /** - * @param string $name - * - * @return GroupCollectorInterface - */ - public function attachmentNameStarts(string $name): GroupCollectorInterface; + public function attachmentNameStarts(string $name): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function attachmentNotesAre(string $value): GroupCollectorInterface; + public function attachmentNotesAre(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function attachmentNotesAreNot(string $value): GroupCollectorInterface; + public function attachmentNotesAreNot(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function attachmentNotesContains(string $value): GroupCollectorInterface; + public function attachmentNotesContains(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function attachmentNotesDoNotContain(string $value): GroupCollectorInterface; + public function attachmentNotesDoNotContain(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function attachmentNotesDoNotEnd(string $value): GroupCollectorInterface; + public function attachmentNotesDoNotEnd(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function attachmentNotesDoNotStart(string $value): GroupCollectorInterface; + public function attachmentNotesDoNotStart(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function attachmentNotesEnds(string $value): GroupCollectorInterface; + public function attachmentNotesEnds(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function attachmentNotesStarts(string $value): GroupCollectorInterface; + public function attachmentNotesStarts(string $value): self; - /** - * @param string $day - * - * @return GroupCollectorInterface - */ - public function dayAfter(string $day): GroupCollectorInterface; + public function dayAfter(string $day): self; - /** - * @param string $day - * - * @return GroupCollectorInterface - */ - public function dayBefore(string $day): GroupCollectorInterface; + public function dayBefore(string $day): self; - /** - * @param string $day - * - * @return GroupCollectorInterface - */ - public function dayIs(string $day): GroupCollectorInterface; + public function dayIs(string $day): self; - /** - * @param string $day - * - * @return GroupCollectorInterface - */ - public function dayIsNot(string $day): GroupCollectorInterface; + public function dayIsNot(string $day): self; /** * End of the description must not match: - * - * @param array $array - * - * @return GroupCollectorInterface */ - public function descriptionDoesNotEnd(array $array): GroupCollectorInterface; + public function descriptionDoesNotEnd(array $array): self; /** * Beginning of the description must not start with: - * - * @param array $array - * - * @return GroupCollectorInterface */ - public function descriptionDoesNotStart(array $array): GroupCollectorInterface; + public function descriptionDoesNotStart(array $array): self; /** * End of the description must match: - * - * @param array $array - * - * @return GroupCollectorInterface */ - public function descriptionEnds(array $array): GroupCollectorInterface; + public function descriptionEnds(array $array): self; /** * Description must be: - * - * @param string $value - * - * @return GroupCollectorInterface */ - public function descriptionIs(string $value): GroupCollectorInterface; + public function descriptionIs(string $value): self; /** * Description must not be: - * - * @param string $value - * - * @return GroupCollectorInterface */ - public function descriptionIsNot(string $value): GroupCollectorInterface; + public function descriptionIsNot(string $value): self; /** * Beginning of the description must match: - * - * @param array $array - * - * @return GroupCollectorInterface */ - public function descriptionStarts(array $array): GroupCollectorInterface; + public function descriptionStarts(array $array): self; /** * These accounts must not be accounts. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ - public function excludeAccounts(Collection $accounts): GroupCollectorInterface; + public function excludeAccounts(Collection $accounts): self; /** * Exclude a specific set of bills - * - * @param Collection $bills - * - * @return GroupCollectorInterface */ - public function excludeBills(Collection $bills): GroupCollectorInterface; + public function excludeBills(Collection $bills): self; /** * Exclude a budget - * - * @param Budget $budget - * - * @return GroupCollectorInterface */ - public function excludeBudget(Budget $budget): GroupCollectorInterface; + public function excludeBudget(Budget $budget): self; /** * Exclude a budget. - * - * @param Collection $budgets - * - * @return GroupCollectorInterface */ - public function excludeBudgets(Collection $budgets): GroupCollectorInterface; + public function excludeBudgets(Collection $budgets): self; /** * Exclude a set of categories. - * - * @param Collection $categories - * - * @return GroupCollectorInterface */ - public function excludeCategories(Collection $categories): GroupCollectorInterface; + public function excludeCategories(Collection $categories): self; /** * Exclude a specific category - * - * @param Category $category - * - * @return GroupCollectorInterface */ - public function excludeCategory(Category $category): GroupCollectorInterface; + public function excludeCategory(Category $category): self; /** * Limit results to NOT a specific currency, either foreign or normal one. - * - * @param TransactionCurrency $currency - * - * @return GroupCollectorInterface */ - public function excludeCurrency(TransactionCurrency $currency): GroupCollectorInterface; + public function excludeCurrency(TransactionCurrency $currency): self; /** * Exclude destination accounts. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ - public function excludeDestinationAccounts(Collection $accounts): GroupCollectorInterface; + public function excludeDestinationAccounts(Collection $accounts): self; /** * Look for specific external ID's. - * - * @param string $externalId - * - * @return GroupCollectorInterface */ - public function excludeExternalId(string $externalId): GroupCollectorInterface; + public function excludeExternalId(string $externalId): self; - /** - * @param string $url - * - * @return GroupCollectorInterface - */ - public function excludeExternalUrl(string $url): GroupCollectorInterface; + public function excludeExternalUrl(string $url): self; /** * Limit results to exclude a specific foreign currency. - * - * @param TransactionCurrency $currency - * - * @return GroupCollectorInterface */ - public function excludeForeignCurrency(TransactionCurrency $currency): GroupCollectorInterface; + public function excludeForeignCurrency(TransactionCurrency $currency): self; /** * Limit the result to NOT a set of specific transaction groups. - * - * @param array $groupIds - * - * @return GroupCollectorInterface */ - public function excludeIds(array $groupIds): GroupCollectorInterface; + public function excludeIds(array $groupIds): self; /** * Look for specific external ID's. - * - * @param string $internalReference - * - * @return GroupCollectorInterface */ - public function excludeInternalReference(string $internalReference): GroupCollectorInterface; + public function excludeInternalReference(string $internalReference): self; /** * Limit the result to NOT a set of specific transaction journals. - * - * @param array $journalIds - * - * @return GroupCollectorInterface */ - public function excludeJournalIds(array $journalIds): GroupCollectorInterface; + public function excludeJournalIds(array $journalIds): self; - /** - * @param Carbon $start - * @param Carbon $end - * @param string $field - * - * @return GroupCollectorInterface - */ - public function excludeMetaDateRange(Carbon $start, Carbon $end, string $field): GroupCollectorInterface; + public function excludeMetaDateRange(Carbon $start, Carbon $end, string $field): self; - /** - * @param Carbon $start - * @param Carbon $end - * @param string $field - * - * @return GroupCollectorInterface - */ - public function excludeObjectRange(Carbon $start, Carbon $end, string $field): GroupCollectorInterface; + public function excludeObjectRange(Carbon $start, Carbon $end, string $field): self; - /** - * @param Carbon $start - * @param Carbon $end - * - * @return GroupCollectorInterface - */ - public function excludeRange(Carbon $start, Carbon $end): GroupCollectorInterface; + public function excludeRange(Carbon $start, Carbon $end): self; - /** - * @param string $recurringId - * - * @return GroupCollectorInterface - */ - public function excludeRecurrenceId(string $recurringId): GroupCollectorInterface; + public function excludeRecurrenceId(string $recurringId): self; /** * Exclude words in descriptions. - * - * @param array $array - * - * @return GroupCollectorInterface */ - public function excludeSearchWords(array $array): GroupCollectorInterface; + public function excludeSearchWords(array $array): self; /** * These accounts must not be source accounts. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ - public function excludeSourceAccounts(Collection $accounts): GroupCollectorInterface; + public function excludeSourceAccounts(Collection $accounts): self; /** * Limit the included transaction types. - * - * @param array $types - * - * @return GroupCollectorInterface */ - public function excludeTypes(array $types): GroupCollectorInterface; + public function excludeTypes(array $types): self; - /** - * @return GroupCollectorInterface - */ - public function exists(): GroupCollectorInterface; + public function exists(): self; - /** - * @param string $externalId - * - * @return GroupCollectorInterface - */ - public function externalIdContains(string $externalId): GroupCollectorInterface; + public function externalIdContains(string $externalId): self; - /** - * @param string $externalId - * - * @return GroupCollectorInterface - */ - public function externalIdDoesNotContain(string $externalId): GroupCollectorInterface; + public function externalIdDoesNotContain(string $externalId): self; - /** - * @param string $externalId - * - * @return GroupCollectorInterface - */ - public function externalIdDoesNotEnd(string $externalId): GroupCollectorInterface; + public function externalIdDoesNotEnd(string $externalId): self; - /** - * @param string $externalId - * - * @return GroupCollectorInterface - */ - public function externalIdDoesNotStart(string $externalId): GroupCollectorInterface; + public function externalIdDoesNotStart(string $externalId): self; - /** - * @param string $externalId - * - * @return GroupCollectorInterface - */ - public function externalIdEnds(string $externalId): GroupCollectorInterface; + public function externalIdEnds(string $externalId): self; - /** - * @param string $externalId - * - * @return GroupCollectorInterface - */ - public function externalIdStarts(string $externalId): GroupCollectorInterface; + public function externalIdStarts(string $externalId): self; - /** - * @param string $url - * - * @return GroupCollectorInterface - */ - public function externalUrlContains(string $url): GroupCollectorInterface; + public function externalUrlContains(string $url): self; - /** - * @param string $url - * - * @return GroupCollectorInterface - */ - public function externalUrlDoesNotContain(string $url): GroupCollectorInterface; + public function externalUrlDoesNotContain(string $url): self; - /** - * @param string $url - * - * @return GroupCollectorInterface - */ - public function externalUrlDoesNotEnd(string $url): GroupCollectorInterface; + public function externalUrlDoesNotEnd(string $url): self; - /** - * @param string $url - * - * @return GroupCollectorInterface - */ - public function externalUrlDoesNotStart(string $url): GroupCollectorInterface; + public function externalUrlDoesNotStart(string $url): self; - /** - * @param string $url - * - * @return GroupCollectorInterface - */ - public function externalUrlEnds(string $url): GroupCollectorInterface; + public function externalUrlEnds(string $url): self; - /** - * @param string $url - * - * @return GroupCollectorInterface - */ - public function externalUrlStarts(string $url): GroupCollectorInterface; + public function externalUrlStarts(string $url): self; /** * Ensure the search will find nothing at all, zero results. - * - * @return GroupCollectorInterface */ - public function findNothing(): GroupCollectorInterface; + public function findNothing(): self; /** * Get transactions with a specific foreign amount. - * - * @param string $amount - * - * @return GroupCollectorInterface */ - public function foreignAmountIs(string $amount): GroupCollectorInterface; + public function foreignAmountIs(string $amount): self; /** * Get transactions with a specific foreign amount. - * - * @param string $amount - * - * @return GroupCollectorInterface */ - public function foreignAmountIsNot(string $amount): GroupCollectorInterface; + public function foreignAmountIsNot(string $amount): self; /** * Get transactions where the amount is less than. - * - * @param string $amount - * - * @return GroupCollectorInterface */ - public function foreignAmountLess(string $amount): GroupCollectorInterface; + public function foreignAmountLess(string $amount): self; /** * Get transactions where the foreign amount is more than. - * - * @param string $amount - * - * @return GroupCollectorInterface */ - public function foreignAmountMore(string $amount): GroupCollectorInterface; + public function foreignAmountMore(string $amount): self; - /** - * @return bool - */ public function getExpandGroupSearch(): bool; /** * Return the transaction journals without group information. Is useful in some instances. - * - * @return array */ public function getExtractedJournals(): array; /** * Return the groups. - * - * @return Collection */ public function getGroups(): Collection; /** * Same as getGroups but everything is in a paginator. - * - * @return LengthAwarePaginator */ public function getPaginatedGroups(): LengthAwarePaginator; + public function setSorting(array $instructions): self; + /** - * @return GroupCollectorInterface + * Sort the collection on a column. */ - public function hasAnyTag(): GroupCollectorInterface; + public function sortCollection(Collection $collection): Collection; + + public function hasAnyTag(): self; /** * Has attachments - * - * @return GroupCollectorInterface */ - public function hasAttachments(): GroupCollectorInterface; + public function hasAttachments(): self; /** * Has no attachments - * - * @return GroupCollectorInterface */ - public function hasNoAttachments(): GroupCollectorInterface; + public function hasNoAttachments(): self; - /** - * @param string $internalReference - * - * @return GroupCollectorInterface - */ - public function internalReferenceContains(string $internalReference): GroupCollectorInterface; + public function internalReferenceContains(string $internalReference): self; - /** - * @param string $internalReference - * - * @return GroupCollectorInterface - */ - public function internalReferenceDoesNotContain(string $internalReference): GroupCollectorInterface; + public function internalReferenceDoesNotContain(string $internalReference): self; - /** - * @param string $internalReference - * - * @return GroupCollectorInterface - */ - public function internalReferenceDoesNotEnd(string $internalReference): GroupCollectorInterface; + public function internalReferenceDoesNotEnd(string $internalReference): self; - /** - * @param string $internalReference - * - * @return GroupCollectorInterface - */ - public function internalReferenceDoesNotStart(string $internalReference): GroupCollectorInterface; + public function internalReferenceDoesNotStart(string $internalReference): self; - /** - * @param string $internalReference - * - * @return GroupCollectorInterface - */ - public function internalReferenceEnds(string $internalReference): GroupCollectorInterface; + public function internalReferenceEnds(string $internalReference): self; - /** - * @param string $internalReference - * - * @return GroupCollectorInterface - */ - public function internalReferenceStarts(string $internalReference): GroupCollectorInterface; + public function internalReferenceStarts(string $internalReference): self; /** * Only journals that are reconciled. - * - * @return GroupCollectorInterface */ - public function isNotReconciled(): GroupCollectorInterface; + public function isNotReconciled(): self; /** * Only journals that are reconciled. - * - * @return GroupCollectorInterface */ - public function isReconciled(): GroupCollectorInterface; + public function isReconciled(): self; - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaDayAfter(string $day, string $field): GroupCollectorInterface; + public function metaDayAfter(string $day, string $field): self; - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaDayBefore(string $day, string $field): GroupCollectorInterface; + public function metaDayBefore(string $day, string $field): self; - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaDayIs(string $day, string $field): GroupCollectorInterface; + public function metaDayIs(string $day, string $field): self; - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaDayIsNot(string $day, string $field): GroupCollectorInterface; + public function metaDayIsNot(string $day, string $field): self; - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaMonthAfter(string $month, string $field): GroupCollectorInterface; + public function metaMonthAfter(string $month, string $field): self; - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaMonthBefore(string $month, string $field): GroupCollectorInterface; + public function metaMonthBefore(string $month, string $field): self; - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaMonthIs(string $month, string $field): GroupCollectorInterface; + public function metaMonthIs(string $month, string $field): self; - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaMonthIsNot(string $month, string $field): GroupCollectorInterface; + public function metaMonthIsNot(string $month, string $field): self; - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaYearAfter(string $year, string $field): GroupCollectorInterface; + public function metaYearAfter(string $year, string $field): self; - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaYearBefore(string $year, string $field): GroupCollectorInterface; + public function metaYearBefore(string $year, string $field): self; - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaYearIs(string $year, string $field): GroupCollectorInterface; + public function metaYearIs(string $year, string $field): self; - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ - public function metaYearIsNot(string $year, string $field): GroupCollectorInterface; + public function metaYearIsNot(string $year, string $field): self; - /** - * @param string $month - * - * @return GroupCollectorInterface - */ - public function monthAfter(string $month): GroupCollectorInterface; + public function monthAfter(string $month): self; - /** - * @param string $month - * - * @return GroupCollectorInterface - */ - public function monthBefore(string $month): GroupCollectorInterface; + public function monthBefore(string $month): self; - /** - * @param string $month - * - * @return GroupCollectorInterface - */ - public function monthIs(string $month): GroupCollectorInterface; + public function monthIs(string $month): self; - /** - * @param string $month - * - * @return GroupCollectorInterface - */ - public function monthIsNot(string $month): GroupCollectorInterface; + public function monthIsNot(string $month): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function notesContain(string $value): GroupCollectorInterface; + public function notesContain(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function notesDoNotContain(string $value): GroupCollectorInterface; + public function notesDoNotContain(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function notesDontEndWith(string $value): GroupCollectorInterface; + public function notesDontEndWith(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function notesDontStartWith(string $value): GroupCollectorInterface; + public function notesDontStartWith(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function notesEndWith(string $value): GroupCollectorInterface; + public function notesEndWith(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function notesExactly(string $value): GroupCollectorInterface; + public function notesExactly(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function notesExactlyNot(string $value): GroupCollectorInterface; + public function notesExactlyNot(string $value): self; - /** - * @param string $value - * - * @return GroupCollectorInterface - */ - public function notesStartWith(string $value): GroupCollectorInterface; + public function notesStartWith(string $value): self; - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectDayAfter(string $day, string $field): GroupCollectorInterface; + public function objectDayAfter(string $day, string $field): self; - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectDayBefore(string $day, string $field): GroupCollectorInterface; + public function objectDayBefore(string $day, string $field): self; - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectDayIs(string $day, string $field): GroupCollectorInterface; + public function objectDayIs(string $day, string $field): self; - /** - * @param string $day - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectDayIsNot(string $day, string $field): GroupCollectorInterface; + public function objectDayIsNot(string $day, string $field): self; - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectMonthAfter(string $month, string $field): GroupCollectorInterface; + public function objectMonthAfter(string $month, string $field): self; - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectMonthBefore(string $month, string $field): GroupCollectorInterface; + public function objectMonthBefore(string $month, string $field): self; - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectMonthIs(string $month, string $field): GroupCollectorInterface; + public function objectMonthIs(string $month, string $field): self; - /** - * @param string $month - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectMonthIsNot(string $month, string $field): GroupCollectorInterface; + public function objectMonthIsNot(string $month, string $field): self; - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectYearAfter(string $year, string $field): GroupCollectorInterface; + public function objectYearAfter(string $year, string $field): self; - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectYearBefore(string $year, string $field): GroupCollectorInterface; + public function objectYearBefore(string $year, string $field): self; - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectYearIs(string $year, string $field): GroupCollectorInterface; + public function objectYearIs(string $year, string $field): self; - /** - * @param string $year - * @param string $field - * - * @return GroupCollectorInterface - */ - public function objectYearIsNot(string $year, string $field): GroupCollectorInterface; + public function objectYearIsNot(string $year, string $field): self; /** * Define which accounts can be part of the source and destination transactions. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ - public function setAccounts(Collection $accounts): GroupCollectorInterface; + public function setAccounts(Collection $accounts): self; /** * Collect transactions after a specific date. - * - * @param Carbon $date - * - * @return GroupCollectorInterface */ - public function setAfter(Carbon $date): GroupCollectorInterface; + public function setAfter(Carbon $date): self; + + /** + * Limit results to a SPECIFIC set of tags. + */ + public function setAllTags(Collection $tags): self; /** * Collect transactions before a specific date. - * - * @param Carbon $date - * - * @return GroupCollectorInterface */ - public function setBefore(Carbon $date): GroupCollectorInterface; + public function setBefore(Carbon $date): self; /** * Limit the search to a specific bill. - * - * @param Bill $bill - * - * @return GroupCollectorInterface */ - public function setBill(Bill $bill): GroupCollectorInterface; + public function setBill(Bill $bill): self; /** * Limit the search to a specific set of bills. - * - * @param Collection $bills - * - * @return GroupCollectorInterface */ - public function setBills(Collection $bills): GroupCollectorInterface; + public function setBills(Collection $bills): self; /** * Both source AND destination must be in this list of accounts. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ - public function setBothAccounts(Collection $accounts): GroupCollectorInterface; + public function setBothAccounts(Collection $accounts): self; /** * Limit the search to a specific budget. - * - * @param Budget $budget - * - * @return GroupCollectorInterface */ - public function setBudget(Budget $budget): GroupCollectorInterface; + public function setBudget(Budget $budget): self; /** * Limit the search to a specific set of budgets. - * - * @param Collection $budgets - * - * @return GroupCollectorInterface */ - public function setBudgets(Collection $budgets): GroupCollectorInterface; + public function setBudgets(Collection $budgets): self; /** * Limit the search to a specific bunch of categories. - * - * @param Collection $categories - * - * @return GroupCollectorInterface */ - public function setCategories(Collection $categories): GroupCollectorInterface; + public function setCategories(Collection $categories): self; /** * Limit the search to a specific category. - * - * @param Category $category - * - * @return GroupCollectorInterface */ - public function setCategory(Category $category): GroupCollectorInterface; + public function setCategory(Category $category): self; /** * Collect transactions created on a specific date. - * - * @param Carbon $date - * - * @return GroupCollectorInterface */ - public function setCreatedAt(Carbon $date): GroupCollectorInterface; + public function setCreatedAt(Carbon $date): self; /** * Limit results to a specific currency, either foreign or normal one. - * - * @param TransactionCurrency $currency - * - * @return GroupCollectorInterface */ - public function setCurrency(TransactionCurrency $currency): GroupCollectorInterface; + public function setCurrency(TransactionCurrency $currency): self; /** * Set destination accounts. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ - public function setDestinationAccounts(Collection $accounts): GroupCollectorInterface; + public function setDestinationAccounts(Collection $accounts): self; /** * Set the end time of the results to return. - * - * @param Carbon $end - * - * @return GroupCollectorInterface */ - public function setEnd(Carbon $end): GroupCollectorInterface; - - /** - * @param bool $expandGroupSearch - */ - public function setExpandGroupSearch(bool $expandGroupSearch); - - /** - * Look for specific external ID's. - * - * @param string $externalId - * - * @return GroupCollectorInterface - */ - public function setExternalId(string $externalId): GroupCollectorInterface; - - /** - * @param string $url - * - * @return GroupCollectorInterface - */ - public function setExternalUrl(string $url): GroupCollectorInterface; - - /** - * Limit results to a specific foreign currency. - * - * @param TransactionCurrency $currency - * - * @return GroupCollectorInterface - */ - public function setForeignCurrency(TransactionCurrency $currency): GroupCollectorInterface; - - /** - * Limit the result to a set of specific transaction groups. - * - * @param array $groupIds - * - * @return GroupCollectorInterface - */ - public function setIds(array $groupIds): GroupCollectorInterface; - - /** - * Look for specific external ID's. - * - * @param string $internalReference - * - * @return GroupCollectorInterface - */ - public function setInternalReference(string $internalReference): GroupCollectorInterface; - - /** - * Limit the result to a set of specific transaction journals. - * - * @param array $journalIds - * - * @return GroupCollectorInterface - */ - public function setJournalIds(array $journalIds): GroupCollectorInterface; - - /** - * Limit the number of returned entries. - * - * @param int $limit - * - * @return GroupCollectorInterface - */ - public function setLimit(int $limit): GroupCollectorInterface; - - /** - * Collect transactions after a specific date. - * - * @param Carbon $date - * @param string $field - * - * @return GroupCollectorInterface - */ - public function setMetaAfter(Carbon $date, string $field): GroupCollectorInterface; - - /** - * Collect transactions before a specific date. - * - * @param Carbon $date - * @param string $field - * - * @return GroupCollectorInterface - */ - public function setMetaBefore(Carbon $date, string $field): GroupCollectorInterface; - - /** - * Set the start and end time of the results to return, based on meta data. - * - * @param Carbon $start - * @param Carbon $end - * @param string $field - * - * @return GroupCollectorInterface - */ - public function setMetaDateRange(Carbon $start, Carbon $end, string $field): GroupCollectorInterface; - - /** - * Define which accounts can NOT be part of the source and destination transactions. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface - */ - public function setNotAccounts(Collection $accounts): GroupCollectorInterface; - - /** - * @param Carbon $date - * @param string $field - * - * @return GroupCollectorInterface - */ - public function setObjectAfter(Carbon $date, string $field): GroupCollectorInterface; - - /** - * @param Carbon $date - * @param string $field - * - * @return GroupCollectorInterface - */ - public function setObjectBefore(Carbon $date, string $field): GroupCollectorInterface; - - /** - * @param Carbon $start - * @param Carbon $end - * @param string $field - * - * @return GroupCollectorInterface - */ - public function setObjectRange(Carbon $start, Carbon $end, string $field): GroupCollectorInterface; + public function setEnd(Carbon $end): self; /** * Set the page to get. - * - * @param int $page - * - * @return GroupCollectorInterface */ - public function setPage(int $page): GroupCollectorInterface; + public function setEndRow(int $endRow): self; + + public function setExpandGroupSearch(bool $expandGroupSearch): self; + + /** + * Look for specific external ID's. + */ + public function setExternalId(string $externalId): self; + + public function setExternalUrl(string $url): self; + + /** + * Limit results to a specific foreign currency. + */ + public function setForeignCurrency(TransactionCurrency $currency): self; + + /** + * Limit the result to a set of specific transaction groups. + */ + public function setIds(array $groupIds): self; + + /** + * Look for specific external ID's. + */ + public function setInternalReference(string $internalReference): self; + + /** + * Limit the result to a set of specific transaction journals. + */ + public function setJournalIds(array $journalIds): self; + + /** + * Limit the number of returned entries. + */ + public function setLimit(int $limit): self; + + /** + * Collect transactions after a specific date. + */ + public function setMetaAfter(Carbon $date, string $field): self; + + /** + * Collect transactions before a specific date. + */ + public function setMetaBefore(Carbon $date, string $field): self; + + /** + * Set the start and end time of the results to return, based on meta data. + */ + public function setMetaDateRange(Carbon $start, Carbon $end, string $field): self; + + /** + * Define which accounts can NOT be part of the source and destination transactions. + */ + public function setNotAccounts(Collection $accounts): self; + + public function setObjectAfter(Carbon $date, string $field): self; + + public function setObjectBefore(Carbon $date, string $field): self; + + public function setObjectRange(Carbon $start, Carbon $end, string $field): self; + + /** + * Set the page to get. + */ + public function setPage(int $page): self; /** * Set the start and end time of the results to return. - * - * @param Carbon $start - * @param Carbon $end - * - * @return GroupCollectorInterface */ - public function setRange(Carbon $start, Carbon $end): GroupCollectorInterface; + public function setRange(Carbon $start, Carbon $end): self; /** * Look for specific recurring ID's. - * - * @param string $recurringId - * - * @return GroupCollectorInterface */ - public function setRecurrenceId(string $recurringId): GroupCollectorInterface; + public function setRecurrenceId(string $recurringId): self; /** * Search for words in descriptions. - * - * @param array $array - * - * @return GroupCollectorInterface */ - public function setSearchWords(array $array): GroupCollectorInterface; + public function setSearchWords(array $array): self; - /** - * @param string $sepaCT - * - * @return GroupCollectorInterface - */ - public function setSepaCT(string $sepaCT): GroupCollectorInterface; + public function setSepaCT(string $sepaCT): self; /** * Set source accounts. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ - public function setSourceAccounts(Collection $accounts): GroupCollectorInterface; + public function setSourceAccounts(Collection $accounts): self; /** * Set the start time of the results to return. - * - * @param Carbon $start - * - * @return GroupCollectorInterface */ - public function setStart(Carbon $start): GroupCollectorInterface; + public function setStart(Carbon $start): self; + + /** + * Set the page to get. + */ + public function setStartRow(int $startRow): self; /** * Limit results to a specific tag. - * - * @param Tag $tag - * - * @return GroupCollectorInterface */ - public function setTag(Tag $tag): GroupCollectorInterface; + public function setTag(Tag $tag): self; /** - * Limit results to a specific set of tags. - * - * @param Collection $tags - * - * @return GroupCollectorInterface + * Limit results to any of the specified tags. */ - public function setTags(Collection $tags): GroupCollectorInterface; + public function setTags(Collection $tags): self; /** * Limit the search to one specific transaction group. - * - * @param TransactionGroup $transactionGroup - * - * @return GroupCollectorInterface */ - public function setTransactionGroup(TransactionGroup $transactionGroup): GroupCollectorInterface; + public function setTransactionGroup(TransactionGroup $transactionGroup): self; /** * Limit the included transaction types. - * - * @param array $types - * - * @return GroupCollectorInterface */ - public function setTypes(array $types): GroupCollectorInterface; + public function setTypes(array $types): self; /** * Collect transactions updated on a specific date. - * - * @param Carbon $date - * - * @return GroupCollectorInterface */ - public function setUpdatedAt(Carbon $date): GroupCollectorInterface; + public function setUpdatedAt(Carbon $date): self; /** * Set the user object and start the query. - * - * @param User $user - * - * @return GroupCollectorInterface */ - public function setUser(User $user): GroupCollectorInterface; + public function setUser(User $user): self; /** * Set the user group object and start the query. - * - * @param UserGroup $userGroup - * - * @return GroupCollectorInterface */ - public function setUserGroup(UserGroup $userGroup): GroupCollectorInterface; + public function setUserGroup(UserGroup $userGroup): self; /** * Only when does not have these tags - * - * @param Collection $tags - * - * @return GroupCollectorInterface */ - public function setWithoutSpecificTags(Collection $tags): GroupCollectorInterface; + public function setWithoutSpecificTags(Collection $tags): self; /** * Either account can be set, but NOT both. This effectively excludes internal transfers. - * - * @param Collection $accounts - * - * @return GroupCollectorInterface */ - public function setXorAccounts(Collection $accounts): GroupCollectorInterface; + public function setXorAccounts(Collection $accounts): self; /** * Automatically include all stuff required to make API calls work. - * - * @return GroupCollectorInterface */ - public function withAPIInformation(): GroupCollectorInterface; + public function withAPIInformation(): self; /** * Will include the source and destination account names and types. - * - * @return GroupCollectorInterface */ - public function withAccountInformation(): GroupCollectorInterface; + public function withAccountInformation(): self; /** * Any notes, no matter what. - * - * @return GroupCollectorInterface */ - public function withAnyNotes(): GroupCollectorInterface; + public function withAnyNotes(): self; /** * Add basic info on attachments of transactions. - * - * @return GroupCollectorInterface */ - public function withAttachmentInformation(): GroupCollectorInterface; + public function withAttachmentInformation(): self; /** * Limit results to transactions without a bill.. - * - * @return GroupCollectorInterface */ - public function withBill(): GroupCollectorInterface; + public function withBill(): self; /** * Include bill name + ID. - * - * @return GroupCollectorInterface */ - public function withBillInformation(): GroupCollectorInterface; + public function withBillInformation(): self; /** * Limit results to a transactions with a budget. - * - * @return GroupCollectorInterface */ - public function withBudget(): GroupCollectorInterface; + public function withBudget(): self; /** * Will include budget ID + name, if any. - * - * @return GroupCollectorInterface */ - public function withBudgetInformation(): GroupCollectorInterface; + public function withBudgetInformation(): self; /** * Limit results to a transactions with a category. - * - * @return GroupCollectorInterface */ - public function withCategory(): GroupCollectorInterface; + public function withCategory(): self; /** * Will include category ID + name, if any. - * - * @return GroupCollectorInterface */ - public function withCategoryInformation(): GroupCollectorInterface; + public function withCategoryInformation(): self; /** * Transactions with any external ID - * - * @return GroupCollectorInterface */ - public function withExternalId(): GroupCollectorInterface; + public function withExternalId(): self; /** * Transactions with any external URL - * - * @return GroupCollectorInterface */ - public function withExternalUrl(): GroupCollectorInterface; + public function withExternalUrl(): self; /** * Transaction must have meta date field X. - * - * @param string $field - * - * @return GroupCollectorInterface */ - public function withMetaDate(string $field): GroupCollectorInterface; + public function withMetaDate(string $field): self; /** * Will include notes. - * - * @return GroupCollectorInterface */ - public function withNotes(): GroupCollectorInterface; + public function withNotes(): self; /** * Add tag info. - * - * @return GroupCollectorInterface */ - public function withTagInformation(): GroupCollectorInterface; + public function withTagInformation(): self; /** * Limit results to a transactions without a bill. - * - * @return GroupCollectorInterface */ - public function withoutBill(): GroupCollectorInterface; + public function withoutBill(): self; /** * Limit results to a transactions without a budget. - * - * @return GroupCollectorInterface */ - public function withoutBudget(): GroupCollectorInterface; + public function withoutBudget(): self; /** * Limit results to a transactions without a category. - * - * @return GroupCollectorInterface */ - public function withoutCategory(): GroupCollectorInterface; + public function withoutCategory(): self; /** * Transactions without an external ID - * - * @return GroupCollectorInterface */ - public function withoutExternalId(): GroupCollectorInterface; + public function withoutExternalId(): self; /** * Transactions without an external URL - * - * @return GroupCollectorInterface */ - public function withoutExternalUrl(): GroupCollectorInterface; + public function withoutExternalUrl(): self; - /** - * @return GroupCollectorInterface - */ - public function withoutNotes(): GroupCollectorInterface; + public function withoutNotes(): self; - /** - * @return GroupCollectorInterface - */ - public function withoutTags(): GroupCollectorInterface; + public function withoutTags(): self; - /** - * @param string $year - * - * @return GroupCollectorInterface - */ - public function yearAfter(string $year): GroupCollectorInterface; + public function yearAfter(string $year): self; - /** - * @param string $year - * - * @return GroupCollectorInterface - */ - public function yearBefore(string $year): GroupCollectorInterface; - - /** - * @param string $year - * - * @return GroupCollectorInterface - */ - public function yearIs(string $year): GroupCollectorInterface; - - /** - * @param string $year - * - * @return GroupCollectorInterface - */ - public function yearIsNot(string $year): GroupCollectorInterface; + public function yearBefore(string $year): self; + public function yearIs(string $year): self; + public function yearIsNot(string $year): self; } diff --git a/app/Helpers/Fiscal/FiscalHelper.php b/app/Helpers/Fiscal/FiscalHelper.php index a1c86ce9eb..c977bc773b 100644 --- a/app/Helpers/Fiscal/FiscalHelper.php +++ b/app/Helpers/Fiscal/FiscalHelper.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Helpers\Fiscal; use Carbon\Carbon; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class FiscalHelper. @@ -44,15 +42,11 @@ class FiscalHelper implements FiscalHelperInterface } /** - * @param Carbon $date - * * @return Carbon date object - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function endOfFiscalYear(Carbon $date): Carbon { - // Log::debug(sprintf('Now in endOfFiscalYear(%s).', $date->format('Y-m-d'))); + // app('log')->debug(sprintf('Now in endOfFiscalYear(%s).', $date->format('Y-m-d'))); $endDate = $this->startOfFiscalYear($date); if (true === $this->useCustomFiscalYear) { // add 1 year and sub 1 day @@ -62,17 +56,13 @@ class FiscalHelper implements FiscalHelperInterface if (false === $this->useCustomFiscalYear) { $endDate->endOfYear(); } - // Log::debug(sprintf('Result of endOfFiscalYear(%s) = %s', $date->format('Y-m-d'), $endDate->format('Y-m-d'))); + // app('log')->debug(sprintf('Result of endOfFiscalYear(%s) = %s', $date->format('Y-m-d'), $endDate->format('Y-m-d'))); return $endDate; } /** - * @param Carbon $date - * * @return Carbon date object - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function startOfFiscalYear(Carbon $date): Carbon { @@ -80,7 +70,11 @@ class FiscalHelper implements FiscalHelperInterface $startDate = clone $date; if (true === $this->useCustomFiscalYear) { $prefStartStr = app('preferences')->get('fiscalYearStart', '01-01')->data; - [$mth, $day] = explode('-', $prefStartStr); + if (is_array($prefStartStr)) { + $prefStartStr = '01-01'; + } + $prefStartStr = (string)$prefStartStr; + [$mth, $day] = explode('-', $prefStartStr); $startDate->day((int)$day)->month((int)$mth); // if start date is after passed date, sub 1 year. @@ -92,7 +86,7 @@ class FiscalHelper implements FiscalHelperInterface $startDate->startOfYear(); } - // Log::debug(sprintf('Result of startOfFiscalYear(%s) = %s', $date->format('Y-m-d'), $startDate->format('Y-m-d'))); + // app('log')->debug(sprintf('Result of startOfFiscalYear(%s) = %s', $date->format('Y-m-d'), $startDate->format('Y-m-d'))); return $startDate; } diff --git a/app/Helpers/Fiscal/FiscalHelperInterface.php b/app/Helpers/Fiscal/FiscalHelperInterface.php index 957c6c36dd..5285048623 100644 --- a/app/Helpers/Fiscal/FiscalHelperInterface.php +++ b/app/Helpers/Fiscal/FiscalHelperInterface.php @@ -34,8 +34,6 @@ interface FiscalHelperInterface * This method produces a clone of the Carbon date object passed, checks preferences * and calculates the last day of the fiscal year. * - * @param Carbon $date - * * @return Carbon date object */ public function endOfFiscalYear(Carbon $date): Carbon; @@ -44,8 +42,6 @@ interface FiscalHelperInterface * This method produces a clone of the Carbon date object passed, checks preferences * and calculates the first day of the fiscal year. * - * @param Carbon $date - * * @return Carbon date object */ public function startOfFiscalYear(Carbon $date): Carbon; diff --git a/app/Helpers/Report/NetWorth.php b/app/Helpers/Report/NetWorth.php index f8505c7321..1e39f98e65 100644 --- a/app/Helpers/Report/NetWorth.php +++ b/app/Helpers/Report/NetWorth.php @@ -29,14 +29,14 @@ use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Models\UserGroup; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface as AdminAccountRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use JsonException; +use Illuminate\Support\Facades\Log; /** * This class can handle both request with and without a user group and will return the appropriate repository when @@ -51,20 +51,21 @@ class NetWorth implements NetWorthInterface private CurrencyRepositoryInterface $currencyRepos; private User $user; - private null | UserGroup $userGroup; + private ?UserGroup $userGroup; /** - * @param Collection $accounts - * @param Carbon $date + * This method collects the user's net worth in ALL the user's currencies + * (1, 4 and 8) and also in the 'native' currency for ease of use. + * + * The set of accounts has to be fed to it. * - * @return array * @throws FireflyException */ public function byAccounts(Collection $accounts, Carbon $date): array { // start in the past, end in the future? use $date - $ids = implode(',', $accounts->pluck('id')->toArray()); - $cache = new CacheProperties(); + $ids = implode(',', $accounts->pluck('id')->toArray()); + $cache = new CacheProperties(); $cache->addProperty($date); $cache->addProperty('net-worth-by-accounts'); $cache->addProperty($ids); @@ -72,188 +73,102 @@ class NetWorth implements NetWorthInterface return $cache->get(); } app('log')->debug(sprintf('Now in byAccounts("%s", "%s")', $ids, $date->format('Y-m-d'))); - + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); $default = app('amount')->getDefaultCurrency(); $converter = new ExchangeRateConverter(); // default "native" currency has everything twice, for consistency. - $netWorth = [ + $netWorth = [ 'native' => [ - 'balance' => '0', - 'native_balance' => '0', - 'currency_id' => (int)$default->id, - 'currency_code' => $default->code, - 'currency_name' => $default->name, - 'currency_symbol' => $default->symbol, - 'currency_decimal_places' => (int)$default->decimal_places, - 'native_id' => (int)$default->id, - 'native_code' => $default->code, - 'native_name' => $default->name, - 'native_symbol' => $default->symbol, - 'native_decimal_places' => (int)$default->decimal_places, + 'balance' => '0', + 'native_balance' => '0', + 'currency_id' => $default->id, + 'currency_code' => $default->code, + 'currency_name' => $default->name, + 'currency_symbol' => $default->symbol, + 'currency_decimal_places' => $default->decimal_places, + 'native_currency_id' => $default->id, + 'native_currency_code' => $default->code, + 'native_currency_name' => $default->name, + 'native_currency_symbol' => $default->symbol, + 'native_currency_decimal_places' => $default->decimal_places, ], ]; - $balances = app('steam')->balancesByAccountsConverted($accounts, $date); + $balances = app('steam')->balancesByAccountsConverted($accounts, $date); /** @var Account $account */ foreach ($accounts as $account) { app('log')->debug(sprintf('Now at account #%d ("%s")', $account->id, $account->name)); - $currency = $this->getRepository()->getAccountCurrency($account); - $currencyId = (int)$currency->id; - $balance = '0'; - $nativeBalance = '0'; - if (array_key_exists((int)$account->id, $balances)) { - $balance = $balances[(int)$account->id]['balance'] ?? '0'; - $nativeBalance = $balances[(int)$account->id]['native_balance'] ?? '0'; + $currency = $this->getRepository()->getAccountCurrency($account); + if (null === $currency) { + $currency = app('amount')->getDefaultCurrency(); + } + $currencyCode = $currency->code; + $balance = '0'; + $nativeBalance = '0'; + if (array_key_exists($account->id, $balances)) { + $balance = $balances[$account->id]['balance'] ?? '0'; + $nativeBalance = $balances[$account->id]['native_balance'] ?? '0'; } app('log')->debug(sprintf('Balance is %s, native balance is %s', $balance, $nativeBalance)); // always subtract virtual balance - $virtualBalance = (string)$account->virtual_balance; + $virtualBalance = $account->virtual_balance; if ('' !== $virtualBalance) { $balance = bcsub($balance, $virtualBalance); $nativeVirtualBalance = $converter->convert($default, $currency, $account->created_at, $virtualBalance); $nativeBalance = bcsub($nativeBalance, $nativeVirtualBalance); } - $netWorth[$currencyId] = $netWorth[$currencyId] ?? [ - 'balance' => '0', - 'native_balance' => '0', - 'currency_id' => $currencyId, - 'currency_code' => $currency->code, - 'currency_name' => $currency->name, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, - 'native_id' => (int)$default->id, - 'native_code' => $default->code, - 'native_name' => $default->name, - 'native_symbol' => $default->symbol, - 'native_decimal_places' => (int)$default->decimal_places, + $netWorth[$currencyCode] ??= [ + 'balance' => '0', + 'native_balance' => '0', + 'currency_id' => (string)$currency->id, + 'currency_code' => $currency->code, + 'currency_name' => $currency->name, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, + 'native_currency_id' => (string)$default->id, + 'native_currency_code' => $default->code, + 'native_currency_name' => $default->name, + 'native_currency_symbol' => $default->symbol, + 'native_currency_decimal_places' => $default->decimal_places, ]; - $netWorth[$currencyId]['balance'] = bcadd($balance, $netWorth[$currencyId]['balance']); - $netWorth[$currencyId]['native_balance'] = bcadd($nativeBalance, $netWorth[$currencyId]['native_balance']); - $netWorth['native']['balance'] = bcadd($nativeBalance, $netWorth['native']['balance']); - $netWorth['native']['native_balance'] = bcadd($nativeBalance, $netWorth['native']['native_balance']); + $netWorth[$currencyCode]['balance'] = bcadd($balance, $netWorth[$currencyCode]['balance']); + $netWorth[$currencyCode]['native_balance'] = bcadd($nativeBalance, $netWorth[$currencyCode]['native_balance']); + $netWorth['native']['balance'] = bcadd($nativeBalance, $netWorth['native']['balance']); + $netWorth['native']['native_balance'] = bcadd($nativeBalance, $netWorth['native']['native_balance']); } $cache->store($netWorth); + $converter->summarize(); return $netWorth; } - /** - * @return AdminAccountRepositoryInterface|AccountRepositoryInterface - */ - private function getRepository(): AdminAccountRepositoryInterface | AccountRepositoryInterface + private function getRepository(): AccountRepositoryInterface|AdminAccountRepositoryInterface { if (null === $this->userGroup) { return $this->accountRepository; } + return $this->adminAccountRepository; } - /** - * Returns the user's net worth in an array with the following layout: - * - * - - * - currency: TransactionCurrency object - * - date: the current date - * - amount: the user's net worth in that currency. - * - * This repeats for each currency the user has transactions in. - * Result of this method is cached. - * - * @param Collection $accounts - * @param Carbon $date - * - * @return array - * @throws JsonException - * @throws FireflyException - * @deprecated - */ - public function getNetWorthByCurrency(Collection $accounts, Carbon $date): array + public function setUser(null|Authenticatable|User $user): void { - // start in the past, end in the future? use $date - $cache = new CacheProperties(); - $cache->addProperty($date); - $cache->addProperty('net-worth-by-currency'); - $cache->addProperty(implode(',', $accounts->pluck('id')->toArray())); - if ($cache->has()) { - return $cache->get(); - } - - $netWorth = []; - $result = []; - // Log::debug(sprintf('Now in getNetWorthByCurrency(%s)', $date->format('Y-m-d'))); - - // get default currency - $default = app('amount')->getDefaultCurrencyByUser($this->user); - - // get all balances: - $balances = app('steam')->balancesByAccounts($accounts, $date); - - // get the preferred currency for this account - /** @var Account $account */ - foreach ($accounts as $account) { - // Log::debug(sprintf('Now at account #%d: "%s"', $account->id, $account->name)); - $currencyId = (int)$this->getRepository()->getMetaValue($account, 'currency_id'); - $currencyId = 0 === $currencyId ? $default->id : $currencyId; - - // Log::debug(sprintf('Currency ID is #%d', $currencyId)); - - // balance in array: - $balance = $balances[$account->id] ?? '0'; - - //Log::debug(sprintf('Balance for %s is %s', $date->format('Y-m-d'), $balance)); - - // always subtract virtual balance. - $virtualBalance = (string)$account->virtual_balance; - if ('' !== $virtualBalance) { - $balance = bcsub($balance, $virtualBalance); - } - - // Log::debug(sprintf('Balance corrected to %s because of virtual balance (%s)', $balance, $virtualBalance)); - - if (!array_key_exists($currencyId, $netWorth)) { - $netWorth[$currencyId] = '0'; - } - $netWorth[$currencyId] = bcadd($balance, $netWorth[$currencyId]); - // Log::debug(sprintf('Total net worth for currency #%d is %s', $currencyId, $netWorth[$currencyId])); - } - ksort($netWorth); - - // loop results and add currency information: - foreach ($netWorth as $currencyId => $balance) { - $result[] = [ - 'currency' => $this->currencyRepos->find($currencyId), - 'balance' => $balance, - ]; - } - $cache->store($result); - - return $result; - } - - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void - { - if (null === $user) { + if (!$user instanceof User) { return; } - $this->user = $user; - $this->userGroup = null; + $this->user = $user; + $this->userGroup = null; // make repository: $this->accountRepository = app(AccountRepositoryInterface::class); $this->accountRepository->setUser($this->user); - $this->currencyRepos = app(CurrencyRepositoryInterface::class); + $this->currencyRepos = app(CurrencyRepositoryInterface::class); $this->currencyRepos->setUser($this->user); } - /** - * @inheritDoc - */ public function setUserGroup(UserGroup $userGroup): void { $this->userGroup = $userGroup; @@ -262,7 +177,7 @@ class NetWorth implements NetWorthInterface } /** - * @inheritDoc + * @deprecated */ public function sumNetWorthByCurrency(Carbon $date): array { @@ -273,16 +188,16 @@ class NetWorth implements NetWorthInterface $return = []; $balances = app('steam')->balancesByAccounts($accounts, $date); foreach ($accounts as $account) { - $currency = $this->getRepository()->getAccountCurrency($account); - $balance = $balances[$account->id] ?? '0'; + $currency = $this->getRepository()->getAccountCurrency($account); + $balance = $balances[$account->id] ?? '0'; // always subtract virtual balance. - $virtualBalance = (string)$account->virtual_balance; + $virtualBalance = $account->virtual_balance; if ('' !== $virtualBalance) { $balance = bcsub($balance, $virtualBalance); } - $return[$currency->id] = $return[$currency->id] ?? [ + $return[$currency->id] ??= [ 'id' => (string)$currency->id, 'name' => $currency->name, 'symbol' => $currency->symbol, @@ -296,21 +211,20 @@ class NetWorth implements NetWorthInterface return $return; } - /** - * @return Collection - */ private function getAccounts(): Collection { $accounts = $this->getRepository()->getAccountsByType( [AccountType::ASSET, AccountType::DEFAULT, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE] ); $filtered = new Collection(); + /** @var Account $account */ foreach ($accounts as $account) { if (1 === (int)$this->getRepository()->getMetaValue($account, 'include_net_worth')) { $filtered->push($account); } } + return $filtered; } } diff --git a/app/Helpers/Report/NetWorthInterface.php b/app/Helpers/Report/NetWorthInterface.php index 61f4c9455c..0713f52c6a 100644 --- a/app/Helpers/Report/NetWorthInterface.php +++ b/app/Helpers/Report/NetWorthInterface.php @@ -31,7 +31,6 @@ use Illuminate\Support\Collection; /** * Interface NetWorthInterface - * */ interface NetWorthInterface { @@ -42,43 +41,11 @@ interface NetWorthInterface * of that amount in the native currency. * * Includes extra array with the total(!) net worth in the native currency. - * - * @param Collection $accounts - * @param Carbon $date - * - * @return array */ public function byAccounts(Collection $accounts, Carbon $date): array; - /** - * TODO unsure why this is deprecated. - * - * Returns the user's net worth in an array with the following layout: - * - * - - * - currency: TransactionCurrency object - * - date: the current date - * - amount: the user's net worth in that currency. - * - * This repeats for each currency the user has transactions in. - * Result of this method is cached. - * - * @param Collection $accounts - * @param Carbon $date - * - * @return array - * @deprecated - */ - public function getNetWorthByCurrency(Collection $accounts, Carbon $date): array; + public function setUser(null|Authenticatable|User $user): void; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; - - /** - * @param UserGroup $userGroup - */ public function setUserGroup(UserGroup $userGroup): void; /** @@ -86,9 +53,7 @@ interface NetWorthInterface * * Same as above but cleaner function with less dependencies. * - * @param Carbon $date - * - * @return array + * @deprecated */ public function sumNetWorthByCurrency(Carbon $date): array; } diff --git a/app/Helpers/Report/PopupReport.php b/app/Helpers/Report/PopupReport.php index 94b56ac7fd..e5276d6161 100644 --- a/app/Helpers/Report/PopupReport.php +++ b/app/Helpers/Report/PopupReport.php @@ -29,46 +29,34 @@ use FireflyIII\Models\Budget; use FireflyIII\Models\Category; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use Illuminate\Support\Collection; /** * Class PopupReport. - * - */ class PopupReport implements PopupReportInterface { /** * Collect the transactions for one account and one budget. - * - * @param Budget $budget - * @param Account $account - * @param array $attributes - * - * @return array */ public function balanceForBudget(Budget $budget, Account $account, array $attributes): array { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setAccounts(new Collection([$account])) - ->withAccountInformation() - ->withBudgetInformation() - ->withCategoryInformation() - ->setRange($attributes['startDate'], $attributes['endDate'])->setBudget($budget); + ->withAccountInformation() + ->withBudgetInformation() + ->withCategoryInformation() + ->setRange($attributes['startDate'], $attributes['endDate'])->setBudget($budget) + ; return $collector->getExtractedJournals(); } /** * Collect the transactions for one account and no budget. - * - * @param Account $account - * @param array $attributes - * - * @return array */ public function balanceForNoBudget(Account $account, array $attributes): array { @@ -80,15 +68,17 @@ class PopupReport implements PopupReportInterface $repos = app(CurrencyRepositoryInterface::class); $currency = $repos->find((int)$currencyId); } + /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setAccounts(new Collection([$account])) ->setTypes([TransactionType::WITHDRAWAL]) ->withAccountInformation() ->withCategoryInformation() ->setRange($attributes['startDate'], $attributes['endDate']) - ->withoutBudget(); + ->withoutBudget() + ; if (null !== $currency) { $collector->setCurrency($currency); @@ -99,11 +89,6 @@ class PopupReport implements PopupReportInterface /** * Collect the transactions for a budget. - * - * @param Budget $budget - * @param array $attributes - * - * @return array */ public function byBudget(Budget $budget, array $attributes): array { @@ -115,13 +100,15 @@ class PopupReport implements PopupReportInterface $repos = app(CurrencyRepositoryInterface::class); $currency = $repos->find((int)$currencyId); } + /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts($attributes['accounts']) - ->withAccountInformation() - ->withBudgetInformation() - ->withCategoryInformation() - ->setRange($attributes['startDate'], $attributes['endDate']); + ->withAccountInformation() + ->withBudgetInformation() + ->withCategoryInformation() + ->setRange($attributes['startDate'], $attributes['endDate']) + ; if (null !== $currency) { $collector->setCurrency($currency); @@ -139,11 +126,6 @@ class PopupReport implements PopupReportInterface /** * Collect journals by a category. - * - * @param Category|null $category - * @param array $attributes - * - * @return array */ public function byCategory(?Category $category, array $attributes): array { @@ -157,14 +139,15 @@ class PopupReport implements PopupReportInterface } /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts($attributes['accounts']) - ->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER, TransactionType::DEPOSIT]) - ->withAccountInformation() - ->withBudgetInformation() - ->withCategoryInformation() - ->setRange($attributes['startDate'], $attributes['endDate'])->withAccountInformation(); + ->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER, TransactionType::DEPOSIT]) + ->withAccountInformation() + ->withBudgetInformation() + ->withCategoryInformation() + ->setRange($attributes['startDate'], $attributes['endDate'])->withAccountInformation() + ; if (null !== $category) { $collector->setCategory($category); @@ -182,17 +165,12 @@ class PopupReport implements PopupReportInterface /** * Group transactions by expense. - * - * @param Account $account - * @param array $attributes - * - * @return array */ public function byExpenses(Account $account, array $attributes): array { // filter by currency, if set. - $currencyId = $attributes['currencyId'] ?? null; - $currency = null; + $currencyId = $attributes['currencyId'] ?? null; + $currency = null; if (null !== $currencyId) { /** @var CurrencyRepositoryInterface $repos */ $repos = app(CurrencyRepositoryInterface::class); @@ -200,47 +178,45 @@ class PopupReport implements PopupReportInterface } /** @var JournalRepositoryInterface $repository */ - $repository = app(JournalRepositoryInterface::class); + $repository = app(JournalRepositoryInterface::class); $repository->setUser($account->user); $accountRepository = app(AccountRepositoryInterface::class); $accountRepository->setUser($account->user); /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); // set report accounts + the request accounts: - //$set = $attributes['accounts'] ?? new Collection; - //$set->push($account); + // $set = $attributes['accounts'] ?? new Collection; + // $set->push($account); $collector->setDestinationAccounts(new Collection([$account])) - ->setRange($attributes['startDate'], $attributes['endDate']) - ->withAccountInformation() - ->withBudgetInformation() - ->withCategoryInformation() - ->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]); + ->setRange($attributes['startDate'], $attributes['endDate']) + ->withAccountInformation() + ->withBudgetInformation() + ->withCategoryInformation() + ->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) + ; if (null !== $currency) { $collector->setCurrency($currency); } + return $collector->getExtractedJournals(); } /** * Collect transactions by income. - * - * @param Account $account - * @param array $attributes - * - * @return array */ public function byIncome(Account $account, array $attributes): array { /** @var JournalRepositoryInterface $repository */ $repository = app(JournalRepositoryInterface::class); $repository->setUser($account->user); + /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setSourceAccounts(new Collection([$account])) ->setDestinationAccounts($attributes['accounts']) @@ -249,7 +225,8 @@ class PopupReport implements PopupReportInterface ->withAccountInformation() ->withBudgetInformation() ->withCategoryInformation() - ->withAccountInformation(); + ->withAccountInformation() + ; return $collector->getExtractedJournals(); } diff --git a/app/Helpers/Report/PopupReportInterface.php b/app/Helpers/Report/PopupReportInterface.php index 311dfa8501..3a03cdb049 100644 --- a/app/Helpers/Report/PopupReportInterface.php +++ b/app/Helpers/Report/PopupReportInterface.php @@ -34,62 +34,31 @@ interface PopupReportInterface { /** * Get balances for budget. - * - * @param Budget $budget - * @param Account $account - * @param array $attributes - * - * @return array */ public function balanceForBudget(Budget $budget, Account $account, array $attributes): array; /** * Get balances for transactions without a budget. - * - * @param Account $account - * @param array $attributes - * - * @return array */ public function balanceForNoBudget(Account $account, array $attributes): array; /** * Group by budget. - * - * @param Budget $budget - * @param array $attributes - * - * @return array */ public function byBudget(Budget $budget, array $attributes): array; /** * Group by category. - * - * @param Category|null $category - * @param array $attributes - * - * @return array */ public function byCategory(?Category $category, array $attributes): array; /** * Do something with expense. Sorry, I am not very inspirational here. - * - * @param Account $account - * @param array $attributes - * - * @return array */ public function byExpenses(Account $account, array $attributes): array; /** * Do something with income. Sorry, I am not very inspirational here. - * - * @param Account $account - * @param array $attributes - * - * @return array */ public function byIncome(Account $account, array $attributes): array; } diff --git a/app/Helpers/Report/ReportHelper.php b/app/Helpers/Report/ReportHelper.php index 92a9841d74..9582c7287d 100644 --- a/app/Helpers/Report/ReportHelper.php +++ b/app/Helpers/Report/ReportHelper.php @@ -33,8 +33,6 @@ use Illuminate\Support\Collection; /** * Class ReportHelper. - * - */ class ReportHelper implements ReportHelperInterface { @@ -43,8 +41,6 @@ class ReportHelper implements ReportHelperInterface /** * ReportHelper constructor. - * - * @param BudgetRepositoryInterface $budgetRepository */ public function __construct(BudgetRepositoryInterface $budgetRepository) { @@ -56,12 +52,6 @@ class ReportHelper implements ReportHelperInterface * the users bills and their payments. * * Excludes bills which have not had a payment on the mentioned accounts. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return array */ public function getBillReport(Collection $accounts, Carbon $start, Carbon $end): array { @@ -74,10 +64,10 @@ class ReportHelper implements ReportHelperInterface /** @var Bill $bill */ foreach ($bills as $bill) { - $expectedDates = $repository->getPayDatesInRange($bill, $start, $end); - $billId = $bill->id; - $currency = $bill->transactionCurrency; - $current = [ + $expectedDates = $repository->getPayDatesInRange($bill, $start, $end); + $billId = $bill->id; + $currency = $bill->transactionCurrency; + $current = [ 'id' => $bill->id, 'name' => $bill->name, 'active' => $bill->active, @@ -94,11 +84,11 @@ class ReportHelper implements ReportHelperInterface /** @var Carbon $expectedStart */ foreach ($expectedDates as $expectedStart) { - $expectedEnd = app('navigation')->endOfX($expectedStart, $bill->repeat_freq, null); + $expectedEnd = app('navigation')->endOfX($expectedStart, $bill->repeat_freq, null); // is paid in this period maybe? /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts($accounts)->setRange($expectedStart, $expectedEnd)->setBill($bill); $current['paid_moments'][] = $collector->getExtractedJournals(); } @@ -112,10 +102,6 @@ class ReportHelper implements ReportHelperInterface /** * Generate a list of months for the report. - * - * @param Carbon $date - * - * @return array */ public function listOfMonths(Carbon $date): array { @@ -123,12 +109,12 @@ class ReportHelper implements ReportHelperInterface $fiscalHelper = app(FiscalHelperInterface::class); $start = clone $date; $start->startOfMonth(); - $end = today(config('app.timezone')); + $end = today(config('app.timezone')); $end->endOfMonth(); - $months = []; + $months = []; while ($start <= $end) { - $year = $fiscalHelper->endOfFiscalYear($start)->year; // current year + $year = $fiscalHelper->endOfFiscalYear($start)->year; // current year if (!array_key_exists($year, $months)) { $months[$year] = [ 'fiscal_start' => $fiscalHelper->startOfFiscalYear($start)->format('Y-m-d'), @@ -139,7 +125,7 @@ class ReportHelper implements ReportHelperInterface ]; } - $currentEnd = clone $start; + $currentEnd = clone $start; $currentEnd->endOfMonth(); $months[$year]['months'][] = [ 'formatted' => $start->isoFormat((string)trans('config.month_js')), @@ -149,7 +135,7 @@ class ReportHelper implements ReportHelperInterface 'year' => $year, ]; - $start = clone $currentEnd; // to make the hop to the next month properly + $start = clone $currentEnd; // to make the hop to the next month properly $start->addDay(); } diff --git a/app/Helpers/Report/ReportHelperInterface.php b/app/Helpers/Report/ReportHelperInterface.php index 6dfceaac77..1320127896 100644 --- a/app/Helpers/Report/ReportHelperInterface.php +++ b/app/Helpers/Report/ReportHelperInterface.php @@ -36,21 +36,11 @@ interface ReportHelperInterface * the users bills and their payments. * * Excludes bills which have not had a payment on the mentioned accounts. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return array */ public function getBillReport(Collection $accounts, Carbon $start, Carbon $end): array; /** * Generate a list of months. - * - * @param Carbon $date - * - * @return array */ public function listOfMonths(Carbon $date): array; } diff --git a/app/Helpers/Update/UpdateTrait.php b/app/Helpers/Update/UpdateTrait.php index b5443da8de..acdc836917 100644 --- a/app/Helpers/Update/UpdateTrait.php +++ b/app/Helpers/Update/UpdateTrait.php @@ -24,13 +24,9 @@ declare(strict_types=1); namespace FireflyIII\Helpers\Update; use FireflyIII\Services\FireflyIIIOrg\Update\UpdateRequestInterface; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Trait UpdateTrait - * */ trait UpdateTrait { @@ -38,18 +34,15 @@ trait UpdateTrait * Returns an array with info on the next release, if any. * 'message' => 'A new version is available. * 'level' => 'info' / 'success' / 'error' - * - * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function getLatestRelease(): array { - Log::debug('Now in getLatestRelease()'); + app('log')->debug('Now in getLatestRelease()'); + /** @var UpdateRequestInterface $checker */ $checker = app(UpdateRequestInterface::class); $channelConfig = app('fireflyconfig')->get('update_channel', 'stable'); - $channel = $channelConfig ? $channelConfig->data : 'stable'; + $channel = (string)$channelConfig->data; return $checker->getUpdateInformation($channel); } diff --git a/app/Helpers/Webhook/Sha3SignatureGenerator.php b/app/Helpers/Webhook/Sha3SignatureGenerator.php index c51edf0a4f..dfa342af70 100644 --- a/app/Helpers/Webhook/Sha3SignatureGenerator.php +++ b/app/Helpers/Webhook/Sha3SignatureGenerator.php @@ -25,8 +25,6 @@ namespace FireflyIII\Helpers\Webhook; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\WebhookMessage; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class Sha3SignatureGenerator @@ -36,7 +34,6 @@ class Sha3SignatureGenerator implements SignatureGeneratorInterface private int $version = 1; /** - * @inheritDoc * @throws FireflyException */ public function generate(WebhookMessage $message): string @@ -45,15 +42,16 @@ class Sha3SignatureGenerator implements SignatureGeneratorInterface if (null === $message->webhook) { throw new FireflyException('Part of a deleted webhook.'); } - + $json = ''; try { $json = json_encode($message->message, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { - Log::error('Could not generate hash.'); - Log::error(sprintf('JSON value: %s', $json)); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + } catch (\JsonException $e) { + app('log')->error('Could not generate hash.'); + app('log')->error(sprintf('JSON value: %s', $json)); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException('Could not generate JSON for SHA3 hash.', 0, $e); } @@ -74,9 +72,6 @@ class Sha3SignatureGenerator implements SignatureGeneratorInterface return sprintf('t=%s,v%d=%s', $timestamp, $this->getVersion(), $signature); } - /** - * @inheritDoc - */ public function getVersion(): int { return $this->version; diff --git a/app/Helpers/Webhook/SignatureGeneratorInterface.php b/app/Helpers/Webhook/SignatureGeneratorInterface.php index ebbc8a5278..f3f46b2ad7 100644 --- a/app/Helpers/Webhook/SignatureGeneratorInterface.php +++ b/app/Helpers/Webhook/SignatureGeneratorInterface.php @@ -30,17 +30,10 @@ use FireflyIII\Models\WebhookMessage; */ interface SignatureGeneratorInterface { - /** - * @param WebhookMessage $message - * - * @return string - */ public function generate(WebhookMessage $message): string; /** * Return the version of this signature generator. - * - * @return int */ public function getVersion(): int; } diff --git a/app/Http/Controllers/Account/CreateController.php b/app/Http/Controllers/Account/CreateController.php index ff88e40f5b..82e8b110e4 100644 --- a/app/Http/Controllers/Account/CreateController.php +++ b/app/Http/Controllers/Account/CreateController.php @@ -36,11 +36,8 @@ use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** - * * Class CreateController */ class CreateController extends Controller @@ -52,8 +49,6 @@ class CreateController extends Controller /** * CreateController constructor. - * - */ public function __construct() { @@ -76,9 +71,6 @@ class CreateController extends Controller /** * Create a new account. * - * @param Request $request - * @param string $objectType - * * @return Factory|View */ public function create(Request $request, string $objectType) @@ -103,7 +95,7 @@ class CreateController extends Controller ]; // interest calculation periods: - $interestPeriods = [ + $interestPeriods = [ 'daily' => (string)trans('firefly.interest_calc_daily'), 'monthly' => (string)trans('firefly.interest_calc_monthly'), 'yearly' => (string)trans('firefly.interest_calc_yearly'), @@ -117,6 +109,11 @@ class CreateController extends Controller 'include_net_worth' => $hasOldInput ? (bool)$request->old('include_net_worth') : true, ] ); + // issue #8321 + $showNetWorth = true; + if ('liabilities' !== $objectType && 'asset' !== $objectType) { + $showNetWorth = false; + } // put previous url in session if not redirect from store (not "create another"). if (true !== session('accounts.create.fromStore')) { @@ -127,24 +124,21 @@ class CreateController extends Controller return view( 'accounts.create', - compact('subTitleIcon', 'liabilityDirections', 'locations', 'objectType', 'interestPeriods', 'subTitle', 'roles', 'liabilityTypes') + compact('subTitleIcon', 'liabilityDirections', 'showNetWorth', 'locations', 'objectType', 'interestPeriods', 'subTitle', 'roles', 'liabilityTypes') ); } /** * Store the new account. * - * @param AccountFormRequest $request + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function store(AccountFormRequest $request) { - $data = $request->getAccountData(); - $account = $this->repository->store($data); + $data = $request->getAccountData(); + $account = $this->repository->store($data); $request->session()->flash('success', (string)trans('firefly.stored_new_account', ['name' => $account->name])); app('preferences')->mark(); @@ -152,18 +146,22 @@ class CreateController extends Controller // update preferences if necessary: $frontPage = app('preferences')->get('frontPageAccounts', [])->data; + if (!is_array($frontPage)) { + $frontPage = []; + } if (AccountType::ASSET === $account->accountType->type) { $frontPage[] = $account->id; app('preferences')->set('frontPageAccounts', $frontPage); } // store attachment(s): - /** @var array $files */ - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($account, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } @@ -172,7 +170,7 @@ class CreateController extends Controller } // redirect to previous URL. - $redirect = redirect($this->getPreviousUrl('accounts.create.url')); + $redirect = redirect($this->getPreviousUrl('accounts.create.url')); if (1 === (int)$request->get('create_another')) { // set value so create routine will not overwrite URL: $request->session()->put('accounts.create.fromStore', true); diff --git a/app/Http/Controllers/Account/DeleteController.php b/app/Http/Controllers/Account/DeleteController.php index a830ec9eb5..c9b9dae224 100644 --- a/app/Http/Controllers/Account/DeleteController.php +++ b/app/Http/Controllers/Account/DeleteController.php @@ -42,8 +42,6 @@ class DeleteController extends Controller /** * DeleteController constructor. - * - */ public function __construct() { @@ -65,9 +63,7 @@ class DeleteController extends Controller /** * Delete account screen. * - * @param Account $account - * - * @return Factory|RedirectResponse|Redirector|View + * @return Factory|Redirector|RedirectResponse|View */ public function delete(Account $account) { @@ -90,10 +86,7 @@ class DeleteController extends Controller /** * Delete the account. * - * @param Request $request - * @param Account $account - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function destroy(Request $request, Account $account) { diff --git a/app/Http/Controllers/Account/EditController.php b/app/Http/Controllers/Account/EditController.php index 292c00ec8c..81549f45e1 100644 --- a/app/Http/Controllers/Account/EditController.php +++ b/app/Http/Controllers/Account/EditController.php @@ -33,10 +33,10 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** - * * Class EditController */ class EditController extends Controller @@ -68,13 +68,11 @@ class EditController extends Controller } /** - * Edit account overview. + * Edit account overview. It's complex, but it just has a lot of if/then/else. * - * @param Request $request - * @param Account $account - * @param AccountRepositoryInterface $repository + * @SuppressWarnings(PHPMD.NPathComplexity) * - * @return Factory|RedirectResponse|Redirector|View + * @return Factory|Redirector|RedirectResponse|View */ public function edit(Request $request, Account $account, AccountRepositoryInterface $repository) { @@ -82,32 +80,32 @@ class EditController extends Controller return $this->redirectAccountToAccount($account); } - $objectType = config('firefly.shortNamesByFullName')[$account->accountType->type]; - $subTitle = (string)trans(sprintf('firefly.edit_%s_account', $objectType), ['name' => $account->name]); - $subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $objectType)); - $roles = $this->getRoles(); - $liabilityTypes = $this->getLiabilityTypes(); - $location = $repository->getLocation($account); - $latitude = $location ? $location->latitude : config('firefly.default_location.latitude'); - $longitude = $location ? $location->longitude : config('firefly.default_location.longitude'); - $zoomLevel = $location ? $location->zoom_level : config('firefly.default_location.zoom_level'); - $hasLocation = null !== $location; - $locations = [ + $objectType = config('firefly.shortNamesByFullName')[$account->accountType->type]; + $subTitle = (string)trans(sprintf('firefly.edit_%s_account', $objectType), ['name' => $account->name]); + $subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $objectType)); + $roles = $this->getRoles(); + $liabilityTypes = $this->getLiabilityTypes(); + $location = $repository->getLocation($account); + $latitude = null !== $location ? $location->latitude : config('firefly.default_location.latitude'); + $longitude = null !== $location ? $location->longitude : config('firefly.default_location.longitude'); + $zoomLevel = null !== $location ? $location->zoom_level : config('firefly.default_location.zoom_level'); + $hasLocation = null !== $location; + $locations = [ 'location' => [ - 'latitude' => old('location_latitude') ?? $latitude, - 'longitude' => old('location_longitude') ?? $longitude, - 'zoom_level' => old('location_zoom_level') ?? $zoomLevel, + 'latitude' => null !== old('location_latitude') ? old('location_latitude') : $latitude, + 'longitude' => null !== old('location_longitude') ? old('location_longitude') : $longitude, + 'zoom_level' => null !== old('location_zoom_level') ? old('location_zoom_level') : $zoomLevel, 'has_location' => $hasLocation || 'true' === old('location_has_location'), ], ]; - $liabilityDirections = [ + $liabilityDirections = [ 'debit' => trans('firefly.liability_direction_debit'), 'credit' => trans('firefly.liability_direction_credit'), ]; // interest calculation periods: - $interestPeriods = [ + $interestPeriods = [ 'daily' => (string)trans('firefly.interest_calc_daily'), 'monthly' => (string)trans('firefly.interest_calc_monthly'), 'yearly' => (string)trans('firefly.interest_calc_yearly'), @@ -123,17 +121,23 @@ class EditController extends Controller if ('0' === $openingBalanceAmount) { $openingBalanceAmount = ''; } - $openingBalanceDate = $repository->getOpeningBalanceDate($account); - $currency = $this->repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency(); + $openingBalanceDate = $repository->getOpeningBalanceDate($account); + $currency = $this->repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency(); // include this account in net-worth charts? - $includeNetWorth = $repository->getMetaValue($account, 'include_net_worth'); - $includeNetWorth = null === $includeNetWorth ? true : '1' === $includeNetWorth; + $includeNetWorth = $repository->getMetaValue($account, 'include_net_worth'); + $includeNetWorth = null === $includeNetWorth ? true : '1' === $includeNetWorth; + + // issue #8321 + $showNetWorth = true; + if ('liabilities' !== $objectType && 'asset' !== $objectType) { + $showNetWorth = false; + } // code to handle active-checkboxes - $hasOldInput = null !== $request->old('_token'); - $virtualBalance = null === $account->virtual_balance ? '0' : $account->virtual_balance; - $preFilled = [ + $hasOldInput = null !== $request->old('_token'); + $virtualBalance = null === $account->virtual_balance ? '0' : $account->virtual_balance; + $preFilled = [ 'account_number' => $repository->getMetaValue($account, 'account_number'), 'account_role' => $repository->getMetaValue($account, 'account_role'), 'cc_type' => $repository->getMetaValue($account, 'cc_type'), @@ -157,31 +161,13 @@ class EditController extends Controller $request->session()->flash('preFilled', $preFilled); - return view( - 'accounts.edit', - compact( - 'account', - 'currency', - 'subTitle', - 'subTitleIcon', - 'locations', - 'liabilityDirections', - 'objectType', - 'roles', - 'preFilled', - 'liabilityTypes', - 'interestPeriods' - ) - ); + return view('accounts.edit', compact('account', 'currency', 'showNetWorth', 'subTitle', 'subTitleIcon', 'locations', 'liabilityDirections', 'objectType', 'roles', 'preFilled', 'liabilityTypes', 'interestPeriods')); } /** * Update the account. * - * @param AccountFormRequest $request - * @param Account $account - * - * @return $this|RedirectResponse|Redirector + * @return $this|Redirector|RedirectResponse */ public function update(AccountFormRequest $request, Account $account) { @@ -189,18 +175,19 @@ class EditController extends Controller return $this->redirectAccountToAccount($account); } - $data = $request->getAccountData(); + $data = $request->getAccountData(); $this->repository->update($account, $data); - + Log::channel('audit')->info(sprintf('Updated account #%d.', $account->id), $data); $request->session()->flash('success', (string)trans('firefly.updated_account', ['name' => $account->name])); // store new attachment(s): - - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($account, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } diff --git a/app/Http/Controllers/Account/IndexController.php b/app/Http/Controllers/Account/IndexController.php index 3a6915cb8a..870999de13 100644 --- a/app/Http/Controllers/Account/IndexController.php +++ b/app/Http/Controllers/Account/IndexController.php @@ -32,14 +32,9 @@ use FireflyIII\Support\Http\Controllers\BasicDataSupport; use Illuminate\Contracts\View\Factory; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** - * * Class IndexController */ class IndexController extends Controller @@ -50,8 +45,6 @@ class IndexController extends Controller /** * IndexController constructor. - * - */ public function __construct() { @@ -71,31 +64,28 @@ class IndexController extends Controller } /** - * @param Request $request - * @param string $objectType - * * @return Factory|View + * * @throws FireflyException - * @throws JsonException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ + * */ public function inactive(Request $request, string $objectType) { - $inactivePage = true; - $subTitle = (string)trans(sprintf('firefly.%s_accounts_inactive', $objectType)); - $subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $objectType)); - $types = config(sprintf('firefly.accountTypesByIdentifier.%s', $objectType)); - $collection = $this->repository->getInactiveAccountsByType($types); - $total = $collection->count(); - $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - $accounts = $collection->slice(($page - 1) * $pageSize, $pageSize); + $inactivePage = true; + $subTitle = (string)trans(sprintf('firefly.%s_accounts_inactive', $objectType)); + $subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $objectType)); + $types = config(sprintf('firefly.accountTypesByIdentifier.%s', $objectType)); + $collection = $this->repository->getInactiveAccountsByType($types); + $total = $collection->count(); + $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $accounts = $collection->slice(($page - 1) * $pageSize, $pageSize); unset($collection); + /** @var Carbon $start */ - $start = clone session('start', today(config('app.timezone'))->startOfMonth()); + $start = clone session('start', today(config('app.timezone'))->startOfMonth()); + /** @var Carbon $end */ - $end = clone session('end', today(config('app.timezone'))->endOfMonth()); + $end = clone session('end', today(config('app.timezone'))->endOfMonth()); $start->subDay(); $ids = $accounts->pluck('id')->toArray(); @@ -104,7 +94,7 @@ class IndexController extends Controller $activities = app('steam')->getLastActivities($ids); $accounts->each( - function (Account $account) use ($activities, $startBalances, $endBalances) { + function (Account $account) use ($activities, $startBalances, $endBalances): void { $account->lastActivityDate = $this->isInArrayDate($activities, $account->id); $account->startBalance = $this->isInArray($startBalances, $account->id); $account->endBalance = $this->isInArray($endBalances, $account->id); @@ -118,7 +108,7 @@ class IndexController extends Controller ); // make paginator: - $accounts = new LengthAwarePaginator($accounts, $total, $pageSize, $page); + $accounts = new LengthAwarePaginator($accounts, $total, $pageSize, $page); $accounts->setPath(route('accounts.inactive.index', [$objectType])); return view('accounts.index', compact('objectType', 'inactivePage', 'subTitleIcon', 'subTitle', 'page', 'accounts')); @@ -127,21 +117,16 @@ class IndexController extends Controller /** * Show list of accounts. * - * @param Request $request - * @param string $objectType - * * @return Factory|View + * * @throws FireflyException - * @throws JsonException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ + * */ public function index(Request $request, string $objectType) { - Log::debug(sprintf('Now at %s', __METHOD__)); - $subTitle = (string)trans(sprintf('firefly.%s_accounts', $objectType)); - $subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $objectType)); - $types = config(sprintf('firefly.accountTypesByIdentifier.%s', $objectType)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); + $subTitle = (string)trans(sprintf('firefly.%s_accounts', $objectType)); + $subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $objectType)); + $types = config(sprintf('firefly.accountTypesByIdentifier.%s', $objectType)); $this->repository->resetAccountOrder(); @@ -152,13 +137,15 @@ class IndexController extends Controller $accounts = $collection->slice(($page - 1) * $pageSize, $pageSize); $inactiveCount = $this->repository->getInactiveAccountsByType($types)->count(); - Log::debug(sprintf('Count of collection: %d, count of accounts: %d', $total, $accounts->count())); + app('log')->debug(sprintf('Count of collection: %d, count of accounts: %d', $total, $accounts->count())); unset($collection); + /** @var Carbon $start */ - $start = clone session('start', today(config('app.timezone'))->startOfMonth()); + $start = clone session('start', today(config('app.timezone'))->startOfMonth()); + /** @var Carbon $end */ - $end = clone session('end', today(config('app.timezone'))->endOfMonth()); + $end = clone session('end', today(config('app.timezone'))->endOfMonth()); $start->subDay(); $ids = $accounts->pluck('id')->toArray(); @@ -166,11 +153,10 @@ class IndexController extends Controller $endBalances = app('steam')->balancesByAccounts($accounts, $end); $activities = app('steam')->getLastActivities($ids); - $accounts->each( - function (Account $account) use ($activities, $startBalances, $endBalances) { - $interest = (string)$this->repository->getMetaValue($account, 'interest'); - $interest = '' === $interest ? '0' : $interest; + function (Account $account) use ($activities, $startBalances, $endBalances): void { + $interest = (string)$this->repository->getMetaValue($account, 'interest'); + $interest = '' === $interest ? '0' : $interest; // See reference nr. 68 $account->lastActivityDate = $this->isInArrayDate($activities, $account->id); @@ -189,13 +175,14 @@ class IndexController extends Controller } ); // make paginator: - Log::debug(sprintf('Count of accounts before LAP: %d', $accounts->count())); + app('log')->debug(sprintf('Count of accounts before LAP: %d', $accounts->count())); + /** @var LengthAwarePaginator $accounts */ - $accounts = new LengthAwarePaginator($accounts, $total, $pageSize, $page); + $accounts = new LengthAwarePaginator($accounts, $total, $pageSize, $page); $accounts->setPath(route('accounts.index', [$objectType])); - Log::debug(sprintf('Count of accounts after LAP (1): %d', $accounts->count())); - Log::debug(sprintf('Count of accounts after LAP (2): %d', $accounts->getCollection()->count())); + app('log')->debug(sprintf('Count of accounts after LAP (1): %d', $accounts->count())); + app('log')->debug(sprintf('Count of accounts after LAP (2): %d', $accounts->getCollection()->count())); return view('accounts.index', compact('objectType', 'inactiveCount', 'subTitleIcon', 'subTitle', 'page', 'accounts')); } diff --git a/app/Http/Controllers/Account/ReconcileController.php b/app/Http/Controllers/Account/ReconcileController.php index 414a14b7e7..59ffa098c2 100644 --- a/app/Http/Controllers/Account/ReconcileController.php +++ b/app/Http/Controllers/Account/ReconcileController.php @@ -38,11 +38,7 @@ use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class ReconcileController. @@ -54,8 +50,6 @@ class ReconcileController extends Controller /** * ReconcileController constructor. - * - */ public function __construct() { @@ -77,16 +71,10 @@ class ReconcileController extends Controller /** * Reconciliation overview. * - * @param Account $account - * @param Carbon|null $start - * @param Carbon|null $end + * @return Factory|Redirector|RedirectResponse|View * - * @return Factory|RedirectResponse|Redirector|View * @throws FireflyException - * @throws JsonException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ + * */ public function reconcile(Account $account, Carbon $start = null, Carbon $end = null) { if (!$this->isEditableAccount($account)) { @@ -97,18 +85,19 @@ class ReconcileController extends Controller return redirect(route('accounts.index', [config(sprintf('firefly.shortNamesByFullName.%s', $account->accountType->type))])); } - $currency = $this->accountRepos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency(); + $currency = $this->accountRepos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency(); // no start or end: - $range = app('navigation')->getViewRange(false); + $range = app('navigation')->getViewRange(false); // get start and end if (null === $start && null === $end) { /** @var Carbon $start */ $start = clone session('start', app('navigation')->startOfPeriod(new Carbon(), $range)); + /** @var Carbon $end */ - $end = clone session('end', app('navigation')->endOfPeriod(new Carbon(), $range)); + $end = clone session('end', app('navigation')->endOfPeriod(new Carbon(), $range)); } if (null === $end) { /** @var Carbon $end */ @@ -119,12 +108,12 @@ class ReconcileController extends Controller [$start, $end] = [$end, $start]; } - $startDate = clone $start; + $startDate = clone $start; $startDate->subDay(); - $startBalance = app('steam')->bcround(app('steam')->balance($account, $startDate), $currency->decimal_places); - $endBalance = app('steam')->bcround(app('steam')->balance($account, $end), $currency->decimal_places); - $subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $account->accountType->type)); - $subTitle = (string)trans('firefly.reconcile_account', ['account' => $account->name]); + $startBalance = app('steam')->bcround(app('steam')->balance($account, $startDate), $currency->decimal_places); + $endBalance = app('steam')->bcround(app('steam')->balance($account, $end), $currency->decimal_places); + $subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $account->accountType->type)); + $subTitle = (string)trans('firefly.reconcile_account', ['account' => $account->name]); // various links $transactionsUrl = route('accounts.reconcile.transactions', [$account->id, '%start%', '%end%']); @@ -154,14 +143,9 @@ class ReconcileController extends Controller /** * Submit a new reconciliation. * - * @param ReconciliationStoreRequest $request - * @param Account $account - * @param Carbon $start - * @param Carbon $end + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector * @throws DuplicateTransactionException - * @throws JsonException */ public function submit(ReconciliationStoreRequest $request, Account $account, Carbon $start, Carbon $end) { @@ -169,14 +153,14 @@ class ReconcileController extends Controller return $this->redirectAccountToAccount($account); } - Log::debug('In ReconcileController::submit()'); - $data = $request->getAll(); + app('log')->debug('In ReconcileController::submit()'); + $data = $request->getAll(); /** @var string $journalId */ foreach ($data['journals'] as $journalId) { $this->repository->reconcileById((int)$journalId); } - Log::debug('Reconciled all transactions.'); + app('log')->debug('Reconciled all transactions.'); // switch dates if necessary if ($end->lt($start)) { @@ -188,7 +172,7 @@ class ReconcileController extends Controller if ('create' === $data['reconcile']) { $result = $this->createReconciliation($account, $start, $end, $data['difference']); } - Log::debug('End of routine.'); + app('log')->debug('End of routine.'); app('preferences')->mark(); if ('' === $result) { session()->flash('success', (string)trans('firefly.reconciliation_stored')); @@ -203,19 +187,12 @@ class ReconcileController extends Controller /** * Creates a reconciliation group. * - * @param Account $account - * @param Carbon $start - * @param Carbon $end - * @param string $difference - * - * @return RedirectResponse|Redirector|string * @throws DuplicateTransactionException - * @throws JsonException */ - private function createReconciliation(Account $account, Carbon $start, Carbon $end, string $difference) + private function createReconciliation(Account $account, Carbon $start, Carbon $end, string $difference): string { if (!$this->isEditableAccount($account)) { - return $this->redirectAccountToAccount($account); + return 'not-editable'; } $reconciliation = $this->accountRepos->getReconciliation($account); @@ -232,14 +209,14 @@ class ReconcileController extends Controller } // title: - $description = trans( + $description = trans( 'firefly.reconciliation_transaction_title', [ 'from' => $start->isoFormat($this->monthAndDayFormat), 'to' => $end->isoFormat($this->monthAndDayFormat), ] ); - $submission = [ + $submission = [ 'user' => auth()->user()->id, 'group_title' => null, 'transactions' => [ @@ -259,11 +236,14 @@ class ReconcileController extends Controller ], ], ]; + /** @var TransactionGroupFactory $factory */ - $factory = app(TransactionGroupFactory::class); + $factory = app(TransactionGroupFactory::class); + /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); $factory->setUser($user); + try { $factory->create($submission); } catch (FireflyException $e) { diff --git a/app/Http/Controllers/Account/ShowController.php b/app/Http/Controllers/Account/ShowController.php index 7144330d3a..5d5a11085e 100644 --- a/app/Http/Controllers/Account/ShowController.php +++ b/app/Http/Controllers/Account/ShowController.php @@ -36,13 +36,9 @@ use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\Support\Collection; use Illuminate\View\View; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class ShowController - * */ class ShowController extends Controller { @@ -52,8 +48,6 @@ class ShowController extends Controller /** * ShowController constructor. - * - */ public function __construct() { @@ -77,29 +71,22 @@ class ShowController extends Controller /** * Show an account. * - * @param Request $request - * @param Account $account - * @param Carbon|null $start - * @param Carbon|null $end + * @return Factory|Redirector|RedirectResponse|View * - * @return RedirectResponse|Redirector|Factory|View * @throws FireflyException - * @throws JsonException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ + * */ public function show(Request $request, Account $account, Carbon $start = null, Carbon $end = null) { - $objectType = config(sprintf('firefly.shortNamesByFullName.%s', $account->accountType->type)); + $objectType = config(sprintf('firefly.shortNamesByFullName.%s', $account->accountType->type)); if (!$this->isEditableAccount($account)) { return $this->redirectAccountToAccount($account); } - /** @var Carbon $start */ - $start = $start ?? session('start'); - /** @var Carbon $end */ - $end = $end ?? session('end'); + // @var Carbon $start + $start ??= session('start'); + // @var Carbon $end + $end ??= session('end'); if ($end < $start) { [$start, $end] = [$end, $start]; @@ -123,25 +110,24 @@ class ShowController extends Controller $subTitle = (string)trans('firefly.all_journals_for_account', ['name' => $account->name]); } - /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector ->setAccounts(new Collection([$account])) ->setLimit($pageSize) ->setPage($page)->withAccountInformation()->withCategoryInformation() - ->setRange($start, $end); + ->setRange($start, $end) + ; // this search will not include transaction groups where this asset account (or liability) // is just part of ONE of the journals. To force this: $collector->setExpandGroupSearch(true); - - $groups = $collector->getPaginatedGroups(); + $groups = $collector->getPaginatedGroups(); $groups->setPath(route('accounts.show', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')])); - $showAll = false; - $balance = app('steam')->balance($account, $end); + $showAll = false; + $balance = app('steam')->balance($account, $end); return view( 'accounts.show', @@ -168,15 +154,10 @@ class ShowController extends Controller /** * Show an account. * - * @param Request $request - * @param Account $account + * @return Factory|Redirector|RedirectResponse|View * - * @return RedirectResponse|Redirector|Factory|View * @throws FireflyException - * @throws JsonException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ + * */ public function showAll(Request $request, Account $account) { if (!$this->isEditableAccount($account)) { @@ -189,25 +170,26 @@ class ShowController extends Controller $end = today(config('app.timezone')); $today = today(config('app.timezone')); $start = $this->repository->oldestJournalDate($account) ?? today(config('app.timezone'))->startOfMonth(); - $subTitleIcon = config('firefly.subIconsByIdentifier.' . $account->accountType->type); + $subTitleIcon = config('firefly.subIconsByIdentifier.'.$account->accountType->type); $page = (int)$request->get('page'); $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $currency = $this->repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency(); $subTitle = (string)trans('firefly.all_journals_for_account', ['name' => $account->name]); $periods = new Collection(); + /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts(new Collection([$account]))->setLimit($pageSize)->setPage($page)->withAccountInformation()->withCategoryInformation(); // this search will not include transaction groups where this asset account (or liability) // is just part of ONE of the journals. To force this: $collector->setExpandGroupSearch(true); - $groups = $collector->getPaginatedGroups(); + $groups = $collector->getPaginatedGroups(); $groups->setPath(route('accounts.show.all', [$account->id])); - $chartUrl = route('chart.account.period', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')]); - $showAll = true; - $balance = app('steam')->balance($account, $end); + $chartUrl = route('chart.account.period', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')]); + $showAll = true; + $balance = app('steam')->balance($account, $end); return view( 'accounts.show', diff --git a/app/Http/Controllers/Admin/ConfigurationController.php b/app/Http/Controllers/Admin/ConfigurationController.php index 24b1bd3f47..25e810aeab 100644 --- a/app/Http/Controllers/Admin/ConfigurationController.php +++ b/app/Http/Controllers/Admin/ConfigurationController.php @@ -30,8 +30,6 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class ConfigurationController. @@ -40,8 +38,6 @@ class ConfigurationController extends Controller { /** * ConfigurationController constructor. - * - */ public function __construct() { @@ -62,13 +58,11 @@ class ConfigurationController extends Controller * Show configuration index. * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function index() { - $subTitle = (string)trans('firefly.instance_configuration'); - $subTitleIcon = 'fa-wrench'; + $subTitle = (string)trans('firefly.instance_configuration'); + $subTitleIcon = 'fa-wrench'; Log::channel('audit')->info('User visits admin config index.'); @@ -86,10 +80,6 @@ class ConfigurationController extends Controller /** * Store new configuration values. - * - * @param ConfigurationRequest $request - * - * @return RedirectResponse */ public function postIndex(ConfigurationRequest $request): RedirectResponse { diff --git a/app/Http/Controllers/Admin/HomeController.php b/app/Http/Controllers/Admin/HomeController.php index 38c5799cc6..a641b2f4a5 100644 --- a/app/Http/Controllers/Admin/HomeController.php +++ b/app/Http/Controllers/Admin/HomeController.php @@ -26,7 +26,6 @@ namespace FireflyIII\Http\Controllers\Admin; use FireflyIII\Events\AdminRequestedTestMessage; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Middleware\IsDemoUser; -use FireflyIII\Support\Facades\FireflyConfig; use FireflyIII\Support\Notifications\UrlValidator; use FireflyIII\User; use Illuminate\Contracts\View\Factory; @@ -35,8 +34,6 @@ use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class HomeController. @@ -45,8 +42,6 @@ class HomeController extends Controller { /** * ConfigurationController constructor. - * - */ public function __construct() { @@ -58,8 +53,6 @@ class HomeController extends Controller * Index of the admin. * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function index() { @@ -75,18 +68,13 @@ class HomeController extends Controller // admin notification settings: $notifications = []; foreach (config('firefly.admin_notifications') as $item) { - $notifications[$item] = FireflyConfig::get(sprintf('notification_%s', $item), true)->data; + $notifications[$item] = app('fireflyconfig')->get(sprintf('notification_%s', $item), true)->data; } - $slackUrl = FireflyConfig::get('slack_webhook_url', '')->data; + $slackUrl = app('fireflyconfig')->get('slack_webhook_url', '')->data; return view('admin.index', compact('title', 'mainTitleIcon', 'email', 'notifications', 'slackUrl')); } - /** - * @param Request $request - * - * @return RedirectResponse - */ public function notifications(Request $request): RedirectResponse { foreach (config('firefly.admin_notifications') as $item) { @@ -94,33 +82,33 @@ class HomeController extends Controller if ($request->has(sprintf('notification_%s', $item))) { $value = true; } - FireflyConfig::set(sprintf('notification_%s', $item), $value); + app('fireflyconfig')->set(sprintf('notification_%s', $item), $value); } $url = (string)$request->get('slackUrl'); if ('' === $url) { - FireflyConfig::delete('slack_webhook_url'); + app('fireflyconfig')->delete('slack_webhook_url'); } if (UrlValidator::isValidWebhookURL($url)) { - FireflyConfig::set('slack_webhook_url', $url); + app('fireflyconfig')->set('slack_webhook_url', $url); } session()->flash('success', (string)trans('firefly.notification_settings_saved')); + return redirect(route('admin.index')); } /** * Send a test message to the admin. * - * @param Request $request - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ - public function testMessage(Request $request) + public function testMessage() { Log::channel('audit')->info('User sends test message.'); + /** @var User $user */ $user = auth()->user(); - Log::debug('Now in testMessage() controller.'); + app('log')->debug('Now in testMessage() controller.'); event(new AdminRequestedTestMessage($user)); session()->flash('info', (string)trans('firefly.send_test_triggered')); diff --git a/app/Http/Controllers/Admin/LinkController.php b/app/Http/Controllers/Admin/LinkController.php index 38b60a53d8..a2ccd109d8 100644 --- a/app/Http/Controllers/Admin/LinkController.php +++ b/app/Http/Controllers/Admin/LinkController.php @@ -44,8 +44,6 @@ class LinkController extends Controller /** * LinkController constructor. - * - */ public function __construct() { @@ -86,10 +84,7 @@ class LinkController extends Controller /** * Delete a link form. * - * @param Request $request - * @param LinkType $linkType - * - * @return Factory|RedirectResponse|Redirector|View + * @return Factory|Redirector|RedirectResponse|View */ public function delete(Request $request, LinkType $linkType) { @@ -122,10 +117,7 @@ class LinkController extends Controller /** * Actually destroy the link. * - * @param Request $request - * @param LinkType $linkType - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function destroy(Request $request, LinkType $linkType) { @@ -143,10 +135,7 @@ class LinkController extends Controller /** * Edit a link form. * - * @param Request $request - * @param LinkType $linkType - * - * @return Factory|RedirectResponse|Redirector|View + * @return Factory|Redirector|RedirectResponse|View */ public function edit(Request $request, LinkType $linkType) { @@ -182,7 +171,7 @@ class LinkController extends Controller Log::channel('audit')->info('User on index of link types in admin.'); $linkTypes->each( - function (LinkType $linkType) { + function (LinkType $linkType): void { $linkType->journalCount = $this->repository->countJournals($linkType); } ); @@ -193,8 +182,6 @@ class LinkController extends Controller /** * Show a single link. * - * @param LinkType $linkType - * * @return Factory|View */ public function show(LinkType $linkType) @@ -211,9 +198,7 @@ class LinkController extends Controller /** * Store the new link. * - * @param LinkTypeFormRequest $request - * - * @return $this|RedirectResponse|Redirector + * @return $this|Redirector|RedirectResponse */ public function store(LinkTypeFormRequest $request) { @@ -242,10 +227,7 @@ class LinkController extends Controller /** * Update an existing link. * - * @param LinkTypeFormRequest $request - * @param LinkType $linkType - * - * @return $this|RedirectResponse|Redirector + * @return $this|Redirector|RedirectResponse */ public function update(LinkTypeFormRequest $request, LinkType $linkType) { @@ -255,7 +237,7 @@ class LinkController extends Controller return redirect(route('admin.links.index')); } - $data = [ + $data = [ 'name' => $request->convertString('name'), 'inward' => $request->convertString('inward'), 'outward' => $request->convertString('outward'), diff --git a/app/Http/Controllers/Admin/UpdateController.php b/app/Http/Controllers/Admin/UpdateController.php index 6222135aad..b335ed9d07 100644 --- a/app/Http/Controllers/Admin/UpdateController.php +++ b/app/Http/Controllers/Admin/UpdateController.php @@ -31,8 +31,6 @@ use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class HomeController. @@ -62,8 +60,6 @@ class UpdateController extends Controller * Show page with update options. * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function index() { @@ -79,7 +75,7 @@ class UpdateController extends Controller 1 => (string)trans('firefly.updates_enable_check'), ]; - $channelOptions = [ + $channelOptions = [ 'stable' => (string)trans('firefly.update_channel_stable'), 'beta' => (string)trans('firefly.update_channel_beta'), 'alpha' => (string)trans('firefly.update_channel_alpha'), @@ -91,9 +87,7 @@ class UpdateController extends Controller /** * Post new settings. * - * @param Request $request - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function post(Request $request) { diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 12808973f3..6c060b3bb5 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -36,10 +36,7 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class UserController. @@ -70,9 +67,7 @@ class UserController extends Controller } /** - * @param User $user - * - * @return Application|Factory|RedirectResponse|Redirector|View + * @return Application|Factory|Redirector|RedirectResponse|View */ public function delete(User $user) { @@ -87,31 +82,26 @@ class UserController extends Controller return view('admin.users.delete', compact('user', 'subTitle')); } - /** - * @param InvitedUser $invitedUser - * - * @return JsonResponse - */ public function deleteInvite(InvitedUser $invitedUser): JsonResponse { - Log::debug('Will now delete invitation'); + app('log')->debug('Will now delete invitation'); if ($invitedUser->redeemed) { - Log::debug('Is already redeemed.'); + app('log')->debug('Is already redeemed.'); session()->flash('error', trans('firefly.invite_is_already_redeemed', ['address' => $invitedUser->email])); + return response()->json(['success' => false]); } - Log::debug('Delete!'); + app('log')->debug('Delete!'); session()->flash('success', trans('firefly.invite_is_deleted', ['address' => $invitedUser->email])); $this->repository->deleteInvite($invitedUser); + return response()->json(['success' => true]); } /** * Destroy a user. * - * @param User $user - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function destroy(User $user) { @@ -129,8 +119,6 @@ class UserController extends Controller /** * Edit user form. * - * @param User $user - * * @return Factory|View */ public function edit(User $user) @@ -145,11 +133,11 @@ class UserController extends Controller } session()->forget('users.edit.fromUpdate'); - $subTitle = (string)trans('firefly.edit_user', ['email' => $user->email]); - $subTitleIcon = 'fa-user-o'; - $currentUser = auth()->user(); - $isAdmin = $this->repository->hasRole($user, 'owner'); - $codes = [ + $subTitle = (string)trans('firefly.edit_user', ['email' => $user->email]); + $subTitleIcon = 'fa-user-o'; + $currentUser = auth()->user(); + $isAdmin = $this->repository->hasRole($user, 'owner'); + $codes = [ '' => (string)trans('firefly.no_block_code'), 'bounced' => (string)trans('firefly.block_code_bounced'), 'expired' => (string)trans('firefly.block_code_expired'), @@ -163,26 +151,24 @@ class UserController extends Controller * Show index of user manager. * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function index() { $subTitle = (string)trans('firefly.user_administration'); $subTitleIcon = 'fa-users'; $users = $this->repository->all(); - $singleUserMode = app('fireflyconfig')->get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; + $singleUserMode = (bool)app('fireflyconfig')->get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; $allowInvites = false; if (!$this->externalIdentity && $singleUserMode) { // also registration enabled. $allowInvites = true; } - $invitedUsers = $this->repository->getInvitedUsers(); + $invitedUsers = $this->repository->getInvitedUsers(); // add meta stuff. $users->each( - function (User $user) { + function (User $user): void { $user->isAdmin = $this->repository->hasRole($user, 'owner'); $user->has2FA = null !== $user->mfa_secret; } @@ -191,11 +177,6 @@ class UserController extends Controller return view('admin.users.index', compact('subTitle', 'subTitleIcon', 'users', 'allowInvites', 'invitedUsers')); } - /** - * @param InviteUserFormRequest $request - * - * @return RedirectResponse - */ public function invite(InviteUserFormRequest $request): RedirectResponse { $address = (string)$request->get('invited_user'); @@ -211,8 +192,6 @@ class UserController extends Controller /** * Show single user. * - * @param User $user - * * @return Factory|View */ public function show(User $user) @@ -239,17 +218,14 @@ class UserController extends Controller /** * Update single user. * - * @param UserFormRequest $request - * @param User $user - * - * @return $this|RedirectResponse|Redirector + * @return $this|Redirector|RedirectResponse */ public function update(UserFormRequest $request, User $user) { - Log::debug('Actually here'); - $data = $request->getUserData(); + app('log')->debug('Actually here'); + $data = $request->getUserData(); - //var_dump($data); + // var_dump($data); // update password if (array_key_exists('password', $data) && '' !== $data['password']) { diff --git a/app/Http/Controllers/AttachmentController.php b/app/Http/Controllers/AttachmentController.php index 6f45458f30..2ae7fa576a 100644 --- a/app/Http/Controllers/AttachmentController.php +++ b/app/Http/Controllers/AttachmentController.php @@ -37,17 +37,13 @@ use Illuminate\View\View; /** * Class AttachmentController. - * */ class AttachmentController extends Controller { - /** @var AttachmentRepositoryInterface Attachment repository */ - private $repository; + private AttachmentRepositoryInterface $repository; /** * AttachmentController constructor. - * - */ public function __construct() { @@ -68,8 +64,6 @@ class AttachmentController extends Controller /** * Form to delete an attachment. * - * @param Attachment $attachment - * * @return Factory|View */ public function delete(Attachment $attachment) @@ -85,10 +79,7 @@ class AttachmentController extends Controller /** * Destroy attachment. * - * @param Request $request - * @param Attachment $attachment - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function destroy(Request $request, Attachment $attachment) { @@ -105,8 +96,6 @@ class AttachmentController extends Controller /** * Download attachment to PC. * - * @param Attachment $attachment - * * @return LaravelResponse * * @throws FireflyException @@ -114,33 +103,32 @@ class AttachmentController extends Controller public function download(Attachment $attachment) { if ($this->repository->exists($attachment)) { - $content = $this->repository->getContent($attachment); - $quoted = sprintf('"%s"', addcslashes(basename($attachment->filename), '"\\')); + $content = $this->repository->getContent($attachment); + $quoted = sprintf('"%s"', addcslashes(basename($attachment->filename), '"\\')); /** @var LaravelResponse $response */ $response = response($content); $response ->header('Content-Description', 'File Transfer') ->header('Content-Type', 'application/octet-stream') - ->header('Content-Disposition', 'attachment; filename=' . $quoted) + ->header('Content-Disposition', 'attachment; filename='.$quoted) ->header('Content-Transfer-Encoding', 'binary') ->header('Connection', 'Keep-Alive') ->header('Expires', '0') ->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') ->header('Pragma', 'public') - ->header('Content-Length', strlen($content)); + ->header('Content-Length', (string)strlen($content)) + ; return $response; } + throw new FireflyException('Could not find the indicated attachment. The file is no longer there.'); } /** * Edit an attachment. * - * @param Request $request - * @param Attachment $attachment - * * @return Factory|View */ public function edit(Request $request, Attachment $attachment) @@ -153,7 +141,7 @@ class AttachmentController extends Controller $this->rememberPreviousUrl('attachments.edit.url'); } $request->session()->forget('attachments.edit.fromUpdate'); - $preFilled = [ + $preFilled = [ 'notes' => $this->repository->getNoteText($attachment), ]; $request->session()->flash('preFilled', $preFilled); @@ -182,15 +170,10 @@ class AttachmentController extends Controller /** * Update attachment. - * - * @param AttachmentFormRequest $request - * @param Attachment $attachment - * - * @return RedirectResponse */ public function update(AttachmentFormRequest $request, Attachment $attachment): RedirectResponse { - $data = $request->getAttachmentData(); + $data = $request->getAttachmentData(); $this->repository->update($attachment, $data); $request->session()->flash('success', (string)trans('firefly.attachment_updated', ['name' => $attachment->filename])); @@ -210,20 +193,16 @@ class AttachmentController extends Controller /** * View attachment in browser. * - * @param Request $request - * @param Attachment $attachment - * - * @return LaravelResponse * @throws FireflyException * @throws BindingResolutionException */ - public function view(Request $request, Attachment $attachment): LaravelResponse + public function view(Attachment $attachment): LaravelResponse { if ($this->repository->exists($attachment)) { $content = $this->repository->getContent($attachment); // prevent XSS by adding a new secure header. - $csp = [ + $csp = [ "default-src 'none'", "object-src 'none'", "script-src 'none'", @@ -241,10 +220,11 @@ class AttachmentController extends Controller [ 'Content-Security-Policy' => implode('; ', $csp), 'Content-Type' => $attachment->mime, - 'Content-Disposition' => 'inline; filename="' . $attachment->filename . '"', + 'Content-Disposition' => 'inline; filename="'.$attachment->filename.'"', ] ); } + throw new FireflyException('Could not find the indicated attachment. The file is no longer there.'); } } diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php index 2dd3028ef2..41d7fa95b4 100644 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -31,15 +31,10 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Foundation\Auth\SendsPasswordResetEmails; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class ForgotPasswordController - * - */ class ForgotPasswordController extends Controller { @@ -61,27 +56,26 @@ class ForgotPasswordController extends Controller /** * Send a reset link to the given user. * - * @param Request $request - * @param UserRepositoryInterface $repository - * * @return Factory|RedirectResponse|View */ public function sendResetLinkEmail(Request $request, UserRepositoryInterface $repository) { - Log::info('Start of sendResetLinkEmail()'); + app('log')->info('Start of sendResetLinkEmail()'); if ('web' !== config('firefly.authentication_guard')) { $message = sprintf('Cannot reset password when authenticating over "%s".', config('firefly.authentication_guard')); - Log::error($message); + app('log')->error($message); return view('error', compact('message')); } + // validate host header. + $this->validateHost(); $this->validateEmail($request); // verify if the user is not a demo user. If so, we give him back an error. - /** @var User $user */ - $user = User::where('email', $request->get('email'))->first(); + /** @var null|User $user */ + $user = User::where('email', $request->get('email'))->first(); if (null !== $user && $repository->hasRole($user, 'demo')) { return back()->withErrors(['email' => (string)trans('firefly.cannot_reset_demo_user')]); @@ -90,9 +84,9 @@ class ForgotPasswordController extends Controller // We will send the password reset link to this user. Once we have attempted // to send the link, we will examine the response then see the message we // need to show to the user. Finally, we'll send out a proper response. - $result = $this->broker()->sendResetLink($request->only('email')); + $result = $this->broker()->sendResetLink($request->only('email')); if ('passwords.throttled' === $result) { - Log::error(sprintf('Cowardly refuse to send a password reset message to user #%d because the reset button has been throttled.', $user->id)); + app('log')->error(sprintf('Cowardly refuse to send a password reset message to user #%d because the reset button has been throttled.', $user->id)); } // always send the same response to the user: @@ -101,14 +95,27 @@ class ForgotPasswordController extends Controller return back()->with('status', trans($response)); } + /** + * @throws FireflyException + */ + private function validateHost(): void + { + $configuredHost = parse_url((string)config('app.url'), PHP_URL_HOST); + if (false === $configuredHost || null === $configuredHost) { + throw new FireflyException('Please set a valid and correct Firefly III URL in the APP_URL environment variable.'); + } + $host = request()->host(); + if ($configuredHost !== $host) { + throw new FireflyException('The Host-header does not match the host in the APP_URL environment variable. Please make sure these match. See also: https://bit.ly/FF3-host-header'); + } + } + /** * Show form for email recovery. * - * * @return Factory|View + * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function showLinkRequestForm() { diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 7a1892799d..137428953c 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Auth; use Cookie; -use DB; use FireflyIII\Events\ActuallyLoggedIn; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; @@ -34,14 +33,13 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Foundation\Auth\ThrottlesLogins; +use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Routing\Redirector; use Illuminate\Support\Facades\Log; use Illuminate\Validation\ValidationException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class LoginController @@ -49,8 +47,6 @@ use Psr\Container\NotFoundExceptionInterface; * This controller handles authenticating users for the application and * redirecting them to your home screen. The controller uses a trait * to conveniently provide its functionality to your applications. - * - */ class LoginController extends Controller { @@ -59,8 +55,6 @@ class LoginController extends Controller /** * Where to redirect users after login. - * - * @var string */ protected string $redirectTo = RouteServiceProvider::HOME; @@ -68,8 +62,6 @@ class LoginController extends Controller /** * Create a new controller instance. - * - * @return void */ public function __construct() { @@ -81,32 +73,31 @@ class LoginController extends Controller /** * Handle a login request to the application. * - * * @throws ValidationException */ - public function login(Request $request) + public function login(Request $request): JsonResponse|RedirectResponse { Log::channel('audit')->info(sprintf('User is trying to login using "%s"', $request->get($this->username()))); - Log::info('User is trying to login.'); + app('log')->debug('User is trying to login.'); $this->validateLogin($request); - Log::debug('Login data is present.'); + app('log')->debug('Login data is present.'); - /** Copied directly from AuthenticatesUsers, but with logging added: */ + // Copied directly from AuthenticatesUsers, but with logging added: // If the class is using the ThrottlesLogins trait, we can automatically throttle // the login attempts for this application. We'll key this by the username and // the IP address of the client making these requests into this application. - if (method_exists($this, 'hasTooManyLoginAttempts') && $this->hasTooManyLoginAttempts($request)) { - Log::channel('audit')->info(sprintf('Login for user "%s" was locked out.', $request->get($this->username()))); - Log::error(sprintf('Login for user "%s" was locked out.', $request->get($this->username()))); + if ($this->hasTooManyLoginAttempts($request)) { + Log::channel('audit')->warning(sprintf('Login for user "%s" was locked out.', $request->get($this->username()))); + app('log')->error(sprintf('Login for user "%s" was locked out.', $request->get($this->username()))); $this->fireLockoutEvent($request); $this->sendLockoutResponse($request); } - /** Copied directly from AuthenticatesUsers, but with logging added: */ + // Copied directly from AuthenticatesUsers, but with logging added: if ($this->attemptLogin($request)) { Log::channel('audit')->info(sprintf('User "%s" has been logged in.', $request->get($this->username()))); - Log::debug(sprintf('Redirect after login is %s.', $this->redirectPath())); + app('log')->debug(sprintf('Redirect after login is %s.', $this->redirectPath())); // if you just logged in, it can't be that you have a valid 2FA cookie. @@ -118,14 +109,17 @@ class LoginController extends Controller } app('log')->warning('Login attempt failed.'); - /** Copied directly from AuthenticatesUsers, but with logging added: */ + // Copied directly from AuthenticatesUsers, but with logging added: // If the login attempt was unsuccessful we will increment the number of attempts // to login and redirect the user back to the login form. Of course, when this // user surpasses their maximum number of attempts they will get locked out. $this->incrementLoginAttempts($request); - Log::channel('audit')->info(sprintf('Login failed. Attempt for user "%s" failed.', $request->get($this->username()))); + Log::channel('audit')->warning(sprintf('Login failed. Attempt for user "%s" failed.', $request->get($this->username()))); $this->sendFailedLoginResponse($request); + + // @noinspection PhpUnreachableStatementInspection + return response()->json([]); } /** @@ -141,13 +135,11 @@ class LoginController extends Controller /** * Get the failed login response instance. * - * @param Request $request - * - * @return void + * @SuppressWarnings(PHPMD.UnusedFormalParameter) * * @throws ValidationException */ - protected function sendFailedLoginResponse(Request $request) + protected function sendFailedLoginResponse(Request $request): void { $exception = ValidationException::withMessages( [ @@ -162,14 +154,12 @@ class LoginController extends Controller /** * Log the user out of the application. * - * @param Request $request - * - * @return RedirectResponse|Redirector|Response + * @return Redirector|RedirectResponse|Response */ public function logout(Request $request) { - $authGuard = config('firefly.authentication_guard'); - $logoutUrl = config('firefly.custom_logout_url'); + $authGuard = config('firefly.authentication_guard'); + $logoutUrl = config('firefly.custom_logout_url'); if ('remote_user_guard' === $authGuard && '' !== $logoutUrl) { return redirect($logoutUrl); } @@ -179,7 +169,7 @@ class LoginController extends Controller // also logout current 2FA tokens. $cookieName = config('google2fa.cookie_name', 'google2fa_token'); - Cookie::forget($cookieName); + \Cookie::forget($cookieName); $this->guard()->logout(); @@ -187,9 +177,7 @@ class LoginController extends Controller $request->session()->regenerateToken(); - if ($response = $this->loggedOut($request)) { - return $response; - } + $this->loggedOut($request); return $request->wantsJson() ? new Response('', 204) @@ -199,20 +187,17 @@ class LoginController extends Controller /** * Show the application's login form. * - * @param Request $request + * @return Application|Factory|Redirector|RedirectResponse|View * - * @return Factory|Application|View|Redirector|RedirectResponse * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function showLoginForm(Request $request) { Log::channel('audit')->info('Show login form (1.1).'); - $count = DB::table('users')->count(); - $guard = config('auth.defaults.guard'); - $title = (string)trans('firefly.login_page_title'); + $count = \DB::table('users')->count(); + $guard = config('auth.defaults.guard'); + $title = (string)trans('firefly.login_page_title'); if (0 === $count && 'web' === $guard) { return redirect(route('register')); @@ -232,15 +217,15 @@ class LoginController extends Controller $allowReset = false; } - $email = $request->old('email'); - $remember = $request->old('remember'); + $email = $request->old('email'); + $remember = $request->old('remember'); - $storeInCookie = config('google2fa.store_in_cookie', false); + $storeInCookie = config('google2fa.store_in_cookie', false); if (false !== $storeInCookie) { $cookieName = config('google2fa.cookie_name', 'google2fa_token'); request()->cookies->set($cookieName, 'invalid'); } - $usernameField = $this->username(); + $usernameField = $this->username(); return view('auth.login', compact('allowRegistration', 'email', 'remember', 'allowReset', 'title', 'usernameField')); } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 331ecc66bc..b84453522f 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -35,7 +35,6 @@ use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; use Illuminate\Validation\ValidationException; use Illuminate\View\View; use Psr\Container\ContainerExceptionInterface; @@ -47,13 +46,11 @@ use Psr\Container\NotFoundExceptionInterface; * This controller handles the registration of new users as well as their * validation and creation. By default this controller uses a trait to * provide this functionality without requiring any additional code. - * - */ class RegisterController extends Controller { - use RegistersUsers; use CreateStuff; + use RegistersUsers; /** * Where to redirect users after registration. @@ -78,9 +75,8 @@ class RegisterController extends Controller /** * Handle a registration request for the application. * - * @param Request $request - * * @return Application|Redirector|RedirectResponse + * * @throws FireflyException * @throws ValidationException */ @@ -95,10 +91,9 @@ class RegisterController extends Controller throw new FireflyException('Registration is currently not available :('); } - $this->validator($request->all())->validate(); - $user = $this->createUser($request->all()); - Log::info(sprintf('Registered new user %s', $user->email)); + $user = $this->createUser($request->all()); + app('log')->info(sprintf('Registered new user %s', $user->email)); event(new RegisteredUser($user)); $this->guard()->login($user); @@ -115,37 +110,36 @@ class RegisterController extends Controller } /** - * @return bool * @throws FireflyException */ protected function allowedToRegister(): bool { // is allowed to register? $allowRegistration = true; + try { $singleUserMode = app('fireflyconfig')->get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; - } catch (ContainerExceptionInterface | NotFoundExceptionInterface $e) { + } catch (ContainerExceptionInterface|NotFoundExceptionInterface $e) { $singleUserMode = true; } - $userCount = User::count(); - $guard = config('auth.defaults.guard'); + $userCount = User::count(); + $guard = config('auth.defaults.guard'); if (true === $singleUserMode && $userCount > 0 && 'web' === $guard) { $allowRegistration = false; } if ('web' !== $guard) { $allowRegistration = false; } + return $allowRegistration; } /** * Show the application registration form if the invitation code is valid. * - * * @return Factory|View - * @throws ContainerExceptionInterface + * * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function showInviteForm(Request $request, string $code) { @@ -167,7 +161,7 @@ class RegisterController extends Controller return view('error', compact('message')); } - $email = $request->old('email'); + $email = $request->old('email'); return view('auth.register', compact('isDemoSite', 'email', 'pageTitle', 'inviteCode')); } @@ -175,12 +169,9 @@ class RegisterController extends Controller /** * Show the application registration form. * - * @param Request $request - * * @return Factory|View - * @throws ContainerExceptionInterface + * * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function showRegistrationForm(Request $request) { @@ -194,7 +185,7 @@ class RegisterController extends Controller return view('error', compact('message')); } - $email = $request->old('email'); + $email = $request->old('email'); return view('auth.register', compact('isDemoSite', 'email', 'pageTitle')); } diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index 5d477d1f7e..09982b2063 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -34,8 +34,6 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Password; use Illuminate\Validation\ValidationException; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class ResetPasswordController @@ -43,8 +41,6 @@ use Psr\Container\NotFoundExceptionInterface; * This controller is responsible for handling password reset requests * and uses a simple trait to include this behavior. You're free to * explore this trait and override any methods you wish to tweak. - * - */ class ResetPasswordController extends Controller { @@ -73,11 +69,9 @@ class ResetPasswordController extends Controller /** * Reset the given user's password. * - * @param Request $request - * * @return Factory|JsonResponse|RedirectResponse|View - * @throws ValidationException * + * @throws ValidationException */ public function reset(Request $request) { @@ -86,7 +80,8 @@ class ResetPasswordController extends Controller return view('error', compact('message')); } - $rules = [ + + $rules = [ 'token' => 'required', 'email' => 'required|email', 'password' => 'required|confirmed|min:16|secure_password', @@ -96,10 +91,10 @@ class ResetPasswordController extends Controller // Here we will attempt to reset the user's password. If it is successful we // will update the password on an actual user model and persist it to the - // database. Otherwise we will parse the error and return the response. + // database. Otherwise, we will parse the error and return the response. $response = $this->broker()->reset( $this->credentials($request), - function ($user, $password) { + function ($user, $password): void { $this->resetPassword($user, $password); } ); @@ -107,7 +102,7 @@ class ResetPasswordController extends Controller // If the password was successfully reset, we will redirect the user back to // the application's home authenticated view. If there is an error we can // redirect them back to where they came from with their error message. - return $response === Password::PASSWORD_RESET + return Password::PASSWORD_RESET === $response ? $this->sendResetResponse($request, $response) : $this->sendResetFailedResponse($request, $response); } @@ -117,13 +112,11 @@ class ResetPasswordController extends Controller * * If no token is present, display the link request form. * - * @param Request $request - * @param null $token + * @param null $token * * @return Factory|View + * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function showResetForm(Request $request, $token = null) { diff --git a/app/Http/Controllers/Auth/TwoFactorController.php b/app/Http/Controllers/Auth/TwoFactorController.php index 7bd4eabc5b..7ea8448a18 100644 --- a/app/Http/Controllers/Auth/TwoFactorController.php +++ b/app/Http/Controllers/Auth/TwoFactorController.php @@ -31,7 +31,6 @@ use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use PragmaRX\Google2FALaravel\Support\Authenticator; -use Preferences; /** * Class TwoFactorController. @@ -54,15 +53,13 @@ class TwoFactorController extends Controller } /** - * @param Request $request - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function submitMFA(Request $request) { /** @var array $mfaHistory */ - $mfaHistory = Preferences::get('mfa_history', [])->data; - $mfaCode = (string)$request->get('one_time_password'); + $mfaHistory = app('preferences')->get('mfa_history', [])->data; + $mfaCode = (string)$request->get('one_time_password'); // is in history? then refuse to use it. if ($this->inMFAHistory($mfaCode, $mfaHistory)) { @@ -101,11 +98,6 @@ class TwoFactorController extends Controller /** * Each MFA history has a timestamp and a code, saving the MFA entries for 5 minutes. So if the * submitted MFA code has been submitted in the last 5 minutes, it won't work despite being valid. - * - * @param string $mfaCode - * @param array $mfaHistory - * - * @return bool */ private function inMFAHistory(string $mfaCode, array $mfaHistory): bool { @@ -127,7 +119,7 @@ class TwoFactorController extends Controller private function filterMFAHistory(): void { /** @var array $mfaHistory */ - $mfaHistory = Preferences::get('mfa_history', [])->data; + $mfaHistory = app('preferences')->get('mfa_history', [])->data; $newHistory = []; $now = time(); foreach ($mfaHistory as $entry) { @@ -140,36 +132,32 @@ class TwoFactorController extends Controller ]; } } - Preferences::set('mfa_history', $newHistory); + app('preferences')->set('mfa_history', $newHistory); } - /** - * @param string $mfaCode - */ private function addToMFAHistory(string $mfaCode): void { /** @var array $mfaHistory */ - $mfaHistory = Preferences::get('mfa_history', [])->data; + $mfaHistory = app('preferences')->get('mfa_history', [])->data; $entry = [ 'time' => time(), 'code' => $mfaCode, ]; $mfaHistory[] = $entry; - Preferences::set('mfa_history', $mfaHistory); + app('preferences')->set('mfa_history', $mfaHistory); $this->filterMFAHistory(); } /** * Checks if code is in users backup codes. - * - * @param string $mfaCode - * - * @return bool */ private function isBackupCode(string $mfaCode): bool { - $list = Preferences::get('mfa_recovery', [])->data; + $list = app('preferences')->get('mfa_recovery', [])->data; + if (!is_array($list)) { + $list = []; + } if (in_array($mfaCode, $list, true)) { return true; } @@ -179,13 +167,14 @@ class TwoFactorController extends Controller /** * Remove the used code from the list of backup codes. - * - * @param string $mfaCode */ private function removeFromBackupCodes(string $mfaCode): void { - $list = Preferences::get('mfa_recovery', [])->data; + $list = app('preferences')->get('mfa_recovery', [])->data; + if (!is_array($list)) { + $list = []; + } $newList = array_values(array_diff($list, [$mfaCode])); - Preferences::set('mfa_recovery', $newList); + app('preferences')->set('mfa_recovery', $newList); } } diff --git a/app/Http/Controllers/Bill/CreateController.php b/app/Http/Controllers/Bill/CreateController.php index 8dfdde0f48..f55075856d 100644 --- a/app/Http/Controllers/Bill/CreateController.php +++ b/app/Http/Controllers/Bill/CreateController.php @@ -45,8 +45,6 @@ class CreateController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -67,17 +65,16 @@ class CreateController extends Controller /** * Create a new bill. * - * @param Request $request - * * @return Factory|View */ public function create(Request $request) { - $periods = []; + $periods = []; + /** @var array $billPeriods */ - $billPeriods = config('firefly.bill_periods'); + $billPeriods = config('firefly.bill_periods'); foreach ($billPeriods as $current) { - $periods[$current] = (string)trans('firefly.repeat_freq_' . $current); + $periods[$current] = (string)trans('firefly.repeat_freq_'.$current); } $subTitle = (string)trans('firefly.create_new_bill'); $defaultCurrency = app('amount')->getDefaultCurrency(); @@ -93,34 +90,33 @@ class CreateController extends Controller /** * Store a new bill. - * - * @param BillStoreRequest $request - * - * @return RedirectResponse - * */ public function store(BillStoreRequest $request): RedirectResponse { - $billData = $request->getBillData(); + $billData = $request->getBillData(); $billData['active'] = true; + try { $bill = $this->repository->store($billData); } catch (FireflyException $e) { - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); $request->session()->flash('error', (string)trans('firefly.bill_store_error')); return redirect(route('bills.create'))->withInput(); } + + Log::channel('audit')->info('Stored new bill.', $billData); $request->session()->flash('success', (string)trans('firefly.stored_new_bill', ['name' => $bill->name])); app('preferences')->mark(); - /** @var array $files */ - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($bill, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } diff --git a/app/Http/Controllers/Bill/DeleteController.php b/app/Http/Controllers/Bill/DeleteController.php index 3499e40176..c69aa3d22f 100644 --- a/app/Http/Controllers/Bill/DeleteController.php +++ b/app/Http/Controllers/Bill/DeleteController.php @@ -42,8 +42,6 @@ class DeleteController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -65,8 +63,6 @@ class DeleteController extends Controller /** * Delete a bill. * - * @param Bill $bill - * * @return Factory|View */ public function delete(Bill $bill) @@ -81,10 +77,7 @@ class DeleteController extends Controller /** * Destroy a bill. * - * @param Request $request - * @param Bill $bill - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function destroy(Request $request, Bill $bill) { diff --git a/app/Http/Controllers/Bill/EditController.php b/app/Http/Controllers/Bill/EditController.php index f3f9e935cb..73909da27d 100644 --- a/app/Http/Controllers/Bill/EditController.php +++ b/app/Http/Controllers/Bill/EditController.php @@ -33,6 +33,7 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; /** * Class EditController @@ -44,8 +45,6 @@ class EditController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -66,22 +65,20 @@ class EditController extends Controller /** * Edit a bill. * - * @param Request $request - * @param Bill $bill - * * @return Factory|View */ public function edit(Request $request, Bill $bill) { - $periods = []; + $periods = []; + /** @var array $billPeriods */ - $billPeriods = config('firefly.bill_periods'); + $billPeriods = config('firefly.bill_periods'); foreach ($billPeriods as $current) { - $periods[$current] = (string)trans('firefly.' . $current); + $periods[$current] = (string)trans('firefly.'.$current); } - $subTitle = (string)trans('firefly.edit_bill', ['name' => $bill->name]); + $subTitle = (string)trans('firefly.edit_bill', ['name' => $bill->name]); // put previous url in session if not redirect from store (not "return_to_edit"). if (true !== session('bills.edit.fromUpdate')) { @@ -95,15 +92,15 @@ class EditController extends Controller $defaultCurrency = app('amount')->getDefaultCurrency(); // code to handle active-checkboxes - $hasOldInput = null !== $request->old('_token'); + $hasOldInput = null !== $request->old('_token'); - $preFilled = [ + $preFilled = [ 'bill_end_date' => $bill->end_date, 'extension_date' => $bill->extension_date, 'notes' => $this->repository->getNoteText($bill), 'transaction_currency_id' => $bill->transaction_currency_id, 'active' => $hasOldInput ? (bool)$request->old('active') : $bill->active, - 'object_group' => $bill->objectGroups->first() ? $bill->objectGroups->first()->title : '', + 'object_group' => null !== $bill->objectGroups->first() ? $bill->objectGroups->first()->title : '', ]; $request->session()->flash('preFilled', $preFilled); @@ -114,26 +111,24 @@ class EditController extends Controller /** * Update a bill. - * - * @param BillUpdateRequest $request - * @param Bill $bill - * - * @return RedirectResponse */ public function update(BillUpdateRequest $request, Bill $bill): RedirectResponse { $billData = $request->getBillData(); $bill = $this->repository->update($bill, $billData); + Log::channel('audit')->info(sprintf('Updated bill #%d.', $bill->id), $billData); + $request->session()->flash('success', (string)trans('firefly.updated_bill', ['name' => $bill->name])); app('preferences')->mark(); - /** @var array $files */ - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($bill, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } diff --git a/app/Http/Controllers/Bill/IndexController.php b/app/Http/Controllers/Bill/IndexController.php index 9c82002fc0..b78df5289c 100644 --- a/app/Http/Controllers/Bill/IndexController.php +++ b/app/Http/Controllers/Bill/IndexController.php @@ -30,11 +30,11 @@ use FireflyIII\Models\Bill; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\ObjectGroup\OrganisesObjectGroups; use FireflyIII\Transformers\BillTransformer; +use Illuminate\Contracts\View\Factory; +use Illuminate\Contracts\View\View; +use Illuminate\Foundation\Application; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; use Symfony\Component\HttpFoundation\ParameterBag; /** @@ -48,8 +48,6 @@ class IndexController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -69,45 +67,46 @@ class IndexController extends Controller /** * Show all bills. */ - public function index() + public function index(): Application|Factory|\Illuminate\Contracts\Foundation\Application|View { $this->cleanupObjectGroups(); $this->repository->correctOrder(); - $start = session('start'); - $end = session('end'); - $collection = $this->repository->getBills(); - $total = $collection->count(); + $start = session('start'); + $end = session('end'); + $collection = $this->repository->getBills(); + $total = $collection->count(); $defaultCurrency = app('amount')->getDefaultCurrency(); $parameters = new ParameterBag(); // sub one day from temp start so the last paid date is one day before it should be. - $tempStart = clone $start; + $tempStart = clone $start; // 2023-06-23 do not sub one day from temp start, fix is in BillTransformer::payDates instead - //$tempStart->subDay(); + // $tempStart->subDay(); $parameters->set('start', $tempStart); $parameters->set('end', $end); /** @var BillTransformer $transformer */ - $transformer = app(BillTransformer::class); + $transformer = app(BillTransformer::class); $transformer->setParameters($parameters); // loop all bills, convert to array and add rules and stuff. - $rules = $this->repository->getRulesForBills($collection); + $rules = $this->repository->getRulesForBills($collection); // make bill groups: - $bills = [ + $bills = [ 0 => [ // the index is the order, not the ID. - 'object_group_id' => 0, - 'object_group_title' => (string)trans('firefly.default_group_title_name'), - 'bills' => [], + 'object_group_id' => 0, + 'object_group_title' => (string)trans('firefly.default_group_title_name'), + 'bills' => [], ], ]; + /** @var Bill $bill */ foreach ($collection as $bill) { - $array = $transformer->transform($bill); - $groupOrder = (int)$array['object_group_order']; + $array = $transformer->transform($bill); + $groupOrder = (int)$array['object_group_order']; // make group array if necessary: - $bills[$groupOrder] = $bills[$groupOrder] ?? [ + $bills[$groupOrder] ??= [ 'object_group_id' => $array['object_group_id'], 'object_group_title' => $array['object_group_title'], 'bills' => [], @@ -128,20 +127,15 @@ class IndexController extends Controller ksort($bills); // summarise per currency / per group. - $sums = $this->getSums($bills); - $totals = $this->getTotals($sums); - $today = now()->startOfDay(); + $sums = $this->getSums($bills); + $totals = $this->getTotals($sums); + $today = now()->startOfDay(); return view('bills.index', compact('bills', 'sums', 'total', 'totals', 'today')); } /** - * @param array $bills - * - * @return array * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ private function getSums(array $bills): array { @@ -156,8 +150,8 @@ class IndexController extends Controller continue; } - $currencyId = $bill['currency_id']; - $sums[$groupOrder][$currencyId] = $sums[$groupOrder][$currencyId] ?? [ + $currencyId = $bill['currency_id']; + $sums[$groupOrder][$currencyId] ??= [ 'currency_id' => $currencyId, 'currency_code' => $bill['currency_code'], 'currency_name' => $bill['currency_name'], @@ -167,8 +161,9 @@ class IndexController extends Controller 'period' => $range, 'per_period' => '0', ]; + // only fill in avg when bill is active. - if (count($bill['pay_dates']) > 0) { + if (null !== $bill['next_expected_match']) { $avg = bcdiv(bcadd((string)$bill['amount_min'], (string)$bill['amount_max']), '2'); $avg = bcmul($avg, (string)count($bill['pay_dates'])); $sums[$groupOrder][$currencyId]['avg'] = bcadd($sums[$groupOrder][$currencyId]['avg'], $avg); @@ -177,21 +172,16 @@ class IndexController extends Controller $sums[$groupOrder][$currencyId]['per_period'] = bcadd($sums[$groupOrder][$currencyId]['per_period'], $this->amountPerPeriod($bill, $range)); } } + return $sums; } - /** - * @param array $bill - * @param string $range - * - * @return string - */ private function amountPerPeriod(array $bill, string $range): string { - $avg = bcdiv(bcadd((string)$bill['amount_min'], (string)$bill['amount_max']), '2'); + $avg = bcdiv(bcadd((string)$bill['amount_min'], (string)$bill['amount_max']), '2'); - Log::debug(sprintf('Amount per period for bill #%d "%s"', $bill['id'], $bill['name'])); - Log::debug(sprintf('Average is %s', $avg)); + app('log')->debug(sprintf('Amount per period for bill #%d "%s"', $bill['id'], $bill['name'])); + app('log')->debug(sprintf('Average is %s', $avg)); // calculate amount per year: $multiplies = [ 'yearly' => '1', @@ -202,10 +192,10 @@ class IndexController extends Controller 'daily' => '365.24', ]; $yearAmount = bcmul($avg, bcdiv($multiplies[$bill['repeat_freq']], (string)($bill['skip'] + 1))); - Log::debug(sprintf('Amount per year is %s (%s * %s / %s)', $yearAmount, $avg, $multiplies[$bill['repeat_freq']], (string)($bill['skip'] + 1))); + app('log')->debug(sprintf('Amount per year is %s (%s * %s / %s)', $yearAmount, $avg, $multiplies[$bill['repeat_freq']], (string)($bill['skip'] + 1))); // per period: - $division = [ + $division = [ '1Y' => '1', '6M' => '2', '3M' => '4', @@ -220,24 +210,20 @@ class IndexController extends Controller 'last90' => '4', 'last365' => '1', ]; - $perPeriod = bcdiv($yearAmount, $division[$range]); + $perPeriod = bcdiv($yearAmount, $division[$range]); - Log::debug(sprintf('Amount per %s is %s (%s / %s)', $range, $perPeriod, $yearAmount, $division[$range])); + app('log')->debug(sprintf('Amount per %s is %s (%s / %s)', $range, $perPeriod, $yearAmount, $division[$range])); return $perPeriod; } - /** - * @param array $sums - * - * @return array - */ private function getTotals(array $sums): array { $totals = []; if (count($sums) < 2) { return []; } + /** * @var array $array */ @@ -247,7 +233,7 @@ class IndexController extends Controller * @var array $entry */ foreach ($array as $currencyId => $entry) { - $totals[$currencyId] = $totals[$currencyId] ?? [ + $totals[$currencyId] ??= [ 'currency_id' => $currencyId, 'currency_code' => $entry['currency_code'], 'currency_name' => $entry['currency_name'], @@ -267,11 +253,6 @@ class IndexController extends Controller /** * Set the order of a bill. - * - * @param Request $request - * @param Bill $bill - * - * @return JsonResponse */ public function setOrder(Request $request, Bill $bill): JsonResponse { diff --git a/app/Http/Controllers/Bill/ShowController.php b/app/Http/Controllers/Bill/ShowController.php index 327c84c5f9..b0764bcd83 100644 --- a/app/Http/Controllers/Bill/ShowController.php +++ b/app/Http/Controllers/Bill/ShowController.php @@ -41,8 +41,6 @@ use Illuminate\View\View; use League\Fractal\Manager; use League\Fractal\Resource\Item; use League\Fractal\Serializer\DataArraySerializer; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; use Symfony\Component\HttpFoundation\ParameterBag; /** @@ -54,8 +52,6 @@ class ShowController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -77,24 +73,17 @@ class ShowController extends Controller /** * Rescan bills for transactions. * - * @param Request $request - * @param Bill $bill - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function rescan(Request $request, Bill $bill) { - $total = 0; + $total = 0; if (false === $bill->active) { $request->session()->flash('warning', (string)trans('firefly.cannot_scan_inactive_bill')); return redirect(route('bills.show', [$bill->id])); } - $set = new Collection(); - if (true === $bill->active) { - $set = $this->repository->getRulesForBill($bill); - $total = 0; - } + $set = $this->repository->getRulesForBill($bill); if (0 === $set->count()) { $request->session()->flash('error', (string)trans('firefly.no_rules_for_bill')); @@ -112,7 +101,7 @@ class ShowController extends Controller // file the rule(s) $ruleEngine->fire(); - $request->session()->flash('success', (string)trans_choice('firefly.rescanned_bill', $total)); + $request->session()->flash('success', trans_choice('firefly.rescanned_bill', $total)); app('preferences')->mark(); return redirect(route('bills.show', [$bill->id])); @@ -121,56 +110,56 @@ class ShowController extends Controller /** * Show a bill. * - * @param Request $request - * @param Bill $bill - * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function show(Request $request, Bill $bill) { // add info about rules: - $rules = $this->repository->getRulesForBill($bill); - $subTitle = $bill->name; + $rules = $this->repository->getRulesForBill($bill); + $subTitle = $bill->name; + /** @var Carbon $start */ - $start = session('start'); + $start = session('start'); + /** @var Carbon $end */ - $end = session('end'); - $year = $start->year; - $page = (int)$request->get('page'); - $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - $yearAverage = $this->repository->getYearAverage($bill, $start); - $overallAverage = $this->repository->getOverallAverage($bill); - $manager = new Manager(); + $end = session('end'); + $year = $start->year; + $page = (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $yearAverage = $this->repository->getYearAverage($bill, $start); + $overallAverage = $this->repository->getOverallAverage($bill); + $manager = new Manager(); $manager->setSerializer(new DataArraySerializer()); $manager->parseIncludes(['attachments', 'notes']); + // add another period to end, could fix 8163 + $range = app('navigation')->getViewRange(true); + $end = app('navigation')->addPeriod($end, $range); + // Make a resource out of the data and - $parameters = new ParameterBag(); + $parameters = new ParameterBag(); $parameters->set('start', $start); $parameters->set('end', $end); /** @var BillTransformer $transformer */ - $transformer = app(BillTransformer::class); + $transformer = app(BillTransformer::class); $transformer->setParameters($parameters); $resource = new Item($bill, $transformer, 'bill'); $object = $manager->createData($resource)->toArray(); $object['data']['currency'] = $bill->transactionCurrency; - /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setBill($bill)->setLimit($pageSize)->setPage($page)->withBudgetInformation() - ->withCategoryInformation()->withAccountInformation(); - $groups = $collector->getPaginatedGroups(); + ->withCategoryInformation()->withAccountInformation() + ; + $groups = $collector->getPaginatedGroups(); $groups->setPath(route('bills.show', [$bill->id])); // transform any attachments as well. - $collection = $this->repository->getAttachments($bill); - $attachments = new Collection(); - + $collection = $this->repository->getAttachments($bill); + $attachments = new Collection(); if ($collection->count() > 0) { /** @var AttachmentTransformer $transformer */ @@ -182,7 +171,6 @@ class ShowController extends Controller ); } - return view('bills.show', compact('attachments', 'groups', 'rules', 'yearAverage', 'overallAverage', 'year', 'object', 'bill', 'subTitle')); } } diff --git a/app/Http/Controllers/Budget/BudgetLimitController.php b/app/Http/Controllers/Budget/BudgetLimitController.php index ee6c02d6b2..a293e25fae 100644 --- a/app/Http/Controllers/Budget/BudgetLimitController.php +++ b/app/Http/Controllers/Budget/BudgetLimitController.php @@ -32,7 +32,7 @@ use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Controllers\DateCalculation; use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; @@ -40,11 +40,9 @@ use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** - * * Class BudgetLimitController */ class BudgetLimitController extends Controller @@ -77,10 +75,6 @@ class BudgetLimitController extends Controller } /** - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View */ public function create(Budget $budget, Carbon $start, Carbon $end) @@ -89,7 +83,7 @@ class BudgetLimitController extends Controller $budgetLimits = $this->blRepository->getBudgetLimits($budget, $start, $end); // remove already budgeted currencies with the same date range - $currencies = $collection->filter( + $currencies = $collection->filter( static function (TransactionCurrency $currency) use ($budgetLimits, $start, $end) { /** @var BudgetLimit $limit */ foreach ($budgetLimits as $limit) { @@ -107,12 +101,9 @@ class BudgetLimitController extends Controller } /** - * @param Request $request - * @param BudgetLimit $budgetLimit - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ - public function delete(Request $request, BudgetLimit $budgetLimit) + public function delete(BudgetLimit $budgetLimit) { $this->blRepository->destroyBudgetLimit($budgetLimit); session()->flash('success', trans('firefly.deleted_bl')); @@ -123,23 +114,25 @@ class BudgetLimitController extends Controller /** * TODO why redirect AND json response? * - * @param Request $request - * - * @return RedirectResponse|JsonResponse * @throws FireflyException */ - public function store(Request $request): RedirectResponse | JsonResponse + public function store(Request $request): JsonResponse|RedirectResponse { - Log::debug('Going to store new budget-limit.', $request->all()); + app('log')->debug('Going to store new budget-limit.', $request->all()); // first search for existing one and update it if necessary. $currency = $this->currencyRepos->find((int)$request->get('transaction_currency_id')); $budget = $this->repository->find((int)$request->get('budget_id')); if (null === $currency || null === $budget) { throw new FireflyException('No valid currency or budget.'); } - $start = Carbon::createFromFormat('Y-m-d', $request->get('start')); - $end = Carbon::createFromFormat('Y-m-d', $request->get('end')); - $amount = (string)$request->get('amount'); + $start = Carbon::createFromFormat('Y-m-d', $request->get('start')); + $end = Carbon::createFromFormat('Y-m-d', $request->get('end')); + + if (false === $start || false === $end) { + return response()->json([]); + } + + $amount = (string)$request->get('amount'); $start->startOfDay(); $end->startOfDay(); @@ -147,15 +140,16 @@ class BudgetLimitController extends Controller return response()->json([]); } - Log::debug(sprintf('Start: %s, end: %s', $start->format('Y-m-d'), $end->format('Y-m-d'))); + app('log')->debug(sprintf('Start: %s, end: %s', $start->format('Y-m-d'), $end->format('Y-m-d'))); - $limit = $this->blRepository->find($budget, $currency, $start, $end); + $limit = $this->blRepository->find($budget, $currency, $start, $end); // sanity check on amount: if (0 === bccomp($amount, '0')) { if (null !== $limit) { $this->blRepository->destroyBudgetLimit($limit); } + // return empty=ish array: return response()->json([]); } @@ -183,15 +177,15 @@ class BudgetLimitController extends Controller } if ($request->expectsJson()) { - $array = $limit->toArray(); + $array = $limit->toArray(); // add some extra metadata: - $spentArr = $this->opsRepository->sumExpenses($limit->start_date, $limit->end_date, null, new Collection([$budget]), $currency); - $array['spent'] = $spentArr[$currency->id]['sum'] ?? '0'; - $array['left_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, bcadd($array['spent'], $array['amount'])); - $array['amount_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $limit['amount']); - $array['days_left'] = (string)$this->activeDaysLeft($start, $end); + $spentArr = $this->opsRepository->sumExpenses($limit->start_date, $limit->end_date, null, new Collection([$budget]), $currency); + $array['spent'] = $spentArr[$currency->id]['sum'] ?? '0'; + $array['left_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, bcadd($array['spent'], $array['amount'])); + $array['amount_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $limit['amount']); + $array['days_left'] = (string)$this->activeDaysLeft($start, $end); // left per day: - $array['left_per_day'] = bcdiv(bcadd($array['spent'], $array['amount']), $array['days_left']); + $array['left_per_day'] = bcdiv(bcadd($array['spent'], $array['amount']), $array['days_left']); // left per day formatted. $array['left_per_day_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $array['left_per_day']); @@ -202,56 +196,51 @@ class BudgetLimitController extends Controller return redirect(route('budgets.index')); } - /** - * @param Request $request - * @param BudgetLimit $budgetLimit - * - * @return JsonResponse - */ public function update(Request $request, BudgetLimit $budgetLimit): JsonResponse { - $amount = (string)$request->get('amount'); + $amount = (string)$request->get('amount'); if ('' === $amount) { $amount = '0'; } - + if ((int)$amount > 268435456) { // 268 million, intentional integer + $amount = '268435456'; + } // sanity check on amount: if (0 === bccomp($amount, '0')) { $budgetId = $budgetLimit->budget_id; $currency = $budgetLimit->transactionCurrency; $this->blRepository->destroyBudgetLimit($budgetLimit); - $array = [ + $array = [ 'budget_id' => $budgetId, 'left_formatted' => app('amount')->formatAnything($currency, '0'), 'left_per_day_formatted' => app('amount')->formatAnything($currency, '0'), 'transaction_currency_id' => $currency->id, ]; + return response()->json($array); } - if ((int)$amount > 268435456) { // 268 million, intentional integer - $amount = '268435456'; - } + if (-1 === bccomp($amount, '0')) { $amount = bcmul($amount, '-1'); } - $limit = $this->blRepository->update($budgetLimit, ['amount' => $amount]); + $limit = $this->blRepository->update($budgetLimit, ['amount' => $amount]); app('preferences')->mark(); - $array = $limit->toArray(); + $array = $limit->toArray(); - $spentArr = $this->opsRepository->sumExpenses( + $spentArr = $this->opsRepository->sumExpenses( $limit->start_date, $limit->end_date, null, new Collection([$budgetLimit->budget]), $budgetLimit->transactionCurrency ); - $array['spent'] = $spentArr[$budgetLimit->transactionCurrency->id]['sum'] ?? '0'; - $array['left_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, bcadd($array['spent'], $array['amount'])); - $array['amount_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $limit['amount']); - $array['days_left'] = (string)$this->activeDaysLeft($limit->start_date, $limit->end_date); + $array['spent'] = $spentArr[$budgetLimit->transactionCurrency->id]['sum'] ?? '0'; + $array['left_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, bcadd($array['spent'], $array['amount'])); + $array['amount_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $limit['amount']); + $array['days_left'] = (string)$this->activeDaysLeft($limit->start_date, $limit->end_date); // left per day: - $array['left_per_day'] = bcdiv(bcadd($array['spent'], $array['amount']), $array['days_left']); + $array['left_per_day'] = bcdiv(bcadd($array['spent'], $array['amount']), $array['days_left']); // left per day formatted. $array['amount'] = app('steam')->bcround($limit['amount'], $limit->transactionCurrency->decimal_places); diff --git a/app/Http/Controllers/Budget/CreateController.php b/app/Http/Controllers/Budget/CreateController.php index da18c84c23..135305d1bf 100644 --- a/app/Http/Controllers/Budget/CreateController.php +++ b/app/Http/Controllers/Budget/CreateController.php @@ -32,6 +32,7 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** @@ -44,8 +45,6 @@ class CreateController extends Controller /** * CreateController constructor. - * - */ public function __construct() { @@ -65,13 +64,11 @@ class CreateController extends Controller /** * Form to create a budget. * - * @param Request $request - * * @return Factory|View */ public function create(Request $request) { - $hasOldInput = null !== $request->old('_token'); + $hasOldInput = null !== $request->old('_token'); // auto budget types $autoBudgetTypes = [ @@ -90,7 +87,7 @@ class CreateController extends Controller ]; $currency = app('amount')->getDefaultCurrency(); - $preFilled = [ + $preFilled = [ 'auto_budget_period' => $hasOldInput ? (bool)$request->old('auto_budget_period') : 'monthly', 'auto_budget_currency_id' => $hasOldInput ? (int)$request->old('auto_budget_currency_id') : $currency->id, ]; @@ -102,7 +99,7 @@ class CreateController extends Controller $this->rememberPreviousUrl('budgets.create.url'); } $request->session()->forget('budgets.create.fromStore'); - $subTitle = (string)trans('firefly.create_new_budget'); + $subTitle = (string)trans('firefly.create_new_budget'); return view('budgets.create', compact('subTitle', 'autoBudgetTypes', 'autoBudgetPeriods')); } @@ -110,26 +107,27 @@ class CreateController extends Controller /** * Stores a budget. * - * @param BudgetFormStoreRequest $request - * - * @return RedirectResponse * @throws FireflyException */ public function store(BudgetFormStoreRequest $request): RedirectResponse { - $data = $request->getBudgetData(); + $data = $request->getBudgetData(); - $budget = $this->repository->store($data); + $budget = $this->repository->store($data); $this->repository->cleanupBudgets(); $request->session()->flash('success', (string)trans('firefly.stored_new_budget', ['name' => $budget->name])); app('preferences')->mark(); + Log::channel('audit')->info('Stored new budget.', $data); + // store attachment(s): - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($budget, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } diff --git a/app/Http/Controllers/Budget/DeleteController.php b/app/Http/Controllers/Budget/DeleteController.php index bb8158395c..a817d0f74a 100644 --- a/app/Http/Controllers/Budget/DeleteController.php +++ b/app/Http/Controllers/Budget/DeleteController.php @@ -33,7 +33,6 @@ use Illuminate\Routing\Redirector; use Illuminate\View\View; /** - * * Class DeleteController */ class DeleteController extends Controller @@ -43,8 +42,6 @@ class DeleteController extends Controller /** * DeleteController constructor. - * - */ public function __construct() { @@ -64,8 +61,6 @@ class DeleteController extends Controller /** * Deletes a budget. * - * @param Budget $budget - * * @return Factory|View */ public function delete(Budget $budget) @@ -81,10 +76,7 @@ class DeleteController extends Controller /** * Destroys a budget. * - * @param Request $request - * @param Budget $budget - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function destroy(Request $request, Budget $budget) { diff --git a/app/Http/Controllers/Budget/EditController.php b/app/Http/Controllers/Budget/EditController.php index 76a2bedbcd..39d9e18120 100644 --- a/app/Http/Controllers/Budget/EditController.php +++ b/app/Http/Controllers/Budget/EditController.php @@ -32,10 +32,10 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** - * * Class EditController */ class EditController extends Controller @@ -45,8 +45,6 @@ class EditController extends Controller /** * EditController constructor. - * - */ public function __construct() { @@ -67,15 +65,12 @@ class EditController extends Controller /** * Budget edit form. * - * @param Request $request - * @param Budget $budget - * * @return Factory|View */ public function edit(Request $request, Budget $budget) { - $subTitle = (string)trans('firefly.edit_budget', ['name' => $budget->name]); - $autoBudget = $this->repository->getAutoBudget($budget); + $subTitle = (string)trans('firefly.edit_budget', ['name' => $budget->name]); + $autoBudget = $this->repository->getAutoBudget($budget); // auto budget types $autoBudgetTypes = [ @@ -94,14 +89,18 @@ class EditController extends Controller ]; // code to handle active-checkboxes - $hasOldInput = null !== $request->old('_token'); - $currency = app('amount')->getDefaultCurrency(); - $preFilled = [ + $hasOldInput = null !== $request->old('_token'); + $currency = app('amount')->getDefaultCurrency(); + $preFilled = [ 'active' => $hasOldInput ? (bool)$request->old('active') : $budget->active, 'auto_budget_currency_id' => $hasOldInput ? (int)$request->old('auto_budget_currency_id') : $currency->id, ]; - if ($autoBudget) { + if (null !== $autoBudget) { $amount = $hasOldInput ? $request->old('auto_budget_amount') : $autoBudget->amount; + if (is_array($amount)) { + $amount = '0'; + } + $amount = (string)$amount; $preFilled['auto_budget_amount'] = app('steam')->bcround($amount, $autoBudget->transactionCurrency->decimal_places); } @@ -117,29 +116,28 @@ class EditController extends Controller /** * Budget update routine. - * - * @param BudgetFormUpdateRequest $request - * @param Budget $budget - * - * @return RedirectResponse */ public function update(BudgetFormUpdateRequest $request, Budget $budget): RedirectResponse { - $data = $request->getBudgetData(); + $data = $request->getBudgetData(); $this->repository->update($budget, $data); $request->session()->flash('success', (string)trans('firefly.updated_budget', ['name' => $budget->name])); $this->repository->cleanupBudgets(); app('preferences')->mark(); + Log::channel('audit')->info(sprintf('Updated budget #%d.', $budget->id), $data); + $redirect = redirect($this->getPreviousUrl('budgets.edit.url')); // store new attachment(s): - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($budget, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } diff --git a/app/Http/Controllers/Budget/IndexController.php b/app/Http/Controllers/Budget/IndexController.php index 550e1348a2..787cd0c2c2 100644 --- a/app/Http/Controllers/Budget/IndexController.php +++ b/app/Http/Controllers/Budget/IndexController.php @@ -34,20 +34,15 @@ use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Controllers\DateCalculation; use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** - * * Class IndexController */ class IndexController extends Controller @@ -62,8 +57,6 @@ class IndexController extends Controller /** * IndexController constructor. - * - */ public function __construct() { @@ -88,57 +81,48 @@ class IndexController extends Controller /** * Show all budgets. * - * @param Request $request - * - * @param Carbon|null $start - * @param Carbon|null $end - * * @return Factory|View + * * @throws FireflyException - * @throws JsonException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function index(Request $request, Carbon $start = null, Carbon $end = null) + * */ + public function index(Carbon $start = null, Carbon $end = null) { $this->abRepository->cleanup(); - Log::debug(sprintf('Start of IndexController::index("%s", "%s")', $start?->format('Y-m-d'), $end?->format('Y-m-d'))); + app('log')->debug(sprintf('Start of IndexController::index("%s", "%s")', $start?->format('Y-m-d'), $end?->format('Y-m-d'))); // collect some basic vars: - $range = app('navigation')->getViewRange(true); - $isCustomRange = session('is_custom_range', false); + $range = app('navigation')->getViewRange(true); + $isCustomRange = session('is_custom_range', false); if (false === $isCustomRange) { - $start = $start ?? session('start', today(config('app.timezone'))->startOfMonth()); - $end = $end ?? app('navigation')->endOfPeriod($start, $range); + $start ??= session('start', today(config('app.timezone'))->startOfMonth()); + $end ??= app('navigation')->endOfPeriod($start, $range); } // overrule start and end if necessary: if (true === $isCustomRange) { - $start = $start ?? session('start', today(config('app.timezone'))->startOfMonth()); - $end = $end ?? session('end', today(config('app.timezone'))->endOfMonth()); + $start ??= session('start', today(config('app.timezone'))->startOfMonth()); + $end ??= session('end', today(config('app.timezone'))->endOfMonth()); } - - $defaultCurrency = app('amount')->getDefaultCurrency(); - $currencies = $this->currencyRepository->get(); - $budgeted = '0'; - $spent = '0'; + $defaultCurrency = app('amount')->getDefaultCurrency(); + $currencies = $this->currencyRepository->get(); + $budgeted = '0'; + $spent = '0'; // new period stuff: - $periodTitle = app('navigation')->periodShow($start, $range); - $prevLoop = $this->getPreviousPeriods($start, $range); - $nextLoop = $this->getNextPeriods($start, $range); + $periodTitle = app('navigation')->periodShow($start, $range); + $prevLoop = $this->getPreviousPeriods($start, $range); + $nextLoop = $this->getNextPeriods($start, $range); // get all available budgets: $availableBudgets = $this->getAllAvailableBudgets($start, $end); - // get all active budgets: - $budgets = $this->getAllBudgets($start, $end, $currencies, $defaultCurrency); - $sums = $this->getSums($budgets); + $budgets = $this->getAllBudgets($start, $end, $currencies, $defaultCurrency); + $sums = $this->getSums($budgets); // get budgeted for default currency: if (0 === count($availableBudgets)) { - $budgeted = $this->blRepository->budgeted($start, $end, $defaultCurrency, ); + $budgeted = $this->blRepository->budgeted($start, $end, $defaultCurrency); $spentArr = $this->opsRepository->sumExpenses($start, $end, null, null, $defaultCurrency); $spent = $spentArr[$defaultCurrency->id]['sum'] ?? '0'; unset($spentArr); @@ -149,7 +133,7 @@ class IndexController extends Controller $activeDaysLeft = $this->activeDaysLeft($start, $end); // see method description. // get all inactive budgets, and simply list them: - $inactive = $this->repository->getInactiveBudgets(); + $inactive = $this->repository->getInactiveBudgets(); return view( 'budgets.index', @@ -174,17 +158,12 @@ class IndexController extends Controller ); } - /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ private function getAllAvailableBudgets(Carbon $start, Carbon $end): array { // get all available budgets. $ab = $this->abRepository->get($start, $end); $availableBudgets = []; + // for each, complement with spent amount: /** @var AvailableBudget $entry */ foreach ($ab as $entry) { @@ -193,38 +172,30 @@ class IndexController extends Controller $array['end_date'] = $entry->end_date; // spent in period: - $spentArr = $this->opsRepository->sumExpenses($entry->start_date, $entry->end_date, null, null, $entry->transactionCurrency); - $array['spent'] = $spentArr[$entry->transaction_currency_id]['sum'] ?? '0'; + $spentArr = $this->opsRepository->sumExpenses($entry->start_date, $entry->end_date, null, null, $entry->transactionCurrency); + $array['spent'] = $spentArr[$entry->transaction_currency_id]['sum'] ?? '0'; // budgeted in period: - $budgeted = $this->blRepository->budgeted($entry->start_date, $entry->end_date, $entry->transactionCurrency, ); - $array['budgeted'] = $budgeted; - $availableBudgets[] = $array; + $budgeted = $this->blRepository->budgeted($entry->start_date, $entry->end_date, $entry->transactionCurrency); + $array['budgeted'] = $budgeted; + $availableBudgets[] = $array; unset($spentArr); } return $availableBudgets; } - /** - * @param Carbon $start - * @param Carbon $end - * @param Collection $currencies - * @param TransactionCurrency $defaultCurrency - * - * @return array - */ private function getAllBudgets(Carbon $start, Carbon $end, Collection $currencies, TransactionCurrency $defaultCurrency): array { // get all budgets, and paginate them into $budgets. $collection = $this->repository->getActiveBudgets(); $budgets = []; - Log::debug(sprintf('7) Start is "%s", end is "%s"', $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s'))); + app('log')->debug(sprintf('7) Start is "%s", end is "%s"', $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s'))); // complement budget with budget limits in range, and expenses in currency X in range. /** @var Budget $current */ foreach ($collection as $current) { - Log::debug(sprintf('Working on budget #%d ("%s")', $current->id, $current->name)); + app('log')->debug(sprintf('Working on budget #%d ("%s")', $current->id, $current->name)); $array = $current->toArray(); $array['spent'] = []; $array['spent_total'] = []; @@ -232,9 +203,10 @@ class IndexController extends Controller $array['attachments'] = $this->repository->getAttachments($current); $array['auto_budget'] = $this->repository->getAutoBudget($current); $budgetLimits = $this->blRepository->getBudgetLimits($current, $start, $end); + /** @var BudgetLimit $limit */ foreach ($budgetLimits as $limit) { - Log::debug(sprintf('Working on budget limit #%d', $limit->id)); + app('log')->debug(sprintf('Working on budget limit #%d', $limit->id)); $currency = $limit->transactionCurrency ?? $defaultCurrency; $amount = app('steam')->bcround($limit->amount, $currency->decimal_places); $array['budgeted'][] = [ @@ -248,7 +220,7 @@ class IndexController extends Controller 'currency_name' => $currency->name, 'currency_decimal_places' => $currency->decimal_places, ]; - Log::debug(sprintf('The amount budgeted for budget limit #%d is %s %s', $limit->id, $currency->code, $amount)); + app('log')->debug(sprintf('The amount budgeted for budget limit #%d is %s %s', $limit->id, $currency->code, $amount)); } /** @var TransactionCurrency $currency */ @@ -261,17 +233,12 @@ class IndexController extends Controller $array['spent'][$currency->id]['currency_decimal_places'] = $currency->decimal_places; } } - $budgets[] = $array; + $budgets[] = $array; } return $budgets; } - /** - * @param array $budgets - * - * @return array - */ private function getSums(array $budgets): array { $sums = [ @@ -286,13 +253,12 @@ class IndexController extends Controller foreach ($budget['spent'] as $spent) { $currencyId = $spent['currency_id']; $sums['spent'][$currencyId] - = $sums['spent'][$currencyId] - ?? [ - 'amount' => '0', - 'currency_id' => $spent['currency_id'], - 'currency_symbol' => $spent['currency_symbol'], - 'currency_decimal_places' => $spent['currency_decimal_places'], - ]; + ??= [ + 'amount' => '0', + 'currency_id' => $spent['currency_id'], + 'currency_symbol' => $spent['currency_symbol'], + 'currency_decimal_places' => $spent['currency_decimal_places'], + ]; $sums['spent'][$currencyId]['amount'] = bcadd($sums['spent'][$currencyId]['amount'], $spent['spent']); } @@ -300,31 +266,30 @@ class IndexController extends Controller foreach ($budget['budgeted'] as $budgeted) { $currencyId = $budgeted['currency_id']; $sums['budgeted'][$currencyId] - = $sums['budgeted'][$currencyId] - ?? [ - 'amount' => '0', - 'currency_id' => $budgeted['currency_id'], - 'currency_symbol' => $budgeted['currency_symbol'], - 'currency_decimal_places' => $budgeted['currency_decimal_places'], - ]; + ??= [ + 'amount' => '0', + 'currency_id' => $budgeted['currency_id'], + 'currency_symbol' => $budgeted['currency_symbol'], + 'currency_decimal_places' => $budgeted['currency_decimal_places'], + ]; $sums['budgeted'][$currencyId]['amount'] = bcadd($sums['budgeted'][$currencyId]['amount'], $budgeted['amount']); // also calculate how much left from budgeted: - $sums['left'][$currencyId] = $sums['left'][$currencyId] - ?? [ - 'amount' => '0', - 'currency_id' => $budgeted['currency_id'], - 'currency_symbol' => $budgeted['currency_symbol'], - 'currency_decimal_places' => $budgeted['currency_decimal_places'], - ]; + $sums['left'][$currencyId] + ??= [ + 'amount' => '0', + 'currency_id' => $budgeted['currency_id'], + 'currency_symbol' => $budgeted['currency_symbol'], + 'currency_decimal_places' => $budgeted['currency_decimal_places'], + ]; } } + // final calculation for 'left': /** - * @var int $currencyId - * @var array $info + * @var int $currencyId */ - foreach ($sums['budgeted'] as $currencyId => $info) { + foreach (array_keys($sums['budgeted']) as $currencyId) { $spent = $sums['spent'][$currencyId]['amount'] ?? '0'; $budgeted = $sums['budgeted'][$currencyId]['amount'] ?? '0'; $sums['left'][$currencyId]['amount'] = bcadd($spent, $budgeted); @@ -333,12 +298,6 @@ class IndexController extends Controller return $sums; } - /** - * @param Request $request - * @param BudgetRepositoryInterface $repository - * - * @return JsonResponse - */ public function reorder(Request $request, BudgetRepositoryInterface $repository): JsonResponse { $this->abRepository->cleanup(); @@ -348,7 +307,7 @@ class IndexController extends Controller $budgetId = (int)$budgetId; $budget = $repository->find($budgetId); if (null !== $budget) { - Log::debug(sprintf('Set budget #%d ("%s") to position %d', $budget->id, $budget->name, $index + 1)); + app('log')->debug(sprintf('Set budget #%d ("%s") to position %d', $budget->id, $budget->name, $index + 1)); $repository->setBudgetOrder($budget, $index + 1); } } diff --git a/app/Http/Controllers/Budget/ShowController.php b/app/Http/Controllers/Budget/ShowController.php index c07af019e7..7ad24fbe5a 100644 --- a/app/Http/Controllers/Budget/ShowController.php +++ b/app/Http/Controllers/Budget/ShowController.php @@ -37,25 +37,20 @@ use FireflyIII\Support\Http\Controllers\PeriodOverview; use Illuminate\Contracts\View\Factory; use Illuminate\Http\Request; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** - * * Class ShowController */ class ShowController extends Controller { - use PeriodOverview; use AugumentData; + use PeriodOverview; protected JournalRepositoryInterface $journalRepos; private BudgetRepositoryInterface $repository; /** * ShowController constructor. - * - */ public function __construct() { @@ -76,22 +71,17 @@ class ShowController extends Controller /** * Show transactions without a budget. * - * @param Request $request - * @param Carbon|null $start - * @param Carbon|null $end - * * @return Factory|View + * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function noBudget(Request $request, Carbon $start = null, Carbon $end = null) { - /** @var Carbon $start */ - $start = $start ?? session('start'); - /** @var Carbon $end */ - $end = $end ?? session('end'); - $subTitle = trans( + // @var Carbon $start + $start ??= session('start'); + // @var Carbon $end + $end ??= session('end'); + $subTitle = trans( 'firefly.without_budget_between', ['start' => $start->isoFormat($this->monthAndDayFormat), 'end' => $end->isoFormat($this->monthAndDayFormat)] ); @@ -106,8 +96,9 @@ class ShowController extends Controller /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL])->setLimit($pageSize)->setPage($page) - ->withoutBudget()->withAccountInformation()->withCategoryInformation(); - $groups = $collector->getPaginatedGroups(); + ->withoutBudget()->withAccountInformation()->withCategoryInformation() + ; + $groups = $collector->getPaginatedGroups(); $groups->setPath(route('budgets.no-budget')); return view('budgets.no-budget', compact('groups', 'subTitle', 'periods', 'start', 'end')); @@ -116,26 +107,23 @@ class ShowController extends Controller /** * Shows ALL transactions without a budget. * - * @param Request $request - * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function noBudgetAll(Request $request) { - $subTitle = (string)trans('firefly.all_journals_without_budget'); - $first = $this->journalRepos->firstNull(); - $start = null === $first ? new Carbon() : $first->date; - $end = today(config('app.timezone')); - $page = (int)$request->get('page'); - $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $subTitle = (string)trans('firefly.all_journals_without_budget'); + $first = $this->journalRepos->firstNull(); + $start = null === $first ? new Carbon() : $first->date; + $end = today(config('app.timezone')); + $page = (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL])->setLimit($pageSize)->setPage($page) - ->withoutBudget()->withAccountInformation()->withCategoryInformation(); - $groups = $collector->getPaginatedGroups(); + ->withoutBudget()->withAccountInformation()->withCategoryInformation() + ; + $groups = $collector->getPaginatedGroups(); $groups->setPath(route('budgets.no-budget-all')); return view('budgets.no-budget', compact('groups', 'subTitle', 'start', 'end')); @@ -144,12 +132,7 @@ class ShowController extends Controller /** * Show a single budget. * - * @param Request $request - * @param Budget $budget - * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function show(Request $request, Budget $budget) { @@ -164,14 +147,15 @@ class ShowController extends Controller // collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($allStart, $allEnd)->setBudget($budget) - ->withAccountInformation() - ->setLimit($pageSize)->setPage($page)->withBudgetInformation()->withCategoryInformation(); - $groups = $collector->getPaginatedGroups(); + ->withAccountInformation() + ->setLimit($pageSize)->setPage($page)->withBudgetInformation()->withCategoryInformation() + ; + $groups = $collector->getPaginatedGroups(); $groups->setPath(route('budgets.show', [$budget->id])); - $subTitle = (string)trans('firefly.all_journals_for_budget', ['name' => $budget->name]); + $subTitle = (string)trans('firefly.all_journals_for_budget', ['name' => $budget->name]); return view('budgets.show', compact('limits', 'attachments', 'budget', 'repetition', 'groups', 'subTitle')); } @@ -179,14 +163,9 @@ class ShowController extends Controller /** * Show a single budget by a budget limit. * - * @param Request $request - * @param Budget $budget - * @param BudgetLimit $budgetLimit - * * @return Factory|View + * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function showByBudgetLimit(Request $request, Budget $budget, BudgetLimit $budgetLimit) { @@ -194,9 +173,9 @@ class ShowController extends Controller throw new FireflyException('This budget limit is not part of this budget.'); } - $page = (int)$request->get('page'); - $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - $subTitle = trans( + $page = (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $subTitle = trans( 'firefly.budget_in_period', [ 'name' => $budget->name, @@ -208,12 +187,14 @@ class ShowController extends Controller // collector: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($budgetLimit->start_date, $budgetLimit->end_date)->withAccountInformation() - ->setBudget($budget)->setLimit($pageSize)->setPage($page)->withBudgetInformation()->withCategoryInformation(); - $groups = $collector->getPaginatedGroups(); + ->setBudget($budget)->setLimit($pageSize)->setPage($page)->withBudgetInformation()->withCategoryInformation() + ; + $groups = $collector->getPaginatedGroups(); $groups->setPath(route('budgets.show.limit', [$budget->id, $budgetLimit->id])); + /** @var Carbon $start */ $start = session('first', today(config('app.timezone'))->startOfYear()); $end = today(config('app.timezone')); diff --git a/app/Http/Controllers/Category/CreateController.php b/app/Http/Controllers/Category/CreateController.php index 77e2b7ea83..95ef28ab02 100644 --- a/app/Http/Controllers/Category/CreateController.php +++ b/app/Http/Controllers/Category/CreateController.php @@ -32,6 +32,7 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** @@ -44,8 +45,6 @@ class CreateController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -66,8 +65,6 @@ class CreateController extends Controller /** * Create category. * - * @param Request $request - * * @return Factory|View */ public function create(Request $request) @@ -84,9 +81,8 @@ class CreateController extends Controller /** * Store new category. * - * @param CategoryFormRequest $request + * @return $this|Redirector|RedirectResponse * - * @return $this|RedirectResponse|Redirector * @throws FireflyException */ public function store(CategoryFormRequest $request) @@ -98,11 +94,13 @@ class CreateController extends Controller app('preferences')->mark(); // store attachment(s): - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($category, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } diff --git a/app/Http/Controllers/Category/DeleteController.php b/app/Http/Controllers/Category/DeleteController.php index 78b87dc95e..0c2db15c03 100644 --- a/app/Http/Controllers/Category/DeleteController.php +++ b/app/Http/Controllers/Category/DeleteController.php @@ -42,8 +42,6 @@ class DeleteController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -63,8 +61,6 @@ class DeleteController extends Controller /** * Delete a category. * - * @param Category $category - * * @return Factory|View */ public function delete(Category $category) @@ -80,10 +76,7 @@ class DeleteController extends Controller /** * Destroy a category. * - * @param Request $request - * @param Category $category - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function destroy(Request $request, Category $category) { diff --git a/app/Http/Controllers/Category/EditController.php b/app/Http/Controllers/Category/EditController.php index ba3c591c9d..734d93ddfb 100644 --- a/app/Http/Controllers/Category/EditController.php +++ b/app/Http/Controllers/Category/EditController.php @@ -32,6 +32,7 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** @@ -44,8 +45,6 @@ class EditController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -66,14 +65,11 @@ class EditController extends Controller /** * Edit a category. * - * @param Request $request - * @param Category $category - * * @return Factory|View */ public function edit(Request $request, Category $category) { - $subTitle = (string)trans('firefly.edit_category', ['name' => $category->name]); + $subTitle = (string)trans('firefly.edit_category', ['name' => $category->name]); // put previous url in session if not redirect from store (not "return_to_edit"). if (true !== session('categories.edit.fromUpdate')) { @@ -91,25 +87,24 @@ class EditController extends Controller /** * Update category. * - * @param CategoryFormRequest $request - * @param Category $category - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function update(CategoryFormRequest $request, Category $category) { - $data = $request->getCategoryData(); + $data = $request->getCategoryData(); $this->repository->update($category, $data); $request->session()->flash('success', (string)trans('firefly.updated_category', ['name' => $category->name])); app('preferences')->mark(); // store new attachment(s): - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($category, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } diff --git a/app/Http/Controllers/Category/IndexController.php b/app/Http/Controllers/Category/IndexController.php index 5dc6e902ac..e6b7f8c1f1 100644 --- a/app/Http/Controllers/Category/IndexController.php +++ b/app/Http/Controllers/Category/IndexController.php @@ -31,8 +31,6 @@ use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class IndexController @@ -44,8 +42,6 @@ class IndexController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -65,11 +61,7 @@ class IndexController extends Controller /** * Show all categories. * - * @param Request $request - * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function index(Request $request) { @@ -80,7 +72,7 @@ class IndexController extends Controller $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); $collection->each( - function (Category $category) { + function (Category $category): void { $category->lastActivity = $this->repository->lastUseDate($category, new Collection()); } ); diff --git a/app/Http/Controllers/Category/NoCategoryController.php b/app/Http/Controllers/Category/NoCategoryController.php index 3b8d7bb4b3..212c955442 100644 --- a/app/Http/Controllers/Category/NoCategoryController.php +++ b/app/Http/Controllers/Category/NoCategoryController.php @@ -33,13 +33,9 @@ use FireflyIII\Support\Http\Controllers\PeriodOverview; use Illuminate\Contracts\View\Factory; use Illuminate\Http\Request; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** - * * Class NoCategoryController */ class NoCategoryController extends Controller @@ -50,8 +46,6 @@ class NoCategoryController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -72,40 +66,36 @@ class NoCategoryController extends Controller /** * Show transactions without a category. * - * @param Request $request - * @param Carbon|null $start - * @param Carbon|null $end - * * @return Factory|View + * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function show(Request $request, Carbon $start = null, Carbon $end = null) { - Log::debug('Start of noCategory()'); - /** @var Carbon $start */ - $start = $start ?? session('start'); - /** @var Carbon $end */ - $end = $end ?? session('end'); - $page = (int)$request->get('page'); - $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - $subTitle = trans( + app('log')->debug('Start of noCategory()'); + // @var Carbon $start + $start ??= session('start'); + // @var Carbon $end + $end ??= session('end'); + $page = (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $subTitle = trans( 'firefly.without_category_between', ['start' => $start->isoFormat($this->monthAndDayFormat), 'end' => $end->isoFormat($this->monthAndDayFormat)] ); - $periods = $this->getNoCategoryPeriodOverview($start); + $periods = $this->getNoCategoryPeriodOverview($start); - Log::debug(sprintf('Start for noCategory() is %s', $start->format('Y-m-d'))); - Log::debug(sprintf('End for noCategory() is %s', $end->format('Y-m-d'))); + app('log')->debug(sprintf('Start for noCategory() is %s', $start->format('Y-m-d'))); + app('log')->debug(sprintf('End for noCategory() is %s', $end->format('Y-m-d'))); /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end) - ->setLimit($pageSize)->setPage($page)->withoutCategory() - ->withAccountInformation()->withBudgetInformation() - ->setTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER]); - $groups = $collector->getPaginatedGroups(); + ->setLimit($pageSize)->setPage($page)->withoutCategory() + ->withAccountInformation()->withBudgetInformation() + ->setTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER]) + ; + $groups = $collector->getPaginatedGroups(); $groups->setPath(route('categories.no-category', [$start->format('Y-m-d'), $end->format('Y-m-d')])); return view('categories.no-category', compact('groups', 'subTitle', 'periods', 'start', 'end')); @@ -114,34 +104,31 @@ class NoCategoryController extends Controller /** * Show all transactions without a category. * - * @param Request $request - * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function showAll(Request $request) { // default values: - $start = null; - $end = null; - $periods = new Collection(); - $page = (int)$request->get('page'); - $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - Log::debug('Start of noCategory()'); - $subTitle = (string)trans('firefly.all_journals_without_category'); - $first = $this->journalRepos->firstNull(); - $start = null === $first ? new Carbon() : $first->date; - $end = today(config('app.timezone')); - Log::debug(sprintf('Start for noCategory() is %s', $start->format('Y-m-d'))); - Log::debug(sprintf('End for noCategory() is %s', $end->format('Y-m-d'))); + $start = null; + $end = null; + $periods = new Collection(); + $page = (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + app('log')->debug('Start of noCategory()'); + $subTitle = (string)trans('firefly.all_journals_without_category'); + $first = $this->journalRepos->firstNull(); + $start = null === $first ? new Carbon() : $first->date; + $end = today(config('app.timezone')); + app('log')->debug(sprintf('Start for noCategory() is %s', $start->format('Y-m-d'))); + app('log')->debug(sprintf('End for noCategory() is %s', $end->format('Y-m-d'))); /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->setLimit($pageSize)->setPage($page)->withoutCategory() - ->withAccountInformation()->withBudgetInformation() - ->setTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER]); - $groups = $collector->getPaginatedGroups(); + ->withAccountInformation()->withBudgetInformation() + ->setTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER]) + ; + $groups = $collector->getPaginatedGroups(); $groups->setPath(route('categories.no-category.all')); return view('categories.no-category', compact('groups', 'subTitle', 'periods', 'start', 'end')); diff --git a/app/Http/Controllers/Category/ShowController.php b/app/Http/Controllers/Category/ShowController.php index e534a4d984..bc51b4c0a1 100644 --- a/app/Http/Controllers/Category/ShowController.php +++ b/app/Http/Controllers/Category/ShowController.php @@ -34,13 +34,9 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\Request; use Illuminate\Support\Collection; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** - * * Class ShowController - * */ class ShowController extends Controller { @@ -51,8 +47,6 @@ class ShowController extends Controller /** * CategoryController constructor. - * - */ public function __construct() { @@ -73,22 +67,16 @@ class ShowController extends Controller /** * Show a single category. * - * @param Request $request - * @param Category $category - * @param Carbon|null $start - * @param Carbon|null $end - * * @return Factory|View + * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function show(Request $request, Category $category, Carbon $start = null, Carbon $end = null) { - /** @var Carbon $start */ - $start = $start ?? session('start', today(config('app.timezone'))->startOfMonth()); - /** @var Carbon $end */ - $end = $end ?? session('end', today(config('app.timezone'))->endOfMonth()); + // @var Carbon $start + $start ??= session('start', today(config('app.timezone'))->startOfMonth()); + // @var Carbon $end + $end ??= session('end', today(config('app.timezone'))->endOfMonth()); $subTitleIcon = 'fa-bookmark'; $page = (int)$request->get('page'); $attachments = $this->repository->getAttachments($category); @@ -106,12 +94,13 @@ class ShowController extends Controller ); /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->setLimit($pageSize)->setPage($page) - ->withAccountInformation() - ->setCategory($category)->withBudgetInformation()->withCategoryInformation(); + ->withAccountInformation() + ->setCategory($category)->withBudgetInformation()->withCategoryInformation() + ; - $groups = $collector->getPaginatedGroups(); + $groups = $collector->getPaginatedGroups(); $groups->setPath($path); return view('categories.show', compact('category', 'attachments', 'groups', 'periods', 'subTitle', 'subTitleIcon', 'start', 'end')); @@ -120,12 +109,7 @@ class ShowController extends Controller /** * Show all transactions within a category. * - * @param Request $request - * @param Category $category - * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function showAll(Request $request, Category $category) { @@ -137,21 +121,23 @@ class ShowController extends Controller $end = null; $periods = new Collection(); - $subTitle = (string)trans('firefly.all_journals_for_category', ['name' => $category->name]); - $first = $this->repository->firstUseDate($category); + $subTitle = (string)trans('firefly.all_journals_for_category', ['name' => $category->name]); + $first = $this->repository->firstUseDate($category); + /** @var Carbon $start */ - $start = $first ?? today(config('app.timezone')); - $end = today(config('app.timezone')); - $path = route('categories.show.all', [$category->id]); - $attachments = $this->repository->getAttachments($category); + $start = $first ?? today(config('app.timezone')); + $end = today(config('app.timezone')); + $path = route('categories.show.all', [$category->id]); + $attachments = $this->repository->getAttachments($category); /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->setLimit($pageSize)->setPage($page) - ->withAccountInformation() - ->setCategory($category)->withBudgetInformation()->withCategoryInformation(); + ->withAccountInformation() + ->setCategory($category)->withBudgetInformation()->withCategoryInformation() + ; - $groups = $collector->getPaginatedGroups(); + $groups = $collector->getPaginatedGroups(); $groups->setPath($path); return view('categories.show', compact('category', 'attachments', 'groups', 'periods', 'subTitle', 'subTitleIcon', 'start', 'end')); diff --git a/app/Http/Controllers/Chart/AccountController.php b/app/Http/Controllers/Chart/AccountController.php index 00c6a5c661..3482d02195 100644 --- a/app/Http/Controllers/Chart/AccountController.php +++ b/app/Http/Controllers/Chart/AccountController.php @@ -33,27 +33,22 @@ use FireflyIII\Models\AccountType; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; use FireflyIII\Support\Http\Controllers\AugumentData; use FireflyIII\Support\Http\Controllers\ChartGeneration; use FireflyIII\Support\Http\Controllers\DateCalculation; use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class AccountController. - * */ class AccountController extends Controller { - use DateCalculation; use AugumentData; use ChartGeneration; + use DateCalculation; protected GeneratorInterface $generator; private AccountRepositoryInterface $accountRepository; @@ -61,8 +56,6 @@ class AccountController extends Controller /** * AccountController constructor. - * - */ public function __construct() { @@ -83,17 +76,15 @@ class AccountController extends Controller * Shows the balances for all the user's expense accounts (on the front page). * * This chart is (multi) currency aware. - * - * @return JsonResponse - * @throws JsonException */ public function expenseAccounts(): JsonResponse { /** @var Carbon $start */ - $start = clone session('start', today(config('app.timezone'))->startOfMonth()); + $start = clone session('start', today(config('app.timezone'))->startOfMonth()); + /** @var Carbon $end */ - $end = clone session('end', today(config('app.timezone'))->endOfMonth()); - $cache = new CacheProperties(); + $end = clone session('end', today(config('app.timezone'))->endOfMonth()); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('chart.account.expense-accounts'); @@ -103,13 +94,13 @@ class AccountController extends Controller $start->subDay(); // prep some vars: - $currencies = []; - $chartData = []; - $tempData = []; + $currencies = []; + $chartData = []; + $tempData = []; // grab all accounts and names - $accounts = $this->accountRepository->getAccountsByType([AccountType::EXPENSE]); - $accountNames = $this->extractNames($accounts); + $accounts = $this->accountRepository->getAccountsByType([AccountType::EXPENSE]); + $accountNames = $this->extractNames($accounts); // grab all balances $startBalances = app('steam')->balancesPerCurrencyByAccounts($accounts, $start); @@ -120,13 +111,13 @@ class AccountController extends Controller $accountId = (int)$accountId; // loop each expense entry (each entry can be a different currency). foreach ($expenses as $currencyId => $endAmount) { - $currencyId = (int)$currencyId; + $currencyId = (int)$currencyId; // see if there is an accompanying start amount. // grab the difference and find the currency. - $startAmount = (string)($startBalances[$accountId][$currencyId] ?? '0'); - $diff = bcsub((string)$endAmount, $startAmount); - $currencies[$currencyId] = $currencies[$currencyId] ?? $this->currencyRepository->find($currencyId); + $startAmount = (string)($startBalances[$accountId][$currencyId] ?? '0'); + $diff = bcsub((string)$endAmount, $startAmount); + $currencies[$currencyId] ??= $this->currencyRepository->find($currencyId); if (0 !== bccomp($diff, '0')) { // store the values in a temporary array. $tempData[] = [ @@ -140,7 +131,7 @@ class AccountController extends Controller } // sort temp array by amount. - $amounts = array_column($tempData, 'diff_float'); + $amounts = array_column($tempData, 'diff_float'); array_multisort($amounts, SORT_DESC, $tempData); // loop all found currencies and build the data array for the chart. @@ -151,12 +142,12 @@ class AccountController extends Controller foreach ($currencies as $currencyId => $currency) { $dataSet = [ - 'label' => (string)trans('firefly.spent'), - 'type' => 'bar', - 'currency_symbol' => $currency->symbol, - 'currency_code' => $currency->code, - 'entries' => $this->expandNames($tempData), - ]; + 'label' => (string)trans('firefly.spent'), + 'type' => 'bar', + 'currency_symbol' => $currency->symbol, + 'currency_code' => $currency->code, + 'entries' => $this->expandNames($tempData), + ]; $chartData[$currencyId] = $dataSet; } @@ -167,7 +158,7 @@ class AccountController extends Controller $chartData[$currencyId]['entries'][$name] = $entry['difference']; } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); $cache->store($data); return response()->json($data); @@ -175,11 +166,6 @@ class AccountController extends Controller /** * Expenses per budget for all time, as shown on account overview. - * - * @param AccountRepositoryInterface $repository - * @param Account $account - * - * @return JsonResponse */ public function expenseBudgetAll(AccountRepositoryInterface $repository, Account $account): JsonResponse { @@ -191,16 +177,10 @@ class AccountController extends Controller /** * Expenses per budget, as shown on account overview. - * - * @param Account $account - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function expenseBudget(Account $account, Carbon $start, Carbon $end): JsonResponse { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty($start); $cache->addProperty($end); @@ -208,6 +188,7 @@ class AccountController extends Controller if ($cache->has()) { return response()->json($cache->get()); } + /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setAccounts(new Collection([$account]))->setRange($start, $end)->withBudgetInformation()->setTypes([TransactionType::WITHDRAWAL]); @@ -215,11 +196,12 @@ class AccountController extends Controller $chartData = []; $result = []; $budgetIds = []; + /** @var array $journal */ foreach ($journals as $journal) { - $budgetId = (int)$journal['budget_id']; - $key = sprintf('%d-%d', $budgetId, $journal['currency_id']); - $budgetIds[] = $budgetId; + $budgetId = (int)$journal['budget_id']; + $key = sprintf('%d-%d', $budgetId, $journal['currency_id']); + $budgetIds[] = $budgetId; if (!array_key_exists($key, $result)) { $result[$key] = [ 'total' => '0', @@ -232,7 +214,7 @@ class AccountController extends Controller $result[$key]['total'] = bcadd($journal['amount'], $result[$key]['total']); } - $names = $this->getBudgetNames($budgetIds); + $names = $this->getBudgetNames($budgetIds); foreach ($result as $row) { $budgetId = $row['budget_id']; @@ -241,7 +223,7 @@ class AccountController extends Controller $chartData[$label] = ['amount' => $row['total'], 'currency_symbol' => $row['currency_symbol'], 'currency_code' => $row['currency_code']]; } - $data = $this->generator->multiCurrencyPieChart($chartData); + $data = $this->generator->multiCurrencyPieChart($chartData); $cache->store($data); return response()->json($data); @@ -249,11 +231,6 @@ class AccountController extends Controller /** * Expenses grouped by category for account. - * - * @param AccountRepositoryInterface $repository - * @param Account $account - * - * @return JsonResponse */ public function expenseCategoryAll(AccountRepositoryInterface $repository, Account $account): JsonResponse { @@ -265,16 +242,10 @@ class AccountController extends Controller /** * Expenses per category for one single account. - * - * @param Account $account - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function expenseCategory(Account $account, Carbon $start, Carbon $end): JsonResponse { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty($start); $cache->addProperty($end); @@ -292,7 +263,7 @@ class AccountController extends Controller /** @var array $journal */ foreach ($journals as $journal) { - $key = sprintf('%d-%d', $journal['category_id'], $journal['currency_id']); + $key = sprintf('%d-%d', $journal['category_id'], $journal['currency_id']); if (!array_key_exists($key, $result)) { $result[$key] = [ 'total' => '0', @@ -304,7 +275,7 @@ class AccountController extends Controller } $result[$key]['total'] = bcadd($journal['amount'], $result[$key]['total']); } - $names = $this->getCategoryNames(array_keys($result)); + $names = $this->getCategoryNames(array_keys($result)); foreach ($result as $row) { $categoryId = $row['category_id']; @@ -313,7 +284,7 @@ class AccountController extends Controller $chartData[$label] = ['amount' => $row['total'], 'currency_symbol' => $row['currency_symbol'], 'currency_code' => $row['currency_code']]; } - $data = $this->generator->multiCurrencyPieChart($chartData); + $data = $this->generator->multiCurrencyPieChart($chartData); $cache->store($data); return response()->json($data); @@ -322,38 +293,28 @@ class AccountController extends Controller /** * Shows the balances for all the user's frontpage accounts. * - * @param AccountRepositoryInterface $repository - * - * @return JsonResponse * @throws FireflyException - * @throws JsonException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ + * */ public function frontpage(AccountRepositoryInterface $repository): JsonResponse { - $start = clone session('start', today(config('app.timezone'))->startOfMonth()); - $end = clone session('end', today(config('app.timezone'))->endOfMonth()); - $defaultSet = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET])->pluck('id')->toArray(); - Log::debug('Default set is ', $defaultSet); - $frontPage = app('preferences')->get('frontPageAccounts', $defaultSet); - Log::debug('Frontpage preference set is ', $frontPage->data); - if (0 === count($frontPage->data)) { + $start = clone session('start', today(config('app.timezone'))->startOfMonth()); + $end = clone session('end', today(config('app.timezone'))->endOfMonth()); + $defaultSet = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET])->pluck('id')->toArray(); + app('log')->debug('Default set is ', $defaultSet); + $frontPage = app('preferences')->get('frontPageAccounts', $defaultSet); + $frontPageArray = !is_array($frontPage->data) ? [] : $frontPage->data; + app('log')->debug('Frontpage preference set is ', $frontPageArray); + if (0 === count($frontPageArray)) { app('preferences')->set('frontPageAccounts', $defaultSet); - Log::debug('frontpage set is empty!'); + app('log')->debug('frontpage set is empty!'); } - $accounts = $repository->getAccountsById($frontPage->data); + $accounts = $repository->getAccountsById($frontPageArray); return response()->json($this->accountBalanceChart($accounts, $start, $end)); } /** * Shows the income grouped by category for an account, in all time. - * - * @param AccountRepositoryInterface $repository - * @param Account $account - * - * @return JsonResponse */ public function incomeCategoryAll(AccountRepositoryInterface $repository, Account $account): JsonResponse { @@ -365,16 +326,10 @@ class AccountController extends Controller /** * Shows all income per account for each category. - * - * @param Account $account - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function incomeCategory(Account $account, Carbon $start, Carbon $end): JsonResponse { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty($start); $cache->addProperty($end); @@ -391,9 +346,10 @@ class AccountController extends Controller $journals = $collector->getExtractedJournals(); $result = []; $chartData = []; + /** @var array $journal */ foreach ($journals as $journal) { - $key = sprintf('%d-%d', $journal['category_id'], $journal['currency_id']); + $key = sprintf('%d-%d', $journal['category_id'], $journal['currency_id']); if (!array_key_exists($key, $result)) { $result[$key] = [ 'total' => '0', @@ -406,14 +362,14 @@ class AccountController extends Controller $result[$key]['total'] = bcadd($journal['amount'], $result[$key]['total']); } - $names = $this->getCategoryNames(array_keys($result)); + $names = $this->getCategoryNames(array_keys($result)); foreach ($result as $row) { $categoryId = $row['category_id']; $name = $names[$categoryId] ?? '(unknown)'; $label = (string)trans('firefly.name_in_currency', ['name' => $name, 'currency' => $row['currency_name']]); $chartData[$label] = ['amount' => $row['total'], 'currency_symbol' => $row['currency_symbol'], 'currency_code' => $row['currency_code']]; } - $data = $this->generator->multiCurrencyPieChart($chartData); + $data = $this->generator->multiCurrencyPieChart($chartData); $cache->store($data); return response()->json($data); @@ -422,19 +378,12 @@ class AccountController extends Controller /** * Shows overview of account during a single period. * - * @param Account $account - * @param Carbon $start - * - * @param Carbon $end - * - * @return JsonResponse * @throws FireflyException - * @throws JsonException */ public function period(Account $account, Carbon $start, Carbon $end): JsonResponse { - $chartData = []; - $cache = new CacheProperties(); + $chartData = []; + $cache = new CacheProperties(); $cache->addProperty('chart.account.period'); $cache->addProperty($start); $cache->addProperty($end); @@ -454,40 +403,33 @@ class AccountController extends Controller $chartData[] = $this->periodByCurrency($start, $end, $account, $currency); } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); $cache->store($data); return response()->json($data); } /** - * @param Carbon $start - * @param Carbon $end - * @param Account $account - * @param TransactionCurrency $currency - * - * @return array * @throws FireflyException - * @throws JsonException */ private function periodByCurrency(Carbon $start, Carbon $end, Account $account, TransactionCurrency $currency): array { app('log')->debug(sprintf('Now in periodByCurrency("%s", "%s", %s, "%s")', $start->format('Y-m-d'), $end->format('Y-m-d'), $account->id, $currency->code)); - $locale = app('steam')->getLocale(); - $step = $this->calculateStep($start, $end); - $result = [ + $locale = app('steam')->getLocale(); + $step = $this->calculateStep($start, $end); + $result = [ 'label' => sprintf('%s (%s)', $account->name, $currency->symbol), 'currency_symbol' => $currency->symbol, 'currency_code' => $currency->code, ]; - $entries = []; - $current = clone $start; + $entries = []; + $current = clone $start; app('log')->debug(sprintf('Step is %s', $step)); // fix for issue https://github.com/firefly-iii/firefly-iii/issues/8041 // have to make sure this chart is always based on the balance at the END of the period. // This period depends on the size of the chart - $current = app('navigation')->endOfX($current, $step, null); + $current = app('navigation')->endOfX($current, $step, null); app('log')->debug(sprintf('$current date is %s', $current->format('Y-m-d'))); if ('1D' === $step) { // per day the entire period, balance for every day. @@ -511,7 +453,7 @@ class AccountController extends Controller $entries[$label] = $balance; $current = app('navigation')->addPeriod($current, $step, 0); // here too, to fix #8041, the data is corrected to the end of the period. - $current = app('navigation')->endOfX($current, $step, null); + $current = app('navigation')->endOfX($current, $step, null); } } $result['entries'] = $entries; @@ -524,14 +466,7 @@ class AccountController extends Controller * * TODO this chart is not multi currency aware. * - * @param Collection $accounts - * - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse * @throws FireflyException - * @throws JsonException */ public function report(Collection $accounts, Carbon $start, Carbon $end): JsonResponse { @@ -542,17 +477,15 @@ class AccountController extends Controller * Shows the balances for all the user's revenue accounts. * * This chart is multi-currency aware. - * - * @return JsonResponse - * @throws JsonException */ public function revenueAccounts(): JsonResponse { /** @var Carbon $start */ - $start = clone session('start', today(config('app.timezone'))->startOfMonth()); + $start = clone session('start', today(config('app.timezone'))->startOfMonth()); + /** @var Carbon $end */ - $end = clone session('end', today(config('app.timezone'))->endOfMonth()); - $cache = new CacheProperties(); + $end = clone session('end', today(config('app.timezone'))->endOfMonth()); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('chart.account.revenue-accounts'); @@ -562,13 +495,13 @@ class AccountController extends Controller $start->subDay(); // prep some vars: - $currencies = []; - $chartData = []; - $tempData = []; + $currencies = []; + $chartData = []; + $tempData = []; // grab all accounts and names - $accounts = $this->accountRepository->getAccountsByType([AccountType::REVENUE]); - $accountNames = $this->extractNames($accounts); + $accounts = $this->accountRepository->getAccountsByType([AccountType::REVENUE]); + $accountNames = $this->extractNames($accounts); // grab all balances $startBalances = app('steam')->balancesPerCurrencyByAccounts($accounts, $start); @@ -579,13 +512,13 @@ class AccountController extends Controller $accountId = (int)$accountId; // loop each expense entry (each entry can be a different currency). foreach ($expenses as $currencyId => $endAmount) { - $currencyId = (int)$currencyId; + $currencyId = (int)$currencyId; // see if there is an accompanying start amount. // grab the difference and find the currency. - $startAmount = (string)($startBalances[$accountId][$currencyId] ?? '0'); - $diff = bcsub((string)$endAmount, $startAmount); - $currencies[$currencyId] = $currencies[$currencyId] ?? $this->currencyRepository->find($currencyId); + $startAmount = (string)($startBalances[$accountId][$currencyId] ?? '0'); + $diff = bcsub((string)$endAmount, $startAmount); + $currencies[$currencyId] ??= $this->currencyRepository->find($currencyId); if (0 !== bccomp($diff, '0')) { // store the values in a temporary array. $tempData[] = [ @@ -599,7 +532,7 @@ class AccountController extends Controller } // sort temp array by amount. - $amounts = array_column($tempData, 'diff_float'); + $amounts = array_column($tempData, 'diff_float'); array_multisort($amounts, SORT_ASC, $tempData); // loop all found currencies and build the data array for the chart. @@ -610,12 +543,12 @@ class AccountController extends Controller foreach ($currencies as $currencyId => $currency) { $dataSet = [ - 'label' => (string)trans('firefly.earned'), - 'type' => 'bar', - 'currency_symbol' => $currency->symbol, - 'currency_code' => $currency->code, - 'entries' => $this->expandNames($tempData), - ]; + 'label' => (string)trans('firefly.earned'), + 'type' => 'bar', + 'currency_symbol' => $currency->symbol, + 'currency_code' => $currency->code, + 'entries' => $this->expandNames($tempData), + ]; $chartData[$currencyId] = $dataSet; } @@ -626,7 +559,7 @@ class AccountController extends Controller $chartData[$currencyId]['entries'][$name] = bcmul($entry['difference'], '-1'); } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); $cache->store($data); return response()->json($data); diff --git a/app/Http/Controllers/Chart/BillController.php b/app/Http/Controllers/Chart/BillController.php index 6397554f0d..3e8c23c996 100644 --- a/app/Http/Controllers/Chart/BillController.php +++ b/app/Http/Controllers/Chart/BillController.php @@ -41,8 +41,6 @@ class BillController extends Controller /** * BillController constructor. - * - */ public function __construct() { @@ -52,16 +50,12 @@ class BillController extends Controller /** * Shows all bills and whether or not they've been paid this month (pie chart). - * - * @param BillRepositoryInterface $repository - * - * @return JsonResponse */ public function frontpage(BillRepositoryInterface $repository): JsonResponse { - $start = session('start', today(config('app.timezone'))->startOfMonth()); - $end = session('end', today(config('app.timezone'))->endOfMonth()); - $cache = new CacheProperties(); + $start = session('start', today(config('app.timezone'))->startOfMonth()); + $end = session('end', today(config('app.timezone'))->endOfMonth()); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('chart.bill.frontpage'); @@ -85,6 +79,7 @@ class BillController extends Controller 'currency_code' => $info['code'], ]; } + /** * @var array $info */ @@ -98,7 +93,7 @@ class BillController extends Controller ]; } - $data = $this->generator->multiCurrencyPieChart($chartData); + $data = $this->generator->multiCurrencyPieChart($chartData); $cache->store($data); return response()->json($data); @@ -107,24 +102,21 @@ class BillController extends Controller /** * Shows overview for a single bill. * - * @param Bill $bill - * - * @return JsonResponse * @throws FireflyException */ public function single(Bill $bill): JsonResponse { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty('chart.bill.single'); $cache->addProperty($bill->id); if ($cache->has()) { return response()->json($cache->get()); } - $locale = app('steam')->getLocale(); + $locale = app('steam')->getLocale(); /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); - $journals = $collector->setBill($bill)->getExtractedJournals(); + $collector = app(GroupCollectorInterface::class); + $journals = $collector->setBill($bill)->getExtractedJournals(); // sort the other way around: usort( @@ -164,7 +156,7 @@ class BillController extends Controller 'entries' => [], ], ]; - $currencyId = (int)$bill->transaction_currency_id; + $currencyId = $bill->transaction_currency_id; foreach ($journals as $journal) { $date = $journal['date']->isoFormat((string)trans('config.month_and_day_js', [], $locale)); $chartData[0]['entries'][$date] = $bill->amount_min; // minimum amount of bill @@ -174,16 +166,15 @@ class BillController extends Controller if (!array_key_exists($date, $chartData[2]['entries'])) { $chartData[2]['entries'][$date] = '0'; } - $amount = bcmul($journal['amount'], '-1'); + $amount = bcmul($journal['amount'], '-1'); if ($currencyId === $journal['foreign_currency_id']) { $amount = bcmul($journal['foreign_amount'], '-1'); } - $chartData[2]['entries'][$date] = bcadd($chartData[2]['entries'][$date], $amount); // amount of journal } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); $cache->store($data); return response()->json($data); diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index cc77852515..63d8051745 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -45,12 +45,11 @@ use Illuminate\Support\Collection; /** * Class BudgetController. - * */ class BudgetController extends Controller { - use DateCalculation; use AugumentData; + use DateCalculation; protected GeneratorInterface $generator; protected OperationsRepositoryInterface $opsRepository; @@ -60,8 +59,6 @@ class BudgetController extends Controller /** * BudgetController constructor. - * - */ public function __construct() { @@ -82,18 +79,15 @@ class BudgetController extends Controller /** * Shows overview of a single budget. - * - * @param Budget $budget - * - * @return JsonResponse */ public function budget(Budget $budget): JsonResponse { /** @var Carbon $start */ - $start = $this->repository->firstUseDate($budget) ?? session('start', today(config('app.timezone'))); + $start = $this->repository->firstUseDate($budget) ?? session('start', today(config('app.timezone'))); + /** @var Carbon $end */ - $end = session('end', today(config('app.timezone'))); - $cache = new CacheProperties(); + $end = session('end', today(config('app.timezone'))); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('chart.budget.budget'); @@ -111,19 +105,19 @@ class BudgetController extends Controller $defaultEntries = []; while ($end >= $loopStart) { /** @var Carbon $loopEnd */ - $loopEnd = app('navigation')->endOfPeriod($loopStart, $step); - $spent = $this->opsRepository->sumExpenses($loopStart, $loopEnd, null, $collection); - $label = trim(app('navigation')->periodShow($loopStart, $step)); + $loopEnd = app('navigation')->endOfPeriod($loopStart, $step); + $spent = $this->opsRepository->sumExpenses($loopStart, $loopEnd, null, $collection); + $label = trim(app('navigation')->periodShow($loopStart, $step)); foreach ($spent as $row) { - $currencyId = $row['currency_id']; - $currencies[$currencyId] = $currencies[$currencyId] ?? $row; // don't mind the field 'sum' + $currencyId = $row['currency_id']; + $currencies[$currencyId] ??= $row; // don't mind the field 'sum' // also store this day's sum: $currencies[$currencyId]['spent'][$label] = $row['sum']; } $defaultEntries[$label] = 0; // set loop start to the next period: - $loopStart = clone $loopEnd; + $loopStart = clone $loopEnd; $loopStart->addSecond(); } // loop all currencies: @@ -139,7 +133,7 @@ class BudgetController extends Controller $chartData[$currencyId]['entries'][$label] = bcmul($spent, '-1'); } } - $data = $this->generator->multiSet(array_values($chartData)); + $data = $this->generator->multiSet(array_values($chartData)); $cache->store($data); return response()->json($data); @@ -148,11 +142,6 @@ class BudgetController extends Controller /** * Shows the amount left in a specific budget limit. * - * @param Budget $budget - * @param BudgetLimit $budgetLimit - * - * @return JsonResponse - * * @throws FireflyException */ public function budgetLimit(Budget $budget, BudgetLimit $budgetLimit): JsonResponse @@ -161,9 +150,9 @@ class BudgetController extends Controller throw new FireflyException('This budget limit is not part of this budget.'); } - $start = clone $budgetLimit->start_date; - $end = clone $budgetLimit->end_date; - $cache = new CacheProperties(); + $start = clone $budgetLimit->start_date; + $end = clone $budgetLimit->end_date; + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('chart.budget.budget.limit'); @@ -173,22 +162,22 @@ class BudgetController extends Controller if ($cache->has()) { return response()->json($cache->get()); } - $locale = app('steam')->getLocale(); - $entries = []; - $amount = $budgetLimit->amount; - $budgetCollection = new Collection([$budget]); - $currency = $budgetLimit->transactionCurrency; + $locale = app('steam')->getLocale(); + $entries = []; + $amount = $budgetLimit->amount; + $budgetCollection = new Collection([$budget]); + $currency = $budgetLimit->transactionCurrency; while ($start <= $end) { $current = clone $start; $expenses = $this->opsRepository->sumExpenses($current, $current, null, $budgetCollection, $currency); - $spent = $expenses[(int)$currency->id]['sum'] ?? '0'; + $spent = $expenses[$currency->id]['sum'] ?? '0'; $amount = bcadd($amount, $spent); $format = $start->isoFormat((string)trans('config.month_and_day_js', [], $locale)); $entries[$format] = $amount; $start->addDay(); } - $data = $this->generator->singleSet((string)trans('firefly.left'), $entries); + $data = $this->generator->singleSet((string)trans('firefly.left'), $entries); // add currency symbol from budget limit: $data['datasets'][0]['currency_symbol'] = $budgetLimit->transactionCurrency->symbol; $data['datasets'][0]['currency_code'] = $budgetLimit->transactionCurrency->code; @@ -199,11 +188,6 @@ class BudgetController extends Controller /** * Shows how much is spent per asset account. - * - * @param Budget $budget - * @param BudgetLimit|null $budgetLimit - * - * @return JsonResponse */ public function expenseAsset(Budget $budget, ?BudgetLimit $budgetLimit = null): JsonResponse { @@ -214,8 +198,8 @@ class BudgetController extends Controller $cache->addProperty($budget->id); $cache->addProperty($budgetLimitId); $cache->addProperty('chart.budget.expense-asset'); - $start = session('first', today(config('app.timezone'))->startOfYear()); - $end = today(); + $start = session('first', today(config('app.timezone'))->startOfYear()); + $end = today(); if (null !== $budgetLimit) { $start = $budgetLimit->start_date; @@ -230,14 +214,14 @@ class BudgetController extends Controller } $collector->setRange($start, $end); $collector->setBudget($budget); - $journals = $collector->getExtractedJournals(); - $result = []; - $chartData = []; + $journals = $collector->getExtractedJournals(); + $result = []; + $chartData = []; // group by asset account ID: foreach ($journals as $journal) { $key = sprintf('%d-%d', (int)$journal['source_account_id'], $journal['currency_id']); - $result[$key] = $result[$key] ?? [ + $result[$key] ??= [ 'amount' => '0', 'currency_symbol' => $journal['currency_symbol'], 'currency_code' => $journal['currency_code'], @@ -246,20 +230,20 @@ class BudgetController extends Controller $result[$key]['amount'] = bcadd($journal['amount'], $result[$key]['amount']); } - $names = $this->getAccountNames(array_keys($result)); + $names = $this->getAccountNames(array_keys($result)); foreach ($result as $combinedId => $info) { $parts = explode('-', $combinedId); $assetId = (int)$parts[0]; $title = sprintf('%s (%s)', $names[$assetId] ?? '(empty)', $info['currency_name']); $chartData[$title] = [ - 'amount' => $info['amount'], - 'currency_symbol' => $info['currency_symbol'], - 'currency_code' => $info['currency_code'], - ]; + 'amount' => $info['amount'], + 'currency_symbol' => $info['currency_symbol'], + 'currency_code' => $info['currency_code'], + ]; } - $data = $this->generator->multiCurrencyPieChart($chartData); + $data = $this->generator->multiCurrencyPieChart($chartData); $cache->store($data); return response()->json($data); @@ -267,11 +251,6 @@ class BudgetController extends Controller /** * Shows how much is spent per category. - * - * @param Budget $budget - * @param BudgetLimit|null $budgetLimit - * - * @return JsonResponse */ public function expenseCategory(Budget $budget, ?BudgetLimit $budgetLimit = null): JsonResponse { @@ -282,8 +261,8 @@ class BudgetController extends Controller $cache->addProperty($budget->id); $cache->addProperty($budgetLimitId); $cache->addProperty('chart.budget.expense-category'); - $start = session('first', today(config('app.timezone'))->startOfYear()); - $end = today(); + $start = session('first', today(config('app.timezone'))->startOfYear()); + $end = today(); if (null !== $budgetLimit) { $start = $budgetLimit->start_date; $end = $budgetLimit->end_date; @@ -297,12 +276,12 @@ class BudgetController extends Controller } $collector->setRange($start, $end); $collector->setBudget($budget)->withCategoryInformation(); - $journals = $collector->getExtractedJournals(); - $result = []; - $chartData = []; + $journals = $collector->getExtractedJournals(); + $result = []; + $chartData = []; foreach ($journals as $journal) { $key = sprintf('%d-%d', $journal['category_id'], $journal['currency_id']); - $result[$key] = $result[$key] ?? [ + $result[$key] ??= [ 'amount' => '0', 'currency_symbol' => $journal['currency_symbol'], 'currency_code' => $journal['currency_code'], @@ -311,7 +290,7 @@ class BudgetController extends Controller $result[$key]['amount'] = bcadd($journal['amount'], $result[$key]['amount']); } - $names = $this->getCategoryNames(array_keys($result)); + $names = $this->getCategoryNames(array_keys($result)); foreach ($result as $combinedId => $info) { $parts = explode('-', $combinedId); $categoryId = (int)$parts[0]; @@ -322,7 +301,7 @@ class BudgetController extends Controller 'currency_code' => $info['currency_code'], ]; } - $data = $this->generator->multiCurrencyPieChart($chartData); + $data = $this->generator->multiCurrencyPieChart($chartData); $cache->store($data); return response()->json($data); @@ -330,12 +309,6 @@ class BudgetController extends Controller /** * Shows how much is spent per expense account. - * - * - * @param Budget $budget - * @param BudgetLimit|null $budgetLimit - * - * @return JsonResponse */ public function expenseExpense(Budget $budget, ?BudgetLimit $budgetLimit = null): JsonResponse { @@ -346,8 +319,8 @@ class BudgetController extends Controller $cache->addProperty($budget->id); $cache->addProperty($budgetLimitId); $cache->addProperty('chart.budget.expense-expense'); - $start = session('first', today(config('app.timezone'))->startOfYear()); - $end = today(); + $start = session('first', today(config('app.timezone'))->startOfYear()); + $end = today(); if (null !== $budgetLimit) { $start = $budgetLimit->start_date; $end = $budgetLimit->end_date; @@ -361,13 +334,14 @@ class BudgetController extends Controller } $collector->setRange($start, $end); $collector->setTypes([TransactionType::WITHDRAWAL])->setBudget($budget)->withAccountInformation(); - $journals = $collector->getExtractedJournals(); - $result = []; - $chartData = []; + $journals = $collector->getExtractedJournals(); + $result = []; + $chartData = []; + /** @var array $journal */ foreach ($journals as $journal) { $key = sprintf('%d-%d', $journal['destination_account_id'], $journal['currency_id']); - $result[$key] = $result[$key] ?? [ + $result[$key] ??= [ 'amount' => '0', 'currency_symbol' => $journal['currency_symbol'], 'currency_code' => $journal['currency_code'], @@ -376,7 +350,7 @@ class BudgetController extends Controller $result[$key]['amount'] = bcadd($journal['amount'], $result[$key]['amount']); } - $names = $this->getAccountNames(array_keys($result)); + $names = $this->getAccountNames(array_keys($result)); foreach ($result as $combinedId => $info) { $parts = explode('-', $combinedId); $opposingId = (int)$parts[0]; @@ -389,7 +363,7 @@ class BudgetController extends Controller ]; } - $data = $this->generator->multiCurrencyPieChart($chartData); + $data = $this->generator->multiCurrencyPieChart($chartData); $cache->store($data); return response()->json($data); @@ -397,16 +371,14 @@ class BudgetController extends Controller /** * Shows a budget list with spent/left/overspent. - * - * @return JsonResponse */ public function frontpage(): JsonResponse { - $start = session('start', today(config('app.timezone'))->startOfMonth()); - $end = session('end', today(config('app.timezone'))->endOfMonth()); + $start = session('start', today(config('app.timezone'))->startOfMonth()); + $end = session('end', today(config('app.timezone'))->endOfMonth()); // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('chart.budget.frontpage'); @@ -419,8 +391,8 @@ class BudgetController extends Controller $chartGenerator->setStart($start); $chartGenerator->setEnd($end); - $chartData = $chartGenerator->generate(); - $data = $this->generator->multiSet($chartData); + $chartData = $chartGenerator->generate(); + $data = $this->generator->multiSet($chartData); $cache->store($data); return response()->json($data); @@ -429,18 +401,14 @@ class BudgetController extends Controller /** * Shows a budget overview chart (spent and budgeted). * - * @param Budget $budget - * @param TransactionCurrency $currency - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end + * Suppress warning because this method will be replaced by API calls. * - * @return JsonResponse + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function period(Budget $budget, TransactionCurrency $currency, Collection $accounts, Carbon $start, Carbon $end): JsonResponse { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty($accounts); @@ -469,11 +437,11 @@ class BudgetController extends Controller ], ]; - $currentStart = clone $start; + $currentStart = clone $start; while ($currentStart <= $end) { - $currentStart = app('navigation')->startOfPeriod($currentStart, $preferredRange); - $title = $currentStart->isoFormat($titleFormat); - $currentEnd = app('navigation')->endOfPeriod($currentStart, $preferredRange); + $currentStart = app('navigation')->startOfPeriod($currentStart, $preferredRange); + $title = $currentStart->isoFormat($titleFormat); + $currentEnd = app('navigation')->endOfPeriod($currentStart, $preferredRange); // default limit is no limit: $chartData[0]['entries'][$title] = 0; @@ -482,7 +450,7 @@ class BudgetController extends Controller $chartData[1]['entries'][$title] = 0; // get budget limit in this period for this currency. - $limit = $this->blRepository->find($budget, $currency, $currentStart, $currentEnd); + $limit = $this->blRepository->find($budget, $currency, $currentStart, $currentEnd); if (null !== $limit) { $chartData[1]['entries'][$title] = app('steam')->bcround($limit->amount, $currency->decimal_places); } @@ -492,11 +460,11 @@ class BudgetController extends Controller $amount = app('steam')->positive($sum[$currency->id]['sum'] ?? '0'); $chartData[0]['entries'][$title] = app('steam')->bcround($amount, $currency->decimal_places); - $currentStart = clone $currentEnd; + $currentStart = clone $currentEnd; $currentStart->addDay()->startOfDay(); } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); $cache->store($data); return response()->json($data); @@ -504,18 +472,11 @@ class BudgetController extends Controller /** * Shows a chart for transactions without a budget. - * - * @param TransactionCurrency $currency - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function periodNoBudget(TransactionCurrency $currency, Collection $accounts, Carbon $start, Carbon $end): JsonResponse { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty($accounts); @@ -539,7 +500,7 @@ class BudgetController extends Controller $currentStart = app('navigation')->addPeriod($currentStart, $preferredRange, 0); } - $data = $this->generator->singleSet((string)trans('firefly.spent'), $chartData); + $data = $this->generator->singleSet((string)trans('firefly.spent'), $chartData); $cache->store($data); return response()->json($data); diff --git a/app/Http/Controllers/Chart/BudgetReportController.php b/app/Http/Controllers/Chart/BudgetReportController.php index dcc9758c86..fac020c8e8 100644 --- a/app/Http/Controllers/Chart/BudgetReportController.php +++ b/app/Http/Controllers/Chart/BudgetReportController.php @@ -37,7 +37,6 @@ use Illuminate\Support\Collection; * Separate controller because many helper functions are shared. * * Class BudgetReportController - * */ class BudgetReportController extends Controller { @@ -52,8 +51,6 @@ class BudgetReportController extends Controller /** * BudgetReportController constructor. - * - */ public function __construct() { @@ -70,13 +67,6 @@ class BudgetReportController extends Controller /** * Chart that groups the expenses by budget. - * - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function budgetExpense(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end): JsonResponse { @@ -86,8 +76,8 @@ class BudgetReportController extends Controller // loop expenses. foreach ($spent as $currency) { foreach ($currency['budgets'] as $budget) { - $title = sprintf('%s (%s)', $budget['name'], $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $title = sprintf('%s (%s)', $budget['name'], $currency['currency_name']); + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -99,20 +89,13 @@ class BudgetReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } /** * Chart that groups the expenses by budget. - * - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function categoryExpense(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end): JsonResponse { @@ -122,9 +105,9 @@ class BudgetReportController extends Controller foreach ($spent as $currency) { foreach ($currency['budgets'] as $budget) { foreach ($budget['transaction_journals'] as $journal) { - $categoryName = $journal['category_name'] ?? trans('firefly.no_category'); - $title = sprintf('%s (%s)', $categoryName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $categoryName = $journal['category_name'] ?? trans('firefly.no_category'); + $title = sprintf('%s (%s)', $categoryName, $currency['currency_name']); + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -136,20 +119,13 @@ class BudgetReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } /** * Chart that groups expenses by the account. - * - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function destinationAccountExpense(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end): JsonResponse { @@ -160,8 +136,8 @@ class BudgetReportController extends Controller foreach ($spent as $currency) { foreach ($currency['budgets'] as $budget) { foreach ($budget['transaction_journals'] as $journal) { - $title = sprintf('%s (%s)', $journal['destination_account_name'], $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $title = sprintf('%s (%s)', $journal['destination_account_name'], $currency['currency_name']); + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -173,20 +149,13 @@ class BudgetReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } /** * Main overview of a budget in the budget report. - * - * @param Collection $accounts - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function mainChart(Collection $accounts, Budget $budget, Carbon $start, Carbon $end): JsonResponse { @@ -197,8 +166,8 @@ class BudgetReportController extends Controller // loop expenses. foreach ($spent as $currency) { // add things to chart Data for each currency: - $spentKey = sprintf('%d-spent', $currency['currency_id']); - $chartData[$spentKey] = $chartData[$spentKey] ?? [ + $spentKey = sprintf('%d-spent', $currency['currency_id']); + $chartData[$spentKey] ??= [ 'label' => sprintf( '%s (%s)', (string)trans('firefly.spent_in_specific_budget', ['budget' => $budget->name]), @@ -215,23 +184,17 @@ class BudgetReportController extends Controller foreach ($currentBudget['transaction_journals'] as $journal) { $key = $journal['date']->isoFormat($format); $amount = app('steam')->positive($journal['amount']); - $chartData[$spentKey]['entries'][$key] = $chartData[$spentKey]['entries'][$key] ?? '0'; + $chartData[$spentKey]['entries'][$key] ??= '0'; $chartData[$spentKey]['entries'][$key] = bcadd($chartData[$spentKey]['entries'][$key], $amount); } } } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); return response()->json($data); } - /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ private function makeEntries(Carbon $start, Carbon $end): array { $return = []; @@ -251,13 +214,6 @@ class BudgetReportController extends Controller /** * Chart that groups expenses by the account. - * - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function sourceAccountExpense(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end): JsonResponse { @@ -268,8 +224,8 @@ class BudgetReportController extends Controller foreach ($spent as $currency) { foreach ($currency['budgets'] as $budget) { foreach ($budget['transaction_journals'] as $journal) { - $title = sprintf('%s (%s)', $journal['source_account_name'], $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $title = sprintf('%s (%s)', $journal['source_account_name'], $currency['currency_name']); + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -281,7 +237,7 @@ class BudgetReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index f600454d4d..42be033f2b 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -39,25 +39,21 @@ use FireflyIII\Support\Http\Controllers\ChartGeneration; use FireflyIII\Support\Http\Controllers\DateCalculation; use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class CategoryController. */ class CategoryController extends Controller { - use DateCalculation; use AugumentData; use ChartGeneration; + use DateCalculation; /** @var GeneratorInterface Chart generation methods. */ protected $generator; /** * CategoryController constructor. - * - */ public function __construct() { @@ -70,28 +66,24 @@ class CategoryController extends Controller * Show an overview for a category for all time, per month/week/year. * TODO test method, for category refactor. * - * @param Category $category - * - * @return JsonResponse * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function all(Category $category): JsonResponse { // cache results: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty('chart.category.all'); $cache->addProperty($category->id); if ($cache->has()) { return response()->json($cache->get()); } + /** @var CategoryRepositoryInterface $repository */ - $repository = app(CategoryRepositoryInterface::class); - $start = $repository->firstUseDate($category) ?? $this->getDate(); - $range = app('navigation')->getViewRange(false); - $start = app('navigation')->startOfPeriod($start, $range); - $end = $this->getDate(); + $repository = app(CategoryRepositoryInterface::class); + $start = $repository->firstUseDate($category) ?? $this->getDate(); + $range = app('navigation')->getViewRange(false); + $start = app('navigation')->startOfPeriod($start, $range); + $end = $this->getDate(); /** @var WholePeriodChartGenerator $chartGenerator */ $chartGenerator = app(WholePeriodChartGenerator::class); @@ -102,9 +94,6 @@ class CategoryController extends Controller return response()->json($data); } - /** - * @return Carbon - */ private function getDate(): Carbon { return today(config('app.timezone')); @@ -113,15 +102,13 @@ class CategoryController extends Controller /** * Shows the category chart on the front page. * TODO test method for category refactor. - * - * @return JsonResponse */ public function frontPage(): JsonResponse { - $start = session('start', today(config('app.timezone'))->startOfMonth()); - $end = session('end', today(config('app.timezone'))->endOfMonth()); + $start = session('start', today(config('app.timezone'))->startOfMonth()); + $end = session('end', today(config('app.timezone'))->endOfMonth()); // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('chart.category.frontpage'); @@ -140,13 +127,6 @@ class CategoryController extends Controller /** * Chart report. * TODO test method for category refactor. - * - * @param Category $category - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function reportPeriod(Category $category, Collection $accounts, Carbon $start, Carbon $end): JsonResponse { @@ -159,7 +139,7 @@ class CategoryController extends Controller if ($cache->has()) { return response()->json($cache->get()); } - $data = $this->reportPeriodChart($accounts, $start, $end, $category); + $data = $this->reportPeriodChart($accounts, $start, $end, $category); $cache->store($data); @@ -168,13 +148,6 @@ class CategoryController extends Controller /** * Generate report chart for either with or without category. - * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * @param Category|null $category - * - * @return array */ private function reportPeriodChart(Collection $accounts, Carbon $start, Carbon $end, ?Category $category): array { @@ -186,18 +159,18 @@ class CategoryController extends Controller $noCatRepository = app(NoCategoryRepositoryInterface::class); // this gives us all currencies - $expenses = $noCatRepository->listExpenses($start, $end, $accounts); - $income = $noCatRepository->listIncome($start, $end, $accounts); + $expenses = $noCatRepository->listExpenses($start, $end, $accounts); + $income = $noCatRepository->listIncome($start, $end, $accounts); } if (null !== $category) { /** @var OperationsRepositoryInterface $opsRepository */ $opsRepository = app(OperationsRepositoryInterface::class); - $categoryId = (int)$category->id; + $categoryId = $category->id; // this gives us all currencies - $collection = new Collection([$category]); - $expenses = $opsRepository->listExpenses($start, $end, null, $collection); - $income = $opsRepository->listIncome($start, $end, null, $collection); + $collection = new Collection([$category]); + $expenses = $opsRepository->listExpenses($start, $end, null, $collection); + $income = $opsRepository->listIncome($start, $end, null, $collection); } $currencies = array_unique(array_merge(array_keys($income), array_keys($expenses))); $periods = app('navigation')->listOfPeriods($start, $end); @@ -211,19 +184,19 @@ class CategoryController extends Controller $inKey = sprintf('%d-in', $currencyId); $chartData[$outKey] = [ - 'label' => sprintf('%s (%s)', (string)trans('firefly.spent'), $currencyInfo['currency_name']), - 'entries' => [], - 'type' => 'bar', - 'backgroundColor' => 'rgba(219, 68, 55, 0.5)', // red - ]; + 'label' => sprintf('%s (%s)', (string)trans('firefly.spent'), $currencyInfo['currency_name']), + 'entries' => [], + 'type' => 'bar', + 'backgroundColor' => 'rgba(219, 68, 55, 0.5)', // red + ]; $chartData[$inKey] - = [ - 'label' => sprintf('%s (%s)', (string)trans('firefly.earned'), $currencyInfo['currency_name']), - 'entries' => [], - 'type' => 'bar', - 'backgroundColor' => 'rgba(0, 141, 76, 0.5)', // green - ]; + = [ + 'label' => sprintf('%s (%s)', (string)trans('firefly.earned'), $currencyInfo['currency_name']), + 'entries' => [], + 'type' => 'bar', + 'backgroundColor' => 'rgba(0, 141, 76, 0.5)', // green + ]; // loop empty periods: foreach (array_keys($periods) as $period) { $label = $periods[$period]; @@ -231,20 +204,20 @@ class CategoryController extends Controller $chartData[$inKey]['entries'][$label] = '0'; } // loop income and expenses for this category.: - $outSet = $expenses[$currencyId]['categories'][$categoryId] ?? ['transaction_journals' => []]; + $outSet = $expenses[$currencyId]['categories'][$categoryId] ?? ['transaction_journals' => []]; foreach ($outSet['transaction_journals'] as $journal) { $amount = app('steam')->positive($journal['amount']); $date = $journal['date']->isoFormat($format); - $chartData[$outKey]['entries'][$date] = $chartData[$outKey]['entries'][$date] ?? '0'; + $chartData[$outKey]['entries'][$date] ??= '0'; $chartData[$outKey]['entries'][$date] = bcadd($amount, $chartData[$outKey]['entries'][$date]); } - $inSet = $income[$currencyId]['categories'][$categoryId] ?? ['transaction_journals' => []]; + $inSet = $income[$currencyId]['categories'][$categoryId] ?? ['transaction_journals' => []]; foreach ($inSet['transaction_journals'] as $journal) { $amount = app('steam')->positive($journal['amount']); $date = $journal['date']->isoFormat($format); - $chartData[$inKey]['entries'][$date] = $chartData[$inKey]['entries'][$date] ?? '0'; + $chartData[$inKey]['entries'][$date] ??= '0'; $chartData[$inKey]['entries'][$date] = bcadd($amount, $chartData[$inKey]['entries'][$date]); } } @@ -255,12 +228,6 @@ class CategoryController extends Controller /** * Chart for period for transactions without a category. * TODO test me. - * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function reportPeriodNoCategory(Collection $accounts, Carbon $start, Carbon $end): JsonResponse { @@ -272,7 +239,7 @@ class CategoryController extends Controller if ($cache->has()) { return response()->json($cache->get()); } - $data = $this->reportPeriodChart($accounts, $start, $end, null); + $data = $this->reportPeriodChart($accounts, $start, $end, null); $cache->store($data); @@ -283,24 +250,18 @@ class CategoryController extends Controller * Chart for a specific period. * TODO test me, for category refactor. * - * @param Category $category - * @param Carbon $date - * - * @return JsonResponse * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function specificPeriod(Category $category, Carbon $date): JsonResponse { - $range = app('navigation')->getViewRange(false); - $start = app('navigation')->startOfPeriod($date, $range); - $end = session()->get('end'); + $range = app('navigation')->getViewRange(false); + $start = app('navigation')->startOfPeriod($date, $range); + $end = session()->get('end'); if ($end < $start) { [$end, $start] = [$start, $end]; } - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty($category->id); diff --git a/app/Http/Controllers/Chart/CategoryReportController.php b/app/Http/Controllers/Chart/CategoryReportController.php index 9d23654432..ad34527918 100644 --- a/app/Http/Controllers/Chart/CategoryReportController.php +++ b/app/Http/Controllers/Chart/CategoryReportController.php @@ -45,13 +45,12 @@ class CategoryReportController extends Controller /** @var GeneratorInterface Chart generation methods. */ private $generator; + /** @var OperationsRepositoryInterface */ private $opsRepository; /** * CategoryReportController constructor. - * - */ public function __construct() { @@ -66,14 +65,6 @@ class CategoryReportController extends Controller ); } - /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function budgetExpense(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -86,7 +77,7 @@ class CategoryReportController extends Controller foreach ($category['transaction_journals'] as $journal) { $objectName = $journal['budget_name'] ?? trans('firefly.no_budget'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -97,19 +88,11 @@ class CategoryReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function categoryExpense(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -119,8 +102,8 @@ class CategoryReportController extends Controller foreach ($spent as $currency) { /** @var array $category */ foreach ($currency['categories'] as $category) { - $title = sprintf('%s (%s)', $category['name'], $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $title = sprintf('%s (%s)', $category['name'], $currency['currency_name']); + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -132,19 +115,11 @@ class CategoryReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function categoryIncome(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -154,8 +129,8 @@ class CategoryReportController extends Controller foreach ($earned as $currency) { /** @var array $category */ foreach ($currency['categories'] as $category) { - $title = sprintf('%s (%s)', $category['name'], $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $title = sprintf('%s (%s)', $category['name'], $currency['currency_name']); + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -167,19 +142,11 @@ class CategoryReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function destinationExpense(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -192,7 +159,7 @@ class CategoryReportController extends Controller foreach ($category['transaction_journals'] as $journal) { $objectName = $journal['destination_account_name'] ?? trans('firefly.empty'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -203,19 +170,11 @@ class CategoryReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function destinationIncome(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -228,7 +187,7 @@ class CategoryReportController extends Controller foreach ($category['transaction_journals'] as $journal) { $objectName = $journal['destination_account_name'] ?? trans('firefly.empty'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -239,20 +198,11 @@ class CategoryReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Category $category - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - * - */ public function mainChart(Collection $accounts, Category $category, Carbon $start, Carbon $end): JsonResponse { $chartData = []; @@ -263,8 +213,8 @@ class CategoryReportController extends Controller // loop expenses. foreach ($spent as $currency) { // add things to chart Data for each currency: - $spentKey = sprintf('%d-spent', $currency['currency_id']); - $chartData[$spentKey] = $chartData[$spentKey] ?? [ + $spentKey = sprintf('%d-spent', $currency['currency_id']); + $chartData[$spentKey] ??= [ 'label' => sprintf( '%s (%s)', (string)trans('firefly.spent_in_specific_category', ['category' => $category->name]), @@ -281,7 +231,7 @@ class CategoryReportController extends Controller foreach ($currentCategory['transaction_journals'] as $journal) { $key = $journal['date']->isoFormat($format); $amount = app('steam')->positive($journal['amount']); - $chartData[$spentKey]['entries'][$key] = $chartData[$spentKey]['entries'][$key] ?? '0'; + $chartData[$spentKey]['entries'][$key] ??= '0'; $chartData[$spentKey]['entries'][$key] = bcadd($chartData[$spentKey]['entries'][$key], $amount); } } @@ -290,8 +240,8 @@ class CategoryReportController extends Controller // loop income. foreach ($earned as $currency) { // add things to chart Data for each currency: - $spentKey = sprintf('%d-earned', $currency['currency_id']); - $chartData[$spentKey] = $chartData[$spentKey] ?? [ + $spentKey = sprintf('%d-earned', $currency['currency_id']); + $chartData[$spentKey] ??= [ 'label' => sprintf( '%s (%s)', (string)trans('firefly.earned_in_specific_category', ['category' => $category->name]), @@ -308,24 +258,19 @@ class CategoryReportController extends Controller foreach ($currentCategory['transaction_journals'] as $journal) { $key = $journal['date']->isoFormat($format); $amount = app('steam')->positive($journal['amount']); - $chartData[$spentKey]['entries'][$key] = $chartData[$spentKey]['entries'][$key] ?? '0'; + $chartData[$spentKey]['entries'][$key] ??= '0'; $chartData[$spentKey]['entries'][$key] = bcadd($chartData[$spentKey]['entries'][$key], $amount); } } } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); return response()->json($data); } /** * TODO duplicate function - * - * @param Carbon $start - * @param Carbon $end - * - * @return array */ private function makeEntries(Carbon $start, Carbon $end): array { @@ -344,14 +289,6 @@ class CategoryReportController extends Controller return $return; } - /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function sourceExpense(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -364,7 +301,7 @@ class CategoryReportController extends Controller foreach ($category['transaction_journals'] as $journal) { $objectName = $journal['source_account_name'] ?? trans('firefly.empty'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -375,19 +312,11 @@ class CategoryReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function sourceIncome(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -400,7 +329,7 @@ class CategoryReportController extends Controller foreach ($category['transaction_journals'] as $journal) { $objectName = $journal['source_account_name'] ?? trans('firefly.empty'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -411,7 +340,7 @@ class CategoryReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } diff --git a/app/Http/Controllers/Chart/DoubleReportController.php b/app/Http/Controllers/Chart/DoubleReportController.php index 1cda544991..8cf9117732 100644 --- a/app/Http/Controllers/Chart/DoubleReportController.php +++ b/app/Http/Controllers/Chart/DoubleReportController.php @@ -33,13 +33,13 @@ use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; /** - * * Class DoubleReportController */ class DoubleReportController extends Controller { /** @var GeneratorInterface Chart generation methods. */ private $generator; + /** @var OperationsRepositoryInterface */ private $opsRepository; @@ -48,8 +48,6 @@ class DoubleReportController extends Controller /** * CategoryReportController constructor. - * - */ public function __construct() { @@ -65,14 +63,6 @@ class DoubleReportController extends Controller ); } - /** - * @param Collection $accounts - * @param Collection $others - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function budgetExpense(Collection $accounts, Collection $others, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -85,7 +75,7 @@ class DoubleReportController extends Controller foreach ($currency['transaction_journals'] as $journal) { $categoryName = $journal['budget_name'] ?? trans('firefly.no_budget'); $title = sprintf('%s (%s)', $categoryName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -95,19 +85,11 @@ class DoubleReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $others - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function categoryExpense(Collection $accounts, Collection $others, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -120,7 +102,7 @@ class DoubleReportController extends Controller foreach ($currency['transaction_journals'] as $journal) { $categoryName = $journal['category_name'] ?? trans('firefly.no_category'); $title = sprintf('%s (%s)', $categoryName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -130,19 +112,11 @@ class DoubleReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $others - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function categoryIncome(Collection $accounts, Collection $others, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -155,7 +129,7 @@ class DoubleReportController extends Controller foreach ($currency['transaction_journals'] as $journal) { $categoryName = $journal['category_name'] ?? trans('firefly.no_category'); $title = sprintf('%s (%s)', $categoryName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -165,29 +139,20 @@ class DoubleReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Account $account - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - * - */ public function mainChart(Collection $accounts, Account $account, Carbon $start, Carbon $end): JsonResponse { $chartData = []; - $opposing = $this->repository->expandWithDoubles(new Collection([$account])); - $accounts = $accounts->merge($opposing); - $spent = $this->opsRepository->listExpenses($start, $end, $accounts); - $earned = $this->opsRepository->listIncome($start, $end, $accounts); - $format = app('navigation')->preferredCarbonLocalizedFormat($start, $end); + $opposing = $this->repository->expandWithDoubles(new Collection([$account])); + $accounts = $accounts->merge($opposing); + $spent = $this->opsRepository->listExpenses($start, $end, $accounts); + $earned = $this->opsRepository->listIncome($start, $end, $accounts); + $format = app('navigation')->preferredCarbonLocalizedFormat($start, $end); // loop expenses. foreach ($spent as $currency) { @@ -195,7 +160,7 @@ class DoubleReportController extends Controller $spentKey = sprintf('%d-spent', $currency['currency_id']); $name = $this->getCounterpartName($accounts, $account->id, $account->name, $account->iban); - $chartData[$spentKey] = $chartData[$spentKey] ?? [ + $chartData[$spentKey] ??= [ 'label' => sprintf( '%s (%s)', (string)trans('firefly.spent_in_specific_double', ['account' => $name]), @@ -211,7 +176,7 @@ class DoubleReportController extends Controller foreach ($currency['transaction_journals'] as $journal) { $key = $journal['date']->isoFormat($format); $amount = app('steam')->positive($journal['amount']); - $chartData[$spentKey]['entries'][$key] = $chartData[$spentKey]['entries'][$key] ?? '0'; + $chartData[$spentKey]['entries'][$key] ??= '0'; $chartData[$spentKey]['entries'][$key] = bcadd($chartData[$spentKey]['entries'][$key], $amount); } } @@ -221,7 +186,7 @@ class DoubleReportController extends Controller $earnedKey = sprintf('%d-earned', $currency['currency_id']); $name = $this->getCounterpartName($accounts, $account->id, $account->name, $account->iban); - $chartData[$earnedKey] = $chartData[$earnedKey] ?? [ + $chartData[$earnedKey] ??= [ 'label' => sprintf( '%s (%s)', (string)trans('firefly.earned_in_specific_double', ['account' => $name]), @@ -237,25 +202,18 @@ class DoubleReportController extends Controller foreach ($currency['transaction_journals'] as $journal) { $key = $journal['date']->isoFormat($format); $amount = app('steam')->positive($journal['amount']); - $chartData[$earnedKey]['entries'][$key] = $chartData[$earnedKey]['entries'][$key] ?? '0'; + $chartData[$earnedKey]['entries'][$key] ??= '0'; $chartData[$earnedKey]['entries'][$key] = bcadd($chartData[$earnedKey]['entries'][$key], $amount); } } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); return response()->json($data); } /** * TODO duplicate function - * - * @param Collection $accounts - * @param int $id - * @param string $name - * @param null|string $iban - * - * @return string */ private function getCounterpartName(Collection $accounts, int $id, string $name, ?string $iban): string { @@ -274,11 +232,6 @@ class DoubleReportController extends Controller /** * TODO duplicate function - * - * @param Carbon $start - * @param Carbon $end - * - * @return array */ private function makeEntries(Carbon $start, Carbon $end): array { @@ -297,14 +250,6 @@ class DoubleReportController extends Controller return $return; } - /** - * @param Collection $accounts - * @param Collection $others - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function tagExpense(Collection $accounts, Collection $others, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -319,11 +264,11 @@ class DoubleReportController extends Controller // no tags? also deserves a sport if (0 === count($journal['tags'])) { - $includedJournals[] = $journalId; + $includedJournals[] = $journalId; // do something $tagName = trans('firefly.no_tags'); $title = sprintf('%s (%s)', $tagName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -331,17 +276,18 @@ class DoubleReportController extends Controller $amount = app('steam')->positive($journal['amount']); $result[$title]['amount'] = bcadd($result[$title]['amount'], $amount); } + // loop each tag: /** @var array $tag */ foreach ($journal['tags'] as $tag) { if (in_array($journalId, $includedJournals, true)) { continue; } - $includedJournals[] = $journalId; + $includedJournals[] = $journalId; // do something $tagName = $tag['name']; $title = sprintf('%s (%s)', $tagName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -352,19 +298,11 @@ class DoubleReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $others - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function tagIncome(Collection $accounts, Collection $others, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -379,11 +317,11 @@ class DoubleReportController extends Controller // no tags? also deserves a sport if (0 === count($journal['tags'])) { - $includedJournals[] = $journalId; + $includedJournals[] = $journalId; // do something $tagName = trans('firefly.no_tags'); $title = sprintf('%s (%s)', $tagName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -391,17 +329,18 @@ class DoubleReportController extends Controller $amount = app('steam')->positive($journal['amount']); $result[$title]['amount'] = bcadd($result[$title]['amount'], $amount); } + // loop each tag: /** @var array $tag */ foreach ($journal['tags'] as $tag) { if (in_array($journalId, $includedJournals, true)) { continue; } - $includedJournals[] = $journalId; + $includedJournals[] = $journalId; // do something $tagName = $tag['name']; $title = sprintf('%s (%s)', $tagName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -412,7 +351,7 @@ class DoubleReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } diff --git a/app/Http/Controllers/Chart/ExpenseReportController.php b/app/Http/Controllers/Chart/ExpenseReportController.php index 6757e856c4..889a004850 100644 --- a/app/Http/Controllers/Chart/ExpenseReportController.php +++ b/app/Http/Controllers/Chart/ExpenseReportController.php @@ -33,7 +33,6 @@ use FireflyIII\Support\Http\Controllers\AugumentData; use FireflyIII\Support\Http\Controllers\TransactionCalculation; use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; -use JsonException; /** * Separate controller because many helper functions are shared. @@ -45,15 +44,11 @@ class ExpenseReportController extends Controller use AugumentData; use TransactionCalculation; - /** @var AccountRepositoryInterface The account repository */ - protected $accountRepository; - /** @var GeneratorInterface Chart generation methods. */ - protected $generator; + protected AccountRepositoryInterface $accountRepository; + protected GeneratorInterface $generator; /** * ExpenseReportController constructor. - * - */ public function __construct() { @@ -73,17 +68,11 @@ class ExpenseReportController extends Controller * * TODO this chart is not multi currency aware. * - * @param Collection $accounts - * @param Collection $expense - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - * @throws JsonException + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function mainChart(Collection $accounts, Collection $expense, Carbon $start, Carbon $end): JsonResponse { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty('chart.expense.report.main'); $cache->addProperty($accounts); $cache->addProperty($expense); @@ -98,9 +87,8 @@ class ExpenseReportController extends Controller $chartData = []; $currentStart = clone $start; $combined = $this->combineAccounts($expense); - // make "all" set: - $all = new Collection(); - foreach ($combined as $name => $combination) { + $all = new Collection(); + foreach ($combined as $combination) { $all = $all->merge($combination); } @@ -112,28 +100,28 @@ class ExpenseReportController extends Controller foreach ($combined as $name => $combination) { // first is always expense account: /** @var Account $exp */ - $exp = $combination->first(); - $chartData[$exp->id . '-in'] = [ + $exp = $combination->first(); + $chartData[$exp->id.'-in'] = [ 'label' => sprintf('%s (%s)', $name, (string)trans('firefly.income')), 'type' => 'bar', 'yAxisID' => 'y-axis-0', 'entries' => [], ]; - $chartData[$exp->id . '-out'] = [ + $chartData[$exp->id.'-out'] = [ 'label' => sprintf('%s (%s)', $name, (string)trans('firefly.expenses')), 'type' => 'bar', 'yAxisID' => 'y-axis-0', 'entries' => [], ]; // total in, total out: - $chartData[$exp->id . '-total-in'] = [ + $chartData[$exp->id.'-total-in'] = [ 'label' => sprintf('%s (%s)', $name, (string)trans('firefly.sum_of_income')), 'type' => 'line', 'fill' => false, 'yAxisID' => 'y-axis-1', 'entries' => [], ]; - $chartData[$exp->id . '-total-out'] = [ + $chartData[$exp->id.'-total-out'] = [ 'label' => sprintf('%s (%s)', $name, (string)trans('firefly.sum_of_expenses')), 'type' => 'line', 'fill' => false, @@ -146,30 +134,30 @@ class ExpenseReportController extends Controller $sumOfExpense = []; while ($currentStart < $end) { - $currentEnd = clone $currentStart; - $currentEnd = $currentEnd->$function(); + $currentEnd = clone $currentStart; + $currentEnd = $currentEnd->{$function}(); // @phpstan-ignore-line // get expenses grouped by opposing name: - $expenses = $this->groupByName($this->getExpensesForOpposing($accounts, $all, $currentStart, $currentEnd)); - $income = $this->groupByName($this->getIncomeForOpposing($accounts, $all, $currentStart, $currentEnd)); - $label = $currentStart->isoFormat($format); + $expenses = $this->groupByName($this->getExpensesForOpposing($accounts, $all, $currentStart, $currentEnd)); + $income = $this->groupByName($this->getIncomeForOpposing($accounts, $all, $currentStart, $currentEnd)); + $label = $currentStart->isoFormat($format); foreach ($combined as $name => $combination) { // first is always expense account: /** @var Account $exp */ - $exp = $combination->first(); - $labelIn = $exp->id . '-in'; - $labelOut = $exp->id . '-out'; - $labelSumIn = $exp->id . '-total-in'; - $labelSumOut = $exp->id . '-total-out'; - $currentIncome = bcmul($income[$name] ?? '0', '-1'); - $currentExpense = $expenses[$name] ?? '0'; + $exp = $combination->first(); + $labelIn = $exp->id.'-in'; + $labelOut = $exp->id.'-out'; + $labelSumIn = $exp->id.'-total-in'; + $labelSumOut = $exp->id.'-total-out'; + $currentIncome = bcmul($income[$name] ?? '0', '-1'); + $currentExpense = $expenses[$name] ?? '0'; // add to sum: - $sumOfIncome[$exp->id] = $sumOfIncome[$exp->id] ?? '0'; - $sumOfExpense[$exp->id] = $sumOfExpense[$exp->id] ?? '0'; - $sumOfIncome[$exp->id] = bcadd($sumOfIncome[$exp->id], $currentIncome); - $sumOfExpense[$exp->id] = bcadd($sumOfExpense[$exp->id], $currentExpense); + $sumOfIncome[$exp->id] ??= '0'; + $sumOfExpense[$exp->id] ??= '0'; + $sumOfIncome[$exp->id] = bcadd($sumOfIncome[$exp->id], $currentIncome); + $sumOfExpense[$exp->id] = bcadd($sumOfExpense[$exp->id], $currentExpense); // add to chart: $chartData[$labelIn]['entries'][$label] = $currentIncome; @@ -177,23 +165,24 @@ class ExpenseReportController extends Controller $chartData[$labelSumIn]['entries'][$label] = $sumOfIncome[$exp->id]; $chartData[$labelSumOut]['entries'][$label] = $sumOfExpense[$exp->id]; } + /** @var Carbon $currentStart */ $currentStart = clone $currentEnd; $currentStart->addDay(); $currentStart->startOfDay(); } // remove all empty entries to prevent cluttering: - $newSet = []; + $newSet = []; foreach ($chartData as $key => $entry) { // TODO not sure, this is a bad comparison. - if (0 === !array_sum($entry['entries'])) { + if (array_sum($entry['entries']) > 0) { $newSet[$key] = $entry; } } if (0 === count($newSet)) { $newSet = $chartData; } - $data = $this->generator->multiSet($newSet); + $data = $this->generator->multiSet($newSet); $cache->store($data); return response()->json($data); diff --git a/app/Http/Controllers/Chart/PiggyBankController.php b/app/Http/Controllers/Chart/PiggyBankController.php index 7057f84947..4bf27e2748 100644 --- a/app/Http/Controllers/Chart/PiggyBankController.php +++ b/app/Http/Controllers/Chart/PiggyBankController.php @@ -46,8 +46,6 @@ class PiggyBankController extends Controller /** * PiggyBankController constructor. - * - */ public function __construct() { @@ -61,42 +59,38 @@ class PiggyBankController extends Controller * * TODO this chart is not multi currency aware. * - * @param PiggyBankRepositoryInterface $repository - * @param PiggyBank $piggyBank - * - * @return JsonResponse * @throws FireflyException */ public function history(PiggyBankRepositoryInterface $repository, PiggyBank $piggyBank): JsonResponse { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty('chart.piggy-bank.history'); $cache->addProperty($piggyBank->id); if ($cache->has()) { return response()->json($cache->get()); } - $set = $repository->getEvents($piggyBank); - $set = $set->reverse(); - $locale = app('steam')->getLocale(); + $set = $repository->getEvents($piggyBank); + $set = $set->reverse(); + $locale = app('steam')->getLocale(); // get first event or start date of piggy bank or today - $startDate = $piggyBank->startdate ?? today(config('app.timezone')); + $startDate = $piggyBank->startdate ?? today(config('app.timezone')); - /** @var PiggyBankEvent|null $firstEvent */ - $firstEvent = $set->first(); - $firstDate = null === $firstEvent ? new Carbon() : $firstEvent->date; + /** @var null|PiggyBankEvent $firstEvent */ + $firstEvent = $set->first(); + $firstDate = null === $firstEvent ? new Carbon() : $firstEvent->date; // which ever is older: - $oldest = $startDate->lt($firstDate) ? $startDate : $firstDate; - $today = today(config('app.timezone')); + $oldest = $startDate->lt($firstDate) ? $startDate : $firstDate; + $today = today(config('app.timezone')); // depending on diff, do something with range of chart. - $step = $this->calculateStep($oldest, $today); + $step = $this->calculateStep($oldest, $today); - $chartData = []; + $chartData = []; while ($oldest <= $today) { $filtered = $set->filter( - function (PiggyBankEvent $event) use ($oldest) { + static function (PiggyBankEvent $event) use ($oldest) { return $event->date->lte($oldest); } ); @@ -106,7 +100,7 @@ class PiggyBankController extends Controller $oldest = app('navigation')->addPeriod($oldest, $step, 0); } $finalFiltered = $set->filter( - function (PiggyBankEvent $event) use ($today) { + static function (PiggyBankEvent $event) use ($today) { return $event->date->lte($today); } ); @@ -114,7 +108,7 @@ class PiggyBankController extends Controller $finalLabel = $today->isoFormat((string)trans('config.month_and_day_js', [], $locale)); $chartData[$finalLabel] = $finalSum; - $data = $this->generator->singleSet($piggyBank->name, $chartData); + $data = $this->generator->singleSet($piggyBank->name, $chartData); $cache->store($data); return response()->json($data); diff --git a/app/Http/Controllers/Chart/ReportController.php b/app/Http/Controllers/Chart/ReportController.php index 426e84c66b..8ad7bde9d7 100644 --- a/app/Http/Controllers/Chart/ReportController.php +++ b/app/Http/Controllers/Chart/ReportController.php @@ -36,8 +36,6 @@ use FireflyIII\Support\Http\Controllers\BasicDataSupport; use FireflyIII\Support\Http\Controllers\ChartGeneration; use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class ReportController. @@ -47,13 +45,10 @@ class ReportController extends Controller use BasicDataSupport; use ChartGeneration; - /** @var GeneratorInterface Chart generation methods. */ - protected $generator; + protected GeneratorInterface $generator; /** * ReportController constructor. - * - */ public function __construct() { @@ -65,17 +60,11 @@ class ReportController extends Controller /** * This chart, by default, is shown on the multi-year and year report pages, * which means that giving it a 2 week "period" should be enough granularity. - * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse */ public function netWorth(Collection $accounts, Carbon $start, Carbon $end): JsonResponse { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty('chart.report.net-worth'); $cache->addProperty($start); $cache->addProperty(implode(',', $accounts->pluck('id')->toArray())); @@ -83,11 +72,12 @@ class ReportController extends Controller if ($cache->has()) { return response()->json($cache->get()); } - $locale = app('steam')->getLocale(); - $current = clone $start; - $chartData = []; + $locale = app('steam')->getLocale(); + $current = clone $start; + $chartData = []; + /** @var NetWorthInterface $helper */ - $helper = app(NetWorthInterface::class); + $helper = app(NetWorthInterface::class); $helper->setUser(auth()->user()); // filter accounts on having the preference for being included. @@ -98,7 +88,7 @@ class ReportController extends Controller $includeNetWorth = $accountRepository->getMetaValue($account, 'include_net_worth'); $result = null === $includeNetWorth ? true : '1' === $includeNetWorth; if (false === $result) { - Log::debug(sprintf('Will not include "%s" in net worth charts.', $account->name)); + app('log')->debug(sprintf('Will not include "%s" in net worth charts.', $account->name)); } return $result; @@ -109,19 +99,22 @@ class ReportController extends Controller while ($current < $end) { // get balances by date, grouped by currency. - $result = $helper->getNetWorthByCurrency($filtered, $current); + $result = $helper->byAccounts($filtered, $current); // loop result, add to array. /** @var array $netWorthItem */ - foreach ($result as $netWorthItem) { - $currencyId = $netWorthItem['currency']->id; - $label = $current->isoFormat((string)trans('config.month_and_day_js', [], $locale)); + foreach ($result as $key => $netWorthItem) { + if ('native' === $key) { + continue; + } + $currencyId = $netWorthItem['currency_id']; + $label = $current->isoFormat((string)trans('config.month_and_day_js', [], $locale)); if (!array_key_exists($currencyId, $chartData)) { $chartData[$currencyId] = [ - 'label' => 'Net worth in ' . $netWorthItem['currency']->name, + 'label' => 'Net worth in '.$netWorthItem['currency_name'], 'type' => 'line', - 'currency_symbol' => $netWorthItem['currency']->symbol, - 'currency_code' => $netWorthItem['currency']->code, + 'currency_symbol' => $netWorthItem['currency_symbol'], + 'currency_code' => $netWorthItem['currency_code'], 'entries' => [], ]; } @@ -130,7 +123,7 @@ class ReportController extends Controller $current->addDays(7); } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); $cache->store($data); return response()->json($data); @@ -139,17 +132,12 @@ class ReportController extends Controller /** * Shows income and expense, debit/credit: operations. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - * @throws JsonException + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function operations(Collection $accounts, Carbon $start, Carbon $end): JsonResponse { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty('chart.report.operations'); $cache->addProperty($start); $cache->addProperty($accounts); @@ -157,60 +145,46 @@ class ReportController extends Controller if ($cache->has()) { return response()->json($cache->get()); } - Log::debug('Going to do operations for accounts ', $accounts->pluck('id')->toArray()); + + app('log')->debug('Going to do operations for accounts ', $accounts->pluck('id')->toArray()); $format = app('navigation')->preferredCarbonFormat($start, $end); $titleFormat = app('navigation')->preferredCarbonLocalizedFormat($start, $end); $preferredRange = app('navigation')->preferredRangeFormat($start, $end); $ids = $accounts->pluck('id')->toArray(); + $data = []; + $chartData = []; - // get journals for entire period: - $data = []; - $chartData = [ - - ]; /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->withAccountInformation(); $collector->setXorAccounts($accounts); $collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::RECONCILIATION, TransactionType::TRANSFER]); - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); // loop. group by currency and by period. /** @var array $journal */ foreach ($journals as $journal) { - $period = $journal['date']->format($format); - $currencyId = (int)$journal['currency_id']; - $data[$currencyId] = $data[$currencyId] ?? [ + $period = $journal['date']->format($format); + $currencyId = (int)$journal['currency_id']; + $data[$currencyId] ??= [ 'currency_id' => $currencyId, 'currency_symbol' => $journal['currency_symbol'], 'currency_code' => $journal['currency_code'], 'currency_name' => $journal['currency_name'], 'currency_decimal_places' => (int)$journal['currency_decimal_places'], ]; - $data[$currencyId][$period] = $data[$currencyId][$period] ?? [ + $data[$currencyId][$period] ??= [ 'period' => $period, 'spent' => '0', 'earned' => '0', ]; // in our outgoing? - $key = 'spent'; - $amount = app('steam')->positive($journal['amount']); + $key = 'spent'; + $amount = app('steam')->positive($journal['amount']); // deposit = incoming // transfer or reconcile or opening balance, and these accounts are the destination. - if ( - TransactionType::DEPOSIT === $journal['transaction_type_type'] - || - - ( - ( - TransactionType::TRANSFER === $journal['transaction_type_type'] - || TransactionType::RECONCILIATION === $journal['transaction_type_type'] - || TransactionType::OPENING_BALANCE === $journal['transaction_type_type'] - ) - && in_array($journal['destination_account_id'], $ids, true) - ) - ) { + if (TransactionType::DEPOSIT === $journal['transaction_type_type'] || ((TransactionType::TRANSFER === $journal['transaction_type_type'] || TransactionType::RECONCILIATION === $journal['transaction_type_type'] || TransactionType::OPENING_BALANCE === $journal['transaction_type_type']) && in_array($journal['destination_account_id'], $ids, true))) { $key = 'earned'; } $data[$currencyId][$period][$key] = bcadd($data[$currencyId][$period][$key], $amount); @@ -219,7 +193,7 @@ class ReportController extends Controller // loop this data, make chart bars for each currency: /** @var array $currency */ foreach ($data as $currency) { - $income = [ + $income = [ 'label' => (string)trans('firefly.box_earned_in_currency', ['currency' => $currency['currency_name']]), 'type' => 'bar', 'backgroundColor' => 'rgba(0, 141, 76, 0.5)', // green @@ -228,7 +202,7 @@ class ReportController extends Controller 'currency_code' => $currency['currency_code'], 'entries' => [], ]; - $expense = [ + $expense = [ 'label' => (string)trans('firefly.box_spent_in_currency', ['currency' => $currency['currency_name']]), 'type' => 'bar', 'backgroundColor' => 'rgba(219, 68, 55, 0.5)', // red @@ -236,23 +210,28 @@ class ReportController extends Controller 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], 'entries' => [], - ]; // loop all possible periods between $start and $end $currentStart = clone $start; - while ($currentStart <= $end) { + $currentEnd = clone $end; + + // #8374. Sloppy fix for yearly charts. Not really interested in a better fix with v2 layout and all. + if ('1Y' === $preferredRange) { + $currentEnd = app('navigation')->endOfPeriod($currentEnd, $preferredRange); + } + while ($currentStart <= $currentEnd) { $key = $currentStart->format($format); $title = $currentStart->isoFormat($titleFormat); - $income['entries'][$title] = app('steam')->bcround(($currency[$key]['earned'] ?? '0'), $currency['currency_decimal_places']); - $expense['entries'][$title] = app('steam')->bcround(($currency[$key]['spent'] ?? '0'), $currency['currency_decimal_places']); + $income['entries'][$title] = app('steam')->bcround($currency[$key]['earned'] ?? '0', $currency['currency_decimal_places']); + $expense['entries'][$title] = app('steam')->bcround($currency[$key]['spent'] ?? '0', $currency['currency_decimal_places']); $currentStart = app('navigation')->addPeriod($currentStart, $preferredRange, 0); } - $chartData[] = $income; - $chartData[] = $expense; + $chartData[] = $income; + $chartData[] = $expense; } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); $cache->store($data); return response()->json($data); diff --git a/app/Http/Controllers/Chart/TagReportController.php b/app/Http/Controllers/Chart/TagReportController.php index 2f3b7db2dd..2d12c01539 100644 --- a/app/Http/Controllers/Chart/TagReportController.php +++ b/app/Http/Controllers/Chart/TagReportController.php @@ -49,8 +49,6 @@ class TagReportController extends Controller /** * TagReportController constructor. - * - */ public function __construct() { @@ -67,14 +65,6 @@ class TagReportController extends Controller ); } - /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function budgetExpense(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -87,7 +77,7 @@ class TagReportController extends Controller foreach ($tag['transaction_journals'] as $journal) { $objectName = $journal['budget_name'] ?? trans('firefly.no_budget'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -98,19 +88,11 @@ class TagReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function categoryExpense(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -123,7 +105,7 @@ class TagReportController extends Controller foreach ($tag['transaction_journals'] as $journal) { $objectName = $journal['category_name'] ?? trans('firefly.no_category'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -134,19 +116,11 @@ class TagReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function categoryIncome(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -159,7 +133,7 @@ class TagReportController extends Controller foreach ($tag['transaction_journals'] as $journal) { $objectName = $journal['category_name'] ?? trans('firefly.no_category'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -170,19 +144,11 @@ class TagReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function destinationExpense(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -195,7 +161,7 @@ class TagReportController extends Controller foreach ($tag['transaction_journals'] as $journal) { $objectName = $journal['destination_account_name'] ?? trans('firefly.empty'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -206,19 +172,11 @@ class TagReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function destinationIncome(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -231,7 +189,7 @@ class TagReportController extends Controller foreach ($tag['transaction_journals'] as $journal) { $objectName = $journal['destination_account_name'] ?? trans('firefly.empty'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -242,21 +200,13 @@ class TagReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } /** * Generate main tag overview chart. - * - * @param Collection $accounts - * @param Tag $tag - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - * */ public function mainChart(Collection $accounts, Tag $tag, Carbon $start, Carbon $end): JsonResponse { @@ -268,8 +218,8 @@ class TagReportController extends Controller // loop expenses. foreach ($spent as $currency) { // add things to chart Data for each currency: - $spentKey = sprintf('%d-spent', $currency['currency_id']); - $chartData[$spentKey] = $chartData[$spentKey] ?? [ + $spentKey = sprintf('%d-spent', $currency['currency_id']); + $chartData[$spentKey] ??= [ 'label' => sprintf( '%s (%s)', (string)trans('firefly.spent_in_specific_tag', ['tag' => $tag->tag]), @@ -286,7 +236,7 @@ class TagReportController extends Controller foreach ($currentTag['transaction_journals'] as $journal) { $key = $journal['date']->isoFormat($format); $amount = app('steam')->positive($journal['amount']); - $chartData[$spentKey]['entries'][$key] = $chartData[$spentKey]['entries'][$key] ?? '0'; + $chartData[$spentKey]['entries'][$key] ??= '0'; $chartData[$spentKey]['entries'][$key] = bcadd($chartData[$spentKey]['entries'][$key], $amount); } } @@ -295,8 +245,8 @@ class TagReportController extends Controller // loop income. foreach ($earned as $currency) { // add things to chart Data for each currency: - $spentKey = sprintf('%d-earned', $currency['currency_id']); - $chartData[$spentKey] = $chartData[$spentKey] ?? [ + $spentKey = sprintf('%d-earned', $currency['currency_id']); + $chartData[$spentKey] ??= [ 'label' => sprintf( '%s (%s)', (string)trans('firefly.earned_in_specific_tag', ['tag' => $tag->tag]), @@ -313,24 +263,19 @@ class TagReportController extends Controller foreach ($currentTag['transaction_journals'] as $journal) { $key = $journal['date']->isoFormat($format); $amount = app('steam')->positive($journal['amount']); - $chartData[$spentKey]['entries'][$key] = $chartData[$spentKey]['entries'][$key] ?? '0'; + $chartData[$spentKey]['entries'][$key] ??= '0'; $chartData[$spentKey]['entries'][$key] = bcadd($chartData[$spentKey]['entries'][$key], $amount); } } } - $data = $this->generator->multiSet($chartData); + $data = $this->generator->multiSet($chartData); return response()->json($data); } /** * TODO duplicate function - * - * @param Carbon $start - * @param Carbon $end - * - * @return array */ private function makeEntries(Carbon $start, Carbon $end): array { @@ -349,14 +294,6 @@ class TagReportController extends Controller return $return; } - /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function sourceExpense(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -369,7 +306,7 @@ class TagReportController extends Controller foreach ($tag['transaction_journals'] as $journal) { $objectName = $journal['source_account_name'] ?? trans('firefly.empty'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -380,19 +317,11 @@ class TagReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function sourceIncome(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -405,7 +334,7 @@ class TagReportController extends Controller foreach ($tag['transaction_journals'] as $journal) { $objectName = $journal['source_account_name'] ?? trans('firefly.empty'); $title = sprintf('%s (%s)', $objectName, $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -416,19 +345,11 @@ class TagReportController extends Controller } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function tagExpense(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -438,8 +359,8 @@ class TagReportController extends Controller foreach ($spent as $currency) { /** @var array $tag */ foreach ($currency['tags'] as $tag) { - $title = sprintf('%s (%s)', $tag['name'], $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $title = sprintf('%s (%s)', $tag['name'], $currency['currency_name']); + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -450,19 +371,11 @@ class TagReportController extends Controller } } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } - /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function tagIncome(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): JsonResponse { $result = []; @@ -472,8 +385,8 @@ class TagReportController extends Controller foreach ($earned as $currency) { /** @var array $tag */ foreach ($currency['tags'] as $tag) { - $title = sprintf('%s (%s)', $tag['name'], $currency['currency_name']); - $result[$title] = $result[$title] ?? [ + $title = sprintf('%s (%s)', $tag['name'], $currency['currency_name']); + $result[$title] ??= [ 'amount' => '0', 'currency_symbol' => $currency['currency_symbol'], 'currency_code' => $currency['currency_code'], @@ -484,7 +397,7 @@ class TagReportController extends Controller } } } - $data = $this->generator->multiCurrencyPieChart($result); + $data = $this->generator->multiCurrencyPieChart($result); return response()->json($data); } diff --git a/app/Http/Controllers/Chart/TransactionController.php b/app/Http/Controllers/Chart/TransactionController.php index ccb349fe75..d587d58024 100644 --- a/app/Http/Controllers/Chart/TransactionController.php +++ b/app/Http/Controllers/Chart/TransactionController.php @@ -50,57 +50,51 @@ class TransactionController extends Controller } /** - * @param Carbon $start - * @param Carbon $end - * * @return JsonResponse */ public function budgets(Carbon $start, Carbon $end) { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('chart.transactions.budgets'); if ($cache->has()) { return response()->json($cache->get()); } + /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end); $collector->withBudgetInformation(); $collector->setTypes([TransactionType::WITHDRAWAL]); - $result = $collector->getExtractedJournals(); - $data = []; + $result = $collector->getExtractedJournals(); + $data = []; // group by category. /** @var array $journal */ foreach ($result as $journal) { $budget = $journal['budget_name'] ?? (string)trans('firefly.no_budget'); $title = sprintf('%s (%s)', $budget, $journal['currency_symbol']); - $data[$title] = $data[$title] ?? [ + $data[$title] ??= [ 'amount' => '0', 'currency_symbol' => $journal['currency_symbol'], 'currency_code' => $journal['currency_code'], ]; $data[$title]['amount'] = bcadd($data[$title]['amount'], $journal['amount']); } - $chart = $this->generator->multiCurrencyPieChart($data); + $chart = $this->generator->multiCurrencyPieChart($data); $cache->store($chart); return response()->json($chart); } /** - * @param string $objectType - * @param Carbon $start - * @param Carbon $end - * * @return JsonResponse */ public function categories(string $objectType, Carbon $start, Carbon $end) { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty($objectType); @@ -108,6 +102,7 @@ class TransactionController extends Controller if ($cache->has()) { return response()->json($cache->get()); } + /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end); @@ -123,37 +118,33 @@ class TransactionController extends Controller $collector->setTypes([TransactionType::TRANSFER]); } - $result = $collector->getExtractedJournals(); - $data = []; + $result = $collector->getExtractedJournals(); + $data = []; // group by category. /** @var array $journal */ foreach ($result as $journal) { $category = $journal['category_name'] ?? (string)trans('firefly.no_category'); $title = sprintf('%s (%s)', $category, $journal['currency_symbol']); - $data[$title] = $data[$title] ?? [ + $data[$title] ??= [ 'amount' => '0', 'currency_symbol' => $journal['currency_symbol'], 'currency_code' => $journal['currency_code'], ]; $data[$title]['amount'] = bcadd($data[$title]['amount'], $journal['amount']); } - $chart = $this->generator->multiCurrencyPieChart($data); + $chart = $this->generator->multiCurrencyPieChart($data); $cache->store($chart); return response()->json($chart); } /** - * @param string $objectType - * @param Carbon $start - * @param Carbon $end - * * @return JsonResponse */ public function destinationAccounts(string $objectType, Carbon $start, Carbon $end) { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty($objectType); @@ -161,6 +152,7 @@ class TransactionController extends Controller if ($cache->has()) { return response()->json($cache->get()); } + /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end); @@ -176,37 +168,33 @@ class TransactionController extends Controller $collector->setTypes([TransactionType::TRANSFER]); } - $result = $collector->getExtractedJournals(); - $data = []; + $result = $collector->getExtractedJournals(); + $data = []; // group by category. /** @var array $journal */ foreach ($result as $journal) { $name = $journal['destination_account_name']; $title = sprintf('%s (%s)', $name, $journal['currency_symbol']); - $data[$title] = $data[$title] ?? [ + $data[$title] ??= [ 'amount' => '0', 'currency_symbol' => $journal['currency_symbol'], 'currency_code' => $journal['currency_code'], ]; $data[$title]['amount'] = bcadd($data[$title]['amount'], $journal['amount']); } - $chart = $this->generator->multiCurrencyPieChart($data); + $chart = $this->generator->multiCurrencyPieChart($data); $cache->store($chart); return response()->json($chart); } /** - * @param string $objectType - * @param Carbon $start - * @param Carbon $end - * * @return JsonResponse */ public function sourceAccounts(string $objectType, Carbon $start, Carbon $end) { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty($objectType); @@ -214,6 +202,7 @@ class TransactionController extends Controller if ($cache->has()) { return response()->json($cache->get()); } + /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end); @@ -229,22 +218,22 @@ class TransactionController extends Controller $collector->setTypes([TransactionType::TRANSFER]); } - $result = $collector->getExtractedJournals(); - $data = []; + $result = $collector->getExtractedJournals(); + $data = []; // group by category. /** @var array $journal */ foreach ($result as $journal) { $name = $journal['source_account_name']; $title = sprintf('%s (%s)', $name, $journal['currency_symbol']); - $data[$title] = $data[$title] ?? [ + $data[$title] ??= [ 'amount' => '0', 'currency_symbol' => $journal['currency_symbol'], 'currency_code' => $journal['currency_code'], ]; $data[$title]['amount'] = bcadd($data[$title]['amount'], $journal['amount']); } - $chart = $this->generator->multiCurrencyPieChart($data); + $chart = $this->generator->multiCurrencyPieChart($data); $cache->store($chart); return response()->json($chart); diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index f77fc7ccef..2c086c4057 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -29,19 +29,20 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; -use Route; /** * Class Controller. * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings(PHPMD.NumberOfChildren) */ abstract class Controller extends BaseController { use AuthorizesRequests; use DispatchesJobs; - use ValidatesRequests; use RequestInformation; use UserNavigation; + use ValidatesRequests; protected string $dateTimeFormat; protected string $monthAndDayFormat; @@ -50,14 +51,12 @@ abstract class Controller extends BaseController /** * Controller constructor. - * - */ public function __construct() { // is site a demo site? $isDemoSiteConfig = app('fireflyconfig')->get('is_demo_site', config('firefly.configuration.is_demo_site', false)); - $isDemoSite = $isDemoSiteConfig ? $isDemoSiteConfig->data : false; + $isDemoSite = (bool)$isDemoSiteConfig->data; app('view')->share('IS_DEMO_SITE', $isDemoSite); app('view')->share('DEMO_USERNAME', config('firefly.demo_username')); app('view')->share('DEMO_PASSWORD', config('firefly.demo_password')); @@ -67,25 +66,25 @@ abstract class Controller extends BaseController app('view')->share('featuringWebhooks', true === config('firefly.feature_flags.webhooks') && true === config('firefly.allow_webhooks')); // share custom auth guard info. - $authGuard = config('firefly.authentication_guard'); - $logoutUrl = config('firefly.custom_logout_url'); + $authGuard = config('firefly.authentication_guard'); + $logoutUrl = config('firefly.custom_logout_url'); app('view')->share('authGuard', $authGuard); app('view')->share('logoutUrl', $logoutUrl); // upload size - $maxFileSize = app('steam')->phpBytes(ini_get('upload_max_filesize')); - $maxPostSize = app('steam')->phpBytes(ini_get('post_max_size')); - $uploadSize = min($maxFileSize, $maxPostSize); + $maxFileSize = app('steam')->phpBytes((string)ini_get('upload_max_filesize')); + $maxPostSize = app('steam')->phpBytes((string)ini_get('post_max_size')); + $uploadSize = min($maxFileSize, $maxPostSize); app('view')->share('uploadSize', $uploadSize); // share is alpha, is beta - $isAlpha = false; + $isAlpha = false; if (str_contains(config('firefly.version'), 'alpha')) { $isAlpha = true; } - $isBeta = false; + $isBeta = false; if (str_contains(config('firefly.version'), 'beta')) { $isBeta = true; } @@ -95,7 +94,7 @@ abstract class Controller extends BaseController $this->middleware( function ($request, $next): mixed { - $locale = app('steam')->getLocale(); + $locale = app('steam')->getLocale(); // translations for specific strings: $this->monthFormat = (string)trans('config.month_js', [], $locale); $this->monthAndDayFormat = (string)trans('config.month_and_day_js', [], $locale); @@ -112,7 +111,7 @@ abstract class Controller extends BaseController app('view')->share('locale', $locale); app('view')->share('shownDemo', $shownDemo); app('view')->share('current_route_name', $page); - app('view')->share('original_route_name', Route::currentRouteName()); + app('view')->share('original_route_name', \Route::currentRouteName()); } app('view')->share('darkMode', $darkMode); diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php deleted file mode 100644 index 5834d3e547..0000000000 --- a/app/Http/Controllers/CurrencyController.php +++ /dev/null @@ -1,435 +0,0 @@ -. - */ -declare(strict_types=1); - -namespace FireflyIII\Http\Controllers; - -use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Http\Requests\CurrencyFormRequest; -use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; -use FireflyIII\Repositories\User\UserRepositoryInterface; -use FireflyIII\User; -use Illuminate\Contracts\View\Factory; -use Illuminate\Http\JsonResponse; -use Illuminate\Http\RedirectResponse; -use Illuminate\Http\Request; -use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; -use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; - -/** - * Class CurrencyController. - */ -class CurrencyController extends Controller -{ - protected CurrencyRepositoryInterface $repository; - protected UserRepositoryInterface $userRepository; - - /** - * CurrencyController constructor. - * - - */ - public function __construct() - { - parent::__construct(); - - $this->middleware( - function ($request, $next) { - app('view')->share('title', (string)trans('firefly.currencies')); - app('view')->share('mainTitleIcon', 'fa-usd'); - $this->repository = app(CurrencyRepositoryInterface::class); - $this->userRepository = app(UserRepositoryInterface::class); - - return $next($request); - } - ); - } - - /** - * Create a currency. - * - * @param Request $request - * - * @return Factory|RedirectResponse|Redirector|View - */ - public function create(Request $request) - { - /** @var User $user */ - $user = auth()->user(); - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - - return redirect(route('currencies.index')); - } - - $subTitleIcon = 'fa-plus'; - $subTitle = (string)trans('firefly.create_currency'); - - // put previous url in session if not redirect from store (not "create another"). - if (true !== session('currencies.create.fromStore')) { - $this->rememberPreviousUrl('currencies.create.url'); - } - $request->session()->forget('currencies.create.fromStore'); - - Log::channel('audit')->info('Create new currency.'); - - return view('currencies.create', compact('subTitleIcon', 'subTitle')); - } - - /** - * Make currency the default currency. - * - * @param Request $request - * - * @return RedirectResponse|Redirector - * @throws FireflyException - */ - public function defaultCurrency(Request $request) - { - $currencyId = (int)$request->get('id'); - if ($currencyId > 0) { - // valid currency? - $currency = $this->repository->find($currencyId); - if (null !== $currency) { - app('preferences')->set('currencyPreference', $currency->code); - app('preferences')->mark(); - Log::channel('audit')->info(sprintf('Make %s the default currency.', $currency->code)); - - $this->repository->enable($currency); - $request->session()->flash('success', (string)trans('firefly.new_default_currency', ['name' => $currency->name])); - - return redirect(route('currencies.index')); - } - } - - return redirect(route('currencies.index')); - } - - /** - * Deletes a currency. - * - * @param Request $request - * @param TransactionCurrency $currency - * - * @return Factory|RedirectResponse|Redirector|View - */ - public function delete(Request $request, TransactionCurrency $currency) - { - /** @var User $user */ - $user = auth()->user(); - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - Log::channel('audit')->info(sprintf('Tried to visit page to delete currency %s but is not site owner.', $currency->code)); - - return redirect(route('currencies.index')); - } - - if ($this->repository->currencyInUse($currency)) { - $location = $this->repository->currencyInUseAt($currency); - $message = (string)trans(sprintf('firefly.cannot_disable_currency_%s', $location), ['name' => e($currency->name)]); - $request->session()->flash('error', $message); - Log::channel('audit')->info(sprintf('Tried to visit page to delete currency %s but currency is in use.', $currency->code)); - - return redirect(route('currencies.index')); - } - - // put previous url in session - $this->rememberPreviousUrl('currencies.delete.url'); - $subTitle = (string)trans('form.delete_currency', ['name' => $currency->name]); - Log::channel('audit')->info(sprintf('Visit page to delete currency %s.', $currency->code)); - - return view('currencies.delete', compact('currency', 'subTitle')); - } - - /** - * Destroys a currency. - * - * @param Request $request - * @param TransactionCurrency $currency - * - * @return RedirectResponse|Redirector - */ - public function destroy(Request $request, TransactionCurrency $currency) - { - /** @var User $user */ - $user = auth()->user(); - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - Log::channel('audit')->info(sprintf('Tried to delete currency %s but is not site owner.', $currency->code)); - - return redirect(route('currencies.index')); - } - - if ($this->repository->currencyInUse($currency)) { - $request->session()->flash('error', (string)trans('firefly.cannot_delete_currency', ['name' => e($currency->name)])); - Log::channel('audit')->info(sprintf('Tried to delete currency %s but is in use.', $currency->code)); - - return redirect(route('currencies.index')); - } - - if ($this->repository->isFallbackCurrency($currency)) { - $request->session()->flash('error', (string)trans('firefly.cannot_delete_fallback_currency', ['name' => e($currency->name)])); - Log::channel('audit')->info(sprintf('Tried to delete currency %s but is FALLBACK.', $currency->code)); - - return redirect(route('currencies.index')); - } - - Log::channel('audit')->info(sprintf('Deleted currency %s.', $currency->code)); - $this->repository->destroy($currency); - - $request->session()->flash('success', (string)trans('firefly.deleted_currency', ['name' => $currency->name])); - - return redirect($this->getPreviousUrl('currencies.delete.url')); - } - - /** - * @param Request $request - * - * @return JsonResponse - * @throws FireflyException - */ - public function disableCurrency(Request $request): JsonResponse - { - $currencyId = (int)$request->get('id'); - $currency = $this->repository->find($currencyId); - - // valid currency? - if (null === $currency) { - return response()->json([]); - } - - app('preferences')->mark(); - - // user must be "owner" - /** @var User $user */ - $user = auth()->user(); - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - Log::channel('audit')->info(sprintf('Tried to disable currency %s but is not site owner.', $currency->code)); - return response()->json([]); - } - - // currency cannot be in use. - if ($this->repository->currencyInUse($currency)) { - $location = $this->repository->currencyInUseAt($currency); - $message = (string)trans(sprintf('firefly.cannot_disable_currency_%s', $location), ['name' => e($currency->name)]); - - $request->session()->flash('error', $message); - Log::channel('audit')->info(sprintf('Tried to disable currency %s but is in use.', $currency->code)); - return response()->json([]); - } - - // currency disabled! - $this->repository->disable($currency); - Log::channel('audit')->info(sprintf('Disabled currency %s.', $currency->code)); - - $this->repository->ensureMinimalEnabledCurrencies(); - - // extra warning - if ('EUR' === $currency->code) { - session()->flash('warning', (string)trans('firefly.disable_EUR_side_effects')); - } - - session()->flash('success', (string)trans('firefly.currency_is_now_disabled', ['name' => $currency->name])); - return response()->json([]); - } - - /** - * Edit a currency. - * - * @param Request $request - * @param TransactionCurrency $currency - * - * @return Factory|RedirectResponse|Redirector|View - */ - public function edit(Request $request, TransactionCurrency $currency) - { - /** @var User $user */ - $user = auth()->user(); - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - Log::channel('audit')->info(sprintf('Tried to edit currency %s but is not owner.', $currency->code)); - - return redirect(route('currencies.index')); - } - - $subTitleIcon = 'fa-pencil'; - $subTitle = (string)trans('breadcrumbs.edit_currency', ['name' => $currency->name]); - $currency->symbol = htmlentities($currency->symbol); - - // code to handle active-checkboxes - $hasOldInput = null !== $request->old('_token'); - $preFilled = [ - 'enabled' => $hasOldInput ? (bool)$request->old('enabled') : $currency->enabled, - ]; - - $request->session()->flash('preFilled', $preFilled); - Log::channel('audit')->info('Edit currency.', $currency->toArray()); - - // put previous url in session if not redirect from store (not "return_to_edit"). - if (true !== session('currencies.edit.fromUpdate')) { - $this->rememberPreviousUrl('currencies.edit.url'); - } - $request->session()->forget('currencies.edit.fromUpdate'); - - return view('currencies.edit', compact('currency', 'subTitle', 'subTitleIcon')); - } - - /** - * @param Request $request - * - * @return JsonResponse - */ - public function enableCurrency(Request $request): JsonResponse - { - $currencyId = (int)$request->get('id'); - if ($currencyId > 0) { - // valid currency? - $currency = $this->repository->find($currencyId); - if (null !== $currency) { - app('preferences')->mark(); - - $this->repository->enable($currency); - session()->flash('success', (string)trans('firefly.currency_is_now_enabled', ['name' => $currency->name])); - Log::channel('audit')->info(sprintf('Enabled currency %s.', $currency->code)); - } - } - - return response()->json([]); - } - - /** - * Show overview of currencies. - * - * @param Request $request - * - * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function index(Request $request) - { - /** @var User $user */ - $user = auth()->user(); - $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - $collection = $this->repository->getAll(); - $total = $collection->count(); - $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); - $currencies = new LengthAwarePaginator($collection, $total, $pageSize, $page); - $currencies->setPath(route('currencies.index')); - - $defaultCurrency = $this->repository->getCurrencyByPreference(app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR'))); - $isOwner = true; - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('info', (string)trans('firefly.ask_site_owner', ['owner' => config('firefly.site_owner')])); - $isOwner = false; - } - - return view('currencies.index', compact('currencies', 'defaultCurrency', 'isOwner')); - } - - /** - * Store new currency. - * - * @param CurrencyFormRequest $request - * - * @return $this|RedirectResponse|Redirector - */ - public function store(CurrencyFormRequest $request) - { - /** @var User $user */ - $user = auth()->user(); - $data = $request->getCurrencyData(); - if (!$this->userRepository->hasRole($user, 'owner')) { - Log::error('User ' . auth()->user()->id . ' is not admin, but tried to store a currency.'); - Log::channel('audit')->info('Tried to create (POST) currency without admin rights.', $data); - - return redirect($this->getPreviousUrl('currencies.create.url')); - } - - $data['enabled'] = true; - try { - $currency = $this->repository->store($data); - } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::channel('audit')->info('Could not store (POST) currency without admin rights.', $data); - $request->session()->flash('error', (string)trans('firefly.could_not_store_currency')); - $currency = null; - } - $redirect = redirect($this->getPreviousUrl('currencies.create.url')); - - if (null !== $currency) { - $request->session()->flash('success', (string)trans('firefly.created_currency', ['name' => $currency->name])); - Log::channel('audit')->info('Created (POST) currency.', $data); - if (1 === (int)$request->get('create_another')) { - $request->session()->put('currencies.create.fromStore', true); - - $redirect = redirect(route('currencies.create'))->withInput(); - } - } - - return $redirect; - } - - /** - * Updates a currency. - * - * @param CurrencyFormRequest $request - * @param TransactionCurrency $currency - * - * @return RedirectResponse|Redirector - */ - public function update(CurrencyFormRequest $request, TransactionCurrency $currency) - { - /** @var User $user */ - $user = auth()->user(); - $data = $request->getCurrencyData(); - - if (false === $data['enabled'] && $this->repository->currencyInUse($currency)) { - $data['enabled'] = true; - } - if (!$this->userRepository->hasRole($user, 'owner')) { - $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); - Log::channel('audit')->info('Tried to update (POST) currency without admin rights.', $data); - - return redirect(route('currencies.index')); - } - $currency = $this->repository->update($currency, $data); - Log::channel('audit')->info('Updated (POST) currency.', $data); - $request->session()->flash('success', (string)trans('firefly.updated_currency', ['name' => $currency->name])); - app('preferences')->mark(); - - if (1 === (int)$request->get('return_to_edit')) { - $request->session()->put('currencies.edit.fromUpdate', true); - - return redirect(route('currencies.edit', [$currency->id])); - } - - return redirect($this->getPreviousUrl('currencies.edit.url')); - } -} diff --git a/app/Http/Controllers/DebugController.php b/app/Http/Controllers/DebugController.php index c4fc690fe1..44116553ce 100644 --- a/app/Http/Controllers/DebugController.php +++ b/app/Http/Controllers/DebugController.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers; use Carbon\Carbon; -use DB; -use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Middleware\IsDemoUser; use FireflyIII\Models\AccountType; @@ -40,12 +38,9 @@ use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Log; use Illuminate\View\View; use Monolog\Handler\RotatingFileHandler; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class DebugController - * */ class DebugController extends Controller { @@ -53,8 +48,6 @@ class DebugController extends Controller /** * DebugController constructor. - * - */ public function __construct() { @@ -69,44 +62,45 @@ class DebugController extends Controller */ public function displayError(): void { - Log::debug('This is a test message at the DEBUG level.'); - Log::info('This is a test message at the INFO level.'); + app('log')->debug('This is a test message at the DEBUG level.'); + app('log')->info('This is a test message at the INFO level.'); Log::notice('This is a test message at the NOTICE level.'); app('log')->warning('This is a test message at the WARNING level.'); - Log::error('This is a test message at the ERROR level.'); + app('log')->error('This is a test message at the ERROR level.'); Log::critical('This is a test message at the CRITICAL level.'); Log::alert('This is a test message at the ALERT level.'); Log::emergency('This is a test message at the EMERGENCY level.'); + throw new FireflyException('A very simple test error.'); } /** * Clear log and session. * - * @param Request $request + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector * @throws FireflyException */ public function flush(Request $request) { app('preferences')->mark(); $request->session()->forget(['start', 'end', '_previous', 'viewRange', 'range', 'is_custom_range', 'temp-mfa-secret', 'temp-mfa-codes']); - Log::debug('Call cache:clear...'); + app('log')->debug('Call cache:clear...'); Artisan::call('cache:clear'); - Log::debug('Call config:clear...'); + app('log')->debug('Call config:clear...'); Artisan::call('config:clear'); - Log::debug('Call route:clear...'); + app('log')->debug('Call route:clear...'); Artisan::call('route:clear'); - Log::debug('Call twig:clean...'); + app('log')->debug('Call twig:clean...'); + try { Artisan::call('twig:clean'); - } catch (Exception $e) { // intentional generic exception + } catch (\Exception $e) { // intentional generic exception throw new FireflyException($e->getMessage(), 0, $e); } - Log::debug('Call view:clear...'); + app('log')->debug('Call view:clear...'); Artisan::call('view:clear'); return redirect(route('index')); @@ -115,19 +109,18 @@ class DebugController extends Controller /** * Show debug info. * - * @param Request $request - * * @return Factory|View + * * @throws FireflyException */ - public function index(Request $request) + public function index() { - $table = $this->generateTable(); - $table = str_replace(["\n", "\t", ' '], '', $table); - $now = now(config('app.timezone'))->format('Y-m-d H:i:s'); + $table = $this->generateTable(); + $table = str_replace(["\n", "\t", ' '], '', $table); + $now = now(config('app.timezone'))->format('Y-m-d H:i:s'); // get latest log file: - $logger = Log::driver(); + $logger = Log::driver(); // PHPstan doesn't recognize the method because of its polymorphic nature. $handlers = $logger->getHandlers(); // @phpstan-ignore-line $logContent = ''; @@ -141,15 +134,12 @@ class DebugController extends Controller } if ('' !== $logContent) { // last few lines - $logContent = 'Truncated from this point <----|' . substr($logContent, -16384); + $logContent = 'Truncated from this point <----|'.substr((string)$logContent, -16384); } return view('debug', compact('table', 'now', 'logContent')); } - /** - * @return string - */ private function generateTable(): string { // system information: @@ -161,20 +151,20 @@ class DebugController extends Controller return (string)view('partials.debug-table', compact('system', 'docker', 'app', 'user')); } - /** - * @return array - */ private function getSystemInformation(): array { - $maxFileSize = app('steam')->phpBytes(ini_get('upload_max_filesize')); - $maxPostSize = app('steam')->phpBytes(ini_get('post_max_size')); - $drivers = DB::availableDrivers(); - $currentDriver = DB::getDriverName(); + $maxFileSize = app('steam')->phpBytes((string)ini_get('upload_max_filesize')); + $maxPostSize = app('steam')->phpBytes((string)ini_get('post_max_size')); + $drivers = \DB::availableDrivers(); + $currentDriver = \DB::getDriverName(); + return [ 'db_version' => app('fireflyconfig')->get('db_version', 1)->data, 'php_version' => PHP_VERSION, 'php_os' => PHP_OS, - 'interface' => PHP_SAPI, + 'uname' => php_uname('m'), + 'interface' => \PHP_SAPI, + 'bits' => \PHP_INT_SIZE * 8, 'bcscale' => bcscale(), 'display_errors' => ini_get('display_errors'), 'error_reporting' => $this->errorReporting((int)ini_get('error_reporting')), @@ -184,9 +174,6 @@ class DebugController extends Controller ]; } - /** - * @return array - */ private function getBuildInfo(): array { $return = [ @@ -195,23 +182,25 @@ class DebugController extends Controller 'build_date' => '(unknown)', 'base_build' => '(unknown)', 'base_build_date' => '(unknown)', - ]; + try { if (file_exists('/var/www/counter-main.txt')) { - $return['build'] = trim(file_get_contents('/var/www/counter-main.txt')); + $return['build'] = trim((string)file_get_contents('/var/www/counter-main.txt')); + app('log')->debug(sprintf('build is now "%s"', $return['build'])); } - } catch (Exception $e) { // generic catch for open basedir. - Log::debug('Could not check build counter, but thats ok.'); - Log::warning($e->getMessage()); + } catch (\Exception $e) { // @phpstan-ignore-line + app('log')->debug('Could not check build counter, but thats ok.'); + app('log')->warning($e->getMessage()); } + try { if (file_exists('/var/www/build-date-main.txt')) { - $return['build_date'] = trim(file_get_contents('/var/www/build-date-main.txt')); + $return['build_date'] = trim((string)file_get_contents('/var/www/build-date-main.txt')); } - } catch (Exception $e) { // generic catch for open basedir. - Log::debug('Could not check build date, but thats ok.'); - Log::warning($e->getMessage()); + } catch (\Exception $e) { // @phpstan-ignore-line + app('log')->debug('Could not check build date, but thats ok.'); + app('log')->warning($e->getMessage()); } if ('' !== (string)env('BASE_IMAGE_BUILD')) { $return['base_build'] = env('BASE_IMAGE_BUILD'); @@ -219,15 +208,13 @@ class DebugController extends Controller if ('' !== (string)env('BASE_IMAGE_DATE')) { $return['base_build_date'] = env('BASE_IMAGE_DATE'); } + return $return; } - /** - * @return array - */ private function getAppInfo(): array { - $userGuard = config('auth.defaults.guard'); + $userGuard = config('auth.defaults.guard'); $config = app('fireflyconfig')->get('last_rt_job', 0); $lastTime = (int)$config->data; @@ -236,7 +223,7 @@ class DebugController extends Controller if ($lastTime > 0) { $carbon = Carbon::createFromTimestamp($lastTime); $lastCronjob = $carbon->format('Y-m-d H:i:s'); - $lastCronjobAgo = $carbon->locale('en')->diffForHumans(); + $lastCronjobAgo = $carbon->locale('en')->diffForHumans(); // @phpstan-ignore-line } return [ @@ -244,42 +231,37 @@ class DebugController extends Controller 'audit_log_channel' => envNonEmpty('AUDIT_LOG_CHANNEL', '(empty)'), 'default_language' => (string)config('firefly.default_language'), 'default_locale' => (string)config('firefly.default_locale'), - 'remote_header' => $userGuard === 'remote_user_guard' ? config('auth.guard_header') : 'N/A', - 'remote_mail_header' => $userGuard === 'remote_user_guard' ? config('auth.guard_email') : 'N/A', - 'stateful_domains' => join(', ', config('sanctum.stateful')), + 'remote_header' => 'remote_user_guard' === $userGuard ? config('auth.guard_header') : 'N/A', + 'remote_mail_header' => 'remote_user_guard' === $userGuard ? config('auth.guard_email') : 'N/A', + 'stateful_domains' => implode(', ', config('sanctum.stateful')), // the dates for the cron job are based on the recurring cron job's times. // any of the cron jobs will do, they always run at the same time. // but this job is the oldest, so the biggest chance it ran once - 'last_cronjob' => $lastCronjob, - 'last_cronjob_ago' => $lastCronjobAgo, + 'last_cronjob' => $lastCronjob, + 'last_cronjob_ago' => $lastCronjobAgo, ]; } - /** - * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function getuserInfo(): array { - $userFlags = $this->getUserFlags(); + $userFlags = $this->getUserFlags(); // user info - $userAgent = request()->header('user-agent'); + $userAgent = request()->header('user-agent'); // set languages, see what happens: - $original = setlocale(LC_ALL, 0); + $original = setlocale(LC_ALL, '0'); $localeAttempts = []; $parts = app('steam')->getLocaleArray(app('steam')->getLocale()); foreach ($parts as $code) { - $code = trim($code); - Log::debug(sprintf('Trying to set %s', $code)); + $code = trim($code); + app('log')->debug(sprintf('Trying to set %s', $code)); $result = setlocale(LC_ALL, $code); $localeAttempts[$code] = $result === $code; } - setlocale(LC_ALL, $original); + setlocale(LC_ALL, (string)$original); return [ 'user_id' => auth()->user()->id, @@ -293,14 +275,12 @@ class DebugController extends Controller ]; } - /** - * @return string - */ private function getUserFlags(): string { $flags = []; + /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); // has liabilities if ($user->accounts()->accountTypeIn([AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE])->count() > 0) { @@ -313,8 +293,8 @@ class DebugController extends Controller } // has stored reconciliations - $type = TransactionType::whereType(TransactionType::RECONCILIATION)->first(); - if ($user->transactionJournals()->where('transaction_type_id', $type->id)->count()) { + $type = TransactionType::whereType(TransactionType::RECONCILIATION)->first(); + if ($user->transactionJournals()->where('transaction_type_id', $type->id)->count() > 0) { $flags[] = ':ledger:'; } @@ -339,15 +319,14 @@ class DebugController extends Controller if ($user->bills()->count() > 0) { $flags[] = ':email:'; } - return join(' ', $flags); + + return implode(' ', $flags); } /** * Flash all types of messages. * - * @param Request $request - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function testFlash(Request $request) { @@ -358,5 +337,4 @@ class DebugController extends Controller return redirect(route('home')); } - } diff --git a/app/Http/Controllers/Export/IndexController.php b/app/Http/Controllers/Export/IndexController.php index 0c1e84f4a3..91da4e515e 100644 --- a/app/Http/Controllers/Export/IndexController.php +++ b/app/Http/Controllers/Export/IndexController.php @@ -30,10 +30,9 @@ use FireflyIII\Http\Middleware\IsDemoUser; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Support\Export\ExportDataGenerator; use Illuminate\Contracts\View\Factory; +use Illuminate\Http\RedirectResponse; use Illuminate\Http\Response as LaravelResponse; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class IndexController @@ -44,8 +43,6 @@ class IndexController extends Controller /** * IndexController constructor. - * - */ public function __construct() { @@ -65,13 +62,16 @@ class IndexController extends Controller } /** - * @return LaravelResponse * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ - public function export(): LaravelResponse + public function export(): LaravelResponse|RedirectResponse { + if (auth()->user()->hasRole('demo')) { + session()->flash('info', (string)trans('firefly.demo_user_export')); + + return redirect(route('export.index')); + } + /** @var ExportDataGenerator $generator */ $generator = app(ExportDataGenerator::class); $generator->setUser(auth()->user()); @@ -81,28 +81,30 @@ class IndexController extends Controller // get first transaction in DB: $firstDate = today(config('app.timezone')); $firstDate->subYear(); - $journal = $this->journalRepository->firstNull(); + $journal = $this->journalRepository->firstNull(); if (null !== $journal) { $firstDate = clone $journal->date; } $generator->setStart($firstDate); - $result = $generator->export(); + $result = $generator->export(); + + $name = sprintf('%s_transaction_export.csv', date('Y_m_d')); + $quoted = sprintf('"%s"', addcslashes($name, '"\\')); - $name = sprintf('%s_transaction_export.csv', date('Y_m_d')); - $quoted = sprintf('"%s"', addcslashes($name, '"\\')); // headers for CSV file. /** @var LaravelResponse $response */ - $response = response($result['transactions']); + $response = response($result['transactions']); $response ->header('Content-Description', 'File Transfer') ->header('Content-Type', 'text/x-csv') - ->header('Content-Disposition', 'attachment; filename=' . $quoted) - //->header('Content-Transfer-Encoding', 'binary') + ->header('Content-Disposition', 'attachment; filename='.$quoted) + // ->header('Content-Transfer-Encoding', 'binary') ->header('Connection', 'Keep-Alive') ->header('Expires', '0') ->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') ->header('Pragma', 'public') - ->header('Content-Length', strlen($result['transactions'])); + ->header('Content-Length', (string)strlen($result['transactions'])) + ; // return CSV file made from 'transactions' array. return $response; diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 90e27d3c18..cfda4df609 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -25,7 +25,6 @@ namespace FireflyIII\Http\Controllers; use Carbon\Carbon; use Carbon\Exceptions\InvalidFormatException; -use Exception; use FireflyIII\Events\RequestedVersionCheckStatus; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\GroupCollectorInterface; @@ -46,8 +45,6 @@ class HomeController extends Controller { /** * HomeController constructor. - * - */ public function __construct() { @@ -60,50 +57,58 @@ class HomeController extends Controller /** * Change index date range. * - * @param Request $request - * - * @return JsonResponse - * @throws Exception + * @throws \Exception */ public function dateRange(Request $request): JsonResponse { + $stringStart = ''; + $stringEnd = ''; + try { $stringStart = e((string)$request->get('start')); $start = Carbon::createFromFormat('Y-m-d', $stringStart); } catch (InvalidFormatException $e) { - Log::error(sprintf('Start: could not parse date string "%s" so ignore it.', $stringStart)); + app('log')->error(sprintf('Start: could not parse date string "%s" so ignore it.', $stringStart)); $start = Carbon::now()->startOfMonth(); } + try { $stringEnd = e((string)$request->get('end')); $end = Carbon::createFromFormat('Y-m-d', $stringEnd); } catch (InvalidFormatException $e) { - Log::error(sprintf('End could not parse date string "%s" so ignore it.', $stringEnd)); + app('log')->error(sprintf('End could not parse date string "%s" so ignore it.', $stringEnd)); $end = Carbon::now()->endOfMonth(); } + if (false === $start) { + $start = Carbon::now()->startOfMonth(); + } + if (false === $end) { + $end = Carbon::now()->endOfMonth(); + } + $label = $request->get('label'); $isCustomRange = false; - Log::debug('Received dateRange', ['start' => $stringStart, 'end' => $stringEnd, 'label' => $request->get('label')]); + app('log')->debug('Received dateRange', ['start' => $stringStart, 'end' => $stringEnd, 'label' => $request->get('label')]); // check if the label is "everything" or "Custom range" which will betray // a possible problem with the budgets. if ($label === (string)trans('firefly.everything') || $label === (string)trans('firefly.customRange')) { $isCustomRange = true; - Log::debug('Range is now marked as "custom".'); + app('log')->debug('Range is now marked as "custom".'); } - $diff = $start->diffInDays($end) + 1; + $diff = $start->diffInDays($end) + 1; if ($diff > 50) { $request->session()->flash('warning', (string)trans('firefly.warning_much_data', ['days' => $diff])); } $request->session()->put('is_custom_range', $isCustomRange); - Log::debug(sprintf('Set is_custom_range to %s', var_export($isCustomRange, true))); + app('log')->debug(sprintf('Set is_custom_range to %s', var_export($isCustomRange, true))); $request->session()->put('start', $start); - Log::debug(sprintf('Set start to %s', $start->format('Y-m-d H:i:s'))); + app('log')->debug(sprintf('Set start to %s', $start->format('Y-m-d H:i:s'))); $request->session()->put('end', $end); - Log::debug(sprintf('Set end to %s', $end->format('Y-m-d H:i:s'))); + app('log')->debug(sprintf('Set end to %s', $end->format('Y-m-d H:i:s'))); return response()->json(['ok' => 'ok']); } @@ -111,37 +116,37 @@ class HomeController extends Controller /** * Show index. * - * @param AccountRepositoryInterface $repository - * - * @return mixed * @throws FireflyException */ public function index(AccountRepositoryInterface $repository): mixed { - if ('v3' === config('firefly.layout')) { - return view('pwa'); - } - $types = config('firefly.accountTypesByIdentifier.asset'); - $count = $repository->count($types); + $types = config('firefly.accountTypesByIdentifier.asset'); + $count = $repository->count($types); Log::channel('audit')->info('User visits homepage.'); if (0 === $count) { return redirect(route('new-user.index')); } - $subTitle = (string)trans('firefly.welcome_back'); - $transactions = []; - $frontPage = app('preferences')->getFresh('frontPageAccounts', $repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray()); + $subTitle = (string)trans('firefly.welcome_back'); + $transactions = []; + $frontPage = app('preferences')->getFresh('frontPageAccounts', $repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray()); + $frontPageArray = $frontPage->data; + if (!is_array($frontPageArray)) { + $frontPageArray = []; + } + /** @var Carbon $start */ - $start = session('start', today(config('app.timezone'))->startOfMonth()); + $start = session('start', today(config('app.timezone'))->startOfMonth()); + /** @var Carbon $end */ - $end = session('end', today(config('app.timezone'))->endOfMonth()); - $accounts = $repository->getAccountsById($frontPage->data); - $today = today(config('app.timezone')); + $end = session('end', today(config('app.timezone'))->endOfMonth()); + $accounts = $repository->getAccountsById($frontPageArray); + $today = today(config('app.timezone')); // sort frontpage accounts by order - $accounts = $accounts->sortBy('order'); + $accounts = $accounts->sortBy('order'); - Log::debug('Frontpage accounts are ', $frontPage->data); + app('log')->debug('Frontpage accounts are ', $frontPageArray); /** @var BillRepositoryInterface $billRepository */ $billRepository = app(BillRepositoryInterface::class); @@ -149,14 +154,14 @@ class HomeController extends Controller // collect groups for each transaction. foreach ($accounts as $account) { /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts(new Collection([$account]))->withAccountInformation()->setRange($start, $end)->setLimit(10)->setPage(1); $set = $collector->getExtractedJournals(); $transactions[] = ['transactions' => $set, 'account' => $account]; } /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); event(new RequestedVersionCheckStatus($user)); return view('index', compact('count', 'subTitle', 'transactions', 'billCount', 'start', 'end', 'today')); diff --git a/app/Http/Controllers/JavascriptController.php b/app/Http/Controllers/JavascriptController.php index bdb002df78..f7068f2751 100644 --- a/app/Http/Controllers/JavascriptController.php +++ b/app/Http/Controllers/JavascriptController.php @@ -29,13 +29,10 @@ use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Controllers\GetConfigurationData; use Illuminate\Http\Request; use Illuminate\Http\Response; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class JavascriptController. @@ -46,23 +43,14 @@ class JavascriptController extends Controller /** * Show info about accounts. - * - * @param AccountRepositoryInterface $repository - * @param CurrencyRepositoryInterface $currencyRepository - * - * @return Response - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ - public function accounts(AccountRepositoryInterface $repository, CurrencyRepositoryInterface $currencyRepository): Response + public function accounts(AccountRepositoryInterface $repository): Response { - $accounts = $repository->getAccountsByType( + $accounts = $repository->getAccountsByType( [AccountType::DEFAULT, AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD] ); - $preference = app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR')); - $default = $currencyRepository->findByCodeNull((string)$preference->data); - - $data = ['accounts' => []]; + $default = app('amount')->getDefaultCurrency(); + $data = ['accounts' => []]; /** @var Account $account */ foreach ($accounts as $account) { @@ -75,20 +63,18 @@ class JavascriptController extends Controller return response() ->view('javascript.accounts', $data) - ->header('Content-Type', 'text/javascript'); + ->header('Content-Type', 'text/javascript') + ; } /** * Get info about currencies. - * - * @param CurrencyRepositoryInterface $repository - * - * @return Response */ public function currencies(CurrencyRepositoryInterface $repository): Response { $currencies = $repository->get(); $data = ['currencies' => []]; + /** @var TransactionCurrency $currency */ foreach ($currencies as $currency) { $currencyId = $currency->id; @@ -98,26 +84,19 @@ class JavascriptController extends Controller return response() ->view('javascript.currencies', $data) - ->header('Content-Type', 'text/javascript'); + ->header('Content-Type', 'text/javascript') + ; } /** * Show some common variables to be used in scripts. * - * @param Request $request - * @param AccountRepositoryInterface $repository - * @param CurrencyRepositoryInterface $currencyRepository - * - * @return Response * @throws FireflyException - * @throws JsonException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function variables(Request $request, AccountRepositoryInterface $repository, CurrencyRepositoryInterface $currencyRepository): Response + * */ + public function variables(Request $request, AccountRepositoryInterface $repository): Response { - $account = $repository->find((int)$request->get('account')); - $currency = app('amount')->getDefaultCurrency(); + $account = $repository->find((int)$request->get('account')); + $currency = app('amount')->getDefaultCurrency(); if (null !== $account) { $currency = $repository->getAccountCurrency($account) ?? $currency; } @@ -129,7 +108,7 @@ class JavascriptController extends Controller $dateRange = $this->getDateRangeConfig(); $uid = substr(hash('sha256', sprintf('%s-%s-%s', (string)config('app.key'), auth()->user()->id, auth()->user()->email)), 0, 12); - $data = [ + $data = [ 'currencyCode' => $currency->code, 'currencySymbol' => $currency->symbol, 'accountingLocaleInfo' => $accounting, @@ -143,30 +122,29 @@ class JavascriptController extends Controller return response() ->view('javascript.variables', $data) - ->header('Content-Type', 'text/javascript'); + ->header('Content-Type', 'text/javascript') + ; } /** * Bit of a hack but OK. - * - * @param Request $request - * - * @return Response */ - public function variablesV2(Request $request): Response + public function variablesV2(): Response { /** @var Carbon $start */ $start = clone session('start', today(config('app.timezone'))->startOfMonth()); - /** @var Carbon $end */ - $end = clone session('end', today(config('app.timezone'))->endOfMonth()); - $data = [ + /** @var Carbon $end */ + $end = clone session('end', today(config('app.timezone'))->endOfMonth()); + + $data = [ 'start' => $start->format('Y-m-d'), 'end' => $end->format('Y-m-d'), ]; return response() ->view('v2.javascript.variables', $data) - ->header('Content-Type', 'text/javascript'); + ->header('Content-Type', 'text/javascript') + ; } } diff --git a/app/Http/Controllers/Json/AutoCompleteController.php b/app/Http/Controllers/Json/AutoCompleteController.php index f77c76c8e2..b749d626ad 100644 --- a/app/Http/Controllers/Json/AutoCompleteController.php +++ b/app/Http/Controllers/Json/AutoCompleteController.php @@ -28,6 +28,4 @@ use FireflyIII\Http\Controllers\Controller; /** * Class AutoCompleteController. */ -class AutoCompleteController extends Controller -{ -} +class AutoCompleteController extends Controller {} diff --git a/app/Http/Controllers/Json/BoxController.php b/app/Http/Controllers/Json/BoxController.php index c47451fa71..9b29489e83 100644 --- a/app/Http/Controllers/Json/BoxController.php +++ b/app/Http/Controllers/Json/BoxController.php @@ -30,62 +30,67 @@ use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Models\AvailableBudget; -use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; +use FireflyIII\Support\Http\Controllers\DateCalculation; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Log; /** * Class BoxController. */ class BoxController extends Controller { + use DateCalculation; + /** * This box has three types of info to display: * 0) If the user has available amount this period and has overspent: overspent box. * 1) If the user has available amount this period and has NOT overspent: left to spend box. * 2) if the user has no available amount set this period: spent per day * - * @return JsonResponse + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function available(): JsonResponse { app('log')->debug('Now in available()'); - /** @var OperationsRepositoryInterface $opsRepository */ - $opsRepository = app(OperationsRepositoryInterface::class); - /** @var AvailableBudgetRepositoryInterface $abRepository */ - $abRepository = app(AvailableBudgetRepositoryInterface::class); - $abRepository->cleanup(); - /** @var Carbon $start */ - $start = session('start', today(config('app.timezone'))->startOfMonth()); - /** @var Carbon $end */ - $end = session('end', today(config('app.timezone'))->endOfMonth()); - $today = today(config('app.timezone')); - $display = 2; // see method docs. - $boxTitle = (string)trans('firefly.spent'); - $cache = new CacheProperties(); + /** @var OperationsRepositoryInterface $opsRepository */ + $opsRepository = app(OperationsRepositoryInterface::class); + + /** @var AvailableBudgetRepositoryInterface $abRepository */ + $abRepository = app(AvailableBudgetRepositoryInterface::class); + $abRepository->cleanup(); + + /** @var Carbon $start */ + $start = session('start', today(config('app.timezone'))->startOfMonth()); + + /** @var Carbon $end */ + $end = session('end', today(config('app.timezone'))->endOfMonth()); + $today = today(config('app.timezone')); + $display = 2; // see method docs. + $boxTitle = (string)trans('firefly.spent'); + + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty($today); $cache->addProperty('box-available'); if ($cache->has()) { - //return response()->json($cache->get()); + return response()->json($cache->get()); } $leftPerDayAmount = '0'; $leftToSpendAmount = '0'; - $currency = app('amount')->getDefaultCurrency(); + $currency = app('amount')->getDefaultCurrency(); app('log')->debug(sprintf('Default currency is %s', $currency->code)); - $availableBudgets = $abRepository->getAvailableBudgetsByExactDate($start, $end); + $availableBudgets = $abRepository->getAvailableBudgetsByExactDate($start, $end); app('log')->debug(sprintf('Found %d available budget(s)', $availableBudgets->count())); - $availableBudgets = $availableBudgets->filter( - static function (AvailableBudget $availableBudget) use ($currency) { + $availableBudgets = $availableBudgets->filter( + static function (AvailableBudget $availableBudget) use ($currency) { // @phpstan-ignore-line if ($availableBudget->transaction_currency_id === $currency->id) { app('log')->debug(sprintf( 'Will include AB #%d: from %s-%s amount %s', @@ -94,6 +99,7 @@ class BoxController extends Controller $availableBudget->end_date->format('Y-m-d'), $availableBudget->amount )); + return $availableBudget; } @@ -103,13 +109,13 @@ class BoxController extends Controller app('log')->debug(sprintf('Filtered back to %d available budgets', $availableBudgets->count())); // spent in this period, in budgets, for default currency. // also calculate spent per day. - $spent = $opsRepository->sumExpenses($start, $end, null, null, $currency); - $spentAmount = $spent[(int)$currency->id]['sum'] ?? '0'; + $spent = $opsRepository->sumExpenses($start, $end, null, null, $currency); + $spentAmount = $spent[$currency->id]['sum'] ?? '0'; app('log')->debug(sprintf('Spent for default currency for all budgets in this period: %s', $spentAmount)); - $days = $today->between($start, $end) ? $today->diffInDays($start) + 1 : $end->diffInDays($start) + 1; + $days = $today->between($start, $end) ? $today->diffInDays($start) + 1 : $end->diffInDays($start) + 1; app('log')->debug(sprintf('Number of days left: %d', $days)); - $spentPerDay = bcdiv($spentAmount, (string)$days); + $spentPerDay = bcdiv($spentAmount, (string)$days); app('log')->debug(sprintf('Available to spend per day: %s', $spentPerDay)); if ($availableBudgets->count() > 0) { $display = 0; // assume user overspent @@ -119,17 +125,17 @@ class BoxController extends Controller // calculate with available budget. $leftToSpendAmount = bcadd($totalAvailableSum, $spentAmount); app('log')->debug(sprintf('So left to spend is %s', $leftToSpendAmount)); - if (1 === bccomp($leftToSpendAmount, '0')) { - app('log')->debug(sprintf('Left to spend is positive!')); + if (bccomp($leftToSpendAmount, '0') >= 0) { + app('log')->debug('Left to spend is positive or zero!'); $boxTitle = (string)trans('firefly.left_to_spend'); - $days = $today->diffInDays($end) + 1; - $display = 1; // not overspent - $leftPerDayAmount = bcdiv($leftToSpendAmount, (string)$days); + $activeDaysLeft = $this->activeDaysLeft($start, $end); // see method description. + $display = 1; // not overspent + $leftPerDayAmount = bcdiv($leftToSpendAmount, (string)$activeDaysLeft); app('log')->debug(sprintf('Left to spend per day is %s', $leftPerDayAmount)); } } - $return = [ + $return = [ 'display' => $display, 'spent_total' => app('amount')->formatAnything($currency, $spentAmount, false), 'spent_per_day' => app('amount')->formatAnything($currency, $spentPerDay, false), @@ -141,24 +147,22 @@ class BoxController extends Controller $cache->store($return); app('log')->debug('Now done with available()'); + return response()->json($return); } /** * Current total balance. - * - * @param CurrencyRepositoryInterface $repository - * - * @return JsonResponse */ public function balance(CurrencyRepositoryInterface $repository): JsonResponse { // Cache result, return cache if present. /** @var Carbon $start */ - $start = session('start', today(config('app.timezone'))->startOfMonth()); + $start = session('start', today(config('app.timezone'))->startOfMonth()); + /** @var Carbon $end */ - $end = session('end', today(config('app.timezone'))->endOfMonth()); - $cache = new CacheProperties(); + $end = session('end', today(config('app.timezone'))->endOfMonth()); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('box-balance'); @@ -166,24 +170,26 @@ class BoxController extends Controller return response()->json($cache->get()); } // prep some arrays: - $incomes = []; - $expenses = []; - $sums = []; - $currency = app('amount')->getDefaultCurrency(); + $incomes = []; + $expenses = []; + $sums = []; + $currency = app('amount')->getDefaultCurrency(); // collect income of user: /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end) - ->setTypes([TransactionType::DEPOSIT]); - $set = $collector->getExtractedJournals(); + ->setTypes([TransactionType::DEPOSIT]) + ; + $set = $collector->getExtractedJournals(); + /** @var array $journal */ foreach ($set as $journal) { $currencyId = (int)$journal['currency_id']; $amount = $journal['amount'] ?? '0'; - $incomes[$currencyId] = $incomes[$currencyId] ?? '0'; + $incomes[$currencyId] ??= '0'; $incomes[$currencyId] = bcadd($incomes[$currencyId], app('steam')->positive($amount)); - $sums[$currencyId] = $sums[$currencyId] ?? '0'; + $sums[$currencyId] ??= '0'; $sums[$currencyId] = bcadd($sums[$currencyId], app('steam')->positive($amount)); } @@ -191,19 +197,21 @@ class BoxController extends Controller /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end) - ->setTypes([TransactionType::WITHDRAWAL]); - $set = $collector->getExtractedJournals(); + ->setTypes([TransactionType::WITHDRAWAL]) + ; + $set = $collector->getExtractedJournals(); + /** @var array $journal */ foreach ($set as $journal) { $currencyId = (int)$journal['currency_id']; - $expenses[$currencyId] = $expenses[$currencyId] ?? '0'; + $expenses[$currencyId] ??= '0'; $expenses[$currencyId] = bcadd($expenses[$currencyId], $journal['amount'] ?? '0'); - $sums[$currencyId] = $sums[$currencyId] ?? '0'; + $sums[$currencyId] ??= '0'; $sums[$currencyId] = bcadd($sums[$currencyId], $journal['amount']); } // format amounts: - $keys = array_keys($sums); + $keys = array_keys($sums); foreach ($keys as $currencyId) { $currency = $repository->find($currencyId); $sums[$currencyId] = app('amount')->formatAnything($currency, $sums[$currencyId], false); @@ -217,7 +225,7 @@ class BoxController extends Controller $expenses[$currency->id] = app('amount')->formatAnything($currency, '0', false); } - $response = [ + $response = [ 'incomes' => $incomes, 'expenses' => $expenses, 'sums' => $sums, @@ -231,12 +239,10 @@ class BoxController extends Controller /** * Total user net worth. - * - * @return JsonResponse */ public function netWorth(): JsonResponse { - $date = today(config('app.timezone'))->endOfDay(); + $date = today(config('app.timezone'))->endOfDay(); // start and end in the future? use $end if ($this->notInSessionRange($date)) { @@ -245,7 +251,7 @@ class BoxController extends Controller } /** @var NetWorthInterface $netWorthHelper */ - $netWorthHelper = app(NetWorthInterface::class); + $netWorthHelper = app(NetWorthInterface::class); $netWorthHelper->setUser(auth()->user()); /** @var AccountRepositoryInterface $accountRepository */ @@ -253,29 +259,30 @@ class BoxController extends Controller $allAccounts = $accountRepository->getActiveAccountsByType( [AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE] ); - Log::debug(sprintf('Found %d accounts.', $allAccounts->count())); + app('log')->debug(sprintf('Found %d accounts.', $allAccounts->count())); // filter list on preference of being included. - $filtered = $allAccounts->filter( - function (Account $account) use ($accountRepository) { + $filtered = $allAccounts->filter( + static function (Account $account) use ($accountRepository) { $includeNetWorth = $accountRepository->getMetaValue($account, 'include_net_worth'); $result = null === $includeNetWorth ? true : '1' === $includeNetWorth; if (false === $result) { - Log::debug(sprintf('Will not include "%s" in net worth charts.', $account->name)); + app('log')->debug(sprintf('Will not include "%s" in net worth charts.', $account->name)); } return $result; } ); - $netWorthSet = $netWorthHelper->getNetWorthByCurrency($filtered, $date); - $return = []; - foreach ($netWorthSet as $data) { - /** @var TransactionCurrency $currency */ - $currency = $data['currency']; - $return[$currency->id] = app('amount')->formatAnything($currency, $data['balance'], false); + $netWorthSet = $netWorthHelper->byAccounts($filtered, $date); + $return = []; + foreach ($netWorthSet as $key => $data) { + if ('native' === $key) { + continue; + } + $return[$data['currency_id']] = app('amount')->formatFlat($data['currency_symbol'], $data['currency_decimal_places'], $data['balance'], false); } - $return = [ + $return = [ 'net_worths' => array_values($return), ]; diff --git a/app/Http/Controllers/Json/BudgetController.php b/app/Http/Controllers/Json/BudgetController.php index bbad8baef0..10479402f3 100644 --- a/app/Http/Controllers/Json/BudgetController.php +++ b/app/Http/Controllers/Json/BudgetController.php @@ -46,8 +46,6 @@ class BudgetController extends Controller /** * IndexController constructor. - * - */ public function __construct() { @@ -67,13 +65,6 @@ class BudgetController extends Controller ); } - /** - * @param TransactionCurrency $currency - * @param Carbon $start - * @param Carbon $end - * - * @return JsonResponse - */ public function getBudgetInformation(TransactionCurrency $currency, Carbon $start, Carbon $end): JsonResponse { $budgeted = $this->blRepository->budgeted($start, $end, $currency); diff --git a/app/Http/Controllers/Json/FrontpageController.php b/app/Http/Controllers/Json/FrontpageController.php index 3ae35b987e..372ee79425 100644 --- a/app/Http/Controllers/Json/FrontpageController.php +++ b/app/Http/Controllers/Json/FrontpageController.php @@ -28,8 +28,6 @@ use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\PiggyBank; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class FrontpageController. @@ -39,26 +37,24 @@ class FrontpageController extends Controller /** * Piggy bank pie chart. * - * @param PiggyBankRepositoryInterface $repository - * - * @return JsonResponse * @throws FireflyException */ public function piggyBanks(PiggyBankRepositoryInterface $repository): JsonResponse { $set = $repository->getPiggyBanks(); $info = []; + /** @var PiggyBank $piggyBank */ foreach ($set as $piggyBank) { $amount = $repository->getCurrentAmount($piggyBank); if (1 === bccomp($amount, '0')) { // percentage! - $pct = 0; + $pct = 0; if (0 !== bccomp($piggyBank->targetamount, '0')) { $pct = (int)bcmul(bcdiv($amount, $piggyBank->targetamount), '100'); } - $entry = [ + $entry = [ 'id' => $piggyBank->id, 'name' => $piggyBank->name, 'amount' => $amount, @@ -73,10 +69,11 @@ class FrontpageController extends Controller if (0 !== count($info)) { try { $html = view('json.piggy-banks', compact('info'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render json.piggy-banks: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render json.piggy-banks: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $html = 'Could not render view.'; + throw new FireflyException($html, 0, $e); } } diff --git a/app/Http/Controllers/Json/IntroController.php b/app/Http/Controllers/Json/IntroController.php index 7b98747d9c..741455cf9e 100644 --- a/app/Http/Controllers/Json/IntroController.php +++ b/app/Http/Controllers/Json/IntroController.php @@ -27,7 +27,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Support\Http\Controllers\GetConfigurationData; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Log; /** * Class IntroController. @@ -38,20 +37,15 @@ class IntroController extends Controller /** * Returns the introduction wizard for a page. - * - * @param string $route - * @param string|null $specificPage - * - * @return JsonResponse */ public function getIntroSteps(string $route, string $specificPage = null): JsonResponse { - Log::debug(sprintf('getIntroSteps for route "%s" and page "%s"', $route, $specificPage)); - $specificPage = $specificPage ?? ''; + app('log')->debug(sprintf('getIntroSteps for route "%s" and page "%s"', $route, $specificPage)); + $specificPage ??= ''; $steps = $this->getBasicSteps($route); $specificSteps = $this->getSpecificSteps($route, $specificPage); if (0 === count($specificSteps)) { - Log::debug(sprintf('No specific steps for route "%s" and page "%s"', $route, $specificPage)); + app('log')->debug(sprintf('No specific steps for route "%s" and page "%s"', $route, $specificPage)); return response()->json($steps); } @@ -61,8 +55,8 @@ class IntroController extends Controller // remove last step: array_pop($steps); // merge arrays and add last step again - $steps = array_merge($steps, $specificSteps); - $steps[] = $lastStep; + $steps = array_merge($steps, $specificSteps); + $steps[] = $lastStep; } if (!$this->hasOutroStep($route)) { $steps = array_merge($steps, $specificSteps); @@ -73,25 +67,21 @@ class IntroController extends Controller /** * Returns true if there is a general outro step. - * - * @param string $route - * - * @return bool */ public function hasOutroStep(string $route): bool { $routeKey = str_replace('.', '_', $route); - Log::debug(sprintf('Has outro step for route %s', $routeKey)); + app('log')->debug(sprintf('Has outro step for route %s', $routeKey)); $elements = config(sprintf('intro.%s', $routeKey)); if (!is_array($elements)) { return false; } - $hasStep = array_key_exists('outro', $elements); + $hasStep = array_key_exists('outro', $elements); - Log::debug('Elements is array', $elements); - Log::debug('Keys is', array_keys($elements)); - Log::debug(sprintf('Keys has "outro": %s', var_export($hasStep, true))); + app('log')->debug('Elements is array', $elements); + app('log')->debug('Keys is', array_keys($elements)); + app('log')->debug(sprintf('Keys has "outro": %s', var_export($hasStep, true))); return $hasStep; } @@ -99,21 +89,17 @@ class IntroController extends Controller /** * Enable the boxes for a specific page again. * - * @param string $route - * @param string|null $specialPage - * - * @return JsonResponse * @throws FireflyException */ public function postEnable(string $route, string $specialPage = null): JsonResponse { - $specialPage = $specialPage ?? ''; - $route = str_replace('.', '_', $route); - $key = 'shown_demo_' . $route; + $specialPage ??= ''; + $route = str_replace('.', '_', $route); + $key = 'shown_demo_'.$route; if ('' !== $specialPage) { - $key .= '_' . $specialPage; + $key .= '_'.$specialPage; } - Log::debug(sprintf('Going to mark the following route as NOT done: %s with special "%s" (%s)', $route, $specialPage, $key)); + app('log')->debug(sprintf('Going to mark the following route as NOT done: %s with special "%s" (%s)', $route, $specialPage, $key)); app('preferences')->set($key, false); app('preferences')->mark(); @@ -123,20 +109,16 @@ class IntroController extends Controller /** * Set that you saw them. * - * @param string $route - * @param string|null $specialPage - * - * @return JsonResponse * @throws FireflyException */ public function postFinished(string $route, string $specialPage = null): JsonResponse { - $specialPage = $specialPage ?? ''; - $key = 'shown_demo_' . $route; + $specialPage ??= ''; + $key = 'shown_demo_'.$route; if ('' !== $specialPage) { - $key .= '_' . $specialPage; + $key .= '_'.$specialPage; } - Log::debug(sprintf('Going to mark the following route as done: %s with special "%s" (%s)', $route, $specialPage, $key)); + app('log')->debug(sprintf('Going to mark the following route as done: %s with special "%s" (%s)', $route, $specialPage, $key)); app('preferences')->set($key, true); return response()->json(['result' => sprintf('Reported demo watched for route "%s" (%s): %s.', $route, $specialPage, $key)]); diff --git a/app/Http/Controllers/Json/ReconcileController.php b/app/Http/Controllers/Json/ReconcileController.php index d9d2bc1136..51cbdb743e 100644 --- a/app/Http/Controllers/Json/ReconcileController.php +++ b/app/Http/Controllers/Json/ReconcileController.php @@ -34,12 +34,8 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; -use Throwable; /** - * * Class ReconcileController */ class ReconcileController extends Controller @@ -48,8 +44,6 @@ class ReconcileController extends Controller /** * ReconcileController constructor. - * - */ public function __construct() { @@ -70,14 +64,7 @@ class ReconcileController extends Controller /** * Overview of reconciliation. * - * @param Request $request - * @param Account|null $account - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return JsonResponse * @throws FireflyException - * @throws JsonException */ public function overview(Request $request, Account $account = null, Carbon $start = null, Carbon $end = null): JsonResponse { @@ -100,29 +87,30 @@ class ReconcileController extends Controller $clearedJournals = []; $clearedIds = $request->get('cleared') ?? []; $journals = []; - /* Collect all submitted journals */ + // Collect all submitted journals if (count($selectedIds) > 0) { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setJournalIds($selectedIds); - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); } - /* Collect all journals already reconciled */ + // Collect all journals already reconciled if (count($clearedIds) > 0) { /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setJournalIds($clearedIds); $clearedJournals = $collector->getExtractedJournals(); } - Log::debug('Start transaction loop'); + app('log')->debug('Start transaction loop'); + /** @var array $journal */ foreach ($journals as $journal) { $amount = $this->processJournal($account, $accountCurrency, $journal, $amount); } - Log::debug(sprintf('Final amount is %s', $amount)); - Log::debug('End transaction loop'); + app('log')->debug(sprintf('Final amount is %s', $amount)); + app('log')->debug('End transaction loop'); /** @var array $journal */ foreach ($clearedJournals as $journal) { @@ -130,11 +118,11 @@ class ReconcileController extends Controller $clearedAmount = $this->processJournal($account, $accountCurrency, $journal, $clearedAmount); } } - $difference = bcadd(bcadd(bcsub($startBalance, $endBalance), $clearedAmount), $amount); - $diffCompare = bccomp($difference, '0'); - $countCleared = count($clearedJournals); + $difference = bcadd(bcadd(bcsub($startBalance, $endBalance), $clearedAmount), $amount); + $diffCompare = bccomp($difference, '0'); + $countCleared = count($clearedJournals); - $reconSum = bcadd(bcadd($startBalance, $amount), $clearedAmount); + $reconSum = bcadd(bcadd($startBalance, $amount), $clearedAmount); try { $view = view( @@ -155,14 +143,15 @@ class ReconcileController extends Controller 'selectedIds' ) )->render(); - } catch (Throwable $e) { - Log::debug(sprintf('View error: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->debug(sprintf('View error: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $view = sprintf('Could not render accounts.reconcile.overview: %s', $e->getMessage()); + throw new FireflyException($view, 0, $e); } - $return = [ + $return = [ 'post_url' => $route, 'html' => $view, ]; @@ -171,17 +160,64 @@ class ReconcileController extends Controller } /** - * @param Account $account - * @param TransactionCurrency $currency - * @param array $journal - * @param string $amount + * Returns a list of transactions in a modal. * - * @return string + * @return JsonResponse + * + * @throws FireflyException */ + public function transactions(Account $account, Carbon $start = null, Carbon $end = null) + { + if (null === $start || null === $end) { + throw new FireflyException('Invalid dates submitted.'); + } + if ($end->lt($start)) { + [$end, $start] = [$start, $end]; + } + $startDate = clone $start; + $startDate->subDay(); + + $currency = $this->accountRepos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency(); + $startBalance = app('steam')->bcround(app('steam')->balance($account, $startDate), $currency->decimal_places); + $endBalance = app('steam')->bcround(app('steam')->balance($account, $end), $currency->decimal_places); + + // get the transactions + $selectionStart = clone $start; + $selectionStart->subDays(3); + $selectionEnd = clone $end; + $selectionEnd->addDays(3); + + // grab transactions: + /** @var GroupCollectorInterface $collector */ + $collector = app(GroupCollectorInterface::class); + + $collector->setAccounts(new Collection([$account])) + ->setRange($selectionStart, $selectionEnd) + ->withBudgetInformation()->withCategoryInformation()->withAccountInformation() + ; + $array = $collector->getExtractedJournals(); + $journals = $this->processTransactions($account, $array); + + try { + $html = view( + 'accounts.reconcile.transactions', + compact('account', 'journals', 'currency', 'start', 'end', 'selectionStart', 'selectionEnd') + )->render(); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); + $html = sprintf('Could not render accounts.reconcile.transactions: %s', $e->getMessage()); + + throw new FireflyException($html, 0, $e); + } + + return response()->json(['html' => $html, 'startBalance' => $startBalance, 'endBalance' => $endBalance]); + } + private function processJournal(Account $account, TransactionCurrency $currency, array $journal, string $amount): string { - $toAdd = '0'; - Log::debug(sprintf('User submitted %s #%d: "%s"', $journal['transaction_type_type'], $journal['transaction_journal_id'], $journal['description'])); + $toAdd = '0'; + app('log')->debug(sprintf('User submitted %s #%d: "%s"', $journal['transaction_type_type'], $journal['transaction_journal_id'], $journal['description'])); // not much magic below we need to cover using tests. @@ -202,85 +238,23 @@ class ReconcileController extends Controller } } - - Log::debug(sprintf('Going to add %s to %s', $toAdd, $amount)); + app('log')->debug(sprintf('Going to add %s to %s', $toAdd, $amount)); $amount = bcadd($amount, $toAdd); - Log::debug(sprintf('Result is %s', $amount)); + app('log')->debug(sprintf('Result is %s', $amount)); return $amount; } - /** - * Returns a list of transactions in a modal. - * - * @param Account $account - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return JsonResponse - * @throws FireflyException - * @throws JsonException - */ - public function transactions(Account $account, Carbon $start = null, Carbon $end = null) - { - if (null === $start || null === $end) { - throw new FireflyException('Invalid dates submitted.'); - } - if ($end->lt($start)) { - [$end, $start] = [$start, $end]; - } - $startDate = clone $start; - $startDate->subDay(); - - $currency = $this->accountRepos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency(); - $startBalance = app('steam')->bcround(app('steam')->balance($account, $startDate), $currency->decimal_places); - $endBalance = app('steam')->bcround(app('steam')->balance($account, $end), $currency->decimal_places); - - // get the transactions - $selectionStart = clone $start; - $selectionStart->subDays(3); - $selectionEnd = clone $end; - $selectionEnd->addDays(3); - - // grab transactions: - /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); - - $collector->setAccounts(new Collection([$account])) - ->setRange($selectionStart, $selectionEnd) - ->withBudgetInformation()->withCategoryInformation()->withAccountInformation(); - $array = $collector->getExtractedJournals(); - $journals = $this->processTransactions($account, $array); - - try { - $html = view( - 'accounts.reconcile.transactions', - compact('account', 'journals', 'currency', 'start', 'end', 'selectionStart', 'selectionEnd') - )->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); - $html = sprintf('Could not render accounts.reconcile.transactions: %s', $e->getMessage()); - throw new FireflyException($html, 0, $e); - } - - return response()->json(['html' => $html, 'startBalance' => $startBalance, 'endBalance' => $endBalance]); - } - /** * "fix" amounts to make it easier on the reconciliation overview: - * - * @param Account $account - * @param array $array - * - * @return array */ private function processTransactions(Account $account, array $array): array { $journals = []; + /** @var array $journal */ foreach ($array as $journal) { - $inverse = false; + $inverse = false; if (TransactionType::DEPOSIT === $journal['transaction_type_type']) { $inverse = true; @@ -303,7 +277,6 @@ class ReconcileController extends Controller } } - $journals[] = $journal; } diff --git a/app/Http/Controllers/Json/RecurrenceController.php b/app/Http/Controllers/Json/RecurrenceController.php index f7dbd0678d..6bd19c6013 100644 --- a/app/Http/Controllers/Json/RecurrenceController.php +++ b/app/Http/Controllers/Json/RecurrenceController.php @@ -31,7 +31,6 @@ use FireflyIII\Models\RecurrenceRepetition; use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; /** * Class RecurrenceController @@ -42,8 +41,6 @@ class RecurrenceController extends Controller /** * RecurrenceController constructor. - * - */ public function __construct() { @@ -62,24 +59,32 @@ class RecurrenceController extends Controller /** * Shows all events for a repetition. Used in calendar. * - * @param Request $request - * - * @return JsonResponse + * @SuppressWarnings(PHPMD.NPathComplexity) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) * * @throws FireflyException */ public function events(Request $request): JsonResponse { - $occurrences = []; - $return = []; - $start = Carbon::createFromFormat('Y-m-d', $request->get('start')); - $end = Carbon::createFromFormat('Y-m-d', $request->get('end')); - $firstDate = Carbon::createFromFormat('Y-m-d', $request->get('first_date')); - $endDate = '' !== (string)$request->get('end_date') ? Carbon::createFromFormat('Y-m-d', $request->get('end_date')) : null; - $endsAt = (string)$request->get('ends'); - $repetitionType = explode(',', $request->get('type'))[0]; - $repetitions = (int)$request->get('reps'); - $repetitionMoment = ''; + $occurrences = []; + $return = []; + $start = Carbon::createFromFormat('Y-m-d', $request->get('start')); + $end = Carbon::createFromFormat('Y-m-d', $request->get('end')); + $firstDate = Carbon::createFromFormat('Y-m-d', $request->get('first_date')); + $endDate = '' !== (string)$request->get('end_date') ? Carbon::createFromFormat('Y-m-d', $request->get('end_date')) : null; + $endsAt = (string)$request->get('ends'); + $repetitionType = explode(',', $request->get('type'))[0]; + $repetitions = (int)$request->get('reps'); + $weekend = (int)$request->get('weekend'); + $repetitionMoment = ''; + $skip = (int)$request->get('skip'); + $skip = $skip < 0 || $skip > 31 ? 0 : $skip; + $weekend = $weekend < 1 || $weekend > 4 ? 1 : $weekend; + + if (false === $start || false === $end || false === $firstDate || false === $endDate) { + return response()->json(); + } + $start->startOfDay(); // if $firstDate is beyond $end, simply return an empty array. @@ -87,7 +92,7 @@ class RecurrenceController extends Controller return response()->json(); } // if $firstDate is beyond start, use that one: - $actualStart = clone $firstDate; + $actualStart = clone $firstDate; if ('weekly' === $repetitionType || 'monthly' === $repetitionType) { $repetitionMoment = explode(',', $request->get('type'))[1] ?? '1'; @@ -102,8 +107,8 @@ class RecurrenceController extends Controller $repetition = new RecurrenceRepetition(); $repetition->repetition_type = $repetitionType; $repetition->repetition_moment = $repetitionMoment; - $repetition->repetition_skip = (int)$request->get('skip'); - $repetition->weekend = (int)$request->get('weekend'); + $repetition->repetition_skip = $skip; + $repetition->weekend = $weekend; $actualEnd = clone $end; if ('until_date' === $endsAt) { @@ -122,7 +127,7 @@ class RecurrenceController extends Controller foreach ($occurrences as $current) { if ($current->gte($start)) { $event = [ - 'id' => $repetitionType . $firstDate->format('Ymd'), + 'id' => $repetitionType.$firstDate->format('Ymd'), 'title' => 'X', 'allDay' => true, 'start' => $current->format('Y-m-d'), @@ -139,29 +144,30 @@ class RecurrenceController extends Controller /** * Suggests repetition moments. - * - * @param Request $request - * - * @return JsonResponse */ public function suggest(Request $request): JsonResponse { - $string = '' === (string)$request->get('date') ? date('Y-m-d') : (string)$request->get('date'); - $today = today(config('app.timezone'))->startOfDay(); + $string = '' === (string)$request->get('date') ? date('Y-m-d') : (string)$request->get('date'); + $today = today(config('app.timezone'))->startOfDay(); + try { - $date = Carbon::createFromFormat('Y-m-d', $string, config('app.timezone'))->startOfDay(); + $date = Carbon::createFromFormat('Y-m-d', $string, config('app.timezone')); } catch (InvalidFormatException $e) { $date = Carbon::today(config('app.timezone')); } + if (false === $date) { + return response()->json(); + } + $date->startOfDay(); $preSelected = (string)$request->get('pre_select'); $locale = app('steam')->getLocale(); - Log::debug(sprintf('date = %s, today = %s. date > today? %s', $date->toAtomString(), $today->toAtomString(), var_export($date > $today, true))); - Log::debug(sprintf('past = true? %s', var_export('true' === (string)$request->get('past'), true))); + app('log')->debug(sprintf('date = %s, today = %s. date > today? %s', $date->toAtomString(), $today->toAtomString(), var_export($date > $today, true))); + app('log')->debug(sprintf('past = true? %s', var_export('true' === (string)$request->get('past'), true))); - $result = []; + $result = []; if ($date > $today || 'true' === (string)$request->get('past')) { - Log::debug('Will fill dropdown.'); + app('log')->debug('Will fill dropdown.'); $weekly = sprintf('weekly,%s', $date->dayOfWeekIso); $monthly = sprintf('monthly,%s', $date->day); $dayOfWeek = (string)trans(sprintf('config.dow_%s', $date->dayOfWeekIso)); @@ -188,7 +194,7 @@ class RecurrenceController extends Controller ], ]; } - Log::debug('Dropdown is', $result); + app('log')->debug('Dropdown is', $result); return response()->json($result); } diff --git a/app/Http/Controllers/Json/RuleController.php b/app/Http/Controllers/Json/RuleController.php index 9a2a9d6d1f..f0abfea161 100644 --- a/app/Http/Controllers/Json/RuleController.php +++ b/app/Http/Controllers/Json/RuleController.php @@ -27,8 +27,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class RuleController @@ -38,9 +36,6 @@ class RuleController extends Controller /** * Render HTML form for rule action. * - * @param Request $request - * - * @return JsonResponse * @throws FireflyException */ public function action(Request $request): JsonResponse @@ -49,14 +44,16 @@ class RuleController extends Controller $keys = array_keys(config('firefly.rule-actions')); $actions = []; foreach ($keys as $key) { - $actions[$key] = (string)trans('firefly.rule_action_' . $key . '_choice'); + $actions[$key] = (string)trans('firefly.rule_action_'.$key.'_choice'); } + try { $view = view('rules.partials.action', compact('actions', 'count'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render rules.partials.action: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render rules.partials.action: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $view = 'Could not render view.'; + throw new FireflyException($view, 0, $e); } @@ -66,9 +63,6 @@ class RuleController extends Controller /** * Render HTML for rule trigger. * - * @param Request $request - * - * @return JsonResponse * @throws FireflyException */ public function trigger(Request $request): JsonResponse @@ -85,10 +79,11 @@ class RuleController extends Controller try { $view = view('rules.partials.trigger', compact('triggers', 'count'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render rules.partials.trigger: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render rules.partials.trigger: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $view = 'Could not render view.'; + throw new FireflyException($view, 0, $e); } diff --git a/app/Http/Controllers/NewUserController.php b/app/Http/Controllers/NewUserController.php index 5ba5d4fd12..18b422872b 100644 --- a/app/Http/Controllers/NewUserController.php +++ b/app/Http/Controllers/NewUserController.php @@ -27,7 +27,7 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Requests\NewUserFormRequest; use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\Http\Controllers\CreateStuff; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; @@ -41,8 +41,7 @@ class NewUserController extends Controller { use CreateStuff; - /** @var AccountRepositoryInterface The account repository */ - private $repository; + private AccountRepositoryInterface $repository; /** * NewUserController constructor. @@ -63,15 +62,15 @@ class NewUserController extends Controller /** * Form the user gets when he has no data in the system. * - * @return RedirectResponse|Redirector|Factory|View + * @return Factory|Redirector|RedirectResponse|View */ public function index() { app('view')->share('title', (string)trans('firefly.welcome')); app('view')->share('mainTitleIcon', 'fa-fire'); - $types = config('firefly.accountTypesByIdentifier.asset'); - $count = $this->repository->count($types); + $types = config('firefly.accountTypesByIdentifier.asset'); + $count = $this->repository->count($types); $languages = []; @@ -85,15 +84,13 @@ class NewUserController extends Controller /** * Store his new settings. * - * @param NewUserFormRequest $request - * @param CurrencyRepositoryInterface $currencyRepository + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector * @throws FireflyException */ public function submit(NewUserFormRequest $request, CurrencyRepositoryInterface $currencyRepository) { - $language = $request->convertString('language'); + $language = $request->convertString('language'); if (!array_key_exists($language, config('firefly.languages'))) { $language = 'en_US'; } @@ -101,11 +98,11 @@ class NewUserController extends Controller // set language preference: app('preferences')->set('language', $language); // Store currency preference from input: - $currency = $currencyRepository->find((int)$request->input('amount_currency_id_bank_balance')); + $currency = $currencyRepository->find((int)$request->input('amount_currency_id_bank_balance')); // if is null, set to EUR: if (null === $currency) { - $currency = $currencyRepository->findByCodeNull('EUR'); + $currency = $currencyRepository->findByCode('EUR'); } $currencyRepository->enable($currency); @@ -114,10 +111,10 @@ class NewUserController extends Controller $this->createCashWalletAccount($currency, $language); // create cash wallet account // store currency preference: - app('preferences')->set('currencyPreference', $currency->code); + $currencyRepository->makeDefault($currency); // store frontpage preferences: - $accounts = $this->repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray(); + $accounts = $this->repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray(); app('preferences')->set('frontPageAccounts', $accounts); // mark. diff --git a/app/Http/Controllers/ObjectGroup/DeleteController.php b/app/Http/Controllers/ObjectGroup/DeleteController.php index c0a3b41ecd..f9115ec7f4 100644 --- a/app/Http/Controllers/ObjectGroup/DeleteController.php +++ b/app/Http/Controllers/ObjectGroup/DeleteController.php @@ -40,8 +40,6 @@ class DeleteController extends Controller /** * PiggyBankController constructor. - * - */ public function __construct() { @@ -62,8 +60,6 @@ class DeleteController extends Controller /** * Delete a piggy bank. * - * @param ObjectGroup $objectGroup - * * @return Factory|View */ public function delete(ObjectGroup $objectGroup) @@ -79,10 +75,6 @@ class DeleteController extends Controller /** * Destroy the piggy bank. - * - * @param ObjectGroup $objectGroup - * - * @return RedirectResponse */ public function destroy(ObjectGroup $objectGroup): RedirectResponse { diff --git a/app/Http/Controllers/ObjectGroup/EditController.php b/app/Http/Controllers/ObjectGroup/EditController.php index 507804d773..e85ffac6a6 100644 --- a/app/Http/Controllers/ObjectGroup/EditController.php +++ b/app/Http/Controllers/ObjectGroup/EditController.php @@ -43,8 +43,6 @@ class EditController extends Controller /** * PiggyBankController constructor. - * - */ public function __construct() { @@ -65,8 +63,6 @@ class EditController extends Controller /** * Edit an object group. * - * @param ObjectGroup $objectGroup - * * @return Factory|View */ public function edit(ObjectGroup $objectGroup) @@ -85,10 +81,7 @@ class EditController extends Controller /** * Update a piggy bank. * - * @param ObjectGroupFormRequest $request - * @param ObjectGroup $objectGroup - * - * @return Application|RedirectResponse|Redirector + * @return Application|Redirector|RedirectResponse */ public function update(ObjectGroupFormRequest $request, ObjectGroup $objectGroup) { @@ -98,7 +91,7 @@ class EditController extends Controller session()->flash('success', (string)trans('firefly.updated_object_group', ['title' => $objectGroup->title])); app('preferences')->mark(); - $redirect = redirect($this->getPreviousUrl('object-groups.edit.url')); + $redirect = redirect($this->getPreviousUrl('object-groups.edit.url')); if (1 === (int)$request->get('return_to_edit')) { session()->put('object-groups.edit.fromUpdate', true); diff --git a/app/Http/Controllers/ObjectGroup/IndexController.php b/app/Http/Controllers/ObjectGroup/IndexController.php index 7f48d4240c..168b3ea601 100644 --- a/app/Http/Controllers/ObjectGroup/IndexController.php +++ b/app/Http/Controllers/ObjectGroup/IndexController.php @@ -31,7 +31,6 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; /** * Class IndexController @@ -42,8 +41,6 @@ class IndexController extends Controller /** * IndexController constructor. - * - */ public function __construct() { @@ -75,14 +72,11 @@ class IndexController extends Controller } /** - * @param Request $request - * @param ObjectGroup $objectGroup - * * @return JsonResponse */ public function setOrder(Request $request, ObjectGroup $objectGroup) { - Log::debug(sprintf('Found object group #%d "%s"', $objectGroup->id, $objectGroup->title)); + app('log')->debug(sprintf('Found object group #%d "%s"', $objectGroup->id, $objectGroup->title)); $newOrder = (int)$request->get('order'); $this->repository->setOrder($objectGroup, $newOrder); diff --git a/app/Http/Controllers/PiggyBank/AmountController.php b/app/Http/Controllers/PiggyBank/AmountController.php index ec59780b2e..28085daa06 100644 --- a/app/Http/Controllers/PiggyBank/AmountController.php +++ b/app/Http/Controllers/PiggyBank/AmountController.php @@ -32,7 +32,6 @@ use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** @@ -45,8 +44,6 @@ class AmountController extends Controller /** * PiggyBankController constructor. - * - */ public function __construct() { @@ -68,8 +65,6 @@ class AmountController extends Controller /** * Add money to piggy bank. * - * @param PiggyBank $piggyBank - * * @return Factory|View */ public function add(PiggyBank $piggyBank) @@ -81,7 +76,7 @@ class AmountController extends Controller $leftToSave = bcsub($piggyBank->targetamount, $savedSoFar); $maxAmount = min($leftOnAccount, $leftToSave); } - $currency = $this->accountRepos->getAccountCurrency($piggyBank->account) ?? app('amount')->getDefaultCurrency(); + $currency = $this->accountRepos->getAccountCurrency($piggyBank->account) ?? app('amount')->getDefaultCurrency(); return view('piggy-banks.add', compact('piggyBank', 'maxAmount', 'currency')); } @@ -89,8 +84,6 @@ class AmountController extends Controller /** * Add money to piggy bank (for mobile devices). * - * @param PiggyBank $piggyBank - * * @return Factory|View */ public function addMobile(PiggyBank $piggyBank) @@ -105,18 +98,13 @@ class AmountController extends Controller $leftToSave = bcsub($piggyBank->targetamount, $savedSoFar); $maxAmount = min($leftOnAccount, $leftToSave); } - $currency = $this->accountRepos->getAccountCurrency($piggyBank->account) ?? app('amount')->getDefaultCurrency(); + $currency = $this->accountRepos->getAccountCurrency($piggyBank->account) ?? app('amount')->getDefaultCurrency(); return view('piggy-banks.add-mobile', compact('piggyBank', 'maxAmount', 'currency')); } /** * Add money to piggy bank. - * - * @param Request $request - * @param PiggyBank $piggyBank - * - * @return RedirectResponse */ public function postAdd(Request $request, PiggyBank $piggyBank): RedirectResponse { @@ -140,7 +128,7 @@ class AmountController extends Controller return redirect(route('piggy-banks.index')); } - Log::error('Cannot add ' . $amount . ' because canAddAmount returned false.'); + app('log')->error('Cannot add '.$amount.' because canAddAmount returned false.'); session()->flash( 'error', (string)trans( @@ -154,11 +142,6 @@ class AmountController extends Controller /** * Remove money from piggy bank. - * - * @param Request $request - * @param PiggyBank $piggyBank - * - * @return RedirectResponse */ public function postRemove(Request $request, PiggyBank $piggyBank): RedirectResponse { @@ -181,7 +164,7 @@ class AmountController extends Controller return redirect(route('piggy-banks.index')); } - $amount = (string)$request->get('amount'); + $amount = (string)$request->get('amount'); session()->flash( 'error', @@ -197,8 +180,6 @@ class AmountController extends Controller /** * Remove money from piggy bank form. * - * @param PiggyBank $piggyBank - * * @return Factory|View */ public function remove(PiggyBank $piggyBank) @@ -212,8 +193,6 @@ class AmountController extends Controller /** * Remove money from piggy bank (for mobile devices). * - * @param PiggyBank $piggyBank - * * @return Factory|View */ public function removeMobile(PiggyBank $piggyBank) diff --git a/app/Http/Controllers/PiggyBank/CreateController.php b/app/Http/Controllers/PiggyBank/CreateController.php index 66c3a8d518..92aac833d9 100644 --- a/app/Http/Controllers/PiggyBank/CreateController.php +++ b/app/Http/Controllers/PiggyBank/CreateController.php @@ -32,6 +32,7 @@ use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** @@ -44,8 +45,6 @@ class CreateController extends Controller /** * PiggyBankController constructor. - * - */ public function __construct() { @@ -86,14 +85,13 @@ class CreateController extends Controller /** * Store a new piggy bank. * - * @param PiggyBankStoreRequest $request + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector * @throws FireflyException */ public function store(PiggyBankStoreRequest $request) { - $data = $request->getPiggyBankData(); + $data = $request->getPiggyBankData(); if (null === $data['startdate']) { $data['startdate'] = today(config('app.timezone')); } @@ -103,19 +101,20 @@ class CreateController extends Controller app('preferences')->mark(); // store attachment(s): - /** @var array $files */ - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($piggyBank, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); } - $redirect = redirect($this->getPreviousUrl('piggy-banks.create.url')); + $redirect = redirect($this->getPreviousUrl('piggy-banks.create.url')); if (1 === (int)$request->get('create_another')) { session()->put('piggy-banks.create.fromStore', true); diff --git a/app/Http/Controllers/PiggyBank/DeleteController.php b/app/Http/Controllers/PiggyBank/DeleteController.php index 45d17de6a1..754b62f01d 100644 --- a/app/Http/Controllers/PiggyBank/DeleteController.php +++ b/app/Http/Controllers/PiggyBank/DeleteController.php @@ -40,8 +40,6 @@ class DeleteController extends Controller /** * PiggyBankController constructor. - * - */ public function __construct() { @@ -62,8 +60,6 @@ class DeleteController extends Controller /** * Delete a piggy bank. * - * @param PiggyBank $piggyBank - * * @return Factory|View */ public function delete(PiggyBank $piggyBank) @@ -78,10 +74,6 @@ class DeleteController extends Controller /** * Destroy the piggy bank. - * - * @param PiggyBank $piggyBank - * - * @return RedirectResponse */ public function destroy(PiggyBank $piggyBank): RedirectResponse { diff --git a/app/Http/Controllers/PiggyBank/EditController.php b/app/Http/Controllers/PiggyBank/EditController.php index 45b1db77fa..c0a2de083e 100644 --- a/app/Http/Controllers/PiggyBank/EditController.php +++ b/app/Http/Controllers/PiggyBank/EditController.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\PiggyBank; -use Amount; use FireflyIII\Helpers\Attachments\AttachmentHelperInterface; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\PiggyBankUpdateRequest; @@ -34,6 +33,7 @@ use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** @@ -47,8 +47,6 @@ class EditController extends Controller /** * PiggyBankController constructor. - * - */ public function __construct() { @@ -62,6 +60,7 @@ class EditController extends Controller $this->attachments = app(AttachmentHelperInterface::class); $this->piggyRepos = app(PiggyBankRepositoryInterface::class); $this->accountRepository = app(AccountRepositoryInterface::class); + return $next($request); } ); @@ -70,8 +69,6 @@ class EditController extends Controller /** * Edit a piggy bank. * - * @param PiggyBank $piggyBank - * * @return Factory|View */ public function edit(PiggyBank $piggyBank) @@ -80,20 +77,20 @@ class EditController extends Controller $subTitleIcon = 'fa-pencil'; $note = $piggyBank->notes()->first(); // Flash some data to fill the form. - $targetDate = $piggyBank->targetdate?->format('Y-m-d'); - $startDate = $piggyBank->startdate?->format('Y-m-d'); - $currency = $this->accountRepository->getAccountCurrency($piggyBank->account); + $targetDate = $piggyBank->targetdate?->format('Y-m-d'); + $startDate = $piggyBank->startdate?->format('Y-m-d'); + $currency = $this->accountRepository->getAccountCurrency($piggyBank->account); if (null === $currency) { - $currency = Amount::getDefaultCurrency(); + $currency = app('amount')->getDefaultCurrency(); } - $preFilled = [ + $preFilled = [ 'name' => $piggyBank->name, 'account_id' => $piggyBank->account_id, 'targetamount' => app('steam')->bcround($piggyBank->targetamount, $currency->decimal_places), 'targetdate' => $targetDate, 'startdate' => $startDate, - 'object_group' => $piggyBank->objectGroups->first() ? $piggyBank->objectGroups->first()->title : '', + 'object_group' => null !== $piggyBank->objectGroups->first() ? $piggyBank->objectGroups->first()->title : '', 'notes' => null === $note ? '' : $note->text, ]; if (0 === bccomp($piggyBank->targetamount, '0')) { @@ -113,10 +110,7 @@ class EditController extends Controller /** * Update a piggy bank. * - * @param PiggyBankUpdateRequest $request - * @param PiggyBank $piggyBank - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function update(PiggyBankUpdateRequest $request, PiggyBank $piggyBank) { @@ -127,19 +121,20 @@ class EditController extends Controller app('preferences')->mark(); // store new attachment(s): - /** @var array $files */ - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($piggyBank, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); } - $redirect = redirect($this->getPreviousUrl('piggy-banks.edit.url')); + $redirect = redirect($this->getPreviousUrl('piggy-banks.edit.url')); if (1 === (int)$request->get('return_to_edit')) { session()->put('piggy-banks.edit.fromUpdate', true); diff --git a/app/Http/Controllers/PiggyBank/IndexController.php b/app/Http/Controllers/PiggyBank/IndexController.php index fb0412e1cd..72396eb20d 100644 --- a/app/Http/Controllers/PiggyBank/IndexController.php +++ b/app/Http/Controllers/PiggyBank/IndexController.php @@ -36,7 +36,6 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\View\View; -use JsonException; use Symfony\Component\HttpFoundation\ParameterBag; /** @@ -50,8 +49,6 @@ class IndexController extends Controller /** * PiggyBankController constructor. - * - */ public function __construct() { @@ -74,52 +71,52 @@ class IndexController extends Controller * * TODO very complicated function. * - * @param Request $request - * * @return Factory|View + * * @throws FireflyException - * @throws JsonException */ - public function index(Request $request) + public function index() { $this->cleanupObjectGroups(); $this->piggyRepos->resetOrder(); - $collection = $this->piggyRepos->getPiggyBanks(); - $accounts = []; + $collection = $this->piggyRepos->getPiggyBanks(); + $accounts = []; + /** @var Carbon $end */ - $end = session('end', today(config('app.timezone'))->endOfMonth()); + $end = session('end', today(config('app.timezone'))->endOfMonth()); // transform piggies using the transformer: - $parameters = new ParameterBag(); + $parameters = new ParameterBag(); $parameters->set('end', $end); // make piggy bank groups: - $piggyBanks = []; + $piggyBanks = []; /** @var PiggyBankTransformer $transformer */ - $transformer = app(PiggyBankTransformer::class); + $transformer = app(PiggyBankTransformer::class); $transformer->setParameters(new ParameterBag()); /** @var AccountTransformer $accountTransformer */ $accountTransformer = app(AccountTransformer::class); $accountTransformer->setParameters($parameters); + /** @var PiggyBank $piggy */ foreach ($collection as $piggy) { - $array = $transformer->transform($piggy); - $groupOrder = (int)$array['object_group_order']; + $array = $transformer->transform($piggy); + $groupOrder = (int)$array['object_group_order']; // make group array if necessary: - $piggyBanks[$groupOrder] = $piggyBanks[$groupOrder] ?? [ + $piggyBanks[$groupOrder] ??= [ 'object_group_id' => $array['object_group_id'] ?? 0, 'object_group_title' => $array['object_group_title'] ?? trans('firefly.default_group_title_name'), 'piggy_banks' => [], ]; - $account = $accountTransformer->transform($piggy->account); - $accountId = (int)$account['id']; - $array['attachments'] = $this->piggyRepos->getAttachments($piggy); + $account = $accountTransformer->transform($piggy->account); + $accountId = (int)$account['id']; + $array['attachments'] = $this->piggyRepos->getAttachments($piggy); if (!array_key_exists($accountId, $accounts)) { // create new: - $accounts[$accountId] = $account; + $accounts[$accountId] = $account; // add some interesting details: $accounts[$accountId]['left'] = $accounts[$accountId]['current_balance']; @@ -137,26 +134,21 @@ class IndexController extends Controller $piggyBanks[$groupOrder]['piggy_banks'][] = $array; } // do a bunch of summaries. - $piggyBanks = $this->makeSums($piggyBanks); + $piggyBanks = $this->makeSums($piggyBanks); ksort($piggyBanks); return view('piggy-banks.index', compact('piggyBanks', 'accounts')); } - /** - * @param array $piggyBanks - * - * @return array - */ private function makeSums(array $piggyBanks): array { $sums = []; foreach ($piggyBanks as $groupOrder => $group) { $groupId = $group['object_group_id']; foreach ($group['piggy_banks'] as $piggy) { - $currencyId = $piggy['currency_id']; - $sums[$groupId][$currencyId] = $sums[$groupId][$currencyId] ?? [ + $currencyId = $piggy['currency_id']; + $sums[$groupId][$currencyId] ??= [ 'target' => '0', 'saved' => '0', 'left_to_save' => '0', @@ -186,11 +178,6 @@ class IndexController extends Controller /** * Set the order of a piggy bank. - * - * @param Request $request - * @param PiggyBank $piggyBank - * - * @return JsonResponse */ public function setOrder(Request $request, PiggyBank $piggyBank): JsonResponse { diff --git a/app/Http/Controllers/PiggyBank/ShowController.php b/app/Http/Controllers/PiggyBank/ShowController.php index d9ff1f9e36..2fd69286ae 100644 --- a/app/Http/Controllers/PiggyBank/ShowController.php +++ b/app/Http/Controllers/PiggyBank/ShowController.php @@ -32,7 +32,6 @@ use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Transformers\PiggyBankTransformer; use Illuminate\Contracts\View\Factory; use Illuminate\View\View; -use JsonException; use Symfony\Component\HttpFoundation\ParameterBag; /** @@ -44,8 +43,6 @@ class ShowController extends Controller /** * PiggyBankController constructor. - * - */ public function __construct() { @@ -66,18 +63,16 @@ class ShowController extends Controller /** * Show a single piggy bank. * - * @param PiggyBank $piggyBank - * * @return Factory|View + * * @throws FireflyException - * @throws JsonException */ public function show(PiggyBank $piggyBank) { /** @var Carbon $end */ - $end = session('end', today(config('app.timezone'))->endOfMonth()); + $end = session('end', today(config('app.timezone'))->endOfMonth()); // transform piggies using the transformer: - $parameters = new ParameterBag(); + $parameters = new ParameterBag(); $parameters->set('end', $end); /** @var PiggyBankTransformer $transformer */ diff --git a/app/Http/Controllers/Popup/ReportController.php b/app/Http/Controllers/Popup/ReportController.php index e8e65940d0..1d4ae33507 100644 --- a/app/Http/Controllers/Popup/ReportController.php +++ b/app/Http/Controllers/Popup/ReportController.php @@ -31,7 +31,6 @@ use Illuminate\Http\Request; /** * Class ReportController. - * */ class ReportController extends Controller { @@ -40,9 +39,6 @@ class ReportController extends Controller /** * Generate popup view. * - * @param Request $request - * - * @return JsonResponse * @throws FireflyException */ public function general(Request $request): JsonResponse @@ -53,7 +49,7 @@ class ReportController extends Controller app('view')->share('start', $attributes['startDate']); app('view')->share('end', $attributes['endDate']); - $html = match ($attributes['location']) { + $html = match ($attributes['location']) { default => sprintf('Firefly III cannot handle "%s"-popups.', $attributes['location']), 'budget-spent-amount' => $this->budgetSpentAmount($attributes), 'expense-entry' => $this->expenseEntry($attributes), @@ -61,6 +57,7 @@ class ReportController extends Controller 'category-entry' => $this->categoryEntry($attributes), 'budget-entry' => $this->budgetEntry($attributes), }; + return response()->json(['html' => $html]); } } diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index aec2828524..e5d1974824 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -33,11 +33,7 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class PreferencesController. @@ -46,15 +42,13 @@ class PreferencesController extends Controller { /** * PreferencesController constructor. - * - */ public function __construct() { parent::__construct(); $this->middleware( - function ($request, $next) { + static function ($request, $next) { app('view')->share('title', (string)trans('firefly.preferences')); app('view')->share('mainTitleIcon', 'fa-gear'); @@ -66,24 +60,20 @@ class PreferencesController extends Controller /** * Show overview of preferences. * - * @param AccountRepositoryInterface $repository - * * @return Factory|View + * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function index(AccountRepositoryInterface $repository) { - $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]); - $isDocker = env('IS_DOCKER', false); + $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]); + $isDocker = env('IS_DOCKER', false); + $groupedAccounts = []; - // group accounts - $groupedAccounts = []; /** @var Account $account */ foreach ($accounts as $account) { - $type = $account->accountType->type; - $role = sprintf('opt_group_%s', $repository->getMetaValue($account, 'account_role')); + $type = $account->accountType->type; + $role = sprintf('opt_group_%s', $repository->getMetaValue($account, 'account_role')); if (in_array($type, [AccountType::MORTGAGE, AccountType::DEBT, AccountType::LOAN], true)) { $role = sprintf('opt_group_l_%s', $type); @@ -92,27 +82,35 @@ class PreferencesController extends Controller if ('opt_group_' === $role) { $role = 'opt_group_defaultAsset'; } - $groupedAccounts[trans(sprintf('firefly.%s', $role))][$account->id] = $account->name; + $groupedAccounts[(string)trans(sprintf('firefly.%s', $role))][$account->id] = $account->name; } ksort($groupedAccounts); - $accountIds = $accounts->pluck('id')->toArray(); - $viewRange = app('navigation')->getViewRange(false); - $frontPageAccounts = app('preferences')->get('frontPageAccounts', $accountIds); - $language = app('steam')->getLanguage(); - $languages = config('firefly.languages'); - $locale = app('preferences')->get('locale', config('firefly.default_locale', 'equal'))->data; - $listPageSize = app('preferences')->get('listPageSize', 50)->data; - $darkMode = app('preferences')->get('darkMode', 'browser')->data; - $slackUrl = app('preferences')->get('slack_webhook_url', '')->data; - $customFiscalYear = app('preferences')->get('customFiscalYear', 0)->data; - $fiscalYearStartStr = app('preferences')->get('fiscalYearStart', '01-01')->data; - $fiscalYearStart = date('Y') . '-' . $fiscalYearStartStr; - $tjOptionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; - $availableDarkModes = config('firefly.available_dark_modes'); + /** @var array $accountIds */ + $accountIds = $accounts->pluck('id')->toArray(); + $viewRange = app('navigation')->getViewRange(false); + $frontPageAccountsPref = app('preferences')->get('frontPageAccounts', $accountIds); + $frontPageAccounts = $frontPageAccountsPref->data; + if (!is_array($frontPageAccounts)) { + $frontPageAccounts = $accountIds; + } + $language = app('steam')->getLanguage(); + $languages = config('firefly.languages'); + $locale = app('preferences')->get('locale', config('firefly.default_locale', 'equal'))->data; + $listPageSize = app('preferences')->get('listPageSize', 50)->data; + $darkMode = app('preferences')->get('darkMode', 'browser')->data; + $slackUrl = app('preferences')->get('slack_webhook_url', '')->data; + $customFiscalYear = app('preferences')->get('customFiscalYear', 0)->data; + $fiscalYearStartStr = app('preferences')->get('fiscalYearStart', '01-01')->data; + if (is_array($fiscalYearStartStr)) { + $fiscalYearStartStr = '01-01'; + } + $fiscalYearStart = sprintf('%s-%s', date('Y'), (string)$fiscalYearStartStr); + $tjOptionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; + $availableDarkModes = config('firefly.available_dark_modes'); // notification preferences (single value for each): - $notifications = []; + $notifications = []; foreach (config('firefly.available_notifications') as $notification) { $notifications[$notification] = app('preferences')->get(sprintf('notification_%s', $notification), true)->data; } @@ -122,57 +120,37 @@ class PreferencesController extends Controller // list of locales also has "equal" which makes it equal to whatever the language is. try { - $locales = json_decode(file_get_contents(resource_path(sprintf('lang/%s/locales.json', $language))), true, 512, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { - Log::error($e->getMessage()); + $locales = json_decode((string)file_get_contents(resource_path(sprintf('lang/%s/locales.json', $language))), true, 512, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + app('log')->error($e->getMessage()); $locales = []; } - $locales = ['equal' => (string)trans('firefly.equal_to_language')] + $locales; + $locales = ['equal' => (string)trans('firefly.equal_to_language')] + $locales; // an important fallback is that the frontPageAccount array gets refilled automatically // when it turns up empty. - if (0 === count($frontPageAccounts->data)) { + if (0 === count($frontPageAccounts)) { $frontPageAccounts = $accountIds; } // for the demo user, the slackUrl is automatically emptied. - // this isn't really secure but it means that the demo site has a semi-secret + // this isn't really secure, but it means that the demo site has a semi-secret // slackUrl. if (auth()->user()->hasRole('demo')) { $slackUrl = ''; } - return view( - 'preferences.index', - compact( - 'language', - 'groupedAccounts', - 'isDocker', - 'frontPageAccounts', - 'languages', - 'darkMode', - 'availableDarkModes', - 'notifications', - 'slackUrl', - 'locales', - 'locale', - 'tjOptionalFields', - 'viewRange', - 'customFiscalYear', - 'listPageSize', - 'fiscalYearStart' - ) - ); + return view('preferences.index', compact('language', 'groupedAccounts', 'isDocker', 'frontPageAccounts', 'languages', 'darkMode', 'availableDarkModes', 'notifications', 'slackUrl', 'locales', 'locale', 'tjOptionalFields', 'viewRange', 'customFiscalYear', 'listPageSize', 'fiscalYearStart')); } /** * Store new preferences. * - * @param Request $request + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.NPathComplexity) */ public function postIndex(Request $request) { @@ -186,7 +164,7 @@ class PreferencesController extends Controller } // extract notifications: - $all = $request->all(); + $all = $request->all(); foreach (config('firefly.available_notifications') as $option) { $key = sprintf('notification_%s', $option); if (array_key_exists($key, $all)) { @@ -204,7 +182,6 @@ class PreferencesController extends Controller session()->forget('end'); session()->forget('range'); - // slack URL: if (!auth()->user()->hasRole('demo')) { $url = (string)$request->get('slackUrl'); @@ -217,26 +194,25 @@ class PreferencesController extends Controller } // custom fiscal year - $customFiscalYear = 1 === (int)$request->get('customFiscalYear'); - $string = strtotime((string)$request->get('fiscalYearStart')); + $customFiscalYear = 1 === (int)$request->get('customFiscalYear'); + $string = strtotime((string)$request->get('fiscalYearStart')); if (false !== $string) { $fiscalYearStart = date('m-d', $string); app('preferences')->set('customFiscalYear', $customFiscalYear); app('preferences')->set('fiscalYearStart', $fiscalYearStart); } - // save page size: app('preferences')->set('listPageSize', 50); - $listPageSize = (int)$request->get('listPageSize'); + $listPageSize = (int)$request->get('listPageSize'); if ($listPageSize > 0 && $listPageSize < 1337) { app('preferences')->set('listPageSize', $listPageSize); } // language: /** @var Preference $currentLang */ - $currentLang = app('preferences')->get('language', 'en_US'); - $lang = $request->get('language'); + $currentLang = app('preferences')->get('language', 'en_US'); + $lang = $request->get('language'); if (array_key_exists($lang, config('firefly.languages'))) { app('preferences')->set('language', $lang); } @@ -253,8 +229,8 @@ class PreferencesController extends Controller } // optional fields for transactions: - $setOptions = $request->get('tj') ?? []; - $optionalTj = [ + $setOptions = $request->get('tj') ?? []; + $optionalTj = [ 'interest_date' => array_key_exists('interest_date', $setOptions), 'book_date' => array_key_exists('book_date', $setOptions), 'process_date' => array_key_exists('process_date', $setOptions), @@ -271,7 +247,7 @@ class PreferencesController extends Controller app('preferences')->set('transaction_journal_optional_fields', $optionalTj); // dark mode - $darkMode = $request->get('darkMode') ?? 'browser'; + $darkMode = $request->get('darkMode') ?? 'browser'; if (in_array($darkMode, config('firefly.available_dark_modes'), true)) { app('preferences')->set('darkMode', $darkMode); } diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 59b624fac6..858114a198 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers; use Auth; -use DB; -use Exception; use FireflyIII\Events\UserChangedEmail; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\ValidationException; @@ -36,11 +34,8 @@ use FireflyIII\Http\Requests\ProfileFormRequest; use FireflyIII\Http\Requests\TokenFormRequest; use FireflyIII\Models\Preference; use FireflyIII\Repositories\User\UserRepositoryInterface; -use FireflyIII\Support\Facades\Preferences; use FireflyIII\Support\Http\Controllers\CreateStuff; use FireflyIII\User; -use Google2FA; -use Hash; use Illuminate\Auth\AuthenticationException; use Illuminate\Contracts\Auth\Guard; use Illuminate\Contracts\Foundation\Application; @@ -49,21 +44,17 @@ use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; use Laravel\Passport\ClientRepository; use PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException; use PragmaRX\Google2FA\Exceptions\InvalidCharactersException; use PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException; use PragmaRX\Recovery\Recovery; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class ProfileController. * * @method Guard guard() - * */ class ProfileController extends Controller { @@ -73,8 +64,6 @@ class ProfileController extends Controller /** * ProfileController constructor. - * - */ public function __construct() { @@ -90,7 +79,7 @@ class ProfileController extends Controller ); $authGuard = config('firefly.authentication_guard'); $this->internalAuth = 'web' === $authGuard; - Log::debug(sprintf('ProfileController::__construct(). Authentication guard is "%s"', $authGuard)); + app('log')->debug(sprintf('ProfileController::__construct(). Authentication guard is "%s"', $authGuard)); $this->middleware(IsDemoUser::class)->except(['index']); } @@ -98,16 +87,11 @@ class ProfileController extends Controller /** * View that generates a 2FA code for the user. * - * @param Request $request - * - * @return Factory|View|RedirectResponse * @throws IncompatibleWithGoogleAuthenticatorException * @throws InvalidCharactersException * @throws SecretKeyTooShortException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ - public function code(Request $request): Factory | View | RedirectResponse + public function code(Request $request): Factory|RedirectResponse|View { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); @@ -115,14 +99,14 @@ class ProfileController extends Controller return redirect(route('profile.index')); } $domain = $this->getDomain(); - $secretPreference = Preferences::get('temp-mfa-secret'); - $codesPreference = Preferences::get('temp-mfa-codes'); + $secretPreference = app('preferences')->get('temp-mfa-secret'); + $codesPreference = app('preferences')->get('temp-mfa-codes'); // generate secret if not in session if (null === $secretPreference) { // generate secret + store + flash - $secret = Google2FA::generateSecretKey(); - Preferences::set('temp-mfa-secret', $secret); + $secret = \Google2FA::generateSecretKey(); + app('preferences')->set('temp-mfa-secret', $secret); } // re-use secret if in session @@ -130,25 +114,31 @@ class ProfileController extends Controller // get secret from session and flash $secret = $secretPreference->data; } + if (is_array($secret)) { + $secret = ''; + } // generate recovery codes if not in session: - $recoveryCodes = ''; + $recoveryCodes = ''; if (null === $codesPreference) { // generate codes + store + flash: $recovery = app(Recovery::class); $recoveryCodes = $recovery->lowercase()->setCount(8)->setBlocks(2)->setChars(6)->toArray(); - Preferences::set('temp-mfa-codes', $recoveryCodes); + app('preferences')->set('temp-mfa-codes', $recoveryCodes); } // get codes from session if present already: if (null !== $codesPreference) { $recoveryCodes = $codesPreference->data; } + if (!is_array($recoveryCodes)) { + $recoveryCodes = []; + } - $codes = implode("\r\n", $recoveryCodes); + $codes = implode("\r\n", $recoveryCodes); - $image = Google2FA::getQRCodeInline($domain, auth()->user()->email, $secret); + $image = \Google2FA::getQRCodeInline($domain, auth()->user()->email, (string)$secret); return view('profile.code', compact('image', 'secret', 'codes')); } @@ -156,22 +146,19 @@ class ProfileController extends Controller /** * Screen to confirm email change. * - * @param UserRepositoryInterface $repository - * @param string $token - * - * @return RedirectResponse|Redirector - * * @throws FireflyException */ - public function confirmEmailChange(UserRepositoryInterface $repository, string $token): RedirectResponse | Redirector + public function confirmEmailChange(UserRepositoryInterface $repository, string $token): Redirector|RedirectResponse { if (!$this->internalAuth) { throw new FireflyException(trans('firefly.external_user_mgt_disabled')); } + // find preference with this token value. /** @var Collection $set */ $set = app('preferences')->findByName('email_change_confirm_token'); $user = null; + /** @var Preference $preference */ foreach ($set as $preference) { if ($preference->data === $token) { @@ -192,12 +179,8 @@ class ProfileController extends Controller /** * Delete your account view. - * - * @param Request $request - * - * @return View|RedirectResponse */ - public function deleteAccount(Request $request): View | RedirectResponse + public function deleteAccount(Request $request): RedirectResponse|View { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); @@ -213,23 +196,23 @@ class ProfileController extends Controller /** * Delete 2FA routine. - * */ - public function deleteCode(Request $request): RedirectResponse | Redirector + public function deleteCode(Request $request): Redirector|RedirectResponse { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); return redirect(route('profile.index')); } + /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); - Preferences::delete('temp-mfa-secret'); - Preferences::delete('temp-mfa-codes'); + app('preferences')->delete('temp-mfa-secret'); + app('preferences')->delete('temp-mfa-codes'); $repository->setMFACode($user, null); app('preferences')->mark(); @@ -241,9 +224,8 @@ class ProfileController extends Controller /** * Enable 2FA screen. - * */ - public function enable2FA(Request $request): RedirectResponse | Redirector + public function enable2FA(Request $request): Redirector|RedirectResponse { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); @@ -270,30 +252,31 @@ class ProfileController extends Controller /** * Index for profile. * - * @return Factory|View * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ - public function index(): Factory | View + public function index(): Factory|View { /** @var User $user */ $user = auth()->user(); $isInternalAuth = $this->internalAuth; - $count = DB::table('oauth_clients')->where('personal_access_client', true)->whereNull('user_id')->count(); + $count = \DB::table('oauth_clients')->where('personal_access_client', true)->whereNull('user_id')->count(); $subTitle = $user->email; $userId = $user->id; $enabled2FA = null !== $user->mfa_secret; - $mfaBackupCount = count(app('preferences')->get('mfa_recovery', [])->data); + $recoveryData = app('preferences')->get('mfa_recovery', [])->data; + if (!is_array($recoveryData)) { + $recoveryData = []; + } + $mfaBackupCount = count($recoveryData); $this->createOAuthKeys(); if (0 === $count) { /** @var ClientRepository $repository */ $repository = app(ClientRepository::class); - $repository->createPersonalAccessClient(null, config('app.name') . ' Personal Access Client', 'http://localhost'); + $repository->createPersonalAccessClient(null, config('app.name').' Personal Access Client', 'http://localhost'); } - $accessToken = app('preferences')->get('access_token'); + $accessToken = app('preferences')->get('access_token'); if (null === $accessToken) { $token = $user->generateAccessToken(); $accessToken = app('preferences')->set('access_token', $token); @@ -305,10 +288,7 @@ class ProfileController extends Controller ); } - /** - * @return Factory|View|RedirectResponse - */ - public function logoutOtherSessions(): Factory | View | RedirectResponse + public function logoutOtherSessions(): Factory|RedirectResponse|View { if (!$this->internalAuth) { session()->flash('info', (string)trans('firefly.external_auth_disabled')); @@ -320,12 +300,9 @@ class ProfileController extends Controller } /** - * @param Request $request - * - * @return Factory|View|RedirectResponse * @throws FireflyException */ - public function newBackupCodes(Request $request): Factory | View | RedirectResponse + public function newBackupCodes(Request $request): Factory|RedirectResponse|View { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); @@ -336,10 +313,11 @@ class ProfileController extends Controller // generate recovery codes: $recovery = app(Recovery::class); $recoveryCodes = $recovery->lowercase() - ->setCount(8) // Generate 8 codes - ->setBlocks(2) // Every code must have 7 blocks - ->setChars(6) // Each block must have 16 chars - ->toArray(); + ->setCount(8) // Generate 8 codes + ->setBlocks(2) // Every code must have 7 blocks + ->setChars(6) // Each block must have 16 chars + ->toArray() + ; $codes = implode("\r\n", $recoveryCodes); app('preferences')->set('mfa_recovery', $recoveryCodes); @@ -350,13 +328,8 @@ class ProfileController extends Controller /** * Submit the change email form. - * - * @param EmailFormRequest $request - * @param UserRepositoryInterface $repository - * - * @return Factory|RedirectResponse|Redirector */ - public function postChangeEmail(EmailFormRequest $request, UserRepositoryInterface $repository): Factory | RedirectResponse | Redirector + public function postChangeEmail(EmailFormRequest $request, UserRepositoryInterface $repository): Factory|Redirector|RedirectResponse { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); @@ -376,7 +349,7 @@ class ProfileController extends Controller $existing = $repository->findByEmail($newEmail); if (null !== $existing) { // force user logout. - Auth::guard()->logout(); // @phpstan-ignore-line (does not recognize function) + \Auth::guard()->logout(); // @phpstan-ignore-line (does not recognize function) $request->session()->invalidate(); session()->flash('success', (string)trans('firefly.email_changed')); @@ -390,7 +363,7 @@ class ProfileController extends Controller event(new UserChangedEmail($user, $newEmail, $oldEmail)); // force user logout. - Auth::guard()->logout(); // @phpstan-ignore-line (does not recognize function) + \Auth::guard()->logout(); // @phpstan-ignore-line (does not recognize function) $request->session()->invalidate(); session()->flash('success', (string)trans('firefly.email_changed')); @@ -399,12 +372,8 @@ class ProfileController extends Controller /** * Change your email address. - * - * @param Request $request - * - * @return Factory|RedirectResponse|View */ - public function changeEmail(Request $request): Factory | RedirectResponse | View + public function changeEmail(Request $request): Factory|RedirectResponse|View { if (!$this->internalAuth) { $request->session()->flash('error', trans('firefly.external_user_mgt_disabled')); @@ -423,10 +392,7 @@ class ProfileController extends Controller /** * Submit change password form. * - * @param ProfileFormRequest $request - * @param UserRepositoryInterface $repository - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function postChangePassword(ProfileFormRequest $request, UserRepositoryInterface $repository) { @@ -439,8 +405,10 @@ class ProfileController extends Controller // the request has already validated both new passwords must be equal. $current = $request->get('current_password'); $new = $request->get('new_password'); + /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); + try { $this->validatePassword($user, $current, $new); } catch (ValidationException $e) { @@ -458,9 +426,7 @@ class ProfileController extends Controller /** * Change your password. * - * @param Request $request - * - * @return Factory|RedirectResponse|Redirector|View + * @return Factory|Redirector|RedirectResponse|View */ public function changePassword(Request $request) { @@ -480,12 +446,9 @@ class ProfileController extends Controller /** * Submit 2FA for the first time. * - * @param TokenFormRequest $request + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function postCode(TokenFormRequest $request) { @@ -496,21 +459,28 @@ class ProfileController extends Controller } /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); + /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); - $secret = Preferences::get('temp-mfa-secret')?->data; + $secret = app('preferences')->get('temp-mfa-secret')?->data; + if (is_array($secret)) { + $secret = null; + } + if (is_int($secret)) { + $secret = (string)$secret; + } $repository->setMFACode($user, $secret); - Preferences::delete('temp-mfa-secret'); - Preferences::delete('temp-mfa-codes'); + app('preferences')->delete('temp-mfa-secret'); + app('preferences')->delete('temp-mfa-codes'); session()->flash('success', (string)trans('firefly.saved_preferences')); app('preferences')->mark(); // also save the code so replay attack is prevented. - $mfaCode = $request->get('code'); + $mfaCode = $request->get('code'); $this->addToMFAHistory($mfaCode); // save backup codes in preferences: @@ -518,7 +488,7 @@ class ProfileController extends Controller // make sure MFA is logged out. if ('testing' !== config('app.env')) { - Google2FA::logout(); + \Google2FA::logout(); } // drop all info from session: @@ -530,11 +500,7 @@ class ProfileController extends Controller /** * TODO duplicate code. * - * @param string $mfaCode - * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ private function addToMFAHistory(string $mfaCode): void { @@ -575,10 +541,7 @@ class ProfileController extends Controller /** * Submit delete account. * - * @param UserRepositoryInterface $repository - * @param DeleteAccountFormRequest $request - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function postDeleteAccount(UserRepositoryInterface $repository, DeleteAccountFormRequest $request) { @@ -588,14 +551,15 @@ class ProfileController extends Controller return redirect(route('profile.index')); } - if (!Hash::check($request->get('password'), auth()->user()->password)) { + if (!\Hash::check($request->get('password'), auth()->user()->password)) { session()->flash('error', (string)trans('firefly.invalid_password')); return redirect(route('profile.delete-account')); } + /** @var User $user */ $user = auth()->user(); - Log::info(sprintf('User #%d has opted to delete their account', auth()->user()->id)); + app('log')->info(sprintf('User #%d has opted to delete their account', auth()->user()->id)); // make repository delete user: auth()->logout(); session()->flush(); @@ -605,9 +569,8 @@ class ProfileController extends Controller } /** - * @param Request $request + * @return Application|Redirector|RedirectResponse * - * @return Application|RedirectResponse|Redirector * @throws AuthenticationException */ public function postLogoutOtherSessions(Request $request) @@ -621,8 +584,8 @@ class ProfileController extends Controller 'email' => auth()->user()->email, 'password' => $request->get('password'), ]; - if (Auth::once($creds)) { - Auth::logoutOtherDevices($request->get('password')); + if (\Auth::once($creds)) { + \Auth::logoutOtherDevices($request->get('password')); session()->flash('info', (string)trans('firefly.other_sessions_logged_out')); return redirect(route('profile.index')); @@ -635,10 +598,9 @@ class ProfileController extends Controller /** * Regenerate access token. * - * @param Request $request + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector - * @throws Exception + * @throws \Exception */ public function regenerate(Request $request) { @@ -660,11 +622,7 @@ class ProfileController extends Controller /** * Undo change of user email address. * - * @param UserRepositoryInterface $repository - * @param string $token - * @param string $hash - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse * * @throws FireflyException */ @@ -675,8 +633,9 @@ class ProfileController extends Controller } // find preference with this token value. - $set = app('preferences')->findByName('email_change_undo_token'); - $user = null; + $set = app('preferences')->findByName('email_change_undo_token'); + $user = null; + /** @var Preference $preference */ foreach ($set as $preference) { if ($preference->data === $token) { @@ -688,13 +647,15 @@ class ProfileController extends Controller } // found user.which email address to return to? - $set = app('preferences')->beginsWith($user, 'previous_email_'); + $set = app('preferences')->beginsWith($user, 'previous_email_'); + /** @var string $match */ $match = null; foreach ($set as $entry) { $hashed = hash('sha256', sprintf('%s%s', (string)config('app.key'), $entry->data)); if ($hashed === $hash) { $match = $entry->data; + break; } } diff --git a/app/Http/Controllers/Recurring/CreateController.php b/app/Http/Controllers/Recurring/CreateController.php index ac51114be3..af0aa56cc1 100644 --- a/app/Http/Controllers/Recurring/CreateController.php +++ b/app/Http/Controllers/Recurring/CreateController.php @@ -37,10 +37,10 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** - * * Class CreateController */ class CreateController extends Controller @@ -52,8 +52,6 @@ class CreateController extends Controller /** * CreateController constructor. - * - */ public function __construct() { @@ -79,8 +77,6 @@ class CreateController extends Controller /** * Create a new recurring transaction. * - * @param Request $request - * * @return Factory|View */ public function create(Request $request) @@ -97,19 +93,19 @@ class CreateController extends Controller $this->rememberPreviousUrl('recurring.create.url'); } $request->session()->forget('recurring.create.fromStore'); - $repetitionEnds = [ + $repetitionEnds = [ 'forever' => (string)trans('firefly.repeat_forever'), 'until_date' => (string)trans('firefly.repeat_until_date'), 'times' => (string)trans('firefly.repeat_times'), ]; - $weekendResponses = [ + $weekendResponses = [ RecurrenceRepetition::WEEKEND_DO_NOTHING => (string)trans('firefly.do_nothing'), RecurrenceRepetition::WEEKEND_SKIP_CREATION => (string)trans('firefly.skip_transaction'), RecurrenceRepetition::WEEKEND_TO_FRIDAY => (string)trans('firefly.jump_to_friday'), RecurrenceRepetition::WEEKEND_TO_MONDAY => (string)trans('firefly.jump_to_monday'), ]; - $hasOldInput = null !== $request->old('_token'); // flash some data - $preFilled = [ + $hasOldInput = null !== $request->old('_token'); // flash some data + $preFilled = [ 'first_date' => $tomorrow->format('Y-m-d'), 'transaction_type' => $hasOldInput ? $request->old('transaction_type') : 'withdrawal', 'active' => $hasOldInput ? (bool)$request->old('active') : true, @@ -124,10 +120,9 @@ class CreateController extends Controller } /** - * @param Request $request - * @param TransactionJournal $journal - * * @return Factory|\Illuminate\Contracts\View\View + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function createFromJournal(Request $request, TransactionJournal $journal) { @@ -143,31 +138,31 @@ class CreateController extends Controller $this->rememberPreviousUrl('recurring.create.url'); } $request->session()->forget('recurring.create.fromStore'); - $repetitionEnds = [ + $repetitionEnds = [ 'forever' => (string)trans('firefly.repeat_forever'), 'until_date' => (string)trans('firefly.repeat_until_date'), 'times' => (string)trans('firefly.repeat_times'), ]; - $weekendResponses = [ + $weekendResponses = [ RecurrenceRepetition::WEEKEND_DO_NOTHING => (string)trans('firefly.do_nothing'), RecurrenceRepetition::WEEKEND_SKIP_CREATION => (string)trans('firefly.skip_transaction'), RecurrenceRepetition::WEEKEND_TO_FRIDAY => (string)trans('firefly.jump_to_friday'), RecurrenceRepetition::WEEKEND_TO_MONDAY => (string)trans('firefly.jump_to_monday'), ]; - // fill prefilled with journal info - $type = strtolower($journal->transactionType->type); + $type = strtolower($journal->transactionType->type); /** @var Transaction $source */ - $source = $journal->transactions()->where('amount', '<', 0)->first(); + $source = $journal->transactions()->where('amount', '<', 0)->first(); + /** @var Transaction $dest */ - $dest = $journal->transactions()->where('amount', '>', 0)->first(); - $category = $journal->categories()->first() ? $journal->categories()->first()->name : ''; - $budget = $journal->budgets()->first() ? $journal->budgets()->first()->id : 0; - $bill = $journal->bill ? $journal->bill->id : 0; - $hasOldInput = null !== $request->old('_token'); // flash some data - $preFilled = []; + $dest = $journal->transactions()->where('amount', '>', 0)->first(); + $category = null !== $journal->categories()->first() ? $journal->categories()->first()->name : ''; + $budget = null !== $journal->budgets()->first() ? $journal->budgets()->first()->id : 0; + $bill = null !== $journal->bill ? $journal->bill->id : 0; + $hasOldInput = null !== $request->old('_token'); // flash some data + $preFilled = []; if (true === $hasOldInput) { $preFilled = [ 'title' => $request->old('title'), @@ -221,14 +216,14 @@ class CreateController extends Controller /** * Store a recurring transaction. * - * @param RecurrenceFormRequest $request + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector * @throws FireflyException */ public function store(RecurrenceFormRequest $request) { - $data = $request->getAll(); + $data = $request->getAll(); + try { $recurrence = $this->recurring->store($data); } catch (FireflyException $e) { @@ -236,17 +231,19 @@ class CreateController extends Controller return redirect(route('recurring.create'))->withInput(); } + Log::channel('audit')->info('Stored new recurrence.', $data); $request->session()->flash('success', (string)trans('firefly.stored_new_recurrence', ['title' => $recurrence->title])); app('preferences')->mark(); // store attachment(s): - /** @var array $files */ - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($recurrence, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } diff --git a/app/Http/Controllers/Recurring/DeleteController.php b/app/Http/Controllers/Recurring/DeleteController.php index 829ae2b9fe..e1495e0995 100644 --- a/app/Http/Controllers/Recurring/DeleteController.php +++ b/app/Http/Controllers/Recurring/DeleteController.php @@ -42,8 +42,6 @@ class DeleteController extends Controller /** * DeleteController constructor. - * - */ public function __construct() { @@ -65,13 +63,11 @@ class DeleteController extends Controller /** * Delete a recurring transaction form. * - * @param Recurrence $recurrence - * * @return Factory|View */ public function delete(Recurrence $recurrence) { - $subTitle = (string)trans('firefly.delete_recurring', ['title' => $recurrence->title]); + $subTitle = (string)trans('firefly.delete_recurring', ['title' => $recurrence->title]); // put previous url in session $this->rememberPreviousUrl('recurrences.delete.url'); @@ -83,16 +79,12 @@ class DeleteController extends Controller /** * Destroy the recurring transaction. * - * @param RecurringRepositoryInterface $repository - * @param Request $request - * @param Recurrence $recurrence - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function destroy(RecurringRepositoryInterface $repository, Request $request, Recurrence $recurrence) { $repository->destroy($recurrence); - $request->session()->flash('success', (string)trans('firefly.' . 'recurrence_deleted', ['title' => $recurrence->title])); + $request->session()->flash('success', (string)trans('firefly.recurrence_deleted', ['title' => $recurrence->title])); app('preferences')->mark(); return redirect($this->getPreviousUrl('recurrences.delete.url')); diff --git a/app/Http/Controllers/Recurring/EditController.php b/app/Http/Controllers/Recurring/EditController.php index f61ae3ac60..7cf6578904 100644 --- a/app/Http/Controllers/Recurring/EditController.php +++ b/app/Http/Controllers/Recurring/EditController.php @@ -37,11 +37,11 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; use Symfony\Component\HttpFoundation\ParameterBag; /** - * * Class EditController */ class EditController extends Controller @@ -53,8 +53,6 @@ class EditController extends Controller /** * EditController constructor. - * - */ public function __construct() { @@ -80,34 +78,31 @@ class EditController extends Controller /** * Edit a recurring transaction. * - * @param Request $request - * @param Recurrence $recurrence - * * @return Factory|View - * @throws FireflyException * + * @throws FireflyException */ public function edit(Request $request, Recurrence $recurrence) { // TODO this should be in the repository. - $count = $recurrence->recurrenceTransactions()->count(); + $count = $recurrence->recurrenceTransactions()->count(); if (0 === $count) { throw new FireflyException('This recurring transaction has no meta-data. You will have to delete it and recreate it. Sorry!'); } /** @var RecurrenceTransformer $transformer */ - $transformer = app(RecurrenceTransformer::class); + $transformer = app(RecurrenceTransformer::class); $transformer->setParameters(new ParameterBag()); - $array = $transformer->transform($recurrence); - $budgets = app('expandedform')->makeSelectListWithEmpty($this->budgetRepos->getActiveBudgets()); - $bills = app('expandedform')->makeSelectListWithEmpty($this->billRepository->getActiveBills()); + $array = $transformer->transform($recurrence); + $budgets = app('expandedform')->makeSelectListWithEmpty($this->budgetRepos->getActiveBudgets()); + $bills = app('expandedform')->makeSelectListWithEmpty($this->billRepository->getActiveBills()); /** @var RecurrenceRepetition $repetition */ - $repetition = $recurrence->recurrenceRepetitions()->first(); - $currentRepType = $repetition->repetition_type; + $repetition = $recurrence->recurrenceRepetitions()->first(); + $currentRepType = $repetition->repetition_type; if ('' !== $repetition->repetition_moment) { - $currentRepType .= ',' . $repetition->repetition_moment; + $currentRepType .= ','.$repetition->repetition_moment; } // put previous url in session if not redirect from store (not "return_to_edit"). @@ -116,8 +111,8 @@ class EditController extends Controller } $request->session()->forget('recurrences.edit.fromUpdate'); - $repetitionEnd = 'forever'; - $repetitionEnds = [ + $repetitionEnd = 'forever'; + $repetitionEnds = [ 'forever' => (string)trans('firefly.repeat_forever'), 'until_date' => (string)trans('firefly.repeat_until_date'), 'times' => (string)trans('firefly.repeat_times'), @@ -129,7 +124,7 @@ class EditController extends Controller $repetitionEnd = 'times'; } - $weekendResponses = [ + $weekendResponses = [ RecurrenceRepetition::WEEKEND_DO_NOTHING => (string)trans('firefly.do_nothing'), RecurrenceRepetition::WEEKEND_SKIP_CREATION => (string)trans('firefly.skip_transaction'), RecurrenceRepetition::WEEKEND_TO_FRIDAY => (string)trans('firefly.jump_to_friday'), @@ -167,25 +162,26 @@ class EditController extends Controller /** * Update the recurring transaction. * - * @param RecurrenceFormRequest $request - * @param Recurrence $recurrence + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector * @throws FireflyException */ public function update(RecurrenceFormRequest $request, Recurrence $recurrence) { - $data = $request->getAll(); + $data = $request->getAll(); $this->recurring->update($recurrence, $data); $request->session()->flash('success', (string)trans('firefly.updated_recurrence', ['title' => $recurrence->title])); + Log::channel('audit')->info(sprintf('Updated recurrence #%d.', $recurrence->id), $data); // store new attachment(s): - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($recurrence, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } diff --git a/app/Http/Controllers/Recurring/IndexController.php b/app/Http/Controllers/Recurring/IndexController.php index c7af4775b4..ed2e3775ba 100644 --- a/app/Http/Controllers/Recurring/IndexController.php +++ b/app/Http/Controllers/Recurring/IndexController.php @@ -34,12 +34,9 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; use Symfony\Component\HttpFoundation\ParameterBag; /** - * * Class IndexController */ class IndexController extends Controller @@ -50,8 +47,6 @@ class IndexController extends Controller /** * IndexController constructor. - * - */ public function __construct() { @@ -74,20 +69,17 @@ class IndexController extends Controller * TODO the notes of a recurrence are pretty pointless at this moment. * Show all recurring transactions. * - * @param Request $request - * * @return Factory|View + * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function index(Request $request) { - $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - $collection = $this->recurringRepos->get(); - $today = today(config('app.timezone')); - $year = today(config('app.timezone')); + $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $collection = $this->recurringRepos->get(); + $today = today(config('app.timezone')); + $year = today(config('app.timezone')); // split collection $total = $collection->count(); @@ -97,7 +89,8 @@ class IndexController extends Controller $transformer = app(RecurrenceTransformer::class); $transformer->setParameters(new ParameterBag()); - $recurring = []; + $recurring = []; + /** @var Recurrence $recurrence */ foreach ($recurrences as $recurrence) { $year->addYear(); @@ -111,7 +104,7 @@ class IndexController extends Controller $array['repeat_until'] = null === $array['repeat_until'] ? null : new Carbon($array['repeat_until']); $array['latest_date'] = null === $array['latest_date'] ? null : new Carbon($array['latest_date']); // lazy but OK - $array['attachments'] = $recurrence->attachments()->count(); + $array['attachments'] = $recurrence->attachments()->count(); // make carbon objects out of occurrences foreach ($array['repetitions'] as $repIndex => $repetition) { @@ -120,11 +113,11 @@ class IndexController extends Controller } } - $recurring[] = $array; + $recurring[] = $array; } - $paginator = new LengthAwarePaginator($recurring, $total, $pageSize, $page); + $paginator = new LengthAwarePaginator($recurring, $total, $pageSize, $page); $paginator->setPath(route('recurring.index')); - $today = today(config('app.timezone')); + $today = today(config('app.timezone')); $this->verifyRecurringCronJob(); diff --git a/app/Http/Controllers/Recurring/ShowController.php b/app/Http/Controllers/Recurring/ShowController.php index fa9b4a2445..09863759f1 100644 --- a/app/Http/Controllers/Recurring/ShowController.php +++ b/app/Http/Controllers/Recurring/ShowController.php @@ -38,7 +38,6 @@ use Illuminate\View\View; use Symfony\Component\HttpFoundation\ParameterBag; /** - * * Class ShowController */ class ShowController extends Controller @@ -50,8 +49,6 @@ class ShowController extends Controller /** * IndexController constructor. - * - */ public function __construct() { @@ -74,16 +71,16 @@ class ShowController extends Controller /** * Show a single recurring transaction. * - * @param Recurrence $recurrence - * * @return Factory|View + * * @throws FireflyException */ public function show(Recurrence $recurrence) { - $repos = app(AttachmentRepositoryInterface::class); + $repos = app(AttachmentRepositoryInterface::class); + /** @var RecurrenceTransformer $transformer */ - $transformer = app(RecurrenceTransformer::class); + $transformer = app(RecurrenceTransformer::class); $transformer->setParameters(new ParameterBag()); $array = $transformer->transform($recurrence); @@ -108,15 +105,15 @@ class ShowController extends Controller $attachments = $recurrence->attachments()->get(); $array['attachments'] = []; $attachmentTransformer = app(AttachmentTransformer::class); + /** @var Attachment $attachment */ foreach ($attachments as $attachment) { $item = $attachmentTransformer->transform($attachment); $item['file_exists'] = $repos->exists($attachment); // TODO this should be part of the transformer $array['attachments'][] = $item; - } - $subTitle = (string)trans('firefly.overview_for_recurrence', ['title' => $recurrence->title]); + $subTitle = (string)trans('firefly.overview_for_recurrence', ['title' => $recurrence->title]); return view('recurring.show', compact('recurrence', 'subTitle', 'array', 'groups', 'today')); } diff --git a/app/Http/Controllers/Recurring/TriggerController.php b/app/Http/Controllers/Recurring/TriggerController.php index 173f9e5375..77d5357274 100644 --- a/app/Http/Controllers/Recurring/TriggerController.php +++ b/app/Http/Controllers/Recurring/TriggerController.php @@ -1,6 +1,5 @@ getAll(); - $date = $all['date']; + $all = $request->getAll(); + $date = $all['date']; // grab the date from the last time the recurrence fired: - $backupDate = $recurrence->latest_date; + $backupDate = $recurrence->latest_date; // fire the recurring cron job on the given date, then post-date the created transaction. - Log::info(sprintf('Trigger: will now fire recurring cron job task for date "%s".', $date->format('Y-m-d H:i:s'))); + app('log')->info(sprintf('Trigger: will now fire recurring cron job task for date "%s".', $date->format('Y-m-d H:i:s'))); + /** @var CreateRecurringTransactions $job */ - $job = app(CreateRecurringTransactions::class); + $job = app(CreateRecurringTransactions::class); $job->setRecurrences(new Collection([$recurrence])); $job->setDate($date); $job->setForce(false); $job->handle(); - Log::debug('Done with recurrence.'); + app('log')->debug('Done with recurrence.'); + + $groups = $job->getGroups(); - $groups = $job->getGroups(); /** @var TransactionGroup $group */ foreach ($groups as $group) { /** @var TransactionJournal $journal */ foreach ($group->transactionJournals as $journal) { - Log::debug(sprintf('Set date of journal #%d to today!', $journal->id)); + app('log')->debug(sprintf('Set date of journal #%d to today!', $journal->id)); $journal->date = today(config('app.timezone')); $journal->save(); } @@ -87,7 +81,6 @@ class TriggerController extends Controller $request->session()->flash('success_url', route('transactions.show', [$first->id])); } - return redirect(route('recurring.show', [$recurrence->id])); } } diff --git a/app/Http/Controllers/Report/AccountController.php b/app/Http/Controllers/Report/AccountController.php index 323f289fa7..d99ec61237 100644 --- a/app/Http/Controllers/Report/AccountController.php +++ b/app/Http/Controllers/Report/AccountController.php @@ -29,8 +29,6 @@ use FireflyIII\Http\Controllers\Controller; use FireflyIII\Repositories\Account\AccountTaskerInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class AccountController. @@ -40,17 +38,12 @@ class AccountController extends Controller /** * Show partial overview for account balances. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return string * @throws FireflyException */ public function general(Collection $accounts, Carbon $start, Carbon $end): string { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('account-report'); @@ -62,12 +55,14 @@ class AccountController extends Controller /** @var AccountTaskerInterface $accountTasker */ $accountTasker = app(AccountTaskerInterface::class); $accountReport = $accountTasker->getAccountReport($accounts, $start, $end); + try { $result = view('reports.partials.accounts', compact('accountReport'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.accounts: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.accounts: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } diff --git a/app/Http/Controllers/Report/BalanceController.php b/app/Http/Controllers/Report/BalanceController.php index b5f17b782c..1810a47d48 100644 --- a/app/Http/Controllers/Report/BalanceController.php +++ b/app/Http/Controllers/Report/BalanceController.php @@ -32,8 +32,6 @@ use FireflyIII\Models\Budget; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class BalanceController. @@ -62,19 +60,17 @@ class BalanceController extends Controller /** * Show overview of budget balances. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function general(Collection $accounts, Carbon $start, Carbon $end) { - $report = [ + $report = [ 'budgets' => [], 'accounts' => [], ]; + /** @var Account $account */ foreach ($accounts as $account) { $report['accounts'][$account->id] = [ @@ -89,23 +85,26 @@ class BalanceController extends Controller /** @var Budget $budget */ foreach ($budgets as $budget) { - $budgetId = $budget->id; - $report['budgets'][$budgetId] = [ + $budgetId = $budget->id; + $report['budgets'][$budgetId] = [ 'budget_id' => $budgetId, 'budget_name' => $budget->name, 'spent' => [], // per account 'sums' => [], // per currency ]; - $spent = []; + $spent = []; + /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); - $journals = $collector->setRange($start, $end)->setSourceAccounts($accounts)->setTypes([TransactionType::WITHDRAWAL])->setBudget($budget) - ->getExtractedJournals(); + $collector = app(GroupCollectorInterface::class); + $journals = $collector->setRange($start, $end)->setSourceAccounts($accounts)->setTypes([TransactionType::WITHDRAWAL])->setBudget($budget) + ->getExtractedJournals() + ; + /** @var array $journal */ foreach ($journals as $journal) { - $sourceAccount = $journal['source_account_id']; - $currencyId = $journal['currency_id']; - $spent[$sourceAccount] = $spent[$sourceAccount] ?? [ + $sourceAccount = $journal['source_account_id']; + $currencyId = $journal['currency_id']; + $spent[$sourceAccount] ??= [ 'source_account_id' => $sourceAccount, 'currency_id' => $journal['currency_id'], 'currency_code' => $journal['currency_code'], @@ -114,10 +113,10 @@ class BalanceController extends Controller 'currency_decimal_places' => $journal['currency_decimal_places'], 'spent' => '0', ]; - $spent[$sourceAccount]['spent'] = bcadd($spent[$sourceAccount]['spent'], $journal['amount']); + $spent[$sourceAccount]['spent'] = bcadd($spent[$sourceAccount]['spent'], $journal['amount']); // also fix sum: - $report['sums'][$budgetId][$currencyId] = $report['sums'][$budgetId][$currencyId] ?? [ + $report['sums'][$budgetId][$currencyId] ??= [ 'sum' => '0', 'currency_id' => $journal['currency_id'], 'currency_code' => $journal['currency_code'], @@ -125,8 +124,8 @@ class BalanceController extends Controller 'currency_symbol' => $journal['currency_symbol'], 'currency_decimal_places' => $journal['currency_decimal_places'], ]; - $report['sums'][$budgetId][$currencyId]['sum'] = bcadd($report['sums'][$budgetId][$currencyId]['sum'], $journal['amount']); - $report['accounts'][$sourceAccount]['sum'] = bcadd($report['accounts'][$sourceAccount]['sum'], $journal['amount']); + $report['sums'][$budgetId][$currencyId]['sum'] = bcadd($report['sums'][$budgetId][$currencyId]['sum'], $journal['amount']); + $report['accounts'][$sourceAccount]['sum'] = bcadd($report['accounts'][$sourceAccount]['sum'], $journal['amount']); // add currency info for account sum $report['accounts'][$sourceAccount]['currency_id'] = $journal['currency_id']; @@ -138,12 +137,14 @@ class BalanceController extends Controller $report['budgets'][$budgetId]['spent'] = $spent; // get transactions in budget } + try { $result = view('reports.partials.balance', compact('report'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.balance: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.balance: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } diff --git a/app/Http/Controllers/Report/BillController.php b/app/Http/Controllers/Report/BillController.php index bc143c05ff..66c910b904 100644 --- a/app/Http/Controllers/Report/BillController.php +++ b/app/Http/Controllers/Report/BillController.php @@ -29,8 +29,6 @@ use FireflyIII\Helpers\Report\ReportHelperInterface; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Support\CacheProperties; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class BillController @@ -38,16 +36,13 @@ use Throwable; class BillController extends Controller { /** - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * * @return mixed|string + * * @throws FireflyException */ public function overview(Collection $accounts, Carbon $start, Carbon $end) // chart properties for cache: { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('bill-report'); @@ -55,15 +50,18 @@ class BillController extends Controller if ($cache->has()) { return $cache->get(); } + /** @var ReportHelperInterface $helper */ $helper = app(ReportHelperInterface::class); $report = $helper->getBillReport($accounts, $start, $end); + try { $result = view('reports.partials.bills', compact('report'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.budgets: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.budgets: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } diff --git a/app/Http/Controllers/Report/BudgetController.php b/app/Http/Controllers/Report/BudgetController.php index e4d3dea46d..9e95e2ba43 100644 --- a/app/Http/Controllers/Report/BudgetController.php +++ b/app/Http/Controllers/Report/BudgetController.php @@ -34,10 +34,7 @@ use FireflyIII\Support\Http\Controllers\BasicDataSupport; use FireflyIII\Support\Report\Budget\BudgetReportGenerator; use Illuminate\Contracts\View\Factory; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use JsonException; -use Throwable; /** * Class BudgetController. @@ -50,8 +47,6 @@ class BudgetController extends Controller /** * ExpenseReportController constructor. - * - */ public function __construct() { @@ -68,14 +63,9 @@ class BudgetController extends Controller /** * Partial used in the budget report. * - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View + * * @throws FireflyException - * @throws JsonException */ public function accountPerBudget(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) { @@ -89,17 +79,12 @@ class BudgetController extends Controller $generator->setEnd($end); $generator->accountPerBudget(); - $report = $generator->getReport(); + $report = $generator->getReport(); return view('reports.budget.partials.account-per-budget', compact('report', 'budgets')); } /** - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View */ public function accounts(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) @@ -107,10 +92,11 @@ class BudgetController extends Controller $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $budgets); $report = []; $sums = []; + /** @var Account $account */ foreach ($accounts as $account) { - $accountId = $account->id; - $report[$accountId] = $report[$accountId] ?? [ + $accountId = $account->id; + $report[$accountId] ??= [ 'name' => $account->name, 'id' => $account->id, 'iban' => $account->iban, @@ -120,8 +106,8 @@ class BudgetController extends Controller // loop expenses. foreach ($spent as $currency) { - $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $currencyId = $currency['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -131,7 +117,7 @@ class BudgetController extends Controller foreach ($currency['budgets'] as $budget) { foreach ($budget['transaction_journals'] as $journal) { $sourceAccountId = $journal['source_account_id']; - $report[$sourceAccountId]['currencies'][$currencyId] = $report[$sourceAccountId]['currencies'][$currencyId] ?? [ + $report[$sourceAccountId]['currencies'][$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -151,24 +137,20 @@ class BudgetController extends Controller } /** - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function avgExpenses(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) { - $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $budgets); - $result = []; + $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $budgets); + $result = []; foreach ($spent as $currency) { foreach ($currency['budgets'] as $budget) { foreach ($budget['transaction_journals'] as $journal) { - $destinationId = $journal['destination_account_id']; - $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ + $destinationId = $journal['destination_account_id']; + $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); + $result[$key] ??= [ 'transactions' => 0, 'sum' => '0', 'avg' => '0', @@ -180,7 +162,7 @@ class BudgetController extends Controller 'currency_symbol' => $currency['currency_symbol'], 'currency_decimal_places' => $currency['currency_decimal_places'], ]; - $result[$key]['transactions']++; + ++$result[$key]['transactions']; $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); $result[$key]['avg_float'] = (float)$result[$key]['avg']; // intentional float @@ -194,10 +176,11 @@ class BudgetController extends Controller try { $result = view('reports.budget.partials.avg-expenses', compact('result'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($result, 0, $e); } @@ -205,11 +188,6 @@ class BudgetController extends Controller } /** - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View */ public function budgets(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) @@ -217,38 +195,39 @@ class BudgetController extends Controller $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $budgets); $sums = []; $report = []; + /** @var Budget $budget */ foreach ($budgets as $budget) { - $budgetId = $budget->id; - $report[$budgetId] = $report[$budgetId] ?? [ + $budgetId = $budget->id; + $report[$budgetId] ??= [ 'name' => $budget->name, 'id' => $budget->id, 'currencies' => [], ]; } foreach ($spent as $currency) { - $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $currencyId = $currency['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], 'currency_decimal_places' => $currency['currency_decimal_places'], 'sum' => '0', ]; + /** @var array $budget */ foreach ($currency['budgets'] as $budget) { $budgetId = $budget['id']; foreach ($budget['transaction_journals'] as $journal) { // add currency info to report array: - $report[$budgetId]['currencies'][$currencyId] = $report[$budgetId]['currencies'][$currencyId] ?? [ + $report[$budgetId]['currencies'][$currencyId] ??= [ 'sum' => '0', 'sum_pct' => '0', 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], 'currency_decimal_places' => $currency['currency_decimal_places'], - ]; $report[$budgetId]['currencies'][$currencyId]['sum'] = bcadd($report[$budgetId]['currencies'][$currencyId]['sum'], $journal['amount']); $sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['sum'], $journal['amount']); @@ -259,9 +238,9 @@ class BudgetController extends Controller // loop again to get percentages. foreach ($report as $budgetId => $data) { foreach ($data['currencies'] as $currencyId => $dataX) { - $sum = $dataX['sum'] ?? '0'; - $total = $sums[$currencyId]['sum'] ?? '0'; - $pct = '0'; + $sum = $dataX['sum']; + $total = $sums[$currencyId]['sum'] ?? '0'; + $pct = '0'; if (0 !== bccomp($sum, '0') && 0 !== bccomp($total, '9')) { $pct = round((float)bcmul(bcdiv($sum, $total), '100')); // intentional float } @@ -275,13 +254,9 @@ class BudgetController extends Controller /** * Show partial overview of budgets. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException - * @throws JsonException */ public function general(Collection $accounts, Carbon $start, Carbon $end) { @@ -294,7 +269,7 @@ class BudgetController extends Controller $generator->setEnd($end); $generator->general(); - $report = $generator->getReport(); + $report = $generator->getReport(); return view('reports.partials.budgets', compact('report'))->render(); } @@ -302,16 +277,13 @@ class BudgetController extends Controller /** * Show budget overview for a period. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * * @return mixed|string + * * @throws FireflyException */ public function period(Collection $accounts, Carbon $start, Carbon $end) { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('budget-period-report'); @@ -323,17 +295,17 @@ class BudgetController extends Controller $periods = app('navigation')->listOfPeriods($start, $end); $keyFormat = app('navigation')->preferredCarbonFormat($start, $end); // list expenses for budgets in account(s) - $expenses = $this->opsRepository->listExpenses($start, $end, $accounts); + $expenses = $this->opsRepository->listExpenses($start, $end, $accounts); - $report = []; + $report = []; foreach ($expenses as $currency) { foreach ($currency['budgets'] as $budget) { $count = 0; foreach ($budget['transaction_journals'] as $journal) { - $count++; + ++$count; $key = sprintf('%d-%d', $budget['id'], $currency['currency_id']); $dateKey = $journal['date']->format($keyFormat); - $report[$key] = $report[$key] ?? [ + $report[$key] ??= [ 'id' => $budget['id'], 'name' => sprintf('%s (%s)', $budget['name'], $currency['currency_name']), 'sum' => '0', @@ -344,19 +316,21 @@ class BudgetController extends Controller 'currency_decimal_places' => $currency['currency_decimal_places'], 'entries' => [], ]; - $report[$key]['entries'][$dateKey] = $report[$key] ['entries'][$dateKey] ?? '0'; - $report[$key]['entries'][$dateKey] = bcadd($journal['amount'], $report[$key] ['entries'][$dateKey]); - $report[$key]['sum'] = bcadd($report[$key] ['sum'], $journal['amount']); + $report[$key]['entries'][$dateKey] ??= '0'; + $report[$key]['entries'][$dateKey] = bcadd($journal['amount'], $report[$key]['entries'][$dateKey]); + $report[$key]['sum'] = bcadd($report[$key]['sum'], $journal['amount']); $report[$key]['avg'] = bcdiv($report[$key]['sum'], (string)count($periods)); } } } + try { $result = view('reports.partials.budget-period', compact('report', 'periods'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } @@ -366,18 +340,14 @@ class BudgetController extends Controller } /** - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function topExpenses(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) { - $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $budgets); - $result = []; + $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $budgets); + $result = []; foreach ($spent as $currency) { foreach ($currency['budgets'] as $budget) { foreach ($budget['transaction_journals'] as $journal) { @@ -407,9 +377,10 @@ class BudgetController extends Controller try { $result = view('reports.budget.partials.top-expenses', compact('result'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } diff --git a/app/Http/Controllers/Report/CategoryController.php b/app/Http/Controllers/Report/CategoryController.php index bced1f2231..c3560c2219 100644 --- a/app/Http/Controllers/Report/CategoryController.php +++ b/app/Http/Controllers/Report/CategoryController.php @@ -35,9 +35,7 @@ use FireflyIII\Support\Http\Controllers\BasicDataSupport; use FireflyIII\Support\Report\Category\CategoryReportGenerator; use Illuminate\Contracts\View\Factory; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Throwable; /** * Class CategoryController. @@ -51,8 +49,6 @@ class CategoryController extends Controller /** * ExpenseReportController constructor. - * - */ public function __construct() { @@ -68,11 +64,6 @@ class CategoryController extends Controller } /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View */ public function accountPerCategory(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) @@ -80,10 +71,11 @@ class CategoryController extends Controller $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $categories); $earned = $this->opsRepository->listIncome($start, $end, $accounts, $categories); $report = []; + /** @var Account $account */ foreach ($accounts as $account) { - $accountId = $account->id; - $report[$accountId] = $report[$accountId] ?? [ + $accountId = $account->id; + $report[$accountId] ??= [ 'name' => $account->name, 'id' => $account->id, 'iban' => $account->iban, @@ -98,8 +90,8 @@ class CategoryController extends Controller /** @var array $category */ foreach ($currency['categories'] as $category) { foreach ($category['transaction_journals'] as $journal) { - $sourceAccountId = $journal['source_account_id']; - $report[$sourceAccountId]['currencies'][$currencyId] = $report[$sourceAccountId]['currencies'][$currencyId] ?? [ + $sourceAccountId = $journal['source_account_id']; + $report[$sourceAccountId]['currencies'][$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -108,13 +100,11 @@ class CategoryController extends Controller ]; $report[$sourceAccountId]['currencies'][$currencyId]['categories'][$category['id']] - = $report[$sourceAccountId]['currencies'][$currencyId]['categories'][$category['id']] - ?? - [ - 'spent' => '0', - 'earned' => '0', - 'sum' => '0', - ]; + ??= [ + 'spent' => '0', + 'earned' => '0', + 'sum' => '0', + ]; $report[$sourceAccountId]['currencies'][$currencyId]['categories'][$category['id']]['spent'] = bcadd( $report[$sourceAccountId]['currencies'][$currencyId]['categories'][$category['id']]['spent'], $journal['amount'] @@ -135,22 +125,19 @@ class CategoryController extends Controller foreach ($category['transaction_journals'] as $journal) { $destinationId = $journal['destination_account_id']; $report[$destinationId]['currencies'][$currencyId] - = $report[$destinationId]['currencies'][$currencyId] - ?? [ - 'currency_id' => $currency['currency_id'], - 'currency_symbol' => $currency['currency_symbol'], - 'currency_name' => $currency['currency_name'], - 'currency_decimal_places' => $currency['currency_decimal_places'], - 'categories' => [], - ]; + ??= [ + 'currency_id' => $currency['currency_id'], + 'currency_symbol' => $currency['currency_symbol'], + 'currency_name' => $currency['currency_name'], + 'currency_decimal_places' => $currency['currency_decimal_places'], + 'categories' => [], + ]; $report[$destinationId]['currencies'][$currencyId]['categories'][$category['id']] - = $report[$destinationId]['currencies'][$currencyId]['categories'][$category['id']] - ?? - [ - 'spent' => '0', - 'earned' => '0', - 'sum' => '0', - ]; + ??= [ + 'spent' => '0', + 'earned' => '0', + 'sum' => '0', + ]; $report[$destinationId]['currencies'][$currencyId]['categories'][$category['id']]['earned'] = bcadd( $report[$destinationId]['currencies'][$currencyId]['categories'][$category['id']]['earned'], $journal['amount'] @@ -167,12 +154,9 @@ class CategoryController extends Controller } /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function accounts(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) { @@ -180,10 +164,11 @@ class CategoryController extends Controller $earned = $this->opsRepository->listIncome($start, $end, $accounts, $categories); $report = []; $sums = []; + /** @var Account $account */ foreach ($accounts as $account) { - $accountId = $account->id; - $report[$accountId] = $report[$accountId] ?? [ + $accountId = $account->id; + $report[$accountId] ??= [ 'name' => $account->name, 'id' => $account->id, 'iban' => $account->iban, @@ -193,8 +178,8 @@ class CategoryController extends Controller // loop expenses. foreach ($spent as $currency) { - $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $currencyId = $currency['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -206,7 +191,7 @@ class CategoryController extends Controller foreach ($currency['categories'] as $category) { foreach ($category['transaction_journals'] as $journal) { $sourceAccountId = $journal['source_account_id']; - $report[$sourceAccountId]['currencies'][$currencyId] = $report[$sourceAccountId]['currencies'][$currencyId] ?? [ + $report[$sourceAccountId]['currencies'][$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -231,8 +216,8 @@ class CategoryController extends Controller // loop income. foreach ($earned as $currency) { - $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $currencyId = $currency['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -244,7 +229,7 @@ class CategoryController extends Controller foreach ($currency['categories'] as $category) { foreach ($category['transaction_journals'] as $journal) { $destinationAccountId = $journal['destination_account_id']; - $report[$destinationAccountId]['currencies'][$currencyId] = $report[$destinationAccountId]['currencies'][$currencyId] ?? [ + $report[$destinationAccountId]['currencies'][$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -271,24 +256,20 @@ class CategoryController extends Controller } /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function avgExpenses(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) { - $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $categories); - $result = []; + $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $categories); + $result = []; foreach ($spent as $currency) { foreach ($currency['categories'] as $category) { foreach ($category['transaction_journals'] as $journal) { - $destinationId = $journal['destination_account_id']; - $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ + $destinationId = $journal['destination_account_id']; + $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); + $result[$key] ??= [ 'transactions' => 0, 'sum' => '0', 'avg' => '0', @@ -300,7 +281,7 @@ class CategoryController extends Controller 'currency_symbol' => $currency['currency_symbol'], 'currency_decimal_places' => $currency['currency_decimal_places'], ]; - $result[$key]['transactions']++; + ++$result[$key]['transactions']; $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); $result[$key]['avg_float'] = (float)$result[$key]['avg']; // intentional float @@ -314,9 +295,10 @@ class CategoryController extends Controller try { $result = view('reports.category.partials.avg-expenses', compact('result'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } @@ -324,24 +306,20 @@ class CategoryController extends Controller } /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function avgIncome(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) { - $spent = $this->opsRepository->listIncome($start, $end, $accounts, $categories); - $result = []; + $spent = $this->opsRepository->listIncome($start, $end, $accounts, $categories); + $result = []; foreach ($spent as $currency) { foreach ($currency['categories'] as $category) { foreach ($category['transaction_journals'] as $journal) { - $sourceId = $journal['source_account_id']; - $key = sprintf('%d-%d', $sourceId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ + $sourceId = $journal['source_account_id']; + $key = sprintf('%d-%d', $sourceId, $currency['currency_id']); + $result[$key] ??= [ 'transactions' => 0, 'sum' => '0', 'avg' => '0', @@ -353,7 +331,7 @@ class CategoryController extends Controller 'currency_symbol' => $currency['currency_symbol'], 'currency_decimal_places' => $currency['currency_decimal_places'], ]; - $result[$key]['transactions']++; + ++$result[$key]['transactions']; $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); $result[$key]['avg_float'] = (float)$result[$key]['avg']; @@ -367,9 +345,10 @@ class CategoryController extends Controller try { $result = view('reports.category.partials.avg-income', compact('result'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } @@ -377,12 +356,9 @@ class CategoryController extends Controller } /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function categories(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) { @@ -390,18 +366,19 @@ class CategoryController extends Controller $earned = $this->opsRepository->listIncome($start, $end, $accounts, $categories); $sums = []; $report = []; + /** @var Category $category */ foreach ($categories as $category) { - $categoryId = $category->id; - $report[$categoryId] = $report[$categoryId] ?? [ + $categoryId = $category->id; + $report[$categoryId] ??= [ 'name' => $category->name, 'id' => $category->id, 'currencies' => [], ]; } foreach ($spent as $currency) { - $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $currencyId = $currency['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -410,13 +387,14 @@ class CategoryController extends Controller 'spent_sum' => '0', 'total_sum' => '0', ]; + /** @var array $category */ foreach ($currency['categories'] as $category) { $categoryId = $category['id']; foreach ($category['transaction_journals'] as $journal) { // add currency info to report array: - $report[$categoryId]['currencies'][$currencyId] = $report[$categoryId]['currencies'][$currencyId] ?? [ + $report[$categoryId]['currencies'][$currencyId] ??= [ 'spent' => '0', 'earned' => '0', 'sum' => '0', @@ -434,15 +412,15 @@ class CategoryController extends Controller $journal['amount'] ); - $sums[$currencyId]['spent_sum'] = bcadd($sums[$currencyId]['spent_sum'], $journal['amount']); - $sums[$currencyId]['total_sum'] = bcadd($sums[$currencyId]['total_sum'], $journal['amount']); + $sums[$currencyId]['spent_sum'] = bcadd($sums[$currencyId]['spent_sum'], $journal['amount']); + $sums[$currencyId]['total_sum'] = bcadd($sums[$currencyId]['total_sum'], $journal['amount']); } } } foreach ($earned as $currency) { - $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $currencyId = $currency['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -451,13 +429,14 @@ class CategoryController extends Controller 'spent_sum' => '0', 'total_sum' => '0', ]; + /** @var array $category */ foreach ($currency['categories'] as $category) { $categoryId = $category['id']; foreach ($category['transaction_journals'] as $journal) { // add currency info to report array: - $report[$categoryId]['currencies'][$currencyId] = $report[$categoryId]['currencies'][$currencyId] ?? [ + $report[$categoryId]['currencies'][$currencyId] ??= [ 'spent' => '0', 'earned' => '0', 'sum' => '0', @@ -475,8 +454,8 @@ class CategoryController extends Controller $journal['amount'] ); - $sums[$currencyId]['earned_sum'] = bcadd($sums[$currencyId]['earned_sum'], $journal['amount']); - $sums[$currencyId]['total_sum'] = bcadd($sums[$currencyId]['total_sum'], $journal['amount']); + $sums[$currencyId]['earned_sum'] = bcadd($sums[$currencyId]['earned_sum'], $journal['amount']); + $sums[$currencyId]['total_sum'] = bcadd($sums[$currencyId]['total_sum'], $journal['amount']); } } } @@ -487,16 +466,13 @@ class CategoryController extends Controller /** * Show overview of expenses in category. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * * @return mixed|string + * * @throws FireflyException */ public function expenses(Collection $accounts, Carbon $start, Carbon $end) { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('category-period-expenses-report'); @@ -507,7 +483,7 @@ class CategoryController extends Controller // depending on the carbon format (a reliable way to determine the general date difference) // change the "listOfPeriods" call so the entire period gets included correctly. - $format = app('navigation')->preferredCarbonFormat($start, $end); + $format = app('navigation')->preferredCarbonFormat($start, $end); if ('Y' === $format) { $start->startOfYear(); @@ -523,8 +499,8 @@ class CategoryController extends Controller foreach ([$with, $without] as $set) { foreach ($set as $currencyId => $currencyRow) { foreach ($currencyRow['categories'] as $categoryId => $categoryRow) { - $key = sprintf('%d-%d', $currencyId, $categoryId); - $data[$key] = $data[$key] ?? [ + $key = sprintf('%d-%d', $currencyId, $categoryId); + $data[$key] ??= [ 'id' => $categoryRow['id'], 'title' => sprintf('%s (%s)', $categoryRow['name'], $currencyRow['currency_name']), 'currency_id' => $currencyRow['currency_id'], @@ -534,11 +510,10 @@ class CategoryController extends Controller 'currency_decimal_places' => $currencyRow['currency_decimal_places'], 'sum' => '0', 'entries' => [], - ]; foreach ($categoryRow['transaction_journals'] as $journal) { $date = $journal['date']->format($format); - $data[$key]['entries'][$date] = $data[$key]['entries'][$date] ?? '0'; + $data[$key]['entries'][$date] ??= '0'; $data[$key]['entries'][$date] = bcadd($data[$key]['entries'][$date], $journal['amount']); $data[$key]['sum'] = bcadd($data[$key]['sum'], $journal['amount']); } @@ -548,17 +523,17 @@ class CategoryController extends Controller $cache->store($data); - $report = $data; + $report = $data; try { $result = view('reports.partials.category-period', compact('report', 'periods'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render category::expenses: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render category::expenses: %s', $e->getMessage())); $result = sprintf('An error prevented Firefly III from rendering: %s. Apologies.', $e->getMessage()); + throw new FireflyException($result, 0, $e); } - $cache->store($result); return $result; @@ -567,17 +542,11 @@ class CategoryController extends Controller /** * Show overview of income in category. * - * @param Collection $accounts - * - * @param Carbon $start - * @param Carbon $end - * - * @return string * @throws FireflyException */ public function income(Collection $accounts, Carbon $start, Carbon $end): string { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('category-period-income-report'); @@ -588,7 +557,7 @@ class CategoryController extends Controller // depending on the carbon format (a reliable way to determine the general date difference) // change the "listOfPeriods" call so the entire period gets included correctly. - $format = app('navigation')->preferredCarbonFormat($start, $end); + $format = app('navigation')->preferredCarbonFormat($start, $end); if ('Y' === $format) { $start->startOfYear(); @@ -604,8 +573,8 @@ class CategoryController extends Controller foreach ([$with, $without] as $set) { foreach ($set as $currencyId => $currencyRow) { foreach ($currencyRow['categories'] as $categoryId => $categoryRow) { - $key = sprintf('%d-%d', $currencyId, $categoryId); - $data[$key] = $data[$key] ?? [ + $key = sprintf('%d-%d', $currencyId, $categoryId); + $data[$key] ??= [ 'id' => $categoryRow['id'], 'title' => sprintf('%s (%s)', $categoryRow['name'], $currencyRow['currency_name']), 'currency_id' => $currencyRow['currency_id'], @@ -615,11 +584,10 @@ class CategoryController extends Controller 'currency_decimal_places' => $currencyRow['currency_decimal_places'], 'sum' => '0', 'entries' => [], - ]; foreach ($categoryRow['transaction_journals'] as $journal) { $date = $journal['date']->format($format); - $data[$key]['entries'][$date] = $data[$key]['entries'][$date] ?? '0'; + $data[$key]['entries'][$date] ??= '0'; $data[$key]['entries'][$date] = bcadd($data[$key]['entries'][$date], $journal['amount']); $data[$key]['sum'] = bcadd($data[$key]['sum'], $journal['amount']); } @@ -627,17 +595,17 @@ class CategoryController extends Controller } } - $report = $data; + $report = $data; try { $result = view('reports.partials.category-period', compact('report', 'periods'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render category::expenses: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render category::expenses: %s', $e->getMessage())); $result = sprintf('An error prevented Firefly III from rendering: %s. Apologies.', $e->getMessage()); + throw new FireflyException($result, 0, $e); } - $cache->store($result); return $result; @@ -646,17 +614,12 @@ class CategoryController extends Controller /** * Show overview of category transactions on the default report. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return string * @throws FireflyException */ public function operations(Collection $accounts, Carbon $start, Carbon $end): string { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('category-report'); @@ -671,15 +634,15 @@ class CategoryController extends Controller $generator->setStart($start); $generator->setEnd($end); $generator->operations(); - $report = $generator->getReport(); - + $report = $generator->getReport(); try { - $result = (string)view('reports.partials.categories', compact('report'))->render(); + $result = view('reports.partials.categories', compact('report'))->render(); $cache->store($result); - } catch (Throwable $e) { - Log::error(sprintf('Could not render category::expenses: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render category::expenses: %s', $e->getMessage())); $result = sprintf('An error prevented Firefly III from rendering: %s. Apologies.', $e->getMessage()); + throw new FireflyException($result, 0, $e); } @@ -687,18 +650,14 @@ class CategoryController extends Controller } /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function topExpenses(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) { - $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $categories); - $result = []; + $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $categories); + $result = []; foreach ($spent as $currency) { foreach ($currency['categories'] as $category) { foreach ($category['transaction_journals'] as $journal) { @@ -728,9 +687,10 @@ class CategoryController extends Controller try { $result = view('reports.category.partials.top-expenses', compact('result'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($e->getMessage(), 0, $e); } @@ -738,18 +698,14 @@ class CategoryController extends Controller } /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function topIncome(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) { - $spent = $this->opsRepository->listIncome($start, $end, $accounts, $categories); - $result = []; + $spent = $this->opsRepository->listIncome($start, $end, $accounts, $categories); + $result = []; foreach ($spent as $currency) { foreach ($currency['categories'] as $category) { foreach ($category['transaction_journals'] as $journal) { @@ -779,9 +735,10 @@ class CategoryController extends Controller try { $result = view('reports.category.partials.top-income', compact('result'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($e->getMessage(), 0, $e); } diff --git a/app/Http/Controllers/Report/DoubleController.php b/app/Http/Controllers/Report/DoubleController.php index c72eb63732..9477589868 100644 --- a/app/Http/Controllers/Report/DoubleController.php +++ b/app/Http/Controllers/Report/DoubleController.php @@ -32,28 +32,20 @@ use FireflyIII\Repositories\Account\OperationsRepositoryInterface; use FireflyIII\Support\Http\Controllers\AugumentData; use Illuminate\Contracts\View\Factory; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Throwable; /** * Class DoubleController - * */ class DoubleController extends Controller { use AugumentData; - /** @var AccountRepositoryInterface The account repository */ - protected $accountRepository; - - /** @var OperationsRepositoryInterface */ - private $opsRepository; + protected AccountRepositoryInterface $accountRepository; + private OperationsRepositoryInterface $opsRepository; /** * Constructor for ExpenseController - * - */ public function __construct() { @@ -71,12 +63,8 @@ class DoubleController extends Controller } /** - * @param Collection $accounts - * @param Collection $doubles - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function avgExpenses(Collection $accounts, Collection $doubles, Carbon $start, Carbon $end) @@ -87,9 +75,9 @@ class DoubleController extends Controller $result = []; foreach ($spent as $currency) { foreach ($currency['transaction_journals'] as $journal) { - $sourceId = $journal['source_account_id']; - $key = sprintf('%d-%d', $sourceId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ + $sourceId = $journal['source_account_id']; + $key = sprintf('%d-%d', $sourceId, $currency['currency_id']); + $result[$key] ??= [ 'transactions' => 0, 'sum' => '0', 'avg' => '0', @@ -101,7 +89,7 @@ class DoubleController extends Controller 'currency_symbol' => $currency['currency_symbol'], 'currency_decimal_places' => $currency['currency_decimal_places'], ]; - $result[$key]['transactions']++; + ++$result[$key]['transactions']; $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); $result[$key]['avg_float'] = (float)$result[$key]['avg']; @@ -109,14 +97,15 @@ class DoubleController extends Controller } // sort by amount_float // sort temp array by amount. - $amounts = array_column($result, 'avg_float'); + $amounts = array_column($result, 'avg_float'); array_multisort($amounts, SORT_ASC, $result); try { $result = view('reports.double.partials.avg-expenses', compact('result'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($e->getMessage(), 0, $e); } @@ -124,12 +113,8 @@ class DoubleController extends Controller } /** - * @param Collection $accounts - * @param Collection $doubles - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function avgIncome(Collection $accounts, Collection $doubles, Carbon $start, Carbon $end) @@ -140,9 +125,9 @@ class DoubleController extends Controller $result = []; foreach ($spent as $currency) { foreach ($currency['transaction_journals'] as $journal) { - $destinationId = $journal['destination_account_id']; - $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ + $destinationId = $journal['destination_account_id']; + $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); + $result[$key] ??= [ 'transactions' => 0, 'sum' => '0', 'avg' => '0', @@ -154,7 +139,7 @@ class DoubleController extends Controller 'currency_symbol' => $currency['currency_symbol'], 'currency_decimal_places' => $currency['currency_decimal_places'], ]; - $result[$key]['transactions']++; + ++$result[$key]['transactions']; $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); $result[$key]['avg_float'] = (float)$result[$key]['avg']; @@ -162,14 +147,15 @@ class DoubleController extends Controller } // sort by amount_float // sort temp array by amount. - $amounts = array_column($result, 'avg_float'); + $amounts = array_column($result, 'avg_float'); array_multisort($amounts, SORT_DESC, $result); try { $result = view('reports.double.partials.avg-income', compact('result'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($e->getMessage(), 0, $e); } @@ -177,12 +163,9 @@ class DoubleController extends Controller } /** - * @param Collection $accounts - * @param Collection $double - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function operations(Collection $accounts, Collection $double, Carbon $start, Carbon $end) { @@ -191,15 +174,15 @@ class DoubleController extends Controller $report = []; $sums = []; // see what happens when we collect transactions. - $spent = $this->opsRepository->listExpenses($start, $end, $together); - $earned = $this->opsRepository->listIncome($start, $end, $together); + $spent = $this->opsRepository->listExpenses($start, $end, $together); + $earned = $this->opsRepository->listIncome($start, $end, $together); // group and list per account name (as long as its not in accounts, only in double) /** @var array $currency */ foreach ($spent as $currency) { $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $sums[$currencyId] ??= [ 'spent' => '0', 'earned' => '0', 'sum' => '0', @@ -212,12 +195,12 @@ class DoubleController extends Controller /** @var array $journal */ foreach ($currency['transaction_journals'] as $journal) { - $destId = $journal['destination_account_id']; - $destName = $journal['destination_account_name']; - $destIban = $journal['destination_account_iban']; - $genericName = $this->getCounterpartName($withCounterpart, $destId, $destName, $destIban); - $objectName = sprintf('%s (%s)', $genericName, $currency['currency_name']); - $report[$objectName] = $report[$objectName] ?? [ + $destId = $journal['destination_account_id']; + $destName = $journal['destination_account_name']; + $destIban = $journal['destination_account_iban']; + $genericName = $this->getCounterpartName($withCounterpart, $destId, $destName, $destIban); + $objectName = sprintf('%s (%s)', $genericName, $currency['currency_name']); + $report[$objectName] ??= [ 'dest_name' => '', 'dest_iban' => '', 'source_name' => '', @@ -236,10 +219,10 @@ class DoubleController extends Controller $report[$objectName]['dest_iban'] = $destIban; // add amounts: - $report[$objectName]['spent'] = bcadd($report[$objectName]['spent'], $journal['amount']); - $report[$objectName]['sum'] = bcadd($report[$objectName]['sum'], $journal['amount']); - $sums[$currencyId]['spent'] = bcadd($sums[$currencyId]['spent'], $journal['amount']); - $sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['sum'], $journal['amount']); + $report[$objectName]['spent'] = bcadd($report[$objectName]['spent'], $journal['amount']); + $report[$objectName]['sum'] = bcadd($report[$objectName]['sum'], $journal['amount']); + $sums[$currencyId]['spent'] = bcadd($sums[$currencyId]['spent'], $journal['amount']); + $sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['sum'], $journal['amount']); } } @@ -247,7 +230,7 @@ class DoubleController extends Controller foreach ($earned as $currency) { $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $sums[$currencyId] ??= [ 'spent' => '0', 'earned' => '0', 'sum' => '0', @@ -260,12 +243,12 @@ class DoubleController extends Controller /** @var array $journal */ foreach ($currency['transaction_journals'] as $journal) { - $sourceId = $journal['source_account_id']; - $sourceName = $journal['source_account_name']; - $sourceIban = $journal['source_account_iban']; - $genericName = $this->getCounterpartName($withCounterpart, $sourceId, $sourceName, $sourceIban); - $objectName = sprintf('%s (%s)', $genericName, $currency['currency_name']); - $report[$objectName] = $report[$objectName] ?? [ + $sourceId = $journal['source_account_id']; + $sourceName = $journal['source_account_name']; + $sourceIban = $journal['source_account_iban']; + $genericName = $this->getCounterpartName($withCounterpart, $sourceId, $sourceName, $sourceIban); + $objectName = sprintf('%s (%s)', $genericName, $currency['currency_name']); + $report[$objectName] ??= [ 'dest_name' => '', 'dest_iban' => '', 'source_name' => '', @@ -285,10 +268,10 @@ class DoubleController extends Controller $report[$objectName]['source_iban'] = $sourceIban; // add amounts: - $report[$objectName]['earned'] = bcadd($report[$objectName]['earned'], $journal['amount']); - $report[$objectName]['sum'] = bcadd($report[$objectName]['sum'], $journal['amount']); - $sums[$currencyId]['earned'] = bcadd($sums[$currencyId]['earned'], $journal['amount']); - $sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['sum'], $journal['amount']); + $report[$objectName]['earned'] = bcadd($report[$objectName]['earned'], $journal['amount']); + $report[$objectName]['sum'] = bcadd($report[$objectName]['sum'], $journal['amount']); + $sums[$currencyId]['earned'] = bcadd($sums[$currencyId]['earned'], $journal['amount']); + $sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['sum'], $journal['amount']); } } @@ -297,13 +280,6 @@ class DoubleController extends Controller /** * TODO this method is duplicated. - * - * @param Collection $accounts - * @param int $id - * @param string $name - * @param string|null $iban - * - * @return string */ private function getCounterpartName(Collection $accounts, int $id, string $name, ?string $iban): string { @@ -321,11 +297,6 @@ class DoubleController extends Controller } /** - * @param Collection $accounts - * @param Collection $double - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View */ public function operationsPerAsset(Collection $accounts, Collection $double, Carbon $start, Carbon $end) @@ -335,15 +306,15 @@ class DoubleController extends Controller $report = []; $sums = []; // see what happens when we collect transactions. - $spent = $this->opsRepository->listExpenses($start, $end, $together); - $earned = $this->opsRepository->listIncome($start, $end, $together); + $spent = $this->opsRepository->listExpenses($start, $end, $together); + $earned = $this->opsRepository->listIncome($start, $end, $together); // group and list per account name (as long as its not in accounts, only in double) /** @var array $currency */ foreach ($spent as $currency) { $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $sums[$currencyId] ??= [ 'spent' => '0', 'earned' => '0', 'sum' => '0', @@ -356,8 +327,8 @@ class DoubleController extends Controller /** @var array $journal */ foreach ($currency['transaction_journals'] as $journal) { - $objectName = sprintf('%s (%s)', $journal['source_account_name'], $currency['currency_name']); - $report[$objectName] = $report[$objectName] ?? [ + $objectName = sprintf('%s (%s)', $journal['source_account_name'], $currency['currency_name']); + $report[$objectName] ??= [ 'account_id' => $journal['source_account_id'], 'account_name' => $objectName, 'currency_id' => $currency['currency_id'], @@ -382,7 +353,7 @@ class DoubleController extends Controller foreach ($earned as $currency) { $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $sums[$currencyId] ??= [ 'spent' => '0', 'earned' => '0', 'sum' => '0', @@ -395,8 +366,8 @@ class DoubleController extends Controller /** @var array $journal */ foreach ($currency['transaction_journals'] as $journal) { - $objectName = sprintf('%s (%s)', $journal['destination_account_name'], $currency['currency_name']); - $report[$objectName] = $report[$objectName] ?? [ + $objectName = sprintf('%s (%s)', $journal['destination_account_name'], $currency['currency_name']); + $report[$objectName] ??= [ 'account_id' => $journal['destination_account_id'], 'account_name' => $objectName, 'currency_id' => $currency['currency_id'], @@ -421,12 +392,8 @@ class DoubleController extends Controller } /** - * @param Collection $accounts - * @param Collection $doubles - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function topExpenses(Collection $accounts, Collection $doubles, Carbon $start, Carbon $end) @@ -457,14 +424,15 @@ class DoubleController extends Controller } // sort by amount_float // sort temp array by amount. - $amounts = array_column($result, 'amount_float'); + $amounts = array_column($result, 'amount_float'); array_multisort($amounts, SORT_ASC, $result); try { $result = view('reports.double.partials.top-expenses', compact('result'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($e->getMessage(), 0, $e); } @@ -472,12 +440,8 @@ class DoubleController extends Controller } /** - * @param Collection $accounts - * @param Collection $doubles - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function topIncome(Collection $accounts, Collection $doubles, Carbon $start, Carbon $end) @@ -508,14 +472,15 @@ class DoubleController extends Controller } // sort by amount_float // sort temp array by amount. - $amounts = array_column($result, 'amount_float'); + $amounts = array_column($result, 'amount_float'); array_multisort($amounts, SORT_DESC, $result); try { $result = view('reports.double.partials.top-income', compact('result'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($e->getMessage(), 0, $e); } diff --git a/app/Http/Controllers/Report/OperationsController.php b/app/Http/Controllers/Report/OperationsController.php index 9eb7d89b40..de27b13d04 100644 --- a/app/Http/Controllers/Report/OperationsController.php +++ b/app/Http/Controllers/Report/OperationsController.php @@ -29,8 +29,6 @@ use FireflyIII\Http\Controllers\Controller; use FireflyIII\Repositories\Account\AccountTaskerInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class OperationsController. @@ -42,8 +40,6 @@ class OperationsController extends Controller /** * OperationsController constructor. - * - */ public function __construct() { @@ -62,17 +58,14 @@ class OperationsController extends Controller /** * View of income and expense. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * * @return mixed|string + * * @throws FireflyException */ public function expenses(Collection $accounts, Carbon $start, Carbon $end) { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('expense-report'); @@ -82,12 +75,14 @@ class OperationsController extends Controller } $report = $this->tasker->getExpenseReport($start, $end, $accounts); $type = 'expense-entry'; + try { $result = view('reports.partials.income-expenses', compact('report', 'type'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.income-expense: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.income-expense: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } @@ -99,17 +94,12 @@ class OperationsController extends Controller /** * View of income. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return string * @throws FireflyException */ public function income(Collection $accounts, Carbon $start, Carbon $end): string { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('income-report'); @@ -119,12 +109,14 @@ class OperationsController extends Controller } $report = $this->tasker->getIncomeReport($start, $end, $accounts); $type = 'income-entry'; + try { $result = view('reports.partials.income-expenses', compact('report', 'type'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.income-expenses: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.income-expenses: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } @@ -136,17 +128,14 @@ class OperationsController extends Controller /** * Overview of income and expense. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * * @return mixed|string + * * @throws FireflyException */ public function operations(Collection $accounts, Carbon $start, Carbon $end) { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('inc-exp-report'); @@ -163,7 +152,7 @@ class OperationsController extends Controller /** @var int $currencyId */ foreach ($keys as $currencyId) { $currencyInfo = $incomes['sums'][$currencyId] ?? $expenses['sums'][$currencyId]; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $sums[$currencyId] ??= [ 'currency_id' => $currencyId, 'currency_name' => $currencyInfo['currency_name'], 'currency_code' => $currencyInfo['currency_code'], @@ -178,10 +167,11 @@ class OperationsController extends Controller try { $result = view('reports.partials.operations', compact('sums'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render reports.partials.operations: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render reports.partials.operations: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } $cache->store($result); diff --git a/app/Http/Controllers/Report/TagController.php b/app/Http/Controllers/Report/TagController.php index 8b43ead1db..a245845f82 100644 --- a/app/Http/Controllers/Report/TagController.php +++ b/app/Http/Controllers/Report/TagController.php @@ -31,12 +31,9 @@ use FireflyIII\Models\Tag; use FireflyIII\Repositories\Tag\OperationsRepositoryInterface; use Illuminate\Contracts\View\Factory; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Throwable; /** - * * Class TagController */ class TagController extends Controller @@ -45,8 +42,6 @@ class TagController extends Controller /** * ExpenseReportController constructor. - * - */ public function __construct() { @@ -61,22 +56,20 @@ class TagController extends Controller } /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function accountPerTag(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $tags); $earned = $this->opsRepository->listIncome($start, $end, $accounts, $tags); $report = []; + /** @var Account $account */ foreach ($accounts as $account) { - $accountId = $account->id; - $report[$accountId] = $report[$accountId] ?? [ + $accountId = $account->id; + $report[$accountId] ??= [ 'name' => $account->name, 'id' => $account->id, 'iban' => $account->iban, @@ -90,9 +83,10 @@ class TagController extends Controller /** @var array $tag */ foreach ($currency['tags'] as $tag) { + $tagId = $tag['id']; foreach ($tag['transaction_journals'] as $journal) { - $sourceAccountId = $journal['source_account_id']; - $report[$sourceAccountId]['currencies'][$currencyId] = $report[$sourceAccountId]['currencies'][$currencyId] ?? [ + $sourceAccountId = $journal['source_account_id']; + $report[$sourceAccountId]['currencies'][$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -100,20 +94,18 @@ class TagController extends Controller 'tags' => [], ]; - $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tag['id']] - = $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tag['id']] - ?? - [ - 'spent' => '0', - 'earned' => '0', - 'sum' => '0', - ]; - $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tag['id']]['spent'] = bcadd( - $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tag['id']]['spent'], + $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tagId] + ??= [ + 'spent' => '0', + 'earned' => '0', + 'sum' => '0', + ]; + $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tagId]['spent'] = bcadd( + $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tagId]['spent'], $journal['amount'] ); - $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tag['id']]['sum'] = bcadd( - $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tag['id']]['sum'], + $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tagId]['sum'] = bcadd( + $report[$sourceAccountId]['currencies'][$currencyId]['tags'][$tagId]['sum'], $journal['amount'] ); } @@ -125,31 +117,29 @@ class TagController extends Controller /** @var array $tag */ foreach ($currency['tags'] as $tag) { + $tagId = $tag['id']; foreach ($tag['transaction_journals'] as $journal) { - $destinationId = $journal['destination_account_id']; + $destinationId = $journal['destination_account_id']; $report[$destinationId]['currencies'][$currencyId] - = $report[$destinationId]['currencies'][$currencyId] - ?? [ - 'currency_id' => $currency['currency_id'], - 'currency_symbol' => $currency['currency_symbol'], - 'currency_name' => $currency['currency_name'], - 'currency_decimal_places' => $currency['currency_decimal_places'], - 'tags' => [], - ]; - $report[$destinationId]['currencies'][$currencyId]['tags'][$tag['id']] - = $report[$destinationId]['currencies'][$currencyId]['tags'][$tag['id']] - ?? - [ - 'spent' => '0', - 'earned' => '0', - 'sum' => '0', - ]; - $report[$destinationId]['currencies'][$currencyId]['tags'][$tag['id']]['earned'] = bcadd( - $report[$destinationId]['currencies'][$currencyId]['tags'][$tag['id']]['earned'], + ??= [ + 'currency_id' => $currency['currency_id'], + 'currency_symbol' => $currency['currency_symbol'], + 'currency_name' => $currency['currency_name'], + 'currency_decimal_places' => $currency['currency_decimal_places'], + 'tags' => [], + ]; + $report[$destinationId]['currencies'][$currencyId]['tags'][$tagId] + ??= [ + 'spent' => '0', + 'earned' => '0', + 'sum' => '0', + ]; + $report[$destinationId]['currencies'][$currencyId]['tags'][$tagId]['earned'] = bcadd( + $report[$destinationId]['currencies'][$currencyId]['tags'][$tagId]['earned'], $journal['amount'] ); - $report[$destinationId]['currencies'][$currencyId]['tags'][$tag['id']]['sum'] = bcadd( - $report[$destinationId]['currencies'][$currencyId]['tags'][$tag['id']]['sum'], + $report[$destinationId]['currencies'][$currencyId]['tags'][$tagId]['sum'] = bcadd( + $report[$destinationId]['currencies'][$currencyId]['tags'][$tagId]['sum'], $journal['amount'] ); } @@ -160,12 +150,9 @@ class TagController extends Controller } /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function accounts(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { @@ -173,10 +160,11 @@ class TagController extends Controller $earned = $this->opsRepository->listIncome($start, $end, $accounts, $tags); $report = []; $sums = []; + /** @var Account $account */ foreach ($accounts as $account) { - $accountId = $account->id; - $report[$accountId] = $report[$accountId] ?? [ + $accountId = $account->id; + $report[$accountId] ??= [ 'name' => $account->name, 'id' => $account->id, 'iban' => $account->iban, @@ -186,8 +174,8 @@ class TagController extends Controller // loop expenses. foreach ($spent as $currency) { - $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $currencyId = $currency['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -199,7 +187,7 @@ class TagController extends Controller foreach ($currency['tags'] as $tag) { foreach ($tag['transaction_journals'] as $journal) { $sourceAccountId = $journal['source_account_id']; - $report[$sourceAccountId]['currencies'][$currencyId] = $report[$sourceAccountId]['currencies'][$currencyId] ?? [ + $report[$sourceAccountId]['currencies'][$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -224,8 +212,8 @@ class TagController extends Controller // loop income. foreach ($earned as $currency) { - $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $currencyId = $currency['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -237,7 +225,7 @@ class TagController extends Controller foreach ($currency['tags'] as $tag) { foreach ($tag['transaction_journals'] as $journal) { $destinationAccountId = $journal['destination_account_id']; - $report[$destinationAccountId]['currencies'][$currencyId] = $report[$destinationAccountId]['currencies'][$currencyId] ?? [ + $report[$destinationAccountId]['currencies'][$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -264,24 +252,20 @@ class TagController extends Controller } /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function avgExpenses(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { - $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $tags); - $result = []; + $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $tags); + $result = []; foreach ($spent as $currency) { foreach ($currency['tags'] as $tag) { foreach ($tag['transaction_journals'] as $journal) { - $destinationId = $journal['destination_account_id']; - $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ + $destinationId = $journal['destination_account_id']; + $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); + $result[$key] ??= [ 'transactions' => 0, 'sum' => '0', 'avg' => '0', @@ -293,7 +277,7 @@ class TagController extends Controller 'currency_symbol' => $currency['currency_symbol'], 'currency_decimal_places' => $currency['currency_decimal_places'], ]; - $result[$key]['transactions']++; + ++$result[$key]['transactions']; $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); $result[$key]['avg_float'] = (float)$result[$key]['avg']; @@ -307,9 +291,10 @@ class TagController extends Controller try { $result = view('reports.tag.partials.avg-expenses', compact('result'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } @@ -317,24 +302,20 @@ class TagController extends Controller } /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function avgIncome(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { - $spent = $this->opsRepository->listIncome($start, $end, $accounts, $tags); - $result = []; + $spent = $this->opsRepository->listIncome($start, $end, $accounts, $tags); + $result = []; foreach ($spent as $currency) { foreach ($currency['tags'] as $tag) { foreach ($tag['transaction_journals'] as $journal) { - $sourceId = $journal['source_account_id']; - $key = sprintf('%d-%d', $sourceId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ + $sourceId = $journal['source_account_id']; + $key = sprintf('%d-%d', $sourceId, $currency['currency_id']); + $result[$key] ??= [ 'transactions' => 0, 'sum' => '0', 'avg' => '0', @@ -346,7 +327,7 @@ class TagController extends Controller 'currency_symbol' => $currency['currency_symbol'], 'currency_decimal_places' => $currency['currency_decimal_places'], ]; - $result[$key]['transactions']++; + ++$result[$key]['transactions']; $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); $result[$key]['avg_float'] = (float)$result[$key]['avg']; @@ -360,9 +341,10 @@ class TagController extends Controller try { $result = view('reports.tag.partials.avg-income', compact('result'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } @@ -370,12 +352,9 @@ class TagController extends Controller } /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * * @return Factory|View + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function tags(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { @@ -383,18 +362,19 @@ class TagController extends Controller $earned = $this->opsRepository->listIncome($start, $end, $accounts, $tags); $sums = []; $report = []; + /** @var Tag $tag */ foreach ($tags as $tag) { - $tagId = $tag->id; - $report[$tagId] = $report[$tagId] ?? [ + $tagId = $tag->id; + $report[$tagId] ??= [ 'name' => $tag->tag, 'id' => $tag->id, 'currencies' => [], ]; } foreach ($spent as $currency) { - $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $currencyId = $currency['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -403,39 +383,36 @@ class TagController extends Controller 'spent_sum' => '0', 'total_sum' => '0', ]; + /** @var array $tag */ foreach ($currency['tags'] as $tag) { $tagId = $tag['id']; - + if (!array_key_exists($tagId, $report)) { + continue; + } foreach ($tag['transaction_journals'] as $journal) { // add currency info to report array: - $report[$tagId]['currencies'][$currencyId] = $report[$tagId]['currencies'][$currencyId] ?? [ + $report[$tagId]['currencies'][$currencyId] ??= [ 'spent' => '0', 'earned' => '0', + $tagId => $tagId, 'sum' => '0', 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], 'currency_decimal_places' => $currency['currency_decimal_places'], ]; - $report[$tagId]['currencies'][$currencyId]['spent'] = bcadd( - $report[$tagId]['currencies'][$currencyId]['spent'], - $journal['amount'] - ); - $report[$tagId]['currencies'][$currencyId]['sum'] = bcadd( - $report[$tagId]['currencies'][$currencyId]['sum'], - $journal['amount'] - ); - - $sums[$currencyId]['spent_sum'] = bcadd($sums[$currencyId]['spent_sum'], $journal['amount']); - $sums[$currencyId]['total_sum'] = bcadd($sums[$currencyId]['total_sum'], $journal['amount']); + $report[$tagId]['currencies'][$currencyId]['spent'] = bcadd($report[$tagId]['currencies'][$currencyId]['spent'], $journal['amount']); + $report[$tagId]['currencies'][$currencyId]['sum'] = bcadd($report[$tagId]['currencies'][$currencyId]['sum'], $journal['amount']); + $sums[$currencyId]['spent_sum'] = bcadd($sums[$currencyId]['spent_sum'], $journal['amount']); + $sums[$currencyId]['total_sum'] = bcadd($sums[$currencyId]['total_sum'], $journal['amount']); } } } foreach ($earned as $currency) { - $currencyId = $currency['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $currencyId = $currency['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], @@ -444,32 +421,29 @@ class TagController extends Controller 'spent_sum' => '0', 'total_sum' => '0', ]; + /** @var array $tag */ foreach ($currency['tags'] as $tag) { $tagId = $tag['id']; - + if (!array_key_exists($tagId, $report)) { + continue; + } foreach ($tag['transaction_journals'] as $journal) { // add currency info to report array: - $report[$tagId]['currencies'][$currencyId] = $report[$tagId]['currencies'][$currencyId] ?? [ + $report[$tagId]['currencies'][$currencyId] ??= [ 'spent' => '0', 'earned' => '0', 'sum' => '0', + $tagId => $tagId, 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], 'currency_decimal_places' => $currency['currency_decimal_places'], ]; - $report[$tagId]['currencies'][$currencyId]['earned'] = bcadd( - $report[$tagId]['currencies'][$currencyId]['earned'], - $journal['amount'] - ); - $report[$tagId]['currencies'][$currencyId]['sum'] = bcadd( - $report[$tagId]['currencies'][$currencyId]['sum'], - $journal['amount'] - ); - - $sums[$currencyId]['earned_sum'] = bcadd($sums[$currencyId]['earned_sum'], $journal['amount']); - $sums[$currencyId]['total_sum'] = bcadd($sums[$currencyId]['total_sum'], $journal['amount']); + $report[$tagId]['currencies'][$currencyId]['earned'] = bcadd($report[$tagId]['currencies'][$currencyId]['earned'], $journal['amount']); + $report[$tagId]['currencies'][$currencyId]['sum'] = bcadd($report[$tagId]['currencies'][$currencyId]['sum'], $journal['amount']); + $sums[$currencyId]['earned_sum'] = bcadd($sums[$currencyId]['earned_sum'], $journal['amount']); + $sums[$currencyId]['total_sum'] = bcadd($sums[$currencyId]['total_sum'], $journal['amount']); } } } @@ -478,18 +452,14 @@ class TagController extends Controller } /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function topExpenses(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { - $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $tags); - $result = []; + $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $tags); + $result = []; foreach ($spent as $currency) { foreach ($currency['tags'] as $tag) { foreach ($tag['transaction_journals'] as $journal) { @@ -519,9 +489,10 @@ class TagController extends Controller try { $result = view('reports.tag.partials.top-expenses', compact('result'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } @@ -529,18 +500,14 @@ class TagController extends Controller } /** - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function topIncome(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { - $spent = $this->opsRepository->listIncome($start, $end, $accounts, $tags); - $result = []; + $spent = $this->opsRepository->listIncome($start, $end, $accounts, $tags); + $result = []; foreach ($spent as $currency) { foreach ($currency['tags'] as $tag) { foreach ($tag['transaction_journals'] as $journal) { @@ -570,9 +537,10 @@ class TagController extends Controller try { $result = view('reports.tag.partials.top-income', compact('result'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); $result = sprintf('Could not render view: %s', $e->getMessage()); + throw new FireflyException($result, 0, $e); } diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index 029dce0424..67d8344fee 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -38,24 +38,17 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class ReportController. - * */ class ReportController extends Controller { use RenderPartialViews; - /** @var ReportHelperInterface Helper interface. */ - protected $helper; - - /** @var BudgetRepositoryInterface The budget repository */ - private $repository; + protected ReportHelperInterface $helper; + private BudgetRepositoryInterface $repository; /** * ReportController constructor. @@ -80,11 +73,7 @@ class ReportController extends Controller /** * Show audit report. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return Factory|View|string + * @return Factory|string|View * * @throws FireflyException */ @@ -115,12 +104,7 @@ class ReportController extends Controller /** * Show budget report. * - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * - * @return Factory|View|string + * @return Factory|string|View * * @throws FireflyException */ @@ -152,12 +136,7 @@ class ReportController extends Controller /** * Show category report. * - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return Factory|View|string + * @return Factory|string|View * * @throws FireflyException */ @@ -189,11 +168,7 @@ class ReportController extends Controller /** * Show default report. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return Factory|View|string + * @return Factory|string|View * * @throws FireflyException */ @@ -225,12 +200,8 @@ class ReportController extends Controller /** * Show account report. * - * @param Collection $accounts - * @param Collection $expense - * @param Carbon $start - * @param Carbon $end - * * @return string + * * @throws FireflyException */ public function doubleReport(Collection $accounts, Collection $expense, Carbon $start, Carbon $end) @@ -262,11 +233,7 @@ class ReportController extends Controller /** * Show index. * - * @param AccountRepositoryInterface $repository - * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function index(AccountRepositoryInterface $repository) { @@ -279,11 +246,12 @@ class ReportController extends Controller ); // group accounts by role: - $groupedAccounts = []; + $groupedAccounts = []; + /** @var Account $account */ foreach ($accounts as $account) { - $type = $account->accountType->type; - $role = sprintf('opt_group_%s', $repository->getMetaValue($account, 'account_role')); + $type = $account->accountType->type; + $role = sprintf('opt_group_%s', $repository->getMetaValue($account, 'account_role')); if (in_array($type, [AccountType::MORTGAGE, AccountType::DEBT, AccountType::LOAN], true)) { $role = sprintf('opt_group_l_%s', $type); @@ -292,11 +260,11 @@ class ReportController extends Controller if ('opt_group_' === $role) { $role = 'opt_group_defaultAsset'; } - $groupedAccounts[trans(sprintf('firefly.%s', $role))][$account->id] = $account; + $groupedAccounts[(string)trans(sprintf('firefly.%s', $role))][$account->id] = $account; } ksort($groupedAccounts); - $accountList = implode(',', $accounts->pluck('id')->toArray()); + $accountList = implode(',', $accounts->pluck('id')->toArray()); $this->repository->cleanupBudgets(); return view('reports.index', compact('months', 'accounts', 'start', 'accountList', 'groupedAccounts', 'customFiscalYear')); @@ -305,9 +273,8 @@ class ReportController extends Controller /** * Show options for reports. * - * @param string $reportType - * * @return JsonResponse + * * @throws FireflyException */ public function options(string $reportType) @@ -326,14 +293,9 @@ class ReportController extends Controller /** * Process the submit of report. * - * @param ReportFormRequest $request - * - * @return RedirectResponse|Redirector - * * @throws FireflyException - * */ - public function postIndex(ReportFormRequest $request) + public function postIndex(ReportFormRequest $request): Redirector|RedirectResponse|View { // report type: $reportType = $request->get('report_type'); @@ -346,7 +308,7 @@ class ReportController extends Controller $double = implode(',', $request->getDoubleList()->pluck('id')->toArray()); if (0 === $request->getAccountList()->count()) { - Log::debug('Account count is zero'); + app('log')->debug('Account count is zero'); session()->flash('error', (string)trans('firefly.select_at_least_one_account')); return redirect(route('reports.index')); @@ -380,7 +342,7 @@ class ReportController extends Controller return view('error')->with('message', (string)trans('firefly.end_after_start_date')); } - $url = match ($reportType) { + $url = match ($reportType) { default => route('reports.report.default', [$accounts, $start, $end]), 'category' => route('reports.report.category', [$accounts, $categories, $start, $end]), 'audit' => route('reports.report.audit', [$accounts, $start, $end]), @@ -395,12 +357,8 @@ class ReportController extends Controller /** * Get a tag report. * - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end + * @return Factory|string|View * - * @return Factory|View|string * @throws FireflyException */ public function tagReport(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) diff --git a/app/Http/Controllers/Rule/CreateController.php b/app/Http/Controllers/Rule/CreateController.php index eb42aa0b03..6d35df8e28 100644 --- a/app/Http/Controllers/Rule/CreateController.php +++ b/app/Http/Controllers/Rule/CreateController.php @@ -45,15 +45,13 @@ use Illuminate\View\View; */ class CreateController extends Controller { - use RuleManagement; use ModelInformation; + use RuleManagement; private RuleRepositoryInterface $ruleRepos; /** * RuleController constructor. - * - */ public function __construct() { @@ -74,39 +72,39 @@ class CreateController extends Controller /** * Create a new rule. It will be stored under the given $ruleGroup. * - * @param Request $request - * @param RuleGroup|null $ruleGroup - * * @return Factory|View + * * @throws FireflyException */ public function create(Request $request, RuleGroup $ruleGroup = null) { $this->createDefaultRuleGroup(); - $preFilled = [ + $preFilled = [ 'strict' => true, ]; - $oldTriggers = []; - $oldActions = []; + $oldTriggers = []; + $oldActions = []; // build triggers from query, if present. - $query = (string)$request->get('from_query'); + $query = (string)$request->get('from_query'); if ('' !== $query) { - $search = app(SearchInterface::class); + $search = app(SearchInterface::class); $search->parseQuery($query); - $words = $search->getWordsAsString(); - $operators = $search->getOperators()->toArray(); + $words = $search->getWordsAsString(); + $operators = $search->getOperators()->toArray(); if ('' !== $words) { session()->flash('warning', trans('firefly.rule_from_search_words', ['string' => $words])); $operators[] = [ 'type' => 'description_contains', - 'value' => $words]; + 'value' => $words, + ]; } $oldTriggers = $this->parseFromOperators($operators); } + // var_dump($oldTriggers);exit; // restore actions and triggers from old input: - if ($request->old()) { + if (is_array($request->old()) && count($request->old()) > 0) { $oldTriggers = $this->getPreviousTriggers($request); $oldActions = $this->getPreviousActions($request); } @@ -116,7 +114,7 @@ class CreateController extends Controller $subTitleIcon = 'fa-clone'; // title depends on whether or not there is a rule group: - $subTitle = (string)trans('firefly.make_new_rule_no_group'); + $subTitle = (string)trans('firefly.make_new_rule_no_group'); if (null !== $ruleGroup) { $subTitle = (string)trans('firefly.make_new_rule', ['title' => $ruleGroup->title]); } @@ -139,10 +137,8 @@ class CreateController extends Controller /** * Create a new rule. It will be stored under the given $ruleGroup. * - * @param Request $request - * @param Bill $bill - * * @return Factory|View + * * @throws FireflyException */ public function createFromBill(Request $request, Bill $bill) @@ -150,7 +146,7 @@ class CreateController extends Controller $request->session()->flash('info', (string)trans('firefly.instructions_rule_from_bill', ['name' => e($bill->name)])); $this->createDefaultRuleGroup(); - $preFilled = [ + $preFilled = [ 'strict' => true, 'title' => (string)trans('firefly.new_rule_for_bill_title', ['name' => $bill->name]), 'description' => (string)trans('firefly.new_rule_for_bill_description', ['name' => $bill->name]), @@ -159,11 +155,11 @@ class CreateController extends Controller // make triggers and actions from the bill itself. // get triggers and actions for bill: - $oldTriggers = $this->getTriggersForBill($bill); - $oldActions = $this->getActionsForBill($bill); + $oldTriggers = $this->getTriggersForBill($bill); + $oldActions = $this->getActionsForBill($bill); // restore actions and triggers from old input: - if ($request->old()) { + if (null !== $request->old() && is_array($request->old()) && count($request->old()) > 0) { $oldTriggers = $this->getPreviousTriggers($request); $oldActions = $this->getPreviousActions($request); } @@ -172,8 +168,8 @@ class CreateController extends Controller $actionCount = count($oldActions); $subTitleIcon = 'fa-clone'; - // title depends on whether or not there is a rule group: - $subTitle = (string)trans('firefly.make_new_rule_no_group'); + // title depends on whether there is a rule group: + $subTitle = (string)trans('firefly.make_new_rule_no_group'); // flash old data $request->session()->flash('preFilled', $preFilled); @@ -191,10 +187,8 @@ class CreateController extends Controller } /** - * @param Request $request - * @param TransactionJournal $journal - * * @return Factory|\Illuminate\Contracts\View\View + * * @throws FireflyException */ public function createFromJournal(Request $request, TransactionJournal $journal) @@ -205,20 +199,20 @@ class CreateController extends Controller $subTitle = (string)trans('firefly.make_new_rule_no_group'); // get triggers and actions for journal. - $oldTriggers = $this->getTriggersForJournal($journal); - $oldActions = []; + $oldTriggers = $this->getTriggersForJournal($journal); + $oldActions = []; $this->createDefaultRuleGroup(); // collect pre-filled information: - $preFilled = [ + $preFilled = [ 'strict' => true, 'title' => (string)trans('firefly.new_rule_for_journal_title', ['description' => $journal->description]), 'description' => (string)trans('firefly.new_rule_for_journal_description', ['description' => $journal->description]), ]; // restore actions and triggers from old input: - if ($request->old()) { + if (null !== $request->old() && is_array($request->old()) && count($request->old()) > 0) { $oldTriggers = $this->getPreviousTriggers($request); $oldActions = $this->getPreviousActions($request); } @@ -241,11 +235,6 @@ class CreateController extends Controller ); } - /** - * @param Request $request - * - * @return JsonResponse - */ public function duplicate(Request $request): JsonResponse { $ruleId = (int)$request->get('id'); @@ -260,16 +249,13 @@ class CreateController extends Controller /** * Store the new rule. * - * @param RuleFormRequest $request - * - * @return RedirectResponse|Redirector - * + * @return Redirector|RedirectResponse */ public function store(RuleFormRequest $request) { - $data = $request->getRuleData(); + $data = $request->getRuleData(); - $rule = $this->ruleRepos->store($data); + $rule = $this->ruleRepos->store($data); session()->flash('success', (string)trans('firefly.stored_new_rule', ['title' => $rule->title])); app('preferences')->mark(); diff --git a/app/Http/Controllers/Rule/DeleteController.php b/app/Http/Controllers/Rule/DeleteController.php index 5f208b1735..73e5e04f01 100644 --- a/app/Http/Controllers/Rule/DeleteController.php +++ b/app/Http/Controllers/Rule/DeleteController.php @@ -40,8 +40,6 @@ class DeleteController extends Controller /** * RuleController constructor. - * - */ public function __construct() { @@ -62,8 +60,6 @@ class DeleteController extends Controller /** * Delete a given rule. * - * @param Rule $rule - * * @return Factory|View */ public function delete(Rule $rule) @@ -78,10 +74,6 @@ class DeleteController extends Controller /** * Actually destroy the given rule. - * - * @param Rule $rule - * - * @return RedirectResponse */ public function destroy(Rule $rule): RedirectResponse { diff --git a/app/Http/Controllers/Rule/EditController.php b/app/Http/Controllers/Rule/EditController.php index de93bb2839..a4412d17ab 100644 --- a/app/Http/Controllers/Rule/EditController.php +++ b/app/Http/Controllers/Rule/EditController.php @@ -36,24 +36,20 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Throwable; /** * Class EditController */ class EditController extends Controller { - use RuleManagement; use RenderPartialViews; + use RuleManagement; private RuleRepositoryInterface $ruleRepos; /** * RuleController constructor. - * - */ public function __construct() { @@ -74,26 +70,24 @@ class EditController extends Controller /** * Edit a rule. * - * @param Request $request - * @param Rule $rule - * * @return Factory|View + * * @throws FireflyException */ public function edit(Request $request, Rule $rule) { - $triggerCount = 0; - $actionCount = 0; - $oldActions = []; - $oldTriggers = []; + $triggerCount = 0; + $actionCount = 0; + $oldActions = []; + $oldTriggers = []; // build triggers from query, if present. - $query = (string)$request->get('from_query'); + $query = (string)$request->get('from_query'); if ('' !== $query) { - $search = app(SearchInterface::class); + $search = app(SearchInterface::class); $search->parseQuery($query); - $words = $search->getWordsAsString(); - $operators = $search->getOperators()->toArray(); + $words = $search->getWordsAsString(); + $operators = $search->getOperators()->toArray(); if ('' !== $words) { session()->flash('warning', trans('firefly.rule_from_search_words', ['string' => $words])); $operators[] = ['type' => 'description_contains', 'value' => $words]; @@ -101,12 +95,12 @@ class EditController extends Controller $oldTriggers = $this->parseFromOperators($operators); } // has old input? - if (count($request->old()) > 0) { + if (null !== $request->old() && is_array($request->old()) && count($request->old()) > 0) { $oldTriggers = $this->getPreviousTriggers($request); $oldActions = $this->getPreviousActions($request); } - $triggerCount = count($oldTriggers); - $actionCount = count($oldActions); + $triggerCount = count($oldTriggers); + $actionCount = count($oldActions); // overrule old input and query data when it has no rule data: if (0 === $triggerCount && 0 === $actionCount) { @@ -116,12 +110,11 @@ class EditController extends Controller $actionCount = count($oldActions); } - $hasOldInput = null !== $request->old('_token'); - $preFilled = [ + $hasOldInput = null !== $request->old('_token'); + $preFilled = [ 'active' => $hasOldInput ? (bool)$request->old('active') : $rule->active, 'stop_processing' => $hasOldInput ? (bool)$request->old('stop_processing') : $rule->stop_processing, 'strict' => $hasOldInput ? (bool)$request->old('strict') : $rule->strict, - ]; // get rule trigger for update / store-journal: @@ -140,9 +133,6 @@ class EditController extends Controller } /** - * @param array $submittedOperators - * - * @return array * @throws FireflyException */ private function parseFromOperators(array $submittedOperators): array @@ -158,7 +148,7 @@ class EditController extends Controller } asort($triggers); - $index = 0; + $index = 0; foreach ($submittedOperators as $operator) { try { $renderedEntries[] = view( @@ -171,13 +161,14 @@ class EditController extends Controller 'triggers' => $triggers, ] )->render(); - } catch (Throwable $e) { + } catch (\Throwable $e) { $message = sprintf('Throwable was thrown in getPreviousTriggers(): %s', $e->getMessage()); - Log::debug($message); - Log::error($e->getTraceAsString()); + app('log')->debug($message); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($message, 0, $e); } - $index++; + ++$index; } return $renderedEntries; @@ -186,14 +177,11 @@ class EditController extends Controller /** * Update the rule. * - * @param RuleFormRequest $request - * @param Rule $rule - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function update(RuleFormRequest $request, Rule $rule) { - $data = $request->getRuleData(); + $data = $request->getRuleData(); $this->ruleRepos->update($rule, $data); diff --git a/app/Http/Controllers/Rule/IndexController.php b/app/Http/Controllers/Rule/IndexController.php index f4dec56a96..d86f902c36 100644 --- a/app/Http/Controllers/Rule/IndexController.php +++ b/app/Http/Controllers/Rule/IndexController.php @@ -47,8 +47,6 @@ class IndexController extends Controller /** * RuleController constructor. - * - */ public function __construct() { @@ -79,26 +77,14 @@ class IndexController extends Controller return view('rules.index', compact('ruleGroups')); } - /** - * @param Request $request - * @param Rule $rule - * @param RuleGroup $ruleGroup - * - * @return JsonResponse - */ public function moveRule(Request $request, Rule $rule, RuleGroup $ruleGroup): JsonResponse { $order = (int)$request->get('order'); - $this->ruleRepos->moveRule($rule, $ruleGroup, (int)$order); + $this->ruleRepos->moveRule($rule, $ruleGroup, $order); return response()->json([]); } - /** - * @param Rule $rule - * - * @return RedirectResponse - */ public function search(Rule $rule): RedirectResponse { $route = route('search.index'); diff --git a/app/Http/Controllers/Rule/SelectController.php b/app/Http/Controllers/Rule/SelectController.php index 89a3317702..c03a823ee3 100644 --- a/app/Http/Controllers/Rule/SelectController.php +++ b/app/Http/Controllers/Rule/SelectController.php @@ -32,19 +32,15 @@ use FireflyIII\Models\Rule; use FireflyIII\Models\RuleTrigger; use FireflyIII\Support\Http\Controllers\RuleManagement; use FireflyIII\TransactionRules\Engine\RuleEngineInterface; -use FireflyIII\TransactionRules\TransactionMatcher; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Throwable; /** * Class SelectController. - * */ class SelectController extends Controller { @@ -58,7 +54,7 @@ class SelectController extends Controller parent::__construct(); $this->middleware( - function ($request, $next) { + static function ($request, $next) { app('view')->share('title', (string)trans('firefly.rules')); app('view')->share('mainTitleIcon', 'fa-random'); @@ -69,20 +65,15 @@ class SelectController extends Controller /** * Execute the given rule on a set of existing transactions. - * - * @param SelectTransactionsRequest $request - * @param Rule $rule - * - * @return RedirectResponse */ public function execute(SelectTransactionsRequest $request, Rule $rule): RedirectResponse { // Get parameters specified by the user /** @var User $user */ - $user = auth()->user(); - $accounts = implode(',', $request->get('accounts')); - $startDate = new Carbon($request->get('start')); - $endDate = new Carbon($request->get('end')); + $user = auth()->user(); + $accounts = implode(',', $request->get('accounts')); + $startDate = new Carbon($request->get('start')); + $endDate = new Carbon($request->get('end')); // create new rule engine: $newRuleEngine = app(RuleEngineInterface::class); @@ -96,21 +87,17 @@ class SelectController extends Controller // set rules: $newRuleEngine->setRules(new Collection([$rule])); $newRuleEngine->fire(); - $resultCount = $newRuleEngine->getResults(); + $resultCount = $newRuleEngine->getResults(); - session()->flash('success', (string)trans_choice('firefly.applied_rule_selection', $resultCount, ['title' => $rule->title])); + session()->flash('success', trans_choice('firefly.applied_rule_selection', $resultCount, ['title' => $rule->title])); return redirect()->route('rules.index'); } /** * View to select transactions by a rule. - * - * @param Rule $rule - * - * @return Factory|View */ - public function selectTransactions(Rule $rule) + public function selectTransactions(Rule $rule): Factory|RedirectResponse|View { if (false === $rule->active) { session()->flash('warning', trans('firefly.cannot_fire_inactive_rules')); @@ -129,20 +116,19 @@ class SelectController extends Controller * This method allows the user to test a certain set of rule triggers. The rule triggers are passed along * using the URL parameters (GET), and are usually put there using a Javascript thing. * - * @param TestRuleFormRequest $request - * - * @return JsonResponse * @throws FireflyException */ public function testTriggers(TestRuleFormRequest $request): JsonResponse { // build fake rule - $rule = new Rule(); - $triggers = new Collection(); - $rule->strict = '1' === $request->get('strict'); + $rule = new Rule(); + + /** @var \Illuminate\Database\Eloquent\Collection $triggers */ + $triggers = new Collection(); + $rule->strict = '1' === $request->get('strict'); // build trigger array from response - $textTriggers = $this->getValidTriggerList($request); + $textTriggers = $this->getValidTriggerList($request); // warn if nothing. if (0 === count($textTriggers)) { @@ -150,9 +136,13 @@ class SelectController extends Controller } foreach ($textTriggers as $textTrigger) { + $needsContext = config(sprintf('search.operators.%s.needs_context', $textTrigger['type'])) ?? true; $trigger = new RuleTrigger(); $trigger->trigger_type = $textTrigger['type']; $trigger->trigger_value = $textTrigger['value']; + if (false === $needsContext) { + $trigger->trigger_value = 'true'; + } $trigger->stop_processing = $textTrigger['stop_processing']; if ($textTrigger['prohibited']) { $trigger->trigger_type = sprintf('-%s', $textTrigger['type']); @@ -164,28 +154,30 @@ class SelectController extends Controller // create new rule engine: /** @var RuleEngineInterface $newRuleEngine */ - $newRuleEngine = app(RuleEngineInterface::class); + $newRuleEngine = app(RuleEngineInterface::class); // set rules: $newRuleEngine->setRules(new Collection([$rule])); $newRuleEngine->setRefreshTriggers(false); - $collection = $newRuleEngine->find(); - $collection = $collection->slice(0, 20); + $collection = $newRuleEngine->find(); + $collection = $collection->slice(0, 20); // Warn the user if only a subset of transactions is returned - $warning = ''; + $warning = ''; if (0 === count($collection)) { $warning = (string)trans('firefly.warning_no_matching_transactions'); } // Return json response - $view = 'ERROR, see logs.'; + $view = 'ERROR, see logs.'; + try { $view = view('list.journals-array-tiny', ['groups' => $collection])->render(); - } catch (Throwable $exception) { - Log::error(sprintf('Could not render view in testTriggers(): %s', $exception->getMessage())); - Log::error($exception->getTraceAsString()); + } catch (\Throwable $exception) { + app('log')->error(sprintf('Could not render view in testTriggers(): %s', $exception->getMessage())); + app('log')->error($exception->getTraceAsString()); $view = sprintf('Could not render list.journals-tiny: %s', $exception->getMessage()); + throw new FireflyException($view, 0, $exception); } @@ -196,14 +188,11 @@ class SelectController extends Controller * This method allows the user to test a certain set of rule triggers. The rule triggers are grabbed from * the rule itself. * - * @param Rule $rule - * - * @return JsonResponse * @throws FireflyException */ public function testTriggersByRule(Rule $rule): JsonResponse { - $triggers = $rule->ruleTriggers; + $triggers = $rule->ruleTriggers; if (0 === count($triggers)) { return response()->json(['html' => '', 'warning' => (string)trans('firefly.warning_no_valid_triggers')]); @@ -213,22 +202,24 @@ class SelectController extends Controller // set rules: $newRuleEngine->setRules(new Collection([$rule])); - $collection = $newRuleEngine->find(); - $collection = $collection->slice(0, 20); + $collection = $newRuleEngine->find(); + $collection = $collection->slice(0, 20); - $warning = ''; + $warning = ''; if (0 === count($collection)) { $warning = (string)trans('firefly.warning_no_matching_transactions'); } // Return json response - $view = 'ERROR, see logs.'; + $view = 'ERROR, see logs.'; + try { $view = view('list.journals-array-tiny', ['groups' => $collection])->render(); - } catch (Throwable $exception) { + } catch (\Throwable $exception) { $message = sprintf('Could not render view in testTriggersByRule(): %s', $exception->getMessage()); - Log::error($message); - Log::error($exception->getTraceAsString()); + app('log')->error($message); + app('log')->error($exception->getTraceAsString()); + throw new FireflyException($message, 0, $exception); } diff --git a/app/Http/Controllers/RuleGroup/CreateController.php b/app/Http/Controllers/RuleGroup/CreateController.php index c6d667d66c..c8f5bd7810 100644 --- a/app/Http/Controllers/RuleGroup/CreateController.php +++ b/app/Http/Controllers/RuleGroup/CreateController.php @@ -41,8 +41,6 @@ class CreateController extends Controller /** * CreateController constructor. - * - */ public function __construct() { @@ -82,9 +80,7 @@ class CreateController extends Controller /** * Store the rule group. * - * @param RuleGroupFormRequest $request - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function store(RuleGroupFormRequest $request) { @@ -94,7 +90,7 @@ class CreateController extends Controller session()->flash('success', (string)trans('firefly.created_new_rule_group', ['title' => $ruleGroup->title])); app('preferences')->mark(); - $redirect = redirect($this->getPreviousUrl('rule-groups.create.url')); + $redirect = redirect($this->getPreviousUrl('rule-groups.create.url')); if (1 === (int)$request->get('create_another')) { session()->put('rule-groups.create.fromStore', true); diff --git a/app/Http/Controllers/RuleGroup/DeleteController.php b/app/Http/Controllers/RuleGroup/DeleteController.php index c488a609c7..0b42b5eee3 100644 --- a/app/Http/Controllers/RuleGroup/DeleteController.php +++ b/app/Http/Controllers/RuleGroup/DeleteController.php @@ -42,8 +42,6 @@ class DeleteController extends Controller /** * DeleteController constructor. - * - */ public function __construct() { @@ -64,8 +62,6 @@ class DeleteController extends Controller /** * Delete a rule group. * - * @param RuleGroup $ruleGroup - * * @return Factory|View */ public function delete(RuleGroup $ruleGroup) @@ -81,14 +77,11 @@ class DeleteController extends Controller /** * Actually destroy the rule group. * - * @param Request $request - * @param RuleGroup $ruleGroup - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function destroy(Request $request, RuleGroup $ruleGroup) { - $title = $ruleGroup->title; + $title = $ruleGroup->title; /** @var RuleGroup $moveTo */ $moveTo = $this->repository->find((int)$request->get('move_rules_before_delete')); diff --git a/app/Http/Controllers/RuleGroup/EditController.php b/app/Http/Controllers/RuleGroup/EditController.php index 828fd3d0c2..67c18f8467 100644 --- a/app/Http/Controllers/RuleGroup/EditController.php +++ b/app/Http/Controllers/RuleGroup/EditController.php @@ -43,8 +43,6 @@ class EditController extends Controller /** * EditController constructor. - * - */ public function __construct() { @@ -65,14 +63,11 @@ class EditController extends Controller /** * Edit a rule group. * - * @param Request $request - * @param RuleGroup $ruleGroup - * * @return Factory|View */ public function edit(Request $request, RuleGroup $ruleGroup) { - $subTitle = (string)trans('firefly.edit_rule_group', ['title' => $ruleGroup->title]); + $subTitle = (string)trans('firefly.edit_rule_group', ['title' => $ruleGroup->title]); $hasOldInput = null !== $request->old('_token'); $preFilled = [ @@ -90,10 +85,6 @@ class EditController extends Controller /** * Move a rule group in either direction. - * - * @param Request $request - * - * @return JsonResponse */ public function moveGroup(Request $request): JsonResponse { @@ -103,34 +94,32 @@ class EditController extends Controller $direction = $request->get('direction'); if ('down' === $direction) { $maxOrder = $this->repository->maxOrder(); - $order = (int)$ruleGroup->order; + $order = $ruleGroup->order; if ($order < $maxOrder) { $newOrder = $order + 1; $this->repository->setOrder($ruleGroup, $newOrder); } } if ('up' === $direction) { - $order = (int)$ruleGroup->order; + $order = $ruleGroup->order; if ($order > 1) { $newOrder = $order - 1; $this->repository->setOrder($ruleGroup, $newOrder); } } } + return new JsonResponse(['OK']); } /** * Update the rule group. * - * @param RuleGroupFormRequest $request - * @param RuleGroup $ruleGroup - * - * @return $this|RedirectResponse|Redirector + * @return $this|Redirector|RedirectResponse */ public function update(RuleGroupFormRequest $request, RuleGroup $ruleGroup) { - $data = [ + $data = [ 'title' => $request->convertString('title'), 'description' => $request->stringWithNewlines('description'), 'active' => 1 === (int)$request->input('active'), diff --git a/app/Http/Controllers/RuleGroup/ExecutionController.php b/app/Http/Controllers/RuleGroup/ExecutionController.php index be6285e55f..bf8e67759a 100644 --- a/app/Http/Controllers/RuleGroup/ExecutionController.php +++ b/app/Http/Controllers/RuleGroup/ExecutionController.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\RuleGroup; use Carbon\Carbon; -use Exception; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\SelectTransactionsRequest; use FireflyIII\Models\RuleGroup; @@ -44,8 +43,6 @@ class ExecutionController extends Controller /** * ExecutionController constructor. - * - */ public function __construct() { @@ -66,21 +63,17 @@ class ExecutionController extends Controller /** * Execute the given rulegroup on a set of existing transactions. * - * @param SelectTransactionsRequest $request - * @param RuleGroup $ruleGroup - * - * @return RedirectResponse - * @throws Exception + * @throws \Exception */ public function execute(SelectTransactionsRequest $request, RuleGroup $ruleGroup): RedirectResponse { // Get parameters specified by the user /** @var User $user */ - $user = auth()->user(); - $accounts = implode(',', $request->get('accounts')); - $startDate = new Carbon($request->get('start')); - $endDate = new Carbon($request->get('end')); - $rules = $this->ruleGroupRepository->getActiveRules($ruleGroup); + $user = auth()->user(); + $accounts = implode(',', $request->get('accounts')); + $startDate = new Carbon($request->get('start')); + $endDate = new Carbon($request->get('end')); + $rules = $this->ruleGroupRepository->getActiveRules($ruleGroup); // create new rule engine: $newRuleEngine = app(RuleEngineInterface::class); $newRuleEngine->setUser($user); @@ -103,8 +96,6 @@ class ExecutionController extends Controller /** * Select transactions to apply the group on. * - * @param RuleGroup $ruleGroup - * * @return Factory|View */ public function selectTransactions(RuleGroup $ruleGroup) diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 5963f8eb5e..b68d9de8a7 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -29,9 +29,7 @@ use FireflyIII\Support\Search\SearchInterface; use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Throwable; /** * Class SearchController. @@ -58,26 +56,23 @@ class SearchController extends Controller /** * Do the search. * - * @param Request $request - * @param SearchInterface $searcher - * * @return Factory|View */ public function index(Request $request, SearchInterface $searcher) { // search params: - $fullQuery = $request->get('search'); + $fullQuery = $request->get('search'); if (is_array($request->get('search'))) { $fullQuery = ''; } - $fullQuery = (string)$fullQuery; - $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $ruleId = (int)$request->get('rule'); - $ruleChanged = false; + $fullQuery = (string)$fullQuery; + $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); + $ruleId = (int)$request->get('rule'); + $ruleChanged = false; // find rule, check if query is different, offer to update. - $ruleRepository = app(RuleRepositoryInterface::class); - $rule = $ruleRepository->find($ruleId); + $ruleRepository = app(RuleRepositoryInterface::class); + $rule = $ruleRepository->find($ruleId); if (null !== $rule) { $originalQuery = $ruleRepository->getSearchQuery($rule); if ($originalQuery !== $fullQuery) { @@ -99,20 +94,16 @@ class SearchController extends Controller /** * JSON request that does the work. * - * @param Request $request - * @param SearchInterface $searcher - * - * @return JsonResponse * @throws FireflyException */ public function search(Request $request, SearchInterface $searcher): JsonResponse { - $entry = $request->get('query'); + $entry = $request->get('query'); if (!is_scalar($entry)) { $entry = ''; } - $fullQuery = (string)$entry; - $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); + $fullQuery = (string)$entry; + $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); $searcher->parseQuery($fullQuery); @@ -121,15 +112,16 @@ class SearchController extends Controller $hasPages = $groups->hasPages(); $searchTime = round($searcher->searchTime(), 3); // in seconds $parameters = ['search' => $fullQuery]; - $url = route('search.index') . '?' . http_build_query($parameters); + $url = route('search.index').'?'.http_build_query($parameters); $groups->setPath($url); try { $html = view('search.search', compact('groups', 'hasPages', 'searchTime'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render search.search: %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render search.search: %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $html = 'Could not render view.'; + throw new FireflyException($html, 0, $e); } diff --git a/app/Http/Controllers/System/CronController.php b/app/Http/Controllers/System/CronController.php index 1e9c80f9dd..2e4f731831 100644 --- a/app/Http/Controllers/System/CronController.php +++ b/app/Http/Controllers/System/CronController.php @@ -26,7 +26,6 @@ namespace FireflyIII\Http\Controllers\System; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\Routing\ResponseFactory; use Illuminate\Http\Response; -use Illuminate\Support\Facades\Log; /** * Class CronController @@ -34,11 +33,11 @@ use Illuminate\Support\Facades\Log; class CronController { /** - * @return Application|ResponseFactory|Response + * @return Application|Response|ResponseFactory */ public function cron() { - Log::error('The cron endpoint has moved to GET /api/v1/cron/[token]'); + app('log')->error('The cron endpoint has moved to GET /api/v1/cron/[token]'); return response('The cron endpoint has moved to GET /api/v1/cron/[token]', 500); } diff --git a/app/Http/Controllers/System/HealthcheckController.php b/app/Http/Controllers/System/HealthcheckController.php index 2a17ca2f5f..8bec13fcd9 100644 --- a/app/Http/Controllers/System/HealthcheckController.php +++ b/app/Http/Controllers/System/HealthcheckController.php @@ -34,12 +34,11 @@ class HealthcheckController extends Controller { /** * Sends 'OK' info when app is alive - * - * @return Response */ public function check(): Response { User::count(); // sanity check for database health. Will crash if not OK. + return response('OK', 200); } } diff --git a/app/Http/Controllers/System/InstallController.php b/app/Http/Controllers/System/InstallController.php index 42cd599107..5c00d52a3f 100644 --- a/app/Http/Controllers/System/InstallController.php +++ b/app/Http/Controllers/System/InstallController.php @@ -23,33 +23,28 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\System; -use Artisan; use Cache; use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; -use FireflyIII\Support\Facades\Preferences; use FireflyIII\Support\Http\Controllers\GetConfigurationData; use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; use Laravel\Passport\Passport; use phpseclib3\Crypt\RSA; /** * Class InstallController - * - */ class InstallController extends Controller { use GetConfigurationData; - public const BASEDIR_ERROR = 'Firefly III cannot execute the upgrade commands. It is not allowed to because of an open_basedir restriction.'; - public const FORBIDDEN_ERROR = 'Internal PHP function "proc_close" is disabled for your installation. Auto-migration is not possible.'; - public const OTHER_ERROR = 'An unknown error prevented Firefly III from executing the upgrade commands. Sorry.'; + public const string BASEDIR_ERROR = 'Firefly III cannot execute the upgrade commands. It is not allowed to because of an open_basedir restriction.'; + public const string FORBIDDEN_ERROR = 'Internal PHP function "proc_close" is disabled for your installation. Auto-migration is not possible.'; + public const string OTHER_ERROR = 'An unknown error prevented Firefly III from executing the upgrade commands. Sorry.'; private string $lastError; private array $upgradeCommands; @@ -58,6 +53,7 @@ class InstallController extends Controller */ public function __construct() { + parent::__construct(); // empty on purpose. $this->upgradeCommands = [ // there are 5 initial commands @@ -71,7 +67,7 @@ class InstallController extends Controller 'firefly-iii:verify-security-alerts' => [], ]; - $this->lastError = ''; + $this->lastError = ''; } /** @@ -91,11 +87,6 @@ class InstallController extends Controller return view('install.index'); } - /** - * @param Request $request - * - * @return JsonResponse - */ public function runCommand(Request $request): JsonResponse { $requestIndex = (int)$request->get('index'); @@ -107,18 +98,19 @@ class InstallController extends Controller 'errorMessage' => null, ]; - Log::debug(sprintf('Will now run commands. Request index is %d', $requestIndex)); - $indexes = array_values(array_keys($this->upgradeCommands)); + app('log')->debug(sprintf('Will now run commands. Request index is %d', $requestIndex)); + $indexes = array_values(array_keys($this->upgradeCommands)); if (array_key_exists($requestIndex, $indexes)) { - $command = $indexes[$requestIndex]; - $parameters = $this->upgradeCommands[$command]; - Log::debug(sprintf('Will now execute command "%s" with parameters', $command), $parameters); + $command = $indexes[$requestIndex]; + $parameters = $this->upgradeCommands[$command]; + app('log')->debug(sprintf('Will now execute command "%s" with parameters', $command), $parameters); + try { $result = $this->executeCommand($command, $parameters); } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); - if (strpos($e->getMessage(), 'open_basedir restriction in effect')) { + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + if (str_contains($e->getMessage(), 'open_basedir restriction in effect')) { $this->lastError = self::BASEDIR_ERROR; } $result = false; @@ -127,38 +119,37 @@ class InstallController extends Controller if (false === $result) { $response['errorMessage'] = $this->lastError; $response['error'] = true; + return response()->json($response); } $response['hasNextCommand'] = array_key_exists($requestIndex + 1, $indexes); $response['previous'] = $command; } + return response()->json($response); } /** - * @param string $command - * @param array $args - * - * @return bool * @throws FireflyException */ private function executeCommand(string $command, array $args): bool { - Log::debug(sprintf('Will now call command %s with args.', $command), $args); + app('log')->debug(sprintf('Will now call command %s with args.', $command), $args); + try { if ('generate-keys' === $command) { $this->keys(); } if ('generate-keys' !== $command) { - Artisan::call($command, $args); - Log::debug(Artisan::output()); + \Artisan::call($command, $args); + app('log')->debug(\Artisan::output()); } - } catch (Exception $e) { // intentional generic exception + } catch (\Exception $e) { // intentional generic exception throw new FireflyException($e->getMessage(), 0, $e); } // clear cache as well. - Cache::clear(); - Preferences::mark(); + \Cache::clear(); + app('preferences')->mark(); return true; } @@ -168,11 +159,7 @@ class InstallController extends Controller */ public function keys(): void { - // switch on PHP version. - $keys = []; - // switch on class existence. - Log::info('Will run PHP8 code.'); - $keys = RSA::createKey(4096); + $key = RSA::createKey(4096); [$publicKey, $privateKey] = [ Passport::keyPath('oauth-public.key'), @@ -183,7 +170,7 @@ class InstallController extends Controller return; } - file_put_contents($publicKey, $keys['publickey']); - file_put_contents($privateKey, $keys['privatekey']); + file_put_contents($publicKey, (string)$key->getPublicKey()); + file_put_contents($privateKey, $key->toString('PKCS1')); } } diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php index 1fd2592349..964282de65 100644 --- a/app/Http/Controllers/TagController.php +++ b/app/Http/Controllers/TagController.php @@ -36,8 +36,6 @@ use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class TagController. @@ -81,8 +79,8 @@ class TagController extends Controller $subTitleIcon = 'fa-tag'; // location info: - $hasOldInput = null !== $request->old('_token'); - $locations = [ + $hasOldInput = null !== $request->old('_token'); + $locations = [ 'location' => [ 'latitude' => $hasOldInput ? old('location_latitude') : config('firefly.default_location.latitude'), 'longitude' => $hasOldInput ? old('location_longitude') : config('firefly.default_location.longitude'), @@ -103,8 +101,6 @@ class TagController extends Controller /** * Delete a tag. * - * @param Tag $tag - * * @return Factory|View */ public function delete(Tag $tag) @@ -120,8 +116,6 @@ class TagController extends Controller /** * Edit a tag. * - * @param Tag $tag - * * @return Factory|View */ public function edit(Tag $tag) @@ -129,12 +123,12 @@ class TagController extends Controller $subTitle = (string)trans('firefly.edit_tag', ['tag' => $tag->tag]); $subTitleIcon = 'fa-tag'; - $location = $this->repository->getLocation($tag); - $latitude = $location ? $location->latitude : config('firefly.default_location.latitude'); - $longitude = $location ? $location->longitude : config('firefly.default_location.longitude'); - $zoomLevel = $location ? $location->zoom_level : config('firefly.default_location.zoom_level'); - $hasLocation = null !== $location; - $locations = [ + $location = $this->repository->getLocation($tag); + $latitude = null !== $location ? $location->latitude : config('firefly.default_location.latitude'); + $longitude = null !== $location ? $location->longitude : config('firefly.default_location.longitude'); + $zoomLevel = null !== $location ? $location->zoom_level : config('firefly.default_location.zoom_level'); + $hasLocation = null !== $location; + $locations = [ 'location' => [ 'latitude' => old('location_latitude') ?? $latitude, 'longitude' => old('location_longitude') ?? $longitude, @@ -155,16 +149,14 @@ class TagController extends Controller /** * Edit a tag. * - * @param TagRepositoryInterface $repository - * * @return Factory|View */ public function index(TagRepositoryInterface $repository) { // start with oldest tag - $first = session('first', today()) ?? today(); - $oldestTagDate = null === $repository->oldestTag() ? clone $first : $repository->oldestTag()->date; - $newestTagDate = null === $repository->newestTag() ? today() : $repository->newestTag()->date; + $first = session('first', today()) ?? today(); + $oldestTagDate = null === $repository->oldestTag() ? clone $first : $repository->oldestTag()->date; + $newestTagDate = null === $repository->newestTag() ? today() : $repository->newestTag()->date; $oldestTagDate->startOfYear(); $newestTagDate->endOfYear(); $tags = []; @@ -175,17 +167,14 @@ class TagController extends Controller $tags[$year] = $repository->getTagsInYear($year); $newestTagDate->subYear(); } - $count = $repository->count(); + $count = $repository->count(); return view('tags.index', compact('tags', 'count')); } - /** - * - */ - public function massDestroy(Request $request) + public function massDestroy(Request $request): RedirectResponse { - $tags = $request->get('tags'); + $tags = $request->get('tags'); if (null === $tags || !is_array($tags)) { session()->flash('info', (string)trans('firefly.select_tags_to_delete')); @@ -197,20 +186,16 @@ class TagController extends Controller $tag = $this->repository->find($tagId); if (null !== $tag) { $this->repository->destroy($tag); - $count++; + ++$count; } } - session()->flash('success', (string)trans_choice('firefly.deleted_x_tags', $count)); + session()->flash('success', trans_choice('firefly.deleted_x_tags', $count)); return redirect(route('tags.index')); } /** * Destroy a tag. - * - * @param Tag $tag - * - * @return RedirectResponse */ public function destroy(Tag $tag): RedirectResponse { @@ -226,15 +211,9 @@ class TagController extends Controller /** * Show a single tag. * - * @param Request $request - * @param Tag $tag - * @param Carbon|null $start - * @param Carbon|null $end - * * @return Factory|View + * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function show(Request $request, Tag $tag, Carbon $start = null, Carbon $end = null) { @@ -242,8 +221,8 @@ class TagController extends Controller $subTitleIcon = 'fa-tag'; $page = (int)$request->get('page'); $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - $start = $start ?? session('start'); - $end = $end ?? session('end'); + $start ??= session('start'); + $end ??= session('end'); $location = $this->repository->getLocation($tag); $attachments = $this->repository->getAttachments($tag); $subTitle = trans( @@ -255,20 +234,21 @@ class TagController extends Controller ] ); - $startPeriod = $this->repository->firstUseDate($tag); - $startPeriod = $startPeriod ?? today(config('app.timezone')); - $endPeriod = clone $end; - $periods = $this->getTagPeriodOverview($tag, $startPeriod, $endPeriod); - $path = route('tags.show', [$tag->id, $start->format('Y-m-d'), $end->format('Y-m-d')]); + $startPeriod = $this->repository->firstUseDate($tag); + $startPeriod ??= today(config('app.timezone')); + $endPeriod = clone $end; + $periods = $this->getTagPeriodOverview($tag, $startPeriod, $endPeriod); + $path = route('tags.show', [$tag->id, $start->format('Y-m-d'), $end->format('Y-m-d')]); /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->setLimit($pageSize)->setPage($page)->withAccountInformation() - ->setTag($tag)->withBudgetInformation()->withCategoryInformation(); - $groups = $collector->getPaginatedGroups(); + ->setTag($tag)->withBudgetInformation()->withCategoryInformation() + ; + $groups = $collector->getPaginatedGroups(); $groups->setPath($path); - $sums = $this->repository->sumsOfTag($tag, $start, $end); + $sums = $this->repository->sumsOfTag($tag, $start, $end); return view('tags.show', compact('tag', 'attachments', 'sums', 'periods', 'subTitle', 'subTitleIcon', 'groups', 'start', 'end', 'location')); } @@ -276,12 +256,7 @@ class TagController extends Controller /** * Show a single tag over all time. * - * @param Request $request - * @param Tag $tag - * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function showAll(Request $request, Tag $tag) { @@ -296,42 +271,41 @@ class TagController extends Controller $attachments = $this->repository->getAttachments($tag); $path = route('tags.show', [$tag->id, 'all']); $location = $this->repository->getLocation($tag); + /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->setLimit($pageSize)->setPage($page)->withAccountInformation() - ->setTag($tag)->withBudgetInformation()->withCategoryInformation(); - $groups = $collector->getPaginatedGroups(); + ->setTag($tag)->withBudgetInformation()->withCategoryInformation() + ; + $groups = $collector->getPaginatedGroups(); $groups->setPath($path); - $sums = $this->repository->sumsOfTag($tag, $start, $end); + $sums = $this->repository->sumsOfTag($tag, $start, $end); return view('tags.show', compact('tag', 'attachments', 'sums', 'periods', 'subTitle', 'subTitleIcon', 'groups', 'start', 'end', 'location')); } /** * Store a tag. - * - * @param TagFormRequest $request - * - * @return RedirectResponse */ public function store(TagFormRequest $request): RedirectResponse { - $data = $request->collectTagData(); - Log::debug('Data from request', $data); + $data = $request->collectTagData(); + app('log')->debug('Data from request', $data); - $result = $this->repository->store($data); - Log::debug('Data after storage', $result->toArray()); + $result = $this->repository->store($data); + app('log')->debug('Data after storage', $result->toArray()); session()->flash('success', (string)trans('firefly.created_tag', ['tag' => $data['tag']])); app('preferences')->mark(); // store attachment(s): - /** @var array $files */ - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachmentsHelper->saveAttachmentsForModel($result, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } @@ -350,27 +324,23 @@ class TagController extends Controller /** * Update a tag. - * - * @param TagFormRequest $request - * @param Tag $tag - * - * @return RedirectResponse */ public function update(TagFormRequest $request, Tag $tag): RedirectResponse { - $data = $request->collectTagData(); - $tag = $this->repository->update($tag, $data); + $data = $request->collectTagData(); + $tag = $this->repository->update($tag, $data); session()->flash('success', (string)trans('firefly.updated_tag', ['tag' => $data['tag']])); app('preferences')->mark(); // store new attachment(s): - /** @var array $files */ - $files = $request->hasFile('attachments') ? $request->file('attachments') : null; + /** @var null|array $files */ + $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachmentsHelper->saveAttachmentsForModel($tag, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { + Log::channel('audit')->warning(sprintf('The demo user is trying to upload attachments in %s.', __METHOD__)); session()->flash('info', (string)trans('firefly.no_att_demo_user')); } diff --git a/app/Http/Controllers/Transaction/BulkController.php b/app/Http/Controllers/Transaction/BulkController.php index 28f4831ea4..79d58cfda2 100644 --- a/app/Http/Controllers/Transaction/BulkController.php +++ b/app/Http/Controllers/Transaction/BulkController.php @@ -34,7 +34,6 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** @@ -47,8 +46,6 @@ class BulkController extends Controller /** * BulkController constructor. - * - */ public function __construct() { @@ -70,13 +67,11 @@ class BulkController extends Controller * * TODO user wont be able to tell if the journal is part of a split. * - * @param array $journals - * * @return Factory|View */ public function edit(array $journals) { - $subTitle = (string)trans('firefly.mass_bulk_journals'); + $subTitle = (string)trans('firefly.mass_bulk_journals'); $this->rememberPreviousUrl('transactions.bulk-edit.url'); @@ -93,9 +88,7 @@ class BulkController extends Controller /** * Update all journals. * - * @param BulkEditJournalRequest $request - * - * @return Application|RedirectResponse|Redirector + * @return Application|Redirector|RedirectResponse */ public function update(BulkEditJournalRequest $request) { @@ -115,7 +108,7 @@ class BulkController extends Controller $resultB = $this->updateJournalTags($journal, $tagsAction, explode(',', $request->convertString('tags'))); $resultC = $this->updateJournalCategory($journal, $ignoreCategory, $request->convertString('category')); if ($resultA || $resultB || $resultC) { - $count++; + ++$count; $collection->push($journal); } } @@ -128,41 +121,27 @@ class BulkController extends Controller } app('preferences')->mark(); - $request->session()->flash('success', (string)trans_choice('firefly.mass_edited_transactions_success', $count)); + $request->session()->flash('success', trans_choice('firefly.mass_edited_transactions_success', $count)); // redirect to previous URL: return redirect($this->getPreviousUrl('transactions.bulk-edit.url')); } - /** - * @param TransactionJournal $journal - * @param bool $ignoreUpdate - * @param int $budgetId - * - * @return bool - */ private function updateJournalBudget(TransactionJournal $journal, bool $ignoreUpdate, int $budgetId): bool { if (true === $ignoreUpdate) { return false; } - Log::debug(sprintf('Set budget to %d', $budgetId)); + app('log')->debug(sprintf('Set budget to %d', $budgetId)); $this->repository->updateBudget($journal, $budgetId); return true; } - /** - * @param TransactionJournal $journal - * @param string $action - * @param array $tags - * - * @return bool - */ private function updateJournalTags(TransactionJournal $journal, string $action, array $tags): bool { if ('do_replace' === $action) { - Log::debug(sprintf('Set tags to %s', implode(',', $tags))); + app('log')->debug(sprintf('Set tags to %s', implode(',', $tags))); $this->repository->updateTags($journal, $tags); } if ('do_append' === $action) { @@ -174,19 +153,12 @@ class BulkController extends Controller return true; } - /** - * @param TransactionJournal $journal - * @param bool $ignoreUpdate - * @param string $category - * - * @return bool - */ private function updateJournalCategory(TransactionJournal $journal, bool $ignoreUpdate, string $category): bool { if (true === $ignoreUpdate) { return false; } - Log::debug(sprintf('Set budget to %s', $category)); + app('log')->debug(sprintf('Set budget to %s', $category)); $this->repository->updateCategory($journal, $category); return true; diff --git a/app/Http/Controllers/Transaction/ConvertController.php b/app/Http/Controllers/Transaction/ConvertController.php index ac5b9e6cab..7d4ceadece 100644 --- a/app/Http/Controllers/Transaction/ConvertController.php +++ b/app/Http/Controllers/Transaction/ConvertController.php @@ -33,7 +33,6 @@ use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Services\Internal\Update\JournalUpdateService; use FireflyIII\Support\Http\Controllers\ModelInformation; use FireflyIII\Transformers\TransactionGroupTransformer; @@ -42,7 +41,6 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** @@ -55,12 +53,9 @@ class ConvertController extends Controller use ModelInformation; private AccountRepositoryInterface $accountRepository; - private JournalRepositoryInterface $repository; /** * ConvertController constructor. - * - */ public function __construct() { @@ -69,7 +64,6 @@ class ConvertController extends Controller // some useful repositories: $this->middleware( function ($request, $next) { - $this->repository = app(JournalRepositoryInterface::class); $this->accountRepository = app(AccountRepositoryInterface::class); app('view')->share('title', (string)trans('firefly.transactions')); app('view')->share('mainTitleIcon', 'fa-exchange'); @@ -82,12 +76,9 @@ class ConvertController extends Controller /** * Show overview of a to be converted transaction. * - * @param TransactionType $destinationType - * @param TransactionGroup $group - * - * @return RedirectResponse|Redirector|Factory|View - * @throws Exception + * @return Factory|Redirector|RedirectResponse|View * + * @throws \Exception */ public function index(TransactionType $destinationType, TransactionGroup $group) { @@ -96,16 +87,16 @@ class ConvertController extends Controller } /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); /** @var TransactionJournal $first */ - $first = $group->transactionJournals()->first(); - $sourceType = $first->transactionType; + $first = $group->transactionJournals()->first(); + $sourceType = $first->transactionType; - $groupTitle = $group->title ?? $first->description; - $groupArray = $transformer->transformObject($group); - $subTitle = (string)trans('firefly.convert_to_' . $destinationType->type, ['description' => $groupTitle]); - $subTitleIcon = 'fa-exchange'; + $groupTitle = $group->title ?? $first->description; + $groupArray = $transformer->transformObject($group); + $subTitle = (string)trans('firefly.convert_to_'.$destinationType->type, ['description' => $groupTitle]); + $subTitleIcon = 'fa-exchange'; // get a list of asset accounts and liabilities and stuff, in various combinations: $validDepositSources = $this->getValidDepositSources(); @@ -114,13 +105,13 @@ class ConvertController extends Controller $assets = $this->getAssetAccounts(); // old input variables: - $preFilled = [ + $preFilled = [ 'source_name' => old('source_name'), ]; if ($sourceType->type === $destinationType->type) { // cannot convert to its own type. - Log::debug('This is already a transaction of the expected type..'); - session()->flash('info', (string)trans('firefly.convert_is_already_type_' . $destinationType->type)); + app('log')->debug('This is already a transaction of the expected type..'); + session()->flash('info', (string)trans('firefly.convert_is_already_type_'.$destinationType->type)); return redirect(route('transactions.show', [$group->id])); } @@ -144,28 +135,27 @@ class ConvertController extends Controller ); } - /** - * @return array - */ private function getValidDepositSources(): array { // make repositories $liabilityTypes = [AccountType::MORTGAGE, AccountType::DEBT, AccountType::CREDITCARD, AccountType::LOAN]; $accountList = $this->accountRepository - ->getActiveAccountsByType([AccountType::REVENUE, AccountType::CASH, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]); + ->getActiveAccountsByType([AccountType::REVENUE, AccountType::CASH, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]) + ; $grouped = []; + // group accounts: /** @var Account $account */ foreach ($accountList as $account) { - $role = (string)$this->accountRepository->getMetaValue($account, 'account_role'); - $name = $account->name; + $role = (string)$this->accountRepository->getMetaValue($account, 'account_role'); + $name = $account->name; if ('' === $role) { $role = 'no_account_type'; } // maybe it's a liability thing: if (in_array($account->accountType->type, $liabilityTypes, true)) { - $role = 'l_' . $account->accountType->type; + $role = 'l_'.$account->accountType->type; } if (AccountType::CASH === $account->accountType->type) { $role = 'cash_account'; @@ -175,16 +165,13 @@ class ConvertController extends Controller $role = 'revenue_account'; } - $key = (string)trans('firefly.opt_group_' . $role); + $key = (string)trans('firefly.opt_group_'.$role); $grouped[$key][$account->id] = $name; } return $grouped; } - /** - * @return array - */ private function getValidWithdrawalDests(): array { // make repositories @@ -193,18 +180,19 @@ class ConvertController extends Controller [AccountType::EXPENSE, AccountType::CASH, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE] ); $grouped = []; + // group accounts: /** @var Account $account */ foreach ($accountList as $account) { - $role = (string)$this->accountRepository->getMetaValue($account, 'account_role'); - $name = $account->name; + $role = (string)$this->accountRepository->getMetaValue($account, 'account_role'); + $name = $account->name; if ('' === $role) { $role = 'no_account_type'; } // maybe it's a liability thing: if (in_array($account->accountType->type, $liabilityTypes, true)) { - $role = 'l_' . $account->accountType->type; + $role = 'l_'.$account->accountType->type; } if (AccountType::CASH === $account->accountType->type) { $role = 'cash_account'; @@ -214,7 +202,7 @@ class ConvertController extends Controller $role = 'expense_account'; } - $key = (string)trans('firefly.opt_group_' . $role); + $key = (string)trans('firefly.opt_group_'.$role); $grouped[$key][$account->id] = $name; } @@ -222,8 +210,7 @@ class ConvertController extends Controller } /** - * @return array - * @throws Exception + * @throws \Exception */ private function getLiabilities(): array { @@ -231,22 +218,22 @@ class ConvertController extends Controller $accountList = $this->accountRepository->getActiveAccountsByType([AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]); $defaultCurrency = app('amount')->getDefaultCurrency(); $grouped = []; + // group accounts: /** @var Account $account */ foreach ($accountList as $account) { $balance = app('steam')->balance($account, today()); $currency = $this->accountRepository->getAccountCurrency($account) ?? $defaultCurrency; - $role = 'l_' . $account->accountType->type; - $key = (string)trans('firefly.opt_group_' . $role); - $grouped[$key][$account->id] = $account->name . ' (' . app('amount')->formatAnything($currency, $balance, false) . ')'; + $role = 'l_'.$account->accountType->type; + $key = (string)trans('firefly.opt_group_'.$role); + $grouped[$key][$account->id] = $account->name.' ('.app('amount')->formatAnything($currency, $balance, false).')'; } return $grouped; } /** - * @return array - * @throws Exception + * @throws \Exception */ private function getAssetAccounts(): array { @@ -254,18 +241,19 @@ class ConvertController extends Controller $accountList = $this->accountRepository->getActiveAccountsByType([AccountType::ASSET]); $defaultCurrency = app('amount')->getDefaultCurrency(); $grouped = []; + // group accounts: /** @var Account $account */ foreach ($accountList as $account) { - $balance = app('steam')->balance($account, today()); - $currency = $this->accountRepository->getAccountCurrency($account) ?? $defaultCurrency; - $role = (string)$this->accountRepository->getMetaValue($account, 'account_role'); + $balance = app('steam')->balance($account, today()); + $currency = $this->accountRepository->getAccountCurrency($account) ?? $defaultCurrency; + $role = (string)$this->accountRepository->getMetaValue($account, 'account_role'); if ('' === $role) { $role = 'no_account_type'; } - $key = (string)trans('firefly.opt_group_' . $role); - $grouped[$key][$account->id] = $account->name . ' (' . app('amount')->formatAnything($currency, $balance, false) . ')'; + $key = (string)trans('firefly.opt_group_'.$role); + $grouped[$key][$account->id] = $account->name.' ('.app('amount')->formatAnything($currency, $balance, false).')'; } return $grouped; @@ -274,12 +262,7 @@ class ConvertController extends Controller /** * Do the conversion. * - * @param Request $request - * @param TransactionType $destinationType - * @param TransactionGroup $group - * - * @return RedirectResponse|Redirector - * + * @return Redirector|RedirectResponse */ public function postIndex(Request $request, TransactionType $destinationType, TransactionGroup $group) { @@ -302,39 +285,34 @@ class ConvertController extends Controller // correct transfers: $group->refresh(); - session()->flash('success', (string)trans('firefly.converted_to_' . $destinationType->type)); + session()->flash('success', (string)trans('firefly.converted_to_'.$destinationType->type)); event(new UpdatedTransactionGroup($group, true, true)); return redirect(route('transactions.show', [$group->id])); } /** - * @param TransactionJournal $journal - * @param TransactionType $transactionType - * @param array $data - * - * @return TransactionJournal * @throws FireflyException */ private function convertJournal(TransactionJournal $journal, TransactionType $transactionType, array $data): TransactionJournal { /** @var AccountValidator $validator */ - $validator = app(AccountValidator::class); + $validator = app(AccountValidator::class); $validator->setUser(auth()->user()); $validator->setTransactionType($transactionType->type); - $sourceId = $data['source_id'][$journal->id] ?? null; - $sourceName = $data['source_name'][$journal->id] ?? null; - $destinationId = $data['destination_id'][$journal->id] ?? null; - $destinationName = $data['destination_name'][$journal->id] ?? null; + $sourceId = $data['source_id'][$journal->id] ?? null; + $sourceName = $data['source_name'][$journal->id] ?? null; + $destinationId = $data['destination_id'][$journal->id] ?? null; + $destinationName = $data['destination_name'][$journal->id] ?? null; // double check its not an empty string. $sourceId = '' === $sourceId || null === $sourceId ? null : (int)$sourceId; $sourceName = '' === $sourceName ? null : (string)$sourceName; $destinationId = '' === $destinationId || null === $destinationId ? null : (int)$destinationId; $destinationName = '' === $destinationName ? null : (string)$destinationName; - $validSource = $validator->validateSource(['id' => $sourceId, 'name' => $sourceName,]); - $validDestination = $validator->validateDestination(['id' => $destinationId, 'name' => $destinationName,]); + $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)); @@ -345,15 +323,16 @@ class ConvertController extends Controller // TODO typeOverrule: the account validator may have another opinion on the transaction type. - $update = [ + $update = [ 'source_id' => $sourceId, 'source_name' => $sourceName, 'destination_id' => $destinationId, 'destination_name' => $destinationName, 'type' => $transactionType->type, ]; + /** @var JournalUpdateService $service */ - $service = app(JournalUpdateService::class); + $service = app(JournalUpdateService::class); $service->setTransactionJournal($journal); $service->setData($update); $service->update(); diff --git a/app/Http/Controllers/Transaction/CreateController.php b/app/Http/Controllers/Transaction/CreateController.php index aa0b5ea285..efbeca2252 100644 --- a/app/Http/Controllers/Transaction/CreateController.php +++ b/app/Http/Controllers/Transaction/CreateController.php @@ -33,9 +33,6 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class CreateController @@ -46,8 +43,6 @@ class CreateController extends Controller /** * CreateController constructor. - * - */ public function __construct() { @@ -64,11 +59,6 @@ class CreateController extends Controller ); } - /** - * @param Request $request - * - * @return JsonResponse - */ public function cloneGroup(Request $request): JsonResponse { $groupId = (int)$request->get('id'); @@ -84,11 +74,15 @@ class CreateController extends Controller app('preferences')->mark(); - $title = $newGroup->title ?? $newGroup->transactionJournals->first()->description; - $link = route('transactions.show', [$newGroup->id]); + $title = $newGroup->title ?? $newGroup->transactionJournals->first()->description; + $link = route('transactions.show', [$newGroup->id]); session()->flash('success', trans('firefly.stored_journal', ['description' => $title])); session()->flash('success_url', $link); + if ('edit' === $request->get('redirect')) { + return response()->json(['redirect' => route('transactions.edit', [$newGroup->id])]); + } + return response()->json(['redirect' => route('transactions.show', [$newGroup->id])]); } } @@ -99,35 +93,51 @@ class CreateController extends Controller /** * Create a new transaction group. * - * @param string|null $objectType - * * @return Factory|View + * * @throws FireflyException - * @throws JsonException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ + * */ public function create(?string $objectType) { app('preferences')->mark(); - $sourceId = (int)request()->get('source'); - $destinationId = (int)request()->get('destination'); + $sourceId = (int)request()->get('source'); + $destinationId = (int)request()->get('destination'); /** @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'; - $optionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; - $allowedOpposingTypes = config('firefly.allowed_opposing_types'); - $accountToTypes = config('firefly.account_to_transaction'); - $defaultCurrency = app('amount')->getDefaultCurrency(); - $previousUrl = $this->rememberPreviousUrl('transactions.create.url'); - $parts = parse_url($previousUrl); - $search = sprintf('?%s', $parts['query'] ?? ''); - $previousUrl = str_replace($search, '', $previousUrl); + $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'; + $optionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; + $allowedOpposingTypes = config('firefly.allowed_opposing_types'); + $accountToTypes = config('firefly.account_to_transaction'); + $defaultCurrency = app('amount')->getDefaultCurrency(); + $previousUrl = $this->rememberPreviousUrl('transactions.create.url'); + $parts = parse_url($previousUrl); + $search = sprintf('?%s', $parts['query'] ?? ''); + $previousUrl = str_replace($search, '', $previousUrl); + if (!is_array($optionalFields)) { + $optionalFields = []; + } + // not really a fan of this, but meh. + $optionalDateFields = [ + 'interest_date' => $optionalFields['interest_date'] ?? false, + 'book_date' => $optionalFields['book_date'] ?? false, + 'process_date' => $optionalFields['process_date'] ?? false, + 'due_date' => $optionalFields['due_date'] ?? false, + 'payment_date' => $optionalFields['payment_date'] ?? false, + 'invoice_date' => $optionalFields['invoice_date'] ?? false, + ]; + $optionalFields['external_url'] ??= false; + $optionalFields['location'] ??= false; + $optionalFields['location'] = $optionalFields['location'] && true === config('firefly.enable_external_map'); + + // map info: + $longitude = config('firefly.default_location.longitude'); + $latitude = config('firefly.default_location.latitude'); + $zoomLevel = config('firefly.default_location.zoom_level'); session()->put('preFilled', $preFilled); @@ -136,7 +146,11 @@ class CreateController extends Controller compact( 'subTitleIcon', 'cash', + 'longitude', + 'latitude', + 'zoomLevel', 'objectType', + 'optionalDateFields', 'subTitle', 'defaultCurrency', 'previousUrl', diff --git a/app/Http/Controllers/Transaction/DeleteController.php b/app/Http/Controllers/Transaction/DeleteController.php index 8e2acc65bb..1519027067 100644 --- a/app/Http/Controllers/Transaction/DeleteController.php +++ b/app/Http/Controllers/Transaction/DeleteController.php @@ -34,7 +34,6 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** @@ -46,8 +45,6 @@ class DeleteController extends Controller /** * IndexController constructor. - * - */ public function __construct() { @@ -69,9 +66,7 @@ class DeleteController extends Controller /** * Shows the form that allows a user to delete a transaction journal. * - * @param TransactionGroup $group - * - * @return Factory|View|Redirector|RedirectResponse + * @return Factory|Redirector|RedirectResponse|View */ public function delete(TransactionGroup $group) { @@ -79,17 +74,17 @@ class DeleteController extends Controller return $this->redirectGroupToAccount($group); } - Log::debug(sprintf('Start of delete view for group #%d', $group->id)); + app('log')->debug(sprintf('Start of delete view for group #%d', $group->id)); - $journal = $group->transactionJournals->first(); + $journal = $group->transactionJournals->first(); if (null === $journal) { throw new NotFoundHttpException(); } $objectType = strtolower($journal->transaction_type_type ?? $journal->transactionType->type); - $subTitle = (string)trans('firefly.delete_' . $objectType, ['description' => $group->title ?? $journal->description]); + $subTitle = (string)trans('firefly.delete_'.$objectType, ['description' => $group->title ?? $journal->description]); $previous = app('steam')->getSafePreviousUrl(); // put previous url in session - Log::debug('Will try to remember previous URL'); + app('log')->debug('Will try to remember previous URL'); $this->rememberPreviousUrl('transactions.delete.url'); return view('transactions.delete', compact('group', 'journal', 'subTitle', 'objectType', 'previous')); @@ -97,31 +92,28 @@ class DeleteController extends Controller /** * Actually destroys the journal. - * - * @param TransactionGroup $group - * - * @return RedirectResponse */ - public function destroy(TransactionGroup $group): RedirectResponse + public function destroy(TransactionGroup $group): Redirector|RedirectResponse { - Log::debug(sprintf('Now in %s(#%d).', __METHOD__, $group->id)); + app('log')->debug(sprintf('Now in %s(#%d).', __METHOD__, $group->id)); if (!$this->isEditableGroup($group)) { return $this->redirectGroupToAccount($group); } - $journal = $group->transactionJournals->first(); + $journal = $group->transactionJournals->first(); if (null === $journal) { throw new NotFoundHttpException(); } $objectType = strtolower($journal->transaction_type_type ?? $journal->transactionType->type); - session()->flash('success', (string)trans('firefly.deleted_' . strtolower($objectType), ['description' => $group->title ?? $journal->description])); + session()->flash('success', (string)trans('firefly.deleted_'.strtolower($objectType), ['description' => $group->title ?? $journal->description])); // grab asset account(s) from group: - $accounts = []; - /** @var TransactionJournal $journal */ - foreach ($group->transactionJournals as $journal) { + $accounts = []; + + /** @var TransactionJournal $currentJournal */ + foreach ($group->transactionJournals as $currentJournal) { /** @var Transaction $transaction */ - foreach ($journal->transactions as $transaction) { + foreach ($currentJournal->transactions as $transaction) { $type = $transaction->account->accountType->type; // if is valid liability, trigger event! if (in_array($type, config('firefly.valid_liabilities'), true)) { @@ -134,12 +126,11 @@ class DeleteController extends Controller /** @var Account $account */ foreach ($accounts as $account) { - Log::debug(sprintf('Now going to trigger updated account event for account #%d', $account->id)); + app('log')->debug(sprintf('Now going to trigger updated account event for account #%d', $account->id)); event(new UpdatedAccount($account)); } app('preferences')->mark(); - return redirect($this->getPreviousUrl('transactions.delete.url')); } } diff --git a/app/Http/Controllers/Transaction/EditController.php b/app/Http/Controllers/Transaction/EditController.php index 0a23eb77ce..e2fe8ba23d 100644 --- a/app/Http/Controllers/Transaction/EditController.php +++ b/app/Http/Controllers/Transaction/EditController.php @@ -25,8 +25,11 @@ namespace FireflyIII\Http\Controllers\Transaction; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\TransactionGroup; +use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Contracts\View\Factory; +use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; use Illuminate\View\View; @@ -36,30 +39,30 @@ use Illuminate\View\View; */ class EditController extends Controller { - /** - * EditController constructor. - * + private JournalRepositoryInterface $repository; + /** + * IndexController constructor. */ public function __construct() { parent::__construct(); - // some useful repositories: + // translations: $this->middleware( - static function ($request, $next) { + function ($request, $next) { app('view')->share('title', (string)trans('firefly.transactions')); app('view')->share('mainTitleIcon', 'fa-exchange'); + $this->repository = app(JournalRepositoryInterface::class); + return $next($request); } ); } /** - * @param TransactionGroup $transactionGroup - * - * @return Factory|View|RedirectResponse|Redirector + * @return Factory|Redirector|RedirectResponse|View */ public function edit(TransactionGroup $transactionGroup) { @@ -70,19 +73,43 @@ class EditController extends Controller } /** @var AccountRepositoryInterface $repository */ - $repository = app(AccountRepositoryInterface::class); - $allowedOpposingTypes = config('firefly.allowed_opposing_types'); - $accountToTypes = config('firefly.account_to_transaction'); - $expectedSourceTypes = config('firefly.expected_source_types'); - $allowedSourceDests = config('firefly.source_dests'); - // + $repository = app(AccountRepositoryInterface::class); + $allowedOpposingTypes = config('firefly.allowed_opposing_types'); + $accountToTypes = config('firefly.account_to_transaction'); + $expectedSourceTypes = config('firefly.expected_source_types'); + $allowedSourceDests = config('firefly.source_dests'); + $title = $transactionGroup->transactionJournals()->count() > 1 ? $transactionGroup->title : $transactionGroup->transactionJournals()->first()->description; + $subTitle = (string)trans('firefly.edit_transaction_title', ['description' => $title]); + $subTitleIcon = 'fa-plus'; + $defaultCurrency = app('amount')->getDefaultCurrency(); + $cash = $repository->getCashAccount(); + $previousUrl = $this->rememberPreviousUrl('transactions.edit.url'); + $parts = parse_url($previousUrl); + $search = sprintf('?%s', $parts['query'] ?? ''); + $previousUrl = str_replace($search, '', $previousUrl); - $defaultCurrency = app('amount')->getDefaultCurrency(); - $cash = $repository->getCashAccount(); - $previousUrl = $this->rememberPreviousUrl('transactions.edit.url'); - $parts = parse_url($previousUrl); - $search = sprintf('?%s', $parts['query'] ?? ''); - $previousUrl = str_replace($search, '', $previousUrl); + // settings necessary for v2 + $optionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; + if (!is_array($optionalFields)) { + $optionalFields = []; + } + // not really a fan of this, but meh. + $optionalDateFields = [ + 'interest_date' => $optionalFields['interest_date'] ?? false, + 'book_date' => $optionalFields['book_date'] ?? false, + 'process_date' => $optionalFields['process_date'] ?? false, + 'due_date' => $optionalFields['due_date'] ?? false, + 'payment_date' => $optionalFields['payment_date'] ?? false, + 'invoice_date' => $optionalFields['invoice_date'] ?? false, + ]; + $optionalFields['external_url'] ??= false; + $optionalFields['location'] ??= false; + $optionalFields['location'] = $optionalFields['location'] && true === config('firefly.enable_external_map'); + + // map info voor v2: + $longitude = config('firefly.default_location.longitude'); + $latitude = config('firefly.default_location.latitude'); + $zoomLevel = config('firefly.default_location.zoom_level'); return view( 'transactions.edit', @@ -90,6 +117,13 @@ class EditController extends Controller 'cash', 'allowedSourceDests', 'expectedSourceTypes', + 'optionalDateFields', + 'longitude', + 'latitude', + 'zoomLevel', + 'optionalFields', + 'subTitle', + 'subTitleIcon', 'transactionGroup', 'allowedOpposingTypes', 'accountToTypes', @@ -98,4 +132,11 @@ class EditController extends Controller ) ); } + + public function unreconcile(TransactionJournal $journal): JsonResponse + { + $this->repository->unreconcileById($journal->id); + + return response()->json([], 204); + } } diff --git a/app/Http/Controllers/Transaction/IndexController.php b/app/Http/Controllers/Transaction/IndexController.php index 74636f6fb2..8013113c6d 100644 --- a/app/Http/Controllers/Transaction/IndexController.php +++ b/app/Http/Controllers/Transaction/IndexController.php @@ -32,8 +32,6 @@ use FireflyIII\Support\Http\Controllers\PeriodOverview; use Illuminate\Contracts\View\Factory; use Illuminate\Http\Request; use Illuminate\View\View; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class IndexController @@ -46,8 +44,6 @@ class IndexController extends Controller /** * IndexController constructor. - * - */ public function __construct() { @@ -69,15 +65,9 @@ class IndexController extends Controller /** * Index for a range of transactions. * - * @param Request $request - * @param string $objectType - * @param Carbon|null $start - * @param Carbon|null $end - * * @return Factory|View + * * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function index(Request $request, string $objectType, Carbon $start = null, Carbon $end = null) { @@ -85,44 +75,52 @@ class IndexController extends Controller $objectType = 'transfer'; } - $subTitleIcon = config('firefly.transactionIconsByType.' . $objectType); - $types = config('firefly.transactionTypesByType.' . $objectType); + // add a split for the (future) v2 release. + $periods = []; + $groups = []; + $subTitle = 'TODO page subtitle in v2'; + + $subTitleIcon = config('firefly.transactionIconsByType.'.$objectType); + $types = config('firefly.transactionTypesByType.'.$objectType); $page = (int)$request->get('page'); $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; - if (null === $start) { - $start = session('start'); - $end = session('end'); + + if ('v2' !== (string)config('firefly.layout')) { + if (null === $start) { + $start = session('start'); + $end = session('end'); + } + if (null === $end) { + // get last transaction ever? + $last = $this->repository->getLast(); + $end = null !== $last ? $last->date : session('end'); + } + + [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; + $startStr = $start->isoFormat($this->monthAndDayFormat); + $endStr = $end->isoFormat($this->monthAndDayFormat); + $subTitle = (string)trans(sprintf('firefly.title_%s_between', $objectType), ['start' => $startStr, 'end' => $endStr]); + $path = route('transactions.index', [$objectType, $start->format('Y-m-d'), $end->format('Y-m-d')]); + $firstJournal = $this->repository->firstNull(); + $startPeriod = null === $firstJournal ? new Carbon() : $firstJournal->date; + $endPeriod = clone $end; + $periods = $this->getTransactionPeriodOverview($objectType, $startPeriod, $endPeriod); + + /** @var GroupCollectorInterface $collector */ + $collector = app(GroupCollectorInterface::class); + + $collector->setRange($start, $end) + ->setTypes($types) + ->setLimit($pageSize) + ->setPage($page) + ->withBudgetInformation() + ->withCategoryInformation() + ->withAccountInformation() + ->withAttachmentInformation() + ; + $groups = $collector->getPaginatedGroups(); + $groups->setPath($path); } - if (null === $end) { - // get last transaction ever? - $last = $this->repository->getLast(); - $end = $last ? $last->date : session('end'); - } - - [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; - $path = route('transactions.index', [$objectType, $start->format('Y-m-d'), $end->format('Y-m-d')]); - $startStr = $start->isoFormat($this->monthAndDayFormat); - $endStr = $end->isoFormat($this->monthAndDayFormat); - $subTitle = (string)trans(sprintf('firefly.title_%s_between', $objectType), ['start' => $startStr, 'end' => $endStr]); - - $firstJournal = $this->repository->firstNull(); - $startPeriod = null === $firstJournal ? new Carbon() : $firstJournal->date; - $endPeriod = clone $end; - $periods = $this->getTransactionPeriodOverview($objectType, $startPeriod, $endPeriod); - - /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); - - $collector->setRange($start, $end) - ->setTypes($types) - ->setLimit($pageSize) - ->setPage($page) - ->withBudgetInformation() - ->withCategoryInformation() - ->withAccountInformation() - ->withAttachmentInformation(); - $groups = $collector->getPaginatedGroups(); - $groups->setPath($path); return view('transactions.index', compact('subTitle', 'objectType', 'subTitleIcon', 'groups', 'periods', 'start', 'end')); } @@ -130,38 +128,34 @@ class IndexController extends Controller /** * Index for ALL transactions. * - * @param Request $request - * @param string $objectType - * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function indexAll(Request $request, string $objectType) { - $subTitleIcon = config('firefly.transactionIconsByType.' . $objectType); - $types = config('firefly.transactionTypesByType.' . $objectType); + $subTitleIcon = config('firefly.transactionIconsByType.'.$objectType); + $types = config('firefly.transactionTypesByType.'.$objectType); $page = (int)$request->get('page'); $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $path = route('transactions.index.all', [$objectType]); $first = $this->repository->firstNull(); $start = null === $first ? new Carbon() : $first->date; $last = $this->repository->getLast(); - $end = $last ? $last->date : today(config('app.timezone')); - $subTitle = (string)trans('firefly.all_' . $objectType); + $end = null !== $last ? $last->date : today(config('app.timezone')); + $subTitle = (string)trans('firefly.all_'.$objectType); /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end) - ->setTypes($types) - ->setLimit($pageSize) - ->setPage($page) - ->withAccountInformation() - ->withBudgetInformation() - ->withCategoryInformation() - ->withAttachmentInformation(); - $groups = $collector->getPaginatedGroups(); + ->setTypes($types) + ->setLimit($pageSize) + ->setPage($page) + ->withAccountInformation() + ->withBudgetInformation() + ->withCategoryInformation() + ->withAttachmentInformation() + ; + $groups = $collector->getPaginatedGroups(); $groups->setPath($path); return view('transactions.index', compact('subTitle', 'objectType', 'subTitleIcon', 'groups', 'start', 'end')); diff --git a/app/Http/Controllers/Transaction/LinkController.php b/app/Http/Controllers/Transaction/LinkController.php index f111b4460d..49a2e27dc8 100644 --- a/app/Http/Controllers/Transaction/LinkController.php +++ b/app/Http/Controllers/Transaction/LinkController.php @@ -33,7 +33,6 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; use Illuminate\View\View; /** @@ -46,8 +45,6 @@ class LinkController extends Controller /** * LinkController constructor. - * - */ public function __construct() { @@ -69,8 +66,6 @@ class LinkController extends Controller /** * Delete a link. * - * @param TransactionJournalLink $link - * * @return Factory|View */ public function delete(TransactionJournalLink $link) @@ -85,9 +80,7 @@ class LinkController extends Controller /** * Actually destroy it. * - * @param TransactionJournalLink $link - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function destroy(TransactionJournalLink $link) { @@ -100,8 +93,6 @@ class LinkController extends Controller } /** - * @param TransactionJournal $journal - * * @return Factory|View */ public function modal(TransactionJournal $journal) @@ -114,17 +105,14 @@ class LinkController extends Controller /** * Store a new link. * - * @param JournalLinkRequest $request - * @param TransactionJournal $journal - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function store(JournalLinkRequest $request, TransactionJournal $journal) { - $linkInfo = $request->getLinkInfo(); + $linkInfo = $request->getLinkInfo(); - Log::debug('We are here (store)'); - $other = $this->journalRepository->find($linkInfo['transaction_journal_id']); + app('log')->debug('We are here (store)'); + $other = $this->journalRepository->find($linkInfo['transaction_journal_id']); if (null === $other) { session()->flash('error', (string)trans('firefly.invalid_link_selection')); @@ -144,7 +132,7 @@ class LinkController extends Controller return redirect(route('transactions.show', [$journal->transaction_group_id])); } - Log::debug(sprintf('Journal is %d, opposing is %d', $journal->id, $other->id)); + app('log')->debug(sprintf('Journal is %d, opposing is %d', $journal->id, $other->id)); $this->repository->storeLink($linkInfo, $other, $journal); session()->flash('success', (string)trans('firefly.journals_linked')); @@ -154,9 +142,7 @@ class LinkController extends Controller /** * Switch link from A <> B to B <> A. * - * @param Request $request - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ public function switchLink(Request $request) { diff --git a/app/Http/Controllers/Transaction/MassController.php b/app/Http/Controllers/Transaction/MassController.php index c1837268a2..af7f14e87e 100644 --- a/app/Http/Controllers/Transaction/MassController.php +++ b/app/Http/Controllers/Transaction/MassController.php @@ -41,11 +41,9 @@ use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; use Illuminate\Support\Facades\Log; use Illuminate\View\View as IlluminateView; -use InvalidArgumentException; /** * Class MassController. - * */ class MassController extends Controller { @@ -53,8 +51,6 @@ class MassController extends Controller /** * MassController constructor. - * - */ public function __construct() { @@ -73,10 +69,6 @@ class MassController extends Controller /** * Mass delete transactions. - * - * @param array $journals - * - * @return IlluminateView */ public function delete(array $journals): IlluminateView { @@ -91,34 +83,34 @@ class MassController extends Controller /** * Do the mass delete. * - * @param MassDeleteJournalRequest $request - * * @return Application|Redirector|RedirectResponse - * */ public function destroy(MassDeleteJournalRequest $request) { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); $ids = $request->get('confirm_mass_delete'); $count = 0; if (is_array($ids)) { - Log::debug('Array of IDs', $ids); + app('log')->debug('Array of IDs', $ids); + /** @var string $journalId */ foreach ($ids as $journalId) { - Log::debug(sprintf('Searching for ID #%d', $journalId)); - /** @var TransactionJournal $journal */ + app('log')->debug(sprintf('Searching for ID #%d', $journalId)); + + /** @var null|TransactionJournal $journal */ $journal = $this->repository->find((int)$journalId); - if (null !== $journal && (int)$journalId === (int)$journal->id) { + if (null !== $journal && (int)$journalId === $journal->id) { $this->repository->destroyJournal($journal); ++$count; - Log::debug(sprintf('Deleted transaction journal #%d', $journalId)); + app('log')->debug(sprintf('Deleted transaction journal #%d', $journalId)); + continue; } - Log::debug(sprintf('Could not find transaction journal #%d', $journalId)); + app('log')->debug(sprintf('Could not find transaction journal #%d', $journalId)); } } app('preferences')->mark(); - session()->flash('success', (string)trans_choice('firefly.mass_deleted_transactions_success', $count)); + session()->flash('success', trans_choice('firefly.mass_deleted_transactions_success', $count)); // redirect to previous URL: return redirect($this->getPreviousUrl('transactions.mass-delete.url')); @@ -126,29 +118,25 @@ class MassController extends Controller /** * Mass edit of journals. - * - * @param array $journals - * - * @return IlluminateView */ public function edit(array $journals): IlluminateView { - $subTitle = (string)trans('firefly.mass_edit_journals'); + $subTitle = (string)trans('firefly.mass_edit_journals'); /** @var AccountRepositoryInterface $accountRepository */ - $accountRepository = app(AccountRepositoryInterface::class); + $accountRepository = app(AccountRepositoryInterface::class); // valid withdrawal sources: - $array = array_keys(config(sprintf('firefly.source_dests.%s', TransactionType::WITHDRAWAL))); - $withdrawalSources = $accountRepository->getAccountsByType($array); + $array = array_keys(config(sprintf('firefly.source_dests.%s', TransactionType::WITHDRAWAL))); + $withdrawalSources = $accountRepository->getAccountsByType($array); // valid deposit destinations: $array = config(sprintf('firefly.source_dests.%s.%s', TransactionType::DEPOSIT, AccountType::REVENUE)); $depositDestinations = $accountRepository->getAccountsByType($array); /** @var BudgetRepositoryInterface $budgetRepository */ - $budgetRepository = app(BudgetRepositoryInterface::class); - $budgets = $budgetRepository->getBudgets(); + $budgetRepository = app(BudgetRepositoryInterface::class); + $budgets = $budgetRepository->getBudgets(); // reverse amounts foreach ($journals as $index => $journal) { @@ -165,9 +153,8 @@ class MassController extends Controller /** * Mass update of journals. * - * @param MassEditJournalRequest $request + * @return Redirector|RedirectResponse * - * @return RedirectResponse|Redirector * @throws FireflyException */ public function update(MassEditJournalRequest $request) @@ -177,29 +164,28 @@ class MassController extends Controller // TODO this is a weird error, should be caught. throw new FireflyException('This is not an array.'); } - $count = 0; + $count = 0; + /** @var string $journalId */ foreach ($journalIds as $journalId) { $integer = (int)$journalId; + try { $this->updateJournal($integer, $request); - $count++; + ++$count; } catch (FireflyException $e) { // @ignoreException } } app('preferences')->mark(); - session()->flash('success', (string)trans_choice('firefly.mass_edited_transactions_success', $count)); + session()->flash('success', trans_choice('firefly.mass_edited_transactions_success', $count)); // redirect to previous URL: return redirect($this->getPreviousUrl('transactions.mass-edit.url')); } /** - * @param int $journalId - * @param MassEditJournalRequest $request - * * @throws FireflyException */ private function updateJournal(int $journalId, MassEditJournalRequest $request): void @@ -212,7 +198,7 @@ class MassController extends Controller // for each field, call the update service. $service->setTransactionJournal($journal); - $data = [ + $data = [ 'date' => $this->getDateFromRequest($request, $journal->id, 'date'), 'description' => $this->getStringFromRequest($request, $journal->id, 'description'), 'source_id' => $this->getIntFromRequest($request, $journal->id, 'source_id'), @@ -224,7 +210,7 @@ class MassController extends Controller 'amount' => $this->getStringFromRequest($request, $journal->id, 'amount'), 'foreign_amount' => $this->getStringFromRequest($request, $journal->id, 'foreign_amount'), ]; - Log::debug(sprintf('Will update journal #%d with data.', $journal->id), $data); + app('log')->debug(sprintf('Will update journal #%d with data.', $journal->id), $data); // call service to update. $service->setData($data); @@ -233,13 +219,6 @@ class MassController extends Controller event(new UpdatedTransactionGroup($journal->transactionGroup, true, true)); } - /** - * @param MassEditJournalRequest $request - * @param int $journalId - * @param string $key - * - * @return Carbon|null - */ private function getDateFromRequest(MassEditJournalRequest $request, int $journalId, string $key): ?Carbon { $value = $request->get($key); @@ -249,10 +228,12 @@ class MassController extends Controller if (!array_key_exists($journalId, $value)) { return null; } + try { $carbon = Carbon::parse($value[$journalId]); - } catch (InvalidArgumentException $e) { - $e->getMessage(); + } catch (\InvalidArgumentException $e) { + Log::warning(sprintf('Could not parse "%s" but dont mind', $value[$journalId])); + Log::warning($e->getMessage()); return null; } @@ -260,13 +241,6 @@ class MassController extends Controller return $carbon; } - /** - * @param MassEditJournalRequest $request - * @param int $journalId - * @param string $string - * - * @return string|null - */ private function getStringFromRequest(MassEditJournalRequest $request, int $journalId, string $string): ?string { $value = $request->get($string); @@ -280,13 +254,6 @@ class MassController extends Controller return (string)$value[$journalId]; } - /** - * @param MassEditJournalRequest $request - * @param int $journalId - * @param string $string - * - * @return int|null - */ private function getIntFromRequest(MassEditJournalRequest $request, int $journalId, string $string): ?int { $value = $request->get($string); diff --git a/app/Http/Controllers/Transaction/ShowController.php b/app/Http/Controllers/Transaction/ShowController.php index 870d871347..b0f4f870ac 100644 --- a/app/Http/Controllers/Transaction/ShowController.php +++ b/app/Http/Controllers/Transaction/ShowController.php @@ -32,7 +32,6 @@ use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface use FireflyIII\Transformers\TransactionGroupTransformer; use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\View\View; use Symfony\Component\HttpFoundation\ParameterBag; @@ -66,8 +65,6 @@ class ShowController extends Controller } /** - * @param TransactionGroup $transactionGroup - * * @return JsonResponse */ public function debugShow(TransactionGroup $transactionGroup) @@ -76,36 +73,34 @@ class ShowController extends Controller } /** - * @param Request $request - * @param TransactionGroup $transactionGroup - * * @return Factory|View + * * @throws FireflyException */ - public function show(Request $request, TransactionGroup $transactionGroup) + public function show(TransactionGroup $transactionGroup) { - /** @var TransactionJournal $first */ - $first = $transactionGroup->transactionJournals()->first(['transaction_journals.*']); - $splits = $transactionGroup->transactionJournals()->count(); + /** @var null|TransactionJournal $first */ + $first = $transactionGroup->transactionJournals()->first(['transaction_journals.*']); + $splits = $transactionGroup->transactionJournals()->count(); if (null === $first) { throw new FireflyException('This transaction is broken :(.'); } - $type = (string)trans(sprintf('firefly.%s', $first->transactionType->type)); - $title = 1 === $splits ? $first->description : $transactionGroup->title; - $subTitle = sprintf('%s: "%s"', $type, $title); + $type = (string)trans(sprintf('firefly.%s', $first->transactionType->type)); + $title = 1 === $splits ? $first->description : $transactionGroup->title; + $subTitle = sprintf('%s: "%s"', $type, $title); /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); + $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters(new ParameterBag()); - $groupArray = $transformer->transformObject($transactionGroup); + $groupArray = $transformer->transformObject($transactionGroup); // do some calculations: - $amounts = $this->getAmounts($groupArray); - $accounts = $this->getAccounts($groupArray); + $amounts = $this->getAmounts($groupArray); + $accounts = $this->getAccounts($groupArray); - foreach ($groupArray['transactions'] as $index => $transaction) { + foreach (array_keys($groupArray['transactions']) as $index) { $groupArray['transactions'][$index]['tags'] = $this->repository->getTagObjects( $groupArray['transactions'][$index]['transaction_journal_id'] ); @@ -118,10 +113,9 @@ class ShowController extends Controller $logEntries[$journal->id] = $this->aleRepository->getForObject($journal); } - $events = $this->repository->getPiggyEvents($transactionGroup); - $attachments = $this->repository->getAttachments($transactionGroup); - $links = $this->repository->getLinks($transactionGroup); - + $events = $this->repository->getPiggyEvents($transactionGroup); + $attachments = $this->repository->getAttachments($transactionGroup); + $links = $this->repository->getLinks($transactionGroup); return view( 'transactions.show', @@ -143,16 +137,11 @@ class ShowController extends Controller ); } - /** - * @param array $group - * - * @return array - */ private function getAmounts(array $group): array { $amounts = []; foreach ($group['transactions'] as $transaction) { - $symbol = $transaction['currency_symbol']; + $symbol = $transaction['currency_symbol']; if (!array_key_exists($symbol, $amounts)) { $amounts[$symbol] = [ 'amount' => '0', @@ -162,12 +151,12 @@ class ShowController extends Controller } $amounts[$symbol]['amount'] = bcadd($amounts[$symbol]['amount'], $transaction['amount']); if (null !== $transaction['foreign_amount'] && '' !== $transaction['foreign_amount'] - && bccomp( + && 0 !== bccomp( '0', $transaction['foreign_amount'] - ) !== 0) { + )) { // same for foreign currency: - $foreignSymbol = $transaction['foreign_currency_symbol']; + $foreignSymbol = $transaction['foreign_currency_symbol']; if (!array_key_exists($foreignSymbol, $amounts)) { $amounts[$foreignSymbol] = [ 'amount' => '0', @@ -185,14 +174,12 @@ class ShowController extends Controller return $amounts; } - /** - * @param array $group - * - * @return array - */ private function getAccounts(array $group): array { - $accounts = []; + $accounts = [ + 'source' => [], + 'destination' => [], + ]; foreach ($group['transactions'] as $transaction) { $accounts['source'][] = [ diff --git a/app/Http/Controllers/TransactionCurrency/CreateController.php b/app/Http/Controllers/TransactionCurrency/CreateController.php new file mode 100644 index 0000000000..75bb2f9cf3 --- /dev/null +++ b/app/Http/Controllers/TransactionCurrency/CreateController.php @@ -0,0 +1,137 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Http\Controllers\TransactionCurrency; + +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Http\Controllers\Controller; +use FireflyIII\Http\Requests\CurrencyFormRequest; +use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; +use FireflyIII\User; +use Illuminate\Contracts\View\Factory; +use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; +use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; +use Illuminate\View\View; + +/** + * Class CreateController + */ +class CreateController extends Controller +{ + protected CurrencyRepositoryInterface $repository; + protected UserRepositoryInterface $userRepository; + + /** + * CurrencyController constructor. + */ + public function __construct() + { + parent::__construct(); + + $this->middleware( + function ($request, $next) { + app('view')->share('title', (string)trans('firefly.currencies')); + app('view')->share('mainTitleIcon', 'fa-usd'); + $this->repository = app(CurrencyRepositoryInterface::class); + $this->userRepository = app(UserRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * Create a currency. + * + * @return Factory|Redirector|RedirectResponse|View + */ + public function create(Request $request) + { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); + + return redirect(route('currencies.index')); + } + + $subTitleIcon = 'fa-plus'; + $subTitle = (string)trans('firefly.create_currency'); + + // put previous url in session if not redirect from store (not "create another"). + if (true !== session('currencies.create.fromStore')) { + $this->rememberPreviousUrl('currencies.create.url'); + } + $request->session()->forget('currencies.create.fromStore'); + + Log::channel('audit')->info('Create new currency.'); + + return view('currencies.create', compact('subTitleIcon', 'subTitle')); + } + + /** + * Store new currency. + * + * @return $this|Redirector|RedirectResponse + */ + public function store(CurrencyFormRequest $request) + { + /** @var User $user */ + $user = auth()->user(); + $data = $request->getCurrencyData(); + if (!$this->userRepository->hasRole($user, 'owner')) { + app('log')->error('User '.auth()->user()->id.' is not admin, but tried to store a currency.'); + Log::channel('audit')->warning('Tried to create (POST) currency without admin rights.', $data); + + return redirect($this->getPreviousUrl('currencies.create.url'))->withInput(); + } + + $data['enabled'] = true; + + try { + $currency = $this->repository->store($data); + } catch (FireflyException $e) { + app('log')->error($e->getMessage()); + Log::channel('audit')->warning('Could not store (POST) currency without admin rights.', $data); + $request->session()->flash('error', (string)trans('firefly.could_not_store_currency')); + $currency = null; + } + $redirect = redirect($this->getPreviousUrl('currencies.create.url')); + + if (null !== $currency) { + $request->session()->flash('success', (string)trans('firefly.created_currency', ['name' => $currency->name])); + Log::channel('audit')->info('Created (POST) currency.', $data); + if (1 === (int)$request->get('create_another')) { + $request->session()->put('currencies.create.fromStore', true); + + $redirect = redirect(route('currencies.create'))->withInput(); + } + } + + return $redirect; + } +} diff --git a/app/Http/Controllers/TransactionCurrency/DeleteController.php b/app/Http/Controllers/TransactionCurrency/DeleteController.php new file mode 100644 index 0000000000..5ddecbff90 --- /dev/null +++ b/app/Http/Controllers/TransactionCurrency/DeleteController.php @@ -0,0 +1,136 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Http\Controllers\TransactionCurrency; + +use FireflyIII\Http\Controllers\Controller; +use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; +use FireflyIII\User; +use Illuminate\Contracts\View\Factory; +use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; +use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; +use Illuminate\View\View; + +/** + * Class DeleteController + */ +class DeleteController extends Controller +{ + protected CurrencyRepositoryInterface $repository; + protected UserRepositoryInterface $userRepository; + + /** + * CurrencyController constructor. + */ + public function __construct() + { + parent::__construct(); + + $this->middleware( + function ($request, $next) { + app('view')->share('title', (string)trans('firefly.currencies')); + app('view')->share('mainTitleIcon', 'fa-usd'); + $this->repository = app(CurrencyRepositoryInterface::class); + $this->userRepository = app(UserRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * Deletes a currency. + * + * @return Factory|Redirector|RedirectResponse|View + */ + public function delete(Request $request, TransactionCurrency $currency) + { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); + Log::channel('audit')->warning(sprintf('Tried to visit page to delete currency %s but is not site owner.', $currency->code)); + + return redirect(route('currencies.index')); + } + + if ($this->repository->currencyInUse($currency)) { + $location = $this->repository->currencyInUseAt($currency); + $message = (string)trans(sprintf('firefly.cannot_disable_currency_%s', $location), ['name' => e($currency->name)]); + $request->session()->flash('error', $message); + Log::channel('audit')->warning(sprintf('Tried to visit page to delete currency %s but currency is in use.', $currency->code)); + + return redirect(route('currencies.index')); + } + + // put previous url in session + $this->rememberPreviousUrl('currencies.delete.url'); + $subTitle = (string)trans('form.delete_currency', ['name' => $currency->name]); + Log::channel('audit')->info(sprintf('Visit page to delete currency %s.', $currency->code)); + + return view('currencies.delete', compact('currency', 'subTitle')); + } + + /** + * Destroys a currency. + * + * @return Redirector|RedirectResponse + */ + public function destroy(Request $request, TransactionCurrency $currency) + { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); + Log::channel('audit')->warning(sprintf('Tried to delete currency %s but is not site owner.', $currency->code)); + + return redirect(route('currencies.index')); + } + + if ($this->repository->currencyInUse($currency)) { + $request->session()->flash('error', (string)trans('firefly.cannot_delete_currency', ['name' => e($currency->name)])); + Log::channel('audit')->info(sprintf('Tried to delete currency %s but is in use.', $currency->code)); + + return redirect(route('currencies.index')); + } + + if ($this->repository->isFallbackCurrency($currency)) { + $request->session()->flash('error', (string)trans('firefly.cannot_delete_fallback_currency', ['name' => e($currency->name)])); + Log::channel('audit')->info(sprintf('Tried to delete currency %s but is FALLBACK.', $currency->code)); + + return redirect(route('currencies.index')); + } + + Log::channel('audit')->info(sprintf('Deleted currency %s.', $currency->code)); + $this->repository->destroy($currency); + + $request->session()->flash('success', (string)trans('firefly.deleted_currency', ['name' => $currency->name])); + + return redirect($this->getPreviousUrl('currencies.delete.url')); + } +} diff --git a/app/Http/Controllers/TransactionCurrency/EditController.php b/app/Http/Controllers/TransactionCurrency/EditController.php new file mode 100644 index 0000000000..75ceb9f539 --- /dev/null +++ b/app/Http/Controllers/TransactionCurrency/EditController.php @@ -0,0 +1,140 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Http\Controllers\TransactionCurrency; + +use FireflyIII\Http\Controllers\Controller; +use FireflyIII\Http\Requests\CurrencyFormRequest; +use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; +use FireflyIII\User; +use Illuminate\Contracts\View\Factory; +use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; +use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; +use Illuminate\View\View; + +class EditController extends Controller +{ + protected CurrencyRepositoryInterface $repository; + protected UserRepositoryInterface $userRepository; + + /** + * CurrencyController constructor. + */ + public function __construct() + { + parent::__construct(); + + $this->middleware( + function ($request, $next) { + app('view')->share('title', (string)trans('firefly.currencies')); + app('view')->share('mainTitleIcon', 'fa-usd'); + $this->repository = app(CurrencyRepositoryInterface::class); + $this->userRepository = app(UserRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * Edit a currency. + * + * @return Factory|Redirector|RedirectResponse|View + */ + public function edit(Request $request, TransactionCurrency $currency) + { + /** @var User $user */ + $user = auth()->user(); + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); + Log::channel('audit')->warning(sprintf('Tried to edit currency %s but is not owner.', $currency->code)); + + return redirect(route('currencies.index')); + } + + $subTitleIcon = 'fa-pencil'; + $subTitle = (string)trans('breadcrumbs.edit_currency', ['name' => $currency->name]); + $currency->symbol = htmlentities($currency->symbol); + + // is currently enabled (for this user?) + $userCurrencies = $this->repository->get()->pluck('id')->toArray(); + $enabled = in_array($currency->id, $userCurrencies, true); + + // code to handle active-checkboxes + $hasOldInput = null !== $request->old('_token'); + $preFilled = [ + 'enabled' => $hasOldInput ? (bool)$request->old('enabled') : $enabled, + ]; + + $request->session()->flash('preFilled', $preFilled); + Log::channel('audit')->info('Edit currency.', $currency->toArray()); + + // put previous url in session if not redirect from store (not "return_to_edit"). + if (true !== session('currencies.edit.fromUpdate')) { + $this->rememberPreviousUrl('currencies.edit.url'); + } + $request->session()->forget('currencies.edit.fromUpdate'); + + return view('currencies.edit', compact('currency', 'subTitle', 'subTitleIcon')); + } + + /** + * Updates a currency. + * + * @return Redirector|RedirectResponse + */ + public function update(CurrencyFormRequest $request, TransactionCurrency $currency) + { + /** @var User $user */ + $user = auth()->user(); + $data = $request->getCurrencyData(); + + if (false === $data['enabled'] && $this->repository->currencyInUse($currency)) { + $data['enabled'] = true; + } + + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('error', (string)trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))])); + Log::channel('audit')->warning('Tried to update (POST) currency without admin rights.', $data); + + return redirect(route('currencies.index')); + } + $currency = $this->repository->update($currency, $data); + Log::channel('audit')->info('Updated (POST) currency.', $data); + $request->session()->flash('success', (string)trans('firefly.updated_currency', ['name' => $currency->name])); + app('preferences')->mark(); + + if (1 === (int)$request->get('return_to_edit')) { + $request->session()->put('currencies.edit.fromUpdate', true); + + return redirect(route('currencies.edit', [$currency->id])); + } + + return redirect($this->getPreviousUrl('currencies.edit.url')); + } +} diff --git a/app/Http/Controllers/TransactionCurrency/IndexController.php b/app/Http/Controllers/TransactionCurrency/IndexController.php new file mode 100644 index 0000000000..3dc9fb739f --- /dev/null +++ b/app/Http/Controllers/TransactionCurrency/IndexController.php @@ -0,0 +1,96 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Http\Controllers\TransactionCurrency; + +use FireflyIII\Http\Controllers\Controller; +use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; +use FireflyIII\User; +use Illuminate\Contracts\View\Factory; +use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; +use Illuminate\View\View; + +class IndexController extends Controller +{ + protected CurrencyRepositoryInterface $repository; + protected UserRepositoryInterface $userRepository; + + /** + * CurrencyController constructor. + */ + public function __construct() + { + parent::__construct(); + + $this->middleware( + function ($request, $next) { + app('view')->share('title', (string)trans('firefly.currencies')); + app('view')->share('mainTitleIcon', 'fa-usd'); + $this->repository = app(CurrencyRepositoryInterface::class); + $this->userRepository = app(UserRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * Show overview of currencies. + * + * @return Factory|View + */ + public function index(Request $request) + { + /** @var User $user */ + $user = auth()->user(); + $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $collection = $this->repository->getAll(); + $total = $collection->count(); + $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); + + // order so default is on top: + $collection = $collection->sortBy( + static function (TransactionCurrency $currency) { + $default = true === $currency->userGroupDefault ? 0 : 1; + $enabled = true === $currency->userGroupEnabled ? 0 : 1; + + return sprintf('%s-%s-%s', $default, $enabled, $currency->code); + } + ); + + $currencies = new LengthAwarePaginator($collection, $total, $pageSize, $page); + $currencies->setPath(route('currencies.index')); + $isOwner = true; + if (!$this->userRepository->hasRole($user, 'owner')) { + $request->session()->flash('info', (string)trans('firefly.ask_site_owner', ['owner' => config('firefly.site_owner')])); + $isOwner = false; + } + + return view('currencies.index', compact('currencies', 'isOwner')); + } +} diff --git a/app/Http/Controllers/Webhooks/CreateController.php b/app/Http/Controllers/Webhooks/CreateController.php index 4bf123ef0b..b1d06ce1a1 100644 --- a/app/Http/Controllers/Webhooks/CreateController.php +++ b/app/Http/Controllers/Webhooks/CreateController.php @@ -26,23 +26,22 @@ namespace FireflyIII\Http\Controllers\Webhooks; use FireflyIII\Http\Controllers\Controller; use Illuminate\Contracts\View\Factory; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class CreateController */ class CreateController extends Controller { - /** - * - */ public function __construct() { parent::__construct(); // translations: $this->middleware( - function ($request, $next) { + static function ($request, $next) { app('view')->share('mainTitleIcon', 'fa-bolt'); app('view')->share('subTitleIcon', 'fa-plus'); app('view')->share('title', (string)trans('firefly.webhooks')); @@ -60,7 +59,14 @@ class CreateController extends Controller */ public function index() { + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning('User visits webhook create page, but webhooks are DISABLED.'); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + Log::channel('audit')->info('User visits webhook create page.'); $previousUrl = $this->rememberPreviousUrl('webhooks.create.url'); + return view('webhooks.create', compact('previousUrl')); } } diff --git a/app/Http/Controllers/Webhooks/DeleteController.php b/app/Http/Controllers/Webhooks/DeleteController.php index 7d0cd15ae7..b1ecd4d78a 100644 --- a/app/Http/Controllers/Webhooks/DeleteController.php +++ b/app/Http/Controllers/Webhooks/DeleteController.php @@ -28,6 +28,8 @@ use FireflyIII\Models\Webhook; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; +use Illuminate\Support\Facades\Log; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class DeleteController @@ -36,8 +38,6 @@ class DeleteController extends Controller { /** * DeleteController constructor. - * - */ public function __construct() { @@ -45,7 +45,7 @@ class DeleteController extends Controller // translations: $this->middleware( - function ($request, $next) { + static function ($request, $next) { app('view')->share('mainTitleIcon', 'fa-bolt'); app('view')->share('subTitleIcon', 'fa-trash'); app('view')->share('title', (string)trans('firefly.webhooks')); @@ -59,12 +59,16 @@ class DeleteController extends Controller /** * Delete account screen. * - * @param Webhook $webhook - * - * @return Factory|Application|View + * @return Application|Factory|View */ public function index(Webhook $webhook) { + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning('User visits webhook delete page, but webhooks are DISABLED.'); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + Log::channel('audit')->info('User visits webhook delete page.'); $subTitle = (string)trans('firefly.delete_webhook', ['title' => $webhook->title]); $this->rememberPreviousUrl('webhooks.delete.url'); diff --git a/app/Http/Controllers/Webhooks/EditController.php b/app/Http/Controllers/Webhooks/EditController.php index 01a028334c..65f178a867 100644 --- a/app/Http/Controllers/Webhooks/EditController.php +++ b/app/Http/Controllers/Webhooks/EditController.php @@ -28,6 +28,8 @@ use FireflyIII\Models\Webhook; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; +use Illuminate\Support\Facades\Log; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class EditController @@ -36,8 +38,6 @@ class EditController extends Controller { /** * DeleteController constructor. - * - */ public function __construct() { @@ -45,7 +45,7 @@ class EditController extends Controller // translations: $this->middleware( - function ($request, $next) { + static function ($request, $next) { app('view')->share('mainTitleIcon', 'fa-bolt'); app('view')->share('subTitleIcon', 'fa-pencil'); app('view')->share('title', (string)trans('firefly.webhooks')); @@ -58,14 +58,18 @@ class EditController extends Controller /** * Delete account screen. * - * @param Webhook $webhook - * - * @return Factory|Application|View + * @return Application|Factory|View */ public function index(Webhook $webhook) { + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning('User visits webhook edit page, but webhooks are DISABLED.'); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + Log::channel('audit')->info('User visits webhook edit page.'); $subTitle = (string)trans('firefly.edit_webhook', ['title' => $webhook->title]); - $this->rememberPreviousUrl('webhooks.delete.url'); + $this->rememberPreviousUrl('webhooks.edit.url'); return view('webhooks.edit', compact('webhook', 'subTitle')); } diff --git a/app/Http/Controllers/Webhooks/IndexController.php b/app/Http/Controllers/Webhooks/IndexController.php index fb5067aa21..c6ee272353 100644 --- a/app/Http/Controllers/Webhooks/IndexController.php +++ b/app/Http/Controllers/Webhooks/IndexController.php @@ -26,24 +26,22 @@ namespace FireflyIII\Http\Controllers\Webhooks; use FireflyIII\Http\Controllers\Controller; use Illuminate\Contracts\View\Factory; -use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class IndexController */ class IndexController extends Controller { - /** - * - */ public function __construct() { parent::__construct(); // translations: $this->middleware( - function ($request, $next) { + static function ($request, $next) { app('view')->share('mainTitleIcon', 'fa-bolt'); app('view')->share('title', (string)trans('firefly.webhooks')); @@ -53,14 +51,17 @@ class IndexController extends Controller } /** - * Show debug info. - * - * @param Request $request - * * @return Factory|View */ - public function index(Request $request) + public function index() { + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning('User visits webhook index page, but webhooks are DISABLED.'); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + Log::channel('audit')->info('User visits webhook index page.'); + return view('webhooks.index'); } } diff --git a/app/Http/Controllers/Webhooks/ShowController.php b/app/Http/Controllers/Webhooks/ShowController.php index 233523f96f..b0ba366162 100644 --- a/app/Http/Controllers/Webhooks/ShowController.php +++ b/app/Http/Controllers/Webhooks/ShowController.php @@ -28,6 +28,8 @@ use FireflyIII\Models\Webhook; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; +use Illuminate\Support\Facades\Log; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class ShowController @@ -36,8 +38,6 @@ class ShowController extends Controller { /** * DeleteController constructor. - * - */ public function __construct() { @@ -45,7 +45,7 @@ class ShowController extends Controller // translations: $this->middleware( - function ($request, $next) { + static function ($request, $next) { app('view')->share('mainTitleIcon', 'fa-bolt'); app('view')->share('subTitleIcon', 'fa-bolt'); app('view')->share('title', (string)trans('firefly.webhooks')); @@ -58,12 +58,16 @@ class ShowController extends Controller /** * Delete account screen. * - * @param Webhook $webhook - * - * @return Factory|Application|View + * @return Application|Factory|View */ public function index(Webhook $webhook) { + if (false === config('firefly.allow_webhooks')) { + Log::channel('audit')->warning(sprintf('User visits webhook #%d page, but webhooks are DISABLED.', $webhook->id)); + + throw new NotFoundHttpException('Webhooks are not enabled.'); + } + Log::channel('audit')->info(sprintf('User visits webhook #%d page.', $webhook->id)); $subTitle = (string)trans('firefly.show_webhook', ['title' => $webhook->title]); return view('webhooks.show', compact('webhook', 'subTitle')); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 83e302cd3f..139547582c 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -54,16 +54,9 @@ use PragmaRX\Google2FALaravel\Middleware as MFAMiddleware; /** * Class Kernel - * - */ class Kernel extends HttpKernel { - /** - * The application's global HTTP middleware stack. - * - * @var array - */ protected $middleware = [ SecureHeaders::class, @@ -74,13 +67,6 @@ class Kernel extends HttpKernel TrustProxies::class, InstallationId::class, ]; - /** - * The application's route middleware. - * - * These middleware may be assigned to groups or used individually. - * - * @var array - */ protected $middlewareAliases = [ 'auth' => Authenticate::class, @@ -90,11 +76,6 @@ class Kernel extends HttpKernel 'guest' => RedirectIfAuthenticated::class, 'throttle' => ThrottleRequests::class, ]; - /** - * The application's route middleware groups. - * - * @var array - */ protected $middlewareGroups = [ // does not check login @@ -141,7 +122,7 @@ class Kernel extends HttpKernel VerifyCsrfToken::class, Binder::class, Authenticate::class, - //RedirectIfTwoFactorAuthenticated::class, + // RedirectIfTwoFactorAuthenticated::class, ], // MUST be logged in @@ -186,7 +167,7 @@ class Kernel extends HttpKernel ShareErrorsFromSession::class, VerifyCsrfToken::class, Authenticate::class, - //AuthenticateTwoFactor::class, + // AuthenticateTwoFactor::class, IsAdmin::class, Range::class, Binder::class, @@ -206,13 +187,6 @@ class Kernel extends HttpKernel 'bindings', ], ]; - /** - * The priority-sorted list of middleware. - * - * This forces non-global middleware to always be in the given order. - * - * @var array - */ protected $middlewarePriority = [ StartFireflySession::class, diff --git a/app/Http/Middleware/AcceptHeaders.php b/app/Http/Middleware/AcceptHeaders.php index cd3c7f64c2..8c525a4a52 100644 --- a/app/Http/Middleware/AcceptHeaders.php +++ b/app/Http/Middleware/AcceptHeaders.php @@ -29,18 +29,13 @@ use Illuminate\Http\Request; use Illuminate\Http\Response; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; -/** - * - */ class AcceptHeaders { /** * Handle the incoming requests. * - * @param Request $request - * @param callable $next - * * @return Response + * * @throws BadHttpHeaderException */ public function handle(Request $request, callable $next): mixed @@ -50,7 +45,6 @@ class AcceptHeaders $contentTypes = ['application/x-www-form-urlencoded', 'application/json', 'application/vnd.api+json', 'application/octet-stream']; $submitted = (string)$request->header('Content-Type'); - // if bad Accept header, send error. if (!$request->accepts($accepts)) { throw new BadHttpHeaderException(sprintf('Accept header "%s" is not something this server can provide.', $request->header('Accept'))); @@ -59,34 +53,31 @@ class AcceptHeaders if (('POST' === $method || 'PUT' === $method) && !$request->hasHeader('Content-Type')) { $error = new BadHttpHeaderException('Content-Type header cannot be empty.'); $error->statusCode = 415; + throw $error; } if (('POST' === $method || 'PUT' === $method) && !$this->acceptsHeader($submitted, $contentTypes)) { $error = new BadHttpHeaderException(sprintf('Content-Type cannot be "%s"', $submitted)); $error->statusCode = 415; + throw $error; } // throw bad request if trace id is not a UUID - $uuid = $request->header('X-Trace-Id'); - if (is_string($uuid) && '' !== trim($uuid) && (preg_match('/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i', trim($uuid)) !== 1)) { + $uuid = $request->header('X-Trace-Id'); + if (is_string($uuid) && '' !== trim($uuid) && (1 !== preg_match('/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i', trim($uuid)))) { throw new BadRequestHttpException('Bad X-Trace-Id header.'); } return $next($request); } - /** - * @param string $content - * @param array $accepted - * - * @return bool - */ private function acceptsHeader(string $content, array $accepted): bool { if (str_contains($content, ';')) { $content = trim(explode(';', $content)[0]); } + return in_array($content, $accepted, true); } } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 476ceabe80..400482d09d 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -24,13 +24,11 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; -use Closure; use FireflyIII\Exceptions\FireflyException; use FireflyIII\User; use Illuminate\Auth\AuthenticationException; use Illuminate\Contracts\Auth\Factory as Auth; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; /** * Class Authenticate @@ -39,17 +37,11 @@ class Authenticate { /** * The authentication factory instance. - * - * @var Auth */ protected Auth $auth; /** * Create a new middleware instance. - * - * @param Auth $auth - * - * @return void */ public function __construct(Auth $auth) { @@ -60,7 +52,6 @@ class Authenticate * Handle an incoming request. * * @param Request $request - * @param Closure $next * @param string[] ...$guards * * @return mixed @@ -68,7 +59,7 @@ class Authenticate * @throws FireflyException * @throws AuthenticationException */ - public function handle($request, Closure $next, ...$guards) + public function handle($request, \Closure $next, ...$guards) { $this->authenticate($request, $guards); @@ -79,17 +70,19 @@ class Authenticate * Determine if the user is logged in to any of the given guards. * * @param mixed $request - * @param array $guards * * @return mixed + * * @throws FireflyException * @throws AuthenticationException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ protected function authenticate($request, array $guards) { if (0 === count($guards)) { // go for default guard: - /** @noinspection PhpUndefinedMethodInspection */ + // @noinspection PhpUndefinedMethodInspection if ($this->auth->check()) { // do an extra check on user object. /** @noinspection PhpUndefinedMethodInspection */ @@ -98,7 +91,7 @@ class Authenticate $this->validateBlockedUser($user, $guards); } - /** @noinspection PhpUndefinedMethodInspection */ + // @noinspection PhpUndefinedMethodInspection return $this->auth->authenticate(); } @@ -110,6 +103,7 @@ class Authenticate if ($result) { $user = $this->auth->guard($guard)->user(); $this->validateBlockedUser($user, $guards); + // According to PHPstan the method returns void, but we'll see. return $this->auth->shouldUse($guard); // @phpstan-ignore-line } @@ -119,27 +113,23 @@ class Authenticate } /** - * @param User|null $user - * @param array $guards - * - * @return void * @throws AuthenticationException */ private function validateBlockedUser(?User $user, array $guards): void { if (null === $user) { - Log::warning('User is null, throw exception?'); + app('log')->warning('User is null, throw exception?'); } if (null !== $user) { - // Log::debug(get_class($user)); + // app('log')->debug(get_class($user)); if (1 === (int)$user->blocked) { $message = (string)trans('firefly.block_account_logout'); if ('email_changed' === $user->blocked_code) { $message = (string)trans('firefly.email_changed_logout'); } - Log::warning('User is blocked, cannot use authentication method.'); + app('log')->warning('User is blocked, cannot use authentication method.'); app('session')->flash('logoutMessage', $message); - /** @noinspection PhpUndefinedMethodInspection */ + // @noinspection PhpUndefinedMethodInspection $this->auth->logout(); // @phpstan-ignore-line (thinks function is undefined) throw new AuthenticationException('Blocked account.', $guards); diff --git a/app/Http/Middleware/Binder.php b/app/Http/Middleware/Binder.php index 8c8c6e4bd5..9f4413a06d 100644 --- a/app/Http/Middleware/Binder.php +++ b/app/Http/Middleware/Binder.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; -use Closure; use FireflyIII\Support\Domain; use Illuminate\Contracts\Auth\Factory as Auth; use Illuminate\Http\Request; @@ -40,6 +39,7 @@ class Binder * @var Auth */ protected $auth; + /** * The binders. * @@ -49,8 +49,6 @@ class Binder /** * Binder constructor. - * - * @param Auth $auth */ public function __construct(Auth $auth) { @@ -62,12 +60,10 @@ class Binder * Handle an incoming request. * * @param Request $request - * @param Closure $next * * @return mixed - * */ - public function handle($request, Closure $next) + public function handle($request, \Closure $next) { foreach ($request->route()->parameters() as $key => $value) { if (array_key_exists($key, $this->binders)) { @@ -82,10 +78,6 @@ class Binder /** * Do the binding. * - * @param string $key - * @param string $value - * @param Route $route - * * @return mixed */ private function performBinding(string $key, string $value, Route $route) diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php index def51a126c..4f7fb66aba 100644 --- a/app/Http/Middleware/EncryptCookies.php +++ b/app/Http/Middleware/EncryptCookies.php @@ -27,9 +27,5 @@ use Illuminate\Cookie\Middleware\EncryptCookies as Middleware; /** * Class EncryptCookies - * - */ -class EncryptCookies extends Middleware -{ -} +class EncryptCookies extends Middleware {} diff --git a/app/Http/Middleware/InstallationId.php b/app/Http/Middleware/InstallationId.php index 7a741e9ea6..297fe8ca6b 100644 --- a/app/Http/Middleware/InstallationId.php +++ b/app/Http/Middleware/InstallationId.php @@ -23,12 +23,10 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; -use Closure; use FireflyIII\Support\System\GeneratesInstallationId; use Illuminate\Http\Request; /** - * * Class InstallationId */ class InstallationId @@ -39,13 +37,10 @@ class InstallationId * Handle an incoming request. * * @param Request $request - * @param Closure $next * * @return mixed - * - * */ - public function handle($request, Closure $next) + public function handle($request, \Closure $next) { $this->generateInstallationId(); diff --git a/app/Http/Middleware/Installer.php b/app/Http/Middleware/Installer.php index feb97cad43..8fc6ee1c77 100644 --- a/app/Http/Middleware/Installer.php +++ b/app/Http/Middleware/Installer.php @@ -24,18 +24,14 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; -use Closure; use DB; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Support\System\OAuthKeys; use Illuminate\Database\QueryException; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; /** * Class Installer - * - * */ class Installer { @@ -43,16 +39,14 @@ class Installer * Handle an incoming request. * * @param Request $request - * @param Closure $next * * @return mixed * * @throws FireflyException - * */ - public function handle($request, Closure $next) + public function handle($request, \Closure $next) { - //Log::debug(sprintf('Installer middleware for URL %s', $request->url())); + // app('log')->debug(sprintf('Installer middleware for URL %s', $request->url())); // ignore installer in test environment. if ('testing' === config('app.env')) { return $next($request); @@ -61,7 +55,7 @@ class Installer $url = $request->url(); $strpos = stripos($url, '/install'); if (false !== $strpos) { - //Log::debug(sprintf('URL is %s, will NOT run installer middleware', $url)); + // app('log')->debug(sprintf('URL is %s, will NOT run installer middleware', $url)); return $next($request); } @@ -73,6 +67,7 @@ class Installer return response()->redirectTo(route('installer.index')); } OAuthKeys::verifyKeysRoutine(); + // update scheme version // update firefly version return $next($request); @@ -81,18 +76,17 @@ class Installer /** * Check if the tables are created and accounted for. * - * @return bool * @throws FireflyException */ private function hasNoTables(): bool { - //Log::debug('Now in routine hasNoTables()'); + // app('log')->debug('Now in routine hasNoTables()'); try { - DB::table('users')->count(); + \DB::table('users')->count(); } catch (QueryException $e) { $message = $e->getMessage(); - Log::error(sprintf('Error message trying to access users-table: %s', $message)); + app('log')->error(sprintf('Error message trying to access users-table: %s', $message)); if ($this->isAccessDenied($message)) { throw new FireflyException( 'It seems your database configuration is not correct. Please verify the username and password in your .env file.', @@ -106,20 +100,17 @@ class Installer return true; } + throw new FireflyException(sprintf('Could not access the database: %s', $message), 0, $e); } - //Log::debug('Everything seems OK with the tables.'); + // app('log')->debug('Everything seems OK with the tables.'); return false; } /** * Is access denied error. - * - * @param string $message - * - * @return bool */ protected function isAccessDenied(string $message): bool { @@ -128,10 +119,6 @@ class Installer /** * Is no tables exist error. - * - * @param string $message - * - * @return bool */ protected function noTablesExist(string $message): bool { @@ -140,8 +127,6 @@ class Installer /** * Check if the "db_version" variable is correct. - * - * @return bool */ private function oldDBVersion(): bool { @@ -160,15 +145,13 @@ class Installer return true; } - //Log::info(sprintf('Configured DB version (%d) equals expected DB version (%d)', $dbVersion, $configVersion)); + // app('log')->info(sprintf('Configured DB version (%d) equals expected DB version (%d)', $dbVersion, $configVersion)); return false; } /** * Check if the "firefly_version" variable is correct. - * - * @return bool */ private function oldVersion(): bool { @@ -187,7 +170,7 @@ class Installer return true; } - //Log::info(sprintf('Installed Firefly III version (%s) equals expected Firefly III version (%s)', $dbVersion, $configVersion)); + // app('log')->info(sprintf('Installed Firefly III version (%s) equals expected Firefly III version (%s)', $dbVersion, $configVersion)); return false; } diff --git a/app/Http/Middleware/InterestingMessage.php b/app/Http/Middleware/InterestingMessage.php index b609de52ab..1d8a284aa0 100644 --- a/app/Http/Middleware/InterestingMessage.php +++ b/app/Http/Middleware/InterestingMessage.php @@ -23,14 +23,13 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; -use Closure; use FireflyIII\Models\Account; use FireflyIII\Models\Bill; +use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\Webhook; use Illuminate\Http\Request; -use Preferences; /** * Class InterestingMessage @@ -40,52 +39,44 @@ class InterestingMessage /** * Flashes the user an interesting message if the URL parameters warrant it. * - * @param Request $request - * @param Closure $next - * * @return mixed - * */ - public function handle(Request $request, Closure $next) + public function handle(Request $request, \Closure $next) { if ($this->testing()) { return $next($request); } if ($this->groupMessage($request)) { - Preferences::mark(); + app('preferences')->mark(); $this->handleGroupMessage($request); } if ($this->accountMessage($request)) { - Preferences::mark(); + app('preferences')->mark(); $this->handleAccountMessage($request); } if ($this->billMessage($request)) { - Preferences::mark(); + app('preferences')->mark(); $this->handleBillMessage($request); } if ($this->webhookMessage($request)) { - Preferences::mark(); + app('preferences')->mark(); $this->handleWebhookMessage($request); } + if ($this->currencyMessage($request)) { + app('preferences')->mark(); + $this->handleCurrencyMessage($request); + } return $next($request); } - /** - * @return bool - */ private function testing(): bool { // ignore middleware in test environment. return 'testing' === config('app.env') || !auth()->check(); } - /** - * @param Request $request - * - * @return bool - */ private function groupMessage(Request $request): bool { // get parameters from request. @@ -95,9 +86,6 @@ class InterestingMessage return null !== $transactionGroupId && null !== $message; } - /** - * @param Request $request - */ private function handleGroupMessage(Request $request): void { // get parameters from request. @@ -105,21 +93,21 @@ class InterestingMessage $message = $request->get('message'); // send message about newly created transaction group. - /** @var TransactionGroup $group */ - $group = auth()->user()->transactionGroups()->with(['transactionJournals', 'transactionJournals.transactionType'])->find((int)$transactionGroupId); + /** @var null|TransactionGroup $group */ + $group = auth()->user()->transactionGroups()->with(['transactionJournals', 'transactionJournals.transactionType'])->find((int)$transactionGroupId); if (null === $group) { return; } - $count = $group->transactionJournals->count(); + $count = $group->transactionJournals->count(); - /** @var TransactionJournal $journal */ - $journal = $group->transactionJournals->first(); + /** @var null|TransactionJournal $journal */ + $journal = $group->transactionJournals->first(); if (null === $journal) { return; } - $title = $count > 1 ? $group->title : $journal->description; + $title = $count > 1 ? $group->title : $journal->description; if ('created' === $message) { session()->flash('success_url', route('transactions.show', [$transactionGroupId])); session()->flash('success', (string)trans('firefly.stored_journal', ['description' => $title])); @@ -136,11 +124,6 @@ class InterestingMessage } } - /** - * @param Request $request - * - * @return bool - */ private function accountMessage(Request $request): bool { // get parameters from request. @@ -150,17 +133,14 @@ class InterestingMessage return null !== $accountId && null !== $message; } - /** - * @param Request $request - */ private function handleAccountMessage(Request $request): void { // get parameters from request. $accountId = $request->get('account_id'); $message = $request->get('message'); - /** @var Account $account */ - $account = auth()->user()->accounts()->withTrashed()->find($accountId); + /** @var null|Account $account */ + $account = auth()->user()->accounts()->withTrashed()->find($accountId); if (null === $account) { return; @@ -176,11 +156,6 @@ class InterestingMessage } } - /** - * @param Request $request - * - * @return bool - */ private function billMessage(Request $request): bool { // get parameters from request. @@ -190,17 +165,14 @@ class InterestingMessage return null !== $billId && null !== $message; } - /** - * @param Request $request - */ private function handleBillMessage(Request $request): void { // get parameters from request. $billId = $request->get('bill_id'); $message = $request->get('message'); - /** @var Bill $bill */ - $bill = auth()->user()->bills()->withTrashed()->find($billId); + /** @var null|Bill $bill */ + $bill = auth()->user()->bills()->withTrashed()->find($billId); if (null === $bill) { return; @@ -213,31 +185,23 @@ class InterestingMessage } } - /** - * @param Request $request - * - * @return bool - */ private function webhookMessage(Request $request): bool { // get parameters from request. - $billId = $request->get('webhook_id'); - $message = $request->get('message'); + $webhookId = $request->get('webhook_id'); + $message = $request->get('message'); - return null !== $billId && null !== $message; + return null !== $webhookId && null !== $message; } - /** - * @param Request $request - */ private function handleWebhookMessage(Request $request): void { // get parameters from request. $webhookId = $request->get('webhook_id'); $message = $request->get('message'); - /** @var Webhook $webhook */ - $webhook = auth()->user()->webhooks()->withTrashed()->find($webhookId); + /** @var null|Webhook $webhook */ + $webhook = auth()->user()->webhooks()->withTrashed()->find($webhookId); if (null === $webhook) { return; @@ -252,4 +216,46 @@ class InterestingMessage session()->flash('success', (string)trans('firefly.stored_new_webhook', ['title' => $webhook->title])); } } + + private function currencyMessage(Request $request): bool + { + // get parameters from request. + $code = $request->get('code'); + $message = $request->get('message'); + + return null !== $code && null !== $message; + } + + private function handleCurrencyMessage(Request $request): void + { + // params: + // get parameters from request. + $code = $request->get('code'); + $message = $request->get('message'); + + /** @var null|TransactionCurrency $currency */ + $currency = TransactionCurrency::whereCode($code)->first(); + + if (null === $currency) { + return; + } + if ('enabled' === $message) { + session()->flash('success', (string)trans('firefly.currency_is_now_enabled', ['name' => $currency->name])); + } + if ('enable_failed' === $message) { + session()->flash('error', (string)trans('firefly.could_not_enable_currency', ['name' => $currency->name])); + } + if ('disabled' === $message) { + session()->flash('success', (string)trans('firefly.currency_is_now_disabled', ['name' => $currency->name])); + } + if ('disable_failed' === $message) { + session()->flash('error', (string)trans('firefly.could_not_disable_currency', ['name' => $currency->name])); + } + if ('default' === $message) { + session()->flash('success', (string)trans('firefly.new_default_currency', ['name' => $currency->name])); + } + if ('default_failed' === $message) { + session()->flash('error', (string)trans('firefly.default_currency_failed', ['name' => $currency->name])); + } + } } diff --git a/app/Http/Middleware/IsAdmin.php b/app/Http/Middleware/IsAdmin.php index 0bde6c57d4..c992713911 100644 --- a/app/Http/Middleware/IsAdmin.php +++ b/app/Http/Middleware/IsAdmin.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; -use Closure; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Http\Request; @@ -37,13 +36,11 @@ class IsAdmin /** * Handle an incoming request. Must be admin. * - * @param Request $request - * @param Closure $next - * @param string|null $guard + * @param null|string $guard * * @return mixed */ - public function handle(Request $request, Closure $next, $guard = null) + public function handle(Request $request, \Closure $next, $guard = null) { if (Auth::guard($guard)->guest()) { if ($request->ajax()) { @@ -52,8 +49,10 @@ class IsAdmin return response()->redirectTo(route('login')); } + /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); + /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); if (!$repository->hasRole($user, 'owner')) { diff --git a/app/Http/Middleware/IsDemoUser.php b/app/Http/Middleware/IsDemoUser.php index e174c8d95e..0cc04ddc18 100644 --- a/app/Http/Middleware/IsDemoUser.php +++ b/app/Http/Middleware/IsDemoUser.php @@ -23,11 +23,9 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; -use Closure; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; /** * Class IsDemoUser. @@ -37,15 +35,12 @@ class IsDemoUser /** * Handle an incoming request. * - * @param Request $request - * @param Closure $next - * * @return mixed */ - public function handle(Request $request, Closure $next) + public function handle(Request $request, \Closure $next) { - /** @var User $user */ - $user = $request->user(); + /** @var null|User $user */ + $user = $request->user(); if (null === $user) { return $next($request); } @@ -53,7 +48,7 @@ class IsDemoUser /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); if ($repository->hasRole($user, 'demo')) { - Log::info('User is a demo user.'); + app('log')->info('User is a demo user.'); $request->session()->flash('info', (string)trans('firefly.not_available_demo_user')); $current = $request->url(); $previous = $request->session()->previousUrl(); diff --git a/app/Http/Middleware/Range.php b/app/Http/Middleware/Range.php index 997dcd218a..2a46678f6a 100644 --- a/app/Http/Middleware/Range.php +++ b/app/Http/Middleware/Range.php @@ -23,13 +23,10 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; -use App; use Carbon\Carbon; -use Closure; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Support\Http\Controllers\RequestInformation; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; /** * Class SessionFilter. @@ -41,14 +38,11 @@ class Range /** * Handle an incoming request. * - * @param Request $request - * @param Closure $next - * * @return mixed */ - public function handle(Request $request, Closure $next) + public function handle(Request $request, \Closure $next) { - if ($request->user()) { + if (null !== $request->user()) { // set start, end and finish: $this->setRange(); @@ -70,9 +64,13 @@ class Range // ignore preference. set the range to be the current month: if (!app('session')->has('start') && !app('session')->has('end')) { $viewRange = app('preferences')->get('viewRange', '1M')->data; + if (is_array($viewRange)) { + $viewRange = '1M'; + } + $today = today(config('app.timezone')); - $start = app('navigation')->updateStartDate($viewRange, $today); - $end = app('navigation')->updateEndDate($viewRange, $start); + $start = app('navigation')->updateStartDate((string)$viewRange, $today); + $end = app('navigation')->updateEndDate((string)$viewRange, $start); app('session')->put('start', $start); app('session')->put('end', $end); @@ -96,19 +94,19 @@ class Range private function configureView(): void { // get locale preference: - $language = app('steam')->getLanguage(); - $locale = app('steam')->getLocale(); - App::setLocale($language); + $language = app('steam')->getLanguage(); + $locale = app('steam')->getLocale(); + \App::setLocale($language); Carbon::setLocale(substr($locale, 0, 2)); - $localeArray = app('steam')->getLocaleArray($locale); + $localeArray = app('steam')->getLocaleArray($locale); setlocale(LC_TIME, $localeArray); - $moneyResult = setlocale(LC_MONETARY, $localeArray); + $moneyResult = setlocale(LC_MONETARY, $localeArray); // send error to view, if could not set money format if (false === $moneyResult) { - Log::error('Could not set locale. The following array doesnt work: ', $localeArray); + app('log')->error('Could not set locale. The following array doesnt work: ', $localeArray); app('view')->share('invalidMonetaryLocale', true); } @@ -118,7 +116,7 @@ class Range $defaultCurrency = app('amount')->getDefaultCurrency(); // also format for moment JS: - $madMomentJS = (string)trans('config.month_and_day_moment_js', [], $locale); + $madMomentJS = (string)trans('config.month_and_day_moment_js', [], $locale); app('view')->share('madMomentJS', $madMomentJS); app('view')->share('monthAndDayFormat', $monthAndDayFormat); diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index b5bc8281ef..5bffbb7146 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -23,14 +23,11 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; -use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; /** * Class RedirectIfAuthenticated - * - */ class RedirectIfAuthenticated { @@ -38,12 +35,11 @@ class RedirectIfAuthenticated * Handle an incoming request. * * @param Request $request - * @param Closure $next - * @param string|null $guard + * @param null|string $guard * * @return mixed */ - public function handle($request, Closure $next, $guard = null) + public function handle($request, \Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { return response()->redirectTo(route('index')); diff --git a/app/Http/Middleware/SecureHeaders.php b/app/Http/Middleware/SecureHeaders.php index cf8021ba71..d5d29d02c6 100644 --- a/app/Http/Middleware/SecureHeaders.php +++ b/app/Http/Middleware/SecureHeaders.php @@ -23,13 +23,10 @@ declare(strict_types=1); namespace FireflyIII\Http\Middleware; -use Closure; -use Exception; use Illuminate\Http\Request; use Illuminate\Support\Facades\Vite; /** - * * Class SecureHeaders */ class SecureHeaders @@ -37,22 +34,20 @@ class SecureHeaders /** * Handle an incoming request. * - * @param Request $request - * @param Closure $next - * * @return mixed - * @throws Exception + * + * @throws \Exception */ - public function handle(Request $request, Closure $next) + public function handle(Request $request, \Closure $next) { // generate and share nonce. - $nonce = base64_encode(random_bytes(16)); + $nonce = base64_encode(random_bytes(16)); Vite::useCspNonce($nonce); app('view')->share('JS_NONCE', $nonce); - $response = $next($request); - $trackingScriptSrc = $this->getTrackingScriptSource(); - $csp = [ + $response = $next($request); + $trackingScriptSrc = $this->getTrackingScriptSource(); + $csp = [ "default-src 'none'", "object-src 'none'", sprintf("script-src 'unsafe-eval' 'strict-dynamic' 'self' 'unsafe-inline' 'nonce-%1s' %2s", $nonce, $trackingScriptSrc), @@ -64,10 +59,10 @@ class SecureHeaders "manifest-src 'self'", ]; - $route = $request->route(); - $customUrl = ''; - $authGuard = (string)config('firefly.authentication_guard'); - $logoutUrl = (string)config('firefly.custom_logout_url'); + $route = $request->route(); + $customUrl = ''; + $authGuard = (string)config('firefly.authentication_guard'); + $logoutUrl = (string)config('firefly.custom_logout_url'); if ('remote_user_guard' === $authGuard && '' !== $logoutUrl) { $customUrl = $logoutUrl; } @@ -76,18 +71,18 @@ class SecureHeaders $csp[] = sprintf("form-action 'self' %s", $customUrl); } - $featurePolicies = [ + $featurePolicies = [ "geolocation 'none'", "midi 'none'", - //"notifications 'none'", - //"push 'self'", + // "notifications 'none'", + // "push 'self'", "sync-xhr 'self'", "microphone 'none'", "camera 'none'", "magnetometer 'none'", "gyroscope 'none'", - //"speaker 'none'", - //"vibrate 'none'", + // "speaker 'none'", + // "vibrate 'none'", "fullscreen 'self'", "payment 'none'", ]; @@ -112,8 +107,6 @@ class SecureHeaders /** * Return part of a CSP header allowing scripts from Matomo. - * - * @return string */ private function getTrackingScriptSource(): string { diff --git a/app/Http/Middleware/StartFireflySession.php b/app/Http/Middleware/StartFireflySession.php index 753965a3d4..dad24baa3c 100644 --- a/app/Http/Middleware/StartFireflySession.php +++ b/app/Http/Middleware/StartFireflySession.php @@ -29,15 +29,12 @@ use Illuminate\Session\Middleware\StartSession; /** * Class StartFireflySession. - * - */ class StartFireflySession extends StartSession { /** * Store the current URL for the request if necessary. * - * @param Request $request * @param Session $session */ protected function storeCurrentUrl(Request $request, $session): void diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php index 049725b850..d0362148b9 100644 --- a/app/Http/Middleware/TrimStrings.php +++ b/app/Http/Middleware/TrimStrings.php @@ -27,16 +27,9 @@ use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware; /** * Class TrimStrings - * - */ class TrimStrings extends Middleware { - /** - * The names of the attributes that should not be trimmed. - * - * @var array - */ protected $except = [ 'password', diff --git a/frontend/src/stores/teststore.js b/app/Http/Middleware/TrustHosts.php similarity index 56% rename from frontend/src/stores/teststore.js rename to app/Http/Middleware/TrustHosts.php index 4dc39e04ef..4045a4aba8 100644 --- a/frontend/src/stores/teststore.js +++ b/app/Http/Middleware/TrustHosts.php @@ -1,6 +1,7 @@ +. + * along with this program. If not, see https://www.gnu.org/licenses/. */ -import {defineStore} from 'pinia'; +declare(strict_types=1); -export const useCounterStore = defineStore('counter', { - state: () => ({ - counter: 0 - }), +namespace FireflyIII\Http\Middleware; - getters: { - doubleCount(state) { - return state.counter * 2 +use Illuminate\Http\Middleware\TrustHosts as Middleware; + +class TrustHosts extends Middleware +{ + /** + * Get the host patterns that should be trusted. + * + * @return array + */ + public function hosts(): array + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; } - }, - - actions: { - increment() { - this.counter++ - } - } -}) +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php index 51094a3040..1b957bcc5e 100644 --- a/app/Http/Middleware/TrustProxies.php +++ b/app/Http/Middleware/TrustProxies.php @@ -28,8 +28,6 @@ use Symfony\Component\HttpFoundation\Request; /** * Class TrustProxies - * - */ class TrustProxies extends Middleware { diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 2e981f1aae..03d670e78b 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -27,9 +27,5 @@ use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; /** * Class VerifyCsrfToken. - * - */ -class VerifyCsrfToken extends Middleware -{ -} +class VerifyCsrfToken extends Middleware {} diff --git a/app/Http/Requests/AccountFormRequest.php b/app/Http/Requests/AccountFormRequest.php index e201825218..e9b4f06206 100644 --- a/app/Http/Requests/AccountFormRequest.php +++ b/app/Http/Requests/AccountFormRequest.php @@ -26,26 +26,28 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Enums\UserRoleEnum; use FireflyIII\Models\Account; use FireflyIII\Models\Location; +use FireflyIII\Rules\IsValidAmount; use FireflyIII\Rules\UniqueIban; use FireflyIII\Support\Request\AppendsLocationData; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class AccountFormRequest. */ class AccountFormRequest extends FormRequest { - use ConvertsDataTypes; use AppendsLocationData; use ChecksLogin; + use ConvertsDataTypes; + protected array $acceptedRoles = [UserRoleEnum::MANAGE_TRANSACTIONS]; /** * Get all data. - * - * @return array */ public function getAccountData(): array { @@ -94,8 +96,6 @@ class AccountFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -104,32 +104,40 @@ class AccountFormRequest extends FormRequest $ccPaymentTypes = implode(',', array_keys(config('firefly.ccTypes'))); $rules = [ 'name' => 'required|max:1024|min:1|uniqueAccountForUser', - 'opening_balance' => 'numeric|nullable|max:1000000000', + 'opening_balance' => ['nullable', new IsValidAmount()], 'opening_balance_date' => 'date|required_with:opening_balance|nullable', 'iban' => ['iban', 'nullable', new UniqueIban(null, $this->convertString('objectType'))], 'BIC' => 'bic|nullable', - 'virtual_balance' => 'numeric|nullable|max:1000000000', + 'virtual_balance' => ['nullable', new IsValidAmount()], 'currency_id' => 'exists:transaction_currencies,id', - 'account_number' => 'between:1,255|uniqueAccountNumberForUser|nullable', - 'account_role' => 'in:' . $accountRoles, + 'account_number' => 'min:1|max:255|uniqueAccountNumberForUser|nullable', + 'account_role' => 'in:'.$accountRoles, 'active' => 'boolean', - 'cc_type' => 'in:' . $ccPaymentTypes, + 'cc_type' => 'in:'.$ccPaymentTypes, 'amount_currency_id_opening_balance' => 'exists:transaction_currencies,id', 'amount_currency_id_virtual_balance' => 'exists:transaction_currencies,id', - 'what' => 'in:' . $types, + 'what' => 'in:'.$types, 'interest_period' => 'in:daily,monthly,yearly', + 'notes' => 'min:1|max:32768|nullable', ]; $rules = Location::requestRules($rules); - /** @var Account $account */ - $account = $this->route()->parameter('account'); + /** @var null|Account $account */ + $account = $this->route()->parameter('account'); if (null !== $account) { // add rules: $rules['id'] = 'belongsToUser:accounts'; - $rules['name'] = 'required|max:1024|min:1|uniqueAccountForUser:' . $account->id; + $rules['name'] = 'required|max:1024|min:1|uniqueAccountForUser:'.$account->id; $rules['iban'] = ['iban', 'nullable', new UniqueIban($account, $account->accountType->type)]; } return $rules; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/AttachmentFormRequest.php b/app/Http/Requests/AttachmentFormRequest.php index c09915b069..0845dea163 100644 --- a/app/Http/Requests/AttachmentFormRequest.php +++ b/app/Http/Requests/AttachmentFormRequest.php @@ -26,21 +26,19 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class AttachmentFormRequest. - * - */ class AttachmentFormRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Returns the data required by the controller. - * - * @return array */ public function getAttachmentData(): array { @@ -52,15 +50,20 @@ class AttachmentFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { // fixed return [ - 'title' => 'between:1,255|nullable', - 'notes' => 'between:1,65536|nullable', + 'title' => 'min:1|max:255|nullable', + 'notes' => 'min:1|max:32768|nullable', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/BillStoreRequest.php b/app/Http/Requests/BillStoreRequest.php index 8b2ef19b54..ceb6f3d0e0 100644 --- a/app/Http/Requests/BillStoreRequest.php +++ b/app/Http/Requests/BillStoreRequest.php @@ -23,22 +23,23 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class BillStoreRequest. */ class BillStoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Returns the data required by the controller. - * - * @return array */ public function getBillData(): array { @@ -61,22 +62,28 @@ class BillStoreRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { return [ - 'name' => 'required|between:1,255|uniqueObjectForUser:bills,name', - 'amount_min' => 'required|numeric|gt:0|max:1000000000', - 'amount_max' => 'required|numeric|gt:0|max:1000000000', + 'name' => 'required|min:1|max:255|uniqueObjectForUser:bills,name', + 'amount_min' => ['required', new IsValidPositiveAmount()], + 'amount_max' => ['required', new IsValidPositiveAmount()], 'transaction_currency_id' => 'required|exists:transaction_currencies,id', 'date' => 'required|date', + 'notes' => 'min:1|max:32768|nullable', 'bill_end_date' => 'nullable|date', 'extension_date' => 'nullable|date', - 'repeat_freq' => sprintf('required|in:%s', join(',', config('firefly.bill_periods'))), + 'repeat_freq' => sprintf('required|in:%s', implode(',', config('firefly.bill_periods'))), 'skip' => 'required|integer|gte:0|lte:31', 'active' => 'boolean', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/BillUpdateRequest.php b/app/Http/Requests/BillUpdateRequest.php index 89ffa5b0a7..8494b80294 100644 --- a/app/Http/Requests/BillUpdateRequest.php +++ b/app/Http/Requests/BillUpdateRequest.php @@ -24,22 +24,23 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; use FireflyIII\Models\Bill; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class BillUpdateRequest. */ class BillUpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Returns the data required by the controller. - * - * @return array */ public function getBillData(): array { @@ -62,8 +63,6 @@ class BillUpdateRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -71,17 +70,24 @@ class BillUpdateRequest extends FormRequest $bill = $this->route()->parameter('bill'); return [ - 'name' => sprintf('required|between:1,255|uniqueObjectForUser:bills,name,%d', $bill->id), - 'amount_min' => 'required|numeric|gt:0|max:1000000000', - 'amount_max' => 'required|numeric|gt:0|max:1000000000', + 'name' => sprintf('required|min:1|max:255|uniqueObjectForUser:bills,name,%d', $bill->id), + 'amount_min' => ['required', new IsValidPositiveAmount()], + 'amount_max' => ['required', new IsValidPositiveAmount()], 'transaction_currency_id' => 'required|exists:transaction_currencies,id', 'date' => 'required|date', 'bill_end_date' => 'nullable|date', 'extension_date' => 'nullable|date', - 'repeat_freq' => sprintf('required|in:%s', join(',', config('firefly.bill_periods'))), + 'repeat_freq' => sprintf('required|in:%s', implode(',', config('firefly.bill_periods'))), 'skip' => 'required|integer|gte:0|lte:31', 'active' => 'boolean', - 'notes' => 'between:1,65536|nullable', + 'notes' => 'min:1|max:32768|nullable', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/BudgetFormStoreRequest.php b/app/Http/Requests/BudgetFormStoreRequest.php index 3165ee7e78..f43a4c0624 100644 --- a/app/Http/Requests/BudgetFormStoreRequest.php +++ b/app/Http/Requests/BudgetFormStoreRequest.php @@ -23,10 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Validation\AutoBudget\ValidatesAutoBudgetRequest; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -34,14 +36,12 @@ use Illuminate\Validation\Validator; */ class BudgetFormStoreRequest extends FormRequest { + use ChecksLogin; use ConvertsDataTypes; use ValidatesAutoBudgetRequest; - use ChecksLogin; /** * Returns the data required by the controller. - * - * @return array */ public function getBudgetData(): array { @@ -57,35 +57,34 @@ class BudgetFormStoreRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { return [ - 'name' => 'required|between:1,100|uniqueObjectForUser:budgets,name', - 'active' => 'numeric|between:0,1', + 'name' => 'required|min:1|max:255|uniqueObjectForUser:budgets,name', + 'active' => 'numeric|min:0|max:1', 'auto_budget_type' => 'numeric|integer|gte:0|lte:3', 'auto_budget_currency_id' => 'exists:transaction_currencies,id', - 'auto_budget_amount' => 'min:0|max:1000000000|required_if:auto_budget_type,1|required_if:auto_budget_type,2', + 'auto_budget_amount' => ['required_if:auto_budget_type,1', 'required_if:auto_budget_type,2', new IsValidPositiveAmount()], 'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly', + 'notes' => 'min:1|max:32768|nullable', ]; } /** * Configure the validator instance with special rules for after the basic validation rules. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { // validate all account info $this->validateAutoBudgetAmount($validator); } ); + + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Http/Requests/BudgetFormUpdateRequest.php b/app/Http/Requests/BudgetFormUpdateRequest.php index ab61f774f5..81396f1748 100644 --- a/app/Http/Requests/BudgetFormUpdateRequest.php +++ b/app/Http/Requests/BudgetFormUpdateRequest.php @@ -24,10 +24,12 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; use FireflyIII\Models\Budget; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Validation\AutoBudget\ValidatesAutoBudgetRequest; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -35,14 +37,12 @@ use Illuminate\Validation\Validator; */ class BudgetFormUpdateRequest extends FormRequest { + use ChecksLogin; use ConvertsDataTypes; use ValidatesAutoBudgetRequest; - use ChecksLogin; /** * Returns the data required by the controller. - * - * @return array */ public function getBudgetData(): array { @@ -58,44 +58,42 @@ class BudgetFormUpdateRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { - $nameRule = 'required|between:1,100|uniqueObjectForUser:budgets,name'; + $nameRule = 'required|min:1|max:255|uniqueObjectForUser:budgets,name'; - /** @var Budget $budget */ - $budget = $this->route()->parameter('budget'); + /** @var null|Budget $budget */ + $budget = $this->route()->parameter('budget'); if (null !== $budget) { - $nameRule = 'required|between:1,100|uniqueObjectForUser:budgets,name,' . $budget->id; + $nameRule = 'required|min:1|max:255|uniqueObjectForUser:budgets,name,'.$budget->id; } return [ 'name' => $nameRule, - 'active' => 'numeric|between:0,1', + 'active' => 'numeric|min:0|max:1', 'auto_budget_type' => 'numeric|integer|gte:0|lte:31', 'auto_budget_currency_id' => 'exists:transaction_currencies,id', - 'auto_budget_amount' => 'min:0|max:1000000000|required_if:auto_budget_type,1|required_if:auto_budget_type,2|numeric', + 'auto_budget_amount' => ['required_if:auto_budget_type,1', 'required_if:auto_budget_type,2|numeric', new IsValidPositiveAmount()], 'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly', + 'notes' => 'min:1|max:32768|nullable', ]; } /** * Configure the validator instance with special rules for after the basic validation rules. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { // validate all account info $this->validateAutoBudgetAmount($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } } diff --git a/app/Http/Requests/BudgetIncomeRequest.php b/app/Http/Requests/BudgetIncomeRequest.php index 43ed98c284..0ba22c3f06 100644 --- a/app/Http/Requests/BudgetIncomeRequest.php +++ b/app/Http/Requests/BudgetIncomeRequest.php @@ -23,13 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class BudgetIncomeRequest. - * - */ class BudgetIncomeRequest extends FormRequest { @@ -37,16 +38,21 @@ class BudgetIncomeRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { // fixed return [ - 'amount' => 'numeric|required|min:0|max:1000000000', + 'amount' => ['required', new IsValidPositiveAmount()], 'start' => 'required|date|before:end', 'end' => 'required|date|after:start', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/BulkEditJournalRequest.php b/app/Http/Requests/BulkEditJournalRequest.php index 1f8c04074e..40b0e794fa 100644 --- a/app/Http/Requests/BulkEditJournalRequest.php +++ b/app/Http/Requests/BulkEditJournalRequest.php @@ -26,19 +26,19 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class MassEditBulkJournalRequest. */ class BulkEditJournalRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -48,4 +48,11 @@ class BulkEditJournalRequest extends FormRequest 'tags_action' => 'in:no_nothing,do_replace,do_append', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/CategoryFormRequest.php b/app/Http/Requests/CategoryFormRequest.php index 0e3c309d36..367dede1a8 100644 --- a/app/Http/Requests/CategoryFormRequest.php +++ b/app/Http/Requests/CategoryFormRequest.php @@ -27,19 +27,19 @@ use FireflyIII\Models\Category; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class CategoryFormRequest. */ class CategoryFormRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get information for the controller. - * - * @return array */ public function getCategoryData(): array { @@ -51,22 +51,29 @@ class CategoryFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { - $nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name'; - /** @var Category $category */ + $nameRule = 'required|min:1|max:255|uniqueObjectForUser:categories,name'; + + /** @var null|Category $category */ $category = $this->route()->parameter('category'); if (null !== $category) { - $nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name,' . $category->id; + $nameRule = 'required|min:1|max:255|uniqueObjectForUser:categories,name,'.$category->id; } // fixed return [ - 'name' => $nameRule, + 'name' => $nameRule, + 'notes' => 'min:1|max:32768|nullable', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/ConfigurationRequest.php b/app/Http/Requests/ConfigurationRequest.php index 7517fbf878..ff7eb9b743 100644 --- a/app/Http/Requests/ConfigurationRequest.php +++ b/app/Http/Requests/ConfigurationRequest.php @@ -25,11 +25,11 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class ConfigurationRequest. - * - */ class ConfigurationRequest extends FormRequest { @@ -37,8 +37,6 @@ class ConfigurationRequest extends FormRequest /** * Returns the data required by the controller. - * - * @return array */ public function getConfigurationData(): array { @@ -50,15 +48,20 @@ class ConfigurationRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { // fixed return [ - 'single_user_mode' => 'between:0,1|numeric', - 'is_demo_site' => 'between:0,1|numeric', + 'single_user_mode' => 'min:0|max:1|numeric', + 'is_demo_site' => 'min:0|max:1|numeric', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/CurrencyFormRequest.php b/app/Http/Requests/CurrencyFormRequest.php index b0048f8496..02587f9b22 100644 --- a/app/Http/Requests/CurrencyFormRequest.php +++ b/app/Http/Requests/CurrencyFormRequest.php @@ -27,19 +27,19 @@ use FireflyIII\Models\TransactionCurrency; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class CurrencyFormRequest. */ class CurrencyFormRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Returns the data required by the controller. - * - * @return array */ public function getCurrencyData(): array { @@ -54,13 +54,11 @@ class CurrencyFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { // fixed - $rules = [ + $rules = [ 'name' => 'required|max:48|min:1|uniqueCurrencyName', 'code' => 'required|min:3|max:51|uniqueCurrencyCode', 'symbol' => 'required|min:1|max:51|uniqueCurrencySymbol', @@ -68,7 +66,7 @@ class CurrencyFormRequest extends FormRequest 'enabled' => 'in:0,1', ]; - /** @var TransactionCurrency $currency */ + /** @var null|TransactionCurrency $currency */ $currency = $this->route()->parameter('currency'); if (null !== $currency) { @@ -83,4 +81,11 @@ class CurrencyFormRequest extends FormRequest return $rules; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/DeleteAccountFormRequest.php b/app/Http/Requests/DeleteAccountFormRequest.php index 51d65450ec..5d5296a99a 100644 --- a/app/Http/Requests/DeleteAccountFormRequest.php +++ b/app/Http/Requests/DeleteAccountFormRequest.php @@ -25,11 +25,11 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class DeleteAccountFormRequest. - * - */ class DeleteAccountFormRequest extends FormRequest { @@ -37,8 +37,6 @@ class DeleteAccountFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -47,4 +45,11 @@ class DeleteAccountFormRequest extends FormRequest 'password' => 'required', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/EmailFormRequest.php b/app/Http/Requests/EmailFormRequest.php index 1c7429e84f..0cb58eb4ed 100644 --- a/app/Http/Requests/EmailFormRequest.php +++ b/app/Http/Requests/EmailFormRequest.php @@ -26,11 +26,11 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class EmailFormRequest. - * - */ class EmailFormRequest extends FormRequest { @@ -39,8 +39,6 @@ class EmailFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -49,4 +47,11 @@ class EmailFormRequest extends FormRequest 'email' => 'required|email', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/InviteUserFormRequest.php b/app/Http/Requests/InviteUserFormRequest.php index d751e26f54..9e2cde1ede 100644 --- a/app/Http/Requests/InviteUserFormRequest.php +++ b/app/Http/Requests/InviteUserFormRequest.php @@ -27,19 +27,19 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class InviteUserFormRequest */ class InviteUserFormRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -47,4 +47,11 @@ class InviteUserFormRequest extends FormRequest 'invited_user' => 'required|email|unique:invited_users,email', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/JournalLinkRequest.php b/app/Http/Requests/JournalLinkRequest.php index 7eb14cbee6..6e2e083f11 100644 --- a/app/Http/Requests/JournalLinkRequest.php +++ b/app/Http/Requests/JournalLinkRequest.php @@ -27,19 +27,19 @@ use FireflyIII\Models\LinkType; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class JournalLink. */ class JournalLinkRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Returns the data required by the controller. - * - * @return array */ public function getLinkInfo(): array { @@ -56,20 +56,19 @@ class JournalLinkRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { // all possible combinations of link types and inward / outward: $combinations = []; $linkTypes = LinkType::get(['id']); + /** @var LinkType $type */ foreach ($linkTypes as $type) { $combinations[] = sprintf('%d_inward', $type->id); $combinations[] = sprintf('%d_outward', $type->id); } - $string = implode(',', $combinations); + $string = implode(',', $combinations); // fixed return [ @@ -77,4 +76,11 @@ class JournalLinkRequest extends FormRequest 'opposing' => 'belongsToUser:transaction_journals', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/LinkTypeFormRequest.php b/app/Http/Requests/LinkTypeFormRequest.php index 2705775ba7..5b9b4470f7 100644 --- a/app/Http/Requests/LinkTypeFormRequest.php +++ b/app/Http/Requests/LinkTypeFormRequest.php @@ -26,6 +26,8 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class LinkTypeFormRequest. @@ -37,8 +39,6 @@ class LinkTypeFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -47,7 +47,7 @@ class LinkTypeFormRequest extends FormRequest $idRule = ''; // get parameter link: - $link = $this->route()->parameter('linkType'); + $link = $this->route()->parameter('linkType'); if (null !== $link) { $idRule = 'exists:link_types,id'; @@ -61,4 +61,11 @@ class LinkTypeFormRequest extends FormRequest 'outward' => 'required|max:255|min:1|different:inward', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/MassDeleteJournalRequest.php b/app/Http/Requests/MassDeleteJournalRequest.php index ca81fda9ff..f6da58b661 100644 --- a/app/Http/Requests/MassDeleteJournalRequest.php +++ b/app/Http/Requests/MassDeleteJournalRequest.php @@ -25,11 +25,11 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class MassDeleteJournalRequest. - * - */ class MassDeleteJournalRequest extends FormRequest { @@ -37,8 +37,6 @@ class MassDeleteJournalRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -47,4 +45,11 @@ class MassDeleteJournalRequest extends FormRequest 'confirm_mass_delete.*' => 'required|belongsToUser:transaction_journals,id', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/MassEditJournalRequest.php b/app/Http/Requests/MassEditJournalRequest.php index 0ac30468b3..cb48c0b736 100644 --- a/app/Http/Requests/MassEditJournalRequest.php +++ b/app/Http/Requests/MassEditJournalRequest.php @@ -25,11 +25,11 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class MassEditJournalRequest. - * - */ class MassEditJournalRequest extends FormRequest { @@ -37,15 +37,13 @@ class MassEditJournalRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { // fixed return [ - 'description.*' => 'required|min:1|max:255', + 'description.*' => 'required|min:1|max:1024', 'source_id.*' => 'numeric|belongsToUser:accounts,id', 'destination_id.*' => 'numeric|belongsToUser:accounts,id', 'journals.*' => 'numeric|belongsToUser:transaction_journals,id', @@ -53,4 +51,11 @@ class MassEditJournalRequest extends FormRequest 'expense_account' => 'max:255', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/NewUserFormRequest.php b/app/Http/Requests/NewUserFormRequest.php index a09ba41480..2e16f47c48 100644 --- a/app/Http/Requests/NewUserFormRequest.php +++ b/app/Http/Requests/NewUserFormRequest.php @@ -23,36 +23,42 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; +use FireflyIII\Rules\IsValidAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class NewUserFormRequest. - * - */ class NewUserFormRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Rules for this request. - * - * @return array */ public function rules(): array { // fixed return [ - 'bank_name' => 'required|between:1,200', - 'bank_balance' => 'required|numeric|max:1000000000', - 'savings_balance' => 'numeric|max:1000000000', - 'credit_card_limit' => 'numeric|max:1000000000', + 'bank_name' => 'required|min:1|max:255', + 'bank_balance' => ['required', new IsValidAmount()], + 'savings_balance' => ['nullable', new IsValidAmount()], + 'credit_card_limit' => ['nullable', new IsValidAmount()], 'amount_currency_id_bank_balance' => 'exists:transaction_currencies,id', 'amount_currency_id_savings_balance' => 'exists:transaction_currencies,id', 'amount_currency_id_credit_card_limit' => 'exists:transaction_currencies,id', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/ObjectGroupFormRequest.php b/app/Http/Requests/ObjectGroupFormRequest.php index cabec0d41d..03948c4486 100644 --- a/app/Http/Requests/ObjectGroupFormRequest.php +++ b/app/Http/Requests/ObjectGroupFormRequest.php @@ -27,19 +27,19 @@ use FireflyIII\Models\ObjectGroup; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class ObjectGroupFormRequest. */ class ObjectGroupFormRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Returns the data required by the controller. - * - * @return array */ public function getObjectGroupData(): array { @@ -50,21 +50,26 @@ class ObjectGroupFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { - /** @var ObjectGroup $objectGroup */ + /** @var null|ObjectGroup $objectGroup */ $objectGroup = $this->route()->parameter('objectGroup'); - $titleRule = 'required|between:1,255|uniqueObjectGroup'; + $titleRule = 'required|min:1|max:255|uniqueObjectGroup'; if (null !== $objectGroup) { - $titleRule = sprintf('required|between:1,255|uniqueObjectGroup:%d', $objectGroup->id); + $titleRule = sprintf('required|min:1|max:255|uniqueObjectGroup:%d', $objectGroup->id); } return [ 'title' => $titleRule, ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/PiggyBankStoreRequest.php b/app/Http/Requests/PiggyBankStoreRequest.php index b4baa67c46..94087fedb8 100644 --- a/app/Http/Requests/PiggyBankStoreRequest.php +++ b/app/Http/Requests/PiggyBankStoreRequest.php @@ -23,22 +23,23 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class PiggyBankStoreRequest. */ class PiggyBankStoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Returns the data required by the controller. - * - * @return array */ public function getPiggyBankData(): array { @@ -55,19 +56,25 @@ class PiggyBankStoreRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { return [ - 'name' => 'required|between:1,255|uniquePiggyBankForUser', + 'name' => 'required|min:1|max:255|uniquePiggyBankForUser', 'account_id' => 'required|belongsToUser:accounts', - 'targetamount' => 'nullable|numeric|max:1000000000', + 'targetamount' => ['nullable', new IsValidPositiveAmount()], 'startdate' => 'date', 'targetdate' => 'date|nullable', 'order' => 'integer|min:1', 'object_group' => 'min:0|max:255', + 'notes' => 'min:1|max:32768|nullable', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/PiggyBankUpdateRequest.php b/app/Http/Requests/PiggyBankUpdateRequest.php index 4f7558689c..7f10011678 100644 --- a/app/Http/Requests/PiggyBankUpdateRequest.php +++ b/app/Http/Requests/PiggyBankUpdateRequest.php @@ -24,22 +24,23 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; use FireflyIII\Models\PiggyBank; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class PiggyBankFormRequest. */ class PiggyBankUpdateRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Returns the data required by the controller. - * - * @return array */ public function getPiggyBankData(): array { @@ -56,8 +57,6 @@ class PiggyBankUpdateRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -65,13 +64,21 @@ class PiggyBankUpdateRequest extends FormRequest $piggy = $this->route()->parameter('piggyBank'); return [ - 'name' => sprintf('required|between:1,255|uniquePiggyBankForUser:%d', $piggy->id), + 'name' => sprintf('required|min:1|max:255|uniquePiggyBankForUser:%d', $piggy->id), 'account_id' => 'required|belongsToUser:accounts', - 'targetamount' => 'nullable|numeric|max:1000000000', + 'targetamount' => ['nullable', new IsValidPositiveAmount()], 'startdate' => 'date', 'targetdate' => 'date|nullable', - 'order' => 'integer|max:65536|min:1', + 'order' => 'integer|max:32768|min:1', 'object_group' => 'min:0|max:255', + 'notes' => 'min:1|max:32768|nullable', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/ProfileFormRequest.php b/app/Http/Requests/ProfileFormRequest.php index f643abb3b3..690697681e 100644 --- a/app/Http/Requests/ProfileFormRequest.php +++ b/app/Http/Requests/ProfileFormRequest.php @@ -25,11 +25,11 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class ProfileFormRequest. - * - */ class ProfileFormRequest extends FormRequest { @@ -37,8 +37,6 @@ class ProfileFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -49,4 +47,11 @@ class ProfileFormRequest extends FormRequest 'new_password_confirmation' => 'required', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/ReconciliationStoreRequest.php b/app/Http/Requests/ReconciliationStoreRequest.php index c9a1613f20..2524ce4fb3 100644 --- a/app/Http/Requests/ReconciliationStoreRequest.php +++ b/app/Http/Requests/ReconciliationStoreRequest.php @@ -23,24 +23,24 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; +use FireflyIII\Rules\IsValidAmount; use FireflyIII\Rules\ValidJournals; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class ReconciliationStoreRequest */ class ReconciliationStoreRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Returns the data required by the controller. - * - * @return array */ public function getAll(): array { @@ -48,7 +48,7 @@ class ReconciliationStoreRequest extends FormRequest if (!is_array($transactions)) { $transactions = []; } - $data = [ + $data = [ 'start' => $this->getCarbonDate('start'), 'end' => $this->getCarbonDate('end'), 'start_balance' => $this->convertString('startBalance'), @@ -57,26 +57,31 @@ class ReconciliationStoreRequest extends FormRequest 'journals' => $transactions, 'reconcile' => $this->convertString('reconcile'), ]; - Log::debug('In ReconciliationStoreRequest::getAll(). Will now return data.'); + app('log')->debug('In ReconciliationStoreRequest::getAll(). Will now return data.'); return $data; } /** * Rules for this request. - * - * @return array */ public function rules(): array { return [ 'start' => 'required|date', 'end' => 'required|date', - 'startBalance' => 'numeric|max:1000000000', - 'endBalance' => 'numeric|max:1000000000', - 'difference' => 'required|numeric|max:1000000000', + 'startBalance' => ['nullable', new IsValidAmount()], + 'endBalance' => ['nullable', new IsValidAmount()], + 'difference' => ['required', new IsValidAmount()], 'journals' => [new ValidJournals()], 'reconcile' => 'required|in:create,nothing', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/RecurrenceFormRequest.php b/app/Http/Requests/RecurrenceFormRequest.php index dce42861b4..0bdaef8ef1 100644 --- a/app/Http/Requests/RecurrenceFormRequest.php +++ b/app/Http/Requests/RecurrenceFormRequest.php @@ -27,6 +27,7 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\CategoryFactory; use FireflyIII\Models\Recurrence; use FireflyIII\Models\TransactionType; +use FireflyIII\Rules\IsValidPositiveAmount; use FireflyIII\Rules\ValidRecurrenceRepetitionType; use FireflyIII\Rules\ValidRecurrenceRepetitionValue; use FireflyIII\Support\Request\ChecksLogin; @@ -41,20 +42,20 @@ use Illuminate\Validation\Validator; */ class RecurrenceFormRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get the data required by the controller. * - * @return array * @throws FireflyException * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function getAll(): array { - $repetitionData = $this->parseRepetitionData(); - $return = [ + $repetitionData = $this->parseRepetitionData(); + $return = [ 'recurrence' => [ 'type' => $this->convertString('transaction_type'), 'title' => $this->convertString('title'), @@ -95,7 +96,6 @@ class RecurrenceFormRequest extends FormRequest 'weekend' => $this->convertInteger('weekend'), ], ], - ]; // fill in foreign currency data @@ -130,8 +130,9 @@ class RecurrenceFormRequest extends FormRequest } // replace category name with a new category: - $factory = app(CategoryFactory::class); + $factory = app(CategoryFactory::class); $factory->setUser(auth()->user()); + /** * @var int $index * @var array $transaction @@ -151,8 +152,6 @@ class RecurrenceFormRequest extends FormRequest /** * Parses repetition data. - * - * @return array */ private function parseRepetitionData(): array { @@ -165,8 +164,8 @@ class RecurrenceFormRequest extends FormRequest if ('daily' === $value) { $return['type'] = $value; } - //monthly,17 - //ndom,3,7 + // monthly,17 + // ndom,3,7 if (in_array(substr($value, 0, 6), ['yearly', 'weekly'], true)) { $return['type'] = substr($value, 0, 6); $return['moment'] = substr($value, 7); @@ -185,45 +184,43 @@ class RecurrenceFormRequest extends FormRequest /** * The rules for this request. - * - * @return array - * */ public function rules(): array { - $today = today(config('app.timezone')); - $tomorrow = today(config('app.timezone'))->addDay(); - $rules = [ + $today = today(config('app.timezone')); + $tomorrow = today(config('app.timezone'))->addDay(); + $before = today(config('app.timezone'))->addYears(25); + $rules = [ // mandatory info for recurrence. - 'title' => 'required|between:1,255|uniqueObjectForUser:recurrences,title', - 'first_date' => 'required|date|after:' . $today->format('Y-m-d'), - 'repetition_type' => ['required', new ValidRecurrenceRepetitionValue(), new ValidRecurrenceRepetitionType(), 'between:1,20'], + 'title' => 'required|min:1|max:255|uniqueObjectForUser:recurrences,title', + 'first_date' => sprintf('required|date|before:%s|after:%s', $before->format('Y-m-d'), $today->format('Y-m-d')), + 'repetition_type' => ['required', new ValidRecurrenceRepetitionValue(), new ValidRecurrenceRepetitionType(), 'min:1', 'max:32'], 'skip' => 'required|numeric|integer|gte:0|lte:31', - + 'notes' => 'min:1|max:32768|nullable', // optional for recurrence: - 'recurring_description' => 'between:0,65000', - 'active' => 'numeric|between:0,1', - 'apply_rules' => 'numeric|between:0,1', + 'recurring_description' => 'min:0|max:32768', + 'active' => 'numeric|min:0|max:1', + 'apply_rules' => 'numeric|min:0|max:1', // mandatory for transaction: - 'transaction_description' => 'required|between:1,255', + 'transaction_description' => 'required|min:1|max:255', 'transaction_type' => 'required|in:withdrawal,deposit,transfer', 'transaction_currency_id' => 'required|exists:transaction_currencies,id', - 'amount' => 'numeric|required|gt:0|max:1000000000', + 'amount' => ['required', new IsValidPositiveAmount()], // mandatory account info: 'source_id' => 'numeric|belongsToUser:accounts,id|nullable', - 'source_name' => 'between:1,255|nullable', + 'source_name' => 'min:1|max:255|nullable', 'destination_id' => 'numeric|belongsToUser:accounts,id|nullable', - 'destination_name' => 'between:1,255|nullable', + 'destination_name' => 'min:1|max:255|nullable', // foreign amount data: - 'foreign_amount' => 'nullable|gt:0|max:1000000000', + 'foreign_amount' => ['nullable', new IsValidPositiveAmount()], // optional fields: 'budget_id' => 'mustExist:budgets,id|belongsToUser:budgets,id|nullable', 'bill_id' => 'mustExist:bills,id|belongsToUser:bills,id|nullable', - 'category' => 'between:1,255|nullable', - 'tags' => 'between:1,255|nullable', + 'category' => 'min:1|max:255|nullable', + 'tags' => 'min:1|max:255|nullable', ]; if ($this->convertInteger('foreign_currency_id') > 0) { $rules['foreign_currency_id'] = 'exists:transaction_currencies,id'; @@ -231,7 +228,7 @@ class RecurrenceFormRequest extends FormRequest // if ends after X repetitions, set another rule if ('times' === $this->convertString('repetition_end')) { - $rules['repetitions'] = 'required|numeric|between:0,254'; + $rules['repetitions'] = 'required|numeric|min:0|max:255'; } // if foreign amount, currency must be different. if (null !== $this->convertFloat('foreign_amount')) { // intentional float, used because it defaults to null. @@ -240,17 +237,17 @@ class RecurrenceFormRequest extends FormRequest // if ends at date X, set another rule. if ('until_date' === $this->convertString('repetition_end')) { - $rules['repeat_until'] = 'required|date|after:' . $tomorrow->format('Y-m-d'); + $rules['repeat_until'] = 'required|date|after:'.$tomorrow->format('Y-m-d'); } // switch on type to expand rules for source and destination accounts: - $type = strtolower($this->convertString('transaction_type')); + $type = strtolower($this->convertString('transaction_type')); if (strtolower(TransactionType::WITHDRAWAL) === $type) { $rules['source_id'] = 'required|exists:accounts,id|belongsToUser:accounts'; - $rules['destination_name'] = 'between:1,255|nullable'; + $rules['destination_name'] = 'min:1|max:255|nullable'; } if (strtolower(TransactionType::DEPOSIT) === $type) { - $rules['source_name'] = 'between:1,255|nullable'; + $rules['source_name'] = 'min:1|max:255|nullable'; $rules['destination_id'] = 'required|exists:accounts,id|belongsToUser:accounts'; } if (strtolower(TransactionType::TRANSFER) === $type) { @@ -260,11 +257,11 @@ class RecurrenceFormRequest extends FormRequest } // update some rules in case the user is editing a post: - /** @var Recurrence $recurrence */ + /** @var null|Recurrence $recurrence */ $recurrence = $this->route()->parameter('recurrence'); if ($recurrence instanceof Recurrence) { $rules['id'] = 'required|numeric|exists:recurrences,id'; - $rules['title'] = 'required|between:1,255|uniqueObjectForUser:recurrences,title,' . $recurrence->id; + $rules['title'] = 'required|min:1|max:255|uniqueObjectForUser:recurrences,title,'.$recurrence->id; $rules['first_date'] = 'required|date'; } @@ -273,31 +270,29 @@ class RecurrenceFormRequest extends FormRequest /** * Configure the validator instance with special rules for after the basic validation rules. - * - * @param Validator $validator - * - * @return void */ public function withValidator(Validator $validator): void { $validator->after( - function (Validator $validator) { + function (Validator $validator): void { // validate all account info $this->validateAccountInformation($validator); } ); + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } } /** * Validates the given account information. Switches on given transaction type. * - * @param Validator $validator - * * @throws FireflyException */ public function validateAccountInformation(Validator $validator): void { - Log::debug('Now in validateAccountInformation (RecurrenceFormRequest)()'); + app('log')->debug('Now in validateAccountInformation (RecurrenceFormRequest)()'); + /** @var AccountValidator $accountValidator */ $accountValidator = app(AccountValidator::class); $data = $validator->getData(); @@ -306,13 +301,13 @@ class RecurrenceFormRequest extends FormRequest $accountValidator->setTransactionType($transactionType); // default values: - $sourceId = null; - $destinationId = null; + $sourceId = null; + $destinationId = null; // TODO typeOverrule: the account validator may have another opinion the transaction type. // TODO either use 'withdrawal' or the strtolower() variant, not both. - $type = $this->convertString('transaction_type'); - $throwError = true; + $type = $this->convertString('transaction_type'); + $throwError = true; if ('withdrawal' === $type) { $throwError = false; $sourceId = (int)$data['source_id']; @@ -321,19 +316,19 @@ class RecurrenceFormRequest extends FormRequest if ('deposit' === $type) { $throwError = false; $sourceId = (int)$data['deposit_source_id']; - $destinationId = (int)$data['destination_id']; + $destinationId = (int)($data['destination_id'] ?? 0); } if ('transfer' === $type) { $throwError = false; $sourceId = (int)$data['source_id']; - $destinationId = (int)$data['destination_id']; + $destinationId = (int)($data['destination_id'] ?? 0); } if (true === $throwError) { throw new FireflyException(sprintf('Cannot handle transaction type "%s"', $this->convertString('transaction_type'))); } // validate source account. - $validSource = $accountValidator->validateSource(['id' => $sourceId,]); + $validSource = $accountValidator->validateSource(['id' => $sourceId]); // do something with result: if (false === $validSource) { @@ -345,7 +340,7 @@ class RecurrenceFormRequest extends FormRequest } // validate destination account - $validDestination = $accountValidator->validateDestination(['id' => $destinationId,]); + $validDestination = $accountValidator->validateDestination(['id' => $destinationId]); // do something with result: if (false === $validDestination) { $message = (string)trans('validation.generic_invalid_destination'); diff --git a/app/Http/Requests/ReportFormRequest.php b/app/Http/Requests/ReportFormRequest.php index 94e6f83f64..3a0977bbe7 100644 --- a/app/Http/Requests/ReportFormRequest.php +++ b/app/Http/Requests/ReportFormRequest.php @@ -34,6 +34,7 @@ use FireflyIII\Support\Request\ChecksLogin; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class CategoryFormRequest. @@ -44,8 +45,6 @@ class ReportFormRequest extends FormRequest /** * Validate list of accounts. - * - * @return Collection */ public function getAccountList(): Collection { @@ -68,8 +67,6 @@ class ReportFormRequest extends FormRequest /** * Validate list of budgets. - * - * @return Collection */ public function getBudgetList(): Collection { @@ -91,8 +88,6 @@ class ReportFormRequest extends FormRequest /** * Validate list of categories. - * - * @return Collection */ public function getCategoryList(): Collection { @@ -114,8 +109,6 @@ class ReportFormRequest extends FormRequest /** * Validate list of accounts which exist twice in system. - * - * @return Collection */ public function getDoubleList(): Collection { @@ -138,8 +131,6 @@ class ReportFormRequest extends FormRequest /** * Validate end date. * - * @return Carbon - * * @throws FireflyException */ public function getEndDate(): Carbon @@ -148,33 +139,36 @@ class ReportFormRequest extends FormRequest $range = $this->get('daterange'); $parts = explode(' - ', (string)$range); if (2 === count($parts)) { - $string = $parts[1]; + $string = $parts[1]; // validate as date // if regex for YYYY-MM-DD: $pattern = '/^(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][\d]|3[01])$/'; - if (preg_match($pattern, $string)) { + $result = preg_match($pattern, $string); + if (false !== $result && 0 !== $result) { try { $date = new Carbon($parts[1]); - } catch (Exception $e) { // intentional generic exception + } catch (\Exception $e) { // intentional generic exception $error = sprintf('"%s" is not a valid date range: %s', $range, $e->getMessage()); - Log::error($error); - Log::error($e->getTraceAsString()); + app('log')->error($error); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($error, 0, $e); } + return $date; } - $error = sprintf('"%s" is not a valid date range: %s', $range, 'invalid format :('); - Log::error($error); + $error = sprintf('"%s" is not a valid date range: %s', $range, 'invalid format :('); + app('log')->error($error); + throw new FireflyException($error, 0); } + return $date; } /** * Validate start date. * - * @return Carbon - * * @throws FireflyException */ public function getStartDate(): Carbon @@ -183,23 +177,27 @@ class ReportFormRequest extends FormRequest $range = $this->get('daterange'); $parts = explode(' - ', (string)$range); if (2 === count($parts)) { - $string = $parts[0]; + $string = $parts[0]; // validate as date // if regex for YYYY-MM-DD: $pattern = '/^(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][\d]|3[01])$/'; - if (preg_match($pattern, $string)) { + $result = preg_match($pattern, $string); + if (false !== $result && 0 !== $result) { try { $date = new Carbon($parts[0]); - } catch (Exception $e) { // intentional generic exception + } catch (\Exception $e) { // intentional generic exception $error = sprintf('"%s" is not a valid date range: %s', $range, $e->getMessage()); - Log::error($error); - Log::error($e->getTraceAsString()); + app('log')->error($error); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($error, 0, $e); } + return $date; } - $error = sprintf('"%s" is not a valid date range: %s', $range, 'invalid format :('); - Log::error($error); + $error = sprintf('"%s" is not a valid date range: %s', $range, 'invalid format :('); + app('log')->error($error); + throw new FireflyException($error, 0); } @@ -208,8 +206,6 @@ class ReportFormRequest extends FormRequest /** * Validate list of tags. - * - * @return Collection */ public function getTagList(): Collection { @@ -218,17 +214,19 @@ class ReportFormRequest extends FormRequest $set = $this->get('tag'); $collection = new Collection(); if (is_array($set)) { - Log::debug('Set is:', $set); + app('log')->debug('Set is:', $set); } if (!is_array($set)) { - Log::error(sprintf('Set is not an array! "%s"', $set)); + app('log')->debug(sprintf('Set is not an array! "%s"', $set)); + return $collection; } foreach ($set as $tagTag) { - Log::debug(sprintf('Now searching for "%s"', $tagTag)); + app('log')->debug(sprintf('Now searching for "%s"', $tagTag)); $tag = $repository->findByTag($tagTag); if (null !== $tag) { $collection->push($tag); + continue; } $tag = $repository->find((int)$tagTag); @@ -242,8 +240,6 @@ class ReportFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -251,4 +247,11 @@ class ReportFormRequest extends FormRequest 'report_type' => 'in:audit,default,category,budget,tag,double', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/RuleFormRequest.php b/app/Http/Requests/RuleFormRequest.php index d27371e4d7..6d6f831815 100644 --- a/app/Http/Requests/RuleFormRequest.php +++ b/app/Http/Requests/RuleFormRequest.php @@ -28,21 +28,20 @@ use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\GetRuleConfiguration; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class RuleFormRequest. */ class RuleFormRequest extends FormRequest { + use ChecksLogin; use ConvertsDataTypes; use GetRuleConfiguration; - use ChecksLogin; /** * Get all data for controller. - * - * @return array - * */ public function getRuleData(): array { @@ -59,9 +58,6 @@ class RuleFormRequest extends FormRequest ]; } - /** - * @return array - */ private function getRuleTriggerData(): array { $return = []; @@ -84,11 +80,6 @@ class RuleFormRequest extends FormRequest return $return; } - /** - * @param array $array - * - * @return array - */ public static function replaceAmountTrigger(array $array): array { // do some sneaky search and replace. @@ -110,12 +101,10 @@ class RuleFormRequest extends FormRequest if (in_array($array['type'], $amountFields, true) && '0' === $array['value']) { $array['value'] = '0.00'; } + return $array; } - /** - * @return array - */ private function getRuleActionData(): array { $return = []; @@ -136,41 +125,46 @@ class RuleFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { - $validTriggers = $this->getTriggers(); - $validActions = array_keys(config('firefly.rule-actions')); + $validTriggers = $this->getTriggers(); + $validActions = array_keys(config('firefly.rule-actions')); // some actions require text (aka context): - $contextActions = implode(',', config('firefly.context-rule-actions')); + $contextActions = implode(',', config('firefly.context-rule-actions')); // some triggers require text (aka context): $contextTriggers = implode(',', $this->getTriggersWithContext()); // initial set of rules: - $rules = [ - 'title' => 'required|between:1,100|uniqueObjectForUser:rules,title', - 'description' => 'between:1,5000|nullable', + $rules = [ + 'title' => 'required|min:1|max:255|uniqueObjectForUser:rules,title', + 'description' => 'min:1|max:32768|nullable', 'stop_processing' => 'boolean', 'rule_group_id' => 'required|belongsToUser:rule_groups', 'trigger' => 'required|in:store-journal,update-journal', - 'triggers.*.type' => 'required|in:' . implode(',', $validTriggers), + 'triggers.*.type' => 'required|in:'.implode(',', $validTriggers), 'triggers.*.value' => sprintf('required_if:triggers.*.type,%s|max:1024|min:1|ruleTriggerValue', $contextTriggers), - 'actions.*.type' => 'required|in:' . implode(',', $validActions), + 'actions.*.type' => 'required|in:'.implode(',', $validActions), 'actions.*.value' => sprintf('required_if:actions.*.type,%s|min:0|max:1024|ruleActionValue', $contextActions), 'strict' => 'in:0,1', ]; - /** @var Rule $rule */ - $rule = $this->route()->parameter('rule'); + /** @var null|Rule $rule */ + $rule = $this->route()->parameter('rule'); if (null !== $rule) { - $rules['title'] = 'required|between:1,100|uniqueObjectForUser:rules,title,' . $rule->id; + $rules['title'] = 'required|min:1|max:255|uniqueObjectForUser:rules,title,'.$rule->id; } return $rules; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/RuleGroupFormRequest.php b/app/Http/Requests/RuleGroupFormRequest.php index 91da192e06..ac0a4fc891 100644 --- a/app/Http/Requests/RuleGroupFormRequest.php +++ b/app/Http/Requests/RuleGroupFormRequest.php @@ -28,19 +28,19 @@ use FireflyIII\Rules\IsBoolean; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class RuleGroupFormRequest. */ class RuleGroupFormRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data for controller. - * - * @return array */ public function getRuleGroupData(): array { @@ -58,24 +58,29 @@ class RuleGroupFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { - $titleRule = 'required|between:1,100|uniqueObjectForUser:rule_groups,title'; + $titleRule = 'required|min:1|max:255|uniqueObjectForUser:rule_groups,title'; - /** @var RuleGroup $ruleGroup */ + /** @var null|RuleGroup $ruleGroup */ $ruleGroup = $this->route()->parameter('ruleGroup'); if (null !== $ruleGroup) { - $titleRule = 'required|between:1,100|uniqueObjectForUser:rule_groups,title,' . $ruleGroup->id; + $titleRule = 'required|min:1|max:255|uniqueObjectForUser:rule_groups,title,'.$ruleGroup->id; } return [ 'title' => $titleRule, - 'description' => 'between:1,5000|nullable', + 'description' => 'min:1|max:32768|nullable', 'active' => [new IsBoolean()], ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/SelectTransactionsRequest.php b/app/Http/Requests/SelectTransactionsRequest.php index 17f5284ca1..13a5f7729a 100644 --- a/app/Http/Requests/SelectTransactionsRequest.php +++ b/app/Http/Requests/SelectTransactionsRequest.php @@ -26,11 +26,11 @@ namespace FireflyIII\Http\Requests; use Carbon\Carbon; use FireflyIII\Support\Request\ChecksLogin; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class SelectTransactionsRequest. - * - */ class SelectTransactionsRequest extends FormRequest { @@ -38,8 +38,6 @@ class SelectTransactionsRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -50,10 +48,17 @@ class SelectTransactionsRequest extends FormRequest $today = today(config('app.timezone'))->addDay()->format('Y-m-d'); return [ - 'start' => 'required|date|after:' . $first, - 'end' => 'required|date|before:' . $today, + 'start' => 'required|date|after:'.$first, + 'end' => 'required|date|before:'.$today, 'accounts' => 'required', 'accounts.*' => 'required|exists:accounts,id|belongsToUser:accounts', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/TagFormRequest.php b/app/Http/Requests/TagFormRequest.php index c006faaef7..2a30cd6344 100644 --- a/app/Http/Requests/TagFormRequest.php +++ b/app/Http/Requests/TagFormRequest.php @@ -29,20 +29,20 @@ use FireflyIII\Support\Request\AppendsLocationData; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class TagFormRequest. */ class TagFormRequest extends FormRequest { - use ConvertsDataTypes; use AppendsLocationData; use ChecksLogin; + use ConvertsDataTypes; /** * Get all data for controller. - * - * @return array */ public function collectTagData(): array { @@ -57,29 +57,33 @@ class TagFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { - $idRule = ''; + $idRule = ''; - /** @var Tag $tag */ + /** @var null|Tag $tag */ $tag = $this->route()->parameter('tag'); $tagRule = 'required|max:1024|min:1|uniqueObjectForUser:tags,tag'; if (null !== $tag) { $idRule = 'belongsToUser:tags'; - $tagRule = 'required|max:1024|min:1|uniqueObjectForUser:tags,tag,' . $tag->id; + $tagRule = 'required|max:1024|min:1|uniqueObjectForUser:tags,tag,'.$tag->id; } - $rules = [ + $rules = [ 'tag' => $tagRule, 'id' => $idRule, - 'description' => 'max:65536|min:1|nullable', + 'description' => 'max:32768|min:1|nullable', 'date' => 'date|nullable', - ]; return Location::requestRules($rules); } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/TestRuleFormRequest.php b/app/Http/Requests/TestRuleFormRequest.php index 39b7cc62d3..40511100b2 100644 --- a/app/Http/Requests/TestRuleFormRequest.php +++ b/app/Http/Requests/TestRuleFormRequest.php @@ -26,22 +26,20 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\GetRuleConfiguration; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class TestRuleFormRequest. - * - */ class TestRuleFormRequest extends FormRequest { - use GetRuleConfiguration; use ChecksLogin; + use GetRuleConfiguration; /** * Rules for this request. * TODO these rules are not valid anymore. - * - * @return array */ public function rules(): array { @@ -49,8 +47,15 @@ class TestRuleFormRequest extends FormRequest $validTriggers = $this->getTriggers(); return [ - 'rule-trigger.*' => 'required|max:1024|min:1|in:' . implode(',', $validTriggers), + 'rule-trigger.*' => 'required|max:1024|min:1|in:'.implode(',', $validTriggers), 'rule-trigger-value.*' => 'required|max:1024|min:1|ruleTriggerValue', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/TokenFormRequest.php b/app/Http/Requests/TokenFormRequest.php index eedf49a616..ab7d883225 100644 --- a/app/Http/Requests/TokenFormRequest.php +++ b/app/Http/Requests/TokenFormRequest.php @@ -25,11 +25,11 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class TokenFormRequest. - * - */ class TokenFormRequest extends FormRequest { @@ -37,8 +37,6 @@ class TokenFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -47,4 +45,11 @@ class TokenFormRequest extends FormRequest 'code' => 'required|2faCode', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/TriggerRecurrenceRequest.php b/app/Http/Requests/TriggerRecurrenceRequest.php index 205141f368..a1ad139b6e 100644 --- a/app/Http/Requests/TriggerRecurrenceRequest.php +++ b/app/Http/Requests/TriggerRecurrenceRequest.php @@ -1,6 +1,5 @@ 'required|date', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/UserFormRequest.php b/app/Http/Requests/UserFormRequest.php index 1305bda1fc..fa9d62cb8e 100644 --- a/app/Http/Requests/UserFormRequest.php +++ b/app/Http/Requests/UserFormRequest.php @@ -26,21 +26,19 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class UserFormRequest. - * - */ class UserFormRequest extends FormRequest { - use ConvertsDataTypes; use ChecksLogin; + use ConvertsDataTypes; /** * Get data for controller. - * - * @return array */ public function getUserData(): array { @@ -55,8 +53,6 @@ class UserFormRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -64,9 +60,16 @@ class UserFormRequest extends FormRequest 'id' => 'required|exists:users,id', 'email' => 'email|required', 'password' => 'confirmed|secure_password', - 'blocked_code' => 'between:0,30|nullable', - 'blocked' => 'between:0,1|numeric', - 'is_owner' => 'between:0,1|numeric', + 'blocked_code' => 'min:0|max:32|nullable', + 'blocked' => 'min:0|max:1|numeric', + 'is_owner' => 'min:0|max:1|numeric', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Http/Requests/UserRegistrationRequest.php b/app/Http/Requests/UserRegistrationRequest.php index c8c68c35a7..026fd05a9d 100644 --- a/app/Http/Requests/UserRegistrationRequest.php +++ b/app/Http/Requests/UserRegistrationRequest.php @@ -25,11 +25,11 @@ namespace FireflyIII\Http\Requests; use FireflyIII\Support\Request\ChecksLogin; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Validator; /** * Class UserRegistrationRequest. - * - */ class UserRegistrationRequest extends FormRequest { @@ -37,8 +37,6 @@ class UserRegistrationRequest extends FormRequest /** * Verify the request. - * - * @return bool */ public function authorize(): bool { @@ -48,8 +46,6 @@ class UserRegistrationRequest extends FormRequest /** * Rules for this request. - * - * @return array */ public function rules(): array { @@ -59,4 +55,11 @@ class UserRegistrationRequest extends FormRequest 'password' => 'confirmed|secure_password', ]; } + + public function withValidator(Validator $validator): void + { + if ($validator->fails()) { + Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); + } + } } diff --git a/app/Jobs/CreateAutoBudgetLimits.php b/app/Jobs/CreateAutoBudgetLimits.php index 9c86241ea2..ce0c15e173 100644 --- a/app/Jobs/CreateAutoBudgetLimits.php +++ b/app/Jobs/CreateAutoBudgetLimits.php @@ -36,7 +36,6 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class CreateAutoBudgetLimits @@ -52,17 +51,14 @@ class CreateAutoBudgetLimits implements ShouldQueue /** * Create a new job instance. - * - * - * @param Carbon|null $date */ public function __construct(?Carbon $date) { if (null !== $date) { - $newDate = clone $date; + $newDate = clone $date; $newDate->startOfDay(); $this->date = $newDate; - Log::debug(sprintf('Created new CreateAutoBudgetLimits("%s")', $this->date->format('Y-m-d'))); + app('log')->debug(sprintf('Created new CreateAutoBudgetLimits("%s")', $this->date->format('Y-m-d'))); } } @@ -73,34 +69,32 @@ class CreateAutoBudgetLimits implements ShouldQueue */ public function handle(): void { - Log::debug(sprintf('Now at start of CreateAutoBudgetLimits() job for %s.', $this->date->format('D d M Y'))); + app('log')->debug(sprintf('Now at start of CreateAutoBudgetLimits() job for %s.', $this->date->format('D d M Y'))); $autoBudgets = AutoBudget::get(); - Log::debug(sprintf('Found %d auto budgets.', $autoBudgets->count())); + app('log')->debug(sprintf('Found %d auto budgets.', $autoBudgets->count())); foreach ($autoBudgets as $autoBudget) { $this->handleAutoBudget($autoBudget); } } /** - * @param AutoBudget $autoBudget - * * @throws FireflyException */ private function handleAutoBudget(AutoBudget $autoBudget): void { if (null === $autoBudget->budget) { - Log::info(sprintf('Auto budget #%d is associated with a deleted budget.', $autoBudget->id)); + app('log')->info(sprintf('Auto budget #%d is associated with a deleted budget.', $autoBudget->id)); $autoBudget->delete(); return; } if (false === $autoBudget->budget->active) { - Log::info(sprintf('Auto budget #%d is associated with an inactive budget.', $autoBudget->id)); + app('log')->info(sprintf('Auto budget #%d is associated with an inactive budget.', $autoBudget->id)); return; } if (!$this->isMagicDay($autoBudget)) { - Log::info( + app('log')->info( sprintf( 'Today (%s) is not a magic day for %s auto-budget #%d (part of budget #%d "%s")', $this->date->format('Y-m-d'), @@ -110,11 +104,11 @@ class CreateAutoBudgetLimits implements ShouldQueue $autoBudget->budget->name ) ); - Log::debug(sprintf('Done with auto budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('Done with auto budget #%d', $autoBudget->id)); return; } - Log::info( + app('log')->info( sprintf( 'Today (%s) is a magic day for %s auto-budget #%d (part of budget #%d "%s")', $this->date->format('Y-m-d'), @@ -126,8 +120,8 @@ class CreateAutoBudgetLimits implements ShouldQueue ); // get date range for budget limit, based on range in auto-budget - $start = app('navigation')->startOfPeriod($this->date, $autoBudget->period); - $end = app('navigation')->endOfPeriod($start, $autoBudget->period); + $start = app('navigation')->startOfPeriod($this->date, $autoBudget->period); + $end = app('navigation')->endOfPeriod($start, $autoBudget->period); // find budget limit: $budgetLimit = $this->findBudgetLimit($autoBudget->budget, $start, $end); @@ -136,7 +130,7 @@ class CreateAutoBudgetLimits implements ShouldQueue // that's easy: create one. // do nothing else. $this->createBudgetLimit($autoBudget, $start, $end); - Log::debug(sprintf('Done with auto budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('Done with auto budget #%d', $autoBudget->id)); return; } @@ -144,24 +138,21 @@ class CreateAutoBudgetLimits implements ShouldQueue if (null === $budgetLimit && AutoBudget::AUTO_BUDGET_ROLLOVER === (int)$autoBudget->auto_budget_type) { // budget limit exists already, $this->createRollover($autoBudget); - Log::debug(sprintf('Done with auto budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('Done with auto budget #%d', $autoBudget->id)); return; } if (null === $budgetLimit && AutoBudget::AUTO_BUDGET_ADJUSTED === (int)$autoBudget->auto_budget_type) { // budget limit exists already, $this->createAdjustedLimit($autoBudget); - Log::debug(sprintf('Done with auto budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('Done with auto budget #%d', $autoBudget->id)); return; } - Log::debug(sprintf('Done with auto budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('Done with auto budget #%d', $autoBudget->id)); } /** - * @param AutoBudget $autoBudget - * - * @return bool * @throws FireflyException */ private function isMagicDay(AutoBudget $autoBudget): bool @@ -195,19 +186,13 @@ class CreateAutoBudgetLimits implements ShouldQueue return '01-01' === $value; } + throw new FireflyException(sprintf('isMagicDay() can\'t handle period "%s"', $autoBudget->period)); } - /** - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * - * @return BudgetLimit|null - */ private function findBudgetLimit(Budget $budget, Carbon $start, Carbon $end): ?BudgetLimit { - Log::debug( + app('log')->debug( sprintf( 'Going to find a budget limit for budget #%d ("%s") between %s and %s', $budget->id, @@ -218,52 +203,45 @@ class CreateAutoBudgetLimits implements ShouldQueue ); return $budget->budgetlimits() - ->where('start_date', $start->format('Y-m-d')) - ->where('end_date', $end->format('Y-m-d'))->first(); + ->where('start_date', $start->format('Y-m-d')) + ->where('end_date', $end->format('Y-m-d'))->first() + ; } - /** - * @param AutoBudget $autoBudget - * @param Carbon $start - * @param Carbon $end - * @param string|null $amount - */ - private function createBudgetLimit(AutoBudget $autoBudget, Carbon $start, Carbon $end, ?string $amount = null) + private function createBudgetLimit(AutoBudget $autoBudget, Carbon $start, Carbon $end, ?string $amount = null): void { - Log::debug(sprintf('No budget limit exist. Must create one for auto-budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('No budget limit exist. Must create one for auto-budget #%d', $autoBudget->id)); if (null !== $amount) { - Log::debug(sprintf('Amount is overruled and will be set to %s', $amount)); + app('log')->debug(sprintf('Amount is overruled and will be set to %s', $amount)); } - $budgetLimit = new BudgetLimit(); + $budgetLimit = new BudgetLimit(); $budgetLimit->budget()->associate($autoBudget->budget); $budgetLimit->transactionCurrency()->associate($autoBudget->transactionCurrency); $budgetLimit->start_date = $start; $budgetLimit->end_date = $end; $budgetLimit->amount = $amount ?? $autoBudget->amount; $budgetLimit->period = $autoBudget->period; - $budgetLimit->generated = true; + $budgetLimit->generated = 1; $budgetLimit->save(); - Log::debug(sprintf('Created budget limit #%d.', $budgetLimit->id)); + app('log')->debug(sprintf('Created budget limit #%d.', $budgetLimit->id)); } /** - * @param AutoBudget $autoBudget - * * @throws FireflyException */ private function createRollover(AutoBudget $autoBudget): void { - Log::debug(sprintf('Will now manage rollover for auto budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('Will now manage rollover for auto budget #%d', $autoBudget->id)); // current period: - $start = app('navigation')->startOfPeriod($this->date, $autoBudget->period); - $end = app('navigation')->endOfPeriod($start, $autoBudget->period); + $start = app('navigation')->startOfPeriod($this->date, $autoBudget->period); + $end = app('navigation')->endOfPeriod($start, $autoBudget->period); // which means previous period: $previousStart = app('navigation')->subtractPeriod($start, $autoBudget->period); $previousEnd = app('navigation')->endOfPeriod($previousStart, $autoBudget->period); - Log::debug( + app('log')->debug( sprintf( 'Current period is %s-%s, so previous period is %s-%s', $start->format('Y-m-d'), @@ -274,61 +252,56 @@ class CreateAutoBudgetLimits implements ShouldQueue ); // has budget limit in previous period? - $budgetLimit = $this->findBudgetLimit($autoBudget->budget, $previousStart, $previousEnd); + $budgetLimit = $this->findBudgetLimit($autoBudget->budget, $previousStart, $previousEnd); if (null === $budgetLimit) { - Log::debug('No budget limit exists in previous period, so create one.'); + app('log')->debug('No budget limit exists in previous period, so create one.'); // if not, create it and we're done. $this->createBudgetLimit($autoBudget, $start, $end); - Log::debug(sprintf('Done with auto budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('Done with auto budget #%d', $autoBudget->id)); return; } - Log::debug('Budget limit exists for previous period.'); + app('log')->debug('Budget limit exists for previous period.'); // if has one, calculate expenses and use that as a base. - $repository = app(OperationsRepositoryInterface::class); + $repository = app(OperationsRepositoryInterface::class); $repository->setUser($autoBudget->budget->user); - $spent = $repository->sumExpenses($previousStart, $previousEnd, null, new Collection([$autoBudget->budget]), $autoBudget->transactionCurrency); - $currencyId = (int)$autoBudget->transaction_currency_id; - $spentAmount = $spent[$currencyId]['sum'] ?? '0'; - Log::debug(sprintf('Spent in previous budget period (%s-%s) is %s', $previousStart->format('Y-m-d'), $previousEnd->format('Y-m-d'), $spentAmount)); + $spent = $repository->sumExpenses($previousStart, $previousEnd, null, new Collection([$autoBudget->budget]), $autoBudget->transactionCurrency); + $currencyId = $autoBudget->transaction_currency_id; + $spentAmount = $spent[$currencyId]['sum'] ?? '0'; + app('log')->debug(sprintf('Spent in previous budget period (%s-%s) is %s', $previousStart->format('Y-m-d'), $previousEnd->format('Y-m-d'), $spentAmount)); // if you spent more in previous budget period, than whatever you had previous budget period, the amount resets // previous budget limit + spent - $budgetLeft = bcadd($budgetLimit->amount, $spentAmount); - $totalAmount = $autoBudget->amount; - Log::debug(sprintf('Total amount left for previous budget period is %s', $budgetLeft)); + $budgetLeft = bcadd($budgetLimit->amount, $spentAmount); + $totalAmount = $autoBudget->amount; + app('log')->debug(sprintf('Total amount left for previous budget period is %s', $budgetLeft)); if (-1 !== bccomp('0', $budgetLeft)) { - Log::info(sprintf('The amount left is negative, so it will be reset to %s.', $totalAmount)); + app('log')->info(sprintf('The amount left is negative, so it will be reset to %s.', $totalAmount)); } if (1 !== bccomp('0', $budgetLeft)) { $totalAmount = bcadd($budgetLeft, $totalAmount); - Log::info(sprintf('The amount left is positive, so the new amount will be %s.', $totalAmount)); + app('log')->info(sprintf('The amount left is positive, so the new amount will be %s.', $totalAmount)); } // create budget limit: $this->createBudgetLimit($autoBudget, $start, $end, $totalAmount); - Log::debug(sprintf('Done with auto budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('Done with auto budget #%d', $autoBudget->id)); } - /** - * @param AutoBudget $autoBudget - * - * @return void - */ private function createAdjustedLimit(AutoBudget $autoBudget): void { - Log::debug(sprintf('Will now manage rollover for auto budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('Will now manage rollover for auto budget #%d', $autoBudget->id)); // current period: - $start = app('navigation')->startOfPeriod($this->date, $autoBudget->period); - $end = app('navigation')->endOfPeriod($start, $autoBudget->period); + $start = app('navigation')->startOfPeriod($this->date, $autoBudget->period); + $end = app('navigation')->endOfPeriod($start, $autoBudget->period); // which means previous period: - $previousStart = app('navigation')->subtractPeriod($start, $autoBudget->period); - $previousEnd = app('navigation')->endOfPeriod($previousStart, $autoBudget->period); + $previousStart = app('navigation')->subtractPeriod($start, $autoBudget->period); + $previousEnd = app('navigation')->endOfPeriod($previousStart, $autoBudget->period); - Log::debug( + app('log')->debug( sprintf( 'Current period is %s-%s, so previous period is %s-%s', $start->format('Y-m-d'), @@ -339,56 +312,53 @@ class CreateAutoBudgetLimits implements ShouldQueue ); // has budget limit in previous period? - $budgetLimit = $this->findBudgetLimit($autoBudget->budget, $previousStart, $previousEnd); + $budgetLimit = $this->findBudgetLimit($autoBudget->budget, $previousStart, $previousEnd); if (null === $budgetLimit) { - Log::debug('No budget limit exists in previous period, so create one.'); + app('log')->debug('No budget limit exists in previous period, so create one.'); // if not, create standard amount, and we're done. $this->createBudgetLimit($autoBudget, $start, $end); + return; } - Log::debug('Budget limit exists for previous period.'); + app('log')->debug('Budget limit exists for previous period.'); // if has one, calculate expenses and use that as a base. - $repository = app(OperationsRepositoryInterface::class); + $repository = app(OperationsRepositoryInterface::class); $repository->setUser($autoBudget->budget->user); - $spent = $repository->sumExpenses($previousStart, $previousEnd, null, new Collection([$autoBudget->budget]), $autoBudget->transactionCurrency); - $currencyId = (int)$autoBudget->transaction_currency_id; - $spentAmount = $spent[$currencyId]['sum'] ?? '0'; - Log::debug(sprintf('Spent in previous budget period (%s-%s) is %s', $previousStart->format('Y-m-d'), $previousEnd->format('Y-m-d'), $spentAmount)); + $spent = $repository->sumExpenses($previousStart, $previousEnd, null, new Collection([$autoBudget->budget]), $autoBudget->transactionCurrency); + $currencyId = $autoBudget->transaction_currency_id; + $spentAmount = $spent[$currencyId]['sum'] ?? '0'; + app('log')->debug(sprintf('Spent in previous budget period (%s-%s) is %s', $previousStart->format('Y-m-d'), $previousEnd->format('Y-m-d'), $spentAmount)); // what you spent in previous period PLUS the amount for the current period, // if that is more than zero, that's the amount that will be set. $budgetAvailable = bcadd(bcadd($budgetLimit->amount, $autoBudget->amount), $spentAmount); $totalAmount = $autoBudget->amount; - Log::debug(sprintf('Total amount available for current budget period is %s', $budgetAvailable)); - + app('log')->debug(sprintf('Total amount available for current budget period is %s', $budgetAvailable)); if (-1 !== bccomp($budgetAvailable, $totalAmount)) { - Log::info(sprintf('There is no overspending, no need to adjust. Budget limit amount will be %s.', $budgetAvailable)); + app('log')->info(sprintf('There is no overspending, no need to adjust. Budget limit amount will be %s.', $budgetAvailable)); // create budget limit: $this->createBudgetLimit($autoBudget, $start, $end, $budgetAvailable); } if (1 !== bccomp($budgetAvailable, $totalAmount) && 1 === bccomp($budgetAvailable, '0')) { - Log::info(sprintf('There was overspending, so the new amount will be %s.', $budgetAvailable)); + app('log')->info(sprintf('There was overspending, so the new amount will be %s.', $budgetAvailable)); // create budget limit: $this->createBudgetLimit($autoBudget, $start, $end, $budgetAvailable); } if (1 !== bccomp($budgetAvailable, $totalAmount) && -1 === bccomp($budgetAvailable, '0')) { - Log::info('There was overspending, but so much even this period cant fix that. Reset it to 1.'); + app('log')->info('There was overspending, but so much even this period cant fix that. Reset it to 1.'); // create budget limit: $this->createBudgetLimit($autoBudget, $start, $end, '1'); } - Log::debug(sprintf('Done with auto budget #%d', $autoBudget->id)); + app('log')->debug(sprintf('Done with auto budget #%d', $autoBudget->id)); } - /** - * @param Carbon $date - */ public function setDate(Carbon $date): void { - $newDate = clone $date; + $newDate = clone $date; $newDate->startOfDay(); $this->date = $newDate; } diff --git a/app/Jobs/CreateRecurringTransactions.php b/app/Jobs/CreateRecurringTransactions.php index ec00f99e90..4aa0520d94 100644 --- a/app/Jobs/CreateRecurringTransactions.php +++ b/app/Jobs/CreateRecurringTransactions.php @@ -42,11 +42,9 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class CreateRecurringTransactions. - * */ class CreateRecurringTransactions implements ShouldQueue { @@ -68,18 +66,15 @@ class CreateRecurringTransactions implements ShouldQueue /** * Create a new job instance. - * - * - * @param Carbon|null $date */ public function __construct(?Carbon $date) { - $newDate = new Carbon(); + $newDate = new Carbon(); $newDate->startOfDay(); - $this->date = $newDate; + $this->date = $newDate; if (null !== $date) { - $newDate = clone $date; + $newDate = clone $date; $newDate->startOfDay(); $this->date = $newDate; } @@ -93,12 +88,9 @@ class CreateRecurringTransactions implements ShouldQueue $this->recurrences = new Collection(); $this->groups = new Collection(); - Log::debug(sprintf('Created new CreateRecurringTransactions("%s")', $this->date->format('Y-m-d'))); + app('log')->debug(sprintf('Created new CreateRecurringTransactions("%s")', $this->date->format('Y-m-d'))); } - /** - * @return Collection - */ public function getGroups(): Collection { return $this->groups; @@ -109,25 +101,26 @@ class CreateRecurringTransactions implements ShouldQueue */ public function handle(): void { - Log::debug(sprintf('Now at start of CreateRecurringTransactions() job for %s.', $this->date->format('D d M Y'))); + app('log')->debug(sprintf('Now at start of CreateRecurringTransactions() job for %s.', $this->date->format('D d M Y'))); // only use recurrences from database if there is no collection submitted. if (0 !== count($this->recurrences)) { - Log::debug('Using predetermined set of recurrences.'); + app('log')->debug('Using predetermined set of recurrences.'); } if (0 === count($this->recurrences)) { - Log::debug('Grab all recurrences from the database.'); + app('log')->debug('Grab all recurrences from the database.'); $this->recurrences = $this->repository->getAll(); } $result = []; $count = $this->recurrences->count(); $this->submitted = $count; - Log::debug(sprintf('Count of collection is %d', $count)); + app('log')->debug(sprintf('Count of collection is %d', $count)); // filter recurrences: - $filtered = $this->filterRecurrences($this->recurrences); - Log::debug(sprintf('Left after filtering is %d', $filtered->count())); + $filtered = $this->filterRecurrences($this->recurrences); + app('log')->debug(sprintf('Left after filtering is %d', $filtered->count())); + /** @var Recurrence $recurrence */ foreach ($filtered as $recurrence) { if (!array_key_exists($recurrence->user_id, $result)) { @@ -140,30 +133,25 @@ class CreateRecurringTransactions implements ShouldQueue // clear cache for user app('preferences')->setForUser($recurrence->user, 'lastActivity', microtime()); - Log::debug(sprintf('Now at recurrence #%d of user #%d', $recurrence->id, $recurrence->user_id)); - $createdReps = $this->handleRepetitions($recurrence); - Log::debug(sprintf('Done with recurrence #%d', $recurrence->id)); + app('log')->debug(sprintf('Now at recurrence #%d of user #%d', $recurrence->id, $recurrence->user_id)); + $createdReps = $this->handleRepetitions($recurrence); + app('log')->debug(sprintf('Done with recurrence #%d', $recurrence->id)); $result[$recurrence->user_id] = $result[$recurrence->user_id]->merge($createdReps); - $this->executed++; + ++$this->executed; } - Log::debug('Now running report thing.'); + app('log')->debug('Now running report thing.'); // will now send email to users. foreach ($result as $userId => $journals) { event(new RequestedReportOnJournals($userId, $journals)); } - Log::debug('Done with handle()'); + app('log')->debug('Done with handle()'); // clear cache: app('preferences')->mark(); } - /** - * @param Collection $recurrences - * - * @return Collection - */ private function filterRecurrences(Collection $recurrences): Collection { return $recurrences->filter( @@ -175,18 +163,13 @@ class CreateRecurringTransactions implements ShouldQueue /** * Is the info in the recurrence valid? - * - * @param Recurrence $recurrence - * - * @return bool - * */ private function validRecurrence(Recurrence $recurrence): bool { - Log::debug(sprintf('Now filtering recurrence #%d, owned by user #%d', $recurrence->id, $recurrence->user_id)); + app('log')->debug(sprintf('Now filtering recurrence #%d, owned by user #%d', $recurrence->id, $recurrence->user_id)); // is not active. if (!$this->active($recurrence)) { - Log::info(sprintf('Recurrence #%d is not active. Skipped.', $recurrence->id)); + app('log')->info(sprintf('Recurrence #%d is not active. Skipped.', $recurrence->id)); return false; } @@ -194,14 +177,14 @@ class CreateRecurringTransactions implements ShouldQueue // has repeated X times. $journalCount = $this->repository->getJournalCount($recurrence); if (0 !== $recurrence->repetitions && $journalCount >= $recurrence->repetitions && false === $this->force) { - Log::info(sprintf('Recurrence #%d has run %d times, so will run no longer.', $recurrence->id, $recurrence->repetitions)); + app('log')->info(sprintf('Recurrence #%d has run %d times, so will run no longer.', $recurrence->id, $recurrence->repetitions)); return false; } // is no longer running if ($this->repeatUntilHasPassed($recurrence)) { - Log::info( + app('log')->info( sprintf( 'Recurrence #%d was set to run until %s, and today\'s date is %s. Skipped.', $recurrence->id, @@ -215,7 +198,7 @@ class CreateRecurringTransactions implements ShouldQueue // first_date is in the future if ($this->hasNotStartedYet($recurrence)) { - Log::info( + app('log')->info( sprintf( 'Recurrence #%d is set to run on %s, and today\'s date is %s. Skipped.', $recurrence->id, @@ -229,21 +212,17 @@ class CreateRecurringTransactions implements ShouldQueue // already fired today (with success): if (false === $this->force && $this->hasFiredToday($recurrence)) { - Log::info(sprintf('Recurrence #%d has already fired today. Skipped.', $recurrence->id)); + app('log')->info(sprintf('Recurrence #%d has already fired today. Skipped.', $recurrence->id)); return false; } - Log::debug('Will be included.'); + app('log')->debug('Will be included.'); return true; } /** * Return recurring transaction is active. - * - * @param Recurrence $recurrence - * - * @return bool */ private function active(Recurrence $recurrence): bool { @@ -252,10 +231,6 @@ class CreateRecurringTransactions implements ShouldQueue /** * Return true if the $repeat_until date is in the past. - * - * @param Recurrence $recurrence - * - * @return bool */ private function repeatUntilHasPassed(Recurrence $recurrence): bool { @@ -265,25 +240,17 @@ class CreateRecurringTransactions implements ShouldQueue /** * Has the recurrence started yet? - * - * @param Recurrence $recurrence - * - * @return bool */ private function hasNotStartedYet(Recurrence $recurrence): bool { $startDate = $this->getStartDate($recurrence); - Log::debug(sprintf('Start date is %s', $startDate->format('Y-m-d'))); + app('log')->debug(sprintf('Start date is %s', $startDate->format('Y-m-d'))); return $startDate->gt($this->date); } /** * Get the start date of a recurrence. - * - * @param Recurrence $recurrence - * - * @return Carbon */ private function getStartDate(Recurrence $recurrence): Carbon { @@ -297,10 +264,6 @@ class CreateRecurringTransactions implements ShouldQueue /** * Has the recurrence fired today. - * - * @param Recurrence $recurrence - * - * @return bool */ private function hasFiredToday(Recurrence $recurrence): bool { @@ -311,18 +274,16 @@ class CreateRecurringTransactions implements ShouldQueue * Separate method that will loop all repetitions and do something with it. Will return * all created transaction journals. * - * @param Recurrence $recurrence - * - * @return Collection * @throws DuplicateTransactionException * @throws FireflyException */ private function handleRepetitions(Recurrence $recurrence): Collection { $collection = new Collection(); + /** @var RecurrenceRepetition $repetition */ foreach ($recurrence->recurrenceRepetitions as $repetition) { - Log::debug( + app('log')->debug( sprintf( 'Now repeating %s with value "%s", skips every %d time(s)', $repetition->repetition_type, @@ -335,31 +296,27 @@ class CreateRecurringTransactions implements ShouldQueue // add two days to $this->date, so we always include the weekend. $includeWeekend = clone $this->date; $includeWeekend->addDays(2); - $occurrences = $this->repository->getOccurrencesInRange($repetition, $recurrence->first_date, $includeWeekend); + $occurrences = $this->repository->getOccurrencesInRange($repetition, $recurrence->first_date, $includeWeekend); unset($includeWeekend); - $result = $this->handleOccurrences($recurrence, $repetition, $occurrences); - $collection = $collection->merge($result); + $result = $this->handleOccurrences($recurrence, $repetition, $occurrences); + $collection = $collection->merge($result); } return $collection; } /** - * Check if the occurences should be executed. + * Check if the occurrences should be executed. * - * @param Recurrence $recurrence - * @param RecurrenceRepetition $repetition - * @param array $occurrences - * - * @return Collection * @throws DuplicateTransactionException * @throws FireflyException */ private function handleOccurrences(Recurrence $recurrence, RecurrenceRepetition $repetition, array $occurrences): Collection { $collection = new Collection(); + /** @var Carbon $date */ foreach ($occurrences as $date) { $result = $this->handleOccurrence($recurrence, $repetition, $date); @@ -372,11 +329,6 @@ class CreateRecurringTransactions implements ShouldQueue } /** - * @param Recurrence $recurrence - * @param RecurrenceRepetition $repetition - * @param Carbon $date - * - * @return TransactionGroup|null * @throws DuplicateTransactionException * @throws FireflyException */ @@ -386,52 +338,50 @@ class CreateRecurringTransactions implements ShouldQueue if ($date->ne($this->date)) { return null; } - Log::debug(sprintf('%s IS today (%s)', $date->format('Y-m-d'), $this->date->format('Y-m-d'))); + app('log')->debug(sprintf('%s IS today (%s)', $date->format('Y-m-d'), $this->date->format('Y-m-d'))); // count created journals on THIS day. - $journalCount = $this->repository->getJournalCount($recurrence, $date, $date); + $journalCount = $this->repository->getJournalCount($recurrence, $date, $date); if ($journalCount > 0 && false === $this->force) { - Log::info(sprintf('Already created %d journal(s) for date %s', $journalCount, $date->format('Y-m-d'))); + app('log')->info(sprintf('Already created %d journal(s) for date %s', $journalCount, $date->format('Y-m-d'))); return null; } if ($this->repository->createdPreviously($recurrence, $date) && false === $this->force) { - Log::info('There is a transaction already made for this date, so will not be created now'); + app('log')->info('There is a transaction already made for this date, so will not be created now'); return null; } - if ($journalCount > 0 && true === $this->force) { app('log')->warning(sprintf('Already created %d groups for date %s but FORCED to continue.', $journalCount, $date->format('Y-m-d'))); } // create transaction array and send to factory. - $groupTitle = null; - $count = $recurrence->recurrenceTransactions->count(); + $groupTitle = null; + $count = $recurrence->recurrenceTransactions->count(); if ($count > 1) { /** @var RecurrenceTransaction $first */ - $first = $recurrence->recurrenceTransactions()->first(); $groupTitle = $first->description; } if (0 === $count) { - Log::error('No transactions to be created in this recurrence. Cannot continue.'); + app('log')->error('No transactions to be created in this recurrence. Cannot continue.'); return null; } - $array = [ + $array = [ 'user' => $recurrence->user_id, 'group_title' => $groupTitle, 'transactions' => $this->getTransactionData($recurrence, $repetition, $date), ]; /** @var TransactionGroup $group */ - $group = $this->groupRepository->store($array); - $this->created++; - Log::info(sprintf('Created new transaction group #%d', $group->id)); + $group = $this->groupRepository->store($array); + ++$this->created; + app('log')->info(sprintf('Created new transaction group #%d', $group->id)); // trigger event: event(new StoredTransactionGroup($group, $recurrence->apply_rules, true)); @@ -446,13 +396,6 @@ class CreateRecurringTransactions implements ShouldQueue /** * Get transaction information from a recurring transaction. - * - * @param Recurrence $recurrence - * @param RecurrenceRepetition $repetition - * @param Carbon $date - * - * @return array - * */ private function getTransactionData(Recurrence $recurrence, RecurrenceRepetition $repetition, Carbon $date): array { @@ -460,16 +403,18 @@ class CreateRecurringTransactions implements ShouldQueue $total = $this->repository->totalTransactions($recurrence, $repetition); $count = $this->repository->getJournalCount($recurrence) + 1; $transactions = $recurrence->recurrenceTransactions()->get(); + /** @var RecurrenceTransaction $first */ - $first = $transactions->first(); - $return = []; + $first = $transactions->first(); + $return = []; + /** @var RecurrenceTransaction $transaction */ foreach ($transactions as $index => $transaction) { $single = [ 'type' => null === $first->transactionType ? strtolower($recurrence->transactionType->type) : strtolower($first->transactionType->type), 'date' => $date, 'user' => $recurrence->user_id, - 'currency_id' => (int)$transaction->transaction_currency_id, + 'currency_id' => $transaction->transaction_currency_id, 'currency_code' => null, 'description' => $first->description, 'amount' => $transaction->amount, @@ -486,7 +431,7 @@ class CreateRecurringTransactions implements ShouldQueue 'foreign_amount' => $transaction->foreign_amount, 'reconciled' => false, 'identifier' => $index, - 'recurrence_id' => (int)$recurrence->id, + 'recurrence_id' => $recurrence->id, 'order' => $index, 'notes' => (string)trans('firefly.created_from_recurrence', ['id' => $recurrence->id, 'title' => $recurrence->title]), 'tags' => $this->repository->getTags($transaction), @@ -504,27 +449,18 @@ class CreateRecurringTransactions implements ShouldQueue return $return; } - /** - * @param Carbon $date - */ public function setDate(Carbon $date): void { - $newDate = clone $date; + $newDate = clone $date; $newDate->startOfDay(); $this->date = $newDate; } - /** - * @param bool $force - */ public function setForce(bool $force): void { $this->force = $force; } - /** - * @param Collection $recurrences - */ public function setRecurrences(Collection $recurrences): void { $this->recurrences = $recurrences; diff --git a/app/Jobs/DownloadExchangeRates.php b/app/Jobs/DownloadExchangeRates.php index 79c944537b..723d85b8a4 100644 --- a/app/Jobs/DownloadExchangeRates.php +++ b/app/Jobs/DownloadExchangeRates.php @@ -37,7 +37,6 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class DownloadExchangeRates @@ -56,9 +55,6 @@ class DownloadExchangeRates implements ShouldQueue /** * Create a new job instance. - * - * - * @param Carbon|null $date */ public function __construct(?Carbon $date) { @@ -67,14 +63,14 @@ class DownloadExchangeRates implements ShouldQueue // get all users: /** @var UserRepositoryInterface $userRepository */ - $userRepository = app(UserRepositoryInterface::class); - $this->users = $userRepository->all(); + $userRepository = app(UserRepositoryInterface::class); + $this->users = $userRepository->all(); if (null !== $date) { - $newDate = clone $date; + $newDate = clone $date; $newDate->startOfDay(); $this->date = $newDate; - Log::debug(sprintf('Created new DownloadExchangeRates("%s")', $this->date->format('Y-m-d'))); + app('log')->debug(sprintf('Created new DownloadExchangeRates("%s")', $this->date->format('Y-m-d'))); } } @@ -83,8 +79,8 @@ class DownloadExchangeRates implements ShouldQueue */ public function handle(): void { - Log::debug('Now in handle()'); - $currencies = $this->repository->get(); + app('log')->debug('Now in handle()'); + $currencies = $this->repository->getCompleteSet(); /** @var TransactionCurrency $currency */ foreach ($currencies as $currency) { @@ -93,114 +89,99 @@ class DownloadExchangeRates implements ShouldQueue } /** - * @param TransactionCurrency $currency - * - * @return void * @throws GuzzleException */ private function downloadRates(TransactionCurrency $currency): void { - Log::debug(sprintf('Now downloading new exchange rates for currency %s.', $currency->code)); - $base = sprintf('%s/%s/%s', (string)config('cer.url'), $this->date->year, $this->date->isoWeek); - $client = new Client(); - $url = sprintf('%s/%s.json', $base, $currency->code); + app('log')->debug(sprintf('Now downloading new exchange rates for currency %s.', $currency->code)); + $base = sprintf('%s/%s/%s', (string)config('cer.url'), $this->date->year, $this->date->isoWeek); + $client = new Client(); + $url = sprintf('%s/%s.json', $base, $currency->code); + try { $res = $client->get($url); } catch (RequestException $e) { app('log')->warning(sprintf('Trying to grab "%s" resulted in error "%d".', $url, $e->getMessage())); + return; } $statusCode = $res->getStatusCode(); if (200 !== $statusCode) { app('log')->warning(sprintf('Trying to grab "%s" resulted in status code %d.', $url, $statusCode)); + return; } - $body = (string)$res->getBody(); - $json = json_decode($body, true); + $body = (string)$res->getBody(); + $json = json_decode($body, true); if (false === $json || null === $json) { app('log')->warning(sprintf('Trying to grab "%s" resulted in bad JSON.', $url)); + + return; + } + $date = Carbon::createFromFormat('Y-m-d', $json['date'], config('app.timezone')); + if (false === $date) { return; } - $date = Carbon::createFromFormat('Y-m-d', $json['date'], config('app.timezone')); $this->saveRates($currency, $date, $json['rates']); } - /** - * @param TransactionCurrency $currency - * @param Carbon $date - * @param array $rates - * - * @return void - */ private function saveRates(TransactionCurrency $currency, Carbon $date, array $rates): void { foreach ($rates as $code => $rate) { $to = $this->getCurrency($code); if (null === $to) { - Log::debug(sprintf('Currency %s is not in use, do not save rate.', $code)); + app('log')->debug(sprintf('Currency %s is not in use, do not save rate.', $code)); + continue; } - Log::debug(sprintf('Currency %s is in use.', $code)); + app('log')->debug(sprintf('Currency %s is in use.', $code)); $this->saveRate($currency, $to, $date, $rate); } } - /** - * @param string $code - * - * @return TransactionCurrency|null - */ private function getCurrency(string $code): ?TransactionCurrency { // if we have it already, don't bother searching for it again. if (array_key_exists($code, $this->active)) { - Log::debug(sprintf('Already know what the result is of searching for %s', $code)); + app('log')->debug(sprintf('Already know what the result is of searching for %s', $code)); + return $this->active[$code]; } // find it in the database. - $currency = $this->repository->findByCode($code); + $currency = $this->repository->findByCode($code); if (null === $currency) { - Log::debug(sprintf('Did not find currency %s.', $code)); + app('log')->debug(sprintf('Did not find currency %s.', $code)); $this->active[$code] = null; + return null; } if (false === $currency->enabled) { - Log::debug(sprintf('Currency %s is not enabled.', $code)); + app('log')->debug(sprintf('Currency %s is not enabled.', $code)); $this->active[$code] = null; + return null; } - Log::debug(sprintf('Currency %s is enabled.', $code)); + app('log')->debug(sprintf('Currency %s is enabled.', $code)); $this->active[$code] = $currency; return $currency; } - /** - * @param TransactionCurrency $from - * @param TransactionCurrency $to - * @param Carbon $date - * @param float $rate - * - * @return void - */ private function saveRate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date, float $rate): void { foreach ($this->users as $user) { $this->repository->setUser($user); $existing = $this->repository->getExchangeRate($from, $to, $date); if (null === $existing) { - Log::debug(sprintf('Saved rate from %s to %s for user #%d.', $from->code, $to->code, $user->id)); + app('log')->debug(sprintf('Saved rate from %s to %s for user #%d.', $from->code, $to->code, $user->id)); $this->repository->setExchangeRate($from, $to, $date, $rate); } } } - /** - * @param Carbon $date - */ public function setDate(Carbon $date): void { - $newDate = clone $date; + $newDate = clone $date; $newDate->startOfDay(); $this->date = $newDate; } diff --git a/app/Jobs/MailError.php b/app/Jobs/MailError.php index bb4b916b7d..c06a617d03 100644 --- a/app/Jobs/MailError.php +++ b/app/Jobs/MailError.php @@ -23,20 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Jobs; -use Exception; -use FireflyIII\Exceptions\FireflyException; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Message; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Log; -use Mail; use Symfony\Component\Mailer\Exception\TransportException; /** * Class MailError. - * - */ class MailError extends Job implements ShouldQueue { @@ -50,11 +44,6 @@ class MailError extends Job implements ShouldQueue /** * MailError constructor. - * - * @param array $userData - * @param string $destination - * @param string $ipAddress - * @param array $exceptionData */ public function __construct(array $userData, string $destination, string $ipAddress, array $exceptionData) { @@ -63,17 +52,15 @@ class MailError extends Job implements ShouldQueue $this->ipAddress = $ipAddress; $this->exception = $exceptionData; $debug = $exceptionData; - unset($debug['stackTrace']); - unset($debug['headers']); - Log::error(sprintf('Exception is: %s', json_encode($debug))); + unset($debug['stackTrace'], $debug['headers']); + + app('log')->error(sprintf('Exception is: %s', json_encode($debug))); } /** * Execute the job. - * - * @throws FireflyException */ - public function handle() + public function handle(): void { $email = (string)config('firefly.site_owner'); $args = $this->exception; @@ -81,29 +68,31 @@ class MailError extends Job implements ShouldQueue $args['user'] = $this->userData; $args['ip'] = $this->ipAddress; $args['token'] = config('firefly.ipinfo_token'); - if ($this->attempts() < 3 && strlen($email) > 0) { + if ($this->attempts() < 3 && '' !== $email) { try { - Mail::send( + \Mail::send( ['emails.error-html', 'emails.error-text'], $args, - function (Message $message) use ($email) { + static function (Message $message) use ($email): void { if ('mail@example.com' !== $email) { $message->to($email, $email)->subject((string)trans('email.error_subject')); } } ); - } catch (Exception | TransportException $e) { // intentional generic exception + } catch (\Exception|TransportException $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { - Log::warning('[Bcc] Could not email or log the error. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[Bcc] Could not email or log the error. Please validate your email settings, use the .env.example file as a guide.'); + return; } if (str_contains($message, 'RFC 2822')) { - Log::warning('[RFC] Could not email or log the error. Please validate your email settings, use the .env.example file as a guide.'); + app('log')->warning('[RFC] Could not email or log the error. Please validate your email settings, use the .env.example file as a guide.'); + return; } - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); } } } diff --git a/app/Jobs/SendWebhookMessage.php b/app/Jobs/SendWebhookMessage.php index 42dfdf5d46..b656b58df3 100644 --- a/app/Jobs/SendWebhookMessage.php +++ b/app/Jobs/SendWebhookMessage.php @@ -31,7 +31,6 @@ use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Log; /** * Class SendWebhookMessage @@ -47,8 +46,6 @@ class SendWebhookMessage implements ShouldQueue /** * Create a new job instance. - * - * @param WebhookMessage $message */ public function __construct(WebhookMessage $message) { @@ -57,12 +54,10 @@ class SendWebhookMessage implements ShouldQueue /** * Execute the job. - * - * @return void */ public function handle(): void { - Log::debug(sprintf('Now handling webhook message #%d', $this->message->id)); + app('log')->debug(sprintf('Now handling webhook message #%d', $this->message->id)); // send job! $sender = app(WebhookSenderInterface::class); $sender->setMessage($this->message); diff --git a/app/Jobs/WarnAboutBills.php b/app/Jobs/WarnAboutBills.php index 7438d9f760..e7f1915dfd 100644 --- a/app/Jobs/WarnAboutBills.php +++ b/app/Jobs/WarnAboutBills.php @@ -32,7 +32,6 @@ use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Log; /** * Class WarnAboutBills @@ -49,25 +48,22 @@ class WarnAboutBills implements ShouldQueue /** * Create a new job instance. - * - * - * @param Carbon|null $date */ public function __construct(?Carbon $date) { - $newDate = new Carbon(); + $newDate = new Carbon(); $newDate->startOfDay(); - $this->date = $newDate; + $this->date = $newDate; if (null !== $date) { - $newDate = clone $date; + $newDate = clone $date; $newDate->startOfDay(); $this->date = $newDate; } $this->force = false; - Log::debug(sprintf('Created new WarnAboutBills("%s")', $this->date->format('Y-m-d'))); + app('log')->debug(sprintf('Created new WarnAboutBills("%s")', $this->date->format('Y-m-d'))); } /** @@ -75,11 +71,12 @@ class WarnAboutBills implements ShouldQueue */ public function handle(): void { - Log::debug(sprintf('Now at start of WarnAboutBills() job for %s.', $this->date->format('D d M Y'))); + app('log')->debug(sprintf('Now at start of WarnAboutBills() job for %s.', $this->date->format('D d M Y'))); $bills = Bill::all(); + /** @var Bill $bill */ foreach ($bills as $bill) { - Log::debug(sprintf('Now checking bill #%d ("%s")', $bill->id, $bill->name)); + app('log')->debug(sprintf('Now checking bill #%d ("%s")', $bill->id, $bill->name)); if ($this->hasDateFields($bill)) { if ($this->needsWarning($bill, 'end_date')) { $this->sendWarning($bill, 'end_date'); @@ -89,89 +86,65 @@ class WarnAboutBills implements ShouldQueue } } } - Log::debug('Done with handle()'); + app('log')->debug('Done with handle()'); // clear cache: app('preferences')->mark(); } - /** - * @param Bill $bill - * - * @return bool - */ private function hasDateFields(Bill $bill): bool { if (false === $bill->active) { - Log::debug('Bill is not active.'); + app('log')->debug('Bill is not active.'); + return false; } if (null === $bill->end_date && null === $bill->extension_date) { - Log::debug('Bill has no date fields.'); + app('log')->debug('Bill has no date fields.'); + return false; } + return true; } - /** - * @param Bill $bill - * @param string $field - * - * @return bool - */ private function needsWarning(Bill $bill, string $field): bool { - if (null === $bill->$field) { + if (null === $bill->{$field}) { return false; } $diff = $this->getDiff($bill, $field); $list = config('firefly.bill_reminder_periods'); - Log::debug(sprintf('Difference in days for field "%s" ("%s") is %d day(s)', $field, $bill->$field->format('Y-m-d'), $diff)); + app('log')->debug(sprintf('Difference in days for field "%s" ("%s") is %d day(s)', $field, $bill->{$field}->format('Y-m-d'), $diff)); if (in_array($diff, $list, true)) { return true; } + return false; } - /** - * @param Bill $bill - * @param string $field - * - * @return int - */ private function getDiff(Bill $bill, string $field): int { $today = clone $this->date; - $carbon = clone $bill->$field; + $carbon = clone $bill->{$field}; + return $today->diffInDays($carbon, false); } - /** - * @param Bill $bill - * @param string $field - * - * @return void - */ private function sendWarning(Bill $bill, string $field): void { $diff = $this->getDiff($bill, $field); - Log::debug('Will now send warning!'); + app('log')->debug('Will now send warning!'); event(new WarnUserAboutBill($bill, $field, $diff)); } - /** - * @param Carbon $date - */ public function setDate(Carbon $date): void { - $newDate = clone $date; + $newDate = clone $date; $newDate->startOfDay(); $this->date = $newDate; } - /** - * @param bool $force - */ public function setForce(bool $force): void { $this->force = $force; diff --git a/app/Mail/AccessTokenCreatedMail.php b/app/Mail/AccessTokenCreatedMail.php index 185300fa13..e908864838 100644 --- a/app/Mail/AccessTokenCreatedMail.php +++ b/app/Mail/AccessTokenCreatedMail.php @@ -29,8 +29,6 @@ use Illuminate\Queue\SerializesModels; /** * Class AccessTokenCreatedMail - * - */ class AccessTokenCreatedMail extends Mailable { @@ -40,9 +38,7 @@ class AccessTokenCreatedMail extends Mailable /** * AccessTokenCreatedMail constructor. */ - public function __construct() - { - } + public function __construct() {} /** * Build the message. @@ -53,6 +49,7 @@ class AccessTokenCreatedMail extends Mailable { return $this ->markdown('emails.token-created') - ->subject((string)trans('email.access_token_created_subject')); + ->subject((string)trans('email.access_token_created_subject')) + ; } } diff --git a/app/Mail/AdminTestMail.php b/app/Mail/AdminTestMail.php index 502f015361..1971dce7dc 100644 --- a/app/Mail/AdminTestMail.php +++ b/app/Mail/AdminTestMail.php @@ -31,8 +31,6 @@ use Illuminate\Queue\SerializesModels; * Class AdminTestMail. * * Sends a test mail to administrators. - * - */ class AdminTestMail extends Mailable { @@ -44,9 +42,7 @@ class AdminTestMail extends Mailable /** * AdminTestMail constructor. */ - public function __construct() - { - } + public function __construct() {} /** * Build the message. @@ -57,6 +53,7 @@ class AdminTestMail extends Mailable { return $this ->markdown('emails.admin-test') - ->subject((string)trans('email.admin_test_subject')); + ->subject((string)trans('email.admin_test_subject')) + ; } } diff --git a/app/Mail/BillWarningMail.php b/app/Mail/BillWarningMail.php index e1811e9ebc..588772148f 100644 --- a/app/Mail/BillWarningMail.php +++ b/app/Mail/BillWarningMail.php @@ -43,10 +43,6 @@ class BillWarningMail extends Mailable /** * ConfirmEmailChangeMail constructor. - * - * @param Bill $bill - * @param string $field - * @param int $diff */ public function __construct(Bill $bill, string $field, int $diff) { @@ -69,6 +65,7 @@ class BillWarningMail extends Mailable return $this ->markdown('emails.bill-warning') - ->subject($subject); + ->subject($subject) + ; } } diff --git a/app/Mail/ConfirmEmailChangeMail.php b/app/Mail/ConfirmEmailChangeMail.php index 452ce6e4e7..d4346eff6c 100644 --- a/app/Mail/ConfirmEmailChangeMail.php +++ b/app/Mail/ConfirmEmailChangeMail.php @@ -31,8 +31,6 @@ use Illuminate\Queue\SerializesModels; * Class ConfirmEmailChangeMail * * Sends message to new address to confirm change. - * - */ class ConfirmEmailChangeMail extends Mailable { @@ -45,10 +43,6 @@ class ConfirmEmailChangeMail extends Mailable /** * ConfirmEmailChangeMail constructor. - * - * @param string $newEmail - * @param string $oldEmail - * @param string $url */ public function __construct(string $newEmail, string $oldEmail, string $url) { @@ -65,9 +59,10 @@ class ConfirmEmailChangeMail extends Mailable public function build(): self { return $this - //->view('emails.confirm-email-change-html') - //->text('emails.confirm-email-change-text') + // ->view('emails.confirm-email-change-html') + // ->text('emails.confirm-email-change-text') ->markdown('emails.confirm-email-change') - ->subject((string)trans('email.email_change_subject')); + ->subject((string)trans('email.email_change_subject')) + ; } } diff --git a/app/Mail/InvitationMail.php b/app/Mail/InvitationMail.php index faa1fa8582..151e7d423a 100644 --- a/app/Mail/InvitationMail.php +++ b/app/Mail/InvitationMail.php @@ -43,17 +43,13 @@ class InvitationMail extends Mailable /** * OAuthTokenCreatedMail constructor. - * - * @param string $invitee - * @param string $admin - * @param string $url */ public function __construct(string $invitee, string $admin, string $url) { $this->invitee = $invitee; $this->admin = $admin; $this->url = $url; - $this->host = parse_url($url, PHP_URL_HOST); + $this->host = (string)parse_url($url, PHP_URL_HOST); } /** @@ -65,6 +61,7 @@ class InvitationMail extends Mailable { return $this ->markdown('emails.invitation') - ->subject((string)trans('email.invite_user_subject')); + ->subject((string)trans('email.invite_user_subject')) + ; } } diff --git a/app/Mail/NewIPAddressWarningMail.php b/app/Mail/NewIPAddressWarningMail.php index bddb54d960..e8fdf5ea86 100644 --- a/app/Mail/NewIPAddressWarningMail.php +++ b/app/Mail/NewIPAddressWarningMail.php @@ -28,7 +28,6 @@ use FireflyIII\Exceptions\FireflyException; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Log; /** * Class NewIPAddressWarningMail @@ -44,8 +43,6 @@ class NewIPAddressWarningMail extends Mailable /** * OAuthTokenCreatedMail constructor. - * - * @param string $ipAddress */ public function __construct(string $ipAddress) { @@ -61,10 +58,11 @@ class NewIPAddressWarningMail extends Mailable { $this->time = now(config('app.timezone'))->isoFormat((string)trans('config.date_time_js')); $this->host = ''; + try { $hostName = app('steam')->getHostName($this->ipAddress); } catch (FireflyException $e) { - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); $hostName = $this->ipAddress; } if ($hostName !== $this->ipAddress) { @@ -73,6 +71,7 @@ class NewIPAddressWarningMail extends Mailable return $this ->markdown('emails.new-ip') - ->subject((string)trans('email.login_from_new_ip')); + ->subject((string)trans('email.login_from_new_ip')) + ; } } diff --git a/app/Mail/OAuthTokenCreatedMail.php b/app/Mail/OAuthTokenCreatedMail.php index 2c75fa3d36..9ccb95942d 100644 --- a/app/Mail/OAuthTokenCreatedMail.php +++ b/app/Mail/OAuthTokenCreatedMail.php @@ -30,8 +30,6 @@ use Laravel\Passport\Client; /** * Class OAuthTokenCreatedMail - * - */ class OAuthTokenCreatedMail extends Mailable { @@ -42,8 +40,6 @@ class OAuthTokenCreatedMail extends Mailable /** * OAuthTokenCreatedMail constructor. - * - * @param Client $client */ public function __construct(Client $client) { @@ -59,6 +55,7 @@ class OAuthTokenCreatedMail extends Mailable { return $this ->markdown('emails.oauth-client-created') - ->subject((string)trans('email.oauth_created_subject')); + ->subject((string)trans('email.oauth_created_subject')) + ; } } diff --git a/app/Mail/RegisteredUser.php b/app/Mail/RegisteredUser.php index d460047eed..8659c8e3f9 100644 --- a/app/Mail/RegisteredUser.php +++ b/app/Mail/RegisteredUser.php @@ -31,8 +31,6 @@ use Illuminate\Queue\SerializesModels; * Sends newly registered user an email message. * * Class RegisteredUser - * - */ class RegisteredUser extends Mailable { @@ -43,8 +41,6 @@ class RegisteredUser extends Mailable /** * Create a new message instance. - * - * @param string $address */ public function __construct(string $address) { @@ -60,6 +56,7 @@ class RegisteredUser extends Mailable { return $this ->markdown('emails.registered') - ->subject((string)trans('email.registered_subject')); + ->subject((string)trans('email.registered_subject')) + ; } } diff --git a/app/Mail/ReportNewJournalsMail.php b/app/Mail/ReportNewJournalsMail.php index 62e6a12cd4..ff7515ff68 100644 --- a/app/Mail/ReportNewJournalsMail.php +++ b/app/Mail/ReportNewJournalsMail.php @@ -35,8 +35,6 @@ use Illuminate\Support\Collection; * Class ReportNewJournalsMail. * * Sends a list of newly created journals to the user. - * - */ class ReportNewJournalsMail extends Mailable { @@ -48,8 +46,6 @@ class ReportNewJournalsMail extends Mailable /** * ConfirmEmailChangeMail constructor. - * - * @param Collection $groups */ public function __construct(Collection $groups) { @@ -67,11 +63,11 @@ class ReportNewJournalsMail extends Mailable return $this ->markdown('emails.report-new-journals') - ->subject((string)trans_choice('email.new_journals_subject', $this->groups->count())); + ->subject(trans_choice('email.new_journals_subject', $this->groups->count())) + ; } /** - * @return void * @throws FireflyException */ private function transform(): void diff --git a/app/Mail/RequestedNewPassword.php b/app/Mail/RequestedNewPassword.php index f91c84ceef..0be46c5251 100644 --- a/app/Mail/RequestedNewPassword.php +++ b/app/Mail/RequestedNewPassword.php @@ -30,8 +30,6 @@ use Illuminate\Queue\SerializesModels; /** * Sends user link for new password. * Class RequestedNewPassword - * - */ class RequestedNewPassword extends Mailable { @@ -42,8 +40,6 @@ class RequestedNewPassword extends Mailable /** * RequestedNewPassword constructor. - * - * @param string $url */ public function __construct(string $url) { @@ -59,6 +55,7 @@ class RequestedNewPassword extends Mailable { return $this ->markdown('emails.password') - ->subject((string)trans('email.reset_pw_subject')); + ->subject((string)trans('email.reset_pw_subject')) + ; } } diff --git a/app/Mail/UndoEmailChangeMail.php b/app/Mail/UndoEmailChangeMail.php index 6f6a202997..70d243685a 100644 --- a/app/Mail/UndoEmailChangeMail.php +++ b/app/Mail/UndoEmailChangeMail.php @@ -29,8 +29,6 @@ use Illuminate\Queue\SerializesModels; /** * Class UndoEmailChangeMail - * - */ class UndoEmailChangeMail extends Mailable { @@ -43,10 +41,6 @@ class UndoEmailChangeMail extends Mailable /** * UndoEmailChangeMail constructor. - * - * @param string $newEmail - * @param string $oldEmail - * @param string $url */ public function __construct(string $newEmail, string $oldEmail, string $url) { @@ -64,6 +58,7 @@ class UndoEmailChangeMail extends Mailable { return $this ->markdown('emails.undo-email-change') - ->subject((string)trans('email.email_change_subject')); + ->subject((string)trans('email.email_change_subject')) + ; } } diff --git a/app/Models/Account.php b/app/Models/Account.php index c44881ef38..9736462044 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -25,6 +25,8 @@ namespace FireflyIII\Models; use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Casts\Attribute; @@ -42,40 +44,41 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class Account * - * @property int $id - * @property \Illuminate\Support\Carbon|null $created_at - * @property \Illuminate\Support\Carbon|null $updated_at - * @property \Illuminate\Support\Carbon|null $deleted_at - * @property int $user_id - * @property int $account_type_id - * @property string $name - * @property string|null $virtual_balance - * @property string|null $iban - * @property bool $active - * @property bool $encrypted - * @property int $order - * @property-read Collection|AccountMeta[] $accountMeta - * @property-read int|null $account_meta_count - * @property AccountType $accountType - * @property-read Collection|Attachment[] $attachments - * @property-read int|null $attachments_count - * @property-read string $account_number - * @property-read string $edit_name - * @property-read Collection|Location[] $locations - * @property-read int|null $locations_count - * @property-read Collection|Note[] $notes - * @property-read int|null $notes_count - * @property-read Collection|ObjectGroup[] $objectGroups - * @property-read int|null $object_groups_count - * @property-read Collection|PiggyBank[] $piggyBanks - * @property-read int|null $piggy_banks_count - * @property-read Collection|Transaction[] $transactions - * @property-read int|null $transactions_count - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property int $account_type_id + * @property string $name + * @property string $virtual_balance + * @property null|string $iban + * @property bool $active + * @property bool $encrypted + * @property int $order + * @property AccountMeta[]|Collection $accountMeta + * @property null|int $account_meta_count + * @property AccountType $accountType + * @property Attachment[]|Collection $attachments + * @property null|int $attachments_count + * @property string $account_number + * @property string $edit_name + * @property Collection|Location[] $locations + * @property null|int $locations_count + * @property Collection|Note[] $notes + * @property null|int $notes_count + * @property Collection|ObjectGroup[] $objectGroups + * @property null|int $object_groups_count + * @property Collection|PiggyBank[] $piggyBanks + * @property null|int $piggy_banks_count + * @property Collection|Transaction[] $transactions + * @property null|int $transactions_count + * @property User $user + * * @method static EloquentBuilder|Account accountTypeIn($types) * @method static EloquentBuilder|Account newModelQuery() * @method static EloquentBuilder|Account newQuery() - * @method static Builder|Account onlyTrashed() + * @method static Builder|Account onlyTrashed() * @method static EloquentBuilder|Account query() * @method static EloquentBuilder|Account whereAccountTypeId($value) * @method static EloquentBuilder|Account whereActive($value) @@ -89,89 +92,82 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static EloquentBuilder|Account whereUpdatedAt($value) * @method static EloquentBuilder|Account whereUserId($value) * @method static EloquentBuilder|Account whereVirtualBalance($value) - * @method static Builder|Account withTrashed() - * @method static Builder|Account withoutTrashed() - * @property Carbon $lastActivityDate - * @property string $startBalance - * @property string $endBalance - * @property string $difference - * @property string $interest - * @property string $interestPeriod - * @property string $accountTypeString - * @property Location $location - * @property string $liability_direction - * @property string $current_debt - * @property int|null $user_group_id + * @method static Builder|Account withTrashed() + * @method static Builder|Account withoutTrashed() + * + * @property Carbon $lastActivityDate + * @property string $startBalance + * @property string $endBalance + * @property string $difference + * @property string $interest + * @property string $interestPeriod + * @property string $accountTypeString + * @property Location $location + * @property string $liability_direction + * @property string $current_debt + * @property int $user_group_id + * * @method static EloquentBuilder|Account whereUserGroupId($value) + * + * @property null|UserGroup $userGroup + * * @mixin Eloquent */ class Account extends Model { - use SoftDeletes; use HasFactory; + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; + use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'user_id' => 'integer', - 'deleted_at' => 'datetime', - 'active' => 'boolean', - 'encrypted' => 'boolean', - ]; - /** @var array Fields that can be filled */ - protected $fillable = ['user_id', 'user_group_id', 'account_type_id', 'name', 'active', 'virtual_balance', 'iban']; - /** @var array Hidden from view */ - protected $hidden = ['encrypted']; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'user_id' => 'integer', + 'deleted_at' => 'datetime', + 'active' => 'boolean', + 'encrypted' => 'boolean', + ]; + + protected $fillable = ['user_id', 'user_group_id', 'account_type_id', 'name', 'active', 'virtual_balance', 'iban']; + + protected $hidden = ['encrypted']; private bool $joinedAccountTypes = false; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return Account * @throws NotFoundHttpException */ - public static function routeBinder(string $value): Account + public static function routeBinder(string $value): self { if (auth()->check()) { $accountId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var Account $account */ - $account = $user->accounts()->with(['accountType'])->find($accountId); + $user = auth()->user(); + + /** @var null|Account $account */ + $account = $user->accounts()->with(['accountType'])->find($accountId); if (null !== $account) { return $account; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return BelongsTo - */ public function accountType(): BelongsTo { return $this->belongsTo(AccountType::class); } - /** - * @return MorphMany - */ public function attachments(): MorphMany { return $this->morphMany(Attachment::class, 'attachable'); @@ -179,30 +175,23 @@ class Account extends Model /** * Get the account number. - * - * @return string */ public function getAccountNumberAttribute(): string { - /** @var AccountMeta $metaValue */ + /** @var null|AccountMeta $metaValue */ $metaValue = $this->accountMeta() - ->where('name', 'account_number') - ->first(); + ->where('name', 'account_number') + ->first() + ; - return $metaValue ? $metaValue->data : ''; + return null !== $metaValue ? $metaValue->data : ''; } - /** - * @return HasMany - */ public function accountMeta(): HasMany { return $this->hasMany(AccountMeta::class); } - /** - * @return string - */ public function getEditNameAttribute(): string { $name = $this->name; @@ -214,9 +203,6 @@ class Account extends Model return $name; } - /** - * @return MorphMany - */ public function locations(): MorphMany { return $this->morphMany(Location::class, 'locatable'); @@ -238,19 +224,11 @@ class Account extends Model return $this->morphToMany(ObjectGroup::class, 'object_groupable'); } - /** - * @return HasMany - */ public function piggyBanks(): HasMany { return $this->hasMany(PiggyBank::class); } - /** - * - * @param EloquentBuilder $query - * @param array $types - */ public function scopeAccountTypeIn(EloquentBuilder $query, array $types): void { if (false === $this->joinedAccountTypes) { @@ -260,38 +238,56 @@ class Account extends Model $query->whereIn('account_types.type', $types); } - /** - * - * @param mixed $value - * - - */ public function setVirtualBalanceAttribute(mixed $value): void { - $value = (string)$value; + $value = (string)$value; if ('' === $value) { $value = null; } $this->attributes['virtual_balance'] = $value; } - /** - * @return HasMany - */ public function transactions(): HasMany { return $this->hasMany(Transaction::class); } + public function userGroup(): BelongsTo + { + return $this->belongsTo(UserGroup::class); + } + + protected function accountId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + /** + * Get the user ID + */ + protected function accountTypeId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function order(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + /** * Get the virtual balance - * - * @return Attribute */ protected function virtualBalance(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, ); } } diff --git a/app/Models/AccountMeta.php b/app/Models/AccountMeta.php index 6d7a31aaa2..799543776c 100644 --- a/app/Models/AccountMeta.php +++ b/app/Models/AccountMeta.php @@ -23,22 +23,24 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Carbon; /** * Class AccountMeta * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property int $account_id - * @property string $name - * @property mixed $data - * @property-read Account $account + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property int $account_id + * @property string $name + * @property mixed $data + * @property Account $account + * * @method static Builder|AccountMeta newModelQuery() * @method static Builder|AccountMeta newQuery() * @method static Builder|AccountMeta query() @@ -48,49 +50,35 @@ use Illuminate\Support\Carbon; * @method static Builder|AccountMeta whereId($value) * @method static Builder|AccountMeta whereName($value) * @method static Builder|AccountMeta whereUpdatedAt($value) + * * @mixin Eloquent */ class AccountMeta extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ - protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - ]; - /** @var array Fields that can be filled */ - protected $fillable = ['account_id', 'name', 'data']; - /** @var string The table to store the data in */ - protected $table = 'account_meta'; + use ReturnsIntegerIdTrait; + + protected $casts + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + ]; + + protected $fillable = ['account_id', 'name', 'data']; + + /** @var string The table to store the data in */ + protected $table = 'account_meta'; - /** - * @return BelongsTo - */ public function account(): BelongsTo { return $this->belongsTo(Account::class); } - /** - * @param mixed $value - * - * @return mixed - */ - public function getDataAttribute($value): string + public function getDataAttribute(mixed $value): string { return (string)json_decode($value, true); } - /** - * @param mixed $value - * - - */ - public function setDataAttribute($value): void + public function setDataAttribute(mixed $value): void { $this->attributes['data'] = json_encode($value); } diff --git a/app/Models/AccountType.php b/app/Models/AccountType.php index b166052150..54036c23ab 100644 --- a/app/Models/AccountType.php +++ b/app/Models/AccountType.php @@ -23,22 +23,24 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\AccountType * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string $type - * @property-read Collection|Account[] $accounts - * @property-read int|null $accounts_count + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property string $type + * @property Account[]|Collection $accounts + * @property null|int $accounts_count + * * @method static Builder|AccountType newModelQuery() * @method static Builder|AccountType newQuery() * @method static Builder|AccountType query() @@ -46,42 +48,36 @@ use Illuminate\Support\Carbon; * @method static Builder|AccountType whereId($value) * @method static Builder|AccountType whereType($value) * @method static Builder|AccountType whereUpdatedAt($value) + * * @mixin Eloquent */ class AccountType extends Model { - public const ASSET = 'Asset account'; - public const BENEFICIARY = 'Beneficiary account'; - public const CASH = 'Cash account'; - public const CREDITCARD = 'Credit card'; - public const DEBT = 'Debt'; - public const DEFAULT = 'Default account'; - public const EXPENSE = 'Expense account'; - public const IMPORT = 'Import account'; - public const INITIAL_BALANCE = 'Initial balance account'; - public const LIABILITY_CREDIT = 'Liability credit account'; - public const LOAN = 'Loan'; - public const MORTGAGE = 'Mortgage'; - public const RECONCILIATION = 'Reconciliation account'; - public const REVENUE = 'Revenue account'; + use ReturnsIntegerIdTrait; + public const string ASSET = 'Asset account'; + public const string BENEFICIARY = 'Beneficiary account'; + public const string CASH = 'Cash account'; + public const string CREDITCARD = 'Credit card'; + public const string DEBT = 'Debt'; + public const string DEFAULT = 'Default account'; + public const string EXPENSE = 'Expense account'; + public const string IMPORT = 'Import account'; + public const string INITIAL_BALANCE = 'Initial balance account'; + public const string LIABILITY_CREDIT = 'Liability credit account'; + public const string LOAN = 'Loan'; + public const string MORTGAGE = 'Mortgage'; + public const string RECONCILIATION = 'Reconciliation account'; + public const string REVENUE = 'Revenue account'; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - ]; - /** @var array Fields that can be filled */ - protected $fillable = ['type']; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + ]; + + protected $fillable = ['type']; - /** - * @return HasMany - */ public function accounts(): HasMany { return $this->hasMany(Account::class); diff --git a/app/Models/Attachment.php b/app/Models/Attachment.php index 235a8c1663..c0dedb7db3 100644 --- a/app/Models/Attachment.php +++ b/app/Models/Attachment.php @@ -23,8 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -32,35 +36,35 @@ use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\Attachment * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property int $attachable_id - * @property string $attachable_type - * @property bool $file_exists - * @property string $md5 - * @property string $filename - * @property string|null $title - * @property string|null $description - * @property string $mime - * @property int $size - * @property bool $uploaded - * @property string $notes_text - * @property-read Model|Eloquent $attachable - * @property Collection|Note[] $notes - * @property-read int|null $notes_count - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property int $attachable_id + * @property string $attachable_type + * @property bool $file_exists + * @property string $md5 + * @property string $filename + * @property null|string $title + * @property null|string $description + * @property string $mime + * @property int|string $size + * @property bool $uploaded + * @property string $notes_text + * @property \Eloquent|Model $attachable + * @property Collection|Note[] $notes + * @property null|int $notes_count + * @property User $user + * * @method static \Illuminate\Database\Eloquent\Builder|Attachment newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Attachment newQuery() - * @method static Builder|Attachment onlyTrashed() + * @method static Builder|Attachment onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Attachment query() * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereAttachableId($value) * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereAttachableType($value) @@ -76,57 +80,54 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereUploaded($value) * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereUserId($value) - * @method static Builder|Attachment withTrashed() - * @method static Builder|Attachment withoutTrashed() - * @property int|null $user_group_id + * @method static Builder|Attachment withTrashed() + * @method static Builder|Attachment withoutTrashed() + * + * @property int $user_group_id + * * @method static \Illuminate\Database\Eloquent\Builder|Attachment whereUserGroupId($value) + * * @mixin Eloquent */ class Attachment extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'uploaded' => 'boolean', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'uploaded' => 'boolean', + ]; + protected $fillable = ['attachable_id', 'attachable_type', 'user_id', 'md5', 'filename', 'mime', 'title', 'description', 'size', 'uploaded']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return Attachment * @throws NotFoundHttpException */ - public static function routeBinder(string $value): Attachment + public static function routeBinder(string $value): self { if (auth()->check()) { $attachmentId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var Attachment $attachment */ - $attachment = $user->attachments()->find($attachmentId); + $user = auth()->user(); + + /** @var null|Attachment $attachment */ + $attachment = $user->attachments()->find($attachmentId); if (null !== $attachment) { return $attachment; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); @@ -134,9 +135,6 @@ class Attachment extends Model /** * Get all of the owning attachable models. - * - * - * @return MorphTo */ public function attachable(): MorphTo { @@ -145,8 +143,6 @@ class Attachment extends Model /** * Returns the expected filename for this attachment. - * - * @return string */ public function fileName(): string { @@ -160,4 +156,11 @@ class Attachment extends Model { return $this->morphMany(Note::class, 'noteable'); } + + protected function attachableId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/AuditLogEntry.php b/app/Models/AuditLogEntry.php index fac7d1a7ef..cc2a93b2e4 100644 --- a/app/Models/AuditLogEntry.php +++ b/app/Models/AuditLogEntry.php @@ -24,35 +24,40 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Support\Carbon; /** * Class AuditLogEntry * - * @property-read Model|Eloquent $auditable - * @property-read Model|Eloquent $changer - * @method static Builder|AuditLogEntry newModelQuery() - * @method static Builder|AuditLogEntry newQuery() + * @property \Eloquent|Model $auditable + * @property \Eloquent|Model $changer + * + * @method static Builder|AuditLogEntry newModelQuery() + * @method static Builder|AuditLogEntry newQuery() * @method static \Illuminate\Database\Query\Builder|AuditLogEntry onlyTrashed() - * @method static Builder|AuditLogEntry query() + * @method static Builder|AuditLogEntry query() * @method static \Illuminate\Database\Query\Builder|AuditLogEntry withTrashed() * @method static \Illuminate\Database\Query\Builder|AuditLogEntry withoutTrashed() - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $auditable_id - * @property string $auditable_type - * @property int $changer_id - * @property string $changer_type - * @property string $action - * @property array|null $before - * @property array|null $after + * + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $auditable_id + * @property string $auditable_type + * @property int $changer_id + * @property string $changer_type + * @property string $action + * @property null|array $before + * @property null|array $after + * * @method static Builder|AuditLogEntry whereAction($value) * @method static Builder|AuditLogEntry whereAfter($value) * @method static Builder|AuditLogEntry whereAuditableId($value) @@ -64,10 +69,12 @@ use Illuminate\Support\Carbon; * @method static Builder|AuditLogEntry whereDeletedAt($value) * @method static Builder|AuditLogEntry whereId($value) * @method static Builder|AuditLogEntry whereUpdatedAt($value) + * * @mixin Eloquent */ class AuditLogEntry extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; protected $casts @@ -79,17 +86,27 @@ class AuditLogEntry extends Model 'deleted_at' => 'datetime', ]; - /** - */ public function auditable(): MorphTo { return $this->morphTo(); } - /** - */ public function changer(): MorphTo { return $this->morphTo(); } + + protected function auditableId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function changerId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/AutoBudget.php b/app/Models/AutoBudget.php index 41f446da71..ba274a2f32 100644 --- a/app/Models/AutoBudget.php +++ b/app/Models/AutoBudget.php @@ -24,31 +24,33 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\AutoBudget * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $budget_id - * @property int $transaction_currency_id - * @property int $auto_budget_type - * @property string $amount - * @property string $period - * @property-read Budget $budget - * @property-read TransactionCurrency $transactionCurrency + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $budget_id + * @property int $transaction_currency_id + * @property int|string $auto_budget_type + * @property string $amount + * @property string $period + * @property Budget $budget + * @property TransactionCurrency $transactionCurrency + * * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget newQuery() - * @method static Builder|AutoBudget onlyTrashed() + * @method static Builder|AutoBudget onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget query() * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereAutoBudgetType($value) @@ -59,42 +61,49 @@ use Illuminate\Support\Carbon; * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget wherePeriod($value) * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereTransactionCurrencyId($value) * @method static \Illuminate\Database\Eloquent\Builder|AutoBudget whereUpdatedAt($value) - * @method static Builder|AutoBudget withTrashed() - * @method static Builder|AutoBudget withoutTrashed() + * @method static Builder|AutoBudget withTrashed() + * @method static Builder|AutoBudget withoutTrashed() + * * @mixin Eloquent */ class AutoBudget extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - public const AUTO_BUDGET_ADJUSTED = 3; - public const AUTO_BUDGET_RESET = 1; - public const AUTO_BUDGET_ROLLOVER = 2; - protected $fillable = ['budget_id', 'amount', 'period']; + public const int AUTO_BUDGET_ADJUSTED = 3; + public const int AUTO_BUDGET_RESET = 1; + public const int AUTO_BUDGET_ROLLOVER = 2; + protected $fillable = ['budget_id', 'amount', 'period']; - /** - * @return BelongsTo - */ public function budget(): BelongsTo { return $this->belongsTo(Budget::class); } - /** - * @return BelongsTo - */ public function transactionCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class); } - /** - * @return Attribute - */ protected function amount(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, + ); + } + + protected function budgetId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function transactionCurrencyId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } } diff --git a/app/Models/AvailableBudget.php b/app/Models/AvailableBudget.php index eac01d5043..95bdaa6120 100644 --- a/app/Models/AvailableBudget.php +++ b/app/Models/AvailableBudget.php @@ -23,33 +23,36 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\AvailableBudget * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property int $transaction_currency_id - * @property string $amount - * @property Carbon $start_date - * @property Carbon $end_date - * @property-read TransactionCurrency $transactionCurrency - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property int $transaction_currency_id + * @property string $amount + * @property Carbon $start_date + * @property Carbon $end_date + * @property TransactionCurrency $transactionCurrency + * @property User $user + * * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget newQuery() - * @method static Builder|AvailableBudget onlyTrashed() + * @method static Builder|AvailableBudget onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget query() * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereCreatedAt($value) @@ -60,79 +63,77 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereTransactionCurrencyId($value) * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereUserId($value) - * @method static Builder|AvailableBudget withTrashed() - * @method static Builder|AvailableBudget withoutTrashed() - * @property int|null $user_group_id + * @method static Builder|AvailableBudget withTrashed() + * @method static Builder|AvailableBudget withoutTrashed() + * + * @property int $user_group_id + * * @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereUserGroupId($value) + * * @mixin Eloquent */ class AvailableBudget extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'start_date' => 'date', - 'end_date' => 'date', - 'transaction_currency_id' => 'int', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'start_date' => 'date', + 'end_date' => 'date', + 'transaction_currency_id' => 'int', + ]; + protected $fillable = ['user_id', 'user_group_id', 'transaction_currency_id', 'amount', 'start_date', 'end_date']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return AvailableBudget * @throws NotFoundHttpException */ - public static function routeBinder(string $value): AvailableBudget + public static function routeBinder(string $value): self { if (auth()->check()) { $availableBudgetId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var AvailableBudget $availableBudget */ - $availableBudget = $user->availableBudgets()->find($availableBudgetId); + $user = auth()->user(); + + /** @var null|AvailableBudget $availableBudget */ + $availableBudget = $user->availableBudgets()->find($availableBudgetId); if (null !== $availableBudget) { return $availableBudget; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return BelongsTo - */ public function transactionCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class); } - /** - * @return Attribute - */ protected function amount(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, + ); + } + + protected function transactionCurrencyId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } } diff --git a/app/Models/Bill.php b/app/Models/Bill.php index f9f2510fc2..ff50cc7aa6 100644 --- a/app/Models/Bill.php +++ b/app/Models/Bill.php @@ -23,7 +23,10 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; @@ -31,47 +34,48 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphMany; +use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\Bill * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property int|null $transaction_currency_id - * @property string $name - * @property string $match - * @property string $amount_min - * @property string $amount_max - * @property Carbon $date - * @property Carbon|null $end_date - * @property Carbon|null $extension_date - * @property string $repeat_freq - * @property int $skip - * @property bool $automatch - * @property bool $active - * @property bool $name_encrypted - * @property bool $match_encrypted - * @property int $order - * @property-read Collection|Attachment[] $attachments - * @property-read int|null $attachments_count - * @property-read Collection|Note[] $notes - * @property-read int|null $notes_count - * @property-read Collection|ObjectGroup[] $objectGroups - * @property-read int|null $object_groups_count - * @property-read TransactionCurrency|null $transactionCurrency - * @property-read Collection|TransactionJournal[] $transactionJournals - * @property-read int|null $transaction_journals_count - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property int $transaction_currency_id + * @property string $name + * @property string $match + * @property string $amount_min + * @property string $amount_max + * @property Carbon $date + * @property null|Carbon $end_date + * @property null|Carbon $extension_date + * @property string $repeat_freq + * @property int $skip + * @property bool $automatch + * @property bool $active + * @property bool $name_encrypted + * @property bool $match_encrypted + * @property int $order + * @property Attachment[]|Collection $attachments + * @property null|int $attachments_count + * @property Collection|Note[] $notes + * @property null|int $notes_count + * @property Collection|ObjectGroup[] $objectGroups + * @property null|int $object_groups_count + * @property null|TransactionCurrency $transactionCurrency + * @property Collection|TransactionJournal[] $transactionJournals + * @property null|int $transaction_journals_count + * @property User $user + * * @method static \Illuminate\Database\Eloquent\Builder|Bill newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Bill newQuery() - * @method static Builder|Bill onlyTrashed() + * @method static Builder|Bill onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Bill query() * @method static \Illuminate\Database\Eloquent\Builder|Bill whereActive($value) * @method static \Illuminate\Database\Eloquent\Builder|Bill whereAmountMax($value) @@ -93,91 +97,84 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|Bill whereTransactionCurrencyId($value) * @method static \Illuminate\Database\Eloquent\Builder|Bill whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Bill whereUserId($value) - * @method static Builder|Bill withTrashed() - * @method static Builder|Bill withoutTrashed() - * @property int|null $user_group_id + * @method static Builder|Bill withTrashed() + * @method static Builder|Bill withoutTrashed() + * + * @property int $user_group_id + * * @method static \Illuminate\Database\Eloquent\Builder|Bill whereUserGroupId($value) + * * @mixin Eloquent */ class Bill extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'date' => 'date', - 'end_date' => 'date', - 'extension_date' => 'date', - 'skip' => 'int', - 'automatch' => 'boolean', - 'active' => 'boolean', - 'name_encrypted' => 'boolean', - 'match_encrypted' => 'boolean', - ]; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'date' => 'date', + 'end_date' => 'date', + 'extension_date' => 'date', + 'skip' => 'int', + 'automatch' => 'boolean', + 'active' => 'boolean', + 'name_encrypted' => 'boolean', + 'match_encrypted' => 'boolean', + ]; - /** @var array Fields that can be filled */ protected $fillable - = [ - 'name', - 'match', - 'amount_min', - 'user_id', - 'user_group_id', - 'amount_max', - 'date', - 'repeat_freq', - 'skip', - 'automatch', - 'active', - 'transaction_currency_id', - 'end_date', - 'extension_date', - ]; - /** @var array Hidden from view */ + = [ + 'name', + 'match', + 'amount_min', + 'user_id', + 'user_group_id', + 'amount_max', + 'date', + 'repeat_freq', + 'skip', + 'automatch', + 'active', + 'transaction_currency_id', + 'end_date', + 'extension_date', + ]; + protected $hidden = ['amount_min_encrypted', 'amount_max_encrypted', 'name_encrypted', 'match_encrypted']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return Bill * @throws NotFoundHttpException */ - public static function routeBinder(string $value): Bill + public static function routeBinder(string $value): self { if (auth()->check()) { $billId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var Bill $bill */ - $bill = $user->bills()->find($billId); + $user = auth()->user(); + + /** @var null|Bill $bill */ + $bill = $user->bills()->find($billId); if (null !== $bill) { return $bill; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return MorphMany - */ public function attachments(): MorphMany { return $this->morphMany(Attachment::class, 'attachable'); @@ -192,15 +189,14 @@ class Bill extends Model } /** - * Get all of the tags for the post. + * Get all the tags for the post. */ - public function objectGroups() + public function objectGroups(): MorphToMany { return $this->morphToMany(ObjectGroup::class, 'object_groupable'); } /** - * * @param mixed $value */ public function setAmountMaxAttribute($value): void @@ -210,25 +206,17 @@ class Bill extends Model /** * @param mixed $value - * - */ public function setAmountMinAttribute($value): void { $this->attributes['amount_min'] = (string)$value; } - /** - * @return BelongsTo - */ public function transactionCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class); } - /** - * @return HasMany - */ public function transactionJournals(): HasMany { return $this->hasMany(TransactionJournal::class); @@ -236,25 +224,45 @@ class Bill extends Model /** * Get the max amount - * - * @return Attribute */ protected function amountMax(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, ); } /** * Get the min amount - * - * @return Attribute */ protected function amountMin(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, + ); + } + + protected function order(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + /** + * Get the skip + */ + protected function skip(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function transactionCurrencyId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } } diff --git a/app/Models/Budget.php b/app/Models/Budget.php index 88e6a30138..dd7f9a5a6b 100644 --- a/app/Models/Budget.php +++ b/app/Models/Budget.php @@ -23,8 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -33,35 +37,35 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\Budget * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property string $name - * @property bool $active - * @property bool $encrypted - * @property int $order - * @property-read Collection|Attachment[] $attachments - * @property-read int|null $attachments_count - * @property-read Collection|AutoBudget[] $autoBudgets - * @property-read int|null $auto_budgets_count - * @property-read Collection|BudgetLimit[] $budgetlimits - * @property-read int|null $budgetlimits_count - * @property-read Collection|TransactionJournal[] $transactionJournals - * @property-read int|null $transaction_journals_count - * @property-read Collection|Transaction[] $transactions - * @property-read int|null $transactions_count - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property string $name + * @property bool $active + * @property bool $encrypted + * @property int $order + * @property Attachment[]|Collection $attachments + * @property null|int $attachments_count + * @property AutoBudget[]|Collection $autoBudgets + * @property null|int $auto_budgets_count + * @property BudgetLimit[]|Collection $budgetlimits + * @property null|int $budgetlimits_count + * @property Collection|TransactionJournal[] $transactionJournals + * @property null|int $transaction_journals_count + * @property Collection|Transaction[] $transactions + * @property null|int $transactions_count + * @property User $user + * * @method static \Illuminate\Database\Eloquent\Builder|Budget newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Budget newQuery() - * @method static Builder|Budget onlyTrashed() + * @method static Builder|Budget onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Budget query() * @method static \Illuminate\Database\Eloquent\Builder|Budget whereActive($value) * @method static \Illuminate\Database\Eloquent\Builder|Budget whereCreatedAt($value) @@ -72,87 +76,76 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|Budget whereOrder($value) * @method static \Illuminate\Database\Eloquent\Builder|Budget whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Budget whereUserId($value) - * @method static Builder|Budget withTrashed() - * @method static Builder|Budget withoutTrashed() - * @property string $email - * @property int|null $user_group_id + * @method static Builder|Budget withTrashed() + * @method static Builder|Budget withoutTrashed() + * + * @property string $email + * @property int $user_group_id + * * @method static \Illuminate\Database\Eloquent\Builder|Budget whereUserGroupId($value) - * @property-read Collection|Note[] $notes - * @property-read int|null $notes_count + * + * @property Collection|Note[] $notes + * @property null|int $notes_count + * * @mixin Eloquent */ class Budget extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'active' => 'boolean', - 'encrypted' => 'boolean', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'active' => 'boolean', + 'encrypted' => 'boolean', + ]; + protected $fillable = ['user_id', 'name', 'active', 'order', 'user_group_id']; - /** @var array Hidden from view */ - protected $hidden = ['encrypted']; + + protected $hidden = ['encrypted']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return Budget * @throws NotFoundHttpException */ - public static function routeBinder(string $value): Budget + public static function routeBinder(string $value): self { if (auth()->check()) { $budgetId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var Budget $budget */ - $budget = $user->budgets()->find($budgetId); + $user = auth()->user(); + + /** @var null|Budget $budget */ + $budget = $user->budgets()->find($budgetId); if (null !== $budget) { return $budget; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return MorphMany - */ public function attachments(): MorphMany { return $this->morphMany(Attachment::class, 'attachable'); } - /** - * @return HasMany - */ public function autoBudgets(): HasMany { return $this->hasMany(AutoBudget::class); } - /** - * @return HasMany - */ public function budgetlimits(): HasMany { return $this->hasMany(BudgetLimit::class); @@ -166,19 +159,20 @@ class Budget extends Model return $this->morphMany(Note::class, 'noteable'); } - /** - * @return BelongsToMany - */ public function transactionJournals(): BelongsToMany { return $this->belongsToMany(TransactionJournal::class, 'budget_transaction_journal', 'budget_id'); } - /** - * @return BelongsToMany - */ public function transactions(): BelongsToMany { return $this->belongsToMany(Transaction::class, 'budget_transaction', 'budget_id'); } + + protected function order(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/BudgetLimit.php b/app/Models/BudgetLimit.php index 59cec2c1f1..e8528e5e40 100644 --- a/app/Models/BudgetLimit.php +++ b/app/Models/BudgetLimit.php @@ -23,33 +23,35 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; use FireflyIII\Events\Model\BudgetLimit\Created; use FireflyIII\Events\Model\BudgetLimit\Deleted; use FireflyIII\Events\Model\BudgetLimit\Updated; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\BudgetLimit * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property int $budget_id - * @property int|null $transaction_currency_id - * @property Carbon $start_date - * @property Carbon|null $end_date - * @property string $amount - * @property string $spent - * @property string|null $period - * @property int $generated - * @property-read Budget $budget - * @property-read TransactionCurrency|null $transactionCurrency + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property int $budget_id + * @property int $transaction_currency_id + * @property Carbon $start_date + * @property null|Carbon $end_date + * @property string $amount + * @property string $spent + * @property null|string $period + * @property int|string $generated + * @property Budget $budget + * @property null|TransactionCurrency $transactionCurrency + * * @method static Builder|BudgetLimit newModelQuery() * @method static Builder|BudgetLimit newQuery() * @method static Builder|BudgetLimit query() @@ -63,66 +65,57 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|BudgetLimit whereStartDate($value) * @method static Builder|BudgetLimit whereTransactionCurrencyId($value) * @method static Builder|BudgetLimit whereUpdatedAt($value) + * * @mixin Eloquent */ class BudgetLimit extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ + use ReturnsIntegerIdTrait; + protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'start_date' => 'date', - 'end_date' => 'date', - 'auto_budget' => 'boolean', - ]; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'start_date' => 'date', + 'end_date' => 'date', + 'auto_budget' => 'boolean', + ]; protected $dispatchesEvents - = [ - 'created' => Created::class, - 'updated' => Updated::class, - 'deleted' => Deleted::class, - ]; - /** @var array Fields that can be filled */ + = [ + 'created' => Created::class, + 'updated' => Updated::class, + 'deleted' => Deleted::class, + ]; + protected $fillable = ['budget_id', 'start_date', 'end_date', 'amount', 'transaction_currency_id']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return BudgetLimit * @throws NotFoundHttpException */ - public static function routeBinder(string $value): BudgetLimit + public static function routeBinder(string $value): self { if (auth()->check()) { $budgetLimitId = (int)$value; $budgetLimit = self::where('budget_limits.id', $budgetLimitId) - ->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') - ->where('budgets.user_id', auth()->user()->id) - ->first(['budget_limits.*']); + ->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') + ->where('budgets.user_id', auth()->user()->id) + ->first(['budget_limits.*']) + ; if (null !== $budgetLimit) { return $budgetLimit; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function budget(): BelongsTo { return $this->belongsTo(Budget::class); } - /** - * @return BelongsTo - */ public function transactionCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class); @@ -130,13 +123,25 @@ class BudgetLimit extends Model /** * Get the amount - * - * @return Attribute */ protected function amount(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, + ); + } + + protected function budgetId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function transactionCurrencyId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } } diff --git a/app/Models/Category.php b/app/Models/Category.php index dc52f22bbb..5901af1e7c 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -25,6 +25,8 @@ namespace FireflyIII\Models; use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; @@ -38,26 +40,27 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\Category * - * @property int $id - * @property \Illuminate\Support\Carbon|null $created_at - * @property \Illuminate\Support\Carbon|null $updated_at - * @property \Illuminate\Support\Carbon|null $deleted_at - * @property int $user_id - * @property string $name - * @property Carbon $lastActivity - * @property bool $encrypted - * @property-read Collection|Attachment[] $attachments - * @property-read int|null $attachments_count - * @property-read Collection|Note[] $notes - * @property-read int|null $notes_count - * @property-read Collection|TransactionJournal[] $transactionJournals - * @property-read int|null $transaction_journals_count - * @property-read Collection|Transaction[] $transactions - * @property-read int|null $transactions_count - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property string $name + * @property Carbon $lastActivity + * @property bool $encrypted + * @property Attachment[]|Collection $attachments + * @property null|int $attachments_count + * @property Collection|Note[] $notes + * @property null|int $notes_count + * @property Collection|TransactionJournal[] $transactionJournals + * @property null|int $transaction_journals_count + * @property Collection|Transaction[] $transactions + * @property null|int $transactions_count + * @property User $user + * * @method static \Illuminate\Database\Eloquent\Builder|Category newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Category newQuery() - * @method static Builder|Category onlyTrashed() + * @method static Builder|Category onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Category query() * @method static \Illuminate\Database\Eloquent\Builder|Category whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Category whereDeletedAt($value) @@ -66,67 +69,61 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|Category whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Category whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Category whereUserId($value) - * @method static Builder|Category withTrashed() - * @method static Builder|Category withoutTrashed() - * @property int|null $user_group_id + * @method static Builder|Category withTrashed() + * @method static Builder|Category withoutTrashed() + * + * @property int $user_group_id + * * @method static \Illuminate\Database\Eloquent\Builder|Category whereUserGroupId($value) + * * @mixin Eloquent */ class Category extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'encrypted' => 'boolean', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'encrypted' => 'boolean', + ]; + protected $fillable = ['user_id', 'user_group_id', 'name']; - /** @var array Hidden from view */ - protected $hidden = ['encrypted']; + + protected $hidden = ['encrypted']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return Category * @throws NotFoundHttpException */ - public static function routeBinder(string $value): Category + public static function routeBinder(string $value): self { if (auth()->check()) { $categoryId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var Category $category */ - $category = $user->categories()->find($categoryId); + $user = auth()->user(); + + /** @var null|Category $category */ + $category = $user->categories()->find($categoryId); if (null !== $category) { return $category; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return MorphMany - */ public function attachments(): MorphMany { return $this->morphMany(Attachment::class, 'attachable'); @@ -140,17 +137,11 @@ class Category extends Model return $this->morphMany(Note::class, 'noteable'); } - /** - * @return BelongsToMany - */ public function transactionJournals(): BelongsToMany { return $this->belongsToMany(TransactionJournal::class, 'category_transaction_journal', 'category_id'); } - /** - * @return BelongsToMany - */ public function transactions(): BelongsToMany { return $this->belongsToMany(Transaction::class, 'category_transaction', 'category_id'); diff --git a/app/Models/Configuration.php b/app/Models/Configuration.php index 8abf4eb569..815e3aaa63 100644 --- a/app/Models/Configuration.php +++ b/app/Models/Configuration.php @@ -23,24 +23,26 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\Configuration * * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at * @property string $name * @property mixed $data + * * @method static \Illuminate\Database\Eloquent\Builder|Configuration newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Configuration newQuery() - * @method static Builder|Configuration onlyTrashed() + * @method static Builder|Configuration onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Configuration query() * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereData($value) @@ -48,32 +50,29 @@ use Illuminate\Support\Carbon; * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Configuration whereUpdatedAt($value) - * @method static Builder|Configuration withTrashed() - * @method static Builder|Configuration withoutTrashed() + * @method static Builder|Configuration withTrashed() + * @method static Builder|Configuration withoutTrashed() + * * @mixin Eloquent */ class Configuration extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - ]; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + ]; + /** @var string The table to store the data in */ protected $table = 'configuration'; /** * TODO can be replaced with native laravel code. * - * * @param mixed $value * * @return mixed @@ -84,7 +83,6 @@ class Configuration extends Model } /** - * * @param mixed $value */ public function setDataAttribute($value): void diff --git a/app/Models/CurrencyExchangeRate.php b/app/Models/CurrencyExchangeRate.php index 31a95e8348..c4cf0a4d49 100644 --- a/app/Models/CurrencyExchangeRate.php +++ b/app/Models/CurrencyExchangeRate.php @@ -23,31 +23,34 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Support\Carbon; /** * Class CurrencyExchangeRate * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string|null $deleted_at - * @property int $user_id - * @property int $from_currency_id - * @property int $to_currency_id - * @property Carbon $date - * @property string $rate - * @property string|null $user_rate - * @property-read TransactionCurrency $fromCurrency - * @property-read TransactionCurrency $toCurrency - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|string $deleted_at + * @property int $user_id + * @property int $from_currency_id + * @property int $to_currency_id + * @property Carbon $date + * @property string $rate + * @property string $user_rate + * @property TransactionCurrency $fromCurrency + * @property TransactionCurrency $toCurrency + * @property User $user + * * @method static Builder|CurrencyExchangeRate newModelQuery() * @method static Builder|CurrencyExchangeRate newQuery() * @method static Builder|CurrencyExchangeRate query() @@ -61,70 +64,73 @@ use Illuminate\Support\Carbon; * @method static Builder|CurrencyExchangeRate whereUpdatedAt($value) * @method static Builder|CurrencyExchangeRate whereUserId($value) * @method static Builder|CurrencyExchangeRate whereUserRate($value) - * @property int|null $user_group_id + * + * @property int $user_group_id + * * @method static Builder|CurrencyExchangeRate whereUserGroupId($value) * @method static Builder|CurrencyExchangeRate onlyTrashed() * @method static Builder|CurrencyExchangeRate withTrashed() * @method static Builder|CurrencyExchangeRate withoutTrashed() + * * @mixin Eloquent */ class CurrencyExchangeRate extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** @var array Convert these fields to other data types */ protected $casts = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'user_id' => 'int', - 'from_currency_id' => 'int', - 'to_currency_id' => 'int', - 'date' => 'datetime', - ]; + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'user_id' => 'int', + 'from_currency_id' => 'int', + 'to_currency_id' => 'int', + 'date' => 'datetime', + ]; protected $fillable = ['user_id', 'from_currency_id', 'to_currency_id', 'date', 'rate']; - /** - * @return BelongsTo - */ public function fromCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class, 'from_currency_id'); } - /** - * @return BelongsTo - */ public function toCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class, 'to_currency_id'); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return Attribute - */ - protected function rate(): Attribute + protected function fromCurrencyId(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (int)$value, + ); + } + + protected function rate(): Attribute + { + return Attribute::make( + get: static fn ($value) => (string)$value, + ); + } + + protected function toCurrencyId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } - /** - * @return Attribute - */ protected function userRate(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, ); } } diff --git a/app/Models/GroupMembership.php b/app/Models/GroupMembership.php index 1af5447862..add3a01472 100644 --- a/app/Models/GroupMembership.php +++ b/app/Models/GroupMembership.php @@ -24,26 +24,30 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Carbon; /** * Class GroupMembership * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string|null $deleted_at - * @property int $user_id - * @property int $user_group_id - * @property int $user_role_id - * @property-read User $user - * @property-read UserGroup $userGroup - * @property-read UserRole $userRole + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|string $deleted_at + * @property int $user_id + * @property int $user_group_id + * @property int $user_role_id + * @property User $user + * @property UserGroup $userGroup + * @property UserRole $userRole + * * @method static Builder|GroupMembership newModelQuery() * @method static Builder|GroupMembership newQuery() * @method static Builder|GroupMembership query() @@ -54,33 +58,35 @@ use Illuminate\Support\Carbon; * @method static Builder|GroupMembership whereUserGroupId($value) * @method static Builder|GroupMembership whereUserId($value) * @method static Builder|GroupMembership whereUserRoleId($value) + * * @mixin Eloquent */ class GroupMembership extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; + protected $fillable = ['user_id', 'user_group_id', 'user_role_id']; - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return BelongsTo - */ public function userGroup(): BelongsTo { return $this->belongsTo(UserGroup::class); } - /** - * @return BelongsTo - */ public function userRole(): BelongsTo { return $this->belongsTo(UserRole::class); } + + protected function userRoleId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/InvitedUser.php b/app/Models/InvitedUser.php index b0203f49f3..2ef0a11f7b 100644 --- a/app/Models/InvitedUser.php +++ b/app/Models/InvitedUser.php @@ -26,6 +26,8 @@ namespace FireflyIII\Models; use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; @@ -35,18 +37,21 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class InvitedUser * - * @property-read User $user + * @property User $user + * * @method static Builder|InvitedUser newModelQuery() * @method static Builder|InvitedUser newQuery() * @method static Builder|InvitedUser query() + * * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at + * @property null|Carbon $created_at + * @property null|Carbon $updated_at * @property int $user_id * @property string $email * @property string $invite_code * @property Carbon $expires * @property bool $redeemed + * * @method static Builder|InvitedUser whereCreatedAt($value) * @method static Builder|InvitedUser whereEmail($value) * @method static Builder|InvitedUser whereExpires($value) @@ -55,40 +60,39 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|InvitedUser whereRedeemed($value) * @method static Builder|InvitedUser whereUpdatedAt($value) * @method static Builder|InvitedUser whereUserId($value) + * * @mixin Eloquent */ class InvitedUser extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; + protected $casts = [ - 'expires' => 'datetime', - 'redeemed' => 'boolean', - ]; + 'expires' => 'datetime', + 'redeemed' => 'boolean', + ]; protected $fillable = ['user_id', 'email', 'invite_code', 'expires', 'redeemed']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). - * - * @param string $value - * - * @return InvitedUser */ - public static function routeBinder(string $value): InvitedUser + public static function routeBinder(string $value): self { if (auth()->check()) { $attemptId = (int)$value; - /** @var InvitedUser $attempt */ - $attempt = self::find($attemptId); + + /** @var null|InvitedUser $attempt */ + $attempt = self::find($attemptId); if (null !== $attempt) { return $attempt; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); diff --git a/app/Models/LinkType.php b/app/Models/LinkType.php index 1703672153..f08edd46c8 100644 --- a/app/Models/LinkType.php +++ b/app/Models/LinkType.php @@ -23,32 +23,34 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\LinkType * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property string $name - * @property string $outward - * @property string $inward - * @property int $journalCount - * @property bool $editable - * @property-read Collection|TransactionJournalLink[] $transactionJournalLinks - * @property-read int|null $transaction_journal_links_count + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property string $name + * @property string $outward + * @property string $inward + * @property int $journalCount + * @property bool $editable + * @property Collection|TransactionJournalLink[] $transactionJournalLinks + * @property null|int $transaction_journal_links_count + * * @method static \Illuminate\Database\Eloquent\Builder|LinkType newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|LinkType newQuery() - * @method static Builder|LinkType onlyTrashed() + * @method static Builder|LinkType onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|LinkType query() * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereDeletedAt($value) @@ -58,40 +60,32 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereOutward($value) * @method static \Illuminate\Database\Eloquent\Builder|LinkType whereUpdatedAt($value) - * @method static Builder|LinkType withTrashed() - * @method static Builder|LinkType withoutTrashed() + * @method static Builder|LinkType withTrashed() + * @method static Builder|LinkType withoutTrashed() + * * @mixin Eloquent */ class LinkType extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'editable' => 'boolean', - ]; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'editable' => 'boolean', + ]; - /** @var array Fields that can be filled */ protected $fillable = ['name', 'inward', 'outward', 'editable']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return LinkType - * * @throws NotFoundHttpException */ - public static function routeBinder(string $value): LinkType + public static function routeBinder(string $value): self { if (auth()->check()) { $linkTypeId = (int)$value; @@ -100,12 +94,10 @@ class LinkType extends Model return $linkType; } } + throw new NotFoundHttpException(); } - /** - * @return HasMany - */ public function transactionJournalLinks(): HasMany { return $this->hasMany(TransactionJournalLink::class); diff --git a/app/Models/Location.php b/app/Models/Location.php index 76ea452351..4b0d913db2 100644 --- a/app/Models/Location.php +++ b/app/Models/Location.php @@ -24,29 +24,32 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphTo; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\Location * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $locatable_id - * @property string $locatable_type - * @property float|null $latitude - * @property float|null $longitude - * @property int|null $zoom_level - * @property-read Collection|Account[] $accounts - * @property-read int|null $accounts_count - * @property-read Model|Eloquent $locatable + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $locatable_id + * @property string $locatable_type + * @property null|float $latitude + * @property null|float $longitude + * @property null|int $zoom_level + * @property Account[]|Collection $accounts + * @property null|int $accounts_count + * @property \Eloquent|Model $locatable + * * @method static Builder|Location newModelQuery() * @method static Builder|Location newQuery() * @method static Builder|Location query() @@ -59,33 +62,30 @@ use Illuminate\Support\Carbon; * @method static Builder|Location whereLongitude($value) * @method static Builder|Location whereUpdatedAt($value) * @method static Builder|Location whereZoomLevel($value) + * + * @property Collection $transactionJournals + * @property null|int $transaction_journals_count + * * @mixin Eloquent */ class Location extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ + use ReturnsIntegerIdTrait; + protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'zoomLevel' => 'int', - 'latitude' => 'float', - 'longitude' => 'float', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'zoomLevel' => 'int', + 'latitude' => 'float', + 'longitude' => 'float', + ]; + protected $fillable = ['locatable_id', 'locatable_type', 'latitude', 'longitude', 'zoom_level']; /** * Add rules for locations. - * - * @param array $rules - * - * @return array */ public static function requestRules(array $rules): array { @@ -96,22 +96,28 @@ class Location extends Model return $rules; } - /** - * Get all the accounts. - */ public function accounts(): MorphMany { - return $this->morphMany(Account::class, 'noteable'); + return $this->morphMany(Account::class, 'locatable'); } /** * Get all the owning attachable models. - * - * - * @return MorphTo */ public function locatable(): MorphTo { return $this->morphTo(); } + + public function transactionJournals(): MorphMany + { + return $this->morphMany(TransactionJournal::class, 'locatable'); + } + + protected function locatableId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/Note.php b/app/Models/Note.php index 1a8a2cab11..d3238150da 100644 --- a/app/Models/Note.php +++ b/app/Models/Note.php @@ -23,28 +23,31 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\Note * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $noteable_id - * @property string $noteable_type - * @property string|null $title - * @property string|null $text - * @property-read Model|Eloquent $noteable + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $noteable_id + * @property string $noteable_type + * @property null|string $title + * @property null|string $text + * @property \Eloquent|Model $noteable + * * @method static \Illuminate\Database\Eloquent\Builder|Note newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Note newQuery() - * @method static Builder|Note onlyTrashed() + * @method static Builder|Note onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Note query() * @method static \Illuminate\Database\Eloquent\Builder|Note whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Note whereDeletedAt($value) @@ -54,34 +57,37 @@ use Illuminate\Support\Carbon; * @method static \Illuminate\Database\Eloquent\Builder|Note whereText($value) * @method static \Illuminate\Database\Eloquent\Builder|Note whereTitle($value) * @method static \Illuminate\Database\Eloquent\Builder|Note whereUpdatedAt($value) - * @method static Builder|Note withTrashed() - * @method static Builder|Note withoutTrashed() + * @method static Builder|Note withTrashed() + * @method static Builder|Note withoutTrashed() + * * @mixin Eloquent */ class Note extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + ]; + protected $fillable = ['title', 'text', 'noteable_id', 'noteable_type']; /** - * * Get all the owning noteable models. */ public function noteable(): MorphTo { return $this->morphTo(); } + + protected function noteableId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/ObjectGroup.php b/app/Models/ObjectGroup.php index af3b8e813b..bd5d2ba832 100644 --- a/app/Models/ObjectGroup.php +++ b/app/Models/ObjectGroup.php @@ -24,33 +24,37 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphToMany; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\ObjectGroup * - * @property int $id - * @property int $user_id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property string $title - * @property int $order - * @property-read Collection|Account[] $accounts - * @property-read int|null $accounts_count - * @property-read Collection|Bill[] $bills - * @property-read int|null $bills_count - * @property-read Collection|PiggyBank[] $piggyBanks - * @property-read int|null $piggy_banks_count - * @property-read User $user + * @property int $id + * @property int $user_id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property string $title + * @property int $order + * @property Account[]|Collection $accounts + * @property null|int $accounts_count + * @property Bill[]|Collection $bills + * @property null|int $bills_count + * @property Collection|PiggyBank[] $piggyBanks + * @property null|int $piggy_banks_count + * @property User $user + * * @method static Builder|ObjectGroup newModelQuery() * @method static Builder|ObjectGroup newQuery() * @method static Builder|ObjectGroup query() @@ -61,51 +65,49 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|ObjectGroup whereTitle($value) * @method static Builder|ObjectGroup whereUpdatedAt($value) * @method static Builder|ObjectGroup whereUserId($value) - * @property int|null $user_group_id + * + * @property int $user_group_id + * * @method static Builder|ObjectGroup whereUserGroupId($value) + * * @mixin Eloquent */ class ObjectGroup extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; + protected $casts = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'user_id' => 'integer', - 'deleted_at' => 'datetime', - ]; + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'user_id' => 'integer', + 'deleted_at' => 'datetime', + ]; protected $fillable = ['title', 'order', 'user_id', 'user_group_id']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return ObjectGroup * @throws NotFoundHttpException */ - public static function routeBinder(string $value): ObjectGroup + public static function routeBinder(string $value): self { if (auth()->check()) { $objectGroupId = (int)$value; - /** @var ObjectGroup $objectGroup */ - $objectGroup = self::where('object_groups.id', $objectGroupId) - ->where('object_groups.user_id', auth()->user()->id)->first(); + + /** @var null|ObjectGroup $objectGroup */ + $objectGroup = self::where('object_groups.id', $objectGroupId) + ->where('object_groups.user_id', auth()->user()->id)->first() + ; if (null !== $objectGroup) { return $objectGroup; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); @@ -134,4 +136,11 @@ class ObjectGroup extends Model { return $this->morphedByMany(PiggyBank::class, 'object_groupable'); } + + protected function order(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/PiggyBank.php b/app/Models/PiggyBank.php index 47c5aa6de0..912748415f 100644 --- a/app/Models/PiggyBank.php +++ b/app/Models/PiggyBank.php @@ -23,47 +23,50 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphMany; +use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\PiggyBank * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $account_id - * @property string $name - * @property string $targetamount - * @property Carbon|null $startdate - * @property Carbon|null $targetdate - * @property int $order - * @property bool $active - * @property bool $encrypted - * @property-read Account $account - * @property-read Collection|Attachment[] $attachments - * @property-read int|null $attachments_count - * @property-read Collection|Note[] $notes - * @property-read int|null $notes_count - * @property-read Collection|ObjectGroup[] $objectGroups - * @property-read int|null $object_groups_count - * @property-read Collection|PiggyBankEvent[] $piggyBankEvents - * @property-read int|null $piggy_bank_events_count - * @property-read Collection|PiggyBankRepetition[] $piggyBankRepetitions - * @property-read int|null $piggy_bank_repetitions_count + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $account_id + * @property string $name + * @property string $targetamount + * @property null|Carbon $startdate + * @property null|Carbon $targetdate + * @property int $order + * @property bool $active + * @property bool $encrypted + * @property Account $account + * @property Attachment[]|Collection $attachments + * @property null|int $attachments_count + * @property Collection|Note[] $notes + * @property null|int $notes_count + * @property Collection|ObjectGroup[] $objectGroups + * @property null|int $object_groups_count + * @property Collection|PiggyBankEvent[] $piggyBankEvents + * @property null|int $piggy_bank_events_count + * @property Collection|PiggyBankRepetition[] $piggyBankRepetitions + * @property null|int $piggy_bank_repetitions_count + * * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank newQuery() - * @method static Builder|PiggyBank onlyTrashed() + * @method static Builder|PiggyBank onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank query() * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereAccountId($value) * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereActive($value) @@ -77,75 +80,65 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereTargetamount($value) * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereTargetdate($value) * @method static \Illuminate\Database\Eloquent\Builder|PiggyBank whereUpdatedAt($value) - * @method static Builder|PiggyBank withTrashed() - * @method static Builder|PiggyBank withoutTrashed() + * @method static Builder|PiggyBank withTrashed() + * @method static Builder|PiggyBank withoutTrashed() + * * @mixin Eloquent */ class PiggyBank extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - /** - * The attributes that should be cast to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'startdate' => 'date', - 'targetdate' => 'date', - 'order' => 'int', - 'active' => 'boolean', - 'encrypted' => 'boolean', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'startdate' => 'date', + 'targetdate' => 'date', + 'order' => 'int', + 'active' => 'boolean', + 'encrypted' => 'boolean', + ]; + protected $fillable = ['name', 'account_id', 'order', 'targetamount', 'startdate', 'targetdate', 'active']; - /** @var array Hidden from view */ - protected $hidden = ['targetamount_encrypted', 'encrypted']; + + protected $hidden = ['targetamount_encrypted', 'encrypted']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return PiggyBank * @throws NotFoundHttpException */ - public static function routeBinder(string $value): PiggyBank + public static function routeBinder(string $value): self { if (auth()->check()) { $piggyBankId = (int)$value; $piggyBank = self::where('piggy_banks.id', $piggyBankId) - ->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id') - ->where('accounts.user_id', auth()->user()->id)->first(['piggy_banks.*']); + ->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id') + ->where('accounts.user_id', auth()->user()->id)->first(['piggy_banks.*']) + ; if (null !== $piggyBank) { return $piggyBank; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function account(): BelongsTo { return $this->belongsTo(Account::class); } - /** - * @return MorphMany - */ public function attachments(): MorphMany { return $this->morphMany(Attachment::class, 'attachable'); } /** - * Get all of the piggy bank's notes. + * Get all the piggy bank's notes. */ public function notes(): MorphMany { @@ -155,29 +148,22 @@ class PiggyBank extends Model /** * Get all the tags for the post. */ - public function objectGroups() + public function objectGroups(): MorphToMany { return $this->morphToMany(ObjectGroup::class, 'object_groupable'); } - /** - * @return HasMany - */ public function piggyBankEvents(): HasMany { return $this->hasMany(PiggyBankEvent::class); } - /** - * @return HasMany - */ public function piggyBankRepetitions(): HasMany { return $this->hasMany(PiggyBankRepetition::class); } /** - * * @param mixed $value */ public function setTargetamountAttribute($value): void @@ -185,15 +171,27 @@ class PiggyBank extends Model $this->attributes['targetamount'] = (string)$value; } + protected function accountId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function order(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + /** * Get the max amount - * - * @return Attribute */ protected function targetamount(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, ); } } diff --git a/app/Models/PiggyBankEvent.php b/app/Models/PiggyBankEvent.php index 8334aac725..75eef73b50 100644 --- a/app/Models/PiggyBankEvent.php +++ b/app/Models/PiggyBankEvent.php @@ -23,25 +23,27 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\PiggyBankEvent * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property int $piggy_bank_id - * @property int|null $transaction_journal_id - * @property Carbon $date - * @property string $amount - * @property PiggyBank $piggyBank - * @property-read TransactionJournal|null $transactionJournal + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property int $piggy_bank_id + * @property null|int $transaction_journal_id + * @property Carbon $date + * @property string $amount + * @property PiggyBank $piggyBank + * @property null|TransactionJournal $transactionJournal + * * @method static Builder|PiggyBankEvent newModelQuery() * @method static Builder|PiggyBankEvent newQuery() * @method static Builder|PiggyBankEvent query() @@ -52,36 +54,30 @@ use Illuminate\Support\Carbon; * @method static Builder|PiggyBankEvent wherePiggyBankId($value) * @method static Builder|PiggyBankEvent whereTransactionJournalId($value) * @method static Builder|PiggyBankEvent whereUpdatedAt($value) + * * @mixin Eloquent */ class PiggyBankEvent extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ - protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'date' => 'date', - ]; - /** @var array Fields that can be filled */ - protected $fillable = ['piggy_bank_id', 'transaction_journal_id', 'date', 'amount']; - /** @var array Hidden from view */ - protected $hidden = ['amount_encrypted']; + use ReturnsIntegerIdTrait; + + protected $casts + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'date' => 'date', + ]; + + protected $fillable = ['piggy_bank_id', 'transaction_journal_id', 'date', 'amount']; + + protected $hidden = ['amount_encrypted']; - /** - * @return BelongsTo - */ public function piggyBank(): BelongsTo { return $this->belongsTo(PiggyBank::class); } /** - * * @param mixed $value */ public function setAmountAttribute($value): void @@ -89,9 +85,6 @@ class PiggyBankEvent extends Model $this->attributes['amount'] = (string)$value; } - /** - * @return BelongsTo - */ public function transactionJournal(): BelongsTo { return $this->belongsTo(TransactionJournal::class); @@ -99,13 +92,18 @@ class PiggyBankEvent extends Model /** * Get the amount - * - * @return Attribute */ protected function amount(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, + ); + } + + protected function piggyBankId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } } diff --git a/app/Models/PiggyBankRepetition.php b/app/Models/PiggyBankRepetition.php index c00650b38c..5926e1a7bc 100644 --- a/app/Models/PiggyBankRepetition.php +++ b/app/Models/PiggyBankRepetition.php @@ -25,6 +25,7 @@ namespace FireflyIII\Models; use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; @@ -33,14 +34,15 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * FireflyIII\Models\PiggyBankRepetition * - * @property int $id - * @property \Illuminate\Support\Carbon|null $created_at - * @property \Illuminate\Support\Carbon|null $updated_at - * @property int $piggy_bank_id - * @property \Illuminate\Support\Carbon|null $startdate - * @property \Illuminate\Support\Carbon|null $targetdate - * @property string $currentamount - * @property-read PiggyBank $piggyBank + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property int $piggy_bank_id + * @property null|Carbon $startdate + * @property null|Carbon $targetdate + * @property string $currentamount + * @property PiggyBank $piggyBank + * * @method static EloquentBuilder|PiggyBankRepetition newModelQuery() * @method static EloquentBuilder|PiggyBankRepetition newQuery() * @method static EloquentBuilder|PiggyBankRepetition onDates(Carbon $start, Carbon $target) @@ -53,71 +55,54 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; * @method static EloquentBuilder|PiggyBankRepetition whereStartdate($value) * @method static EloquentBuilder|PiggyBankRepetition whereTargetdate($value) * @method static EloquentBuilder|PiggyBankRepetition whereUpdatedAt($value) + * * @mixin Eloquent */ class PiggyBankRepetition extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ + use ReturnsIntegerIdTrait; + protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'startdate' => 'date', - 'targetdate' => 'date', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'startdate' => 'date', + 'targetdate' => 'date', + ]; + protected $fillable = ['piggy_bank_id', 'startdate', 'targetdate', 'currentamount']; - /** - * @return BelongsTo - */ public function piggyBank(): BelongsTo { return $this->belongsTo(PiggyBank::class); } - /** - * - * @param EloquentBuilder $query - * @param Carbon $start - * @param Carbon $target - * - * @return EloquentBuilder - */ public function scopeOnDates(EloquentBuilder $query, Carbon $start, Carbon $target): EloquentBuilder { return $query->where('startdate', $start->format('Y-m-d'))->where('targetdate', $target->format('Y-m-d')); } /** - * - * @param EloquentBuilder $query - * @param Carbon $date - * * @return EloquentBuilder */ public function scopeRelevantOnDate(EloquentBuilder $query, Carbon $date) { return $query->where( - function (EloquentBuilder $q) use ($date) { + static function (EloquentBuilder $q) use ($date): void { $q->where('startdate', '<=', $date->format('Y-m-d 00:00:00')); $q->orWhereNull('startdate'); } ) - ->where( - function (EloquentBuilder $q) use ($date) { - $q->where('targetdate', '>=', $date->format('Y-m-d 00:00:00')); - $q->orWhereNull('targetdate'); - } - ); + ->where( + static function (EloquentBuilder $q) use ($date): void { + $q->where('targetdate', '>=', $date->format('Y-m-d 00:00:00')); + $q->orWhereNull('targetdate'); + } + ) + ; } /** - * * @param mixed $value */ public function setCurrentamountAttribute($value): void @@ -127,13 +112,18 @@ class PiggyBankRepetition extends Model /** * Get the amount - * - * @return Attribute */ protected function currentamount(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, + ); + } + + protected function piggyBankId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } } diff --git a/app/Models/Preference.php b/app/Models/Preference.php index e83e2e60d1..005c9769f8 100644 --- a/app/Models/Preference.php +++ b/app/Models/Preference.php @@ -23,24 +23,27 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\Preference * * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at + * @property null|Carbon $created_at + * @property null|Carbon $updated_at * @property int $user_id * @property string $name - * @property int|string|array|null $data - * @property-read User $user + * @property null|array|int|string $data + * @property User $user + * * @method static Builder|Preference newModelQuery() * @method static Builder|Preference newQuery() * @method static Builder|Preference query() @@ -50,39 +53,35 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|Preference whereName($value) * @method static Builder|Preference whereUpdatedAt($value) * @method static Builder|Preference whereUserId($value) + * * @mixin Eloquent */ class Preference extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ - protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'data' => 'array', - ]; + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; + + protected $casts + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'data' => 'array', + ]; - /** @var array Fields that can be filled */ protected $fillable = ['user_id', 'data', 'name']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return Preference * @throws NotFoundHttpException */ - public static function routeBinder(string $value): Preference + public static function routeBinder(string $value): self { if (auth()->check()) { /** @var User $user */ - $user = auth()->user(); - /** @var Preference|null $preference */ + $user = auth()->user(); + + /** @var null|Preference $preference */ $preference = $user->preferences()->where('name', $value)->first(); if (null === $preference) { $preference = $user->preferences()->where('id', (int)$value)->first(); @@ -90,23 +89,21 @@ class Preference extends Model if (null !== $preference) { return $preference; } - $default = config('firefly.default_preferences'); + $default = config('firefly.default_preferences'); if (array_key_exists($value, $default)) { - $preference = new Preference(); + $preference = new self(); $preference->name = $value; $preference->data = $default[$value]; - $preference->user_id = $user->id; + $preference->user_id = (int)$user->id; $preference->save(); return $preference; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); diff --git a/app/Models/Recurrence.php b/app/Models/Recurrence.php index df6f6f21a3..7b9756c31b 100644 --- a/app/Models/Recurrence.php +++ b/app/Models/Recurrence.php @@ -23,8 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -32,42 +36,42 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\Recurrence * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property int $transaction_type_id - * @property string $title - * @property string $description - * @property Carbon $first_date - * @property Carbon|null $repeat_until - * @property Carbon|null $latest_date - * @property int $repetitions - * @property bool $apply_rules - * @property bool $active - * @property-read Collection|Attachment[] $attachments - * @property-read int|null $attachments_count - * @property-read Collection|Note[] $notes - * @property-read int|null $notes_count - * @property-read Collection|RecurrenceMeta[] $recurrenceMeta - * @property-read int|null $recurrence_meta_count - * @property-read Collection|RecurrenceRepetition[] $recurrenceRepetitions - * @property-read int|null $recurrence_repetitions_count - * @property-read Collection|RecurrenceTransaction[] $recurrenceTransactions - * @property-read int|null $recurrence_transactions_count - * @property-read TransactionCurrency $transactionCurrency - * @property-read TransactionType $transactionType - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property int $transaction_type_id + * @property string $title + * @property string $description + * @property null|Carbon $first_date + * @property null|Carbon $repeat_until + * @property null|Carbon $latest_date + * @property int|string $repetitions + * @property bool $apply_rules + * @property bool $active + * @property Attachment[]|Collection $attachments + * @property null|int $attachments_count + * @property Collection|Note[] $notes + * @property null|int $notes_count + * @property Collection|RecurrenceMeta[] $recurrenceMeta + * @property null|int $recurrence_meta_count + * @property Collection|RecurrenceRepetition[] $recurrenceRepetitions + * @property null|int $recurrence_repetitions_count + * @property Collection|RecurrenceTransaction[] $recurrenceTransactions + * @property null|int $recurrence_transactions_count + * @property TransactionCurrency $transactionCurrency + * @property TransactionType $transactionType + * @property User $user + * * @method static \Illuminate\Database\Eloquent\Builder|Recurrence newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Recurrence newQuery() - * @method static Builder|Recurrence onlyTrashed() + * @method static Builder|Recurrence onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Recurrence query() * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereActive($value) * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereApplyRules($value) @@ -83,76 +87,71 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereTransactionTypeId($value) * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereUserId($value) - * @method static Builder|Recurrence withTrashed() - * @method static Builder|Recurrence withoutTrashed() - * @property int|null $user_group_id + * @method static Builder|Recurrence withTrashed() + * @method static Builder|Recurrence withoutTrashed() + * + * @property int $user_group_id + * * @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereUserGroupId($value) + * * @mixin Eloquent */ class Recurrence extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'title' => 'string', - 'id' => 'int', - 'description' => 'string', - 'first_date' => 'date', - 'repeat_until' => 'date', - 'latest_date' => 'date', - 'repetitions' => 'int', - 'active' => 'bool', - 'apply_rules' => 'bool', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'title' => 'string', + 'id' => 'int', + 'description' => 'string', + 'first_date' => 'date', + 'repeat_until' => 'date', + 'latest_date' => 'date', + 'repetitions' => 'int', + 'active' => 'bool', + 'apply_rules' => 'bool', + ]; + protected $fillable - = ['user_id', 'transaction_type_id', 'title', 'description', 'first_date', 'repeat_until', 'latest_date', 'repetitions', 'apply_rules', 'active']; + = ['user_id', 'transaction_type_id', 'title', 'description', 'first_date', 'repeat_until', 'latest_date', 'repetitions', 'apply_rules', 'active']; + /** @var string The table to store the data in */ protected $table = 'recurrences'; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return Recurrence * @throws NotFoundHttpException */ - public static function routeBinder(string $value): Recurrence + public static function routeBinder(string $value): self { if (auth()->check()) { $recurrenceId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var Recurrence $recurrence */ - $recurrence = $user->recurrences()->find($recurrenceId); + $user = auth()->user(); + + /** @var null|Recurrence $recurrence */ + $recurrence = $user->recurrences()->find($recurrenceId); if (null !== $recurrence) { return $recurrence; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return MorphMany - */ public function attachments(): MorphMany { return $this->morphMany(Attachment::class, 'attachable'); @@ -166,43 +165,35 @@ class Recurrence extends Model return $this->morphMany(Note::class, 'noteable'); } - /** - * @return HasMany - */ public function recurrenceMeta(): HasMany { return $this->hasMany(RecurrenceMeta::class); } - /** - * @return HasMany - */ public function recurrenceRepetitions(): HasMany { return $this->hasMany(RecurrenceRepetition::class); } - /** - * @return HasMany - */ public function recurrenceTransactions(): HasMany { return $this->hasMany(RecurrenceTransaction::class); } - /** - * @return BelongsTo - */ public function transactionCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class); } - /** - * @return BelongsTo - */ public function transactionType(): BelongsTo { return $this->belongsTo(TransactionType::class); } + + protected function transactionTypeId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/RecurrenceMeta.php b/app/Models/RecurrenceMeta.php index d5e764fb61..d7bd0c060d 100644 --- a/app/Models/RecurrenceMeta.php +++ b/app/Models/RecurrenceMeta.php @@ -23,27 +23,30 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\RecurrenceMeta * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $recurrence_id - * @property string $name - * @property mixed $value - * @property-read Recurrence $recurrence + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $recurrence_id + * @property string $name + * @property mixed $value + * @property Recurrence $recurrence + * * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta newQuery() - * @method static Builder|RecurrenceMeta onlyTrashed() + * @method static Builder|RecurrenceMeta onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta query() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereDeletedAt($value) @@ -52,37 +55,39 @@ use Illuminate\Support\Carbon; * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereRecurrenceId($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceMeta whereValue($value) - * @method static Builder|RecurrenceMeta withTrashed() - * @method static Builder|RecurrenceMeta withoutTrashed() + * @method static Builder|RecurrenceMeta withTrashed() + * @method static Builder|RecurrenceMeta withoutTrashed() + * * @mixin Eloquent */ class RecurrenceMeta extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'name' => 'string', - 'value' => 'string', - ]; - /** @var array Fields that can be filled */ - protected $fillable = ['recurrence_id', 'name', 'value']; - /** @var string The table to store the data in */ - protected $table = 'recurrences_meta'; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'name' => 'string', + 'value' => 'string', + ]; + + protected $fillable = ['recurrence_id', 'name', 'value']; + + /** @var string The table to store the data in */ + protected $table = 'recurrences_meta'; - /** - * @return BelongsTo - */ public function recurrence(): BelongsTo { return $this->belongsTo(Recurrence::class); } + + protected function recurrenceId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/RecurrenceRepetition.php b/app/Models/RecurrenceRepetition.php index 8e8970e4a3..efcb09c1b4 100644 --- a/app/Models/RecurrenceRepetition.php +++ b/app/Models/RecurrenceRepetition.php @@ -23,29 +23,32 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\RecurrenceRepetition * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $recurrence_id - * @property string $repetition_type - * @property string $repetition_moment - * @property int $repetition_skip - * @property int $weekend - * @property-read Recurrence $recurrence + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $recurrence_id + * @property string $repetition_type + * @property string $repetition_moment + * @property int $repetition_skip + * @property int $weekend + * @property Recurrence $recurrence + * * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition newQuery() - * @method static Builder|RecurrenceRepetition onlyTrashed() + * @method static Builder|RecurrenceRepetition onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition query() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereDeletedAt($value) @@ -56,44 +59,60 @@ use Illuminate\Support\Carbon; * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereRepetitionType($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceRepetition whereWeekend($value) - * @method static Builder|RecurrenceRepetition withTrashed() - * @method static Builder|RecurrenceRepetition withoutTrashed() + * @method static Builder|RecurrenceRepetition withTrashed() + * @method static Builder|RecurrenceRepetition withoutTrashed() + * * @mixin Eloquent */ class RecurrenceRepetition extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - public const WEEKEND_DO_NOTHING = 1; - public const WEEKEND_SKIP_CREATION = 2; - public const WEEKEND_TO_FRIDAY = 3; - public const WEEKEND_TO_MONDAY = 4; + public const int WEEKEND_DO_NOTHING = 1; + public const int WEEKEND_SKIP_CREATION = 2; + public const int WEEKEND_TO_FRIDAY = 3; + public const int WEEKEND_TO_MONDAY = 4; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'repetition_type' => 'string', - 'repetition_moment' => 'string', - 'repetition_skip' => 'int', - 'weekend' => 'int', - ]; - /** @var array Fields that can be filled */ - protected $fillable = ['recurrence_id', 'weekend', 'repetition_type', 'repetition_moment', 'repetition_skip']; - /** @var string The table to store the data in */ - protected $table = 'recurrences_repetitions'; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'repetition_type' => 'string', + 'repetition_moment' => 'string', + 'repetition_skip' => 'int', + 'weekend' => 'int', + ]; + + protected $fillable = ['recurrence_id', 'weekend', 'repetition_type', 'repetition_moment', 'repetition_skip']; + + /** @var string The table to store the data in */ + protected $table = 'recurrences_repetitions'; - /** - * @return BelongsTo - */ public function recurrence(): BelongsTo { return $this->belongsTo(Recurrence::class); } + + protected function recurrenceId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function repetitionSkip(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function weekend(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/RecurrenceTransaction.php b/app/Models/RecurrenceTransaction.php index e7911de4a7..f3bf0a5791 100644 --- a/app/Models/RecurrenceTransaction.php +++ b/app/Models/RecurrenceTransaction.php @@ -23,7 +23,9 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; @@ -31,33 +33,33 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\RecurrenceTransaction * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $recurrence_id - * @property int $transaction_currency_id - * @property int|null $foreign_currency_id - * @property int $source_id - * @property int $destination_id - * @property string $amount - * @property string|null $foreign_amount - * @property string $description - * @property-read Account $destinationAccount - * @property-read TransactionCurrency|null $foreignCurrency - * @property-read Recurrence $recurrence - * @property-read Collection|RecurrenceTransactionMeta[] $recurrenceTransactionMeta - * @property-read int|null $recurrence_transaction_meta_count - * @property-read Account $sourceAccount - * @property-read TransactionCurrency $transactionCurrency + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $recurrence_id + * @property int $transaction_currency_id + * @property null|int|string $foreign_currency_id + * @property int $source_id + * @property int $destination_id + * @property string $amount + * @property string $foreign_amount + * @property string $description + * @property Account $destinationAccount + * @property null|TransactionCurrency $foreignCurrency + * @property Recurrence $recurrence + * @property Collection|RecurrenceTransactionMeta[] $recurrenceTransactionMeta + * @property null|int $recurrence_transaction_meta_count + * @property Account $sourceAccount + * @property TransactionCurrency $transactionCurrency + * * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction newQuery() - * @method static Builder|RecurrenceTransaction onlyTrashed() + * @method static Builder|RecurrenceTransaction onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction query() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereCreatedAt($value) @@ -71,119 +73,128 @@ use Illuminate\Support\Carbon; * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereSourceId($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereTransactionCurrencyId($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereUpdatedAt($value) - * @method static Builder|RecurrenceTransaction withTrashed() - * @method static Builder|RecurrenceTransaction withoutTrashed() - * @property int|null $transaction_type_id + * @method static Builder|RecurrenceTransaction withTrashed() + * @method static Builder|RecurrenceTransaction withoutTrashed() + * + * @property null|int $transaction_type_id + * * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereTransactionTypeId($value) - * @property-read TransactionType|null $transactionType + * + * @property null|TransactionType $transactionType + * * @mixin Eloquent */ class RecurrenceTransaction extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'amount' => 'string', - 'foreign_amount' => 'string', - 'description' => 'string', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'amount' => 'string', + 'foreign_amount' => 'string', + 'description' => 'string', + ]; + protected $fillable - = [ - 'recurrence_id', - 'transaction_currency_id', - 'foreign_currency_id', - 'source_id', - 'destination_id', - 'amount', - 'foreign_amount', - 'description', - ]; + = [ + 'recurrence_id', + 'transaction_currency_id', + 'foreign_currency_id', + 'source_id', + 'destination_id', + 'amount', + 'foreign_amount', + 'description', + ]; + /** @var string The table to store the data in */ protected $table = 'recurrences_transactions'; - /** - * @return BelongsTo - */ public function destinationAccount(): BelongsTo { return $this->belongsTo(Account::class, 'destination_id'); } - /** - * @return BelongsTo - */ public function foreignCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class); } - /** - * @return BelongsTo - */ public function recurrence(): BelongsTo { return $this->belongsTo(Recurrence::class); } - /** - * @return HasMany - */ public function recurrenceTransactionMeta(): HasMany { return $this->hasMany(RecurrenceTransactionMeta::class, 'rt_id'); } - /** - * @return BelongsTo - */ public function sourceAccount(): BelongsTo { return $this->belongsTo(Account::class, 'source_id'); } - /** - * @return BelongsTo - */ public function transactionCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class); } - /** - * @return BelongsTo - */ public function transactionType(): BelongsTo { return $this->belongsTo(TransactionType::class); } - /** - * @return Attribute - */ protected function amount(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, + ); + } + + protected function destinationId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } - /** - * @return Attribute - */ protected function foreignAmount(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, + ); + } + + protected function recurrenceId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function sourceId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function transactionCurrencyId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function userId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } } diff --git a/app/Models/RecurrenceTransactionMeta.php b/app/Models/RecurrenceTransactionMeta.php index c290cba2fb..e0a60d4163 100644 --- a/app/Models/RecurrenceTransactionMeta.php +++ b/app/Models/RecurrenceTransactionMeta.php @@ -23,27 +23,30 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\RecurrenceTransactionMeta * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $rt_id - * @property string $name - * @property mixed $value - * @property-read RecurrenceTransaction $recurrenceTransaction + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int|string $rt_id + * @property string $name + * @property mixed $value + * @property RecurrenceTransaction $recurrenceTransaction + * * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta newQuery() - * @method static Builder|RecurrenceTransactionMeta onlyTrashed() + * @method static Builder|RecurrenceTransactionMeta onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta query() * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereDeletedAt($value) @@ -52,37 +55,39 @@ use Illuminate\Support\Carbon; * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereRtId($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransactionMeta whereValue($value) - * @method static Builder|RecurrenceTransactionMeta withTrashed() - * @method static Builder|RecurrenceTransactionMeta withoutTrashed() + * @method static Builder|RecurrenceTransactionMeta withTrashed() + * @method static Builder|RecurrenceTransactionMeta withoutTrashed() + * * @mixin Eloquent */ class RecurrenceTransactionMeta extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'name' => 'string', - 'value' => 'string', - ]; - /** @var array Fields that can be filled */ - protected $fillable = ['rt_id', 'name', 'value']; - /** @var string The table to store the data in */ - protected $table = 'rt_meta'; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'name' => 'string', + 'value' => 'string', + ]; + + protected $fillable = ['rt_id', 'name', 'value']; + + /** @var string The table to store the data in */ + protected $table = 'rt_meta'; - /** - * @return BelongsTo - */ public function recurrenceTransaction(): BelongsTo { return $this->belongsTo(RecurrenceTransaction::class, 'rt_id'); } + + protected function rtId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/Role.php b/app/Models/Role.php index d9cb20b297..b356c6fc15 100644 --- a/app/Models/Role.php +++ b/app/Models/Role.php @@ -23,25 +23,27 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\Role * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string $name - * @property string|null $display_name - * @property string|null $description - * @property-read Collection|User[] $users - * @property-read int|null $users_count + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property string $name + * @property null|string $display_name + * @property null|string $description + * @property Collection|User[] $users + * @property null|int $users_count + * * @method static Builder|Role newModelQuery() * @method static Builder|Role newQuery() * @method static Builder|Role query() @@ -51,27 +53,21 @@ use Illuminate\Support\Carbon; * @method static Builder|Role whereId($value) * @method static Builder|Role whereName($value) * @method static Builder|Role whereUpdatedAt($value) + * * @mixin Eloquent */ class Role extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ - protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - ]; + use ReturnsIntegerIdTrait; + + protected $casts + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + ]; - /** @var array Fields that can be filled */ protected $fillable = ['name', 'display_name', 'description']; - /** - * @return BelongsToMany - */ public function users(): BelongsToMany { return $this->belongsToMany(User::class); diff --git a/app/Models/Rule.php b/app/Models/Rule.php index 7c499ad0d9..8ccc7c44bc 100644 --- a/app/Models/Rule.php +++ b/app/Models/Rule.php @@ -23,42 +23,46 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\Rule * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property int $rule_group_id - * @property string $title - * @property string|null $description - * @property int $order - * @property bool $active - * @property bool $stop_processing - * @property bool $strict - * @property-read string $action_value - * @property-read Collection|RuleAction[] $ruleActions - * @property-read int|null $rule_actions_count - * @property-read RuleGroup $ruleGroup - * @property Collection|RuleTrigger[] $ruleTriggers - * @property-read int|null $rule_triggers_count - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property int $rule_group_id + * @property string $title + * @property null|string $description + * @property int $order + * @property bool $active + * @property bool $stop_processing + * @property bool $strict + * @property string $action_value + * @property Collection|RuleAction[] $ruleActions + * @property null|int $rule_actions_count + * @property RuleGroup $ruleGroup + * @property Collection|RuleTrigger[] $ruleTriggers + * @property null|int $rule_triggers_count + * @property User $user + * * @method static \Illuminate\Database\Eloquent\Builder|Rule newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Rule newQuery() - * @method static Builder|Rule onlyTrashed() + * @method static Builder|Rule onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Rule query() * @method static \Illuminate\Database\Eloquent\Builder|Rule whereActive($value) * @method static \Illuminate\Database\Eloquent\Builder|Rule whereCreatedAt($value) @@ -72,78 +76,75 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|Rule whereTitle($value) * @method static \Illuminate\Database\Eloquent\Builder|Rule whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Rule whereUserId($value) - * @method static Builder|Rule withTrashed() - * @method static Builder|Rule withoutTrashed() - * @property int|null $user_group_id + * @method static Builder|Rule withTrashed() + * @method static Builder|Rule withoutTrashed() + * + * @property int $user_group_id + * * @method static \Illuminate\Database\Eloquent\Builder|Rule whereUserGroupId($value) - * @property-read UserGroup|null $userGroup + * + * @property null|UserGroup $userGroup + * * @mixin Eloquent */ class Rule extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'active' => 'boolean', - 'order' => 'int', - 'stop_processing' => 'boolean', - 'id' => 'int', - 'strict' => 'boolean', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'active' => 'boolean', + 'order' => 'int', + 'stop_processing' => 'boolean', + 'id' => 'int', + 'strict' => 'boolean', + ]; + protected $fillable = ['rule_group_id', 'order', 'active', 'title', 'description', 'user_id', 'strict']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return Rule * @throws NotFoundHttpException */ - public static function routeBinder(string $value): Rule + public static function routeBinder(string $value): self { if (auth()->check()) { $ruleId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var Rule $rule */ - $rule = $user->rules()->find($ruleId); + $user = auth()->user(); + + /** @var null|Rule $rule */ + $rule = $user->rules()->find($ruleId); if (null !== $rule) { return $rule; } } + throw new NotFoundHttpException(); } - /** - * @return HasMany - */ + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + public function ruleActions(): HasMany { return $this->hasMany(RuleAction::class); } - /** - * @return BelongsTo - */ public function ruleGroup(): BelongsTo { return $this->belongsTo(RuleGroup::class); } - /** - * @return HasMany - */ public function ruleTriggers(): HasMany { return $this->hasMany(RuleTrigger::class); @@ -151,27 +152,28 @@ class Rule extends Model /** * @param mixed $value - * - */ public function setDescriptionAttribute($value): void { $this->attributes['description'] = e($value); } - /** - * @return BelongsTo - */ - public function user(): BelongsTo - { - return $this->belongsTo(User::class); - } - - /** - * @return BelongsTo - */ public function userGroup(): BelongsTo { return $this->belongsTo(UserGroup::class); } + + protected function order(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function ruleGroupId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/RuleAction.php b/app/Models/RuleAction.php index 977aa71354..f8f8e5fe12 100644 --- a/app/Models/RuleAction.php +++ b/app/Models/RuleAction.php @@ -23,25 +23,28 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\RuleAction * * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at + * @property null|Carbon $created_at + * @property null|Carbon $updated_at * @property int $rule_id - * @property string $action_type - * @property string $action_value + * @property null|string $action_type + * @property null|string $action_value * @property int $order * @property bool $active * @property bool $stop_processing - * @property-read Rule $rule + * @property Rule $rule + * * @method static Builder|RuleAction newModelQuery() * @method static Builder|RuleAction newQuery() * @method static Builder|RuleAction query() @@ -54,32 +57,40 @@ use Illuminate\Support\Carbon; * @method static Builder|RuleAction whereRuleId($value) * @method static Builder|RuleAction whereStopProcessing($value) * @method static Builder|RuleAction whereUpdatedAt($value) + * * @mixin Eloquent */ class RuleAction extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ - protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'active' => 'boolean', - 'order' => 'int', - 'stop_processing' => 'boolean', - ]; + use ReturnsIntegerIdTrait; + + protected $casts + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'active' => 'boolean', + 'order' => 'int', + 'stop_processing' => 'boolean', + ]; - /** @var array Fields that can be filled */ protected $fillable = ['rule_id', 'action_type', 'action_value', 'order', 'active', 'stop_processing']; - /** - * @return BelongsTo - */ public function rule(): BelongsTo { return $this->belongsTo(Rule::class); } + + protected function order(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function ruleId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/RuleGroup.php b/app/Models/RuleGroup.php index ae8863fdd3..67e6c42f23 100644 --- a/app/Models/RuleGroup.php +++ b/app/Models/RuleGroup.php @@ -23,36 +23,40 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\RuleGroup * * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at * @property int $user_id - * @property string $title - * @property string|null $description + * @property null|string $title + * @property null|string $description * @property int $order * @property bool $active * @property bool $stop_processing * @property Collection|Rule[] $rules - * @property-read int|null $rules_count - * @property-read User $user + * @property null|int $rules_count + * @property User $user + * * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup newQuery() - * @method static Builder|RuleGroup onlyTrashed() + * @method static Builder|RuleGroup onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup query() * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereActive($value) * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereCreatedAt($value) @@ -64,70 +68,70 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereTitle($value) * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereUserId($value) - * @method static Builder|RuleGroup withTrashed() - * @method static Builder|RuleGroup withoutTrashed() - * @property int|null $user_group_id + * @method static Builder|RuleGroup withTrashed() + * @method static Builder|RuleGroup withoutTrashed() + * + * @property int $user_group_id + * * @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereUserGroupId($value) + * * @mixin Eloquent */ class RuleGroup extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'active' => 'boolean', - 'stop_processing' => 'boolean', - 'order' => 'int', - ]; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'active' => 'boolean', + 'stop_processing' => 'boolean', + 'order' => 'int', + ]; - /** @var array Fields that can be filled */ protected $fillable = ['user_id', 'user_group_id', 'stop_processing', 'order', 'title', 'description', 'active']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return RuleGroup * @throws NotFoundHttpException */ - public static function routeBinder(string $value): RuleGroup + public static function routeBinder(string $value): self { if (auth()->check()) { $ruleGroupId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var RuleGroup $ruleGroup */ - $ruleGroup = $user->ruleGroups()->find($ruleGroupId); + $user = auth()->user(); + + /** @var null|RuleGroup $ruleGroup */ + $ruleGroup = $user->ruleGroups()->find($ruleGroupId); if (null !== $ruleGroup) { return $ruleGroup; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return HasMany - */ public function rules(): HasMany { return $this->hasMany(Rule::class); } + + protected function order(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/RuleTrigger.php b/app/Models/RuleTrigger.php index 20cf189375..e617ee8b21 100644 --- a/app/Models/RuleTrigger.php +++ b/app/Models/RuleTrigger.php @@ -23,25 +23,28 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\RuleTrigger * * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at + * @property null|Carbon $created_at + * @property null|Carbon $updated_at * @property int $rule_id - * @property string $trigger_type - * @property string $trigger_value + * @property null|string $trigger_type + * @property null|string $trigger_value * @property int $order * @property bool $active * @property bool $stop_processing - * @property-read Rule $rule + * @property Rule $rule + * * @method static Builder|RuleTrigger newModelQuery() * @method static Builder|RuleTrigger newQuery() * @method static Builder|RuleTrigger query() @@ -54,32 +57,40 @@ use Illuminate\Support\Carbon; * @method static Builder|RuleTrigger whereTriggerType($value) * @method static Builder|RuleTrigger whereTriggerValue($value) * @method static Builder|RuleTrigger whereUpdatedAt($value) + * * @mixin Eloquent */ class RuleTrigger extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ - protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'active' => 'boolean', - 'order' => 'int', - 'stop_processing' => 'boolean', - ]; + use ReturnsIntegerIdTrait; + + protected $casts + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'active' => 'boolean', + 'order' => 'int', + 'stop_processing' => 'boolean', + ]; - /** @var array Fields that can be filled */ protected $fillable = ['rule_id', 'trigger_type', 'trigger_value', 'order', 'active', 'stop_processing']; - /** - * @return BelongsTo - */ public function rule(): BelongsTo { return $this->belongsTo(Rule::class); } + + protected function order(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function ruleId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/Tag.php b/app/Models/Tag.php index 1e0e28fd14..9ba92bc9f3 100644 --- a/app/Models/Tag.php +++ b/app/Models/Tag.php @@ -23,7 +23,10 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; @@ -32,34 +35,34 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\Tag * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property string $tag - * @property string $tagMode - * @property Carbon|null $date - * @property string|null $description - * @property float|null $latitude - * @property float|null $longitude - * @property int|null $zoomLevel - * @property-read Collection|Attachment[] $attachments - * @property-read int|null $attachments_count - * @property-read Collection|Location[] $locations - * @property-read int|null $locations_count - * @property-read Collection|TransactionJournal[] $transactionJournals - * @property-read int|null $transaction_journals_count - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property string $tag + * @property string $tagMode + * @property null|Carbon $date + * @property null|string $description + * @property null|float $latitude + * @property null|float $longitude + * @property null|int $zoomLevel + * @property Attachment[]|Collection $attachments + * @property null|int $attachments_count + * @property Collection|Location[] $locations + * @property null|int $locations_count + * @property Collection|TransactionJournal[] $transactionJournals + * @property null|int $transaction_journals_count + * @property User $user + * * @method static \Illuminate\Database\Eloquent\Builder|Tag newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Tag newQuery() - * @method static Builder|Tag onlyTrashed() + * @method static Builder|Tag onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Tag query() * @method static \Illuminate\Database\Eloquent\Builder|Tag whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Tag whereDate($value) @@ -73,86 +76,74 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|Tag whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Tag whereUserId($value) * @method static \Illuminate\Database\Eloquent\Builder|Tag whereZoomLevel($value) - * @method static Builder|Tag withTrashed() - * @method static Builder|Tag withoutTrashed() - * @property int|null $user_group_id + * @method static Builder|Tag withTrashed() + * @method static Builder|Tag withoutTrashed() + * + * @property int $user_group_id + * * @method static \Illuminate\Database\Eloquent\Builder|Tag whereUserGroupId($value) + * * @mixin Eloquent */ class Tag extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'date' => 'date', - 'zoomLevel' => 'int', - 'latitude' => 'float', - 'longitude' => 'float', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'date' => 'date', + 'zoomLevel' => 'int', + 'latitude' => 'float', + 'longitude' => 'float', + ]; + protected $fillable = ['user_id', 'user_group_id', 'tag', 'date', 'description', 'tagMode']; - protected $hidden = ['zoomLevel', 'latitude', 'longitude']; + protected $hidden = ['zoomLevel', 'latitude', 'longitude']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return Tag * @throws NotFoundHttpException */ - public static function routeBinder(string $value): Tag + public static function routeBinder(string $value): self { if (auth()->check()) { $tagId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var Tag $tag */ - $tag = $user->tags()->find($tagId); + $user = auth()->user(); + + /** @var null|Tag $tag */ + $tag = $user->tags()->find($tagId); if (null !== $tag) { return $tag; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return MorphMany - */ public function attachments(): MorphMany { return $this->morphMany(Attachment::class, 'attachable'); } - /** - * @return MorphMany - */ public function locations(): MorphMany { return $this->morphMany(Location::class, 'locatable'); } - /** - * @return BelongsToMany - */ public function transactionJournals(): BelongsToMany { return $this->belongsToMany(TransactionJournal::class); diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index b726594471..974cc3d7a7 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -25,6 +25,7 @@ namespace FireflyIII\Models; use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; @@ -37,96 +38,94 @@ use Illuminate\Database\Eloquent\SoftDeletes; /** * FireflyIII\Models\Transaction * - * @property int $id - * @property \Illuminate\Support\Carbon|null $created_at - * @property \Illuminate\Support\Carbon|null $updated_at - * @property \Illuminate\Support\Carbon|null $deleted_at - * @property bool $reconciled - * @property int $account_id - * @property int $transaction_journal_id - * @property string|null $description - * @property int|null $transaction_currency_id - * @property string $modified - * @property string $modified_foreign - * @property string $date - * @property string $max_date - * @property string $amount - * @property string|null $foreign_amount - * @property int|null $foreign_currency_id - * @property int $identifier - * @property-read Account $account - * @property-read Collection|Budget[] $budgets - * @property-read int|null $budgets_count - * @property-read Collection|Category[] $categories - * @property-read int|null $categories_count - * @property-read TransactionCurrency|null $foreignCurrency - * @property-read TransactionCurrency|null $transactionCurrency - * @property-read TransactionJournal $transactionJournal - * @method static Builder|Transaction after(Carbon $date) - * @method static Builder|Transaction before(Carbon $date) - * @method static Builder|Transaction newModelQuery() - * @method static Builder|Transaction newQuery() + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property bool $reconciled + * @property int $account_id + * @property int $transaction_journal_id + * @property null|string $description + * @property null|int $transaction_currency_id + * @property null|int|string $modified + * @property null|int|string $modified_foreign + * @property string $date + * @property string $max_date + * @property string $amount + * @property null|string $foreign_amount + * @property null|int $foreign_currency_id + * @property int $identifier + * @property Account $account + * @property Budget[]|Collection $budgets + * @property null|int $budgets_count + * @property Category[]|Collection $categories + * @property null|int $categories_count + * @property null|TransactionCurrency $foreignCurrency + * @property null|TransactionCurrency $transactionCurrency + * @property TransactionJournal $transactionJournal + * + * @method static Builder|Transaction after(Carbon $date) + * @method static Builder|Transaction before(Carbon $date) + * @method static Builder|Transaction newModelQuery() + * @method static Builder|Transaction newQuery() * @method static \Illuminate\Database\Query\Builder|Transaction onlyTrashed() - * @method static Builder|Transaction query() - * @method static Builder|Transaction transactionTypes($types) - * @method static Builder|Transaction whereAccountId($value) - * @method static Builder|Transaction whereAmount($value) - * @method static Builder|Transaction whereCreatedAt($value) - * @method static Builder|Transaction whereDeletedAt($value) - * @method static Builder|Transaction whereDescription($value) - * @method static Builder|Transaction whereForeignAmount($value) - * @method static Builder|Transaction whereForeignCurrencyId($value) - * @method static Builder|Transaction whereId($value) - * @method static Builder|Transaction whereIdentifier($value) - * @method static Builder|Transaction whereReconciled($value) - * @method static Builder|Transaction whereTransactionCurrencyId($value) - * @method static Builder|Transaction whereTransactionJournalId($value) - * @method static Builder|Transaction whereUpdatedAt($value) + * @method static Builder|Transaction query() + * @method static Builder|Transaction transactionTypes($types) + * @method static Builder|Transaction whereAccountId($value) + * @method static Builder|Transaction whereAmount($value) + * @method static Builder|Transaction whereCreatedAt($value) + * @method static Builder|Transaction whereDeletedAt($value) + * @method static Builder|Transaction whereDescription($value) + * @method static Builder|Transaction whereForeignAmount($value) + * @method static Builder|Transaction whereForeignCurrencyId($value) + * @method static Builder|Transaction whereId($value) + * @method static Builder|Transaction whereIdentifier($value) + * @method static Builder|Transaction whereReconciled($value) + * @method static Builder|Transaction whereTransactionCurrencyId($value) + * @method static Builder|Transaction whereTransactionJournalId($value) + * @method static Builder|Transaction whereUpdatedAt($value) * @method static \Illuminate\Database\Query\Builder|Transaction withTrashed() * @method static \Illuminate\Database\Query\Builder|Transaction withoutTrashed() - * @property int $the_count + * + * @property int|string $the_count + * * @mixin Eloquent */ class Transaction extends Model { - use SoftDeletes; use HasFactory; + use ReturnsIntegerIdTrait; + use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'identifier' => 'int', - 'encrypted' => 'boolean', // model does not have these fields though - 'bill_name_encrypted' => 'boolean', - 'reconciled' => 'boolean', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'identifier' => 'int', + 'encrypted' => 'boolean', // model does not have these fields though + 'bill_name_encrypted' => 'boolean', + 'reconciled' => 'boolean', + 'date' => 'datetime', + ]; + protected $fillable - = [ - 'account_id', - 'transaction_journal_id', - 'description', - 'amount', - 'identifier', - 'transaction_currency_id', - 'foreign_currency_id', - 'foreign_amount', - 'reconciled', - ]; - /** @var array Hidden from view */ + = [ + 'account_id', + 'transaction_journal_id', + 'description', + 'amount', + 'identifier', + 'transaction_currency_id', + 'foreign_currency_id', + 'foreign_amount', + 'reconciled', + ]; + protected $hidden = ['encrypted']; /** * Get the account this object belongs to. - * - * @return BelongsTo */ public function account(): BelongsTo { @@ -135,8 +134,6 @@ class Transaction extends Model /** * Get the budget(s) this object belongs to. - * - * @return BelongsToMany */ public function budgets(): BelongsToMany { @@ -145,8 +142,6 @@ class Transaction extends Model /** * Get the category(ies) this object belongs to. - * - * @return BelongsToMany */ public function categories(): BelongsToMany { @@ -155,8 +150,6 @@ class Transaction extends Model /** * Get the currency this object belongs to. - * - * @return BelongsTo */ public function foreignCurrency(): BelongsTo { @@ -165,10 +158,6 @@ class Transaction extends Model /** * Check for transactions AFTER a specified date. - * - * - * @param Builder $query - * @param Carbon $date */ public function scopeAfter(Builder $query, Carbon $date): void { @@ -180,18 +169,11 @@ class Transaction extends Model /** * Check if a table is joined. - * - * @param Builder $query - * @param string $table - * - * @return bool */ public static function isJoined(Builder $query, string $table): bool { $joins = $query->getQuery()->joins; - if (null === $joins) { - return false; - } + foreach ($joins as $join) { if ($join->table === $table) { return true; @@ -203,10 +185,6 @@ class Transaction extends Model /** * Check for transactions BEFORE the specified date. - * - * - * @param Builder $query - * @param Carbon $date */ public function scopeBefore(Builder $query, Carbon $date): void { @@ -216,11 +194,6 @@ class Transaction extends Model $query->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')); } - /** - * - * @param Builder $query - * @param array $types - */ public function scopeTransactionTypes(Builder $query, array $types): void { if (!self::isJoined($query, 'transaction_journals')) { @@ -234,7 +207,6 @@ class Transaction extends Model } /** - * * @param mixed $value */ public function setAmountAttribute($value): void @@ -242,43 +214,47 @@ class Transaction extends Model $this->attributes['amount'] = (string)$value; } - /** - * @return BelongsTo - */ public function transactionCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class); } - /** - * @return BelongsTo - */ public function transactionJournal(): BelongsTo { return $this->belongsTo(TransactionJournal::class); } + protected function accountId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + /** * Get the amount - * - * @return Attribute */ protected function amount(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, ); } /** * Get the foreign amount - * - * @return Attribute */ protected function foreignAmount(): Attribute { return Attribute::make( - get: fn ($value) => (string)$value, + get: static fn ($value) => (string)$value, + ); + } + + protected function transactionJournalId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } } diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php index 5d34e44419..886bc8a4c8 100644 --- a/app/Models/TransactionCurrency.php +++ b/app/Models/TransactionCurrency.php @@ -23,36 +23,43 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\User; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\TransactionCurrency * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property bool $enabled - * @property string $code - * @property string $name - * @property string $symbol - * @property int $decimal_places - * @property-read Collection|BudgetLimit[] $budgetLimits - * @property-read int|null $budget_limits_count - * @property-read Collection|TransactionJournal[] $transactionJournals - * @property-read int|null $transaction_journals_count - * @property-read Collection|Transaction[] $transactions - * @property-read int|null $transactions_count + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property bool $enabled + * @property null|bool $userGroupDefault + * @property null|bool $userGroupEnabled + * @property string $code + * @property string $name + * @property string $symbol + * @property int $decimal_places + * @property BudgetLimit[]|Collection $budgetLimits + * @property null|int $budget_limits_count + * @property Collection|TransactionJournal[] $transactionJournals + * @property null|int $transaction_journals_count + * @property Collection|Transaction[] $transactions + * @property null|int $transactions_count + * * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency newQuery() - * @method static Builder|TransactionCurrency onlyTrashed() + * @method static Builder|TransactionCurrency onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency query() * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereCode($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereCreatedAt($value) @@ -63,71 +70,97 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereSymbol($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionCurrency whereUpdatedAt($value) - * @method static Builder|TransactionCurrency withTrashed() - * @method static Builder|TransactionCurrency withoutTrashed() + * @method static Builder|TransactionCurrency withTrashed() + * @method static Builder|TransactionCurrency withoutTrashed() + * + * @property Collection $userGroups + * @property null|int $user_groups_count + * @property Collection $users + * @property null|int $users_count + * * @mixin Eloquent */ class TransactionCurrency extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ + public ?bool $userGroupDefault; + public ?bool $userGroupEnabled; protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'decimal_places' => 'int', - 'enabled' => 'bool', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'decimal_places' => 'int', + 'enabled' => 'bool', + ]; + protected $fillable = ['name', 'code', 'symbol', 'decimal_places', 'enabled']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return TransactionCurrency * @throws NotFoundHttpException */ - public static function routeBinder(string $value): TransactionCurrency + public static function routeBinder(string $value): self { if (auth()->check()) { $currencyId = (int)$value; $currency = self::find($currencyId); if (null !== $currency) { + $currency->refreshForUser(auth()->user()); + return $currency; } } + throw new NotFoundHttpException(); } - /** - * @return HasMany - */ + public function refreshForUser(User $user): void + { + $current = $user->userGroup->currencies()->where('transaction_currencies.id', $this->id)->first(); + $default = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); + $this->userGroupDefault = $default->id === $this->id; + $this->userGroupEnabled = null !== $current; + } + public function budgetLimits(): HasMany { return $this->hasMany(BudgetLimit::class); } - /** - * @return HasMany - */ public function transactionJournals(): HasMany { return $this->hasMany(TransactionJournal::class); } - /** - * @return HasMany - */ public function transactions(): HasMany { return $this->hasMany(Transaction::class); } + + /** + * Link to user groups + */ + public function userGroups(): BelongsToMany + { + return $this->belongsToMany(UserGroup::class)->withTimestamps()->withPivot('group_default'); + } + + /** + * Link to users + */ + public function users(): BelongsToMany + { + return $this->belongsToMany(User::class)->withTimestamps()->withPivot('user_default'); + } + + protected function decimalPlaces(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/TransactionGroup.php b/app/Models/TransactionGroup.php index 06a58e9257..76e4d64a82 100644 --- a/app/Models/TransactionGroup.php +++ b/app/Models/TransactionGroup.php @@ -23,7 +23,10 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; @@ -31,25 +34,24 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; -use Illuminate\Support\Facades\Log; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\TransactionGroup * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property string|null $title - * @property-read Collection|TransactionJournal[] $transactionJournals - * @property-read int|null $transaction_journals_count - * @property-read User $user + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property null|string $title + * @property Collection|TransactionJournal[] $transactionJournals + * @property null|int $transaction_journals_count + * @property User $user + * * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup newQuery() - * @method static Builder|TransactionGroup onlyTrashed() + * @method static Builder|TransactionGroup onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup query() * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereDeletedAt($value) @@ -57,84 +59,76 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereTitle($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereUserId($value) - * @method static Builder|TransactionGroup withTrashed() - * @method static Builder|TransactionGroup withoutTrashed() - * @property int|null $user_group_id + * @method static Builder|TransactionGroup withTrashed() + * @method static Builder|TransactionGroup withoutTrashed() + * + * @property int $user_group_id + * * @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereUserGroupId($value) - * @property-read UserGroup|null $userGroup + * + * @property null|UserGroup $userGroup + * * @mixin Eloquent */ class TransactionGroup extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'id' => 'integer', - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'title' => 'string', - 'date' => 'datetime', - ]; + = [ + 'id' => 'integer', + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'title' => 'string', + 'date' => 'datetime', + ]; - /** @var array Fields that can be filled */ protected $fillable = ['user_id', 'user_group_id', 'title']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return TransactionGroup * @throws NotFoundHttpException */ - public static function routeBinder(string $value): TransactionGroup + public static function routeBinder(string $value): self { - Log::debug(sprintf('Now in %s("%s")', __METHOD__, $value)); + app('log')->debug(sprintf('Now in %s("%s")', __METHOD__, $value)); if (auth()->check()) { $groupId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - Log::debug(sprintf('User authenticated as %s', $user->email)); - /** @var TransactionGroup $group */ - $group = $user->transactionGroups() - ->with(['transactionJournals', 'transactionJournals.transactions']) - ->where('transaction_groups.id', $groupId)->first(['transaction_groups.*']); + $user = auth()->user(); + app('log')->debug(sprintf('User authenticated as %s', $user->email)); + + /** @var null|TransactionGroup $group */ + $group = $user->transactionGroups() + ->with(['transactionJournals', 'transactionJournals.transactions']) + ->where('transaction_groups.id', $groupId)->first(['transaction_groups.*']) + ; if (null !== $group) { - Log::debug(sprintf('Found group #%d.', $group->id)); + app('log')->debug(sprintf('Found group #%d.', $group->id)); + return $group; } } - Log::debug('Found no group.'); + app('log')->debug('Found no group.'); throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return HasMany - */ public function transactionJournals(): HasMany { return $this->hasMany(TransactionJournal::class); } - /** - * @return BelongsTo - */ public function userGroup(): BelongsTo { return $this->belongsTo(UserGroup::class); diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index 166cb72b53..b5e77ee825 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -25,9 +25,12 @@ namespace FireflyIII\Models; use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -41,144 +44,144 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\TransactionJournal * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property int $transaction_type_id - * @property int|null $transaction_group_id - * @property int|null $bill_id - * @property int|null $transaction_currency_id - * @property string $description - * @property Carbon $date - * @property Carbon|null $interest_date - * @property Carbon|null $book_date - * @property Carbon|null $process_date - * @property int $order - * @property int $tag_count - * @property string $transaction_type_type - * @property bool $encrypted - * @property bool $completed - * @property-read Collection|Attachment[] $attachments - * @property-read int|null $attachments_count - * @property-read Bill|null $bill - * @property-read Collection|Budget[] $budgets - * @property-read int|null $budgets_count - * @property-read Collection|Category[] $categories - * @property-read int|null $categories_count - * @property-read Collection|TransactionJournalLink[] $destJournalLinks - * @property-read int|null $dest_journal_links_count - * @property-read Collection|Note[] $notes - * @property-read int|null $notes_count - * @property-read Collection|PiggyBankEvent[] $piggyBankEvents - * @property-read int|null $piggy_bank_events_count - * @property-read Collection|TransactionJournalLink[] $sourceJournalLinks - * @property-read int|null $source_journal_links_count - * @property-read Collection|Tag[] $tags - * @property-read int|null $tags_count - * @property-read TransactionCurrency|null $transactionCurrency - * @property-read TransactionGroup|null $transactionGroup - * @property-read Collection|TransactionJournalMeta[] $transactionJournalMeta - * @property-read int|null $transaction_journal_meta_count - * @property-read TransactionType $transactionType - * @property-read Collection|Transaction[] $transactions - * @property-read int|null $transactions_count - * @property-read User $user - * @method static EloquentBuilder|TransactionJournal after(Carbon $date) - * @method static EloquentBuilder|TransactionJournal before(Carbon $date) - * @method static EloquentBuilder|TransactionJournal newModelQuery() - * @method static EloquentBuilder|TransactionJournal newQuery() + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property int $transaction_type_id + * @property null|int|string $transaction_group_id + * @property null|int|string $bill_id + * @property null|int|string $transaction_currency_id + * @property null|string $description + * @property Carbon $date + * @property null|Carbon $interest_date + * @property null|Carbon $book_date + * @property null|Carbon $process_date + * @property int $order + * @property int $tag_count + * @property string $transaction_type_type + * @property bool $encrypted + * @property bool $completed + * @property Attachment[]|Collection $attachments + * @property null|int $attachments_count + * @property null|Bill $bill + * @property Budget[]|Collection $budgets + * @property null|int $budgets_count + * @property Category[]|Collection $categories + * @property null|int $categories_count + * @property Collection|TransactionJournalLink[] $destJournalLinks + * @property null|int $dest_journal_links_count + * @property Collection|Note[] $notes + * @property null|int $notes_count + * @property Collection|PiggyBankEvent[] $piggyBankEvents + * @property null|int $piggy_bank_events_count + * @property Collection|TransactionJournalLink[] $sourceJournalLinks + * @property null|int $source_journal_links_count + * @property Collection|Tag[] $tags + * @property null|int $tags_count + * @property null|TransactionCurrency $transactionCurrency + * @property null|TransactionGroup $transactionGroup + * @property Collection|TransactionJournalMeta[] $transactionJournalMeta + * @property null|int $transaction_journal_meta_count + * @property TransactionType $transactionType + * @property Collection|Transaction[] $transactions + * @property null|int $transactions_count + * @property User $user + * + * @method static EloquentBuilder|TransactionJournal after(Carbon $date) + * @method static EloquentBuilder|TransactionJournal before(Carbon $date) + * @method static EloquentBuilder|TransactionJournal newModelQuery() + * @method static EloquentBuilder|TransactionJournal newQuery() * @method static \Illuminate\Database\Query\Builder|TransactionJournal onlyTrashed() - * @method static EloquentBuilder|TransactionJournal query() - * @method static EloquentBuilder|TransactionJournal transactionTypes($types) - * @method static EloquentBuilder|TransactionJournal whereBillId($value) - * @method static EloquentBuilder|TransactionJournal whereBookDate($value) - * @method static EloquentBuilder|TransactionJournal whereCompleted($value) - * @method static EloquentBuilder|TransactionJournal whereCreatedAt($value) - * @method static EloquentBuilder|TransactionJournal whereDate($value) - * @method static EloquentBuilder|TransactionJournal whereDeletedAt($value) - * @method static EloquentBuilder|TransactionJournal whereDescription($value) - * @method static EloquentBuilder|TransactionJournal whereEncrypted($value) - * @method static EloquentBuilder|TransactionJournal whereId($value) - * @method static EloquentBuilder|TransactionJournal whereInterestDate($value) - * @method static EloquentBuilder|TransactionJournal whereOrder($value) - * @method static EloquentBuilder|TransactionJournal whereProcessDate($value) - * @method static EloquentBuilder|TransactionJournal whereTagCount($value) - * @method static EloquentBuilder|TransactionJournal whereTransactionCurrencyId($value) - * @method static EloquentBuilder|TransactionJournal whereTransactionGroupId($value) - * @method static EloquentBuilder|TransactionJournal whereTransactionTypeId($value) - * @method static EloquentBuilder|TransactionJournal whereUpdatedAt($value) - * @method static EloquentBuilder|TransactionJournal whereUserId($value) + * @method static EloquentBuilder|TransactionJournal query() + * @method static EloquentBuilder|TransactionJournal transactionTypes($types) + * @method static EloquentBuilder|TransactionJournal whereBillId($value) + * @method static EloquentBuilder|TransactionJournal whereBookDate($value) + * @method static EloquentBuilder|TransactionJournal whereCompleted($value) + * @method static EloquentBuilder|TransactionJournal whereCreatedAt($value) + * @method static EloquentBuilder|TransactionJournal whereDate($value) + * @method static EloquentBuilder|TransactionJournal whereDeletedAt($value) + * @method static EloquentBuilder|TransactionJournal whereDescription($value) + * @method static EloquentBuilder|TransactionJournal whereEncrypted($value) + * @method static EloquentBuilder|TransactionJournal whereId($value) + * @method static EloquentBuilder|TransactionJournal whereInterestDate($value) + * @method static EloquentBuilder|TransactionJournal whereOrder($value) + * @method static EloquentBuilder|TransactionJournal whereProcessDate($value) + * @method static EloquentBuilder|TransactionJournal whereTagCount($value) + * @method static EloquentBuilder|TransactionJournal whereTransactionCurrencyId($value) + * @method static EloquentBuilder|TransactionJournal whereTransactionGroupId($value) + * @method static EloquentBuilder|TransactionJournal whereTransactionTypeId($value) + * @method static EloquentBuilder|TransactionJournal whereUpdatedAt($value) + * @method static EloquentBuilder|TransactionJournal whereUserId($value) * @method static \Illuminate\Database\Query\Builder|TransactionJournal withTrashed() * @method static \Illuminate\Database\Query\Builder|TransactionJournal withoutTrashed() - * @property-read Collection|Location[] $locations - * @property-read int|null $locations_count - * @property int $the_count - * @property int|null $user_group_id + * + * @property Collection|Location[] $locations + * @property null|int $locations_count + * @property int|string $the_count + * @property int $user_group_id + * * @method static EloquentBuilder|TransactionJournal whereUserGroupId($value) - * @property-read Collection $auditLogEntries - * @property-read int|null $audit_log_entries_count + * + * @property Collection $auditLogEntries + * @property null|int $audit_log_entries_count + * * @mixin Eloquent */ class TransactionJournal extends Model { - use SoftDeletes; use HasFactory; + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; + use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - 'date' => 'datetime', - 'interest_date' => 'date', - 'book_date' => 'date', - 'process_date' => 'date', - 'order' => 'int', - 'tag_count' => 'int', - 'encrypted' => 'boolean', - 'completed' => 'boolean', - ]; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + 'date' => 'datetime', + 'interest_date' => 'date', + 'book_date' => 'date', + 'process_date' => 'date', + 'order' => 'int', + 'tag_count' => 'int', + 'encrypted' => 'boolean', + 'completed' => 'boolean', + ]; - /** @var array Fields that can be filled */ protected $fillable - = [ - 'user_id', - 'user_group_id', - 'transaction_type_id', - 'bill_id', - 'tag_count', - 'transaction_currency_id', - 'description', - 'completed', - 'order', - 'date', - ]; - /** @var array Hidden from view */ + = [ + 'user_id', + 'user_group_id', + 'transaction_type_id', + 'bill_id', + 'tag_count', + 'transaction_currency_id', + 'description', + 'completed', + 'order', + 'date', + ]; + protected $hidden = ['encrypted']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return TransactionJournal * @throws NotFoundHttpException */ - public static function routeBinder(string $value): TransactionJournal + public static function routeBinder(string $value): self { if (auth()->check()) { $journalId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var TransactionJournal $journal */ - $journal = $user->transactionJournals()->where('transaction_journals.id', $journalId)->first(['transaction_journals.*']); + $user = auth()->user(); + + /** @var null|TransactionJournal $journal */ + $journal = $user->transactionJournals()->where('transaction_journals.id', $journalId)->first(['transaction_journals.*']); if (null !== $journal) { return $journal; } @@ -187,65 +190,41 @@ class TransactionJournal extends Model throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return MorphMany - */ public function attachments(): MorphMany { return $this->morphMany(Attachment::class, 'attachable'); } - /** - * @return MorphMany - */ public function auditLogEntries(): MorphMany { return $this->morphMany(AuditLogEntry::class, 'auditable'); } - /** - * @return BelongsTo - */ public function bill(): BelongsTo { return $this->belongsTo(Bill::class); } - /** - * @return BelongsToMany - */ public function budgets(): BelongsToMany { return $this->belongsToMany(Budget::class); } - /** - * @return BelongsToMany - */ public function categories(): BelongsToMany { return $this->belongsToMany(Category::class); } - /** - * @return HasMany - */ public function destJournalLinks(): HasMany { return $this->hasMany(TransactionJournalLink::class, 'destination_id'); } - /** - * @return bool - */ public function isTransfer(): bool { if (null !== $this->transaction_type_type) { @@ -255,9 +234,6 @@ class TransactionJournal extends Model return $this->transactionType->isTransfer(); } - /** - * @return MorphMany - */ public function locations(): MorphMany { return $this->morphMany(Location::class, 'locatable'); @@ -271,43 +247,21 @@ class TransactionJournal extends Model return $this->morphMany(Note::class, 'noteable'); } - /** - * @return HasMany - */ public function piggyBankEvents(): HasMany { return $this->hasMany(PiggyBankEvent::class); } - /** - * - * @param EloquentBuilder $query - * @param Carbon $date - * - * @return EloquentBuilder - */ public function scopeAfter(EloquentBuilder $query, Carbon $date): EloquentBuilder { return $query->where('transaction_journals.date', '>=', $date->format('Y-m-d 00:00:00')); } - /** - * - * @param EloquentBuilder $query - * @param Carbon $date - * - * @return EloquentBuilder - */ public function scopeBefore(EloquentBuilder $query, Carbon $date): EloquentBuilder { return $query->where('transaction_journals.date', '<=', $date->format('Y-m-d 00:00:00')); } - /** - * - * @param EloquentBuilder $query - * @param array $types - */ public function scopeTransactionTypes(EloquentBuilder $query, array $types): void { if (!self::isJoined($query, 'transaction_types')) { @@ -320,19 +274,10 @@ class TransactionJournal extends Model /** * Checks if tables are joined. - * - * - * @param Builder $query - * @param string $table - * - * @return bool */ public static function isJoined(Builder $query, string $table): bool { $joins = $query->getQuery()->joins; - if (null === $joins) { - return false; - } foreach ($joins as $join) { if ($join->table === $table) { return true; @@ -342,59 +287,52 @@ class TransactionJournal extends Model return false; } - /** - * @return HasMany - */ public function sourceJournalLinks(): HasMany { return $this->hasMany(TransactionJournalLink::class, 'source_id'); } - /** - * @return BelongsToMany - */ public function tags(): BelongsToMany { return $this->belongsToMany(Tag::class); } - /** - * @return BelongsTo - */ public function transactionCurrency(): BelongsTo { return $this->belongsTo(TransactionCurrency::class); } - /** - * @return BelongsTo - */ public function transactionGroup(): BelongsTo { return $this->belongsTo(TransactionGroup::class); } - /** - * @return HasMany - */ public function transactionJournalMeta(): HasMany { return $this->hasMany(TransactionJournalMeta::class); } - /** - * @return BelongsTo - */ public function transactionType(): BelongsTo { return $this->belongsTo(TransactionType::class); } - /** - * @return HasMany - */ public function transactions(): HasMany { return $this->hasMany(Transaction::class); } + + protected function order(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function transactionTypeId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/TransactionJournalLink.php b/app/Models/TransactionJournalLink.php index 30740c9990..f3237f4664 100644 --- a/app/Models/TransactionJournalLink.php +++ b/app/Models/TransactionJournalLink.php @@ -23,32 +23,35 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphMany; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\TransactionJournalLink * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property int $link_type_id - * @property int $source_id - * @property int $destination_id - * @property string|null $comment - * @property-read TransactionJournal $destination - * @property-read LinkType $linkType - * @property-read Collection|Note[] $notes - * @property-read int|null $notes_count - * @property-read TransactionJournal $source - * @property-read string $inward - * @property-read string $outward + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property int $link_type_id + * @property int $source_id + * @property int $destination_id + * @property null|string $comment + * @property TransactionJournal $destination + * @property LinkType $linkType + * @property Collection|Note[] $notes + * @property null|int $notes_count + * @property TransactionJournal $source + * @property string $inward + * @property string $outward + * * @method static Builder|TransactionJournalLink newModelQuery() * @method static Builder|TransactionJournalLink newQuery() * @method static Builder|TransactionJournalLink query() @@ -59,60 +62,51 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|TransactionJournalLink whereLinkTypeId($value) * @method static Builder|TransactionJournalLink whereSourceId($value) * @method static Builder|TransactionJournalLink whereUpdatedAt($value) + * * @mixin Eloquent */ class TransactionJournalLink extends Model { - /** - * The attributes that should be casted to native types. - * - * @var array - */ + use ReturnsIntegerIdTrait; + protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - ]; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + ]; + /** @var string The table to store the data in */ protected $table = 'journal_links'; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return TransactionJournalLink - * * @throws NotFoundHttpException */ - public static function routeBinder(string $value): TransactionJournalLink + public static function routeBinder(string $value): self { if (auth()->check()) { $linkId = (int)$value; $link = self::where('journal_links.id', $linkId) - ->leftJoin('transaction_journals as t_a', 't_a.id', '=', 'source_id') - ->leftJoin('transaction_journals as t_b', 't_b.id', '=', 'destination_id') - ->where('t_a.user_id', auth()->user()->id) - ->where('t_b.user_id', auth()->user()->id) - ->first(['journal_links.*']); + ->leftJoin('transaction_journals as t_a', 't_a.id', '=', 'source_id') + ->leftJoin('transaction_journals as t_b', 't_b.id', '=', 'destination_id') + ->where('t_a.user_id', auth()->user()->id) + ->where('t_b.user_id', auth()->user()->id) + ->first(['journal_links.*']) + ; if (null !== $link) { return $link; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function destination(): BelongsTo { return $this->belongsTo(TransactionJournal::class, 'destination_id'); } - /** - * @return BelongsTo - */ public function linkType(): BelongsTo { return $this->belongsTo(LinkType::class); @@ -126,11 +120,29 @@ class TransactionJournalLink extends Model return $this->morphMany(Note::class, 'noteable'); } - /** - * @return BelongsTo - */ public function source(): BelongsTo { return $this->belongsTo(TransactionJournal::class, 'source_id'); } + + protected function destinationId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function linkTypeId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } + + protected function sourceId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/TransactionJournalMeta.php b/app/Models/TransactionJournalMeta.php index 7c27a31e88..2b94815cfa 100644 --- a/app/Models/TransactionJournalMeta.php +++ b/app/Models/TransactionJournalMeta.php @@ -23,28 +23,31 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; /** * FireflyIII\Models\TransactionJournalMeta * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property int $transaction_journal_id - * @property string $name - * @property mixed $data - * @property string $hash - * @property Carbon|null $deleted_at - * @property-read TransactionJournal $transactionJournal + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property int $transaction_journal_id + * @property string $name + * @property mixed $data + * @property string $hash + * @property null|Carbon $deleted_at + * @property TransactionJournal $transactionJournal + * * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta newQuery() - * @method static Builder|TransactionJournalMeta onlyTrashed() + * @method static Builder|TransactionJournalMeta onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta query() * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereData($value) @@ -54,32 +57,29 @@ use Illuminate\Support\Carbon; * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereTransactionJournalId($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionJournalMeta whereUpdatedAt($value) - * @method static Builder|TransactionJournalMeta withTrashed() - * @method static Builder|TransactionJournalMeta withoutTrashed() + * @method static Builder|TransactionJournalMeta withTrashed() + * @method static Builder|TransactionJournalMeta withoutTrashed() + * * @mixin Eloquent */ class TransactionJournalMeta extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - /** - * The attributes that should be casted to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - ]; - /** @var array Fields that can be filled */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + ]; + protected $fillable = ['transaction_journal_id', 'name', 'data', 'hash']; + /** @var string The table to store the data in */ - protected $table = 'journal_meta'; + protected $table = 'journal_meta'; /** - * * @param mixed $value * * @return mixed @@ -90,21 +90,24 @@ class TransactionJournalMeta extends Model } /** - * * @param mixed $value */ public function setDataAttribute($value): void { $data = json_encode($value); $this->attributes['data'] = $data; - $this->attributes['hash'] = hash('sha256', $data); + $this->attributes['hash'] = hash('sha256', (string)$data); } - /** - * @return BelongsTo - */ public function transactionJournal(): BelongsTo { return $this->belongsTo(TransactionJournal::class); } + + protected function transactionJournalId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/TransactionType.php b/app/Models/TransactionType.php index 3fc2d21efc..7e9c4551bc 100644 --- a/app/Models/TransactionType.php +++ b/app/Models/TransactionType.php @@ -23,67 +23,68 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\TransactionType * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property string $type - * @property-read Collection|TransactionJournal[] $transactionJournals - * @property-read int|null $transaction_journals_count + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property string $type + * @property Collection|TransactionJournal[] $transactionJournals + * @property null|int $transaction_journals_count + * * @method static \Illuminate\Database\Eloquent\Builder|TransactionType newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|TransactionType newQuery() - * @method static Builder|TransactionType onlyTrashed() + * @method static Builder|TransactionType onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|TransactionType query() * @method static \Illuminate\Database\Eloquent\Builder|TransactionType whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionType whereDeletedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionType whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionType whereType($value) * @method static \Illuminate\Database\Eloquent\Builder|TransactionType whereUpdatedAt($value) - * @method static Builder|TransactionType withTrashed() - * @method static Builder|TransactionType withoutTrashed() + * @method static Builder|TransactionType withTrashed() + * @method static Builder|TransactionType withoutTrashed() + * * @mixin Eloquent */ class TransactionType extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; - public const DEPOSIT = 'Deposit'; - public const INVALID = 'Invalid'; - public const LIABILITY_CREDIT = 'Liability credit'; - public const OPENING_BALANCE = 'Opening balance'; - public const RECONCILIATION = 'Reconciliation'; - public const TRANSFER = 'Transfer'; - public const WITHDRAWAL = 'Withdrawal'; + public const string DEPOSIT = 'Deposit'; + public const string INVALID = 'Invalid'; + public const string LIABILITY_CREDIT = 'Liability credit'; + public const string OPENING_BALANCE = 'Opening balance'; + public const string RECONCILIATION = 'Reconciliation'; + public const string TRANSFER = 'Transfer'; + public const string WITHDRAWAL = 'Withdrawal'; protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'deleted_at' => 'datetime', - ]; - protected $fillable = ['type']; + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime', + ]; + protected $fillable = ['type']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $type - * - * @return TransactionType * @throws NotFoundHttpException */ - public static function routeBinder(string $type): TransactionType + public static function routeBinder(string $type): self { if (!auth()->check()) { throw new NotFoundHttpException(); @@ -92,44 +93,30 @@ class TransactionType extends Model if (null !== $transactionType) { return $transactionType; } + throw new NotFoundHttpException(); } - /** - * @return bool - */ public function isDeposit(): bool { return self::DEPOSIT === $this->type; } - /** - * @return bool - */ public function isOpeningBalance(): bool { return self::OPENING_BALANCE === $this->type; } - /** - * @return bool - */ public function isTransfer(): bool { return self::TRANSFER === $this->type; } - /** - * @return bool - */ public function isWithdrawal(): bool { return self::WITHDRAWAL === $this->type; } - /** - * @return HasMany - */ public function transactionJournals(): HasMany { return $this->hasMany(TransactionJournal::class); diff --git a/app/Models/UserGroup.php b/app/Models/UserGroup.php index 5be2e89e81..34cf18f84e 100644 --- a/app/Models/UserGroup.php +++ b/app/Models/UserGroup.php @@ -24,27 +24,30 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; use FireflyIII\Enums\UserRoleEnum; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasManyThrough; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class UserGroup * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string|null $deleted_at - * @property string $title - * @property-read Collection|GroupMembership[] $groupMemberships - * @property-read int|null $group_memberships_count + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|string $deleted_at + * @property string $title + * @property Collection|GroupMembership[] $groupMemberships + * @property null|int $group_memberships_count + * * @method static Builder|UserGroup newModelQuery() * @method static Builder|UserGroup newQuery() * @method static Builder|UserGroup query() @@ -53,76 +56,81 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|UserGroup whereId($value) * @method static Builder|UserGroup whereTitle($value) * @method static Builder|UserGroup whereUpdatedAt($value) - * @property-read Collection $accounts - * @property-read int|null $accounts_count - * @property-read Collection $availableBudgets - * @property-read int|null $available_budgets_count - * @property-read Collection $bills - * @property-read int|null $bills_count - * @property-read Collection $budgets - * @property-read int|null $budgets_count - * @property-read Collection $piggyBanks - * @property-read int|null $piggy_banks_count - * @property-read Collection $transactionJournals - * @property-read int|null $transaction_journals_count - * @property-read Collection $attachments - * @property-read int|null $attachments_count - * @property-read Collection $categories - * @property-read int|null $categories_count - * @property-read Collection $currencyExchangeRates - * @property-read int|null $currency_exchange_rates_count - * @property-read Collection $objectGroups - * @property-read int|null $object_groups_count - * @property-read Collection $recurrences - * @property-read int|null $recurrences_count - * @property-read Collection $ruleGroups - * @property-read int|null $rule_groups_count - * @property-read Collection $rules - * @property-read int|null $rules_count - * @property-read Collection $tags - * @property-read int|null $tags_count - * @property-read Collection $transactionGroups - * @property-read int|null $transaction_groups_count - * @property-read Collection $webhooks - * @property-read int|null $webhooks_count + * + * @property Collection $accounts + * @property null|int $accounts_count + * @property Collection $availableBudgets + * @property null|int $available_budgets_count + * @property Collection $bills + * @property null|int $bills_count + * @property Collection $budgets + * @property null|int $budgets_count + * @property Collection $piggyBanks + * @property null|int $piggy_banks_count + * @property Collection $transactionJournals + * @property null|int $transaction_journals_count + * @property Collection $attachments + * @property null|int $attachments_count + * @property Collection $categories + * @property null|int $categories_count + * @property Collection $currencyExchangeRates + * @property null|int $currency_exchange_rates_count + * @property Collection $objectGroups + * @property null|int $object_groups_count + * @property Collection $recurrences + * @property null|int $recurrences_count + * @property Collection $ruleGroups + * @property null|int $rule_groups_count + * @property Collection $rules + * @property null|int $rules_count + * @property Collection $tags + * @property null|int $tags_count + * @property Collection $transactionGroups + * @property null|int $transaction_groups_count + * @property Collection $webhooks + * @property null|int $webhooks_count + * @property Collection $currencies + * @property null|int $currencies_count + * * @mixin Eloquent */ class UserGroup extends Model { + use ReturnsIntegerIdTrait; + protected $fillable = ['title']; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return UserGroup * @throws NotFoundHttpException */ - public static function routeBinder(string $value): UserGroup + public static function routeBinder(string $value): self { if (auth()->check()) { $userGroupId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var UserGroup $userGroup */ - $userGroup = UserGroup::find($userGroupId); + $user = auth()->user(); + + /** @var null|UserGroup $userGroup */ + $userGroup = self::find($userGroupId); if (null === $userGroup) { throw new NotFoundHttpException(); } // need at least ready only to be aware of the user group's existence, // but owner/full role (in the group) or global owner role may overrule this. - if ($user->hasRoleInGroup($userGroup, UserRoleEnum::READ_ONLY, true, true)) { + $access = $user->hasRoleInGroupOrOwner($userGroup, UserRoleEnum::READ_ONLY) || $user->hasRole('owner'); + if ($access) { return $userGroup; } } + throw new NotFoundHttpException(); } /** * Link to accounts. - * - * @return HasMany */ public function accounts(): HasMany { @@ -131,8 +139,6 @@ class UserGroup extends Model /** * Link to attachments. - * - * @return HasMany */ public function attachments(): HasMany { @@ -141,8 +147,6 @@ class UserGroup extends Model /** * Link to bills. - * - * @return HasMany */ public function availableBudgets(): HasMany { @@ -151,8 +155,6 @@ class UserGroup extends Model /** * Link to bills. - * - * @return HasMany */ public function bills(): HasMany { @@ -161,8 +163,6 @@ class UserGroup extends Model /** * Link to budgets. - * - * @return HasMany */ public function budgets(): HasMany { @@ -171,36 +171,33 @@ class UserGroup extends Model /** * Link to categories. - * - * @return HasMany */ public function categories(): HasMany { return $this->hasMany(Category::class); } + /** + * Link to currencies + */ + public function currencies(): BelongsToMany + { + return $this->belongsToMany(TransactionCurrency::class)->withTimestamps()->withPivot('group_default'); + } + /** * Link to exchange rates. - * - * @return HasMany */ public function currencyExchangeRates(): HasMany { return $this->hasMany(CurrencyExchangeRate::class); } - /** - * - * @return HasMany - */ public function groupMemberships(): HasMany { return $this->hasMany(GroupMembership::class); } - /** - * @return HasMany - */ public function objectGroups(): HasMany { return $this->hasMany(ObjectGroup::class); @@ -208,49 +205,32 @@ class UserGroup extends Model /** * Link to piggy banks. - * - * @return HasManyThrough */ public function piggyBanks(): HasManyThrough { return $this->hasManyThrough(PiggyBank::class, Account::class); } - /** - * @return HasMany - */ public function recurrences(): HasMany { return $this->hasMany(Recurrence::class); } - /** - * @return HasMany - */ public function ruleGroups(): HasMany { return $this->hasMany(RuleGroup::class); } - /** - * @return HasMany - */ public function rules(): HasMany { return $this->hasMany(Rule::class); } - /** - * @return HasMany - */ public function tags(): HasMany { return $this->hasMany(Tag::class); } - /** - * @return HasMany - */ public function transactionGroups(): HasMany { return $this->hasMany(TransactionGroup::class); @@ -258,17 +238,12 @@ class UserGroup extends Model /** * Link to transaction journals. - * - * @return HasMany */ public function transactionJournals(): HasMany { return $this->hasMany(TransactionJournal::class); } - /** - * @return HasMany - */ public function webhooks(): HasMany { return $this->hasMany(Webhook::class); diff --git a/app/Models/UserRole.php b/app/Models/UserRole.php index 5dbfa9b27c..3b18b0262d 100644 --- a/app/Models/UserRole.php +++ b/app/Models/UserRole.php @@ -24,23 +24,25 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Support\Carbon; /** * Class UserRole * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string|null $deleted_at - * @property string $title - * @property-read Collection|GroupMembership[] $groupMemberships - * @property-read int|null $group_memberships_count + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|string $deleted_at + * @property string $title + * @property Collection|GroupMembership[] $groupMemberships + * @property null|int $group_memberships_count + * * @method static Builder|UserRole newModelQuery() * @method static Builder|UserRole newQuery() * @method static Builder|UserRole query() @@ -49,16 +51,15 @@ use Illuminate\Support\Carbon; * @method static Builder|UserRole whereId($value) * @method static Builder|UserRole whereTitle($value) * @method static Builder|UserRole whereUpdatedAt($value) + * * @mixin Eloquent */ class UserRole extends Model { + use ReturnsIntegerIdTrait; + protected $fillable = ['title']; - /** - * - * @return HasMany - */ public function groupMemberships(): HasMany { return $this->hasMany(GroupMembership::class); diff --git a/app/Models/Webhook.php b/app/Models/Webhook.php index 4d8a64bf7f..e33059a0d4 100644 --- a/app/Models/Webhook.php +++ b/app/Models/Webhook.php @@ -23,10 +23,13 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; use FireflyIII\Enums\WebhookDelivery; use FireflyIII\Enums\WebhookResponse; use FireflyIII\Enums\WebhookTrigger; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; +use FireflyIII\Support\Models\ReturnsIntegerUserIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; @@ -34,65 +37,69 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\Webhook * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property Carbon|null $deleted_at - * @property int $user_id - * @property bool $active - * @property int $trigger - * @property int $response - * @property int $delivery - * @property string $url - * @property-read User $user - * @property-read Collection|WebhookMessage[] $webhookMessages - * @property-read int|null $webhook_messages_count - * @method static Builder|Webhook newModelQuery() - * @method static Builder|Webhook newQuery() + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|Carbon $deleted_at + * @property int $user_id + * @property bool $active + * @property int $trigger + * @property int $response + * @property int $delivery + * @property string $url + * @property User $user + * @property Collection|WebhookMessage[] $webhookMessages + * @property null|int $webhook_messages_count + * + * @method static Builder|Webhook newModelQuery() + * @method static Builder|Webhook newQuery() * @method static \Illuminate\Database\Query\Builder|Webhook onlyTrashed() - * @method static Builder|Webhook query() - * @method static Builder|Webhook whereActive($value) - * @method static Builder|Webhook whereCreatedAt($value) - * @method static Builder|Webhook whereDeletedAt($value) - * @method static Builder|Webhook whereDelivery($value) - * @method static Builder|Webhook whereId($value) - * @method static Builder|Webhook whereResponse($value) - * @method static Builder|Webhook whereTrigger($value) - * @method static Builder|Webhook whereUpdatedAt($value) - * @method static Builder|Webhook whereUrl($value) - * @method static Builder|Webhook whereUserId($value) + * @method static Builder|Webhook query() + * @method static Builder|Webhook whereActive($value) + * @method static Builder|Webhook whereCreatedAt($value) + * @method static Builder|Webhook whereDeletedAt($value) + * @method static Builder|Webhook whereDelivery($value) + * @method static Builder|Webhook whereId($value) + * @method static Builder|Webhook whereResponse($value) + * @method static Builder|Webhook whereTrigger($value) + * @method static Builder|Webhook whereUpdatedAt($value) + * @method static Builder|Webhook whereUrl($value) + * @method static Builder|Webhook whereUserId($value) * @method static \Illuminate\Database\Query\Builder|Webhook withTrashed() * @method static \Illuminate\Database\Query\Builder|Webhook withoutTrashed() - * @property string $title - * @property string $secret + * + * @property string $title + * @property string $secret + * * @method static Builder|Webhook whereSecret($value) * @method static Builder|Webhook whereTitle($value) - * @property int|null $user_group_id + * + * @property int $user_group_id + * * @method static Builder|Webhook whereUserGroupId($value) + * * @mixin Eloquent */ class Webhook extends Model { + use ReturnsIntegerIdTrait; + use ReturnsIntegerUserIdTrait; use SoftDeletes; protected $casts = [ - 'active' => 'boolean', - 'trigger' => 'integer', - 'response' => 'integer', - 'delivery' => 'integer', - ]; + 'active' => 'boolean', + 'trigger' => 'integer', + 'response' => 'integer', + 'delivery' => 'integer', + ]; protected $fillable = ['active', 'trigger', 'response', 'delivery', 'user_id', 'user_group_id', 'url', 'title', 'secret']; - /** - * @return array - */ public static function getDeliveries(): array { $array = []; @@ -100,12 +107,10 @@ class Webhook extends Model foreach ($set as $item) { $array[$item->value] = $item->name; } + return $array; } - /** - * @return array - */ public static function getDeliveriesForValidation(): array { $array = []; @@ -114,12 +119,10 @@ class Webhook extends Model $array[$item->name] = $item->value; $array[$item->value] = $item->value; } + return $array; } - /** - * @return array - */ public static function getResponses(): array { $array = []; @@ -127,12 +130,10 @@ class Webhook extends Model foreach ($set as $item) { $array[$item->value] = $item->name; } + return $array; } - /** - * @return array - */ public static function getResponsesForValidation(): array { $array = []; @@ -141,12 +142,10 @@ class Webhook extends Model $array[$item->name] = $item->value; $array[$item->value] = $item->value; } + return $array; } - /** - * @return array - */ public static function getTriggers(): array { $array = []; @@ -154,12 +153,10 @@ class Webhook extends Model foreach ($set as $item) { $array[$item->value] = $item->name; } + return $array; } - /** - * @return array - */ public static function getTriggersForValidation(): array { $array = []; @@ -168,43 +165,38 @@ class Webhook extends Model $array[$item->name] = $item->value; $array[$item->value] = $item->value; } + return $array; } /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return Webhook * @throws NotFoundHttpException */ - public static function routeBinder(string $value): Webhook + public static function routeBinder(string $value): self { if (auth()->check()) { $webhookId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var Webhook $webhook */ - $webhook = $user->webhooks()->find($webhookId); + $user = auth()->user(); + + /** @var null|Webhook $webhook */ + $webhook = $user->webhooks()->find($webhookId); if (null !== $webhook) { return $webhook; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function user(): BelongsTo { return $this->belongsTo(User::class); } - /** - * @return HasMany - */ public function webhookMessages(): HasMany { return $this->hasMany(WebhookMessage::class); diff --git a/app/Models/WebhookAttempt.php b/app/Models/WebhookAttempt.php index 2dd236663e..76d1a110b4 100644 --- a/app/Models/WebhookAttempt.php +++ b/app/Models/WebhookAttempt.php @@ -23,27 +23,30 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\User; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class WebhookAttempt * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string|null $deleted_at - * @property int $webhook_message_id - * @property int $status_code - * @property string|null $logs - * @property string|null $response - * @property-read WebhookMessage $webhookMessage + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|string $deleted_at + * @property int $webhook_message_id + * @property int|string $status_code + * @property null|string $logs + * @property null|string $response + * @property WebhookMessage $webhookMessage + * * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt newQuery() * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt query() @@ -55,43 +58,49 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereStatusCode($value) * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereWebhookMessageId($value) - * @method static Builder|WebhookAttempt onlyTrashed() - * @method static Builder|WebhookAttempt withTrashed() - * @method static Builder|WebhookAttempt withoutTrashed() + * @method static Builder|WebhookAttempt onlyTrashed() + * @method static Builder|WebhookAttempt withTrashed() + * @method static Builder|WebhookAttempt withoutTrashed() + * * @mixin Eloquent */ class WebhookAttempt extends Model { + use ReturnsIntegerIdTrait; use SoftDeletes; /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return WebhookAttempt * @throws NotFoundHttpException */ - public static function routeBinder(string $value): WebhookAttempt + public static function routeBinder(string $value): self { if (auth()->check()) { $attemptId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var WebhookAttempt $attempt */ - $attempt = self::find($attemptId); + $user = auth()->user(); + + /** @var null|WebhookAttempt $attempt */ + $attempt = self::find($attemptId); if (null !== $attempt && $attempt->webhookMessage->webhook->user_id === $user->id) { return $attempt; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function webhookMessage(): BelongsTo { return $this->belongsTo(WebhookMessage::class); } + + protected function webhookMessageId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } } diff --git a/app/Models/WebhookMessage.php b/app/Models/WebhookMessage.php index f04bafae99..8b27dde551 100644 --- a/app/Models/WebhookMessage.php +++ b/app/Models/WebhookMessage.php @@ -23,7 +23,9 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; +use FireflyIII\Support\Models\ReturnsIntegerIdTrait; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; @@ -31,24 +33,24 @@ use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Support\Carbon; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\WebhookMessage * - * @property int $id - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string|null $deleted_at - * @property int $webhook_id - * @property bool $sent - * @property bool $errored - * @property int $attempts - * @property string $uuid - * @property array $message - * @property array|null $logs - * @property-read Webhook $webhook + * @property int $id + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|string $deleted_at + * @property int $webhook_id + * @property bool $sent + * @property bool $errored + * @property int $attempts + * @property string $uuid + * @property array $message + * @property null|array $logs + * @property Webhook $webhook + * * @method static Builder|WebhookMessage newModelQuery() * @method static Builder|WebhookMessage newQuery() * @method static Builder|WebhookMessage query() @@ -63,12 +65,16 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|WebhookMessage whereUpdatedAt($value) * @method static Builder|WebhookMessage whereUuid($value) * @method static Builder|WebhookMessage whereWebhookId($value) - * @property-read Collection|WebhookAttempt[] $webhookAttempts - * @property-read int|null $webhook_attempts_count + * + * @property Collection|WebhookAttempt[] $webhookAttempts + * @property null|int $webhook_attempts_count + * * @mixin Eloquent */ class WebhookMessage extends Model { + use ReturnsIntegerIdTrait; + protected $casts = [ 'sent' => 'boolean', @@ -81,37 +87,31 @@ class WebhookMessage extends Model /** * Route binder. Converts the key in the URL to the specified object (or throw 404). * - * @param string $value - * - * @return WebhookMessage * @throws NotFoundHttpException */ - public static function routeBinder(string $value): WebhookMessage + public static function routeBinder(string $value): self { if (auth()->check()) { $messageId = (int)$value; + /** @var User $user */ - $user = auth()->user(); - /** @var WebhookMessage $message */ - $message = self::find($messageId); + $user = auth()->user(); + + /** @var null|WebhookMessage $message */ + $message = self::find($messageId); if (null !== $message && $message->webhook->user_id === $user->id) { return $message; } } + throw new NotFoundHttpException(); } - /** - * @return BelongsTo - */ public function webhook(): BelongsTo { return $this->belongsTo(Webhook::class); } - /** - * @return HasMany - */ public function webhookAttempts(): HasMany { return $this->hasMany(WebhookAttempt::class); @@ -119,13 +119,18 @@ class WebhookMessage extends Model /** * Get the amount - * - * @return Attribute */ protected function sent(): Attribute { return Attribute::make( - get: fn ($value) => (bool)$value, + get: static fn ($value) => (bool)$value, + ); + } + + protected function webhookId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, ); } } diff --git a/app/Notifications/Admin/TestNotification.php b/app/Notifications/Admin/TestNotification.php index b79a21f36d..03b52e93d6 100644 --- a/app/Notifications/Admin/TestNotification.php +++ b/app/Notifications/Admin/TestNotification.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Notifications\Admin; use FireflyIII\Support\Notifications\UrlValidator; -use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; @@ -42,8 +41,6 @@ class TestNotification extends Notification /** * Create a new notification instance. - * - * @return void */ public function __construct(string $address) { @@ -55,12 +52,13 @@ class TestNotification extends Notification * * @param mixed $notifiable * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * * @return array */ public function toArray($notifiable) { return [ - // ]; } @@ -69,13 +67,16 @@ class TestNotification extends Notification * * @param mixed $notifiable * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * * @return MailMessage */ public function toMail($notifiable) { return (new MailMessage()) ->markdown('emails.admin-test', ['email' => $this->address]) - ->subject((string)trans('email.admin_test_subject')); + ->subject((string)trans('email.admin_test_subject')) + ; } /** @@ -83,6 +84,8 @@ class TestNotification extends Notification * * @param mixed $notifiable * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * * @return SlackMessage */ public function toSlack($notifiable) @@ -93,6 +96,8 @@ class TestNotification extends Notification /** * Get the notification's delivery channels. * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * * @param mixed $notifiable * * @return array @@ -103,6 +108,7 @@ class TestNotification extends Notification if (UrlValidator::isValidWebhookURL($slackUrl)) { return ['mail', 'slack']; } + return ['mail']; } } diff --git a/app/Notifications/Admin/UserInvitation.php b/app/Notifications/Admin/UserInvitation.php index 60d05bab97..15d97d1aa2 100644 --- a/app/Notifications/Admin/UserInvitation.php +++ b/app/Notifications/Admin/UserInvitation.php @@ -26,7 +26,6 @@ namespace FireflyIII\Notifications\Admin; use FireflyIII\Models\InvitedUser; use FireflyIII\Support\Notifications\UrlValidator; -use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; @@ -43,8 +42,6 @@ class UserInvitation extends Notification /** * Create a new notification instance. - * - * @return void */ public function __construct(InvitedUser $invitee) { @@ -57,11 +54,12 @@ class UserInvitation extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toArray($notifiable) { return [ - // ]; } @@ -71,12 +69,15 @@ class UserInvitation extends Notification * @param mixed $notifiable * * @return MailMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toMail($notifiable) { return (new MailMessage()) ->markdown('emails.invitation-created', ['email' => $this->invitee->user->email, 'invitee' => $this->invitee->email]) - ->subject((string)trans('email.invitation_created_subject')); + ->subject((string)trans('email.invitation_created_subject')) + ; } /** @@ -85,6 +86,8 @@ class UserInvitation extends Notification * @param mixed $notifiable * * @return SlackMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toSlack($notifiable) { @@ -99,6 +102,8 @@ class UserInvitation extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function via($notifiable) { @@ -106,6 +111,7 @@ class UserInvitation extends Notification if (UrlValidator::isValidWebhookURL($slackUrl)) { return ['mail', 'slack']; } + return ['mail']; } } diff --git a/app/Notifications/Admin/UserRegistration.php b/app/Notifications/Admin/UserRegistration.php index 4b0bce8971..759e200d82 100644 --- a/app/Notifications/Admin/UserRegistration.php +++ b/app/Notifications/Admin/UserRegistration.php @@ -42,8 +42,6 @@ class UserRegistration extends Notification /** * Create a new notification instance. - * - * @return void */ public function __construct(User $user) { @@ -56,11 +54,12 @@ class UserRegistration extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toArray($notifiable) { return [ - // ]; } @@ -70,12 +69,15 @@ class UserRegistration extends Notification * @param mixed $notifiable * * @return MailMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toMail($notifiable) { return (new MailMessage()) ->markdown('emails.registered-admin', ['email' => $this->user->email, 'id' => $this->user->id]) - ->subject((string)trans('email.registered_subject_admin')); + ->subject((string)trans('email.registered_subject_admin')) + ; } /** @@ -84,6 +86,8 @@ class UserRegistration extends Notification * @param mixed $notifiable * * @return SlackMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toSlack($notifiable) { @@ -96,6 +100,8 @@ class UserRegistration extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function via($notifiable) { @@ -103,6 +109,7 @@ class UserRegistration extends Notification if (UrlValidator::isValidWebhookURL($slackUrl)) { return ['mail', 'slack']; } + return ['mail']; } } diff --git a/app/Notifications/Admin/VersionCheckResult.php b/app/Notifications/Admin/VersionCheckResult.php index 95af203bfd..7ee75e8933 100644 --- a/app/Notifications/Admin/VersionCheckResult.php +++ b/app/Notifications/Admin/VersionCheckResult.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Notifications\Admin; use FireflyIII\Support\Notifications\UrlValidator; -use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; @@ -33,7 +32,6 @@ use Illuminate\Notifications\Notification; /** * Class VersionCheckResult - * */ class VersionCheckResult extends Notification { @@ -43,8 +41,6 @@ class VersionCheckResult extends Notification /** * Create a new notification instance. - * - * @return void */ public function __construct(string $message) { @@ -57,11 +53,12 @@ class VersionCheckResult extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toArray($notifiable) { return [ - // ]; } @@ -71,12 +68,15 @@ class VersionCheckResult extends Notification * @param mixed $notifiable * * @return MailMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toMail($notifiable) { return (new MailMessage()) ->markdown('emails.new-version', ['message' => $this->message]) - ->subject((string)trans('email.new_version_email_subject')); + ->subject((string)trans('email.new_version_email_subject')) + ; } /** @@ -85,13 +85,16 @@ class VersionCheckResult extends Notification * @param mixed $notifiable * * @return SlackMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toSlack($notifiable) { return (new SlackMessage())->content($this->message) - ->attachment(function ($attachment) { - $attachment->title('Firefly III @ GitHub', 'https://github.com/firefly-iii/firefly-iii/releases'); - }); + ->attachment(static function ($attachment): void { + $attachment->title('Firefly III @ GitHub', 'https://github.com/firefly-iii/firefly-iii/releases'); + }) + ; } /** @@ -100,6 +103,8 @@ class VersionCheckResult extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function via($notifiable) { @@ -107,6 +112,7 @@ class VersionCheckResult extends Notification if (UrlValidator::isValidWebhookURL($slackUrl)) { return ['mail', 'slack']; } + return ['mail']; } } diff --git a/app/Notifications/User/BillReminder.php b/app/Notifications/User/BillReminder.php index d3824aca52..36d93b84e6 100644 --- a/app/Notifications/User/BillReminder.php +++ b/app/Notifications/User/BillReminder.php @@ -45,8 +45,6 @@ class BillReminder extends Notification /** * Create a new notification instance. - * - * @return void */ public function __construct(Bill $bill, string $field, int $diff) { @@ -61,11 +59,12 @@ class BillReminder extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toArray($notifiable) { return [ - // ]; } @@ -75,6 +74,8 @@ class BillReminder extends Notification * @param mixed $notifiable * * @return MailMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toMail($notifiable) { @@ -85,7 +86,8 @@ class BillReminder extends Notification return (new MailMessage()) ->markdown('emails.bill-warning', ['field' => $this->field, 'diff' => $this->diff, 'bill' => $this->bill]) - ->subject($subject); + ->subject($subject) + ; } /** @@ -94,6 +96,8 @@ class BillReminder extends Notification * @param mixed $notifiable * * @return SlackMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toSlack($notifiable) { @@ -101,14 +105,16 @@ class BillReminder extends Notification if (0 === $this->diff) { $message = (string)trans(sprintf('email.bill_warning_subject_now_%s', $this->field), ['diff' => $this->diff, 'name' => $this->bill->name]); } - $bill = $this->bill; - $url = route('bills.show', [$bill->id]); + $bill = $this->bill; + $url = route('bills.show', [$bill->id]); + return (new SlackMessage()) ->warning() - ->attachment(function ($attachment) use ($bill, $url) { + ->attachment(static function ($attachment) use ($bill, $url): void { $attachment->title((string)trans('firefly.visit_bill', ['name' => $bill->name]), $url); }) - ->content($message); + ->content($message) + ; } /** @@ -117,15 +123,21 @@ class BillReminder extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function via($notifiable) { - /** @var User|null $user */ + /** @var null|User $user */ $user = auth()->user(); - $slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data; - if (UrlValidator::isValidWebhookURL($slackUrl)) { + $slackUrl = null === $user ? '' : app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data; + if (is_array($slackUrl)) { + $slackUrl = ''; + } + if (UrlValidator::isValidWebhookURL((string)$slackUrl)) { return ['mail', 'slack']; } + return ['mail']; } } diff --git a/app/Notifications/User/NewAccessToken.php b/app/Notifications/User/NewAccessToken.php index 907d27df9e..b32192d089 100644 --- a/app/Notifications/User/NewAccessToken.php +++ b/app/Notifications/User/NewAccessToken.php @@ -40,12 +40,8 @@ class NewAccessToken extends Notification /** * Create a new notification instance. - * - * @return void */ - public function __construct() - { - } + public function __construct() {} /** * Get the array representation of the notification. @@ -53,11 +49,12 @@ class NewAccessToken extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toArray($notifiable) { return [ - // ]; } @@ -67,12 +64,15 @@ class NewAccessToken extends Notification * @param mixed $notifiable * * @return MailMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toMail($notifiable) { return (new MailMessage()) ->markdown('emails.token-created') - ->subject((string)trans('email.access_token_created_subject')); + ->subject((string)trans('email.access_token_created_subject')) + ; } /** @@ -81,6 +81,8 @@ class NewAccessToken extends Notification * @param mixed $notifiable * * @return SlackMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toSlack($notifiable) { @@ -93,15 +95,21 @@ class NewAccessToken extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function via($notifiable) { - /** @var User|null $user */ + /** @var null|User $user */ $user = auth()->user(); - $slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data; - if (UrlValidator::isValidWebhookURL($slackUrl)) { + $slackUrl = null === $user ? '' : app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data; + if (is_array($slackUrl)) { + $slackUrl = ''; + } + if (UrlValidator::isValidWebhookURL((string)$slackUrl)) { return ['mail', 'slack']; } + return ['mail']; } } diff --git a/app/Notifications/User/RuleActionFailed.php b/app/Notifications/User/RuleActionFailed.php index caeef8a5b4..669d8b8e7b 100644 --- a/app/Notifications/User/RuleActionFailed.php +++ b/app/Notifications/User/RuleActionFailed.php @@ -45,19 +45,15 @@ class RuleActionFailed extends Notification /** * Create a new notification instance. - * - * @return void */ public function __construct(array $params) { [$mainMessage, $groupTitle, $groupLink, $ruleTitle, $ruleLink] = $params; - $this->message = $mainMessage; - $this->groupTitle = $groupTitle; - $this->groupLink = $groupLink; - $this->ruleTitle = $ruleTitle; - $this->ruleLink = $ruleLink; - - + $this->message = $mainMessage; + $this->groupTitle = $groupTitle; + $this->groupLink = $groupLink; + $this->ruleTitle = $ruleTitle; + $this->ruleLink = $ruleLink; } /** @@ -66,11 +62,12 @@ class RuleActionFailed extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toArray($notifiable) { return [ - // ]; } @@ -80,6 +77,8 @@ class RuleActionFailed extends Notification * @param mixed $notifiable * * @return SlackMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toSlack($notifiable) { @@ -88,9 +87,9 @@ class RuleActionFailed extends Notification $ruleTitle = $this->ruleTitle; $ruleLink = $this->ruleLink; - return (new SlackMessage())->content($this->message)->attachment(function ($attachment) use ($groupTitle, $groupLink) { + return (new SlackMessage())->content($this->message)->attachment(static function ($attachment) use ($groupTitle, $groupLink): void { $attachment->title((string)trans('rules.inspect_transaction', ['title' => $groupTitle]), $groupLink); - })->attachment(function ($attachment) use ($ruleTitle, $ruleLink) { + })->attachment(static function ($attachment) use ($ruleTitle, $ruleLink): void { $attachment->title((string)trans('rules.inspect_rule', ['title' => $ruleTitle]), $ruleLink); }); } @@ -101,17 +100,24 @@ class RuleActionFailed extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function via($notifiable) { - /** @var User|null $user */ + /** @var null|User $user */ $user = auth()->user(); - $slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data; - if (UrlValidator::isValidWebhookURL($slackUrl)) { - app('log')->debug('Will send ruleActionFailed through Slack!'); + $slackUrl = null === $user ? '' : app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data; + if (is_array($slackUrl)) { + $slackUrl = ''; + } + if (UrlValidator::isValidWebhookURL((string)$slackUrl)) { + app('log')->debug('Will send ruleActionFailed through Slack or Discord!'); + return ['slack']; } - app('log')->debug('Will NOT send ruleActionFailed through Slack'); + app('log')->debug('Will NOT send ruleActionFailed through Slack or Discord'); + return []; } } diff --git a/app/Notifications/User/TransactionCreation.php b/app/Notifications/User/TransactionCreation.php index ee41ce8e72..fcf9f95fc0 100644 --- a/app/Notifications/User/TransactionCreation.php +++ b/app/Notifications/User/TransactionCreation.php @@ -39,8 +39,6 @@ class TransactionCreation extends Notification /** * Create a new notification instance. - * - * @return void */ public function __construct(array $collection) { @@ -53,11 +51,12 @@ class TransactionCreation extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toArray($notifiable) { return [ - // ]; } @@ -67,12 +66,15 @@ class TransactionCreation extends Notification * @param mixed $notifiable * * @return MailMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toMail($notifiable) { return (new MailMessage()) ->markdown('emails.report-new-journals', ['transformed' => $this->collection]) - ->subject((string)trans_choice('email.new_journals_subject', count($this->collection))); + ->subject(trans_choice('email.new_journals_subject', count($this->collection))) + ; } /** @@ -81,6 +83,8 @@ class TransactionCreation extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function via($notifiable) { diff --git a/app/Notifications/User/UserLogin.php b/app/Notifications/User/UserLogin.php index 0e6ddd5cdb..e7fc4e8a53 100644 --- a/app/Notifications/User/UserLogin.php +++ b/app/Notifications/User/UserLogin.php @@ -29,9 +29,8 @@ use FireflyIII\Support\Notifications\UrlValidator; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; -use Illuminate\Notifications\Notification; -use Illuminate\Support\Facades\Log; use Illuminate\Notifications\Messages\SlackMessage; +use Illuminate\Notifications\Notification; /** * Class UserLogin @@ -44,8 +43,6 @@ class UserLogin extends Notification /** * Create a new notification instance. - * - * @return void */ public function __construct(string $ip) { @@ -58,11 +55,12 @@ class UserLogin extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toArray($notifiable) { return [ - // ]; } @@ -72,15 +70,18 @@ class UserLogin extends Notification * @param mixed $notifiable * * @return MailMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toMail($notifiable) { $time = now(config('app.timezone'))->isoFormat((string)trans('config.date_time_js')); $host = ''; + try { $hostName = app('steam')->getHostName($this->ip); } catch (FireflyException $e) { - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); $hostName = $this->ip; } if ($hostName !== $this->ip) { @@ -89,7 +90,8 @@ class UserLogin extends Notification return (new MailMessage()) ->markdown('emails.new-ip', ['time' => $time, 'ipAddress' => $this->ip, 'host' => $host]) - ->subject((string)trans('email.login_from_new_ip')); + ->subject((string)trans('email.login_from_new_ip')) + ; } /** @@ -98,14 +100,17 @@ class UserLogin extends Notification * @param mixed $notifiable * * @return SlackMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toSlack($notifiable) { $host = ''; + try { $hostName = app('steam')->getHostName($this->ip); } catch (FireflyException $e) { - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); $hostName = $this->ip; } if ($hostName !== $this->ip) { @@ -121,15 +126,21 @@ class UserLogin extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function via($notifiable) { - /** @var User|null $user */ + /** @var null|User $user */ $user = auth()->user(); - $slackUrl = null === $user ? '' : (string)app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data; - if (UrlValidator::isValidWebhookURL($slackUrl)) { + $slackUrl = null === $user ? '' : app('preferences')->getForUser(auth()->user(), 'slack_webhook_url', '')->data; + if (is_array($slackUrl)) { + $slackUrl = ''; + } + if (UrlValidator::isValidWebhookURL((string)$slackUrl)) { return ['mail', 'slack']; } + return ['mail']; } } diff --git a/app/Notifications/User/UserNewPassword.php b/app/Notifications/User/UserNewPassword.php index 4d69465717..e4090984d5 100644 --- a/app/Notifications/User/UserNewPassword.php +++ b/app/Notifications/User/UserNewPassword.php @@ -39,8 +39,6 @@ class UserNewPassword extends Notification /** * Create a new notification instance. - * - * @return void */ public function __construct(string $url) { @@ -53,11 +51,12 @@ class UserNewPassword extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toArray($notifiable) { return [ - // ]; } @@ -67,12 +66,15 @@ class UserNewPassword extends Notification * @param mixed $notifiable * * @return MailMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toMail($notifiable) { return (new MailMessage()) ->markdown('emails.password', ['url' => $this->url]) - ->subject((string)trans('email.reset_pw_subject')); + ->subject((string)trans('email.reset_pw_subject')) + ; } /** @@ -81,6 +83,8 @@ class UserNewPassword extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function via($notifiable) { diff --git a/app/Notifications/User/UserRegistration.php b/app/Notifications/User/UserRegistration.php index dab21b71ba..50aae568a3 100644 --- a/app/Notifications/User/UserRegistration.php +++ b/app/Notifications/User/UserRegistration.php @@ -37,12 +37,8 @@ class UserRegistration extends Notification /** * Create a new notification instance. - * - * @return void */ - public function __construct() - { - } + public function __construct() {} /** * Get the array representation of the notification. @@ -50,11 +46,12 @@ class UserRegistration extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toArray($notifiable) { return [ - // ]; } @@ -64,12 +61,15 @@ class UserRegistration extends Notification * @param mixed $notifiable * * @return MailMessage + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function toMail($notifiable) { return (new MailMessage()) ->markdown('emails.registered', ['address' => route('index')]) - ->subject((string)trans('email.registered_subject')); + ->subject((string)trans('email.registered_subject')) + ; } /** @@ -78,6 +78,8 @@ class UserRegistration extends Notification * @param mixed $notifiable * * @return array + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function via($notifiable) { diff --git a/app/Providers/AccountServiceProvider.php b/app/Providers/AccountServiceProvider.php index e0e40daea8..3f18539064 100644 --- a/app/Providers/AccountServiceProvider.php +++ b/app/Providers/AccountServiceProvider.php @@ -42,9 +42,7 @@ class AccountServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -62,7 +60,7 @@ class AccountServiceProvider extends ServiceProvider { $this->app->bind( AccountRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var AccountRepositoryInterface $repository */ $repository = app(AccountRepository::class); @@ -77,7 +75,7 @@ class AccountServiceProvider extends ServiceProvider $this->app->bind( AdminAccountRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var AdminAccountRepositoryInterface $repository */ $repository = app(AdminAccountRepository::class); @@ -113,7 +111,7 @@ class AccountServiceProvider extends ServiceProvider { $this->app->bind( AccountTaskerInterface::class, - function (Application $app) { + static function (Application $app) { /** @var AccountTaskerInterface $tasker */ $tasker = app(AccountTasker::class); diff --git a/app/Providers/AdminServiceProvider.php b/app/Providers/AdminServiceProvider.php index baa781b603..307efca1ff 100644 --- a/app/Providers/AdminServiceProvider.php +++ b/app/Providers/AdminServiceProvider.php @@ -36,9 +36,7 @@ class AdminServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -55,7 +53,7 @@ class AdminServiceProvider extends ServiceProvider { $this->app->bind( LinkTypeRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var LinkTypeRepository $repository */ $repository = app(LinkTypeRepository::class); // reference to auth is not understood by phpstan. diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index c71588decc..b5a1183717 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -23,12 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Providers; +use Illuminate\Support\Facades\Blade; use Illuminate\Support\Facades\Response; use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; use Laravel\Passport\Passport; use Laravel\Sanctum\Sanctum; -use URL; /** * Class AppServiceProvider @@ -37,8 +37,6 @@ class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. - * - * @return void */ public function boot(): void { @@ -48,19 +46,37 @@ class AppServiceProvider extends ServiceProvider 'Cache-Control' => 'no-store', ]; $uuid = (string)request()->header('X-Trace-Id'); - if ('' !== trim($uuid) && (preg_match('/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i', trim($uuid)) === 1)) { + if ('' !== trim($uuid) && (1 === preg_match('/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i', trim($uuid)))) { $headers['X-Trace-Id'] = $uuid; } + return response() ->json($value) - ->withHeaders($headers); + ->withHeaders($headers) + ; + }); + + // blade extension + Blade::directive('activeXRoutePartial', function (string $route) { + $name = \Route::getCurrentRoute()->getName() ?? ''; + if (str_contains($name, $route)) { + return 'menu-open'; + } + + return ''; + }); + Blade::if('partialroute', function (string $route) { + $name = \Route::getCurrentRoute()->getName() ?? ''; + if (str_contains($name, $route)) { + return true; + } + + return false; }); } /** * Register any application services. - * - * @return void */ public function register(): void { diff --git a/app/Providers/AttachmentServiceProvider.php b/app/Providers/AttachmentServiceProvider.php index c6ba8cae34..6947d5d8a1 100644 --- a/app/Providers/AttachmentServiceProvider.php +++ b/app/Providers/AttachmentServiceProvider.php @@ -36,9 +36,7 @@ class AttachmentServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -47,7 +45,7 @@ class AttachmentServiceProvider extends ServiceProvider { $this->app->bind( AttachmentRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var AttachmentRepositoryInterface $repository */ $repository = app(AttachmentRepository::class); // reference to auth is not understood by phpstan. diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 331499dab6..6ad1fc165b 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -34,11 +34,6 @@ use Laravel\Passport\Passport; */ class AuthServiceProvider extends ServiceProvider { - /** - * The policy mappings for the application. - * - * @var array - */ protected $policies = [ // 'FireflyIII\Model' => 'FireflyIII\Policies\ModelPolicy', @@ -47,13 +42,13 @@ class AuthServiceProvider extends ServiceProvider /** * Register any authentication / authorization services. * - * @return void + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function boot(): void { Auth::provider( 'remote_user_provider', - function ($app, array $config) { + static function ($app, array $config) { return new RemoteUserProvider(); } ); diff --git a/app/Providers/BillServiceProvider.php b/app/Providers/BillServiceProvider.php index dac9f83a73..409b3ba4a7 100644 --- a/app/Providers/BillServiceProvider.php +++ b/app/Providers/BillServiceProvider.php @@ -38,9 +38,7 @@ class BillServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -49,7 +47,7 @@ class BillServiceProvider extends ServiceProvider { $this->app->bind( BillRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var BillRepositoryInterface $repository */ $repository = app(BillRepository::class); @@ -65,7 +63,7 @@ class BillServiceProvider extends ServiceProvider // administration variant $this->app->bind( AdminBillRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var AdminBillRepositoryInterface $repository */ $repository = app(AdminBillRepository::class); diff --git a/app/Providers/BudgetServiceProvider.php b/app/Providers/BudgetServiceProvider.php index 6f7b2ab1d0..1c31ea805f 100644 --- a/app/Providers/BudgetServiceProvider.php +++ b/app/Providers/BudgetServiceProvider.php @@ -50,12 +50,12 @@ class BudgetServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function register(): void { diff --git a/app/Providers/CategoryServiceProvider.php b/app/Providers/CategoryServiceProvider.php index c5c27b54b7..abfcd31037 100644 --- a/app/Providers/CategoryServiceProvider.php +++ b/app/Providers/CategoryServiceProvider.php @@ -29,6 +29,8 @@ use FireflyIII\Repositories\Category\NoCategoryRepository; use FireflyIII\Repositories\Category\NoCategoryRepositoryInterface; use FireflyIII\Repositories\Category\OperationsRepository; use FireflyIII\Repositories\Category\OperationsRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Category\CategoryRepository as UserGroupCategoryRepository; +use FireflyIII\Repositories\UserGroups\Category\CategoryRepositoryInterface as UserGroupCategoryRepositoryInterface; use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; @@ -40,9 +42,7 @@ class CategoryServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -63,6 +63,20 @@ class CategoryServiceProvider extends ServiceProvider } ); + // phpstan does not understand reference to 'auth'. + $this->app->bind( + UserGroupCategoryRepositoryInterface::class, + static function (Application $app) { + /** @var UserGroupCategoryRepository $repository */ + $repository = app(UserGroupCategoryRepository::class); + if ($app->auth->check()) { // @phpstan-ignore-line + $repository->setUser(auth()->user()); + } + + return $repository; + } + ); + $this->app->bind( OperationsRepositoryInterface::class, static function (Application $app) { diff --git a/app/Providers/CurrencyServiceProvider.php b/app/Providers/CurrencyServiceProvider.php index a543385757..6643cfa4c4 100644 --- a/app/Providers/CurrencyServiceProvider.php +++ b/app/Providers/CurrencyServiceProvider.php @@ -25,6 +25,8 @@ namespace FireflyIII\Providers; use FireflyIII\Repositories\Currency\CurrencyRepository; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepository as GroupCurrencyRepository; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface as GroupCurrencyRepositoryInterface; use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; @@ -36,9 +38,7 @@ class CurrencyServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -47,7 +47,7 @@ class CurrencyServiceProvider extends ServiceProvider { $this->app->bind( CurrencyRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var CurrencyRepository $repository */ $repository = app(CurrencyRepository::class); // phpstan does not get the reference to auth @@ -55,6 +55,19 @@ class CurrencyServiceProvider extends ServiceProvider $repository->setUser(auth()->user()); } + return $repository; + } + ); + $this->app->bind( + GroupCurrencyRepositoryInterface::class, + static function (Application $app) { + /** @var GroupCurrencyRepository $repository */ + $repository = app(GroupCurrencyRepository::class); + // phpstan does not get the reference to auth + if ($app->auth->check()) { // @phpstan-ignore-line + $repository->setUser(auth()->user()); + } + return $repository; } ); diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 0d93ba7b23..6893d62c6b 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -32,7 +32,6 @@ use FireflyIII\Events\Model\BudgetLimit\Created; use FireflyIII\Events\Model\BudgetLimit\Deleted; use FireflyIII\Events\Model\BudgetLimit\Updated; use FireflyIII\Events\Model\PiggyBank\ChangedAmount; -use FireflyIII\Events\Model\PiggyBank\ChangedPiggyBankAmount; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\Model\Rule\RuleActionFailedOnObject; use FireflyIII\Events\NewVersionAvailable; @@ -87,15 +86,10 @@ use Laravel\Passport\Events\AccessTokenCreated; /** * Class EventServiceProvider. * - + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class EventServiceProvider extends ServiceProvider { - /** - * The event listener mappings for the application. - * - * @var array - */ protected $listen = [ // is a User related event. @@ -211,7 +205,6 @@ class EventServiceProvider extends ServiceProvider RuleActionFailedOnObject::class => [ 'FireflyIII\Handlers\Events\Model\RuleHandler@ruleActionFailedOnObject', ], - ]; /** @@ -222,9 +215,6 @@ class EventServiceProvider extends ServiceProvider $this->registerObservers(); } - /** - * @return void - */ private function registerObservers(): void { Attachment::observe(new AttachmentObserver()); diff --git a/app/Providers/FireflyServiceProvider.php b/app/Providers/FireflyServiceProvider.php index d4accbf037..3f304c33da 100644 --- a/app/Providers/FireflyServiceProvider.php +++ b/app/Providers/FireflyServiceProvider.php @@ -72,13 +72,11 @@ use FireflyIII\TransactionRules\Engine\SearchRuleEngine; use FireflyIII\Validation\FireflyValidator; use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; -use Validator; /** - * * Class FireflyServiceProvider. * - * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class FireflyServiceProvider extends ServiceProvider { @@ -87,7 +85,7 @@ class FireflyServiceProvider extends ServiceProvider */ public function boot(): void { - Validator::resolver( + \Validator::resolver( static function ($translator, $data, $rules, $messages) { return new FireflyValidator($translator, $data, $rules, $messages); } @@ -97,6 +95,7 @@ class FireflyServiceProvider extends ServiceProvider /** * Register stuff. * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function register(): void { diff --git a/app/Providers/FireflySessionProvider.php b/app/Providers/FireflySessionProvider.php index f07474003c..3ffeb23a0d 100644 --- a/app/Providers/FireflySessionProvider.php +++ b/app/Providers/FireflySessionProvider.php @@ -51,7 +51,7 @@ class FireflySessionProvider extends ServiceProvider { $this->app->singleton( 'session', - function ($app) { + static function ($app) { return new SessionManager($app); } ); @@ -64,7 +64,7 @@ class FireflySessionProvider extends ServiceProvider { $this->app->singleton( 'session.store', - function ($app) { + static function ($app) { // First, we will create the session manager which is responsible for the // creation of the various session drivers when they are needed by the // application instance, and will resolve them on a lazy load basis. diff --git a/app/Providers/JournalServiceProvider.php b/app/Providers/JournalServiceProvider.php index fa8dd0c960..a70532dc81 100644 --- a/app/Providers/JournalServiceProvider.php +++ b/app/Providers/JournalServiceProvider.php @@ -31,10 +31,10 @@ use FireflyIII\Repositories\Journal\JournalCLIRepository; use FireflyIII\Repositories\Journal\JournalCLIRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepository; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; -use FireflyIII\Repositories\UserGroups\Journal\JournalRepository as GroupJournalRepository; -use FireflyIII\Repositories\UserGroups\Journal\JournalRepositoryInterface as GroupJournalRepositoryInterface; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepository; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Journal\JournalRepository as GroupJournalRepository; +use FireflyIII\Repositories\UserGroups\Journal\JournalRepositoryInterface as GroupJournalRepositoryInterface; use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; @@ -46,9 +46,7 @@ class JournalServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -139,9 +137,6 @@ class JournalServiceProvider extends ServiceProvider ); } - /** - * - */ private function registerGroupCollector(): void { $this->app->bind( diff --git a/app/Providers/PiggyBankServiceProvider.php b/app/Providers/PiggyBankServiceProvider.php index 061bc311c0..ec3c9653b4 100644 --- a/app/Providers/PiggyBankServiceProvider.php +++ b/app/Providers/PiggyBankServiceProvider.php @@ -25,10 +25,8 @@ namespace FireflyIII\Providers; use FireflyIII\Repositories\PiggyBank\PiggyBankRepository; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; - use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepository as AdminPiggyBankRepository; use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepositoryInterface as AdminPiggyBankRepositoryInterface; - use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; @@ -40,9 +38,7 @@ class PiggyBankServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -51,7 +47,7 @@ class PiggyBankServiceProvider extends ServiceProvider { $this->app->bind( PiggyBankRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var PiggyBankRepository $repository */ $repository = app(PiggyBankRepository::class); if ($app->auth->check()) { // @phpstan-ignore-line (phpstan does not understand the reference to auth) @@ -64,12 +60,13 @@ class PiggyBankServiceProvider extends ServiceProvider $this->app->bind( AdminPiggyBankRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var AdminPiggyBankRepository $repository */ $repository = app(AdminPiggyBankRepository::class); if ($app->auth->check()) { // @phpstan-ignore-line (phpstan does not understand the reference to auth) $repository->setUser(auth()->user()); } + return $repository; } ); diff --git a/app/Providers/RecurringServiceProvider.php b/app/Providers/RecurringServiceProvider.php index b954885476..884dc1f036 100644 --- a/app/Providers/RecurringServiceProvider.php +++ b/app/Providers/RecurringServiceProvider.php @@ -36,9 +36,7 @@ class RecurringServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -47,7 +45,7 @@ class RecurringServiceProvider extends ServiceProvider { $this->app->bind( RecurringRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var RecurringRepositoryInterface $repository */ $repository = app(RecurringRepository::class); diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 2950640f53..4382229f44 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -31,40 +31,31 @@ use Illuminate\Support\Facades\Route; */ class RouteServiceProvider extends ServiceProvider { - /** - * The path to the "home" route for your application. - * - * @var string - */ - public const HOME = '/'; - /** - * This namespace is applied to your controller routes. - * - * In addition, it is set as the URL generator's root namespace. - * - * @var string - */ - protected $namespace = ''; + public const string HOME = '/'; + protected $namespace = ''; /** * Define the routes for the application. */ public function boot(): void { - $this->routes(function () { + $this->routes(function (): void { Route::prefix('api') - ->middleware('api') - ->namespace($this->namespace) - ->group(base_path('routes/api.php')); + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')) + ; Route::prefix('api/v1/cron') - ->middleware('api_basic') - ->namespace($this->namespace) - ->group(base_path('routes/api-noauth.php')); + ->middleware('api_basic') + ->namespace($this->namespace) + ->group(base_path('routes/api-noauth.php')) + ; Route::middleware('web') - ->namespace($this->namespace) - ->group(base_path('routes/web.php')); + ->namespace($this->namespace) + ->group(base_path('routes/web.php')) + ; }); } } diff --git a/app/Providers/RuleGroupServiceProvider.php b/app/Providers/RuleGroupServiceProvider.php index 01297995ae..e43ee595e2 100644 --- a/app/Providers/RuleGroupServiceProvider.php +++ b/app/Providers/RuleGroupServiceProvider.php @@ -36,9 +36,7 @@ class RuleGroupServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -47,7 +45,7 @@ class RuleGroupServiceProvider extends ServiceProvider { $this->app->bind( RuleGroupRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var RuleGroupRepository $repository */ $repository = app(RuleGroupRepository::class); if ($app->auth->check()) { // @phpstan-ignore-line (phpstan does not understand the reference to auth) diff --git a/app/Providers/RuleServiceProvider.php b/app/Providers/RuleServiceProvider.php index 62dfb0e3e7..9073b9cc7d 100644 --- a/app/Providers/RuleServiceProvider.php +++ b/app/Providers/RuleServiceProvider.php @@ -36,9 +36,7 @@ class RuleServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -47,7 +45,7 @@ class RuleServiceProvider extends ServiceProvider { $this->app->bind( RuleRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var RuleRepository $repository */ $repository = app(RuleRepository::class); if ($app->auth->check()) { // @phpstan-ignore-line (phpstan does not understand the reference to auth) diff --git a/app/Providers/SearchServiceProvider.php b/app/Providers/SearchServiceProvider.php index 3bdbcdf5e6..0bb2b1056b 100644 --- a/app/Providers/SearchServiceProvider.php +++ b/app/Providers/SearchServiceProvider.php @@ -36,9 +36,7 @@ class SearchServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -47,7 +45,7 @@ class SearchServiceProvider extends ServiceProvider { $this->app->bind( SearchInterface::class, - function (Application $app) { + static function (Application $app) { /** @var OperatorQuerySearch $search */ $search = app(OperatorQuerySearch::class); if ($app->auth->check()) { // @phpstan-ignore-line (phpstan does not understand the reference to auth) diff --git a/app/Providers/TagServiceProvider.php b/app/Providers/TagServiceProvider.php index 17f5e107d2..c226dc5e9d 100644 --- a/app/Providers/TagServiceProvider.php +++ b/app/Providers/TagServiceProvider.php @@ -27,6 +27,8 @@ use FireflyIII\Repositories\Tag\OperationsRepository; use FireflyIII\Repositories\Tag\OperationsRepositoryInterface; use FireflyIII\Repositories\Tag\TagRepository; use FireflyIII\Repositories\Tag\TagRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Tag\TagRepository as UserGroupTagRepository; +use FireflyIII\Repositories\UserGroups\Tag\TagRepositoryInterface as UserGroupTagRepositoryInterface; use Illuminate\Foundation\Application; use Illuminate\Support\ServiceProvider; @@ -38,9 +40,7 @@ class TagServiceProvider extends ServiceProvider /** * Bootstrap the application services. */ - public function boot(): void - { - } + public function boot(): void {} /** * Register the application services. @@ -49,7 +49,7 @@ class TagServiceProvider extends ServiceProvider { $this->app->bind( TagRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var TagRepository $repository */ $repository = app(TagRepository::class); @@ -61,9 +61,23 @@ class TagServiceProvider extends ServiceProvider } ); + $this->app->bind( + UserGroupTagRepositoryInterface::class, + static function (Application $app) { + /** @var UserGroupTagRepository $repository */ + $repository = app(UserGroupTagRepository::class); + + if ($app->auth->check()) { // @phpstan-ignore-line (phpstan does not understand the reference to auth) + $repository->setUser(auth()->user()); + } + + return $repository; + } + ); + $this->app->bind( OperationsRepositoryInterface::class, - function (Application $app) { + static function (Application $app) { /** @var OperationsRepository $repository */ $repository = app(OperationsRepository::class); diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index 80bdd00a9e..90ea3ceaf5 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -42,13 +42,9 @@ use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; -use Storage; /** * Class AccountRepository. - * */ class AccountRepository implements AccountRepositoryInterface { @@ -56,13 +52,6 @@ class AccountRepository implements AccountRepositoryInterface /** * Moved here from account CRUD. - * - * @param Account $account - * @param Account|null $moveTo - * - * @return bool - * - */ public function destroy(Account $account, ?Account $moveTo): bool { @@ -75,29 +64,30 @@ class AccountRepository implements AccountRepositoryInterface /** * Find account with same name OR same IBAN or both, but not the same type or ID. - * - * @param Collection $accounts - * - * @return Collection */ public function expandWithDoubles(Collection $accounts): Collection { $result = new Collection(); + /** @var Account $account */ foreach ($accounts as $account) { $byName = $this->user->accounts()->where('name', $account->name) - ->where('id', '!=', $account->id)->first(); + ->where('id', '!=', $account->id)->first() + ; if (null !== $byName) { $result->push($account); $result->push($byName); + continue; } if (null !== $account->iban) { $byIban = $this->user->accounts()->where('iban', $account->iban) - ->where('id', '!=', $account->id)->first(); + ->where('id', '!=', $account->id)->first() + ; if (null !== $byIban) { $result->push($account); $result->push($byIban); + continue; } } @@ -107,9 +97,6 @@ class AccountRepository implements AccountRepositoryInterface return $result; } - /** - * @inheritDoc - */ public function findByAccountNumber(string $number, array $types): ?Account { $dbQuery = $this->user @@ -117,27 +104,23 @@ class AccountRepository implements AccountRepositoryInterface ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') ->where('accounts.active', true) ->where( - function (EloquentBuilder $q1) use ($number) { + static function (EloquentBuilder $q1) use ($number): void { // @phpstan-ignore-line $json = json_encode($number); $q1->where('account_meta.name', '=', 'account_number'); $q1->where('account_meta.data', '=', $json); } - ); + ) + ; if (0 !== count($types)) { $dbQuery->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id'); $dbQuery->whereIn('account_types.type', $types); } - /** @var Account|null */ + + // @var Account|null return $dbQuery->first(['accounts.*']); } - /** - * @param string $iban - * @param array $types - * - * @return Account|null - */ public function findByIbanNull(string $iban, array $types): ?Account { $query = $this->user->accounts()->where('iban', '!=', '')->whereNotNull('iban'); @@ -147,56 +130,42 @@ class AccountRepository implements AccountRepositoryInterface $query->whereIn('account_types.type', $types); } - /** @var Account|null */ + // @var Account|null return $query->where('iban', $iban)->first(['accounts.*']); } - /** - * @param string $name - * @param array $types - * - * @return Account|null - */ public function findByName(string $name, array $types): ?Account { - $query = $this->user->accounts(); + $query = $this->user->accounts(); if (0 !== count($types)) { $query->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id'); $query->whereIn('account_types.type', $types); } - Log::debug(sprintf('Searching for account named "%s" (of user #%d) of the following type(s)', $name, $this->user->id), ['types' => $types]); + app('log')->debug(sprintf('Searching for account named "%s" (of user #%d) of the following type(s)', $name, $this->user->id), ['types' => $types]); $query->where('accounts.name', $name); - /** @var Account $account */ + + /** @var null|Account $account */ $account = $query->first(['accounts.*']); if (null === $account) { - Log::debug(sprintf('There is no account with name "%s" of types', $name), $types); + app('log')->debug(sprintf('There is no account with name "%s" of types', $name), $types); return null; } - Log::debug(sprintf('Found #%d (%s) with type id %d', $account->id, $account->name, $account->account_type_id)); + app('log')->debug(sprintf('Found #%d (%s) with type id %d', $account->id, $account->name, $account->account_type_id)); return $account; } /** * Return account type or null if not found. - * - * @param string $type - * - * @return AccountType|null */ public function getAccountTypeByType(string $type): ?AccountType { return AccountType::whereType(ucfirst($type))->first(); } - /** - * @param array $accountIds - * - * @return Collection - */ public function getAccountsById(array $accountIds): Collection { $query = $this->user->accounts(); @@ -211,16 +180,11 @@ class AccountRepository implements AccountRepositoryInterface return $query->get(['accounts.*']); } - /** - * @param array $types - * - * @return Collection - */ public function getActiveAccountsByType(array $types): Collection { $query = $this->user->accounts()->with( [ - 'accountmeta' => function (HasMany $query) { + 'accountmeta' => static function (HasMany $query): void { $query->where('name', 'account_role'); }, 'attachments', @@ -237,21 +201,18 @@ class AccountRepository implements AccountRepositoryInterface return $query->get(['accounts.*']); } - /** - * @inheritDoc - */ public function getAttachments(Account $account): Collection { - $set = $account->attachments()->get(); + $set = $account->attachments()->get(); - /** @var Storage $disk */ - $disk = Storage::disk('upload'); + /** @var \Storage $disk */ + $disk = \Storage::disk('upload'); return $set->each( static function (Attachment $attachment) use ($disk) { $notes = $attachment->notes()->first(); $attachment->file_exists = $disk->exists($attachment->fileName()); - $attachment->notes = $notes ? $notes->text : ''; + $attachment->notes_text = null !== $notes ? $notes->text : ''; return $attachment; } @@ -259,15 +220,13 @@ class AccountRepository implements AccountRepositoryInterface } /** - * @return Account - * * @throws FireflyException - * @throws JsonException */ public function getCashAccount(): Account { /** @var AccountType $type */ - $type = AccountType::where('type', AccountType::CASH)->first(); + $type = AccountType::where('type', AccountType::CASH)->first(); + /** @var AccountFactory $factory */ $factory = app(AccountFactory::class); $factory->setUser($this->user); @@ -275,38 +234,29 @@ class AccountRepository implements AccountRepositoryInterface return $factory->findOrCreate('Cash account', $type->type); } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @inheritDoc - */ public function getCreditTransactionGroup(Account $account): ?TransactionGroup { $journal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transactions.account_id', $account->id) - ->transactionTypes([TransactionType::LIABILITY_CREDIT]) - ->first(['transaction_journals.*']); + ->where('transactions.account_id', $account->id) + ->transactionTypes([TransactionType::LIABILITY_CREDIT]) + ->first(['transaction_journals.*']) + ; + return $journal?->transactionGroup; } - /** - * @param array $types - * - * @return Collection - */ public function getInactiveAccountsByType(array $types): Collection { $query = $this->user->accounts()->with( [ - 'accountmeta' => function (HasMany $query) { + 'accountmeta' => static function (HasMany $query): void { $query->where('name', 'account_role'); }, ] @@ -322,21 +272,14 @@ class AccountRepository implements AccountRepositoryInterface return $query->get(['accounts.*']); } - /** - * @inheritDoc - */ public function getLocation(Account $account): ?Location { - /** @var Location|null */ + // @var Location|null return $account->locations()->first(); } /** * Get note text or null. - * - * @param Account $account - * - * @return null|string */ public function getNoteText(Account $account): ?string { @@ -345,17 +288,14 @@ class AccountRepository implements AccountRepositoryInterface /** * Returns the amount of the opening balance for this account. - * - * @param Account $account - * - * @return string|null */ public function getOpeningBalanceAmount(Account $account): ?string { - $journal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transactions.account_id', $account->id) - ->transactionTypes([TransactionType::OPENING_BALANCE, TransactionType::LIABILITY_CREDIT]) - ->first(['transaction_journals.*']); + $journal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') + ->where('transactions.account_id', $account->id) + ->transactionTypes([TransactionType::OPENING_BALANCE, TransactionType::LIABILITY_CREDIT]) + ->first(['transaction_journals.*']) + ; if (null === $journal) { return null; } @@ -364,29 +304,21 @@ class AccountRepository implements AccountRepositoryInterface return null; } - return (string)$transaction->amount; + return $transaction->amount; } /** * Return date of opening balance as string or null. - * - * @param Account $account - * - * @return null|string */ public function getOpeningBalanceDate(Account $account): ?string { return TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transactions.account_id', $account->id) - ->transactionTypes([TransactionType::OPENING_BALANCE, TransactionType::LIABILITY_CREDIT]) - ->first(['transaction_journals.*'])?->date->format('Y-m-d H:i:s'); + ->where('transactions.account_id', $account->id) + ->transactionTypes([TransactionType::OPENING_BALANCE, TransactionType::LIABILITY_CREDIT]) + ->first(['transaction_journals.*'])?->date->format('Y-m-d H:i:s') + ; } - /** - * @param Account $account - * - * @return TransactionGroup|null - */ public function getOpeningBalanceGroup(Account $account): ?TransactionGroup { $journal = $this->getOpeningBalance($account); @@ -394,36 +326,22 @@ class AccountRepository implements AccountRepositoryInterface return $journal?->transactionGroup; } - /** - * @param Account $account - * - * @return TransactionJournal|null - */ public function getOpeningBalance(Account $account): ?TransactionJournal { return TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transactions.account_id', $account->id) - ->transactionTypes([TransactionType::OPENING_BALANCE]) - ->first(['transaction_journals.*']); + ->where('transactions.account_id', $account->id) + ->transactionTypes([TransactionType::OPENING_BALANCE]) + ->first(['transaction_journals.*']) + ; } - /** - * @param Account $account - * - * @return Collection - */ public function getPiggyBanks(Account $account): Collection { return $account->piggyBanks()->get(); } /** - * @param Account $account - * - * @return Account|null - * * @throws FireflyException - * @throws JsonException */ public function getReconciliation(Account $account): ?Account { @@ -434,17 +352,19 @@ class AccountRepository implements AccountRepositoryInterface $name = trans('firefly.reconciliation_account_name', ['name' => $account->name, 'currency' => $currency->code]); /** @var AccountType $type */ - $type = AccountType::where('type', AccountType::RECONCILIATION)->first(); - $current = $this->user->accounts()->where('account_type_id', $type->id) - ->where('name', $name) - ->first(); + $type = AccountType::where('type', AccountType::RECONCILIATION)->first(); + + /** @var null|Account $current */ + $current = $this->user->accounts()->where('account_type_id', $type->id) + ->where('name', $name) + ->first() + ; - /** @var Account $current */ if (null !== $current) { return $current; } - $data = [ + $data = [ 'account_type_id' => null, 'account_type_name' => AccountType::RECONCILIATION, 'active' => true, @@ -454,21 +374,16 @@ class AccountRepository implements AccountRepositoryInterface ]; /** @var AccountFactory $factory */ - $factory = app(AccountFactory::class); + $factory = app(AccountFactory::class); $factory->setUser($account->user); return $factory->create($data); } - /** - * @param Account $account - * - * @return TransactionCurrency|null - */ public function getAccountCurrency(Account $account): ?TransactionCurrency { - $type = $account->accountType->type; - $list = config('firefly.valid_currency_account_types'); + $type = $account->accountType->type; + $list = config('firefly.valid_currency_account_types'); // return null if not in this list. if (!in_array($type, $list, true)) { @@ -484,16 +399,11 @@ class AccountRepository implements AccountRepositoryInterface /** * Return meta value for account. Null if not found. - * - * @param Account $account - * @param string $field - * - * @return null|string */ public function getMetaValue(Account $account, string $field): ?string { $result = $account->accountMeta->filter( - function (AccountMeta $meta) use ($field) { + static function (AccountMeta $meta) use ($field) { return strtolower($meta->name) === strtolower($field); } ); @@ -507,29 +417,16 @@ class AccountRepository implements AccountRepositoryInterface return null; } - /** - * @param array $types - * - * @return int - */ public function count(array $types): int { return $this->user->accounts()->accountTypeIn($types)->count(); } - /** - * @param int $accountId - * - * @return Account|null - */ public function find(int $accountId): ?Account { return $this->user->accounts()->find($accountId); } - /** - * @inheritDoc - */ public function getUsedCurrencies(Account $account): Collection { $info = $account->transactions()->get(['transaction_currency_id', 'foreign_currency_id'])->toArray(); @@ -543,22 +440,14 @@ class AccountRepository implements AccountRepositoryInterface return TransactionCurrency::whereIn('id', $currencyIds)->get(); } - /** - * @param Account $account - * - * @return bool - */ public function isLiability(Account $account): bool { return in_array($account->accountType->type, [AccountType::CREDITCARD, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], true); } - /** - * @inheritDoc - */ public function maxOrder(string $type): int { - $sets = [ + $sets = [ AccountType::ASSET => [AccountType::DEFAULT, AccountType::ASSET], AccountType::EXPENSE => [AccountType::EXPENSE, AccountType::BENEFICIARY], AccountType::REVENUE => [AccountType::REVENUE], @@ -568,24 +457,18 @@ class AccountRepository implements AccountRepositoryInterface ]; if (array_key_exists(ucfirst($type), $sets)) { $order = (int)$this->getAccountsByType($sets[ucfirst($type)])->max('order'); - Log::debug(sprintf('Return max order of "%s" set: %d', $type, $order)); + app('log')->debug(sprintf('Return max order of "%s" set: %d', $type, $order)); return $order; } $specials = [AccountType::CASH, AccountType::INITIAL_BALANCE, AccountType::IMPORT, AccountType::RECONCILIATION]; - $order = (int)$this->getAccountsByType($specials)->max('order'); - Log::debug(sprintf('Return max order of "%s" set (specials!): %d', $type, $order)); + $order = (int)$this->getAccountsByType($specials)->max('order'); + app('log')->debug(sprintf('Return max order of "%s" set (specials!): %d', $type, $order)); return $order; } - /** - * @param array $types - * @param array|null $sort - * - * @return Collection - */ public function getAccountsByType(array $types, ?array $sort = []): Collection { $res = array_intersect([AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT], $types); @@ -614,10 +497,6 @@ class AccountRepository implements AccountRepositoryInterface /** * Returns the date of the very first transaction in this account. - * - * @param Account $account - * - * @return Carbon|null */ public function oldestJournalDate(Account $account): ?Carbon { @@ -628,38 +507,33 @@ class AccountRepository implements AccountRepositoryInterface /** * Returns the date of the very first transaction in this account. - * - * @param Account $account - * - * @return TransactionJournal|null */ public function oldestJournal(Account $account): ?TransactionJournal { + /** @var null|TransactionJournal $first */ $first = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->orderBy('transaction_journals.date', 'ASC') - ->orderBy('transaction_journals.order', 'DESC') - ->where('transaction_journals.user_id', $this->user->id) - ->orderBy('transaction_journals.id', 'ASC') - ->first(['transaction_journals.id']); + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->orderBy('transaction_journals.date', 'ASC') + ->orderBy('transaction_journals.order', 'DESC') + ->where('transaction_journals.user_id', $this->user->id) + ->orderBy('transaction_journals.id', 'ASC') + ->first(['transaction_journals.id']) + ; if (null !== $first) { - return TransactionJournal::find((int)$first->id); + return TransactionJournal::find($first->id); } return null; } - /** - * @inheritDoc - */ public function resetAccountOrder(): void { $sets = [ [AccountType::DEFAULT, AccountType::ASSET], - //[AccountType::EXPENSE, AccountType::BENEFICIARY], - //[AccountType::REVENUE], + // [AccountType::EXPENSE, AccountType::BENEFICIARY], + // [AccountType::REVENUE], [AccountType::LOAN, AccountType::DEBT, AccountType::CREDITCARD, AccountType::MORTGAGE], - //[AccountType::CASH, AccountType::INITIAL_BALANCE, AccountType::IMPORT, AccountType::RECONCILIATION], + // [AccountType::CASH, AccountType::INITIAL_BALANCE, AccountType::IMPORT, AccountType::RECONCILIATION], ]; foreach ($sets as $set) { $list = $this->getAccountsByType($set); @@ -667,33 +541,28 @@ class AccountRepository implements AccountRepositoryInterface foreach ($list as $account) { if (false === $account->active) { $account->order = 0; + continue; } if ($index !== (int)$account->order) { - Log::debug(sprintf('Account #%d ("%s"): order should %d be but is %d.', $account->id, $account->name, $index, $account->order)); + app('log')->debug(sprintf('Account #%d ("%s"): order should %d be but is %d.', $account->id, $account->name, $index, $account->order)); $account->order = $index; $account->save(); } - $index++; + ++$index; } } } - /** - * @param string $query - * @param array $types - * @param int $limit - * - * @return Collection - */ public function searchAccount(string $query, array $types, int $limit): Collection { $dbQuery = $this->user->accounts() - ->where('active', true) - ->orderBy('accounts.order', 'ASC') - ->orderBy('accounts.account_type_id', 'ASC') - ->orderBy('accounts.name', 'ASC') - ->with(['accountType']); + ->where('active', true) + ->orderBy('accounts.order', 'ASC') + ->orderBy('accounts.account_type_id', 'ASC') + ->orderBy('accounts.name', 'ASC') + ->with(['accountType']) + ; if ('' !== $query) { // split query on spaces just in case: $parts = explode(' ', $query); @@ -710,28 +579,26 @@ class AccountRepository implements AccountRepositoryInterface return $dbQuery->take($limit)->get(['accounts.*']); } - /** - * @inheritDoc - */ public function searchAccountNr(string $query, array $types, int $limit): Collection { $dbQuery = $this->user->accounts()->distinct() - ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') - ->where('accounts.active', true) - ->orderBy('accounts.order', 'ASC') - ->orderBy('accounts.account_type_id', 'ASC') - ->orderBy('accounts.name', 'ASC') - ->with(['accountType', 'accountMeta']); + ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') + ->where('accounts.active', true) + ->orderBy('accounts.order', 'ASC') + ->orderBy('accounts.account_type_id', 'ASC') + ->orderBy('accounts.name', 'ASC') + ->with(['accountType', 'accountMeta']) + ; if ('' !== $query) { // split query on spaces just in case: $parts = explode(' ', $query); foreach ($parts as $part) { $search = sprintf('%%%s%%', $part); $dbQuery->where( - function (EloquentBuilder $q1) use ($search) { + static function (EloquentBuilder $q1) use ($search): void { // @phpstan-ignore-line $q1->where('accounts.iban', 'LIKE', $search); $q1->orWhere( - function (EloquentBuilder $q2) use ($search) { + static function (EloquentBuilder $q2) use ($search): void { $q2->where('account_meta.name', '=', 'account_number'); $q2->where('account_meta.data', 'LIKE', $search); } @@ -749,11 +616,7 @@ class AccountRepository implements AccountRepositoryInterface } /** - * @param array $data - * - * @return Account * @throws FireflyException - * @throws JsonException */ public function store(array $data): Account { @@ -765,12 +628,7 @@ class AccountRepository implements AccountRepositoryInterface } /** - * @param Account $account - * @param array $data - * - * @return Account * @throws FireflyException - * @throws JsonException */ public function update(Account $account, array $data): Account { diff --git a/app/Repositories/Account/AccountRepositoryInterface.php b/app/Repositories/Account/AccountRepositoryInterface.php index 4e71af2b63..8b301a7621 100644 --- a/app/Repositories/Account/AccountRepositoryInterface.php +++ b/app/Repositories/Account/AccountRepositoryInterface.php @@ -41,241 +41,100 @@ interface AccountRepositoryInterface { /** * Moved here from account CRUD. - * - * @param array $types - * - * @return int */ public function count(array $types): int; - /** * Moved here from account CRUD. - * - * @param Account $account - * @param Account|null $moveTo - * - * @return bool */ public function destroy(Account $account, ?Account $moveTo): bool; /** * Find account with same name OR same IBAN or both, but not the same type or ID. - * - * @param Collection $accounts - * - * @return Collection */ public function expandWithDoubles(Collection $accounts): Collection; - /** - * @param int $accountId - * - * @return Account|null - */ public function find(int $accountId): ?Account; - /** - * @param string $number - * @param array $types - * - * @return Account|null - */ public function findByAccountNumber(string $number, array $types): ?Account; - /** - * @param string $iban - * @param array $types - * - * @return Account|null - */ public function findByIbanNull(string $iban, array $types): ?Account; - /** - * @param string $name - * @param array $types - * - * @return Account|null - */ public function findByName(string $name, array $types): ?Account; - /** - * @param Account $account - * - * @return TransactionCurrency|null - */ public function getAccountCurrency(Account $account): ?TransactionCurrency; /** * Return account type or null if not found. - * - * @param string $type - * - * @return AccountType|null */ public function getAccountTypeByType(string $type): ?AccountType; - /** - * @param array $accountIds - * - * @return Collection - */ public function getAccountsById(array $accountIds): Collection; /** - * @param array $types - * @param array|null $sort - * - * @return Collection + * @param array $types */ public function getAccountsByType(array $types, ?array $sort = []): Collection; - /** - * @param array $types - * - * @return Collection - */ public function getActiveAccountsByType(array $types): Collection; - /** - * @param Account $account - * - * @return Collection - */ public function getAttachments(Account $account): Collection; - /** - * @return Account - */ public function getCashAccount(): Account; - /** - * @param Account $account - * - * @return TransactionGroup|null - */ public function getCreditTransactionGroup(Account $account): ?TransactionGroup; - /** - * @param array $types - * - * @return Collection - */ public function getInactiveAccountsByType(array $types): Collection; /** * Get account location, if any. - * - * @param Account $account - * - * @return Location|null */ public function getLocation(Account $account): ?Location; /** * Return meta value for account. Null if not found. - * - * @param Account $account - * @param string $field - * - * @return null|string */ public function getMetaValue(Account $account, string $field): ?string; /** * Get note text or null. - * - * @param Account $account - * - * @return null|string */ public function getNoteText(Account $account): ?string; - /** - * @param Account $account - * - * @return TransactionJournal|null - * - */ public function getOpeningBalance(Account $account): ?TransactionJournal; /** * Returns the amount of the opening balance for this account. - * - * @param Account $account - * - * @return string|null */ public function getOpeningBalanceAmount(Account $account): ?string; /** * Return date of opening balance as string or null. - * - * @param Account $account - * - * @return null|string */ public function getOpeningBalanceDate(Account $account): ?string; - /** - * @param Account $account - * - * @return TransactionGroup|null - */ public function getOpeningBalanceGroup(Account $account): ?TransactionGroup; - /** - * @param Account $account - * - * @return Collection - */ public function getPiggyBanks(Account $account): Collection; /** * Find or create the opposing reconciliation account. - * - * @param Account $account - * - * @return Account|null */ public function getReconciliation(Account $account): ?Account; - /** - * @param Account $account - * - * @return Collection - */ public function getUsedCurrencies(Account $account): Collection; - /** - * @param Account $account - * - * @return bool - */ public function isLiability(Account $account): bool; - /** - * @param string $type - * - * @return int - */ public function maxOrder(string $type): int; /** * Returns the date of the very first transaction in this account. - * - * @param Account $account - * - * @return TransactionJournal|null */ public function oldestJournal(Account $account): ?TransactionJournal; /** * Returns the date of the very first transaction in this account. - * - * @param Account $account - * - * @return Carbon|null */ public function oldestJournalDate(Account $account): ?Carbon; @@ -284,41 +143,13 @@ interface AccountRepositoryInterface */ public function resetAccountOrder(): void; - /** - * @param string $query - * @param array $types - * @param int $limit - * - * @return Collection - */ public function searchAccount(string $query, array $types, int $limit): Collection; - /** - * @param string $query - * @param array $types - * @param int $limit - * - * @return Collection - */ public function searchAccountNr(string $query, array $types, int $limit): Collection; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; - /** - * @param array $data - * - * @return Account - */ public function store(array $data): Account; - /** - * @param Account $account - * @param array $data - * - * @return Account - */ public function update(Account $account, array $data): Account; } diff --git a/app/Repositories/Account/AccountTasker.php b/app/Repositories/Account/AccountTasker.php index bb34482089..000d4a0589 100644 --- a/app/Repositories/Account/AccountTasker.php +++ b/app/Repositories/Account/AccountTasker.php @@ -28,12 +28,10 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\Account; use FireflyIII\Models\TransactionType; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class AccountTasker. @@ -43,36 +41,30 @@ class AccountTasker implements AccountTaskerInterface private User $user; /** - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException - * @throws JsonException */ public function getAccountReport(Collection $accounts, Carbon $start, Carbon $end): array { - $yesterday = clone $start; + $yesterday = clone $start; $yesterday->subDay(); - $startSet = app('steam')->balancesByAccounts($accounts, $yesterday); - $endSet = app('steam')->balancesByAccounts($accounts, $end); - Log::debug('Start of accountreport'); + $startSet = app('steam')->balancesByAccounts($accounts, $yesterday); + $endSet = app('steam')->balancesByAccounts($accounts, $end); + app('log')->debug('Start of accountreport'); /** @var AccountRepositoryInterface $repository */ $repository = app(AccountRepositoryInterface::class); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser($this->user); + $defaultCurrency = app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); - $return = [ + $return = [ 'accounts' => [], 'sums' => [], ]; /** @var Account $account */ foreach ($accounts as $account) { - $id = $account->id; - $currency = $repository->getAccountCurrency($account) ?? $defaultCurrency; - $return['sums'][$currency->id] = $return['sums'][$currency->id] ?? [ + $id = $account->id; + $currency = $repository->getAccountCurrency($account) ?? $defaultCurrency; + $return['sums'][$currency->id] ??= [ 'start' => '0', 'end' => '0', 'difference' => '0', @@ -82,7 +74,7 @@ class AccountTasker implements AccountTaskerInterface 'currency_name' => $currency->name, 'currency_decimal_places' => $currency->decimal_places, ]; - $entry = [ + $entry = [ 'name' => $account->name, 'id' => $account->id, 'currency_id' => $currency->id, @@ -93,15 +85,15 @@ class AccountTasker implements AccountTaskerInterface ]; // get first journal date: - $first = $repository->oldestJournal($account); - $entry['start_balance'] = $startSet[$account->id] ?? '0'; - $entry['end_balance'] = $endSet[$account->id] ?? '0'; + $first = $repository->oldestJournal($account); + $entry['start_balance'] = $startSet[$account->id] ?? '0'; + $entry['end_balance'] = $endSet[$account->id] ?? '0'; // first journal exists, and is on start, then this is the actual opening balance: if (null !== $first && $first->date->isSameDay($start) && TransactionType::OPENING_BALANCE === $first->transactionType->type) { - Log::debug(sprintf('Date of first journal for %s is %s', $account->name, $first->date->format('Y-m-d'))); + app('log')->debug(sprintf('Date of first journal for %s is %s', $account->name, $first->date->format('Y-m-d'))); $entry['start_balance'] = $first->transactions()->where('account_id', $account->id)->first()->amount; - Log::debug(sprintf('Account %s was opened on %s, so opening balance is %f', $account->name, $start->format('Y-m-d'), $entry['start_balance'])); + app('log')->debug(sprintf('Account %s was opened on %s, so opening balance is %f', $account->name, $start->format('Y-m-d'), $entry['start_balance'])); } $return['sums'][$currency->id]['start'] = bcadd($return['sums'][$currency->id]['start'], $entry['start_balance']); $return['sums'][$currency->id]['end'] = bcadd($return['sums'][$currency->id]['end'], $entry['end_balance']); @@ -116,13 +108,7 @@ class AccountTasker implements AccountTaskerInterface } /** - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return array * @throws FireflyException - * @throws JsonException */ public function getExpenseReport(Carbon $start, Carbon $end, Collection $accounts): array { @@ -136,13 +122,13 @@ class AccountTasker implements AccountTaskerInterface $collector->setSourceAccounts($accounts)->setRange($start, $end); $collector->excludeDestinationAccounts($accounts); $collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER])->withAccountInformation(); - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); - $report = $this->groupExpenseByDestination($journals); + $report = $this->groupExpenseByDestination($journals); // sort the result // Obtain a list of columns - $sum = []; + $sum = []; foreach ($report['accounts'] as $accountId => $row) { $sum[$accountId] = (float)$row['sum']; // intentional float } @@ -153,19 +139,16 @@ class AccountTasker implements AccountTaskerInterface } /** - * @param array $array - * - * @return array * @throws FireflyException - * @throws JsonException */ private function groupExpenseByDestination(array $array): array { - $defaultCurrency = app('amount')->getDefaultCurrencyByUser($this->user); + $defaultCurrency = app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); + /** @var CurrencyRepositoryInterface $currencyRepos */ - $currencyRepos = app(CurrencyRepositoryInterface::class); - $currencies = [$defaultCurrency->id => $defaultCurrency,]; - $report = [ + $currencyRepos = app(CurrencyRepositoryInterface::class); + $currencies = [$defaultCurrency->id => $defaultCurrency]; + $report = [ 'accounts' => [], 'sums' => [], ]; @@ -175,8 +158,8 @@ class AccountTasker implements AccountTaskerInterface $sourceId = (int)$journal['destination_account_id']; $currencyId = (int)$journal['currency_id']; $key = sprintf('%s-%s', $sourceId, $currencyId); - $currencies[$currencyId] = $currencies[$currencyId] ?? $currencyRepos->find($currencyId); - $report['accounts'][$key] = $report['accounts'][$key] ?? [ + $currencies[$currencyId] ??= $currencyRepos->find($currencyId); + $report['accounts'][$key] ??= [ 'id' => $sourceId, 'name' => $journal['destination_account_name'], 'sum' => '0', @@ -190,7 +173,7 @@ class AccountTasker implements AccountTaskerInterface ]; $report['accounts'][$key]['sum'] = bcadd($report['accounts'][$key]['sum'], $journal['amount']); - Log::debug(sprintf('Sum for %s is now %s', $journal['destination_account_name'], $report['accounts'][$key]['sum'])); + app('log')->debug(sprintf('Sum for %s is now %s', $journal['destination_account_name'], $report['accounts'][$key]['sum'])); ++$report['accounts'][$key]['count']; } @@ -201,7 +184,7 @@ class AccountTasker implements AccountTaskerInterface $report['accounts'][$key]['average'] = bcdiv($report['accounts'][$key]['sum'], (string)$report['accounts'][$key]['count']); } $currencyId = $report['accounts'][$key]['currency_id']; - $report['sums'][$currencyId] = $report['sums'][$currencyId] ?? [ + $report['sums'][$currencyId] ??= [ 'sum' => '0', 'currency_id' => $report['accounts'][$key]['currency_id'], 'currency_name' => $report['accounts'][$key]['currency_name'], @@ -216,13 +199,7 @@ class AccountTasker implements AccountTaskerInterface } /** - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return array * @throws FireflyException - * @throws JsonException */ public function getIncomeReport(Carbon $start, Carbon $end, Collection $accounts): array { @@ -235,11 +212,11 @@ class AccountTasker implements AccountTaskerInterface $collector->setDestinationAccounts($accounts)->setRange($start, $end); $collector->excludeSourceAccounts($accounts); $collector->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER])->withAccountInformation(); - $report = $this->groupIncomeBySource($collector->getExtractedJournals()); + $report = $this->groupIncomeBySource($collector->getExtractedJournals()); // sort the result // Obtain a list of columns - $sum = []; + $sum = []; foreach ($report['accounts'] as $accountId => $row) { $sum[$accountId] = (float)$row['sum']; // intentional float } @@ -250,30 +227,27 @@ class AccountTasker implements AccountTaskerInterface } /** - * @param array $array - * - * @return array * @throws FireflyException - * @throws JsonException */ private function groupIncomeBySource(array $array): array { - $defaultCurrency = app('amount')->getDefaultCurrencyByUser($this->user); + $defaultCurrency = app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); + /** @var CurrencyRepositoryInterface $currencyRepos */ - $currencyRepos = app(CurrencyRepositoryInterface::class); - $currencies = [$defaultCurrency->id => $defaultCurrency,]; - $report = [ + $currencyRepos = app(CurrencyRepositoryInterface::class); + $currencies = [$defaultCurrency->id => $defaultCurrency]; + $report = [ 'accounts' => [], 'sums' => [], ]; /** @var array $journal */ foreach ($array as $journal) { - $sourceId = (int)$journal['source_account_id']; - $currencyId = (int)$journal['currency_id']; - $key = sprintf('%s-%s', $sourceId, $currencyId); + $sourceId = (int)$journal['source_account_id']; + $currencyId = (int)$journal['currency_id']; + $key = sprintf('%s-%s', $sourceId, $currencyId); if (!array_key_exists($key, $report['accounts'])) { - $currencies[$currencyId] = $currencies[$currencyId] ?? $currencyRepos->find($currencyId); + $currencies[$currencyId] ??= $currencyRepos->find($currencyId); $report['accounts'][$key] = [ 'id' => $sourceId, 'name' => $journal['source_account_name'], @@ -297,7 +271,7 @@ class AccountTasker implements AccountTaskerInterface $report['accounts'][$key]['average'] = bcdiv($report['accounts'][$key]['sum'], (string)$report['accounts'][$key]['count']); } $currencyId = $report['accounts'][$key]['currency_id']; - $report['sums'][$currencyId] = $report['sums'][$currencyId] ?? [ + $report['sums'][$currencyId] ??= [ 'sum' => '0', 'currency_id' => $report['accounts'][$key]['currency_id'], 'currency_name' => $report['accounts'][$key]['currency_name'], @@ -311,12 +285,9 @@ class AccountTasker implements AccountTaskerInterface return $report; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } diff --git a/app/Repositories/Account/AccountTaskerInterface.php b/app/Repositories/Account/AccountTaskerInterface.php index 7bbb1c0c75..74438f7882 100644 --- a/app/Repositories/Account/AccountTaskerInterface.php +++ b/app/Repositories/Account/AccountTaskerInterface.php @@ -33,35 +33,11 @@ use Illuminate\Support\Collection; */ interface AccountTaskerInterface { - /** - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ public function getAccountReport(Collection $accounts, Carbon $start, Carbon $end): array; - /** - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return array - */ public function getExpenseReport(Carbon $start, Carbon $end, Collection $accounts): array; - /** - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return array - */ public function getIncomeReport(Carbon $start, Carbon $end, Collection $accounts): array; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; } diff --git a/app/Repositories/Account/OperationsRepository.php b/app/Repositories/Account/OperationsRepository.php index df5a0fa99e..c4b8002d85 100644 --- a/app/Repositories/Account/OperationsRepository.php +++ b/app/Repositories/Account/OperationsRepository.php @@ -32,7 +32,6 @@ use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; /** - * * Class OperationsRepository */ class OperationsRepository implements OperationsRepositoryInterface @@ -43,12 +42,6 @@ class OperationsRepository implements OperationsRepositoryInterface * This method returns a list of all the withdrawal transaction journals (as arrays) set in that period * which have the specified accounts. It's grouped per currency, with as few details in the array * as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return array */ public function listExpenses(Carbon $start, Carbon $end, Collection $accounts): array { @@ -59,13 +52,6 @@ class OperationsRepository implements OperationsRepositoryInterface /** * Collect transactions with some parameters - * - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * @param string $type - * - * @return array */ private function getTransactions(Carbon $start, Carbon $end, Collection $accounts, string $type): array { @@ -78,30 +64,20 @@ class OperationsRepository implements OperationsRepositoryInterface return $collector->getExtractedJournals(); } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @param array $journals - * @param string $direction - * - * @return array - */ private function sortByCurrency(array $journals, string $direction): array { $array = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $journalId = (int)$journal['transaction_journal_id']; - $array[$currencyId] = $array[$currencyId] ?? [ - + $currencyId = (int)$journal['currency_id']; + $journalId = (int)$journal['transaction_journal_id']; + $array[$currencyId] ??= [ 'currency_id' => $journal['currency_id'], 'currency_name' => $journal['currency_name'], 'currency_symbol' => $journal['currency_symbol'], @@ -111,7 +87,7 @@ class OperationsRepository implements OperationsRepositoryInterface ]; $array[$currencyId]['transaction_journals'][$journalId] = [ - 'amount' => app('steam')->$direction((string)$journal['amount']), + 'amount' => app('steam')->{$direction}((string)$journal['amount']), // @phpstan-ignore-line 'date' => $journal['date'], 'transaction_journal_id' => $journalId, 'budget_name' => $journal['budget_name'], @@ -135,12 +111,6 @@ class OperationsRepository implements OperationsRepositoryInterface * This method returns a list of all the deposit transaction journals (as arrays) set in that period * which have the specified accounts. It's grouped per currency, with as few details in the array * as possible. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null): array { @@ -150,7 +120,7 @@ class OperationsRepository implements OperationsRepositoryInterface } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumExpenses( Carbon $start, @@ -165,14 +135,8 @@ class OperationsRepository implements OperationsRepositoryInterface } /** - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $opposing - * @param TransactionCurrency|null $currency - * @param string $type - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings(PHPMD.NPathComplexity) */ private function getTransactionsForSum( string $type, @@ -214,14 +178,15 @@ class OperationsRepository implements OperationsRepositoryInterface if (null !== $currency) { $collector->setCurrency($currency); } - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); // same but for foreign currencies: if (null !== $currency) { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user)->setRange($start, $end)->setTypes([$type])->withAccountInformation() - ->setForeignCurrency($currency); + ->setForeignCurrency($currency) + ; if (TransactionType::WITHDRAWAL === $type) { if (null !== $accounts) { $collector->setSourceAccounts($accounts); @@ -239,28 +204,22 @@ class OperationsRepository implements OperationsRepositoryInterface } } - $result = $collector->getExtractedJournals(); + $result = $collector->getExtractedJournals(); // do not use array_merge because you want keys to overwrite (otherwise you get double results): - $journals = $result + $journals; + $journals = $result + $journals; } return $journals; } - /** - * @param array $journals - * @param string $direction - * - * @return array - */ private function groupByCurrency(array $journals, string $direction): array { $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'sum' => '0', 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], @@ -268,12 +227,12 @@ class OperationsRepository implements OperationsRepositoryInterface 'currency_code' => $journal['currency_code'], 'currency_decimal_places' => $journal['currency_decimal_places'], ]; - $array[$currencyId]['sum'] = bcadd($array[$currencyId]['sum'], app('steam')->$direction($journal['amount'])); + $array[$currencyId]['sum'] = bcadd($array[$currencyId]['sum'], app('steam')->{$direction}($journal['amount'])); // @phpstan-ignore-line // also do foreign amount: - $foreignId = (int)$journal['foreign_currency_id']; + $foreignId = (int)$journal['foreign_currency_id']; if (0 !== $foreignId) { - $array[$foreignId] = $array[$foreignId] ?? [ + $array[$foreignId] ??= [ 'sum' => '0', 'currency_id' => $foreignId, 'currency_name' => $journal['foreign_currency_name'], @@ -281,7 +240,7 @@ class OperationsRepository implements OperationsRepositoryInterface 'currency_code' => $journal['foreign_currency_code'], 'currency_decimal_places' => $journal['foreign_currency_decimal_places'], ]; - $array[$foreignId]['sum'] = bcadd($array[$foreignId]['sum'], app('steam')->$direction($journal['foreign_amount'])); + $array[$foreignId]['sum'] = bcadd($array[$foreignId]['sum'], app('steam')->{$direction}($journal['foreign_amount'])); // @phpstan-ignore-line } } @@ -289,7 +248,7 @@ class OperationsRepository implements OperationsRepositoryInterface } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumExpensesByDestination( Carbon $start, @@ -303,13 +262,6 @@ class OperationsRepository implements OperationsRepositoryInterface return $this->groupByDirection($journals, 'destination', 'negative'); } - /** - * @param array $journals - * @param string $direction - * @param string $method - * - * @return array - */ private function groupByDirection(array $journals, string $direction, string $method): array { $array = []; @@ -318,7 +270,7 @@ class OperationsRepository implements OperationsRepositoryInterface foreach ($journals as $journal) { $key = sprintf('%s-%s', $journal[$idKey], $journal['currency_id']); - $array[$key] = $array[$key] ?? [ + $array[$key] ??= [ 'id' => $journal[$idKey], 'name' => $journal[$nameKey], 'sum' => '0', @@ -328,12 +280,12 @@ class OperationsRepository implements OperationsRepositoryInterface 'currency_code' => $journal['currency_code'], 'currency_decimal_places' => $journal['currency_decimal_places'], ]; - $array[$key]['sum'] = bcadd($array[$key]['sum'], app('steam')->$method((string)$journal['amount'])); + $array[$key]['sum'] = bcadd($array[$key]['sum'], app('steam')->{$method}((string)$journal['amount'])); // @phpstan-ignore-line // also do foreign amount: if (0 !== (int)$journal['foreign_currency_id']) { $key = sprintf('%s-%s', $journal[$idKey], $journal['foreign_currency_id']); - $array[$key] = $array[$key] ?? [ + $array[$key] ??= [ 'id' => $journal[$idKey], 'name' => $journal[$nameKey], 'sum' => '0', @@ -343,7 +295,7 @@ class OperationsRepository implements OperationsRepositoryInterface 'currency_code' => $journal['foreign_currency_code'], 'currency_decimal_places' => $journal['foreign_currency_decimal_places'], ]; - $array[$key]['sum'] = bcadd($array[$key]['sum'], app('steam')->$method((string)$journal['foreign_amount'])); + $array[$key]['sum'] = bcadd($array[$key]['sum'], app('steam')->{$method}((string)$journal['foreign_amount'])); // @phpstan-ignore-line } } @@ -351,7 +303,7 @@ class OperationsRepository implements OperationsRepositoryInterface } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumExpensesBySource( Carbon $start, @@ -366,7 +318,7 @@ class OperationsRepository implements OperationsRepositoryInterface } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumIncome( Carbon $start, @@ -381,7 +333,7 @@ class OperationsRepository implements OperationsRepositoryInterface } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumIncomeByDestination( Carbon $start, @@ -396,7 +348,7 @@ class OperationsRepository implements OperationsRepositoryInterface } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumIncomeBySource( Carbon $start, @@ -410,9 +362,6 @@ class OperationsRepository implements OperationsRepositoryInterface return $this->groupByDirection($journals, 'source', 'positive'); } - /** - * @inheritDoc - */ public function sumTransfers(Carbon $start, Carbon $end, ?Collection $accounts = null, ?TransactionCurrency $currency = null): array { $journals = $this->getTransactionsForSum(TransactionType::TRANSFER, $start, $end, $accounts, null, $currency); @@ -420,19 +369,15 @@ class OperationsRepository implements OperationsRepositoryInterface return $this->groupByEither($journals); } - /** - * @param array $journals - * - * @return array - */ private function groupByEither(array $journals): array { $return = []; + /** @var array $journal */ foreach ($journals as $journal) { $return = $this->groupByEitherJournal($return, $journal); } - $final = []; + $final = []; foreach ($return as $array) { $array['difference_float'] = (float)$array['difference']; $array['in_float'] = (float)$array['in']; @@ -443,23 +388,17 @@ class OperationsRepository implements OperationsRepositoryInterface return $final; } - /** - * @param array $return - * @param array $journal - * - * @return array - */ private function groupByEitherJournal(array $return, array $journal): array { - $sourceId = $journal['source_account_id']; - $destinationId = $journal['destination_account_id']; - $currencyId = $journal['currency_id']; - $sourceKey = sprintf('%d-%d', $currencyId, $sourceId); - $destKey = sprintf('%d-%d', $currencyId, $destinationId); - $amount = app('steam')->positive($journal['amount']); + $sourceId = $journal['source_account_id']; + $destinationId = $journal['destination_account_id']; + $currencyId = $journal['currency_id']; + $sourceKey = sprintf('%d-%d', $currencyId, $sourceId); + $destKey = sprintf('%d-%d', $currencyId, $destinationId); + $amount = app('steam')->positive($journal['amount']); // source first - $return[$sourceKey] = $return[$sourceKey] ?? [ + $return[$sourceKey] ??= [ 'id' => (string)$sourceId, 'name' => $journal['source_account_name'], 'difference' => '0', @@ -473,7 +412,7 @@ class OperationsRepository implements OperationsRepositoryInterface ]; // dest next: - $return[$destKey] = $return[$destKey] ?? [ + $return[$destKey] ??= [ 'id' => (string)$destinationId, 'name' => $journal['destination_account_name'], 'difference' => '0', @@ -491,19 +430,19 @@ class OperationsRepository implements OperationsRepositoryInterface $return[$sourceKey]['difference'] = bcadd($return[$sourceKey]['out'], $return[$sourceKey]['in']); // destination account? money comes in: - $return[$destKey]['in'] = bcadd($return[$destKey]['in'], $amount); - $return[$destKey]['difference'] = bcadd($return[$destKey]['out'], $return[$destKey]['in']); + $return[$destKey]['in'] = bcadd($return[$destKey]['in'], $amount); + $return[$destKey]['difference'] = bcadd($return[$destKey]['out'], $return[$destKey]['in']); // foreign currency if (null !== $journal['foreign_currency_id'] && null !== $journal['foreign_amount']) { - $currencyId = $journal['foreign_currency_id']; - $sourceKey = sprintf('%d-%d', $currencyId, $sourceId); - $destKey = sprintf('%d-%d', $currencyId, $destinationId); - $amount = app('steam')->positive($journal['foreign_amount']); + $currencyId = $journal['foreign_currency_id']; + $sourceKey = sprintf('%d-%d', $currencyId, $sourceId); + $destKey = sprintf('%d-%d', $currencyId, $destinationId); + $amount = app('steam')->positive($journal['foreign_amount']); // same as above: // source first - $return[$sourceKey] = $return[$sourceKey] ?? [ + $return[$sourceKey] ??= [ 'id' => (string)$sourceId, 'name' => $journal['source_account_name'], 'difference' => '0', @@ -517,7 +456,7 @@ class OperationsRepository implements OperationsRepositoryInterface ]; // dest next: - $return[$destKey] = $return[$destKey] ?? [ + $return[$destKey] ??= [ 'id' => (string)$destinationId, 'name' => $journal['destination_account_name'], 'difference' => '0', @@ -534,8 +473,8 @@ class OperationsRepository implements OperationsRepositoryInterface $return[$sourceKey]['difference'] = bcadd($return[$sourceKey]['out'], $return[$sourceKey]['in']); // destination account? money comes in: - $return[$destKey]['in'] = bcadd($return[$destKey]['in'], $amount); - $return[$destKey]['difference'] = bcadd($return[$destKey]['out'], $return[$destKey]['in']); + $return[$destKey]['in'] = bcadd($return[$destKey]['in'], $amount); + $return[$destKey]['difference'] = bcadd($return[$destKey]['out'], $return[$destKey]['in']); } return $return; diff --git a/app/Repositories/Account/OperationsRepositoryInterface.php b/app/Repositories/Account/OperationsRepositoryInterface.php index 3e02b58cb8..b1867da02b 100644 --- a/app/Repositories/Account/OperationsRepositoryInterface.php +++ b/app/Repositories/Account/OperationsRepositoryInterface.php @@ -38,12 +38,6 @@ interface OperationsRepositoryInterface * This method returns a list of all the withdrawal transaction journals (as arrays) set in that period * which have the specified accounts. It's grouped per currency, with as few details in the array * as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return array */ public function listExpenses(Carbon $start, Carbon $end, Collection $accounts): array; @@ -51,30 +45,15 @@ interface OperationsRepositoryInterface * This method returns a list of all the deposit transaction journals (as arrays) set in that period * which have the specified accounts. It's grouped per currency, with as few details in the array * as possible. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null): array; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** * Sum of withdrawal journals in period for a set of accounts, grouped per currency. Amounts are always negative. * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $expense - * @param TransactionCurrency|null $currency - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumExpenses( Carbon $start, @@ -88,13 +67,7 @@ interface OperationsRepositoryInterface * Sum of withdrawal journals in period for a set of accounts, grouped per destination / currency. Amounts are * always negative. * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $expense - * @param TransactionCurrency|null $currency - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumExpensesByDestination( Carbon $start, @@ -108,13 +81,7 @@ interface OperationsRepositoryInterface * Sum of withdrawal journals in period for a set of accounts, grouped per source / currency. Amounts are always * negative. * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $expense - * @param TransactionCurrency|null $currency - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumExpensesBySource( Carbon $start, @@ -127,13 +94,7 @@ interface OperationsRepositoryInterface /** * Sum of income journals in period for a set of accounts, grouped per currency. Amounts are always positive. * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $revenue - * @param TransactionCurrency|null $currency - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumIncome( Carbon $start, @@ -147,13 +108,7 @@ interface OperationsRepositoryInterface * Sum of income journals in period for a set of accounts, grouped per destination + currency. Amounts are always * positive. * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $revenue - * @param TransactionCurrency|null $currency - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumIncomeByDestination( Carbon $start, @@ -167,13 +122,7 @@ interface OperationsRepositoryInterface * Sum of income journals in period for a set of accounts, grouped per source + currency. Amounts are always * positive. * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $revenue - * @param TransactionCurrency|null $currency - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumIncomeBySource( Carbon $start, @@ -185,13 +134,6 @@ interface OperationsRepositoryInterface /** * Sum of transfers in period for a set of accounts, grouped per currency. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param TransactionCurrency|null $currency - * - * @return array */ public function sumTransfers(Carbon $start, Carbon $end, ?Collection $accounts = null, ?TransactionCurrency $currency = null): array; } diff --git a/app/Repositories/Attachment/AttachmentRepository.php b/app/Repositories/Attachment/AttachmentRepository.php index 3b65837c20..98d0af2961 100644 --- a/app/Repositories/Attachment/AttachmentRepository.php +++ b/app/Repositories/Attachment/AttachmentRepository.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Attachment; -use Crypt; -use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\AttachmentFactory; use FireflyIII\Helpers\Attachments\AttachmentHelperInterface; @@ -34,14 +32,11 @@ use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Encryption\DecryptException; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; use League\Flysystem\UnableToDeleteFile; -use LogicException; /** * Class AttachmentRepository. - * */ class AttachmentRepository implements AttachmentRepositoryInterface { @@ -49,17 +44,15 @@ class AttachmentRepository implements AttachmentRepositoryInterface private $user; /** - * @param Attachment $attachment - * - * @return bool - * @throws Exception + * @throws \Exception */ public function destroy(Attachment $attachment): bool { /** @var AttachmentHelperInterface $helper */ $helper = app(AttachmentHelperInterface::class); - $path = $helper->getAttachmentLocation($attachment); + $path = $helper->getAttachmentLocation($attachment); + try { Storage::disk('upload')->delete($path); } catch (UnableToDeleteFile $e) { @@ -70,11 +63,6 @@ class AttachmentRepository implements AttachmentRepositoryInterface return true; } - /** - * @param Attachment $attachment - * - * @return string - */ public function getContent(Attachment $attachment): string { // create a disk. @@ -84,10 +72,11 @@ class AttachmentRepository implements AttachmentRepositoryInterface if ($disk->exists($file)) { $encryptedContent = (string)$disk->get($file); + try { - $unencryptedContent = Crypt::decrypt($encryptedContent); // verified + $unencryptedContent = \Crypt::decrypt($encryptedContent); // verified } catch (DecryptException $e) { - Log::debug(sprintf('Could not decrypt attachment #%d but this is fine: %s', $attachment->id, $e->getMessage())); + app('log')->debug(sprintf('Could not decrypt attachment #%d but this is fine: %s', $attachment->id, $e->getMessage())); $unencryptedContent = $encryptedContent; } } @@ -95,11 +84,6 @@ class AttachmentRepository implements AttachmentRepositoryInterface return $unencryptedContent; } - /** - * @param Attachment $attachment - * - * @return bool - */ public function exists(Attachment $attachment): bool { /** @var Storage $disk */ @@ -108,9 +92,6 @@ class AttachmentRepository implements AttachmentRepositoryInterface return $disk->exists($attachment->fileName()); } - /** - * @return Collection - */ public function get(): Collection { return $this->user->attachments()->get(); @@ -118,10 +99,6 @@ class AttachmentRepository implements AttachmentRepositoryInterface /** * Get attachment note text or empty string. - * - * @param Attachment $attachment - * - * @return string|null */ public function getNoteText(Attachment $attachment): ?string { @@ -134,9 +111,6 @@ class AttachmentRepository implements AttachmentRepositoryInterface } /** - * @param array $data - * - * @return Attachment * @throws FireflyException */ public function store(array $data): Attachment @@ -144,7 +118,7 @@ class AttachmentRepository implements AttachmentRepositoryInterface /** @var AttachmentFactory $factory */ $factory = app(AttachmentFactory::class); $factory->setUser($this->user); - $result = $factory->create($data); + $result = $factory->create($data); if (null === $result) { throw new FireflyException('Could not store attachment.'); } @@ -152,22 +126,13 @@ class AttachmentRepository implements AttachmentRepositoryInterface return $result; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @param Attachment $attachment - * @param array $data - * - * @return Attachment - */ public function update(Attachment $attachment, array $data): Attachment { if (array_key_exists('title', $data)) { @@ -193,12 +158,6 @@ class AttachmentRepository implements AttachmentRepositoryInterface return $attachment; } - /** - * @param Attachment $attachment - * @param string $note - * - * @return bool - */ public function updateNote(Attachment $attachment, string $note): bool { if ('' === $note) { @@ -206,14 +165,14 @@ class AttachmentRepository implements AttachmentRepositoryInterface if (null !== $dbNote) { try { $dbNote->delete(); - } catch (LogicException $e) { - Log::error($e->getMessage()); + } catch (\LogicException $e) { + app('log')->error($e->getMessage()); } } return true; } - $dbNote = $attachment->notes()->first(); + $dbNote = $attachment->notes()->first(); if (null === $dbNote) { $dbNote = new Note(); $dbNote->noteable()->associate($attachment); diff --git a/app/Repositories/Attachment/AttachmentRepositoryInterface.php b/app/Repositories/Attachment/AttachmentRepositoryInterface.php index b3a8b879aa..e48a8df323 100644 --- a/app/Repositories/Attachment/AttachmentRepositoryInterface.php +++ b/app/Repositories/Attachment/AttachmentRepositoryInterface.php @@ -34,59 +34,25 @@ use Illuminate\Support\Collection; */ interface AttachmentRepositoryInterface { - /** - * @param Attachment $attachment - * - * @return bool - */ public function destroy(Attachment $attachment): bool; - /** - * @param Attachment $attachment - * - * @return bool - */ public function exists(Attachment $attachment): bool; - /** - * @return Collection - */ public function get(): Collection; - /** - * @param Attachment $attachment - * - * @return string - */ public function getContent(Attachment $attachment): string; /** * Get attachment note text or empty string. - * - * @param Attachment $attachment - * - * @return string|null */ public function getNoteText(Attachment $attachment): ?string; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** - * @param array $data - * - * @return Attachment * @throws FireflyException */ public function store(array $data): Attachment; - /** - * @param Attachment $attachment - * @param array $attachmentData - * - * @return Attachment - */ public function update(Attachment $attachment, array $attachmentData): Attachment; } diff --git a/app/Repositories/AuditLogEntry/ALERepository.php b/app/Repositories/AuditLogEntry/ALERepository.php index 8e3af7ca94..92b84f9e37 100644 --- a/app/Repositories/AuditLogEntry/ALERepository.php +++ b/app/Repositories/AuditLogEntry/ALERepository.php @@ -33,21 +33,15 @@ use Illuminate\Support\Collection; */ class ALERepository implements ALERepositoryInterface { - /** - * @inheritDoc - */ public function getForObject(Model $model): Collection { // all Models have an ID. return AuditLogEntry::where('auditable_id', $model->id)->where('auditable_type', get_class($model))->get(); // @phpstan-ignore-line } - /** - * @inheritDoc - */ public function store(array $data): AuditLogEntry { - $auditLogEntry = new AuditLogEntry(); + $auditLogEntry = new AuditLogEntry(); $auditLogEntry->auditable()->associate($data['auditable']); $auditLogEntry->changer()->associate($data['changer']); @@ -55,6 +49,7 @@ class ALERepository implements ALERepositoryInterface $auditLogEntry->before = $data['before']; $auditLogEntry->after = $data['after']; $auditLogEntry->save(); + return $auditLogEntry; } } diff --git a/app/Repositories/AuditLogEntry/ALERepositoryInterface.php b/app/Repositories/AuditLogEntry/ALERepositoryInterface.php index d0153beb83..84b48b8ad9 100644 --- a/app/Repositories/AuditLogEntry/ALERepositoryInterface.php +++ b/app/Repositories/AuditLogEntry/ALERepositoryInterface.php @@ -33,17 +33,7 @@ use Illuminate\Support\Collection; */ interface ALERepositoryInterface { - /** - * @param Model $model - * - * @return Collection - */ public function getForObject(Model $model): Collection; - /** - * @param array $data - * - * @return AuditLogEntry - */ public function store(array $data): AuditLogEntry; } diff --git a/app/Repositories/Bill/BillRepository.php b/app/Repositories/Bill/BillRepository.php index cc3f91b14c..d078d79432 100644 --- a/app/Repositories/Bill/BillRepository.php +++ b/app/Repositories/Bill/BillRepository.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Bill; use Carbon\Carbon; -use DB; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\BillFactory; use FireflyIII\Models\Attachment; @@ -44,12 +43,9 @@ use Illuminate\Database\Query\JoinClause; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; -use JsonException; -use Storage; /** * Class BillRepository. - * */ class BillRepository implements BillRepositoryInterface { @@ -57,9 +53,6 @@ class BillRepository implements BillRepositoryInterface private User $user; - /** - * @inheritDoc - */ public function billEndsWith(string $query, int $limit): Collection { $search = $this->user->bills(); @@ -67,14 +60,12 @@ class BillRepository implements BillRepositoryInterface $search->where('name', 'LIKE', sprintf('%%%s', $query)); } $search->orderBy('name', 'ASC') - ->where('active', true); + ->where('active', true) + ; return $search->take($limit)->get(); } - /** - * @inheritDoc - */ public function billStartsWith(string $query, int $limit): Collection { $search = $this->user->bills(); @@ -82,7 +73,8 @@ class BillRepository implements BillRepositoryInterface $search->where('name', 'LIKE', sprintf('%s%%', $query)); } $search->orderBy('name', 'ASC') - ->where('active', true); + ->where('active', true) + ; return $search->take($limit)->get(); } @@ -95,21 +87,14 @@ class BillRepository implements BillRepositoryInterface $set = $this->user->bills()->orderBy('order', 'ASC')->get(); $current = 1; foreach ($set as $bill) { - if ((int)$bill->order !== $current) { + if ($bill->order !== $current) { $bill->order = $current; $bill->save(); } - $current++; + ++$current; } } - /** - * @param Bill $bill - * - * @return bool - * - - */ public function destroy(Bill $bill): bool { /** @var BillDestroyService $service */ @@ -119,51 +104,40 @@ class BillRepository implements BillRepositoryInterface return true; } - /** - * @inheritDoc - */ public function destroyAll(): void { + Log::channel('audit')->info('Delete all bills through destroyAll'); $this->user->bills()->delete(); } /** * Find bill by parameters. - * - * @param int|null $billId - * @param string|null $billName - * - * @return Bill|null */ public function findBill(?int $billId, ?string $billName): ?Bill { if (null !== $billId) { - $searchResult = $this->find((int)$billId); + $searchResult = $this->find($billId); if (null !== $searchResult) { - Log::debug(sprintf('Found bill based on #%d, will return it.', $billId)); + app('log')->debug(sprintf('Found bill based on #%d, will return it.', $billId)); return $searchResult; } } if (null !== $billName) { - $searchResult = $this->findByName((string)$billName); + $searchResult = $this->findByName($billName); if (null !== $searchResult) { - Log::debug(sprintf('Found bill based on "%s", will return it.', $billName)); + app('log')->debug(sprintf('Found bill based on "%s", will return it.', $billName)); return $searchResult; } } - Log::debug('Found nothing'); + app('log')->debug('Found nothing'); return null; } /** * Find a bill by ID. - * - * @param int $billId - * - * @return Bill|null */ public function find(int $billId): ?Bill { @@ -172,10 +146,6 @@ class BillRepository implements BillRepositoryInterface /** * Find a bill by name. - * - * @param string $name - * - * @return Bill|null */ public function findByName(string $name): ?Bill { @@ -184,45 +154,34 @@ class BillRepository implements BillRepositoryInterface /** * Get all attachments. - * - * @param Bill $bill - * - * @return Collection */ public function getAttachments(Bill $bill): Collection { - $set = $bill->attachments()->get(); + $set = $bill->attachments()->get(); - /** @var Storage $disk */ - $disk = Storage::disk('upload'); + /** @var \Storage $disk */ + $disk = \Storage::disk('upload'); return $set->each( static function (Attachment $attachment) use ($disk) { $notes = $attachment->notes()->first(); $attachment->file_exists = $disk->exists($attachment->fileName()); - $attachment->notes = $notes ? $notes->text : ''; + $attachment->notes_text = null !== $notes ? $notes->text : ''; return $attachment; } ); } - /** - * @return Collection - */ public function getBills(): Collection { return $this->user->bills() - ->orderBy('order', 'ASC') - ->orderBy('active', 'DESC') - ->orderBy('name', 'ASC')->get(); + ->orderBy('order', 'ASC') + ->orderBy('active', 'DESC') + ->orderBy('name', 'ASC')->get() + ; } - /** - * @param Collection $accounts - * - * @return Collection - */ public function getBillsForAccounts(Collection $accounts): Collection { $fields = [ @@ -244,32 +203,29 @@ class BillRepository implements BillRepositoryInterface $ids = $accounts->pluck('id')->toArray(); return $this->user->bills() - ->leftJoin( - 'transaction_journals', - static function (JoinClause $join) { - $join->on('transaction_journals.bill_id', '=', 'bills.id')->whereNull('transaction_journals.deleted_at'); - } - ) - ->leftJoin( - 'transactions', - static function (JoinClause $join) { - $join->on('transaction_journals.id', '=', 'transactions.transaction_journal_id')->where('transactions.amount', '<', 0); - } - ) - ->whereIn('transactions.account_id', $ids) - ->whereNull('transaction_journals.deleted_at') - ->orderBy('bills.active', 'DESC') - ->orderBy('bills.name', 'ASC') - ->groupBy($fields) - ->get($fields); + ->leftJoin( + 'transaction_journals', + static function (JoinClause $join): void { + $join->on('transaction_journals.bill_id', '=', 'bills.id')->whereNull('transaction_journals.deleted_at'); + } + ) + ->leftJoin( + 'transactions', + static function (JoinClause $join): void { + $join->on('transaction_journals.id', '=', 'transactions.transaction_journal_id')->where('transactions.amount', '<', 0); + } + ) + ->whereIn('transactions.account_id', $ids) + ->whereNull('transaction_journals.deleted_at') + ->orderBy('bills.active', 'DESC') + ->orderBy('bills.name', 'ASC') + ->groupBy($fields) + ->get($fields) + ; } /** * Get all bills with these ID's. - * - * @param array $billIds - * - * @return Collection */ public function getByIds(array $billIds): Collection { @@ -278,31 +234,19 @@ class BillRepository implements BillRepositoryInterface /** * Get text or return empty string. - * - * @param Bill $bill - * - * @return string */ public function getNoteText(Bill $bill): string { - /** @var Note $note */ + /** @var null|Note $note */ $note = $bill->notes()->first(); - if (null !== $note) { - return (string)$note->text; - } - return ''; + return (string)$note?->text; } - /** - * @param Bill $bill - * - * @return array - */ public function getOverallAverage(Bill $bill): array { /** @var JournalRepositoryInterface $repos */ - $repos = app(JournalRepositoryInterface::class); + $repos = app(JournalRepositoryInterface::class); $repos->setUser($this->user); // get and sort on currency @@ -315,7 +259,7 @@ class BillRepository implements BillRepositoryInterface $transaction = $journal->transactions()->where('amount', '<', 0)->first(); $currencyId = (int)$journal->transaction_currency_id; $currency = $journal->transactionCurrency; - $result[$currencyId] = $result[$currencyId] ?? [ + $result[$currencyId] ??= [ 'sum' => '0', 'count' => 0, 'avg' => '0', @@ -325,7 +269,7 @@ class BillRepository implements BillRepositoryInterface 'currency_decimal_places' => $currency->decimal_places, ]; $result[$currencyId]['sum'] = bcadd($result[$currencyId]['sum'], $transaction->amount); - $result[$currencyId]['count']++; + ++$result[$currencyId]['count']; } // after loop, re-loop for avg. @@ -340,65 +284,50 @@ class BillRepository implements BillRepositoryInterface return $result; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @param int $size - * - * @return LengthAwarePaginator - */ public function getPaginator(int $size): LengthAwarePaginator { return $this->user->bills() - ->orderBy('active', 'DESC') - ->orderBy('name', 'ASC')->paginate($size); + ->orderBy('active', 'DESC') + ->orderBy('name', 'ASC')->paginate($size) + ; } /** * The "paid dates" list is a list of dates of transaction journals that are linked to this bill. - * - * @param Bill $bill - * @param Carbon $start - * @param Carbon $end - * - * @return Collection */ public function getPaidDatesInRange(Bill $bill, Carbon $start, Carbon $end): Collection { - //Log::debug('Now in getPaidDatesInRange()'); + // app('log')->debug('Now in getPaidDatesInRange()'); return $bill->transactionJournals() - ->before($end)->after($start)->get( - [ + ->before($end)->after($start)->get( + [ 'transaction_journals.id', 'transaction_journals.date', 'transaction_journals.transaction_group_id', ] - ); + ) + ; } /** * Return all rules for one bill - * - * @param Bill $bill - * - * @return Collection */ public function getRulesForBill(Bill $bill): Collection { return $this->user->rules() - ->leftJoin('rule_actions', 'rule_actions.rule_id', '=', 'rules.id') - ->where('rule_actions.action_type', 'link_to_bill') - ->where('rule_actions.action_value', $bill->name) - ->get(['rules.*']); + ->leftJoin('rule_actions', 'rule_actions.rule_id', '=', 'rules.id') + ->where('rule_actions.action_type', 'link_to_bill') + ->where('rule_actions.action_value', $bill->name) + ->get(['rules.*']) + ; } /** @@ -406,21 +335,19 @@ class BillRepository implements BillRepositoryInterface * 5= billid * * 5 => [['id' => 1, 'title' => 'Some rule'],['id' => 2, 'title' => 'Some other rule']] - * - * @param Collection $collection - * - * @return array */ public function getRulesForBills(Collection $collection): array { - $rules = $this->user->rules() - ->leftJoin('rule_actions', 'rule_actions.rule_id', '=', 'rules.id') - ->where('rule_actions.action_type', 'link_to_bill') - ->get(['rules.id', 'rules.title', 'rule_actions.action_value', 'rules.active']); - $array = []; + $rules = $this->user->rules() + ->leftJoin('rule_actions', 'rule_actions.rule_id', '=', 'rules.id') + ->where('rule_actions.action_type', 'link_to_bill') + ->get(['rules.id', 'rules.title', 'rule_actions.action_value', 'rules.active']) + ; + $array = []; + /** @var Rule $rule */ foreach ($rules as $rule) { - $array[$rule->action_value] = $array[$rule->action_value] ?? []; + $array[$rule->action_value] ??= []; $array[$rule->action_value][] = ['id' => $rule->id, 'title' => $rule->title, 'active' => $rule->active]; } $return = []; @@ -431,36 +358,31 @@ class BillRepository implements BillRepositoryInterface return $return; } - /** - * @param Bill $bill - * @param Carbon $date - * - * @return array - */ public function getYearAverage(Bill $bill, Carbon $date): array { /** @var JournalRepositoryInterface $repos */ - $repos = app(JournalRepositoryInterface::class); + $repos = app(JournalRepositoryInterface::class); $repos->setUser($this->user); // get and sort on currency - $result = []; + $result = []; $journals = $bill->transactionJournals() - ->where('date', '>=', $date->year . '-01-01 00:00:00') - ->where('date', '<=', $date->year . '-12-31 23:59:59') - ->get(); + ->where('date', '>=', $date->year.'-01-01 00:00:00') + ->where('date', '<=', $date->year.'-12-31 23:59:59') + ->get() + ; /** @var TransactionJournal $journal */ foreach ($journals as $journal) { - /** @var Transaction $transaction */ - $transaction = $journal->transactions()->where('amount', '<', 0)->first(); + /** @var null|Transaction $transaction */ + $transaction = $journal->transactions()->where('amount', '<', 0)->first(); if (null === $transaction) { continue; } $currencyId = (int)$journal->transaction_currency_id; $currency = $journal->transactionCurrency; - $result[$currencyId] = $result[$currencyId] ?? [ + $result[$currencyId] ??= [ 'sum' => '0', 'count' => 0, 'avg' => '0', @@ -470,7 +392,7 @@ class BillRepository implements BillRepositoryInterface 'currency_decimal_places' => $currency->decimal_places, ]; $result[$currencyId]['sum'] = bcadd($result[$currencyId]['sum'], $transaction->amount); - $result[$currencyId]['count']++; + ++$result[$currencyId]['count']; } // after loop, re-loop for avg. @@ -487,9 +409,6 @@ class BillRepository implements BillRepositoryInterface /** * Link a set of journals to a bill. - * - * @param Bill $bill - * @param array $transactions */ public function linkCollectionToBill(Bill $bill, array $transactions): void { @@ -498,22 +417,16 @@ class BillRepository implements BillRepositoryInterface $journal = $bill->user->transactionJournals()->find((int)$transaction['transaction_journal_id']); $journal->bill_id = $bill->id; $journal->save(); - Log::debug(sprintf('Linked journal #%d to bill #%d', $journal->id, $bill->id)); + app('log')->debug(sprintf('Linked journal #%d to bill #%d', $journal->id, $bill->id)); } } /** * Given the date in $date, this method will return a moment in the future where the bill is expected to be paid. - * - * @param Bill $bill - * @param Carbon $date - * - * @return Carbon - * @throws JsonException */ public function nextExpectedMatch(Bill $bill, Carbon $date): Carbon { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($bill->id); $cache->addProperty('nextExpectedMatch'); $cache->addProperty($date); @@ -521,28 +434,28 @@ class BillRepository implements BillRepositoryInterface return $cache->get(); } // find the most recent date for this bill NOT in the future. Cache this date: - $start = clone $bill->date; - Log::debug('nextExpectedMatch: Start is ' . $start->format('Y-m-d')); + $start = clone $bill->date; + app('log')->debug('nextExpectedMatch: Start is '.$start->format('Y-m-d')); while ($start < $date) { - Log::debug(sprintf('$start (%s) < $date (%s)', $start->format('Y-m-d'), $date->format('Y-m-d'))); + app('log')->debug(sprintf('$start (%s) < $date (%s)', $start->format('Y-m-d'), $date->format('Y-m-d'))); $start = app('navigation')->addPeriod($start, $bill->repeat_freq, $bill->skip); - Log::debug('Start is now ' . $start->format('Y-m-d')); + app('log')->debug('Start is now '.$start->format('Y-m-d')); } - $end = app('navigation')->addPeriod($start, $bill->repeat_freq, $bill->skip); + $end = app('navigation')->addPeriod($start, $bill->repeat_freq, $bill->skip); // see if the bill was paid in this period. $journalCount = $bill->transactionJournals()->before($end)->after($start)->count(); if ($journalCount > 0) { // this period had in fact a bill. The new start is the current end, and we create a new end. - Log::debug(sprintf('Journal count is %d, so start becomes %s', $journalCount, $end->format('Y-m-d'))); + app('log')->debug(sprintf('Journal count is %d, so start becomes %s', $journalCount, $end->format('Y-m-d'))); $start = clone $end; $end = app('navigation')->addPeriod($start, $bill->repeat_freq, $bill->skip); } - Log::debug('nextExpectedMatch: Final start is ' . $start->format('Y-m-d')); - Log::debug('nextExpectedMatch: Matching end is ' . $end->format('Y-m-d')); + app('log')->debug('nextExpectedMatch: Final start is '.$start->format('Y-m-d')); + app('log')->debug('nextExpectedMatch: Matching end is '.$end->format('Y-m-d')); $cache->store($start); @@ -550,11 +463,7 @@ class BillRepository implements BillRepositoryInterface } /** - * @param array $data - * - * @return Bill * @throws FireflyException - * @throws JsonException */ public function store(array $data): Bill { @@ -565,9 +474,6 @@ class BillRepository implements BillRepositoryInterface return $factory->create($data); } - /** - * @inheritDoc - */ public function removeObjectGroup(Bill $bill): Bill { $bill->objectGroups()->sync([]); @@ -575,12 +481,6 @@ class BillRepository implements BillRepositoryInterface return $bill; } - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchBill(string $query, int $limit): Collection { $query = sprintf('%%%s%%', $query); @@ -588,9 +488,6 @@ class BillRepository implements BillRepositoryInterface return $this->user->bills()->where('name', 'LIKE', $query)->take($limit)->get(); } - /** - * @inheritDoc - */ public function setObjectGroup(Bill $bill, string $objectGroupTitle): Bill { $objectGroup = $this->findOrCreateObjectGroup($objectGroupTitle); @@ -601,29 +498,24 @@ class BillRepository implements BillRepositoryInterface return $bill; } - /** - * @inheritDoc - */ public function setOrder(Bill $bill, int $order): void { $bill->order = $order; $bill->save(); } - /** - * @inheritDoc - */ public function sumPaidInRange(Carbon $start, Carbon $end): array { $bills = $this->getActiveBills(); $return = []; + /** @var Bill $bill */ foreach ($bills as $bill) { /** @var Collection $set */ $set = $bill->transactionJournals()->after($start)->before($end)->get(['transaction_journals.*']); $currency = $bill->transactionCurrency; - $return[$currency->id] = $return[$currency->id] ?? [ + $return[$currency->id] ??= [ 'id' => (string)$currency->id, 'name' => $currency->name, 'symbol' => $currency->symbol, @@ -634,11 +526,11 @@ class BillRepository implements BillRepositoryInterface /** @var TransactionJournal $transactionJournal */ foreach ($set as $transactionJournal) { - /** @var Transaction|null $sourceTransaction */ + /** @var null|Transaction $sourceTransaction */ $sourceTransaction = $transactionJournal->transactions()->where('amount', '<', 0)->first(); if (null !== $sourceTransaction) { - $amount = (string)$sourceTransaction->amount; - if ((int)$sourceTransaction->foreign_currency_id === (int)$currency->id) { + $amount = $sourceTransaction->amount; + if ((int)$sourceTransaction->foreign_currency_id === $currency->id) { // use foreign amount instead! $amount = (string)$sourceTransaction->foreign_amount; } @@ -646,41 +538,38 @@ class BillRepository implements BillRepositoryInterface } } } + return $return; } - /** - * @return Collection - */ public function getActiveBills(): Collection { return $this->user->bills() - ->where('active', true) - ->orderBy('bills.name', 'ASC') - ->get(['bills.*', DB::raw('((bills.amount_min + bills.amount_max) / 2) AS expectedAmount'),]); + ->where('active', true) + ->orderBy('bills.name', 'ASC') + ->get(['bills.*', \DB::raw('((bills.amount_min + bills.amount_max) / 2) AS expectedAmount')]) // @phpstan-ignore-line + ; } - /** - * @inheritDoc - */ public function sumUnpaidInRange(Carbon $start, Carbon $end): array { app('log')->debug(sprintf('Now in sumUnpaidInRange("%s", "%s")', $start->format('Y-m-d'), $end->format('Y-m-d'))); $bills = $this->getActiveBills(); $return = []; + /** @var Bill $bill */ foreach ($bills as $bill) { - app('log')->debug(sprintf('Processing bill #%d ("%s")', $bill->id, $bill->name)); + // app('log')->debug(sprintf('Processing bill #%d ("%s")', $bill->id, $bill->name)); $dates = $this->getPayDatesInRange($bill, $start, $end); $count = $bill->transactionJournals()->after($start)->before($end)->count(); $total = $dates->count() - $count; - app('log')->debug(sprintf('Pay dates: %d, count: %d, left: %d', $dates->count(), $count, $total)); - app('log')->debug('dates', $dates->toArray()); + // app('log')->debug(sprintf('Pay dates: %d, count: %d, left: %d', $dates->count(), $count, $total)); + // app('log')->debug('dates', $dates->toArray()); if ($total > 0) { $currency = $bill->transactionCurrency; $average = bcdiv(bcadd($bill->amount_max, $bill->amount_min), '2'); - $return[$currency->id] = $return[$currency->id] ?? [ + $return[$currency->id] ??= [ 'id' => (string)$currency->id, 'name' => $currency->name, 'symbol' => $currency->symbol, @@ -697,34 +586,28 @@ class BillRepository implements BillRepositoryInterface /** * Between start and end, tells you on which date(s) the bill is expected to hit. - * - * @param Bill $bill - * @param Carbon $start - * @param Carbon $end - * - * @return Collection */ public function getPayDatesInRange(Bill $bill, Carbon $start, Carbon $end): Collection { $set = new Collection(); $currentStart = clone $start; - //Log::debug(sprintf('Now at bill "%s" (%s)', $bill->name, $bill->repeat_freq)); - //Log::debug(sprintf('First currentstart is %s', $currentStart->format('Y-m-d'))); + // app('log')->debug(sprintf('Now at bill "%s" (%s)', $bill->name, $bill->repeat_freq)); + // app('log')->debug(sprintf('First currentstart is %s', $currentStart->format('Y-m-d'))); while ($currentStart <= $end) { - //Log::debug(sprintf('Currentstart is now %s.', $currentStart->format('Y-m-d'))); + // app('log')->debug(sprintf('Currentstart is now %s.', $currentStart->format('Y-m-d'))); $nextExpectedMatch = $this->nextDateMatch($bill, $currentStart); - //Log::debug(sprintf('Next Date match after %s is %s', $currentStart->format('Y-m-d'), $nextExpectedMatch->format('Y-m-d'))); + // app('log')->debug(sprintf('Next Date match after %s is %s', $currentStart->format('Y-m-d'), $nextExpectedMatch->format('Y-m-d'))); if ($nextExpectedMatch > $end) {// If nextExpectedMatch is after end, we continue break; } $set->push(clone $nextExpectedMatch); - //Log::debug(sprintf('Now %d dates in set.', $set->count())); + // app('log')->debug(sprintf('Now %d dates in set.', $set->count())); $nextExpectedMatch->addDay(); - //Log::debug(sprintf('Currentstart (%s) has become %s.', $currentStart->format('Y-m-d'), $nextExpectedMatch->format('Y-m-d'))); + // app('log')->debug(sprintf('Currentstart (%s) has become %s.', $currentStart->format('Y-m-d'), $nextExpectedMatch->format('Y-m-d'))); - $currentStart = clone $nextExpectedMatch; + $currentStart = clone $nextExpectedMatch; } return $set; @@ -733,11 +616,6 @@ class BillRepository implements BillRepositoryInterface /** * Given a bill and a date, this method will tell you at which moment this bill expects its next * transaction. Whether or not it is there already, is not relevant. - * - * @param Bill $bill - * @param Carbon $date - * - * @return Carbon */ public function nextDateMatch(Bill $bill, Carbon $date): Carbon { @@ -759,21 +637,13 @@ class BillRepository implements BillRepositoryInterface return $start; } - /** - * @param Bill $bill - */ public function unlinkAll(Bill $bill): void { $this->user->transactionJournals()->where('bill_id', $bill->id)->update(['bill_id' => null]); } /** - * @param Bill $bill - * @param array $data - * - * @return Bill * @throws FireflyException - * @throws JsonException */ public function update(Bill $bill, array $data): Bill { diff --git a/app/Repositories/Bill/BillRepositoryInterface.php b/app/Repositories/Bill/BillRepositoryInterface.php index 6232bec837..c74467cc31 100644 --- a/app/Repositories/Bill/BillRepositoryInterface.php +++ b/app/Repositories/Bill/BillRepositoryInterface.php @@ -36,20 +36,8 @@ use Illuminate\Support\Collection; */ interface BillRepositoryInterface { - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function billEndsWith(string $query, int $limit): Collection; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function billStartsWith(string $query, int $limit): Collection; /** @@ -57,132 +45,62 @@ interface BillRepositoryInterface */ public function correctOrder(): void; - /** - * @param Bill $bill - * - * @return bool - */ public function destroy(Bill $bill): bool; - /** - * - */ public function destroyAll(): void; /** * Find a bill by ID. - * - * @param int $billId - * - * @return Bill|null */ public function find(int $billId): ?Bill; /** * Find bill by parameters. - * - * @param int|null $billId - * @param string|null $billName - * - * @return Bill|null */ public function findBill(?int $billId, ?string $billName): ?Bill; /** * Find a bill by name. - * - * @param string $name - * - * @return Bill|null */ public function findByName(string $name): ?Bill; - /** - * @return Collection - */ public function getActiveBills(): Collection; /** * Get all attachments. - * - * @param Bill $bill - * - * @return Collection */ public function getAttachments(Bill $bill): Collection; - /** - * @return Collection - */ public function getBills(): Collection; /** * Gets the bills which have some kind of relevance to the accounts mentioned. - * - * @param Collection $accounts - * - * @return Collection */ public function getBillsForAccounts(Collection $accounts): Collection; /** * Get all bills with these ID's. - * - * @param array $billIds - * - * @return Collection */ public function getByIds(array $billIds): Collection; /** * Get text or return empty string. - * - * @param Bill $bill - * - * @return string */ public function getNoteText(Bill $bill): string; - /** - * @param Bill $bill - * - * @return array - */ public function getOverallAverage(Bill $bill): array; - /** - * @param int $size - * - * @return LengthAwarePaginator - */ public function getPaginator(int $size): LengthAwarePaginator; - /** - * @param Bill $bill - * @param Carbon $start - * @param Carbon $end - * - * @return Collection - */ public function getPaidDatesInRange(Bill $bill, Carbon $start, Carbon $end): Collection; /** * Between start and end, tells you on which date(s) the bill is expected to hit. - * - * @param Bill $bill - * @param Carbon $start - * @param Carbon $end - * - * @return Collection */ public function getPayDatesInRange(Bill $bill, Carbon $start, Carbon $end): Collection; /** * Return all rules for one bill - * - * @param Bill $bill - * - * @return Collection */ public function getRulesForBill(Bill $bill): Collection; @@ -191,122 +109,53 @@ interface BillRepositoryInterface * 5= billid * * 5 => [['id' => 1, 'title' => 'Some rule'],['id' => 2, 'title' => 'Some other rule']] - * - * @param Collection $collection - * - * @return array */ public function getRulesForBills(Collection $collection): array; - /** - * @param Bill $bill - * @param Carbon $date - * - * @return array - */ public function getYearAverage(Bill $bill, Carbon $date): array; /** * Link a set of journals to a bill. - * - * @param Bill $bill - * @param array $transactions */ public function linkCollectionToBill(Bill $bill, array $transactions): void; /** * Given a bill and a date, this method will tell you at which moment this bill expects its next * transaction. Whether or not it is there already, is not relevant. - * - * @param Bill $bill - * @param Carbon $date - * - * @return Carbon */ public function nextDateMatch(Bill $bill, Carbon $date): Carbon; - /** - * @param Bill $bill - * @param Carbon $date - * - * @return Carbon - */ public function nextExpectedMatch(Bill $bill, Carbon $date): Carbon; - /** - * @param Bill $bill - * - * @return Bill - */ public function removeObjectGroup(Bill $bill): Bill; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchBill(string $query, int $limit): Collection; - /** - * @param Bill $bill - * @param string $objectGroupTitle - * - * @return Bill - */ public function setObjectGroup(Bill $bill, string $objectGroupTitle): Bill; /** * Set specific piggy bank to specific order. - * - * @param Bill $bill - * @param int $order */ public function setOrder(Bill $bill, int $order): void; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** - * @param array $data - * - * @return Bill * @throws FireflyException */ public function store(array $data): Bill; /** * Collect multi-currency of sum of bills already paid. - * - * @param Carbon $start - * @param Carbon $end - * - * @return array */ public function sumPaidInRange(Carbon $start, Carbon $end): array; /** * Collect multi-currency of sum of bills yet to pay. - * - * @param Carbon $start - * @param Carbon $end - * - * @return array */ public function sumUnpaidInRange(Carbon $start, Carbon $end): array; - /** - * @param Bill $bill - */ public function unlinkAll(Bill $bill): void; - /** - * @param Bill $bill - * @param array $data - * - * @return Bill - */ public function update(Bill $bill, array $data): Bill; } diff --git a/app/Repositories/Budget/AvailableBudgetRepository.php b/app/Repositories/Budget/AvailableBudgetRepository.php index 86ef18f8c4..7aac372c31 100644 --- a/app/Repositories/Budget/AvailableBudgetRepository.php +++ b/app/Repositories/Budget/AvailableBudgetRepository.php @@ -30,27 +30,25 @@ use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; /** - * * Class AvailableBudgetRepository */ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface { private User $user; - /** - * @inheritDoc - */ public function cleanup(): void { $exists = []; $availableBudgets = $this->user->availableBudgets()->get(); + /** @var AvailableBudget $availableBudget */ foreach ($availableBudgets as $availableBudget) { - $start = $availableBudget->start_date->format('Y-m-d'); - $end = $availableBudget->end_date->format('Y-m-d'); - $key = sprintf('%s-%s-%s', $availableBudget->transaction_currency_id, $start, $end); + $start = $availableBudget->start_date->format('Y-m-d'); + $end = $availableBudget->end_date->format('Y-m-d'); + $key = sprintf('%s-%s-%s', $availableBudget->transaction_currency_id, $start, $end); if (array_key_exists($key, $exists)) { app('log')->debug(sprintf('Found duplicate AB: %s %s, %s-%s. Has been deleted', $availableBudget->transaction_currency_id, $availableBudget->amount, $start, $end)); $availableBudget->delete(); @@ -61,18 +59,13 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface /** * Return a list of all available budgets (in all currencies) (for the selected period). - * - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection */ public function get(?Carbon $start = null, ?Carbon $end = null): Collection { $query = $this->user->availableBudgets()->with(['transactionCurrency']); if (null !== $start && null !== $end) { $query->where( - static function (Builder $q1) use ($start, $end) { + static function (Builder $q1) use ($start, $end): void { // @phpstan-ignore-line $q1->where('start_date', '=', $start->format('Y-m-d')); $q1->where('end_date', '=', $end->format('Y-m-d')); } @@ -87,20 +80,15 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface */ public function destroyAll(): void { + Log::channel('audit')->info('Delete all available budgets through destroyAll'); $this->user->availableBudgets()->delete(); } - /** - * @param AvailableBudget $availableBudget - */ public function destroyAvailableBudget(AvailableBudget $availableBudget): void { $availableBudget->delete(); } - /** - * @inheritDoc - */ public function findById(int $id): ?AvailableBudget { return $this->user->availableBudgets->find($id); @@ -108,55 +96,42 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface /** * Find existing AB. - * - * @param TransactionCurrency $currency - * @param Carbon $start - * @param Carbon $end - * - * @return AvailableBudget|null */ public function find(TransactionCurrency $currency, Carbon $start, Carbon $end): ?AvailableBudget { return $this->user->availableBudgets() - ->where('transaction_currency_id', $currency->id) - ->where('start_date', $start->format('Y-m-d')) - ->where('end_date', $end->format('Y-m-d')) - ->first(); + ->where('transaction_currency_id', $currency->id) + ->where('start_date', $start->format('Y-m-d')) + ->where('end_date', $end->format('Y-m-d')) + ->first() + ; } - /** - * @param TransactionCurrency $currency - * @param Carbon $start - * @param Carbon $end - * - * @return string - */ public function getAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end): string { $amount = '0'; + + /** @var null|AvailableBudget $availableBudget */ $availableBudget = $this->user->availableBudgets() - ->where('transaction_currency_id', $currency->id) - ->where('start_date', $start->format('Y-m-d')) - ->where('end_date', $end->format('Y-m-d'))->first(); + ->where('transaction_currency_id', $currency->id) + ->where('start_date', $start->format('Y-m-d')) + ->where('end_date', $end->format('Y-m-d'))->first() + ; if (null !== $availableBudget) { - $amount = (string)$availableBudget->amount; + $amount = $availableBudget->amount; } return $amount; } - /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ public function getAvailableBudgetWithCurrency(Carbon $start, Carbon $end): array { $return = []; $availableBudgets = $this->user->availableBudgets() - ->where('start_date', $start->format('Y-m-d')) - ->where('end_date', $end->format('Y-m-d'))->get(); + ->where('start_date', $start->format('Y-m-d')) + ->where('end_date', $end->format('Y-m-d'))->get() + ; + /** @var AvailableBudget $availableBudget */ foreach ($availableBudgets as $availableBudget) { $return[$availableBudget->transaction_currency_id] = $availableBudget->amount; @@ -167,10 +142,6 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface /** * Returns all available budget objects. - * - * @param TransactionCurrency $currency - * - * @return Collection */ public function getAvailableBudgetsByCurrency(TransactionCurrency $currency): Collection { @@ -179,12 +150,6 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface /** * Returns all available budget objects. - * - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection - * */ public function getAvailableBudgetsByDate(?Carbon $start, ?Carbon $end): Collection { @@ -202,54 +167,42 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface /** * Returns all available budget objects. - * - * @param Carbon $start - * @param Carbon $end - * - * @return Collection - * */ public function getAvailableBudgetsByExactDate(Carbon $start, Carbon $end): Collection { return $this->user->availableBudgets() - ->where('start_date', '=', $start->format('Y-m-d')) - ->where('end_date', '=', $end->format('Y-m-d')) - ->get(); + ->where('start_date', '=', $start->format('Y-m-d')) + ->where('end_date', '=', $end->format('Y-m-d')) + ->get() + ; } - /** - * @inheritDoc - */ public function getByCurrencyDate(Carbon $start, Carbon $end, TransactionCurrency $currency): ?AvailableBudget { return $this->user ->availableBudgets() ->where('transaction_currency_id', $currency->id) ->where('start_date', $start->format('Y-m-d')) - ->where('end_date', $end->format('Y-m-d'))->first(); + ->where('end_date', $end->format('Y-m-d'))->first() + ; } /** - * @param TransactionCurrency $currency - * @param Carbon $start - * @param Carbon $end - * @param string $amount - * - * @return AvailableBudget * @deprecated */ public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget { - $availableBudget = $this->user->availableBudgets() - ->where('transaction_currency_id', $currency->id) - ->where('start_date', $start->format('Y-m-d')) - ->where('end_date', $end->format('Y-m-d'))->first(); + $availableBudget = $this->user->availableBudgets() + ->where('transaction_currency_id', $currency->id) + ->where('start_date', $start->format('Y-m-d')) + ->where('end_date', $end->format('Y-m-d'))->first() + ; if (null === $availableBudget) { - $availableBudget = new AvailableBudget(); + $availableBudget = new AvailableBudget(); $availableBudget->user()->associate($this->user); $availableBudget->transactionCurrency()->associate($currency); - $availableBudget->start_date = $start->format('Y-m-d'); - $availableBudget->end_date = $end->format('Y-m-d'); + $availableBudget->start_date = $start->startOfDay()->format('Y-m-d'); // @phpstan-ignore-line + $availableBudget->end_date = $end->endOfDay()->format('Y-m-d'); // @phpstan-ignore-line } $availableBudget->amount = $amount; $availableBudget->save(); @@ -257,28 +210,20 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface return $availableBudget; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @param array $data - * - * @return AvailableBudget|null - */ public function store(array $data): ?AvailableBudget { $start = $data['start']; if ($start instanceof Carbon) { $start = $data['start']->startOfDay(); } - $end = $data['end']; + $end = $data['end']; if ($end instanceof Carbon) { $end = $data['end']->endOfDay(); } @@ -289,19 +234,12 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface 'user_group_id' => $this->user->user_group_id, 'transaction_currency_id' => $data['currency_id'], 'amount' => $data['amount'], - 'start_date' => $start, - 'end_date' => $end, - + 'start_date' => $start->format('Y-m-d'), + 'end_date' => $end->format('Y-m-d'), ] ); } - /** - * @param AvailableBudget $availableBudget - * @param array $data - * - * @return AvailableBudget - */ public function update(AvailableBudget $availableBudget, array $data): AvailableBudget { if (array_key_exists('amount', $data)) { @@ -312,19 +250,13 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface return $availableBudget; } - /** - * @param AvailableBudget $availableBudget - * @param array $data - * - * @return AvailableBudget - */ public function updateAvailableBudget(AvailableBudget $availableBudget, array $data): AvailableBudget { if (array_key_exists('start', $data)) { $start = $data['start']; if ($start instanceof Carbon) { $start = $data['start']->startOfDay(); - $availableBudget->start_date = $start; + $availableBudget->start_date = $start->format('Y-m-d'); $availableBudget->save(); } } @@ -333,7 +265,7 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface $end = $data['end']; if ($end instanceof Carbon) { $end = $data['end']->endOfDay(); - $availableBudget->end_date = $end; + $availableBudget->end_date = $end->format('Y-m-d'); $availableBudget->save(); } } diff --git a/app/Repositories/Budget/AvailableBudgetRepositoryInterface.php b/app/Repositories/Budget/AvailableBudgetRepositoryInterface.php index fd2c004e6e..80a23307cf 100644 --- a/app/Repositories/Budget/AvailableBudgetRepositoryInterface.php +++ b/app/Repositories/Budget/AvailableBudgetRepositoryInterface.php @@ -35,9 +35,6 @@ use Illuminate\Support\Collection; */ interface AvailableBudgetRepositoryInterface { - /** - * @return void - */ public function cleanup(): void; /** @@ -45,132 +42,54 @@ interface AvailableBudgetRepositoryInterface */ public function destroyAll(): void; - /** - * @param AvailableBudget $availableBudget - */ public function destroyAvailableBudget(AvailableBudget $availableBudget): void; /** * Find existing AB. - * - * @param TransactionCurrency $currency - * @param Carbon $start - * @param Carbon $end - * - * @return AvailableBudget|null */ public function find(TransactionCurrency $currency, Carbon $start, Carbon $end): ?AvailableBudget; - /** - * @param int $id - * - * @return AvailableBudget|null - */ public function findById(int $id): ?AvailableBudget; /** * Return a list of all available budgets (in all currencies) (for the selected period). - * - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection */ public function get(?Carbon $start = null, ?Carbon $end = null): Collection; /** - * @param TransactionCurrency $currency - * @param Carbon $start - * @param Carbon $end - * - * @return string * @deprecated */ public function getAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end): string; - /** - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ public function getAvailableBudgetWithCurrency(Carbon $start, Carbon $end): array; /** * Returns all available budget objects. - * - * @param TransactionCurrency $currency - * - * @return Collection */ public function getAvailableBudgetsByCurrency(TransactionCurrency $currency): Collection; /** * Returns all available budget objects. - * - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection - * */ public function getAvailableBudgetsByDate(?Carbon $start, ?Carbon $end): Collection; - /** - * @param Carbon $start - * @param Carbon $end - * - * @return Collection - */ public function getAvailableBudgetsByExactDate(Carbon $start, Carbon $end): Collection; /** * Get by transaction currency and date. Should always result in one entry or NULL. - * - * @param Carbon $start - * @param Carbon $end - * @param TransactionCurrency $currency - * - * @return null|AvailableBudget */ public function getByCurrencyDate(Carbon $start, Carbon $end, TransactionCurrency $currency): ?AvailableBudget; /** - * @param TransactionCurrency $currency - * @param Carbon $start - * @param Carbon $end - * @param string $amount - * - * @return AvailableBudget * @deprecated */ public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; - /** - * @param array $data - * - * @return AvailableBudget|null - */ public function store(array $data): ?AvailableBudget; - /** - * @param AvailableBudget $availableBudget - * @param array $data - * - * @return AvailableBudget - */ public function update(AvailableBudget $availableBudget, array $data): AvailableBudget; - /** - * @param AvailableBudget $availableBudget - * @param array $data - * - * @return AvailableBudget - */ public function updateAvailableBudget(AvailableBudget $availableBudget, array $data): AvailableBudget; } diff --git a/app/Repositories/Budget/BudgetLimitRepository.php b/app/Repositories/Budget/BudgetLimitRepository.php index 23c41a4c1d..0975c9f943 100644 --- a/app/Repositories/Budget/BudgetLimitRepository.php +++ b/app/Repositories/Budget/BudgetLimitRepository.php @@ -34,10 +34,8 @@ use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; -use JsonException; /** - * * Class BudgetLimitRepository */ class BudgetLimitRepository implements BudgetLimitRepositoryInterface @@ -47,56 +45,53 @@ class BudgetLimitRepository implements BudgetLimitRepositoryInterface /** * Tells you which amount has been budgeted (for the given budgets) * in the selected query. Returns a positive amount as a string. - * - * @param Carbon $start - * @param Carbon $end - * @param TransactionCurrency $currency - * @param Collection|null $budgets - * - * @return string */ public function budgeted(Carbon $start, Carbon $end, TransactionCurrency $currency, ?Collection $budgets = null): string { - $query = BudgetLimit::leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') + $query = BudgetLimit::leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') // same complex where query as below. - ->where( - static function (Builder $q5) use ($start, $end) { - $q5->where( - static function (Builder $q1) use ($start, $end) { - $q1->where( - static function (Builder $q2) use ($start, $end) { - $q2->where('budget_limits.end_date', '>=', $start->format('Y-m-d')); - $q2->where('budget_limits.end_date', '<=', $end->format('Y-m-d')); - } - ) - ->orWhere( - static function (Builder $q3) use ($start, $end) { - $q3->where('budget_limits.start_date', '>=', $start->format('Y-m-d')); - $q3->where('budget_limits.start_date', '<=', $end->format('Y-m-d')); - } - ); - } - ) - ->orWhere( - static function (Builder $q4) use ($start, $end) { - // or start is before start AND end is after end. - $q4->where('budget_limits.start_date', '<=', $start->format('Y-m-d')); - $q4->where('budget_limits.end_date', '>=', $end->format('Y-m-d')); - } - ); + ->where( + static function (Builder $q5) use ($start, $end): void { + $q5->where( + static function (Builder $q1) use ($start, $end): void { + $q1->where( + static function (Builder $q2) use ($start, $end): void { + $q2->where('budget_limits.end_date', '>=', $start->format('Y-m-d')); + $q2->where('budget_limits.end_date', '<=', $end->format('Y-m-d')); } ) - ->where('budget_limits.transaction_currency_id', $currency->id) - ->whereNull('budgets.deleted_at') - ->where('budgets.active', true) - ->where('budgets.user_id', $this->user->id); + ->orWhere( + static function (Builder $q3) use ($start, $end): void { + $q3->where('budget_limits.start_date', '>=', $start->format('Y-m-d')); + $q3->where('budget_limits.start_date', '<=', $end->format('Y-m-d')); + } + ) + ; + } + ) + ->orWhere( + static function (Builder $q4) use ($start, $end): void { + // or start is before start AND end is after end. + $q4->where('budget_limits.start_date', '<=', $start->format('Y-m-d')); + $q4->where('budget_limits.end_date', '>=', $end->format('Y-m-d')); + } + ) + ; + } + ) + ->where('budget_limits.transaction_currency_id', $currency->id) + ->whereNull('budgets.deleted_at') + ->where('budgets.active', true) + ->where('budgets.user_id', $this->user->id) + ; if (null !== $budgets && $budgets->count() > 0) { $query->whereIn('budget_limits.budget_id', $budgets->pluck('id')->toArray()); } $set = $query->get(['budget_limits.*']); $result = '0'; + /** @var BudgetLimit $budgetLimit */ foreach ($set as $budgetLimit) { $result = bcadd($budgetLimit->amount, $result); @@ -111,29 +106,22 @@ class BudgetLimitRepository implements BudgetLimitRepositoryInterface public function destroyAll(): void { $budgets = $this->user->budgets()->get(); + /** @var Budget $budget */ foreach ($budgets as $budget) { + Log::channel('audit')->info(sprintf('Delete all budget limits of budget #%d ("%s") through destroyAll', $budget->id, $budget->name)); $budget->budgetlimits()->delete(); } } /** * Destroy a budget limit. - * - * @param BudgetLimit $budgetLimit */ public function destroyBudgetLimit(BudgetLimit $budgetLimit): void { $budgetLimit->delete(); } - /** - * @param TransactionCurrency $currency - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection - */ public function getAllBudgetLimitsByCurrency(TransactionCurrency $currency, Carbon $start = null, Carbon $end = null): Collection { return $this->getAllBudgetLimits($start, $end)->filter( @@ -143,28 +131,24 @@ class BudgetLimitRepository implements BudgetLimitRepositoryInterface ); } - /** - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection - */ public function getAllBudgetLimits(Carbon $start = null, Carbon $end = null): Collection { // both are NULL: if (null === $start && null === $end) { return BudgetLimit::leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') - ->with(['budget']) - ->where('budgets.user_id', $this->user->id) - ->whereNull('budgets.deleted_at') - ->get(['budget_limits.*']); + ->with(['budget']) + ->where('budgets.user_id', $this->user->id) + ->whereNull('budgets.deleted_at') + ->get(['budget_limits.*']) + ; } // one of the two is NULL. if (null === $start xor null === $end) { $query = BudgetLimit::leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') - ->with(['budget']) - ->whereNull('budgets.deleted_at') - ->where('budgets.user_id', $this->user->id); + ->with(['budget']) + ->whereNull('budgets.deleted_at') + ->where('budgets.user_id', $this->user->id) + ; if (null !== $end) { // end date must be before $end. $query->where('end_date', '<=', $end->format('Y-m-d 00:00:00')); @@ -179,45 +163,41 @@ class BudgetLimitRepository implements BudgetLimitRepositoryInterface // neither are NULL: return BudgetLimit::leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') - ->with(['budget']) - ->where('budgets.user_id', $this->user->id) - ->whereNull('budgets.deleted_at') - ->where( - static function (Builder $q5) use ($start, $end) { - $q5->where( - static function (Builder $q1) use ($start, $end) { - $q1->where( - static function (Builder $q2) use ($start, $end) { - $q2->where('budget_limits.end_date', '>=', $start->format('Y-m-d')); - $q2->where('budget_limits.end_date', '<=', $end->format('Y-m-d')); - } - ) - ->orWhere( - static function (Builder $q3) use ($start, $end) { - $q3->where('budget_limits.start_date', '>=', $start->format('Y-m-d')); - $q3->where('budget_limits.start_date', '<=', $end->format('Y-m-d')); - } - ); - } - ) - ->orWhere( - static function (Builder $q4) use ($start, $end) { - // or start is before start AND end is after end. - $q4->where('budget_limits.start_date', '<=', $start->format('Y-m-d')); - $q4->where('budget_limits.end_date', '>=', $end->format('Y-m-d')); - } - ); - } - )->get(['budget_limits.*']); + ->with(['budget']) + ->where('budgets.user_id', $this->user->id) + ->whereNull('budgets.deleted_at') + ->where( + static function (Builder $q5) use ($start, $end): void { + $q5->where( + static function (Builder $q1) use ($start, $end): void { + $q1->where( + static function (Builder $q2) use ($start, $end): void { + $q2->where('budget_limits.end_date', '>=', $start->format('Y-m-d')); + $q2->where('budget_limits.end_date', '<=', $end->format('Y-m-d')); + } + ) + ->orWhere( + static function (Builder $q3) use ($start, $end): void { + $q3->where('budget_limits.start_date', '>=', $start->format('Y-m-d')); + $q3->where('budget_limits.start_date', '<=', $end->format('Y-m-d')); + } + ) + ; + } + ) + ->orWhere( + static function (Builder $q4) use ($start, $end): void { + // or start is before start AND end is after end. + $q4->where('budget_limits.start_date', '<=', $start->format('Y-m-d')); + $q4->where('budget_limits.end_date', '>=', $end->format('Y-m-d')); + } + ) + ; + } + )->get(['budget_limits.*']) + ; } - /** - * @param Budget $budget - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection - */ public function getBudgetLimits(Budget $budget, Carbon $start = null, Carbon $end = null): Collection { if (null === $end && null === $start) { @@ -240,129 +220,114 @@ class BudgetLimitRepository implements BudgetLimitRepositoryInterface // when both dates are set: return $budget->budgetlimits() - ->where( - static function (Builder $q5) use ($start, $end) { - $q5->where( - static function (Builder $q1) use ($start, $end) { - // budget limit ends within period - $q1->where( - static function (Builder $q2) use ($start, $end) { - $q2->where('budget_limits.end_date', '>=', $start->format('Y-m-d 00:00:00')); - $q2->where('budget_limits.end_date', '<=', $end->format('Y-m-d 23:59:59')); - } - ) - // budget limit start within period - ->orWhere( - static function (Builder $q3) use ($start, $end) { - $q3->where('budget_limits.start_date', '>=', $start->format('Y-m-d 00:00:00')); - $q3->where('budget_limits.start_date', '<=', $end->format('Y-m-d 23:59:59')); - } - ); - } - ) - ->orWhere( - static function (Builder $q4) use ($start, $end) { - // or start is before start AND end is after end. - $q4->where('budget_limits.start_date', '<=', $start->format('Y-m-d 23:59:59')); - $q4->where('budget_limits.end_date', '>=', $end->format('Y-m-d 00:00:00')); - } - ); - } - )->orderBy('budget_limits.start_date', 'DESC')->get(['budget_limits.*']); + ->where( + static function (Builder $q5) use ($start, $end): void { // @phpstan-ignore-line + $q5->where( + static function (Builder $q1) use ($start, $end): void { + // budget limit ends within period + $q1->where( + static function (Builder $q2) use ($start, $end): void { + $q2->where('budget_limits.end_date', '>=', $start->format('Y-m-d 00:00:00')); + $q2->where('budget_limits.end_date', '<=', $end->format('Y-m-d 23:59:59')); + } + ) + // budget limit start within period + ->orWhere( + static function (Builder $q3) use ($start, $end): void { + $q3->where('budget_limits.start_date', '>=', $start->format('Y-m-d 00:00:00')); + $q3->where('budget_limits.start_date', '<=', $end->format('Y-m-d 23:59:59')); + } + ) + ; + } + ) + ->orWhere( + static function (Builder $q4) use ($start, $end): void { + // or start is before start AND end is after end. + $q4->where('budget_limits.start_date', '<=', $start->format('Y-m-d 23:59:59')); + $q4->where('budget_limits.end_date', '>=', $end->format('Y-m-d 00:00:00')); + } + ) + ; + } + )->orderBy('budget_limits.start_date', 'DESC')->get(['budget_limits.*']) + ; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } /** - * @param array $data - * - * @return BudgetLimit * @throws FireflyException - * @throws JsonException */ public function store(array $data): BudgetLimit { // if no currency has been provided, use the user's default currency: /** @var TransactionCurrencyFactory $factory */ - $factory = app(TransactionCurrencyFactory::class); - $currency = $factory->find($data['currency_id'] ?? null, $data['currency_code'] ?? null); + $factory = app(TransactionCurrencyFactory::class); + $currency = $factory->find($data['currency_id'] ?? null, $data['currency_code'] ?? null); if (null === $currency) { - $currency = app('amount')->getDefaultCurrencyByUser($this->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); } - $currency->enabled = true; + $currency->enabled = true; $currency->save(); // find the budget: - $budget = $this->user->budgets()->find((int)$data['budget_id']); + $budget = $this->user->budgets()->find((int)$data['budget_id']); if (null === $budget) { throw new FireflyException('200004: Budget does not exist.'); } // find limit with same date range and currency. - $limit = $budget->budgetlimits() - ->where('budget_limits.start_date', $data['start_date']->format('Y-m-d')) - ->where('budget_limits.end_date', $data['end_date']->format('Y-m-d')) - ->where('budget_limits.transaction_currency_id', $currency->id) - ->first(['budget_limits.*']); + $limit = $budget->budgetlimits() + ->where('budget_limits.start_date', $data['start_date']->format('Y-m-d')) + ->where('budget_limits.end_date', $data['end_date']->format('Y-m-d')) + ->where('budget_limits.transaction_currency_id', $currency->id) + ->first(['budget_limits.*']) + ; if (null !== $limit) { throw new FireflyException('200027: Budget limit already exists.'); } - Log::debug('No existing budget limit, create a new one'); + app('log')->debug('No existing budget limit, create a new one'); // or create one and return it. - $limit = new BudgetLimit(); + $limit = new BudgetLimit(); $limit->budget()->associate($budget); $limit->start_date = $data['start_date']->format('Y-m-d'); $limit->end_date = $data['end_date']->format('Y-m-d'); $limit->amount = $data['amount']; $limit->transaction_currency_id = $currency->id; $limit->save(); - Log::debug(sprintf('Created new budget limit with ID #%d and amount %s', $limit->id, $data['amount'])); + app('log')->debug(sprintf('Created new budget limit with ID #%d and amount %s', $limit->id, $data['amount'])); return $limit; } - /** - * @param Budget $budget - * @param TransactionCurrency $currency - * @param Carbon $start - * @param Carbon $end - * - * @return BudgetLimit|null - */ public function find(Budget $budget, TransactionCurrency $currency, Carbon $start, Carbon $end): ?BudgetLimit { return $budget->budgetlimits() - ->where('transaction_currency_id', $currency->id) - ->where('start_date', $start->format('Y-m-d')) - ->where('end_date', $end->format('Y-m-d'))->first(); + ->where('transaction_currency_id', $currency->id) + ->where('start_date', $start->format('Y-m-d')) + ->where('end_date', $end->format('Y-m-d'))->first() + ; } /** - * @param BudgetLimit $budgetLimit - * @param array $data - * - * @return BudgetLimit * @throws FireflyException - * @throws JsonException */ public function update(BudgetLimit $budgetLimit, array $data): BudgetLimit { - $budgetLimit->amount = array_key_exists('amount', $data) ? $data['amount'] : $budgetLimit->amount; - $budgetLimit->budget_id = array_key_exists('budget_id', $data) ? $data['budget_id'] : $budgetLimit->budget_id; - $budgetLimit->start_date = array_key_exists('start', $data) ? $data['start']->format('Y-m-d 00:00:00') : $budgetLimit->start_date; - $budgetLimit->end_date = array_key_exists('end', $data) ? $data['end']->format('Y-m-d 23:59:59') : $budgetLimit->end_date; + $budgetLimit->amount = array_key_exists('amount', $data) ? $data['amount'] : $budgetLimit->amount; + $budgetLimit->budget_id = array_key_exists('budget_id', $data) ? $data['budget_id'] : $budgetLimit->budget_id; + $budgetLimit->start_date = array_key_exists('start', $data) ? $data['start']->format('Y-m-d 00:00:00') : $budgetLimit->start_date; + $budgetLimit->end_date = array_key_exists('end', $data) ? $data['end']->format('Y-m-d 23:59:59') : $budgetLimit->end_date; // if no currency has been provided, use the user's default currency: - $currency = null; + $currency = null; // update if relevant: if (array_key_exists('currency_id', $data) || array_key_exists('currency_code', $data)) { @@ -372,9 +337,9 @@ class BudgetLimitRepository implements BudgetLimitRepositoryInterface } // catch unexpected null: if (null === $currency) { - $currency = $budgetLimit->transactionCurrency ?? app('amount')->getDefaultCurrencyByUser($this->user); + $currency = $budgetLimit->transactionCurrency ?? app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); } - $currency->enabled = true; + $currency->enabled = true; $currency->save(); $budgetLimit->transaction_currency_id = $currency->id; @@ -383,66 +348,60 @@ class BudgetLimitRepository implements BudgetLimitRepositoryInterface return $budgetLimit; } - /** - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * @param string $amount - * - * @return BudgetLimit|null - * - */ public function updateLimitAmount(Budget $budget, Carbon $start, Carbon $end, string $amount): ?BudgetLimit { // count the limits: - $limits = $budget->budgetlimits() - ->where('budget_limits.start_date', $start->format('Y-m-d 00:00:00')) - ->where('budget_limits.end_date', $end->format('Y-m-d 00:00:00')) - ->count(['budget_limits.*']); - Log::debug(sprintf('Found %d budget limits.', $limits)); + $limits = $budget->budgetlimits() + ->where('budget_limits.start_date', $start->format('Y-m-d 00:00:00')) + ->where('budget_limits.end_date', $end->format('Y-m-d 00:00:00')) + ->count('budget_limits.*') + ; + app('log')->debug(sprintf('Found %d budget limits.', $limits)); // there might be a budget limit for these dates: - /** @var BudgetLimit $limit */ - $limit = $budget->budgetlimits() - ->where('budget_limits.start_date', $start->format('Y-m-d 00:00:00')) - ->where('budget_limits.end_date', $end->format('Y-m-d 00:00:00')) - ->first(['budget_limits.*']); + /** @var null|BudgetLimit $limit */ + $limit = $budget->budgetlimits() + ->where('budget_limits.start_date', $start->format('Y-m-d 00:00:00')) + ->where('budget_limits.end_date', $end->format('Y-m-d 00:00:00')) + ->first(['budget_limits.*']) + ; // if more than 1 limit found, delete the others: if ($limits > 1 && null !== $limit) { - Log::debug(sprintf('Found more than 1, delete all except #%d', $limit->id)); + app('log')->debug(sprintf('Found more than 1, delete all except #%d', $limit->id)); $budget->budgetlimits() - ->where('budget_limits.start_date', $start->format('Y-m-d 00:00:00')) - ->where('budget_limits.end_date', $end->format('Y-m-d 00:00:00')) - ->where('budget_limits.id', '!=', $limit->id)->delete(); + ->where('budget_limits.start_date', $start->format('Y-m-d 00:00:00')) + ->where('budget_limits.end_date', $end->format('Y-m-d 00:00:00')) + ->where('budget_limits.id', '!=', $limit->id)->delete() + ; } // delete if amount is zero. // Returns 0 if the two operands are equal, // 1 if the left_operand is larger than the right_operand, -1 otherwise. if (null !== $limit && bccomp($amount, '0') <= 0) { - Log::debug(sprintf('%s is zero, delete budget limit #%d', $amount, $limit->id)); + app('log')->debug(sprintf('%s is zero, delete budget limit #%d', $amount, $limit->id)); $limit->delete(); return null; } // update if exists: if (null !== $limit) { - Log::debug(sprintf('Existing budget limit is #%d, update this to amount %s', $limit->id, $amount)); + app('log')->debug(sprintf('Existing budget limit is #%d, update this to amount %s', $limit->id, $amount)); $limit->amount = $amount; $limit->save(); return $limit; } - Log::debug('No existing budget limit, create a new one'); + app('log')->debug('No existing budget limit, create a new one'); // or create one and return it. - $limit = new BudgetLimit(); + $limit = new BudgetLimit(); $limit->budget()->associate($budget); $limit->start_date = $start->startOfDay(); $limit->end_date = $end->startOfDay(); $limit->amount = $amount; $limit->save(); - Log::debug(sprintf('Created new budget limit with ID #%d and amount %s', $limit->id, $amount)); + app('log')->debug(sprintf('Created new budget limit with ID #%d and amount %s', $limit->id, $amount)); return $limit; } diff --git a/app/Repositories/Budget/BudgetLimitRepositoryInterface.php b/app/Repositories/Budget/BudgetLimitRepositoryInterface.php index 7ddd85cadf..eaee27707b 100644 --- a/app/Repositories/Budget/BudgetLimitRepositoryInterface.php +++ b/app/Repositories/Budget/BudgetLimitRepositoryInterface.php @@ -39,13 +39,6 @@ interface BudgetLimitRepositoryInterface /** * Tells you which amount has been budgeted (for the given budgets) * in the selected query. Returns a positive amount as a string. - * - * @param Carbon $start - * @param Carbon $end - * @param TransactionCurrency $currency - * @param Collection|null $budgets - * - * @return string */ public function budgeted(Carbon $start, Carbon $end, TransactionCurrency $currency, ?Collection $budgets = null): string; @@ -56,76 +49,25 @@ interface BudgetLimitRepositoryInterface /** * Destroy a budget limit. - * - * @param BudgetLimit $budgetLimit */ public function destroyBudgetLimit(BudgetLimit $budgetLimit): void; - /** - * @param Budget $budget - * @param TransactionCurrency $currency - * @param Carbon $start - * @param Carbon $end - * - * @return BudgetLimit|null - */ public function find(Budget $budget, TransactionCurrency $currency, Carbon $start, Carbon $end): ?BudgetLimit; /** * TODO this method is not multi currency aware. - * - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection */ public function getAllBudgetLimits(Carbon $start = null, Carbon $end = null): Collection; - /** - * @param TransactionCurrency $currency - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection - */ public function getAllBudgetLimitsByCurrency(TransactionCurrency $currency, Carbon $start = null, Carbon $end = null): Collection; - /** - * @param Budget $budget - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection - */ public function getBudgetLimits(Budget $budget, Carbon $start = null, Carbon $end = null): Collection; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; - /** - * @param array $data - * - * @return BudgetLimit - */ public function store(array $data): BudgetLimit; - /** - * @param BudgetLimit $budgetLimit - * @param array $data - * - * @return BudgetLimit - */ public function update(BudgetLimit $budgetLimit, array $data): BudgetLimit; - /** - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * @param string $amount - * - * @return BudgetLimit|null - */ public function updateLimitAmount(Budget $budget, Carbon $start, Carbon $end, string $amount): ?BudgetLimit; } diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index 7c3ae8dd94..6f8fcf45b5 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Budget; use Carbon\Carbon; -use DB; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\Account; @@ -38,27 +37,22 @@ use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleTrigger; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Services\Internal\Destroy\BudgetDestroyService; +use FireflyIII\Support\Http\Api\ExchangeRateConverter; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Database\QueryException; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; -use JsonException; -use Storage; /** * Class BudgetRepository. - * */ class BudgetRepository implements BudgetRepositoryInterface { private User $user; - /** - * @inheritDoc - */ public function budgetEndsWith(string $query, int $limit): Collection { $search = $this->user->budgets(); @@ -66,14 +60,12 @@ class BudgetRepository implements BudgetRepositoryInterface $search->where('name', 'LIKE', sprintf('%%%s', $query)); } $search->orderBy('order', 'ASC') - ->orderBy('name', 'ASC')->where('active', true); + ->orderBy('name', 'ASC')->where('active', true) + ; return $search->take($limit)->get(); } - /** - * @inheritDoc - */ public function budgetStartsWith(string $query, int $limit): Collection { $search = $this->user->budgets(); @@ -81,58 +73,74 @@ class BudgetRepository implements BudgetRepositoryInterface $search->where('name', 'LIKE', sprintf('%s%%', $query)); } $search->orderBy('order', 'ASC') - ->orderBy('name', 'ASC')->where('active', true); + ->orderBy('name', 'ASC')->where('active', true) + ; return $search->take($limit)->get(); } - /** - * @inheritDoc - */ public function budgetedInPeriod(Carbon $start, Carbon $end): array { - Log::debug(sprintf('Now in budgetedInPeriod("%s", "%s")', $start->format('Y-m-d'), $end->format('Y-m-d'))); - $return = []; + app('log')->debug(sprintf('Now in budgetedInPeriod("%s", "%s")', $start->format('Y-m-d'), $end->format('Y-m-d'))); + $return = []; + /** @var BudgetLimitRepository $limitRepository */ $limitRepository = app(BudgetLimitRepository::class); $limitRepository->setUser($this->user); - $budgets = $this->getActiveBudgets(); + $budgets = $this->getActiveBudgets(); + $defaultCurrency = app('amount')->getDefaultCurrency(); + $converter = new ExchangeRateConverter(); + /** @var Budget $budget */ foreach ($budgets as $budget) { - Log::debug(sprintf('Budget #%d: "%s"', $budget->id, $budget->name)); + app('log')->debug(sprintf('Budget #%d: "%s"', $budget->id, $budget->name)); $limits = $limitRepository->getBudgetLimits($budget, $start, $end); + /** @var BudgetLimit $limit */ foreach ($limits as $limit) { - Log::debug(sprintf('Budget limit #%d', $limit->id)); - $currency = $limit->transactionCurrency; - $return[$currency->id] = $return[$currency->id] ?? [ - 'id' => (string)$currency->id, - 'name' => $currency->name, - 'symbol' => $currency->symbol, - 'code' => $currency->code, - 'decimal_places' => $currency->decimal_places, - 'sum' => '0', + app('log')->debug(sprintf('Budget limit #%d', $limit->id)); + $currency = $limit->transactionCurrency; + $rate = $converter->getCurrencyRate($currency, $defaultCurrency, $end); + $currencyCode = $currency->code; + $return[$currencyCode] ??= [ + 'currency_id' => (string)$currency->id, + 'currency_name' => $currency->name, + 'currency_symbol' => $currency->symbol, + 'currency_code' => $currency->code, + 'currency_decimal_places' => $currency->decimal_places, + 'native_currency_id' => (string)$defaultCurrency->id, + 'native_currency_name' => $defaultCurrency->name, + 'native_currency_symbol' => $defaultCurrency->symbol, + 'native_currency_code' => $defaultCurrency->code, + 'native_currency_decimal_places' => $defaultCurrency->decimal_places, + 'sum' => '0', + 'native_sum' => '0', ]; // same period if ($limit->start_date->isSameDay($start) && $limit->end_date->isSameDay($end)) { - $return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], (string)$limit->amount); - Log::debug(sprintf('Add full amount [1]: %s', $limit->amount)); + $return[$currencyCode]['sum'] = bcadd($return[$currencyCode]['sum'], $limit->amount); + $return[$currencyCode]['native_sum'] = bcmul($rate, $return[$currencyCode]['sum']); + app('log')->debug(sprintf('Add full amount [1]: %s', $limit->amount)); + continue; } // limit is inside of date range if ($start->lte($limit->start_date) && $end->gte($limit->end_date)) { - $return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], (string)$limit->amount); - Log::debug(sprintf('Add full amount [2]: %s', $limit->amount)); + $return[$currencyCode]['sum'] = bcadd($return[$currencyCode]['sum'], $limit->amount); + $return[$currencyCode]['native_sum'] = bcmul($rate, $return[$currencyCode]['sum']); + app('log')->debug(sprintf('Add full amount [2]: %s', $limit->amount)); + continue; } - $total = $limit->start_date->diffInDays($limit->end_date) + 1; // include the day itself. - $days = $this->daysInOverlap($limit, $start, $end); - $amount = bcmul(bcdiv((string)$limit->amount, (string)$total), (string)$days); - $return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], $amount); - Log::debug( + $total = $limit->start_date->diffInDays($limit->end_date) + 1; // include the day itself. + $days = $this->daysInOverlap($limit, $start, $end); + $amount = bcmul(bcdiv($limit->amount, (string)$total), (string)$days); + $return[$currencyCode]['sum'] = bcadd($return[$currencyCode]['sum'], $amount); + $return[$currencyCode]['native_sum'] = bcmul($rate, $return[$currencyCode]['sum']); + app('log')->debug( sprintf( 'Amount per day: %s (%s over %d days). Total amount for %d days: %s', - bcdiv((string)$limit->amount, (string)$total), + bcdiv($limit->amount, (string)$total), $limit->amount, $total, $days, @@ -141,38 +149,28 @@ class BudgetRepository implements BudgetRepositoryInterface ); } } + return $return; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @return Collection - */ public function getActiveBudgets(): Collection { return $this->user->budgets()->where('active', true) - ->orderBy('order', 'ASC') - ->orderBy('name', 'ASC') - ->get(); + ->orderBy('order', 'ASC') + ->orderBy('name', 'ASC') + ->get() + ; } /** * How many days of this budget limit are between start and end? - * - * @param BudgetLimit $limit - * @param Carbon $start - * @param Carbon $end - * - * @return int */ private function daysInOverlap(BudgetLimit $limit, Carbon $start, Carbon $end): int { @@ -201,27 +199,27 @@ class BudgetRepository implements BudgetRepositoryInterface // return days in the range $limit_start - $end return $limit->start_date->diffInDays($end) + 1; // add one day, the day itself } + return 0; } - /** - * @inheritDoc - */ public function budgetedInPeriodForBudget(Budget $budget, Carbon $start, Carbon $end): array { - Log::debug(sprintf('Now in budgetedInPeriod(#%d, "%s", "%s")', $budget->id, $start->format('Y-m-d'), $end->format('Y-m-d'))); - $return = []; + app('log')->debug(sprintf('Now in budgetedInPeriod(#%d, "%s", "%s")', $budget->id, $start->format('Y-m-d'), $end->format('Y-m-d'))); + $return = []; + /** @var BudgetLimitRepository $limitRepository */ $limitRepository = app(BudgetLimitRepository::class); $limitRepository->setUser($this->user); - Log::debug(sprintf('Budget #%d: "%s"', $budget->id, $budget->name)); - $limits = $limitRepository->getBudgetLimits($budget, $start, $end); + app('log')->debug(sprintf('Budget #%d: "%s"', $budget->id, $budget->name)); + $limits = $limitRepository->getBudgetLimits($budget, $start, $end); + /** @var BudgetLimit $limit */ foreach ($limits as $limit) { - Log::debug(sprintf('Budget limit #%d', $limit->id)); - $currency = $limit->transactionCurrency; - $return[$currency->id] = $return[$currency->id] ?? [ + app('log')->debug(sprintf('Budget limit #%d', $limit->id)); + $currency = $limit->transactionCurrency; + $return[$currency->id] ??= [ 'id' => (string)$currency->id, 'name' => $currency->name, 'symbol' => $currency->symbol, @@ -231,24 +229,26 @@ class BudgetRepository implements BudgetRepositoryInterface ]; // same period if ($limit->start_date->isSameDay($start) && $limit->end_date->isSameDay($end)) { - $return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], (string)$limit->amount); - Log::debug(sprintf('Add full amount [1]: %s', $limit->amount)); + $return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], $limit->amount); + app('log')->debug(sprintf('Add full amount [1]: %s', $limit->amount)); + continue; } // limit is inside of date range if ($start->lte($limit->start_date) && $end->gte($limit->end_date)) { - $return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], (string)$limit->amount); - Log::debug(sprintf('Add full amount [2]: %s', $limit->amount)); + $return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], $limit->amount); + app('log')->debug(sprintf('Add full amount [2]: %s', $limit->amount)); + continue; } $total = $limit->start_date->diffInDays($limit->end_date) + 1; // include the day itself. $days = $this->daysInOverlap($limit, $start, $end); - $amount = bcmul(bcdiv((string)$limit->amount, (string)$total), (string)$days); + $amount = bcmul(bcdiv($limit->amount, (string)$total), (string)$days); $return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], $amount); - Log::debug( + app('log')->debug( sprintf( 'Amount per day: %s (%s over %d days). Total amount for %d days: %s', - bcdiv((string)$limit->amount, (string)$total), + bcdiv($limit->amount, (string)$total), $limit->amount, $total, $days, @@ -256,17 +256,16 @@ class BudgetRepository implements BudgetRepositoryInterface ) ); } + return $return; } - /** - * @return bool - */ public function cleanupBudgets(): bool { // delete limits with amount 0: BudgetLimit::where('amount', 0)->delete(); $budgets = $this->getActiveBudgets(); + /** * @var int $index * @var Budget $budget @@ -282,18 +281,13 @@ class BudgetRepository implements BudgetRepositoryInterface } /** - * @param Budget $budget - * @param array $data - * - * @return Budget * @throws FireflyException - * @throws JsonException */ public function update(Budget $budget, array $data): Budget { - Log::debug('Now in update()'); + app('log')->debug('Now in update()'); - $oldName = $budget->name; + $oldName = $budget->name; if (array_key_exists('name', $data)) { $budget->name = $data['name']; $this->updateRuleActions($oldName, $budget->name); @@ -308,7 +302,7 @@ class BudgetRepository implements BudgetRepositoryInterface $budget->save(); // update or create auto-budget: - $autoBudget = $this->getAutoBudget($budget); + $autoBudget = $this->getAutoBudget($budget); // first things first: delete when no longer required: $autoBudgetType = array_key_exists('auto_budget_type', $data) ? $data['auto_budget_type'] : null; @@ -330,54 +324,44 @@ class BudgetRepository implements BudgetRepositoryInterface return $budget; } - /** - * @param string $oldName - * @param string $newName - */ private function updateRuleActions(string $oldName, string $newName): void { - $types = ['set_budget',]; + $types = ['set_budget']; $actions = RuleAction::leftJoin('rules', 'rules.id', '=', 'rule_actions.rule_id') - ->where('rules.user_id', $this->user->id) - ->whereIn('rule_actions.action_type', $types) - ->where('rule_actions.action_value', $oldName) - ->get(['rule_actions.*']); - Log::debug(sprintf('Found %d actions to update.', $actions->count())); + ->where('rules.user_id', $this->user->id) + ->whereIn('rule_actions.action_type', $types) + ->where('rule_actions.action_value', $oldName) + ->get(['rule_actions.*']) + ; + app('log')->debug(sprintf('Found %d actions to update.', $actions->count())); + /** @var RuleAction $action */ foreach ($actions as $action) { $action->action_value = $newName; $action->save(); - Log::debug(sprintf('Updated action %d: %s', $action->id, $action->action_value)); + app('log')->debug(sprintf('Updated action %d: %s', $action->id, $action->action_value)); } } - /** - * @param string $oldName - * @param string $newName - */ private function updateRuleTriggers(string $oldName, string $newName): void { - $types = ['budget_is',]; + $types = ['budget_is']; $triggers = RuleTrigger::leftJoin('rules', 'rules.id', '=', 'rule_triggers.rule_id') - ->where('rules.user_id', $this->user->id) - ->whereIn('rule_triggers.trigger_type', $types) - ->where('rule_triggers.trigger_value', $oldName) - ->get(['rule_triggers.*']); - Log::debug(sprintf('Found %d triggers to update.', $triggers->count())); + ->where('rules.user_id', $this->user->id) + ->whereIn('rule_triggers.trigger_type', $types) + ->where('rule_triggers.trigger_value', $oldName) + ->get(['rule_triggers.*']) + ; + app('log')->debug(sprintf('Found %d triggers to update.', $triggers->count())); + /** @var RuleTrigger $trigger */ foreach ($triggers as $trigger) { $trigger->trigger_value = $newName; $trigger->save(); - Log::debug(sprintf('Updated trigger %d: %s', $trigger->id, $trigger->trigger_value)); + app('log')->debug(sprintf('Updated trigger %d: %s', $trigger->id, $trigger->trigger_value)); } } - /** - * @param Budget $budget - * @param string $text - * - * @return void - */ private function setNoteText(Budget $budget, string $text): void { $dbNote = $budget->notes()->first(); @@ -396,20 +380,13 @@ class BudgetRepository implements BudgetRepositoryInterface } } - /** - * @inheritDoc - */ public function getAutoBudget(Budget $budget): ?AutoBudget { return $budget->autoBudgets()->first(); } /** - * @param Budget $budget - * @param array $data - * * @throws FireflyException - * @throws JsonException */ private function updateAutoBudget(Budget $budget, array $data): void { @@ -417,7 +394,7 @@ class BudgetRepository implements BudgetRepositoryInterface $autoBudget = $this->getAutoBudget($budget); // grab default currency: - $currency = app('amount')->getDefaultCurrencyByUser($this->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); if (null === $autoBudget) { // at this point it's a blind assumption auto_budget_type is 1 or 2. @@ -429,12 +406,13 @@ class BudgetRepository implements BudgetRepositoryInterface // set or update the currency. if (array_key_exists('currency_id', $data) || array_key_exists('currency_code', $data)) { + /** @var CurrencyRepositoryInterface $repos */ $repos = app(CurrencyRepositoryInterface::class); $currencyId = (int)($data['currency_id'] ?? 0); $currencyCode = (string)($data['currency_code'] ?? ''); $currency = $repos->find($currencyId); if (null === $currency) { - $currency = $repos->findByCodeNull($currencyCode); + $currency = $repos->findByCode($currencyCode); } if (null !== $currency) { $autoBudget->transaction_currency_id = $currency->id; @@ -458,20 +436,13 @@ class BudgetRepository implements BudgetRepositoryInterface /** * Find a budget or return NULL * - * @param int|null $budgetId |null - * - * @return Budget|null + * @param null|int $budgetId |null */ public function find(int $budgetId = null): ?Budget { return $this->user->budgets()->find($budgetId); } - /** - * @param Budget $budget - * - * @return bool - */ public function destroy(Budget $budget): bool { /** @var BudgetDestroyService $service */ @@ -487,28 +458,25 @@ class BudgetRepository implements BudgetRepositoryInterface public function destroyAll(): void { $budgets = $this->getBudgets(); + /** @var Budget $budget */ foreach ($budgets as $budget) { - DB::table('budget_transaction')->where('budget_id', (int)$budget->id)->delete(); - DB::table('budget_transaction_journal')->where('budget_id', (int)$budget->id)->delete(); + \DB::table('budget_transaction')->where('budget_id', $budget->id)->delete(); + \DB::table('budget_transaction_journal')->where('budget_id', $budget->id)->delete(); RecurrenceTransactionMeta::where('name', 'budget_id')->where('value', (string)$budget->id)->delete(); RuleAction::where('action_type', 'set_budget')->where('action_value', (string)$budget->id)->delete(); $budget->delete(); } + Log::channel('audit')->info('Delete all budgets through destroyAll'); } - /** - * @return Collection - */ public function getBudgets(): Collection { return $this->user->budgets()->orderBy('order', 'ASC') - ->orderBy('name', 'ASC')->get(); + ->orderBy('name', 'ASC')->get() + ; } - /** - * @inheritDoc - */ public function destroyAutoBudget(Budget $budget): void { /** @var AutoBudget $autoBudget */ @@ -517,35 +485,25 @@ class BudgetRepository implements BudgetRepositoryInterface } } - /** - * @param int|null $budgetId - * @param string|null $budgetName - * - * @return Budget|null - */ public function findBudget(?int $budgetId, ?string $budgetName): ?Budget { - Log::debug('Now in findBudget()'); - Log::debug(sprintf('Searching for budget with ID #%d...', $budgetId)); + app('log')->debug('Now in findBudget()'); + app('log')->debug(sprintf('Searching for budget with ID #%d...', $budgetId)); $result = $this->find((int)$budgetId); if (null === $result && null !== $budgetName && '' !== $budgetName) { - Log::debug(sprintf('Searching for budget with name %s...', $budgetName)); - $result = $this->findByName((string)$budgetName); + app('log')->debug(sprintf('Searching for budget with name %s...', $budgetName)); + $result = $this->findByName($budgetName); } if (null !== $result) { - Log::debug(sprintf('Found budget #%d: %s', $result->id, $result->name)); + app('log')->debug(sprintf('Found budget #%d: %s', $result->id, $result->name)); } - Log::debug(sprintf('Found result is null? %s', var_export(null === $result, true))); + app('log')->debug(sprintf('Found result is null? %s', var_export(null === $result, true))); return $result; } /** * Find budget by name. - * - * @param string|null $name - * - * @return Budget|null */ public function findByName(?string $name): ?Budget { @@ -560,10 +518,6 @@ class BudgetRepository implements BudgetRepositoryInterface /** * This method returns the oldest journal or transaction date known to this budget. * Will cache result. - * - * @param Budget $budget - * - * @return Carbon|null */ public function firstUseDate(Budget $budget): ?Carbon { @@ -575,21 +529,18 @@ class BudgetRepository implements BudgetRepositoryInterface return null; } - /** - * @inheritDoc - */ public function getAttachments(Budget $budget): Collection { - $set = $budget->attachments()->get(); + $set = $budget->attachments()->get(); - /** @var Storage $disk */ - $disk = Storage::disk('upload'); + /** @var \Storage $disk */ + $disk = \Storage::disk('upload'); return $set->each( static function (Attachment $attachment) use ($disk) { $notes = $attachment->notes()->first(); $attachment->file_exists = $disk->exists($attachment->fileName()); - $attachment->notes = $notes ? $notes->text : ''; + $attachment->notes_text = null !== $notes ? $notes->text : ''; return $attachment; } @@ -598,29 +549,20 @@ class BudgetRepository implements BudgetRepositoryInterface /** * Get all budgets with these ID's. - * - * @param array $budgetIds - * - * @return Collection */ public function getByIds(array $budgetIds): Collection { return $this->user->budgets()->whereIn('id', $budgetIds)->get(); } - /** - * @return Collection - */ public function getInactiveBudgets(): Collection { return $this->user->budgets() - ->orderBy('order', 'ASC') - ->orderBy('name', 'ASC')->where('active', 0)->get(); + ->orderBy('order', 'ASC') + ->orderBy('name', 'ASC')->where('active', 0)->get() + ; } - /** - * @inheritDoc - */ public function getNoteText(Budget $budget): ?string { $note = $budget->notes()->first(); @@ -631,12 +573,6 @@ class BudgetRepository implements BudgetRepositoryInterface return $note->text; } - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchBudget(string $query, int $limit): Collection { $search = $this->user->budgets(); @@ -644,35 +580,30 @@ class BudgetRepository implements BudgetRepositoryInterface $search->where('name', 'LIKE', sprintf('%%%s%%', $query)); } $search->orderBy('order', 'ASC') - ->orderBy('name', 'ASC')->where('active', true); + ->orderBy('name', 'ASC')->where('active', true) + ; return $search->take($limit)->get(); } - /** - * @param Budget $budget - * @param int $order - */ public function setBudgetOrder(Budget $budget, int $order): void { $budget->order = $order; $budget->save(); } - /** - * @inheritDoc - */ public function spentInPeriod(Carbon $start, Carbon $end): array { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); $start->startOfDay(); $end->endOfDay(); // exclude specific liabilities $repository = app(AccountRepositoryInterface::class); $repository->setUser($this->user); - $subset = $repository->getAccountsByType(config('firefly.valid_liabilities')); - $selection = new Collection(); + $subset = $repository->getAccountsByType(config('firefly.valid_liabilities')); + $selection = new Collection(); + /** @var Account $account */ foreach ($subset as $account) { if ('credit' === $repository->getMetaValue($account, 'liability_direction')) { @@ -682,19 +613,20 @@ class BudgetRepository implements BudgetRepositoryInterface // start collecting: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user) - ->setRange($start, $end) - ->excludeDestinationAccounts($selection) - ->setTypes([TransactionType::WITHDRAWAL]) - ->setBudgets($this->getActiveBudgets()); + ->setRange($start, $end) + ->excludeDestinationAccounts($selection) + ->setTypes([TransactionType::WITHDRAWAL]) + ->setBudgets($this->getActiveBudgets()) + ; - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'id' => (string)$currencyId, 'name' => $journal['currency_name'], 'symbol' => $journal['currency_symbol'], @@ -705,9 +637,9 @@ class BudgetRepository implements BudgetRepositoryInterface $array[$currencyId]['sum'] = bcadd($array[$currencyId]['sum'], app('steam')->negative($journal['amount'])); // also do foreign amount: - $foreignId = (int)$journal['foreign_currency_id']; + $foreignId = (int)$journal['foreign_currency_id']; if (0 !== $foreignId) { - $array[$foreignId] = $array[$foreignId] ?? [ + $array[$foreignId] ??= [ 'id' => (string)$foreignId, 'name' => $journal['foreign_currency_name'], 'symbol' => $journal['foreign_currency_symbol'], @@ -722,20 +654,18 @@ class BudgetRepository implements BudgetRepositoryInterface return $array; } - /** - * @inheritDoc - */ public function spentInPeriodForBudget(Budget $budget, Carbon $start, Carbon $end): array { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); $start->startOfDay(); $end->endOfDay(); // exclude specific liabilities $repository = app(AccountRepositoryInterface::class); $repository->setUser($this->user); - $subset = $repository->getAccountsByType(config('firefly.valid_liabilities')); - $selection = new Collection(); + $subset = $repository->getAccountsByType(config('firefly.valid_liabilities')); + $selection = new Collection(); + /** @var Account $account */ foreach ($subset as $account) { if ('credit' === $repository->getMetaValue($account, 'liability_direction')) { @@ -745,19 +675,20 @@ class BudgetRepository implements BudgetRepositoryInterface // start collecting: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user) - ->setRange($start, $end) - ->excludeDestinationAccounts($selection) - ->setTypes([TransactionType::WITHDRAWAL]) - ->setBudget($budget); + ->setRange($start, $end) + ->excludeDestinationAccounts($selection) + ->setTypes([TransactionType::WITHDRAWAL]) + ->setBudget($budget) + ; - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'id' => (string)$currencyId, 'name' => $journal['currency_name'], 'symbol' => $journal['currency_symbol'], @@ -768,9 +699,9 @@ class BudgetRepository implements BudgetRepositoryInterface $array[$currencyId]['sum'] = bcadd($array[$currencyId]['sum'], app('steam')->negative($journal['amount'])); // also do foreign amount: - $foreignId = (int)$journal['foreign_currency_id']; + $foreignId = (int)$journal['foreign_currency_id']; if (0 !== $foreignId) { - $array[$foreignId] = $array[$foreignId] ?? [ + $array[$foreignId] ??= [ 'id' => (string)$foreignId, 'name' => $journal['foreign_currency_name'], 'symbol' => $journal['foreign_currency_symbol'], @@ -786,15 +717,14 @@ class BudgetRepository implements BudgetRepositoryInterface } /** - * @param array $data - * - * @return Budget * @throws FireflyException - * @throws JsonException + * + * @SuppressWarnings(PHPMD.NPathComplexity) */ public function store(array $data): Budget { - $order = $this->getMaxOrder(); + $order = $this->getMaxOrder(); + try { $newBudget = Budget::create( [ @@ -806,8 +736,9 @@ class BudgetRepository implements BudgetRepositoryInterface ] ); } catch (QueryException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException('400002: Could not store budget.', 0, $e); } @@ -819,7 +750,7 @@ class BudgetRepository implements BudgetRepositoryInterface if (!array_key_exists('auto_budget_type', $data) || !array_key_exists('auto_budget_amount', $data) || !array_key_exists('auto_budget_period', $data)) { return $newBudget; } - $type = $data['auto_budget_type']; + $type = $data['auto_budget_type']; if ('none' === $type) { return $newBudget; } @@ -837,8 +768,9 @@ class BudgetRepository implements BudgetRepositoryInterface $type = AutoBudget::AUTO_BUDGET_ADJUSTED; } - $repos = app(CurrencyRepositoryInterface::class); - $currency = null; + /** @var CurrencyRepositoryInterface $repos */ + $repos = app(CurrencyRepositoryInterface::class); + $currency = null; if (array_key_exists('currency_id', $data)) { $currency = $repos->find((int)$data['currency_id']); } @@ -846,10 +778,10 @@ class BudgetRepository implements BudgetRepositoryInterface $currency = $repos->findByCode((string)$data['currency_code']); } if (null === $currency) { - $currency = app('amount')->getDefaultCurrencyByUser($this->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); } - $autoBudget = new AutoBudget(); + $autoBudget = new AutoBudget(); $autoBudget->budget()->associate($newBudget); $autoBudget->transaction_currency_id = $currency->id; $autoBudget->auto_budget_type = $type; @@ -858,11 +790,11 @@ class BudgetRepository implements BudgetRepositoryInterface $autoBudget->save(); // create initial budget limit. - $today = today(config('app.timezone')); - $start = app('navigation')->startOfPeriod($today, $autoBudget->period); - $end = app('navigation')->endOfPeriod($start, $autoBudget->period); + $today = today(config('app.timezone')); + $start = app('navigation')->startOfPeriod($today, $autoBudget->period); + $end = app('navigation')->endOfPeriod($start, $autoBudget->period); - $limitRepos = app(BudgetLimitRepositoryInterface::class); + $limitRepos = app(BudgetLimitRepositoryInterface::class); $limitRepos->setUser($this->user); $limitRepos->store( [ @@ -877,9 +809,6 @@ class BudgetRepository implements BudgetRepositoryInterface return $newBudget; } - /** - * @return int - */ public function getMaxOrder(): int { return (int)$this->user->budgets()->max('order'); diff --git a/app/Repositories/Budget/BudgetRepositoryInterface.php b/app/Repositories/Budget/BudgetRepositoryInterface.php index fcfaaed4ba..1f5b1df804 100644 --- a/app/Repositories/Budget/BudgetRepositoryInterface.php +++ b/app/Repositories/Budget/BudgetRepositoryInterface.php @@ -36,53 +36,22 @@ use Illuminate\Support\Collection; */ interface BudgetRepositoryInterface { - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function budgetEndsWith(string $query, int $limit): Collection; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function budgetStartsWith(string $query, int $limit): Collection; /** * Returns the amount that is budgeted in a period. - * - * @param Carbon $start - * @param Carbon $end - * - * @return array */ public function budgetedInPeriod(Carbon $start, Carbon $end): array; /** * Returns the amount that is budgeted in a period. - * - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * - * @return array */ public function budgetedInPeriodForBudget(Budget $budget, Carbon $start, Carbon $end): array; - /** - * @return bool - */ public function cleanupBudgets(): bool; - /** - * @param Budget $budget - * - * @return bool - */ public function destroy(Budget $budget): bool; /** @@ -90,145 +59,62 @@ interface BudgetRepositoryInterface */ public function destroyAll(): void; - /** - * @param Budget $budget - */ public function destroyAutoBudget(Budget $budget): void; - /** - * - * @param int|null $budgetId - * - * @return Budget|null - */ public function find(int $budgetId = null): ?Budget; - /** - * @param int|null $budgetId - * @param string|null $budgetName - * - * @return Budget|null - */ public function findBudget(?int $budgetId, ?string $budgetName): ?Budget; /** * Find budget by name. - * - * @param string|null $name - * - * @return Budget|null */ public function findByName(?string $name): ?Budget; /** * This method returns the oldest journal or transaction date known to this budget. * Will cache result. - * - * @param Budget $budget - * - * @return Carbon|null */ public function firstUseDate(Budget $budget): ?Carbon; - /** - * @return Collection - */ public function getActiveBudgets(): Collection; - /** - * @param Budget $budget - * - * @return Collection - */ public function getAttachments(Budget $budget): Collection; - /** - * @param Budget $budget - * - * @return AutoBudget|null - */ public function getAutoBudget(Budget $budget): ?AutoBudget; - /** - * @return Collection - */ public function getBudgets(): Collection; /** * Get all budgets with these ID's. - * - * @param array $budgetIds - * - * @return Collection */ public function getByIds(array $budgetIds): Collection; - /** - * @return Collection - */ public function getInactiveBudgets(): Collection; - /** - * @return int - */ public function getMaxOrder(): int; - /** - * @param Budget $budget - * - * @return string|null - */ public function getNoteText(Budget $budget): ?string; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchBudget(string $query, int $limit): Collection; - /** - * @param Budget $budget - * @param int $order - */ public function setBudgetOrder(Budget $budget, int $order): void; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** * Used in the v2 API to calculate the amount of money spent in all active budgets. - * - * @param Carbon $start - * @param Carbon $end - * - * @return array */ public function spentInPeriod(Carbon $start, Carbon $end): array; /** * Used in the v2 API to calculate the amount of money spent in a single budget.. - * - * */ public function spentInPeriodForBudget(Budget $budget, Carbon $start, Carbon $end): array; /** - * @param array $data - * - * @return Budget * @throws FireflyException */ public function store(array $data): Budget; - /** - * @param Budget $budget - * @param array $data - * - * @return Budget - */ public function update(Budget $budget, array $data): Budget; } diff --git a/app/Repositories/Budget/NoBudgetRepository.php b/app/Repositories/Budget/NoBudgetRepository.php index 037a3c3a08..4527e77114 100644 --- a/app/Repositories/Budget/NoBudgetRepository.php +++ b/app/Repositories/Budget/NoBudgetRepository.php @@ -32,7 +32,6 @@ use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; /** - * * Class NoBudgetRepository */ class NoBudgetRepository implements NoBudgetRepositoryInterface @@ -40,31 +39,24 @@ class NoBudgetRepository implements NoBudgetRepositoryInterface /** @var User */ private $user; - /** - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ public function getNoBudgetPeriodReport(Collection $accounts, Carbon $start, Carbon $end): array { $carbonFormat = app('navigation')->preferredCarbonFormat($start, $end); /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts($accounts)->setRange($start, $end); $collector->setTypes([TransactionType::WITHDRAWAL]); $collector->withoutBudget(); - $journals = $collector->getExtractedJournals(); - $data = []; + $journals = $collector->getExtractedJournals(); + $data = []; /** @var array $journal */ foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; + $currencyId = (int)$journal['currency_id']; - $data[$currencyId] = $data[$currencyId] ?? [ + $data[$currencyId] ??= [ 'id' => 0, 'name' => sprintf('%s (%s)', trans('firefly.no_budget'), $journal['currency_name']), 'sum' => '0', @@ -75,7 +67,7 @@ class NoBudgetRepository implements NoBudgetRepositoryInterface 'currency_decimal_places' => $journal['currency_decimal_places'], 'entries' => [], ]; - $date = $journal['date']->format($carbonFormat); + $date = $journal['date']->format($carbonFormat); if (!array_key_exists($date, $data[$currencyId]['entries'])) { $data[$currencyId]['entries'][$date] = '0'; @@ -87,17 +79,12 @@ class NoBudgetRepository implements NoBudgetRepositoryInterface } /** - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array * @deprecated */ public function spentInPeriodWoBudgetMc(Collection $accounts, Carbon $start, Carbon $end): array { /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user); $collector->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL])->withoutBudget(); @@ -109,9 +96,10 @@ class NoBudgetRepository implements NoBudgetRepositoryInterface $return = []; $total = []; $currencies = []; + /** @var array $journal */ foreach ($journals as $journal) { - $code = $journal['currency_code']; + $code = $journal['currency_code']; if (!array_key_exists($code, $currencies)) { $currencies[$code] = [ 'id' => $journal['currency_id'], @@ -138,12 +126,9 @@ class NoBudgetRepository implements NoBudgetRepositoryInterface return $return; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } @@ -151,13 +136,6 @@ class NoBudgetRepository implements NoBudgetRepositoryInterface /** * TODO this method does not include multi currency. It just counts. * TODO this probably also applies to the other "sumExpenses" methods. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param TransactionCurrency|null $currency - * - * @return array */ public function sumExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?TransactionCurrency $currency = null): array { @@ -173,12 +151,12 @@ class NoBudgetRepository implements NoBudgetRepositoryInterface } $collector->withoutBudget(); $collector->withBudgetInformation(); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'sum' => '0', 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], diff --git a/app/Repositories/Budget/NoBudgetRepositoryInterface.php b/app/Repositories/Budget/NoBudgetRepositoryInterface.php index 579d37eec2..79e30d1867 100644 --- a/app/Repositories/Budget/NoBudgetRepositoryInterface.php +++ b/app/Repositories/Budget/NoBudgetRepositoryInterface.php @@ -35,37 +35,16 @@ use Illuminate\Support\Collection; interface NoBudgetRepositoryInterface { /** - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array * @deprecated */ public function getNoBudgetPeriodReport(Collection $accounts, Carbon $start, Carbon $end): array; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array * @deprecated */ public function spentInPeriodWoBudgetMc(Collection $accounts, Carbon $start, Carbon $end): array; - /** - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param TransactionCurrency|null $currency - * - * @return array - */ public function sumExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?TransactionCurrency $currency = null): array; } diff --git a/app/Repositories/Budget/OperationsRepository.php b/app/Repositories/Budget/OperationsRepository.php index 3289b9e4f6..b33ff50748 100644 --- a/app/Repositories/Budget/OperationsRepository.php +++ b/app/Repositories/Budget/OperationsRepository.php @@ -33,10 +33,8 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** - * * Class OperationsRepository */ class OperationsRepository implements OperationsRepositoryInterface @@ -46,30 +44,26 @@ class OperationsRepository implements OperationsRepositoryInterface /** * A method that returns the amount of money budgeted per day for this budget, * on average. - * - * @param Budget $budget - * - * @return string */ public function budgetedPerDay(Budget $budget): string { - Log::debug(sprintf('Now with budget #%d "%s"', $budget->id, $budget->name)); + app('log')->debug(sprintf('Now with budget #%d "%s"', $budget->id, $budget->name)); $total = '0'; $count = 0; foreach ($budget->budgetlimits as $limit) { $diff = $limit->start_date->diffInDays($limit->end_date); $diff = 0 === $diff ? 1 : $diff; - $amount = (string)$limit->amount; + $amount = $limit->amount; $perDay = bcdiv($amount, (string)$diff); $total = bcadd($total, $perDay); - $count++; - Log::debug(sprintf('Found %d budget limits. Per day is %s, total is %s', $count, $perDay, $total)); + ++$count; + app('log')->debug(sprintf('Found %d budget limits. Per day is %s, total is %s', $count, $perDay, $total)); } - $avg = $total; + $avg = $total; if ($count > 0) { $avg = bcdiv($total, (string)$count); } - Log::debug(sprintf('%s / %d = %s = average.', $total, $count, $avg)); + app('log')->debug(sprintf('%s / %d = %s = average.', $total, $count, $avg)); return $avg; } @@ -78,35 +72,30 @@ class OperationsRepository implements OperationsRepositoryInterface * This method is being used to generate the budget overview in the year/multi-year report. Its used * in both the year/multi-year budget overview AND in the accompanying chart. * - * @param Collection $budgets - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array * @deprecated */ public function getBudgetPeriodReport(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): array { $carbonFormat = app('navigation')->preferredCarbonFormat($start, $end); $data = []; + // get all transactions: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts($accounts)->setRange($start, $end); $collector->setBudgets($budgets); - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); // loop transactions: /** @var array $journal */ foreach ($journals as $journal) { // prep data array for currency: - $budgetId = (int)$journal['budget_id']; - $budgetName = $journal['budget_name']; - $currencyId = (int)$journal['currency_id']; - $key = sprintf('%d-%d', $budgetId, $currencyId); + $budgetId = (int)$journal['budget_id']; + $budgetName = $journal['budget_name']; + $currencyId = (int)$journal['currency_id']; + $key = sprintf('%d-%d', $budgetId, $currencyId); - $data[$key] = $data[$key] ?? [ + $data[$key] ??= [ 'id' => $budgetId, 'name' => sprintf('%s (%s)', $budgetName, $journal['currency_name']), 'sum' => '0', @@ -128,13 +117,6 @@ class OperationsRepository implements OperationsRepositoryInterface * This method returns a list of all the withdrawal transaction journals (as arrays) set in that period * which have the specified budget set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $budgets - * - * @return array */ public function listExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $budgets = null): array { @@ -147,17 +129,17 @@ class OperationsRepository implements OperationsRepositoryInterface if (null !== $budgets && $budgets->count() > 0) { $collector->setBudgets($budgets); } - if (null === $budgets || (null !== $budgets && 0 === $budgets->count())) { + if (null === $budgets || 0 === $budgets->count()) { $collector->setBudgets($this->getBudgets()); } $collector->withBudgetInformation()->withAccountInformation()->withCategoryInformation(); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $budgetId = (int)$journal['budget_id']; - $budgetName = (string)$journal['budget_name']; + $currencyId = (int)$journal['currency_id']; + $budgetId = (int)$journal['budget_id']; + $budgetName = (string)$journal['budget_name']; // catch "no category" entries. if (0 === $budgetId) { @@ -165,7 +147,7 @@ class OperationsRepository implements OperationsRepositoryInterface } // info about the currency: - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'budgets' => [], 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], @@ -175,7 +157,7 @@ class OperationsRepository implements OperationsRepositoryInterface ]; // info about the categories: - $array[$currencyId]['budgets'][$budgetId] = $array[$currencyId]['budgets'][$budgetId] ?? [ + $array[$currencyId]['budgets'][$budgetId] ??= [ 'id' => $budgetId, 'name' => $budgetName, 'transaction_journals' => [], @@ -200,19 +182,13 @@ class OperationsRepository implements OperationsRepositoryInterface return $array; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @return Collection - */ private function getBudgets(): Collection { /** @var BudgetRepositoryInterface $repos */ @@ -222,75 +198,7 @@ class OperationsRepository implements OperationsRepositoryInterface } /** - * @param Collection $budgets - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array - * @deprecated - */ - public function spentInPeriodMc(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): array - { - /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); - $collector->setUser($this->user); - $collector->setRange($start, $end)->setBudgets($budgets)->withBudgetInformation(); - - if ($accounts->count() > 0) { - $collector->setAccounts($accounts); - } - // TODO possible candidate for "get extracted groups" method. - $set = $collector->getGroups(); - $return = []; - $total = []; - $currencies = []; - /** @var array $group */ - foreach ($set as $group) { - /** @var array $transaction */ - foreach ($group['transactions'] as $transaction) { - $code = $transaction['currency_code']; - if (!array_key_exists($code, $currencies)) { - $currencies[$code] = [ - 'id' => $transaction['currency_id'], - 'decimal_places' => $transaction['currency_decimal_places'], - 'code' => $transaction['currency_code'], - 'name' => $transaction['currency_name'], - 'symbol' => $transaction['currency_symbol'], - ]; - } - $total[$code] = array_key_exists($code, $total) ? bcadd($total[$code], $transaction['amount']) : $transaction['amount']; - } - } - /** - * @var string $code - * @var string $spent - */ - foreach ($total as $code => $spent) { - /** @var TransactionCurrency $currency */ - $currency = $currencies[$code]; - $return[] = [ - 'currency_id' => (string)$currency['id'], - 'currency_code' => $code, - 'currency_name' => $currency['name'], - 'currency_symbol' => $currency['symbol'], - 'currency_decimal_places' => $currency['decimal_places'], - 'amount' => app('steam')->bcround($spent, $currency['decimal_places']), - ]; - } - - return $return; - } - - /** - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $budgets - * @param TransactionCurrency|null $currency - * - * @return array - * @deprecated + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumExpenses( Carbon $start, @@ -299,7 +207,7 @@ class OperationsRepository implements OperationsRepositoryInterface ?Collection $budgets = null, ?TransactionCurrency $currency = null ): array { - //Log::debug(sprintf('Now in %s', __METHOD__)); + // app('log')->debug(sprintf('Now in %s', __METHOD__)); $start->startOfDay(); $end->endOfDay(); @@ -310,8 +218,9 @@ class OperationsRepository implements OperationsRepositoryInterface // TODO this filter must be somewhere in AccountRepositoryInterface because I suspect its needed more often (A113) $repository = app(AccountRepositoryInterface::class); $repository->setUser($this->user); - $subset = $repository->getAccountsByType(config('firefly.valid_liabilities')); - $selection = new Collection(); + $subset = $repository->getAccountsByType(config('firefly.valid_liabilities')); + $selection = new Collection(); + /** @var Account $account */ foreach ($subset as $account) { if ('credit' === $repository->getMetaValue($account, 'liability_direction')) { @@ -319,13 +228,13 @@ class OperationsRepository implements OperationsRepositoryInterface } } - /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user) - ->setRange($start, $end) - ->excludeDestinationAccounts($selection) - ->setTypes([TransactionType::WITHDRAWAL]); + ->setRange($start, $end) + ->excludeDestinationAccounts($selection) + ->setTypes([TransactionType::WITHDRAWAL]) + ; if (null !== $accounts) { $collector->setAccounts($accounts); @@ -337,29 +246,30 @@ class OperationsRepository implements OperationsRepositoryInterface $collector->setCurrency($currency); } $collector->setBudgets($budgets); - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); // same but for foreign currencies: if (null !== $currency) { - //Log::debug(sprintf('Currency is "%s".', $currency->name)); + // app('log')->debug(sprintf('Currency is "%s".', $currency->name)); /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user)->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL]) - ->setForeignCurrency($currency)->setBudgets($budgets); + ->setForeignCurrency($currency)->setBudgets($budgets) + ; if (null !== $accounts) { $collector->setAccounts($accounts); } - $result = $collector->getExtractedJournals(); - //Log::debug(sprintf('Found %d journals with currency %s.', count($result), $currency->code)); + $result = $collector->getExtractedJournals(); + // app('log')->debug(sprintf('Found %d journals with currency %s.', count($result), $currency->code)); // do not use array_merge because you want keys to overwrite (otherwise you get double results): - $journals = $result + $journals; + $journals = $result + $journals; } - $array = []; + $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'sum' => '0', 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], @@ -370,9 +280,9 @@ class OperationsRepository implements OperationsRepositoryInterface $array[$currencyId]['sum'] = bcadd($array[$currencyId]['sum'], app('steam')->negative($journal['amount'])); // also do foreign amount: - $foreignId = (int)$journal['foreign_currency_id']; + $foreignId = (int)$journal['foreign_currency_id']; if (0 !== $foreignId) { - $array[$foreignId] = $array[$foreignId] ?? [ + $array[$foreignId] ??= [ 'sum' => '0', 'currency_id' => $foreignId, 'currency_name' => $journal['foreign_currency_name'], @@ -386,22 +296,4 @@ class OperationsRepository implements OperationsRepositoryInterface return $array; } - - /** - * For now, simply refer to whichever repository holds this function. - * TODO perhaps better in the future. - * - * @param Budget $budget - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return Collection - */ - private function getBudgetLimits(Budget $budget, Carbon $start = null, Carbon $end = null): Collection - { - /** @var BudgetLimitRepositoryInterface $blRepository */ - $blRepository = app(BudgetLimitRepositoryInterface::class); - - return $blRepository->getBudgetLimits($budget, $start, $end); - } } diff --git a/app/Repositories/Budget/OperationsRepositoryInterface.php b/app/Repositories/Budget/OperationsRepositoryInterface.php index 1e2ab042f8..01c5da7560 100644 --- a/app/Repositories/Budget/OperationsRepositoryInterface.php +++ b/app/Repositories/Budget/OperationsRepositoryInterface.php @@ -38,20 +38,10 @@ interface OperationsRepositoryInterface /** * A method that returns the amount of money budgeted per day for this budget, * on average. - * - * @param Budget $budget - * - * @return string */ public function budgetedPerDay(Budget $budget): string; /** - * @param Collection $budgets - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array * @deprecated */ public function getBudgetPeriodReport(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): array; @@ -60,46 +50,13 @@ interface OperationsRepositoryInterface * This method returns a list of all the withdrawal transaction journals (as arrays) set in that period * which have the specified budget set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $budgets - * - * @return array */ public function listExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $budgets = null): array; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; - + public function setUser(null|Authenticatable|User $user): void; /** - * Return multi-currency spent information. - * - * @param Collection $budgets - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array - * @deprecated - */ - public function spentInPeriodMc(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): array; - - /** - * TODO this method was marked as deprecated but I'm not sure why. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $budgets - * @param TransactionCurrency|null $currency - * - * @return array - * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function sumExpenses( Carbon $start, diff --git a/app/Repositories/Category/CategoryRepository.php b/app/Repositories/Category/CategoryRepository.php index d922fe3658..c4312c833c 100644 --- a/app/Repositories/Category/CategoryRepository.php +++ b/app/Repositories/Category/CategoryRepository.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Category; use Carbon\Carbon; -use DB; -use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\CategoryFactory; use FireflyIII\Models\Attachment; @@ -39,7 +37,6 @@ use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; -use Storage; /** * Class CategoryRepository. @@ -48,9 +45,6 @@ class CategoryRepository implements CategoryRepositoryInterface { private User $user; - /** - * @inheritDoc - */ public function categoryEndsWith(string $query, int $limit): Collection { $search = $this->user->categories(); @@ -61,9 +55,6 @@ class CategoryRepository implements CategoryRepositoryInterface return $search->take($limit)->get(); } - /** - * @inheritDoc - */ public function categoryStartsWith(string $query, int $limit): Collection { $search = $this->user->categories(); @@ -74,13 +65,6 @@ class CategoryRepository implements CategoryRepositoryInterface return $search->take($limit)->get(); } - /** - * @param Category $category - * - * @return bool - * - - */ public function destroy(Category $category): bool { /** @var CategoryDestroyService $service */ @@ -96,20 +80,20 @@ class CategoryRepository implements CategoryRepositoryInterface public function destroyAll(): void { $categories = $this->getCategories(); + /** @var Category $category */ foreach ($categories as $category) { - DB::table('category_transaction')->where('category_id', $category->id)->delete(); - DB::table('category_transaction_journal')->where('category_id', $category->id)->delete(); + \DB::table('category_transaction')->where('category_id', $category->id)->delete(); + \DB::table('category_transaction_journal')->where('category_id', $category->id)->delete(); RecurrenceTransactionMeta::where('name', 'category_id')->where('value', $category->id)->delete(); RuleAction::where('action_type', 'set_category')->where('action_value', $category->name)->delete(); $category->delete(); } + Log::channel('audit')->info('Delete all categories through destroyAll'); } /** * Returns a list of all the categories belonging to a user. - * - * @return Collection */ public function getCategories(): Collection { @@ -117,19 +101,15 @@ class CategoryRepository implements CategoryRepositoryInterface } /** - * @param int|null $categoryId - * @param string|null $categoryName - * - * @return Category|null * @throws FireflyException */ public function findCategory(?int $categoryId, ?string $categoryName): ?Category { - Log::debug('Now in findCategory()'); - Log::debug(sprintf('Searching for category with ID #%d...', $categoryId)); + app('log')->debug('Now in findCategory()'); + app('log')->debug(sprintf('Searching for category with ID #%d...', $categoryId)); $result = $this->find((int)$categoryId); if (null === $result) { - Log::debug(sprintf('Searching for category with name %s...', $categoryName)); + app('log')->debug(sprintf('Searching for category with name %s...', $categoryName)); $result = $this->findByName((string)$categoryName); if (null === $result && '' !== (string)$categoryName) { // create it! @@ -137,19 +117,15 @@ class CategoryRepository implements CategoryRepositoryInterface } } if (null !== $result) { - Log::debug(sprintf('Found category #%d: %s', $result->id, $result->name)); + app('log')->debug(sprintf('Found category #%d: %s', $result->id, $result->name)); } - Log::debug(sprintf('Found category result is null? %s', var_export(null === $result, true))); + app('log')->debug(sprintf('Found category result is null? %s', var_export(null === $result, true))); return $result; } /** * Find a category or return NULL - * - * @param int $categoryId - * - * @return Category|null */ public function find(int $categoryId): ?Category { @@ -158,10 +134,6 @@ class CategoryRepository implements CategoryRepositoryInterface /** * Find a category. - * - * @param string $name - * - * @return Category|null */ public function findByName(string $name): ?Category { @@ -169,15 +141,12 @@ class CategoryRepository implements CategoryRepositoryInterface } /** - * @param array $data - * - * @return Category * @throws FireflyException */ public function store(array $data): Category { /** @var CategoryFactory $factory */ - $factory = app(CategoryFactory::class); + $factory = app(CategoryFactory::class); $factory->setUser($this->user); $category = $factory->findOrCreate(null, $data['name']); @@ -196,30 +165,21 @@ class CategoryRepository implements CategoryRepositoryInterface return $category; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @param Category $category - */ public function removeNotes(Category $category): void { $category->notes()->delete(); } - /** - * @inheritDoc - */ public function updateNotes(Category $category, string $notes): void { - $dbNote = $category->notes()->first(); + $dbNote = $category->notes()->first(); if (null === $dbNote) { $dbNote = new Note(); $dbNote->noteable()->associate($category); @@ -228,12 +188,6 @@ class CategoryRepository implements CategoryRepositoryInterface $dbNote->save(); } - /** - * @param Category $category - * - * @return Carbon|null - * - */ public function firstUseDate(Category $category): ?Carbon { $firstJournalDate = $this->getFirstJournalDate($category); @@ -256,11 +210,6 @@ class CategoryRepository implements CategoryRepositoryInterface return $firstJournalDate; } - /** - * @param Category $category - * - * @return Carbon|null - */ private function getFirstJournalDate(Category $category): ?Carbon { $query = $category->transactionJournals()->orderBy('date', 'ASC'); @@ -273,17 +222,13 @@ class CategoryRepository implements CategoryRepositoryInterface return null; } - /** - * @param Category $category - * - * @return Carbon|null - */ private function getFirstTransactionDate(Category $category): ?Carbon { // check transactions: - $query = $category->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->orderBy('transaction_journals.date', 'ASC'); + $query = $category->transactions() + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->orderBy('transaction_journals.date', 'ASC') + ; $lastTransaction = $query->first(['transaction_journals.*']); if (null !== $lastTransaction) { @@ -293,21 +238,18 @@ class CategoryRepository implements CategoryRepositoryInterface return null; } - /** - * @inheritDoc - */ public function getAttachments(Category $category): Collection { - $set = $category->attachments()->get(); + $set = $category->attachments()->get(); - /** @var Storage $disk */ - $disk = Storage::disk('upload'); + /** @var \Storage $disk */ + $disk = \Storage::disk('upload'); return $set->each( static function (Attachment $attachment) use ($disk) { $notes = $attachment->notes()->first(); $attachment->file_exists = $disk->exists($attachment->fileName()); - $attachment->notes = $notes ? $notes->text : ''; + $attachment->notes_text = null !== $notes ? $notes->text : ''; return $attachment; } @@ -316,19 +258,12 @@ class CategoryRepository implements CategoryRepositoryInterface /** * Get all categories with ID's. - * - * @param array $categoryIds - * - * @return Collection */ public function getByIds(array $categoryIds): Collection { return $this->user->categories()->whereIn('id', $categoryIds)->get(); } - /** - * @inheritDoc - */ public function getNoteText(Category $category): ?string { $dbNote = $category->notes()->first(); @@ -340,11 +275,7 @@ class CategoryRepository implements CategoryRepositoryInterface } /** - * @param Category $category - * @param Collection $accounts - * - * @return Carbon|null - * @throws Exception + * @throws \Exception */ public function lastUseDate(Category $category, Collection $accounts): ?Carbon { @@ -368,15 +299,9 @@ class CategoryRepository implements CategoryRepositoryInterface return $lastJournalDate; } - /** - * @param Category $category - * @param Collection $accounts - * - * @return Carbon|null - */ private function getLastJournalDate(Category $category, Collection $accounts): ?Carbon { - $query = $category->transactionJournals()->orderBy('date', 'DESC'); + $query = $category->transactionJournals()->orderBy('date', 'DESC'); if ($accounts->count() > 0) { $query->leftJoin('transactions as t', 't.transaction_journal_id', '=', 'transaction_journals.id'); @@ -393,18 +318,15 @@ class CategoryRepository implements CategoryRepositoryInterface } /** - * @param Category $category - * @param Collection $accounts - * - * @return Carbon|null - * @throws Exception + * @throws \Exception */ private function getLastTransactionDate(Category $category, Collection $accounts): ?Carbon { // check transactions: - $query = $category->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->orderBy('transaction_journals.date', 'DESC'); + $query = $category->transactions() + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->orderBy('transaction_journals.date', 'DESC') + ; if ($accounts->count() > 0) { // filter journals: $query->whereIn('transactions.account_id', $accounts->pluck('id')->toArray()); @@ -418,12 +340,6 @@ class CategoryRepository implements CategoryRepositoryInterface return null; } - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchCategory(string $query, int $limit): Collection { $search = $this->user->categories(); @@ -435,11 +351,7 @@ class CategoryRepository implements CategoryRepositoryInterface } /** - * @param Category $category - * @param array $data - * - * @return Category - * @throws Exception + * @throws \Exception */ public function update(Category $category, array $data): Category { diff --git a/app/Repositories/Category/CategoryRepositoryInterface.php b/app/Repositories/Category/CategoryRepositoryInterface.php index 4f4d2e0afe..94e7bd7c48 100644 --- a/app/Repositories/Category/CategoryRepositoryInterface.php +++ b/app/Repositories/Category/CategoryRepositoryInterface.php @@ -35,27 +35,10 @@ use Illuminate\Support\Collection; */ interface CategoryRepositoryInterface { - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function categoryEndsWith(string $query, int $limit): Collection; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function categoryStartsWith(string $query, int $limit): Collection; - /** - * @param Category $category - * - * @return bool - */ public function destroy(Category $category): bool; /** @@ -65,116 +48,52 @@ interface CategoryRepositoryInterface /** * Find a category or return NULL - * - * @param int $categoryId - * - * @return Category|null */ public function find(int $categoryId): ?Category; /** * Find a category. - * - * @param string $name - * - * @return Category|null */ public function findByName(string $name): ?Category; - /** - * @param int|null $categoryId - * @param string|null $categoryName - * - * @return Category|null - */ public function findCategory(?int $categoryId, ?string $categoryName): ?Category; - /** - * @param Category $category - * - * @return Carbon|null - */ public function firstUseDate(Category $category): ?Carbon; - /** - * @param Category $category - * - * @return Collection - */ public function getAttachments(Category $category): Collection; /** * Get all categories with ID's. - * - * @param array $categoryIds - * - * @return Collection */ public function getByIds(array $categoryIds): Collection; /** * Returns a list of all the categories belonging to a user. - * - * @return Collection */ public function getCategories(): Collection; - /** - * @param Category $category - * - * @return string|null - */ public function getNoteText(Category $category): ?string; /** * Return most recent transaction(journal) date or null when never used before. - * - * @param Category $category - * @param Collection $accounts - * - * @return Carbon|null */ public function lastUseDate(Category $category, Collection $accounts): ?Carbon; /** * Remove notes. - * - * @param Category $category */ public function removeNotes(Category $category): void; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchCategory(string $query, int $limit): Collection; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** - * @param array $data - * - * @return Category * @throws FireflyException */ public function store(array $data): Category; - /** - * @param Category $category - * @param array $data - * - * @return Category - */ public function update(Category $category, array $data): Category; - /** - * @param Category $category - * @param string $notes - */ public function updateNotes(Category $category, string $notes): void; } diff --git a/app/Repositories/Category/NoCategoryRepository.php b/app/Repositories/Category/NoCategoryRepository.php index f43f674c87..1da423c8b0 100644 --- a/app/Repositories/Category/NoCategoryRepository.php +++ b/app/Repositories/Category/NoCategoryRepository.php @@ -31,7 +31,6 @@ use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; /** - * * Class NoCategoryRepository */ class NoCategoryRepository implements NoCategoryRepositoryInterface @@ -42,12 +41,6 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface * This method returns a list of all the withdrawal transaction journals (as arrays) set in that period * which have no category set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function listExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null): array { @@ -57,12 +50,12 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface if (null !== $accounts && $accounts->count() > 0) { $collector->setAccounts($accounts); } - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $currencyId = (int)$journal['currency_id']; + $array[$currencyId] ??= [ 'categories' => [], 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], @@ -71,7 +64,7 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface 'currency_decimal_places' => $journal['currency_decimal_places'], ]; // info about the non-existent category: - $array[$currencyId]['categories'][0] = $array[$currencyId]['categories'][0] ?? [ + $array[$currencyId]['categories'][0] ??= [ 'id' => 0, 'name' => (string)trans('firefly.noCategory'), 'transaction_journals' => [], @@ -79,23 +72,20 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface // add journal to array: // only a subset of the fields. - $journalId = (int)$journal['transaction_journal_id']; + $journalId = (int)$journal['transaction_journal_id']; $array[$currencyId]['categories'][0]['transaction_journals'][$journalId] - = [ - 'amount' => app('steam')->negative($journal['amount']), - 'date' => $journal['date'], - ]; + = [ + 'amount' => app('steam')->negative($journal['amount']), + 'date' => $journal['date'], + ]; } return $array; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } @@ -104,12 +94,6 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface * This method returns a list of all the deposit transaction journals (as arrays) set in that period * which have no category set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null): array { @@ -119,12 +103,12 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface if (null !== $accounts && $accounts->count() > 0) { $collector->setAccounts($accounts); } - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $currencyId = (int)$journal['currency_id']; + $array[$currencyId] ??= [ 'categories' => [], 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], @@ -134,19 +118,19 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface ]; // info about the non-existent category: - $array[$currencyId]['categories'][0] = $array[$currencyId]['categories'][0] ?? [ + $array[$currencyId]['categories'][0] ??= [ 'id' => 0, 'name' => (string)trans('firefly.noCategory'), 'transaction_journals' => [], ]; // add journal to array: // only a subset of the fields. - $journalId = (int)$journal['transaction_journal_id']; + $journalId = (int)$journal['transaction_journal_id']; $array[$currencyId]['categories'][0]['transaction_journals'][$journalId] - = [ - 'amount' => app('steam')->positive($journal['amount']), - 'date' => $journal['date'], - ]; + = [ + 'amount' => app('steam')->positive($journal['amount']), + 'date' => $journal['date'], + ]; } return $array; @@ -154,12 +138,6 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface /** * Sum of withdrawal journals in period without a category, grouped per currency. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function sumExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null): array { @@ -170,12 +148,12 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface if (null !== $accounts && $accounts->count() > 0) { $collector->setAccounts($accounts); } - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'sum' => '0', 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], @@ -191,12 +169,6 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface /** * Sum of income journals in period without a category, grouped per currency. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function sumIncome(Carbon $start, Carbon $end, ?Collection $accounts = null): array { @@ -207,12 +179,12 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface if (null !== $accounts && $accounts->count() > 0) { $collector->setAccounts($accounts); } - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'sum' => '0', 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], @@ -226,9 +198,6 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface return $array; } - /** - * @inheritDoc - */ public function sumTransfers(Carbon $start, Carbon $end, ?Collection $accounts = null): array { /** @var GroupCollectorInterface $collector */ @@ -238,12 +207,12 @@ class NoCategoryRepository implements NoCategoryRepositoryInterface if (null !== $accounts && $accounts->count() > 0) { $collector->setAccounts($accounts); } - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'sum' => '0', 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], diff --git a/app/Repositories/Category/NoCategoryRepositoryInterface.php b/app/Repositories/Category/NoCategoryRepositoryInterface.php index a227c8262a..58bc06446f 100644 --- a/app/Repositories/Category/NoCategoryRepositoryInterface.php +++ b/app/Repositories/Category/NoCategoryRepositoryInterface.php @@ -30,7 +30,6 @@ use Illuminate\Support\Collection; /** * Interface NoCategoryRepositoryInterface - * */ interface NoCategoryRepositoryInterface { @@ -38,12 +37,6 @@ interface NoCategoryRepositoryInterface * This method returns a list of all the withdrawal transaction journals (as arrays) set in that period * which have no category set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function listExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null): array; @@ -51,50 +44,23 @@ interface NoCategoryRepositoryInterface * This method returns a list of all the deposit transaction journals (as arrays) set in that period * which have no category set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null): array; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** * Sum of withdrawal journals in period without a category, grouped per currency. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function sumExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null): array; /** * Sum of income journals in period without a category, grouped per currency. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function sumIncome(Carbon $start, Carbon $end, ?Collection $accounts = null): array; /** * Sum of transfers in period without a category, grouped per currency. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * - * @return array */ public function sumTransfers(Carbon $start, Carbon $end, ?Collection $accounts = null): array; } diff --git a/app/Repositories/Category/OperationsRepository.php b/app/Repositories/Category/OperationsRepository.php index 9211a0d060..b1f17d184f 100644 --- a/app/Repositories/Category/OperationsRepository.php +++ b/app/Repositories/Category/OperationsRepository.php @@ -31,7 +31,6 @@ use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; /** - * * Class OperationsRepository */ class OperationsRepository implements OperationsRepositoryInterface @@ -44,13 +43,6 @@ class OperationsRepository implements OperationsRepositoryInterface * as possible. Amounts are always negative. * * First currency, then categories. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $categories - * - * @return array */ public function listExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $categories = null): array { @@ -63,17 +55,17 @@ class OperationsRepository implements OperationsRepositoryInterface if (null !== $categories && $categories->count() > 0) { $collector->setCategories($categories); } - if (null === $categories || (null !== $categories && 0 === $categories->count())) { + if (null === $categories || 0 === $categories->count()) { $collector->setCategories($this->getCategories()); } $collector->withCategoryInformation()->withAccountInformation()->withBudgetInformation(); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $categoryId = (int)$journal['category_id']; - $categoryName = (string)$journal['category_name']; + $currencyId = (int)$journal['currency_id']; + $categoryId = (int)$journal['category_id']; + $categoryName = (string)$journal['category_name']; // catch "no category" entries. if (0 === $categoryId) { @@ -81,7 +73,7 @@ class OperationsRepository implements OperationsRepositoryInterface } // info about the currency: - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'categories' => [], 'currency_id' => (string)$currencyId, 'currency_name' => $journal['currency_name'], @@ -91,7 +83,7 @@ class OperationsRepository implements OperationsRepositoryInterface ]; // info about the categories: - $array[$currencyId]['categories'][$categoryId] = $array[$currencyId]['categories'][$categoryId] ?? [ + $array[$currencyId]['categories'][$categoryId] ??= [ 'id' => (string)$categoryId, 'name' => $categoryName, 'transaction_journals' => [], @@ -116,20 +108,15 @@ class OperationsRepository implements OperationsRepositoryInterface return $array; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } /** * Returns a list of all the categories belonging to a user. - * - * @return Collection */ private function getCategories(): Collection { @@ -140,13 +127,6 @@ class OperationsRepository implements OperationsRepositoryInterface * This method returns a list of all the deposit transaction journals (as arrays) set in that period * which have the specified category set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $categories - * - * @return array */ public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $categories = null): array { @@ -159,17 +139,17 @@ class OperationsRepository implements OperationsRepositoryInterface if (null !== $categories && $categories->count() > 0) { $collector->setCategories($categories); } - if (null === $categories || (null !== $categories && 0 === $categories->count())) { + if (null === $categories || 0 === $categories->count()) { $collector->setCategories($this->getCategories()); } $collector->withCategoryInformation()->withAccountInformation(); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $categoryId = (int)$journal['category_id']; - $categoryName = (string)$journal['category_name']; + $currencyId = (int)$journal['currency_id']; + $categoryId = (int)$journal['category_id']; + $categoryName = (string)$journal['category_name']; // catch "no category" entries. if (0 === $categoryId) { @@ -177,7 +157,7 @@ class OperationsRepository implements OperationsRepositoryInterface } // info about the currency: - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'categories' => [], 'currency_id' => (string)$currencyId, 'currency_name' => $journal['currency_name'], @@ -187,7 +167,7 @@ class OperationsRepository implements OperationsRepositoryInterface ]; // info about the categories: - $array[$currencyId]['categories'][$categoryId] = $array[$currencyId]['categories'][$categoryId] ?? [ + $array[$currencyId]['categories'][$categoryId] ??= [ 'id' => (string)$categoryId, 'name' => $categoryName, 'transaction_journals' => [], @@ -211,29 +191,27 @@ class OperationsRepository implements OperationsRepositoryInterface return $array; } - /** - * @inheritDoc - */ public function listTransferredIn(Carbon $start, Carbon $end, Collection $accounts, ?Collection $categories = null): array { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user)->setRange($start, $end)->setTypes([TransactionType::TRANSFER]) - ->setDestinationAccounts($accounts)->excludeSourceAccounts($accounts); + ->setDestinationAccounts($accounts)->excludeSourceAccounts($accounts) + ; if (null !== $categories && $categories->count() > 0) { $collector->setCategories($categories); } - if (null === $categories || (null !== $categories && 0 === $categories->count())) { + if (null === $categories || 0 === $categories->count()) { $collector->setCategories($this->getCategories()); } $collector->withCategoryInformation()->withAccountInformation()->withBudgetInformation(); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $categoryId = (int)$journal['category_id']; - $categoryName = (string)$journal['category_name']; + $currencyId = (int)$journal['currency_id']; + $categoryId = (int)$journal['category_id']; + $categoryName = (string)$journal['category_name']; // catch "no category" entries. if (0 === $categoryId) { @@ -241,7 +219,7 @@ class OperationsRepository implements OperationsRepositoryInterface } // info about the currency: - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'categories' => [], 'currency_id' => (string)$currencyId, 'currency_name' => $journal['currency_name'], @@ -251,7 +229,7 @@ class OperationsRepository implements OperationsRepositoryInterface ]; // info about the categories: - $array[$currencyId]['categories'][$categoryId] = $array[$currencyId]['categories'][$categoryId] ?? [ + $array[$currencyId]['categories'][$categoryId] ??= [ 'id' => (string)$categoryId, 'name' => $categoryName, 'transaction_journals' => [], @@ -276,29 +254,27 @@ class OperationsRepository implements OperationsRepositoryInterface return $array; } - /** - * @inheritDoc - */ public function listTransferredOut(Carbon $start, Carbon $end, Collection $accounts, ?Collection $categories = null): array { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user)->setRange($start, $end)->setTypes([TransactionType::TRANSFER]) - ->setSourceAccounts($accounts)->excludeDestinationAccounts($accounts); + ->setSourceAccounts($accounts)->excludeDestinationAccounts($accounts) + ; if (null !== $categories && $categories->count() > 0) { $collector->setCategories($categories); } - if (null === $categories || (null !== $categories && 0 === $categories->count())) { + if (null === $categories || 0 === $categories->count()) { $collector->setCategories($this->getCategories()); } $collector->withCategoryInformation()->withAccountInformation()->withBudgetInformation(); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $categoryId = (int)$journal['category_id']; - $categoryName = (string)$journal['category_name']; + $currencyId = (int)$journal['currency_id']; + $categoryId = (int)$journal['category_id']; + $categoryName = (string)$journal['category_name']; // catch "no category" entries. if (0 === $categoryId) { @@ -306,7 +282,7 @@ class OperationsRepository implements OperationsRepositoryInterface } // info about the currency: - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'categories' => [], 'currency_id' => (string)$currencyId, 'currency_name' => $journal['currency_name'], @@ -316,7 +292,7 @@ class OperationsRepository implements OperationsRepositoryInterface ]; // info about the categories: - $array[$currencyId]['categories'][$categoryId] = $array[$currencyId]['categories'][$categoryId] ?? [ + $array[$currencyId]['categories'][$categoryId] ??= [ 'id' => (string)$categoryId, 'name' => $categoryName, 'transaction_journals' => [], @@ -343,35 +319,29 @@ class OperationsRepository implements OperationsRepositoryInterface /** * Sum of withdrawal journals in period for a set of categories, grouped per currency. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $categories - * - * @return array */ public function sumExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $categories = null): array { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user)->setRange($start, $end) - ->setTypes([TransactionType::WITHDRAWAL]); + ->setTypes([TransactionType::WITHDRAWAL]) + ; if (null !== $accounts && $accounts->count() > 0) { $collector->setAccounts($accounts); } - if (null === $categories || (null !== $categories && 0 === $categories->count())) { + if (null === $categories || 0 === $categories->count()) { $categories = $this->getCategories(); } $collector->setCategories($categories); $collector->withCategoryInformation(); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'sum' => '0', 'currency_id' => (string)$currencyId, 'currency_name' => $journal['currency_name'], @@ -387,34 +357,28 @@ class OperationsRepository implements OperationsRepositoryInterface /** * Sum of income journals in period for a set of categories, grouped per currency. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $categories - * - * @return array */ public function sumIncome(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $categories = null): array { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user)->setRange($start, $end) - ->setTypes([TransactionType::DEPOSIT]); + ->setTypes([TransactionType::DEPOSIT]) + ; if (null !== $accounts && $accounts->count() > 0) { $collector->setAccounts($accounts); } - if (null === $categories || (null !== $categories && 0 === $categories->count())) { + if (null === $categories || 0 === $categories->count()) { $categories = $this->getCategories(); } $collector->setCategories($categories); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'sum' => '0', 'currency_id' => (string)$currencyId, 'currency_name' => $journal['currency_name'], @@ -430,34 +394,28 @@ class OperationsRepository implements OperationsRepositoryInterface /** * Sum of income journals in period for a set of categories, grouped per currency. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $categories - * - * @return array */ public function sumTransfers(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $categories = null): array { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user)->setRange($start, $end) - ->setTypes([TransactionType::TRANSFER]); + ->setTypes([TransactionType::TRANSFER]) + ; if (null !== $accounts && $accounts->count() > 0) { $collector->setAccounts($accounts); } - if (null === $categories || (null !== $categories && 0 === $categories->count())) { + if (null === $categories || 0 === $categories->count()) { $categories = $this->getCategories(); } $collector->setCategories($categories); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'sum' => '0', 'currency_id' => (string)$currencyId, 'currency_name' => $journal['currency_name'], diff --git a/app/Repositories/Category/OperationsRepositoryInterface.php b/app/Repositories/Category/OperationsRepositoryInterface.php index 2738df0d6a..3eb38cc3c3 100644 --- a/app/Repositories/Category/OperationsRepositoryInterface.php +++ b/app/Repositories/Category/OperationsRepositoryInterface.php @@ -30,7 +30,6 @@ use Illuminate\Support\Collection; /** * Interface OperationsRepositoryInterface - * */ interface OperationsRepositoryInterface { @@ -38,13 +37,6 @@ interface OperationsRepositoryInterface * This method returns a list of all the withdrawal transaction journals (as arrays) set in that period * which have the specified category set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $categories - * - * @return array */ public function listExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $categories = null): array; @@ -52,13 +44,6 @@ interface OperationsRepositoryInterface * This method returns a list of all the deposit transaction journals (as arrays) set in that period * which have the specified category set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $categories - * - * @return array */ public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $categories = null): array; @@ -67,13 +52,6 @@ interface OperationsRepositoryInterface * which have the specified category set to them, transferred INTO the listed accounts. * It excludes any transfers between the listed accounts. * It's grouped per currency, with as few details in the array as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * @param Collection|null $categories - * - * @return array */ public function listTransferredIn(Carbon $start, Carbon $end, Collection $accounts, ?Collection $categories = null): array; @@ -82,54 +60,23 @@ interface OperationsRepositoryInterface * which have the specified category set to them, transferred FROM the listed accounts. * It excludes any transfers between the listed accounts. * It's grouped per currency, with as few details in the array as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * @param Collection|null $categories - * - * @return array */ public function listTransferredOut(Carbon $start, Carbon $end, Collection $accounts, ?Collection $categories = null): array; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** * Sum of withdrawal journals in period for a set of categories, grouped per currency. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $categories - * - * @return array */ public function sumExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $categories = null): array; /** * Sum of income journals in period for a set of categories, grouped per currency. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $categories - * - * @return array */ public function sumIncome(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $categories = null): array; /** * Sum of transfers in period for a set of categories, grouped per currency. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $categories - * - * @return array */ public function sumTransfers(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $categories = null): array; } diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php index c977e730b0..725a5741ad 100644 --- a/app/Repositories/Currency/CurrencyRepository.php +++ b/app/Repositories/Currency/CurrencyRepository.php @@ -24,25 +24,11 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Currency; use Carbon\Carbon; -use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Factory\TransactionCurrencyFactory; -use FireflyIII\Models\AccountMeta; -use FireflyIII\Models\AvailableBudget; -use FireflyIII\Models\Bill; -use FireflyIII\Models\BudgetLimit; use FireflyIII\Models\CurrencyExchangeRate; -use FireflyIII\Models\Preference; -use FireflyIII\Models\RecurrenceTransaction; -use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\User\UserRepositoryInterface; -use FireflyIII\Services\Internal\Destroy\CurrencyDestroyService; -use FireflyIII\Services\Internal\Update\CurrencyUpdateService; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class CurrencyRepository. @@ -51,334 +37,8 @@ class CurrencyRepository implements CurrencyRepositoryInterface { private User $user; - /** - * @param TransactionCurrency $currency - * - * @return bool - * @throws FireflyException - */ - public function currencyInUse(TransactionCurrency $currency): bool - { - $result = $this->currencyInUseAt($currency); - - return null !== $result; - } - - /** - * @param TransactionCurrency $currency - * - * @return string|null - * @throws FireflyException - */ - public function currencyInUseAt(TransactionCurrency $currency): ?string - { - Log::debug(sprintf('Now in currencyInUse() for #%d ("%s")', $currency->id, $currency->code)); - $countJournals = $this->countJournals($currency); - if ($countJournals > 0) { - Log::info(sprintf('Count journals is %d, return true.', $countJournals)); - - return 'journals'; - } - - // is the only currency left - if (1 === $this->getAll()->count()) { - Log::info('Is the last currency in the system, return true. '); - - return 'last_left'; - } - - // is being used in accounts: - $meta = AccountMeta::where('name', 'currency_id')->where('data', json_encode((string)$currency->id))->count(); - if ($meta > 0) { - Log::info(sprintf('Used in %d accounts as currency_id, return true. ', $meta)); - - return 'account_meta'; - } - - // is being used in bills: - $bills = Bill::where('transaction_currency_id', $currency->id)->count(); - if ($bills > 0) { - Log::info(sprintf('Used in %d bills as currency, return true. ', $bills)); - - return 'bills'; - } - - // is being used in recurring transactions - $recurringAmount = RecurrenceTransaction::where('transaction_currency_id', $currency->id)->count(); - $recurringForeign = RecurrenceTransaction::where('foreign_currency_id', $currency->id)->count(); - - if ($recurringAmount > 0 || $recurringForeign > 0) { - Log::info(sprintf('Used in %d recurring transactions as (foreign) currency id, return true. ', $recurringAmount + $recurringForeign)); - - return 'recurring'; - } - - // is being used in accounts (as integer) - $meta = AccountMeta::leftJoin('accounts', 'accounts.id', '=', 'account_meta.account_id') - ->whereNull('accounts.deleted_at') - ->where('account_meta.name', 'currency_id')->where('account_meta.data', json_encode((int)$currency->id))->count(); - if ($meta > 0) { - Log::info(sprintf('Used in %d accounts as currency_id, return true. ', $meta)); - - return 'account_meta'; - } - - // is being used in available budgets - $availableBudgets = AvailableBudget::where('transaction_currency_id', $currency->id)->count(); - if ($availableBudgets > 0) { - Log::info(sprintf('Used in %d available budgets as currency, return true. ', $availableBudgets)); - - return 'available_budgets'; - } - - // is being used in budget limits - $budgetLimit = BudgetLimit::where('transaction_currency_id', $currency->id)->count(); - if ($budgetLimit > 0) { - Log::info(sprintf('Used in %d budget limits as currency, return true. ', $budgetLimit)); - - return 'budget_limits'; - } - - // is the default currency for the user or the system - $defaultCode = app('preferences')->getForUser($this->user, 'currencyPreference', config('firefly.default_currency', 'EUR'))->data; - if ($currency->code === $defaultCode) { - Log::info('Is the default currency of the user, return true.'); - - return 'current_default'; - } - - Log::debug('Currency is not used, return false.'); - - return null; - } - - /** - * @param TransactionCurrency $currency - * - * @return int - */ - public function countJournals(TransactionCurrency $currency): int - { - $count = $currency->transactions()->whereNull('deleted_at')->count() + $currency->transactionJournals()->whereNull('deleted_at')->count(); - - // also count foreign: - return $count + Transaction::where('foreign_currency_id', $currency->id)->count(); - } - - /** - * @return Collection - */ - public function getAll(): Collection - { - return TransactionCurrency::orderBy('code', 'ASC')->get(); - } - - /** - * @return Collection - */ - public function get(): Collection - { - return TransactionCurrency::where('enabled', true)->orderBy('code', 'ASC')->get(); - } - - /** - * @param TransactionCurrency $currency - * - * @return bool - */ - public function destroy(TransactionCurrency $currency): bool - { - /** @var UserRepositoryInterface $repository */ - $repository = app(UserRepositoryInterface::class); - if ($repository->hasRole($this->user, 'owner')) { - /** @var CurrencyDestroyService $service */ - $service = app(CurrencyDestroyService::class); - $service->destroy($currency); - } - - return true; - } - - /** - * Disables a currency - * - * @param TransactionCurrency $currency - */ - public function disable(TransactionCurrency $currency): void - { - $currency->enabled = false; - $currency->save(); - } - - /** - * @inheritDoc - */ - public function ensureMinimalEnabledCurrencies(): void - { - // if no currencies are enabled, enable the first one in the DB (usually the EUR) - if (0 === $this->get()->count()) { - /** @var TransactionCurrency $first */ - $first = $this->getAll()->first(); - if (null === $first) { - throw new FireflyException('No currencies found. You broke Firefly III'); - } - Log::channel('audit')->info(sprintf('Auto-enabled currency %s.', $first->code)); - $this->enable($first); - app('preferences')->set('currencyPreference', $first->code); - app('preferences')->mark(); - } - } - - /** - * @param TransactionCurrency $currency - * Enables a currency - */ - public function enable(TransactionCurrency $currency): void - { - $currency->enabled = true; - $currency->save(); - } - /** * Find by currency code, return NULL if unfound. - * Used in Import Currency! - * - * @param string $currencyCode - * - * @return TransactionCurrency|null - * @deprecated - */ - public function findByCodeNull(string $currencyCode): ?TransactionCurrency - { - return TransactionCurrency::where('code', $currencyCode)->first(); - } - - /** - * Find by currency name. - * - * @param string $currencyName - * - * @return TransactionCurrency|null - */ - public function findByName(string $currencyName): ?TransactionCurrency - { - return TransactionCurrency::whereName($currencyName)->first(); - } - - /** - * Find by currency name or return null. - * Used in Import Currency! - * - * @param string $currencyName - * - * @return TransactionCurrency|null - * @deprecated - */ - public function findByNameNull(string $currencyName): ?TransactionCurrency - { - return TransactionCurrency::whereName($currencyName)->first(); - } - - /** - * Find by currency symbol. - * - * @param string $currencySymbol - * - * @return TransactionCurrency|null - */ - public function findBySymbol(string $currencySymbol): ?TransactionCurrency - { - return TransactionCurrency::whereSymbol($currencySymbol)->first(); - } - - /** - * Find by currency symbol or return NULL - * Used in Import Currency! - * - * @param string $currencySymbol - * - * @return TransactionCurrency|null - * @deprecated - */ - public function findBySymbolNull(string $currencySymbol): ?TransactionCurrency - { - return TransactionCurrency::whereSymbol($currencySymbol)->first(); - } - - /** - * Find by object, ID or code. Returns user default or system default. - * - * @param int|null $currencyId - * @param string|null $currencyCode - * - * @return TransactionCurrency - * @throws FireflyException - * @throws JsonException - */ - public function findCurrency(?int $currencyId, ?string $currencyCode): TransactionCurrency - { - $result = $this->findCurrencyNull($currencyId, $currencyCode); - - if (null === $result) { - Log::debug('Grabbing default currency for this user...'); - $result = app('amount')->getDefaultCurrencyByUser($this->user); - } - - if (null === $result) { - Log::debug('Grabbing EUR as fallback.'); - $result = $this->findByCode('EUR'); - } - Log::debug(sprintf('Final result: %s', $result->code)); - if (false === $result->enabled) { - Log::debug(sprintf('Also enabled currency %s', $result->code)); - $this->enable($result); - } - - return $result; - } - - /** - * Find by object, ID or code. Returns NULL if nothing found. - * - * @param int|null $currencyId - * @param string|null $currencyCode - * - * @return TransactionCurrency|null - */ - public function findCurrencyNull(?int $currencyId, ?string $currencyCode): ?TransactionCurrency - { - Log::debug('Now in findCurrencyNull()'); - $result = $this->find((int)$currencyId); - if (null === $result) { - Log::debug(sprintf('Searching for currency with code %s...', $currencyCode)); - $result = $this->findByCode((string)$currencyCode); - } - if (null !== $result && false === $result->enabled) { - Log::debug(sprintf('Also enabled currency %s', $result->code)); - $this->enable($result); - } - - return $result; - } - - /** - * Find by ID, return NULL if not found. - * - * @param int $currencyId - * - * @return TransactionCurrency|null - */ - public function find(int $currencyId): ?TransactionCurrency - { - return TransactionCurrency::find($currencyId); - } - - /** - * Find by currency code, return NULL if unfound. - * - * @param string $currencyCode - * - * @return TransactionCurrency|null */ public function findByCode(string $currencyCode): ?TransactionCurrency { @@ -386,55 +46,35 @@ class CurrencyRepository implements CurrencyRepositoryInterface } /** - * @param array $ids - * - * @return Collection + * Returns the complete set of transactions but needs + * no user object. */ - public function getByIds(array $ids): Collection + public function getCompleteSet(): Collection { - return TransactionCurrency::orderBy('code', 'ASC')->whereIn('id', $ids)->get(); - } - - /** - * @param Preference $preference - * - * @return TransactionCurrency - */ - public function getCurrencyByPreference(Preference $preference): TransactionCurrency - { - $preferred = TransactionCurrency::where('code', $preference->data)->first(); - if (null === $preferred) { - $preferred = TransactionCurrency::first(); - } - - return $preferred; + return TransactionCurrency::orderBy('code', 'ASC')->get(); } /** * Get currency exchange rate. - * - * @param TransactionCurrency $fromCurrency - * @param TransactionCurrency $toCurrency - * @param Carbon $date - * - * @return CurrencyExchangeRate|null */ public function getExchangeRate(TransactionCurrency $fromCurrency, TransactionCurrency $toCurrency, Carbon $date): ?CurrencyExchangeRate { if ($fromCurrency->id === $toCurrency->id) { $rate = new CurrencyExchangeRate(); - $rate->rate = 1; + $rate->rate = '1'; $rate->id = 0; return $rate; } - /** @var CurrencyExchangeRate $rate */ + + /** @var null|CurrencyExchangeRate $rate */ $rate = $this->user->currencyExchangeRates() - ->where('from_currency_id', $fromCurrency->id) - ->where('to_currency_id', $toCurrency->id) - ->where('date', $date->format('Y-m-d'))->first(); + ->where('from_currency_id', $fromCurrency->id) + ->where('to_currency_id', $toCurrency->id) + ->where('date', $date->format('Y-m-d'))->first() + ; if (null !== $rate) { - Log::debug(sprintf('Found cached exchange rate in database for %s to %s on %s', $fromCurrency->code, $toCurrency->code, $date->format('Y-m-d'))); + app('log')->debug(sprintf('Found cached exchange rate in database for %s to %s on %s', $fromCurrency->code, $toCurrency->code, $date->format('Y-m-d'))); return $rate; } @@ -442,39 +82,8 @@ class CurrencyRepository implements CurrencyRepositoryInterface return null; } - /** - * @inheritDoc - */ - public function isFallbackCurrency(TransactionCurrency $currency): bool - { - return $currency->code === config('firefly.default_currency', 'EUR'); - } - - /** - * @param string $search - * @param int $limit - * - * @return Collection - */ - public function searchCurrency(string $search, int $limit): Collection - { - $query = TransactionCurrency::where('enabled', true); - if ('' !== $search) { - $query->where('name', 'LIKE', sprintf('%%%s%%', $search)); - } - - return $query->take($limit)->get(); - } - /** * TODO must be a factory - * - * @param TransactionCurrency $fromCurrency - * @param TransactionCurrency $toCurrency - * @param Carbon $date - * @param float $rate - * - * @return CurrencyExchangeRate */ public function setExchangeRate(TransactionCurrency $fromCurrency, TransactionCurrency $toCurrency, Carbon $date, float $rate): CurrencyExchangeRate { @@ -489,46 +98,10 @@ class CurrencyRepository implements CurrencyRepositoryInterface ); } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - - /** - * @param array $data - * - * @return TransactionCurrency - * @throws FireflyException - */ - public function store(array $data): TransactionCurrency - { - /** @var TransactionCurrencyFactory $factory */ - $factory = app(TransactionCurrencyFactory::class); - $result = $factory->create($data); - - if (null === $result) { - throw new FireflyException('400004: Could not store new currency.'); - } - - return $result; - } - - /** - * @param TransactionCurrency $currency - * @param array $data - * - * @return TransactionCurrency - */ - public function update(TransactionCurrency $currency, array $data): TransactionCurrency - { - /** @var CurrencyUpdateService $service */ - $service = app(CurrencyUpdateService::class); - - return $service->update($currency, $data); - } } diff --git a/app/Repositories/Currency/CurrencyRepositoryInterface.php b/app/Repositories/Currency/CurrencyRepositoryInterface.php index 3ef07f66f4..e714977abb 100644 --- a/app/Repositories/Currency/CurrencyRepositoryInterface.php +++ b/app/Repositories/Currency/CurrencyRepositoryInterface.php @@ -24,9 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Currency; use Carbon\Carbon; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\CurrencyExchangeRate; -use FireflyIII\Models\Preference; use FireflyIII\Models\TransactionCurrency; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; @@ -37,218 +35,34 @@ use Illuminate\Support\Collection; */ interface CurrencyRepositoryInterface { - /** - * @param TransactionCurrency $currency - * - * @return int - */ - public function countJournals(TransactionCurrency $currency): int; - - /** - * @param TransactionCurrency $currency - * - * @return bool - */ - public function currencyInUse(TransactionCurrency $currency): bool; - - /** - * Currency is in use where exactly. - * - * @param TransactionCurrency $currency - * - * @return string|null - */ - public function currencyInUseAt(TransactionCurrency $currency): ?string; - - /** - * @param TransactionCurrency $currency - * - * @return bool - */ - public function destroy(TransactionCurrency $currency): bool; - - /** - * Disables a currency - * - * @param TransactionCurrency $currency - */ - public function disable(TransactionCurrency $currency): void; - - /** - * Enables a currency - * - * @param TransactionCurrency $currency - */ - public function enable(TransactionCurrency $currency): void; - - /** - * @return void - */ - public function ensureMinimalEnabledCurrencies(): void; - - /** - * Find by ID, return NULL if not found. - * - * @param int $currencyId - * - * @return TransactionCurrency|null - */ - public function find(int $currencyId): ?TransactionCurrency; - /** * Find by currency code, return NULL if unfound. * - * @param string $currencyCode - * - * @return TransactionCurrency|null + * Used in the download exchange rates cron job. Does not require user object. */ public function findByCode(string $currencyCode): ?TransactionCurrency; /** - * Find by currency code, return NULL if unfound. + * Returns the complete set of transactions but needs + * no user object. * - * @param string $currencyCode - * - * @return TransactionCurrency|null + * Used by the download exchange rate cron job. */ - public function findByCodeNull(string $currencyCode): ?TransactionCurrency; - - /** - * Find by currency name. - * - * @param string $currencyName - * - * @return TransactionCurrency|null - */ - public function findByName(string $currencyName): ?TransactionCurrency; - - /** - * Find by currency name. - * - * @param string $currencyName - * - * @return TransactionCurrency|null - */ - public function findByNameNull(string $currencyName): ?TransactionCurrency; - - /** - * Find by currency symbol. - * - * @param string $currencySymbol - * - * @return TransactionCurrency|null - */ - public function findBySymbol(string $currencySymbol): ?TransactionCurrency; - - /** - * Find by currency symbol. - * - * @param string $currencySymbol - * - * @return TransactionCurrency|null - */ - public function findBySymbolNull(string $currencySymbol): ?TransactionCurrency; - - /** - * Find by object, ID or code. Returns user default or system default. - * - * @param int|null $currencyId - * @param string|null $currencyCode - * - * @return TransactionCurrency - */ - public function findCurrency(?int $currencyId, ?string $currencyCode): TransactionCurrency; - - /** - * Find by object, ID or code. Returns NULL if nothing found. - * - * @param int|null $currencyId - * @param string|null $currencyCode - * - * @return TransactionCurrency|null - */ - public function findCurrencyNull(?int $currencyId, ?string $currencyCode): ?TransactionCurrency; - - /** - * @return Collection - */ - public function get(): Collection; - - /** - * @return Collection - */ - public function getAll(): Collection; - - /** - * @param array $ids - * - * @return Collection - */ - public function getByIds(array $ids): Collection; - - /** - * @param Preference $preference - * - * @return TransactionCurrency - */ - public function getCurrencyByPreference(Preference $preference): TransactionCurrency; + public function getCompleteSet(): Collection; /** * Get currency exchange rate. * - * @param TransactionCurrency $fromCurrency - * @param TransactionCurrency $toCurrency - * @param Carbon $date - * - * @return CurrencyExchangeRate|null + * Used in the download exchange rate cron job. Needs the user object! */ public function getExchangeRate(TransactionCurrency $fromCurrency, TransactionCurrency $toCurrency, Carbon $date): ?CurrencyExchangeRate; /** - * @param TransactionCurrency $currency + * Set currency exchange rate. * - * @return bool - */ - public function isFallbackCurrency(TransactionCurrency $currency): bool; - - /** - * @param string $search - * @param int $limit - * - * @return Collection - */ - public function searchCurrency(string $search, int $limit): Collection; - - /** - * TODO must be a factory - * - * @param TransactionCurrency $fromCurrency - * @param TransactionCurrency $toCurrency - * @param Carbon $date - * @param float $rate - * - * @return CurrencyExchangeRate + * Used in download exchange rate cron job. Needs the user object! */ public function setExchangeRate(TransactionCurrency $fromCurrency, TransactionCurrency $toCurrency, Carbon $date, float $rate): CurrencyExchangeRate; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; - - /** - * @param array $data - * - * @return TransactionCurrency - * @throws FireflyException - */ - public function store(array $data): TransactionCurrency; - - /** - * @param TransactionCurrency $currency - * @param array $data - * - * @return TransactionCurrency - */ - public function update(TransactionCurrency $currency, array $data): TransactionCurrency; + public function setUser(null|Authenticatable|User $user): void; } diff --git a/app/Repositories/Journal/JournalAPIRepository.php b/app/Repositories/Journal/JournalAPIRepository.php index 6eb5f743a1..68daaf8f8a 100644 --- a/app/Repositories/Journal/JournalAPIRepository.php +++ b/app/Repositories/Journal/JournalAPIRepository.php @@ -30,7 +30,6 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use Storage; /** * Class JournalAPIRepository @@ -41,49 +40,39 @@ class JournalAPIRepository implements JournalAPIRepositoryInterface /** * Returns transaction by ID. Used to validate attachments. - * - * @param int $transactionId - * - * @return Transaction|null */ public function findTransaction(int $transactionId): ?Transaction { return Transaction::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.user_id', $this->user->id) - ->where('transactions.id', $transactionId) - ->first(['transactions.*']); + ->where('transaction_journals.user_id', $this->user->id) + ->where('transactions.id', $transactionId) + ->first(['transactions.*']) + ; } /** * TODO pretty sure method duplicated. * * Return all attachments for journal. - * - * @param TransactionJournal $journal - * - * @return Collection */ public function getAttachments(TransactionJournal $journal): Collection { - $set = $journal->attachments; + $set = $journal->attachments; - /** @var Storage $disk */ - $disk = Storage::disk('upload'); + /** @var \Storage $disk */ + $disk = \Storage::disk('upload'); return $set->each( static function (Attachment $attachment) use ($disk) { $notes = $attachment->notes()->first(); $attachment->file_exists = $disk->exists($attachment->fileName()); - $attachment->notes = $notes ? $notes->text : ''; // TODO should not set notes like this. + $attachment->notes_text = null !== $notes ? $notes->text : ''; // TODO should not set notes like this. return $attachment; } ); } - /** - * @inheritDoc - */ public function getJournalLinks(TransactionJournal $journal): Collection { $collection = $journal->destJournalLinks()->get(); @@ -93,16 +82,12 @@ class JournalAPIRepository implements JournalAPIRepositoryInterface /** * Get all piggy bank events for a journal. - * - * @param TransactionJournal $journal - * - * @return Collection */ public function getPiggyBankEvents(TransactionJournal $journal): Collection { $events = $journal->piggyBankEvents()->get(); $events->each( - function (PiggyBankEvent $event) { + static function (PiggyBankEvent $event): void { $event->piggyBank = $event->piggyBank()->withTrashed()->first(); } ); @@ -110,12 +95,9 @@ class JournalAPIRepository implements JournalAPIRepositoryInterface return $events; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } diff --git a/app/Repositories/Journal/JournalAPIRepositoryInterface.php b/app/Repositories/Journal/JournalAPIRepositoryInterface.php index 30a1f0b3fd..66dae77d0c 100644 --- a/app/Repositories/Journal/JournalAPIRepositoryInterface.php +++ b/app/Repositories/Journal/JournalAPIRepositoryInterface.php @@ -36,42 +36,23 @@ interface JournalAPIRepositoryInterface { /** * Returns transaction by ID. Used to validate attachments. - * - * @param int $transactionId - * - * @return Transaction|null */ public function findTransaction(int $transactionId): ?Transaction; /** * Return all attachments for journal. - * - * @param TransactionJournal $journal - * - * @return Collection */ public function getAttachments(TransactionJournal $journal): Collection; /** * Return all journal links for journal. - * - * @param TransactionJournal $journal - * - * @return Collection */ public function getJournalLinks(TransactionJournal $journal): Collection; /** * Get all piggy bank events for a journal. - * - * @param TransactionJournal $journal - * - * @return Collection */ public function getPiggyBankEvents(TransactionJournal $journal): Collection; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; } diff --git a/app/Repositories/Journal/JournalCLIRepository.php b/app/Repositories/Journal/JournalCLIRepository.php index 8f37b8f1fd..caa152c818 100644 --- a/app/Repositories/Journal/JournalCLIRepository.php +++ b/app/Repositories/Journal/JournalCLIRepository.php @@ -24,13 +24,11 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Journal; use Carbon\Carbon; -use DB; use FireflyIII\Models\TransactionJournal; use FireflyIII\Support\CacheProperties; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use stdClass; /** * Class JournalCLIRepository @@ -39,25 +37,18 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface { /** * Get all transaction journals with a specific type, regardless of user. - * - * @param array $types - * - * @return Collection */ public function getAllJournals(array $types): Collection { return TransactionJournal::leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') - ->whereIn('transaction_types.type', $types) - ->with(['user', 'transactionType', 'transactionCurrency', 'transactions', 'transactions.account']) - ->get(['transaction_journals.*']); + ->whereIn('transaction_types.type', $types) + ->with(['user', 'transactionType', 'transactionCurrency', 'transactions', 'transactions.account']) + ->get(['transaction_journals.*']) + ; } /** * Return the ID of the budget linked to the journal (if any) or the transactions (if any). - * - * @param TransactionJournal $journal - * - * @return int */ public function getJournalBudgetId(TransactionJournal $journal): int { @@ -75,10 +66,6 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface /** * Return the ID of the category linked to the journal (if any) or to the transactions (if any). - * - * @param TransactionJournal $journal - * - * @return int */ public function getJournalCategoryId(TransactionJournal $journal): int { @@ -96,8 +83,6 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface /** * Return all journals without a group, used in an upgrade routine. - * - * @return array */ public function getJournalsWithoutGroup(): array { @@ -106,11 +91,6 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface /** * Return Carbon value of a meta field (or NULL). - * - * @param TransactionJournal $journal - * @param string $field - * - * @return null|Carbon */ public function getMetaDate(TransactionJournal $journal, string $field): ?Carbon { @@ -120,7 +100,6 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface $cache->addProperty($field); if ($cache->has()) { - $result = null; return new Carbon($cache->get()); } @@ -136,15 +115,10 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface /** * Return value of a meta field (or NULL) as a string. - * - * @param TransactionJournal $journal - * @param string $field - * - * @return null|string */ public function getMetaField(TransactionJournal $journal, string $field): ?string { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty('journal-meta-updated'); $cache->addProperty($journal->id); $cache->addProperty($field); @@ -153,12 +127,12 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface return $cache->get(); } - $entry = $journal->transactionJournalMeta()->where('name', $field)->first(); + $entry = $journal->transactionJournalMeta()->where('name', $field)->first(); if (null === $entry) { return null; } - $value = $entry->data; + $value = $entry->data; if (is_array($value)) { $return = implode(',', $value); @@ -176,10 +150,6 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface /** * Return text of a note attached to journal, or NULL - * - * @param TransactionJournal $journal - * - * @return string|null */ public function getNoteText(TransactionJournal $journal): ?string { @@ -194,16 +164,16 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface /** * Returns all journals with more than 2 transactions. Should only return empty collections * in Firefly III > v4.8,0. - * - * @return Collection */ public function getSplitJournals(): Collection { $query = TransactionJournal::leftJoin('transactions', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->groupBy('transaction_journals.id'); - $result = $query->get(['transaction_journals.id as id', DB::raw('count(transactions.id) as transaction_count')]); + ->groupBy('transaction_journals.id') + ; + $result = $query->get(['transaction_journals.id as id', \DB::raw('count(transactions.id) as transaction_count')]); // @phpstan-ignore-line $journalIds = []; - /** @var stdClass $row */ + + /** @var \stdClass $row */ foreach ($result as $row) { if ((int)$row->transaction_count > 2) { $journalIds[] = (int)$row->id; @@ -212,25 +182,19 @@ class JournalCLIRepository implements JournalCLIRepositoryInterface $journalIds = array_unique($journalIds); return TransactionJournal::with(['transactions']) - ->whereIn('id', $journalIds)->get(); + ->whereIn('id', $journalIds)->get() + ; } /** * Return all tags as strings in an array. - * - * @param TransactionJournal $journal - * - * @return array */ public function getTags(TransactionJournal $journal): array { return $journal->tags()->get()->pluck('tag')->toArray(); } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { // empty } diff --git a/app/Repositories/Journal/JournalCLIRepositoryInterface.php b/app/Repositories/Journal/JournalCLIRepositoryInterface.php index ca43bb908e..c0dc10fd54 100644 --- a/app/Repositories/Journal/JournalCLIRepositoryInterface.php +++ b/app/Repositories/Journal/JournalCLIRepositoryInterface.php @@ -36,86 +36,49 @@ interface JournalCLIRepositoryInterface { /** * Get all transaction journals with a specific type, regardless of user. - * - * @param array $types - * - * @return Collection */ public function getAllJournals(array $types): Collection; /** * Return the ID of the budget linked to the journal (if any) or the transactions (if any). - * - * @param TransactionJournal $journal - * - * @return int */ public function getJournalBudgetId(TransactionJournal $journal): int; /** * Return the ID of the category linked to the journal (if any) or to the transactions (if any). - * - * @param TransactionJournal $journal - * - * @return int */ public function getJournalCategoryId(TransactionJournal $journal): int; /** * Return all journals without a group, used in an upgrade routine. - * - * @return array */ public function getJournalsWithoutGroup(): array; /** * Return Carbon value of a meta field (or NULL). - * - * @param TransactionJournal $journal - * @param string $field - * - * @return null|Carbon */ public function getMetaDate(TransactionJournal $journal, string $field): ?Carbon; /** * Return value of a meta field (or NULL). - * - * @param TransactionJournal $journal - * @param string $field - * - * @return null|string */ public function getMetaField(TransactionJournal $journal, string $field): ?string; /** * Return text of a note attached to journal, or NULL - * - * @param TransactionJournal $journal - * - * @return string|null */ public function getNoteText(TransactionJournal $journal): ?string; /** * Returns all journals with more than 2 transactions. Should only return empty collections * in Firefly III > v4.8,0. - * - * @return Collection */ public function getSplitJournals(): Collection; /** * Return all tags as strings in an array. - * - * @param TransactionJournal $journal - * - * @return array */ public function getTags(TransactionJournal $journal): array; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; } diff --git a/app/Repositories/Journal/JournalRepository.php b/app/Repositories/Journal/JournalRepository.php index 859c8f953e..ea80eed79b 100644 --- a/app/Repositories/Journal/JournalRepository.php +++ b/app/Repositories/Journal/JournalRepository.php @@ -45,13 +45,8 @@ use Illuminate\Support\Collection; */ class JournalRepository implements JournalRepositoryInterface { - /** @var User */ - private $user; + private User $user; - /** - * @param TransactionGroup $transactionGroup - * - */ public function destroyGroup(TransactionGroup $transactionGroup): void { /** @var TransactionGroupDestroyService $service */ @@ -59,10 +54,6 @@ class JournalRepository implements JournalRepositoryInterface $service->destroy($transactionGroup); } - /** - * @param TransactionJournal $journal - * - */ public function destroyJournal(TransactionJournal $journal): void { /** @var JournalDestroyService $service */ @@ -70,26 +61,22 @@ class JournalRepository implements JournalRepositoryInterface $service->destroy($journal); } - /** - * @inheritDoc - */ public function findByType(array $types): Collection { return $this->user ->transactionJournals() ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') ->whereIn('transaction_types.type', $types) - ->get(['transaction_journals.*']); + ->get(['transaction_journals.*']) + ; } /** * Get users first transaction journal or NULL. - * - * @return TransactionJournal|null */ public function firstNull(): ?TransactionJournal { - /** @var TransactionJournal $entry */ + /** @var null|TransactionJournal $entry */ $entry = $this->user->transactionJournals()->orderBy('date', 'ASC')->first(['transaction_journals.*']); $result = null; if (null !== $entry) { @@ -99,12 +86,9 @@ class JournalRepository implements JournalRepositoryInterface return $result; } - /** - * @inheritDoc - */ public function getDestinationAccount(TransactionJournal $journal): Account { - /** @var Transaction $transaction */ + /** @var null|Transaction $transaction */ $transaction = $journal->transactions()->with('account')->where('amount', '>', 0)->first(); if (null === $transaction) { throw new FireflyException(sprintf('Your administration is broken. Transaction journal #%d has no destination transaction.', $journal->id)); @@ -115,14 +99,10 @@ class JournalRepository implements JournalRepositoryInterface /** * Return total amount of journal. Is always positive. - * - * @param TransactionJournal $journal - * - * @return string */ public function getJournalTotal(TransactionJournal $journal): string { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($journal->id); $cache->addProperty('amount-positive'); if ($cache->has()) { @@ -137,12 +117,9 @@ class JournalRepository implements JournalRepositoryInterface return $amount; } - /** - * @return TransactionJournal|null - */ public function getLast(): ?TransactionJournal { - /** @var TransactionJournal $entry */ + /** @var null|TransactionJournal $entry */ $entry = $this->user->transactionJournals()->orderBy('date', 'DESC')->first(['transaction_journals.*']); $result = null; if (null !== $entry) { @@ -152,29 +129,16 @@ class JournalRepository implements JournalRepositoryInterface return $result; } - /** - * @param TransactionJournalLink $link - * - * @return string - */ public function getLinkNoteText(TransactionJournalLink $link): string { - /** @var Note $note */ + /** @var null|Note $note */ $note = $link->notes()->first(); - if (null !== $note) { - return $note->text ?? ''; - } - return ''; + return (string)$note?->text; } /** * Return Carbon value of a meta field (or NULL). - * - * @param int $journalId - * @param string $field - * - * @return null|Carbon */ public function getMetaDateById(int $journalId, string $field): ?Carbon { @@ -187,7 +151,8 @@ class JournalRepository implements JournalRepositoryInterface return new Carbon($cache->get()); } $entry = TransactionJournalMeta::where('transaction_journal_id', $journalId) - ->where('name', $field)->first(); + ->where('name', $field)->first() + ; if (null === $entry) { return null; } @@ -197,12 +162,9 @@ class JournalRepository implements JournalRepositoryInterface return $value; } - /** - * @inheritDoc - */ public function getSourceAccount(TransactionJournal $journal): Account { - /** @var Transaction $transaction */ + /** @var null|Transaction $transaction */ $transaction = $journal->transactions()->with('account')->where('amount', '<', 0)->first(); if (null === $transaction) { throw new FireflyException(sprintf('Your administration is broken. Transaction journal #%d has no source transaction.', $journal->id)); @@ -211,22 +173,15 @@ class JournalRepository implements JournalRepositoryInterface return $transaction->account; } - /** - * @param int $journalId - */ public function reconcileById(int $journalId): void { - /** @var TransactionJournal $journal */ + /** @var null|TransactionJournal $journal */ $journal = $this->user->transactionJournals()->find($journalId); $journal?->transactions()->update(['reconciled' => true]); } /** * Find a specific journal. - * - * @param int $journalId - * - * @return TransactionJournal|null */ public function find(int $journalId): ?TransactionJournal { @@ -235,16 +190,12 @@ class JournalRepository implements JournalRepositoryInterface /** * Search in journal descriptions. - * - * @param string $search - * @param int $limit - * - * @return Collection */ public function searchJournalDescriptions(string $search, int $limit): Collection { $query = $this->user->transactionJournals() - ->orderBy('date', 'DESC'); + ->orderBy('date', 'DESC') + ; if ('' !== $search) { $query->where('description', 'LIKE', sprintf('%%%s%%', $search)); } @@ -252,23 +203,22 @@ class JournalRepository implements JournalRepositoryInterface return $query->take($limit)->get(); } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } + public function unreconcileById(int $journalId): void + { + /** @var null|TransactionJournal $journal */ + $journal = $this->user->transactionJournals()->find($journalId); + $journal?->transactions()->update(['reconciled' => false]); + } + /** * Update budget for a journal. - * - * @param TransactionJournal $journal - * @param int $budgetId - * - * @return TransactionJournal */ public function updateBudget(TransactionJournal $journal, int $budgetId): TransactionJournal { @@ -289,11 +239,6 @@ class JournalRepository implements JournalRepositoryInterface /** * Update category for a journal. - * - * @param TransactionJournal $journal - * @param string $category - * - * @return TransactionJournal */ public function updateCategory(TransactionJournal $journal, string $category): TransactionJournal { @@ -313,11 +258,6 @@ class JournalRepository implements JournalRepositoryInterface /** * Update tag(s) for a journal. - * - * @param TransactionJournal $journal - * @param array $tags - * - * @return TransactionJournal */ public function updateTags(TransactionJournal $journal, array $tags): TransactionJournal { diff --git a/app/Repositories/Journal/JournalRepositoryInterface.php b/app/Repositories/Journal/JournalRepositoryInterface.php index 8133d5d02f..055af9b5f5 100644 --- a/app/Repositories/Journal/JournalRepositoryInterface.php +++ b/app/Repositories/Journal/JournalRepositoryInterface.php @@ -40,141 +40,83 @@ interface JournalRepositoryInterface { /** * Deletes a transaction group. - * - * @param TransactionGroup $transactionGroup */ public function destroyGroup(TransactionGroup $transactionGroup): void; /** * Deletes a journal. - * - * @param TransactionJournal $journal */ public function destroyJournal(TransactionJournal $journal): void; /** * Find a specific journal. - * - * @param int $journalId - * - * @return TransactionJournal|null */ public function find(int $journalId): ?TransactionJournal; - /** - * @param array $types - * - * @return Collection - */ public function findByType(array $types): Collection; /** * Get users very first transaction journal. - * - * @return TransactionJournal|null */ public function firstNull(): ?TransactionJournal; /** * Returns the destination account of the journal. * - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ public function getDestinationAccount(TransactionJournal $journal): Account; /** * Return total amount of journal. Is always positive. - * - * @param TransactionJournal $journal - * - * @return string */ public function getJournalTotal(TransactionJournal $journal): string; - /** - * @return TransactionJournal|null - */ public function getLast(): ?TransactionJournal; - /** - * @param TransactionJournalLink $link - * - * @return string - */ public function getLinkNoteText(TransactionJournalLink $link): string; /** * Return Carbon value of a meta field (or NULL). - * - * @param int $journalId - * @param string $field - * - * @return null|Carbon */ public function getMetaDateById(int $journalId, string $field): ?Carbon; /** * Returns the source account of the journal. * - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ public function getSourceAccount(TransactionJournal $journal): Account; /** * TODO Maybe to account repository? Do this wen reconcile is API only. - * - * @param int $journalId */ public function reconcileById(int $journalId): void; /** * Search in journal descriptions. - * - * @param string $search - * @param int $limit - * - * @return Collection */ public function searchJournalDescriptions(string $search, int $limit): Collection; + public function setUser(null|Authenticatable|User $user): void; + /** - * @param User|Authenticatable|null $user + * TODO Maybe to account repository? Do this wen reconcile is API only. */ - public function setUser(User | Authenticatable | null $user): void; + public function unreconcileById(int $journalId): void; /** * Update budget for a journal. - * - * @param TransactionJournal $journal - * @param int $budgetId - * - * @return TransactionJournal */ public function updateBudget(TransactionJournal $journal, int $budgetId): TransactionJournal; /** * Update category for a journal. - * - * @param TransactionJournal $journal - * @param string $category - * - * @return TransactionJournal */ public function updateCategory(TransactionJournal $journal, string $category): TransactionJournal; /** * Update tag(s) for a journal. - * - * @param TransactionJournal $journal - * @param array $tags - * - * @return TransactionJournal */ public function updateTags(TransactionJournal $journal, array $tags): TransactionJournal; } diff --git a/app/Repositories/LinkType/LinkTypeRepository.php b/app/Repositories/LinkType/LinkTypeRepository.php index d6c841ff02..7a438ee7fd 100644 --- a/app/Repositories/LinkType/LinkTypeRepository.php +++ b/app/Repositories/LinkType/LinkTypeRepository.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\LinkType; -use Exception; use FireflyIII\Events\DestroyedTransactionLink; use FireflyIII\Models\LinkType; use FireflyIII\Models\Note; @@ -32,32 +31,19 @@ use FireflyIII\Models\TransactionJournalLink; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class LinkTypeRepository. - * */ class LinkTypeRepository implements LinkTypeRepositoryInterface { private User $user; - /** - * @param LinkType $linkType - * - * @return int - */ public function countJournals(LinkType $linkType): int { return $linkType->transactionJournalLinks()->count(); } - /** - * @param LinkType $linkType - * @param LinkType|null $moveTo - * - * @return bool - */ public function destroy(LinkType $linkType, LinkType $moveTo = null): bool { if (null !== $moveTo) { @@ -68,12 +54,6 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface return true; } - /** - * @param LinkType $linkType - * @param array $data - * - * @return LinkType - */ public function update(LinkType $linkType, array $data): LinkType { if (array_key_exists('name', $data) && '' !== (string)$data['name']) { @@ -91,10 +71,7 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface } /** - * @param TransactionJournalLink $link - * - * @return bool - * @throws Exception + * @throws \Exception */ public function destroyLink(TransactionJournalLink $link): bool { @@ -106,15 +83,10 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface /** * Check if link exists between journals. - * - * @param TransactionJournal $one - * @param TransactionJournal $two - * - * @return bool */ public function findLink(TransactionJournal $one, TransactionJournal $two): bool { - Log::debug(sprintf('Now in findLink(%d, %d)', $one->id, $two->id)); + app('log')->debug(sprintf('Now in findLink(%d, %d)', $one->id, $two->id)); $count = TransactionJournalLink::whereDestinationId($one->id)->whereSourceId($two->id)->count(); $opposingCount = TransactionJournalLink::whereDestinationId($two->id)->whereSourceId($one->id)->count(); @@ -123,10 +95,6 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface /** * Return array of all journal ID's for this type of link. - * - * @param LinkType $linkType - * - * @return array */ public function getJournalIds(LinkType $linkType): array { @@ -137,9 +105,6 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface return array_unique(array_merge($sources, $destinations)); } - /** - * @return Collection - */ public function get(): Collection { return LinkType::orderBy('name', 'ASC')->get(); @@ -147,20 +112,17 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface /** * Returns all the journal links (of a specific type). - * - * @param LinkType|null $linkType - * - * @return Collection */ public function getJournalLinks(LinkType $linkType = null): Collection { $query = TransactionJournalLink::with(['source', 'destination']) - ->leftJoin('transaction_journals as source_journals', 'journal_links.source_id', '=', 'source_journals.id') - ->leftJoin('transaction_journals as dest_journals', 'journal_links.destination_id', '=', 'dest_journals.id') - ->where('source_journals.user_id', $this->user->id) - ->where('dest_journals.user_id', $this->user->id) - ->whereNull('source_journals.deleted_at') - ->whereNull('dest_journals.deleted_at'); + ->leftJoin('transaction_journals as source_journals', 'journal_links.source_id', '=', 'source_journals.id') + ->leftJoin('transaction_journals as dest_journals', 'journal_links.destination_id', '=', 'dest_journals.id') + ->where('source_journals.user_id', $this->user->id) + ->where('dest_journals.user_id', $this->user->id) + ->whereNull('source_journals.deleted_at') + ->whereNull('dest_journals.deleted_at') + ; if (null !== $linkType) { $query->where('journal_links.link_type_id', $linkType->id); @@ -169,12 +131,6 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface return $query->get(['journal_links.*']); } - /** - * @param TransactionJournal $one - * @param TransactionJournal $two - * - * @return TransactionJournalLink|null - */ public function getLink(TransactionJournal $one, TransactionJournal $two): ?TransactionJournalLink { $left = TransactionJournalLink::whereDestinationId($one->id)->whereSourceId($two->id)->first(); @@ -187,10 +143,6 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface /** * Return list of existing connections. - * - * @param TransactionJournal $journal - * - * @return Collection */ public function getLinks(TransactionJournal $journal): Collection { @@ -199,27 +151,19 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface $merged = $outward->merge($inward); return $merged->filter( - function (TransactionJournalLink $link) { + static function (TransactionJournalLink $link) { return null !== $link->source && null !== $link->destination; } ); } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @param array $data - * - * @return LinkType - */ public function store(array $data): LinkType { $linkType = new LinkType(); @@ -235,12 +179,7 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface /** * Store link between two journals. * - * @param array $information - * @param TransactionJournal $inward - * @param TransactionJournal $outward - * - * @return TransactionJournalLink|null - * @throws Exception + * @throws \Exception */ public function storeLink(array $information, TransactionJournal $inward, TransactionJournal $outward): ?TransactionJournalLink { @@ -260,16 +199,16 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface return $existing; } - $link = new TransactionJournalLink(); + $link = new TransactionJournalLink(); $link->linkType()->associate($linkType); if ('inward' === $information['direction']) { - Log::debug(sprintf('Link type is inwards ("%s"), so %d is source and %d is destination.', $linkType->inward, $inward->id, $outward->id)); + app('log')->debug(sprintf('Link type is inwards ("%s"), so %d is source and %d is destination.', $linkType->inward, $inward->id, $outward->id)); $link->source()->associate($inward); $link->destination()->associate($outward); } if ('outward' === $information['direction']) { - Log::debug(sprintf('Link type is inwards ("%s"), so %d is source and %d is destination.', $linkType->outward, $outward->id, $inward->id)); + app('log')->debug(sprintf('Link type is inwards ("%s"), so %d is source and %d is destination.', $linkType->outward, $outward->id, $inward->id)); $link->source()->associate($outward); $link->destination()->associate($inward); } @@ -281,21 +220,11 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface return $link; } - /** - * @param int $linkTypeId - * - * @return LinkType|null - */ public function find(int $linkTypeId): ?LinkType { return LinkType::find($linkTypeId); } - /** - * @param string|null $name - * - * @return LinkType|null - */ public function findByName(string $name = null): ?LinkType { if (null === $name) { @@ -307,25 +236,17 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface /** * See if such a link already exists (and get it). - * - * @param LinkType $linkType - * @param TransactionJournal $inward - * @param TransactionJournal $outward - * - * @return TransactionJournalLink|null */ public function findSpecificLink(LinkType $linkType, TransactionJournal $inward, TransactionJournal $outward): ?TransactionJournalLink { return TransactionJournalLink::where('link_type_id', $linkType->id) - ->where('source_id', $inward->id) - ->where('destination_id', $outward->id)->first(); + ->where('source_id', $inward->id) + ->where('destination_id', $outward->id)->first() + ; } /** - * @param TransactionJournalLink $link - * @param string $text - * - * @throws Exception + * @throws \Exception */ private function setNoteText(TransactionJournalLink $link, string $text): void { @@ -343,12 +264,9 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface $dbNote?->delete(); } - /** - * @inheritDoc - */ public function switchLinkById(int $linkId): bool { - /** @var TransactionJournalLink $link */ + /** @var null|TransactionJournalLink $link */ $link = TransactionJournalLink::find($linkId); if (null !== $link && $link->source->user->id === $this->user->id) { $this->switchLink($link); @@ -357,11 +275,6 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface return true; } - /** - * @param TransactionJournalLink $link - * - * @return bool - */ public function switchLink(TransactionJournalLink $link): bool { $source = $link->source_id; @@ -375,16 +288,12 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface /** * Update an existing transaction journal link. * - * @param TransactionJournalLink $journalLink - * @param array $data - * - * @return TransactionJournalLink - * @throws Exception + * @throws \Exception */ public function updateLink(TransactionJournalLink $journalLink, array $data): TransactionJournalLink { - $journalLink->source_id = $data['inward_id'] ?: $journalLink->source_id; - $journalLink->destination_id = $data['outward_id'] ?: $journalLink->destination_id; + $journalLink->source_id = null === $data['inward_id'] ? $journalLink->source_id : $data['inward_id']; + $journalLink->destination_id = null === $data['outward_id'] ? $journalLink->destination_id : $data['outward_id']; $journalLink->save(); if (array_key_exists('link_type_name', $data)) { $linkType = LinkType::whereName($data['link_type_name'])->first(); @@ -395,7 +304,7 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface $journalLink->refresh(); } - $journalLink->link_type_id = $data['link_type_id'] ?: $journalLink->link_type_id; + $journalLink->link_type_id = null === $data['link_type_id'] ? $journalLink->link_type_id : $data['link_type_id']; $journalLink->save(); if (array_key_exists('notes', $data) && null !== $data['notes']) { $this->setNoteText($journalLink, $data['notes']); diff --git a/app/Repositories/LinkType/LinkTypeRepositoryInterface.php b/app/Repositories/LinkType/LinkTypeRepositoryInterface.php index b2941331f8..a8741f607c 100644 --- a/app/Repositories/LinkType/LinkTypeRepositoryInterface.php +++ b/app/Repositories/LinkType/LinkTypeRepositoryInterface.php @@ -35,147 +35,60 @@ use Illuminate\Support\Collection; */ interface LinkTypeRepositoryInterface { - /** - * @param LinkType $linkType - * - * @return int - */ public function countJournals(LinkType $linkType): int; - /** - * @param LinkType $linkType - * @param LinkType|null $moveTo - * - * @return bool - */ public function destroy(LinkType $linkType, LinkType $moveTo = null): bool; - /** - * @param TransactionJournalLink $link - * - * @return bool - */ public function destroyLink(TransactionJournalLink $link): bool; - /** - * @param int $linkTypeId - * - * @return LinkType|null - */ public function find(int $linkTypeId): ?LinkType; /** * Find link type by name. - * - * @param string|null $name - * - * @return LinkType|null */ public function findByName(string $name = null): ?LinkType; /** * Check if link exists between journals. - * - * @param TransactionJournal $one - * @param TransactionJournal $two - * - * @return bool */ public function findLink(TransactionJournal $one, TransactionJournal $two): bool; /** * See if such a link already exists (and get it). - * - * @param LinkType $linkType - * @param TransactionJournal $inward - * @param TransactionJournal $outward - * - * @return TransactionJournalLink|null */ public function findSpecificLink(LinkType $linkType, TransactionJournal $inward, TransactionJournal $outward): ?TransactionJournalLink; - /** - * @return Collection - */ public function get(): Collection; /** * Return array of all journal ID's for this type of link. - * - * @param LinkType $linkType - * - * @return array */ public function getJournalIds(LinkType $linkType): array; - /** - * @param LinkType|null $linkType - * - * @return Collection - */ public function getJournalLinks(LinkType $linkType = null): Collection; /** * Return list of existing connections. - * - * @param TransactionJournal $journal - * - * @return Collection */ public function getLinks(TransactionJournal $journal): Collection; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; - /** - * @param array $data - * - * @return LinkType - */ public function store(array $data): LinkType; /** * Store link between two journals. - * - * @param array $information - * @param TransactionJournal $inward - * @param TransactionJournal $outward - * - * @return TransactionJournalLink|null */ public function storeLink(array $information, TransactionJournal $inward, TransactionJournal $outward): ?TransactionJournalLink; - /** - * @param TransactionJournalLink $link - * - * @return bool - */ public function switchLink(TransactionJournalLink $link): bool; - /** - * @param int $linkId - * - * @return bool - */ public function switchLinkById(int $linkId): bool; - /** - * @param LinkType $linkType - * @param array $data - * - * @return LinkType - */ public function update(LinkType $linkType, array $data): LinkType; /** * Update an existing transaction journal link. - * - * @param TransactionJournalLink $journalLink - * @param array $data - * - * @return TransactionJournalLink */ public function updateLink(TransactionJournalLink $journalLink, array $data): TransactionJournalLink; } diff --git a/app/Repositories/ObjectGroup/CreatesObjectGroups.php b/app/Repositories/ObjectGroup/CreatesObjectGroups.php index 5258479fbf..dc843cc2c2 100644 --- a/app/Repositories/ObjectGroup/CreatesObjectGroups.php +++ b/app/Repositories/ObjectGroup/CreatesObjectGroups.php @@ -31,21 +31,11 @@ use FireflyIII\Models\ObjectGroup; */ trait CreatesObjectGroups { - /** - * @param int $groupId - * - * @return ObjectGroup|null - */ protected function findObjectGroupById(int $groupId): ?ObjectGroup { return $this->user->objectGroups()->where('id', $groupId)->first(); } - /** - * @param string $title - * - * @return ObjectGroup|null - */ protected function findOrCreateObjectGroup(string $title): ?ObjectGroup { $title = substr($title, 0, 255); @@ -64,29 +54,16 @@ trait CreatesObjectGroups return $this->findObjectGroup($title); } - /** - * @return int - */ protected function getObjectGroupMaxOrder(): int { return (int)$this->user->objectGroups()->max('order'); } - /** - * @param string $title - * - * @return bool - */ protected function hasObjectGroup(string $title): bool { return 1 === $this->user->objectGroups()->where('title', $title)->count(); } - /** - * @param string $title - * - * @return null|ObjectGroup - */ protected function findObjectGroup(string $title): ?ObjectGroup { return $this->user->objectGroups()->where('title', $title)->first(); diff --git a/app/Repositories/ObjectGroup/ObjectGroupRepository.php b/app/Repositories/ObjectGroup/ObjectGroupRepository.php index a82c9b7f9d..2d60e7eace 100644 --- a/app/Repositories/ObjectGroup/ObjectGroupRepository.php +++ b/app/Repositories/ObjectGroup/ObjectGroupRepository.php @@ -24,13 +24,11 @@ declare(strict_types=1); namespace FireflyIII\Repositories\ObjectGroup; -use DB; use FireflyIII\Models\ObjectGroup; use FireflyIII\Models\PiggyBank; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class ObjectGroupRepository @@ -39,12 +37,10 @@ class ObjectGroupRepository implements ObjectGroupRepositoryInterface { private User $user; - /** - * @inheritDoc - */ public function deleteAll(): void { $all = $this->get(); + /** @var ObjectGroup $group */ foreach ($all as $group) { $group->piggyBanks()->sync([]); @@ -53,38 +49,32 @@ class ObjectGroupRepository implements ObjectGroupRepositoryInterface } } - /** - * @inheritDoc - */ public function get(): Collection { return $this->user->objectGroups() - ->with(['piggyBanks', 'bills']) - ->orderBy('order', 'ASC') - ->orderBy('title', 'ASC')->get(); + ->with(['piggyBanks', 'bills']) + ->orderBy('order', 'ASC') + ->orderBy('title', 'ASC')->get() + ; } - /** - * @inheritDoc - */ public function deleteEmpty(): void { $all = $this->get(); + /** @var ObjectGroup $group */ foreach ($all as $group) { - $count = DB::table('object_groupables')->where('object_groupables.object_group_id', $group->id)->count(); + $count = \DB::table('object_groupables')->where('object_groupables.object_group_id', $group->id)->count(); if (0 === $count) { $group->delete(); } } } - /** - * @inheritDoc - */ public function destroy(ObjectGroup $objectGroup): void { $list = $objectGroup->piggyBanks; + /** @var PiggyBank $piggy */ foreach ($list as $piggy) { $piggy->objectGroups()->sync([]); @@ -93,49 +83,35 @@ class ObjectGroupRepository implements ObjectGroupRepositoryInterface $objectGroup->delete(); } - /** - * @inheritDoc - */ public function getBills(ObjectGroup $objectGroup): Collection { return $objectGroup->bills; } - /** - * @inheritDoc - */ public function getPiggyBanks(ObjectGroup $objectGroup): Collection { return $objectGroup->piggyBanks; } - /** - * @inheritDoc - */ public function resetOrder(): void { - Log::debug('Now in resetOrder'); + app('log')->debug('Now in resetOrder'); $list = $this->get(); $index = 1; + /** @var ObjectGroup $objectGroup */ foreach ($list as $objectGroup) { - if ($index !== (int)$objectGroup->order) { - Log::debug( + if ($index !== $objectGroup->order) { + app('log')->debug( sprintf('objectGroup #%d ("%s"): order should %d be but is %d.', $objectGroup->id, $objectGroup->title, $index, $objectGroup->order) ); $objectGroup->order = $index; $objectGroup->save(); } - $index++; + ++$index; } } - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function search(string $query, int $limit): Collection { $dbQuery = $this->user->objectGroups()->orderBy('order', 'ASC')->orderBy('title', 'ASC'); @@ -151,19 +127,13 @@ class ObjectGroupRepository implements ObjectGroupRepositoryInterface return $dbQuery->take($limit)->get(['object_groups.*']); } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @inheritDoc - */ public function update(ObjectGroup $objectGroup, array $data): ObjectGroup { if (array_key_exists('title', $data)) { @@ -179,31 +149,30 @@ class ObjectGroupRepository implements ObjectGroupRepositoryInterface return $objectGroup; } - /** - * @inheritDoc - */ public function setOrder(ObjectGroup $objectGroup, int $newOrder): ObjectGroup { - $oldOrder = (int)$objectGroup->order; + $oldOrder = $objectGroup->order; if ($newOrder > $oldOrder) { $this->user->objectGroups()->where('object_groups.order', '<=', $newOrder)->where('object_groups.order', '>', $oldOrder) - ->where('object_groups.id', '!=', $objectGroup->id) - ->decrement('object_groups.order'); + ->where('object_groups.id', '!=', $objectGroup->id) + ->decrement('object_groups.order') + ; $objectGroup->order = $newOrder; $objectGroup->save(); } if ($newOrder < $oldOrder) { $this->user->objectGroups()->where('object_groups.order', '>=', $newOrder)->where('object_groups.order', '<', $oldOrder) - ->where('object_groups.id', '!=', $objectGroup->id) - ->increment('object_groups.order'); + ->where('object_groups.id', '!=', $objectGroup->id) + ->increment('object_groups.order') + ; $objectGroup->order = $newOrder; $objectGroup->save(); } - Log::debug(sprintf('Objectgroup #%d order is now %d', $objectGroup->id, $newOrder)); + app('log')->debug(sprintf('Objectgroup #%d order is now %d', $objectGroup->id, $newOrder)); return $objectGroup; } diff --git a/app/Repositories/ObjectGroup/ObjectGroupRepositoryInterface.php b/app/Repositories/ObjectGroup/ObjectGroupRepositoryInterface.php index 6f0c2382c0..0232de5ef6 100644 --- a/app/Repositories/ObjectGroup/ObjectGroupRepositoryInterface.php +++ b/app/Repositories/ObjectGroup/ObjectGroupRepositoryInterface.php @@ -44,28 +44,12 @@ interface ObjectGroupRepositoryInterface */ public function deleteEmpty(): void; - /** - * @param ObjectGroup $objectGroup - */ public function destroy(ObjectGroup $objectGroup): void; - /** - * @return Collection - */ public function get(): Collection; - /** - * @param ObjectGroup $objectGroup - * - * @return Collection - */ public function getBills(ObjectGroup $objectGroup): Collection; - /** - * @param ObjectGroup $objectGroup - * - * @return Collection - */ public function getPiggyBanks(ObjectGroup $objectGroup): Collection; /** @@ -73,32 +57,11 @@ interface ObjectGroupRepositoryInterface */ public function resetOrder(): void; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function search(string $query, int $limit): Collection; - /** - * @param ObjectGroup $objectGroup - * @param int $newOrder - * - * @return ObjectGroup - */ public function setOrder(ObjectGroup $objectGroup, int $newOrder): ObjectGroup; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; - /** - * @param ObjectGroup $objectGroup - * @param array $data - * - * @return ObjectGroup - */ public function update(ObjectGroup $objectGroup, array $data): ObjectGroup; } diff --git a/app/Repositories/ObjectGroup/OrganisesObjectGroups.php b/app/Repositories/ObjectGroup/OrganisesObjectGroups.php index 1b1e53aaa7..4f23af15a5 100644 --- a/app/Repositories/ObjectGroup/OrganisesObjectGroups.php +++ b/app/Repositories/ObjectGroup/OrganisesObjectGroups.php @@ -29,27 +29,18 @@ namespace FireflyIII\Repositories\ObjectGroup; */ trait OrganisesObjectGroups { - /** - * - */ protected function cleanupObjectGroups(): void { $this->deleteEmptyObjectGroups(); $this->sortObjectGroups(); } - /** - * - */ private function deleteEmptyObjectGroups(): void { $repository = app(ObjectGroupRepositoryInterface::class); $repository->deleteEmpty(); } - /** - * - */ private function sortObjectGroups(): void { $repository = app(ObjectGroupRepositoryInterface::class); diff --git a/app/Repositories/PiggyBank/ModifiesPiggyBanks.php b/app/Repositories/PiggyBank/ModifiesPiggyBanks.php index b8e8392e26..0fbf31de71 100644 --- a/app/Repositories/PiggyBank/ModifiesPiggyBanks.php +++ b/app/Repositories/PiggyBank/ModifiesPiggyBanks.php @@ -24,9 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Repositories\PiggyBank; -use Exception; use FireflyIII\Events\Model\PiggyBank\ChangedAmount; -use FireflyIII\Events\Model\PiggyBank\ChangedPiggyBankAmount; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Note; use FireflyIII\Models\PiggyBank; @@ -34,8 +32,6 @@ use FireflyIII\Models\PiggyBankRepetition; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\ObjectGroup\CreatesObjectGroups; use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Trait ModifiesPiggyBanks @@ -44,58 +40,37 @@ trait ModifiesPiggyBanks { use CreatesObjectGroups; - /** - * @param PiggyBankRepetition $repetition - * @param string $amount - * @param TransactionJournal $journal - * - * @return void - */ public function addAmountToRepetition(PiggyBankRepetition $repetition, string $amount, TransactionJournal $journal): void { - Log::debug(sprintf('addAmountToRepetition: %s', $amount)); + app('log')->debug(sprintf('addAmountToRepetition: %s', $amount)); if (-1 === bccomp($amount, '0')) { - Log::debug('Remove amount.'); + app('log')->debug('Remove amount.'); $this->removeAmount($repetition->piggyBank, bcmul($amount, '-1'), $journal); } if (1 === bccomp($amount, '0')) { - Log::debug('Add amount.'); + app('log')->debug('Add amount.'); $this->addAmount($repetition->piggyBank, $amount, $journal); } } - /** - * @param PiggyBank $piggyBank - * @param string $amount - * @param TransactionJournal|null $journal - * - * @return bool - */ public function removeAmount(PiggyBank $piggyBank, string $amount, ?TransactionJournal $journal = null): bool { - $repetition = $this->getRepetition($piggyBank); + $repetition = $this->getRepetition($piggyBank); if (null === $repetition) { return false; } $repetition->currentamount = bcsub($repetition->currentamount, $amount); $repetition->save(); - Log::debug('addAmount [a]: Trigger change for negative amount.'); + app('log')->debug('addAmount [a]: Trigger change for negative amount.'); event(new ChangedAmount($piggyBank, bcmul($amount, '-1'), $journal, null)); return true; } - /** - * @param PiggyBank $piggyBank - * @param string $amount - * @param TransactionJournal|null $journal - * - * @return bool - */ public function addAmount(PiggyBank $piggyBank, string $amount, ?TransactionJournal $journal = null): bool { - $repetition = $this->getRepetition($piggyBank); + $repetition = $this->getRepetition($piggyBank); if (null === $repetition) { return false; } @@ -103,24 +78,17 @@ trait ModifiesPiggyBanks $repetition->currentamount = bcadd($currentAmount, $amount); $repetition->save(); - Log::debug('addAmount [b]: Trigger change for positive amount.'); + app('log')->debug('addAmount [b]: Trigger change for positive amount.'); event(new ChangedAmount($piggyBank, $amount, $journal, null)); return true; } - /** - * @param PiggyBank $piggyBank - * @param string $amount - * - * @return bool - * @throws JsonException - */ public function canAddAmount(PiggyBank $piggyBank, string $amount): bool { $today = today(config('app.timezone')); $leftOnAccount = $this->leftOnAccount($piggyBank, $today); - $savedSoFar = (string)$this->getRepetition($piggyBank)->currentamount; + $savedSoFar = $this->getRepetition($piggyBank)->currentamount; $maxAmount = $leftOnAccount; $leftToSave = null; if (0 !== bccomp($piggyBank->targetamount, '0')) { @@ -128,24 +96,18 @@ trait ModifiesPiggyBanks $maxAmount = 1 === bccomp($leftOnAccount, $leftToSave) ? $leftToSave : $leftOnAccount; } - $compare = bccomp($amount, $maxAmount); - $result = $compare <= 0; + $compare = bccomp($amount, $maxAmount); + $result = $compare <= 0; - Log::debug(sprintf('Left on account: %s on %s', $leftOnAccount, $today->format('Y-m-d'))); - Log::debug(sprintf('Saved so far: %s', $savedSoFar)); - Log::debug(sprintf('Left to save: %s', $leftToSave)); - Log::debug(sprintf('Maximum amount: %s', $maxAmount)); - Log::debug(sprintf('Compare <= 0? %d, so %s', $compare, var_export($result, true))); + app('log')->debug(sprintf('Left on account: %s on %s', $leftOnAccount, $today->format('Y-m-d'))); + app('log')->debug(sprintf('Saved so far: %s', $savedSoFar)); + app('log')->debug(sprintf('Left to save: %s', $leftToSave)); + app('log')->debug(sprintf('Maximum amount: %s', $maxAmount)); + app('log')->debug(sprintf('Compare <= 0? %d, so %s', $compare, var_export($result, true))); return $result; } - /** - * @param PiggyBank $piggyBank - * @param string $amount - * - * @return bool - */ public function canRemoveAmount(PiggyBank $piggyBank, string $amount): bool { $repetition = $this->getRepetition($piggyBank); @@ -158,10 +120,7 @@ trait ModifiesPiggyBanks } /** - * @param PiggyBank $piggyBank - * - * @return bool - * @throws Exception + * @throws \Exception */ public function destroy(PiggyBank $piggyBank): bool { @@ -171,9 +130,6 @@ trait ModifiesPiggyBanks return true; } - /** - * @inheritDoc - */ public function removeObjectGroup(PiggyBank $piggyBank): PiggyBank { $piggyBank->objectGroups()->sync([]); @@ -181,19 +137,13 @@ trait ModifiesPiggyBanks return $piggyBank; } - /** - * @param PiggyBank $piggyBank - * @param string $amount - * - * @return PiggyBank - */ public function setCurrentAmount(PiggyBank $piggyBank, string $amount): PiggyBank { - $repetition = $this->getRepetition($piggyBank); + $repetition = $this->getRepetition($piggyBank); if (null === $repetition) { return $piggyBank; } - $max = $piggyBank->targetamount; + $max = $piggyBank->targetamount; if (1 === bccomp($amount, $max) && 0 !== bccomp($piggyBank->targetamount, '0')) { $amount = $max; } @@ -202,20 +152,17 @@ trait ModifiesPiggyBanks $repetition->save(); if (-1 === bccomp($difference, '0')) { - Log::debug('addAmount [c]: Trigger change for negative amount.'); + app('log')->debug('addAmount [c]: Trigger change for negative amount.'); event(new ChangedAmount($piggyBank, $difference, null, null)); } if (1 === bccomp($difference, '0')) { - Log::debug('addAmount [d]: Trigger change for positive amount.'); + app('log')->debug('addAmount [d]: Trigger change for positive amount.'); event(new ChangedAmount($piggyBank, $difference, null, null)); } return $piggyBank; } - /** - * @inheritDoc - */ public function setObjectGroup(PiggyBank $piggyBank, string $objectGroupTitle): PiggyBank { $objectGroup = $this->findOrCreateObjectGroup($objectGroupTitle); @@ -227,19 +174,16 @@ trait ModifiesPiggyBanks } /** - * @param array $data - * - * @return PiggyBank * @throws FireflyException */ public function store(array $data): PiggyBank { - $order = $this->getMaxOrder() + 1; + $order = $this->getMaxOrder() + 1; if (array_key_exists('order', $data)) { $order = $data['order']; } - $data['order'] = 31337; // very high when creating. - $piggyData = $data; + $data['order'] = 31337; // very high when creating. + $piggyData = $data; // unset fields just in case. unset($piggyData['object_group_title'], $piggyData['object_group_id'], $piggyData['notes'], $piggyData['current_amount']); @@ -252,7 +196,8 @@ trait ModifiesPiggyBanks /** @var PiggyBank $piggyBank */ $piggyBank = PiggyBank::create($piggyData); } catch (QueryException $e) { - Log::error(sprintf('Could not store piggy bank: %s', $e->getMessage()), $piggyData); + app('log')->error(sprintf('Could not store piggy bank: %s', $e->getMessage()), $piggyData); + throw new FireflyException('400005: Could not store new piggy bank.', 0, $e); } @@ -263,7 +208,7 @@ trait ModifiesPiggyBanks $this->updateNote($piggyBank, $data['notes']); // repetition is auto created. - $repetition = $this->getRepetition($piggyBank); + $repetition = $this->getRepetition($piggyBank); if (null !== $repetition && array_key_exists('current_amount', $data) && '' !== $data['current_amount']) { $repetition->currentamount = $data['current_amount']; $repetition->save(); @@ -278,7 +223,7 @@ trait ModifiesPiggyBanks } } // try also with ID - $objectGroupId = (int)($data['object_group_id'] ?? 0); + $objectGroupId = (int)($data['object_group_id'] ?? 0); if (0 !== $objectGroupId) { $objectGroup = $this->findObjectGroupById($objectGroupId); if (null !== $objectGroup) { @@ -298,49 +243,42 @@ trait ModifiesPiggyBanks $set = $this->user->piggyBanks()->orderBy('piggy_banks.order', 'ASC')->get(['piggy_banks.*']); $current = 1; foreach ($set as $piggyBank) { - if ((int)$piggyBank->order !== $current) { - Log::debug(sprintf('Piggy bank #%d ("%s") was at place %d but should be on %d', $piggyBank->id, $piggyBank->name, $piggyBank->order, $current)); + if ($piggyBank->order !== $current) { + app('log')->debug(sprintf('Piggy bank #%d ("%s") was at place %d but should be on %d', $piggyBank->id, $piggyBank->name, $piggyBank->order, $current)); $piggyBank->order = $current; $piggyBank->save(); } - $current++; + ++$current; } } - /** - * @inheritDoc - */ public function setOrder(PiggyBank $piggyBank, int $newOrder): bool { - $oldOrder = (int)$piggyBank->order; - Log::debug(sprintf('Will move piggy bank #%d ("%s") from %d to %d', $piggyBank->id, $piggyBank->name, $oldOrder, $newOrder)); + $oldOrder = $piggyBank->order; + // app('log')->debug(sprintf('Will move piggy bank #%d ("%s") from %d to %d', $piggyBank->id, $piggyBank->name, $oldOrder, $newOrder)); if ($newOrder > $oldOrder) { $this->user->piggyBanks()->where('piggy_banks.order', '<=', $newOrder)->where('piggy_banks.order', '>', $oldOrder) - ->where('piggy_banks.id', '!=', $piggyBank->id) - ->decrement('piggy_banks.order'); + ->where('piggy_banks.id', '!=', $piggyBank->id) + ->decrement('piggy_banks.order') + ; $piggyBank->order = $newOrder; - Log::debug(sprintf('Order of piggy #%d ("%s") is now %d', $piggyBank->id, $piggyBank->name, $newOrder)); + app('log')->debug(sprintf('[1] Order of piggy #%d ("%s") from %d to %d', $piggyBank->id, $piggyBank->name, $oldOrder, $newOrder)); $piggyBank->save(); return true; } $this->user->piggyBanks()->where('piggy_banks.order', '>=', $newOrder)->where('piggy_banks.order', '<', $oldOrder) - ->where('piggy_banks.id', '!=', $piggyBank->id) - ->increment('piggy_banks.order'); + ->where('piggy_banks.id', '!=', $piggyBank->id) + ->increment('piggy_banks.order') + ; $piggyBank->order = $newOrder; - Log::debug(sprintf('Order of piggy #%d ("%s") is now %d', $piggyBank->id, $piggyBank->name, $newOrder)); + app('log')->debug(sprintf('[2] Order of piggy #%d ("%s") from %d to %d', $piggyBank->id, $piggyBank->name, $oldOrder, $newOrder)); $piggyBank->save(); return true; } - /** - * @param PiggyBank $piggyBank - * @param string $note - * - * @return bool - */ private function updateNote(PiggyBank $piggyBank, string $note): bool { if ('' === $note) { @@ -349,7 +287,7 @@ trait ModifiesPiggyBanks return true; } - $dbNote = $piggyBank->notes()->first(); + $dbNote = $piggyBank->notes()->first(); if (null === $dbNote) { $dbNote = new Note(); $dbNote->noteable()->associate($piggyBank); @@ -360,22 +298,16 @@ trait ModifiesPiggyBanks return true; } - /** - * @param PiggyBank $piggyBank - * @param array $data - * - * @return PiggyBank - */ public function update(PiggyBank $piggyBank, array $data): PiggyBank { - $piggyBank = $this->updateProperties($piggyBank, $data); + $piggyBank = $this->updateProperties($piggyBank, $data); if (array_key_exists('notes', $data)) { $this->updateNote($piggyBank, (string)$data['notes']); } // update the order of the piggy bank: - $oldOrder = (int)$piggyBank->order; - $newOrder = (int)($data['order'] ?? $oldOrder); + $oldOrder = $piggyBank->order; + $newOrder = (int)($data['order'] ?? $oldOrder); if ($oldOrder !== $newOrder) { $this->setOrder($piggyBank, $newOrder); } @@ -384,7 +316,7 @@ trait ModifiesPiggyBanks // remove money from the rep. $repetition = $this->getRepetition($piggyBank); if (null !== $repetition && $repetition->currentamount > $piggyBank->targetamount && 0 !== bccomp($piggyBank->targetamount, '0')) { - $difference = bcsub($piggyBank->targetamount, $repetition->currentamount); + $difference = bcsub($piggyBank->targetamount, $repetition->currentamount); // an amount will be removed, create "negative" event: event(new ChangedAmount($piggyBank, $difference, null, null)); @@ -405,11 +337,8 @@ trait ModifiesPiggyBanks return $piggyBank; } - // remove if name is empty. Should be overruled by ID. - if ('' === $objectGroupTitle) { - $piggyBank->objectGroups()->sync([]); - $piggyBank->save(); - } + $piggyBank->objectGroups()->sync([]); + $piggyBank->save(); } // try also with ID: @@ -429,12 +358,6 @@ trait ModifiesPiggyBanks return $piggyBank; } - /** - * @param PiggyBank $piggyBank - * @param array $data - * - * @return PiggyBank - */ private function updateProperties(PiggyBank $piggyBank, array $data): PiggyBank { if (array_key_exists('name', $data) && '' !== $data['name']) { diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index 95288dd956..0e55fc4265 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -37,12 +37,9 @@ use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; -use JsonException; -use Storage; /** * Class PiggyBankRepository. - * */ class PiggyBankRepository implements PiggyBankRepositoryInterface { @@ -50,50 +47,37 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface private User $user; - /** - * @inheritDoc - */ public function destroyAll(): void { + Log::channel('audit')->info('Delete all piggy banks through destroyAll'); $this->user->piggyBanks()->delete(); } - /** - * @param int|null $piggyBankId - * @param string|null $piggyBankName - * - * @return PiggyBank|null - */ public function findPiggyBank(?int $piggyBankId, ?string $piggyBankName): ?PiggyBank { - Log::debug('Searching for piggy information.'); + app('log')->debug('Searching for piggy information.'); if (null !== $piggyBankId) { - $searchResult = $this->find((int)$piggyBankId); + $searchResult = $this->find($piggyBankId); if (null !== $searchResult) { - Log::debug(sprintf('Found piggy based on #%d, will return it.', $piggyBankId)); + app('log')->debug(sprintf('Found piggy based on #%d, will return it.', $piggyBankId)); return $searchResult; } } if (null !== $piggyBankName) { - $searchResult = $this->findByName((string)$piggyBankName); + $searchResult = $this->findByName($piggyBankName); if (null !== $searchResult) { - Log::debug(sprintf('Found piggy based on "%s", will return it.', $piggyBankName)); + app('log')->debug(sprintf('Found piggy based on "%s", will return it.', $piggyBankName)); return $searchResult; } } - Log::debug('Found nothing'); + app('log')->debug('Found nothing'); return null; } - /** - * @param int $piggyBankId - * - * @return PiggyBank|null - */ public function find(int $piggyBankId): ?PiggyBank { // phpstan doesn't get the Model. @@ -102,31 +86,24 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface /** * Find by name or return NULL. - * - * @param string $name - * - * @return PiggyBank|null */ public function findByName(string $name): ?PiggyBank { return $this->user->piggyBanks()->where('piggy_banks.name', $name)->first(['piggy_banks.*']); } - /** - * @inheritDoc - */ public function getAttachments(PiggyBank $piggyBank): Collection { - $set = $piggyBank->attachments()->get(); + $set = $piggyBank->attachments()->get(); - /** @var Storage $disk */ - $disk = Storage::disk('upload'); + /** @var \Storage $disk */ + $disk = \Storage::disk('upload'); return $set->each( static function (Attachment $attachment) use ($disk) { $notes = $attachment->notes()->first(); $attachment->file_exists = $disk->exists($attachment->fileName()); - $attachment->notes = $notes ? $notes->text : ''; // TODO setting the text to the 'notes' field doesn't work. + $attachment->notes_text = null !== $notes ? $notes->text : ''; return $attachment; } @@ -135,10 +112,6 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface /** * Get current amount saved in piggy bank. - * - * @param PiggyBank $piggyBank - * - * @return string */ public function getCurrentAmount(PiggyBank $piggyBank): string { @@ -147,24 +120,14 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface return '0'; } - return (string)$rep->currentamount; + return $rep->currentamount; } - /** - * @param PiggyBank $piggyBank - * - * @return PiggyBankRepetition|null - */ public function getRepetition(PiggyBank $piggyBank): ?PiggyBankRepetition { return $piggyBank->piggyBankRepetitions()->first(); } - /** - * @param PiggyBank $piggyBank - * - * @return Collection - */ public function getEvents(PiggyBank $piggyBank): Collection { return $piggyBank->piggyBankEvents()->orderBy('date', 'DESC')->orderBy('id', 'DESC')->get(); @@ -173,100 +136,96 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface /** * Used for connecting to a piggy bank. * - * @param PiggyBank $piggyBank - * @param PiggyBankRepetition $repetition - * @param TransactionJournal $journal - * - * @return string * @throws FireflyException - * @throws JsonException */ public function getExactAmount(PiggyBank $piggyBank, PiggyBankRepetition $repetition, TransactionJournal $journal): string { - Log::debug(sprintf('Now in getExactAmount(%d, %d, %d)', $piggyBank->id, $repetition->id, $journal->id)); + app('log')->debug(sprintf('Now in getExactAmount(%d, %d, %d)', $piggyBank->id, $repetition->id, $journal->id)); + + $operator = null; + $currency = null; - $operator = null; - $currency = null; /** @var JournalRepositoryInterface $journalRepost */ - $journalRepost = app(JournalRepositoryInterface::class); + $journalRepost = app(JournalRepositoryInterface::class); $journalRepost->setUser($this->user); /** @var AccountRepositoryInterface $accountRepos */ - $accountRepos = app(AccountRepositoryInterface::class); + $accountRepos = app(AccountRepositoryInterface::class); $accountRepos->setUser($this->user); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser($this->user); + $defaultCurrency = app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); $piggyBankCurrency = $accountRepos->getAccountCurrency($piggyBank->account) ?? $defaultCurrency; - Log::debug(sprintf('Piggy bank #%d currency is %s', $piggyBank->id, $piggyBankCurrency->code)); + app('log')->debug(sprintf('Piggy bank #%d currency is %s', $piggyBank->id, $piggyBankCurrency->code)); /** @var Transaction $source */ - $source = $journal->transactions()->with(['account'])->where('amount', '<', 0)->first(); + $source = $journal->transactions()->with(['account'])->where('amount', '<', 0)->first(); + /** @var Transaction $destination */ - $destination = $journal->transactions()->with(['account'])->where('amount', '>', 0)->first(); + $destination = $journal->transactions()->with(['account'])->where('amount', '>', 0)->first(); // matches source, which means amount will be removed from piggy: if ($source->account_id === $piggyBank->account_id) { $operator = 'negative'; $currency = $accountRepos->getAccountCurrency($source->account) ?? $defaultCurrency; - Log::debug(sprintf('Currency will draw money out of piggy bank. Source currency is %s', $currency->code)); + app('log')->debug(sprintf('Currency will draw money out of piggy bank. Source currency is %s', $currency->code)); } // matches destination, which means amount will be added to piggy. if ($destination->account_id === $piggyBank->account_id) { $operator = 'positive'; $currency = $accountRepos->getAccountCurrency($destination->account) ?? $defaultCurrency; - Log::debug(sprintf('Currency will add money to piggy bank. Destination currency is %s', $currency->code)); + app('log')->debug(sprintf('Currency will add money to piggy bank. Destination currency is %s', $currency->code)); } if (null === $operator || null === $currency) { - Log::debug('Currency is NULL and operator is NULL, return "0".'); + app('log')->debug('Currency is NULL and operator is NULL, return "0".'); return '0'; } // currency of the account + the piggy bank currency are almost the same. // which amount from the transaction matches? - $amount = null; - if ((int)$source->transaction_currency_id === (int)$currency->id) { - Log::debug('Use normal amount'); - $amount = app('steam')->$operator($source->amount); + $amount = null; + if ((int)$source->transaction_currency_id === $currency->id) { + app('log')->debug('Use normal amount'); + $amount = app('steam')->{$operator}($source->amount); // @phpstan-ignore-line } - if ((int)$source->foreign_currency_id === (int)$currency->id) { - Log::debug('Use foreign amount'); - $amount = app('steam')->$operator($source->foreign_amount); + if ((int)$source->foreign_currency_id === $currency->id) { + app('log')->debug('Use foreign amount'); + $amount = app('steam')->{$operator}($source->foreign_amount); // @phpstan-ignore-line } if (null === $amount) { - Log::debug('No match on currency, so amount remains null, return "0".'); + app('log')->debug('No match on currency, so amount remains null, return "0".'); return '0'; } - Log::debug(sprintf('The currency is %s and the amount is %s', $currency->code, $amount)); - $room = bcsub((string)$piggyBank->targetamount, (string)$repetition->currentamount); - $compare = bcmul($repetition->currentamount, '-1'); + app('log')->debug(sprintf('The currency is %s and the amount is %s', $currency->code, $amount)); + $room = bcsub($piggyBank->targetamount, $repetition->currentamount); + $compare = bcmul($repetition->currentamount, '-1'); - if (bccomp((string)$piggyBank->targetamount, '0') === 0) { + if (0 === bccomp($piggyBank->targetamount, '0')) { // amount is zero? then the "room" is positive amount of we wish to add or remove. $room = app('steam')->positive($amount); - Log::debug(sprintf('Room is now %s', $room)); + app('log')->debug(sprintf('Room is now %s', $room)); } - Log::debug(sprintf('Will add/remove %f to piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name)); + app('log')->debug(sprintf('Will add/remove %f to piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name)); // if the amount is positive, make sure it fits in piggy bank: - if (1 === bccomp($amount, '0') && bccomp($room, $amount) === -1) { + if (1 === bccomp($amount, '0') && -1 === bccomp($room, $amount)) { // amount is positive and $room is smaller than $amount - Log::debug(sprintf('Room in piggy bank for extra money is %f', $room)); - Log::debug(sprintf('There is NO room to add %f to piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name)); - Log::debug(sprintf('New amount is %f', $room)); + app('log')->debug(sprintf('Room in piggy bank for extra money is %f', $room)); + app('log')->debug(sprintf('There is NO room to add %f to piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name)); + app('log')->debug(sprintf('New amount is %f', $room)); return $room; } // amount is negative and $currentamount is smaller than $amount - if (bccomp($amount, '0') === -1 && 1 === bccomp($compare, $amount)) { - Log::debug(sprintf('Max amount to remove is %f', $repetition->currentamount)); - Log::debug(sprintf('Cannot remove %f from piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name)); - Log::debug(sprintf('New amount is %f', $compare)); + if (-1 === bccomp($amount, '0') && 1 === bccomp($compare, $amount)) { + app('log')->debug(sprintf('Max amount to remove is %f', $repetition->currentamount)); + app('log')->debug(sprintf('Cannot remove %f from piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name)); + app('log')->debug(sprintf('New amount is %f', $compare)); return $compare; } @@ -274,19 +233,13 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface return (string)$amount; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @return int - */ public function getMaxOrder(): int { return (int)$this->user->piggyBanks()->max('piggy_banks.order'); @@ -294,65 +247,49 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface /** * Return note for piggy bank. - * - * @param PiggyBank $piggyBank - * - * @return string */ public function getNoteText(PiggyBank $piggyBank): string { - /** @var Note $note */ + /** @var null|Note $note */ $note = $piggyBank->notes()->first(); - if (null === $note) { - return ''; - } - return $note->text; + return (string)$note?->text; } /** * Also add amount in name. - * - * @return Collection */ public function getPiggyBanksWithAmount(): Collection { $currency = app('amount')->getDefaultCurrency(); - $set = $this->getPiggyBanks(); + $set = $this->getPiggyBanks(); /** @var PiggyBank $piggy */ foreach ($set as $piggy) { $currentAmount = $this->getRepetition($piggy)->currentamount ?? '0'; - $piggy->name = $piggy->name . ' (' . app('amount')->formatAnything($currency, $currentAmount, false) . ')'; + $piggy->name = $piggy->name.' ('.app('amount')->formatAnything($currency, $currentAmount, false).')'; } return $set; } - /** - * @return Collection - */ public function getPiggyBanks(): Collection { return $this->user // @phpstan-ignore-line (phpstan does not recognize objectGroups) - ->piggyBanks() - ->with( - [ - 'account', - 'objectGroups', - ] - ) - ->orderBy('order', 'ASC')->get(); + ->piggyBanks() + ->with( + [ + 'account', + 'objectGroups', + ] + ) + ->orderBy('order', 'ASC')->get() + ; } /** * Returns the suggested amount the user should save per month, or "". - * - * @param PiggyBank $piggyBank - * - * @return string - * */ public function getSuggestedMonthlyAmount(PiggyBank $piggyBank): string { @@ -383,12 +320,6 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface /** * Get for piggy account what is left to put in piggies. - * - * @param PiggyBank $piggyBank - * @param Carbon $date - * - * @return string - * @throws JsonException */ public function leftOnAccount(PiggyBank $piggyBank, Carbon $date): string { @@ -408,9 +339,6 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface return $balance; } - /** - * @inheritDoc - */ public function searchPiggyBank(string $query, int $limit): Collection { $search = $this->user->piggyBanks(); @@ -418,7 +346,8 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface $search->where('piggy_banks.name', 'LIKE', sprintf('%%%s%%', $query)); } $search->orderBy('piggy_banks.order', 'ASC') - ->orderBy('piggy_banks.name', 'ASC'); + ->orderBy('piggy_banks.name', 'ASC') + ; return $search->take($limit)->get(); } diff --git a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php index 6a321a9587..7c1e12becc 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php +++ b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php @@ -37,184 +37,81 @@ use Illuminate\Support\Collection; */ interface PiggyBankRepositoryInterface { - /** - * @param PiggyBank $piggyBank - * @param string $amount - * @param TransactionJournal|null $journal - * - * @return bool - */ public function addAmount(PiggyBank $piggyBank, string $amount, ?TransactionJournal $journal = null): bool; - /** - * @param PiggyBankRepetition $repetition - * @param string $amount - * @param TransactionJournal $journal - * - * @return void - */ public function addAmountToRepetition(PiggyBankRepetition $repetition, string $amount, TransactionJournal $journal): void; - /** - * @param PiggyBank $piggyBank - * @param string $amount - * - * @return bool - */ public function canAddAmount(PiggyBank $piggyBank, string $amount): bool; - /** - * @param PiggyBank $piggyBank - * @param string $amount - * - * @return bool - */ public function canRemoveAmount(PiggyBank $piggyBank, string $amount): bool; /** * Destroy piggy bank. - * - * @param PiggyBank $piggyBank - * - * @return bool */ public function destroy(PiggyBank $piggyBank): bool; - /** - * - */ public function destroyAll(): void; - /** - * @param int $piggyBankId - * - * @return PiggyBank|null - */ public function find(int $piggyBankId): ?PiggyBank; /** * Find by name or return NULL. - * - * @param string $name - * - * @return PiggyBank|null */ public function findByName(string $name): ?PiggyBank; - /** - * @param int|null $piggyBankId - * @param string|null $piggyBankName - * - * @return PiggyBank|null - */ public function findPiggyBank(?int $piggyBankId, ?string $piggyBankName): ?PiggyBank; - /** - * @param PiggyBank $piggyBank - * - * @return Collection - */ public function getAttachments(PiggyBank $piggyBank): Collection; /** * Get current amount saved in piggy bank. - * - * @param PiggyBank $piggyBank - * - * @return string */ public function getCurrentAmount(PiggyBank $piggyBank): string; /** * Get all events. - * - * @param PiggyBank $piggyBank - * - * @return Collection */ public function getEvents(PiggyBank $piggyBank): Collection; /** * Used for connecting to a piggy bank. - * - * @param PiggyBank $piggyBank - * @param PiggyBankRepetition $repetition - * @param TransactionJournal $journal - * - * @return string */ public function getExactAmount(PiggyBank $piggyBank, PiggyBankRepetition $repetition, TransactionJournal $journal): string; /** * Highest order of all piggy banks. - * - * @return int */ public function getMaxOrder(): int; /** * Return note for piggy bank. - * - * @param PiggyBank $piggyBank - * - * @return string */ public function getNoteText(PiggyBank $piggyBank): string; /** * Return all piggy banks. - * - * @return Collection */ public function getPiggyBanks(): Collection; /** * Also add amount in name. - * - * @return Collection */ public function getPiggyBanksWithAmount(): Collection; - /** - * @param PiggyBank $piggyBank - * - * @return PiggyBankRepetition|null - */ public function getRepetition(PiggyBank $piggyBank): ?PiggyBankRepetition; /** * Returns the suggested amount the user should save per month, or "". - * - * @param PiggyBank $piggyBank - * - * @return string */ public function getSuggestedMonthlyAmount(PiggyBank $piggyBank): string; /** * Get for piggy account what is left to put in piggies. - * - * @param PiggyBank $piggyBank - * @param Carbon $date - * - * @return string */ public function leftOnAccount(PiggyBank $piggyBank, Carbon $date): string; - /** - * @param PiggyBank $piggyBank - * @param string $amount - * @param TransactionJournal|null $journal - * - * @return bool - */ public function removeAmount(PiggyBank $piggyBank, string $amount, ?TransactionJournal $journal = null): bool; - /** - * @param PiggyBank $piggyBank - * - * @return PiggyBank - */ public function removeObjectGroup(PiggyBank $piggyBank): PiggyBank; /** @@ -224,62 +121,29 @@ interface PiggyBankRepositoryInterface /** * Search for piggy banks. - * - * @param string $query - * @param int $limit - * - * @return Collection */ public function searchPiggyBank(string $query, int $limit): Collection; - /** - * @param PiggyBank $piggyBank - * @param string $amount - * - * @return PiggyBank - */ public function setCurrentAmount(PiggyBank $piggyBank, string $amount): PiggyBank; - /** - * @param PiggyBank $piggyBank - * @param string $objectGroupTitle - * - * @return PiggyBank - */ public function setObjectGroup(PiggyBank $piggyBank, string $objectGroupTitle): PiggyBank; /** * Set specific piggy bank to specific order. - * - * @param PiggyBank $piggyBank - * @param int $newOrder - * - * @return bool */ public function setOrder(PiggyBank $piggyBank, int $newOrder): bool; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** * Store new piggy bank. * - * @param array $data - * - * @return PiggyBank * @throws FireflyException */ public function store(array $data): PiggyBank; /** * Update existing piggy bank. - * - * @param PiggyBank $piggyBank - * @param array $data - * - * @return PiggyBank */ public function update(PiggyBank $piggyBank, array $data): PiggyBank; } diff --git a/app/Repositories/Recurring/RecurringRepository.php b/app/Repositories/Recurring/RecurringRepository.php index 5687387227..efd4f9eaa3 100644 --- a/app/Repositories/Recurring/RecurringRepository.php +++ b/app/Repositories/Recurring/RecurringRepository.php @@ -48,7 +48,6 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; -use JsonException; /** * Class RecurringRepository @@ -62,55 +61,52 @@ class RecurringRepository implements RecurringRepositoryInterface private User $user; - /** - * @inheritDoc - */ public function createdPreviously(Recurrence $recurrence, Carbon $date): bool { // if not, loop set and try to read the recurrence_date. If it matches start or end, return it as well. $set - = TransactionJournalMeta::where(function (Builder $q1) use ($recurrence) { + = TransactionJournalMeta::where(static function (Builder $q1) use ($recurrence): void { $q1->where('name', 'recurrence_id'); $q1->where('data', json_encode((string)$recurrence->id)); })->get(['journal_meta.transaction_journal_id']); // there are X journals made for this recurrence. Any of them meant for today? foreach ($set as $journalMeta) { - $count = TransactionJournalMeta::where(function (Builder $q2) use ($date) { + $count = TransactionJournalMeta::where(static function (Builder $q2) use ($date): void { $string = (string)$date; - Log::debug(sprintf('Search for date: %s', json_encode($string))); + app('log')->debug(sprintf('Search for date: %s', json_encode($string))); $q2->where('name', 'recurrence_date'); $q2->where('data', json_encode($string)); }) - ->where('transaction_journal_id', $journalMeta->transaction_journal_id) - ->count(); + ->where('transaction_journal_id', $journalMeta->transaction_journal_id) + ->count() + ; if ($count > 0) { - Log::debug(sprintf('Looks like journal #%d was already created', $journalMeta->transaction_journal_id)); + app('log')->debug(sprintf('Looks like journal #%d was already created', $journalMeta->transaction_journal_id)); + return true; } } + return false; } /** * Returns all of the user's recurring transactions. - * - * @return Collection */ public function get(): Collection { return $this->user->recurrences() - ->with(['TransactionCurrency', 'TransactionType', 'RecurrenceRepetitions', 'RecurrenceTransactions']) - ->orderBy('active', 'DESC') - ->orderBy('transaction_type_id', 'ASC') - ->orderBy('title', 'ASC') - ->get(); + ->with(['TransactionCurrency', 'TransactionType', 'RecurrenceRepetitions', 'RecurrenceTransactions']) + ->orderBy('active', 'DESC') + ->orderBy('transaction_type_id', 'ASC') + ->orderBy('title', 'ASC') + ->get() + ; } /** * Destroy a recurring transaction. - * - * @param Recurrence $recurrence */ public function destroy(Recurrence $recurrence): void { @@ -119,34 +115,29 @@ class RecurringRepository implements RecurringRepositoryInterface $service->destroy($recurrence); } - /** - * @inheritDoc - */ public function destroyAll(): void { + Log::channel('audit')->info('Delete all recurring transactions through destroyAll'); $this->user->recurrences()->delete(); } /** * Get ALL recurring transactions. - * - * @return Collection */ public function getAll(): Collection { // grab ALL recurring transactions: return Recurrence::with(['TransactionCurrency', 'TransactionType', 'RecurrenceRepetitions', 'RecurrenceTransactions']) - ->orderBy('active', 'DESC') - ->orderBy('title', 'ASC') - ->get(); + ->orderBy('active', 'DESC') + ->orderBy('title', 'ASC') + ->get() + ; } - /** - * @inheritDoc - */ public function getBillId(RecurrenceTransaction $recTransaction): ?int { $return = null; + /** @var RecurrenceTransactionMeta $meta */ foreach ($recTransaction->recurrenceTransactionMeta as $meta) { if ('bill_id' === $meta->name) { @@ -159,14 +150,11 @@ class RecurringRepository implements RecurringRepositoryInterface /** * Get the budget ID from a recurring transaction transaction. - * - * @param RecurrenceTransaction $recTransaction - * - * @return null|int */ public function getBudget(RecurrenceTransaction $recTransaction): ?int { $return = 0; + /** @var RecurrenceTransactionMeta $meta */ foreach ($recTransaction->recurrenceTransactionMeta as $meta) { if ('budget_id' === $meta->name) { @@ -179,14 +167,11 @@ class RecurringRepository implements RecurringRepositoryInterface /** * Get the category from a recurring transaction transaction. - * - * @param RecurrenceTransaction $recTransaction - * - * @return null|int */ public function getCategoryId(RecurrenceTransaction $recTransaction): ?int { $return = ''; + /** @var RecurrenceTransactionMeta $meta */ foreach ($recTransaction->recurrenceTransactionMeta as $meta) { if ('category_id' === $meta->name) { @@ -199,14 +184,11 @@ class RecurringRepository implements RecurringRepositoryInterface /** * Get the category from a recurring transaction transaction. - * - * @param RecurrenceTransaction $recTransaction - * - * @return null|string */ public function getCategoryName(RecurrenceTransaction $recTransaction): ?string { $return = ''; + /** @var RecurrenceTransactionMeta $meta */ foreach ($recTransaction->recurrenceTransactionMeta as $meta) { if ('category_name' === $meta->name) { @@ -219,71 +201,53 @@ class RecurringRepository implements RecurringRepositoryInterface /** * Returns the journals created for this recurrence, possibly limited by time. - * - * @param Recurrence $recurrence - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return int */ public function getJournalCount(Recurrence $recurrence, Carbon $start = null, Carbon $end = null): int { $query = TransactionJournal::leftJoin('journal_meta', 'journal_meta.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transaction_journals.user_id', $recurrence->user_id) - ->whereNull('transaction_journals.deleted_at') - ->where('journal_meta.name', 'recurrence_id') - ->where('journal_meta.data', '"' . $recurrence->id . '"'); + ->where('transaction_journals.user_id', $recurrence->user_id) + ->whereNull('transaction_journals.deleted_at') + ->where('journal_meta.name', 'recurrence_id') + ->where('journal_meta.data', '"'.$recurrence->id.'"') + ; if (null !== $start) { $query->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00')); } if (null !== $end) { $query->where('transaction_journals.date', '<=', $end->format('Y-m-d 00:00:00')); } - return $query->count(['transaction_journals.id']); + + return $query->count('transaction_journals.id'); } /** * Get journal ID's for journals created by this recurring transaction. - * - * @param Recurrence $recurrence - * - * @return array */ public function getJournalIds(Recurrence $recurrence): array { return TransactionJournalMeta::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id') - ->where('transaction_journals.user_id', $this->user->id) - ->where('journal_meta.name', '=', 'recurrence_id') - ->where('journal_meta.data', '=', json_encode((string)$recurrence->id)) - ->get(['journal_meta.transaction_journal_id'])->pluck('transaction_journal_id')->toArray(); + ->where('transaction_journals.user_id', $this->user->id) + ->where('journal_meta.name', '=', 'recurrence_id') + ->where('journal_meta.data', '=', json_encode((string)$recurrence->id)) + ->get(['journal_meta.transaction_journal_id'])->pluck('transaction_journal_id')->toArray() + ; } /** * Get the notes. - * - * @param Recurrence $recurrence - * - * @return string */ public function getNoteText(Recurrence $recurrence): string { - /** @var Note $note */ + /** @var null|Note $note */ $note = $recurrence->notes()->first(); - if (null !== $note) { - return (string)$note->text; - } - return ''; + return (string)$note?->text; } - /** - * @param RecurrenceTransaction $transaction - * - * @return int|null - */ public function getPiggyBank(RecurrenceTransaction $transaction): ?int { $meta = $transaction->recurrenceTransactionMeta; + /** @var RecurrenceTransactionMeta $metaEntry */ foreach ($meta as $metaEntry) { if ('piggy_bank_id' === $metaEntry->name) { @@ -296,15 +260,11 @@ class RecurringRepository implements RecurringRepositoryInterface /** * Get the tags from the recurring transaction. - * - * @param RecurrenceTransaction $transaction - * - * @return array - * @throws JsonException */ public function getTags(RecurrenceTransaction $transaction): array { $tags = []; + /** @var RecurrenceMeta $meta */ foreach ($transaction->recurrenceTransactionMeta as $meta) { if ('tags' === $meta->name && '' !== $meta->value) { @@ -315,59 +275,48 @@ class RecurringRepository implements RecurringRepositoryInterface return $tags; } - /** - * @param Recurrence $recurrence - * @param int $page - * @param int $pageSize - * - * @return LengthAwarePaginator - */ public function getTransactionPaginator(Recurrence $recurrence, int $page, int $pageSize): LengthAwarePaginator { $journalMeta = TransactionJournalMeta::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id') - ->whereNull('transaction_journals.deleted_at') - ->where('transaction_journals.user_id', $this->user->id) - ->where('name', 'recurrence_id') - ->where('data', json_encode((string)$recurrence->id)) - ->get()->pluck('transaction_journal_id')->toArray(); + ->whereNull('transaction_journals.deleted_at') + ->where('transaction_journals.user_id', $this->user->id) + ->where('name', 'recurrence_id') + ->where('data', json_encode((string)$recurrence->id)) + ->get()->pluck('transaction_journal_id')->toArray() + ; $search = []; foreach ($journalMeta as $journalId) { $search[] = (int)$journalId; } + /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($recurrence->user); $collector->withCategoryInformation()->withBudgetInformation()->setLimit($pageSize)->setPage($page) - ->withAccountInformation(); + ->withAccountInformation() + ; $collector->setJournalIds($search); return $collector->getPaginatedGroups(); } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @param Recurrence $recurrence - * - * @return Collection - */ public function getTransactions(Recurrence $recurrence): Collection { $journalMeta = TransactionJournalMeta::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id') - ->whereNull('transaction_journals.deleted_at') - ->where('transaction_journals.user_id', $this->user->id) - ->where('name', 'recurrence_id') - ->where('data', json_encode((string)$recurrence->id)) - ->get()->pluck('transaction_journal_id')->toArray(); + ->whereNull('transaction_journals.deleted_at') + ->where('transaction_journals.user_id', $this->user->id) + ->where('name', 'recurrence_id') + ->where('data', json_encode((string)$recurrence->id)) + ->get()->pluck('transaction_journal_id')->toArray() + ; $search = []; foreach ($journalMeta as $journalId) { @@ -378,7 +327,7 @@ class RecurringRepository implements RecurringRepositoryInterface } /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($recurrence->user); $collector->withCategoryInformation()->withBudgetInformation()->withAccountInformation(); @@ -390,13 +339,6 @@ class RecurringRepository implements RecurringRepositoryInterface /** * Calculate the next X iterations starting on the date given in $date. - * - * @param RecurrenceRepetition $repetition - * @param Carbon $date - * @param int $count - * - * @return array - * */ public function getXOccurrences(RecurrenceRepetition $repetition, Carbon $date, int $count): array { @@ -427,17 +369,10 @@ class RecurringRepository implements RecurringRepositoryInterface * Returns an array of Carbon objects. * * Only returns them of they are after $afterDate - * - * @param RecurrenceRepetition $repetition - * @param Carbon $date - * @param Carbon $afterDate - * @param int $count - * - * @return array */ public function getXOccurrencesSince(RecurrenceRepetition $repetition, Carbon $date, Carbon $afterDate, int $count): array { - Log::debug('Now in getXOccurrencesSince()'); + app('log')->debug('Now in getXOccurrencesSince()'); $skipMod = $repetition->repetition_skip + 1; $occurrences = []; if ('daily' === $repetition->repetition_type) { @@ -465,12 +400,6 @@ class RecurringRepository implements RecurringRepositoryInterface return $this->filterMaxDate($repeatUntil, $occurrences); } - /** - * @param Carbon|null $max - * @param array $occurrences - * - * @return array - */ private function filterMaxDate(?Carbon $max, array $occurrences): array { if (null === $max) { @@ -489,17 +418,19 @@ class RecurringRepository implements RecurringRepositoryInterface /** * Parse the repetition in a string that is user readable. * - * @param RecurrenceRepetition $repetition - * - * @return string * @throws FireflyException */ public function repetitionDescription(RecurrenceRepetition $repetition): string { - Log::debug('Now in repetitionDescription()'); + app('log')->debug('Now in repetitionDescription()'); + /** @var Preference $pref */ $pref = app('preferences')->getForUser($this->user, 'language', config('firefly.default_language', 'en_US')); $language = $pref->data; + if (is_array($language)) { + $language = 'en_US'; + } + $language = (string)$language; if ('daily' === $repetition->repetition_type) { return (string)trans('firefly.recurring_daily', [], $language); } @@ -527,19 +458,21 @@ class RecurringRepository implements RecurringRepositoryInterface ); } if ('ndom' === $repetition->repetition_type) { - $parts = explode(',', $repetition->repetition_moment); + $parts = explode(',', $repetition->repetition_moment); // first part is number of week, second is weekday. $dayOfWeek = trans(sprintf('config.dow_%s', $parts[1]), [], $language); return (string)trans('firefly.recurring_ndom', ['weekday' => $dayOfWeek, 'dayOfMonth' => $parts[0]], $language); } if ('yearly' === $repetition->repetition_type) { - // $today = today(config('app.timezone'))->endOfYear(); $repDate = Carbon::createFromFormat('Y-m-d', $repetition->repetition_moment); + if (false === $repDate) { + $repDate = clone $today; + } $diffInYears = $today->diffInYears($repDate); $repDate->addYears($diffInYears); // technically not necessary. - $string = $repDate->isoFormat((string)trans('config.month_and_day_no_year_js')); + $string = $repDate->isoFormat((string)trans('config.month_and_day_no_year_js')); return (string)trans('firefly.recurring_yearly', ['date' => $string], $language); } @@ -547,9 +480,6 @@ class RecurringRepository implements RecurringRepositoryInterface return ''; } - /** - * @inheritDoc - */ public function searchRecurrence(string $query, int $limit): Collection { $search = $this->user->recurrences(); @@ -557,34 +487,24 @@ class RecurringRepository implements RecurringRepositoryInterface $search->where('recurrences.title', 'LIKE', sprintf('%%%s%%', $query)); } $search - ->orderBy('recurrences.title', 'ASC'); + ->orderBy('recurrences.title', 'ASC') + ; return $search->take($limit)->get(['id', 'title', 'description']); } /** - * @param array $data - * - * @return Recurrence * @throws FireflyException - * @throws JsonException */ public function store(array $data): Recurrence { /** @var RecurrenceFactory $factory */ $factory = app(RecurrenceFactory::class); $factory->setUser($this->user); - $result = $factory->create($data); - if (null === $result) { - throw new FireflyException($factory->getErrors()->first()); - } - return $result; + return $factory->create($data); } - /** - * @inheritDoc - */ public function totalTransactions(Recurrence $recurrence, RecurrenceRepetition $repetition): int { // if repeat = null just return 0. @@ -608,22 +528,15 @@ class RecurringRepository implements RecurringRepositoryInterface /** * Generate events in the date range. - * - * @param RecurrenceRepetition $repetition - * @param Carbon $start - * @param Carbon $end - * - * @return array - * */ public function getOccurrencesInRange(RecurrenceRepetition $repetition, Carbon $start, Carbon $end): array { $occurrences = []; $mutator = clone $start; $mutator->startOfDay(); - $skipMod = $repetition->repetition_skip + 1; - Log::debug(sprintf('Calculating occurrences for rep type "%s"', $repetition->repetition_type)); - Log::debug(sprintf('Mutator is now: %s', $mutator->format('Y-m-d'))); + $skipMod = $repetition->repetition_skip + 1; + app('log')->debug(sprintf('Calculating occurrences for rep type "%s"', $repetition->repetition_type)); + app('log')->debug(sprintf('Mutator is now: %s', $mutator->format('Y-m-d'))); if ('daily' === $repetition->repetition_type) { $occurrences = $this->getDailyInRange($mutator, $end, $skipMod); @@ -648,10 +561,6 @@ class RecurringRepository implements RecurringRepositoryInterface /** * Update a recurring transaction. * - * @param Recurrence $recurrence - * @param array $data - * - * @return Recurrence * @throws FireflyException */ public function update(Recurrence $recurrence, array $data): Recurrence diff --git a/app/Repositories/Recurring/RecurringRepositoryInterface.php b/app/Repositories/Recurring/RecurringRepositoryInterface.php index 3da9bacfe5..6c8963aaf4 100644 --- a/app/Repositories/Recurring/RecurringRepositoryInterface.php +++ b/app/Repositories/Recurring/RecurringRepositoryInterface.php @@ -35,22 +35,13 @@ use Illuminate\Support\Collection; /** * Interface RecurringRepositoryInterface - * */ interface RecurringRepositoryInterface { - /** - * @param Recurrence $recurrence - * @param Carbon $date - * - * @return bool - */ public function createdPreviously(Recurrence $recurrence, Carbon $date): bool; /** * Destroy a recurring transaction. - * - * @param Recurrence $recurrence */ public function destroy(Recurrence $recurrence): void; @@ -61,135 +52,69 @@ interface RecurringRepositoryInterface /** * Returns all of the user's recurring transactions. - * - * @return Collection */ public function get(): Collection; /** * Get ALL recurring transactions. - * - * @return Collection */ public function getAll(): Collection; /** * Get the category from a recurring transaction transaction. - * - * @param RecurrenceTransaction $recTransaction - * - * @return null|int */ public function getBillId(RecurrenceTransaction $recTransaction): ?int; /** * Get the budget ID from a recurring transaction transaction. - * - * @param RecurrenceTransaction $recTransaction - * - * @return null|int */ public function getBudget(RecurrenceTransaction $recTransaction): ?int; /** * Get the category from a recurring transaction transaction. - * - * @param RecurrenceTransaction $recTransaction - * - * @return null|int */ public function getCategoryId(RecurrenceTransaction $recTransaction): ?int; /** * Get the category from a recurring transaction transaction. - * - * @param RecurrenceTransaction $recTransaction - * - * @return null|string */ public function getCategoryName(RecurrenceTransaction $recTransaction): ?string; /** * Returns the count of journals created for this recurrence, possibly limited by time. - * - * @param Recurrence $recurrence - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return int */ public function getJournalCount(Recurrence $recurrence, Carbon $start = null, Carbon $end = null): int; /** * Get journal ID's for journals created by this recurring transaction. - * - * @param Recurrence $recurrence - * - * @return array */ public function getJournalIds(Recurrence $recurrence): array; /** * Get the notes. - * - * @param Recurrence $recurrence - * - * @return string */ public function getNoteText(Recurrence $recurrence): string; /** * Generate events in the date range. - * - * @param RecurrenceRepetition $repetition - * @param Carbon $start - * @param Carbon $end - * - * @return array */ public function getOccurrencesInRange(RecurrenceRepetition $repetition, Carbon $start, Carbon $end): array; - /** - * @param RecurrenceTransaction $transaction - * - * @return int|null - */ public function getPiggyBank(RecurrenceTransaction $transaction): ?int; /** * Get the tags from the recurring transaction. - * - * @param RecurrenceTransaction $transaction - * - * @return array */ public function getTags(RecurrenceTransaction $transaction): array; - /** - * @param Recurrence $recurrence - * @param int $page - * @param int $pageSize - * - * @return LengthAwarePaginator - */ public function getTransactionPaginator(Recurrence $recurrence, int $page, int $pageSize): LengthAwarePaginator; - /** - * @param Recurrence $recurrence - * - * @return Collection - */ public function getTransactions(Recurrence $recurrence): Collection; /** * Calculate the next X iterations starting on the date given in $date. * Returns an array of Carbon objects. * - * @param RecurrenceRepetition $repetition - * @param Carbon $date - * @param int $count - * - * @return array * @throws FireflyException */ public function getXOccurrences(RecurrenceRepetition $repetition, Carbon $date, int $count): array; @@ -200,65 +125,33 @@ interface RecurringRepositoryInterface * * Only returns them of they are after $afterDate * - * @param RecurrenceRepetition $repetition - * @param Carbon $date - * @param Carbon $afterDate - * @param int $count - * - * @return array * @throws FireflyException */ public function getXOccurrencesSince(RecurrenceRepetition $repetition, Carbon $date, Carbon $afterDate, int $count): array; /** * Parse the repetition in a string that is user readable. - * - * @param RecurrenceRepetition $repetition - * - * @return string */ public function repetitionDescription(RecurrenceRepetition $repetition): string; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchRecurrence(string $query, int $limit): Collection; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** * Store a new recurring transaction. * - * @param array $data - * - * @return Recurrence * @throws FireflyException */ public function store(array $data): Recurrence; /** * Calculate how many transactions are to be expected from this recurrence. - * - * @param Recurrence $recurrence - * @param RecurrenceRepetition $repetition - * - * @return int */ public function totalTransactions(Recurrence $recurrence, RecurrenceRepetition $repetition): int; /** * Update a recurring transaction. - * - * @param Recurrence $recurrence - * @param array $data - * - * @return Recurrence */ public function update(Recurrence $recurrence, array $data): Recurrence; } diff --git a/app/Repositories/Rule/RuleRepository.php b/app/Repositories/Rule/RuleRepository.php index 09e02cbe75..2d3ef6d7d9 100644 --- a/app/Repositories/Rule/RuleRepository.php +++ b/app/Repositories/Rule/RuleRepository.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Rule; -use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Rule; use FireflyIII\Models\RuleAction; @@ -34,11 +33,9 @@ use FireflyIII\Support\Search\OperatorQuerySearch; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class RuleRepository. - * */ class RuleRepository implements RuleRepositoryInterface { @@ -46,10 +43,7 @@ class RuleRepository implements RuleRepositoryInterface private $user; /** - * @param Rule $rule - * - * @return bool - * @throws Exception + * @throws \Exception */ public function destroy(Rule $rule): bool { @@ -64,9 +58,6 @@ class RuleRepository implements RuleRepositoryInterface return true; } - /** - * @inheritDoc - */ public function duplicate(Rule $rule): Rule { $newRule = $rule->replicate(); @@ -94,8 +85,6 @@ class RuleRepository implements RuleRepositoryInterface /** * Get all the users rules. - * - * @return Collection */ public function getAll(): Collection { @@ -104,85 +93,64 @@ class RuleRepository implements RuleRepositoryInterface /** * FIxXME can return null. - * - * @return RuleGroup */ public function getFirstRuleGroup(): RuleGroup { return $this->user->ruleGroups()->first(); } - /** - * @param RuleGroup $ruleGroup - * - * @return int - */ public function getHighestOrderInRuleGroup(RuleGroup $ruleGroup): int { return (int)$ruleGroup->rules()->max('order'); } /** - * @param Rule $rule - * - * @return string - * * @throws FireflyException */ public function getPrimaryTrigger(Rule $rule): string { $count = $rule->ruleTriggers()->count(); if (0 === $count) { - throw new FireflyException('Rules should have more than zero triggers, rule #' . $rule->id . ' has none!'); + throw new FireflyException('Rules should have more than zero triggers, rule #'.$rule->id.' has none!'); } return $rule->ruleTriggers()->where('trigger_type', 'user_action')->first()->trigger_value; } - /** - * @return int - */ public function count(): int { return $this->user->rules()->count(); } - /** - * @param Rule $rule - * - * @return Collection - */ public function getRuleActions(Rule $rule): Collection { return $rule->ruleActions()->orderBy('order', 'ASC')->get(); } - /** - * @param Rule $rule - * - * @return Collection - */ public function getRuleTriggers(Rule $rule): Collection { return $rule->ruleTriggers()->orderBy('order', 'ASC')->get(); } - /** - * @inheritDoc - */ public function getSearchQuery(Rule $rule): string { $params = []; + /** @var RuleTrigger $trigger */ foreach ($rule->ruleTriggers as $trigger) { if ('user_action' === $trigger->trigger_type) { continue; } - $needsContext = config(sprintf('search.operators.%s.needs_context', $trigger->trigger_type)) ?? true; + $triggerType = $trigger->trigger_type; + if (str_starts_with($trigger->trigger_type, '-')) { + $triggerType = substr($trigger->trigger_type, 1); + } + $needsContext = config(sprintf('search.operators.%s.needs_context', $triggerType)) ?? true; if (false === $needsContext) { $params[] = sprintf('%s:true', OperatorQuerySearch::getRootOperator($trigger->trigger_type)); } if (true === $needsContext) { + var_dump('x'); $params[] = sprintf('%s:"%s"', OperatorQuerySearch::getRootOperator($trigger->trigger_type), $trigger->trigger_value); } } @@ -190,20 +158,19 @@ class RuleRepository implements RuleRepositoryInterface return implode(' ', $params); } - /** - * @inheritDoc - */ public function getStoreRules(): Collection { $collection = $this->user->rules() - ->leftJoin('rule_groups', 'rule_groups.id', '=', 'rules.rule_group_id') - ->where('rules.active', true) - ->where('rule_groups.active', true) - ->orderBy('rule_groups.order', 'ASC') - ->orderBy('rules.order', 'ASC') - ->orderBy('rules.id', 'ASC') - ->with(['ruleGroup', 'ruleTriggers'])->get(['rules.*']); + ->leftJoin('rule_groups', 'rule_groups.id', '=', 'rules.rule_group_id') + ->where('rules.active', true) + ->where('rule_groups.active', true) + ->orderBy('rule_groups.order', 'ASC') + ->orderBy('rules.order', 'ASC') + ->orderBy('rules.id', 'ASC') + ->with(['ruleGroup', 'ruleTriggers'])->get(['rules.*']) + ; $filtered = new Collection(); + /** @var Rule $rule */ foreach ($collection as $rule) { /** @var RuleTrigger $ruleTrigger */ @@ -217,20 +184,19 @@ class RuleRepository implements RuleRepositoryInterface return $filtered; } - /** - * @inheritDoc - */ public function getUpdateRules(): Collection { $collection = $this->user->rules() - ->leftJoin('rule_groups', 'rule_groups.id', '=', 'rules.rule_group_id') - ->where('rules.active', true) - ->where('rule_groups.active', true) - ->orderBy('rule_groups.order', 'ASC') - ->orderBy('rules.order', 'ASC') - ->orderBy('rules.id', 'ASC') - ->with(['ruleGroup', 'ruleTriggers'])->get(); + ->leftJoin('rule_groups', 'rule_groups.id', '=', 'rules.rule_group_id') + ->where('rules.active', true) + ->where('rule_groups.active', true) + ->orderBy('rule_groups.order', 'ASC') + ->orderBy('rules.order', 'ASC') + ->orderBy('rules.id', 'ASC') + ->with(['ruleGroup', 'ruleTriggers'])->get() + ; $filtered = new Collection(); + /** @var Rule $rule */ foreach ($collection as $rule) { /** @var RuleTrigger $ruleTrigger */ @@ -244,9 +210,6 @@ class RuleRepository implements RuleRepositoryInterface return $filtered; } - /** - * @inheritDoc - */ public function searchRule(string $query, int $limit): Collection { $search = $this->user->rules(); @@ -254,20 +217,18 @@ class RuleRepository implements RuleRepositoryInterface $search->where('rules.title', 'LIKE', sprintf('%%%s%%', $query)); } $search->orderBy('rules.order', 'ASC') - ->orderBy('rules.title', 'ASC'); + ->orderBy('rules.title', 'ASC') + ; return $search->take($limit)->get(['id', 'title', 'description']); } /** - * @param array $data - * - * @return Rule * @throws FireflyException */ public function store(array $data): Rule { - $ruleGroup = null; + $ruleGroup = null; if (array_key_exists('rule_group_id', $data)) { $ruleGroup = $this->user->ruleGroups()->find($data['rule_group_id']); } @@ -279,7 +240,7 @@ class RuleRepository implements RuleRepositoryInterface } // start by creating a new rule: - $rule = new Rule(); + $rule = new Rule(); $rule->user()->associate($this->user); $rule->userGroup()->associate($this->user->userGroup); @@ -288,8 +249,8 @@ class RuleRepository implements RuleRepositoryInterface $rule->active = array_key_exists('active', $data) ? $data['active'] : true; $rule->strict = array_key_exists('strict', $data) ? $data['strict'] : false; $rule->stop_processing = array_key_exists('stop_processing', $data) ? $data['stop_processing'] : false; - $rule->title = $data['title']; - $rule->description = array_key_exists('stop_processing', $data) ? $data['stop_processing'] : null; + $rule->title = array_key_exists('title', $data) ? $data['title'] : ''; + $rule->description = array_key_exists('description', $data) ? $data['description'] : ''; $rule->save(); $rule->refresh(); @@ -298,9 +259,9 @@ class RuleRepository implements RuleRepositoryInterface // reset order: $this->resetRuleOrder($ruleGroup); - Log::debug('Done with resetting.'); + app('log')->debug('Done with resetting.'); if (array_key_exists('order', $data)) { - Log::debug(sprintf('User has submitted order %d', $data['order'])); + app('log')->debug(sprintf('User has submitted order %d', $data['order'])); $this->setOrder($rule, $data['order']); } @@ -314,24 +275,15 @@ class RuleRepository implements RuleRepositoryInterface return $rule; } - /** - * @param int $ruleId - * - * @return Rule|null - */ public function find(int $ruleId): ?Rule { return $this->user->rules()->find($ruleId); } - /** - * @param string $moment - * @param Rule $rule - */ private function setRuleTrigger(string $moment, Rule $rule): void { - /** @var RuleTrigger|null $trigger */ - $trigger = $rule->ruleTriggers()->where('trigger_type', 'user_action')->first(); + /** @var null|RuleTrigger $trigger */ + $trigger = $rule->ruleTriggers()->where('trigger_type', 'user_action')->first(); if (null !== $trigger) { $trigger->trigger_value = $moment; $trigger->save(); @@ -348,11 +300,6 @@ class RuleRepository implements RuleRepositoryInterface $trigger->save(); } - /** - * @param RuleGroup $ruleGroup - * - * @return bool - */ public function resetRuleOrder(RuleGroup $ruleGroup): bool { $groupRepository = app(RuleGroupRepositoryInterface::class); @@ -362,66 +309,53 @@ class RuleRepository implements RuleRepositoryInterface return true; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @inheritDoc - */ public function setOrder(Rule $rule, int $newOrder): void { - $oldOrder = (int)$rule->order; - $groupId = (int)$rule->rule_group_id; - $maxOrder = $this->maxOrder($rule->ruleGroup); - $newOrder = $newOrder > $maxOrder ? $maxOrder + 1 : $newOrder; - Log::debug(sprintf('New order will be %d', $newOrder)); + $oldOrder = $rule->order; + $groupId = $rule->rule_group_id; + $maxOrder = $this->maxOrder($rule->ruleGroup); + $newOrder = $newOrder > $maxOrder ? $maxOrder + 1 : $newOrder; + app('log')->debug(sprintf('New order will be %d', $newOrder)); if ($newOrder > $oldOrder) { $this->user->rules() - ->where('rules.rule_group_id', $groupId) - ->where('rules.order', '<=', $newOrder) - ->where('rules.order', '>', $oldOrder) - ->where('rules.id', '!=', $rule->id) - ->decrement('rules.order'); + ->where('rules.rule_group_id', $groupId) + ->where('rules.order', '<=', $newOrder) + ->where('rules.order', '>', $oldOrder) + ->where('rules.id', '!=', $rule->id) + ->decrement('rules.order') + ; $rule->order = $newOrder; - Log::debug(sprintf('Order of rule #%d ("%s") is now %d', $rule->id, $rule->title, $newOrder)); + app('log')->debug(sprintf('Order of rule #%d ("%s") is now %d', $rule->id, $rule->title, $newOrder)); $rule->save(); return; } $this->user->rules() - ->where('rules.rule_group_id', $groupId) - ->where('rules.order', '>=', $newOrder) - ->where('rules.order', '<', $oldOrder) - ->where('rules.id', '!=', $rule->id) - ->increment('rules.order'); + ->where('rules.rule_group_id', $groupId) + ->where('rules.order', '>=', $newOrder) + ->where('rules.order', '<', $oldOrder) + ->where('rules.id', '!=', $rule->id) + ->increment('rules.order') + ; $rule->order = $newOrder; - Log::debug(sprintf('Order of rule #%d ("%s") is now %d', $rule->id, $rule->title, $newOrder)); + app('log')->debug(sprintf('Order of rule #%d ("%s") is now %d', $rule->id, $rule->title, $newOrder)); $rule->save(); } - /** - * @inheritDoc - */ public function maxOrder(RuleGroup $ruleGroup): int { return (int)$ruleGroup->rules()->max('order'); } - /** - * @param Rule $rule - * @param array $data - * - * @return void - */ private function storeTriggers(Rule $rule, array $data): void { $order = 1; @@ -434,7 +368,36 @@ class RuleRepository implements RuleRepositoryInterface $type = sprintf('-%s', $type); } - $triggerValues = [ + // empty the value in case the rule needs no context + // TODO create a helper to automatically return these. + $needTrue = [ + 'reconciled', + 'has_attachments', + 'has_any_category', + 'has_any_budget', + 'has_any_bill', + 'has_any_tag', + 'any_notes', + 'any_external_url', + 'has_no_attachments', + 'has_no_category', + 'has_no_budget', + 'has_no_bill', + 'has_no_tag', + 'no_notes', + 'no_external_url', + 'source_is_cash', + 'destination_is_cash', + 'account_is_cash', + 'exists', + 'no_external_id', + 'any_external_id', + ]; + if (in_array($type, $needTrue, true)) { + $value = ''; + } + + $triggerValues = [ 'action' => $type, 'value' => $value, 'stop_processing' => $stopProcessing, @@ -446,15 +409,9 @@ class RuleRepository implements RuleRepositoryInterface } } - /** - * @param Rule $rule - * @param array $values - * - * @return RuleTrigger - */ public function storeTrigger(Rule $rule, array $values): RuleTrigger { - $ruleTrigger = new RuleTrigger(); + $ruleTrigger = new RuleTrigger(); $ruleTrigger->rule()->associate($rule); $ruleTrigger->order = $values['order']; $ruleTrigger->active = $values['active']; @@ -466,12 +423,6 @@ class RuleRepository implements RuleRepositoryInterface return $ruleTrigger; } - /** - * @param Rule $rule - * @param array $data - * - * @return void - */ private function storeActions(Rule $rule, array $data): void { $order = 1; @@ -491,15 +442,9 @@ class RuleRepository implements RuleRepositoryInterface } } - /** - * @param Rule $rule - * @param array $values - * - * @return RuleAction - */ public function storeAction(Rule $rule, array $values): RuleAction { - $ruleAction = new RuleAction(); + $ruleAction = new RuleAction(); $ruleAction->rule()->associate($rule); $ruleAction->order = $values['order']; $ruleAction->active = $values['active']; @@ -511,12 +456,6 @@ class RuleRepository implements RuleRepositoryInterface return $ruleAction; } - /** - * @param Rule $rule - * @param array $data - * - * @return Rule - */ public function update(Rule $rule, array $data): Rule { // update rule: @@ -530,19 +469,18 @@ class RuleRepository implements RuleRepositoryInterface ]; foreach ($fields as $field) { if (array_key_exists($field, $data)) { - $rule->$field = $data[$field]; + $rule->{$field} = $data[$field]; } } $rule->save(); $rule->refresh(); - $group = $rule->ruleGroup; + $group = $rule->ruleGroup; // update the order: $this->resetRuleOrder($group); if (array_key_exists('order', $data)) { $this->moveRule($rule, $group, (int)$data['order']); } - // update the triggers: if (array_key_exists('trigger', $data) && 'update-journal' === $data['trigger']) { $this->setRuleTrigger('update-journal', $rule); @@ -569,9 +507,6 @@ class RuleRepository implements RuleRepositoryInterface return $rule; } - /** - * @inheritDoc - */ public function moveRule(Rule $rule, RuleGroup $ruleGroup, int $order): Rule { if ($rule->rule_group_id !== $ruleGroup->id) { diff --git a/app/Repositories/Rule/RuleRepositoryInterface.php b/app/Repositories/Rule/RuleRepositoryInterface.php index a38590c6de..96cb48c06d 100644 --- a/app/Repositories/Rule/RuleRepositoryInterface.php +++ b/app/Repositories/Rule/RuleRepositoryInterface.php @@ -36,165 +36,61 @@ use Illuminate\Support\Collection; */ interface RuleRepositoryInterface { - /** - * @return int - */ public function count(): int; - /** - * @param Rule $rule - * - * @return bool - */ public function destroy(Rule $rule): bool; - /** - * @param Rule $rule - * - * @return Rule - */ public function duplicate(Rule $rule): Rule; - /** - * @param int $ruleId - * - * @return Rule|null - */ public function find(int $ruleId): ?Rule; /** * Get all the users rules. - * - * @return Collection */ public function getAll(): Collection; - /** - * @return RuleGroup - */ public function getFirstRuleGroup(): RuleGroup; - /** - * @param RuleGroup $ruleGroup - * - * @return int - */ public function getHighestOrderInRuleGroup(RuleGroup $ruleGroup): int; - /** - * @param Rule $rule - * - * @return string - */ public function getPrimaryTrigger(Rule $rule): string; - /** - * @param Rule $rule - * - * @return Collection - */ public function getRuleActions(Rule $rule): Collection; - /** - * @param Rule $rule - * - * @return Collection - */ public function getRuleTriggers(Rule $rule): Collection; /** * Return search query for rule. - * - * @param Rule $rule - * - * @return string */ public function getSearchQuery(Rule $rule): string; /** * Get all the users rules that trigger on storage. - * - * @return Collection */ public function getStoreRules(): Collection; /** * Get all the users rules that trigger on update. - * - * @return Collection */ public function getUpdateRules(): Collection; - /** - * @param RuleGroup $ruleGroup - * - * @return int - */ public function maxOrder(RuleGroup $ruleGroup): int; - /** - * @param Rule $rule - * @param RuleGroup $ruleGroup - * @param int $order - * - * @return Rule - */ public function moveRule(Rule $rule, RuleGroup $ruleGroup, int $order): Rule; - /** - * @param RuleGroup $ruleGroup - * - * @return bool - */ public function resetRuleOrder(RuleGroup $ruleGroup): bool; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchRule(string $query, int $limit): Collection; - /** - * @param Rule $rule - * @param int $newOrder - */ public function setOrder(Rule $rule, int $newOrder): void; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; - /** - * @param array $data - * - * @return Rule - */ public function store(array $data): Rule; - /** - * @param Rule $rule - * @param array $values - * - * @return RuleAction - */ public function storeAction(Rule $rule, array $values): RuleAction; - /** - * @param Rule $rule - * @param array $values - * - * @return RuleTrigger - */ public function storeTrigger(Rule $rule, array $values): RuleTrigger; - /** - * @param Rule $rule - * @param array $data - * - * @return Rule - */ public function update(Rule $rule, array $data): Rule; } diff --git a/app/Repositories/RuleGroup/RuleGroupRepository.php b/app/Repositories/RuleGroup/RuleGroupRepository.php index d26fe17600..dcfc689bfd 100644 --- a/app/Repositories/RuleGroup/RuleGroupRepository.php +++ b/app/Repositories/RuleGroup/RuleGroupRepository.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\RuleGroup; -use Exception; use FireflyIII\Models\Rule; use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleGroup; @@ -41,9 +40,6 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface { private User $user; - /** - * @inheritDoc - */ public function correctRuleGroupOrder(): void { $set = $this->user @@ -51,40 +47,32 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface ->orderBy('order', 'ASC') ->orderBy('active', 'DESC') ->orderBy('title', 'ASC') - ->get(['rule_groups.id']); + ->get(['rule_groups.id']) + ; $index = 1; + /** @var RuleGroup $ruleGroup */ foreach ($set as $ruleGroup) { if ($ruleGroup->order !== $index) { $ruleGroup->order = $index; $ruleGroup->save(); } - $index++; + ++$index; } } - /** - * @return Collection - */ public function get(): Collection { return $this->user->ruleGroups()->orderBy('order', 'ASC')->get(); } - /** - * @return int - */ public function count(): int { return $this->user->ruleGroups()->count(); } /** - * @param RuleGroup $ruleGroup - * @param RuleGroup|null $moveTo - * - * @return bool - * @throws Exception + * @throws \Exception */ public function destroy(RuleGroup $ruleGroup, ?RuleGroup $moveTo): bool { @@ -92,6 +80,7 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface foreach ($ruleGroup->rules as $rule) { if (null === $moveTo) { $rule->delete(); + continue; } // move @@ -109,9 +98,6 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface return true; } - /** - * @return bool - */ public function resetOrder(): bool { $set = $this->user @@ -119,8 +105,10 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface ->whereNull('deleted_at') ->orderBy('order', 'ASC') ->orderBy('title', 'DESC') - ->get(); + ->get() + ; $count = 1; + /** @var RuleGroup $entry */ foreach ($set as $entry) { if ($entry->order !== $count) { @@ -137,23 +125,20 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface return true; } - /** - * @param RuleGroup $ruleGroup - * - * @return bool - */ public function resetRuleOrder(RuleGroup $ruleGroup): bool { $set = $ruleGroup->rules() - ->orderBy('order', 'ASC') - ->orderBy('title', 'DESC') - ->orderBy('updated_at', 'DESC') - ->get(['rules.*']); + ->orderBy('order', 'ASC') + ->orderBy('title', 'DESC') + ->orderBy('updated_at', 'DESC') + ->get(['rules.*']) + ; $count = 1; + /** @var Rule $entry */ foreach ($set as $entry) { - if ((int)$entry->order !== $count) { - Log::debug(sprintf('Rule #%d was on spot %d but must be on spot %d', $entry->id, $entry->order, $count)); + if ($entry->order !== $count) { + app('log')->debug(sprintf('Rule #%d was on spot %d but must be on spot %d', $entry->id, $entry->order, $count)); $entry->order = $count; $entry->save(); } @@ -166,57 +151,54 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface return true; } - /** - * @param Rule $rule - */ private function resetRuleActionOrder(Rule $rule): void { $actions = $rule->ruleActions() - ->orderBy('order', 'ASC') - ->orderBy('active', 'DESC') - ->orderBy('action_type', 'ASC') - ->get(); + ->orderBy('order', 'ASC') + ->orderBy('active', 'DESC') + ->orderBy('action_type', 'ASC') + ->get() + ; $index = 1; + /** @var RuleAction $action */ foreach ($actions as $action) { - if ((int)$action->order !== $index) { + if ($action->order !== $index) { $action->order = $index; $action->save(); - Log::debug(sprintf('Rule action #%d was on spot %d but must be on spot %d', $action->id, $action->order, $index)); + app('log')->debug(sprintf('Rule action #%d was on spot %d but must be on spot %d', $action->id, $action->order, $index)); } - $index++; + ++$index; } } - /** - * @param Rule $rule - */ private function resetRuleTriggerOrder(Rule $rule): void { $triggers = $rule->ruleTriggers() - ->orderBy('order', 'ASC') - ->orderBy('active', 'DESC') - ->orderBy('trigger_type', 'ASC') - ->get(); + ->orderBy('order', 'ASC') + ->orderBy('active', 'DESC') + ->orderBy('trigger_type', 'ASC') + ->get() + ; $index = 1; + /** @var RuleTrigger $trigger */ foreach ($triggers as $trigger) { - $order = (int)$trigger->order; + $order = $trigger->order; if ($order !== $index) { $trigger->order = $index; $trigger->save(); - Log::debug(sprintf('Rule trigger #%d was on spot %d but must be on spot %d', $trigger->id, $order, $index)); + app('log')->debug(sprintf('Rule trigger #%d was on spot %d but must be on spot %d', $trigger->id, $order, $index)); } - $index++; + ++$index; } } - /** - * @inheritDoc - */ public function destroyAll(): void { + Log::channel('audit')->info('Delete all rule groups through destroyAll'); $groups = $this->get(); + /** @var RuleGroup $group */ foreach ($groups as $group) { $group->rules()->delete(); @@ -224,118 +206,89 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface } } - /** - * @param int $ruleGroupId - * - * @return RuleGroup|null - */ public function find(int $ruleGroupId): ?RuleGroup { return $this->user->ruleGroups()->find($ruleGroupId); } - /** - * @param string $title - * - * @return RuleGroup|null - */ public function findByTitle(string $title): ?RuleGroup { return $this->user->ruleGroups()->where('title', $title)->first(); } - /** - * @return Collection - */ public function getActiveGroups(): Collection { return $this->user->ruleGroups()->with(['rules'])->where('rule_groups.active', true)->orderBy('order', 'ASC')->get(['rule_groups.*']); } - /** - * @param RuleGroup $group - * - * @return Collection - */ public function getActiveRules(RuleGroup $group): Collection { return $group->rules() - ->where('rules.active', true) - ->get(['rules.*']); + ->where('rules.active', true) + ->get(['rules.*']) + ; } - /** - * @param RuleGroup $group - * - * @return Collection - */ public function getActiveStoreRules(RuleGroup $group): Collection { return $group->rules() - ->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id') - ->where('rule_triggers.trigger_type', 'user_action') - ->where('rule_triggers.trigger_value', 'store-journal') - ->where('rules.active', true) - ->get(['rules.*']); + ->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id') + ->where('rule_triggers.trigger_type', 'user_action') + ->where('rule_triggers.trigger_value', 'store-journal') + ->where('rules.active', true) + ->get(['rules.*']) + ; } - /** - * @param RuleGroup $group - * - * @return Collection - */ public function getActiveUpdateRules(RuleGroup $group): Collection { return $group->rules() - ->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id') - ->where('rule_triggers.trigger_type', 'user_action') - ->where('rule_triggers.trigger_value', 'update-journal') - ->where('rules.active', true) - ->get(['rules.*']); + ->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id') + ->where('rule_triggers.trigger_type', 'user_action') + ->where('rule_triggers.trigger_value', 'update-journal') + ->where('rules.active', true) + ->get(['rules.*']) + ; } - /** - * @param string|null $filter - * - * @return Collection - */ public function getAllRuleGroupsWithRules(?string $filter): Collection { $groups = $this->user->ruleGroups() - ->orderBy('order', 'ASC') - ->with( - [ - 'rules' => static function (HasMany $query) { - $query->orderBy('order', 'ASC'); - }, - 'rules.ruleTriggers' => static function (HasMany $query) { - $query->orderBy('order', 'ASC'); - }, - 'rules.ruleActions' => static function (HasMany $query) { - $query->orderBy('order', 'ASC'); - }, - ] - )->get(); + ->orderBy('order', 'ASC') + ->with( + [ + 'rules' => static function (HasMany $query): void { + $query->orderBy('order', 'ASC'); + }, + 'rules.ruleTriggers' => static function (HasMany $query): void { + $query->orderBy('order', 'ASC'); + }, + 'rules.ruleActions' => static function (HasMany $query): void { + $query->orderBy('order', 'ASC'); + }, + ] + )->get() + ; if (null === $filter) { return $groups; } - Log::debug(sprintf('Will filter getRuleGroupsWithRules on "%s".', $filter)); + app('log')->debug(sprintf('Will filter getRuleGroupsWithRules on "%s".', $filter)); return $groups->map( - function (RuleGroup $group) use ($filter) { - Log::debug(sprintf('Now filtering group #%d', $group->id)); + static function (RuleGroup $group) use ($filter) { + app('log')->debug(sprintf('Now filtering group #%d', $group->id)); // filter the rules in the rule group: $group->rules = $group->rules->filter( - function (Rule $rule) use ($filter) { - Log::debug(sprintf('Now filtering rule #%d', $rule->id)); + static function (Rule $rule) use ($filter) { + app('log')->debug(sprintf('Now filtering rule #%d', $rule->id)); foreach ($rule->ruleTriggers as $trigger) { if ('user_action' === $trigger->trigger_type && $filter === $trigger->trigger_value) { - Log::debug(sprintf('Rule #%d triggers on %s, include it.', $rule->id, $filter)); + app('log')->debug(sprintf('Rule #%d triggers on %s, include it.', $rule->id, $filter)); return true; } } - Log::debug(sprintf('Rule #%d does not trigger on %s, do not include it.', $rule->id, $filter)); + app('log')->debug(sprintf('Rule #%d does not trigger on %s, do not include it.', $rule->id, $filter)); return false; } @@ -346,9 +299,6 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface ); } - /** - * @return int - */ public function getHighestOrderRuleGroup(): int { $entry = $this->user->ruleGroups()->max('order'); @@ -356,49 +306,45 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface return (int)$entry; } - /** - * @param string|null $filter - * - * @return Collection - */ public function getRuleGroupsWithRules(?string $filter): Collection { $groups = $this->user->ruleGroups() - ->orderBy('order', 'ASC') - ->where('active', true) - ->with( - [ - 'rules' => static function (HasMany $query) { - $query->orderBy('order', 'ASC'); - }, - 'rules.ruleTriggers' => static function (HasMany $query) { - $query->orderBy('order', 'ASC'); - }, - 'rules.ruleActions' => static function (HasMany $query) { - $query->orderBy('order', 'ASC'); - }, - ] - )->get(); + ->orderBy('order', 'ASC') + ->where('active', true) + ->with( + [ + 'rules' => static function (HasMany $query): void { + $query->orderBy('order', 'ASC'); + }, + 'rules.ruleTriggers' => static function (HasMany $query): void { + $query->orderBy('order', 'ASC'); + }, + 'rules.ruleActions' => static function (HasMany $query): void { + $query->orderBy('order', 'ASC'); + }, + ] + )->get() + ; if (null === $filter) { return $groups; } - Log::debug(sprintf('Will filter getRuleGroupsWithRules on "%s".', $filter)); + app('log')->debug(sprintf('Will filter getRuleGroupsWithRules on "%s".', $filter)); return $groups->map( - function (RuleGroup $group) use ($filter) { - Log::debug(sprintf('Now filtering group #%d', $group->id)); + static function (RuleGroup $group) use ($filter) { + app('log')->debug(sprintf('Now filtering group #%d', $group->id)); // filter the rules in the rule group: $group->rules = $group->rules->filter( - function (Rule $rule) use ($filter) { - Log::debug(sprintf('Now filtering rule #%d', $rule->id)); + static function (Rule $rule) use ($filter) { + app('log')->debug(sprintf('Now filtering rule #%d', $rule->id)); foreach ($rule->ruleTriggers as $trigger) { if ('user_action' === $trigger->trigger_type && $filter === $trigger->trigger_value) { - Log::debug(sprintf('Rule #%d triggers on %s, include it.', $rule->id, $filter)); + app('log')->debug(sprintf('Rule #%d triggers on %s, include it.', $rule->id, $filter)); return true; } } - Log::debug(sprintf('Rule #%d does not trigger on %s, do not include it.', $rule->id, $filter)); + app('log')->debug(sprintf('Rule #%d does not trigger on %s, do not include it.', $rule->id, $filter)); return false; } @@ -409,28 +355,18 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface ); } - /** - * @param RuleGroup $group - * - * @return Collection - */ public function getRules(RuleGroup $group): Collection { return $group->rules() - ->get(['rules.*']); + ->get(['rules.*']) + ; } - /** - * @inheritDoc - */ public function maxOrder(): int { return (int)$this->user->ruleGroups()->where('active', true)->max('order'); } - /** - * @inheritDoc - */ public function searchRuleGroup(string $query, int $limit): Collection { $search = $this->user->ruleGroups(); @@ -438,26 +374,19 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface $search->where('rule_groups.title', 'LIKE', sprintf('%%%s%%', $query)); } $search->orderBy('rule_groups.order', 'ASC') - ->orderBy('rule_groups.title', 'ASC'); + ->orderBy('rule_groups.title', 'ASC') + ; return $search->take($limit)->get(['id', 'title', 'description']); } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @param array $data - * - * @return RuleGroup - */ public function store(array $data): RuleGroup { $newRuleGroup = new RuleGroup( @@ -479,38 +408,31 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface return $newRuleGroup; } - /** - * @inheritDoc - */ public function setOrder(RuleGroup $ruleGroup, int $newOrder): void { - $oldOrder = (int)$ruleGroup->order; + $oldOrder = $ruleGroup->order; if ($newOrder > $oldOrder) { $this->user->ruleGroups()->where('rule_groups.order', '<=', $newOrder)->where('rule_groups.order', '>', $oldOrder) - ->where('rule_groups.id', '!=', $ruleGroup->id) - ->decrement('order'); + ->where('rule_groups.id', '!=', $ruleGroup->id) + ->decrement('order') + ; $ruleGroup->order = $newOrder; - Log::debug(sprintf('Order of group #%d ("%s") is now %d', $ruleGroup->id, $ruleGroup->title, $newOrder)); + app('log')->debug(sprintf('Order of group #%d ("%s") is now %d', $ruleGroup->id, $ruleGroup->title, $newOrder)); $ruleGroup->save(); return; } $this->user->ruleGroups()->where('rule_groups.order', '>=', $newOrder)->where('rule_groups.order', '<', $oldOrder) - ->where('rule_groups.id', '!=', $ruleGroup->id) - ->increment('order'); + ->where('rule_groups.id', '!=', $ruleGroup->id) + ->increment('order') + ; $ruleGroup->order = $newOrder; - Log::debug(sprintf('Order of group #%d ("%s") is now %d', $ruleGroup->id, $ruleGroup->title, $newOrder)); + app('log')->debug(sprintf('Order of group #%d ("%s") is now %d', $ruleGroup->id, $ruleGroup->title, $newOrder)); $ruleGroup->save(); } - /** - * @param RuleGroup $ruleGroup - * @param array $data - * - * @return RuleGroup - */ public function update(RuleGroup $ruleGroup, array $data): RuleGroup { // update the account: diff --git a/app/Repositories/RuleGroup/RuleGroupRepositoryInterface.php b/app/Repositories/RuleGroup/RuleGroupRepositoryInterface.php index 9bb34dfc2e..d334fbb473 100644 --- a/app/Repositories/RuleGroup/RuleGroupRepositoryInterface.php +++ b/app/Repositories/RuleGroup/RuleGroupRepositoryInterface.php @@ -38,17 +38,8 @@ interface RuleGroupRepositoryInterface */ public function correctRuleGroupOrder(): void; - /** - * @return int - */ public function count(): int; - /** - * @param RuleGroup $ruleGroup - * @param RuleGroup|null $moveTo - * - * @return bool - */ public function destroy(RuleGroup $ruleGroup, ?RuleGroup $moveTo): bool; /** @@ -56,131 +47,50 @@ interface RuleGroupRepositoryInterface */ public function destroyAll(): void; - /** - * @param int $ruleGroupId - * - * @return RuleGroup|null - */ public function find(int $ruleGroupId): ?RuleGroup; - /** - * @param string $title - * - * @return RuleGroup|null - */ public function findByTitle(string $title): ?RuleGroup; /** * Get all rule groups. - * - * @return Collection */ public function get(): Collection; - /** - * @return Collection - */ public function getActiveGroups(): Collection; - /** - * @param RuleGroup $group - * - * @return Collection - */ public function getActiveRules(RuleGroup $group): Collection; - /** - * @param RuleGroup $group - * - * @return Collection - */ public function getActiveStoreRules(RuleGroup $group): Collection; - /** - * @param RuleGroup $group - * - * @return Collection - */ public function getActiveUpdateRules(RuleGroup $group): Collection; /** * Also inactive groups. - * - * @param string|null $filter - * - * @return Collection */ public function getAllRuleGroupsWithRules(?string $filter): Collection; - /** - * @return int - */ public function getHighestOrderRuleGroup(): int; - /** - * @param string|null $filter - * - * @return Collection - */ public function getRuleGroupsWithRules(?string $filter): Collection; - /** - * @param RuleGroup $group - * - * @return Collection - */ public function getRules(RuleGroup $group): Collection; /** * Get highest possible order for a rule group. - * - * @return int */ public function maxOrder(): int; - /** - * @return bool - */ public function resetOrder(): bool; - /** - * @param RuleGroup $ruleGroup - * - * @return bool - */ public function resetRuleOrder(RuleGroup $ruleGroup): bool; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchRuleGroup(string $query, int $limit): Collection; - /** - * @param RuleGroup $ruleGroup - * @param int $newOrder - */ public function setOrder(RuleGroup $ruleGroup, int $newOrder): void; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; - /** - * @param array $data - * - * @return RuleGroup - */ public function store(array $data): RuleGroup; - /** - * @param RuleGroup $ruleGroup - * @param array $data - * - * @return RuleGroup - */ public function update(RuleGroup $ruleGroup, array $data): RuleGroup; } diff --git a/app/Repositories/Tag/OperationsRepository.php b/app/Repositories/Tag/OperationsRepository.php index 874afc2f4e..334bf8009d 100644 --- a/app/Repositories/Tag/OperationsRepository.php +++ b/app/Repositories/Tag/OperationsRepository.php @@ -30,53 +30,43 @@ use FireflyIII\Models\TransactionType; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** - * * Class OperationsRepository */ class OperationsRepository implements OperationsRepositoryInterface { - /** @var User */ - private $user; + private User $user; /** * This method returns a list of all the withdrawal transaction journals (as arrays) set in that period * which have the specified tag(s) set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $tags - * - * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function listExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $tags = null): array { /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user)->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL]); + $tagIds = []; if (null !== $accounts && $accounts->count() > 0) { $collector->setAccounts($accounts); } if (null !== $tags && $tags->count() > 0) { $collector->setTags($tags); + $tagIds = $tags->pluck('id')->toArray(); } - if (null === $tags || (null !== $tags && 0 === $tags->count())) { + if (null === $tags || 0 === $tags->count()) { $collector->setTags($this->getTags()); + $tagIds = $this->getTags()->pluck('id')->toArray(); } - $collector->withCategoryInformation()->withAccountInformation()->withBudgetInformation()->withTagInformation(); + $collector->withCategoryInformation()->withAccountInformation()->withBudgetInformation(); $journals = $collector->getExtractedJournals(); $array = []; $listedJournals = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $currencyId = (int)$journal['currency_id']; + $array[$currencyId] ??= [ 'tags' => [], 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], @@ -87,15 +77,19 @@ class OperationsRepository implements OperationsRepositoryInterface // may have multiple tags: foreach ($journal['tags'] as $tag) { - $tagId = (int)$tag['id']; - $tagName = (string)$tag['name']; - $journalId = (int)$journal['transaction_journal_id']; + $tagId = (int)$tag['id']; + $tagName = (string)$tag['name']; + $journalId = (int)$journal['transaction_journal_id']; + if (!in_array($tagId, $tagIds, true)) { + continue; + } + // TODO not sure what this check does. if (in_array($journalId, $listedJournals, true)) { continue; } - $listedJournals[] = $journalId; - $array[$currencyId]['tags'][$tagId] = $array[$currencyId]['tags'][$tagId] ?? [ + $listedJournals[] = $journalId; + $array[$currencyId]['tags'][$tagId] ??= [ 'id' => $tagId, 'name' => $tagName, 'transaction_journals' => [], @@ -119,23 +113,16 @@ class OperationsRepository implements OperationsRepositoryInterface return $array; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @return Collection - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ private function getTags(): Collection { + /** @var TagRepositoryInterface $repository */ $repository = app(TagRepositoryInterface::class); return $repository->get(); @@ -145,29 +132,23 @@ class OperationsRepository implements OperationsRepositoryInterface * This method returns a list of all the deposit transaction journals (as arrays) set in that period * which have the specified tag(s) set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $tags - * - * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $tags = null): array { /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user)->setRange($start, $end)->setTypes([TransactionType::DEPOSIT]); + $tagIds = []; if (null !== $accounts && $accounts->count() > 0) { $collector->setAccounts($accounts); } if (null !== $tags && $tags->count() > 0) { $collector->setTags($tags); + $tagIds = $tags->pluck('id')->toArray(); } - if (null === $tags || (null !== $tags && 0 === $tags->count())) { + if (null === $tags || 0 === $tags->count()) { $collector->setTags($this->getTags()); + $tagIds = $this->getTags()->pluck('id')->toArray(); } $collector->withCategoryInformation()->withAccountInformation()->withBudgetInformation()->withTagInformation(); $journals = $collector->getExtractedJournals(); @@ -175,8 +156,8 @@ class OperationsRepository implements OperationsRepositoryInterface $listedJournals = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $array[$currencyId] = $array[$currencyId] ?? [ + $currencyId = (int)$journal['currency_id']; + $array[$currencyId] ??= [ 'tags' => [], 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], @@ -187,16 +168,20 @@ class OperationsRepository implements OperationsRepositoryInterface // may have multiple tags: foreach ($journal['tags'] as $tag) { - $tagId = (int)$tag['id']; - $tagName = (string)$tag['name']; - $journalId = (int)$journal['transaction_journal_id']; + $tagId = (int)$tag['id']; + $tagName = (string)$tag['name']; + $journalId = (int)$journal['transaction_journal_id']; + + if (!in_array($tagId, $tagIds, true)) { + continue; + } if (in_array($journalId, $listedJournals, true)) { continue; } - $listedJournals[] = $journalId; + $listedJournals[] = $journalId; - $array[$currencyId]['tags'][$tagId] = $array[$currencyId]['tags'][$tagId] ?? [ + $array[$currencyId]['tags'][$tagId] ??= [ 'id' => $tagId, 'name' => $tagName, 'transaction_journals' => [], @@ -222,12 +207,6 @@ class OperationsRepository implements OperationsRepositoryInterface /** * Sum of withdrawal journals in period for a set of tags, grouped per currency. Amounts are always negative. * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $tags - * - * @return array * @throws FireflyException */ public function sumExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $tags = null): array @@ -238,12 +217,6 @@ class OperationsRepository implements OperationsRepositoryInterface /** * Sum of income journals in period for a set of tags, grouped per currency. Amounts are always positive. * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $tags - * - * @return array * @throws FireflyException */ public function sumIncome(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $tags = null): array diff --git a/app/Repositories/Tag/OperationsRepositoryInterface.php b/app/Repositories/Tag/OperationsRepositoryInterface.php index aecd897518..b0143054c7 100644 --- a/app/Repositories/Tag/OperationsRepositoryInterface.php +++ b/app/Repositories/Tag/OperationsRepositoryInterface.php @@ -30,8 +30,6 @@ use Illuminate\Support\Collection; /** * Interface OperationsRepositoryInterface - * - * @package FireflyIII\Repositories\Tag */ interface OperationsRepositoryInterface { @@ -39,13 +37,6 @@ interface OperationsRepositoryInterface * This method returns a list of all the withdrawal transaction journals (as arrays) set in that period * which have the specified tag(s) set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $tags - * - * @return array */ public function listExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $tags = null): array; @@ -53,42 +44,18 @@ interface OperationsRepositoryInterface * This method returns a list of all the deposit transaction journals (as arrays) set in that period * which have the specified tag(s) set to them. It's grouped per currency, with as few details in the array * as possible. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $tags - * - * @return array */ public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $tags = null): array; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** * Sum of withdrawal journals in period for a set of tags, grouped per currency. Amounts are always negative. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $tags - * - * @return array */ public function sumExpenses(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $tags = null): array; /** * Sum of income journals in period for a set of tags, grouped per currency. Amounts are always positive. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection|null $accounts - * @param Collection|null $tags - * - * @return array */ public function sumIncome(Carbon $start, Carbon $end, ?Collection $accounts = null, ?Collection $tags = null): array; } diff --git a/app/Repositories/Tag/TagRepository.php b/app/Repositories/Tag/TagRepository.php index 6b64f7e81f..052487081d 100644 --- a/app/Repositories/Tag/TagRepository.php +++ b/app/Repositories/Tag/TagRepository.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Tag; use Carbon\Carbon; -use DB; -use Exception; use FireflyIII\Factory\TagFactory; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\Attachment; @@ -37,33 +35,25 @@ use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; -use Storage; /** * Class TagRepository. - * */ class TagRepository implements TagRepositoryInterface { private User $user; - /** - * @return int - */ public function count(): int { return $this->user->tags()->count(); } /** - * @param Tag $tag - * - * @return bool - * @throws Exception + * @throws \Exception */ public function destroy(Tag $tag): bool { - DB::table('tag_transaction_journal')->where('tag_id', $tag->id)->delete(); + \DB::table('tag_transaction_journal')->where('tag_id', $tag->id)->delete(); $tag->transactionJournals()->sync([]); $tag->delete(); @@ -75,29 +65,21 @@ class TagRepository implements TagRepositoryInterface */ public function destroyAll(): void { + Log::channel('audit')->info('Delete all tags through destroyAll'); $tags = $this->get(); + /** @var Tag $tag */ foreach ($tags as $tag) { - DB::table('tag_transaction_journal')->where('tag_id', $tag->id)->delete(); + \DB::table('tag_transaction_journal')->where('tag_id', $tag->id)->delete(); $tag->delete(); } } - /** - * @return Collection - */ public function get(): Collection { - return $this->user->tags()->orderBy('tag', 'ASC')->get(); + return $this->user->tags()->orderBy('tag', 'ASC')->get(['tags.*']); } - /** - * @param Tag $tag - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ public function expenseInPeriod(Tag $tag, Carbon $start, Carbon $end): array { /** @var GroupCollectorInterface $collector */ @@ -109,61 +91,41 @@ class TagRepository implements TagRepositoryInterface return $collector->getExtractedJournals(); } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @param int $tagId - * - * @return Tag|null - */ public function find(int $tagId): ?Tag { return $this->user->tags()->find($tagId); } - /** - * @param string $tag - * - * @return Tag|null - */ public function findByTag(string $tag): ?Tag { - /** @var Tag|null */ + // @var Tag|null return $this->user->tags()->where('tag', $tag)->first(); } - /** - * @param Tag $tag - * - * @return Carbon|null - */ public function firstUseDate(Tag $tag): ?Carbon { - /** @var Carbon|null */ + // @var Carbon|null return $tag->transactionJournals()->orderBy('date', 'ASC')->first()?->date; } - /** - * @inheritDoc - */ public function getAttachments(Tag $tag): Collection { - $set = $tag->attachments()->get(); - /** @var Storage $disk */ - $disk = Storage::disk('upload'); + $set = $tag->attachments()->get(); + + /** @var \Storage $disk */ + $disk = \Storage::disk('upload'); return $set->each( - static function (Attachment $attachment) use ($disk) { - /** @var Note $note */ - $note = $attachment->notes()->first(); + static function (Attachment $attachment) use ($disk): void { + /** @var null|Note $note */ + $note = $attachment->notes()->first(); // only used in v1 view of tags $attachment->file_exists = $disk->exists($attachment->fileName()); $attachment->notes_text = null === $note ? '' : $note->text; @@ -171,28 +133,24 @@ class TagRepository implements TagRepositoryInterface ); } - /** - * @param int|null $year - * - * @return array - */ public function getTagsInYear(?int $year): array { // get all tags in the year (if present): - $tagQuery = $this->user->tags()->with(['locations', 'attachments'])->orderBy('tags.tag'); + $tagQuery = $this->user->tags()->with(['locations', 'attachments'])->orderBy('tags.tag'); // add date range (or not): if (null === $year) { - Log::debug('Get tags without a date.'); + app('log')->debug('Get tags without a date.'); $tagQuery->whereNull('tags.date'); } if (null !== $year) { - Log::debug(sprintf('Get tags with year %s.', $year)); - $tagQuery->where('tags.date', '>=', $year . '-01-01 00:00:00')->where('tags.date', '<=', $year . '-12-31 23:59:59'); + app('log')->debug(sprintf('Get tags with year %s.', $year)); + $tagQuery->where('tags.date', '>=', $year.'-01-01 00:00:00')->where('tags.date', '<=', $year.'-12-31 23:59:59'); } $collection = $tagQuery->get(); $return = []; + /** @var Tag $tag */ foreach ($collection as $tag) { // return value for tag cloud: @@ -208,13 +166,6 @@ class TagRepository implements TagRepositoryInterface return $return; } - /** - * @param Tag $tag - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ public function incomeInPeriod(Tag $tag, Carbon $start, Carbon $end): array { /** @var GroupCollectorInterface $collector */ @@ -226,43 +177,29 @@ class TagRepository implements TagRepositoryInterface return $collector->getExtractedJournals(); } - /** - * @param Tag $tag - * - * @return Carbon|null - */ public function lastUseDate(Tag $tag): ?Carbon { - /** @var Carbon|null */ + // @var Carbon|null return $tag->transactionJournals()->orderBy('date', 'DESC')->first()?->date; } /** * Will return the newest tag (if known) or NULL. - * - * @return Tag|null */ public function newestTag(): ?Tag { - /** @var Tag|null */ + // @var Tag|null return $this->user->tags()->whereNotNull('date')->orderBy('date', 'DESC')->first(); } - /** - * @return Tag|null - */ public function oldestTag(): ?Tag { - /** @var Tag|null */ + // @var Tag|null return $this->user->tags()->whereNotNull('date')->orderBy('date', 'ASC')->first(); } /** * Find one or more tags based on the query. - * - * @param string $query - * - * @return Collection */ public function searchTag(string $query): Collection { @@ -273,11 +210,6 @@ class TagRepository implements TagRepositoryInterface /** * Search the users tags. - * - * @param string $query - * @param int $limit - * - * @return Collection */ public function searchTags(string $query, int $limit): Collection { @@ -291,11 +223,6 @@ class TagRepository implements TagRepositoryInterface return $tags->take($limit)->get('tags.*'); } - /** - * @param array $data - * - * @return Tag - */ public function store(array $data): Tag { /** @var TagFactory $factory */ @@ -305,14 +232,6 @@ class TagRepository implements TagRepositoryInterface return $factory->create($data); } - /** - * @param Tag $tag - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return array - * - */ public function sumsOfTag(Tag $tag, ?Carbon $start, ?Carbon $end): array { /** @var GroupCollectorInterface $collector */ @@ -323,14 +242,25 @@ class TagRepository implements TagRepositoryInterface } $collector->setTag($tag)->withAccountInformation(); - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); - $sums = []; + $sums = []; /** @var array $journal */ foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $sums[$currencyId] = $sums[$currencyId] ?? [ + $found = false; + + /** @var array $localTag */ + foreach ($journal['tags'] as $localTag) { + if ($localTag['id'] === $tag->id) { + $found = true; + } + } + if (false === $found) { + continue; + } + $currencyId = (int)$journal['currency_id']; + $sums[$currencyId] ??= [ 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], 'currency_symbol' => $journal['currency_symbol'], @@ -343,16 +273,16 @@ class TagRepository implements TagRepositoryInterface ]; // add amount to correct type: - $amount = app('steam')->positive((string)$journal['amount']); - $type = $journal['transaction_type_type']; + $amount = app('steam')->positive((string)$journal['amount']); + $type = $journal['transaction_type_type']; if (TransactionType::WITHDRAWAL === $type) { $amount = bcmul($amount, '-1'); } $sums[$currencyId][$type] = bcadd($sums[$currencyId][$type], $amount); - $foreignCurrencyId = $journal['foreign_currency_id']; + $foreignCurrencyId = $journal['foreign_currency_id']; if (null !== $foreignCurrencyId && 0 !== $foreignCurrencyId) { - $sums[$foreignCurrencyId] = $sums[$foreignCurrencyId] ?? [ + $sums[$foreignCurrencyId] ??= [ 'currency_id' => $foreignCurrencyId, 'currency_name' => $journal['foreign_currency_name'], 'currency_symbol' => $journal['foreign_currency_symbol'], @@ -364,7 +294,7 @@ class TagRepository implements TagRepositoryInterface TransactionType::OPENING_BALANCE => '0', ]; // add foreign amount to correct type: - $amount = app('steam')->positive((string)$journal['foreign_amount']); + $amount = app('steam')->positive((string)$journal['foreign_amount']); if (TransactionType::WITHDRAWAL === $type) { $amount = bcmul($amount, '-1'); } @@ -375,13 +305,20 @@ class TagRepository implements TagRepositoryInterface return $sums; } - /** - * @param Tag $tag - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ + public function tagEndsWith(string $query): Collection + { + $search = sprintf('%%%s', $query); + + return $this->user->tags()->where('tag', 'LIKE', $search)->get(['tags.*']); + } + + public function tagStartsWith(string $query): Collection + { + $search = sprintf('%s%%', $query); + + return $this->user->tags()->where('tag', 'LIKE', $search)->get(['tags.*']); + } + public function transferredInPeriod(Tag $tag, Carbon $start, Carbon $end): array { /** @var GroupCollectorInterface $collector */ @@ -392,12 +329,6 @@ class TagRepository implements TagRepositoryInterface return $collector->getExtractedJournals(); } - /** - * @param Tag $tag - * @param array $data - * - * @return Tag - */ public function update(Tag $tag, array $data): Tag { if (array_key_exists('tag', $data)) { @@ -428,7 +359,7 @@ class TagRepository implements TagRepositoryInterface // otherwise, update or create. if (!(null === $data['latitude'] && null === $data['longitude'] && null === $data['zoom_level'])) { - $location = $this->getLocation($tag); + $location = $this->getLocation($tag); if (null === $location) { $location = new Location(); $location->locatable()->associate($tag); @@ -447,12 +378,9 @@ class TagRepository implements TagRepositoryInterface return $tag; } - /** - * @inheritDoc - */ public function getLocation(Tag $tag): ?Location { - /** @var Location|null */ + // @var Location|null return $tag->locations()->first(); } } diff --git a/app/Repositories/Tag/TagRepositoryInterface.php b/app/Repositories/Tag/TagRepositoryInterface.php index 8343eb4725..d81efa1cf4 100644 --- a/app/Repositories/Tag/TagRepositoryInterface.php +++ b/app/Repositories/Tag/TagRepositoryInterface.php @@ -35,17 +35,10 @@ use Illuminate\Support\Collection; */ interface TagRepositoryInterface { - /** - * @return int - */ public function count(): int; /** * This method destroys a tag. - * - * @param Tag $tag - * - * @return bool */ public function destroy(Tag $tag): bool; @@ -54,156 +47,78 @@ interface TagRepositoryInterface */ public function destroyAll(): void; - /** - * @param Tag $tag - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ public function expenseInPeriod(Tag $tag, Carbon $start, Carbon $end): array; - /** - * @param int $tagId - * - * @return Tag|null - */ public function find(int $tagId): ?Tag; - /** - * @param string $tag - * - * @return Tag|null - */ public function findByTag(string $tag): ?Tag; - /** - * @param Tag $tag - * - * @return Carbon|null - */ public function firstUseDate(Tag $tag): ?Carbon; /** * This method returns all the user's tags. - * - * @return Collection */ public function get(): Collection; - /** - * @param Tag $tag - * - * @return Collection - */ public function getAttachments(Tag $tag): Collection; /** * Return location, or NULL. - * - * @param Tag $tag - * - * @return Location|null */ public function getLocation(Tag $tag): ?Location; - /** - * @param int|null $year - * - * @return array - */ public function getTagsInYear(?int $year): array; - /** - * @param Tag $tag - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ public function incomeInPeriod(Tag $tag, Carbon $start, Carbon $end): array; - /** - * @param Tag $tag - * - * @return Carbon|null - */ public function lastUseDate(Tag $tag): ?Carbon; /** * Will return the newest tag (if known) or NULL. - * - * @return Tag|null */ public function newestTag(): ?Tag; /** * Will return the newest tag (if known) or NULL. - * - * @return Tag|null */ public function oldestTag(): ?Tag; /** * Find one or more tags based on the query. - * - * @param string $query - * - * @return Collection */ public function searchTag(string $query): Collection; /** * Search the users tags. - * - * @param string $query - * @param int $limit - * - * @return Collection */ public function searchTags(string $query, int $limit): Collection; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** * This method stores a tag. - * - * @param array $data - * - * @return Tag */ public function store(array $data): Tag; /** * Calculates various amounts in tag. - * - * @param Tag $tag - * @param Carbon|null $start - * @param Carbon|null $end - * - * @return array */ public function sumsOfTag(Tag $tag, ?Carbon $start, ?Carbon $end): array; /** - * @param Tag $tag - * @param Carbon $start - * @param Carbon $end - * - * @return array + * Find one or more tags that start with the string in the query */ + public function tagEndsWith(string $query): Collection; + + /** + * Find one or more tags that start with the string in the query + */ + public function tagStartsWith(string $query): Collection; + public function transferredInPeriod(Tag $tag, Carbon $start, Carbon $end): array; /** * Update a tag. - * - * @param Tag $tag - * @param array $data - * - * @return Tag */ public function update(Tag $tag, array $data): Tag; } diff --git a/app/Repositories/TransactionGroup/TransactionGroupRepository.php b/app/Repositories/TransactionGroup/TransactionGroupRepository.php index 860d03187d..0d79d53085 100644 --- a/app/Repositories/TransactionGroup/TransactionGroupRepository.php +++ b/app/Repositories/TransactionGroup/TransactionGroupRepository.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\TransactionGroup; use Carbon\Carbon; -use DB; -use Exception; use FireflyIII\Exceptions\DuplicateTransactionException; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\TransactionGroupFactory; @@ -48,8 +46,6 @@ use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class TransactionGroupRepository @@ -58,9 +54,6 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface { private User $user; - /** - * @inheritDoc - */ public function countAttachments(int $journalId): int { /** @var TransactionJournal $journal */ @@ -71,33 +64,24 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface /** * Find a transaction group by its ID. - * - * @param int $groupId - * - * @return TransactionGroup|null */ public function find(int $groupId): ?TransactionGroup { return $this->user->transactionGroups()->find($groupId); } - /** - * @param TransactionGroup $group - */ public function destroy(TransactionGroup $group): void { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); $service = new TransactionGroupDestroyService(); $service->destroy($group); } - /** - * @inheritDoc - */ public function expandGroup(TransactionGroup $group): array { $result = $group->toArray(); $result['transaction_journals'] = []; + /** @var TransactionJournal $journal */ foreach ($group->transactionJournals as $journal) { $result['transaction_journals'][] = $this->expandJournal($journal); @@ -106,11 +90,6 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface return $result; } - /** - * @param TransactionJournal $journal - * - * @return array - */ private function expandJournal(TransactionJournal $journal): array { $array = $journal->toArray(); @@ -133,11 +112,6 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface return $array; } - /** - * @param Transaction $transaction - * - * @return array - */ private function expandTransaction(Transaction $transaction): array { $array = $transaction->toArray(); @@ -158,29 +132,27 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface /** * Return all attachments for all journals in the group. - * - * @param TransactionGroup $group - * - * @return array */ public function getAttachments(TransactionGroup $group): array { $repository = app(AttachmentRepositoryInterface::class); $repository->setUser($this->user); - $journals = $group->transactionJournals->pluck('id')->toArray(); - $set = Attachment::whereIn('attachable_id', $journals) - ->where('attachable_type', TransactionJournal::class) - ->where('uploaded', true) - ->whereNull('deleted_at')->get(); + $journals = $group->transactionJournals->pluck('id')->toArray(); + $set = Attachment::whereIn('attachable_id', $journals) + ->where('attachable_type', TransactionJournal::class) + ->where('uploaded', true) + ->whereNull('deleted_at')->get() + ; + + $result = []; - $result = []; /** @var Attachment $attachment */ foreach ($set as $attachment) { - $journalId = (int)$attachment->attachable_id; - $result[$journalId] = $result[$journalId] ?? []; - $current = $attachment->toArray(); - $current['file_exists'] = true; - $current['notes'] = $repository->getNoteText($attachment); + $journalId = $attachment->attachable_id; + $result[$journalId] ??= []; + $current = $attachment->toArray(); + $current['file_exists'] = true; + $current['notes'] = $repository->getNoteText($attachment); // already determined that this attachable is a TransactionJournal. $current['journal_title'] = $attachment->attachable->description; // @phpstan-ignore-line $result[$journalId][] = $current; @@ -189,29 +161,23 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface return $result; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } /** * Get the note text for a journal (by ID). - * - * @param int $journalId - * - * @return string|null */ public function getNoteText(int $journalId): ?string { - /** @var Note|null $note */ + /** @var null|Note $note */ $note = Note::where('noteable_id', $journalId) - ->where('noteable_type', TransactionJournal::class) - ->first(); + ->where('noteable_type', TransactionJournal::class) + ->first() + ; if (null === $note) { return null; } @@ -221,28 +187,26 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface /** * Return all journal links for all journals in the group. - * - * @param TransactionGroup $group - * - * @return array */ public function getLinks(TransactionGroup $group): array { $return = []; $journals = $group->transactionJournals->pluck('id')->toArray(); $set = TransactionJournalLink::where( - static function (Builder $q) use ($journals) { + static function (Builder $q) use ($journals): void { $q->whereIn('source_id', $journals); $q->orWhereIn('destination_id', $journals); } ) - ->with(['source', 'destination', 'source.transactions']) - ->leftJoin('link_types', 'link_types.id', '=', 'journal_links.link_type_id') - ->get(['journal_links.*', 'link_types.inward', 'link_types.outward', 'link_types.editable']); + ->with(['source', 'destination', 'source.transactions']) + ->leftJoin('link_types', 'link_types.id', '=', 'journal_links.link_type_id') + ->get(['journal_links.*', 'link_types.inward', 'link_types.outward', 'link_types.editable']) + ; + /** @var TransactionJournalLink $entry */ foreach ($set as $entry) { - $journalId = in_array($entry->source_id, $journals, true) ? $entry->source_id : $entry->destination_id; - $return[$journalId] = $return[$journalId] ?? []; + $journalId = in_array($entry->source_id, $journals, true) ? $entry->source_id : $entry->destination_id; + $return[$journalId] ??= []; // phpstan: the editable field is provided by the query. @@ -277,11 +241,6 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface return $return; } - /** - * @param TransactionJournal $journal - * - * @return string - */ private function getFormattedAmount(TransactionJournal $journal): string { /** @var Transaction $transaction */ @@ -300,11 +259,6 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface return $return; } - /** - * @param TransactionJournal $journal - * - * @return string - */ private function getFormattedForeignAmount(TransactionJournal $journal): string { /** @var Transaction $transaction */ @@ -315,10 +269,10 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface if (0 === bccomp('0', $transaction->foreign_amount)) { return ''; } - $currency = $transaction->foreignCurrency; - $type = $journal->transactionType->type; - $amount = app('steam')->positive($transaction->foreign_amount); - $return = ''; + $currency = $transaction->foreignCurrency; + $type = $journal->transactionType->type; + $amount = app('steam')->positive($transaction->foreign_amount); + $return = ''; if (TransactionType::WITHDRAWAL === $type) { $return = app('amount')->formatAnything($currency, app('steam')->negative($amount)); } @@ -329,9 +283,6 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface return $return; } - /** - * @inheritDoc - */ public function getLocation(int $journalId): ?Location { /** @var TransactionJournal $journal */ @@ -343,19 +294,16 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface /** * Return object with all found meta field things as Carbon objects. * - * @param int $journalId - * @param array $fields - * - * @return NullArrayObject - * @throws Exception + * @throws \Exception */ public function getMetaDateFields(int $journalId, array $fields): NullArrayObject { - $query = DB::table('journal_meta') - ->where('transaction_journal_id', $journalId) - ->whereIn('name', $fields) - ->whereNull('deleted_at') - ->get(['name', 'data']); + $query = \DB::table('journal_meta') + ->where('transaction_journal_id', $journalId) + ->whereIn('name', $fields) + ->whereNull('deleted_at') + ->get(['name', 'data']) + ; $return = []; foreach ($query as $row) { @@ -367,19 +315,15 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface /** * Return object with all found meta field things. - * - * @param int $journalId - * @param array $fields - * - * @return NullArrayObject */ public function getMetaFields(int $journalId, array $fields): NullArrayObject { - $query = DB::table('journal_meta') - ->where('transaction_journal_id', $journalId) - ->whereIn('name', $fields) - ->whereNull('deleted_at') - ->get(['name', 'data']); + $query = \DB::table('journal_meta') + ->where('transaction_journal_id', $journalId) + ->whereIn('name', $fields) + ->whereNull('deleted_at') + ->get(['name', 'data']) + ; $return = []; foreach ($query as $row) { @@ -392,38 +336,33 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface /** * Return all piggy bank events for all journals in the group. * - * @param TransactionGroup $group - * - * @return array * @throws FireflyException - * @throws JsonException */ public function getPiggyEvents(TransactionGroup $group): array { $return = []; $journals = $group->transactionJournals->pluck('id')->toArray(); - $currency = app('amount')->getDefaultCurrencyByUser($this->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); $data = PiggyBankEvent::whereIn('transaction_journal_id', $journals) - ->with('piggyBank', 'piggyBank.account') - ->get(['piggy_bank_events.*']); + ->with('piggyBank', 'piggyBank.account') + ->get(['piggy_bank_events.*']) + ; + /** @var PiggyBankEvent $row */ foreach ($data as $row) { if (null === $row->piggyBank) { continue; } // get currency preference. - $currencyPreference = AccountMeta::where('account_id', $row->piggyBank->account_id) - ->where('name', 'currency_id') - ->first(); + $currencyPreference = AccountMeta::where('account_id', $row->piggyBank->account_id) + ->where('name', 'currency_id') + ->first() + ; if (null !== $currencyPreference) { $currency = TransactionCurrency::where('id', $currencyPreference->data)->first(); } - if (null === $currencyPreference) { - $currencyCode = app('preferences')->getForUser($this->user, 'currencyPreference', 'EUR')->data; - $currency = TransactionCurrency::where('code', $currencyCode)->first(); - } - $journalId = (int)$row->transaction_journal_id; - $return[$journalId] = $return[$journalId] ?? []; + $journalId = $row->transaction_journal_id; + $return[$journalId] ??= []; $return[$journalId][] = [ 'piggy' => $row->piggyBank->name, @@ -435,9 +374,6 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface return $return; } - /** - * @inheritDoc - */ public function getTagObjects(int $journalId): Collection { /** @var TransactionJournal $journal */ @@ -448,54 +384,45 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface /** * Get the tags for a journal (by ID). - * - * @param int $journalId - * - * @return array */ public function getTags(int $journalId): array { - $result = DB::table('tag_transaction_journal') - ->leftJoin('tags', 'tag_transaction_journal.tag_id', '=', 'tags.id') - ->where('tag_transaction_journal.transaction_journal_id', $journalId) - ->orderBy('tags.tag', 'ASC') - ->get(['tags.tag']); + $result = \DB::table('tag_transaction_journal') + ->leftJoin('tags', 'tag_transaction_journal.tag_id', '=', 'tags.id') + ->where('tag_transaction_journal.transaction_journal_id', $journalId) + ->orderBy('tags.tag', 'ASC') + ->get(['tags.tag']) + ; return $result->pluck('tag')->toArray(); } /** - * @param array $data - * - * @return TransactionGroup * @throws DuplicateTransactionException * @throws FireflyException - * @throws JsonException */ public function store(array $data): TransactionGroup { /** @var TransactionGroupFactory $factory */ $factory = app(TransactionGroupFactory::class); $factory->setUser($this->user); + try { return $factory->create($data); } catch (DuplicateTransactionException $e) { app('log')->warning('Group repository caught group factory with a duplicate exception!'); + throw new DuplicateTransactionException($e->getMessage(), 0, $e); } catch (FireflyException $e) { app('log')->warning('Group repository caught group factory with an exception!'); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($e->getMessage(), 0, $e); } } /** - * @param TransactionGroup $transactionGroup - * @param array $data - * - * @return TransactionGroup - * * @throws DuplicateTransactionException * @throws FireflyException */ diff --git a/app/Repositories/TransactionGroup/TransactionGroupRepositoryInterface.php b/app/Repositories/TransactionGroup/TransactionGroupRepositoryInterface.php index 8056677ee9..dfe1405ab7 100644 --- a/app/Repositories/TransactionGroup/TransactionGroupRepositoryInterface.php +++ b/app/Repositories/TransactionGroup/TransactionGroupRepositoryInterface.php @@ -37,130 +37,70 @@ use Illuminate\Support\Collection; */ interface TransactionGroupRepositoryInterface { - /** - * @param int $journalId - * - * @return int - */ public function countAttachments(int $journalId): int; - /** - * @param TransactionGroup $group - */ public function destroy(TransactionGroup $group): void; /** * Return a group and expand all meta data etc. - * - * @param TransactionGroup $group - * - * @return array */ public function expandGroup(TransactionGroup $group): array; /** * Find a transaction group by its ID. - * - * @param int $groupId - * - * @return TransactionGroup|null */ public function find(int $groupId): ?TransactionGroup; /** * Return all attachments for all journals in the group. - * - * @param TransactionGroup $group - * - * @return array */ public function getAttachments(TransactionGroup $group): array; /** * Return all journal links for all journals in the group. - * - * @param TransactionGroup $group - * - * @return array */ public function getLinks(TransactionGroup $group): array; /** * Get the location of a journal or NULL. - * - * @param int $journalId - * - * @return Location|null */ public function getLocation(int $journalId): ?Location; /** * Return object with all found meta field things as Carbon objects. - * - * @param int $journalId - * @param array $fields - * - * @return NullArrayObject */ public function getMetaDateFields(int $journalId, array $fields): NullArrayObject; /** * Return object with all found meta field things. - * - * @param int $journalId - * @param array $fields - * - * @return NullArrayObject */ public function getMetaFields(int $journalId, array $fields): NullArrayObject; /** * Get the note text for a journal (by ID). - * - * @param int $journalId - * - * @return string|null */ public function getNoteText(int $journalId): ?string; /** * Return all piggy bank events for all journals in the group. - * - * @param TransactionGroup $group - * - * @return array */ public function getPiggyEvents(TransactionGroup $group): array; /** * Get the tags for a journal (by ID) as Tag objects. - * - * @param int $journalId - * - * @return Collection */ public function getTagObjects(int $journalId): Collection; /** * Get the tags for a journal (by ID). - * - * @param int $journalId - * - * @return array */ public function getTags(int $journalId): array; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; /** * Create a new transaction group. * - * @param array $data - * - * @return TransactionGroup * @throws DuplicateTransactionException * @throws FireflyException */ @@ -168,11 +108,6 @@ interface TransactionGroupRepositoryInterface /** * Update an existing transaction group. - * - * @param TransactionGroup $transactionGroup - * @param array $data - * - * @return TransactionGroup */ public function update(TransactionGroup $transactionGroup, array $data): TransactionGroup; } diff --git a/app/Repositories/TransactionType/TransactionTypeRepository.php b/app/Repositories/TransactionType/TransactionTypeRepository.php index e5db6a1308..4e47c0cffa 100644 --- a/app/Repositories/TransactionType/TransactionTypeRepository.php +++ b/app/Repositories/TransactionType/TransactionTypeRepository.php @@ -25,42 +25,30 @@ namespace FireflyIII\Repositories\TransactionType; use FireflyIII\Models\TransactionType; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class TransactionTypeRepository */ class TransactionTypeRepository implements TransactionTypeRepositoryInterface { - /** - * @param TransactionType|null $type - * @param string|null $typeString - * - * @return TransactionType - */ public function findTransactionType(?TransactionType $type, ?string $typeString): TransactionType { - Log::debug('Now looking for a transaction type.'); + app('log')->debug('Now looking for a transaction type.'); if (null !== $type) { - Log::debug(sprintf('Found $type in parameters, its %s. Will return it.', $type->type)); + app('log')->debug(sprintf('Found $type in parameters, its %s. Will return it.', $type->type)); return $type; } - $typeString = $typeString ?? TransactionType::WITHDRAWAL; - $search = $this->findByType($typeString); + $typeString ??= TransactionType::WITHDRAWAL; + $search = $this->findByType($typeString); if (null === $search) { $search = $this->findByType(TransactionType::WITHDRAWAL); } - Log::debug(sprintf('Tried to search for "%s", came up with "%s". Will return it.', $typeString, $search->type)); + app('log')->debug(sprintf('Tried to search for "%s", came up with "%s". Will return it.', $typeString, $search->type)); return $search; } - /** - * @param string $type - * - * @return TransactionType|null - */ public function findByType(string $type): ?TransactionType { $search = ucfirst($type); @@ -68,12 +56,6 @@ class TransactionTypeRepository implements TransactionTypeRepositoryInterface return TransactionType::whereType($search)->first(); } - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchTypes(string $query, int $limit): Collection { if ('' === $query) { diff --git a/app/Repositories/TransactionType/TransactionTypeRepositoryInterface.php b/app/Repositories/TransactionType/TransactionTypeRepositoryInterface.php index ff4c4b296f..862111f101 100644 --- a/app/Repositories/TransactionType/TransactionTypeRepositoryInterface.php +++ b/app/Repositories/TransactionType/TransactionTypeRepositoryInterface.php @@ -31,26 +31,9 @@ use Illuminate\Support\Collection; */ interface TransactionTypeRepositoryInterface { - /** - * @param string $type - * - * @return TransactionType|null - */ public function findByType(string $type): ?TransactionType; - /** - * @param TransactionType|null $type - * @param string|null $typeString - * - * @return TransactionType - */ public function findTransactionType(?TransactionType $type, ?string $typeString): TransactionType; - /** - * @param string $query - * @param int $limit - * - * @return Collection - */ public function searchTypes(string $query, int $limit): Collection; } diff --git a/app/Repositories/User/UserRepository.php b/app/Repositories/User/UserRepository.php index 73b9c1edad..8cb3b53854 100644 --- a/app/Repositories/User/UserRepository.php +++ b/app/Repositories/User/UserRepository.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Repositories\User; -use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\BudgetLimit; use FireflyIII\Models\GroupMembership; @@ -34,12 +33,9 @@ use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Database\QueryException; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Str; /** * Class UserRepository. - * */ class UserRepository implements UserRepositoryInterface { @@ -47,21 +43,17 @@ class UserRepository implements UserRepositoryInterface * This updates the users email address and records some things so it can be confirmed or undone later. * The user is blocked until the change is confirmed. * - * @param User $user - * @param string $newEmail + * @throws \Exception * - * @return bool - * @throws Exception * @see updateEmail - * */ public function changeEmail(User $user, string $newEmail): bool { - $oldEmail = $user->email; + $oldEmail = $user->email; // save old email as pref app('preferences')->setForUser($user, 'previous_email_latest', $oldEmail); - app('preferences')->setForUser($user, 'previous_email_' . date('Y-m-d-H-i-s'), $oldEmail); + app('preferences')->setForUser($user, 'previous_email_'.date('Y-m-d-H-i-s'), $oldEmail); // set undo and confirm token: app('preferences')->setForUser($user, 'email_change_undo_token', bin2hex(random_bytes(16))); @@ -76,12 +68,6 @@ class UserRepository implements UserRepositoryInterface return true; } - /** - * @param User $user - * @param string $password - * - * @return bool - */ public function changePassword(User $user, string $password): bool { $user->password = bcrypt($password); @@ -90,13 +76,6 @@ class UserRepository implements UserRepositoryInterface return true; } - /** - * @param User $user - * @param bool $isBlocked - * @param string $code - * - * @return bool - */ public function changeStatus(User $user, bool $isBlocked, string $code): bool { // change blocked status and code: @@ -107,36 +86,23 @@ class UserRepository implements UserRepositoryInterface return true; } - /** - * @param string $name - * @param string $displayName - * @param string $description - * - * @return Role - */ public function createRole(string $name, string $displayName, string $description): Role { return Role::create(['name' => $name, 'display_name' => $displayName, 'description' => $description]); } - /** - * @inheritDoc - */ public function deleteInvite(InvitedUser $invite): void { - Log::debug(sprintf('Deleting invite #%d', $invite->id)); + app('log')->debug(sprintf('Deleting invite #%d', $invite->id)); $invite->delete(); } /** - * @param User $user - * - * @return bool - * @throws Exception + * @throws \Exception */ public function destroy(User $user): bool { - Log::debug(sprintf('Calling delete() on user %d', $user->id)); + app('log')->debug(sprintf('Calling delete() on user %d', $user->id)); $user->groupMemberships()->delete(); $user->delete(); @@ -145,43 +111,30 @@ class UserRepository implements UserRepositoryInterface return true; } - /** - * @inheritDoc - */ public function deleteEmptyGroups(): void { $groups = UserGroup::get(); + /** @var UserGroup $group */ foreach ($groups as $group) { $count = $group->groupMemberships()->count(); if (0 === $count) { - Log::info(sprintf('Deleted empty group #%d ("%s")', $group->id, $group->title)); + app('log')->info(sprintf('Deleted empty group #%d ("%s")', $group->id, $group->title)); $group->delete(); } } } - /** - * @return int - */ public function count(): int { return $this->all()->count(); } - /** - * @return Collection - */ public function all(): Collection { return User::orderBy('id', 'DESC')->get(['users.*']); } - /** - * @param string $email - * - * @return User|null - */ public function findByEmail(string $email): ?User { return User::where('email', $email)->first(); @@ -189,30 +142,20 @@ class UserRepository implements UserRepositoryInterface /** * Returns the first user in the DB. Generally only works when there is just one. - * - * @return null|User */ public function first(): ?User { return User::orderBy('id', 'ASC')->first(); } - /** - * @inheritDoc - */ public function getInvitedUsers(): Collection { return InvitedUser::with('user')->get(); } - /** - * @param User $user - * - * @return string|null - */ public function getRoleByUser(User $user): ?string { - /** @var Role|null $role */ + /** @var null|Role $role */ $role = $user->roles()->first(); if (null !== $role) { return $role->name; @@ -222,31 +165,27 @@ class UserRepository implements UserRepositoryInterface } /** - * @inheritDoc * @throws FireflyException */ public function getRolesInGroup(User $user, int $groupId): array { - /** @var UserGroup $group */ - $group = UserGroup::find($groupId); + /** @var null|UserGroup $group */ + $group = UserGroup::find($groupId); if (null === $group) { throw new FireflyException(sprintf('Could not find group #%d', $groupId)); } $memberships = $group->groupMemberships()->where('user_id', $user->id)->get(); $roles = []; + /** @var GroupMembership $membership */ foreach ($memberships as $membership) { $role = $membership->userRole; $roles[] = $role->title; } + return $roles; } - /** - * @param int $userId - * - * @return User|null - */ public function find(int $userId): ?User { return User::find($userId); @@ -254,17 +193,13 @@ class UserRepository implements UserRepositoryInterface /** * Return basic user information. - * - * @param User $user - * - * @return array */ public function getUserData(User $user): array { - $return = []; + $return = []; // two factor: - $return['has_2fa'] = $user->mfa_secret !== null; + $return['has_2fa'] = null !== $user->mfa_secret; $return['is_admin'] = $this->hasRole($user, 'owner'); $return['blocked'] = 1 === (int)$user->blocked; $return['blocked_code'] = $user->blocked_code; @@ -277,11 +212,12 @@ class UserRepository implements UserRepositoryInterface $return['categories'] = $user->categories()->count(); $return['budgets'] = $user->budgets()->count(); $return['budgets_with_limits'] = BudgetLimit::distinct() - ->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') - ->where('amount', '>', 0) - ->whereNull('budgets.deleted_at') - ->where('budgets.user_id', $user->id) - ->count('budget_limits.budget_id'); + ->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') + ->where('amount', '>', 0) + ->whereNull('budgets.deleted_at') + ->where('budgets.user_id', $user->id) + ->count('budget_limits.budget_id') + ; $return['rule_groups'] = $user->ruleGroups()->count(); $return['rules'] = $user->rules()->count(); $return['tags'] = $user->tags()->count(); @@ -289,37 +225,30 @@ class UserRepository implements UserRepositoryInterface return $return; } - /** - * @param User|Authenticatable|null $user - * @param string $role - * - * @return bool - */ - public function hasRole(User | Authenticatable | null $user, string $role): bool + public function hasRole(null|Authenticatable|User $user, string $role): bool { if (null === $user) { return false; } - /** @var Role $userRole */ - foreach ($user->roles as $userRole) { - if ($userRole->name === $role) { - return true; + if ($user instanceof User) { + /** @var Role $userRole */ + foreach ($user->roles as $userRole) { + if ($userRole->name === $role) { + return true; + } } } return false; } - /** - * @inheritDoc - */ - public function inviteUser(User | Authenticatable | null $user, string $email): InvitedUser + public function inviteUser(null|Authenticatable|User $user, string $email): InvitedUser { - $now = today(config('app.timezone')); + $now = today(config('app.timezone')); $now->addDays(2); - $invitee = new InvitedUser(); + $invitee = new InvitedUser(); $invitee->user()->associate($user); - $invitee->invite_code = Str::random(64); + $invitee->invite_code = \Str::random(64); $invitee->email = $email; $invitee->redeemed = false; $invitee->expires = $now; @@ -328,13 +257,10 @@ class UserRepository implements UserRepositoryInterface return $invitee; } - /** - * @inheritDoc - */ public function redeemCode(string $code): void { $obj = InvitedUser::where('invite_code', $code)->where('redeemed', 0)->first(); - if ($obj) { + if (null !== $obj) { $obj->redeemed = true; $obj->save(); } @@ -342,9 +268,6 @@ class UserRepository implements UserRepositoryInterface /** * Set MFA code. - * - * @param User $user - * @param string|null $code */ public function setMFACode(User $user, ?string $code): void { @@ -352,11 +275,6 @@ class UserRepository implements UserRepositoryInterface $user->save(); } - /** - * @param array $data - * - * @return User - */ public function store(array $data): User { $user = User::create( @@ -364,7 +282,7 @@ class UserRepository implements UserRepositoryInterface 'blocked' => $data['blocked'] ?? false, 'blocked_code' => $data['blocked_code'] ?? null, 'email' => $data['email'], - 'password' => Str::random(24), + 'password' => \Str::random(24), ] ); $role = $data['role'] ?? ''; @@ -375,17 +293,11 @@ class UserRepository implements UserRepositoryInterface return $user; } - /** - * @param User $user - * @param string $role - * - * @return bool - */ public function attachRole(User $user, string $role): bool { $roleObject = Role::where('name', $role)->first(); if (null === $roleObject) { - Log::error(sprintf('Could not find role "%s" in attachRole()', $role)); + app('log')->error(sprintf('Could not find role "%s" in attachRole()', $role)); return false; } @@ -394,15 +306,12 @@ class UserRepository implements UserRepositoryInterface $user->roles()->attach($roleObject); } catch (QueryException $e) { // don't care - Log::error(sprintf('Query exception when giving user a role: %s', $e->getMessage())); + app('log')->error(sprintf('Query exception when giving user a role: %s', $e->getMessage())); } return true; } - /** - * @param User $user - */ public function unblockUser(User $user): void { $user->blocked = false; @@ -413,10 +322,6 @@ class UserRepository implements UserRepositoryInterface /** * Update user info. * - * @param User $user - * @param array $data - * - * @return User * @throws FireflyException */ public function update(User $user, array $data): User @@ -442,11 +347,8 @@ class UserRepository implements UserRepositoryInterface * This updates the users email address. Same as changeEmail just without most logging. This makes sure that the * undo/confirm routine can't catch this one. The user is NOT blocked. * - * @param User $user - * @param string $newEmail - * - * @return bool * @throws FireflyException + * * @see changeEmail */ public function updateEmail(User $user, string $newEmail): bool @@ -454,11 +356,11 @@ class UserRepository implements UserRepositoryInterface if ('' === $newEmail) { return true; } - $oldEmail = $user->email; + $oldEmail = $user->email; // save old email as pref app('preferences')->setForUser($user, 'admin_previous_email_latest', $oldEmail); - app('preferences')->setForUser($user, 'admin_previous_email_' . date('Y-m-d-H-i-s'), $oldEmail); + app('preferences')->setForUser($user, 'admin_previous_email_'.date('Y-m-d-H-i-s'), $oldEmail); $user->email = $newEmail; $user->save(); @@ -468,9 +370,6 @@ class UserRepository implements UserRepositoryInterface /** * Remove any role the user has. - * - * @param User $user - * @param string $role */ public function removeRole(User $user, string $role): void { @@ -481,23 +380,16 @@ class UserRepository implements UserRepositoryInterface $user->roles()->detach($roleObj->id); } - /** - * @param string $role - * - * @return Role|null - */ public function getRole(string $role): ?Role { return Role::where('name', $role)->first(); } - /** - * @inheritDoc - */ public function validateInviteCode(string $code): bool { $now = today(config('app.timezone')); $invitee = InvitedUser::where('invite_code', $code)->where('expires', '>', $now->format('Y-m-d H:i:s'))->where('redeemed', 0)->first(); + return null !== $invitee; } } diff --git a/app/Repositories/User/UserRepositoryInterface.php b/app/Repositories/User/UserRepositoryInterface.php index 3803d385ce..a76e8d770e 100644 --- a/app/Repositories/User/UserRepositoryInterface.php +++ b/app/Repositories/User/UserRepositoryInterface.php @@ -36,18 +36,11 @@ interface UserRepositoryInterface { /** * Returns a collection of all users. - * - * @return Collection */ public function all(): Collection; /** * Gives a user a role. - * - * @param User $user - * @param string $role - * - * @return bool */ public function attachRole(User $user, string $role): bool; @@ -55,182 +48,74 @@ interface UserRepositoryInterface * This updates the users email address and records some things so it can be confirmed or undone later. * The user is blocked until the change is confirmed. * - * @param User $user - * @param string $newEmail - * - * @return bool * @see updateEmail - * */ public function changeEmail(User $user, string $newEmail): bool; /** - * @param User $user - * @param string $password - * * @return mixed */ public function changePassword(User $user, string $password); - /** - * @param User $user - * @param bool $isBlocked - * @param string $code - * - * @return bool - */ public function changeStatus(User $user, bool $isBlocked, string $code): bool; /** * Returns a count of all users. - * - * @return int */ public function count(): int; - /** - * @param string $name - * @param string $displayName - * @param string $description - * - * @return Role - */ public function createRole(string $name, string $displayName, string $description): Role; - /** - * - */ public function deleteEmptyGroups(): void; - /** - * @param InvitedUser $invite - * - * @return void - */ public function deleteInvite(InvitedUser $invite): void; - /** - * @param User $user - * - * @return bool - */ public function destroy(User $user): bool; - /** - * @param int $userId - * - * @return User|null - */ public function find(int $userId): ?User; - /** - * @param string $email - * - * @return User|null - */ public function findByEmail(string $email): ?User; /** * Returns the first user in the DB. Generally only works when there is just one. - * - * @return null|User */ public function first(): ?User; - /** - * @return Collection - */ public function getInvitedUsers(): Collection; - /** - * @param string $role - * - * @return Role|null - */ public function getRole(string $role): ?Role; - /** - * @param User $user - * - * @return string|null - */ public function getRoleByUser(User $user): ?string; - /** - * @param User $user - * @param int $groupId - * - * @return array - */ public function getRolesInGroup(User $user, int $groupId): array; /** * Return basic user information. - * - * @param User $user - * - * @return array */ public function getUserData(User $user): array; - /** - * @param User|Authenticatable|null $user - * @param string $role - * - * @return bool - */ - public function hasRole(User | Authenticatable | null $user, string $role): bool; + public function hasRole(null|Authenticatable|User $user, string $role): bool; - /** - * @param User|Authenticatable|null $user - * @param string $email - * - * @return InvitedUser - */ - public function inviteUser(User | Authenticatable | null $user, string $email): InvitedUser; + public function inviteUser(null|Authenticatable|User $user, string $email): InvitedUser; - /** - * @param string $code - * - * @return void - */ public function redeemCode(string $code): void; /** * Remove any role the user has. - * - * @param User $user - * @param string $role */ public function removeRole(User $user, string $role): void; /** * Set MFA code. - * - * @param User $user - * @param string|null $code */ public function setMFACode(User $user, ?string $code): void; - /** - * @param array $data - * - * @return User - */ public function store(array $data): User; - /** - * @param User $user - */ public function unblockUser(User $user): void; /** * Update user info. - * - * @param User $user - * @param array $data - * - * @return User */ public function update(User $user, array $data): User; @@ -238,19 +123,9 @@ interface UserRepositoryInterface * This updates the users email address. Same as changeEmail just without most logging. This makes sure that the * undo/confirm routine can't catch this one. The user is NOT blocked. * - * @param User $user - * @param string $newEmail - * - * @return bool * @see changeEmail - * */ public function updateEmail(User $user, string $newEmail): bool; - /** - * @param string $code - * - * @return bool - */ public function validateInviteCode(string $code): bool; } diff --git a/app/Repositories/UserGroup/UserGroupRepository.php b/app/Repositories/UserGroup/UserGroupRepository.php index 7be53c78f8..e27805fc2c 100644 --- a/app/Repositories/UserGroup/UserGroupRepository.php +++ b/app/Repositories/UserGroup/UserGroupRepository.php @@ -1,6 +1,5 @@ debug(sprintf('Going to destroy user group #%d ("%s").', $userGroup->id, $userGroup->title)); $memberships = $userGroup->groupMemberships()->get(); + /** @var GroupMembership $membership */ foreach ($memberships as $membership) { - /** @var User $user */ - $user = $membership->user()->first(); + /** @var null|User $user */ + $user = $membership->user()->first(); if (null === $user) { continue; } @@ -70,6 +66,7 @@ class UserGroupRepository implements UserGroupRepositoryInterface // user has other memberships, select one at random and assign it to the user. if ($count > 0) { app('log')->debug('User has other memberships and will be assigned a new administration.'); + /** @var GroupMembership $first */ $first = $user->groupMemberships()->where('user_group_id', '!=', $userGroup->id)->inRandomOrder()->first(); $user->user_group_id = $first->id; @@ -81,11 +78,11 @@ class UserGroupRepository implements UserGroupRepositoryInterface // all users are now moved away from user group. // time to DESTROY all objects. // we have to do this one by one to trigger the necessary observers :( - $objects = ['availableBudgets', 'bills', 'budgets', 'categories', 'currencyExchangeRates', 'objectGroups', - 'recurrences', 'rules', 'ruleGroups', 'tags', 'transactionGroups', 'transactionJournals', 'piggyBanks', 'accounts', 'webhooks', + $objects = ['availableBudgets', 'bills', 'budgets', 'categories', 'currencyExchangeRates', 'objectGroups', + 'recurrences', 'rules', 'ruleGroups', 'tags', 'transactionGroups', 'transactionJournals', 'piggyBanks', 'accounts', 'webhooks', ]; foreach ($objects as $object) { - foreach ($userGroup->$object()->get() as $item) { + foreach ($userGroup->{$object}()->get() as $item) { // @phpstan-ignore-line $item->delete(); } } @@ -96,30 +93,28 @@ class UserGroupRepository implements UserGroupRepositoryInterface /** * Returns all groups the user is member in. * - * @inheritDoc + * {@inheritDoc} */ public function get(): Collection { $collection = new Collection(); $memberships = $this->user->groupMemberships()->get(); + /** @var GroupMembership $membership */ foreach ($memberships as $membership) { - /** @var UserGroup $group */ + /** @var null|UserGroup $group */ $group = $membership->userGroup()->first(); if (null !== $group) { $collection->push($group); } } + return $collection; } /** * Because there is the chance that a group with this name already exists, * Firefly III runs a little loop of combinations to make sure the group name is unique. - * - * @param User $user - * - * @return UserGroup */ private function createNewUserGroup(User $user): UserGroup { @@ -131,119 +126,125 @@ class UserGroupRepository implements UserGroupRepositoryInterface $existingGroup = $this->findByName($groupName); if (null === $existingGroup) { $exists = false; + + /** @var null|UserGroup $existingGroup */ $existingGroup = $this->store(['user' => $user, 'title' => $groupName]); } if (null !== $existingGroup) { // group already exists - $groupName = sprintf('%s-%s', $user->email, substr(sha1((string)(rand(1000, 9999) . microtime())), 0, 4)); + $groupName = sprintf('%s-%s', $user->email, substr(sha1(rand(1000, 9999).microtime()), 0, 4)); } - $loop++; + ++$loop; } + return $existingGroup; } - /** - * @param string $title - * - * @return UserGroup|null - */ public function findByName(string $title): ?UserGroup { return UserGroup::whereTitle($title)->first(); } /** - * @param array $data - * - * @return UserGroup * @throws FireflyException */ public function store(array $data): UserGroup { $data['user'] = $this->user; + /** @var UserGroupFactory $factory */ - $factory = app(UserGroupFactory::class); + $factory = app(UserGroupFactory::class); + return $factory->create($data); } /** * Returns all groups. * - * @inheritDoc + * {@inheritDoc} */ public function getAll(): Collection { return UserGroup::all(); } - /** - * @inheritDoc - */ - public function setUser(Authenticatable | User | null $user): void + public function setUser(null|Authenticatable|User $user): void { app('log')->debug(sprintf('Now in %s', __METHOD__)); - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @inheritDoc - */ public function update(UserGroup $userGroup, array $data): UserGroup { $userGroup->title = $data['title']; $userGroup->save(); + return $userGroup; } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.NPathComplexity) + * * @throws FireflyException */ public function updateMembership(UserGroup $userGroup, array $data): UserGroup { - $owner = UserRole::whereTitle(UserRoleEnum::OWNER)->first(); + $owner = UserRole::whereTitle(UserRoleEnum::OWNER)->first(); app('log')->debug('in update membership'); - $user = null; + + /** @var null|User $user */ + $user = null; if (array_key_exists('id', $data)) { + /** @var null|User $user */ $user = User::find($data['id']); app('log')->debug('Found user by ID'); } if (array_key_exists('email', $data) && '' !== (string)$data['email']) { + /** @var null|User $user */ $user = User::whereEmail($data['email'])->first(); app('log')->debug('Found user by email'); } if (null === $user) { // should throw error, but validator already catches this. app('log')->debug('No user found'); + return $userGroup; } // count the number of members in the group right now: - $membershipCount = $userGroup->groupMemberships()->distinct()->get(['group_memberships.user_id'])->count(); + $membershipCount = $userGroup->groupMemberships()->distinct()->count('group_memberships.user_id'); // if it's 1: if (1 === $membershipCount) { - $lastUserId = (int)$userGroup->groupMemberships()->distinct()->first(['group_memberships.user_id'])->user_id; + $lastUserId = $userGroup->groupMemberships()->distinct()->first(['group_memberships.user_id'])->user_id; // if this is also the user we're editing right now, and we remove all of their roles: if ($lastUserId === (int)$user->id && 0 === count($data['roles'])) { app('log')->debug('User is last in this group, refuse to act'); + throw new FireflyException('You cannot remove the last member from this user group. Delete the user group instead.'); } // if this is also the user we're editing right now, and do not grant them the owner role: if ($lastUserId === (int)$user->id && count($data['roles']) > 0 && !in_array(UserRoleEnum::OWNER->value, $data['roles'], true)) { app('log')->debug('User needs to have owner role in this group, refuse to act'); + throw new FireflyException('The last member in this user group must get or keep the "owner" role.'); } } if ($membershipCount > 1) { // group has multiple members. How many are owner, except the user we're editing now? $ownerCount = $userGroup->groupMemberships() - ->where('user_role_id', $owner->id) - ->where('user_id', '!=', $user->id)->count(); + ->where('user_role_id', $owner->id) + ->where('user_id', '!=', $user->id)->count() + ; // if there are no other owners and the current users does not get or keep the owner role, refuse. - if (0 === $ownerCount && (0 === count($data['roles']) || (count($data['roles']) > 0 && !in_array(UserRoleEnum::OWNER->value, $data['roles'], true)))) { + if ( + 0 === $ownerCount + && (0 === count($data['roles']) + || (count($data['roles']) > 0 // @phpstan-ignore-line + && !in_array(UserRoleEnum::OWNER->value, $data['roles'], true)))) { app('log')->debug('User needs to keep owner role in this group, refuse to act'); + throw new FireflyException('The last owner in this user group must keep the "owner" role.'); } } @@ -255,31 +256,30 @@ class UserGroupRepository implements UserGroupRepositoryInterface foreach ($rolesSimplified as $role) { try { $enum = UserRoleEnum::from($role); - } catch (ValueError $e) { + } catch (\ValueError $e) { // TODO error message continue; } $userRole = UserRole::whereTitle($enum->value)->first(); $user->groupMemberships()->create(['user_group_id' => $userGroup->id, 'user_role_id' => $userRole->id]); } + return $userGroup; } - /** - * @param array $roles - * - * @return array - */ private function simplifyListByName(array $roles): array { if (in_array(UserRoleEnum::OWNER->value, $roles, true)) { - app('log')->debug(sprintf('List of roles is [%1$s] but this includes "%2$s", so return [%2$s]', join(',', $roles), UserRoleEnum::OWNER->value)); + app('log')->debug(sprintf('List of roles is [%1$s] but this includes "%2$s", so return [%2$s]', implode(',', $roles), UserRoleEnum::OWNER->value)); + return [UserRoleEnum::OWNER->value]; } if (in_array(UserRoleEnum::FULL->value, $roles, true)) { - app('log')->debug(sprintf('List of roles is [%1$s] but this includes "%2$s", so return [%2$s]', join(',', $roles), UserRoleEnum::FULL->value)); + app('log')->debug(sprintf('List of roles is [%1$s] but this includes "%2$s", so return [%2$s]', implode(',', $roles), UserRoleEnum::FULL->value)); + return [UserRoleEnum::FULL->value]; } + return $roles; } } diff --git a/app/Repositories/UserGroup/UserGroupRepositoryInterface.php b/app/Repositories/UserGroup/UserGroupRepositoryInterface.php index 0cc3bf1cf6..2d2789804e 100644 --- a/app/Repositories/UserGroup/UserGroupRepositoryInterface.php +++ b/app/Repositories/UserGroup/UserGroupRepositoryInterface.php @@ -1,6 +1,5 @@ userGroup->accounts(); + $dbQuery = $this->userGroup + ->accounts() + ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') + ->where('accounts.active', true) + ->where( + static function (EloquentBuilder $q1) use ($number): void { // @phpstan-ignore-line + $json = json_encode($number); + $q1->where('account_meta.name', '=', 'account_number'); + $q1->where('account_meta.data', '=', $json); + } + ) + ; + + if (0 !== count($types)) { + $dbQuery->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id'); + $dbQuery->whereIn('account_types.type', $types); + } + + // @var Account|null + return $dbQuery->first(['accounts.*']); + } + + public function findByIbanNull(string $iban, array $types): ?Account + { + $query = $this->userGroup->accounts()->where('iban', '!=', '')->whereNotNull('iban'); if (0 !== count($types)) { $query->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id'); $query->whereIn('account_types.type', $types); } - Log::debug(sprintf('Searching for account named "%s" (of user #%d) of the following type(s)', $name, $this->user->id), ['types' => $types]); + + // @var Account|null + return $query->where('iban', $iban)->first(['accounts.*']); + } + + public function findByName(string $name, array $types): ?Account + { + $query = $this->userGroup->accounts(); + + if (0 !== count($types)) { + $query->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id'); + $query->whereIn('account_types.type', $types); + } + app('log')->debug(sprintf('Searching for account named "%s" (of user #%d) of the following type(s)', $name, $this->user->id), ['types' => $types]); $query->where('accounts.name', $name); - /** @var Account $account */ + + /** @var null|Account $account */ $account = $query->first(['accounts.*']); if (null === $account) { - Log::debug(sprintf('There is no account with name "%s" of types', $name), $types); + app('log')->debug(sprintf('There is no account with name "%s" of types', $name), $types); return null; } - Log::debug(sprintf('Found #%d (%s) with type id %d', $account->id, $account->name, $account->account_type_id)); + app('log')->debug(sprintf('Found #%d (%s) with type id %d', $account->id, $account->name, $account->account_type_id)); return $account; } - /** - * @param Account $account - * - * @return TransactionCurrency|null - */ public function getAccountCurrency(Account $account): ?TransactionCurrency { - $type = $account->accountType->type; - $list = config('firefly.valid_currency_account_types'); + $type = $account->accountType->type; + $list = config('firefly.valid_currency_account_types'); // return null if not in this list. if (!in_array($type, $list, true)) { @@ -91,16 +119,11 @@ class AccountRepository implements AccountRepositoryInterface /** * Return meta value for account. Null if not found. - * - * @param Account $account - * @param string $field - * - * @return null|string */ public function getMetaValue(Account $account, string $field): ?string { $result = $account->accountMeta->filter( - function (AccountMeta $meta) use ($field) { + static function (AccountMeta $meta) use ($field) { return strtolower($meta->name) === strtolower($field); } ); @@ -114,25 +137,16 @@ class AccountRepository implements AccountRepositoryInterface return null; } - /** - * @param int $accountId - * - * @return Account|null - */ public function find(int $accountId): ?Account { $account = $this->user->accounts()->find($accountId); if (null === $account) { $account = $this->userGroup->accounts()->find($accountId); } + return $account; } - /** - * @param array $accountIds - * - * @return Collection - */ public function getAccountsById(array $accountIds): Collection { $query = $this->userGroup->accounts(); @@ -147,9 +161,6 @@ class AccountRepository implements AccountRepositoryInterface return $query->get(['accounts.*']); } - /** - * @inheritDoc - */ public function getAccountsByType(array $types, ?array $sort = []): Collection { $res = array_intersect([AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT], $types); @@ -172,14 +183,10 @@ class AccountRepository implements AccountRepositoryInterface $query->orderBy('accounts.active', 'DESC'); $query->orderBy('accounts.name', 'ASC'); } + return $query->get(['accounts.*']); } - /** - * @param array $types - * - * @return Collection - */ public function getActiveAccountsByType(array $types): Collection { $query = $this->userGroup->accounts(); @@ -194,18 +201,16 @@ class AccountRepository implements AccountRepositoryInterface return $query->get(['accounts.*']); } - /** - * @inheritDoc - */ public function searchAccount(string $query, array $types, int $limit): Collection { // search by group, not by user $dbQuery = $this->userGroup->accounts() - ->where('active', true) - ->orderBy('accounts.order', 'ASC') - ->orderBy('accounts.account_type_id', 'ASC') - ->orderBy('accounts.name', 'ASC') - ->with(['accountType']); + ->where('active', true) + ->orderBy('accounts.order', 'ASC') + ->orderBy('accounts.account_type_id', 'ASC') + ->orderBy('accounts.name', 'ASC') + ->with(['accountType']) + ; if ('' !== $query) { // split query on spaces just in case: $parts = explode(' ', $query); diff --git a/app/Repositories/UserGroups/Account/AccountRepositoryInterface.php b/app/Repositories/UserGroups/Account/AccountRepositoryInterface.php index 379615acbe..bd0b8116fb 100644 --- a/app/Repositories/UserGroups/Account/AccountRepositoryInterface.php +++ b/app/Repositories/UserGroups/Account/AccountRepositoryInterface.php @@ -1,6 +1,5 @@ userGroup->bills()->orderBy('order', 'ASC')->get(); $current = 1; foreach ($set as $bill) { - if ((int)$bill->order !== $current) { + if ($bill->order !== $current) { $bill->order = $current; $bill->save(); } - $current++; + ++$current; } } - /** - * @return Collection - */ public function getBills(): Collection { return $this->userGroup->bills() - ->orderBy('bills.name', 'ASC') - ->get(['bills.*']); + ->orderBy('bills.name', 'ASC') + ->get(['bills.*']) + ; } - /** - * @inheritDoc - */ public function sumPaidInRange(Carbon $start, Carbon $end): array { + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); $bills = $this->getActiveBills(); $default = app('amount')->getDefaultCurrency(); $return = []; $converter = new ExchangeRateConverter(); + /** @var Bill $bill */ foreach ($bills as $bill) { /** @var Collection $set */ $set = $bill->transactionJournals()->after($start)->before($end)->get(['transaction_journals.*']); $currency = $bill->transactionCurrency; - $currencyId = (int)$bill->transaction_currency_id; + $currencyId = $bill->transaction_currency_id; - $return[$currencyId] = $return[$currencyId] ?? [ - 'currency_id' => (string)$currency->id, - 'currency_name' => $currency->name, - 'currency_symbol' => $currency->symbol, - 'currency_code' => $currency->code, - 'currency_decimal_places' => (int)$currency->decimal_places, - 'native_id' => (string)$default->id, - 'native_name' => $default->name, - 'native_symbol' => $default->symbol, - 'native_code' => $default->code, - 'native_decimal_places' => (int)$default->decimal_places, - 'sum' => '0', - 'native_sum' => '0', + $return[$currencyId] ??= [ + 'currency_id' => (string)$currency->id, + 'currency_name' => $currency->name, + 'currency_symbol' => $currency->symbol, + 'currency_code' => $currency->code, + 'currency_decimal_places' => $currency->decimal_places, + 'native_currency_id' => (string)$default->id, + 'native_currency_name' => $default->name, + 'native_currency_symbol' => $default->symbol, + 'native_currency_code' => $default->code, + 'native_currency_decimal_places' => $default->decimal_places, + 'sum' => '0', + 'native_sum' => '0', ]; /** @var TransactionJournal $transactionJournal */ foreach ($set as $transactionJournal) { - /** @var Transaction|null $sourceTransaction */ + /** @var null|Transaction $sourceTransaction */ $sourceTransaction = $transactionJournal->transactions()->where('amount', '<', 0)->first(); if (null !== $sourceTransaction) { - $amount = (string)$sourceTransaction->amount; - if ((int)$sourceTransaction->foreign_currency_id === (int)$currency->id) { + $amount = $sourceTransaction->amount; + if ((int)$sourceTransaction->foreign_currency_id === $currency->id) { // use foreign amount instead! $amount = (string)$sourceTransaction->foreign_amount; } // convert to native currency - $nativeAmount = $amount; - if ($currencyId !== (int)$default->id) { + $nativeAmount = $amount; + if ($currencyId !== $default->id) { // get rate and convert. $nativeAmount = $converter->convert($currency, $default, $transactionJournal->date, $amount); } - if ((int)$sourceTransaction->foreign_currency_id === (int)$default->id) { + if ((int)$sourceTransaction->foreign_currency_id === $default->id) { // ignore conversion, use foreign amount $nativeAmount = (string)$sourceTransaction->foreign_amount; } @@ -123,29 +120,28 @@ class BillRepository implements BillRepositoryInterface } } } + $converter->summarize(); + return $return; } - /** - * @return Collection - */ public function getActiveBills(): Collection { return $this->userGroup->bills() - ->where('active', true) - ->orderBy('bills.name', 'ASC') - ->get(['bills.*']); + ->where('active', true) + ->orderBy('bills.name', 'ASC') + ->get(['bills.*']) + ; } - /** - * @inheritDoc - */ public function sumUnpaidInRange(Carbon $start, Carbon $end): array { + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); $bills = $this->getActiveBills(); $return = []; $default = app('amount')->getDefaultCurrency(); $converter = new ExchangeRateConverter(); + /** @var Bill $bill */ foreach ($bills as $bill) { $dates = $this->getPayDatesInRange($bill, $start, $end); @@ -154,27 +150,28 @@ class BillRepository implements BillRepositoryInterface if ($total > 0) { $currency = $bill->transactionCurrency; - $currencyId = (int)$bill->transaction_currency_id; + $currencyId = $bill->transaction_currency_id; $average = bcdiv(bcadd($bill->amount_max, $bill->amount_min), '2'); $nativeAverage = $converter->convert($currency, $default, $start, $average); - $return[$currencyId] = $return[$currencyId] ?? [ - 'currency_id' => (string)$currency->id, - 'currency_name' => $currency->name, - 'currency_symbol' => $currency->symbol, - 'currency_code' => $currency->code, - 'currency_decimal_places' => (int)$currency->decimal_places, - 'native_id' => (string)$default->id, - 'native_name' => $default->name, - 'native_symbol' => $default->symbol, - 'native_code' => $default->code, - 'native_decimal_places' => (int)$default->decimal_places, - 'sum' => '0', - 'native_sum' => '0', + $return[$currencyId] ??= [ + 'currency_id' => (string)$currency->id, + 'currency_name' => $currency->name, + 'currency_symbol' => $currency->symbol, + 'currency_code' => $currency->code, + 'currency_decimal_places' => $currency->decimal_places, + 'native_currency_id' => (string)$default->id, + 'native_currency_name' => $default->name, + 'native_currency_symbol' => $default->symbol, + 'native_currency_code' => $default->code, + 'native_currency_decimal_places' => $default->decimal_places, + 'sum' => '0', + 'native_sum' => '0', ]; $return[$currencyId]['sum'] = bcadd($return[$currencyId]['sum'], bcmul($average, (string)$total)); $return[$currencyId]['native_sum'] = bcadd($return[$currencyId]['native_sum'], bcmul($nativeAverage, (string)$total)); } } + $converter->summarize(); return $return; } @@ -182,34 +179,28 @@ class BillRepository implements BillRepositoryInterface /** * Between start and end, tells you on which date(s) the bill is expected to hit. * TODO duplicate of function in other billrepositoryinterface - * - * @param Bill $bill - * @param Carbon $start - * @param Carbon $end - * - * @return Collection */ public function getPayDatesInRange(Bill $bill, Carbon $start, Carbon $end): Collection { $set = new Collection(); $currentStart = clone $start; - //Log::debug(sprintf('Now at bill "%s" (%s)', $bill->name, $bill->repeat_freq)); - //Log::debug(sprintf('First currentstart is %s', $currentStart->format('Y-m-d'))); + // app('log')->debug(sprintf('Now at bill "%s" (%s)', $bill->name, $bill->repeat_freq)); + // app('log')->debug(sprintf('First currentstart is %s', $currentStart->format('Y-m-d'))); while ($currentStart <= $end) { - //Log::debug(sprintf('Currentstart is now %s.', $currentStart->format('Y-m-d'))); + // app('log')->debug(sprintf('Currentstart is now %s.', $currentStart->format('Y-m-d'))); $nextExpectedMatch = $this->nextDateMatch($bill, $currentStart); - //Log::debug(sprintf('Next Date match after %s is %s', $currentStart->format('Y-m-d'), $nextExpectedMatch->format('Y-m-d'))); + // app('log')->debug(sprintf('Next Date match after %s is %s', $currentStart->format('Y-m-d'), $nextExpectedMatch->format('Y-m-d'))); if ($nextExpectedMatch > $end) {// If nextExpectedMatch is after end, we continue break; } $set->push(clone $nextExpectedMatch); - //Log::debug(sprintf('Now %d dates in set.', $set->count())); + // app('log')->debug(sprintf('Now %d dates in set.', $set->count())); $nextExpectedMatch->addDay(); - //Log::debug(sprintf('Currentstart (%s) has become %s.', $currentStart->format('Y-m-d'), $nextExpectedMatch->format('Y-m-d'))); + // app('log')->debug(sprintf('Currentstart (%s) has become %s.', $currentStart->format('Y-m-d'), $nextExpectedMatch->format('Y-m-d'))); - $currentStart = clone $nextExpectedMatch; + $currentStart = clone $nextExpectedMatch; } return $set; @@ -220,11 +211,6 @@ class BillRepository implements BillRepositoryInterface * transaction. Whether it is there already, is not relevant. * * TODO duplicate of other repos - * - * @param Bill $bill - * @param Carbon $date - * - * @return Carbon */ public function nextDateMatch(Bill $bill, Carbon $date): Carbon { diff --git a/app/Repositories/UserGroups/Bill/BillRepositoryInterface.php b/app/Repositories/UserGroups/Bill/BillRepositoryInterface.php index ba68704938..6bf9d979a5 100644 --- a/app/Repositories/UserGroups/Bill/BillRepositoryInterface.php +++ b/app/Repositories/UserGroups/Bill/BillRepositoryInterface.php @@ -1,6 +1,5 @@ getDefaultCurrency(); $availableBudgets = $this->userGroup->availableBudgets() - ->where('start_date', $start->format('Y-m-d')) - ->where('end_date', $end->format('Y-m-d'))->get(); + ->where('start_date', $start->format('Y-m-d')) + ->where('end_date', $end->format('Y-m-d'))->get() + ; + /** @var AvailableBudget $availableBudget */ foreach ($availableBudgets as $availableBudget) { - $currencyId = (int)$availableBudget->transaction_currency_id; - $return[$currencyId] = $return[$currencyId] ?? [ - 'currency_id' => $currencyId, - 'currency_code' => $availableBudget->transactionCurrency->code, - 'currency_symbol' => $availableBudget->transactionCurrency->symbol, - 'currency_name' => $availableBudget->transactionCurrency->name, - 'currency_decimal_places' => (int)$availableBudget->transactionCurrency->decimal_places, - 'native_id' => $default->id, - 'native_code' => $default->code, - 'native_symbol' => $default->symbol, - 'native_name' => $default->name, - 'native_decimal_places' => (int)$default->decimal_places, - 'amount' => '0', - 'native_amount' => '0', + $currencyId = $availableBudget->transaction_currency_id; + $return[$currencyId] ??= [ + 'currency_id' => $currencyId, + 'currency_code' => $availableBudget->transactionCurrency->code, + 'currency_symbol' => $availableBudget->transactionCurrency->symbol, + 'currency_name' => $availableBudget->transactionCurrency->name, + 'currency_decimal_places' => $availableBudget->transactionCurrency->decimal_places, + 'native_currency_id' => $default->id, + 'native_currency_code' => $default->code, + 'native_currency_symbol' => $default->symbol, + 'native_currency_name' => $default->name, + 'native_currency_decimal_places' => $default->decimal_places, + 'amount' => '0', + 'native_amount' => '0', ]; $nativeAmount = $converter->convert($availableBudget->transactionCurrency, $default, $availableBudget->start_date, $availableBudget->amount); $return[$currencyId]['amount'] = bcadd($return[$currencyId]['amount'], $availableBudget->amount); $return[$currencyId]['native_amount'] = bcadd($return[$currencyId]['native_amount'], $nativeAmount); } + $converter->summarize(); + return $return; } } diff --git a/app/Repositories/UserGroups/Budget/AvailableBudgetRepositoryInterface.php b/app/Repositories/UserGroups/Budget/AvailableBudgetRepositoryInterface.php index 6a24ad24da..6d1015f348 100644 --- a/app/Repositories/UserGroups/Budget/AvailableBudgetRepositoryInterface.php +++ b/app/Repositories/UserGroups/Budget/AvailableBudgetRepositoryInterface.php @@ -1,6 +1,5 @@ userGroup->budgets()->where('active', true) - ->orderBy('order', 'ASC') - ->orderBy('name', 'ASC') - ->get(); + ->orderBy('order', 'ASC') + ->orderBy('name', 'ASC') + ->get() + ; } } diff --git a/app/Repositories/UserGroups/Budget/BudgetRepositoryInterface.php b/app/Repositories/UserGroups/Budget/BudgetRepositoryInterface.php index 6d9ef85332..6b52c939be 100644 --- a/app/Repositories/UserGroups/Budget/BudgetRepositoryInterface.php +++ b/app/Repositories/UserGroups/Budget/BudgetRepositoryInterface.php @@ -1,6 +1,5 @@ setBudgets($this->getBudgets()); } $collector->withBudgetInformation()->withAccountInformation()->withCategoryInformation(); - $journals = $collector->getExtractedJournals(); - $array = []; + $journals = $collector->getExtractedJournals(); + $array = []; foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $budgetId = (int)$journal['budget_id']; - $budgetName = (string)$journal['budget_name']; + $currencyId = (int)$journal['currency_id']; + $budgetId = (int)$journal['budget_id']; + $budgetName = (string)$journal['budget_name']; // catch "no budget" entries. if (0 === $budgetId) { @@ -72,7 +70,7 @@ class OperationsRepository implements OperationsRepositoryInterface } // info about the currency: - $array[$currencyId] = $array[$currencyId] ?? [ + $array[$currencyId] ??= [ 'budgets' => [], 'currency_id' => $currencyId, 'currency_name' => $journal['currency_name'], @@ -82,7 +80,7 @@ class OperationsRepository implements OperationsRepositoryInterface ]; // info about the budgets: - $array[$currencyId]['budgets'][$budgetId] = $array[$currencyId]['budgets'][$budgetId] ?? [ + $array[$currencyId]['budgets'][$budgetId] ??= [ 'id' => $budgetId, 'name' => $budgetName, 'transaction_journals' => [], @@ -90,8 +88,8 @@ class OperationsRepository implements OperationsRepositoryInterface // add journal to array: // only a subset of the fields. - $journalId = (int)$journal['transaction_journal_id']; - $final = [ + $journalId = (int)$journal['transaction_journal_id']; + $final = [ 'amount' => app('steam')->negative($journal['amount']), 'currency_id' => $journal['currency_id'], 'foreign_amount' => null, @@ -124,9 +122,6 @@ class OperationsRepository implements OperationsRepositoryInterface return $array; } - /** - * @return Collection - */ private function getBudgets(): Collection { /** @var BudgetRepositoryInterface $repository */ diff --git a/app/Repositories/UserGroups/Budget/OperationsRepositoryInterface.php b/app/Repositories/UserGroups/Budget/OperationsRepositoryInterface.php index d6313824dc..e1eb8762a1 100644 --- a/app/Repositories/UserGroups/Budget/OperationsRepositoryInterface.php +++ b/app/Repositories/UserGroups/Budget/OperationsRepositoryInterface.php @@ -1,6 +1,5 @@ . + */ + +declare(strict_types=1); + +namespace FireflyIII\Repositories\UserGroups\Category; + +use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait; +use Illuminate\Support\Collection; + +class CategoryRepository implements CategoryRepositoryInterface +{ + use UserGroupTrait; + + public function searchCategory(string $query, int $limit): Collection + { + $search = $this->userGroup->categories(); + if ('' !== $query) { + $search->where('name', 'LIKE', sprintf('%%%s%%', $query)); + } + + return $search->take($limit)->get(); + } +} diff --git a/frontend/src/api/summary/basic.js b/app/Repositories/UserGroups/Category/CategoryRepositoryInterface.php similarity index 64% rename from frontend/src/api/summary/basic.js rename to app/Repositories/UserGroups/Category/CategoryRepositoryInterface.php index 2c4c185ebc..cd60c32523 100644 --- a/frontend/src/api/summary/basic.js +++ b/app/Repositories/UserGroups/Category/CategoryRepositoryInterface.php @@ -1,6 +1,7 @@ +. */ -import {api} from "boot/axios"; -import {format} from 'date-fns'; +declare(strict_types=1); +namespace FireflyIII\Repositories\UserGroups\Category; -export default class Basic { - list(range, cacheKey) { - let startStr = format(range.start, 'y-MM-dd'); - let endStr = format(range.end, 'y-MM-dd'); +use Illuminate\Support\Collection; - return api.get('/api/v1/summary/basic', {params: {start: startStr, end: endStr, cache: cacheKey}}); - } +interface CategoryRepositoryInterface +{ + /** + * Search for a category using wild cards. Uses the database, so case sensitive. + */ + public function searchCategory(string $query, int $limit): Collection; } diff --git a/app/Repositories/UserGroups/Currency/CurrencyRepository.php b/app/Repositories/UserGroups/Currency/CurrencyRepository.php new file mode 100644 index 0000000000..5f66f4dd0d --- /dev/null +++ b/app/Repositories/UserGroups/Currency/CurrencyRepository.php @@ -0,0 +1,383 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Repositories\UserGroups\Currency; + +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Factory\TransactionCurrencyFactory; +use FireflyIII\Models\AccountMeta; +use FireflyIII\Models\AvailableBudget; +use FireflyIII\Models\Bill; +use FireflyIII\Models\BudgetLimit; +use FireflyIII\Models\RecurrenceTransaction; +use FireflyIII\Models\Transaction; +use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Services\Internal\Destroy\CurrencyDestroyService; +use FireflyIII\Services\Internal\Update\CurrencyUpdateService; +use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait; +use Illuminate\Support\Collection; + +/** + * Class CurrencyRepository + */ +class CurrencyRepository implements CurrencyRepositoryInterface +{ + use UserGroupTrait; + + /** + * @throws FireflyException + */ + public function currencyInUse(TransactionCurrency $currency): bool + { + $result = $this->currencyInUseAt($currency); + + return null !== $result; + } + + /** + * @throws FireflyException + */ + public function currencyInUseAt(TransactionCurrency $currency): ?string + { + app('log')->debug(sprintf('Now in currencyInUse() for #%d ("%s")', $currency->id, $currency->code)); + $countJournals = $this->countJournals($currency); + if ($countJournals > 0) { + app('log')->info(sprintf('Count journals is %d, return true.', $countJournals)); + + return 'journals'; + } + + // is the only currency left + if (1 === $this->getAll()->count()) { + app('log')->info('Is the last currency in the system, return true. '); + + return 'last_left'; + } + + // is being used in accounts: + $meta = AccountMeta::where('name', 'currency_id')->where('data', json_encode((string)$currency->id))->count(); + if ($meta > 0) { + app('log')->info(sprintf('Used in %d accounts as currency_id, return true. ', $meta)); + + return 'account_meta'; + } + + // is being used in bills: + $bills = Bill::where('transaction_currency_id', $currency->id)->count(); + if ($bills > 0) { + app('log')->info(sprintf('Used in %d bills as currency, return true. ', $bills)); + + return 'bills'; + } + + // is being used in recurring transactions + $recurringAmount = RecurrenceTransaction::where('transaction_currency_id', $currency->id)->count(); + $recurringForeign = RecurrenceTransaction::where('foreign_currency_id', $currency->id)->count(); + + if ($recurringAmount > 0 || $recurringForeign > 0) { + app('log')->info(sprintf('Used in %d recurring transactions as (foreign) currency id, return true. ', $recurringAmount + $recurringForeign)); + + return 'recurring'; + } + + // is being used in accounts (as integer) + $meta = AccountMeta::leftJoin('accounts', 'accounts.id', '=', 'account_meta.account_id') + ->whereNull('accounts.deleted_at') + ->where('account_meta.name', 'currency_id')->where('account_meta.data', json_encode($currency->id))->count() + ; + if ($meta > 0) { + app('log')->info(sprintf('Used in %d accounts as currency_id, return true. ', $meta)); + + return 'account_meta'; + } + + // is being used in available budgets + $availableBudgets = AvailableBudget::where('transaction_currency_id', $currency->id)->count(); + if ($availableBudgets > 0) { + app('log')->info(sprintf('Used in %d available budgets as currency, return true. ', $availableBudgets)); + + return 'available_budgets'; + } + + // is being used in budget limits + $budgetLimit = BudgetLimit::where('transaction_currency_id', $currency->id)->count(); + if ($budgetLimit > 0) { + app('log')->info(sprintf('Used in %d budget limits as currency, return true. ', $budgetLimit)); + + return 'budget_limits'; + } + + // is the default currency for the user or the system + $count = $this->userGroup->currencies()->where('transaction_currencies.id', $currency->id)->wherePivot('group_default', 1)->count(); + if ($count > 0) { + app('log')->info('Is the default currency of the user, return true.'); + + return 'current_default'; + } + + // is the default currency for the user or the system + $count = $this->userGroup->currencies()->where('transaction_currencies.id', $currency->id)->wherePivot('group_default', 1)->count(); + if ($count > 0) { + app('log')->info('Is the default currency of the user group, return true.'); + + return 'current_default'; + } + + app('log')->debug('Currency is not used, return false.'); + + return null; + } + + private function countJournals(TransactionCurrency $currency): int + { + $count = $currency->transactions()->whereNull('deleted_at')->count() + $currency->transactionJournals()->whereNull('deleted_at')->count(); + + // also count foreign: + return $count + Transaction::where('foreign_currency_id', $currency->id)->count(); + } + + /** + * Returns ALL currencies, regardless of whether they are enabled or not. + */ + public function getAll(): Collection + { + $all = TransactionCurrency::orderBy('code', 'ASC')->get(); + $local = $this->get(); + + return $all->map(static function (TransactionCurrency $current) use ($local) { + $hasId = $local->contains(static function (TransactionCurrency $entry) use ($current) { + return $entry->id === $current->id; + }); + $isDefault = $local->contains(static function (TransactionCurrency $entry) use ($current) { + return 1 === (int)$entry->pivot->group_default && $entry->id === $current->id; + }); + $current->userGroupEnabled = $hasId; + $current->userGroupDefault = $isDefault; + + return $current; + }); + } + + public function get(): Collection + { + $all = $this->userGroup->currencies()->orderBy('code', 'ASC')->withPivot(['group_default'])->get(); + $all->map(static function (TransactionCurrency $current) { + $current->userGroupEnabled = true; + $current->userGroupDefault = 1 === (int)$current->pivot->group_default; + + return $current; + }); + + return $all; + } + + public function destroy(TransactionCurrency $currency): bool + { + /** @var UserRepositoryInterface $repository */ + $repository = app(UserRepositoryInterface::class); + if ($repository->hasRole($this->user, 'owner')) { + /** @var CurrencyDestroyService $service */ + $service = app(CurrencyDestroyService::class); + $service->destroy($currency); + } + + return true; + } + + /** + * Disables a currency + */ + public function disable(TransactionCurrency $currency): void + { + $this->userGroup->currencies()->detach($currency->id); + $currency->enabled = false; + $currency->save(); + } + + public function findByName(string $name): ?TransactionCurrency + { + return TransactionCurrency::where('name', $name)->first(); + } + + /** + * Find by object, ID or code. Returns user default or system default. + * + * @throws FireflyException + */ + public function findCurrency(?int $currencyId, ?string $currencyCode): TransactionCurrency + { + $result = $this->findCurrencyNull($currencyId, $currencyCode); + + if (null === $result) { + app('log')->debug('Grabbing default currency for this user...'); + + /** @var null|TransactionCurrency $result */ + $result = app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); + } + + app('log')->debug(sprintf('Final result: %s', $result->code)); + if (false === $result->enabled) { + app('log')->debug(sprintf('Also enabled currency %s', $result->code)); + $this->enable($result); + } + + return $result; + } + + /** + * Find by object, ID or code. Returns NULL if nothing found. + */ + public function findCurrencyNull(?int $currencyId, ?string $currencyCode): ?TransactionCurrency + { + app('log')->debug('Now in findCurrencyNull()'); + $result = $this->find((int)$currencyId); + if (null === $result) { + app('log')->debug(sprintf('Searching for currency with code %s...', $currencyCode)); + $result = $this->findByCode((string)$currencyCode); + } + if (null !== $result && false === $result->enabled) { + app('log')->debug(sprintf('Also enabled currency %s', $result->code)); + $this->enable($result); + } + + return $result; + } + + /** + * Find by ID, return NULL if not found. + */ + public function find(int $currencyId): ?TransactionCurrency + { + return TransactionCurrency::find($currencyId); + } + + /** + * Find by currency code, return NULL if unfound. + */ + public function findByCode(string $currencyCode): ?TransactionCurrency + { + return TransactionCurrency::where('code', $currencyCode)->first(); + } + + public function enable(TransactionCurrency $currency): void + { + $this->userGroup->currencies()->syncWithoutDetaching([$currency->id]); + $currency->enabled = false; + $currency->save(); + } + + public function getByIds(array $ids): Collection + { + return TransactionCurrency::orderBy('code', 'ASC')->whereIn('id', $ids)->get(); + } + + public function isFallbackCurrency(TransactionCurrency $currency): bool + { + return $currency->code === config('firefly.default_currency', 'EUR'); + } + + public function makeDefault(TransactionCurrency $currency): void + { + app('log')->debug(sprintf('Enabled + made default currency %s for user #%d', $currency->code, $this->userGroup->id)); + $this->userGroup->currencies()->detach($currency->id); + foreach ($this->userGroup->currencies()->get() as $item) { + $this->userGroup->currencies()->updateExistingPivot($item->id, ['group_default' => false]); + } + $this->userGroup->currencies()->syncWithoutDetaching([$currency->id => ['group_default' => true]]); + } + + public function searchCurrency(string $search, int $limit): Collection + { + $query = TransactionCurrency::where('enabled', true); + if ('' !== $search) { + $query->where('name', 'LIKE', sprintf('%%%s%%', $search)); + } + + return $query->take($limit)->get(); + } + + /** + * @throws FireflyException + */ + public function store(array $data): TransactionCurrency + { + /** @var TransactionCurrencyFactory $factory */ + $factory = app(TransactionCurrencyFactory::class); + $result = $factory->create($data); + + if (true === $data['enabled']) { + $this->userGroup->currencies()->attach($result->id); + } + + return $result; + } + + public function update(TransactionCurrency $currency, array $data): TransactionCurrency + { + app('log')->debug('Now in update()'); + // can be true, false, null + $enabled = array_key_exists('enabled', $data) ? $data['enabled'] : null; + // can be true, false, but method only responds to "true". + $default = array_key_exists('default', $data) ? $data['default'] : false; + + // remove illegal combo's: + if (false === $enabled && true === $default) { + $enabled = true; + } + if (false === $default) { + app('log')->warning(sprintf('Set default=false will NOT do anything for currency %s', $currency->code)); + } + + // update currency with current user specific settings + $currency->refreshForUser($this->user); + + // currency is enabled, must be disabled. + if (false === $enabled) { + app('log')->debug(sprintf('Disabled currency %s for user #%d', $currency->code, $this->userGroup->id)); + $this->userGroup->currencies()->detach($currency->id); + } + // currency must be enabled + if (true === $enabled) { + app('log')->debug(sprintf('Enabled currency %s for user #%d', $currency->code, $this->userGroup->id)); + $this->userGroup->currencies()->detach($currency->id); + $this->userGroup->currencies()->syncWithoutDetaching([$currency->id => ['group_default' => false]]); + } + + // currency must be made default. + if (true === $default) { + app('log')->debug(sprintf('Enabled + made default currency %s for user #%d', $currency->code, $this->userGroup->id)); + $this->userGroup->currencies()->detach($currency->id); + foreach ($this->userGroup->currencies()->get() as $item) { + $this->userGroup->currencies()->updateExistingPivot($item->id, ['group_default' => false]); + } + $this->userGroup->currencies()->syncWithoutDetaching([$currency->id => ['group_default' => true]]); + } + + /** @var CurrencyUpdateService $service */ + $service = app(CurrencyUpdateService::class); + + return $service->update($currency, $data); + } +} diff --git a/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php b/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php new file mode 100644 index 0000000000..b989d1aa8a --- /dev/null +++ b/app/Repositories/UserGroups/Currency/CurrencyRepositoryInterface.php @@ -0,0 +1,100 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Repositories\UserGroups\Currency; + +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\TransactionCurrency; +use FireflyIII\User; +use Illuminate\Support\Collection; + +interface CurrencyRepositoryInterface +{ + public function currencyInUse(TransactionCurrency $currency): bool; + + /** + * Currency is in use where exactly. + */ + public function currencyInUseAt(TransactionCurrency $currency): ?string; + + public function destroy(TransactionCurrency $currency): bool; + + /** + * Disables a currency + */ + public function disable(TransactionCurrency $currency): void; + + /** + * Enables a currency + */ + public function enable(TransactionCurrency $currency): void; + + /** + * Find by ID, return NULL if not found. + */ + public function find(int $currencyId): ?TransactionCurrency; + + public function findByCode(string $currencyCode): ?TransactionCurrency; + + public function findByName(string $name): ?TransactionCurrency; + + /** + * Find by object, ID or code. Returns user default or system default. + */ + public function findCurrency(?int $currencyId, ?string $currencyCode): TransactionCurrency; + + /** + * Find by object, ID or code. Returns NULL if nothing found. + */ + public function findCurrencyNull(?int $currencyId, ?string $currencyCode): ?TransactionCurrency; + + /** + * Get the user group's currencies. + * + * @return Collection + */ + public function get(): Collection; + + /** + * Get ALL currencies. + */ + public function getAll(): Collection; + + public function getByIds(array $ids): Collection; + + public function isFallbackCurrency(TransactionCurrency $currency): bool; + + public function makeDefault(TransactionCurrency $currency): void; + + public function searchCurrency(string $search, int $limit): Collection; + + public function setUser(User $user): void; + + /** + * @throws FireflyException + */ + public function store(array $data): TransactionCurrency; + + public function update(TransactionCurrency $currency, array $data): TransactionCurrency; +} diff --git a/app/Repositories/UserGroups/Journal/JournalRepository.php b/app/Repositories/UserGroups/Journal/JournalRepository.php index 387438df74..3d9a77b6c8 100644 --- a/app/Repositories/UserGroups/Journal/JournalRepository.php +++ b/app/Repositories/UserGroups/Journal/JournalRepository.php @@ -33,13 +33,11 @@ class JournalRepository implements JournalRepositoryInterface { use UserGroupTrait; - /** - * @inheritDoc - */ public function searchJournalDescriptions(string $search, int $limit): Collection { $query = $this->userGroup->transactionJournals() - ->orderBy('date', 'DESC'); + ->orderBy('date', 'DESC') + ; if ('' !== $search) { $query->where('description', 'LIKE', sprintf('%%%s%%', $search)); } diff --git a/app/Repositories/UserGroups/Journal/JournalRepositoryInterface.php b/app/Repositories/UserGroups/Journal/JournalRepositoryInterface.php index 5a2cd1b938..7e2c8c0c72 100644 --- a/app/Repositories/UserGroups/Journal/JournalRepositoryInterface.php +++ b/app/Repositories/UserGroups/Journal/JournalRepositoryInterface.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\Repositories\UserGroups\Journal; +use FireflyIII\User; use Illuminate\Support\Collection; /** @@ -32,11 +33,8 @@ interface JournalRepositoryInterface { /** * Search in journal descriptions. - * - * @param string $search - * @param int $limit - * - * @return Collection */ public function searchJournalDescriptions(string $search, int $limit): Collection; + + public function setUser(User $user): void; } diff --git a/app/Repositories/UserGroups/PiggyBank/PiggyBankRepository.php b/app/Repositories/UserGroups/PiggyBank/PiggyBankRepository.php index e6b80198b7..7652e55c0b 100644 --- a/app/Repositories/UserGroups/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/UserGroups/PiggyBank/PiggyBankRepository.php @@ -1,6 +1,5 @@ userGroup->piggyBanks() - ->with( - [ - 'account', - 'objectGroups', - ] - ) - ->orderBy('order', 'ASC')->get(); + ->with( + [ + 'account', + 'objectGroups', + ] + ) + ->orderBy('order', 'ASC')->get() + ; } } diff --git a/app/Repositories/UserGroups/PiggyBank/PiggyBankRepositoryInterface.php b/app/Repositories/UserGroups/PiggyBank/PiggyBankRepositoryInterface.php index 8a02a8e84d..32a98d5423 100644 --- a/app/Repositories/UserGroups/PiggyBank/PiggyBankRepositoryInterface.php +++ b/app/Repositories/UserGroups/PiggyBank/PiggyBankRepositoryInterface.php @@ -1,6 +1,5 @@ . */ -import {store} from 'quasar/wrappers' -import {createStore} from 'vuex' +declare(strict_types=1); -// import example from './module-example' -import fireflyiii from './fireflyiii' -/* - * If not building with SSR mode, you can - * directly export the Store instantiation; - * - * The function below can be async too; either use - * async/await or return a Promise which resolves - * with the Store instance. +namespace FireflyIII\Repositories\UserGroups\Tag; + +use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait; +use Illuminate\Support\Collection; + +/** + * Class TagRepository */ +class TagRepository implements TagRepositoryInterface +{ + use UserGroupTrait; -export default store(function (/* { ssrContext } */) { - return createStore({ - modules: { - // example - fireflyiii - }, + public function searchTag(string $query, int $limit): Collection + { + $search = $this->user->tags(); + if ('' !== $query) { + $search->where('tag', 'LIKE', sprintf('%%%s%%', $query)); + } - // enable strict mode (adds overhead!) - // for dev mode and --debug builds only - strict: process.env.DEBUGGING - }) -}) + return $search->take($limit)->get(['tags.*']); + } +} diff --git a/frontend/src/api/system/user.js b/app/Repositories/UserGroups/Tag/TagRepositoryInterface.php similarity index 67% rename from frontend/src/api/system/user.js rename to app/Repositories/UserGroups/Tag/TagRepositoryInterface.php index 36d1e8464f..e001333113 100644 --- a/frontend/src/api/system/user.js +++ b/app/Repositories/UserGroups/Tag/TagRepositoryInterface.php @@ -1,6 +1,7 @@ +. */ -import {api} from "boot/axios"; +declare(strict_types=1); -export default class AboutUser { - get() { - return api.get('/api/v1/about/user'); - } +namespace FireflyIII\Repositories\UserGroups\Tag; - put(identifier, submission) { - console.log('here we are'); - return api.put('/api/v1/users/' + identifier, submission); - } +use Illuminate\Support\Collection; - logout() { - return api.post('/logout'); - } +interface TagRepositoryInterface +{ + /** + * Find one or more tags based on the query. + */ + public function searchTag(string $query, int $limit): Collection; } diff --git a/app/Repositories/Webhook/WebhookRepository.php b/app/Repositories/Webhook/WebhookRepository.php index 451e376bae..7b30289926 100644 --- a/app/Repositories/Webhook/WebhookRepository.php +++ b/app/Repositories/Webhook/WebhookRepository.php @@ -29,7 +29,6 @@ use FireflyIII\Models\WebhookMessage; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; -use Str; /** * Class WebhookRepository @@ -38,88 +37,63 @@ class WebhookRepository implements WebhookRepositoryInterface { private User $user; - /** - * @inheritDoc - */ public function all(): Collection { return $this->user->webhooks()->get(); } - /** - * @inheritDoc - */ public function destroy(Webhook $webhook): void { $webhook->delete(); } - /** - * @inheritDoc - */ public function destroyAttempt(WebhookAttempt $attempt): void { $attempt->delete(); } - /** - * @inheritDoc - */ public function destroyMessage(WebhookMessage $message): void { $message->delete(); } - /** - * @inheritDoc - */ public function getAttempts(WebhookMessage $webhookMessage): Collection { return $webhookMessage->webhookAttempts()->orderBy('created_at', 'DESC')->get(['webhook_attempts.*']); } - /** - * @inheritDoc - */ public function getMessages(Webhook $webhook): Collection { return $webhook->webhookMessages() - ->orderBy('created_at', 'DESC') - ->get(['webhook_messages.*']); + ->orderBy('created_at', 'DESC') + ->get(['webhook_messages.*']) + ; } - /** - * @inheritDoc - */ public function getReadyMessages(Webhook $webhook): Collection { return $webhook->webhookMessages() - ->where('webhook_messages.sent', 0) - ->where('webhook_messages.errored', 0) - ->get(['webhook_messages.*']) - ->filter( - function (WebhookMessage $message) { - return $message->webhookAttempts()->count() <= 2; - } - )->splice(0, 3); + ->where('webhook_messages.sent', 0) + ->where('webhook_messages.errored', 0) + ->get(['webhook_messages.*']) + ->filter( + static function (WebhookMessage $message) { + return $message->webhookAttempts()->count() <= 2; + } + )->splice(0, 3) + ; } - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } - /** - * @inheritDoc - */ public function store(array $data): Webhook { - $secret = Str::random(24); + $secret = \Str::random(24); $fullData = [ 'user_id' => $this->user->id, 'user_group_id' => $this->user->user_group_id, @@ -135,9 +109,6 @@ class WebhookRepository implements WebhookRepositoryInterface return Webhook::create($fullData); } - /** - * @inheritDoc - */ public function update(Webhook $webhook, array $data): Webhook { $webhook->active = $data['active'] ?? $webhook->active; @@ -148,7 +119,7 @@ class WebhookRepository implements WebhookRepositoryInterface $webhook->url = $data['url'] ?? $webhook->url; if (true === $data['secret']) { - $secret = Str::random(24); + $secret = \Str::random(24); $webhook->secret = $secret; } diff --git a/app/Repositories/Webhook/WebhookRepositoryInterface.php b/app/Repositories/Webhook/WebhookRepositoryInterface.php index c0dd28c6ae..a313f0b1f9 100644 --- a/app/Repositories/Webhook/WebhookRepositoryInterface.php +++ b/app/Repositories/Webhook/WebhookRepositoryInterface.php @@ -37,64 +37,24 @@ interface WebhookRepositoryInterface { /** * Return all webhooks. - * - * @return Collection */ public function all(): Collection; - /** - * @param Webhook $webhook - */ public function destroy(Webhook $webhook): void; - /** - * @param WebhookAttempt $attempt - */ public function destroyAttempt(WebhookAttempt $attempt): void; - /** - * @param WebhookMessage $message - */ public function destroyMessage(WebhookMessage $message): void; - /** - * @param WebhookMessage $webhookMessage - * - * @return Collection - */ public function getAttempts(WebhookMessage $webhookMessage): Collection; - /** - * @param Webhook $webhook - * - * @return Collection - */ public function getMessages(Webhook $webhook): Collection; - /** - * @param Webhook $webhook - * - * @return Collection - */ public function getReadyMessages(Webhook $webhook): Collection; - /** - * @param User|Authenticatable|null $user - */ - public function setUser(User | Authenticatable | null $user): void; + public function setUser(null|Authenticatable|User $user): void; - /** - * @param array $data - * - * @return Webhook - */ public function store(array $data): Webhook; - /** - * @param Webhook $webhook - * @param array $data - * - * @return Webhook - */ public function update(Webhook $webhook, array $data): Webhook; } diff --git a/app/Rules/BelongsUser.php b/app/Rules/BelongsUser.php index 296dc580b8..06e250cf63 100644 --- a/app/Rules/BelongsUser.php +++ b/app/Rules/BelongsUser.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Rules; -use Closure; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Models\Bill; @@ -33,27 +32,23 @@ use FireflyIII\Models\Category; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\TransactionJournal; use Illuminate\Contracts\Validation\ValidationRule; -use Illuminate\Support\Facades\Log; /** * Class BelongsUser */ class BelongsUser implements ValidationRule { - /** - * @inheritDoc - */ - public function validate(string $attribute, mixed $value, Closure $fail): void + public function validate(string $attribute, mixed $value, \Closure $fail): void { $attribute = $this->parseAttribute($attribute); if (!auth()->check()) { $fail('validation.belongs_user')->translate(); + return; } - $attribute = (string)$attribute; - Log::debug(sprintf('Going to validate %s', $attribute)); + app('log')->debug(sprintf('Going to validate %s', $attribute)); - $result = match ($attribute) { + $result = match ($attribute) { 'piggy_bank_id' => $this->validatePiggyBankId((int)$value), 'piggy_bank_name' => $this->validatePiggyBankName($value), 'bill_id' => $this->validateBillId((int)$value), @@ -70,11 +65,6 @@ class BelongsUser implements ValidationRule } } - /** - * @param string $attribute - * - * @return string - */ private function parseAttribute(string $attribute): string { $parts = explode('.', $attribute); @@ -88,25 +78,16 @@ class BelongsUser implements ValidationRule return $attribute; } - /** - * @param int $value - * - * @return bool - */ private function validatePiggyBankId(int $value): bool { $count = PiggyBank::leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id') - ->where('piggy_banks.id', '=', $value) - ->where('accounts.user_id', '=', auth()->user()->id)->count(); + ->where('piggy_banks.id', '=', $value) + ->where('accounts.user_id', '=', auth()->user()->id)->count() + ; return 1 === $count; } - /** - * @param string $value - * - * @return bool - */ private function validatePiggyBankName(string $value): bool { $count = $this->countField(PiggyBank::class, 'name', $value); @@ -114,14 +95,6 @@ class BelongsUser implements ValidationRule return 1 === $count; } - /** - * @param string $class - * @param string $field - * @param string $value - * - * @return int - * - */ protected function countField(string $class, string $field, string $value): int { $value = trim($value); @@ -129,29 +102,25 @@ class BelongsUser implements ValidationRule // get all objects belonging to user: if (PiggyBank::class === $class) { $objects = PiggyBank::leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id') - ->where('accounts.user_id', '=', auth()->user()->id)->get(['piggy_banks.*']); + ->where('accounts.user_id', '=', auth()->user()->id)->get(['piggy_banks.*']) + ; } if (PiggyBank::class !== $class) { $objects = $class::where('user_id', '=', auth()->user()->id)->get(); } - $count = 0; + $count = 0; foreach ($objects as $object) { - $objectValue = trim((string)$object->$field); - Log::debug(sprintf('Comparing object "%s" with value "%s"', $objectValue, $value)); + $objectValue = trim((string)$object->{$field}); // @phpstan-ignore-line + app('log')->debug(sprintf('Comparing object "%s" with value "%s"', $objectValue, $value)); if ($objectValue === $value) { - $count++; - Log::debug(sprintf('Hit! Count is now %d', $count)); + ++$count; + app('log')->debug(sprintf('Hit! Count is now %d', $count)); } } return $count; } - /** - * @param int $value - * - * @return bool - */ private function validateBillId(int $value): bool { if (0 === $value) { @@ -162,11 +131,6 @@ class BelongsUser implements ValidationRule return 1 === $count; } - /** - * @param int $value - * - * @return bool - */ private function validateJournalId(int $value): bool { if (0 === $value) { @@ -177,24 +141,14 @@ class BelongsUser implements ValidationRule return 1 === $count; } - /** - * @param string $value - * - * @return bool - */ private function validateBillName(string $value): bool { $count = $this->countField(Bill::class, 'name', $value); - Log::debug(sprintf('Result of countField for bill name "%s" is %d', $value, $count)); + app('log')->debug(sprintf('Result of countField for bill name "%s" is %d', $value, $count)); return 1 === $count; } - /** - * @param int $value - * - * @return bool - */ private function validateBudgetId(int $value): bool { if (0 === $value) { @@ -205,11 +159,6 @@ class BelongsUser implements ValidationRule return 1 === $count; } - /** - * @param int $value - * - * @return bool - */ private function validateCategoryId(int $value): bool { $count = Category::where('id', '=', $value)->where('user_id', '=', auth()->user()->id)->count(); @@ -217,11 +166,6 @@ class BelongsUser implements ValidationRule return 1 === $count; } - /** - * @param string $value - * - * @return bool - */ private function validateBudgetName(string $value): bool { $count = $this->countField(Budget::class, 'name', $value); @@ -229,11 +173,6 @@ class BelongsUser implements ValidationRule return 1 === $count; } - /** - * @param int $value - * - * @return bool - */ private function validateAccountId(int $value): bool { if (0 === $value) { diff --git a/app/Rules/BelongsUserGroup.php b/app/Rules/BelongsUserGroup.php index 54cc6a57e2..5c0459705b 100644 --- a/app/Rules/BelongsUserGroup.php +++ b/app/Rules/BelongsUserGroup.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Rules; -use Closure; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Models\Bill; @@ -33,7 +32,6 @@ use FireflyIII\Models\PiggyBank; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\UserGroup; use Illuminate\Contracts\Validation\ValidationRule; -use Illuminate\Support\Facades\Log; /** * Class BelongsUserGroup @@ -47,28 +45,23 @@ class BelongsUserGroup implements ValidationRule /** * Create a new rule instance. - * - * @return void */ public function __construct(UserGroup $userGroup) { $this->userGroup = $userGroup; } - /** - * @inheritDoc - */ - public function validate(string $attribute, mixed $value, Closure $fail): void + public function validate(string $attribute, mixed $value, \Closure $fail): void { $attribute = $this->parseAttribute($attribute); if (!auth()->check()) { $fail('validation.belongs_user_or_user_group')->translate(); + return; } - $attribute = (string)$attribute; - Log::debug(sprintf('Group: Going to validate "%s"', $attribute)); + app('log')->debug(sprintf('Group: Going to validate "%s"', $attribute)); - $result = match ($attribute) { + $result = match ($attribute) { 'piggy_bank_id' => $this->validatePiggyBankId((int)$value), 'piggy_bank_name' => $this->validatePiggyBankName($value), 'bill_id' => $this->validateBillId((int)$value), @@ -85,11 +78,6 @@ class BelongsUserGroup implements ValidationRule } } - /** - * @param string $attribute - * - * @return string - */ private function parseAttribute(string $attribute): string { $parts = explode('.', $attribute); @@ -103,25 +91,16 @@ class BelongsUserGroup implements ValidationRule return $attribute; } - /** - * @param int $value - * - * @return bool - */ private function validatePiggyBankId(int $value): bool { $count = PiggyBank::leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id') - ->where('piggy_banks.id', '=', $value) - ->where('accounts.user_group_id', '=', $this->userGroup->id)->count(); + ->where('piggy_banks.id', '=', $value) + ->where('accounts.user_group_id', '=', $this->userGroup->id)->count() + ; return 1 === $count; } - /** - * @param string $value - * - * @return bool - */ private function validatePiggyBankName(string $value): bool { $count = $this->countField(PiggyBank::class, 'name', $value); @@ -129,14 +108,6 @@ class BelongsUserGroup implements ValidationRule return 1 === $count; } - /** - * @param string $class - * @param string $field - * @param string $value - * - * @return int - * - */ protected function countField(string $class, string $field, string $value): int { $value = trim($value); @@ -144,17 +115,18 @@ class BelongsUserGroup implements ValidationRule // get all objects belonging to user: if (PiggyBank::class === $class) { $objects = PiggyBank::leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id') - ->where('accounts.user_group_id', '=', $this->userGroup->id)->get(['piggy_banks.*']); + ->where('accounts.user_group_id', '=', $this->userGroup->id)->get(['piggy_banks.*']) + ; } if (PiggyBank::class !== $class) { $objects = $class::where('user_group_id', '=', $this->userGroup->id)->get(); } - $count = 0; + $count = 0; foreach ($objects as $object) { - $objectValue = trim((string)$object->$field); + $objectValue = trim((string)$object->{$field}); // @phpstan-ignore-line app('log')->debug(sprintf('Comparing object "%s" with value "%s"', $objectValue, $value)); if ($objectValue === $value) { - $count++; + ++$count; app('log')->debug(sprintf('Hit! Count is now %d', $count)); } } @@ -162,11 +134,6 @@ class BelongsUserGroup implements ValidationRule return $count; } - /** - * @param int $value - * - * @return bool - */ private function validateBillId(int $value): bool { if (0 === $value) { @@ -177,11 +144,6 @@ class BelongsUserGroup implements ValidationRule return 1 === $count; } - /** - * @param int $value - * - * @return bool - */ private function validateJournalId(int $value): bool { if (0 === $value) { @@ -192,11 +154,6 @@ class BelongsUserGroup implements ValidationRule return 1 === $count; } - /** - * @param string $value - * - * @return bool - */ private function validateBillName(string $value): bool { $count = $this->countField(Bill::class, 'name', $value); @@ -205,11 +162,6 @@ class BelongsUserGroup implements ValidationRule return 1 === $count; } - /** - * @param int $value - * - * @return bool - */ private function validateBudgetId(int $value): bool { if (0 === $value) { @@ -220,11 +172,6 @@ class BelongsUserGroup implements ValidationRule return 1 === $count; } - /** - * @param int $value - * - * @return bool - */ private function validateCategoryId(int $value): bool { $count = Category::where('id', '=', $value)->where('user_group_id', '=', $this->userGroup->id)->count(); @@ -232,11 +179,6 @@ class BelongsUserGroup implements ValidationRule return 1 === $count; } - /** - * @param string $value - * - * @return bool - */ private function validateBudgetName(string $value): bool { $count = $this->countField(Budget::class, 'name', $value); @@ -244,11 +186,6 @@ class BelongsUserGroup implements ValidationRule return 1 === $count; } - /** - * @param int $value - * - * @return bool - */ private function validateAccountId(int $value): bool { if (0 === $value) { diff --git a/app/Rules/IsAssetAccountId.php b/app/Rules/IsAssetAccountId.php index 46d2e04e42..5c4e715f36 100644 --- a/app/Rules/IsAssetAccountId.php +++ b/app/Rules/IsAssetAccountId.php @@ -25,43 +25,29 @@ namespace FireflyIII\Rules; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; -use Illuminate\Contracts\Validation\Rule; +use Illuminate\Contracts\Validation\ValidationRule; /** - * * Class IsAssetAccountId */ -class IsAssetAccountId implements Rule +class IsAssetAccountId implements ValidationRule { /** - * Get the validation error message. This is not translated because only the API uses it. - * - * @return string + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function message(): string - { - return 'This is not an asset account.'; - } - - /** - * Determine if the validation rule passes. - * - * @param string $attribute - * @param mixed $value - * - * @return bool - */ - public function passes($attribute, $value): bool + public function validate(string $attribute, mixed $value, \Closure $fail): void { $accountId = (int)$value; + + /** @var null|Account $account */ $account = Account::with('accountType')->find($accountId); if (null === $account) { - return false; - } - if ($account->accountType->type !== AccountType::ASSET && $account->accountType->type !== AccountType::DEFAULT) { - return false; - } + $fail('validation.no_asset_account')->translate(); - return true; + return; + } + if (AccountType::ASSET !== $account->accountType->type && AccountType::DEFAULT !== $account->accountType->type) { + $fail('validation.no_asset_account')->translate(); + } } } diff --git a/app/Rules/IsBoolean.php b/app/Rules/IsBoolean.php index 3019b38ad5..4ca0ea2c63 100644 --- a/app/Rules/IsBoolean.php +++ b/app/Rules/IsBoolean.php @@ -24,46 +24,30 @@ declare(strict_types=1); namespace FireflyIII\Rules; -use Illuminate\Contracts\Validation\Rule; +use Illuminate\Contracts\Validation\ValidationRule; /** * Class IsBoolean */ -class IsBoolean implements Rule +class IsBoolean implements ValidationRule { /** - * Get the validation error message. - * - * @return string + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function message(): string - { - return (string)trans('validation.boolean'); - } - - /** - * Determine if the validation rule passes. - * - * @param string $attribute - * @param mixed $value - * - * @return bool - */ - public function passes($attribute, $value): bool + public function validate(string $attribute, mixed $value, \Closure $fail): void { if (is_bool($value)) { - return true; + return; } - if (is_int($value) && 0 === $value) { - return true; + if (0 === $value) { + return; } - if (is_int($value) && 1 === $value) { - return true; + if (1 === $value) { + return; } - if (is_string($value) && in_array($value, ['0', '1', 'true', 'false', 'on', 'off', 'yes', 'no', 'y', 'n'], true)) { - return true; + if (in_array($value, ['0', '1', 'true', 'false', 'on', 'off', 'yes', 'no', 'y', 'n'], true)) { + return; } - - return false; + $fail('validation.boolean')->translate(); } } diff --git a/app/Rules/IsDateOrTime.php b/app/Rules/IsDateOrTime.php index 8a6132ae58..60ccb3a963 100644 --- a/app/Rules/IsDateOrTime.php +++ b/app/Rules/IsDateOrTime.php @@ -27,67 +27,60 @@ namespace FireflyIII\Rules; use Carbon\Carbon; use Carbon\Exceptions\InvalidDateException; use Carbon\Exceptions\InvalidFormatException; -use Illuminate\Contracts\Validation\Rule; -use Illuminate\Support\Facades\Log; +use Illuminate\Contracts\Validation\ValidationRule; /** * Class IsDateOrTime */ -class IsDateOrTime implements Rule +class IsDateOrTime implements ValidationRule { /** - * Get the validation error message. - * - * @return string + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function message() - { - return (string)trans('validation.date_or_time'); - } - - /** - * Determine if the validation rule passes. - * - * @param string $attribute - * @param mixed $value - * - * @return bool - */ - public function passes($attribute, $value): bool + public function validate(string $attribute, mixed $value, \Closure $fail): void { $value = (string)$value; if ('' === $value) { - return false; + $fail('validation.date_or_time')->translate(); + + return; } if (10 === strlen($value)) { // probably a date format. try { Carbon::createFromFormat('Y-m-d', $value); - } catch (InvalidDateException $e) { - Log::error(sprintf('"%s" is not a valid date: %s', $value, $e->getMessage())); + } catch (InvalidDateException $e) { // @phpstan-ignore-line + app('log')->error(sprintf('"%s" is not a valid date: %s', $value, $e->getMessage())); - return false; - } catch (InvalidFormatException $e) { - Log::error(sprintf('"%s" is of an invalid format: %s', $value, $e->getMessage())); + $fail('validation.date_or_time')->translate(); - return false; + return; + } catch (InvalidFormatException $e) { // @phpstan-ignore-line + app('log')->error(sprintf('"%s" is of an invalid format: %s', $value, $e->getMessage())); + + $fail('validation.date_or_time')->translate(); + + return; } - return true; + return; } + // is an atom string, I hope? try { Carbon::parse($value); - } catch (InvalidDateException $e) { - Log::error(sprintf('"%s" is not a valid date or time: %s', $value, $e->getMessage())); + } catch (InvalidDateException $e) { // @phpstan-ignore-line + app('log')->error(sprintf('"%s" is not a valid date or time: %s', $value, $e->getMessage())); - return false; + $fail('validation.date_or_time')->translate(); + + return; } catch (InvalidFormatException $e) { - Log::error(sprintf('"%s" is of an invalid format: %s', $value, $e->getMessage())); + app('log')->error(sprintf('"%s" is of an invalid format: %s', $value, $e->getMessage())); - return false; + $fail('validation.date_or_time')->translate(); + + return; } - - return true; } } diff --git a/app/Rules/IsDuplicateTransaction.php b/app/Rules/IsDuplicateTransaction.php index 2bfb59089d..b729ff46c3 100644 --- a/app/Rules/IsDuplicateTransaction.php +++ b/app/Rules/IsDuplicateTransaction.php @@ -23,30 +23,24 @@ declare(strict_types=1); namespace FireflyIII\Rules; -use Illuminate\Contracts\Validation\Rule; +use Illuminate\Contracts\Validation\ValidationRule; /** + * TODO not sure where this is used. + * * Class IsDuplicateTransaction */ -class IsDuplicateTransaction implements Rule +class IsDuplicateTransaction implements ValidationRule { private string $value; /** - * @inheritDoc + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function message() - { - return $this->value; - } - - /** - * @inheritDoc - */ - public function passes($attribute, $value) + public function validate(string $attribute, mixed $value, \Closure $fail): void { $this->value = $value; - return false; + $fail($this->value); } } diff --git a/app/Rules/IsTransferAccount.php b/app/Rules/IsTransferAccount.php index 8cf7d14b05..e61b07ee47 100644 --- a/app/Rules/IsTransferAccount.php +++ b/app/Rules/IsTransferAccount.php @@ -26,50 +26,37 @@ namespace FireflyIII\Rules; use FireflyIII\Models\TransactionType; use FireflyIII\Validation\AccountValidator; -use Illuminate\Contracts\Validation\Rule; -use Illuminate\Support\Facades\Log; +use Illuminate\Contracts\Validation\ValidationRule; /** * Class IsTransferAccount */ -class IsTransferAccount implements Rule +class IsTransferAccount implements ValidationRule { /** - * Get the validation error message. - * - * @return string + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function message(): string + public function validate(string $attribute, mixed $value, \Closure $fail): void { - return (string)trans('validation.not_transfer_account'); - } + app('log')->debug(sprintf('Now in %s(%s)', __METHOD__, $value)); - /** - * Determine if the validation rule passes. - * - * @param string $attribute - * @param mixed $value - * - * @return bool - */ - public function passes($attribute, $value): bool - { - Log::debug(sprintf('Now in %s(%s)', __METHOD__, $value)); /** @var AccountValidator $validator */ - $validator = app(AccountValidator::class); + $validator = app(AccountValidator::class); $validator->setTransactionType(TransactionType::TRANSFER); $validator->setUser(auth()->user()); - $validAccount = $validator->validateSource(['name' => (string)$value,]); + $validAccount = $validator->validateSource(['name' => (string)$value]); if (true === $validAccount) { - Log::debug('Found account based on name. Return true.'); + app('log')->debug('Found account based on name. Return true.'); // found by name, use repos to return. - return true; + return; } - $validAccount = $validator->validateSource(['id' => (int)$value,]); - Log::debug(sprintf('Search by id (%d), result is %s.', (int)$value, var_export($validAccount, true))); + $validAccount = $validator->validateSource(['id' => (int)$value]); + app('log')->debug(sprintf('Search by id (%d), result is %s.', (int)$value, var_export($validAccount, true))); - return false !== $validAccount; + if (false === $validAccount) { + $fail('validation.not_transfer_account')->translate(); + } } } diff --git a/app/Rules/IsValidAmount.php b/app/Rules/IsValidAmount.php new file mode 100644 index 0000000000..598dec8965 --- /dev/null +++ b/app/Rules/IsValidAmount.php @@ -0,0 +1,72 @@ +emptyString($value)) { + $fail('validation.filled')->translate(); + $message = sprintf('IsValidAmount: "%s" cannot be empty.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + + // must be a number: + if (!$this->isValidNumber($value)) { + $fail('validation.numeric')->translate(); + $message = sprintf('IsValidAmount: "%s" is not a number.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + + // must not be scientific notation: + if ($this->scientificNumber($value)) { + $fail('validation.scientific_notation')->translate(); + $message = sprintf('IsValidAmount: "%s" cannot be in the scientific notation.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + + // must be more than minus a lots: + if ($this->lessThanLots($value)) { + $amount = bcmul('-1', self::BIG_AMOUNT); + $fail('validation.gte.numeric')->translate(['value' => $amount]); + $message = sprintf('IsValidAmount: "%s" must be more than %s.', $value, $amount); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + + // must be less than a large number + if ($this->moreThanLots($value)) { + $fail('validation.lte.numeric')->translate(['value' => self::BIG_AMOUNT]); + $message = sprintf('IsValidAmount: "%s" must be more than %s.', $value, self::BIG_AMOUNT); + Log::debug($message); + Log::channel('audit')->info($message); + } + Log::debug(sprintf('IsValidAmount: "%s" is a valid positive amount.', $value)); + } +} diff --git a/app/Rules/IsValidAttachmentModel.php b/app/Rules/IsValidAttachmentModel.php index fa21c25991..566737e86e 100644 --- a/app/Rules/IsValidAttachmentModel.php +++ b/app/Rules/IsValidAttachmentModel.php @@ -39,22 +39,17 @@ use FireflyIII\Repositories\Journal\JournalAPIRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\Tag\TagRepositoryInterface; -use Illuminate\Contracts\Validation\Rule; -use Illuminate\Support\Facades\Log; +use Illuminate\Contracts\Validation\ValidationRule; /** * Class IsValidAttachmentModel */ -class IsValidAttachmentModel implements Rule +class IsValidAttachmentModel implements ValidationRule { - /** @var string */ - private $model; + private string $model; /** * IsValidAttachmentModel constructor. - * - * - * @param string $model */ public function __construct(string $model) { @@ -62,11 +57,6 @@ class IsValidAttachmentModel implements Rule $this->model = $model; } - /** - * @param string $model - * - * @return string - */ private function normalizeModel(string $model): string { $search = ['FireflyIII\Models\\']; @@ -77,53 +67,32 @@ class IsValidAttachmentModel implements Rule } /** - * Get the validation error message. - * - * @return string + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function message(): string - { - return (string)trans('validation.model_id_invalid'); - } - - /** - * Determine if the validation rule passes. - * - * @param string $attribute - * @param mixed $value - * - * @return bool - */ - public function passes($attribute, $value): bool + public function validate(string $attribute, mixed $value, \Closure $fail): void { if (!auth()->check()) { - return false; - } - $methods = [ - Account::class => 'validateAccount', - Bill::class => 'validateBill', - Budget::class => 'validateBudget', - Category::class => 'validateCategory', - PiggyBank::class => 'validatePiggyBank', - Tag::class => 'validateTag', - Transaction::class => 'validateTransaction', - TransactionJournal::class => 'validateJournal', - ]; - if (!array_key_exists($this->model, $methods)) { - Log::error(sprintf('Cannot validate model "%s" in %s.', substr($this->model, 0, 20), __METHOD__)); + $fail('validation.model_id_invalid')->translate(); - return false; + return; } - $method = $methods[$this->model]; + $result = match ($this->model) { + Account::class => $this->validateAccount((int)$value), + Bill::class => $this->validateBill((int)$value), + Budget::class => $this->validateBudget((int)$value), + Category::class => $this->validateCategory((int)$value), + PiggyBank::class => $this->validatePiggyBank((int)$value), + Tag::class => $this->validateTag((int)$value), + Transaction::class => $this->validateTransaction((int)$value), + TransactionJournal::class => $this->validateJournal((int)$value), + default => false, + }; - return $this->$method((int)$value); + if (false === $result) { + $fail('validation.model_id_invalid')->translate(); + } } - /** - * @param int $value - * - * @return bool - */ private function validateAccount(int $value): bool { /** @var AccountRepositoryInterface $repository */ @@ -133,11 +102,6 @@ class IsValidAttachmentModel implements Rule return null !== $repository->find($value); } - /** - * @param int $value - * - * @return bool - */ private function validateBill(int $value): bool { /** @var BillRepositoryInterface $repository */ @@ -147,11 +111,6 @@ class IsValidAttachmentModel implements Rule return null !== $repository->find($value); } - /** - * @param int $value - * - * @return bool - */ private function validateBudget(int $value): bool { /** @var BudgetRepositoryInterface $repository */ @@ -161,11 +120,6 @@ class IsValidAttachmentModel implements Rule return null !== $repository->find($value); } - /** - * @param int $value - * - * @return bool - */ private function validateCategory(int $value): bool { /** @var CategoryRepositoryInterface $repository */ @@ -175,24 +129,6 @@ class IsValidAttachmentModel implements Rule return null !== $repository->find($value); } - /** - * @param int $value - * - * @return bool - */ - private function validateJournal(int $value): bool - { - $repository = app(JournalRepositoryInterface::class); - $repository->setUser(auth()->user()); - - return null !== $repository->find($value); - } - - /** - * @param int $value - * - * @return bool - */ private function validatePiggyBank(int $value): bool { /** @var PiggyBankRepositoryInterface $repository */ @@ -202,11 +138,6 @@ class IsValidAttachmentModel implements Rule return null !== $repository->find($value); } - /** - * @param int $value - * - * @return bool - */ private function validateTag(int $value): bool { /** @var TagRepositoryInterface $repository */ @@ -216,17 +147,20 @@ class IsValidAttachmentModel implements Rule return null !== $repository->find($value); } - /** - * @param int $value - * - * @return bool - */ private function validateTransaction(int $value): bool { /** @var JournalAPIRepositoryInterface $repository */ $repository = app(JournalAPIRepositoryInterface::class); $repository->setUser(auth()->user()); - return null !== $repository->findTransaction((int)$value); + return null !== $repository->findTransaction($value); + } + + private function validateJournal(int $value): bool + { + $repository = app(JournalRepositoryInterface::class); + $repository->setUser(auth()->user()); + + return null !== $repository->find($value); } } diff --git a/app/Rules/IsValidBulkClause.php b/app/Rules/IsValidBulkClause.php index 7a8bda7692..1a79add025 100644 --- a/app/Rules/IsValidBulkClause.php +++ b/app/Rules/IsValidBulkClause.php @@ -24,63 +24,47 @@ declare(strict_types=1); namespace FireflyIII\Rules; -use Illuminate\Contracts\Validation\Rule; +use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Support\Facades\Validator; -use JsonException; /** * Class IsValidBulkClause */ -class IsValidBulkClause implements Rule +class IsValidBulkClause implements ValidationRule { private string $error; private array $rules; - /** - * @param string $type - */ public function __construct(string $type) { $this->rules = config(sprintf('bulk.%s', $type)); $this->error = (string)trans('firefly.belongs_user'); } - /** - * @return string - */ public function message(): string { return $this->error; } /** - * @param string $attribute - * @param mixed $value - * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function passes($attribute, $value): bool + public function validate(string $attribute, mixed $value, \Closure $fail): void { $result = $this->basicValidation((string)$value); if (false === $result) { - return false; + $fail($this->error); } - - return true; } /** * Does basic rule based validation. - * - * @param string $value - * - * @return bool */ private function basicValidation(string $value): bool { try { $array = json_decode($value, true, 8, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { + } catch (\JsonException $e) { $this->error = (string)trans('validation.json'); return false; @@ -92,6 +76,7 @@ class IsValidBulkClause implements Rule return false; } + /** * @var string $arrayKey * @var mixed $arrayValue @@ -107,7 +92,7 @@ class IsValidBulkClause implements Rule 'value' => $this->rules[$clause][$arrayKey], ]); if ($validator->fails()) { - $this->error = sprintf('%s: %s: %s', $clause, $arrayKey, join(', ', ($validator->errors()->get('value')))); + $this->error = sprintf('%s: %s: %s', $clause, $arrayKey, implode(', ', $validator->errors()->get('value'))); return false; } diff --git a/app/Rules/IsValidPositiveAmount.php b/app/Rules/IsValidPositiveAmount.php new file mode 100644 index 0000000000..7a6b559c7f --- /dev/null +++ b/app/Rules/IsValidPositiveAmount.php @@ -0,0 +1,67 @@ +emptyString($value)) { + $fail('validation.filled')->translate(); + $message = sprintf('IsValidPositiveAmount: "%s" cannot be empty.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + + // must be a number: + if (!$this->isValidNumber($value)) { + $fail('validation.numeric')->translate(); + $message = sprintf('IsValidPositiveAmount: "%s" is not a number.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + // must not be scientific notation: + if ($this->scientificNumber($value)) { + $fail('validation.scientific_notation')->translate(); + $message = sprintf('IsValidPositiveAmount: "%s" cannot be in the scientific notation.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + // must be more than zero: + if ($this->lessOrEqualToZero($value)) { + $fail('validation.more_than_zero')->translate(); + $message = sprintf('IsValidPositiveAmount: "%s" must be more than zero.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + // must be less than a large number + if ($this->moreThanLots($value)) { + $fail('validation.lte.numeric')->translate(['value' => self::BIG_AMOUNT]); + $message = sprintf('IsValidPositiveAmount: "%s" must be less than %s.', $value, self::BIG_AMOUNT); + Log::debug($message); + Log::channel('audit')->info($message); + } + Log::debug(sprintf('IsValidPositiveAmount: "%s" is a valid positive amount.', $value)); + } +} diff --git a/app/Rules/IsValidZeroOrMoreAmount.php b/app/Rules/IsValidZeroOrMoreAmount.php new file mode 100644 index 0000000000..1d2866d06f --- /dev/null +++ b/app/Rules/IsValidZeroOrMoreAmount.php @@ -0,0 +1,67 @@ +emptyString($value)) { + $fail('validation.filled')->translate(); + $message = sprintf('IsValidZeroOrMoreAmount: "%s" cannot be empty.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + + // must be a number: + if (!$this->isValidNumber($value)) { + $fail('validation.numeric')->translate(); + $message = sprintf('IsValidZeroOrMoreAmount: "%s" is not a number.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + // must not be scientific notation: + if ($this->scientificNumber($value)) { + $fail('validation.scientific_notation')->translate(); + $message = sprintf('IsValidZeroOrMoreAmount: "%s" cannot be in the scientific notation.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + // must be zero or more + if (!$this->zeroOrMore($value)) { + $fail('validation.more_than_zero_correct')->translate(); + $message = sprintf('IsValidZeroOrMoreAmount: "%s" must be zero or more.', $value); + Log::debug($message); + Log::channel('audit')->info($message); + + return; + } + // must be less than a large number + if ($this->moreThanLots($value)) { + $fail('validation.lte.numeric')->translate(['value' => self::BIG_AMOUNT]); + $message = sprintf('IsValidPositiveAmount: "%s" must be less than %s.', $value, self::BIG_AMOUNT); + Log::debug($message); + Log::channel('audit')->info($message); + } + Log::debug(sprintf('IsValidZeroOrMoreAmount: "%s" is a valid positive amount.', $value)); + } +} diff --git a/app/Rules/LessThanPiggyTarget.php b/app/Rules/LessThanPiggyTarget.php index e19589ea74..433d02dd2e 100644 --- a/app/Rules/LessThanPiggyTarget.php +++ b/app/Rules/LessThanPiggyTarget.php @@ -24,17 +24,15 @@ declare(strict_types=1); namespace FireflyIII\Rules; -use Illuminate\Contracts\Validation\Rule; +use Illuminate\Contracts\Validation\ValidationRule; /** * Class LessThanPiggyTarget */ -class LessThanPiggyTarget implements Rule +class LessThanPiggyTarget implements ValidationRule { /** * Get the validation error message. - * - * @return string */ public function message(): string { @@ -42,15 +40,10 @@ class LessThanPiggyTarget implements Rule } /** - * Determine if the validation rule passes. - * - * @param string $attribute - * @param mixed $value - * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function passes($attribute, $value): bool + public function validate(string $attribute, mixed $value, \Closure $fail): void { - return true; + // TODO not sure if this is still used. } } diff --git a/app/Rules/UniqueAccountNumber.php b/app/Rules/UniqueAccountNumber.php index c9aaddafe8..1b5cb68d8e 100644 --- a/app/Rules/UniqueAccountNumber.php +++ b/app/Rules/UniqueAccountNumber.php @@ -26,27 +26,24 @@ namespace FireflyIII\Rules; use FireflyIII\Models\Account; use FireflyIII\Models\AccountMeta; use FireflyIII\Models\AccountType; -use Illuminate\Contracts\Validation\Rule; -use Illuminate\Support\Facades\Log; +use Illuminate\Contracts\Validation\ValidationRule; /** * Class UniqueAccountNumber */ -class UniqueAccountNumber implements Rule +class UniqueAccountNumber implements ValidationRule { private ?Account $account; private ?string $expectedType; /** * Create a new rule instance. - * - * - * @param Account|null $account - * @param string|null $expectedType */ public function __construct(?Account $account, ?string $expectedType) { - Log::debug('Constructed UniqueAccountNumber'); + app('log') + ->debug('Constructed UniqueAccountNumber') + ; $this->account = $account; $this->expectedType = $expectedType; // a very basic fix to make sure we get the correct account type: @@ -59,14 +56,11 @@ class UniqueAccountNumber implements Rule if ('asset' === $expectedType) { $this->expectedType = AccountType::ASSET; } - Log::debug(sprintf('Expected type is "%s"', $this->expectedType)); + app('log')->debug(sprintf('Expected type is "%s"', $this->expectedType)); } /** * Get the validation error message. - * - * - * @return string */ public function message(): string { @@ -74,29 +68,23 @@ class UniqueAccountNumber implements Rule } /** - * Determine if the validation rule passes. - * - * @param string $attribute - * @param mixed $value - * - * @return bool - * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function passes($attribute, $value): bool + public function validate(string $attribute, mixed $value, \Closure $fail): void { if (!auth()->check()) { - return true; + return; } if (null === $this->expectedType) { - return true; + return; } $maxCounts = $this->getMaxOccurrences(); foreach ($maxCounts as $type => $max) { $count = $this->countHits($type, $value); - Log::debug(sprintf('Count for "%s" and account number "%s" is %d', $type, $value, $count)); + app('log')->debug(sprintf('Count for "%s" and account number "%s" is %d', $type, $value, $count)); if ($count > $max) { - Log::debug( + app('log')->debug( sprintf( 'account number "%s" is in use with %d account(s) of type "%s", which is too much for expected type "%s"', $value, @@ -106,18 +94,14 @@ class UniqueAccountNumber implements Rule ) ); - return false; + $fail('validation.unique_account_number_for_user')->translate(); + + return; } } - Log::debug('Account number is valid.'); - - return true; + app('log')->debug('Account number is valid.'); } - /** - * @return array - * - */ private function getMaxOccurrences(): array { $maxCounts = [ @@ -140,20 +124,15 @@ class UniqueAccountNumber implements Rule return $maxCounts; } - /** - * @param string $type - * @param string $accountNumber - * - * @return int - */ private function countHits(string $type, string $accountNumber): int { $query = AccountMeta::leftJoin('accounts', 'accounts.id', '=', 'account_meta.account_id') - ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') - ->where('accounts.user_id', auth()->user()->id) - ->where('account_types.type', $type) - ->where('account_meta.name', '=', 'account_number') - ->where('account_meta.data', json_encode($accountNumber)); + ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') + ->where('accounts.user_id', auth()->user()->id) + ->where('account_types.type', $type) + ->where('account_meta.name', '=', 'account_number') + ->where('account_meta.data', json_encode($accountNumber)) + ; if (null !== $this->account) { $query->where('accounts.id', '!=', $this->account->id); diff --git a/app/Rules/UniqueIban.php b/app/Rules/UniqueIban.php index 6a0c3940cb..3bc00be090 100644 --- a/app/Rules/UniqueIban.php +++ b/app/Rules/UniqueIban.php @@ -23,11 +23,9 @@ declare(strict_types=1); namespace FireflyIII\Rules; -use Closure; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use Illuminate\Contracts\Validation\ValidationRule; -use Illuminate\Support\Facades\Log; /** * Class UniqueIban @@ -39,10 +37,6 @@ class UniqueIban implements ValidationRule /** * Create a new rule instance. - * - * - * @param Account|null $account - * @param string|null $expectedType */ public function __construct(?Account $account, ?string $expectedType) { @@ -69,19 +63,13 @@ class UniqueIban implements ValidationRule /** * Get the validation error message. - * - * - * @return string */ public function message(): string { return (string)trans('validation.unique_iban_for_user'); } - /** - * @inheritDoc - */ - public function validate(string $attribute, mixed $value, Closure $fail): void + public function validate(string $attribute, mixed $value, \Closure $fail): void { if (!$this->passes($attribute, $value)) { $fail((string)trans('validation.unique_iban_for_user')); @@ -94,8 +82,7 @@ class UniqueIban implements ValidationRule * @param string $attribute * @param mixed $value * - * @return bool - * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function passes($attribute, $value): bool { @@ -109,15 +96,15 @@ class UniqueIban implements ValidationRule foreach ($maxCounts as $type => $max) { $count = $this->countHits($type, $value); - Log::debug(sprintf('Count for "%s" and IBAN "%s" is %d', $type, $value, $count)); + app('log')->debug(sprintf('Count for "%s" and IBAN "%s" is %d', $type, $value, $count)); if ($count > $max) { - Log::debug( + app('log')->debug( sprintf( 'IBAN "%s" is in use with %d account(s) of type "%s", which is too much for expected types "%s"', $value, $count, $type, - join(', ', $this->expectedTypes) + implode(', ', $this->expectedTypes) ) ); @@ -128,10 +115,6 @@ class UniqueIban implements ValidationRule return true; } - /** - * @return array - * - */ private function getMaxOccurrences(): array { $maxCounts = [ @@ -155,12 +138,6 @@ class UniqueIban implements ValidationRule return $maxCounts; } - /** - * @param string $type - * @param string $iban - * - * @return int - */ private function countHits(string $type, string $iban): int { $typesArray = [$type]; @@ -168,11 +145,12 @@ class UniqueIban implements ValidationRule $typesArray = [AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]; } $query - = auth()->user() - ->accounts() - ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') - ->where('accounts.iban', $iban) - ->whereIn('account_types.type', $typesArray); + = auth()->user() + ->accounts() + ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') + ->where('accounts.iban', $iban) + ->whereIn('account_types.type', $typesArray) + ; if (null !== $this->account) { $query->where('accounts.id', '!=', $this->account->id); diff --git a/app/Rules/ValidJournals.php b/app/Rules/ValidJournals.php index 11e56e89cf..a73ba98f2b 100644 --- a/app/Rules/ValidJournals.php +++ b/app/Rules/ValidJournals.php @@ -25,52 +25,33 @@ declare(strict_types=1); namespace FireflyIII\Rules; use FireflyIII\Models\TransactionJournal; -use Illuminate\Contracts\Validation\Rule; -use Illuminate\Support\Facades\Log; +use Illuminate\Contracts\Validation\ValidationRule; /** * Class ValidJournals - * - */ -class ValidJournals implements Rule +class ValidJournals implements ValidationRule { /** - * Get the validation error message. - * - * @return string + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function message(): string + public function validate(string $attribute, mixed $value, \Closure $fail): void { - return (string)trans('validation.invalid_selection'); - } - - /** - * Determine if the validation rule passes. - * - * @param string $attribute - * @param mixed $value - * - * @return bool - * - */ - public function passes($attribute, $value): bool - { - Log::debug('In ValidJournals::passes'); + app('log')->debug('In ValidJournals::passes'); if (!is_array($value)) { - return true; + return; } $userId = auth()->user()->id; foreach ($value as $journalId) { $count = TransactionJournal::where('id', $journalId)->where('user_id', $userId)->count(); if (0 === $count) { - Log::debug(sprintf('Count for transaction #%d and user #%d is zero! Return FALSE', $journalId, $userId)); + app('log')->debug(sprintf('Count for transaction #%d and user #%d is zero! Return FALSE', $journalId, $userId)); - return false; + $fail('validation.invalid_selection')->translate(); + + return; } } - Log::debug('Return true!'); - - return true; + app('log')->debug('Return true!'); } } diff --git a/app/Rules/ValidRecurrenceRepetitionType.php b/app/Rules/ValidRecurrenceRepetitionType.php index 508835a5fb..d4015d1d7c 100644 --- a/app/Rules/ValidRecurrenceRepetitionType.php +++ b/app/Rules/ValidRecurrenceRepetitionType.php @@ -23,52 +23,36 @@ declare(strict_types=1); namespace FireflyIII\Rules; -use Illuminate\Contracts\Validation\Rule; +use Illuminate\Contracts\Validation\ValidationRule; /** * Class ValidRecurrenceRepetitionType - * - */ -class ValidRecurrenceRepetitionType implements Rule +class ValidRecurrenceRepetitionType implements ValidationRule { - /** - * Get the validation error message. - * - * @return string - */ - public function message(): string - { - return (string)trans('validation.valid_recurrence_rep_type'); - } - /** * Determine if the validation rule passes. * - * @param string $attribute - * @param mixed $value - * - * @return bool - * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function passes($attribute, $value): bool + public function validate(string $attribute, mixed $value, \Closure $fail): void { $value = (string)$value; if ('daily' === $value) { - return true; + return; } - //monthly,17 - //ndom,3,7 + // monthly,17 + // ndom,3,7 if (in_array(substr($value, 0, 6), ['yearly', 'weekly'], true)) { - return true; + return; } if (str_starts_with($value, 'monthly')) { - return true; + return; } if (str_starts_with($value, 'ndom')) { - return true; + return; } - return false; + $fail('validation.valid_recurrence_rep_type')->translate(); } } diff --git a/app/Rules/ValidRecurrenceRepetitionValue.php b/app/Rules/ValidRecurrenceRepetitionValue.php index 10ec16ea84..637b26b56a 100644 --- a/app/Rules/ValidRecurrenceRepetitionValue.php +++ b/app/Rules/ValidRecurrenceRepetitionValue.php @@ -24,72 +24,47 @@ declare(strict_types=1); namespace FireflyIII\Rules; use Carbon\Carbon; -use Illuminate\Contracts\Validation\Rule; -use Illuminate\Support\Facades\Log; -use InvalidArgumentException; +use Illuminate\Contracts\Validation\ValidationRule; /** * Class ValidRecurrenceRepetitionValue - * - */ -class ValidRecurrenceRepetitionValue implements Rule +class ValidRecurrenceRepetitionValue implements ValidationRule { /** - * Get the validation error message. - * - * @return string + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function message(): string - { - return (string)trans('validation.valid_recurrence_rep_type'); - } - - /** - * Determine if the validation rule passes. - * - * @param string $attribute - * @param mixed $value - * - * @return bool - * - */ - public function passes($attribute, $value): bool + public function validate(string $attribute, mixed $value, \Closure $fail): void { $value = (string)$value; if ('daily' === $value) { - return true; + return; } - if (str_starts_with($value, 'monthly')) { - return $this->validateMonthly($value); + if (str_starts_with($value, 'monthly') && $this->validateMonthly($value)) { + return; } // Value is like: ndom,3,7 // nth x-day of the month. - if (str_starts_with($value, 'ndom')) { - return $this->validateNdom($value); + if (str_starts_with($value, 'ndom') && $this->validateNdom($value)) { + return; } // Value is like: weekly,7 - if (str_starts_with($value, 'weekly')) { - return $this->validateWeekly($value); + if (str_starts_with($value, 'weekly') && $this->validateWeekly($value)) { + return; } // Value is like: yearly,2018-01-01 - if (str_starts_with($value, 'yearly')) { - return $this->validateYearly($value); + if (str_starts_with($value, 'yearly') && $this->validateYearly($value)) { + return; } - return false; + $fail('validation.valid_recurrence_rep_type')->translate(); } - /** - * @param string $value - * - * @return bool - */ private function validateMonthly(string $value): bool { $dayOfMonth = (int)substr($value, 8); @@ -97,20 +72,14 @@ class ValidRecurrenceRepetitionValue implements Rule return $dayOfMonth > 0 && $dayOfMonth < 32; } - /** - * @param string $value - * - * @return bool - * - */ private function validateNdom(string $value): bool { $parameters = explode(',', substr($value, 5)); if (2 !== count($parameters)) { return false; } - $nthDay = (int)($parameters[0] ?? 0.0); - $dayOfWeek = (int)($parameters[1] ?? 0.0); + $nthDay = (int)($parameters[0] ?? 0.0); + $dayOfWeek = (int)($parameters[1] ?? 0.0); if ($nthDay < 1 || $nthDay > 5) { return false; } @@ -118,11 +87,6 @@ class ValidRecurrenceRepetitionValue implements Rule return $dayOfWeek > 0 && $dayOfWeek < 8; } - /** - * @param string $value - * - * @return bool - */ private function validateWeekly(string $value): bool { $dayOfWeek = (int)substr($value, 7); @@ -130,19 +94,15 @@ class ValidRecurrenceRepetitionValue implements Rule return $dayOfWeek > 0 && $dayOfWeek < 8; } - /** - * @param string $value - * - * @return bool - */ private function validateYearly(string $value): bool { // rest of the string must be valid date: $dateString = substr($value, 7); + try { Carbon::createFromFormat('Y-m-d', $dateString); - } catch (InvalidArgumentException $e) { - Log::debug(sprintf('Could not parse date %s: %s', $dateString, $e->getMessage())); + } catch (\InvalidArgumentException $e) { // @phpstan-ignore-line + app('log')->debug(sprintf('Could not parse date %s: %s', $dateString, $e->getMessage())); return false; } diff --git a/app/Services/FireflyIIIOrg/Update/UpdateRequest.php b/app/Services/FireflyIIIOrg/Update/UpdateRequest.php index 2f09340c09..d45a9ff781 100644 --- a/app/Services/FireflyIIIOrg/Update/UpdateRequest.php +++ b/app/Services/FireflyIIIOrg/Update/UpdateRequest.php @@ -29,31 +29,25 @@ use FireflyIII\Events\NewVersionAvailable; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; use Illuminate\Support\Facades\Log; -use JsonException; /** * Class UpdateRequest */ class UpdateRequest implements UpdateRequestInterface { - /** - * @param string $channel - * - * @return array - */ public function getUpdateInformation(string $channel): array { - Log::debug(sprintf('Now in getUpdateInformation(%s)', $channel)); + app('log')->debug(sprintf('Now in getUpdateInformation(%s)', $channel)); $information = [ 'level' => 'error', 'message' => (string)trans('firefly.unknown_error'), ]; - // try get array from update server: - $updateInfo = $this->contactServer($channel); + // try to get array from update server: + $updateInfo = $this->contactServer($channel); if ('error' === $updateInfo['level']) { - Log::error('Update information contains an error.'); - Log::error($updateInfo['message']); + app('log')->error('Update information contains an error.'); + app('log')->error($updateInfo['message']); $information['message'] = $updateInfo['message']; return $information; @@ -63,24 +57,20 @@ class UpdateRequest implements UpdateRequestInterface return $this->parseResult($updateInfo); } - /** - * @param string $channel - * - * @return array - */ private function contactServer(string $channel): array { - Log::debug(sprintf('Now in contactServer(%s)', $channel)); + app('log')->debug(sprintf('Now in contactServer(%s)', $channel)); // always fall back to current version: - $return = [ + $return = [ 'version' => config('firefly.version'), 'date' => today(config('app.timezone'))->startOfDay(), 'level' => 'error', 'message' => (string)trans('firefly.unknown_error'), ]; - $url = config('firefly.update_endpoint'); - Log::debug(sprintf('Going to call %s', $url)); + $url = config('firefly.update_endpoint'); + app('log')->debug(sprintf('Going to call %s', $url)); + try { $client = new Client(); $options = [ @@ -91,141 +81,200 @@ class UpdateRequest implements UpdateRequestInterface ]; $res = $client->request('GET', $url, $options); } catch (GuzzleException $e) { - Log::error('Ran into Guzzle error.'); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error('Ran into Guzzle error.'); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); $return['message'] = sprintf('Guzzle: %s', strip_tags($e->getMessage())); return $return; } if (200 !== $res->getStatusCode()) { - Log::error(sprintf('Response status from server is %d.', $res->getStatusCode())); - Log::error((string)$res->getBody()); + app('log')->error(sprintf('Response status from server is %d.', $res->getStatusCode())); + app('log')->error((string)$res->getBody()); $return['message'] = sprintf('Error: %d', $res->getStatusCode()); return $return; } - $body = (string)$res->getBody(); + $body = (string)$res->getBody(); + try { $json = json_decode($body, true, 512, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { - Log::error('Body is not valid JSON'); - Log::error($body); + } catch (\JsonException $e) { + app('log')->error('Body is not valid JSON'); + app('log')->error($body); $return['message'] = 'Invalid JSON :('; return $return; } if (!array_key_exists($channel, $json['firefly_iii'])) { - Log::error(sprintf('No valid update channel "%s"', $channel)); - Log::error($body); + app('log')->error(sprintf('No valid update channel "%s"', $channel)); + app('log')->error($body); $return['message'] = sprintf('Unknown update channel "%s" :(', $channel); } // parse response a bit. No message yet. $response = $json['firefly_iii'][$channel]; + $date = Carbon::createFromFormat('Y-m-d', $response['date']); + if (false === $date) { + $date = today(config('app.timezone')); + } $return['version'] = $response['version']; $return['level'] = 'success'; - $return['date'] = Carbon::createFromFormat('Y-m-d', $response['date'])->startOfDay(); - Log::info('Response from update server', $response); + $return['date'] = $date->startOfDay(); + + app('log')->info('Response from update server', $response); return $return; } /** - * @param array $information - * - * @return array + * TODO make shorter */ private function parseResult(array $information): array { - Log::debug('Now in parseResult()', $information); - $return = [ - 'level' => 'error', - 'message' => (string)trans('firefly.unknown_error'), - ]; - $current = config('firefly.version'); - $latest = $information['version']; + app('log')->debug('Now in parseResult()', $information); + $current = (string)config('firefly.version'); + $latest = (string)$information['version']; // strip the 'v' from the version if it's there. if (str_starts_with($latest, 'v')) { $latest = substr($latest, 1); } + if (str_starts_with($current, 'develop')) { + return $this->parseResultDevelop($current, $latest, $information); + } - $compare = version_compare($latest, $current); + $compare = version_compare($latest, $current); - Log::debug(sprintf('Current version is "%s", latest is "%s", result is: %d', $current, $latest, $compare)); + app('log')->debug(sprintf('Current version is "%s", latest is "%s", result is: %d', $current, $latest, $compare)); // -1: you're running a newer version: if (-1 === $compare) { - $return['level'] = 'info'; - $return['message'] = (string)trans('firefly.update_newer_version_alert', ['your_version' => $current, 'new_version' => $latest]); - Log::debug('User is running a newer version', $return); - - return $return; + return $this->runsNewerVersion($current, $latest); } // running the current version: if (0 === $compare) { - $return['level'] = 'info'; - $return['message'] = (string)trans('firefly.update_current_version_alert', ['version' => $current]); - Log::debug('User is the current version.', $return); - - return $return; + return $this->runsSameVersion($current); } // a newer version is available! /** @var Carbon $released */ - $released = $information['date']; - $today = today(config('app.timezone'))->startOfDay(); - $diff = $today->diffInDays($released); - $expectedDiff = config('firefly.update_minimum_age') ?? 6; - // it's still very fresh, and user wants a stable release: - if ($diff <= $expectedDiff) { + $released = $information['date']; + $isBeta = $information['is_beta'] ?? false; + $isAlpha = $information['is_alpha'] ?? false; + + // it's new but alpha: + if (true === $isAlpha) { + return $this->releasedNewAlpha($current, $latest, $released); + } + + if (true === $isBeta) { + return $this->releasedNewBeta($current, $latest, $released); + } + + return $this->releasedNewVersion($current, $latest, $released); + } + + private function parseResultDevelop(string $current, string $latest, array $information): array + { + Log::debug(sprintf('User is running develop version "%s"', $current)); + $parts = explode('/', $current); + $return = []; + + /** @var Carbon $devDate */ + $devDate = Carbon::createFromFormat('Y-m-d', $parts[1]); + + if ($devDate->lte($information['date'])) { + Log::debug(sprintf('This development release is older, release = %s, latest version %s = %s', $devDate->format('Y-m-d'), $latest, $information['date']->format('Y-m-d'))); $return['level'] = 'info'; - $return['message'] = (string)trans( - 'firefly.just_new_release', - [ - 'version' => $latest, - 'date' => $released->isoFormat((string)trans('config.month_and_day_js')), - 'days' => $expectedDiff, - ] - ); - Log::debug('Release is very fresh.', $return); + $return['message'] = (string)trans('firefly.update_current_dev_older', ['version' => $current, 'new_version' => $latest]); return $return; } + Log::debug(sprintf('This development release is newer, release = %s, latest version %s = %s', $devDate->format('Y-m-d'), $latest, $information['date']->format('Y-m-d'))); + $return['level'] = 'info'; + $return['message'] = (string)trans('firefly.update_current_dev_newer', ['version' => $current, 'new_version' => $latest]); - // it's been around for a while: - $return['level'] = 'success'; - $return['message'] = (string)trans( + return $return; + } + + private function runsNewerVersion(string $current, string $latest): array + { + $return = [ + 'level' => 'info', + 'message' => (string)trans('firefly.update_newer_version_alert', ['your_version' => $current, 'new_version' => $latest]), + ]; + app('log')->debug('User is running a newer version', $return); + + return $return; + } + + private function runsSameVersion(string $current): array + { + $return = [ + 'level' => 'info', + 'message' => (string)trans('firefly.update_current_version_alert', ['version' => $current]), + ]; + app('log')->debug('User is the current version.', $return); + + return $return; + } + + private function releasedNewAlpha(string $current, string $latest, Carbon $date): array + { + app('log')->debug('New release is also a alpha!'); + $message = (string)trans( 'firefly.update_new_version_alert', [ 'your_version' => $current, 'new_version' => $latest, - 'date' => $released->isoFormat((string)trans('config.month_and_day_js')), + 'date' => $date->isoFormat((string)trans('config.month_and_day_js')), ] ); - Log::debug('New release is old enough.'); - // add warning in case of alpha or beta: - // append warning if beta or alpha. - $isBeta = $information['is_beta'] ?? false; - if (true === $isBeta) { - $return['message'] = sprintf('%s %s', $return['message'], trans('firefly.update_version_beta')); - Log::debug('New release is also a beta!'); - } + return [ + 'level' => 'success', + 'message' => sprintf('%s %s', $message, trans('firefly.update_version_alpha')), + ]; + } - $isAlpha = $information['is_alpha'] ?? false; - if (true === $isAlpha) { - $return['message'] = sprintf('%s %s', $return['message'], trans('firefly.update_version_alpha')); - Log::debug('New release is also a alpha!'); - } - Log::debug('New release is here!', $return); + private function releasedNewBeta(string $current, string $latest, Carbon $date): array + { + app('log')->debug('New release is also a beta!'); + $message = (string)trans( + 'firefly.update_new_version_alert', + [ + 'your_version' => $current, + 'new_version' => $latest, + 'date' => $date->isoFormat((string)trans('config.month_and_day_js')), + ] + ); - // send event, this may result in a notification. - event(new NewVersionAvailable($return['message'])); + return [ + 'level' => 'success', + 'message' => sprintf('%s %s', $message, trans('firefly.update_version_beta')), + ]; + } - return $return; + private function releasedNewVersion(string $current, string $latest, Carbon $date): array + { + app('log')->debug('New release is old enough.'); + $message = (string)trans( + 'firefly.update_new_version_alert', + [ + 'your_version' => $current, + 'new_version' => $latest, + 'date' => $date->isoFormat((string)trans('config.month_and_day_js')), + ] + ); + app('log')->debug('New release is here!', [$message]); + event(new NewVersionAvailable($message)); + + return [ + 'level' => 'success', + 'message' => $message, + ]; } } diff --git a/app/Services/FireflyIIIOrg/Update/UpdateRequestInterface.php b/app/Services/FireflyIIIOrg/Update/UpdateRequestInterface.php index de0e8f294b..f0e51d43be 100644 --- a/app/Services/FireflyIIIOrg/Update/UpdateRequestInterface.php +++ b/app/Services/FireflyIIIOrg/Update/UpdateRequestInterface.php @@ -29,10 +29,5 @@ namespace FireflyIII\Services\FireflyIIIOrg\Update; */ interface UpdateRequestInterface { - /** - * @param string $channel - * - * @return array - */ public function getUpdateInformation(string $channel): array; } diff --git a/app/Services/Internal/Destroy/AccountDestroyService.php b/app/Services/Internal/Destroy/AccountDestroyService.php index af4fd4cace..c7ab06163b 100644 --- a/app/Services/Internal/Destroy/AccountDestroyService.php +++ b/app/Services/Internal/Destroy/AccountDestroyService.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Services\Internal\Destroy; -use DB; use FireflyIII\Models\Account; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\RecurrenceTransaction; @@ -31,20 +30,12 @@ use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use Illuminate\Database\Eloquent\Builder; -use Illuminate\Support\Facades\Log; -use stdClass; /** * Class AccountDestroyService */ class AccountDestroyService { - /** - * @param Account $account - * @param Account|null $moveTo - * - * @return void - */ public function destroy(Account $account, ?Account $moveTo): void { // find and delete opening balance journal + opposing account @@ -70,36 +61,36 @@ class AccountDestroyService $account->delete(); } - /** - * @param Account $account - */ private function destroyOpeningBalance(Account $account): void { - Log::debug(sprintf('Searching for opening balance for account #%d "%s"', $account->id, $account->name)); + app('log')->debug(sprintf('Searching for opening balance for account #%d "%s"', $account->id, $account->name)); $set = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') - ->where('transaction_types.type', TransactionType::OPENING_BALANCE) - ->get(['transactions.transaction_journal_id']); + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') + ->where('transaction_types.type', TransactionType::OPENING_BALANCE) + ->get(['transactions.transaction_journal_id']) + ; if ($set->count() > 0) { - $journalId = (int)$set->first()->transaction_journal_id; - Log::debug(sprintf('Found opening balance journal with ID #%d', $journalId)); + $journalId = $set->first()->transaction_journal_id; + app('log')->debug(sprintf('Found opening balance journal with ID #%d', $journalId)); // get transactions with this journal (should be just one): $transactions = Transaction::where('transaction_journal_id', $journalId) - ->where('account_id', '!=', $account->id) - ->get(); + ->where('account_id', '!=', $account->id) + ->get() + ; + /** @var Transaction $transaction */ foreach ($transactions as $transaction) { - Log::debug(sprintf('Found transaction with ID #%d', $transaction->id)); + app('log')->debug(sprintf('Found transaction with ID #%d', $transaction->id)); $ibAccount = $transaction->account; - Log::debug(sprintf('Connected to account #%d "%s"', $ibAccount->id, $ibAccount->name)); + app('log')->debug(sprintf('Connected to account #%d "%s"', $ibAccount->id, $ibAccount->name)); $ibAccount->accountMeta()->delete(); $transaction->delete(); $ibAccount->delete(); } - $journal = TransactionJournal::find($journalId); + $journal = TransactionJournal::find($journalId); if (null !== $journal) { /** @var JournalDestroyService $service */ $service = app(JournalDestroyService::class); @@ -108,76 +99,66 @@ class AccountDestroyService } } - /** - * @param Account $account - * @param Account $moveTo - */ public function moveTransactions(Account $account, Account $moveTo): void { - Log::debug(sprintf('Move from account #%d to #%d', $account->id, $moveTo->id)); - DB::table('transactions')->where('account_id', $account->id)->update(['account_id' => $moveTo->id]); + app('log')->debug(sprintf('Move from account #%d to #%d', $account->id, $moveTo->id)); + \DB::table('transactions')->where('account_id', $account->id)->update(['account_id' => $moveTo->id]); $collection = Transaction::groupBy('transaction_journal_id', 'account_id') - ->where('account_id', $moveTo->id) - ->get(['transaction_journal_id', 'account_id', DB::raw('count(*) as the_count')]); + ->where('account_id', $moveTo->id) + ->get(['transaction_journal_id', 'account_id', \DB::raw('count(*) as the_count')]) // @phpstan-ignore-line + ; if (0 === $collection->count()) { return; } /** @var JournalDestroyService $service */ - $service = app(JournalDestroyService::class); - $user = $account->user; - /** @var stdClass $row */ + $service = app(JournalDestroyService::class); + $user = $account->user; + + /** @var \stdClass $row */ foreach ($collection as $row) { if ((int)$row->the_count > 1) { - $journalId = (int)$row->transaction_journal_id; + $journalId = $row->transaction_journal_id; $journal = $user->transactionJournals()->find($journalId); if (null !== $journal) { - Log::debug(sprintf('Deleted journal #%d because it has the same source as destination.', $journal->id)); + app('log')->debug(sprintf('Deleted journal #%d because it has the same source as destination.', $journal->id)); $service->destroy($journal); } } } } - /** - * @param Account $account - * @param Account $moveTo - */ private function updateRecurrences(Account $account, Account $moveTo): void { - DB::table('recurrences_transactions')->where('source_id', $account->id)->update(['source_id' => $moveTo->id]); - DB::table('recurrences_transactions')->where('destination_id', $account->id)->update(['destination_id' => $moveTo->id]); + \DB::table('recurrences_transactions')->where('source_id', $account->id)->update(['source_id' => $moveTo->id]); + \DB::table('recurrences_transactions')->where('destination_id', $account->id)->update(['destination_id' => $moveTo->id]); } - /** - * @param Account $account - */ private function destroyJournals(Account $account): void { /** @var JournalDestroyService $service */ $service = app(JournalDestroyService::class); - Log::debug('Now trigger account delete response #' . $account->id); + app('log')->debug('Now trigger account delete response #'.$account->id); + /** @var Transaction $transaction */ foreach ($account->transactions()->get() as $transaction) { - Log::debug('Now at transaction #' . $transaction->id); - /** @var TransactionJournal $journal */ + app('log')->debug('Now at transaction #'.$transaction->id); + + /** @var null|TransactionJournal $journal */ $journal = $transaction->transactionJournal()->first(); if (null !== $journal) { - Log::debug('Call for deletion of journal #' . $journal->id); + app('log')->debug('Call for deletion of journal #'.$journal->id); $service->destroy($journal); } } } - /** - * @param Account $account - */ private function destroyRecurrences(Account $account): void { - $recurrences = RecurrenceTransaction::where( - static function (Builder $q) use ($account) { + $recurrences = RecurrenceTransaction::where( + static function (Builder $q) use ($account): void { $q->where('source_id', $account->id); $q->orWhere('destination_id', $account->id); } diff --git a/app/Services/Internal/Destroy/BillDestroyService.php b/app/Services/Internal/Destroy/BillDestroyService.php index 6b0f48b007..a1cd2ce5f5 100644 --- a/app/Services/Internal/Destroy/BillDestroyService.php +++ b/app/Services/Internal/Destroy/BillDestroyService.php @@ -30,9 +30,6 @@ use FireflyIII\Models\Bill; */ class BillDestroyService { - /** - * @param Bill $bill - */ public function destroy(Bill $bill): void { $bill->delete(); diff --git a/app/Services/Internal/Destroy/BudgetDestroyService.php b/app/Services/Internal/Destroy/BudgetDestroyService.php index d9675f743a..51058e4491 100644 --- a/app/Services/Internal/Destroy/BudgetDestroyService.php +++ b/app/Services/Internal/Destroy/BudgetDestroyService.php @@ -23,19 +23,13 @@ declare(strict_types=1); namespace FireflyIII\Services\Internal\Destroy; -use DB; use FireflyIII\Models\Budget; /** * Class BudgetDestroyService - * - */ class BudgetDestroyService { - /** - * @param Budget $budget - */ public function destroy(Budget $budget): void { $budget->delete(); @@ -46,10 +40,10 @@ class BudgetDestroyService } // also delete all relations between categories and transaction journals: - DB::table('budget_transaction_journal')->where('budget_id', (int)$budget->id)->delete(); + \DB::table('budget_transaction_journal')->where('budget_id', $budget->id)->delete(); // also delete all relations between categories and transactions: - DB::table('budget_transaction')->where('budget_id', (int)$budget->id)->delete(); + \DB::table('budget_transaction')->where('budget_id', $budget->id)->delete(); // also delete all budget limits foreach ($budget->budgetlimits()->get() as $limit) { diff --git a/app/Services/Internal/Destroy/CategoryDestroyService.php b/app/Services/Internal/Destroy/CategoryDestroyService.php index 36c2f74ef4..5a3211acb5 100644 --- a/app/Services/Internal/Destroy/CategoryDestroyService.php +++ b/app/Services/Internal/Destroy/CategoryDestroyService.php @@ -23,30 +23,24 @@ declare(strict_types=1); namespace FireflyIII\Services\Internal\Destroy; -use DB; use FireflyIII\Models\Category; /** * Class CategoryDestroyService - * - */ class CategoryDestroyService { - /** - * @param Category $category - */ public function destroy(Category $category): void { $category->delete(); // also delete all relations between categories and transaction journals: - DB::table('category_transaction_journal')->where('category_id', (int)$category->id)->delete(); + \DB::table('category_transaction_journal')->where('category_id', $category->id)->delete(); // also delete all relations between categories and transactions: - DB::table('category_transaction')->where('category_id', (int)$category->id)->delete(); + \DB::table('category_transaction')->where('category_id', $category->id)->delete(); // delete references to category from recurring transactions. - DB::table('rt_meta')->where('name', 'category_id')->where('value', $category->id)->delete(); + \DB::table('rt_meta')->where('name', 'category_id')->where('value', $category->id)->delete(); } } diff --git a/app/Services/Internal/Destroy/CurrencyDestroyService.php b/app/Services/Internal/Destroy/CurrencyDestroyService.php index 4a2295d32a..7482740c7d 100644 --- a/app/Services/Internal/Destroy/CurrencyDestroyService.php +++ b/app/Services/Internal/Destroy/CurrencyDestroyService.php @@ -27,14 +27,9 @@ use FireflyIII\Models\TransactionCurrency; /** * Class CurrencyDestroyService - * - */ class CurrencyDestroyService { - /** - * @param TransactionCurrency $currency - */ public function destroy(TransactionCurrency $currency): void { $currency->delete(); diff --git a/app/Services/Internal/Destroy/JournalDestroyService.php b/app/Services/Internal/Destroy/JournalDestroyService.php index 0c52c769bd..026d99e12d 100644 --- a/app/Services/Internal/Destroy/JournalDestroyService.php +++ b/app/Services/Internal/Destroy/JournalDestroyService.php @@ -23,35 +23,31 @@ declare(strict_types=1); namespace FireflyIII\Services\Internal\Destroy; -use DB; use FireflyIII\Models\Attachment; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournalLink; use FireflyIII\Models\TransactionJournalMeta; -use Illuminate\Support\Facades\Log; /** * Class JournalDestroyService */ class JournalDestroyService { - /** - * @param TransactionJournal $journal - */ public function destroy(TransactionJournal $journal): void { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); + /** @var Transaction $transaction */ foreach ($journal->transactions()->get() as $transaction) { - Log::debug(sprintf('Will now delete transaction #%d', $transaction->id)); + app('log')->debug(sprintf('Will now delete transaction #%d', $transaction->id)); $transaction->delete(); } // also delete journal_meta entries. /** @var TransactionJournalMeta $meta */ foreach ($journal->transactionJournalMeta()->get() as $meta) { - Log::debug(sprintf('Will now delete meta-entry #%d', $meta->id)); + app('log')->debug(sprintf('Will now delete meta-entry #%d', $meta->id)); $meta->delete(); } @@ -62,16 +58,19 @@ class JournalDestroyService } // delete all from 'budget_transaction_journal' - DB::table('budget_transaction_journal') - ->where('transaction_journal_id', $journal->id)->delete(); + \DB::table('budget_transaction_journal') + ->where('transaction_journal_id', $journal->id)->delete() + ; // delete all from 'category_transaction_journal' - DB::table('category_transaction_journal') - ->where('transaction_journal_id', $journal->id)->delete(); + \DB::table('category_transaction_journal') + ->where('transaction_journal_id', $journal->id)->delete() + ; // delete all from 'tag_transaction_journal' - DB::table('tag_transaction_journal') - ->where('transaction_journal_id', $journal->id)->delete(); + \DB::table('tag_transaction_journal') + ->where('transaction_journal_id', $journal->id)->delete() + ; // delete all links: TransactionJournalLink::where('source_id', $journal->id)->delete(); diff --git a/app/Services/Internal/Destroy/RecurrenceDestroyService.php b/app/Services/Internal/Destroy/RecurrenceDestroyService.php index 8937b13815..73949f34cb 100644 --- a/app/Services/Internal/Destroy/RecurrenceDestroyService.php +++ b/app/Services/Internal/Destroy/RecurrenceDestroyService.php @@ -33,8 +33,6 @@ class RecurrenceDestroyService { /** * Delete recurrence by ID - * - * @param int $recurrenceId */ public function destroyById(int $recurrenceId): void { @@ -47,14 +45,12 @@ class RecurrenceDestroyService /** * Delete recurrence. - * - * @param Recurrence $recurrence - * */ public function destroy(Recurrence $recurrence): void { // delete all meta data $recurrence->recurrenceMeta()->delete(); + // delete all transactions. /** @var RecurrenceTransaction $transaction */ foreach ($recurrence->recurrenceTransactions as $transaction) { diff --git a/app/Services/Internal/Destroy/TransactionGroupDestroyService.php b/app/Services/Internal/Destroy/TransactionGroupDestroyService.php index 6ef875d46b..2b5621cf4a 100644 --- a/app/Services/Internal/Destroy/TransactionGroupDestroyService.php +++ b/app/Services/Internal/Destroy/TransactionGroupDestroyService.php @@ -25,21 +25,16 @@ namespace FireflyIII\Services\Internal\Destroy; use FireflyIII\Events\DestroyedTransactionGroup; use FireflyIII\Models\TransactionGroup; -use Illuminate\Support\Facades\Log; /** * Class TransactionGroupDestroyService - * - */ class TransactionGroupDestroyService { - /** - * @param TransactionGroup $transactionGroup - */ public function destroy(TransactionGroup $transactionGroup): void { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); + /** @var JournalDestroyService $service */ $service = app(JournalDestroyService::class); foreach ($transactionGroup->transactionJournals as $journal) { diff --git a/app/Services/Internal/Support/AccountServiceTrait.php b/app/Services/Internal/Support/AccountServiceTrait.php index d7db07baab..2920bef1c2 100644 --- a/app/Services/Internal/Support/AccountServiceTrait.php +++ b/app/Services/Internal/Support/AccountServiceTrait.php @@ -38,23 +38,14 @@ use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService; -use Illuminate\Support\Facades\Log; -use JsonException; -use Validator; /** * Trait AccountServiceTrait - * */ trait AccountServiceTrait { protected AccountRepositoryInterface $accountRepository; - /** - * @param null|string $iban - * - * @return null|string - */ public function filterIban(?string $iban): ?string { if (null === $iban) { @@ -62,23 +53,18 @@ trait AccountServiceTrait } $data = ['iban' => $iban]; $rules = ['iban' => 'required|iban']; - $validator = Validator::make($data, $rules); + $validator = \Validator::make($data, $rules); if ($validator->fails()) { - Log::info(sprintf('Detected invalid IBAN ("%s"). Return NULL instead.', $iban)); + app('log')->info(sprintf('Detected invalid IBAN ("%s"). Return NULL instead.', $iban)); return null; } - return app('steam')->filterSpaces($iban); } /** * Returns true if the data in the array is submitted but empty. - * - * @param array $data - * - * @return bool */ public function isEmptyOBData(array $data): bool { @@ -102,25 +88,23 @@ trait AccountServiceTrait /** * Update metadata for account. Depends on type which fields are valid. * + * @SuppressWarnings(PHPMD.NPathComplexity) + * * TODO this method treats expense accounts and liabilities the same way (tries to save interest) - * - * @param Account $account - * @param array $data - * */ public function updateMetaData(Account $account, array $data): void { - $fields = $this->validFields; - if ($account->accountType->type === AccountType::ASSET) { + $fields = $this->validFields; + if (AccountType::ASSET === $account->accountType->type) { $fields = $this->validAssetFields; } // remove currency_id if necessary. - $type = $account->accountType->type; - $list = config('firefly.valid_currency_account_types'); + $type = $account->accountType->type; + $list = config('firefly.valid_currency_account_types'); if (!in_array($type, $list, true)) { $pos = array_search('currency_id', $fields, true); - if ($pos !== false) { + if (false !== $pos) { unset($fields[$pos]); } } @@ -134,13 +118,14 @@ trait AccountServiceTrait } // only asset account may have a role: - if ($account->accountType->type !== AccountType::ASSET) { + if (AccountType::ASSET !== $account->accountType->type) { $data['account_role'] = ''; } - if ($account->accountType->type === AccountType::ASSET && array_key_exists('account_role', $data) && 'ccAsset' === $data['account_role']) { + if (AccountType::ASSET === $account->accountType->type && 'ccAsset' === $data['account_role']) { $fields = $this->validCCFields; } + /** @var AccountMetaFactory $factory */ $factory = app(AccountMetaFactory::class); foreach ($fields as $field) { @@ -163,15 +148,9 @@ trait AccountServiceTrait } } - /** - * @param Account $account - * @param string $note - * - * @return bool - */ public function updateNote(Account $account, string $note): bool { - $dbNote = $account->notes()->first(); + $dbNote = $account->notes()->first(); if ('' === $note) { if (null !== $dbNote) { $dbNote->delete(); @@ -191,10 +170,6 @@ trait AccountServiceTrait /** * Verify if array contains valid data to possibly store or update the opening balance. - * - * @param array $data - * - * @return bool */ public function validOBData(array $data): bool { @@ -204,28 +179,28 @@ trait AccountServiceTrait } if ('' !== $data['opening_balance'] && array_key_exists('opening_balance_date', $data) && '' !== $data['opening_balance_date'] && $data['opening_balance_date'] instanceof Carbon) { - Log::debug('Array has valid opening balance data.'); + app('log')->debug('Array has valid opening balance data.'); return true; } - Log::debug('Array does not have valid opening balance data.'); + app('log')->debug('Array does not have valid opening balance data.'); return false; } /** - * @param Account $account - * @param array $data - * - * @return TransactionGroup * @throws FireflyException - * @throws JsonException + * * * @deprecated */ protected function createOBGroup(Account $account, array $data): TransactionGroup { - Log::debug('Now going to create an OB group.'); + app('log')->debug('Now going to create an OB group.'); $language = app('preferences')->getForUser($account->user, 'language', 'en_US')->data; + if (is_array($language)) { + $language = 'en_US'; + } + $language = (string)$language; $sourceId = null; $sourceName = null; $destId = null; @@ -234,29 +209,30 @@ trait AccountServiceTrait // amount is positive. if (1 === bccomp($amount, '0')) { - Log::debug(sprintf('Amount is %s, which is positive. Source is a new IB account, destination is #%d', $amount, $account->id)); + app('log')->debug(sprintf('Amount is %s, which is positive. Source is a new IB account, destination is #%d', $amount, $account->id)); $sourceName = trans('firefly.initial_balance_description', ['account' => $account->name], $language); $destId = $account->id; } // amount is not positive if (-1 === bccomp($amount, '0')) { - Log::debug(sprintf('Amount is %s, which is negative. Destination is a new IB account, source is #%d', $amount, $account->id)); + app('log')->debug(sprintf('Amount is %s, which is negative. Destination is a new IB account, source is #%d', $amount, $account->id)); $destName = trans('firefly.initial_balance_account', ['account' => $account->name], $language); $sourceId = $account->id; } // amount is 0 if (0 === bccomp($amount, '0')) { - Log::debug('Amount is zero, so will not make an OB group.'); + app('log')->debug('Amount is zero, so will not make an OB group.'); + throw new FireflyException('Amount for new opening balance was unexpectedly 0.'); } // make amount positive, regardless: - $amount = app('steam')->positive($amount); + $amount = app('steam')->positive($amount); // get or grab currency: - $currency = $this->accountRepository->getAccountCurrency($account); + $currency = $this->accountRepository->getAccountCurrency($account); if (null === $currency) { - $currency = app('default')->getDefaultCurrencyByUser($account->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); } // submit to factory: @@ -289,17 +265,18 @@ trait AccountServiceTrait ], ], ]; - Log::debug('Going for submission in createOBGroup', $submission); + app('log')->debug('Going for submission in createOBGroup', $submission); /** @var TransactionGroupFactory $factory */ - $factory = app(TransactionGroupFactory::class); + $factory = app(TransactionGroupFactory::class); $factory->setUser($account->user); try { $group = $factory->create($submission); } catch (DuplicateTransactionException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($e->getMessage(), 0, $e); } @@ -308,16 +285,15 @@ trait AccountServiceTrait /** * Delete TransactionGroup with liability credit in it. - * - * @param Account $account */ protected function deleteCreditTransaction(Account $account): void { - Log::debug(sprintf('deleteCreditTransaction() for account #%d', $account->id)); + app('log')->debug(sprintf('deleteCreditTransaction() for account #%d', $account->id)); $creditGroup = $this->getCreditTransaction($account); if (null !== $creditGroup) { - Log::debug('Credit journal found, delete journal.'); + app('log')->debug('Credit journal found, delete journal.'); + /** @var TransactionGroupDestroyService $service */ $service = app(TransactionGroupDestroyService::class); $service->destroy($creditGroup); @@ -326,31 +302,26 @@ trait AccountServiceTrait /** * Returns the credit transaction group, or NULL if it does not exist. - * - * @param Account $account - * - * @return TransactionGroup|null */ protected function getCreditTransaction(Account $account): ?TransactionGroup { - Log::debug(sprintf('Now at %s', __METHOD__)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); return $this->accountRepository->getCreditTransactionGroup($account); } /** * Delete TransactionGroup with opening balance in it. - * - * @param Account $account */ protected function deleteOBGroup(Account $account): void { - Log::debug(sprintf('deleteOB() for account #%d', $account->id)); + app('log')->debug(sprintf('deleteOB() for account #%d', $account->id)); $openingBalanceGroup = $this->getOBGroup($account); // opening balance data? update it! if (null !== $openingBalanceGroup) { - Log::debug('Opening balance journal found, delete journal.'); + app('log')->debug('Opening balance journal found, delete journal.'); + /** @var TransactionGroupDestroyService $service */ $service = app(TransactionGroupDestroyService::class); $service->destroy($openingBalanceGroup); @@ -359,10 +330,6 @@ trait AccountServiceTrait /** * Returns the opening balance group, or NULL if it does not exist. - * - * @param Account $account - * - * @return TransactionGroup|null */ protected function getOBGroup(Account $account): ?TransactionGroup { @@ -370,24 +337,20 @@ trait AccountServiceTrait } /** - * @param int $currencyId - * @param string $currencyCode - * - * @return TransactionCurrency * @throws FireflyException - * @throws JsonException */ protected function getCurrency(int $currencyId, string $currencyCode): TransactionCurrency { // find currency, or use default currency instead. /** @var TransactionCurrencyFactory $factory */ - $factory = app(TransactionCurrencyFactory::class); - /** @var TransactionCurrency|null $currency */ - $currency = $factory->find($currencyId, $currencyCode); + $factory = app(TransactionCurrencyFactory::class); + + /** @var null|TransactionCurrency $currency */ + $currency = $factory->find($currencyId, $currencyCode); if (null === $currency) { // use default currency: - $currency = app('amount')->getDefaultCurrencyByUser($this->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($this->user->userGroup); } $currency->enabled = true; $currency->save(); @@ -398,27 +361,20 @@ trait AccountServiceTrait /** * Create the opposing "credit liability" transaction for credit liabilities. * - * - * @param Account $account - * @param string $direction - * @param string $openingBalance - * @param Carbon $openingBalanceDate - * - * @return TransactionGroup * @throws FireflyException - * @throws JsonException */ protected function updateCreditTransaction(Account $account, string $direction, string $openingBalance, Carbon $openingBalanceDate): TransactionGroup { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); if (0 === bccomp($openingBalance, '0')) { - Log::debug('Amount is zero, so will not update liability credit/debit group.'); + app('log')->debug('Amount is zero, so will not update liability credit/debit group.'); + throw new FireflyException('Amount for update liability credit/debit was unexpectedly 0.'); } // if direction is "debit" (i owe this debt), amount is negative. // which means the liability will have a negative balance which the user must fill. - $openingBalance = app('steam')->negative($openingBalance); + $openingBalance = app('steam')->negative($openingBalance); // if direction is "credit" (I am owed this debt), amount is positive. // which means the liability will have a positive balance which is drained when its paid back into any asset. @@ -427,21 +383,21 @@ trait AccountServiceTrait } // create if not exists: - $clGroup = $this->getCreditTransaction($account); + $clGroup = $this->getCreditTransaction($account); if (null === $clGroup) { return $this->createCreditTransaction($account, $openingBalance, $openingBalanceDate); } // if exists, update: - $currency = $this->accountRepository->getAccountCurrency($account); + $currency = $this->accountRepository->getAccountCurrency($account); if (null === $currency) { - $currency = app('default')->getDefaultCurrencyByUser($account->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); } // simply grab the first journal and change it: - $journal = $this->getObJournal($clGroup); - $clTransaction = $this->getOBTransaction($journal, $account); - $accountTransaction = $this->getNotOBTransaction($journal, $account); - $journal->date = $openingBalanceDate; + $journal = $this->getObJournal($clGroup); + $clTransaction = $this->getOBTransaction($journal, $account); + $accountTransaction = $this->getNotOBTransaction($journal, $account); + $journal->date = $openingBalanceDate; $journal->transactionCurrency()->associate($currency); // account always gains money: @@ -449,8 +405,8 @@ trait AccountServiceTrait $accountTransaction->transaction_currency_id = $currency->id; // CL account always loses money: - $clTransaction->amount = app('steam')->negative($openingBalance); - $clTransaction->transaction_currency_id = $currency->id; + $clTransaction->amount = app('steam')->negative($openingBalance); + $clTransaction->transaction_currency_id = $currency->id; // save both $accountTransaction->save(); $clTransaction->save(); @@ -461,24 +417,23 @@ trait AccountServiceTrait } /** - * @param Account $account - * @param string $openingBalance - * @param Carbon $openingBalanceDate - * - * @return TransactionGroup * @throws FireflyException - * @throws JsonException */ protected function createCreditTransaction(Account $account, string $openingBalance, Carbon $openingBalanceDate): TransactionGroup { - Log::debug('Now going to create an createCreditTransaction.'); + app('log')->debug('Now going to create an createCreditTransaction.'); if (0 === bccomp($openingBalance, '0')) { - Log::debug('Amount is zero, so will not make an liability credit group.'); + app('log')->debug('Amount is zero, so will not make an liability credit group.'); + throw new FireflyException('Amount for new liability credit was unexpectedly 0.'); } - $language = app('preferences')->getForUser($account->user, 'language', 'en_US')->data; + $language = app('preferences')->getForUser($account->user, 'language', 'en_US')->data; + if (is_array($language)) { + $language = 'en_US'; + } + $language = (string)$language; // set source and/or destination based on whether the amount is positive or negative. // first, assume the amount is positive and go from there: @@ -496,12 +451,12 @@ trait AccountServiceTrait } // amount must be positive for the transaction to work. - $amount = app('steam')->positive($openingBalance); + $amount = app('steam')->positive($openingBalance); // get or grab currency: - $currency = $this->accountRepository->getAccountCurrency($account); + $currency = $this->accountRepository->getAccountCurrency($account); if (null === $currency) { - $currency = app('default')->getDefaultCurrencyByUser($account->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); } // submit to factory: @@ -534,17 +489,18 @@ trait AccountServiceTrait ], ], ]; - Log::debug('Going for submission in createCreditTransaction', $submission); + app('log')->debug('Going for submission in createCreditTransaction', $submission); /** @var TransactionGroupFactory $factory */ - $factory = app(TransactionGroupFactory::class); + $factory = app(TransactionGroupFactory::class); $factory->setUser($account->user); try { $group = $factory->create($submission); } catch (DuplicateTransactionException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($e->getMessage(), 0, $e); } @@ -554,14 +510,11 @@ trait AccountServiceTrait /** * TODO refactor to "getfirstjournal" * - * @param TransactionGroup $group - * - * @return TransactionJournal * @throws FireflyException */ private function getObJournal(TransactionGroup $group): TransactionJournal { - /** @var TransactionJournal $journal */ + /** @var null|TransactionJournal $journal */ $journal = $group->transactionJournals()->first(); if (null === $journal) { throw new FireflyException(sprintf('Group #%d has no OB journal', $group->id)); @@ -573,15 +526,11 @@ trait AccountServiceTrait /** * TODO Rename to getOpposingTransaction * - * @param TransactionJournal $journal - * @param Account $account - * - * @return Transaction * @throws FireflyException */ private function getOBTransaction(TransactionJournal $journal, Account $account): Transaction { - /** @var Transaction $transaction */ + /** @var null|Transaction $transaction */ $transaction = $journal->transactions()->where('account_id', '!=', $account->id)->first(); if (null === $transaction) { throw new FireflyException(sprintf('Could not get OB transaction for journal #%d', $journal->id)); @@ -591,15 +540,11 @@ trait AccountServiceTrait } /** - * @param TransactionJournal $journal - * @param Account $account - * - * @return Transaction * @throws FireflyException */ private function getNotOBTransaction(TransactionJournal $journal, Account $account): Transaction { - /** @var Transaction $transaction */ + /** @var null|Transaction $transaction */ $transaction = $journal->transactions()->where('account_id', $account->id)->first(); if (null === $transaction) { throw new FireflyException(sprintf('Could not get non-OB transaction for journal #%d', $journal->id)); @@ -612,28 +557,22 @@ trait AccountServiceTrait * Update or create the opening balance group. * Since opening balance and date can still be empty strings, it may fail. * - * @param Account $account - * @param string $openingBalance - * @param Carbon $openingBalanceDate - * - * @return TransactionGroup * @throws FireflyException - * @throws JsonException */ protected function updateOBGroupV2(Account $account, string $openingBalance, Carbon $openingBalanceDate): TransactionGroup { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); // create if not exists: - $obGroup = $this->getOBGroup($account); + $obGroup = $this->getOBGroup($account); if (null === $obGroup) { return $this->createOBGroupV2($account, $openingBalance, $openingBalanceDate); } - Log::debug('Update OB group'); + app('log')->debug('Update OB group'); // if exists, update: - $currency = $this->accountRepository->getAccountCurrency($account); + $currency = $this->accountRepository->getAccountCurrency($account); if (null === $currency) { - $currency = app('default')->getDefaultCurrencyByUser($account->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); } // simply grab the first journal and change it: @@ -643,27 +582,26 @@ trait AccountServiceTrait $journal->date = $openingBalanceDate; $journal->transactionCurrency()->associate($currency); - // if amount is negative: if (1 === bccomp('0', $openingBalance)) { - Log::debug('Amount is negative.'); + app('log')->debug('Amount is negative.'); // account transaction loses money: $accountTransaction->amount = app('steam')->negative($openingBalance); $accountTransaction->transaction_currency_id = $currency->id; // OB account transaction gains money - $obTransaction->amount = app('steam')->positive($openingBalance); - $obTransaction->transaction_currency_id = $currency->id; + $obTransaction->amount = app('steam')->positive($openingBalance); + $obTransaction->transaction_currency_id = $currency->id; } if (-1 === bccomp('0', $openingBalance)) { - Log::debug('Amount is positive.'); + app('log')->debug('Amount is positive.'); // account gains money: $accountTransaction->amount = app('steam')->positive($openingBalance); $accountTransaction->transaction_currency_id = $currency->id; // OB account loses money: - $obTransaction->amount = app('steam')->negative($openingBalance); - $obTransaction->transaction_currency_id = $currency->id; + $obTransaction->amount = app('steam')->negative($openingBalance); + $obTransaction->transaction_currency_id = $currency->id; } // save both $accountTransaction->save(); @@ -675,18 +613,16 @@ trait AccountServiceTrait } /** - * @param Account $account - * @param string $openingBalance - * @param Carbon $openingBalanceDate - * - * @return TransactionGroup * @throws FireflyException - * @throws JsonException */ protected function createOBGroupV2(Account $account, string $openingBalance, Carbon $openingBalanceDate): TransactionGroup { - Log::debug('Now going to create an OB group.'); + app('log')->debug('Now going to create an OB group.'); $language = app('preferences')->getForUser($account->user, 'language', 'en_US')->data; + if (is_array($language)) { + $language = 'en_US'; + } + $language = (string)$language; $sourceId = null; $sourceName = null; $destId = null; @@ -694,29 +630,30 @@ trait AccountServiceTrait // amount is positive. if (1 === bccomp($openingBalance, '0')) { - Log::debug(sprintf('Amount is %s, which is positive. Source is a new IB account, destination is #%d', $openingBalance, $account->id)); + app('log')->debug(sprintf('Amount is %s, which is positive. Source is a new IB account, destination is #%d', $openingBalance, $account->id)); $sourceName = trans('firefly.initial_balance_description', ['account' => $account->name], $language); $destId = $account->id; } // amount is not positive if (-1 === bccomp($openingBalance, '0')) { - Log::debug(sprintf('Amount is %s, which is negative. Destination is a new IB account, source is #%d', $openingBalance, $account->id)); + app('log')->debug(sprintf('Amount is %s, which is negative. Destination is a new IB account, source is #%d', $openingBalance, $account->id)); $destName = trans('firefly.initial_balance_account', ['account' => $account->name], $language); $sourceId = $account->id; } // amount is 0 if (0 === bccomp($openingBalance, '0')) { - Log::debug('Amount is zero, so will not make an OB group.'); + app('log')->debug('Amount is zero, so will not make an OB group.'); + throw new FireflyException('Amount for new opening balance was unexpectedly 0.'); } // make amount positive, regardless: - $amount = app('steam')->positive($openingBalance); + $amount = app('steam')->positive($openingBalance); // get or grab currency: - $currency = $this->accountRepository->getAccountCurrency($account); + $currency = $this->accountRepository->getAccountCurrency($account); if (null === $currency) { - $currency = app('default')->getDefaultCurrencyByUser($account->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); } // submit to factory: @@ -749,17 +686,18 @@ trait AccountServiceTrait ], ], ]; - Log::debug('Going for submission in createOBGroupV2', $submission); + app('log')->debug('Going for submission in createOBGroupV2', $submission); /** @var TransactionGroupFactory $factory */ - $factory = app(TransactionGroupFactory::class); + $factory = app(TransactionGroupFactory::class); $factory->setUser($account->user); try { $group = $factory->create($submission); } catch (DuplicateTransactionException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException($e->getMessage(), 0, $e); } diff --git a/app/Services/Internal/Support/BillServiceTrait.php b/app/Services/Internal/Support/BillServiceTrait.php index a30385423b..7bace4e657 100644 --- a/app/Services/Internal/Support/BillServiceTrait.php +++ b/app/Services/Internal/Support/BillServiceTrait.php @@ -26,20 +26,12 @@ namespace FireflyIII\Services\Internal\Support; use FireflyIII\Models\Bill; use FireflyIII\Models\Note; use FireflyIII\Models\RuleAction; -use Illuminate\Support\Facades\Log; /** * Trait BillServiceTrait - * - */ trait BillServiceTrait { - /** - * @param Bill $bill - * @param string $oldName - * @param string $newName - */ public function updateBillActions(Bill $bill, string $oldName, string $newName): void { if ($oldName === $newName) { @@ -47,23 +39,18 @@ trait BillServiceTrait } $ruleIds = $bill->user->rules()->get(['id'])->pluck('id')->toArray(); $set = RuleAction::whereIn('rule_id', $ruleIds) - ->where('action_type', 'link_to_bill') - ->where('action_value', $oldName)->get(); + ->where('action_type', 'link_to_bill') + ->where('action_value', $oldName)->get() + ; /** @var RuleAction $ruleAction */ foreach ($set as $ruleAction) { - Log::debug(sprintf('Updated rule action #%d to search for new bill name "%s"', $ruleAction->id, $newName)); + app('log')->debug(sprintf('Updated rule action #%d to search for new bill name "%s"', $ruleAction->id, $newName)); $ruleAction->action_value = $newName; $ruleAction->save(); } } - /** - * @param Bill $bill - * @param string $note - * - * @return bool - */ public function updateNote(Bill $bill, string $note): bool { if ('' === $note) { @@ -74,7 +61,7 @@ trait BillServiceTrait return true; } - $dbNote = $bill->notes()->first(); + $dbNote = $bill->notes()->first(); if (null === $dbNote) { $dbNote = new Note(); $dbNote->noteable()->associate($bill); diff --git a/app/Services/Internal/Support/CreditRecalculateService.php b/app/Services/Internal/Support/CreditRecalculateService.php index c221ab4131..1ca08e58f4 100644 --- a/app/Services/Internal/Support/CreditRecalculateService.php +++ b/app/Services/Internal/Support/CreditRecalculateService.php @@ -28,6 +28,7 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\AccountMetaFactory; use FireflyIII\Models\Account; use FireflyIII\Models\Transaction; +use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; @@ -54,9 +55,6 @@ class CreditRecalculateService $this->work = []; } - /** - * - */ public function recalculate(): void { if (true !== config('firefly.feature_flags.handle_debts')) { @@ -75,9 +73,6 @@ class CreditRecalculateService $this->processWork(); } - /** - * - */ private function processGroup(): void { /** @var TransactionJournal $journal */ @@ -85,15 +80,13 @@ class CreditRecalculateService try { $this->findByJournal($journal); } catch (FireflyException $e) { - Log::error($e->getTraceAsString()); - Log::error(sprintf('Could not find work account for transaction group #%d.', $this->group->id)); + app('log')->error($e->getTraceAsString()); + app('log')->error(sprintf('Could not find work account for transaction group #%d.', $this->group->id)); } } } /** - * @param TransactionJournal $journal - * * @throws FireflyException */ private function findByJournal(TransactionJournal $journal): void @@ -102,7 +95,7 @@ class CreditRecalculateService $destination = $this->getDestinationAccount($journal); // destination or source must be liability. - $valid = config('firefly.valid_liabilities'); + $valid = config('firefly.valid_liabilities'); if (in_array($destination->accountType->type, $valid, true)) { $this->work[] = $destination; } @@ -112,9 +105,6 @@ class CreditRecalculateService } /** - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ private function getSourceAccount(TransactionJournal $journal): Account @@ -123,19 +113,17 @@ class CreditRecalculateService } /** - * @param TransactionJournal $journal - * @param string $direction - * - * @return Account * @throws FireflyException */ private function getAccountByDirection(TransactionJournal $journal, string $direction): Account { - /** @var Transaction $transaction */ - $transaction = $journal->transactions()->where('amount', $direction, '0')->first(); + /** @var null|Transaction $transaction */ + $transaction = $journal->transactions()->where('amount', $direction, '0')->first(); if (null === $transaction) { throw new FireflyException(sprintf('Cannot find "%s"-transaction of journal #%d', $direction, $journal->id)); } + + /** @var null|Account $foundAccount */ $foundAccount = $transaction->account; if (null === $foundAccount) { throw new FireflyException(sprintf('Cannot find "%s"-account of transaction #%d of journal #%d', $direction, $transaction->id, $journal->id)); @@ -145,9 +133,6 @@ class CreditRecalculateService } /** - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ private function getDestinationAccount(TransactionJournal $journal): Account @@ -155,9 +140,6 @@ class CreditRecalculateService return $this->getAccountByDirection($journal, '>'); } - /** - * - */ private function processAccount(): void { $valid = config('firefly.valid_liabilities'); @@ -166,9 +148,6 @@ class CreditRecalculateService } } - /** - * - */ private function processWork(): void { $this->repository = app(AccountRepositoryInterface::class); @@ -177,12 +156,9 @@ class CreditRecalculateService } } - /** - * @param Account $account - */ private function processWorkAccount(Account $account): void { - app('log')->debug(sprintf('Now processing account #%d ("%s")', $account->id, $account->name)); + app('log')->debug(sprintf('Now processing account #%d ("%s"). All amounts with 2 decimals!', $account->id, $account->name)); // get opening balance (if present) $this->repository->setUser($account->user); $direction = (string)$this->repository->getMetaValue($account, 'liability_direction'); @@ -194,14 +170,12 @@ class CreditRecalculateService $this->validateOpeningBalance($account, $openingBalance); } } - $startOfDebt = $this->repository->getOpeningBalanceAmount($account) ?? '0'; - $leftOfDebt = app('steam')->positive($startOfDebt); - $currency = $this->repository->getAccountCurrency($account); - $decimals = (int)($currency?->decimal_places ?? 2); - app('log')->debug(sprintf('Start of debt is "%s", so initial left of debt is "%s"', app('steam')->bcround($startOfDebt, $decimals), app('steam')->bcround($leftOfDebt, $decimals))); + $startOfDebt = $this->repository->getOpeningBalanceAmount($account) ?? '0'; + $leftOfDebt = app('steam')->positive($startOfDebt); + app('log')->debug(sprintf('Start of debt is "%s", so initial left of debt is "%s"', app('steam')->bcround($startOfDebt, 2), app('steam')->bcround($leftOfDebt, 2))); /** @var AccountMetaFactory $factory */ - $factory = app(AccountMetaFactory::class); + $factory = app(AccountMetaFactory::class); // amount is positive or negative, doesn't matter. $factory->crud($account, 'start_of_debt', $startOfDebt); @@ -209,12 +183,14 @@ class CreditRecalculateService app('log')->debug(sprintf('Debt direction is "%s"', $direction)); // now loop all transactions (except opening balance and credit thing) - $transactions = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->orderBy('transaction_journals.date', 'ASC') - ->get(['transactions.*']); - $total = $transactions->count(); + $transactions = $account->transactions() + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->orderBy('transaction_journals.date', 'ASC') + ->get(['transactions.*']) + ; + $total = $transactions->count(); app('log')->debug(sprintf('Found %d transaction(s) to process.', $total)); + /** @var Transaction $transaction */ foreach ($transactions as $index => $transaction) { app('log')->debug(sprintf('[%d/%d] Processing transaction.', $index + 1, $total)); @@ -226,19 +202,15 @@ class CreditRecalculateService /** * If account direction is "debit" ("I owe this amount") the opening balance must always be AWAY from the account: - * - * @param Account $account - * @param TransactionJournal $openingBalance - * - * @return void */ - private function validateOpeningBalance(Account $account, TransactionJournal $openingBalance) + private function validateOpeningBalance(Account $account, TransactionJournal $openingBalance): void { /** @var Transaction $source */ $source = $openingBalance->transactions()->where('amount', '<', 0)->first(); + /** @var Transaction $dest */ - $dest = $openingBalance->transactions()->where('amount', '>', 0)->first(); - if ((int)$source->account_id !== $account->id) { + $dest = $openingBalance->transactions()->where('amount', '>', 0)->first(); + if ($source->account_id !== $account->id) { app('log')->info(sprintf('Liability #%d has a reversed opening balance. Will fix this now.', $account->id)); app('log')->debug(sprintf('Source amount "%s" is now "%s"', $source->amount, app('steam')->positive($source->amount))); app('log')->debug(sprintf('Destination amount "%s" is now "%s"', $dest->amount, app('steam')->negative($dest->amount))); @@ -255,200 +227,236 @@ class CreditRecalculateService } $source->save(); $dest->save(); + return; } app('log')->debug('Opening balance is valid'); } /** - * @param Account $account - * @param string $direction - * @param Transaction $transaction - * @param string $leftOfDebt + * A complex and long method, but rarely used luckily. * - * @return string + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.NPathComplexity) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function processTransaction(Account $account, string $direction, Transaction $transaction, string $leftOfDebt): string { $journal = $transaction->transactionJournal; $foreignCurrency = $transaction->foreignCurrency; $accountCurrency = $this->repository->getAccountCurrency($account); - $groupId = $journal->transaction_group_id; - $decimals = (int)$accountCurrency->decimal_places; $type = $journal->transactionType->type; - /** @var Transaction $destTransaction */ - $destTransaction = $journal->transactions()->where('amount', '>', '0')->first(); - /** @var Transaction $sourceTransaction */ - $sourceTransaction = $journal->transactions()->where('amount', '<', '0')->first(); - - - app('log')->debug(sprintf('Left of debt is: %s', app('steam')->bcround($leftOfDebt, $decimals))); + app('log')->debug(sprintf('Left of debt is: %s', app('steam')->bcround($leftOfDebt, 2))); if ('' === $direction) { app('log')->warning('Direction is empty, so do nothing.'); + return $leftOfDebt; } if (TransactionType::LIABILITY_CREDIT === $type || TransactionType::OPENING_BALANCE === $type) { app('log')->warning(sprintf('Transaction type is "%s", so do nothing.', $type)); + return $leftOfDebt; } + Log::debug(sprintf('Liability direction is "%s"', $direction)); // amount to use depends on the currency: - $usedAmount = $transaction->amount; - app('log')->debug(sprintf('Amount of transaction is %s', app('steam')->bcround($usedAmount, $decimals))); - if (null !== $foreignCurrency && $foreignCurrency->id === $accountCurrency->id) { - $usedAmount = $transaction->foreign_amount; - app('log')->debug(sprintf('Overruled by foreign amount. Amount of transaction is now %s', app('steam')->bcround($usedAmount, $decimals))); - } + $usedAmount = $this->getAmountToUse($transaction, $accountCurrency, $foreignCurrency); + $isSameAccount = $account->id === $transaction->account_id; + $isDebit = 'debit' === $direction; + $isCredit = 'credit' === $direction; - // Case 1 - // it's a withdrawal into this liability (from asset). - // if it's a credit ("I am owed"), this increases the amount due, - // because we're lending person X more money - if ( - $type === TransactionType::WITHDRAWAL - && (int)$account->id === (int)$transaction->account_id - && 1 === bccomp($usedAmount, '0') - && 'credit' === $direction - ) { + if ($isSameAccount && $isCredit && $this->isWithdrawalIn($usedAmount, $type)) { // case 1 $usedAmount = app('steam')->positive($usedAmount); $result = bcadd($leftOfDebt, $usedAmount); - app('log')->debug(sprintf('Case 1 (withdrawal into credit liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, $decimals), app('steam')->bcround($usedAmount, $decimals), app('steam')->bcround($result, $decimals))); + app('log')->debug(sprintf('Case 1 (withdrawal into credit liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + return $result; } - // Case 2 - // it's a withdrawal away from this liability (into expense account). - // if it's a credit ("I am owed"), this decreases the amount due, - // because we're sending money away from the loan (like loan forgiveness) - if ( - $type === TransactionType::WITHDRAWAL - && (int)$account->id === (int)$sourceTransaction->account_id - && -1 === bccomp($usedAmount, '0') - && 'credit' === $direction - ) { + if ($isSameAccount && $isCredit && $this->isWithdrawalOut($usedAmount, $type)) { // case 2 $usedAmount = app('steam')->positive($usedAmount); $result = bcsub($leftOfDebt, $usedAmount); - app('log')->debug(sprintf('Case 2 (withdrawal away from liability): %s - %s = %s', app('steam')->bcround($leftOfDebt, $decimals), app('steam')->bcround($usedAmount, $decimals), app('steam')->bcround($result, $decimals))); + app('log')->debug(sprintf('Case 2 (withdrawal away from liability): %s - %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + return $result; } - // case 3 - // it's a deposit out of this liability (to asset). - // if it's a credit ("I am owed") this decreases the amount due. - // because the person is paying us back. - if ( - $type === TransactionType::DEPOSIT - && (int)$account->id === (int)$transaction->account_id - && -1 === bccomp($usedAmount, '0') - && 'credit' === $direction - ) { + if ($isSameAccount && $isCredit && $this->isDepositOut($usedAmount, $type)) { // case 3 $usedAmount = app('steam')->positive($usedAmount); $result = bcsub($leftOfDebt, $usedAmount); - app('log')->debug(sprintf('Case 3 (deposit away from liability): %s - %s = %s', app('steam')->bcround($leftOfDebt, $decimals), app('steam')->bcround($usedAmount, $decimals), app('steam')->bcround($result, $decimals))); + app('log')->debug(sprintf('Case 3 (deposit away from liability): %s - %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + return $result; } - // case 4 - // it's a deposit into this liability (from revenue account). - // if it's a credit ("I am owed") this increases the amount due. - // because the person is having to pay more money. - if ( - $type === TransactionType::DEPOSIT - && (int)$account->id === (int)$destTransaction->account_id - && 1 === bccomp($usedAmount, '0') - && 'credit' === $direction - ) { + if ($isSameAccount && $isCredit && $this->isDepositIn($usedAmount, $type)) { // case 4 $usedAmount = app('steam')->positive($usedAmount); $result = bcadd($leftOfDebt, $usedAmount); - app('log')->debug(sprintf('Case 4 (deposit into credit liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, $decimals), app('steam')->bcround($usedAmount, $decimals), app('steam')->bcround($result, $decimals))); + app('log')->debug(sprintf('Case 4 (deposit into credit liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + return $result; } - // case 5: transfer into loan (from other loan). - // if it's a credit ("I am owed") this increases the amount due, - // because the person has to pay more back. - if ( - $type === TransactionType::TRANSFER - && (int)$account->id === (int)$destTransaction->account_id - && 1 === bccomp($usedAmount, '0') - && 'credit' === $direction - ) { + if ($isSameAccount && $isCredit && $this->isTransferIn($usedAmount, $type)) { // case 5 $usedAmount = app('steam')->positive($usedAmount); $result = bcadd($leftOfDebt, $usedAmount); - app('log')->debug(sprintf('Case 5 (transfer into credit liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, $decimals), app('steam')->bcround($usedAmount, $decimals), app('steam')->bcround($result, $decimals))); + app('log')->debug(sprintf('Case 5 (transfer into credit liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + return $result; } - // Case 6 - // it's a withdrawal into this liability (from asset). - // if it's a debit ("I owe this amount"), this decreases the amount due, - // because we're paying off the debt - if ( - $type === TransactionType::WITHDRAWAL - && (int)$account->id === (int)$transaction->account_id - && 1 === bccomp($usedAmount, '0') - && 'debit' === $direction - ) { + if ($isSameAccount && $isDebit && $this->isWithdrawalIn($usedAmount, $type)) { // case 6 $usedAmount = app('steam')->positive($usedAmount); $result = bcsub($leftOfDebt, $usedAmount); - app('log')->debug(sprintf('Case 6 (withdrawal into debit liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, $decimals), app('steam')->bcround($usedAmount, $decimals), app('steam')->bcround($result, $decimals))); + app('log')->debug(sprintf('Case 6 (withdrawal into debit liability): %s - %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + return $result; } - // case 7 - // it's a deposit out of this liability (to asset). - // if it's a credit ("I am owed") this increases the amount due. - // because we are borrowing more money. - if ( - $type === TransactionType::DEPOSIT - && (int)$account->id === (int)$transaction->account_id - && -1 === bccomp($usedAmount, '0') - && 'debit' === $direction - ) { + if ($isSameAccount && $isDebit && $this->isDepositOut($usedAmount, $type)) { // case 7 $usedAmount = app('steam')->positive($usedAmount); $result = bcadd($leftOfDebt, $usedAmount); - app('log')->debug(sprintf('Case 7 (deposit away from liability): %s - %s = %s', app('steam')->bcround($leftOfDebt, $decimals), app('steam')->bcround($usedAmount, $decimals), app('steam')->bcround($result, $decimals))); + app('log')->debug(sprintf('Case 7 (deposit away from liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + return $result; } - // case 8 - // it's a withdrawal from this liability (to expense account). - // if it's a debit ("I owe this amount") this increase the amount due. - // because we are paying interest. - if ( - $type === TransactionType::WITHDRAWAL - && (int)$account->id === (int)$transaction->account_id - && -1 === bccomp($usedAmount, '0') - && 'debit' === $direction - ) { + if ($isSameAccount && $isDebit && $this->isWithdrawalOut($usedAmount, $type)) { // case 8 $usedAmount = app('steam')->positive($usedAmount); $result = bcadd($leftOfDebt, $usedAmount); - app('log')->debug(sprintf('Case 8 (withdrawal away from liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, $decimals), app('steam')->bcround($usedAmount, $decimals), app('steam')->bcround($result, $decimals))); + app('log')->debug(sprintf('Case 8 (withdrawal away from liability): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + return $result; } + if ($isSameAccount && $isDebit && $this->isTransferIn($usedAmount, $type)) { // case 9 + $usedAmount = app('steam')->positive($usedAmount); + $result = bcadd($leftOfDebt, $usedAmount); + app('log')->debug(sprintf('Case 9 (transfer into debit liability, means you owe more): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + + return $result; + } + if ($isSameAccount && $isDebit && $this->isTransferOut($usedAmount, $type)) { // case 10 + $usedAmount = app('steam')->positive($usedAmount); + $result = bcsub($leftOfDebt, $usedAmount); + app('log')->debug(sprintf('Case 5 (transfer out of debit liability, means you owe less): %s - %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + + return $result; + } // in any other case, remove amount from left of debt. if (in_array($type, [TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER], true)) { $usedAmount = app('steam')->negative($usedAmount); $result = bcadd($leftOfDebt, $usedAmount); - app('log')->debug(sprintf('Case X (all other cases): %s + %s = %s', app('steam')->bcround($leftOfDebt, $decimals), app('steam')->bcround($usedAmount, $decimals), app('steam')->bcround($result, $decimals))); + app('log')->debug(sprintf('Case X (all other cases): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); + return $result; } - Log::warning(sprintf('[-1] Catch-all, should not happen. Left of debt = %s', app('steam')->bcround($leftOfDebt, $decimals))); + app('log')->warning(sprintf('[-1] Catch-all, should not happen. Left of debt = %s', app('steam')->bcround($leftOfDebt, 2))); return $leftOfDebt; } + private function getAmountToUse(Transaction $transaction, TransactionCurrency $accountCurrency, ?TransactionCurrency $foreignCurrency): string + { + $usedAmount = $transaction->amount; + app('log')->debug(sprintf('Amount of transaction is %s', app('steam')->bcround($usedAmount, 2))); + if (null !== $foreignCurrency && $foreignCurrency->id === $accountCurrency->id) { + $usedAmount = $transaction->foreign_amount; + app('log')->debug(sprintf('Overruled by foreign amount. Amount of transaction is now %s', app('steam')->bcround($usedAmount, 2))); + } + + return $usedAmount; + } + /** - * @param Account|null $account + * It's a withdrawal into this liability (from asset). + * + * Case 1 = credit + * if it's a credit ("I am owed"), this increases the amount due, + * because we're lending person X more money + * + * Case 6 = debit + * if it's a debit ("I owe this amount"), this decreases the amount due, + * because we're paying off the debt */ + private function isWithdrawalIn(string $amount, string $transactionType): bool + { + return TransactionType::WITHDRAWAL === $transactionType && 1 === bccomp($amount, '0'); + } + + /** + * it's a withdrawal away from this liability (into expense account). + * + * Case 2 + * if it's a credit ("I am owed"), this decreases the amount due, + * because we're sending money away from the loan (like loan forgiveness) + * + * Case 8 + * if it's a debit ("I owe this amount") this increase the amount due. + * because we are paying interest. + */ + private function isWithdrawalOut(string $amount, string $transactionType): bool + { + return TransactionType::WITHDRAWAL === $transactionType && -1 === bccomp($amount, '0'); + } + + /** + * it's a deposit out of this liability (to asset). + * + * case 3 + * if it's a credit ("I am owed") this decreases the amount due. + * because the person is paying us back. + * + * case 7 + * if it's a debit ("I owe") this increases the amount due. + * because we are borrowing more money. + */ + private function isDepositOut(string $amount, string $transactionType): bool + { + return TransactionType::DEPOSIT === $transactionType && -1 === bccomp($amount, '0'); + } + + /** + * case 4 + * it's a deposit into this liability (from revenue account). + * if it's a credit ("I am owed") this increases the amount due. + * because the person is having to pay more money. + */ + private function isDepositIn(string $amount, string $transactionType): bool + { + return TransactionType::DEPOSIT === $transactionType && 1 === bccomp($amount, '0'); + } + + /** + * case 5: transfer into loan (from other loan). + * if it's a credit ("I am owed") this increases the amount due, + * because the person has to pay more back. + * + * case 8: transfer into loan (from other loan). + * if it's a debit ("I owe") this decreases the amount due. + * because the person has to pay more back. + */ + private function isTransferIn(string $amount, string $transactionType): bool + { + return TransactionType::TRANSFER === $transactionType && 1 === bccomp($amount, '0'); + } + + /** + * it's a transfer out of loan (from other loan) + * + * case 9 + * if it's a debit ("I owe") this decreases the amount due. + * because we remove money from the amount left to owe + */ + private function isTransferOut(string $amount, string $transactionType): bool + { + return TransactionType::TRANSFER === $transactionType && -1 === bccomp($amount, '0'); + } + public function setAccount(?Account $account): void { $this->account = $account; } - /** - * @param TransactionGroup $group - */ public function setGroup(TransactionGroup $group): void { $this->group = $group; diff --git a/app/Services/Internal/Support/JournalServiceTrait.php b/app/Services/Internal/Support/JournalServiceTrait.php index f82bfd83db..b6f716ece5 100644 --- a/app/Services/Internal/Support/JournalServiceTrait.php +++ b/app/Services/Internal/Support/JournalServiceTrait.php @@ -35,11 +35,9 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use FireflyIII\Support\NullArrayObject; -use Illuminate\Support\Facades\Log; /** * Trait JournalServiceTrait - * */ trait JournalServiceTrait { @@ -49,17 +47,12 @@ trait JournalServiceTrait private TagFactory $tagFactory; /** - * @param string $transactionType - * @param string $direction - * @param array $data - * - * @return Account|null * @throws FireflyException */ protected function getAccount(string $transactionType, string $direction, array $data): ?Account { // some debug logging: - Log::debug(sprintf('Now in getAccount(%s)', $direction), $data); + app('log')->debug(sprintf('Now in getAccount(%s)', $direction), $data); // expected type of source account, in order of preference /** @var array $array */ @@ -68,33 +61,32 @@ trait JournalServiceTrait unset($array); // and now try to find it, based on the type of transaction. - $message = 'Transaction = %s, %s account should be in: %s. Direction is %s.'; - Log::debug(sprintf($message, $transactionType, $direction, implode(', ', $expectedTypes[$transactionType] ?? ['UNKNOWN']), $direction)); + $message = 'Transaction = %s, %s account should be in: %s. Direction is %s.'; + app('log')->debug(sprintf($message, $transactionType, $direction, implode(', ', $expectedTypes[$transactionType] ?? ['UNKNOWN']), $direction)); - $result = $this->findAccountById($data, $expectedTypes[$transactionType]); - $result = $this->findAccountByIban($result, $data, $expectedTypes[$transactionType]); - $ibanResult = $result; - $result = $this->findAccountByNumber($result, $data, $expectedTypes[$transactionType]); - $numberResult = $result; - $result = $this->findAccountByName($result, $data, $expectedTypes[$transactionType]); - $nameResult = $result; + $result = $this->findAccountById($data, $expectedTypes[$transactionType]); + $result = $this->findAccountByIban($result, $data, $expectedTypes[$transactionType]); + $ibanResult = $result; + $result = $this->findAccountByNumber($result, $data, $expectedTypes[$transactionType]); + $numberResult = $result; + $result = $this->findAccountByName($result, $data, $expectedTypes[$transactionType]); + $nameResult = $result; // if $result (find by name) is NULL, but IBAN is set, any result of the search by NAME can't overrule // this account. In such a case, the name search must be retried with a new name. if (null !== $nameResult && null === $numberResult && null === $ibanResult && '' !== (string)$data['iban'] && '' !== (string)$nameResult->iban) { $data['name'] = sprintf('%s (%s)', $data['name'], $data['iban']); - Log::debug(sprintf('Search again using the new name, "%s".', $data['name'])); - $result = $this->findAccountByName(null, $data, $expectedTypes[$transactionType]); + app('log')->debug(sprintf('Search again using the new name, "%s".', $data['name'])); + $result = $this->findAccountByName(null, $data, $expectedTypes[$transactionType]); } // the account that Firefly III creates must be "creatable", aka select the one we can create from the list just in case $creatableType = $this->getCreatableType($expectedTypes[$transactionType]); - // if the result is NULL but the ID is set, an account could exist of the wrong type. // that data can be used to create a new account of the right type. if (null === $result && null !== $data['id'] && null !== $creatableType) { - Log::debug(sprintf('Account #%d may exist and be of the wrong type, use data to create one of the right type.', $data['id'])); + app('log')->debug(sprintf('Account #%d may exist and be of the wrong type, use data to create one of the right type.', $data['id'])); $temp = $this->findAccountById(['id' => $data['id']], []); if (null !== $temp) { $tempData = [ @@ -107,123 +99,108 @@ trait JournalServiceTrait } } if (null === $result && null !== $creatableType) { - Log::debug('If nothing is found, create it.'); + app('log')->debug('If nothing is found, create it.'); $result = $this->createAccount($result, $data, $creatableType); } if (null === $result) { - Log::debug('If cant be created, return cash account.'); + app('log')->debug('If cant be created, return cash account.'); $result = $this->getCashAccount($result, $data, $expectedTypes[$transactionType]); } + return $result; } - /** - * @param array $data - * @param array $types - * - * @return Account|null - */ private function findAccountById(array $data, array $types): ?Account { // first attempt, find by ID. if (null !== $data['id']) { $search = $this->accountRepository->find((int)$data['id']); if (null !== $search && in_array($search->accountType->type, $types, true)) { - Log::debug( + app('log')->debug( sprintf('Found "account_id" object: #%d, "%s" of type %s (1)', $search->id, $search->name, $search->accountType->type) ); + return $search; } if (null !== $search && 0 === count($types)) { - Log::debug( + app('log')->debug( sprintf('Found "account_id" object: #%d, "%s" of type %s (2)', $search->id, $search->name, $search->accountType->type) ); + return $search; } } - Log::debug(sprintf('Found no account by ID #%d of types', $data['id']), $types); + app('log')->debug(sprintf('Found no account by ID #%d of types', $data['id']), $types); + return null; } - /** - * @param Account|null $account - * @param array $data - * @param array $types - * - * @return Account|null - */ private function findAccountByIban(?Account $account, array $data, array $types): ?Account { if (null !== $account) { - Log::debug(sprintf('Already have account #%d ("%s"), return that.', $account->id, $account->name)); + app('log')->debug(sprintf('Already have account #%d ("%s"), return that.', $account->id, $account->name)); + return $account; } if (null === $data['iban'] || '' === $data['iban']) { - Log::debug('IBAN is empty, will not search for IBAN.'); + app('log')->debug('IBAN is empty, will not search for IBAN.'); + return null; } // find by preferred type. $source = $this->accountRepository->findByIbanNull($data['iban'], [$types[0]]); // or any expected type. - $source = $source ?? $this->accountRepository->findByIbanNull($data['iban'], $types); + $source ??= $this->accountRepository->findByIbanNull($data['iban'], $types); if (null !== $source) { - Log::debug(sprintf('Found "account_iban" object: #%d, %s', $source->id, $source->name)); + app('log')->debug(sprintf('Found "account_iban" object: #%d, %s', $source->id, $source->name)); return $source; } - Log::debug(sprintf('Found no account with IBAN "%s" of expected types', $data['iban']), $types); + app('log')->debug(sprintf('Found no account with IBAN "%s" of expected types', $data['iban']), $types); + return null; } - /** - * @param Account|null $account - * @param array $data - * @param array $types - * - * @return Account|null - */ private function findAccountByNumber(?Account $account, array $data, array $types): ?Account { if (null !== $account) { - Log::debug(sprintf('Already have account #%d ("%s"), return that.', $account->id, $account->name)); + app('log')->debug(sprintf('Already have account #%d ("%s"), return that.', $account->id, $account->name)); + return $account; } if (null === $data['number'] || '' === $data['number']) { - Log::debug('Account number is empty, will not search for account number.'); + app('log')->debug('Account number is empty, will not search for account number.'); + return null; } // find by preferred type. $source = $this->accountRepository->findByAccountNumber((string)$data['number'], [$types[0]]); // or any expected type. - $source = $source ?? $this->accountRepository->findByAccountNumber((string)$data['number'], $types); + $source ??= $this->accountRepository->findByAccountNumber((string)$data['number'], $types); if (null !== $source) { - Log::debug(sprintf('Found account: #%d, %s', $source->id, $source->name)); + app('log')->debug(sprintf('Found account: #%d, %s', $source->id, $source->name)); return $source; } - Log::debug(sprintf('Found no account with account number "%s" of expected types', $data['number']), $types); + app('log')->debug(sprintf('Found no account with account number "%s" of expected types', $data['number']), $types); + return null; } - /** - * @param Account|null $account - * @param array $data - * @param array $types - * - * @return Account|null - */ private function findAccountByName(?Account $account, array $data, array $types): ?Account { if (null !== $account) { - Log::debug(sprintf('Already have account #%d ("%s"), return that.', $account->id, $account->name)); + app('log')->debug(sprintf('Already have account #%d ("%s"), return that.', $account->id, $account->name)); + return $account; } if (null === $data['name'] || '' === $data['name']) { - Log::debug('Account name is empty, will not search for account name.'); + app('log')->debug('Account name is empty, will not search for account name.'); + return null; } @@ -231,50 +208,44 @@ trait JournalServiceTrait $source = $this->accountRepository->findByName($data['name'], [$types[0]]); // or any expected type. - $source = $source ?? $this->accountRepository->findByName($data['name'], $types); + $source ??= $this->accountRepository->findByName($data['name'], $types); if (null !== $source) { - Log::debug(sprintf('Found "account_name" object: #%d, %s', $source->id, $source->name)); + app('log')->debug(sprintf('Found "account_name" object: #%d, %s', $source->id, $source->name)); return $source; } - Log::debug(sprintf('Found no account with account name "%s" of expected types', $data['name']), $types); + app('log')->debug(sprintf('Found no account with account name "%s" of expected types', $data['name']), $types); + return null; } - /** - * @param array $types - * - * @return null|string - */ private function getCreatableType(array $types): ?string { $result = null; $list = config('firefly.dynamic_creation_allowed'); + /** @var string $type */ foreach ($types as $type) { if (true === in_array($type, $list, true)) { $result = $type; + break; } } + return $result; } /** - * @param Account|null $account - * @param array $data - * @param string $preferredType - * - * @return Account|null * @throws FireflyException */ private function createAccount(?Account $account, array $data, string $preferredType): ?Account { - Log::debug('Now in createAccount()', $data); + app('log')->debug('Now in createAccount()', $data); // return new account. if (null !== $account) { - Log::debug( + app('log')->debug( sprintf( 'Was given %s account #%d ("%s") so will simply return that.', $account->accountType->type, @@ -290,20 +261,21 @@ trait JournalServiceTrait } // fix name of account if only IBAN is given: if ('' === (string)$data['name'] && '' !== (string)$data['iban']) { - Log::debug(sprintf('Account name is now IBAN ("%s")', $data['iban'])); + app('log')->debug(sprintf('Account name is now IBAN ("%s")', $data['iban'])); $data['name'] = $data['iban']; } // fix name of account if only number is given: if ('' === (string)$data['name'] && '' !== (string)$data['number']) { - Log::debug(sprintf('Account name is now account number ("%s")', $data['number'])); + app('log')->debug(sprintf('Account name is now account number ("%s")', $data['number'])); $data['name'] = $data['number']; } // if name is still NULL, return NULL. if ('' === (string)$data['name']) { - Log::debug('Account name is still NULL, return NULL.'); + app('log')->debug('Account name is still NULL, return NULL.'); + return null; } - //$data['name'] = $data['name'] ?? '(no name)'; + // $data['name'] = $data['name'] ?? '(no name)'; $account = $this->accountRepository->store( [ @@ -334,13 +306,6 @@ trait JournalServiceTrait return $account; } - /** - * @param Account|null $account - * @param array $data - * @param array $types - * - * @return Account|null - */ private function getCashAccount(?Account $account, array $data, array $types): ?Account { // return cash account. @@ -348,14 +313,12 @@ trait JournalServiceTrait && in_array(AccountType::CASH, $types, true)) { $account = $this->accountRepository->getCashAccount(); } - Log::debug('Cannot return cash account, return input instead.'); + app('log')->debug('Cannot return cash account, return input instead.'); + return $account; } /** - * @param string $amount - * - * @return string * @throws FireflyException */ protected function getAmount(string $amount): string @@ -363,7 +326,7 @@ trait JournalServiceTrait if ('' === $amount) { throw new FireflyException(sprintf('The amount cannot be an empty string: "%s"', $amount)); } - Log::debug(sprintf('Now in getAmount("%s")', $amount)); + app('log')->debug(sprintf('Now in getAmount("%s")', $amount)); if (0 === bccomp('0', $amount)) { throw new FireflyException(sprintf('The amount seems to be zero: "%s"', $amount)); } @@ -371,39 +334,28 @@ trait JournalServiceTrait return $amount; } - /** - * @param string|null $amount - * - * @return string|null - */ protected function getForeignAmount(?string $amount): ?string { if (null === $amount) { - Log::debug('No foreign amount info in array. Return NULL'); + app('log')->debug('No foreign amount info in array. Return NULL'); return null; } if ('' === $amount) { - Log::debug('Foreign amount is empty string, return NULL.'); + app('log')->debug('Foreign amount is empty string, return NULL.'); return null; } if (0 === bccomp('0', $amount)) { - Log::debug('Foreign amount is 0.0, return NULL.'); + app('log')->debug('Foreign amount is 0.0, return NULL.'); return null; } - Log::debug(sprintf('Foreign amount is %s', $amount)); + app('log')->debug(sprintf('Foreign amount is %s', $amount)); return $amount; } - /** - * @param TransactionJournal $journal - * @param NullArrayObject $data - * - - */ protected function storeBudget(TransactionJournal $journal, NullArrayObject $data): void { if (TransactionType::WITHDRAWAL !== $journal->transactionType->type) { @@ -413,7 +365,7 @@ trait JournalServiceTrait } $budget = $this->budgetRepository->findBudget($data['budget_id'], $data['budget_name']); if (null !== $budget) { - Log::debug(sprintf('Link budget #%d to journal #%d', $budget->id, $journal->id)); + app('log')->debug(sprintf('Link budget #%d to journal #%d', $budget->id, $journal->id)); $journal->budgets()->sync([$budget->id]); return; @@ -422,17 +374,11 @@ trait JournalServiceTrait $journal->budgets()->sync([]); } - /** - * @param TransactionJournal $journal - * @param NullArrayObject $data - * - - */ protected function storeCategory(TransactionJournal $journal, NullArrayObject $data): void { $category = $this->categoryRepository->findCategory($data['category_id'], $data['category_name']); if (null !== $category) { - Log::debug(sprintf('Link category #%d to journal #%d', $category->id, $journal->id)); + app('log')->debug(sprintf('Link category #%d to journal #%d', $category->id, $journal->id)); $journal->categories()->sync([$category->id]); return; @@ -441,12 +387,6 @@ trait JournalServiceTrait $journal->categories()->sync([]); } - /** - * @param TransactionJournal $journal - * @param string|null $notes - * - - */ protected function storeNotes(TransactionJournal $journal, ?string $notes): void { $notes = (string)$notes; @@ -458,48 +398,41 @@ trait JournalServiceTrait } $note->text = $notes; $note->save(); - Log::debug(sprintf('Stored notes for journal #%d', $journal->id)); + app('log')->debug(sprintf('Stored notes for journal #%d', $journal->id)); return; } - if ('' === $notes && null !== $note) { - // try to delete existing notes. - $note->delete(); - } + // try to delete existing notes. + $note?->delete(); } /** * Link tags to journal. - * - * @param TransactionJournal $journal - * @param array|null $tags - * - */ protected function storeTags(TransactionJournal $journal, ?array $tags): void { - Log::debug('Now in storeTags()', $tags ?? []); + app('log')->debug('Now in storeTags()', $tags ?? []); $this->tagFactory->setUser($journal->user); $set = []; if (!is_array($tags)) { - Log::debug('Tags is not an array, break.'); + app('log')->debug('Tags is not an array, break.'); return; } - Log::debug('Start of loop.'); + app('log')->debug('Start of loop.'); foreach ($tags as $string) { $string = (string)$string; - Log::debug(sprintf('Now at tag "%s"', $string)); + app('log')->debug(sprintf('Now at tag "%s"', $string)); if ('' !== $string) { $tag = $this->tagFactory->findOrCreate($string); if (null !== $tag) { - $set[] = (int)$tag->id; + $set[] = $tag->id; } } } $set = array_unique($set); - Log::debug('End of loop.'); - Log::debug(sprintf('Total nr. of tags: %d', count($tags)), $tags); + app('log')->debug('End of loop.'); + app('log')->debug(sprintf('Total nr. of tags: %d', count($tags)), $tags); $journal->tags()->sync($set); } } diff --git a/app/Services/Internal/Support/LocationServiceTrait.php b/app/Services/Internal/Support/LocationServiceTrait.php index c2e1766e68..38b63f963d 100644 --- a/app/Services/Internal/Support/LocationServiceTrait.php +++ b/app/Services/Internal/Support/LocationServiceTrait.php @@ -32,15 +32,9 @@ use Illuminate\Database\Eloquent\Model; */ trait LocationServiceTrait { - /** - * @param Model $model - * @param array $data - * - * @return Location|null - */ protected function storeNewLocation(Model $model, array $data): ?Location { - $data['store_location'] = $data['store_location'] ?? false; + $data['store_location'] ??= false; if ($data['store_location']) { $location = new Location(); $location->latitude = $data['latitude'] ?? config('firefly.default_location.latitude'); diff --git a/app/Services/Internal/Support/RecurringTransactionTrait.php b/app/Services/Internal/Support/RecurringTransactionTrait.php index 324764f1b4..443448e330 100644 --- a/app/Services/Internal/Support/RecurringTransactionTrait.php +++ b/app/Services/Internal/Support/RecurringTransactionTrait.php @@ -40,21 +40,12 @@ use FireflyIII\Models\RecurrenceTransaction; use FireflyIII\Models\RecurrenceTransactionMeta; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Validation\AccountValidator; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Trait RecurringTransactionTrait - * */ trait RecurringTransactionTrait { - /** - * @param Recurrence $recurrence - * @param string $note - * - * @return bool - */ public function updateNote(Recurrence $recurrence, string $note): bool { if ('' === $note) { @@ -65,7 +56,7 @@ trait RecurringTransactionTrait return true; } - $dbNote = $recurrence->notes()->first(); + $dbNote = $recurrence->notes()->first(); if (null === $dbNote) { $dbNote = new Note(); $dbNote->noteable()->associate($recurrence); @@ -76,10 +67,6 @@ trait RecurringTransactionTrait return true; } - /** - * @param Recurrence $recurrence - * @param array $repetitions - */ protected function createRepetitions(Recurrence $recurrence, array $repetitions): void { /** @var array $array */ @@ -99,37 +86,35 @@ trait RecurringTransactionTrait /** * Store transactions of a recurring transactions. It's complex but readable. * - * @param Recurrence $recurrence - * @param array $transactions - * * @throws FireflyException - * @throws JsonException + * + * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function createTransactions(Recurrence $recurrence, array $transactions): void { - Log::debug('Now in createTransactions()'); + app('log')->debug('Now in createTransactions()'); foreach ($transactions as $index => $array) { - Log::debug(sprintf('Now at transaction #%d', $index)); - $sourceTypes = config(sprintf('firefly.expected_source_types.source.%s', $recurrence->transactionType->type)); - $destTypes = config(sprintf('firefly.expected_source_types.destination.%s', $recurrence->transactionType->type)); - $source = $this->findAccount($sourceTypes, $array['source_id'], null); - $destination = $this->findAccount($destTypes, $array['destination_id'], null); + app('log')->debug(sprintf('Now at transaction #%d', $index)); + $sourceTypes = config(sprintf('firefly.expected_source_types.source.%s', $recurrence->transactionType->type)); + $destTypes = config(sprintf('firefly.expected_source_types.destination.%s', $recurrence->transactionType->type)); + $source = $this->findAccount($sourceTypes, $array['source_id'], null); + $destination = $this->findAccount($destTypes, $array['destination_id'], null); /** @var TransactionCurrencyFactory $factory */ $factory = app(TransactionCurrencyFactory::class); $currency = $factory->find($array['currency_id'] ?? null, $array['currency_code'] ?? null); $foreignCurrency = $factory->find($array['foreign_currency_id'] ?? null, $array['foreign_currency_code'] ?? null); if (null === $currency) { - $currency = app('amount')->getDefaultCurrencyByUser($recurrence->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($recurrence->user->userGroup); } - Log::debug( + app('log')->debug( sprintf('Will set the validator type to %s based on the type of the recurrence (#%d).', $recurrence->transactionType->type, $recurrence->id) ); // once the accounts have been determined, we still verify their validity: /** @var AccountValidator $validator */ - $validator = app(AccountValidator::class); + $validator = app(AccountValidator::class); $validator->setUser($recurrence->user); $validator->setTransactionType($recurrence->transactionType->type); @@ -144,7 +129,7 @@ trait RecurringTransactionTrait unset($array['foreign_amount']); } // TODO typeOverrule. The account validator may have a different opinion on the type of the transaction. - $transaction = new RecurrenceTransaction( + $transaction = new RecurrenceTransaction( [ 'recurrence_id' => $recurrence->id, 'transaction_currency_id' => $currency->id, @@ -179,40 +164,35 @@ trait RecurringTransactionTrait } } - /** - * @param array $expectedTypes - * @param int|null $accountId - * @param string|null $accountName - * - * @return Account - * @throws JsonException - */ protected function findAccount(array $expectedTypes, ?int $accountId, ?string $accountName): Account { - $result = null; - $accountId = (int)$accountId; - $accountName = (string)$accountName; + $result = null; + $accountId = (int)$accountId; + $accountName = (string)$accountName; + /** @var AccountRepositoryInterface $repository */ - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); $repository->setUser($this->user); // if user has submitted an account ID, search for it. - $result = $repository->find((int)$accountId); + $result = $repository->find($accountId); if (null !== $result) { return $result; } // if user has submitted a name, search for it: - $result = $repository->findByName($accountName, $expectedTypes); + $result = $repository->findByName($accountName, $expectedTypes); if (null !== $result) { return $result; } // maybe we can create it? Try to avoid LOAN and other asset types. $cannotCreate = [AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD]; + /** @var AccountFactory $factory */ - $factory = app(AccountFactory::class); + $factory = app(AccountFactory::class); $factory->setUser($this->user); + /** @var string $expectedType */ foreach ($expectedTypes as $expectedType) { if (in_array($expectedType, $cannotCreate, true)) { @@ -222,7 +202,7 @@ trait RecurringTransactionTrait try { $result = $factory->findOrCreate($accountName, $expectedType); } catch (FireflyException $e) { - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); } } } @@ -230,43 +210,35 @@ trait RecurringTransactionTrait return $result ?? $repository->getCashAccount(); } - /** - * @param RecurrenceTransaction $transaction - * @param int $budgetId - */ private function setBudget(RecurrenceTransaction $transaction, int $budgetId): void { $budgetFactory = app(BudgetFactory::class); $budgetFactory->setUser($transaction->recurrence->user); - $budget = $budgetFactory->find($budgetId, null); + $budget = $budgetFactory->find($budgetId, null); if (null === $budget) { return; } - $meta = $transaction->recurrenceTransactionMeta()->where('name', 'budget_id')->first(); + $meta = $transaction->recurrenceTransactionMeta()->where('name', 'budget_id')->first(); if (null === $meta) { $meta = new RecurrenceTransactionMeta(); $meta->rt_id = $transaction->id; $meta->name = 'budget_id'; } - $meta->value = $budget->id; + $meta->value = $budget->id; $meta->save(); } - /** - * @param RecurrenceTransaction $transaction - * @param int $billId - */ private function setBill(RecurrenceTransaction $transaction, int $billId): void { $billFactory = app(BillFactory::class); $billFactory->setUser($transaction->recurrence->user); - $bill = $billFactory->find($billId, null); + $bill = $billFactory->find($billId, null); if (null === $bill) { return; } - $meta = $transaction->recurrenceTransactionMeta()->where('name', 'bill_id')->first(); + $meta = $transaction->recurrenceTransactionMeta()->where('name', 'bill_id')->first(); if (null === $meta) { $meta = new RecurrenceTransactionMeta(); $meta->rt_id = $transaction->id; @@ -276,15 +248,11 @@ trait RecurringTransactionTrait $meta->save(); } - /** - * @param RecurrenceTransaction $transaction - * @param int $categoryId - */ private function setCategory(RecurrenceTransaction $transaction, int $categoryId): void { $categoryFactory = app(CategoryFactory::class); $categoryFactory->setUser($transaction->recurrence->user); - $category = $categoryFactory->findOrCreate($categoryId, null); + $category = $categoryFactory->findOrCreate($categoryId, null); if (null === $category) { // remove category: $transaction->recurrenceTransactionMeta()->where('name', 'category_id')->delete(); @@ -293,29 +261,25 @@ trait RecurringTransactionTrait return; } $transaction->recurrenceTransactionMeta()->where('name', 'category_name')->delete(); - $meta = $transaction->recurrenceTransactionMeta()->where('name', 'category_id')->first(); + $meta = $transaction->recurrenceTransactionMeta()->where('name', 'category_id')->first(); if (null === $meta) { $meta = new RecurrenceTransactionMeta(); $meta->rt_id = $transaction->id; $meta->name = 'category_id'; } - $meta->value = $category->id; + $meta->value = $category->id; $meta->save(); } - /** - * @param RecurrenceTransaction $transaction - * @param int $piggyId - */ protected function updatePiggyBank(RecurrenceTransaction $transaction, int $piggyId): void { /** @var PiggyBankFactory $factory */ - $factory = app(PiggyBankFactory::class); + $factory = app(PiggyBankFactory::class); $factory->setUser($transaction->recurrence->user); $piggyBank = $factory->find($piggyId, null); if (null !== $piggyBank) { - /** @var RecurrenceMeta|null $entry */ - $entry = $transaction->recurrenceTransactionMeta()->where('name', 'piggy_bank_id')->first(); + /** @var null|RecurrenceMeta $entry */ + $entry = $transaction->recurrenceTransactionMeta()->where('name', 'piggy_bank_id')->first(); if (null === $entry) { $entry = RecurrenceTransactionMeta::create(['rt_id' => $transaction->id, 'name' => 'piggy_bank_id', 'value' => $piggyBank->id]); } @@ -328,15 +292,11 @@ trait RecurringTransactionTrait } } - /** - * @param RecurrenceTransaction $transaction - * @param array $tags - */ protected function updateTags(RecurrenceTransaction $transaction, array $tags): void { if (0 !== count($tags)) { - /** @var RecurrenceMeta|null $entry */ - $entry = $transaction->recurrenceTransactionMeta()->where('name', 'tags')->first(); + /** @var null|RecurrenceMeta $entry */ + $entry = $transaction->recurrenceTransactionMeta()->where('name', 'tags')->first(); if (null === $entry) { $entry = RecurrenceTransactionMeta::create(['rt_id' => $transaction->id, 'name' => 'tags', 'value' => json_encode($tags)]); } @@ -349,24 +309,15 @@ trait RecurringTransactionTrait } } - /** - * @param Recurrence $recurrence - * - - */ protected function deleteRepetitions(Recurrence $recurrence): void { $recurrence->recurrenceRepetitions()->delete(); } - /** - * @param Recurrence $recurrence - * - - */ protected function deleteTransactions(Recurrence $recurrence): void { - Log::debug('deleteTransactions()'); + app('log')->debug('deleteTransactions()'); + /** @var RecurrenceTransaction $transaction */ foreach ($recurrence->recurrenceTransactions as $transaction) { $transaction->recurrenceTransactionMeta()->delete(); diff --git a/app/Services/Internal/Support/TransactionTypeTrait.php b/app/Services/Internal/Support/TransactionTypeTrait.php index d06f93af88..5814b95cb9 100644 --- a/app/Services/Internal/Support/TransactionTypeTrait.php +++ b/app/Services/Internal/Support/TransactionTypeTrait.php @@ -26,11 +26,9 @@ namespace FireflyIII\Services\Internal\Support; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\TransactionTypeFactory; use FireflyIII\Models\TransactionType; -use Illuminate\Support\Facades\Log; /** * Trait TransactionTypeTrait - * */ trait TransactionTypeTrait { @@ -38,9 +36,6 @@ trait TransactionTypeTrait * Get the transaction type. Since this is mandatory, will throw an exception when nothing comes up. Will always * use TransactionType repository. * - * @param string $type - * - * @return TransactionType * @throws FireflyException */ protected function findTransactionType(string $type): TransactionType @@ -48,7 +43,8 @@ trait TransactionTypeTrait $factory = app(TransactionTypeFactory::class); $transactionType = $factory->find($type); if (null === $transactionType) { - Log::error(sprintf('Could not find transaction type for "%s"', $type)); + app('log')->error(sprintf('Could not find transaction type for "%s"', $type)); + throw new FireflyException(sprintf('Could not find transaction type for "%s"', $type)); } diff --git a/app/Services/Internal/Update/AccountUpdateService.php b/app/Services/Internal/Update/AccountUpdateService.php index 5630684833..6e38975ea6 100644 --- a/app/Services/Internal/Update/AccountUpdateService.php +++ b/app/Services/Internal/Update/AccountUpdateService.php @@ -31,8 +31,6 @@ use FireflyIII\Models\Location; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Services\Internal\Support\AccountServiceTrait; use FireflyIII\User; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class AccountUpdateService @@ -47,7 +45,6 @@ class AccountUpdateService protected array $validCCFields; protected array $validFields; private array $canHaveOpeningBalance; - private array $canHaveVirtual; private User $user; /** @@ -55,7 +52,6 @@ class AccountUpdateService */ public function __construct() { - $this->canHaveVirtual = config('firefly.can_have_virtual_amounts'); $this->canHaveOpeningBalance = config('firefly.can_have_opening_balance'); $this->validAssetFields = config('firefly.valid_asset_fields'); $this->validCCFields = config('firefly.valid_cc_fields'); @@ -66,16 +62,11 @@ class AccountUpdateService /** * Update account data. * - * @param Account $account - * @param array $data - * - * @return Account * @throws FireflyException - * @throws JsonException */ public function update(Account $account, array $data): Account { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); $this->accountRepository->setUser($account->user); $this->user = $account->user; $account = $this->updateAccount($account, $data); @@ -83,7 +74,7 @@ class AccountUpdateService // find currency, or use default currency instead. if (array_key_exists('currency_id', $data) || array_key_exists('currency_code', $data)) { - $currency = $this->getCurrency((int)($data['currency_id'] ?? null), (string)($data['currency_code'] ?? null)); + $currency = $this->getCurrency((int)($data['currency_id'] ?? null), (string)($data['currency_code'] ?? null)); unset($data['currency_code'], $data['currency_id']); $data['currency_id'] = $currency->id; } @@ -113,20 +104,11 @@ class AccountUpdateService return $account; } - /** - * @param User $user - */ public function setUser(User $user): void { $this->user = $user; } - /** - * @param Account $account - * @param array $data - * - * @return Account - */ private function updateAccount(Account $account, array $data): Account { // update the account itself: @@ -141,7 +123,7 @@ class AccountUpdateService } // set liability, but account must already be a liability. - //$liabilityType = $data['liability_type'] ?? ''; + // $liabilityType = $data['liability_type'] ?? ''; if ($this->isLiability($account) && array_key_exists('liability_type', $data)) { $type = $this->getAccountType($data['liability_type']); $account->account_type_id = $type->id; @@ -166,11 +148,6 @@ class AccountUpdateService return $account; } - /** - * @param Account $account - * - * @return bool - */ private function isLiability(Account $account): bool { $type = $account->accountType->type; @@ -178,91 +155,74 @@ class AccountUpdateService return in_array($type, [AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE], true); } - /** - * @param string $type - * - * @return AccountType - */ private function getAccountType(string $type): AccountType { return AccountType::whereType(ucfirst($type))->first(); } - /** - * @param Account $account - * @param array $data - * - * @return Account - */ public function updateAccountOrder(Account $account, array $data): Account { // skip if no order info if (!array_key_exists('order', $data) || $data['order'] === $account->order) { - Log::debug(sprintf('Account order will not be touched because its not set or already at %d.', $account->order)); + app('log')->debug(sprintf('Account order will not be touched because its not set or already at %d.', $account->order)); return $account; } // skip if not of orderable type. - $type = $account->accountType->type; + $type = $account->accountType->type; if (!in_array($type, [AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT], true)) { - Log::debug('Will not change order of this account.'); + app('log')->debug('Will not change order of this account.'); return $account; } // get account type ID's because a join and an update is hard: - $oldOrder = (int)$account->order; - $newOrder = $data['order']; - Log::debug(sprintf('Order is set to be updated from %s to %s', $oldOrder, $newOrder)); - $list = $this->getTypeIds([AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT]); - if ($type === AccountType::ASSET) { + $oldOrder = $account->order; + $newOrder = $data['order']; + app('log')->debug(sprintf('Order is set to be updated from %s to %s', $oldOrder, $newOrder)); + $list = $this->getTypeIds([AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT]); + if (AccountType::ASSET === $type) { $list = $this->getTypeIds([AccountType::ASSET]); } if ($newOrder > $oldOrder) { $this->user->accounts()->where('accounts.order', '<=', $newOrder)->where('accounts.order', '>', $oldOrder) - ->where('accounts.id', '!=', $account->id) - ->whereIn('accounts.account_type_id', $list) - ->decrement('order'); + ->where('accounts.id', '!=', $account->id) + ->whereIn('accounts.account_type_id', $list) + ->decrement('order') + ; $account->order = $newOrder; - Log::debug(sprintf('Order of account #%d ("%s") is now %d', $account->id, $account->name, $newOrder)); + app('log')->debug(sprintf('Order of account #%d ("%s") is now %d', $account->id, $account->name, $newOrder)); $account->save(); return $account; } $this->user->accounts()->where('accounts.order', '>=', $newOrder)->where('accounts.order', '<', $oldOrder) - ->where('accounts.id', '!=', $account->id) - ->whereIn('accounts.account_type_id', $list) - ->increment('order'); + ->where('accounts.id', '!=', $account->id) + ->whereIn('accounts.account_type_id', $list) + ->increment('order') + ; $account->order = $newOrder; - Log::debug(sprintf('Order of account #%d ("%s") is now %d', $account->id, $account->name, $newOrder)); + app('log')->debug(sprintf('Order of account #%d ("%s") is now %d', $account->id, $account->name, $newOrder)); $account->save(); return $account; } - /** - * @param array $array - * - * @return array - */ private function getTypeIds(array $array): array { $return = []; + /** @var string $type */ foreach ($array as $type) { /** @var AccountType $type */ $type = AccountType::whereType($type)->first(); - $return[] = (int)$type->id; + $return[] = $type->id; } return $return; } - /** - * @param Account $account - * @param array $data - */ private function updateLocation(Account $account, array $data): void { $updateLocation = $data['update_location'] ?? false; @@ -275,7 +235,7 @@ class AccountUpdateService // otherwise, update or create. if (!(null === $data['latitude'] && null === $data['longitude'] && null === $data['zoom_level'])) { - $location = $this->accountRepository->getLocation($account); + $location = $this->accountRepository->getLocation($account); if (null === $location) { $location = new Location(); $location->locatable()->associate($account); @@ -290,9 +250,6 @@ class AccountUpdateService } /** - * @param Account $account - * @param array $data - * * @throws FireflyException */ private function updateOpeningBalance(Account $account, array $data): void @@ -326,8 +283,6 @@ class AccountUpdateService } /** - * @param Account $account - * * @throws FireflyException */ private function updatePreferences(Account $account): void @@ -336,22 +291,25 @@ class AccountUpdateService if (true === $account->active) { return; } - $preference = app('preferences')->getForUser($account->user, 'frontpageAccounts'); + $preference = app('preferences')->getForUser($account->user, 'frontpageAccounts'); if (null === $preference) { return; } - $array = $preference->data; - Log::debug('Old array is: ', $array); - Log::debug(sprintf('Must remove : %d', $account->id)); - $removeAccountId = (int)$account->id; + $array = $preference->data; + if (!is_array($array)) { + $array = [$array]; + } + app('log')->debug('Old array is: ', $array); + app('log')->debug(sprintf('Must remove : %d', $account->id)); + $removeAccountId = $account->id; $new = []; foreach ($array as $value) { if ((int)$value !== $removeAccountId) { - Log::debug(sprintf('Will include: %d', $value)); + app('log')->debug(sprintf('Will include: %d', $value)); $new[] = (int)$value; } } - Log::debug('Final new array is', $new); + app('log')->debug('Final new array is', $new); app('preferences')->setForUser($account->user, 'frontpageAccounts', $new); } } diff --git a/app/Services/Internal/Update/BillUpdateService.php b/app/Services/Internal/Update/BillUpdateService.php index 025bdf4f0d..1567867575 100644 --- a/app/Services/Internal/Update/BillUpdateService.php +++ b/app/Services/Internal/Update/BillUpdateService.php @@ -33,8 +33,6 @@ use FireflyIII\Repositories\ObjectGroup\CreatesObjectGroups; use FireflyIII\Services\Internal\Support\BillServiceTrait; use FireflyIII\User; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class BillUpdateService @@ -47,34 +45,29 @@ class BillUpdateService protected User $user; /** - * @param Bill $bill - * @param array $data - * - * @return Bill * @throws FireflyException - * @throws JsonException */ public function update(Bill $bill, array $data): Bill { $this->user = $bill->user; if (array_key_exists('currency_id', $data) || array_key_exists('currency_code', $data)) { - $factory = app(TransactionCurrencyFactory::class); - $currency = $factory->find((int)($data['currency_id'] ?? null), $data['currency_code'] ?? null) ?? - app('amount')->getDefaultCurrencyByUser($bill->user); + $factory = app(TransactionCurrencyFactory::class); + $currency = $factory->find((int)($data['currency_id'] ?? null), $data['currency_code'] ?? null) ?? + app('amount')->getDefaultCurrencyByUserGroup($bill->user->userGroup); // enable the currency if it isn't. - $currency->enabled = true; + $currency->enabled = true; $currency->save(); $bill->transaction_currency_id = $currency->id; $bill->save(); } // update bill properties: - $bill = $this->updateBillProperties($bill, $data); + $bill = $this->updateBillProperties($bill, $data); $bill->save(); $bill->refresh(); // old values - $oldData = [ + $oldData = [ 'name' => $bill->name, 'amount_min' => $bill->amount_min, 'amount_max' => $bill->amount_max, @@ -88,7 +81,7 @@ class BillUpdateService // update order. if (array_key_exists('order', $data)) { // update the order of the piggy bank: - $oldOrder = (int)$bill->order; + $oldOrder = $bill->order; $newOrder = (int)($data['order'] ?? $oldOrder); if ($oldOrder !== $newOrder) { $this->updateOrder($bill, $oldOrder, $newOrder); @@ -114,10 +107,8 @@ class BillUpdateService return $bill; } // remove if name is empty. Should be overruled by ID. - if ('' === $objectGroupTitle) { - $bill->objectGroups()->sync([]); - $bill->save(); - } + $bill->objectGroups()->sync([]); + $bill->save(); } if (array_key_exists('object_group_id', $data)) { // try also with ID: @@ -131,20 +122,15 @@ class BillUpdateService return $bill; } - if (0 === $objectGroupId) { - $bill->objectGroups()->sync([]); - $bill->save(); - } + $bill->objectGroups()->sync([]); + $bill->save(); } return $bill; } /** - * @param Bill $bill - * @param array $data - * - * @return Bill + * @SuppressWarnings(PHPMD.NPathComplexity) */ private function updateBillProperties(Bill $bill, array $data): Bill { @@ -184,48 +170,41 @@ class BillUpdateService return $bill; } - /** - * @param Bill $bill - * @param int $oldOrder - * @param int $newOrder - */ private function updateOrder(Bill $bill, int $oldOrder, int $newOrder): void { if ($newOrder > $oldOrder) { $this->user->bills()->where('order', '<=', $newOrder)->where('order', '>', $oldOrder) - ->where('bills.id', '!=', $bill->id) - ->decrement('bills.order'); + ->where('bills.id', '!=', $bill->id) + ->decrement('bills.order') + ; $bill->order = $newOrder; $bill->save(); } if ($newOrder < $oldOrder) { $this->user->bills()->where('order', '>=', $newOrder)->where('order', '<', $oldOrder) - ->where('bills.id', '!=', $bill->id) - ->increment('bills.order'); + ->where('bills.id', '!=', $bill->id) + ->increment('bills.order') + ; $bill->order = $newOrder; $bill->save(); } } - /** - * @param Bill $bill - * @param array $oldData - * @param array $newData - */ private function updateBillTriggers(Bill $bill, array $oldData, array $newData): void { - Log::debug(sprintf('Now in updateBillTriggers(%d, "%s")', $bill->id, $bill->name)); + app('log')->debug(sprintf('Now in updateBillTriggers(%d, "%s")', $bill->id, $bill->name)); + /** @var BillRepositoryInterface $repository */ $repository = app(BillRepositoryInterface::class); $repository->setUser($bill->user); - $rules = $repository->getRulesForBill($bill); + $rules = $repository->getRulesForBill($bill); if (0 === $rules->count()) { - Log::debug('Found no rules.'); + app('log')->debug('Found no rules.'); return; } - Log::debug(sprintf('Found %d rules', $rules->count())); - $fields = [ + app('log')->debug(sprintf('Found %d rules', $rules->count())); + $fields = [ 'name' => 'description_contains', 'amount_min' => 'amount_more', 'amount_max' => 'amount_less', @@ -236,45 +215,35 @@ class BillUpdateService continue; } if ($oldData[$field] === $newData[$field]) { - Log::debug(sprintf('Field %s is unchanged ("%s"), continue.', $field, $oldData[$field])); + app('log')->debug(sprintf('Field %s is unchanged ("%s"), continue.', $field, $oldData[$field])); + continue; } $this->updateRules($rules, $ruleTriggerKey, $oldData[$field], $newData[$field]); } } - /** - * @param Collection $rules - * @param string $key - * @param string $oldValue - * @param string $newValue - */ private function updateRules(Collection $rules, string $key, string $oldValue, string $newValue): void { /** @var Rule $rule */ foreach ($rules as $rule) { $trigger = $this->getRuleTrigger($rule, $key); if (null !== $trigger && $trigger->trigger_value === $oldValue) { - Log::debug(sprintf('Updated rule trigger #%d from value "%s" to value "%s"', $trigger->id, $oldValue, $newValue)); + app('log')->debug(sprintf('Updated rule trigger #%d from value "%s" to value "%s"', $trigger->id, $oldValue, $newValue)); $trigger->trigger_value = $newValue; $trigger->save(); + continue; } if (null !== $trigger && $trigger->trigger_value !== $oldValue && in_array($key, ['amount_more', 'amount_less'], true) && 0 === bccomp($trigger->trigger_value, $oldValue)) { - Log::debug(sprintf('Updated rule trigger #%d from value "%s" to value "%s"', $trigger->id, $oldValue, $newValue)); + app('log')->debug(sprintf('Updated rule trigger #%d from value "%s" to value "%s"', $trigger->id, $oldValue, $newValue)); $trigger->trigger_value = $newValue; $trigger->save(); } } } - /** - * @param Rule $rule - * @param string $key - * - * @return RuleTrigger|null - */ private function getRuleTrigger(Rule $rule, string $key): ?RuleTrigger { return $rule->ruleTriggers()->where('trigger_type', $key)->first(); diff --git a/app/Services/Internal/Update/CategoryUpdateService.php b/app/Services/Internal/Update/CategoryUpdateService.php index 0d2cdba3f7..8d4a7067e5 100644 --- a/app/Services/Internal/Update/CategoryUpdateService.php +++ b/app/Services/Internal/Update/CategoryUpdateService.php @@ -23,22 +23,19 @@ declare(strict_types=1); namespace FireflyIII\Services\Internal\Update; -use Exception; use FireflyIII\Models\Category; use FireflyIII\Models\Note; use FireflyIII\Models\RecurrenceTransactionMeta; use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleTrigger; -use Illuminate\Support\Facades\Log; +use FireflyIII\User; /** * Class CategoryUpdateService - * - */ class CategoryUpdateService { - private $user; + private User $user; /** * Constructor. @@ -46,7 +43,9 @@ class CategoryUpdateService public function __construct() { if (auth()->check()) { - $this->user = auth()->user(); + /** @var User $user */ + $user = auth()->user(); + $this->user = $user; } } @@ -59,11 +58,7 @@ class CategoryUpdateService } /** - * @param Category $category - * @param array $data - * - * @return Category - * @throws Exception + * @throws \Exception */ public function update(Category $category, array $data): Category { @@ -82,71 +77,61 @@ class CategoryUpdateService return $category; } - /** - * @param string $oldName - * @param string $newName - */ private function updateRuleTriggers(string $oldName, string $newName): void { - $types = ['category_is',]; + $types = ['category_is']; $triggers = RuleTrigger::leftJoin('rules', 'rules.id', '=', 'rule_triggers.rule_id') - ->where('rules.user_id', $this->user->id) - ->whereIn('rule_triggers.trigger_type', $types) - ->where('rule_triggers.trigger_value', $oldName) - ->get(['rule_triggers.*']); - Log::debug(sprintf('Found %d triggers to update.', $triggers->count())); + ->where('rules.user_id', $this->user->id) + ->whereIn('rule_triggers.trigger_type', $types) + ->where('rule_triggers.trigger_value', $oldName) + ->get(['rule_triggers.*']) + ; + app('log')->debug(sprintf('Found %d triggers to update.', $triggers->count())); + /** @var RuleTrigger $trigger */ foreach ($triggers as $trigger) { $trigger->trigger_value = $newName; $trigger->save(); - Log::debug(sprintf('Updated trigger %d: %s', $trigger->id, $trigger->trigger_value)); + app('log')->debug(sprintf('Updated trigger %d: %s', $trigger->id, $trigger->trigger_value)); } } - /** - * @param string $oldName - * @param string $newName - */ private function updateRuleActions(string $oldName, string $newName): void { - $types = ['set_category',]; + $types = ['set_category']; $actions = RuleAction::leftJoin('rules', 'rules.id', '=', 'rule_actions.rule_id') - ->where('rules.user_id', $this->user->id) - ->whereIn('rule_actions.action_type', $types) - ->where('rule_actions.action_value', $oldName) - ->get(['rule_actions.*']); - Log::debug(sprintf('Found %d actions to update.', $actions->count())); + ->where('rules.user_id', $this->user->id) + ->whereIn('rule_actions.action_type', $types) + ->where('rule_actions.action_value', $oldName) + ->get(['rule_actions.*']) + ; + app('log')->debug(sprintf('Found %d actions to update.', $actions->count())); + /** @var RuleAction $action */ foreach ($actions as $action) { $action->action_value = $newName; $action->save(); - Log::debug(sprintf('Updated action %d: %s', $action->id, $action->action_value)); + app('log')->debug(sprintf('Updated action %d: %s', $action->id, $action->action_value)); } } - /** - * @param string $oldName - * @param string $newName - */ private function updateRecurrences(string $oldName, string $newName): void { RecurrenceTransactionMeta::leftJoin('recurrences_transactions', 'rt_meta.rt_id', '=', 'recurrences_transactions.id') - ->leftJoin('recurrences', 'recurrences.id', '=', 'recurrences_transactions.recurrence_id') - ->where('recurrences.user_id', $this->user->id) - ->where('rt_meta.name', 'category_name') - ->where('rt_meta.value', $oldName) - ->update(['rt_meta.value' => $newName]); + ->leftJoin('recurrences', 'recurrences.id', '=', 'recurrences_transactions.recurrence_id') + ->where('recurrences.user_id', $this->user->id) + ->where('rt_meta.name', 'category_name') + ->where('rt_meta.value', $oldName) + ->update(['rt_meta.value' => $newName]) + ; } /** - * @param Category $category - * @param array $data - * - * @throws Exception + * @throws \Exception */ private function updateNotes(Category $category, array $data): void { - $note = array_key_exists('notes', $data) ? $data['notes'] : null; + $note = array_key_exists('notes', $data) ? $data['notes'] : null; if (null === $note) { return; } @@ -158,7 +143,7 @@ class CategoryUpdateService return; } - $dbNote = $category->notes()->first(); + $dbNote = $category->notes()->first(); if (null === $dbNote) { $dbNote = new Note(); $dbNote->noteable()->associate($category); diff --git a/app/Services/Internal/Update/CurrencyUpdateService.php b/app/Services/Internal/Update/CurrencyUpdateService.php index c01444e4e8..3a6adf9705 100644 --- a/app/Services/Internal/Update/CurrencyUpdateService.php +++ b/app/Services/Internal/Update/CurrencyUpdateService.php @@ -27,17 +27,9 @@ use FireflyIII\Models\TransactionCurrency; /** * Class CurrencyUpdateService - * - */ class CurrencyUpdateService { - /** - * @param TransactionCurrency $currency - * @param array $data - * - * @return TransactionCurrency - */ public function update(TransactionCurrency $currency, array $data): TransactionCurrency { if (array_key_exists('code', $data) && '' !== (string)$data['code']) { @@ -52,14 +44,13 @@ class CurrencyUpdateService $currency->name = e($data['name']); } - if (array_key_exists('enabled', $data) && is_bool($data['enabled'])) { - $currency->enabled = (bool)$data['enabled']; - } + $currency->enabled = false; if (array_key_exists('decimal_places', $data) && is_int($data['decimal_places'])) { - $currency->decimal_places = (int)$data['decimal_places']; + $currency->decimal_places = $data['decimal_places']; } - + $currency->userGroupEnabled = null; + $currency->userGroupDefault = null; $currency->save(); return $currency; diff --git a/app/Services/Internal/Update/GroupCloneService.php b/app/Services/Internal/Update/GroupCloneService.php index 21a0e3bbc4..e3353d6ada 100644 --- a/app/Services/Internal/Update/GroupCloneService.php +++ b/app/Services/Internal/Update/GroupCloneService.php @@ -39,27 +39,17 @@ use FireflyIII\Models\TransactionJournalMeta; */ class GroupCloneService { - /** - * @param TransactionGroup $group - * - * @return TransactionGroup - */ public function cloneGroup(TransactionGroup $group): TransactionGroup { $newGroup = $group->replicate(); $newGroup->save(); foreach ($group->transactionJournals as $journal) { - $this->cloneJournal($journal, $newGroup, (int)$group->id); + $this->cloneJournal($journal, $newGroup, $group->id); } return $newGroup; } - /** - * @param TransactionJournal $journal - * @param TransactionGroup $newGroup - * @param int $originalGroup - */ private function cloneJournal(TransactionJournal $journal, TransactionGroup $newGroup, int $originalGroup): void { $newJournal = $journal->replicate(); @@ -83,6 +73,7 @@ class GroupCloneService foreach ($journal->transactionJournalMeta as $meta) { $this->cloneMeta($meta, $newJournal); } + // clone category /** @var Category $category */ foreach ($journal->categories as $category) { @@ -105,8 +96,8 @@ class GroupCloneService // add relation. // TODO clone ALL linked piggy banks - /** @var PiggyBankEvent $event */ - $event = $journal->piggyBankEvents()->first(); + /** @var null|PiggyBankEvent $event */ + $event = $journal->piggyBankEvents()->first(); if (null !== $event) { $piggyBank = $event->piggyBank; $factory = app(PiggyBankEventFactory::class); @@ -114,10 +105,6 @@ class GroupCloneService } } - /** - * @param Transaction $transaction - * @param TransactionJournal $newJournal - */ private function cloneTransaction(Transaction $transaction, TransactionJournal $newJournal): void { $newTransaction = $transaction->replicate(); @@ -126,11 +113,6 @@ class GroupCloneService $newTransaction->save(); } - /** - * @param Note $note - * @param TransactionJournal $newJournal - * @param int $oldGroupId - */ private function cloneNote(Note $note, TransactionJournal $newJournal, int $oldGroupId): void { $newNote = $note->replicate(); @@ -142,10 +124,6 @@ class GroupCloneService $newNote->save(); } - /** - * @param TransactionJournalMeta $meta - * @param TransactionJournal $newJournal - */ private function cloneMeta(TransactionJournalMeta $meta, TransactionJournal $newJournal): void { $newMeta = $meta->replicate(); diff --git a/app/Services/Internal/Update/GroupUpdateService.php b/app/Services/Internal/Update/GroupUpdateService.php index 3fc5e45876..412c9f3a0c 100644 --- a/app/Services/Internal/Update/GroupUpdateService.php +++ b/app/Services/Internal/Update/GroupUpdateService.php @@ -30,8 +30,6 @@ use FireflyIII\Factory\TransactionJournalFactory; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Services\Internal\Destroy\JournalDestroyService; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class GroupUpdateService @@ -41,23 +39,19 @@ class GroupUpdateService /** * Update a transaction group. * - * @param TransactionGroup $transactionGroup - * @param array $data - * - * @return TransactionGroup * @throws DuplicateTransactionException * @throws FireflyException - * @throws JsonException */ public function update(TransactionGroup $transactionGroup, array $data): TransactionGroup { - Log::debug(sprintf('Now in %s', __METHOD__)); - Log::debug('Now in group update service', $data); + app('log')->debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug('Now in group update service', $data); + /** @var array $transactions */ $transactions = $data['transactions'] ?? []; // update group name. if (array_key_exists('group_title', $data)) { - Log::debug(sprintf('Update transaction group #%d title.', $transactionGroup->id)); + app('log')->debug(sprintf('Update transaction group #%d title.', $transactionGroup->id)); $oldTitle = $transactionGroup->title; $transactionGroup->title = $data['group_title']; $transactionGroup->save(); @@ -72,9 +66,8 @@ class GroupUpdateService ); } - if (0 === count($transactions)) { - Log::debug('No transactions submitted, do nothing.'); + app('log')->debug('No transactions submitted, do nothing.'); return $transactionGroup; } @@ -82,37 +75,40 @@ class GroupUpdateService if (1 === count($transactions) && 1 === $transactionGroup->transactionJournals()->count()) { /** @var TransactionJournal $first */ $first = $transactionGroup->transactionJournals()->first(); - Log::debug( + app('log')->debug( sprintf('Will now update journal #%d (only journal in group #%d)', $first->id, $transactionGroup->id) ); $this->updateTransactionJournal($transactionGroup, $first, reset($transactions)); + $transactionGroup->touch(); $transactionGroup->refresh(); app('preferences')->mark(); return $transactionGroup; } - Log::debug('Going to update split group.'); + app('log')->debug('Going to update split group.'); - $existing = $transactionGroup->transactionJournals->pluck('id')->toArray(); - $updated = $this->updateTransactions($transactionGroup, $transactions); - Log::debug('Array of updated IDs: ', $updated); + $existing = $transactionGroup->transactionJournals->pluck('id')->toArray(); + $updated = $this->updateTransactions($transactionGroup, $transactions); + app('log')->debug('Array of updated IDs: ', $updated); if (0 === count($updated)) { - Log::error('There were no transactions updated or created. Will not delete anything.'); + app('log')->error('There were no transactions updated or created. Will not delete anything.'); + $transactionGroup->touch(); $transactionGroup->refresh(); app('preferences')->mark(); return $transactionGroup; } - $result = array_diff($existing, $updated); - Log::debug('Result of DIFF: ', $result); + $result = array_diff($existing, $updated); + app('log')->debug('Result of DIFF: ', $result); if (count($result) > 0) { /** @var string $deletedId */ foreach ($result as $deletedId) { /** @var TransactionJournal $journal */ $journal = $transactionGroup->transactionJournals()->find((int)$deletedId); + /** @var JournalDestroyService $service */ $service = app(JournalDestroyService::class); $service->destroy($journal); @@ -120,6 +116,7 @@ class GroupUpdateService } app('preferences')->mark(); + $transactionGroup->touch(); $transactionGroup->refresh(); return $transactionGroup; @@ -127,23 +124,20 @@ class GroupUpdateService /** * Update single journal. - * - * @param TransactionGroup $transactionGroup - * @param TransactionJournal $journal - * @param array $data */ private function updateTransactionJournal( TransactionGroup $transactionGroup, TransactionJournal $journal, array $data ): void { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); if (0 === count($data)) { return; } if (1 === count($data) && array_key_exists('transaction_journal_id', $data)) { return; } + /** @var JournalUpdateService $updateService */ $updateService = app(JournalUpdateService::class); $updateService->setTransactionGroup($transactionGroup); @@ -153,58 +147,56 @@ class GroupUpdateService } /** - * @param TransactionGroup $transactionGroup - * @param array $transactions - * - * @return array * @throws DuplicateTransactionException * @throws FireflyException - * @throws JsonException */ private function updateTransactions(TransactionGroup $transactionGroup, array $transactions): array { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); // updated or created transaction journals: $updated = []; + /** * @var int $index * @var array $transaction */ foreach ($transactions as $index => $transaction) { - Log::debug(sprintf('Now at #%d of %d', ($index + 1), count($transactions)), $transaction); + app('log')->debug(sprintf('Now at #%d of %d', $index + 1, count($transactions)), $transaction); $journalId = (int)($transaction['transaction_journal_id'] ?? 0); - /** @var TransactionJournal|null $journal */ - $journal = $transactionGroup->transactionJournals()->find($journalId); + + /** @var null|TransactionJournal $journal */ + $journal = $transactionGroup->transactionJournals()->find($journalId); if (null === $journal) { - Log::debug('This entry has no existing journal: make a new split.'); + app('log')->debug('This entry has no existing journal: make a new split.'); // force the transaction type on the transaction data. // by plucking it from another journal in the group: if (!array_key_exists('type', $transaction)) { - Log::debug('No transaction type is indicated.'); - /** @var TransactionJournal|null $randomJournal */ + app('log')->debug('No transaction type is indicated.'); + + /** @var null|TransactionJournal $randomJournal */ $randomJournal = $transactionGroup->transactionJournals()->inRandomOrder()->with( ['transactionType'] )->first(); if (null !== $randomJournal) { $transaction['type'] = $randomJournal->transactionType->type; - Log::debug(sprintf('Transaction type set to %s.', $transaction['type'])); + app('log')->debug(sprintf('Transaction type set to %s.', $transaction['type'])); } } - Log::debug('Call createTransactionJournal'); + app('log')->debug('Call createTransactionJournal'); $newJournal = $this->createTransactionJournal($transactionGroup, $transaction); - Log::debug('Done calling createTransactionJournal'); + app('log')->debug('Done calling createTransactionJournal'); if (null !== $newJournal) { $updated[] = $newJournal->id; } if (null === $newJournal) { - Log::error('createTransactionJournal returned NULL, indicating something went wrong.'); + app('log')->error('createTransactionJournal returned NULL, indicating something went wrong.'); } } if (null !== $journal) { - Log::debug('Call updateTransactionJournal'); + app('log')->debug('Call updateTransactionJournal'); $this->updateTransactionJournal($transactionGroup, $journal, $transaction); $updated[] = $journal->id; - Log::debug('Done calling updateTransactionJournal'); + app('log')->debug('Done calling updateTransactionJournal'); } } @@ -212,14 +204,8 @@ class GroupUpdateService } /** - * @param TransactionGroup $transactionGroup - * @param array $data - * - * @return TransactionJournal|null - * * @throws DuplicateTransactionException * @throws FireflyException - * @throws JsonException */ private function createTransactionJournal(TransactionGroup $transactionGroup, array $data): ?TransactionJournal { @@ -228,14 +214,17 @@ class GroupUpdateService $data, ], ]; + /** @var TransactionJournalFactory $factory */ - $factory = app(TransactionJournalFactory::class); + $factory = app(TransactionJournalFactory::class); $factory->setUser($transactionGroup->user); + try { $collection = $factory->create($submission); } catch (FireflyException $e) { - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + throw new FireflyException( sprintf('Could not create new transaction journal: %s', $e->getMessage()), 0, @@ -243,7 +232,7 @@ class GroupUpdateService ); } $collection->each( - function (TransactionJournal $journal) use ($transactionGroup) { + static function (TransactionJournal $journal) use ($transactionGroup): void { $transactionGroup->transactionJournals()->save($journal); } ); diff --git a/app/Services/Internal/Update/JournalUpdateService.php b/app/Services/Internal/Update/JournalUpdateService.php index 8fbb53cf55..b6ecdc31a6 100644 --- a/app/Services/Internal/Update/JournalUpdateService.php +++ b/app/Services/Internal/Update/JournalUpdateService.php @@ -25,6 +25,7 @@ namespace FireflyIII\Services\Internal\Update; use Carbon\Carbon; use Carbon\Exceptions\InvalidDateException; +use Carbon\Exceptions\InvalidFormatException; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\TagFactory; @@ -39,11 +40,10 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Services\Internal\Support\JournalServiceTrait; use FireflyIII\Support\NullArrayObject; use FireflyIII\Validation\AccountValidator; -use Illuminate\Support\Facades\Log; /** * Class to centralise code that updates a journal given the input by system. @@ -99,23 +99,17 @@ class JournalUpdateService 'external_url', ]; $this->metaDate = ['interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', - 'invoice_date',]; + 'invoice_date', ]; } - /** - * @param array $data - */ public function setData(array $data): void { $this->data = $data; } - /** - * @param TransactionGroup $transactionGroup - */ public function setTransactionGroup(TransactionGroup $transactionGroup): void { - $this->transactionGroup = $transactionGroup; + $this->transactionGroup = $transactionGroup; $this->billRepository->setUser($transactionGroup->user); $this->categoryRepository->setUser($transactionGroup->user); $this->budgetRepository->setUser($transactionGroup->user); @@ -127,28 +121,21 @@ class JournalUpdateService $this->sourceTransaction = null; } - /** - * @param TransactionJournal $transactionJournal - */ public function setTransactionJournal(TransactionJournal $transactionJournal): void { $this->transactionJournal = $transactionJournal; } - /** - * - */ public function update(): void { - Log::debug(sprintf('Now in %s', __METHOD__)); - Log::debug(sprintf('Now in JournalUpdateService for journal #%d.', $this->transactionJournal->id)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in JournalUpdateService for journal #%d.', $this->transactionJournal->id)); - - $this->data['reconciled'] = array_key_exists('reconciled', $this->data) ? $this->data['reconciled'] : false; + $this->data['reconciled'] = array_key_exists('reconciled', $this->data) ? $this->data['reconciled'] : null; // can we update account data using the new type? if ($this->hasValidAccounts()) { - Log::info('Account info is valid, now update.'); + app('log')->info('Account info is valid, now update.'); // update accounts: $this->updateAccounts(); @@ -181,22 +168,16 @@ class JournalUpdateService $this->transactionJournal->refresh(); } - /** - * @return bool - */ private function hasValidAccounts(): bool { return $this->hasValidSourceAccount() && $this->hasValidDestinationAccount(); } - /** - * @return bool - */ private function hasValidSourceAccount(): bool { - Log::debug('Now in hasValidSourceAccount().'); - $sourceId = $this->data['source_id'] ?? null; - $sourceName = $this->data['source_name'] ?? null; + app('log')->debug('Now in hasValidSourceAccount().'); + $sourceId = $this->data['source_id'] ?? null; + $sourceName = $this->data['source_name'] ?? null; if (!$this->hasFields(['source_id', 'source_name'])) { $origSourceAccount = $this->getOriginalSourceAccount(); @@ -206,16 +187,16 @@ class JournalUpdateService // make new account validator. $expectedType = $this->getExpectedType(); - Log::debug(sprintf('Expected type (new or unchanged) is %s', $expectedType)); + app('log')->debug(sprintf('Expected type (new or unchanged) is %s', $expectedType)); // make a new validator. /** @var AccountValidator $validator */ - $validator = app(AccountValidator::class); + $validator = app(AccountValidator::class); $validator->setTransactionType($expectedType); $validator->setUser($this->transactionJournal->user); - $result = $validator->validateSource(['id' => $sourceId]); - Log::debug( + $result = $validator->validateSource(['id' => $sourceId]); + app('log')->debug( sprintf('hasValidSourceAccount(%d, "%s") will return %s', $sourceId, $sourceName, var_export($result, true)) ); @@ -225,11 +206,6 @@ class JournalUpdateService return $result; } - /** - * @param array $fields - * - * @return bool - */ private function hasFields(array $fields): bool { foreach ($fields as $field) { @@ -241,9 +217,6 @@ class JournalUpdateService return false; } - /** - * @return Account - */ private function getOriginalSourceAccount(): Account { if (null === $this->sourceAccount) { @@ -254,9 +227,6 @@ class JournalUpdateService return $this->sourceAccount; } - /** - * @return Transaction - */ private function getSourceTransaction(): Transaction { if (null === $this->sourceTransaction) { @@ -266,7 +236,7 @@ class JournalUpdateService 0 )->first(); } - Log::debug(sprintf('getSourceTransaction: %s', $this->sourceTransaction->amount)); + app('log')->debug(sprintf('getSourceTransaction: %s', $this->sourceTransaction->amount)); return $this->sourceTransaction; } @@ -277,12 +247,10 @@ class JournalUpdateService * * If the array contains key 'type' and the value is correct, this is returned. Otherwise, the original type is * returned. - * - * @return string */ private function getExpectedType(): string { - Log::debug('Now in getExpectedType()'); + app('log')->debug('Now in getExpectedType()'); if ($this->hasFields(['type'])) { return ucfirst('opening-balance' === $this->data['type'] ? 'opening balance' : $this->data['type']); } @@ -290,34 +258,31 @@ class JournalUpdateService return $this->transactionJournal->transactionType->type; } - /** - * @return bool - */ private function hasValidDestinationAccount(): bool { - Log::debug('Now in hasValidDestinationAccount().'); - $destId = $this->data['destination_id'] ?? null; - $destName = $this->data['destination_name'] ?? null; + app('log')->debug('Now in hasValidDestinationAccount().'); + $destId = $this->data['destination_id'] ?? null; + $destName = $this->data['destination_name'] ?? null; if (!$this->hasFields(['destination_id', 'destination_name'])) { - Log::debug('No destination info submitted, grab the original data.'); + app('log')->debug('No destination info submitted, grab the original data.'); $destination = $this->getOriginalDestinationAccount(); $destId = $destination->id; $destName = $destination->name; } // make new account validator. - $expectedType = $this->getExpectedType(); - Log::debug(sprintf('Expected type (new or unchanged) is %s', $expectedType)); + $expectedType = $this->getExpectedType(); + app('log')->debug(sprintf('Expected type (new or unchanged) is %s', $expectedType)); // make a new validator. /** @var AccountValidator $validator */ - $validator = app(AccountValidator::class); + $validator = app(AccountValidator::class); $validator->setTransactionType($expectedType); $validator->setUser($this->transactionJournal->user); $validator->source = $this->getValidSourceAccount(); $result = $validator->validateDestination(['id' => $destId, 'name' => $destName]); - Log::debug( + app('log')->debug( sprintf( 'hasValidDestinationAccount(%d, "%s") will return %s', $destId, @@ -332,9 +297,6 @@ class JournalUpdateService return $result; } - /** - * @return Account - */ private function getOriginalDestinationAccount(): Account { if (null === $this->destinationAccount) { @@ -347,8 +309,6 @@ class JournalUpdateService /** * Get destination transaction. - * - * @return Transaction */ private function getDestinationTransaction(): Transaction { @@ -361,18 +321,16 @@ class JournalUpdateService /** * Does a validation and returns the source account. This method will break if the source isn't really valid. - * - * @return Account */ private function getValidSourceAccount(): Account { - Log::debug('Now in getValidSourceAccount().'); + app('log')->debug('Now in getValidSourceAccount().'); if (!$this->hasFields(['source_id', 'source_name'])) { return $this->getOriginalSourceAccount(); } - $sourceInfo = [ + $sourceInfo = [ 'id' => (int)($this->data['source_id'] ?? null), 'name' => $this->data['source_name'] ?? null, 'iban' => $this->data['source_iban'] ?? null, @@ -381,15 +339,16 @@ class JournalUpdateService ]; $expectedType = $this->getExpectedType(); + try { $result = $this->getAccount($expectedType, 'source', $sourceInfo); } catch (FireflyException $e) { - Log::error(sprintf('Cant get the valid source account: %s', $e->getMessage())); + app('log')->error(sprintf('Cant get the valid source account: %s', $e->getMessage())); $result = $this->getOriginalSourceAccount(); } - Log::debug(sprintf('getValidSourceAccount() will return #%d ("%s")', $result->id, $result->name)); + app('log')->debug(sprintf('getValidSourceAccount() will return #%d ("%s")', $result->id, $result->name)); return $result; } @@ -399,12 +358,12 @@ class JournalUpdateService */ private function updateAccounts(): void { - $source = $this->getValidSourceAccount(); - $destination = $this->getValidDestinationAccount(); + $source = $this->getValidSourceAccount(); + $destination = $this->getValidDestinationAccount(); // cowardly refuse to update if both accounts are the same. if ($source->id === $destination->id) { - Log::error(sprintf('Source + dest accounts are equal (%d, "%s")', $source->id, $source->name)); + app('log')->error(sprintf('Source + dest accounts are equal (%d, "%s")', $source->id, $source->name)); return; } @@ -413,31 +372,29 @@ class JournalUpdateService $origSourceTransaction->account()->associate($source); $origSourceTransaction->save(); - $destTransaction = $this->getDestinationTransaction(); + $destTransaction = $this->getDestinationTransaction(); $destTransaction->account()->associate($destination); $destTransaction->save(); // refresh transactions. $this->sourceTransaction->refresh(); $this->destinationTransaction->refresh(); - Log::debug(sprintf('Will set source to #%d ("%s")', $source->id, $source->name)); - Log::debug(sprintf('Will set dest to #%d ("%s")', $destination->id, $destination->name)); + app('log')->debug(sprintf('Will set source to #%d ("%s")', $source->id, $source->name)); + app('log')->debug(sprintf('Will set dest to #%d ("%s")', $destination->id, $destination->name)); } /** * Does a validation and returns the destination account. This method will break if the dest isn't really valid. - * - * @return Account */ private function getValidDestinationAccount(): Account { - Log::debug('Now in getValidDestinationAccount().'); + app('log')->debug('Now in getValidDestinationAccount().'); if (!$this->hasFields(['destination_id', 'destination_name'])) { return $this->getOriginalDestinationAccount(); } - $destInfo = [ + $destInfo = [ 'id' => (int)($this->data['destination_id'] ?? null), 'name' => $this->data['destination_name'] ?? null, 'iban' => $this->data['destination_iban'] ?? null, @@ -447,11 +404,12 @@ class JournalUpdateService // make new account validator. $expectedType = $this->getExpectedType(); - Log::debug(sprintf('Expected type (new or unchanged) is %s', $expectedType)); + app('log')->debug(sprintf('Expected type (new or unchanged) is %s', $expectedType)); + try { $result = $this->getAccount($expectedType, 'destination', $destInfo); } catch (FireflyException $e) { - Log::error(sprintf('getValidDestinationAccount() threw unexpected error: %s', $e->getMessage())); + app('log')->error(sprintf('getValidDestinationAccount() threw unexpected error: %s', $e->getMessage())); $result = $this->getOriginalDestinationAccount(); } @@ -463,10 +421,10 @@ class JournalUpdateService */ private function updateType(): void { - Log::debug('Now in updateType()'); + app('log')->debug('Now in updateType()'); if ($this->hasFields(['type'])) { - $type = 'opening-balance' === $this->data['type'] ? 'opening balance' : $this->data['type']; - Log::debug( + $type = 'opening-balance' === $this->data['type'] ? 'opening balance' : $this->data['type']; + app('log')->debug( sprintf( 'Trying to change journal #%d from a %s to a %s.', $this->transactionJournal->id, @@ -479,7 +437,7 @@ class JournalUpdateService $typeFactory = app(TransactionTypeFactory::class); $result = $typeFactory->find($this->data['type']); if (null !== $result) { - Log::debug('Changed transaction type!'); + app('log')->debug('Changed transaction type!'); $this->transactionJournal->transaction_type_id = $result->id; $this->transactionJournal->save(); @@ -488,7 +446,7 @@ class JournalUpdateService return; } - Log::debug('No type field present.'); + app('log')->debug('No type field present.'); } /** @@ -507,67 +465,59 @@ class JournalUpdateService $billName = (string)($this->data['bill_name'] ?? ''); $bill = $this->billRepository->findBill($billId, $billName); $this->transactionJournal->bill_id = $bill?->id; - Log::debug('Updated bill ID'); + app('log')->debug('Updated bill ID'); } } /** * Update journal generic field. Cannot be set to NULL. - * - * @param string $fieldName */ private function updateField(string $fieldName): void { if (array_key_exists($fieldName, $this->data) && '' !== (string)$this->data[$fieldName]) { - $value = $this->data[$fieldName]; + $value = $this->data[$fieldName]; if ('date' === $fieldName) { if ($value instanceof Carbon) { // update timezone. $value->setTimezone(config('app.timezone')); } - if (!($value instanceof Carbon)) { + if (!$value instanceof Carbon) { $value = new Carbon($value); } // do some parsing. - Log::debug(sprintf('Create date value from string "%s".', $value)); + app('log')->debug(sprintf('Create date value from string "%s".', $value)); } event( new TriggeredAuditLog( $this->transactionJournal->user, $this->transactionJournal, sprintf('update_%s', $fieldName), - $this->transactionJournal->$fieldName, + $this->transactionJournal->{$fieldName}, // @phpstan-ignore-line $value ) ); - $this->transactionJournal->$fieldName = $value; - Log::debug(sprintf('Updated %s', $fieldName)); + $this->transactionJournal->{$fieldName} = $value; // @phpstan-ignore-line + app('log')->debug(sprintf('Updated %s', $fieldName)); } } - /** - * - */ private function updateCategory(): void { // update category if ($this->hasFields(['category_id', 'category_name'])) { - Log::debug('Will update category.'); + app('log')->debug('Will update category.'); $this->storeCategory($this->transactionJournal, new NullArrayObject($this->data)); } } - /** - * - */ private function updateBudget(): void { // update budget if ($this->hasFields(['budget_id', 'budget_name'])) { - Log::debug('Will update budget.'); + app('log')->debug('Will update budget.'); $this->storeBudget($this->transactionJournal, new NullArrayObject($this->data)); } // is transfer? remove budget @@ -576,21 +526,15 @@ class JournalUpdateService } } - /** - * - */ private function updateTags(): void { if ($this->hasFields(['tags'])) { - Log::debug('Will update tags.'); + app('log')->debug('Will update tags.'); $tags = $this->data['tags'] ?? null; $this->storeTags($this->transactionJournal, $tags); } } - /** - * - */ private function updateReconciled(): void { if (array_key_exists('reconciled', $this->data) && is_bool($this->data['reconciled'])) { @@ -598,9 +542,6 @@ class JournalUpdateService } } - /** - * - */ private function updateNotes(): void { // update notes. @@ -610,28 +551,22 @@ class JournalUpdateService } } - /** - * - */ private function updateMeta(): void { // update meta fields. // first string if ($this->hasFields($this->metaString)) { - Log::debug('Meta string fields are present.'); + app('log')->debug('Meta string fields are present.'); $this->updateMetaFields(); } // then date fields. if ($this->hasFields($this->metaDate)) { - Log::debug('Meta date fields are present.'); + app('log')->debug('Meta date fields are present.'); $this->updateMetaDateFields(); } } - /** - * - */ private function updateMetaFields(): void { /** @var TransactionJournalMetaFactory $factory */ @@ -640,8 +575,8 @@ class JournalUpdateService foreach ($this->metaString as $field) { if ($this->hasFields([$field])) { $value = '' === $this->data[$field] ? null : $this->data[$field]; - Log::debug(sprintf('Field "%s" is present ("%s"), try to update it.', $field, $value)); - $set = [ + app('log')->debug(sprintf('Field "%s" is present ("%s"), try to update it.', $field, $value)); + $set = [ 'journal' => $this->transactionJournal, 'name' => $field, 'data' => $value, @@ -651,9 +586,6 @@ class JournalUpdateService } } - /** - * - */ private function updateMetaDateFields(): void { /** @var TransactionJournalMetaFactory $factory */ @@ -663,12 +595,12 @@ class JournalUpdateService if ($this->hasFields([$field])) { try { $value = '' === (string)$this->data[$field] ? null : new Carbon($this->data[$field]); - } catch (InvalidDateException $e) { - Log::debug(sprintf('%s is not a valid date value: %s', $this->data[$field], $e->getMessage())); + } catch (InvalidDateException|InvalidFormatException $e) { // @phpstan-ignore-line + app('log')->debug(sprintf('%s is not a valid date value: %s', $this->data[$field], $e->getMessage())); return; } - Log::debug(sprintf('Field "%s" is present ("%s"), try to update it.', $field, $value)); + app('log')->debug(sprintf('Field "%s" is present ("%s"), try to update it.', $field, $value)); $set = [ 'journal' => $this->transactionJournal, 'name' => $field, @@ -679,72 +611,62 @@ class JournalUpdateService } } - /** - * - */ private function updateCurrency(): void { // update transactions. if (!$this->hasFields(['currency_id', 'currency_code'])) { return; } - $currencyId = $this->data['currency_id'] ?? null; - $currencyCode = $this->data['currency_code'] ?? null; - $currency = $this->currencyRepository->findCurrency($currencyId, $currencyCode); - if (null !== $currency) { - // update currency everywhere. - $this->transactionJournal->transaction_currency_id = $currency->id; - $this->transactionJournal->save(); + $currencyId = $this->data['currency_id'] ?? null; + $currencyCode = $this->data['currency_code'] ?? null; + $currency = $this->currencyRepository->findCurrency($currencyId, $currencyCode); + // update currency everywhere. + $this->transactionJournal->transaction_currency_id = $currency->id; + $this->transactionJournal->save(); - $source = $this->getSourceTransaction(); - $source->transaction_currency_id = $currency->id; - $source->save(); + $source = $this->getSourceTransaction(); + $source->transaction_currency_id = $currency->id; + $source->save(); - $dest = $this->getDestinationTransaction(); - $dest->transaction_currency_id = $currency->id; - $dest->save(); + $dest = $this->getDestinationTransaction(); + $dest->transaction_currency_id = $currency->id; + $dest->save(); - // refresh transactions. - $this->sourceTransaction->refresh(); - $this->destinationTransaction->refresh(); - Log::debug(sprintf('Updated currency to #%d (%s)', $currency->id, $currency->code)); - } + // refresh transactions. + $this->sourceTransaction->refresh(); + $this->destinationTransaction->refresh(); + app('log')->debug(sprintf('Updated currency to #%d (%s)', $currency->id, $currency->code)); } - /** - * - */ private function updateAmount(): void { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); if (!$this->hasFields(['amount'])) { return; } - $value = $this->data['amount'] ?? ''; - Log::debug(sprintf('Amount is now "%s"', $value)); + $value = $this->data['amount'] ?? ''; + app('log')->debug(sprintf('Amount is now "%s"', $value)); + try { $amount = $this->getAmount($value); } catch (FireflyException $e) { - Log::debug(sprintf('getAmount("%s") returns error: %s', $value, $e->getMessage())); + app('log')->debug(sprintf('getAmount("%s") returns error: %s', $value, $e->getMessage())); return; } $origSourceTransaction = $this->getSourceTransaction(); $origSourceTransaction->amount = app('steam')->negative($amount); $origSourceTransaction->save(); - $destTransaction = $this->getDestinationTransaction(); - $destTransaction->amount = app('steam')->positive($amount); + $destTransaction = $this->getDestinationTransaction(); + $destTransaction->amount = app('steam')->positive($amount); $destTransaction->save(); // refresh transactions. $this->sourceTransaction->refresh(); $this->destinationTransaction->refresh(); - Log::debug(sprintf('Updated amount to "%s"', $amount)); + app('log')->debug(sprintf('Updated amount to "%s"', $amount)); } - /** - * - */ private function updateForeignAmount(): void { // amount, foreign currency. @@ -766,7 +688,7 @@ class JournalUpdateService // not the same as normal currency if (null !== $foreignCurrency && $foreignCurrency->id === $this->transactionJournal->transaction_currency_id) { - Log::error(sprintf('Foreign currency is equal to normal currency (%s)', $foreignCurrency->code)); + app('log')->error(sprintf('Foreign currency is equal to normal currency (%s)', $foreignCurrency->code)); return; } @@ -776,11 +698,11 @@ class JournalUpdateService $source->foreign_currency_id = $foreignCurrency->id; $source->foreign_amount = app('steam')->negative($foreignAmount); $source->save(); - $dest->foreign_currency_id = $foreignCurrency->id; - $dest->foreign_amount = app('steam')->positive($foreignAmount); + $dest->foreign_currency_id = $foreignCurrency->id; + $dest->foreign_amount = app('steam')->positive($foreignAmount); $dest->save(); - Log::debug( + app('log')->debug( sprintf( 'Update foreign info to %s (#%d) %s', $foreignCurrency->code, @@ -800,12 +722,12 @@ class JournalUpdateService $source->foreign_amount = null; $source->save(); - $dest->foreign_currency_id = null; - $dest->foreign_amount = null; + $dest->foreign_currency_id = null; + $dest->foreign_amount = null; $dest->save(); - Log::debug(sprintf('Foreign amount is "%s" so remove foreign amount info.', $amount)); + app('log')->debug(sprintf('Foreign amount is "%s" so remove foreign amount info.', $amount)); } - Log::info('Not enough info to update foreign currency info.'); + app('log')->info('Not enough info to update foreign currency info.'); // refresh transactions. $this->sourceTransaction->refresh(); diff --git a/app/Services/Internal/Update/RecurrenceUpdateService.php b/app/Services/Internal/Update/RecurrenceUpdateService.php index 559f333fd3..13119a36cb 100644 --- a/app/Services/Internal/Update/RecurrenceUpdateService.php +++ b/app/Services/Internal/Update/RecurrenceUpdateService.php @@ -32,18 +32,14 @@ use FireflyIII\Models\RecurrenceTransaction; use FireflyIII\Services\Internal\Support\RecurringTransactionTrait; use FireflyIII\Services\Internal\Support\TransactionTypeTrait; use FireflyIII\User; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class RecurrenceUpdateService - * - */ class RecurrenceUpdateService { - use TransactionTypeTrait; use RecurringTransactionTrait; + use TransactionTypeTrait; private User $user; @@ -52,10 +48,6 @@ class RecurrenceUpdateService * * TODO if the user updates the type, the accounts must be validated again. * - * @param Recurrence $recurrence - * @param array $data - * - * @return Recurrence * @throws FireflyException */ public function update(Recurrence $recurrence, array $data): Recurrence @@ -99,7 +91,7 @@ class RecurrenceUpdateService // update all repetitions if (array_key_exists('repetitions', $data)) { - Log::debug('Will update repetitions array'); + app('log')->debug('Will update repetitions array'); // update each repetition or throw error yay $this->updateRepetitions($recurrence, $data['repetitions'] ?? []); } @@ -112,10 +104,6 @@ class RecurrenceUpdateService return $recurrence; } - /** - * @param Recurrence $recurrence - * @param string $text - */ private function setNoteText(Recurrence $recurrence, string $text): void { $dbNote = $recurrence->notes()->first(); @@ -133,10 +121,6 @@ class RecurrenceUpdateService } /** - * - * @param Recurrence $recurrence - * @param array $repetitions - * * @throws FireflyException */ private function updateRepetitions(Recurrence $recurrence, array $repetitions): void @@ -148,16 +132,16 @@ class RecurrenceUpdateService } // user added or removed repetitions, delete all and recreate: if ($originalCount !== count($repetitions)) { - Log::debug('Delete existing repetitions and create new ones.'); + app('log')->debug('Delete existing repetitions and create new ones.'); $this->deleteRepetitions($recurrence); $this->createRepetitions($recurrence, $repetitions); return; } // loop all and try to match them: - Log::debug('Loop and find'); + app('log')->debug('Loop and find'); foreach ($repetitions as $current) { - $match = $this->matchRepetition($recurrence, $current); + $match = $this->matchRepetition($recurrence, $current); if (null === $match) { throw new FireflyException('Cannot match recurring repetition to existing repetition. Not sure what to do. Break.'); } @@ -169,88 +153,76 @@ class RecurrenceUpdateService ]; foreach ($fields as $field => $column) { if (array_key_exists($field, $current)) { - $match->$column = $current[$field]; + $match->{$column} = $current[$field]; $match->save(); } } } } - /** - * @param Recurrence $recurrence - * @param array $data - * - * @return RecurrenceRepetition|null - */ private function matchRepetition(Recurrence $recurrence, array $data): ?RecurrenceRepetition { $originalCount = $recurrence->recurrenceRepetitions()->count(); if (1 === $originalCount) { - Log::debug('Return the first one'); - /** @var RecurrenceRepetition|null */ + app('log')->debug('Return the first one'); + + // @var RecurrenceRepetition|null return $recurrence->recurrenceRepetitions()->first(); } // find it: - $fields = [ + $fields = [ 'id' => 'id', 'type' => 'repetition_type', 'moment' => 'repetition_moment', 'skip' => 'repetition_skip', 'weekend' => 'weekend', ]; - $query = $recurrence->recurrenceRepetitions(); + $query = $recurrence->recurrenceRepetitions(); foreach ($fields as $field => $column) { if (array_key_exists($field, $data)) { $query->where($column, $data[$field]); } } - /** @var RecurrenceRepetition|null */ + + // @var RecurrenceRepetition|null return $query->first(); } /** * TODO this method is very complex. * - * @param Recurrence $recurrence - * @param array $transactions - * * @throws FireflyException - * @throws JsonException */ private function updateTransactions(Recurrence $recurrence, array $transactions): void { - Log::debug('Now in updateTransactions()'); - $originalCount = $recurrence->recurrenceTransactions()->count(); - Log::debug(sprintf('Original count is %d', $originalCount)); + app('log')->debug('Now in updateTransactions()'); + $originalCount = $recurrence->recurrenceTransactions()->count(); + app('log')->debug(sprintf('Original count is %d', $originalCount)); if (0 === count($transactions)) { // won't drop transactions, rather avoid. - Log::warning('No transactions to update, too scared to continue!'); + app('log')->warning('No transactions to update, too scared to continue!'); + return; } $combinations = []; $originalTransactions = $recurrence->recurrenceTransactions()->get()->toArray(); - /** - * First, make sure to loop all existing transactions and match them to a counterpart in the submitted transactions array. - */ + // First, make sure to loop all existing transactions and match them to a counterpart in the submitted transactions array. foreach ($originalTransactions as $i => $originalTransaction) { foreach ($transactions as $ii => $submittedTransaction) { if (array_key_exists('id', $submittedTransaction) && (int)$originalTransaction['id'] === (int)$submittedTransaction['id']) { - Log::debug(sprintf('Match original transaction #%d with an entry in the submitted array.', $originalTransaction['id'])); + app('log')->debug(sprintf('Match original transaction #%d with an entry in the submitted array.', $originalTransaction['id'])); $combinations[] = [ 'original' => $originalTransaction, 'submitted' => $submittedTransaction, ]; - unset($originalTransactions[$i]); - unset($transactions[$ii]); + unset($originalTransactions[$i], $transactions[$ii]); } } } - /** - * If one left of both we can match those as well and presto. - */ + // If one left of both we can match those as well and presto. if (1 === count($originalTransactions) && 1 === count($transactions)) { - $first = array_shift($originalTransactions); - Log::debug(sprintf('One left of each, link them (ID is #%d)', $first['id'])); + $first = array_shift($originalTransactions); + app('log')->debug(sprintf('One left of each, link them (ID is #%d)', $first['id'])); $combinations[] = [ 'original' => $first, 'submitted' => array_shift($transactions), @@ -265,7 +237,7 @@ class RecurrenceUpdateService } // anything left in the original transactions array can be deleted. foreach ($originalTransactions as $original) { - Log::debug(sprintf('Original transaction #%d is unmatched, delete it!', $original['id'])); + app('log')->debug(sprintf('Original transaction #%d is unmatched, delete it!', $original['id'])); $this->deleteTransaction($recurrence, (int)$original['id']); } // anything left is new. @@ -273,45 +245,51 @@ class RecurrenceUpdateService } /** - * @param Recurrence $recurrence - * @param array $combination + * It's a complex method but nothing surprising. * - * @return void + * @SuppressWarnings(PHPMD.NPathComplexity) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function updateCombination(Recurrence $recurrence, array $combination): void { - $original = $combination['original']; - $submitted = $combination['submitted']; - /** @var RecurrenceTransaction $transaction */ - $transaction = $recurrence->recurrenceTransactions()->find($original['id']); - Log::debug(sprintf('Now in updateCombination(#%d)', $original['id'])); - + $original = $combination['original']; + $submitted = $combination['submitted']; $currencyFactory = app(TransactionCurrencyFactory::class); + /** @var RecurrenceTransaction $transaction */ + $transaction = $recurrence->recurrenceTransactions()->find($original['id']); + app('log')->debug(sprintf('Now in updateCombination(#%d)', $original['id'])); + // loop all and try to match them: $currency = null; $foreignCurrency = null; if (array_key_exists('currency_id', $submitted) || array_key_exists('currency_code', $submitted)) { - $currency = $currencyFactory->find($submitted['currency_id'] ?? null, $currency['currency_code'] ?? null); + $currency = $currencyFactory->find( + array_key_exists('currency_id', $submitted) ? (int)$submitted['currency_id'] : null, + array_key_exists('currency_code', $submitted) ? $submitted['currency_code'] : null + ); } if (null === $currency) { unset($submitted['currency_id'], $submitted['currency_code']); } if (null !== $currency) { - $submitted['currency_id'] = (int)$currency->id; + $submitted['currency_id'] = $currency->id; } if (array_key_exists('foreign_currency_id', $submitted) || array_key_exists('foreign_currency_code', $submitted)) { - $foreignCurrency = $currencyFactory->find($submitted['foreign_currency_id'] ?? null, $currency['foreign_currency_code'] ?? null); + $foreignCurrency = $currencyFactory->find( + array_key_exists('foreign_currency_id', $submitted) ? (int)$submitted['foreign_currency_id'] : null, + array_key_exists('foreign_currency_code', $submitted) ? $submitted['foreign_currency_code'] : null + ); } if (null === $foreignCurrency) { unset($submitted['foreign_currency_id'], $currency['foreign_currency_code']); } if (null !== $foreignCurrency) { - $submitted['foreign_currency_id'] = (int)$foreignCurrency->id; + $submitted['foreign_currency_id'] = $foreignCurrency->id; } // update fields that are part of the recurring transaction itself. - $fields = [ + $fields = [ 'source_id' => 'source_id', 'destination_id' => 'destination_id', 'amount' => 'amount', @@ -322,7 +300,7 @@ class RecurrenceUpdateService ]; foreach ($fields as $field => $column) { if (array_key_exists($field, $submitted)) { - $transaction->$column = $submitted[$field]; + $transaction->{$column} = $submitted[$field]; $transaction->save(); } } @@ -336,13 +314,13 @@ class RecurrenceUpdateService // reset category if name is set but empty: // can be removed when v1 is retired. if (array_key_exists('category_name', $submitted) && '' === (string)$submitted['category_name']) { - Log::debug('Category name is submitted but is empty. Set category to be empty.'); + app('log')->debug('Category name is submitted but is empty. Set category to be empty.'); $submitted['category_name'] = null; $submitted['category_id'] = 0; } if (array_key_exists('category_id', $submitted)) { - Log::debug(sprintf('Category ID is submitted, set category to be %d.', (int)$submitted['category_id'])); + app('log')->debug(sprintf('Category ID is submitted, set category to be %d.', (int)$submitted['category_id'])); $this->setCategory($transaction, (int)$submitted['category_id']); } @@ -354,15 +332,9 @@ class RecurrenceUpdateService } } - /** - * @param Recurrence $recurrence - * @param int $transactionId - * - * @return void - */ private function deleteTransaction(Recurrence $recurrence, int $transactionId): void { - Log::debug(sprintf('Will delete transaction #%d in recurrence #%d.', $transactionId, $recurrence->id)); + app('log')->debug(sprintf('Will delete transaction #%d in recurrence #%d.', $transactionId, $recurrence->id)); $recurrence->recurrenceTransactions()->where('id', $transactionId)->delete(); } } diff --git a/app/Services/Password/PwndVerifierV2.php b/app/Services/Password/PwndVerifierV2.php index 76d7bf1a2f..79067b27f3 100644 --- a/app/Services/Password/PwndVerifierV2.php +++ b/app/Services/Password/PwndVerifierV2.php @@ -26,21 +26,14 @@ namespace FireflyIII\Services\Password; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Exception\RequestException; -use Illuminate\Support\Facades\Log; /** * Class PwndVerifierV2. - * - */ class PwndVerifierV2 implements Verifier { /** * Verify the given password against (some) service. - * - * @param string $password - * - * @return bool */ public function validPassword(string $password): bool { @@ -57,28 +50,28 @@ class PwndVerifierV2 implements Verifier 'timeout' => 3.1415, ]; - Log::debug(sprintf('hash prefix is %s', $prefix)); - Log::debug(sprintf('rest is %s', $rest)); + app('log')->debug(sprintf('hash prefix is %s', $prefix)); + app('log')->debug(sprintf('rest is %s', $rest)); try { $client = new Client(); $res = $client->request('GET', $url, $opt); - } catch (GuzzleException | RequestException $e) { - Log::error(sprintf('Could not verify password security: %s', $e->getMessage())); + } catch (GuzzleException|RequestException $e) { + app('log')->error(sprintf('Could not verify password security: %s', $e->getMessage())); return true; } - Log::debug(sprintf('Status code returned is %d', $res->getStatusCode())); + app('log')->debug(sprintf('Status code returned is %d', $res->getStatusCode())); if (404 === $res->getStatusCode()) { return true; } $strpos = stripos($res->getBody()->getContents(), $rest); if (false === $strpos) { - Log::debug(sprintf('%s was not found in result body. Return true.', $rest)); + app('log')->debug(sprintf('%s was not found in result body. Return true.', $rest)); return true; } - Log::debug(sprintf('Found %s, return FALSE.', $rest)); + app('log')->debug(sprintf('Found %s, return FALSE.', $rest)); return false; } diff --git a/app/Services/Password/Verifier.php b/app/Services/Password/Verifier.php index 372771e484..705053bbfb 100644 --- a/app/Services/Password/Verifier.php +++ b/app/Services/Password/Verifier.php @@ -30,10 +30,6 @@ interface Verifier { /** * Verify the given password against (some) service. - * - * @param string $password - * - * @return bool */ public function validPassword(string $password): bool; } diff --git a/app/Services/Webhook/StandardWebhookSender.php b/app/Services/Webhook/StandardWebhookSender.php index 0d4bff7069..1f667b9f23 100644 --- a/app/Services/Webhook/StandardWebhookSender.php +++ b/app/Services/Webhook/StandardWebhookSender.php @@ -29,9 +29,8 @@ use FireflyIII\Models\WebhookAttempt; use FireflyIII\Models\WebhookMessage; use GuzzleHttp\Client; use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Exception\RequestException; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Class StandardWebhookSender @@ -41,16 +40,15 @@ class StandardWebhookSender implements WebhookSenderInterface private WebhookMessage $message; private int $version = 1; - /** - * @inheritDoc - */ public function getVersion(): int { return $this->version; } /** - * @inheritDoc + * @throws GuzzleException + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function send(): void { @@ -59,16 +57,17 @@ class StandardWebhookSender implements WebhookSenderInterface $signatureGenerator = app(SignatureGeneratorInterface::class); $this->message->sent = true; $this->message->save(); + try { $signature = $signatureGenerator->generate($this->message); } catch (FireflyException $e) { - Log::error('Did not send message because of a Firefly III Exception.'); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); - $attempt = new WebhookAttempt(); + app('log')->error('Did not send message because of a Firefly III Exception.'); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + $attempt = new WebhookAttempt(); $attempt->webhookMessage()->associate($this->message); - $attempt->status_code = 0; - $attempt->logs = sprintf('Exception: %s', $e->getMessage()); + $attempt->status_code = 0; + $attempt->logs = sprintf('Exception: %s', $e->getMessage()); $attempt->save(); $this->message->errored = true; $this->message->sent = false; @@ -77,18 +76,18 @@ class StandardWebhookSender implements WebhookSenderInterface return; } - Log::debug(sprintf('Trying to send webhook message #%d', $this->message->id)); + app('log')->debug(sprintf('Trying to send webhook message #%d', $this->message->id)); try { $json = json_encode($this->message->message, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { - Log::error('Did not send message because of a JSON error.'); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); - $attempt = new WebhookAttempt(); + } catch (\JsonException $e) { + app('log')->error('Did not send message because of a JSON error.'); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); + $attempt = new WebhookAttempt(); $attempt->webhookMessage()->associate($this->message); - $attempt->status_code = 0; - $attempt->logs = sprintf('Json error: %s', $e->getMessage()); + $attempt->status_code = 0; + $attempt->logs = sprintf('Json error: %s', $e->getMessage()); $attempt->save(); $this->message->errored = true; $this->message->sent = false; @@ -96,7 +95,7 @@ class StandardWebhookSender implements WebhookSenderInterface return; } - $options = [ + $options = [ 'body' => $json, 'headers' => [ 'Content-Type' => 'application/json', @@ -107,31 +106,31 @@ class StandardWebhookSender implements WebhookSenderInterface 'timeout' => 10, ], ]; - $client = new Client(); + $client = new Client(); + try { $res = $client->request('POST', $this->message->webhook->url, $options); - } catch (RequestException | ConnectException $e) { - Log::error('The webhook could NOT be submitted but Firefly III caught the error below.'); - Log::error($e->getMessage()); - Log::error($e->getTraceAsString()); + } catch (ConnectException|RequestException $e) { + app('log')->error('The webhook could NOT be submitted but Firefly III caught the error below.'); + app('log')->error($e->getMessage()); + app('log')->error($e->getTraceAsString()); - - $logs = sprintf("%s\n%s", $e->getMessage(), $e->getTraceAsString()); + $logs = sprintf("%s\n%s", $e->getMessage(), $e->getTraceAsString()); $this->message->errored = true; $this->message->sent = false; $this->message->save(); - $attempt = new WebhookAttempt(); + $attempt = new WebhookAttempt(); $attempt->webhookMessage()->associate($this->message); - $attempt->status_code = 0; + $attempt->status_code = 0; if (method_exists($e, 'hasResponse') && method_exists($e, 'getResponse')) { $attempt->status_code = $e->hasResponse() ? $e->getResponse()->getStatusCode() : 0; - Log::error(sprintf('The status code of the error response is: %d', $attempt->status_code)); - $body = (string)($e->hasResponse() ? $e->getResponse()->getBody() : ''); - Log::error(sprintf('The body of the error response is: %s', $body)); + app('log')->error(sprintf('The status code of the error response is: %d', $attempt->status_code)); + $body = (string)($e->hasResponse() ? $e->getResponse()->getBody() : ''); + app('log')->error(sprintf('The body of the error response is: %s', $body)); } - $attempt->logs = $logs; + $attempt->logs = $logs; $attempt->save(); return; @@ -139,14 +138,11 @@ class StandardWebhookSender implements WebhookSenderInterface $this->message->sent = true; $this->message->save(); - Log::debug(sprintf('Webhook message #%d was sent. Status code %d', $this->message->id, $res->getStatusCode())); - Log::debug(sprintf('Webhook request body size: %d bytes', strlen($json))); - Log::debug(sprintf('Response body: %s', $res->getBody())); + app('log')->debug(sprintf('Webhook message #%d was sent. Status code %d', $this->message->id, $res->getStatusCode())); + app('log')->debug(sprintf('Webhook request body size: %d bytes', strlen($json))); + app('log')->debug(sprintf('Response body: %s', $res->getBody())); } - /** - * @inheritDoc - */ public function setMessage(WebhookMessage $message): void { $this->message = $message; diff --git a/app/Services/Webhook/WebhookSenderInterface.php b/app/Services/Webhook/WebhookSenderInterface.php index 6b827fa9d0..67c7d569be 100644 --- a/app/Services/Webhook/WebhookSenderInterface.php +++ b/app/Services/Webhook/WebhookSenderInterface.php @@ -30,18 +30,9 @@ use FireflyIII\Models\WebhookMessage; */ interface WebhookSenderInterface { - /** - * @return int - */ public function getVersion(): int; - /** - * - */ public function send(): void; - /** - * @param WebhookMessage $message - */ public function setMessage(WebhookMessage $message): void; } diff --git a/app/Support/Amount.php b/app/Support/Amount.php index fdad00c33d..3a58e52b0d 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -23,20 +23,14 @@ declare(strict_types=1); namespace FireflyIII\Support; -use Crypt; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Models\UserGroup; use FireflyIII\User; -use Illuminate\Contracts\Encryption\DecryptException; use Illuminate\Support\Collection; -use NumberFormatter; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class Amount. - * - */ class Amount { @@ -44,42 +38,32 @@ class Amount * This method will properly format the given number, in color or "black and white", * as a currency, given two things: the currency required and the current locale. * - * @param TransactionCurrency $format - * @param string $amount - * @param bool $coloured - * - * @return string * @throws FireflyException */ public function formatAnything(TransactionCurrency $format, string $amount, bool $coloured = null): string { - return $this->formatFlat($format->symbol, (int)$format->decimal_places, $amount, $coloured); + return $this->formatFlat($format->symbol, $format->decimal_places, $amount, $coloured); } /** * This method will properly format the given number, in color or "black and white", * as a currency, given two things: the currency required and the current locale. * - * @param string $symbol - * @param int $decimalPlaces - * @param string $amount - * @param bool $coloured - * - * @return string - * * @throws FireflyException + * + * @SuppressWarnings(PHPMD.MissingImport) */ public function formatFlat(string $symbol, int $decimalPlaces, string $amount, bool $coloured = null): string { - $locale = app('steam')->getLocale(); - $rounded = app('steam')->bcround($amount, $decimalPlaces); - $coloured = $coloured ?? true; + $locale = app('steam')->getLocale(); + $rounded = app('steam')->bcround($amount, $decimalPlaces); + $coloured ??= true; - $fmt = new NumberFormatter($locale, NumberFormatter::CURRENCY); - $fmt->setSymbol(NumberFormatter::CURRENCY_SYMBOL, $symbol); - $fmt->setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, $decimalPlaces); - $fmt->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, $decimalPlaces); - $result = $fmt->format((float)$rounded); // intentional float + $fmt = new \NumberFormatter($locale, \NumberFormatter::CURRENCY); + $fmt->setSymbol(\NumberFormatter::CURRENCY_SYMBOL, $symbol); + $fmt->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, $decimalPlaces); + $fmt->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, $decimalPlaces); + $result = (string)$fmt->format((float)$rounded); // intentional float if (true === $coloured) { if (1 === bccomp($rounded, '0')) { @@ -95,106 +79,57 @@ class Amount return $result; } - /** - * @return Collection - */ public function getAllCurrencies(): Collection { return TransactionCurrency::orderBy('code', 'ASC')->get(); } - /** - * @return Collection - */ public function getCurrencies(): Collection { - return TransactionCurrency::where('enabled', true)->orderBy('code', 'ASC')->get(); + /** @var User $user */ + $user = auth()->user(); + + return $user->currencies()->orderBy('code', 'ASC')->get(); } - /** - * @return string - * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ - public function getCurrencyCode(): string - { - $cache = new CacheProperties(); - $cache->addProperty('getCurrencyCode'); - if ($cache->has()) { - return $cache->get(); - } - $currencyPreference = app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR')); - - $currency = TransactionCurrency::where('code', $currencyPreference->data)->first(); - if ($currency) { - $cache->store($currency->code); - - return $currency->code; - } - $cache->store(config('firefly.default_currency', 'EUR')); - - return (string)config('firefly.default_currency', 'EUR'); - } - - /** - * @return TransactionCurrency - * @throws FireflyException - */ public function getDefaultCurrency(): TransactionCurrency { /** @var User $user */ $user = auth()->user(); - return $this->getDefaultCurrencyByUser($user); + return $this->getDefaultCurrencyByUserGroup($user->userGroup); } - /** - * @param User $user - * - * @return TransactionCurrency - * @throws FireflyException - */ - public function getDefaultCurrencyByUser(User $user): TransactionCurrency + public function getDefaultCurrencyByUserGroup(UserGroup $userGroup): TransactionCurrency { - $cache = new CacheProperties(); - $cache->addProperty('getDefaultCurrency'); - $cache->addProperty($user->id); + $cache = new CacheProperties(); + $cache->addProperty('getDefaultCurrencyByGroup'); + $cache->addProperty($userGroup->id); if ($cache->has()) { return $cache->get(); } - $currencyPreference = app('preferences')->getForUser($user, 'currencyPreference', config('firefly.default_currency', 'EUR')); - $currencyPrefStr = $currencyPreference ? $currencyPreference->data : 'EUR'; - - // at this point the currency preference could be encrypted, if coming from an old version. - $currencyCode = $this->tryDecrypt((string)$currencyPrefStr); - - // could still be json encoded: - /** @var TransactionCurrency|null $currency */ - $currency = TransactionCurrency::where('code', $currencyCode)->first(); - if (null === $currency) { - // get EUR - $currency = TransactionCurrency::where('code', 'EUR')->first(); + $default = $userGroup->currencies()->where('group_default', true)->first(); + if (null === $default) { + $default = $this->getSystemCurrency(); + // could be the user group has no default right now. + $userGroup->currencies()->sync([$default->id => ['group_default' => true]]); } - $cache->store($currency); + $cache->store($default); - return $currency; + return $default; + } + + public function getSystemCurrency(): TransactionCurrency + { + return TransactionCurrency::where('code', 'EUR')->first(); } /** - * @param string $value - * - * @return string + * @deprecated use getDefaultCurrencyByUserGroup instead */ - private function tryDecrypt(string $value): string + public function getDefaultCurrencyByUser(User $user): TransactionCurrency { - try { - $value = Crypt::decrypt($value); // verified - } catch (DecryptException $e) { - // @ignoreException - } - - return $value; + return $this->getDefaultCurrencyByUserGroup($user->userGroup); } /** @@ -203,7 +138,6 @@ class Amount * * Used only in one place. * - * @return array * @throws FireflyException */ public function getJsConfig(): array @@ -224,39 +158,34 @@ class Amount } /** - * @return array * @throws FireflyException + * + * @SuppressWarnings(PHPMD.MissingImport) */ private function getLocaleInfo(): array { // get config from preference, not from translation: - $locale = app('steam')->getLocale(); - $array = app('steam')->getLocaleArray($locale); + $locale = app('steam')->getLocale(); + $array = app('steam')->getLocaleArray($locale); setlocale(LC_MONETARY, $array); - $info = localeconv(); + $info = localeconv(); // correct variables - $info['n_cs_precedes'] = $this->getLocaleField($info, 'n_cs_precedes'); - $info['p_cs_precedes'] = $this->getLocaleField($info, 'p_cs_precedes'); + $info['n_cs_precedes'] = $this->getLocaleField($info, 'n_cs_precedes'); + $info['p_cs_precedes'] = $this->getLocaleField($info, 'p_cs_precedes'); - $info['n_sep_by_space'] = $this->getLocaleField($info, 'n_sep_by_space'); - $info['p_sep_by_space'] = $this->getLocaleField($info, 'p_sep_by_space'); + $info['n_sep_by_space'] = $this->getLocaleField($info, 'n_sep_by_space'); + $info['p_sep_by_space'] = $this->getLocaleField($info, 'p_sep_by_space'); - $fmt = new NumberFormatter($locale, NumberFormatter::CURRENCY); + $fmt = new \NumberFormatter($locale, \NumberFormatter::CURRENCY); - $info['mon_decimal_point'] = $fmt->getSymbol(NumberFormatter::MONETARY_SEPARATOR_SYMBOL); - $info['mon_thousands_sep'] = $fmt->getSymbol(NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL); + $info['mon_decimal_point'] = $fmt->getSymbol(\NumberFormatter::MONETARY_SEPARATOR_SYMBOL); + $info['mon_thousands_sep'] = $fmt->getSymbol(\NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL); return $info; } - /** - * @param array $info - * @param string $field - * - * @return bool - */ private function getLocaleField(array $info, string $field): bool { return (is_bool($info[$field]) && true === $info[$field]) @@ -268,19 +197,11 @@ class Amount * int $signPosn = $localeconv['n_sign_posn'] * string $sign = $localeconv['negative_sign'] * bool $csPrecedes = $localeconv['n_cs_precedes']. - * - * @param bool $sepBySpace - * @param int $signPosn - * @param string $sign - * @param bool $csPrecedes - * - * @return string - * */ public static function getAmountJsConfig(bool $sepBySpace, int $signPosn, string $sign, bool $csPrecedes): string { // negative first: - $space = ' '; + $space = ' '; // require space between symbol and amount? if (false === $sepBySpace) { @@ -289,11 +210,11 @@ class Amount // there are five possible positions for the "+" or "-" sign (if it is even used) // pos_a and pos_e could be the ( and ) symbol. - $posA = ''; // before everything - $posB = ''; // before currency symbol - $posC = ''; // after currency symbol - $posD = ''; // before amount - $posE = ''; // after everything + $posA = ''; // before everything + $posB = ''; // before currency symbol + $posC = ''; // after currency symbol + $posD = ''; // before amount + $posE = ''; // after everything // format would be (currency before amount) // AB%sC_D%vE @@ -308,40 +229,40 @@ class Amount // ( and ) around the whole thing $posA = '('; $posE = ')'; + break; + case 1: // The sign string precedes the quantity and currency_symbol $posA = $sign; + break; + case 2: // The sign string succeeds the quantity and currency_symbol $posE = $sign; + break; + case 3: // The sign string immediately precedes the currency_symbol $posB = $sign; + break; + case 4: // The sign string immediately succeeds the currency_symbol $posC = $sign; } // default is amount before currency - $format = $posA . $posD . '%v' . $space . $posB . '%s' . $posC . $posE; + $format = $posA.$posD.'%v'.$space.$posB.'%s'.$posC.$posE; if ($csPrecedes) { // alternative is currency before amount - $format = $posA . $posB . '%s' . $posC . $space . $posD . '%v' . $posE; + $format = $posA.$posB.'%s'.$posC.$space.$posD.'%v'.$posE; } return $format; } - - /** - * @return TransactionCurrency - */ - public function getSystemCurrency(): TransactionCurrency - { - return TransactionCurrency::where('code', 'EUR')->first(); - } } diff --git a/app/Support/Authentication/RemoteUserGuard.php b/app/Support/Authentication/RemoteUserGuard.php index c5ae8198d1..fa3ed47409 100644 --- a/app/Support/Authentication/RemoteUserGuard.php +++ b/app/Support/Authentication/RemoteUserGuard.php @@ -31,70 +31,59 @@ use Illuminate\Contracts\Auth\Guard; use Illuminate\Contracts\Auth\UserProvider; use Illuminate\Contracts\Foundation\Application; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class RemoteUserGuard */ class RemoteUserGuard implements Guard { - protected Application $application; - protected $provider; - protected $user; + protected Application $application; + protected UserProvider $provider; + protected ?User $user; /** * Create a new authentication guard. - * - * @param UserProvider $provider - * @param Application $app - * - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function __construct(UserProvider $provider, Application $app) { - /** @var Request $request */ - $request = $app->get('request'); - Log::debug(sprintf('Created RemoteUserGuard for %s "%s"', $request?->getMethod(), $request?->getRequestUri())); + /** @var null|Request $request */ + $request = $app->get('request'); + app('log')->debug(sprintf('Created RemoteUserGuard for %s "%s"', $request?->getMethod(), $request?->getRequestUri())); $this->application = $app; $this->provider = $provider; $this->user = null; } - /** - * - */ public function authenticate(): void { - Log::debug(sprintf('Now at %s', __METHOD__)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); if (null !== $this->user) { - Log::debug(sprintf('%s is found: #%d, "%s".', get_class($this->user), $this->user->id, $this->user->email)); + app('log')->debug(sprintf('%s is found: #%d, "%s".', get_class($this->user), $this->user->id, $this->user->email)); return; } // Get the user identifier from $_SERVER or apache filtered headers - $header = config('auth.guard_header', 'REMOTE_USER'); - $userID = request()->server($header) ?? null; + $header = config('auth.guard_header', 'REMOTE_USER'); + $userID = request()->server($header) ?? null; if (function_exists('apache_request_headers')) { - Log::debug('Use apache_request_headers to find user ID.'); + app('log')->debug('Use apache_request_headers to find user ID.'); $userID = request()->server($header) ?? apache_request_headers()[$header] ?? null; } if (null === $userID || '' === $userID) { - Log::error(sprintf('No user in header "%s".', $header)); + app('log')->error(sprintf('No user in header "%s".', $header)); + throw new FireflyException('The guard header was unexpectedly empty. See the logs.'); } - Log::debug(sprintf('User ID found in header is "%s"', $userID)); + app('log')->debug(sprintf('User ID found in header is "%s"', $userID)); /** @var User $retrievedUser */ $retrievedUser = $this->provider->retrieveById($userID); // store email address if present in header and not already set. - $header = config('auth.guard_email'); + $header = config('auth.guard_email'); if (null !== $header) { $emailAddress = (string)(request()->server($header) ?? apache_request_headers()[$header] ?? null); @@ -109,85 +98,81 @@ class RemoteUserGuard implements Guard } } - Log::debug(sprintf('Result of getting user from provider: %s', $retrievedUser->email)); - $this->user = $retrievedUser; + app('log')->debug(sprintf('Result of getting user from provider: %s', $retrievedUser->email)); + $this->user = $retrievedUser; } - /** - * @inheritDoc - */ public function guest(): bool { - Log::debug(sprintf('Now at %s', __METHOD__)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); + return !$this->check(); } - /** - * @inheritDoc - */ public function check(): bool { - Log::debug(sprintf('Now at %s', __METHOD__)); - return !is_null($this->user()); + app('log')->debug(sprintf('Now at %s', __METHOD__)); + + return null !== $this->user(); } - /** - * @inheritDoc - */ public function user(): ?User { - Log::debug(sprintf('Now at %s', __METHOD__)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); $user = $this->user; if (null === $user) { - Log::debug('User is NULL'); + app('log')->debug('User is NULL'); + return null; } return $user; } - /** - * @inheritDoc - */ public function hasUser(): bool { - Log::debug(sprintf('Now at %s', __METHOD__)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); + throw new FireflyException('Did not implement RemoteUserGuard::hasUser()'); } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.ShortMethodName) */ - public function id(): ?User + public function id(): null|int|string { - Log::debug(sprintf('Now at %s', __METHOD__)); - return $this->user; + app('log')->debug(sprintf('Now at %s', __METHOD__)); + + return $this->user?->id; + } + + public function setUser(null|Authenticatable|User $user): void + { + app('log')->debug(sprintf('Now at %s', __METHOD__)); + if ($user instanceof User) { + $this->user = $user; + + return; + } + app('log')->error(sprintf('Did not set user at %s', __METHOD__)); } /** - * @inheritDoc + * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function setUser(Authenticatable $user) + public function validate(array $credentials = []): bool { - Log::debug(sprintf('Now at %s', __METHOD__)); - $this->user = $user; - } + app('log')->debug(sprintf('Now at %s', __METHOD__)); - /** - * @inheritDoc - */ - public function validate(array $credentials = []) - { - Log::debug(sprintf('Now at %s', __METHOD__)); throw new FireflyException('Did not implement RemoteUserGuard::validate()'); } - /** - * @return bool - */ public function viaRemember(): bool { - Log::debug(sprintf('Now at %s', __METHOD__)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); + return false; } } diff --git a/app/Support/Authentication/RemoteUserProvider.php b/app/Support/Authentication/RemoteUserProvider.php index 73499a7679..c507e9478b 100644 --- a/app/Support/Authentication/RemoteUserProvider.php +++ b/app/Support/Authentication/RemoteUserProvider.php @@ -30,8 +30,6 @@ use FireflyIII\Models\Role; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\UserProvider; -use Illuminate\Support\Facades\Log; -use Str; /** * Class RemoteUserProvider @@ -39,29 +37,34 @@ use Str; class RemoteUserProvider implements UserProvider { /** - * @inheritDoc + * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function retrieveByCredentials(array $credentials) + public function retrieveByCredentials(array $credentials): ?Authenticatable { - Log::debug(sprintf('Now at %s', __METHOD__)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); + throw new FireflyException(sprintf('Did not implement %s', __METHOD__)); } /** - * @inheritDoc + * @param mixed $identifier + * + * @throws FireflyException */ public function retrieveById($identifier): User { - Log::debug(sprintf('Now at %s(%s)', __METHOD__, $identifier)); + app('log')->debug(sprintf('Now at %s(%s)', __METHOD__, $identifier)); $user = User::where('email', $identifier)->first(); if (null === $user) { - Log::debug(sprintf('User with email "%s" not found. Will be created.', $identifier)); + app('log')->debug(sprintf('User with email "%s" not found. Will be created.', $identifier)); $user = User::create( [ 'blocked' => false, 'blocked_code' => null, 'email' => $identifier, - 'password' => bcrypt(Str::random(64)), + 'password' => bcrypt(\Str::random(64)), ] ); // if this is the first user, give them admin as well. @@ -72,35 +75,49 @@ class RemoteUserProvider implements UserProvider // make sure the user gets an administration as well. CreateGroupMemberships::createGroupMembership($user); } - Log::debug(sprintf('Going to return user #%d (%s)', $user->id, $user->email)); + app('log')->debug(sprintf('Going to return user #%d (%s)', $user->id, $user->email)); return $user; } /** - * @inheritDoc + * @param mixed $identifier + * @param mixed $token + * + * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function retrieveByToken($identifier, $token) + public function retrieveByToken($identifier, $token): ?Authenticatable { - Log::debug(sprintf('Now at %s', __METHOD__)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); + throw new FireflyException(sprintf('A) Did not implement %s', __METHOD__)); } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * + * @param mixed $token + * + * @throws FireflyException */ - public function updateRememberToken(Authenticatable $user, $token) + public function updateRememberToken(Authenticatable $user, $token): void { - Log::debug(sprintf('Now at %s', __METHOD__)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); + throw new FireflyException(sprintf('B) Did not implement %s', __METHOD__)); } /** - * @inheritDoc + * @throws FireflyException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function validateCredentials(Authenticatable $user, array $credentials) + public function validateCredentials(Authenticatable $user, array $credentials): bool { - Log::debug(sprintf('Now at %s', __METHOD__)); + app('log')->debug(sprintf('Now at %s', __METHOD__)); + throw new FireflyException(sprintf('C) Did not implement %s', __METHOD__)); } } diff --git a/app/Support/Binder/AccountList.php b/app/Support/Binder/AccountList.php index 728f77f402..79c8d65575 100644 --- a/app/Support/Binder/AccountList.php +++ b/app/Support/Binder/AccountList.php @@ -26,7 +26,6 @@ namespace FireflyIII\Support\Binder; use FireflyIII\Models\AccountType; use Illuminate\Routing\Route; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** @@ -35,12 +34,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class AccountList implements BinderInterface { /** - * @param string $value - * @param Route $route - * - * @return Collection * @throws NotFoundHttpException - * */ public static function routeBinder(string $value, Route $route): Collection { @@ -49,27 +43,31 @@ class AccountList implements BinderInterface if ('allAssetAccounts' === $value) { /** @var Collection $collection */ $collection = auth()->user()->accounts() - ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') - ->whereIn('account_types.type', [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]) - ->orderBy('accounts.name', 'ASC') - ->get(['accounts.*']); + ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') + ->whereIn('account_types.type', [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]) + ->orderBy('accounts.name', 'ASC') + ->get(['accounts.*']) + ; } if ('allAssetAccounts' !== $value) { - $incoming = array_map('\intval', explode(',', $value)); - $list = array_merge(array_unique($incoming), [0]); + $incoming = array_map('\intval', explode(',', $value)); + $list = array_merge(array_unique($incoming), [0]); + /** @var Collection $collection */ $collection = auth()->user()->accounts() - ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') - ->whereIn('accounts.id', $list) - ->orderBy('accounts.name', 'ASC') - ->get(['accounts.*']); + ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') + ->whereIn('accounts.id', $list) + ->orderBy('accounts.name', 'ASC') + ->get(['accounts.*']) + ; } if ($collection->count() > 0) { return $collection; } } - Log::error(sprintf('Trying to show account list (%s), but user is not logged in or list is empty.', $route->uri)); + app('log')->error(sprintf('Trying to show account list (%s), but user is not logged in or list is empty.', $route->uri)); + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/BinderInterface.php b/app/Support/Binder/BinderInterface.php index 7a9c489268..345c357f7c 100644 --- a/app/Support/Binder/BinderInterface.php +++ b/app/Support/Binder/BinderInterface.php @@ -31,9 +31,6 @@ use Illuminate\Routing\Route; interface BinderInterface { /** - * @param string $value - * @param Route $route - * * @return mixed */ public static function routeBinder(string $value, Route $route); diff --git a/app/Support/Binder/BudgetList.php b/app/Support/Binder/BudgetList.php index 8545171385..6526ebd38a 100644 --- a/app/Support/Binder/BudgetList.php +++ b/app/Support/Binder/BudgetList.php @@ -34,37 +34,33 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class BudgetList implements BinderInterface { /** - * @param string $value - * @param Route $route - * - * @return Collection * @throws NotFoundHttpException - * */ public static function routeBinder(string $value, Route $route): Collection { if (auth()->check()) { if ('allBudgets' === $value) { return auth()->user()->budgets()->where('active', true) - ->orderBy('order', 'ASC') - ->orderBy('name', 'ASC') - ->get(); + ->orderBy('order', 'ASC') + ->orderBy('name', 'ASC') + ->get() + ; } - $list = array_unique(array_map('\intval', explode(',', $value))); + $list = array_unique(array_map('\intval', explode(',', $value))); - - if (0 === count($list)) { + if (0 === count($list)) { // @phpstan-ignore-line app('log')->warning('Budget list count is zero, return 404.'); + throw new NotFoundHttpException(); } - /** @var Collection $collection */ $collection = auth()->user()->budgets() - ->where('active', true) - ->whereIn('id', $list) - ->get(); + ->where('active', true) + ->whereIn('id', $list) + ->get() + ; // add empty budget if applicable. if (in_array(0, $list, true)) { @@ -76,6 +72,7 @@ class BudgetList implements BinderInterface } } app('log')->warning('BudgetList fallback to 404.'); + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/CLIToken.php b/app/Support/Binder/CLIToken.php index 207224fb3c..f965e505c8 100644 --- a/app/Support/Binder/CLIToken.php +++ b/app/Support/Binder/CLIToken.php @@ -26,7 +26,6 @@ namespace FireflyIII\Support\Binder; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\User\UserRepositoryInterface; use Illuminate\Routing\Route; -use Illuminate\Support\Facades\Log; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** @@ -35,10 +34,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class CLIToken implements BinderInterface { /** - * @param string $value - * @param Route $route - * * @return mixed + * * @throws FireflyException */ public static function routeBinder(string $value, Route $route) @@ -48,19 +45,20 @@ class CLIToken implements BinderInterface $users = $repository->all(); // check for static token - if ($value === config('firefly.static_cron_token') && 32 === strlen((string)config('firefly.static_cron_token'))) { + if ($value === config('firefly.static_cron_token') && 32 === strlen(config('firefly.static_cron_token'))) { return $value; } foreach ($users as $user) { $accessToken = app('preferences')->getForUser($user, 'access_token'); if (null !== $accessToken && $accessToken->data === $value) { - Log::info(sprintf('Recognized user #%d (%s) from his acccess token.', $user->id, $user->email)); + app('log')->info(sprintf('Recognized user #%d (%s) from his access token.', $user->id, $user->email)); return $value; } } - Log::error(sprintf('Recognized no users by access token "%s"', $value)); + app('log')->error(sprintf('Recognized no users by access token "%s"', $value)); + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/CategoryList.php b/app/Support/Binder/CategoryList.php index f140cc7607..1275481fa3 100644 --- a/app/Support/Binder/CategoryList.php +++ b/app/Support/Binder/CategoryList.php @@ -34,31 +34,28 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class CategoryList implements BinderInterface { /** - * @param string $value - * @param Route $route - * - * @return Collection * @throws NotFoundHttpException - * */ public static function routeBinder(string $value, Route $route): Collection { if (auth()->check()) { if ('allCategories' === $value) { return auth()->user()->categories() - ->orderBy('name', 'ASC') - ->get(); + ->orderBy('name', 'ASC') + ->get() + ; } - $list = array_unique(array_map('\intval', explode(',', $value))); - if (0 === count($list)) { + $list = array_unique(array_map('\intval', explode(',', $value))); + if (0 === count($list)) { // @phpstan-ignore-line throw new NotFoundHttpException(); } /** @var Collection $collection */ $collection = auth()->user()->categories() - ->whereIn('id', $list) - ->get(); + ->whereIn('id', $list) + ->get() + ; // add empty category if applicable. if (in_array(0, $list, true)) { @@ -69,6 +66,7 @@ class CategoryList implements BinderInterface return $collection; } } + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/CurrencyCode.php b/app/Support/Binder/CurrencyCode.php index 2f8c141fa9..cc5000ede6 100644 --- a/app/Support/Binder/CurrencyCode.php +++ b/app/Support/Binder/CurrencyCode.php @@ -33,10 +33,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class CurrencyCode implements BinderInterface { /** - * @param string $value - * @param Route $route - * - * @return TransactionCurrency * @throws NotFoundHttpException */ public static function routeBinder(string $value, Route $route): TransactionCurrency @@ -47,6 +43,7 @@ class CurrencyCode implements BinderInterface return $currency; } } + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/Date.php b/app/Support/Binder/Date.php index 8ba226fbb5..99c0ce4c17 100644 --- a/app/Support/Binder/Date.php +++ b/app/Support/Binder/Date.php @@ -25,9 +25,9 @@ namespace FireflyIII\Support\Binder; use Carbon\Carbon; use Carbon\Exceptions\InvalidDateException; +use Carbon\Exceptions\InvalidFormatException; use FireflyIII\Helpers\Fiscal\FiscalHelperInterface; use Illuminate\Routing\Route; -use Illuminate\Support\Facades\Log; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** @@ -36,10 +36,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class Date implements BinderInterface { /** - * @param string $value - * @param Route $route - * - * @return Carbon * @throws NotFoundHttpException */ public static function routeBinder(string $value, Route $route): Carbon @@ -47,16 +43,16 @@ class Date implements BinderInterface /** @var FiscalHelperInterface $fiscalHelper */ $fiscalHelper = app(FiscalHelperInterface::class); - $magicWords = [ - 'currentMonthStart' => today(config('app.timezone'))->startOfMonth(), - 'currentMonthEnd' => today(config('app.timezone'))->endOfMonth(), - 'currentYearStart' => today(config('app.timezone'))->startOfYear(), - 'currentYearEnd' => today(config('app.timezone'))->endOfYear(), + $magicWords = [ + 'currentMonthStart' => today(config('app.timezone'))->startOfMonth(), + 'currentMonthEnd' => today(config('app.timezone'))->endOfMonth(), + 'currentYearStart' => today(config('app.timezone'))->startOfYear(), + 'currentYearEnd' => today(config('app.timezone'))->endOfYear(), - 'previousMonthStart' => today(config('app.timezone'))->startOfMonth()->subDay()->startOfMonth(), - 'previousMonthEnd' => today(config('app.timezone'))->startOfMonth()->subDay()->endOfMonth(), - 'previousYearStart' => today(config('app.timezone'))->startOfYear()->subDay()->startOfYear(), - 'previousYearEnd' => today(config('app.timezone'))->startOfYear()->subDay()->endOfYear(), + 'previousMonthStart' => today(config('app.timezone'))->startOfMonth()->subDay()->startOfMonth(), + 'previousMonthEnd' => today(config('app.timezone'))->startOfMonth()->subDay()->endOfMonth(), + 'previousYearStart' => today(config('app.timezone'))->startOfYear()->subDay()->startOfYear(), + 'previousYearEnd' => today(config('app.timezone'))->startOfYear()->subDay()->endOfYear(), 'currentFiscalYearStart' => $fiscalHelper->startOfFiscalYear(today(config('app.timezone'))), 'currentFiscalYearEnd' => $fiscalHelper->endOfFiscalYear(today(config('app.timezone'))), @@ -65,17 +61,18 @@ class Date implements BinderInterface ]; if (array_key_exists($value, $magicWords)) { $return = $magicWords[$value]; - Log::debug(sprintf('User requests "%s", so will return "%s"', $value, $return)); + app('log')->debug(sprintf('User requests "%s", so will return "%s"', $value, $return)); return $return; } try { $result = new Carbon($value); - } catch (InvalidDateException $e) { + } catch (InvalidDateException|InvalidFormatException $e) { // @phpstan-ignore-line $message = sprintf('Could not parse date "%s" for user #%d: %s', $value, auth()->user()->id, $e->getMessage()); - Log::error($message); - throw new NotFoundHttpException($message, $e); + app('log')->error($message); + + throw new NotFoundHttpException('Could not parse value', $e); } return $result; diff --git a/app/Support/Binder/DynamicConfigKey.php b/app/Support/Binder/DynamicConfigKey.php index e3fb1c608d..d277fc52f1 100644 --- a/app/Support/Binder/DynamicConfigKey.php +++ b/app/Support/Binder/DynamicConfigKey.php @@ -40,17 +40,16 @@ class DynamicConfigKey ]; /** - * @param string $value - * @param Route $route - * - * @return string * @throws NotFoundHttpException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public static function routeBinder(string $value, Route $route): string { if (in_array($value, self::$accepted, true)) { return $value; } + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/EitherConfigKey.php b/app/Support/Binder/EitherConfigKey.php index f41db15cbf..719f98d481 100644 --- a/app/Support/Binder/EitherConfigKey.php +++ b/app/Support/Binder/EitherConfigKey.php @@ -57,17 +57,16 @@ class EitherConfigKey ]; /** - * @param string $value - * @param Route $route - * - * @return string * @throws NotFoundHttpException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public static function routeBinder(string $value, Route $route): string { if (in_array($value, self::$static, true) || in_array($value, DynamicConfigKey::$accepted, true)) { return $value; } + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/JournalList.php b/app/Support/Binder/JournalList.php index a65f91df28..95b067a140 100644 --- a/app/Support/Binder/JournalList.php +++ b/app/Support/Binder/JournalList.php @@ -34,17 +34,12 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class JournalList implements BinderInterface { /** - * @param string $value - * @param Route $route - * - * @return array - * * @throws NotFoundHttpException */ public static function routeBinder(string $value, Route $route): array { if (auth()->check()) { - $list = self::parseList($value); + $list = self::parseList($value); // get the journals by using the collector. /** @var GroupCollectorInterface $collector */ @@ -52,25 +47,21 @@ class JournalList implements BinderInterface $collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER, TransactionType::RECONCILIATION]); $collector->withCategoryInformation()->withBudgetInformation()->withTagInformation()->withAccountInformation(); $collector->setJournalIds($list); - $result = $collector->getExtractedJournals(); + $result = $collector->getExtractedJournals(); if (0 === count($result)) { throw new NotFoundHttpException(); } return $result; } + throw new NotFoundHttpException(); } - /** - * @param string $value - * - * @return array - */ protected static function parseList(string $value): array { $list = array_unique(array_map('\intval', explode(',', $value))); - if (0 === count($list)) { + if (0 === count($list)) { // @phpstan-ignore-line throw new NotFoundHttpException(); } diff --git a/app/Support/Binder/TagList.php b/app/Support/Binder/TagList.php index 4d1e92904e..d87c8c69b9 100644 --- a/app/Support/Binder/TagList.php +++ b/app/Support/Binder/TagList.php @@ -36,10 +36,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class TagList implements BinderInterface { /** - * @param string $value - * @param Route $route - * - * @return Collection * @throws NotFoundHttpException */ public static function routeBinder(string $value, Route $route): Collection @@ -47,29 +43,34 @@ class TagList implements BinderInterface if (auth()->check()) { if ('allTags' === $value) { return auth()->user()->tags() - ->orderBy('tag', 'ASC') - ->get(); + ->orderBy('tag', 'ASC') + ->get() + ; } - $list = array_unique(array_map('\strtolower', explode(',', $value))); - Log::debug('List of tags is', $list); + $list = array_unique(array_map('\strtolower', explode(',', $value))); + app('log')->debug('List of tags is', $list); + + if (0 === count($list)) { // @phpstan-ignore-line + app('log')->error('Tag list is empty.'); - if (0 === count($list)) { - Log::error('Tag list is empty.'); throw new NotFoundHttpException(); } - /** @var TagRepositoryInterface $repository */ $repository = app(TagRepositoryInterface::class); $repository->setUser(auth()->user()); - $allTags = $repository->get(); + $allTags = $repository->get(); $collection = $allTags->filter( static function (Tag $tag) use ($list) { if (in_array(strtolower($tag->tag), $list, true)) { + Log::debug(sprintf('TagList: (string) found tag #%d ("%s") in list.', $tag->id, $tag->tag)); + return true; } if (in_array((string)$tag->id, $list, true)) { + Log::debug(sprintf('TagList: (id) found tag #%d ("%s") in list.', $tag->id, $tag->tag)); + return true; } @@ -81,7 +82,8 @@ class TagList implements BinderInterface return $collection; } } - Log::error('TagList: user is not logged in.'); + app('log')->error('TagList: user is not logged in.'); + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/TagOrId.php b/app/Support/Binder/TagOrId.php index 8c79ec13a2..e742fb674d 100644 --- a/app/Support/Binder/TagOrId.php +++ b/app/Support/Binder/TagOrId.php @@ -26,7 +26,6 @@ namespace FireflyIII\Support\Binder; use FireflyIII\Models\Tag; use FireflyIII\Repositories\Tag\TagRepositoryInterface; use Illuminate\Routing\Route; -use Illuminate\Support\Facades\Log; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** @@ -34,12 +33,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; */ class TagOrId implements BinderInterface { - /** - * @param string $value - * @param Route $route - * - * @return Tag - */ public static function routeBinder(string $value, Route $route): Tag { if (auth()->check()) { @@ -47,17 +40,19 @@ class TagOrId implements BinderInterface $repository = app(TagRepositoryInterface::class); $repository->setUser(auth()->user()); - $result = $repository->findByTag($value); + $result = $repository->findByTag($value); if (null === $result) { $result = $repository->find((int)$value); } if (null !== $result) { return $result; } - Log::error('TagOrId: tag not found.'); + app('log')->error('TagOrId: tag not found.'); + throw new NotFoundHttpException(); } - Log::error('TagOrId: user is not logged in.'); + app('log')->error('TagOrId: user is not logged in.'); + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/UserGroupAccount.php b/app/Support/Binder/UserGroupAccount.php index b70d19183d..c395655e87 100644 --- a/app/Support/Binder/UserGroupAccount.php +++ b/app/Support/Binder/UserGroupAccount.php @@ -26,7 +26,6 @@ namespace FireflyIII\Support\Binder; use FireflyIII\Models\Account; use FireflyIII\User; use Illuminate\Routing\Route; -use Illuminate\Support\Collection; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** @@ -35,25 +34,22 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class UserGroupAccount implements BinderInterface { /** - * @param string $value - * @param Route $route - * - * @return Account * @throws NotFoundHttpException - * */ public static function routeBinder(string $value, Route $route): Account { if (auth()->check()) { /** @var User $user */ - $user = auth()->user(); - $currency = Account::where('id', (int)$value) - ->where('user_group_id', $user->user_group_id) - ->first(); - if (null !== $currency) { - return $currency; + $user = auth()->user(); + $account = Account::where('id', (int)$value) + ->where('user_group_id', $user->user_group_id) + ->first() + ; + if (null !== $account) { + return $account; } } + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/UserGroupBill.php b/app/Support/Binder/UserGroupBill.php index 09530c1230..bd2489965e 100644 --- a/app/Support/Binder/UserGroupBill.php +++ b/app/Support/Binder/UserGroupBill.php @@ -34,12 +34,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class UserGroupBill implements BinderInterface { /** - * @param string $value - * @param Route $route - * - * @return Bill * @throws NotFoundHttpException - * */ public static function routeBinder(string $value, Route $route): Bill { @@ -47,12 +42,14 @@ class UserGroupBill implements BinderInterface /** @var User $user */ $user = auth()->user(); $currency = Bill::where('id', (int)$value) - ->where('user_group_id', $user->user_group_id) - ->first(); + ->where('user_group_id', $user->user_group_id) + ->first() + ; if (null !== $currency) { return $currency; } } + throw new NotFoundHttpException(); } } diff --git a/app/Support/Binder/UserGroupTransaction.php b/app/Support/Binder/UserGroupTransaction.php new file mode 100644 index 0000000000..fbbf5c1f43 --- /dev/null +++ b/app/Support/Binder/UserGroupTransaction.php @@ -0,0 +1,52 @@ +. + */ +declare(strict_types=1); + +namespace FireflyIII\Support\Binder; + +use FireflyIII\Models\TransactionGroup; +use FireflyIII\User; +use Illuminate\Routing\Route; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; + +/** + * Class UserGroupTransaction. + */ +class UserGroupTransaction implements BinderInterface +{ + public static function routeBinder(string $value, Route $route): TransactionGroup + { + if (auth()->check()) { + /** @var User $user */ + $user = auth()->user(); + $group = TransactionGroup::where('id', (int)$value) + ->where('user_group_id', $user->user_group_id) + ->first() + ; + if (null !== $group) { + return $group; + } + } + + throw new NotFoundHttpException(); + } +} diff --git a/app/Support/CacheProperties.php b/app/Support/CacheProperties.php index 8156dc691a..dc1619bddf 100644 --- a/app/Support/CacheProperties.php +++ b/app/Support/CacheProperties.php @@ -23,23 +23,16 @@ declare(strict_types=1); namespace FireflyIII\Support; -use Cache; use Illuminate\Support\Collection; -use JsonException; /** * Class CacheProperties. - * - */ class CacheProperties { protected string $hash = ''; protected Collection $properties; - /** - * - */ public function __construct() { $this->properties = new Collection(); @@ -62,20 +55,14 @@ class CacheProperties */ public function get() { - return Cache::get($this->hash); + return \Cache::get($this->hash); } - /** - * @return string - */ public function getHash(): string { return $this->hash; } - /** - * @return bool - */ public function has(): bool { if ('testing' === config('app.env')) { @@ -83,18 +70,16 @@ class CacheProperties } $this->hash(); - return Cache::has($this->hash); + return \Cache::has($this->hash); } - /** - */ private function hash(): void { - $content = ''; + $content = ''; foreach ($this->properties as $property) { try { $content .= json_encode($property, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { + } catch (\JsonException $e) { // @ignoreException $content .= hash('sha256', (string)time()); } @@ -107,6 +92,6 @@ class CacheProperties */ public function store($data): void { - Cache::forever($this->hash, $data); + \Cache::forever($this->hash, $data); } } diff --git a/app/Support/Calendar/Calculator.php b/app/Support/Calendar/Calculator.php index b09ba58c59..c8fc629934 100644 --- a/app/Support/Calendar/Calculator.php +++ b/app/Support/Calendar/Calculator.php @@ -1,6 +1,5 @@ offsetGet($periodicity); $interval = $this->skipInterval($skipInterval); + return $periodicity->nextDate($epoch->clone(), $interval); } - /** - * @param Periodicity $periodicity - * - * @return bool - */ public function isAvailablePeriodicity(Periodicity $periodicity): bool { return self::containsInterval($periodicity); } - /** - * @param Periodicity $periodicity - * - * @return bool - */ private static function containsInterval(Periodicity $periodicity): bool { return self::loadIntervalMap()->contains($periodicity); } /** - * @return SplObjectStorage + * @SuppressWarnings(PHPMD.MissingImport) */ - private static function loadIntervalMap(): SplObjectStorage + private static function loadIntervalMap(): \SplObjectStorage { - if (self::$intervalMap != null) { + if (null !== self::$intervalMap) { return self::$intervalMap; } - self::$intervalMap = new SplObjectStorage(); + self::$intervalMap = new \SplObjectStorage(); foreach (Periodicity::cases() as $interval) { - $periodicityClass = __NAMESPACE__ . "\\Periodicity\\{$interval->name}"; + $periodicityClass = __NAMESPACE__."\\Periodicity\\{$interval->name}"; self::$intervals[] = $interval->name; self::$intervalMap->attach($interval, new $periodicityClass()); } + return self::$intervalMap; } - /** - * @param int $skip - * - * @return int - */ private function skipInterval(int $skip): int { return self::DEFAULT_INTERVAL + $skip; } - } diff --git a/app/Support/Calendar/Periodicity.php b/app/Support/Calendar/Periodicity.php index 83803c2ce4..e7e37b0ca5 100644 --- a/app/Support/Calendar/Periodicity.php +++ b/app/Support/Calendar/Periodicity.php @@ -1,6 +1,5 @@ diff --git a/app/Support/Calendar/Periodicity/Bimonthly.php b/app/Support/Calendar/Periodicity/Bimonthly.php index 849e7b19c4..ce89863100 100644 --- a/app/Support/Calendar/Periodicity/Bimonthly.php +++ b/app/Support/Calendar/Periodicity/Bimonthly.php @@ -1,6 +1,5 @@ @@ -30,5 +29,5 @@ namespace FireflyIII\Support\Calendar\Periodicity; */ final class Bimonthly extends Monthly { - public const INTERVAL = 2; + public const int INTERVAL = 2; } diff --git a/app/Support/Calendar/Periodicity/Daily.php b/app/Support/Calendar/Periodicity/Daily.php index 5b9a661322..1b5811644b 100644 --- a/app/Support/Calendar/Periodicity/Daily.php +++ b/app/Support/Calendar/Periodicity/Daily.php @@ -1,6 +1,5 @@ @@ -32,14 +31,8 @@ use Carbon\Carbon; */ final class Daily extends Interval { - /** - * @param Carbon $date - * @param int $interval - * - * @return Carbon - */ public function nextDate(Carbon $date, int $interval = 1): Carbon { - return ($date->clone())->addDays($this->skip($interval)); + return $date->clone()->addDays($this->skip($interval)); } } diff --git a/app/Support/Calendar/Periodicity/Fortnightly.php b/app/Support/Calendar/Periodicity/Fortnightly.php index 680d9d2341..99327e0276 100644 --- a/app/Support/Calendar/Periodicity/Fortnightly.php +++ b/app/Support/Calendar/Periodicity/Fortnightly.php @@ -1,6 +1,5 @@ @@ -30,5 +29,5 @@ namespace FireflyIII\Support\Calendar\Periodicity; */ final class Fortnightly extends Weekly { - public const INTERVAL = 2; + public const int INTERVAL = 2; } diff --git a/app/Support/Calendar/Periodicity/HalfYearly.php b/app/Support/Calendar/Periodicity/HalfYearly.php index 5e34b92a93..4471a4f030 100644 --- a/app/Support/Calendar/Periodicity/HalfYearly.php +++ b/app/Support/Calendar/Periodicity/HalfYearly.php @@ -1,6 +1,5 @@ @@ -30,5 +29,5 @@ namespace FireflyIII\Support\Calendar\Periodicity; */ final class HalfYearly extends Monthly { - public const INTERVAL = 6; + public const int INTERVAL = 6; } diff --git a/app/Support/Calendar/Periodicity/Interspacable.php b/app/Support/Calendar/Periodicity/Interspacable.php index 0e3281a4ba..b1d2ab5b42 100644 --- a/app/Support/Calendar/Periodicity/Interspacable.php +++ b/app/Support/Calendar/Periodicity/Interspacable.php @@ -1,6 +1,5 @@ @@ -32,11 +31,5 @@ use Carbon\Carbon; */ interface Interspacable { - /** - * @param Carbon $date - * @param int $interval - * - * @return Carbon - */ public function nextDate(Carbon $date, int $interval = 1): Carbon; } diff --git a/app/Support/Calendar/Periodicity/Interval.php b/app/Support/Calendar/Periodicity/Interval.php index c3a3a06805..ec34c1d43d 100644 --- a/app/Support/Calendar/Periodicity/Interval.php +++ b/app/Support/Calendar/Periodicity/Interval.php @@ -1,6 +1,5 @@ @@ -30,14 +29,9 @@ namespace FireflyIII\Support\Calendar\Periodicity; */ abstract class Interval implements Interspacable { - public const INTERVAL = 1; + public const int INTERVAL = 1; - /** - * @param int $skip - * - * @return int - */ - public function skip(int $skip): int + final public function skip(int $skip): int { return static::INTERVAL * $skip; } diff --git a/app/Support/Calendar/Periodicity/Monthly.php b/app/Support/Calendar/Periodicity/Monthly.php index 983383ab90..a2b1112d93 100644 --- a/app/Support/Calendar/Periodicity/Monthly.php +++ b/app/Support/Calendar/Periodicity/Monthly.php @@ -1,6 +1,5 @@ @@ -32,14 +31,8 @@ use Carbon\Carbon; */ class Monthly extends Interval { - /** - * @param Carbon $date - * @param int $interval - * - * @return Carbon - */ public function nextDate(Carbon $date, int $interval = 1): Carbon { - return ($date->clone())->addMonthsNoOverflow($this->skip($interval)); + return $date->clone()->addMonthsNoOverflow($this->skip($interval)); } } diff --git a/app/Support/Calendar/Periodicity/Quarterly.php b/app/Support/Calendar/Periodicity/Quarterly.php index 839a7131f6..a9cd21b9a1 100644 --- a/app/Support/Calendar/Periodicity/Quarterly.php +++ b/app/Support/Calendar/Periodicity/Quarterly.php @@ -1,6 +1,5 @@ @@ -30,5 +29,5 @@ namespace FireflyIII\Support\Calendar\Periodicity; */ final class Quarterly extends Monthly { - public const INTERVAL = 3; + public const int INTERVAL = 3; } diff --git a/app/Support/Calendar/Periodicity/Weekly.php b/app/Support/Calendar/Periodicity/Weekly.php index 54e33408a6..c4252eab93 100644 --- a/app/Support/Calendar/Periodicity/Weekly.php +++ b/app/Support/Calendar/Periodicity/Weekly.php @@ -1,6 +1,5 @@ @@ -32,14 +31,8 @@ use Carbon\Carbon; */ class Weekly extends Interval { - /** - * @param Carbon $date - * @param int $interval - * - * @return Carbon - */ public function nextDate(Carbon $date, int $interval = 1): Carbon { - return ($date->clone())->addWeeks($this->skip($interval)); + return $date->clone()->addWeeks($this->skip($interval)); } } diff --git a/app/Support/Calendar/Periodicity/Yearly.php b/app/Support/Calendar/Periodicity/Yearly.php index 794bc111dd..1cf997c3fe 100644 --- a/app/Support/Calendar/Periodicity/Yearly.php +++ b/app/Support/Calendar/Periodicity/Yearly.php @@ -1,6 +1,5 @@ @@ -32,14 +31,8 @@ use Carbon\Carbon; */ final class Yearly extends Interval { - /** - * @param Carbon $date - * @param int $interval - * - * @return Carbon - */ public function nextDate(Carbon $date, int $interval = 1): Carbon { - return ($date->clone())->addYearsNoOverflow($this->skip($interval)); + return $date->clone()->addYearsNoOverflow($this->skip($interval)); } } diff --git a/app/Support/Chart/Budget/FrontpageChartGenerator.php b/app/Support/Chart/Budget/FrontpageChartGenerator.php index 086092da0d..2e09e909a0 100644 --- a/app/Support/Chart/Budget/FrontpageChartGenerator.php +++ b/app/Support/Chart/Budget/FrontpageChartGenerator.php @@ -82,11 +82,6 @@ class FrontpageChartGenerator * For each budget, gets all budget limits for the current time range. * When no limits are present, the time range is used to collect information on money spent. * If limits are present, each limit is processed individually. - * - * @param array $data - * @param Budget $budget - * - * @return array */ private function processBudget(array $data, Budget $budget): array { @@ -104,15 +99,11 @@ class FrontpageChartGenerator /** * When no limits are present, the expenses of the whole period are collected and grouped. * This is grouped per currency. Because there is no limit set, "left to spend" and "overspent" are empty. - * - * @param array $data - * @param Budget $budget - * - * @return array */ private function noBudgetLimits(array $data, Budget $budget): array { $spent = $this->opsRepository->sumExpenses($this->start, $this->end, null, new Collection([$budget])); + /** @var array $entry */ foreach ($spent as $entry) { $title = sprintf('%s (%s)', $budget->name, $entry['currency_name']); @@ -126,12 +117,6 @@ class FrontpageChartGenerator /** * If a budget has budget limit, each limit is processed individually. - * - * @param array $data - * @param Budget $budget - * @param Collection $limits - * - * @return array */ private function budgetLimits(array $data, Budget $budget, Collection $limits): array { @@ -146,20 +131,15 @@ class FrontpageChartGenerator /** * For each limit, the expenses from the time range of the limit are collected. Each row from the result is * processed individually. - * - * @param array $data - * @param Budget $budget - * @param BudgetLimit $limit - * - * @return array */ private function processLimit(array $data, Budget $budget, BudgetLimit $limit): array { $spent = $this->opsRepository->sumExpenses($limit->start_date, $limit->end_date, null, new Collection([$budget]), $limit->transactionCurrency); + /** @var array $entry */ foreach ($spent as $entry) { // only spent the entry where the entry's currency matches the budget limit's currency - if ($entry['currency_id'] === (int)$limit->transaction_currency_id) { + if ($entry['currency_id'] === $limit->transaction_currency_id) { $data = $this->processRow($data, $budget, $limit, $entry); } } @@ -172,17 +152,10 @@ class FrontpageChartGenerator * * Each one is added to the $data array. If the limit's date range is different from the global $start and $end * dates, for example when a limit only partially falls into this month, the title is expanded to clarify. - * - * @param array $data - * @param Budget $budget - * @param BudgetLimit $limit - * @param array $entry - * - * @return array */ private function processRow(array $data, Budget $budget, BudgetLimit $limit, array $entry): array { - $title = sprintf('%s (%s)', $budget->name, $entry['currency_name']); + $title = sprintf('%s (%s)', $budget->name, $entry['currency_name']); if ($limit->start_date->startOfDay()->ne($this->start->startOfDay()) || $limit->end_date->startOfDay()->ne($this->end->startOfDay())) { $title = sprintf( '%s (%s) (%s - %s)', @@ -192,7 +165,7 @@ class FrontpageChartGenerator $limit->end_date->isoFormat($this->monthAndDayFormat) ); } - $sumSpent = bcmul($entry['sum'], '-1'); // spent + $sumSpent = bcmul($entry['sum'], '-1'); // spent $data[0]['entries'][$title] = 1 === bccomp($sumSpent, $limit->amount) ? $limit->amount : $sumSpent; // spent $data[1]['entries'][$title] = 1 === bccomp($limit->amount, $sumSpent) ? bcadd($entry['sum'], $limit->amount) : '0'; // left to spent @@ -201,17 +174,11 @@ class FrontpageChartGenerator return $data; } - /** - * @param Carbon $end - */ public function setEnd(Carbon $end): void { $this->end = $end; } - /** - * @param Carbon $start - */ public function setStart(Carbon $start): void { $this->start = $start; @@ -219,8 +186,6 @@ class FrontpageChartGenerator /** * A basic setter for the user. Also updates the repositories with the right user. - * - * @param User $user */ public function setUser(User $user): void { diff --git a/app/Support/Chart/Category/FrontpageChartGenerator.php b/app/Support/Chart/Category/FrontpageChartGenerator.php index c708797692..b570dd7552 100644 --- a/app/Support/Chart/Category/FrontpageChartGenerator.php +++ b/app/Support/Chart/Category/FrontpageChartGenerator.php @@ -51,9 +51,6 @@ class FrontpageChartGenerator /** * FrontpageChartGenerator constructor. - * - * @param Carbon $start - * @param Carbon $end */ public function __construct(Carbon $start, Carbon $end) { @@ -66,18 +63,16 @@ class FrontpageChartGenerator $this->noCatRepos = app(NoCategoryRepositoryInterface::class); } - /** - * @return array - */ public function generate(): array { - $categories = $this->repository->getCategories(); - $accounts = $this->accountRepos->getAccountsByType( + $categories = $this->repository->getCategories(); + $accounts = $this->accountRepos->getAccountsByType( [AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::ASSET, AccountType::DEFAULT] ); // get expenses + income per category: - $collection = []; + $collection = []; + /** @var Category $category */ foreach ($categories as $category) { // get expenses @@ -87,10 +82,10 @@ class FrontpageChartGenerator // collect for no-category: $collection[] = $this->collectNoCatExpenses($accounts); - $tempData = array_merge(...$collection); + $tempData = array_merge(...$collection); // sort temp array by amount. - $amounts = array_column($tempData, 'sum_float'); + $amounts = array_column($tempData, 'sum_float'); array_multisort($amounts, SORT_ASC, $tempData); $currencyData = $this->createCurrencyGroups($tempData); @@ -98,12 +93,6 @@ class FrontpageChartGenerator return $this->insertValues($currencyData, $tempData); } - /** - * @param Category $category - * @param Collection $accounts - * - * @return array - */ private function collectExpenses(Category $category, Collection $accounts): array { $spent = $this->opsRepos->sumExpenses($this->start, $this->end, $accounts, new Collection([$category])); @@ -121,14 +110,11 @@ class FrontpageChartGenerator return $tempData; } - /** - * @param array $currency - */ private function addCurrency(array $currency): void { $currencyId = (int)$currency['currency_id']; - $this->currencies[$currencyId] = $this->currencies[$currencyId] ?? [ + $this->currencies[$currencyId] ??= [ 'currency_id' => $currencyId, 'currency_name' => $currency['currency_name'], 'currency_symbol' => $currency['currency_symbol'], @@ -137,11 +123,6 @@ class FrontpageChartGenerator ]; } - /** - * @param Collection $accounts - * - * @return array - */ private function collectNoCatExpenses(Collection $accounts): array { $noCatExp = $this->noCatRepos->sumExpenses($this->start, $this->end, $accounts); @@ -159,15 +140,11 @@ class FrontpageChartGenerator return $tempData; } - /** - * @param array $data - * - * @return array - */ private function createCurrencyGroups(array $data): array { $return = []; $names = $this->expandNames($data); + /** * @var array $currency */ @@ -184,12 +161,6 @@ class FrontpageChartGenerator return $return; } - /** - * @param array $currencyData - * @param array $monetaryData - * - * @return array - */ private function insertValues(array $currencyData, array $monetaryData): array { /** @var array $array */ diff --git a/app/Support/Chart/Category/WholePeriodChartGenerator.php b/app/Support/Chart/Category/WholePeriodChartGenerator.php index 808750a97a..e1765dbfc9 100644 --- a/app/Support/Chart/Category/WholePeriodChartGenerator.php +++ b/app/Support/Chart/Category/WholePeriodChartGenerator.php @@ -35,31 +35,24 @@ use Illuminate\Support\Collection; */ class WholePeriodChartGenerator { - /** - * @param Category $category - * @param Carbon $start - * @param Carbon $end - * - * @return array - */ public function generate(Category $category, Carbon $start, Carbon $end): array { - $collection = new Collection([$category]); + $collection = new Collection([$category]); /** @var OperationsRepositoryInterface $opsRepository */ - $opsRepository = app(OperationsRepositoryInterface::class); + $opsRepository = app(OperationsRepositoryInterface::class); /** @var AccountRepositoryInterface $accountRepository */ $accountRepository = app(AccountRepositoryInterface::class); - $types = [AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]; - $accounts = $accountRepository->getAccountsByType($types); - $step = $this->calculateStep($start, $end); - $chartData = []; - $spent = []; - $earned = []; + $types = [AccountType::DEFAULT, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]; + $accounts = $accountRepository->getAccountsByType($types); + $step = $this->calculateStep($start, $end); + $chartData = []; + $spent = []; + $earned = []; - $current = clone $start; + $current = clone $start; while ($current <= $end) { $key = $current->format('Y-m-d'); @@ -69,14 +62,14 @@ class WholePeriodChartGenerator $current = app('navigation')->addPeriod($current, $step, 0); } - $currencies = $this->extractCurrencies($spent) + $this->extractCurrencies($earned); + $currencies = $this->extractCurrencies($spent) + $this->extractCurrencies($earned); // generate chart data (for each currency) /** @var array $currency */ foreach ($currencies as $currency) { - $code = $currency['currency_code']; - $name = $currency['currency_name']; - $chartData[sprintf('spent-in-%s', $code)] = [ + $code = $currency['currency_code']; + $name = $currency['currency_name']; + $chartData[sprintf('spent-in-%s', $code)] = [ 'label' => (string)trans('firefly.box_spent_in_currency', ['currency' => $name]), 'entries' => [], 'type' => 'bar', @@ -91,11 +84,11 @@ class WholePeriodChartGenerator ]; } - $current = clone $start; + $current = clone $start; while ($current <= $end) { - $key = $current->format('Y-m-d'); - $label = app('navigation')->periodShow($current, $step); + $key = $current->format('Y-m-d'); + $label = app('navigation')->periodShow($current, $step); /** @var array $currency */ foreach ($currencies as $currency) { @@ -116,11 +109,6 @@ class WholePeriodChartGenerator /** * TODO this method is duplicated - * - * @param Carbon $start - * @param Carbon $end - * - * @return string */ protected function calculateStep(Carbon $start, Carbon $end): string { @@ -142,17 +130,13 @@ class WholePeriodChartGenerator /** * Loop array of spent/earned info, and extract which currencies are present. * Key is the currency ID. - * - * @param array $array - * - * @return array */ private function extractCurrencies(array $array): array { $return = []; foreach ($array as $block) { foreach ($block as $currencyId => $currencyRow) { - $return[$currencyId] = $return[$currencyId] ?? [ + $return[$currencyId] ??= [ 'currency_id' => $currencyId, 'currency_name' => $currencyRow['currency_name'], 'currency_symbol' => $currencyRow['currency_symbol'], diff --git a/app/Support/ChartColour.php b/app/Support/ChartColour.php index 54d64c32ea..9e938b9946 100644 --- a/app/Support/ChartColour.php +++ b/app/Support/ChartColour.php @@ -25,8 +25,6 @@ namespace FireflyIII\Support; /** * Class ChartColour. - * - */ class ChartColour { @@ -54,15 +52,10 @@ class ChartColour [194, 24, 91], ]; - /** - * @param int $index - * - * @return string - */ public static function getColour(int $index): string { $index %= count(self::$colours); - $row = self::$colours[$index]; + $row = self::$colours[$index]; return sprintf('rgba(%d, %d, %d, 0.7)', $row[0], $row[1], $row[2]); } diff --git a/app/Support/Cronjobs/AbstractCronjob.php b/app/Support/Cronjobs/AbstractCronjob.php index 581051e3db..35ccedfa44 100644 --- a/app/Support/Cronjobs/AbstractCronjob.php +++ b/app/Support/Cronjobs/AbstractCronjob.php @@ -27,8 +27,6 @@ use Carbon\Carbon; /** * Class AbstractCronjob - * - */ abstract class AbstractCronjob { @@ -53,23 +51,14 @@ abstract class AbstractCronjob $this->message = null; } - /** - * - */ abstract public function fire(): void; - /** - * @param Carbon $date - */ final public function setDate(Carbon $date): void { $newDate = clone $date; $this->date = $newDate; } - /** - * @param bool $force - */ final public function setForce(bool $force): void { $this->force = $force; diff --git a/app/Support/Cronjobs/AutoBudgetCronjob.php b/app/Support/Cronjobs/AutoBudgetCronjob.php index bc540fa8b2..6ac8d0440a 100644 --- a/app/Support/Cronjobs/AutoBudgetCronjob.php +++ b/app/Support/Cronjobs/AutoBudgetCronjob.php @@ -27,16 +27,12 @@ namespace FireflyIII\Support\Cronjobs; use Carbon\Carbon; use FireflyIII\Jobs\CreateAutoBudgetLimits; use FireflyIII\Models\Configuration; -use Illuminate\Support\Facades\Log; /** * Class AutoBudgetCronjob */ class AutoBudgetCronjob extends AbstractCronjob { - /** - * @inheritDoc - */ public function fire(): void { /** @var Configuration $config */ @@ -45,40 +41,34 @@ class AutoBudgetCronjob extends AbstractCronjob $diff = time() - $lastTime; $diffForHumans = today(config('app.timezone'))->diffForHumans(Carbon::createFromTimestamp($lastTime), null, true); if (0 === $lastTime) { - Log::info('Auto budget cron-job has never fired before.'); + app('log')->info('Auto budget cron-job has never fired before.'); } // less than half a day ago: if ($lastTime > 0 && $diff <= 43200) { - Log::info(sprintf('It has been %s since the auto budget cron-job has fired.', $diffForHumans)); + app('log')->info(sprintf('It has been %s since the auto budget cron-job has fired.', $diffForHumans)); if (false === $this->force) { - Log::info('The auto budget cron-job will not fire now.'); + app('log')->info('The auto budget cron-job will not fire now.'); $this->message = sprintf('It has been %s since the auto budget cron-job has fired. It will not fire now.', $diffForHumans); return; } - - // fire job regardless. - if (true === $this->force) { - Log::info('Execution of the auto budget cron-job has been FORCED.'); - } + app('log')->info('Execution of the auto budget cron-job has been FORCED.'); } if ($lastTime > 0 && $diff > 43200) { - Log::info(sprintf('It has been %s since the auto budget cron-job has fired. It will fire now!', $diffForHumans)); + app('log')->info(sprintf('It has been %s since the auto budget cron-job has fired. It will fire now!', $diffForHumans)); } $this->fireAutoBudget(); app('preferences')->mark(); } - /** - * - */ private function fireAutoBudget(): void { - Log::info(sprintf('Will now fire auto budget cron job task for date "%s".', $this->date->format('Y-m-d'))); + app('log')->info(sprintf('Will now fire auto budget cron job task for date "%s".', $this->date->format('Y-m-d'))); + /** @var CreateAutoBudgetLimits $job */ - $job = app(CreateAutoBudgetLimits::class, [$this->date]); + $job = app(CreateAutoBudgetLimits::class, [$this->date]); $job->setDate($this->date); $job->handle(); @@ -89,6 +79,6 @@ class AutoBudgetCronjob extends AbstractCronjob $this->message = 'Auto-budget cron job fired successfully.'; app('fireflyconfig')->set('last_ab_job', (int)$this->date->format('U')); - Log::info('Done with auto budget cron job task.'); + app('log')->info('Done with auto budget cron job task.'); } } diff --git a/app/Support/Cronjobs/BillWarningCronjob.php b/app/Support/Cronjobs/BillWarningCronjob.php index 2b3c03f512..84362c2069 100644 --- a/app/Support/Cronjobs/BillWarningCronjob.php +++ b/app/Support/Cronjobs/BillWarningCronjob.php @@ -27,9 +27,6 @@ use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Jobs\WarnAboutBills; use FireflyIII\Models\Configuration; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class BillWarningCronjob @@ -38,12 +35,11 @@ class BillWarningCronjob extends AbstractCronjob { /** * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function fire(): void { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); + /** @var Configuration $config */ $config = app('fireflyconfig')->get('last_bw_job', 0); $lastTime = (int)$config->data; @@ -51,13 +47,13 @@ class BillWarningCronjob extends AbstractCronjob $diffForHumans = today(config('app.timezone'))->diffForHumans(Carbon::createFromTimestamp($lastTime), null, true); if (0 === $lastTime) { - Log::info('The bill warning cron-job has never fired before.'); + app('log')->info('The bill warning cron-job has never fired before.'); } // less than half a day ago: if ($lastTime > 0 && $diff <= 43200) { - Log::info(sprintf('It has been %s since the bill warning cron-job has fired.', $diffForHumans)); + app('log')->info(sprintf('It has been %s since the bill warning cron-job has fired.', $diffForHumans)); if (false === $this->force) { - Log::info('The cron-job will not fire now.'); + app('log')->info('The cron-job will not fire now.'); $this->message = sprintf('It has been %s since the bill warning cron-job has fired. It will not fire now.', $diffForHumans); $this->jobFired = false; $this->jobErrored = false; @@ -66,14 +62,11 @@ class BillWarningCronjob extends AbstractCronjob return; } - // fire job regardless. - if (true === $this->force) { - Log::info('Execution of the bill warning cron-job has been FORCED.'); - } + app('log')->info('Execution of the bill warning cron-job has been FORCED.'); } if ($lastTime > 0 && $diff > 43200) { - Log::info(sprintf('It has been %s since the bill warning cron-job has fired. It will fire now!', $diffForHumans)); + app('log')->info(sprintf('It has been %s since the bill warning cron-job has fired. It will fire now!', $diffForHumans)); } $this->fireWarnings(); @@ -81,14 +74,12 @@ class BillWarningCronjob extends AbstractCronjob app('preferences')->mark(); } - /** - * - */ private function fireWarnings(): void { - Log::info(sprintf('Will now fire bill warning job task for date "%s".', $this->date->format('Y-m-d H:i:s'))); + app('log')->info(sprintf('Will now fire bill warning job task for date "%s".', $this->date->format('Y-m-d H:i:s'))); + /** @var WarnAboutBills $job */ - $job = app(WarnAboutBills::class); + $job = app(WarnAboutBills::class); $job->setDate($this->date); $job->setForce($this->force); $job->handle(); @@ -100,7 +91,7 @@ class BillWarningCronjob extends AbstractCronjob $this->message = 'Bill warning cron job fired successfully.'; app('fireflyconfig')->set('last_bw_job', (int)$this->date->format('U')); - Log::info(sprintf('Marked the last time this job has run as "%s" (%d)', $this->date->format('Y-m-d H:i:s'), (int)$this->date->format('U'))); - Log::info('Done with bill warning cron job task.'); + app('log')->info(sprintf('Marked the last time this job has run as "%s" (%d)', $this->date->format('Y-m-d H:i:s'), (int)$this->date->format('U'))); + app('log')->info('Done with bill warning cron job task.'); } } diff --git a/app/Support/Cronjobs/ExchangeRatesCronjob.php b/app/Support/Cronjobs/ExchangeRatesCronjob.php index c76131777a..2572b8ba1e 100644 --- a/app/Support/Cronjobs/ExchangeRatesCronjob.php +++ b/app/Support/Cronjobs/ExchangeRatesCronjob.php @@ -27,16 +27,12 @@ namespace FireflyIII\Support\Cronjobs; use Carbon\Carbon; use FireflyIII\Jobs\DownloadExchangeRates; use FireflyIII\Models\Configuration; -use Illuminate\Support\Facades\Log; /** * Class ExchangeRatesCronjob */ class ExchangeRatesCronjob extends AbstractCronjob { - /** - * @inheritDoc - */ public function fire(): void { /** @var Configuration $config */ @@ -45,40 +41,35 @@ class ExchangeRatesCronjob extends AbstractCronjob $diff = time() - $lastTime; $diffForHumans = today(config('app.timezone'))->diffForHumans(Carbon::createFromTimestamp($lastTime), null, true); if (0 === $lastTime) { - Log::info('Exchange rates cron-job has never fired before.'); + app('log')->info('Exchange rates cron-job has never fired before.'); } // less than half a day ago: if ($lastTime > 0 && $diff <= 43200) { - Log::info(sprintf('It has been %s since the exchange rates cron-job has fired.', $diffForHumans)); + app('log')->info(sprintf('It has been %s since the exchange rates cron-job has fired.', $diffForHumans)); if (false === $this->force) { - Log::info('The exchange rates cron-job will not fire now.'); + app('log')->info('The exchange rates cron-job will not fire now.'); $this->message = sprintf('It has been %s since the exchange rates cron-job has fired. It will not fire now.', $diffForHumans); return; } - // fire job regardless. - if (true === $this->force) { - Log::info('Execution of the exchange rates cron-job has been FORCED.'); - } + app('log')->info('Execution of the exchange rates cron-job has been FORCED.'); } if ($lastTime > 0 && $diff > 43200) { - Log::info(sprintf('It has been %s since the exchange rates cron-job has fired. It will fire now!', $diffForHumans)); + app('log')->info(sprintf('It has been %s since the exchange rates cron-job has fired. It will fire now!', $diffForHumans)); } $this->fireExchangeRateJob(); app('preferences')->mark(); } - /** - * - */ private function fireExchangeRateJob(): void { - Log::info(sprintf('Will now fire exchange rates cron job task for date "%s".', $this->date->format('Y-m-d'))); + app('log')->info(sprintf('Will now fire exchange rates cron job task for date "%s".', $this->date->format('Y-m-d'))); + /** @var DownloadExchangeRates $job */ - $job = app(DownloadExchangeRates::class); + $job = app(DownloadExchangeRates::class); $job->setDate($this->date); $job->handle(); @@ -89,6 +80,6 @@ class ExchangeRatesCronjob extends AbstractCronjob $this->message = 'Exchange rates cron job fired successfully.'; app('fireflyconfig')->set('last_cer_job', (int)$this->date->format('U')); - Log::info('Done with exchange rates job task.'); + app('log')->info('Done with exchange rates job task.'); } } diff --git a/app/Support/Cronjobs/RecurringCronjob.php b/app/Support/Cronjobs/RecurringCronjob.php index cdb2b989ff..6fd241104d 100644 --- a/app/Support/Cronjobs/RecurringCronjob.php +++ b/app/Support/Cronjobs/RecurringCronjob.php @@ -27,9 +27,6 @@ use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Jobs\CreateRecurringTransactions; use FireflyIII\Models\Configuration; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class RecurringCronjob @@ -38,12 +35,11 @@ class RecurringCronjob extends AbstractCronjob { /** * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function fire(): void { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); + /** @var Configuration $config */ $config = app('fireflyconfig')->get('last_rt_job', 0); $lastTime = (int)$config->data; @@ -51,13 +47,13 @@ class RecurringCronjob extends AbstractCronjob $diffForHumans = today(config('app.timezone'))->diffForHumans(Carbon::createFromTimestamp($lastTime), null, true); if (0 === $lastTime) { - Log::info('Recurring transactions cron-job has never fired before.'); + app('log')->info('Recurring transactions cron-job has never fired before.'); } // less than half a day ago: if ($lastTime > 0 && $diff <= 43200) { - Log::info(sprintf('It has been %s since the recurring transactions cron-job has fired.', $diffForHumans)); + app('log')->info(sprintf('It has been %s since the recurring transactions cron-job has fired.', $diffForHumans)); if (false === $this->force) { - Log::info('The cron-job will not fire now.'); + app('log')->info('The cron-job will not fire now.'); $this->message = sprintf('It has been %s since the recurring transactions cron-job has fired. It will not fire now.', $diffForHumans); $this->jobFired = false; $this->jobErrored = false; @@ -65,15 +61,11 @@ class RecurringCronjob extends AbstractCronjob return; } - - // fire job regardless. - if (true === $this->force) { - Log::info('Execution of the recurring transaction cron-job has been FORCED.'); - } + app('log')->info('Execution of the recurring transaction cron-job has been FORCED.'); } if ($lastTime > 0 && $diff > 43200) { - Log::info(sprintf('It has been %s since the recurring transactions cron-job has fired. It will fire now!', $diffForHumans)); + app('log')->info(sprintf('It has been %s since the recurring transactions cron-job has fired. It will fire now!', $diffForHumans)); } $this->fireRecurring(); @@ -81,14 +73,12 @@ class RecurringCronjob extends AbstractCronjob app('preferences')->mark(); } - /** - * - */ private function fireRecurring(): void { - Log::info(sprintf('Will now fire recurring cron job task for date "%s".', $this->date->format('Y-m-d H:i:s'))); + app('log')->info(sprintf('Will now fire recurring cron job task for date "%s".', $this->date->format('Y-m-d H:i:s'))); + /** @var CreateRecurringTransactions $job */ - $job = app(CreateRecurringTransactions::class); + $job = app(CreateRecurringTransactions::class); $job->setDate($this->date); $job->setForce($this->force); $job->handle(); @@ -100,7 +90,7 @@ class RecurringCronjob extends AbstractCronjob $this->message = 'Recurring transactions cron job fired successfully.'; app('fireflyconfig')->set('last_rt_job', (int)$this->date->format('U')); - Log::info(sprintf('Marked the last time this job has run as "%s" (%d)', $this->date->format('Y-m-d H:i:s'), (int)$this->date->format('U'))); - Log::info('Done with recurring cron job task.'); + app('log')->info(sprintf('Marked the last time this job has run as "%s" (%d)', $this->date->format('Y-m-d H:i:s'), (int)$this->date->format('U'))); + app('log')->info('Done with recurring cron job task.'); } } diff --git a/app/Support/Domain.php b/app/Support/Domain.php index 42def30123..c37a70e431 100644 --- a/app/Support/Domain.php +++ b/app/Support/Domain.php @@ -25,30 +25,19 @@ namespace FireflyIII\Support; /** * Class Domain. - * - */ class Domain { - /** - * @return array - */ public static function getBindables(): array { return config('firefly.bindables'); } - /** - * @return array - */ public static function getRuleActions(): array { return config('firefly.rule-actions'); } - /** - * @return array - */ public static function getRuleTriggers(): array { return array_keys(config('search.operators')); diff --git a/app/Support/ExpandedForm.php b/app/Support/ExpandedForm.php index fc78951bea..74822444c4 100644 --- a/app/Support/ExpandedForm.php +++ b/app/Support/ExpandedForm.php @@ -27,30 +27,22 @@ use Eloquent; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Support\Form\FormSupport; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class ExpandedForm. - * - * - */ class ExpandedForm { use FormSupport; /** - * @param string $name - * @param mixed $value - * @param array|null $options + * @param mixed $value * - * @return string * @throws FireflyException */ public function amountNoCurrency(string $name, $value = null, array $options = null): string { - $options = $options ?? []; + $options ??= []; $label = $this->label($name, $options); $options = $this->expandOptionArray($name, $label, $options); $classes = $this->getHolderClasses($name); @@ -59,14 +51,15 @@ class ExpandedForm unset($options['currency'], $options['placeholder']); // make sure value is formatted nicely: - //if (null !== $value && '' !== $value) { - //$value = round((float)$value, 8); - //} + // if (null !== $value && '' !== $value) { + // $value = round((float)$value, 8); + // } try { $html = view('form.amount-no-currency', compact('classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render amountNoCurrency(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render amountNoCurrency(): %s', $e->getMessage())); $html = 'Could not render amountNoCurrency.'; + throw new FireflyException($html, 0, $e); } @@ -74,18 +67,14 @@ class ExpandedForm } /** - * @param string $name - * @param int|null $value - * @param mixed $checked - * @param array|null $options + * @param mixed $checked * - * @return string * @throws FireflyException */ public function checkbox(string $name, int $value = null, $checked = null, array $options = null): string { - $options = $options ?? []; - $value = $value ?? 1; + $options ??= []; + $value ??= 1; $options['checked'] = true === $checked; if (app('session')->has('preFilled')) { @@ -93,17 +82,19 @@ class ExpandedForm $options['checked'] = $preFilled[$name] ?? $options['checked']; } - $label = $this->label($name, $options); - $options = $this->expandOptionArray($name, $label, $options); - $classes = $this->getHolderClasses($name); - $value = $this->fillFieldValue($name, $value); + $label = $this->label($name, $options); + $options = $this->expandOptionArray($name, $label, $options); + $classes = $this->getHolderClasses($name); + $value = $this->fillFieldValue($name, $value); unset($options['placeholder'], $options['autocomplete'], $options['class']); + try { $html = view('form.checkbox', compact('classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render checkbox(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render checkbox(): %s', $e->getMessage())); $html = 'Could not render checkbox.'; + throw new FireflyException($html, 0, $e); } @@ -111,11 +102,8 @@ class ExpandedForm } /** - * @param string $name - * @param mixed $value - * @param array|null $options + * @param mixed $value * - * @return string * @throws FireflyException */ public function date(string $name, $value = null, array $options = null): string @@ -125,11 +113,13 @@ class ExpandedForm $classes = $this->getHolderClasses($name); $value = $this->fillFieldValue($name, $value); unset($options['placeholder']); + try { $html = view('form.date', compact('classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render date(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render date(): %s', $e->getMessage())); $html = 'Could not render date.'; + throw new FireflyException($html, 0, $e); } @@ -137,23 +127,21 @@ class ExpandedForm } /** - * @param string $name - * @param array|null $options - * - * @return string * @throws FireflyException */ public function file(string $name, array $options = null): string { - $options = $options ?? []; + $options ??= []; $label = $this->label($name, $options); $options = $this->expandOptionArray($name, $label, $options); $classes = $this->getHolderClasses($name); + try { $html = view('form.file', compact('classes', 'name', 'label', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render file(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render file(): %s', $e->getMessage())); $html = 'Could not render file.'; + throw new FireflyException($html, 0, $e); } @@ -161,52 +149,25 @@ class ExpandedForm } /** - * @param string $name - * @param mixed $value - * @param array|null $options + * @param mixed $value * - * @return string * @throws FireflyException */ public function integer(string $name, $value = null, array $options = null): string { - $options = $options ?? []; - $label = $this->label($name, $options); - $options = $this->expandOptionArray($name, $label, $options); - $classes = $this->getHolderClasses($name); - $value = $this->fillFieldValue($name, $value); - $options['step'] = $options['step'] ?? '1'; - try { - $html = view('form.integer', compact('classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render integer(): %s', $e->getMessage())); - $html = 'Could not render integer.'; - throw new FireflyException($html, 0, $e); - } - - return $html; - } - - /** - * @param string $name - * @param mixed $value - * @param array|null $options - * - * @return string - * @throws FireflyException - */ - public function location(string $name, $value = null, array $options = null): string - { - $options = $options ?? []; + $options ??= []; $label = $this->label($name, $options); $options = $this->expandOptionArray($name, $label, $options); $classes = $this->getHolderClasses($name); $value = $this->fillFieldValue($name, $value); + $options['step'] ??= '1'; + try { - $html = view('form.location', compact('classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render location(): %s', $e->getMessage())); - $html = 'Could not render location.'; + $html = view('form.integer', compact('classes', 'name', 'label', 'value', 'options'))->render(); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render integer(): %s', $e->getMessage())); + $html = 'Could not render integer.'; + throw new FireflyException($html, 0, $e); } @@ -214,22 +175,42 @@ class ExpandedForm } /** - * @param Collection $set - * - * @return array + * @param mixed $value * + * @throws FireflyException */ + public function location(string $name, $value = null, array $options = null): string + { + $options ??= []; + $label = $this->label($name, $options); + $options = $this->expandOptionArray($name, $label, $options); + $classes = $this->getHolderClasses($name); + $value = $this->fillFieldValue($name, $value); + + try { + $html = view('form.location', compact('classes', 'name', 'label', 'value', 'options'))->render(); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render location(): %s', $e->getMessage())); + $html = 'Could not render location.'; + + throw new FireflyException($html, 0, $e); + } + + return $html; + } + public function makeSelectListWithEmpty(Collection $set): array { $selectList = []; $selectList[0] = '(none)'; $fields = ['title', 'name', 'description']; - /** @var Eloquent $entry */ + + /** @var \Eloquent $entry */ foreach ($set as $entry) { // All Eloquent models have an ID - $entryId = (int)$entry->id; // @phpstan-ignore-line - $current = $entry->toArray(); - $title = null; + $entryId = $entry->id; // @phpstan-ignore-line + $current = $entry->toArray(); + $title = null; foreach ($fields as $field) { if (array_key_exists($field, $current) && null === $title) { $title = $current[$field]; @@ -241,12 +222,9 @@ class ExpandedForm return $selectList; } - /** - * @param null $value - * @param array|null $options + * @param null $value * - * @return string * @throws FireflyException */ public function objectGroup($value = null, array $options = null): string @@ -264,9 +242,10 @@ class ExpandedForm try { $html = view('form.object_group', compact('classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render objectGroup(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render objectGroup(): %s', $e->getMessage())); $html = 'Could not render objectGroup.'; + throw new FireflyException($html, 0, $e); } @@ -274,19 +253,16 @@ class ExpandedForm } /** - * @param string $type - * @param string $name - * - * @return string * @throws FireflyException */ public function optionsList(string $type, string $name): string { try { $html = view('form.options', compact('type', 'name'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render select(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render select(): %s', $e->getMessage())); $html = 'Could not render optionsList.'; + throw new FireflyException($html, 0, $e); } @@ -294,10 +270,6 @@ class ExpandedForm } /** - * @param string $name - * @param array|null $options - * - * @return string * @throws FireflyException */ public function password(string $name, array $options = null): string @@ -305,11 +277,13 @@ class ExpandedForm $label = $this->label($name, $options); $options = $this->expandOptionArray($name, $label, $options); $classes = $this->getHolderClasses($name); + try { $html = view('form.password', compact('classes', 'name', 'label', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render password(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render password(): %s', $e->getMessage())); $html = 'Could not render password.'; + throw new FireflyException($html, 0, $e); } @@ -319,11 +293,8 @@ class ExpandedForm /** * Function to render a percentage. * - * @param string $name - * @param mixed $value - * @param array|null $options + * @param mixed $value * - * @return string * @throws FireflyException */ public function percentage(string $name, $value = null, array $options = null): string @@ -334,11 +305,13 @@ class ExpandedForm $value = $this->fillFieldValue($name, $value); $options['step'] = 'any'; unset($options['placeholder']); + try { $html = view('form.percentage', compact('classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render percentage(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render percentage(): %s', $e->getMessage())); $html = 'Could not render percentage.'; + throw new FireflyException($html, 0, $e); } @@ -346,11 +319,8 @@ class ExpandedForm } /** - * @param string $name - * @param mixed $value - * @param array|null $options + * @param mixed $value * - * @return string * @throws FireflyException */ public function staticText(string $name, $value, array $options = null): string @@ -358,11 +328,13 @@ class ExpandedForm $label = $this->label($name, $options); $options = $this->expandOptionArray($name, $label, $options); $classes = $this->getHolderClasses($name); + try { $html = view('form.static', compact('classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render staticText(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render staticText(): %s', $e->getMessage())); $html = 'Could not render staticText.'; + throw new FireflyException($html, 0, $e); } @@ -370,11 +342,8 @@ class ExpandedForm } /** - * @param string $name - * @param mixed $value - * @param array|null $options + * @param mixed $value * - * @return string * @throws FireflyException */ public function text(string $name, $value = null, array $options = null): string @@ -383,11 +352,13 @@ class ExpandedForm $options = $this->expandOptionArray($name, $label, $options); $classes = $this->getHolderClasses($name); $value = $this->fillFieldValue($name, $value); + try { $html = view('form.text', compact('classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render text(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render text(): %s', $e->getMessage())); $html = 'Could not render text.'; + throw new FireflyException($html, 0, $e); } @@ -395,11 +366,8 @@ class ExpandedForm } /** - * @param string $name - * @param mixed $value - * @param array|null $options + * @param mixed $value * - * @return string * @throws FireflyException */ public function textarea(string $name, $value = null, array $options = null): string @@ -416,9 +384,10 @@ class ExpandedForm try { $html = view('form.textarea', compact('classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render textarea(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render textarea(): %s', $e->getMessage())); $html = 'Could not render textarea.'; + throw new FireflyException($html, 0, $e); } diff --git a/app/Support/Export/ExportDataGenerator.php b/app/Support/Export/ExportDataGenerator.php index 393ec30f08..2ac986eb7f 100644 --- a/app/Support/Export/ExportDataGenerator.php +++ b/app/Support/Export/ExportDataGenerator.php @@ -53,12 +53,9 @@ use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\User; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; use League\Csv\CannotInsertRecord; use League\Csv\Exception; use League\Csv\Writer; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Class ExportDataGenerator @@ -67,8 +64,8 @@ class ExportDataGenerator { use ConvertsDataTypes; - private const ADD_RECORD_ERR = 'Could not add record to set: %s'; - private const EXPORT_ERR = 'Could not export to string: %s'; + private const string ADD_RECORD_ERR = 'Could not add record to set: %s'; + private const string EXPORT_ERR = 'Could not export to string: %s'; private Collection $accounts; private Carbon $end; private bool $exportAccounts; @@ -85,8 +82,8 @@ class ExportDataGenerator public function __construct() { - $this->accounts = new Collection(); - $this->start = today(config('app.timezone')); + $this->accounts = new Collection(); + $this->start = today(config('app.timezone')); $this->start->subYear(); $this->end = today(config('app.timezone')); $this->exportTransactions = false; @@ -101,10 +98,7 @@ class ExportDataGenerator } /** - * @return array - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ public function export(): array { @@ -141,14 +135,13 @@ class ExportDataGenerator } /** - * @return string * @throws CannotInsertRecord * @throws Exception * @throws FireflyException */ private function exportAccounts(): string { - $header = [ + $header = [ 'user_id', 'account_id', 'created_at', @@ -167,11 +160,13 @@ class ExportDataGenerator 'interest', 'interest_period', ]; + /** @var AccountRepositoryInterface $repository */ - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); $repository->setUser($this->user); $allAccounts = $repository->getAccountsByType([]); $records = []; + /** @var Account $account */ foreach ($allAccounts as $account) { $currency = $repository->getAccountCurrency($account); @@ -196,39 +191,36 @@ class ExportDataGenerator ]; } - //load the CSV document from a string - $csv = Writer::createFromString(); + // load the CSV document from a string + $csv = Writer::createFromString(); - //insert the header + // insert the header try { $csv->insertOne($header); } catch (CannotInsertRecord $e) { throw new FireflyException(sprintf(self::ADD_RECORD_ERR, $e->getMessage()), 0, $e); } - //insert all the records + // insert all the records $csv->insertAll($records); try { $string = $csv->toString(); } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); + throw new FireflyException(sprintf(self::EXPORT_ERR, $e->getMessage()), 0, $e); } return $string; } - /** - * @param User $user - */ public function setUser(User $user): void { $this->user = $user; } /** - * @return string * @throws CannotInsertRecord * @throws Exception * @throws FireflyException @@ -238,8 +230,8 @@ class ExportDataGenerator /** @var BillRepositoryInterface $repository */ $repository = app(BillRepositoryInterface::class); $repository->setUser($this->user); - $bills = $repository->getBills(); - $header = [ + $bills = $repository->getBills(); + $header = [ 'user_id', 'bill_id', 'created_at', @@ -253,7 +245,7 @@ class ExportDataGenerator 'skip', 'active', ]; - $records = []; + $records = []; /** @var Bill $bill */ foreach ($bills as $bill) { @@ -273,23 +265,24 @@ class ExportDataGenerator ]; } - //load the CSV document from a string - $csv = Writer::createFromString(); + // load the CSV document from a string + $csv = Writer::createFromString(); - //insert the header + // insert the header try { $csv->insertOne($header); } catch (CannotInsertRecord $e) { throw new FireflyException(sprintf(self::ADD_RECORD_ERR, $e->getMessage()), 0, $e); } - //insert all the records + // insert all the records $csv->insertAll($records); try { $string = $csv->toString(); } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); + throw new FireflyException(sprintf(self::EXPORT_ERR, $e->getMessage()), 0, $e); } @@ -297,14 +290,13 @@ class ExportDataGenerator } /** - * @return string * @throws CannotInsertRecord * @throws Exception * @throws FireflyException */ private function exportBudgets(): string { - $header = [ + $header = [ 'user_id', 'budget_id', 'name', @@ -318,12 +310,14 @@ class ExportDataGenerator $budgetRepos = app(BudgetRepositoryInterface::class); $budgetRepos->setUser($this->user); - $limitRepos = app(BudgetLimitRepositoryInterface::class); - $budgets = $budgetRepos->getBudgets(); - $records = []; + $limitRepos = app(BudgetLimitRepositoryInterface::class); + $budgets = $budgetRepos->getBudgets(); + $records = []; + /** @var Budget $budget */ foreach ($budgets as $budget) { $limits = $limitRepos->getBudgetLimits($budget); + /** @var BudgetLimit $limit */ foreach ($limits as $limit) { $records[] = [ @@ -340,23 +334,24 @@ class ExportDataGenerator } } - //load the CSV document from a string - $csv = Writer::createFromString(); + // load the CSV document from a string + $csv = Writer::createFromString(); - //insert the header + // insert the header try { $csv->insertOne($header); } catch (CannotInsertRecord $e) { throw new FireflyException(sprintf(self::ADD_RECORD_ERR, $e->getMessage()), 0, $e); } - //insert all the records + // insert all the records $csv->insertAll($records); try { $string = $csv->toString(); } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); + throw new FireflyException(sprintf(self::EXPORT_ERR, $e->getMessage()), 0, $e); } @@ -364,17 +359,16 @@ class ExportDataGenerator } /** - * @return string * @throws CannotInsertRecord * @throws Exception * @throws FireflyException */ private function exportCategories(): string { - $header = ['user_id', 'category_id', 'created_at', 'updated_at', 'name']; + $header = ['user_id', 'category_id', 'created_at', 'updated_at', 'name']; /** @var CategoryRepositoryInterface $catRepos */ - $catRepos = app(CategoryRepositoryInterface::class); + $catRepos = app(CategoryRepositoryInterface::class); $catRepos->setUser($this->user); $records = []; @@ -391,23 +385,24 @@ class ExportDataGenerator ]; } - //load the CSV document from a string - $csv = Writer::createFromString(); + // load the CSV document from a string + $csv = Writer::createFromString(); - //insert the header + // insert the header try { $csv->insertOne($header); } catch (CannotInsertRecord $e) { throw new FireflyException(sprintf(self::ADD_RECORD_ERR, $e->getMessage()), 0, $e); } - //insert all the records + // insert all the records $csv->insertAll($records); try { $string = $csv->toString(); } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); + throw new FireflyException(sprintf(self::EXPORT_ERR, $e->getMessage()), 0, $e); } @@ -415,7 +410,6 @@ class ExportDataGenerator } /** - * @return string * @throws CannotInsertRecord * @throws Exception * @throws FireflyException @@ -423,14 +417,14 @@ class ExportDataGenerator private function exportPiggies(): string { /** @var PiggyBankRepositoryInterface $piggyRepos */ - $piggyRepos = app(PiggyBankRepositoryInterface::class); + $piggyRepos = app(PiggyBankRepositoryInterface::class); $piggyRepos->setUser($this->user); /** @var AccountRepositoryInterface $accountRepos */ $accountRepos = app(AccountRepositoryInterface::class); $accountRepos->setUser($this->user); - $header = [ + $header = [ 'user_id', 'piggy_bank_id', 'created_at', @@ -446,8 +440,8 @@ class ExportDataGenerator 'order', 'active', ]; - $records = []; - $piggies = $piggyRepos->getPiggyBanks(); + $records = []; + $piggies = $piggyRepos->getPiggyBanks(); /** @var PiggyBank $piggy */ foreach ($piggies as $piggy) { @@ -471,23 +465,24 @@ class ExportDataGenerator ]; } - //load the CSV document from a string - $csv = Writer::createFromString(); + // load the CSV document from a string + $csv = Writer::createFromString(); - //insert the header + // insert the header try { $csv->insertOne($header); } catch (CannotInsertRecord $e) { throw new FireflyException(sprintf(self::ADD_RECORD_ERR, $e->getMessage()), 0, $e); } - //insert all the records + // insert all the records $csv->insertAll($records); try { $string = $csv->toString(); } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); + throw new FireflyException(sprintf(self::EXPORT_ERR, $e->getMessage()), 0, $e); } @@ -495,7 +490,6 @@ class ExportDataGenerator } /** - * @return string * @throws CannotInsertRecord * @throws Exception * @throws FireflyException @@ -505,63 +499,27 @@ class ExportDataGenerator /** @var RecurringRepositoryInterface $recurringRepos */ $recurringRepos = app(RecurringRepositoryInterface::class); $recurringRepos->setUser($this->user); - $header = [ + $header = [ // recurrence: - 'user_id', - 'recurrence_id', - 'row_contains', - 'created_at', - 'updated_at', - 'type', - 'title', - 'description', - 'first_date', - 'repeat_until', - 'latest_date', - 'repetitions', - 'apply_rules', - 'active', + 'user_id', 'recurrence_id', 'row_contains', 'created_at', 'updated_at', 'type', 'title', 'description', 'first_date', 'repeat_until', 'latest_date', 'repetitions', 'apply_rules', 'active', // repetition info: - 'type', - 'moment', - 'skip', - 'weekend', + 'type', 'moment', 'skip', 'weekend', // transactions + meta: - 'currency_code', - 'foreign_currency_code', - 'source_name', - 'source_type', - 'destination_name', - 'destination_type', - 'amount', - 'foreign_amount', - 'category', - 'budget', - 'piggy_bank', - 'tags', + 'currency_code', 'foreign_currency_code', 'source_name', 'source_type', 'destination_name', 'destination_type', 'amount', 'foreign_amount', 'category', 'budget', 'piggy_bank', 'tags', ]; - $records = []; - $recurrences = $recurringRepos->getAll(); + $records = []; + $recurrences = $recurringRepos->getAll(); + /** @var Recurrence $recurrence */ foreach ($recurrences as $recurrence) { // add recurrence: $records[] = [ - $this->user->id, - $recurrence->id, + $this->user->id, $recurrence->id, 'recurrence', - $recurrence->created_at->toAtomString(), - $recurrence->updated_at->toAtomString(), - $recurrence->transactionType->type, - $recurrence->title, - $recurrence->description, - $recurrence->first_date?->format('Y-m-d'), - $recurrence->repeat_until?->format('Y-m-d'), - $recurrence->latest_date?->format('Y-m-d'), - $recurrence->repetitions, - $recurrence->apply_rules, - $recurrence->active, + $recurrence->created_at->toAtomString(), $recurrence->updated_at->toAtomString(), $recurrence->transactionType->type, $recurrence->title, $recurrence->description, $recurrence->first_date?->format('Y-m-d'), $recurrence->repeat_until?->format('Y-m-d'), $recurrence->latest_date?->format('Y-m-d'), $recurrence->repetitions, $recurrence->apply_rules, $recurrence->active, ]; + // add new row for each repetition /** @var RecurrenceRepetition $repetition */ foreach ($recurrence->recurrenceRepetitions as $repetition) { @@ -570,25 +528,13 @@ class ExportDataGenerator $this->user->id, $recurrence->id, 'repetition', - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, + null, null, null, null, null, null, null, null, null, null, null, // repetition: - $repetition->repetition_type, - $repetition->repetition_moment, - $repetition->repetition_skip, - $repetition->weekend, + $repetition->repetition_type, $repetition->repetition_moment, $repetition->repetition_skip, $repetition->weekend, ]; } + /** @var RecurrenceTransaction $transaction */ foreach ($recurrence->recurrenceTransactions as $transaction) { $categoryName = $recurringRepos->getCategoryName($transaction); @@ -596,62 +542,39 @@ class ExportDataGenerator $piggyBankId = $recurringRepos->getPiggyBank($transaction); $tags = $recurringRepos->getTags($transaction); - $records[] = [ + $records[] = [ // recurrence $this->user->id, $recurrence->id, 'transaction', - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, + null, null, null, null, null, null, null, null, null, null, null, // repetition: - null, - null, - null, - null, + null, null, null, null, // transaction: - $transaction->transactionCurrency->code, - $transaction->foreignCurrency?->code, - $transaction->sourceAccount->name, - $transaction->sourceAccount->accountType->type, - $transaction->destinationAccount->name, - $transaction->destinationAccount->accountType->type, - $transaction->amount, - $transaction->foreign_amount, - $categoryName, - $budgetId, - $piggyBankId, - implode(',', $tags), + $transaction->transactionCurrency->code, $transaction->foreignCurrency?->code, $transaction->sourceAccount->name, $transaction->sourceAccount->accountType->type, $transaction->destinationAccount->name, $transaction->destinationAccount->accountType->type, $transaction->amount, $transaction->foreign_amount, $categoryName, $budgetId, $piggyBankId, implode(',', $tags), ]; } } - //load the CSV document from a string - $csv = Writer::createFromString(); + // load the CSV document from a string + $csv = Writer::createFromString(); - //insert the header + // insert the header try { $csv->insertOne($header); } catch (CannotInsertRecord $e) { throw new FireflyException(sprintf(self::ADD_RECORD_ERR, $e->getMessage()), 0, $e); } - //insert all the records + // insert all the records $csv->insertAll($records); try { $string = $csv->toString(); } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); + throw new FireflyException(sprintf(self::EXPORT_ERR, $e->getMessage()), 0, $e); } @@ -659,7 +582,6 @@ class ExportDataGenerator } /** - * @return string * @throws CannotInsertRecord * @throws Exception * @throws FireflyException @@ -667,122 +589,69 @@ class ExportDataGenerator private function exportRules(): string { $header = [ - 'user_id', - 'rule_id', - 'row_contains', - 'created_at', - 'updated_at', - 'group_id', - 'group_name', - 'title', - 'description', - 'order', - 'active', - 'stop_processing', - 'strict', - 'trigger_type', - 'trigger_value', - 'trigger_order', - 'trigger_active', - 'trigger_stop_processing', - 'action_type', - 'action_value', - 'action_order', - 'action_active', - 'action_stop_processing', - ]; + 'user_id', 'rule_id', 'row_contains', + 'created_at', 'updated_at', 'group_id', 'title', 'description', 'order', 'active', 'stop_processing', 'strict', + 'trigger_type', 'trigger_value', 'trigger_order', 'trigger_active', 'trigger_stop_processing', + 'action_type', 'action_value', 'action_order', 'action_active', 'action_stop_processing']; $ruleRepos = app(RuleRepositoryInterface::class); $ruleRepos->setUser($this->user); - $rules = $ruleRepos->getAll(); - $records = []; + $rules = $ruleRepos->getAll(); + $records = []; + /** @var Rule $rule */ foreach ($rules as $rule) { - $records[] = [ - $this->user->id, - $rule->id, + $entry = [ + $this->user->id, $rule->id, 'rule', - $rule->created_at->toAtomString(), - $rule->updated_at->toAtomString(), - $rule->ruleGroup->id, - $rule->ruleGroup->title, - $rule->title, - $rule->description, - $rule->order, - $rule->active, - $rule->stop_processing, - $rule->strict, + $rule->created_at->toAtomString(), $rule->updated_at->toAtomString(), $rule->ruleGroup->id, $rule->ruleGroup->title, $rule->title, $rule->description, $rule->order, $rule->active, $rule->stop_processing, $rule->strict, + null, null, null, null, null, null, null, null, null, ]; + $records[] = $entry; + /** @var RuleTrigger $trigger */ foreach ($rule->ruleTriggers as $trigger) { - $records[] = [ + $entry = [ $this->user->id, $rule->id, 'trigger', - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - $trigger->trigger_type, - $trigger->trigger_value, - $trigger->order, - $trigger->active, - $trigger->stop_processing, + null, null, null, null, null, null, null, null, null, + $trigger->trigger_type, $trigger->trigger_value, $trigger->order, $trigger->active, $trigger->stop_processing, + null, null, null, null, null, ]; + $records[] = $entry; } /** @var RuleAction $action */ foreach ($rule->ruleActions as $action) { - $records[] = [ + $entry = [ $this->user->id, $rule->id, 'action', - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - $action->action_type, - $action->action_value, - $action->order, - $action->active, - $action->stop_processing, + null, null, null, null, null, null, null, null, null, null, null, null, null, null, + $action->action_type, $action->action_value, $action->order, $action->active, $action->stop_processing, ]; + $records[] = $entry; } } - //load the CSV document from a string - $csv = Writer::createFromString(); + // load the CSV document from a string + $csv = Writer::createFromString(); - //insert the header + // insert the header try { $csv->insertOne($header); } catch (CannotInsertRecord $e) { throw new FireflyException(sprintf(self::ADD_RECORD_ERR, $e->getMessage()), 0, $e); } - //insert all the records + // insert all the records $csv->insertAll($records); try { $string = $csv->toString(); } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); + throw new FireflyException(sprintf(self::EXPORT_ERR, $e->getMessage()), 0, $e); } @@ -790,21 +659,19 @@ class ExportDataGenerator } /** - * @return string * @throws CannotInsertRecord - * @throws ContainerExceptionInterface * @throws Exception * @throws FireflyException - * @throws NotFoundExceptionInterface */ private function exportTags(): string { - $header = ['user_id', 'tag_id', 'created_at', 'updated_at', 'tag', 'date', 'description', 'latitude', 'longitude', 'zoom_level']; + $header = ['user_id', 'tag_id', 'created_at', 'updated_at', 'tag', 'date', 'description', 'latitude', 'longitude', 'zoom_level']; $tagRepos = app(TagRepositoryInterface::class); $tagRepos->setUser($this->user); - $tags = $tagRepos->get(); - $records = []; + $tags = $tagRepos->get(); + $records = []; + /** @var Tag $tag */ foreach ($tags as $tag) { $records[] = [ @@ -821,23 +688,24 @@ class ExportDataGenerator ]; } - //load the CSV document from a string - $csv = Writer::createFromString(); + // load the CSV document from a string + $csv = Writer::createFromString(); - //insert the header + // insert the header try { $csv->insertOne($header); } catch (CannotInsertRecord $e) { throw new FireflyException(sprintf(self::ADD_RECORD_ERR, $e->getMessage()), 0, $e); } - //insert all the records + // insert all the records $csv->insertAll($records); try { $string = $csv->toString(); } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); + throw new FireflyException(sprintf(self::EXPORT_ERR, $e->getMessage()), 0, $e); } @@ -845,7 +713,7 @@ class ExportDataGenerator } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function get(string $key, mixed $default = null): mixed { @@ -853,7 +721,6 @@ class ExportDataGenerator } /** - * @return string * @throws CannotInsertRecord * @throws Exception * @throws FireflyException @@ -861,155 +728,79 @@ class ExportDataGenerator private function exportTransactions(): string { // TODO better place for keys? - $header = [ - 'user_id', - 'group_id', - 'journal_id', - 'created_at', - 'updated_at', - 'group_title', - 'type', - 'amount', - 'foreign_amount', - 'currency_code', - 'foreign_currency_code', - 'description', - 'date', - 'source_name', - 'source_iban', - 'source_type', - 'destination_name', - 'destination_iban', - 'destination_type', - 'reconciled', - 'category', - 'budget', - 'bill', - 'tags', - 'notes', - // all optional meta fields: - ]; + $header = ['user_id', 'group_id', 'journal_id', 'created_at', 'updated_at', 'group_title', 'type', 'amount', 'foreign_amount', 'currency_code', 'foreign_currency_code', 'description', 'date', 'source_name', 'source_iban', 'source_type', 'destination_name', 'destination_iban', 'destination_type', 'reconciled', 'category', 'budget', 'bill', 'tags', 'notes']; $metaFields = config('firefly.journal_meta_fields'); $header = array_merge($header, $metaFields); - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setUser($this->user); $collector->setRange($this->start, $this->end)->withAccountInformation()->withCategoryInformation()->withBillInformation() - ->withBudgetInformation()->withTagInformation()->withNotes(); + ->withBudgetInformation()->withTagInformation()->withNotes() + ; if (0 !== $this->accounts->count()) { $collector->setAccounts($this->accounts); } - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); // get repository for meta data: $repository = app(TransactionGroupRepositoryInterface::class); $repository->setUser($this->user); - $records = []; + $records = []; + /** @var array $journal */ foreach ($journals as $journal) { $metaData = $repository->getMetaFields($journal['transaction_journal_id'], $metaFields); $records[] = [ - $journal['user_id'], - $journal['transaction_group_id'], - $journal['transaction_journal_id'], - $journal['created_at']->toAtomString(), - $journal['updated_at']->toAtomString(), - $journal['transaction_group_title'], - $journal['transaction_type_type'], - $journal['amount'], - $journal['foreign_amount'], - $journal['currency_code'], - $journal['foreign_currency_code'], - $journal['description'], - $journal['date']->toAtomString(), - $journal['source_account_name'], - $journal['source_account_iban'], - $journal['source_account_type'], - $journal['destination_account_name'], - $journal['destination_account_iban'], - $journal['destination_account_type'], - $journal['reconciled'], - $journal['category_name'], - $journal['budget_name'], - $journal['bill_name'], + $journal['user_id'], $journal['transaction_group_id'], $journal['transaction_journal_id'], $journal['created_at']->toAtomString(), $journal['updated_at']->toAtomString(), $journal['transaction_group_title'], $journal['transaction_type_type'], $journal['amount'], $journal['foreign_amount'], $journal['currency_code'], $journal['foreign_currency_code'], $journal['description'], $journal['date']->toAtomString(), $journal['source_account_name'], $journal['source_account_iban'], $journal['source_account_type'], $journal['destination_account_name'], $journal['destination_account_iban'], $journal['destination_account_type'], $journal['reconciled'], $journal['category_name'], $journal['budget_name'], $journal['bill_name'], $this->mergeTags($journal['tags']), - $this->clearString($journal['notes'], true), - - // export also the optional fields (ALL) + $this->clearStringKeepNewlines($journal['notes']), // sepa - $metaData['sepa_cc'], - $metaData['sepa_ct_op'], - $metaData['sepa_ct_id'], - $metaData['sepa_db'], - $metaData['sepa_country'], - $metaData['sepa_ep'], - $metaData['sepa_ci'], - $metaData['sepa_batch_id'], - $metaData['external_url'], + $metaData['sepa_cc'], $metaData['sepa_ct_op'], $metaData['sepa_ct_id'], $metaData['sepa_db'], $metaData['sepa_country'], $metaData['sepa_ep'], $metaData['sepa_ci'], $metaData['sepa_batch_id'], $metaData['external_url'], // dates - $metaData['interest_date'], - $metaData['book_date'], - $metaData['process_date'], - $metaData['due_date'], - $metaData['payment_date'], - $metaData['invoice_date'], + $metaData['interest_date'], $metaData['book_date'], $metaData['process_date'], $metaData['due_date'], $metaData['payment_date'], $metaData['invoice_date'], // others - $metaData['recurrence_id'], - $metaData['internal_reference'], - $metaData['bunq_payment_id'], - $metaData['import_hash'], - $metaData['import_hash_v2'], - $metaData['external_id'], - $metaData['original_source'], + $metaData['recurrence_id'], $metaData['internal_reference'], $metaData['bunq_payment_id'], $metaData['import_hash'], $metaData['import_hash_v2'], $metaData['external_id'], $metaData['original_source'], // recurring transactions - $metaData['recurrence_total'], - $metaData['recurrence_count'], + $metaData['recurrence_total'], $metaData['recurrence_count'], ]; } - //load the CSV document from a string - $csv = Writer::createFromString(); + // load the CSV document from a string + $csv = Writer::createFromString(); - //insert the header + // insert the header try { $csv->insertOne($header); } catch (CannotInsertRecord $e) { throw new FireflyException(sprintf(self::ADD_RECORD_ERR, $e->getMessage()), 0, $e); } - //insert all the records + // insert all the records $csv->insertAll($records); try { $string = $csv->toString(); } catch (Exception $e) { // intentional generic exception - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); + throw new FireflyException(sprintf(self::EXPORT_ERR, $e->getMessage()), 0, $e); } return $string; } - /** - * @param Collection $accounts - */ public function setAccounts(Collection $accounts): void { $this->accounts = $accounts; } - /** - * @param array $tags - * - * @return string - */ private function mergeTags(array $tags): string { if (0 === count($tags)) { @@ -1024,96 +815,63 @@ class ExportDataGenerator } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function has(mixed $key): mixed { return null; } - /** - * @param Carbon $end - */ public function setEnd(Carbon $end): void { $this->end = $end; } - /** - * @param bool $exportAccounts - */ public function setExportAccounts(bool $exportAccounts): void { $this->exportAccounts = $exportAccounts; } - /** - * @param bool $exportBills - */ public function setExportBills(bool $exportBills): void { $this->exportBills = $exportBills; } - /** - * @param bool $exportBudgets - */ public function setExportBudgets(bool $exportBudgets): void { $this->exportBudgets = $exportBudgets; } - /** - * @param bool $exportCategories - */ public function setExportCategories(bool $exportCategories): void { $this->exportCategories = $exportCategories; } - /** - * @param bool $exportPiggies - */ public function setExportPiggies(bool $exportPiggies): void { $this->exportPiggies = $exportPiggies; } - /** - * @param bool $exportRecurring - */ public function setExportRecurring(bool $exportRecurring): void { $this->exportRecurring = $exportRecurring; } - /** - * @param bool $exportRules - */ public function setExportRules(bool $exportRules): void { $this->exportRules = $exportRules; } - /** - * @param bool $exportTags - */ public function setExportTags(bool $exportTags): void { $this->exportTags = $exportTags; } - /** - * @param bool $exportTransactions - */ public function setExportTransactions(bool $exportTransactions): void { $this->exportTransactions = $exportTransactions; } - /** - * @param Carbon $start - */ public function setStart(Carbon $start): void { $this->start = $start; diff --git a/app/Support/Facades/AccountForm.php b/app/Support/Facades/AccountForm.php index 6681ad427c..2a44acd2bd 100644 --- a/app/Support/Facades/AccountForm.php +++ b/app/Support/Facades/AccountForm.php @@ -27,14 +27,11 @@ use Illuminate\Support\Facades\Facade; /** * Class AccountForm. - * */ class AccountForm extends Facade { /** * Get the registered name of the component. - * - * @return string */ protected static function getFacadeAccessor(): string { diff --git a/app/Support/Facades/Amount.php b/app/Support/Facades/Amount.php index c11965dc7d..81abb85066 100644 --- a/app/Support/Facades/Amount.php +++ b/app/Support/Facades/Amount.php @@ -31,11 +31,11 @@ use Illuminate\Support\Facades\Facade; /** * Class Amount. * - * @method string formatAnything(TransactionCurrency $format, string $amount, bool $coloured = true) - * @method Collection getAllCurrencies() - * @method Collection getCurrencies() - * @method string getCurrencyCode() - * @method string getCurrencySymbol() + * @method string formatAnything(TransactionCurrency $format, string $amount, bool $coloured = true) + * @method Collection getAllCurrencies() + * @method Collection getCurrencies() + * @method string getCurrencyCode() + * @method string getCurrencySymbol() * @method TransactionCurrency getDefaultCurrency() * @method TransactionCurrency getDefaultCurrencyByUser(User $user) */ @@ -43,8 +43,6 @@ class Amount extends Facade { /** * Get the registered name of the component. - * - * @return string */ protected static function getFacadeAccessor(): string { diff --git a/app/Support/Facades/CurrencyForm.php b/app/Support/Facades/CurrencyForm.php index 08fdf6b78d..528ece371b 100644 --- a/app/Support/Facades/CurrencyForm.php +++ b/app/Support/Facades/CurrencyForm.php @@ -27,14 +27,11 @@ use Illuminate\Support\Facades\Facade; /** * Class CurrencyForm. - * */ class CurrencyForm extends Facade { /** * Get the registered name of the component. - * - * @return string */ protected static function getFacadeAccessor(): string { diff --git a/app/Support/Facades/ExpandedForm.php b/app/Support/Facades/ExpandedForm.php index bd9c781816..9763269708 100644 --- a/app/Support/Facades/ExpandedForm.php +++ b/app/Support/Facades/ExpandedForm.php @@ -32,8 +32,6 @@ class ExpandedForm extends Facade { /** * Get the registered name of the component. - * - * @return string */ protected static function getFacadeAccessor(): string { diff --git a/app/Support/Facades/FireflyConfig.php b/app/Support/Facades/FireflyConfig.php index 3c5fc74e53..c5c3b505e2 100644 --- a/app/Support/Facades/FireflyConfig.php +++ b/app/Support/Facades/FireflyConfig.php @@ -28,18 +28,17 @@ use Illuminate\Support\Facades\Facade; /** * Class FireflyConfig. + * * @method null|Configuration get($name, $default = null) - * @method Configuration set(string $name, $value) + * @method Configuration set(string $name, $value) * @method delete(string $name) - * @method Configuration|null getFresh(string $name, $default = null) - * @method Configuration put(string $name, $value) + * @method null|Configuration getFresh(string $name, $default = null) + * @method Configuration put(string $name, $value) */ class FireflyConfig extends Facade { /** * Get the registered name of the component. - * - * @return string */ protected static function getFacadeAccessor(): string { diff --git a/app/Support/Facades/Navigation.php b/app/Support/Facades/Navigation.php index 3e18b1568c..bb171321a6 100644 --- a/app/Support/Facades/Navigation.php +++ b/app/Support/Facades/Navigation.php @@ -30,10 +30,10 @@ use Illuminate\Support\Facades\Facade; * Class Navigation. * * @method Carbon addPeriod(Carbon $theDate, string $repeatFreq, int $skip) - * @method array blockPeriods(Carbon $start, Carbon $end, string $range) + * @method array blockPeriods(Carbon $start, Carbon $end, string $range) * @method Carbon endOfPeriod(Carbon $end, string $repeatFreq) * @method Carbon endOfX(Carbon $theCurrentEnd, string $repeatFreq, Carbon $maxDate = null) - * @method array listOfPeriods(Carbon $start, Carbon $end) + * @method array listOfPeriods(Carbon $start, Carbon $end) * @method string periodShow(Carbon $theDate, string $repeatFrequency) * @method string preferredCarbonFormat(Carbon $start, Carbon $end) * @method string preferredCarbonLocalizedFormat(Carbon $start, Carbon $end) @@ -49,8 +49,6 @@ class Navigation extends Facade { /** * Get the registered name of the component. - * - * @return string */ protected static function getFacadeAccessor(): string { diff --git a/app/Support/Facades/PiggyBankForm.php b/app/Support/Facades/PiggyBankForm.php index bfb9bfe307..3dd4c84bda 100644 --- a/app/Support/Facades/PiggyBankForm.php +++ b/app/Support/Facades/PiggyBankForm.php @@ -27,14 +27,11 @@ use Illuminate\Support\Facades\Facade; /** * Class PiggyBankForm. - * */ class PiggyBankForm extends Facade { /** * Get the registered name of the component. - * - * @return string */ protected static function getFacadeAccessor(): string { diff --git a/app/Support/Facades/Preferences.php b/app/Support/Facades/Preferences.php index 4fa1bb978e..207f5bf5a0 100644 --- a/app/Support/Facades/Preferences.php +++ b/app/Support/Facades/Preferences.php @@ -31,16 +31,16 @@ use Illuminate\Support\Facades\Facade; /** * Class Preferences. * - * @method Collection beginsWith(User $user, string $search) - * @method bool delete(string $name) - * @method Collection findByName(string $name) - * @method Preference get(string $name, $value = null) - * @method array getArrayForUser(User $user, array $list) - * @method Preference|null getForUser(User $user, string $name, $default = null) - * @method string lastActivity() - * @method void mark() - * @method Preference set(string $name, $value) - * @method Preference setForUser(User $user, string $name, $value) + * @method Collection beginsWith(User $user, string $search) + * @method bool delete(string $name) + * @method Collection findByName(string $name) + * @method Preference get(string $name, $value = null) + * @method array getArrayForUser(User $user, array $list) + * @method null|Preference getForUser(User $user, string $name, $default = null) + * @method string lastActivity() + * @method void mark() + * @method Preference set(string $name, $value) + * @method Preference setForUser(User $user, string $name, $value) */ class Preferences extends Facade { @@ -51,8 +51,6 @@ class Preferences extends Facade /** * Get the registered name of the component. - * - * @return string */ protected static function getFacadeAccessor(): string { diff --git a/app/Support/Facades/RuleForm.php b/app/Support/Facades/RuleForm.php index a13a626cac..b2aacf783f 100644 --- a/app/Support/Facades/RuleForm.php +++ b/app/Support/Facades/RuleForm.php @@ -27,14 +27,11 @@ use Illuminate\Support\Facades\Facade; /** * Class RuleForm. - * */ class RuleForm extends Facade { /** * Get the registered name of the component. - * - * @return string */ protected static function getFacadeAccessor(): string { diff --git a/app/Support/Facades/Steam.php b/app/Support/Facades/Steam.php index 89ac24b108..747f990bf0 100644 --- a/app/Support/Facades/Steam.php +++ b/app/Support/Facades/Steam.php @@ -33,24 +33,20 @@ use Illuminate\Support\Facades\Facade; * * @method string balance(Account $account, Carbon $date) * @method string balanceIgnoreVirtual(Account $account, Carbon $date) - * @method array balanceInRange(Account $account, Carbon $start, Carbon $end) - * @method array balancesByAccounts(Collection $accounts, Carbon $date) + * @method array balanceInRange(Account $account, Carbon $start, Carbon $end) + * @method array balancesByAccounts(Collection $accounts, Carbon $date) * @method decrypt(int $isEncrypted, string $value) - * @method array getLastActivities(array $accounts) - * @method string negative(string $amount) - * @method string|null opposite(string $amount = null) - * @method int phpBytes(string $string) - * @method string positive(string $amount) - * @method array balancesPerCurrencyByAccounts(Collection $accounts, Carbon $date) - * - + * @method array getLastActivities(array $accounts) + * @method string negative(string $amount) + * @method null|string opposite(string $amount = null) + * @method int phpBytes(string $string) + * @method string positive(string $amount) + * @method array balancesPerCurrencyByAccounts(Collection $accounts, Carbon $date) */ class Steam extends Facade { /** * Get the registered name of the component. - * - * @return string */ protected static function getFacadeAccessor(): string { diff --git a/app/Support/FireflyConfig.php b/app/Support/FireflyConfig.php index 86dcd29dbf..c4078dbfd0 100644 --- a/app/Support/FireflyConfig.php +++ b/app/Support/FireflyConfig.php @@ -23,65 +23,50 @@ declare(strict_types=1); namespace FireflyIII\Support; -use Cache; -use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Configuration; use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Log; /** * Class FireflyConfig. - * - */ class FireflyConfig { - /** - * @param string $name - */ public function delete(string $name): void { - $fullName = 'ff-config-' . $name; - if (Cache::has($fullName)) { - Cache::forget($fullName); + $fullName = 'ff-config-'.$name; + if (\Cache::has($fullName)) { + \Cache::forget($fullName); } Configuration::where('name', $name)->forceDelete(); } - /** - * @param string $name - * - * @return bool - */ public function has(string $name): bool { - return Configuration::where('name', $name)->count() === 1; + return 1 === Configuration::where('name', $name)->count(); } /** - * @param string $name - * @param bool|string|int|null $default + * @param null|bool|int|string $default * - * @return Configuration|null * @throws FireflyException */ public function get(string $name, $default = null): ?Configuration { - $fullName = 'ff-config-' . $name; - if (Cache::has($fullName)) { - return Cache::get($fullName); + $fullName = 'ff-config-'.$name; + if (\Cache::has($fullName)) { + return \Cache::get($fullName); } try { - /** @var Configuration|null $config */ + /** @var null|Configuration $config */ $config = Configuration::where('name', $name)->first(['id', 'name', 'data']); - } catch (QueryException | Exception $e) { + } catch (\Exception|QueryException $e) { throw new FireflyException(sprintf('Could not poll the database: %s', $e->getMessage()), 0, $e); } if (null !== $config) { - Cache::forever($fullName, $config); + \Cache::forever($fullName, $config); return $config; } @@ -94,17 +79,14 @@ class FireflyConfig } /** - * @param string $name - * @param mixed $value - * - * @return Configuration + * @param mixed $value */ public function set(string $name, $value): Configuration { try { $config = Configuration::whereName($name)->whereNull('deleted_at')->first(); } catch (QueryException $e) { - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); $item = new Configuration(); $item->name = $name; $item->data = $value; @@ -117,27 +99,24 @@ class FireflyConfig $item->name = $name; $item->data = $value; $item->save(); - Cache::forget('ff-config-' . $name); + \Cache::forget('ff-config-'.$name); return $item; } $config->data = $value; $config->save(); - Cache::forget('ff-config-' . $name); + \Cache::forget('ff-config-'.$name); return $config; } /** - * @param string $name - * @param mixed $default - * - * @return Configuration|null + * @param mixed $default */ public function getFresh(string $name, $default = null): ?Configuration { $config = Configuration::where('name', $name)->first(['id', 'name', 'data']); - if ($config) { + if (null !== $config) { return $config; } // no preference found and default is null: @@ -149,10 +128,7 @@ class FireflyConfig } /** - * @param string $name - * @param mixed $value - * - * @return Configuration + * @param mixed $value */ public function put(string $name, $value): Configuration { diff --git a/app/Support/Form/AccountForm.php b/app/Support/Form/AccountForm.php index 0710bb6967..4a379117cb 100644 --- a/app/Support/Form/AccountForm.php +++ b/app/Support/Form/AccountForm.php @@ -27,8 +27,6 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class AccountForm @@ -44,16 +42,10 @@ class AccountForm /** * Grouped dropdown list of all accounts that are valid as the destination of a withdrawal. - * - * @param string $name - * @param mixed $value - * @param array|null $options - * - * @return string */ public function activeDepositDestinations(string $name, mixed $value = null, array $options = null): string { - $types = [AccountType::MORTGAGE, AccountType::DEBT, AccountType::CREDITCARD, AccountType::LOAN, AccountType::REVENUE,]; + $types = [AccountType::MORTGAGE, AccountType::DEBT, AccountType::CREDITCARD, AccountType::LOAN, AccountType::REVENUE]; $repository = $this->getAccountRepository(); $grouped = $this->getAccountsGrouped($types, $repository); $cash = $repository->getCashAccount(); @@ -63,24 +55,18 @@ class AccountForm return $this->select($name, $grouped, $value, $options); } - /** - * @param array $types - * @param AccountRepositoryInterface|null $repository - * - * @return array - */ private function getAccountsGrouped(array $types, AccountRepositoryInterface $repository = null): array { if (null === $repository) { $repository = $this->getAccountRepository(); } $accountList = $repository->getActiveAccountsByType($types); - $liabilityTypes = [AccountType::MORTGAGE, AccountType::DEBT, AccountType::CREDITCARD, AccountType::LOAN,]; + $liabilityTypes = [AccountType::MORTGAGE, AccountType::DEBT, AccountType::CREDITCARD, AccountType::LOAN]; $grouped = []; /** @var Account $account */ foreach ($accountList as $account) { - $role = (string)$repository->getMetaValue($account, 'account_role'); + $role = (string)$repository->getMetaValue($account, 'account_role'); if (in_array($account->accountType->type, $liabilityTypes, true)) { $role = sprintf('l_%s', $account->accountType->type); } @@ -102,18 +88,12 @@ class AccountForm /** * Grouped dropdown list of all accounts that are valid as the destination of a withdrawal. - * - * @param string $name - * @param mixed $value - * @param array|null $options - * - * @return string */ public function activeWithdrawalDestinations(string $name, mixed $value = null, array $options = null): string { - $types = [AccountType::MORTGAGE, AccountType::DEBT, AccountType::CREDITCARD, AccountType::LOAN, AccountType::EXPENSE,]; - $repository = $this->getAccountRepository(); - $grouped = $this->getAccountsGrouped($types, $repository); + $types = [AccountType::MORTGAGE, AccountType::DEBT, AccountType::CREDITCARD, AccountType::LOAN, AccountType::EXPENSE]; + $repository = $this->getAccountRepository(); + $grouped = $this->getAccountsGrouped($types, $repository); $cash = $repository->getCashAccount(); $key = (string)trans('firefly.cash_account_type'); @@ -125,30 +105,28 @@ class AccountForm /** * Check list of asset accounts. * - * @param string $name - * @param array|null $options - * - * @return string * @throws FireflyException */ public function assetAccountCheckList(string $name, array $options = null): string { - $options = $options ?? []; + $options ??= []; $label = $this->label($name, $options); $options = $this->expandOptionArray($name, $label, $options); $classes = $this->getHolderClasses($name); $selected = request()->old($name) ?? []; // get all asset accounts: - $types = [AccountType::ASSET, AccountType::DEFAULT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::DEBT]; - $grouped = $this->getAccountsGrouped($types); + $types = [AccountType::ASSET, AccountType::DEFAULT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::DEBT]; + $grouped = $this->getAccountsGrouped($types); unset($options['class']); + try { $html = view('form.assetAccountCheckList', compact('classes', 'selected', 'name', 'label', 'options', 'grouped'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render assetAccountCheckList(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render assetAccountCheckList(): %s', $e->getMessage())); $html = 'Could not render assetAccountCheckList.'; + throw new FireflyException($html, 0, $e); } @@ -158,11 +136,7 @@ class AccountForm /** * Basic list of asset accounts. * - * @param string $name - * @param mixed $value - * @param array|null $options - * - * @return string + * @param mixed $value */ public function assetAccountList(string $name, $value = null, array $options = null): string { @@ -175,15 +149,11 @@ class AccountForm /** * Same list but all liabilities as well. * - * @param string $name - * @param mixed $value - * @param array|null $options - * - * @return string + * @param mixed $value */ public function longAccountList(string $name, $value = null, array $options = null): string { - $types = [AccountType::ASSET, AccountType::DEFAULT, AccountType::MORTGAGE, AccountType::DEBT, AccountType::CREDITCARD, AccountType::LOAN,]; + $types = [AccountType::ASSET, AccountType::DEFAULT, AccountType::MORTGAGE, AccountType::DEBT, AccountType::CREDITCARD, AccountType::LOAN]; $grouped = $this->getAccountsGrouped($types); return $this->select($name, $grouped, $value, $options); diff --git a/app/Support/Form/CurrencyForm.php b/app/Support/Form/CurrencyForm.php index ea44ade235..dd04390c74 100644 --- a/app/Support/Form/CurrencyForm.php +++ b/app/Support/Form/CurrencyForm.php @@ -23,13 +23,10 @@ declare(strict_types=1); namespace FireflyIII\Support\Form; -use Amount as Amt; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Class CurrencyForm @@ -41,11 +38,8 @@ class CurrencyForm use FormSupport; /** - * @param string $name - * @param mixed $value - * @param array|null $options + * @param mixed $value * - * @return string * @throws FireflyException */ public function amount(string $name, $value = null, array $options = null): string @@ -54,12 +48,6 @@ class CurrencyForm } /** - * @param string $name - * @param string $view - * @param mixed $value - * @param array|null $options - * - * @return string * @throws FireflyException */ protected function currencyField(string $name, string $view, mixed $value = null, array $options = null): string @@ -69,26 +57,27 @@ class CurrencyForm $classes = $this->getHolderClasses($name); $value = $this->fillFieldValue($name, $value); $options['step'] = 'any'; - $defaultCurrency = $options['currency'] ?? Amt::getDefaultCurrency(); - /** @var Collection $currencies */ - $currencies = app('amount')->getCurrencies(); - unset($options['currency'], $options['placeholder']); + $defaultCurrency = $options['currency'] ?? app('amount')->getDefaultCurrency(); + /** @var Collection $currencies */ + $currencies = app('amount')->getCurrencies(); + unset($options['currency'], $options['placeholder']); // perhaps the currency has been sent to us in the field $amount_currency_id_$name (amount_currency_id_amount) - $preFilled = session('preFilled'); + $preFilled = session('preFilled'); if (!is_array($preFilled)) { $preFilled = []; } - $key = 'amount_currency_id_' . $name; - $sentCurrencyId = array_key_exists($key, $preFilled) ? (int)$preFilled[$key] : $defaultCurrency->id; + $key = 'amount_currency_id_'.$name; + $sentCurrencyId = array_key_exists($key, $preFilled) ? (int)$preFilled[$key] : $defaultCurrency->id; - Log::debug(sprintf('Sent currency ID is %d', $sentCurrencyId)); + app('log')->debug(sprintf('Sent currency ID is %d', $sentCurrencyId)); // find this currency in set of currencies: foreach ($currencies as $currency) { if ($currency->id === $sentCurrencyId) { $defaultCurrency = $currency; - Log::debug(sprintf('default currency is now %s', $defaultCurrency->code)); + app('log')->debug(sprintf('default currency is now %s', $defaultCurrency->code)); + break; } } @@ -97,11 +86,13 @@ class CurrencyForm if (null !== $value && '' !== $value) { $value = app('steam')->bcround($value, $defaultCurrency->decimal_places); } + try { - $html = view('form.' . $view, compact('defaultCurrency', 'currencies', 'classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render currencyField(): %s', $e->getMessage())); + $html = view('form.'.$view, compact('defaultCurrency', 'currencies', 'classes', 'name', 'label', 'value', 'options'))->render(); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render currencyField(): %s', $e->getMessage())); $html = 'Could not render currencyField.'; + throw new FireflyException($html, 0, $e); } @@ -111,11 +102,8 @@ class CurrencyForm /** * TODO describe and cleanup. * - * @param string $name - * @param mixed $value - * @param array|null $options + * @param mixed $value * - * @return string * @throws FireflyException */ public function balanceAll(string $name, $value = null, array $options = null): string @@ -126,12 +114,8 @@ class CurrencyForm /** * TODO describe and cleanup * - * @param string $name - * @param string $view - * @param mixed $value - * @param array|null $options + * @param mixed $value * - * @return string * @throws FireflyException */ protected function allCurrencyField(string $name, string $view, $value = null, array $options = null): string @@ -141,26 +125,28 @@ class CurrencyForm $classes = $this->getHolderClasses($name); $value = $this->fillFieldValue($name, $value); $options['step'] = 'any'; - $defaultCurrency = $options['currency'] ?? Amt::getDefaultCurrency(); + $defaultCurrency = $options['currency'] ?? app('amount')->getDefaultCurrency(); + /** @var Collection $currencies */ - $currencies = app('amount')->getAllCurrencies(); + $currencies = app('amount')->getAllCurrencies(); unset($options['currency'], $options['placeholder']); // perhaps the currency has been sent to us in the field $amount_currency_id_$name (amount_currency_id_amount) - $preFilled = session('preFilled'); + $preFilled = session('preFilled'); if (!is_array($preFilled)) { $preFilled = []; } - $key = 'amount_currency_id_' . $name; - $sentCurrencyId = array_key_exists($key, $preFilled) ? (int)$preFilled[$key] : $defaultCurrency->id; + $key = 'amount_currency_id_'.$name; + $sentCurrencyId = array_key_exists($key, $preFilled) ? (int)$preFilled[$key] : $defaultCurrency->id; - Log::debug(sprintf('Sent currency ID is %d', $sentCurrencyId)); + app('log')->debug(sprintf('Sent currency ID is %d', $sentCurrencyId)); // find this currency in set of currencies: foreach ($currencies as $currency) { if ($currency->id === $sentCurrencyId) { $defaultCurrency = $currency; - Log::debug(sprintf('default currency is now %s', $defaultCurrency->code)); + app('log')->debug(sprintf('default currency is now %s', $defaultCurrency->code)); + break; } } @@ -169,11 +155,13 @@ class CurrencyForm if (null !== $value && '' !== $value) { $value = app('steam')->bcround($value, $defaultCurrency->decimal_places); } + try { - $html = view('form.' . $view, compact('defaultCurrency', 'currencies', 'classes', 'name', 'label', 'value', 'options'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render currencyField(): %s', $e->getMessage())); + $html = view('form.'.$view, compact('defaultCurrency', 'currencies', 'classes', 'name', 'label', 'value', 'options'))->render(); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render currencyField(): %s', $e->getMessage())); $html = 'Could not render currencyField.'; + throw new FireflyException($html, 0, $e); } @@ -183,11 +171,7 @@ class CurrencyForm /** * TODO cleanup and describe * - * @param string $name - * @param mixed $value - * @param array|null $options - * - * @return string + * @param mixed $value */ public function currencyList(string $name, $value = null, array $options = null): string { @@ -195,11 +179,12 @@ class CurrencyForm $currencyRepos = app(CurrencyRepositoryInterface::class); // get all currencies: - $list = $currencyRepos->get(); - $array = []; + $list = $currencyRepos->get(); + $array = []; + /** @var TransactionCurrency $currency */ foreach ($list as $currency) { - $array[$currency->id] = $currency->name . ' (' . $currency->symbol . ')'; + $array[$currency->id] = $currency->name.' ('.$currency->symbol.')'; } return $this->select($name, $array, $value, $options); @@ -208,11 +193,7 @@ class CurrencyForm /** * TODO cleanup and describe * - * @param string $name - * @param mixed $value - * @param array|null $options - * - * @return string + * @param mixed $value */ public function currencyListEmpty(string $name, $value = null, array $options = null): string { @@ -220,13 +201,14 @@ class CurrencyForm $currencyRepos = app(CurrencyRepositoryInterface::class); // get all currencies: - $list = $currencyRepos->get(); - $array = [ + $list = $currencyRepos->get(); + $array = [ 0 => (string)trans('firefly.no_currency'), ]; + /** @var TransactionCurrency $currency */ foreach ($list as $currency) { - $array[$currency->id] = $currency->name . ' (' . $currency->symbol . ')'; + $array[$currency->id] = $currency->name.' ('.$currency->symbol.')'; } return $this->select($name, $array, $value, $options); diff --git a/app/Support/Form/FormSupport.php b/app/Support/Form/FormSupport.php index ebb78e43aa..41d5b0461e 100644 --- a/app/Support/Form/FormSupport.php +++ b/app/Support/Form/FormSupport.php @@ -26,9 +26,7 @@ namespace FireflyIII\Support\Form; use Carbon\Carbon; use Carbon\Exceptions\InvalidDateException; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use Illuminate\Support\Facades\Log; use Illuminate\Support\MessageBag; -use Throwable; /** * Trait FormSupport @@ -36,76 +34,57 @@ use Throwable; trait FormSupport { /** - * @param string $name - * @param array|null $list - * @param mixed $selected - * @param array|null $options - * - * @return string + * @param mixed $selected */ public function select(string $name, array $list = null, $selected = null, array $options = null): string { - $list = $list ?? []; + $list ??= []; $label = $this->label($name, $options); $options = $this->expandOptionArray($name, $label, $options); $classes = $this->getHolderClasses($name); $selected = $this->fillFieldValue($name, $selected); unset($options['autocomplete'], $options['placeholder']); + try { $html = view('form.select', compact('classes', 'name', 'label', 'selected', 'options', 'list'))->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Could not render select(): %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Could not render select(): %s', $e->getMessage())); $html = 'Could not render select.'; } return $html; } - /** - * @param string $name - * @param array|null $options - * - * @return string - */ protected function label(string $name, array $options = null): string { - $options = $options ?? []; + $options ??= []; if (array_key_exists('label', $options)) { return $options['label']; } $name = str_replace('[]', '', $name); - return (string)trans('form.' . $name); + return (string)trans('form.'.$name); } /** - * @param string $name - * @param mixed $label - * @param array|null $options - * - * @return array + * @param mixed $label */ protected function expandOptionArray(string $name, $label, array $options = null): array { - $options = $options ?? []; + $options ??= []; $name = str_replace('[]', '', $name); $options['class'] = 'form-control'; - $options['id'] = 'ffInput_' . $name; + $options['id'] = 'ffInput_'.$name; $options['autocomplete'] = 'off'; $options['placeholder'] = ucfirst($label); return $options; } - /** - * @param string $name - * - * @return string - */ protected function getHolderClasses(string $name): string { // Get errors from session: - /** @var MessageBag $errors */ + /** @var null|MessageBag $errors */ $errors = session('errors'); $classes = 'form-group'; @@ -117,8 +96,7 @@ trait FormSupport } /** - * @param string $name - * @param mixed|null $value + * @param null|mixed $value * * @return mixed */ @@ -140,25 +118,20 @@ trait FormSupport return $value; } - /** - * @return AccountRepositoryInterface - */ protected function getAccountRepository(): AccountRepositoryInterface { return app(AccountRepositoryInterface::class); } - /** - * @return Carbon - */ protected function getDate(): Carbon { /** @var Carbon $date */ $date = null; + try { $date = today(config('app.timezone')); - } catch (InvalidDateException $e) { - Log::error($e->getMessage()); + } catch (InvalidDateException $e) { // @phpstan-ignore-line + app('log')->error($e->getMessage()); } return $date; diff --git a/app/Support/Form/PiggyBankForm.php b/app/Support/Form/PiggyBankForm.php index 2f7e865483..0bd0d3c311 100644 --- a/app/Support/Form/PiggyBankForm.php +++ b/app/Support/Form/PiggyBankForm.php @@ -38,11 +38,7 @@ class PiggyBankForm /** * TODO cleanup and describe * - * @param string $name - * @param mixed $value - * @param array|null $options - * - * @return string + * @param mixed $value */ public function piggyBankList(string $name, $value = null, array $options = null): string { @@ -62,16 +58,17 @@ class PiggyBankForm ], ], ]; + /** @var PiggyBank $piggy */ foreach ($piggyBanks as $piggy) { - $group = $piggy->objectGroups->first(); - $groupTitle = null; - $groupOrder = 0; + $group = $piggy->objectGroups->first(); + $groupTitle = null; + $groupOrder = 0; if (null !== $group) { $groupTitle = $group->title; $groupOrder = $group->order; } - $subList[$groupOrder] = $subList[$groupOrder] ?? [ + $subList[$groupOrder] ??= [ 'group' => [ 'title' => $groupTitle, ], diff --git a/app/Support/Form/RuleForm.php b/app/Support/Form/RuleForm.php index 577f34dc6b..4c58209f79 100644 --- a/app/Support/Form/RuleForm.php +++ b/app/Support/Form/RuleForm.php @@ -25,8 +25,6 @@ namespace FireflyIII\Support\Form; use FireflyIII\Models\RuleGroup; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; -use Form; -use Illuminate\Support\HtmlString; /** * Class RuleForm @@ -36,21 +34,15 @@ class RuleForm { use FormSupport; - /** - * @param string $name - * @param mixed $value - * @param array|null $options - * - * @return string - */ public function ruleGroupList(string $name, mixed $value = null, array $options = null): string { /** @var RuleGroupRepositoryInterface $groupRepos */ $groupRepos = app(RuleGroupRepositoryInterface::class); // get all currencies: - $list = $groupRepos->get(); - $array = []; + $list = $groupRepos->get(); + $array = []; + /** @var RuleGroup $group */ foreach ($list as $group) { $array[$group->id] = $group->title; @@ -60,24 +52,22 @@ class RuleForm } /** - * @param string $name - * @param null $value - * @param array|null $options - * - * @return string + * @param null $value */ public function ruleGroupListWithEmpty(string $name, $value = null, array $options = null): string { - $options = $options ?? []; + $options ??= []; $options['class'] = 'form-control'; + /** @var RuleGroupRepositoryInterface $groupRepos */ - $groupRepos = app(RuleGroupRepositoryInterface::class); + $groupRepos = app(RuleGroupRepositoryInterface::class); // get all currencies: - $list = $groupRepos->get(); - $array = [ + $list = $groupRepos->get(); + $array = [ 0 => (string)trans('firefly.none_in_select_list'), ]; + /** @var RuleGroup $group */ foreach ($list as $group) { if (array_key_exists('hidden', $options) && (int)$options['hidden'] !== $group->id) { diff --git a/app/Support/Http/Api/AccountBalanceGrouped.php b/app/Support/Http/Api/AccountBalanceGrouped.php new file mode 100644 index 0000000000..286620deef --- /dev/null +++ b/app/Support/Http/Api/AccountBalanceGrouped.php @@ -0,0 +1,245 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Support\Http\Api; + +use Carbon\Carbon; +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Models\TransactionType; +use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; + +/** + * Class AccountBalanceGrouped + */ +class AccountBalanceGrouped +{ + private array $accountIds; + private string $carbonFormat; + private array $currencies = []; + private array $data = []; + private TransactionCurrency $default; + private Carbon $end; + private array $journals = []; + private string $preferredRange; + private Carbon $start; + + /** + * Convert the given input to a chart compatible array. + */ + public function convertToChartData(): array + { + $chartData = []; + + // loop2: loop this data, make chart bars for each currency: + /** @var array $currency */ + foreach ($this->data as $currency) { + // income and expense array prepped: + $income = [ + 'label' => 'earned', + 'currency_id' => (string)$currency['currency_id'], + 'currency_symbol' => $currency['currency_symbol'], + 'currency_code' => $currency['currency_code'], + 'currency_decimal_places' => $currency['currency_decimal_places'], + 'native_currency_id' => (string)$currency['native_currency_id'], + 'native_currency_symbol' => $currency['native_currency_symbol'], + 'native_currency_code' => $currency['native_currency_code'], + 'native_currency_decimal_places' => $currency['native_currency_decimal_places'], + 'start' => $this->start->toAtomString(), + 'end' => $this->end->toAtomString(), + 'period' => $this->preferredRange, + 'entries' => [], + 'native_entries' => [], + ]; + $expense = [ + 'label' => 'spent', + 'currency_id' => (string)$currency['currency_id'], + 'currency_symbol' => $currency['currency_symbol'], + 'currency_code' => $currency['currency_code'], + 'currency_decimal_places' => $currency['currency_decimal_places'], + 'native_currency_id' => (string)$currency['native_currency_id'], + 'native_currency_symbol' => $currency['native_currency_symbol'], + 'native_currency_code' => $currency['native_currency_code'], + 'native_currency_decimal_places' => $currency['native_currency_decimal_places'], + 'start' => $this->start->toAtomString(), + 'end' => $this->end->toAtomString(), + 'period' => $this->preferredRange, + 'entries' => [], + 'native_entries' => [], + ]; + // loop all possible periods between $start and $end, and add them to the correct dataset. + $currentStart = clone $this->start; + while ($currentStart <= $this->end) { + $key = $currentStart->format($this->carbonFormat); + $label = $currentStart->toAtomString(); + // normal entries + $income['entries'][$label] = app('steam')->bcround($currency[$key]['earned'] ?? '0', $currency['currency_decimal_places']); + $expense['entries'][$label] = app('steam')->bcround($currency[$key]['spent'] ?? '0', $currency['currency_decimal_places']); + + // converted entries + $income['native_entries'][$label] = app('steam')->bcround($currency[$key]['native_earned'] ?? '0', $currency['native_currency_decimal_places']); + $expense['native_entries'][$label] = app('steam')->bcround($currency[$key]['native_spent'] ?? '0', $currency['native_currency_decimal_places']); + + // next loop + $currentStart = app('navigation')->addPeriod($currentStart, $this->preferredRange, 0); + } + + $chartData[] = $income; + $chartData[] = $expense; + } + + return $chartData; + } + + /** + * Group the given journals by currency and then by period. + * If they are part of a set of accounts this basically means it's balance chart. + */ + public function groupByCurrencyAndPeriod(): void + { + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); + $converter = new ExchangeRateConverter(); + + // loop. group by currency and by period. + /** @var array $journal */ + foreach ($this->journals as $journal) { + // format the date according to the period + $period = $journal['date']->format($this->carbonFormat); + $currencyId = (int)$journal['currency_id']; + $currency = $this->currencies[$currencyId] ?? TransactionCurrency::find($currencyId); + $this->currencies[$currencyId] = $currency; // may just re-assign itself, don't mind. + + // set the array with monetary info, if it does not exist. + $this->data[$currencyId] ??= [ + 'currency_id' => (string)$currencyId, + 'currency_symbol' => $journal['currency_symbol'], + 'currency_code' => $journal['currency_code'], + 'currency_name' => $journal['currency_name'], + 'currency_decimal_places' => $journal['currency_decimal_places'], + // native currency info (could be the same) + 'native_currency_id' => (string)$this->default->id, + 'native_currency_code' => $this->default->code, + 'native_currency_symbol' => $this->default->symbol, + 'native_currency_decimal_places' => $this->default->decimal_places, + ]; + + // set the array (in monetary info) with spent/earned in this $period, if it does not exist. + $this->data[$currencyId][$period] ??= [ + 'period' => $period, + 'spent' => '0', + 'earned' => '0', + 'native_spent' => '0', + 'native_earned' => '0', + ]; + // is this journal's amount in- our outgoing? + $key = 'spent'; + $amount = app('steam')->negative($journal['amount']); + // deposit = incoming + // transfer or reconcile or opening balance, and these accounts are the destination. + if ( + TransactionType::DEPOSIT === $journal['transaction_type_type'] + + || ( + ( + TransactionType::TRANSFER === $journal['transaction_type_type'] + || TransactionType::RECONCILIATION === $journal['transaction_type_type'] + || TransactionType::OPENING_BALANCE === $journal['transaction_type_type'] + ) + && in_array($journal['destination_account_id'], $this->accountIds, true) + ) + ) { + $key = 'earned'; + $amount = app('steam')->positive($journal['amount']); + } + + // get conversion rate + try { + $rate = $converter->getCurrencyRate($currency, $this->default, $journal['date']); + } catch (FireflyException $e) { + app('log')->error($e->getMessage()); + $rate = '1'; + } + $amountConverted = bcmul($amount, $rate); + + // perhaps transaction already has the foreign amount in the native currency. + if ((int)$journal['foreign_currency_id'] === $this->default->id) { + $amountConverted = $journal['foreign_amount'] ?? '0'; + $amountConverted = 'earned' === $key ? app('steam')->positive($amountConverted) : app('steam')->negative($amountConverted); + } + + // add normal entry + $this->data[$currencyId][$period][$key] = bcadd($this->data[$currencyId][$period][$key], $amount); + + // add converted entry + $convertedKey = sprintf('native_%s', $key); + $this->data[$currencyId][$period][$convertedKey] = bcadd($this->data[$currencyId][$period][$convertedKey], $amountConverted); + } + $converter->summarize(); + } + + public function setAccounts(Collection $accounts): void + { + $this->accountIds = $accounts->pluck('id')->toArray(); + } + + public function setDefault(TransactionCurrency $default): void + { + $this->default = $default; + $defaultCurrencyId = $default->id; + $this->currencies = [$default->id => $default]; // currency cache + $this->data[$defaultCurrencyId] = [ + 'currency_id' => (string)$defaultCurrencyId, + 'currency_symbol' => $default->symbol, + 'currency_code' => $default->code, + 'currency_name' => $default->name, + 'currency_decimal_places' => $default->decimal_places, + 'native_currency_id' => (string)$defaultCurrencyId, + 'native_currency_symbol' => $default->symbol, + 'native_currency_code' => $default->code, + 'native_currency_name' => $default->name, + 'native_currency_decimal_places' => $default->decimal_places, + ]; + } + + public function setEnd(Carbon $end): void + { + $this->end = $end; + } + + public function setJournals(array $journals): void + { + $this->journals = $journals; + } + + public function setPreferredRange(string $preferredRange): void + { + $this->preferredRange = $preferredRange; + $this->carbonFormat = app('navigation')->preferredCarbonFormatByPeriod($preferredRange); + } + + public function setStart(Carbon $start): void + { + $this->start = $start; + } +} diff --git a/app/Support/Http/Api/AccountFilter.php b/app/Support/Http/Api/AccountFilter.php index 5aeeec5cd1..7c41a9d6c5 100644 --- a/app/Support/Http/Api/AccountFilter.php +++ b/app/Support/Http/Api/AccountFilter.php @@ -27,17 +27,11 @@ use FireflyIII\Models\AccountType; /** * Trait AccountFilter - * - */ trait AccountFilter { /** * All the available types. - * - * @param string $type - * - * @return array */ protected function mapAccountTypes(string $type): array { @@ -56,11 +50,11 @@ trait AccountFilter AccountType::DEBT, AccountType::MORTGAGE, ], - 'asset' => [AccountType::DEFAULT, AccountType::ASSET,], - 'cash' => [AccountType::CASH,], - 'expense' => [AccountType::EXPENSE, AccountType::BENEFICIARY,], - 'revenue' => [AccountType::REVENUE,], - 'special' => [AccountType::CASH, AccountType::INITIAL_BALANCE, AccountType::IMPORT, AccountType::RECONCILIATION,], + 'asset' => [AccountType::DEFAULT, AccountType::ASSET], + 'cash' => [AccountType::CASH], + 'expense' => [AccountType::EXPENSE, AccountType::BENEFICIARY], + 'revenue' => [AccountType::REVENUE], + 'special' => [AccountType::CASH, AccountType::INITIAL_BALANCE, AccountType::IMPORT, AccountType::RECONCILIATION], 'hidden' => [AccountType::INITIAL_BALANCE, AccountType::IMPORT, AccountType::RECONCILIATION], 'liability' => [AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD], 'liabilities' => [AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::CREDITCARD], diff --git a/app/Support/Http/Api/ApiSupport.php b/app/Support/Http/Api/ApiSupport.php index 04a6037de2..76d371657e 100644 --- a/app/Support/Http/Api/ApiSupport.php +++ b/app/Support/Http/Api/ApiSupport.php @@ -28,17 +28,11 @@ use Illuminate\Support\Collection; /** * Trait ApiSupport - * - */ trait ApiSupport { /** * Small helper function for the revenue and expense account charts. - * - * @param array $names - * - * @return array */ protected function expandNames(array $names): array { @@ -52,14 +46,11 @@ trait ApiSupport /** * Small helper function for the revenue and expense account charts. - * - * @param Collection $accounts - * - * @return array */ protected function extractNames(Collection $accounts): array { $return = []; + /** @var Account $account */ foreach ($accounts as $account) { $return[$account->id] = $account->name; diff --git a/app/Support/Http/Api/CleansChartData.php b/app/Support/Http/Api/CleansChartData.php index bda87b5a7c..b4f1bb2bfe 100644 --- a/app/Support/Http/Api/CleansChartData.php +++ b/app/Support/Http/Api/CleansChartData.php @@ -1,6 +1,5 @@ enabled = false; + $this->enabled = false; if (false === $this->enabled) { $set['converted'] = false; + return $set; } $set['converted'] = true; + /** @var TransactionCurrency $native */ - $native = app('amount')->getDefaultCurrency(); - $currency = $this->getCurrency((int)$set['currency_id']); + $native = app('amount')->getDefaultCurrency(); + $currency = $this->getCurrency((int)$set['currency_id']); if ($native->id === $currency->id) { - $set['native_id'] = (string)$currency->id; - $set['native_code'] = $currency->code; - $set['native_symbol'] = $currency->symbol; - $set['native_decimal_places'] = $currency->decimal_places; + $set['native_currency_id'] = (string)$currency->id; + $set['native_currency_code'] = $currency->code; + $set['native_currency_symbol'] = $currency->symbol; + $set['native_currency_decimal_places'] = $currency->decimal_places; + return $set; } foreach ($set['entries'] as $date => $entry) { - $carbon = Carbon::createFromFormat(DateTimeInterface::ATOM, $date); - $rate = $this->getRate($currency, $native, $carbon); - $rate = '0' === $rate ? '1' : $rate; + $carbon = Carbon::createFromFormat(\DateTimeInterface::ATOM, $date); + $rate = $this->getRate($currency, $native, $carbon); + $rate = '0' === $rate ? '1' : $rate; app('log')->debug(sprintf('bcmul("%s", "%s")', (string)$entry, $rate)); $set['entries'][$date] = (float)bcmul((string)$entry, $rate); } + return $set; } /** - * @return void * @deprecated */ private function getPreference(): void @@ -89,9 +85,6 @@ trait ConvertsExchangeRates } /** - * @param int $currencyId - * - * @return TransactionCurrency * @deprecated */ private function getCurrency(int $currencyId): TransactionCurrency @@ -100,17 +93,14 @@ trait ConvertsExchangeRates if (null === $result) { return app('amount')->getDefaultCurrency(); } + return $result; } - /** * For a sum of entries, get the exchange rate to the native currency of * the user. * - * @param array $entries - * - * @return array * @deprecated */ public function cerSum(array $entries): array @@ -122,59 +112,55 @@ trait ConvertsExchangeRates // if false, return the same array without conversion info if (false === $this->enabled) { $return = []; + /** @var array $entry */ foreach ($entries as $entry) { $entry['converted'] = false; $return[] = $entry; } + return $return; } - /** @var TransactionCurrency $native */ $native = app('amount')->getDefaultCurrency(); $return = []; + /** @var array $entry */ foreach ($entries as $entry) { $currency = $this->getCurrency((int)$entry['id']); if ($currency->id !== $native->id) { - $amount = $this->convertAmount($entry['sum'], $currency, $native); - $entry['converted'] = true; - $entry['native_sum'] = $amount; - $entry['native_id'] = (string)$native->id; - $entry['native_name'] = $native->name; - $entry['native_symbol'] = $native->symbol; - $entry['native_code'] = $native->code; - $entry['native_decimal_places'] = $native->decimal_places; + $amount = $this->convertAmount($entry['sum'], $currency, $native); + $entry['converted'] = true; + $entry['native_sum'] = $amount; + $entry['native_currency_id'] = (string)$native->id; + $entry['native_currency_name'] = $native->name; + $entry['native_currency_symbol'] = $native->symbol; + $entry['native_currency_code'] = $native->code; + $entry['native_currency_decimal_places'] = $native->decimal_places; } if ($currency->id === $native->id) { - $entry['converted'] = false; - $entry['native_sum'] = $entry['sum']; - $entry['native_id'] = (string)$native->id; - $entry['native_name'] = $native->name; - $entry['native_symbol'] = $native->symbol; - $entry['native_code'] = $native->code; - $entry['native_decimal_places'] = $native->decimal_places; + $entry['converted'] = false; + $entry['native_sum'] = $entry['sum']; + $entry['native_currency_id'] = (string)$native->id; + $entry['native_currency_name'] = $native->name; + $entry['native_currency_symbol'] = $native->symbol; + $entry['native_currency_code'] = $native->code; + $entry['native_currency_decimal_places'] = $native->decimal_places; } $return[] = $entry; } + return $return; } /** - * @param string $amount - * @param TransactionCurrency $from - * @param TransactionCurrency $to - * @param Carbon|null $date - * - * @return string - * * @deprecated */ private function convertAmount(string $amount, TransactionCurrency $from, TransactionCurrency $to, ?Carbon $date = null): string { app('log')->debug(sprintf('Converting %s from %s to %s', $amount, $from->code, $to->code)); - $date = $date ?? today(config('app.timezone')); + $date ??= today(config('app.timezone')); $rate = $this->getRate($from, $to, $date); return bcmul($amount, $rate); diff --git a/app/Support/Http/Api/ExchangeRateConverter.php b/app/Support/Http/Api/ExchangeRateConverter.php index 2051366405..05fa2e001d 100644 --- a/app/Support/Http/Api/ExchangeRateConverter.php +++ b/app/Support/Http/Api/ExchangeRateConverter.php @@ -1,6 +1,5 @@ getCurrencyRate($from, $to, $date); + return bcmul($amount, $rate); } /** - * @param TransactionCurrency $from - * @param TransactionCurrency $to - * @param Carbon $date - * - * @return string * @throws FireflyException */ public function getCurrencyRate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): string { + Log::debug('getCurrencyRate()'); $rate = $this->getRate($from, $to, $date); + return '0' === $rate ? '1' : $rate; } /** - * @param TransactionCurrency $from - * @param TransactionCurrency $to - * @param Carbon $date - * - * @return string * @throws FireflyException */ private function getRate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): string { + Log::debug('getRate()'); + if ($this->isPrepared && $this->noPreparedRates) { + $fallback = $this->fallback[$from->id][$to->id] ?? '0'; + Log::debug(sprintf('Return fallback rate from #%d to #%d on %s: %s', $from->id, $to->id, $date->format('Y-m-d'), $fallback)); + + return $fallback; + } // first attempt: - $rate = $this->getFromDB((int)$from->id, (int)$to->id, $date->format('Y-m-d')); + $rate = $this->getFromDB($from->id, $to->id, $date->format('Y-m-d')); if (null !== $rate) { return $rate; } // no result. perhaps the other way around? - $rate = $this->getFromDB((int)$to->id, (int)$from->id, $date->format('Y-m-d')); + $rate = $this->getFromDB($to->id, $from->id, $date->format('Y-m-d')); if (null !== $rate) { return bcdiv('1', $rate); } @@ -93,108 +93,218 @@ class ExchangeRateConverter $second = $this->getEuroRate($to, $date); // combined (if present), they can be used to calculate the necessary conversion rate. - if ('0' === $first || '0' === $second) { + if (0 === bccomp('0', $first) || 0 === bccomp('0', $second)) { + Log::warning(sprintf('$first is "%s" and $second is "%s"', $first, $second)); + return '0'; } $second = bcdiv('1', $second); + return bcmul($first, $second); } - /** - * @param int $from - * @param int $to - * @param string $date - * - * @return string|null - */ private function getFromDB(int $from, int $to, string $date): ?string { - $key = sprintf('cer-%d-%d-%s', $from, $to, $date); + Log::debug('getFromDB()'); + if ($from === $to) { + return '1'; + } + $key = sprintf('cer-%d-%d-%s', $from, $to, $date); - $cache = new CacheProperties(); + // perhaps the rate has been cached during this particular run + $preparedRate = $this->prepared[$date][$from][$to] ?? null; + if (null !== $preparedRate && 0 !== bccomp('0', $preparedRate)) { + Log::debug(sprintf('Found prepared rate from #%d to #%d on %s.', $from, $to, $date)); + + return $preparedRate; + } + + $cache = new CacheProperties(); $cache->addProperty($key); if ($cache->has()) { $rate = $cache->get(); if ('' === $rate) { return null; } + Log::debug(sprintf('Found cached rate from #%d to #%d on %s.', $from, $to, $date)); + return $rate; } - app('log')->debug(sprintf('Going to get rate #%d->#%d (%s) from DB.', $from, $to, $date)); - /** @var CurrencyExchangeRate $result */ - $result = auth()->user() - ->currencyExchangeRates() - ->where('from_currency_id', $from) - ->where('to_currency_id', $to) - ->where('date', '<=', $date) - ->orderBy('date', 'DESC') - ->first(); - $rate = (string)$result?->rate; - $cache->store($rate); + /** @var null|CurrencyExchangeRate $result */ + $result = auth()->user() + ->currencyExchangeRates() + ->where('from_currency_id', $from) + ->where('to_currency_id', $to) + ->where('date', '<=', $date) + ->orderBy('date', 'DESC') + ->first() + ; + ++$this->queryCount; + $rate = (string)$result?->rate; + if ('' === $rate) { + app('log')->debug(sprintf('Found no rate for #%d->#%d (%s) in the DB.', $from, $to, $date)); + return null; } + if (0 === bccomp('0', $rate)) { + app('log')->debug(sprintf('Found rate for #%d->#%d (%s) in the DB, but it\'s zero.', $from, $to, $date)); + + return null; + } + app('log')->debug(sprintf('Found rate for #%d->#%d (%s) in the DB: %s.', $from, $to, $date, $rate)); + $cache->store($rate); + + // if the rate has not been cached during this particular run, save it + $this->prepared[$date] ??= [ + $from => [ + $to => $rate, + ], + ]; + // also save the exchange rate the other way around: + $this->prepared[$date] ??= [ + $to => [ + $from => bcdiv('1', $rate), + ], + ]; + return $rate; } - /** - * @param TransactionCurrency $currency - * @param Carbon $date - * - * @return string * @throws FireflyException - * */ private function getEuroRate(TransactionCurrency $currency, Carbon $date): string { + Log::debug('getEuroRate()'); $euroId = $this->getEuroId(); - if ($euroId === (int)$currency->id) { + if ($euroId === $currency->id) { return '1'; } - $rate = $this->getFromDB((int)$currency->id, $euroId, $date->format('Y-m-d')); + $rate = $this->getFromDB($currency->id, $euroId, $date->format('Y-m-d')); if (null !== $rate) { // app('log')->debug(sprintf('Rate for %s to EUR is %s.', $currency->code, $rate)); return $rate; } - $rate = $this->getFromDB($euroId, (int)$currency->id, $date->format('Y-m-d')); + $rate = $this->getFromDB($euroId, $currency->id, $date->format('Y-m-d')); if (null !== $rate) { return bcdiv('1', $rate); // app('log')->debug(sprintf('Inverted rate for %s to EUR is %s.', $currency->code, $rate)); - //return $rate; + // return $rate; } // grab backup values from config file: $backup = config(sprintf('cer.rates.%s', $currency->code)); if (null !== $backup) { return bcdiv('1', (string)$backup); // app('log')->debug(sprintf('Backup rate for %s to EUR is %s.', $currency->code, $backup)); - //return $backup; + // return $backup; } // app('log')->debug(sprintf('No rate for %s to EUR.', $currency->code)); return '0'; } - /** - * @return int * @throws FireflyException */ private function getEuroId(): int { + Log::debug('getEuroId()'); $cache = new CacheProperties(); $cache->addProperty('cer-euro-id'); if ($cache->has()) { return (int)$cache->get(); } - $euro = TransactionCurrency::whereCode('EUR')->first(); + $euro = TransactionCurrency::whereCode('EUR')->first(); + ++$this->queryCount; if (null === $euro) { throw new FireflyException('Cannot find EUR in system, cannot do currency conversion.'); } - $cache->store((int)$euro->id); - return (int)$euro->id; + $cache->store($euro->id); + + return $euro->id; + } + + /** + * @throws FireflyException + */ + public function prepare(TransactionCurrency $from, TransactionCurrency $to, Carbon $start, Carbon $end): void + { + Log::debug('prepare()'); + $start->startOfDay(); + $end->endOfDay(); + Log::debug(sprintf('Preparing for %s to %s between %s and %s', $from->code, $to->code, $start->format('Y-m-d'), $end->format('Y-m-d'))); + $set = auth()->user() + ->currencyExchangeRates() + ->where('from_currency_id', $from->id) + ->where('to_currency_id', $to->id) + ->where('date', '<=', $end->format('Y-m-d')) + ->where('date', '>=', $start->format('Y-m-d')) + ->orderBy('date', 'DESC')->get() + ; + ++$this->queryCount; + if (0 === $set->count()) { + Log::debug('No prepared rates found in this period, use the fallback'); + $this->fallback($from, $to, $start); + $this->noPreparedRates = true; + $this->isPrepared = true; + Log::debug('prepare DONE()'); + + return; + } + $this->isPrepared = true; + + // so there is a fallback just in case. Now loop the set of rates we DO have. + $temp = []; + $count = 0; + foreach ($set as $rate) { + $date = $rate->date->format('Y-m-d'); + $temp[$date] ??= [ + $from->id => [ + $to->id => $rate->rate, + ], + ]; + ++$count; + } + Log::debug(sprintf('Found %d rates in this period.', $count)); + $currentStart = clone $start; + while ($currentStart->lte($end)) { + $currentDate = $currentStart->format('Y-m-d'); + $this->prepared[$currentDate] ??= []; + $fallback = $temp[$currentDate][$from->id][$to->id] ?? $this->fallback[$from->id][$to->id] ?? '0'; + if (0 === count($this->prepared[$currentDate]) && 0 !== bccomp('0', $fallback)) { + // fill from temp or fallback or from temp (see before) + $this->prepared[$currentDate][$from->id][$to->id] = $fallback; + } + $currentStart->addDay(); + } + } + + /** + * If there are no exchange rate in the "prepare" array, future searches for any exchange rate + * will result in nothing: otherwise the preparation had been unnecessary. So, to fix this Firefly III + * will set two fallback currency exchange rates, A > B and B > A using the regular getCurrencyRate method. + * + * This method in turn will fall back on the default exchange rate (if present) or on "1" if necessary. + * + * @throws FireflyException + */ + private function fallback(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): void + { + Log::debug('fallback()'); + $fallback = $this->getRate($from, $to, $date); + $fallback = 0 === bccomp('0', $fallback) ? '1' : $fallback; + $this->fallback[$from->id][$to->id] = $fallback; + $this->fallback[$to->id][$from->id] = bcdiv('1', $fallback); + Log::debug(sprintf('Fallback rate %s > %s = %s', $from->code, $to->code, $fallback)); + Log::debug(sprintf('Fallback rate %s > %s = %s', $to->code, $from->code, bcdiv('1', $fallback))); + } + + public function summarize(): void + { + Log::debug(sprintf('ExchangeRateConverter ran %d queries.', $this->queryCount)); } } diff --git a/app/Support/Http/Api/SummaryBalanceGrouped.php b/app/Support/Http/Api/SummaryBalanceGrouped.php new file mode 100644 index 0000000000..ff807803b9 --- /dev/null +++ b/app/Support/Http/Api/SummaryBalanceGrouped.php @@ -0,0 +1,139 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Support\Http\Api; + +use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; +use Illuminate\Support\Facades\Log; + +class SummaryBalanceGrouped +{ + private const string SUM = 'sum'; + private array $amounts = []; + private array $currencies; + private CurrencyRepositoryInterface $currencyRepository; + private TransactionCurrency $default; + private array $keys; + + public function __construct() + { + $this->keys = [self::SUM]; + $this->currencies = []; + $this->currencyRepository = app(CurrencyRepositoryInterface::class); + } + + public function groupData(): array + { + Log::debug('Now going to group data.'); + $return = []; + foreach ($this->keys as $key) { + $title = match ($key) { + 'sum' => 'balance', + 'expense' => 'spent', + 'income' => 'earned', + default => 'something' + }; + + $return[] = [ + 'key' => sprintf('%s-in-native', $title), + 'value' => $this->amounts[$key]['native'] ?? '0', + 'currency_id' => (string)$this->default->id, + 'currency_code' => $this->default->code, + 'currency_symbol' => $this->default->symbol, + 'currency_decimal_places' => $this->default->decimal_places, + ]; + } + // loop 3: format amounts: + $currencyIds = array_keys($this->amounts[self::SUM] ?? []); + foreach ($currencyIds as $currencyId) { + if ('native' === $currencyId) { + // skip native entries. + continue; + } + $currencyId = (int)$currencyId; + $currency = $this->currencies[$currencyId] ?? $this->currencyRepository->find($currencyId); + $this->currencies[$currencyId] = $currency; + // create objects for big array. + foreach ($this->keys as $key) { + $title = match ($key) { + 'sum' => 'balance', + 'expense' => 'spent', + 'income' => 'earned', + default => 'something' + }; + $return[] = [ + 'key' => sprintf('%s-in-%s', $title, $currency->code), + 'value' => $this->amounts[$key][$currencyId] ?? '0', + 'currency_id' => (string)$currency->id, + 'currency_code' => $currency->code, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, + ]; + } + } + + return $return; + } + + public function groupTransactions(string $key, array $journals): void + { + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); + Log::debug(sprintf('Now in groupTransactions with key "%s" and %d journal(s)', $key, count($journals))); + $converter = new ExchangeRateConverter(); + $this->keys[] = $key; + $multiplier = 'income' === $key ? '-1' : '1'; + + /** @var array $journal */ + foreach ($journals as $journal) { + // transaction info: + $currencyId = (int)$journal['currency_id']; + $amount = bcmul($journal['amount'], $multiplier); + $currency = $this->currencies[$currencyId] ?? TransactionCurrency::find($currencyId); + $this->currencies[$currencyId] = $currency; + $nativeAmount = $converter->convert($currency, $this->default, $journal['date'], $amount); + if ((int)$journal['foreign_currency_id'] === $this->default->id) { + // use foreign amount instead + $nativeAmount = $journal['foreign_amount']; + } + // prep the arrays + $this->amounts[$key] ??= []; + $this->amounts[$key][$currencyId] ??= '0'; + $this->amounts[$key]['native'] ??= '0'; + $this->amounts[self::SUM][$currencyId] ??= '0'; + $this->amounts[self::SUM]['native'] ??= '0'; + + // add values: + $this->amounts[$key][$currencyId] = bcadd($this->amounts[$key][$currencyId], $amount); + $this->amounts[self::SUM][$currencyId] = bcadd($this->amounts[self::SUM][$currencyId], $amount); + $this->amounts[$key]['native'] = bcadd($this->amounts[$key]['native'], $nativeAmount); + $this->amounts[self::SUM]['native'] = bcadd($this->amounts[self::SUM]['native'], $nativeAmount); + } + $converter->summarize(); + } + + public function setDefault(TransactionCurrency $default): void + { + $this->default = $default; + } +} diff --git a/app/Support/Http/Api/TransactionFilter.php b/app/Support/Http/Api/TransactionFilter.php index 3542749cdd..0e5695c035 100644 --- a/app/Support/Http/Api/TransactionFilter.php +++ b/app/Support/Http/Api/TransactionFilter.php @@ -27,17 +27,11 @@ use FireflyIII\Models\TransactionType; /** * Trait TransactionFilter - * - */ trait TransactionFilter { /** * All the types you can request. - * - * @param string $type - * - * @return array */ protected function mapTransactionTypes(string $type): array { @@ -49,27 +43,28 @@ trait TransactionFilter TransactionType::OPENING_BALANCE, TransactionType::RECONCILIATION, ], - 'withdrawal' => [TransactionType::WITHDRAWAL,], - 'withdrawals' => [TransactionType::WITHDRAWAL,], - 'expense' => [TransactionType::WITHDRAWAL,], - 'expenses' => [TransactionType::WITHDRAWAL,], - 'income' => [TransactionType::DEPOSIT,], - 'deposit' => [TransactionType::DEPOSIT,], - 'deposits' => [TransactionType::DEPOSIT,], - 'transfer' => [TransactionType::TRANSFER,], - 'transfers' => [TransactionType::TRANSFER,], - 'opening_balance' => [TransactionType::OPENING_BALANCE,], - 'reconciliation' => [TransactionType::RECONCILIATION,], - 'reconciliations' => [TransactionType::RECONCILIATION,], - 'special' => [TransactionType::OPENING_BALANCE, TransactionType::RECONCILIATION,], - 'specials' => [TransactionType::OPENING_BALANCE, TransactionType::RECONCILIATION,], - 'default' => [TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER,], + 'withdrawal' => [TransactionType::WITHDRAWAL], + 'withdrawals' => [TransactionType::WITHDRAWAL], + 'expense' => [TransactionType::WITHDRAWAL], + 'expenses' => [TransactionType::WITHDRAWAL], + 'income' => [TransactionType::DEPOSIT], + 'deposit' => [TransactionType::DEPOSIT], + 'deposits' => [TransactionType::DEPOSIT], + 'transfer' => [TransactionType::TRANSFER], + 'transfers' => [TransactionType::TRANSFER], + 'opening_balance' => [TransactionType::OPENING_BALANCE], + 'reconciliation' => [TransactionType::RECONCILIATION], + 'reconciliations' => [TransactionType::RECONCILIATION], + 'special' => [TransactionType::OPENING_BALANCE, TransactionType::RECONCILIATION], + 'specials' => [TransactionType::OPENING_BALANCE, TransactionType::RECONCILIATION], + 'default' => [TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::TRANSFER], ]; $return = []; $parts = explode(',', $type); foreach ($parts as $part) { $return = array_merge($return, $types[$part] ?? $types['default']); } + return array_unique($return); } } diff --git a/app/Support/Http/Api/ValidatesUserGroupTrait.php b/app/Support/Http/Api/ValidatesUserGroupTrait.php index abc8666155..5a698ce75c 100644 --- a/app/Support/Http/Api/ValidatesUserGroupTrait.php +++ b/app/Support/Http/Api/ValidatesUserGroupTrait.php @@ -37,32 +37,35 @@ trait ValidatesUserGroupTrait /** * This check does not validate which rights the user has, that comes later. * - * @param Request $request - * - * @return UserGroup|null * @throws FireflyException */ protected function validateUserGroup(Request $request): ?UserGroup { if (!auth()->check()) { app('log')->debug('validateUserGroup: user is not logged in, return NULL.'); + return null; } + /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); if (!$request->has('user_group_id')) { $group = $user->userGroup; - app('log')->debug(sprintf('validateUserGroup: no user group submitted, return default group #%d.', $group->id)); + app('log')->debug(sprintf('validateUserGroup: no user group submitted, return default group #%d.', $group?->id)); + return $group; } - $groupId = (int)$request->get('user_group_id'); - /** @var GroupMembership|null $membership */ + $groupId = (int)$request->get('user_group_id'); + + /** @var null|GroupMembership $membership */ $membership = $user->groupMemberships()->where('user_group_id', $groupId)->first(); if (null === $membership) { app('log')->debug('validateUserGroup: user has no access to this group.'); + throw new FireflyException((string)trans('validation.belongs_user_or_user_group')); } app('log')->debug(sprintf('validateUserGroup: user has role "%s" in group #%d.', $membership->userRole->title, $membership->userGroup->id)); + return $membership->userGroup; } } diff --git a/app/Support/Http/Controllers/AugumentData.php b/app/Support/Http/Controllers/AugumentData.php index c21eb7b3b5..489be0445f 100644 --- a/app/Support/Http/Controllers/AugumentData.php +++ b/app/Support/Http/Controllers/AugumentData.php @@ -40,28 +40,24 @@ use Illuminate\Support\Collection; /** * Trait AugumentData - * */ trait AugumentData { /** * Searches for the opposing account. - * - * @param Collection $accounts - * - * @return array */ protected function combineAccounts(Collection $accounts): array // filter + group data { /** @var AccountRepositoryInterface $repository */ $repository = app(AccountRepositoryInterface::class); $combined = []; + /** @var Account $expenseAccount */ foreach ($accounts as $expenseAccount) { - $collection = new Collection(); + $collection = new Collection(); $collection->push($expenseAccount); - $revenue = $repository->findByName($expenseAccount->name, [AccountType::REVENUE]); + $revenue = $repository->findByName($expenseAccount->name, [AccountType::REVENUE]); if (null !== $revenue) { $collection->push($revenue); } @@ -74,9 +70,7 @@ trait AugumentData /** * Small helper function for the revenue and expense account charts. * - * @param array $names - * - * @return array + * @param array $names */ protected function expandNames(array $names): array { @@ -90,14 +84,11 @@ trait AugumentData /** * Small helper function for the revenue and expense account charts. - * - * @param Collection $accounts - * - * @return array */ protected function extractNames(Collection $accounts): array { $return = []; + /** @var Account $account */ foreach ($accounts as $account) { $return[$account->id] = $account->name; @@ -108,10 +99,6 @@ trait AugumentData /** * Get the account names belonging to a bunch of account ID's. - * - * @param array $accountIds - * - * @return array */ protected function getAccountNames(array $accountIds): array // extract info from array. { @@ -127,17 +114,13 @@ trait AugumentData $return[$accountId] = $grouped[$accountId][0]['name']; } } - $return[0] = '(no name)'; + $return[0] = '(no name)'; return $return; } /** * Get the budget names from a set of budget ID's. - * - * @param array $budgetIds - * - * @return array */ protected function getBudgetNames(array $budgetIds): array // extract info from array. { @@ -151,17 +134,13 @@ trait AugumentData $return[$budgetId] = $grouped[$budgetId][0]['name']; } } - $return[0] = (string)trans('firefly.no_budget'); + $return[0] = (string)trans('firefly.no_budget'); return $return; } /** * Get the category names from a set of category ID's. Small helper function for some of the charts. - * - * @param array $categoryIds - * - * @return array */ protected function getCategoryNames(array $categoryIds): array // extract info from array. { @@ -177,29 +156,23 @@ trait AugumentData $return[$categoryId] = $grouped[$categoryId][0]['name']; } } - $return[0] = (string)trans('firefly.no_category'); + $return[0] = (string)trans('firefly.no_category'); return $return; } /** * Gets all budget limits for a budget. - * - * @param Budget $budget - * @param Carbon $start - * @param Carbon $end - * - * @return Collection */ protected function getLimits(Budget $budget, Carbon $start, Carbon $end): Collection // get data + augment with info { /** @var OperationsRepositoryInterface $opsRepository */ - $opsRepository = app(OperationsRepositoryInterface::class); + $opsRepository = app(OperationsRepositoryInterface::class); /** @var BudgetLimitRepositoryInterface $blRepository */ - $blRepository = app(BudgetLimitRepositoryInterface::class); + $blRepository = app(BudgetLimitRepositoryInterface::class); // properties for cache - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty($budget->id); @@ -215,12 +188,23 @@ trait AugumentData /** @var BudgetLimit $entry */ foreach ($set as $entry) { - $currency = $entry->transactionCurrency; + $currency = $entry->transactionCurrency; + + if (null === $currency) { + $currency = app('amount')->getDefaultCurrency(); + } + // clone because these objects change each other. $currentStart = clone $entry->start_date; - $currentEnd = clone $entry->end_date; + $currentEnd = null === $entry->end_date ? null : clone $entry->end_date; + + if (null === $currentEnd) { + $currentEnd = clone $currentStart; + $currentEnd->addMonth(); + } + $expenses = $opsRepository->sumExpenses($currentStart, $currentEnd, null, $budgetCollection, $currency); - $spent = $expenses[(int)$currency->id]['sum'] ?? '0'; + $spent = $expenses[$currency->id]['sum'] ?? '0'; $entry->spent = $spent; $limits->push($entry); @@ -232,18 +216,15 @@ trait AugumentData /** * Group set of transactions by name of opposing account. - * - * @param array $array - * - * @return array */ protected function groupByName(array $array): array // filter + group data { // group by opposing account name. $grouped = []; + /** @var array $journal */ foreach ($array as $journal) { - $name = '(no name)'; + $name = '(no name)'; if (TransactionType::WITHDRAWAL === $journal['transaction_type_type']) { $name = $journal['destination_account_name']; } @@ -251,7 +232,7 @@ trait AugumentData $name = $journal['source_account_name']; } - $grouped[$name] = $grouped[$name] ?? '0'; + $grouped[$name] ??= '0'; $grouped[$name] = bcadd($journal['amount'], $grouped[$name]); } @@ -260,29 +241,22 @@ trait AugumentData /** * Spent in a period. - * - * @param Collection $assets - * @param Collection $opposing - * @param Carbon $start - * @param Carbon $end - * - * @return array */ protected function spentInPeriod(Collection $assets, Collection $opposing, Carbon $start, Carbon $end): array // get data + augment with info { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); - $total = $assets->merge($opposing); + $total = $assets->merge($opposing); $collector->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL])->setAccounts($total); - $journals = $collector->getExtractedJournals(); - $sum = [ + $journals = $collector->getExtractedJournals(); + $sum = [ 'grand_sum' => '0', 'per_currency' => [], ]; // loop to support multi currency foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; + $currencyId = (int)$journal['currency_id']; // if not set, set to zero: if (!array_key_exists($currencyId, $sum['per_currency'])) { diff --git a/app/Support/Http/Controllers/BasicDataSupport.php b/app/Support/Http/Controllers/BasicDataSupport.php index 360634330b..47d70225a7 100644 --- a/app/Support/Http/Controllers/BasicDataSupport.php +++ b/app/Support/Http/Controllers/BasicDataSupport.php @@ -27,16 +27,12 @@ use Carbon\Carbon; /** * Trait BasicDataSupport - * */ trait BasicDataSupport { /** * Find the ID in a given array. Return '0' if not there (amount). * - * @param array $array - * @param int $entryId - * * @return null|mixed */ protected function isInArray(array $array, int $entryId) @@ -46,11 +42,6 @@ trait BasicDataSupport /** * Find the ID in a given array. Return null if not there (amount). - * - * @param array $array - * @param int $entryId - * - * @return null|Carbon */ protected function isInArrayDate(array $array, int $entryId): ?Carbon { diff --git a/app/Support/Http/Controllers/ChartGeneration.php b/app/Support/Http/Controllers/ChartGeneration.php index 5b2cd7c6e6..cce65122fa 100644 --- a/app/Support/Http/Controllers/ChartGeneration.php +++ b/app/Support/Http/Controllers/ChartGeneration.php @@ -28,11 +28,8 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Generator\Chart\Basic\GeneratorInterface; use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use JsonException; /** * Trait ChartGeneration @@ -42,18 +39,12 @@ trait ChartGeneration /** * Shows an overview of the account balances for a set of accounts. * - * @param Collection $accounts - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException - * @throws JsonException */ protected function accountBalanceChart(Collection $accounts, Carbon $start, Carbon $end): array // chart helper method. { // chart properties for cache: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('chart.account.account-balance-chart'); @@ -61,26 +52,26 @@ trait ChartGeneration if ($cache->has()) { return $cache->get(); } - Log::debug('Regenerate chart.account.account-balance-chart from scratch.'); - $locale = app('steam')->getLocale(); - /** @var GeneratorInterface $generator */ - $generator = app(GeneratorInterface::class); + app('log')->debug('Regenerate chart.account.account-balance-chart from scratch.'); + $locale = app('steam')->getLocale(); + + /** @var GeneratorInterface $generator */ + $generator = app(GeneratorInterface::class); - /** @var CurrencyRepositoryInterface $repository */ - $repository = app(CurrencyRepositoryInterface::class); /** @var AccountRepositoryInterface $accountRepos */ $accountRepos = app(AccountRepositoryInterface::class); - $default = app('amount')->getDefaultCurrency(); - $chartData = []; + $default = app('amount')->getDefaultCurrency(); + $chartData = []; + /** @var Account $account */ foreach ($accounts as $account) { // TODO we can use getAccountCurrency instead. - $currency = $repository->find((int)$accountRepos->getMetaValue($account, 'currency_id')); + $currency = $accountRepos->getAccountCurrency($account); if (null === $currency) { $currency = $default; } - $currentSet = [ + $currentSet = [ 'label' => $account->name, 'currency_symbol' => $currency->symbol, 'entries' => [], @@ -90,16 +81,16 @@ trait ChartGeneration $range = app('steam')->balanceInRange($account, $start, clone $end); $previous = array_values($range)[0]; while ($currentStart <= $end) { - $format = $currentStart->format('Y-m-d'); - $label = trim($currentStart->isoFormat((string)trans('config.month_and_day_js', [], $locale))); - $balance = $range[$format] ?? $previous; - $previous = $balance; + $format = $currentStart->format('Y-m-d'); + $label = trim($currentStart->isoFormat((string)trans('config.month_and_day_js', [], $locale))); + $balance = $range[$format] ?? $previous; + $previous = $balance; $currentStart->addDay(); $currentSet['entries'][$label] = $balance; } - $chartData[] = $currentSet; + $chartData[] = $currentSet; } - $data = $generator->multiSet($chartData); + $data = $generator->multiSet($chartData); $cache->store($data); return $data; diff --git a/app/Support/Http/Controllers/CreateStuff.php b/app/Support/Http/Controllers/CreateStuff.php index a856a2ea64..ebd702e5a2 100644 --- a/app/Support/Http/Controllers/CreateStuff.php +++ b/app/Support/Http/Controllers/CreateStuff.php @@ -34,17 +34,11 @@ use phpseclib3\Crypt\RSA; /** * Trait CreateStuff - * */ trait CreateStuff { /** * Creates an asset account. - * - * @param NewUserFormRequest $request - * @param TransactionCurrency $currency - * - * @return bool */ protected function createAssetAccount(NewUserFormRequest $request, TransactionCurrency $currency): bool // create stuff { @@ -70,11 +64,6 @@ trait CreateStuff /** * Creates a cash wallet. - * - * @param TransactionCurrency $currency - * @param string $language - * - * @return bool */ protected function createCashWalletAccount(TransactionCurrency $currency, string $language): bool // create stuff { @@ -112,22 +101,16 @@ trait CreateStuff return; } - $keys = RSA::createKey(4096); + $key = RSA::createKey(4096); Log::alert('NO OAuth keys were found. They have been created.'); - file_put_contents($publicKey, $keys['publickey']); - file_put_contents($privateKey, $keys['privatekey']); + file_put_contents($publicKey, (string)$key->getPublicKey()); + file_put_contents($privateKey, $key->toString('PKCS1')); } /** * Create a savings account. - * - * @param NewUserFormRequest $request - * @param TransactionCurrency $currency - * @param string $language - * - * @return bool */ protected function createSavingsAccount(NewUserFormRequest $request, TransactionCurrency $currency, string $language): bool // create stuff { @@ -152,10 +135,6 @@ trait CreateStuff /** * Create a new user instance after a valid registration. - * - * @param array $data - * - * @return User */ protected function createUser(array $data): User // create object { diff --git a/app/Support/Http/Controllers/CronRunner.php b/app/Support/Http/Controllers/CronRunner.php index dc0b337bd1..5fb7326bfa 100644 --- a/app/Support/Http/Controllers/CronRunner.php +++ b/app/Support/Http/Controllers/CronRunner.php @@ -29,28 +29,19 @@ use FireflyIII\Support\Cronjobs\AutoBudgetCronjob; use FireflyIII\Support\Cronjobs\BillWarningCronjob; use FireflyIII\Support\Cronjobs\ExchangeRatesCronjob; use FireflyIII\Support\Cronjobs\RecurringCronjob; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Trait CronRunner */ trait CronRunner { - /** - * @param bool $force - * @param Carbon $date - * - * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ protected function billWarningCronJob(bool $force, Carbon $date): array { /** @var BillWarningCronjob $billWarning */ $billWarning = app(BillWarningCronjob::class); $billWarning->setForce($force); $billWarning->setDate($date); + try { $billWarning->fire(); } catch (FireflyException $e) { @@ -70,18 +61,13 @@ trait CronRunner ]; } - /** - * @param bool $force - * @param Carbon $date - * - * @return array - */ protected function exchangeRatesCronJob(bool $force, Carbon $date): array { /** @var ExchangeRatesCronjob $exchangeRates */ $exchangeRates = app(ExchangeRatesCronjob::class); $exchangeRates->setForce($force); $exchangeRates->setDate($date); + try { $exchangeRates->fire(); } catch (FireflyException $e) { @@ -101,18 +87,13 @@ trait CronRunner ]; } - /** - * @param bool $force - * @param Carbon $date - * - * @return array - */ protected function runAutoBudget(bool $force, Carbon $date): array { /** @var AutoBudgetCronjob $autoBudget */ $autoBudget = app(AutoBudgetCronjob::class); $autoBudget->setForce($force); $autoBudget->setDate($date); + try { $autoBudget->fire(); } catch (FireflyException $e) { @@ -132,20 +113,13 @@ trait CronRunner ]; } - /** - * @param bool $force - * @param Carbon $date - * - * @return array - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface - */ protected function runRecurring(bool $force, Carbon $date): array { /** @var RecurringCronjob $recurring */ $recurring = app(RecurringCronjob::class); $recurring->setForce($force); $recurring->setDate($date); + try { $recurring->fire(); } catch (FireflyException $e) { diff --git a/app/Support/Http/Controllers/DateCalculation.php b/app/Support/Http/Controllers/DateCalculation.php index ae01a4135e..320734d456 100644 --- a/app/Support/Http/Controllers/DateCalculation.php +++ b/app/Support/Http/Controllers/DateCalculation.php @@ -27,7 +27,6 @@ use Carbon\Carbon; /** * Trait DateCalculation - * */ trait DateCalculation { @@ -37,11 +36,6 @@ trait DateCalculation * * If both are in the past OR both are in the future, simply return the number of days in the period with a minimum * of 1 - * - * @param Carbon $start - * @param Carbon $end - * - * @return int */ public function activeDaysLeft(Carbon $start, Carbon $end): int { @@ -59,11 +53,6 @@ trait DateCalculation * Calculate the number of days passed between two dates. Will take the current moment into consideration. * * If both are in the past OR both are in the future, simply return the period between them with a minimum of 1 - * - * @param Carbon $start - * @param Carbon $end - * - * @return int */ protected function activeDaysPassed(Carbon $start, Carbon $end): int { @@ -77,12 +66,6 @@ trait DateCalculation return $difference; } - /** - * @param Carbon $start - * @param Carbon $end - * - * @return string - */ protected function calculateStep(Carbon $start, Carbon $end): string { $step = '1D'; @@ -103,27 +86,23 @@ trait DateCalculation /** * Get a list of the periods that will occur after this date. For example, * March 2018, April 2018, etc. - * - * @param Carbon $date - * @param string $range - * - * @return array */ protected function getNextPeriods(Carbon $date, string $range): array { // select thing for next 12 periods: - $loop = []; + $loop = []; + /** @var Carbon $current */ $current = app('navigation')->startOfPeriod($date, $range); $current = app('navigation')->endOfPeriod($current, $range); $current->addDay(); - $count = 0; + $count = 0; while ($count < 12) { $current = app('navigation')->endOfPeriod($current, $range); $currentStart = app('navigation')->startOfPeriod($current, $range); - $loop[] = [ + $loop[] = [ 'label' => $current->format('Y-m-d'), 'title' => app('navigation')->periodShow($current, $range), 'start' => clone $currentStart, @@ -139,16 +118,12 @@ trait DateCalculation /** * Get a list of the periods that occurred before the start date. For example, * March 2018, February 2018, etc. - * - * @param Carbon $date - * @param string $range - * - * @return array */ protected function getPreviousPeriods(Carbon $date, string $range): array { // select thing for last 12 periods: - $loop = []; + $loop = []; + /** @var Carbon $current */ $current = app('navigation')->startOfPeriod($date, $range); $count = 0; diff --git a/app/Support/Http/Controllers/GetConfigurationData.php b/app/Support/Http/Controllers/GetConfigurationData.php index 0cfe7b8019..db23befbc2 100644 --- a/app/Support/Http/Controllers/GetConfigurationData.php +++ b/app/Support/Http/Controllers/GetConfigurationData.php @@ -25,22 +25,14 @@ namespace FireflyIII\Support\Http\Controllers; use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Trait GetConfigurationData - * */ trait GetConfigurationData { /** * Some common combinations. - * - * @param int $value - * - * @return string */ protected function errorReporting(int $value): string // get configuration { @@ -59,10 +51,6 @@ trait GetConfigurationData /** * Get the basic steps from config. - * - * @param string $route - * - * @return array */ protected function getBasicSteps(string $route): array // get config values { @@ -71,16 +59,16 @@ trait GetConfigurationData $steps = []; if (is_array($elements) && count($elements) > 0) { foreach ($elements as $key => $options) { - $currentStep = $options; + $currentStep = $options; // get the text: - $currentStep['intro'] = (string)trans('intro.' . $route . '_' . $key); + $currentStep['intro'] = (string)trans('intro.'.$route.'_'.$key); // save in array: - $steps[] = $currentStep; + $steps[] = $currentStep; } } - Log::debug(sprintf('Total basic steps for %s is %d', $routeKey, count($steps))); + app('log')->debug(sprintf('Total basic steps for %s is %d', $routeKey, count($steps))); return $steps; } @@ -88,24 +76,24 @@ trait GetConfigurationData /** * Get config for date range. * - * @return array * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ protected function getDateRangeConfig(): array // get configuration + get preferences. { - $viewRange = app('navigation')->getViewRange(false); + $viewRange = app('navigation')->getViewRange(false); + /** @var Carbon $start */ - $start = session('start'); + $start = session('start'); + /** @var Carbon $end */ - $end = session('end'); + $end = session('end'); + /** @var Carbon $first */ - $first = session('first'); - $title = sprintf('%s - %s', $start->isoFormat($this->monthAndDayFormat), $end->isoFormat($this->monthAndDayFormat)); - $isCustom = true === session('is_custom_range', false); - $today = today(config('app.timezone')); - $ranges = [ + $first = session('first'); + $title = sprintf('%s - %s', $start->isoFormat($this->monthAndDayFormat), $end->isoFormat($this->monthAndDayFormat)); + $isCustom = true === session('is_custom_range', false); + $today = today(config('app.timezone')); + $ranges = [ // first range is the current range: $title => [$start, $end], ]; @@ -134,9 +122,10 @@ trait GetConfigurationData // today: /** @var Carbon $todayStart */ - $todayStart = app('navigation')->startOfPeriod($today, $viewRange); + $todayStart = app('navigation')->startOfPeriod($today, $viewRange); + /** @var Carbon $todayEnd */ - $todayEnd = app('navigation')->endOfPeriod($todayStart, $viewRange); + $todayEnd = app('navigation')->endOfPeriod($todayStart, $viewRange); if ($todayStart->ne($start) || $todayEnd->ne($end)) { $ranges[ucfirst((string)trans('firefly.today'))] = [$todayStart, $todayEnd]; } @@ -182,12 +171,6 @@ trait GetConfigurationData /** * Get specific info for special routes. - * - * @param string $route - * @param string $specificPage - * - * @return array - * */ protected function getSpecificSteps(string $route, string $specificPage): array // get config values { @@ -197,33 +180,30 @@ trait GetConfigurationData // user is on page with specific instructions: if ('' !== $specificPage) { $routeKey = str_replace('.', '_', $route); - $elements = config(sprintf('intro.%s', $routeKey . '_' . $specificPage)); + $elements = config(sprintf('intro.%s', $routeKey.'_'.$specificPage)); if (is_array($elements) && count($elements) > 0) { foreach ($elements as $key => $options) { - $currentStep = $options; + $currentStep = $options; // get the text: - $currentStep['intro'] = (string)trans('intro.' . $route . '_' . $specificPage . '_' . $key); + $currentStep['intro'] = (string)trans('intro.'.$route.'_'.$specificPage.'_'.$key); // save in array: - $steps[] = $currentStep; + $steps[] = $currentStep; } } } - Log::debug(sprintf('Total specific steps for route "%s" and page "%s" (routeKey is "%s") is %d', $route, $specificPage, $routeKey, count($steps))); + app('log')->debug(sprintf('Total specific steps for route "%s" and page "%s" (routeKey is "%s") is %d', $route, $specificPage, $routeKey, count($steps))); return $steps; } - /** - * - */ protected function verifyRecurringCronJob(): void { $config = app('fireflyconfig')->get('last_rt_job', 0); - $lastTime = (int)$config->data; + $lastTime = (int)$config?->data; $now = time(); - Log::debug(sprintf('verifyRecurringCronJob: last time is %d ("%s"), now is %d', $lastTime, $config->data, $now)); + app('log')->debug(sprintf('verifyRecurringCronJob: last time is %d ("%s"), now is %d', $lastTime, $config?->data, $now)); if (0 === $lastTime) { request()->session()->flash('info', trans('firefly.recurring_never_cron')); diff --git a/app/Support/Http/Controllers/ModelInformation.php b/app/Support/Http/Controllers/ModelInformation.php index 7d3d42e7ce..68a31bcc7a 100644 --- a/app/Support/Http/Controllers/ModelInformation.php +++ b/app/Support/Http/Controllers/ModelInformation.php @@ -30,24 +30,18 @@ use FireflyIII\Models\Tag; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Trait ModelInformation - * */ trait ModelInformation { /** * Get actions based on a bill. * - * @param Bill $bill - * - * @return array * @throws FireflyException */ - protected function getActionsForBill(Bill $bill): array // get info and augument + protected function getActionsForBill(Bill $bill): array // get info and argument { try { $result = view( @@ -59,10 +53,11 @@ trait ModelInformation 'count' => 1, ] )->render(); - } catch (Throwable $e) { - Log::error(sprintf('Throwable was thrown in getActionsForBill(): %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Throwable was thrown in getActionsForBill(): %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); $result = 'Could not render view. See log files.'; + throw new FireflyException($result, 0, $e); } @@ -70,7 +65,6 @@ trait ModelInformation } /** - * * @return string[] * * @psalm-return array @@ -78,10 +72,16 @@ trait ModelInformation protected function getLiabilityTypes(): array { /** @var AccountRepositoryInterface $repository */ - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); + // types of liability: + /** @var AccountType $debt */ $debt = $repository->getAccountTypeByType(AccountType::DEBT); + + /** @var AccountType $loan */ $loan = $repository->getAccountTypeByType(AccountType::LOAN); + + /** @var AccountType $mortgage */ $mortgage = $repository->getAccountTypeByType(AccountType::MORTGAGE); $liabilityTypes = [ $debt->id => (string)trans(sprintf('firefly.account_type_%s', AccountType::DEBT)), @@ -93,9 +93,6 @@ trait ModelInformation return $liabilityTypes; } - /** - * @return array - */ protected function getRoles(): array { $roles = []; @@ -109,16 +106,13 @@ trait ModelInformation /** * Create fake triggers to match the bill's properties * - * @param Bill $bill - * - * @return array * @throws FireflyException */ - protected function getTriggersForBill(Bill $bill): array // get info and augument + protected function getTriggersForBill(Bill $bill): array // get info and argument { // TODO duplicate code - $operators = config('search.operators'); - $triggers = []; + $operators = config('search.operators'); + $triggers = []; foreach ($operators as $key => $operator) { if ('user_action' !== $key && false === $operator['alias']) { $triggers[$key] = (string)trans(sprintf('firefly.rule_trigger_%s_choice', $key)); @@ -129,7 +123,7 @@ trait ModelInformation $result = []; $billTriggers = ['currency_is', 'amount_more', 'amount_less', 'description_contains']; $values = [ - $bill->transactionCurrency()->first()->name, + $bill->transactionCurrency()->first()?->name, $bill->amount_min, $bill->amount_max, $bill->name, @@ -146,11 +140,11 @@ trait ModelInformation 'triggers' => $triggers, ] )->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Throwable was thrown in getTriggersForBill(): %s', $e->getMessage())); - Log::debug($e->getTraceAsString()); - $string = ''; - throw new FireflyException('Could not render trigger', 0, $e); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Throwable was thrown in getTriggersForBill(): %s', $e->getMessage())); + app('log')->debug($e->getTraceAsString()); + + throw new FireflyException(sprintf('Could not render trigger: %s', $e->getMessage()), 0, $e); } if ('' !== $string) { $result[] = $string; @@ -161,16 +155,15 @@ trait ModelInformation } /** - * @param TransactionJournal $journal - * - * @return array * @throws FireflyException + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ private function getTriggersForJournal(TransactionJournal $journal): array { - // See reference nr. 40 - $operators = config('search.operators'); - $triggers = []; + // TODO duplicated code. + $operators = config('search.operators'); + $triggers = []; foreach ($operators as $key => $operator) { if ('user_action' !== $key && false === $operator['alias']) { $triggers[$key] = (string)trans(sprintf('firefly.rule_trigger_%s_choice', $key)); @@ -178,95 +171,96 @@ trait ModelInformation } asort($triggers); - $result = []; - $journalTriggers = []; - $values = []; - $index = 0; + $result = []; + $journalTriggers = []; + $values = []; + $index = 0; + // amount, description, category, budget, tags, source, destination, notes, currency type - //,type - /** @var Transaction|null $source */ - $source = $journal->transactions()->where('amount', '<', 0)->first(); - /** @var Transaction|null $destination */ - $destination = $journal->transactions()->where('amount', '>', 0)->first(); + // ,type + /** @var null|Transaction $source */ + $source = $journal->transactions()->where('amount', '<', 0)->first(); + + /** @var null|Transaction $destination */ + $destination = $journal->transactions()->where('amount', '>', 0)->first(); if (null === $destination || null === $source) { return $result; } // type $journalTriggers[$index] = 'transaction_type'; $values[$index] = $journal->transactionType->type; - $index++; + ++$index; // currency $journalTriggers[$index] = 'currency_is'; - $values[$index] = sprintf('%s (%s)', $journal->transactionCurrency->name, $journal->transactionCurrency->code); - $index++; + $values[$index] = sprintf('%s (%s)', $journal->transactionCurrency?->name, $journal->transactionCurrency?->code); + ++$index; // amount_exactly: $journalTriggers[$index] = 'amount_exactly'; $values[$index] = $destination->amount; - $index++; + ++$index; // description_is: $journalTriggers[$index] = 'description_is'; $values[$index] = $journal->description; - $index++; + ++$index; // from_account_is $journalTriggers[$index] = 'source_account_is'; $values[$index] = $source->account->name; - $index++; + ++$index; // to_account_is $journalTriggers[$index] = 'destination_account_is'; $values[$index] = $destination->account->name; - $index++; + ++$index; // category (if) - $category = $journal->categories()->first(); + $category = $journal->categories()->first(); if (null !== $category) { $journalTriggers[$index] = 'category_is'; $values[$index] = $category->name; - $index++; + ++$index; } // budget (if) - $budget = $journal->budgets()->first(); + $budget = $journal->budgets()->first(); if (null !== $budget) { $journalTriggers[$index] = 'budget_is'; $values[$index] = $budget->name; - $index++; + ++$index; } // tags (if) - $tags = $journal->tags()->get(); + $tags = $journal->tags()->get(); + /** @var Tag $tag */ foreach ($tags as $tag) { $journalTriggers[$index] = 'tag_is'; $values[$index] = $tag->tag; - $index++; + ++$index; } // notes (if) - $notes = $journal->notes()->first(); + $notes = $journal->notes()->first(); if (null !== $notes) { $journalTriggers[$index] = 'notes_are'; $values[$index] = $notes->text; } - foreach ($journalTriggers as $index => $trigger) { + foreach ($journalTriggers as $ii => $trigger) { try { - $string = view( - 'rules.partials.trigger', - [ - 'oldTrigger' => $trigger, - 'oldValue' => $values[$index], - 'oldChecked' => false, - 'count' => $index + 1, - 'triggers' => $triggers, - ] - )->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Throwable was thrown in getTriggersForJournal(): %s', $e->getMessage())); - Log::debug($e->getTraceAsString()); - $string = ''; - throw new FireflyException('Could not render trigger', 0, $e); + $renderInfo = [ + 'oldTrigger' => $trigger, + 'oldValue' => $values[$ii], + 'oldChecked' => false, + 'count' => $ii + 1, + 'triggers' => $triggers, + ]; + $string = view('rules.partials.trigger', $renderInfo)->render(); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Throwable was thrown in getTriggersForJournal(): %s', $e->getMessage())); + app('log')->debug($e->getTraceAsString()); + + throw new FireflyException(sprintf('Could not render trigger: %s', $e->getMessage()), 0, $e); } if ('' !== $string) { $result[] = $string; diff --git a/app/Support/Http/Controllers/PeriodOverview.php b/app/Support/Http/Controllers/PeriodOverview.php index 8bdacc157d..c35213211a 100644 --- a/app/Support/Http/Controllers/PeriodOverview.php +++ b/app/Support/Http/Controllers/PeriodOverview.php @@ -33,9 +33,6 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; /** * Trait PeriodOverview. @@ -63,7 +60,6 @@ use Psr\Container\NotFoundExceptionInterface; * amount: -1234 (str) * count: 23 * ] - * */ trait PeriodOverview { @@ -74,22 +70,15 @@ trait PeriodOverview * and for each period, the amount of money spent and earned. This is a complex operation which is cached for * performance reasons. * - * @param Account $account - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ protected function getAccountPeriodOverview(Account $account, Carbon $start, Carbon $end): array { - $range = app('navigation')->getViewRange(true); + $range = app('navigation')->getViewRange(true); [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; // properties for cache - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('account-show-period-entries'); @@ -97,33 +86,34 @@ trait PeriodOverview if ($cache->has()) { return $cache->get(); } + /** @var array $dates */ - $dates = app('navigation')->blockPeriods($start, $end, $range); - $entries = []; + $dates = app('navigation')->blockPeriods($start, $end, $range); + $entries = []; // collect all expenses in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts(new Collection([$account])); $collector->setRange($start, $end); $collector->setTypes([TransactionType::DEPOSIT]); - $earnedSet = $collector->getExtractedJournals(); + $earnedSet = $collector->getExtractedJournals(); // collect all income in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts(new Collection([$account])); $collector->setRange($start, $end); $collector->setTypes([TransactionType::WITHDRAWAL]); - $spentSet = $collector->getExtractedJournals(); + $spentSet = $collector->getExtractedJournals(); // collect all transfers in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setAccounts(new Collection([$account])); $collector->setRange($start, $end); $collector->setTypes([TransactionType::TRANSFER]); - $transferSet = $collector->getExtractedJournals(); + $transferSet = $collector->getExtractedJournals(); // loop dates foreach ($dates as $currentDate) { @@ -134,16 +124,15 @@ trait PeriodOverview $transferredIn = $this->filterTransferredIn($account, $this->filterJournalsByDate($transferSet, $currentDate['start'], $currentDate['end'])); $entries[] = [ - 'title' => $title, - 'route' => - route('accounts.show', [$account->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), + 'title' => $title, + 'route' => route('accounts.show', [$account->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), - 'total_transactions' => count($spent) + count($earned) + count($transferredAway) + count($transferredIn), - 'spent' => $this->groupByCurrency($spent), - 'earned' => $this->groupByCurrency($earned), - 'transferred_away' => $this->groupByCurrency($transferredAway), - 'transferred_in' => $this->groupByCurrency($transferredIn), - ]; + 'total_transactions' => count($spent) + count($earned) + count($transferredAway) + count($transferredIn), + 'spent' => $this->groupByCurrency($spent), + 'earned' => $this->groupByCurrency($earned), + 'transferred_away' => $this->groupByCurrency($transferredAway), + 'transferred_in' => $this->groupByCurrency($transferredIn), + ]; } $cache->store($entries); @@ -152,16 +141,11 @@ trait PeriodOverview /** * Filter a list of journals by a set of dates, and then group them by currency. - * - * @param array $array - * @param Carbon $start - * @param Carbon $end - * - * @return array */ private function filterJournalsByDate(array $array, Carbon $start, Carbon $end): array { $result = []; + /** @var array $journal */ foreach ($array as $journal) { if ($journal['date'] <= $end && $journal['date'] >= $start) { @@ -174,15 +158,11 @@ trait PeriodOverview /** * Return only transactions where $account is the source. - * - * @param Account $account - * @param array $journals - * - * @return array */ private function filterTransferredAway(Account $account, array $journals): array { $return = []; + /** @var array $journal */ foreach ($journals as $journal) { if ($account->id === (int)$journal['source_account_id']) { @@ -195,15 +175,11 @@ trait PeriodOverview /** * Return only transactions where $account is the source. - * - * @param Account $account - * @param array $journals - * - * @return array */ private function filterTransferredIn(Account $account, array $journals): array { $return = []; + /** @var array $journal */ foreach ($journals as $journal) { if ($account->id === (int)$journal['destination_account_id']) { @@ -214,18 +190,14 @@ trait PeriodOverview return $return; } - /** - * @param array $journals - * - * @return array - */ private function groupByCurrency(array $journals): array { $return = []; + /** @var array $journal */ foreach ($journals as $journal) { - $currencyId = (int)$journal['currency_id']; - $foreignCurrencyId = $journal['foreign_currency_id']; + $currencyId = (int)$journal['currency_id']; + $foreignCurrencyId = $journal['foreign_currency_id']; if (!array_key_exists($currencyId, $return)) { $return[$currencyId] = [ 'amount' => '0', @@ -238,7 +210,7 @@ trait PeriodOverview ]; } $return[$currencyId]['amount'] = bcadd($return[$currencyId]['amount'], $journal['amount'] ?? '0'); - $return[$currencyId]['count']++; + ++$return[$currencyId]['count']; if (null !== $foreignCurrencyId && null !== $journal['foreign_amount']) { if (!array_key_exists($foreignCurrencyId, $return)) { @@ -252,7 +224,7 @@ trait PeriodOverview 'currency_decimal_places' => $journal['foreign_currency_decimal_places'], ]; } - $return[$foreignCurrencyId]['count']++; + ++$return[$foreignCurrencyId]['count']; $return[$foreignCurrencyId]['amount'] = bcadd($return[$foreignCurrencyId]['amount'], $journal['foreign_amount']); } } @@ -263,22 +235,15 @@ trait PeriodOverview /** * Overview for single category. Has been refactored recently. * - * @param Category $category - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ protected function getCategoryPeriodOverview(Category $category, Carbon $start, Carbon $end): array { - $range = app('navigation')->getViewRange(true); + $range = app('navigation')->getViewRange(true); [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; // properties for entries with their amounts. - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty($range); @@ -288,33 +253,34 @@ trait PeriodOverview if ($cache->has()) { return $cache->get(); } + /** @var array $dates */ - $dates = app('navigation')->blockPeriods($start, $end, $range); - $entries = []; + $dates = app('navigation')->blockPeriods($start, $end, $range); + $entries = []; // collect all expenses in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setCategory($category); $collector->setRange($start, $end); $collector->setTypes([TransactionType::DEPOSIT]); - $earnedSet = $collector->getExtractedJournals(); + $earnedSet = $collector->getExtractedJournals(); // collect all income in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setCategory($category); $collector->setRange($start, $end); $collector->setTypes([TransactionType::WITHDRAWAL]); - $spentSet = $collector->getExtractedJournals(); + $spentSet = $collector->getExtractedJournals(); // collect all transfers in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setCategory($category); $collector->setRange($start, $end); $collector->setTypes([TransactionType::TRANSFER]); - $transferSet = $collector->getExtractedJournals(); + $transferSet = $collector->getExtractedJournals(); foreach ($dates as $currentDate) { $spent = $this->filterJournalsByDate($spentSet, $currentDate['start'], $currentDate['end']); $earned = $this->filterJournalsByDate($earnedSet, $currentDate['start'], $currentDate['end']); @@ -322,17 +288,17 @@ trait PeriodOverview $title = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); $entries[] = [ - 'transactions' => 0, - 'title' => $title, - 'route' => route( - 'categories.show', - [$category->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')] - ), - 'total_transactions' => count($spent) + count($earned) + count($transferred), - 'spent' => $this->groupByCurrency($spent), - 'earned' => $this->groupByCurrency($earned), - 'transferred' => $this->groupByCurrency($transferred), - ]; + 'transactions' => 0, + 'title' => $title, + 'route' => route( + 'categories.show', + [$category->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')] + ), + 'total_transactions' => count($spent) + count($earned) + count($transferred), + 'spent' => $this->groupByCurrency($spent), + 'earned' => $this->groupByCurrency($earned), + 'transferred' => $this->groupByCurrency($transferred), + ]; } $cache->store($entries); @@ -344,21 +310,15 @@ trait PeriodOverview * * This method has been refactored recently. * - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ protected function getNoBudgetPeriodOverview(Carbon $start, Carbon $end): array { - $range = app('navigation')->getViewRange(true); + $range = app('navigation')->getViewRange(true); [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('no-budget-period-entries'); @@ -368,27 +328,28 @@ trait PeriodOverview } /** @var array $dates */ - $dates = app('navigation')->blockPeriods($start, $end, $range); - $entries = []; + $dates = app('navigation')->blockPeriods($start, $end, $range); + $entries = []; + // get all expenses without a budget. /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setRange($start, $end)->withoutBudget()->withAccountInformation()->setTypes([TransactionType::WITHDRAWAL]); - $journals = $collector->getExtractedJournals(); + $journals = $collector->getExtractedJournals(); foreach ($dates as $currentDate) { $set = $this->filterJournalsByDate($journals, $currentDate['start'], $currentDate['end']); $title = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); $entries[] = [ - 'title' => $title, - 'route' => route('budgets.no-budget', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), - 'total_transactions' => count($set), - 'spent' => $this->groupByCurrency($set), - 'earned' => [], - 'transferred_away' => [], - 'transferred_in' => [], - ]; + 'title' => $title, + 'route' => route('budgets.no-budget', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), + 'total_transactions' => count($set), + 'spent' => $this->groupByCurrency($set), + 'earned' => [], + 'transferred_away' => [], + 'transferred_in' => [], + ]; } $cache->store($entries); @@ -400,47 +361,42 @@ trait PeriodOverview * * Show period overview for no category view. * - * @param Carbon $theDate - * - * @return array * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ protected function getNoCategoryPeriodOverview(Carbon $theDate): array { - Log::debug(sprintf('Now in getNoCategoryPeriodOverview(%s)', $theDate->format('Y-m-d'))); - $range = app('navigation')->getViewRange(true); - $first = $this->journalRepos->firstNull(); - $start = null === $first ? new Carbon() : $first->date; - $end = clone $theDate; + app('log')->debug(sprintf('Now in getNoCategoryPeriodOverview(%s)', $theDate->format('Y-m-d'))); + $range = app('navigation')->getViewRange(true); + $first = $this->journalRepos->firstNull(); + $start = null === $first ? new Carbon() : $first->date; + $end = clone $theDate; - Log::debug(sprintf('Start for getNoCategoryPeriodOverview() is %s', $start->format('Y-m-d'))); - Log::debug(sprintf('End for getNoCategoryPeriodOverview() is %s', $end->format('Y-m-d'))); + app('log')->debug(sprintf('Start for getNoCategoryPeriodOverview() is %s', $start->format('Y-m-d'))); + app('log')->debug(sprintf('End for getNoCategoryPeriodOverview() is %s', $end->format('Y-m-d'))); // properties for cache - $dates = app('navigation')->blockPeriods($start, $end, $range); - $entries = []; + $dates = app('navigation')->blockPeriods($start, $end, $range); + $entries = []; // collect all expenses in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->withoutCategory(); $collector->setRange($start, $end); $collector->setTypes([TransactionType::DEPOSIT]); - $earnedSet = $collector->getExtractedJournals(); + $earnedSet = $collector->getExtractedJournals(); // collect all income in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->withoutCategory(); $collector->setRange($start, $end); $collector->setTypes([TransactionType::WITHDRAWAL]); - $spentSet = $collector->getExtractedJournals(); + $spentSet = $collector->getExtractedJournals(); // collect all transfers in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->withoutCategory(); $collector->setRange($start, $end); $collector->setTypes([TransactionType::TRANSFER]); @@ -454,15 +410,15 @@ trait PeriodOverview $title = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); $entries[] = [ - 'title' => $title, - 'route' => route('categories.no-category', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), - 'total_transactions' => count($spent) + count($earned) + count($transferred), - 'spent' => $this->groupByCurrency($spent), - 'earned' => $this->groupByCurrency($earned), - 'transferred' => $this->groupByCurrency($transferred), - ]; + 'title' => $title, + 'route' => route('categories.no-category', [$currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), + 'total_transactions' => count($spent) + count($earned) + count($transferred), + 'spent' => $this->groupByCurrency($spent), + 'earned' => $this->groupByCurrency($earned), + 'transferred' => $this->groupByCurrency($transferred), + ]; } - Log::debug('End of loops'); + app('log')->debug('End of loops'); return $entries; } @@ -470,56 +426,55 @@ trait PeriodOverview /** * This shows a period overview for a tag. It goes back in time and lists all relevant transactions and sums. * - * @param Tag $tag - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ protected function getTagPeriodOverview(Tag $tag, Carbon $start, Carbon $end): array // period overview for tags. { - $range = app('navigation')->getViewRange(true); + $range = app('navigation')->getViewRange(true); [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; // properties for cache - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('tag-period-entries'); $cache->addProperty($tag->id); if ($cache->has()) { - return $cache->get(); + // return $cache->get(); } + /** @var array $dates */ - $dates = app('navigation')->blockPeriods($start, $end, $range); - $entries = []; + $dates = app('navigation')->blockPeriods($start, $end, $range); + $entries = []; // collect all expenses in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTag($tag); $collector->setRange($start, $end); $collector->setTypes([TransactionType::DEPOSIT]); - $earnedSet = $collector->getExtractedJournals(); + $earnedSet = $collector->getExtractedJournals(); // collect all income in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTag($tag); $collector->setRange($start, $end); $collector->setTypes([TransactionType::WITHDRAWAL]); - $spentSet = $collector->getExtractedJournals(); + $spentSet = $collector->getExtractedJournals(); // collect all transfers in this period: /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTag($tag); $collector->setRange($start, $end); $collector->setTypes([TransactionType::TRANSFER]); - $transferSet = $collector->getExtractedJournals(); + $transferSet = $collector->getExtractedJournals(); + + // filer all of them: + $earnedSet = $this->filterJournalsByTag($earnedSet, $tag); + $spentSet = $this->filterJournalsByTag($spentSet, $tag); + $transferSet = $this->filterJournalsByTag($transferSet, $tag); foreach ($dates as $currentDate) { $spent = $this->filterJournalsByDate($spentSet, $currentDate['start'], $currentDate['end']); @@ -528,40 +483,54 @@ trait PeriodOverview $title = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); $entries[] = [ - 'transactions' => 0, - 'title' => $title, - 'route' => route( - 'tags.show', - [$tag->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')] - ), - 'total_transactions' => count($spent) + count($earned) + count($transferred), - 'spent' => $this->groupByCurrency($spent), - 'earned' => $this->groupByCurrency($earned), - 'transferred' => $this->groupByCurrency($transferred), - ]; + 'transactions' => 0, + 'title' => $title, + 'route' => route( + 'tags.show', + [$tag->id, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')] + ), + 'total_transactions' => count($spent) + count($earned) + count($transferred), + 'spent' => $this->groupByCurrency($spent), + 'earned' => $this->groupByCurrency($earned), + 'transferred' => $this->groupByCurrency($transferred), + ]; } return $entries; } + private function filterJournalsByTag(array $set, Tag $tag): array + { + $return = []; + foreach ($set as $entry) { + $found = false; + + /** @var array $localTag */ + foreach ($entry['tags'] as $localTag) { + if ($localTag['id'] === $tag->id) { + $found = true; + } + } + if (false === $found) { + continue; + } + $return[] = $entry; + } + + return $return; + } + /** - * @param string $transactionType - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ protected function getTransactionPeriodOverview(string $transactionType, Carbon $start, Carbon $end): array { - $range = app('navigation')->getViewRange(true); - $types = config(sprintf('firefly.transactionTypesByType.%s', $transactionType)); + $range = app('navigation')->getViewRange(true); + $types = config(sprintf('firefly.transactionTypesByType.%s', $transactionType)); [$start, $end] = $end < $start ? [$end, $start] : [$start, $end]; // properties for cache - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($start); $cache->addProperty($end); $cache->addProperty('transactions-period-entries'); @@ -569,14 +538,15 @@ trait PeriodOverview if ($cache->has()) { return $cache->get(); } + /** @var array $dates */ - $dates = app('navigation')->blockPeriods($start, $end, $range); - $entries = []; + $dates = app('navigation')->blockPeriods($start, $end, $range); + $entries = []; // collect all journals in this period (regardless of type) - $collector = app(GroupCollectorInterface::class); + $collector = app(GroupCollectorInterface::class); $collector->setTypes($types)->setRange($start, $end); - $genericSet = $collector->getExtractedJournals(); + $genericSet = $collector->getExtractedJournals(); foreach ($dates as $currentDate) { $spent = []; @@ -595,15 +565,14 @@ trait PeriodOverview $transferred = $this->filterJournalsByDate($genericSet, $currentDate['start'], $currentDate['end']); } $entries[] - = [ - 'title' => $title, - 'route' => - route('transactions.index', [$transactionType, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), - 'total_transactions' => count($spent) + count($earned) + count($transferred), - 'spent' => $this->groupByCurrency($spent), - 'earned' => $this->groupByCurrency($earned), - 'transferred' => $this->groupByCurrency($transferred), - ]; + = [ + 'title' => $title, + 'route' => route('transactions.index', [$transactionType, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]), + 'total_transactions' => count($spent) + count($earned) + count($transferred), + 'spent' => $this->groupByCurrency($spent), + 'earned' => $this->groupByCurrency($earned), + 'transferred' => $this->groupByCurrency($transferred), + ]; } return $entries; diff --git a/app/Support/Http/Controllers/RenderPartialViews.php b/app/Support/Http/Controllers/RenderPartialViews.php index c68c358255..d03ecb2835 100644 --- a/app/Support/Http/Controllers/RenderPartialViews.php +++ b/app/Support/Http/Controllers/RenderPartialViews.php @@ -36,42 +36,41 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use FireflyIII\Repositories\Tag\TagRepositoryInterface; use FireflyIII\Support\Search\OperatorQuerySearch; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Trait RenderPartialViews - * */ trait RenderPartialViews { /** * View for transactions in a budget for an account. * - * @param array $attributes - * - * @return string * @throws FireflyException */ protected function budgetEntry(array $attributes): string // generate view for report. { /** @var PopupReportInterface $popupHelper */ - $popupHelper = app(PopupReportInterface::class); + $popupHelper = app(PopupReportInterface::class); /** @var BudgetRepositoryInterface $budgetRepository */ $budgetRepository = app(BudgetRepositoryInterface::class); $budget = $budgetRepository->find((int)$attributes['budgetId']); - $accountRepos = app(AccountRepositoryInterface::class); - $account = $accountRepos->find((int)$attributes['accountId']); + $accountRepos = app(AccountRepositoryInterface::class); + $account = $accountRepos->find((int)$attributes['accountId']); - $journals = $popupHelper->balanceForBudget($budget, $account, $attributes); + if (null === $budget || null === $account) { + throw new FireflyException('Could not render popup.report.balance-amount because budget or account is null.'); + } + + $journals = $popupHelper->balanceForBudget($budget, $account, $attributes); try { $view = view('popup.report.balance-amount', compact('journals', 'budget', 'account'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render: %s', $e->getMessage())); $view = 'Firefly III could not render the view. Please see the log files.'; + throw new FireflyException($view, 0, $e); } @@ -81,7 +80,6 @@ trait RenderPartialViews /** * Get options for budget report. * - * @return string * @throws FireflyException */ protected function budgetReportOptions(): string // render a view @@ -92,9 +90,10 @@ trait RenderPartialViews try { $result = view('reports.options.budget', compact('budgets'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.options.tag: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.options.tag: %s', $e->getMessage())); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } @@ -104,9 +103,6 @@ trait RenderPartialViews /** * View for spent in a single budget. * - * @param array $attributes - * - * @return string * @throws FireflyException */ protected function budgetSpentAmount(array $attributes): string // generate view for report. @@ -115,19 +111,20 @@ trait RenderPartialViews $budgetRepository = app(BudgetRepositoryInterface::class); /** @var PopupReportInterface $popupHelper */ - $popupHelper = app(PopupReportInterface::class); + $popupHelper = app(PopupReportInterface::class); - $budget = $budgetRepository->find((int)$attributes['budgetId']); + $budget = $budgetRepository->find((int)$attributes['budgetId']); if (null === $budget) { $budget = new Budget(); } - $journals = $popupHelper->byBudget($budget, $attributes); + $journals = $popupHelper->byBudget($budget, $attributes); try { $view = view('popup.report.budget-spent-amount', compact('journals', 'budget'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render: %s', $e->getMessage())); $view = 'Firefly III could not render the view. Please see the log files.'; + throw new FireflyException($view, 0, $e); } @@ -137,15 +134,12 @@ trait RenderPartialViews /** * View for transactions in a category. * - * @param array $attributes - * - * @return string * @throws FireflyException */ protected function categoryEntry(array $attributes): string // generate view for report. { /** @var PopupReportInterface $popupHelper */ - $popupHelper = app(PopupReportInterface::class); + $popupHelper = app(PopupReportInterface::class); /** @var CategoryRepositoryInterface $categoryRepository */ $categoryRepository = app(CategoryRepositoryInterface::class); @@ -154,9 +148,10 @@ trait RenderPartialViews try { $view = view('popup.report.category-entry', compact('journals', 'category'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render: %s', $e->getMessage())); $view = 'Firefly III could not render the view. Please see the log files.'; + throw new FireflyException($view, 0, $e); } @@ -166,7 +161,6 @@ trait RenderPartialViews /** * Get options for category report. * - * @return string * @throws FireflyException */ protected function categoryReportOptions(): string // render a view @@ -177,9 +171,10 @@ trait RenderPartialViews try { $result = view('reports.options.category', compact('categories'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.options.category: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.options.category: %s', $e->getMessage())); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } @@ -189,7 +184,6 @@ trait RenderPartialViews /** * Get options for double report. * - * @return string * @throws FireflyException */ protected function doubleReportOptions(): string // render a view @@ -217,12 +211,12 @@ trait RenderPartialViews } } - try { $result = view('reports.options.double', compact('set'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.options.tag: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.options.tag: %s', $e->getMessage())); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } @@ -232,9 +226,6 @@ trait RenderPartialViews /** * Returns all the expenses that went to the given expense account. * - * @param array $attributes - * - * @return string * @throws FireflyException */ protected function expenseEntry(array $attributes): string // generate view for report. @@ -243,21 +234,22 @@ trait RenderPartialViews $accountRepository = app(AccountRepositoryInterface::class); /** @var PopupReportInterface $popupHelper */ - $popupHelper = app(PopupReportInterface::class); + $popupHelper = app(PopupReportInterface::class); - $account = $accountRepository->find((int)$attributes['accountId']); + $account = $accountRepository->find((int)$attributes['accountId']); if (null === $account) { return 'This is an unknown account. Apologies.'; } - $journals = $popupHelper->byExpenses($account, $attributes); + $journals = $popupHelper->byExpenses($account, $attributes); try { $view = view('popup.report.expense-entry', compact('journals', 'account'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render: %s', $e->getMessage())); $view = 'Firefly III could not render the view. Please see the log files.'; + throw new FireflyException($view, 0, $e); } @@ -267,20 +259,19 @@ trait RenderPartialViews /** * Get current (from system) rule actions. * - * @param Rule $rule - * - * @return array * @throws FireflyException */ protected function getCurrentActions(Rule $rule): array // get info from object and present. { - $index = 0; - $actions = []; + $index = 0; + $actions = []; // must be repos $currentActions = $rule->ruleActions()->orderBy('order', 'ASC')->get(); + /** @var RuleAction $entry */ foreach ($currentActions as $entry) { $count = ($index + 1); + try { $actions[] = view( 'rules.partials.action', @@ -291,9 +282,10 @@ trait RenderPartialViews 'count' => $count, ] )->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Throwable was thrown in getCurrentActions(): %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Throwable was thrown in getCurrentActions(): %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); + throw new FireflyException(sprintf('Could not render: %s', $e->getMessage()), 0, $e); } @@ -306,16 +298,13 @@ trait RenderPartialViews /** * Get current (from DB) rule triggers. * - * @param Rule $rule - * - * @return array * @throws FireflyException */ protected function getCurrentTriggers(Rule $rule): array // get info from object and present. { // TODO duplicated code. - $operators = config('search.operators'); - $triggers = []; + $operators = config('search.operators'); + $triggers = []; foreach ($operators as $key => $operator) { if ('user_action' !== $key && false === $operator['alias']) { $triggers[$key] = (string)trans(sprintf('firefly.rule_trigger_%s_choice', $key)); @@ -326,12 +315,14 @@ trait RenderPartialViews $renderedEntries = []; // must be repos $currentTriggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get(); + /** @var RuleTrigger $entry */ foreach ($currentTriggers as $entry) { if ('user_action' !== $entry->trigger_type) { $count = ($index + 1); + try { - $rootOperator = OperatorQuerySearch::getRootOperator($entry->trigger_type); + $rootOperator = OperatorQuerySearch::getRootOperator((string)$entry->trigger_type); if (str_starts_with($rootOperator, '-')) { $rootOperator = substr($rootOperator, 1); } @@ -341,14 +332,15 @@ trait RenderPartialViews 'oldTrigger' => $rootOperator, 'oldValue' => $entry->trigger_value, 'oldChecked' => $entry->stop_processing, - 'oldProhibited' => str_starts_with($entry->trigger_type, '-'), + 'oldProhibited' => str_starts_with((string)$entry->trigger_type, '-'), 'count' => $count, 'triggers' => $triggers, ] )->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Throwable was thrown in getCurrentTriggers(): %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Throwable was thrown in getCurrentTriggers(): %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); + throw new FireflyException(sprintf('Could not render: %s', $e->getMessage()), 0, $e); } @@ -362,9 +354,6 @@ trait RenderPartialViews /** * Returns all the incomes that went to the given asset account. * - * @param array $attributes - * - * @return string * @throws FireflyException */ protected function incomeEntry(array $attributes): string // generate view for report. @@ -373,20 +362,21 @@ trait RenderPartialViews $accountRepository = app(AccountRepositoryInterface::class); /** @var PopupReportInterface $popupHelper */ - $popupHelper = app(PopupReportInterface::class); - $account = $accountRepository->find((int)$attributes['accountId']); + $popupHelper = app(PopupReportInterface::class); + $account = $accountRepository->find((int)$attributes['accountId']); if (null === $account) { return 'This is an unknown category. Apologies.'; } - $journals = $popupHelper->byIncome($account, $attributes); + $journals = $popupHelper->byIncome($account, $attributes); try { $view = view('popup.report.income-entry', compact('journals', 'account'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Could not render: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Could not render: %s', $e->getMessage())); $view = 'Firefly III could not render the view. Please see the log files.'; + throw new FireflyException($view, 0, $e); } @@ -396,16 +386,16 @@ trait RenderPartialViews /** * Get options for default report. * - * @return string * @throws FireflyException */ protected function noReportOptions(): string // render a view { try { $result = view('reports.options.no-options')->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.options.no-options: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.options.no-options: %s', $e->getMessage())); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } @@ -415,7 +405,6 @@ trait RenderPartialViews /** * Get options for tag report. * - * @return string * @throws FireflyException */ protected function tagReportOptions(): string // render a view @@ -424,12 +413,12 @@ trait RenderPartialViews $repository = app(TagRepositoryInterface::class); $tags = $repository->get(); - try { $result = view('reports.options.tag', compact('tags'))->render(); - } catch (Throwable $e) { - Log::error(sprintf('Cannot render reports.options.tag: %s', $e->getMessage())); + } catch (\Throwable $e) { + app('log')->error(sprintf('Cannot render reports.options.tag: %s', $e->getMessage())); $result = 'Could not render view.'; + throw new FireflyException($result, 0, $e); } diff --git a/app/Support/Http/Controllers/RequestInformation.php b/app/Support/Http/Controllers/RequestInformation.php index 28780e340f..96fdcd2ef7 100644 --- a/app/Support/Http/Controllers/RequestInformation.php +++ b/app/Support/Http/Controllers/RequestInformation.php @@ -25,46 +25,33 @@ namespace FireflyIII\Support\Http\Controllers; use Carbon\Carbon; use FireflyIII\Exceptions\ValidationException; -use FireflyIII\Helpers\Help\HelpInterface; use FireflyIII\Http\Requests\RuleFormRequest; use FireflyIII\Http\Requests\TestRuleFormRequest; use FireflyIII\Support\Binder\AccountList; use FireflyIII\User; -use Hash; use Illuminate\Contracts\Validation\Validator as ValidatorContract; use Illuminate\Routing\Route; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Validator; -use InvalidArgumentException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; use Route as RouteFacade; /** * Trait RequestInformation - * */ trait RequestInformation { /** * Get the domain of FF system. - * - * @return string */ final protected function getDomain(): string // get request info { $url = url()->to('/'); $parts = parse_url($url); - return $parts['host']; + return $parts['host'] ?? ''; } /** * Get a list of triggers. - * - * @param TestRuleFormRequest $request - * - * @return array */ final protected function getValidTriggerList(TestRuleFormRequest $request): array // process input { @@ -82,28 +69,25 @@ trait RequestInformation $triggers[] = $current; } } + return $triggers; } /** * Returns if user has seen demo. - * - * @return bool - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ final protected function hasSeenDemo(): bool // get request info + get preference { $page = $this->getPageName(); $specificPage = $this->getSpecificPageName(); // indicator if user has seen the help for this page ( + special page): - $key = sprintf('shown_demo_%s%s', $page, $specificPage); + $key = sprintf('shown_demo_%s%s', $page, $specificPage); // is there an intro for this route? $intro = config(sprintf('intro.%s', $page)) ?? []; $specialIntro = config(sprintf('intro.%s%s', $page, $specificPage)) ?? []; // some routes have a "what" parameter, which indicates a special page: - $shownDemo = true; + $shownDemo = true; // both must be array and either must be > 0 if (count($intro) > 0 || count($specialIntro) > 0) { $shownDemo = app('preferences')->get($key, false)->data; @@ -115,9 +99,6 @@ trait RequestInformation return $shownDemo; } - /** - * @return string - */ final protected function getPageName(): string // get request info { return str_replace('.', '_', RouteFacade::currentRouteName()); @@ -125,26 +106,23 @@ trait RequestInformation /** * Get the specific name of a page for intro. - * - * @return string */ final protected function getSpecificPageName(): string // get request info { - return null === RouteFacade::current()->parameter('objectType') ? '' : '_' . RouteFacade::current()->parameter('objectType'); + /** @var null|string $param */ + $param = RouteFacade::current()->parameter('objectType'); + + return null === $param ? '' : sprintf('_%s', $param); } /** * Check if date is outside session range. - * - * @param Carbon $date - * - * @return bool - * */ final protected function notInSessionRange(Carbon $date): bool // Validate a preference { /** @var Carbon $start */ - $start = session('start', today(config('app.timezone'))->startOfMonth()); + $start = session('start', today(config('app.timezone'))->startOfMonth()); + /** @var Carbon $end */ $end = session('end', today(config('app.timezone'))->endOfMonth()); $result = false; @@ -161,30 +139,24 @@ trait RequestInformation /** * Parses attributes from URL - * - * @param array $attributes - * - * @return array */ final protected function parseAttributes(array $attributes): array // parse input + return result { - $attributes['location'] = $attributes['location'] ?? ''; - $attributes['accounts'] = AccountList::routeBinder($attributes['accounts'] ?? '', new Route('get', '', [])); - try { - $attributes['startDate'] = Carbon::createFromFormat('Ymd', $attributes['startDate'])->startOfDay(); - } catch (InvalidArgumentException $e) { - Log::debug(sprintf('Not important error message: %s', $e->getMessage())); - $date = today(config('app.timezone'))->startOfMonth(); - $attributes['startDate'] = $date; + $attributes['location'] ??= ''; + $attributes['accounts'] = AccountList::routeBinder($attributes['accounts'] ?? '', new Route('get', '', [])); + $date = Carbon::createFromFormat('Ymd', $attributes['startDate']); + if (false === $date) { + $date = today(config('app.timezone')); } + $date->startOfMonth(); + $attributes['startDate'] = $date; - try { - $attributes['endDate'] = Carbon::createFromFormat('Ymd', $attributes['endDate'])->endOfDay(); - } catch (InvalidArgumentException $e) { - Log::debug(sprintf('Not important error message: %s', $e->getMessage())); - $date = today(config('app.timezone'))->startOfMonth(); - $attributes['endDate'] = $date; + $date2 = Carbon::createFromFormat('Ymd', $attributes['endDate']); + if (false === $date2) { + $date2 = today(config('app.timezone')); } + $date2->endOfDay(); + $attributes['endDate'] = $date2; return $attributes; } @@ -192,17 +164,11 @@ trait RequestInformation /** * Validate users new password. * - * @param User $user - * @param string $current - * @param string $new - * - * @return bool - * * @throws ValidationException */ - final protected function validatePassword(User $user, string $current, string $new): bool //get request info + final protected function validatePassword(User $user, string $current, string $new): bool // get request info { - if (!Hash::check($current, $user->password)) { + if (!\Hash::check($current, $user->password)) { throw new ValidationException((string)trans('firefly.invalid_current_password')); } @@ -215,10 +181,6 @@ trait RequestInformation /** * Get a validator for an incoming registration request. - * - * @param array $data - * - * @return ValidatorContract */ final protected function validator(array $data): ValidatorContract { diff --git a/app/Support/Http/Controllers/RuleManagement.php b/app/Support/Http/Controllers/RuleManagement.php index 874829cc6d..8a6b527bfd 100644 --- a/app/Support/Http/Controllers/RuleManagement.php +++ b/app/Support/Http/Controllers/RuleManagement.php @@ -27,19 +27,13 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; use FireflyIII\Support\Search\OperatorQuerySearch; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Log; -use Throwable; /** * Trait RuleManagement - * */ trait RuleManagement { /** - * @param Request $request - * - * @return array * @throws FireflyException */ protected function getPreviousActions(Request $request): array @@ -59,12 +53,13 @@ trait RuleManagement 'count' => $index + 1, ] )->render(); - } catch (Throwable $e) { - Log::error(sprintf('Throwable was thrown in getPreviousActions(): %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->error(sprintf('Throwable was thrown in getPreviousActions(): %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); + throw new FireflyException(sprintf('Could not render: %s', $e->getMessage()), 0, $e); } - $index++; + ++$index; } } @@ -72,16 +67,13 @@ trait RuleManagement } /** - * @param Request $request - * - * @return array * @throws FireflyException */ protected function getPreviousTriggers(Request $request): array { // TODO duplicated code. - $operators = config('search.operators'); - $triggers = []; + $operators = config('search.operators'); + $triggers = []; foreach ($operators as $key => $operator) { if ('user_action' !== $key && false === $operator['alias']) { $triggers[$key] = (string)trans(sprintf('firefly.rule_trigger_%s_choice', $key)); @@ -99,19 +91,20 @@ trait RuleManagement 'rules.partials.trigger', [ 'oldTrigger' => OperatorQuerySearch::getRootOperator($oldTrigger['type']), - 'oldValue' => $oldTrigger['value'], + 'oldValue' => $oldTrigger['value'] ?? '', 'oldChecked' => 1 === (int)($oldTrigger['stop_processing'] ?? '0'), 'oldProhibited' => 1 === (int)($oldTrigger['prohibited'] ?? '0'), 'count' => $index + 1, 'triggers' => $triggers, ] )->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Throwable was thrown in getPreviousTriggers(): %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Throwable was thrown in getPreviousTriggers(): %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); + throw new FireflyException(sprintf('Could not render: %s', $e->getMessage()), 0, $e); } - $index++; + ++$index; } } @@ -119,9 +112,6 @@ trait RuleManagement } /** - * @param array $submittedOperators - * - * @return array * @throws FireflyException */ protected function parseFromOperators(array $submittedOperators): array @@ -137,34 +127,35 @@ trait RuleManagement } asort($triggers); - $index = 0; + $index = 0; foreach ($submittedOperators as $operator) { + $rootOperator = OperatorQuerySearch::getRootOperator($operator['type']); + $needsContext = (bool)config(sprintf('search.operators.%s.needs_context', $rootOperator)); + try { $renderedEntries[] = view( 'rules.partials.trigger', [ - 'oldTrigger' => OperatorQuerySearch::getRootOperator($operator['type']), - 'oldValue' => $operator['value'], + 'oldTrigger' => $rootOperator, + 'oldValue' => $needsContext ? $operator['value'] : '', 'oldChecked' => false, 'oldProhibited' => $operator['prohibited'] ?? false, 'count' => $index + 1, 'triggers' => $triggers, ] )->render(); - } catch (Throwable $e) { - Log::debug(sprintf('Throwable was thrown in getPreviousTriggers(): %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (\Throwable $e) { + app('log')->debug(sprintf('Throwable was thrown in getPreviousTriggers(): %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); + throw new FireflyException(sprintf('Could not render: %s', $e->getMessage()), 0, $e); } - $index++; + ++$index; } return $renderedEntries; } - /** - * - */ private function createDefaultRuleGroup(): void { /** @var RuleGroupRepositoryInterface $repository */ diff --git a/app/Support/Http/Controllers/TransactionCalculation.php b/app/Support/Http/Controllers/TransactionCalculation.php index c17c26a7a5..db847dad41 100644 --- a/app/Support/Http/Controllers/TransactionCalculation.php +++ b/app/Support/Http/Controllers/TransactionCalculation.php @@ -30,44 +30,29 @@ use Illuminate\Support\Collection; /** * Trait TransactionCalculation - * */ trait TransactionCalculation { /** * Get all expenses for a set of accounts. - * - * @param Collection $accounts - * @param Collection $opposing - * @param Carbon $start - * @param Carbon $end - * - * @return array */ protected function getExpensesForOpposing(Collection $accounts, Collection $opposing, Carbon $start, Carbon $end): array { - $total = $accounts->merge($opposing); + $total = $accounts->merge($opposing); /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setAccounts($total) - ->setRange($start, $end) - ->withAccountInformation() - ->setTypes([TransactionType::WITHDRAWAL]); + ->setRange($start, $end) + ->withAccountInformation() + ->setTypes([TransactionType::WITHDRAWAL]) + ; return $collector->getExtractedJournals(); } /** * Get all expenses by tags. - * - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return array - * */ protected function getExpensesForTags(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): array { @@ -75,40 +60,28 @@ trait TransactionCalculation $collector = app(GroupCollectorInterface::class); $collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) - ->setTags($tags)->withAccountInformation(); + ->setTags($tags)->withAccountInformation() + ; return $collector->getExtractedJournals(); } /** * Helper function that collects expenses for the given budgets. - * - * @param Collection $accounts - * @param Collection $budgets - * @param Carbon $start - * @param Carbon $end - * - * @return array */ protected function getExpensesInBudgets(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end): array { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) - ->setBudgets($budgets)->withAccountInformation(); + ->setBudgets($budgets)->withAccountInformation() + ; return $collector->getExtractedJournals(); } /** * Get all expenses in a period for categories. - * - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return array */ protected function getExpensesInCategories(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): array { @@ -119,44 +92,33 @@ trait TransactionCalculation ->setRange($start, $end) ->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) ->setCategories($categories) - ->withAccountInformation(); + ->withAccountInformation() + ; return $collector->getExtractedJournals(); } /** * Get all income for a period and a bunch of categories. - * - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return array */ protected function getIncomeForCategories(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): array { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER]) - ->setCategories($categories)->withAccountInformation(); + ->setCategories($categories)->withAccountInformation() + ; return $collector->getExtractedJournals(); } /** * Get the income for a set of accounts. - * - * @param Collection $accounts - * @param Collection $opposing - * @param Carbon $start - * @param Carbon $end - * - * @return array */ protected function getIncomeForOpposing(Collection $accounts, Collection $opposing, Carbon $start, Carbon $end): array { - $total = $accounts->merge($opposing); + $total = $accounts->merge($opposing); + /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setAccounts($total)->setRange($start, $end)->withAccountInformation()->setTypes([TransactionType::DEPOSIT]); @@ -166,20 +128,14 @@ trait TransactionCalculation /** * Get all income by tag. - * - * @param Collection $accounts - * @param Collection $tags - * @param Carbon $start - * @param Carbon $end - * - * @return array */ protected function getIncomeForTags(Collection $accounts, Collection $tags, Carbon $start, Carbon $end): array { /** @var GroupCollectorInterface $collector */ $collector = app(GroupCollectorInterface::class); $collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER]) - ->setTags($tags)->withAccountInformation(); + ->setTags($tags)->withAccountInformation() + ; return $collector->getExtractedJournals(); } diff --git a/app/Support/Http/Controllers/UserNavigation.php b/app/Support/Http/Controllers/UserNavigation.php index 6fffe00a08..22065bb0c0 100644 --- a/app/Support/Http/Controllers/UserNavigation.php +++ b/app/Support/Http/Controllers/UserNavigation.php @@ -31,11 +31,9 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use Illuminate\Http\RedirectResponse; use Illuminate\Routing\Redirector; -use Illuminate\Support\Facades\Log; /** * Trait UserNavigation - * */ trait UserNavigation { @@ -46,26 +44,18 @@ trait UserNavigation * returned but instead the index (/) will be returned. * - If the remembered url contains "jscript/" the remembered url will not be returned but instead the index (/) * will be returned. - * - * @param string $identifier - * - * @return string */ final protected function getPreviousUrl(string $identifier): string { - Log::debug(sprintf('Trying to retrieve URL stored under "%s"', $identifier)); + app('log')->debug(sprintf('Trying to retrieve URL stored under "%s"', $identifier)); $url = (string)session($identifier); - Log::debug(sprintf('The URL is %s', $url)); + app('log')->debug(sprintf('The URL is %s', $url)); return app('steam')->getSafeUrl($url, route('index')); } /** * Will return false if you cant edit this account type. - * - * @param Account $account - * - * @return bool */ final protected function isEditableAccount(Account $account): bool { @@ -75,15 +65,10 @@ trait UserNavigation return in_array($type, $editable, true); } - /** - * @param TransactionGroup $group - * - * @return bool - */ final protected function isEditableGroup(TransactionGroup $group): bool { - /** @var TransactionJournal|null $journal */ - $journal = $group->transactionJournals()->first(); + /** @var null|TransactionJournal $journal */ + $journal = $group->transactionJournals()->first(); if (null === $journal) { return false; } @@ -94,9 +79,7 @@ trait UserNavigation } /** - * @param Account $account - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ final protected function redirectAccountToAccount(Account $account) { @@ -104,19 +87,20 @@ trait UserNavigation if (AccountType::RECONCILIATION === $type || AccountType::INITIAL_BALANCE === $type || AccountType::LIABILITY_CREDIT === $type) { // reconciliation must be stored somewhere in this account's transactions. - /** @var Transaction|null $transaction */ + /** @var null|Transaction $transaction */ $transaction = $account->transactions()->first(); if (null === $transaction) { - Log::error(sprintf('Account #%d has no transactions. Dont know where it belongs.', $account->id)); + app('log')->error(sprintf('Account #%d has no transactions. Dont know where it belongs.', $account->id)); session()->flash('error', trans('firefly.cant_find_redirect_account')); return redirect(route('index')); } - $journal = $transaction->transactionJournal; - /** @var Transaction|null $other */ - $other = $journal->transactions()->where('id', '!=', $transaction->id)->first(); + $journal = $transaction->transactionJournal; + + /** @var null|Transaction $other */ + $other = $journal->transactions()->where('id', '!=', $transaction->id)->first(); if (null === $other) { - Log::error(sprintf('Account #%d has no valid journals. Dont know where it belongs.', $account->id)); + app('log')->error(sprintf('Account #%d has no valid journals. Dont know where it belongs.', $account->id)); session()->flash('error', trans('firefly.cant_find_redirect_account')); return redirect(route('index')); @@ -129,22 +113,21 @@ trait UserNavigation } /** - * @param TransactionGroup $group - * - * @return RedirectResponse|Redirector + * @return Redirector|RedirectResponse */ final protected function redirectGroupToAccount(TransactionGroup $group) { - /** @var TransactionJournal|null $journal */ - $journal = $group->transactionJournals()->first(); + /** @var null|TransactionJournal $journal */ + $journal = $group->transactionJournals()->first(); if (null === $journal) { - Log::error(sprintf('No journals in group #%d', $group->id)); + app('log')->error(sprintf('No journals in group #%d', $group->id)); return redirect(route('index')); } // prefer redirect to everything but expense and revenue: $transactions = $journal->transactions; $ignore = [AccountType::REVENUE, AccountType::EXPENSE, AccountType::RECONCILIATION, AccountType::INITIAL_BALANCE]; + /** @var Transaction $transaction */ foreach ($transactions as $transaction) { $type = $transaction->account->accountType->type; @@ -156,17 +139,12 @@ trait UserNavigation return redirect(route('index')); } - /** - * @param string $identifier - * - * @return string|null - */ final protected function rememberPreviousUrl(string $identifier): ?string { $return = app('steam')->getSafePreviousUrl(); session()->put($identifier, $return); - Log::debug(sprintf('rememberPreviousUrl: %s: "%s"', $identifier, $return)); + app('log')->debug(sprintf('rememberPreviousUrl: %s: "%s"', $identifier, $return)); return $return; } diff --git a/app/Support/Logging/AuditLogger.php b/app/Support/Logging/AuditLogger.php index eeac766f53..56bd255554 100644 --- a/app/Support/Logging/AuditLogger.php +++ b/app/Support/Logging/AuditLogger.php @@ -30,24 +30,19 @@ use Monolog\Handler\AbstractProcessingHandler; /** * Class AuditLogger - * - */ class AuditLogger { /** * Customize the given logger instance. - * - * @param Logger $logger - * - * @return void */ - public function __invoke(Logger $logger) + public function __invoke(Logger $logger): void { $processor = new AuditProcessor(); + /** @var AbstractProcessingHandler $handler */ foreach ($logger->getHandlers() as $handler) { - $formatter = new LineFormatter("[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"); + $formatter = new LineFormatter("[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n", 'Y-m-d H:i:s', false, true); $handler->setFormatter($formatter); $handler->pushProcessor($processor); } diff --git a/app/Support/Logging/AuditProcessor.php b/app/Support/Logging/AuditProcessor.php index 8e64183298..5f8f823c13 100644 --- a/app/Support/Logging/AuditProcessor.php +++ b/app/Support/Logging/AuditProcessor.php @@ -28,33 +28,27 @@ use Monolog\LogRecord; /** * Class AuditProcessor - * - */ class AuditProcessor { - /** - * @param LogRecord $record - * - * @return LogRecord - */ public function __invoke(LogRecord $record): LogRecord { if (auth()->check()) { $message = sprintf( 'AUDIT: %s (%s (%s) -> %s:%s)', - $record['message'], + $record['message'], // @phpstan-ignore-line app('request')->ip(), auth()->user()->email, request()->method(), request()->url() ); + return new LogRecord($record->datetime, $record->channel, $record->level, $message, $record->context, $record->extra, $record->formatted); } $message = sprintf( 'AUDIT: %s (%s -> %s:%s)', - $record['message'], + $record['message'], // @phpstan-ignore-line app('request')->ip(), request()->method(), request()->url() diff --git a/app/Support/Models/BillDateCalculator.php b/app/Support/Models/BillDateCalculator.php new file mode 100644 index 0000000000..0be61d49aa --- /dev/null +++ b/app/Support/Models/BillDateCalculator.php @@ -0,0 +1,160 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Support\Models; + +use Carbon\Carbon; +use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; + +class BillDateCalculator +{ + // #8401 we start keeping track of the diff in periods, because if it can't jump over a period (happens often in February) + // we can force the process along. + private int $diffInMonths = 0; + + /** + * Returns the dates a bill needs to be paid. + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) + */ + public function getPayDates(Carbon $earliest, Carbon $latest, Carbon $billStart, string $period, int $skip, ?Carbon $lastPaid): array + { + $this->diffInMonths = 0; + $earliest->startOfDay(); + $latest->endOfDay(); + $billStart->startOfDay(); + Log::debug('Now in BillDateCalculator::getPayDates()'); + Log::debug(sprintf('Dates must be between %s and %s.', $earliest->format('Y-m-d'), $latest->format('Y-m-d'))); + Log::debug(sprintf('Bill started on %s, period is "%s", skip is %d, last paid = "%s".', $billStart->format('Y-m-d'), $period, $skip, $lastPaid?->format('Y-m-d'))); + + $daysUntilEOM = app('navigation')->daysUntilEndOfMonth($billStart); + Log::debug(sprintf('For bill start, days until end of month is %d', $daysUntilEOM)); + + $set = new Collection(); + $currentStart = clone $earliest; + + // 2023-06-23 subDay to fix 7655 + $currentStart->subDay(); + $loop = 0; + + Log::debug('Start of loop'); + while ($currentStart <= $latest) { + Log::debug(sprintf('Current start is %s', $currentStart->format('Y-m-d'))); + $nextExpectedMatch = $this->nextDateMatch(clone $currentStart, clone $billStart, $period, $skip); + Log::debug(sprintf('Next expected match is %s', $nextExpectedMatch->format('Y-m-d'))); + + // If nextExpectedMatch is after end, we stop looking: + if ($nextExpectedMatch->gt($latest)) { + Log::debug('Next expected match is after $latest.'); + if ($set->count() > 0) { + Log::debug(sprintf('Already have %d date(s), so we can safely break.', $set->count())); + + break; + } + Log::debug('Add date to set anyway, since we had no dates yet.'); + $set->push(clone $nextExpectedMatch); + + continue; + } + + // add to set, if the date is ON or after the start parameter + // AND date is after last paid date + if ( + $nextExpectedMatch->gte($earliest) // date is after "earliest possible date" + && (null === $lastPaid || $nextExpectedMatch->gt($lastPaid)) // date is after last paid date, if that date is not NULL + ) { + Log::debug('Add date to set, because it is after earliest possible date and after last paid date.'); + $set->push(clone $nextExpectedMatch); + } + + // #8401 + // a little check for when the day of the bill (ie 30th of the month) is not possible in + // the next expected month because that month has only 28 days (i.e. february). + // this applies to leap years as well. + if ($daysUntilEOM < 4) { + $nextUntilEOM = app('navigation')->daysUntilEndOfMonth($nextExpectedMatch); + $diffEOM = $daysUntilEOM - $nextUntilEOM; + if ($diffEOM > 0) { + Log::debug(sprintf('Bill start is %d days from the end of the month. nextExceptedMatch is %d days from the end of the month.', $daysUntilEOM, $nextUntilEOM)); + $nextExpectedMatch->subDays(1); + Log::debug(sprintf('Subtract %d days from next expected match, which is now %s', $diffEOM, $nextExpectedMatch->format('Y-m-d'))); + } + } + + // 2023-10 + // for the next loop, go to end of period, THEN add day. + Log::debug('Add one day to nextExpectedMatch/currentStart.'); + $nextExpectedMatch->addDay(); + $currentStart = clone $nextExpectedMatch; + + ++$loop; + if ($loop > 12) { + Log::debug('Loop is more than 12, so we break.'); + + break; + } + } + Log::debug('end of loop'); + $simple = $set->map( + static function (Carbon $date) { + return $date->format('Y-m-d'); + } + ); + Log::debug(sprintf('Found %d pay dates', $set->count()), $simple->toArray()); + + return $simple->toArray(); + } + + /** + * Given a bill and a date, this method will tell you at which moment this bill expects its next + * transaction given the earliest date this could happen. + * + * That date must be AFTER $billStartDate, as a sanity check. + */ + protected function nextDateMatch(Carbon $earliest, Carbon $billStartDate, string $period, int $skip): Carbon + { + Log::debug(sprintf('Bill start date is %s', $billStartDate->format('Y-m-d'))); + if ($earliest->lt($billStartDate)) { + Log::debug('Earliest possible date is after bill start, so just return bill start date.'); + + return $billStartDate; + } + + $steps = app('navigation')->diffInPeriods($period, $skip, $earliest, $billStartDate); + if ($steps === $this->diffInMonths) { + Log::debug(sprintf('Steps is %d, which is the same as diffInMonths (%d), so we add another 1.', $steps, $this->diffInMonths)); + ++$steps; + } + $this->diffInMonths = $steps; + $result = clone $billStartDate; + if ($steps > 0) { + --$steps; + Log::debug(sprintf('Steps is %d, because addPeriod already adds 1.', $steps)); + $result = app('navigation')->addPeriod($billStartDate, $period, $steps); + } + Log::debug(sprintf('Number of steps is %d, added to %s, result is %s', $steps, $billStartDate->format('Y-m-d'), $result->format('Y-m-d'))); + + return $result; + } +} diff --git a/frontend/src/api/rule-groups/get.js b/app/Support/Models/ReturnsIntegerIdTrait.php similarity index 60% rename from frontend/src/api/rule-groups/get.js rename to app/Support/Models/ReturnsIntegerIdTrait.php index b63ba19027..5d0d501b53 100644 --- a/frontend/src/api/rule-groups/get.js +++ b/app/Support/Models/ReturnsIntegerIdTrait.php @@ -1,6 +1,7 @@ +. */ -import {api} from "boot/axios"; +declare(strict_types=1); -export default class Get { - get(identifier, date) { - let url = '/api/v1/rule_groups/' + identifier; - if (!date) { - return api.get(url); +namespace FireflyIII\Support\Models; + +use Illuminate\Database\Eloquent\Casts\Attribute; + +/** + * Trait ReturnsIntegerIdTrait + */ +trait ReturnsIntegerIdTrait +{ + /** + * Get the ID + * + * @SuppressWarnings(PHPMD.ShortMethodName) + */ + protected function id(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); } - return api.get(url, {params: {date: date}}); - } - - rules(identifier, page, cacheKey) { - let url = '/api/v1/rule_groups/' + identifier + '/rules'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } } diff --git a/frontend/src/stores/index.js b/app/Support/Models/ReturnsIntegerUserIdTrait.php similarity index 55% rename from frontend/src/stores/index.js rename to app/Support/Models/ReturnsIntegerUserIdTrait.php index 637bd95b24..77f1d8d18f 100644 --- a/frontend/src/stores/index.js +++ b/app/Support/Models/ReturnsIntegerUserIdTrait.php @@ -1,6 +1,7 @@ +. */ -import {store} from 'quasar/wrappers' -import {createPinia} from 'pinia' +declare(strict_types=1); -/* - * If not building with SSR mode, you can - * directly export the Store instantiation; - * - * The function below can be async too; either use - * async/await or return a Promise which resolves - * with the Store instance. +namespace FireflyIII\Support\Models; + +use Illuminate\Database\Eloquent\Casts\Attribute; + +/** + * Trait ReturnsIntegerUserIdTrait */ +trait ReturnsIntegerUserIdTrait +{ + /** + * Get the user group ID + */ + protected function userGroupId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } -export default store((/* { ssrContext } */) => { - const pinia = createPinia() - - // You can add Pinia plugins here - // pinia.use(SomePiniaPlugin) - - return pinia -}) + protected function userId(): Attribute + { + return Attribute::make( + get: static fn ($value) => (int)$value, + ); + } +} diff --git a/app/Support/Navigation.php b/app/Support/Navigation.php index 0cd95afc07..9eac3bebe9 100644 --- a/app/Support/Navigation.php +++ b/app/Support/Navigation.php @@ -25,14 +25,11 @@ namespace FireflyIII\Support; use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Exceptions\IntervalException; use FireflyIII\Helpers\Fiscal\FiscalHelperInterface; use FireflyIII\Support\Calendar\Calculator; -use FireflyIII\Support\Calendar\Exceptions\IntervalException; use FireflyIII\Support\Calendar\Periodicity; use Illuminate\Support\Facades\Log; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; -use Throwable; /** * Class Navigation. @@ -41,23 +38,14 @@ class Navigation { private Calculator $calculator; - /** - * @param Calculator|null $calculator - */ public function __construct(Calculator $calculator = null) { - $this->calculator = ($calculator instanceof Calculator) ?: new Calculator(); + $this->calculator = $calculator instanceof Calculator ? $calculator : new Calculator(); } - /** - * @param Carbon $theDate - * @param string $repeatFreq - * @param int $skip - * - * @return Carbon - */ public function addPeriod(Carbon $theDate, string $repeatFreq, int $skip = 0): Carbon { + $date = clone $theDate; $functionMap = [ '1D' => Periodicity::Daily, 'daily' => Periodicity::Daily, @@ -90,28 +78,22 @@ class Navigation Log::error(sprintf( 'The periodicity %s is unknown. Choose one of available periodicity: %s', $repeatFreq, - join(', ', array_keys($functionMap)) + implode(', ', array_keys($functionMap)) )); + return $theDate; } - return $this->nextDateByInterval($theDate, $functionMap[$repeatFreq], $skip); + return $this->nextDateByInterval($date, $functionMap[$repeatFreq], $skip); } - /** - * @param Carbon $epoch - * @param Periodicity $periodicity - * @param int $skipInterval - * - * @return Carbon - */ public function nextDateByInterval(Carbon $epoch, Periodicity $periodicity, int $skipInterval = 0): Carbon { try { return $this->calculator->nextDateByInterval($epoch, $periodicity, $skipInterval); } catch (IntervalException $exception) { Log::warning($exception->getMessage(), ['exception' => $exception]); - } catch (Throwable $exception) { + } catch (\Throwable $exception) { // @phpstan-ignore-line Log::error($exception->getMessage(), ['exception' => $exception]); } @@ -123,20 +105,12 @@ class Navigation return $epoch; } - /** - * @param Carbon $start - * @param Carbon $end - * @param string $range - * - * @return array - * - */ public function blockPeriods(Carbon $start, Carbon $end, string $range): array { if ($end < $start) { [$start, $end] = [$end, $start]; } - $periods = []; + $periods = []; // first, 13 periods of [range] $loopCount = 0; $loopDate = clone $end; @@ -144,8 +118,8 @@ class Navigation $workEnd = clone $loopDate; while ($loopCount < 13) { // make range: - $workStart = \Navigation::startOfPeriod($workStart, $range); - $workEnd = \Navigation::endOfPeriod($workStart, $range); + $workStart = $this->startOfPeriod($workStart, $range); + $workEnd = $this->endOfPeriod($workStart, $range); // make sure we don't go overboard if ($workEnd->gt($start)) { @@ -157,7 +131,7 @@ class Navigation } // skip to the next period: $workStart->subDay()->startOfDay(); - $loopCount++; + ++$loopCount; } // if $workEnd is still before $start, continue on a yearly basis: $loopCount = 0; @@ -177,22 +151,16 @@ class Navigation } // skip to the next period: $workStart->subDay()->startOfDay(); - $loopCount++; + ++$loopCount; } } return $periods; } - /** - * @param Carbon $theDate - * @param string $repeatFreq - * - * @return Carbon - */ public function startOfPeriod(Carbon $theDate, string $repeatFreq): Carbon { - $date = clone $theDate; + $date = clone $theDate; $functionMap = [ '1D' => 'startOfDay', @@ -212,7 +180,7 @@ class Navigation ]; if (array_key_exists($repeatFreq, $functionMap)) { $function = $functionMap[$repeatFreq]; - $date->$function(); + $date->{$function}(); // @phpstan-ignore-line return $date; } @@ -223,7 +191,7 @@ class Navigation return $date; } - $result = match ($repeatFreq) { + $result = match ($repeatFreq) { 'last7' => $date->subDays(7)->startOfDay(), 'last30' => $date->subDays(30)->startOfDay(), 'last90' => $date->subDays(90)->startOfDay(), @@ -237,7 +205,6 @@ class Navigation return $result; } - if ('custom' === $repeatFreq) { return $date; // the date is already at the start. } @@ -246,15 +213,9 @@ class Navigation return $theDate; } - /** - * @param Carbon $end - * @param string $repeatFreq - * - * @return Carbon - */ public function endOfPeriod(Carbon $end, string $repeatFreq): Carbon { - $currentEnd = clone $end; + $currentEnd = clone $end; $functionMap = [ '1D' => 'endOfDay', @@ -275,32 +236,31 @@ class Navigation 'yearly' => 'addYear', '1Y' => 'addYear', ]; - $modifierMap = [ - 'quarter' => 3, - '3M' => 3, - 'quarterly' => 3, - 'half-year' => 6, - 'half_year' => 6, - '6M' => 6, - ]; + $modifierMap = ['quarter' => 3, '3M' => 3, 'quarterly' => 3, 'half-year' => 6, 'half_year' => 6, '6M' => 6]; + $subDay = ['week', 'weekly', '1W', 'month', 'monthly', '1M', '3M', 'quarter', 'quarterly', '6M', 'half-year', 'half_year', '1Y', 'year', 'yearly']; - $subDay = ['week', 'weekly', '1W', 'month', 'monthly', '1M', '3M', 'quarter', 'quarterly', '6M', 'half-year', 'half_year', '1Y', 'year', 'yearly']; - - // if the range is custom, the end of the period - // is another X days (x is the difference between start) - // and end added to $theCurrentEnd if ('custom' === $repeatFreq) { - /** @var Carbon $tStart */ - $tStart = session('start', today(config('app.timezone'))->startOfMonth()); - /** @var Carbon $tEnd */ - $tEnd = session('end', today(config('app.timezone'))->endOfMonth()); - $diffInDays = $tStart->diffInDays($tEnd); + // if the repeat frequency is "custom", use the current session start/end to see how large the range is, + // and use that to "add" another period. + // if there is no session data available use "30 days" as a default. + $diffInDays = 30; + if (null !== session('start') && null !== session('end')) { + Log::debug('Session data available.'); + + /** @var Carbon $tStart */ + $tStart = session('start', today(config('app.timezone'))->startOfMonth()); + + /** @var Carbon $tEnd */ + $tEnd = session('end', today(config('app.timezone'))->endOfMonth()); + $diffInDays = $tStart->diffInDays($tEnd); + } + Log::debug(sprintf('Diff in days is %d', $diffInDays)); $currentEnd->addDays($diffInDays); return $currentEnd; } - $result = match ($repeatFreq) { + $result = match ($repeatFreq) { 'last7' => $currentEnd->addDays(7)->startOfDay(), 'last30' => $currentEnd->addDays(30)->startOfDay(), 'last90' => $currentEnd->addDays(90)->startOfDay(), @@ -315,16 +275,15 @@ class Navigation } unset($result); - if (!array_key_exists($repeatFreq, $functionMap)) { Log::error(sprintf('Cannot do endOfPeriod for $repeat_freq "%s"', $repeatFreq)); return $end; } - $function = $functionMap[$repeatFreq]; + $function = $functionMap[$repeatFreq]; if (array_key_exists($repeatFreq, $modifierMap)) { - $currentEnd->$function($modifierMap[$repeatFreq]); + $currentEnd->{$function}($modifierMap[$repeatFreq]); // @phpstan-ignore-line if (in_array($repeatFreq, $subDay, true)) { $currentEnd->subDay(); } @@ -332,7 +291,7 @@ class Navigation return $currentEnd; } - $currentEnd->$function(); + $currentEnd->{$function}(); // @phpstan-ignore-line $currentEnd->endOfDay(); if (in_array($repeatFreq, $subDay, true)) { $currentEnd->subDay(); @@ -341,42 +300,68 @@ class Navigation return $currentEnd; } - /** - * @param string $period - * @param Carbon $beginning - * @param Carbon $end - * - * @return int - */ - public function diffInPeriods(string $period, Carbon $beginning, Carbon $end): int + public function daysUntilEndOfMonth(Carbon $date): int { - $map = [ - 'daily' => 'diffInDays', - 'weekly' => 'diffInWeeks', - 'monthly' => 'diffInMonths', - 'quarterly' => 'diffInQuarters', - 'half-year' => 'diffInQuarters', - 'yearly' => 'diffInYears', + $endOfMonth = $date->copy()->endOfMonth(); + + return $date->diffInDays($endOfMonth); + } + + public function diffInPeriods(string $period, int $skip, Carbon $beginning, Carbon $end): int + { + Log::debug(sprintf( + 'diffInPeriods: %s (skip: %d), between %s and %s.', + $period, + $skip, + $beginning->format('Y-m-d'), + $end->format('Y-m-d') + )); + $map = [ + 'daily' => 'floatDiffInDays', + 'weekly' => 'floatDiffInWeeks', + 'monthly' => 'floatDiffInMonths', + 'quarterly' => 'floatDiffInMonths', + 'half-year' => 'floatDiffInMonths', + 'yearly' => 'floatDiffInYears', ]; if (!array_key_exists($period, $map)) { - app('log')->warning(sprintf('No diffInPeriods for period "%s"', $period)); + Log::warning(sprintf('No diffInPeriods for period "%s"', $period)); + return 1; } - $func = $map[$period]; - $diff = $beginning->$func($end); - if ('half-year' === $period) { - $diff = ceil($diff / 2); + $func = $map[$period]; + // first do the diff + $floatDiff = $beginning->{$func}($end); // @phpstan-ignore-line + + // then correct for quarterly or half-year + if ('quarterly' === $period) { + Log::debug(sprintf('Q: Corrected %f to %f', $floatDiff, $floatDiff / 3)); + $floatDiff /= 3; } + if ('half-year' === $period) { + Log::debug(sprintf('H: Corrected %f to %f', $floatDiff, $floatDiff / 6)); + $floatDiff /= 6; + } + + // then do ceil() + $diff = ceil($floatDiff); + + Log::debug(sprintf('Diff is %f periods (%d rounded up)', $floatDiff, $diff)); + + if ($skip > 0) { + $parameter = $skip + 1; + $diff = ceil($diff / $parameter) * $parameter; + Log::debug(sprintf( + 'diffInPeriods: skip is %d, so param is %d, and diff becomes %d', + $skip, + $parameter, + $diff + )); + } + return (int)$diff; } - /** - * @param Carbon $theCurrentEnd - * @param string $repeatFreq - * @param Carbon|null $maxDate - * - * @return Carbon - */ public function endOfX(Carbon $theCurrentEnd, string $repeatFreq, ?Carbon $maxDate): Carbon { $functionMap = [ @@ -396,11 +381,11 @@ class Navigation 'yearly' => 'endOfYear', ]; - $currentEnd = clone $theCurrentEnd; + $currentEnd = clone $theCurrentEnd; if (array_key_exists($repeatFreq, $functionMap)) { $function = $functionMap[$repeatFreq]; - $currentEnd->$function(); + $currentEnd->{$function}(); // @phpstan-ignore-line } if (null !== $maxDate && $currentEnd > $maxDate) { @@ -413,30 +398,33 @@ class Navigation /** * Returns the user's view range and if necessary, corrects the dynamic view * range to a normal range. - * - * @param bool $correct - * - * @return string - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function getViewRange(bool $correct): string { - $range = (string)app('preferences')->get('viewRange', '1M')?->data ?? '1M'; + $range = app('preferences')->get('viewRange', '1M')?->data ?? '1M'; + if (is_array($range)) { + $range = '1M'; + } + $range = (string)$range; if (!$correct) { return $range; } + switch ($range) { default: return $range; + case 'last7': return '1W'; + case 'last30': case 'MTD': return '1M'; + case 'last90': case 'QTD': return '3M'; + case 'last365': case 'YTD': return '1Y'; @@ -444,15 +432,11 @@ class Navigation } /** - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException */ public function listOfPeriods(Carbon $start, Carbon $end): array { - $locale = app('steam')->getLocale(); + $locale = app('steam')->getLocale(); // define period to increment $increment = 'addDay'; $format = $this->preferredCarbonFormat($start, $end); @@ -468,13 +452,13 @@ class Navigation $increment = 'addYear'; $displayFormat = (string)trans('config.year_js'); } - $begin = clone $start; - $entries = []; + $begin = clone $start; + $entries = []; while ($begin < $end) { $formatted = $begin->format($format); $displayed = $begin->isoFormat($displayFormat); $entries[$formatted] = $displayed; - $begin->$increment(); + $begin->{$increment}(); // @phpstan-ignore-line } return $entries; @@ -483,11 +467,6 @@ class Navigation /** * If the date difference between start and end is less than a month, method returns "Y-m-d". If the difference is * less than a year, method returns "Y-m". If the date difference is larger, method returns "Y". - * - * @param Carbon $start - * @param Carbon $end - * - * @return string */ public function preferredCarbonFormat(Carbon $start, Carbon $end): string { @@ -503,12 +482,6 @@ class Navigation return $format; } - /** - * @param Carbon $theDate - * @param string $repeatFrequency - * - * @return string - */ public function periodShow(Carbon $theDate, string $repeatFrequency): string { $date = clone $theDate; @@ -529,7 +502,7 @@ class Navigation ]; if (array_key_exists($repeatFrequency, $formatMap)) { - return $date->isoFormat((string)$formatMap[$repeatFrequency]); + return $date->isoFormat($formatMap[$repeatFrequency]); } if ('3M' === $repeatFrequency || 'quarter' === $repeatFrequency) { $quarter = ceil($theDate->month / 3); @@ -545,16 +518,12 @@ class Navigation /** * Same as preferredCarbonFormat but by string - * - * @param string $period - * - * @return string */ public function preferredCarbonFormatByPeriod(string $period): string { return match ($period) { default => 'Y-m-d', - //'1D' => 'Y-m-d', + // '1D' => 'Y-m-d', '1W' => '\WW,Y', '1M' => 'Y-m', '3M', '6M' => '\QQ,Y', @@ -566,11 +535,6 @@ class Navigation * If the date difference between start and end is less than a month, method returns trans(config.month_and_day). * If the difference is less than a year, method returns "config.month". If the date difference is larger, method * returns "config.year". - * - * @param Carbon $start - * @param Carbon $end - * - * @return string */ public function preferredCarbonLocalizedFormat(Carbon $start, Carbon $end): string { @@ -590,11 +554,6 @@ class Navigation /** * If the date difference between start and end is less than a month, method returns "endOfDay". If the difference * is less than a year, method returns "endOfMonth". If the date difference is larger, method returns "endOfYear". - * - * @param Carbon $start - * @param Carbon $end - * - * @return string */ public function preferredEndOfPeriod(Carbon $start, Carbon $end): string { @@ -613,11 +572,6 @@ class Navigation /** * If the date difference between start and end is less than a month, method returns "1D". If the difference is * less than a year, method returns "1M". If the date difference is larger, method returns "1Y". - * - * @param Carbon $start - * @param Carbon $end - * - * @return string */ public function preferredRangeFormat(Carbon $start, Carbon $end): string { @@ -636,11 +590,6 @@ class Navigation /** * If the date difference between start and end is less than a month, method returns "%Y-%m-%d". If the difference * is less than a year, method returns "%Y-%m". If the date difference is larger, method returns "%Y". - * - * @param Carbon $start - * @param Carbon $end - * - * @return string */ public function preferredSqlFormat(Carbon $start, Carbon $end): string { @@ -657,18 +606,12 @@ class Navigation } /** - * @param Carbon $theDate - * @param string $repeatFreq - * @param int|null $subtract - * - * @return Carbon - * * @throws FireflyException */ public function subtractPeriod(Carbon $theDate, string $repeatFreq, int $subtract = null): Carbon { - $subtract = $subtract ?? 1; - $date = clone $theDate; + $subtract ??= 1; + $date = clone $theDate; // 1D 1W 1M 3M 6M 1Y $functionMap = [ '1D' => 'subDays', @@ -692,7 +635,7 @@ class Navigation ]; if (array_key_exists($repeatFreq, $functionMap)) { $function = $functionMap[$repeatFreq]; - $date->$function($subtract); + $date->{$function}($subtract); // @phpstan-ignore-line return $date; } @@ -707,7 +650,8 @@ class Navigation // this is then subtracted from $theDate (* $subtract). if ('custom' === $repeatFreq) { /** @var Carbon $tStart */ - $tStart = session('start', today(config('app.timezone'))->startOfMonth()); + $tStart = session('start', today(config('app.timezone'))->startOfMonth()); + /** @var Carbon $tEnd */ $tEnd = session('end', today(config('app.timezone'))->endOfMonth()); $diffInDays = $tStart->diffInDays($tEnd); @@ -715,42 +659,51 @@ class Navigation return $date; } + switch ($repeatFreq) { default: break; + case 'last7': $date->subDays(7); + return $date; + case 'last30': $date->subDays(30); + return $date; + case 'last90': $date->subDays(90); + return $date; + case 'last365': $date->subDays(365); + return $date; + case 'YTD': $date->subYear(); + return $date; + case 'QTD': $date->subQuarter(); + return $date; + case 'MTD': $date->subMonth(); + return $date; } - throw new FireflyException(sprintf('Cannot do subtractPeriod for $repeat_freq "%s"', $repeatFreq)); } /** - * @param string $range - * @param Carbon $start - * - * @return Carbon - * * @throws FireflyException */ public function updateEndDate(string $range, Carbon $start): Carbon @@ -767,7 +720,7 @@ class Navigation if (array_key_exists($range, $functionMap)) { $function = $functionMap[$range]; - $end->$function(); + $end->{$function}(); // @phpstan-ignore-line return $end; } @@ -789,7 +742,7 @@ class Navigation return $fiscalHelper->endOfFiscalYear($end); } - $list = [ + $list = [ 'last7', 'last30', 'last90', @@ -802,6 +755,7 @@ class Navigation $end = today(config('app.timezone')); $end->endOfDay(); Log::debug(sprintf('updateEndDate returns "%s"', $end->format('Y-m-d'))); + return $end; } @@ -809,11 +763,6 @@ class Navigation } /** - * @param string $range - * @param Carbon $start - * - * @return Carbon - * * @throws FireflyException */ public function updateStartDate(string $range, Carbon $start): Carbon @@ -828,7 +777,7 @@ class Navigation ]; if (array_key_exists($range, $functionMap)) { $function = $functionMap[$range]; - $start->$function(); + $start->{$function}(); // @phpstan-ignore-line return $start; } @@ -850,31 +799,47 @@ class Navigation return $fiscalHelper->startOfFiscalYear($start); } + switch ($range) { default: break; + case 'last7': $start->subDays(7); + return $start; + case 'last30': $start->subDays(30); + return $start; + case 'last90': $start->subDays(90); + return $start; + case 'last365': $start->subDays(365); + return $start; + case 'YTD': $start->startOfYear(); + return $start; + case 'QTD': $start->startOfQuarter(); + return $start; + case 'MTD': $start->startOfMonth(); + return $start; } + throw new FireflyException(sprintf('updateStartDate cannot handle range "%s"', $range)); } } diff --git a/app/Support/Notifications/UrlValidator.php b/app/Support/Notifications/UrlValidator.php index 5f6106ce9d..355f45e4ad 100644 --- a/app/Support/Notifications/UrlValidator.php +++ b/app/Support/Notifications/UrlValidator.php @@ -1,6 +1,5 @@ debug(sprintf('parseDate("%s")', $date)); + $date = strtolower($date); // parse keywords: if (in_array($date, $this->keywords, true)) { return $this->parseKeyword($date); } // if regex for YYYY-MM-DD: - $pattern = '/^(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12]\d|3[01])$/'; - if (preg_match($pattern, $date)) { + $pattern = '/^(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12]\d|3[01])$/'; + $result = preg_match($pattern, $date); + if (false !== $result && 0 !== $result) { return $this->parseDefaultDate($date); } @@ -108,7 +104,8 @@ class ParseDateString // 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)); + app('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'); @@ -121,11 +118,6 @@ class ParseDateString throw new FireflyException(sprintf('[d] Not a recognised date format: "%s"', $date)); } - /** - * @param string $keyword - * - * @return Carbon - */ protected function parseKeyword(string $keyword): Carbon { $today = today(config('app.timezone'))->startOfDay(); @@ -145,24 +137,25 @@ class ParseDateString }; } - /** - * @param string $date - * - * @return Carbon - */ protected function parseDefaultDate(string $date): Carbon { - return Carbon::createFromFormat('Y-m-d', $date); + $result = false; + + try { + $result = Carbon::createFromFormat('Y-m-d', $date); + } catch (InvalidFormatException $e) { // @phpstan-ignore-line + Log::error(sprintf('parseDefaultDate("%s") ran into an error, but dont mind: %s', $date, $e->getMessage())); + } + if (false === $result) { + $result = today(config('app.timezone'))->startOfDay(); + } + + return $result; } - /** - * @param string $date - * - * @return Carbon - */ protected function parseRelativeDate(string $date): Carbon { - Log::debug(sprintf('Now in parseRelativeDate("%s")', $date)); + app('log')->debug(sprintf('Now in parseRelativeDate("%s")', $date)); $parts = explode(' ', $date); $today = today(config('app.timezone'))->startOfDay(); $functions = [ @@ -183,63 +176,73 @@ class ParseDateString ]; foreach ($parts as $part) { - Log::debug(sprintf('Now parsing part "%s"', $part)); - $part = trim($part); + app('log')->debug(sprintf('Now parsing part "%s"', $part)); + $part = trim($part); // verify if correct - $pattern = '/[+-]\d+[wqmdy]/'; - $res = preg_match($pattern, $part); - if (0 === $res || false === $res) { - Log::error(sprintf('Part "%s" does not match regular expression. Will be skipped.', $part)); + $pattern = '/[+-]\d+[wqmdy]/'; + $result = preg_match($pattern, $part); + if (0 === $result || false === $result) { + app('log')->error(sprintf('Part "%s" does not match regular expression. Will be skipped.', $part)); + continue; } $direction = str_starts_with($part, '+') ? 1 : 0; $period = $part[strlen($part) - 1]; $number = (int)substr($part, 1, -1); if (!array_key_exists($period, $functions[$direction])) { - Log::error(sprintf('No method for direction %d and period "%s".', $direction, $period)); + app('log')->error(sprintf('No method for direction %d and period "%s".', $direction, $period)); + continue; } - $func = $functions[$direction][$period]; - Log::debug(sprintf('Will now do %s(%d) on %s', $func, $number, $today->format('Y-m-d'))); - $today->$func($number); - Log::debug(sprintf('Resulting date is %s', $today->format('Y-m-d'))); + $func = $functions[$direction][$period]; + app('log')->debug(sprintf('Will now do %s(%d) on %s', $func, $number, $today->format('Y-m-d'))); + $today->{$func}($number); // @phpstan-ignore-line + app('log')->debug(sprintf('Resulting date is %s', $today->format('Y-m-d'))); } return $today; } - /** - * @param string $date - * - * @return array - */ public function parseRange(string $date): array { // several types of range can be submitted $result = [ 'exact' => new Carbon('1984-09-17'), ]; + switch (true) { default: break; + case $this->isDayRange($date): $result = $this->parseDayRange($date); + break; + case $this->isMonthRange($date): $result = $this->parseMonthRange($date); + break; + case $this->isYearRange($date): $result = $this->parseYearRange($date); + break; + case $this->isMonthDayRange($date): $result = $this->parseMonthDayRange($date); + break; + case $this->isDayYearRange($date): $result = $this->parseDayYearRange($date); + break; + case $this->isMonthYearRange($date): $result = $this->parseMonthYearRange($date); + break; } @@ -247,30 +250,24 @@ class ParseDateString } /** - * @param string $date - * - * @return bool + * Returns true if this matches regex for xxxx-xx-DD: */ protected function isDayRange(string $date): bool { - // if regex for xxxx-xx-DD: $pattern = '/^xxxx-xx-(0[1-9]|[12]\d|3[01])$/'; - if (preg_match($pattern, $date)) { - Log::debug(sprintf('"%s" is a day range.', $date)); + $result = preg_match($pattern, $date); + if (false !== $result && 0 !== $result) { + app('log')->debug(sprintf('"%s" is a day range.', $date)); return true; } - Log::debug(sprintf('"%s" is not a day range.', $date)); + app('log')->debug(sprintf('"%s" is not a day range.', $date)); return false; } /** * format of string is xxxx-xx-DD - * - * @param string $date - * - * @return array */ protected function parseDayRange(string $date): array { @@ -281,35 +278,27 @@ class ParseDateString ]; } - /** - * @param string $date - * - * @return bool - */ protected function isMonthRange(string $date): bool { // if regex for xxxx-MM-xx: $pattern = '/^xxxx-(0[1-9]|1[012])-xx$/'; - if (preg_match($pattern, $date)) { - Log::debug(sprintf('"%s" is a month range.', $date)); + $result = preg_match($pattern, $date); + if (false !== $result && 0 !== $result) { + app('log')->debug(sprintf('"%s" is a month range.', $date)); return true; } - Log::debug(sprintf('"%s" is not a month range.', $date)); + app('log')->debug(sprintf('"%s" is not a month range.', $date)); return false; } /** * format of string is xxxx-MM-xx - * - * @param string $date - * - * @return array */ protected function parseMonthRange(string $date): array { - Log::debug(sprintf('parseMonthRange: Parsed "%s".', $date)); + app('log')->debug(sprintf('parseMonthRange: Parsed "%s".', $date)); $parts = explode('-', $date); return [ @@ -317,35 +306,27 @@ class ParseDateString ]; } - /** - * @param string $date - * - * @return bool - */ protected function isYearRange(string $date): bool { // if regex for YYYY-xx-xx: $pattern = '/^(19|20)\d\d-xx-xx$/'; - if (preg_match($pattern, $date)) { - Log::debug(sprintf('"%s" is a year range.', $date)); + $result = preg_match($pattern, $date); + if (false !== $result && 0 !== $result) { + app('log')->debug(sprintf('"%s" is a year range.', $date)); return true; } - Log::debug(sprintf('"%s" is not a year range.', $date)); + app('log')->debug(sprintf('"%s" is not a year range.', $date)); return false; } /** * format of string is YYYY-xx-xx - * - * @param string $date - * - * @return array */ protected function parseYearRange(string $date): array { - Log::debug(sprintf('parseYearRange: Parsed "%s"', $date)); + app('log')->debug(sprintf('parseYearRange: Parsed "%s"', $date)); $parts = explode('-', $date); return [ @@ -353,35 +334,27 @@ class ParseDateString ]; } - /** - * @param string $date - * - * @return bool - */ protected function isMonthDayRange(string $date): bool { // if regex for xxxx-MM-DD: $pattern = '/^xxxx-(0[1-9]|1[012])-(0[1-9]|[12]\d|3[01])$/'; - if (preg_match($pattern, $date)) { - Log::debug(sprintf('"%s" is a month/day range.', $date)); + $result = preg_match($pattern, $date); + if (false !== $result && 0 !== $result) { + app('log')->debug(sprintf('"%s" is a month/day range.', $date)); return true; } - Log::debug(sprintf('"%s" is not a month/day range.', $date)); + app('log')->debug(sprintf('"%s" is not a month/day range.', $date)); return false; } /** * format of string is xxxx-MM-DD - * - * @param string $date - * - * @return array */ private function parseMonthDayRange(string $date): array { - Log::debug(sprintf('parseMonthDayRange: Parsed "%s".', $date)); + app('log')->debug(sprintf('parseMonthDayRange: Parsed "%s".', $date)); $parts = explode('-', $date); return [ @@ -390,35 +363,27 @@ class ParseDateString ]; } - /** - * @param string $date - * - * @return bool - */ protected function isDayYearRange(string $date): bool { // if regex for YYYY-xx-DD: $pattern = '/^(19|20)\d\d-xx-(0[1-9]|[12]\d|3[01])$/'; - if (preg_match($pattern, $date)) { - Log::debug(sprintf('"%s" is a day/year range.', $date)); + $result = preg_match($pattern, $date); + if (false !== $result && 0 !== $result) { + app('log')->debug(sprintf('"%s" is a day/year range.', $date)); return true; } - Log::debug(sprintf('"%s" is not a day/year range.', $date)); + app('log')->debug(sprintf('"%s" is not a day/year range.', $date)); return false; } /** * format of string is YYYY-xx-DD - * - * @param string $date - * - * @return array */ private function parseDayYearRange(string $date): array { - Log::debug(sprintf('parseDayYearRange: Parsed "%s".', $date)); + app('log')->debug(sprintf('parseDayYearRange: Parsed "%s".', $date)); $parts = explode('-', $date); return [ @@ -427,35 +392,27 @@ class ParseDateString ]; } - /** - * @param string $date - * - * @return bool - */ protected function isMonthYearRange(string $date): bool { // if regex for YYYY-MM-xx: $pattern = '/^(19|20)\d\d-(0[1-9]|1[012])-xx$/'; - if (preg_match($pattern, $date)) { - Log::debug(sprintf('"%s" is a month/year range.', $date)); + $result = preg_match($pattern, $date); + if (false !== $result && 0 !== $result) { + app('log')->debug(sprintf('"%s" is a month/year range.', $date)); return true; } - Log::debug(sprintf('"%s" is not a month/year range.', $date)); + app('log')->debug(sprintf('"%s" is not a month/year range.', $date)); return false; } /** * format of string is YYYY-MM-xx - * - * @param string $date - * - * @return array */ protected function parseMonthYearRange(string $date): array { - Log::debug(sprintf('parseMonthYearRange: Parsed "%s".', $date)); + app('log')->debug(sprintf('parseMonthYearRange: Parsed "%s".', $date)); $parts = explode('-', $date); return [ diff --git a/app/Support/Preferences.php b/app/Support/Preferences.php index c519a992ee..4b7c326a79 100644 --- a/app/Support/Preferences.php +++ b/app/Support/Preferences.php @@ -23,24 +23,16 @@ declare(strict_types=1); namespace FireflyIII\Support; -use Cache; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Preference; use FireflyIII\User; use Illuminate\Support\Collection; -use PDOException; -use Session; /** * Class Preferences. - * - */ class Preferences { - /** - * @return Collection - */ public function all(): Collection { $user = auth()->user(); @@ -52,15 +44,17 @@ class Preferences } /** - * @param string $name - * @param mixed $default + * @param mixed $default * - * @return Preference|null * @throws FireflyException */ public function get(string $name, $default = null): ?Preference { - /** @var User|null $user */ + if ('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } + + /** @var null|User $user */ $user = auth()->user(); if (null === $user) { $preference = new Preference(); @@ -73,15 +67,13 @@ class Preferences } /** - * @param User $user - * @param string $name - * @param null|string|int $default - * - * @return Preference|null * @throws FireflyException */ - public function getForUser(User $user, string $name, $default = null): ?Preference + public function getForUser(User $user, string $name, null|array|bool|int|string $default = null): ?Preference { + if ('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $preference = Preference::where('user_id', $user->id)->where('name', $name)->first(['id', 'user_id', 'name', 'data', 'updated_at', 'created_at']); if (null !== $preference && null === $preference->data) { $preference->delete(); @@ -101,47 +93,47 @@ class Preferences } /** - * @param string $name - * - * @return bool * @throws FireflyException */ public function delete(string $name): bool { + if ('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $fullName = sprintf('preference%s%s', auth()->user()->id, $name); - if (Cache::has($fullName)) { - Cache::forget($fullName); + if (\Cache::has($fullName)) { + \Cache::forget($fullName); } Preference::where('user_id', auth()->user()->id)->where('name', $name)->delete(); return true; } - /** - * @param User $user - * @param string $name - */ public function forget(User $user, string $name): void { + if ('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $key = sprintf('preference%s%s', $user->id, $name); - Cache::forget($key); - Cache::put($key, '', 5); + \Cache::forget($key); + \Cache::put($key, '', 5); } /** - * @param User $user - * @param string $name - * @param mixed $value + * @param mixed $value * - * @return Preference * @throws FireflyException */ public function setForUser(User $user, string $name, $value): Preference { - $fullName = sprintf('preference%s%s', $user->id, $name); - Cache::forget($fullName); - /** @var Preference|null $pref */ - $pref = Preference::where('user_id', $user->id)->where('name', $name)->first(['id', 'name', 'data', 'updated_at', 'created_at']); + if ('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } + $fullName = sprintf('preference%s%s', $user->id, $name); + \Cache::forget($fullName); + + /** @var null|Preference $pref */ + $pref = Preference::where('user_id', $user->id)->where('name', $name)->first(['id', 'name', 'data', 'updated_at', 'created_at']); if (null !== $pref && null === $value) { $pref->delete(); @@ -153,51 +145,40 @@ class Preferences } if (null === $pref) { $pref = new Preference(); - $pref->user_id = $user->id; + $pref->user_id = (int)$user->id; $pref->name = $name; } $pref->data = $value; + try { $pref->save(); - } catch (PDOException $e) { + } catch (\PDOException $e) { throw new FireflyException(sprintf('Could not save preference: %s', $e->getMessage()), 0, $e); } - Cache::forever($fullName, $pref); + \Cache::forever($fullName, $pref); return $pref; } - /** - * @param User $user - * @param string $search - * - * @return Collection - */ public function beginsWith(User $user, string $search): Collection { - return Preference::where('user_id', $user->id)->where('name', 'LIKE', $search . '%')->get(); + return Preference::where('user_id', $user->id)->where('name', 'LIKE', $search.'%')->get(); } - /** - * @param string $name - * - * @return Collection - */ public function findByName(string $name): Collection { + if ('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } + return Preference::where('name', $name)->get(); } - /** - * @param User $user - * @param array $list - * - * @return array - */ public function getArrayForUser(User $user, array $list): array { $result = []; $preferences = Preference::where('user_id', $user->id)->whereIn('name', $list)->get(['id', 'name', 'data']); + /** @var Preference $preference */ foreach ($preferences as $preference) { $result[$preference->name] = $preference->data; @@ -212,15 +193,17 @@ class Preferences } /** - * @param string $name - * @param mixed $default + * @param mixed $default * - * @return Preference|null * @throws FireflyException */ public function getFresh(string $name, $default = null): ?Preference { - /** @var User|null $user */ + if ('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } + + /** @var null|User $user */ $user = auth()->user(); if (null === $user) { $preference = new Preference(); @@ -233,21 +216,22 @@ class Preferences } /** - * @param User $user - * @param string $name - * @param null $default - * - * @return Preference|null * TODO remove me. + * + * @param null $default + * * @throws FireflyException */ public function getFreshForUser(User $user, string $name, $default = null): ?Preference { + if ('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } + return $this->getForUser($user, $name, $default); } /** - * @return string * @throws FireflyException */ public function lastActivity(): string @@ -262,27 +246,25 @@ class Preferences $lastActivity = implode(',', $lastActivity); } - return hash('sha256', $lastActivity); + return hash('sha256', (string)$lastActivity); } - /** - * - */ public function mark(): void { $this->set('lastActivity', microtime()); - Session::forget('first'); + \Session::forget('first'); } /** - * @param string $name - * @param mixed $value + * @param mixed $value * - * @return Preference * @throws FireflyException */ public function set(string $name, $value): Preference { + if ('currencyPreference' === $name) { + throw new FireflyException('No longer supports "currencyPreference", please refactor me.'); + } $user = auth()->user(); if (null === $user) { // make new preference, return it: diff --git a/app/Support/Report/Budget/BudgetReportGenerator.php b/app/Support/Report/Budget/BudgetReportGenerator.php index 739a0c3a25..7059886943 100644 --- a/app/Support/Report/Budget/BudgetReportGenerator.php +++ b/app/Support/Report/Budget/BudgetReportGenerator.php @@ -35,7 +35,6 @@ use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; use FireflyIII\User; use Illuminate\Support\Collection; -use JsonException; /** * Class BudgetReportGenerator @@ -74,10 +73,11 @@ class BudgetReportGenerator { $spent = $this->opsRepository->listExpenses($this->start, $this->end, $this->accounts, $this->budgets); $this->report = []; + /** @var Account $account */ foreach ($this->accounts as $account) { - $accountId = $account->id; - $this->report[$accountId] = $this->report[$accountId] ?? [ + $accountId = $account->id; + $this->report[$accountId] ??= [ 'name' => $account->name, 'id' => $account->id, 'iban' => $account->iban, @@ -93,8 +93,6 @@ class BudgetReportGenerator /** * Process each row of expenses collected for the "Account per budget" partial - * - * @param array $expenses */ private function processExpenses(array $expenses): void { @@ -105,9 +103,6 @@ class BudgetReportGenerator /** * Process each set of transactions for each row of expenses. - * - * @param array $expenses - * @param array $budget */ private function processBudgetExpenses(array $expenses, array $budget): void { @@ -117,19 +112,19 @@ class BudgetReportGenerator $sourceAccountId = $journal['source_account_id']; $this->report[$sourceAccountId]['currencies'][$currencyId] - = $this->report[$sourceAccountId]['currencies'][$currencyId] ?? [ - 'currency_id' => $expenses['currency_id'], - 'currency_symbol' => $expenses['currency_symbol'], - 'currency_name' => $expenses['currency_name'], - 'currency_decimal_places' => $expenses['currency_decimal_places'], - 'budgets' => [], - ]; + ??= [ + 'currency_id' => $expenses['currency_id'], + 'currency_symbol' => $expenses['currency_symbol'], + 'currency_name' => $expenses['currency_name'], + 'currency_decimal_places' => $expenses['currency_decimal_places'], + 'budgets' => [], + ]; $this->report[$sourceAccountId]['currencies'][$currencyId]['budgets'][$budgetId] - = $this->report[$sourceAccountId]['currencies'][$currencyId]['budgets'][$budgetId] ?? '0'; + ??= '0'; $this->report[$sourceAccountId]['currencies'][$currencyId]['budgets'][$budgetId] - = bcadd($this->report[$sourceAccountId]['currencies'][$currencyId]['budgets'][$budgetId], $journal['amount']); + = bcadd($this->report[$sourceAccountId]['currencies'][$currencyId]['budgets'][$budgetId], $journal['amount']); } } @@ -155,6 +150,7 @@ class BudgetReportGenerator private function generalBudgetReport(): void { $budgetList = $this->repository->getBudgets(); + /** @var Budget $budget */ foreach ($budgetList as $budget) { $this->processBudget($budget); @@ -163,13 +159,11 @@ class BudgetReportGenerator /** * Process expenses etc. for a single budget for the budgets block on the default report. - * - * @param Budget $budget */ private function processBudget(Budget $budget): void { - $budgetId = (int)$budget->id; - $this->report['budgets'][$budgetId] = $this->report['budgets'][$budgetId] ?? [ + $budgetId = $budget->id; + $this->report['budgets'][$budgetId] ??= [ 'budget_id' => $budgetId, 'budget_name' => $budget->name, 'no_budget' => false, @@ -177,7 +171,8 @@ class BudgetReportGenerator ]; // get all budget limits for budget in period: - $limits = $this->blRepository->getBudgetLimits($budget, $this->start, $this->end); + $limits = $this->blRepository->getBudgetLimits($budget, $this->start, $this->end); + /** @var BudgetLimit $limit */ foreach ($limits as $limit) { $this->processLimit($budget, $limit); @@ -186,22 +181,19 @@ class BudgetReportGenerator /** * Process a single budget limit for the budgets block on the default report. - * - * @param Budget $budget - * @param BudgetLimit $limit */ private function processLimit(Budget $budget, BudgetLimit $limit): void { - $budgetId = (int)$budget->id; - $limitId = (int)$limit->id; - $limitCurrency = $limit->transactionCurrency ?? $this->currency; - $currencyId = (int)$limitCurrency->id; - $expenses = $this->opsRepository->sumExpenses($limit->start_date, $limit->end_date, $this->accounts, new Collection([$budget])); - $spent = $expenses[$currencyId]['sum'] ?? '0'; - $left = -1 === bccomp(bcadd($limit->amount, $spent), '0') ? '0' : bcadd($limit->amount, $spent); - $overspent = 1 === bccomp(bcmul($spent, '-1'), $limit->amount) ? bcadd($spent, $limit->amount) : '0'; + $budgetId = $budget->id; + $limitId = $limit->id; + $limitCurrency = $limit->transactionCurrency ?? $this->currency; + $currencyId = $limitCurrency->id; + $expenses = $this->opsRepository->sumExpenses($limit->start_date, $limit->end_date, $this->accounts, new Collection([$budget])); + $spent = $expenses[$currencyId]['sum'] ?? '0'; + $left = -1 === bccomp(bcadd($limit->amount, $spent), '0') ? '0' : bcadd($limit->amount, $spent); + $overspent = 1 === bccomp(bcmul($spent, '-1'), $limit->amount) ? bcadd($spent, $limit->amount) : '0'; - $this->report['budgets'][$budgetId]['budget_limits'][$limitId] = $this->report['budgets'][$budgetId]['budget_limits'][$limitId] ?? [ + $this->report['budgets'][$budgetId]['budget_limits'][$limitId] ??= [ 'budget_limit_id' => $limitId, 'start_date' => $limit->start_date, 'end_date' => $limit->end_date, @@ -220,17 +212,17 @@ class BudgetReportGenerator // make sum information: $this->report['sums'][$currencyId] - = $this->report['sums'][$currencyId] ?? [ - 'budgeted' => '0', - 'spent' => '0', - 'left' => '0', - 'overspent' => '0', - 'currency_id' => $currencyId, - 'currency_code' => $limitCurrency->code, - 'currency_name' => $limitCurrency->name, - 'currency_symbol' => $limitCurrency->symbol, - 'currency_decimal_places' => $limitCurrency->decimal_places, - ]; + ??= [ + 'budgeted' => '0', + 'spent' => '0', + 'left' => '0', + 'overspent' => '0', + 'currency_id' => $currencyId, + 'currency_code' => $limitCurrency->code, + 'currency_name' => $limitCurrency->name, + 'currency_symbol' => $limitCurrency->symbol, + 'currency_decimal_places' => $limitCurrency->decimal_places, + ]; $this->report['sums'][$currencyId]['budgeted'] = bcadd($this->report['sums'][$currencyId]['budgeted'], $limit->amount); $this->report['sums'][$currencyId]['spent'] = bcadd($this->report['sums'][$currencyId]['spent'], $spent); $this->report['sums'][$currencyId]['left'] = bcadd($this->report['sums'][$currencyId]['left'], bcadd($limit->amount, $spent)); @@ -250,16 +242,16 @@ class BudgetReportGenerator 'budget_limits' => [], ]; - $noBudget = $this->nbRepository->sumExpenses($this->start, $this->end, $this->accounts); + $noBudget = $this->nbRepository->sumExpenses($this->start, $this->end, $this->accounts); foreach ($noBudget as $noBudgetEntry) { // currency information: - $nbCurrencyId = (int)($noBudgetEntry['currency_id'] ?? $this->currency->id); - $nbCurrencyCode = $noBudgetEntry['currency_code'] ?? $this->currency->code; - $nbCurrencyName = $noBudgetEntry['currency_name'] ?? $this->currency->name; - $nbCurrencySymbol = $noBudgetEntry['currency_symbol'] ?? $this->currency->symbol; - $nbCurrencyDp = $noBudgetEntry['currency_decimal_places'] ?? $this->currency->decimal_places; + $nbCurrencyId = (int)($noBudgetEntry['currency_id'] ?? $this->currency->id); + $nbCurrencyCode = $noBudgetEntry['currency_code'] ?? $this->currency->code; + $nbCurrencyName = $noBudgetEntry['currency_name'] ?? $this->currency->name; + $nbCurrencySymbol = $noBudgetEntry['currency_symbol'] ?? $this->currency->symbol; + $nbCurrencyDp = $noBudgetEntry['currency_decimal_places'] ?? $this->currency->decimal_places; - $this->report['budgets'][0]['budget_limits'][] = [ + $this->report['budgets'][0]['budget_limits'][] = [ 'budget_limit_id' => null, 'start_date' => $this->start, 'end_date' => $this->end, @@ -275,7 +267,7 @@ class BudgetReportGenerator 'currency_symbol' => $nbCurrencySymbol, 'currency_decimal_places' => $nbCurrencyDp, ]; - $this->report['sums'][$nbCurrencyId]['spent'] = bcadd($this->report['sums'][$nbCurrencyId]['spent'] ?? '0', $noBudgetEntry['sum']); + $this->report['sums'][$nbCurrencyId]['spent'] = bcadd($this->report['sums'][$nbCurrencyId]['spent'] ?? '0', $noBudgetEntry['sum']); // append currency info because it may be missing: $this->report['sums'][$nbCurrencyId]['currency_id'] = $nbCurrencyId; $this->report['sums'][$nbCurrencyId]['currency_code'] = $nbCurrencyCode; @@ -284,9 +276,9 @@ class BudgetReportGenerator $this->report['sums'][$nbCurrencyId]['currency_decimal_places'] = $nbCurrencyDp; // append other sums because they might be missing: - $this->report['sums'][$nbCurrencyId]['overspent'] = $this->report['sums'][$nbCurrencyId]['overspent'] ?? '0'; - $this->report['sums'][$nbCurrencyId]['left'] = $this->report['sums'][$nbCurrencyId]['left'] ?? '0'; - $this->report['sums'][$nbCurrencyId]['budgeted'] = $this->report['sums'][$nbCurrencyId]['budgeted'] ?? '0'; + $this->report['sums'][$nbCurrencyId]['overspent'] ??= '0'; + $this->report['sums'][$nbCurrencyId]['left'] ??= '0'; + $this->report['sums'][$nbCurrencyId]['budgeted'] ??= '0'; } } @@ -298,15 +290,15 @@ class BudgetReportGenerator // make percentages based on total amount. foreach ($this->report['budgets'] as $budgetId => $data) { foreach ($data['budget_limits'] as $limitId => $entry) { - $budgetId = (int)$budgetId; - $limitId = (int)$limitId; - $currencyId = (int)$entry['currency_id']; - $spent = $entry['spent']; - $totalSpent = $this->report['sums'][$currencyId]['spent'] ?? '0'; - $spentPct = '0'; - $budgeted = $entry['budgeted']; - $totalBudgeted = $this->report['sums'][$currencyId]['budgeted'] ?? '0'; - $budgetedPct = '0'; + $budgetId = (int)$budgetId; + $limitId = (int)$limitId; + $currencyId = (int)$entry['currency_id']; + $spent = $entry['spent']; + $totalSpent = $this->report['sums'][$currencyId]['spent'] ?? '0'; + $spentPct = '0'; + $budgeted = $entry['budgeted']; + $totalBudgeted = $this->report['sums'][$currencyId]['budgeted'] ?? '0'; + $budgetedPct = '0'; if (0 !== bccomp($spent, '0') && 0 !== bccomp($totalSpent, '0')) { $spentPct = round((float)bcmul(bcdiv($spent, $totalSpent), '100')); @@ -314,58 +306,40 @@ class BudgetReportGenerator if (0 !== bccomp($budgeted, '0') && 0 !== bccomp($totalBudgeted, '0')) { $budgetedPct = round((float)bcmul(bcdiv($budgeted, $totalBudgeted), '100')); } - $this->report['sums'][$currencyId]['budgeted'] = $this->report['sums'][$currencyId]['budgeted'] ?? '0'; + $this->report['sums'][$currencyId]['budgeted'] ??= '0'; $this->report['budgets'][$budgetId]['budget_limits'][$limitId]['spent_pct'] = $spentPct; $this->report['budgets'][$budgetId]['budget_limits'][$limitId]['budgeted_pct'] = $budgetedPct; } } } - /** - * @return array - */ public function getReport(): array { return $this->report; } - /** - * @param Collection $accounts - */ public function setAccounts(Collection $accounts): void { $this->accounts = $accounts; } - /** - * @param Collection $budgets - */ public function setBudgets(Collection $budgets): void { $this->budgets = $budgets; } - /** - * @param Carbon $end - */ public function setEnd(Carbon $end): void { $this->end = $end; } - /** - * @param Carbon $start - */ public function setStart(Carbon $start): void { $this->start = $start; } /** - * @param User $user - * * @throws FireflyException - * @throws JsonException */ public function setUser(User $user): void { @@ -373,6 +347,6 @@ class BudgetReportGenerator $this->blRepository->setUser($user); $this->opsRepository->setUser($user); $this->nbRepository->setUser($user); - $this->currency = app('amount')->getDefaultCurrencyByUser($user); + $this->currency = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup); } } diff --git a/app/Support/Report/Category/CategoryReportGenerator.php b/app/Support/Report/Category/CategoryReportGenerator.php index f8e85f9cb4..67a3d872f6 100644 --- a/app/Support/Report/Category/CategoryReportGenerator.php +++ b/app/Support/Report/Category/CategoryReportGenerator.php @@ -50,9 +50,6 @@ class CategoryReportGenerator $this->noCatRepository = app(NoCategoryRepositoryInterface::class); } - /** - * @return array - */ public function getReport(): array { return $this->report; @@ -64,17 +61,17 @@ class CategoryReportGenerator */ public function operations(): void { - $earnedWith = $this->opsRepository->listIncome($this->start, $this->end, $this->accounts); - $spentWith = $this->opsRepository->listExpenses($this->start, $this->end, $this->accounts); + $earnedWith = $this->opsRepository->listIncome($this->start, $this->end, $this->accounts); + $spentWith = $this->opsRepository->listExpenses($this->start, $this->end, $this->accounts); // also transferred out and transferred into these accounts in this category: $transferredIn = $this->opsRepository->listTransferredIn($this->start, $this->end, $this->accounts); $transferredOut = $this->opsRepository->listTransferredOut($this->start, $this->end, $this->accounts); - $earnedWithout = $this->noCatRepository->listIncome($this->start, $this->end, $this->accounts); - $spentWithout = $this->noCatRepository->listExpenses($this->start, $this->end, $this->accounts); + $earnedWithout = $this->noCatRepository->listIncome($this->start, $this->end, $this->accounts); + $spentWithout = $this->noCatRepository->listExpenses($this->start, $this->end, $this->accounts); - $this->report = [ + $this->report = [ 'categories' => [], 'sums' => [], ]; @@ -87,8 +84,6 @@ class CategoryReportGenerator /** * Process one of the spent arrays from the operations method. - * - * @param array $data */ private function processOpsArray(array $data): void { @@ -101,13 +96,9 @@ class CategoryReportGenerator } } - /** - * @param int $currencyId - * @param array $currencyRow - */ private function processCurrencyArray(int $currencyId, array $currencyRow): void { - $this->report['sums'][$currencyId] = $this->report['sums'][$currencyId] ?? [ + $this->report['sums'][$currencyId] ??= [ 'spent' => '0', 'earned' => '0', 'sum' => '0', @@ -127,16 +118,10 @@ class CategoryReportGenerator } } - /** - * @param int $currencyId - * @param array $currencyRow - * @param int $categoryId - * @param array $categoryRow - */ private function processCategoryRow(int $currencyId, array $currencyRow, int $categoryId, array $categoryRow): void { - $key = sprintf('%s-%s', $currencyId, $categoryId); - $this->report['categories'][$key] = $this->report['categories'][$key] ?? [ + $key = sprintf('%s-%s', $currencyId, $categoryId); + $this->report['categories'][$key] ??= [ 'id' => $categoryId, 'title' => $categoryRow['name'], 'currency_id' => $currencyRow['currency_id'], @@ -151,9 +136,9 @@ class CategoryReportGenerator // loop journals: foreach ($categoryRow['transaction_journals'] as $journal) { // sum of sums - $this->report['sums'][$currencyId]['sum'] = bcadd($this->report['sums'][$currencyId]['sum'], $journal['amount']); + $this->report['sums'][$currencyId]['sum'] = bcadd($this->report['sums'][$currencyId]['sum'], $journal['amount']); // sum of spent: - $this->report['sums'][$currencyId]['spent'] = -1 === bccomp($journal['amount'], '0') ? bcadd( + $this->report['sums'][$currencyId]['spent'] = -1 === bccomp($journal['amount'], '0') ? bcadd( $this->report['sums'][$currencyId]['spent'], $journal['amount'] ) : $this->report['sums'][$currencyId]['spent']; @@ -164,47 +149,35 @@ class CategoryReportGenerator ) : $this->report['sums'][$currencyId]['earned']; // sum of category - $this->report['categories'][$key]['sum'] = bcadd($this->report['categories'][$key]['sum'], $journal['amount']); + $this->report['categories'][$key]['sum'] = bcadd($this->report['categories'][$key]['sum'], $journal['amount']); // total spent in category - $this->report['categories'][$key]['spent'] = -1 === bccomp($journal['amount'], '0') ? bcadd( + $this->report['categories'][$key]['spent'] = -1 === bccomp($journal['amount'], '0') ? bcadd( $this->report['categories'][$key]['spent'], $journal['amount'] ) : $this->report['categories'][$key]['spent']; // total earned in category - $this->report['categories'][$key]['earned'] = 1 === bccomp($journal['amount'], '0') ? bcadd( + $this->report['categories'][$key]['earned'] = 1 === bccomp($journal['amount'], '0') ? bcadd( $this->report['categories'][$key]['earned'], $journal['amount'] ) : $this->report['categories'][$key]['earned']; } } - /** - * @param Collection $accounts - */ public function setAccounts(Collection $accounts): void { $this->accounts = $accounts; } - /** - * @param Carbon $end - */ public function setEnd(Carbon $end): void { $this->end = $end; } - /** - * @param Carbon $start - */ public function setStart(Carbon $start): void { $this->start = $start; } - /** - * @param User $user - */ public function setUser(User $user): void { $this->noCatRepository->setUser($user); diff --git a/app/Support/Repositories/Recurring/CalculateRangeOccurrences.php b/app/Support/Repositories/Recurring/CalculateRangeOccurrences.php index 89588bd41b..df73a72f60 100644 --- a/app/Support/Repositories/Recurring/CalculateRangeOccurrences.php +++ b/app/Support/Repositories/Recurring/CalculateRangeOccurrences.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Support\Repositories\Recurring; use Carbon\Carbon; -use Illuminate\Support\Facades\Log; /** * Trait CalculateRangeOccurrences @@ -35,12 +34,6 @@ trait CalculateRangeOccurrences /** * Get the number of daily occurrences for a recurring transaction until date $end is reached. Will skip every * $skipMod-1 occurrences. - * - * @param Carbon $start - * @param Carbon $end - * @param int $skipMod - * - * @return array */ protected function getDailyInRange(Carbon $start, Carbon $end, int $skipMod): array { @@ -51,7 +44,7 @@ trait CalculateRangeOccurrences $return[] = clone $start; } $start->addDay(); - $attempts++; + ++$attempts; } return $return; @@ -60,14 +53,6 @@ trait CalculateRangeOccurrences /** * Get the number of daily occurrences for a recurring transaction until date $end is reached. Will skip every * $skipMod-1 occurrences. - * - * @param Carbon $start - * @param Carbon $end - * @param int $skipMod - * @param string $moment - * - * @return array - * */ protected function getMonthlyInRange(Carbon $start, Carbon $end, int $skipMod, string $moment): array { @@ -84,7 +69,7 @@ trait CalculateRangeOccurrences if (0 === $attempts % $skipMod && $start->lte($start) && $end->gte($start)) { $return[] = clone $start; } - $attempts++; + ++$attempts; $start->endOfMonth()->startOfDay()->addDay(); } @@ -94,22 +79,15 @@ trait CalculateRangeOccurrences /** * Get the number of daily occurrences for a recurring transaction until date $end is reached. Will skip every * $skipMod-1 occurrences. - * - * @param Carbon $start - * @param Carbon $end - * @param int $skipMod - * @param string $moment - * - * @return array */ protected function getNdomInRange(Carbon $start, Carbon $end, int $skipMod, string $moment): array { - $return = []; - $attempts = 0; + $return = []; + $attempts = 0; $start->startOfMonth(); // this feels a bit like a cop out but why reinvent the wheel? - $counters = [1 => 'first', 2 => 'second', 3 => 'third', 4 => 'fourth', 5 => 'fifth',]; - $daysOfWeek = [1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday', 7 => 'Sunday',]; + $counters = [1 => 'first', 2 => 'second', 3 => 'third', 4 => 'fourth', 5 => 'fifth']; + $daysOfWeek = [1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday', 7 => 'Sunday']; $parts = explode(',', $moment); while ($start <= $end) { $string = sprintf('%s %s of %s %s', $counters[$parts[0]], $daysOfWeek[$parts[1]], $start->format('F'), $start->format('Y')); @@ -117,7 +95,7 @@ trait CalculateRangeOccurrences if (0 === $attempts % $skipMod) { $return[] = clone $newCarbon; } - $attempts++; + ++$attempts; $start->endOfMonth()->addDay(); } @@ -127,43 +105,35 @@ trait CalculateRangeOccurrences /** * Get the number of daily occurrences for a recurring transaction until date $end is reached. Will skip every * $skipMod-1 occurrences. - * - * @param Carbon $start - * @param Carbon $end - * @param int $skipMod - * @param string $moment - * - * @return array - * */ protected function getWeeklyInRange(Carbon $start, Carbon $end, int $skipMod, string $moment): array { - $return = []; - $attempts = 0; - Log::debug('Rep is weekly.'); + $return = []; + $attempts = 0; + app('log')->debug('Rep is weekly.'); // monday = 1 // sunday = 7 - $dayOfWeek = (int)$moment; - Log::debug(sprintf('DoW in repetition is %d, in mutator is %d', $dayOfWeek, $start->dayOfWeekIso)); + $dayOfWeek = (int)$moment; + app('log')->debug(sprintf('DoW in repetition is %d, in mutator is %d', $dayOfWeek, $start->dayOfWeekIso)); if ($start->dayOfWeekIso > $dayOfWeek) { // day has already passed this week, add one week: $start->addWeek(); - Log::debug(sprintf('Jump to next week, so mutator is now: %s', $start->format('Y-m-d'))); + app('log')->debug(sprintf('Jump to next week, so mutator is now: %s', $start->format('Y-m-d'))); } // today is wednesday (3), expected is friday (5): add two days. // today is friday (5), expected is monday (1), subtract four days. - Log::debug(sprintf('Mutator is now: %s', $start->format('Y-m-d'))); + app('log')->debug(sprintf('Mutator is now: %s', $start->format('Y-m-d'))); $dayDifference = $dayOfWeek - $start->dayOfWeekIso; $start->addDays($dayDifference); - Log::debug(sprintf('Mutator is now: %s', $start->format('Y-m-d'))); + app('log')->debug(sprintf('Mutator is now: %s', $start->format('Y-m-d'))); while ($start <= $end) { if (0 === $attempts % $skipMod && $start->lte($start) && $end->gte($start)) { - Log::debug('Date is in range of start+end, add to set.'); + app('log')->debug('Date is in range of start+end, add to set.'); $return[] = clone $start; } - $attempts++; + ++$attempts; $start->addWeek(); - Log::debug(sprintf('Mutator is now (end of loop): %s', $start->format('Y-m-d'))); + app('log')->debug(sprintf('Mutator is now (end of loop): %s', $start->format('Y-m-d'))); } return $return; @@ -172,14 +142,6 @@ trait CalculateRangeOccurrences /** * Get the number of daily occurrences for a recurring transaction until date $end is reached. Will skip every * $skipMod-1 occurrences. - * - * @param Carbon $start - * @param Carbon $end - * @param int $skipMod - * @param string $moment - * - * @return array - * */ protected function getYearlyInRange(Carbon $start, Carbon $end, int $skipMod, string $moment): array { @@ -192,15 +154,15 @@ trait CalculateRangeOccurrences } // is $date between $start and $end? - $obj = clone $date; - $count = 0; + $obj = clone $date; + $count = 0; while ($obj <= $end && $obj >= $start && $count < 10) { if (0 === $attempts % $skipMod) { $return[] = clone $obj; } $obj->addYears(); - $count++; - $attempts++; + ++$count; + ++$attempts; } return $return; diff --git a/app/Support/Repositories/Recurring/CalculateXOccurrences.php b/app/Support/Repositories/Recurring/CalculateXOccurrences.php index eae0b5eaa5..f31171810f 100644 --- a/app/Support/Repositories/Recurring/CalculateXOccurrences.php +++ b/app/Support/Repositories/Recurring/CalculateXOccurrences.php @@ -34,12 +34,6 @@ trait CalculateXOccurrences /** * Calculates the number of daily occurrences for a recurring transaction, starting at the date, until $count is * reached. It will skip over $skipMod -1 recurrences. - * - * @param Carbon $date - * @param int $count - * @param int $skipMod - * - * @return array */ protected function getXDailyOccurrences(Carbon $date, int $count, int $skipMod): array { @@ -51,9 +45,9 @@ trait CalculateXOccurrences $mutator->addDay(); if (0 === $attempts % $skipMod) { $return[] = clone $mutator; - $total++; + ++$total; } - $attempts++; + ++$attempts; } return $return; @@ -62,13 +56,6 @@ trait CalculateXOccurrences /** * Calculates the number of monthly occurrences for a recurring transaction, starting at the date, until $count is * reached. It will skip over $skipMod -1 recurrences. - * - * @param Carbon $date - * @param int $count - * @param int $skipMod - * @param string $moment - * - * @return array */ protected function getXMonthlyOccurrences(Carbon $date, int $count, int $skipMod, string $moment): array { @@ -87,9 +74,9 @@ trait CalculateXOccurrences $mutator->day = $domCorrected; if (0 === $attempts % $skipMod) { $return[] = clone $mutator; - $total++; + ++$total; } - $attempts++; + ++$attempts; $mutator->endOfMonth()->addDay(); } @@ -99,25 +86,18 @@ trait CalculateXOccurrences /** * Calculates the number of NDOM occurrences for a recurring transaction, starting at the date, until $count is * reached. It will skip over $skipMod -1 recurrences. - * - * @param Carbon $date - * @param int $count - * @param int $skipMod - * @param string $moment - * - * @return array */ protected function getXNDomOccurrences(Carbon $date, int $count, int $skipMod, string $moment): array { - $return = []; - $total = 0; - $attempts = 0; - $mutator = clone $date; + $return = []; + $total = 0; + $attempts = 0; + $mutator = clone $date; $mutator->addDay(); // always assume today has passed. $mutator->startOfMonth(); // this feels a bit like a cop out but why reinvent the wheel? - $counters = [1 => 'first', 2 => 'second', 3 => 'third', 4 => 'fourth', 5 => 'fifth',]; - $daysOfWeek = [1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday', 7 => 'Sunday',]; + $counters = [1 => 'first', 2 => 'second', 3 => 'third', 4 => 'fourth', 5 => 'fifth']; + $daysOfWeek = [1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday', 7 => 'Sunday']; $parts = explode(',', $moment); while ($total < $count) { @@ -125,9 +105,9 @@ trait CalculateXOccurrences $newCarbon = new Carbon($string); if (0 === $attempts % $skipMod) { $return[] = clone $newCarbon; - $total++; + ++$total; } - $attempts++; + ++$attempts; $mutator->endOfMonth()->addDay(); } @@ -137,24 +117,17 @@ trait CalculateXOccurrences /** * Calculates the number of weekly occurrences for a recurring transaction, starting at the date, until $count is * reached. It will skip over $skipMod -1 recurrences. - * - * @param Carbon $date - * @param int $count - * @param int $skipMod - * @param string $moment - * - * @return array */ protected function getXWeeklyOccurrences(Carbon $date, int $count, int $skipMod, string $moment): array { - $return = []; - $total = 0; - $attempts = 0; - $mutator = clone $date; + $return = []; + $total = 0; + $attempts = 0; + $mutator = clone $date; // monday = 1 // sunday = 7 $mutator->addDay(); // always assume today has passed. - $dayOfWeek = (int)$moment; + $dayOfWeek = (int)$moment; if ($mutator->dayOfWeekIso > $dayOfWeek) { // day has already passed this week, add one week: $mutator->addWeek(); @@ -167,9 +140,9 @@ trait CalculateXOccurrences while ($total < $count) { if (0 === $attempts % $skipMod) { $return[] = clone $mutator; - $total++; + ++$total; } - $attempts++; + ++$attempts; $mutator->addWeek(); } @@ -179,13 +152,6 @@ trait CalculateXOccurrences /** * Calculates the number of yearly occurrences for a recurring transaction, starting at the date, until $count is * reached. It will skip over $skipMod -1 recurrences. - * - * @param Carbon $date - * @param int $count - * @param int $skipMod - * @param string $moment - * - * @return array */ protected function getXYearlyOccurrences(Carbon $date, int $count, int $skipMod, string $moment): array { @@ -198,14 +164,14 @@ trait CalculateXOccurrences if ($mutator > $date) { $date->addYear(); } - $obj = clone $date; + $obj = clone $date; while ($total < $count) { if (0 === $attempts % $skipMod) { $return[] = clone $obj; - $total++; + ++$total; } $obj->addYears(); - $attempts++; + ++$attempts; } return $return; diff --git a/app/Support/Repositories/Recurring/CalculateXOccurrencesSince.php b/app/Support/Repositories/Recurring/CalculateXOccurrencesSince.php index f4c52b5580..26eb8b8b98 100644 --- a/app/Support/Repositories/Recurring/CalculateXOccurrencesSince.php +++ b/app/Support/Repositories/Recurring/CalculateXOccurrencesSince.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Support\Repositories\Recurring; use Carbon\Carbon; -use Illuminate\Support\Facades\Log; /** * Class CalculateXOccurrencesSince @@ -35,17 +34,10 @@ trait CalculateXOccurrencesSince /** * Calculates the number of daily occurrences for a recurring transaction, starting at the date, until $count is * reached. It will skip over $skipMod -1 recurrences. - * - * @param Carbon $date - * @param Carbon $afterDate - * @param int $count - * @param int $skipMod - * - * @return array */ protected function getXDailyOccurrencesSince(Carbon $date, Carbon $afterDate, int $count, int $skipMod): array { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); $return = []; $mutator = clone $date; $total = 0; @@ -53,10 +45,10 @@ trait CalculateXOccurrencesSince while ($total < $count) { if (0 === $attempts % $skipMod && $mutator->gt($afterDate)) { $return[] = clone $mutator; - $total++; + ++$total; } $mutator->addDay(); - $attempts++; + ++$attempts; } return $return; @@ -66,17 +58,11 @@ trait CalculateXOccurrencesSince * Calculates the number of monthly occurrences for a recurring transaction, starting at the date, until $count is * reached. It will skip over $skipMod -1 recurrences. * - * @param Carbon $date - * @param Carbon $afterDate - * @param int $count - * @param int $skipMod - * @param string $moment - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ protected function getXMonthlyOccurrencesSince(Carbon $date, Carbon $afterDate, int $count, int $skipMod, string $moment): array { - Log::debug(sprintf('Now in %s(%s, %s, %d)', __METHOD__, $date->format('Y-m-d'), $afterDate->format('Y-m-d'), $count)); + app('log')->debug(sprintf('Now in %s(%s, %s, %d)', __METHOD__, $date->format('Y-m-d'), $afterDate->format('Y-m-d'), $count)); $return = []; $mutator = clone $date; $total = 0; @@ -84,10 +70,10 @@ trait CalculateXOccurrencesSince $dayOfMonth = (int)$moment; $dayOfMonth = 0 === $dayOfMonth ? 1 : $dayOfMonth; if ($mutator->day > $dayOfMonth) { - Log::debug(sprintf('%d is after %d, add a month. Mutator is now', $mutator->day, $dayOfMonth)); + app('log')->debug(sprintf('%d is after %d, add a month. Mutator is now', $mutator->day, $dayOfMonth)); // day has passed already, add a month. $mutator->addMonth(); - Log::debug(sprintf('%s', $mutator->format('Y-m-d'))); + app('log')->debug(sprintf('%s', $mutator->format('Y-m-d'))); } while ($total < $count) { @@ -95,11 +81,11 @@ trait CalculateXOccurrencesSince $mutator->day = $domCorrected; if (0 === $attempts % $skipMod && $mutator->gte($afterDate)) { $return[] = clone $mutator; - $total++; + ++$total; } - $attempts++; - $mutator = $mutator->endOfMonth()->addDay(); - Log::debug(sprintf('Mutator is now %s', $mutator->format('Y-m-d'))); + ++$attempts; + $mutator = $mutator->endOfMonth()->addDay(); + app('log')->debug(sprintf('Mutator is now %s', $mutator->format('Y-m-d'))); } return $return; @@ -109,26 +95,20 @@ trait CalculateXOccurrencesSince * Calculates the number of NDOM occurrences for a recurring transaction, starting at the date, until $count is * reached. It will skip over $skipMod -1 recurrences. * - * @param Carbon $date - * @param Carbon $afterDate - * @param int $count - * @param int $skipMod - * @param string $moment - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ protected function getXNDomOccurrencesSince(Carbon $date, Carbon $afterDate, int $count, int $skipMod, string $moment): array { - Log::debug(sprintf('Now in %s', __METHOD__)); - $return = []; - $total = 0; - $attempts = 0; - $mutator = clone $date; + app('log')->debug(sprintf('Now in %s', __METHOD__)); + $return = []; + $total = 0; + $attempts = 0; + $mutator = clone $date; $mutator->addDay(); // always assume today has passed. $mutator->startOfMonth(); // this feels a bit like a cop out but why reinvent the wheel? - $counters = [1 => 'first', 2 => 'second', 3 => 'third', 4 => 'fourth', 5 => 'fifth',]; - $daysOfWeek = [1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday', 7 => 'Sunday',]; + $counters = [1 => 'first', 2 => 'second', 3 => 'third', 4 => 'fourth', 5 => 'fifth']; + $daysOfWeek = [1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday', 7 => 'Sunday']; $parts = explode(',', $moment); while ($total < $count) { @@ -136,9 +116,9 @@ trait CalculateXOccurrencesSince $newCarbon = new Carbon($string); if (0 === $attempts % $skipMod && $mutator->gte($afterDate)) { $return[] = clone $newCarbon; - $total++; + ++$total; } - $attempts++; + ++$attempts; $mutator->endOfMonth()->addDay(); } @@ -149,26 +129,20 @@ trait CalculateXOccurrencesSince * Calculates the number of weekly occurrences for a recurring transaction, starting at the date, until $count is * reached. It will skip over $skipMod -1 recurrences. * - * @param Carbon $date - * @param Carbon $afterDate - * @param int $count - * @param int $skipMod - * @param string $moment - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ protected function getXWeeklyOccurrencesSince(Carbon $date, Carbon $afterDate, int $count, int $skipMod, string $moment): array { - Log::debug(sprintf('Now in %s', __METHOD__)); - $return = []; - $total = 0; - $attempts = 0; - $mutator = clone $date; + app('log')->debug(sprintf('Now in %s', __METHOD__)); + $return = []; + $total = 0; + $attempts = 0; + $mutator = clone $date; // monday = 1 // sunday = 7 // Removed assumption today has passed, see issue https://github.com/firefly-iii/firefly-iii/issues/4798 - //$mutator->addDay(); // always assume today has passed. - $dayOfWeek = (int)$moment; + // $mutator->addDay(); // always assume today has passed. + $dayOfWeek = (int)$moment; if ($mutator->dayOfWeekIso > $dayOfWeek) { // day has already passed this week, add one week: $mutator->addWeek(); @@ -181,9 +155,9 @@ trait CalculateXOccurrencesSince while ($total < $count) { if (0 === $attempts % $skipMod && $mutator->gte($afterDate)) { $return[] = clone $mutator; - $total++; + ++$total; } - $attempts++; + ++$attempts; $mutator->addWeek(); } @@ -194,17 +168,11 @@ trait CalculateXOccurrencesSince * Calculates the number of yearly occurrences for a recurring transaction, starting at the date, until $count is * reached. It will skip over $skipMod -1 recurrences. * - * @param Carbon $date - * @param Carbon $afterDate - * @param int $count - * @param int $skipMod - * @param string $moment - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ protected function getXYearlyOccurrencesSince(Carbon $date, Carbon $afterDate, int $count, int $skipMod, string $moment): array { - Log::debug(sprintf('Now in %s(%s, %d, %d, %s)', __METHOD__, $date->format('Y-m-d'), $date->format('Y-m-d'), $count, $skipMod)); + app('log')->debug(sprintf('Now in %s(%s, %d, %d, %s)', __METHOD__, $date->format('Y-m-d'), $date->format('Y-m-d'), $count, $skipMod)); $return = []; $mutator = clone $date; $total = 0; @@ -212,24 +180,24 @@ trait CalculateXOccurrencesSince $date = new Carbon($moment); $date->year = $mutator->year; if ($mutator > $date) { - Log::debug( + app('log')->debug( sprintf('mutator (%s) > date (%s), so add a year to date (%s)', $mutator->format('Y-m-d'), $date->format('Y-m-d'), $date->format('Y-m-d')) ); $date->addYear(); - Log::debug(sprintf('Date is now %s', $date->format('Y-m-d'))); + app('log')->debug(sprintf('Date is now %s', $date->format('Y-m-d'))); } - $obj = clone $date; + $obj = clone $date; while ($total < $count) { - Log::debug(sprintf('total (%d) < count (%d) so go.', $total, $count)); - Log::debug(sprintf('attempts (%d) %% skipmod (%d) === %d', $attempts, $skipMod, $attempts % $skipMod)); - Log::debug(sprintf('Obj (%s) gte afterdate (%s)? %s', $obj->format('Y-m-d'), $afterDate->format('Y-m-d'), var_export($obj->gte($afterDate), true))); + app('log')->debug(sprintf('total (%d) < count (%d) so go.', $total, $count)); + app('log')->debug(sprintf('attempts (%d) %% skipmod (%d) === %d', $attempts, $skipMod, $attempts % $skipMod)); + app('log')->debug(sprintf('Obj (%s) gte afterdate (%s)? %s', $obj->format('Y-m-d'), $afterDate->format('Y-m-d'), var_export($obj->gte($afterDate), true))); if (0 === $attempts % $skipMod && $obj->gte($afterDate)) { - Log::debug('All conditions true, add obj.'); + app('log')->debug('All conditions true, add obj.'); $return[] = clone $obj; - $total++; + ++$total; } $obj->addYears(); - $attempts++; + ++$attempts; } return $return; diff --git a/app/Support/Repositories/Recurring/FiltersWeekends.php b/app/Support/Repositories/Recurring/FiltersWeekends.php index 58da6897ba..e5b4108c93 100644 --- a/app/Support/Repositories/Recurring/FiltersWeekends.php +++ b/app/Support/Repositories/Recurring/FiltersWeekends.php @@ -27,7 +27,6 @@ namespace FireflyIII\Support\Repositories\Recurring; use Carbon\Carbon; use FireflyIII\Models\RecurrenceRepetition; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Trait FiltersWeekends @@ -36,62 +35,60 @@ trait FiltersWeekends { /** * Filters out all weekend entries, if necessary. - * - * @param RecurrenceRepetition $repetition - * @param array $dates - * - * @return array - * */ protected function filterWeekends(RecurrenceRepetition $repetition, array $dates): array { - Log::debug(sprintf('Now in %s', __METHOD__)); - if ((int)$repetition->weekend === RecurrenceRepetition::WEEKEND_DO_NOTHING) { - Log::debug('Repetition will not be filtered on weekend days.'); + app('log')->debug(sprintf('Now in %s', __METHOD__)); + if (RecurrenceRepetition::WEEKEND_DO_NOTHING === $repetition->weekend) { + app('log')->debug('Repetition will not be filtered on weekend days.'); return $dates; } - $return = []; + $return = []; + /** @var Carbon $date */ foreach ($dates as $date) { $isWeekend = $date->isWeekend(); if (!$isWeekend) { $return[] = clone $date; - //Log::debug(sprintf('Date is %s, not a weekend date.', $date->format('D d M Y'))); + + // app('log')->debug(sprintf('Date is %s, not a weekend date.', $date->format('D d M Y'))); continue; } // is weekend and must set back to Friday? - if ($repetition->weekend === RecurrenceRepetition::WEEKEND_TO_FRIDAY) { - $clone = clone $date; + if (RecurrenceRepetition::WEEKEND_TO_FRIDAY === $repetition->weekend) { + $clone = clone $date; $clone->addDays(5 - $date->dayOfWeekIso); - Log::debug( + app('log')->debug( sprintf('Date is %s, and this is in the weekend, so corrected to %s (Friday).', $date->format('D d M Y'), $clone->format('D d M Y')) ); $return[] = clone $clone; + continue; } // postpone to Monday? - if ($repetition->weekend === RecurrenceRepetition::WEEKEND_TO_MONDAY) { - $clone = clone $date; + if (RecurrenceRepetition::WEEKEND_TO_MONDAY === $repetition->weekend) { + $clone = clone $date; $clone->addDays(8 - $date->dayOfWeekIso); - Log::debug( + app('log')->debug( sprintf('Date is %s, and this is in the weekend, so corrected to %s (Monday).', $date->format('D d M Y'), $clone->format('D d M Y')) ); $return[] = $clone; + continue; } - //Log::debug(sprintf('Date is %s, removed from final result', $date->format('D d M Y'))); + // app('log')->debug(sprintf('Date is %s, removed from final result', $date->format('D d M Y'))); } // filter unique dates - Log::debug(sprintf('Count before filtering: %d', count($dates))); + app('log')->debug(sprintf('Count before filtering: %d', count($dates))); $collection = new Collection($return); $filtered = $collection->unique(); $return = $filtered->toArray(); - Log::debug(sprintf('Count after filtering: %d', count($return))); + app('log')->debug(sprintf('Count after filtering: %d', count($return))); return $return; } diff --git a/app/Support/Repositories/UserGroup/UserGroupTrait.php b/app/Support/Repositories/UserGroup/UserGroupTrait.php index 87e18cb43c..72559775ec 100644 --- a/app/Support/Repositories/UserGroup/UserGroupTrait.php +++ b/app/Support/Repositories/UserGroup/UserGroupTrait.php @@ -1,6 +1,5 @@ userGroup; @@ -49,10 +45,6 @@ trait UserGroupTrait /** * TODO This method does not check if the user has access to this particular user group. - * - * @param UserGroup $userGroup - * - * @return void */ public function setUserGroup(UserGroup $userGroup): void { @@ -60,38 +52,37 @@ trait UserGroupTrait } /** - * @param Authenticatable|User|null $user - * - * @return void + * @throws FireflyException */ - public function setUser(Authenticatable | User | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; + if (null === $user->userGroup) { + throw new FireflyException(sprintf('User #%d has no user group.', $user->id)); + } $this->userGroup = $user->userGroup; } } /** - * @param int $userGroupId - * * @throws FireflyException */ public function setUserGroupById(int $userGroupId): void { - $memberships = GroupMembership::where('user_id', $this->user->id) - ->where('user_group_id', $userGroupId) - ->count(); + $memberships = GroupMembership::where('user_id', $this->user->id) + ->where('user_group_id', $userGroupId) + ->count() + ; if (0 === $memberships) { throw new FireflyException(sprintf('User #%d has no access to administration #%d', $this->user->id, $userGroupId)); } - /** @var UserGroup|null $userGroup */ - $userGroup = UserGroup::find($userGroupId); + + /** @var null|UserGroup $userGroup */ + $userGroup = UserGroup::find($userGroupId); if (null === $userGroup) { throw new FireflyException(sprintf('Cannot find administration for user #%d', $this->user->id)); } $this->userGroup = $userGroup; } - - } diff --git a/app/Support/Request/AppendsLocationData.php b/app/Support/Request/AppendsLocationData.php index 5d126ffb17..eeba807830 100644 --- a/app/Support/Request/AppendsLocationData.php +++ b/app/Support/Request/AppendsLocationData.php @@ -23,17 +23,46 @@ declare(strict_types=1); namespace FireflyIII\Support\Request; -use Illuminate\Support\Facades\Log; - /** * Trait AppendsLocationData */ trait AppendsLocationData { + public function addFromromTransactionStore(array $information, array $return): array + { + $return['store_location'] = false; + if (true === $information['store_location']) { + $long = array_key_exists('longitude', $information) ? $information['longitude'] : null; + $lat = array_key_exists('latitude', $information) ? $information['latitude'] : null; + if (null !== $long && null !== $lat && $this->validLongitude($long) && $this->validLatitude($lat)) { + $return['store_location'] = true; + $return['longitude'] = $information['longitude']; + $return['latitude'] = $information['latitude']; + $return['zoom_level'] = $information['zoom_level']; + } + } + + return $return; + } + + private function validLongitude(string $longitude): bool + { + $number = (float)$longitude; + + return $number >= -180 && $number <= 180; + } + + private function validLatitude(string $latitude): bool + { + $number = (float)$latitude; + + return $number >= -90 && $number <= 90; + } + /** * Abstract method. * - * @param $key + * @param mixed $key * * @return bool */ @@ -41,16 +70,10 @@ trait AppendsLocationData /** * Read the submitted Request data and add new or updated Location data to the array. - * - * @param array $data - * - * @param string|null $prefix - * - * @return array */ protected function appendLocationData(array $data, ?string $prefix): array { - Log::debug(sprintf('Now in appendLocationData("%s")', $prefix), $data); + app('log')->debug(sprintf('Now in appendLocationData("%s")', $prefix), $data); $data['store_location'] = false; $data['update_location'] = false; $data['remove_location'] = false; @@ -58,16 +81,16 @@ trait AppendsLocationData $data['latitude'] = null; $data['zoom_level'] = null; - $longitudeKey = $this->getLocationKey($prefix, 'longitude'); - $latitudeKey = $this->getLocationKey($prefix, 'latitude'); - $zoomLevelKey = $this->getLocationKey($prefix, 'zoom_level'); - $isValidPOST = $this->isValidPost($prefix); - $isValidPUT = $this->isValidPUT($prefix); - $isValidEmptyPUT = $this->isValidEmptyPUT($prefix); + $longitudeKey = $this->getLocationKey($prefix, 'longitude'); + $latitudeKey = $this->getLocationKey($prefix, 'latitude'); + $zoomLevelKey = $this->getLocationKey($prefix, 'zoom_level'); + $isValidPOST = $this->isValidPost($prefix); + $isValidPUT = $this->isValidPUT($prefix); + $isValidEmptyPUT = $this->isValidEmptyPUT($prefix); // for a POST (store), all fields must be present and not NULL. if ($isValidPOST) { - Log::debug('Method is POST and all fields present and not NULL.'); + app('log')->debug('Method is POST and all fields present and not NULL.'); $data['store_location'] = true; $data['longitude'] = $this->convertString($longitudeKey); $data['latitude'] = $this->convertString($latitudeKey); @@ -76,18 +99,18 @@ trait AppendsLocationData // for a PUT (api update) or POST update (UI) if ($isValidPUT) { - Log::debug('Method is PUT and all fields present and not NULL.'); + app('log')->debug('Method is PUT and all fields present and not NULL.'); $data['update_location'] = true; $data['longitude'] = $this->convertString($longitudeKey); $data['latitude'] = $this->convertString($latitudeKey); $data['zoom_level'] = $this->convertString($zoomLevelKey); } if ($isValidEmptyPUT) { - Log::debug('Method is PUT and all fields present and NULL.'); + app('log')->debug('Method is PUT and all fields present and NULL.'); $data['remove_location'] = true; } - Log::debug(sprintf('Returning longitude: "%s", latitude: "%s", zoom level: "%s"', $data['longitude'], $data['latitude'], $data['zoom_level'])); - Log::debug( + app('log')->debug(sprintf('Returning longitude: "%s", latitude: "%s", zoom level: "%s"', $data['longitude'], $data['latitude'], $data['zoom_level'])); + app('log')->debug( sprintf( 'Returning actions: store: %s, update: %s, delete: %s', var_export($data['store_location'], true), @@ -99,12 +122,6 @@ trait AppendsLocationData return $data; } - /** - * @param string|null $prefix - * @param string $key - * - * @return string - */ private function getLocationKey(?string $prefix, string $key): string { if (null === $prefix) { @@ -114,45 +131,40 @@ trait AppendsLocationData return sprintf('%s_%s', $prefix, $key); } - /** - * @param string|null $prefix - * - * @return bool - */ - private function isValidPOST(?string $prefix): bool + private function isValidPost(?string $prefix): bool { - Log::debug('Now in isValidPOST()'); + app('log')->debug('Now in isValidPost()'); $longitudeKey = $this->getLocationKey($prefix, 'longitude'); $latitudeKey = $this->getLocationKey($prefix, 'latitude'); $zoomLevelKey = $this->getLocationKey($prefix, 'zoom_level'); $hasLocationKey = $this->getLocationKey($prefix, 'has_location'); // fields must not be null: if (null !== $this->get($longitudeKey) && null !== $this->get($latitudeKey) && null !== $this->get($zoomLevelKey)) { - Log::debug('All fields present'); + app('log')->debug('All fields present'); // if is POST and route contains API, this is enough: if ('POST' === $this->method() && $this->routeIs('api.v1.*')) { - Log::debug('Is API location'); + app('log')->debug('Is API location'); return true; } // if is POST and route does not contain API, must also have "has_location" = true - if ('POST' === $this->method() && $this->routeIs('*.store') && !$this->routeIs('api.v1.*') && $hasLocationKey) { - Log::debug('Is POST + store route.'); + if ('POST' === $this->method() && $this->routeIs('*.store') && !$this->routeIs('api.v1.*') && '' !== $hasLocationKey) { + app('log')->debug('Is POST + store route.'); $hasLocation = $this->boolean($hasLocationKey); if (true === $hasLocation) { - Log::debug('Has form form location'); + app('log')->debug('Has form form location'); return true; } - Log::debug('Does not have form location'); + app('log')->debug('Does not have form location'); return false; } - Log::debug('Is not POST API or POST form'); + app('log')->debug('Is not POST API or POST form'); return false; } - Log::debug('Fields not present'); + app('log')->debug('Fields not present'); return false; } @@ -180,59 +192,51 @@ trait AppendsLocationData * @param bool $default * * @return mixed + * + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) */ abstract public function boolean($key = null, $default = false); - /** - * @param string|null $prefix - * - * @return bool - */ private function isValidPUT(?string $prefix): bool { $longitudeKey = $this->getLocationKey($prefix, 'longitude'); $latitudeKey = $this->getLocationKey($prefix, 'latitude'); $zoomLevelKey = $this->getLocationKey($prefix, 'zoom_level'); $hasLocationKey = $this->getLocationKey($prefix, 'has_location'); - Log::debug('Now in isValidPUT()'); + app('log')->debug('Now in isValidPUT()'); // all fields must be set: if (null !== $this->get($longitudeKey) && null !== $this->get($latitudeKey) && null !== $this->get($zoomLevelKey)) { - Log::debug('All fields present.'); + app('log')->debug('All fields present.'); // must be PUT and API route: if ('PUT' === $this->method() && $this->routeIs('api.v1.*')) { - Log::debug('Is API location'); + app('log')->debug('Is API location'); return true; } // if POST and not API route, must also have "has_location" // if is POST and route does not contain API, must also have "has_location" = true - if ('POST' === $this->method() && $this->routeIs('*.update') && !$this->routeIs('api.v1.*') && $hasLocationKey) { - Log::debug('Is POST + store route.'); + if ('POST' === $this->method() && $this->routeIs('*.update') && !$this->routeIs('api.v1.*') && '' !== $hasLocationKey) { + app('log')->debug('Is POST + store route.'); $hasLocation = $this->boolean($hasLocationKey); if (true === $hasLocation) { - Log::debug('Has form location data + has_location'); + app('log')->debug('Has form location data + has_location'); return true; } - Log::debug('Does not have form location'); + app('log')->debug('Does not have form location'); return false; } - Log::debug('Is not POST API or POST form'); + app('log')->debug('Is not POST API or POST form'); return false; } - Log::debug('Fields not present'); + app('log')->debug('Fields not present'); return false; } - /** - * @param string|null $prefix - * - * @return bool - */ private function isValidEmptyPUT(?string $prefix): bool { $longitudeKey = $this->getLocationKey($prefix, 'longitude'); diff --git a/app/Support/Request/ChecksLogin.php b/app/Support/Request/ChecksLogin.php index e0d236f993..af635bac7e 100644 --- a/app/Support/Request/ChecksLogin.php +++ b/app/Support/Request/ChecksLogin.php @@ -26,7 +26,6 @@ namespace FireflyIII\Support\Request; use FireflyIII\Enums\UserRoleEnum; use FireflyIII\Models\UserGroup; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Trait ChecksLogin @@ -35,52 +34,54 @@ trait ChecksLogin { /** * Verify the request. - * - * @return bool */ public function authorize(): bool { - Log::debug(sprintf('Now in %s', __METHOD__)); + app('log')->debug(sprintf('Now in %s', __METHOD__)); // Only allow logged-in users - $check = auth()->check(); + $check = auth()->check(); if (!$check) { return false; } - if (!property_exists($this, 'acceptedRoles')) { + if (!property_exists($this, 'acceptedRoles')) { // @phpstan-ignore-line app('log')->debug('Request class has no acceptedRoles array'); + return true; // check for false already took place. } + /** @var User $user */ $user = auth()->user(); $userGroup = $this->getUserGroup(); if (null === $userGroup) { app('log')->error('User has no valid user group submitted or otherwise.'); + return false; } /** @var UserRoleEnum $role */ foreach ($this->acceptedRoles as $role) { // system owner cannot overrule this, MUST be member of the group. - if ($user->hasRoleInGroup($userGroup, $role, true, false)) { + $access = $user->hasRoleInGroupOrOwner($userGroup, $role); + if ($access) { return true; } } + return false; } /** * Return the user group or NULL if none is set. * Will throw exception if invalid. - * - * @return UserGroup|null */ public function getUserGroup(): ?UserGroup { /** @var User $user */ - $user = auth()->user(); + $user = auth()->user(); app('log')->debug('Now in getUserGroup()'); - /** @var UserGroup $userGroup */ - $userGroup = $this->route()->parameter('userGroup'); + + /** @var null|UserGroup $userGroup */ + $userGroup = $this->route()?->parameter('userGroup'); if (null === $userGroup) { app('log')->debug('Request class has no userGroup parameter, but perhaps there is a parameter.'); $userGroupId = (int)$this->get('user_group_id'); @@ -88,13 +89,15 @@ trait ChecksLogin app('log')->debug(sprintf('Request class has no user_group_id parameter, grab default from user (group #%d).', $user->user_group_id)); $userGroupId = (int)$user->user_group_id; } - $userGroup = UserGroup::find($userGroupId); + $userGroup = UserGroup::find($userGroupId); if (null === $userGroup) { app('log')->error(sprintf('Request class has user_group_id (#%d), but group does not exist.', $userGroupId)); + return null; } app('log')->debug('Request class has valid user_group_id.'); } + return $userGroup; } } diff --git a/app/Support/Request/ConvertAPIDataTypes.php b/app/Support/Request/ConvertAPIDataTypes.php index 837e906847..0c9732e80c 100644 --- a/app/Support/Request/ConvertAPIDataTypes.php +++ b/app/Support/Request/ConvertAPIDataTypes.php @@ -26,6 +26,4 @@ namespace FireflyIII\Support\Request; /** * Trait ConvertAPIDataTypes */ -trait ConvertAPIDataTypes -{ -} +trait ConvertAPIDataTypes {} diff --git a/app/Support/Request/ConvertsDataTypes.php b/app/Support/Request/ConvertsDataTypes.php index 89c7d4b70c..0e1db9ab00 100644 --- a/app/Support/Request/ConvertsDataTypes.php +++ b/app/Support/Request/ConvertsDataTypes.php @@ -28,67 +28,14 @@ use Carbon\Exceptions\InvalidDateException; use Carbon\Exceptions\InvalidFormatException; use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Trait ConvertsDataTypes */ trait ConvertsDataTypes { - /** - * Return integer value. - * - * @param string $field - * - * @return int - */ - public function convertInteger(string $field): int - { - return (int)$this->get($field); - } - - /** - * Abstract method that always exists in the Request classes that use this - * trait, OR a stub needs to be added by any other class that uses this train. - * - * @param string $key - * @param mixed|null $default - * - * @return mixed - */ - abstract public function get(string $key, mixed $default = null): mixed; - - /** - * Return string value. - * - * @param string $field - * - * @return string - */ - public function convertString(string $field): string - { - $entry = $this->get($field); - if (!is_scalar($entry)) { - return ''; - } - return $this->clearString((string)$entry, false); - } - - /** - * @param string|null $string - * @param bool $keepNewlines - * - * @return string|null - */ - public function clearString(?string $string, bool $keepNewlines = true): ?string - { - if (null === $string) { - return null; - } - if ('' === $string) { - return ''; - } - $search = [ + private array $characters + = [ "\0", // NUL "\f", // form feed "\v", // vertical tab @@ -137,37 +84,80 @@ trait ConvertsDataTypes "\u{202F}", // narrow no-break space "\u{3000}", // ideographic space "\u{FEFF}", // zero width no -break space + "\r", // carriage return ]; - $replace = "\x20"; // plain old normal space - $string = str_replace($search, $replace, $string); - $secondSearch = $keepNewlines ? ["\r"] : ["\r", "\n", "\t", "\036", "\025"]; - $string = str_replace($secondSearch, '', $string); + /** + * Return integer value. + */ + public function convertInteger(string $field): int + { + return (int)$this->get($field); + } + + /** + * Abstract method that always exists in the Request classes that use this + * trait, OR a stub needs to be added by any other class that uses this train. + */ + abstract public function get(string $key, mixed $default = null): mixed; + + /** + * Return string value. + */ + public function convertString(string $field): string + { + $entry = $this->get($field); + if (!is_scalar($entry)) { + return ''; + } + + return (string)$this->clearString((string)$entry); + } + + public function clearString(?string $string): ?string + { + $string = $this->clearStringKeepNewlines($string); - // clear zalgo text (TODO also in API v2) - $string = preg_replace('/(\pM{2})\pM+/u', '\1', $string); if (null === $string) { return null; } if ('' === $string) { return ''; } + + // then remove newlines too: + $string = str_replace(["\r", "\n", "\t", "\036", "\025"], '', $string); + return trim($string); } + public function clearStringKeepNewlines(?string $string): ?string + { + if (null === $string) { + return null; + } + if ('' === $string) { + return ''; + } + $string = str_replace($this->characters, "\x20", $string); + + // clear zalgo text (TODO also in API v2) + $string = preg_replace('/(\pM{2})\pM+/u', '\1', $string); + + return trim((string)$string); + } + /** * TODO duplicate, see SelectTransactionsRequest * * Validate list of accounts. This one is for V2 endpoints, so it searches for groups, not users. - * - * @return Collection */ public function getAccountList(): Collection { /** @var AccountRepositoryInterface $repository */ $repository = app(AccountRepositoryInterface::class); - if (method_exists($this, 'validateUserGroup')) { + if (method_exists($this, 'validateUserGroup')) { // @phpstan-ignore-line $userGroup = $this->validateUserGroup($this); if (null !== $userGroup) { $repository->setUserGroup($userGroup); @@ -193,20 +183,14 @@ trait ConvertsDataTypes /** * Return string value with newlines. - * - * @param string $field - * - * @return string */ public function stringWithNewlines(string $field): string { - return $this->clearString((string)($this->get($field) ?? '')); + return (string)$this->clearStringKeepNewlines((string)($this->get($field) ?? '')); } /** * @param mixed $array - * - * @return array|null */ protected function arrayFromValue($array): ?array { @@ -223,11 +207,6 @@ trait ConvertsDataTypes return null; } - /** - * @param string|null $value - * - * @return bool - */ protected function convertBoolean(?string $value): bool { if (null === $value) { @@ -249,14 +228,9 @@ trait ConvertsDataTypes return false; } - /** - * @param string|null $string - * - * @return Carbon|null - */ protected function convertDateTime(?string $string): ?Carbon { - $value = $this->get($string); + $value = $this->get((string)$string); if (null === $value) { return null; } @@ -267,37 +241,42 @@ trait ConvertsDataTypes // probably a date format. try { $carbon = Carbon::createFromFormat('Y-m-d', $value); - } catch (InvalidDateException $e) { - Log::error(sprintf('[1] "%s" is not a valid date: %s', $value, $e->getMessage())); + } catch (InvalidDateException $e) { // @phpstan-ignore-line + app('log')->error(sprintf('[1] "%s" is not a valid date: %s', $value, $e->getMessage())); + return null; - } catch (InvalidFormatException $e) { - Log::error(sprintf('[2] "%s" is of an invalid format: %s', $value, $e->getMessage())); + } catch (InvalidFormatException $e) { // @phpstan-ignore-line + app('log')->error(sprintf('[2] "%s" is of an invalid format: %s', $value, $e->getMessage())); return null; } + if (false === $carbon) { + app('log')->error(sprintf('[2] "%s" is of an invalid format.', $value)); + + return null; + } + return $carbon; } + // is an atom string, I hope? try { $carbon = Carbon::parse($value); - } catch (InvalidDateException $e) { - Log::error(sprintf('[3] "%s" is not a valid date or time: %s', $value, $e->getMessage())); + } catch (InvalidDateException $e) { // @phpstan-ignore-line + app('log')->error(sprintf('[3] "%s" is not a valid date or time: %s', $value, $e->getMessage())); return null; } catch (InvalidFormatException $e) { - Log::error(sprintf('[4] "%s" is of an invalid format: %s', $value, $e->getMessage())); + app('log')->error(sprintf('[4] "%s" is of an invalid format: %s', $value, $e->getMessage())); return null; } + return $carbon; } /** * Return floating value. - * - * @param string $field - * - * @return float|null */ protected function convertFloat(string $field): ?float { @@ -309,11 +288,6 @@ trait ConvertsDataTypes return (float)$res; } - /** - * @param string|null $string - * - * @return Carbon|null - */ protected function dateFromValue(?string $string): ?Carbon { if (null === $string) { @@ -323,17 +297,18 @@ trait ConvertsDataTypes return null; } $carbon = null; + try { $carbon = new Carbon($string, config('app.timezone')); } catch (InvalidFormatException $e) { // @ignoreException } if (null === $carbon) { - Log::debug(sprintf('Invalid date: %s', $string)); + app('log')->debug(sprintf('Invalid date: %s', $string)); return null; } - Log::debug(sprintf('Date object: %s (%s)', $carbon->toW3cString(), $carbon->getTimezone())); + app('log')->debug(sprintf('Date object: %s (%s)', $carbon->toW3cString(), $carbon->getTimezone())); return $carbon; } @@ -341,18 +316,14 @@ trait ConvertsDataTypes /** * Returns all data in the request, or omits the field if not set, * according to the config from the request. This is the way. - * - * @param array $fields - * - * @return array */ protected function getAllData(array $fields): array { $return = []; foreach ($fields as $field => $info) { - if ($this->has($info[0])) { + if (true === $this->has($info[0])) { $method = $info[1]; - $return[$field] = $this->$method($info[0]); + $return[$field] = $this->{$method}($info[0]); // @phpstan-ignore-line } } @@ -371,21 +342,18 @@ trait ConvertsDataTypes /** * Return date or NULL. - * - * @param string $field - * - * @return Carbon|null */ protected function getCarbonDate(string $field): ?Carbon { $result = null; + try { - $result = $this->get($field) ? new Carbon($this->get($field), config('app.timezone')) : null; + $result = '' !== (string)$this->get($field) ? new Carbon((string)$this->get($field), config('app.timezone')) : null; } catch (InvalidFormatException $e) { // @ignoreException } if (null === $result) { - Log::debug(sprintf('Exception when parsing date "%s".', $this->get($field))); + app('log')->debug(sprintf('Exception when parsing date "%s".', $this->get($field))); } return $result; @@ -393,10 +361,6 @@ trait ConvertsDataTypes /** * Parse to integer - * - * @param string|null $string - * - * @return int|null */ protected function integerFromValue(?string $string): ?int { @@ -412,14 +376,10 @@ trait ConvertsDataTypes /** * Return integer value, or NULL when it's not set. - * - * @param string $field - * - * @return int|null */ protected function nullableInteger(string $field): ?int { - if (!$this->has($field)) { + if (false === $this->has($field)) { return null; } diff --git a/app/Support/Request/GetRecurrenceData.php b/app/Support/Request/GetRecurrenceData.php index d26b9e702e..a687cf3215 100644 --- a/app/Support/Request/GetRecurrenceData.php +++ b/app/Support/Request/GetRecurrenceData.php @@ -28,67 +28,27 @@ namespace FireflyIII\Support\Request; */ trait GetRecurrenceData { - /** - * @param array $transaction - * - * @return array - */ protected function getSingleTransactionData(array $transaction): array { - $return = []; + $return = []; + $stringKeys = ['id']; + $intKeys = ['currency_id', 'foreign_currency_id', 'source_id', 'destination_id', 'bill_id', 'piggy_bank_id', 'bill_id', 'budget_id', 'category_id']; + $keys = ['amount', 'currency_code', 'foreign_amount', 'foreign_currency_code', 'description', 'tags']; - if (array_key_exists('id', $transaction)) { - $return['id'] = (string)$transaction['id']; + foreach ($stringKeys as $key) { + if (array_key_exists($key, $transaction)) { + $return[$key] = (string)$transaction[$key]; + } } - - // amount + currency - if (array_key_exists('amount', $transaction)) { - $return['amount'] = $transaction['amount']; + foreach ($intKeys as $key) { + if (array_key_exists($key, $transaction)) { + $return[$key] = (int)$transaction[$key]; + } } - if (array_key_exists('currency_id', $transaction)) { - $return['currency_id'] = (int)$transaction['currency_id']; - } - if (array_key_exists('currency_code', $transaction)) { - $return['currency_code'] = $transaction['currency_code']; - } - - // foreign amount + currency - if (array_key_exists('foreign_amount', $transaction)) { - $return['foreign_amount'] = $transaction['foreign_amount']; - } - if (array_key_exists('foreign_currency_id', $transaction)) { - $return['foreign_currency_id'] = (int)$transaction['foreign_currency_id']; - } - if (array_key_exists('foreign_currency_code', $transaction)) { - $return['foreign_currency_code'] = $transaction['foreign_currency_code']; - } - // source + dest - if (array_key_exists('source_id', $transaction)) { - $return['source_id'] = (int)$transaction['source_id']; - } - if (array_key_exists('destination_id', $transaction)) { - $return['destination_id'] = (int)$transaction['destination_id']; - } - // description - if (array_key_exists('description', $transaction)) { - $return['description'] = $transaction['description']; - } - - if (array_key_exists('piggy_bank_id', $transaction)) { - $return['piggy_bank_id'] = (int)$transaction['piggy_bank_id']; - } - if (array_key_exists('bill_id', $transaction)) { - $return['bill_id'] = (int)$transaction['bill_id']; - } - - if (array_key_exists('tags', $transaction)) { - $return['tags'] = $transaction['tags']; - } - if (array_key_exists('budget_id', $transaction)) { - $return['budget_id'] = (int)$transaction['budget_id']; - } - if (array_key_exists('category_id', $transaction)) { - $return['category_id'] = (int)$transaction['category_id']; + foreach ($keys as $key) { + if (array_key_exists($key, $transaction)) { + $return[$key] = $transaction[$key]; + } } return $return; diff --git a/app/Support/Request/GetRuleConfiguration.php b/app/Support/Request/GetRuleConfiguration.php index 776d966ea6..d1fa61edc2 100644 --- a/app/Support/Request/GetRuleConfiguration.php +++ b/app/Support/Request/GetRuleConfiguration.php @@ -28,17 +28,11 @@ namespace FireflyIII\Support\Request; */ trait GetRuleConfiguration { - /** - * @return array - */ protected function getTriggers(): array { return array_keys(config('search.operators')); } - /** - * @return array - */ protected function getTriggersWithContext(): array { $list = config('search.operators'); diff --git a/app/Support/Search/AccountSearch.php b/app/Support/Search/AccountSearch.php index 7ca86aa79e..60214a1290 100644 --- a/app/Support/Search/AccountSearch.php +++ b/app/Support/Search/AccountSearch.php @@ -35,15 +35,19 @@ use Illuminate\Support\Collection; class AccountSearch implements GenericSearchInterface { /** @var string */ - public const SEARCH_ALL = 'all'; + public const string SEARCH_ALL = 'all'; + /** @var string */ - public const SEARCH_IBAN = 'iban'; + public const string SEARCH_IBAN = 'iban'; + /** @var string */ - public const SEARCH_ID = 'id'; + public const string SEARCH_ID = 'id'; + /** @var string */ - public const SEARCH_NAME = 'name'; + public const string SEARCH_NAME = 'name'; + /** @var string */ - public const SEARCH_NUMBER = 'number'; + public const string SEARCH_NUMBER = 'number'; private string $field; private string $query; private array $types; @@ -54,22 +58,21 @@ class AccountSearch implements GenericSearchInterface $this->types = []; } - /** - * @return Collection - */ public function search(): Collection { $searchQuery = $this->user->accounts() - ->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id') - ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') - ->whereIn('account_types.type', $this->types); + ->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id') + ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') + ->whereIn('account_types.type', $this->types) + ; $like = sprintf('%%%s%%', $this->query); $originalQuery = $this->query; + switch ($this->field) { default: case self::SEARCH_ALL: $searchQuery->where( - static function (Builder $q) use ($like) { + static function (Builder $q) use ($like): void { // @phpstan-ignore-line $q->where('accounts.id', 'LIKE', $like); $q->orWhere('accounts.name', 'LIKE', $like); $q->orWhere('accounts.iban', 'LIKE', $like); @@ -77,69 +80,64 @@ class AccountSearch implements GenericSearchInterface ); // meta data: $searchQuery->orWhere( - static function (Builder $q) use ($originalQuery) { + static function (Builder $q) use ($originalQuery): void { // @phpstan-ignore-line $json = json_encode($originalQuery, JSON_THROW_ON_ERROR); $q->where('account_meta.name', '=', 'account_number'); $q->where('account_meta.data', 'LIKE', $json); } ); + break; + case self::SEARCH_ID: $searchQuery->where('accounts.id', '=', (int)$originalQuery); + break; + case self::SEARCH_NAME: $searchQuery->where('accounts.name', 'LIKE', $like); + break; + case self::SEARCH_IBAN: $searchQuery->where('accounts.iban', 'LIKE', $like); + break; + case self::SEARCH_NUMBER: // meta data: $searchQuery->Where( - static function (Builder $q) use ($originalQuery) { + static function (Builder $q) use ($originalQuery): void { // @phpstan-ignore-line $json = json_encode($originalQuery, JSON_THROW_ON_ERROR); $q->where('account_meta.name', 'account_number'); $q->where('account_meta.data', $json); } ); + break; } return $searchQuery->distinct()->get(['accounts.*']); } - /** - * @param string $field - */ public function setField(string $field): void { $this->field = $field; } - /** - * @param string $query - */ public function setQuery(string $query): void { $this->query = $query; } - /** - * @param array $types - */ public function setTypes(array $types): void { $this->types = $types; } - /** - * @param User|Authenticatable|null $user - * - * @return void - */ - public function setUser(User | Authenticatable | null $user): void + public function setUser(null|Authenticatable|User $user): void { - if (null !== $user) { + if ($user instanceof User) { $this->user = $user; } } diff --git a/app/Support/Search/GenericSearchInterface.php b/app/Support/Search/GenericSearchInterface.php index e7bb9005c3..1c765b459e 100644 --- a/app/Support/Search/GenericSearchInterface.php +++ b/app/Support/Search/GenericSearchInterface.php @@ -31,8 +31,5 @@ use Illuminate\Support\Collection; */ interface GenericSearchInterface { - /** - * @return Collection - */ public function search(): Collection; } diff --git a/app/Support/Search/OperatorQuerySearch.php b/app/Support/Search/OperatorQuerySearch.php index b0a64829fc..dcac60ceda 100644 --- a/app/Support/Search/OperatorQuerySearch.php +++ b/app/Support/Search/OperatorQuerySearch.php @@ -24,6 +24,8 @@ declare(strict_types=1); namespace FireflyIII\Support\Search; use Carbon\Carbon; +use FireflyIII\Enums\SearchDirection; +use FireflyIII\Enums\StringPosition; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\Account; @@ -34,8 +36,8 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Tag\TagRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\ParseDateString; use FireflyIII\User; use Gdbots\QueryParser\Enum\BoolOperator; @@ -54,12 +56,11 @@ use Gdbots\QueryParser\Node\Word; use Gdbots\QueryParser\QueryParser; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; -use LogicException; -use TypeError; /** * Class OperatorQuerySearch + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class OperatorQuerySearch implements SearchInterface { @@ -70,6 +71,8 @@ class OperatorQuerySearch implements SearchInterface private CategoryRepositoryInterface $categoryRepository; private GroupCollectorInterface $collector; private CurrencyRepositoryInterface $currencyRepository; + private array $excludeTags; + private array $includeTags; private array $invalidOperators; private int $limit; private Collection $operators; @@ -82,15 +85,15 @@ class OperatorQuerySearch implements SearchInterface /** * OperatorQuerySearch constructor. - * - */ public function __construct() { - Log::debug('Constructed OperatorQuerySearch'); + app('log')->debug('Constructed OperatorQuerySearch'); $this->operators = new Collection(); $this->page = 1; $this->words = []; + $this->excludeTags = []; + $this->includeTags = []; $this->prohibitedWords = []; $this->invalidOperators = []; $this->limit = 25; @@ -104,40 +107,27 @@ class OperatorQuerySearch implements SearchInterface $this->currencyRepository = app(CurrencyRepositoryInterface::class); } - /** - * @return array - */ public function getInvalidOperators(): array { return $this->invalidOperators; } - /** - * @inheritDoc - */ public function getModifiers(): Collection { return $this->getOperators(); } - /** - * @inheritDoc - */ public function getOperators(): Collection { return $this->operators; } - /** - * @inheritDoc - */ public function getWordsAsString(): string { return implode(' ', $this->words); } /** - * @inheritDoc * @throws FireflyException */ public function hasModifiers(): bool @@ -146,49 +136,54 @@ class OperatorQuerySearch implements SearchInterface } /** - * @inheritDoc * @throws FireflyException */ - public function parseQuery(string $query) + public function parseQuery(string $query): void { - Log::debug(sprintf('Now in parseQuery(%s)', $query)); + app('log')->debug(sprintf('Now in parseQuery(%s)', $query)); $parser = new QueryParser(); + try { $query1 = $parser->parse($query); - } catch (TypeError | LogicException $e) { - Log::error($e->getMessage()); - Log::error(sprintf('Could not parse search: "%s".', $query)); + } catch (\LogicException|\TypeError $e) { + app('log')->error($e->getMessage()); + app('log')->error(sprintf('Could not parse search: "%s".', $query)); + throw new FireflyException(sprintf('Invalid search value "%s". See the logs.', e($query)), 0, $e); } - Log::debug(sprintf('Found %d node(s)', count($query1->getNodes()))); + app('log')->debug(sprintf('Found %d node(s)', count($query1->getNodes()))); foreach ($query1->getNodes() as $searchNode) { $this->handleSearchNode($searchNode); } - $this->collector->setSearchWords($this->words); $this->collector->excludeSearchWords($this->prohibitedWords); } /** - * @param Node $searchNode - * * @throws FireflyException + * + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function handleSearchNode(Node $searchNode): void { $class = get_class($searchNode); - Log::debug(sprintf('Now in handleSearchNode(%s)', $class)); + app('log')->debug(sprintf('Now in handleSearchNode(%s)', $class)); + switch ($class) { default: - Log::error(sprintf('Cannot handle node %s', $class)); + app('log')->error(sprintf('Cannot handle node %s', $class)); + throw new FireflyException(sprintf('Firefly III search cant handle "%s"-nodes', $class)); + case Subquery::class: // loop all notes in subquery: foreach ($searchNode->getNodes() as $subNode) { // @phpstan-ignore-line PHPStan thinks getNodes() does not exist but it does. $this->handleSearchNode($subNode); // let's hope it's not too recursive } + break; + case Word::class: case Phrase::class: case Numbr::class: @@ -198,28 +193,37 @@ class OperatorQuerySearch implements SearchInterface case Emoticon::class: case Emoji::class: case Mention::class: - $allWords = (string)$searchNode->getValue(); - Log::debug(sprintf('Add words "%s" to search string, because Node class is "%s"', $allWords, $class)); + $allWords = (string)$searchNode->getValue(); + app('log')->debug(sprintf('Add words "%s" to search string, because Node class is "%s"', $allWords, $class)); $this->words[] = $allWords; + break; + case Field::class: - Log::debug(sprintf('Now handle Node class %s', $class)); + app('log')->debug(sprintf('Now handle Node class %s', $class)); + /** @var Field $searchNode */ // used to search for x:y - $operator = strtolower($searchNode->getValue()); - $value = $searchNode->getNode()->getValue(); - $prohibited = $searchNode->getBoolOperator() === BoolOperator::PROHIBITED; - $context = config(sprintf('search.operators.%s.needs_context', $operator)); + $operator = strtolower($searchNode->getValue()); + $value = $searchNode->getNode()->getValue(); + $prohibited = BoolOperator::PROHIBITED === $searchNode->getBoolOperator(); + $context = config(sprintf('search.operators.%s.needs_context', $operator)); // is an operator that needs no context, and value is false, then prohibited = true. - if ('false' === $value && in_array($operator, $this->validOperators, true) && false === $context) { + if ('false' === $value && in_array($operator, $this->validOperators, true) && false === $context && !$prohibited) { $prohibited = true; + $value = 'true'; + } + // if the operator is prohibited, but the value is false, do an uno reverse + if ('false' === $value && $prohibited && in_array($operator, $this->validOperators, true) && false === $context) { + $prohibited = false; + $value = 'true'; } // must be valid operator: if ( - in_array($operator, $this->validOperators, true) && - $this->updateCollector($operator, (string)$value, $prohibited)) { + in_array($operator, $this->validOperators, true) + && $this->updateCollector($operator, (string)$value, $prohibited)) { $this->operators->push( [ 'type' => self::getRootOperator($operator), @@ -227,10 +231,10 @@ class OperatorQuerySearch implements SearchInterface 'prohibited' => $prohibited, ] ); - Log::debug(sprintf('Added operator type "%s"', $operator)); + app('log')->debug(sprintf('Added operator type "%s"', $operator)); } if (!in_array($operator, $this->validOperators, true)) { - Log::debug(sprintf('Added INVALID operator type "%s"', $operator)); + app('log')->debug(sprintf('Added INVALID operator type "%s"', $operator)); $this->invalidOperators[] = [ 'type' => $operator, 'value' => (string)$value, @@ -240,131 +244,200 @@ class OperatorQuerySearch implements SearchInterface } /** - * * @throws FireflyException + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function updateCollector(string $operator, string $value, bool $prohibited): bool { if ($prohibited) { - Log::debug(sprintf('Operator "%s" is now "%s"', $operator, sprintf('-%s', $operator))); + app('log')->debug(sprintf('Operator "%s" is now "%s"', $operator, sprintf('-%s', $operator))); $operator = sprintf('-%s', $operator); } - Log::debug(sprintf('Now in updateCollector("%s", "%s")', $operator, $value)); + app('log')->debug(sprintf('Now in updateCollector("%s", "%s")', $operator, $value)); // check if alias, replace if necessary: $operator = self::getRootOperator($operator); switch ($operator) { default: - Log::error(sprintf('No such operator: %s', $operator)); + app('log')->error(sprintf('No such operator: %s', $operator)); + throw new FireflyException(sprintf('Unsupported search operator: "%s"', $operator)); + // some search operators are ignored, basically: case 'user_action': - Log::info(sprintf('Ignore search operator "%s"', $operator)); + app('log')->info(sprintf('Ignore search operator "%s"', $operator)); return false; + // // all account related searches: // case 'account_is': - $this->searchAccount($value, 3, 4); + $this->searchAccount($value, SearchDirection::BOTH, StringPosition::IS); + break; + case '-account_is': - $this->searchAccount($value, 3, 4, true); + $this->searchAccount($value, SearchDirection::BOTH, StringPosition::IS, true); + break; + case 'account_contains': - $this->searchAccount($value, 3, 3); + $this->searchAccount($value, SearchDirection::BOTH, StringPosition::CONTAINS); + break; + case '-account_contains': - $this->searchAccount($value, 3, 3, true); + $this->searchAccount($value, SearchDirection::BOTH, StringPosition::CONTAINS, true); + break; + case 'account_ends': - $this->searchAccount($value, 3, 2); + $this->searchAccount($value, SearchDirection::BOTH, StringPosition::ENDS); + break; + case '-account_ends': - $this->searchAccount($value, 3, 2, true); + $this->searchAccount($value, SearchDirection::BOTH, StringPosition::ENDS, true); + break; + case 'account_starts': - $this->searchAccount($value, 3, 1); + $this->searchAccount($value, SearchDirection::BOTH, StringPosition::STARTS); + break; + case '-account_starts': - $this->searchAccount($value, 3, 1, true); + $this->searchAccount($value, SearchDirection::BOTH, StringPosition::STARTS, true); + break; + case 'account_nr_is': - $this->searchAccountNr($value, 3, 4); + $this->searchAccountNr($value, SearchDirection::BOTH, StringPosition::IS); + break; + case '-account_nr_is': - $this->searchAccountNr($value, 3, 4, true); + $this->searchAccountNr($value, SearchDirection::BOTH, StringPosition::IS, true); + break; + case 'account_nr_contains': - $this->searchAccountNr($value, 3, 3); + $this->searchAccountNr($value, SearchDirection::BOTH, StringPosition::CONTAINS); + break; + case '-account_nr_contains': - $this->searchAccountNr($value, 3, 3, true); + $this->searchAccountNr($value, SearchDirection::BOTH, StringPosition::CONTAINS, true); + break; + case 'account_nr_ends': - $this->searchAccountNr($value, 3, 2); + $this->searchAccountNr($value, SearchDirection::BOTH, StringPosition::ENDS); + break; + case '-account_nr_ends': - $this->searchAccountNr($value, 3, 2, true); + $this->searchAccountNr($value, SearchDirection::BOTH, StringPosition::ENDS, true); + break; + case 'account_nr_starts': - $this->searchAccountNr($value, 3, 1); + $this->searchAccountNr($value, SearchDirection::BOTH, StringPosition::STARTS); + break; + case '-account_nr_starts': - $this->searchAccountNr($value, 3, 1, true); + $this->searchAccountNr($value, SearchDirection::BOTH, StringPosition::STARTS, true); + break; + case 'source_account_starts': - $this->searchAccount($value, 1, 1); + $this->searchAccount($value, SearchDirection::SOURCE, StringPosition::STARTS); + break; + case '-source_account_starts': - $this->searchAccount($value, 1, 1, true); + $this->searchAccount($value, SearchDirection::SOURCE, StringPosition::STARTS, true); + break; + case 'source_account_ends': - $this->searchAccount($value, 1, 2); + $this->searchAccount($value, SearchDirection::SOURCE, StringPosition::ENDS); + break; + case '-source_account_ends': - $this->searchAccount($value, 1, 2, true); + $this->searchAccount($value, SearchDirection::SOURCE, StringPosition::ENDS, true); + break; + case 'source_account_is': - $this->searchAccount($value, 1, 4); + $this->searchAccount($value, SearchDirection::SOURCE, StringPosition::IS); + break; + case '-source_account_is': - $this->searchAccount($value, 1, 4, true); + $this->searchAccount($value, SearchDirection::SOURCE, StringPosition::IS, true); + break; + case 'source_account_nr_starts': - $this->searchAccountNr($value, 1, 1); + $this->searchAccountNr($value, SearchDirection::SOURCE, StringPosition::STARTS); + break; + case '-source_account_nr_starts': - $this->searchAccountNr($value, 1, 1, true); + $this->searchAccountNr($value, SearchDirection::SOURCE, StringPosition::STARTS, true); + break; + case 'source_account_nr_ends': - $this->searchAccountNr($value, 1, 2); + $this->searchAccountNr($value, SearchDirection::SOURCE, StringPosition::ENDS); + break; + case '-source_account_nr_ends': - $this->searchAccountNr($value, 1, 2, true); + $this->searchAccountNr($value, SearchDirection::SOURCE, StringPosition::ENDS, true); + break; + case 'source_account_nr_is': - $this->searchAccountNr($value, 1, 4); + $this->searchAccountNr($value, SearchDirection::SOURCE, StringPosition::IS); + break; + case '-source_account_nr_is': - $this->searchAccountNr($value, 1, 4, true); + $this->searchAccountNr($value, SearchDirection::SOURCE, StringPosition::IS, true); + break; + case 'source_account_nr_contains': - $this->searchAccountNr($value, 1, 3); + $this->searchAccountNr($value, SearchDirection::SOURCE, StringPosition::CONTAINS); + break; + case '-source_account_nr_contains': - $this->searchAccountNr($value, 1, 3, true); + $this->searchAccountNr($value, SearchDirection::SOURCE, StringPosition::CONTAINS, true); + break; + case 'source_account_contains': - $this->searchAccount($value, 1, 3); + $this->searchAccount($value, SearchDirection::SOURCE, StringPosition::CONTAINS); + break; + case '-source_account_contains': - $this->searchAccount($value, 1, 3, true); + $this->searchAccount($value, SearchDirection::SOURCE, StringPosition::CONTAINS, true); + break; + case 'source_account_id': - $account = $this->accountRepository->find((int)$value); + $account = $this->accountRepository->find((int)$value); if (null !== $account) { $this->collector->setSourceAccounts(new Collection([$account])); } @@ -372,9 +445,11 @@ class OperatorQuerySearch implements SearchInterface // since the source does not exist, cannot return results: $this->collector->findNothing(); } + break; + case '-source_account_id': - $account = $this->accountRepository->find((int)$value); + $account = $this->accountRepository->find((int)$value); if (null !== $account) { $this->collector->excludeSourceAccounts(new Collection([$account])); } @@ -382,92 +457,138 @@ class OperatorQuerySearch implements SearchInterface // since the source does not exist, cannot return results: $this->collector->findNothing(); } + break; + case 'journal_id': - $parts = explode(',', $value); + $parts = explode(',', $value); $this->collector->setJournalIds($parts); + break; + case '-journal_id': - $parts = explode(',', $value); + $parts = explode(',', $value); $this->collector->excludeJournalIds($parts); + break; + case 'id': - $parts = explode(',', $value); + $parts = explode(',', $value); $this->collector->setIds($parts); + break; + case '-id': - $parts = explode(',', $value); + $parts = explode(',', $value); $this->collector->excludeIds($parts); + break; + case 'destination_account_starts': - $this->searchAccount($value, 2, 1); + $this->searchAccount($value, SearchDirection::DESTINATION, StringPosition::STARTS); + break; + case '-destination_account_starts': - $this->searchAccount($value, 2, 1, true); + $this->searchAccount($value, SearchDirection::DESTINATION, StringPosition::STARTS, true); + break; + case 'destination_account_ends': - $this->searchAccount($value, 2, 2); + $this->searchAccount($value, SearchDirection::DESTINATION, StringPosition::ENDS); + break; + case '-destination_account_ends': - $this->searchAccount($value, 2, 2, true); + $this->searchAccount($value, SearchDirection::DESTINATION, StringPosition::ENDS, true); + break; + case 'destination_account_nr_starts': - $this->searchAccountNr($value, 2, 1); + $this->searchAccountNr($value, SearchDirection::DESTINATION, StringPosition::STARTS); + break; + case '-destination_account_nr_starts': - $this->searchAccountNr($value, 2, 1, true); + $this->searchAccountNr($value, SearchDirection::DESTINATION, StringPosition::STARTS, true); + break; + case 'destination_account_nr_ends': - $this->searchAccountNr($value, 2, 2); + $this->searchAccountNr($value, SearchDirection::DESTINATION, StringPosition::ENDS); + break; + case '-destination_account_nr_ends': - $this->searchAccountNr($value, 2, 2, true); + $this->searchAccountNr($value, SearchDirection::DESTINATION, StringPosition::ENDS, true); + break; + case 'destination_account_nr_is': - $this->searchAccountNr($value, 2, 4); + $this->searchAccountNr($value, SearchDirection::DESTINATION, StringPosition::IS); + break; + case '-destination_account_nr_is': - $this->searchAccountNr($value, 2, 4, true); + $this->searchAccountNr($value, SearchDirection::DESTINATION, StringPosition::IS, true); + break; + case 'destination_account_is': - $this->searchAccount($value, 2, 4); + $this->searchAccount($value, SearchDirection::DESTINATION, StringPosition::IS); + break; + case '-destination_account_is': - $this->searchAccount($value, 2, 4, true); + $this->searchAccount($value, SearchDirection::DESTINATION, StringPosition::IS, true); + break; + case 'destination_account_nr_contains': - $this->searchAccountNr($value, 2, 3); + $this->searchAccountNr($value, SearchDirection::DESTINATION, StringPosition::CONTAINS); + break; + case '-destination_account_nr_contains': - $this->searchAccountNr($value, 2, 3, true); + $this->searchAccountNr($value, SearchDirection::DESTINATION, StringPosition::CONTAINS, true); + break; + case 'destination_account_contains': - $this->searchAccount($value, 2, 3); + $this->searchAccount($value, SearchDirection::DESTINATION, StringPosition::CONTAINS); + break; + case '-destination_account_contains': - $this->searchAccount($value, 2, 3, true); + $this->searchAccount($value, SearchDirection::DESTINATION, StringPosition::CONTAINS, true); + break; + case 'destination_account_id': - $account = $this->accountRepository->find((int)$value); + $account = $this->accountRepository->find((int)$value); if (null !== $account) { $this->collector->setDestinationAccounts(new Collection([$account])); } if (null === $account) { $this->collector->findNothing(); } + break; + case '-destination_account_id': - $account = $this->accountRepository->find((int)$value); + $account = $this->accountRepository->find((int)$value); if (null !== $account) { $this->collector->excludeDestinationAccounts(new Collection([$account])); } if (null === $account) { $this->collector->findNothing(); } + break; + case 'account_id': - $parts = explode(',', $value); - $collection = new Collection(); + $parts = explode(',', $value); + $collection = new Collection(); foreach ($parts as $accountId) { $account = $this->accountRepository->find((int)$accountId); if (null !== $account) { @@ -480,10 +601,12 @@ class OperatorQuerySearch implements SearchInterface if (0 === $collection->count()) { $this->collector->findNothing(); } + break; + case '-account_id': - $parts = explode(',', $value); - $collection = new Collection(); + $parts = explode(',', $value); + $collection = new Collection(); foreach ($parts as $accountId) { $account = $this->accountRepository->find((int)$accountId); if (null !== $account) { @@ -496,704 +619,1011 @@ class OperatorQuerySearch implements SearchInterface if (0 === $collection->count()) { $this->collector->findNothing(); } + break; + // // cash account // case 'source_is_cash': - $account = $this->getCashAccount(); + $account = $this->getCashAccount(); $this->collector->setSourceAccounts(new Collection([$account])); + break; + case '-source_is_cash': - $account = $this->getCashAccount(); + $account = $this->getCashAccount(); $this->collector->excludeSourceAccounts(new Collection([$account])); + break; + case 'destination_is_cash': - $account = $this->getCashAccount(); + $account = $this->getCashAccount(); $this->collector->setDestinationAccounts(new Collection([$account])); + break; + case '-destination_is_cash': - $account = $this->getCashAccount(); + $account = $this->getCashAccount(); $this->collector->excludeDestinationAccounts(new Collection([$account])); + break; + case 'account_is_cash': - $account = $this->getCashAccount(); + $account = $this->getCashAccount(); $this->collector->setAccounts(new Collection([$account])); + break; + case '-account_is_cash': - $account = $this->getCashAccount(); + $account = $this->getCashAccount(); $this->collector->excludeAccounts(new Collection([$account])); + break; + // // description // case 'description_starts': $this->collector->descriptionStarts([$value]); + break; + case '-description_starts': $this->collector->descriptionDoesNotStart([$value]); + break; + case 'description_ends': $this->collector->descriptionEnds([$value]); + break; + case '-description_ends': $this->collector->descriptionDoesNotEnd([$value]); + break; + case 'description_contains': - $this->words[] = $value; + $this->words[] = $value; return false; + case '-description_contains': $this->prohibitedWords[] = $value; break; + case 'description_is': $this->collector->descriptionIs($value); + break; + case '-description_is': $this->collector->descriptionIsNot($value); + break; + // // currency // case 'currency_is': - $currency = $this->findCurrency($value); + $currency = $this->findCurrency($value); if (null !== $currency) { $this->collector->setCurrency($currency); } if (null === $currency) { $this->collector->findNothing(); } + break; + case '-currency_is': - $currency = $this->findCurrency($value); + $currency = $this->findCurrency($value); if (null !== $currency) { $this->collector->excludeCurrency($currency); } if (null === $currency) { $this->collector->findNothing(); } + break; + case 'foreign_currency_is': - $currency = $this->findCurrency($value); + $currency = $this->findCurrency($value); if (null !== $currency) { $this->collector->setForeignCurrency($currency); } if (null === $currency) { $this->collector->findNothing(); } + break; + case '-foreign_currency_is': - $currency = $this->findCurrency($value); + $currency = $this->findCurrency($value); if (null !== $currency) { $this->collector->excludeForeignCurrency($currency); } if (null === $currency) { $this->collector->findNothing(); } + break; + // // attachments // case 'has_attachments': case '-has_no_attachments': - Log::debug('Set collector to filter on attachments.'); + app('log')->debug('Set collector to filter on attachments.'); $this->collector->hasAttachments(); + break; + case 'has_no_attachments': case '-has_attachments': - Log::debug('Set collector to filter on NO attachments.'); + app('log')->debug('Set collector to filter on NO attachments.'); $this->collector->hasNoAttachments(); + break; + // // categories case '-has_any_category': case 'has_no_category': $this->collector->withoutCategory(); + break; + case '-has_no_category': case 'has_any_category': $this->collector->withCategory(); + break; + case 'category_is': - $category = $this->categoryRepository->findByName($value); + $category = $this->categoryRepository->findByName($value); if (null !== $category) { $this->collector->setCategory($category); + break; } $this->collector->findNothing(); + break; + case '-category_is': - $category = $this->categoryRepository->findByName($value); + $category = $this->categoryRepository->findByName($value); if (null !== $category) { $this->collector->excludeCategory($category); + break; } + break; + case 'category_ends': - $result = $this->categoryRepository->categoryEndsWith($value, 1337); + $result = $this->categoryRepository->categoryEndsWith($value, 1337); if ($result->count() > 0) { $this->collector->setCategories($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case '-category_ends': - $result = $this->categoryRepository->categoryEndsWith($value, 1337); + $result = $this->categoryRepository->categoryEndsWith($value, 1337); if ($result->count() > 0) { $this->collector->excludeCategories($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case 'category_starts': - $result = $this->categoryRepository->categoryStartsWith($value, 1337); + $result = $this->categoryRepository->categoryStartsWith($value, 1337); if ($result->count() > 0) { $this->collector->setCategories($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case '-category_starts': - $result = $this->categoryRepository->categoryStartsWith($value, 1337); + $result = $this->categoryRepository->categoryStartsWith($value, 1337); if ($result->count() > 0) { $this->collector->excludeCategories($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case 'category_contains': - $result = $this->categoryRepository->searchCategory($value, 1337); + $result = $this->categoryRepository->searchCategory($value, 1337); if ($result->count() > 0) { $this->collector->setCategories($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case '-category_contains': - $result = $this->categoryRepository->searchCategory($value, 1337); + $result = $this->categoryRepository->searchCategory($value, 1337); if ($result->count() > 0) { $this->collector->excludeCategories($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + // // budgets // case '-has_any_budget': case 'has_no_budget': $this->collector->withoutBudget(); + break; + case 'has_any_budget': case '-has_no_budget': $this->collector->withBudget(); + break; + case 'budget_contains': - $result = $this->budgetRepository->searchBudget($value, 1337); + $result = $this->budgetRepository->searchBudget($value, 1337); if ($result->count() > 0) { $this->collector->setBudgets($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case '-budget_contains': - $result = $this->budgetRepository->searchBudget($value, 1337); + $result = $this->budgetRepository->searchBudget($value, 1337); if ($result->count() > 0) { $this->collector->excludeBudgets($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case 'budget_is': - $budget = $this->budgetRepository->findByName($value); + $budget = $this->budgetRepository->findByName($value); if (null !== $budget) { $this->collector->setBudget($budget); + break; } $this->collector->findNothing(); + break; + case '-budget_is': - $budget = $this->budgetRepository->findByName($value); + $budget = $this->budgetRepository->findByName($value); if (null !== $budget) { $this->collector->excludeBudget($budget); + break; } $this->collector->findNothing(); + break; + case 'budget_ends': - $result = $this->budgetRepository->budgetEndsWith($value, 1337); + $result = $this->budgetRepository->budgetEndsWith($value, 1337); if ($result->count() > 0) { $this->collector->setBudgets($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case '-budget_ends': - $result = $this->budgetRepository->budgetEndsWith($value, 1337); + $result = $this->budgetRepository->budgetEndsWith($value, 1337); if ($result->count() > 0) { $this->collector->excludeBudgets($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case 'budget_starts': - $result = $this->budgetRepository->budgetStartsWith($value, 1337); + $result = $this->budgetRepository->budgetStartsWith($value, 1337); if ($result->count() > 0) { $this->collector->setBudgets($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case '-budget_starts': - $result = $this->budgetRepository->budgetStartsWith($value, 1337); + $result = $this->budgetRepository->budgetStartsWith($value, 1337); if ($result->count() > 0) { $this->collector->excludeBudgets($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + // // bill // case '-has_any_bill': case 'has_no_bill': $this->collector->withoutBill(); + break; + case '-has_no_bill': case 'has_any_bill': $this->collector->withBill(); + break; + case 'bill_contains': - $result = $this->billRepository->searchBill($value, 1337); + $result = $this->billRepository->searchBill($value, 1337); if ($result->count() > 0) { $this->collector->setBills($result); + break; } $this->collector->findNothing(); + break; + case '-bill_contains': - $result = $this->billRepository->searchBill($value, 1337); + $result = $this->billRepository->searchBill($value, 1337); if ($result->count() > 0) { $this->collector->excludeBills($result); + break; } $this->collector->findNothing(); + break; + case 'bill_is': - $bill = $this->billRepository->findByName($value); + $bill = $this->billRepository->findByName($value); if (null !== $bill) { $this->collector->setBill($bill); + break; } $this->collector->findNothing(); + break; + case '-bill_is': - $bill = $this->billRepository->findByName($value); + $bill = $this->billRepository->findByName($value); if (null !== $bill) { $this->collector->excludeBills(new Collection([$bill])); + break; } $this->collector->findNothing(); + break; + case 'bill_ends': - $result = $this->billRepository->billEndsWith($value, 1337); + $result = $this->billRepository->billEndsWith($value, 1337); if ($result->count() > 0) { $this->collector->setBills($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case '-bill_ends': - $result = $this->billRepository->billEndsWith($value, 1337); + $result = $this->billRepository->billEndsWith($value, 1337); if ($result->count() > 0) { $this->collector->excludeBills($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case 'bill_starts': - $result = $this->billRepository->billStartsWith($value, 1337); + $result = $this->billRepository->billStartsWith($value, 1337); if ($result->count() > 0) { $this->collector->setBills($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + case '-bill_starts': - $result = $this->billRepository->billStartsWith($value, 1337); + $result = $this->billRepository->billStartsWith($value, 1337); if ($result->count() > 0) { $this->collector->excludeBills($result); } if (0 === $result->count()) { $this->collector->findNothing(); } + break; + // // tags // case '-has_any_tag': case 'has_no_tag': $this->collector->withoutTags(); + break; + case '-has_no_tag': case 'has_any_tag': $this->collector->hasAnyTag(); + break; + case '-tag_is_not': case 'tag_is': - $result = $this->tagRepository->findByTag($value); + $result = $this->tagRepository->findByTag($value); if (null !== $result) { - $this->collector->setTags(new Collection([$result])); + $this->includeTags[] = $result->id; + $this->includeTags = array_unique($this->includeTags); } // no tags found means search must result in nothing. if (null === $result) { - Log::info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); $this->collector->findNothing(); } + break; + + case 'tag_contains': + $tags = $this->tagRepository->searchTag($value); + if (0 === $tags->count()) { + app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + $this->collector->findNothing(); + } + if ($tags->count() > 0) { + $ids = array_values($tags->pluck('id')->toArray()); + $this->includeTags = array_unique(array_merge($this->includeTags, $ids)); + } + + break; + + case 'tag_starts': + $tags = $this->tagRepository->tagStartsWith($value); + if (0 === $tags->count()) { + app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + $this->collector->findNothing(); + } + if ($tags->count() > 0) { + $ids = array_values($tags->pluck('id')->toArray()); + $this->includeTags = array_unique(array_merge($this->includeTags, $ids)); + } + + break; + + case '-tag_starts': + $tags = $this->tagRepository->tagStartsWith($value); + if (0 === $tags->count()) { + app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + $this->collector->findNothing(); + } + if ($tags->count() > 0) { + $ids = array_values($tags->pluck('id')->toArray()); + $this->excludeTags = array_unique(array_merge($this->includeTags, $ids)); + } + + break; + + case 'tag_ends': + $tags = $this->tagRepository->tagEndsWith($value); + if (0 === $tags->count()) { + app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + $this->collector->findNothing(); + } + if ($tags->count() > 0) { + $ids = array_values($tags->pluck('id')->toArray()); + $this->includeTags = array_unique(array_merge($this->includeTags, $ids)); + } + + break; + + case '-tag_ends': + $tags = $this->tagRepository->tagEndsWith($value); + if (0 === $tags->count()) { + app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + $this->collector->findNothing(); + } + if ($tags->count() > 0) { + $ids = array_values($tags->pluck('id')->toArray()); + $this->excludeTags = array_unique(array_merge($this->includeTags, $ids)); + } + + break; + + case '-tag_contains': + $tags = $this->tagRepository->searchTag($value)->keyBy('id'); + + if (0 === $tags->count()) { + app('log')->info(sprintf('No valid tags in "%s"-operator, so search will not return ANY results.', $operator)); + $this->collector->findNothing(); + } + if ($tags->count() > 0) { + $ids = array_values($tags->pluck('id')->toArray()); + $this->excludeTags = array_unique(array_merge($this->excludeTags, $ids)); + } + + break; + case '-tag_is': case 'tag_is_not': - $result = $this->tagRepository->searchTag($value); - if ($result->count() > 0) { - $this->collector->setWithoutSpecificTags($result); + $result = $this->tagRepository->findByTag($value); + if (null !== $result) { + $this->excludeTags[] = $result->id; + $this->excludeTags = array_unique($this->excludeTags); } + break; + // // notes // case 'notes_contains': $this->collector->notesContain($value); + break; + case '-notes_contains': $this->collector->notesDoNotContain($value); + break; + case 'notes_starts': $this->collector->notesStartWith($value); + break; + case '-notes_starts': $this->collector->notesDontStartWith($value); + break; + case 'notes_ends': $this->collector->notesEndWith($value); + break; + case '-notes_ends': $this->collector->notesDontEndWith($value); + break; + case 'notes_is': $this->collector->notesExactly($value); + break; + case '-notes_is': $this->collector->notesExactlyNot($value); + break; + case '-any_notes': case 'no_notes': $this->collector->withoutNotes(); + break; + case 'any_notes': case '-no_notes': $this->collector->withAnyNotes(); + break; + case 'reconciled': $this->collector->isReconciled(); + break; + case '-reconciled': $this->collector->isNotReconciled(); + break; + // // amount // case 'amount_is': // strip comma's, make dots. - Log::debug(sprintf('Original value "%s"', $value)); - $value = str_replace(',', '.', (string)$value); - $amount = app('steam')->positive($value); - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + app('log')->debug(sprintf('Original value "%s"', $value)); + $value = str_replace(',', '.', $value); + $amount = app('steam')->positive($value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->amountIs($amount); + break; + case '-amount_is': // strip comma's, make dots. - Log::debug(sprintf('Original value "%s"', $value)); - $value = str_replace(',', '.', (string)$value); - $amount = app('steam')->positive($value); - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + app('log')->debug(sprintf('Original value "%s"', $value)); + $value = str_replace(',', '.', $value); + $amount = app('steam')->positive($value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->amountIsNot($amount); + break; + case 'foreign_amount_is': - // strip comma's, make dots. - $value = str_replace(',', '.', (string)$value); + $value = str_replace(',', '.', $value); - $amount = app('steam')->positive($value); - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + $amount = app('steam')->positive($value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->foreignAmountIs($amount); + break; + case '-foreign_amount_is': - // strip comma's, make dots. - $value = str_replace(',', '.', (string)$value); + $value = str_replace(',', '.', $value); - $amount = app('steam')->positive($value); - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + $amount = app('steam')->positive($value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->foreignAmountIsNot($amount); + break; + case '-amount_more': case 'amount_less': // strip comma's, make dots. - $value = str_replace(',', '.', (string)$value); + $value = str_replace(',', '.', $value); - $amount = app('steam')->positive($value); - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + $amount = app('steam')->positive($value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->amountLess($amount); + break; + case '-foreign_amount_more': case 'foreign_amount_less': // strip comma's, make dots. - $value = str_replace(',', '.', (string)$value); + $value = str_replace(',', '.', $value); - $amount = app('steam')->positive($value); - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + $amount = app('steam')->positive($value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->foreignAmountLess($amount); + break; + case '-amount_less': case 'amount_more': - Log::debug(sprintf('Now handling operator "%s"', $operator)); + app('log')->debug(sprintf('Now handling operator "%s"', $operator)); // strip comma's, make dots. - $value = str_replace(',', '.', (string)$value); - $amount = app('steam')->positive($value); - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + $value = str_replace(',', '.', $value); + $amount = app('steam')->positive($value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->amountMore($amount); + break; + case '-foreign_amount_less': case 'foreign_amount_more': - Log::debug(sprintf('Now handling operator "%s"', $operator)); + app('log')->debug(sprintf('Now handling operator "%s"', $operator)); // strip comma's, make dots. - $value = str_replace(',', '.', (string)$value); - $amount = app('steam')->positive($value); - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); + $value = str_replace(',', '.', $value); + $amount = app('steam')->positive($value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $amount)); $this->collector->foreignAmountMore($amount); + break; + // // transaction type // case 'transaction_type': $this->collector->setTypes([ucfirst($value)]); - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + break; + case '-transaction_type': $this->collector->excludeTypes([ucfirst($value)]); - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + break; + // // dates // case '-date_on': case 'date_on': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setExactDateParams($range, $prohibited); + return false; + case 'date_before': case '-date_after': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setDateBeforeParams($range); + return false; + case 'date_after': case '-date_before': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setDateAfterParams($range); + return false; case 'interest_date_on': case '-interest_date_on': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setExactMetaDateParams('interest_date', $range, $prohibited); + return false; + case 'interest_date_before': case '-interest_date_after': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateBeforeParams('interest_date', $range); + return false; + case 'interest_date_after': case '-interest_date_before': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateAfterParams('interest_date', $range); + return false; case 'book_date_on': case '-book_date_on': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setExactMetaDateParams('book_date', $range, $prohibited); + return false; + case 'book_date_before': case '-book_date_after': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateBeforeParams('book_date', $range); + return false; + case 'book_date_after': case '-book_date_before': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateAfterParams('book_date', $range); + return false; case 'process_date_on': case '-process_date_on': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setExactMetaDateParams('process_date', $range, $prohibited); + return false; + case 'process_date_before': case '-process_date_after': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateBeforeParams('process_date', $range); + return false; + case 'process_date_after': case '-process_date_before': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateAfterParams('process_date', $range); + return false; case 'due_date_on': case '-due_date_on': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setExactMetaDateParams('due_date', $range, $prohibited); + return false; + case 'due_date_before': case '-due_date_after': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateBeforeParams('due_date', $range); + return false; + case 'due_date_after': case '-due_date_before': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateAfterParams('due_date', $range); + return false; case 'payment_date_on': case '-payment_date_on': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setExactMetaDateParams('payment_date', $range, $prohibited); + return false; + case 'payment_date_before': case '-payment_date_after': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateBeforeParams('payment_date', $range); + return false; + case 'payment_date_after': case '-payment_date_before': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateAfterParams('payment_date', $range); + return false; case 'invoice_date_on': case '-invoice_date_on': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setExactMetaDateParams('invoice_date', $range, $prohibited); + return false; + case 'invoice_date_before': case '-invoice_date_after': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateBeforeParams('invoice_date', $range); + return false; + case 'invoice_date_after': case '-invoice_date_before': - $range = $this->parseDateRange($operator, $value); + $range = $this->parseDateRange($operator, $value); $this->setMetaDateAfterParams('invoice_date', $range); + return false; case 'created_at_on': case '-created_at_on': - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); - $range = $this->parseDateRange($operator, $value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + $range = $this->parseDateRange($operator, $value); $this->setExactObjectDateParams('created_at', $range, $prohibited); + return false; + case 'created_at_before': case '-created_at_after': - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); - $range = $this->parseDateRange($operator, $value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + $range = $this->parseDateRange($operator, $value); $this->setObjectDateBeforeParams('created_at', $range); + return false; + case 'created_at_after': case '-created_at_before': - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); - $range = $this->parseDateRange($operator, $value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + $range = $this->parseDateRange($operator, $value); $this->setObjectDateAfterParams('created_at', $range); + return false; case 'updated_at_on': case '-updated_at_on': - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); - $range = $this->parseDateRange($operator, $value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + $range = $this->parseDateRange($operator, $value); $this->setExactObjectDateParams('updated_at', $range, $prohibited); + return false; + case 'updated_at_before': case '-updated_at_after': - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); - $range = $this->parseDateRange($operator, $value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + $range = $this->parseDateRange($operator, $value); $this->setObjectDateBeforeParams('updated_at', $range); + return false; + case 'updated_at_after': case '-updated_at_before': - Log::debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); - $range = $this->parseDateRange($operator, $value); + app('log')->debug(sprintf('Set "%s" using collector with value "%s"', $operator, $value)); + $range = $this->parseDateRange($operator, $value); $this->setObjectDateAfterParams('updated_at', $range); + return false; + // // external URL // case '-any_external_url': case 'no_external_url': $this->collector->withoutExternalUrl(); + break; + case '-no_external_url': case 'any_external_url': $this->collector->withExternalUrl(); + break; + case '-any_external_id': case 'no_external_id': $this->collector->withoutExternalId(); + break; + case '-no_external_id': case 'any_external_id': $this->collector->withExternalId(); + break; case 'external_url_is': $this->collector->setExternalUrl($value); + break; + case '-external_url_is': $this->collector->excludeExternalUrl($value); + break; + case 'external_url_contains': $this->collector->externalUrlContains($value); + break; + case '-external_url_contains': $this->collector->externalUrlDoesNotContain($value); + break; + case 'external_url_starts': $this->collector->externalUrlStarts($value); + break; + case '-external_url_starts': $this->collector->externalUrlDoesNotStart($value); + break; + case 'external_url_ends': $this->collector->externalUrlEnds($value); + break; + case '-external_url_ends': $this->collector->externalUrlDoesNotEnd($value); + break; // @@ -1201,126 +1631,194 @@ class OperatorQuerySearch implements SearchInterface // case 'external_id_is': $this->collector->setExternalId($value); + break; + case '-external_id_is': $this->collector->excludeExternalId($value); + break; + case 'recurrence_id': $this->collector->setRecurrenceId($value); + break; + case '-recurrence_id': $this->collector->excludeRecurrenceId($value); + break; + case 'external_id_contains': $this->collector->externalIdContains($value); + break; + case '-external_id_contains': $this->collector->externalIdDoesNotContain($value); + break; + case 'external_id_starts': $this->collector->externalIdStarts($value); + break; + case '-external_id_starts': $this->collector->externalIdDoesNotStart($value); + break; + case 'external_id_ends': $this->collector->externalIdEnds($value); + break; + case '-external_id_ends': $this->collector->externalIdDoesNotEnd($value); + break; case 'internal_reference_is': $this->collector->setInternalReference($value); + break; + case '-internal_reference_is': $this->collector->excludeInternalReference($value); + break; + case 'internal_reference_contains': $this->collector->internalReferenceContains($value); + break; + case '-internal_reference_contains': $this->collector->internalReferenceDoesNotContain($value); + break; + case 'internal_reference_starts': $this->collector->internalReferenceStarts($value); + break; + case '-internal_reference_starts': $this->collector->internalReferenceDoesNotStart($value); + break; + case 'internal_reference_ends': $this->collector->internalReferenceEnds($value); + break; + case '-internal_reference_ends': $this->collector->internalReferenceDoesNotEnd($value); + break; case 'attachment_name_is': $this->collector->attachmentNameIs($value); + break; + case '-attachment_name_is': $this->collector->attachmentNameIsNot($value); + break; + case 'attachment_name_contains': $this->collector->attachmentNameContains($value); + break; + case '-attachment_name_contains': $this->collector->attachmentNameDoesNotContain($value); + break; + case 'attachment_name_starts': $this->collector->attachmentNameStarts($value); + break; + case '-attachment_name_starts': $this->collector->attachmentNameDoesNotStart($value); + break; + case 'attachment_name_ends': $this->collector->attachmentNameEnds($value); + break; + case '-attachment_name_ends': $this->collector->attachmentNameDoesNotEnd($value); + break; case 'attachment_notes_are': $this->collector->attachmentNotesAre($value); + break; + case '-attachment_notes_are': $this->collector->attachmentNotesAreNot($value); + break; + case 'attachment_notes_contains': $this->collector->attachmentNotesContains($value); + break; + case '-attachment_notes_contains': $this->collector->attachmentNotesDoNotContain($value); + break; + case 'attachment_notes_starts': $this->collector->attachmentNotesStarts($value); + break; + case '-attachment_notes_starts': $this->collector->attachmentNotesDoNotStart($value); + break; + case 'attachment_notes_ends': $this->collector->attachmentNotesEnds($value); + break; + case '-attachment_notes_ends': $this->collector->attachmentNotesDoNotEnd($value); + break; + case 'exists': $this->collector->exists(); + break; + case '-exists': $this->collector->findNothing(); + break; + case 'sepa_ct_is': $this->collector->setSepaCT($value); + break; } + return true; } /** - * @param string $operator - * - * @return string * @throws FireflyException */ public static function getRootOperator(string $operator): string @@ -1332,7 +1830,7 @@ class OperatorQuerySearch implements SearchInterface $operator = substr($operator, 1); } - $config = config(sprintf('search.operators.%s', $operator)); + $config = config(sprintf('search.operators.%s', $operator)); if (null === $config) { throw new FireflyException(sprintf('No configuration for search operator "%s"', $operator)); } @@ -1341,11 +1839,11 @@ class OperatorQuerySearch implements SearchInterface if (str_starts_with($original, '-')) { $return = sprintf('-%s', $config['alias_for']); } - Log::debug(sprintf('"%s" is an alias for "%s", so return that instead.', $original, $return)); + app('log')->debug(sprintf('"%s" is an alias for "%s", so return that instead.', $original, $return)); return $return; } - Log::debug(sprintf('"%s" is not an alias.', $operator)); + app('log')->debug(sprintf('"%s" is not an alias.', $operator)); return $original; } @@ -1354,14 +1852,12 @@ class OperatorQuerySearch implements SearchInterface * searchDirection: 1 = source (default), 2 = destination, 3 = both * stringPosition: 1 = start (default), 2 = end, 3 = contains, 4 = is * - * @param string $value - * @param int $searchDirection - * @param int $stringPosition - * @param bool $prohibited + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) + * @SuppressWarnings(PHPMD.NPathComplexity) */ - private function searchAccount(string $value, int $searchDirection, int $stringPosition, bool $prohibited = false): void + private function searchAccount(string $value, SearchDirection $searchDirection, StringPosition $stringPosition, bool $prohibited = false): void { - Log::debug(sprintf('searchAccount("%s", %d, %d)', $value, $stringPosition, $searchDirection)); + app('log')->debug(sprintf('searchAccount("%s", %s, %s)', $value, $stringPosition->name, $searchDirection->name)); // search direction (default): for source accounts $searchTypes = [AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT, AccountType::REVENUE]; @@ -1371,7 +1867,7 @@ class OperatorQuerySearch implements SearchInterface } // search direction: for destination accounts - if (2 === $searchDirection) { + if (SearchDirection::DESTINATION === $searchDirection) { // destination // destination can be $searchTypes = [AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT, AccountType::EXPENSE]; $collectorMethod = 'setDestinationAccounts'; @@ -1380,7 +1876,7 @@ class OperatorQuerySearch implements SearchInterface } } // either account could be: - if (3 === $searchDirection) { + if (SearchDirection::BOTH === $searchDirection) { $searchTypes = [AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT, AccountType::EXPENSE, AccountType::REVENUE]; $collectorMethod = 'setAccounts'; if ($prohibited) { @@ -1388,56 +1884,60 @@ class OperatorQuerySearch implements SearchInterface } } // string position (default): starts with: - $stringMethod = 'str_starts_with'; + $stringMethod = 'str_starts_with'; // string position: ends with: - if (2 === $stringPosition) { + if (StringPosition::ENDS === $stringPosition) { $stringMethod = 'str_ends_with'; } - if (3 === $stringPosition) { + if (StringPosition::CONTAINS === $stringPosition) { $stringMethod = 'str_contains'; } - if (4 === $stringPosition) { + if (StringPosition::IS === $stringPosition) { $stringMethod = 'stringIsEqual'; } // get accounts: - $accounts = $this->accountRepository->searchAccount($value, $searchTypes, 1337); - if (0 === $accounts->count()) { - Log::debug('Found zero accounts, search for non existing account, NO results will be returned.'); + $accounts = $this->accountRepository->searchAccount($value, $searchTypes, 1337); + if (0 === $accounts->count() && false === $prohibited) { + app('log')->debug('Found zero accounts, search for non existing account, NO results will be returned.'); $this->collector->findNothing(); return; } - Log::debug(sprintf('Found %d accounts, will filter.', $accounts->count())); - $filtered = $accounts->filter( - function (Account $account) use ($value, $stringMethod) { + if (0 === $accounts->count() && true === $prohibited) { + app('log')->debug('Found zero accounts, but the search is negated, so effectively we ignore the search parameter.'); + + return; + } + app('log')->debug(sprintf('Found %d accounts, will filter.', $accounts->count())); + $filtered = $accounts->filter( + static function (Account $account) use ($value, $stringMethod) { return $stringMethod(strtolower($account->name), strtolower($value)); } ); if (0 === $filtered->count()) { - Log::debug('Left with zero accounts, so cannot find anything, NO results will be returned.'); + app('log')->debug('Left with zero accounts, so cannot find anything, NO results will be returned.'); $this->collector->findNothing(); return; } - Log::debug(sprintf('Left with %d, set as %s().', $filtered->count(), $collectorMethod)); - $this->collector->$collectorMethod($filtered); + app('log')->debug(sprintf('Left with %d, set as %s().', $filtered->count(), $collectorMethod)); + $this->collector->{$collectorMethod}($filtered); // @phpstan-ignore-line } /** + * TODO make enums * searchDirection: 1 = source (default), 2 = destination, 3 = both * stringPosition: 1 = start (default), 2 = end, 3 = contains, 4 = is * - * @param string $value - * @param int $searchDirection - * @param int $stringPosition - * @param bool $prohibited + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) + * @SuppressWarnings(PHPMD.NPathComplexity) */ - private function searchAccountNr(string $value, int $searchDirection, int $stringPosition, bool $prohibited = false): void + private function searchAccountNr(string $value, SearchDirection $searchDirection, StringPosition $stringPosition, bool $prohibited = false): void { - Log::debug(sprintf('searchAccountNr(%s, %d, %d)', $value, $searchDirection, $stringPosition)); + app('log')->debug(sprintf('searchAccountNr(%s, %d, %d)', $value, $searchDirection->name, $stringPosition->name)); // search direction (default): for source accounts $searchTypes = [AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT, AccountType::REVENUE]; @@ -1447,7 +1947,7 @@ class OperatorQuerySearch implements SearchInterface } // search direction: for destination accounts - if (2 === $searchDirection) { + if (SearchDirection::DESTINATION === $searchDirection) { // destination can be $searchTypes = [AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT, AccountType::EXPENSE]; $collectorMethod = 'setDestinationAccounts'; @@ -1457,7 +1957,7 @@ class OperatorQuerySearch implements SearchInterface } // either account could be: - if (3 === $searchDirection) { + if (SearchDirection::BOTH === $searchDirection) { $searchTypes = [AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT, AccountType::EXPENSE, AccountType::REVENUE]; $collectorMethod = 'setAccounts'; if (true === $prohibited) { @@ -1466,35 +1966,36 @@ class OperatorQuerySearch implements SearchInterface } // string position (default): starts with: - $stringMethod = 'str_starts_with'; + $stringMethod = 'str_starts_with'; // string position: ends with: - if (2 === $stringPosition) { + if (StringPosition::ENDS === $stringPosition) { $stringMethod = 'str_ends_with'; } - if (3 === $stringPosition) { + if (StringPosition::CONTAINS === $stringPosition) { $stringMethod = 'str_contains'; } - if (4 === $stringPosition) { + if (StringPosition::IS === $stringPosition) { $stringMethod = 'stringIsEqual'; } // search for accounts: - $accounts = $this->accountRepository->searchAccountNr($value, $searchTypes, 1337); + $accounts = $this->accountRepository->searchAccountNr($value, $searchTypes, 1337); if (0 === $accounts->count()) { - Log::debug('Found zero accounts, search for invalid account.'); + app('log')->debug('Found zero accounts, search for invalid account.'); $this->collector->findNothing(); return; } // if found, do filter - Log::debug(sprintf('Found %d accounts, will filter.', $accounts->count())); - $filtered = $accounts->filter( - function (Account $account) use ($value, $stringMethod) { + app('log')->debug(sprintf('Found %d accounts, will filter.', $accounts->count())); + $filtered = $accounts->filter( + static function (Account $account) use ($value, $stringMethod) { // either IBAN or account number - $ibanMatch = $stringMethod(strtolower((string)$account->iban), strtolower((string)$value)); + $ibanMatch = $stringMethod(strtolower((string)$account->iban), strtolower($value)); $accountNrMatch = false; + /** @var AccountMeta $meta */ foreach ($account->accountMeta as $meta) { if ('account_number' === $meta->name && $stringMethod(strtolower($meta->data), strtolower($value))) { @@ -1507,28 +2008,20 @@ class OperatorQuerySearch implements SearchInterface ); if (0 === $filtered->count()) { - Log::debug('Left with zero, search for invalid account'); + app('log')->debug('Left with zero, search for invalid account'); $this->collector->findNothing(); return; } - Log::debug(sprintf('Left with %d, set as %s().', $filtered->count(), $collectorMethod)); - $this->collector->$collectorMethod($filtered); + app('log')->debug(sprintf('Left with %d, set as %s().', $filtered->count(), $collectorMethod)); + $this->collector->{$collectorMethod}($filtered); // @phpstan-ignore-line } - /** - * @return Account - */ private function getCashAccount(): Account { return $this->accountRepository->getCashAccount(); } - /** - * @param string $value - * - * @return TransactionCurrency|null - */ private function findCurrency(string $value): ?TransactionCurrency { if (str_contains($value, '(') && str_contains($value, ')')) { @@ -1536,18 +2029,15 @@ class OperatorQuerySearch implements SearchInterface $parts = explode(' ', $value); $value = trim($parts[count($parts) - 1], "() \t\n\r\0\x0B"); } - $result = $this->currencyRepository->findByCodeNull($value); + $result = $this->currencyRepository->findByCode($value); if (null === $result) { - $result = $this->currencyRepository->findByNameNull($value); + $result = $this->currencyRepository->findByName($value); } return $result; } /** - * @param string $value - * - * @return array * @throws FireflyException */ private function parseDateRange(string $type, string $value): array @@ -1556,14 +2046,16 @@ class OperatorQuerySearch implements SearchInterface if ($parser->isDateRange($value)) { return $parser->parseRange($value); } + try { $parsedDate = $parser->parseDate($value); } catch (FireflyException $e) { - Log::debug(sprintf('Could not parse date "%s", will return empty array.', $value)); + app('log')->debug(sprintf('Could not parse date "%s", will return empty array.', $value)); $this->invalidOperators[] = [ 'type' => $type, - 'value' => (string)$value, + 'value' => $value, ]; + return []; } @@ -1573,8 +2065,9 @@ class OperatorQuerySearch implements SearchInterface } /** - * * @throws FireflyException + * + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) */ private function setExactDateParams(array $range, bool $prohibited = false): void { @@ -1584,55 +2077,89 @@ class OperatorQuerySearch implements SearchInterface */ foreach ($range as $key => $value) { $key = $prohibited ? sprintf('%s_not', $key) : $key; + 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_on', 'value' => $value->format('Y-m-d'),]); + if ($value instanceof Carbon) { + app('log')->debug(sprintf('Set date_is_exact value "%s"', $value->format('Y-m-d'))); + $this->collector->setRange($value, $value); + $this->operators->push(['type' => 'date_on', 'value' => $value->format('Y-m-d')]); + } + break; + case 'exact_not': - $this->collector->excludeRange($value, $value); - $this->operators->push(['type' => 'not_date_on', 'value' => $value->format('Y-m-d'),]); + if ($value instanceof Carbon) { + $this->collector->excludeRange($value, $value); + $this->operators->push(['type' => 'not_date_on', '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_on_year', 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_exact YEAR value "%s"', $value)); + $this->collector->yearIs($value); + $this->operators->push(['type' => 'date_on_year', 'value' => $value]); + } + break; + case 'year_not': - Log::debug(sprintf('Set date_is_exact_not YEAR value "%s"', $value)); - $this->collector->yearIsNot($value); - $this->operators->push(['type' => 'not_date_on_year', 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_exact_not YEAR value "%s"', $value)); + $this->collector->yearIsNot($value); + $this->operators->push(['type' => 'not_date_on_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_on_month', 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_exact MONTH value "%s"', $value)); + $this->collector->monthIs($value); + $this->operators->push(['type' => 'date_on_month', 'value' => $value]); + } + break; + case 'month_not': - Log::debug(sprintf('Set date_is_exact not MONTH value "%s"', $value)); - $this->collector->monthIsNot($value); - $this->operators->push(['type' => 'not_date_on_month', 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_exact not MONTH value "%s"', $value)); + $this->collector->monthIsNot($value); + $this->operators->push(['type' => 'not_date_on_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_on_day', 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_exact DAY value "%s"', $value)); + $this->collector->dayIs($value); + $this->operators->push(['type' => 'date_on_day', 'value' => $value]); + } + break; + case 'day_not': - Log::debug(sprintf('Set not date_is_exact DAY value "%s"', $value)); - $this->collector->dayIsNot($value); - $this->operators->push(['type' => 'not_date_on_day', 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set not date_is_exact DAY value "%s"', $value)); + $this->collector->dayIsNot($value); + $this->operators->push(['type' => 'not_date_on_day', 'value' => $value]); + } + break; } } } /** - * * @throws FireflyException + * + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) */ private function setDateBeforeParams(array $range, bool $prohibited = false): void { @@ -1642,37 +2169,55 @@ class OperatorQuerySearch implements SearchInterface */ foreach ($range as $key => $value) { $key = $prohibited ? sprintf('%s_not', $key) : $key; + 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'),]); + if ($value instanceof Carbon) { + $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,]); + if (is_string($value)) { + app('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,]); + if (is_string($value)) { + app('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,]); + if (is_string($value)) { + app('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; } } } /** - * * @throws FireflyException + * + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) */ - private function setDateAfterParams(array $range, bool $prohibited = false) + private function setDateAfterParams(array $range, bool $prohibited = false): void { /** * @var string $key @@ -1680,27 +2225,44 @@ class OperatorQuerySearch implements SearchInterface */ foreach ($range as $key => $value) { $key = $prohibited ? sprintf('%s_not', $key) : $key; + 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'),]); + if ($value instanceof Carbon) { + $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,]); + if (is_string($value)) { + app('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,]); + if (is_string($value)) { + app('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,]); + if (is_string($value)) { + app('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; } } @@ -1708,58 +2270,94 @@ class OperatorQuerySearch implements SearchInterface /** * @throws FireflyException + * + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) */ private function setExactMetaDateParams(string $field, array $range, bool $prohibited = false): void { - Log::debug('Now in setExactMetaDateParams()'); + app('log')->debug('Now in setExactMetaDateParams()'); + /** * @var string $key * @var Carbon|string $value */ foreach ($range as $key => $value) { $key = $prohibited ? sprintf('%s_not', $key) : $key; + switch ($key) { default: throw new FireflyException(sprintf('Cannot handle key "%s" in setExactMetaDateParams()', $key)); + case 'exact': - Log::debug(sprintf('Set %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); - $this->collector->setMetaDateRange($value, $value, $field); - $this->operators->push(['type' => sprintf('%s_on', $field), 'value' => $value->format('Y-m-d'),]); + if ($value instanceof Carbon) { + app('log')->debug(sprintf('Set %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); + $this->collector->setMetaDateRange($value, $value, $field); + $this->operators->push(['type' => sprintf('%s_on', $field), 'value' => $value->format('Y-m-d')]); + } + break; + case 'exact_not': - Log::debug(sprintf('Set NOT %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); - $this->collector->excludeMetaDateRange($value, $value, $field); - $this->operators->push(['type' => sprintf('not_%s_on', $field), 'value' => $value->format('Y-m-d'),]); + if ($value instanceof Carbon) { + app('log')->debug(sprintf('Set NOT %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); + $this->collector->excludeMetaDateRange($value, $value, $field); + $this->operators->push(['type' => sprintf('not_%s_on', $field), 'value' => $value->format('Y-m-d')]); + } + break; + case 'year': - Log::debug(sprintf('Set %s_is_exact YEAR value "%s"', $field, $value)); - $this->collector->metaYearIs($value, $field); - $this->operators->push(['type' => sprintf('%s_on_year', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_exact YEAR value "%s"', $field, $value)); + $this->collector->metaYearIs($value, $field); + $this->operators->push(['type' => sprintf('%s_on_year', $field), 'value' => $value]); + } + break; + case 'year_not': - Log::debug(sprintf('Set NOT %s_is_exact YEAR value "%s"', $field, $value)); - $this->collector->metaYearIsNot($value, $field); - $this->operators->push(['type' => sprintf('not_%s_on_year', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set NOT %s_is_exact YEAR value "%s"', $field, $value)); + $this->collector->metaYearIsNot($value, $field); + $this->operators->push(['type' => sprintf('not_%s_on_year', $field), 'value' => $value]); + } + break; + case 'month': - Log::debug(sprintf('Set %s_is_exact MONTH value "%s"', $field, $value)); - $this->collector->metaMonthIs($value, $field); - $this->operators->push(['type' => sprintf('%s_on_month', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_exact MONTH value "%s"', $field, $value)); + $this->collector->metaMonthIs($value, $field); + $this->operators->push(['type' => sprintf('%s_on_month', $field), 'value' => $value]); + } + break; + case 'month_not': - Log::debug(sprintf('Set NOT %s_is_exact MONTH value "%s"', $field, $value)); - $this->collector->metaMonthIsNot($value, $field); - $this->operators->push(['type' => sprintf('not_%s_on_month', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set NOT %s_is_exact MONTH value "%s"', $field, $value)); + $this->collector->metaMonthIsNot($value, $field); + $this->operators->push(['type' => sprintf('not_%s_on_month', $field), 'value' => $value]); + } + break; + case 'day': - Log::debug(sprintf('Set %s_is_exact DAY value "%s"', $field, $value)); - $this->collector->metaDayIs($value, $field); - $this->operators->push(['type' => sprintf('%s_on_day', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_exact DAY value "%s"', $field, $value)); + $this->collector->metaDayIs($value, $field); + $this->operators->push(['type' => sprintf('%s_on_day', $field), 'value' => $value]); + } + break; + case 'day_not': - Log::debug(sprintf('Set NOT %s_is_exact DAY value "%s"', $field, $value)); - $this->collector->metaDayIsNot($value, $field); - $this->operators->push(['type' => sprintf('not_%s_on_day', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set NOT %s_is_exact DAY value "%s"', $field, $value)); + $this->collector->metaDayIsNot($value, $field); + $this->operators->push(['type' => sprintf('not_%s_on_day', $field), 'value' => $value]); + } + break; } } @@ -1767,6 +2365,8 @@ class OperatorQuerySearch implements SearchInterface /** * @throws FireflyException + * + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) */ private function setMetaDateBeforeParams(string $field, array $range, bool $prohibited = false): void { @@ -1776,27 +2376,44 @@ class OperatorQuerySearch implements SearchInterface */ foreach ($range as $key => $value) { $key = $prohibited ? sprintf('%s_not', $key) : $key; + switch ($key) { default: throw new FireflyException(sprintf('Cannot handle key "%s" in setMetaDateBeforeParams()', $key)); + case 'exact': - $this->collector->setMetaBefore($value, $field); - $this->operators->push(['type' => sprintf('%s_before', $field), 'value' => $value->format('Y-m-d'),]); + if ($value instanceof Carbon) { + $this->collector->setMetaBefore($value, $field); + $this->operators->push(['type' => sprintf('%s_before', $field), 'value' => $value->format('Y-m-d')]); + } + break; + case 'year': - Log::debug(sprintf('Set %s_is_before YEAR value "%s"', $field, $value)); - $this->collector->metaYearBefore($value, $field); - $this->operators->push(['type' => sprintf('%s_before_year', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_before YEAR value "%s"', $field, $value)); + $this->collector->metaYearBefore($value, $field); + $this->operators->push(['type' => sprintf('%s_before_year', $field), 'value' => $value]); + } + break; + case 'month': - Log::debug(sprintf('Set %s_is_before MONTH value "%s"', $field, $value)); - $this->collector->metaMonthBefore($value, $field); - $this->operators->push(['type' => sprintf('%s_before_month', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_before MONTH value "%s"', $field, $value)); + $this->collector->metaMonthBefore($value, $field); + $this->operators->push(['type' => sprintf('%s_before_month', $field), 'value' => $value]); + } + break; + case 'day': - Log::debug(sprintf('Set %s_is_before DAY value "%s"', $field, $value)); - $this->collector->metaDayBefore($value, $field); - $this->operators->push(['type' => sprintf('%s_before_day', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_before DAY value "%s"', $field, $value)); + $this->collector->metaDayBefore($value, $field); + $this->operators->push(['type' => sprintf('%s_before_day', $field), 'value' => $value]); + } + break; } } @@ -1804,6 +2421,8 @@ class OperatorQuerySearch implements SearchInterface /** * @throws FireflyException + * + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) */ private function setMetaDateAfterParams(string $field, array $range, bool $prohibited = false): void { @@ -1813,27 +2432,44 @@ class OperatorQuerySearch implements SearchInterface */ foreach ($range as $key => $value) { $key = $prohibited ? sprintf('%s_not', $key) : $key; + switch ($key) { default: throw new FireflyException(sprintf('Cannot handle key "%s" in setMetaDateAfterParams()', $key)); + case 'exact': - $this->collector->setMetaAfter($value, $field); - $this->operators->push(['type' => sprintf('%s_after', $field), 'value' => $value->format('Y-m-d'),]); + if ($value instanceof Carbon) { + $this->collector->setMetaAfter($value, $field); + $this->operators->push(['type' => sprintf('%s_after', $field), 'value' => $value->format('Y-m-d')]); + } + break; + case 'year': - Log::debug(sprintf('Set %s_is_after YEAR value "%s"', $field, $value)); - $this->collector->metaYearAfter($value, $field); - $this->operators->push(['type' => sprintf('%s_after_year', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_after YEAR value "%s"', $field, $value)); + $this->collector->metaYearAfter($value, $field); + $this->operators->push(['type' => sprintf('%s_after_year', $field), 'value' => $value]); + } + break; + case 'month': - Log::debug(sprintf('Set %s_is_after MONTH value "%s"', $field, $value)); - $this->collector->metaMonthAfter($value, $field); - $this->operators->push(['type' => sprintf('%s_after_month', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_after MONTH value "%s"', $field, $value)); + $this->collector->metaMonthAfter($value, $field); + $this->operators->push(['type' => sprintf('%s_after_month', $field), 'value' => $value]); + } + break; + case 'day': - Log::debug(sprintf('Set %s_is_after DAY value "%s"', $field, $value)); - $this->collector->metaDayAfter($value, $field); - $this->operators->push(['type' => sprintf('%s_after_day', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_after DAY value "%s"', $field, $value)); + $this->collector->metaDayAfter($value, $field); + $this->operators->push(['type' => sprintf('%s_after_day', $field), 'value' => $value]); + } + break; } } @@ -1841,6 +2477,8 @@ class OperatorQuerySearch implements SearchInterface /** * @throws FireflyException + * + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) */ private function setExactObjectDateParams(string $field, array $range, bool $prohibited = false): void { @@ -1850,56 +2488,90 @@ class OperatorQuerySearch implements SearchInterface */ foreach ($range as $key => $value) { $key = $prohibited ? sprintf('%s_not', $key) : $key; + switch ($key) { default: throw new FireflyException(sprintf('Cannot handle key "%s" in setExactObjectDateParams()', $key)); + case 'exact': - Log::debug(sprintf('Set %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); - $this->collector->setObjectRange($value, clone $value, $field); - $this->operators->push(['type' => sprintf('%s_on', $field), 'value' => $value->format('Y-m-d'),]); + if ($value instanceof Carbon) { + app('log')->debug(sprintf('Set %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); + $this->collector->setObjectRange($value, clone $value, $field); + $this->operators->push(['type' => sprintf('%s_on', $field), 'value' => $value->format('Y-m-d')]); + } + break; + case 'exact_not': - Log::debug(sprintf('Set NOT %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); - $this->collector->excludeObjectRange($value, clone $value, $field); - $this->operators->push(['type' => sprintf('not_%s_on', $field), 'value' => $value->format('Y-m-d'),]); + if ($value instanceof Carbon) { + app('log')->debug(sprintf('Set NOT %s_is_exact value "%s"', $field, $value->format('Y-m-d'))); + $this->collector->excludeObjectRange($value, clone $value, $field); + $this->operators->push(['type' => sprintf('not_%s_on', $field), 'value' => $value->format('Y-m-d')]); + } + break; + case 'year': - Log::debug(sprintf('Set %s_is_exact YEAR value "%s"', $field, $value)); - $this->collector->objectYearIs($value, $field); - $this->operators->push(['type' => sprintf('%s_on_year', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_exact YEAR value "%s"', $field, $value)); + $this->collector->objectYearIs($value, $field); + $this->operators->push(['type' => sprintf('%s_on_year', $field), 'value' => $value]); + } + break; + case 'year_not': - Log::debug(sprintf('Set NOT %s_is_exact YEAR value "%s"', $field, $value)); - $this->collector->objectYearIsNot($value, $field); - $this->operators->push(['type' => sprintf('not_%s_on_year', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set NOT %s_is_exact YEAR value "%s"', $field, $value)); + $this->collector->objectYearIsNot($value, $field); + $this->operators->push(['type' => sprintf('not_%s_on_year', $field), 'value' => $value]); + } + break; + case 'month': - Log::debug(sprintf('Set %s_is_exact MONTH value "%s"', $field, $value)); - $this->collector->objectMonthIs($value, $field); - $this->operators->push(['type' => sprintf('%s_on_month', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_exact MONTH value "%s"', $field, $value)); + $this->collector->objectMonthIs($value, $field); + $this->operators->push(['type' => sprintf('%s_on_month', $field), 'value' => $value]); + } + break; + case 'month_not': - Log::debug(sprintf('Set NOT %s_is_exact MONTH value "%s"', $field, $value)); - $this->collector->objectMonthIsNot($value, $field); - $this->operators->push(['type' => sprintf('not_%s_on_month', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set NOT %s_is_exact MONTH value "%s"', $field, $value)); + $this->collector->objectMonthIsNot($value, $field); + $this->operators->push(['type' => sprintf('not_%s_on_month', $field), 'value' => $value]); + } + break; + case 'day': - Log::debug(sprintf('Set %s_is_exact DAY value "%s"', $field, $value)); - $this->collector->objectDayIs($value, $field); - $this->operators->push(['type' => sprintf('%s_on_day', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set %s_is_exact DAY value "%s"', $field, $value)); + $this->collector->objectDayIs($value, $field); + $this->operators->push(['type' => sprintf('%s_on_day', $field), 'value' => $value]); + } + break; + case 'day_not': - Log::debug(sprintf('Set NOT %s_is_exact DAY value "%s"', $field, $value)); - $this->collector->objectDayIsNot($value, $field); - $this->operators->push(['type' => sprintf('not_%s_on_day', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set NOT %s_is_exact DAY value "%s"', $field, $value)); + $this->collector->objectDayIsNot($value, $field); + $this->operators->push(['type' => sprintf('not_%s_on_day', $field), 'value' => $value]); + } + break; } } } /** - * * @throws FireflyException + * + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) */ private function setObjectDateBeforeParams(string $field, array $range, bool $prohibited = false): void { @@ -1909,35 +2581,53 @@ class OperatorQuerySearch implements SearchInterface */ foreach ($range as $key => $value) { $key = $prohibited ? sprintf('%s_not', $key) : $key; + switch ($key) { default: throw new FireflyException(sprintf('Cannot handle key "%s" in setObjectDateBeforeParams()', $key)); + case 'exact': - $this->collector->setObjectBefore($value, $field); - $this->operators->push(['type' => sprintf('%s_before', $field), 'value' => $value->format('Y-m-d'),]); + if ($value instanceof Carbon) { + $this->collector->setObjectBefore($value, $field); + $this->operators->push(['type' => sprintf('%s_before', $field), 'value' => $value->format('Y-m-d')]); + } + break; + case 'year': - Log::debug(sprintf('Set date_is_before YEAR value "%s"', $value)); - $this->collector->objectYearBefore($value, $field); - $this->operators->push(['type' => sprintf('%s_before_year', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_before YEAR value "%s"', $value)); + $this->collector->objectYearBefore($value, $field); + $this->operators->push(['type' => sprintf('%s_before_year', $field), 'value' => $value]); + } + break; + case 'month': - Log::debug(sprintf('Set date_is_before MONTH value "%s"', $value)); - $this->collector->objectMonthBefore($value, $field); - $this->operators->push(['type' => sprintf('%s_before_month', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_before MONTH value "%s"', $value)); + $this->collector->objectMonthBefore($value, $field); + $this->operators->push(['type' => sprintf('%s_before_month', $field), 'value' => $value]); + } + break; + case 'day': - Log::debug(sprintf('Set date_is_before DAY value "%s"', $value)); - $this->collector->objectDayBefore($value, $field); - $this->operators->push(['type' => sprintf('%s_before_day', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_before DAY value "%s"', $value)); + $this->collector->objectDayBefore($value, $field); + $this->operators->push(['type' => sprintf('%s_before_day', $field), 'value' => $value]); + } + break; } } } /** - * * @throws FireflyException + * + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) */ private function setObjectDateAfterParams(string $field, array $range, bool $prohibited = false): void { @@ -1947,45 +2637,57 @@ class OperatorQuerySearch implements SearchInterface */ foreach ($range as $key => $value) { $key = $prohibited ? sprintf('%s_not', $key) : $key; + switch ($key) { default: throw new FireflyException(sprintf('Cannot handle key "%s" in setObjectDateAfterParams()', $key)); + case 'exact': - $this->collector->setObjectAfter($value, $field); - $this->operators->push(['type' => sprintf('%s_after', $field), 'value' => $value->format('Y-m-d'),]); + if ($value instanceof Carbon) { + $this->collector->setObjectAfter($value, $field); + $this->operators->push(['type' => sprintf('%s_after', $field), 'value' => $value->format('Y-m-d')]); + } + break; + case 'year': - Log::debug(sprintf('Set date_is_after YEAR value "%s"', $value)); - $this->collector->objectYearAfter($value, $field); - $this->operators->push(['type' => sprintf('%s_after_year', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_after YEAR value "%s"', $value)); + $this->collector->objectYearAfter($value, $field); + $this->operators->push(['type' => sprintf('%s_after_year', $field), 'value' => $value]); + } + break; + case 'month': - Log::debug(sprintf('Set date_is_after MONTH value "%s"', $value)); - $this->collector->objectMonthAfter($value, $field); - $this->operators->push(['type' => sprintf('%s_after_month', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_after MONTH value "%s"', $value)); + $this->collector->objectMonthAfter($value, $field); + $this->operators->push(['type' => sprintf('%s_after_month', $field), 'value' => $value]); + } + break; + case 'day': - Log::debug(sprintf('Set date_is_after DAY value "%s"', $value)); - $this->collector->objectDayAfter($value, $field); - $this->operators->push(['type' => sprintf('%s_after_day', $field), 'value' => $value,]); + if (is_string($value)) { + app('log')->debug(sprintf('Set date_is_after DAY value "%s"', $value)); + $this->collector->objectDayAfter($value, $field); + $this->operators->push(['type' => sprintf('%s_after_day', $field), 'value' => $value]); + } + break; } } } - /** - * @inheritDoc - */ public function searchTime(): float { return microtime(true) - $this->startTime; } - /** - * @inheritDoc - */ public function searchTransactions(): LengthAwarePaginator { + $this->parseTagInstructions(); if (0 === count($this->getWords()) && 0 === count($this->getOperators())) { return new LengthAwarePaginator([], 0, 5, 1); } @@ -1993,34 +2695,54 @@ class OperatorQuerySearch implements SearchInterface return $this->collector->getPaginatedGroups(); } - /** - * @return array - */ + private function parseTagInstructions(): void + { + app('log')->debug('Now in parseTagInstructions()'); + // if exclude tags, remove excluded tags. + if (count($this->excludeTags) > 0) { + app('log')->debug(sprintf('%d exclude tag(s)', count($this->excludeTags))); + $collection = new Collection(); + foreach ($this->excludeTags as $tagId) { + $tag = $this->tagRepository->find($tagId); + if (null !== $tag) { + app('log')->debug(sprintf('Exclude tag "%s"', $tag->tag)); + $collection->push($tag); + } + } + app('log')->debug(sprintf('Selecting all tags except %d excluded tag(s).', $collection->count())); + $this->collector->setWithoutSpecificTags($collection); + } + // if include tags, include them: + if (count($this->includeTags) > 0) { + app('log')->debug(sprintf('%d include tag(s)', count($this->includeTags))); + $collection = new Collection(); + foreach ($this->includeTags as $tagId) { + $tag = $this->tagRepository->find($tagId); + if (null !== $tag) { + app('log')->debug(sprintf('Include tag "%s"', $tag->tag)); + $collection->push($tag); + } + } + $this->collector->setAllTags($collection); + } + } + public function getWords(): array { return $this->words; } - /** - * @param Carbon $date - */ public function setDate(Carbon $date): void { $this->date = $date; } - /** - * @inheritDoc - */ public function setPage(int $page): void { $this->page = $page; $this->collector->setPage($this->page); } - /** - * @inheritDoc - */ public function setUser(User $user): void { $this->accountRepository->setUser($user); @@ -2035,9 +2757,6 @@ class OperatorQuerySearch implements SearchInterface $this->setLimit((int)app('preferences')->getForUser($user, 'listPageSize', 50)->data); } - /** - * @param int $limit - */ public function setLimit(int $limit): void { $this->limit = $limit; diff --git a/app/Support/Search/SearchInterface.php b/app/Support/Search/SearchInterface.php index 100168f36e..b9197e9daf 100644 --- a/app/Support/Search/SearchInterface.php +++ b/app/Support/Search/SearchInterface.php @@ -33,63 +33,27 @@ use Illuminate\Support\Collection; */ interface SearchInterface { - /** - * @return array - */ public function getInvalidOperators(): array; - /** - * @return Collection - */ public function getModifiers(): Collection; - /** - * @return Collection - */ public function getOperators(): Collection; - /** - * @return string - */ public function getWordsAsString(): string; - /** - * @return bool - */ public function hasModifiers(): bool; - /** - * @param string $query - */ - public function parseQuery(string $query); + public function parseQuery(string $query): void; - /** - * @return float - */ public function searchTime(): float; - /** - * @return LengthAwarePaginator - */ public function searchTransactions(): LengthAwarePaginator; - /** - * @param Carbon $date - */ public function setDate(Carbon $date): void; - /** - * @param int $limit - */ public function setLimit(int $limit): void; - /** - * @param int $page - */ public function setPage(int $page): void; - /** - * @param User $user - */ - public function setUser(User $user); + public function setUser(User $user): void; } diff --git a/app/Support/Steam.php b/app/Support/Steam.php index 335f246abf..b08ccb6389 100644 --- a/app/Support/Steam.php +++ b/app/Support/Steam.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace FireflyIII\Support; use Carbon\Carbon; -use DB; +use Carbon\Exceptions\InvalidFormatException; use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; @@ -34,61 +34,45 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Log; -use JsonException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; -use stdClass; -use Str; -use ValueError; /** * Class Steam. - * - */ class Steam { - /** - * @param Account $account - * @param Carbon $date - * - * @return string - */ public function balanceIgnoreVirtual(Account $account, Carbon $date): string { /** @var AccountRepositoryInterface $repository */ - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); $repository->setUser($account->user); - $currencyId = (int)$repository->getMetaValue($account, 'currency_id'); - $transactions = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', $currencyId) - ->get(['transactions.amount'])->toArray(); - $nativeBalance = $this->sumTransactions($transactions, 'amount'); + $currencyId = (int)$repository->getMetaValue($account, 'currency_id'); + $transactions = $account->transactions() + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', $currencyId) + ->get(['transactions.amount'])->toArray() + ; + $nativeBalance = $this->sumTransactions($transactions, 'amount'); // get all balances in foreign currency: - $transactions = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.foreign_currency_id', $currencyId) - ->where('transactions.transaction_currency_id', '!=', $currencyId) - ->get(['transactions.foreign_amount'])->toArray(); + $transactions = $account->transactions() + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.foreign_currency_id', $currencyId) + ->where('transactions.transaction_currency_id', '!=', $currencyId) + ->get(['transactions.foreign_amount'])->toArray() + ; $foreignBalance = $this->sumTransactions($transactions, 'foreign_amount'); + return bcadd($nativeBalance, $foreignBalance); } - /** - * @param array $transactions - * @param string $key - * - * @return string - */ public function sumTransactions(array $transactions, string $key): string { $sum = '0'; + /** @var array $transaction */ foreach ($transactions as $transaction) { $value = (string)($transaction[$key] ?? '0'); @@ -104,21 +88,14 @@ class Steam * * [yyyy-mm-dd] => 123,2 * - * @param Account $account - * @param Carbon $start - * @param Carbon $end - * @param TransactionCurrency|null $currency - * - * @return array * @throws FireflyException - * @throws JsonException */ public function balanceInRange(Account $account, Carbon $start, Carbon $end, ?TransactionCurrency $currency = null): array { - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance-in-range'); - $cache->addProperty($currency ? $currency->id : 0); + $cache->addProperty(null !== $currency ? $currency->id : 0); $cache->addProperty($start); $cache->addProperty($end); if ($cache->has()) { @@ -127,46 +104,48 @@ class Steam $start->subDay(); $end->addDay(); - $balances = []; - $formatted = $start->format('Y-m-d'); - $startBalance = $this->balance($account, $start, $currency); + $balances = []; + $formatted = $start->format('Y-m-d'); + $startBalance = $this->balance($account, $start, $currency); $balances[$formatted] = $startBalance; if (null === $currency) { $repository = app(AccountRepositoryInterface::class); $repository->setUser($account->user); - $currency = $repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUser($account->user); + $currency = $repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); } - $currencyId = (int)$currency->id; + $currencyId = $currency->id; $start->addDay(); // query! - $set = $account->transactions() - ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00')) - ->where('transaction_journals.date', '<=', $end->format('Y-m-d 23:59:59')) - ->groupBy('transaction_journals.date') - ->groupBy('transactions.transaction_currency_id') - ->groupBy('transactions.foreign_currency_id') - ->orderBy('transaction_journals.date', 'ASC') - ->whereNull('transaction_journals.deleted_at') - ->get( - [ - 'transaction_journals.date', - 'transactions.transaction_currency_id', - DB::raw('SUM(transactions.amount) AS modified'), - 'transactions.foreign_currency_id', - DB::raw('SUM(transactions.foreign_amount) AS modified_foreign'), - ] - ); + $set = $account->transactions() + ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') + ->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00')) + ->where('transaction_journals.date', '<=', $end->format('Y-m-d 23:59:59')) + ->groupBy('transaction_journals.date') + ->groupBy('transactions.transaction_currency_id') + ->groupBy('transactions.foreign_currency_id') + ->orderBy('transaction_journals.date', 'ASC') + ->whereNull('transaction_journals.deleted_at') + ->get( + [ // @phpstan-ignore-line + 'transaction_journals.date', + 'transactions.transaction_currency_id', + \DB::raw('SUM(transactions.amount) AS modified'), + 'transactions.foreign_currency_id', + \DB::raw('SUM(transactions.foreign_amount) AS modified_foreign'), + ] + ) + ; + + $currentBalance = $startBalance; - $currentBalance = $startBalance; /** @var Transaction $entry */ foreach ($set as $entry) { // normal amount and foreign amount - $modified = null === $entry->modified ? '0' : (string)$entry->modified; - $foreignModified = null === $entry->modified_foreign ? '0' : (string)$entry->modified_foreign; + $modified = (string)(null === $entry->modified ? '0' : $entry->modified); + $foreignModified = (string)(null === $entry->modified_foreign ? '0' : $entry->modified_foreign); $amount = '0'; if ($currencyId === (int)$entry->transaction_currency_id || 0 === $currencyId) { // use normal amount: @@ -176,7 +155,7 @@ class Steam // use foreign amount: $amount = $foreignModified; } - + // Log::debug(sprintf('Trying to add %s and %s.', var_export($currentBalance, true), var_export($amount, true))); $currentBalance = bcadd($currentBalance, $amount); $carbon = new Carbon($entry->date, config('app.timezone')); $date = $carbon->format('Y-m-d'); @@ -191,46 +170,44 @@ class Steam /** * Gets balance at the end of current month by default * - * @param Account $account - * @param Carbon $date - * @param TransactionCurrency|null $currency - * - * @return string * @throws FireflyException */ public function balance(Account $account, Carbon $date, ?TransactionCurrency $currency = null): string { // abuse chart properties: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance'); $cache->addProperty($date); - $cache->addProperty($currency ? $currency->id : 0); + $cache->addProperty(null !== $currency ? $currency->id : 0); if ($cache->has()) { return $cache->get(); } + /** @var AccountRepositoryInterface $repository */ - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); if (null === $currency) { - $currency = $repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUser($account->user); + $currency = $repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); } // first part: get all balances in own currency: - $transactions = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', $currency->id) - ->get(['transactions.amount'])->toArray(); - $nativeBalance = $this->sumTransactions($transactions, 'amount'); + $transactions = $account->transactions() + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', $currency->id) + ->get(['transactions.amount'])->toArray() + ; + $nativeBalance = $this->sumTransactions($transactions, 'amount'); // get all balances in foreign currency: $transactions = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.foreign_currency_id', $currency->id) - ->where('transactions.transaction_currency_id', '!=', $currency->id) - ->get(['transactions.foreign_amount'])->toArray(); + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.foreign_currency_id', $currency->id) + ->where('transactions.transaction_currency_id', '!=', $currency->id) + ->get(['transactions.foreign_amount'])->toArray() + ; $foreignBalance = $this->sumTransactions($transactions, 'foreign_amount'); $balance = bcadd($nativeBalance, $foreignBalance); - $virtual = null === $account->virtual_balance ? '0' : (string)$account->virtual_balance; + $virtual = null === $account->virtual_balance ? '0' : $account->virtual_balance; $balance = bcadd($balance, $virtual); $cache->store($balance); @@ -239,17 +216,13 @@ class Steam } /** - * @param Account $account - * @param Carbon $start - * @param Carbon $end - * - * @return array * @throws FireflyException + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function balanceInRangeConverted(Account $account, Carbon $start, Carbon $end, TransactionCurrency $native): array { - - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance-in-range-converted'); $cache->addProperty($native->id); @@ -258,7 +231,7 @@ class Steam if ($cache->has()) { return $cache->get(); } - app('log')->debug(sprintf('balanceInRangeConverted for account #%d to %s', $account->id, $native->code)); + Log::debug(sprintf('balanceInRangeConverted for account #%d to %s', $account->id, $native->code)); $start->subDay(); $end->addDay(); $balances = []; @@ -267,62 +240,75 @@ class Steam $startBalance = $this->balanceConverted($account, $start, $native); // already converted to native amount $balances[$formatted] = $startBalance; - app('log')->debug(sprintf('Start balance on %s is %s', $formatted, $startBalance)); - - $converter = new ExchangeRateConverter(); + Log::debug(sprintf('Start balance on %s is %s', $formatted, $startBalance)); + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); + $converter = new ExchangeRateConverter(); // not sure why this is happening: $start->addDay(); // grab all transactions between start and end: - $set = $account->transactions() - ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') - ->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00')) - ->where('transaction_journals.date', '<=', $end->format('Y-m-d 23:59:59')) - ->orderBy('transaction_journals.date', 'ASC') - ->whereNull('transaction_journals.deleted_at') - ->get( - [ - 'transaction_journals.date', - 'transactions.transaction_currency_id', - 'transactions.amount', - 'transactions.foreign_currency_id', - 'transactions.foreign_amount', - ] - )->toArray(); + $set = $account->transactions() + ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') + ->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00')) + ->where('transaction_journals.date', '<=', $end->format('Y-m-d 23:59:59')) + ->orderBy('transaction_journals.date', 'ASC') + ->whereNull('transaction_journals.deleted_at') + ->get( + [ + 'transaction_journals.date', + 'transactions.transaction_currency_id', + 'transactions.amount', + 'transactions.foreign_currency_id', + 'transactions.foreign_amount', + ] + )->toArray() + ; // loop the set and convert if necessary: - $currentBalance = $startBalance; + $currentBalance = $startBalance; + /** @var Transaction $transaction */ foreach ($set as $transaction) { - $day = Carbon::createFromFormat('Y-m-d H:i:s', $transaction['date'], config('app.timezone')); - $format = $day->format('Y-m-d'); + $day = false; + + try { + $day = Carbon::parse($transaction['date'], config('app.timezone')); + } catch (InvalidFormatException $e) { + Log::error(sprintf('Could not parse date "%s" in %s: %s', $transaction['date'], __METHOD__, $e->getMessage())); + } + if (false === $day) { + $day = today(config('app.timezone')); + } + $format = $day->format('Y-m-d'); // if the transaction is in the expected currency, change nothing. - if ((int)$transaction['transaction_currency_id'] === (int)$native->id) { + if ((int)$transaction['transaction_currency_id'] === $native->id) { // change the current balance, set it to today, continue the loop. $currentBalance = bcadd($currentBalance, $transaction['amount']); $balances[$format] = $currentBalance; - app('log')->debug(sprintf('%s: transaction in %s, new balance is %s.', $format, $native->code, $currentBalance)); + Log::debug(sprintf('%s: transaction in %s, new balance is %s.', $format, $native->code, $currentBalance)); + continue; } // if foreign currency is in the expected currency, do nothing: - if ((int)$transaction['foreign_currency_id'] === (int)$native->id) { + if ((int)$transaction['foreign_currency_id'] === $native->id) { $currentBalance = bcadd($currentBalance, $transaction['foreign_amount']); $balances[$format] = $currentBalance; - app('log')->debug(sprintf('%s: transaction in %s (foreign), new balance is %s.', $format, $native->code, $currentBalance)); + Log::debug(sprintf('%s: transaction in %s (foreign), new balance is %s.', $format, $native->code, $currentBalance)); + continue; } // otherwise, convert 'amount' to the necessary currency: - $currencyId = (int)$transaction['transaction_currency_id']; - $currency = $currencies[$currencyId] ?? TransactionCurrency::find($currencyId); + $currencyId = (int)$transaction['transaction_currency_id']; + $currency = $currencies[$currencyId] ?? TransactionCurrency::find($currencyId); + $currencies[$currencyId] = $currency; + $rate = $converter->getCurrencyRate($currency, $native, $day); + $convertedAmount = bcmul($transaction['amount'], $rate); + $currentBalance = bcadd($currentBalance, $convertedAmount); + $balances[$format] = $currentBalance; - $rate = $converter->getCurrencyRate($currency, $native, $day); - $convertedAmount = bcmul($transaction['amount'], $rate); - $currentBalance = bcadd($currentBalance, $convertedAmount); - $balances[$format] = $currentBalance; - - app('log')->debug(sprintf( + Log::debug(sprintf( '%s: transaction in %s(!). Conversion rate is %s. %s %s = %s %s', $format, $currency->code, @@ -332,146 +318,169 @@ class Steam $native->code, $convertedAmount )); - - } $cache->store($balances); + $converter->summarize(); return $balances; } /** + * selection of transactions + * 1: all normal transactions. No foreign currency info. In $currency. Need conversion. + * 2: all normal transactions. No foreign currency info. In $native. Need NO conversion. + * 3: all normal transactions. No foreign currency info. In neither currency. Need conversion. + * Then, select everything with foreign currency info: + * 4. All transactions with foreign currency info in $native. Normal currency value is ignored. Do not need + * conversion. + * 5. All transactions with foreign currency info NOT in $native, but currency info in $currency. Need conversion. + * 6. All transactions with foreign currency info NOT in $native, and currency info NOT in $currency. Need + * conversion. + * * Gets balance at the end of current month by default. Returns the balance converted * to the indicated currency ($native). * - * @param Account $account - * @param Carbon $date - * @param TransactionCurrency $native - * - * @return string * @throws FireflyException + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function balanceConverted(Account $account, Carbon $date, TransactionCurrency $native): string { - app('log')->debug(sprintf('Now in balanceConverted (%s) for account #%d, converting to %s', $date->format('Y-m-d'), $account->id, $native->code)); - // abuse chart properties: - $cache = new CacheProperties(); + Log::debug(sprintf('Now in balanceConverted (%s) for account #%d, converting to %s', $date->format('Y-m-d'), $account->id, $native->code)); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance'); $cache->addProperty($date); $cache->addProperty($native->id); if ($cache->has()) { + Log::debug('Cached!'); + // return $cache->get(); } + /** @var AccountRepositoryInterface $repository */ $repository = app(AccountRepositoryInterface::class); $currency = $repository->getAccountCurrency($account); - if (null === $currency) { - throw new FireflyException('Cannot get converted account balance: no currency found for account.'); - } - if ((int)$native->id === (int)$currency->id) { + $currency = null === $currency ? app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup) : $currency; + if ($native->id === $currency->id) { + Log::debug('No conversion necessary!'); + return $this->balance($account, $date); } - /** - * selection of transactions - * 1: all normal transactions. No foreign currency info. In $currency. Need conversion. - * 2: all normal transactions. No foreign currency info. In $native. Need NO conversion. - * 3: all normal transactions. No foreign currency info. In neither currency. Need conversion. - * Then, select everything with foreign currency info: - * 4. All transactions with foreign currency info in $native. Normal currency value is ignored. Do not need conversion. - * 5. All transactions with foreign currency info NOT in $native, but currency info in $currency. Need conversion. - * 6. All transactions with foreign currency info NOT in $native, and currency info NOT in $currency. Need conversion. - * - */ - $new = []; - $existing = []; - // 1 - $new[] = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', $currency->id) - ->whereNull('transactions.foreign_currency_id') - ->get(['transaction_journals.date', 'transactions.amount'])->toArray(); - app('log')->debug(sprintf('%d transaction(s) in set #1', count($new[0]))); - // 2 - $existing[] = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', $native->id) - ->whereNull('transactions.foreign_currency_id') - ->get(['transactions.amount'])->toArray(); - app('log')->debug(sprintf('%d transaction(s) in set #2', count($existing[0]))); - // 3 - $new[] = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', '!=', $currency->id) - ->where('transactions.transaction_currency_id', '!=', $native->id) - ->whereNull('transactions.foreign_currency_id') - ->get(['transaction_journals.date', 'transactions.amount'])->toArray(); - app('log')->debug(sprintf('%d transactions in set #3', count($new[1]))); - // 4 - $existing[] = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.foreign_currency_id', $native->id) - ->whereNotNull('transactions.foreign_amount') - ->get(['transactions.foreign_amount'])->toArray(); - app('log')->debug(sprintf('%d transactions in set #4', count($existing[1]))); - // 5 - $new[] = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', $currency->id) - ->where('transactions.foreign_currency_id', '!=', $native->id) - ->whereNotNull('transactions.foreign_amount') - ->get(['transaction_journals.date', 'transactions.amount'])->toArray(); - app('log')->debug(sprintf('%d transactions in set #5', count($new[2]))); - // 6 - $new[] = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->where('transactions.transaction_currency_id', '!=', $currency->id) - ->where('transactions.foreign_currency_id', '!=', $native->id) - ->whereNotNull('transactions.foreign_amount') - ->get(['transaction_journals.date', 'transactions.amount'])->toArray(); - app('log')->debug(sprintf('%d transactions in set #6', count($new[3]))); + $new = []; + $existing = []; + $new[] = $account->transactions() // 1 + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', $currency->id) + ->whereNull('transactions.foreign_currency_id') + ->get(['transaction_journals.date', 'transactions.amount'])->toArray() + ; + Log::debug(sprintf('%d transaction(s) in set #1', count($new[0]))); + $existing[] = $account->transactions() // 2 + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', $native->id) + ->whereNull('transactions.foreign_currency_id') + ->get(['transactions.amount'])->toArray() + ; + Log::debug(sprintf('%d transaction(s) in set #2', count($existing[0]))); + $new[] = $account->transactions() // 3 + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', '!=', $currency->id) + ->where('transactions.transaction_currency_id', '!=', $native->id) + ->whereNull('transactions.foreign_currency_id') + ->get(['transaction_journals.date', 'transactions.amount'])->toArray() + ; + Log::debug(sprintf('%d transactions in set #3', count($new[1]))); + $existing[] = $account->transactions() // 4 + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.foreign_currency_id', $native->id) + ->whereNotNull('transactions.foreign_amount') + ->get(['transactions.foreign_amount'])->toArray() + ; + Log::debug(sprintf('%d transactions in set #4', count($existing[1]))); + $new[] = $account->transactions()// 5 + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', $currency->id) + ->where('transactions.foreign_currency_id', '!=', $native->id) + ->whereNotNull('transactions.foreign_amount') + ->get(['transaction_journals.date', 'transactions.amount'])->toArray() + ; + Log::debug(sprintf('%d transactions in set #5', count($new[2]))); + $new[] = $account->transactions()// 6 + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->where('transactions.transaction_currency_id', '!=', $currency->id) + ->where('transactions.foreign_currency_id', '!=', $native->id) + ->whereNotNull('transactions.foreign_amount') + ->get(['transaction_journals.date', 'transactions.amount'])->toArray() + ; + Log::debug(sprintf('%d transactions in set #6', count($new[3]))); // process both sets of transactions. Of course, no need to convert set "existing". - $balance = $this->sumTransactions($existing[0], 'amount'); - $balance = bcadd($balance, $this->sumTransactions($existing[1], 'foreign_amount')); - //app('log')->debug(sprintf('Balance from set #2 and #4 is %f', $balance)); + $balance = $this->sumTransactions($existing[0], 'amount'); + $balance = bcadd($balance, $this->sumTransactions($existing[1], 'foreign_amount')); + Log::debug(sprintf('Balance from set #2 and #4 is %f', $balance)); // need to convert the others. All sets use the "amount" value as their base (that's easy) // but we need to convert each transaction separately because the date difference may // incur huge currency changes. - $converter = new ExchangeRateConverter(); - foreach ($new as $index => $set) { + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); + $start = clone $date; + $end = clone $date; + $converter = new ExchangeRateConverter(); + foreach ($new as $set) { foreach ($set as $transaction) { - $date = Carbon::createFromFormat('Y-m-d H:i:s', $transaction['date']); - $rate = $converter->getCurrencyRate($currency, $native, $date); + $currentDate = false; + + try { + $currentDate = Carbon::parse($transaction['date'], config('app.timezone')); + } catch (InvalidFormatException $e) { + Log::error(sprintf('Could not parse date "%s" in %s', $transaction['date'], __METHOD__)); + } + if (false === $currentDate) { + $currentDate = today(config('app.timezone')); + } + if ($currentDate->lte($start)) { + $start = clone $currentDate; + } + } + } + unset($currentDate); + $converter->prepare($currency, $native, $start, $end); + + foreach ($new as $set) { + foreach ($set as $transaction) { + $currentDate = false; + + try { + $currentDate = Carbon::parse($transaction['date'], config('app.timezone')); + } catch (InvalidFormatException $e) { + Log::error(sprintf('Could not parse date "%s" in %s', $transaction['date'], __METHOD__)); + } + if (false === $currentDate) { + $currentDate = today(config('app.timezone')); + } + $rate = $converter->getCurrencyRate($currency, $native, $currentDate); $convertedAmount = bcmul($transaction['amount'], $rate); $balance = bcadd($balance, $convertedAmount); - // app('log')->debug(sprintf('Date: %s, rate: %s, amount: %s %s, new: %s %s', - // $date->format('Y-m-d'), - // $rate, - // $currency->code, - // $transaction['amount'], - // $native->code, - // $convertedAmount - // )); } - //app('log')->debug(sprintf('Balance from new set #%d is %f', $index, $balance)); } // add virtual balance (also needs conversion) - $virtual = null === $account->virtual_balance ? '0' : (string)$account->virtual_balance; - $virtual = $converter->convert($currency, $native, $account->created_at, $virtual); - $balance = bcadd($balance, $virtual); + $virtual = null === $account->virtual_balance ? '0' : $account->virtual_balance; + $virtual = $converter->convert($currency, $native, $account->created_at, $virtual); + $balance = bcadd($balance, $virtual); + $converter->summarize(); $cache->store($balance); + $converter->summarize(); return $balance; } @@ -479,17 +488,13 @@ class Steam /** * This method always ignores the virtual balance. * - * @param Collection $accounts - * @param Carbon $date - * - * @return array * @throws FireflyException */ public function balancesByAccounts(Collection $accounts, Carbon $date): array { - $ids = $accounts->pluck('id')->toArray(); + $ids = $accounts->pluck('id')->toArray(); // cache this property. - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($ids); $cache->addProperty('balances'); $cache->addProperty($date); @@ -499,6 +504,7 @@ class Steam // need to do this per account. $result = []; + /** @var Account $account */ foreach ($accounts as $account) { $result[$account->id] = $this->balance($account, $date); @@ -512,17 +518,13 @@ class Steam /** * This method always ignores the virtual balance. * - * @param Collection $accounts - * @param Carbon $date - * - * @return array * @throws FireflyException */ public function balancesByAccountsConverted(Collection $accounts, Carbon $date): array { - $ids = $accounts->pluck('id')->toArray(); + $ids = $accounts->pluck('id')->toArray(); // cache this property. - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($ids); $cache->addProperty('balances-converted'); $cache->addProperty($date); @@ -530,17 +532,17 @@ class Steam // return $cache->get(); } - // need to do this per account. $result = []; + /** @var Account $account */ foreach ($accounts as $account) { - $default = app('amount')->getDefaultCurrencyByUser($account->user); - $result[(int)$account->id] + $default = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); + $result[$account->id] = [ - 'balance' => $this->balance($account, $date), - 'native_balance' => $this->balanceConverted($account, $date, $default), - ]; + 'balance' => $this->balance($account, $date), + 'native_balance' => $this->balanceConverted($account, $date, $default), + ]; } $cache->store($result); @@ -550,17 +552,12 @@ class Steam /** * Same as above, but also groups per currency. - * - * @param Collection $accounts - * @param Carbon $date - * - * @return array */ public function balancesPerCurrencyByAccounts(Collection $accounts, Carbon $date): array { - $ids = $accounts->pluck('id')->toArray(); + $ids = $accounts->pluck('id')->toArray(); // cache this property. - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($ids); $cache->addProperty('balances-per-currency'); $cache->addProperty($date); @@ -570,6 +567,7 @@ class Steam // need to do this per account. $result = []; + /** @var Account $account */ foreach ($accounts as $account) { $result[$account->id] = $this->balancePerCurrency($account, $date); @@ -580,16 +578,10 @@ class Steam return $result; } - /** - * @param Account $account - * @param Carbon $date - * - * @return array - */ public function balancePerCurrency(Account $account, Carbon $date): array { // abuse chart properties: - $cache = new CacheProperties(); + $cache = new CacheProperties(); $cache->addProperty($account->id); $cache->addProperty('balance-per-currency'); $cache->addProperty($date); @@ -597,12 +589,14 @@ class Steam return $cache->get(); } $query = $account->transactions() - ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) - ->groupBy('transactions.transaction_currency_id'); - $balances = $query->get(['transactions.transaction_currency_id', DB::raw('SUM(transactions.amount) as sum_for_currency')]); + ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')) + ->groupBy('transactions.transaction_currency_id') + ; + $balances = $query->get(['transactions.transaction_currency_id', \DB::raw('SUM(transactions.amount) as sum_for_currency')]); // @phpstan-ignore-line $return = []; - /** @var stdClass $entry */ + + /** @var \stdClass $entry */ foreach ($balances as $entry) { $return[(int)$entry->transaction_currency_id] = (string)$entry->sum_for_currency; } @@ -613,11 +607,6 @@ class Steam /** * https://stackoverflow.com/questions/1642614/how-to-ceil-floor-and-round-bcmath-numbers - * - * @param null|string $number - * @param int $precision - * - * @return string */ public function bcround(?string $number, int $precision = 0): string { @@ -634,21 +623,16 @@ class Steam // Log::debug(sprintf('Trying bcround("%s",%d)', $number, $precision)); if (str_contains($number, '.')) { - if ($number[0] !== '-') { - return bcadd($number, '0.' . str_repeat('0', $precision) . '5', $precision); + if ('-' !== $number[0]) { + return bcadd($number, '0.'.str_repeat('0', $precision).'5', $precision); } - return bcsub($number, '0.' . str_repeat('0', $precision) . '5', $precision); + return bcsub($number, '0.'.str_repeat('0', $precision).'5', $precision); } return $number; } - /** - * @param string $string - * - * @return string - */ public function filterSpaces(string $string): string { $search = [ @@ -707,39 +691,34 @@ class Steam } /** - * @param string $ipAddress - * - * @return string * @throws FireflyException */ public function getHostName(string $ipAddress): string { try { $hostName = gethostbyaddr($ipAddress); - } catch (Exception $e) { // intentional generic exception + } catch (\Exception $e) { // intentional generic exception throw new FireflyException($e->getMessage(), 0, $e); } - return $hostName; + + return (string)$hostName; } - /** - * @param array $accounts - * - * @return array - */ public function getLastActivities(array $accounts): array { $list = []; - $set = auth()->user()->transactions() - ->whereIn('transactions.account_id', $accounts) - ->groupBy(['transactions.account_id', 'transaction_journals.user_id']) - ->get(['transactions.account_id', DB::raw('MAX(transaction_journals.date) AS max_date')]); + $set = auth()->user()->transactions() + ->whereIn('transactions.account_id', $accounts) + ->groupBy(['transactions.account_id', 'transaction_journals.user_id']) + ->get(['transactions.account_id', \DB::raw('MAX(transaction_journals.date) AS max_date')]) // @phpstan-ignore-line + ; + /** @var Transaction $entry */ foreach ($set as $entry) { - $date = new Carbon($entry->max_date, config('app.timezone')); + $date = new Carbon($entry->max_date, config('app.timezone')); $date->setTimezone(config('app.timezone')); - $list[(int)$entry->account_id] = $date; + $list[$entry->account_id] = $date; } return $list; @@ -747,21 +726,20 @@ class Steam /** * Get user's locale. - * - * @return string - * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function getLocale(): string // get preference { $locale = app('preferences')->get('locale', config('firefly.default_locale', 'equal'))->data; + if (is_array($locale)) { + $locale = 'equal'; + } if ('equal' === $locale) { $locale = $this->getLanguage(); } + $locale = (string)$locale; // Check for Windows to replace the locale correctly. - if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + if ('WIN' === strtoupper(substr(PHP_OS, 0, 3))) { $locale = str_replace('_', '-', $locale); } @@ -771,10 +749,7 @@ class Steam /** * Get user's language. * - * @return string * @throws FireflyException - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function getLanguage(): string // get preference { @@ -782,14 +757,10 @@ class Steam if (!is_string($preference)) { throw new FireflyException(sprintf('Preference "language" must be a string, but is unexpectedly a "%s".', gettype($preference))); } + return str_replace('-', '_', $preference); } - /** - * @param string $locale - * - * @return array - */ public function getLocaleArray(string $locale): array { return [ @@ -807,29 +778,22 @@ class Steam * Uses the session's previousUrl() function as inspired by GitHub user @z1r0- * * session()->previousUrl() uses getSafeUrl() so we can safely return it: - * - * @return string */ public function getSafePreviousUrl(): string { - //Log::debug(sprintf('getSafePreviousUrl: "%s"', session()->previousUrl())); + // Log::debug(sprintf('getSafePreviousUrl: "%s"', session()->previousUrl())); return session()->previousUrl() ?? route('index'); } /** * Make sure URL is safe. - * - * @param string $unknownUrl - * @param string $safeUrl - * - * @return string */ public function getSafeUrl(string $unknownUrl, string $safeUrl): string { - //Log::debug(sprintf('getSafeUrl(%s, %s)', $unknownUrl, $safeUrl)); - $returnUrl = $safeUrl; - $unknownHost = parse_url($unknownUrl, PHP_URL_HOST); - $safeHost = parse_url($safeUrl, PHP_URL_HOST); + // Log::debug(sprintf('getSafeUrl(%s, %s)', $unknownUrl, $safeUrl)); + $returnUrl = $safeUrl; + $unknownHost = parse_url($unknownUrl, PHP_URL_HOST); + $safeHost = parse_url($safeUrl, PHP_URL_HOST); if (null !== $unknownHost && $unknownHost === $safeHost) { $returnUrl = $unknownUrl; @@ -837,18 +801,13 @@ class Steam // URL must not lead to weird pages $forbiddenWords = ['jscript', 'json', 'debug', 'serviceworker', 'offline', 'delete', '/login', '/attachments/view']; - if (Str::contains($returnUrl, $forbiddenWords)) { + if (\Str::contains($returnUrl, $forbiddenWords)) { $returnUrl = $safeUrl; } return $returnUrl; } - /** - * @param string $amount - * - * @return string - */ public function negative(string $amount): string { if ('' === $amount) { @@ -868,37 +827,30 @@ class Steam * * Convert a scientific notation to float * Additionally fixed a problem with PHP <= 5.2.x with big integers - * - * @param string $value - * - * @return string */ public function floatalize(string $value): string { - $value = strtoupper($value); + $value = strtoupper($value); if (!str_contains($value, 'E')) { return $value; } - $number = substr($value, 0, strpos($value, 'E')); + $number = substr($value, 0, (int)strpos($value, 'E')); if (str_contains($number, '.')) { - $post = strlen(substr($number, strpos($number, '.') + 1)); - $mantis = substr($value, strpos($value, 'E') + 1); + $post = strlen(substr($number, (int)strpos($number, '.') + 1)); + $mantis = substr($value, (int)strpos($value, 'E') + 1); if ($mantis < 0) { $post += abs((int)$mantis); } + // TODO careless float could break financial math. return number_format((float)$value, $post, '.', ''); } + // TODO careless float could break financial math. return number_format((float)$value, 0, '.', ''); } - /** - * @param string|null $amount - * - * @return string|null - */ public function opposite(string $amount = null): ?string { if (null === $amount) { @@ -908,11 +860,6 @@ class Steam return bcmul($amount, '-1'); } - /** - * @param string $string - * - * @return int - */ public function phpBytes(string $string): int { $string = str_replace(['kb', 'mb', 'gb'], ['k', 'm', 'g'], strtolower($string)); @@ -941,23 +888,20 @@ class Steam return (int)$string; } - /** - * @param string $amount - * - * @return string - */ public function positive(string $amount): string { if ('' === $amount) { return '0'; } + try { - if (bccomp($amount, '0') === -1) { + if (-1 === bccomp($amount, '0')) { $amount = bcmul($amount, '-1'); } - } catch (ValueError $e) { + } catch (\ValueError $e) { Log::error(sprintf('ValueError in Steam::positive("%s"): %s', $amount, $e->getMessage())); Log::error($e->getTraceAsString()); + return '0'; } diff --git a/app/Support/System/GeneratesInstallationId.php b/app/Support/System/GeneratesInstallationId.php index beccdaafab..bd017f4f5a 100644 --- a/app/Support/System/GeneratesInstallationId.php +++ b/app/Support/System/GeneratesInstallationId.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Support\System; use FireflyIII\Exceptions\FireflyException; -use Illuminate\Support\Facades\Log; use Ramsey\Uuid\Uuid; /** @@ -33,15 +32,12 @@ use Ramsey\Uuid\Uuid; */ trait GeneratesInstallationId { - /** - * - */ protected function generateInstallationId(): void { try { $config = app('fireflyconfig')->get('installation_id'); } catch (FireflyException $e) { - Log::info('Could not create or generate installation ID. Do not continue.'); + app('log')->info('Could not create or generate installation ID. Do not continue.'); return; } @@ -54,7 +50,7 @@ trait GeneratesInstallationId if (null === $config) { $uuid4 = Uuid::uuid4(); $uniqueId = (string)$uuid4; - Log::info(sprintf('Created Firefly III installation ID %s', $uniqueId)); + app('log')->info(sprintf('Created Firefly III installation ID %s', $uniqueId)); app('fireflyconfig')->set('installation_id', $uniqueId); } } diff --git a/app/Support/System/OAuthKeys.php b/app/Support/System/OAuthKeys.php index 8a59ebf739..f46af222c1 100644 --- a/app/Support/System/OAuthKeys.php +++ b/app/Support/System/OAuthKeys.php @@ -24,11 +24,8 @@ declare(strict_types=1); namespace FireflyIII\Support\System; -use Artisan; -use Crypt; use FireflyIII\Exceptions\FireflyException; use Illuminate\Contracts\Encryption\DecryptException; -use Illuminate\Support\Facades\Log; use Laravel\Passport\Console\KeysCommand; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; @@ -38,12 +35,9 @@ use Psr\Container\NotFoundExceptionInterface; */ class OAuthKeys { - private const PRIVATE_KEY = 'oauth_private_key'; - private const PUBLIC_KEY = 'oauth_public_key'; + private const string PRIVATE_KEY = 'oauth_private_key'; + private const string PUBLIC_KEY = 'oauth_public_key'; - /** - * - */ public static function verifyKeysRoutine(): void { if (!self::keysInDatabase() && !self::hasKeyFiles()) { @@ -62,9 +56,6 @@ class OAuthKeys } } - /** - * @return bool - */ public static function keysInDatabase(): bool { $privateKey = ''; @@ -74,9 +65,9 @@ class OAuthKeys try { $privateKey = (string)app('fireflyconfig')->get(self::PRIVATE_KEY)?->data; $publicKey = (string)app('fireflyconfig')->get(self::PUBLIC_KEY)?->data; - } catch (ContainerExceptionInterface | NotFoundExceptionInterface | FireflyException $e) { - Log::error(sprintf('Could not validate keysInDatabase(): %s', $e->getMessage())); - Log::error($e->getTraceAsString()); + } catch (ContainerExceptionInterface|FireflyException|NotFoundExceptionInterface $e) { + app('log')->error(sprintf('Could not validate keysInDatabase(): %s', $e->getMessage())); + app('log')->error($e->getTraceAsString()); } } if ('' !== $privateKey && '' !== $publicKey) { @@ -86,9 +77,6 @@ class OAuthKeys return false; } - /** - * @return bool - */ public static function hasKeyFiles(): bool { $private = storage_path('oauth-private.key'); @@ -97,42 +85,34 @@ class OAuthKeys return file_exists($private) && file_exists($public); } - /** - * - */ public static function generateKeys(): void { - Artisan::registerCommand(new KeysCommand()); - Artisan::call('passport:keys'); + \Artisan::registerCommand(new KeysCommand()); + \Artisan::call('passport:keys'); } - /** - * - */ public static function storeKeysInDB(): void { $private = storage_path('oauth-private.key'); $public = storage_path('oauth-public.key'); - app('fireflyconfig')->set(self::PRIVATE_KEY, Crypt::encrypt(file_get_contents($private))); - app('fireflyconfig')->set(self::PUBLIC_KEY, Crypt::encrypt(file_get_contents($public))); + app('fireflyconfig')->set(self::PRIVATE_KEY, \Crypt::encrypt(file_get_contents($private))); + app('fireflyconfig')->set(self::PUBLIC_KEY, \Crypt::encrypt(file_get_contents($public))); } /** - * @return bool - * @throws ContainerExceptionInterface * @throws FireflyException - * @throws NotFoundExceptionInterface */ public static function restoreKeysFromDB(): bool { $privateKey = (string)app('fireflyconfig')->get(self::PRIVATE_KEY)?->data; $publicKey = (string)app('fireflyconfig')->get(self::PUBLIC_KEY)?->data; + try { - $privateContent = Crypt::decrypt($privateKey); - $publicContent = Crypt::decrypt($publicKey); + $privateContent = \Crypt::decrypt($privateKey); + $publicContent = \Crypt::decrypt($publicKey); } catch (DecryptException $e) { - Log::error('Could not decrypt pub/private keypair.'); - Log::error($e->getMessage()); + app('log')->error('Could not decrypt pub/private keypair.'); + app('log')->error($e->getMessage()); // delete config vars from DB: app('fireflyconfig')->delete(self::PRIVATE_KEY); @@ -140,10 +120,11 @@ class OAuthKeys return false; } - $private = storage_path('oauth-private.key'); - $public = storage_path('oauth-public.key'); + $private = storage_path('oauth-private.key'); + $public = storage_path('oauth-public.key'); file_put_contents($private, $privateContent); file_put_contents($public, $publicContent); + return true; } } diff --git a/app/Support/Twig/AmountFormat.php b/app/Support/Twig/AmountFormat.php index 5ae6db2121..6f96f42448 100644 --- a/app/Support/Twig/AmountFormat.php +++ b/app/Support/Twig/AmountFormat.php @@ -35,9 +35,6 @@ use Twig\TwigFunction; */ class AmountFormat extends AbstractExtension { - /** - * {@inheritdoc} - */ public function getFilters(): array { return [ @@ -46,9 +43,6 @@ class AmountFormat extends AbstractExtension ]; } - /** - * @return TwigFilter - */ protected function formatAmount(): TwigFilter { return new TwigFilter( @@ -62,9 +56,6 @@ class AmountFormat extends AbstractExtension ); } - /** - * @return TwigFilter - */ protected function formatAmountPlain(): TwigFilter { return new TwigFilter( @@ -78,9 +69,6 @@ class AmountFormat extends AbstractExtension ); } - /** - * {@inheritdoc} - */ public function getFunctions(): array { return [ @@ -93,15 +81,15 @@ class AmountFormat extends AbstractExtension /** * Will format the amount by the currency related to the given account. * - * @return TwigFunction - * TODO remove me when layout v1 is deprecated. + * TODO Remove me when v2 hits. */ protected function formatAmountByAccount(): TwigFunction { return new TwigFunction( 'formatAmountByAccount', static function (AccountModel $account, string $amount, bool $coloured = null): string { - $coloured = $coloured ?? true; + $coloured ??= true; + /** @var AccountRepositoryInterface $accountRepos */ $accountRepos = app(AccountRepositoryInterface::class); $currency = $accountRepos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency(); @@ -114,16 +102,14 @@ class AmountFormat extends AbstractExtension /** * Will format the amount by the currency related to the given account. - * - * @return TwigFunction */ protected function formatAmountBySymbol(): TwigFunction { return new TwigFunction( 'formatAmountBySymbol', static function (string $amount, string $symbol, int $decimalPlaces = null, bool $coloured = null): string { - $decimalPlaces = $decimalPlaces ?? 2; - $coloured = $coloured ?? true; + $decimalPlaces ??= 2; + $coloured ??= true; $currency = new TransactionCurrency(); $currency->symbol = $symbol; $currency->decimal_places = $decimalPlaces; @@ -136,15 +122,13 @@ class AmountFormat extends AbstractExtension /** * Will format the amount by the currency related to the given account. - * - * @return TwigFunction */ protected function formatAmountByCurrency(): TwigFunction { return new TwigFunction( 'formatAmountByCurrency', static function (TransactionCurrency $currency, string $amount, bool $coloured = null): string { - $coloured = $coloured ?? true; + $coloured ??= true; return app('amount')->formatAnything($currency, $amount, $coloured); }, diff --git a/app/Support/Twig/General.php b/app/Support/Twig/General.php index 4281ff1539..4186ef6f15 100644 --- a/app/Support/Twig/General.php +++ b/app/Support/Twig/General.php @@ -39,9 +39,6 @@ use Twig\TwigFunction; */ class General extends AbstractExtension { - /** - * @return array - */ public function getFilters(): array { return [ @@ -55,8 +52,6 @@ class General extends AbstractExtension /** * Show account balance. Only used on the front page of Firefly III. - * - * @return TwigFilter */ protected function balance(): TwigFilter { @@ -66,6 +61,7 @@ class General extends AbstractExtension if (null === $account) { return '0'; } + /** @var Carbon $date */ $date = session('end', today(config('app.timezone'))->endOfMonth()); @@ -76,8 +72,6 @@ class General extends AbstractExtension /** * Used to convert 1024 to 1kb etc. - * - * @return TwigFilter */ protected function formatFilesize(): TwigFilter { @@ -86,15 +80,15 @@ class General extends AbstractExtension static function (int $size): string { // less than one GB, more than one MB if ($size < (1024 * 1024 * 2014) && $size >= (1024 * 1024)) { - return round($size / (1024 * 1024), 2) . ' MB'; + return round($size / (1024 * 1024), 2).' MB'; } // less than one MB if ($size < (1024 * 1024)) { - return round($size / 1024, 2) . ' KB'; + return round($size / 1024, 2).' KB'; } - return $size . ' bytes'; + return $size.' bytes'; } ); } @@ -102,7 +96,7 @@ class General extends AbstractExtension /** * Show icon with attachment. * - * @return TwigFilter + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function mimeIcon(): TwigFilter { @@ -112,9 +106,11 @@ class General extends AbstractExtension switch ($string) { default: return 'fa-file-o'; + case 'application/pdf': return 'fa-file-pdf-o'; - /* image */ + + // image case 'image/png': case 'image/jpeg': case 'image/svg+xml': @@ -122,7 +118,8 @@ class General extends AbstractExtension case 'image/heic-sequence': case 'application/vnd.oasis.opendocument.image': return 'fa-file-image-o'; - /* MS word */ + + // MS word case 'application/msword': case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': case 'application/vnd.openxmlformats-officedocument.wordprocessingml.template': @@ -137,7 +134,8 @@ class General extends AbstractExtension case 'application/vnd.oasis.opendocument.text-web': case 'application/vnd.oasis.opendocument.text-master': return 'fa-file-word-o'; - /* MS excel */ + + // MS excel case 'application/vnd.ms-excel': case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': case 'application/vnd.openxmlformats-officedocument.spreadsheetml.template': @@ -147,7 +145,8 @@ class General extends AbstractExtension case 'application/vnd.oasis.opendocument.spreadsheet': case 'application/vnd.oasis.opendocument.spreadsheet-template': return 'fa-file-excel-o'; - /* MS powerpoint */ + + // MS powerpoint case 'application/vnd.ms-powerpoint': case 'application/vnd.openxmlformats-officedocument.presentationml.presentation': case 'application/vnd.openxmlformats-officedocument.presentationml.template': @@ -158,12 +157,14 @@ class General extends AbstractExtension case 'application/vnd.oasis.opendocument.presentation': case 'application/vnd.oasis.opendocument.presentation-template': return 'fa-file-powerpoint-o'; - /* calc */ + + // calc case 'application/vnd.sun.xml.draw': case 'application/vnd.sun.xml.draw.template': case 'application/vnd.stardivision.draw': case 'application/vnd.oasis.opendocument.chart': return 'fa-paint-brush'; + case 'application/vnd.oasis.opendocument.graphics': case 'application/vnd.oasis.opendocument.graphics-template': case 'application/vnd.sun.xml.math': @@ -177,9 +178,6 @@ class General extends AbstractExtension ); } - /** - * @return TwigFilter - */ protected function markdown(): TwigFilter { return new TwigFilter( @@ -201,8 +199,6 @@ class General extends AbstractExtension /** * Show URL host name - * - * @return TwigFilter */ protected function phpHostName(): TwigFilter { @@ -217,9 +213,6 @@ class General extends AbstractExtension ); } - /** - * {@inheritdoc} - */ public function getFunctions(): array { return [ @@ -238,8 +231,6 @@ class General extends AbstractExtension /** * Basic example thing for some views. - * - * @return TwigFunction */ protected function phpdate(): TwigFunction { @@ -254,8 +245,6 @@ class General extends AbstractExtension /** * Will return "active" when the current route matches the given argument * exactly. - * - * @return TwigFunction */ protected function activeRouteStrict(): TwigFunction { @@ -265,7 +254,7 @@ class General extends AbstractExtension $args = func_get_args(); $route = $args[0]; // name of the route. - if (Route::getCurrentRoute()->getName() === $route) { + if (\Route::getCurrentRoute()->getName() === $route) { return 'active'; } @@ -277,8 +266,6 @@ class General extends AbstractExtension /** * Will return "active" when a part of the route matches the argument. * ie. "accounts" will match "accounts.index". - * - * @return TwigFunction */ protected function activeRoutePartial(): TwigFunction { @@ -287,7 +274,7 @@ class General extends AbstractExtension static function (): string { $args = func_get_args(); $route = $args[0]; // name of the route. - $name = Route::getCurrentRoute()->getName() ?? ''; + $name = \Route::getCurrentRoute()->getName() ?? ''; if (str_contains($name, $route)) { return 'active'; } @@ -300,8 +287,6 @@ class General extends AbstractExtension /** * This function will return "active" when the current route matches the first argument (even partly) * but, the variable $objectType has been set and matches the second argument. - * - * @return TwigFunction */ protected function activeRoutePartialObjectType(): TwigFunction { @@ -309,11 +294,11 @@ class General extends AbstractExtension 'activeRoutePartialObjectType', static function ($context): string { [, $route, $objectType] = func_get_args(); - $activeObjectType = $context['objectType'] ?? false; + $activeObjectType = $context['objectType'] ?? false; if ($objectType === $activeObjectType && false !== stripos( - Route::getCurrentRoute()->getName(), + \Route::getCurrentRoute()->getName(), $route )) { return 'active'; @@ -328,8 +313,6 @@ class General extends AbstractExtension /** * Will return "menu-open" when a part of the route matches the argument. * ie. "accounts" will match "accounts.index". - * - * @return TwigFunction */ protected function menuOpenRoutePartial(): TwigFunction { @@ -338,7 +321,7 @@ class General extends AbstractExtension static function (): string { $args = func_get_args(); $route = $args[0]; // name of the route. - $name = Route::getCurrentRoute()->getName() ?? ''; + $name = \Route::getCurrentRoute()->getName() ?? ''; if (str_contains($name, $route)) { return 'menu-open'; } @@ -350,14 +333,12 @@ class General extends AbstractExtension /** * Formats a string as a thing by converting it to a Carbon first. - * - * @return TwigFunction */ protected function formatDate(): TwigFunction { return new TwigFunction( 'formatDate', - function (string $date, string $format): string { + static function (string $date, string $format): string { $carbon = new Carbon($date); return $carbon->isoFormat($format); @@ -366,8 +347,7 @@ class General extends AbstractExtension } /** - * @return TwigFunction - * TODO remove me when layout v1 is deprecated. + * TODO Remove me when v2 hits. */ protected function getMetaField(): TwigFunction { @@ -388,8 +368,6 @@ class General extends AbstractExtension /** * Will return true if the user is of role X. - * - * @return TwigFunction */ protected function hasRole(): TwigFunction { @@ -406,9 +384,6 @@ class General extends AbstractExtension ); } - /** - * @return TwigFunction - */ protected function getRootSearchOperator(): TwigFunction { return new TwigFunction( @@ -421,9 +396,6 @@ class General extends AbstractExtension ); } - /** - * @return TwigFunction - */ protected function carbonize(): TwigFunction { return new TwigFunction( diff --git a/app/Support/Twig/Rule.php b/app/Support/Twig/Rule.php index adc616b129..c79031d807 100644 --- a/app/Support/Twig/Rule.php +++ b/app/Support/Twig/Rule.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Support\Twig; -use Config; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; @@ -32,9 +31,6 @@ use Twig\TwigFunction; */ class Rule extends AbstractExtension { - /** - * @return array - */ public function getFunctions(): array { return [ @@ -44,9 +40,6 @@ class Rule extends AbstractExtension ]; } - /** - * @return TwigFunction - */ public function allJournalTriggers(): TwigFunction { return new TwigFunction( @@ -60,9 +53,6 @@ class Rule extends AbstractExtension ); } - /** - * @return TwigFunction - */ public function allRuleTriggers(): TwigFunction { return new TwigFunction( @@ -72,7 +62,7 @@ class Rule extends AbstractExtension $possibleTriggers = []; foreach ($ruleTriggers as $key) { if ('user_action' !== $key) { - $possibleTriggers[$key] = (string)trans('firefly.rule_trigger_' . $key . '_choice'); + $possibleTriggers[$key] = (string)trans('firefly.rule_trigger_'.$key.'_choice'); } } unset($ruleTriggers); @@ -83,19 +73,16 @@ class Rule extends AbstractExtension ); } - /** - * @return TwigFunction - */ public function allActionTriggers(): TwigFunction { return new TwigFunction( 'allRuleActions', static function () { // array of valid values for actions - $ruleActions = array_keys(Config::get('firefly.rule-actions')); + $ruleActions = array_keys(\Config::get('firefly.rule-actions')); $possibleActions = []; foreach ($ruleActions as $key) { - $possibleActions[$key] = (string)trans('firefly.rule_action_' . $key . '_choice'); + $possibleActions[$key] = (string)trans('firefly.rule_action_'.$key.'_choice'); } unset($ruleActions); asort($possibleActions); diff --git a/app/Support/Twig/TransactionGroupTwig.php b/app/Support/Twig/TransactionGroupTwig.php index 38e3005eb5..8dda66844c 100644 --- a/app/Support/Twig/TransactionGroupTwig.php +++ b/app/Support/Twig/TransactionGroupTwig.php @@ -24,10 +24,10 @@ declare(strict_types=1); namespace FireflyIII\Support\Twig; use Carbon\Carbon; -use DB; use FireflyIII\Models\AccountType; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; +use FireflyIII\Models\TransactionJournalMeta; use FireflyIII\Models\TransactionType; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; @@ -37,10 +37,6 @@ use Twig\TwigFunction; */ class TransactionGroupTwig extends AbstractExtension { - /** - * @return array - * - */ public function getFunctions(): array { return [ @@ -54,8 +50,6 @@ class TransactionGroupTwig extends AbstractExtension /** * Shows the amount for a single journal array. - * - * @return TwigFunction */ public function journalArrayAmount(): TwigFunction { @@ -78,10 +72,6 @@ class TransactionGroupTwig extends AbstractExtension /** * Generate normal amount for transaction from a transaction group. - * - * @param array $array - * - * @return string */ private function normalJournalArrayAmount(array $array): string { @@ -91,39 +81,32 @@ class TransactionGroupTwig extends AbstractExtension $sourceType = $array['source_account_type'] ?? 'invalid'; $amount = $this->signAmount($amount, $type, $sourceType); - if ($type === TransactionType::TRANSFER) { + if (TransactionType::TRANSFER === $type) { $colored = false; } - $result = app('amount')->formatFlat($array['currency_symbol'], (int)$array['currency_decimal_places'], $amount, $colored); - if ($type === TransactionType::TRANSFER) { + $result = app('amount')->formatFlat($array['currency_symbol'], (int)$array['currency_decimal_places'], $amount, $colored); + if (TransactionType::TRANSFER === $type) { $result = sprintf('%s', $result); } return $result; } - /** - * @param string $amount - * @param string $transactionType - * @param string $sourceType - * - * @return string - */ private function signAmount(string $amount, string $transactionType, string $sourceType): string { // withdrawals stay negative - if ($transactionType !== TransactionType::WITHDRAWAL) { + if (TransactionType::WITHDRAWAL !== $transactionType) { $amount = bcmul($amount, '-1'); } // opening balance and it comes from initial balance? its expense. - if ($transactionType === TransactionType::OPENING_BALANCE && AccountType::INITIAL_BALANCE !== $sourceType) { + if (TransactionType::OPENING_BALANCE === $transactionType && AccountType::INITIAL_BALANCE !== $sourceType) { $amount = bcmul($amount, '-1'); } // reconciliation and it comes from reconciliation? - if ($transactionType === TransactionType::RECONCILIATION && AccountType::RECONCILIATION !== $sourceType) { + if (TransactionType::RECONCILIATION === $transactionType && AccountType::RECONCILIATION !== $sourceType) { $amount = bcmul($amount, '-1'); } @@ -132,25 +115,21 @@ class TransactionGroupTwig extends AbstractExtension /** * Generate foreign amount for transaction from a transaction group. - * - * @param array $array - * - * @return string */ private function foreignJournalArrayAmount(array $array): string { - $type = $array['transaction_type_type'] ?? TransactionType::WITHDRAWAL; - $amount = $array['foreign_amount'] ?? '0'; - $colored = true; + $type = $array['transaction_type_type'] ?? TransactionType::WITHDRAWAL; + $amount = $array['foreign_amount'] ?? '0'; + $colored = true; $sourceType = $array['source_account_type'] ?? 'invalid'; $amount = $this->signAmount($amount, $type, $sourceType); - if ($type === TransactionType::TRANSFER) { + if (TransactionType::TRANSFER === $type) { $colored = false; } - $result = app('amount')->formatFlat($array['foreign_currency_symbol'], (int)$array['foreign_currency_decimal_places'], $amount, $colored); - if ($type === TransactionType::TRANSFER) { + $result = app('amount')->formatFlat($array['foreign_currency_symbol'], (int)$array['foreign_currency_decimal_places'], $amount, $colored); + if (TransactionType::TRANSFER === $type) { $result = sprintf('%s', $result); } @@ -159,8 +138,6 @@ class TransactionGroupTwig extends AbstractExtension /** * Shows the amount for a single journal object. - * - * @return TwigFunction */ public function journalObjectAmount(): TwigFunction { @@ -182,10 +159,6 @@ class TransactionGroupTwig extends AbstractExtension /** * Generate normal amount for transaction from a transaction group. - * - * @param TransactionJournal $journal - * - * @return string */ private function normalJournalObjectAmount(TransactionJournal $journal): string { @@ -196,24 +169,19 @@ class TransactionGroupTwig extends AbstractExtension $colored = true; $sourceType = $first->account()->first()->accountType()->first()->type; - $amount = $this->signAmount($amount, $type, $sourceType); + $amount = $this->signAmount($amount, $type, $sourceType); - if ($type === TransactionType::TRANSFER) { + if (TransactionType::TRANSFER === $type) { $colored = false; } - $result = app('amount')->formatFlat($currency->symbol, (int)$currency->decimal_places, $amount, $colored); - if ($type === TransactionType::TRANSFER) { + $result = app('amount')->formatFlat($currency->symbol, $currency->decimal_places, $amount, $colored); + if (TransactionType::TRANSFER === $type) { $result = sprintf('%s', $result); } return $result; } - /** - * @param TransactionJournal $journal - * - * @return bool - */ private function journalObjectHasForeign(TransactionJournal $journal): bool { /** @var Transaction $first */ @@ -224,14 +192,11 @@ class TransactionGroupTwig extends AbstractExtension /** * Generate foreign amount for journal from a transaction group. - * - * @param TransactionJournal $journal - * - * @return string */ private function foreignJournalObjectAmount(TransactionJournal $journal): string { - $type = $journal->transactionType->type; + $type = $journal->transactionType->type; + /** @var Transaction $first */ $first = $journal->transactions()->where('amount', '<', 0)->first(); $currency = $first->foreignCurrency; @@ -239,51 +204,48 @@ class TransactionGroupTwig extends AbstractExtension $colored = true; $sourceType = $first->account()->first()->accountType()->first()->type; - $amount = $this->signAmount($amount, $type, $sourceType); + $amount = $this->signAmount($amount, $type, $sourceType); - if ($type === TransactionType::TRANSFER) { + if (TransactionType::TRANSFER === $type) { $colored = false; } - $result = app('amount')->formatFlat($currency->symbol, (int)$currency->decimal_places, $amount, $colored); - if ($type === TransactionType::TRANSFER) { + $result = app('amount')->formatFlat($currency->symbol, $currency->decimal_places, $amount, $colored); + if (TransactionType::TRANSFER === $type) { $result = sprintf('%s', $result); } return $result; } - /** - * @return TwigFunction - */ public function journalHasMeta(): TwigFunction { return new TwigFunction( 'journalHasMeta', static function (int $journalId, string $metaField) { - $count = DB::table('journal_meta') - ->where('name', $metaField) - ->where('transaction_journal_id', $journalId) - ->whereNull('deleted_at') - ->count(); + $count = \DB::table('journal_meta') + ->where('name', $metaField) + ->where('transaction_journal_id', $journalId) + ->whereNull('deleted_at') + ->count() + ; return 1 === $count; } ); } - /** - * @return TwigFunction - */ public function journalGetMetaDate(): TwigFunction { return new TwigFunction( 'journalGetMetaDate', static function (int $journalId, string $metaField) { - $entry = DB::table('journal_meta') - ->where('name', $metaField) - ->where('transaction_journal_id', $journalId) - ->whereNull('deleted_at') - ->first(); + /** @var null|TransactionJournalMeta $entry */ + $entry = \DB::table('journal_meta') + ->where('name', $metaField) + ->where('transaction_journal_id', $journalId) + ->whereNull('deleted_at') + ->first() + ; if (null === $entry) { return today(config('app.timezone')); } @@ -293,19 +255,18 @@ class TransactionGroupTwig extends AbstractExtension ); } - /** - * @return TwigFunction - */ public function journalGetMetaField(): TwigFunction { return new TwigFunction( 'journalGetMetaField', static function (int $journalId, string $metaField) { - $entry = DB::table('journal_meta') - ->where('name', $metaField) - ->where('transaction_journal_id', $journalId) - ->whereNull('deleted_at') - ->first(); + /** @var null|TransactionJournalMeta $entry */ + $entry = \DB::table('journal_meta') + ->where('name', $metaField) + ->where('transaction_journal_id', $journalId) + ->whereNull('deleted_at') + ->first() + ; if (null === $entry) { return ''; } diff --git a/app/Support/Twig/Translation.php b/app/Support/Twig/Translation.php index 11b420f0be..eaeac5ca6c 100644 --- a/app/Support/Twig/Translation.php +++ b/app/Support/Twig/Translation.php @@ -32,9 +32,6 @@ use Twig\TwigFunction; */ class Translation extends AbstractExtension { - /** - * @return array - */ public function getFilters(): array { return [ @@ -48,9 +45,6 @@ class Translation extends AbstractExtension ]; } - /** - * {@inheritdoc} - */ public function getFunctions(): array { return [ @@ -58,9 +52,6 @@ class Translation extends AbstractExtension ]; } - /** - * @return TwigFunction - */ public function journalLinkTranslation(): TwigFunction { return new TwigFunction( diff --git a/app/Support/Validation/ValidatesAmountsTrait.php b/app/Support/Validation/ValidatesAmountsTrait.php new file mode 100644 index 0000000000..6529daa23b --- /dev/null +++ b/app/Support/Validation/ValidatesAmountsTrait.php @@ -0,0 +1,67 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Support\Validation; + +trait ValidatesAmountsTrait +{ + // 19-09-2020: my wedding day + protected const string BIG_AMOUNT = '10019092020'; + + final protected function emptyString(string $value): bool + { + return '' === $value; + } + + final protected function isValidNumber(string $value): bool + { + return is_numeric($value); + } + + final protected function lessOrEqualToZero(string $value): bool + { + return -1 === bccomp($value, '0') || 0 === bccomp($value, '0'); + } + + final protected function lessThanLots(string $value): bool + { + $amount = bcmul('-1', self::BIG_AMOUNT); + + return -1 === bccomp($value, $amount) || 0 === bccomp($value, $amount); + } + + final protected function moreThanLots(string $value): bool + { + return 1 === bccomp($value, self::BIG_AMOUNT) || 0 === bccomp($value, self::BIG_AMOUNT); + } + + final protected function scientificNumber(string $value): bool + { + return str_contains(strtoupper($value), 'E'); + } + + final protected function zeroOrMore(string $value): bool + { + return 1 === bccomp($value, '0') || 0 === bccomp($value, '0'); + } +} diff --git a/app/TransactionRules/Actions/ActionInterface.php b/app/TransactionRules/Actions/ActionInterface.php index c8bd82a992..8a1ffdd5ae 100644 --- a/app/TransactionRules/Actions/ActionInterface.php +++ b/app/TransactionRules/Actions/ActionInterface.php @@ -31,10 +31,6 @@ interface ActionInterface /** * Execute the action on an array. Returns "true" if the action was a success and the action * was applied. Returns false if otherwise. - * - * @param array $journal - * - * @return bool */ public function actOnArray(array $journal): bool; } diff --git a/app/TransactionRules/Actions/AddTag.php b/app/TransactionRules/Actions/AddTag.php index 45da90e91e..20d1adfce6 100644 --- a/app/TransactionRules/Actions/AddTag.php +++ b/app/TransactionRules/Actions/AddTag.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Factory\TagFactory; @@ -32,7 +31,6 @@ use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Class AddTag. @@ -44,8 +42,6 @@ class AddTag implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -53,17 +49,17 @@ class AddTag implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { // journal has this tag maybe? /** @var TagFactory $factory */ $factory = app(TagFactory::class); - $factory->setUser(User::find($journal['user_id'])); + + /** @var User $user */ + $user = User::find($journal['user_id']); + $factory->setUser($user); $tagName = $this->evaluator->evaluate($journal); - $tag = $factory->findOrCreate($tagName); + $tag = $factory->findOrCreate($tagName); if (null === $tag) { // could not find, could not create tag. @@ -72,21 +68,24 @@ class AddTag implements ActionInterface return false; } - $count = DB::table('tag_transaction_journal') + $count = \DB::table('tag_transaction_journal') ->where('tag_id', $tag->id) ->where('transaction_journal_id', $journal['transaction_journal_id']) ->count(); if (0 === $count) { // add to journal: - DB::table('tag_transaction_journal')->insert(['tag_id' => $tag->id, 'transaction_journal_id' => $journal['transaction_journal_id']]); - Log::debug(sprintf('RuleAction AddTag. Added tag #%d ("%s") to journal %d.', $tag->id, $tag->tag, $journal['transaction_journal_id'])); + \DB::table('tag_transaction_journal')->insert(['tag_id' => $tag->id, 'transaction_journal_id' => $journal['transaction_journal_id']]); + app('log')->debug(sprintf('RuleAction AddTag. Added tag #%d ("%s") to journal %d.', $tag->id, $tag->tag, $journal['transaction_journal_id'])); + + /** @var TransactionJournal $object */ $object = TransactionJournal::find($journal['transaction_journal_id']); // event for audit log entry event(new TriggeredAuditLog($this->action->rule, $object, 'add_tag', null, $tag->tag)); + return true; } - Log::debug( + app('log')->debug( sprintf('RuleAction AddTag fired but tag %d ("%s") was already added to journal %d.', $tag->id, $tag->tag, $journal['transaction_journal_id']) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.tag_already_added', ['tag' => $tagName]))); diff --git a/app/TransactionRules/Actions/AppendDescription.php b/app/TransactionRules/Actions/AppendDescription.php index 46eef629af..5f8fa29d66 100644 --- a/app/TransactionRules/Actions/AppendDescription.php +++ b/app/TransactionRules/Actions/AppendDescription.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; @@ -40,8 +39,6 @@ class AppendDescription implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -49,18 +46,15 @@ class AppendDescription implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { $actionValue = $this->evaluator->evaluate($journal); - $description = sprintf('%s%s', $journal['description'], $actionValue); - DB::table('transaction_journals')->where('id', $journal['transaction_journal_id'])->limit(1)->update(['description' => $description]); + $description = sprintf('%s %s', $journal['description'], $actionValue); + \DB::table('transaction_journals')->where('id', $journal['transaction_journal_id'])->limit(1)->update(['description' => $description]); // event for audit log entry /** @var TransactionJournal $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); event(new TriggeredAuditLog($this->action->rule, $object, 'update_description', $journal['description'], $description)); return true; diff --git a/app/TransactionRules/Actions/AppendDescriptionToNotes.php b/app/TransactionRules/Actions/AppendDescriptionToNotes.php index a10e442140..eb5e32815c 100644 --- a/app/TransactionRules/Actions/AppendDescriptionToNotes.php +++ b/app/TransactionRules/Actions/AppendDescriptionToNotes.php @@ -29,7 +29,6 @@ use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\Note; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; -use Illuminate\Support\Facades\Log; /** * Class AppendDescriptionToNotes @@ -40,29 +39,25 @@ class AppendDescriptionToNotes implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - /** @var TransactionJournal $journal */ + /** @var null|TransactionJournal $object */ $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); if (null === $object) { - Log::error(sprintf('No journal #%d belongs to user #%d.', $journal['transaction_journal_id'], $journal['user_id'])); - event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.journal_other_user'))); + app('log')->error(sprintf('No journal #%d belongs to user #%d.', $journal['transaction_journal_id'], $journal['user_id'])); + event(new RuleActionFailedOnArray($this->action, $journal, (string)trans('rules.journal_other_user'))); + return false; } - $note = $object->notes()->first(); + $note = $object->notes()->first(); if (null === $note) { - $note = new Note(); + $note = new Note(); $note->noteable()->associate($object); $note->text = ''; } @@ -73,12 +68,13 @@ class AppendDescriptionToNotes implements ActionInterface if ('' === $note->text) { $note->text = (string)$object->description; } - $after = $note->text; + $after = $note->text; // event for audit log entry event(new TriggeredAuditLog($this->action->rule, $object, 'update_notes', $before, $after)); $note->save(); + return true; } } diff --git a/app/TransactionRules/Actions/AppendNotes.php b/app/TransactionRules/Actions/AppendNotes.php index 49d7e6e71f..922be054d2 100644 --- a/app/TransactionRules/Actions/AppendNotes.php +++ b/app/TransactionRules/Actions/AppendNotes.php @@ -29,7 +29,6 @@ use FireflyIII\Models\Note; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; -use Illuminate\Support\Facades\Log; /** * Class AppendNotes. @@ -41,8 +40,6 @@ class AppendNotes implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -50,13 +47,10 @@ class AppendNotes implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { $actionValue = $this->evaluator->evaluate($journal); - $dbNote = Note::where('noteable_id', (int)$journal['transaction_journal_id']) + $dbNote = Note::where('noteable_id', (int)$journal['transaction_journal_id']) ->where('noteable_type', TransactionJournal::class) ->first(['notes.*']); if (null === $dbNote) { @@ -65,14 +59,14 @@ class AppendNotes implements ActionInterface $dbNote->noteable_type = TransactionJournal::class; $dbNote->text = ''; } - Log::debug(sprintf('RuleAction AppendNotes appended "%s" to "%s".', $actionValue, $dbNote->text)); + app('log')->debug(sprintf('RuleAction AppendNotes appended "%s" to "%s".', $actionValue, $dbNote->text)); $before = $dbNote->text; $text = sprintf('%s%s', $dbNote->text, $actionValue); $dbNote->text = $text; $dbNote->save(); /** @var TransactionJournal $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); event(new TriggeredAuditLog($this->action->rule, $object, 'update_notes', $before, $text)); diff --git a/app/TransactionRules/Actions/AppendNotesToDescription.php b/app/TransactionRules/Actions/AppendNotesToDescription.php index 93469788a8..99caaaeb0d 100644 --- a/app/TransactionRules/Actions/AppendNotesToDescription.php +++ b/app/TransactionRules/Actions/AppendNotesToDescription.php @@ -30,7 +30,6 @@ use FireflyIII\Models\Note; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Support\Request\ConvertsDataTypes; -use Illuminate\Support\Facades\Log; /** * Class AppendNotesToDescription @@ -43,51 +42,49 @@ class AppendNotesToDescription implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - Log::debug('Now in AppendNotesToDescription'); - /** @var TransactionJournal $object */ + app('log')->debug('Now in AppendNotesToDescription'); + + /** @var null|TransactionJournal $object */ $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); if (null === $object) { - Log::error(sprintf('No journal #%d belongs to user #%d.', $journal['transaction_journal_id'], $journal['user_id'])); + app('log')->error(sprintf('No journal #%d belongs to user #%d.', $journal['transaction_journal_id'], $journal['user_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.journal_other_user'))); + return false; } - $note = $object->notes()->first(); + $note = $object->notes()->first(); if (null === $note) { - Log::debug('Journal has no notes.'); - $note = new Note(); + app('log')->debug('Journal has no notes.'); + $note = new Note(); $note->noteable()->associate($object); $note->text = ''; } // only append if there is something to append if ('' !== $note->text) { $before = $object->description; - $object->description = trim(sprintf('%s %s', $object->description, (string)$this->clearString($note->text, false))); + $object->description = trim(sprintf('%s %s', $object->description, (string)$this->clearString($note->text))); $object->save(); - Log::debug(sprintf('Journal description is updated to "%s".', $object->description)); + app('log')->debug(sprintf('Journal description is updated to "%s".', $object->description)); event(new TriggeredAuditLog($this->action->rule, $object, 'update_description', $before, $object->description)); return true; } event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.new_notes_empty'))); + return false; } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function get(string $key, mixed $default = null): mixed { @@ -95,7 +92,7 @@ class AppendNotesToDescription implements ActionInterface } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function has(mixed $key): mixed { diff --git a/app/TransactionRules/Actions/ClearBudget.php b/app/TransactionRules/Actions/ClearBudget.php index 2c79a535fb..b6ca1af2e0 100644 --- a/app/TransactionRules/Actions/ClearBudget.php +++ b/app/TransactionRules/Actions/ClearBudget.php @@ -23,12 +23,10 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; -use Illuminate\Support\Facades\Log; /** * Class ClearBudget. @@ -39,33 +37,29 @@ class ClearBudget implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { /** @var TransactionJournal $object */ $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); $budget = $object->budgets()->first(); if (null === $budget) { - Log::debug(sprintf('RuleAction ClearBudget, no budget in journal #%d.', $journal['transaction_journal_id'])); + app('log')->debug(sprintf('RuleAction ClearBudget, no budget in journal #%d.', $journal['transaction_journal_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.journal_already_no_budget'))); + return false; } - DB::table('budget_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); + \DB::table('budget_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); event(new TriggeredAuditLog($this->action->rule, $object, 'clear_budget', $budget->name, null)); - Log::debug(sprintf('RuleAction ClearBudget removed all budgets from journal #%d.', $journal['transaction_journal_id'])); + app('log')->debug(sprintf('RuleAction ClearBudget removed all budgets from journal #%d.', $journal['transaction_journal_id'])); return true; } diff --git a/app/TransactionRules/Actions/ClearCategory.php b/app/TransactionRules/Actions/ClearCategory.php index 22b9df33f7..fe87dd3c3f 100644 --- a/app/TransactionRules/Actions/ClearCategory.php +++ b/app/TransactionRules/Actions/ClearCategory.php @@ -23,12 +23,10 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; -use Illuminate\Support\Facades\Log; /** * Class ClearCategory. @@ -39,33 +37,29 @@ class ClearCategory implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { /** @var TransactionJournal $object */ $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); $category = $object->categories()->first(); if (null === $category) { - Log::debug(sprintf('RuleAction ClearCategory, no category in journal #%d.', $journal['transaction_journal_id'])); + app('log')->debug(sprintf('RuleAction ClearCategory, no category in journal #%d.', $journal['transaction_journal_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.journal_already_no_category'))); + return false; } - DB::table('category_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); + \DB::table('category_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); event(new TriggeredAuditLog($this->action->rule, $object, 'clear_category', $category->name, null)); - Log::debug(sprintf('RuleAction ClearCategory removed all categories from journal #%d.', $journal['transaction_journal_id'])); + app('log')->debug(sprintf('RuleAction ClearCategory removed all categories from journal #%d.', $journal['transaction_journal_id'])); return true; } diff --git a/app/TransactionRules/Actions/ClearNotes.php b/app/TransactionRules/Actions/ClearNotes.php index d67a1b3d90..61d588d542 100644 --- a/app/TransactionRules/Actions/ClearNotes.php +++ b/app/TransactionRules/Actions/ClearNotes.php @@ -23,12 +23,11 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; +use FireflyIII\Models\Note; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; -use Illuminate\Support\Facades\Log; /** * Class ClearNotes. @@ -39,33 +38,33 @@ class ClearNotes implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { + /** @var TransactionJournal $object */ $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + + /** @var null|Note $notes */ $notes = $object->notes()->first(); if (null === $notes) { - Log::debug(sprintf('RuleAction ClearNotes, journal #%d has no notes.', $journal['transaction_journal_id'])); + app('log')->debug(sprintf('RuleAction ClearNotes, journal #%d has no notes.', $journal['transaction_journal_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.journal_already_no_notes'))); + return false; } $before = $notes->text; - DB::table('notes') - ->where('noteable_id', $journal['transaction_journal_id']) - ->where('noteable_type', TransactionJournal::class) - ->delete(); - Log::debug(sprintf('RuleAction ClearNotes removed all notes from journal #%d.', $journal['transaction_journal_id'])); + \DB::table('notes') + ->where('noteable_id', $journal['transaction_journal_id']) + ->where('noteable_type', TransactionJournal::class) + ->delete() + ; + app('log')->debug(sprintf('RuleAction ClearNotes removed all notes from journal #%d.', $journal['transaction_journal_id'])); event(new TriggeredAuditLog($this->action->rule, $object, 'clear_notes', $before, null)); diff --git a/app/TransactionRules/Actions/ConvertToDeposit.php b/app/TransactionRules/Actions/ConvertToDeposit.php index bd13cfa406..fedea72779 100644 --- a/app/TransactionRules/Actions/ConvertToDeposit.php +++ b/app/TransactionRules/Actions/ConvertToDeposit.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Exceptions\FireflyException; @@ -37,11 +36,8 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; -use Illuminate\Support\Facades\Log; -use JsonException; /** - * * Class ConvertToDeposit */ class ConvertToDeposit implements ActionInterface @@ -51,8 +47,6 @@ class ConvertToDeposit implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -60,45 +54,46 @@ class ConvertToDeposit implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { $actionValue = $this->evaluator->evaluate($journal); // make object from array (so the data is fresh). - /** @var TransactionJournal|null $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + /** @var null|TransactionJournal $object */ + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); if (null === $object) { - Log::error(sprintf('Cannot find journal #%d, cannot convert to deposit.', $journal['transaction_journal_id'])); + app('log')->error(sprintf('Cannot find journal #%d, cannot convert to deposit.', $journal['transaction_journal_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.journal_not_found'))); + return false; } $groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); if ($groupCount > 1) { - Log::error(sprintf('Group #%d has more than one transaction in it, cannot convert to deposit.', $journal['transaction_group_id'])); + app('log')->error(sprintf('Group #%d has more than one transaction in it, cannot convert to deposit.', $journal['transaction_group_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.split_group'))); + return false; } - Log::debug(sprintf('Convert journal #%d to deposit.', $journal['transaction_journal_id'])); - $type = $object->transactionType->type; + app('log')->debug(sprintf('Convert journal #%d to deposit.', $journal['transaction_journal_id'])); + $type = $object->transactionType->type; if (TransactionType::DEPOSIT === $type) { - Log::error(sprintf('Journal #%d is already a deposit (rule #%d).', $journal['transaction_journal_id'], $this->action->rule_id)); + app('log')->error(sprintf('Journal #%d is already a deposit (rule #%d).', $journal['transaction_journal_id'], $this->action->rule_id)); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.is_already_deposit'))); + return false; } if (TransactionType::WITHDRAWAL === $type) { - Log::debug('Going to transform a withdrawal to a deposit.'); + app('log')->debug('Going to transform a withdrawal to a deposit.'); try { $res = $this->convertWithdrawalArray($object, $actionValue); - } catch (JsonException | FireflyException $e) { - Log::debug('Could not convert withdrawal to deposit.'); - Log::error($e->getMessage()); + } catch (FireflyException $e) { + app('log')->debug('Could not convert withdrawal to deposit.'); + app('log')->error($e->getMessage()); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.complex_error'))); + return false; } @@ -107,14 +102,15 @@ class ConvertToDeposit implements ActionInterface return $res; } if (TransactionType::TRANSFER === $type) { - Log::debug('Going to transform a transfer to a deposit.'); + app('log')->debug('Going to transform a transfer to a deposit.'); try { - $res = $this->convertTransferArray($object); - } catch (JsonException | FireflyException $e) { - Log::debug('Could not convert transfer to deposit.'); - Log::error($e->getMessage()); + $res = $this->convertTransferArray($object, $actionValue); + } catch (FireflyException $e) { + app('log')->debug('Could not convert transfer to deposit.'); + app('log')->error($e->getMessage()); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.complex_error'))); + return false; } event(new TriggeredAuditLog($this->action->rule, $object, 'update_transaction_type', TransactionType::TRANSFER, TransactionType::DEPOSIT)); @@ -122,6 +118,7 @@ class ConvertToDeposit implements ActionInterface return $res; } event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.unsupported_transaction_type_deposit', ['type' => $type]))); + return false; } @@ -129,29 +126,26 @@ class ConvertToDeposit implements ActionInterface * Input is a withdrawal from A to B * Is converted to a deposit from C to A. * - * @param TransactionJournal $journal - * - * @return bool * @throws FireflyException - * @throws JsonException */ private function convertWithdrawalArray(TransactionJournal $journal, string $actionValue): bool { - $user = $journal->user; + $user = $journal->user; + // find or create revenue account. /** @var AccountFactory $factory */ - $factory = app(AccountFactory::class); + $factory = app(AccountFactory::class); $factory->setUser($user); - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); $repository->setUser($user); - $destAccount = $this->getDestinationAccount($journal); - $sourceAccount = $this->getSourceAccount($journal); + $destAccount = $this->getDestinationAccount($journal); + $sourceAccount = $this->getSourceAccount($journal); // get the action value, or use the original destination name in case the action value is empty: // this becomes a new or existing (revenue) account, which is the source of the new deposit. - $opposingName = '' === $actionValue ? $destAccount->name : $actionValue; + $opposingName = '' === $actionValue ? $destAccount->name : $actionValue; // we check all possible source account types if one exists: $validTypes = config('firefly.expected_source_types.source.Deposit'); $opposingAccount = $repository->findByName($opposingName, $validTypes); @@ -159,61 +153,57 @@ class ConvertToDeposit implements ActionInterface $opposingAccount = $factory->findOrCreate($opposingName, AccountType::REVENUE); } - Log::debug(sprintf('ConvertToDeposit. Action value is "%s", new opposing name is "%s"', $actionValue, $opposingAccount->name)); + app('log')->debug(sprintf('ConvertToDeposit. Action value is "%s", new opposing name is "%s"', $actionValue, $opposingAccount->name)); // update the source transaction and put in the new revenue ID. - DB::table('transactions') + \DB::table('transactions') ->where('transaction_journal_id', '=', $journal->id) ->where('amount', '<', 0) ->update(['account_id' => $opposingAccount->id]); // update the destination transaction and put in the original source account ID. - DB::table('transactions') + \DB::table('transactions') ->where('transaction_journal_id', '=', $journal->id) ->where('amount', '>', 0) ->update(['account_id' => $sourceAccount->id]); // change transaction type of journal: - $newType = TransactionType::whereType(TransactionType::DEPOSIT)->first(); + $newType = TransactionType::whereType(TransactionType::DEPOSIT)->first(); - DB::table('transaction_journals') + \DB::table('transaction_journals') ->where('id', '=', $journal->id) ->update(['transaction_type_id' => $newType->id, 'bill_id' => null]); - Log::debug('Converted withdrawal to deposit.'); + app('log')->debug('Converted withdrawal to deposit.'); return true; } /** - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ private function getDestinationAccount(TransactionJournal $journal): Account { - /** @var Transaction|null $destAccount */ + /** @var null|Transaction $destAccount */ $destAccount = $journal->transactions()->where('amount', '>', 0)->first(); if (null === $destAccount) { throw new FireflyException(sprintf('Cannot find destination transaction for journal #%d', $journal->id)); } + return $destAccount->account; } /** - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ private function getSourceAccount(TransactionJournal $journal): Account { - /** @var Transaction|null $sourceTransaction */ + /** @var null|Transaction $sourceTransaction */ $sourceTransaction = $journal->transactions()->where('amount', '<', 0)->first(); if (null === $sourceTransaction) { throw new FireflyException(sprintf('Cannot find source transaction for journal #%d', $journal->id)); } + return $sourceTransaction->account; } @@ -222,28 +212,25 @@ class ConvertToDeposit implements ActionInterface * Output is a deposit from C to B. * The source account is replaced. * - * @param TransactionJournal $journal - * - * @return bool * @throws FireflyException - * @throws JsonException */ - private function convertTransferArray(TransactionJournal $journal): bool + private function convertTransferArray(TransactionJournal $journal, string $actionValue): bool { - $user = $journal->user; + $user = $journal->user; + // find or create revenue account. /** @var AccountFactory $factory */ - $factory = app(AccountFactory::class); + $factory = app(AccountFactory::class); $factory->setUser($user); - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); $repository->setUser($user); - $sourceAccount = $this->getSourceAccount($journal); + $sourceAccount = $this->getSourceAccount($journal); // get the action value, or use the original source name in case the action value is empty: // this becomes a new or existing (revenue) account, which is the source of the new deposit. - $opposingName = '' === $actionValue ? $sourceAccount->name : $actionValue; + $opposingName = '' === $actionValue ? $sourceAccount->name : $actionValue; // we check all possible source account types if one exists: $validTypes = config('firefly.expected_source_types.source.Deposit'); $opposingAccount = $repository->findByName($opposingName, $validTypes); @@ -251,22 +238,22 @@ class ConvertToDeposit implements ActionInterface $opposingAccount = $factory->findOrCreate($opposingName, AccountType::REVENUE); } - Log::debug(sprintf('ConvertToDeposit. Action value is "%s", revenue name is "%s"', $actionValue, $opposingAccount->name)); + app('log')->debug(sprintf('ConvertToDeposit. Action value is "%s", revenue name is "%s"', $this->action->action_value, $opposingAccount->name)); // update source transaction(s) to be revenue account - DB::table('transactions') + \DB::table('transactions') ->where('transaction_journal_id', '=', $journal->id) ->where('amount', '<', 0) ->update(['account_id' => $opposingAccount->id]); // change transaction type of journal: - $newType = TransactionType::whereType(TransactionType::DEPOSIT)->first(); + $newType = TransactionType::whereType(TransactionType::DEPOSIT)->first(); - DB::table('transaction_journals') + \DB::table('transaction_journals') ->where('id', '=', $journal->id) ->update(['transaction_type_id' => $newType->id, 'bill_id' => null]); - Log::debug('Converted transfer to deposit.'); + app('log')->debug('Converted transfer to deposit.'); return true; } diff --git a/app/TransactionRules/Actions/ConvertToTransfer.php b/app/TransactionRules/Actions/ConvertToTransfer.php index 7cd5fd887b..559125eced 100644 --- a/app/TransactionRules/Actions/ConvertToTransfer.php +++ b/app/TransactionRules/Actions/ConvertToTransfer.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\Model\Rule\RuleActionFailedOnObject; use FireflyIII\Events\TriggeredAuditLog; @@ -36,10 +35,8 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; -use Illuminate\Support\Facades\Log; /** - * * Class ConvertToTransfer */ class ConvertToTransfer implements ActionInterface @@ -49,42 +46,43 @@ class ConvertToTransfer implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { - $this->action = $action; + $this->action = $action; $this->evaluator = $evaluator; } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.NPathComplexity) */ public function actOnArray(array $journal): bool { $actionValue = $this->evaluator->evaluate($journal); // make object from array (so the data is fresh). - /** @var TransactionJournal|null $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + /** @var null|TransactionJournal $object */ + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); if (null === $object) { - Log::error(sprintf('Cannot find journal #%d, cannot convert to transfer.', $journal['transaction_journal_id'])); + app('log')->error(sprintf('Cannot find journal #%d, cannot convert to transfer.', $journal['transaction_journal_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.journal_not_found'))); + return false; } - $groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); + $groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); if ($groupCount > 1) { - Log::error(sprintf('Group #%d has more than one transaction in it, cannot convert to transfer.', $journal['transaction_group_id'])); + app('log')->error(sprintf('Group #%d has more than one transaction in it, cannot convert to transfer.', $journal['transaction_group_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.split_group'))); + return false; } - $type = $object->transactionType->type; - $user = $object->user; - $journalId = (int)$object->id; + $type = $object->transactionType->type; + $user = $object->user; + $journalId = $object->id; if (TransactionType::TRANSFER === $type) { - Log::error( + app('log')->error( sprintf('Journal #%d is already a transfer so cannot be converted (rule #%d).', $object->id, $this->action->rule_id) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.is_already_transfer'))); @@ -93,12 +91,13 @@ class ConvertToTransfer implements ActionInterface } if (TransactionType::DEPOSIT !== $type && TransactionType::WITHDRAWAL !== $type) { event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.unsupported_transaction_type_transfer', ['type' => $type]))); + return false; } // find the asset account in the action value. /** @var AccountRepositoryInterface $repository */ - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); $repository->setUser($user); $expectedType = null; if (TransactionType::WITHDRAWAL === $type) { @@ -109,10 +108,10 @@ class ConvertToTransfer implements ActionInterface $expectedType = $this->getDestinationType($journalId); // Deposit? Replace source with account with same type as destination. } - $opposing = $repository->findByName($actionValue, [$expectedType]); + $opposing = $repository->findByName($actionValue, [$expectedType]); if (null === $opposing) { - Log::error( + app('log')->error( sprintf( 'Journal #%d cannot be converted because no valid %s account with name "%s" exists (rule #%d).', $expectedType, @@ -127,68 +126,65 @@ class ConvertToTransfer implements ActionInterface } if (TransactionType::WITHDRAWAL === $type) { - Log::debug('Going to transform a withdrawal to a transfer.'); + app('log')->debug('Going to transform a withdrawal to a transfer.'); + try { $res = $this->convertWithdrawalArray($object, $opposing); } catch (FireflyException $e) { - Log::debug('Could not convert withdrawal to transfer.'); - Log::error($e->getMessage()); + app('log')->debug('Could not convert withdrawal to transfer.'); + app('log')->error($e->getMessage()); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.complex_error'))); + return false; } if (false !== $res) { event(new TriggeredAuditLog($this->action->rule, $object, 'update_transaction_type', TransactionType::WITHDRAWAL, TransactionType::TRANSFER)); } + return $res; } - if (TransactionType::DEPOSIT === $type) { - Log::debug('Going to transform a deposit to a transfer.'); - try { - $res = $this->convertDepositArray($object, $opposing); - } catch (FireflyException $e) { - Log::debug('Could not convert deposit to transfer.'); - Log::error($e->getMessage()); - event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.complex_error'))); - return false; - } - if (false !== $res) { - event(new TriggeredAuditLog($this->action->rule, $object, 'update_transaction_type', TransactionType::DEPOSIT, TransactionType::TRANSFER)); - } - return $res; + // can only be a deposit at this point. + app('log')->debug('Going to transform a deposit to a transfer.'); + + try { + $res = $this->convertDepositArray($object, $opposing); + } catch (FireflyException $e) { + app('log')->debug('Could not convert deposit to transfer.'); + app('log')->error($e->getMessage()); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.complex_error'))); + + return false; } - event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.unsupported_transaction_type_transfer', ['type' => $type]))); - return false; + if (false !== $res) { + event(new TriggeredAuditLog($this->action->rule, $object, 'update_transaction_type', TransactionType::DEPOSIT, TransactionType::TRANSFER)); + } + + return $res; } - /** - * @param int $journalId - * - * @return string - */ private function getSourceType(int $journalId): string { - /** @var TransactionJournal $journal */ + /** @var null|TransactionJournal $journal */ $journal = TransactionJournal::find($journalId); if (null === $journal) { - Log::error(sprintf('Journal #%d does not exist. Cannot convert to transfer.', $journalId)); + app('log')->error(sprintf('Journal #%d does not exist. Cannot convert to transfer.', $journalId)); + return ''; } + return (string)$journal->transactions()->where('amount', '<', 0)->first()?->account?->accountType?->type; } - /** - * @param int $journalId - * - * @return string - */ private function getDestinationType(int $journalId): string { - /** @var TransactionJournal $journal */ + /** @var null|TransactionJournal $journal */ $journal = TransactionJournal::find($journalId); if (null === $journal) { - Log::error(sprintf('Journal #%d does not exist. Cannot convert to transfer.', $journalId)); + app('log')->error(sprintf('Journal #%d does not exist. Cannot convert to transfer.', $journalId)); + return ''; } + return (string)$journal->transactions()->where('amount', '>', 0)->first()?->account?->accountType?->type; } @@ -197,17 +193,13 @@ class ConvertToTransfer implements ActionInterface * We replace the Expense with another asset. * So this replaces the destination * - * @param TransactionJournal $journal - * @param Account $opposing - * - * @return bool * @throws FireflyException */ private function convertWithdrawalArray(TransactionJournal $journal, Account $opposing): bool { $sourceAccount = $this->getSourceAccount($journal); - if ((int)$sourceAccount->id === (int)$opposing->id) { - Log::error( + if ($sourceAccount->id === $opposing->id) { + app('log')->error( vsprintf( 'Journal #%d has already has "%s" as a source asset. ConvertToTransfer failed. (rule #%d).', [$journal->id, $opposing->name, $this->action->rule_id] @@ -219,36 +211,34 @@ class ConvertToTransfer implements ActionInterface } // update destination transaction: - DB::table('transactions') + \DB::table('transactions') ->where('transaction_journal_id', '=', $journal->id) ->where('amount', '>', 0) ->update(['account_id' => $opposing->id]); // change transaction type of journal: - $newType = TransactionType::whereType(TransactionType::TRANSFER)->first(); + $newType = TransactionType::whereType(TransactionType::TRANSFER)->first(); - DB::table('transaction_journals') + \DB::table('transaction_journals') ->where('id', '=', $journal->id) ->update(['transaction_type_id' => $newType->id, 'bill_id' => null]); - Log::debug('Converted withdrawal to transfer.'); + app('log')->debug('Converted withdrawal to transfer.'); return true; } /** - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ private function getSourceAccount(TransactionJournal $journal): Account { - /** @var Transaction|null $sourceTransaction */ + /** @var null|Transaction $sourceTransaction */ $sourceTransaction = $journal->transactions()->where('amount', '<', 0)->first(); if (null === $sourceTransaction) { throw new FireflyException(sprintf('Cannot find source transaction for journal #%d', $journal->id)); } + return $sourceTransaction->account; } @@ -256,17 +246,13 @@ class ConvertToTransfer implements ActionInterface * A deposit is from Revenue to Asset. * We replace the Revenue with another asset. * - * @param TransactionJournal $journal - * @param Account $opposing - * - * @return bool * @throws FireflyException */ private function convertDepositArray(TransactionJournal $journal, Account $opposing): bool { $destAccount = $this->getDestinationAccount($journal); - if ((int)$destAccount->id === (int)$opposing->id) { - Log::error( + if ($destAccount->id === $opposing->id) { + app('log')->error( vsprintf( 'Journal #%d has already has "%s" as a destination asset. ConvertToTransfer failed. (rule #%d).', [$journal->id, $opposing->name, $this->action->rule_id] @@ -278,36 +264,34 @@ class ConvertToTransfer implements ActionInterface } // update source transaction: - DB::table('transactions') + \DB::table('transactions') ->where('transaction_journal_id', '=', $journal->id) ->where('amount', '<', 0) ->update(['account_id' => $opposing->id]); // change transaction type of journal: - $newType = TransactionType::whereType(TransactionType::TRANSFER)->first(); + $newType = TransactionType::whereType(TransactionType::TRANSFER)->first(); - DB::table('transaction_journals') + \DB::table('transaction_journals') ->where('id', '=', $journal->id) ->update(['transaction_type_id' => $newType->id, 'bill_id' => null]); - Log::debug('Converted deposit to transfer.'); + app('log')->debug('Converted deposit to transfer.'); return true; } /** - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ private function getDestinationAccount(TransactionJournal $journal): Account { - /** @var Transaction|null $destAccount */ + /** @var null|Transaction $destAccount */ $destAccount = $journal->transactions()->where('amount', '>', 0)->first(); if (null === $destAccount) { throw new FireflyException(sprintf('Cannot find destination transaction for journal #%d', $journal->id)); } + return $destAccount->account; } } diff --git a/app/TransactionRules/Actions/ConvertToWithdrawal.php b/app/TransactionRules/Actions/ConvertToWithdrawal.php index 73b04b0ac8..14725d1320 100644 --- a/app/TransactionRules/Actions/ConvertToWithdrawal.php +++ b/app/TransactionRules/Actions/ConvertToWithdrawal.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Exceptions\FireflyException; @@ -37,11 +36,8 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; -use Illuminate\Support\Facades\Log; -use JsonException; /** - * * Class ConvertToWithdrawal */ class ConvertToWithdrawal implements ActionInterface @@ -51,8 +47,6 @@ class ConvertToWithdrawal implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -60,90 +54,88 @@ class ConvertToWithdrawal implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { $actionValue = $this->evaluator->evaluate($journal); // make object from array (so the data is fresh). - /** @var TransactionJournal|null $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + /** @var null|TransactionJournal $object */ + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); if (null === $object) { - Log::error(sprintf('Cannot find journal #%d, cannot convert to withdrawal.', $journal['transaction_journal_id'])); + app('log')->error(sprintf('Cannot find journal #%d, cannot convert to withdrawal.', $journal['transaction_journal_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.journal_not_found'))); + return false; } $groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); if ($groupCount > 1) { - Log::error(sprintf('Group #%d has more than one transaction in it, cannot convert to withdrawal.', $journal['transaction_group_id'])); + app('log')->error(sprintf('Group #%d has more than one transaction in it, cannot convert to withdrawal.', $journal['transaction_group_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.split_group'))); + return false; } - $type = $object->transactionType->type; + $type = $object->transactionType->type; if (TransactionType::WITHDRAWAL === $type) { - Log::error(sprintf('Journal #%d is already a withdrawal (rule #%d).', $journal['transaction_journal_id'], $this->action->rule_id)); + app('log')->error(sprintf('Journal #%d is already a withdrawal (rule #%d).', $journal['transaction_journal_id'], $this->action->rule_id)); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.is_already_withdrawal'))); + return false; } if (TransactionType::DEPOSIT !== $type && TransactionType::TRANSFER !== $type) { event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.unsupported_transaction_type_withdrawal', ['type' => $type]))); + return false; } if (TransactionType::DEPOSIT === $type) { - Log::debug('Going to transform a deposit to a withdrawal.'); + app('log')->debug('Going to transform a deposit to a withdrawal.'); + try { $res = $this->convertDepositArray($object, $actionValue); - } catch (JsonException | FireflyException $e) { - Log::debug('Could not convert transfer to deposit.'); - Log::error($e->getMessage()); + } catch (FireflyException $e) { + app('log')->debug('Could not convert transfer to deposit.'); + app('log')->error($e->getMessage()); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.complex_error'))); + return false; } event(new TriggeredAuditLog($this->action->rule, $object, 'update_transaction_type', TransactionType::DEPOSIT, TransactionType::WITHDRAWAL)); return $res; } - if (TransactionType::TRANSFER === $type) { - Log::debug('Going to transform a transfer to a withdrawal.'); + // can only be transfer at this point. + app('log')->debug('Going to transform a transfer to a withdrawal.'); - try { - $res = $this->convertTransferArray($object, $actionValue); - } catch (JsonException | FireflyException $e) { - Log::debug('Could not convert transfer to deposit.'); - Log::error($e->getMessage()); - event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.complex_error'))); - return false; - } - event(new TriggeredAuditLog($this->action->rule, $object, 'update_transaction_type', TransactionType::TRANSFER, TransactionType::WITHDRAWAL)); + try { + $res = $this->convertTransferArray($object, $actionValue); + } catch (FireflyException $e) { + app('log')->debug('Could not convert transfer to deposit.'); + app('log')->error($e->getMessage()); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.complex_error'))); - return $res; + return false; } - event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.unsupported_transaction_type_withdrawal', ['type' => $type]))); - return false; + event(new TriggeredAuditLog($this->action->rule, $object, 'update_transaction_type', TransactionType::TRANSFER, TransactionType::WITHDRAWAL)); + + return $res; } /** - * @param TransactionJournal $journal - * - * @return bool * @throws FireflyException - * @throws JsonException */ private function convertDepositArray(TransactionJournal $journal, string $actionValue): bool { - $user = $journal->user; + $user = $journal->user; + /** @var AccountFactory $factory */ - $factory = app(AccountFactory::class); + $factory = app(AccountFactory::class); $factory->setUser($user); - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); $repository->setUser($user); - $sourceAccount = $this->getSourceAccount($journal); - $destAccount = $this->getDestinationAccount($journal); + $sourceAccount = $this->getSourceAccount($journal); + $destAccount = $this->getDestinationAccount($journal); // get the action value, or use the original source name in case the action value is empty: // this becomes a new or existing (expense) account, which is the destination of the new withdrawal. @@ -155,60 +147,56 @@ class ConvertToWithdrawal implements ActionInterface $opposingAccount = $factory->findOrCreate($opposingName, AccountType::EXPENSE); } - Log::debug(sprintf('ConvertToWithdrawal. Action value is "%s", expense name is "%s"', $actionValue, $opposingName)); + app('log')->debug(sprintf('ConvertToWithdrawal. Action value is "%s", expense name is "%s"', $actionValue, $opposingName)); // update source transaction(s) to be the original destination account - DB::table('transactions') + \DB::table('transactions') ->where('transaction_journal_id', '=', $journal->id) ->where('amount', '<', 0) ->update(['account_id' => $destAccount->id]); // update destination transaction(s) to be new expense account. - DB::table('transactions') + \DB::table('transactions') ->where('transaction_journal_id', '=', $journal->id) ->where('amount', '>', 0) ->update(['account_id' => $opposingAccount->id]); // change transaction type of journal: - $newType = TransactionType::whereType(TransactionType::WITHDRAWAL)->first(); - DB::table('transaction_journals') + $newType = TransactionType::whereType(TransactionType::WITHDRAWAL)->first(); + \DB::table('transaction_journals') ->where('id', '=', $journal->id) ->update(['transaction_type_id' => $newType->id]); - Log::debug('Converted deposit to withdrawal.'); + app('log')->debug('Converted deposit to withdrawal.'); return true; } /** - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ private function getSourceAccount(TransactionJournal $journal): Account { - /** @var Transaction|null $sourceTransaction */ + /** @var null|Transaction $sourceTransaction */ $sourceTransaction = $journal->transactions()->where('amount', '<', 0)->first(); if (null === $sourceTransaction) { throw new FireflyException(sprintf('Cannot find source transaction for journal #%d', $journal->id)); } + return $sourceTransaction->account; } /** - * @param TransactionJournal $journal - * - * @return Account * @throws FireflyException */ private function getDestinationAccount(TransactionJournal $journal): Account { - /** @var Transaction|null $destAccount */ + /** @var null|Transaction $destAccount */ $destAccount = $journal->transactions()->where('amount', '>', 0)->first(); if (null === $destAccount) { throw new FireflyException(sprintf('Cannot find destination transaction for journal #%d', $journal->id)); } + return $destAccount->account; } @@ -216,28 +204,25 @@ class ConvertToWithdrawal implements ActionInterface * Input is a transfer from A to B. * Output is a withdrawal from A to C. * - * @param TransactionJournal $journal - * - * @return bool * @throws FireflyException - * @throws JsonException */ private function convertTransferArray(TransactionJournal $journal, string $actionValue): bool { // find or create expense account. - $user = $journal->user; + $user = $journal->user; + /** @var AccountFactory $factory */ - $factory = app(AccountFactory::class); + $factory = app(AccountFactory::class); $factory->setUser($user); - $repository = app(AccountRepositoryInterface::class); + $repository = app(AccountRepositoryInterface::class); $repository->setUser($user); - $destAccount = $this->getDestinationAccount($journal); + $destAccount = $this->getDestinationAccount($journal); // get the action value, or use the original source name in case the action value is empty: // this becomes a new or existing (expense) account, which is the destination of the new withdrawal. - $opposingName = '' === $actionValue ? $destAccount->name : $actionValue; + $opposingName = '' === $actionValue ? $destAccount->name : $actionValue; // we check all possible source account types if one exists: $validTypes = config('firefly.expected_source_types.destination.Withdrawal'); $opposingAccount = $repository->findByName($opposingName, $validTypes); @@ -245,21 +230,21 @@ class ConvertToWithdrawal implements ActionInterface $opposingAccount = $factory->findOrCreate($opposingName, AccountType::EXPENSE); } - Log::debug(sprintf('ConvertToWithdrawal. Action value is "%s", destination name is "%s"', $actionValue, $opposingName)); + app('log')->debug(sprintf('ConvertToWithdrawal. Action value is "%s", destination name is "%s"', $actionValue, $opposingName)); // update destination transaction(s) to be new expense account. - DB::table('transactions') + \DB::table('transactions') ->where('transaction_journal_id', '=', $journal->id) ->where('amount', '>', 0) ->update(['account_id' => $opposingAccount->id]); // change transaction type of journal: - $newType = TransactionType::whereType(TransactionType::WITHDRAWAL)->first(); - DB::table('transaction_journals') + $newType = TransactionType::whereType(TransactionType::WITHDRAWAL)->first(); + \DB::table('transaction_journals') ->where('id', '=', $journal->id) ->update(['transaction_type_id' => $newType->id]); - Log::debug('Converted transfer to withdrawal.'); + app('log')->debug('Converted transfer to withdrawal.'); return true; } diff --git a/app/TransactionRules/Actions/DeleteTransaction.php b/app/TransactionRules/Actions/DeleteTransaction.php index 0f52553457..5863422fa3 100644 --- a/app/TransactionRules/Actions/DeleteTransaction.php +++ b/app/TransactionRules/Actions/DeleteTransaction.php @@ -29,7 +29,6 @@ use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Services\Internal\Destroy\JournalDestroyService; use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService; -use Illuminate\Support\Facades\Log; /** * Class DeleteTransaction. @@ -40,30 +39,27 @@ class DeleteTransaction implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - $count = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); + $count = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); // destroy entire group. if (1 === $count) { - Log::debug( + app('log')->debug( sprintf( 'RuleAction DeleteTransaction DELETED the entire transaction group of journal #%d ("%s").', $journal['transaction_journal_id'], $journal['description'] ) ); + + /** @var TransactionGroup $group */ $group = TransactionGroup::find($journal['transaction_group_id']); $service = app(TransactionGroupDestroyService::class); $service->destroy($group); @@ -72,12 +68,13 @@ class DeleteTransaction implements ActionInterface return true; } - Log::debug( + app('log')->debug( sprintf('RuleAction DeleteTransaction DELETED transaction journal #%d ("%s").', $journal['transaction_journal_id'], $journal['description']) ); // trigger delete factory: - $object = TransactionJournal::find($journal['transaction_group_id']); + /** @var null|TransactionJournal $object */ + $object = TransactionJournal::find($journal['transaction_journal_id']); if (null !== $object) { /** @var JournalDestroyService $service */ $service = app(JournalDestroyService::class); diff --git a/app/TransactionRules/Actions/LinkToBill.php b/app/TransactionRules/Actions/LinkToBill.php index 2b817077c6..677a3d2f46 100644 --- a/app/TransactionRules/Actions/LinkToBill.php +++ b/app/TransactionRules/Actions/LinkToBill.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; @@ -33,7 +32,6 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Class LinkToBill. @@ -45,9 +43,6 @@ class LinkToBill implements ActionInterface /** * TriggerInterface constructor. - * - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -55,23 +50,22 @@ class LinkToBill implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - $user = User::find($journal['user_id']); + /** @var User $user */ + $user = User::find($journal['user_id']); + /** @var BillRepositoryInterface $repository */ $repository = app(BillRepositoryInterface::class); $repository->setUser($user); - $billName = $this->evaluator->evaluate($journal); - $bill = $repository->findByName($billName); + $billName = $this->evaluator->evaluate($journal); + $bill = $repository->findByName($billName); - if (null !== $bill && $journal['transaction_type_type'] === TransactionType::WITHDRAWAL) { - $count = DB::table('transaction_journals')->where('id', '=', $journal['transaction_journal_id']) + if (null !== $bill && TransactionType::WITHDRAWAL === $journal['transaction_type_type']) { + $count = \DB::table('transaction_journals')->where('id', '=', $journal['transaction_journal_id']) ->where('bill_id', $bill->id)->count(); if (0 !== $count) { - Log::error( + app('log')->error( sprintf( 'RuleAction LinkToBill could not set the bill of journal #%d to bill "%s": already set.', $journal['transaction_journal_id'], @@ -79,24 +73,25 @@ class LinkToBill implements ActionInterface ) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.already_linked_to_subscription', ['name' => $billName]))); + return false; } - - DB::table('transaction_journals') + \DB::table('transaction_journals') ->where('id', '=', $journal['transaction_journal_id']) ->update(['bill_id' => $bill->id]); - Log::debug( + app('log')->debug( sprintf('RuleAction LinkToBill set the bill of journal #%d to bill #%d ("%s").', $journal['transaction_journal_id'], $bill->id, $bill->name) ); + /** @var TransactionJournal $object */ $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); event(new TriggeredAuditLog($this->action->rule, $object, 'set_bill', null, $bill->name)); return true; } - Log::error( + app('log')->error( sprintf( 'RuleAction LinkToBill could not set the bill of journal #%d to bill "%s": no such bill found or not a withdrawal.', $journal['transaction_journal_id'], @@ -104,6 +99,7 @@ class LinkToBill implements ActionInterface ) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_subscription', ['name' => $billName]))); + return false; } } diff --git a/app/TransactionRules/Actions/MoveDescriptionToNotes.php b/app/TransactionRules/Actions/MoveDescriptionToNotes.php index 9d17dd8ae2..9b611f7db2 100644 --- a/app/TransactionRules/Actions/MoveDescriptionToNotes.php +++ b/app/TransactionRules/Actions/MoveDescriptionToNotes.php @@ -29,7 +29,6 @@ use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\Note; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; -use Illuminate\Support\Facades\Log; /** * Class MoveDescriptionToNotes @@ -40,30 +39,27 @@ class MoveDescriptionToNotes implements ActionInterface /** * TriggerInterface constructor. - * - * - * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - /** @var TransactionJournal $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + /** @var null|TransactionJournal $object */ + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); if (null === $object) { - Log::error(sprintf('No journal #%d belongs to user #%d.', $journal['transaction_journal_id'], $journal['user_id'])); + app('log')->error(sprintf('No journal #%d belongs to user #%d.', $journal['transaction_journal_id'], $journal['user_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.journal_other_user'))); + return false; } - $note = $object->notes()->first(); + + /** @var null|Note $note */ + $note = $object->notes()->first(); if (null === $note) { - $note = new Note(); + $note = new Note(); $note->noteable()->associate($object); $note->text = ''; } @@ -77,13 +73,14 @@ class MoveDescriptionToNotes implements ActionInterface $note->text = (string)$object->description; $object->description = '(no description)'; } - $after = $note->text; + $after = $note->text; event(new TriggeredAuditLog($this->action->rule, $object, 'update_description', $beforeDescription, $object->description)); event(new TriggeredAuditLog($this->action->rule, $object, 'update_notes', $before, $after)); $note->save(); $object->save(); + return true; } } diff --git a/app/TransactionRules/Actions/MoveNotesToDescription.php b/app/TransactionRules/Actions/MoveNotesToDescription.php index 8ce108aa02..5c18ab78a7 100644 --- a/app/TransactionRules/Actions/MoveNotesToDescription.php +++ b/app/TransactionRules/Actions/MoveNotesToDescription.php @@ -29,7 +29,6 @@ use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Support\Request\ConvertsDataTypes; -use Illuminate\Support\Facades\Log; /** * Class MoveNotesToDescription @@ -46,30 +45,26 @@ class MoveNotesToDescription implements ActionInterface /** * TriggerInterface constructor. - * - * - * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - /** @var TransactionJournal $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + /** @var null|TransactionJournal $object */ + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); if (null === $object) { - Log::error(sprintf('No journal #%d belongs to user #%d.', $journal['transaction_journal_id'], $journal['user_id'])); + app('log')->error(sprintf('No journal #%d belongs to user #%d.', $journal['transaction_journal_id'], $journal['user_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.journal_other_user'))); + return false; } - $note = $object->notes()->first(); + $note = $object->notes()->first(); if (null === $note) { event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.no_notes_to_move'))); + // nothing to move, return null return false; } @@ -77,11 +72,12 @@ class MoveNotesToDescription implements ActionInterface // nothing to move, return null $note->delete(); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.no_notes_to_move'))); + return false; } $before = $object->description; $beforeNote = $note->text; - $object->description = (string)$this->clearString($note->text, false); + $object->description = (string)$this->clearString($note->text); $object->save(); $note->delete(); @@ -92,7 +88,7 @@ class MoveNotesToDescription implements ActionInterface } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function get(string $key, mixed $default = null): mixed { @@ -100,7 +96,7 @@ class MoveNotesToDescription implements ActionInterface } /** - * @inheritDoc + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function has(mixed $key): mixed { diff --git a/app/TransactionRules/Actions/PrependDescription.php b/app/TransactionRules/Actions/PrependDescription.php index ef8a36931c..ba407f4cdb 100644 --- a/app/TransactionRules/Actions/PrependDescription.php +++ b/app/TransactionRules/Actions/PrependDescription.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; @@ -40,8 +39,6 @@ class PrependDescription implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -49,16 +46,13 @@ class PrependDescription implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { $actionValue = $this->evaluator->evaluate($journal); $before = $journal['description']; $after = sprintf('%s%s', $actionValue, $journal['description']); - DB::table('transaction_journals')->where('id', $journal['transaction_journal_id'])->limit(1)->update(['description' => $after]); + \DB::table('transaction_journals')->where('id', $journal['transaction_journal_id'])->limit(1)->update(['description' => $after]); // journal /** @var TransactionJournal $object */ diff --git a/app/TransactionRules/Actions/PrependNotes.php b/app/TransactionRules/Actions/PrependNotes.php index 9f86739067..d82cbe43b0 100644 --- a/app/TransactionRules/Actions/PrependNotes.php +++ b/app/TransactionRules/Actions/PrependNotes.php @@ -29,7 +29,6 @@ use FireflyIII\Models\Note; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; -use Illuminate\Support\Facades\Log; /** * Class PrependNotes. @@ -41,23 +40,17 @@ class PrependNotes implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { - $this->action = $action; + $this->action = $action; $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - $actionValue = $this->evaluator->evaluate($journal); - - $dbNote = Note::where('noteable_id', (int)$journal['transaction_journal_id']) + $actionValue = $this->evaluator->evaluate($journal); + $dbNote = Note::where('noteable_id', (int)$journal['transaction_journal_id']) ->where('noteable_type', TransactionJournal::class) ->first(['notes.*']); if (null === $dbNote) { @@ -66,15 +59,15 @@ class PrependNotes implements ActionInterface $dbNote->noteable_type = TransactionJournal::class; $dbNote->text = ''; } - $before = $dbNote->text; - Log::debug(sprintf('RuleAction PrependNotes prepended "%s" to "%s".', $actionValue, $dbNote->text)); + $before = $dbNote->text; + app('log')->debug(sprintf('RuleAction PrependNotes prepended "%s" to "%s".', $actionValue, $dbNote->text)); $text = sprintf('%s%s', $actionValue, $dbNote->text); $dbNote->text = $text; $dbNote->save(); // journal /** @var TransactionJournal $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); // audit log event(new TriggeredAuditLog($this->action->rule, $object, 'update_notes', $before, $text)); diff --git a/app/TransactionRules/Actions/RemoveAllTags.php b/app/TransactionRules/Actions/RemoveAllTags.php index 87ccbe0b2f..8952d9532d 100644 --- a/app/TransactionRules/Actions/RemoveAllTags.php +++ b/app/TransactionRules/Actions/RemoveAllTags.php @@ -23,12 +23,10 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; -use Illuminate\Support\Facades\Log; /** * Class RemoveAllTags. @@ -39,27 +37,23 @@ class RemoveAllTags implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - DB::table('tag_transaction_journal')->where('transaction_journal_id', $journal['transaction_journal_id'])->delete(); - $count = DB::table('tag_transaction_journal')->where('transaction_journal_id', $journal['transaction_journal_id'])->count(); + \DB::table('tag_transaction_journal')->where('transaction_journal_id', $journal['transaction_journal_id'])->delete(); + $count = \DB::table('tag_transaction_journal')->where('transaction_journal_id', $journal['transaction_journal_id'])->count(); if (0 === $count) { - Log::debug(sprintf('RuleAction RemoveAllTags, journal #%d has no tags.', $journal['transaction_journal_id'])); + app('log')->debug(sprintf('RuleAction RemoveAllTags, journal #%d has no tags.', $journal['transaction_journal_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.no_tags_to_remove'))); + return false; } - Log::debug(sprintf('RuleAction RemoveAllTags removed all tags from journal %d.', $journal['transaction_journal_id'])); + app('log')->debug(sprintf('RuleAction RemoveAllTags removed all tags from journal %d.', $journal['transaction_journal_id'])); /** @var TransactionJournal $object */ $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); diff --git a/app/TransactionRules/Actions/RemoveTag.php b/app/TransactionRules/Actions/RemoveTag.php index b67a10aaa4..20693779bf 100644 --- a/app/TransactionRules/Actions/RemoveTag.php +++ b/app/TransactionRules/Actions/RemoveTag.php @@ -24,14 +24,12 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Class RemoveTag. @@ -43,8 +41,6 @@ class RemoveTag implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -52,34 +48,35 @@ class RemoveTag implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { // if tag does not exist, no need to continue: - $name = $this->evaluator->evaluate($journal); - $user = User::find($journal['user_id']); - $tag = $user->tags()->where('tag', $name)->first(); + $name = $this->evaluator->evaluate($journal); + + /** @var User $user */ + $user = User::find($journal['user_id']); + $tag = $user->tags()->where('tag', $name)->first(); if (null === $tag) { - Log::debug( + app('log')->debug( sprintf('RuleAction RemoveTag tried to remove tag "%s" from journal #%d but no such tag exists.', $name, $journal['transaction_journal_id']) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_tag', ['tag' => $name]))); + return false; } - $count = DB::table('tag_transaction_journal')->where('transaction_journal_id', $journal['transaction_journal_id'])->where('tag_id', $tag->id)->count(); + $count = \DB::table('tag_transaction_journal')->where('transaction_journal_id', $journal['transaction_journal_id'])->where('tag_id', $tag->id)->count(); if (0 === $count) { - Log::debug( + app('log')->debug( sprintf('RuleAction RemoveTag tried to remove tag "%s" from journal #%d but no such tag is linked.', $name, $journal['transaction_journal_id']) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_unlink_tag', ['tag' => $name]))); + return false; } - Log::debug(sprintf('RuleAction RemoveTag removed tag #%d ("%s") from journal #%d.', $tag->id, $tag->tag, $journal['transaction_journal_id'])); - DB::table('tag_transaction_journal') + app('log')->debug(sprintf('RuleAction RemoveTag removed tag #%d ("%s") from journal #%d.', $tag->id, $tag->tag, $journal['transaction_journal_id'])); + \DB::table('tag_transaction_journal') ->where('transaction_journal_id', $journal['transaction_journal_id']) ->where('tag_id', $tag->id) ->delete(); diff --git a/app/TransactionRules/Actions/SetBudget.php b/app/TransactionRules/Actions/SetBudget.php index 9a88f49257..5dc595de3d 100644 --- a/app/TransactionRules/Actions/SetBudget.php +++ b/app/TransactionRules/Actions/SetBudget.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; @@ -32,7 +31,6 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Class SetBudget. @@ -44,8 +42,6 @@ class SetBudget implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -53,17 +49,15 @@ class SetBudget implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - $user = User::find($journal['user_id']); - $search = $this->evaluator->evaluate($journal); + /** @var User $user */ + $user = User::find($journal['user_id']); + $search = $this->evaluator->evaluate($journal); - $budget = $user->budgets()->where('name', $search)->first(); + $budget = $user->budgets()->where('name', $search)->first(); if (null === $budget) { - Log::debug( + app('log')->debug( sprintf( 'RuleAction SetBudget could not set budget of journal #%d to "%s" because no such budget exists.', $journal['transaction_journal_id'], @@ -71,11 +65,12 @@ class SetBudget implements ActionInterface ) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_budget', ['name' => $search]))); + return false; } if (TransactionType::WITHDRAWAL !== $journal['transaction_type_type']) { - Log::debug( + app('log')->debug( sprintf( 'RuleAction SetBudget could not set budget of journal #%d to "%s" because journal is a %s.', $journal['transaction_journal_id'], @@ -84,6 +79,7 @@ class SetBudget implements ActionInterface ) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_set_budget', ['type' => $journal['transaction_type_type'], 'name' => $search]))); + return false; } @@ -92,21 +88,21 @@ class SetBudget implements ActionInterface $object = $user->transactionJournals()->find($journal['transaction_journal_id']); $oldBudget = $object->budgets()->first(); $oldBudgetName = $oldBudget?->name; - if ((int)$oldBudget?->id === (int)$budget->id) { + if ((int)$oldBudget?->id === $budget->id) { event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.already_linked_to_budget', ['name' => $budget->name]))); + return false; } - - Log::debug( + app('log')->debug( sprintf('RuleAction SetBudget set the budget of journal #%d to budget #%d ("%s").', $journal['transaction_journal_id'], $budget->id, $budget->name) ); - DB::table('budget_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); - DB::table('budget_transaction_journal')->insert(['transaction_journal_id' => $journal['transaction_journal_id'], 'budget_id' => $budget->id]); + \DB::table('budget_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); + \DB::table('budget_transaction_journal')->insert(['transaction_journal_id' => $journal['transaction_journal_id'], 'budget_id' => $budget->id]); /** @var TransactionJournal $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); event(new TriggeredAuditLog($this->action->rule, $object, 'set_budget', $oldBudgetName, $budget->name)); return true; diff --git a/app/TransactionRules/Actions/SetCategory.php b/app/TransactionRules/Actions/SetCategory.php index a4ed08d7d6..fe8309647c 100644 --- a/app/TransactionRules/Actions/SetCategory.php +++ b/app/TransactionRules/Actions/SetCategory.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Factory\CategoryFactory; @@ -32,7 +31,6 @@ use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Class SetCategory. @@ -44,8 +42,6 @@ class SetCategory implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -53,25 +49,24 @@ class SetCategory implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - $user = User::find($journal['user_id']); - $search = $this->evaluator->evaluate($journal); + /** @var null|User $user */ + $user = User::find($journal['user_id']); + $search = $this->evaluator->evaluate($journal); if (null === $user) { - Log::error(sprintf('Journal has no valid user ID so action SetCategory("%s") cannot be applied', $search), $journal); + app('log')->error(sprintf('Journal has no valid user ID so action SetCategory("%s") cannot be applied', $search), $journal); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.no_such_journal'))); + return false; } /** @var CategoryFactory $factory */ - $factory = app(CategoryFactory::class); + $factory = app(CategoryFactory::class); $factory->setUser($user); - $category = $factory->findOrCreate(null, $search); + $category = $factory->findOrCreate(null, $search); if (null === $category) { - Log::debug( + app('log')->debug( sprintf( 'RuleAction SetCategory could not set category of journal #%d to "%s" because no such category exists.', $journal['transaction_journal_id'], @@ -79,10 +74,11 @@ class SetCategory implements ActionInterface ) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_category', ['name' => $search]))); + return false; } - Log::debug( + app('log')->debug( sprintf( 'RuleAction SetCategory set the category of journal #%d to category #%d ("%s").', $journal['transaction_journal_id'], @@ -96,16 +92,17 @@ class SetCategory implements ActionInterface $object = $user->transactionJournals()->find($journal['transaction_journal_id']); $oldCategory = $object->categories()->first(); $oldCategoryName = $oldCategory?->name; - if ((int)$oldCategory?->id === (int)$category->id) { - event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.already_linked_to_category', ['name' => $category->name]))); + if ((int)$oldCategory?->id === $category->id) { + // event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.already_linked_to_category', ['name' => $category->name]))); + return false; } - DB::table('category_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); - DB::table('category_transaction_journal')->insert(['transaction_journal_id' => $journal['transaction_journal_id'], 'category_id' => $category->id]); + \DB::table('category_transaction_journal')->where('transaction_journal_id', '=', $journal['transaction_journal_id'])->delete(); + \DB::table('category_transaction_journal')->insert(['transaction_journal_id' => $journal['transaction_journal_id'], 'category_id' => $category->id]); /** @var TransactionJournal $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); event(new TriggeredAuditLog($this->action->rule, $object, 'set_category', $oldCategoryName, $category->name)); return true; diff --git a/app/TransactionRules/Actions/SetDescription.php b/app/TransactionRules/Actions/SetDescription.php index 799a02ed70..8ce0d001b5 100644 --- a/app/TransactionRules/Actions/SetDescription.php +++ b/app/TransactionRules/Actions/SetDescription.php @@ -24,12 +24,10 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; -use Illuminate\Support\Facades\Log; /** * Class SetDescription. @@ -41,8 +39,6 @@ class SetDescription implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -50,9 +46,6 @@ class SetDescription implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { /** @var TransactionJournal $object */ @@ -60,11 +53,11 @@ class SetDescription implements ActionInterface $before = $journal['description']; $after = $this->evaluator->evaluate($journal); - DB::table('transaction_journals') + \DB::table('transaction_journals') ->where('id', '=', $journal['transaction_journal_id']) - ->update(['description' => $after]); + ->update(['description' => $this->action->action_value]); - Log::debug( + app('log')->debug( sprintf( 'RuleAction SetDescription changed the description of journal #%d from "%s" to "%s".', $journal['transaction_journal_id'], diff --git a/app/TransactionRules/Actions/SetDestinationAccount.php b/app/TransactionRules/Actions/SetDestinationAccount.php index e4c2688831..6521e02e94 100644 --- a/app/TransactionRules/Actions/SetDestinationAccount.php +++ b/app/TransactionRules/Actions/SetDestinationAccount.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\Account; @@ -35,7 +34,6 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Class SetDestinationAccount. @@ -48,8 +46,6 @@ class SetDestinationAccount implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -57,30 +53,30 @@ class SetDestinationAccount implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { $accountName = $this->evaluator->evaluate($journal); - $user = User::find($journal['user_id']); - $type = $journal['transaction_type_type']; - /** @var TransactionJournal|null $object */ + + /** @var User $user */ + $user = User::find($journal['user_id']); + + /** @var null|TransactionJournal $object */ $object = $user->transactionJournals()->find((int)$journal['transaction_journal_id']); $this->repository = app(AccountRepositoryInterface::class); if (null === $object) { - Log::error('Could not find journal.'); + app('log')->error('Could not find journal.'); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.no_such_journal'))); + return false; } - $type = $object->transactionType->type; + $type = $object->transactionType->type; $this->repository->setUser($user); // if this is a transfer or a deposit, the new destination account must be an asset account or a default account, and it MUST exist: - $newAccount = $this->findAssetAccount($type, $accountName); + $newAccount = $this->findAssetAccount($type, $accountName); if ((TransactionType::DEPOSIT === $type || TransactionType::TRANSFER === $type) && null === $newAccount) { - Log::error( + app('log')->error( sprintf( 'Cant change destination account of journal #%d because no asset account with name "%s" exists.', $object->id, @@ -88,25 +84,28 @@ class SetDestinationAccount implements ActionInterface ) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_asset', ['name' => $accountName]))); + return false; } // new destination account must be different from the current source account: - /** @var Transaction|null $source */ - $source = $object->transactions()->where('amount', '<', 0)->first(); + /** @var null|Transaction $source */ + $source = $object->transactions()->where('amount', '<', 0)->first(); if (null === $source) { - Log::error('Could not find source transaction.'); + app('log')->error('Could not find source transaction.'); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_source_transaction'))); + return false; } // account must not be deleted (in the meantime): if (null === $source->account) { - Log::error('Could not find source transaction account.'); + app('log')->error('Could not find source transaction account.'); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_source_transaction_account'))); + return false; } - if (null !== $newAccount && (int)$newAccount->id === (int)$source->account_id) { - Log::error( + if (null !== $newAccount && $newAccount->id === $source->account_id) { + app('log')->error( sprintf( 'New destination account ID #%d and current source account ID #%d are the same. Do nothing.', $newAccount->id, @@ -115,6 +114,7 @@ class SetDestinationAccount implements ActionInterface ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.already_has_destination', ['name' => $newAccount->name]))); + return false; } @@ -124,39 +124,31 @@ class SetDestinationAccount implements ActionInterface $newAccount = $this->findWithdrawalDestinationAccount($accountName); } - Log::debug(sprintf('New destination account is #%d ("%s").', $newAccount->id, $newAccount->name)); + app('log')->debug(sprintf('New destination account is #%d ("%s").', $newAccount->id, $newAccount->name)); event(new TriggeredAuditLog($this->action->rule, $object, 'set_destination', null, $newAccount->name)); // update destination transaction with new destination account: - DB::table('transactions') + \DB::table('transactions') ->where('transaction_journal_id', '=', $object->id) ->where('amount', '>', 0) ->update(['account_id' => $newAccount->id]); - Log::debug(sprintf('Updated journal #%d (group #%d) and gave it new destination account ID.', $object->id, $object->transaction_group_id)); + app('log')->debug(sprintf('Updated journal #%d (group #%d) and gave it new destination account ID.', $object->id, $object->transaction_group_id)); return true; } - /** - * @param string $type - * - * @return Account|null - */ private function findAssetAccount(string $type, string $accountName): ?Account { // switch on type: $allowed = config(sprintf('firefly.expected_source_types.destination.%s', $type)); $allowed = is_array($allowed) ? $allowed : []; - Log::debug(sprintf('Check config for expected_source_types.destination.%s, result is', $type), $allowed); + app('log')->debug(sprintf('Check config for expected_source_types.destination.%s, result is', $type), $allowed); return $this->repository->findByName($accountName, $allowed); } - /** - * @return Account - */ private function findWithdrawalDestinationAccount(string $accountName): Account { $allowed = config('firefly.expected_source_types.destination.Withdrawal'); @@ -172,7 +164,7 @@ class SetDestinationAccount implements ActionInterface ]; $account = $this->repository->store($data); } - Log::debug(sprintf('Found or created expense account #%d ("%s")', $account->id, $account->name)); + app('log')->debug(sprintf('Found or created expense account #%d ("%s")', $account->id, $account->name)); return $account; } diff --git a/app/TransactionRules/Actions/SetDestinationToCashAccount.php b/app/TransactionRules/Actions/SetDestinationToCashAccount.php new file mode 100644 index 0000000000..0e21126e16 --- /dev/null +++ b/app/TransactionRules/Actions/SetDestinationToCashAccount.php @@ -0,0 +1,120 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\TransactionRules\Actions; + +use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; +use FireflyIII\Events\TriggeredAuditLog; +use FireflyIII\Models\RuleAction; +use FireflyIII\Models\Transaction; +use FireflyIII\Models\TransactionJournal; +use FireflyIII\Models\TransactionType; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\User; + +/** + * Class SetDestinationToCashAccount + */ +class SetDestinationToCashAccount implements ActionInterface +{ + private RuleAction $action; + + /** + * TriggerInterface constructor. + */ + public function __construct(RuleAction $action) + { + $this->action = $action; + } + + public function actOnArray(array $journal): bool + { + /** @var User $user */ + $user = User::find($journal['user_id']); + + /** @var null|TransactionJournal $object */ + $object = $user->transactionJournals()->find((int)$journal['transaction_journal_id']); + $repository = app(AccountRepositoryInterface::class); + + if (null === $object) { + app('log')->error('Could not find journal.'); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.no_such_journal'))); + + return false; + } + $type = $object->transactionType->type; + if (TransactionType::WITHDRAWAL !== $type) { + app('log')->error('Transaction must be withdrawal.'); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.not_withdrawal'))); + + return false; + } + + // find cash account + $repository->setUser($user); + $cashAccount = $repository->getCashAccount(); + + // new destination account must be different from the current source account: + /** @var null|Transaction $source */ + $source = $object->transactions()->where('amount', '<', 0)->first(); + if (null === $source) { + app('log')->error('Could not find source transaction.'); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_source_transaction'))); + + return false; + } + // account must not be deleted (in the meantime): + if (null === $source->account) { + app('log')->error('Could not find source transaction account.'); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_source_transaction_account'))); + + return false; + } + if ($cashAccount->id === $source->account_id) { + app('log')->error( + sprintf( + 'New destination account ID #%d and current source account ID #%d are the same. Do nothing.', + $cashAccount->id, + $source->account_id + ) + ); + + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.already_has_destination', ['name' => $cashAccount->name]))); + + return false; + } + + event(new TriggeredAuditLog($this->action->rule, $object, 'set_destination', null, $cashAccount->name)); + + // update destination transaction with new destination account: + \DB::table('transactions') + ->where('transaction_journal_id', '=', $object->id) + ->where('amount', '>', 0) + ->update(['account_id' => $cashAccount->id]) + ; + + app('log')->debug(sprintf('Updated journal #%d (group #%d) and gave it new destination account ID.', $object->id, $object->transaction_group_id)); + + return true; + } +} diff --git a/app/TransactionRules/Actions/SetNotes.php b/app/TransactionRules/Actions/SetNotes.php index 28926ba319..8abdf02f8c 100644 --- a/app/TransactionRules/Actions/SetNotes.php +++ b/app/TransactionRules/Actions/SetNotes.php @@ -29,20 +29,17 @@ use FireflyIII\Models\Note; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; -use Illuminate\Support\Facades\Log; /** * Class SetNotes. */ class SetNotes implements ActionInterface { - private RuleACtion $action; + private RuleAction $action; private ActionExpressionEvaluator $evaluator; /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -50,12 +47,9 @@ class SetNotes implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - $dbNote = Note::where('noteable_id', $journal['transaction_journal_id']) + $dbNote = Note::where('noteable_id', $journal['transaction_journal_id']) ->where('noteable_type', TransactionJournal::class)->first(); if (null === $dbNote) { $dbNote = new Note(); @@ -68,7 +62,7 @@ class SetNotes implements ActionInterface $dbNote->text = $newNotes; $dbNote->save(); - Log::debug( + app('log')->debug( sprintf( 'RuleAction SetNotes changed the notes of journal #%d from "%s" to "%s".', $journal['transaction_journal_id'], @@ -78,7 +72,7 @@ class SetNotes implements ActionInterface ); /** @var TransactionJournal $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); event(new TriggeredAuditLog($this->action->rule, $object, 'update_notes', $oldNotes, $newNotes)); diff --git a/app/TransactionRules/Actions/SetSourceAccount.php b/app/TransactionRules/Actions/SetSourceAccount.php index 8a2e1c326b..dc195b9d61 100644 --- a/app/TransactionRules/Actions/SetSourceAccount.php +++ b/app/TransactionRules/Actions/SetSourceAccount.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\Account; @@ -35,7 +34,6 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Class SetSourceAccount. @@ -48,8 +46,6 @@ class SetSourceAccount implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -57,51 +53,54 @@ class SetSourceAccount implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - $user = User::find($journal['user_id']); - $type = $journal['transaction_type_type']; - $name = $this->evaluator->evaluate($journal); - /** @var TransactionJournal|null $object */ + $accountName = $this->evaluator->evaluate($journal); + + /** @var User $user */ + $user = User::find($journal['user_id']); + + /** @var null|TransactionJournal $object */ $object = $user->transactionJournals()->find((int)$journal['transaction_journal_id']); $this->repository = app(AccountRepositoryInterface::class); if (null === $object) { - Log::error('Could not find journal.'); + app('log')->error('Could not find journal.'); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.no_such_journal'))); + return false; } - $type = $object->transactionType->type; + $type = $object->transactionType->type; $this->repository->setUser($user); // if this is a transfer or a withdrawal, the new source account must be an asset account or a default account, and it MUST exist: - $newAccount = $this->findAssetAccount($type, $name); + $newAccount = $this->findAssetAccount($type, $accountName); if ((TransactionType::WITHDRAWAL === $type || TransactionType::TRANSFER === $type) && null === $newAccount) { - Log::error( - sprintf('Cant change source account of journal #%d because no asset account with name "%s" exists.', $object->id, $name) + app('log')->error( + sprintf('Cant change source account of journal #%d because no asset account with name "%s" exists.', $object->id, $accountName) ); - event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_asset', ['name' => $name]))); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_asset', ['name' => $accountName]))); + return false; } // new source account must be different from the current destination account: - /** @var Transaction|null $destination */ - $destination = $object->transactions()->where('amount', '>', 0)->first(); + /** @var null|Transaction $destination */ + $destination = $object->transactions()->where('amount', '>', 0)->first(); if (null === $destination) { - Log::error('Could not find destination transaction.'); + app('log')->error('Could not find destination transaction.'); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_destination_transaction'))); + return false; } // account must not be deleted (in the meantime): if (null === $destination->account) { - Log::error('Could not find destination transaction account.'); + app('log')->error('Could not find destination transaction account.'); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_destination_transaction_account'))); + return false; } - if (null !== $newAccount && (int)$newAccount->id === (int)$destination->account_id) { - Log::error( + if (null !== $newAccount && $newAccount->id === $destination->account_id) { + app('log')->error( sprintf( 'New source account ID #%d and current destination account ID #%d are the same. Do nothing.', $newAccount->id, @@ -109,48 +108,41 @@ class SetSourceAccount implements ActionInterface ) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.already_has_source', ['name' => $newAccount->name]))); + return false; } // if this is a deposit, the new source account must be a revenue account and may be created: // or it's a liability if (TransactionType::DEPOSIT === $type) { - $newAccount = $this->findDepositSourceAccount($name); + $newAccount = $this->findDepositSourceAccount($accountName); } - Log::debug(sprintf('New source account is #%d ("%s").', $newAccount->id, $newAccount->name)); + app('log')->debug(sprintf('New source account is #%d ("%s").', $newAccount->id, $newAccount->name)); // update source transaction with new source account: - DB::table('transactions') + \DB::table('transactions') ->where('transaction_journal_id', '=', $object->id) ->where('amount', '<', 0) ->update(['account_id' => $newAccount->id]); event(new TriggeredAuditLog($this->action->rule, $object, 'set_source', null, $newAccount->name)); - Log::debug(sprintf('Updated journal #%d (group #%d) and gave it new source account ID.', $object->id, $object->transaction_group_id)); + app('log')->debug(sprintf('Updated journal #%d (group #%d) and gave it new source account ID.', $object->id, $object->transaction_group_id)); return true; } - /** - * @param string $type - * - * @return Account|null - */ private function findAssetAccount(string $type, string $name): ?Account { // switch on type: $allowed = config(sprintf('firefly.expected_source_types.source.%s', $type)); $allowed = is_array($allowed) ? $allowed : []; - Log::debug(sprintf('Check config for expected_source_types.source.%s, result is', $type), $allowed); + app('log')->debug(sprintf('Check config for expected_source_types.source.%s, result is', $type), $allowed); return $this->repository->findByName($name, $allowed); } - /** - * @return Account - */ private function findDepositSourceAccount(string $name): Account { $allowed = config('firefly.expected_source_types.source.Deposit'); @@ -167,7 +159,7 @@ class SetSourceAccount implements ActionInterface ]; $account = $this->repository->store($data); } - Log::debug(sprintf('Found or created revenue account #%d ("%s")', $account->id, $account->name)); + app('log')->debug(sprintf('Found or created revenue account #%d ("%s")', $account->id, $account->name)); return $account; } diff --git a/app/TransactionRules/Actions/SetSourceToCashAccount.php b/app/TransactionRules/Actions/SetSourceToCashAccount.php new file mode 100644 index 0000000000..f8a4b91565 --- /dev/null +++ b/app/TransactionRules/Actions/SetSourceToCashAccount.php @@ -0,0 +1,120 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\TransactionRules\Actions; + +use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; +use FireflyIII\Events\TriggeredAuditLog; +use FireflyIII\Models\RuleAction; +use FireflyIII\Models\Transaction; +use FireflyIII\Models\TransactionJournal; +use FireflyIII\Models\TransactionType; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\User; + +/** + * Class SetSourceToCashAccount + */ +class SetSourceToCashAccount implements ActionInterface +{ + private RuleAction $action; + + /** + * TriggerInterface constructor. + */ + public function __construct(RuleAction $action) + { + $this->action = $action; + } + + public function actOnArray(array $journal): bool + { + /** @var User $user */ + $user = User::find($journal['user_id']); + + /** @var null|TransactionJournal $object */ + $object = $user->transactionJournals()->find((int)$journal['transaction_journal_id']); + $repository = app(AccountRepositoryInterface::class); + + if (null === $object) { + app('log')->error('Could not find journal.'); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.no_such_journal'))); + + return false; + } + $type = $object->transactionType->type; + if (TransactionType::DEPOSIT !== $type) { + app('log')->error('Transaction must be deposit.'); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.not_deposit'))); + + return false; + } + + // find cash account + $repository->setUser($user); + $cashAccount = $repository->getCashAccount(); + + // new source account must be different from the current destination account: + /** @var null|Transaction $destination */ + $destination = $object->transactions()->where('amount', '>', 0)->first(); + if (null === $destination) { + app('log')->error('Could not find destination transaction.'); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_destination_transaction'))); + + return false; + } + // account must not be deleted (in the meantime): + if (null === $destination->account) { + app('log')->error('Could not find destination transaction account.'); + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_destination_transaction_account'))); + + return false; + } + if ($cashAccount->id === $destination->account_id) { + app('log')->error( + sprintf( + 'New source account ID #%d and current destination account ID #%d are the same. Do nothing.', + $cashAccount->id, + $destination->account_id + ) + ); + + event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.already_has_source', ['name' => $cashAccount->name]))); + + return false; + } + + event(new TriggeredAuditLog($this->action->rule, $object, 'set_source', null, $cashAccount->name)); + + // update destination transaction with new destination account: + \DB::table('transactions') + ->where('transaction_journal_id', '=', $object->id) + ->where('amount', '<', 0) + ->update(['account_id' => $cashAccount->id]) + ; + + app('log')->debug(sprintf('Updated journal #%d (group #%d) and gave it new source account ID.', $object->id, $object->transaction_group_id)); + + return true; + } +} diff --git a/app/TransactionRules/Actions/SwitchAccounts.php b/app/TransactionRules/Actions/SwitchAccounts.php index 29d71b6bcc..e7df491e32 100644 --- a/app/TransactionRules/Actions/SwitchAccounts.php +++ b/app/TransactionRules/Actions/SwitchAccounts.php @@ -23,17 +23,14 @@ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; -use DB; use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray; use FireflyIII\Events\TriggeredAuditLog; use FireflyIII\Models\RuleAction; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; -use Illuminate\Support\Facades\Log; /** - * * Class SwitchAccounts */ class SwitchAccounts implements ActionInterface @@ -42,51 +39,51 @@ class SwitchAccounts implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action) { $this->action = $action; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { // make object from array (so the data is fresh). - /** @var TransactionJournal|null $object */ - $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); + /** @var null|TransactionJournal $object */ + $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); if (null === $object) { - Log::error(sprintf('Cannot find journal #%d, cannot switch accounts.', $journal['transaction_journal_id'])); + app('log')->error(sprintf('Cannot find journal #%d, cannot switch accounts.', $journal['transaction_journal_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.no_such_journal'))); + return false; } - $groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); + $groupCount = TransactionJournal::where('transaction_group_id', $journal['transaction_group_id'])->count(); if ($groupCount > 1) { - Log::error(sprintf('Group #%d has more than one transaction in it, cannot switch accounts.', $journal['transaction_group_id'])); + app('log')->error(sprintf('Group #%d has more than one transaction in it, cannot switch accounts.', $journal['transaction_group_id'])); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.split_group'))); + return false; } - $type = $object->transactionType->type; + $type = $object->transactionType->type; if (TransactionType::TRANSFER !== $type) { - Log::error(sprintf('Journal #%d is NOT a transfer (rule #%d), cannot switch accounts.', $journal['transaction_journal_id'], $this->action->rule_id)); + app('log')->error(sprintf('Journal #%d is NOT a transfer (rule #%d), cannot switch accounts.', $journal['transaction_journal_id'], $this->action->rule_id)); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.is_not_transfer'))); + return false; } - /** @var Transaction $sourceTransaction */ - $sourceTransaction = $object->transactions()->where('amount', '<', 0)->first(); - /** @var Transaction $destTransaction */ - $destTransaction = $object->transactions()->where('amount', '>', 0)->first(); + /** @var null|Transaction $sourceTransaction */ + $sourceTransaction = $object->transactions()->where('amount', '<', 0)->first(); + + /** @var null|Transaction $destTransaction */ + $destTransaction = $object->transactions()->where('amount', '>', 0)->first(); if (null === $sourceTransaction || null === $destTransaction) { - Log::error(sprintf('Journal #%d has no source or destination transaction (rule #%d), cannot switch accounts.', $journal['transaction_journal_id'], $this->action->rule_id)); + app('log')->error(sprintf('Journal #%d has no source or destination transaction (rule #%d), cannot switch accounts.', $journal['transaction_journal_id'], $this->action->rule_id)); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_accounts'))); + return false; } - $sourceAccountId = (int)$sourceTransaction->account_id; + $sourceAccountId = $sourceTransaction->account_id; $destinationAccountId = $destTransaction->account_id; $sourceTransaction->account_id = $destinationAccountId; $destTransaction->account_id = $sourceAccountId; diff --git a/app/TransactionRules/Actions/UpdatePiggybank.php b/app/TransactionRules/Actions/UpdatePiggybank.php index faab1c7f6c..82061f9b10 100644 --- a/app/TransactionRules/Actions/UpdatePiggybank.php +++ b/app/TransactionRules/Actions/UpdatePiggybank.php @@ -30,11 +30,9 @@ use FireflyIII\Models\PiggyBank; use FireflyIII\Models\RuleAction; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; -use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; use FireflyIII\User; -use Illuminate\Support\Facades\Log; /** * Class UpdatePiggybank @@ -46,8 +44,6 @@ class UpdatePiggybank implements ActionInterface /** * TriggerInterface constructor. - * - * @param RuleAction $action */ public function __construct(RuleAction $action, ActionExpressionEvaluator $evaluator) { @@ -55,38 +51,38 @@ class UpdatePiggybank implements ActionInterface $this->evaluator = $evaluator; } - /** - * @inheritDoc - */ public function actOnArray(array $journal): bool { - Log::debug(sprintf('Triggered rule action UpdatePiggybank on journal #%d', $journal['transaction_journal_id'])); + app('log')->debug(sprintf('Triggered rule action UpdatePiggybank on journal #%d', $journal['transaction_journal_id'])); $piggyBankName = $this->evaluator->evaluate($journal); // refresh the transaction type. - $user = User::find($journal['user_id']); - /** @var TransactionJournal $journalObj */ - $journalObj = $user->transactionJournals()->find($journal['transaction_journal_id']); - $type = TransactionType::find((int)$journalObj->transaction_type_id); + /** @var User $user */ + $user = User::find($journal['user_id']); - $piggyBank = $this->findPiggyBank($user, $piggyBankName); + /** @var TransactionJournal $journalObj */ + $journalObj = $user->transactionJournals()->find($journal['transaction_journal_id']); + + $piggyBank = $this->findPiggyBank($user, $piggyBankName); if (null === $piggyBank) { - Log::info( + app('log')->info( sprintf('No piggy bank named "%s", cant execute action #%d of rule #%d', $piggyBankName, $this->action->id, $this->action->rule_id) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.cannot_find_piggy', ['name' => $piggyBankName]))); + return false; } - Log::debug(sprintf('Found piggy bank #%d ("%s")', $piggyBank->id, $piggyBank->name)); + app('log')->debug(sprintf('Found piggy bank #%d ("%s")', $piggyBank->id, $piggyBank->name)); /** @var Transaction $source */ - $source = $journalObj->transactions()->where('amount', '<', 0)->first(); + $source = $journalObj->transactions()->where('amount', '<', 0)->first(); + /** @var Transaction $destination */ $destination = $journalObj->transactions()->where('amount', '>', 0)->first(); - if ((int)$source->account_id === (int)$piggyBank->account_id) { - Log::debug('Piggy bank account is linked to source, so remove amount from piggy bank.'); + if ($source->account_id === $piggyBank->account_id) { + app('log')->debug('Piggy bank account is linked to source, so remove amount from piggy bank.'); $this->removeAmount($piggyBank, $journalObj, $destination->amount); event( @@ -106,8 +102,8 @@ class UpdatePiggybank implements ActionInterface return true; } - if ((int)$destination->account_id === (int)$piggyBank->account_id) { - Log::debug('Piggy bank account is linked to source, so add amount to piggy bank.'); + if ($destination->account_id === $piggyBank->account_id) { + app('log')->debug('Piggy bank account is linked to source, so add amount to piggy bank.'); $this->addAmount($piggyBank, $journalObj, $destination->amount); event( @@ -127,7 +123,7 @@ class UpdatePiggybank implements ActionInterface return true; } - Log::info( + app('log')->info( sprintf( 'Piggy bank is not linked to source ("#%d") or destination ("#%d"), so no action will be taken.', $source->account_id, @@ -135,38 +131,27 @@ class UpdatePiggybank implements ActionInterface ) ); event(new RuleActionFailedOnArray($this->action, $journal, trans('rules.no_link_piggy', ['name' => $piggyBankName]))); + return false; } - /** - * @param User $user - * - * @return PiggyBank|null - */ private function findPiggyBank(User $user, string $name): ?PiggyBank { return $user->piggyBanks()->where('piggy_banks.name', $name)->first(); } - /** - * @param PiggyBank $piggyBank - * @param TransactionJournal $journal - * @param string $amount - * - * @return void - */ private function removeAmount(PiggyBank $piggyBank, TransactionJournal $journal, string $amount): void { $repository = app(PiggyBankRepositoryInterface::class); $repository->setUser($journal->user); // how much can we remove from this piggy bank? - $toRemove = $repository->getCurrentAmount($piggyBank); - Log::debug(sprintf('Amount is %s, max to remove is %s', $amount, $toRemove)); + $toRemove = $repository->getCurrentAmount($piggyBank); + app('log')->debug(sprintf('Amount is %s, max to remove is %s', $amount, $toRemove)); // if $amount is bigger than $toRemove, shrink it. - $amount = -1 === bccomp($amount, $toRemove) ? $amount : $toRemove; - Log::debug(sprintf('Amount is now %s', $amount)); + $amount = -1 === bccomp($amount, $toRemove) ? $amount : $toRemove; + app('log')->debug(sprintf('Amount is now %s', $amount)); // if amount is zero, stop. if (0 === bccomp('0', $amount)) { @@ -181,18 +166,11 @@ class UpdatePiggybank implements ActionInterface return; } - Log::debug(sprintf('Will now remove %s from piggy bank.', $amount)); + app('log')->debug(sprintf('Will now remove %s from piggy bank.', $amount)); $repository->removeAmount($piggyBank, $amount, $journal); } - /** - * @param PiggyBank $piggyBank - * @param TransactionJournal $journal - * @param string $amount - * - * @return void - */ private function addAmount(PiggyBank $piggyBank, TransactionJournal $journal, string $amount): void { $repository = app(PiggyBankRepositoryInterface::class); @@ -200,18 +178,17 @@ class UpdatePiggybank implements ActionInterface // how much can we add to the piggy bank? if (0 !== bccomp($piggyBank->targetamount, '0')) { - $toAdd = bcsub($piggyBank->targetamount, $repository->getCurrentAmount($piggyBank)); - Log::debug(sprintf('Max amount to add to piggy bank is %s, amount is %s', $toAdd, $amount)); + $toAdd = bcsub($piggyBank->targetamount, $repository->getCurrentAmount($piggyBank)); + app('log')->debug(sprintf('Max amount to add to piggy bank is %s, amount is %s', $toAdd, $amount)); // update amount to fit: $amount = -1 === bccomp($amount, $toAdd) ? $amount : $toAdd; - Log::debug(sprintf('Amount is now %s', $amount)); + app('log')->debug(sprintf('Amount is now %s', $amount)); } if (0 === bccomp($piggyBank->targetamount, '0')) { - Log::debug('Target amount is zero, can add anything.'); + app('log')->debug('Target amount is zero, can add anything.'); } - // if amount is zero, stop. if (0 === bccomp('0', $amount)) { app('log')->warning('Amount left is zero, stop.'); @@ -225,7 +202,7 @@ class UpdatePiggybank implements ActionInterface return; } - Log::debug(sprintf('Will now add %s to piggy bank.', $amount)); + app('log')->debug(sprintf('Will now add %s to piggy bank.', $amount)); $repository->addAmount($piggyBank, $amount, $journal); } diff --git a/app/TransactionRules/Engine/RuleEngineInterface.php b/app/TransactionRules/Engine/RuleEngineInterface.php index 687abf7627..3530bc4387 100644 --- a/app/TransactionRules/Engine/RuleEngineInterface.php +++ b/app/TransactionRules/Engine/RuleEngineInterface.php @@ -33,8 +33,6 @@ interface RuleEngineInterface { /** * Add operators added to each search by the rule engine. - * - * @param array $operator */ public function addOperator(array $operator): void; @@ -50,34 +48,20 @@ interface RuleEngineInterface /** * Return the number of changed transactions from the previous "fire" action. - * - * @return int */ public function getResults(): int; - /** - * @param bool $refreshTriggers - * - * @return void - */ public function setRefreshTriggers(bool $refreshTriggers): void; /** * Add entire rule groups for the engine to execute. - * - * @param Collection $ruleGroups */ public function setRuleGroups(Collection $ruleGroups): void; /** * Add rules for the engine to execute. - * - * @param Collection $rules */ public function setRules(Collection $rules): void; - /** - * @param User $user - */ public function setUser(User $user): void; } diff --git a/app/TransactionRules/Engine/SearchRuleEngine.php b/app/TransactionRules/Engine/SearchRuleEngine.php index cb7ffa47b0..45733171a4 100644 --- a/app/TransactionRules/Engine/SearchRuleEngine.php +++ b/app/TransactionRules/Engine/SearchRuleEngine.php @@ -35,7 +35,6 @@ use FireflyIII\Support\Search\SearchInterface; use FireflyIII\TransactionRules\Factory\ActionFactory; use FireflyIII\User; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class SearchRuleEngine @@ -51,33 +50,27 @@ class SearchRuleEngine implements RuleEngineInterface public function __construct() { - $this->rules = new Collection(); - $this->groups = new Collection(); - $this->operators = []; - $this->resultCount = []; + $this->rules = new Collection(); + $this->groups = new Collection(); + $this->operators = []; + $this->resultCount = []; // always collect the triggers from the database, unless indicated otherwise. $this->refreshTriggers = true; } - /** - * @inheritDoc - */ public function addOperator(array $operator): void { - Log::debug('Add extra operator: ', $operator); + app('log')->debug('Add extra operator: ', $operator); $this->operators[] = $operator; } - /** - * - */ public function find(): Collection { - Log::debug('SearchRuleEngine::find()'); + app('log')->debug('SearchRuleEngine::find()'); $collection = new Collection(); foreach ($this->rules as $rule) { - $found = new Collection(); + $found = new Collection(); if (true === $rule->strict) { $found = $this->findStrictRule($rule); } @@ -92,16 +85,12 @@ class SearchRuleEngine implements RuleEngineInterface /** * Finds the transactions a strict rule will execute on. - * - * @param Rule $rule - * - * @return Collection */ private function findStrictRule(Rule $rule): Collection { - Log::debug(sprintf('Now in findStrictRule(#%d)', $rule->id ?? 0)); - $searchArray = []; - $triggers = []; + app('log')->debug(sprintf('Now in findStrictRule(#%d)', $rule->id ?? 0)); + $searchArray = []; + $triggers = []; if ($this->refreshTriggers) { $triggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get(); } @@ -115,42 +104,44 @@ class SearchRuleEngine implements RuleEngineInterface continue; } - // if needs no context, value is different: - $needsContext = config(sprintf('search.operators.%s.needs_context', $ruleTrigger->trigger_type)) ?? true; + // if the trigger needs no context, value is different: + $needsContext = (bool)(config(sprintf('search.operators.%s.needs_context', $ruleTrigger->trigger_type)) ?? true); if (false === $needsContext) { - Log::debug(sprintf('SearchRuleEngine:: add a rule trigger: %s:true', $ruleTrigger->trigger_type)); + app('log')->debug(sprintf('SearchRuleEngine:: add a rule trigger (no context): %s:true', $ruleTrigger->trigger_type)); $searchArray[$ruleTrigger->trigger_type][] = 'true'; } if (true === $needsContext) { - Log::debug(sprintf('SearchRuleEngine:: add a rule trigger: %s:"%s"', $ruleTrigger->trigger_type, $ruleTrigger->trigger_value)); + app('log')->debug(sprintf('SearchRuleEngine:: add a rule trigger (context): %s:"%s"', $ruleTrigger->trigger_type, $ruleTrigger->trigger_value)); $searchArray[$ruleTrigger->trigger_type][] = sprintf('"%s"', $ruleTrigger->trigger_value); } } - // add local operators: foreach ($this->operators as $operator) { - Log::debug(sprintf('SearchRuleEngine:: add local added operator: %s:"%s"', $operator['type'], $operator['value'])); + app('log')->debug(sprintf('SearchRuleEngine:: add local added operator: %s:"%s"', $operator['type'], $operator['value'])); $searchArray[$operator['type']][] = sprintf('"%s"', $operator['value']); } - $date = today(config('app.timezone')); + $date = today(config('app.timezone')); if ($this->hasSpecificJournalTrigger($searchArray)) { $date = $this->setDateFromJournalTrigger($searchArray); } + // build and run the search engine. $searchEngine = app(SearchInterface::class); $searchEngine->setUser($this->user); $searchEngine->setPage(1); $searchEngine->setLimit(31337); $searchEngine->setDate($date); - + app('log')->debug('Search array', $searchArray); foreach ($searchArray as $type => $searches) { foreach ($searches as $value) { - $searchEngine->parseQuery(sprintf('%s:%s', $type, $value)); + $query = sprintf('%s:%s', $type, $value); + app('log')->debug(sprintf('SearchRuleEngine:: add query "%s"', $query)); + $searchEngine->parseQuery($query); } } - $result = $searchEngine->searchTransactions(); + $result = $searchEngine->searchTransactions(); return $result->getCollection(); } @@ -159,113 +150,104 @@ class SearchRuleEngine implements RuleEngineInterface * Search in the triggers of this particular search and if it contains * one search operator for "journal_id" it means the date ranges * in the search may need to be updated. - * - * @param array $array - * - * @return bool */ private function hasSpecificJournalTrigger(array $array): bool { - Log::debug('Now in hasSpecificJournalTrigger.'); + app('log')->debug('Now in hasSpecificJournalTrigger.'); $journalTrigger = false; $dateTrigger = false; foreach ($array as $triggerName => $values) { if ('journal_id' === $triggerName && is_array($values) && 1 === count($values)) { - Log::debug('Found a journal_id trigger with 1 journal, true.'); + app('log')->debug('Found a journal_id trigger with 1 journal, true.'); $journalTrigger = true; } if (in_array($triggerName, ['date_is', 'date', 'on', 'date_before', 'before', 'date_after', 'after'], true)) { - Log::debug('Found a date related trigger, set to true.'); + app('log')->debug('Found a date related trigger, set to true.'); $dateTrigger = true; } } - $result = $journalTrigger && $dateTrigger; - Log::debug(sprintf('Result of hasSpecificJournalTrigger is %s.', var_export($result, true))); + $result = $journalTrigger && $dateTrigger; + app('log')->debug(sprintf('Result of hasSpecificJournalTrigger is %s.', var_export($result, true))); return $result; } - /** - * @param array $array - * - * @return Carbon - */ private function setDateFromJournalTrigger(array $array): Carbon { - Log::debug('Now in setDateFromJournalTrigger()'); + app('log')->debug('Now in setDateFromJournalTrigger()'); $journalId = 0; foreach ($array as $triggerName => $values) { if ('journal_id' === $triggerName && is_array($values) && 1 === count($values)) { - $journalId = (int)trim(($values[0] ?? '"0"'), '"'); // follows format "123". - Log::debug(sprintf('Found journal ID #%d', $journalId)); + $journalId = (int)trim($values[0] ?? '"0"', '"'); // follows format "123". + app('log')->debug(sprintf('Found journal ID #%d', $journalId)); } } if (0 !== $journalId) { $repository = app(JournalRepositoryInterface::class); $repository->setUser($this->user); - $journal = $repository->find($journalId); + $journal = $repository->find($journalId); if (null !== $journal) { $date = $journal->date; - Log::debug(sprintf('Found journal #%d with date %s.', $journal->id, $journal->date->format('Y-m-d'))); + app('log')->debug(sprintf('Found journal #%d with date %s.', $journal->id, $journal->date->format('Y-m-d'))); return $date; } } - Log::debug('Found no journal, return default date.'); + app('log')->debug('Found no journal, return default date.'); return today(config('app.timezone')); } - /** - * @inheritDoc - */ public function setUser(User $user): void { $this->user = $user; $this->operators = []; } - /** - * @param Rule $rule - * - * @return Collection - */ private function findNonStrictRule(Rule $rule): Collection { + app('log')->debug(sprintf('findNonStrictRule(#%d)', $rule->id)); // start a search query for individual each trigger: $total = new Collection(); $count = 0; $triggers = []; if ($this->refreshTriggers) { + app('log')->debug('Will refresh triggers.'); $triggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get(); } if (!$this->refreshTriggers) { + app('log')->debug('Will not refresh triggers.'); $triggers = $rule->ruleTriggers; } + app('log')->debug(sprintf('Will run %d trigger(s).', count($triggers))); /** @var RuleTrigger $ruleTrigger */ foreach ($triggers as $ruleTrigger) { + app('log')->debug(sprintf('Now at rule trigger #%d: %s:"%s" (%s).', $ruleTrigger->id, $ruleTrigger->trigger_type, $ruleTrigger->trigger_value, var_export($ruleTrigger->stop_processing, true))); if (false === $ruleTrigger->active) { + app('log')->debug('Trigger is not active, continue.'); + continue; } if ('user_action' === $ruleTrigger->trigger_type) { - Log::debug('Skip trigger type.'); + app('log')->debug('Skip trigger type. continue.'); + continue; } $searchArray = []; $needsContext = config(sprintf('search.operators.%s.needs_context', $ruleTrigger->trigger_type)) ?? true; if (false === $needsContext) { - Log::debug(sprintf('SearchRuleEngine:: non strict, will search for: %s:true', $ruleTrigger->trigger_type)); + app('log')->debug(sprintf('SearchRuleEngine:: non strict, will search for: %s:true', $ruleTrigger->trigger_type)); $searchArray[$ruleTrigger->trigger_type] = 'true'; } if (true === $needsContext) { - Log::debug(sprintf('SearchRuleEngine:: non strict, will search for: %s:"%s"', $ruleTrigger->trigger_type, $ruleTrigger->trigger_value)); + app('log')->debug(sprintf('SearchRuleEngine:: non strict, will search for: %s:"%s"', $ruleTrigger->trigger_type, $ruleTrigger->trigger_value)); $searchArray[$ruleTrigger->trigger_type] = sprintf('"%s"', $ruleTrigger->trigger_value); } // then, add local operators as well: foreach ($this->operators as $operator) { - Log::debug(sprintf('SearchRuleEngine:: add local added operator: %s:"%s"', $operator['type'], $operator['value'])); + app('log')->debug(sprintf('SearchRuleEngine:: add local added operator: %s:"%s"', $operator['type'], $operator['value'])); $searchArray[$operator['type']] = sprintf('"%s"', $operator['value']); } @@ -279,87 +261,97 @@ class SearchRuleEngine implements RuleEngineInterface $searchEngine->parseQuery(sprintf('%s:%s', $type, $value)); } - $result = $searchEngine->searchTransactions(); - $collection = $result->getCollection(); - Log::debug(sprintf('Found in this run, %d transactions', $collection->count())); - $total = $total->merge($collection); - Log::debug(sprintf('Total collection is now %d transactions', $total->count())); - $count++; + $result = $searchEngine->searchTransactions(); + $collection = $result->getCollection(); + app('log')->debug(sprintf('Found in this run, %d transactions', $collection->count())); + $total = $total->merge($collection); + app('log')->debug(sprintf('Total collection is now %d transactions', $total->count())); + ++$count; + // if trigger says stop processing, do so. + if ($ruleTrigger->stop_processing && $result->count() > 0) { + app('log')->debug('The trigger says to stop processing, so stop processing other triggers.'); + + break; + } } - Log::debug(sprintf('Total collection is now %d transactions', $total->count())); - Log::debug(sprintf('Done running %d trigger(s)', $count)); + app('log')->debug(sprintf('Total collection is now %d transactions', $total->count())); + app('log')->debug(sprintf('Done running %d trigger(s)', $count)); // make collection unique - $unique = $total->unique( - function (array $group) { + $unique = $total->unique( + static function (array $group) { $str = ''; foreach ($group['transactions'] as $transaction) { $str = sprintf('%s%d', $str, $transaction['transaction_journal_id']); } - $key = sprintf('%d%s', $group['id'], $str); - //Log::debug(sprintf('Return key: %s ', $key)); - return $key; + return sprintf('%d%s', $group['id'], $str); + // app('log')->debug(sprintf('Return key: %s ', $key)); } ); - Log::debug(sprintf('SearchRuleEngine:: Found %d transactions using search engine.', $unique->count())); + app('log')->debug(sprintf('SearchRuleEngine:: Found %d transactions using search engine.', $unique->count())); return $unique; } /** - * @inheritDoc * @throws FireflyException */ public function fire(): void { $this->resultCount = []; - Log::debug('SearchRuleEngine::fire()!'); + app('log')->debug('SearchRuleEngine::fire()!'); // if rules and no rule groups, file each rule separately. if (0 !== $this->rules->count()) { - Log::debug(sprintf('SearchRuleEngine:: found %d rule(s) to fire.', $this->rules->count())); + app('log')->debug(sprintf('SearchRuleEngine:: found %d rule(s) to fire.', $this->rules->count())); + + /** @var Rule $rule */ foreach ($this->rules as $rule) { - $this->fireRule($rule); + $result = $this->fireRule($rule); + if (true === $result && $rule->stop_processing) { + app('log')->debug(sprintf('Rule #%d has triggered and executed, but calls to stop processing. Since not in the context of a group, do not stop.', $rule->id)); + } + if (false === $result && $rule->stop_processing) { + app('log')->debug(sprintf('Rule #%d has triggered and changed nothing, but calls to stop processing. Do not stop.', $rule->id)); + } } - Log::debug('SearchRuleEngine:: done processing all rules!'); + app('log')->debug('SearchRuleEngine:: done processing all rules!'); return; } if (0 !== $this->groups->count()) { - Log::debug(sprintf('SearchRuleEngine:: found %d rule group(s) to fire.', $this->groups->count())); + app('log')->debug(sprintf('SearchRuleEngine:: found %d rule group(s) to fire.', $this->groups->count())); + // fire each group: /** @var RuleGroup $group */ foreach ($this->groups as $group) { $this->fireGroup($group); } } - Log::debug('SearchRuleEngine:: done processing all rules!'); + app('log')->debug('SearchRuleEngine:: done processing all rules!'); } /** * Returns true if the rule has been triggered. * - * @param Rule $rule - * - * @return bool * @throws FireflyException */ private function fireRule(Rule $rule): bool { - Log::debug(sprintf('Now going to fire rule #%d', $rule->id)); + app('log')->debug(sprintf('Now going to fire rule #%d', $rule->id)); if (false === $rule->active) { - Log::debug(sprintf('Rule #%d is not active!', $rule->id)); + app('log')->debug(sprintf('Rule #%d is not active!', $rule->id)); return false; } if (true === $rule->strict) { - Log::debug(sprintf('Rule #%d is a strict rule.', $rule->id)); + app('log')->debug(sprintf('Rule #%d is a strict rule.', $rule->id)); return $this->fireStrictRule($rule); } - Log::debug(sprintf('Rule #%d is not strict rule.', $rule->id)); + app('log')->debug(sprintf('Rule #%d is not strict rule.', $rule->id)); return $this->fireNonStrictRule($rule); } @@ -367,39 +359,34 @@ class SearchRuleEngine implements RuleEngineInterface /** * Return true if the rule is fired (the collection is larger than zero). * - * @param Rule $rule - * - * @return bool * @throws FireflyException */ private function fireStrictRule(Rule $rule): bool { - Log::debug(sprintf('SearchRuleEngine::fireStrictRule(%d)!', $rule->id)); + app('log')->debug(sprintf('SearchRuleEngine::fireStrictRule(%d)!', $rule->id)); $collection = $this->findStrictRule($rule); $this->processResults($rule, $collection); - Log::debug(sprintf('SearchRuleEngine:: done processing strict rule #%d', $rule->id)); + app('log')->debug(sprintf('SearchRuleEngine:: done processing strict rule #%d', $rule->id)); - $result = $collection->count() > 0; + $result = $collection->count() > 0; if (true === $result) { - Log::debug(sprintf('SearchRuleEngine:: rule #%d was triggered (on %d transaction(s)).', $rule->id, $collection->count())); + app('log')->debug(sprintf('SearchRuleEngine:: rule #%d was triggered (on %d transaction(s)).', $rule->id, $collection->count())); return true; } - Log::debug(sprintf('SearchRuleEngine:: rule #%d was not triggered (on %d transaction(s)).', $rule->id, $collection->count())); + app('log')->debug(sprintf('SearchRuleEngine:: rule #%d was not triggered (on %d transaction(s)).', $rule->id, $collection->count())); return false; } /** - * @param Rule $rule - * @param Collection $collection - * * @throws FireflyException */ private function processResults(Rule $rule, Collection $collection): void { - Log::debug(sprintf('SearchRuleEngine:: Going to process %d results.', $collection->count())); + app('log')->debug(sprintf('SearchRuleEngine:: Going to process %d results.', $collection->count())); + /** @var array $group */ foreach ($collection as $group) { $this->processTransactionGroup($rule, $group); @@ -407,14 +394,12 @@ class SearchRuleEngine implements RuleEngineInterface } /** - * @param Rule $rule - * @param array $group - * * @throws FireflyException */ private function processTransactionGroup(Rule $rule, array $group): void { - Log::debug(sprintf('SearchRuleEngine:: Will now execute actions on transaction group #%d', $group['id'])); + app('log')->debug(sprintf('SearchRuleEngine:: Will now execute actions on transaction group #%d', $group['id'])); + /** @var array $transaction */ foreach ($group['transactions'] as $transaction) { $this->processTransactionJournal($rule, $transaction); @@ -422,15 +407,13 @@ class SearchRuleEngine implements RuleEngineInterface } /** - * @param Rule $rule - * @param array $transaction - * * @throws FireflyException */ private function processTransactionJournal(Rule $rule, array $transaction): void { - Log::debug(sprintf('SearchRuleEngine:: Will now execute actions on transaction journal #%d', $transaction['transaction_journal_id'])); + app('log')->debug(sprintf('SearchRuleEngine:: Will now execute actions on transaction journal #%d', $transaction['transaction_journal_id'])); $actions = $rule->ruleActions()->orderBy('order', 'ASC')->get(); + /** @var RuleAction $ruleAction */ foreach ($actions as $ruleAction) { if (false === $ruleAction->active) { @@ -444,21 +427,17 @@ class SearchRuleEngine implements RuleEngineInterface } /** - * @param RuleAction $ruleAction - * @param array $transaction - * - * @return bool * @throws FireflyException */ private function processRuleAction(RuleAction $ruleAction, array $transaction): bool { - Log::debug(sprintf('Executing rule action "%s" with value "%s"', $ruleAction->action_type, $ruleAction->action_value)); + app('log')->debug(sprintf('Executing rule action "%s" with value "%s"', $ruleAction->action_type, $ruleAction->action_value)); $actionClass = ActionFactory::getAction($ruleAction); $result = $actionClass->actOnArray($transaction); $journalId = $transaction['transaction_journal_id'] ?? 0; if (true === $result) { $this->resultCount[$journalId] = array_key_exists($journalId, $this->resultCount) ? $this->resultCount[$journalId]++ : 1; - Log::debug( + app('log')->debug( sprintf( 'Action "%s" on journal #%d was executed, so count a result. Updated transaction journal count is now %d.', $ruleAction->action_type, @@ -468,15 +447,18 @@ class SearchRuleEngine implements RuleEngineInterface ); } if (false === $result) { - Log::debug(sprintf('Action "%s" reports NO changes were made.', $ruleAction->action_type)); + app('log')->debug(sprintf('Action "%s" reports NO changes were made.', $ruleAction->action_type)); } // pick up from the action if it actually acted or not: - if ($ruleAction->stop_processing) { - Log::debug(sprintf('Rule action "%s" asks to break, so break!', $ruleAction->action_type)); + if ($ruleAction->stop_processing && true === $result) { + app('log')->debug(sprintf('Rule action "%s" reports changes AND asks to break, so break!', $ruleAction->action_type)); return true; } + if ($ruleAction->stop_processing && false === $result) { + app('log')->debug(sprintf('Rule action "%s" reports NO changes AND asks to break, but we wont break!', $ruleAction->action_type)); + } return false; } @@ -484,41 +466,32 @@ class SearchRuleEngine implements RuleEngineInterface /** * Return true if the rule is fired (the collection is larger than zero). * - * @param Rule $rule - * - * @return bool * @throws FireflyException */ private function fireNonStrictRule(Rule $rule): bool { - Log::debug(sprintf('SearchRuleEngine::fireNonStrictRule(%d)!', $rule->id)); + app('log')->debug(sprintf('SearchRuleEngine::fireNonStrictRule(%d)!', $rule->id)); $collection = $this->findNonStrictRule($rule); $this->processResults($rule, $collection); - Log::debug(sprintf('SearchRuleEngine:: done processing non-strict rule #%d', $rule->id)); + app('log')->debug(sprintf('SearchRuleEngine:: done processing non-strict rule #%d', $rule->id)); return $collection->count() > 0; } /** - * @param RuleGroup $group - * - * @return void * @throws FireflyException */ private function fireGroup(RuleGroup $group): void { - $all = false; - Log::debug(sprintf('Going to fire group #%d with %d rule(s)', $group->id, $group->rules->count())); + app('log')->debug(sprintf('Going to fire group #%d with %d rule(s)', $group->id, $group->rules->count())); + /** @var Rule $rule */ foreach ($group->rules as $rule) { - Log::debug(sprintf('Going to fire rule #%d from group #%d', $rule->id, $group->id)); + app('log')->debug(sprintf('Going to fire rule #%d from group #%d', $rule->id, $group->id)); $result = $this->fireRule($rule); - if (true === $result) { - $all = true; - } if (true === $result && true === $rule->stop_processing) { - Log::debug(sprintf('The rule was triggered and rule->stop_processing = true, so group #%d will stop processing further rules.', $group->id)); + app('log')->debug(sprintf('The rule was triggered and rule->stop_processing = true, so group #%d will stop processing further rules.', $group->id)); return; } @@ -527,45 +500,34 @@ class SearchRuleEngine implements RuleEngineInterface /** * Return the number of changed transactions from the previous "fire" action. - * - * @return int */ public function getResults(): int { return count($this->resultCount); } - /** - * @param bool $refreshTriggers - */ public function setRefreshTriggers(bool $refreshTriggers): void { $this->refreshTriggers = $refreshTriggers; } - /** - * @inheritDoc - */ public function setRuleGroups(Collection $ruleGroups): void { - Log::debug(__METHOD__); + app('log')->debug(__METHOD__); foreach ($ruleGroups as $group) { if ($group instanceof RuleGroup) { - Log::debug(sprintf('Adding a rule group to the SearchRuleEngine: #%d ("%s")', $group->id, $group->title)); + app('log')->debug(sprintf('Adding a rule group to the SearchRuleEngine: #%d ("%s")', $group->id, $group->title)); $this->groups->push($group); } } } - /** - * @inheritDoc - */ public function setRules(Collection $rules): void { - Log::debug(__METHOD__); + app('log')->debug(__METHOD__); foreach ($rules as $rule) { if ($rule instanceof Rule) { - Log::debug(sprintf('Adding a rule to the SearchRuleEngine: #%d ("%s")', $rule->id, $rule->title)); + app('log')->debug(sprintf('Adding a rule to the SearchRuleEngine: #%d ("%s")', $rule->id, $rule->title)); $this->rules->push($rule); } } diff --git a/app/TransactionRules/Factory/ActionFactory.php b/app/TransactionRules/Factory/ActionFactory.php index c53d8c1a67..a34bf7615b 100644 --- a/app/TransactionRules/Factory/ActionFactory.php +++ b/app/TransactionRules/Factory/ActionFactory.php @@ -30,12 +30,9 @@ use FireflyIII\Support\Domain; use FireflyIII\TransactionRules\Actions\ActionInterface; use FireflyIII\TransactionRules\Expressions\ActionExpressionEvaluator; use FireflyIII\TransactionRules\Factory\ExpressionLanguageFactory; -use Illuminate\Support\Facades\Log; /** * Class ActionFactory can create actions. - * - */ class ActionFactory { @@ -48,21 +45,17 @@ class ActionFactory * with value "Groceries" this method will return a corresponding SetCategory object preset * to "Groceries". Any transaction journal then fed to this object will have its category changed. * - * @param RuleAction $action - * - * @return ActionInterface - * * @throws FireflyException */ public static function getAction(RuleAction $action): ActionInterface { $class = self::getActionClass($action->action_type); - Log::debug(sprintf('self::getActionClass("%s") = "%s"', $action->action_type, $class)); + app('log')->debug(sprintf('self::getActionClass("%s") = "%s"', $action->action_type, $class)); $expressionLanguage = ExpressionLanguageFactory::get(); $expressionEvaluator = new ActionExpressionEvaluator($expressionLanguage, $action->action_value); - return new $class($action, $expressionEvaluator); + return new $class($action, $expressionEvaluator); // @phpstan-ignore-line } /** @@ -70,10 +63,6 @@ class ActionFactory * that will match the given action type (ie. "change_category") to the matching class name * (SetCategory) using the configuration (firefly.php). * - * @param string $actionType - * - * @return string - * * @throws FireflyException */ public static function getActionClass(string $actionType): string @@ -84,7 +73,7 @@ class ActionFactory throw new FireflyException('No such action exists ("' . e($actionType) . '").'); } - $class = $actionTypes[$actionType]; + $class = $actionTypes[$actionType]; if (!class_exists($class)) { throw new FireflyException('Could not instantiate class for rule action type "' . e($actionType) . '" (' . e($class) . ').'); } @@ -94,8 +83,6 @@ class ActionFactory /** * Returns a map with actiontypes, mapped to the class representing that type. - * - * @return array */ protected static function getActionTypes(): array { diff --git a/app/Transformers/AbstractTransformer.php b/app/Transformers/AbstractTransformer.php index 1e76cf7ac1..ba6331d3ba 100644 --- a/app/Transformers/AbstractTransformer.php +++ b/app/Transformers/AbstractTransformer.php @@ -27,24 +27,17 @@ use League\Fractal\TransformerAbstract; use Symfony\Component\HttpFoundation\ParameterBag; /** - * * Class AbstractTransformer */ abstract class AbstractTransformer extends TransformerAbstract { protected ParameterBag $parameters; - /** - * @return ParameterBag - */ final public function getParameters(): ParameterBag { return $this->parameters; } - /** - * @param ParameterBag $parameters - */ final public function setParameters(ParameterBag $parameters): void { $this->parameters = $parameters; diff --git a/app/Transformers/AccountTransformer.php b/app/Transformers/AccountTransformer.php index eaa82dca79..264b4d779d 100644 --- a/app/Transformers/AccountTransformer.php +++ b/app/Transformers/AccountTransformer.php @@ -27,7 +27,6 @@ use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use JsonException; use Symfony\Component\HttpFoundation\ParameterBag; /** @@ -38,10 +37,7 @@ class AccountTransformer extends AbstractTransformer protected AccountRepositoryInterface $repository; /** - * * AccountTransformer constructor. - * - */ public function __construct() { @@ -52,39 +48,35 @@ class AccountTransformer extends AbstractTransformer /** * Transform the account. * - * @param Account $account - * - * @return array * @throws FireflyException - * @throws JsonException */ public function transform(Account $account): array { $this->repository->setUser($account->user); // get account type: - $fullType = $account->accountType->type; - $accountType = (string)config(sprintf('firefly.shortNamesByFullName.%s', $fullType)); - $liabilityType = (string)config(sprintf('firefly.shortLiabilityNameByFullName.%s', $fullType)); - $liabilityType = '' === $liabilityType ? null : strtolower($liabilityType); - $liabilityDirection = $this->repository->getMetaValue($account, 'liability_direction'); + $fullType = $account->accountType->type; + $accountType = (string)config(sprintf('firefly.shortNamesByFullName.%s', $fullType)); + $liabilityType = (string)config(sprintf('firefly.shortLiabilityNameByFullName.%s', $fullType)); + $liabilityType = '' === $liabilityType ? null : strtolower($liabilityType); + $liabilityDirection = $this->repository->getMetaValue($account, 'liability_direction'); // get account role (will only work if the type is asset. - $accountRole = $this->getAccountRole($account, $accountType); - $date = $this->getDate(); + $accountRole = $this->getAccountRole($account, $accountType); + $date = $this->getDate(); $date->endOfDay(); [$currencyId, $currencyCode, $currencySymbol, $decimalPlaces] = $this->getCurrency($account); - [$creditCardType, $monthlyPaymentDate] = $this->getCCInfo($account, $accountRole, $accountType); - [$openingBalance, $openingBalanceDate] = $this->getOpeningBalance($account, $accountType); - [$interest, $interestPeriod] = $this->getInterest($account, $accountType); + [$creditCardType, $monthlyPaymentDate] = $this->getCCInfo($account, $accountRole, $accountType); + [$openingBalance, $openingBalanceDate] = $this->getOpeningBalance($account, $accountType); + [$interest, $interestPeriod] = $this->getInterest($account, $accountType); - $openingBalance = app('steam')->bcround($openingBalance, $decimalPlaces); - $includeNetWorth = '0' !== $this->repository->getMetaValue($account, 'include_net_worth'); - $longitude = null; - $latitude = null; - $zoomLevel = null; - $location = $this->repository->getLocation($account); + $openingBalance = app('steam')->bcround($openingBalance, $decimalPlaces); + $includeNetWorth = '0' !== $this->repository->getMetaValue($account, 'include_net_worth'); + $longitude = null; + $latitude = null; + $zoomLevel = null; + $location = $this->repository->getLocation($account); if (null !== $location) { $longitude = $location->longitude; $latitude = $location->latitude; @@ -92,7 +84,7 @@ class AccountTransformer extends AbstractTransformer } // no order for some accounts: - $order = (int)$account->order; + $order = $account->order; if (!in_array(strtolower($accountType), ['liability', 'liabilities', 'asset'], true)) { $order = null; } @@ -133,19 +125,12 @@ class AccountTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/accounts/' . $account->id, + 'uri' => '/accounts/'.$account->id, ], ], ]; } - /** - * @param Account $account - * - * @param string $accountType - * - * @return string|null - */ private function getAccountRole(Account $account, string $accountType): ?string { $accountRole = $this->repository->getMetaValue($account, 'account_role'); @@ -158,8 +143,6 @@ class AccountTransformer extends AbstractTransformer /** * TODO duplicated in the V2 transformer. - * - * @return Carbon */ private function getDate(): Carbon { @@ -172,19 +155,15 @@ class AccountTransformer extends AbstractTransformer } /** - * @param Account $account - * - * @return array * @throws FireflyException - * @throws JsonException */ private function getCurrency(Account $account): array { - $currency = $this->repository->getAccountCurrency($account); + $currency = $this->repository->getAccountCurrency($account); // only grab default when result is null: if (null === $currency) { - $currency = app('amount')->getDefaultCurrencyByUser($account->user); + $currency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); } $currencyId = (string)$currency->id; $currencyCode = $currency->code; @@ -194,13 +173,6 @@ class AccountTransformer extends AbstractTransformer return [$currencyId, $currencyCode, $currencySymbol, $decimalPlaces]; } - /** - * @param Account $account - * @param string|null $accountRole - * @param string $accountType - * - * @return array - */ private function getCCInfo(Account $account, ?string $accountRole, string $accountType): array { $monthlyPaymentDate = null; @@ -212,7 +184,11 @@ class AccountTransformer extends AbstractTransformer if (null !== $monthlyPaymentDate) { // try classic date: if (10 === strlen($monthlyPaymentDate)) { - $monthlyPaymentDate = Carbon::createFromFormat('!Y-m-d', $monthlyPaymentDate, config('app.timezone'))->toAtomString(); + $object = Carbon::createFromFormat('!Y-m-d', $monthlyPaymentDate, config('app.timezone')); + if (false === $object) { + $object = today(config('app.timezone')); + } + $monthlyPaymentDate = $object->toAtomString(); } if (10 !== strlen($monthlyPaymentDate)) { $monthlyPaymentDate = Carbon::parse($monthlyPaymentDate, config('app.timezone'))->toAtomString(); @@ -223,12 +199,7 @@ class AccountTransformer extends AbstractTransformer } /** - * @param Account $account - * @param string $accountType - * - * @return array - * - * TODO refactor call to get~OpeningBalanceAmount / Date because it is a lot of queries. + * TODO refactor call to get~OpeningBalanceAmount / Date because it is a lot of queries */ private function getOpeningBalance(Account $account, string $accountType): array { @@ -240,18 +211,16 @@ class AccountTransformer extends AbstractTransformer $openingBalanceDate = $this->repository->getOpeningBalanceDate($account); } if (null !== $openingBalanceDate) { - $openingBalanceDate = Carbon::createFromFormat('Y-m-d H:i:s', $openingBalanceDate, config('app.timezone'))->toAtomString(); + $object = Carbon::createFromFormat('Y-m-d H:i:s', $openingBalanceDate, config('app.timezone')); + if (false === $object) { + $object = today(config('app.timezone')); + } + $openingBalanceDate = $object->toAtomString(); } return [$openingBalance, $openingBalanceDate]; } - /** - * @param Account $account - * @param string $accountType - * - * @return array - */ private function getInterest(Account $account, string $accountType): array { $interest = null; diff --git a/app/Transformers/AttachmentTransformer.php b/app/Transformers/AttachmentTransformer.php index 2429d02438..e8b162bcd1 100644 --- a/app/Transformers/AttachmentTransformer.php +++ b/app/Transformers/AttachmentTransformer.php @@ -35,8 +35,6 @@ class AttachmentTransformer extends AbstractTransformer /** * BillTransformer constructor. - * - */ public function __construct() { @@ -45,10 +43,6 @@ class AttachmentTransformer extends AbstractTransformer /** * Transform attachment. - * - * @param Attachment $attachment - * - * @return array */ public function transform(Attachment $attachment): array { @@ -71,7 +65,7 @@ class AttachmentTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/attachment/' . $attachment->id, + 'uri' => '/attachment/'.$attachment->id, ], ], ]; diff --git a/app/Transformers/AvailableBudgetTransformer.php b/app/Transformers/AvailableBudgetTransformer.php index 5f24686e0f..7c880200cd 100644 --- a/app/Transformers/AvailableBudgetTransformer.php +++ b/app/Transformers/AvailableBudgetTransformer.php @@ -39,8 +39,6 @@ class AvailableBudgetTransformer extends AbstractTransformer /** * CurrencyTransformer constructor. - * - */ public function __construct() { @@ -51,10 +49,6 @@ class AvailableBudgetTransformer extends AbstractTransformer /** * Transform the note. - * - * @param AvailableBudget $availableBudget - * - * @return array */ public function transform(AvailableBudget $availableBudget): array { @@ -68,7 +62,7 @@ class AvailableBudgetTransformer extends AbstractTransformer 'currency_id' => (string)$currency->id, 'currency_code' => $currency->code, 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, + 'currency_decimal_places' => $currency->decimal_places, 'amount' => app('steam')->bcround($availableBudget->amount, $currency->decimal_places), 'start' => $availableBudget->start_date->toAtomString(), 'end' => $availableBudget->end_date->endOfDay()->toAtomString(), @@ -77,7 +71,7 @@ class AvailableBudgetTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/available_budgets/' . $availableBudget->id, + 'uri' => '/available_budgets/'.$availableBudget->id, ], ], ]; @@ -91,9 +85,6 @@ class AvailableBudgetTransformer extends AbstractTransformer return $data; } - /** - * @return array - */ private function getSpentInBudgets(): array { $allActive = $this->repository->getActiveBudgets(); @@ -102,9 +93,6 @@ class AvailableBudgetTransformer extends AbstractTransformer return array_values($sums); } - /** - * @return array - */ private function spentOutsideBudgets(): array { $sums = $this->noBudgetRepository->sumExpenses($this->parameters->get('start'), $this->parameters->get('end')); diff --git a/app/Transformers/BillTransformer.php b/app/Transformers/BillTransformer.php index 22a7e8c16d..36988b5e2a 100644 --- a/app/Transformers/BillTransformer.php +++ b/app/Transformers/BillTransformer.php @@ -29,6 +29,7 @@ use FireflyIII\Models\Bill; use FireflyIII\Models\ObjectGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Bill\BillRepositoryInterface; +use FireflyIII\Support\Models\BillDateCalculator; use Illuminate\Support\Collection; /** @@ -36,81 +37,111 @@ use Illuminate\Support\Collection; */ class BillTransformer extends AbstractTransformer { + private BillDateCalculator $calculator; private BillRepositoryInterface $repository; /** * BillTransformer constructor. - * - */ public function __construct() { $this->repository = app(BillRepositoryInterface::class); + $this->calculator = app(BillDateCalculator::class); } /** * Transform the bill. * - * @param Bill $bill - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.NPathComplexity) */ public function transform(Bill $bill): array { - $paidData = $this->paidData($bill); - $payDates = $this->payDates($bill); - $currency = $bill->transactionCurrency; - $notes = $this->repository->getNoteText($bill); - $notes = '' === $notes ? null : $notes; + $paidData = $this->paidData($bill); + $lastPaidDate = $this->getLastPaidDate($paidData); + $start = $this->parameters->get('start') ?? today()->subYears(10); + $end = $this->parameters->get('end') ?? today()->addYears(10); + $payDates = $this->calculator->getPayDates($start, $end, $bill->date, $bill->repeat_freq, $bill->skip, $lastPaidDate); + $currency = $bill->transactionCurrency; + $notes = $this->repository->getNoteText($bill); + $notes = '' === $notes ? null : $notes; + $objectGroupId = null; + $objectGroupOrder = null; + $objectGroupTitle = null; $this->repository->setUser($bill->user); - $objectGroupId = null; - $objectGroupOrder = null; - $objectGroupTitle = null; - /** @var ObjectGroup $objectGroup */ - $objectGroup = $bill->objectGroups->first(); + /** @var null|ObjectGroup $objectGroup */ + $objectGroup = $bill->objectGroups->first(); if (null !== $objectGroup) { - $objectGroupId = (int)$objectGroup->id; - $objectGroupOrder = (int)$objectGroup->order; + $objectGroupId = $objectGroup->id; + $objectGroupOrder = $objectGroup->order; $objectGroupTitle = $objectGroup->title; } $paidDataFormatted = []; $payDatesFormatted = []; - foreach ($paidData['paid_dates'] as $object) { - $object['date'] = Carbon::createFromFormat('!Y-m-d', $object['date'], config('app.timezone'))->toAtomString(); + foreach ($paidData as $object) { + $date = Carbon::createFromFormat('!Y-m-d', $object['date'], config('app.timezone')); + if (false === $date) { + $date = today(config('app.timezone')); + } + $object['date'] = $date->toAtomString(); $paidDataFormatted[] = $object; } foreach ($payDates as $string) { - $payDatesFormatted[] = Carbon::createFromFormat('!Y-m-d', $string, config('app.timezone'))->toAtomString(); + $date = Carbon::createFromFormat('!Y-m-d', $string, config('app.timezone')); + if (false === $date) { + $date = today(config('app.timezone')); + } + $payDatesFormatted[] = $date->toAtomString(); } - $nextExpectedMatch = null; - if (null !== $paidData['next_expected_match']) { - $nextExpectedMatch = Carbon::createFromFormat('!Y-m-d', $paidData['next_expected_match'], config('app.timezone'))->toAtomString(); - } - $nextExpectedMatchDiff = trans('firefly.not_expected_period'); - // converting back and forth is bad code but OK. - $temp = new Carbon($nextExpectedMatch); - if ($temp->isToday()) { - $nextExpectedMatchDiff = trans('firefly.today'); + // next expected match + $nem = null; + $nemDate = null; + $nemDiff = trans('firefly.not_expected_period'); + $firstPayDate = $payDates[0] ?? null; + + if (null !== $firstPayDate) { + $nemDate = Carbon::createFromFormat('!Y-m-d', $firstPayDate, config('app.timezone')); + if (false === $nemDate) { + $nemDate = today(config('app.timezone')); + } + $nem = $nemDate->toAtomString(); + + // nullify again when it's outside the current view range. + if ($nemDate->lt($this->parameters->get('start')) || $nemDate->gt($this->parameters->get('end'))) { + $nem = null; + $nemDate = null; + $firstPayDate = null; + } } - $current = $payDatesFormatted[0] ?? null; - if (null !== $current && !$temp->isToday()) { - $temp2 = Carbon::createFromFormat('Y-m-d\TH:i:sP', $current); - $nextExpectedMatchDiff = $temp2->diffForHumans(today(config('app.timezone')), CarbonInterface::DIFF_RELATIVE_TO_NOW); + // converting back and forth is bad code but OK. + if (null !== $nemDate) { + if ($nemDate->isToday()) { + $nemDiff = trans('firefly.today'); + } + + $current = $payDatesFormatted[0] ?? null; + if (null !== $current && !$nemDate->isToday()) { + $temp2 = Carbon::createFromFormat('Y-m-d\TH:i:sP', $current); + if (false === $temp2) { + $temp2 = today(config('app.timezone')); + } + $nemDiff = trans('firefly.bill_expected_date', ['date' => $temp2->diffForHumans(today(config('app.timezone')), CarbonInterface::DIFF_RELATIVE_TO_NOW)]); + } + unset($temp2); } - unset($temp, $temp2); return [ - 'id' => (int)$bill->id, + 'id' => $bill->id, 'created_at' => $bill->created_at->toAtomString(), 'updated_at' => $bill->updated_at->toAtomString(), 'currency_id' => (string)$bill->transaction_currency_id, 'currency_code' => $currency->code, 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, + 'currency_decimal_places' => $currency->decimal_places, 'name' => $bill->name, 'amount_min' => app('steam')->bcround($bill->amount_min, $currency->decimal_places), 'amount_max' => app('steam')->bcround($bill->amount_max, $currency->decimal_places), @@ -118,23 +149,23 @@ class BillTransformer extends AbstractTransformer 'end_date' => $bill->end_date?->toAtomString(), 'extension_date' => $bill->extension_date?->toAtomString(), 'repeat_freq' => $bill->repeat_freq, - 'skip' => (int)$bill->skip, + 'skip' => $bill->skip, 'active' => $bill->active, - 'order' => (int)$bill->order, + 'order' => $bill->order, 'notes' => $notes, - 'object_group_id' => $objectGroupId ? (string)$objectGroupId : null, + 'object_group_id' => null !== $objectGroupId ? (string)$objectGroupId : null, 'object_group_order' => $objectGroupOrder, 'object_group_title' => $objectGroupTitle, // these fields need work: - 'next_expected_match' => $nextExpectedMatch, - 'next_expected_match_diff' => $nextExpectedMatchDiff, + 'next_expected_match' => $nem, + 'next_expected_match_diff' => $nemDiff, 'pay_dates' => $payDatesFormatted, 'paid_dates' => $paidDataFormatted, 'links' => [ [ 'rel' => 'self', - 'uri' => '/bills/' . $bill->id, + 'uri' => '/bills/'.$bill->id, ], ], ]; @@ -142,10 +173,6 @@ class BillTransformer extends AbstractTransformer /** * Get the data the bill was paid and predict the next expected match. - * - * @param Bill $bill - * - * @return array */ protected function paidData(Bill $bill): array { @@ -153,87 +180,45 @@ class BillTransformer extends AbstractTransformer if (null === $this->parameters->get('start') || null === $this->parameters->get('end')) { app('log')->debug('parameters are NULL, return empty array'); - return [ - 'paid_dates' => [], - 'next_expected_match' => null, - ]; + return []; } + // 2023-07-1 sub one day from the start date to fix a possible bug (see #7704) // 2023-07-18 this particular date is used to search for the last paid date. // 2023-07-18 the cloned $searchDate is used to grab the correct transactions. /** @var Carbon $start */ - $start = clone $this->parameters->get('start'); - $searchStart = clone $start; + $start = clone $this->parameters->get('start'); + $searchStart = clone $start; $start->subDay(); app('log')->debug(sprintf('Parameters are start: %s end: %s', $start->format('Y-m-d'), $this->parameters->get('end')->format('Y-m-d'))); app('log')->debug(sprintf('Search parameters are: start: %s', $searchStart->format('Y-m-d'))); - /* - * Get from database when bill was paid. - */ - $set = $this->repository->getPaidDatesInRange($bill, $searchStart, $this->parameters->get('end')); + // Get from database when bill was paid. + $set = $this->repository->getPaidDatesInRange($bill, $searchStart, $this->parameters->get('end')); app('log')->debug(sprintf('Count %d entries in getPaidDatesInRange()', $set->count())); - /* - * Grab from array the most recent payment. If none exist, fall back to the start date and pretend *that* was the last paid date. - */ + // Grab from array the most recent payment. If none exist, fall back to the start date and pretend *that* was the last paid date. app('log')->debug(sprintf('Grab last paid date from function, return %s if it comes up with nothing.', $start->format('Y-m-d'))); $lastPaidDate = $this->lastPaidDate($set, $start); app('log')->debug(sprintf('Result of lastPaidDate is %s', $lastPaidDate->format('Y-m-d'))); - /* - * The next expected match (nextMatch) is, initially, the bill's date. - */ - $nextMatch = clone $bill->date; - /* - * Diff in months (or other period) between bill start and last paid date or $start. - */ - $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $start, $nextMatch); - $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $steps); - - if ($nextMatch->lt($lastPaidDate)) { - /* - * Add another period because it's before the last paid date - */ - app('log')->debug('Because the last paid date was before our next expected match, add another period.'); - $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $bill->skip); - } - - if ($nextMatch->isSameDay($lastPaidDate)) { - /* - * Add another period because it's the same day as the last paid date. - */ - app('log')->debug('Because the last paid date was on the same day as our next expected match, add another day.'); - $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $bill->skip); - } - /* - * At this point the "next match" is exactly after the last time the bill was paid. - */ - $result = []; + // At this point the "next match" is exactly after the last time the bill was paid. + $result = []; foreach ($set as $entry) { $result[] = [ - 'transaction_group_id' => (int)$entry->transaction_group_id, - 'transaction_journal_id' => (int)$entry->id, + 'transaction_group_id' => (string)$entry->transaction_group_id, + 'transaction_journal_id' => (string)$entry->id, 'date' => $entry->date->format('Y-m-d'), + 'date_object' => $entry->date, ]; } - app('log')->debug(sprintf('Next match: %s', $nextMatch->toIso8601String())); - - return [ - 'paid_dates' => $result, - 'next_expected_match' => $nextMatch->format('Y-m-d'), - ]; + return $result; } /** * Returns the latest date in the set, or start when set is empty. - * - * @param Collection $dates - * @param Carbon $default - * - * @return Carbon */ protected function lastPaidDate(Collection $dates, Carbon $default): Carbon { @@ -241,6 +226,7 @@ class BillTransformer extends AbstractTransformer return $default; } $latest = $dates->first()->date; + /** @var TransactionJournal $journal */ foreach ($dates as $journal) { if ($journal->date->gte($latest)) { @@ -251,72 +237,27 @@ class BillTransformer extends AbstractTransformer return $latest; } - /** - * @param Bill $bill - * - * @return array - */ - protected function payDates(Bill $bill): array + private function getLastPaidDate(array $paidData): ?Carbon { - app('log')->debug(sprintf('Now in payDates() for bill #%d', $bill->id)); - if (null === $this->parameters->get('start') || null === $this->parameters->get('end')) { - app('log')->debug('No start or end date, give empty array.'); - - return []; - } - app('log')->debug(sprintf('Start: %s, end: %s', $this->parameters->get('start')->toIso8601String(), $this->parameters->get('end')->toIso8601String())); - $set = new Collection(); - $currentStart = clone $this->parameters->get('start'); - // 2023-06-23 subDay to fix 7655 - $currentStart->subDay(); - $loop = 0; - while ($currentStart <= $this->parameters->get('end')) { - app('log')->debug(sprintf('Current start is %s', $currentStart->toIso8601String())); - $nextExpectedMatch = $this->nextDateMatch($bill, $currentStart); - - // If nextExpectedMatch is after end, we continue: - if ($nextExpectedMatch > $this->parameters->get('end')) { - app('log')->debug('Next expected match is after END, so stop looking'); - break; + app('log')->debug('getLastPaidDate()'); + $return = null; + foreach ($paidData as $entry) { + if (null !== $return) { + /** @var Carbon $current */ + $current = $entry['date_object']; + if ($current->gt($return)) { + $return = clone $current; + } + app('log')->debug(sprintf('Last paid date is: %s', $return->format('Y-m-d'))); } - app('log')->debug(sprintf('Next expected match is %s', $nextExpectedMatch->toIso8601String())); - // add to set - $set->push(clone $nextExpectedMatch); - $nextExpectedMatch->addDay(); - $currentStart = clone $nextExpectedMatch; - $loop++; - if ($loop > 4) { - break; + if (null === $return) { + /** @var Carbon $return */ + $return = $entry['date_object']; + app('log')->debug(sprintf('Last paid date is: %s', $return->format('Y-m-d'))); } } - $simple = $set->map( - static function (Carbon $date) { - return $date->format('Y-m-d'); - } - ); - app('log')->debug(sprintf('Found %d pay dates', $set->count()), $simple->toArray()); + app('log')->debug(sprintf('Last paid date is: "%s"', $return?->format('Y-m-d'))); - return $simple->toArray(); - } - - /** - * Given a bill and a date, this method will tell you at which moment this bill expects its next - * transaction. Whether it is there already, is not relevant. - * - * @param Bill $bill - * @param Carbon $date - * - * @return Carbon - */ - protected function nextDateMatch(Bill $bill, Carbon $date): Carbon - { - app('log')->debug(sprintf('Now in nextDateMatch(%d, %s)', $bill->id, $date->format('Y-m-d'))); - $start = clone $bill->date; - app('log')->debug(sprintf('Bill start date is %s', $start->format('Y-m-d'))); - - $steps = app('navigation')->diffInPeriods($bill->repeat_freq, $start, $date); - $result = app('navigation')->addPeriod($start, $bill->repeat_freq, $steps); - app('log')->debug(sprintf('Number of steps is %d, result is %s', $steps, $start->format('Y-m-d'))); - return $result; + return $return; } } diff --git a/app/Transformers/BudgetLimitTransformer.php b/app/Transformers/BudgetLimitTransformer.php index f4d9ea6532..d2a3e19dee 100644 --- a/app/Transformers/BudgetLimitTransformer.php +++ b/app/Transformers/BudgetLimitTransformer.php @@ -33,7 +33,6 @@ use League\Fractal\Resource\Item; */ class BudgetLimitTransformer extends AbstractTransformer { - /** @var string[] */ protected array $availableIncludes = [ 'budget', @@ -42,8 +41,6 @@ class BudgetLimitTransformer extends AbstractTransformer /** * Include Budget * - * @param BudgetLimit $limit - * * @return Item */ public function includeBudget(BudgetLimit $limit) @@ -53,14 +50,10 @@ class BudgetLimitTransformer extends AbstractTransformer /** * Transform the note. - * - * @param BudgetLimit $budgetLimit - * - * @return array */ public function transform(BudgetLimit $budgetLimit): array { - $repository = app(OperationsRepository::class); + $repository = app(OperationsRepository::class); $repository->setUser($budgetLimit->budget->user); $expenses = $repository->sumExpenses( $budgetLimit->start_date, @@ -78,13 +71,13 @@ class BudgetLimitTransformer extends AbstractTransformer $currencySymbol = null; if (null !== $currency) { $amount = $budgetLimit->amount; - $currencyId = (int)$currency->id; + $currencyId = $currency->id; $currencyName = $currency->name; $currencyCode = $currency->code; $currencySymbol = $currency->symbol; $currencyDecimalPlaces = $currency->decimal_places; } - $amount = app('steam')->bcround($amount, $currencyDecimalPlaces); + $amount = app('steam')->bcround($amount, $currencyDecimalPlaces); return [ 'id' => (string)$budgetLimit->id, @@ -104,7 +97,7 @@ class BudgetLimitTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/budgets/limits/' . $budgetLimit->id, + 'uri' => '/budgets/limits/'.$budgetLimit->id, ], ], ]; diff --git a/app/Transformers/BudgetTransformer.php b/app/Transformers/BudgetTransformer.php index 75411190d7..a786e7c327 100644 --- a/app/Transformers/BudgetTransformer.php +++ b/app/Transformers/BudgetTransformer.php @@ -40,8 +40,6 @@ class BudgetTransformer extends AbstractTransformer /** * BudgetTransformer constructor. - * - */ public function __construct() { @@ -52,18 +50,14 @@ class BudgetTransformer extends AbstractTransformer /** * Transform a budget. - * - * @param Budget $budget - * - * @return array */ public function transform(Budget $budget): array { $this->opsRepository->setUser($budget->user); - $start = $this->parameters->get('start'); - $end = $this->parameters->get('end'); - $autoBudget = $this->repository->getAutoBudget($budget); - $spent = []; + $start = $this->parameters->get('start'); + $end = $this->parameters->get('end'); + $autoBudget = $this->repository->getAutoBudget($budget); + $spent = []; if (null !== $start && null !== $end) { $spent = $this->beautify($this->opsRepository->sumExpenses($start, $end, null, new Collection([$budget]))); } @@ -75,7 +69,7 @@ class BudgetTransformer extends AbstractTransformer $abPeriod = null; $notes = $this->repository->getNoteText($budget); - $types = [ + $types = [ AutoBudget::AUTO_BUDGET_RESET => 'reset', AutoBudget::AUTO_BUDGET_ROLLOVER => 'rollover', AutoBudget::AUTO_BUDGET_ADJUSTED => 'adjusted', @@ -106,17 +100,12 @@ class BudgetTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/budgets/' . $budget->id, + 'uri' => '/budgets/'.$budget->id, ], ], ]; } - /** - * @param array $array - * - * @return array - */ private function beautify(array $array): array { $return = []; diff --git a/app/Transformers/CategoryTransformer.php b/app/Transformers/CategoryTransformer.php index f04df6ced5..21b4756f5d 100644 --- a/app/Transformers/CategoryTransformer.php +++ b/app/Transformers/CategoryTransformer.php @@ -38,8 +38,6 @@ class CategoryTransformer extends AbstractTransformer /** * CategoryTransformer constructor. - * - */ public function __construct() { @@ -49,10 +47,6 @@ class CategoryTransformer extends AbstractTransformer /** * Convert category. - * - * @param Category $category - * - * @return array */ public function transform(Category $category): array { @@ -67,10 +61,10 @@ class CategoryTransformer extends AbstractTransformer $earned = $this->beautify($this->opsRepository->sumIncome($start, $end, null, new Collection([$category]))); $spent = $this->beautify($this->opsRepository->sumExpenses($start, $end, null, new Collection([$category]))); } - $notes = $this->repository->getNoteText($category); + $notes = $this->repository->getNoteText($category); return [ - 'id' => (int)$category->id, + 'id' => $category->id, 'created_at' => $category->created_at->toAtomString(), 'updated_at' => $category->updated_at->toAtomString(), 'name' => $category->name, @@ -80,17 +74,12 @@ class CategoryTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/categories/' . $category->id, + 'uri' => '/categories/'.$category->id, ], ], ]; } - /** - * @param array $array - * - * @return array - */ private function beautify(array $array): array { $return = []; diff --git a/app/Transformers/CurrencyTransformer.php b/app/Transformers/CurrencyTransformer.php index 2c363f19eb..6043291e56 100644 --- a/app/Transformers/CurrencyTransformer.php +++ b/app/Transformers/CurrencyTransformer.php @@ -32,33 +32,23 @@ class CurrencyTransformer extends AbstractTransformer { /** * Transform the currency. - * - * @param TransactionCurrency $currency - * - * @return array */ public function transform(TransactionCurrency $currency): array { - $isDefault = false; - $defaultCurrency = $this->parameters->get('defaultCurrency'); - if (null !== $defaultCurrency) { - $isDefault = (int)$defaultCurrency->id === (int)$currency->id; - } - return [ - 'id' => (int)$currency->id, + 'id' => $currency->id, 'created_at' => $currency->created_at->toAtomString(), 'updated_at' => $currency->updated_at->toAtomString(), - 'default' => $isDefault, - 'enabled' => $currency->enabled, + 'default' => $currency->userGroupDefault, + 'enabled' => $currency->userGroupEnabled, 'name' => $currency->name, 'code' => $currency->code, 'symbol' => $currency->symbol, - 'decimal_places' => (int)$currency->decimal_places, + 'decimal_places' => $currency->decimal_places, 'links' => [ [ 'rel' => 'self', - 'uri' => '/currencies/' . $currency->id, + 'uri' => '/currencies/'.$currency->id, ], ], ]; diff --git a/app/Transformers/LinkTypeTransformer.php b/app/Transformers/LinkTypeTransformer.php index 13f3b36eb5..3efe57546a 100644 --- a/app/Transformers/LinkTypeTransformer.php +++ b/app/Transformers/LinkTypeTransformer.php @@ -26,22 +26,17 @@ namespace FireflyIII\Transformers; use FireflyIII\Models\LinkType; /** - * * Class LinkTypeTransformer */ class LinkTypeTransformer extends AbstractTransformer { /** * Transform the currency. - * - * @param LinkType $linkType - * - * @return array */ public function transform(LinkType $linkType): array { return [ - 'id' => (int)$linkType->id, + 'id' => $linkType->id, 'created_at' => $linkType->created_at->toAtomString(), 'updated_at' => $linkType->updated_at->toAtomString(), 'name' => $linkType->name, @@ -51,7 +46,7 @@ class LinkTypeTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/link_types/' . $linkType->id, + 'uri' => '/link_types/'.$linkType->id, ], ], ]; diff --git a/app/Transformers/ObjectGroupTransformer.php b/app/Transformers/ObjectGroupTransformer.php index 4bc4f70a8b..c49275f849 100644 --- a/app/Transformers/ObjectGroupTransformer.php +++ b/app/Transformers/ObjectGroupTransformer.php @@ -34,10 +34,7 @@ class ObjectGroupTransformer extends AbstractTransformer protected ObjectGroupRepositoryInterface $repository; /** - * * AccountTransformer constructor. - * - */ public function __construct() { @@ -46,10 +43,6 @@ class ObjectGroupTransformer extends AbstractTransformer /** * Transform the account. - * - * @param ObjectGroup $objectGroup - * - * @return array */ public function transform(ObjectGroup $objectGroup): array { @@ -60,11 +53,11 @@ class ObjectGroupTransformer extends AbstractTransformer 'created_at' => $objectGroup->created_at?->toAtomString(), 'updated_at' => $objectGroup->updated_at?->toAtomString(), 'title' => $objectGroup->title, - 'order' => (int)$objectGroup->order, + 'order' => $objectGroup->order, 'links' => [ [ 'rel' => 'self', - 'uri' => '/object_groups/' . $objectGroup->id, + 'uri' => '/object_groups/'.$objectGroup->id, ], ], ]; diff --git a/app/Transformers/PiggyBankEventTransformer.php b/app/Transformers/PiggyBankEventTransformer.php index 0ab17a4f07..aac61a2d09 100644 --- a/app/Transformers/PiggyBankEventTransformer.php +++ b/app/Transformers/PiggyBankEventTransformer.php @@ -26,52 +26,41 @@ namespace FireflyIII\Transformers; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\PiggyBankEvent; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; -use JsonException; /** * Class PiggyBankEventTransformer */ class PiggyBankEventTransformer extends AbstractTransformer { - private CurrencyRepositoryInterface $currencyRepos; private PiggyBankRepositoryInterface $piggyRepos; private AccountRepositoryInterface $repository; /** * PiggyBankEventTransformer constructor. - * - */ public function __construct() { - $this->repository = app(AccountRepositoryInterface::class); - $this->currencyRepos = app(CurrencyRepositoryInterface::class); - $this->piggyRepos = app(PiggyBankRepositoryInterface::class); + $this->repository = app(AccountRepositoryInterface::class); + $this->piggyRepos = app(PiggyBankRepositoryInterface::class); } /** * Convert piggy bank event. * - * @param PiggyBankEvent $event - * - * @return array * @throws FireflyException - * @throws JsonException */ public function transform(PiggyBankEvent $event): array { // get account linked to piggy bank - $account = $event->piggyBank->account; + $account = $event->piggyBank->account; // set up repositories. $this->repository->setUser($account->user); - $this->currencyRepos->setUser($account->user); $this->piggyRepos->setUser($account->user); // get associated currency or fall back to the default: - $currency = $this->repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUser($account->user); + $currency = $this->repository->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); // get associated journal and transaction, if any: $journalId = $event->transaction_journal_id; @@ -89,13 +78,13 @@ class PiggyBankEventTransformer extends AbstractTransformer 'currency_id' => (string)$currency->id, 'currency_code' => $currency->code, 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, - 'transaction_journal_id' => $journalId ? (string)$journalId : null, - 'transaction_group_id' => $groupId ? (string)$groupId : null, + 'currency_decimal_places' => $currency->decimal_places, + 'transaction_journal_id' => null !== $journalId ? (string)$journalId : null, + 'transaction_group_id' => null !== $groupId ? (string)$groupId : null, 'links' => [ [ 'rel' => 'self', - 'uri' => '/piggy_bank_events/' . $event->id, + 'uri' => '/piggy_bank_events/'.$event->id, ], ], ]; diff --git a/app/Transformers/PiggyBankTransformer.php b/app/Transformers/PiggyBankTransformer.php index 0af30de935..fea26e16c5 100644 --- a/app/Transformers/PiggyBankTransformer.php +++ b/app/Transformers/PiggyBankTransformer.php @@ -27,9 +27,7 @@ use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\ObjectGroup; use FireflyIII\Models\PiggyBank; use FireflyIII\Repositories\Account\AccountRepositoryInterface; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; -use JsonException; /** * Class PiggyBankTransformer @@ -37,65 +35,57 @@ use JsonException; class PiggyBankTransformer extends AbstractTransformer { private AccountRepositoryInterface $accountRepos; - private CurrencyRepositoryInterface $currencyRepos; private PiggyBankRepositoryInterface $piggyRepos; /** * PiggyBankTransformer constructor. - * - */ public function __construct() { - $this->accountRepos = app(AccountRepositoryInterface::class); - $this->currencyRepos = app(CurrencyRepositoryInterface::class); - $this->piggyRepos = app(PiggyBankRepositoryInterface::class); + $this->accountRepos = app(AccountRepositoryInterface::class); + $this->piggyRepos = app(PiggyBankRepositoryInterface::class); } /** * Transform the piggy bank. * - * @param PiggyBank $piggyBank - * - * @return array * @throws FireflyException - * @throws JsonException */ public function transform(PiggyBank $piggyBank): array { - $account = $piggyBank->account; + $account = $piggyBank->account; // set up repositories $this->accountRepos->setUser($account->user); - $this->currencyRepos->setUser($account->user); $this->piggyRepos->setUser($account->user); // get currency from account, or use default. - $currency = $this->accountRepos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUser($account->user); + $currency = $this->accountRepos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup); // note - $notes = $this->piggyRepos->getNoteText($piggyBank); - $notes = '' === $notes ? null : $notes; + $notes = $this->piggyRepos->getNoteText($piggyBank); + $notes = '' === $notes ? null : $notes; $objectGroupId = null; $objectGroupOrder = null; $objectGroupTitle = null; - /** @var ObjectGroup $objectGroup */ - $objectGroup = $piggyBank->objectGroups->first(); + + /** @var null|ObjectGroup $objectGroup */ + $objectGroup = $piggyBank->objectGroups->first(); if (null !== $objectGroup) { - $objectGroupId = (int)$objectGroup->id; - $objectGroupOrder = (int)$objectGroup->order; + $objectGroupId = $objectGroup->id; + $objectGroupOrder = $objectGroup->order; $objectGroupTitle = $objectGroup->title; } // get currently saved amount: - $currentAmount = app('steam')->bcround($this->piggyRepos->getCurrentAmount($piggyBank), $currency->decimal_places); + $currentAmount = app('steam')->bcround($this->piggyRepos->getCurrentAmount($piggyBank), $currency->decimal_places); // Amounts, depending on 0.0 state of target amount - $percentage = null; - $targetAmount = $piggyBank->targetamount; - $leftToSave = null; - $savePerMonth = null; + $percentage = null; + $targetAmount = $piggyBank->targetamount; + $leftToSave = null; + $savePerMonth = null; if (0 !== bccomp($targetAmount, '0')) { // target amount is not 0.00 $leftToSave = bcsub($piggyBank->targetamount, $currentAmount); $percentage = (int)bcmul(bcdiv($currentAmount, $targetAmount), '100'); @@ -103,8 +93,8 @@ class PiggyBankTransformer extends AbstractTransformer $leftToSave = app('steam')->bcround($leftToSave, $currency->decimal_places); $savePerMonth = app('steam')->bcround($this->piggyRepos->getSuggestedMonthlyAmount($piggyBank), $currency->decimal_places); } - $startDate = $piggyBank->startdate?->format('Y-m-d'); - $targetDate = $piggyBank->targetdate?->format('Y-m-d'); + $startDate = $piggyBank->startdate?->format('Y-m-d'); + $targetDate = $piggyBank->targetdate?->format('Y-m-d'); return [ 'id' => (string)$piggyBank->id, @@ -116,7 +106,7 @@ class PiggyBankTransformer extends AbstractTransformer 'currency_id' => (string)$currency->id, 'currency_code' => $currency->code, 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, + 'currency_decimal_places' => $currency->decimal_places, 'target_amount' => $targetAmount, 'percentage' => $percentage, 'current_amount' => $currentAmount, @@ -124,16 +114,16 @@ class PiggyBankTransformer extends AbstractTransformer 'save_per_month' => $savePerMonth, 'start_date' => $startDate, 'target_date' => $targetDate, - 'order' => (int)$piggyBank->order, + 'order' => $piggyBank->order, 'active' => true, 'notes' => $notes, - 'object_group_id' => $objectGroupId ? (string)$objectGroupId : null, + 'object_group_id' => null !== $objectGroupId ? (string)$objectGroupId : null, 'object_group_order' => $objectGroupOrder, 'object_group_title' => $objectGroupTitle, 'links' => [ [ 'rel' => 'self', - 'uri' => '/piggy_banks/' . $piggyBank->id, + 'uri' => '/piggy_banks/'.$piggyBank->id, ], ], ]; diff --git a/app/Transformers/PreferenceTransformer.php b/app/Transformers/PreferenceTransformer.php index e108e3effb..a944a0bea9 100644 --- a/app/Transformers/PreferenceTransformer.php +++ b/app/Transformers/PreferenceTransformer.php @@ -32,15 +32,11 @@ class PreferenceTransformer extends AbstractTransformer { /** * Transform the preference - * - * @param Preference $preference - * - * @return array */ public function transform(Preference $preference): array { return [ - 'id' => (int)$preference->id, + 'id' => $preference->id, 'created_at' => $preference->created_at->toAtomString(), 'updated_at' => $preference->updated_at->toAtomString(), 'name' => $preference->name, diff --git a/app/Transformers/RecurrenceTransformer.php b/app/Transformers/RecurrenceTransformer.php index ddc95d7ef4..efff57080c 100644 --- a/app/Transformers/RecurrenceTransformer.php +++ b/app/Transformers/RecurrenceTransformer.php @@ -26,6 +26,7 @@ namespace FireflyIII\Transformers; use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Factory\CategoryFactory; +use FireflyIII\Models\Account; use FireflyIII\Models\Recurrence; use FireflyIII\Models\RecurrenceRepetition; use FireflyIII\Models\RecurrenceTransaction; @@ -34,10 +35,8 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; -use Illuminate\Support\Facades\Log; /** - * * Class RecurringTransactionTransformer */ class RecurrenceTransformer extends AbstractTransformer @@ -50,8 +49,6 @@ class RecurrenceTransformer extends AbstractTransformer /** * RecurrenceTransformer constructor. - * - */ public function __construct() { @@ -65,9 +62,6 @@ class RecurrenceTransformer extends AbstractTransformer /** * Transform the recurring transaction. * - * @param Recurrence $recurrence - * - * @return array * @throws FireflyException */ public function transform(Recurrence $recurrence): array @@ -104,16 +98,13 @@ class RecurrenceTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/recurring/' . $recurrence->id, + 'uri' => '/recurring/'.$recurrence->id, ], ], ]; } /** - * @param Recurrence $recurrence - * - * @return array * @throws FireflyException */ private function getRepetitions(Recurrence $recurrence): array @@ -130,39 +121,41 @@ class RecurrenceTransformer extends AbstractTransformer 'updated_at' => $repetition->updated_at->toAtomString(), 'type' => $repetition->repetition_type, 'moment' => $repetition->repetition_moment, - 'skip' => (int)$repetition->repetition_skip, - 'weekend' => (int)$repetition->weekend, + 'skip' => $repetition->repetition_skip, + 'weekend' => $repetition->weekend, 'description' => $this->repository->repetitionDescription($repetition), 'occurrences' => [], ]; // get the (future) occurrences for this specific type of repetition: - $occurrences = $this->repository->getXOccurrencesSince($repetition, $fromDate, new Carbon(), 5); + $occurrences = $this->repository->getXOccurrencesSince($repetition, $fromDate, new Carbon(), 5); + /** @var Carbon $carbon */ foreach ($occurrences as $carbon) { $repetitionArray['occurrences'][] = $carbon->toAtomString(); } - $return[] = $repetitionArray; + $return[] = $repetitionArray; } return $return; } /** - * @param Recurrence $recurrence - * - * @return array * @throws FireflyException */ private function getTransactions(Recurrence $recurrence): array { app('log')->debug(sprintf('Now in %s', __METHOD__)); $return = []; + // get all transactions: /** @var RecurrenceTransaction $transaction */ foreach ($recurrence->recurrenceTransactions()->get() as $transaction) { + /** @var null|Account $sourceAccount */ $sourceAccount = $transaction->sourceAccount; + + /** @var null|Account $destinationAccount */ $destinationAccount = $transaction->destinationAccount; $foreignCurrencyCode = null; $foreignCurrencySymbol = null; @@ -172,41 +165,41 @@ class RecurrenceTransformer extends AbstractTransformer $foreignCurrencyId = (int)$transaction->foreign_currency_id; $foreignCurrencyCode = $transaction->foreignCurrency->code; $foreignCurrencySymbol = $transaction->foreignCurrency->symbol; - $foreignCurrencyDp = (int)$transaction->foreignCurrency->decimal_places; + $foreignCurrencyDp = $transaction->foreignCurrency->decimal_places; } // source info: - $sourceName = ''; - $sourceId = null; - $sourceType = null; - $sourceIban = null; + $sourceName = ''; + $sourceId = null; + $sourceType = null; + $sourceIban = null; if (null !== $sourceAccount) { $sourceName = $sourceAccount->name; - $sourceId = (int)$sourceAccount->id; + $sourceId = $sourceAccount->id; $sourceType = $sourceAccount->accountType->type; $sourceIban = $sourceAccount->iban; } - $destinationName = ''; - $destinationId = null; - $destinationType = null; - $destinationIban = null; + $destinationName = ''; + $destinationId = null; + $destinationType = null; + $destinationIban = null; if (null !== $destinationAccount) { $destinationName = $destinationAccount->name; - $destinationId = (int)$destinationAccount->id; + $destinationId = $destinationAccount->id; $destinationType = $destinationAccount->accountType->type; $destinationIban = $destinationAccount->iban; } - $amount = app('steam')->bcround($transaction->amount, $transaction->transactionCurrency->decimal_places); - $foreignAmount = null; + $amount = app('steam')->bcround($transaction->amount, $transaction->transactionCurrency->decimal_places); + $foreignAmount = null; if (null !== $transaction->foreign_currency_id && null !== $transaction->foreign_amount) { $foreignAmount = app('steam')->bcround($transaction->foreign_amount, $foreignCurrencyDp); } - $transactionArray = [ + $transactionArray = [ 'id' => (string)$transaction->id, 'currency_id' => (string)$transaction->transaction_currency_id, 'currency_code' => $transaction->transactionCurrency->code, 'currency_symbol' => $transaction->transactionCurrency->symbol, - 'currency_decimal_places' => (int)$transaction->transactionCurrency->decimal_places, + 'currency_decimal_places' => $transaction->transactionCurrency->decimal_places, 'foreign_currency_id' => null === $foreignCurrencyId ? null : (string)$foreignCurrencyId, 'foreign_currency_code' => $foreignCurrencyCode, 'foreign_currency_symbol' => $foreignCurrencySymbol, @@ -223,7 +216,7 @@ class RecurrenceTransformer extends AbstractTransformer 'foreign_amount' => $foreignAmount, 'description' => $transaction->description, ]; - $transactionArray = $this->getTransactionMeta($transaction, $transactionArray); + $transactionArray = $this->getTransactionMeta($transaction, $transactionArray); if (null !== $transaction->foreign_currency_id) { $transactionArray['foreign_currency_code'] = $transaction->foreignCurrency->code; $transactionArray['foreign_currency_symbol'] = $transaction->foreignCurrency->symbol; @@ -231,17 +224,13 @@ class RecurrenceTransformer extends AbstractTransformer } // store transaction in recurrence array. - $return[] = $transactionArray; + $return[] = $transactionArray; } return $return; } /** - * @param RecurrenceTransaction $transaction - * @param array $array - * - * @return array * @throws FireflyException */ private function getTransactionMeta(RecurrenceTransaction $transaction, array $array): array @@ -262,43 +251,55 @@ class RecurrenceTransformer extends AbstractTransformer switch ($transactionMeta->name) { default: throw new FireflyException(sprintf('Recurrence transformer cant handle field "%s"', $transactionMeta->name)); + case 'bill_id': - $bill = $this->billRepos->find((int)$transactionMeta->value); + $bill = $this->billRepos->find((int)$transactionMeta->value); if (null !== $bill) { $array['bill_id'] = (string)$bill->id; $array['bill_name'] = $bill->name; } + break; + case 'tags': $array['tags'] = json_decode($transactionMeta->value); + break; + case 'piggy_bank_id': - $piggy = $this->piggyRepos->find((int)$transactionMeta->value); + $piggy = $this->piggyRepos->find((int)$transactionMeta->value); if (null !== $piggy) { $array['piggy_bank_id'] = (string)$piggy->id; $array['piggy_bank_name'] = $piggy->name; } + break; + case 'category_id': - $category = $this->factory->findOrCreate((int)$transactionMeta->value, null); + $category = $this->factory->findOrCreate((int)$transactionMeta->value, null); if (null !== $category) { $array['category_id'] = (string)$category->id; $array['category_name'] = $category->name; } + break; + case 'category_name': - $category = $this->factory->findOrCreate(null, $transactionMeta->value); + $category = $this->factory->findOrCreate(null, $transactionMeta->value); if (null !== $category) { $array['category_id'] = (string)$category->id; $array['category_name'] = $category->name; } + break; + case 'budget_id': - $budget = $this->budgetRepos->find((int)$transactionMeta->value); + $budget = $this->budgetRepos->find((int)$transactionMeta->value); if (null !== $budget) { $array['budget_id'] = (string)$budget->id; $array['budget_name'] = $budget->name; } + break; } } diff --git a/app/Transformers/RuleGroupTransformer.php b/app/Transformers/RuleGroupTransformer.php index bb83a5dc05..ee685516c2 100644 --- a/app/Transformers/RuleGroupTransformer.php +++ b/app/Transformers/RuleGroupTransformer.php @@ -32,15 +32,11 @@ class RuleGroupTransformer extends AbstractTransformer { /** * Transform the rule group - * - * @param RuleGroup $ruleGroup - * - * @return array */ public function transform(RuleGroup $ruleGroup): array { return [ - 'id' => (int)$ruleGroup->id, + 'id' => $ruleGroup->id, 'created_at' => $ruleGroup->created_at->toAtomString(), 'updated_at' => $ruleGroup->updated_at->toAtomString(), 'title' => $ruleGroup->title, @@ -50,7 +46,7 @@ class RuleGroupTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/rule_groups/' . $ruleGroup->id, + 'uri' => '/rule_groups/'.$ruleGroup->id, ], ], ]; diff --git a/app/Transformers/RuleTransformer.php b/app/Transformers/RuleTransformer.php index 2a0d3f80a5..bb4431d536 100644 --- a/app/Transformers/RuleTransformer.php +++ b/app/Transformers/RuleTransformer.php @@ -39,8 +39,6 @@ class RuleTransformer extends AbstractTransformer /** * CurrencyTransformer constructor. - * - */ public function __construct() { @@ -50,9 +48,6 @@ class RuleTransformer extends AbstractTransformer /** * Transform the rule. * - * @param Rule $rule - * - * @return array * @throws FireflyException */ public function transform(Rule $rule): array @@ -67,7 +62,7 @@ class RuleTransformer extends AbstractTransformer 'rule_group_title' => (string)$rule->ruleGroup->title, 'title' => $rule->title, 'description' => $rule->description, - 'order' => (int)$rule->order, + 'order' => $rule->order, 'active' => $rule->active, 'strict' => $rule->strict, 'stop_processing' => $rule->stop_processing, @@ -77,22 +72,20 @@ class RuleTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/rules/' . $rule->id, + 'uri' => '/rules/'.$rule->id, ], ], ]; } /** - * @param Rule $rule - * - * @return string * @throws FireflyException */ private function getRuleTrigger(Rule $rule): string { $moment = null; $triggers = $this->ruleRepository->getRuleTriggers($rule); + /** @var RuleTrigger $ruleTrigger */ foreach ($triggers as $ruleTrigger) { if ('user_action' === $ruleTrigger->trigger_type) { @@ -106,26 +99,28 @@ class RuleTransformer extends AbstractTransformer return $moment; } - /** - * @param Rule $rule - * - * @return array - */ private function triggers(Rule $rule): array { $result = []; $triggers = $this->ruleRepository->getRuleTriggers($rule); + /** @var RuleTrigger $ruleTrigger */ foreach ($triggers as $ruleTrigger) { if ('user_action' === $ruleTrigger->trigger_type) { continue; } - $result[] = [ + $triggerValue = (string)$ruleTrigger->trigger_value; + $needsContext = config(sprintf('search.operators.%s.needs_context', $ruleTrigger->trigger_type), true); + if (false === $needsContext) { + $triggerValue = 'true'; + } + + $result[] = [ 'id' => (string)$ruleTrigger->id, 'created_at' => $ruleTrigger->created_at->toAtomString(), 'updated_at' => $ruleTrigger->updated_at->toAtomString(), 'type' => $ruleTrigger->trigger_type, - 'value' => $ruleTrigger->trigger_value, + 'value' => $triggerValue, 'order' => $ruleTrigger->order, 'active' => $ruleTrigger->active, 'stop_processing' => $ruleTrigger->stop_processing, @@ -135,15 +130,11 @@ class RuleTransformer extends AbstractTransformer return $result; } - /** - * @param Rule $rule - * - * @return array - */ private function actions(Rule $rule): array { $result = []; $actions = $this->ruleRepository->getRuleActions($rule); + /** @var RuleAction $ruleAction */ foreach ($actions as $ruleAction) { $result[] = [ diff --git a/app/Transformers/TagTransformer.php b/app/Transformers/TagTransformer.php index 067a508cd2..6cc5e8b0a0 100644 --- a/app/Transformers/TagTransformer.php +++ b/app/Transformers/TagTransformer.php @@ -35,15 +35,12 @@ class TagTransformer extends AbstractTransformer * Transform a tag. * * TODO add spent, earned, transferred, etc. - * - * @param Tag $tag - * - * @return array */ public function transform(Tag $tag): array { - $date = $tag->date?->format('Y-m-d'); - /** @var Location $location */ + $date = $tag->date?->format('Y-m-d'); + + /** @var null|Location $location */ $location = $tag->locations()->first(); $latitude = null; $longitude = null; @@ -55,7 +52,7 @@ class TagTransformer extends AbstractTransformer } return [ - 'id' => (int)$tag->id, + 'id' => $tag->id, 'created_at' => $tag->created_at->toAtomString(), 'updated_at' => $tag->updated_at->toAtomString(), 'tag' => $tag->tag, @@ -67,7 +64,7 @@ class TagTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/tags/' . $tag->id, + 'uri' => '/tags/'.$tag->id, ], ], ]; diff --git a/app/Transformers/TransactionGroupTransformer.php b/app/Transformers/TransactionGroupTransformer.php index cb12faa4de..a0247b7314 100644 --- a/app/Transformers/TransactionGroupTransformer.php +++ b/app/Transformers/TransactionGroupTransformer.php @@ -36,7 +36,6 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; use FireflyIII\Support\NullArrayObject; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Log; /** * Class TransactionGroupTransformer @@ -49,8 +48,6 @@ class TransactionGroupTransformer extends AbstractTransformer /** * Constructor. - * - */ public function __construct() { @@ -77,11 +74,6 @@ class TransactionGroupTransformer extends AbstractTransformer $this->metaDateFields = ['interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date']; } - /** - * @param array $group - * - * @return array - */ public function transform(array $group): array { $data = new NullArrayObject($group); @@ -97,17 +89,12 @@ class TransactionGroupTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/transactions/' . $first['transaction_group_id'], + 'uri' => '/transactions/'.$first['transaction_group_id'], ], ], ]; } - /** - * @param NullArrayObject $data - * - * @return array - */ private function transformTransactions(NullArrayObject $data): array { $result = []; @@ -120,18 +107,16 @@ class TransactionGroupTransformer extends AbstractTransformer } /** - * @param array $transaction - * - * @return array + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ private function transformTransaction(array $transaction): array { - $row = new NullArrayObject($transaction); + $row = new NullArrayObject($transaction); // amount: $amount = app('steam')->positive((string)($row['amount'] ?? '0')); $foreignAmount = null; - if (null !== $row['foreign_amount'] && '' !== $row['foreign_amount'] && bccomp('0', $row['foreign_amount']) !== 0) { + if (null !== $row['foreign_amount'] && '' !== $row['foreign_amount'] && 0 !== bccomp('0', $row['foreign_amount'])) { $foreignAmount = app('steam')->positive($row['foreign_amount']); } @@ -139,11 +124,10 @@ class TransactionGroupTransformer extends AbstractTransformer $metaDateData = $this->groupRepos->getMetaDateFields((int)$row['transaction_journal_id'], $this->metaDateFields); $type = $this->stringFromArray($transaction, 'transaction_type_type', TransactionType::WITHDRAWAL); - - $longitude = null; - $latitude = null; - $zoomLevel = null; - $location = $this->getLocationById((int)$row['transaction_journal_id']); + $longitude = null; + $latitude = null; + $zoomLevel = null; + $location = $this->getLocationById((int)$row['transaction_journal_id']); if (null !== $location) { $longitude = $location->longitude; $latitude = $location->latitude; @@ -151,93 +135,86 @@ class TransactionGroupTransformer extends AbstractTransformer } return [ - 'user' => (string)$row['user_id'], - 'transaction_journal_id' => (string)$row['transaction_journal_id'], - 'type' => strtolower($type), - 'date' => $row['date']->toAtomString(), - 'order' => $row['order'], + 'user' => (string)$row['user_id'], + 'transaction_journal_id' => (string)$row['transaction_journal_id'], + 'type' => strtolower($type), + 'date' => $row['date']->toAtomString(), + 'order' => $row['order'], - 'currency_id' => (string)$row['currency_id'], - 'currency_code' => $row['currency_code'], - 'currency_name' => $row['currency_name'], - 'currency_symbol' => $row['currency_symbol'], - 'currency_decimal_places' => (int)$row['currency_decimal_places'], + 'currency_id' => (string)$row['currency_id'], + 'currency_code' => $row['currency_code'], + 'currency_name' => $row['currency_name'], + 'currency_symbol' => $row['currency_symbol'], + 'currency_decimal_places' => (int)$row['currency_decimal_places'], 'foreign_currency_id' => $this->stringFromArray($transaction, 'foreign_currency_id', null), 'foreign_currency_code' => $row['foreign_currency_code'], 'foreign_currency_symbol' => $row['foreign_currency_symbol'], 'foreign_currency_decimal_places' => $row['foreign_currency_decimal_places'], - 'amount' => $amount, - 'foreign_amount' => $foreignAmount, + 'amount' => $amount, + 'foreign_amount' => $foreignAmount, - 'description' => $row['description'], + 'description' => $row['description'], - 'source_id' => (string)$row['source_account_id'], - 'source_name' => $row['source_account_name'], - 'source_iban' => $row['source_account_iban'], - 'source_type' => $row['source_account_type'], + 'source_id' => (string)$row['source_account_id'], + 'source_name' => $row['source_account_name'], + 'source_iban' => $row['source_account_iban'], + 'source_type' => $row['source_account_type'], - 'destination_id' => (string)$row['destination_account_id'], - 'destination_name' => $row['destination_account_name'], - 'destination_iban' => $row['destination_account_iban'], - 'destination_type' => $row['destination_account_type'], + 'destination_id' => (string)$row['destination_account_id'], + 'destination_name' => $row['destination_account_name'], + 'destination_iban' => $row['destination_account_iban'], + 'destination_type' => $row['destination_account_type'], - 'budget_id' => $this->stringFromArray($transaction, 'budget_id', null), - 'budget_name' => $row['budget_name'], + 'budget_id' => $this->stringFromArray($transaction, 'budget_id', null), + 'budget_name' => $row['budget_name'], - 'category_id' => $this->stringFromArray($transaction, 'category_id', null), - 'category_name' => $row['category_name'], + 'category_id' => $this->stringFromArray($transaction, 'category_id', null), + 'category_name' => $row['category_name'], - 'bill_id' => $this->stringFromArray($transaction, 'bill_id', null), - 'bill_name' => $row['bill_name'], + 'bill_id' => $this->stringFromArray($transaction, 'bill_id', null), + 'bill_name' => $row['bill_name'], - 'reconciled' => $row['reconciled'], - 'notes' => $this->groupRepos->getNoteText((int)$row['transaction_journal_id']), - 'tags' => $this->groupRepos->getTags((int)$row['transaction_journal_id']), + 'reconciled' => $row['reconciled'], + 'notes' => $this->groupRepos->getNoteText((int)$row['transaction_journal_id']), + 'tags' => $this->groupRepos->getTags((int)$row['transaction_journal_id']), - 'internal_reference' => $metaFieldData['internal_reference'], - 'external_id' => $metaFieldData['external_id'], - 'original_source' => $metaFieldData['original_source'], - 'recurrence_id' => $this->stringFromArray($metaFieldData->getArrayCopy(), 'recurrence_id', null), - 'recurrence_total' => $this->integerFromArray($metaFieldData->getArrayCopy(), 'recurrence_total'), - 'recurrence_count' => $this->integerFromArray($metaFieldData->getArrayCopy(), 'recurrence_count'), - 'bunq_payment_id' => $metaFieldData['bunq_payment_id'], - 'external_url' => $metaFieldData['external_url'], - 'import_hash_v2' => $metaFieldData['import_hash_v2'], + 'internal_reference' => $metaFieldData['internal_reference'], + 'external_id' => $metaFieldData['external_id'], + 'original_source' => $metaFieldData['original_source'], + 'recurrence_id' => $this->stringFromArray($metaFieldData->getArrayCopy(), 'recurrence_id', null), + 'recurrence_total' => $this->integerFromArray($metaFieldData->getArrayCopy(), 'recurrence_total'), + 'recurrence_count' => $this->integerFromArray($metaFieldData->getArrayCopy(), 'recurrence_count'), + 'bunq_payment_id' => $metaFieldData['bunq_payment_id'], + 'external_url' => $metaFieldData['external_url'], + 'import_hash_v2' => $metaFieldData['import_hash_v2'], - 'sepa_cc' => $metaFieldData['sepa_cc'], - 'sepa_ct_op' => $metaFieldData['sepa_ct_op'], - 'sepa_ct_id' => $metaFieldData['sepa_ct_id'], - 'sepa_db' => $metaFieldData['sepa_db'], - 'sepa_country' => $metaFieldData['sepa_country'], - 'sepa_ep' => $metaFieldData['sepa_ep'], - 'sepa_ci' => $metaFieldData['sepa_ci'], - 'sepa_batch_id' => $metaFieldData['sepa_batch_id'], + 'sepa_cc' => $metaFieldData['sepa_cc'], + 'sepa_ct_op' => $metaFieldData['sepa_ct_op'], + 'sepa_ct_id' => $metaFieldData['sepa_ct_id'], + 'sepa_db' => $metaFieldData['sepa_db'], + 'sepa_country' => $metaFieldData['sepa_country'], + 'sepa_ep' => $metaFieldData['sepa_ep'], + 'sepa_ci' => $metaFieldData['sepa_ci'], + 'sepa_batch_id' => $metaFieldData['sepa_batch_id'], - 'interest_date' => $this->dateFromArray($metaDateData, 'interest_date'), - 'book_date' => $this->dateFromArray($metaDateData, 'book_date'), - 'process_date' => $this->dateFromArray($metaDateData, 'process_date'), - 'due_date' => $this->dateFromArray($metaDateData, 'due_date'), - 'payment_date' => $this->dateFromArray($metaDateData, 'payment_date'), - 'invoice_date' => $this->dateFromArray($metaDateData, 'invoice_date'), + 'interest_date' => $this->dateFromArray($metaDateData, 'interest_date'), + 'book_date' => $this->dateFromArray($metaDateData, 'book_date'), + 'process_date' => $this->dateFromArray($metaDateData, 'process_date'), + 'due_date' => $this->dateFromArray($metaDateData, 'due_date'), + 'payment_date' => $this->dateFromArray($metaDateData, 'payment_date'), + 'invoice_date' => $this->dateFromArray($metaDateData, 'invoice_date'), // location data - 'longitude' => $longitude, - 'latitude' => $latitude, - 'zoom_level' => $zoomLevel, + 'longitude' => $longitude, + 'latitude' => $latitude, + 'zoom_level' => $zoomLevel, - 'has_attachments' => $this->hasAttachments((int)$row['transaction_journal_id']), + 'has_attachments' => $this->hasAttachments((int)$row['transaction_journal_id']), ]; } - /** - * @param array $array - * @param string $key - * @param string|null $default - * - * @return string|null - */ private function stringFromArray(array $array, string $key, ?string $default): ?string { if (array_key_exists($key, $array) && null === $array[$key]) { @@ -250,42 +227,27 @@ class TransactionGroupTransformer extends AbstractTransformer if ('0' === $array[$key]) { return $default; } + return (string)$array[$key]; } if (null !== $default) { - return (string)$default; + return $default; } return null; } - /** - * @param int $journalId - * - * @return Location|null - */ private function getLocationById(int $journalId): ?Location { return $this->groupRepos->getLocation($journalId); } - /** - * @param TransactionJournal $journal - * - * @return Location|null - */ private function getLocation(TransactionJournal $journal): ?Location { return $journal->locations()->first(); } - /** - * @param array $array - * @param string $key - * - * @return int|null - */ private function integerFromArray(array $array, string $key): ?int { if (array_key_exists($key, $array)) { @@ -295,12 +257,6 @@ class TransactionGroupTransformer extends AbstractTransformer return null; } - /** - * @param NullArrayObject $object - * @param string $key - * - * @return string|null - */ private function dateFromArray(NullArrayObject $object, string $key): ?string { if (null === $object[$key]) { @@ -310,42 +266,35 @@ class TransactionGroupTransformer extends AbstractTransformer return $object[$key]->toAtomString(); } - /** - * @param int $journalId - * - * @return bool - */ private function hasAttachments(int $journalId): bool { return $this->groupRepos->countAttachments($journalId) > 0; } /** - * @param TransactionGroup $group - * - * @return array * @throws FireflyException */ public function transformObject(TransactionGroup $group): array { try { $result = [ - 'id' => (int)$group->id, + 'id' => $group->id, 'created_at' => $group->created_at->toAtomString(), 'updated_at' => $group->updated_at->toAtomString(), - 'user' => (int)$group->user_id, + 'user' => $group->user_id, 'group_title' => $group->title, 'transactions' => $this->transformJournals($group->transactionJournals), 'links' => [ [ 'rel' => 'self', - 'uri' => '/transactions/' . $group->id, + 'uri' => '/transactions/'.$group->id, ], ], ]; } catch (FireflyException $e) { app('log')->error($e->getMessage()); app('log')->error($e->getTraceAsString()); + throw new FireflyException(sprintf('Transaction group #%d is broken. Please check out your log files.', $group->id), 0, $e); } @@ -355,14 +304,12 @@ class TransactionGroupTransformer extends AbstractTransformer } /** - * @param Collection $transactionJournals - * - * @return array * @throws FireflyException */ private function transformJournals(Collection $transactionJournals): array { $result = []; + /** @var TransactionJournal $journal */ foreach ($transactionJournals as $journal) { $result[] = $this->transformJournal($journal); @@ -372,10 +319,9 @@ class TransactionGroupTransformer extends AbstractTransformer } /** - * @param TransactionJournal $journal - * - * @return array * @throws FireflyException + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ private function transformJournal(TransactionJournal $journal): array { @@ -383,8 +329,8 @@ class TransactionGroupTransformer extends AbstractTransformer $destination = $this->getDestinationTransaction($journal); $type = $journal->transactionType->type; $currency = $source->transactionCurrency; - $amount = app('steam')->bcround($this->getAmount($type, (string)$source->amount), $currency->decimal_places ?? 0); - $foreignAmount = $this->getForeignAmount($type, null === $source->foreign_amount ? null : (string)$source->foreign_amount); + $amount = app('steam')->bcround($this->getAmount($source->amount), $currency->decimal_places ?? 0); + $foreignAmount = $this->getForeignAmount(null === $source->foreign_amount ? null : $source->foreign_amount); $metaFieldData = $this->groupRepos->getMetaFields($journal->id, $this->metaFields); $metaDates = $this->getDates($this->groupRepos->getMetaDateFields($journal->id, $this->metaDateFields)); $foreignCurrency = $this->getForeignCurrency($source->foreignCurrency); @@ -396,10 +342,10 @@ class TransactionGroupTransformer extends AbstractTransformer $foreignAmount = app('steam')->bcround($foreignAmount, $foreignCurrency['decimal_places'] ?? 0); } - $longitude = null; - $latitude = null; - $zoomLevel = null; - $location = $this->getLocation($journal); + $longitude = null; + $latitude = null; + $zoomLevel = null; + $location = $this->getLocation($journal); if (null !== $location) { $longitude = $location->longitude; $latitude = $location->latitude; @@ -407,84 +353,81 @@ class TransactionGroupTransformer extends AbstractTransformer } return [ - 'user' => (int)$journal->user_id, - 'transaction_journal_id' => (int)$journal->id, - 'type' => strtolower($type), - 'date' => $journal->date->toAtomString(), - 'order' => $journal->order, + 'user' => $journal->user_id, + 'transaction_journal_id' => $journal->id, + 'type' => strtolower($type), + 'date' => $journal->date->toAtomString(), + 'order' => $journal->order, - 'currency_id' => (int)$currency->id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, + 'currency_id' => $currency->id, + 'currency_code' => $currency->code, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, 'foreign_currency_id' => $foreignCurrency['id'], 'foreign_currency_code' => $foreignCurrency['code'], 'foreign_currency_symbol' => $foreignCurrency['symbol'], 'foreign_currency_decimal_places' => $foreignCurrency['decimal_places'], - 'amount' => app('steam')->bcround($amount, $currency->decimal_places), - 'foreign_amount' => $foreignAmount, + 'amount' => app('steam')->bcround($amount, $currency->decimal_places), + 'foreign_amount' => $foreignAmount, - 'description' => $journal->description, + 'description' => $journal->description, - 'source_id' => (int)$source->account_id, - 'source_name' => $source->account->name, - 'source_iban' => $source->account->iban, - 'source_type' => $source->account->accountType->type, + 'source_id' => $source->account_id, + 'source_name' => $source->account->name, + 'source_iban' => $source->account->iban, + 'source_type' => $source->account->accountType->type, - 'destination_id' => (int)$destination->account_id, - 'destination_name' => $destination->account->name, - 'destination_iban' => $destination->account->iban, - 'destination_type' => $destination->account->accountType->type, + 'destination_id' => $destination->account_id, + 'destination_name' => $destination->account->name, + 'destination_iban' => $destination->account->iban, + 'destination_type' => $destination->account->accountType->type, - 'budget_id' => $budget['id'], - 'budget_name' => $budget['name'], + 'budget_id' => $budget['id'], + 'budget_name' => $budget['name'], - 'category_id' => $category['id'], - 'category_name' => $category['name'], + 'category_id' => $category['id'], + 'category_name' => $category['name'], - 'bill_id' => $bill['id'], - 'bill_name' => $bill['name'], + 'bill_id' => $bill['id'], + 'bill_name' => $bill['name'], - 'reconciled' => $source->reconciled, - 'notes' => $this->groupRepos->getNoteText($journal->id), - 'tags' => $this->groupRepos->getTags($journal->id), + 'reconciled' => $source->reconciled, + 'notes' => $this->groupRepos->getNoteText($journal->id), + 'tags' => $this->groupRepos->getTags($journal->id), - 'internal_reference' => $metaFieldData['internal_reference'], - 'external_id' => $metaFieldData['external_id'], - 'original_source' => $metaFieldData['original_source'], - 'recurrence_id' => $metaFieldData['recurrence_id'], - 'bunq_payment_id' => $metaFieldData['bunq_payment_id'], - 'import_hash_v2' => $metaFieldData['import_hash_v2'], + 'internal_reference' => $metaFieldData['internal_reference'], + 'external_id' => $metaFieldData['external_id'], + 'original_source' => $metaFieldData['original_source'], + 'recurrence_id' => $metaFieldData['recurrence_id'], + 'bunq_payment_id' => $metaFieldData['bunq_payment_id'], + 'import_hash_v2' => $metaFieldData['import_hash_v2'], - 'sepa_cc' => $metaFieldData['sepa_cc'], - 'sepa_ct_op' => $metaFieldData['sepa_ct_op'], - 'sepa_ct_id' => $metaFieldData['sepa_ct_id'], - 'sepa_db' => $metaFieldData['sepa_db'], - 'sepa_country' => $metaFieldData['sepa_country'], - 'sepa_ep' => $metaFieldData['sepa_ep'], - 'sepa_ci' => $metaFieldData['sepa_ci'], - 'sepa_batch_id' => $metaFieldData['sepa_batch_id'], + 'sepa_cc' => $metaFieldData['sepa_cc'], + 'sepa_ct_op' => $metaFieldData['sepa_ct_op'], + 'sepa_ct_id' => $metaFieldData['sepa_ct_id'], + 'sepa_db' => $metaFieldData['sepa_db'], + 'sepa_country' => $metaFieldData['sepa_country'], + 'sepa_ep' => $metaFieldData['sepa_ep'], + 'sepa_ci' => $metaFieldData['sepa_ci'], + 'sepa_batch_id' => $metaFieldData['sepa_batch_id'], - 'interest_date' => $metaDates['interest_date'], - 'book_date' => $metaDates['book_date'], - 'process_date' => $metaDates['process_date'], - 'due_date' => $metaDates['due_date'], - 'payment_date' => $metaDates['payment_date'], - 'invoice_date' => $metaDates['invoice_date'], + 'interest_date' => $metaDates['interest_date'], + 'book_date' => $metaDates['book_date'], + 'process_date' => $metaDates['process_date'], + 'due_date' => $metaDates['due_date'], + 'payment_date' => $metaDates['payment_date'], + 'invoice_date' => $metaDates['invoice_date'], // location data - 'longitude' => $longitude, - 'latitude' => $latitude, - 'zoom_level' => $zoomLevel, + 'longitude' => $longitude, + 'latitude' => $latitude, + 'zoom_level' => $zoomLevel, ]; } /** - * @param TransactionJournal $journal - * - * @return Transaction * @throws FireflyException */ private function getSourceTransaction(TransactionJournal $journal): Transaction @@ -502,9 +445,6 @@ class TransactionGroupTransformer extends AbstractTransformer } /** - * @param TransactionJournal $journal - * - * @return Transaction * @throws FireflyException */ private function getDestinationTransaction(TransactionJournal $journal): Transaction @@ -521,38 +461,21 @@ class TransactionGroupTransformer extends AbstractTransformer return $result; } - /** - * @param string $type - * @param string $amount - * - * @return string - */ - private function getAmount(string $type, string $amount): string + private function getAmount(string $amount): string { return app('steam')->positive($amount); } - /** - * @param string $type - * @param string|null $foreignAmount - * - * @return string|null - */ - private function getForeignAmount(string $type, ?string $foreignAmount): ?string + private function getForeignAmount(?string $foreignAmount): ?string { $result = null; - if (null !== $foreignAmount && '' !== $foreignAmount && bccomp('0', $foreignAmount) !== 0) { + if (null !== $foreignAmount && '' !== $foreignAmount && 0 !== bccomp('0', $foreignAmount)) { $result = app('steam')->positive($foreignAmount); } return $result; } - /** - * @param NullArrayObject $dates - * - * @return array - */ private function getDates(NullArrayObject $dates): array { $fields = [ @@ -574,14 +497,9 @@ class TransactionGroupTransformer extends AbstractTransformer return $return; } - /** - * @param TransactionCurrency|null $currency - * - * @return array - */ private function getForeignCurrency(?TransactionCurrency $currency): array { - $array = [ + $array = [ 'id' => null, 'code' => null, 'symbol' => null, @@ -590,62 +508,47 @@ class TransactionGroupTransformer extends AbstractTransformer if (null === $currency) { return $array; } - $array['id'] = (int)$currency->id; + $array['id'] = $currency->id; $array['code'] = $currency->code; $array['symbol'] = $currency->symbol; - $array['decimal_places'] = (int)$currency->decimal_places; + $array['decimal_places'] = $currency->decimal_places; return $array; } - /** - * @param Budget|null $budget - * - * @return array - */ private function getBudget(?Budget $budget): array { - $array = [ + $array = [ 'id' => null, 'name' => null, ]; if (null === $budget) { return $array; } - $array['id'] = (int)$budget->id; + $array['id'] = $budget->id; $array['name'] = $budget->name; return $array; } - /** - * @param Category|null $category - * - * @return array - */ private function getCategory(?Category $category): array { - $array = [ + $array = [ 'id' => null, 'name' => null, ]; if (null === $category) { return $array; } - $array['id'] = (int)$category->id; + $array['id'] = $category->id; $array['name'] = $category->name; return $array; } - /** - * @param Bill|null $bill - * - * @return array - */ private function getBill(?Bill $bill): array { - $array = [ + $array = [ 'id' => null, 'name' => null, ]; diff --git a/app/Transformers/TransactionLinkTransformer.php b/app/Transformers/TransactionLinkTransformer.php index 82d717b5f7..ca34064533 100644 --- a/app/Transformers/TransactionLinkTransformer.php +++ b/app/Transformers/TransactionLinkTransformer.php @@ -27,7 +27,6 @@ use FireflyIII\Models\TransactionJournalLink; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; /** - * * Class TransactionLinkTransformer */ class TransactionLinkTransformer extends AbstractTransformer @@ -37,19 +36,12 @@ class TransactionLinkTransformer extends AbstractTransformer /** * Constructor. - * - */ public function __construct() { $this->repository = app(JournalRepositoryInterface::class); } - /** - * @param TransactionJournalLink $link - * - * @return array - */ public function transform(TransactionJournalLink $link): array { $notes = $this->repository->getLinkNoteText($link); @@ -65,7 +57,7 @@ class TransactionLinkTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/transaction_links/' . $link->id, + 'uri' => '/transaction_links/'.$link->id, ], ], ]; diff --git a/app/Transformers/UserTransformer.php b/app/Transformers/UserTransformer.php index 790ec698eb..de5ed25c65 100644 --- a/app/Transformers/UserTransformer.php +++ b/app/Transformers/UserTransformer.php @@ -32,20 +32,16 @@ use FireflyIII\User; */ class UserTransformer extends AbstractTransformer { - /** @var UserRepositoryInterface */ private UserRepositoryInterface $repository; /** * Transform user. * - * @param User $user - * - * @return array * @throws FireflyException */ public function transform(User $user): array { - $this->repository = $this->repository ?? app(UserRepositoryInterface::class); + $this->repository ??= app(UserRepositoryInterface::class); return [ 'id' => (int)$user->id, @@ -58,7 +54,7 @@ class UserTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/users/' . $user->id, + 'uri' => '/users/'.$user->id, ], ], ]; diff --git a/app/Transformers/V2/AbstractTransformer.php b/app/Transformers/V2/AbstractTransformer.php index ef03237dd8..9803753688 100644 --- a/app/Transformers/V2/AbstractTransformer.php +++ b/app/Transformers/V2/AbstractTransformer.php @@ -37,25 +37,14 @@ abstract class AbstractTransformer extends TransformerAbstract /** * This method is called exactly ONCE from FireflyIII\Api\V2\Controllers\Controller::jsonApiList - * - * @param Collection $objects - * - * @return void */ abstract public function collectMetaData(Collection $objects): void; - - /** - * @return ParameterBag - */ final public function getParameters(): ParameterBag { return $this->parameters; } - /** - * @param ParameterBag $parameters - */ final public function setParameters(ParameterBag $parameters): void { $this->parameters = $parameters; diff --git a/app/Transformers/V2/AccountTransformer.php b/app/Transformers/V2/AccountTransformer.php index 74b198976b..c36d19f1f2 100644 --- a/app/Transformers/V2/AccountTransformer.php +++ b/app/Transformers/V2/AccountTransformer.php @@ -30,7 +30,7 @@ use FireflyIII\Models\Account; use FireflyIII\Models\AccountMeta; use FireflyIII\Models\AccountType; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface; use Illuminate\Support\Collection; /** @@ -46,7 +46,6 @@ class AccountTransformer extends AbstractTransformer private TransactionCurrency $default; /** - * @inheritDoc * @throws FireflyException */ public function collectMetaData(Collection $objects): void @@ -56,39 +55,41 @@ class AccountTransformer extends AbstractTransformer $this->accountTypes = []; $this->balances = app('steam')->balancesByAccounts($objects, $this->getDate()); $this->convertedBalances = app('steam')->balancesByAccountsConverted($objects, $this->getDate()); + + /** @var CurrencyRepositoryInterface $repository */ $repository = app(CurrencyRepositoryInterface::class); $this->default = app('amount')->getDefaultCurrency(); // get currencies: - $accountIds = $objects->pluck('id')->toArray(); - $meta = AccountMeta::whereIn('account_id', $accountIds) - ->where('name', 'currency_id') - ->get(['account_meta.id', 'account_meta.account_id', 'account_meta.name', 'account_meta.data']); - $currencyIds = $meta->pluck('data')->toArray(); + $accountIds = $objects->pluck('id')->toArray(); + $meta = AccountMeta::whereIn('account_id', $accountIds) + ->where('name', 'currency_id') + ->get(['account_meta.id', 'account_meta.account_id', 'account_meta.name', 'account_meta.data']) + ; + $currencyIds = $meta->pluck('data')->toArray(); - $currencies = $repository->getByIds($currencyIds); + $currencies = $repository->getByIds($currencyIds); foreach ($currencies as $currency) { - $id = (int)$currency->id; + $id = $currency->id; $this->currencies[$id] = $currency; } foreach ($meta as $entry) { - $id = (int)$entry->account_id; + $id = $entry->account_id; $this->accountMeta[$id][$entry->name] = $entry->data; } // get account types: // select accounts.id, account_types.type from account_types left join accounts on accounts.account_type_id = account_types.id; - $accountTypes = AccountType::leftJoin('accounts', 'accounts.account_type_id', '=', 'account_types.id') - ->whereIn('accounts.id', $accountIds) - ->get(['accounts.id', 'account_types.type']); + $accountTypes = AccountType::leftJoin('accounts', 'accounts.account_type_id', '=', 'account_types.id') + ->whereIn('accounts.id', $accountIds) + ->get(['accounts.id', 'account_types.type']) + ; + /** @var AccountType $row */ foreach ($accountTypes as $row) { - $this->accountTypes[(int)$row->id] = (string)config(sprintf('firefly.shortNamesByFullName.%s', $row->type)); + $this->accountTypes[$row->id] = (string)config(sprintf('firefly.shortNamesByFullName.%s', $row->type)); } } - /** - * @return Carbon - */ private function getDate(): Carbon { $date = today(config('app.timezone')); @@ -101,22 +102,18 @@ class AccountTransformer extends AbstractTransformer /** * Transform the account. - * - * @param Account $account - * - * @return array */ public function transform(Account $account): array { - $id = (int)$account->id; + $id = $account->id; // various meta - $accountRole = $this->accountMeta[$id]['account_role'] ?? null; - $accountType = $this->accountTypes[$id]; - $order = (int)$account->order; + $accountRole = $this->accountMeta[$id]['account_role'] ?? null; + $accountType = $this->accountTypes[$id]; + $order = $account->order; // no currency? use default - $currency = $this->default; + $currency = $this->default; if (0 !== (int)$this->accountMeta[$id]['currency_id']) { $currency = $this->currencies[(int)$this->accountMeta[$id]['currency_id']]; } @@ -130,29 +127,29 @@ class AccountTransformer extends AbstractTransformer } return [ - 'id' => (string)$account->id, - 'created_at' => $account->created_at->toAtomString(), - 'updated_at' => $account->updated_at->toAtomString(), - 'active' => $account->active, - 'order' => $order, - 'name' => $account->name, - 'iban' => '' === $account->iban ? null : $account->iban, - 'type' => strtolower($accountType), - 'account_role' => $accountRole, - 'currency_id' => (string)$currency->id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, + 'id' => (string)$account->id, + 'created_at' => $account->created_at->toAtomString(), + 'updated_at' => $account->updated_at->toAtomString(), + 'active' => $account->active, + 'order' => $order, + 'name' => $account->name, + 'iban' => '' === $account->iban ? null : $account->iban, + 'type' => strtolower($accountType), + 'account_role' => $accountRole, + 'currency_id' => (string)$currency->id, + 'currency_code' => $currency->code, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, 'native_currency_id' => (string)$this->default->id, 'native_currency_code' => $this->default->code, 'native_currency_symbol' => $this->default->symbol, - 'native_currency_decimal_places' => (int)$this->default->decimal_places, + 'native_currency_decimal_places' => $this->default->decimal_places, // balance: 'current_balance' => $balance, 'native_current_balance' => $nativeBalance, - 'current_balance_date' => $this->getDate(), + 'current_balance_date' => $this->getDate()->endOfDay()->toAtomString(), // more meta @@ -176,7 +173,7 @@ class AccountTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/accounts/' . $account->id, + 'uri' => '/accounts/'.$account->id, ], ], ]; diff --git a/app/Transformers/V2/BillTransformer.php b/app/Transformers/V2/BillTransformer.php index 4dae4997c5..d6f7a36968 100644 --- a/app/Transformers/V2/BillTransformer.php +++ b/app/Transformers/V2/BillTransformer.php @@ -25,146 +25,139 @@ namespace FireflyIII\Transformers\V2; use Carbon\Carbon; use Carbon\CarbonInterface; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Bill; use FireflyIII\Models\Note; use FireflyIII\Models\ObjectGroup; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionJournal; -use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; -use Log; +use Illuminate\Support\Facades\Log; /** * Class BillTransformer */ class BillTransformer extends AbstractTransformer { - private ExchangeRateConverter $converter; - private array $currencies; - private TransactionCurrency $default; - private array $groups; - private array $notes; - private array $paidDates; - private BillRepositoryInterface $repository; + private ExchangeRateConverter $converter; + private array $currencies; + private TransactionCurrency $default; + private array $groups; + private array $notes; + private array $paidDates; /** - * BillTransformer constructor. + * @throws FireflyException * - - */ - public function __construct() - { - $this->repository = app(BillRepositoryInterface::class); - } - - /** - * @inheritDoc + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function collectMetaData(Collection $objects): void { - $currencies = []; - $bills = []; - $this->notes = []; - $this->groups = []; - $this->paidDates = []; + $currencies = []; + $bills = []; + $this->notes = []; + $this->groups = []; + $this->paidDates = []; - - // start with currencies: /** @var Bill $object */ foreach ($objects as $object) { - $id = (int)$object->transaction_currency_id; - $bills[] = (int)$object->id; - $currencies[$id] = $currencies[$id] ?? TransactionCurrency::find($id); + $id = $object->transaction_currency_id; + $bills[] = $object->id; + $currencies[$id] ??= TransactionCurrency::find($id); } $this->currencies = $currencies; + $notes = Note::whereNoteableType(Bill::class)->whereIn('noteable_id', array_keys($bills))->get(); - // continue with notes - $notes = Note::whereNoteableType(Bill::class)->whereIn('noteable_id', array_keys($bills))->get(); /** @var Note $note */ foreach ($notes as $note) { - $id = (int)$note->noteable_id; + $id = $note->noteable_id; $this->notes[$id] = $note; } // grab object groups: - $set = DB::table('object_groupables') - ->leftJoin('object_groups', 'object_groups.id', '=', 'object_groupables.object_group_id') - ->where('object_groupables.object_groupable_type', Bill::class) - ->get(['object_groupables.*', 'object_groups.title', 'object_groups.order']); + $set = DB::table('object_groupables') + ->leftJoin('object_groups', 'object_groups.id', '=', 'object_groupables.object_group_id') + ->where('object_groupables.object_groupable_type', Bill::class) + ->get(['object_groupables.*', 'object_groups.title', 'object_groups.order']) + ; + /** @var ObjectGroup $entry */ foreach ($set as $entry) { $billId = (int)$entry->object_groupable_id; $id = (int)$entry->object_group_id; - $order = (int)$entry->order; + $order = $entry->order; $this->groups[$billId] = [ 'object_group_id' => $id, 'object_group_title' => $entry->title, 'object_group_order' => $order, ]; - } - $this->default = app('amount')->getDefaultCurrency(); - $this->converter = new ExchangeRateConverter(); + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); + $this->default = app('amount')->getDefaultCurrency(); + $this->converter = new ExchangeRateConverter(); // grab all paid dates: if (null !== $this->parameters->get('start') && null !== $this->parameters->get('end')) { - $journals = TransactionJournal::whereIn('bill_id', $bills) - ->where('date', '>=', $this->parameters->get('start')) - ->where('date', '<=', $this->parameters->get('end')) - ->get(['transaction_journals.id', 'transaction_journals.transaction_group_id', 'transaction_journals.date', 'transaction_journals.bill_id']); - $journalIds = $journals->pluck('id')->toArray(); + $journals = TransactionJournal::whereIn('bill_id', $bills) + ->where('date', '>=', $this->parameters->get('start')) + ->where('date', '<=', $this->parameters->get('end')) + ->get(['transaction_journals.id', 'transaction_journals.transaction_group_id', 'transaction_journals.date', 'transaction_journals.bill_id']) + ; + $journalIds = $journals->pluck('id')->toArray(); // grab transactions for amount: - $set = Transaction::whereIn('transaction_journal_id', $journalIds) - ->where('transactions.amount', '<', 0) - ->get(['transactions.id', 'transactions.transaction_journal_id', 'transactions.amount', 'transactions.foreign_amount', 'transactions.transaction_currency_id', 'transactions.foreign_currency_id']); - // convert to array for easy finding: + $set = Transaction::whereIn('transaction_journal_id', $journalIds) + ->where('transactions.amount', '<', 0) + ->get(['transactions.id', 'transactions.transaction_journal_id', 'transactions.amount', 'transactions.foreign_amount', 'transactions.transaction_currency_id', 'transactions.foreign_currency_id']) + ; $transactions = []; + /** @var Transaction $transaction */ foreach ($set as $transaction) { - $journalId = (int)$transaction->transaction_journal_id; + $journalId = $transaction->transaction_journal_id; $transactions[$journalId] = $transaction->toArray(); } + /** @var TransactionJournal $journal */ foreach ($journals as $journal) { app('log')->debug(sprintf('Processing journal #%d', $journal->id)); - $transaction = $transactions[(int)$journal->id] ?? []; - $billId = (int)$journal->bill_id; - $currencyId = (int)$transaction['transaction_currency_id'] ?? 0; - $currencies[$currencyId] = $currencies[$currencyId] ?? TransactionCurrency::find($currencyId); + $transaction = $transactions[$journal->id] ?? []; + $billId = (int)$journal->bill_id; + $currencyId = (int)($transaction['transaction_currency_id'] ?? 0); + $currencies[$currencyId] ??= TransactionCurrency::find($currencyId); // foreign currency - $foreignCurrencyId = null; - $foreignCurrencyCode = null; - $foreignCurrencyName = null; - $foreignCurrencySymbol = null; - $foreignCurrencyDp = null; + $foreignCurrencyId = null; + $foreignCurrencyCode = null; + $foreignCurrencyName = null; + $foreignCurrencySymbol = null; + $foreignCurrencyDp = null; app('log')->debug('Foreign currency is NULL'); if (null !== $transaction['foreign_currency_id']) { app('log')->debug(sprintf('Foreign currency is #%d', $transaction['foreign_currency_id'])); - $foreignCurrencyId = (int)$transaction['foreign_currency_id']; - $currencies[$foreignCurrencyId] = $currencies[$foreignCurrencyId] ?? TransactionCurrency::find($foreignCurrencyId); - $foreignCurrencyCode = $currencies[$foreignCurrencyId]->code; - $foreignCurrencyName = $currencies[$foreignCurrencyId]->name; - $foreignCurrencySymbol = $currencies[$foreignCurrencyId]->symbol; - $foreignCurrencyDp = (int)$currencies[$foreignCurrencyId]->decimal_places; + $foreignCurrencyId = (int)$transaction['foreign_currency_id']; + $currencies[$foreignCurrencyId] ??= TransactionCurrency::find($foreignCurrencyId); + $foreignCurrencyCode = $currencies[$foreignCurrencyId]->code; + $foreignCurrencyName = $currencies[$foreignCurrencyId]->name; + $foreignCurrencySymbol = $currencies[$foreignCurrencyId]->symbol; + $foreignCurrencyDp = $currencies[$foreignCurrencyId]->decimal_places; } $this->paidDates[$billId][] = [ 'transaction_group_id' => (string)$journal->id, 'transaction_journal_id' => (string)$journal->transaction_group_id, 'date' => $journal->date->toAtomString(), - 'currency_id' => (int)$currencies[$currencyId]->id, + 'currency_id' => $currencies[$currencyId]->id, 'currency_code' => $currencies[$currencyId]->code, 'currency_name' => $currencies[$currencyId]->name, 'currency_symbol' => $currencies[$currencyId]->symbol, - 'currency_decimal_places' => (int)$currencies[$currencyId]->decimal_places, - 'native_currency_id' => (int)$currencies[$currencyId]->id, + 'currency_decimal_places' => $currencies[$currencyId]->decimal_places, + 'native_currency_id' => $currencies[$currencyId]->id, 'native_currency_code' => $currencies[$currencyId]->code, 'native_currency_symbol' => $currencies[$currencyId]->symbol, - 'native_currency_decimal_places' => (int)$currencies[$currencyId]->decimal_places, + 'native_currency_decimal_places' => $currencies[$currencyId]->decimal_places, 'foreign_currency_id' => $foreignCurrencyId, 'foreign_currency_code' => $foreignCurrencyCode, 'foreign_currency_name' => $foreignCurrencyName, @@ -186,29 +179,27 @@ class BillTransformer extends AbstractTransformer /** * Transform the bill. - * - * @param Bill $bill - * - * @return array */ public function transform(Bill $bill): array { - $paidData = $this->paidDates[(int)$bill->id] ?? []; - $nextExpectedMatch = $this->nextExpectedMatch($bill, $this->paidDates[(int)$bill->id] ?? []); - $payDates = $this->payDates($bill); - $currency = $this->currencies[(int)$bill->transaction_currency_id]; - $group = $this->groups[(int)$bill->id] ?? null; + $paidData = $this->paidDates[$bill->id] ?? []; + $nextExpectedMatch = $this->nextExpectedMatch($bill, $this->paidDates[$bill->id] ?? []); + $payDates = $this->payDates($bill); + $currency = $this->currencies[$bill->transaction_currency_id]; + $group = $this->groups[$bill->id] ?? null; // date for currency conversion - /** @var Carbon|null $startParam */ - $startParam = $this->parameters->get('start'); - /** @var Carbon|null $start */ - $date = null === $startParam ? today() : clone $startParam; + /** @var null|Carbon $startParam */ + $startParam = $this->parameters->get('start'); + /** @var null|Carbon $date */ + $date = null === $startParam ? today() : clone $startParam; $nextExpectedMatchDiff = $this->getNextExpectedMatchDiff($nextExpectedMatch, $payDates); + $this->converter->summarize(); + return [ - 'id' => (int)$bill->id, + 'id' => $bill->id, 'created_at' => $bill->created_at->toAtomString(), 'updated_at' => $bill->updated_at->toAtomString(), 'name' => $bill->name, @@ -220,20 +211,20 @@ class BillTransformer extends AbstractTransformer 'currency_code' => $currency->code, 'currency_name' => $currency->name, 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, + 'currency_decimal_places' => $currency->decimal_places, 'native_currency_id' => $this->default->id, 'native_currency_code' => $this->default->code, 'native_currency_name' => $this->default->name, 'native_currency_symbol' => $this->default->symbol, - 'native_currency_decimal_places' => (int)$this->default->decimal_places, + 'native_currency_decimal_places' => $this->default->decimal_places, 'date' => $bill->date->toAtomString(), 'end_date' => $bill->end_date?->toAtomString(), 'extension_date' => $bill->extension_date?->toAtomString(), 'repeat_freq' => $bill->repeat_freq, - 'skip' => (int)$bill->skip, + 'skip' => $bill->skip, 'active' => $bill->active, - 'order' => (int)$bill->order, - 'notes' => $this->notes[(int)$bill->id] ?? null, + 'order' => $bill->order, + 'notes' => $this->notes[$bill->id] ?? null, 'object_group_id' => $group ? $group['object_group_id'] : null, 'object_group_order' => $group ? $group['object_group_order'] : null, 'object_group_title' => $group ? $group['object_group_title'] : null, @@ -252,11 +243,6 @@ class BillTransformer extends AbstractTransformer /** * Get the data the bill was paid and predict the next expected match. - * - * @param Bill $bill - * @param array $dates - * - * @return Carbon */ protected function nextExpectedMatch(Bill $bill, array $dates): Carbon { @@ -264,10 +250,11 @@ class BillTransformer extends AbstractTransformer // 2023-07-18 this particular date is used to search for the last paid date. // 2023-07-18 the cloned $searchDate is used to grab the correct transactions. - /** @var Carbon|null $startParam */ - $startParam = $this->parameters->get('start'); - /** @var Carbon|null $start */ - $start = null === $startParam ? today() : clone $startParam; + /** @var null|Carbon $startParam */ + $startParam = $this->parameters->get('start'); + + /** @var null|Carbon $start */ + $start = null === $startParam ? today() : clone $startParam; $start->subDay(); $lastPaidDate = $this->lastPaidDate($dates, $start); @@ -280,21 +267,15 @@ class BillTransformer extends AbstractTransformer $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $bill->skip); } if ($nextMatch->isSameDay($lastPaidDate)) { - /* - * Add another period because it's the same day as the last paid date. - */ + // Add another period because it's the same day as the last paid date. $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $bill->skip); } + return $nextMatch; } /** * Returns the latest date in the set, or start when set is empty. - * - * @param Collection $dates - * @param Carbon $default - * - * @return Carbon */ protected function lastPaidDate(array $dates, Carbon $default): Carbon { @@ -302,6 +283,7 @@ class BillTransformer extends AbstractTransformer return $default; } $latest = $dates[0]['date']; + /** @var array $row */ foreach ($dates as $row) { $carbon = new Carbon($row['date']); @@ -313,16 +295,11 @@ class BillTransformer extends AbstractTransformer return new Carbon($latest); } - /** - * @param Bill $bill - * - * @return array - */ protected function payDates(Bill $bill): array { - //app('log')->debug(sprintf('Now in payDates() for bill #%d', $bill->id)); + // app('log')->debug(sprintf('Now in payDates() for bill #%d', $bill->id)); if (null === $this->parameters->get('start') || null === $this->parameters->get('end')) { - //app('log')->debug('No start or end date, give empty array.'); + // app('log')->debug('No start or end date, give empty array.'); return []; } @@ -330,7 +307,7 @@ class BillTransformer extends AbstractTransformer $currentStart = clone $this->parameters->get('start'); // 2023-06-23 subDay to fix 7655 $currentStart->subDay(); - $loop = 0; + $loop = 0; while ($currentStart <= $this->parameters->get('end')) { $nextExpectedMatch = $this->nextDateMatch($bill, $currentStart); // If nextExpectedMatch is after end, we continue: @@ -340,13 +317,13 @@ class BillTransformer extends AbstractTransformer // add to set $set->push(clone $nextExpectedMatch); $nextExpectedMatch->addDay(); - $currentStart = clone $nextExpectedMatch; - $loop++; + $currentStart = clone $nextExpectedMatch; + ++$loop; if ($loop > 4) { break; } } - $simple = $set->map( + $simple = $set->map( static function (Carbon $date) { return $date->toAtomString(); } @@ -359,31 +336,22 @@ class BillTransformer extends AbstractTransformer * Given a bill and a date, this method will tell you at which moment this bill expects its next * transaction. Whether or not it is there already, is not relevant. * - * @param Bill $bill - * @param Carbon $date - * - * @return Carbon + * TODO this method is bad compared to the v1 one. */ protected function nextDateMatch(Bill $bill, Carbon $date): Carbon { - //app('log')->debug(sprintf('Now in nextDateMatch(%d, %s)', $bill->id, $date->format('Y-m-d'))); + // app('log')->debug(sprintf('Now in nextDateMatch(%d, %s)', $bill->id, $date->format('Y-m-d'))); $start = clone $bill->date; - //app('log')->debug(sprintf('Bill start date is %s', $start->format('Y-m-d'))); + // app('log')->debug(sprintf('Bill start date is %s', $start->format('Y-m-d'))); while ($start < $date) { $start = app('navigation')->addPeriod($start, $bill->repeat_freq, $bill->skip); } - //app('log')->debug(sprintf('End of loop, bill start date is now %s', $start->format('Y-m-d'))); + // app('log')->debug(sprintf('End of loop, bill start date is now %s', $start->format('Y-m-d'))); return $start; } - /** - * @param Carbon $next - * @param array $dates - * - * @return string - */ private function getNextExpectedMatchDiff(Carbon $next, array $dates): string { if ($next->isToday()) { @@ -393,9 +361,8 @@ class BillTransformer extends AbstractTransformer if (null === $current) { return trans('firefly.not_expected_period'); } - $carbon = new Carbon($current); + $carbon = new Carbon($current); + return $carbon->diffForHumans(today(config('app.timezone')), CarbonInterface::DIFF_RELATIVE_TO_NOW); } - - } diff --git a/app/Transformers/V2/BudgetLimitTransformer.php b/app/Transformers/V2/BudgetLimitTransformer.php index 0b46b0fcae..ff0d15bd59 100644 --- a/app/Transformers/V2/BudgetLimitTransformer.php +++ b/app/Transformers/V2/BudgetLimitTransformer.php @@ -32,15 +32,11 @@ use League\Fractal\Resource\Item; */ class BudgetLimitTransformer extends AbstractTransformer { - /** @var string[] */ protected array $availableIncludes = [ 'budget', ]; - /** - * @inheritDoc - */ public function collectMetaData(Collection $objects): void { // TODO: Implement collectMetaData() method. @@ -49,8 +45,6 @@ class BudgetLimitTransformer extends AbstractTransformer /** * Include Budget * - * @param BudgetLimit $limit - * * @return Item */ public function includeBudget(BudgetLimit $limit) @@ -60,10 +54,6 @@ class BudgetLimitTransformer extends AbstractTransformer /** * Transform the note. - * - * @param BudgetLimit $budgetLimit - * - * @return array */ public function transform(BudgetLimit $budgetLimit): array { @@ -81,13 +71,13 @@ class BudgetLimitTransformer extends AbstractTransformer $currencySymbol = null; if (null !== $currency) { $amount = $budgetLimit->amount; - $currencyId = (int)$currency->id; + $currencyId = $currency->id; $currencyName = $currency->name; $currencyCode = $currency->code; $currencySymbol = $currency->symbol; $currencyDecimalPlaces = $currency->decimal_places; } - $amount = number_format((float)$amount, $currencyDecimalPlaces, '.', ''); + $amount = number_format((float)$amount, $currencyDecimalPlaces, '.', ''); return [ 'id' => (string)$budgetLimit->id, @@ -103,7 +93,7 @@ class BudgetLimitTransformer extends AbstractTransformer 'currency_symbol' => $currencySymbol, 'amount' => $amount, 'period' => $budgetLimit->period, - //'spent' => $expenses[$currencyId]['sum'] ?? '0', + // 'spent' => $expenses[$currencyId]['sum'] ?? '0', 'links' => [ [ 'rel' => 'self', diff --git a/app/Transformers/V2/BudgetTransformer.php b/app/Transformers/V2/BudgetTransformer.php index 8d25a2628d..eb86c28a7b 100644 --- a/app/Transformers/V2/BudgetTransformer.php +++ b/app/Transformers/V2/BudgetTransformer.php @@ -32,24 +32,19 @@ use Symfony\Component\HttpFoundation\ParameterBag; */ class BudgetTransformer extends AbstractTransformer { - //private OperationsRepositoryInterface $opsRepository; - //private BudgetRepositoryInterface $repository; + // private OperationsRepositoryInterface $opsRepository; + // private BudgetRepositoryInterface $repository; /** * BudgetTransformer constructor. - * - */ public function __construct() { - //$this->opsRepository = app(OperationsRepositoryInterface::class); - //$this->repository = app(BudgetRepositoryInterface::class); + // $this->opsRepository = app(OperationsRepositoryInterface::class); + // $this->repository = app(BudgetRepositoryInterface::class); $this->parameters = new ParameterBag(); } - /** - * @inheritDoc - */ public function collectMetaData(Collection $objects): void { // TODO: Implement collectMetaData() method. @@ -57,17 +52,13 @@ class BudgetTransformer extends AbstractTransformer /** * Transform a budget. - * - * @param Budget $budget - * - * @return array */ public function transform(Budget $budget): array { - //$this->opsRepository->setUser($budget->user); - $start = $this->parameters->get('start'); - $end = $this->parameters->get('end'); - //$autoBudget = $this->repository->getAutoBudget($budget); + // $this->opsRepository->setUser($budget->user); + // $start = $this->parameters->get('start'); + // $end = $this->parameters->get('end'); + // $autoBudget = $this->repository->getAutoBudget($budget); // $spent = []; // if (null !== $start && null !== $end) { // $spent = $this->beautify($this->opsRepository->sumExpenses($start, $end, null, new Collection([$budget]))); @@ -115,20 +106,4 @@ class BudgetTransformer extends AbstractTransformer ], ]; } - - /** - * @param array $array - * - * @return array - */ - private function beautify(array $array): array - { - $return = []; - foreach ($array as $data) { - $data['sum'] = number_format((float)$data['sum'], (int)$data['currency_decimal_places'], '.', ''); - $return[] = $data; - } - - return $return; - } } diff --git a/app/Transformers/V2/CurrencyTransformer.php b/app/Transformers/V2/CurrencyTransformer.php new file mode 100644 index 0000000000..9466b253cf --- /dev/null +++ b/app/Transformers/V2/CurrencyTransformer.php @@ -0,0 +1,59 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Transformers\V2; + +use FireflyIII\Models\TransactionCurrency; +use Illuminate\Support\Collection; + +/** + * Class CurrencyTransformer + */ +class CurrencyTransformer extends AbstractTransformer +{ + public function collectMetaData(Collection $objects): void {} + + /** + * Transform the currency. + */ + public function transform(TransactionCurrency $currency): array + { + return [ + 'id' => $currency->id, + 'created_at' => $currency->created_at->toAtomString(), + 'updated_at' => $currency->updated_at->toAtomString(), + 'default' => $currency->userGroupDefault, + 'enabled' => $currency->userGroupEnabled, + 'name' => $currency->name, + 'code' => $currency->code, + 'symbol' => $currency->symbol, + 'decimal_places' => $currency->decimal_places, + 'links' => [ + [ + 'rel' => 'self', + 'uri' => '/currencies/'.$currency->id, + ], + ], + ]; + } +} diff --git a/app/Transformers/V2/PiggyBankTransformer.php b/app/Transformers/V2/PiggyBankTransformer.php index 82e9b05de6..bf16a99608 100644 --- a/app/Transformers/V2/PiggyBankTransformer.php +++ b/app/Transformers/V2/PiggyBankTransformer.php @@ -36,7 +36,7 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; -use JsonException; +use Illuminate\Support\Facades\Log; /** * Class PiggyBankTransformer @@ -56,8 +56,6 @@ class PiggyBankTransformer extends AbstractTransformer /** * PiggyBankTransformer constructor. - * - */ public function __construct() { @@ -71,78 +69,78 @@ class PiggyBankTransformer extends AbstractTransformer // $this->piggyRepos = app(PiggyBankRepositoryInterface::class); } - /** - * @inheritDoc - */ public function collectMetaData(Collection $objects): void { // TODO move to repository (does not exist yet) $piggyBanks = $objects->pluck('id')->toArray(); $accountInfo = Account::whereIn('id', $objects->pluck('account_id')->toArray())->get(); $currencyPreferences = AccountMeta::where('name', '"currency_id"')->whereIn('account_id', $objects->pluck('account_id')->toArray())->get(); + $currencies = []; + /** @var Account $account */ foreach ($accountInfo as $account) { - $id = (int)$account->id; + $id = $account->id; $this->accounts[$id] = [ 'name' => $account->name, ]; } + /** @var AccountMeta $preference */ foreach ($currencyPreferences as $preference) { $currencyId = (int)$preference->data; - $accountId = (int)$preference->account_id; - $currencies[$currencyId] = $currencies[$currencyId] ?? TransactionJournal::find($currencyId); + $accountId = $preference->account_id; + $currencies[$currencyId] ??= TransactionJournal::find($currencyId); $this->currencies[$accountId] = $currencies[$currencyId]; } // grab object groups: - $set = DB::table('object_groupables') - ->leftJoin('object_groups', 'object_groups.id', '=', 'object_groupables.object_group_id') - ->where('object_groupables.object_groupable_type', PiggyBank::class) - ->get(['object_groupables.*', 'object_groups.title', 'object_groups.order']); + $set = DB::table('object_groupables') + ->leftJoin('object_groups', 'object_groups.id', '=', 'object_groupables.object_group_id') + ->where('object_groupables.object_groupable_type', PiggyBank::class) + ->get(['object_groupables.*', 'object_groups.title', 'object_groups.order']) + ; + /** @var ObjectGroup $entry */ foreach ($set as $entry) { $piggyBankId = (int)$entry->object_groupable_id; $id = (int)$entry->object_group_id; - $order = (int)$entry->order; + $order = $entry->order; $this->groups[$piggyBankId] = [ - 'object_group_id' => $id, + 'object_group_id' => (string)$id, 'object_group_title' => $entry->title, 'object_group_order' => $order, ]; - } // grab repetitions (for current amount): - $repetitions = PiggyBankRepetition::whereIn('piggy_bank_id', $piggyBanks)->get(); + $repetitions = PiggyBankRepetition::whereIn('piggy_bank_id', $piggyBanks)->get(); + /** @var PiggyBankRepetition $repetition */ foreach ($repetitions as $repetition) { - $this->repetitions[(int)$repetition->piggy_bank_id] = [ + $this->repetitions[$repetition->piggy_bank_id] = [ 'amount' => $repetition->currentamount, ]; } // grab notes // continue with notes - $notes = Note::whereNoteableType(PiggyBank::class)->whereIn('noteable_id', array_keys($piggyBanks))->get(); + $notes = Note::whereNoteableType(PiggyBank::class)->whereIn('noteable_id', array_keys($piggyBanks))->get(); + /** @var Note $note */ foreach ($notes as $note) { - $id = (int)$note->noteable_id; + $id = $note->noteable_id; $this->notes[$id] = $note; } - $this->default = app('amount')->getDefaultCurrencyByUser(auth()->user()); - $this->converter = new ExchangeRateConverter(); + Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); + $this->default = app('amount')->getDefaultCurrencyByUserGroup(auth()->user()->userGroup); + $this->converter = new ExchangeRateConverter(); } /** * Transform the piggy bank. * - * @param PiggyBank $piggyBank - * - * @return array * @throws FireflyException - * @throws JsonException */ public function transform(PiggyBank $piggyBank): array { @@ -179,15 +177,15 @@ class PiggyBankTransformer extends AbstractTransformer $nativeSavePerMonth = null; $startDate = $piggyBank->startdate?->format('Y-m-d'); $targetDate = $piggyBank->targetdate?->format('Y-m-d'); - $accountId = (int)$piggyBank->account_id; + $accountId = $piggyBank->account_id; $accountName = $this->accounts[$accountId]['name'] ?? null; $currency = $this->currencies[$accountId] ?? $this->default; - $currentAmount = app('steam')->bcround($this->repetitions[(int)$piggyBank->id]['amount'] ?? '0', $currency->decimal_places); + $currentAmount = app('steam')->bcround($this->repetitions[$piggyBank->id]['amount'] ?? '0', $currency->decimal_places); $nativeCurrentAmount = $this->converter->convert($this->default, $currency, today(), $currentAmount); $targetAmount = $piggyBank->targetamount; $nativeTargetAmount = $this->converter->convert($this->default, $currency, today(), $targetAmount); - $note = $this->notes[(int)$piggyBank->id] ?? null; - $group = $this->groups[(int)$piggyBank->id] ?? null; + $note = $this->notes[$piggyBank->id] ?? null; + $group = $this->groups[$piggyBank->id] ?? null; if (0 !== bccomp($targetAmount, '0')) { // target amount is not 0.00 $leftToSave = bcsub($targetAmount, $currentAmount); @@ -196,6 +194,7 @@ class PiggyBankTransformer extends AbstractTransformer $savePerMonth = $this->getSuggestedMonthlyAmount($currentAmount, $targetAmount, $piggyBank->startdate, $piggyBank->targetdate); $nativeSavePerMonth = $this->converter->convert($this->default, $currency, today(), $savePerMonth); } + $this->converter->summarize(); return [ 'id' => (string)$piggyBank->id, @@ -207,11 +206,11 @@ class PiggyBankTransformer extends AbstractTransformer 'currency_id' => (string)$currency->id, 'currency_code' => $currency->code, 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => (int)$currency->decimal_places, + 'currency_decimal_places' => $currency->decimal_places, 'native_currency_id' => (string)$this->default->id, 'native_currency_code' => $this->default->code, 'native_currency_symbol' => $this->default->symbol, - 'native_currency_decimal_places' => (int)$this->default->decimal_places, + 'native_currency_decimal_places' => $this->default->decimal_places, 'current_amount' => $currentAmount, 'native_current_amount' => $nativeCurrentAmount, 'target_amount' => $targetAmount, @@ -223,7 +222,7 @@ class PiggyBankTransformer extends AbstractTransformer 'native_save_per_month' => $nativeSavePerMonth, 'start_date' => $startDate, 'target_date' => $targetDate, - 'order' => (int)$piggyBank->order, + 'order' => $piggyBank->order, 'active' => $piggyBank->active, 'notes' => $note, 'object_group_id' => $group ? $group['object_group_id'] : null, @@ -232,15 +231,12 @@ class PiggyBankTransformer extends AbstractTransformer 'links' => [ [ 'rel' => 'self', - 'uri' => '/piggy_banks/' . $piggyBank->id, + 'uri' => '/piggy_banks/'.$piggyBank->id, ], ], ]; } - /** - * @return string|null - */ private function getSuggestedMonthlyAmount(string $currentAmount, string $targetAmount, ?Carbon $startDate, ?Carbon $targetDate): string { $savePerMonth = '0'; diff --git a/app/Transformers/V2/PreferenceTransformer.php b/app/Transformers/V2/PreferenceTransformer.php index 44131339f3..5736daf853 100644 --- a/app/Transformers/V2/PreferenceTransformer.php +++ b/app/Transformers/V2/PreferenceTransformer.php @@ -31,9 +31,6 @@ use Illuminate\Support\Collection; */ class PreferenceTransformer extends AbstractTransformer { - /** - * @inheritDoc - */ public function collectMetaData(Collection $objects): void { // TODO: Implement collectMetaData() method. @@ -41,15 +38,11 @@ class PreferenceTransformer extends AbstractTransformer /** * Transform the preference - * - * @param Preference $preference - * - * @return array */ public function transform(Preference $preference): array { return [ - 'id' => (int)$preference->id, + 'id' => $preference->id, 'created_at' => $preference->created_at->toAtomString(), 'updated_at' => $preference->updated_at->toAtomString(), 'name' => $preference->name, diff --git a/app/Transformers/V2/TransactionGroupTransformer.php b/app/Transformers/V2/TransactionGroupTransformer.php index e67db9c145..7838b24fca 100644 --- a/app/Transformers/V2/TransactionGroupTransformer.php +++ b/app/Transformers/V2/TransactionGroupTransformer.php @@ -26,138 +26,296 @@ namespace FireflyIII\Transformers\V2; use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Budget; +use FireflyIII\Models\Category; +use FireflyIII\Models\Location; use FireflyIII\Models\Note; +use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournalMeta; use FireflyIII\Models\TransactionType; -use FireflyIII\Support\Http\Api\ConvertsExchangeRates; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use FireflyIII\Support\NullArrayObject; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; -use stdClass; /** * Class TransactionGroupTransformer */ class TransactionGroupTransformer extends AbstractTransformer { - use ConvertsExchangeRates; + private array $accountTypes = []; // account types collection. + private ExchangeRateConverter $converter; // collection of all journals and some important meta-data. + private array $currencies = []; + private TransactionCurrency $default; // collection of all currencies for this transformer. + private array $journals = []; + private array $objects = []; - private ExchangeRateConverter $converter; - private array $currencies = []; - private TransactionCurrency $default; - private array $meta; - private array $notes; - private array $tags; + // private array $currencies = []; + // private array $transactionTypes = []; + // private array $meta = []; + // private array $notes = []; + // private array $locations = []; + // private array $tags = []; + // private array $amounts = []; + // private array $foreignAmounts = []; + // private array $journalCurrencies = []; + // private array $foreignCurrencies = []; - /** - * @inheritDoc - */ public function collectMetaData(Collection $objects): void { - // start with currencies: - $currencies = []; - $journals = []; - /** @var array $object */ + $collectForObjects = false; + + /** @var array|TransactionGroup $object */ foreach ($objects as $object) { - foreach ($object['sums'] as $sum) { - $id = (int)$sum['currency_id']; - $currencies[$id] = $currencies[$id] ?? TransactionCurrency::find($sum['currency_id']); + if (is_array($object)) { + $this->collectForArray($object); } - /** @var array $transaction */ - foreach ($object['transactions'] as $transaction) { - $id = (int)$transaction['transaction_journal_id']; - $journals[$id] = []; + if ($object instanceof TransactionGroup) { + $this->collectForObject($object); + $collectForObjects = true; } } - $this->currencies = $currencies; - $this->default = app('amount')->getDefaultCurrency(); - // grab meta for all journals: - $meta = TransactionJournalMeta::whereIn('transaction_journal_id', array_keys($journals))->get(); - /** @var TransactionJournalMeta $entry */ - foreach ($meta as $entry) { - $id = (int)$entry->transaction_journal_id; - $this->meta[$id][$entry->name] = $entry->data; + $this->default = app('amount')->getDefaultCurrency(); + $this->converter = new ExchangeRateConverter(); + + $this->collectAllMetaData(); + $this->collectAllNotes(); + $this->collectAllLocations(); + $this->collectAllTags(); + if ($collectForObjects) { + $this->collectAllCurrencies(); + // $this->collectAllAmounts(); + // $this->collectTransactionTypes(); + // $this->collectAccounts(); + // source accounts + // destination accounts } - - // grab all notes for all journals: - $notes = Note::whereNoteableType(TransactionJournal::class)->whereIn('noteable_id', array_keys($journals))->get(); - /** @var Note $note */ - foreach ($notes as $note) { - $id = (int)$note->noteable_id; - $this->notes[$id] = $note; - } - - // grab all tags for all journals: - $tags = DB::table('tag_transaction_journal') - ->leftJoin('tags', 'tags.id', 'tag_transaction_journal.tag_id') - ->whereIn('tag_transaction_journal.transaction_journal_id', array_keys($journals)) - ->get(['tag_transaction_journal.transaction_journal_id', 'tags.tag']); - /** @var stdClass $tag */ - foreach ($tags as $tag) { - $id = (int)$tag->transaction_journal_id; - $this->tags[$id][] = $tag->tag; - } - - // create converter - $this->converter = new ExchangeRateConverter(); } - /** - * @param array $group - * - * @return array - */ - public function transform(array $group): array + private function collectForArray(array $object): void { - $first = reset($group['transactions']); + foreach ($object['sums'] as $sum) { + $this->currencies[(int)$sum['currency_id']] ??= TransactionCurrency::find($sum['currency_id']); + } + + /** @var array $transaction */ + foreach ($object['transactions'] as $transaction) { + $this->journals[(int)$transaction['transaction_journal_id']] = []; + } + } + + private function collectForObject(TransactionGroup $object): void + { + foreach ($object->transactionJournals as $journal) { + $this->journals[$journal->id] = []; + $this->objects[] = $journal; + } + } + + private function collectAllMetaData(): void + { + $meta = TransactionJournalMeta::whereIn('transaction_journal_id', array_keys($this->journals))->get(); + + /** @var TransactionJournalMeta $entry */ + foreach ($meta as $entry) { + $id = $entry->transaction_journal_id; + $this->journals[$id]['meta'] ??= []; + $this->journals[$id]['meta'][$entry->name] = $entry->data; + } + } + + private function collectAllNotes(): void + { + // grab all notes for all journals: + $notes = Note::whereNoteableType(TransactionJournal::class)->whereIn('noteable_id', array_keys($this->journals))->get(); + + /** @var Note $note */ + foreach ($notes as $note) { + $id = $note->noteable_id; + $this->journals[$id]['notes'] = $note->text; + } + } + + private function collectAllLocations(): void + { + // grab all locations for all journals: + $locations = Location::whereLocatableType(TransactionJournal::class)->whereIn('locatable_id', array_keys($this->journals))->get(); + + /** @var Location $location */ + foreach ($locations as $location) { + $id = $location->locatable_id; + $this->journals[$id]['location'] = [ + 'latitude' => $location->latitude, + 'longitude' => $location->longitude, + 'zoom_level' => $location->zoom_level, + ]; + } + } + + private function collectAllTags(): void + { + // grab all tags for all journals: + $tags = DB::table('tag_transaction_journal') + ->leftJoin('tags', 'tags.id', 'tag_transaction_journal.tag_id') + ->whereIn('tag_transaction_journal.transaction_journal_id', array_keys($this->journals)) + ->get(['tag_transaction_journal.transaction_journal_id', 'tags.tag']) + ; + + /** @var \stdClass $tag */ + foreach ($tags as $tag) { + $id = (int)$tag->transaction_journal_id; + $this->journals[$id]['tags'][] = $tag->tag; + } + } + + private function collectAllCurrencies(): void + { + /** @var TransactionJournal $journal */ + foreach ($this->objects as $journal) { + $id = $journal->id; + $this->journals[$id]['reconciled'] = false; + $this->journals[$id]['foreign_amount'] = null; + $this->journals[$id]['foreign_currency_id'] = null; + $this->journals[$id]['amount'] = null; + $this->journals[$id]['currency_id'] = null; + $this->journals[$id]['type'] = $journal->transactionType->type; + $this->journals[$id]['budget_id'] = null; + $this->journals[$id]['budget_name'] = null; + $this->journals[$id]['category_id'] = null; + $this->journals[$id]['category_name'] = null; + $this->journals[$id]['bill_id'] = null; + $this->journals[$id]['bill_name'] = null; + + // collect budget: + /** @var null|Budget $budget */ + $budget = $journal->budgets()->first(); + if (null !== $budget) { + $this->journals[$id]['budget_id'] = (string)$budget->id; + $this->journals[$id]['budget_name'] = $budget->name; + } + + // collect category: + /** @var null|Category $category */ + $category = $journal->categories()->first(); + if (null !== $category) { + $this->journals[$id]['category_id'] = (string)$category->id; + $this->journals[$id]['category_name'] = $category->name; + } + + // collect bill: + if (null !== $journal->bill_id) { + $bill = $journal->bill; + $this->journals[$id]['bill_id'] = (string)$bill->id; + $this->journals[$id]['bill_name'] = $bill->name; + } + + /** @var Transaction $transaction */ + foreach ($journal->transactions as $transaction) { + if (-1 === bccomp($transaction->amount, '0')) { + // only collect source account info + $account = $transaction->account; + $this->accountTypes[$account->account_type_id] ??= $account->accountType->type; + $this->journals[$id]['source_account_name'] = $account->name; + $this->journals[$id]['source_account_iban'] = $account->iban; + $this->journals[$id]['source_account_type'] = $this->accountTypes[$account->account_type_id]; + $this->journals[$id]['source_account_id'] = $transaction->account_id; + $this->journals[$id]['reconciled'] = $transaction->reconciled; + + continue; + } + + // add account + $account = $transaction->account; + $this->accountTypes[$account->account_type_id] ??= $account->accountType->type; + $this->journals[$id]['destination_account_name'] = $account->name; + $this->journals[$id]['destination_account_iban'] = $account->iban; + $this->journals[$id]['destination_account_type'] = $this->accountTypes[$account->account_type_id]; + $this->journals[$id]['destination_account_id'] = $transaction->account_id; + + // find and set currency + $currencyId = $transaction->transaction_currency_id; + $this->currencies[$currencyId] ??= $transaction->transactionCurrency; + $this->journals[$id]['currency_id'] = $currencyId; + $this->journals[$id]['amount'] = $transaction->amount; + // find and set foreign currency + if (null !== $transaction->foreign_currency_id) { + $foreignCurrencyId = $transaction->foreign_currency_id; + $this->currencies[$foreignCurrencyId] ??= $transaction->foreignCurrency; + $this->journals[$id]['foreign_currency_id'] = $foreignCurrencyId; + $this->journals[$id]['foreign_amount'] = $transaction->foreign_amount; + } + + // find and set destination account info. + } + } + } + + public function transform(array|TransactionGroup $group): array + { + if (is_array($group)) { + $first = reset($group['transactions']); + + return [ + 'id' => (string)$group['id'], + 'created_at' => $group['created_at']->toAtomString(), + 'updated_at' => $group['updated_at']->toAtomString(), + 'user' => (string)$first['user_id'], + 'user_group' => (string)$first['user_group_id'], + 'group_title' => $group['title'] ?? null, + 'transactions' => $this->transformTransactions($group['transactions'] ?? []), + 'links' => [ + [ + 'rel' => 'self', + 'uri' => sprintf('/transactions/%d', $group['id']), + ], + ], + ]; + } + return [ - 'id' => (string)$group['id'], - 'created_at' => $first['created_at']->toAtomString(), - 'updated_at' => $first['updated_at']->toAtomString(), - 'user' => (string)$first['user_id'], - 'user_group' => (string)$first['user_group_id'], - 'group_title' => $group['title'] ?? null, - 'transactions' => $this->transformTransactions($group['transactions'] ?? []), + 'id' => (string)$group->id, + 'created_at' => $group->created_at->toAtomString(), + 'updated_at' => $group->created_at->toAtomString(), + 'user' => (string)$group->user_id, + 'user_group' => (string)$group->user_group_id, + 'group_title' => $group->title ?? null, + 'transactions' => $this->transformJournals($group), 'links' => [ [ 'rel' => 'self', - 'uri' => sprintf('/transactions/%d', $group['id']), + 'uri' => sprintf('/transactions/%d', $group->id), ], ], ]; } - /** - * @param array $transactions - * - * @return array - */ private function transformTransactions(array $transactions): array { $return = []; + /** @var array $transaction */ foreach ($transactions as $transaction) { $return[] = $this->transformTransaction($transaction); } + return $return; } /** - * @param array $transaction - * - * @return array * @throws FireflyException + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ private function transformTransaction(array $transaction): array { - $transaction = new NullArrayObject($transaction); - $type = $this->stringFromArray($transaction, 'transaction_type_type', TransactionType::WITHDRAWAL); - $journalId = (int)$transaction['transaction_journal_id']; - $meta = new NullArrayObject($this->meta[$journalId] ?? []); + $transaction = new NullArrayObject($transaction); + $type = $this->stringFromArray($transaction, 'transaction_type_type', TransactionType::WITHDRAWAL); + $journalId = (int)$transaction['transaction_journal_id']; + $meta = new NullArrayObject($this->meta[$journalId] ?? []); /** * Convert and use amount: @@ -172,6 +330,16 @@ class TransactionGroupTransformer extends AbstractTransformer $foreignAmount = app('steam')->positive($transaction['foreign_amount']); $nativeForeignAmount = $this->converter->convert($this->default, $this->currencies[$foreignCurrencyId], $transaction['date'], $foreignAmount); } + $this->converter->summarize(); + + $longitude = null; + $latitude = null; + $zoomLevel = null; + if (array_key_exists('location', $this->journals[$journalId])) { + $latitude = (string)$this->journals[$journalId]['location']['latitude']; + $longitude = (string)$this->journals[$journalId]['location']['longitude']; + $zoomLevel = $this->journals[$journalId]['location']['zoom_level']; + } return [ 'user' => (string)$transaction['user_id'], @@ -195,7 +363,7 @@ class TransactionGroupTransformer extends AbstractTransformer 'native_currency_code' => $this->default->code, 'native_currency_name' => $this->default->name, 'native_currency_symbol' => $this->default->symbol, - 'native_currency_decimal_places' => (int)$this->default->decimal_places, + 'native_currency_decimal_places' => $this->default->decimal_places, // foreign currency amount: 'foreign_currency_id' => $this->stringFromArray($transaction, 'foreign_currency_id', null), @@ -229,7 +397,6 @@ class TransactionGroupTransformer extends AbstractTransformer 'recurrence_id' => $meta['recurrence_id'], 'recurrence_total' => $meta['recurrence_total'], 'recurrence_count' => $meta['recurrence_count'], - 'bunq_payment_id' => $meta['bunq_payment_id'], 'external_url' => $meta['external_url'], 'import_hash_v2' => $meta['import_hash_v2'], 'sepa_cc' => $meta['sepa_cc'], @@ -248,9 +415,9 @@ class TransactionGroupTransformer extends AbstractTransformer 'invoice_date' => $this->date($meta['invoice_date']), // location data - // 'longitude' => $longitude, - // 'latitude' => $latitude, - // 'zoom_level' => $zoomLevel, + 'longitude' => $longitude, + 'latitude' => $latitude, + 'zoom_level' => $zoomLevel, // // 'has_attachments' => $this->hasAttachments((int) $row['transaction_journal_id']), ]; @@ -261,16 +428,10 @@ class TransactionGroupTransformer extends AbstractTransformer * * Used to extract a value from the given array, and fall back on a sensible default or NULL * if it can't be helped. - * - * @param NullArrayObject $array - * @param string $key - * @param string|null $default - * - * @return string|null */ private function stringFromArray(NullArrayObject $array, string $key, ?string $default): ?string { - //app('log')->debug(sprintf('%s: %s', $key, var_export($array[$key], true))); + // app('log')->debug(sprintf('%s: %s', $key, var_export($array[$key], true))); if (null === $array[$key] && null === $default) { return null; } @@ -291,11 +452,6 @@ class TransactionGroupTransformer extends AbstractTransformer return null; } - /** - * @param string|null $string - * - * @return Carbon|null - */ private function date(?string $string): ?Carbon { if (null === $string) { @@ -303,16 +459,162 @@ class TransactionGroupTransformer extends AbstractTransformer } // app('log')->debug(sprintf('Now in date("%s")', $string)); if (10 === strlen($string)) { - return Carbon::createFromFormat('Y-m-d', $string, config('app.timezone')); + $res = Carbon::createFromFormat('Y-m-d', $string, config('app.timezone')); + if (false === $res) { + return null; + } + + return $res; } if (25 === strlen($string)) { return Carbon::parse($string, config('app.timezone')); } if (19 === strlen($string) && str_contains($string, 'T')) { - return Carbon::createFromFormat('Y-m-d\TH:i:s', substr($string, 0, 19), config('app.timezone')); + $res = Carbon::createFromFormat('Y-m-d\TH:i:s', substr($string, 0, 19), config('app.timezone')); + if (false === $res) { + return null; + } + + return $res; } // 2022-01-01 01:01:01 - return Carbon::createFromFormat('Y-m-d H:i:s', substr($string, 0, 19), config('app.timezone')); + $res = Carbon::createFromFormat('Y-m-d H:i:s', substr($string, 0, 19), config('app.timezone')); + if (false === $res) { + return null; + } + + return $res; + } + + private function transformJournals(TransactionGroup $group): array + { + $return = []; + + /** @var TransactionJournal $journal */ + foreach ($group->transactionJournals as $journal) { + $return[] = $this->transformJournal($journal); + } + + return $return; + } + + /** + * @throws FireflyException + * + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + */ + private function transformJournal(TransactionJournal $journal): array + { + $id = $journal->id; + + /** @var null|TransactionCurrency $foreignCurrency */ + $foreignCurrency = null; + + /** @var TransactionCurrency $currency */ + $currency = $this->currencies[$this->journals[$id]['currency_id']]; + $nativeForeignAmount = null; + $amount = $this->journals[$journal->id]['amount']; + $foreignAmount = $this->journals[$journal->id]['foreign_amount']; + $meta = new NullArrayObject($this->meta[$id] ?? []); + + // has foreign amount? + if (null !== $foreignAmount) { + $foreignCurrency = $this->currencies[$this->journals[$id]['foreign_currency_id']]; + $nativeForeignAmount = $this->converter->convert($this->default, $foreignCurrency, $journal->date, $foreignAmount); + } + + $nativeAmount = $this->converter->convert($this->default, $currency, $journal->date, $amount); + + $longitude = null; + $latitude = null; + $zoomLevel = null; + if (array_key_exists('location', $this->journals[$id])) { + $latitude = (string)$this->journals[$id]['location']['latitude']; + $longitude = (string)$this->journals[$id]['location']['longitude']; + $zoomLevel = $this->journals[$id]['location']['zoom_level']; + } + + return [ + 'user' => (string)$journal->user_id, + 'user_group' => (string)$journal->user_group_id, + 'transaction_journal_id' => (string)$journal->id, + 'type' => $this->journals[$journal->id]['type'], + 'date' => $journal->date->toAtomString(), + 'order' => $journal->order, + 'amount' => $amount, + 'native_amount' => $nativeAmount, + 'foreign_amount' => $foreignAmount, + 'native_foreign_amount' => $nativeForeignAmount, + 'currency_id' => (string)$currency->id, + 'currency_code' => $currency->code, + 'currency_name' => $currency->name, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, + + // converted to native currency + 'native_currency_id' => (string)$this->default->id, + 'native_currency_code' => $this->default->code, + 'native_currency_name' => $this->default->name, + 'native_currency_symbol' => $this->default->symbol, + 'native_currency_decimal_places' => $this->default->decimal_places, + + // foreign currency amount: + 'foreign_currency_id' => $foreignCurrency?->id, + 'foreign_currency_code' => $foreignCurrency?->code, + 'foreign_currency_name' => $foreignCurrency?->name, + 'foreign_currency_symbol' => $foreignCurrency?->symbol, + 'foreign_currency_decimal_places' => $foreignCurrency?->decimal_places, + + 'description' => $journal->description, + 'source_id' => (string)$this->journals[$id]['source_account_id'], + 'source_name' => $this->journals[$id]['source_account_name'], + 'source_iban' => $this->journals[$id]['source_account_iban'], + 'source_type' => $this->journals[$id]['source_account_type'], + + 'destination_id' => (string)$this->journals[$id]['destination_account_id'], + 'destination_name' => $this->journals[$id]['destination_account_name'], + 'destination_iban' => $this->journals[$id]['destination_account_iban'], + 'destination_type' => $this->journals[$id]['destination_account_type'], + + 'budget_id' => $this->journals[$id]['budget_id'], + 'budget_name' => $this->journals[$id]['budget_name'], + 'category_id' => $this->journals[$id]['category_id'], + 'category_name' => $this->journals[$id]['category_name'], + 'bill_id' => $this->journals[$id]['bill_id'], + 'bill_name' => $this->journals[$id]['bill_name'], + 'reconciled' => $this->journals[$id]['reconciled'], + 'notes' => $this->journals[$id]['notes'] ?? null, + 'tags' => $this->journals[$id]['tags'] ?? [], + 'internal_reference' => $meta['internal_reference'], + 'external_id' => $meta['external_id'], + 'original_source' => $meta['original_source'], + 'recurrence_id' => $meta['recurrence_id'], + 'recurrence_total' => $meta['recurrence_total'], + 'recurrence_count' => $meta['recurrence_count'], + 'external_url' => $meta['external_url'], + 'import_hash_v2' => $meta['import_hash_v2'], + 'sepa_cc' => $meta['sepa_cc'], + 'sepa_ct_op' => $meta['sepa_ct_op'], + 'sepa_ct_id' => $meta['sepa_ct_id'], + 'sepa_db' => $meta['sepa_db'], + 'sepa_country' => $meta['sepa_country'], + 'sepa_ep' => $meta['sepa_ep'], + 'sepa_ci' => $meta['sepa_ci'], + 'sepa_batch_id' => $meta['sepa_batch_id'], + 'interest_date' => $this->date($meta['interest_date']), + 'book_date' => $this->date($meta['book_date']), + 'process_date' => $this->date($meta['process_date']), + 'due_date' => $this->date($meta['due_date']), + 'payment_date' => $this->date($meta['payment_date']), + 'invoice_date' => $this->date($meta['invoice_date']), + + // location data + 'longitude' => $longitude, + 'latitude' => $latitude, + 'zoom_level' => $zoomLevel, + // + // 'has_attachments' => $this->hasAttachments((int) $row['transaction_journal_id']), + ]; } } diff --git a/app/Transformers/V2/UserGroupTransformer.php b/app/Transformers/V2/UserGroupTransformer.php index 3f7c44b0d2..2c523a0281 100644 --- a/app/Transformers/V2/UserGroupTransformer.php +++ b/app/Transformers/V2/UserGroupTransformer.php @@ -1,6 +1,5 @@ memberships = []; } - /** - * @inheritDoc - */ public function collectMetaData(Collection $objects): void { if (auth()->check()) { // collect memberships so they can be listed in the group. /** @var User $user */ $user = auth()->user(); + /** @var UserGroup $userGroup */ foreach ($objects as $userGroup) { - $userGroupId = (int)$userGroup->id; - $access = $user->hasRoleInGroup($userGroup, UserRoleEnum::VIEW_MEMBERSHIPS, true, true); + $userGroupId = $userGroup->id; + $access = $user->hasRoleInGroupOrOwner($userGroup, UserRoleEnum::VIEW_MEMBERSHIPS) || $user->hasRole('owner'); if ($access) { $groupMemberships = $userGroup->groupMemberships()->get(); + /** @var GroupMembership $groupMembership */ foreach ($groupMemberships as $groupMembership) { $this->memberships[$userGroupId][] = [ @@ -76,22 +71,16 @@ class UserGroupTransformer extends AbstractTransformer /** * Transform the user group. - * - * @param UserGroup $userGroup - * - * @return array */ public function transform(UserGroup $userGroup): array { - $return = [ - 'id' => (int)$userGroup->id, + return [ + 'id' => $userGroup->id, 'created_at' => $userGroup->created_at->toAtomString(), 'updated_at' => $userGroup->updated_at->toAtomString(), 'title' => $userGroup->title, - 'members' => $this->memberships[(int)$userGroup->id] ?? [], + 'members' => $this->memberships[$userGroup->id] ?? [], ]; // if the user has a specific role in this group, then collect the memberships. - - return $return; } } diff --git a/app/Transformers/WebhookAttemptTransformer.php b/app/Transformers/WebhookAttemptTransformer.php index 8576c3800f..6feafb88e1 100644 --- a/app/Transformers/WebhookAttemptTransformer.php +++ b/app/Transformers/WebhookAttemptTransformer.php @@ -32,10 +32,6 @@ class WebhookAttemptTransformer extends AbstractTransformer { /** * Transform the preference - * - * @param WebhookAttempt $attempt - * - * @return array */ public function transform(WebhookAttempt $attempt): array { diff --git a/app/Transformers/WebhookMessageTransformer.php b/app/Transformers/WebhookMessageTransformer.php index 02a290a069..7cdee7adc7 100644 --- a/app/Transformers/WebhookMessageTransformer.php +++ b/app/Transformers/WebhookMessageTransformer.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Transformers; use FireflyIII\Models\WebhookMessage; -use Illuminate\Support\Facades\Log; -use Jsonexception; /** * Class WebhookMessageTransformer @@ -34,17 +32,14 @@ class WebhookMessageTransformer extends AbstractTransformer { /** * Transform the preference - * - * @param WebhookMessage $message - * - * @return array */ public function transform(WebhookMessage $message): array { $json = '{}'; + try { $json = json_encode($message->message, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { + } catch (\JsonException $e) { app('log')->error(sprintf('Could not encode webhook message #%d: %s', $message->id, $e->getMessage())); } diff --git a/app/Transformers/WebhookTransformer.php b/app/Transformers/WebhookTransformer.php index c39e015f58..d913b38f3d 100644 --- a/app/Transformers/WebhookTransformer.php +++ b/app/Transformers/WebhookTransformer.php @@ -34,26 +34,18 @@ use FireflyIII\Models\Webhook; */ class WebhookTransformer extends AbstractTransformer { - private array $enums; - /** * WebhookTransformer constructor. */ - public function __construct() - { - } + public function __construct() {} /** * Transform webhook. - * - * @param Webhook $webhook - * - * @return array */ public function transform(Webhook $webhook): array { return [ - 'id' => (int)$webhook->id, + 'id' => $webhook->id, 'created_at' => $webhook->created_at->toAtomString(), 'updated_at' => $webhook->updated_at->toAtomString(), 'active' => $webhook->active, @@ -72,12 +64,6 @@ class WebhookTransformer extends AbstractTransformer ]; } - /** - * @param string $type - * @param int $value - * - * @return string - */ private function getEnum(string $type, int $value): string { if ('trigger' === $type) { @@ -86,6 +72,7 @@ class WebhookTransformer extends AbstractTransformer if ('response' === $type) { return WebhookResponse::from($value)->name; } + return WebhookDelivery::from($value)->name; } } diff --git a/app/User.php b/app/User.php index d4cfe96cf3..1218e7deaf 100644 --- a/app/User.php +++ b/app/User.php @@ -24,8 +24,8 @@ declare(strict_types=1); namespace FireflyIII; +use Carbon\Carbon; use Eloquent; -use Exception; use FireflyIII\Enums\UserRoleEnum; use FireflyIII\Events\RequestedNewPassword; use FireflyIII\Exceptions\FireflyException; @@ -46,6 +46,7 @@ use FireflyIII\Models\Rule; use FireflyIII\Models\RuleGroup; use FireflyIII\Models\Tag; use FireflyIII\Models\Transaction; +use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\UserGroup; @@ -65,53 +66,52 @@ use Illuminate\Notifications\DatabaseNotification; use Illuminate\Notifications\DatabaseNotificationCollection; use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notification; -use Illuminate\Support\Carbon; use Illuminate\Support\Collection; use Illuminate\Support\Str; use Laravel\Passport\Client; use Laravel\Passport\HasApiTokens; use Laravel\Passport\Token; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; -use Request; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Class User. * - * @property int $id - * @property string $email - * @property bool $isAdmin - * @property bool $has2FA - * @property array $prefs - * @property string $password - * @property string $mfa_secret - * @property Collection $roles - * @property string $blocked_code - * @property bool $blocked - * @property Carbon|null $created_at - * @property Carbon|null $updated_at - * @property string|null $remember_token - * @property string|null $reset - * @property-read \Illuminate\Database\Eloquent\Collection|Account[] $accounts - * @property-read \Illuminate\Database\Eloquent\Collection|Attachment[] $attachments - * @property-read \Illuminate\Database\Eloquent\Collection|AvailableBudget[] $availableBudgets - * @property-read \Illuminate\Database\Eloquent\Collection|Bill[] $bills - * @property-read \Illuminate\Database\Eloquent\Collection|Budget[] $budgets - * @property-read \Illuminate\Database\Eloquent\Collection|Category[] $categories - * @property-read \Illuminate\Database\Eloquent\Collection|Client[] $clients - * @property-read \Illuminate\Database\Eloquent\Collection|CurrencyExchangeRate[] $currencyExchangeRates - * @property-read DatabaseNotificationCollection|DatabaseNotification[] $notifications - * @property-read \Illuminate\Database\Eloquent\Collection|PiggyBank[] $piggyBanks - * @property-read \Illuminate\Database\Eloquent\Collection|Preference[] $preferences - * @property-read \Illuminate\Database\Eloquent\Collection|Recurrence[] $recurrences - * @property-read \Illuminate\Database\Eloquent\Collection|RuleGroup[] $ruleGroups - * @property-read \Illuminate\Database\Eloquent\Collection|Rule[] $rules - * @property-read \Illuminate\Database\Eloquent\Collection|Tag[] $tags - * @property-read \Illuminate\Database\Eloquent\Collection|Token[] $tokens - * @property-read \Illuminate\Database\Eloquent\Collection|TransactionGroup[] $transactionGroups - * @property-read \Illuminate\Database\Eloquent\Collection|TransactionJournal[] $transactionJournals - * @property-read \Illuminate\Database\Eloquent\Collection|Transaction[] $transactions + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * + * @property int|string $id + * @property string $email + * @property bool $isAdmin + * @property bool $has2FA + * @property array $prefs + * @property string $password + * @property string $mfa_secret + * @property Collection $roles + * @property string $blocked_code + * @property bool $blocked + * @property null|Carbon $created_at + * @property null|Carbon $updated_at + * @property null|string $remember_token + * @property null|string $reset + * @property Account[]|\Illuminate\Database\Eloquent\Collection $accounts + * @property Attachment[]|\Illuminate\Database\Eloquent\Collection $attachments + * @property AvailableBudget[]|\Illuminate\Database\Eloquent\Collection $availableBudgets + * @property Bill[]|\Illuminate\Database\Eloquent\Collection $bills + * @property Budget[]|\Illuminate\Database\Eloquent\Collection $budgets + * @property Category[]|\Illuminate\Database\Eloquent\Collection $categories + * @property Client[]|\Illuminate\Database\Eloquent\Collection $clients + * @property CurrencyExchangeRate[]|\Illuminate\Database\Eloquent\Collection $currencyExchangeRates + * @property DatabaseNotification[]|DatabaseNotificationCollection $notifications + * @property \Illuminate\Database\Eloquent\Collection|PiggyBank[] $piggyBanks + * @property \Illuminate\Database\Eloquent\Collection|Preference[] $preferences + * @property \Illuminate\Database\Eloquent\Collection|Recurrence[] $recurrences + * @property \Illuminate\Database\Eloquent\Collection|RuleGroup[] $ruleGroups + * @property \Illuminate\Database\Eloquent\Collection|Rule[] $rules + * @property \Illuminate\Database\Eloquent\Collection|Tag[] $tags + * @property \Illuminate\Database\Eloquent\Collection|Token[] $tokens + * @property \Illuminate\Database\Eloquent\Collection|TransactionGroup[] $transactionGroups + * @property \Illuminate\Database\Eloquent\Collection|TransactionJournal[] $transactionJournals + * @property \Illuminate\Database\Eloquent\Collection|Transaction[] $transactions + * * @method static Builder|User newModelQuery() * @method static Builder|User newQuery() * @method static Builder|User query() @@ -124,92 +124,81 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|User whereRememberToken($value) * @method static Builder|User whereReset($value) * @method static Builder|User whereUpdatedAt($value) - * @property string|null $objectguid - * @property-read int|null $accounts_count - * @property-read int|null $attachments_count - * @property-read int|null $available_budgets_count - * @property-read int|null $bills_count - * @property-read int|null $budgets_count - * @property-read int|null $categories_count - * @property-read int|null $clients_count - * @property-read int|null $currency_exchange_rates_count - * @property-read int|null $notifications_count - * @property-read int|null $piggy_banks_count - * @property-read int|null $preferences_count - * @property-read int|null $recurrences_count - * @property-read int|null $roles_count - * @property-read int|null $rule_groups_count - * @property-read int|null $rules_count - * @property-read int|null $tags_count - * @property-read int|null $tokens_count - * @property-read int|null $transaction_groups_count - * @property-read int|null $transaction_journals_count - * @property-read int|null $transactions_count + * + * @property null|string $objectguid + * @property null|int $accounts_count + * @property null|int $attachments_count + * @property null|int $available_budgets_count + * @property null|int $bills_count + * @property null|int $budgets_count + * @property null|int $categories_count + * @property null|int $clients_count + * @property null|int $currency_exchange_rates_count + * @property null|int $notifications_count + * @property null|int $piggy_banks_count + * @property null|int $preferences_count + * @property null|int $recurrences_count + * @property null|int $roles_count + * @property null|int $rule_groups_count + * @property null|int $rules_count + * @property null|int $tags_count + * @property null|int $tokens_count + * @property null|int $transaction_groups_count + * @property null|int $transaction_journals_count + * @property null|int $transactions_count + * * @method static Builder|User whereMfaSecret($value) * @method static Builder|User whereObjectguid($value) - * @property string|null $provider + * + * @property null|string $provider + * * @method static Builder|User whereProvider($value) - * @property-read \Illuminate\Database\Eloquent\Collection|ObjectGroup[] $objectGroups - * @property-read int|null $object_groups_count - * @property-read \Illuminate\Database\Eloquent\Collection|Webhook[] $webhooks - * @property-read int|null $webhooks_count - * @property string|null $two_factor_secret - * @property string|null $two_factor_recovery_codes - * @property string|null $guid - * @property string|null $domain + * + * @property \Illuminate\Database\Eloquent\Collection|ObjectGroup[] $objectGroups + * @property null|int $object_groups_count + * @property \Illuminate\Database\Eloquent\Collection|Webhook[] $webhooks + * @property null|int $webhooks_count + * @property null|string $two_factor_secret + * @property null|string $two_factor_recovery_codes + * @property null|string $guid + * @property null|string $domain + * * @method static Builder|User whereDomain($value) * @method static Builder|User whereGuid($value) * @method static Builder|User whereTwoFactorRecoveryCodes($value) * @method static Builder|User whereTwoFactorSecret($value) - * @property int|null $user_group_id - * @property-read \Illuminate\Database\Eloquent\Collection|GroupMembership[] $groupMemberships - * @property-read int|null $group_memberships_count - * @property-read UserGroup|null $userGroup + * + * @property null|int $user_group_id + * @property GroupMembership[]|\Illuminate\Database\Eloquent\Collection $groupMemberships + * @property null|int $group_memberships_count + * @property null|UserGroup $userGroup + * * @method static Builder|User whereUserGroupId($value) + * + * @property \Illuminate\Database\Eloquent\Collection $currencies + * @property null|int $currencies_count + * * @mixin Eloquent */ class User extends Authenticatable { - use Notifiable; use HasApiTokens; + use Notifiable; - /** - * The attributes that should be cast to native types. - * - * @var array - */ protected $casts - = [ - 'created_at' => 'datetime', - 'updated_at' => 'datetime', - 'blocked' => 'boolean', - ]; - /** - * The attributes that are mass assignable. - * - * @var array - */ + = [ + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'blocked' => 'boolean', + ]; protected $fillable = ['email', 'password', 'blocked', 'blocked_code']; - /** - * The attributes excluded from the model's JSON form. - * - * @var array - */ - protected $hidden = ['password', 'remember_token']; - /** - * The database table used by the model. - * - * @var string - */ - protected $table = 'users'; + protected $hidden = ['password', 'remember_token']; + protected $table = 'users'; /** - * @param string $value - * - * @return User * @throws NotFoundHttpException */ - public static function routeBinder(string $value): User + public static function routeBinder(string $value): self { if (auth()->check()) { $userId = (int)$value; @@ -218,13 +207,12 @@ class User extends Authenticatable return $user; } } + throw new NotFoundHttpException(); } /** * Link to accounts. - * - * @return HasMany */ public function accounts(): HasMany { @@ -233,8 +221,6 @@ class User extends Authenticatable /** * Link to attachments - * - * @return HasMany */ public function attachments(): HasMany { @@ -243,8 +229,6 @@ class User extends Authenticatable /** * Link to available budgets - * - * @return HasMany */ public function availableBudgets(): HasMany { @@ -253,8 +237,6 @@ class User extends Authenticatable /** * Link to bills. - * - * @return HasMany */ public function bills(): HasMany { @@ -263,8 +245,6 @@ class User extends Authenticatable /** * Link to budgets. - * - * @return HasMany */ public function budgets(): HasMany { @@ -273,18 +253,22 @@ class User extends Authenticatable /** * Link to categories - * - * @return HasMany */ public function categories(): HasMany { return $this->hasMany(Category::class); } + /** + * Link to currencies + */ + public function currencies(): BelongsToMany + { + return $this->belongsToMany(TransactionCurrency::class)->withTimestamps()->withPivot('user_default'); + } + /** * Link to currency exchange rates - * - * @return HasMany */ public function currencyExchangeRates(): HasMany { @@ -294,8 +278,7 @@ class User extends Authenticatable /** * Generates access token. * - * @return string - * @throws Exception + * @throws \Exception */ public function generateAccessToken(): string { @@ -307,7 +290,6 @@ class User extends Authenticatable /** * A safe method that returns the user's current administration ID (group ID). * - * @return int * @throws FireflyException */ public function getAdministrationId(): int @@ -316,6 +298,7 @@ class User extends Authenticatable if (0 === $groupId) { throw new FireflyException('User has no administration ID.'); } + return $groupId; } @@ -323,8 +306,8 @@ class User extends Authenticatable * Get the models LDAP domain. * * @return string - * @deprecated * + * @deprecated */ public function getLdapDomain() { @@ -335,8 +318,8 @@ class User extends Authenticatable * Get the database column name of the domain. * * @return string - * @deprecated * + * @deprecated */ public function getLdapDomainColumn() { @@ -347,8 +330,8 @@ class User extends Authenticatable * Get the models LDAP GUID. * * @return string - * @deprecated * + * @deprecated */ public function getLdapGuid() { @@ -359,61 +342,59 @@ class User extends Authenticatable * Get the models LDAP GUID database column name. * * @return string - * @deprecated * + * @deprecated */ public function getLdapGuidColumn() { return 'objectguid'; } - /** - * Does the user have role X in group Y? + * Does the user have role X in group Y, or is the user the group owner of has full rights to the group? * * If $allowOverride is set to true, then the roles FULL or OWNER will also be checked, * which means that in most cases the user DOES have access, regardless of the original role submitted in $role. - * - * @param UserGroup $userGroup - * @param UserRoleEnum $role - * @param bool $allowOverride - * - * @return bool */ - public function hasRoleInGroup(UserGroup $userGroup, UserRoleEnum $role, bool $allowGroupOverride = false, bool $allowSystemOverride = false): bool + public function hasRoleInGroupOrOwner(UserGroup $userGroup, UserRoleEnum $role): bool { - if ($allowSystemOverride && $this->hasRole('owner')) { - app('log')->debug(sprintf('hasRoleInGroup: user "#%d %s" is system owner and allowSystemOverride = true, return true', $this->id, $this->email)); - return true; - } - $roles = [$role->value]; - if ($allowGroupOverride) { - $roles[] = UserRoleEnum::OWNER->value; - $roles[] = UserRoleEnum::FULL->value; - } - app('log')->debug(sprintf('in hasRoleInGroup(%s)', join(', ', $roles))); + $roles = [$role->value, UserRoleEnum::OWNER->value, UserRoleEnum::FULL->value]; + + return $this->hasAnyRoleInGroup($userGroup, $roles); + } + + /** + * Does the user have role X, Y or Z in group A? + */ + private function hasAnyRoleInGroup(UserGroup $userGroup, array $roles): bool + { + app('log')->debug(sprintf('in hasAnyRoleInGroup(%s)', implode(', ', $roles))); + /** @var Collection $dbRoles */ - $dbRoles = UserRole::whereIn('title', $roles)->get(); + $dbRoles = UserRole::whereIn('title', $roles)->get(); if (0 === $dbRoles->count()) { - app('log')->error(sprintf('Could not find role(s): %s. Probably migration mishap.', join(', ', $roles))); + app('log')->error(sprintf('Could not find role(s): %s. Probably migration mishap.', implode(', ', $roles))); + return false; } - $dbRolesIds = $dbRoles->pluck('id')->toArray(); - $dbRolesTitles = $dbRoles->pluck('title')->toArray(); + $dbRolesIds = $dbRoles->pluck('id')->toArray(); + $dbRolesTitles = $dbRoles->pluck('title')->toArray(); /** @var Collection $groupMemberships */ $groupMemberships = $this->groupMemberships() - ->whereIn('user_role_id', $dbRolesIds) - ->where('user_group_id', $userGroup->id)->get(); + ->whereIn('user_role_id', $dbRolesIds) + ->where('user_group_id', $userGroup->id)->get() + ; if (0 === $groupMemberships->count()) { app('log')->error(sprintf( 'User #%d "%s" does not have roles %s in user group #%d "%s"', $this->id, $this->email, - join(', ', $roles), + implode(', ', $roles), $userGroup->id, $userGroup->title )); + return false; } foreach ($groupMemberships as $membership) { @@ -427,6 +408,7 @@ class User extends Authenticatable )); if (in_array($membership->userRole->title, $dbRolesTitles, true)) { app('log')->debug(sprintf('Return true, found role "%s"', $membership->userRole->title)); + return true; } } @@ -434,52 +416,29 @@ class User extends Authenticatable 'User #%d "%s" does not have roles %s in user group #%d "%s"', $this->id, $this->email, - join(', ', $roles), + implode(', ', $roles), $userGroup->id, $userGroup->title )); + return false; - // // not necessary, should always return true: - // $result = $groupMembership->userRole->title === $role->value; - // app('log')->error(sprintf('Does user #%d "%s" have role "%s" in user group #%d "%s"? %s', - // $this->id, $this->email, - // $role->value, $userGroup->id, $userGroup->title, var_export($result, true))); - // return $result; } - /** - * @param string $role - * - * @return bool - */ - public function hasRole(string $role): bool - { - return $this->roles()->where('name', $role)->count() === 1; - } - - /** - * Link to roles. - * - * @return BelongsToMany - */ - public function roles(): BelongsToMany - { - return $this->belongsToMany(Role::class); - } - - /** - * - * @return HasMany - */ public function groupMemberships(): HasMany { return $this->hasMany(GroupMembership::class)->with(['userGroup', 'userRole']); } + /** + * Does the user have role X in group Y? + */ + public function hasSpecificRoleInGroup(UserGroup $userGroup, UserRoleEnum $role): bool + { + return $this->hasAnyRoleInGroup($userGroup, [$role]); + } + /** * Link to object groups. - * - * @return HasMany */ public function objectGroups(): HasMany { @@ -488,8 +447,6 @@ class User extends Authenticatable /** * Link to piggy banks. - * - * @return HasManyThrough */ public function piggyBanks(): HasManyThrough { @@ -498,8 +455,6 @@ class User extends Authenticatable /** * Link to preferences. - * - * @return HasMany */ public function preferences(): HasMany { @@ -508,8 +463,6 @@ class User extends Authenticatable /** * Link to recurring transactions. - * - * @return HasMany */ public function recurrences(): HasMany { @@ -520,18 +473,19 @@ class User extends Authenticatable * Get the notification routing information for the given driver. * * @param string $driver - * @param Notification|null $notification + * @param null|Notification $notification * * @return mixed */ public function routeNotificationFor($driver, $notification = null) { - if (method_exists($this, $method = 'routeNotificationFor' . Str::studly($driver))) { - return $this->{$method}($notification); + $method = 'routeNotificationFor'.Str::studly($driver); + if (method_exists($this, $method)) { + return $this->{$method}($notification); // @phpstan-ignore-line } - $email = $this->email; + $email = $this->email; // see if user has alternative email address: - $pref = app('preferences')->getForUser($this, 'remote_guard_alt_email'); + $pref = app('preferences')->getForUser($this, 'remote_guard_alt_email'); if (null !== $pref) { $email = $pref->data; } @@ -547,56 +501,71 @@ class User extends Authenticatable }; } + /** + * This method refers to the "global" role a user can have, outside of any group they may be part of. + */ + public function hasRole(string $role): bool + { + return 1 === $this->roles()->where('name', $role)->count(); + } + + /** + * Link to roles. + */ + public function roles(): BelongsToMany + { + return $this->belongsToMany(Role::class); + } + /** * Route notifications for the Slack channel. - * - * @param Notification $notification - * - * @return string - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface */ public function routeNotificationForSlack(Notification $notification): string { // this check does not validate if the user is owner, Should be done by notification itself. + $res = app('fireflyconfig')->get('slack_webhook_url', '')->data; + if (is_array($res)) { + $res = ''; + } + $res = (string)$res; if ($notification instanceof TestNotification) { - return app('fireflyconfig')->get('slack_webhook_url', '')->data; + return $res; } if ($notification instanceof UserInvitation) { - return app('fireflyconfig')->get('slack_webhook_url', '')->data; + return $res; } if ($notification instanceof UserRegistration) { - return app('fireflyconfig')->get('slack_webhook_url', '')->data; + return $res; } if ($notification instanceof VersionCheckResult) { - return app('fireflyconfig')->get('slack_webhook_url', '')->data; + return $res; + } + $pref = app('preferences')->getForUser($this, 'slack_webhook_url', '')->data; + if (is_array($pref)) { + return ''; } - return app('preferences')->getForUser($this, 'slack_webhook_url', '')->data; + return (string)$pref; } /** * Link to rule groups. - * - * @return HasMany */ public function ruleGroups(): HasMany { return $this->hasMany(RuleGroup::class); } + // start LDAP related code + /** * Link to rules. - * - * @return HasMany */ public function rules(): HasMany { return $this->hasMany(Rule::class); } - // start LDAP related code - /** * Send the password reset notification. * @@ -604,7 +573,7 @@ class User extends Authenticatable */ public function sendPasswordResetNotification($token): void { - $ipAddress = Request::ip(); + $ipAddress = \Request::ip(); event(new RequestedNewPassword($this, $token, $ipAddress)); } @@ -614,11 +583,9 @@ class User extends Authenticatable * * @param string $domain * - * @return void * @deprecated - * */ - public function setLdapDomain($domain) + public function setLdapDomain($domain): void { $this->{$this->getLdapDomainColumn()} = $domain; } @@ -628,18 +595,15 @@ class User extends Authenticatable * * @param string $guid * - * @return void * @deprecated */ - public function setLdapGuid($guid) + public function setLdapGuid($guid): void { $this->{$this->getLdapGuidColumn()} = $guid; } /** * Link to tags. - * - * @return HasMany */ public function tags(): HasMany { @@ -648,8 +612,6 @@ class User extends Authenticatable /** * Link to transaction groups. - * - * @return HasMany */ public function transactionGroups(): HasMany { @@ -658,8 +620,6 @@ class User extends Authenticatable /** * Link to transaction journals. - * - * @return HasMany */ public function transactionJournals(): HasMany { @@ -668,27 +628,19 @@ class User extends Authenticatable /** * Link to transactions. - * - * @return HasManyThrough */ public function transactions(): HasManyThrough { return $this->hasManyThrough(Transaction::class, TransactionJournal::class); } - /** - * @return BelongsTo - */ public function userGroup(): BelongsTo { - return $this->belongsTo(UserGroup::class, ); + return $this->belongsTo(UserGroup::class); } /** - * * Link to webhooks - * - * @return HasMany */ public function webhooks(): HasMany { diff --git a/app/Validation/Account/AccountValidatorProperties.php b/app/Validation/Account/AccountValidatorProperties.php index b77f592bdf..106c3660f5 100644 --- a/app/Validation/Account/AccountValidatorProperties.php +++ b/app/Validation/Account/AccountValidatorProperties.php @@ -29,6 +29,4 @@ namespace FireflyIII\Validation\Account; * * Trait AccountValidatorProperties */ -trait AccountValidatorProperties -{ -} +trait AccountValidatorProperties {} diff --git a/app/Validation/Account/DepositValidation.php b/app/Validation/Account/DepositValidation.php index 4e306e18f5..ea75e241ae 100644 --- a/app/Validation/Account/DepositValidation.php +++ b/app/Validation/Account/DepositValidation.php @@ -25,18 +25,12 @@ namespace FireflyIII\Validation\Account; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; -use Illuminate\Support\Facades\Log; /** * Trait DepositValidation */ trait DepositValidation { - /** - * @param array $array - * - * @return bool - */ protected function validateDepositDestination(array $array): bool { $result = null; @@ -44,20 +38,20 @@ trait DepositValidation $accountName = array_key_exists('name', $array) ? $array['name'] : null; $accountIban = array_key_exists('iban', $array) ? $array['iban'] : null; - Log::debug('Now in validateDepositDestination', $array); + app('log')->debug('Now in validateDepositDestination', $array); // source can be any of the following types. - $validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? []; + $validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? []; if (null === $accountId && null === $accountName && null === $accountIban && false === $this->canCreateTypes($validTypes)) { // if both values are NULL we return false, // because the destination of a deposit can't be created. $this->destError = (string)trans('validation.deposit_dest_need_data'); - Log::error('Both values are NULL, cant create deposit destination.'); - $result = false; + app('log')->error('Both values are NULL, cant create deposit destination.'); + $result = false; } // if the account can be created anyway we don't need to search. if (null === $result && true === $this->canCreateTypes($validTypes)) { - Log::debug('Can create some of these types, so return true.'); + app('log')->debug('Can create some of these types, so return true.'); $result = true; } @@ -65,40 +59,30 @@ trait DepositValidation // otherwise try to find the account: $search = $this->findExistingAccount($validTypes, $array); if (null === $search) { - Log::debug('findExistingAccount() returned NULL, so the result is false.'); + app('log')->debug('findExistingAccount() returned NULL, so the result is false.'); $this->destError = (string)trans('validation.deposit_dest_bad_data', ['id' => $accountId, 'name' => $accountName]); $result = false; } if (null !== $search) { - Log::debug(sprintf('findExistingAccount() returned #%d ("%s"), so the result is true.', $search->id, $search->name)); + app('log')->debug(sprintf('findExistingAccount() returned #%d ("%s"), so the result is true.', $search->id, $search->name)); $this->setDestination($search); $result = true; } } - Log::debug(sprintf('validateDepositDestination will return %s', var_export($result, true))); + app('log')->debug(sprintf('validateDepositDestination will return %s', var_export($result, true))); return $result; } - /** - * @param array $accountTypes - * - * @return bool - */ abstract protected function canCreateTypes(array $accountTypes): bool; - /** - * @param array $validTypes - * @param array $data - * - * @return Account|null - */ abstract protected function findExistingAccount(array $validTypes, array $data): ?Account; /** - * @param array $array + * Pretty complex unfortunately. * - * @return bool + * @SuppressWarnings(PHPMD.NPathComplexity) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function validateDepositSource(array $array): bool { @@ -106,19 +90,19 @@ trait DepositValidation $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); + app('log')->debug('Now in validateDepositSource', $array); // null = we found nothing at all or didn't even search // false = invalid results - $result = null; + $result = null; // source can be any of the following types. - $validTypes = array_keys($this->combinations[$this->transactionType]); - if (null === $accountId && - null === $accountName && - null === $accountIban && - null === $accountNumber && - false === $this->canCreateTypes($validTypes)) { + $validTypes = array_keys($this->combinations[$this->transactionType]); + if (null === $accountId + && null === $accountName + && null === $accountIban + && null === $accountNumber + && false === $this->canCreateTypes($validTypes)) { // if both values are NULL return false, // because the source of a deposit can't be created. // (this never happens). @@ -128,10 +112,11 @@ trait DepositValidation // if there is an iban, it can only be in use by a valid source type, or we will fail. if (null !== $accountIban && '' !== $accountIban) { - app('log')->debug('Check if there is not already an account with this IBAN'); + app('log')->debug('Check if there is not already another account with this IBAN'); $existing = $this->findExistingAccount($validTypes, ['iban' => $accountIban], true); if (null !== $existing) { $this->sourceError = (string)trans('validation.deposit_src_iban_exists'); + return false; } } @@ -141,11 +126,11 @@ trait DepositValidation if (null !== $accountId) { $search = $this->getRepository()->find($accountId); if (null !== $search && !in_array($search->accountType->type, $validTypes, true)) { - Log::debug(sprintf('User submitted an ID (#%d), which is a "%s", so this is not a valid source.', $accountId, $search->accountType->type)); - Log::debug(sprintf('Firefly III accepts ID #%d as valid account data.', $accountId)); + app('log')->debug(sprintf('User submitted an ID (#%d), which is a "%s", so this is not a valid source.', $accountId, $search->accountType->type)); + app('log')->debug(sprintf('Firefly III accepts ID #%d as valid account data.', $accountId)); } if (null !== $search && in_array($search->accountType->type, $validTypes, true)) { - Log::debug('ID result is not null and seems valid, save as source account.'); + app('log')->debug('ID result is not null and seems valid, save as source account.'); $this->setSource($search); $result = true; } @@ -155,11 +140,11 @@ trait DepositValidation if (null !== $accountIban) { $search = $this->getRepository()->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)); + app('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 (null !== $search && in_array($search->accountType->type, $validTypes, true)) { - Log::debug('IBAN result is not null and seems valid, save as source account.'); + app('log')->debug('IBAN result is not null and seems valid, save as source account.'); $this->setSource($search); $result = true; } @@ -169,13 +154,13 @@ trait DepositValidation if (null !== $accountNumber && '' !== $accountNumber) { $search = $this->getRepository()->findByAccountNumber($accountNumber, $validTypes); if (null !== $search && !in_array($search->accountType->type, $validTypes, true)) { - Log::debug( + app('log')->debug( sprintf('User submitted number ("%s"), which is a "%s", so this is not a valid source.', $accountNumber, $search->accountType->type) ); $result = false; } if (null !== $search && in_array($search->accountType->type, $validTypes, true)) { - Log::debug('Number result is not null and seems valid, save as source account.'); + app('log')->debug('Number result is not null and seems valid, save as source account.'); $this->setSource($search); $result = true; } @@ -183,7 +168,7 @@ trait DepositValidation // if the account can be created anyway we don't need to search. if (null === $result && true === $this->canCreateTypes($validTypes)) { - $result = true; + $result = true; // set the source to be a (dummy) revenue account. $account = new Account(); diff --git a/app/Validation/Account/LiabilityValidation.php b/app/Validation/Account/LiabilityValidation.php index b9a94d3dce..f3fc714c9d 100644 --- a/app/Validation/Account/LiabilityValidation.php +++ b/app/Validation/Account/LiabilityValidation.php @@ -26,21 +26,15 @@ namespace FireflyIII\Validation\Account; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; -use Illuminate\Support\Facades\Log; /** * Trait LiabilityValidation */ trait LiabilityValidation { - /** - * @param array $array - * - * @return bool - */ protected function validateLCDestination(array $array): bool { - Log::debug('Now in validateLCDestination', $array); + app('log')->debug('Now in validateLCDestination', $array); $result = null; $accountId = array_key_exists('id', $array) ? $array['id'] : null; $accountName = array_key_exists('name', $array) ? $array['name'] : null; @@ -49,62 +43,65 @@ trait LiabilityValidation // if the ID is not null the source account should be a dummy account of the type liability credit. // the ID of the destination must belong to a liability. if (null !== $accountId) { - if (AccountType::LIABILITY_CREDIT !== $this?->source?->accountType?->type) { - Log::error('Source account is not a liability.'); + if (AccountType::LIABILITY_CREDIT !== $this->source?->accountType?->type) { + app('log')->error('Source account is not a liability.'); + return false; } $result = $this->findExistingAccount($validTypes, $array); if (null === $result) { - Log::error('Destination account is not a liability.'); + app('log')->error('Destination account is not a liability.'); + return false; } + return true; } if (null !== $accountName && '' !== $accountName) { - Log::debug('Destination ID is null, now we can assume the destination is a (new) liability credit account.'); + app('log')->debug('Destination ID is null, now we can assume the destination is a (new) liability credit account.'); + return true; } - Log::error('Destination ID is null, but destination name is also NULL.'); + app('log')->error('Destination ID is null, but destination name is also NULL.'); + return false; } /** * Source of a liability credit must be a liability or liability credit account. - * - * @param array $array - * - * @return bool */ protected function validateLCSource(array $array): bool { - Log::debug('Now in validateLCSource', $array); + app('log')->debug('Now in validateLCSource', $array); // if the array has an ID and ID is not null, try to find it and check type. // this account must be a liability - $accountId = array_key_exists('id', $array) ? $array['id'] : null; + $accountId = array_key_exists('id', $array) ? $array['id'] : null; if (null !== $accountId) { - Log::debug('Source ID is not null, assume were looking for a liability.'); + app('log')->debug('Source ID is not null, assume were looking for a liability.'); // find liability credit: $result = $this->findExistingAccount(config('firefly.valid_liabilities'), $array); if (null === $result) { - Log::error('Did not find a liability account, return false.'); + app('log')->error('Did not find a liability account, return false.'); + return false; } - Log::debug(sprintf('Return true, found #%d ("%s")', $result->id, $result->name)); + app('log')->debug(sprintf('Return true, found #%d ("%s")', $result->id, $result->name)); $this->setSource($result); + return true; } // if array has name and is not null, return true. $accountName = array_key_exists('name', $array) ? $array['name'] : null; - $result = true; + $result = true; if ('' === $accountName || null === $accountName) { - Log::error('Array must have a name, is not the case, return false.'); + app('log')->error('Array must have a name, is not the case, return false.'); $result = false; } if (true === $result) { - Log::error('Array has a name, return true.'); + app('log')->error('Array has a name, return true.'); // set the source to be a (dummy) revenue account. $account = new Account(); $accountType = AccountType::whereType(AccountType::LIABILITY_CREDIT)->first(); diff --git a/app/Validation/Account/OBValidation.php b/app/Validation/Account/OBValidation.php index c77d65d4da..de2dc2c11d 100644 --- a/app/Validation/Account/OBValidation.php +++ b/app/Validation/Account/OBValidation.php @@ -26,37 +26,31 @@ namespace FireflyIII\Validation\Account; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; -use Illuminate\Support\Facades\Log; /** * Trait OBValidation */ trait OBValidation { - /** - * @param array $array - * - * @return bool - */ protected function validateOBDestination(array $array): bool { $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); + app('log')->debug('Now in validateOBDestination', $array); // source can be any of the following types. - $validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? []; + $validTypes = $this->combinations[$this->transactionType][$this->source?->accountType->type] ?? []; if (null === $accountId && null === $accountName && false === $this->canCreateTypes($validTypes)) { // if both values are NULL we return false, // because the destination of a deposit can't be created. $this->destError = (string)trans('validation.ob_dest_need_data'); - Log::error('Both values are NULL, cant create OB destination.'); - $result = false; + app('log')->error('Both values are NULL, cant create OB destination.'); + $result = false; } // if the account can be created anyway we don't need to search. if (null === $result && true === $this->canCreateTypes($validTypes)) { - Log::debug('Can create some of these types, so return true.'); + app('log')->debug('Can create some of these types, so return true.'); $result = true; } @@ -64,44 +58,35 @@ trait OBValidation // otherwise try to find the account: $search = $this->findExistingAccount($validTypes, $array); if (null === $search) { - Log::debug('findExistingAccount() returned NULL, so the result is false.', $validTypes); + app('log')->debug('findExistingAccount() returned NULL, so the result is false.', $validTypes); $this->destError = (string)trans('validation.ob_dest_bad_data', ['id' => $accountId, 'name' => $accountName]); $result = false; } if (null !== $search) { - Log::debug(sprintf('findExistingAccount() returned #%d ("%s"), so the result is true.', $search->id, $search->name)); + app('log')->debug(sprintf('findExistingAccount() returned #%d ("%s"), so the result is true.', $search->id, $search->name)); $this->setDestination($search); $result = true; } } - Log::debug(sprintf('validateOBDestination(%d, "%s") will return %s', $accountId, $accountName, var_export($result, true))); + app('log')->debug(sprintf('validateOBDestination(%d, "%s") will return %s', $accountId, $accountName, var_export($result, true))); return $result; } - /** - * @param array $accountTypes - * - * @return bool - */ abstract protected function canCreateTypes(array $accountTypes): bool; /** * Source of an opening balance can either be an asset account * or an "initial balance account". The latter can be created. - * - * @param array $array - * - * @return bool */ protected function validateOBSource(array $array): bool { $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; + app('log')->debug('Now in validateOBSource', $array); + $result = null; // source can be any of the following types. - $validTypes = array_keys($this->combinations[$this->transactionType]); + $validTypes = array_keys($this->combinations[$this->transactionType]); if (null === $accountId && null === $accountName && false === $this->canCreateTypes($validTypes)) { // if both values are NULL return false, @@ -114,19 +99,19 @@ trait OBValidation // if the user submits an ID only but that ID is not of the correct type, // return false. if (null !== $accountId && null === $accountName) { - Log::debug('Source ID is not null, but name is null.'); + app('log')->debug('Source ID is not null, but name is null.'); $search = $this->getRepository()->find($accountId); // the source resulted in an account, but it's not of a valid type. if (null !== $search && !in_array($search->accountType->type, $validTypes, true)) { - $message = sprintf('User submitted only an ID (#%d), which is a "%s", so this is not a valid source.', $accountId, $search->accountType->type); - Log::debug($message); + $message = sprintf('User submitted only an ID (#%d), which is a "%s", so this is not a valid source.', $accountId, $search->accountType->type); + app('log')->debug($message); $this->sourceError = $message; $result = false; } // the source resulted in an account, AND it's of a valid type. if (null !== $search && in_array($search->accountType->type, $validTypes, true)) { - Log::debug(sprintf('Found account of correct type: #%d, "%s"', $search->id, $search->name)); + app('log')->debug(sprintf('Found account of correct type: #%d, "%s"', $search->id, $search->name)); $this->setSource($search); $result = true; } @@ -134,11 +119,13 @@ trait OBValidation // if the account can be created anyway we don't need to search. if (null === $result && true === $this->canCreateTypes($validTypes)) { - Log::debug('Result is still null.'); - $result = true; + app('log')->debug('Result is still null.'); + $result = true; // set the source to be a (dummy) initial balance account. $account = new Account(); + + /** @var AccountType $accountType */ $accountType = AccountType::whereType(AccountType::INITIAL_BALANCE)->first(); $account->accountType = $accountType; $this->setSource($account); diff --git a/app/Validation/Account/ReconciliationValidation.php b/app/Validation/Account/ReconciliationValidation.php index f3e3e1071a..be3695eef3 100644 --- a/app/Validation/Account/ReconciliationValidation.php +++ b/app/Validation/Account/ReconciliationValidation.php @@ -25,7 +25,6 @@ declare(strict_types=1); namespace FireflyIII\Validation\Account; use FireflyIII\Models\Account; -use Illuminate\Support\Facades\Log; /** * Trait ReconciliationValidation @@ -35,11 +34,6 @@ trait ReconciliationValidation public ?Account $destination; public ?Account $source; - /** - * @param array $array - * - * @return bool - */ protected function validateReconciliationDestination(array $array): bool { $accountId = array_key_exists('id', $array) ? $array['id'] : null; @@ -53,11 +47,11 @@ trait ReconciliationValidation } // after that, search for it expecting an asset account or a liability. - Log::debug('Now in validateReconciliationDestination', $array); + app('log')->debug('Now in validateReconciliationDestination', $array); // source can be any of the following types. - $validTypes = array_keys($this->combinations[$this->transactionType]); - $search = $this->findExistingAccount($validTypes, $array); + $validTypes = array_keys($this->combinations[$this->transactionType]); + $search = $this->findExistingAccount($validTypes, $array); if (null === $search) { $this->sourceError = (string)trans('validation.reconciliation_source_bad_data', ['id' => $accountId, 'name' => $accountName]); app('log')->warning('Not a valid source. Cant find it.', $validTypes); @@ -65,17 +59,13 @@ trait ReconciliationValidation return false; } $this->setSource($search); - Log::debug('Valid source account!'); + app('log')->debug('Valid source account!'); return true; } /** * Basically the same check - * - * @param array $array - * - * @return bool */ protected function validateReconciliationSource(array $array): bool { @@ -85,17 +75,18 @@ trait ReconciliationValidation // is expected to be "positive", i.e. the money flows from the // source to the asset account that is the destination. if (null === $accountId && null === $accountName) { - Log::debug('The source is valid because ID and name are NULL.'); + app('log')->debug('The source is valid because ID and name are NULL.'); $this->setSource(new Account()); + return true; } // after that, search for it expecting an asset account or a liability. - Log::debug('Now in validateReconciliationSource', $array); + app('log')->debug('Now in validateReconciliationSource', $array); // source can be any of the following types. - $validTypes = array_keys($this->combinations[$this->transactionType]); - $search = $this->findExistingAccount($validTypes, $array); + $validTypes = array_keys($this->combinations[$this->transactionType]); + $search = $this->findExistingAccount($validTypes, $array); if (null === $search) { $this->sourceError = (string)trans('validation.reconciliation_source_bad_data', ['id' => $accountId, 'name' => $accountName]); app('log')->warning('Not a valid source. Cant find it.', $validTypes); @@ -103,7 +94,7 @@ trait ReconciliationValidation return false; } $this->setSource($search); - Log::debug('Valid source account!'); + app('log')->debug('Valid source account!'); return true; } diff --git a/app/Validation/Account/TransferValidation.php b/app/Validation/Account/TransferValidation.php index b7227d6db0..dbf5808fcb 100644 --- a/app/Validation/Account/TransferValidation.php +++ b/app/Validation/Account/TransferValidation.php @@ -24,37 +24,31 @@ declare(strict_types=1); namespace FireflyIII\Validation\Account; use FireflyIII\Models\Account; -use Illuminate\Support\Facades\Log; /** * Trait TransferValidation */ trait TransferValidation { - /** - * @param array $array - * - * @return bool - */ protected function validateTransferDestination(array $array): bool { $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; - Log::debug('Now in validateTransferDestination', $array); + app('log')->debug('Now in validateTransferDestination', $array); // source can be any of the following types. - $validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? []; + $validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? []; if (null === $accountId && null === $accountName && null === $accountIban && false === $this->canCreateTypes($validTypes)) { // if both values are NULL we return false, // because the destination of a transfer can't be created. $this->destError = (string)trans('validation.transfer_dest_need_data'); - Log::error('Both values are NULL, cant create transfer destination.'); + app('log')->error('Both values are NULL, cant create transfer destination.'); return false; } // or try to find the account: - $search = $this->findExistingAccount($validTypes, $array); + $search = $this->findExistingAccount($validTypes, $array); if (null === $search) { $this->destError = (string)trans('validation.transfer_dest_bad_data', ['id' => $accountId, 'name' => $accountName]); @@ -73,35 +67,19 @@ trait TransferValidation return true; } - /** - * @param array $accountTypes - * - * @return bool - */ abstract protected function canCreateTypes(array $accountTypes): bool; - /** - * @param array $validTypes - * @param array $data - * - * @return Account|null - */ abstract protected function findExistingAccount(array $validTypes, array $data): ?Account; - /** - * @param array $array - * - * @return bool - */ protected function validateTransferSource(array $array): bool { $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 validateTransferSource', $array); + app('log')->debug('Now in validateTransferSource', $array); // source can be any of the following types. - $validTypes = array_keys($this->combinations[$this->transactionType]); + $validTypes = array_keys($this->combinations[$this->transactionType]); if (null === $accountId && null === $accountName && null === $accountIban && null === $accountNumber && false === $this->canCreateTypes($validTypes)) { @@ -114,7 +92,7 @@ trait TransferValidation } // otherwise try to find the account: - $search = $this->findExistingAccount($validTypes, $array); + $search = $this->findExistingAccount($validTypes, $array); if (null === $search) { $this->sourceError = (string)trans('validation.transfer_source_bad_data', ['id' => $accountId, 'name' => $accountName]); app('log')->warning('Not a valid source, cant find it.', $validTypes); @@ -122,7 +100,7 @@ trait TransferValidation return false; } $this->setSource($search); - Log::debug('Valid source!'); + app('log')->debug('Valid source!'); return true; } diff --git a/app/Validation/Account/WithdrawalValidation.php b/app/Validation/Account/WithdrawalValidation.php index e7ad03e8e5..9f4102b12d 100644 --- a/app/Validation/Account/WithdrawalValidation.php +++ b/app/Validation/Account/WithdrawalValidation.php @@ -25,26 +25,20 @@ namespace FireflyIII\Validation\Account; use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; -use Illuminate\Support\Facades\Log; /** * Trait WithdrawalValidation */ trait WithdrawalValidation { - /** - * @param array $array - * - * @return bool - */ protected function validateGenericSource(array $array): bool { $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; - Log::debug('Now in validateGenericSource', $array); + app('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]; + $validTypes = [AccountType::ASSET, AccountType::REVENUE, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]; if (null === $accountId && null === $accountName && null === $accountIban && false === $this->canCreateTypes($validTypes)) { // if both values are NULL we return TRUE // because we assume the user doesn't want to submit / change anything. @@ -55,7 +49,7 @@ trait WithdrawalValidation } // otherwise try to find the account: - $search = $this->findExistingAccount($validTypes, $array); + $search = $this->findExistingAccount($validTypes, $array); if (null === $search) { $this->sourceError = (string)trans('validation.withdrawal_source_bad_data', ['id' => $accountId, 'name' => $accountName]); app('log')->warning('Not a valid source. Cant find it.', $validTypes); @@ -63,40 +57,24 @@ trait WithdrawalValidation return false; } $this->setSource($search); - Log::debug('Valid source account!'); + app('log')->debug('Valid source account!'); return true; } - /** - * @param array $accountTypes - * - * @return bool - */ abstract protected function canCreateTypes(array $accountTypes): bool; - /** - * @param array $validTypes - * @param array $data - * - * @return Account|null - */ abstract protected function findExistingAccount(array $validTypes, array $data): ?Account; - /** - * @param array $array - * - * @return bool - */ protected function validateWithdrawalDestination(array $array): bool { $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 validateWithdrawalDestination()', $array); + app('log')->debug('Now in validateWithdrawalDestination()', $array); // source can be any of the following types. - $validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? []; + $validTypes = $this->combinations[$this->transactionType][$this->source->accountType->type] ?? []; app('log')->debug('Source type can be: ', $validTypes); if (null === $accountId && null === $accountName && null === $accountIban && null === $accountNumber && false === $this->canCreateTypes($validTypes)) { // if both values are NULL return false, @@ -110,9 +88,10 @@ trait WithdrawalValidation if (null !== $accountId && 0 !== $accountId) { $found = $this->getRepository()->find($accountId); if (null !== $found) { - $type = $found->accountType->type; + $type = $found->accountType->type; if (in_array($type, $validTypes, true)) { $this->setDestination($found); + return true; } // todo explain error in log message. @@ -129,6 +108,7 @@ trait WithdrawalValidation $existing = $this->findExistingAccount($validTypes, ['iban' => $accountIban], true); if (null !== $existing) { $this->destError = (string)trans('validation.withdrawal_dest_iban_exists'); + return false; } } @@ -137,11 +117,6 @@ trait WithdrawalValidation return true === $this->canCreateTypes($validTypes); } - /** - * @param array $array - * - * @return bool - */ protected function validateWithdrawalSource(array $array): bool { $accountId = array_key_exists('id', $array) ? $array['id'] : null; @@ -149,9 +124,9 @@ trait WithdrawalValidation $accountIban = array_key_exists('iban', $array) ? $array['iban'] : null; $accountNumber = array_key_exists('number', $array) ? $array['number'] : null; - Log::debug('Now in validateWithdrawalSource', $array); + app('log')->debug('Now in validateWithdrawalSource', $array); // source can be any of the following types. - $validTypes = array_keys($this->combinations[$this->transactionType]); + $validTypes = array_keys($this->combinations[$this->transactionType]); if (null === $accountId && null === $accountName && null === $accountNumber && null === $accountIban && false === $this->canCreateTypes($validTypes)) { // if both values are NULL we return false, // because the source of a withdrawal can't be created. @@ -162,7 +137,7 @@ trait WithdrawalValidation } // otherwise try to find the account: - $search = $this->findExistingAccount($validTypes, $array); + $search = $this->findExistingAccount($validTypes, $array); if (null === $search) { $this->sourceError = (string)trans('validation.withdrawal_source_bad_data', ['id' => $accountId, 'name' => $accountName]); app('log')->warning('Not a valid source. Cant find it.', $validTypes); @@ -170,7 +145,7 @@ trait WithdrawalValidation return false; } $this->setSource($search); - Log::debug('Valid source account!'); + app('log')->debug('Valid source account!'); return true; } diff --git a/app/Validation/AccountValidator.php b/app/Validation/AccountValidator.php index 080665e403..62a4ee6258 100644 --- a/app/Validation/AccountValidator.php +++ b/app/Validation/AccountValidator.php @@ -36,19 +36,18 @@ use FireflyIII\Validation\Account\OBValidation; use FireflyIII\Validation\Account\ReconciliationValidation; use FireflyIII\Validation\Account\TransferValidation; use FireflyIII\Validation\Account\WithdrawalValidation; -use Illuminate\Support\Facades\Log; /** * Class AccountValidator */ class AccountValidator { - use WithdrawalValidation; use DepositValidation; - use TransferValidation; - use ReconciliationValidation; - use OBValidation; use LiabilityValidation; + use OBValidation; + use ReconciliationValidation; + use TransferValidation; + use WithdrawalValidation; public bool $createMode; public string $destError; @@ -59,8 +58,6 @@ class AccountValidator private array $combinations; private string $transactionType; private bool $useUserGroupRepository = false; - private User $user; - private UserGroup $userGroup; private UserGroupAccountRepositoryInterface $userGroupAccountRepository; /** @@ -78,182 +75,167 @@ class AccountValidator $this->userGroupAccountRepository = app(UserGroupAccountRepositoryInterface::class); } - /** - * @return Account|null - */ public function getSource(): ?Account { return $this->source; } - /** - * @param Account|null $account - */ public function setSource(?Account $account): void { if (null === $account) { - Log::debug('AccountValidator source is set to NULL'); + app('log')->debug('AccountValidator source is set to NULL'); } if (null !== $account) { - Log::debug(sprintf('AccountValidator source is set to #%d: "%s" (%s)', $account->id, $account->name, $account->accountType->type)); + app('log')->debug(sprintf('AccountValidator source is set to #%d: "%s" (%s)', $account->id, $account->name, $account->accountType->type)); } $this->source = $account; } - /** - * @param Account|null $account - */ public function setDestination(?Account $account): void { if (null === $account) { - Log::debug('AccountValidator destination is set to NULL'); + app('log')->debug('AccountValidator destination is set to NULL'); } if (null !== $account) { - Log::debug(sprintf('AccountValidator destination is set to #%d: "%s" (%s)', $account->id, $account->name, $account->accountType->type)); + app('log')->debug(sprintf('AccountValidator destination is set to #%d: "%s" (%s)', $account->id, $account->name, $account->accountType->type)); } $this->destination = $account; } - /** - * @param string $transactionType - */ public function setTransactionType(string $transactionType): void { - Log::debug(sprintf('Transaction type for validator is now "%s".', ucfirst($transactionType))); + app('log')->debug(sprintf('Transaction type for validator is now "%s".', ucfirst($transactionType))); $this->transactionType = ucfirst($transactionType); } - /** - * @param User $user - */ public function setUser(User $user): void { - $this->user = $user; $this->accountRepository->setUser($user); $this->useUserGroupRepository = false; } - /** - * @param UserGroup $userGroup - * - * @return void - */ public function setUserGroup(UserGroup $userGroup): void { - $this->userGroup = $userGroup; $this->userGroupAccountRepository->setUserGroup($userGroup); $this->useUserGroupRepository = true; } - /** - * @param array $array - * - * @return bool - */ public function validateDestination(array $array): bool { - Log::debug('Now in AccountValidator::validateDestination()', $array); + app('log')->debug('Now in AccountValidator::validateDestination()', $array); if (null === $this->source) { - Log::error('Source is NULL, always FALSE.'); + app('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.'; return false; } + switch ($this->transactionType) { default: $this->destError = sprintf('AccountValidator::validateDestination cannot handle "%s", so it will always return false.', $this->transactionType); - Log::error(sprintf('AccountValidator::validateDestination cannot handle "%s", so it will always return false.', $this->transactionType)); + app('log')->error(sprintf('AccountValidator::validateDestination cannot handle "%s", so it will always return false.', $this->transactionType)); + + $result = false; - $result = false; break; case TransactionType::WITHDRAWAL: - $result = $this->validateWithdrawalDestination($array); + $result = $this->validateWithdrawalDestination($array); + break; + case TransactionType::DEPOSIT: - $result = $this->validateDepositDestination($array); + $result = $this->validateDepositDestination($array); + break; + case TransactionType::TRANSFER: - $result = $this->validateTransferDestination($array); + $result = $this->validateTransferDestination($array); + break; + case TransactionType::OPENING_BALANCE: - $result = $this->validateOBDestination($array); + $result = $this->validateOBDestination($array); + break; + case TransactionType::LIABILITY_CREDIT: - $result = $this->validateLCDestination($array); + $result = $this->validateLCDestination($array); + break; + case TransactionType::RECONCILIATION: - $result = $this->validateReconciliationDestination($array); + $result = $this->validateReconciliationDestination($array); + break; } return $result; } - /** - * @param array $array - * - * @return bool - */ public function validateSource(array $array): bool { - Log::debug('Now in AccountValidator::validateSource()', $array); + app('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)); + app('log')->error(sprintf('AccountValidator::validateSource cannot handle "%s", so it will do a generic check.', $this->transactionType)); $result = $this->validateGenericSource($array); + break; + case TransactionType::WITHDRAWAL: $result = $this->validateWithdrawalSource($array); + break; + case TransactionType::DEPOSIT: $result = $this->validateDepositSource($array); + break; + case TransactionType::TRANSFER: $result = $this->validateTransferSource($array); + break; + case TransactionType::OPENING_BALANCE: $result = $this->validateOBSource($array); + break; + case TransactionType::LIABILITY_CREDIT: $result = $this->validateLCSource($array); + break; case TransactionType::RECONCILIATION: - Log::debug('Calling validateReconciliationSource'); + app('log')->debug('Calling validateReconciliationSource'); $result = $this->validateReconciliationSource($array); + break; } return $result; } - /** - * @param array $accountTypes - * - * @return bool - */ protected function canCreateTypes(array $accountTypes): bool { - Log::debug('Can we create any of these types?', $accountTypes); + app('log')->debug('Can we create any of these types?', $accountTypes); + /** @var string $accountType */ foreach ($accountTypes as $accountType) { if ($this->canCreateType($accountType)) { - Log::debug(sprintf('YES, we can create a %s', $accountType)); + app('log')->debug(sprintf('YES, we can create a %s', $accountType)); return true; } } - Log::debug('NO, we cant create any of those.'); + app('log')->debug('NO, we cant create any of those.'); return false; } - /** - * @param string $accountType - * - * @return bool - */ protected function canCreateType(string $accountType): bool { $canCreate = [AccountType::EXPENSE, AccountType::REVENUE, AccountType::INITIAL_BALANCE, AccountType::LIABILITY_CREDIT]; @@ -265,15 +247,15 @@ class AccountValidator } /** - * @param array $validTypes - * @param array $data - * @param bool $inverse + * It's a long and fairly complex method, but I don't mind. * - * @return Account|null + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @SuppressWarnings(PHPMD.BooleanArgumentFlag) + * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function findExistingAccount(array $validTypes, array $data, bool $inverse = false): ?Account { - Log::debug('Now in findExistingAccount', $data); + app('log')->debug('Now in findExistingAccount', $data); app('log')->debug('The search will be reversed!'); $accountId = array_key_exists('id', $data) ? $data['id'] : null; $accountIban = array_key_exists('iban', $data) ? $data['iban'] : null; @@ -288,6 +270,7 @@ class AccountValidator $check = $inverse ? !$check : $check; // reverse the validation check if necessary. if ((null !== $first) && $check) { app('log')->debug(sprintf('ID: Found %s account #%d ("%s", IBAN "%s")', $first->accountType->type, $first->id, $first->name, $first->iban ?? 'no iban')); + return $first; } } @@ -300,6 +283,7 @@ class AccountValidator $check = $inverse ? !$check : $check; // reverse the validation check if necessary. if ((null !== $first) && $check) { app('log')->debug(sprintf('Iban: Found %s account #%d ("%s", IBAN "%s")', $first->accountType->type, $first->id, $first->name, $first->iban ?? 'no iban')); + return $first; } } @@ -312,6 +296,7 @@ class AccountValidator $check = $inverse ? !$check : $check; // reverse the validation check if necessary. if ((null !== $first) && $check) { app('log')->debug(sprintf('Number: Found %s account #%d ("%s", IBAN "%s")', $first->accountType->type, $first->id, $first->name, $first->iban ?? 'no iban')); + return $first; } } @@ -321,6 +306,7 @@ class AccountValidator $first = $this->getRepository()->findByName($accountName, $validTypes); if (null !== $first) { app('log')->debug(sprintf('Name: Found %s account #%d ("%s", IBAN "%s")', $first->accountType->type, $first->id, $first->name, $first->iban ?? 'no iban')); + return $first; } } @@ -329,10 +315,7 @@ class AccountValidator return null; } - /** - * @return AccountRepositoryInterface|UserGroupAccountRepositoryInterface - */ - private function getRepository(): AccountRepositoryInterface | UserGroupAccountRepositoryInterface + private function getRepository(): AccountRepositoryInterface|UserGroupAccountRepositoryInterface { if ($this->useUserGroupRepository) { return $this->userGroupAccountRepository; diff --git a/app/Validation/Administration/ValidatesAdministrationAccess.php b/app/Validation/Administration/ValidatesAdministrationAccess.php deleted file mode 100644 index ecd88233ec..0000000000 --- a/app/Validation/Administration/ValidatesAdministrationAccess.php +++ /dev/null @@ -1,107 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace FireflyIII\Validation\Administration; - -use FireflyIII\Enums\UserRoleEnum; -use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Repositories\User\UserRepositoryInterface; -use FireflyIII\User; -use Illuminate\Auth\AuthenticationException; -use Illuminate\Support\Facades\Log; -use Illuminate\Validation\Validator; - -/** - * @deprecated - * Trait ValidatesAdministrationAccess - */ -trait ValidatesAdministrationAccess -{ - /** - * @param Validator $validator - * @param array $allowedRoles - * - * @return void - * @throws AuthenticationException - * @throws FireflyException - * @deprecated - */ - protected function validateAdministration(Validator $validator, array $allowedRoles): void - { - throw new FireflyException('deprecated method, must be done through user.'); - Log::debug('Now in validateAdministration()'); - if (!auth()->check()) { - Log::error('User is not authenticated.'); - throw new AuthenticationException('No access to validateAdministration() method.'); - } - /** @var User $user */ - $user = auth()->user(); - // get data from request: - $data = $validator->getData(); - // check if user is part of this administration - $administrationId = (int)($data['administration_id'] ?? $user->getAdministrationId()); - // safety catch: - if (0 === $administrationId) { - Log::error('validateAdministration ran into empty administration ID.'); - throw new AuthenticationException('Cannot validate administration.'); - } - // grab the group: - $repository = app(UserRepositoryInterface::class); - - // collect the user's roles in this group: - $array = $repository->getRolesInGroup($user, $administrationId); - if (0 === count($array)) { - Log::error(sprintf('User #%d ("%s") has no membership in group #%d.', $user->id, $user->email, $administrationId)); - $validator->errors()->add('administration', (string)trans('validation.no_access_user_group')); - return; - } - if (in_array(UserRoleEnum::OWNER->value, $array, true)) { - Log::debug('User is owner of this administration.'); - return; - } - if (in_array(UserRoleEnum::OWNER->value, $array, true)) { - Log::debug('User has full access to this administration.'); - return; - } - $access = true; - foreach ($allowedRoles as $allowedRole) { - if (!in_array($allowedRole, $array, true)) { - $access = false; - } - } - if (false === $access) { - Log::error( - sprintf( - 'User #%d has memberships [%s] to group #%d but needs [%s].', - $user->id, - join(', ', $array), - $administrationId, - join(', ', $allowedRoles) - ) - ); - $validator->errors()->add('administration', (string)trans('validation.no_access_user_group')); - } - } -} diff --git a/app/Validation/Api/Data/Bulk/ValidatesBulkTransactionQuery.php b/app/Validation/Api/Data/Bulk/ValidatesBulkTransactionQuery.php index 4e1637fca7..6494d4d05a 100644 --- a/app/Validation/Api/Data/Bulk/ValidatesBulkTransactionQuery.php +++ b/app/Validation/Api/Data/Bulk/ValidatesBulkTransactionQuery.php @@ -26,18 +26,9 @@ namespace FireflyIII\Validation\Api\Data\Bulk; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use Illuminate\Validation\Validator; -use JsonException; -/** - * - */ trait ValidatesBulkTransactionQuery { - /** - * @param Validator $validator - * - * @throws JsonException - */ protected function validateTransactionQuery(Validator $validator): void { $data = $validator->getData(); @@ -49,9 +40,9 @@ trait ValidatesBulkTransactionQuery ) { // find both accounts, must be same type. // already validated: belongs to this user. - $repository = app(AccountRepositoryInterface::class); - $source = $repository->find((int)$json['where']['account_id']); - $dest = $repository->find((int)$json['update']['account_id']); + $repository = app(AccountRepositoryInterface::class); + $source = $repository->find((int)$json['where']['account_id']); + $dest = $repository->find((int)$json['update']['account_id']); if (null === $source) { $validator->errors()->add('query', sprintf((string)trans('validation.invalid_query_data'), 'where', 'account_id')); @@ -73,8 +64,8 @@ trait ValidatesBulkTransactionQuery $sourceCurrency = $repository->getAccountCurrency($source); $destCurrency = $repository->getAccountCurrency($dest); if ( - $sourceCurrency !== null - && $destCurrency !== null + null !== $sourceCurrency + && null !== $destCurrency && $sourceCurrency->id !== $destCurrency->id ) { $validator->errors()->add('query', (string)trans('validation.invalid_query_currency')); diff --git a/app/Validation/AutoBudget/ValidatesAutoBudgetRequest.php b/app/Validation/AutoBudget/ValidatesAutoBudgetRequest.php index e641f9a406..2c994fb960 100644 --- a/app/Validation/AutoBudget/ValidatesAutoBudgetRequest.php +++ b/app/Validation/AutoBudget/ValidatesAutoBudgetRequest.php @@ -31,12 +31,14 @@ use Illuminate\Validation\Validator; trait ValidatesAutoBudgetRequest { /** - * @param Validator $validator + * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function validateAutoBudgetAmount(Validator $validator): void { $data = $validator->getData(); $type = $data['auto_budget_type'] ?? ''; + + /** @var null|float|int|string $amount */ $amount = array_key_exists('auto_budget_amount', $data) ? $data['auto_budget_amount'] : null; $period = array_key_exists('auto_budget_period', $data) ? $data['auto_budget_period'] : null; $currencyId = array_key_exists('auto_budget_currency_id', $data) ? (int)$data['auto_budget_currency_id'] : null; @@ -47,6 +49,11 @@ trait ValidatesAutoBudgetRequest if ('' === $type || 0 === $type) { return; } + // TODO lots of duplicates with number validator. + // TODO should be present at more places, stop scientific notification + if (str_contains(strtoupper((string)$amount), 'E')) { + $amount = ''; + } // basic float check: if (!is_numeric($amount)) { $validator->errors()->add('auto_budget_amount', (string)trans('validation.amount_required_for_auto_budget')); @@ -54,9 +61,6 @@ trait ValidatesAutoBudgetRequest return; } - if ('' === $amount) { - $validator->errors()->add('auto_budget_amount', (string)trans('validation.amount_required_for_auto_budget')); - } if (1 !== bccomp((string)$amount, '0')) { $validator->errors()->add('auto_budget_amount', (string)trans('validation.auto_budget_amount_positive')); } @@ -69,7 +73,6 @@ trait ValidatesAutoBudgetRequest // too big amount if ((int)$amount > 268435456) { $validator->errors()->add('auto_budget_amount', (string)trans('validation.amount_required_for_auto_budget')); - return; } } } diff --git a/app/Validation/CurrencyValidation.php b/app/Validation/CurrencyValidation.php index ea963a6ff8..c792b0a866 100644 --- a/app/Validation/CurrencyValidation.php +++ b/app/Validation/CurrencyValidation.php @@ -34,57 +34,62 @@ use Illuminate\Validation\Validator; */ trait CurrencyValidation { - public const TEST = 'Test'; + public const string TEST = 'Test'; /** * If the transactions contain foreign amounts, there must also be foreign currency information. - * - * @param Validator $validator */ protected function validateForeignCurrencyInformation(Validator $validator): void { if ($validator->errors()->count() > 0) { return; } - Log::debug('Now in validateForeignCurrencyInformation()'); + app('log')->debug('Now in validateForeignCurrencyInformation()'); $transactions = $this->getTransactionsArray($validator); foreach ($transactions as $index => $transaction) { if (!is_array($transaction)) { continue; } - // if foreign amount is present, then the currency must be as well. - if (array_key_exists('foreign_amount', $transaction) - && !(array_key_exists('foreign_currency_id', $transaction) - || array_key_exists( - 'foreign_currency_code', - $transaction - )) - && 0 !== bccomp('0', $transaction['foreign_amount']) - ) { - $validator->errors()->add( - 'transactions.' . $index . '.foreign_amount', - (string)trans('validation.require_currency_info') - ); + + if (!array_key_exists('foreign_amount', $transaction) && !array_key_exists('foreign_currency_id', $transaction) && !array_key_exists('foreign_currency_code', $transaction)) { + Log::debug('validateForeignCurrencyInformation: no foreign currency information present at all.'); + + continue; } - // if the currency is present, then the amount must be present as well. - if ((array_key_exists('foreign_currency_id', $transaction) || array_key_exists('foreign_currency_code', $transaction)) - && !array_key_exists( - 'foreign_amount', - $transaction - )) { - $validator->errors()->add( - 'transactions.' . $index . '.foreign_amount', - (string)trans('validation.require_currency_amount') - ); + $foreignAmount = (string)($transaction['foreign_amount'] ?? ''); + $foreignId = $transaction['foreign_currency_id'] ?? null; + $foreignCode = $transaction['foreign_currency_code'] ?? null; + if ('' === $foreignAmount) { + Log::debug('validateForeignCurrencyInformation: foreign amount is "".'); + if ( + (array_key_exists('foreign_currency_id', $transaction) || array_key_exists('foreign_currency_code', $transaction)) + && (null !== $foreignId || null !== $foreignCode) + ) { + $validator->errors()->add('transactions.'.$index.'.foreign_amount', (string)trans('validation.require_currency_amount')); + $validator->errors()->add('transactions.'.$index.'.foreign_currency_id', (string)trans('validation.require_currency_amount')); + $validator->errors()->add('transactions.'.$index.'.foreign_currency_code', (string)trans('validation.require_currency_amount')); + } + + continue; + } + + $compare = bccomp('0', $foreignAmount); + if (-1 === $compare) { + Log::debug('validateForeignCurrencyInformation: array contains foreign amount info.'); + if (!array_key_exists('foreign_currency_id', $transaction) && !array_key_exists('foreign_currency_code', $transaction)) { + Log::debug('validateForeignCurrencyInformation: array contains NO foreign currency info.'); + $validator->errors()->add('transactions.'.$index.'.foreign_amount', (string)trans('validation.require_currency_info')); + } + } + if (0 === $compare && ('' !== (string)$foreignId || '' !== (string)$foreignCode)) { + Log::debug('validateForeignCurrencyInformation: array contains foreign currency info, but zero amount.'); + $validator->errors()->add('transactions.'.$index.'.foreign_currency_id', (string)trans('validation.require_currency_amount')); + $validator->errors()->add('transactions.'.$index.'.foreign_currency_code', (string)trans('validation.require_currency_amount')); + $validator->errors()->add('transactions.'.$index.'.foreign_amount', (string)trans('validation.require_currency_amount')); } } } - /** - * @param Validator $validator - * - * @return array - */ abstract protected function getTransactionsArray(Validator $validator): array; } diff --git a/app/Validation/FireflyValidator.php b/app/Validation/FireflyValidator.php index 02e6b4ef5f..891fcc6163 100644 --- a/app/Validation/FireflyValidator.php +++ b/app/Validation/FireflyValidator.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Validation; -use Config; -use DB; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Models\AccountMeta; @@ -36,22 +34,16 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Services\Password\Verifier; -use FireflyIII\Support\Facades\Preferences; use FireflyIII\Support\ParseDateString; -use FireflyIII\TransactionRules\Triggers\TriggerInterface; use FireflyIII\User; -use Google2FA; -use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; use PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException; use PragmaRX\Google2FA\Exceptions\InvalidCharactersException; use PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException; -use ValueError; - -use function is_string; /** * Class FireflyValidator. + * TODO all of these validations must become separate classes. */ class FireflyValidator extends Validator { @@ -59,25 +51,30 @@ class FireflyValidator extends Validator * @param mixed $attribute * @param mixed $value * - * @return bool * @throws IncompatibleWithGoogleAuthenticatorException * @throws InvalidCharactersException * @throws SecretKeyTooShortException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validate2faCode($attribute, $value): bool { if (!is_string($value) || 6 !== strlen($value)) { return false; } - $user = auth()->user(); + $user = auth()->user(); if (null === $user) { - Log::error('No user during validate2faCode'); + app('log')->error('No user during validate2faCode'); + return false; } - $secretPreference = Preferences::get('temp-mfa-secret'); + $secretPreference = app('preferences')->get('temp-mfa-secret'); $secret = $secretPreference?->data ?? ''; + if (is_array($secret)) { + $secret = ''; + } - return Google2FA::verifyKey($secret, $value); + return (bool)\Google2FA::verifyKey((string)$secret, $value); } /** @@ -85,7 +82,7 @@ class FireflyValidator extends Validator * @param mixed $value * @param mixed $parameters * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateBelongsToUser($attribute, $value, $parameters): bool { @@ -94,7 +91,7 @@ class FireflyValidator extends Validator if (0 === (int)$value) { return true; } - $count = DB::table($parameters[0])->where('user_id', auth()->user()->id)->where($field, $value)->count(); + $count = \DB::table($parameters[0])->where('user_id', auth()->user()->id)->where($field, $value)->count(); return 1 === $count; } @@ -103,16 +100,13 @@ class FireflyValidator extends Validator * @param mixed $attribute * @param mixed $value * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateBic($attribute, $value): bool { $regex = '/^[a-z]{6}[0-9a-z]{2}([0-9a-z]{3})?\z/i'; $result = preg_match($regex, $value); - if (false === $result) { - return false; - } - if (0 === $result) { + if (false === $result || 0 === $result) { return false; } @@ -120,10 +114,8 @@ class FireflyValidator extends Validator } /** - * @param mixed $attribute - * @param mixed $value - * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function validateIban(mixed $attribute, mixed $value): bool { @@ -186,52 +178,25 @@ class FireflyValidator extends Validator $value = strtoupper($value); // replace characters outside of ASCI range. - $value = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $value); + $value = (string)iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $value); $search = [' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; - $replace = [ - '', - '10', - '11', - '12', - '13', - '14', - '15', - '16', - '17', - '18', - '19', - '20', - '21', - '22', - '23', - '24', - '25', - '26', - '27', - '28', - '29', - '30', - '31', - '32', - '33', - '34', - '35', - ]; + $replace = ['', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35']; // take - $first = substr($value, 0, 4); - $last = substr($value, 4); - $iban = $last . $first; - $iban = trim(str_replace($search, $replace, $iban)); - if (0 === strlen($iban)) { + $first = substr($value, 0, 4); + $last = substr($value, 4); + $iban = $last.$first; + $iban = trim(str_replace($search, $replace, $iban)); + if ('' === $iban) { return false; } + try { $checksum = bcmod($iban, '97'); - } catch (ValueError $e) { + } catch (\ValueError $e) { // @phpstan-ignore-line $message = sprintf('Could not validate IBAN check value "%s" (IBAN "%s")', $iban, $value); - Log::error($message); - Log::error($e->getTraceAsString()); + app('log')->error($message); + app('log')->error($e->getTraceAsString()); return false; } @@ -244,7 +209,7 @@ class FireflyValidator extends Validator * @param mixed $value * @param mixed $parameters * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateLess($attribute, $value, $parameters): bool { @@ -259,7 +224,7 @@ class FireflyValidator extends Validator * @param mixed $value * @param mixed $parameters * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateMore($attribute, $value, $parameters): bool { @@ -274,7 +239,7 @@ class FireflyValidator extends Validator * @param mixed $value * @param mixed $parameters * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateMustExist($attribute, $value, $parameters): bool { @@ -283,24 +248,17 @@ class FireflyValidator extends Validator if (0 === (int)$value) { return true; } - $count = DB::table($parameters[0])->where($field, $value)->count(); + $count = \DB::table($parameters[0])->where($field, $value)->count(); return 1 === $count; } - /** - * @param string $attribute - * - * @param string|null $value - * - * @return bool - */ public function validateRuleActionValue(string $attribute, string $value = null): bool { // first, get the index from this string: - $value = $value ?? ''; - $parts = explode('.', $attribute); - $index = (int)($parts[1] ?? '0'); + $value ??= ''; + $parts = explode('.', $attribute); + $index = (int)($parts[1] ?? '0'); // get the name of the trigger from the data array: $actionType = $this->data['actions'][$index]['type'] ?? 'invalid'; @@ -360,17 +318,12 @@ class FireflyValidator extends Validator /** * $attribute has the format triggers.%d.value. - * - * @param string $attribute - * @param string|null $value - * - * @return bool */ public function validateRuleTriggerValue(string $attribute, string $value = null): bool { // first, get the index from this string: - $parts = explode('.', $attribute); - $index = (int)($parts[1] ?? '0'); + $parts = explode('.', $attribute); + $index = (int)($parts[1] ?? '0'); // get the name of the trigger from the data array: $triggerType = $this->data['triggers'][$index]['type'] ?? 'invalid'; @@ -381,13 +334,29 @@ class FireflyValidator extends Validator } // these trigger types need a numerical check: - $numerical = ['amount_less', 'amount_more', 'amount_exactly']; + $numerical = ['amount_less', 'amount_more', 'amount_exactly']; if (in_array($triggerType, $numerical, true)) { return is_numeric($value); } + // these triggers need just the word "true": + // TODO create a helper to automatically return these. + $needTrue = [ + 'reconciled', 'has_attachments', 'has_any_category', 'has_any_budget', 'has_any_bill', 'has_any_tag', 'any_notes', 'any_external_url', 'has_no_attachments', 'has_no_category', 'has_no_budget', 'has_no_bill', 'has_no_tag', 'no_notes', 'no_external_url', + 'source_is_cash', + 'destination_is_cash', + 'account_is_cash', + 'exists', + 'no_external_id', + 'any_external_id', + ]; + if (in_array($triggerType, $needTrue, true)) { + return 'true' === $value; + } + // these trigger types need a simple strlen check: - $length = [ + // TODO create a helper to automatically return these. + $length = [ 'source_account_starts', 'source_account_ends', 'source_account_is', @@ -414,25 +383,29 @@ class FireflyValidator extends Validator } // check if it's an existing account. + // TODO create a helper to automatically return these. if (in_array($triggerType, ['destination_account_id', 'source_account_id'], true)) { return is_numeric($value) && (int)$value > 0; } // check transaction type. + // TODO create a helper to automatically return these. if ('transaction_type' === $triggerType) { $count = TransactionType::where('type', ucfirst($value))->count(); return 1 === $count; } - // if the type is date, the simply try to parse it and throw error when it's bad. + // if the type is date, then simply try to parse it and throw error when it's bad. + // TODO create a helper to automatically return these. if (in_array($triggerType, ['date_is', 'created_on', 'updated_on', 'date_before', 'date_after'], true)) { /** @var ParseDateString $parser */ $parser = app(ParseDateString::class); + try { $parser->parseDate($value); } catch (FireflyException $e) { - Log::error($e->getMessage()); + app('log')->error($e->getMessage()); return false; } @@ -445,7 +418,7 @@ class FireflyValidator extends Validator * @param mixed $attribute * @param mixed $value * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateSecurePassword($attribute, $value): bool { @@ -468,72 +441,70 @@ class FireflyValidator extends Validator * @param mixed $value * @param mixed $parameters * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateUniqueAccountForUser($attribute, $value, $parameters): bool { // because a user does not have to be logged in (tests and what-not). if (!auth()->check()) { - Log::debug('validateUniqueAccountForUser::anon'); + app('log')->debug('validateUniqueAccountForUser::anon'); + return $this->validateAccountAnonymously(); } if (array_key_exists('objectType', $this->data)) { - Log::debug('validateUniqueAccountForUser::typeString'); + app('log')->debug('validateUniqueAccountForUser::typeString'); + return $this->validateByAccountTypeString($value, $parameters, $this->data['objectType']); } if (array_key_exists('type', $this->data)) { - Log::debug('validateUniqueAccountForUser::typeString'); + app('log')->debug('validateUniqueAccountForUser::typeString'); + return $this->validateByAccountTypeString($value, $parameters, (string)$this->data['type']); } if (array_key_exists('account_type_id', $this->data)) { - Log::debug('validateUniqueAccountForUser::typeId'); + app('log')->debug('validateUniqueAccountForUser::typeId'); + return $this->validateByAccountTypeId($value, $parameters); } $parameterId = $parameters[0] ?? null; if (null !== $parameterId) { - Log::debug('validateUniqueAccountForUser::paramId'); + app('log')->debug('validateUniqueAccountForUser::paramId'); + return $this->validateByParameterId((int)$parameterId, $value); } if (array_key_exists('id', $this->data)) { - Log::debug('validateUniqueAccountForUser::accountId'); + app('log')->debug('validateUniqueAccountForUser::accountId'); + return $this->validateByAccountId($value); } // without type, just try to validate the name. - Log::debug('validateUniqueAccountForUser::accountName'); + app('log')->debug('validateUniqueAccountForUser::accountName'); + return $this->validateByAccountName($value); } - /** - * @return bool - */ private function validateAccountAnonymously(): bool { if (!array_key_exists('user_id', $this->data)) { return false; } - $user = User::find($this->data['user_id']); - $type = AccountType::find($this->data['account_type_id'])->first(); - $value = $this->data['name']; + /** @var User $user */ + $user = User::find($this->data['user_id']); + $type = AccountType::find($this->data['account_type_id'])->first(); + $value = $this->data['name']; - /** @var Account|null $result */ + /** @var null|Account $result */ $result = $user->accounts()->where('account_type_id', $type->id)->where('name', $value)->first(); return null === $result; } - /** - * @param string $value - * @param array $parameters - * @param string $type - * - * @return bool - */ private function validateByAccountTypeString(string $value, array $parameters, string $type): bool { - /** @var array|null $search */ - $search = Config::get('firefly.accountTypeByIdentifier.' . $type); + /** @var null|array $search */ + $search = \Config::get('firefly.accountTypeByIdentifier.'.$type); if (null === $search) { return false; @@ -542,81 +513,75 @@ class FireflyValidator extends Validator $accountTypes = AccountType::whereIn('type', $search)->get(); $ignore = (int)($parameters[0] ?? 0.0); $accountTypeIds = $accountTypes->pluck('id')->toArray(); - /** @var Account|null $result */ - $result = auth()->user()->accounts()->whereIn('account_type_id', $accountTypeIds)->where('id', '!=', $ignore) - ->where('name', $value) - ->first(); + + /** @var null|Account $result */ + $result = auth()->user()->accounts()->whereIn('account_type_id', $accountTypeIds)->where('id', '!=', $ignore) + ->where('name', $value) + ->first() + ; + return null === $result; } /** * @param mixed $value * @param mixed $parameters - * - * @return bool */ private function validateByAccountTypeId($value, $parameters): bool { $type = AccountType::find($this->data['account_type_id'])->first(); $ignore = (int)($parameters[0] ?? 0.0); - /** @var Account|null $result */ + /** @var null|Account $result */ $result = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore) - ->where('name', $value) - ->first(); + ->where('name', $value) + ->first() + ; return null === $result; } /** - * @param int $accountId * @param mixed $value - * - * @return bool */ private function validateByParameterId(int $accountId, $value): bool { /** @var Account $existingAccount */ $existingAccount = Account::find($accountId); - $type = $existingAccount->accountType; - $ignore = $existingAccount->id; + $type = $existingAccount->accountType; + $ignore = $existingAccount->id; - $entry = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore) - ->where('name', $value) - ->first(); + $entry = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore) + ->where('name', $value) + ->first() + ; return null === $entry; } /** * @param mixed $value - * - * @return bool */ private function validateByAccountId($value): bool { /** @var Account $existingAccount */ $existingAccount = Account::find($this->data['id']); - $type = $existingAccount->accountType; - $ignore = $existingAccount->id; + $type = $existingAccount->accountType; + $ignore = $existingAccount->id; - $entry = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore) - ->where('name', $value) - ->first(); + $entry = auth()->user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore) + ->where('name', $value) + ->first() + ; return null === $entry; } - /** - * @param string $value - * - * @return bool - */ private function validateByAccountName(string $value): bool { - return auth()->user()->accounts()->where('name', $value)->count() === 0; + return 0 === auth()->user()->accounts()->where('name', $value)->count(); } /** @@ -624,7 +589,7 @@ class FireflyValidator extends Validator * @param mixed $value * @param mixed $parameters * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateUniqueAccountNumberForUser($attribute, $value, $parameters): bool { @@ -633,18 +598,19 @@ class FireflyValidator extends Validator $accountId = (int)($parameters[0] ?? 0.0); } - $query = AccountMeta::leftJoin('accounts', 'accounts.id', '=', 'account_meta.account_id') - ->whereNull('accounts.deleted_at') - ->where('accounts.user_id', auth()->user()->id) - ->where('account_meta.name', 'account_number') - ->where('account_meta.data', json_encode($value)); + $query = AccountMeta::leftJoin('accounts', 'accounts.id', '=', 'account_meta.account_id') + ->whereNull('accounts.deleted_at') + ->where('accounts.user_id', auth()->user()->id) + ->where('account_meta.name', 'account_number') + ->where('account_meta.data', json_encode($value)) + ; if ($accountId > 0) { // exclude current account from check. $query->where('account_meta.account_id', '!=', $accountId); } - $set = $query->get(['account_meta.*']); - $count = $set->count(); + $set = $query->get(['account_meta.*']); + $count = $set->count(); if (0 === $count) { return true; } @@ -652,67 +618,52 @@ class FireflyValidator extends Validator // pretty much impossible but still. return false; } - $type = $this->data['objectType'] ?? 'unknown'; + $type = $this->data['objectType'] ?? 'unknown'; if ('expense' !== $type && 'revenue' !== $type) { app('log')->warning(sprintf('Account number "%s" is not unique and account type "%s" cannot share its account number.', $value, $type)); + return false; } - Log::debug(sprintf('Account number "%s" is not unique but account type "%s" may share its account number.', $value, $type)); + app('log')->debug(sprintf('Account number "%s" is not unique but account type "%s" may share its account number.', $value, $type)); + // one other account with this account number. /** @var AccountMeta $entry */ foreach ($set as $entry) { $otherAccount = $entry->account; $otherType = (string)config(sprintf('firefly.shortNamesByFullName.%s', $otherAccount->accountType->type)); if (('expense' === $otherType || 'revenue' === $otherType) && $otherType !== $type) { - Log::debug(sprintf('The other account with this account number is a "%s" so return true.', $otherType)); + app('log')->debug(sprintf('The other account with this account number is a "%s" so return true.', $otherType)); + return true; } - Log::debug(sprintf('The other account with this account number is a "%s" so return false.', $otherType)); + app('log')->debug(sprintf('The other account with this account number is a "%s" so return false.', $otherType)); } + return false; } /** - * @param $attribute - * @param $value - * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function validateUniqueCurrencyCode($attribute, $value): bool + public function validateUniqueCurrencyCode(?string $attribute, ?string $value): bool { return $this->validateUniqueCurrency('code', (string)$attribute, (string)$value); } /** - * @param string $field - * @param string $attribute - * @param string $value - * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateUniqueCurrency(string $field, string $attribute, string $value): bool { - return 0 === DB::table('transaction_currencies')->where($field, $value)->whereNull('deleted_at')->count(); + return 0 === \DB::table('transaction_currencies')->where($field, $value)->whereNull('deleted_at')->count(); } - /** - * @param $attribute - * @param $value - * - * @return bool - */ - public function validateUniqueCurrencyName($attribute, $value): bool + public function validateUniqueCurrencyName(?string $attribute, ?string $value): bool { return $this->validateUniqueCurrency('name', (string)$attribute, (string)$value); } - /** - * @param $attribute - * @param $value - * - * @return bool - */ - public function validateUniqueCurrencySymbol($attribute, $value): bool + public function validateUniqueCurrencySymbol(?string $attribute, ?string $value): bool { return $this->validateUniqueCurrency('symbol', (string)$attribute, (string)$value); } @@ -722,7 +673,7 @@ class FireflyValidator extends Validator * @param mixed $parameters * @param mixed $something * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateUniqueExistingWebhook($value, $parameters, $something): bool { @@ -736,8 +687,8 @@ class FireflyValidator extends Validator if (auth()->check()) { // get existing webhook value: if (0 !== $existingId) { - /** @var Webhook|null $webhook */ - $webhook = auth()->user()->webhooks()->find($existingId); + /** @var null|Webhook $webhook */ + $webhook = auth()->user()->webhooks()->find($existingId); if (null === $webhook) { return false; } @@ -755,18 +706,18 @@ class FireflyValidator extends Validator $userId = auth()->user()->id; return 0 === Webhook::whereUserId($userId) - ->where('trigger', $trigger) - ->where('response', $response) - ->where('delivery', $delivery) - ->where('id', '!=', $existingId) - ->where('url', $url)->count(); + ->where('trigger', $trigger) + ->where('response', $response) + ->where('delivery', $delivery) + ->where('id', '!=', $existingId) + ->where('url', $url)->count() + ; } return false; } /** - * * Validate an object and its uniqueness. Checks for encryption / encrypted values as well. * * parameter 0: the table @@ -777,29 +728,31 @@ class FireflyValidator extends Validator * @param mixed $value * @param mixed $parameters * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateUniqueObjectForUser($attribute, $value, $parameters): bool { [$table, $field] = $parameters; - $exclude = (int)($parameters[2] ?? 0.0); + $exclude = (int)($parameters[2] ?? 0.0); /* * If other data (in $this->getData()) contains * ID field, set that field to be the $exclude. */ - $data = $this->getData(); + $data = $this->getData(); if (!array_key_exists(2, $parameters) && array_key_exists('id', $data) && (int)$data['id'] > 0) { $exclude = (int)$data['id']; } // get entries from table - $result = DB::table($table)->where('user_id', auth()->user()->id)->whereNull('deleted_at') - ->where('id', '!=', $exclude) - ->where($field, $value) - ->first([$field]); + $result = \DB::table($table)->where('user_id', auth()->user()->id)->whereNull('deleted_at') + ->where('id', '!=', $exclude) + ->where($field, $value) + ->first([$field]) + ; if (null === $result) { return true; // not found, so true. } + // found, so not unique. return false; } @@ -809,15 +762,16 @@ class FireflyValidator extends Validator * @param mixed $value * @param mixed $parameters * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateUniqueObjectGroup($attribute, $value, $parameters): bool { $exclude = $parameters[0] ?? null; - $query = DB::table('object_groups') - ->whereNull('object_groups.deleted_at') - ->where('object_groups.user_id', auth()->user()->id) - ->where('object_groups.title', $value); + $query = \DB::table('object_groups') + ->whereNull('object_groups.deleted_at') + ->where('object_groups.user_id', auth()->user()->id) + ->where('object_groups.title', $value) + ; if (null !== $exclude) { $query->where('object_groups.id', '!=', (int)$exclude); } @@ -830,13 +784,14 @@ class FireflyValidator extends Validator * @param mixed $value * @param mixed $parameters * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateUniquePiggyBankForUser($attribute, $value, $parameters): bool { $exclude = $parameters[0] ?? null; - $query = DB::table('piggy_banks')->whereNull('piggy_banks.deleted_at') - ->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')->where('accounts.user_id', auth()->user()->id); + $query = \DB::table('piggy_banks')->whereNull('piggy_banks.deleted_at') + ->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')->where('accounts.user_id', auth()->user()->id) + ; if (null !== $exclude) { $query->where('piggy_banks.id', '!=', (int)$exclude); } @@ -849,7 +804,7 @@ class FireflyValidator extends Validator * @param mixed $value * @param mixed $parameters * - * @return bool + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validateUniqueWebhook($value, $parameters): bool { @@ -859,17 +814,18 @@ class FireflyValidator extends Validator $deliveries = Webhook::getDeliveriesForValidation(); // integers - $trigger = $triggers[$this->data['trigger']] ?? 0; - $response = $responses[$this->data['response']] ?? 0; - $delivery = $deliveries[$this->data['delivery']] ?? 0; - $url = $this->data['url']; - $userId = auth()->user()->id; + $trigger = $triggers[$this->data['trigger']] ?? 0; + $response = $responses[$this->data['response']] ?? 0; + $delivery = $deliveries[$this->data['delivery']] ?? 0; + $url = $this->data['url']; + $userId = auth()->user()->id; return 0 === Webhook::whereUserId($userId) - ->where('trigger', $trigger) - ->where('response', $response) - ->where('delivery', $delivery) - ->where('url', $url)->count(); + ->where('trigger', $trigger) + ->where('response', $response) + ->where('delivery', $delivery) + ->where('url', $url)->count() + ; } return false; diff --git a/app/Validation/GroupValidation.php b/app/Validation/GroupValidation.php index df704c4658..c79fbc6539 100644 --- a/app/Validation/GroupValidation.php +++ b/app/Validation/GroupValidation.php @@ -25,8 +25,8 @@ declare(strict_types=1); namespace FireflyIII\Validation; use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionGroup; -use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -37,7 +37,10 @@ use Illuminate\Validation\Validator; trait GroupValidation { /** - * @param Validator $validator + * A catch when users submit splits with no source or destination info at all. + * + * TODO This should prevent errors down the road but I'm not yet sure what I'm validating here + * TODO so I disabled this on 2023-10-22 to see if it causes any issues. * * @throws FireflyException */ @@ -54,7 +57,8 @@ trait GroupValidation 'source_number', 'destination_number', ]; - /** @var array $transaction */ + + /** @var null|array $transaction */ foreach ($transactions as $index => $transaction) { if (!is_array($transaction)) { throw new FireflyException('Invalid data submitted: transaction is not array.'); @@ -81,30 +85,56 @@ trait GroupValidation // only an issue if there is no transaction_journal_id } - /** - * @param Validator $validator - * - * @return array - */ abstract protected function getTransactionsArray(Validator $validator): array; + protected function preventUpdateReconciled(Validator $validator, TransactionGroup $transactionGroup): void + { + app('log')->debug(sprintf('Now in %s', __METHOD__)); + + $count = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', 'transactions.transaction_journal_id') + ->leftJoin('transaction_groups', 'transaction_groups.id', 'transaction_journals.transaction_group_id') + ->where('transaction_journals.transaction_group_id', $transactionGroup->id) + ->where('transactions.reconciled', 1)->where('transactions.amount', '<', 0)->count('transactions.id') + ; + if (0 === $count) { + app('log')->debug(sprintf('Transaction is not reconciled, done with %s', __METHOD__)); + + return; + } + $data = $validator->getData(); + $forbidden = ['amount', 'foreign_amount', 'currency_code', 'currency_id', 'foreign_currency_code', 'foreign_currency_id', + 'source_id', 'source_name', 'source_number', 'source_iban', + 'destination_id', 'destination_name', 'destination_number', 'destination_iban', + ]; + foreach ($data['transactions'] as $index => $row) { + foreach ($forbidden as $key) { + if (array_key_exists($key, $row)) { + $validator->errors()->add( + sprintf('transactions.%d.%s', $index, $key), + (string)trans('validation.reconciled_forbidden_field', ['field' => $key]) + ); + } + } + } + + app('log')->debug(sprintf('Done with %s', __METHOD__)); + } + /** * Adds an error to the "description" field when the user has submitted no descriptions and no * journal description. - * - * @param Validator $validator */ protected function validateDescriptions(Validator $validator): void { if ($validator->errors()->count() > 0) { return; } - Log::debug('Now in GroupValidation::validateDescriptions()'); + app('log')->debug('Now in GroupValidation::validateDescriptions()'); $transactions = $this->getTransactionsArray($validator); $validDescriptions = 0; foreach ($transactions as $transaction) { if ('' !== (string)($transaction['description'] ?? null)) { - $validDescriptions++; + ++$validDescriptions; } } @@ -117,19 +147,16 @@ trait GroupValidation } } - /** - * @param Validator $validator - */ protected function validateGroupDescription(Validator $validator): void { if ($validator->errors()->count() > 0) { return; } - Log::debug('Now in validateGroupDescription()'); + app('log')->debug('Now in validateGroupDescription()'); $data = $validator->getData(); $transactions = $this->getTransactionsArray($validator); - $groupTitle = $data['group_title'] ?? ''; + $groupTitle = $data['group_title'] ?? ''; if ('' === $groupTitle && count($transactions) > 1) { $validator->errors()->add('group_title', (string)trans('validation.group_title_mandatory')); } @@ -139,21 +166,19 @@ trait GroupValidation * This method validates if the user has submitted transaction journal ID's for each array they submit, if they've * submitted more than 1 transaction journal. This check is necessary because Firefly III isn't able to distinguish * between journals without the ID. - * - * @param Validator $validator - * @param TransactionGroup $transactionGroup */ protected function validateJournalIds(Validator $validator, TransactionGroup $transactionGroup): void { - Log::debug(sprintf('Now in GroupValidation::validateJournalIds(%d)', $transactionGroup->id)); + app('log')->debug(sprintf('Now in GroupValidation::validateJournalIds(%d)', $transactionGroup->id)); $transactions = $this->getTransactionsArray($validator); if (count($transactions) < 2) { // no need for validation. - Log::debug(sprintf('%d transaction(s) in submission, can skip this check.', count($transactions))); + app('log')->debug(sprintf('%d transaction(s) in submission, can skip this check.', count($transactions))); return; } + // check each array: /** * @var int $index @@ -166,12 +191,6 @@ trait GroupValidation /** * Do the validation required by validateJournalIds. - * - * @param Validator $validator - * @param int $index - * @param array $transaction - * @param TransactionGroup $transactionGroup - * */ private function validateJournalId(Validator $validator, int $index, array $transaction, TransactionGroup $transactionGroup): void { @@ -179,15 +198,15 @@ trait GroupValidation if (array_key_exists('transaction_journal_id', $transaction)) { $journalId = $transaction['transaction_journal_id']; } - Log::debug(sprintf('Now in validateJournalId(%d, %d)', $index, $journalId)); + app('log')->debug(sprintf('Now in validateJournalId(%d, %d)', $index, $journalId)); if (0 === $journalId || '' === $journalId || '0' === $journalId) { - Log::debug('Submitted 0, will accept to be used in a new transaction.'); + app('log')->debug('Submitted 0, will accept to be used in a new transaction.'); return; } $journalId = (int)$journalId; $count = $transactionGroup->transactionJournals()->where('transaction_journals.id', $journalId)->count(); - if (null === $journalId || 0 === $count) { + if (0 === $journalId || 0 === $count) { app('log')->warning(sprintf('Transaction group #%d has %d journals with ID %d', $transactionGroup->id, $count, $journalId)); app('log')->warning('Invalid submission: Each split must have transaction_journal_id (either valid ID or 0).'); $validator->errors()->add(sprintf('transactions.%d.source_name', $index), (string)trans('validation.need_id_in_edit')); diff --git a/app/Validation/RecurrenceValidation.php b/app/Validation/RecurrenceValidation.php index 6dabcbf60d..f2ae1aa188 100644 --- a/app/Validation/RecurrenceValidation.php +++ b/app/Validation/RecurrenceValidation.php @@ -26,15 +26,12 @@ namespace FireflyIII\Validation; use Carbon\Carbon; use FireflyIII\Models\Recurrence; use FireflyIII\Models\RecurrenceTransaction; -use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; -use InvalidArgumentException; /** * Trait RecurrenceValidation * * Contains advanced validation rules used in validation of new and existing recurrences. - * */ trait RecurrenceValidation { @@ -42,28 +39,28 @@ trait RecurrenceValidation * Validate account information input for recurrences which are being updated. * * TODO Must always trigger when the type of the recurrence changes. - * - * @param Validator $validator */ public function valUpdateAccountInfo(Validator $validator): void { - $data = $validator->getData(); + $data = $validator->getData(); - $transactionType = $data['type'] ?? 'invalid'; + $transactionType = $data['type'] ?? 'invalid'; // grab model from parameter and try to set the transaction type from it if ('invalid' === $transactionType) { - Log::debug('Type is invalid but we will search for it.'); - /** @var Recurrence $recurrence */ - $recurrence = $this->route()->parameter('recurrence'); + app('log')->debug('Type is invalid but we will search for it.'); + + /** @var null|Recurrence $recurrence */ + $recurrence = $this->route()?->parameter('recurrence'); if (null !== $recurrence) { - Log::debug('There is a recurrence in the route.'); + app('log')->debug('There is a recurrence in the route.'); + // ok so we have a recurrence should be able to extract type somehow. - /** @var RecurrenceTransaction|null $first */ + /** @var null|RecurrenceTransaction $first */ $first = $recurrence->recurrenceTransactions()->first(); if (null !== $first) { - $transactionType = $first->transactionType ? $first->transactionType->type : 'withdrawal'; - Log::debug(sprintf('Determined type to be %s.', $transactionType)); + $transactionType = null !== $first->transactionType ? $first->transactionType->type : 'withdrawal'; + app('log')->debug(sprintf('Determined type to be %s.', $transactionType)); } if (null === $first) { app('log')->warning('Just going to assume type is a withdrawal.'); @@ -72,14 +69,14 @@ trait RecurrenceValidation } } - $transactions = $data['transactions'] ?? []; + $transactions = $data['transactions'] ?? []; /** @var AccountValidator $accountValidator */ $accountValidator = app(AccountValidator::class); - Log::debug(sprintf('Going to loop %d transaction(s)', count($transactions))); + app('log')->debug(sprintf('Going to loop %d transaction(s)', count($transactions))); foreach ($transactions as $index => $transaction) { - $transactionType = $transaction['type'] ?? $transactionType; + $transactionType = $transaction['type'] ?? $transactionType; $accountValidator->setTransactionType($transactionType); if ( @@ -91,9 +88,9 @@ trait RecurrenceValidation continue; } // validate source account. - $sourceId = array_key_exists('source_id', $transaction) ? (int)$transaction['source_id'] : null; - $sourceName = $transaction['source_name'] ?? null; - $validSource = $accountValidator->validateSource(['id' => $sourceId, 'name' => $sourceName]); + $sourceId = array_key_exists('source_id', $transaction) ? (int)$transaction['source_id'] : null; + $sourceName = $transaction['source_name'] ?? null; + $validSource = $accountValidator->validateSource(['id' => $sourceId, 'name' => $sourceName]); // do something with result: if (false === $validSource) { @@ -105,7 +102,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(['id' => $destinationId, 'name' => $destinationName,]); + $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); @@ -118,8 +115,6 @@ trait RecurrenceValidation /** * Adds an error to the validator when there are no repetitions in the array of data. - * - * @param Validator $validator */ public function validateOneRepetition(Validator $validator): void { @@ -133,8 +128,6 @@ trait RecurrenceValidation /** * Adds an error to the validator when there are no repetitions in the array of data. - * - * @param Validator $validator */ public function validateOneRepetitionUpdate(Validator $validator): void { @@ -152,8 +145,6 @@ trait RecurrenceValidation /** * Validates that the recurrence has valid repetition information. It either doesn't stop, * or stops after X times or at X date. Not both of them., - * - * @param Validator $validator */ public function validateRecurrenceRepetition(Validator $validator): void { @@ -167,12 +158,7 @@ trait RecurrenceValidation } } - /** - * @param Validator $validator - * - * @return void - */ - public function validateRecurringConfig(Validator $validator) + public function validateRecurringConfig(Validator $validator): void { $data = $validator->getData(); $reps = array_key_exists('nr_of_repetitions', $data) ? (int)$data['nr_of_repetitions'] : null; @@ -190,9 +176,6 @@ trait RecurrenceValidation } } - /** - * @param Validator $validator - */ public function validateRepetitionMoment(Validator $validator): void { $data = $validator->getData(); @@ -202,6 +185,7 @@ trait RecurrenceValidation return; } + /** * @var int $index * @var array $repetition @@ -213,27 +197,36 @@ trait RecurrenceValidation if (null === $repetition['moment']) { $repetition['moment'] = ''; } - $repetition['moment'] = $repetition['moment'] ?? 'invalid'; switch ($repetition['type'] ?? 'empty') { default: $validator->errors()->add(sprintf('repetitions.%d.type', $index), (string)trans('validation.valid_recurrence_rep_type')); return; + case 'daily': $this->validateDaily($validator, $index, (string)$repetition['moment']); + break; + case 'monthly': $this->validateMonthly($validator, $index, (int)$repetition['moment']); + break; + case 'ndom': $this->validateNdom($validator, $index, (string)$repetition['moment']); + break; + case 'weekly': $this->validateWeekly($validator, $index, (int)$repetition['moment']); + break; + case 'yearly': $this->validateYearly($validator, $index, (string)$repetition['moment']); + break; } } @@ -241,10 +234,6 @@ trait RecurrenceValidation /** * If the repetition type is daily, the moment should be empty. - * - * @param Validator $validator - * @param int $index - * @param string $moment */ protected function validateDaily(Validator $validator, int $index, string $moment): void { @@ -255,10 +244,6 @@ trait RecurrenceValidation /** * If the repetition type is monthly, the moment should be a day between 1-31 (inclusive). - * - * @param Validator $validator - * @param int $index - * @param int $dayOfMonth */ protected function validateMonthly(Validator $validator, int $index, int $dayOfMonth): void { @@ -270,10 +255,6 @@ trait RecurrenceValidation /** * If the repetition type is "ndom", the first part must be between 1-5 (inclusive), for the week in the month, * and the second one must be between 1-7 (inclusive) for the day of the week. - * - * @param Validator $validator - * @param int $index - * @param string $moment */ protected function validateNdom(Validator $validator, int $index, string $moment): void { @@ -283,8 +264,8 @@ trait RecurrenceValidation return; } - $nthDay = (int)($parameters[0] ?? 0.0); - $dayOfWeek = (int)($parameters[1] ?? 0.0); + $nthDay = (int)($parameters[0] ?? 0.0); + $dayOfWeek = (int)($parameters[1] ?? 0.0); if ($nthDay < 1 || $nthDay > 5) { $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string)trans('validation.valid_recurrence_rep_moment')); @@ -297,10 +278,6 @@ trait RecurrenceValidation /** * If the repetition type is weekly, the moment should be a day between 1-7 (inclusive). - * - * @param Validator $validator - * @param int $index - * @param int $dayOfWeek */ protected function validateWeekly(Validator $validator, int $index, int $dayOfWeek): void { @@ -311,72 +288,64 @@ trait RecurrenceValidation /** * If the repetition type is yearly, the moment should be a valid date. - * - * @param Validator $validator - * @param int $index - * @param string $moment */ protected function validateYearly(Validator $validator, int $index, string $moment): void { try { Carbon::createFromFormat('Y-m-d', $moment); - } catch (InvalidArgumentException $e) { - Log::debug(sprintf('Invalid argument for Carbon: %s', $e->getMessage())); + } catch (\InvalidArgumentException $e) { // @phpstan-ignore-line + app('log')->debug(sprintf('Invalid argument for Carbon: %s', $e->getMessage())); $validator->errors()->add(sprintf('repetitions.%d.moment', $index), (string)trans('validation.valid_recurrence_rep_moment')); } } /** - * @param Recurrence $recurrence - * @param Validator $validator - * - * @return void + * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function validateTransactionId(Recurrence $recurrence, Validator $validator): void { - Log::debug('Now in validateTransactionId'); + app('log')->debug('Now in validateTransactionId'); $transactions = $this->getTransactionData(); $submittedTrCount = count($transactions); - //$recurrence = $validator->get - if (null === $transactions) { - Log::warning('[a] User submitted no transactions.'); - $validator->errors()->add('transactions', (string)trans('validation.at_least_one_transaction')); - return; - } if (0 === $submittedTrCount) { - Log::warning('[b] User submitted no transactions.'); + app('log')->warning('[b] User submitted no transactions.'); $validator->errors()->add('transactions', (string)trans('validation.at_least_one_transaction')); + return; } - $originalTrCount = $recurrence->recurrenceTransactions()->count(); + $originalTrCount = $recurrence->recurrenceTransactions()->count(); if (1 === $submittedTrCount && 1 === $originalTrCount) { - $first = $transactions[0]; // can safely assume index 0. + $first = $transactions[0]; // can safely assume index 0. if (!array_key_exists('id', $first)) { - Log::debug('Single count and no ID, done.'); + app('log')->debug('Single count and no ID, done.'); + return; // home safe! } - $id = $first['id']; + $id = $first['id']; if ('' === (string)$id) { - Log::debug('Single count and empty ID, done.'); + app('log')->debug('Single count and empty ID, done.'); + return; // home safe! } $integer = (int)$id; $secondCount = $recurrence->recurrenceTransactions()->where('recurrences_transactions.id', $integer)->count(); - Log::debug(sprintf('Result of ID count: %d', $secondCount)); + app('log')->debug(sprintf('Result of ID count: %d', $secondCount)); if (0 === $secondCount) { $validator->errors()->add('transactions.0.id', (string)trans('validation.id_does_not_match', ['id' => $integer])); } - Log::debug('Single ID validation done.'); + app('log')->debug('Single ID validation done.'); + return; } - Log::debug('Multi ID validation.'); - $idsMandatory = false; + app('log')->debug('Multi ID validation.'); + $idsMandatory = false; if ($submittedTrCount < $originalTrCount) { - Log::debug(sprintf('User submits %d transaction, recurrence has %d transactions. All entries must have ID.', $submittedTrCount, $originalTrCount)); + app('log')->debug(sprintf('User submits %d transaction, recurrence has %d transactions. All entries must have ID.', $submittedTrCount, $originalTrCount)); $idsMandatory = true; } + /** * Loop all transactions submitted by the user. * If the user has submitted fewer transactions than the original recurrence has, all submitted entries must have an ID. @@ -388,41 +357,44 @@ trait RecurrenceValidation * 2. If the user submits more transactions than already present, count the number of existing transactions. At least those must be matched. After that, submit as many as you like. * 3. If the user submits the same number of transactions as already present, all but one must have an ID. */ - $unmatchedIds = 0; + $unmatchedIds = 0; foreach ($transactions as $index => $transaction) { - Log::debug(sprintf('Now at %d/%d', $index + 1, $submittedTrCount)); + app('log')->debug(sprintf('Now at %d/%d', $index + 1, $submittedTrCount)); if (!is_array($transaction)) { - Log::warning('Not an array. Give error.'); + app('log')->warning('Not an array. Give error.'); $validator->errors()->add(sprintf('transactions.%d.id', $index), (string)trans('validation.at_least_one_transaction')); + return; } if (!array_key_exists('id', $transaction) && $idsMandatory) { - Log::warning('ID is mandatory but array has no ID.'); + app('log')->warning('ID is mandatory but array has no ID.'); $validator->errors()->add(sprintf('transactions.%d.id', $index), (string)trans('validation.need_id_to_match')); + return; } if (array_key_exists('id', $transaction)) { // don't matter if $idsMandatory - Log::debug('Array has ID.'); + app('log')->debug('Array has ID.'); $idCount = $recurrence->recurrenceTransactions()->where('recurrences_transactions.id', (int)$transaction['id'])->count(); if (0 === $idCount) { - Log::debug('ID does not exist or no match. Count another unmatched ID.'); - $unmatchedIds++; + app('log')->debug('ID does not exist or no match. Count another unmatched ID.'); + ++$unmatchedIds; } } if (!array_key_exists('id', $transaction) && !$idsMandatory) { - Log::debug('Array has no ID but was not mandatory at this point.'); - $unmatchedIds++; + app('log')->debug('Array has no ID but was not mandatory at this point.'); + ++$unmatchedIds; } } // if too many don't match, but you haven't submitted more than already present: - $maxUnmatched = max(1, $submittedTrCount - $originalTrCount); - Log::debug(sprintf('Submitted: %d. Original: %d. User can submit %d unmatched transactions.', $submittedTrCount, $originalTrCount, $maxUnmatched)); + $maxUnmatched = max(1, $submittedTrCount - $originalTrCount); + app('log')->debug(sprintf('Submitted: %d. Original: %d. User can submit %d unmatched transactions.', $submittedTrCount, $originalTrCount, $maxUnmatched)); if ($unmatchedIds > $maxUnmatched) { - Log::warning(sprintf('Too many unmatched transactions (%d).', $unmatchedIds)); + app('log')->warning(sprintf('Too many unmatched transactions (%d).', $unmatchedIds)); $validator->errors()->add('transactions.0.id', (string)trans('validation.too_many_unmatched')); + return; } - Log::debug('Done with ID validation.'); + app('log')->debug('Done with ID validation.'); } } diff --git a/app/Validation/TransactionValidation.php b/app/Validation/TransactionValidation.php index e1850fa9df..63a2adace3 100644 --- a/app/Validation/TransactionValidation.php +++ b/app/Validation/TransactionValidation.php @@ -33,7 +33,6 @@ use FireflyIII\Models\TransactionType; use FireflyIII\Models\UserGroup; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\User; -use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** @@ -45,25 +44,22 @@ trait TransactionValidation * Validates the given account information. Switches on given transaction type. * * Inclusion of user and/or group is optional. - * - * @param Validator $validator - * @param User|null $user - * @param UserGroup|null $userGroup */ public function validateAccountInformation(Validator $validator, User $user = null, UserGroup $userGroup = null): void { if ($validator->errors()->count() > 0) { return; } - Log::debug('Now in validateAccountInformation (TransactionValidation) ()'); + app('log')->debug('Now in validateAccountInformation (TransactionValidation) ()'); $transactions = $this->getTransactionsArray($validator); $data = $validator->getData(); $transactionType = $data['type'] ?? 'invalid'; - Log::debug(sprintf('Going to loop %d transaction(s)', count($transactions))); + app('log')->debug(sprintf('Going to loop %d transaction(s)', count($transactions))); + /** - * @var int $index - * @var array $transaction + * @var null|int $index + * @var array $transaction */ foreach ($transactions as $index => $transaction) { $transaction['user'] = $user; @@ -75,44 +71,31 @@ trait TransactionValidation } } - /** - * @param Validator $validator - * - * @return array - */ protected function getTransactionsArray(Validator $validator): array { - Log::debug('Now in getTransactionsArray'); + app('log')->debug('Now in getTransactionsArray'); $data = $validator->getData(); $transactions = []; - if (is_array($data) && array_key_exists('transactions', $data) && is_array($data['transactions'])) { - Log::debug('Transactions key exists and is array.'); + if (array_key_exists('transactions', $data) && is_array($data['transactions'])) { + app('log')->debug('Transactions key exists and is array.'); $transactions = $data['transactions']; } - if (is_array($data) && array_key_exists('transactions', $data) && !is_array($data['transactions'])) { - Log::debug(sprintf('Transactions key exists but is NOT array, its a %s', gettype($data['transactions']))); + if (array_key_exists('transactions', $data) && !is_array($data['transactions'])) { + app('log')->debug(sprintf('Transactions key exists but is NOT array, its a %s', gettype($data['transactions']))); } - // should be impossible to hit this: - if (!is_countable($transactions)) { - Log::error(sprintf('Transactions array is not countable, because its a %s', gettype($transactions))); - return []; - } - //Log::debug('Returning transactions.', $transactions); return $transactions; } /** - * @param Validator $validator - * @param int $index - * @param string $transactionType - * @param array $transaction + * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function validateSingleAccount(Validator $validator, int $index, string $transactionType, array $transaction): void { app('log')->debug(sprintf('Now in validateSingleAccount(%d)', $index)); + /** @var AccountValidator $accountValidator */ - $accountValidator = app(AccountValidator::class); + $accountValidator = app(AccountValidator::class); if (array_key_exists('user', $transaction) && null !== $transaction['user']) { $accountValidator->setUser($transaction['user']); @@ -121,21 +104,21 @@ trait TransactionValidation $accountValidator->setUserGroup($transaction['user_group']); } - $transactionType = $transaction['type'] ?? $transactionType; + $transactionType = $transaction['type'] ?? $transactionType; $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; - $sourceNumber = array_key_exists('source_number', $transaction) ? (string)$transaction['source_number'] : null; - $source = [ + $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; + $source = [ 'id' => $sourceId, 'name' => $sourceName, 'iban' => $sourceIban, 'number' => $sourceNumber, ]; - $validSource = $accountValidator->validateSource($source); + $validSource = $accountValidator->validateSource($source); // do something with result: if (false === $validSource) { @@ -169,31 +152,25 @@ trait TransactionValidation } /** - * @param Validator $validator - * @param string $transactionType - * @param int $index - * @param array $source - * @param array $destination - * - * @return void + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ protected function sanityCheckReconciliation(Validator $validator, string $transactionType, int $index, array $source, array $destination): void { - Log::debug('Now in sanityCheckReconciliation'); - if (TransactionType::RECONCILIATION === ucfirst($transactionType) && - null === $source['id'] && null === $source['name'] && null === $destination['id'] && null === $destination['name'] + app('log')->debug('Now in sanityCheckReconciliation'); + if (TransactionType::RECONCILIATION === ucfirst($transactionType) + && null === $source['id'] && null === $source['name'] && null === $destination['id'] && null === $destination['name'] ) { - Log::debug('Both are NULL, error!'); + app('log')->debug('Both are NULL, error!'); $validator->errors()->add(sprintf('transactions.%d.source_id', $index), trans('validation.reconciliation_either_account')); $validator->errors()->add(sprintf('transactions.%d.source_name', $index), trans('validation.reconciliation_either_account')); $validator->errors()->add(sprintf('transactions.%d.destination_id', $index), trans('validation.reconciliation_either_account')); $validator->errors()->add(sprintf('transactions.%d.destination_name', $index), trans('validation.reconciliation_either_account')); } - if (TransactionType::RECONCILIATION === $transactionType && - (null !== $source['id'] || null !== $source['name']) && - (null !== $destination['id'] || null !== $destination['name'])) { - Log::debug('Both are not NULL, error!'); + if (TransactionType::RECONCILIATION === $transactionType + && (null !== $source['id'] || null !== $source['name']) + && (null !== $destination['id'] || null !== $destination['name'])) { + app('log')->debug('Both are not NULL, error!'); $validator->errors()->add(sprintf('transactions.%d.source_id', $index), trans('validation.reconciliation_either_account')); $validator->errors()->add(sprintf('transactions.%d.source_name', $index), trans('validation.reconciliation_either_account')); $validator->errors()->add(sprintf('transactions.%d.destination_id', $index), trans('validation.reconciliation_either_account')); @@ -204,13 +181,8 @@ trait TransactionValidation /** * TODO describe this method. * - * @param Validator $validator - * @param AccountValidator $accountValidator - * @param array $transaction - * @param string $transactionType - * @param int $index - * - * @return void + * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings(PHPMD.NPathComplexity) */ private function sanityCheckForeignCurrency( Validator $validator, @@ -219,31 +191,34 @@ trait TransactionValidation string $transactionType, int $index ): void { - Log::debug('Now in sanityCheckForeignCurrency()'); + app('log')->debug('Now in sanityCheckForeignCurrency()'); if (0 !== $validator->errors()->count()) { - Log::debug('Already have errors, return'); + app('log')->debug('Already have errors, return'); + return; } if (null === $accountValidator->source) { - Log::debug('No source, return'); + app('log')->debug('No source, return'); + return; } if (null === $accountValidator->destination) { - Log::debug('No destination, return'); + app('log')->debug('No destination, return'); + return; } - $source = $accountValidator->source; - $destination = $accountValidator->destination; + $source = $accountValidator->source; + $destination = $accountValidator->destination; - Log::debug(sprintf('Source: #%d "%s (%s)"', $source->id, $source->name, $source->accountType->type)); - Log::debug(sprintf('Destination: #%d "%s" (%s)', $destination->id, $destination->name, $source->accountType->type)); + app('log')->debug(sprintf('Source: #%d "%s (%s)"', $source->id, $source->name, $source->accountType->type)); + app('log')->debug(sprintf('Destination: #%d "%s" (%s)', $destination->id, $destination->name, $source->accountType->type)); if (!$this->isLiabilityOrAsset($source) || !$this->isLiabilityOrAsset($destination)) { - Log::debug('Any account must be liability or asset account to continue.'); + app('log')->debug('Any account must be liability or asset account to continue.'); + return; } - /** @var AccountRepositoryInterface $accountRepository */ $accountRepository = app(AccountRepositoryInterface::class); $defaultCurrency = app('amount')->getDefaultCurrency(); @@ -251,16 +226,17 @@ trait TransactionValidation $destinationCurrency = $accountRepository->getAccountCurrency($destination) ?? $defaultCurrency; // if both accounts have the same currency, continue. if ($sourceCurrency->code === $destinationCurrency->code) { - Log::debug('Both accounts have the same currency, continue.'); + app('log')->debug('Both accounts have the same currency, continue.'); + return; } - Log::debug(sprintf('Source account expects %s', $sourceCurrency->code)); - Log::debug(sprintf('Destination account expects %s', $destinationCurrency->code)); + app('log')->debug(sprintf('Source account expects %s', $sourceCurrency->code)); + app('log')->debug(sprintf('Destination account expects %s', $destinationCurrency->code)); - Log::debug(sprintf('Amount is %s', $transaction['amount'])); + app('log')->debug(sprintf('Amount is %s', $transaction['amount'])); if (TransactionType::DEPOSIT === ucfirst($transactionType)) { - Log::debug(sprintf('Processing as a "%s"', $transactionType)); + app('log')->debug(sprintf('Processing as a "%s"', $transactionType)); // use case: deposit from liability account to an asset account // the foreign amount must be in the currency of the source // the amount must be in the currency of the destination @@ -268,20 +244,22 @@ trait TransactionValidation // no foreign currency information is present: if (!$this->hasForeignCurrencyInfo($transaction)) { $validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string)trans('validation.require_foreign_currency')); + return; } // wrong currency information is present $foreignCurrencyCode = $transaction['foreign_currency_code'] ?? false; $foreignCurrencyId = (int)($transaction['foreign_currency_id'] ?? 0); - Log::debug(sprintf('Foreign currency code seems to be #%d "%s"', $foreignCurrencyId, $foreignCurrencyCode), $transaction); - if ($foreignCurrencyCode !== $sourceCurrency->code && $foreignCurrencyId !== (int)$sourceCurrency->id) { + app('log')->debug(sprintf('Foreign currency code seems to be #%d "%s"', $foreignCurrencyId, $foreignCurrencyCode), $transaction); + if ($foreignCurrencyCode !== $sourceCurrency->code && $foreignCurrencyId !== $sourceCurrency->id) { $validator->errors()->add(sprintf('transactions.%d.foreign_currency_code', $index), (string)trans('validation.require_foreign_src')); + return; } } if (TransactionType::TRANSFER === ucfirst($transactionType) || TransactionType::WITHDRAWAL === ucfirst($transactionType)) { - Log::debug(sprintf('Processing as a "%s"', $transactionType)); + app('log')->debug(sprintf('Processing as a "%s"', $transactionType)); // use case: withdrawal from asset account to a liability account. // the foreign amount must be in the currency of the destination // the amount must be in the currency of the source @@ -293,61 +271,44 @@ trait TransactionValidation // no foreign currency information is present: if (!$this->hasForeignCurrencyInfo($transaction)) { $validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string)trans('validation.require_foreign_currency')); + return; } // wrong currency information is present $foreignCurrencyCode = $transaction['foreign_currency_code'] ?? false; $foreignCurrencyId = (int)($transaction['foreign_currency_id'] ?? 0); - Log::debug(sprintf('Foreign currency code seems to be #%d "%s"', $foreignCurrencyId, $foreignCurrencyCode), $transaction); - if ($foreignCurrencyCode !== $destinationCurrency->code && $foreignCurrencyId !== (int)$destinationCurrency->id) { - Log::debug(sprintf('No match on code, "%s" vs "%s"', $foreignCurrencyCode, $destinationCurrency->code)); - Log::debug(sprintf('No match on ID, #%d vs #%d', $foreignCurrencyId, $destinationCurrency->id)); + app('log')->debug(sprintf('Foreign currency code seems to be #%d "%s"', $foreignCurrencyId, $foreignCurrencyCode), $transaction); + if ($foreignCurrencyCode !== $destinationCurrency->code && $foreignCurrencyId !== $destinationCurrency->id) { + app('log')->debug(sprintf('No match on code, "%s" vs "%s"', $foreignCurrencyCode, $destinationCurrency->code)); + app('log')->debug(sprintf('No match on ID, #%d vs #%d', $foreignCurrencyId, $destinationCurrency->id)); $validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string)trans('validation.require_foreign_dest')); } } } - /** - * @param Account $account - * - * @return bool - */ private function isLiabilityOrAsset(Account $account): bool { return $this->isLiability($account) || $this->isAsset($account); } - /** - * @param Account $account - * - * @return bool - */ private function isLiability(Account $account): bool { - $type = $account->accountType?->type; + $type = $account->accountType->type; if (in_array($type, config('firefly.valid_liabilities'), true)) { return true; } + return false; } - /** - * @param Account $account - * - * @return bool - */ private function isAsset(Account $account): bool { - $type = $account->accountType?->type; - return $type === AccountType::ASSET; + $type = $account->accountType->type; + + return AccountType::ASSET === $type; } - /** - * @param array $transaction - * - * @return bool - */ private function hasForeignCurrencyInfo(array $transaction): bool { if (!array_key_exists('foreign_currency_code', $transaction) && !array_key_exists('foreign_currency_id', $transaction)) { @@ -359,28 +320,32 @@ trait TransactionValidation if ('' === $transaction['foreign_amount']) { return false; } - if (bccomp('0', $transaction['foreign_amount']) === 0) { + if (0 === bccomp('0', (string)$transaction['foreign_amount'])) { return false; } + return true; } /** * Validates the given account information. Switches on given transaction type. * - * @param Validator $validator - * @param TransactionGroup $transactionGroup - * * @throws FireflyException */ public function validateAccountInformationUpdate(Validator $validator, TransactionGroup $transactionGroup): void { - Log::debug('Now in validateAccountInformationUpdate()'); + app('log')->debug('Now in validateAccountInformationUpdate()'); + if ($validator->errors()->count() > 0) { + app('log')->debug('Validator already has errors, so return.'); + + return; + } + $transactions = $this->getTransactionsArray($validator); /** - * @var int $index - * @var array $transaction + * @var null|int $index + * @var array $transaction */ foreach ($transactions as $index => $transaction) { if (!is_int($index)) { @@ -390,15 +355,9 @@ trait TransactionValidation } } - /** - * @param Validator $validator - * @param int $index - * @param array $transaction - * @param TransactionGroup $transactionGroup - */ protected function validateSingleUpdate(Validator $validator, int $index, array $transaction, TransactionGroup $transactionGroup): void { - Log::debug('Now validating single account update in validateSingleUpdate()'); + app('log')->debug('Now validating single account update in validateSingleUpdate()'); // if no account types are given, just skip the check. if ( @@ -406,10 +365,11 @@ trait TransactionValidation && !array_key_exists('source_name', $transaction) && !array_key_exists('destination_id', $transaction) && !array_key_exists('destination_name', $transaction)) { - Log::debug('No account data has been submitted so will not validating account info.'); + app('log')->debug('No account data has been submitted so will not validating account info.'); return; } + // create validator: /** @var AccountValidator $accountValidator */ $accountValidator = app(AccountValidator::class); @@ -419,12 +379,12 @@ trait TransactionValidation // validate if the submitted source ID/name/iban/number are valid if ( - array_key_exists('source_id', $transaction) || - array_key_exists('source_name', $transaction) || - array_key_exists('source_iban', $transaction) || - array_key_exists('source_number', $transaction) + array_key_exists('source_id', $transaction) + || array_key_exists('source_name', $transaction) + || array_key_exists('source_iban', $transaction) + || array_key_exists('source_number', $transaction) ) { - Log::debug('Will try to validate source account information.'); + app('log')->debug('Will try to validate source account information.'); $sourceId = (int)($transaction['source_id'] ?? 0); $sourceName = $transaction['source_name'] ?? null; $sourceIban = $transaction['source_iban'] ?? null; @@ -443,25 +403,24 @@ trait TransactionValidation return; } - Log::debug('Source account info is valid.'); + app('log')->debug('Source account info is valid.'); } if ( - array_key_exists('destination_id', $transaction) || - array_key_exists('destination_name', $transaction) || - array_key_exists('destination_iban', $transaction) || - array_key_exists('destination_number', $transaction) - + array_key_exists('destination_id', $transaction) + || array_key_exists('destination_name', $transaction) + || array_key_exists('destination_iban', $transaction) + || array_key_exists('destination_number', $transaction) ) { - Log::debug('Will try to validate destination account information.'); + app('log')->debug('Will try to validate destination account information.'); // at this point the validator may not have a source account, because it was never submitted for validation. // must add it ourselves or the validator can never check if the destination is correct. // the $transaction array must have a journal id or it's just one, this was validated before. if (null === $accountValidator->source) { - Log::debug('Account validator has no source account, must find it.'); + app('log')->debug('Account validator has no source account, must find it.'); $source = $this->getOriginalSource($transaction, $transactionGroup); if (null !== $source) { - Log::debug('Found a source!'); + app('log')->debug('Found a source!'); $accountValidator->source = $source; } } @@ -477,40 +436,29 @@ trait TransactionValidation $validator->errors()->add(sprintf('transactions.%d.destination_id', $index), $accountValidator->destError); $validator->errors()->add(sprintf('transactions.%d.destination_name', $index), $accountValidator->destError); } - Log::debug('Destination account info is valid.'); + app('log')->debug('Destination account info is valid.'); } - Log::debug('Done with validateSingleUpdate().'); + app('log')->debug('Done with validateSingleUpdate().'); } - /** - * @param TransactionGroup $group - * @param array $transactions - * - * @return string - */ private function getTransactionType(TransactionGroup $group, array $transactions): string { - return $transactions[0]['type'] ?? strtolower($group->transactionJournals()->first()->transactionType->type); + return $transactions[0]['type'] ?? strtolower((string)$group->transactionJournals()->first()?->transactionType->type); } - /** - * @param array $transaction - * @param TransactionGroup $transactionGroup - * - * @return Account|null - */ private function getOriginalSource(array $transaction, TransactionGroup $transactionGroup): ?Account { if (1 === $transactionGroup->transactionJournals->count()) { $journal = $transactionGroup->transactionJournals->first(); - return $journal->transactions()->where('amount', '<', 0)->first()->account; + return $journal?->transactions()->where('amount', '<', 0)->first()?->account; } + /** @var TransactionJournal $journal */ foreach ($transactionGroup->transactionJournals as $journal) { $journalId = (int)($transaction['transaction_journal_id'] ?? 0); - if ((int)$journal->id === $journalId) { - return $journal->transactions()->where('amount', '<', 0)->first()->account; + if ($journal->id === $journalId) { + return $journal->transactions()->where('amount', '<', 0)->first()?->account; } } @@ -519,12 +467,10 @@ trait TransactionValidation /** * Adds an error to the validator when there are no transactions in the array of data. - * - * @param Validator $validator */ public function validateOneRecurrenceTransaction(Validator $validator): void { - Log::debug('Now in validateOneRecurrenceTransaction()'); + app('log')->debug('Now in validateOneRecurrenceTransaction()'); $transactions = $this->getTransactionsArray($validator); // need at least one transaction @@ -535,40 +481,36 @@ trait TransactionValidation /** * Adds an error to the validator when there are no transactions in the array of data. - * - * @param Validator $validator */ public function validateOneTransaction(Validator $validator): void { - Log::debug('Now in validateOneTransaction'); + app('log')->debug('Now in validateOneTransaction'); if ($validator->errors()->count() > 0) { - Log::debug('Validator already has errors, so return.'); + app('log')->debug('Validator already has errors, so return.'); + return; } $transactions = $this->getTransactionsArray($validator); // need at least one transaction if (0 === count($transactions)) { $validator->errors()->add('transactions.0.description', (string)trans('validation.at_least_one_transaction')); - Log::debug('Added error: at_least_one_transaction.'); + app('log')->debug('Added error: at_least_one_transaction.'); return; } - Log::debug('Added NO errors.'); + app('log')->debug('Added NO errors.'); } - /** - * @param Validator $validator - */ public function validateTransactionArray(Validator $validator): void { if ($validator->errors()->count() > 0) { return; } $transactions = $this->getTransactionsArray($validator); - foreach ($transactions as $key => $value) { + foreach (array_keys($transactions) as $key) { if (!is_int($key)) { $validator->errors()->add('transactions.0.description', (string)trans('validation.at_least_one_transaction')); - Log::debug('Added error: at_least_one_transaction.'); + app('log')->debug('Added error: at_least_one_transaction.'); return; } @@ -577,28 +519,26 @@ trait TransactionValidation /** * All types of splits must be equal. - * - * @param Validator $validator */ public function validateTransactionTypes(Validator $validator): void { if ($validator->errors()->count() > 0) { return; } - Log::debug('Now in validateTransactionTypes()'); + app('log')->debug('Now in validateTransactionTypes()'); $transactions = $this->getTransactionsArray($validator); - $types = []; + $types = []; foreach ($transactions as $transaction) { $types[] = $transaction['type'] ?? 'invalid'; } - $unique = array_unique($types); + $unique = array_unique($types); if (count($unique) > 1) { $validator->errors()->add('transactions.0.type', (string)trans('validation.transaction_types_equal')); return; } - $first = $unique[0] ?? 'invalid'; + $first = $unique[0] ?? 'invalid'; if ('invalid' === $first) { $validator->errors()->add('transactions.0.type', (string)trans('validation.invalid_transaction_type')); } @@ -606,40 +546,34 @@ trait TransactionValidation /** * All types of splits must be equal. - * - * @param Validator $validator */ public function validateTransactionTypesForUpdate(Validator $validator): void { - Log::debug('Now in validateTransactionTypesForUpdate()'); + app('log')->debug('Now in validateTransactionTypesForUpdate()'); $transactions = $this->getTransactionsArray($validator); $types = []; foreach ($transactions as $transaction) { $originalType = $this->getOriginalType((int)($transaction['transaction_journal_id'] ?? 0)); // if type is not set, fall back to the type of the journal, if one is given. - $types[] = $transaction['type'] ?? $originalType; + $types[] = $transaction['type'] ?? $originalType; } - $unique = array_unique($types); + $unique = array_unique($types); if (count($unique) > 1) { app('log')->warning('Add error for mismatch transaction types.'); $validator->errors()->add('transactions.0.type', (string)trans('validation.transaction_types_equal')); return; } - Log::debug('No errors in validateTransactionTypesForUpdate()'); + app('log')->debug('No errors in validateTransactionTypesForUpdate()'); } - /** - * @param int $journalId - * - * @return string - */ private function getOriginalType(int $journalId): string { if (0 === $journalId) { return 'invalid'; } - /** @var TransactionJournal|null $journal */ + + /** @var null|TransactionJournal $journal */ $journal = TransactionJournal::with(['transactionType'])->find($journalId); if (null !== $journal) { return strtolower($journal->transactionType->type); @@ -648,74 +582,79 @@ trait TransactionValidation return 'invalid'; } - /** - * @param Validator $validator - */ private function validateEqualAccounts(Validator $validator): void { if ($validator->errors()->count() > 0) { return; } - Log::debug('Now in validateEqualAccounts()'); + app('log')->debug('Now in validateEqualAccounts()'); $transactions = $this->getTransactionsArray($validator); // needs to be split if (count($transactions) < 2) { return; } - $type = $transactions[0]['type'] ?? 'withdrawal'; - $sources = []; - $dests = []; + $type = $transactions[0]['type'] ?? 'withdrawal'; + $sources = []; + $dests = []; foreach ($transactions as $transaction) { $sources[] = sprintf('%d-%s', $transaction['source_id'] ?? 0, $transaction['source_name'] ?? ''); $dests[] = sprintf('%d-%s', $transaction['destination_id'] ?? 0, $transaction['destination_name'] ?? ''); } - $sources = array_unique($sources); - $dests = array_unique($dests); + $sources = array_unique($sources); + $dests = array_unique($dests); + switch ($type) { default: case 'withdrawal': if (count($sources) > 1) { $validator->errors()->add('transactions.0.source_id', (string)trans('validation.all_accounts_equal')); } + break; + case 'deposit': if (count($dests) > 1) { $validator->errors()->add('transactions.0.destination_id', (string)trans('validation.all_accounts_equal')); } + break; - case'transfer': + + case 'transfer': if (count($sources) > 1 || count($dests) > 1) { $validator->errors()->add('transactions.0.source_id', (string)trans('validation.all_accounts_equal')); $validator->errors()->add('transactions.0.destination_id', (string)trans('validation.all_accounts_equal')); } + break; } } - /** - * @param Validator $validator - * @param TransactionGroup $transactionGroup - */ private function validateEqualAccountsForUpdate(Validator $validator, TransactionGroup $transactionGroup): void { - Log::debug('Now in validateEqualAccountsForUpdate()'); - $transactions = $this->getTransactionsArray($validator); - - if (2 !== count($transactions)) { - Log::debug('Less than 2 transactions, do nothing.'); + if ($validator->errors()->count() > 0) { + app('log')->debug('Validator already has errors, so return.'); return; } - $type = $this->getTransactionType($transactionGroup, $transactions); + + app('log')->debug('Now in validateEqualAccountsForUpdate()'); + $transactions = $this->getTransactionsArray($validator); + + if (2 !== count($transactions)) { + app('log')->debug('Less than 2 transactions, do nothing.'); + + return; + } + $type = $this->getTransactionType($transactionGroup, $transactions); // compare source IDs, destination IDs, source names and destination names. // I think I can get away with one combination being equal, as long as the rest // of the code picks up on this as well. // either way all fields must be blank or all equal // but if IDs are equal don't bother with the names. - $comparison = $this->collectComparisonData($transactions); - $result = $this->compareAccountData($type, $comparison); + $comparison = $this->collectComparisonData($transactions); + $result = $this->compareAccountData($type, $comparison); if (false === $result) { if ('withdrawal' === $type) { $validator->errors()->add('transactions.0.source_id', (string)trans('validation.all_accounts_equal')); @@ -731,24 +670,20 @@ trait TransactionValidation return; } - Log::debug('No errors found in validateEqualAccountsForUpdate'); + app('log')->debug('No errors found in validateEqualAccountsForUpdate'); } - /** - * @param array $transactions - * - * @return array - */ private function collectComparisonData(array $transactions): array { $fields = ['source_id', 'destination_id', 'source_name', 'destination_name']; $comparison = []; foreach ($fields as $field) { $comparison[$field] = []; + /** @var array $transaction */ foreach ($transactions as $transaction) { // source or destination may be omitted. If this is the case, use the original source / destination name + ID. - $originalData = $this->getOriginalData((int)($transaction['transaction_journal_id'] ?? 0)); + $originalData = $this->getOriginalData((int)($transaction['transaction_journal_id'] ?? 0)); // get field. $comparison[$field][] = $transaction[$field] ?? $originalData[$field]; @@ -758,14 +693,9 @@ trait TransactionValidation return $comparison; } - /** - * @param int $journalId - * - * @return array - */ private function getOriginalData(int $journalId): array { - $return = [ + $return = [ 'source_id' => 0, 'source_name' => '', 'destination_id' => 0, @@ -774,15 +704,17 @@ trait TransactionValidation if (0 === $journalId) { return $return; } - /** @var Transaction $source */ - $source = Transaction::where('transaction_journal_id', $journalId)->where('amount', '<', 0)->with(['account'])->first(); + + /** @var null|Transaction $source */ + $source = Transaction::where('transaction_journal_id', $journalId)->where('amount', '<', 0)->with(['account'])->first(); if (null !== $source) { $return['source_id'] = $source->account_id; $return['source_name'] = $source->account->name; } - /** @var Transaction $destination */ + + /** @var null|Transaction $destination */ $destination = Transaction::where('transaction_journal_id', $journalId)->where('amount', '>', 0)->with(['account'])->first(); - if (null !== $source) { + if (null !== $destination) { $return['destination_id'] = $destination->account_id; $return['destination_name'] = $destination->account->name; } @@ -790,12 +722,6 @@ trait TransactionValidation return $return; } - /** - * @param string $type - * @param array $comparison - * - * @return bool - */ private function compareAccountData(string $type, array $comparison): bool { return match ($type) { @@ -805,11 +731,6 @@ trait TransactionValidation }; } - /** - * @param array $comparison - * - * @return bool - */ private function compareAccountDataWithdrawal(array $comparison): bool { if ($this->arrayEqual($comparison['source_id'])) { @@ -824,21 +745,11 @@ trait TransactionValidation return false; } - /** - * @param array $array - * - * @return bool - */ private function arrayEqual(array $array): bool { return 1 === count(array_unique($array)); } - /** - * @param array $comparison - * - * @return bool - */ private function compareAccountDataDeposit(array $comparison): bool { if ($this->arrayEqual($comparison['destination_id'])) { @@ -853,11 +764,6 @@ trait TransactionValidation return false; } - /** - * @param array $comparison - * - * @return bool - */ private function compareAccountDataTransfer(array $comparison): bool { if ($this->arrayEqual($comparison['source_id'])) { diff --git a/bootstrap/app.php b/bootstrap/app.php index b7cac40a4c..f17a7fe025 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -37,13 +37,14 @@ bcscale(12); if (!function_exists('envNonEmpty')) { /** * @param string $key - * @param null $default + * @param string|int|bool|null $default * * @return mixed|null */ - function envNonEmpty(string $key, $default = null) { + function envNonEmpty(string $key, string|int|bool|null $default = null) + { $result = env($key, $default); - if (is_string($result) && '' === $result) { + if ('' === $result) { $result = $default; } @@ -58,13 +59,14 @@ if (!function_exists('stringIsEqual')) { * * @return bool */ - function stringIsEqual(string $left, string $right): bool { + function stringIsEqual(string $left, string $right): bool + { return $left === $right; } } $app = new Illuminate\Foundation\Application( - realpath(__DIR__ . '/../') + (string)realpath(__DIR__ . '/../') ); /* diff --git a/changelog.md b/changelog.md index c28367f30d..555f6dea65 100644 --- a/changelog.md +++ b/changelog.md @@ -3,6 +3,259 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## 6.1.10 - 2024-03-03 + +### Added + +- Add missing translations for rule page. + +### Changed + +- The update checker can also deal with development releases +- Rule actions no longer complain when the category is already set + +### Removed + +- Unused translation on budget page + +### Fixed + +- [Issue 8521](https://github.com/firefly-iii/firefly-iii/issues/8521) (Total buget bar is missing when using SQLite) reported by @matlink +- [Issue 8544](https://github.com/firefly-iii/firefly-iii/issues/8544) (Recurring transaction calendar preview is not working properly) reported by @Maxco10 +- [Issue 8555](https://github.com/firefly-iii/firefly-iii/issues/8555) (Has no budget becomes has no category) reported by @Weiming-Hu +- [Discussion 8557](https://github.com/orgs/firefly-iii/discussions/8557) ("Delete ALL your transactions" also removes all asset opening balance information) started by @digitlength +- [Issue 8575](https://github.com/firefly-iii/firefly-iii/issues/8575) (Creating rule from bill no longer pre-fills triggers and actions) reported by @jpelgrom +- [Issue 8578](https://github.com/firefly-iii/firefly-iii/issues/8578) (Display Bug: foreign currency is red & negative in deposits) reported by @dreautall +- Errors in incoming webhook URLs are properly caught + +### Security + +- Improved Host header validation to prevent a potential attack, reported by Raqib Iskenderli + +## 6.1.9 - 2024-02-06 + +### Fixed + +- [Issue 8499](https://github.com/firefly-iii/firefly-iii/issues/8499) (Wrong version number after update to v6.1.8) reported by @memo-567 +- [Issue 8501](https://github.com/firefly-iii/firefly-iii/issues/8501) (Bulk delete page links to wrong tx) reported by @likuilin + +## 6.1.8 - 2024-02-04 + +### Added + +- Added a trigger for v2 layouts that helps with debugging. +- [Issue 8431](https://github.com/firefly-iii/firefly-iii/issues/8431) (The Opening/ Virtual Balance must less than or equal 100001709) reported by @binhtran1604 +- [Issue 8457](https://github.com/firefly-iii/firefly-iii/issues/8457) (Budgets - missing summary from the bottom) reported by @g7xtr + +### Removed + +- Reference to the "huntr" bug bounty platform, which is now some shitty AI scam. + +### Fixed + +- [PR 8432](https://github.com/firefly-iii/firefly-iii/pull/8432) (Update favicons.twig) reported by @stevietv +- [Issue 8433](https://github.com/firefly-iii/firefly-iii/issues/8433) (may be a wrong calculation) reported by @PterX +- [Issue 8442](https://github.com/firefly-iii/firefly-iii/issues/8442) (v6.1.7 - Not expected this period) reported by @poudenes +- [Discussion 8445](https://github.com/orgs/firefly-iii/discussions/8445) (Offering to Contribute to Firefly Documentation) reported by @poupouproject +- [Issue 8446](https://github.com/firefly-iii/firefly-iii/issues/8446) (There is an extra X ending symbol here) reported by @PterX +- [Issue 8467](https://github.com/firefly-iii/firefly-iii/issues/8467) (API Endpoint /data/export/rules produces errorneous CSV output) reported by @not1q84-1 +- [Issue 8472](https://github.com/firefly-iii/firefly-iii/issues/8472) (When left to spend is 0, the info box is red) reported by @nicosomb +- [Issue 8471](https://github.com/firefly-iii/firefly-iii/issues/8471) (Left to spend is not the same on dashboard and on budget page) reported by @nicosomb +- [PR 8477](https://github.com/firefly-iii/firefly-iii/pull/8477) (Bump actions/checkout from 3 to 4) reported by @dependabot[bot] +- [Issue 8497](https://github.com/firefly-iii/firefly-iii/issues/8497) (has_any_category:false not possible as a rule) reported by @shrippen + +### Security + +- [GHSA-29w6-c52g-m8jc](https://github.com/firefly-iii/firefly-iii/security/advisories/GHSA-29w6-c52g-m8jc) Demo users could trick each other into downloading poisoned CSV files, reported by @red5us + +## 6.1.7 - 2024-01-21 + +### Added + +- Layout `v2` has some new features +- [Issue 8369](https://github.com/firefly-iii/firefly-iii/issues/8369) (Additional reconcile link) reported by @chevdor + +### Fixed + +- [Issue 8352](https://github.com/firefly-iii/firefly-iii/issues/8352) (Modifying the direction of a transfer between liabilities yields no effect) reported by @Ezwen +- [PR 8370](https://github.com/firefly-iii/firefly-iii/pull/8370) (Fix various typos) reported by @luzpaz +- [Issue 8377](https://github.com/firefly-iii/firefly-iii/issues/8377) (Query on multiple tags returns duplicates) reported by @chevdor +- [Issue 8374](https://github.com/firefly-iii/firefly-iii/issues/8374) (Error Graph Income vs. expenses Reports page) reported by @nicolopozzato +- [Issue 8390](https://github.com/firefly-iii/firefly-iii/issues/8390) (Rule with destination_account_is 'not' is never returning a result.) reported by @EricVanCaenenberghe +- [Issue 8349](https://github.com/firefly-iii/firefly-iii/issues/8349) (Currencies not saving correctly) reported by @r1bas4 +- [Issue 8418](https://github.com/firefly-iii/firefly-iii/issues/8418) (Unable to create rule with trigger having type has_no_budget via the API ) reported by @tailg8nj +- [Issue 8425](https://github.com/firefly-iii/firefly-iii/issues/8425) (Error from the net-worth endpoint with `Trailing data`.) reported by @chevdor +- [Issue 8427](https://github.com/firefly-iii/firefly-iii/issues/8427) (Broken batch application of non-strict rules with triggers with stop processing) reported by @alexschlueter +- Various Carbon `createFromFormat` issues fixed. + +## 6.1.6 - 2024-01-07 + +### Fixed + +- Type validation error + +## 6.1.5 - 2024-01-07 + +### Added + +- More audit logs +- Sanity check in date ranges +- More uniform length and size validations + +### Changed + +- Slightly changed text, thanks @maureenferreira! + +### Fixed + +- [Issue 8328](https://github.com/firefly-iii/firefly-iii/issues/8328) Some extra fixes for non-zero foreign amounts +- Updated links in `.env.example`, thanks @lemuelroberto! + +## 6.1.4 - 2024-01-03 + +### Fixed + +- [Issue 8328](https://github.com/firefly-iii/firefly-iii/issues/8328) Asking for non-zero foreign amount despite not being used + +## 6.1.3 - 2024-01-03 + +### Fixed + +- [Issue 8326](https://github.com/firefly-iii/firefly-iii/issues/8326) Asking for non-zero foreign amount despite not being used + +## 6.1.2 - 2024-01-03 + +### Changed + +- [Issue 8304](https://github.com/firefly-iii/firefly-iii/issues/8304) Several issues with searching for and displaying of tag-related transactions + +### Removed + +- Double reference to webhooks in the menu + +### Fixed + +- [Issue 8297](https://github.com/firefly-iii/firefly-iii/issues/8297) Division by zero +- [Issue 8320](https://github.com/firefly-iii/firefly-iii/issues/8320) nullpointer in new layout +- [Issue 8321](https://github.com/firefly-iii/firefly-iii/issues/8321) Networth checkbox for expense and revenue accounts removed +- Long date ranges will throw an error +- +- Max sizes and reasonable limits for most numbers and strings +- Links in readme to documentation. + +### Security + +- Webhooks now properly disabled in the UI. +- [Issue 8322](https://github.com/firefly-iii/firefly-iii/issues/8322) Duplicate detection did not distinguish between users + +## 6.1.1 - 2023-12-27 + +### Changed + +- Rule overview is lower in height. + +### Removed + +- Removed fixed sidebar again + +### Fixed + +- Nullpointer in rule trigger render code +- [Issue 8272](https://github.com/firefly-iii/firefly-iii/issues/8272) The sum for expected bills in a group includes unexpected bills as well +- [Issue 8273](https://github.com/firefly-iii/firefly-iii/issues/8273) Frontpage preferences indicate all accounts are shown on the frontpage, even when not true +- [Issue 8274](https://github.com/firefly-iii/firefly-iii/issues/8274) Semi specific dates do not work correctly with the "Transaction date is.." rule trigger +- [Issue 8277](https://github.com/firefly-iii/firefly-iii/issues/8277) Expected bill next month, but shown as not expected +- [Issue 8278](https://github.com/firefly-iii/firefly-iii/issues/8278) Net worth is empty in the dashboard due to division by zero +- [Issue 8281](https://github.com/firefly-iii/firefly-iii/issues/8281) Database CPU utilization after v6.1.0 upgrade +- [Issue 8291](https://github.com/firefly-iii/firefly-iii/issues/8291) Multiple "Any tag is" (negated or not) rule triggers don't all apply in strict mode + +### Security + +- HTML Injection Vulnerability in webhooks code, discovered by @stefan-schiller-sonarsource from Sonar. Thanks! + +### API + +- [Issue 8282](https://github.com/firefly-iii/firefly-iii/issues/8282) Update transaction via API does not update the "updated_at" parameter + +## 6.1.0 - 2023-12-17 + +> ⚠️⚠️ This release required **PHP 8.3.0** and will not work on earlier releases of PHP ⚠️⚠️ + +### Added + +- [Issue 7571](https://github.com/firefly-iii/firefly-iii/issues/7571) More tag search options +- [Issue 7781](https://github.com/firefly-iii/firefly-iii/issues/7781) Nice wrapper script for artisan commands +- UI also supports time for transactions + +### Changed + +- ⚠️⚠️ Requires PHP8.3 ⚠️⚠️ +- [Issue 8148](https://github.com/firefly-iii/firefly-iii/issues/8148) Slovenian language updates +- [Issue 8023](https://github.com/firefly-iii/firefly-iii/issues/8023) Top bar is now fixed in place +- Completely rewrote the documentation. + +### Deprecated + +- ⚠️⚠️ Removed support for PHP 8.2 ⚠️⚠️ + +### Fixed + +- [Issue 8106](https://github.com/firefly-iii/firefly-iii/issues/8106) [issue 8195](https://github.com/firefly-iii/firefly-iii/issues/8195) [issue 8163](https://github.com/firefly-iii/firefly-iii/issues/8163) Various changes and fixes to bill date calculation +- [Issue 8137](https://github.com/firefly-iii/firefly-iii/issues/8137) Fix uneven amount error from cron job +- [Issue 8192](https://github.com/firefly-iii/firefly-iii/issues/8192) No matching transactions found.Rule with trigger NOT Transaction is reconciled returns +- [Issue 8207](https://github.com/firefly-iii/firefly-iii/issues/8207) Broken links, thanks @Maxco10! +- [Issue 8138](https://github.com/firefly-iii/firefly-iii/issues/8138) Reconciled transactions can't be "store(d) as new" +- [Issue 7716](https://github.com/firefly-iii/firefly-iii/issues/7716) Removed bar in budget overview +- [Issue 8251](https://github.com/firefly-iii/firefly-iii/issues/8251) Removing a budget would not remove available budget + +### API + +- [Issue 8022](https://github.com/firefly-iii/firefly-iii/issues/8022) API chart expansions +- [Issue 8106](https://github.com/firefly-iii/firefly-iii/issues/8106) API reports empty string instead of NULL + +## 6.0.30 - 2023-10-29 + +### Fixed + +- Missing method after refactoring. + +## 6.0.29 - 2023-10-29 + +### Fixed + +- Null pointer in bill overview + +## 6.0.28 - 2023-10-29 + +### Added + +- [Issue 8076](https://github.com/firefly-iii/firefly-iii/issues/8076) Added a "Clone and edit"-button +- [Issue 7204](https://github.com/firefly-iii/firefly-iii/issues/7204) Added the ability to customize the URL protocol types Firefly III accepts +- [Issue 8098](https://github.com/firefly-iii/firefly-iii/issues/8098) More tests in the navigation class, thanks @tonicospinelli! + +### Changed + +- Refactored the Actions of GitHub +- The transaction currencies are now linked to users, and can be enabled per user +- A few upgrade commands are refactored +- You can no longer edit vital parts of reconciled transactions + +### Deprecated + +- Remove old v3 layout. + +### Fixed + +- Bad math in the order of piggy banks +- [Issue 8084](https://github.com/firefly-iii/firefly-iii/issues/8084) @JoSchrader fixed an issue with a duplicate button +- [Issue 8103](https://github.com/firefly-iii/firefly-iii/issues/8103) Bulk edit would not accept transaction descriptions longer than 255 characters +- [Issue 8099](https://github.com/firefly-iii/firefly-iii/issues/8099) The bill index would never skip the number of periods you indicated +- [Issue 8069](https://github.com/firefly-iii/firefly-iii/issues/8069) Rule descriptions would always "1" as description. Thanks @Maxco10! + +### API + +- API will no longer accept changes to amount and account fields for reconciled transactions + ## v6.0.27 - 2023-10-16 ### Added @@ -252,7 +505,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - 🇰🇷 Korean translations! - A new "adjusted" auto-budget type that will correct itself after - spending. [Read more](https://docs.firefly-iii.org/firefly-iii/financial-concepts/organizing/#adjusted-and-correct-for-overspending) + spending. [Read more](https://docs.firefly-iii.org/xfirefly-iii/financial-concepts/organizing/#adjusted-and-correct-for-overspending) - [Issue 6631](https://github.com/firefly-iii/firefly-iii/issues/6631) Can now link withdrawals and deposits to piggy banks, thanks @ChrisWin22! @@ -465,10 +718,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). This is release -* - -*6.0.0 -** of Firefly III. +**6.0.0** of Firefly III. ### Warnings @@ -1045,7 +1295,7 @@ https://api-docs.firefly-iii.org/. - ⚠️ This is the last release that supports PHP 8.0 - 👍 Want to try the new v3 layout? At your own risk, browse to `/v3/`. -Please refer to the [documentation](https://docs.firefly-iii.org/firefly-iii/) and support channels if you run into +Please refer to the [documentation](https://docs.firefly-iii.org/xfirefly-iii/) and support channels if you run into problems: - [Gitter.im](https://gitter.im/firefly-iii/firefly-iii) @@ -1123,6 +1373,6 @@ problems: # Full change log -Can be found here: https://docs.firefly-iii.org/firefly-iii/about-firefly-iii/changelog/ +Can be found here: https://docs.firefly-iii.org/references/firefly-iii/changelog/ diff --git a/composer.json b/composer.json index d83366f6dc..82186beb6c 100644 --- a/composer.json +++ b/composer.json @@ -1,194 +1,198 @@ { - "name": "grumpydictator/firefly-iii", - "description": "Firefly III: a personal finances manager.", - "keywords": [ - "finance", - "finances", - "manager", - "management", - "euro", - "dollar", - "laravel", - "money", - "currency", - "financials", - "financial", - "budgets", - "administration", - "tool", - "tooling", - "help", - "helper", - "assistant", - "planning", - "organizing", - "bills", - "personal finance", - "budgets", - "budgeting", - "budgeting tool", - "budgeting application", - "transactions", - "self hosted", - "self-hosted", - "transfers", - "management" - ], - "license": "AGPL-3.0-or-later", - "homepage": "https://github.com/firefly-iii/firefly-iii", - "type": "project", - "readme": "readme.md", - "authors": [ - { - "name": "James Cole", - "email": "james@firefly-iii.org", - "homepage": "https://github.com/firefly-iii", - "role": "Developer" - } - ], - "support": { - "email": "james@firefly-iii.org", - "issues": "https://github.com/firefly-iii/firefly-iii/issues", - "forum": "https://gitter.im/firefly-iii/firefly-iii", - "wiki": "https://github.com/firefly-iii/help/wiki", - "source": "https://github.com/firefly-iii/firefly-iii", - "docs": "https://docs.firefly-iii.org/" - }, - "funding": [ - { - "type": "patreon", - "url": "https://www.patreon.com/JC5" + "name": "grumpydictator/firefly-iii", + "description": "Firefly III: a personal finances manager.", + "keywords": [ + "finance", + "finances", + "manager", + "management", + "euro", + "dollar", + "laravel", + "money", + "currency", + "financials", + "financial", + "budgets", + "administration", + "tool", + "tooling", + "help", + "helper", + "assistant", + "planning", + "organizing", + "bills", + "personal finance", + "budgets", + "budgeting", + "budgeting tool", + "budgeting application", + "transactions", + "self hosted", + "self-hosted", + "transfers", + "management" + ], + "license": "AGPL-3.0-or-later", + "homepage": "https://github.com/firefly-iii/firefly-iii", + "type": "project", + "readme": "readme.md", + "authors": [ + { + "name": "James Cole", + "email": "james@firefly-iii.org", + "homepage": "https://github.com/firefly-iii", + "role": "Developer" + } + ], + "support": { + "email": "james@firefly-iii.org", + "issues": "https://github.com/firefly-iii/firefly-iii/issues", + "forum": "https://gitter.im/firefly-iii/firefly-iii", + "wiki": "https://github.com/firefly-iii/help/wiki", + "source": "https://github.com/firefly-iii/firefly-iii", + "docs": "https://docs.firefly-iii.org/" }, - { - "type": "github", - "url": "https://github.com/sponsors/JC5" - } - ], - "require": { - "php": ">=8.2", - "ext-bcmath": "*", - "ext-curl": "*", - "ext-fileinfo": "*", - "ext-iconv": "*", - "ext-intl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-pdo": "*", - "ext-session": "*", - "ext-simplexml": "*", - "ext-sodium": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "bacon/bacon-qr-code": "2.*", - "diglactic/laravel-breadcrumbs": "^8.1", - "doctrine/dbal": "3.*", - "gdbots/query-parser": "^3.0", - "guzzlehttp/guzzle": "^7.8", - "jc5/google2fa-laravel": "^2.0", - "jc5/recovery": "^2", - "laravel/framework": "^10", - "laravel/passport": "11.*", - "laravel/sanctum": "^3.3", - "laravel/slack-notification-channel": "^3.0", - "laravel/ui": "^4.2", - "league/commonmark": "2.*", - "league/csv": "^9.10", - "league/fractal": "0.*", - "nunomaduro/collision": "^7.7", - "pragmarx/google2fa": "^8.0", - "predis/predis": "^2.2", - "psr/log": "<4", - "ramsey/uuid": "^4.7", - "rcrowe/twigbridge": "^0.14", - "spatie/laravel-html": "^3.2", - "spatie/laravel-ignition": "^2", - "spatie/period": "^2.4", - "symfony/expression-language": "^6.3", - "symfony/http-client": "^6.3", - "symfony/mailgun-mailer": "^6.3", - "therobfonz/laravel-mandrill-driver": "^5.0" - }, - "require-dev": { - "barryvdh/laravel-ide-helper": "2.*", - "ergebnis/phpstan-rules": "^2.1", - "fakerphp/faker": "1.*", - "filp/whoops": "2.*", - "mockery/mockery": "1.*", - "nunomaduro/larastan": "^2.6", - "phpstan/phpstan": "^1.10", - "phpstan/phpstan-deprecation-rules": "^1.1", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10", - "thecodingmachine/phpstan-strict-rules": "^1.0" - }, - "suggest": { - }, - "autoload": { - "psr-4": { - "FireflyIII\\": "app/", - "Domain\\": "domain/", - "Database\\Factories\\": "database/factories/", - "Database\\Seeders\\": "database/seeders/" - } - }, - "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } - }, - "extra": { - "laravel": { - "dont-discover": [] - } - }, - "scripts": { - "post-root-package-install": [ - "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/JC5" + }, + { + "type": "github", + "url": "https://github.com/sponsors/JC5" + } ], - "post-create-project-cmd": [ - "@php artisan key:generate" - ], - "post-autoload-dump": [ - "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump" - ], - "post-update-cmd": [ - "@php artisan config:clear", - "@php artisan route:clear", - "@php artisan twig:clean", - "@php artisan view:clear", - "@php artisan clear-compiled", - "@php artisan cache:clear", - "@php artisan firefly-iii:upgrade-database", - "@php artisan firefly-iii:correct-database", - "@php artisan firefly-iii:report-integrity", - "@php artisan passport:install", - "@php artisan firefly:instructions update" - ], - "post-install-cmd": [ - "@php artisan firefly:instructions install", - "@php artisan firefly-iii:verify-security-alerts" - ], - "unit-test": [ - "@php vendor/bin/phpunit -c phpunit.xml --testsuite unit --no-coverage" - ], - "integration-test": [ - "@php vendor/bin/phpunit -c phpunit.xml --testsuite integration --no-coverage" - ], - "coverage": [ - "@php vendor/bin/phpunit -c phpunit.xml --testsuite unit" - ] - }, - "config": { - "platform": { - "php": "8.2" + "require": { + "php": ">=8.3", + "ext-bcmath": "*", + "ext-curl": "*", + "ext-fileinfo": "*", + "ext-iconv": "*", + "ext-intl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pdo": "*", + "ext-session": "*", + "ext-simplexml": "*", + "ext-sodium": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "bacon/bacon-qr-code": "2.*", + "diglactic/laravel-breadcrumbs": "^8.1", + "doctrine/dbal": "3.*", + "gdbots/query-parser": "^3.0", + "guzzlehttp/guzzle": "^7.8", + "jc5/google2fa-laravel": "^2.0", + "jc5/recovery": "^2", + "laravel/framework": "^10", + "laravel/passport": "11.*", + "laravel/sanctum": "^3.3", + "laravel/slack-notification-channel": "^3.0", + "laravel/ui": "^4.2", + "league/commonmark": "2.*", + "league/csv": "^9.10", + "league/fractal": "0.*", + "nunomaduro/collision": "^7.7", + "pragmarx/google2fa": "^8.0", + "predis/predis": "^2.2", + "psr/log": "<4", + "ramsey/uuid": "^4.7", + "rcrowe/twigbridge": "^0.14", + "spatie/laravel-html": "^3.2", + "spatie/laravel-ignition": "^2", + "spatie/period": "^2.4", + "symfony/expression-language": "^6.4", + "symfony/http-client": "^7.0", + "symfony/mailgun-mailer": "^7.0", + "therobfonz/laravel-mandrill-driver": "^5.0" }, - "preferred-install": "dist", - "sort-packages": true, - "optimize-autoloader": true, - "allow-plugins": { - "composer/package-versions-deprecated": true + "require-dev": { + "barryvdh/laravel-debugbar": "^3.9", + "barryvdh/laravel-ide-helper": "2.*", + "ergebnis/phpstan-rules": "^2.1", + "fakerphp/faker": "1.*", + "filp/whoops": "2.*", + "larastan/larastan": "^2", + "mockery/mockery": "1.*", + "phpstan/extension-installer": "^1.3", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-deprecation-rules": "^1.1", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10", + "thecodingmachine/phpstan-strict-rules": "^1.0" + }, + "suggest": {}, + "autoload": { + "psr-4": { + "FireflyIII\\": "app/", + "Domain\\": "domain/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "extra": { + "laravel": { + "dont-discover": [] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "scripts": { + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate" + ], + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump" + ], + "post-update-cmd": [ + "@php artisan config:clear", + "@php artisan route:clear", + "@php artisan twig:clean", + "@php artisan view:clear", + "@php artisan clear-compiled", + "@php artisan cache:clear", + "@php artisan firefly-iii:upgrade-database", + "@php artisan firefly-iii:correct-database", + "@php artisan firefly-iii:report-integrity", + "@php artisan passport:install", + "@php artisan firefly:instructions update" + ], + "post-install-cmd": [ + "@php artisan firefly:instructions install", + "@php artisan firefly-iii:verify-security-alerts" + ], + "unit-test": [ + "@php vendor/bin/phpunit -c phpunit.xml --testsuite unit --no-coverage" + ], + "integration-test": [ + "@php vendor/bin/phpunit -c phpunit.xml --testsuite integration --no-coverage" + ], + "coverage": [ + "@php vendor/bin/phpunit -c phpunit.xml" + ] + }, + "config": { + "preferred-install": "dist", + "sort-packages": true, + "optimize-autoloader": true, + "allow-plugins": { + "composer/package-versions-deprecated": true, + "phpstan/extension-installer": true + } } - } } diff --git a/composer.lock b/composer.lock index ae7655de64..1b9a6fd3f5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2dd09680aeb9e09c15bc6f6f19666952", + "content-hash": "1046ba3997e4bfc3802e62f157cd311b", "packages": [ { "name": "bacon/bacon-qr-code", @@ -115,6 +115,75 @@ ], "time": "2023-01-15T23:15:59+00:00" }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "doctrine/dbal": "<3.7.0 || >=4.0.0" + }, + "require-dev": { + "doctrine/dbal": "^3.7.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2023-12-11T17:09:12+00:00" + }, { "name": "dasprid/enum", "version": "1.0.5", @@ -473,16 +542,16 @@ }, { "name": "doctrine/dbal", - "version": "3.7.1", + "version": "3.8.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2" + "reference": "a19a1d05ca211f41089dffcc387733a6875196cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5b7bd66c9ff58c04c5474ab85edce442f8081cb2", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/a19a1d05ca211f41089dffcc387733a6875196cb", + "reference": "a19a1d05ca211f41089dffcc387733a6875196cb", "shasum": "" }, "require": { @@ -498,14 +567,14 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.35", + "phpstan/phpstan": "1.10.57", "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.13", + "phpunit/phpunit": "9.6.16", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4|^6.0", - "symfony/console": "^4.4|^5.4|^6.0", + "squizlabs/php_codesniffer": "3.8.1", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0", "vimeo/psalm": "4.30.0" }, "suggest": { @@ -566,7 +635,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.1" + "source": "https://github.com/doctrine/dbal/tree/3.8.2" }, "funding": [ { @@ -582,20 +651,20 @@ "type": "tidelift" } ], - "time": "2023-10-06T05:06:20+00:00" + "time": "2024-02-12T18:36:36+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { @@ -627,9 +696,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.2" + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "time": "2023-09-27T20:04:15+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "doctrine/event-manager", @@ -724,16 +793,16 @@ }, { "name": "doctrine/inflector", - "version": "2.0.8", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { @@ -795,7 +864,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.8" + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { @@ -811,31 +880,31 @@ "type": "tidelift" } ], - "time": "2023-06-16T13:40:37+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/lexer", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -872,7 +941,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -888,7 +957,7 @@ "type": "tidelift" } ], - "time": "2022-12-15T16:57:16+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "dragonmantank/cron-expression", @@ -1073,16 +1142,16 @@ }, { "name": "filp/whoops", - "version": "2.15.3", + "version": "2.15.4", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", - "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", + "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", "shasum": "" }, "require": { @@ -1132,7 +1201,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.3" + "source": "https://github.com/filp/whoops/tree/2.15.4" }, "funding": [ { @@ -1140,20 +1209,20 @@ "type": "github" } ], - "time": "2023-07-13T12:00:00+00:00" + "time": "2023-11-03T12:00:00+00:00" }, { "name": "firebase/php-jwt", - "version": "v6.9.0", + "version": "v6.10.0", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "f03270e63eaccf3019ef0f32849c497385774e11" + "reference": "a49db6f0a5033aef5143295342f1c95521b075ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/f03270e63eaccf3019ef0f32849c497385774e11", - "reference": "f03270e63eaccf3019ef0f32849c497385774e11", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/a49db6f0a5033aef5143295342f1c95521b075ff", + "reference": "a49db6f0a5033aef5143295342f1c95521b075ff", "shasum": "" }, "require": { @@ -1201,9 +1270,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.9.0" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.0" }, - "time": "2023-10-05T00:24:42+00:00" + "time": "2023-12-01T16:26:39+00:00" }, { "name": "fruitcake/php-cors", @@ -1317,24 +1386,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.1", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.1" + "phpoption/phpoption": "^1.9.2" }, "require-dev": { - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "autoload": { @@ -1363,7 +1432,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" }, "funding": [ { @@ -1375,20 +1444,20 @@ "type": "tidelift" } ], - "time": "2023-02-25T20:23:15+00:00" + "time": "2023-11-12T22:16:48+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.8.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", "shasum": "" }, "require": { @@ -1403,11 +1472,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1485,7 +1554,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.0" + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" }, "funding": [ { @@ -1501,28 +1570,28 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:20:53+00:00" + "time": "2023-12-03T20:35:24+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "type": "library", "extra": { @@ -1568,7 +1637,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.1" + "source": "https://github.com/guzzle/promises/tree/2.0.2" }, "funding": [ { @@ -1584,20 +1653,20 @@ "type": "tidelift" } ], - "time": "2023-08-03T15:11:55+00:00" + "time": "2023-12-03T20:19:20+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.1", + "version": "2.6.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", "shasum": "" }, "require": { @@ -1611,9 +1680,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1684,7 +1753,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.1" + "source": "https://github.com/guzzle/psr7/tree/2.6.2" }, "funding": [ { @@ -1700,32 +1769,38 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:13:57+00:00" + "time": "2023-12-03T20:05:35+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.2", + "version": "v1.0.3", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d" + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/61bf437fc2197f587f6857d3ff903a24f1731b5d", - "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.17" + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.19 || ^9.5.8", + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", "uri-template/tests": "1.0.0" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, "autoload": { "psr-4": { "GuzzleHttp\\UriTemplate\\": "src" @@ -1764,7 +1839,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.2" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" }, "funding": [ { @@ -1780,7 +1855,7 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:19:19+00:00" + "time": "2023-12-03T19:50:20+00:00" }, { "name": "jc5/google2fa-laravel", @@ -1939,20 +2014,20 @@ }, { "name": "laravel/framework", - "version": "v10.28.0", + "version": "v10.46.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "09137f50f715c1efc649788a26092dcb1ec4ab6e" + "reference": "5e95946a8283a8d5c015035793f9c61c297e937f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/09137f50f715c1efc649788a26092dcb1ec4ab6e", - "reference": "09137f50f715c1efc649788a26092dcb1ec4ab6e", + "url": "https://api.github.com/repos/laravel/framework/zipball/5e95946a8283a8d5c015035793f9c61c297e937f", + "reference": "5e95946a8283a8d5c015035793f9c61c297e937f", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.3.2", @@ -1981,7 +2056,7 @@ "symfony/console": "^6.2", "symfony/error-handler": "^6.2", "symfony/finder": "^6.2", - "symfony/http-foundation": "^6.2", + "symfony/http-foundation": "^6.4", "symfony/http-kernel": "^6.2", "symfony/mailer": "^6.2", "symfony/mime": "^6.2", @@ -1994,6 +2069,9 @@ "voku/portable-ascii": "^2.0" }, "conflict": { + "carbonphp/carbon-doctrine-types": ">=3.0", + "doctrine/dbal": ">=4.0", + "phpunit/phpunit": ">=11.0.0", "tightenco/collect": "<5.5.33" }, "provide": { @@ -2048,13 +2126,15 @@ "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.12", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^8.18", "pda/pheanstalk": "^4.0", "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^10.0.7", "predis/predis": "^2.0.2", "symfony/cache": "^6.2", - "symfony/http-client": "^6.2.4" + "symfony/http-client": "^6.2.4", + "symfony/psr-http-message-bridge": "^2.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", @@ -2103,6 +2183,7 @@ "files": [ "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Support/helpers.php" ], @@ -2135,20 +2216,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-10-10T13:01:37+00:00" + "time": "2024-02-27T16:46:54+00:00" }, { "name": "laravel/passport", - "version": "v11.9.1", + "version": "v11.10.5", "source": { "type": "git", "url": "https://github.com/laravel/passport.git", - "reference": "93bb9c36045fe5be2eaeacf35e836c00b392b761" + "reference": "4d81207941d6efc198857847d9e4c17520f28d75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/passport/zipball/93bb9c36045fe5be2eaeacf35e836c00b392b761", - "reference": "93bb9c36045fe5be2eaeacf35e836c00b392b761", + "url": "https://api.github.com/repos/laravel/passport/zipball/4d81207941d6efc198857847d9e4c17520f28d75", + "reference": "4d81207941d6efc198857847d9e4c17520f28d75", "shasum": "" }, "require": { @@ -2172,7 +2253,7 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.0|^8.0", + "orchestra/testbench": "^7.31|^8.11", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.3" }, @@ -2213,27 +2294,27 @@ "issues": "https://github.com/laravel/passport/issues", "source": "https://github.com/laravel/passport" }, - "time": "2023-09-01T14:20:24+00:00" + "time": "2024-02-09T16:27:49+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.11", + "version": "v0.1.16", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "cce65a90e64712909ea1adc033e1d88de8455ffd" + "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/cce65a90e64712909ea1adc033e1d88de8455ffd", - "reference": "cce65a90e64712909ea1adc033e1d88de8455ffd", + "url": "https://api.github.com/repos/laravel/prompts/zipball/ca6872ab6aec3ab61db3a61f83a6caf764ec7781", + "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781", "shasum": "" }, "require": { "ext-mbstring": "*", "illuminate/collections": "^10.0|^11.0", "php": "^8.1", - "symfony/console": "^6.2" + "symfony/console": "^6.2|^7.0" }, "conflict": { "illuminate/console": ">=10.17.0 <10.25.0", @@ -2242,7 +2323,7 @@ "require-dev": { "mockery/mockery": "^1.5", "pestphp/pest": "^2.3", - "phpstan/phpstan": "^1.10", + "phpstan/phpstan": "^1.11", "phpstan/phpstan-mockery": "^1.1" }, "suggest": { @@ -2268,22 +2349,22 @@ ], "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.11" + "source": "https://github.com/laravel/prompts/tree/v0.1.16" }, - "time": "2023-10-03T01:07:35+00:00" + "time": "2024-02-21T19:25:27+00:00" }, { "name": "laravel/sanctum", - "version": "v3.3.1", + "version": "v3.3.3", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "338f633e6487e76b255470d3373fbc29228aa971" + "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/338f633e6487e76b255470d3373fbc29228aa971", - "reference": "338f633e6487e76b255470d3373fbc29228aa971", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/8c104366459739f3ada0e994bcd3e6fd681ce3d5", + "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5", "shasum": "" }, "require": { @@ -2336,20 +2417,20 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2023-09-07T15:46:33+00:00" + "time": "2023-12-19T18:44:48+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.1", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902" + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902", - "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", "shasum": "" }, "require": { @@ -2396,34 +2477,34 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-07-14T13:56:28+00:00" + "time": "2023-11-08T14:08:06+00:00" }, { "name": "laravel/slack-notification-channel", - "version": "v3.0.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/laravel/slack-notification-channel.git", - "reference": "dc5742f91f10a5ec21d32541ceb509f1e8e4c94f" + "reference": "fc8d1873e3db63a480bc57aebb4bf5ec05332d91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/dc5742f91f10a5ec21d32541ceb509f1e8e4c94f", - "reference": "dc5742f91f10a5ec21d32541ceb509f1e8e4c94f", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/fc8d1873e3db63a480bc57aebb4bf5ec05332d91", + "reference": "fc8d1873e3db63a480bc57aebb4bf5ec05332d91", "shasum": "" }, "require": { "guzzlehttp/guzzle": "^7.0", - "illuminate/http": "^9.0|^10.0", - "illuminate/notifications": "^9.0|^10.0", - "illuminate/support": "^9.0|^10.0", + "illuminate/http": "^9.0|^10.0|^11.0", + "illuminate/notifications": "^9.0|^10.0|^11.0", + "illuminate/support": "^9.0|^10.0|^11.0", "php": "^8.0" }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.0|^8.0", + "orchestra/testbench": "^7.0|^8.0|^9.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.0|^10.4" }, "type": "library", "extra": { @@ -2459,34 +2540,34 @@ ], "support": { "issues": "https://github.com/laravel/slack-notification-channel/issues", - "source": "https://github.com/laravel/slack-notification-channel/tree/v3.0.1" + "source": "https://github.com/laravel/slack-notification-channel/tree/v3.2.0" }, - "time": "2023-07-25T21:12:45+00:00" + "time": "2024-01-15T20:07:45+00:00" }, { "name": "laravel/ui", - "version": "v4.2.2", + "version": "v4.4.0", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "a58ec468db4a340b33f3426c778784717a2c144b" + "reference": "7335d7049b2cde345c029e9d2de839b80af62bc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/a58ec468db4a340b33f3426c778784717a2c144b", - "reference": "a58ec468db4a340b33f3426c778784717a2c144b", + "url": "https://api.github.com/repos/laravel/ui/zipball/7335d7049b2cde345c029e9d2de839b80af62bc0", + "reference": "7335d7049b2cde345c029e9d2de839b80af62bc0", "shasum": "" }, "require": { - "illuminate/console": "^9.21|^10.0", - "illuminate/filesystem": "^9.21|^10.0", - "illuminate/support": "^9.21|^10.0", - "illuminate/validation": "^9.21|^10.0", + "illuminate/console": "^9.21|^10.0|^11.0", + "illuminate/filesystem": "^9.21|^10.0|^11.0", + "illuminate/support": "^9.21|^10.0|^11.0", + "illuminate/validation": "^9.21|^10.0|^11.0", "php": "^8.0" }, "require-dev": { - "orchestra/testbench": "^7.0|^8.0", - "phpunit/phpunit": "^9.3" + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.3|^10.4" }, "type": "library", "extra": { @@ -2521,40 +2602,40 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v4.2.2" + "source": "https://github.com/laravel/ui/tree/v4.4.0" }, - "time": "2023-05-09T19:47:28+00:00" + "time": "2024-01-12T15:56:45+00:00" }, { "name": "lcobucci/clock", - "version": "3.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "30a854ceb22bd87d83a7a4563b3f6312453945fc" + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/30a854ceb22bd87d83a7a4563b3f6312453945fc", - "reference": "30a854ceb22bd87d83a7a4563b3f6312453945fc", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", "shasum": "" }, "require": { - "php": "~8.2.0", + "php": "~8.2.0 || ~8.3.0", "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "infection/infection": "^0.26", - "lcobucci/coding-standard": "^10.0.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.10.7", + "infection/infection": "^0.27", + "lcobucci/coding-standard": "^11.0.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", "phpstan/phpstan-deprecation-rules": "^1.1.3", - "phpstan/phpstan-phpunit": "^1.3.10", - "phpstan/phpstan-strict-rules": "^1.5.0", - "phpunit/phpunit": "^10.0.17" + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^10.2.3" }, "type": "library", "autoload": { @@ -2575,7 +2656,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/3.1.0" + "source": "https://github.com/lcobucci/clock/tree/3.2.0" }, "funding": [ { @@ -2587,41 +2668,39 @@ "type": "patreon" } ], - "time": "2023-03-20T19:12:25+00:00" + "time": "2023-11-17T17:00:27+00:00" }, { "name": "lcobucci/jwt", - "version": "5.0.0", + "version": "5.2.0", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34" + "reference": "0ba88aed12c04bd2ed9924f500673f32b67a6211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34", - "reference": "47bdb0e0b5d00c2f89ebe33e7e384c77e84e7c34", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/0ba88aed12c04bd2ed9924f500673f32b67a6211", + "reference": "0ba88aed12c04bd2ed9924f500673f32b67a6211", "shasum": "" }, "require": { - "ext-hash": "*", - "ext-json": "*", "ext-openssl": "*", "ext-sodium": "*", - "php": "~8.1.0 || ~8.2.0", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", "psr/clock": "^1.0" }, "require-dev": { - "infection/infection": "^0.26.19", + "infection/infection": "^0.27.0", "lcobucci/clock": "^3.0", - "lcobucci/coding-standard": "^9.0", - "phpbench/phpbench": "^1.2.8", + "lcobucci/coding-standard": "^11.0", + "phpbench/phpbench": "^1.2.9", "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.10.3", - "phpstan/phpstan-deprecation-rules": "^1.1.2", - "phpstan/phpstan-phpunit": "^1.3.8", + "phpstan/phpstan": "^1.10.7", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.10", "phpstan/phpstan-strict-rules": "^1.5.0", - "phpunit/phpunit": "^10.0.12" + "phpunit/phpunit": "^10.2.6" }, "suggest": { "lcobucci/clock": ">= 3.0" @@ -2650,7 +2729,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/5.0.0" + "source": "https://github.com/lcobucci/jwt/tree/5.2.0" }, "funding": [ { @@ -2662,20 +2741,20 @@ "type": "patreon" } ], - "time": "2023-02-25T21:35:16+00:00" + "time": "2023-11-20T21:17:42+00:00" }, { "name": "league/commonmark", - "version": "2.4.1", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", "shasum": "" }, "require": { @@ -2688,7 +2767,7 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", + "commonmark/cmark": "0.30.3", "commonmark/commonmark.js": "0.30.0", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", @@ -2698,10 +2777,10 @@ "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -2768,7 +2847,7 @@ "type": "tidelift" } ], - "time": "2023-08-30T16:55:00+00:00" + "time": "2024-02-02T11:59:32+00:00" }, { "name": "league/config", @@ -2854,35 +2933,36 @@ }, { "name": "league/csv", - "version": "9.11.0", + "version": "9.15.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "33149c4bea4949aa4fa3d03fb11ed28682168b39" + "reference": "fa7e2441c0bc9b2360f4314fd6c954f7ff40d435" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/33149c4bea4949aa4fa3d03fb11ed28682168b39", - "reference": "33149c4bea4949aa4fa3d03fb11ed28682168b39", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/fa7e2441c0bc9b2360f4314fd6c954f7ff40d435", + "reference": "fa7e2441c0bc9b2360f4314fd6c954f7ff40d435", "shasum": "" }, "require": { + "ext-filter": "*", "ext-json": "*", "ext-mbstring": "*", "php": "^8.1.2" }, "require-dev": { - "doctrine/collections": "^2.1.3", + "doctrine/collections": "^2.1.4", "ext-dom": "*", "ext-xdebug": "*", "friendsofphp/php-cs-fixer": "^v3.22.0", - "phpbench/phpbench": "^1.2.14", - "phpstan/phpstan": "^1.10.26", - "phpstan/phpstan-deprecation-rules": "^1.1.3", - "phpstan/phpstan-phpunit": "^1.3.13", - "phpstan/phpstan-strict-rules": "^1.5.1", - "phpunit/phpunit": "^10.3.1", - "symfony/var-dumper": "^6.3.3" + "phpbench/phpbench": "^1.2.15", + "phpstan/phpstan": "^1.10.57", + "phpstan/phpstan-deprecation-rules": "^1.1.4", + "phpstan/phpstan-phpunit": "^1.3.15", + "phpstan/phpstan-strict-rules": "^1.5.2", + "phpunit/phpunit": "^10.5.9", + "symfony/var-dumper": "^6.4.2" }, "suggest": { "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", @@ -2938,7 +3018,7 @@ "type": "github" } ], - "time": "2023-09-23T10:09:54+00:00" + "time": "2024-02-20T20:00:00+00:00" }, { "name": "league/event", @@ -2996,16 +3076,16 @@ }, { "name": "league/flysystem", - "version": "3.17.0", + "version": "3.24.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "bd4c9b26849d82364119c68429541f1631fba94b" + "reference": "b25a361508c407563b34fac6f64a8a17a8819675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/bd4c9b26849d82364119c68429541f1631fba94b", - "reference": "bd4c9b26849d82364119c68429541f1631fba94b", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b25a361508c407563b34fac6f64a8a17a8819675", + "reference": "b25a361508c407563b34fac6f64a8a17a8819675", "shasum": "" }, "require": { @@ -3025,7 +3105,7 @@ "require-dev": { "async-aws/s3": "^1.5 || ^2.0", "async-aws/simple-s3": "^1.1 || ^2.0", - "aws/aws-sdk-php": "^3.220.0", + "aws/aws-sdk-php": "^3.295.10", "composer/semver": "^3.0", "ext-fileinfo": "*", "ext-ftp": "*", @@ -3033,10 +3113,10 @@ "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^3.0.14", - "phpstan/phpstan": "^0.12.26", + "phpseclib/phpseclib": "^3.0.34", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", - "sabre/dav": "^4.3.1" + "sabre/dav": "^4.6.0" }, "type": "library", "autoload": { @@ -3070,7 +3150,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.17.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.24.0" }, "funding": [ { @@ -3082,20 +3162,20 @@ "type": "github" } ], - "time": "2023-10-05T20:15:05+00:00" + "time": "2024-02-04T12:10:17+00:00" }, { "name": "league/flysystem-local", - "version": "3.16.0", + "version": "3.23.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "ec7383f25642e6fd4bb0c9554fc2311245391781" + "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ec7383f25642e6fd4bb0c9554fc2311245391781", - "reference": "ec7383f25642e6fd4bb0c9554fc2311245391781", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/b884d2bf9b53bb4804a56d2df4902bb51e253f00", + "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00", "shasum": "" }, "require": { @@ -3130,7 +3210,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.16.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.1" }, "funding": [ { @@ -3142,7 +3222,7 @@ "type": "github" } ], - "time": "2023-08-30T10:23:59+00:00" + "time": "2024-01-26T18:25:23+00:00" }, { "name": "league/fractal", @@ -3216,16 +3296,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.13.0", + "version": "1.15.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96" + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/a6dfb1194a2946fcdc1f38219445234f65b35c96", - "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", "shasum": "" }, "require": { @@ -3256,7 +3336,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.13.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0" }, "funding": [ { @@ -3268,7 +3348,7 @@ "type": "tidelift" } ], - "time": "2023-08-05T12:09:49+00:00" + "time": "2024-01-28T23:22:08+00:00" }, { "name": "league/oauth2-server", @@ -3360,16 +3440,16 @@ }, { "name": "league/uri", - "version": "7.3.0", + "version": "7.4.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "36743c3961bb82bf93da91917b6bced0358a8d45" + "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/36743c3961bb82bf93da91917b6bced0358a8d45", - "reference": "36743c3961bb82bf93da91917b6bced0358a8d45", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/bf414ba956d902f5d98bf9385fcf63954f09dce5", + "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5", "shasum": "" }, "require": { @@ -3438,7 +3518,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.3.0" + "source": "https://github.com/thephpleague/uri/tree/7.4.0" }, "funding": [ { @@ -3446,20 +3526,20 @@ "type": "github" } ], - "time": "2023-09-09T17:21:43+00:00" + "time": "2023-12-01T06:24:25+00:00" }, { "name": "league/uri-interfaces", - "version": "7.3.0", + "version": "7.4.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "c409b60ed2245ff94c965a8c798a60166db53361" + "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c409b60ed2245ff94c965a8c798a60166db53361", - "reference": "c409b60ed2245ff94c965a8c798a60166db53361", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/bd8c487ec236930f7bbc42b8d374fa882fbba0f3", + "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3", "shasum": "" }, "require": { @@ -3522,7 +3602,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.3.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.0" }, "funding": [ { @@ -3530,20 +3610,20 @@ "type": "github" } ], - "time": "2023-09-09T17:21:43+00:00" + "time": "2023-11-24T15:40:42+00:00" }, { "name": "mailchimp/transactional", - "version": "1.0.50", + "version": "1.0.59", "source": { "type": "git", "url": "https://github.com/mailchimp/mailchimp-transactional-php.git", - "reference": "701b00f538f36a2a5b138f880ab5eebbfeff4b7d" + "reference": "1783927027820dc1c624fd04abf5012a57f96feb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mailchimp/mailchimp-transactional-php/zipball/701b00f538f36a2a5b138f880ab5eebbfeff4b7d", - "reference": "701b00f538f36a2a5b138f880ab5eebbfeff4b7d", + "url": "https://api.github.com/repos/mailchimp/mailchimp-transactional-php/zipball/1783927027820dc1c624fd04abf5012a57f96feb", + "reference": "1783927027820dc1c624fd04abf5012a57f96feb", "shasum": "" }, "require": { @@ -3582,22 +3662,22 @@ "swagger" ], "support": { - "source": "https://github.com/mailchimp/mailchimp-transactional-php/tree/v1.0.50" + "source": "https://github.com/mailchimp/mailchimp-transactional-php/tree/v1.0.59" }, - "time": "2022-11-07T20:12:03+00:00" + "time": "2024-02-10T01:12:26+00:00" }, { "name": "monolog/monolog", - "version": "3.4.0", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "e2392369686d420ca32df3803de28b5d6f76867d" + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d", - "reference": "e2392369686d420ca32df3803de28b5d6f76867d", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448", + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448", "shasum": "" }, "require": { @@ -3673,7 +3753,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.4.0" + "source": "https://github.com/Seldaek/monolog/tree/3.5.0" }, "funding": [ { @@ -3685,23 +3765,24 @@ "type": "tidelift" } ], - "time": "2023-06-21T08:46:11+00:00" + "time": "2023-10-27T15:32:31+00:00" }, { "name": "nesbot/carbon", - "version": "2.71.0", + "version": "2.72.3", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "98276233188583f2ff845a0f992a235472d9466a" + "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/98276233188583f2ff845a0f992a235472d9466a", - "reference": "98276233188583f2ff845a0f992a235472d9466a", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83", + "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83", "shasum": "" }, "require": { + "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", "php": "^7.1.8 || ^8.0", "psr/clock": "^1.0", @@ -3713,8 +3794,8 @@ "psr/clock-implementation": "1.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4", - "doctrine/orm": "^2.7", + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", "ondrejmirtes/better-reflection": "*", @@ -3791,35 +3872,35 @@ "type": "tidelift" } ], - "time": "2023-09-25T11:31:05+00:00" + "time": "2024-01-25T10:35:09+00:00" }, { "name": "nette/schema", - "version": "v1.2.5", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", + "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", "shasum": "" }, "require": { - "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": "7.1 - 8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.3" }, "require-dev": { - "nette/tester": "^2.3 || ^2.4", + "nette/tester": "^2.4", "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.7" + "tracy/tracy": "^2.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -3851,22 +3932,22 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.5" + "source": "https://github.com/nette/schema/tree/v1.3.0" }, - "time": "2023-10-05T20:37:59+00:00" + "time": "2023-12-11T11:54:22+00:00" }, { "name": "nette/utils", - "version": "v4.0.2", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "cead6637226456b35e1175cc53797dd585d85545" + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/cead6637226456b35e1175cc53797dd585d85545", - "reference": "cead6637226456b35e1175cc53797dd585d85545", + "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", "shasum": "" }, "require": { @@ -3937,9 +4018,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.2" + "source": "https://github.com/nette/utils/tree/v4.0.4" }, - "time": "2023-09-19T11:58:07+00:00" + "time": "2024-01-17T16:50:36+00:00" }, { "name": "nunomaduro/collision", @@ -4125,16 +4206,16 @@ }, { "name": "nyholm/psr7", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/Nyholm/psr7.git", - "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be" + "reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/3cb4d163b58589e47b35103e8e5e6a6a475b47be", - "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/aa5fc277a4f5508013d571341ade0c3886d4d00e", + "reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e", "shasum": "" }, "require": { @@ -4187,7 +4268,7 @@ ], "support": { "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.8.0" + "source": "https://github.com/Nyholm/psr7/tree/1.8.1" }, "funding": [ { @@ -4199,7 +4280,7 @@ "type": "github" } ], - "time": "2023-05-02T11:26:24+00:00" + "time": "2023-11-13T09:31:12+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -4320,16 +4401,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.9.1", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", "shasum": "" }, "require": { @@ -4337,7 +4418,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "extra": { @@ -4379,7 +4460,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" }, "funding": [ { @@ -4391,20 +4472,20 @@ "type": "tidelift" } ], - "time": "2023-02-25T19:38:58+00:00" + "time": "2023-11-12T21:59:55+00:00" }, { "name": "phpseclib/phpseclib", - "version": "3.0.23", + "version": "3.0.36", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "866cc78fbd82462ffd880e3f65692afe928bed50" + "reference": "c2fb5136162d4be18fdd4da9980696f3aee96d7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/866cc78fbd82462ffd880e3f65692afe928bed50", - "reference": "866cc78fbd82462ffd880e3f65692afe928bed50", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c2fb5136162d4be18fdd4da9980696f3aee96d7b", + "reference": "c2fb5136162d4be18fdd4da9980696f3aee96d7b", "shasum": "" }, "require": { @@ -4485,7 +4566,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.23" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.36" }, "funding": [ { @@ -4501,7 +4582,7 @@ "type": "tidelift" } ], - "time": "2023-09-18T17:22:01+00:00" + "time": "2024-02-26T05:13:14+00:00" }, { "name": "pragmarx/google2fa", @@ -5341,16 +5422,16 @@ }, { "name": "ramsey/uuid", - "version": "4.7.4", + "version": "4.7.5", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "60a4c63ab724854332900504274f6150ff26d286" + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", - "reference": "60a4c63ab724854332900504274f6150ff26d286", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", "shasum": "" }, "require": { @@ -5417,7 +5498,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.4" + "source": "https://github.com/ramsey/uuid/tree/4.7.5" }, "funding": [ { @@ -5429,7 +5510,7 @@ "type": "tidelift" } ], - "time": "2023-04-15T23:01:58+00:00" + "time": "2023-11-08T05:53:05+00:00" }, { "name": "rcrowe/twigbridge", @@ -5571,35 +5652,34 @@ }, { "name": "spatie/flare-client-php", - "version": "1.4.2", + "version": "1.4.4", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544" + "reference": "17082e780752d346c2db12ef5d6bee8e835e399c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5f2c6a7a0d2c1d90c12559dc7828fd942911a544", - "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/17082e780752d346c2db12ef5d6bee8e835e399c", + "reference": "17082e780752d346c2db12ef5d6bee8e835e399c", "shasum": "" }, "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0", - "nesbot/carbon": "^2.62.1", + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", "php": "^8.0", "spatie/backtrace": "^1.5.2", - "symfony/http-foundation": "^5.0|^6.0", - "symfony/mime": "^5.2|^6.0", - "symfony/process": "^5.2|^6.0", - "symfony/var-dumper": "^5.2|^6.0" + "symfony/http-foundation": "^5.2|^6.0|^7.0", + "symfony/mime": "^5.2|^6.0|^7.0", + "symfony/process": "^5.2|^6.0|^7.0", + "symfony/var-dumper": "^5.2|^6.0|^7.0" }, "require-dev": { - "dms/phpunit-arraysubset-asserts": "^0.3.0", - "pestphp/pest": "^1.20", + "dms/phpunit-arraysubset-asserts": "^0.5.0", + "pestphp/pest": "^1.20|^2.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", - "spatie/phpunit-snapshot-assertions": "^4.0" + "spatie/phpunit-snapshot-assertions": "^4.0|^5.0" }, "type": "library", "extra": { @@ -5629,7 +5709,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.4.2" + "source": "https://github.com/spatie/flare-client-php/tree/1.4.4" }, "funding": [ { @@ -5637,20 +5717,20 @@ "type": "github" } ], - "time": "2023-07-28T08:07:24+00:00" + "time": "2024-01-31T14:18:45+00:00" }, { "name": "spatie/ignition", - "version": "1.11.2", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "48b23411ca4bfbc75c75dfc638b6b36159c375aa" + "reference": "5b6f801c605a593106b623e45ca41496a6e7d56d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/48b23411ca4bfbc75c75dfc638b6b36159c375aa", - "reference": "48b23411ca4bfbc75c75dfc638b6b36159c375aa", + "url": "https://api.github.com/repos/spatie/ignition/zipball/5b6f801c605a593106b623e45ca41496a6e7d56d", + "reference": "5b6f801c605a593106b623e45ca41496a6e7d56d", "shasum": "" }, "require": { @@ -5659,19 +5739,19 @@ "php": "^8.0", "spatie/backtrace": "^1.5.3", "spatie/flare-client-php": "^1.4.0", - "symfony/console": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "require-dev": { - "illuminate/cache": "^9.52", + "illuminate/cache": "^9.52|^10.0|^11.0", "mockery/mockery": "^1.4", - "pestphp/pest": "^1.20", + "pestphp/pest": "^1.20|^2.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", "psr/simple-cache-implementation": "*", - "symfony/cache": "^6.0", - "symfony/process": "^5.4|^6.0", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", "vlucas/phpdotenv": "^5.5" }, "suggest": { @@ -5720,20 +5800,20 @@ "type": "github" } ], - "time": "2023-09-19T15:29:52+00:00" + "time": "2024-01-03T15:49:39+00:00" }, { "name": "spatie/laravel-html", - "version": "3.2.2", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-html.git", - "reference": "f9dac9f250735dd01d80e023f5acf6f3d10d3b3f" + "reference": "ead179a8b6802647027486049f5209bd23b610a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-html/zipball/f9dac9f250735dd01d80e023f5acf6f3d10d3b3f", - "reference": "f9dac9f250735dd01d80e023f5acf6f3d10d3b3f", + "url": "https://api.github.com/repos/spatie/laravel-html/zipball/ead179a8b6802647027486049f5209bd23b610a9", + "reference": "ead179a8b6802647027486049f5209bd23b610a9", "shasum": "" }, "require": { @@ -5790,7 +5870,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/laravel-html/tree/3.2.2" + "source": "https://github.com/spatie/laravel-html/tree/3.5.0" }, "funding": [ { @@ -5798,39 +5878,39 @@ "type": "custom" } ], - "time": "2023-07-20T18:59:53+00:00" + "time": "2024-02-20T15:17:00+00:00" }, { "name": "spatie/laravel-ignition", - "version": "2.3.1", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "bf21cd15aa47fa4ec5d73bbc932005c70261efc8" + "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/bf21cd15aa47fa4ec5d73bbc932005c70261efc8", - "reference": "bf21cd15aa47fa4ec5d73bbc932005c70261efc8", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/351504f4570e32908839fc5a2dc53bf77d02f85e", + "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "illuminate/support": "^10.0", + "illuminate/support": "^10.0|^11.0", "php": "^8.1", "spatie/flare-client-php": "^1.3.5", "spatie/ignition": "^1.9", - "symfony/console": "^6.2.3", - "symfony/var-dumper": "^6.2.3" + "symfony/console": "^6.2.3|^7.0", + "symfony/var-dumper": "^6.2.3|^7.0" }, "require-dev": { - "livewire/livewire": "^2.11", + "livewire/livewire": "^2.11|^3.3.5", "mockery/mockery": "^1.5.1", - "openai-php/client": "^0.3.4", - "orchestra/testbench": "^8.0", - "pestphp/pest": "^1.22.3", + "openai-php/client": "^0.8.1", + "orchestra/testbench": "^8.0|^9.0", + "pestphp/pest": "^2.30", "phpstan/extension-installer": "^1.2", "phpstan/phpstan-deprecation-rules": "^1.1.1", "phpstan/phpstan-phpunit": "^1.3.3", @@ -5890,7 +5970,7 @@ "type": "github" } ], - "time": "2023-10-09T12:55:26+00:00" + "time": "2024-02-09T16:08:40+00:00" }, { "name": "spatie/period", @@ -6120,16 +6200,16 @@ }, { "name": "symfony/console", - "version": "v6.3.4", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + "reference": "0d9e4eb5ad413075624378f474c4167ea202de78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78", + "reference": "0d9e4eb5ad413075624378f474c4167ea202de78", "shasum": "" }, "require": { @@ -6137,7 +6217,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { "symfony/dependency-injection": "<5.4", @@ -6151,12 +6231,16 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -6190,7 +6274,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.4" + "source": "https://github.com/symfony/console/tree/v6.4.4" }, "funding": [ { @@ -6206,24 +6290,24 @@ "type": "tidelift" } ], - "time": "2023-08-16T10:10:12+00:00" + "time": "2024-02-22T20:27:10+00:00" }, { "name": "symfony/css-selector", - "version": "v6.3.2", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57" + "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ec60a4edf94e63b0556b6a0888548bb400a3a3be", + "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -6255,7 +6339,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.3.2" + "source": "https://github.com/symfony/css-selector/tree/v7.0.3" }, "funding": [ { @@ -6271,11 +6355,11 @@ "type": "tidelift" } ], - "time": "2023-07-12T16:00:22+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -6322,7 +6406,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -6342,30 +6426,31 @@ }, { "name": "symfony/error-handler", - "version": "v6.3.5", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "1f69476b64fb47105c06beef757766c376b548c4" + "reference": "c725219bdf2afc59423c32793d5019d2a904e13a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/1f69476b64fb47105c06beef757766c376b548c4", - "reference": "1f69476b64fb47105c06beef757766c376b548c4", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c725219bdf2afc59423c32793d5019d2a904e13a", + "reference": "c725219bdf2afc59423c32793d5019d2a904e13a", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5" + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -6396,7 +6481,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.3.5" + "source": "https://github.com/symfony/error-handler/tree/v6.4.4" }, "funding": [ { @@ -6412,28 +6497,28 @@ "type": "tidelift" } ], - "time": "2023-09-12T06:57:20+00:00" + "time": "2024-02-22T20:27:10+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.3.2", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e", + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -6442,13 +6527,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6476,7 +6561,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3" }, "funding": [ { @@ -6492,11 +6577,11 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -6552,7 +6637,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -6572,21 +6657,21 @@ }, { "name": "symfony/expression-language", - "version": "v6.3.0", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "6d560c4c80e7e328708efd923f93ad67e6a0c1c0" + "reference": "b4a4ae33fbb33a99d23c5698faaecadb76ad0fe4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/6d560c4c80e7e328708efd923f93ad67e6a0c1c0", - "reference": "6d560c4c80e7e328708efd923f93ad67e6a0c1c0", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/b4a4ae33fbb33a99d23c5698faaecadb76ad0fe4", + "reference": "b4a4ae33fbb33a99d23c5698faaecadb76ad0fe4", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/cache": "^5.4|^6.0", + "symfony/cache": "^5.4|^6.0|^7.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3" }, @@ -6616,7 +6701,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v6.3.0" + "source": "https://github.com/symfony/expression-language/tree/v6.4.3" }, "funding": [ { @@ -6632,27 +6717,27 @@ "type": "tidelift" } ], - "time": "2023-04-28T16:05:33+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/finder", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", + "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -6680,7 +6765,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.5" + "source": "https://github.com/symfony/finder/tree/v6.4.0" }, "funding": [ { @@ -6696,32 +6781,31 @@ "type": "tidelift" } ], - "time": "2023-09-26T12:56:25+00:00" + "time": "2023-10-31T17:30:12+00:00" }, { "name": "symfony/http-client", - "version": "v6.3.5", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "213e564da4cbf61acc9728d97e666bcdb868c10d" + "reference": "8384876f49a2316a63f88a9cd12436de6936bee6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/213e564da4cbf61acc9728d97e666bcdb868c10d", - "reference": "213e564da4cbf61acc9728d97e666bcdb868c10d", + "url": "https://api.github.com/repos/symfony/http-client/zipball/8384876f49a2316a63f88a9cd12436de6936bee6", + "reference": "8384876f49a2316a63f88a9cd12436de6936bee6", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-client-contracts": "^3", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "php-http/discovery": "<1.15", - "symfony/http-foundation": "<6.3" + "symfony/http-foundation": "<6.4" }, "provide": { "php-http/async-client-implementation": "*", @@ -6738,10 +6822,11 @@ "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6772,7 +6857,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.3.5" + "source": "https://github.com/symfony/http-client/tree/v7.0.4" }, "funding": [ { @@ -6788,20 +6873,20 @@ "type": "tidelift" } ], - "time": "2023-09-29T15:57:12+00:00" + "time": "2024-02-15T11:33:06+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb" + "reference": "1ee70e699b41909c209a0c930f11034b93578654" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/3b66325d0176b4ec826bffab57c9037d759c31fb", - "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/1ee70e699b41909c209a0c930f11034b93578654", + "reference": "1ee70e699b41909c209a0c930f11034b93578654", "shasum": "" }, "require": { @@ -6850,7 +6935,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.4.0" }, "funding": [ { @@ -6866,20 +6951,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-07-30T20:28:31+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.3.5", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b50f5e281d722cb0f4c296f908bacc3e2b721957" + "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b50f5e281d722cb0f4c296f908bacc3e2b721957", - "reference": "b50f5e281d722cb0f4c296f908bacc3e2b721957", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ebc713bc6e6f4b53f46539fc158be85dfcd77304", + "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304", "shasum": "" }, "require": { @@ -6889,17 +6974,17 @@ "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.2" + "symfony/cache": "<6.3" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3.0", + "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "symfony/cache": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -6927,7 +7012,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.5" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.4" }, "funding": [ { @@ -6943,29 +7028,29 @@ "type": "tidelift" } ], - "time": "2023-09-04T21:33:54+00:00" + "time": "2024-02-08T15:01:18+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.5", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "9f991a964368bee8d883e8d57ced4fe9fff04dfc" + "reference": "7a186f64a7f02787c04e8476538624d6aa888e42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f991a964368bee8d883e8d57ced4fe9fff04dfc", - "reference": "9f991a964368bee8d883e8d57ced4fe9fff04dfc", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7a186f64a7f02787c04e8476538624d6aa888e42", + "reference": "7a186f64a7f02787c04e8476538624d6aa888e42", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^6.3.4", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -6973,7 +7058,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.3.4", + "symfony/dependency-injection": "<6.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -6983,7 +7068,7 @@ "symfony/translation": "<5.4", "symfony/translation-contracts": "<2.5", "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", + "symfony/validator": "<6.4", "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, @@ -6992,26 +7077,26 @@ }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/clock": "^6.2", - "symfony/config": "^6.1", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.3.4", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0", - "symfony/property-access": "^5.4.5|^6.0.5", - "symfony/routing": "^5.4|^6.0", - "symfony/serializer": "^6.3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0", - "symfony/validator": "^6.3", - "symfony/var-exporter": "^6.2", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", "twig/twig": "^2.13|^3.0.4" }, "type": "library", @@ -7040,7 +7125,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.3.5" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.4" }, "funding": [ { @@ -7056,20 +7141,20 @@ "type": "tidelift" } ], - "time": "2023-09-30T06:37:04+00:00" + "time": "2024-02-27T06:32:13+00:00" }, { "name": "symfony/mailer", - "version": "v6.3.5", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06" + "reference": "791c5d31a8204cf3db0c66faab70282307f4376b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/d89611a7830d51b5e118bca38e390dea92f9ea06", - "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06", + "url": "https://api.github.com/repos/symfony/mailer/zipball/791c5d31a8204cf3db0c66faab70282307f4376b", + "reference": "791c5d31a8204cf3db0c66faab70282307f4376b", "shasum": "" }, "require": { @@ -7077,8 +7162,8 @@ "php": ">=8.1", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^6.2", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -7089,10 +7174,10 @@ "symfony/twig-bridge": "<6.2.1" }, "require-dev": { - "symfony/console": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/messenger": "^6.2", - "symfony/twig-bridge": "^6.2" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" }, "type": "library", "autoload": { @@ -7120,7 +7205,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.3.5" + "source": "https://github.com/symfony/mailer/tree/v6.4.4" }, "funding": [ { @@ -7136,32 +7221,32 @@ "type": "tidelift" } ], - "time": "2023-09-06T09:47:15+00:00" + "time": "2024-02-03T21:33:47+00:00" }, { "name": "symfony/mailgun-mailer", - "version": "v6.3.5", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/mailgun-mailer.git", - "reference": "b467aba49c8240a71f7027c213d9d140ba1abce7" + "reference": "96df0d3815dc72367ecc38c4a82d8021f8bddd4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/b467aba49c8240a71f7027c213d9d140ba1abce7", - "reference": "b467aba49c8240a71f7027c213d9d140ba1abce7", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/96df0d3815dc72367ecc38c4a82d8021f8bddd4e", + "reference": "96df0d3815dc72367ecc38c4a82d8021f8bddd4e", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/mailer": "^5.4.21|^6.2.7" + "php": ">=8.2", + "symfony/mailer": "^6.4|^7.0" }, "conflict": { - "symfony/http-foundation": "<6.2" + "symfony/http-foundation": "<6.4" }, "require-dev": { - "symfony/http-client": "^5.4|^6.0", - "symfony/webhook": "^6.3" + "symfony/http-client": "^6.4|^7.0", + "symfony/webhook": "^6.4|^7.0" }, "type": "symfony-mailer-bridge", "autoload": { @@ -7189,7 +7274,7 @@ "description": "Symfony Mailgun Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailgun-mailer/tree/v6.3.5" + "source": "https://github.com/symfony/mailgun-mailer/tree/v7.0.4" }, "funding": [ { @@ -7205,20 +7290,20 @@ "type": "tidelift" } ], - "time": "2023-09-29T17:30:10+00:00" + "time": "2024-02-15T11:33:06+00:00" }, { "name": "symfony/mime", - "version": "v6.3.5", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e" + "reference": "5017e0a9398c77090b7694be46f20eb796262a34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d5179eedf1cb2946dbd760475ebf05c251ef6a6e", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e", + "url": "https://api.github.com/repos/symfony/mime/zipball/5017e0a9398c77090b7694be46f20eb796262a34", + "reference": "5017e0a9398c77090b7694be46f20eb796262a34", "shasum": "" }, "require": { @@ -7232,16 +7317,16 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" + "symfony/serializer": "<6.3.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "~6.2.13|^6.3.2" + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3.2|^7.0" }, "type": "library", "autoload": { @@ -7273,7 +7358,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.3.5" + "source": "https://github.com/symfony/mime/tree/v6.4.3" }, "funding": [ { @@ -7289,20 +7374,20 @@ "type": "tidelift" } ], - "time": "2023-09-29T06:59:36+00:00" + "time": "2024-01-30T08:32:12+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -7316,9 +7401,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7355,7 +7437,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -7371,20 +7453,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -7395,9 +7477,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7436,7 +7515,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -7452,20 +7531,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", "shasum": "" }, "require": { @@ -7478,9 +7557,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7523,7 +7599,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" }, "funding": [ { @@ -7539,20 +7615,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:30:37+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { @@ -7563,9 +7639,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7607,7 +7680,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { @@ -7623,20 +7696,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -7650,9 +7723,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7690,7 +7760,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -7706,20 +7776,20 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", "shasum": "" }, "require": { @@ -7727,9 +7797,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7766,7 +7833,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" }, "funding": [ { @@ -7782,20 +7849,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { @@ -7803,9 +7870,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7849,7 +7913,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -7865,20 +7929,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", "shasum": "" }, "require": { @@ -7887,9 +7951,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -7929,7 +7990,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" }, "funding": [ { @@ -7945,20 +8006,20 @@ "type": "tidelift" } ], - "time": "2023-08-16T06:22:46+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853", "shasum": "" }, "require": { @@ -7972,9 +8033,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -8011,7 +8069,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0" }, "funding": [ { @@ -8027,20 +8085,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/process", - "version": "v6.3.4", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + "reference": "710e27879e9be3395de2b98da3f52a946039f297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", + "reference": "710e27879e9be3395de2b98da3f52a946039f297", "shasum": "" }, "require": { @@ -8072,7 +8130,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.4" + "source": "https://github.com/symfony/process/tree/v6.4.4" }, "funding": [ { @@ -8088,7 +8146,7 @@ "type": "tidelift" } ], - "time": "2023-08-07T10:39:22+00:00" + "time": "2024-02-20T12:31:00+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -8181,16 +8239,16 @@ }, { "name": "symfony/routing", - "version": "v6.3.5", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31" + "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/82616e59acd3e3d9c916bba798326cb7796d7d31", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31", + "url": "https://api.github.com/repos/symfony/routing/zipball/3b2957ad54902f0f544df83e3d58b38d7e8e5842", + "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842", "shasum": "" }, "require": { @@ -8206,11 +8264,11 @@ "require-dev": { "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8244,7 +8302,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.3.5" + "source": "https://github.com/symfony/routing/tree/v6.4.3" }, "funding": [ { @@ -8260,25 +8318,25 @@ "type": "tidelift" } ], - "time": "2023-09-20T16:05:51+00:00" + "time": "2024-01-30T13:55:02+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -8326,7 +8384,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" }, "funding": [ { @@ -8342,24 +8400,24 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/string", - "version": "v6.3.5", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339" + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/13d76d0fb049051ed12a04bef4f9de8715bea339", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339", + "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b", + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -8369,11 +8427,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -8412,7 +8470,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.5" + "source": "https://github.com/symfony/string/tree/v7.0.4" }, "funding": [ { @@ -8428,20 +8486,20 @@ "type": "tidelift" } ], - "time": "2023-09-18T10:38:32+00:00" + "time": "2024-02-01T13:17:36+00:00" }, { "name": "symfony/translation", - "version": "v6.3.3", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd" + "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", - "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e", + "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e", "shasum": "" }, "require": { @@ -8464,19 +8522,19 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.13", + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0" + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8507,7 +8565,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.3.3" + "source": "https://github.com/symfony/translation/tree/v6.4.4" }, "funding": [ { @@ -8523,20 +8581,20 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2024-02-20T13:16:58+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.3.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" + "reference": "06450585bf65e978026bda220cdebca3f867fde7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7", + "reference": "06450585bf65e978026bda220cdebca3f867fde7", "shasum": "" }, "require": { @@ -8585,7 +8643,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.1" }, "funding": [ { @@ -8601,20 +8659,20 @@ "type": "tidelift" } ], - "time": "2023-05-30T17:17:10+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/uid", - "version": "v6.3.0", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384" + "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/01b0f20b1351d997711c56f1638f7a8c3061e384", - "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384", + "url": "https://api.github.com/repos/symfony/uid/zipball/1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", + "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", "shasum": "" }, "require": { @@ -8622,7 +8680,7 @@ "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8659,7 +8717,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.3.0" + "source": "https://github.com/symfony/uid/tree/v6.4.3" }, "funding": [ { @@ -8675,20 +8733,20 @@ "type": "tidelift" } ], - "time": "2023-04-08T07:25:02+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.5", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "3d9999376be5fea8de47752837a3e1d1c5f69ef5" + "reference": "b439823f04c98b84d4366c79507e9da6230944b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3d9999376be5fea8de47752837a3e1d1c5f69ef5", - "reference": "3d9999376be5fea8de47752837a3e1d1c5f69ef5", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b439823f04c98b84d4366c79507e9da6230944b1", + "reference": "b439823f04c98b84d4366c79507e9da6230944b1", "shasum": "" }, "require": { @@ -8701,10 +8759,11 @@ }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", "twig/twig": "^2.13|^3.0.4" }, "bin": [ @@ -8743,7 +8802,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.5" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.4" }, "funding": [ { @@ -8759,7 +8818,7 @@ "type": "tidelift" } ], - "time": "2023-09-12T10:11:35+00:00" + "time": "2024-02-15T11:23:52+00:00" }, { "name": "symfony/var-exporter", @@ -8899,23 +8958,23 @@ }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.6", + "version": "v2.2.7", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" @@ -8946,32 +9005,33 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" }, - "time": "2023-01-03T09:29:04+00:00" + "time": "2023-12-08T13:03:43+00:00" }, { "name": "twig/twig", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554" + "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", - "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", + "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.22" }, "require-dev": { "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.3" + "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0" }, "type": "library", "autoload": { @@ -9007,7 +9067,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.7.1" + "source": "https://github.com/twigphp/Twig/tree/v3.8.0" }, "funding": [ { @@ -9019,35 +9079,35 @@ "type": "tidelift" } ], - "time": "2023-08-28T11:09:02+00:00" + "time": "2023-11-21T18:54:41+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.5.0", + "version": "v5.6.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" + "graham-campbell/result-type": "^1.1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -9059,7 +9119,7 @@ "forward-command": true }, "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -9091,7 +9151,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" }, "funding": [ { @@ -9103,7 +9163,7 @@ "type": "tidelift" } ], - "time": "2022-10-16T01:01:54+00:00" + "time": "2023-11-12T22:43:29+00:00" }, { "name": "voku/portable-ascii", @@ -9240,41 +9300,125 @@ ], "packages-dev": [ { - "name": "barryvdh/laravel-ide-helper", - "version": "v2.13.0", + "name": "barryvdh/laravel-debugbar", + "version": "v3.10.6", "source": { "type": "git", - "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "81d5b223ff067a1f38e14c100997e153b837fe4a" + "url": "https://github.com/barryvdh/laravel-debugbar.git", + "reference": "1fcb37307ebb32207dce16fa160a92b14d8b671f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/81d5b223ff067a1f38e14c100997e153b837fe4a", - "reference": "81d5b223ff067a1f38e14c100997e153b837fe4a", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/1fcb37307ebb32207dce16fa160a92b14d8b671f", + "reference": "1fcb37307ebb32207dce16fa160a92b14d8b671f", + "shasum": "" + }, + "require": { + "illuminate/routing": "^9|^10|^11", + "illuminate/session": "^9|^10|^11", + "illuminate/support": "^9|^10|^11", + "maximebf/debugbar": "~1.20.1", + "php": "^8.0", + "symfony/finder": "^6|^7" + }, + "require-dev": { + "mockery/mockery": "^1.3.3", + "orchestra/testbench-dusk": "^5|^6|^7|^8|^9", + "phpunit/phpunit": "^9.6|^10.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.10-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ], + "aliases": { + "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Barryvdh\\Debugbar\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "PHP Debugbar integration for Laravel", + "keywords": [ + "debug", + "debugbar", + "laravel", + "profiler", + "webprofiler" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-debugbar/issues", + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.10.6" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2024-03-01T14:41:13+00:00" + }, + { + "name": "barryvdh/laravel-ide-helper", + "version": "v2.15.1", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-ide-helper.git", + "reference": "77831852bb7bc54f287246d32eb91274eaf87f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/77831852bb7bc54f287246d32eb91274eaf87f8b", + "reference": "77831852bb7bc54f287246d32eb91274eaf87f8b", "shasum": "" }, "require": { "barryvdh/reflection-docblock": "^2.0.6", "composer/class-map-generator": "^1.0", - "doctrine/dbal": "^2.6 || ^3", + "doctrine/dbal": "^2.6 || ^3.1.4", "ext-json": "*", - "illuminate/console": "^8 || ^9 || ^10", - "illuminate/filesystem": "^8 || ^9 || ^10", - "illuminate/support": "^8 || ^9 || ^10", - "nikic/php-parser": "^4.7", - "php": "^7.3 || ^8.0", + "illuminate/console": "^9 || ^10", + "illuminate/filesystem": "^9 || ^10", + "illuminate/support": "^9 || ^10", + "nikic/php-parser": "^4.18 || ^5", + "php": "^8.0", "phpdocumentor/type-resolver": "^1.1.0" }, "require-dev": { "ext-pdo_sqlite": "*", - "friendsofphp/php-cs-fixer": "^2", - "illuminate/config": "^8 || ^9 || ^10", - "illuminate/view": "^8 || ^9 || ^10", + "friendsofphp/php-cs-fixer": "^3", + "illuminate/config": "^9 || ^10", + "illuminate/view": "^9 || ^10", "mockery/mockery": "^1.4", - "orchestra/testbench": "^6 || ^7 || ^8", - "phpunit/phpunit": "^8.5 || ^9", - "spatie/phpunit-snapshot-assertions": "^3 || ^4", - "vimeo/psalm": "^3.12" + "orchestra/testbench": "^7 || ^8", + "phpunit/phpunit": "^9", + "spatie/phpunit-snapshot-assertions": "^4", + "vimeo/psalm": "^5.4" }, "suggest": { "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10)." @@ -9282,7 +9426,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.12-dev" + "dev-master": "2.15-dev" }, "laravel": { "providers": [ @@ -9319,7 +9463,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.13.0" + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.15.1" }, "funding": [ { @@ -9331,7 +9475,7 @@ "type": "github" } ], - "time": "2023-02-04T13:56:40+00:00" + "time": "2024-02-15T14:23:20+00:00" }, { "name": "barryvdh/reflection-docblock", @@ -9531,39 +9675,38 @@ }, { "name": "ergebnis/phpstan-rules", - "version": "2.1.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/ergebnis/phpstan-rules.git", - "reference": "119e229c48688946450ccca9f1c57c9ca4fb6f02" + "reference": "2e9946491d39ea1eb043738309895e08f025a7a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/119e229c48688946450ccca9f1c57c9ca4fb6f02", - "reference": "119e229c48688946450ccca9f1c57c9ca4fb6f02", + "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/2e9946491d39ea1eb043738309895e08f025a7a0", + "reference": "2e9946491d39ea1eb043738309895e08f025a7a0", "shasum": "" }, "require": { "ext-mbstring": "*", - "nikic/php-parser": "^4.2.3", + "nikic/php-parser": "^4.2.3 || ^5.0.0", "php": "~8.1.0 || ~8.2.0 || ~8.3.0", "phpstan/phpstan": "^1.10.21" }, "require-dev": { - "doctrine/orm": "^2.16.1", - "ergebnis/composer-normalize": "^2.35.0", - "ergebnis/license": "^2.1.0", - "ergebnis/php-cs-fixer-config": "^5.13.0", - "ergebnis/phpunit-slow-test-detector": "^2.3.0", - "infection/infection": "~0.27.0", - "nette/di": "^3.1.3", + "doctrine/orm": "^3.0.0", + "ergebnis/composer-normalize": "^2.42.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.22.0", + "ergebnis/phpunit-slow-test-detector": "^2.10.0", + "nette/di": "^3.2.0", "phpstan/phpstan-deprecation-rules": "^1.1.4", - "phpstan/phpstan-strict-rules": "^1.1.0", - "phpunit/phpunit": "^10.3.2", + "phpstan/phpstan-strict-rules": "^1.5.2", + "phpunit/phpunit": "^10.5.10", "psalm/plugin-phpunit": "~0.18.4", - "psr/container": "^1.1.2", - "rector/rector": "~0.17.13", - "vimeo/psalm": "^5.14.1" + "psr/container": "^2.0.2", + "rector/rector": "^1.0.0", + "vimeo/psalm": "^5.21.1" }, "type": "phpstan-extension", "extra": { @@ -9585,34 +9728,35 @@ "authors": [ { "name": "Andreas Möller", - "email": "am@localheinz.com" + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" } ], - "description": "Provides additional rules for phpstan/phpstan.", + "description": "Provides rules for phpstan/phpstan.", "homepage": "https://github.com/ergebnis/phpstan-rules", "keywords": [ "PHPStan", - "phpstan-extreme-rules", "phpstan-rules" ], "support": { "issues": "https://github.com/ergebnis/phpstan-rules/issues", + "security": "https://github.com/ergebnis/phpstan-rules/blob/main/.github/SECURITY.md", "source": "https://github.com/ergebnis/phpstan-rules" }, - "time": "2023-08-17T10:28:37+00:00" + "time": "2024-02-07T17:49:28+00:00" }, { "name": "fakerphp/faker", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", "shasum": "" }, "require": { @@ -9638,11 +9782,6 @@ "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, "autoload": { "psr-4": { "Faker\\": "src/Faker/" @@ -9665,9 +9804,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" }, - "time": "2023-06-12T08:44:38+00:00" + "time": "2024-01-02T13:46:09+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -9721,17 +9860,185 @@ "time": "2020-07-09T08:09:16+00:00" }, { - "name": "mockery/mockery", - "version": "1.6.6", + "name": "larastan/larastan", + "version": "v2.9.2", "source": { "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" + "url": "https://github.com/larastan/larastan.git", + "reference": "a79b46b96060504b400890674b83f66aa7f5db6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", + "url": "https://api.github.com/repos/larastan/larastan/zipball/a79b46b96060504b400890674b83f66aa7f5db6d", + "reference": "a79b46b96060504b400890674b83f66aa7f5db6d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", + "php": "^8.0.2", + "phpmyadmin/sql-parser": "^5.8.2", + "phpstan/phpstan": "^1.10.50" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0", + "nikic/php-parser": "^4.17.1", + "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.0", + "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.0", + "phpunit/phpunit": "^9.6.13 || ^10.5" + }, + "suggest": { + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Larastan\\Larastan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Can Vural", + "email": "can9119@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", + "keywords": [ + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" + ], + "support": { + "issues": "https://github.com/larastan/larastan/issues", + "source": "https://github.com/larastan/larastan/tree/v2.9.2" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/canvural", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2024-02-27T03:16:03+00:00" + }, + { + "name": "maximebf/debugbar", + "version": "v1.20.2", + "source": { + "type": "git", + "url": "https://github.com/maximebf/php-debugbar.git", + "reference": "484625c23a4fa4f303617f29fcacd42951c9c01d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/484625c23a4fa4f303617f29fcacd42951c9c01d", + "reference": "484625c23a4fa4f303617f29fcacd42951c9c01d", + "shasum": "" + }, + "require": { + "php": "^7.1|^8", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4|^5|^6|^7" + }, + "require-dev": { + "phpunit/phpunit": ">=7.5.20 <10.0", + "twig/twig": "^1.38|^2.7|^3.0" + }, + "suggest": { + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.20-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\": "src/DebugBar/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/maximebf/php-debugbar", + "keywords": [ + "debug", + "debugbar" + ], + "support": { + "issues": "https://github.com/maximebf/php-debugbar/issues", + "source": "https://github.com/maximebf/php-debugbar/tree/v1.20.2" + }, + "time": "2024-02-15T10:49:09+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.7", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", + "reference": "0cc058854b3195ba21dc6b1f7b1f60f4ef3a9c06", "shasum": "" }, "require": { @@ -9744,9 +10051,7 @@ }, "require-dev": { "phpunit/phpunit": "^8.5 || ^9.6.10", - "psalm/plugin-phpunit": "^0.18.4", - "symplify/easy-coding-standard": "^11.5.0", - "vimeo/psalm": "^4.30" + "symplify/easy-coding-standard": "^12.0.8" }, "type": "library", "autoload": { @@ -9803,7 +10108,7 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2023-08-09T00:03:52+00:00" + "time": "2023-12-10T02:24:34+00:00" }, { "name": "myclabs/deep-copy", @@ -9866,25 +10171,27 @@ }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v5.0.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "2218c2252c874a4624ab2f613d86ac32d227bc69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/2218c2252c874a4624ab2f613d86ac32d227bc69", + "reference": "2218c2252c874a4624ab2f613d86ac32d227bc69", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -9892,7 +10199,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -9916,105 +10223,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.1" }, - "time": "2023-08-13T19:53:39+00:00" - }, - { - "name": "nunomaduro/larastan", - "version": "v2.6.4", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/larastan.git", - "reference": "6c5e8820f3db6397546f3ce48520af9d312aed27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/6c5e8820f3db6397546f3ce48520af9d312aed27", - "reference": "6c5e8820f3db6397546f3ce48520af9d312aed27", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/console": "^9.47.0 || ^10.0.0", - "illuminate/container": "^9.47.0 || ^10.0.0", - "illuminate/contracts": "^9.47.0 || ^10.0.0", - "illuminate/database": "^9.47.0 || ^10.0.0", - "illuminate/http": "^9.47.0 || ^10.0.0", - "illuminate/pipeline": "^9.47.0 || ^10.0.0", - "illuminate/support": "^9.47.0 || ^10.0.0", - "php": "^8.0.2", - "phpmyadmin/sql-parser": "^5.6.0", - "phpstan/phpstan": "~1.10.6" - }, - "require-dev": { - "nikic/php-parser": "^4.15.2", - "orchestra/testbench": "^7.19.0 || ^8.0.0", - "phpunit/phpunit": "^9.5.27" - }, - "suggest": { - "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "NunoMaduro\\Larastan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", - "keywords": [ - "PHPStan", - "code analyse", - "code analysis", - "larastan", - "laravel", - "package", - "php", - "static analysis" - ], - "support": { - "issues": "https://github.com/nunomaduro/larastan/issues", - "source": "https://github.com/nunomaduro/larastan/tree/v2.6.4" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/canvural", - "type": "github" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2023-07-29T12:13:13+00:00" + "time": "2024-02-21T19:24:10+00:00" }, { "name": "phar-io/manifest", @@ -10182,21 +10393,21 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.3", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" + "reference": "153ae662783729388a584b4361f2545e4d841e3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", + "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", "phpstan/phpdoc-parser": "^1.13" }, @@ -10234,22 +10445,22 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" }, - "time": "2023-08-12T11:01:26+00:00" + "time": "2024-02-23T11:10:43+00:00" }, { "name": "phpmyadmin/sql-parser", - "version": "5.8.2", + "version": "5.9.0", "source": { "type": "git", "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "f1720ae19abe6294cb5599594a8a57bc3c8cc287" + "reference": "011fa18a4e55591fac6545a821921dd1d61c6984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/f1720ae19abe6294cb5599594a8a57bc3c8cc287", - "reference": "f1720ae19abe6294cb5599594a8a57bc3c8cc287", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984", + "reference": "011fa18a4e55591fac6545a821921dd1d61c6984", "shasum": "" }, "require": { @@ -10280,6 +10491,7 @@ "bin": [ "bin/highlight-query", "bin/lint-query", + "bin/sql-parser", "bin/tokenize-query" ], "type": "library", @@ -10323,20 +10535,64 @@ "type": "other" } ], - "time": "2023-09-19T12:34:29+00:00" + "time": "2024-01-20T20:34:02+00:00" }, { - "name": "phpstan/phpdoc-parser", - "version": "1.24.2", + "name": "phpstan/extension-installer", + "version": "1.3.1", "source": { "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bcad8d995980440892759db0c32acae7c8e79442" + "url": "https://github.com/phpstan/extension-installer.git", + "reference": "f45734bfb9984c6c56c4486b71230355f066a58a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442", - "reference": "bcad8d995980440892759db0c32acae7c8e79442", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f45734bfb9984c6c56c4486b71230355f066a58a", + "reference": "f45734bfb9984c6c56c4486b71230355f066a58a", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.9.0" + }, + "require-dev": { + "composer/composer": "^2.0", + "php-parallel-lint/php-parallel-lint": "^1.2.0", + "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPStan\\ExtensionInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "PHPStan\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Composer plugin for automatic installation of PHPStan extensions", + "support": { + "issues": "https://github.com/phpstan/extension-installer/issues", + "source": "https://github.com/phpstan/extension-installer/tree/1.3.1" + }, + "time": "2023-05-24T08:59:17+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.26.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "231e3186624c03d7e7c890ec662b81e6b0405227" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/231e3186624c03d7e7c890ec662b81e6b0405227", + "reference": "231e3186624c03d7e7c890ec662b81e6b0405227", "shasum": "" }, "require": { @@ -10368,22 +10624,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.2" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.26.0" }, - "time": "2023-09-26T12:28:12+00:00" + "time": "2024-02-23T16:05:55+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.38", + "version": "1.10.59", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691" + "reference": "e607609388d3a6d418a50a49f7940e8086798281" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5302bb402c57f00fb3c2c015bac86e0827e4b691", - "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e607609388d3a6d418a50a49f7940e8086798281", + "reference": "e607609388d3a6d418a50a49f7940e8086798281", "shasum": "" }, "require": { @@ -10432,7 +10688,7 @@ "type": "tidelift" } ], - "time": "2023-10-06T14:19:14+00:00" + "time": "2024-02-20T13:59:13+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -10484,21 +10740,21 @@ }, { "name": "phpstan/phpstan-strict-rules", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "b21c03d4f6f3a446e4311155f4be9d65048218e6" + "reference": "7a50e9662ee9f3942e4aaaf3d603653f60282542" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/b21c03d4f6f3a446e4311155f4be9d65048218e6", - "reference": "b21c03d4f6f3a446e4311155f4be9d65048218e6", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/7a50e9662ee9f3942e4aaaf3d603653f60282542", + "reference": "7a50e9662ee9f3942e4aaaf3d603653f60282542", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.10" + "phpstan/phpstan": "^1.10.34" }, "require-dev": { "nikic/php-parser": "^4.13.0", @@ -10527,29 +10783,29 @@ "description": "Extra strict and opinionated rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.1" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.2" }, - "time": "2023-03-29T14:47:40+00:00" + "time": "2023-10-30T14:35:06+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.1.7", + "version": "10.1.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "355324ca4980b8916c18b9db29f3ef484078f26e" + "reference": "842f72662d6b9edda84c4b6f13885fd9cd53dc63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/355324ca4980b8916c18b9db29f3ef484078f26e", - "reference": "355324ca4980b8916c18b9db29f3ef484078f26e", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/842f72662d6b9edda84c4b6f13885fd9cd53dc63", + "reference": "842f72662d6b9edda84c4b6f13885fd9cd53dc63", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=8.1", "phpunit/php-file-iterator": "^4.0", "phpunit/php-text-template": "^3.0", @@ -10599,7 +10855,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.7" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.12" }, "funding": [ { @@ -10607,7 +10863,7 @@ "type": "github" } ], - "time": "2023-10-04T15:34:17+00:00" + "time": "2024-03-02T07:22:05+00:00" }, { "name": "phpunit/php-file-iterator", @@ -10854,16 +11110,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.4.1", + "version": "10.5.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "62bd7af13d282deeb95650077d28ba3600ca321c" + "reference": "0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/62bd7af13d282deeb95650077d28ba3600ca321c", - "reference": "62bd7af13d282deeb95650077d28ba3600ca321c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4", + "reference": "0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4", "shasum": "" }, "require": { @@ -10903,7 +11159,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.4-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -10935,7 +11191,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.4.1" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.11" }, "funding": [ { @@ -10951,20 +11207,20 @@ "type": "tidelift" } ], - "time": "2023-10-08T05:01:11+00:00" + "time": "2024-02-25T14:05:00+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { @@ -10999,7 +11255,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -11007,7 +11264,7 @@ "type": "github" } ], - "time": "2023-02-03T06:58:15+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", @@ -11199,20 +11456,20 @@ }, { "name": "sebastian/complexity", - "version": "3.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68cfb347a44871f01e33ab0ef8215966432f6957" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68cfb347a44871f01e33ab0ef8215966432f6957", - "reference": "68cfb347a44871f01e33ab0ef8215966432f6957", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { - "nikic/php-parser": "^4.10", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=8.1" }, "require-dev": { @@ -11221,7 +11478,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -11245,7 +11502,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.1.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -11253,20 +11510,20 @@ "type": "github" } ], - "time": "2023-09-28T11:50:59+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "5.0.3", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", - "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { @@ -11274,12 +11531,12 @@ }, "require-dev": { "phpunit/phpunit": "^10.0", - "symfony/process": "^4.2 || ^5" + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -11312,7 +11569,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -11320,7 +11577,7 @@ "type": "github" } ], - "time": "2023-05-01T07:48:21+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", @@ -11388,16 +11645,16 @@ }, { "name": "sebastian/exporter", - "version": "5.1.1", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc" + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc", - "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { @@ -11454,7 +11711,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { @@ -11462,20 +11719,20 @@ "type": "github" } ], - "time": "2023-09-24T13:22:09+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.1", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4", - "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { @@ -11509,14 +11766,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1" + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -11524,24 +11781,24 @@ "type": "github" } ], - "time": "2023-07-19T07:19:23+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/649e40d279e243d985aa8fb6e74dd5bb28dc185d", - "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.10", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=8.1" }, "require-dev": { @@ -11574,7 +11831,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.1" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -11582,7 +11839,7 @@ "type": "github" } ], - "time": "2023-08-31T09:25:50+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", @@ -11925,16 +12182,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -11963,7 +12220,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -11971,7 +12228,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" } ], "aliases": [], @@ -11980,7 +12237,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=8.2", + "php": ">=8.3", "ext-bcmath": "*", "ext-curl": "*", "ext-fileinfo": "*", @@ -11998,8 +12255,5 @@ "ext-xmlwriter": "*" }, "platform-dev": [], - "platform-overrides": { - "php": "8.2" - }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/config/app.php b/config/app.php index a7c44efb4e..a22045103c 100644 --- a/config/app.php +++ b/config/app.php @@ -21,6 +21,25 @@ declare(strict_types=1); +use FireflyIII\Providers\AccountServiceProvider; +use FireflyIII\Providers\AdminServiceProvider; +use FireflyIII\Providers\AppServiceProvider; +use FireflyIII\Providers\AttachmentServiceProvider; +use FireflyIII\Providers\BillServiceProvider; +use FireflyIII\Providers\BudgetServiceProvider; +use FireflyIII\Providers\CategoryServiceProvider; +use FireflyIII\Providers\CurrencyServiceProvider; +use FireflyIII\Providers\EventServiceProvider; +use FireflyIII\Providers\FireflyServiceProvider; +use FireflyIII\Providers\JournalServiceProvider; +use FireflyIII\Providers\PiggyBankServiceProvider; +use FireflyIII\Providers\RecurringServiceProvider; +use FireflyIII\Providers\RouteServiceProvider; +use FireflyIII\Providers\RuleGroupServiceProvider; +use FireflyIII\Providers\RuleServiceProvider; +use FireflyIII\Providers\SearchServiceProvider; +use FireflyIII\Providers\SessionServiceProvider; +use FireflyIII\Providers\TagServiceProvider; use FireflyIII\Support\Facades\AccountForm; use FireflyIII\Support\Facades\Amount; use FireflyIII\Support\Facades\CurrencyForm; @@ -31,10 +50,71 @@ use FireflyIII\Support\Facades\PiggyBankForm; use FireflyIII\Support\Facades\Preferences; use FireflyIII\Support\Facades\RuleForm; use FireflyIII\Support\Facades\Steam; +use Illuminate\Auth\AuthServiceProvider; +use Illuminate\Auth\Passwords\PasswordResetServiceProvider; +use Illuminate\Broadcasting\BroadcastServiceProvider; +use Illuminate\Bus\BusServiceProvider; +use Illuminate\Cache\CacheServiceProvider; +use Illuminate\Cookie\CookieServiceProvider; +use Illuminate\Database\DatabaseServiceProvider; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Encryption\EncryptionServiceProvider; +use Illuminate\Filesystem\FilesystemServiceProvider; +use Illuminate\Foundation\Providers\ConsoleSupportServiceProvider; +use Illuminate\Foundation\Providers\FoundationServiceProvider; +use Illuminate\Hashing\HashServiceProvider; +use Illuminate\Mail\MailServiceProvider; +use Illuminate\Notifications\NotificationServiceProvider; +use Illuminate\Pagination\PaginationServiceProvider; +use Illuminate\Pipeline\PipelineServiceProvider; +use Illuminate\Queue\QueueServiceProvider; +use Illuminate\Redis\RedisServiceProvider; +use Illuminate\Support\Arr; +use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\Artisan; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Blade; +use Illuminate\Support\Facades\Broadcast; +use Illuminate\Support\Facades\Bus; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\Config; +use Illuminate\Support\Facades\Cookie; +use Illuminate\Support\Facades\Crypt; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Event; +use Illuminate\Support\Facades\File; +use Illuminate\Support\Facades\Gate; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Http; +use Illuminate\Support\Facades\Lang; +use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Mail; +use Illuminate\Support\Facades\Notification; +use Illuminate\Support\Facades\Password; +use Illuminate\Support\Facades\Queue; +use Illuminate\Support\Facades\Redirect; +use Illuminate\Support\Facades\Redis; +use Illuminate\Support\Facades\Request; +use Illuminate\Support\Facades\Response; +use Illuminate\Support\Facades\Route; +use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Facades\Session; +use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Facades\URL; +use Illuminate\Support\Facades\Validator; +use Illuminate\Support\Facades\View; +use Illuminate\Support\Str; +use Illuminate\Translation\TranslationServiceProvider; +use Illuminate\Validation\ValidationServiceProvider; +use Illuminate\View\ViewServiceProvider; +use PragmaRX\Google2FALaravel\Facade; +use Spatie\Html\Facades\Html; +use TwigBridge\Facade\Twig; +use TwigBridge\ServiceProvider; return [ 'name' => envNonEmpty('APP_NAME', 'Firefly III'), - 'env' => envNonEmpty('APP_ENV', 'local'), + 'env' => envNonEmpty('APP_ENV', 'production'), 'debug' => env('APP_DEBUG', false), 'url' => envNonEmpty('APP_URL', 'http://localhost'), 'timezone' => envNonEmpty('TZ', 'UTC'), @@ -43,104 +123,95 @@ return [ 'key' => env('APP_KEY'), 'cipher' => 'AES-256-CBC', 'providers' => [ + // Laravel Framework Service Providers... + AuthServiceProvider::class, + BroadcastServiceProvider::class, + BusServiceProvider::class, + CacheServiceProvider::class, + ConsoleSupportServiceProvider::class, + CookieServiceProvider::class, + DatabaseServiceProvider::class, + EncryptionServiceProvider::class, + FilesystemServiceProvider::class, + FoundationServiceProvider::class, + HashServiceProvider::class, + MailServiceProvider::class, + NotificationServiceProvider::class, + PaginationServiceProvider::class, + PipelineServiceProvider::class, + QueueServiceProvider::class, + RedisServiceProvider::class, + PasswordResetServiceProvider::class, + SessionServiceProvider::class, + TranslationServiceProvider::class, + ValidationServiceProvider::class, + ViewServiceProvider::class, - /* - * Laravel Framework Service Providers... - */ - Illuminate\Auth\AuthServiceProvider::class, - Illuminate\Broadcasting\BroadcastServiceProvider::class, - Illuminate\Bus\BusServiceProvider::class, - Illuminate\Cache\CacheServiceProvider::class, - Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, - Illuminate\Cookie\CookieServiceProvider::class, - Illuminate\Database\DatabaseServiceProvider::class, - Illuminate\Encryption\EncryptionServiceProvider::class, - Illuminate\Filesystem\FilesystemServiceProvider::class, - Illuminate\Foundation\Providers\FoundationServiceProvider::class, - Illuminate\Hashing\HashServiceProvider::class, - Illuminate\Mail\MailServiceProvider::class, - Illuminate\Notifications\NotificationServiceProvider::class, - Illuminate\Pagination\PaginationServiceProvider::class, - Illuminate\Pipeline\PipelineServiceProvider::class, - Illuminate\Queue\QueueServiceProvider::class, - Illuminate\Redis\RedisServiceProvider::class, - Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, - FireflyIII\Providers\SessionServiceProvider::class, - Illuminate\Translation\TranslationServiceProvider::class, - Illuminate\Validation\ValidationServiceProvider::class, - Illuminate\View\ViewServiceProvider::class, + // Package Service Providers... - /* - * Package Service Providers... - */ - - /* - * Application Service Providers... - */ - FireflyIII\Providers\AppServiceProvider::class, + // Application Service Providers... + AppServiceProvider::class, FireflyIII\Providers\AuthServiceProvider::class, // FireflyIII\Providers\BroadcastServiceProvider::class, - FireflyIII\Providers\EventServiceProvider::class, - FireflyIII\Providers\RouteServiceProvider::class, + EventServiceProvider::class, + RouteServiceProvider::class, // own stuff: PragmaRX\Google2FALaravel\ServiceProvider::class, - TwigBridge\ServiceProvider::class, + ServiceProvider::class, - /* - * More service providers. - */ - FireflyIII\Providers\AccountServiceProvider::class, - FireflyIII\Providers\AttachmentServiceProvider::class, - FireflyIII\Providers\BillServiceProvider::class, - FireflyIII\Providers\BudgetServiceProvider::class, - FireflyIII\Providers\CategoryServiceProvider::class, - FireflyIII\Providers\CurrencyServiceProvider::class, - FireflyIII\Providers\FireflyServiceProvider::class, - FireflyIII\Providers\JournalServiceProvider::class, - FireflyIII\Providers\PiggyBankServiceProvider::class, - FireflyIII\Providers\RuleServiceProvider::class, - FireflyIII\Providers\RuleGroupServiceProvider::class, - FireflyIII\Providers\SearchServiceProvider::class, - FireflyIII\Providers\TagServiceProvider::class, - FireflyIII\Providers\AdminServiceProvider::class, - FireflyIII\Providers\RecurringServiceProvider::class, + // More service providers. + AccountServiceProvider::class, + AttachmentServiceProvider::class, + BillServiceProvider::class, + BudgetServiceProvider::class, + CategoryServiceProvider::class, + CurrencyServiceProvider::class, + FireflyServiceProvider::class, + JournalServiceProvider::class, + PiggyBankServiceProvider::class, + RuleServiceProvider::class, + RuleGroupServiceProvider::class, + SearchServiceProvider::class, + TagServiceProvider::class, + AdminServiceProvider::class, + RecurringServiceProvider::class, ], 'aliases' => [ - 'App' => Illuminate\Support\Facades\App::class, - 'Artisan' => Illuminate\Support\Facades\Artisan::class, - 'Auth' => Illuminate\Support\Facades\Auth::class, - 'Blade' => Illuminate\Support\Facades\Blade::class, - 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, - 'Bus' => Illuminate\Support\Facades\Bus::class, - 'Cache' => Illuminate\Support\Facades\Cache::class, - 'Config' => Illuminate\Support\Facades\Config::class, - 'Cookie' => Illuminate\Support\Facades\Cookie::class, - 'Crypt' => Illuminate\Support\Facades\Crypt::class, - 'DB' => Illuminate\Support\Facades\DB::class, - 'Eloquent' => Illuminate\Database\Eloquent\Model::class, - 'Event' => Illuminate\Support\Facades\Event::class, - 'File' => Illuminate\Support\Facades\File::class, - 'Gate' => Illuminate\Support\Facades\Gate::class, - 'Hash' => Illuminate\Support\Facades\Hash::class, - 'Lang' => Illuminate\Support\Facades\Lang::class, - 'Log' => Illuminate\Support\Facades\Log::class, - 'Mail' => Illuminate\Support\Facades\Mail::class, - 'Notification' => Illuminate\Support\Facades\Notification::class, - 'Password' => Illuminate\Support\Facades\Password::class, - 'Queue' => Illuminate\Support\Facades\Queue::class, - 'Redirect' => Illuminate\Support\Facades\Redirect::class, - 'Redis' => Illuminate\Support\Facades\Redis::class, - 'Request' => Illuminate\Support\Facades\Request::class, - 'Response' => Illuminate\Support\Facades\Response::class, - 'Route' => Illuminate\Support\Facades\Route::class, - 'Schema' => Illuminate\Support\Facades\Schema::class, - 'Session' => Illuminate\Support\Facades\Session::class, - 'Storage' => Illuminate\Support\Facades\Storage::class, - 'URL' => Illuminate\Support\Facades\URL::class, - 'Validator' => Illuminate\Support\Facades\Validator::class, - 'View' => Illuminate\Support\Facades\View::class, - 'Html' => Spatie\Html\Facades\Html::class, + 'App' => App::class, + 'Artisan' => Artisan::class, + 'Auth' => Auth::class, + 'Blade' => Blade::class, + 'Broadcast' => Broadcast::class, + 'Bus' => Bus::class, + 'Cache' => Cache::class, + 'Config' => Config::class, + 'Cookie' => Cookie::class, + 'Crypt' => Crypt::class, + 'DB' => DB::class, + 'Eloquent' => Model::class, + 'Event' => Event::class, + 'File' => File::class, + 'Gate' => Gate::class, + 'Hash' => Hash::class, + 'Lang' => Lang::class, + 'Log' => Log::class, + 'Mail' => Mail::class, + 'Notification' => Notification::class, + 'Password' => Password::class, + 'Queue' => Queue::class, + 'Redirect' => Redirect::class, + 'Redis' => Redis::class, + 'Request' => Request::class, + 'Response' => Response::class, + 'Route' => Route::class, + 'Schema' => Schema::class, + 'Session' => Session::class, + 'Storage' => Storage::class, + 'URL' => URL::class, + 'Validator' => Validator::class, + 'View' => View::class, + 'Html' => Html::class, 'Preferences' => Preferences::class, 'FireflyConfig' => FireflyConfig::class, 'Navigation' => Navigation::class, @@ -151,15 +222,15 @@ return [ 'AccountForm' => AccountForm::class, 'PiggyBankForm' => PiggyBankForm::class, 'RuleForm' => RuleForm::class, - 'Google2FA' => PragmaRX\Google2FALaravel\Facade::class, - 'Twig' => TwigBridge\Facade\Twig::class, + 'Google2FA' => Facade::class, + 'Twig' => Twig::class, - 'Arr' => Illuminate\Support\Arr::class, - 'Http' => Illuminate\Support\Facades\Http::class, - 'Str' => Illuminate\Support\Str::class, + 'Arr' => Arr::class, + 'Http' => Http::class, + 'Str' => Str::class, ], - 'asset_url' => env('ASSET_URL', null), + 'asset_url' => env('ASSET_URL', null), /* |-------------------------------------------------------------------------- @@ -172,6 +243,5 @@ return [ | */ - 'faker_locale' => 'en_US', - + 'faker_locale' => 'en_US', ]; diff --git a/config/auth.php b/config/auth.php index c645307e39..523a326e2f 100644 --- a/config/auth.php +++ b/config/auth.php @@ -20,9 +20,10 @@ */ declare(strict_types=1); +use FireflyIII\User; if ('ldap' === strtolower((string)env('AUTHENTICATION_GUARD'))) { - die('LDAP is no longer supported by Firefly III v5.7+. Sorry about that. You will have to switch to "remote_user_guard", and use tools like Authelia or Keycloak to use LDAP together with Firefly III.'); + exit('LDAP is no longer supported by Firefly III v5.7+. Sorry about that. You will have to switch to "remote_user_guard", and use tools like Authelia or Keycloak to use LDAP together with Firefly III.'); } return [ @@ -37,12 +38,12 @@ return [ | */ - 'defaults' => [ + 'defaults' => [ 'guard' => envNonEmpty('AUTHENTICATION_GUARD', 'web'), 'passwords' => 'users', ], - 'guard_header' => envNonEmpty('AUTHENTICATION_GUARD_HEADER', 'REMOTE_USER'), - 'guard_email' => envNonEmpty('AUTHENTICATION_GUARD_EMAIL', null), + 'guard_header' => envNonEmpty('AUTHENTICATION_GUARD_HEADER', 'REMOTE_USER'), + 'guard_email' => envNonEmpty('AUTHENTICATION_GUARD_EMAIL', null), /* |-------------------------------------------------------------------------- @@ -61,7 +62,7 @@ return [ | */ - 'guards' => [ + 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', @@ -93,14 +94,14 @@ return [ | */ - 'providers' => [ + 'providers' => [ 'users' => [ 'driver' => 'eloquent', - 'model' => FireflyIII\User::class, + 'model' => User::class, ], 'remote_user_provider' => [ 'driver' => 'remote_user_provider', - 'model' => FireflyIII\User::class, + 'model' => User::class, ], ], @@ -119,7 +120,7 @@ return [ | */ - 'passwords' => [ + 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', @@ -139,5 +140,4 @@ return [ */ 'password_timeout' => 10800, - ]; diff --git a/config/breadcrumbs.php b/config/breadcrumbs.php index 0cfb2b1185..d725919eb6 100644 --- a/config/breadcrumbs.php +++ b/config/breadcrumbs.php @@ -21,9 +21,10 @@ */ declare(strict_types=1); +use Diglactic\Breadcrumbs\Generator; +use Diglactic\Breadcrumbs\Manager; return [ - /* |-------------------------------------------------------------------------- | View Name @@ -47,7 +48,7 @@ return [ | */ - 'view' => 'partials/layout/breadcrumbs', + 'view' => 'partials/layout/breadcrumbs', /* |-------------------------------------------------------------------------- @@ -91,9 +92,8 @@ return [ */ // Manager - 'manager-class' => Diglactic\Breadcrumbs\Manager::class, + 'manager-class' => Manager::class, // Generator - 'generator-class' => Diglactic\Breadcrumbs\Generator::class, - + 'generator-class' => Generator::class, ]; diff --git a/config/broadcasting.php b/config/broadcasting.php index 933bd64870..fb84f4aa64 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -35,7 +35,7 @@ return [ | */ - 'default' => env('BROADCAST_DRIVER', 'null'), + 'default' => env('BROADCAST_DRIVER', 'null'), /* |-------------------------------------------------------------------------- @@ -49,43 +49,40 @@ return [ */ 'connections' => [ - 'pusher' => [ - 'driver' => 'pusher', - 'key' => env('PUSHER_APP_KEY'), - 'secret' => env('PUSHER_APP_SECRET'), - 'app_id' => env('PUSHER_APP_ID'), - 'options' => [ - 'cluster' => env('PUSHER_APP_CLUSTER'), - 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', - 'port' => env('PUSHER_PORT', 443), - 'scheme' => env('PUSHER_SCHEME', 'https'), + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'host' => null !== env('PUSHER_HOST') ? env('PUSHER_HOST') : 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), 'encrypted' => true, - 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', + 'useTLS' => 'https' === env('PUSHER_SCHEME', 'https'), ], 'client_options' => [ // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html ], ], - 'ably' => [ + 'ably' => [ 'driver' => 'ably', - 'key' => env('ABLY_KEY'), + 'key' => env('ABLY_KEY'), ], - 'redis' => [ - 'driver' => 'redis', + 'redis' => [ + 'driver' => 'redis', 'connection' => 'default', ], - 'log' => [ + 'log' => [ 'driver' => 'log', ], - 'null' => [ + 'null' => [ 'driver' => 'null', ], - ], - ]; diff --git a/config/cache.php b/config/cache.php index d28d9d6882..94cc4d9f14 100644 --- a/config/cache.php +++ b/config/cache.php @@ -48,24 +48,23 @@ return [ | */ - 'stores' => [ - - 'apc' => [ + 'stores' => [ + 'apc' => [ 'driver' => 'apc', ], - 'array' => [ + 'array' => [ 'driver' => 'array', 'serialize' => false, ], - 'database' => [ + 'database' => [ 'driver' => 'database', 'table' => 'cache', 'connection' => null, ], - 'file' => [ + 'file' => [ 'driver' => 'file', 'path' => storage_path('framework/cache/data'), ], @@ -89,11 +88,11 @@ return [ ], ], - 'redis' => [ + 'redis' => [ 'driver' => 'redis', 'connection' => 'default', ], - 'dynamodb' => [ + 'dynamodb' => [ 'driver' => 'dynamodb', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), @@ -114,5 +113,5 @@ return [ | */ - 'prefix' => env('CACHE_PREFIX', 'firefly'), + 'prefix' => env('CACHE_PREFIX', 'firefly'), ]; diff --git a/config/cer.php b/config/cer.php index 7445ea37bd..30b0ebb70a 100644 --- a/config/cer.php +++ b/config/cer.php @@ -23,7 +23,6 @@ declare(strict_types=1); return [ - 'url' => 'https://ff3exchangerates.z6.web.core.windows.net', 'enabled' => true, 'download_enabled' => env('ENABLE_EXTERNAL_RATES', false), @@ -35,7 +34,6 @@ return [ // all rates are from EUR to $currency: 'rates' => [ - // europa 'EUR' => 1, 'HUF' => 387.9629, diff --git a/config/cors.php b/config/cors.php index 69da8e5802..a921cdfc57 100644 --- a/config/cors.php +++ b/config/cors.php @@ -1,6 +1,5 @@ ['api/*', 'sanctum/csrf-cookie'], + 'paths' => ['api/*', 'sanctum/csrf-cookie'], - 'allowed_methods' => ['*'], + 'allowed_methods' => ['*'], - 'allowed_origins' => ['*'], + 'allowed_origins' => ['*'], 'allowed_origins_patterns' => ['*'], - 'allowed_headers' => ['*'], + 'allowed_headers' => ['*'], - 'exposed_headers' => [], + 'exposed_headers' => [], - 'max_age' => 0, - - 'supports_credentials' => false, + 'max_age' => 0, + 'supports_credentials' => false, ]; diff --git a/config/database.php b/config/database.php index cb181adbd7..67410f7f7d 100644 --- a/config/database.php +++ b/config/database.php @@ -23,12 +23,12 @@ declare(strict_types=1); use Illuminate\Support\Str; -$databaseUrl = getenv('DATABASE_URL'); -$host = ''; -$username = ''; -$password = ''; -$database = ''; -$port = ''; +$databaseUrl = getenv('DATABASE_URL'); +$host = ''; +$username = ''; +$password = ''; +$database = ''; +$port = ''; if (false !== $databaseUrl) { $options = parse_url($databaseUrl); @@ -39,9 +39,7 @@ if (false !== $databaseUrl) { $database = substr($options['path'] ?? '/firefly', 1); } -/* - * Get SSL parameters from .env file. - */ +// Get SSL parameters from .env file. $mysql_ssl_ca_dir = envNonEmpty('MYSQL_SSL_CAPATH', null); $mysql_ssl_ca_file = envNonEmpty('MYSQL_SSL_CA', null); $mysql_ssl_cert = envNonEmpty('MYSQL_SSL_CERT', null); @@ -49,9 +47,9 @@ $mysql_ssl_key = envNonEmpty('MYSQL_SSL_KEY', null); $mysql_ssl_ciphers = envNonEmpty('MYSQL_SSL_CIPHER', null); $mysql_ssl_verify = envNonEmpty('MYSQL_SSL_VERIFY_SERVER_CERT', null); -$mySqlSSLOptions = []; -$useSSL = envNonEmpty('MYSQL_USE_SSL', false); -if (false !== $useSSL && null !== $useSSL) { +$mySqlSSLOptions = []; +$useSSL = envNonEmpty('MYSQL_USE_SSL', false); +if (false !== $useSSL && null !== $useSSL && '' !== $useSSL) { if (null !== $mysql_ssl_ca_dir) { $mySqlSSLOptions[PDO::MYSQL_ATTR_SSL_CAPATH] = $mysql_ssl_ca_dir; } @@ -121,7 +119,6 @@ return [ 'charset' => 'utf8', 'prefix' => '', ], - ], 'migrations' => 'migrations', /* @@ -138,7 +135,7 @@ return [ 'client' => env('REDIS_CLIENT', 'predis'), 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'predis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), + // 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), ], 'default' => [ 'scheme' => envNonEmpty('REDIS_SCHEME', 'tcp'), @@ -161,5 +158,4 @@ return [ 'database' => env('REDIS_CACHE_DB', '1'), ], ], - ]; diff --git a/config/debugbar.php b/config/debugbar.php deleted file mode 100644 index 7441f1af5d..0000000000 --- a/config/debugbar.php +++ /dev/null @@ -1,223 +0,0 @@ -. - */ - -declare(strict_types=1); - -return [ - /* - |-------------------------------------------------------------------------- - | Debugbar Settings - |-------------------------------------------------------------------------- - | - | Debugbar is enabled by default, when debug is set to true in app.php. - | You can override the value by setting enable to true or false instead of null. - | - | You can provide an array of URI's that must be ignored (eg. 'api/*') - | - */ - - 'enabled' => env('DEBUGBAR_ENABLED', null), - 'except' => [ - 'telescope*', - ], - - /* - |-------------------------------------------------------------------------- - | Storage settings - |-------------------------------------------------------------------------- - | - | DebugBar stores data for session/ajax requests. - | You can disable this, so the debugbar stores data in headers/session, - | but this can cause problems with large data collectors. - | By default, file storage (in the storage folder) is used. Redis and PDO - | can also be used. For PDO, run the package migrations first. - | - */ - 'storage' => [ - 'enabled' => true, - 'driver' => 'file', // redis, file, pdo, custom - 'path' => storage_path('debugbar'), // For file driver - 'connection' => null, // Leave null for default connection (Redis/PDO) - 'provider' => '', // Instance of StorageInterface for custom driver - ], - - /* - |-------------------------------------------------------------------------- - | Vendors - |-------------------------------------------------------------------------- - | - | Vendor files are included by default, but can be set to false. - | This can also be set to 'js' or 'css', to only include javascript or css vendor files. - | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files) - | and for js: jquery and and highlight.js - | So if you want syntax highlighting, set it to true. - | jQuery is set to not conflict with existing jQuery scripts. - | - */ - - 'include_vendors' => true, - - /* - |-------------------------------------------------------------------------- - | Capture Ajax Requests - |-------------------------------------------------------------------------- - | - | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors), - | you can use this option to disable sending the data through the headers. - | - | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools. - */ - - 'capture_ajax' => true, - 'add_ajax_timing' => false, - - /* - |-------------------------------------------------------------------------- - | Custom Error Handler for Deprecated warnings - |-------------------------------------------------------------------------- - | - | When enabled, the Debugbar shows deprecated warnings for Symfony components - | in the Messages tab. - | - */ - 'error_handler' => true, - - /* - |-------------------------------------------------------------------------- - | Clockwork integration - |-------------------------------------------------------------------------- - | - | The Debugbar can emulate the Clockwork headers, so you can use the Chrome - | Extension, without the server-side code. It uses Debugbar collectors instead. - | - */ - 'clockwork' => false, - - /* - |-------------------------------------------------------------------------- - | DataCollectors - |-------------------------------------------------------------------------- - | - | Enable/disable DataCollectors - | - */ - - 'collectors' => [ - 'phpinfo' => true, // Php version - 'messages' => true, // Messages - 'time' => true, // Time Datalogger - 'memory' => true, // Memory usage - 'exceptions' => true, // Exception displayer - 'log' => true, // Logs from Monolog (merged in messages if enabled) - 'db' => true, // Show database (PDO) queries and bindings - 'views' => true, // Views with their data - 'route' => true, // Current route information - 'auth' => true, // Display Laravel authentication status - 'gate' => true, // Display Laravel Gate checks - 'session' => true, // Display session data - 'symfony_request' => true, // Only one can be enabled.. - 'mail' => true, // Catch mail messages - 'laravel' => false, // Laravel version and environment - 'events' => true, // All events fired - 'default_request' => false, // Regular or special Symfony request logger - 'logs' => false, // Add the latest log messages - 'files' => false, // Show the included files - 'config' => false, // Display config settings - 'cache' => true, // Display cache events - 'models' => false, // Display models - ], - - /* - |-------------------------------------------------------------------------- - | Extra options - |-------------------------------------------------------------------------- - | - | Configure some DataCollectors - | - */ - - 'options' => [ - 'auth' => [ - 'show_name' => true, // Also show the users name/email in the debugbar - ], - 'db' => [ - 'with_params' => true, // Render SQL with the parameters substituted - 'backtrace' => true, // Use a backtrace to find the origin of the query in your files. - 'timeline' => false, // Add the queries to the timeline - 'explain' => [ // Show EXPLAIN output on queries - 'enabled' => false, - 'types' => ['SELECT'], - // // workaround ['SELECT'] only. https://github.com/barryvdh/laravel-debugbar/issues/888 ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+ - ], - 'hints' => true, // Show hints for common mistakes - ], - 'mail' => [ - 'full_log' => false, - ], - 'views' => [ - 'data' => true, //Note: Can slow down the application, because the data can be quite large.. - ], - 'route' => [ - 'label' => true, // show complete route on bar - ], - 'logs' => [ - 'file' => null, - ], - 'cache' => [ - 'values' => true, // collect cache values - ], - ], - - /* - |-------------------------------------------------------------------------- - | Inject Debugbar in Response - |-------------------------------------------------------------------------- - | - | Usually, the debugbar is added just before , by listening to the - | Response after the App is done. If you disable this, you have to add them - | in your template yourself. See http://phpdebugbar.com/docs/rendering.html - | - */ - - 'inject' => true, - - /* - |-------------------------------------------------------------------------- - | DebugBar route prefix - |-------------------------------------------------------------------------- - | - | Sometimes you want to set route prefix to be used by DebugBar to load - | its resources from. Usually the need comes from misconfigured web server or - | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97 - | - */ - 'route_prefix' => '_debugbar', - - /* - |-------------------------------------------------------------------------- - | DebugBar route domain - |-------------------------------------------------------------------------- - | - | By default DebugBar route served from the same domain that request served. - | To override default domain, specify it as a non-empty value. - */ - 'route_domain' => null, -]; diff --git a/config/filesystems.php b/config/filesystems.php index 8deff7ba8f..2d2998984c 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -51,7 +51,7 @@ return [ | */ - 'disks' => [ + 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), @@ -85,13 +85,12 @@ return [ 'root' => base_path('resources'), ], - 'public' => [ + 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), - 'url' => env('APP_URL') . '/storage', + 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], - ], /* diff --git a/config/firefly.php b/config/firefly.php index 66fdf0205e..4431e6f2ce 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -63,6 +63,7 @@ use FireflyIII\Support\Binder\TagList; use FireflyIII\Support\Binder\TagOrId; use FireflyIII\Support\Binder\UserGroupAccount; use FireflyIII\Support\Binder\UserGroupBill; +use FireflyIII\Support\Binder\UserGroupTransaction; use FireflyIII\TransactionRules\Actions\AddTag; use FireflyIII\TransactionRules\Actions\AppendDescription; use FireflyIII\TransactionRules\Actions\AppendDescriptionToNotes; @@ -86,8 +87,10 @@ use FireflyIII\TransactionRules\Actions\SetBudget; use FireflyIII\TransactionRules\Actions\SetCategory; use FireflyIII\TransactionRules\Actions\SetDescription; use FireflyIII\TransactionRules\Actions\SetDestinationAccount; +use FireflyIII\TransactionRules\Actions\SetDestinationToCashAccount; use FireflyIII\TransactionRules\Actions\SetNotes; use FireflyIII\TransactionRules\Actions\SetSourceAccount; +use FireflyIII\TransactionRules\Actions\SetSourceToCashAccount; use FireflyIII\TransactionRules\Actions\SwitchAccounts; use FireflyIII\TransactionRules\Actions\UpdatePiggybank; use FireflyIII\User; @@ -112,9 +115,9 @@ return [ 'handle_debts' => true, // see cer.php for exchange rates feature flag. ], - 'version' => '6.0.27', - 'api_version' => '2.0.10', - 'db_version' => 20, + 'version' => '6.1.10', + 'api_version' => '2.0.12', + 'db_version' => 22, // generic settings 'maxUploadSize' => 1073741824, // 1 GB @@ -189,7 +192,7 @@ return [ // 'si_LK' => ['name_locale' => 'සිංහල', 'name_english' => 'Sinhala (Sri Lanka)'], 'sk_SK' => ['name_locale' => 'Slovenčina', 'name_english' => 'Slovak'], 'sl_SI' => ['name_locale' => 'Slovenian', 'name_english' => 'Slovenian'], - //// 'sr_CS' => ['name_locale' => 'Serbian (Latin)', 'name_english' => 'Serbian (Latin)'], + // // 'sr_CS' => ['name_locale' => 'Serbian (Latin)', 'name_english' => 'Serbian (Latin)'], 'sv_SE' => ['name_locale' => 'Svenska', 'name_english' => 'Swedish'], // // 'tlh_AA' => ['name_locale' => 'tlhIngan Hol', 'name_english' => 'Klingon'], 'tr_TR' => ['name_locale' => 'Türkçe', 'name_english' => 'Turkish'], @@ -250,40 +253,41 @@ return [ ], 'available_dark_modes' => ['light', 'dark', 'browser'], 'bill_reminder_periods' => [90, 30, 14, 7, 0], - 'valid_view_ranges' => ['1D', '1W', '1M', '3M', '6M', '1Y',], + 'valid_view_ranges' => ['1D', '1W', '1M', '3M', '6M', '1Y'], + 'valid_url_protocols' => envNonEmpty('VALID_URL_PROTOCOLS', 'http,https,ftp,ftps,mailto'), 'allowedMimes' => [ - /* plain files */ + // plain files 'text/plain', - /* images */ + // images 'image/jpeg', 'image/svg+xml', 'image/png', 'image/heic', 'image/heic-sequence', - /* PDF */ + // PDF 'application/pdf', - /* Generic upload */ + // Generic upload 'application/octet-stream', - /* MS word */ + // MS word 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', - /* MS excel */ + // MS excel 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', - /* MS powerpoint */ + // MS powerpoint 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.presentationml.template', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', - /* iWork */ + // iWork 'application/x-iwork-pages-sffpages', - /* open office */ + // open office 'application/vnd.sun.xml.writer', 'application/vnd.sun.xml.writer.template', 'application/vnd.sun.xml.writer.global', @@ -315,15 +319,15 @@ return [ 'application/vnd.oasis.opendocument.database', 'application/vnd.oasis.opendocument.image', - /* EML */ + // EML 'message/rfc822', - /* JSON */ + // JSON 'application/json', ], 'accountRoles' => ['defaultAsset', 'sharedAsset', 'savingAsset', 'ccAsset', 'cashWalletAsset'], 'valid_liabilities' => [AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE], - 'ccTypes' => ['monthlyFull' => 'Full payment every month',], + 'ccTypes' => ['monthlyFull' => 'Full payment every month'], 'credit_card_types' => ['monthlyFull'], // "period must be in this list" values @@ -428,66 +432,65 @@ return [ 'transfers' => 'fa-exchange', ], - 'bindables' => [ + 'bindables' => [ // models - 'account' => Account::class, - 'attachment' => Attachment::class, - 'availableBudget' => AvailableBudget::class, - 'bill' => Bill::class, - 'budget' => Budget::class, - 'budgetLimit' => BudgetLimit::class, - 'category' => Category::class, - 'linkType' => LinkType::class, - 'transactionType' => TransactionTypeModel::class, - 'journalLink' => TransactionJournalLink::class, - 'currency' => TransactionCurrency::class, - 'objectGroup' => ObjectGroup::class, - 'piggyBank' => PiggyBank::class, - 'preference' => Preference::class, - 'tj' => TransactionJournal::class, - 'tag' => Tag::class, - 'recurrence' => Recurrence::class, - 'rule' => Rule::class, - 'ruleGroup' => RuleGroup::class, - 'transactionGroup' => TransactionGroup::class, - 'user' => User::class, - 'webhook' => Webhook::class, - 'webhookMessage' => WebhookMessage::class, - 'webhookAttempt' => WebhookAttempt::class, - 'invitedUser' => InvitedUser::class, + 'account' => Account::class, + 'attachment' => Attachment::class, + 'availableBudget' => AvailableBudget::class, + 'bill' => Bill::class, + 'budget' => Budget::class, + 'budgetLimit' => BudgetLimit::class, + 'category' => Category::class, + 'linkType' => LinkType::class, + 'transactionType' => TransactionTypeModel::class, + 'journalLink' => TransactionJournalLink::class, + 'currency' => TransactionCurrency::class, + 'objectGroup' => ObjectGroup::class, + 'piggyBank' => PiggyBank::class, + 'preference' => Preference::class, + 'tj' => TransactionJournal::class, + 'tag' => Tag::class, + 'recurrence' => Recurrence::class, + 'rule' => Rule::class, + 'ruleGroup' => RuleGroup::class, + 'transactionGroup' => TransactionGroup::class, + 'user' => User::class, + 'webhook' => Webhook::class, + 'webhookMessage' => WebhookMessage::class, + 'webhookAttempt' => WebhookAttempt::class, + 'invitedUser' => InvitedUser::class, // strings - 'currency_code' => CurrencyCode::class, + 'currency_code' => CurrencyCode::class, // dates - 'start_date' => Date::class, - 'end_date' => Date::class, - 'date' => Date::class, + 'start_date' => Date::class, + 'end_date' => Date::class, + 'date' => Date::class, // lists - 'accountList' => AccountList::class, - 'doubleList' => AccountList::class, - 'budgetList' => BudgetList::class, - 'journalList' => JournalList::class, - 'categoryList' => CategoryList::class, - 'tagList' => TagList::class, + 'accountList' => AccountList::class, + 'doubleList' => AccountList::class, + 'budgetList' => BudgetList::class, + 'journalList' => JournalList::class, + 'categoryList' => CategoryList::class, + 'tagList' => TagList::class, // others - 'fromCurrencyCode' => CurrencyCode::class, - 'toCurrencyCode' => CurrencyCode::class, - 'cliToken' => CLIToken::class, - 'tagOrId' => TagOrId::class, - 'dynamicConfigKey' => DynamicConfigKey::class, - 'eitherConfigKey' => EitherConfigKey::class, + 'fromCurrencyCode' => CurrencyCode::class, + 'toCurrencyCode' => CurrencyCode::class, + 'cliToken' => CLIToken::class, + 'tagOrId' => TagOrId::class, + 'dynamicConfigKey' => DynamicConfigKey::class, + 'eitherConfigKey' => EitherConfigKey::class, // V2 API endpoints: - 'userGroupAccount' => UserGroupAccount::class, - 'userGroupBill' => UserGroupBill::class, - 'userGroup' => UserGroup::class, - - + 'userGroupAccount' => UserGroupAccount::class, + 'userGroupTransaction' => UserGroupTransaction::class, + 'userGroupBill' => UserGroupBill::class, + 'userGroup' => UserGroup::class, ], - 'rule-actions' => [ + 'rule-actions' => [ 'set_category' => SetCategory::class, 'clear_category' => ClearCategory::class, 'set_budget' => SetBudget::class, @@ -515,8 +518,10 @@ return [ 'append_notes_to_descr' => AppendNotesToDescription::class, 'move_descr_to_notes' => MoveDescriptionToNotes::class, 'move_notes_to_descr' => MoveNotesToDescription::class, + 'set_source_to_cash' => SetSourceToCashAccount::class, + 'set_destination_to_cash' => SetDestinationToCashAccount::class, ], - 'context-rule-actions' => [ + 'context-rule-actions' => [ 'set_category', 'set_budget', 'add_tag', @@ -535,14 +540,13 @@ return [ 'convert_transfer', ], - 'test-triggers' => [ + 'test-triggers' => [ 'limit' => 10, 'range' => 200, ], - // expected source types for each transaction type, in order of preference. - 'expected_source_types' => [ + 'expected_source_types' => [ 'source' => [ TransactionTypeModel::WITHDRAWAL => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], TransactionTypeEnum::DEPOSIT->value => [AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE, AccountType::REVENUE, AccountType::CASH], @@ -587,7 +591,7 @@ return [ TransactionTypeModel::LIABILITY_CREDIT => [AccountType::LIABILITY_CREDIT, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], ], ], - 'allowed_opposing_types' => [ + 'allowed_opposing_types' => [ 'source' => [ AccountType::ASSET => [ AccountType::ASSET, @@ -632,7 +636,6 @@ return [ AccountType::RECONCILIATION => [AccountType::ASSET], AccountType::REVENUE => [AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE], AccountType::LIABILITY_CREDIT => [AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE], - ], 'destination' => [ AccountType::ASSET => [ @@ -674,11 +677,11 @@ return [ ], AccountType::RECONCILIATION => [AccountType::ASSET], AccountType::REVENUE => [], // is not allowed as a destination - AccountType::LIABILITY_CREDIT => [],// is not allowed as a destination + AccountType::LIABILITY_CREDIT => [], // is not allowed as a destination ], ], // depending on the account type, return the allowed transaction types: - 'allowed_transaction_types' => [ + 'allowed_transaction_types' => [ 'source' => [ AccountType::ASSET => [ TransactionTypeModel::WITHDRAWAL, @@ -744,11 +747,10 @@ return [ AccountType::RECONCILIATION => [TransactionTypeModel::RECONCILIATION], AccountType::LIABILITY_CREDIT => [], // is not allowed as a destination ], - ], // having the source + dest will tell you the transaction type. - 'account_to_transaction' => [ + 'account_to_transaction' => [ AccountType::ASSET => [ AccountType::ASSET => TransactionTypeModel::TRANSFER, AccountType::CASH => TransactionTypeModel::WITHDRAWAL, @@ -813,7 +815,7 @@ return [ ], // allowed source -> destination accounts. - 'source_dests' => [ + 'source_dests' => [ TransactionTypeModel::WITHDRAWAL => [ AccountType::ASSET => [AccountType::EXPENSE, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE, AccountType::CASH], AccountType::LOAN => [AccountType::EXPENSE, AccountType::CASH], @@ -852,7 +854,7 @@ return [ ], ], // if you add fields to this array, don't forget to update the export routine (ExportDataGenerator). - 'journal_meta_fields' => [ + 'journal_meta_fields' => [ // sepa 'sepa_cc', 'sepa_ct_op', @@ -886,25 +888,35 @@ return [ 'recurrence_count', 'recurrence_date', ], - 'webhooks' => [ + 'webhooks' => [ 'max_attempts' => env('WEBHOOK_MAX_ATTEMPTS', 3), ], - 'can_have_virtual_amounts' => [AccountType::ASSET], - 'can_have_opening_balance' => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], - 'dynamic_creation_allowed' => [ + 'can_have_virtual_amounts' => [AccountType::ASSET], + 'can_have_opening_balance' => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], + 'dynamic_creation_allowed' => [ AccountType::EXPENSE, AccountType::REVENUE, AccountType::INITIAL_BALANCE, AccountType::RECONCILIATION, AccountType::LIABILITY_CREDIT, ], - 'valid_asset_fields' => ['account_role', 'account_number', 'currency_id', 'BIC', 'include_net_worth'], - 'valid_cc_fields' => ['account_role', 'cc_monthly_payment_date', 'cc_type', 'account_number', 'currency_id', 'BIC', 'include_net_worth'], - 'valid_account_fields' => ['account_number', 'currency_id', 'BIC', 'interest', 'interest_period', 'include_net_worth', 'liability_direction'], + 'valid_asset_fields' => ['account_role', 'account_number', 'currency_id', 'BIC', 'include_net_worth'], + 'valid_cc_fields' => ['account_role', 'cc_monthly_payment_date', 'cc_type', 'account_number', 'currency_id', 'BIC', 'include_net_worth'], + 'valid_account_fields' => ['account_number', 'currency_id', 'BIC', 'interest', 'interest_period', 'include_net_worth', 'liability_direction'], // dynamic date ranges are as follows: - 'dynamic_date_ranges' => ['last7', 'last30', 'last90', 'last365', 'MTD', 'QTD', 'YTD'], + 'dynamic_date_ranges' => ['last7', 'last30', 'last90', 'last365', 'MTD', 'QTD', 'YTD'], // only used in v1 - 'allowed_sort_parameters' => ['order', 'name', 'iban'], + 'allowed_sort_parameters' => ['order', 'name', 'iban'], + + // preselected account lists possibilities: + 'preselected_accounts' => ['all', 'assets', 'liabilities'], + + // allowed sort columns for API's + 'sorting' => [ + 'allowed' => [ + 'transactions' => ['description', 'amount'], + ], + ], ]; diff --git a/config/google2fa.php b/config/google2fa.php index 553c4a6014..a765f3ef25 100644 --- a/config/google2fa.php +++ b/config/google2fa.php @@ -24,76 +24,53 @@ declare(strict_types=1); use PragmaRX\Google2FALaravel\Support\Constants; return [ - /* - * Auth container binding - */ + // Auth container binding - 'enabled' => true, + 'enabled' => true, /* * Lifetime in minutes. * In case you need your users to be asked for a new one time passwords from time to time. */ - 'lifetime' => 0, // 0 = eternal + 'lifetime' => 0, // 0 = eternal - /* - * Renew lifetime at every new request. - */ + // Renew lifetime at every new request. - 'keep_alive' => true, + 'keep_alive' => true, - /* - * Auth container binding - */ + // Auth container binding - 'auth' => 'auth', + 'auth' => 'auth', - /* - * 2FA verified session var - */ + // 2FA verified session var 'session_var' => 'google2fa', - /* - * One Time Password request input name - */ + // One Time Password request input name 'otp_input' => 'one_time_password', - /* - * One Time Password Window - */ + // One Time Password Window 'window' => 1, - /* - * Forbid user to reuse One Time Passwords. - */ + // Forbid user to reuse One Time Passwords. 'forbid_old_passwords' => false, - /* - * User's table column for google2fa secret - */ + // User's table column for google2fa secret 'otp_secret_column' => 'mfa_secret', - /* - * One Time Password View - */ + // One Time Password View 'view' => 'auth.mfa', - /* - * One Time Password error message - */ + // One Time Password error message 'error_messages' => [ 'wrong_otp' => "The 'One Time Password' typed was wrong.", ], - /* - * Throw exceptions or just fire events? - */ + // Throw exceptions or just fire events? 'throw_exceptions' => true, - 'store_in_cookie' => true, + 'store_in_cookie' => true, 'qrcode_image_backend' => Constants::QRCODE_IMAGE_BACKEND_SVG, - ]; diff --git a/config/hashing.php b/config/hashing.php index a82faad299..87143f8ab8 100644 --- a/config/hashing.php +++ b/config/hashing.php @@ -1,6 +1,5 @@ [ + 'argon' => [ 'memory' => 65536, 'threads' => 1, 'time' => 4, ], - ]; diff --git a/config/ide-helper.php b/config/ide-helper.php index 95598ccdcf..ba5106bd66 100644 --- a/config/ide-helper.php +++ b/config/ide-helper.php @@ -31,10 +31,10 @@ return [ | */ - 'filename' => '_ide_helper', - 'format' => 'php', + 'filename' => '_ide_helper', + 'format' => 'php', - 'meta_filename' => '.phpstorm.meta.php', + 'meta_filename' => '.phpstorm.meta.php', /* |-------------------------------------------------------------------------- @@ -45,7 +45,7 @@ return [ | */ - 'include_fluent' => true, + 'include_fluent' => true, /* |-------------------------------------------------------------------------- @@ -56,7 +56,7 @@ return [ | */ - 'write_model_magic_where' => true, + 'write_model_magic_where' => true, /* |-------------------------------------------------------------------------- @@ -83,10 +83,10 @@ return [ | */ - 'include_helpers' => false, + 'include_helpers' => false, - 'helper_files' => [ - base_path() . '/vendor/laravel/framework/src/Illuminate/Support/helpers.php', + 'helper_files' => [ + base_path().'/vendor/laravel/framework/src/Illuminate/Support/helpers.php', ], /* @@ -99,7 +99,7 @@ return [ | */ - 'model_locations' => [ + 'model_locations' => [ 'app', ], @@ -112,12 +112,12 @@ return [ | */ - 'extra' => [ + 'extra' => [ 'Eloquent' => ['Illuminate\Database\Eloquent\Builder', 'Illuminate\Database\Query\Builder'], 'Session' => ['Illuminate\Session\Store'], ], - 'magic' => [ + 'magic' => [ 'Log' => [ 'debug' => 'Monolog\Logger::addDebug', 'info' => 'Monolog\Logger::addInfo', @@ -141,7 +141,6 @@ return [ */ 'interfaces' => [ - ], /* @@ -171,7 +170,6 @@ return [ | */ 'custom_db_types' => [ - ], /* @@ -223,5 +221,4 @@ return [ | */ 'include_class_docblocks' => false, - ]; diff --git a/config/intro.php b/config/intro.php index b364b9f7b5..185afae4a5 100644 --- a/config/intro.php +++ b/config/intro.php @@ -21,13 +21,11 @@ declare(strict_types=1); -/* - * Always make sure intro is the first element (if any) and outro is the last one. - */ +// Always make sure intro is the first element (if any) and outro is the last one. return [ // index - 'index' => [ + 'index' => [ 'intro' => [], 'accounts-chart' => ['element' => '#accounts-chart'], 'box_out_holder' => ['element' => '#box_out_holder'], @@ -37,11 +35,11 @@ return [ 'outro' => [], ], // accounts: create - 'accounts_create' => [ + 'accounts_create' => [ 'iban' => ['element' => '#ffInput_iban'], ], // transactions: create - 'transactions_create' => [ + 'transactions_create' => [ 'basic_info' => ['element' => '#transaction-info', 'position' => 'right'], 'amount_info' => ['element' => '#amount-info', 'position' => 'bottom'], 'optional_info' => ['element' => '#optional-info', 'position' => 'left'], @@ -51,101 +49,96 @@ return [ 'transactions_create_withdrawal' => [ ], - 'transactions_create_deposit' => [ + 'transactions_create_deposit' => [ ], - 'transactions_create_transfer' => [ + 'transactions_create_transfer' => [ ], // extra text for asset account creation. - 'accounts_create_asset' => [ + 'accounts_create_asset' => [ 'opening_balance' => ['element' => '#ffInput_opening_balance'], 'currency' => ['element' => '#ffInput_currency_id'], 'virtual' => ['element' => '#ffInput_virtual_balance'], ], // budgets: index - 'budgets_index' => [ + 'budgets_index' => [ 'intro' => [], - 'set_budget' => ['element' => '#availableBar'], 'see_expenses_bar' => ['element' => '#spentBar'], 'navigate_periods' => ['element' => '#periodNavigator'], 'new_budget' => ['element' => '#createBudgetBox'], 'list_of_budgets' => ['element' => '#budgetList'], 'outro' => [], - ], // reports: index, default report, audit, budget, cat, tag - 'reports_index' => [ + 'reports_index' => [ 'intro' => [], 'inputReportType' => ['element' => '#inputReportType'], 'inputAccountsSelect' => ['element' => '#inputAccountsSelect'], 'inputDateRange' => ['element' => '#inputDateRange'], 'extra-options-box' => ['element' => '#extra-options-box', 'position' => 'top'], ], - 'reports_report_default' => [ + 'reports_report_default' => [ 'intro' => [], ], - 'reports_report_audit' => [ + 'reports_report_audit' => [ 'intro' => [], 'optionsBox' => ['element' => '#optionsBox'], ], - 'reports_report_category' => [ - 'intro' => [], - 'pieCharts' => ['element' => '#pieCharts'], - 'incomeAndExpensesChart' => ['element' => '#incomeAndExpensesChart', 'position' => 'top'], - - ], - 'reports_report_tag' => [ + 'reports_report_category' => [ 'intro' => [], 'pieCharts' => ['element' => '#pieCharts'], 'incomeAndExpensesChart' => ['element' => '#incomeAndExpensesChart', 'position' => 'top'], ], - 'reports_report_budget' => [ + 'reports_report_tag' => [ + 'intro' => [], + 'pieCharts' => ['element' => '#pieCharts'], + 'incomeAndExpensesChart' => ['element' => '#incomeAndExpensesChart', 'position' => 'top'], + ], + 'reports_report_budget' => [ 'intro' => [], 'pieCharts' => ['element' => '#pieCharts'], 'incomeAndExpensesChart' => ['element' => '#incomeAndExpensesChart', 'position' => 'top'], ], // piggies: index, create, show - 'piggy-banks_index' => [ + 'piggy-banks_index' => [ 'saved' => ['element' => '.piggySaved'], 'button' => ['element' => '.piggyBar'], 'accountStatus' => ['element' => '#accountStatus', 'position' => 'top'], ], - 'piggy-banks_create' => [ + 'piggy-banks_create' => [ 'name' => ['element' => '#ffInput_name'], 'date' => ['element' => '#ffInput_targetdate'], - ], - 'piggy-banks_show' => [ + 'piggy-banks_show' => [ 'piggyChart' => ['element' => '#piggyChart'], 'piggyDetails' => ['element' => '#piggyDetails'], 'piggyEvents' => ['element' => '#piggyEvents'], ], // bills: index, create, show - 'bills_index' => [ + 'bills_index' => [ 'rules' => ['element' => '.rules'], 'paid_in_period' => ['element' => '.paid_in_period'], 'expected_in_period' => ['element' => '.expected_in_period'], ], - 'bills_create' => [ + 'bills_create' => [ 'intro' => [], 'name' => ['element' => '#name_holder'], - //'match' => ['element' => '#match_holder'], + // 'match' => ['element' => '#match_holder'], 'amount_min_holder' => ['element' => '#amount_min_holder'], 'repeat_freq_holder' => ['element' => '#repeat_freq_holder'], 'skip_holder' => ['element' => '#skip_holder'], ], - 'bills_show' => [ + 'bills_show' => [ 'billInfo' => ['element' => '#billInfo'], 'billButtons' => ['element' => '#billButtons'], 'billChart' => ['element' => '#billChart', 'position' => 'top'], - ], // rules: index, create-rule, edit-rule - 'rules_index' => [ + 'rules_index' => [ 'intro' => [], 'new_rule_group' => ['element' => '#new_rule_group'], 'new_rule' => ['element' => '.new_rule'], @@ -154,23 +147,23 @@ return [ 'rule-triggers' => ['element' => '.rule-triggers'], 'outro' => [], ], - 'rules_create' => [ + 'rules_create' => [ 'mandatory' => ['element' => '#mandatory'], 'ruletriggerholder' => ['element' => '.rule-trigger-box'], 'test_rule_triggers' => ['element' => '.test_rule_triggers'], 'actions' => ['element' => '.rule-action-box', 'position' => 'top'], ], // preferences: index - 'preferences_index' => [ + 'preferences_index' => [ 'tabs' => ['element' => '.nav-tabs'], ], // currencies: index, create - 'currencies_index' => [ + 'currencies_index' => [ 'intro' => [], 'default' => ['element' => '#default-currency'], 'buttons' => ['element' => '.buttons'], ], - 'currencies_create' => [ + 'currencies_create' => [ 'code' => ['element' => '#ffInput_code'], ], ]; diff --git a/config/logging.php b/config/logging.php index 57d2601851..53108ae1cb 100644 --- a/config/logging.php +++ b/config/logging.php @@ -25,17 +25,16 @@ use FireflyIII\Support\Logging\AuditLogger; use Monolog\Handler\SyslogUdpHandler; // standard config for both log things: -$defaultChannels = ['daily', 'stdout']; -$auditChannels = ['audit_daily', 'audit_stdout']; - +$defaultChannels = ['daily', 'stdout']; +$auditChannels = ['audit_daily', 'audit_stdout']; // validChannels is missing 'stack' because we already check for that one. $validChannels = ['single', 'papertrail', 'stdout', 'daily', 'syslog', 'errorlog']; $validAuditChannels = ['audit_papertrail', 'audit_stdout', 'audit_stdout', 'audit_daily', 'audit_syslog', 'audit_errorlog']; // which settings did the user set, if any? -$defaultLogChannel = (string)envNonEmpty('LOG_CHANNEL', 'stack'); -$auditLogChannel = (string)envNonEmpty('AUDIT_LOG_CHANNEL', ''); +$defaultLogChannel = (string)envNonEmpty('LOG_CHANNEL', 'stack'); +$auditLogChannel = (string)envNonEmpty('AUDIT_LOG_CHANNEL', ''); if ('stack' === $defaultLogChannel) { $defaultChannels = ['daily', 'stdout']; @@ -60,8 +59,8 @@ return [ | */ - 'default' => envNonEmpty('LOG_CHANNEL', 'stack'), - 'level' => envNonEmpty('APP_LOG_LEVEL', 'info'), + 'default' => envNonEmpty('LOG_CHANNEL', 'stack'), + 'level' => envNonEmpty('APP_LOG_LEVEL', 'info'), /* |-------------------------------------------------------------------------- | Log Channels @@ -89,9 +88,7 @@ return [ 'driver' => 'stack', 'channels' => $auditChannels, ], - /* - * There are 6 valid destinations for the normal logs, listed below: - */ + // There are 6 valid destinations for the normal logs, listed below: 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), @@ -113,7 +110,7 @@ return [ ], 'daily' => [ 'driver' => 'daily', - 'path' => storage_path('logs/ff3-' . PHP_SAPI . '.log'), + 'path' => storage_path('logs/ff3-'.PHP_SAPI.'.log'), 'level' => envNonEmpty('APP_LOG_LEVEL', 'info'), 'days' => 7, ], @@ -163,8 +160,5 @@ return [ 'tap' => [AuditLogger::class], 'level' => envNonEmpty('AUDIT_LOG_LEVEL', 'info'), ], - - ], - ]; diff --git a/config/mail.php b/config/mail.php index baea55bdc0..d32ac9567f 100644 --- a/config/mail.php +++ b/config/mail.php @@ -22,7 +22,6 @@ declare(strict_types=1); return [ - /* |-------------------------------------------------------------------------- | Default Mailer @@ -33,10 +32,10 @@ return [ | and used as needed; however, this mailer will be used by default. | */ - 'default' => envNonEmpty('MAIL_MAILER', 'log'), + 'default' => envNonEmpty('MAIL_MAILER', 'log'), - 'mailers' => [ - 'smtp' => [ + 'mailers' => [ + 'smtp' => [ 'transport' => 'smtp', 'host' => envNonEmpty('MAIL_HOST', 'smtp.mailtrap.io'), 'port' => (int)env('MAIL_PORT', 2525), @@ -47,11 +46,11 @@ return [ 'verify_peer' => null !== env('MAIL_ENCRYPTION'), ], - 'ses' => [ + 'ses' => [ 'transport' => 'ses', ], - 'mailgun' => [ + 'mailgun' => [ 'transport' => 'mailgun', ], @@ -70,7 +69,7 @@ return [ 'log' => [ 'transport' => 'log', 'channel' => env('MAIL_LOG_CHANNEL', 'stack'), - 'level' => 'notice', + 'level' => 'info', ], 'null' => [ 'transport' => 'log', @@ -78,7 +77,7 @@ return [ 'level' => 'notice', ], - 'array' => [ + 'array' => [ 'transport' => 'array', ], ], @@ -91,5 +90,4 @@ return [ resource_path('views/vendor/mail'), ], ], - ]; diff --git a/config/passport.php b/config/passport.php index 6ea53eb703..cc33818b0a 100644 --- a/config/passport.php +++ b/config/passport.php @@ -1,6 +1,5 @@ envNonEmpty('AUTHENTICATION_GUARD', 'web'), + 'guard' => envNonEmpty('AUTHENTICATION_GUARD', 'web'), /* |-------------------------------------------------------------------------- @@ -49,9 +47,9 @@ return [ | */ - 'private_key' => env('PASSPORT_PRIVATE_KEY'), + 'private_key' => env('PASSPORT_PRIVATE_KEY'), - 'public_key' => env('PASSPORT_PUBLIC_KEY'), + 'public_key' => env('PASSPORT_PUBLIC_KEY'), /* |-------------------------------------------------------------------------- @@ -64,7 +62,7 @@ return [ | */ - 'client_uuids' => false, + 'client_uuids' => false, /* |-------------------------------------------------------------------------- @@ -81,5 +79,4 @@ return [ 'id' => env('PASSPORT_PERSONAL_ACCESS_CLIENT_ID'), 'secret' => env('PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET'), ], - ]; diff --git a/config/queue.php b/config/queue.php index 0950149af1..ad87f1e717 100644 --- a/config/queue.php +++ b/config/queue.php @@ -23,7 +23,6 @@ declare(strict_types=1); return [ - /* |-------------------------------------------------------------------------- | Default Queue Connection Name @@ -35,7 +34,7 @@ return [ | */ - 'default' => env('QUEUE_CONNECTION', 'sync'), + 'default' => env('QUEUE_CONNECTION', 'sync'), /* |-------------------------------------------------------------------------- @@ -51,12 +50,11 @@ return [ */ 'connections' => [ - - 'sync' => [ + 'sync' => [ 'driver' => 'sync', ], - 'database' => [ + 'database' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'default', @@ -71,7 +69,7 @@ return [ 'block_for' => 0, ], - 'sqs' => [ + 'sqs' => [ 'driver' => 'sqs', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), @@ -81,14 +79,13 @@ return [ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], - 'redis' => [ + 'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => env('REDIS_QUEUE', 'default'), 'retry_after' => 90, 'block_for' => null, ], - ], /* @@ -102,10 +99,9 @@ return [ | */ - 'failed' => [ + 'failed' => [ 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), 'database' => env('DB_CONNECTION', 'mysql'), 'table' => 'failed_jobs', ], - ]; diff --git a/config/sanctum.php b/config/sanctum.php index d0b57a048f..67921d9dd2 100644 --- a/config/sanctum.php +++ b/config/sanctum.php @@ -26,7 +26,6 @@ use FireflyIII\Http\Middleware\EncryptCookies; use FireflyIII\Http\Middleware\VerifyCsrfToken; return [ - /* |-------------------------------------------------------------------------- | Stateful Domains @@ -38,7 +37,7 @@ return [ | */ - 'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', '')), + 'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', '')), /* |-------------------------------------------------------------------------- @@ -52,7 +51,7 @@ return [ | */ - 'guard' => [env('AUTHENTICATION_GUARD', 'web')], + 'guard' => [env('AUTHENTICATION_GUARD', 'web')], /* |-------------------------------------------------------------------------- @@ -82,5 +81,4 @@ return [ 'verify_csrf_token' => VerifyCsrfToken::class, 'encrypt_cookies' => EncryptCookies::class, ], - ]; diff --git a/config/search.php b/config/search.php index 6e065e4f07..021da929f3 100644 --- a/config/search.php +++ b/config/search.php @@ -24,197 +24,203 @@ declare(strict_types=1); return [ 'operators' => [ - 'user_action' => ['alias' => false, 'needs_context' => true,], - 'account_id' => ['alias' => false, 'needs_context' => true,], - 'reconciled' => ['alias' => false, 'needs_context' => false,], - 'source_account_id' => ['alias' => false, 'needs_context' => true,], - 'destination_account_id' => ['alias' => false, 'needs_context' => true,], - 'transaction_type' => ['alias' => false, 'needs_context' => true,], - 'type' => ['alias' => true, 'alias_for' => 'transaction_type', 'needs_context' => true,], - 'tag_is' => ['alias' => false, 'needs_context' => true,], - 'tag_is_not' => ['alias' => false, 'needs_context' => true,], - 'tag' => ['alias' => true, 'alias_for' => 'tag_is', 'needs_context' => true,], - 'description_is' => ['alias' => false, 'needs_context' => true,], - 'description' => ['alias' => true, 'alias_for' => 'description_is', 'needs_context' => true,], - 'description_contains' => ['alias' => false, 'needs_context' => true,], - 'description_ends' => ['alias' => false, 'needs_context' => true,], - 'description_starts' => ['alias' => false, 'needs_context' => true,], - 'notes_is' => ['alias' => false, 'needs_context' => true,], - 'notes_are' => ['alias' => true, 'alias_for' => 'notes_is', 'needs_context' => true,], - 'notes_contains' => ['alias' => false, 'needs_context' => true,], - 'notes_contain' => ['alias' => true, 'alias_for' => 'notes_contains', 'needs_context' => true,], - 'notes' => ['alias' => true, 'alias_for' => 'notes_contains', 'needs_context' => true,], - 'notes_ends' => ['alias' => false, 'needs_context' => true,], - 'notes_end' => ['alias' => true, 'alias_for' => 'notes_ends', 'needs_context' => true,], - 'notes_starts' => ['alias' => false, 'needs_context' => true,], - 'notes_start' => ['alias' => true, 'alias_for' => 'notes_starts', 'needs_context' => true,], - 'source_account_is' => ['alias' => false, 'needs_context' => true,], - 'from_account_is' => ['alias' => true, 'alias_for' => 'source_account_is', 'needs_context' => true,], - 'source_account_contains' => ['alias' => false, 'needs_context' => true,], - 'source' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true,], - 'from' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true,], - 'from_account_contains' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true,], - 'source_account_ends' => ['alias' => false, 'needs_context' => true,], - 'from_account_ends' => ['alias' => true, 'alias_for' => 'source_account_ends', 'needs_context' => true,], - 'source_account_starts' => ['alias' => false, 'needs_context' => true,], - 'from_account_starts' => ['alias' => true, 'alias_for' => 'source_account_starts', 'needs_context' => true,], - 'source_account_nr_is' => ['alias' => false, 'needs_context' => true,], - 'from_account_nr_is' => ['alias' => true, 'alias_for' => 'source_account_nr_is', 'needs_context' => true,], - 'source_account_nr_contains' => ['alias' => false, 'needs_context' => true,], - 'from_account_nr_contains' => ['alias' => true, 'alias_for' => 'source_account_nr_contains', 'needs_context' => true,], - 'source_account_nr_ends' => ['alias' => false, 'needs_context' => true,], - 'from_account_nr_ends' => ['alias' => true, 'alias_for' => 'source_account_nr_ends', 'needs_context' => true,], - 'source_account_nr_starts' => ['alias' => false, 'needs_context' => true,], - 'from_account_nr_starts' => ['alias' => true, 'alias_for' => 'source_account_nr_starts', 'needs_context' => true,], - 'destination_account_is' => ['alias' => false, 'needs_context' => true,], - 'to_account_is' => ['alias' => true, 'alias_for' => 'destination_account_is', 'needs_context' => true,], - 'destination_account_contains' => ['alias' => false, 'needs_context' => true,], - 'destination' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true,], - 'to' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true,], - 'to_account_contains' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true,], - 'destination_account_ends' => ['alias' => false, 'needs_context' => true,], - 'to_account_ends' => ['alias' => true, 'alias_for' => 'destination_account_ends', 'needs_context' => true,], - 'destination_account_starts' => ['alias' => false, 'needs_context' => true,], - 'to_account_starts' => ['alias' => true, 'alias_for' => 'destination_account_starts', 'needs_context' => true,], - 'destination_account_nr_is' => ['alias' => false, 'needs_context' => true,], - 'to_account_nr_is' => ['alias' => true, 'alias_for' => 'destination_account_nr_is', 'needs_context' => true,], - 'destination_account_nr_contains' => ['alias' => false, 'needs_context' => true,], - 'to_account_nr_contains' => ['alias' => true, 'alias_for' => 'destination_account_nr_contains', 'needs_context' => true,], - 'destination_account_nr_ends' => ['alias' => false, 'needs_context' => true,], - 'to_account_nr_ends' => ['alias' => true, 'alias_for' => 'destination_account_nr_ends', 'needs_context' => true,], - 'destination_account_nr_starts' => ['alias' => false, 'needs_context' => true,], - 'to_account_nr_starts' => ['alias' => true, 'alias_for' => 'destination_account_nr_starts', 'needs_context' => true,], - 'account_is' => ['alias' => false, 'needs_context' => true,], - 'account_contains' => ['alias' => false, 'needs_context' => true,], - 'account_ends' => ['alias' => false, 'needs_context' => true,], - 'account_starts' => ['alias' => false, 'needs_context' => true,], - 'account_nr_is' => ['alias' => false, 'needs_context' => true,], - 'account_nr_contains' => ['alias' => false, 'needs_context' => true,], - 'account_nr_ends' => ['alias' => false, 'needs_context' => true,], - 'account_nr_starts' => ['alias' => false, 'needs_context' => true,], - 'category_is' => ['alias' => false, 'needs_context' => true,], - 'category_contains' => ['alias' => false, 'needs_context' => true,], - 'category' => ['alias' => true, 'alias_for' => 'category_contains', 'needs_context' => true,], - 'category_ends' => ['alias' => false, 'needs_context' => true,], - 'category_starts' => ['alias' => false, 'needs_context' => true,], - 'budget_is' => ['alias' => false, 'needs_context' => true,], - 'budget_contains' => ['alias' => false, 'needs_context' => true,], - 'budget' => ['alias' => true, 'alias_for' => 'budget_contains', 'needs_context' => true,], - 'budget_ends' => ['alias' => false, 'needs_context' => true,], - 'budget_starts' => ['alias' => false, 'needs_context' => true,], - 'bill_is' => ['alias' => false, 'needs_context' => true,], - 'bill_contains' => ['alias' => false, 'needs_context' => true,], - 'bill' => ['alias' => true, 'alias_for' => 'bill_contains', 'needs_context' => true,], - 'bill_ends' => ['alias' => false, 'needs_context' => true,], - 'bill_starts' => ['alias' => false, 'needs_context' => true,], - 'external_id_is' => ['alias' => false, 'needs_context' => true,], - 'external_id_contains' => ['alias' => false, 'needs_context' => true,], - 'external_id' => ['alias' => true, 'alias_for' => 'external_id_contains', 'needs_context' => true,], - 'external_id_ends' => ['alias' => false, 'needs_context' => true,], - 'external_id_starts' => ['alias' => false, 'needs_context' => true,], - 'internal_reference_is' => ['alias' => false, 'needs_context' => true,], - 'internal_reference_contains' => ['alias' => false, 'needs_context' => true,], - 'internal_reference' => ['alias' => true, 'alias_for' => 'internal_reference_contains', 'needs_context' => true,], - 'internal_reference_ends' => ['alias' => false, 'needs_context' => true,], - 'internal_reference_starts' => ['alias' => false, 'needs_context' => true,], - 'external_url_is' => ['alias' => false, 'needs_context' => true,], - 'external_url_contains' => ['alias' => false, 'needs_context' => true,], - 'external_url' => ['alias' => true, 'alias_for' => 'external_url_contains', 'needs_context' => true,], - 'external_url_ends' => ['alias' => false, 'needs_context' => true,], - 'external_url_starts' => ['alias' => false, 'needs_context' => true,], - 'has_attachments' => ['alias' => false, 'needs_context' => false,], - 'has_any_category' => ['alias' => false, 'needs_context' => false,], - 'has_any_budget' => ['alias' => false, 'needs_context' => false,], - 'has_any_bill' => ['alias' => false, 'needs_context' => false,], - 'has_any_tag' => ['alias' => false, 'needs_context' => false,], - 'any_notes' => ['alias' => false, 'needs_context' => false,], - 'has_any_notes' => ['alias' => true, 'alias_for' => 'any_notes', 'needs_context' => false,], - 'any_external_url' => ['alias' => false, 'needs_context' => false,], - 'has_any_external_url' => ['alias' => true, 'alias_for' => 'any_external_url', 'needs_context' => false,], - 'has_no_attachments' => ['alias' => false, 'needs_context' => false,], - 'has_no_category' => ['alias' => false, 'needs_context' => false,], - 'has_no_budget' => ['alias' => false, 'needs_context' => false,], - 'has_no_bill' => ['alias' => false, 'needs_context' => false,], - 'has_no_tag' => ['alias' => false, 'needs_context' => false,], - 'no_notes' => ['alias' => false, 'needs_context' => false,], - 'no_external_url' => ['alias' => false, 'needs_context' => false,], - 'source_is_cash' => ['alias' => false, 'needs_context' => false,], - 'destination_is_cash' => ['alias' => false, 'needs_context' => false,], - 'account_is_cash' => ['alias' => false, 'needs_context' => false,], - 'currency_is' => ['alias' => false, 'needs_context' => true,], - 'foreign_currency_is' => ['alias' => false, 'needs_context' => true,], - 'id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true,], - 'journal_id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true,], - 'recurrence_id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true,], - 'date_on' => ['alias' => false, 'needs_context' => true,], - 'date' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true,], - 'date_is' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true,], - 'on' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true,], - 'date_before' => ['alias' => false, 'needs_context' => true,], - 'before' => ['alias' => true, 'alias_for' => 'date_before', 'needs_context' => true,], - 'date_after' => ['alias' => false, 'needs_context' => true,], - 'after' => ['alias' => true, 'alias_for' => 'date_after', 'needs_context' => true,], - 'interest_date_on' => ['alias' => false, 'needs_context' => true,], - 'interest_date' => ['alias' => true, 'alias_for' => 'interest_date_on', 'needs_context' => true,], - 'interest_date_is' => ['alias' => true, 'alias_for' => 'interest_date_on', 'needs_context' => true,], - 'interest_date_before' => ['alias' => false, 'needs_context' => true,], - 'interest_date_after' => ['alias' => false, 'needs_context' => true,], - 'book_date_on' => ['alias' => false, 'needs_context' => true,], - 'book_date' => ['alias' => true, 'alias_for' => 'book_date_on', 'needs_context' => true,], - 'book_date_is' => ['alias' => true, 'alias_for' => 'book_date_on', 'needs_context' => true,], - 'book_date_before' => ['alias' => false, 'needs_context' => true,], - 'book_date_after' => ['alias' => false, 'needs_context' => true,], - 'process_date_on' => ['alias' => false, 'needs_context' => true,], - 'process_date' => ['alias' => true, 'alias_for' => 'process_date_on', 'needs_context' => true,], - 'process_date_is' => ['alias' => true, 'alias_for' => 'process_date_on', 'needs_context' => true,], - 'process_date_before' => ['alias' => false, 'needs_context' => true,], - 'process_date_after' => ['alias' => false, 'needs_context' => true,], - 'due_date_on' => ['alias' => false, 'needs_context' => true,], - 'due_date' => ['alias' => true, 'alias_for' => 'due_date_on', 'needs_context' => true,], - 'due_date_is' => ['alias' => true, 'alias_for' => 'due_date_on', 'needs_context' => true,], - 'due_date_before' => ['alias' => false, 'needs_context' => true,], - 'due_date_after' => ['alias' => false, 'needs_context' => true,], - 'payment_date_on' => ['alias' => false, 'needs_context' => true,], - 'payment_date' => ['alias' => true, 'alias_for' => 'payment_date_on', 'needs_context' => true,], - 'payment_date_is' => ['alias' => true, 'alias_for' => 'payment_date_on', 'needs_context' => true,], - 'payment_date_before' => ['alias' => false, 'needs_context' => true,], - 'payment_date_after' => ['alias' => false, 'needs_context' => true,], - 'invoice_date_on' => ['alias' => false, 'needs_context' => true,], - 'invoice_date' => ['alias' => true, 'alias_for' => 'invoice_date_on', 'needs_context' => true,], - 'invoice_date_is' => ['alias' => true, 'alias_for' => 'invoice_date_on', 'needs_context' => true,], - 'invoice_date_before' => ['alias' => false, 'needs_context' => true,], - 'invoice_date_after' => ['alias' => false, 'needs_context' => true,], - 'created_at_on' => ['alias' => false, 'needs_context' => true,], - 'created_at' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true,], - 'created_at_is' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true,], - 'created_at_before' => ['alias' => false, 'needs_context' => true,], - 'created_at_after' => ['alias' => false, 'needs_context' => true,], - 'updated_at_on' => ['alias' => false, 'needs_context' => true,], - 'updated_at' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true,], - 'updated_at_is' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true,], - 'updated_at_before' => ['alias' => false, 'needs_context' => true,], - 'updated_at_after' => ['alias' => false, 'needs_context' => true,], - 'created_on_on' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true,], - 'created_on' => ['alias' => true, 'alias_for' => 'created_at', 'needs_context' => true,], - 'created_on_before' => ['alias' => true, 'alias_for' => 'created_at_before', 'needs_context' => true,], - 'created_on_after' => ['alias' => true, 'alias_for' => 'created_at_after', 'needs_context' => true,], - 'updated_on_on' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true,], - 'updated_on' => ['alias' => true, 'alias_for' => 'updated_at', 'needs_context' => true,], - 'updated_on_before' => ['alias' => true, 'alias_for' => 'updated_at_before', 'needs_context' => true,], - 'updated_on_after' => ['alias' => true, 'alias_for' => 'updated_at_after', 'needs_context' => true,], - 'amount_is' => ['alias' => false, 'needs_context' => true,], - 'amount' => ['alias' => true, 'alias_for' => 'amount_is', 'needs_context' => true,], - 'amount_exactly' => ['alias' => true, 'alias_for' => 'amount_is', 'needs_context' => true,], - 'amount_less' => ['alias' => false, 'needs_context' => true,], - 'amount_max' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true,], - 'amount_more' => ['alias' => false, 'needs_context' => true,], - 'amount_min' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true,], - 'foreign_amount_is' => ['alias' => false, 'needs_context' => true,], - 'foreign_amount' => ['alias' => true, 'alias_for' => 'foreign_amount_is', 'needs_context' => true,], - 'foreign_amount_less' => ['alias' => false, 'needs_context' => true,], - 'foreign_amount_max' => ['alias' => true, 'alias_for' => 'foreign_amount_less', 'needs_context' => true,], - 'foreign_amount_more' => ['alias' => false, 'needs_context' => true,], - 'foreign_amount_min' => ['alias' => true, 'alias_for' => 'foreign_amount_more', 'needs_context' => true,], + 'user_action' => ['alias' => false, 'needs_context' => true], + 'account_id' => ['alias' => false, 'needs_context' => true], + 'reconciled' => ['alias' => false, 'needs_context' => false], + 'source_account_id' => ['alias' => false, 'needs_context' => true], + 'destination_account_id' => ['alias' => false, 'needs_context' => true], + 'transaction_type' => ['alias' => false, 'needs_context' => true], + 'type' => ['alias' => true, 'alias_for' => 'transaction_type', 'needs_context' => true], + 'tag_is' => ['alias' => false, 'needs_context' => true], + 'tag_is_not' => ['alias' => false, 'needs_context' => true], + 'tag' => ['alias' => true, 'alias_for' => 'tag_is', 'needs_context' => true], + 'tag_contains' => ['alias' => false, 'needs_context' => true], + 'tag_ends' => ['alias' => false, 'needs_context' => true], + 'tag_starts' => ['alias' => false, 'needs_context' => true], + 'description_is' => ['alias' => false, 'needs_context' => true], + 'description' => ['alias' => true, 'alias_for' => 'description_is', 'needs_context' => true], + 'description_contains' => ['alias' => false, 'needs_context' => true], + 'description_ends' => ['alias' => false, 'needs_context' => true], + 'description_starts' => ['alias' => false, 'needs_context' => true], + 'notes_is' => ['alias' => false, 'needs_context' => true], + 'notes_are' => ['alias' => true, 'alias_for' => 'notes_is', 'needs_context' => true], + 'notes_contains' => ['alias' => false, 'needs_context' => true], + 'notes_contain' => ['alias' => true, 'alias_for' => 'notes_contains', 'needs_context' => true], + 'notes' => ['alias' => true, 'alias_for' => 'notes_contains', 'needs_context' => true], + 'notes_ends' => ['alias' => false, 'needs_context' => true], + 'notes_end' => ['alias' => true, 'alias_for' => 'notes_ends', 'needs_context' => true], + 'notes_starts' => ['alias' => false, 'needs_context' => true], + 'notes_start' => ['alias' => true, 'alias_for' => 'notes_starts', 'needs_context' => true], + 'source_account_is' => ['alias' => false, 'needs_context' => true], + 'from_account_is' => ['alias' => true, 'alias_for' => 'source_account_is', 'needs_context' => true], + 'source_account_contains' => ['alias' => false, 'needs_context' => true], + 'source' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true], + 'from' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true], + 'from_account_contains' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true], + 'source_account_ends' => ['alias' => false, 'needs_context' => true], + 'from_account_ends' => ['alias' => true, 'alias_for' => 'source_account_ends', 'needs_context' => true], + 'source_account_starts' => ['alias' => false, 'needs_context' => true], + 'from_account_starts' => ['alias' => true, 'alias_for' => 'source_account_starts', 'needs_context' => true], + 'source_account_nr_is' => ['alias' => false, 'needs_context' => true], + 'from_account_nr_is' => ['alias' => true, 'alias_for' => 'source_account_nr_is', 'needs_context' => true], + 'source_account_nr_contains' => ['alias' => false, 'needs_context' => true], + 'from_account_nr_contains' => ['alias' => true, 'alias_for' => 'source_account_nr_contains', 'needs_context' => true], + 'source_account_nr_ends' => ['alias' => false, 'needs_context' => true], + 'from_account_nr_ends' => ['alias' => true, 'alias_for' => 'source_account_nr_ends', 'needs_context' => true], + 'source_account_nr_starts' => ['alias' => false, 'needs_context' => true], + 'from_account_nr_starts' => ['alias' => true, 'alias_for' => 'source_account_nr_starts', 'needs_context' => true], + 'destination_account_is' => ['alias' => false, 'needs_context' => true], + 'to_account_is' => ['alias' => true, 'alias_for' => 'destination_account_is', 'needs_context' => true], + 'destination_account_contains' => ['alias' => false, 'needs_context' => true], + 'destination' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true], + 'to' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true], + 'to_account_contains' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true], + 'destination_account_ends' => ['alias' => false, 'needs_context' => true], + 'to_account_ends' => ['alias' => true, 'alias_for' => 'destination_account_ends', 'needs_context' => true], + 'destination_account_starts' => ['alias' => false, 'needs_context' => true], + 'to_account_starts' => ['alias' => true, 'alias_for' => 'destination_account_starts', 'needs_context' => true], + 'destination_account_nr_is' => ['alias' => false, 'needs_context' => true], + 'to_account_nr_is' => ['alias' => true, 'alias_for' => 'destination_account_nr_is', 'needs_context' => true], + 'destination_account_nr_contains' => ['alias' => false, 'needs_context' => true], + 'to_account_nr_contains' => ['alias' => true, 'alias_for' => 'destination_account_nr_contains', 'needs_context' => true], + 'destination_account_nr_ends' => ['alias' => false, 'needs_context' => true], + 'to_account_nr_ends' => ['alias' => true, 'alias_for' => 'destination_account_nr_ends', 'needs_context' => true], + 'destination_account_nr_starts' => ['alias' => false, 'needs_context' => true], + 'to_account_nr_starts' => ['alias' => true, 'alias_for' => 'destination_account_nr_starts', 'needs_context' => true], + 'account_is' => ['alias' => false, 'needs_context' => true], + 'account_contains' => ['alias' => false, 'needs_context' => true], + 'account_ends' => ['alias' => false, 'needs_context' => true], + 'account_starts' => ['alias' => false, 'needs_context' => true], + 'account_nr_is' => ['alias' => false, 'needs_context' => true], + 'account_nr_contains' => ['alias' => false, 'needs_context' => true], + 'account_nr_ends' => ['alias' => false, 'needs_context' => true], + 'account_nr_starts' => ['alias' => false, 'needs_context' => true], + 'category_is' => ['alias' => false, 'needs_context' => true], + 'category_contains' => ['alias' => false, 'needs_context' => true], + 'category' => ['alias' => true, 'alias_for' => 'category_contains', 'needs_context' => true], + 'category_ends' => ['alias' => false, 'needs_context' => true], + 'category_starts' => ['alias' => false, 'needs_context' => true], + 'budget_is' => ['alias' => false, 'needs_context' => true], + 'budget_contains' => ['alias' => false, 'needs_context' => true], + 'budget' => ['alias' => true, 'alias_for' => 'budget_contains', 'needs_context' => true], + 'budget_ends' => ['alias' => false, 'needs_context' => true], + 'budget_starts' => ['alias' => false, 'needs_context' => true], + 'bill_is' => ['alias' => false, 'needs_context' => true], + 'bill_contains' => ['alias' => false, 'needs_context' => true], + 'bill' => ['alias' => true, 'alias_for' => 'bill_contains', 'needs_context' => true], + 'bill_ends' => ['alias' => false, 'needs_context' => true], + 'bill_starts' => ['alias' => false, 'needs_context' => true], + 'external_id_is' => ['alias' => false, 'needs_context' => true], + 'external_id_contains' => ['alias' => false, 'needs_context' => true], + 'external_id' => ['alias' => true, 'alias_for' => 'external_id_contains', 'needs_context' => true], + 'external_id_ends' => ['alias' => false, 'needs_context' => true], + 'external_id_starts' => ['alias' => false, 'needs_context' => true], + 'internal_reference_is' => ['alias' => false, 'needs_context' => true], + 'internal_reference_contains' => ['alias' => false, 'needs_context' => true], + 'internal_reference' => ['alias' => true, 'alias_for' => 'internal_reference_contains', 'needs_context' => true], + 'internal_reference_ends' => ['alias' => false, 'needs_context' => true], + 'internal_reference_starts' => ['alias' => false, 'needs_context' => true], + 'external_url_is' => ['alias' => false, 'needs_context' => true], + 'external_url_contains' => ['alias' => false, 'needs_context' => true], + 'external_url' => ['alias' => true, 'alias_for' => 'external_url_contains', 'needs_context' => true], + 'external_url_ends' => ['alias' => false, 'needs_context' => true], + 'external_url_starts' => ['alias' => false, 'needs_context' => true], + 'has_attachments' => ['alias' => false, 'needs_context' => false], + 'has_any_category' => ['alias' => false, 'needs_context' => false], + 'has_any_budget' => ['alias' => false, 'needs_context' => false], + 'has_any_bill' => ['alias' => false, 'needs_context' => false], + 'has_any_tag' => ['alias' => false, 'needs_context' => false], + 'any_notes' => ['alias' => false, 'needs_context' => false], + 'has_any_notes' => ['alias' => true, 'alias_for' => 'any_notes', 'needs_context' => false], + 'has_notes' => ['alias' => true, 'alias_for' => 'any_notes', 'needs_context' => false], + 'any_external_url' => ['alias' => false, 'needs_context' => false], + 'has_any_external_url' => ['alias' => true, 'alias_for' => 'any_external_url', 'needs_context' => false], + 'has_no_attachments' => ['alias' => false, 'needs_context' => false], + 'has_no_category' => ['alias' => false, 'needs_context' => false], + 'has_no_budget' => ['alias' => false, 'needs_context' => false], + 'has_no_bill' => ['alias' => false, 'needs_context' => false], + 'has_no_tag' => ['alias' => false, 'needs_context' => false], + 'no_notes' => ['alias' => false, 'needs_context' => false], + 'no_external_url' => ['alias' => false, 'needs_context' => false], + 'source_is_cash' => ['alias' => false, 'needs_context' => false], + 'destination_is_cash' => ['alias' => false, 'needs_context' => false], + 'account_is_cash' => ['alias' => false, 'needs_context' => false], + 'currency_is' => ['alias' => false, 'needs_context' => true], + 'foreign_currency_is' => ['alias' => false, 'needs_context' => true], + 'id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true], + 'journal_id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true], + 'recurrence_id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true], + 'date_on' => ['alias' => false, 'needs_context' => true], + 'date' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true], + 'date_is' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true], + 'on' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true], + 'date_before' => ['alias' => false, 'needs_context' => true], + 'before' => ['alias' => true, 'alias_for' => 'date_before', 'needs_context' => true], + 'date_after' => ['alias' => false, 'needs_context' => true], + 'after' => ['alias' => true, 'alias_for' => 'date_after', 'needs_context' => true], + 'interest_date_on' => ['alias' => false, 'needs_context' => true], + 'interest_date' => ['alias' => true, 'alias_for' => 'interest_date_on', 'needs_context' => true], + 'interest_date_is' => ['alias' => true, 'alias_for' => 'interest_date_on', 'needs_context' => true], + 'interest_date_before' => ['alias' => false, 'needs_context' => true], + 'interest_date_after' => ['alias' => false, 'needs_context' => true], + 'book_date_on' => ['alias' => false, 'needs_context' => true], + 'book_date' => ['alias' => true, 'alias_for' => 'book_date_on', 'needs_context' => true], + 'book_date_is' => ['alias' => true, 'alias_for' => 'book_date_on', 'needs_context' => true], + 'book_date_before' => ['alias' => false, 'needs_context' => true], + 'book_date_after' => ['alias' => false, 'needs_context' => true], + 'process_date_on' => ['alias' => false, 'needs_context' => true], + 'process_date' => ['alias' => true, 'alias_for' => 'process_date_on', 'needs_context' => true], + 'process_date_is' => ['alias' => true, 'alias_for' => 'process_date_on', 'needs_context' => true], + 'process_date_before' => ['alias' => false, 'needs_context' => true], + 'process_date_after' => ['alias' => false, 'needs_context' => true], + 'due_date_on' => ['alias' => false, 'needs_context' => true], + 'due_date' => ['alias' => true, 'alias_for' => 'due_date_on', 'needs_context' => true], + 'due_date_is' => ['alias' => true, 'alias_for' => 'due_date_on', 'needs_context' => true], + 'due_date_before' => ['alias' => false, 'needs_context' => true], + 'due_date_after' => ['alias' => false, 'needs_context' => true], + 'payment_date_on' => ['alias' => false, 'needs_context' => true], + 'payment_date' => ['alias' => true, 'alias_for' => 'payment_date_on', 'needs_context' => true], + 'payment_date_is' => ['alias' => true, 'alias_for' => 'payment_date_on', 'needs_context' => true], + 'payment_date_before' => ['alias' => false, 'needs_context' => true], + 'payment_date_after' => ['alias' => false, 'needs_context' => true], + 'invoice_date_on' => ['alias' => false, 'needs_context' => true], + 'invoice_date' => ['alias' => true, 'alias_for' => 'invoice_date_on', 'needs_context' => true], + 'invoice_date_is' => ['alias' => true, 'alias_for' => 'invoice_date_on', 'needs_context' => true], + 'invoice_date_before' => ['alias' => false, 'needs_context' => true], + 'invoice_date_after' => ['alias' => false, 'needs_context' => true], + 'created_at_on' => ['alias' => false, 'needs_context' => true], + 'created_at' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true], + 'created_at_is' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true], + 'created_at_before' => ['alias' => false, 'needs_context' => true], + 'created_at_after' => ['alias' => false, 'needs_context' => true], + 'updated_at_on' => ['alias' => false, 'needs_context' => true], + 'updated_at' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true], + 'updated_at_is' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true], + 'updated_at_before' => ['alias' => false, 'needs_context' => true], + 'updated_at_after' => ['alias' => false, 'needs_context' => true], + 'created_on_on' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true], + 'created_on' => ['alias' => true, 'alias_for' => 'created_at', 'needs_context' => true], + 'created_on_before' => ['alias' => true, 'alias_for' => 'created_at_before', 'needs_context' => true], + 'created_on_after' => ['alias' => true, 'alias_for' => 'created_at_after', 'needs_context' => true], + 'updated_on_on' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true], + 'updated_on' => ['alias' => true, 'alias_for' => 'updated_at', 'needs_context' => true], + 'updated_on_before' => ['alias' => true, 'alias_for' => 'updated_at_before', 'needs_context' => true], + 'updated_on_after' => ['alias' => true, 'alias_for' => 'updated_at_after', 'needs_context' => true], + 'amount_is' => ['alias' => false, 'needs_context' => true], + 'amount' => ['alias' => true, 'alias_for' => 'amount_is', 'needs_context' => true], + 'amount_exactly' => ['alias' => true, 'alias_for' => 'amount_is', 'needs_context' => true], + 'amount_less' => ['alias' => false, 'needs_context' => true], + 'amount_max' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true], + 'less' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true], + 'amount_more' => ['alias' => false, 'needs_context' => true], + 'amount_min' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true], + 'more' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true], + 'foreign_amount_is' => ['alias' => false, 'needs_context' => true], + 'foreign_amount' => ['alias' => true, 'alias_for' => 'foreign_amount_is', 'needs_context' => true], + 'foreign_amount_less' => ['alias' => false, 'needs_context' => true], + 'foreign_amount_max' => ['alias' => true, 'alias_for' => 'foreign_amount_less', 'needs_context' => true], + 'foreign_amount_more' => ['alias' => false, 'needs_context' => true], + 'foreign_amount_min' => ['alias' => true, 'alias_for' => 'foreign_amount_more', 'needs_context' => true], 'attachment_name_is' => ['alias' => false, 'needs_context' => true], 'attachment' => ['alias' => true, 'alias_for' => 'attachment_name_is', 'needs_context' => true], 'attachment_is' => ['alias' => true, 'alias_for' => 'attachment_name_is', 'needs_context' => true], @@ -230,10 +236,9 @@ return [ 'attachment_notes_start' => ['alias' => true, 'alias_for' => 'attachment_notes_starts', 'needs_context' => true], 'attachment_notes_ends' => ['alias' => false, 'needs_context' => true], 'attachment_notes_end' => ['alias' => true, 'alias_for' => 'attachment_notes_ends', 'needs_context' => true], - 'exists' => ['alias' => false, 'needs_context' => false,], + 'exists' => ['alias' => false, 'needs_context' => false], 'sepa_ct_is' => ['alias' => false, 'needs_context' => true], 'no_external_id' => ['alias' => false, 'needs_context' => false], 'any_external_id' => ['alias' => false, 'needs_context' => false], - ], ]; diff --git a/config/services.php b/config/services.php index 2f4d7bfc25..382f69a808 100644 --- a/config/services.php +++ b/config/services.php @@ -20,6 +20,7 @@ */ declare(strict_types=1); +use FireflyIII\User; return [ /* @@ -34,13 +35,13 @@ return [ | */ - 'mailgun' => [ + 'mailgun' => [ 'domain' => env('MAILGUN_DOMAIN'), 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), 'secret' => env('MAILGUN_SECRET'), ], - 'ses' => [ + 'ses' => [ 'key' => env('SES_KEY'), 'secret' => env('SES_SECRET'), 'region' => 'us-east-1', @@ -50,12 +51,12 @@ return [ 'secret' => env('SPARKPOST_SECRET'), ], - 'stripe' => [ - 'model' => FireflyIII\User::class, + 'stripe' => [ + 'model' => User::class, 'key' => env('STRIPE_KEY'), 'secret' => env('STRIPE_SECRET'), ], - 'mandrill' => [ + 'mandrill' => [ 'secret' => env('MANDRILL_SECRET'), ], ]; diff --git a/config/twigbridge.php b/config/twigbridge.php index 70ecf8d088..da8d491d82 100644 --- a/config/twigbridge.php +++ b/config/twigbridge.php @@ -22,8 +22,7 @@ declare(strict_types=1); - -/** +/* * This file is part of the TwigBridge package. * * @copyright Robert Crowe @@ -53,12 +52,9 @@ use TwigBridge\Extension\Loader\Filters; use TwigBridge\Extension\Loader\Functions; use TwigBridge\Extension\Loader\Globals; -/** - * Configuration options for Twig. - */ +// Configuration options for Twig. return [ - - 'twig' => [ + 'twig' => [ 'extension' => 'twig', 'environment' => [ 'debug' => env('APP_DEBUG', false), @@ -95,7 +91,6 @@ return [ ], 'extensions' => [ - /* |-------------------------------------------------------------------------- | Extensions @@ -193,7 +188,6 @@ return [ 'amountNoCurrency', 'percentage', 'objectGroup', - ], ], 'AccountForm' => [ diff --git a/config/upgrade.php b/config/upgrade.php index 423dbfc272..ce8f5477c2 100644 --- a/config/upgrade.php +++ b/config/upgrade.php @@ -35,6 +35,7 @@ return [ '4.8.0' => 'This is a huge upgrade for Firefly III. Please expect bugs and errors, and bear with me as I fix them. I tested a lot of things but pretty sure I missed some. Thanks for understanding.', '4.8.1' => 'This version of Firefly III requires PHP7.3.', '5.3.0' => 'This version of Firefly III requires PHP7.4.', + '6.1' => 'This version of Firefly III requires PHP8.3.', ], 'install' => [ '4.3' => 'Welcome to Firefly! Make sure you follow the installation guide. If you need more help, please check Github or the Firefly III website. The installation guide has a FAQ which you should check out as well.', @@ -48,6 +49,7 @@ return [ '4.8.0' => 'This is a huge upgrade for Firefly III. Please expect bugs and errors, and bear with me as I fix them. I tested a lot of things but pretty sure I missed some. Thanks for understanding.', '4.8.1' => 'This version of Firefly III requires PHP7.3.', '5.3.0' => 'This version of Firefly III requires PHP7.4.', + '6.1' => 'This version of Firefly III requires PHP8.3.', ], ], ]; diff --git a/config/user_roles.php b/config/user_roles.php index e7c057a2b4..6fac33621c 100644 --- a/config/user_roles.php +++ b/config/user_roles.php @@ -22,13 +22,12 @@ declare(strict_types=1); - use FireflyIII\Enums\UserRoleEnum; $result = []; - foreach (UserRoleEnum::cases() as $role) { $result[$role->value] = []; } + return $result; diff --git a/config/view.php b/config/view.php index 20ff1589d5..cb8bb9e057 100644 --- a/config/view.php +++ b/config/view.php @@ -28,7 +28,6 @@ if ('v2' === env('FIREFLY_III_LAYOUT')) { realpath(base_path('resources/views'))]; } - return [ /* |-------------------------------------------------------------------------- @@ -41,7 +40,7 @@ return [ | */ - 'paths' => $paths, + 'paths' => $paths, /* |-------------------------------------------------------------------------- @@ -55,5 +54,4 @@ return [ */ 'compiled' => realpath(storage_path('framework/views')), - ]; diff --git a/crowdin.yml b/crowdin.yml index 9987380439..039bdc7dd8 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,11 +1,13 @@ +"api_token_env": CROWDIN_TOKEN "api_key_env": CROWDIN_API_KEY "project_identifier_env": CROWDIN_PROJECT_ID +"project_id_env": CROWDIN_PROJECT_NR "base_path_env": CROWDIN_BASE_PATH "preserve_hierarchy": false files: [ - { - source: "/resources/lang/en_US/*.php", - translation: /resources/lang/%locale_with_underscore%/%original_file_name%, + { + source: "/resources/lang/en_US/*.php", + translation: /resources/lang/%locale_with_underscore%/%original_file_name%, - } + } ] diff --git a/database/migrations/2016_06_16_000000_create_support_tables.php b/database/migrations/2016_06_16_000000_create_support_tables.php index 14d5c53c2f..d1580d5f4d 100644 --- a/database/migrations/2016_06_16_000000_create_support_tables.php +++ b/database/migrations/2016_06_16_000000_create_support_tables.php @@ -55,6 +55,7 @@ class CreateSupportTables extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -70,16 +71,13 @@ class CreateSupportTables extends Migration $this->createConfigurationTable(); } - /** - * @return void - */ private function createAccountTypeTable(): void { if (!Schema::hasTable('account_types')) { try { Schema::create( 'account_types', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->string('type', 50); @@ -95,16 +93,13 @@ class CreateSupportTables extends Migration } } - /** - * @return void - */ private function createCurrencyTable(): void { if (!Schema::hasTable('transaction_currencies')) { try { Schema::create( 'transaction_currencies', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -123,16 +118,13 @@ class CreateSupportTables extends Migration } } - /** - * @return void - */ private function createTransactionTypeTable(): void { if (!Schema::hasTable('transaction_types')) { try { Schema::create( 'transaction_types', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -149,16 +141,13 @@ class CreateSupportTables extends Migration } } - /** - * @return void - */ private function createJobsTable(): void { if (!Schema::hasTable('jobs')) { try { Schema::create( 'jobs', - static function (Blueprint $table) { + static function (Blueprint $table): void { // straight from Laravel $table->bigIncrements('id'); $table->string('queue'); @@ -178,16 +167,13 @@ class CreateSupportTables extends Migration } } - /** - * @return void - */ private function createPasswordTable(): void { if (!Schema::hasTable('password_resets')) { try { Schema::create( 'password_resets', - static function (Blueprint $table) { + static function (Blueprint $table): void { // straight from laravel $table->string('email')->index(); $table->string('token')->index(); @@ -201,16 +187,13 @@ class CreateSupportTables extends Migration } } - /** - * @return void - */ private function createPermissionsTable(): void { if (!Schema::hasTable('permissions')) { try { Schema::create( 'permissions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->string('name')->unique(); @@ -225,16 +208,13 @@ class CreateSupportTables extends Migration } } - /** - * @return void - */ private function createRolesTable(): void { if (!Schema::hasTable('roles')) { try { Schema::create( 'roles', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->string('name')->unique(); @@ -249,16 +229,13 @@ class CreateSupportTables extends Migration } } - /** - * @return void - */ private function createPermissionRoleTable(): void { if (!Schema::hasTable('permission_role')) { try { Schema::create( 'permission_role', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->integer('permission_id')->unsigned(); $table->integer('role_id')->unsigned(); @@ -275,16 +252,13 @@ class CreateSupportTables extends Migration } } - /** - * @return void - */ private function createSessionsTable(): void { if (!Schema::hasTable('sessions')) { try { Schema::create( 'sessions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->string('id')->unique(); $table->integer('user_id')->nullable(); $table->string('ip_address', 45)->nullable(); @@ -300,16 +274,13 @@ class CreateSupportTables extends Migration } } - /** - * @return void - */ private function createConfigurationTable(): void { if (!Schema::hasTable('configuration')) { try { Schema::create( 'configuration', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2016_06_16_000001_create_users_table.php b/database/migrations/2016_06_16_000001_create_users_table.php index 1e0aece1d0..5002e26302 100644 --- a/database/migrations/2016_06_16_000001_create_users_table.php +++ b/database/migrations/2016_06_16_000001_create_users_table.php @@ -46,6 +46,7 @@ class CreateUsersTable extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -53,7 +54,7 @@ class CreateUsersTable extends Migration try { Schema::create( 'users', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->string('email', 255); diff --git a/database/migrations/2016_06_16_000002_create_main_tables.php b/database/migrations/2016_06_16_000002_create_main_tables.php index 65c8d18219..71b842a467 100644 --- a/database/migrations/2016_06_16_000002_create_main_tables.php +++ b/database/migrations/2016_06_16_000002_create_main_tables.php @@ -73,6 +73,7 @@ class CreateMainTables extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -95,7 +96,7 @@ class CreateMainTables extends Migration try { Schema::create( 'accounts', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -120,7 +121,7 @@ class CreateMainTables extends Migration try { Schema::create( 'account_meta', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->integer('account_id', false, true); @@ -142,7 +143,7 @@ class CreateMainTables extends Migration try { Schema::create( 'piggy_banks', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -167,7 +168,7 @@ class CreateMainTables extends Migration try { Schema::create( 'piggy_bank_repetitions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->integer('piggy_bank_id', false, true); @@ -190,7 +191,7 @@ class CreateMainTables extends Migration try { Schema::create( 'attachments', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -223,7 +224,7 @@ class CreateMainTables extends Migration try { Schema::create( 'bills', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -251,15 +252,13 @@ class CreateMainTables extends Migration } } - /** - */ private function createBudgetTables(): void { if (!Schema::hasTable('budgets')) { try { Schema::create( 'budgets', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -279,7 +278,7 @@ class CreateMainTables extends Migration try { Schema::create( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->integer('budget_id', false, true); @@ -299,7 +298,7 @@ class CreateMainTables extends Migration try { Schema::create( 'limit_repetitions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->integer('budget_limit_id', false, true); @@ -316,16 +315,13 @@ class CreateMainTables extends Migration } } - /** - * @return void - */ private function createCategoriesTable(): void { if (!Schema::hasTable('categories')) { try { Schema::create( 'categories', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -350,7 +346,7 @@ class CreateMainTables extends Migration try { Schema::create( 'preferences', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->integer('user_id', false, true); @@ -367,16 +363,13 @@ class CreateMainTables extends Migration } } - /** - * @return void - */ private function createRoleTable(): void { if (!Schema::hasTable('role_user')) { try { Schema::create( 'role_user', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->integer('user_id', false, true); $table->integer('role_id', false, true); @@ -393,13 +386,16 @@ class CreateMainTables extends Migration } } + /** + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + */ private function createRuleTables(): void { if (!Schema::hasTable('rule_groups')) { try { Schema::create( 'rule_groups', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -422,7 +418,7 @@ class CreateMainTables extends Migration try { Schema::create( 'rules', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -450,7 +446,7 @@ class CreateMainTables extends Migration try { Schema::create( 'rule_actions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->integer('rule_id', false, true); @@ -475,7 +471,7 @@ class CreateMainTables extends Migration try { Schema::create( 'rule_triggers', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->integer('rule_id', false, true); @@ -498,16 +494,13 @@ class CreateMainTables extends Migration } } - /** - * @return void - */ private function createTagsTable(): void { if (!Schema::hasTable('tags')) { try { Schema::create( 'tags', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -533,7 +526,8 @@ class CreateMainTables extends Migration } /** - * @return void + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.NPathComplexity) */ private function createTransactionTables(): void { @@ -541,7 +535,7 @@ class CreateMainTables extends Migration try { Schema::create( 'transaction_journals', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -574,7 +568,7 @@ class CreateMainTables extends Migration try { Schema::create( 'journal_meta', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->integer('transaction_journal_id', false, true); @@ -594,7 +588,7 @@ class CreateMainTables extends Migration try { Schema::create( 'tag_transaction_journal', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->integer('tag_id', false, true); $table->integer('transaction_journal_id', false, true); @@ -615,7 +609,7 @@ class CreateMainTables extends Migration try { Schema::create( 'budget_transaction_journal', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->integer('budget_id', false, true); $table->integer('transaction_journal_id', false, true); @@ -633,7 +627,7 @@ class CreateMainTables extends Migration try { Schema::create( 'category_transaction_journal', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->integer('category_id', false, true); $table->integer('transaction_journal_id', false, true); @@ -651,7 +645,7 @@ class CreateMainTables extends Migration try { Schema::create( 'piggy_bank_events', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->integer('piggy_bank_id', false, true); @@ -673,7 +667,7 @@ class CreateMainTables extends Migration try { Schema::create( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -696,7 +690,7 @@ class CreateMainTables extends Migration try { Schema::create( 'budget_transaction', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->integer('budget_id', false, true); $table->integer('transaction_id', false, true); @@ -715,7 +709,7 @@ class CreateMainTables extends Migration try { Schema::create( 'category_transaction', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->integer('category_id', false, true); $table->integer('transaction_id', false, true); diff --git a/database/migrations/2016_08_25_091522_changes_for_3101.php b/database/migrations/2016_08_25_091522_changes_for_3101.php index 5b32bada7f..2743c4fad5 100644 --- a/database/migrations/2016_08_25_091522_changes_for_3101.php +++ b/database/migrations/2016_08_25_091522_changes_for_3101.php @@ -33,15 +33,12 @@ class ChangesFor3101 extends Migration /** * Reverse the migrations. */ - public function down(): void - { - } + public function down(): void {} /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ - public function up(): void - { - } + public function up(): void {} } diff --git a/database/migrations/2016_09_12_121359_fix_nullables.php b/database/migrations/2016_09_12_121359_fix_nullables.php index fbb3a63012..3f8d858915 100644 --- a/database/migrations/2016_09_12_121359_fix_nullables.php +++ b/database/migrations/2016_09_12_121359_fix_nullables.php @@ -38,13 +38,12 @@ class FixNullables extends Migration /** * Reverse the migrations. */ - public function down(): void - { - } + public function down(): void {} /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -52,7 +51,7 @@ class FixNullables extends Migration try { Schema::table( 'rule_groups', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->text('description')->nullable()->change(); } ); @@ -66,7 +65,7 @@ class FixNullables extends Migration try { Schema::table( 'rules', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->text('description')->nullable()->change(); } ); diff --git a/database/migrations/2016_10_09_150037_expand_transactions_table.php b/database/migrations/2016_10_09_150037_expand_transactions_table.php index 256a3bb5ca..29a356f96d 100644 --- a/database/migrations/2016_10_09_150037_expand_transactions_table.php +++ b/database/migrations/2016_10_09_150037_expand_transactions_table.php @@ -42,11 +42,11 @@ class ExpandTransactionsTable extends Migration try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('identifier'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not drop column "identifier": %s', $e->getMessage())); app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -56,6 +56,7 @@ class ExpandTransactionsTable extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -63,7 +64,7 @@ class ExpandTransactionsTable extends Migration try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->smallInteger('identifier', false, true)->default(0); } ); diff --git a/database/migrations/2016_10_22_075804_changes_for_v410.php b/database/migrations/2016_10_22_075804_changes_for_v410.php index 7faabd92e2..417bc70afe 100644 --- a/database/migrations/2016_10_22_075804_changes_for_v410.php +++ b/database/migrations/2016_10_22_075804_changes_for_v410.php @@ -43,6 +43,7 @@ class ChangesForV410 extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -50,7 +51,7 @@ class ChangesForV410 extends Migration try { Schema::create( 'notes', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2016_11_24_210552_changes_for_v420.php b/database/migrations/2016_11_24_210552_changes_for_v420.php index 3283c06112..54a8c898c3 100644 --- a/database/migrations/2016_11_24_210552_changes_for_v420.php +++ b/database/migrations/2016_11_24_210552_changes_for_v420.php @@ -41,7 +41,7 @@ class ChangesForV420 extends Migration try { Schema::table( 'journal_meta', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropSoftDeletes(); } ); @@ -55,6 +55,7 @@ class ChangesForV420 extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -62,7 +63,7 @@ class ChangesForV420 extends Migration try { Schema::table( 'journal_meta', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->softDeletes(); } ); diff --git a/database/migrations/2016_12_22_150431_changes_for_v430.php b/database/migrations/2016_12_22_150431_changes_for_v430.php index 272d3b2a63..dce36a973d 100644 --- a/database/migrations/2016_12_22_150431_changes_for_v430.php +++ b/database/migrations/2016_12_22_150431_changes_for_v430.php @@ -43,6 +43,7 @@ class ChangesForV430 extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -50,7 +51,7 @@ class ChangesForV430 extends Migration try { Schema::create( 'available_budgets', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2016_12_28_203205_changes_for_v431.php b/database/migrations/2016_12_28_203205_changes_for_v431.php index 7da1ee7968..8c20187715 100644 --- a/database/migrations/2016_12_28_203205_changes_for_v431.php +++ b/database/migrations/2016_12_28_203205_changes_for_v431.php @@ -43,7 +43,7 @@ class ChangesForV431 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->string('repeat_freq', 30)->nullable(); } ); @@ -56,7 +56,7 @@ class ChangesForV431 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->boolean('repeats')->default(0); } ); @@ -70,11 +70,11 @@ class ChangesForV431 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->renameColumn('start_date', 'startdate'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -85,11 +85,11 @@ class ChangesForV431 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('end_date'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -99,11 +99,11 @@ class ChangesForV431 extends Migration try { Schema::table( 'transaction_currencies', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('decimal_places'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -113,6 +113,7 @@ class ChangesForV431 extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -121,7 +122,7 @@ class ChangesForV431 extends Migration try { Schema::table( 'transaction_currencies', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->smallInteger('decimal_places', false, true)->default(2); } ); @@ -136,11 +137,11 @@ class ChangesForV431 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->renameColumn('startdate', 'start_date'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -151,7 +152,7 @@ class ChangesForV431 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->date('end_date')->nullable()->after('start_date'); } ); @@ -166,11 +167,11 @@ class ChangesForV431 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('repeats'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -179,11 +180,11 @@ class ChangesForV431 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('repeat_freq'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } diff --git a/database/migrations/2017_04_13_163623_changes_for_v440.php b/database/migrations/2017_04_13_163623_changes_for_v440.php index 0caad0e92b..075c03181c 100644 --- a/database/migrations/2017_04_13_163623_changes_for_v440.php +++ b/database/migrations/2017_04_13_163623_changes_for_v440.php @@ -39,10 +39,11 @@ class ChangesForV440 extends Migration public function down(): void { Schema::dropIfExists('currency_exchange_rates'); + try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { if (Schema::hasColumn('transactions', 'transaction_currency_id')) { // cannot drop foreign keys in SQLite: if ('sqlite' !== config('database.default')) { @@ -52,7 +53,7 @@ class ChangesForV440 extends Migration } } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -61,6 +62,7 @@ class ChangesForV440 extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -68,7 +70,7 @@ class ChangesForV440 extends Migration try { Schema::create( 'currency_exchange_rates', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -93,7 +95,7 @@ class ChangesForV440 extends Migration try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { if (!Schema::hasColumn('transactions', 'transaction_currency_id')) { $table->integer('transaction_currency_id', false, true)->after('description')->nullable(); $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null'); diff --git a/database/migrations/2017_06_02_105232_changes_for_v450.php b/database/migrations/2017_06_02_105232_changes_for_v450.php index d9b025e8d7..b1e5267036 100644 --- a/database/migrations/2017_06_02_105232_changes_for_v450.php +++ b/database/migrations/2017_06_02_105232_changes_for_v450.php @@ -43,11 +43,11 @@ class ChangesForV450 extends Migration try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('foreign_amount'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -56,7 +56,7 @@ class ChangesForV450 extends Migration try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { // cannot drop foreign keys in SQLite: if ('sqlite' !== config('database.default')) { $table->dropForeign('transactions_foreign_currency_id_foreign'); @@ -71,11 +71,11 @@ class ChangesForV450 extends Migration try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('foreign_currency_id'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -85,6 +85,7 @@ class ChangesForV450 extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -93,7 +94,7 @@ class ChangesForV450 extends Migration try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->decimal('foreign_amount', 32, 12)->nullable()->after('amount'); } ); @@ -108,7 +109,7 @@ class ChangesForV450 extends Migration try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->integer('foreign_currency_id', false, true)->default(null)->after('foreign_amount')->nullable(); $table->foreign('foreign_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null'); } diff --git a/database/migrations/2017_08_20_062014_changes_for_v470.php b/database/migrations/2017_08_20_062014_changes_for_v470.php index a6a4a52f72..0c3794cda4 100644 --- a/database/migrations/2017_08_20_062014_changes_for_v470.php +++ b/database/migrations/2017_08_20_062014_changes_for_v470.php @@ -45,6 +45,7 @@ class ChangesForV470 extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -52,7 +53,7 @@ class ChangesForV470 extends Migration try { Schema::create( 'link_types', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -74,7 +75,7 @@ class ChangesForV470 extends Migration try { Schema::create( 'journal_links', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->integer('link_type_id', false, true); diff --git a/database/migrations/2017_11_04_170844_changes_for_v470a.php b/database/migrations/2017_11_04_170844_changes_for_v470a.php index 10f2bb0aa9..01e7460537 100644 --- a/database/migrations/2017_11_04_170844_changes_for_v470a.php +++ b/database/migrations/2017_11_04_170844_changes_for_v470a.php @@ -43,11 +43,11 @@ class ChangesForV470a extends Migration try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('reconciled'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -57,6 +57,7 @@ class ChangesForV470a extends Migration /** * Run the migrations. * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -64,7 +65,7 @@ class ChangesForV470a extends Migration try { Schema::table( 'transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->boolean('reconciled')->after('deleted_at')->default(0); } ); diff --git a/database/migrations/2018_01_01_000001_create_oauth_auth_codes_table.php b/database/migrations/2018_01_01_000001_create_oauth_auth_codes_table.php index 75cd6c65dc..cb70131bf2 100644 --- a/database/migrations/2018_01_01_000001_create_oauth_auth_codes_table.php +++ b/database/migrations/2018_01_01_000001_create_oauth_auth_codes_table.php @@ -44,6 +44,8 @@ class CreateOauthAuthCodesTable extends Migration /** * Run the migrations. + * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -51,7 +53,7 @@ class CreateOauthAuthCodesTable extends Migration try { Schema::create( 'oauth_auth_codes', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->string('id', 100)->primary(); $table->integer('user_id'); $table->integer('client_id'); diff --git a/database/migrations/2018_01_01_000002_create_oauth_access_tokens_table.php b/database/migrations/2018_01_01_000002_create_oauth_access_tokens_table.php index 3b2950b92c..cc41b105bd 100644 --- a/database/migrations/2018_01_01_000002_create_oauth_access_tokens_table.php +++ b/database/migrations/2018_01_01_000002_create_oauth_access_tokens_table.php @@ -44,6 +44,8 @@ class CreateOauthAccessTokensTable extends Migration /** * Run the migrations. + * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -51,7 +53,7 @@ class CreateOauthAccessTokensTable extends Migration try { Schema::create( 'oauth_access_tokens', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->string('id', 100)->primary(); $table->integer('user_id')->index()->nullable(); $table->integer('client_id'); diff --git a/database/migrations/2018_01_01_000003_create_oauth_refresh_tokens_table.php b/database/migrations/2018_01_01_000003_create_oauth_refresh_tokens_table.php index 5108372473..3b91d74abc 100644 --- a/database/migrations/2018_01_01_000003_create_oauth_refresh_tokens_table.php +++ b/database/migrations/2018_01_01_000003_create_oauth_refresh_tokens_table.php @@ -44,6 +44,8 @@ class CreateOauthRefreshTokensTable extends Migration /** * Run the migrations. + * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -51,7 +53,7 @@ class CreateOauthRefreshTokensTable extends Migration try { Schema::create( 'oauth_refresh_tokens', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->string('id', 100)->primary(); $table->string('access_token_id', 100)->index(); $table->boolean('revoked'); diff --git a/database/migrations/2018_01_01_000004_create_oauth_clients_table.php b/database/migrations/2018_01_01_000004_create_oauth_clients_table.php index c95a1f8eb6..7c75715cb0 100644 --- a/database/migrations/2018_01_01_000004_create_oauth_clients_table.php +++ b/database/migrations/2018_01_01_000004_create_oauth_clients_table.php @@ -44,6 +44,8 @@ class CreateOauthClientsTable extends Migration /** * Run the migrations. + * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -51,7 +53,7 @@ class CreateOauthClientsTable extends Migration try { Schema::create( 'oauth_clients', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->integer('user_id')->index()->nullable(); $table->string('name'); diff --git a/database/migrations/2018_01_01_000005_create_oauth_personal_access_clients_table.php b/database/migrations/2018_01_01_000005_create_oauth_personal_access_clients_table.php index a66f2f5387..2bdfa66075 100644 --- a/database/migrations/2018_01_01_000005_create_oauth_personal_access_clients_table.php +++ b/database/migrations/2018_01_01_000005_create_oauth_personal_access_clients_table.php @@ -44,6 +44,8 @@ class CreateOauthPersonalAccessClientsTable extends Migration /** * Run the migrations. + * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -51,7 +53,7 @@ class CreateOauthPersonalAccessClientsTable extends Migration try { Schema::create( 'oauth_personal_access_clients', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->integer('client_id')->index(); $table->timestamps(); diff --git a/database/migrations/2018_03_19_141348_changes_for_v472.php b/database/migrations/2018_03_19_141348_changes_for_v472.php index 888cdb9f91..b6919563bc 100644 --- a/database/migrations/2018_03_19_141348_changes_for_v472.php +++ b/database/migrations/2018_03_19_141348_changes_for_v472.php @@ -36,8 +36,6 @@ class ChangesForV472 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -45,7 +43,7 @@ class ChangesForV472 extends Migration try { Schema::table( 'attachments', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->text('notes')->nullable(); } ); @@ -59,11 +57,11 @@ class ChangesForV472 extends Migration try { Schema::table( 'budgets', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('order'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -73,7 +71,7 @@ class ChangesForV472 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -81,11 +79,11 @@ class ChangesForV472 extends Migration try { Schema::table( 'attachments', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('notes'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -95,7 +93,7 @@ class ChangesForV472 extends Migration try { Schema::table( 'budgets', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->mediumInteger('order', false, true)->default(0); } ); diff --git a/database/migrations/2018_04_07_210913_changes_for_v473.php b/database/migrations/2018_04_07_210913_changes_for_v473.php index 5d59bc094f..b9ba91e78c 100644 --- a/database/migrations/2018_04_07_210913_changes_for_v473.php +++ b/database/migrations/2018_04_07_210913_changes_for_v473.php @@ -37,8 +37,6 @@ class ChangesForV473 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -46,7 +44,7 @@ class ChangesForV473 extends Migration try { Schema::table( 'bills', - static function (Blueprint $table) { + static function (Blueprint $table): void { // cannot drop foreign keys in SQLite: if ('sqlite' !== config('database.default')) { $table->dropForeign('bills_transaction_currency_id_foreign'); @@ -54,7 +52,7 @@ class ChangesForV473 extends Migration $table->dropColumn('transaction_currency_id'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -64,11 +62,11 @@ class ChangesForV473 extends Migration try { Schema::table( 'rules', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('strict'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -78,7 +76,7 @@ class ChangesForV473 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -86,7 +84,7 @@ class ChangesForV473 extends Migration try { Schema::table( 'bills', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->integer('transaction_currency_id', false, true)->nullable()->after('user_id'); $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null'); } @@ -100,7 +98,7 @@ class ChangesForV473 extends Migration try { Schema::table( 'rules', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->boolean('strict')->default(true); } ); diff --git a/database/migrations/2018_04_29_174524_changes_for_v474.php b/database/migrations/2018_04_29_174524_changes_for_v474.php index f7d5ce28dc..d78013e8ec 100644 --- a/database/migrations/2018_04_29_174524_changes_for_v474.php +++ b/database/migrations/2018_04_29_174524_changes_for_v474.php @@ -33,19 +33,13 @@ class ChangesForV474 extends Migration { /** * Reverse the migrations. - * - * @return void */ - public function down(): void - { - } + public function down(): void {} /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ - public function up(): void - { - } + public function up(): void {} } diff --git a/database/migrations/2018_06_08_200526_changes_for_v475.php b/database/migrations/2018_06_08_200526_changes_for_v475.php index 96f58a0eb2..7a73769960 100644 --- a/database/migrations/2018_06_08_200526_changes_for_v475.php +++ b/database/migrations/2018_06_08_200526_changes_for_v475.php @@ -35,8 +35,6 @@ class ChangesForV475 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -50,7 +48,8 @@ class ChangesForV475 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function up(): void { @@ -58,7 +57,7 @@ class ChangesForV475 extends Migration try { Schema::create( 'recurrences', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -89,7 +88,7 @@ class ChangesForV475 extends Migration try { Schema::create( 'recurrences_transactions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -120,7 +119,7 @@ class ChangesForV475 extends Migration try { Schema::create( 'recurrences_repetitions', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -143,7 +142,7 @@ class ChangesForV475 extends Migration try { Schema::create( 'recurrences_meta', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -165,7 +164,7 @@ class ChangesForV475 extends Migration try { Schema::create( 'rt_meta', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2018_09_05_195147_changes_for_v477.php b/database/migrations/2018_09_05_195147_changes_for_v477.php index 8ba83d4dd5..b4c1e8c9fb 100644 --- a/database/migrations/2018_09_05_195147_changes_for_v477.php +++ b/database/migrations/2018_09_05_195147_changes_for_v477.php @@ -36,8 +36,6 @@ class ChangesForV477 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -45,7 +43,7 @@ class ChangesForV477 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { // cannot drop foreign keys in SQLite: if ('sqlite' !== config('database.default')) { $table->dropForeign('budget_limits_transaction_currency_id_foreign'); @@ -54,7 +52,7 @@ class ChangesForV477 extends Migration $table->dropColumn(['transaction_currency_id']); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -64,7 +62,7 @@ class ChangesForV477 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -72,7 +70,7 @@ class ChangesForV477 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->integer('transaction_currency_id', false, true)->nullable()->after('budget_id'); $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null'); } diff --git a/database/migrations/2018_11_06_172532_changes_for_v479.php b/database/migrations/2018_11_06_172532_changes_for_v479.php index 1d48a17273..f391bc5431 100644 --- a/database/migrations/2018_11_06_172532_changes_for_v479.php +++ b/database/migrations/2018_11_06_172532_changes_for_v479.php @@ -36,8 +36,6 @@ class ChangesForV479 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -45,11 +43,11 @@ class ChangesForV479 extends Migration try { Schema::table( 'transaction_currencies', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn(['enabled']); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -59,7 +57,7 @@ class ChangesForV479 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -67,7 +65,7 @@ class ChangesForV479 extends Migration try { Schema::table( 'transaction_currencies', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->boolean('enabled')->default(0)->after('deleted_at'); } ); diff --git a/database/migrations/2019_01_28_193833_changes_for_v4710.php b/database/migrations/2019_01_28_193833_changes_for_v4710.php index 9f2352be76..26d1423964 100644 --- a/database/migrations/2019_01_28_193833_changes_for_v4710.php +++ b/database/migrations/2019_01_28_193833_changes_for_v4710.php @@ -36,8 +36,6 @@ class ChangesForV4710 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -48,7 +46,7 @@ class ChangesForV4710 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -56,7 +54,7 @@ class ChangesForV4710 extends Migration try { Schema::create( 'transaction_groups', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -76,7 +74,7 @@ class ChangesForV4710 extends Migration try { Schema::create( 'group_journals', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->integer('transaction_group_id', false, true); $table->integer('transaction_journal_id', false, true); diff --git a/database/migrations/2019_02_05_055516_changes_for_v4711.php b/database/migrations/2019_02_05_055516_changes_for_v4711.php index f410dad84d..b9b4d8a7de 100644 --- a/database/migrations/2019_02_05_055516_changes_for_v4711.php +++ b/database/migrations/2019_02_05_055516_changes_for_v4711.php @@ -36,22 +36,17 @@ class ChangesForV4711 extends Migration { /** * Reverse the migrations. - * - * @return void */ - public function down(): void - { - // - } + public function down(): void {} /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { - /** + /* * In 4.7.11, I changed the date field to a "datetimetz" field. This wreaks havoc * because apparently MySQL is not actually capable of handling multiple time zones, * only having a server wide time zone setting. Actual database schemes like Postgres @@ -62,7 +57,7 @@ class ChangesForV4711 extends Migration try { Schema::table( 'transaction_journals', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dateTime('date')->change(); } ); @@ -74,7 +69,7 @@ class ChangesForV4711 extends Migration try { Schema::table( 'preferences', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->text('data')->nullable()->change(); } ); diff --git a/database/migrations/2019_02_11_170529_changes_for_v4712.php b/database/migrations/2019_02_11_170529_changes_for_v4712.php index c0ce9bf969..118d6c63c7 100644 --- a/database/migrations/2019_02_11_170529_changes_for_v4712.php +++ b/database/migrations/2019_02_11_170529_changes_for_v4712.php @@ -35,22 +35,17 @@ class ChangesForV4712 extends Migration { /** * Reverse the migrations. - * - * @return void */ - public function down(): void - { - // - } + public function down(): void {} /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { - /** + /* * In 4.7.11, I changed the date field to a "datetimetz" field. This wreaks havoc * because apparently MySQL is not actually capable of handling multiple time zones, * only having a server wide time zone setting. Actual database schemes like Postgres @@ -61,7 +56,7 @@ class ChangesForV4712 extends Migration try { Schema::table( 'transaction_journals', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dateTime('date')->change(); } ); diff --git a/database/migrations/2019_03_11_223700_fix_ldap_configuration.php b/database/migrations/2019_03_11_223700_fix_ldap_configuration.php index 617d58dfbb..c31cb12910 100644 --- a/database/migrations/2019_03_11_223700_fix_ldap_configuration.php +++ b/database/migrations/2019_03_11_223700_fix_ldap_configuration.php @@ -36,8 +36,6 @@ class FixLdapConfiguration extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -45,11 +43,11 @@ class FixLdapConfiguration extends Migration try { Schema::table( 'users', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn(['objectguid']); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -59,11 +57,11 @@ class FixLdapConfiguration extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { - /** + /* * ADLdap2 appears to require the ability to store an objectguid for LDAP users * now. To support this, we add the column. */ @@ -71,7 +69,7 @@ class FixLdapConfiguration extends Migration try { Schema::table( 'users', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->uuid('objectguid')->nullable()->after('id'); } ); diff --git a/database/migrations/2019_03_22_183214_changes_for_v480.php b/database/migrations/2019_03_22_183214_changes_for_v480.php index ae51522ab7..bdd332e7d4 100644 --- a/database/migrations/2019_03_22_183214_changes_for_v480.php +++ b/database/migrations/2019_03_22_183214_changes_for_v480.php @@ -35,8 +35,6 @@ class ChangesForV480 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -45,7 +43,7 @@ class ChangesForV480 extends Migration try { Schema::table( 'transaction_journals', - static function (Blueprint $table) { + static function (Blueprint $table): void { // drop transaction_group_id + foreign key. // cannot drop foreign keys in SQLite: if ('sqlite' !== config('database.default')) { @@ -56,9 +54,10 @@ class ChangesForV480 extends Migration app('log')->error('If the foreign ID does not exist (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } } + try { $table->dropColumn('transaction_group_id'); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not drop column: %s', $e->getMessage())); app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -75,10 +74,10 @@ class ChangesForV480 extends Migration try { Schema::table( 'rule_groups', - static function (Blueprint $table) { + static function (Blueprint $table): void { try { $table->dropColumn('stop_processing'); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not drop column: %s', $e->getMessage())); app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -95,10 +94,10 @@ class ChangesForV480 extends Migration try { Schema::table( 'users', - static function (Blueprint $table) { + static function (Blueprint $table): void { try { $table->dropColumn('mfa_secret'); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not drop column: %s', $e->getMessage())); app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -114,7 +113,7 @@ class ChangesForV480 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -123,12 +122,13 @@ class ChangesForV480 extends Migration try { Schema::table( 'transaction_journals', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->integer('transaction_currency_id', false, true)->nullable()->change(); // add column "group_id" after "transaction_type_id" $table->integer('transaction_group_id', false, true) - ->nullable()->default(null)->after('transaction_type_id'); + ->nullable()->default(null)->after('transaction_type_id') + ; // add foreign key for "transaction_group_id" try { @@ -152,7 +152,7 @@ class ChangesForV480 extends Migration try { Schema::table( 'rule_groups', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->boolean('stop_processing')->default(false); } ); @@ -167,7 +167,7 @@ class ChangesForV480 extends Migration try { Schema::table( 'users', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->string('mfa_secret', 50)->nullable(); } ); diff --git a/database/migrations/2019_12_28_191351_make_locations_table.php b/database/migrations/2019_12_28_191351_make_locations_table.php index 921f3ad92d..b9125a2de6 100644 --- a/database/migrations/2019_12_28_191351_make_locations_table.php +++ b/database/migrations/2019_12_28_191351_make_locations_table.php @@ -36,8 +36,6 @@ class MakeLocationsTable extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -47,7 +45,7 @@ class MakeLocationsTable extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -55,7 +53,7 @@ class MakeLocationsTable extends Migration try { Schema::create( 'locations', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->bigIncrements('id'); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2020_03_13_201950_changes_for_v520.php b/database/migrations/2020_03_13_201950_changes_for_v520.php index 98a9df31a6..7bbc6f1fba 100644 --- a/database/migrations/2020_03_13_201950_changes_for_v520.php +++ b/database/migrations/2020_03_13_201950_changes_for_v520.php @@ -34,8 +34,6 @@ class ChangesForV520 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -46,7 +44,7 @@ class ChangesForV520 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -54,7 +52,7 @@ class ChangesForV520 extends Migration try { Schema::create( 'auto_budgets', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2020_06_07_063612_changes_for_v530.php b/database/migrations/2020_06_07_063612_changes_for_v530.php index 270aadd088..42c3d53903 100644 --- a/database/migrations/2020_06_07_063612_changes_for_v530.php +++ b/database/migrations/2020_06_07_063612_changes_for_v530.php @@ -35,8 +35,6 @@ class ChangesForV530 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -47,7 +45,7 @@ class ChangesForV530 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -55,7 +53,7 @@ class ChangesForV530 extends Migration try { Schema::create( 'object_groups', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->integer('user_id', false, true); $table->timestamps(); @@ -75,7 +73,7 @@ class ChangesForV530 extends Migration try { Schema::create( 'object_groupables', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->integer('object_group_id'); $table->integer('object_groupable_id', false, true); $table->string('object_groupable_type', 255); diff --git a/database/migrations/2020_06_30_202620_changes_for_v530a.php b/database/migrations/2020_06_30_202620_changes_for_v530a.php index df4691b311..b9b6f0925f 100644 --- a/database/migrations/2020_06_30_202620_changes_for_v530a.php +++ b/database/migrations/2020_06_30_202620_changes_for_v530a.php @@ -37,8 +37,6 @@ class ChangesForV530a extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -46,11 +44,11 @@ class ChangesForV530a extends Migration try { Schema::table( 'bills', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('order'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -60,7 +58,7 @@ class ChangesForV530a extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -68,7 +66,7 @@ class ChangesForV530a extends Migration try { Schema::table( 'bills', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->integer('order', false, true)->default(0); } ); diff --git a/database/migrations/2020_07_24_162820_changes_for_v540.php b/database/migrations/2020_07_24_162820_changes_for_v540.php index 55f025a56c..7fe7afd7a5 100644 --- a/database/migrations/2020_07_24_162820_changes_for_v540.php +++ b/database/migrations/2020_07_24_162820_changes_for_v540.php @@ -37,8 +37,6 @@ class ChangesForV540 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -46,11 +44,11 @@ class ChangesForV540 extends Migration try { Schema::table( 'oauth_clients', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('provider'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -60,11 +58,11 @@ class ChangesForV540 extends Migration try { Schema::table( 'accounts', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('order'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -74,11 +72,11 @@ class ChangesForV540 extends Migration try { Schema::table( 'bills', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('end_date'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -87,11 +85,11 @@ class ChangesForV540 extends Migration try { Schema::table( 'bills', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('extension_date'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -101,7 +99,7 @@ class ChangesForV540 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -109,7 +107,7 @@ class ChangesForV540 extends Migration try { Schema::table( 'accounts', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->integer('order', false, true)->default(0); } ); @@ -123,7 +121,7 @@ class ChangesForV540 extends Migration try { Schema::table( 'oauth_clients', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->string('provider')->nullable(); } ); @@ -137,7 +135,7 @@ class ChangesForV540 extends Migration try { Schema::table( 'bills', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->date('end_date')->nullable()->after('date'); $table->date('extension_date')->nullable()->after('end_date'); } @@ -152,7 +150,7 @@ class ChangesForV540 extends Migration try { Schema::table( 'oauth_clients', - function (Blueprint $table) { + static function (Blueprint $table): void { $table->string('secret', 100)->nullable()->change(); } ); diff --git a/database/migrations/2020_11_12_070604_changes_for_v550.php b/database/migrations/2020_11_12_070604_changes_for_v550.php index 0e4292a1ec..6b6a8ed0ec 100644 --- a/database/migrations/2020_11_12_070604_changes_for_v550.php +++ b/database/migrations/2020_11_12_070604_changes_for_v550.php @@ -35,8 +35,6 @@ class ChangesForV550 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -47,7 +45,7 @@ class ChangesForV550 extends Migration try { Schema::create( 'jobs', - static function (Blueprint $table) { + static function (Blueprint $table): void { // straight from Laravel (this is the OLD table) $table->bigIncrements('id'); $table->string('queue'); @@ -71,14 +69,14 @@ class ChangesForV550 extends Migration try { Schema::table( 'budget_transaction_journal', - function (Blueprint $table) { + static function (Blueprint $table): void { if ('sqlite' !== config('database.default')) { $table->dropForeign('budget_id_foreign'); } $table->dropColumn('budget_limit_id'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -93,11 +91,11 @@ class ChangesForV550 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('period'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -106,11 +104,11 @@ class ChangesForV550 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn('generated'); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -125,7 +123,9 @@ class ChangesForV550 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.NPathComplexity) */ public function up(): void { @@ -136,7 +136,7 @@ class ChangesForV550 extends Migration try { Schema::create( 'jobs', - function (Blueprint $table) { + static function (Blueprint $table): void { $table->bigIncrements('id'); $table->string('queue')->index(); $table->longText('payload'); @@ -159,7 +159,7 @@ class ChangesForV550 extends Migration try { Schema::create( 'failed_jobs', - function (Blueprint $table) { + static function (Blueprint $table): void { $table->bigIncrements('id'); $table->string('uuid')->unique(); $table->text('connection'); @@ -180,7 +180,7 @@ class ChangesForV550 extends Migration try { Schema::table( 'budget_transaction_journal', - function (Blueprint $table) { + static function (Blueprint $table): void { if (!Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) { $table->integer('budget_limit_id', false, true)->nullable()->default(null)->after('budget_id'); $table->foreign('budget_limit_id', 'budget_id_foreign')->references('id')->on('budget_limits')->onDelete('set null'); @@ -199,7 +199,7 @@ class ChangesForV550 extends Migration try { Schema::table( 'budget_limits', - static function (Blueprint $table) { + static function (Blueprint $table): void { if (!Schema::hasColumn('budget_limits', 'period')) { $table->string('period', 12)->nullable(); } @@ -218,7 +218,7 @@ class ChangesForV550 extends Migration try { Schema::create( 'webhooks', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -245,7 +245,7 @@ class ChangesForV550 extends Migration try { Schema::create( 'webhook_messages', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); @@ -269,7 +269,7 @@ class ChangesForV550 extends Migration try { Schema::create( 'webhook_attempts', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->increments('id'); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2021_03_12_061213_changes_for_v550b2.php b/database/migrations/2021_03_12_061213_changes_for_v550b2.php index d3364a7b84..5e1f30eda4 100644 --- a/database/migrations/2021_03_12_061213_changes_for_v550b2.php +++ b/database/migrations/2021_03_12_061213_changes_for_v550b2.php @@ -35,8 +35,6 @@ class ChangesForV550b2 extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -44,7 +42,7 @@ class ChangesForV550b2 extends Migration try { Schema::table( 'recurrences_transactions', - function (Blueprint $table) { + static function (Blueprint $table): void { if ('sqlite' !== config('database.default')) { $table->dropForeign('type_foreign'); } @@ -53,7 +51,7 @@ class ChangesForV550b2 extends Migration } } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -63,7 +61,7 @@ class ChangesForV550b2 extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -72,7 +70,7 @@ class ChangesForV550b2 extends Migration try { Schema::table( 'recurrences_transactions', - function (Blueprint $table) { + static function (Blueprint $table): void { if (!Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) { $table->integer('transaction_type_id', false, true)->nullable()->after('transaction_currency_id'); $table->foreign('transaction_type_id', 'type_foreign')->references('id')->on('transaction_types')->onDelete('set null'); diff --git a/database/migrations/2021_05_09_064644_add_ldap_columns_to_users_table.php b/database/migrations/2021_05_09_064644_add_ldap_columns_to_users_table.php index 330f76bf5f..8d96ab23f4 100644 --- a/database/migrations/2021_05_09_064644_add_ldap_columns_to_users_table.php +++ b/database/migrations/2021_05_09_064644_add_ldap_columns_to_users_table.php @@ -39,11 +39,11 @@ class AddLdapColumnsToUsersTable extends Migration try { Schema::table( 'users', - function (Blueprint $table) { + static function (Blueprint $table): void { $table->dropColumn(['domain']); } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -52,6 +52,8 @@ class AddLdapColumnsToUsersTable extends Migration /** * Run the migrations. + * + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { @@ -59,7 +61,7 @@ class AddLdapColumnsToUsersTable extends Migration try { Schema::table( 'users', - function (Blueprint $table) { + static function (Blueprint $table): void { $table->string('domain')->nullable(); } ); diff --git a/database/migrations/2021_05_13_053836_extend_currency_info.php b/database/migrations/2021_05_13_053836_extend_currency_info.php index 962016e894..888bbab2fa 100644 --- a/database/migrations/2021_05_13_053836_extend_currency_info.php +++ b/database/migrations/2021_05_13_053836_extend_currency_info.php @@ -34,25 +34,20 @@ class ExtendCurrencyInfo extends Migration { /** * Reverse the migrations. - * - * @return void */ - public function down(): void - { - // - } + public function down(): void {} /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { try { Schema::table( 'transaction_currencies', - function (Blueprint $table) { + static function (Blueprint $table): void { $table->string('code', 51)->change(); $table->string('symbol', 51)->change(); } diff --git a/database/migrations/2021_07_05_193044_drop_tele_table.php b/database/migrations/2021_07_05_193044_drop_tele_table.php index 31016bdff2..105cf474d6 100644 --- a/database/migrations/2021_07_05_193044_drop_tele_table.php +++ b/database/migrations/2021_07_05_193044_drop_tele_table.php @@ -32,8 +32,6 @@ class DropTeleTable extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -43,7 +41,7 @@ class DropTeleTable extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { diff --git a/database/migrations/2021_08_28_073733_user_groups.php b/database/migrations/2021_08_28_073733_user_groups.php index 761eac84c0..9ec60e4178 100644 --- a/database/migrations/2021_08_28_073733_user_groups.php +++ b/database/migrations/2021_08_28_073733_user_groups.php @@ -53,8 +53,6 @@ class UserGroups extends Migration /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -65,7 +63,7 @@ class UserGroups extends Migration try { Schema::table( $tableName, - function (Blueprint $table) use ($tableName) { + static function (Blueprint $table) use ($tableName): void { if ('sqlite' !== config('database.default')) { $table->dropForeign(sprintf('%s_to_ugi', $tableName)); } @@ -74,7 +72,7 @@ class UserGroups extends Migration } } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -85,7 +83,7 @@ class UserGroups extends Migration try { Schema::table( 'users', - function (Blueprint $table) { + static function (Blueprint $table): void { if ('sqlite' !== config('database.default')) { $table->dropForeign('type_user_group_id'); } @@ -94,7 +92,7 @@ class UserGroups extends Migration } } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } @@ -108,7 +106,8 @@ class UserGroups extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function up(): void { @@ -120,7 +119,7 @@ class UserGroups extends Migration try { Schema::create( 'user_groups', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->bigIncrements('id'); $table->timestamps(); $table->softDeletes(); @@ -138,7 +137,7 @@ class UserGroups extends Migration try { Schema::create( 'user_roles', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->bigIncrements('id'); $table->timestamps(); $table->softDeletes(); @@ -156,7 +155,7 @@ class UserGroups extends Migration try { Schema::create( 'group_memberships', - static function (Blueprint $table) { + static function (Blueprint $table): void { $table->bigIncrements('id'); $table->timestamps(); $table->softDeletes(); @@ -175,10 +174,11 @@ class UserGroups extends Migration app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'); } } + try { Schema::table( 'users', - function (Blueprint $table) { + static function (Blueprint $table): void { if (!Schema::hasColumn('users', 'user_group_id')) { $table->bigInteger('user_group_id', false, true)->nullable(); $table->foreign('user_group_id', 'type_user_group_id')->references('id')->on('user_groups')->onDelete('set null')->onUpdate( @@ -191,13 +191,14 @@ class UserGroups extends Migration app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } + // ADD columns to tables /** @var string $tableName */ foreach ($this->tables as $tableName) { try { Schema::table( $tableName, - function (Blueprint $table) use ($tableName) { + static function (Blueprint $table) use ($tableName): void { if (!Schema::hasColumn($tableName, 'user_group_id')) { $table->bigInteger('user_group_id', false, true)->nullable()->after('user_id'); $table->foreign('user_group_id', sprintf('%s_to_ugi', $tableName))->references('id')->on('user_groups')->onDelete( diff --git a/database/migrations/2021_12_27_000001_create_local_personal_access_tokens_table.php b/database/migrations/2021_12_27_000001_create_local_personal_access_tokens_table.php index 2e012562f8..c551a9fe43 100644 --- a/database/migrations/2021_12_27_000001_create_local_personal_access_tokens_table.php +++ b/database/migrations/2021_12_27_000001_create_local_personal_access_tokens_table.php @@ -34,8 +34,6 @@ class CreateLocalPersonalAccessTokensTable extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { @@ -45,13 +43,13 @@ class CreateLocalPersonalAccessTokensTable extends Migration /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { if (!Schema::hasTable('personal_access_tokens')) { try { - Schema::create('personal_access_tokens', function (Blueprint $table) { + Schema::create('personal_access_tokens', static function (Blueprint $table): void { $table->bigIncrements('id'); $table->morphs('tokenable'); $table->string('name'); diff --git a/database/migrations/2022_08_21_104626_add_user_groups.php b/database/migrations/2022_08_21_104626_add_user_groups.php index 236db80847..780996662d 100644 --- a/database/migrations/2022_08_21_104626_add_user_groups.php +++ b/database/migrations/2022_08_21_104626_add_user_groups.php @@ -28,21 +28,18 @@ use Illuminate\Database\QueryException; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -/** - * - */ return new class () extends Migration { /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { try { Schema::table( 'currency_exchange_rates', - function (Blueprint $table) { + static function (Blueprint $table): void { if (!Schema::hasColumn('currency_exchange_rates', 'user_group_id')) { $table->bigInteger('user_group_id', false, true)->nullable()->after('user_id'); $table->foreign('user_group_id', 'cer_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade'); @@ -57,15 +54,13 @@ return new class () extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { try { Schema::table( 'currency_exchange_rates', - function (Blueprint $table) { + static function (Blueprint $table): void { if ('sqlite' !== config('database.default')) { $table->dropForeign('cer_to_ugi'); } @@ -74,7 +69,7 @@ return new class () extends Migration { } } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } diff --git a/database/migrations/2022_09_18_123911_create_notifications_table.php b/database/migrations/2022_09_18_123911_create_notifications_table.php index c5a4fd1599..fb0bd31fe0 100644 --- a/database/migrations/2022_09_18_123911_create_notifications_table.php +++ b/database/migrations/2022_09_18_123911_create_notifications_table.php @@ -31,13 +31,13 @@ return new class () extends Migration { /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { if (!Schema::hasTable('notifications')) { try { - Schema::create('notifications', function (Blueprint $table) { + Schema::create('notifications', static function (Blueprint $table): void { $table->uuid('id')->primary(); $table->string('type'); $table->morphs('notifiable'); @@ -54,8 +54,6 @@ return new class () extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { diff --git a/database/migrations/2022_10_01_074908_invited_users.php b/database/migrations/2022_10_01_074908_invited_users.php index 4a6246d4e5..eed71a1bc7 100644 --- a/database/migrations/2022_10_01_074908_invited_users.php +++ b/database/migrations/2022_10_01_074908_invited_users.php @@ -31,13 +31,13 @@ return new class () extends Migration { /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { if (!Schema::hasTable('invited_users')) { try { - Schema::create('invited_users', function (Blueprint $table) { + Schema::create('invited_users', static function (Blueprint $table): void { $table->id(); $table->timestamps(); $table->integer('user_id', false, true); @@ -56,8 +56,6 @@ return new class () extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { diff --git a/database/migrations/2022_10_01_210238_audit_log_entries.php b/database/migrations/2022_10_01_210238_audit_log_entries.php index 98d8170e72..a0d18c182a 100644 --- a/database/migrations/2022_10_01_210238_audit_log_entries.php +++ b/database/migrations/2022_10_01_210238_audit_log_entries.php @@ -31,13 +31,13 @@ return new class () extends Migration { /** * Run the migrations. * - * @return void + * @SuppressWarnings(PHPMD.ShortMethodName) */ public function up(): void { if (!Schema::hasTable('audit_log_entries')) { try { - Schema::create('audit_log_entries', function (Blueprint $table) { + Schema::create('audit_log_entries', static function (Blueprint $table): void { $table->id(); $table->timestamps(); $table->softDeletes(); @@ -61,8 +61,6 @@ return new class () extends Migration { /** * Reverse the migrations. - * - * @return void */ public function down(): void { diff --git a/database/migrations/2023_08_11_192521_upgrade_og_table.php b/database/migrations/2023_08_11_192521_upgrade_og_table.php index 1285607771..7ef2cac7fe 100644 --- a/database/migrations/2023_08_11_192521_upgrade_og_table.php +++ b/database/migrations/2023_08_11_192521_upgrade_og_table.php @@ -1,6 +1,5 @@ bigInteger('user_group_id', false, true)->nullable()->after('user_id'); $table->foreign('user_group_id', sprintf('%s_to_ugi', 'object_groups'))->references('id')->on('user_groups')->onDelete( @@ -64,7 +62,7 @@ return new class () extends Migration { try { Schema::table( 'object_groups', - function (Blueprint $table) { + static function (Blueprint $table): void { if ('sqlite' !== config('database.default')) { $table->dropForeign(sprintf('%s_to_ugi', 'object_groups')); } @@ -73,7 +71,7 @@ return new class () extends Migration { } } ); - } catch (QueryException | ColumnDoesNotExist $e) { + } catch (ColumnDoesNotExist|QueryException $e) { app('log')->error(sprintf('Could not execute query: %s', $e->getMessage())); app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'); } diff --git a/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php new file mode 100644 index 0000000000..65107b5610 --- /dev/null +++ b/database/migrations/2023_10_21_113213_add_currency_pivot_tables.php @@ -0,0 +1,84 @@ +. + */ + +declare(strict_types=1); + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\QueryException; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +return new class () extends Migration { + /** + * @SuppressWarnings(PHPMD.ShortMethodName) + * Run the migrations. + */ + public function up(): void + { + // transaction_currency_user + if (!Schema::hasTable('transaction_currency_user')) { + try { + Schema::create('transaction_currency_user', static function (Blueprint $table): void { + $table->id(); + $table->timestamps(); + $table->integer('user_id', false, true); + $table->integer('transaction_currency_id', false, true); + $table->boolean('user_default')->default(false); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade'); + $table->unique(['user_id', 'transaction_currency_id'], 'unique_combo'); + }); + } catch (QueryException $e) { + app('log')->error(sprintf('Could not create table "transaction_currency_user": %s', $e->getMessage())); + app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'); + } + } + + // transaction_currency_user_group + if (!Schema::hasTable('transaction_currency_user_group')) { + try { + Schema::create('transaction_currency_user_group', static function (Blueprint $table): void { + $table->id(); + $table->timestamps(); + $table->bigInteger('user_group_id', false, true); + $table->integer('transaction_currency_id', false, true); + $table->boolean('group_default')->default(false); + $table->foreign('user_group_id')->references('id')->on('user_groups')->onDelete('cascade'); + $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade'); + $table->unique(['user_group_id', 'transaction_currency_id'], 'unique_combo_ug'); + }); + } catch (QueryException $e) { + app('log')->error(sprintf('Could not create table "transaction_currency_user_group": %s', $e->getMessage())); + app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'); + } + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('transaction_currency_user'); + Schema::dropIfExists('transaction_currency_user_group'); + } +}; diff --git a/database/seeders/AccountTypeSeeder.php b/database/seeders/AccountTypeSeeder.php index 57ebb11570..7f968ba642 100644 --- a/database/seeders/AccountTypeSeeder.php +++ b/database/seeders/AccountTypeSeeder.php @@ -25,7 +25,6 @@ namespace Database\Seeders; use FireflyIII\Models\AccountType; use Illuminate\Database\Seeder; -use PDOException; /** * Class AccountTypeSeeder. @@ -52,7 +51,7 @@ class AccountTypeSeeder extends Seeder foreach ($types as $type) { try { AccountType::create(['type' => $type]); - } catch (PDOException $e) { + } catch (\PDOException $e) { // @ignoreException } } diff --git a/database/seeders/ConfigSeeder.php b/database/seeders/ConfigSeeder.php index b1ade84b80..3f7fece659 100644 --- a/database/seeders/ConfigSeeder.php +++ b/database/seeders/ConfigSeeder.php @@ -25,7 +25,6 @@ namespace Database\Seeders; use FireflyIII\Models\Configuration; use Illuminate\Database\Seeder; -use Log; /** * Class ConfigSeeder. diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 8c18621566..bdce19f553 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -33,7 +33,7 @@ class DatabaseSeeder extends Seeder /** * Run the database seeds. */ - public function run() + public function run(): void { $this->call(AccountTypeSeeder::class); $this->call(TransactionCurrencySeeder::class); diff --git a/database/seeders/ExchangeRateSeeder.php b/database/seeders/ExchangeRateSeeder.php index b5f3ff7350..06e1a20335 100644 --- a/database/seeders/ExchangeRateSeeder.php +++ b/database/seeders/ExchangeRateSeeder.php @@ -28,23 +28,18 @@ use FireflyIII\Models\CurrencyExchangeRate; use FireflyIII\Models\TransactionCurrency; use FireflyIII\User; use Illuminate\Database\Seeder; -use Illuminate\Support\Collection; /** * Class ExchangeRateSeeder */ class ExchangeRateSeeder extends Seeder { - private Collection $users; - - /** - * @return void - */ public function run(): void { - $count = User::count(); + $count = User::count(); if (0 === $count) { app('log')->debug('Will not seed exchange rates yet.'); + return; } $users = User::get(); @@ -76,41 +71,23 @@ class ExchangeRateSeeder extends Seeder } } - /** - * @param string $code - * - * @return TransactionCurrency|null - */ private function getCurrency(string $code): ?TransactionCurrency { return TransactionCurrency::whereNull('deleted_at')->where('code', $code)->first(); } - /** - * @param User $user - * @param TransactionCurrency $from - * @param TransactionCurrency $to - * @param string $date - * - * @return bool - */ private function hasRate(User $user, TransactionCurrency $from, TransactionCurrency $to, string $date): bool { return $user->currencyExchangeRates() - ->where('from_currency_id', $from->id) - ->where('to_currency_id', $to->id) - ->where('date', $date) - ->count() > 0; + ->where('from_currency_id', $from->id) + ->where('to_currency_id', $to->id) + ->where('date', $date) + ->count() > 0 + ; } /** - * @param User $user - * @param TransactionCurrency $from - * @param TransactionCurrency $to - * @param string $date - * @param float $rate - * - * @return void + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ private function addRate(User $user, TransactionCurrency $from, TransactionCurrency $to, string $date, float $rate): void { diff --git a/database/seeders/LinkTypeSeeder.php b/database/seeders/LinkTypeSeeder.php index 45a68d1149..1dca2fd2a0 100644 --- a/database/seeders/LinkTypeSeeder.php +++ b/database/seeders/LinkTypeSeeder.php @@ -25,14 +25,13 @@ namespace Database\Seeders; use FireflyIII\Models\LinkType; use Illuminate\Database\Seeder; -use PDOException; /** * Class LinkTypeSeeder. */ class LinkTypeSeeder extends Seeder { - public function run() + public function run(): void { $types = [ [ @@ -63,7 +62,7 @@ class LinkTypeSeeder extends Seeder foreach ($types as $type) { try { LinkType::create($type); - } catch (PDOException $e) { + } catch (\PDOException $e) { // @ignoreException } } diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php index 019abbaa48..76e5106459 100644 --- a/database/seeders/PermissionSeeder.php +++ b/database/seeders/PermissionSeeder.php @@ -25,14 +25,13 @@ namespace Database\Seeders; use FireflyIII\Models\Role; use Illuminate\Database\Seeder; -use PDOException; /** * Class PermissionSeeder. */ class PermissionSeeder extends Seeder { - public function run() + public function run(): void { $roles = [ [ @@ -49,7 +48,7 @@ class PermissionSeeder extends Seeder foreach ($roles as $role) { try { Role::create($role); - } catch (PDOException $e) { + } catch (\PDOException $e) { // @ignoreException } } diff --git a/database/seeders/TransactionCurrencySeeder.php b/database/seeders/TransactionCurrencySeeder.php index 21a691f48d..530881b36f 100644 --- a/database/seeders/TransactionCurrencySeeder.php +++ b/database/seeders/TransactionCurrencySeeder.php @@ -25,18 +25,15 @@ namespace Database\Seeders; use FireflyIII\Models\TransactionCurrency; use Illuminate\Database\Seeder; -use PDOException; /** * Class TransactionCurrencySeeder. */ class TransactionCurrencySeeder extends Seeder { - /** - */ - public function run() + public function run(): void { - $currencies = []; + $currencies = []; // european currencies $currencies[] = ['code' => 'EUR', 'name' => 'Euro', 'symbol' => '€', 'decimal_places' => 2, 'enabled' => 1]; $currencies[] = ['code' => 'HUF', 'name' => 'Hungarian forint', 'symbol' => 'Ft', 'decimal_places' => 2]; @@ -76,7 +73,7 @@ class TransactionCurrencySeeder extends Seeder foreach ($currencies as $currency) { try { TransactionCurrency::create($currency); - } catch (PDOException $e) { + } catch (\PDOException $e) { // @ignoreException } } diff --git a/database/seeders/TransactionTypeSeeder.php b/database/seeders/TransactionTypeSeeder.php index 517b5d15ed..1793b3e991 100644 --- a/database/seeders/TransactionTypeSeeder.php +++ b/database/seeders/TransactionTypeSeeder.php @@ -25,14 +25,13 @@ namespace Database\Seeders; use FireflyIII\Models\TransactionType; use Illuminate\Database\Seeder; -use PDOException; /** * Class TransactionTypeSeeder. */ class TransactionTypeSeeder extends Seeder { - public function run() + public function run(): void { $types = [ TransactionType::WITHDRAWAL, @@ -47,7 +46,7 @@ class TransactionTypeSeeder extends Seeder foreach ($types as $type) { try { TransactionType::create(['type' => $type]); - } catch (PDOException $e) { + } catch (\PDOException $e) { // @ignoreException } } diff --git a/database/seeders/UserRoleSeeder.php b/database/seeders/UserRoleSeeder.php index 2eb8dc6059..76d1c2084f 100644 --- a/database/seeders/UserRoleSeeder.php +++ b/database/seeders/UserRoleSeeder.php @@ -27,7 +27,6 @@ namespace Database\Seeders; use FireflyIII\Enums\UserRoleEnum; use FireflyIII\Models\UserRole; use Illuminate\Database\Seeder; -use PDOException; /** * Class UserRoleSeeder @@ -36,10 +35,8 @@ class UserRoleSeeder extends Seeder { /** * Run the database seeds. - * - * @return void */ - public function run() + public function run(): void { $roles = []; foreach (UserRoleEnum::cases() as $role) { @@ -50,7 +47,7 @@ class UserRoleSeeder extends Seeder foreach ($roles as $role) { try { UserRole::create(['title' => $role]); - } catch (PDOException $e) { + } catch (\PDOException $e) { // @ignoreException } } diff --git a/frontend/.editorconfig b/frontend/.editorconfig deleted file mode 100644 index 9d08a1a828..0000000000 --- a/frontend/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/frontend/.eslintignore b/frontend/.eslintignore deleted file mode 100644 index 0cc1d660ad..0000000000 --- a/frontend/.eslintignore +++ /dev/null @@ -1,9 +0,0 @@ -/dist -/src-bex/www -/src-capacitor -/src-cordova -/.quasar -/node_modules -.eslintrc.js -babel.config.js -/src-ssr \ No newline at end of file diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js deleted file mode 100644 index fdd68ea42d..0000000000 --- a/frontend/.eslintrc.js +++ /dev/null @@ -1,108 +0,0 @@ -/* - * .eslintrc.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -const { resolve } = require('path'); -module.exports = { - // https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy - // This option interrupts the configuration hierarchy at this file - // Remove this if you have an higher level ESLint config file (it usually happens into a monorepos) - root: true, - - // https://eslint.vuejs.org/user-guide/#how-to-use-custom-parser - // Must use parserOptions instead of "parser" to allow vue-eslint-parser to keep working - // `parser: 'vue-eslint-parser'` is already included with any 'plugin:vue/**' config and should be omitted - parserOptions: { - // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser#configuration - // https://github.com/TypeStrong/fork-ts-checker-webpack-plugin#eslint - // Needed to make the parser take into account 'vue' files - extraFileExtensions: ['.vue'], - parser: '@typescript-eslint/parser', - project: resolve(__dirname, './tsconfig.json'), - tsconfigRootDir: __dirname, - ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features - sourceType: 'module' // Allows for the use of imports - }, - - env: { - browser: true - }, - - // Rules order is important, please avoid shuffling them - extends: [ - // Base ESLint recommended rules - // 'eslint:recommended', - - // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin#usage - // ESLint typescript rules - 'plugin:@typescript-eslint/recommended', - // consider disabling this class of rules if linting takes too long - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - - // Uncomment any of the lines below to choose desired strictness, - // but leave only one uncommented! - // See https://eslint.vuejs.org/rules/#available-rules - 'plugin:vue/vue3-essential', // Priority A: Essential (Error Prevention) - // 'plugin:vue/vue3-strongly-recommended', // Priority B: Strongly Recommended (Improving Readability) - // 'plugin:vue/vue3-recommended', // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead) - - // https://github.com/prettier/eslint-config-prettier#installation - // usage with Prettier, provided by 'eslint-config-prettier'. - 'prettier' - ], - - plugins: [ - // required to apply rules which need type information - '@typescript-eslint', - - // https://eslint.vuejs.org/user-guide/#why-doesn-t-it-work-on-vue-file - // required to lint *.vue files - 'vue', - - // https://github.com/typescript-eslint/typescript-eslint/issues/389#issuecomment-509292674 - // Prettier has not been included as plugin to avoid performance impact - // add it as an extension for your IDE - ], - - globals: { - ga: 'readonly', // Google Analytics - cordova: 'readonly', - __statics: 'readonly', - __QUASAR_SSR__: 'readonly', - __QUASAR_SSR_SERVER__: 'readonly', - __QUASAR_SSR_CLIENT__: 'readonly', - __QUASAR_SSR_PWA__: 'readonly', - process: 'readonly', - Capacitor: 'readonly', - chrome: 'readonly' - }, - - // add your custom rules here - rules: { - 'prefer-promise-reject-errors': 'off', - - // TypeScript - quotes: ['warn', 'single', { avoidEscape: true }], - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - - // allow debugger during development only - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' - } -} diff --git a/frontend/.gitignore b/frontend/.gitignore deleted file mode 100644 index 553e1345ce..0000000000 --- a/frontend/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -.DS_Store -.thumbs.db -node_modules - -# Quasar core related directories -.quasar -/dist - -# Cordova related directories and files -/src-cordova/node_modules -/src-cordova/platforms -/src-cordova/plugins -/src-cordova/www - -# Capacitor related directories and files -/src-capacitor/www -/src-capacitor/node_modules - -# BEX related directories and files -/src-bex/www -/src-bex/js/core - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Editor directories and files -.idea -*.suo -*.ntvs* -*.njsproj -*.sln diff --git a/frontend/.postcssrc.js b/frontend/.postcssrc.js deleted file mode 100644 index 3e3fe5cb92..0000000000 --- a/frontend/.postcssrc.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * .postcssrc.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -// https://github.com/michael-ciniawsky/postcss-load-config - -module.exports = { - plugins: [ - // to edit target browsers: use "browserslist" field in package.json - require('autoprefixer') - ] -} diff --git a/frontend/.prettierrc b/frontend/.prettierrc deleted file mode 100644 index 650cb880f6..0000000000 --- a/frontend/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "semi": true -} diff --git a/frontend/package.json b/frontend/package.json deleted file mode 100644 index 3926d6beac..0000000000 --- a/frontend/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "firefly-iii", - "version": "0.0.1", - "description": "Personal finances manager", - "productName": "Firefly III", - "author": "James Cole ", - "private": true, - "scripts": { - "lint": "eslint --ext .js,.ts,.vue ./", - "test": "echo \"No test specified\" && exit 0" - }, - "dependencies": { - "@popperjs/core": "^2.11.2", - "@quasar/extras": "^1.16.5", - "apexcharts": "^3.32.1", - "axios": "^0.21.1", - "axios-cache-adapter": "^2.7.3", - "core-js": "^3.6.5", - "date-fns": "^2.28.0", - "pinia": "^2.0.14", - "quasar": "^2.12.3", - "vue": "3", - "vue-i18n": "^9.0.0", - "vue-router": "^4.0.0", - "vue3-apexcharts": "^1.4.1" - }, - "devDependencies": { - "@babel/eslint-parser": "^7.13.14", - "@quasar/app-webpack": "^3.9.2", - "@types/node": "^12.20.21", - "@typescript-eslint/eslint-plugin": "^4.16.1", - "@typescript-eslint/parser": "^4.16.1", - "eslint": "^7.14.0", - "eslint-config-prettier": "^8.1.0", - "eslint-plugin-vue": "^7.0.0" - }, - "browserslist": [ - "last 10 Chrome versions", - "last 10 Firefox versions", - "last 4 Edge versions", - "last 7 Safari versions", - "last 8 Android versions", - "last 8 ChromeAndroid versions", - "last 8 FirefoxAndroid versions", - "last 10 iOS versions", - "last 5 Opera versions" - ], - "engines": { - "node": ">= 12.22.1", - "npm": ">= 6.13.4", - "yarn": ">= 1.21.1" - } -} diff --git a/frontend/public/apple-touch-icon.png b/frontend/public/apple-touch-icon.png deleted file mode 100644 index cfd92079cc..0000000000 Binary files a/frontend/public/apple-touch-icon.png and /dev/null differ diff --git a/frontend/public/favicon-16x16.png b/frontend/public/favicon-16x16.png deleted file mode 100644 index 8c83dacde5..0000000000 Binary files a/frontend/public/favicon-16x16.png and /dev/null differ diff --git a/frontend/public/favicon-32x32.png b/frontend/public/favicon-32x32.png deleted file mode 100644 index 53a42dce3e..0000000000 Binary files a/frontend/public/favicon-32x32.png and /dev/null differ diff --git a/frontend/public/manifest.webmanifest b/frontend/public/manifest.webmanifest deleted file mode 100644 index cf49fb98e2..0000000000 --- a/frontend/public/manifest.webmanifest +++ /dev/null @@ -1,88 +0,0 @@ -{ - "name": "Firefly III", - "short_name": "Firefly III", - "start_url": "/", - "icons": [ - { - "src": "/maskable72.png", - "sizes": "72x72", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable76.png", - "sizes": "76x76", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable96.png", - "sizes": "96x96", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable120.png", - "sizes": "120x120", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable128.png", - "sizes": "128x128", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable144.png", - "sizes": "144x144", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable152.png", - "sizes": "152x152", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable180.png", - "sizes": "180x180", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png", - "scope": "any" - }, - { - "src": "/maskable192.png", - "sizes": "192x192", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable384.png", - "sizes": "384x384", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png", - "scope": "any" - }, - { - "src": "/maskable512.png", - "sizes": "512x512", - "type": "image/png", - "scope": "maskable" - } - ], - "theme_color": "#1e6581", - "background_color": "#1e6581", - "display": "standalone" -} diff --git a/frontend/public/maskable-icon.svg b/frontend/public/maskable-icon.svg deleted file mode 100644 index 46ca2a846f..0000000000 --- a/frontend/public/maskable-icon.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - diff --git a/frontend/public/maskable120.png b/frontend/public/maskable120.png deleted file mode 100644 index 28472c71b9..0000000000 Binary files a/frontend/public/maskable120.png and /dev/null differ diff --git a/frontend/public/maskable128.png b/frontend/public/maskable128.png deleted file mode 100644 index 6a29bd5ded..0000000000 Binary files a/frontend/public/maskable128.png and /dev/null differ diff --git a/frontend/public/maskable152.png b/frontend/public/maskable152.png deleted file mode 100644 index 8301098084..0000000000 Binary files a/frontend/public/maskable152.png and /dev/null differ diff --git a/frontend/public/maskable192.png b/frontend/public/maskable192.png deleted file mode 100644 index f280d1d2b2..0000000000 Binary files a/frontend/public/maskable192.png and /dev/null differ diff --git a/frontend/public/maskable512.png b/frontend/public/maskable512.png deleted file mode 100644 index 311b9015b1..0000000000 Binary files a/frontend/public/maskable512.png and /dev/null differ diff --git a/frontend/public/maskable76.png b/frontend/public/maskable76.png deleted file mode 100644 index d793ac1218..0000000000 Binary files a/frontend/public/maskable76.png and /dev/null differ diff --git a/frontend/public/safari-pinned-tab.svg b/frontend/public/safari-pinned-tab.svg deleted file mode 100644 index 36c7d4ecc4..0000000000 --- a/frontend/public/safari-pinned-tab.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - - diff --git a/frontend/quasar.conf.js b/frontend/quasar.conf.js deleted file mode 100644 index ef4d94995b..0000000000 --- a/frontend/quasar.conf.js +++ /dev/null @@ -1,321 +0,0 @@ -/* - * quasar.conf.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* - * This file runs in a Node context (it's NOT transpiled by Babel), so use only - * the ES6 features that are supported by your Node version. https://node.green/ - */ - -// Configuration for your app -// https://quasar.dev/quasar-cli/quasar-conf-js - -/* eslint-env node */ -/* eslint-disable @typescript-eslint/no-var-requires */ -const { configure } = require('quasar/wrappers'); - -module.exports = configure(function (ctx) { - return { - // https://quasar.dev/quasar-cli/supporting-ts - supportTS: false, - - // https://quasar.dev/quasar-cli/prefetch-feature - preFetch: true, - - // app boot file (/src/boot) - // --> boot files are part of "main.js" - // https://quasar.dev/quasar-cli/boot-files - boot: [ - 'i18n', - 'axios', - ], - - // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css - css: [ - 'app.scss' - ], - - // https://github.com/quasarframework/quasar/tree/dev/extras - extras: [ - // 'ionicons-v4', - // 'mdi-v5', - 'fontawesome-v6', - // 'eva-icons', - // 'themify', - // 'line-awesome', - // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! - - // 'roboto-font', // optional, you are not bound to it - // 'material-icons', // optional, you are not bound to it - ], - - // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build - build: { - vueRouterMode: 'hash', // available values: 'hash', 'history' - - // transpile: false, - publicPath: '/v3/', - distDir: '../public/v3', - - - // Add dependencies for transpiling with Babel (Array of string/regex) - // (from node_modules, which are by default not transpiled). - // Applies only if "transpile" is set to true. - // transpileDependencies: [], - - // rtl: true, // https://quasar.dev/options/rtl-support - // preloadChunks: true, - // showProgress: false, - // gzip: true, - // analyze: true, - - // Options below are automatically set depending on the env, set them if you want to override - // extractCSS: false, - - // https://quasar.dev/quasar-cli/handling-webpack - // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain - chainWebpack (/* chain */) { - // - }, - }, - - // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-devServer - devServer: { - server: { - type: 'https' - }, - port: 8080, - host: 'firefly-dev.sd.local', - open: false, // opens browser window automatically - proxy: [ - { - context: ['/sanctum', '/api'], - target: 'https://firefly.sd.local', // Laravel Homestead end-point - // avoid problems with session and XSRF cookies - // When using capacitor, use the IP of the dev server streaming the app - // For SPA and PWA use localhost, given that the app is streamed on that host - // xxx address is your machine current IP address - cookieDomainRewrite: - ctx.modeName === 'capacitor' ? '10.0.0.1' : '.sd.local', - changeOrigin: true, - } - ] - }, - - - // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework - framework: { - config: { - dark: 'auto' - }, - - lang: 'en-US', // Quasar language pack - iconSet: 'fontawesome-v6', - - // For special cases outside of where the auto-import strategy can have an impact - // (like functional components as one of the examples), - // you can manually specify Quasar components/directives to be available everywhere: - // - // components: [], - // directives: [], - - // Quasar plugins - plugins: [ - 'Dialog', - 'LocalStorage', - ] - }, - - // animations: 'all', // --- includes all animations - // https://quasar.dev/options/animations - animations: [], - - // https://quasar.dev/quasar-cli/developing-ssr/configuring-ssr - ssr: { - pwa: false, - - // manualStoreHydration: true, - // manualPostHydrationTrigger: true, - - prodPort: 3000, // The default port that the production server should use - // (gets superseded if process.env.PORT is specified at runtime) - - maxAge: 1000 * 60 * 60 * 24 * 30, - // Tell browser when a file from the server should expire from cache (in ms) - - chainWebpackWebserver (/* chain */) { - // - }, - - middlewares: [ - ctx.prod ? 'compression' : '', - 'render' // keep this as last one - ] - }, - - // https://quasar.dev/quasar-cli/developing-pwa/configuring-pwa - pwa: { - workboxPluginMode: 'GenerateSW', // 'GenerateSW' or 'InjectManifest' - workboxOptions: {}, // only for GenerateSW - - // for the custom service worker ONLY (/src-pwa/custom-service-worker.[js|ts]) - // if using workbox in InjectManifest mode - chainWebpackCustomSW (/* chain */) { - // - }, - - manifest: { - name: 'Firefly III', - short_name: 'Firefly III', - description: 'Personal Finances Manager', - start_url: '/', - display: 'standalone', - orientation: 'portrait', - theme_color: "#1e6581", - background_color: "#1e6581", - icons: [ - { - "src": "/maskable72.png", - "sizes": "72x72", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable76.png", - "sizes": "76x76", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable96.png", - "sizes": "96x96", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable120.png", - "sizes": "120x120", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable128.png", - "sizes": "128x128", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable144.png", - "sizes": "144x144", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable152.png", - "sizes": "152x152", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable180.png", - "sizes": "180x180", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png", - "scope": "any" - }, - { - "src": "/maskable192.png", - "sizes": "192x192", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/maskable384.png", - "sizes": "384x384", - "type": "image/png", - "scope": "maskable" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png", - "scope": "any" - }, - { - "src": "/maskable512.png", - "sizes": "512x512", - "type": "image/png", - "scope": "maskable" - } - ] - } - }, - - // Full list of options: https://quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova - cordova: { - // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing - }, - - // Full list of options: https://quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor - capacitor: { - hideSplashscreen: true - }, - - // Full list of options: https://quasar.dev/quasar-cli/developing-electron-apps/configuring-electron - electron: { - bundler: 'packager', // 'packager' or 'builder' - - packager: { - // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options - - // OS X / Mac App Store - // appBundleId: '', - // appCategoryType: '', - // osxSign: '', - // protocol: 'myapp://path', - - // Windows only - // win32metadata: { ... } - }, - - builder: { - // https://www.electron.build/configuration/configuration - - appId: 'firefly-iii' - }, - - // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain - chainWebpack (/* chain */) { - // do something with the Electron main process Webpack cfg - // extendWebpackMain also available besides this chainWebpackMain - }, - - // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain - chainWebpackPreload (/* chain */) { - // do something with the Electron main process Webpack cfg - // extendWebpackPreload also available besides this chainWebpackPreload - }, - } - } -}); diff --git a/frontend/quasar.extensions.json b/frontend/quasar.extensions.json deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/frontend/quasar.extensions.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/frontend/src/App.vue b/frontend/src/App.vue deleted file mode 100644 index 87056cffe0..0000000000 --- a/frontend/src/App.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - - diff --git a/frontend/src/api/accounts/get.js b/frontend/src/api/accounts/get.js deleted file mode 100644 index 8270b4ecdb..0000000000 --- a/frontend/src/api/accounts/get.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import Api from "src/api/root/api"; - -export default class Get extends Api { - constructor() { - super('accounts'); // call the super class constructor and pass in the name parameter - } - - /** - * - * @param identifier - * @param date - * @returns {Promise>} - */ - get(identifier, date) { - let params = {date: date}; - if (!date) { - return this.apiGet(identifier); - } - return this.apiGet(identifier, params); - } - - /** - * - * @param identifier - * @param page - * @returns {Promise>} - */ - transactions(identifier, page) { - return this.apiGetChildren('transactions', identifier, page); - } -} diff --git a/frontend/src/api/accounts/list.js b/frontend/src/api/accounts/list.js deleted file mode 100644 index 28b7d5b41a..0000000000 --- a/frontend/src/api/accounts/list.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import Api from "src/api/root/api"; - -export default class List extends Api { - constructor() { - super('accounts'); - } - - list(type, page, cacheKey) { - let url = '/api/v1/accounts'; - return api.get(url, {params: {page: page, cache: cacheKey, type: type}}); - // console.log('list'); - // - // - // let params = { - // type: type, - // page: page - // } - // this.apiList(page, params).then((response) => { - // console.log('response OK'); - // }).catch((err) => { - // console.error('api list failed'); - // }); - } -} diff --git a/frontend/src/api/accounts/post.js b/frontend/src/api/accounts/post.js deleted file mode 100644 index 159ec94f32..0000000000 --- a/frontend/src/api/accounts/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/accounts'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/authenticate/index.js b/frontend/src/api/authenticate/index.js deleted file mode 100644 index 2335516928..0000000000 --- a/frontend/src/api/authenticate/index.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * basic.js - * Copyright (c) 2021 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Authenticate { - async authenticate() { - return await api.get('/sanctum/csrf-cookie'); - } -} diff --git a/frontend/src/api/budgets/get.js b/frontend/src/api/budgets/get.js deleted file mode 100644 index 48eaa24ec6..0000000000 --- a/frontend/src/api/budgets/get.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/budgets/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/budgets/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } - - transactionsWithoutBudget(page, cacheKey) { - let url = '/api/v1/budgets/transactions-without-budget'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/budgets/list.js b/frontend/src/api/budgets/list.js deleted file mode 100644 index 25e6cb40c9..0000000000 --- a/frontend/src/api/budgets/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/budgets'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/budgets/post.js b/frontend/src/api/budgets/post.js deleted file mode 100644 index 51ef6c6dad..0000000000 --- a/frontend/src/api/budgets/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/budgets'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/budgets/put.js b/frontend/src/api/budgets/put.js deleted file mode 100644 index d58e7872cb..0000000000 --- a/frontend/src/api/budgets/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/budgets/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/categories/get.js b/frontend/src/api/categories/get.js deleted file mode 100644 index a3fc6f2891..0000000000 --- a/frontend/src/api/categories/get.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/categories/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/categories/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } - - transactionsWithoutCategory(page, cacheKey) { - let url = '/api/v1/categories/transactions-without-category'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/categories/list.js b/frontend/src/api/categories/list.js deleted file mode 100644 index 0d07c89c4e..0000000000 --- a/frontend/src/api/categories/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/categories'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/categories/post.js b/frontend/src/api/categories/post.js deleted file mode 100644 index af240f2d05..0000000000 --- a/frontend/src/api/categories/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/categories'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/categories/put.js b/frontend/src/api/categories/put.js deleted file mode 100644 index 0576150be3..0000000000 --- a/frontend/src/api/categories/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/categories/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/chart/account/overview.js b/frontend/src/api/chart/account/overview.js deleted file mode 100644 index cecaefaf51..0000000000 --- a/frontend/src/api/chart/account/overview.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * overview.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class Overview { - overview(range, cacheKey) { - let startStr = format(range.start, 'y-MM-dd'); - let endStr = format(range.end, 'y-MM-dd'); - return api.get('/api/v1/chart/account/overview', {params: {start: startStr, end: endStr, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/currencies/get.js b/frontend/src/api/currencies/get.js deleted file mode 100644 index ebce1424c6..0000000000 --- a/frontend/src/api/currencies/get.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/currencies/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/currencies/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/currencies/list.js b/frontend/src/api/currencies/list.js deleted file mode 100644 index 2468bc3d94..0000000000 --- a/frontend/src/api/currencies/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/currencies'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/currencies/post.js b/frontend/src/api/currencies/post.js deleted file mode 100644 index 063e99c502..0000000000 --- a/frontend/src/api/currencies/post.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/currencies'; - return api.post(url, submission); - } - - makeDefault(currency) { - let url = '/api/v1/currencies/' + currency + '/default'; - return api.post(url); - } -} diff --git a/frontend/src/api/currencies/put.js b/frontend/src/api/currencies/put.js deleted file mode 100644 index f3bae8c194..0000000000 --- a/frontend/src/api/currencies/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/currencies/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/data/export.js b/frontend/src/api/data/export.js deleted file mode 100644 index d3a15f23f9..0000000000 --- a/frontend/src/api/data/export.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Export { - transactions(start, end) { - let url = '/api/v1/data/export/transactions'; - return api.get(url, {params: {start: start, end: end}}); - } -} diff --git a/frontend/src/api/generic/destroy.js b/frontend/src/api/generic/destroy.js deleted file mode 100644 index 90e32cb0dd..0000000000 --- a/frontend/src/api/generic/destroy.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * destroy.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import Api from "src/api/root/api"; - -export default class Destroy extends Api { - constructor(path) { - super(path); - } -} diff --git a/frontend/src/api/groups/get.js b/frontend/src/api/groups/get.js deleted file mode 100644 index 693ba9261f..0000000000 --- a/frontend/src/api/groups/get.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/object_groups/' + identifier; - return api.get(url); - } -} diff --git a/frontend/src/api/groups/list.js b/frontend/src/api/groups/list.js deleted file mode 100644 index 7c37ad4b7e..0000000000 --- a/frontend/src/api/groups/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(type, page, cacheKey) { - let url = '/api/v1/object_groups'; - return api.get(url, {params: {page: page, cache: cacheKey, type: type}}); - } -} diff --git a/frontend/src/api/groups/put.js b/frontend/src/api/groups/put.js deleted file mode 100644 index b326011c27..0000000000 --- a/frontend/src/api/groups/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/object_groups/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/piggy-banks/get.js b/frontend/src/api/piggy-banks/get.js deleted file mode 100644 index fa3271f5d6..0000000000 --- a/frontend/src/api/piggy-banks/get.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/piggy_banks/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/piggy_banks/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/piggy-banks/list.js b/frontend/src/api/piggy-banks/list.js deleted file mode 100644 index 836b8313b1..0000000000 --- a/frontend/src/api/piggy-banks/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/piggy_banks'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/piggy-banks/post.js b/frontend/src/api/piggy-banks/post.js deleted file mode 100644 index 8f7b1020d8..0000000000 --- a/frontend/src/api/piggy-banks/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/piggy_banks'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/piggy-banks/put.js b/frontend/src/api/piggy-banks/put.js deleted file mode 100644 index 0168125922..0000000000 --- a/frontend/src/api/piggy-banks/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/piggy_banks/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/preferences/put.js b/frontend/src/api/preferences/put.js deleted file mode 100644 index d8283cae65..0000000000 --- a/frontend/src/api/preferences/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - put(name, value) { - let url = '/api/v1/preferences/' + name; - return api.put(url, {data: value}); - } -} diff --git a/frontend/src/api/recurring/list.js b/frontend/src/api/recurring/list.js deleted file mode 100644 index a47029db44..0000000000 --- a/frontend/src/api/recurring/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/recurrences'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/recurring/post.js b/frontend/src/api/recurring/post.js deleted file mode 100644 index 6f32133667..0000000000 --- a/frontend/src/api/recurring/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/recurrences'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/recurring/put.js b/frontend/src/api/recurring/put.js deleted file mode 100644 index e56d616008..0000000000 --- a/frontend/src/api/recurring/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/recurrences/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/root/api.js b/frontend/src/api/root/api.js deleted file mode 100644 index b2a9f0eae7..0000000000 --- a/frontend/src/api/root/api.js +++ /dev/null @@ -1,130 +0,0 @@ -/* - * api.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -/** - * - */ -export default class Api { - root = '/api/v1/'; - path = ''; - - constructor(path) { - this.path = path; - } - - apiPath() { - return this.root + this.path; - } - - apiPathId(identifier) { - return this.root + this.path + '/' + identifier; - } - - /** - * - * @param identifier - * @param params - * @returns {Promise>} - */ - apiGet(identifier, params) { - let url = this.apiPathId(identifier); - if (params) { - return api.get(url, {params: params}); - } - return api.get(url); - } - - /** - * This is a generic method that works for all DELETE operations. - * - * @param identifier - * @returns {Promise>} - */ - destroy(identifier) { - let url = this.apiPathId(identifier); - return api.delete(url); - } - - apiPathChildren(identifier, type) { - return this.apiPathId(identifier) + '/' + type; - } - - apiGetChildren(type, identifier, page) { - let url = this.apiPathChildren(identifier, type); - let cacheKey = 'still-todo'; - // needs a cache key. Based on type. - return api.get(url, {params: {page: page, cache: cacheKey}}); - } - - - /** - * - * @param page - * @param params - * @returns {Promise>} - */ - apiList(page, params) { - let type = 'transactions'; - let identifier = '1'; - - let cacheKey = 'still-todo'; - let url = this.apiPathChildren(identifier, type); - - // needs a cache key. Based on type. - return api.get(url, {params: {page: page, cache: cacheKey}}); - - - // let identifier = 'abc'; - // // test: - // let type= 'expense'; - - // let type ='accounts'; - // - // this.store.getters["fireflyiii/getScopedCacheKey"](type); - // let cacheKey = 'def'; - // let url = this.apiPath(); - // - // // needs a cache key. Based on type. - // return api.get(url, {params: {page: page, cache: cacheKey}}); - - // - // - // console.log('apiList'); - // let cacheKey; - // - // //let $q = useQuasar(); - // //const store = useStore(); - // cacheKey = 'OK'; - // console.log('path: ' + this.path); - // //cacheKey = $store.getters["fireflyiii/getScopedCacheKey"](this.path); - // //store.getters["fireflyiii/getScopedCacheKey"](this.path) - // let cache = { - // cache: cacheKey - // }; - // let merged = {...params, ...cache}; - // console.log(merged); - // let url = this.apiPath(); - // console.log(url); - // return api.get(url, {params: merged}); - } - -} diff --git a/frontend/src/api/rule-groups/list.js b/frontend/src/api/rule-groups/list.js deleted file mode 100644 index 3aaa5e1f31..0000000000 --- a/frontend/src/api/rule-groups/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/rule_groups'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/rule-groups/put.js b/frontend/src/api/rule-groups/put.js deleted file mode 100644 index e04ee87c89..0000000000 --- a/frontend/src/api/rule-groups/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/rule_groups/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/rules/post.js b/frontend/src/api/rules/post.js deleted file mode 100644 index 5dbacb8b5b..0000000000 --- a/frontend/src/api/rules/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/rules'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/rules/put.js b/frontend/src/api/rules/put.js deleted file mode 100644 index cede795cbb..0000000000 --- a/frontend/src/api/rules/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - post(identifier, submission) { - let url = '/api/v1/rules/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/subscriptions/get.js b/frontend/src/api/subscriptions/get.js deleted file mode 100644 index 66759dd199..0000000000 --- a/frontend/src/api/subscriptions/get.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/bills/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/bills/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/subscriptions/list.js b/frontend/src/api/subscriptions/list.js deleted file mode 100644 index aa88472022..0000000000 --- a/frontend/src/api/subscriptions/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/bills'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/subscriptions/post.js b/frontend/src/api/subscriptions/post.js deleted file mode 100644 index 1be441cdb7..0000000000 --- a/frontend/src/api/subscriptions/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/bills'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/subscriptions/put.js b/frontend/src/api/subscriptions/put.js deleted file mode 100644 index d3067215c7..0000000000 --- a/frontend/src/api/subscriptions/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - put(identifier, submission) { - let url = '/api/v1/bills/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/system/about.js b/frontend/src/api/system/about.js deleted file mode 100644 index 3f8d10ce74..0000000000 --- a/frontend/src/api/system/about.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * about.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -//import createAuthRefreshInterceptor from 'axios-auth-refresh'; - -export default class About { - list() { - return api.get('/api/v1/about'); - } -} diff --git a/frontend/src/api/system/configuration.js b/frontend/src/api/system/configuration.js deleted file mode 100644 index 4161f0294c..0000000000 --- a/frontend/src/api/system/configuration.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * configuration.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Configuration { - get(identifier) { - return api.get('/api/v1/configuration/' + identifier); - } - - put(identifier, value) { - return api.put('/api/v1/configuration/' + identifier, value); - } -} diff --git a/frontend/src/api/tags/get.js b/frontend/src/api/tags/get.js deleted file mode 100644 index 90939638e2..0000000000 --- a/frontend/src/api/tags/get.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/tags/' + identifier; - return api.get(url); - } - - transactions(identifier, page, cacheKey) { - let url = '/api/v1/tags/' + identifier + '/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/tags/list.js b/frontend/src/api/tags/list.js deleted file mode 100644 index 0239f7ac4c..0000000000 --- a/frontend/src/api/tags/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/tags'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/transactions/get.js b/frontend/src/api/transactions/get.js deleted file mode 100644 index c8adc2f7bf..0000000000 --- a/frontend/src/api/transactions/get.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = 'api/v1/transactions/' + identifier; - return api.get(url); - } -} diff --git a/frontend/src/api/transactions/list.js b/frontend/src/api/transactions/list.js deleted file mode 100644 index fee89f3764..0000000000 --- a/frontend/src/api/transactions/list.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(type, page, cacheKey) { - let url = 'api/v1/transactions'; - return api.get(url, {params: {page: page, cache: cacheKey, type: type}}); - } - -} diff --git a/frontend/src/api/transactions/parser.js b/frontend/src/api/transactions/parser.js deleted file mode 100644 index 76ae40f162..0000000000 --- a/frontend/src/api/transactions/parser.js +++ /dev/null @@ -1,79 +0,0 @@ -/* - * parser.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default class Parser { - parseResponse(response) { - let obj = {}; - obj.rows = []; - obj.rowsPerPage = response.data.meta.pagination.per_page; - obj.rowsNumber = response.data.meta.pagination.total; - - for (let i in response.data.data) { - if (response.data.data.hasOwnProperty(i)) { - let current = response.data.data[i]; - let group = { - group_id: current.id, - splits: [], - group_title: current.attributes.group_title - }; - - for (let ii in current.attributes.transactions) { - if (current.attributes.transactions.hasOwnProperty(ii)) { - let transaction = current.attributes.transactions[ii]; - let parsed = { - group_id: current.id, - journal_id: parseInt(transaction.transaction_journal_id), - type: transaction.type, - description: transaction.description, - amount: transaction.amount, - date: transaction.date, - source: transaction.source_name, - destination: transaction.destination_name, - category: transaction.category_name, - budget: transaction.budget_name, - currencyCode: transaction.currency_code, - }; - if (1 === current.attributes.transactions.length && 0 === parseInt(ii)) { - group.group_title = transaction.description; - } - - // merge with group if index = 0; - if (0 === parseInt(ii)) { - group = { - ...group, - ...parsed - }; - } - // append to splits if > 1 and > 1 - if (current.attributes.transactions.length > 0) { - group.splits.push(parsed); - // add amount: - if (ii > 0) { - group.amount = parseFloat(group.amount) + parseFloat(parsed.amount); - } - } - } - } - obj.rows.push(group); - } - } - return obj; - } -} diff --git a/frontend/src/api/transactions/post.js b/frontend/src/api/transactions/post.js deleted file mode 100644 index 5197fc1035..0000000000 --- a/frontend/src/api/transactions/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/transactions'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/transactions/put.js b/frontend/src/api/transactions/put.js deleted file mode 100644 index 52858ded73..0000000000 --- a/frontend/src/api/transactions/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - put(identifier, submission) { - let url = '/api/v1/transactions/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/api/v2/accounts/get.js b/frontend/src/api/v2/accounts/get.js deleted file mode 100644 index 16d4cecfed..0000000000 --- a/frontend/src/api/v2/accounts/get.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - * get.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import Api from "src/api/v2/root/api"; - -export default class Get extends Api { - constructor() { - super('accounts'); // call the super class constructor and pass in the name parameter - } - - /** - * - * @param identifier - * @param date - * @returns {Promise>} - */ - get(identifier, date) { - let params = {date: date}; - if (!date) { - return this.apiGet(identifier); - } - return this.apiGet(identifier, params); - } - - transactions(identifier, params) { - if (!params) { - return this.apiGetTransactions(identifier); - } - return this.apiGetTransactions(identifier, params); - } -} diff --git a/frontend/src/api/v2/autocomplete/accounts.js b/frontend/src/api/v2/autocomplete/accounts.js deleted file mode 100644 index 83756b128e..0000000000 --- a/frontend/src/api/v2/autocomplete/accounts.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * get.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Accounts { - - /** - * - * @param types - * @returns {Promise>} - */ - get(types, query) { - let url = 'api/v2/autocomplete/accounts'; - return api.get(url, {params: {types: types, query: query, limit: 25}}) - } - -} diff --git a/frontend/src/api/v2/bills/sum.js b/frontend/src/api/v2/bills/sum.js deleted file mode 100644 index ad0171424e..0000000000 --- a/frontend/src/api/v2/bills/sum.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class Sum { - unpaid(start, end) { - let url = 'api/v2/bills/sum/unpaid'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {start: startStr, end: endStr}}); - } - - paid(start, end) { - let url = 'api/v2/bills/sum/paid'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {start: startStr, end: endStr}}); - } -} diff --git a/frontend/src/api/v2/budget-limits/list.js b/frontend/src/api/v2/budget-limits/list.js deleted file mode 100644 index ebfd951302..0000000000 --- a/frontend/src/api/v2/budget-limits/list.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class List { - list(budget, start, end, page) { - let url = '/api/v2/budgets/' + budget + '/limits'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {page: page, start: startStr, end: endStr}}); - } -} diff --git a/frontend/src/api/v2/budgets/get.js b/frontend/src/api/v2/budgets/get.js deleted file mode 100644 index 2f5d1c2aed..0000000000 --- a/frontend/src/api/v2/budgets/get.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class Get { - spent(identifier, start, end) { - let url = '/api/v2/budgets/' + identifier + '/spent'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {start: startStr, end: endStr}}); - } - -} diff --git a/frontend/src/api/v2/budgets/list.js b/frontend/src/api/v2/budgets/list.js deleted file mode 100644 index 122c817e98..0000000000 --- a/frontend/src/api/v2/budgets/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page) { - let url = '/api/v2/budgets'; - return api.get(url, {params: {page: page}}); - } -} diff --git a/frontend/src/api/v2/budgets/sum.js b/frontend/src/api/v2/budgets/sum.js deleted file mode 100644 index 926004bf5c..0000000000 --- a/frontend/src/api/v2/budgets/sum.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class Sum { - budgeted(start, end) { - let url = 'api/v2/budgets/sum/budgeted'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {start: startStr, end: endStr}}); - } - - spent(start, end) { - let url = 'api/v2/budgets/sum/spent'; - let startStr = format(start, 'y-MM-dd'); - let endStr = format(end, 'y-MM-dd'); - return api.get(url, {params: {start: startStr, end: endStr}}); - } -} diff --git a/frontend/src/api/v2/chart/account/dashboard.js b/frontend/src/api/v2/chart/account/dashboard.js deleted file mode 100644 index c131ff2ae9..0000000000 --- a/frontend/src/api/v2/chart/account/dashboard.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * overview.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class Dashboard { - overview(range, cacheKey) { - let startStr = format(range.start, 'y-MM-dd'); - let endStr = format(range.end, 'y-MM-dd'); - return api.get('/api/v2/chart/account/dashboard', {params: {start: startStr, end: endStr, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/v2/net-worth/index.js b/frontend/src/api/v2/net-worth/index.js deleted file mode 100644 index 6037ee45a2..0000000000 --- a/frontend/src/api/v2/net-worth/index.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * basic.js - * Copyright (c) 2021 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; -import {format} from "date-fns"; - -export default class NetWorth { - get(date) { - let dateStr = format(date, 'y-MM-dd'); - return api.get('/api/v2/net-worth', {params: {date: dateStr}}); - } -} diff --git a/frontend/src/api/v2/preferences/index.js b/frontend/src/api/v2/preferences/index.js deleted file mode 100644 index 4e5e9e5951..0000000000 --- a/frontend/src/api/v2/preferences/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * basic.js - * Copyright (c) 2021 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Preferences { - get(name) { - return api.get('/api/v2/preferences/' + name); - } - - // postByName(name, value) { - // return api.post('/api/v1/preferences', {name: name, data: value}); - // } -} diff --git a/frontend/src/api/v2/root/api.js b/frontend/src/api/v2/root/api.js deleted file mode 100644 index 1ab35799e3..0000000000 --- a/frontend/src/api/v2/root/api.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - * api.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -/** - * - */ -export default class Api { - root = '/api/v2/'; - path = ''; - - constructor(path) { - this.path = path; - } - - apiPath() { - return this.root + this.path; - } - - apiPathWithObject(object) { - return this.root + this.path + '/' + object; - } - - /** - * - * @param object - * @param params - * @returns {Promise>} - */ - apiGet(object, params) { - let url = this.apiPathWithObject(object); - if (params) { - return api.get(url, {params: params}); - } - return api.get(url); - } - - /** - * - * @param object - * @param params - * @returns {Promise>} - */ - apiGetTransactions(object, params) { - let url = this.apiPathWithObject(object) + '/transactions'; - if (params) { - return api.get(url, {params: params}); - } - return api.get(url); - } -} diff --git a/frontend/src/api/webhooks/get.js b/frontend/src/api/webhooks/get.js deleted file mode 100644 index 3c8ce7ed11..0000000000 --- a/frontend/src/api/webhooks/get.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Get { - get(identifier) { - let url = '/api/v1/webhooks/' + identifier; - return api.get(url); - } -} diff --git a/frontend/src/api/webhooks/list.js b/frontend/src/api/webhooks/list.js deleted file mode 100644 index 5d4335ea73..0000000000 --- a/frontend/src/api/webhooks/list.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * list.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class List { - list(page, cacheKey) { - let url = '/api/v1/webhooks'; - return api.get(url, {params: {page: page, cache: cacheKey}}); - } -} diff --git a/frontend/src/api/webhooks/post.js b/frontend/src/api/webhooks/post.js deleted file mode 100644 index b120984741..0000000000 --- a/frontend/src/api/webhooks/post.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Post { - post(submission) { - let url = '/api/v1/webhooks'; - return api.post(url, submission); - } -} diff --git a/frontend/src/api/webhooks/put.js b/frontend/src/api/webhooks/put.js deleted file mode 100644 index 16dff0a824..0000000000 --- a/frontend/src/api/webhooks/put.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * post.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {api} from "boot/axios"; - -export default class Put { - put(identifier, submission) { - let url = '/api/v1/webhooks/' + identifier; - return api.put(url, submission); - } -} diff --git a/frontend/src/boot/.gitkeep b/frontend/src/boot/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frontend/src/boot/axios.js b/frontend/src/boot/axios.js deleted file mode 100644 index 40bb2c27dc..0000000000 --- a/frontend/src/boot/axios.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * axios.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {boot} from 'quasar/wrappers' -import axios from 'axios' -import {setupCache} from 'axios-cache-adapter' - -const cache = setupCache({ - maxAge: 15 * 60 * 1000, - exclude: {query: false} -}) - -// Be careful when using SSR for cross-request state pollution -// due to creating a Singleton instance here; -// If any client changes this (global) instance, it might be a -// good idea to move this instance creation inside of the -// "export default () => {}" function below (which runs individually -// for each client) - -const url = process.env.DEBUGGING ? 'https://firefly.sd.local' : '/'; -const api = axios.create({baseURL: url, withCredentials: true, adapter: cache.adapter}); - -export default boot(({app}) => { - // for use inside Vue files (Options API) through this.$axios and this.$api - axios.defaults.withCredentials = true; - axios.defaults.baseURL = url; - - app.config.globalProperties.$axios = axios - // ^ ^ ^ this will allow you to use this.$axios (for Vue Options API form) - // so you won't necessarily have to import axios in each vue file - - app.config.globalProperties.$api = api - // ^ ^ ^ this will allow you to use this.$api (for Vue Options API form) - // so you can easily perform requests against your app's API -}) - -export {api} diff --git a/frontend/src/boot/i18n.js b/frontend/src/boot/i18n.js deleted file mode 100644 index d28f99d44b..0000000000 --- a/frontend/src/boot/i18n.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * i18n.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {boot} from 'quasar/wrappers' -import {createI18n} from 'vue-i18n' -import messages from 'src/i18n' - -export default boot(({app}) => { - const i18n = createI18n({ - locale: 'en-US', - messages - }) - - // Set i18n instance on app - app.use(i18n) -}) diff --git a/frontend/src/components/Alert.vue b/frontend/src/components/Alert.vue deleted file mode 100644 index 8523990715..0000000000 --- a/frontend/src/components/Alert.vue +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/CompositionComponent.vue b/frontend/src/components/CompositionComponent.vue deleted file mode 100644 index 511bc9c321..0000000000 --- a/frontend/src/components/CompositionComponent.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - - - diff --git a/frontend/src/components/DateRange.vue b/frontend/src/components/DateRange.vue deleted file mode 100644 index 86fd499585..0000000000 --- a/frontend/src/components/DateRange.vue +++ /dev/null @@ -1,135 +0,0 @@ - - - - - diff --git a/frontend/src/components/EssentialLink.vue b/frontend/src/components/EssentialLink.vue deleted file mode 100644 index bfae5fff32..0000000000 --- a/frontend/src/components/EssentialLink.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/frontend/src/components/dashboard/AccountChart.vue b/frontend/src/components/dashboard/AccountChart.vue deleted file mode 100644 index 5e0d624045..0000000000 --- a/frontend/src/components/dashboard/AccountChart.vue +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/dashboard/BillInsightBox.vue b/frontend/src/components/dashboard/BillInsightBox.vue deleted file mode 100644 index c9ed006f95..0000000000 --- a/frontend/src/components/dashboard/BillInsightBox.vue +++ /dev/null @@ -1,178 +0,0 @@ - - - - - diff --git a/frontend/src/components/dashboard/BudgetBox.vue b/frontend/src/components/dashboard/BudgetBox.vue deleted file mode 100644 index beae4361c0..0000000000 --- a/frontend/src/components/dashboard/BudgetBox.vue +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - - - diff --git a/frontend/src/components/dashboard/NetWorthInsightBox.vue b/frontend/src/components/dashboard/NetWorthInsightBox.vue deleted file mode 100644 index 9e594d0d97..0000000000 --- a/frontend/src/components/dashboard/NetWorthInsightBox.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/dashboard/NewUser.vue b/frontend/src/components/dashboard/NewUser.vue deleted file mode 100644 index c3cde7a446..0000000000 --- a/frontend/src/components/dashboard/NewUser.vue +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/dashboard/SpendInsightBox.vue b/frontend/src/components/dashboard/SpendInsightBox.vue deleted file mode 100644 index bae80cb180..0000000000 --- a/frontend/src/components/dashboard/SpendInsightBox.vue +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/dashboard/TransactionList.vue b/frontend/src/components/dashboard/TransactionList.vue deleted file mode 100644 index 0189b5afac..0000000000 --- a/frontend/src/components/dashboard/TransactionList.vue +++ /dev/null @@ -1,214 +0,0 @@ - - - - - diff --git a/frontend/src/components/dashboard/TransactionLists.vue b/frontend/src/components/dashboard/TransactionLists.vue deleted file mode 100644 index 73cd2d58c5..0000000000 --- a/frontend/src/components/dashboard/TransactionLists.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - - - diff --git a/frontend/src/components/transactions/LargeTable.vue b/frontend/src/components/transactions/LargeTable.vue deleted file mode 100644 index 47d6be4b81..0000000000 --- a/frontend/src/components/transactions/LargeTable.vue +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/transactions/Split.vue b/frontend/src/components/transactions/Split.vue deleted file mode 100644 index c5d78872b3..0000000000 --- a/frontend/src/components/transactions/Split.vue +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/transactions/form/DestinationAccount.vue b/frontend/src/components/transactions/form/DestinationAccount.vue deleted file mode 100644 index dc09048ee4..0000000000 --- a/frontend/src/components/transactions/form/DestinationAccount.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/transactions/form/SourceAccount.vue b/frontend/src/components/transactions/form/SourceAccount.vue deleted file mode 100644 index e8cbce81b0..0000000000 --- a/frontend/src/components/transactions/form/SourceAccount.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - diff --git a/frontend/src/components/transactions/form/TransactionDescription.vue b/frontend/src/components/transactions/form/TransactionDescription.vue deleted file mode 100644 index 1529ef9462..0000000000 --- a/frontend/src/components/transactions/form/TransactionDescription.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - diff --git a/frontend/src/css/app.scss b/frontend/src/css/app.scss deleted file mode 100644 index 32f2ddcee0..0000000000 --- a/frontend/src/css/app.scss +++ /dev/null @@ -1,21 +0,0 @@ -/*! - * app.scss - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -// app global css in SCSS form diff --git a/frontend/src/css/quasar.variables.scss b/frontend/src/css/quasar.variables.scss deleted file mode 100644 index 6ce65936bb..0000000000 --- a/frontend/src/css/quasar.variables.scss +++ /dev/null @@ -1,49 +0,0 @@ -/*! - * quasar.variables.scss - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -// Quasar SCSS (& Sass) Variables -// -------------------------------------------------- -// To customize the look and feel of this app, you can override -// the Sass/SCSS variables found in Quasar's source Sass/SCSS files. - -// Check documentation for full list of Quasar variables - -// Your own variables (that are declared here) and Quasar's own -// ones will be available out of the box in your .vue/.scss/.sass files - -// It's highly recommended to change the default colors -// to match your app's branding. -// Tip: Use the "Theme Builder" on Quasar's documentation website. - -// $primary : #1976D2; -$primary: #1E6581; - -$secondary: #26A69A; -$accent: #9C27B0; - -$dark: #1D1D1D; - -// $positive : #21BA45; -$positive: #64B624; -// $negative : #C10015; -$negative: #CD5029; - -$info: #31CCEC; -$warning: #F2C037; diff --git a/frontend/src/env.d.ts b/frontend/src/env.d.ts deleted file mode 100644 index 11ff2d97ab..0000000000 --- a/frontend/src/env.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * env.d.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -declare namespace NodeJS { - interface ProcessEnv { - NODE_ENV: string; - VUE_ROUTER_MODE: 'hash' | 'history' | 'abstract' | undefined; - VUE_ROUTER_BASE: string | undefined; - } -} diff --git a/frontend/src/i18n/bg_BG/index.js b/frontend/src/i18n/bg_BG/index.js deleted file mode 100644 index 8c3f82ff49..0000000000 --- a/frontend/src/i18n/bg_BG/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "bg", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "\u0418\u043c\u0435", - "amount_min": "\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u043d\u0430 \u0441\u0443\u043c\u0430", - "amount_max": "\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0430 \u0441\u0443\u043c\u0430", - "url": "URL", - "title": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435", - "first_date": "\u041f\u044a\u0440\u0432\u0430 \u0434\u0430\u0442\u0430", - "repetitions": "\u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f", - "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", - "iban": "IBAN", - "skip": "\u041f\u0440\u043e\u043f\u0443\u0441\u043d\u0438", - "date": "\u0414\u0430\u0442\u0430" - }, - "list": { - "name": "\u0418\u043c\u0435", - "account_number": "Account number", - "currentBalance": "\u0422\u0435\u043a\u0443\u0449 \u0431\u0430\u043b\u0430\u043d\u0441", - "lastActivity": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442", - "active": "\u0410\u043a\u0442\u0438\u0432\u0435\u043d \u043b\u0438 \u0435?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442\u0438", - "subscriptions": "\u0410\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438", - "transactions": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "title_expenses": "\u0420\u0430\u0437\u0445\u043e\u0434\u0438", - "title_withdrawal": "\u0420\u0430\u0437\u0445\u043e\u0434\u0438", - "title_revenue": "\u041f\u0440\u0438\u0445\u043e\u0434\u0438", - "title_deposit": "\u041f\u0440\u0438\u0445\u043e\u0434\u0438", - "title_transfer": "\u041f\u0440\u0435\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0438\u044f", - "title_transfers": "\u041f\u0440\u0435\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0438\u044f", - "asset_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u0438", - "expense_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u0438", - "revenue_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438", - "liabilities_accounts": "\u0417\u0430\u0434\u044a\u043b\u0436\u0435\u043d\u0438\u044f" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f", - "edit": "\u041f\u0440\u043e\u043c\u0435\u043d\u0438", - "delete": "\u0418\u0437\u0442\u0440\u0438\u0439", - "reconcile": "\u0421\u044a\u0433\u043b\u0430\u0441\u0443\u0432\u0430\u0439", - "create_new_asset": "\u0421\u044a\u0437\u0434\u0430\u0439 \u043d\u043e\u0432\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u0438", - "confirm_action": "Confirm action", - "new_budget": "\u041d\u043e\u0432 \u0431\u044e\u0434\u0436\u0435\u0442", - "new_asset_account": "\u041d\u043e\u0432\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u0438", - "newTransfer": "\u041d\u043e\u0432\u043e \u043f\u0440\u0435\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0435", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "\u041d\u043e\u0432 \u0434\u0435\u043f\u043e\u0437\u0438\u0442", - "newWithdrawal": "\u041d\u043e\u0432 \u0440\u0430\u0437\u0445\u043e\u0434", - "bills_paid": "\u041f\u043b\u0430\u0442\u0435\u043d\u0438 \u0441\u043c\u0435\u0442\u043a\u0438", - "left_to_spend": "\u041e\u0441\u0442\u0430\u043d\u0430\u043b\u0438 \u0437\u0430 \u0445\u0430\u0440\u0447\u0435\u043d\u0435", - "no_budget": "(\u0431\u0435\u0437 \u0431\u044e\u0434\u0436\u0435\u0442)", - "budgeted": "\u0411\u044e\u0434\u0436\u0435\u0442\u0438\u0440\u0430\u043d\u0438", - "spent": "\u041f\u043e\u0445\u0430\u0440\u0447\u0435\u043d\u0438", - "no_bill": "(\u043d\u044f\u043c\u0430 \u0441\u043c\u0435\u0442\u043a\u0430)", - "rule_trigger_source_account_starts_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..", - "rule_trigger_source_account_ends_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..", - "rule_trigger_source_account_is_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435..", - "rule_trigger_source_account_contains_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "ID \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435 \u0442\u043e\u0447\u043d\u043e..", - "rule_trigger_destination_account_id_choice": "ID \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435 \u0442\u043e\u0447\u043d\u043e..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "\u0420\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435 \u0441\u043c\u0435\u0442\u043a\u0430 (\u0432 \u0431\u0440\u043e\u0439)", - "rule_trigger_destination_is_cash_choice": "\u041f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435 \u0441\u043c\u0435\u0442\u043a\u0430 (\u0432 \u0431\u0440\u043e\u0439)", - "rule_trigger_source_account_nr_starts_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..", - "rule_trigger_source_account_nr_ends_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..", - "rule_trigger_source_account_nr_is_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0435..", - "rule_trigger_source_account_nr_contains_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0441\u044a\u0434\u044a\u0440\u0436\u0430..", - "rule_trigger_destination_account_starts_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..", - "rule_trigger_destination_account_ends_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..", - "rule_trigger_destination_account_is_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0435..", - "rule_trigger_destination_account_contains_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430..", - "rule_trigger_destination_account_nr_starts_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..", - "rule_trigger_destination_account_nr_ends_choice": "\u0418\u043c\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..", - "rule_trigger_destination_account_nr_is_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0435..", - "rule_trigger_destination_account_nr_contains_choice": "\u041d\u043e\u043c\u0435\u0440\u044a\u0442 \u043d\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043c\u0435\u0442\u043a\u0430 \/ IBAN \u0441\u044a\u0434\u044a\u0440\u0436\u0430..", - "rule_trigger_transaction_type_choice": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435 \u043e\u0442 \u0442\u0438\u043f..", - "rule_trigger_category_is_choice": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u0442\u0430 \u0435..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u0442\u043e \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441..", - "rule_trigger_description_ends_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u0442\u043e \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430 \u0441..", - "rule_trigger_description_contains_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430..", - "rule_trigger_description_is_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u0442\u043e \u0435..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "\u0414\u0430\u0442\u0430\u0442\u0430 \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435 \u043f\u0440\u0435\u0434\u0438..", - "rule_trigger_date_after_choice": "\u0414\u0430\u0442\u0430\u0442\u0430 \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435 \u0441\u043b\u0435\u0434..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "\u0411\u044e\u0434\u0436\u0435\u0442\u044a\u0442 \u0435..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "\u0412\u0430\u043b\u0443\u0442\u0430\u0442\u0430 \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435..", - "rule_trigger_foreign_currency_is_choice": "\u0427\u0443\u0436\u0434\u0430\u0442\u0430 \u0432\u0430\u043b\u0443\u0442\u0430 \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435..", - "rule_trigger_has_attachments_choice": "\u0418\u043c\u0430 \u043f\u043e\u043d\u0435 \u0442\u043e\u043b\u043a\u043e\u0432\u0430 \u043f\u0440\u0438\u043a\u0430\u0447\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u0435", - "rule_trigger_has_no_category_choice": "\u041d\u044f\u043c\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", - "rule_trigger_has_any_category_choice": "\u0418\u043c\u0430 (\u043d\u044f\u043a\u0430\u043a\u0432\u0430) \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", - "rule_trigger_has_no_budget_choice": "\u041d\u044f\u043c\u0430 \u0431\u044e\u0434\u0436\u0435\u0442", - "rule_trigger_has_any_budget_choice": "\u0418\u043c\u0430 (\u043d\u044f\u043a\u0430\u043a\u044a\u0432) \u0431\u044e\u0434\u0436\u0435\u0442", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "\u041d\u044f\u043c\u0430 \u0435\u0442\u0438\u043a\u0435\u0442(\u0438)", - "rule_trigger_has_any_tag_choice": "\u0418\u043c\u0430 \u0435\u0434\u0438\u043d \u0438\u043b\u0438 \u043f\u043e\u0432\u0435\u0447\u0435 (\u043d\u044f\u043a\u0430\u043a\u0432\u0438) \u0435\u0442\u0438\u043a\u0435\u0442\u0438", - "rule_trigger_any_notes_choice": "\u0418\u043c\u0430 (\u043d\u044f\u043a\u0430\u043a\u0432\u0438) \u0431\u0435\u043b\u0435\u0436\u043a\u0438", - "rule_trigger_no_notes_choice": "\u041d\u044f\u043c\u0430 \u0431\u0435\u043b\u0435\u0436\u043a\u0438", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "\u0421\u043c\u0435\u0442\u043a\u0430\u0442\u0430 \u0435..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "ID \u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0435..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u0418\u0437\u0447\u0438\u0441\u0442\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u0418\u0437\u0447\u0438\u0441\u0442\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0438", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u0435\u0442\u0438\u043a\u0435\u0442\u0438", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "\u0418\u0437\u0447\u0438\u0441\u0442\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u0431\u0435\u043b\u0435\u0436\u043a\u0438", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0432\u0430\u0439\u0442\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0432 \u0434\u0435\u043f\u043e\u0437\u0438\u0442", - "rule_action_convert_withdrawal_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0432\u0430\u0439\u0442\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0432 \u0442\u0435\u0433\u043b\u0435\u043d\u0435", - "rule_action_convert_transfer_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0432\u0430\u0439\u0442\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0442\u0430 \u0432 \u0442\u0440\u0430\u043d\u0441\u0444\u0435\u0440", - "placeholder": "[Placeholder]", - "recurrences": "\u041f\u043e\u0432\u0442\u0430\u0440\u044f\u0449\u0438 \u0441\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "title_expenses": "\u0420\u0430\u0437\u0445\u043e\u0434\u0438", - "title_withdrawal": "\u0422\u0435\u0433\u043b\u0435\u043d\u0438\u044f", - "title_revenue": "\u041f\u0440\u0438\u0445\u043e\u0434\u0438", - "pref_1D": "\u0415\u0434\u0438\u043d \u0434\u0435\u043d", - "pref_1W": "\u0415\u0434\u043d\u0430 \u0441\u0435\u0434\u043c\u0438\u0446\u0430", - "pref_1M": "\u0415\u0434\u0438\u043d \u043c\u0435\u0441\u0435\u0446", - "pref_3M": "\u0422\u0440\u0438 \u043c\u0435\u0441\u0435\u0446\u0430 (\u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435)", - "pref_6M": "\u0428\u0435\u0441\u0442 \u043c\u0435\u0441\u0435\u0446\u0430", - "pref_1Y": "\u0415\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430", - "repeat_freq_yearly": "\u0435\u0436\u0435\u0433\u043e\u0434\u043d\u043e", - "repeat_freq_half-year": "\u043d\u0430 \u0432\u0441\u0435\u043a\u0438 6 \u043c\u0435\u0441\u0435\u0446\u0430", - "repeat_freq_quarterly": "\u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u043d\u043e", - "repeat_freq_monthly": "\u043c\u0435\u0441\u0435\u0447\u043d\u043e", - "repeat_freq_weekly": "\u0435\u0436\u0435\u0441\u0435\u0434\u043c\u0438\u0447\u043d\u043e", - "single_split": "\u0420\u0430\u0437\u0434\u0435\u043b", - "asset_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u0438", - "expense_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u0440\u0430\u0437\u0445\u043e\u0434\u0438", - "liabilities_accounts": "\u0417\u0430\u0434\u044a\u043b\u0436\u0435\u043d\u0438\u044f", - "undefined_accounts": "Accounts", - "name": "\u0418\u043c\u0435", - "revenue_accounts": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438", - "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", - "category": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", - "title_deposit": "\u0414\u0435\u043f\u043e\u0437\u0438\u0442\u0438", - "title_transfer": "\u041f\u0440\u0435\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0438\u044f", - "title_transfers": "\u041f\u0440\u0435\u0445\u0432\u044a\u0440\u043b\u044f\u043d\u0438\u044f", - "piggyBanks": "\u041a\u0430\u0441\u0438\u0447\u043a\u0438", - "rules": "\u041f\u0440\u0430\u0432\u0438\u043b\u0430", - "accounts": "\u0421\u043c\u0435\u0442\u043a\u0438", - "categories": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438", - "tags": "\u0415\u0442\u0438\u043a\u0435\u0442\u0438", - "object_groups_page_title": "\u0413\u0440\u0443\u043f\u0438", - "reports": "\u041e\u0442\u0447\u0435\u0442\u0438", - "webhooks": "Webhooks", - "currencies": "\u0412\u0430\u043b\u0443\u0442\u0438", - "administration": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435", - "profile": "\u041f\u0440\u043e\u0444\u0438\u043b", - "source_account": "\u0420\u0430\u0437\u0445\u043e\u0434\u043d\u0430 \u0441\u043c\u0435\u0442\u043a\u0430", - "destination_account": "\u041f\u0440\u0438\u0445\u043e\u0434\u043d\u0430 \u0441\u043c\u0435\u0442\u043a\u0430", - "amount": "\u0421\u0443\u043c\u0430", - "date": "\u0414\u0430\u0442\u0430", - "time": "\u0412\u0440\u0435\u043c\u0435", - "preferences": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438", - "transactions": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "balance": "\u0421\u0430\u043b\u0434\u043e", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442\u0438", - "subscriptions": "\u0410\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438", - "welcome_back": "\u041a\u0430\u043a\u0432\u043e \u0441\u0435 \u0441\u043b\u0443\u0447\u0432\u0430?", - "bills_to_pay": "\u0421\u043c\u0435\u0442\u043a\u0438 \u0437\u0430 \u043f\u043b\u0430\u0449\u0430\u043d\u0435", - "net_worth": "\u041d\u0435\u0442\u043d\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/ca_ES/index.js b/frontend/src/i18n/ca_ES/index.js deleted file mode 100644 index bc2e907979..0000000000 --- a/frontend/src/i18n/ca_ES/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "ca", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nom", - "amount_min": "Import m\u00ednim", - "amount_max": "Import m\u00e0xim", - "url": "URL", - "title": "T\u00edtol", - "first_date": "Primera data", - "repetitions": "Repeticions", - "description": "Descripci\u00f3", - "iban": "IBAN", - "skip": "Ometre", - "date": "Data" - }, - "list": { - "name": "Nom", - "account_number": "N\u00famero de compte", - "currentBalance": "Saldo actual", - "lastActivity": "Darrera activitat", - "active": "Est\u00e0 actiu?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Pressupostos", - "subscriptions": "Subscripcions", - "transactions": "Transaccions", - "title_expenses": "Despeses", - "title_withdrawal": "Despeses", - "title_revenue": "Ingressos \/ salari", - "title_deposit": "Ingressos \/ salari", - "title_transfer": "Transfer\u00e8ncies", - "title_transfers": "Transfer\u00e8ncies", - "asset_accounts": "Comptes d'actius", - "expense_accounts": "Comptes de despeses", - "revenue_accounts": "Comptes d'ingressos", - "liabilities_accounts": "Passius" - }, - "firefly": { - "administration_index": "Administraci\u00f3 financera", - "actions": "Accions", - "edit": "Editar", - "delete": "Eliminar", - "reconcile": "Consolidar", - "create_new_asset": "Crear un nou compte d'actius", - "confirm_action": "Confirmar acci\u00f3", - "new_budget": "Nou pressupost", - "new_asset_account": "Nou compte d'actiu", - "newTransfer": "Nova transfer\u00e8ncia", - "submission_options": "Opcions de tramesa", - "apply_rules_checkbox": "Aplicar regles", - "fire_webhooks_checkbox": "Disparar webhooks", - "newDeposit": "Nou dip\u00f2sit", - "newWithdrawal": "Nova despesa", - "bills_paid": "Factures pagades", - "left_to_spend": "Queda per gastar", - "no_budget": "(cap pressupost)", - "budgeted": "Pressupostat", - "spent": "Gastat", - "no_bill": "(cap factura)", - "rule_trigger_source_account_starts_choice": "El nom del compte d'origen comen\u00e7a per..", - "rule_trigger_source_account_ends_choice": "El nom del compte d'origen acaba amb..", - "rule_trigger_source_account_is_choice": "El nom del compte d'origen \u00e9s..", - "rule_trigger_source_account_contains_choice": "El nom del compte d'origen cont\u00e9..", - "rule_trigger_account_id_choice": "L'ID d'un dels comptes \u00e9s exactament..", - "rule_trigger_source_account_id_choice": "L'ID del compte d'origen \u00e9s exactament..", - "rule_trigger_destination_account_id_choice": "L'ID del compte de dest\u00ed \u00e9s exactament..", - "rule_trigger_account_is_cash_choice": "Un dels comptes \u00e9s d'efectiu", - "rule_trigger_source_is_cash_choice": "El compte d'origen \u00e9s el compte (efectiu)", - "rule_trigger_destination_is_cash_choice": "El compte de dest\u00ed \u00e9s el compte (efectiu)", - "rule_trigger_source_account_nr_starts_choice": "El n\u00famero \/ IBAN del compte d'origen comen\u00e7a per..", - "rule_trigger_source_account_nr_ends_choice": "El n\u00famero \/ IBAN del compte d'origen acaba amb..", - "rule_trigger_source_account_nr_is_choice": "El n\u00famero \/ IBAN del compte d'origen \u00e9s..", - "rule_trigger_source_account_nr_contains_choice": "El n\u00famero \/ IBAN del compte d'origen cont\u00e9..", - "rule_trigger_destination_account_starts_choice": "El nom del compte de dest\u00ed comen\u00e7a per..", - "rule_trigger_destination_account_ends_choice": "El nom del compte de dest\u00ed acaba amb..", - "rule_trigger_destination_account_is_choice": "El nom del compte de dest\u00ed \u00e9s..", - "rule_trigger_destination_account_contains_choice": "El nom del compte de dest\u00ed cont\u00e9..", - "rule_trigger_destination_account_nr_starts_choice": "El n\u00famero \/ IBAN del compte de dest\u00ed comen\u00e7a per..", - "rule_trigger_destination_account_nr_ends_choice": "El n\u00famero \/ IBAN del compte de dest\u00ed acaba amb..", - "rule_trigger_destination_account_nr_is_choice": "El n\u00famero \/ IBAN del compte de dest\u00ed \u00e9s..", - "rule_trigger_destination_account_nr_contains_choice": "El n\u00famero \/ IBAN del compte de dest\u00ed cont\u00e9..", - "rule_trigger_transaction_type_choice": "La transacci\u00f3 \u00e9s del tipus..", - "rule_trigger_category_is_choice": "La categoria \u00e9s..", - "rule_trigger_amount_less_choice": "La quantitat \u00e9s menor o igual a ..", - "rule_trigger_amount_is_choice": "La quantitat \u00e9s..", - "rule_trigger_amount_more_choice": "La quantitat \u00e9s major o igual a..", - "rule_trigger_description_starts_choice": "La descripci\u00f3 comen\u00e7a per..", - "rule_trigger_description_ends_choice": "La descripci\u00f3 acaba amb..", - "rule_trigger_description_contains_choice": "La descripci\u00f3 cont\u00e9..", - "rule_trigger_description_is_choice": "La descripci\u00f3 \u00e9s..", - "rule_trigger_date_on_choice": "La data de la transacci\u00f3 \u00e9s..", - "rule_trigger_date_before_choice": "La data de la transacci\u00f3 \u00e9s anterior a..", - "rule_trigger_date_after_choice": "La data de la transacci\u00f3 \u00e9s posterior a..", - "rule_trigger_created_at_on_choice": "La transacci\u00f3 es va fer el..", - "rule_trigger_updated_at_on_choice": "La transacci\u00f3 es va editar per \u00faltim cop el..", - "rule_trigger_budget_is_choice": "El pressupost \u00e9s..", - "rule_trigger_tag_is_choice": "Qualsevol etiqueta \u00e9s..", - "rule_trigger_currency_is_choice": "La moneda de la transacci\u00f3 \u00e9s..", - "rule_trigger_foreign_currency_is_choice": "La moneda estrangera de la transacci\u00f3 \u00e9s..", - "rule_trigger_has_attachments_choice": "Com a m\u00ednim t\u00e9 aquest nombre d'adjunts", - "rule_trigger_has_no_category_choice": "No t\u00e9 categoria", - "rule_trigger_has_any_category_choice": "T\u00e9 categoria (qualsevol)", - "rule_trigger_has_no_budget_choice": "No t\u00e9 pressupost", - "rule_trigger_has_any_budget_choice": "T\u00e9 un pressupost (qualsevol)", - "rule_trigger_has_no_bill_choice": "No t\u00e9 factura", - "rule_trigger_has_any_bill_choice": "T\u00e9 una factura (qualsevol)", - "rule_trigger_has_no_tag_choice": "No t\u00e9 etiqueta(es)", - "rule_trigger_has_any_tag_choice": "T\u00e9 una o m\u00e9s etiquetes (qualsevol)", - "rule_trigger_any_notes_choice": "T\u00e9 notes (qualsevol)", - "rule_trigger_no_notes_choice": "No t\u00e9 notes", - "rule_trigger_notes_is_choice": "Les notes s\u00f3n..", - "rule_trigger_notes_contains_choice": "Les notes contenen..", - "rule_trigger_notes_starts_choice": "Les notes comencen per..", - "rule_trigger_notes_ends_choice": "Les notes acaben amb..", - "rule_trigger_bill_is_choice": "La factura \u00e9s..", - "rule_trigger_external_id_is_choice": "L'ID externa \u00e9s..", - "rule_trigger_internal_reference_is_choice": "La refer\u00e8ncia interna \u00e9s..", - "rule_trigger_journal_id_choice": "L'ID del llibre de transaccions \u00e9s..", - "rule_trigger_any_external_url_choice": "La transaci\u00f3 t\u00e9 (cap) URL externa", - "rule_trigger_no_external_url_choice": "La transacci\u00f3 no t\u00e9 URL extern", - "rule_trigger_id_choice": "L'ID de la transacci\u00f3 \u00e9s..", - "rule_action_delete_transaction_choice": "ELIMINAR transacci\u00f3(!)", - "rule_action_set_category_choice": "Establir categoria a ..", - "rule_action_clear_category_choice": "Esborrar qualsevol categoria", - "rule_action_set_budget_choice": "Establir pressupost a ..", - "rule_action_clear_budget_choice": "Esborrar qualsevol pressupost", - "rule_action_add_tag_choice": "Afegir etiqueta ..", - "rule_action_remove_tag_choice": "Eliminar etiqueta ..", - "rule_action_remove_all_tags_choice": "Eliminar totes les etiquetes", - "rule_action_set_description_choice": "Estableix la descripci\u00f3 a ..", - "rule_action_update_piggy_choice": "Afegir\/eliminar la quantitat de la transacci\u00f3 a\/de la guardiola ..", - "rule_action_append_description_choice": "Afegir a la descripci\u00f3 ..", - "rule_action_prepend_description_choice": "Preposar a la descripci\u00f3 ..", - "rule_action_set_source_account_choice": "Establir el compte d'origen a ..", - "rule_action_set_destination_account_choice": "Establir el compte de dest\u00ed a ..", - "rule_action_append_notes_choice": "Afegir a les notes ..", - "rule_action_prepend_notes_choice": "Preposar a les notes ..", - "rule_action_clear_notes_choice": "Eliminar qualsevol nota", - "rule_action_set_notes_choice": "Establir les notes a ..", - "rule_action_link_to_bill_choice": "Enlla\u00e7ar a una factura ..", - "rule_action_convert_deposit_choice": "Convertir la transacci\u00f3 a un dip\u00f2sit", - "rule_action_convert_withdrawal_choice": "Convertir la transacci\u00f3 en una retirada", - "rule_action_convert_transfer_choice": "Convertir la transacci\u00f3 en una transfer\u00e8ncia", - "placeholder": "[Placeholder]", - "recurrences": "Transaccions recurrents", - "title_expenses": "Despeses", - "title_withdrawal": "Despeses", - "title_revenue": "Ingressos \/ salari", - "pref_1D": "Un dia", - "pref_1W": "Una setmana", - "pref_1M": "Un mes", - "pref_3M": "Tres mesos (trimestre)", - "pref_6M": "Sis mesos", - "pref_1Y": "Un any", - "repeat_freq_yearly": "anualment", - "repeat_freq_half-year": "cada mig any", - "repeat_freq_quarterly": "trimestralment", - "repeat_freq_monthly": "mensualment", - "repeat_freq_weekly": "setmanalment", - "single_split": "Divisi\u00f3", - "asset_accounts": "Comptes d'actius", - "expense_accounts": "Comptes de despeses", - "liabilities_accounts": "Passius", - "undefined_accounts": "Comptes", - "name": "Nom", - "revenue_accounts": "Comptes d'ingressos", - "description": "Descripci\u00f3", - "category": "Categoria", - "title_deposit": "Ingressos \/ salari", - "title_transfer": "Transfer\u00e8ncies", - "title_transfers": "Transfer\u00e8ncies", - "piggyBanks": "Guardioles", - "rules": "Regles", - "accounts": "Comptes", - "categories": "Categories", - "tags": "Etiquetes", - "object_groups_page_title": "Grups", - "reports": "Informes", - "webhooks": "Webhooks", - "currencies": "Monedes", - "administration": "Administraci\u00f3", - "profile": "Perfil", - "source_account": "Compte d'origen", - "destination_account": "Compte de dest\u00ed", - "amount": "Import", - "date": "Data", - "time": "Hora", - "preferences": "Configuraci\u00f3", - "transactions": "Transaccions", - "balance": "Saldo", - "budgets": "Pressupostos", - "subscriptions": "Subscripcions", - "welcome_back": "Qu\u00e8 est\u00e0 passant?", - "bills_to_pay": "Factures a pagar", - "net_worth": "Valor net", - "pref_last365": "L'any passat", - "pref_last90": "\u00daltims 90 dies", - "pref_last30": "\u00daltims 30 dies", - "pref_last7": "\u00daltims 7 dies", - "pref_YTD": "Any en curs", - "pref_QTD": "Trimestre en curs", - "pref_MTD": "Mes en curs" - } -} diff --git a/frontend/src/i18n/cs_CZ/index.js b/frontend/src/i18n/cs_CZ/index.js deleted file mode 100644 index b917a4f6cd..0000000000 --- a/frontend/src/i18n/cs_CZ/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "cs", - "month_and_day_fns": "d MMMM, y" - }, - "form": { - "name": "N\u00e1zev", - "amount_min": "Minim\u00e1ln\u00ed \u010d\u00e1stka", - "amount_max": "Maxim\u00e1ln\u00ed \u010d\u00e1stka", - "url": "URL", - "title": "N\u00e1zev", - "first_date": "Prvn\u00ed datum", - "repetitions": "Opakov\u00e1n\u00ed", - "description": "Popis", - "iban": "IBAN", - "skip": "P\u0159esko\u010dit", - "date": "Datum" - }, - "list": { - "name": "Jm\u00e9no", - "account_number": "Account number", - "currentBalance": "Aktu\u00e1ln\u00ed z\u016fstatek", - "lastActivity": "Posledn\u00ed aktivita", - "active": "Aktivn\u00ed?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Akce", - "edit": "Upravit", - "delete": "Odstranit", - "reconcile": "Reconcile", - "create_new_asset": "Vytvo\u0159it nov\u00fd \u00fa\u010det aktiv", - "confirm_action": "Confirm action", - "new_budget": "Nov\u00fd rozpo\u010det", - "new_asset_account": "Nov\u00fd \u00fa\u010det s aktivy", - "newTransfer": "Nov\u00fd p\u0159evod", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Nov\u00fd vklad", - "newWithdrawal": "Nov\u00fd v\u00fddaj", - "bills_paid": "Zaplacen\u00e9 \u00fa\u010dty", - "left_to_spend": "Zb\u00fdv\u00e1 k utracen\u00ed", - "no_budget": "(\u017e\u00e1dn\u00fd rozpo\u010det)", - "budgeted": "Rozpo\u010det", - "spent": "Utraceno", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "Source account name contains..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "Source account number \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Source account number \/ IBAN contains..", - "rule_trigger_destination_account_starts_choice": "Destination account name starts with..", - "rule_trigger_destination_account_ends_choice": "Destination account name ends with..", - "rule_trigger_destination_account_is_choice": "Destination account name is..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "Transakce je typu\u2026", - "rule_trigger_category_is_choice": "Kategorie je\u2026", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Popis za\u010d\u00edn\u00e1 na\u2026", - "rule_trigger_description_ends_choice": "Popis kon\u010d\u00ed na\u2026", - "rule_trigger_description_contains_choice": "Popis obsahuje\u2026", - "rule_trigger_description_is_choice": "Popis je\u2026", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Datum transakce je p\u0159ed..", - "rule_trigger_date_after_choice": "Datum transakce je po..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Rozpo\u010det je\u2026", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "M\u011bna transakce je\u2026", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "M\u00e1 alespo\u0148 tolik p\u0159\u00edloh", - "rule_trigger_has_no_category_choice": "Nem\u00e1 \u017e\u00e1dnou kategorii", - "rule_trigger_has_any_category_choice": "M\u00e1 (libovolnou) kategorii", - "rule_trigger_has_no_budget_choice": "Nem\u00e1 \u017e\u00e1dn\u00fd rozpo\u010det", - "rule_trigger_has_any_budget_choice": "M\u00e1 (libovoln\u00fd) rozpo\u010det", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Nem\u00e1 \u017e\u00e1dn\u00e9 \u0161t\u00edtky", - "rule_trigger_has_any_tag_choice": "M\u00e1 jeden a v\u00edce \u0161t\u00edtk\u016f", - "rule_trigger_any_notes_choice": "M\u00e1 (jak\u00e9koli) pozn\u00e1mky", - "rule_trigger_no_notes_choice": "Nem\u00e1 \u017e\u00e1dn\u00e9 pozn\u00e1mky", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill is..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Vy\u010distit jak\u00e9koli kategorie", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Vy\u010distit jak\u00fdkoli rozpo\u010det", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Odebrat ve\u0161ker\u00e9 \u0161t\u00edtky", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Odstranit v\u0161echny pozn\u00e1mky", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "P\u0159em\u011bnit tuto transakci na vklad", - "rule_action_convert_withdrawal_choice": "P\u0159em\u011bnit transakci na v\u00fdb\u011br", - "rule_action_convert_transfer_choice": "P\u0159em\u011bnit tuto transakci na p\u0159evod", - "placeholder": "[Placeholder]", - "recurrences": "Opakovan\u00e9 transakce", - "title_expenses": "V\u00fddaje", - "title_withdrawal": "V\u00fddaje", - "title_revenue": "Odm\u011bna\/p\u0159\u00edjem", - "pref_1D": "Jeden den", - "pref_1W": "Jeden t\u00fdden", - "pref_1M": "Jeden m\u011bs\u00edc", - "pref_3M": "T\u0159i m\u011bs\u00edce (\u010dtvrtlet\u00ed)", - "pref_6M": "\u0160est m\u011bs\u00edc\u016f", - "pref_1Y": "Jeden rok", - "repeat_freq_yearly": "ro\u010dn\u011b", - "repeat_freq_half-year": "p\u016floro\u010dn\u011b", - "repeat_freq_quarterly": "\u010dtvrtletn\u011b", - "repeat_freq_monthly": "m\u011bs\u00ed\u010dn\u011b", - "repeat_freq_weekly": "t\u00fddn\u011b", - "single_split": "Rozd\u011blit", - "asset_accounts": "\u00da\u010dty aktiv", - "expense_accounts": "V\u00fddajov\u00e9 \u00fa\u010dty", - "liabilities_accounts": "Z\u00e1vazky", - "undefined_accounts": "Accounts", - "name": "N\u00e1zev", - "revenue_accounts": "P\u0159\u00edjmov\u00e9 \u00fa\u010dty", - "description": "Popis", - "category": "Kategorie", - "title_deposit": "Odm\u011bna\/p\u0159\u00edjem", - "title_transfer": "P\u0159evody", - "title_transfers": "P\u0159evody", - "piggyBanks": "Pokladni\u010dky", - "rules": "Pravidla", - "accounts": "\u00da\u010dty", - "categories": "Kategorie", - "tags": "\u0160t\u00edtky", - "object_groups_page_title": "Skupiny", - "reports": "P\u0159ehledy", - "webhooks": "Webhooky", - "currencies": "M\u011bny", - "administration": "Spr\u00e1va", - "profile": "Profil", - "source_account": "Zdrojov\u00fd \u00fa\u010det", - "destination_account": "C\u00edlov\u00fd \u00fa\u010det", - "amount": "\u010c\u00e1stka", - "date": "Datum", - "time": "\u010cas", - "preferences": "P\u0159edvolby", - "transactions": "Transakce", - "balance": "Z\u016fstatek", - "budgets": "Rozpo\u010dty", - "subscriptions": "Subscriptions", - "welcome_back": "Jak to jde?", - "bills_to_pay": "Faktury k zaplacen\u00ed", - "net_worth": "\u010cist\u00e9 jm\u011bn\u00ed", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/da_DK/index.js b/frontend/src/i18n/da_DK/index.js deleted file mode 100644 index 53426d28c6..0000000000 --- a/frontend/src/i18n/da_DK/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "da", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Navn", - "amount_min": "Minimumsbel\u00f8b", - "amount_max": "Maksimumbel\u00f8b", - "url": "URL", - "title": "Titel", - "first_date": "F\u00f8rste dato", - "repetitions": "Gentagelser", - "description": "Beskrivelse", - "iban": "IBAN", - "skip": "Spring over", - "date": "Dato" - }, - "list": { - "name": "Navn", - "account_number": "Konto nummer", - "currentBalance": "Nuv\u00e6rende saldo", - "lastActivity": "Seneste aktivitet", - "active": "Aktiv?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budget", - "subscriptions": "Abonnementer", - "transactions": "Transaktioner", - "title_expenses": "Udgifter", - "title_withdrawal": "Udgifter", - "title_revenue": "Indt\u00e6gter \/ indkomster", - "title_deposit": "Indt\u00e6gter \/ indkomster", - "title_transfer": "Overf\u00f8rsler", - "title_transfers": "Overf\u00f8rsler", - "asset_accounts": "Aktivkonti", - "expense_accounts": "Udgiftskonti", - "revenue_accounts": "Indt\u00e6gtskonti", - "liabilities_accounts": "G\u00e6ld" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Handlinger", - "edit": "Rediger", - "delete": "Slet", - "reconcile": "Afstem", - "create_new_asset": "Opret ny aktivkonto", - "confirm_action": "Bekr\u00e6ft", - "new_budget": "Nyt budget", - "new_asset_account": "Ny aktivkonto", - "newTransfer": "New transfer", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "New deposit", - "newWithdrawal": "New expense", - "bills_paid": "Betalte regninger", - "left_to_spend": "Left to spend", - "no_budget": "(no budget)", - "budgeted": "Budgetteret", - "spent": "Spent", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Kildekontonavn starter med..", - "rule_trigger_source_account_ends_choice": "Kildekontonavnet slutter med..", - "rule_trigger_source_account_is_choice": "Kildekontonavn er..", - "rule_trigger_source_account_contains_choice": "Kildekontonavnet indeholder..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Kildekonto ID er pr\u00e6cis..", - "rule_trigger_destination_account_id_choice": "Destinationskonto ID er pr\u00e6cis..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Kildekonto er (kontant) konto", - "rule_trigger_destination_is_cash_choice": "Destinationskonto er (kontant) konto", - "rule_trigger_source_account_nr_starts_choice": "Kildekontonummer \/ IBAN starter med..", - "rule_trigger_source_account_nr_ends_choice": "Kildekontonummer \/ IBAN slutter med..", - "rule_trigger_source_account_nr_is_choice": "Kildekontonummer \/ IBAN er..", - "rule_trigger_source_account_nr_contains_choice": "Kildekontonummer \/ IBAN indeholder..", - "rule_trigger_destination_account_starts_choice": "Destinationskontonavnet starter med..", - "rule_trigger_destination_account_ends_choice": "Destinationskontonavnet slutter med..", - "rule_trigger_destination_account_is_choice": "Destinationskontonavnet er..", - "rule_trigger_destination_account_contains_choice": "Destinationskontonavnet indeholder..", - "rule_trigger_destination_account_nr_starts_choice": "Destinationskontonummer \/ IBAN starter med..", - "rule_trigger_destination_account_nr_ends_choice": "Destinationskontonummer \/ IBAN slutter med..", - "rule_trigger_destination_account_nr_is_choice": "Destinationskontonummer \/ IBAN er..", - "rule_trigger_destination_account_nr_contains_choice": "Destinationskontonummer \/ IBAN indeholder..", - "rule_trigger_transaction_type_choice": "Transaktionen er af type..", - "rule_trigger_category_is_choice": "Kategorien er..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Beskrivelsen starter med..", - "rule_trigger_description_ends_choice": "Beskrivelsen slutter med..", - "rule_trigger_description_contains_choice": "Beskrivelsen indeholder..", - "rule_trigger_description_is_choice": "Beskrivelsen er..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaktionsdato er f\u00f8r..", - "rule_trigger_date_after_choice": "Transaktionsdatoen er efter..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Budgettet er..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Transaktionsvalutaen er..", - "rule_trigger_foreign_currency_is_choice": "Udenlandsk transaktionsvaluta er..", - "rule_trigger_has_attachments_choice": "Har mindst s\u00e5 mange vedh\u00e6ftede filer", - "rule_trigger_has_no_category_choice": "Har ingen kategori", - "rule_trigger_has_any_category_choice": "Har en (vilk\u00e5rlig) kategori", - "rule_trigger_has_no_budget_choice": "Har intet budget", - "rule_trigger_has_any_budget_choice": "Har et (noget) budget", - "rule_trigger_has_no_bill_choice": "Har ingen regning", - "rule_trigger_has_any_bill_choice": "Har en (valgfri) regning", - "rule_trigger_has_no_tag_choice": "Har ingen tag(s)", - "rule_trigger_has_any_tag_choice": "Har en eller flere (nogen) tags", - "rule_trigger_any_notes_choice": "Har (nogen) noter", - "rule_trigger_no_notes_choice": "Har ingen noter", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Regningen er..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaktionsjournal ID er..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Ryd alle kategorier", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Ryd ethvert budget", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Fjern alle tags", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Fjern alle noter", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Konverter transaktionen til et indskud", - "rule_action_convert_withdrawal_choice": "Konverter transaktionen til en udbetaling", - "rule_action_convert_transfer_choice": "Konverter transaktionen til en overf\u00f8rsel", - "placeholder": "[Placeholder]", - "recurrences": "Recurring transactions", - "title_expenses": "Udgifter", - "title_withdrawal": "Udgifter", - "title_revenue": "Indt\u00e6gter \/ indkomst", - "pref_1D": "En dag", - "pref_1W": "En uge", - "pref_1M": "En m\u00e5ned", - "pref_3M": "Tre m\u00e5neder (kvartal)", - "pref_6M": "Seks m\u00e5neder", - "pref_1Y": "Et \u00e5r", - "repeat_freq_yearly": "\u00e5rligt", - "repeat_freq_half-year": "hvert halve \u00e5r", - "repeat_freq_quarterly": "kvartalsvis", - "repeat_freq_monthly": "m\u00e5nedligt", - "repeat_freq_weekly": "ugentligt", - "single_split": "Opdel", - "asset_accounts": "Aktivkonti", - "expense_accounts": "Udgiftskonti", - "liabilities_accounts": "G\u00e6ld", - "undefined_accounts": "Accounts", - "name": "Name", - "revenue_accounts": "Indt\u00e6gtskonti", - "description": "Description", - "category": "Kategori", - "title_deposit": "Indt\u00e6gter \/ indkomster", - "title_transfer": "Overf\u00f8rsler", - "title_transfers": "Overf\u00f8rsler", - "piggyBanks": "Spareb\u00f8sser", - "rules": "Regler", - "accounts": "Konti", - "categories": "Kategorier", - "tags": "Etiketter", - "object_groups_page_title": "Groups", - "reports": "Rapporter", - "webhooks": "Webhooks", - "currencies": "Currencies", - "administration": "Administration", - "profile": "Profile", - "source_account": "Kildekonto", - "destination_account": "Destinationskonto", - "amount": "Bel\u00f8b", - "date": "Date", - "time": "Time", - "preferences": "Preferences", - "transactions": "Transaktioner", - "balance": "Saldo", - "budgets": "Budgetter", - "subscriptions": "Abonnementer", - "welcome_back": "Hvad spiller?", - "bills_to_pay": "Regninger til betaling", - "net_worth": "Nettoformue", - "pref_last365": "Sidste \u00e5r", - "pref_last90": "Sidste 90 dage", - "pref_last30": "Sidste 30 dage", - "pref_last7": "Sidste 7 dage", - "pref_YTD": "\u00c5r til dato", - "pref_QTD": "Kvartal til dato", - "pref_MTD": "M\u00e5ned til dato" - } -} diff --git a/frontend/src/i18n/de_DE/index.js b/frontend/src/i18n/de_DE/index.js deleted file mode 100644 index a56d22aa18..0000000000 --- a/frontend/src/i18n/de_DE/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "de", - "month_and_day_fns": "d. MMMM Y" - }, - "form": { - "name": "Name", - "amount_min": "Mindestbetrag", - "amount_max": "H\u00f6chstbetrag", - "url": "URL", - "title": "Titel", - "first_date": "Erstes Datum", - "repetitions": "Wiederholungen", - "description": "Beschreibung", - "iban": "IBAN", - "skip": "\u00dcberspringen", - "date": "Datum" - }, - "list": { - "name": "Name", - "account_number": "Kontonummer", - "currentBalance": "Aktueller Kontostand", - "lastActivity": "Letzte Aktivit\u00e4t", - "active": "Aktiv?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Kostenrahmen", - "subscriptions": "Abonnements", - "transactions": "Buchungen", - "title_expenses": "Ausgaben", - "title_withdrawal": "Ausgaben", - "title_revenue": "Einnahmen \/ Einkommen", - "title_deposit": "Einnahmen \/ Einkommen", - "title_transfer": "Umbuchungen", - "title_transfers": "Umbuchungen", - "asset_accounts": "Bestandskonten", - "expense_accounts": "Ausgabekonten", - "revenue_accounts": "Einnahmenkonten", - "liabilities_accounts": "Verbindlichkeiten" - }, - "firefly": { - "administration_index": "Finanzverwaltung", - "actions": "Aktionen", - "edit": "Bearbeiten", - "delete": "L\u00f6schen", - "reconcile": "Abgleichen", - "create_new_asset": "Neues Bestandskonto erstellen", - "confirm_action": "Aktion best\u00e4tigen", - "new_budget": "Neues Budget", - "new_asset_account": "Neues Bestandskonto", - "newTransfer": "Neue Umbuchung", - "submission_options": "\u00dcbermittlungsoptionen", - "apply_rules_checkbox": "Regeln anwenden", - "fire_webhooks_checkbox": "Webhooks abfeuern", - "newDeposit": "Neue Einnahme", - "newWithdrawal": "Neue Ausgabe", - "bills_paid": "Rechnungen bezahlt", - "left_to_spend": "Verbleibend zum Ausgeben", - "no_budget": "(kein Budget)", - "budgeted": "Vorgesehen", - "spent": "Ausgegeben", - "no_bill": "(keine Belege)", - "rule_trigger_source_account_starts_choice": "Quellkonto-Name beginnt mit..", - "rule_trigger_source_account_ends_choice": "Quellkonto-Name endet mit..", - "rule_trigger_source_account_is_choice": "Quellkonto-Name lautet..", - "rule_trigger_source_account_contains_choice": "Quellkonto-Name enh\u00e4lt..", - "rule_trigger_account_id_choice": "Beide Konto IDs sind exakt..", - "rule_trigger_source_account_id_choice": "Quellkonto-ID ist genau..", - "rule_trigger_destination_account_id_choice": "Zielkonto-ID ist genau..", - "rule_trigger_account_is_cash_choice": "Beide Konten sind Bargeld", - "rule_trigger_source_is_cash_choice": "Quellkonto ist (bar)", - "rule_trigger_destination_is_cash_choice": "Zielkonto ist (bar)", - "rule_trigger_source_account_nr_starts_choice": "Quellkontonummer\/IBAN beginnt mit..", - "rule_trigger_source_account_nr_ends_choice": "Quellkontonummer\/IBAN endet auf..", - "rule_trigger_source_account_nr_is_choice": "Quellkontonummer\/IBAN ist..", - "rule_trigger_source_account_nr_contains_choice": "Quellkontonummer\/IBAN enth\u00e4lt..", - "rule_trigger_destination_account_starts_choice": "Zielkonto-Name beginnt mit..", - "rule_trigger_destination_account_ends_choice": "Zielkonto-Name endet auf..", - "rule_trigger_destination_account_is_choice": "Zielkonto-Name ist..", - "rule_trigger_destination_account_contains_choice": "Zielkonto-Name enth\u00e4lt..", - "rule_trigger_destination_account_nr_starts_choice": "Zielkontonummer\/IBAN beginnt mit..", - "rule_trigger_destination_account_nr_ends_choice": "Zielkontonummer\/IBAN endet auf..", - "rule_trigger_destination_account_nr_is_choice": "Zielkontonummer \/ IBAN ist..", - "rule_trigger_destination_account_nr_contains_choice": "Zielkontonummer \/ IBAN enth\u00e4lt..", - "rule_trigger_transaction_type_choice": "Buchung ist vom Typ..", - "rule_trigger_category_is_choice": "Kategorie ist..", - "rule_trigger_amount_less_choice": "Betrag ist kleiner oder gleich \u2026", - "rule_trigger_amount_is_choice": "Betrag ist..", - "rule_trigger_amount_more_choice": "Betrag ist gr\u00f6\u00dfer oder gleich \u2026", - "rule_trigger_description_starts_choice": "Beschreibung beginnt mit..", - "rule_trigger_description_ends_choice": "Beschreibung endet mit..", - "rule_trigger_description_contains_choice": "Beschreibung enth\u00e4lt..", - "rule_trigger_description_is_choice": "Beschreibung ist..", - "rule_trigger_date_on_choice": "Buchungsdatum lautet..", - "rule_trigger_date_before_choice": "Buchungsdatum ist vor..", - "rule_trigger_date_after_choice": "Buchungsdatum ist nach..", - "rule_trigger_created_at_on_choice": "Transaktion wurde gemacht am..", - "rule_trigger_updated_at_on_choice": "Transaktion wurde zuletzt bearbeitet am..", - "rule_trigger_budget_is_choice": "Budget ist..", - "rule_trigger_tag_is_choice": "Irgendein Schlagwort lautet..", - "rule_trigger_currency_is_choice": "Buchungsw\u00e4hrung ist..", - "rule_trigger_foreign_currency_is_choice": "Fremdw\u00e4hrung der Buchung ist..", - "rule_trigger_has_attachments_choice": "Hat mindestens so viele Anh\u00e4nge", - "rule_trigger_has_no_category_choice": "Ohne Kategorie", - "rule_trigger_has_any_category_choice": "Hat eine (beliebige) Kategorie", - "rule_trigger_has_no_budget_choice": "Enth\u00e4lt kein Budget", - "rule_trigger_has_any_budget_choice": "Enth\u00e4lt ein (beliebiges) Budget", - "rule_trigger_has_no_bill_choice": "Keine Rechnung zugeordnet", - "rule_trigger_has_any_bill_choice": "Hat eine (beliebige) Rechnung", - "rule_trigger_has_no_tag_choice": "Enth\u00e4lt keine Schlagw\u00f6rter", - "rule_trigger_has_any_tag_choice": "Enth\u00e4lt einen oder mehrere (beliebige) Schlagw\u00f6rter", - "rule_trigger_any_notes_choice": "Hat (beliebige) Notizen", - "rule_trigger_no_notes_choice": "Hat keine Notizen", - "rule_trigger_notes_is_choice": "Notizen lauten..", - "rule_trigger_notes_contains_choice": "Notizen beinhalten..", - "rule_trigger_notes_starts_choice": "Notizen beginnen mit..", - "rule_trigger_notes_ends_choice": "Notizen enden mit..", - "rule_trigger_bill_is_choice": "Rechnung ist..", - "rule_trigger_external_id_is_choice": "Externe ID ist..", - "rule_trigger_internal_reference_is_choice": "Interne Referenz ist..", - "rule_trigger_journal_id_choice": "Transaktions-Journal-ID ist..", - "rule_trigger_any_external_url_choice": "Buchung enth\u00e4lt eine (beliebige) externe URL", - "rule_trigger_no_external_url_choice": "Buchung hat keine externe URL", - "rule_trigger_id_choice": "Buchungskennung lautet..", - "rule_action_delete_transaction_choice": "Buchung L\u00d6SCHEN(!)", - "rule_action_set_category_choice": "Kategorie zuweisen\u00a0...", - "rule_action_clear_category_choice": "Bereinige jede Kategorie", - "rule_action_set_budget_choice": "Setze Budget auf ..", - "rule_action_clear_budget_choice": "Alle Budgets leeren", - "rule_action_add_tag_choice": "Schlagwort hinzuf\u00fcgen ..", - "rule_action_remove_tag_choice": "Schlagwort entfernen ..", - "rule_action_remove_all_tags_choice": "Alle Schlagw\u00f6rter entfernen", - "rule_action_set_description_choice": "Beschreibung festlegen auf ..", - "rule_action_update_piggy_choice": "Hinzuf\u00fcgen \/ Entfernen des Transaktionsbetrags zu \/ aus Sparschwein ..", - "rule_action_append_description_choice": "Beschreibung anh\u00e4ngen mit ..", - "rule_action_prepend_description_choice": "Beschreibung voranstellen mit ..", - "rule_action_set_source_account_choice": "Quellkonto festlegen auf ..", - "rule_action_set_destination_account_choice": "Zielkonto festlegen auf ..", - "rule_action_append_notes_choice": "Notizen anh\u00e4ngen mit ..", - "rule_action_prepend_notes_choice": "Notizen voranstellen mit ..", - "rule_action_clear_notes_choice": "Alle Notizen entfernen", - "rule_action_set_notes_choice": "Setze Notizen auf ..", - "rule_action_link_to_bill_choice": "Mit einer Rechnung verkn\u00fcpfen..", - "rule_action_convert_deposit_choice": "Buchung in eine Einnahme umwandeln", - "rule_action_convert_withdrawal_choice": "Buchung in eine Ausgabe umwandeln", - "rule_action_convert_transfer_choice": "Buchung in eine Umbuchung umwandeln", - "placeholder": "[Placeholder]", - "recurrences": "Dauerauftr\u00e4ge", - "title_expenses": "Ausgaben", - "title_withdrawal": "Ausgaben", - "title_revenue": "Einnahmen \/ Einkommen", - "pref_1D": "Ein Tag", - "pref_1W": "Eine Woche", - "pref_1M": "Ein Monat", - "pref_3M": "Drei Monate (Quartal)", - "pref_6M": "Sechs Monate", - "pref_1Y": "Ein Jahr", - "repeat_freq_yearly": "J\u00e4hrlich", - "repeat_freq_half-year": "halbj\u00e4hrlich", - "repeat_freq_quarterly": "viertelj\u00e4hrlich", - "repeat_freq_monthly": "monatlich", - "repeat_freq_weekly": "w\u00f6chentlich", - "single_split": "Teilen", - "asset_accounts": "Bestandskonten", - "expense_accounts": "Ausgabekonten", - "liabilities_accounts": "Verbindlichkeiten", - "undefined_accounts": "Konten", - "name": "Name", - "revenue_accounts": "Einnahmekonten", - "description": "Beschreibung", - "category": "Kategorie", - "title_deposit": "Einnahmen \/ Einkommen", - "title_transfer": "Umbuchungen", - "title_transfers": "Umbuchungen", - "piggyBanks": "Sparschweine", - "rules": "Regeln", - "accounts": "Konten", - "categories": "Kategorien", - "tags": "Schlagw\u00f6rter", - "object_groups_page_title": "Gruppen", - "reports": "Berichte", - "webhooks": "Webhooks", - "currencies": "W\u00e4hrungen", - "administration": "Verwaltung", - "profile": "Profil", - "source_account": "Quellkonto", - "destination_account": "Zielkonto", - "amount": "Betrag", - "date": "Datum", - "time": "Uhrzeit", - "preferences": "Einstellungen", - "transactions": "Buchungen", - "balance": "Kontostand", - "budgets": "Budgets", - "subscriptions": "Abonnements", - "welcome_back": "\u00dcberblick", - "bills_to_pay": "Unbezahlte Rechnungen", - "net_worth": "Eigenkapital", - "pref_last365": "Letztes Jahr", - "pref_last90": "Letzte 90 Tage", - "pref_last30": "Letzte 30\u00a0Tage", - "pref_last7": "Letzte 7 Tage", - "pref_YTD": "Jahr bis heute", - "pref_QTD": "Quartal bis heute", - "pref_MTD": "Monat bis heute" - } -} diff --git a/frontend/src/i18n/el_GR/index.js b/frontend/src/i18n/el_GR/index.js deleted file mode 100644 index 3e01706667..0000000000 --- a/frontend/src/i18n/el_GR/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "el", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "\u038c\u03bd\u03bf\u03bc\u03b1", - "amount_min": "\u0395\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf \u03c0\u03bf\u03c3\u03cc", - "amount_max": "\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf \u03c0\u03bf\u03c3\u03cc", - "url": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL", - "title": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2", - "first_date": "\u03a0\u03c1\u03ce\u03c4\u03b7 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1", - "repetitions": "\u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03b9\u03c2", - "description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae", - "iban": "IBAN", - "skip": "\u03a0\u03b1\u03c1\u03ac\u03bb\u03b5\u03b9\u03c8\u03b7", - "date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1" - }, - "list": { - "name": "\u038c\u03bd\u03bf\u03bc\u03b1", - "account_number": "\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd", - "currentBalance": "\u03a4\u03c1\u03ad\u03c7\u03bf\u03bd \u03c5\u03c0\u03cc\u03bb\u03bf\u03b9\u03c0\u03bf", - "lastActivity": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b1 \u03b4\u03c1\u03b1\u03c3\u03c4\u03b7\u03c1\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1", - "active": "\u0395\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03cc;" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u03a0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03bf\u03af", - "subscriptions": "\u03a3\u03c5\u03bd\u03b4\u03c1\u03bf\u03bc\u03ad\u03c2", - "transactions": "\u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2", - "title_expenses": "\u0394\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2", - "title_withdrawal": "\u0394\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2", - "title_revenue": "\u0388\u03c3\u03bf\u03b4\u03b1", - "title_deposit": "\u0388\u03c3\u03bf\u03b4\u03b1", - "title_transfer": "\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2", - "title_transfers": "\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2", - "asset_accounts": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03af \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03bf\u03c5", - "expense_accounts": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03af \u03b4\u03b1\u03c0\u03b1\u03bd\u03ce\u03bd", - "revenue_accounts": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03af \u03b5\u03c3\u03cc\u03b4\u03c9\u03bd", - "liabilities_accounts": "\u03a5\u03c0\u03bf\u03c7\u03c1\u03b5\u03ce\u03c3\u03b5\u03b9\u03c2" - }, - "firefly": { - "administration_index": "\u039f\u03b9\u03ba\u03bf\u03bd\u03bf\u03bc\u03b9\u03ba\u03ae \u03b4\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7", - "actions": "\u0395\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b5\u03c2", - "edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1", - "delete": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae", - "reconcile": "\u03a4\u03b1\u03ba\u03c4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", - "create_new_asset": "\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03bd\u03ad\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03bf\u03c5", - "confirm_action": "\u0395\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7 \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1\u03c2", - "new_budget": "\u039d\u03ad\u03bf\u03c2 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc\u03c2", - "new_asset_account": "\u039d\u03ad\u03bf\u03c2 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03bf\u03c5", - "newTransfer": "\u039d\u03ad\u03b1 \u03bc\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c4\u03c9\u03bd webhook", - "newDeposit": "\u039d\u03ad\u03b1 \u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7", - "newWithdrawal": "\u039d\u03ad\u03b1 \u03b4\u03b1\u03c0\u03ac\u03bd\u03b7", - "bills_paid": "\u03a0\u03bb\u03b7\u03c1\u03c9\u03bc\u03ad\u03bd\u03b1 \u03c0\u03ac\u03b3\u03b9\u03b1 \u03ad\u03be\u03bf\u03b4\u03b1", - "left_to_spend": "\u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b1 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03ce\u03bd", - "no_budget": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc)", - "budgeted": "\u03a0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf", - "spent": "\u0394\u03b1\u03c0\u03b1\u03bd\u03ae\u03b8\u03b7\u03ba\u03b1\u03bd", - "no_bill": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf)", - "rule_trigger_source_account_starts_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_source_account_ends_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_source_account_is_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_source_account_contains_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "\u03a4\u03bf ID \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03ba\u03c1\u03b9\u03b2\u03ce\u03c2..", - "rule_trigger_destination_account_id_choice": "\u03a4\u03bf ID \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03ba\u03c1\u03b9\u03b2\u03ce\u03c2..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "\u039f \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 (\u03bc\u03b5\u03c4\u03c1\u03b7\u03c4\u03ce\u03bd)", - "rule_trigger_destination_is_cash_choice": "\u039f \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03b5\u03af\u03bd\u03b1\u03b9 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 (\u03bc\u03b5\u03c4\u03c1\u03b7\u03c4\u03ce\u03bd)", - "rule_trigger_source_account_nr_starts_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \/ IBAN \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_source_account_nr_ends_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \/ IBAN \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_source_account_nr_is_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \/ IBAN \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_source_account_nr_contains_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2 \/ IBAN \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9..", - "rule_trigger_destination_account_starts_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_destination_account_ends_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_destination_account_is_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_destination_account_contains_choice": "\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9..", - "rule_trigger_destination_account_nr_starts_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \/ IBAN \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_destination_account_nr_ends_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \/ IBAN \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_destination_account_nr_is_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \/ IBAN \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_destination_account_nr_contains_choice": "\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \/ IBAN \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9..", - "rule_trigger_transaction_type_choice": "\u0397 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03cd\u03c0\u03bf\u03c5..", - "rule_trigger_category_is_choice": "\u0397 \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "\u0397 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_description_ends_choice": "\u0397 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9 \u03bc\u03b5..", - "rule_trigger_description_contains_choice": "\u0397 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9..", - "rule_trigger_description_is_choice": "\u0397 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "\u0397 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03c1\u03b9\u03bd \u03b1\u03c0\u03cc \u03c4\u03b9\u03c2..", - "rule_trigger_date_after_choice": "\u0397 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bc\u03b5\u03c4\u03ac \u03b1\u03c0\u03cc \u03c4\u03b9\u03c2..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "\u039f \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_tag_is_choice": "\u039f\u03c0\u03bf\u03b9\u03b1\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_currency_is_choice": "\u03a4\u03bf \u03bd\u03cc\u03bc\u03b9\u03c3\u03bc\u03b1 \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_foreign_currency_is_choice": "\u03a4\u03bf \u03be\u03ad\u03bd\u03bf \u03bd\u03cc\u03bc\u03b9\u03c3\u03bc\u03b1 \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_has_attachments_choice": "\u0388\u03c7\u03b5\u03b9 \u03c4\u03bf\u03c5\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf\u03bd \u03c4\u03cc\u03c3\u03b1 \u03c3\u03c5\u03bd\u03b7\u03bc\u03bc\u03ad\u03bd\u03b1", - "rule_trigger_has_no_category_choice": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1", - "rule_trigger_has_any_category_choice": "\u0388\u03c7\u03b5\u03b9 \u03bc\u03af\u03b1(\u03bf\u03c0\u03bf\u03b9\u03b1\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5) \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1", - "rule_trigger_has_no_budget_choice": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc", - "rule_trigger_has_any_budget_choice": "\u0388\u03c7\u03b5\u03b9 \u03ad\u03bd\u03b1\u03bd (\u03bf\u03c0\u03bf\u03b9\u03bf\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5) \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc", - "rule_trigger_has_no_bill_choice": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf", - "rule_trigger_has_any_bill_choice": "\u0388\u03c7\u03b5\u03b9 \u03ad\u03bd\u03b1 (\u03bf\u03c0\u03bf\u03b9\u03bf\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5) \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf", - "rule_trigger_has_no_tag_choice": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b1(\u03b5\u03c2)", - "rule_trigger_has_any_tag_choice": "\u0388\u03c7\u03b5\u03b9 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03b1\u03c0\u03cc \u03bc\u03af\u03b1 (\u03bf\u03c0\u03bf\u03b9\u03b5\u03c3\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5) \u03b5\u03c4\u03b9\u03ba\u03ad\u03c4\u03b5\u03c2", - "rule_trigger_any_notes_choice": "\u0388\u03c7\u03b5\u03b9 (\u03bf\u03c0\u03bf\u03b9\u03b5\u03c3\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5) \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2", - "rule_trigger_no_notes_choice": "\u0394\u03b5\u03bd \u03ad\u03c7\u03b5\u03b9 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2", - "rule_trigger_notes_is_choice": "\u039f\u03b9 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_notes_contains_choice": "\u039f\u03b9 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03bf\u03c5\u03bd..", - "rule_trigger_notes_starts_choice": "\u039f\u03b9 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03b9\u03c2 \u03b1\u03c1\u03c7\u03af\u03b6\u03bf\u03c5\u03bd \u03bc\u03b5..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "\u03a4\u03bf \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "\u03a4\u03bf \u03b7\u03bc\u03b5\u03c1\u03bf\u03bb\u03bf\u03b3\u03b9\u03b1\u03ba\u03cc ID \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bf\u03c0\u03bf\u03b9\u03b1\u03c3\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1\u03c2", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bf\u03c0\u03bf\u03b9\u03bf\u03c5\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03bf\u03cd", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03b5\u03c4\u03b9\u03ba\u03b5\u03c4\u03ce\u03bd", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03bf\u03c0\u03bf\u03b9\u03bf\u03bd\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03c3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03b5\u03c9\u03bd", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03c3\u03b5 \u03bc\u03af\u03b1 \u03ba\u03b1\u03c4\u03ac\u03b8\u03b5\u03c3\u03b7", - "rule_action_convert_withdrawal_choice": "\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03c3\u03b5 \u03bc\u03af\u03b1 \u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7", - "rule_action_convert_transfer_choice": "\u039c\u03b5\u03c4\u03b1\u03c4\u03c1\u03bf\u03c0\u03ae \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03c3\u03b5 \u03bc\u03af\u03b1 \u03bc\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac", - "placeholder": "[Placeholder]", - "recurrences": "\u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03b1\u03bc\u03b2\u03b1\u03bd\u03cc\u03bc\u03b5\u03bd\u03b5\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2", - "title_expenses": "\u0394\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2", - "title_withdrawal": "\u0394\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2", - "title_revenue": "\u0388\u03c3\u03bf\u03b4\u03b1", - "pref_1D": "\u039c\u03af\u03b1 \u03b7\u03bc\u03ad\u03c1\u03b1", - "pref_1W": "\u039c\u03af\u03b1 \u03b5\u03b2\u03b4\u03bf\u03bc\u03ac\u03b4\u03b1", - "pref_1M": "\u0388\u03bd\u03b1 \u03bc\u03ae\u03bd\u03b1", - "pref_3M": "\u03a4\u03c1\u03b5\u03b9\u03c2 \u03bc\u03ae\u03bd\u03b5\u03c2 (\u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf)", - "pref_6M": "\u0388\u03be\u03b9 \u03bc\u03ae\u03bd\u03b5\u03c2 (\u03b5\u03be\u03ac\u03bc\u03b7\u03bd\u03bf)", - "pref_1Y": "\u0388\u03bd\u03b1 \u03ad\u03c4\u03bf\u03c2", - "repeat_freq_yearly": "\u03b5\u03c4\u03b7\u03c3\u03af\u03c9\u03c2", - "repeat_freq_half-year": "\u03b5\u03be\u03b1\u03bc\u03b7\u03bd\u03b9\u03b1\u03af\u03c9\u03c2", - "repeat_freq_quarterly": "\u03c4\u03c1\u03b9\u03bc\u03b7\u03bd\u03b9\u03b1\u03af\u03c9\u03c2", - "repeat_freq_monthly": "\u03bc\u03b7\u03bd\u03b9\u03b1\u03af\u03c9\u03c2", - "repeat_freq_weekly": "\u03b5\u03b2\u03b4\u03bf\u03bc\u03b1\u03b4\u03b9\u03b1\u03af\u03c9\u03c2", - "single_split": "\u0394\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2", - "asset_accounts": "\u039a\u03b5\u03c6\u03ac\u03bb\u03b1\u03b9\u03b1", - "expense_accounts": "\u0394\u03b1\u03c0\u03ac\u03bd\u03b5\u03c2", - "liabilities_accounts": "\u03a5\u03c0\u03bf\u03c7\u03c1\u03b5\u03ce\u03c3\u03b5\u03b9\u03c2", - "undefined_accounts": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03af", - "name": "\u038c\u03bd\u03bf\u03bc\u03b1", - "revenue_accounts": "\u0388\u03c3\u03bf\u03b4\u03b1", - "description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae", - "category": "\u039a\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1", - "title_deposit": "\u0388\u03c3\u03bf\u03b4\u03b1", - "title_transfer": "\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2", - "title_transfers": "\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2", - "piggyBanks": "\u039a\u03bf\u03c5\u03bc\u03c0\u03b1\u03c1\u03ac\u03b4\u03b5\u03c2", - "rules": "\u039a\u03b1\u03bd\u03cc\u03bd\u03b5\u03c2", - "accounts": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03af", - "categories": "\u039a\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b5\u03c2", - "tags": "\u0395\u03c4\u03b9\u03ba\u03ad\u03c4\u03b5\u03c2", - "object_groups_page_title": "\u039f\u03bc\u03ac\u03b4\u03b5\u03c2", - "reports": "\u0391\u03bd\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2", - "webhooks": "Webhooks", - "currencies": "\u039d\u03bf\u03bc\u03af\u03c3\u03bc\u03b1\u03c4\u03b1", - "administration": "\u0394\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7", - "profile": "\u03a0\u03c1\u03bf\u03c6\u03af\u03bb", - "source_account": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7\u03c2", - "destination_account": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd", - "amount": "\u03a0\u03bf\u03c3\u03cc", - "date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1", - "time": "\u038f\u03c1\u03b1", - "preferences": "\u03a0\u03c1\u03bf\u03c4\u03b9\u03bc\u03ae\u03c3\u03b5\u03b9\u03c2", - "transactions": "\u03a3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2", - "balance": "\u0399\u03c3\u03bf\u03b6\u03cd\u03b3\u03b9\u03bf", - "budgets": "\u03a0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03bf\u03af", - "subscriptions": "\u03a3\u03c5\u03bd\u03b4\u03c1\u03bf\u03bc\u03ad\u03c2", - "welcome_back": "\u03a4\u03b9 \u03c0\u03b1\u03af\u03b6\u03b5\u03b9;", - "bills_to_pay": "\u03a0\u03ac\u03b3\u03b9\u03b1 \u03ad\u03be\u03bf\u03b4\u03b1 \u03c0\u03c1\u03bf\u03c2 \u03c0\u03bb\u03b7\u03c1\u03c9\u03bc\u03ae", - "net_worth": "\u039a\u03b1\u03b8\u03b1\u03c1\u03ae \u03b1\u03be\u03af\u03b1", - "pref_last365": "\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03ad\u03c4\u03bf\u03c2", - "pref_last90": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 90 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2", - "pref_last30": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 30 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2", - "pref_last7": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 7 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2", - "pref_YTD": "\u0388\u03c4\u03bf\u03c2 \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1", - "pref_QTD": "\u03a4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1", - "pref_MTD": "\u039c\u03ae\u03bd\u03b1\u03c2 \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1" - } -} diff --git a/frontend/src/i18n/en_GB/index.js b/frontend/src/i18n/en_GB/index.js deleted file mode 100644 index 7792118ce5..0000000000 --- a/frontend/src/i18n/en_GB/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "en-gb", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Name", - "amount_min": "Minimum amount", - "amount_max": "Maximum amount", - "url": "URL", - "title": "Title", - "first_date": "First date", - "repetitions": "Repetitions", - "description": "Description", - "iban": "IBAN", - "skip": "Skip", - "date": "Date" - }, - "list": { - "name": "Name", - "account_number": "Account number", - "currentBalance": "Current balance", - "lastActivity": "Last activity", - "active": "Is active?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Actions", - "edit": "Edit", - "delete": "Delete", - "reconcile": "Reconcile", - "create_new_asset": "Create new asset account", - "confirm_action": "Confirm action", - "new_budget": "New budget", - "new_asset_account": "New asset account", - "newTransfer": "New transfer", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "New deposit", - "newWithdrawal": "New expense", - "bills_paid": "Bills paid", - "left_to_spend": "Left to spend", - "no_budget": "(no budget)", - "budgeted": "Budgeted", - "spent": "Spent", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "Source account name contains..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "Source account number \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Source account number \/ IBAN contains..", - "rule_trigger_destination_account_starts_choice": "Destination account name starts with..", - "rule_trigger_destination_account_ends_choice": "Destination account name ends with..", - "rule_trigger_destination_account_is_choice": "Destination account name is..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "Transaction is of type..", - "rule_trigger_category_is_choice": "Category is..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Description starts with..", - "rule_trigger_description_ends_choice": "Description ends with..", - "rule_trigger_description_contains_choice": "Description contains..", - "rule_trigger_description_is_choice": "Description is..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaction date is before..", - "rule_trigger_date_after_choice": "Transaction date is after..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Budget is..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Transaction currency is..", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "Has at least this many attachments", - "rule_trigger_has_no_category_choice": "Has no category", - "rule_trigger_has_any_category_choice": "Has a (any) category", - "rule_trigger_has_no_budget_choice": "Has no budget", - "rule_trigger_has_any_budget_choice": "Has a (any) budget", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Has no tag(s)", - "rule_trigger_has_any_tag_choice": "Has one or more (any) tags", - "rule_trigger_any_notes_choice": "Has (any) notes", - "rule_trigger_no_notes_choice": "Has no notes", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill is..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Clear any category", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Clear any budget", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Remove all tags", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Remove any notes", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Convert the transaction to a deposit", - "rule_action_convert_withdrawal_choice": "Convert the transaction to a withdrawal", - "rule_action_convert_transfer_choice": "Convert the transaction to a transfer", - "placeholder": "[Placeholder]", - "recurrences": "Recurring transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "pref_1D": "One day", - "pref_1W": "One week", - "pref_1M": "One month", - "pref_3M": "Three months (quarter)", - "pref_6M": "Six months", - "pref_1Y": "One year", - "repeat_freq_yearly": "yearly", - "repeat_freq_half-year": "every half-year", - "repeat_freq_quarterly": "quarterly", - "repeat_freq_monthly": "monthly", - "repeat_freq_weekly": "weekly", - "single_split": "Split", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "liabilities_accounts": "Liabilities", - "undefined_accounts": "Accounts", - "name": "Name", - "revenue_accounts": "Revenue accounts", - "description": "Description", - "category": "Category", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "piggyBanks": "Piggy banks", - "rules": "Rules", - "accounts": "Accounts", - "categories": "Categories", - "tags": "Tags", - "object_groups_page_title": "Groups", - "reports": "Reports", - "webhooks": "Webhooks", - "currencies": "Currencies", - "administration": "Administration", - "profile": "Profile", - "source_account": "Source account", - "destination_account": "Destination account", - "amount": "Amount", - "date": "Date", - "time": "Time", - "preferences": "Preferences", - "transactions": "Transactions", - "balance": "Balance", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "welcome_back": "What's playing?", - "bills_to_pay": "Bills to pay", - "net_worth": "Net worth", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/en_US/index.js b/frontend/src/i18n/en_US/index.js deleted file mode 100644 index cd7b5886d6..0000000000 --- a/frontend/src/i18n/en_US/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "en", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Name", - "amount_min": "Minimum amount", - "amount_max": "Maximum amount", - "url": "URL", - "title": "Title", - "first_date": "First date", - "repetitions": "Repetitions", - "description": "Description", - "iban": "IBAN", - "skip": "Skip", - "date": "Date" - }, - "list": { - "name": "Name", - "account_number": "Account number", - "currentBalance": "Current balance", - "lastActivity": "Last activity", - "active": "Is active?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Actions", - "edit": "Edit", - "delete": "Delete", - "reconcile": "Reconcile", - "create_new_asset": "Create new asset account", - "confirm_action": "Confirm action", - "new_budget": "New budget", - "new_asset_account": "New asset account", - "newTransfer": "New transfer", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "New deposit", - "newWithdrawal": "New expense", - "bills_paid": "Bills paid", - "left_to_spend": "Left to spend", - "no_budget": "(no budget)", - "budgeted": "Budgeted", - "spent": "Spent", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "Source account name contains..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "Source account number \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Source account number \/ IBAN contains..", - "rule_trigger_destination_account_starts_choice": "Destination account name starts with..", - "rule_trigger_destination_account_ends_choice": "Destination account name ends with..", - "rule_trigger_destination_account_is_choice": "Destination account name is..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "Transaction is of type..", - "rule_trigger_category_is_choice": "Category is..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Description starts with..", - "rule_trigger_description_ends_choice": "Description ends with..", - "rule_trigger_description_contains_choice": "Description contains..", - "rule_trigger_description_is_choice": "Description is..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaction date is before..", - "rule_trigger_date_after_choice": "Transaction date is after..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Budget is..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Transaction currency is..", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "Has at least this many attachments", - "rule_trigger_has_no_category_choice": "Has no category", - "rule_trigger_has_any_category_choice": "Has a (any) category", - "rule_trigger_has_no_budget_choice": "Has no budget", - "rule_trigger_has_any_budget_choice": "Has a (any) budget", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Has no tag(s)", - "rule_trigger_has_any_tag_choice": "Has one or more (any) tags", - "rule_trigger_any_notes_choice": "Has (any) notes", - "rule_trigger_no_notes_choice": "Has no notes", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill is..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Clear any category", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Clear any budget", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Remove all tags", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Remove any notes", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Convert the transaction to a deposit", - "rule_action_convert_withdrawal_choice": "Convert the transaction to a withdrawal", - "rule_action_convert_transfer_choice": "Convert the transaction to a transfer", - "placeholder": "[Placeholder]", - "recurrences": "Recurring transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "pref_1D": "One day", - "pref_1W": "One week", - "pref_1M": "One month", - "pref_3M": "Three months (quarter)", - "pref_6M": "Six months", - "pref_1Y": "One year", - "repeat_freq_yearly": "yearly", - "repeat_freq_half-year": "every half-year", - "repeat_freq_quarterly": "quarterly", - "repeat_freq_monthly": "monthly", - "repeat_freq_weekly": "weekly", - "single_split": "Split", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "liabilities_accounts": "Liabilities", - "undefined_accounts": "Accounts", - "name": "Name", - "revenue_accounts": "Revenue accounts", - "description": "Description", - "category": "Category", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "piggyBanks": "Piggy banks", - "rules": "Rules", - "accounts": "Accounts", - "categories": "Categories", - "tags": "Tags", - "object_groups_page_title": "Groups", - "reports": "Reports", - "webhooks": "Webhooks", - "currencies": "Currencies", - "administration": "Administration", - "profile": "Profile", - "source_account": "Source account", - "destination_account": "Destination account", - "amount": "Amount", - "date": "Date", - "time": "Time", - "preferences": "Preferences", - "transactions": "Transactions", - "balance": "Balance", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "welcome_back": "What's playing?", - "bills_to_pay": "Bills to pay", - "net_worth": "Net worth", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/es_ES/index.js b/frontend/src/i18n/es_ES/index.js deleted file mode 100644 index 94e06832a1..0000000000 --- a/frontend/src/i18n/es_ES/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "es", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nombre", - "amount_min": "Importe m\u00ednimo", - "amount_max": "Importe m\u00e1ximo", - "url": "URL", - "title": "T\u00edtulo", - "first_date": "Primera fecha", - "repetitions": "Repeticiones", - "description": "Descripci\u00f3n", - "iban": "IBAN", - "skip": "Saltar", - "date": "Fecha" - }, - "list": { - "name": "Nombre", - "account_number": "N\u00famero de cuenta", - "currentBalance": "Balance actual", - "lastActivity": "Actividad m\u00e1s reciente", - "active": "\u00bfEst\u00e1 Activo?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Presupuestos", - "subscriptions": "Suscripciones", - "transactions": "Transacciones", - "title_expenses": "Gastos", - "title_withdrawal": "Gastos", - "title_revenue": "Ingresos \/ salario", - "title_deposit": "Ingresos \/ salario", - "title_transfer": "Transferencias", - "title_transfers": "Transferencias", - "asset_accounts": "Cuentas de activos", - "expense_accounts": "Cuentas de gastos", - "revenue_accounts": "Cuentas de ingresos", - "liabilities_accounts": "Pasivos" - }, - "firefly": { - "administration_index": "Administraci\u00f3n financiera", - "actions": "Acciones", - "edit": "Editar", - "delete": "Eliminar", - "reconcile": "Reconciliar", - "create_new_asset": "Crear nueva cuenta de activos", - "confirm_action": "Confirmar acci\u00f3n", - "new_budget": "Nuevo presupuesto", - "new_asset_account": "Nueva cuenta de activo", - "newTransfer": "Nueva transferencia", - "submission_options": "Opciones de env\u00edo", - "apply_rules_checkbox": "Aplicar reglas", - "fire_webhooks_checkbox": "Disparar webhooks", - "newDeposit": "Nuevo ingreso", - "newWithdrawal": "Nuevo gasto", - "bills_paid": "Facturas pagadas", - "left_to_spend": "Disponible para gastar", - "no_budget": "(sin presupuesto)", - "budgeted": "Presupuestado", - "spent": "Gastado", - "no_bill": "(sin factura)", - "rule_trigger_source_account_starts_choice": "El nombre de la cuenta de origen comienza con..", - "rule_trigger_source_account_ends_choice": "El nombre de la cuenta de origen termina con..", - "rule_trigger_source_account_is_choice": "El nombre de la cuenta origen es..", - "rule_trigger_source_account_contains_choice": "El nombre de cuenta de origen contiene..", - "rule_trigger_account_id_choice": "El ID de cualquiera de las cuentas es exactamente..", - "rule_trigger_source_account_id_choice": "El ID de la cuenta de origen es exactamente..", - "rule_trigger_destination_account_id_choice": "El ID de la cuenta de destino es exactamente..", - "rule_trigger_account_is_cash_choice": "Cualquiera de las cuentas es efectivo", - "rule_trigger_source_is_cash_choice": "La cuenta de origen es de efectivo", - "rule_trigger_destination_is_cash_choice": "La cuenta de destino es de efectivo", - "rule_trigger_source_account_nr_starts_choice": "N\u00famero de la cuenta de origen \/ IBAN comienza con..", - "rule_trigger_source_account_nr_ends_choice": "N\u00famero \/ IBAN de la cuenta de origen termina con..", - "rule_trigger_source_account_nr_is_choice": "N\u00famero de la cuenta de origen \/ IBAN es..", - "rule_trigger_source_account_nr_contains_choice": "N\u00famero de cuenta de origen \/ IBAN contiene..", - "rule_trigger_destination_account_starts_choice": "El nombre de cuenta de destino comienza con..", - "rule_trigger_destination_account_ends_choice": "El nombre de cuenta de destino termina con...", - "rule_trigger_destination_account_is_choice": "El nombre de cuenta de destino es...", - "rule_trigger_destination_account_contains_choice": "El nombre de cuenta de destino contiene..", - "rule_trigger_destination_account_nr_starts_choice": "N\u00famero \/ IBAN de la cuenta de destino empieza con..", - "rule_trigger_destination_account_nr_ends_choice": "N\u00famero de la cuenta de destino \/ IBAN termina con..", - "rule_trigger_destination_account_nr_is_choice": "N\u00famero de la cuenta de destino \/ IBAN es..", - "rule_trigger_destination_account_nr_contains_choice": "El n\u00famero de la cuenta de destino \/ IBAN contiene..", - "rule_trigger_transaction_type_choice": "Transacci\u00f3n es del tipo..", - "rule_trigger_category_is_choice": "Categor\u00eda es..", - "rule_trigger_amount_less_choice": "La cantidad es menor o igual a ..", - "rule_trigger_amount_is_choice": "Cantidad es..", - "rule_trigger_amount_more_choice": "Cantidad es mayor o igual a..", - "rule_trigger_description_starts_choice": "Descripci\u00f3n comienza con..", - "rule_trigger_description_ends_choice": "Descripci\u00f3n termina con..", - "rule_trigger_description_contains_choice": "Descripci\u00f3n contiene..", - "rule_trigger_description_is_choice": "Descripci\u00f3n es..", - "rule_trigger_date_on_choice": "La fecha de la transacci\u00f3n es..", - "rule_trigger_date_before_choice": "La fecha de la transacci\u00f3n es anterior a..", - "rule_trigger_date_after_choice": "La fecha de la transacci\u00f3n es despu\u00e9s de..", - "rule_trigger_created_at_on_choice": "La transacci\u00f3n se realiz\u00f3 el..", - "rule_trigger_updated_at_on_choice": "La transacci\u00f3n fue editada por \u00faltima vez el..", - "rule_trigger_budget_is_choice": "Presupuesto es..", - "rule_trigger_tag_is_choice": "Cualquier etiqueta es..", - "rule_trigger_currency_is_choice": "La moneda de la transacci\u00f3n es..", - "rule_trigger_foreign_currency_is_choice": "La transacci\u00f3n en moneda extranjera es..", - "rule_trigger_has_attachments_choice": "Tiene al menos tantos archivos adjuntos", - "rule_trigger_has_no_category_choice": "No tiene categor\u00eda", - "rule_trigger_has_any_category_choice": "Tiene (cualquier) categor\u00eda", - "rule_trigger_has_no_budget_choice": "No tiene presupuesto", - "rule_trigger_has_any_budget_choice": "Tiene un (cualquier) presupuesto", - "rule_trigger_has_no_bill_choice": "No tiene factura", - "rule_trigger_has_any_bill_choice": "Tiene una (cualquier) factura", - "rule_trigger_has_no_tag_choice": "No tiene etiqueta(s)", - "rule_trigger_has_any_tag_choice": "Tiene una o mas (cualquier) etiquetas", - "rule_trigger_any_notes_choice": "Tiene (cualquier) notas", - "rule_trigger_no_notes_choice": "No tiene notas", - "rule_trigger_notes_is_choice": "Las notas son..", - "rule_trigger_notes_contains_choice": "Las notas contienen..", - "rule_trigger_notes_starts_choice": "Las notas comienzan con..", - "rule_trigger_notes_ends_choice": "Las notas terminan con..", - "rule_trigger_bill_is_choice": "La factura es..", - "rule_trigger_external_id_is_choice": "El ID externo es..", - "rule_trigger_internal_reference_is_choice": "La referencia interna es..", - "rule_trigger_journal_id_choice": "El ID del diario de transacciones es..", - "rule_trigger_any_external_url_choice": "La transacci\u00f3n tiene una (cualquiera) URL externa", - "rule_trigger_no_external_url_choice": "La transacci\u00f3n no tiene URL externa", - "rule_trigger_id_choice": "La ID de la transacci\u00f3n es..", - "rule_action_delete_transaction_choice": "ELIMINAR transacci\u00f3n(!)", - "rule_action_set_category_choice": "Establecer categor\u00eda ..", - "rule_action_clear_category_choice": "Eliminar cualquier categor\u00eda", - "rule_action_set_budget_choice": "Establecer presupuesto ..", - "rule_action_clear_budget_choice": "Eliminar cualquier presupuesto", - "rule_action_add_tag_choice": "A\u00f1adir etiqueta ..", - "rule_action_remove_tag_choice": "Quitar etiqueta ..", - "rule_action_remove_all_tags_choice": "Eliminar todas las etiquetas", - "rule_action_set_description_choice": "A\u00f1adir descripci\u00f3n ..", - "rule_action_update_piggy_choice": "A\u00f1adir \/ quitar el importe de la transacci\u00f3n de la hucha ..", - "rule_action_append_description_choice": "A\u00f1adir descripci\u00f3n con ..", - "rule_action_prepend_description_choice": "Anteponer descripci\u00f3n con ..", - "rule_action_set_source_account_choice": "Establecer cuenta de origen ..", - "rule_action_set_destination_account_choice": "Establecer cuenta de destino ..", - "rule_action_append_notes_choice": "A\u00f1adir notas con ..", - "rule_action_prepend_notes_choice": "Anteponer notas con ..", - "rule_action_clear_notes_choice": "Eliminar cualquier nota", - "rule_action_set_notes_choice": "Establecer nota ..", - "rule_action_link_to_bill_choice": "Enlazar a una factura ..", - "rule_action_convert_deposit_choice": "Convertir transacci\u00f3n en un ingreso", - "rule_action_convert_withdrawal_choice": "Convierta esta transacci\u00f3n en un gasto", - "rule_action_convert_transfer_choice": "Convierta la transacci\u00f3n a una transferencia", - "placeholder": "[Placeholder]", - "recurrences": "Transacciones Recurrentes", - "title_expenses": "Gastos", - "title_withdrawal": "Gastos", - "title_revenue": "Ingresos \/ salarios", - "pref_1D": "Un dia", - "pref_1W": "Una semana", - "pref_1M": "Un mes", - "pref_3M": "Tres meses (trimestre)", - "pref_6M": "Seis meses", - "pref_1Y": "Un a\u00f1o", - "repeat_freq_yearly": "anualmente", - "repeat_freq_half-year": "cada medio a\u00f1o", - "repeat_freq_quarterly": "trimestralmente", - "repeat_freq_monthly": "mensualmente", - "repeat_freq_weekly": "semanalmente", - "single_split": "Divisi\u00f3n", - "asset_accounts": "Cuenta de activos", - "expense_accounts": "Cuentas de gastos", - "liabilities_accounts": "Pasivos", - "undefined_accounts": "Cuentas", - "name": "Nombre", - "revenue_accounts": "Cuentas de ingresos", - "description": "Descripci\u00f3n", - "category": "Categoria", - "title_deposit": "Ingresos \/ salarios", - "title_transfer": "Transferencias", - "title_transfers": "Transferencias", - "piggyBanks": "Huchas", - "rules": "Reglas", - "accounts": "Cuentas", - "categories": "Categor\u00edas", - "tags": "Etiquetas", - "object_groups_page_title": "Grupos", - "reports": "Informes", - "webhooks": "Webhooks", - "currencies": "Divisas", - "administration": "Administraci\u00f3n", - "profile": "Perfil", - "source_account": "Cuenta origen", - "destination_account": "Cuenta destino", - "amount": "Cantidad", - "date": "Fecha", - "time": "Hora", - "preferences": "Preferencias", - "transactions": "Transacciones", - "balance": "Balance", - "budgets": "Presupuestos", - "subscriptions": "Suscripciones", - "welcome_back": "\u00bfQu\u00e9 est\u00e1 pasando?", - "bills_to_pay": "Facturas por pagar", - "net_worth": "Valor Neto", - "pref_last365": "A\u00f1o pasado", - "pref_last90": "\u00daltimos 90 d\u00edas", - "pref_last30": "\u00daltimos 30 d\u00edas", - "pref_last7": "\u00daltimos 7 d\u00edas", - "pref_YTD": "A\u00f1o hasta hoy", - "pref_QTD": "Trimestre hasta hoy", - "pref_MTD": "Mes hasta hoy" - } -} diff --git a/frontend/src/i18n/fi_FI/index.js b/frontend/src/i18n/fi_FI/index.js deleted file mode 100644 index e20ce8377e..0000000000 --- a/frontend/src/i18n/fi_FI/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "fi", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Nimi", - "amount_min": "V\u00e4himm\u00e4issumma", - "amount_max": "Enimm\u00e4issumma", - "url": "URL-osoite", - "title": "Otsikko", - "first_date": "Aloitusp\u00e4iv\u00e4", - "repetitions": "Toistot", - "description": "Kuvaus", - "iban": "IBAN", - "skip": "Ohita", - "date": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4" - }, - "list": { - "name": "Nimi", - "account_number": "Tilinumero", - "currentBalance": "T\u00e4m\u00e4nhetkinen saldo", - "lastActivity": "Viimeisin tapahtuma", - "active": "Aktiivinen?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budjetit", - "subscriptions": "Tilaukset", - "transactions": "Tapahtumat", - "title_expenses": "Kustannukset", - "title_withdrawal": "Kustannukset", - "title_revenue": "Tuotto \/ ansio", - "title_deposit": "Tuotto \/ ansio", - "title_transfer": "Tilisiirrot", - "title_transfers": "Tilisiirrot", - "asset_accounts": "K\u00e4ytt\u00f6tilit", - "expense_accounts": "Kulutustilit", - "revenue_accounts": "Tuottotilit", - "liabilities_accounts": "Lainat" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Toiminnot", - "edit": "Muokkaa", - "delete": "Poista", - "reconcile": "T\u00e4sm\u00e4yt\u00e4", - "create_new_asset": "Luo uusi omaisuustili", - "confirm_action": "Vahvista toiminto", - "new_budget": "Uusi budjetti", - "new_asset_account": "Uusi omaisuustili", - "newTransfer": "Uusi siirto", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Uusi talletus", - "newWithdrawal": "Uusi kustannus", - "bills_paid": "Maksetut laskut", - "left_to_spend": "K\u00e4ytett\u00e4viss\u00e4", - "no_budget": "(ei budjettia)", - "budgeted": "Budjetoitu", - "spent": "K\u00e4ytetty", - "no_bill": "(ei laskua)", - "rule_trigger_source_account_starts_choice": "L\u00e4hdetilin nimi alkaa ...", - "rule_trigger_source_account_ends_choice": "L\u00e4hdetilin nimi p\u00e4\u00e4ttyy..", - "rule_trigger_source_account_is_choice": "L\u00e4hdetilin nimi on..", - "rule_trigger_source_account_contains_choice": "L\u00e4hdetilin nimi sis\u00e4lt\u00e4\u00e4..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "L\u00e4hdetili ID on tarkalleen..", - "rule_trigger_destination_account_id_choice": "Kohdetilin ID on tarkalleen..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "L\u00e4hdetili on (k\u00e4teis) tili", - "rule_trigger_destination_is_cash_choice": "Kohdetili on (k\u00e4teis) tili", - "rule_trigger_source_account_nr_starts_choice": "L\u00e4hdetilin numero \/ IBAN alkaa..", - "rule_trigger_source_account_nr_ends_choice": "L\u00e4hdetilin numero \/ IBAN p\u00e4\u00e4ttyy..", - "rule_trigger_source_account_nr_is_choice": "L\u00e4hdetilin numero \/ IBAN on..", - "rule_trigger_source_account_nr_contains_choice": "L\u00e4hdetilin numero \/ IBAN sis\u00e4lt\u00e4\u00e4..", - "rule_trigger_destination_account_starts_choice": "Kohdetilin nimi alkaa..", - "rule_trigger_destination_account_ends_choice": "Kohdetilin nimi p\u00e4\u00e4ttyy..", - "rule_trigger_destination_account_is_choice": "Kohdetilin nimi on..", - "rule_trigger_destination_account_contains_choice": "Kohdetilin nimi sis\u00e4lt\u00e4\u00e4..", - "rule_trigger_destination_account_nr_starts_choice": "Kohdetilin numero \/ IBAN alkaa..", - "rule_trigger_destination_account_nr_ends_choice": "Kohdetilin numero \/ IBAN p\u00e4\u00e4ttyy..", - "rule_trigger_destination_account_nr_is_choice": "Kohdetilin numero \/ IBAN on..", - "rule_trigger_destination_account_nr_contains_choice": "Kohdetilin numero \/ IBAN sis\u00e4lt\u00e4\u00e4..", - "rule_trigger_transaction_type_choice": "Tapahtuman tyyppi on ...", - "rule_trigger_category_is_choice": "Kategoria on ...", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Summa on..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Kuvaus alkaa tekstill\u00e4 ...", - "rule_trigger_description_ends_choice": "Kuvaus p\u00e4\u00e4ttyy tekstiin ...", - "rule_trigger_description_contains_choice": "Kuvaus sis\u00e4lt\u00e4\u00e4 ...", - "rule_trigger_description_is_choice": "Kuvaus on ...", - "rule_trigger_date_on_choice": "Tapahtumap\u00e4iv\u00e4 on..", - "rule_trigger_date_before_choice": "Tapahtumap\u00e4iv\u00e4 on ennen..", - "rule_trigger_date_after_choice": "Tapahtumap\u00e4iv\u00e4 on j\u00e4lkeen..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Budjetti on ...", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Tapahtuman valuutta on ...", - "rule_trigger_foreign_currency_is_choice": "Tapahtuman valuutta on..", - "rule_trigger_has_attachments_choice": "Tapahtumalla on v\u00e4hint\u00e4\u00e4n n\u00e4in monta liitett\u00e4", - "rule_trigger_has_no_category_choice": "Ei kategoriaa", - "rule_trigger_has_any_category_choice": "Mik\u00e4 tahansa kategoria", - "rule_trigger_has_no_budget_choice": "Ei budjettia", - "rule_trigger_has_any_budget_choice": "On budjetti (mik\u00e4 tahansa)", - "rule_trigger_has_no_bill_choice": "Ei laskua", - "rule_trigger_has_any_bill_choice": "On lasku (mik\u00e4 tahansa)", - "rule_trigger_has_no_tag_choice": "Ei t\u00e4gej\u00e4", - "rule_trigger_has_any_tag_choice": "On t\u00e4gi\/t\u00e4gej\u00e4 (mit\u00e4 tahansa)", - "rule_trigger_any_notes_choice": "On muistiinpano (mit\u00e4 tahansa)", - "rule_trigger_no_notes_choice": "Ei muistiinpanoja", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Lasku on..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Tapahtumatietueen tunnus on..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Tapahtumalla ei ole ulkoista URL-osoitetta", - "rule_trigger_id_choice": "Tapahtuman tunnus on..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Tyhjenn\u00e4 kategoria", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Tyhjenn\u00e4 budjetti", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Poista kaikki t\u00e4git", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Poista kaikki muistiinpanot", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Muuta tapahtuma talletukseksi", - "rule_action_convert_withdrawal_choice": "Muuta tapahtuma nostoksi", - "rule_action_convert_transfer_choice": "Muuta tapahtuma siirroksi", - "placeholder": "[Placeholder]", - "recurrences": "Toistuvat tapahtumat", - "title_expenses": "Kustannukset", - "title_withdrawal": "Kustannukset", - "title_revenue": "Tuotto \/ ansio", - "pref_1D": "Yksi p\u00e4iv\u00e4", - "pref_1W": "Yksi viikko", - "pref_1M": "Yksi kuukausi", - "pref_3M": "Kolme kuukautta (vuosinelj\u00e4nnes)", - "pref_6M": "Kuusi kuukautta", - "pref_1Y": "Yksi vuosi", - "repeat_freq_yearly": "vuosittain", - "repeat_freq_half-year": "puoli-vuosittain", - "repeat_freq_quarterly": "nelj\u00e4nnesvuosittain", - "repeat_freq_monthly": "kuukausittain", - "repeat_freq_weekly": "viikoittain", - "single_split": "Jako", - "asset_accounts": "K\u00e4ytt\u00f6tilit", - "expense_accounts": "Kulutustilit", - "liabilities_accounts": "Lainat", - "undefined_accounts": "Tilit", - "name": "Nimi", - "revenue_accounts": "Tuottotilit", - "description": "Kuvaus", - "category": "Kategoria", - "title_deposit": "Tuotto \/ ansio", - "title_transfer": "Tilisiirrot", - "title_transfers": "Tilisiirrot", - "piggyBanks": "S\u00e4\u00e4st\u00f6possut", - "rules": "S\u00e4\u00e4nn\u00f6t", - "accounts": "Tilit", - "categories": "Kategoriat", - "tags": "T\u00e4git", - "object_groups_page_title": "Ryhm\u00e4t", - "reports": "Raportit", - "webhooks": "Webhookit", - "currencies": "Valuutat", - "administration": "Yll\u00e4pito", - "profile": "Profiili", - "source_account": "L\u00e4hdetili", - "destination_account": "Kohdetili", - "amount": "Summa", - "date": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4", - "time": "Aika", - "preferences": "Asetukset", - "transactions": "Tapahtumat", - "balance": "Saldo", - "budgets": "Budjetit", - "subscriptions": "Tilaukset", - "welcome_back": "Mit\u00e4 kuuluu?", - "bills_to_pay": "Laskuja maksettavana", - "net_worth": "Varallisuus", - "pref_last365": "Edellinen vuosi", - "pref_last90": "Viimeiset 90 p\u00e4iv\u00e4\u00e4", - "pref_last30": "Viimeiset 30 p\u00e4iv\u00e4\u00e4", - "pref_last7": "Viimeiset 7 p\u00e4iv\u00e4\u00e4", - "pref_YTD": "Vuoden alusta", - "pref_QTD": "Nelj\u00e4nnesvuoden alusta", - "pref_MTD": "Kuukauden alusta" - } -} diff --git a/frontend/src/i18n/fr_FR/index.js b/frontend/src/i18n/fr_FR/index.js deleted file mode 100644 index 44a684a21b..0000000000 --- a/frontend/src/i18n/fr_FR/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "fr", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nom", - "amount_min": "Montant minimum", - "amount_max": "Montant maximum", - "url": "Liens", - "title": "Titre", - "first_date": "Date de d\u00e9but", - "repetitions": "R\u00e9p\u00e9titions", - "description": "Description", - "iban": "Num\u00e9ro IBAN", - "skip": "Ignorer", - "date": "Date" - }, - "list": { - "name": "Nom", - "account_number": "N\u00b0 de compte", - "currentBalance": "Solde courant", - "lastActivity": "Activit\u00e9 r\u00e9cente", - "active": "Actif ?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Abonnements", - "transactions": "Op\u00e9rations", - "title_expenses": "D\u00e9penses", - "title_withdrawal": "D\u00e9penses", - "title_revenue": "Recette \/ revenu", - "title_deposit": "Recette \/ revenu", - "title_transfer": "Transferts", - "title_transfers": "Transferts", - "asset_accounts": "Comptes d\u2019actif", - "expense_accounts": "Comptes de d\u00e9penses", - "revenue_accounts": "Comptes de recettes", - "liabilities_accounts": "Passifs" - }, - "firefly": { - "administration_index": "Administration financi\u00e8re", - "actions": "Actions", - "edit": "Modifier", - "delete": "Supprimer", - "reconcile": "Rapprocher", - "create_new_asset": "Cr\u00e9er un nouveau compte d\u2019actif", - "confirm_action": "Confirmer l'action", - "new_budget": "Nouveau budget", - "new_asset_account": "Nouveau compte d\u2019actif", - "newTransfer": "Nouveau transfert", - "submission_options": "Options de soumission", - "apply_rules_checkbox": "Appliquer les r\u00e8gles", - "fire_webhooks_checkbox": "Lancer les webhooks", - "newDeposit": "Nouveau d\u00e9p\u00f4t", - "newWithdrawal": "Nouvelle d\u00e9pense", - "bills_paid": "Factures pay\u00e9es", - "left_to_spend": "Reste \u00e0 d\u00e9penser", - "no_budget": "(pas de budget)", - "budgeted": "Budg\u00e9tis\u00e9", - "spent": "D\u00e9pens\u00e9", - "no_bill": "(aucune facture)", - "rule_trigger_source_account_starts_choice": "Le nom du compte source commence par..", - "rule_trigger_source_account_ends_choice": "Le nom du compte source se termine par..", - "rule_trigger_source_account_is_choice": "Le nom du compte source est..", - "rule_trigger_source_account_contains_choice": "Le nom du compte source contient..", - "rule_trigger_account_id_choice": "L'un des deux comptes a pour identifiant..", - "rule_trigger_source_account_id_choice": "L'ID du compte source est exactement..", - "rule_trigger_destination_account_id_choice": "L'ID du compte de destination est exactement..", - "rule_trigger_account_is_cash_choice": "L'un des deux comptes est en esp\u00e8ces", - "rule_trigger_source_is_cash_choice": "Le compte source est un compte (d'esp\u00e8ces)", - "rule_trigger_destination_is_cash_choice": "Le compte de destination est un compte (d'esp\u00e8ces)", - "rule_trigger_source_account_nr_starts_choice": "Le num\u00e9ro \/ IBAN du compte source commence par..", - "rule_trigger_source_account_nr_ends_choice": "Le num\u00e9ro \/ IBAN du compte source se termine par..", - "rule_trigger_source_account_nr_is_choice": "Le num\u00e9ro \/ IBAN du compte source est..", - "rule_trigger_source_account_nr_contains_choice": "Le num\u00e9ro \/ IBAN du compte source contient..", - "rule_trigger_destination_account_starts_choice": "Le nom du compte de destination commence par..", - "rule_trigger_destination_account_ends_choice": "Le nom du compte de destination se termine par..", - "rule_trigger_destination_account_is_choice": "Le nom du compte de destination est..", - "rule_trigger_destination_account_contains_choice": "Le nom du compte de destination contient..", - "rule_trigger_destination_account_nr_starts_choice": "Le num\u00e9ro \/ IBAN du compte de destination commence par..", - "rule_trigger_destination_account_nr_ends_choice": "Le num\u00e9ro \/ IBAN du compte de destination se termine par..", - "rule_trigger_destination_account_nr_is_choice": "Le num\u00e9ro \/ IBAN du compte de destination est..", - "rule_trigger_destination_account_nr_contains_choice": "Le num\u00e9ro \/ IBAN du compte de destination contient..", - "rule_trigger_transaction_type_choice": "L'op\u00e9ration est du type..", - "rule_trigger_category_is_choice": "La cat\u00e9gorie est..", - "rule_trigger_amount_less_choice": "Le montant est inf\u00e9rieur ou \u00e9gal \u00e0 ..", - "rule_trigger_amount_is_choice": "Le montant est..", - "rule_trigger_amount_more_choice": "Le montant est sup\u00e9rieur ou \u00e9gal \u00e0..", - "rule_trigger_description_starts_choice": "Le description commence par..", - "rule_trigger_description_ends_choice": "La description se termine par..", - "rule_trigger_description_contains_choice": "La description contient..", - "rule_trigger_description_is_choice": "La description est..", - "rule_trigger_date_on_choice": "La date de l'op\u00e9ration est..", - "rule_trigger_date_before_choice": "La date de l'op\u00e9ration se situe avant..", - "rule_trigger_date_after_choice": "La date de l'op\u00e9ration se situe apr\u00e8s..", - "rule_trigger_created_at_on_choice": "L'op\u00e9ration a \u00e9t\u00e9 cr\u00e9\u00e9e le..", - "rule_trigger_updated_at_on_choice": "L'op\u00e9ration a \u00e9t\u00e9 mise \u00e0 jour pour la derni\u00e8re fois le..", - "rule_trigger_budget_is_choice": "Le budget est..", - "rule_trigger_tag_is_choice": "Un tag est..", - "rule_trigger_currency_is_choice": "La devise de l'op\u00e9ration est..", - "rule_trigger_foreign_currency_is_choice": "La devise \u00e9trang\u00e8re de l'op\u00e9ration est..", - "rule_trigger_has_attachments_choice": "A au moins autant de pi\u00e8ces jointes", - "rule_trigger_has_no_category_choice": "N'a pas de cat\u00e9gorie", - "rule_trigger_has_any_category_choice": "A une cat\u00e9gorie", - "rule_trigger_has_no_budget_choice": "N'a pas de budget", - "rule_trigger_has_any_budget_choice": "A un (des) budget", - "rule_trigger_has_no_bill_choice": "N'a pas de facture", - "rule_trigger_has_any_bill_choice": "A (au moins) une facture", - "rule_trigger_has_no_tag_choice": "N'a pas de tag(s)", - "rule_trigger_has_any_tag_choice": "Dispose d'un ou de plusieurs tags", - "rule_trigger_any_notes_choice": "A une (ou plusieurs) note(s)", - "rule_trigger_no_notes_choice": "N'a pas de note", - "rule_trigger_notes_is_choice": "Les notes sont..", - "rule_trigger_notes_contains_choice": "Les notes contiennent..", - "rule_trigger_notes_starts_choice": "Les notes commencent par..", - "rule_trigger_notes_ends_choice": "Les notes se terminent par..", - "rule_trigger_bill_is_choice": "La facture est..", - "rule_trigger_external_id_is_choice": "L'ID externe est..", - "rule_trigger_internal_reference_is_choice": "La r\u00e9f\u00e9rence interne est..", - "rule_trigger_journal_id_choice": "L'ID du journal d'op\u00e9rations est..", - "rule_trigger_any_external_url_choice": "La transaction a une (quelconque) URL externe", - "rule_trigger_no_external_url_choice": "L'op\u00e9ration n'a pas d'URL externe", - "rule_trigger_id_choice": "L'ID de l'op\u00e9ration est..", - "rule_action_delete_transaction_choice": "SUPPRIMER l'op\u00e9ration(!)", - "rule_action_set_category_choice": "D\u00e9finir la cat\u00e9gorie \u00e0..", - "rule_action_clear_category_choice": "Effacer les cat\u00e9gories", - "rule_action_set_budget_choice": "D\u00e9finir le budget \u00e0..", - "rule_action_clear_budget_choice": "Effacer les budgets", - "rule_action_add_tag_choice": "Ajouter un tag..", - "rule_action_remove_tag_choice": "Retirer le tag..", - "rule_action_remove_all_tags_choice": "Supprimer tous les tags", - "rule_action_set_description_choice": "D\u00e9finir la description \u00e0..", - "rule_action_update_piggy_choice": "Ajouter\/supprimer un montant dans la tirelire..", - "rule_action_append_description_choice": "Suffixer la description avec..", - "rule_action_prepend_description_choice": "Pr\u00e9fixer la description avec..", - "rule_action_set_source_account_choice": "D\u00e9finir le compte source \u00e0..", - "rule_action_set_destination_account_choice": "D\u00e9finir le compte de destination \u00e0..", - "rule_action_append_notes_choice": "Ajouter aux notes ..", - "rule_action_prepend_notes_choice": "Ajouter au d\u00e9but des notes..", - "rule_action_clear_notes_choice": "Supprimer les notes", - "rule_action_set_notes_choice": "Remplacer les notes par..", - "rule_action_link_to_bill_choice": "Lier \u00e0 une facture..", - "rule_action_convert_deposit_choice": "Convertir cette op\u00e9ration en d\u00e9p\u00f4t", - "rule_action_convert_withdrawal_choice": "Convertir cette op\u00e9ration en d\u00e9pense", - "rule_action_convert_transfer_choice": "Convertir cette op\u00e9ration en transfert", - "placeholder": "[R\u00e9serv\u00e9]", - "recurrences": "Op\u00e9rations p\u00e9riodiques", - "title_expenses": "D\u00e9penses", - "title_withdrawal": "D\u00e9penses", - "title_revenue": "Recette \/ revenu", - "pref_1D": "Un jour", - "pref_1W": "Une semaine", - "pref_1M": "Un mois", - "pref_3M": "Trois mois (trimestre)", - "pref_6M": "Six mois", - "pref_1Y": "Un an", - "repeat_freq_yearly": "annuellement", - "repeat_freq_half-year": "semestriel", - "repeat_freq_quarterly": "trimestriel", - "repeat_freq_monthly": "mensuel", - "repeat_freq_weekly": "hebdomadaire", - "single_split": "Ventilation", - "asset_accounts": "Comptes d\u2019actif", - "expense_accounts": "Comptes de d\u00e9penses", - "liabilities_accounts": "Passifs", - "undefined_accounts": "Comptes", - "name": "Nom", - "revenue_accounts": "Comptes de recettes", - "description": "Description", - "category": "Cat\u00e9gorie", - "title_deposit": "Recette \/ revenu", - "title_transfer": "Transferts", - "title_transfers": "Transferts", - "piggyBanks": "Tirelires", - "rules": "R\u00e8gles", - "accounts": "Comptes", - "categories": "Cat\u00e9gories", - "tags": "Tags", - "object_groups_page_title": "Groupes", - "reports": "Rapports", - "webhooks": "Webhooks", - "currencies": "Devises", - "administration": "Administration", - "profile": "Profil", - "source_account": "Compte source", - "destination_account": "Compte de destination", - "amount": "Montant", - "date": "Date", - "time": "Heure", - "preferences": "Pr\u00e9f\u00e9rences", - "transactions": "Op\u00e9rations", - "balance": "Solde", - "budgets": "Budgets", - "subscriptions": "Abonnements", - "welcome_back": "Quoi de neuf ?", - "bills_to_pay": "Factures \u00e0 payer", - "net_worth": "Avoir net", - "pref_last365": "L'ann\u00e9e derni\u00e8re", - "pref_last90": "Les 90 derniers jours", - "pref_last30": "Les 30 derniers jours", - "pref_last7": "Les 7 derniers jours", - "pref_YTD": "Ann\u00e9e en cours", - "pref_QTD": "Ce trimestre", - "pref_MTD": "Depuis le d\u00e9but du mois" - } -} diff --git a/frontend/src/i18n/hu_HU/index.js b/frontend/src/i18n/hu_HU/index.js deleted file mode 100644 index 25123dff21..0000000000 --- a/frontend/src/i18n/hu_HU/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "hu", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "N\u00e9v", - "amount_min": "Minim\u00e1lis \u00f6sszeg", - "amount_max": "Maxim\u00e1lis \u00f6sszeg", - "url": "URL", - "title": "C\u00edm", - "first_date": "Els\u0151 d\u00e1tum", - "repetitions": "Ism\u00e9tl\u00e9sek", - "description": "Le\u00edr\u00e1s", - "iban": "IBAN", - "skip": "Kihagy\u00e1s", - "date": "D\u00e1tum" - }, - "list": { - "name": "N\u00e9v", - "account_number": "Account number", - "currentBalance": "Aktu\u00e1lis egyenleg", - "lastActivity": "Utols\u00f3 aktivit\u00e1s", - "active": "Akt\u00edv?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "M\u0171veletek", - "edit": "Szerkeszt\u00e9s", - "delete": "T\u00f6rl\u00e9s", - "reconcile": "Egyeztet\u00e9s", - "create_new_asset": "\u00daj eszk\u00f6zsz\u00e1mla l\u00e9trehoz\u00e1sa", - "confirm_action": "Confirm action", - "new_budget": "\u00daj k\u00f6lts\u00e9gkeret", - "new_asset_account": "\u00daj eszk\u00f6zsz\u00e1mla", - "newTransfer": "\u00daj \u00e1tvezet\u00e9s", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "\u00daj bev\u00e9tel", - "newWithdrawal": "\u00daj k\u00f6lts\u00e9g", - "bills_paid": "Befizetett sz\u00e1ml\u00e1k", - "left_to_spend": "Elk\u00f6lthet\u0151", - "no_budget": "(nincs k\u00f6lts\u00e9gkeret)", - "budgeted": "Betervezett", - "spent": "Elk\u00f6lt\u00f6tt", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Forr\u00e1ssz\u00e1mla nev\u00e9nek eleje..", - "rule_trigger_source_account_ends_choice": "Forr\u00e1ssz\u00e1mla nev\u00e9nek v\u00e9ge..", - "rule_trigger_source_account_is_choice": "A forr\u00e1ssz\u00e1mla neve..", - "rule_trigger_source_account_contains_choice": "Forr\u00e1ssz\u00e1mla neve tartalmazza..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Forr\u00e1ssz\u00e1mla ID pontosan..", - "rule_trigger_destination_account_id_choice": "C\u00e9lsz\u00e1mla ID pontosan..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Forr\u00e1ssz\u00e1mla egy k\u00e9szp\u00e9nz sz\u00e1mla", - "rule_trigger_destination_is_cash_choice": "C\u00e9lsz\u00e1mla egy k\u00e9szp\u00e9nz sz\u00e1mla", - "rule_trigger_source_account_nr_starts_choice": "Forr\u00e1ssz\u00e1mla sz\u00e1mlasz\u00e1ma \/ IBAN eleje..", - "rule_trigger_source_account_nr_ends_choice": "Forr\u00e1ssz\u00e1mla sz\u00e1mlasz\u00e1ma \/ IBAN v\u00e9ge..", - "rule_trigger_source_account_nr_is_choice": "Forr\u00e1ssz\u00e1mla sz\u00e1ma \/ IBAN..", - "rule_trigger_source_account_nr_contains_choice": "Forr\u00e1ssz\u00e1mla sz\u00e1ma \/ IBAN tartalmazza..", - "rule_trigger_destination_account_starts_choice": "C\u00e9lsz\u00e1mla nev\u00e9nek eleje..", - "rule_trigger_destination_account_ends_choice": "C\u00e9lsz\u00e1mla nev\u00e9nek v\u00e9ge..", - "rule_trigger_destination_account_is_choice": "A c\u00e9lsz\u00e1mla neve..", - "rule_trigger_destination_account_contains_choice": "A c\u00e9lsz\u00e1mla neve tartalmazza..", - "rule_trigger_destination_account_nr_starts_choice": "C\u00e9lsz\u00e1mla sz\u00e1mlasz\u00e1ma \/ IBAN eleje..", - "rule_trigger_destination_account_nr_ends_choice": "C\u00e9lsz\u00e1mla sz\u00e1mlasz\u00e1ma \/ IBAN eleje..", - "rule_trigger_destination_account_nr_is_choice": "C\u00e9lsz\u00e1mla sz\u00e1ma \/ IBAN..", - "rule_trigger_destination_account_nr_contains_choice": "C\u00e9lsz\u00e1mla sz\u00e1ma \/ IBAN tartalmazza..", - "rule_trigger_transaction_type_choice": "A tranzakci\u00f3 t\u00edpusa..", - "rule_trigger_category_is_choice": "A kateg\u00f3ria..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Le\u00edr\u00e1s eleje..", - "rule_trigger_description_ends_choice": "Le\u00edr\u00e1s v\u00e9ge..", - "rule_trigger_description_contains_choice": "A le\u00edr\u00e1s tartalmazza..", - "rule_trigger_description_is_choice": "A le\u00edr\u00e1s pontosan..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Tranzakci\u00f3 d\u00e1tuma kor\u00e1bbi, mint..", - "rule_trigger_date_after_choice": "Tranzakci\u00f3 d\u00e1tuma k\u00e9s\u0151bbi, mint..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "A k\u00f6lts\u00e9gkeret..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "A tranzakci\u00f3 p\u00e9nzneme..", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "Legal\u00e1bb ennyi mell\u00e9klete van", - "rule_trigger_has_no_category_choice": "Nincs kateg\u00f3ri\u00e1ja", - "rule_trigger_has_any_category_choice": "Van kateg\u00f3ri\u00e1ja", - "rule_trigger_has_no_budget_choice": "Nincs k\u00f6lts\u00e9gkerete", - "rule_trigger_has_any_budget_choice": "Van k\u00f6lts\u00e9gkerete", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Nincsenek c\u00edmk\u00e9i", - "rule_trigger_has_any_tag_choice": "Van legal\u00e1bb egy c\u00edmk\u00e9je", - "rule_trigger_any_notes_choice": "Van megjegyz\u00e9se", - "rule_trigger_no_notes_choice": "Nincsenek megjegyz\u00e9sei", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "A sz\u00e1mla..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Minden kateg\u00f3ria t\u00f6rl\u00e9se", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Minden k\u00f6lts\u00e9gvet\u00e9s t\u00f6rl\u00e9se", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Minden c\u00edmke elt\u00e1vol\u00edt\u00e1sa", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Megjegyz\u00e9sek elt\u00e1vol\u00edt\u00e1sa", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "A tranzakci\u00f3 bev\u00e9tell\u00e9 konvert\u00e1l\u00e1sa", - "rule_action_convert_withdrawal_choice": "A tranzakci\u00f3 k\u00f6lts\u00e9gg\u00e9 konvert\u00e1l\u00e1sa", - "rule_action_convert_transfer_choice": "A tranzakci\u00f3 \u00e1tvezet\u00e9ss\u00e9 konvert\u00e1l\u00e1sa", - "placeholder": "[Placeholder]", - "recurrences": "Ism\u00e9tl\u0151d\u0151 tranzakci\u00f3k", - "title_expenses": "K\u00f6lts\u00e9gek", - "title_withdrawal": "K\u00f6lts\u00e9gek", - "title_revenue": "J\u00f6vedelem \/ bev\u00e9tel", - "pref_1D": "Egy nap", - "pref_1W": "Egy h\u00e9t", - "pref_1M": "Egy h\u00f3nap", - "pref_3M": "H\u00e1rom h\u00f3nap (negyed\u00e9v)", - "pref_6M": "Hat h\u00f3nap", - "pref_1Y": "Egy \u00e9v", - "repeat_freq_yearly": "\u00e9ves", - "repeat_freq_half-year": "f\u00e9l\u00e9vente", - "repeat_freq_quarterly": "negyed\u00e9ves", - "repeat_freq_monthly": "havi", - "repeat_freq_weekly": "heti", - "single_split": "Feloszt\u00e1s", - "asset_accounts": "Eszk\u00f6zsz\u00e1ml\u00e1k", - "expense_accounts": "K\u00f6lts\u00e9gsz\u00e1ml\u00e1k", - "liabilities_accounts": "K\u00f6telezetts\u00e9gek", - "undefined_accounts": "Accounts", - "name": "N\u00e9v", - "revenue_accounts": "J\u00f6vedelemsz\u00e1ml\u00e1k", - "description": "Le\u00edr\u00e1s", - "category": "Kateg\u00f3ria", - "title_deposit": "J\u00f6vedelem \/ bev\u00e9tel", - "title_transfer": "\u00c1tvezet\u00e9sek", - "title_transfers": "\u00c1tvezet\u00e9sek", - "piggyBanks": "Malacperselyek", - "rules": "Szab\u00e1lyok", - "accounts": "Sz\u00e1ml\u00e1k", - "categories": "Kateg\u00f3ri\u00e1k", - "tags": "C\u00edmk\u00e9k", - "object_groups_page_title": "Csoportok", - "reports": "Jelent\u00e9sek", - "webhooks": "Webhooks", - "currencies": "P\u00e9nznemek", - "administration": "Adminisztr\u00e1ci\u00f3", - "profile": "Profil", - "source_account": "Forr\u00e1s sz\u00e1mla", - "destination_account": "C\u00e9lsz\u00e1mla", - "amount": "\u00d6sszeg", - "date": "D\u00e1tum", - "time": "Time", - "preferences": "Be\u00e1ll\u00edt\u00e1sok", - "transactions": "Tranzakci\u00f3k", - "balance": "Egyenleg", - "budgets": "K\u00f6lts\u00e9gkeretek", - "subscriptions": "Subscriptions", - "welcome_back": "Mi a helyzet?", - "bills_to_pay": "Fizetend\u0151 sz\u00e1ml\u00e1k", - "net_worth": "Nett\u00f3 \u00e9rt\u00e9k", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/id_ID/index.js b/frontend/src/i18n/id_ID/index.js deleted file mode 100644 index c6c252d1f4..0000000000 --- a/frontend/src/i18n/id_ID/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "id", - "month_and_day_fns": "d MMMM, y" - }, - "form": { - "name": "Nama", - "amount_min": "Jumlah minimal", - "amount_max": "Jumlah maksimum", - "url": "URL", - "title": "Judul", - "first_date": "Tanggal pertama", - "repetitions": "Pengulangan", - "description": "Deskripsi", - "iban": "IBAN", - "skip": "Melewatkan", - "date": "Tanggal" - }, - "list": { - "name": "Nama", - "account_number": "Account number", - "currentBalance": "Saldo saat ini", - "lastActivity": "Aktifitas terakhir", - "active": "Aktif?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Anggaran", - "subscriptions": "Langganan", - "transactions": "Transaksi", - "title_expenses": "Pengeluaran", - "title_withdrawal": "Pengeluaran", - "title_revenue": "Penghasilan \/ pendapatan", - "title_deposit": "Penghasilan \/ pendapatan", - "title_transfer": "Transfer", - "title_transfers": "Transfer", - "asset_accounts": "Akun aset", - "expense_accounts": "Akun pengeluaran", - "revenue_accounts": "Akun pendapatan", - "liabilities_accounts": "Kewajiban" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Tindakan", - "edit": "Edit", - "delete": "Menghapus", - "reconcile": "Reconcile", - "create_new_asset": "Buat akun aset baru", - "confirm_action": "Confirm action", - "new_budget": "Anggaran baru", - "new_asset_account": "Akun aset baru", - "newTransfer": "Transfer baru", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Deposit baru", - "newWithdrawal": "Biaya baru", - "bills_paid": "Tagihan dibayar", - "left_to_spend": "Kiri untuk dibelanjakan", - "no_budget": "(no budget)", - "budgeted": "Dianggarkan", - "spent": "Menghabiskan", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "Source account name contains..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "Source account number \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Source account number \/ IBAN contains..", - "rule_trigger_destination_account_starts_choice": "Destination account name starts with..", - "rule_trigger_destination_account_ends_choice": "Destination account name ends with..", - "rule_trigger_destination_account_is_choice": "Destination account name is..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "Transaksi adalah tipe..", - "rule_trigger_category_is_choice": "Kategori adalah..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Deskripsi dimulai dengan..", - "rule_trigger_description_ends_choice": "Deskripsi diakhiri dengan..", - "rule_trigger_description_contains_choice": "Deskripsi berisi..", - "rule_trigger_description_is_choice": "Deskripsi adalah..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaction date is before..", - "rule_trigger_date_after_choice": "Transaction date is after..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Anggaran adalah..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Transaction currency is..", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "Paling tidak banyak keterikatan ini", - "rule_trigger_has_no_category_choice": "Tidak memiliki kategori", - "rule_trigger_has_any_category_choice": "Memiliki kategori (apapun)", - "rule_trigger_has_no_budget_choice": "Tidak memiliki anggaran", - "rule_trigger_has_any_budget_choice": "Memiliki anggaran (apapun)", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Tidak memiliki tag", - "rule_trigger_has_any_tag_choice": "Memiliki satu atau beberapa tag (apapun)", - "rule_trigger_any_notes_choice": "Telah ada catatan", - "rule_trigger_no_notes_choice": "Tidak memiliki catatan", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill is..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Kosongkan kategori apapun", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Kosongkan anggaran", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Hapus semua tag", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Hapus catatan apapun", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Convert the transaction to a deposit", - "rule_action_convert_withdrawal_choice": "Convert the transaction to a withdrawal", - "rule_action_convert_transfer_choice": "Convert the transaction to a transfer", - "placeholder": "[Placeholder]", - "recurrences": "Recurring transactions", - "title_expenses": "Beban", - "title_withdrawal": "Beban", - "title_revenue": "Pendapatan \/ penghasilan", - "pref_1D": "Suatu hari", - "pref_1W": "Satu minggu", - "pref_1M": "Satu bulan", - "pref_3M": "Tiga bulan (seperempat)", - "pref_6M": "Enam bulan", - "pref_1Y": "Satu tahun", - "repeat_freq_yearly": "tahunan", - "repeat_freq_half-year": "setiap setengah tahun", - "repeat_freq_quarterly": "triwulanan", - "repeat_freq_monthly": "bulanan", - "repeat_freq_weekly": "mingguan", - "single_split": "Pisah", - "asset_accounts": "Akun aset", - "expense_accounts": "Rekening pengeluaran", - "liabilities_accounts": "Liabilities", - "undefined_accounts": "Accounts", - "name": "Nama", - "revenue_accounts": "Akun pendapatan", - "description": "Deskripsi", - "category": "Kategori", - "title_deposit": "Pendapatan \/ penghasilan", - "title_transfer": "Transfer", - "title_transfers": "Transfer", - "piggyBanks": "Celengan babi", - "rules": "Aturan", - "accounts": "Akun", - "categories": "Kategori", - "tags": "Tag", - "object_groups_page_title": "Groups", - "reports": "Laporan", - "webhooks": "Webhooks", - "currencies": "Mata uang", - "administration": "Administrasi", - "profile": "Profil", - "source_account": "Akun sumber", - "destination_account": "Akun tujuan", - "amount": "Jumlah", - "date": "Tanggal", - "time": "Time", - "preferences": "Preferensi", - "transactions": "Transaksi", - "balance": "Keseimbangan", - "budgets": "Anggaran", - "subscriptions": "Subscriptions", - "welcome_back": "Apa yang sedang dimainkan?", - "bills_to_pay": "Bills untuk membayar", - "net_worth": "Nilai bersih", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/index.js b/frontend/src/i18n/index.js deleted file mode 100644 index a7fe5684a5..0000000000 --- a/frontend/src/i18n/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import enUS from './en_US' - -export default { - 'en-US': enUS -} diff --git a/frontend/src/i18n/it_IT/index.js b/frontend/src/i18n/it_IT/index.js deleted file mode 100644 index afe8ea0a48..0000000000 --- a/frontend/src/i18n/it_IT/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "it", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nome", - "amount_min": "Importo minimo", - "amount_max": "Importo massimo", - "url": "URL", - "title": "Titolo", - "first_date": "Prima volta", - "repetitions": "Ripetizioni", - "description": "Descrizione", - "iban": "IBAN", - "skip": "Salta ogni", - "date": "Data" - }, - "list": { - "name": "Nome", - "account_number": "Numero conto", - "currentBalance": "Saldo corrente", - "lastActivity": "Ultima attivit\u00e0", - "active": "Attivo" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budget", - "subscriptions": "Abbonamenti", - "transactions": "Transazioni", - "title_expenses": "Uscite", - "title_withdrawal": "Prelievi", - "title_revenue": "Redditi \/ entrate", - "title_deposit": "Versamenti", - "title_transfer": "Trasferimenti", - "title_transfers": "Trasferimenti", - "asset_accounts": "Conti attivit\u00e0", - "expense_accounts": "Conti uscite", - "revenue_accounts": "Conti entrate", - "liabilities_accounts": "Passivit\u00e0" - }, - "firefly": { - "administration_index": "Amministrazione finanziaria", - "actions": "Azioni", - "edit": "Modifica", - "delete": "Elimina", - "reconcile": "Riconcilia", - "create_new_asset": "Crea un nuovo conto attivit\u00e0", - "confirm_action": "Conferma azione", - "new_budget": "Nuovo budget", - "new_asset_account": "Nuovo conto attivit\u00e0", - "newTransfer": "Nuovo trasferimento", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Nuova entrata", - "newWithdrawal": "Nuova uscita", - "bills_paid": "Bollette pagate", - "left_to_spend": "Altro da spendere", - "no_budget": "(nessun budget)", - "budgeted": "Preventivato", - "spent": "Speso", - "no_bill": "(nessuna bolletta)", - "rule_trigger_source_account_starts_choice": "Il nome del conto di origine inizia con..", - "rule_trigger_source_account_ends_choice": "Il nome del conto di origine termina con..", - "rule_trigger_source_account_is_choice": "Il nome del conto di origine \u00e8..", - "rule_trigger_source_account_contains_choice": "Il nome del conto di origine contiene...", - "rule_trigger_account_id_choice": "Entrambi gli ID del conto sono esattamente..", - "rule_trigger_source_account_id_choice": "L'ID del conto di origine \u00e8 esattamente...", - "rule_trigger_destination_account_id_choice": "L'ID del conto di destinazione \u00e8 esattamente...", - "rule_trigger_account_is_cash_choice": "Entrambi i conti sono contanti", - "rule_trigger_source_is_cash_choice": "Il conte di origine \u00e8 un conto (in contanti)", - "rule_trigger_destination_is_cash_choice": "Il conto destinazione \u00e8 un conto (in contanti)", - "rule_trigger_source_account_nr_starts_choice": "Il numero del conto di origine \/ l'IBAN inizia con...", - "rule_trigger_source_account_nr_ends_choice": "Il numero del conto di origine \/ l'IBAN termina con...", - "rule_trigger_source_account_nr_is_choice": "Il numero del conto di origine \/ l'IBAN \u00e8...", - "rule_trigger_source_account_nr_contains_choice": "Il numero del conto di origine \/ l'IBAN contiene...", - "rule_trigger_destination_account_starts_choice": "Il nome del conto di destinazione inizia con...", - "rule_trigger_destination_account_ends_choice": "Il nome del conto di destinazione termina con...", - "rule_trigger_destination_account_is_choice": "Il nome del conto di destinazione \u00e8..", - "rule_trigger_destination_account_contains_choice": "Il nome del conto di destinazione contiene..", - "rule_trigger_destination_account_nr_starts_choice": "Il numero del conto di destinazione \/ l'IBAN inizia con..", - "rule_trigger_destination_account_nr_ends_choice": "Il numero del conto di destinazione \/ l'IBAN termina con..", - "rule_trigger_destination_account_nr_is_choice": "Il numero del conto di destinazione \/ l'IBAN \u00e8..", - "rule_trigger_destination_account_nr_contains_choice": "Il numero del conto di destinazione \/ l'IBAN contiene..", - "rule_trigger_transaction_type_choice": "La transazione \u00e8 di tipo...", - "rule_trigger_category_is_choice": "La categoria \u00e8...", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "L'importo \u00e8..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "La descrizione inizia con...", - "rule_trigger_description_ends_choice": "La descrizione termina con...", - "rule_trigger_description_contains_choice": "La descrizione contiene...", - "rule_trigger_description_is_choice": "La descrizione \u00e8...", - "rule_trigger_date_on_choice": "La data della transizione \u00e8..", - "rule_trigger_date_before_choice": "La data della transazione \u00e8 antecedente al...", - "rule_trigger_date_after_choice": "La data della transazione \u00e8 successiva al...", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Il budget \u00e8...", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "La valuta della transazione \u00e8...", - "rule_trigger_foreign_currency_is_choice": "La valuta estera della transazione \u00e8...", - "rule_trigger_has_attachments_choice": "Ha almeno cos\u00ec tanti allegati", - "rule_trigger_has_no_category_choice": "Non ha categoria", - "rule_trigger_has_any_category_choice": "Ha una (qualsiasi) categoria", - "rule_trigger_has_no_budget_choice": "Non ha un budget", - "rule_trigger_has_any_budget_choice": "Ha un (qualsiasi) budget", - "rule_trigger_has_no_bill_choice": "Non ha bollette", - "rule_trigger_has_any_bill_choice": "Ha una (qualsiasi) bolletta", - "rule_trigger_has_no_tag_choice": "Non ha etichette", - "rule_trigger_has_any_tag_choice": "Ha una o pi\u00f9 etichette (qualsiasi)", - "rule_trigger_any_notes_choice": "Ha una (qualsiasi) nota", - "rule_trigger_no_notes_choice": "Non ha note", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "La bollett\u00e0 \u00e8...", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "L'ID journal della transazione \u00e8...", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "La transazione non ha URL esterno", - "rule_trigger_id_choice": "L'ID della transazione \u00e8...", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Rimuovi da tutte le categorie", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Rimuovi da tutti i budget", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Rimuovi tutte le etichette", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Rimuovi tutte le note", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Converti la transazione in un deposito", - "rule_action_convert_withdrawal_choice": "Converti la transazione in un prelievo", - "rule_action_convert_transfer_choice": "Converti la transazione in un trasferimento", - "placeholder": "[Placeholder]", - "recurrences": "Transazioni ricorrenti", - "title_expenses": "Spese", - "title_withdrawal": "Spese", - "title_revenue": "Entrate", - "pref_1D": "Un giorno", - "pref_1W": "Una settimana", - "pref_1M": "Un mese", - "pref_3M": "Tre mesi (trimestre)", - "pref_6M": "Sei mesi", - "pref_1Y": "Un anno", - "repeat_freq_yearly": "annualmente", - "repeat_freq_half-year": "semestralmente", - "repeat_freq_quarterly": "trimestralmente", - "repeat_freq_monthly": "mensilmente", - "repeat_freq_weekly": "settimanalmente", - "single_split": "Divisione", - "asset_accounts": "Conti attivit\u00e0", - "expense_accounts": "Conti uscite", - "liabilities_accounts": "Passivit\u00e0", - "undefined_accounts": "Conti", - "name": "Nome", - "revenue_accounts": "Conti entrate", - "description": "Descrizione", - "category": "Categoria", - "title_deposit": "Redditi \/ entrate", - "title_transfer": "Trasferimenti", - "title_transfers": "Trasferimenti", - "piggyBanks": "Salvadanai", - "rules": "Regole", - "accounts": "Conti", - "categories": "Categorie", - "tags": "Etichette", - "object_groups_page_title": "Gruppi", - "reports": "Resoconti", - "webhooks": "Webhook", - "currencies": "Valute", - "administration": "Amministrazione", - "profile": "Profilo", - "source_account": "Conto di origine", - "destination_account": "Conto destinazione", - "amount": "Importo", - "date": "Data", - "time": "Ora", - "preferences": "Preferenze", - "transactions": "Transazioni", - "balance": "Saldo", - "budgets": "Budget", - "subscriptions": "Abbonamenti", - "welcome_back": "La tua situazione finanziaria", - "bills_to_pay": "Bollette da pagare", - "net_worth": "Patrimonio", - "pref_last365": "Anno scorso", - "pref_last90": "Ultimi 90 giorni", - "pref_last30": "Ultimi 30 giorni", - "pref_last7": "Ultimi 7 giorni", - "pref_YTD": "Ultimo anno", - "pref_QTD": "Ultimo trimestre", - "pref_MTD": "Ultimo mese" - } -} diff --git a/frontend/src/i18n/ja_JP/index.js b/frontend/src/i18n/ja_JP/index.js deleted file mode 100644 index 508ea2e266..0000000000 --- a/frontend/src/i18n/ja_JP/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "ja", - "month_and_day_fns": "y\u5e74 MMMM d\u65e5" - }, - "form": { - "name": "\u540d\u79f0", - "amount_min": "\u6700\u4f4e\u984d", - "amount_max": "\u4e0a\u9650\u984d", - "url": "URL", - "title": "\u30bf\u30a4\u30c8\u30eb", - "first_date": "\u6700\u521d\u306e\u65e5\u4ed8", - "repetitions": "\u30ea\u30d4\u30fc\u30c8", - "description": "\u8aac\u660e", - "iban": "IBAN", - "skip": "\u30b9\u30ad\u30c3\u30d7", - "date": "\u65e5\u4ed8" - }, - "list": { - "name": "\u540d\u79f0", - "account_number": "\u53e3\u5ea7\u756a\u53f7", - "currentBalance": "\u73fe\u5728\u306e\u6b8b\u9ad8", - "lastActivity": "\u6700\u7d42\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3", - "active": "\u6709\u52b9" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u4e88\u7b97", - "subscriptions": "\u8b1b\u8aad", - "transactions": "\u53d6\u5f15", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "\u652f\u51fa", - "title_revenue": "\u53ce\u76ca \/ \u53ce\u5165", - "title_deposit": "\u53ce\u76ca \/ \u53ce\u5165", - "title_transfer": "\u9001\u91d1", - "title_transfers": "\u9001\u91d1", - "asset_accounts": "\u8cc7\u7523\u53e3\u5ea7", - "expense_accounts": "\u652f\u51fa\u53e3\u5ea7", - "revenue_accounts": "\u53ce\u5165\u53e3\u5ea7", - "liabilities_accounts": "\u8ca0\u50b5" - }, - "firefly": { - "administration_index": "\u8ca1\u52d9\u7ba1\u7406", - "actions": "\u64cd\u4f5c", - "edit": "\u7de8\u96c6", - "delete": "\u524a\u9664", - "reconcile": "\u7167\u5408", - "create_new_asset": "\u65b0\u3057\u3044\u8cc7\u7523\u53e3\u5ea7\u3092\u4f5c\u6210", - "confirm_action": "\u64cd\u4f5c\u3092\u78ba\u8a8d", - "new_budget": "\u65b0\u3057\u3044\u4e88\u7b97", - "new_asset_account": "\u65b0\u3057\u3044\u8cc7\u7523\u53e3\u5ea7", - "newTransfer": "\u65b0\u3057\u3044\u9001\u91d1", - "submission_options": "\u9001\u4fe1\u30aa\u30d7\u30b7\u30e7\u30f3", - "apply_rules_checkbox": "\u30eb\u30fc\u30eb\u3092\u9069\u7528", - "fire_webhooks_checkbox": "Webhook\u3092\u5b9f\u884c", - "newDeposit": "\u65b0\u3057\u3044\u5165\u91d1", - "newWithdrawal": "\u65b0\u3057\u3044\u652f\u51fa", - "bills_paid": "\u652f\u6255\u3044\u6e08\u307f\u8acb\u6c42", - "left_to_spend": "\u652f\u51fa\u3067\u304d\u308b\u6b8b\u308a", - "no_budget": "(\u4e88\u7b97\u306a\u3057)", - "budgeted": "\u4e88\u7b97\u8a2d\u5b9a", - "spent": "\u652f\u51fa", - "no_bill": "(\u8acb\u6c42\u306a\u3057)", - "rule_trigger_source_account_starts_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u540d\u304c...\u3067\u59cb\u307e\u308b", - "rule_trigger_source_account_ends_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u540d\u304c\u2026\u3067\u7d42\u308f\u308b", - "rule_trigger_source_account_is_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u540d\u304c...", - "rule_trigger_source_account_contains_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u540d\u304c\u2026\u3092\u542b\u3080", - "rule_trigger_account_id_choice": "\u3069\u3061\u3089\u304b\u306e\u53e3\u5ea7ID\u304c\u2026", - "rule_trigger_source_account_id_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7ID\u304c\u2026", - "rule_trigger_destination_account_id_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7ID\u304c\u2026", - "rule_trigger_account_is_cash_choice": "\u3069\u3061\u3089\u304b\u306e\u53e3\u5ea7\u304c\u73fe\u91d1", - "rule_trigger_source_is_cash_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u304c\u73fe\u91d1\u53e3\u5ea7", - "rule_trigger_destination_is_cash_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u304c\u73fe\u91d1\u53e3\u5ea7", - "rule_trigger_source_account_nr_starts_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c\u2026\u3067\u59cb\u307e\u308b", - "rule_trigger_source_account_nr_ends_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c\u2026\u3067\u7d42\u308f\u308b", - "rule_trigger_source_account_nr_is_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c\u2026", - "rule_trigger_source_account_nr_contains_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c\u2026\u3092\u542b\u3080", - "rule_trigger_destination_account_starts_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u540d\u304c...\u3067\u59cb\u307e\u308b", - "rule_trigger_destination_account_ends_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u540d\u304c...\u3067\u7d42\u308f\u308b", - "rule_trigger_destination_account_is_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u540d\u304c\u2026", - "rule_trigger_destination_account_contains_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u540d\u304c...\u3092\u542b\u3080", - "rule_trigger_destination_account_nr_starts_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c...\u3067\u59cb\u307e\u308b", - "rule_trigger_destination_account_nr_ends_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c...\u3067\u7d42\u308f\u308b", - "rule_trigger_destination_account_nr_is_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c\u2026", - "rule_trigger_destination_account_nr_contains_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u756a\u53f7\/IBAN\u304c...\u3092\u542b\u3080", - "rule_trigger_transaction_type_choice": "\u53d6\u5f15\u7a2e\u5225\u304c\u2026", - "rule_trigger_category_is_choice": "\u30ab\u30c6\u30b4\u30ea\u304c\u2026", - "rule_trigger_amount_less_choice": "\u91d1\u984d\u304c...\u4ee5\u4e0b", - "rule_trigger_amount_is_choice": "\u91d1\u984d\u304c\u2026", - "rule_trigger_amount_more_choice": "\u91d1\u984d\u304c...\u4ee5\u4e0a", - "rule_trigger_description_starts_choice": "\u6982\u8981\u304c\u2026\u3067\u59cb\u307e\u308b", - "rule_trigger_description_ends_choice": "\u6982\u8981\u304c\u2026\u3067\u7d42\u308f\u308b", - "rule_trigger_description_contains_choice": "\u6982\u8981\u306b\u2026\u3092\u542b\u3080", - "rule_trigger_description_is_choice": "\u6982\u8981\u304c\u2026", - "rule_trigger_date_on_choice": "\u53d6\u5f15\u65e5\u304c\u2026", - "rule_trigger_date_before_choice": "\u53d6\u5f15\u65e5\u304c\u2026\u3088\u308a\u524d", - "rule_trigger_date_after_choice": "\u53d6\u5f15\u65e5\u304c\u2026\u3088\u308a\u5f8c", - "rule_trigger_created_at_on_choice": "\u53d6\u5f15\u4f5c\u6210\u65e5\u304c...", - "rule_trigger_updated_at_on_choice": "\u53d6\u5f15\u306e\u6700\u7d42\u7de8\u96c6\u65e5\u304c", - "rule_trigger_budget_is_choice": "\u4e88\u7b97\u304c\u2026", - "rule_trigger_tag_is_choice": "\u30bf\u30b0\u304c...", - "rule_trigger_currency_is_choice": "\u53d6\u5f15\u901a\u8ca8\u304c\u2026", - "rule_trigger_foreign_currency_is_choice": "\u53d6\u5f15\u5916\u56fd\u901a\u8ca8\u304c\u2026", - "rule_trigger_has_attachments_choice": "\u6b21\u306e\u500b\u6570\u4ee5\u4e0a\u306e\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308b", - "rule_trigger_has_no_category_choice": "\u30ab\u30c6\u30b4\u30ea\u306a\u3057", - "rule_trigger_has_any_category_choice": "(\u4efb\u610f\u306e) \u30ab\u30c6\u30b4\u30ea\u304c\u3042\u308b", - "rule_trigger_has_no_budget_choice": "\u4e88\u7b97\u3092\u3082\u305f\u306a\u3044", - "rule_trigger_has_any_budget_choice": "\u4e88\u7b97\u304c\u3042\u308b\u53d6\u5f15", - "rule_trigger_has_no_bill_choice": "\u8acb\u6c42\u304c\u306a\u3044", - "rule_trigger_has_any_bill_choice": "\u8acb\u6c42\u304c\u3042\u308b", - "rule_trigger_has_no_tag_choice": "\u30bf\u30b0\u304c\u306a\u3044", - "rule_trigger_has_any_tag_choice": "\u4e00\u3064\u4ee5\u4e0a\u306e\u30bf\u30b0\u304c\u3042\u308b", - "rule_trigger_any_notes_choice": "\u5099\u8003\u304c\u3042\u308b", - "rule_trigger_no_notes_choice": "\u5099\u8003\u304c\u306a\u3044", - "rule_trigger_notes_is_choice": "\u5099\u8003\u304c...", - "rule_trigger_notes_contains_choice": "\u5099\u8003\u304c\u6b21\u3092\u542b\u3080", - "rule_trigger_notes_starts_choice": "\u5099\u8003\u304c...\u3067\u59cb\u307e\u308b", - "rule_trigger_notes_ends_choice": "\u5099\u8003\u304c...\u3067\u7d42\u308f\u308b", - "rule_trigger_bill_is_choice": "\u8acb\u6c42\u304c\u2026", - "rule_trigger_external_id_is_choice": "\u5916\u90e8 ID \u304c\u2026", - "rule_trigger_internal_reference_is_choice": "\u5185\u90e8\u53c2\u7167\u304c\u2026", - "rule_trigger_journal_id_choice": "\u53d6\u5f15ID\u304c\u2026", - "rule_trigger_any_external_url_choice": "\u5916\u90e8URL\u304c\u3042\u308b\u53d6\u5f15", - "rule_trigger_no_external_url_choice": "\u53d6\u5f15\u306b\u5916\u90e8 URL \u304c\u306a\u3044", - "rule_trigger_id_choice": "\u53d6\u5f15ID\u304c\u2026", - "rule_action_delete_transaction_choice": "\u53d6\u5f15\u3092\u524a\u9664 (!)", - "rule_action_set_category_choice": "\u30ab\u30c6\u30b4\u30ea\u3092...\u306b\u8a2d\u5b9a", - "rule_action_clear_category_choice": "\u30ab\u30c6\u30b4\u30ea\u3092\u30af\u30ea\u30a2", - "rule_action_set_budget_choice": "\u4e88\u7b97\u3092...\u306b\u8a2d\u5b9a", - "rule_action_clear_budget_choice": "\u4e88\u7b97\u3092\u30af\u30ea\u30a2", - "rule_action_add_tag_choice": "\u30bf\u30b0\u2026\u3092\u8ffd\u52a0", - "rule_action_remove_tag_choice": "\u30bf\u30b0\u2026\u3092\u524a\u9664", - "rule_action_remove_all_tags_choice": "\u3059\u3079\u3066\u306e\u30bf\u30b0\u3092\u524a\u9664", - "rule_action_set_description_choice": "\u8aac\u660e\u3092...\u306b\u8a2d\u5b9a", - "rule_action_update_piggy_choice": "\u53d6\u5f15\u91d1\u984d\u3092\u8caf\u91d1\u7bb1...\u306b\u52a0\u7b97\/\u6e1b\u7b97\u3059\u308b", - "rule_action_append_description_choice": "\u6982\u8981\u306e\u7d42\u308f\u308a\u306b\u2026\u3092\u8ffd\u52a0", - "rule_action_prepend_description_choice": "\u6982\u8981\u306e\u7d42\u308f\u308a\u306b\u2026\u3092\u8ffd\u52a0", - "rule_action_set_source_account_choice": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7\u3092...\u306b\u8a2d\u5b9a", - "rule_action_set_destination_account_choice": "\u9810\u3051\u5165\u308c\u53e3\u5ea7\u3092...\u306b\u8a2d\u5b9a", - "rule_action_append_notes_choice": "\u5099\u8003\u306e\u7d42\u308f\u308a\u306b...\u3092\u8ffd\u52a0", - "rule_action_prepend_notes_choice": "\u5099\u8003\u306e\u7d42\u308f\u308a\u306b\u2026\u3092\u8ffd\u52a0", - "rule_action_clear_notes_choice": "\u5099\u8003\u3092\u524a\u9664", - "rule_action_set_notes_choice": "\u5099\u8003\u306b...\u3092\u8a2d\u5b9a", - "rule_action_link_to_bill_choice": "\u8acb\u6c42...\u306b\u30ea\u30f3\u30af", - "rule_action_convert_deposit_choice": "\u53d6\u5f15\u3092\u5165\u91d1\u306b\u5909\u63db", - "rule_action_convert_withdrawal_choice": "\u53d6\u5f15\u3092\u51fa\u91d1\u306b\u5909\u63db", - "rule_action_convert_transfer_choice": "\u53d6\u5f15\u3092\u9001\u91d1\u306b\u5909\u63db", - "placeholder": "[Placeholder]", - "recurrences": "\u5b9a\u671f\u7684\u306a\u53d6\u5f15", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "\u652f\u51fa", - "title_revenue": "\u53ce\u76ca \/ \u53ce\u5165", - "pref_1D": "1\u65e5", - "pref_1W": "1\u9031", - "pref_1M": "1\u30f5\u6708", - "pref_3M": "3\u30f6\u6708 (\u56db\u534a\u671f)", - "pref_6M": "6\u30f6\u6708", - "pref_1Y": "1\u5e74", - "repeat_freq_yearly": "\u6bce\u5e74", - "repeat_freq_half-year": "\u534a\u5e74\u3054\u3068", - "repeat_freq_quarterly": "\u56db\u534a\u671f\u3054\u3068", - "repeat_freq_monthly": "\u6bce\u6708", - "repeat_freq_weekly": "\u9031\u6bce", - "single_split": "\u5206\u5272", - "asset_accounts": "\u8cc7\u7523\u53e3\u5ea7", - "expense_accounts": "\u652f\u51fa\u53e3\u5ea7", - "liabilities_accounts": "\u50b5\u52d9", - "undefined_accounts": "\u53e3\u5ea7", - "name": "\u540d\u79f0", - "revenue_accounts": "\u53ce\u5165\u53e3\u5ea7", - "description": "\u6982\u8981", - "category": "\u30ab\u30c6\u30b4\u30ea", - "title_deposit": "\u53ce\u76ca \/ \u53ce\u5165", - "title_transfer": "\u9001\u91d1", - "title_transfers": "\u9001\u91d1", - "piggyBanks": "\u8caf\u91d1\u7bb1", - "rules": "\u30eb\u30fc\u30eb", - "accounts": "\u53e3\u5ea7", - "categories": "\u30ab\u30c6\u30b4\u30ea", - "tags": "\u30bf\u30b0", - "object_groups_page_title": "\u30b0\u30eb\u30fc\u30d7", - "reports": "\u30ec\u30dd\u30fc\u30c8", - "webhooks": "Webhook", - "currencies": "\u901a\u8ca8", - "administration": "\u7ba1\u7406", - "profile": "\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb", - "source_account": "\u5f15\u304d\u51fa\u3057\u53e3\u5ea7", - "destination_account": "\u9810\u3051\u5165\u308c\u53e3\u5ea7", - "amount": "\u91d1\u984d", - "date": "\u65e5\u4ed8", - "time": "\u6642\u523b", - "preferences": "\u8a2d\u5b9a", - "transactions": "\u53d6\u5f15", - "balance": "\u53ce\u652f", - "budgets": "\u4e88\u7b97", - "subscriptions": "\u8b1b\u8aad", - "welcome_back": "\u6982\u8981", - "bills_to_pay": "\u672a\u6255\u3044\u306e\u8acb\u6c42", - "net_worth": "\u7d14\u8cc7\u7523", - "pref_last365": "\u6628\u5e74", - "pref_last90": "\u904e\u53bb 90 \u65e5\u9593", - "pref_last30": "\u904e\u53bb 30 \u65e5\u9593", - "pref_last7": "\u904e\u53bb 7 \u65e5\u9593", - "pref_YTD": "\u5e74\u59cb\u304b\u3089\u4eca\u65e5\u307e\u3067", - "pref_QTD": "\u4eca\u56db\u534a\u671f", - "pref_MTD": "\u4eca\u6708" - } -} diff --git a/frontend/src/i18n/ko_KR/index.js b/frontend/src/i18n/ko_KR/index.js deleted file mode 100644 index c8eff4e54b..0000000000 --- a/frontend/src/i18n/ko_KR/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "ko", - "month_and_day_fns": "y\ub144 MMMM d\uc77c" - }, - "form": { - "name": "\uc774\ub984", - "amount_min": "\ucd5c\uc18c \uae08\uc561", - "amount_max": "\ucd5c\ub300 \uae08\uc561", - "url": "URL", - "title": "\uc81c\ubaa9", - "first_date": "\ucd5c\ucd08 \uc77c\uc790", - "repetitions": "\ubc18\ubcf5", - "description": "\uc124\uba85", - "iban": "IBAN", - "skip": "\uac74\ub108\ub6f0\uae30", - "date": "\ub0a0\uc9dc" - }, - "list": { - "name": "\uc774\ub984", - "account_number": "\uacc4\uc88c \ubc88\ud638", - "currentBalance": "\ud604\uc7ac \uc794\uace0", - "lastActivity": "\ub9c8\uc9c0\ub9c9 \ud65c\ub3d9", - "active": "\ud65c\uc131 \uc0c1\ud0dc\uc785\ub2c8\uae4c?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\uc608\uc0b0", - "subscriptions": "\uad6c\ub3c5", - "transactions": "\uac70\ub798", - "title_expenses": "\uc9c0\ucd9c", - "title_withdrawal": "\uc9c0\ucd9c", - "title_revenue": "\uc218\uc775 \/ \uc218\uc785", - "title_deposit": "\uc218\uc775 \/ \uc218\uc785", - "title_transfer": "\uc774\uccb4", - "title_transfers": "\uc774\uccb4", - "asset_accounts": "\uc790\uc0b0 \uacc4\uc815", - "expense_accounts": "\uc9c0\ucd9c \uacc4\uc815", - "revenue_accounts": "\uc218\uc775 \uacc4\uc815", - "liabilities_accounts": "\ubd80\ucc44" - }, - "firefly": { - "administration_index": "\uc7ac\uc815 \uad00\ub9ac", - "actions": "\uc561\uc158", - "edit": "\uc218\uc815", - "delete": "\uc0ad\uc81c", - "reconcile": "\uc870\uc815", - "create_new_asset": "\uc0c8 \uc790\uc0b0 \uacc4\uc815 \uc0dd\uc131", - "confirm_action": "\uc561\uc158 \ud655\uc778", - "new_budget": "\uc0c8 \uc608\uc0b0", - "new_asset_account": "\uc0c8 \uc790\uc0b0 \uacc4\uc815", - "newTransfer": "\uc2e0\uaddc \uc774\uccb4", - "submission_options": "\uc81c\ucd9c \uc635\uc158", - "apply_rules_checkbox": "\uaddc\uce59 \uc801\uc6a9", - "fire_webhooks_checkbox": "\uc6f9\ud6c5 \uc2e4\ud589", - "newDeposit": "\uc2e0\uaddc \uc785\uae08", - "newWithdrawal": "\uc2e0\uaddc \ube44\uc6a9", - "bills_paid": "\uccad\uad6c\uc11c \uacb0\uc81c", - "left_to_spend": "\ub0a8\uc740 \uc9c0\ucd9c", - "no_budget": "(\uc608\uc0b0 \uc5c6\uc74c)", - "budgeted": "\uc608\uc0b0", - "spent": "\uc9c0\ucd9c", - "no_bill": "(\uccad\uad6c\uc11c \uc5c6\uc74c)", - "rule_trigger_source_account_starts_choice": "\uc18c\uc2a4 \uacc4\uc815 \uc774\ub984\uc740 ...\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.", - "rule_trigger_source_account_ends_choice": "\uc18c\uc2a4 \uacc4\uc815 \uc774\ub984\uc740 ...\ub85c \ub05d\ub0a9\ub2c8\ub2e4.", - "rule_trigger_source_account_is_choice": "\uc18c\uc2a4 \uacc4\uc815 \uc774\ub984\uc740...", - "rule_trigger_source_account_contains_choice": "\uc18c\uc2a4 \uacc4\uc815 \uc774\ub984\uc5d0\ub294 \ub2e4\uc74c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4.", - "rule_trigger_account_id_choice": "\uacc4\uc815\uc911 \ud558\ub098\uc758 ID\ub294 \uc815\ud655\ud788..", - "rule_trigger_source_account_id_choice": "\uc18c\uc2a4 \uacc4\uc815 ID\ub294 \uc815\ud655\ud788..", - "rule_trigger_destination_account_id_choice": "\ub300\uc0c1 \uacc4\uc815 ID\ub294 \uc815\ud655\ud788..", - "rule_trigger_account_is_cash_choice": "\uacc4\uc815\uc911 \ud558\ub098\ub294 \ud604\uae08\uc785\ub2c8\ub2e4", - "rule_trigger_source_is_cash_choice": "\uc18c\uc2a4 \uacc4\uc815\uc740 (\ud604\uae08) \uacc4\uc815\uc785\ub2c8\ub2e4", - "rule_trigger_destination_is_cash_choice": "\ub300\uc0c1 \uacc4\uc815\uc740 (\ud604\uae08) \uacc4\uc815\uc785\ub2c8\ub2e4", - "rule_trigger_source_account_nr_starts_choice": "\uc18c\uc2a4 \uacc4\uc88c \ubc88\ud638\/IBAN\uc740...\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.", - "rule_trigger_source_account_nr_ends_choice": "\uc18c\uc2a4 \uacc4\uc815 \ubc88\ud638 \/ IBAN\uc740 ...\ub85c \ub05d\ub0a9\ub2c8\ub2e4", - "rule_trigger_source_account_nr_is_choice": "\uc18c\uc2a4 \uacc4\uc815 \ubc88\ud638 \/ IBAN\uc740..", - "rule_trigger_source_account_nr_contains_choice": "\uc18c\uc2a4 \uacc4\uc815 \ubc88\ud638 \/ IBAN\uc740 ..\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4", - "rule_trigger_destination_account_starts_choice": "\ub300\uc0c1 \uacc4\uc815 \uc774\ub984\uc740 ...\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4.", - "rule_trigger_destination_account_ends_choice": "\ub300\uc0c1 \uacc4\uc815 \uc774\ub984\uc740 ...\ub85c \ub05d\ub0a9\ub2c8\ub2e4", - "rule_trigger_destination_account_is_choice": "\ub300\uc0c1 \uacc4\uc815 \uc774\ub984\uc740..", - "rule_trigger_destination_account_contains_choice": "\ub300\uc0c1 \uacc4\uc815 \uc774\ub984\uc740 ...\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4", - "rule_trigger_destination_account_nr_starts_choice": "\ub300\uc0c1 \uacc4\uc88c \ubc88\ud638 \/ IBAN\uc740...\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4", - "rule_trigger_destination_account_nr_ends_choice": "\ub300\uc0c1 \uacc4\uc88c \ubc88\ud638 \/ IBAN\uc740...\ub85c \ub05d\ub0a9\ub2c8\ub2e4", - "rule_trigger_destination_account_nr_is_choice": "\ub300\uc0c1 \uacc4\uc815 \ubc88\ud638 \/ IBAN\uc740..", - "rule_trigger_destination_account_nr_contains_choice": "\ub300\uc0c1 \uacc4\uc88c \ubc88\ud638 \/ IBAN\uc740...\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4", - "rule_trigger_transaction_type_choice": "\uac70\ub798\ub294 .. \uc720\ud615\uc785\ub2c8\ub2e4", - "rule_trigger_category_is_choice": "\uce74\ud14c\uace0\ub9ac\ub294 ..", - "rule_trigger_amount_less_choice": "\uae08\uc561\uc774 .. \uc640 \uc791\uac70\ub098 \uac19\uc74c", - "rule_trigger_amount_is_choice": "\uae08\uc561\uc740..", - "rule_trigger_amount_more_choice": "\uae08\uc561\uc774 .. \uc640 \ud06c\uac70\ub098 \uac19\uc74c", - "rule_trigger_description_starts_choice": "\uc124\uba85\uc774 ..\ub85c \uc2dc\uc791\ud569\ub2c8\ub2e4", - "rule_trigger_description_ends_choice": "\uc124\uba85\uc774 ..\ub85c \ub05d\ub0a9\ub2c8\ub2e4", - "rule_trigger_description_contains_choice": "\uc124\uba85\uc740 ..\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4", - "rule_trigger_description_is_choice": "\uc124\uba85\uc740..", - "rule_trigger_date_on_choice": "\uac70\ub798 \ub0a0\uc9dc\ub294..", - "rule_trigger_date_before_choice": "\uac70\ub798 \ub0a0\uc9dc\ub294 .. \uc774\uc804\uc785\ub2c8\ub2e4", - "rule_trigger_date_after_choice": "\uac70\ub798 \ub0a0\uc9dc\ub294 .. \uc774\ud6c4\uc785\ub2c8\ub2e4", - "rule_trigger_created_at_on_choice": "\uac70\ub798\uac00 \uc774\ub8e8\uc5b4\uc9c4 \ub0a0\uc9dc\ub294..", - "rule_trigger_updated_at_on_choice": "\uac70\ub798\uac00 \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc218\uc815\ub41c \ub0a0\uc9dc\ub294...", - "rule_trigger_budget_is_choice": "\uc608\uc0b0\uc740..", - "rule_trigger_tag_is_choice": "\ubaa8\ub4e0 \ud0dc\uadf8\ub294...", - "rule_trigger_currency_is_choice": "\uac70\ub798 \ud1b5\ud654\ub294..", - "rule_trigger_foreign_currency_is_choice": "\uac70\ub798 \uc678\ud654 \ud1b5\ud654\ub294..", - "rule_trigger_has_attachments_choice": "\ucd5c\uc18c\ud55c \uc774 \uc815\ub3c4\uc758 \ucca8\ubd80 \ud30c\uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4.", - "rule_trigger_has_no_category_choice": "\uce74\ud14c\uace0\ub9ac\uac00 \uc5c6\uc74c", - "rule_trigger_has_any_category_choice": "\uce74\ud14c\uace0\ub9ac\uac00 \uc788\uc74c", - "rule_trigger_has_no_budget_choice": "\uc608\uc0b0\uc774 \uc5c6\uc74c", - "rule_trigger_has_any_budget_choice": "\uc608\uc0b0\uc774 \uc788\uc74c", - "rule_trigger_has_no_bill_choice": "\uccad\uad6c\uc11c\uac00 \uc5c6\uc74c", - "rule_trigger_has_any_bill_choice": "\uccad\uad6c\uc11c\uac00 \uc788\uc74c", - "rule_trigger_has_no_tag_choice": "\ud0dc\uadf8 \uc5c6\uc74c", - "rule_trigger_has_any_tag_choice": "\ud558\ub098 \uc774\uc0c1\uc758 \ud0dc\uadf8\uac00 \uc788\uc74c", - "rule_trigger_any_notes_choice": "\uba54\ubaa8\uac00 \uc788\uc74c", - "rule_trigger_no_notes_choice": "\uba54\ubaa8\uac00 \uc5c6\uc74c", - "rule_trigger_notes_is_choice": "\uba54\ubaa8\ub294..", - "rule_trigger_notes_contains_choice": "\ub178\ud2b8\ub294 \ub2e4\uc74c\uc744 \ud3ec\ud568", - "rule_trigger_notes_starts_choice": "\ub178\ud2b8\ub294 \ub2e4\uc74c\uc73c\ub85c \uc2dc\uc791", - "rule_trigger_notes_ends_choice": "\ub178\ud2b8\ub294 \ub2e4\uc74c\uc73c\ub85c \ub05d\ub0a8", - "rule_trigger_bill_is_choice": "\uccad\uad6c\uc11c\ub294..", - "rule_trigger_external_id_is_choice": "\uc678\ubd80 ID\ub294..", - "rule_trigger_internal_reference_is_choice": "\ub0b4\ubd80 \ucc38\uc870\ub294..", - "rule_trigger_journal_id_choice": "\uac70\ub798 \uc800\ub110 ID\ub294..", - "rule_trigger_any_external_url_choice": "\uac70\ub798\uc5d0 (\uc5b4\ub5a4) \uc678\ubd80 URL\uc774 \uc788\uc74c", - "rule_trigger_no_external_url_choice": "\uac70\ub798\uc5d0 \uc678\ubd80 URL\uc774 \uc5c6\uc2b5\ub2c8\ub2e4", - "rule_trigger_id_choice": "\uac70\ub798 ID\ub294..", - "rule_action_delete_transaction_choice": "\uac70\ub798 \uc0ad\uc81c(!)", - "rule_action_set_category_choice": "\uce74\ud14c\uace0\ub9ac\ub97c .. \ub85c \uc124\uc815", - "rule_action_clear_category_choice": "\uce74\ud14c\uace0\ub9ac \uc9c0\uc6b0\uae30", - "rule_action_set_budget_choice": "\uc608\uc0b0\uc744 .. \ub85c \uc124\uc815", - "rule_action_clear_budget_choice": "\uc608\uc0b0 \uc9c0\uc6b0\uae30", - "rule_action_add_tag_choice": "\ud0dc\uadf8 \ucd94\uac00...", - "rule_action_remove_tag_choice": "\ud0dc\uadf8 \uc81c\uac70 ..", - "rule_action_remove_all_tags_choice": "\ubaa8\ub4e0 \ud0dc\uadf8 \uc81c\uac70", - "rule_action_set_description_choice": "\uc124\uba85\uc744 ..\uc73c\ub85c \uc124\uc815", - "rule_action_update_piggy_choice": "\uc800\uae08\ud1b5\uc5d0 \uac70\ub798\uae08\uc561 \ucd94\uac00\/\uc81c\uac70 ..", - "rule_action_append_description_choice": "..\ub85c \uc124\uba85 \ucd94\uac00", - "rule_action_prepend_description_choice": "..\ub85c \uc124\uba85\uc55e\uc5d0 \ucd94\uac00", - "rule_action_set_source_account_choice": "\uc18c\uc2a4 \uacc4\uc815\uc744 ..\ub85c \uc124\uc815", - "rule_action_set_destination_account_choice": "\ub300\uc0c1 \uacc4\uc815\uc744 ..\ub85c \uc124\uc815", - "rule_action_append_notes_choice": "..\ub85c \uba54\ubaa8 \ucd94\uac00", - "rule_action_prepend_notes_choice": "\ub178\ud2b8 \uc55e\uc5d0 .. \ucd94\uac00", - "rule_action_clear_notes_choice": "\ub178\ud2b8 \uc81c\uac70", - "rule_action_set_notes_choice": "\ub178\ud2b8\ub97c ..\ub85c \uc124\uc815", - "rule_action_link_to_bill_choice": "\uccad\uad6c\uc11c \ub9c1\ud06c ..", - "rule_action_convert_deposit_choice": "\uac70\ub798\ub97c \uc785\uae08\uc73c\ub85c \uc804\ud658", - "rule_action_convert_withdrawal_choice": "\uac70\ub798\ub97c \ucd9c\uae08\uc73c\ub85c \uc804\ud658", - "rule_action_convert_transfer_choice": "\uac70\ub798\ub97c \uc774\uccb4\ub85c \uc804\ud658", - "placeholder": "[Placeholder]", - "recurrences": "\ubc18\ubcf5 \uac70\ub798", - "title_expenses": "\uc9c0\ucd9c", - "title_withdrawal": "\uc9c0\ucd9c", - "title_revenue": "\uc218\uc775 \/ \uc218\uc785", - "pref_1D": "\ud558\ub8e8", - "pref_1W": "\uc77c\uc8fc\uc77c", - "pref_1M": "\ud55c\ub2ec", - "pref_3M": "3\uac1c\uc6d4 (\ubd84\uae30)", - "pref_6M": "6\uac1c\uc6d4", - "pref_1Y": "1\ub144", - "repeat_freq_yearly": "\uc5f0\uac04", - "repeat_freq_half-year": "\ubc18\ub144\ub9c8\ub2e4", - "repeat_freq_quarterly": "\ubd84\uae30\ubcc4", - "repeat_freq_monthly": "\uc6d4\uac04", - "repeat_freq_weekly": "\uc8fc\uac04", - "single_split": "\ub098\ub204\uae30", - "asset_accounts": "\uc790\uc0b0 \uacc4\uc815", - "expense_accounts": "\uc9c0\ucd9c \uacc4\uc815", - "liabilities_accounts": "\ubd80\ucc44", - "undefined_accounts": "\uacc4\uc815", - "name": "\uc774\ub984", - "revenue_accounts": "\uc218\uc775 \uacc4\uc815", - "description": "\uc124\uba85", - "category": "\uce74\ud14c\uace0\ub9ac", - "title_deposit": "\uc218\uc775 \/ \uc218\uc785", - "title_transfer": "\uc774\uccb4", - "title_transfers": "\uc774\uccb4", - "piggyBanks": "\uc800\uae08\ud1b5", - "rules": "\uaddc\uce59", - "accounts": "\uacc4\uc815", - "categories": "\uce74\ud14c\uace0\ub9ac", - "tags": "\ud0dc\uadf8", - "object_groups_page_title": "\uadf8\ub8f9", - "reports": "\ubcf4\uace0\uc11c", - "webhooks": "\uc6f9\ud6c5", - "currencies": "\ud1b5\ud654", - "administration": "\uad00\ub9ac", - "profile": "\ud504\ub85c\ud544", - "source_account": "\uc18c\uc2a4 \uacc4\uc815", - "destination_account": "\ub300\uc0c1 \uacc4\uc815", - "amount": "\uae08\uc561", - "date": "\ub0a0\uc9dc", - "time": "\uc2dc\uac04", - "preferences": "\ud658\uacbd \uc124\uc815", - "transactions": "\uac70\ub798", - "balance": "\uc794\uace0", - "budgets": "\uc608\uc0b0", - "subscriptions": "\uad6c\ub3c5", - "welcome_back": "\ubb34\uc2a8 \uc77c\uc774\uc8e0?", - "bills_to_pay": "\ub0a9\ubd80\ud560 \uccad\uad6c\uc11c", - "net_worth": "\uc21c\uc790\uc0b0", - "pref_last365": "\uc9c0\ub09c \ud574", - "pref_last90": "\ucd5c\uadfc 90\uc77c", - "pref_last30": "\ucd5c\uadfc 30\uc77c", - "pref_last7": "\ucd5c\uadfc 7\uc77c", - "pref_YTD": "\uc5f0\uac04 \ub204\uacc4", - "pref_QTD": "\ubd84\uae30 \ub204\uacc4", - "pref_MTD": "\uc6d4\uac04 \ub204\uacc4" - } -} diff --git a/frontend/src/i18n/nb_NO/index.js b/frontend/src/i18n/nb_NO/index.js deleted file mode 100644 index b420682f54..0000000000 --- a/frontend/src/i18n/nb_NO/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "nb", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Navn", - "amount_min": "Minimumsbel\u00f8p", - "amount_max": "Maksimumsbel\u00f8p", - "url": "Nettadresse", - "title": "Tittel", - "first_date": "F\u00f8rste dato", - "repetitions": "Repetisjoner", - "description": "Beskrivelse", - "iban": "IBAN", - "skip": "Hopp over", - "date": "Dato" - }, - "list": { - "name": "Navn", - "account_number": "Kontonummer", - "currentBalance": "N\u00e5v\u00e6rende saldo", - "lastActivity": "Siste aktivitet", - "active": "Er aktiv?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budsjetter", - "subscriptions": "Abonnementer", - "transactions": "Transaksjoner", - "title_expenses": "Utgifter", - "title_withdrawal": "Utgifter", - "title_revenue": "Inntekt", - "title_deposit": "Inntekt", - "title_transfer": "Overf\u00f8ringer", - "title_transfers": "Overf\u00f8ringer", - "asset_accounts": "Aktivakonto", - "expense_accounts": "Utgiftskonto", - "revenue_accounts": "Inntektskontoer", - "liabilities_accounts": "Gjeld" - }, - "firefly": { - "administration_index": "\u00d8konomisk administrasjon", - "actions": "Handlinger", - "edit": "Rediger", - "delete": "Slett", - "reconcile": "Avstem", - "create_new_asset": "Opprett ny aktivakonto", - "confirm_action": "Bekreft handling", - "new_budget": "Nytt budsjett", - "new_asset_account": "Ny aktivakonto", - "newTransfer": "Ny overf\u00f8ring", - "submission_options": "Alternativer for innsending", - "apply_rules_checkbox": "Bruk regler", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Nytt innskudd", - "newWithdrawal": "Ny utgift", - "bills_paid": "Regninger betalt", - "left_to_spend": "Igjen \u00e5 bruke", - "no_budget": "(ingen budsjett)", - "budgeted": "Budsjettert", - "spent": "Brukt", - "no_bill": "(ingen regning)", - "rule_trigger_source_account_starts_choice": "Kildekonto navn starter med..", - "rule_trigger_source_account_ends_choice": "Kildenavnet slutter med..", - "rule_trigger_source_account_is_choice": "Kildekonto navn er..", - "rule_trigger_source_account_contains_choice": "Kildekonto navn inneholder..", - "rule_trigger_account_id_choice": "En av konto ID'er, er n\u00f8yaktig.", - "rule_trigger_source_account_id_choice": "Kildekonto-ID er n\u00f8yaktig..", - "rule_trigger_destination_account_id_choice": "M\u00e5lkonto ID er n\u00f8yaktig..", - "rule_trigger_account_is_cash_choice": "En av konto er kontant", - "rule_trigger_source_is_cash_choice": "Kildekonto er (kontant) konto", - "rule_trigger_destination_is_cash_choice": "M\u00e5lkonto er (kontant) konto", - "rule_trigger_source_account_nr_starts_choice": "Kildekontonummer \/ IBAN starter med..", - "rule_trigger_source_account_nr_ends_choice": "Kildekontonummer \/ IBAN slutter med..", - "rule_trigger_source_account_nr_is_choice": "Kildekontonummer \/ IBAN er..", - "rule_trigger_source_account_nr_contains_choice": "Kilde kontonummer \/ IBAN inneholder..", - "rule_trigger_destination_account_starts_choice": "M\u00e5lkontonavnet begynner med..", - "rule_trigger_destination_account_ends_choice": "M\u00e5lkontonavnet slutter med..", - "rule_trigger_destination_account_is_choice": "M\u00e5lkonto navn slutter med..", - "rule_trigger_destination_account_contains_choice": "M\u00e5lkontonavn inneholder..", - "rule_trigger_destination_account_nr_starts_choice": "M\u00e5lkontonummer \/ IBAN starter med..", - "rule_trigger_destination_account_nr_ends_choice": "M\u00e5lkontonummer \/ IBAN slutter med..", - "rule_trigger_destination_account_nr_is_choice": "M\u00e5lkontonummer \/ IBAN er..", - "rule_trigger_destination_account_nr_contains_choice": "M\u00e5lkontonummer \/ IBAN inneholder..", - "rule_trigger_transaction_type_choice": "Transaksjonen er av typen..", - "rule_trigger_category_is_choice": "Kategori er..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Bel\u00f8pet er..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Beskrivelse starter med..", - "rule_trigger_description_ends_choice": "Beskrivelse slutter med..", - "rule_trigger_description_contains_choice": "Beskrivelse inneholder..", - "rule_trigger_description_is_choice": "Beskrivelse er..", - "rule_trigger_date_on_choice": "Transaksjonsdato er..", - "rule_trigger_date_before_choice": "Transaksjons dato er f\u00f8r..", - "rule_trigger_date_after_choice": "Transaksjons dato er etter..", - "rule_trigger_created_at_on_choice": "Transaksjonen ble gjort p\u00e5..", - "rule_trigger_updated_at_on_choice": "Transaksjonen ble sist redigert den..", - "rule_trigger_budget_is_choice": "Budsjett er..", - "rule_trigger_tag_is_choice": "(En) tagg er..", - "rule_trigger_currency_is_choice": "Transaksjonsvaluta er..", - "rule_trigger_foreign_currency_is_choice": "Transaksjonens fremmed valuta er..", - "rule_trigger_has_attachments_choice": "Har minst s\u00e5 mange vedlegg", - "rule_trigger_has_no_category_choice": "Har ingen kategori", - "rule_trigger_has_any_category_choice": "Har en (hvilken som helst) kategori", - "rule_trigger_has_no_budget_choice": "Har ingen budsjett", - "rule_trigger_has_any_budget_choice": "Har et (hvilket som helst) budsjett", - "rule_trigger_has_no_bill_choice": "Har ingen regning", - "rule_trigger_has_any_bill_choice": "Har en regning", - "rule_trigger_has_no_tag_choice": "Har ingen tagg(er)", - "rule_trigger_has_any_tag_choice": "Har en eller flere tagger", - "rule_trigger_any_notes_choice": "Har ett eller flere notater", - "rule_trigger_no_notes_choice": "Har ingen notater", - "rule_trigger_notes_is_choice": "Notater er..", - "rule_trigger_notes_contains_choice": "Notater inneholder..", - "rule_trigger_notes_starts_choice": "Notater begynner med..", - "rule_trigger_notes_ends_choice": "Notater som slutter med..", - "rule_trigger_bill_is_choice": "Regning er..", - "rule_trigger_external_id_is_choice": "Ekstern ID er..", - "rule_trigger_internal_reference_is_choice": "Intern referanse er..", - "rule_trigger_journal_id_choice": "Transaksjonens journal ID er..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaksjonen har ingen ekstern URL", - "rule_trigger_id_choice": "Transaksjons-ID er", - "rule_action_delete_transaction_choice": "SLETT transaksjon(!)", - "rule_action_set_category_choice": "Sett kategori til ..", - "rule_action_clear_category_choice": "T\u00f8m alle kategorier", - "rule_action_set_budget_choice": "Sett budsjett til ..", - "rule_action_clear_budget_choice": "T\u00f8m alle budsjetter", - "rule_action_add_tag_choice": "Legg til tagg ..", - "rule_action_remove_tag_choice": "Fjern tagg ..", - "rule_action_remove_all_tags_choice": "Fjern alle tagger", - "rule_action_set_description_choice": "Sett beskrivelse til ..", - "rule_action_update_piggy_choice": "Legg til \/ fjern transaksjonsbel\u00f8p i sparegris ..", - "rule_action_append_description_choice": "Legg til i beskrivelse ..", - "rule_action_prepend_description_choice": "Legg til foran beskrivelsen med ..", - "rule_action_set_source_account_choice": "Sett kildekonto til ..", - "rule_action_set_destination_account_choice": "Sett m\u00e5lkonto til ..", - "rule_action_append_notes_choice": "Legg til i notater med ..", - "rule_action_prepend_notes_choice": "Legg til foran i notater med ..", - "rule_action_clear_notes_choice": "Fjern notater", - "rule_action_set_notes_choice": "Sett notater til ..", - "rule_action_link_to_bill_choice": "Koble til en regning ..", - "rule_action_convert_deposit_choice": "Konverter transaksjonen til et innskudd", - "rule_action_convert_withdrawal_choice": "Konverter denne transaksjonen til et uttak", - "rule_action_convert_transfer_choice": "Konverter transaksjonen til en overf\u00f8ring", - "placeholder": "[Placeholder]", - "recurrences": "Gjentakende transaksjoner", - "title_expenses": "Utgifter", - "title_withdrawal": "Utgifter", - "title_revenue": "Inntekt", - "pref_1D": "\u00c9n dag", - "pref_1W": "\u00c9n uke", - "pref_1M": "En m\u00e5ned", - "pref_3M": "Tre m\u00e5neder (kvartal)", - "pref_6M": "Seks m\u00e5neder", - "pref_1Y": "Ett \u00e5r", - "repeat_freq_yearly": "\u00e5rlig", - "repeat_freq_half-year": "hvert halv\u00e5r", - "repeat_freq_quarterly": "kvartalsvis", - "repeat_freq_monthly": "m\u00e5nedlig", - "repeat_freq_weekly": "ukentlig", - "single_split": "Del opp", - "asset_accounts": "Aktivakontoer", - "expense_accounts": "Utgiftskontoer", - "liabilities_accounts": "Gjeldskonto", - "undefined_accounts": "Kontoer", - "name": "Navn", - "revenue_accounts": "Inntektskontoer", - "description": "Beskrivelse", - "category": "Kategori", - "title_deposit": "Inntekt", - "title_transfer": "Overf\u00f8ringer", - "title_transfers": "Overf\u00f8ringer", - "piggyBanks": "Sparegriser", - "rules": "Regler", - "accounts": "Kontoer", - "categories": "Kategorier", - "tags": "Tagger", - "object_groups_page_title": "Grupper", - "reports": "Rapporter", - "webhooks": "Webhooks", - "currencies": "Valutaer", - "administration": "Administrasjon", - "profile": "Profil", - "source_account": "Kildekonto", - "destination_account": "Destinasjonskonto", - "amount": "Bel\u00f8p", - "date": "Dato", - "time": "Tid", - "preferences": "Innstillinger", - "transactions": "Transaksjoner", - "balance": "Saldo", - "budgets": "Budsjetter", - "subscriptions": "Abonnementer", - "welcome_back": "Hvordan g\u00e5r det?", - "bills_to_pay": "Regninger \u00e5 betale", - "net_worth": "Formue", - "pref_last365": "I fjor", - "pref_last90": "Siste 90 dager", - "pref_last30": "Siste 30 dagene", - "pref_last7": "Siste 7 dager", - "pref_YTD": "\u00c5r til dato", - "pref_QTD": "Kvartal til dato", - "pref_MTD": "M\u00e5ned til dato" - } -} diff --git a/frontend/src/i18n/nl_NL/index.js b/frontend/src/i18n/nl_NL/index.js deleted file mode 100644 index 9304e0817f..0000000000 --- a/frontend/src/i18n/nl_NL/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "nl", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Naam", - "amount_min": "Minimumbedrag", - "amount_max": "Maximumbedrag", - "url": "URL", - "title": "Titel", - "first_date": "Eerste datum", - "repetitions": "Herhalingen", - "description": "Omschrijving", - "iban": "IBAN", - "skip": "Overslaan", - "date": "Datum" - }, - "list": { - "name": "Naam", - "account_number": "Rekeningnummer", - "currentBalance": "Huidig saldo", - "lastActivity": "Laatste activiteit", - "active": "Actief?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgetten", - "subscriptions": "Abonnementen", - "transactions": "Transacties", - "title_expenses": "Uitgaven", - "title_withdrawal": "Uitgaven", - "title_revenue": "Inkomsten", - "title_deposit": "Inkomsten", - "title_transfer": "Overschrijvingen", - "title_transfers": "Overschrijvingen", - "asset_accounts": "Betaalrekeningen", - "expense_accounts": "Crediteuren", - "revenue_accounts": "Debiteuren", - "liabilities_accounts": "Passiva" - }, - "firefly": { - "administration_index": "Financi\u00eble administratie", - "actions": "Acties", - "edit": "Wijzig", - "delete": "Verwijder", - "reconcile": "Afstemmen", - "create_new_asset": "Nieuwe betaalrekening", - "confirm_action": "Actie bevestigen", - "new_budget": "Nieuw budget", - "new_asset_account": "Nieuwe betaalrekening", - "newTransfer": "Nieuwe overschrijving", - "submission_options": "Inzending opties", - "apply_rules_checkbox": "Regels toepassen", - "fire_webhooks_checkbox": "Webhooks starten", - "newDeposit": "Nieuwe inkomsten", - "newWithdrawal": "Nieuwe uitgave", - "bills_paid": "Betaalde contracten", - "left_to_spend": "Over om uit te geven", - "no_budget": "(geen budget)", - "budgeted": "Gebudgetteerd", - "spent": "Uitgegeven", - "no_bill": "(geen contract)", - "rule_trigger_source_account_starts_choice": "Bronrekeningnaam begint met..", - "rule_trigger_source_account_ends_choice": "Bronrekeningnaam eindigt op..", - "rule_trigger_source_account_is_choice": "Bronrekeningnaam is..", - "rule_trigger_source_account_contains_choice": "Bronrekeningnaam bevat..", - "rule_trigger_account_id_choice": "Bron- of doelrekening-ID is..", - "rule_trigger_source_account_id_choice": "Bronrekening ID is..", - "rule_trigger_destination_account_id_choice": "Doelrekening ID is..", - "rule_trigger_account_is_cash_choice": "Bron- of doelrekening is een cash-rekening", - "rule_trigger_source_is_cash_choice": "Bronrekening is (cash) account", - "rule_trigger_destination_is_cash_choice": "Doelrekening is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Bronrekeningnummer begint met..", - "rule_trigger_source_account_nr_ends_choice": "Bronrekeningnummer eindigt op..", - "rule_trigger_source_account_nr_is_choice": "Bronrekeningnummer \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Bronrekeningnummer \/ IBAN bevat..", - "rule_trigger_destination_account_starts_choice": "Doelrekeningnaam begint met..", - "rule_trigger_destination_account_ends_choice": "Doelrekeningnaam eindigt op..", - "rule_trigger_destination_account_is_choice": "Doelrekeningnaam is..", - "rule_trigger_destination_account_contains_choice": "Doelrekeningnaam bevat..", - "rule_trigger_destination_account_nr_starts_choice": "Doelrekeningnummer \/ IBAN begint met..", - "rule_trigger_destination_account_nr_ends_choice": "Doelrekeningnummer \/ IBAN eindigt op..", - "rule_trigger_destination_account_nr_is_choice": "Doelrekeningnummer \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Doelrekeningnummer \/ IBAN bevat..", - "rule_trigger_transaction_type_choice": "Transactietype is..", - "rule_trigger_category_is_choice": "Categorie is..", - "rule_trigger_amount_less_choice": "Bedrag is kleiner dan of gelijk aan ..", - "rule_trigger_amount_is_choice": "Bedrag is..", - "rule_trigger_amount_more_choice": "Bedrag is groter dan of gelijk aan..", - "rule_trigger_description_starts_choice": "Omschrijving begint met..", - "rule_trigger_description_ends_choice": "Omschrijving eindigt op..", - "rule_trigger_description_contains_choice": "Omschrijving bevat..", - "rule_trigger_description_is_choice": "Omschrijving is..", - "rule_trigger_date_on_choice": "Transactiedatum is..", - "rule_trigger_date_before_choice": "Transactiedatum is v\u00f3\u00f3r..", - "rule_trigger_date_after_choice": "Transactiedatum is na..", - "rule_trigger_created_at_on_choice": "Transactie is gemaakt op..", - "rule_trigger_updated_at_on_choice": "Transactie werd laatst gewijzigd op..", - "rule_trigger_budget_is_choice": "Budget is..", - "rule_trigger_tag_is_choice": "Een tag is..", - "rule_trigger_currency_is_choice": "Transactievaluta is..", - "rule_trigger_foreign_currency_is_choice": "Transactie vreemde valuta is..", - "rule_trigger_has_attachments_choice": "Heeft minstens zoveel bijlagen", - "rule_trigger_has_no_category_choice": "Heeft geen categorie", - "rule_trigger_has_any_category_choice": "Heeft een (welke dan ook) categorie", - "rule_trigger_has_no_budget_choice": "Heeft geen budget", - "rule_trigger_has_any_budget_choice": "Heeft een (welke dan ook) budget", - "rule_trigger_has_no_bill_choice": "Heeft geen contract", - "rule_trigger_has_any_bill_choice": "Heeft een (welke dan ook) contract", - "rule_trigger_has_no_tag_choice": "Heeft geen tag(s)", - "rule_trigger_has_any_tag_choice": "Heeft een of meer tags", - "rule_trigger_any_notes_choice": "Heeft (enige) notities", - "rule_trigger_no_notes_choice": "Heeft geen notities", - "rule_trigger_notes_is_choice": "Notities zijn..", - "rule_trigger_notes_contains_choice": "Notities bevatten..", - "rule_trigger_notes_starts_choice": "Notities beginnen met..", - "rule_trigger_notes_ends_choice": "Notities eindigen op..", - "rule_trigger_bill_is_choice": "Contract is..", - "rule_trigger_external_id_is_choice": "Externe ID is..", - "rule_trigger_internal_reference_is_choice": "Interne referentie is..", - "rule_trigger_journal_id_choice": "Transactiejournaal ID is..", - "rule_trigger_any_external_url_choice": "Transactie heeft een externe URL", - "rule_trigger_no_external_url_choice": "De transactie heeft geen externe URL", - "rule_trigger_id_choice": "Transactie-ID is..", - "rule_action_delete_transaction_choice": "VERWIJDER transactie(!)", - "rule_action_set_category_choice": "Stel categorie in op ..", - "rule_action_clear_category_choice": "Geef geen categorie", - "rule_action_set_budget_choice": "Stel budget in op ..", - "rule_action_clear_budget_choice": "Maak budget-veld leeg", - "rule_action_add_tag_choice": "Voeg tag toe ..", - "rule_action_remove_tag_choice": "Haal tag weg ..", - "rule_action_remove_all_tags_choice": "Haal alle tags weg", - "rule_action_set_description_choice": "Stel beschrijving in op ..", - "rule_action_update_piggy_choice": "Voeg toe \/ verwijder het transactiebedrag in spaarpotje ..", - "rule_action_append_description_choice": "Zet .. achter de omschrijving", - "rule_action_prepend_description_choice": "Zet .. voor de omschrijving", - "rule_action_set_source_account_choice": "Verander bronrekening naar ..", - "rule_action_set_destination_account_choice": "Verander doelrekening naar ..", - "rule_action_append_notes_choice": "Vul notitie aan met ..", - "rule_action_prepend_notes_choice": "Zet .. voor notitie", - "rule_action_clear_notes_choice": "Verwijder notitie", - "rule_action_set_notes_choice": "Stel notities in op ..", - "rule_action_link_to_bill_choice": "Link naar een contract ..", - "rule_action_convert_deposit_choice": "Verander de transactie in inkomsten", - "rule_action_convert_withdrawal_choice": "Verander de transactie in een uitgave", - "rule_action_convert_transfer_choice": "Verander de transactie in een overschrijving", - "placeholder": "[Placeholder]", - "recurrences": "Periodieke transacties", - "title_expenses": "Uitgaven", - "title_withdrawal": "Uitgaven", - "title_revenue": "Inkomsten", - "pref_1D": "E\u00e9n dag", - "pref_1W": "E\u00e9n week", - "pref_1M": "E\u00e9n maand", - "pref_3M": "Drie maanden (kwartaal)", - "pref_6M": "Zes maanden", - "pref_1Y": "E\u00e9n jaar", - "repeat_freq_yearly": "jaarlijks", - "repeat_freq_half-year": "elk half jaar", - "repeat_freq_quarterly": "elk kwartaal", - "repeat_freq_monthly": "maandelijks", - "repeat_freq_weekly": "wekelijks", - "single_split": "Split", - "asset_accounts": "Betaalrekeningen", - "expense_accounts": "Crediteuren", - "liabilities_accounts": "Passiva", - "undefined_accounts": "Rekeningen", - "name": "Naam", - "revenue_accounts": "Debiteuren", - "description": "Omschrijving", - "category": "Categorie", - "title_deposit": "Inkomsten", - "title_transfer": "Overschrijvingen", - "title_transfers": "Overschrijvingen", - "piggyBanks": "Spaarpotjes", - "rules": "Regels", - "accounts": "Rekeningen", - "categories": "Categorie\u00ebn", - "tags": "Tags", - "object_groups_page_title": "Groepen", - "reports": "Overzichten", - "webhooks": "Webhooks", - "currencies": "Valuta", - "administration": "Administratie", - "profile": "Profiel", - "source_account": "Bronrekening", - "destination_account": "Doelrekening", - "amount": "Bedrag", - "date": "Datum", - "time": "Tijd", - "preferences": "Voorkeuren", - "transactions": "Transacties", - "balance": "Saldo", - "budgets": "Budgetten", - "subscriptions": "Abonnementen", - "welcome_back": "Hoe staat het er voor?", - "bills_to_pay": "Openstaande contracten", - "net_worth": "Kapitaal", - "pref_last365": "Afgelopen jaar", - "pref_last90": "Afgelopen 90 dagen", - "pref_last30": "Afgelopen 30 dagen", - "pref_last7": "Afgelopen 7 dagen", - "pref_YTD": "Jaar tot nu", - "pref_QTD": "Kwartaal tot nu", - "pref_MTD": "Maand tot nu" - } -} diff --git a/frontend/src/i18n/nn_NO/index.js b/frontend/src/i18n/nn_NO/index.js deleted file mode 100644 index 3f1b40d011..0000000000 --- a/frontend/src/i18n/nn_NO/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "nn", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Namn", - "amount_min": "Minimumsbel\u00f8p", - "amount_max": "Maksimumsbel\u00f8p", - "url": "Nettadresse", - "title": "Tittel", - "first_date": "F\u00f8rste dato", - "repetitions": "Repetisjoner", - "description": "Beskriving", - "iban": "IBAN", - "skip": "Hopp over", - "date": "Dato" - }, - "list": { - "name": "Namn", - "account_number": "Kontonummer", - "currentBalance": "Noverande saldo", - "lastActivity": "Siste aktivitet", - "active": "Er aktiv?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budsjett", - "subscriptions": "Abonnementer", - "transactions": "Transaksjoner", - "title_expenses": "Utgifter", - "title_withdrawal": "Utgifter", - "title_revenue": "Inntekt", - "title_deposit": "Inntekt", - "title_transfer": "Overf\u00f8ringer", - "title_transfers": "Overf\u00f8ringer", - "asset_accounts": "Aktivakonto", - "expense_accounts": "Utgiftskonto", - "revenue_accounts": "Inntektskontoar", - "liabilities_accounts": "Gjeld" - }, - "firefly": { - "administration_index": "\u00d8konomisk administrasjon", - "actions": "Handlinger", - "edit": "Rediger", - "delete": "Slett", - "reconcile": "Avstem", - "create_new_asset": "Opprett ny aktivakonto", - "confirm_action": "Bekreft handling", - "new_budget": "Nytt budsjett", - "new_asset_account": "Ny aktivakonto", - "newTransfer": "Ny overf\u00f8ring", - "submission_options": "Alternativer for innsending", - "apply_rules_checkbox": "Bruk reglar", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Nytt innskot", - "newWithdrawal": "Ny utgift", - "bills_paid": "Rekningar betalt", - "left_to_spend": "Igjen \u00e5 bruka", - "no_budget": "(ingen budsjett)", - "budgeted": "Budsjettert", - "spent": "Brukt", - "no_bill": "(ingen rekning)", - "rule_trigger_source_account_starts_choice": "Kjeldekonto namn byrjar med..", - "rule_trigger_source_account_ends_choice": "Kjeldenamnet sluttar med..", - "rule_trigger_source_account_is_choice": "Kjeldekonto namn er..", - "rule_trigger_source_account_contains_choice": "Kjeldekonto namn inneheld..", - "rule_trigger_account_id_choice": "Ein av konto ID'er, er n\u00f8yaktig.", - "rule_trigger_source_account_id_choice": "Kjeldekonto-ID er n\u00f8yaktig..", - "rule_trigger_destination_account_id_choice": "M\u00e5lkonto ID er n\u00f8yaktig..", - "rule_trigger_account_is_cash_choice": "Ein av konto er kontant", - "rule_trigger_source_is_cash_choice": "Kjeldekonto er (kontant) konto", - "rule_trigger_destination_is_cash_choice": "M\u00e5lkonto er (kontant) konto", - "rule_trigger_source_account_nr_starts_choice": "Kjeldekontonummer \/ IBAN byrjar med..", - "rule_trigger_source_account_nr_ends_choice": "Kjeldekontonummer \/ IBAN sluttar med..", - "rule_trigger_source_account_nr_is_choice": "Kjeldekontonummer \/ IBAN er..", - "rule_trigger_source_account_nr_contains_choice": "Kjeldekontonummer \/ IBAN inneheld..", - "rule_trigger_destination_account_starts_choice": "M\u00e5lkontonamnet byrjar med..", - "rule_trigger_destination_account_ends_choice": "M\u00e5lkontonamnet sluttar med..", - "rule_trigger_destination_account_is_choice": "M\u00e5lkonto namn sluttar med..", - "rule_trigger_destination_account_contains_choice": "M\u00e5lkontonamn inneheld..", - "rule_trigger_destination_account_nr_starts_choice": "M\u00e5lkontonummer \/ IBAN byrjar med..", - "rule_trigger_destination_account_nr_ends_choice": "M\u00e5lkontonummer \/ IBAN sluttar med..", - "rule_trigger_destination_account_nr_is_choice": "M\u00e5lkontonummer \/ IBAN er..", - "rule_trigger_destination_account_nr_contains_choice": "M\u00e5lkontonummer \/ IBAN inneheld..", - "rule_trigger_transaction_type_choice": "Transaksjonen er av typen..", - "rule_trigger_category_is_choice": "Kategori er..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Bel\u00f8pet er..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Beskrivinga byrjar med..", - "rule_trigger_description_ends_choice": "Beskrivinga sluttar med..", - "rule_trigger_description_contains_choice": "Beskrivinga inneheld..", - "rule_trigger_description_is_choice": "Beskrivinga er..", - "rule_trigger_date_on_choice": "Transaksjonsdato er..", - "rule_trigger_date_before_choice": "Transaksjons dato er f\u00f8r..", - "rule_trigger_date_after_choice": "Transaksjons dato er etter..", - "rule_trigger_created_at_on_choice": "Transaksjonen vart gjort p\u00e5..", - "rule_trigger_updated_at_on_choice": "Transaksjonen vart sist redigert den..", - "rule_trigger_budget_is_choice": "Budsjett er..", - "rule_trigger_tag_is_choice": "(Ein) tagg er..", - "rule_trigger_currency_is_choice": "Transaksjonsvaluta er..", - "rule_trigger_foreign_currency_is_choice": "Transaksjonens fremmed valuta er..", - "rule_trigger_has_attachments_choice": "Har minst s\u00e5 mange vedlegg", - "rule_trigger_has_no_category_choice": "Har ingen kategori", - "rule_trigger_has_any_category_choice": "Har ein (hvilken som helst) kategori", - "rule_trigger_has_no_budget_choice": "Har ingen budsjett", - "rule_trigger_has_any_budget_choice": "Har eit (kva som helst) budsjett", - "rule_trigger_has_no_bill_choice": "Har ingen rekning", - "rule_trigger_has_any_bill_choice": "Har ein rekning", - "rule_trigger_has_no_tag_choice": "Har ingen tagg(ar)", - "rule_trigger_has_any_tag_choice": "Har ein eller fleire tagger", - "rule_trigger_any_notes_choice": "Har notat", - "rule_trigger_no_notes_choice": "Har ikkje notat", - "rule_trigger_notes_is_choice": "Notat er..", - "rule_trigger_notes_contains_choice": "Notat inneheld..", - "rule_trigger_notes_starts_choice": "Notat byrjar med..", - "rule_trigger_notes_ends_choice": "Notat sluttar med..", - "rule_trigger_bill_is_choice": "Rekning er..", - "rule_trigger_external_id_is_choice": "Ekstern ID er..", - "rule_trigger_internal_reference_is_choice": "Intern referanse er..", - "rule_trigger_journal_id_choice": "Transaksjonens journal ID er..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaksjonen har ingen ekstern URL", - "rule_trigger_id_choice": "Transaksjons-ID er", - "rule_action_delete_transaction_choice": "SLETT transaksjon(!)", - "rule_action_set_category_choice": "Sett kategori til ..", - "rule_action_clear_category_choice": "T\u00f8m alle kategoriar", - "rule_action_set_budget_choice": "Sett budsjett til ..", - "rule_action_clear_budget_choice": "T\u00f8m alle budsjett", - "rule_action_add_tag_choice": "Legg til tagg ..", - "rule_action_remove_tag_choice": "Fjern tagg ..", - "rule_action_remove_all_tags_choice": "Fjern alle tagger", - "rule_action_set_description_choice": "Sett beskriving til ..", - "rule_action_update_piggy_choice": "Legg til \/ fjern transaksjonsbel\u00f8p i sparegris ..", - "rule_action_append_description_choice": "Legg til i beskriving ..", - "rule_action_prepend_description_choice": "Legg til foran beskrivinga med ..", - "rule_action_set_source_account_choice": "Sett kjeldekonto til ..", - "rule_action_set_destination_account_choice": "Sett m\u00e5lkonto til ..", - "rule_action_append_notes_choice": "Legg til notat med ..", - "rule_action_prepend_notes_choice": "Legg f\u00f8lgande framfor notat ..", - "rule_action_clear_notes_choice": "Fjern notat", - "rule_action_set_notes_choice": "Sett notat til ..", - "rule_action_link_to_bill_choice": "Koble til ein rekning ..", - "rule_action_convert_deposit_choice": "Konverter transaksjonen til eit innskot", - "rule_action_convert_withdrawal_choice": "Konverter denne transaksjonen til eit uttak", - "rule_action_convert_transfer_choice": "Konverter transaksjonen til ein overf\u00f8ring", - "placeholder": "[Placeholder]", - "recurrences": "Gjentakande transaksjonar", - "title_expenses": "Utgifter", - "title_withdrawal": "Utgifter", - "title_revenue": "Inntekt", - "pref_1D": "\u00c9n dag", - "pref_1W": "\u00c9n veke", - "pref_1M": "Ein m\u00e5nad", - "pref_3M": "Tre m\u00e5neder (kvartal)", - "pref_6M": "Seks m\u00e5neder", - "pref_1Y": "Ett \u00e5r", - "repeat_freq_yearly": "\u00e5rlig", - "repeat_freq_half-year": "kvart halv\u00e5r", - "repeat_freq_quarterly": "kvartalsvis", - "repeat_freq_monthly": "m\u00e5nedlig", - "repeat_freq_weekly": "ukentlig", - "single_split": "Del opp", - "asset_accounts": "Aktivakontoar", - "expense_accounts": "Utgiftskontoar", - "liabilities_accounts": "Gjeldskonto", - "undefined_accounts": "Kontoar", - "name": "Namn", - "revenue_accounts": "Inntektskontoar", - "description": "Beskriving", - "category": "Kategori", - "title_deposit": "Inntekt", - "title_transfer": "Overf\u00f8ringer", - "title_transfers": "Overf\u00f8ringer", - "piggyBanks": "Sparegriser", - "rules": "Regler", - "accounts": "Kontoar", - "categories": "Kategorier", - "tags": "Tagger", - "object_groups_page_title": "Grupper", - "reports": "Rapportar", - "webhooks": "Webhooks", - "currencies": "Valutaer", - "administration": "Administrasjon", - "profile": "Profil", - "source_account": "Kjeldekonto", - "destination_account": "M\u00e5lkonto", - "amount": "Bel\u00f8p", - "date": "Dato", - "time": "Tid", - "preferences": "Innstillinger", - "transactions": "Transaksjoner", - "balance": "Saldo", - "budgets": "Budsjett", - "subscriptions": "Abonnementer", - "welcome_back": "Korleis g\u00e5r det?", - "bills_to_pay": "Rekningar \u00e5 betala", - "net_worth": "Formue", - "pref_last365": "I fjor", - "pref_last90": "Siste 90 dager", - "pref_last30": "Siste 30 dagene", - "pref_last7": "Siste 7 dager", - "pref_YTD": "\u00c5r til dato", - "pref_QTD": "Kvartal til dato", - "pref_MTD": "M\u00e5ned til dato" - } -} diff --git a/frontend/src/i18n/pl_PL/index.js b/frontend/src/i18n/pl_PL/index.js deleted file mode 100644 index 97a56a93e5..0000000000 --- a/frontend/src/i18n/pl_PL/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "pl", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nazwa", - "amount_min": "Minimalna kwota", - "amount_max": "Maksymalna kwota", - "url": "URL", - "title": "Tytu\u0142", - "first_date": "Data pocz\u0105tkowa", - "repetitions": "Powt\u00f3rzenia", - "description": "Opis", - "iban": "IBAN", - "skip": "Pomi\u0144", - "date": "Data" - }, - "list": { - "name": "Nazwa", - "account_number": "Numer konta", - "currentBalance": "Bie\u017c\u0105ce saldo", - "lastActivity": "Ostatnia aktywno\u015b\u0107", - "active": "Jest aktywny?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Bud\u017cety", - "subscriptions": "Subskrypcje", - "transactions": "Transakcje", - "title_expenses": "Wydatki", - "title_withdrawal": "Wydatki", - "title_revenue": "Przychody \/ dochody", - "title_deposit": "Przych\u00f3d \/ doch\u00f3d", - "title_transfer": "Transfery", - "title_transfers": "Transfery", - "asset_accounts": "Konta aktyw\u00f3w", - "expense_accounts": "Konta wydatk\u00f3w", - "revenue_accounts": "Konta przychod\u00f3w", - "liabilities_accounts": "Zobowi\u0105zania" - }, - "firefly": { - "administration_index": "Zarz\u0105dzanie finansami", - "actions": "Akcje", - "edit": "Modyfikuj", - "delete": "Usu\u0144", - "reconcile": "Uzgodnij", - "create_new_asset": "Utw\u00f3rz nowe konto aktyw\u00f3w", - "confirm_action": "Potwierd\u017a akcj\u0119", - "new_budget": "Nowy bud\u017cet", - "new_asset_account": "Nowe konto aktyw\u00f3w", - "newTransfer": "Nowy transfer", - "submission_options": "Opcje zapisu", - "apply_rules_checkbox": "Zastosuj regu\u0142y", - "fire_webhooks_checkbox": "Uruchom webhooki", - "newDeposit": "Nowa wp\u0142ata", - "newWithdrawal": "Nowy wydatek", - "bills_paid": "Zap\u0142acone rachunki", - "left_to_spend": "Pozosta\u0142o do wydania", - "no_budget": "(brak bud\u017cetu)", - "budgeted": "Zabud\u017cetowano", - "spent": "Wydano", - "no_bill": "(brak rachunku)", - "rule_trigger_source_account_starts_choice": "Konto \u017ar\u00f3d\u0142owe si\u0119 zaczyna od..", - "rule_trigger_source_account_ends_choice": "Konto \u017ar\u00f3d\u0142owe ko\u0144czy si\u0119 na..", - "rule_trigger_source_account_is_choice": "Kontem \u017ar\u00f3d\u0142owym jest..", - "rule_trigger_source_account_contains_choice": "Nazwa konta \u017ar\u00f3d\u0142owego zawiera..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "ID konta \u017ar\u00f3d\u0142owego to dok\u0142adnie..", - "rule_trigger_destination_account_id_choice": "ID konta docelowego to dok\u0142adnie..", - "rule_trigger_account_is_cash_choice": "Dowolne konto jest kontem got\u00f3wkowym", - "rule_trigger_source_is_cash_choice": "Konto \u017ar\u00f3d\u0142owe to konto (got\u00f3wkowe)", - "rule_trigger_destination_is_cash_choice": "Konto docelowe to konto (got\u00f3wkowe)", - "rule_trigger_source_account_nr_starts_choice": "Numer \/ IBAN konta \u017ar\u00f3d\u0142owego zaczyna si\u0119 od..", - "rule_trigger_source_account_nr_ends_choice": "Numer konta \u017ar\u00f3d\u0142owego \/ IBAN ko\u0144czy si\u0119 na..", - "rule_trigger_source_account_nr_is_choice": "Numer konta \u017ar\u00f3d\u0142owego \/ IBAN to..", - "rule_trigger_source_account_nr_contains_choice": "Numer konta \u017ar\u00f3d\u0142owego \/ IBAN zawiera..", - "rule_trigger_destination_account_starts_choice": "Nazwa konta docelowego zaczyna si\u0119 od..", - "rule_trigger_destination_account_ends_choice": "Nazwa konta docelowego ko\u0144czy si\u0119 na..", - "rule_trigger_destination_account_is_choice": "Nazwa konta docelowego to..", - "rule_trigger_destination_account_contains_choice": "Nazwa konta docelowego zawiera..", - "rule_trigger_destination_account_nr_starts_choice": "Numer konta docelowego \/ IBAN zaczyna si\u0119 od..", - "rule_trigger_destination_account_nr_ends_choice": "Numer konta docelowego \/ IBAN ko\u0144czy si\u0119 na..", - "rule_trigger_destination_account_nr_is_choice": "Numer konta docelowego \/ IBAN to..", - "rule_trigger_destination_account_nr_contains_choice": "Numer konta docelowego \/ IBAN zawiera..", - "rule_trigger_transaction_type_choice": "Transakcja jest typu..", - "rule_trigger_category_is_choice": "Kategoria to..", - "rule_trigger_amount_less_choice": "Kwota jest mniejsza lub r\u00f3wna ..", - "rule_trigger_amount_is_choice": "Kwota to..", - "rule_trigger_amount_more_choice": "Kwota jest wi\u0119ksza lub r\u00f3wna..", - "rule_trigger_description_starts_choice": "Opis zaczyna si\u0119 od..", - "rule_trigger_description_ends_choice": "Opis ko\u0144czy si\u0119 na..", - "rule_trigger_description_contains_choice": "Opis zawiera..", - "rule_trigger_description_is_choice": "Opis to..", - "rule_trigger_date_on_choice": "Data transakcji to..", - "rule_trigger_date_before_choice": "Data transakcji jest przed..", - "rule_trigger_date_after_choice": "Data transakcji jest po..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Bud\u017cet to..", - "rule_trigger_tag_is_choice": "Dowolny tag to..", - "rule_trigger_currency_is_choice": "Waluta transakcji to..", - "rule_trigger_foreign_currency_is_choice": "Waluta obca transakcji to..", - "rule_trigger_has_attachments_choice": "Ma co najmniej podan\u0105 liczb\u0119 za\u0142\u0105cznik\u00f3w", - "rule_trigger_has_no_category_choice": "Brak kategorii", - "rule_trigger_has_any_category_choice": "Ma (dowoln\u0105) kategori\u0119", - "rule_trigger_has_no_budget_choice": "Brak bud\u017cetu", - "rule_trigger_has_any_budget_choice": "Ma (dowolny) bud\u017cet", - "rule_trigger_has_no_bill_choice": "Nie ma rachunku", - "rule_trigger_has_any_bill_choice": "Ma (dowolny) rachunek", - "rule_trigger_has_no_tag_choice": "Brak tag\u00f3w", - "rule_trigger_has_any_tag_choice": "Ma (dowolny) tag (lub kilka)", - "rule_trigger_any_notes_choice": "Ma (dowolne) notatki", - "rule_trigger_no_notes_choice": "Brak notatek", - "rule_trigger_notes_is_choice": "Notatki to..", - "rule_trigger_notes_contains_choice": "Notatki zawieraj\u0105..", - "rule_trigger_notes_starts_choice": "Notatki zaczynaj\u0105 si\u0119 od..", - "rule_trigger_notes_ends_choice": "Notatki ko\u0144cz\u0105 si\u0119 na..", - "rule_trigger_bill_is_choice": "Rachunek to..", - "rule_trigger_external_id_is_choice": "Zewn\u0119trzne ID to..", - "rule_trigger_internal_reference_is_choice": "Wewn\u0119trzne odwo\u0142anie to..", - "rule_trigger_journal_id_choice": "ID dziennika transakcji to..", - "rule_trigger_any_external_url_choice": "Transakcja ma (dowolny) zewn\u0119trzny adres URL", - "rule_trigger_no_external_url_choice": "Transakcja nie ma zewn\u0119trznego adresu URL", - "rule_trigger_id_choice": "Identyfikator transakcji to..", - "rule_action_delete_transaction_choice": "USU\u0143 transakcj\u0119(!)", - "rule_action_set_category_choice": "Ustaw kategori\u0119 na ..", - "rule_action_clear_category_choice": "Wyczy\u015b\u0107 wszystkie kategorie", - "rule_action_set_budget_choice": "Ustaw bud\u017cet na ..", - "rule_action_clear_budget_choice": "Wyczy\u015b\u0107 wszystkie bud\u017cety", - "rule_action_add_tag_choice": "Dodaj tag ..", - "rule_action_remove_tag_choice": "Usu\u0144 tag ..", - "rule_action_remove_all_tags_choice": "Usu\u0144 wszystkie tagi", - "rule_action_set_description_choice": "Ustaw opis na ..", - "rule_action_update_piggy_choice": "Dodaj \/ usu\u0144 kwot\u0119 transakcji w skarbonce ..", - "rule_action_append_description_choice": "Do\u0142\u0105cz do opisu ..", - "rule_action_prepend_description_choice": "Poprzed\u017a opis ..", - "rule_action_set_source_account_choice": "Ustaw konto \u017ar\u00f3d\u0142owe na ..", - "rule_action_set_destination_account_choice": "Ustaw konto docelowe na ..", - "rule_action_append_notes_choice": "Do\u0142\u0105cz do notatek ..", - "rule_action_prepend_notes_choice": "Poprzed\u017a notatki ..", - "rule_action_clear_notes_choice": "Usu\u0144 wszystkie notatki", - "rule_action_set_notes_choice": "Ustaw notatki na ..", - "rule_action_link_to_bill_choice": "Powi\u0105\u017c z rachunkiem ..", - "rule_action_convert_deposit_choice": "Konwertuj transakcj\u0119 na wp\u0142at\u0119", - "rule_action_convert_withdrawal_choice": "Konwertuj transakcj\u0119 na wyp\u0142at\u0119", - "rule_action_convert_transfer_choice": "Konwertuj transakcj\u0119 na transfer", - "placeholder": "[Placeholder]", - "recurrences": "Cykliczne transakcje", - "title_expenses": "Wydatki", - "title_withdrawal": "Wydatki", - "title_revenue": "Przych\u00f3d \/ doch\u00f3d", - "pref_1D": "Dzie\u0144", - "pref_1W": "Tydzie\u0144", - "pref_1M": "Miesi\u0105c", - "pref_3M": "Trzy miesi\u0105ce (kwarta\u0142)", - "pref_6M": "Sze\u015b\u0107 miesi\u0119cy", - "pref_1Y": "Rok", - "repeat_freq_yearly": "rocznie", - "repeat_freq_half-year": "co p\u00f3\u0142 roku", - "repeat_freq_quarterly": "kwartalnie", - "repeat_freq_monthly": "miesi\u0119cznie", - "repeat_freq_weekly": "tygodniowo", - "single_split": "Podzia\u0142", - "asset_accounts": "Konta aktyw\u00f3w", - "expense_accounts": "Konta wydatk\u00f3w", - "liabilities_accounts": "Zobowi\u0105zania", - "undefined_accounts": "Konta", - "name": "Nazwa", - "revenue_accounts": "Konta przychod\u00f3w", - "description": "Opis", - "category": "Kategoria", - "title_deposit": "Przych\u00f3d \/ doch\u00f3d", - "title_transfer": "Transfery", - "title_transfers": "Transfery", - "piggyBanks": "Skarbonki", - "rules": "Regu\u0142y", - "accounts": "Konta", - "categories": "Kategorie", - "tags": "Tagi", - "object_groups_page_title": "Grupy", - "reports": "Raporty", - "webhooks": "Webhooki", - "currencies": "Waluty", - "administration": "Administracja", - "profile": "Profil", - "source_account": "Konto \u017ar\u00f3d\u0142owe", - "destination_account": "Konto docelowe", - "amount": "Kwota", - "date": "Data", - "time": "Czas", - "preferences": "Preferencje", - "transactions": "Transakcje", - "balance": "Saldo", - "budgets": "Bud\u017cety", - "subscriptions": "Subskrypcje", - "welcome_back": "Co jest grane?", - "bills_to_pay": "Rachunki do zap\u0142acenia", - "net_worth": "Warto\u015b\u0107 netto", - "pref_last365": "Ostatni rok", - "pref_last90": "Ostatnie 90 dni", - "pref_last30": "Ostatnie 30 dni", - "pref_last7": "Ostatnie 7 dni", - "pref_YTD": "Rok do daty", - "pref_QTD": "Kwarta\u0142 do daty", - "pref_MTD": "Miesi\u0105c do daty" - } -} diff --git a/frontend/src/i18n/pt_BR/index.js b/frontend/src/i18n/pt_BR/index.js deleted file mode 100644 index b477d61600..0000000000 --- a/frontend/src/i18n/pt_BR/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "pt-br", - "month_and_day_fns": "d [de] MMMM [de] y" - }, - "form": { - "name": "Nome", - "amount_min": "Valor M\u00ednimo", - "amount_max": "Valor M\u00e1ximo", - "url": "link", - "title": "T\u00edtulo", - "first_date": "Primeira data", - "repetitions": "Repeti\u00e7\u00f5es", - "description": "Descri\u00e7\u00e3o", - "iban": "IBAN", - "skip": "Pular", - "date": "Data" - }, - "list": { - "name": "Nome", - "account_number": "N\u00famero da conta", - "currentBalance": "Saldo atual", - "lastActivity": "\u00daltima atividade", - "active": "Est\u00e1 ativo?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Or\u00e7amentos", - "subscriptions": "Assinaturas", - "transactions": "Transa\u00e7\u00f5es", - "title_expenses": "Despesas", - "title_withdrawal": "Despesas", - "title_revenue": "Receita \/ Renda", - "title_deposit": "Receita \/ Renda", - "title_transfer": "Transfer\u00eancias", - "title_transfers": "Transfer\u00eancias", - "asset_accounts": "Contas de ativos", - "expense_accounts": "Contas de despesas", - "revenue_accounts": "Contas de receitas", - "liabilities_accounts": "Passivos" - }, - "firefly": { - "administration_index": "Administra\u00e7\u00e3o financeira", - "actions": "A\u00e7\u00f5es", - "edit": "Editar", - "delete": "Apagar", - "reconcile": "Reconciliar", - "create_new_asset": "Criar nova conta de ativo", - "confirm_action": "Confirmar a\u00e7\u00e3o", - "new_budget": "Novo or\u00e7amento", - "new_asset_account": "Nova conta de ativo", - "newTransfer": "Nova transfer\u00eancia", - "submission_options": "Op\u00e7\u00f5es de envio", - "apply_rules_checkbox": "Aplicar regras", - "fire_webhooks_checkbox": "Acionar webhooks", - "newDeposit": "Novo dep\u00f3sito", - "newWithdrawal": "Nova despesa", - "bills_paid": "Faturas pagas", - "left_to_spend": "Restante para gastar", - "no_budget": "(sem or\u00e7amento)", - "budgeted": "Or\u00e7ado", - "spent": "Gasto", - "no_bill": "(sem fatura)", - "rule_trigger_source_account_starts_choice": "Nome da conta de origem come\u00e7a com..", - "rule_trigger_source_account_ends_choice": "O nome da conta de origem termina com..", - "rule_trigger_source_account_is_choice": "Nome da conta de origem \u00e9..", - "rule_trigger_source_account_contains_choice": "Nome da conta de origem cont\u00e9m..", - "rule_trigger_account_id_choice": "Ou ID da conta \u00e9 exatamente..", - "rule_trigger_source_account_id_choice": "ID da conta de origem \u00e9 igual a..", - "rule_trigger_destination_account_id_choice": "ID da conta de destino \u00e9 igual a..", - "rule_trigger_account_is_cash_choice": "Ou a conta \u00e9 dinheiro", - "rule_trigger_source_is_cash_choice": "Conta de origem \u00e9 (dinheiro)", - "rule_trigger_destination_is_cash_choice": "Conta de destino \u00e9 (dinheiro)", - "rule_trigger_source_account_nr_starts_choice": "N\u00famero da conta de origem (IBAN) come\u00e7a com..", - "rule_trigger_source_account_nr_ends_choice": "N\u00famero da conta de origem (IBAN) termina com..", - "rule_trigger_source_account_nr_is_choice": "N\u00famero da conta de origem (IBAN) \u00e9..", - "rule_trigger_source_account_nr_contains_choice": "N\u00famero da conta de origem (IBAN) cont\u00e9m..", - "rule_trigger_destination_account_starts_choice": "Nome da conta de destino come\u00e7a com..", - "rule_trigger_destination_account_ends_choice": "Nome da conta de destino termina com..", - "rule_trigger_destination_account_is_choice": "Nome da conta de destino \u00e9..", - "rule_trigger_destination_account_contains_choice": "Nome da conta de destino cont\u00e9m..", - "rule_trigger_destination_account_nr_starts_choice": "N\u00famero da conta de destino (IBAN) come\u00e7a com..", - "rule_trigger_destination_account_nr_ends_choice": "N\u00famero da conta de destino (IBAN) termina com..", - "rule_trigger_destination_account_nr_is_choice": "N\u00famero da conta de destino (IBAN) \u00e9..", - "rule_trigger_destination_account_nr_contains_choice": "N\u00famero da conta de destino (IBAN) cont\u00e9m..", - "rule_trigger_transaction_type_choice": "Transa\u00e7\u00e3o \u00e9 do tipo..", - "rule_trigger_category_is_choice": "A categoria \u00e9..", - "rule_trigger_amount_less_choice": "Valor \u00e9 menor ou igual a ..", - "rule_trigger_amount_is_choice": "Quantia \u00e9..", - "rule_trigger_amount_more_choice": "Valor \u00e9 maior ou igual a..", - "rule_trigger_description_starts_choice": "Descri\u00e7\u00e3o come\u00e7a com..", - "rule_trigger_description_ends_choice": "Descri\u00e7\u00e3o termina com..", - "rule_trigger_description_contains_choice": "Descri\u00e7\u00e3o cont\u00e9m..", - "rule_trigger_description_is_choice": "Descri\u00e7\u00e3o \u00e9..", - "rule_trigger_date_on_choice": "Data da transa\u00e7\u00e3o \u00e9..", - "rule_trigger_date_before_choice": "A data da transa\u00e7\u00e3o \u00e9 anterior a...", - "rule_trigger_date_after_choice": "A data da transa\u00e7\u00e3o \u00e9 posterior a...", - "rule_trigger_created_at_on_choice": "Transa\u00e7\u00e3o foi feita em..", - "rule_trigger_updated_at_on_choice": "Transa\u00e7\u00e3o foi editada pela \u00faltima vez em..", - "rule_trigger_budget_is_choice": "O or\u00e7amento \u00e9..", - "rule_trigger_tag_is_choice": "Qualquer tag \u00e9..", - "rule_trigger_currency_is_choice": "A moeda da transa\u00e7\u00e3o \u00e9..", - "rule_trigger_foreign_currency_is_choice": "A moeda estrangeira da transa\u00e7\u00e3o \u00e9...", - "rule_trigger_has_attachments_choice": "Tem pelo menos essa quantidade de anexos", - "rule_trigger_has_no_category_choice": "N\u00e3o tem categoria", - "rule_trigger_has_any_category_choice": "Tem uma categoria (qualquer)", - "rule_trigger_has_no_budget_choice": "N\u00e3o tem or\u00e7amento", - "rule_trigger_has_any_budget_choice": "Tem um or\u00e7amento (qualquer)", - "rule_trigger_has_no_bill_choice": "N\u00e3o tem nenhuma conta", - "rule_trigger_has_any_bill_choice": "Tem uma fatura (qualquer)", - "rule_trigger_has_no_tag_choice": "N\u00e3o tem tag(s)", - "rule_trigger_has_any_tag_choice": "Tem uma ou mais tags (qualquer)", - "rule_trigger_any_notes_choice": "Tem notas (qualquer)", - "rule_trigger_no_notes_choice": "N\u00e3o tem notas", - "rule_trigger_notes_is_choice": "As notas s\u00e3o..", - "rule_trigger_notes_contains_choice": "As notas cont\u00eam..", - "rule_trigger_notes_starts_choice": "As notas come\u00e7am com..", - "rule_trigger_notes_ends_choice": "As notas terminam com..", - "rule_trigger_bill_is_choice": "Fatura \u00e9..", - "rule_trigger_external_id_is_choice": "ID externo \u00e9..", - "rule_trigger_internal_reference_is_choice": "Refer\u00eancia interna \u00e9..", - "rule_trigger_journal_id_choice": "ID do livro de transa\u00e7\u00e3o \u00e9..", - "rule_trigger_any_external_url_choice": "A transa\u00e7\u00e3o tem uma URL externa (qualquer)", - "rule_trigger_no_external_url_choice": "A transa\u00e7\u00e3o n\u00e3o tem um link externo", - "rule_trigger_id_choice": "O identificador da transa\u00e7\u00e3o \u00e9..", - "rule_action_delete_transaction_choice": "EXCLUIR transa\u00e7\u00e3o(!)", - "rule_action_set_category_choice": "Definir a categoria para ..", - "rule_action_clear_category_choice": "Limpar qualquer categoria", - "rule_action_set_budget_choice": "Definir or\u00e7amento para ..", - "rule_action_clear_budget_choice": "Limpar qualquer or\u00e7amento", - "rule_action_add_tag_choice": "Adicionar tag ..", - "rule_action_remove_tag_choice": "Remover tag ..", - "rule_action_remove_all_tags_choice": "Remover todas as tags", - "rule_action_set_description_choice": "Definir descri\u00e7\u00e3o para ..", - "rule_action_update_piggy_choice": "Adicionar \/ remover o valor da transa\u00e7\u00e3o no cofrinho ..", - "rule_action_append_description_choice": "Adicionar descri\u00e7\u00e3o com ..", - "rule_action_prepend_description_choice": "Adicionar (ao come\u00e7o) descri\u00e7\u00e3o com ..", - "rule_action_set_source_account_choice": "Definir a conta de origem para ..", - "rule_action_set_destination_account_choice": "Definir a conta de destino para ..", - "rule_action_append_notes_choice": "Adicionar notas com ..", - "rule_action_prepend_notes_choice": "Adicionar (ao come\u00e7o) notas com ..", - "rule_action_clear_notes_choice": "Remover quaisquer notas", - "rule_action_set_notes_choice": "Defina notas para..", - "rule_action_link_to_bill_choice": "Vincular a uma fatura ..", - "rule_action_convert_deposit_choice": "Converter esta transfer\u00eancia em entrada", - "rule_action_convert_withdrawal_choice": "Converter esta transa\u00e7\u00e3o para uma sa\u00edda", - "rule_action_convert_transfer_choice": "Converter esta transa\u00e7\u00e3o para transfer\u00eancia", - "placeholder": "[Placeholder]", - "recurrences": "Transa\u00e7\u00f5es recorrentes", - "title_expenses": "Despesas", - "title_withdrawal": "Despesas", - "title_revenue": "Receitas \/ Renda", - "pref_1D": "Um dia", - "pref_1W": "Uma semana", - "pref_1M": "Um m\u00eas", - "pref_3M": "Trimestral", - "pref_6M": "Semestral", - "pref_1Y": "Um ano", - "repeat_freq_yearly": "anual", - "repeat_freq_half-year": "cada semestre", - "repeat_freq_quarterly": "trimestral", - "repeat_freq_monthly": "mensal", - "repeat_freq_weekly": "semanal", - "single_split": "Divis\u00e3o", - "asset_accounts": "Contas de ativo", - "expense_accounts": "Contas de despesas", - "liabilities_accounts": "Passivos", - "undefined_accounts": "Contas", - "name": "Nome", - "revenue_accounts": "Contas de receitas", - "description": "Descri\u00e7\u00e3o", - "category": "Categoria", - "title_deposit": "Receita \/ Renda", - "title_transfer": "Transfer\u00eancias", - "title_transfers": "Transfer\u00eancias", - "piggyBanks": "Cofrinhos", - "rules": "Regras", - "accounts": "Contas", - "categories": "Categorias", - "tags": "Tags", - "object_groups_page_title": "Grupos", - "reports": "Relat\u00f3rios", - "webhooks": "Webhooks", - "currencies": "Moedas", - "administration": "Administra\u00e7\u00e3o", - "profile": "Perfil", - "source_account": "Conta origem", - "destination_account": "Conta destino", - "amount": "Valor", - "date": "Data", - "time": "Hor\u00e1rio", - "preferences": "Prefer\u00eancias", - "transactions": "Transa\u00e7\u00f5es", - "balance": "Saldo", - "budgets": "Or\u00e7amentos", - "subscriptions": "Assinaturas", - "welcome_back": "O que est\u00e1 acontecendo?", - "bills_to_pay": "Faturas a pagar", - "net_worth": "Valor L\u00edquido", - "pref_last365": "Ano passado", - "pref_last90": "\u00daltimos 90 dias", - "pref_last30": "\u00daltimos 30 dias", - "pref_last7": "\u00daltimos 7 dias", - "pref_YTD": "Ano at\u00e9 \u00e0 data", - "pref_QTD": "Trimestre at\u00e9 \u00e0 data", - "pref_MTD": "M\u00eas at\u00e9 a data" - } -} diff --git a/frontend/src/i18n/pt_PT/index.js b/frontend/src/i18n/pt_PT/index.js deleted file mode 100644 index 88586edaa0..0000000000 --- a/frontend/src/i18n/pt_PT/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "pt", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Nome", - "amount_min": "Montante m\u00ednimo", - "amount_max": "Montante m\u00e1ximo", - "url": "URL", - "title": "T\u00edtulo", - "first_date": "Primeira data", - "repetitions": "Repeti\u00e7\u00f5es", - "description": "Descri\u00e7\u00e3o", - "iban": "IBAN", - "skip": "Pular", - "date": "Data" - }, - "list": { - "name": "Nome", - "account_number": "N\u00famero de conta", - "currentBalance": "Saldo atual", - "lastActivity": "\u00daltima atividade", - "active": "Esta ativo?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Or\u00e7amentos", - "subscriptions": "Subscri\u00e7\u00f5es", - "transactions": "Transa\u00e7\u00f5es", - "title_expenses": "Despesas", - "title_withdrawal": "Despesas", - "title_revenue": "Receita \/ rendimento", - "title_deposit": "Receita \/ rendimento", - "title_transfer": "Transfer\u00eancias", - "title_transfers": "Transfer\u00eancias", - "asset_accounts": "Contas de ativos", - "expense_accounts": "Contas de despesas", - "revenue_accounts": "Contas de receitas", - "liabilities_accounts": "Passivos" - }, - "firefly": { - "administration_index": "Administra\u00e7\u00e3o financeira", - "actions": "A\u00e7\u00f5es", - "edit": "Editar", - "delete": "Eliminar", - "reconcile": "Reconciliar", - "create_new_asset": "Criar nova conta de activos", - "confirm_action": "Confirmar a\u00e7\u00e3o", - "new_budget": "Novo or\u00e7amento", - "new_asset_account": "Nova conta de ativos", - "newTransfer": "Nova transfer\u00eancia", - "submission_options": "Op\u00e7\u00f5es de submiss\u00e3o", - "apply_rules_checkbox": "Aplicar regras", - "fire_webhooks_checkbox": "Ativar webhooks", - "newDeposit": "Novo dep\u00f3sito", - "newWithdrawal": "Nova despesa", - "bills_paid": "Encargos pagos", - "left_to_spend": "Restante para gastar", - "no_budget": "(sem or\u00e7amento)", - "budgeted": "Or\u00e7amentado", - "spent": "Gasto", - "no_bill": "(sem encargo)", - "rule_trigger_source_account_starts_choice": "O nome da conta de origem come\u00e7a com..", - "rule_trigger_source_account_ends_choice": "O nome da conta de origem acaba com..", - "rule_trigger_source_account_is_choice": "O nome da conta de origem \u00e9..", - "rule_trigger_source_account_contains_choice": "Nome da conta de origem cont\u00e9m..", - "rule_trigger_account_id_choice": "Qualquer ID de conta \u00e9 exatamente..", - "rule_trigger_source_account_id_choice": "O ID da conta de origem \u00e9 exatamente..", - "rule_trigger_destination_account_id_choice": "O ID da conta de destino \u00e9 exatamente..", - "rule_trigger_account_is_cash_choice": "Qualquer uma das contas \u00e9 de caixa", - "rule_trigger_source_is_cash_choice": "A conta de origem \u00e9 uma conta (caixa)", - "rule_trigger_destination_is_cash_choice": "A conta de destino \u00e9 uma conta (caixa)", - "rule_trigger_source_account_nr_starts_choice": "N\u00famero \/ IBAN da conta de origem come\u00e7a com..", - "rule_trigger_source_account_nr_ends_choice": "N\u00famero \/ IBAN da conta de origem acaba com..", - "rule_trigger_source_account_nr_is_choice": "N\u00famero \/ IBAN da conta de origem \u00e9..", - "rule_trigger_source_account_nr_contains_choice": "O n\u00famero \/ IBAN da conta de origem cont\u00e9m..", - "rule_trigger_destination_account_starts_choice": "Nome da conta de destino come\u00e7a com..", - "rule_trigger_destination_account_ends_choice": "O nome da conta de destino acaba com..", - "rule_trigger_destination_account_is_choice": "O nome da conta de destino \u00e9..", - "rule_trigger_destination_account_contains_choice": "O nome da conta de destino cont\u00e9m..", - "rule_trigger_destination_account_nr_starts_choice": "O n\u00famero \/ IBAN da conta de destino come\u00e7a com..", - "rule_trigger_destination_account_nr_ends_choice": "O n\u00famero \/ IBAN da conta de destino acaba com..", - "rule_trigger_destination_account_nr_is_choice": "O n\u00famero \/ IBAN da conta de destino \u00e9..", - "rule_trigger_destination_account_nr_contains_choice": "O n\u00famero \/ IBAN da conta de destino cont\u00e9m..", - "rule_trigger_transaction_type_choice": "A transa\u00e7\u00e3o \u00e9 do tipo..", - "rule_trigger_category_is_choice": "A categoria \u00e9..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "O montante \u00e9..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "A descri\u00e7\u00e3o come\u00e7a com..", - "rule_trigger_description_ends_choice": "A descri\u00e7\u00e3o termina com..", - "rule_trigger_description_contains_choice": "A descri\u00e7\u00e3o cont\u00e9m..", - "rule_trigger_description_is_choice": "A descri\u00e7\u00e3o \u00e9..", - "rule_trigger_date_on_choice": "A data da transa\u00e7\u00e3o \u00e9..", - "rule_trigger_date_before_choice": "A data da transa\u00e7\u00e3o \u00e9 anterior..", - "rule_trigger_date_after_choice": "A data da transa\u00e7\u00e3o \u00e9 ap\u00f3s..", - "rule_trigger_created_at_on_choice": "A transa\u00e7\u00e3o foi realizada em..", - "rule_trigger_updated_at_on_choice": "A transa\u00e7\u00e3o foi editada pela \u00faltima vez em..", - "rule_trigger_budget_is_choice": "O or\u00e7amento \u00e9..", - "rule_trigger_tag_is_choice": "Uma etiqueta \u00e9..", - "rule_trigger_currency_is_choice": "A moeda da transa\u00e7\u00e3o \u00e9..", - "rule_trigger_foreign_currency_is_choice": "A moeda estrangeira da transa\u00e7\u00e3o \u00e9..", - "rule_trigger_has_attachments_choice": "Tem, pelo menos, esta quantidade de anexos", - "rule_trigger_has_no_category_choice": "N\u00e3o tem categoria", - "rule_trigger_has_any_category_choice": "Tem (pelo menos) uma categoria", - "rule_trigger_has_no_budget_choice": "N\u00e3o tem or\u00e7amento", - "rule_trigger_has_any_budget_choice": "Tem (pelo menos) um or\u00e7amento", - "rule_trigger_has_no_bill_choice": "N\u00e3o tem encargo", - "rule_trigger_has_any_bill_choice": "Tem (pelo menos) um encargo", - "rule_trigger_has_no_tag_choice": "N\u00e3o tem etiquetas", - "rule_trigger_has_any_tag_choice": "Tem uma ou mais etiquetas (quaisquer)", - "rule_trigger_any_notes_choice": "Tem notas (quaisquer)", - "rule_trigger_no_notes_choice": "N\u00e3o tem notas", - "rule_trigger_notes_is_choice": "As notas s\u00e3o..", - "rule_trigger_notes_contains_choice": "As notas cont\u00eam..", - "rule_trigger_notes_starts_choice": "As notas comecam com..", - "rule_trigger_notes_ends_choice": "As notas terminam com..", - "rule_trigger_bill_is_choice": "O encargo \u00e9..", - "rule_trigger_external_id_is_choice": "O ID Externo \u00e9..", - "rule_trigger_internal_reference_is_choice": "A refer\u00eancia interna \u00e9..", - "rule_trigger_journal_id_choice": "O ID do di\u00e1rio de transa\u00e7\u00f5es \u00e9..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "A transa\u00e7\u00e3o n\u00e3o tem nenhum URL externo", - "rule_trigger_id_choice": "ID da transa\u00e7\u00e3o \u00e9..", - "rule_action_delete_transaction_choice": "APAGAR transa\u00e7\u00e3o(!)", - "rule_action_set_category_choice": "Atribuir a categoria..", - "rule_action_clear_category_choice": "Limpar qualquer categoria", - "rule_action_set_budget_choice": "Atribuir o or\u00e7amento..", - "rule_action_clear_budget_choice": "Limpar qualquer or\u00e7amento", - "rule_action_add_tag_choice": "Adicionar etiqueta..", - "rule_action_remove_tag_choice": "Remover etiqueta..", - "rule_action_remove_all_tags_choice": "Remover todas as etiquetas", - "rule_action_set_description_choice": "Atribuir a descri\u00e7\u00e3o..", - "rule_action_update_piggy_choice": "Adicionar \/ remover montante da transa\u00e7\u00e3o ao mealheiro..", - "rule_action_append_description_choice": "Acrescentar ao final da descri\u00e7\u00e3o..", - "rule_action_prepend_description_choice": "Acrescentar ao in\u00edcio da descri\u00e7\u00e3o..", - "rule_action_set_source_account_choice": "Atribuir a conta de origem..", - "rule_action_set_destination_account_choice": "Atribuir a conta de destino..", - "rule_action_append_notes_choice": "Acrescentar ao final das notas..", - "rule_action_prepend_notes_choice": "Preceder notas com..", - "rule_action_clear_notes_choice": "Remover todas as notas", - "rule_action_set_notes_choice": "Atribuir as notas..", - "rule_action_link_to_bill_choice": "Ligar a encargo..", - "rule_action_convert_deposit_choice": "Converter a transa\u00e7\u00e3o num dep\u00f3sito", - "rule_action_convert_withdrawal_choice": "Converter a transa\u00e7\u00e3o num levantamento", - "rule_action_convert_transfer_choice": "Converter a transa\u00e7\u00e3o numa transfer\u00eancia", - "placeholder": "[Placeholder]", - "recurrences": "Transa\u00e7\u00f5es recorrentes", - "title_expenses": "Despesas", - "title_withdrawal": "Despesas", - "title_revenue": "Receita \/ rendimento", - "pref_1D": "Um dia", - "pref_1W": "Uma semana", - "pref_1M": "Um m\u00eas", - "pref_3M": "Tr\u00eas meses (trimestre)", - "pref_6M": "Seis meses", - "pref_1Y": "Um ano", - "repeat_freq_yearly": "anualmente", - "repeat_freq_half-year": "a cada meio ano", - "repeat_freq_quarterly": "trimestral", - "repeat_freq_monthly": "mensalmente", - "repeat_freq_weekly": "semanalmente", - "single_split": "Divis\u00e3o", - "asset_accounts": "Conta de ativos", - "expense_accounts": "Conta de despesas", - "liabilities_accounts": "Conta de passivos", - "undefined_accounts": "Contas", - "name": "Nome", - "revenue_accounts": "Conta de receitas", - "description": "Descri\u00e7\u00e3o", - "category": "Categoria", - "title_deposit": "Receita \/ rendimento", - "title_transfer": "Transfer\u00eancias", - "title_transfers": "Transfer\u00eancias", - "piggyBanks": "Mealheiros", - "rules": "Regras", - "accounts": "Contas", - "categories": "Categorias", - "tags": "Etiquetas", - "object_groups_page_title": "Grupos", - "reports": "Relat\u00f3rios", - "webhooks": "Webhooks", - "currencies": "Moedas", - "administration": "Administra\u00e7\u00e3o", - "profile": "Perfil", - "source_account": "Conta de origem", - "destination_account": "Conta de destino", - "amount": "Montante", - "date": "Data", - "time": "Hora", - "preferences": "Prefer\u00eancias", - "transactions": "Transa\u00e7\u00f5es", - "balance": "Saldo", - "budgets": "Or\u00e7amentos", - "subscriptions": "Subscri\u00e7\u00f5es", - "welcome_back": "Painel de controlo", - "bills_to_pay": "Encargos a pagar", - "net_worth": "Posi\u00e7\u00e3o global", - "pref_last365": "No ano passado", - "pref_last90": "\u00daltimos 90 dias", - "pref_last30": "\u00daltimos 30 dias", - "pref_last7": "\u00daltimos 7 dias", - "pref_YTD": "Ano corrente", - "pref_QTD": "Trimestre corrente", - "pref_MTD": "M\u00eas corrente" - } -} diff --git a/frontend/src/i18n/ro_RO/index.js b/frontend/src/i18n/ro_RO/index.js deleted file mode 100644 index d51ad62b74..0000000000 --- a/frontend/src/i18n/ro_RO/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "ro", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Nume", - "amount_min": "Suma minim\u0103", - "amount_max": "suma maxim\u0103", - "url": "URL", - "title": "Titlu", - "first_date": "Prima dat\u0103", - "repetitions": "Repet\u0103ri", - "description": "Descriere", - "iban": "IBAN", - "skip": "Sari peste", - "date": "Dat\u0103" - }, - "list": { - "name": "Nume", - "account_number": "Account number", - "currentBalance": "Sold curent", - "lastActivity": "Ultima activitate", - "active": "Este activ?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Ac\u021biuni", - "edit": "Editeaz\u0103", - "delete": "\u0218terge", - "reconcile": "Reconcilia", - "create_new_asset": "Crea\u021bi un nou cont de active", - "confirm_action": "Confirm action", - "new_budget": "Buget nou", - "new_asset_account": "Cont nou de activ", - "newTransfer": "Transfer nou", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Depozit nou", - "newWithdrawal": "Cheltuieli noi", - "bills_paid": "Facturile pl\u0103tite", - "left_to_spend": "Ramas de cheltuit", - "no_budget": "(nici un buget)", - "budgeted": "Bugetat", - "spent": "Cheltuit", - "no_bill": "(f\u0103r\u0103 factur\u0103)", - "rule_trigger_source_account_starts_choice": "Numele contului surs\u0103 \u00eencepe cu..", - "rule_trigger_source_account_ends_choice": "Numele contului surs\u0103 se termin\u0103 cu..", - "rule_trigger_source_account_is_choice": "Numele contului surs\u0103 este..", - "rule_trigger_source_account_contains_choice": "Numele contului surs\u0103 con\u021bine..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "ID-ul contului surs\u0103 este exact..", - "rule_trigger_destination_account_id_choice": "ID-ul contului destina\u021biei este exact..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Contul surs\u0103 este (numerar)", - "rule_trigger_destination_is_cash_choice": "Contul destina\u021biei este (numerar)", - "rule_trigger_source_account_nr_starts_choice": "Num\u0103rul contului surs\u0103\/IBAN \u00eencepe cu..", - "rule_trigger_source_account_nr_ends_choice": "Num\u0103rul contului surs\u0103\/ IBAN se \u00eencheie cu..", - "rule_trigger_source_account_nr_is_choice": "Num\u0103rul contului surs\u0103\/ IBAN este..", - "rule_trigger_source_account_nr_contains_choice": "Num\u0103rul contului surs\u0103\/ IBAN con\u021bine..", - "rule_trigger_destination_account_starts_choice": "Numele contului de destina\u021bie \u00eencepe cu..", - "rule_trigger_destination_account_ends_choice": "Numele contului de destina\u021bie se \u00eencheie cu..", - "rule_trigger_destination_account_is_choice": "Numele contului destina\u021bie este..", - "rule_trigger_destination_account_contains_choice": "Numele contului destina\u021biei con\u021bine..", - "rule_trigger_destination_account_nr_starts_choice": "Num\u0103rul contului destina\u021biei\/IBAN \u00eencepe cu..", - "rule_trigger_destination_account_nr_ends_choice": "Num\u0103rul contului de destina\u021bie\/IBAN se \u00eencheie cu..", - "rule_trigger_destination_account_nr_is_choice": "Num\u0103rul contului destina\u021biei\/IBAN este..", - "rule_trigger_destination_account_nr_contains_choice": "Num\u0103rul contului de destina\u021bie\/IBAN con\u021bine..", - "rule_trigger_transaction_type_choice": "Tranzac\u021bia este de tip..", - "rule_trigger_category_is_choice": "Categoria este..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Descrierea \u00eencepe cu..", - "rule_trigger_description_ends_choice": "Descrierea se termin\u0103 cu..", - "rule_trigger_description_contains_choice": "Descrierea con\u021bine..", - "rule_trigger_description_is_choice": "Descrierea este..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Data tranzac\u021biei este dinainte..", - "rule_trigger_date_after_choice": "Data tranzac\u021biei este dup\u0103..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Bugetul este..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Moneda tranzac\u021biei este..", - "rule_trigger_foreign_currency_is_choice": "Tranzac\u021bia valutar\u0103 este..", - "rule_trigger_has_attachments_choice": "Are cel pu\u021bin at\u00e2tea ata\u0219amente", - "rule_trigger_has_no_category_choice": "Nu are nici o categorie", - "rule_trigger_has_any_category_choice": "Are o (orice) categorie", - "rule_trigger_has_no_budget_choice": "Nu are niciun buget", - "rule_trigger_has_any_budget_choice": "Are un (orice) buget", - "rule_trigger_has_no_bill_choice": "Nu are factur\u0103", - "rule_trigger_has_any_bill_choice": "Are o (orice) factur\u0103", - "rule_trigger_has_no_tag_choice": "Nu are etichet\u0103 (e)", - "rule_trigger_has_any_tag_choice": "Are una sau mai multe etichete", - "rule_trigger_any_notes_choice": "Are (orice) noti\u021be", - "rule_trigger_no_notes_choice": "Nu are noti\u021be", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Factura este..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "ID-ul jurnalului de tranzac\u021bie este..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u0218terge\u021bi any category", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u0218terge\u021bi any budget", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Elimina\u021bi toate etichetele", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Elimina\u021bi orice noti\u021b\u0103", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Transforma\u021bi tranzac\u021bia \u00eentr-un depozit", - "rule_action_convert_withdrawal_choice": "Transforma\u021bi tranzac\u021bia \u00eentr-o retragere", - "rule_action_convert_transfer_choice": "Transforma\u021bi tranzac\u021bia \u00eentr-un transfer", - "placeholder": "[Placeholder]", - "recurrences": "Tranzac\u021bii recurente", - "title_expenses": "Cheltuieli", - "title_withdrawal": "Cheltuieli", - "title_revenue": "Venituri", - "pref_1D": "O zi", - "pref_1W": "O saptam\u00e2n\u0103", - "pref_1M": "O lun\u0103", - "pref_3M": "Trei luni (trimestru)", - "pref_6M": "\u0218ase luni", - "pref_1Y": "Un an", - "repeat_freq_yearly": "anual", - "repeat_freq_half-year": "fiecare jum\u0103tate de an", - "repeat_freq_quarterly": "trimestrial", - "repeat_freq_monthly": "lunar", - "repeat_freq_weekly": "s\u0103pt\u0103m\u00e2nal", - "single_split": "\u00cemparte", - "asset_accounts": "Conturile de active", - "expense_accounts": "Conturi de cheltuieli", - "liabilities_accounts": "Provizioane", - "undefined_accounts": "Accounts", - "name": "Nume", - "revenue_accounts": "Conturi de venituri", - "description": "Descriere", - "category": "Categorie", - "title_deposit": "Venituri", - "title_transfer": "Transferuri", - "title_transfers": "Transferuri", - "piggyBanks": "Pu\u0219culi\u021b\u0103", - "rules": "Reguli", - "accounts": "Conturi", - "categories": "Categorii", - "tags": "Etichete", - "object_groups_page_title": "Grupuri", - "reports": "Rapoarte", - "webhooks": "Webhook-uri", - "currencies": "Monede", - "administration": "Administrare", - "profile": "Profil", - "source_account": "Contul surs\u0103", - "destination_account": "Contul de destina\u021bie", - "amount": "Sum\u0103", - "date": "Dat\u0103", - "time": "Timp", - "preferences": "Preferin\u021be", - "transactions": "Tranzac\u021bii", - "balance": "Balant\u0103", - "budgets": "Buget", - "subscriptions": "Subscriptions", - "welcome_back": "Ce se red\u0103?", - "bills_to_pay": "Facturile de plat\u0103", - "net_worth": "Valoarea net\u0103", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/ru_RU/index.js b/frontend/src/i18n/ru_RU/index.js deleted file mode 100644 index 7a9fd1561b..0000000000 --- a/frontend/src/i18n/ru_RU/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "ru", - "month_and_day_fns": "D MMMM YYYY" - }, - "form": { - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "amount_min": "\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430", - "amount_max": "\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430", - "url": "\u0421\u0441\u044b\u043b\u043a\u0430", - "title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", - "first_date": "\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u0430\u0442\u0430", - "repetitions": "\u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f", - "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", - "iban": "IBAN", - "skip": "\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c", - "date": "\u0414\u0430\u0442\u0430" - }, - "list": { - "name": "\u0418\u043c\u044f", - "account_number": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430", - "currentBalance": "\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0430\u043b\u0430\u043d\u0441", - "lastActivity": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c", - "active": "\u0410\u043a\u0442\u0438\u0432\u0435\u043d?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442", - "subscriptions": "\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0438", - "transactions": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "title_expenses": "\u0420\u0430\u0441\u0445\u043e\u0434\u044b", - "title_withdrawal": "\u0420\u0430\u0441\u0445\u043e\u0434\u044b", - "title_revenue": "\u0414\u043e\u0445\u043e\u0434\u044b \/ \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f", - "title_deposit": "\u0414\u043e\u0445\u043e\u0434\u044b \/ \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f", - "title_transfer": "\u041f\u0435\u0440\u0435\u0432\u043e\u0434", - "title_transfers": "\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u044b", - "asset_accounts": "\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0447\u0435\u0442\u0430", - "expense_accounts": "\u0421\u0447\u0435\u0442\u0430 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432", - "revenue_accounts": "\u0421\u0447\u0435\u0442\u0430 \u0434\u043e\u0445\u043e\u0434\u043e\u0432", - "liabilities_accounts": "\u0414\u043e\u043b\u0433\u0438" - }, - "firefly": { - "administration_index": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438", - "actions": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f", - "edit": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c", - "delete": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c", - "reconcile": "\u0421\u0432\u0435\u0440\u0438\u0442\u044c", - "create_new_asset": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0447\u0451\u0442", - "confirm_action": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435", - "new_budget": "\u041d\u043e\u0432\u044b\u0439 \u0431\u044e\u0434\u0436\u0435\u0442", - "new_asset_account": "\u041d\u043e\u0432\u044b\u0439 \u0441\u0447\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043e\u0432", - "newTransfer": "\u041d\u043e\u0432\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434", - "submission_options": "\u041e\u043f\u0446\u0438\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438", - "apply_rules_checkbox": "\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u0445\u043e\u0434", - "newWithdrawal": "\u041d\u043e\u0432\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434", - "bills_paid": "\u041e\u043f\u043b\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0441\u0447\u0435\u0442\u0430", - "left_to_spend": "\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c", - "no_budget": "(\u0432\u043d\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u0430)", - "budgeted": "\u0417\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u0431\u044e\u0434\u0436\u0435\u0442\u0435", - "spent": "\u0420\u0430\u0441\u0445\u043e\u0434", - "no_bill": "(\u043d\u0435\u0442 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443)", - "rule_trigger_source_account_starts_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441..", - "rule_trigger_source_account_ends_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430..", - "rule_trigger_source_account_is_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430..", - "rule_trigger_source_account_contains_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "ID \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441..", - "rule_trigger_destination_account_id_choice": "ID \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441..", - "rule_trigger_account_is_cash_choice": "\u041b\u044e\u0431\u043e\u0439 \u0441\u0447\u0435\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043b\u0438\u0447\u043d\u044b\u043c\u0438", - "rule_trigger_source_is_cash_choice": "\u0421\u0447\u0451\u0442-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a - \u044d\u0442\u043e (\u043d\u0430\u043b\u0438\u0447\u043d\u044b\u0439) \u0441\u0447\u0451\u0442", - "rule_trigger_destination_is_cash_choice": "\u0421\u0447\u0451\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - \u044d\u0442\u043e (\u043d\u0430\u043b\u0438\u0447\u043d\u044b\u0439) \u0441\u0447\u0451\u0442", - "rule_trigger_source_account_nr_starts_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \/ IBAN \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441..", - "rule_trigger_source_account_nr_ends_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \/ IBAN \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430..", - "rule_trigger_source_account_nr_is_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \/ IBAN..", - "rule_trigger_source_account_nr_contains_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \/ IBAN \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442..", - "rule_trigger_destination_account_starts_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441..", - "rule_trigger_destination_account_ends_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430..", - "rule_trigger_destination_account_is_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f..", - "rule_trigger_destination_account_contains_choice": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442..", - "rule_trigger_destination_account_nr_starts_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \/ IBAN \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441..", - "rule_trigger_destination_account_nr_ends_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \/ IBAN \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430..", - "rule_trigger_destination_account_nr_is_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \/ IBAN..", - "rule_trigger_destination_account_nr_contains_choice": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \/ IBAN \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442..", - "rule_trigger_transaction_type_choice": "\u0422\u0438\u043f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 =", - "rule_trigger_category_is_choice": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f =", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "\u0421\u0443\u043c\u043c\u0430..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441...", - "rule_trigger_description_ends_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430...", - "rule_trigger_description_contains_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442...", - "rule_trigger_description_is_choice": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 =", - "rule_trigger_date_on_choice": "\u0414\u0430\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438..", - "rule_trigger_date_before_choice": "\u0414\u0430\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0434\u043e...", - "rule_trigger_date_after_choice": "\u0414\u0430\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435..", - "rule_trigger_created_at_on_choice": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0430..", - "rule_trigger_updated_at_on_choice": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438..", - "rule_trigger_budget_is_choice": "\u0411\u044e\u0434\u0436\u0435\u0442 =", - "rule_trigger_tag_is_choice": "\u041b\u044e\u0431\u043e\u0439 \u0442\u0435\u0433..", - "rule_trigger_currency_is_choice": "\u0412\u0430\u043b\u044e\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 -", - "rule_trigger_foreign_currency_is_choice": "\u0412\u0430\u043b\u044e\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 -", - "rule_trigger_has_attachments_choice": "\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0439", - "rule_trigger_has_no_category_choice": "\u041d\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438", - "rule_trigger_has_any_category_choice": "\u0421\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 (\u043b\u044e\u0431\u043e\u0439) \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0435\u0439", - "rule_trigger_has_no_budget_choice": "\u041d\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0430", - "rule_trigger_has_any_budget_choice": "\u0421\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 (\u043b\u044e\u0431\u044b\u043c) \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c", - "rule_trigger_has_no_bill_choice": "\u041d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0447\u0435\u0442\u043e\u0432", - "rule_trigger_has_any_bill_choice": "\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 (\u043b\u044e\u0431\u043e\u0439) \u0441\u0447\u0451\u0442", - "rule_trigger_has_no_tag_choice": "\u041d\u0435\u0442 \u043c\u0435\u0442\u043e\u043a", - "rule_trigger_has_any_tag_choice": "\u0415\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e (\u043b\u044e\u0431\u044b\u0445) \u043c\u0435\u0442\u043e\u043a", - "rule_trigger_any_notes_choice": "\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 (\u043b\u044e\u0431\u044b\u0435) \u0437\u0430\u043c\u0435\u0442\u043a\u0438", - "rule_trigger_no_notes_choice": "\u041d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u043e\u043a", - "rule_trigger_notes_is_choice": "\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f..", - "rule_trigger_notes_contains_choice": "\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442..", - "rule_trigger_notes_starts_choice": "\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441..", - "rule_trigger_notes_ends_choice": "\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430..", - "rule_trigger_bill_is_choice": "\u0421\u0447\u0451\u0442 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443 = ..", - "rule_trigger_external_id_is_choice": "\u0412\u043d\u0435\u0448\u043d\u0438\u0439 ID..", - "rule_trigger_internal_reference_is_choice": "\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0441\u0441\u044b\u043b\u043a\u0430..", - "rule_trigger_journal_id_choice": "ID \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "\u0423 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043d\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e URL", - "rule_trigger_id_choice": "ID \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0431\u044e\u0434\u0436\u0435\u0442", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043c\u0435\u0442\u043a\u0438...", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0437\u0430\u043c\u0435\u0442\u043a\u0438", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0432 \u0434\u043e\u0445\u043e\u0434", - "rule_action_convert_withdrawal_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0432 \u0440\u0430\u0441\u0445\u043e\u0434", - "rule_action_convert_transfer_choice": "\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434", - "placeholder": "[Placeholder]", - "recurrences": "\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "title_expenses": "\u0420\u0430\u0441\u0445\u043e\u0434\u044b", - "title_withdrawal": "\u0420\u0430\u0441\u0445\u043e\u0434\u044b", - "title_revenue": "\u0414\u043e\u0445\u043e\u0434", - "pref_1D": "\u041e\u0434\u0438\u043d \u0434\u0435\u043d\u044c", - "pref_1W": "\u041e\u0434\u043d\u0430 \u043d\u0435\u0434\u0435\u043b\u044f", - "pref_1M": "\u041e\u0434\u0438\u043d \u043c\u0435\u0441\u044f\u0446", - "pref_3M": "\u0422\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430 (\u043a\u0432\u0430\u0440\u0442\u0430\u043b)", - "pref_6M": "\u0428\u0435\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432", - "pref_1Y": "\u041e\u0434\u0438\u043d \u0433\u043e\u0434", - "repeat_freq_yearly": "\u0435\u0436\u0435\u0433\u043e\u0434\u043d\u043e", - "repeat_freq_half-year": "\u0440\u0430\u0437 \u0432 \u043f\u043e\u043b\u0433\u043e\u0434\u0430", - "repeat_freq_quarterly": "\u0440\u0430\u0437 \u0432 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", - "repeat_freq_monthly": "\u0435\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u043e", - "repeat_freq_weekly": "\u0435\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e", - "single_split": "\u0420\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f", - "asset_accounts": "\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0447\u0435\u0442\u0430", - "expense_accounts": "\u0421\u0447\u0435\u0442\u0430 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432", - "liabilities_accounts": "\u0414\u043e\u043b\u0433\u0438", - "undefined_accounts": "\u0423\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438", - "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435", - "revenue_accounts": "\u0421\u0447\u0435\u0442\u0430 \u0434\u043e\u0445\u043e\u0434\u043e\u0432", - "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", - "category": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", - "title_deposit": "\u0414\u043e\u0445\u043e\u0434", - "title_transfer": "\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u044b", - "title_transfers": "\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u044b", - "piggyBanks": "\u041a\u043e\u043f\u0438\u043b\u043a\u0438", - "rules": "\u041f\u0440\u0430\u0432\u0438\u043b\u0430", - "accounts": "\u0421\u0447\u0435\u0442\u0430", - "categories": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438", - "tags": "\u041c\u0435\u0442\u043a\u0438", - "object_groups_page_title": "\u0413\u0440\u0443\u043f\u043f\u044b", - "reports": "\u041e\u0442\u0447\u0451\u0442\u044b", - "webhooks": "\u0412\u0435\u0431-\u0445\u0443\u043a\u0438", - "currencies": "\u0412\u0430\u043b\u044e\u0442\u044b", - "administration": "\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", - "profile": "\u041f\u0440\u043e\u0444\u0438\u043b\u044c", - "source_account": "\u0421\u0447\u0451\u0442-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a", - "destination_account": "\u0421\u0447\u0451\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f", - "amount": "\u0421\u0443\u043c\u043c\u0430", - "date": "\u0414\u0430\u0442\u0430", - "time": "\u0412\u0440\u0435\u043c\u044f", - "preferences": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438", - "transactions": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "balance": "\u0411a\u043ba\u043dc", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442", - "subscriptions": "\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0438", - "welcome_back": "\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043c\u043e\u0438\u043c\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438?", - "bills_to_pay": "\u0421\u0447\u0435\u0442\u0430 \u043a \u043e\u043f\u043b\u0430\u0442\u0435", - "net_worth": "\u041c\u043e\u0438 \u0441\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u044f", - "pref_last365": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0433\u043e\u0434", - "pref_last90": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 90 \u0434\u043d\u0435\u0439", - "pref_last30": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 30 \u0434\u043d\u0435\u0439", - "pref_last7": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 7 \u0434\u043d\u0435\u0439", - "pref_YTD": "\u0417\u0430 \u0433\u043e\u0434 \u0434\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f", - "pref_QTD": "\u041a\u0432\u0430\u0440\u0442\u0430\u043b \u0434\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0433\u043e \u0434\u043d\u044f", - "pref_MTD": "\u041c\u0435\u0441\u044f\u0446 \u0434\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0433\u043e \u0434\u043d\u044f" - } -} diff --git a/frontend/src/i18n/sk_SK/index.js b/frontend/src/i18n/sk_SK/index.js deleted file mode 100644 index 0611c91eea..0000000000 --- a/frontend/src/i18n/sk_SK/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "sk", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "N\u00e1zov", - "amount_min": "Minim\u00e1lna suma", - "amount_max": "Maxim\u00e1lna suma", - "url": "URL", - "title": "N\u00e1zov", - "first_date": "Prv\u00fd d\u00e1tum", - "repetitions": "Opakovan\u00ed", - "description": "Popis", - "iban": "IBAN", - "skip": "Presko\u010di\u0165", - "date": "D\u00e1tum" - }, - "list": { - "name": "Meno\/N\u00e1zov", - "account_number": "Account number", - "currentBalance": "Aktu\u00e1lny zostatok", - "lastActivity": "Posledn\u00e1 aktivita", - "active": "Akt\u00edvne?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Budgets", - "subscriptions": "Subscriptions", - "transactions": "Transactions", - "title_expenses": "Expenses", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "Transfers", - "title_transfers": "Transfers", - "asset_accounts": "Asset accounts", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Akcie", - "edit": "Upravi\u0165", - "delete": "Odstr\u00e1ni\u0165", - "reconcile": "Vy\u00fa\u010dtova\u0165", - "create_new_asset": "Vytvori\u0165 nov\u00fd \u00fa\u010det akt\u00edv", - "confirm_action": "Confirm action", - "new_budget": "Nov\u00fd rozpo\u010det", - "new_asset_account": "Nov\u00fd \u00fa\u010det akt\u00edv", - "newTransfer": "Nov\u00fd p\u0159evod", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Nov\u00fd vklad", - "newWithdrawal": "Nov\u00fd v\u00fddavok", - "bills_paid": "Zaplaten\u00e9 \u00fa\u010dty", - "left_to_spend": "Zost\u00e1va k \u00fatrate", - "no_budget": "(\u017eiadny rozpo\u010det)", - "budgeted": "Rozpo\u010dtovan\u00e9", - "spent": "Utraten\u00e9", - "no_bill": "(\u017eiadny \u00fa\u010det)", - "rule_trigger_source_account_starts_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu za\u010d\u00edna..", - "rule_trigger_source_account_ends_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu kon\u010d\u00ed..", - "rule_trigger_source_account_is_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu je..", - "rule_trigger_source_account_contains_choice": "N\u00e1zov zdrojov\u00e9ho \u00fa\u010dtu obsahuje..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "ID zdrojov\u00e9ho \u00fa\u010dtu je presne..", - "rule_trigger_destination_account_id_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu je presne..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Zdrojov\u00fd \u00fa\u010det je (hotovostn\u00fd) \u00fa\u010det", - "rule_trigger_destination_is_cash_choice": "Cie\u013eov\u00fd \u00fa\u010det je (hotovostn\u00fd) \u00fa\u010det", - "rule_trigger_source_account_nr_starts_choice": "\u010c\u00edslo cie\u013eov\u00e9ho \u00fa\u010dtu \/ IBAN za\u010d\u00edna..", - "rule_trigger_source_account_nr_ends_choice": "\u010c\u00edslo zdrojov\u00e9ho \u00fa\u010dtu \/ IBAN kon\u010d\u00ed..", - "rule_trigger_source_account_nr_is_choice": "\u010c\u00edslo zdrojov\u00e9ho \u00fa\u010dtu \/ IBAN je..", - "rule_trigger_source_account_nr_contains_choice": "\u010c\u00edslo zdrojov\u00e9ho \u00fa\u010dtu \/ IBAN obsahuje..", - "rule_trigger_destination_account_starts_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu za\u010d\u00edna..", - "rule_trigger_destination_account_ends_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu kon\u010d\u00ed..", - "rule_trigger_destination_account_is_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu je..", - "rule_trigger_destination_account_contains_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu obsahuje..", - "rule_trigger_destination_account_nr_starts_choice": "\u010c\u00edslo cie\u013eov\u00e9ho \u00fa\u010dtu \/ IBAN za\u010d\u00edna..", - "rule_trigger_destination_account_nr_ends_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu \/ IBAN kon\u010d\u00ed..", - "rule_trigger_destination_account_nr_is_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu \/ IBAN je..", - "rule_trigger_destination_account_nr_contains_choice": "N\u00e1zov cie\u013eov\u00e9ho \u00fa\u010dtu \/ IBAN obsahuje..", - "rule_trigger_transaction_type_choice": "Transakcia je typu..", - "rule_trigger_category_is_choice": "Kateg\u00f3ria je..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Popis za\u010d\u00edna..", - "rule_trigger_description_ends_choice": "Popis kon\u010d\u00ed..", - "rule_trigger_description_contains_choice": "Popis obsahuje..", - "rule_trigger_description_is_choice": "Popis je..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "D\u00e1tum transakcie je pred..", - "rule_trigger_date_after_choice": "D\u00e1tum transakcie je po..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Rozpo\u010det je\u2026", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Mena transakcie je..", - "rule_trigger_foreign_currency_is_choice": "Cudzia mena transakcie je..", - "rule_trigger_has_attachments_choice": "M\u00e1 po\u010det pr\u00edloh minim\u00e1lne", - "rule_trigger_has_no_category_choice": "Nem\u00e1 \u017eiadnu kateg\u00f3riu", - "rule_trigger_has_any_category_choice": "M\u00e1 (\u013eubovo\u013en\u00fa) kateg\u00f3riu", - "rule_trigger_has_no_budget_choice": "Nem\u00e1 \u017eiadny rozpo\u010det", - "rule_trigger_has_any_budget_choice": "M\u00e1 (\u013eubovo\u013en\u00fd) rozpo\u010det", - "rule_trigger_has_no_bill_choice": "Nem\u00e1 \u017eiadny \u00fa\u010det", - "rule_trigger_has_any_bill_choice": "M\u00e1 (\u013eubovo\u013en\u00fd) \u00fa\u010det", - "rule_trigger_has_no_tag_choice": "Nem\u00e1 \u017eiadne \u0161t\u00edtky", - "rule_trigger_has_any_tag_choice": "M\u00e1 jeden alebo viac \u0161t\u00edtkov", - "rule_trigger_any_notes_choice": "M\u00e1 (ak\u00e9ko\u013evek) pozn\u00e1mky", - "rule_trigger_no_notes_choice": "Nem\u00e1 \u017eiadne pozn\u00e1mky", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "\u00da\u010det je..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "ID denn\u00edka transakci\u00ed je..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Odstr\u00e1ni\u0165 v\u0161etky kateg\u00f3rie", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Odste\u00e1ni\u0165 v\u0161etky rozpo\u010dty", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Odstr\u00e1ni\u0165 v\u0161etky \u0161t\u00edtky", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Odstr\u00e1ni\u0165 v\u0161etky pozn\u00e1mky", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Zmeni\u0165 t\u00fato transakciu na vklad", - "rule_action_convert_withdrawal_choice": "Zmeni\u0165 transakciu na v\u00fdb\u011br", - "rule_action_convert_transfer_choice": "Zmeni\u0165 t\u00fato transakciu na prevod", - "placeholder": "[Placeholder]", - "recurrences": "Opakovan\u00e9 transakcie", - "title_expenses": "V\u00fddavky", - "title_withdrawal": "V\u00fddavky", - "title_revenue": "Zisky \/ pr\u00edjmy", - "pref_1D": "Jeden de\u0148", - "pref_1W": "Jeden t\u00fd\u017ede\u0148", - "pref_1M": "Jeden mesiac", - "pref_3M": "Tri mesiace (\u0161tvr\u0165rok)", - "pref_6M": "\u0160es\u0165 mesiacov", - "pref_1Y": "Jeden rok", - "repeat_freq_yearly": "ro\u010dne", - "repeat_freq_half-year": "polro\u010dne", - "repeat_freq_quarterly": "\u0161tvr\u0165ro\u010dne", - "repeat_freq_monthly": "mesa\u010dne", - "repeat_freq_weekly": "t\u00fd\u017edenne", - "single_split": "Roz\u00fa\u010dtova\u0165", - "asset_accounts": "\u00da\u010dty akt\u00edv", - "expense_accounts": "V\u00fddavkov\u00e9 \u00fa\u010dty", - "liabilities_accounts": "Z\u00e1v\u00e4zky", - "undefined_accounts": "Accounts", - "name": "N\u00e1zov", - "revenue_accounts": "V\u00fdnosov\u00e9 \u00fa\u010dty", - "description": "Popis", - "category": "Kateg\u00f3ria", - "title_deposit": "Zisky \/ pr\u00edjmy", - "title_transfer": "Prevody", - "title_transfers": "Prevody", - "piggyBanks": "Pokladni\u010dky", - "rules": "Pravidl\u00e1", - "accounts": "\u00da\u010dty", - "categories": "Kateg\u00f3rie", - "tags": "\u0160t\u00edtky", - "object_groups_page_title": "Skupiny", - "reports": "V\u00fdkazy", - "webhooks": "Webhooky", - "currencies": "Meny", - "administration": "Spr\u00e1va", - "profile": "Profil", - "source_account": "Zdrojov\u00fd \u00fa\u010det", - "destination_account": "Cie\u013eov\u00fd \u00fa\u010det", - "amount": "Suma", - "date": "D\u00e1tum", - "time": "\u010cas", - "preferences": "Mo\u017enosti", - "transactions": "Transakcie", - "balance": "Zostatok", - "budgets": "Rozpo\u010dty", - "subscriptions": "Subscriptions", - "welcome_back": "Ako to ide?", - "bills_to_pay": "\u00da\u010dty na \u00fahradu", - "net_worth": "\u010cist\u00e9 imanie", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/sl_SI/index.js b/frontend/src/i18n/sl_SI/index.js deleted file mode 100644 index 6a47659bc3..0000000000 --- a/frontend/src/i18n/sl_SI/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "sl", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "Ime", - "amount_min": "Najni\u017eji znesek", - "amount_max": "Najvi\u0161ji znesek", - "url": "URL", - "title": "Naslov", - "first_date": "Prvi datum", - "repetitions": "Ponovitve", - "description": "Opis", - "iban": "IBAN", - "skip": "Presko\u010di", - "date": "Datum" - }, - "list": { - "name": "ime", - "account_number": "\u0160tevilka ra\u010duna", - "currentBalance": "trenutno stanje", - "lastActivity": "zadnja aktivnost", - "active": "Aktiviran?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "Prora\u010duni", - "subscriptions": "Naro\u010dnine", - "transactions": "Transakcije", - "title_expenses": "Stro\u0161ki", - "title_withdrawal": "Stro\u0161ki", - "title_revenue": "Dohodki \/ prihodki", - "title_deposit": "Dohodki \/ prihodki", - "title_transfer": "Prenosi", - "title_transfers": "Prenosi", - "asset_accounts": "Premo\u017eenjski ra\u010duni", - "expense_accounts": "Ra\u010duni stro\u0161kov", - "revenue_accounts": "Ra\u010dun prihodkov", - "liabilities_accounts": "Obveznosti" - }, - "firefly": { - "administration_index": "Finan\u010dna administracija", - "actions": "Dejanja", - "edit": "uredi", - "delete": "izbri\u0161i", - "reconcile": "Poravnaj", - "create_new_asset": "ustvari nov premo\u017eenjski ra\u010dun", - "confirm_action": "Potrdi dejanje", - "new_budget": "nov bud\u017eet", - "new_asset_account": "nov premo\u017eenjski ra\u010dun", - "newTransfer": "Nov prenos", - "submission_options": "Submission options", - "apply_rules_checkbox": "Uporabi pravila", - "fire_webhooks_checkbox": "Spro\u017ei Webhooke", - "newDeposit": "Nov polog", - "newWithdrawal": "Nov stro\u0161ek", - "bills_paid": "Pla\u010dani trajniki", - "left_to_spend": "Preostala poraba", - "no_budget": "(brez prora\u010duna)", - "budgeted": "Prora\u010dun", - "spent": "Porabljeno", - "no_bill": "(ni ra\u010duna)", - "rule_trigger_source_account_starts_choice": "Ime izvornega ra\u010duna se za\u010dne z ...", - "rule_trigger_source_account_ends_choice": "Ime izvornega ra\u010duna se kon\u010da s\/z ...", - "rule_trigger_source_account_is_choice": "Ime izvornega ra\u010duna je ...", - "rule_trigger_source_account_contains_choice": "Ime izvornega ra\u010duna vsebuje ...", - "rule_trigger_account_id_choice": "ID ra\u010duna je natan\u010dno ...", - "rule_trigger_source_account_id_choice": "ID izvornega ra\u010duna je to\u010dno ...", - "rule_trigger_destination_account_id_choice": "ID ciljnega ra\u010duna je to\u010dno ...", - "rule_trigger_account_is_cash_choice": "Kateri koli ra\u010dun je gotovina", - "rule_trigger_source_is_cash_choice": "Izvorni ra\u010dun je gotovinski ra\u010dun", - "rule_trigger_destination_is_cash_choice": "Ciljni ra\u010dun je (gotovinski) ra\u010dun", - "rule_trigger_source_account_nr_starts_choice": "Izvorna \u0161tevilka ra\u010duna \/ IBAN se za\u010dne z ...", - "rule_trigger_source_account_nr_ends_choice": "Izvorna \u0161tevilka ra\u010duna \/ IBAN se kon\u010da z ...", - "rule_trigger_source_account_nr_is_choice": "Izvorna \u0161tevilka ra\u010duna \/ IBAN je ...", - "rule_trigger_source_account_nr_contains_choice": "Izvorna \u0161tevilka ra\u010duna \/ IBAN vsebuje ...", - "rule_trigger_destination_account_starts_choice": "Ime ciljnega ra\u010duna se za\u010dne z ...", - "rule_trigger_destination_account_ends_choice": "Ime ciljnega ra\u010duna se kon\u010da z ...", - "rule_trigger_destination_account_is_choice": "Ime ciljnega ra\u010duna je ...", - "rule_trigger_destination_account_contains_choice": "Ime ciljnega ra\u010duna vsebuje ...", - "rule_trigger_destination_account_nr_starts_choice": "\u0160tevilka ciljnega ra\u010duna \/ IBAN se za\u010dne s\/z ...", - "rule_trigger_destination_account_nr_ends_choice": "\u0160tevilka ciljnega ra\u010duna \/ IBAN se kon\u010da s\/z ...", - "rule_trigger_destination_account_nr_is_choice": "\u0160tevilka ciljnega ra\u010duna \/ IBAN je ...", - "rule_trigger_destination_account_nr_contains_choice": "\u0160tevilka ciljnega ra\u010duna \/ IBAN vsebuje ...", - "rule_trigger_transaction_type_choice": "Tip transakcije je..", - "rule_trigger_category_is_choice": "Kategorija je..", - "rule_trigger_amount_less_choice": "Znesek je manj\u0161i ali enak ...", - "rule_trigger_amount_is_choice": "Znesek je..", - "rule_trigger_amount_more_choice": "Znesek je ve\u010dji ali enak ...", - "rule_trigger_description_starts_choice": "Opis se za\u010dne s\/z..", - "rule_trigger_description_ends_choice": "Opis se kon\u010da z..", - "rule_trigger_description_contains_choice": "Opis vsebuje..", - "rule_trigger_description_is_choice": "Opis je..", - "rule_trigger_date_on_choice": "Datum transakcije je ...", - "rule_trigger_date_before_choice": "Datum transakcije je pred ...", - "rule_trigger_date_after_choice": "Datum transakcije je po ...", - "rule_trigger_created_at_on_choice": "Transakcija je bila izvedena dne ...", - "rule_trigger_updated_at_on_choice": "Transakcija je bila nazadnje urejena ...", - "rule_trigger_budget_is_choice": "Prora\u010dun je..", - "rule_trigger_tag_is_choice": "Vsaka oznaka je ...", - "rule_trigger_currency_is_choice": "Valuta transakcije je..", - "rule_trigger_foreign_currency_is_choice": "Tuja valuta transakcije je ...", - "rule_trigger_has_attachments_choice": "Ima vsaj toliko priponk", - "rule_trigger_has_no_category_choice": "Nima kategorije", - "rule_trigger_has_any_category_choice": "Ima kategorijo", - "rule_trigger_has_no_budget_choice": "Nima prora\u010duna", - "rule_trigger_has_any_budget_choice": "Ima (katerikoli) prora\u010dun", - "rule_trigger_has_no_bill_choice": "Nima ra\u010duna", - "rule_trigger_has_any_bill_choice": "Ima (kateri koli) trajnik", - "rule_trigger_has_no_tag_choice": "Nima oznak", - "rule_trigger_has_any_tag_choice": "Ima eno ali ve\u010d oznak", - "rule_trigger_any_notes_choice": "Ima zaznamke", - "rule_trigger_no_notes_choice": "Nima zaznamkov", - "rule_trigger_notes_is_choice": "Opombe so..", - "rule_trigger_notes_contains_choice": "Opombe vsebujejo ...", - "rule_trigger_notes_starts_choice": "Opombe se za\u010dnejo s\/z ...", - "rule_trigger_notes_ends_choice": "Opombe se kon\u010dajo s\/z ...", - "rule_trigger_bill_is_choice": "Ra\u010dun je..", - "rule_trigger_external_id_is_choice": "Zunanji ID je ...", - "rule_trigger_internal_reference_is_choice": "Notranja referenca je ..", - "rule_trigger_journal_id_choice": "ID dnevnika transakcij je ...", - "rule_trigger_any_external_url_choice": "Transakcija ima (kateri koli) zunanji URL", - "rule_trigger_no_external_url_choice": "Transakcija nima zunanjega URL-ja", - "rule_trigger_id_choice": "ID transakcije je ...", - "rule_action_delete_transaction_choice": "IZBRI\u0160ITE transakcijo (!)", - "rule_action_set_category_choice": "Nastavi kategorijo na ...", - "rule_action_clear_category_choice": "Po\u010disti kategorijo", - "rule_action_set_budget_choice": "Nastavi prora\u010dun na ...", - "rule_action_clear_budget_choice": "Po\u010disti prora\u010dun", - "rule_action_add_tag_choice": "Dodaj oznako ..", - "rule_action_remove_tag_choice": "Odstrani oznako ...", - "rule_action_remove_all_tags_choice": "Odstrani vse oznake", - "rule_action_set_description_choice": "Nastavi opis na ...", - "rule_action_update_piggy_choice": "Dodaj\/odstrani znesek transakcije v hranilniku ...", - "rule_action_append_description_choice": "Za opis dodaj ...", - "rule_action_prepend_description_choice": "Pred opis dodaj ...", - "rule_action_set_source_account_choice": "Nastavi izvorni ra\u010dun na ...", - "rule_action_set_destination_account_choice": "Nastavi ciljni ra\u010dun na ...", - "rule_action_append_notes_choice": "Za opombo dodaj ...", - "rule_action_prepend_notes_choice": "Pred opombo dodaj ...", - "rule_action_clear_notes_choice": "Odstrani opombe", - "rule_action_set_notes_choice": "Nastavi opombe na ...", - "rule_action_link_to_bill_choice": "Pove\u017ei s trajnikom ...", - "rule_action_convert_deposit_choice": "Pretvori transakcijo v polog", - "rule_action_convert_withdrawal_choice": "Pretvori transakcijo v odliv", - "rule_action_convert_transfer_choice": "Pretvori transakcijo v prenos", - "placeholder": "[Placeholder]", - "recurrences": "Ponavljajo\u010de transakcije", - "title_expenses": "stro\u0161ki", - "title_withdrawal": "stro\u0161ki", - "title_revenue": "Dohodki \/ prihodki", - "pref_1D": "En dan", - "pref_1W": "En teden", - "pref_1M": "En mesec", - "pref_3M": "Trije meseci (\u010detrtletje)", - "pref_6M": "\u0160est mesecev", - "pref_1Y": "Eno leto", - "repeat_freq_yearly": "letno", - "repeat_freq_half-year": "polletno", - "repeat_freq_quarterly": "\u010detrtletno", - "repeat_freq_monthly": "mese\u010dno", - "repeat_freq_weekly": "tedensko", - "single_split": "Razdeli", - "asset_accounts": "premo\u017eenjski ra\u010duni", - "expense_accounts": "Ra\u010duni stro\u0161kov", - "liabilities_accounts": "Obveznosti", - "undefined_accounts": "Ra\u010duni", - "name": "Ime", - "revenue_accounts": "Ra\u010dun prihodkov", - "description": "Opis", - "category": "Kategorija", - "title_deposit": "Dohodki \/ prihodki", - "title_transfer": "Prenosi", - "title_transfers": "Prenosi", - "piggyBanks": "Hranilniki", - "rules": "Pravila", - "accounts": "Ra\u010duni", - "categories": "Kategorije", - "tags": "Oznake", - "object_groups_page_title": "Skupine", - "reports": "Poro\u010dila", - "webhooks": "Spletne kljuke (Webhooks)", - "currencies": "Valute", - "administration": "Administracija", - "profile": "Profil", - "source_account": "Izvorni ra\u010dun", - "destination_account": "Ciljni ra\u010dun", - "amount": "Znesek", - "date": "Datum", - "time": "\u010cas", - "preferences": "Mo\u017enosti", - "transactions": "Transakcije", - "balance": "Stanje", - "budgets": "Prora\u010duni", - "subscriptions": "Naro\u010dnine", - "welcome_back": "Kaj dogaja?", - "bills_to_pay": "Trajnik za pla\u010dilo", - "net_worth": "Neto vrednost", - "pref_last365": "Zadnje leto", - "pref_last90": "Zadnjih 90 dni", - "pref_last30": "Zadnjih 30 dni", - "pref_last7": "Zadnjih 7 dni", - "pref_YTD": "Leto do datuma", - "pref_QTD": "\u010cetrtletje do danes", - "pref_MTD": "Mesec do datuma" - } -} diff --git a/frontend/src/i18n/sv_SE/index.js b/frontend/src/i18n/sv_SE/index.js deleted file mode 100644 index efb52b5b93..0000000000 --- a/frontend/src/i18n/sv_SE/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "sv", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "Namn", - "amount_min": "Minsta belopp", - "amount_max": "H\u00f6gsta belopp", - "url": "L\u00e4nk", - "title": "Titel", - "first_date": "F\u00f6rsta datum", - "repetitions": "Upprepningar", - "description": "Beskrivning", - "iban": "IBAN", - "skip": "Hoppa \u00f6ver", - "date": "Datum" - }, - "list": { - "name": "Namn", - "account_number": "Kontonummer", - "currentBalance": "Nuvarande saldo", - "lastActivity": "Senaste aktivitet", - "active": "\u00c4r aktiv?" - }, - "breadcrumbs": { - "placeholder": "Platsh\u00e5llare", - "budgets": "Budgetar", - "subscriptions": "Prenumerationer", - "transactions": "Transaktioner", - "title_expenses": "Utgifter", - "title_withdrawal": "Uttag", - "title_revenue": "Int\u00e4kter \/ inkomst", - "title_deposit": "Int\u00e4kter \/ inkomst", - "title_transfer": "\u00d6verf\u00f6ringar", - "title_transfers": "\u00d6verf\u00f6ringar", - "asset_accounts": "Tillg\u00e5ngskonton", - "expense_accounts": "Kostnadskonto", - "revenue_accounts": "Int\u00e4ktskonton", - "liabilities_accounts": "Skulder" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "\u00c5tg\u00e4rder", - "edit": "Redigera", - "delete": "Ta bort", - "reconcile": "Avst\u00e4mning", - "create_new_asset": "Skapa ett nytt tillg\u00e5ngskonto", - "confirm_action": "Bekr\u00e4fta \u00e5tg\u00e4rd", - "new_budget": "Ny budget", - "new_asset_account": "Nytt tillg\u00e5ngskonto", - "newTransfer": "Ny \u00f6verf\u00f6ring", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Ny ins\u00e4ttning", - "newWithdrawal": "Ny utgift", - "bills_paid": "R\u00e4kningar betalda", - "left_to_spend": "\u00c5terst\u00e5r att spendera", - "no_budget": "(ingen budget)", - "budgeted": "Budgeterat", - "spent": "Spenderat", - "no_bill": "(ingen r\u00e4kning)", - "rule_trigger_source_account_starts_choice": "K\u00e4llkontonamn b\u00f6rjar med..", - "rule_trigger_source_account_ends_choice": "K\u00e4llkontonamn slutar med..", - "rule_trigger_source_account_is_choice": "K\u00e4llkontonamn \u00e4r..", - "rule_trigger_source_account_contains_choice": "K\u00e4llkontonamn inneh\u00e5ller..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "K\u00e4llkonto-ID \u00e4r exakt..", - "rule_trigger_destination_account_id_choice": "Destination konto-ID \u00e4r exakt..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "K\u00e4llkonto \u00e4r (kontant) konto", - "rule_trigger_destination_is_cash_choice": "Destinationskonto \u00e4r (kontant) konto", - "rule_trigger_source_account_nr_starts_choice": "K\u00e4llkontonummer \/ IBAN b\u00f6rjar med..", - "rule_trigger_source_account_nr_ends_choice": "K\u00e4llkontonummer \/ IBAN slutar med..", - "rule_trigger_source_account_nr_is_choice": "K\u00e4llkontonummer \/ IBAN \u00e4r..", - "rule_trigger_source_account_nr_contains_choice": "K\u00e4llkontonummer \/ IBAN inneh\u00e5ller..", - "rule_trigger_destination_account_starts_choice": "Destinationskontonamn b\u00f6rjar med..", - "rule_trigger_destination_account_ends_choice": "Destinationskontonamn slutar med..", - "rule_trigger_destination_account_is_choice": "Destinationskontonamn \u00e4r..", - "rule_trigger_destination_account_contains_choice": "Destinationenskontonamn inneh\u00e5ller..", - "rule_trigger_destination_account_nr_starts_choice": "Destinationskontonummer\/IBAN b\u00f6rjar med..", - "rule_trigger_destination_account_nr_ends_choice": "Destinationskontonummer \/ IBAN slutar med..", - "rule_trigger_destination_account_nr_is_choice": "Destinationskontonummer \/ IBAN \u00e4r..", - "rule_trigger_destination_account_nr_contains_choice": "Destinationskontonummer \/ IBAN inneh\u00e5ller..", - "rule_trigger_transaction_type_choice": "Transaktion \u00e4r av typen..", - "rule_trigger_category_is_choice": "Kategori \u00e4r..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "Beskrivning b\u00f6rjar med..", - "rule_trigger_description_ends_choice": "Beskrivning slutar med..", - "rule_trigger_description_contains_choice": "Beskrivningen inneh\u00e5ller..", - "rule_trigger_description_is_choice": "Beskrivning \u00e4r..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaktionsdatum \u00e4r innan..", - "rule_trigger_date_after_choice": "Transaktionsdatum \u00e4r efter..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Budget \u00e4r..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Transaktionsvalutan \u00e4r..", - "rule_trigger_foreign_currency_is_choice": "Transaktion med utl\u00e4ndsk valuta \u00e4r..", - "rule_trigger_has_attachments_choice": "Har minst s\u00e5 m\u00e5nga bilagor", - "rule_trigger_has_no_category_choice": "Har ingen kategori", - "rule_trigger_has_any_category_choice": "Har en (valfri) kategori", - "rule_trigger_has_no_budget_choice": "Saknar budget", - "rule_trigger_has_any_budget_choice": "Har (valfri) budget", - "rule_trigger_has_no_bill_choice": "Har ingen r\u00e4kning", - "rule_trigger_has_any_bill_choice": "Har en (valfri) r\u00e4kning", - "rule_trigger_has_no_tag_choice": "Saknar etikett(er)", - "rule_trigger_has_any_tag_choice": "Har en eller flera (valfria) etiketter", - "rule_trigger_any_notes_choice": "Har (valfria) anteckningar", - "rule_trigger_no_notes_choice": "Har inga anteckningar", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Faktura \u00e4r..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaktionsjournal-ID \u00e4r..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaktionen saknar extern URL", - "rule_trigger_id_choice": "Transaktions-ID \u00e4r..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "Rensa alla kategorier", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Rensa alla budgetar", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "Ta bort alla etiketter", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Ta bort alla anteckningar", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Konvertera transaktionen till en ins\u00e4ttning", - "rule_action_convert_withdrawal_choice": "Konvertera transaktionen till ett uttag", - "rule_action_convert_transfer_choice": "G\u00f6r transaktionen till en \u00f6verf\u00f6ring", - "placeholder": "[Platsh\u00e5llare]", - "recurrences": "\u00c5terkommande transaktioner", - "title_expenses": "Utgifter", - "title_withdrawal": "Utgifter", - "title_revenue": "Int\u00e4kter \/ inkomst", - "pref_1D": "En dag", - "pref_1W": "En vecka", - "pref_1M": "En m\u00e5nad", - "pref_3M": "Tre m\u00e5nader (kvartal)", - "pref_6M": "Sex m\u00e5nader", - "pref_1Y": "Ett \u00e5r", - "repeat_freq_yearly": "\u00e5rligen", - "repeat_freq_half-year": "varje halv\u00e5r", - "repeat_freq_quarterly": "kvartal", - "repeat_freq_monthly": "m\u00e5nadsvis", - "repeat_freq_weekly": "veckovis", - "single_split": "Dela", - "asset_accounts": "Tillg\u00e5ngskonton", - "expense_accounts": "Kostnadskonto", - "liabilities_accounts": "Skulder", - "undefined_accounts": "Konton", - "name": "Namn", - "revenue_accounts": "Int\u00e4ktskonton", - "description": "Beskrivning", - "category": "Kategori", - "title_deposit": "Int\u00e4kter \/ inkomst", - "title_transfer": "\u00d6verf\u00f6ringar", - "title_transfers": "\u00d6verf\u00f6ringar", - "piggyBanks": "Spargrisar", - "rules": "Regler", - "accounts": "Konton", - "categories": "Kategorier", - "tags": "Etiketter", - "object_groups_page_title": "Grupper", - "reports": "Rapporter", - "webhooks": "Webhookar", - "currencies": "Valutor", - "administration": "Administration", - "profile": "Profil", - "source_account": "K\u00e4llkonto", - "destination_account": "Till konto", - "amount": "Belopp", - "date": "Datum", - "time": "Tid", - "preferences": "Inst\u00e4llningar", - "transactions": "Transaktioner", - "balance": "Saldo", - "budgets": "Budgetar", - "subscriptions": "Prenumerationer", - "welcome_back": "Vad spelas?", - "bills_to_pay": "R\u00e4kningar\n att betala", - "net_worth": "Nettof\u00f6rm\u00f6genhet", - "pref_last365": "F\u00f6reg\u00e5ende \u00e5r", - "pref_last90": "Senaste 90 dagarna", - "pref_last30": "Senaste 30 dagarna", - "pref_last7": "Senaste 7 dagarna", - "pref_YTD": "Hittills i \u00e5r", - "pref_QTD": "Kvartal hittills", - "pref_MTD": "M\u00e5nad hittills" - } -} diff --git a/frontend/src/i18n/tr_TR/index.js b/frontend/src/i18n/tr_TR/index.js deleted file mode 100644 index abee567e93..0000000000 --- a/frontend/src/i18n/tr_TR/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "tr", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "\u0130sim", - "amount_min": "Minimum tutar", - "amount_max": "Minimum tutar", - "url": "URL", - "title": "Ba\u015fl\u0131k", - "first_date": "First date", - "repetitions": "Repetitions", - "description": "Tan\u0131mlama", - "iban": "IBAN numaras\u0131", - "skip": "Atla", - "date": "Tarih" - }, - "list": { - "name": "\u0130sim", - "account_number": "Account number", - "currentBalance": "Cari bakiye", - "lastActivity": "Son Etkinlik", - "active": "Aktif mi?" - }, - "breadcrumbs": { - "placeholder": "[Tutucu]", - "budgets": "B\u00fct\u00e7eler", - "subscriptions": "Abonelik", - "transactions": "\u0130\u015flemler", - "title_expenses": "Masraflar", - "title_withdrawal": "Masraflar", - "title_revenue": "Gelir \/ kazan\u00e7", - "title_deposit": "Gelir \/kazan\u00e7", - "title_transfer": "Aktarmalar", - "title_transfers": "Aktarmalar", - "asset_accounts": "Varl\u0131k hesaplar\u0131", - "expense_accounts": "Gider hesab\u0131", - "revenue_accounts": "Kazan\u00e7 hesab\u0131", - "liabilities_accounts": "Sorumluluk" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "Eylemler", - "edit": "D\u00fczenle", - "delete": "Sil", - "reconcile": "Reconcile", - "create_new_asset": "Yeni varl\u0131k hesab\u0131 olu\u015ftur", - "confirm_action": "Confirm action", - "new_budget": "Yeni b\u00fct\u00e7e", - "new_asset_account": "Yeni varl\u0131k hesab\u0131", - "newTransfer": "Yeni Transfer", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Yeni mevduat", - "newWithdrawal": "Yeni gider", - "bills_paid": "\u00d6denen Faturalar", - "left_to_spend": "Harcama i\u00e7in b\u0131rak\u0131ld\u0131", - "no_budget": "(b\u00fct\u00e7e yok)", - "budgeted": "B\u00fct\u00e7elenen", - "spent": "Harcanan", - "no_bill": "(hay\u0131r bill)", - "rule_trigger_source_account_starts_choice": "Kaynak hesap ad\u0131 ile ba\u015flar..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Kaynak hesap ad\u0131d\u0131r..", - "rule_trigger_source_account_contains_choice": "Kaynak hesap ad\u0131 i\u00e7erir..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Kaynak hesap kimli\u011fi tam olarak..", - "rule_trigger_destination_account_id_choice": "Hedef hesap kimli\u011fi tam olarak..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Kaynak hesap (nakit) hesapt\u0131r", - "rule_trigger_destination_is_cash_choice": "Hedef hesap (nakit) hesapt\u0131r", - "rule_trigger_source_account_nr_starts_choice": "Kaynak hesap numaras\u0131 \/ IBAN ile ba\u015flar..", - "rule_trigger_source_account_nr_ends_choice": "Kaynak hesap numaras\u0131 \/ IBAN ile biter..", - "rule_trigger_source_account_nr_is_choice": "Kaynak hesap numaras\u0131 \/ IBAN..", - "rule_trigger_source_account_nr_contains_choice": "Kaynak hesap numaras\u0131 \/ IBAN i\u00e7erir..", - "rule_trigger_destination_account_starts_choice": "Hedef hesap ad\u0131 ile ba\u015flar..", - "rule_trigger_destination_account_ends_choice": "Hedef hesap ad\u0131 ile biter..", - "rule_trigger_destination_account_is_choice": "Hedef hesap ad\u0131d\u0131r..", - "rule_trigger_destination_account_contains_choice": "Hedef hesap ad\u0131 i\u00e7erir..", - "rule_trigger_destination_account_nr_starts_choice": "Hedef hesap numaras\u0131 \/ IBAN ile ba\u015flar..", - "rule_trigger_destination_account_nr_ends_choice": "Hedef hesap numaras\u0131 \/ IBAN ile biter..", - "rule_trigger_destination_account_nr_is_choice": "Hedef hesap numaras\u0131 \/ IBAN'd\u0131r..", - "rule_trigger_destination_account_nr_contains_choice": "Hedef hesap numaras\u0131 \/ IBAN i\u00e7erir..", - "rule_trigger_transaction_type_choice": "\u0130\u015flem t\u00fcr\u00fc..", - "rule_trigger_category_is_choice": "Kategori..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "A\u00e7\u0131klama ba\u015fl\u0131yor..", - "rule_trigger_description_ends_choice": "A\u00e7\u0131klama bitiyor..", - "rule_trigger_description_contains_choice": "A\u00e7\u0131klama i\u00e7erir..", - "rule_trigger_description_is_choice": "A\u00e7\u0131klama..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "\u0130\u015flem tarihi \u00f6ncedir..", - "rule_trigger_date_after_choice": "\u0130\u015flem tarihi sonrad\u0131r..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "B\u00fct\u00e7e..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "\u0130\u015flem d\u00f6vizi..", - "rule_trigger_foreign_currency_is_choice": "\u0130\u015flem d\u00f6vizdir..", - "rule_trigger_has_attachments_choice": "En son bir \u00e7ok eklentileri var", - "rule_trigger_has_no_category_choice": "Kategorisi yok", - "rule_trigger_has_any_category_choice": "Bir kategorisi var", - "rule_trigger_has_no_budget_choice": "B\u00fct\u00e7e yok", - "rule_trigger_has_any_budget_choice": "Bir b\u00fct\u00e7esi var", - "rule_trigger_has_no_bill_choice": "Faturas\u0131 yok", - "rule_trigger_has_any_bill_choice": "(Herhangi) bir faturas\u0131 var m\u0131", - "rule_trigger_has_no_tag_choice": "Etiket yok", - "rule_trigger_has_any_tag_choice": "Bir veya bir\u00e7ok etiketleri var", - "rule_trigger_any_notes_choice": "Notlar\u0131 var", - "rule_trigger_no_notes_choice": "Notu yok", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill \u00f6yle..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "\u0130\u015flem g\u00fcnl\u00fc\u011f\u00fc kimli\u011fidir..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "\u0130\u015flemin harici URL'si yok", - "rule_trigger_id_choice": "\u0130\u015flem kimli\u011fidir..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "T\u00fcm kategoriyi temizle", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "Herhangi bir b\u00fct\u00e7eyi temizle", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "T\u00fcm etiketleri kald\u0131r", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "Herhangi bir notu kald\u0131r", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "\u0130\u015flemi mevduata d\u00f6n\u00fc\u015ft\u00fcr", - "rule_action_convert_withdrawal_choice": "\u0130\u015flemi para \u00e7ekmeye d\u00f6n\u00fc\u015ft\u00fcr", - "rule_action_convert_transfer_choice": "\u0130\u015flemi transfere d\u00f6n\u00fc\u015ft\u00fcr", - "placeholder": "[Placeholder]", - "recurrences": "Tekrar Eden \u0130\u015flemler", - "title_expenses": "Giderler", - "title_withdrawal": "Giderler", - "title_revenue": "Gelir \/ Gelir", - "pref_1D": "Bir g\u00fcn", - "pref_1W": "Bir hafta", - "pref_1M": "Bir ay", - "pref_3M": "\u00dc\u00e7 ay (\u00e7eyrek)", - "pref_6M": "Alt\u0131 ay", - "pref_1Y": "Bir y\u0131l", - "repeat_freq_yearly": "y\u0131ll\u0131k", - "repeat_freq_half-year": "her yar\u0131 y\u0131l", - "repeat_freq_quarterly": "\u00fc\u00e7 ayl\u0131k", - "repeat_freq_monthly": "ayl\u0131k", - "repeat_freq_weekly": "haftal\u0131k", - "single_split": "B\u00f6l", - "asset_accounts": "Varl\u0131k hesaplar\u0131", - "expense_accounts": "Gider hesaplar\u0131", - "liabilities_accounts": "Liabilities", - "undefined_accounts": "Accounts", - "name": "\u0130sim", - "revenue_accounts": "Gelir hesaplar\u0131", - "description": "A\u00e7\u0131klama", - "category": "Kategori", - "title_deposit": "Gelir \/ Gelir", - "title_transfer": "Transferler", - "title_transfers": "Transferler", - "piggyBanks": "Kumbara", - "rules": "Kurallar", - "accounts": "Hesaplar", - "categories": "Kategoriler", - "tags": "Etiketler", - "object_groups_page_title": "Groups", - "reports": "Raporlar", - "webhooks": "Web kancalar\u0131", - "currencies": "Kurlar", - "administration": "Y\u00f6netim", - "profile": "Profil", - "source_account": "Kaynak hesap", - "destination_account": "Hedef hesap", - "amount": "Miktar", - "date": "Tarih", - "time": "Time", - "preferences": "Tercihler", - "transactions": "\u0130\u015flemler", - "balance": "Denge", - "budgets": "B\u00fct\u00e7eler", - "subscriptions": "Abonelik", - "welcome_back": "Neler oluyor?", - "bills_to_pay": "\u00d6denecek fatura", - "net_worth": "Net de\u011fer", - "pref_last365": "Ge\u00e7en y\u0131l", - "pref_last90": "Son 90 g\u00fcn", - "pref_last30": "Son 30 g\u00fcn", - "pref_last7": "Son 7 g\u00fcn", - "pref_YTD": "Y\u0131ldan bug\u00fcne", - "pref_QTD": "Bug\u00fcne kadar tarih", - "pref_MTD": "Bug\u00fcne kadar ay" - } -} diff --git a/frontend/src/i18n/uk_UA/index.js b/frontend/src/i18n/uk_UA/index.js deleted file mode 100644 index 9bcdd9c0a0..0000000000 --- a/frontend/src/i18n/uk_UA/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "uk", - "month_and_day_fns": "d MMMM y" - }, - "form": { - "name": "\u041d\u0430\u0437\u0432\u0430", - "amount_min": "\u041c\u0456\u043d\u0456\u043c\u0430\u043b\u044c\u043d\u0430 \u0441\u0443\u043c\u0430", - "amount_max": "\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u0441\u0443\u043c\u0430", - "url": "URL-\u0430\u0434\u0440\u0435\u0441\u0430", - "title": "\u041d\u0430\u0437\u0432\u0430", - "first_date": "\u041f\u0435\u0440\u0448\u0430 \u0434\u0430\u0442\u0430", - "repetitions": "\u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u043d\u044f", - "description": "\u041e\u043f\u0438\u0441", - "iban": "IBAN", - "skip": "\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0438", - "date": "\u0414\u0430\u0442\u0430" - }, - "list": { - "name": "\u041d\u0430\u0437\u0432\u0430", - "account_number": "\u041d\u043e\u043c\u0435\u0440 \u0440\u0430\u0445\u0443\u043d\u043a\u0443", - "currentBalance": "\u041f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u0431\u0430\u043b\u0430\u043d\u0441", - "lastActivity": "\u041e\u0441\u0442\u0430\u043d\u043d\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u044f", - "active": "\u0427\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0438\u0439?" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442", - "subscriptions": "\u041f\u0456\u0434\u043f\u0438\u0441\u043a\u0430", - "transactions": "\u041e\u043f\u0435\u0440\u0430\u0446\u0456\u0457", - "title_expenses": "\u0412\u0438\u0442\u0440\u0430\u0442\u0438", - "title_withdrawal": "\u0412\u0438\u0442\u0440\u0430\u0442\u0438", - "title_revenue": "\u0414\u043e\u0445\u0456\u0434 \/ \u043f\u0440\u0438\u0431\u0443\u0442\u043e\u043a", - "title_deposit": "\u0414\u043e\u0445\u0456\u0434 \/ \u043f\u0440\u0438\u0431\u0443\u0442\u043e\u043a", - "title_transfer": "\u041f\u0435\u0440\u0435\u043a\u0430\u0437\u0438", - "title_transfers": "\u041f\u0435\u0440\u0435\u043a\u0430\u0437\u0438", - "asset_accounts": "\u041e\u0441\u043d\u043e\u0432\u043d\u0456 \u0440\u0430\u0445\u0443\u043d\u043a\u0438", - "expense_accounts": "\u0420\u0430\u0445\u0443\u043d\u043a\u0438 \u0432\u0438\u0442\u0440\u0430\u0442", - "revenue_accounts": "\u0414\u0436\u0435\u0440\u0435\u043b\u0430 \u0434\u043e\u0445\u043e\u0434\u0456\u0432", - "liabilities_accounts": "\u0417\u043e\u0431\u043e\u0432'\u044f\u0437\u0430\u043d\u043d\u044f" - }, - "firefly": { - "administration_index": "\u0424\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0456\u043d\u043d\u044f", - "actions": "\u0414\u0456\u0457", - "edit": "\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438", - "delete": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438", - "reconcile": "Reconcile", - "create_new_asset": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u0456\u0432", - "confirm_action": "\u041f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438 \u0434\u0456\u044e", - "new_budget": "\u041d\u043e\u0432\u0438\u0439 \u0431\u044e\u0434\u0436\u0435\u0442", - "new_asset_account": "\u041d\u043e\u0432\u0438\u0439 \u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u0456\u0432", - "newTransfer": "\u041d\u043e\u0432\u0438\u0439 \u043f\u0435\u0440\u0435\u043a\u0430\u0437", - "submission_options": "Submission options", - "apply_rules_checkbox": "\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "\u041d\u043e\u0432\u0456 \u043d\u0430\u0434\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f", - "newWithdrawal": "\u041d\u043e\u0432\u0456 \u0432\u0438\u0442\u0440\u0430\u0442\u0438", - "bills_paid": "\u041e\u043f\u043b\u0430\u0447\u0435\u043d\u0456 \u0440\u0430\u0445\u0443\u043d\u043a\u0438", - "left_to_spend": "Left to spend", - "no_budget": "(\u043f\u043e\u0437\u0430 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c)", - "budgeted": "Budgeted", - "spent": "Spent", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "\u0406\u043c'\u044f \u0432\u0438\u0445\u0456\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437 \": value\"..", - "rule_trigger_source_account_ends_choice": "\u041d\u0430\u0437\u0432\u0430 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u0437\u0430\u043a\u0456\u043d\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_source_account_is_choice": "\u0406\u043c'\u044f \u0432\u0438\u0445\u0456\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_source_account_contains_choice": "\u041d\u0430\u0437\u0432\u0430 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_account_id_choice": "\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u044f \u0431\u0443\u0434\u044c-\u044f\u043a\u043e\u0433\u043e \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u0454 \u0442\u043e\u0447\u043d\u043e\u044e..", - "rule_trigger_source_account_id_choice": "\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u044f \u0431\u0443\u0434\u044c-\u044f\u043a\u043e\u0433\u043e \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u0454 \u0442\u043e\u0447\u043d\u043e\u044e..", - "rule_trigger_destination_account_id_choice": "\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u044f \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0454 \u0442\u043e\u0447\u043d\u043e\u044e..", - "rule_trigger_account_is_cash_choice": "\u0411\u0443\u0434\u044c-\u044f\u043a\u0438\u0439 \u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0454 \u0433\u043e\u0442\u0456\u0432\u043a\u043e\u0432\u0438\u043c", - "rule_trigger_source_is_cash_choice": "\u0414\u0436\u0435\u0440\u0435\u043b\u043e\u043c \u0440\u0430\u0445\u0443\u043d\u043a\u043e\u043c \u0454 \u200b\u200b(\u0433\u043e\u0442\u0456\u0432\u043a\u043e\u0432\u0438\u0439) \u0440\u0430\u0445\u0443\u043d\u043e\u043a", - "rule_trigger_destination_is_cash_choice": "\u0420\u0430\u0445\u0443\u043d\u043a\u043e\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0454 \u200b\u200b(\u0433\u043e\u0442\u0456\u0432\u043a\u043e\u0432\u0438\u0439) \u0440\u0430\u0445\u0443\u043d\u043e\u043a", - "rule_trigger_source_account_nr_starts_choice": "\u041d\u043e\u043c\u0435\u0440 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \/ IBAN \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437..", - "rule_trigger_source_account_nr_ends_choice": "\u041d\u043e\u043c\u0435\u0440 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \/ IBAN \u0437\u0430\u043a\u0456\u043d\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_source_account_nr_is_choice": "\u041d\u043e\u043c\u0435\u0440 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \/ IBAN \u0454..", - "rule_trigger_source_account_nr_contains_choice": "\u041d\u043e\u043c\u0435\u0440 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \/ IBAN \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_destination_account_starts_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437..", - "rule_trigger_destination_account_ends_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0437\u0430\u043a\u0456\u043d\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_destination_account_is_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a-\u043e\u0434\u0435\u0440\u0436\u0443\u0432\u0430\u0447..", - "rule_trigger_destination_account_contains_choice": "\u0406\u043c'\u044f \u0440\u0430\u0445\u0443\u043d\u043e\u043a\u0443-\u043e\u0434\u0435\u0440\u0436\u0443\u0432\u0430\u0447\u0430 \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_destination_account_nr_starts_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \/ IBAN \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437..", - "rule_trigger_destination_account_nr_ends_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \/ IBAN \u0437\u0430\u043a\u0456\u043d\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_destination_account_nr_is_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \/ IBAN..", - "rule_trigger_destination_account_nr_contains_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \/ IBAN \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_transaction_type_choice": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u044f \u043c\u0430\u0454 \u0442\u0438\u043f..", - "rule_trigger_category_is_choice": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044f \u0454..", - "rule_trigger_amount_less_choice": "\u0421\u0443\u043c\u0430 \u043c\u0435\u043d\u0448\u0430 \u0430\u0431\u043e \u0434\u043e\u0440\u0456\u0432\u043d\u044e\u0454 ..", - "rule_trigger_amount_is_choice": "\u0421\u0443\u043c\u0430..", - "rule_trigger_amount_more_choice": "\u0421\u0443\u043c\u0430 \u0431\u0456\u043b\u044c\u0448\u0435 \u0430\u0431\u043e \u0434\u043e\u0440\u0456\u0432\u043d\u044e\u0454..", - "rule_trigger_description_starts_choice": "\u041e\u043f\u0438\u0441 \u043f\u043e\u0447\u0438\u043d\u0430\u0454\u0442\u044c\u0441\u044f \u0437..", - "rule_trigger_description_ends_choice": "\u041e\u043f\u0438\u0441 \u0437\u0430\u043a\u0456\u043d\u0447\u0443\u0454\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_description_contains_choice": "\u041e\u043f\u0438\u0441 \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_description_is_choice": "\u041e\u043f\u0438\u0441..", - "rule_trigger_date_on_choice": "\u0414\u0430\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457..", - "rule_trigger_date_before_choice": "\u0414\u0430\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457 \u0440\u0430\u043d\u0456\u0448\u0435..", - "rule_trigger_date_after_choice": "\u0414\u0430\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457 \u043f\u0456\u0437\u043d\u0456\u0448\u0435..", - "rule_trigger_created_at_on_choice": "\u041e\u043f\u0435\u0440\u0430\u0446\u0456\u044f \u0431\u0443\u043b\u0430 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u0430..", - "rule_trigger_updated_at_on_choice": "\u041e\u043f\u0435\u0440\u0430\u0446\u0456\u044f \u0431\u0443\u043b\u0430 \u0432\u0456\u0434\u0440\u0435\u0434\u0430\u0433\u043e\u0432\u0430\u043d\u0430..", - "rule_trigger_budget_is_choice": "\u0411\u044e\u0434\u0436\u0435\u0442..", - "rule_trigger_tag_is_choice": "\u0411\u0443\u0434\u044c-\u044f\u043a\u0430 \u043c\u0456\u0442\u043a\u0430..", - "rule_trigger_currency_is_choice": "\u0412\u0430\u043b\u044e\u0442\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0439 \u0454..", - "rule_trigger_foreign_currency_is_choice": "\u0412\u0430\u043b\u044e\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0457 \u0454..", - "rule_trigger_has_attachments_choice": "\u041c\u0430\u0454 \u043f\u0440\u0438\u043d\u0430\u0439\u043c\u043d\u0456 \u0446\u044e \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0432\u043a\u043b\u0430\u0434\u0435\u043d\u044c", - "rule_trigger_has_no_category_choice": "\u0411\u0435\u0437 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457", - "rule_trigger_has_any_category_choice": "\u041c\u0430\u0454 (\u0431\u0443\u0434\u044c-\u044f\u043a\u0443) \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044e", - "rule_trigger_has_no_budget_choice": "\u041d\u0435\u043c\u0430\u0454 \u043f\u043e\u0432'\u044f\u0437\u0430\u043d\u043e\u0433\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0443", - "rule_trigger_has_any_budget_choice": "\u041c\u0430\u0454 (\u0431\u0443\u0434\u044c-\u044f\u043a\u0438\u0439) \u0431\u044e\u0434\u0436\u0435\u0442", - "rule_trigger_has_no_bill_choice": "\u041d\u0435 \u043c\u0430\u0454 \u0440\u0430\u0445\u0443\u043d\u043a\u0456\u0432 \u0434\u043e \u0441\u043f\u043b\u0430\u0442\u0438", - "rule_trigger_has_any_bill_choice": "\u041c\u0430\u0454 (\u044f\u043a\u0438\u0439\u0441\u044c) \u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0434\u043e \u0441\u043f\u043b\u0430\u0442\u0438", - "rule_trigger_has_no_tag_choice": "\u041d\u0435\u043c\u0430\u0454 \u0442\u0435\u0433\u0456\u0432", - "rule_trigger_has_any_tag_choice": "\u0404 \u043e\u0434\u0438\u043d \u0430\u0431\u043e \u043a\u0456\u043b\u044c\u043a\u0430 \u0442\u0435\u0433\u0456\u0432 (\u0431\u0443\u0434\u044c-\u044f\u043a\u0438\u0445)", - "rule_trigger_any_notes_choice": "\u041c\u0430\u0454 (\u0431\u0443\u0434\u044c-\u044f\u043a\u0456) \u043d\u043e\u0442\u0430\u0442\u043a\u0438", - "rule_trigger_no_notes_choice": "\u041d\u043e\u0442\u0430\u0442\u043a\u0438 \u0432\u0456\u0434\u0441\u0443\u0442\u043d\u0456", - "rule_trigger_notes_is_choice": "\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0438..", - "rule_trigger_notes_contains_choice": "\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0438 \u043c\u0456\u0441\u0442\u044f\u0442\u044c..", - "rule_trigger_notes_starts_choice": "\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0438 \u043f\u043e\u0447\u0438\u043d\u0430\u044e\u0442\u044c\u0441\u044f \u0437..", - "rule_trigger_notes_ends_choice": "\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0443\u044e\u0442\u044c\u0441\u044f \u043d\u0430..", - "rule_trigger_bill_is_choice": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u0434\u043e \u0441\u043f\u043b\u0430\u0442\u0438..", - "rule_trigger_external_id_is_choice": "\u0417\u043e\u0432\u043d\u0456\u0448\u043d\u0456\u0439 ID \u043c\u0456\u0441\u0442\u0438\u0442\u044c..", - "rule_trigger_internal_reference_is_choice": "\u0412\u043d\u0443\u0442\u0440\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f - \u0446\u0435..", - "rule_trigger_journal_id_choice": "\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u0436\u0443\u0440\u043d\u0430\u043b\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0439 \u0454..", - "rule_trigger_any_external_url_choice": "\u041e\u043f\u0435\u0440\u0430\u0446\u0456\u044f \u043c\u0430\u0454 (\u044f\u043a\u0443\u0441\u044c) \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u044e URL-\u0430\u0434\u0440\u0435\u0441\u0443", - "rule_trigger_no_external_url_choice": "\u041e\u043f\u0435\u0440\u0430\u0446\u0456\u044f \u043d\u0435 \u043c\u0430\u0454 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u044c\u043e\u0457 URL-\u0430\u0434\u0440\u0435\u0441\u0438", - "rule_trigger_id_choice": "\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457..", - "rule_action_delete_transaction_choice": "\u0412\u0418\u0414\u0410\u041b\u0418\u0422\u0418 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u044e(!)", - "rule_action_set_category_choice": "\u041e\u0431\u0440\u0430\u0442\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044e..", - "rule_action_clear_category_choice": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457", - "rule_action_set_budget_choice": "\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u0431\u044e\u0434\u0436\u0435\u0442..", - "rule_action_clear_budget_choice": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0432\u0441\u0456 \u0431\u044e\u0434\u0436\u0435\u0442\u0438", - "rule_action_add_tag_choice": "\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0435\u0433..", - "rule_action_remove_tag_choice": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0435\u0433..", - "rule_action_remove_all_tags_choice": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0443\u0441\u0456 \u0442\u0435\u0433\u0438", - "rule_action_set_description_choice": "\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u043e\u043f\u0438\u0441 \u043d\u0430..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0446\u0456\u043b\u044c\u043e\u0432\u0438\u0439 \u0440\u0430\u0445\u0443\u043d\u043e\u043a..", - "rule_action_append_notes_choice": "\u0414\u043e\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0442\u0430\u0442\u043a\u0438 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e ..", - "rule_action_prepend_notes_choice": "\u0414\u043e\u0434\u0430\u0439\u0442\u0435 \u0434\u043e \u043d\u043e\u0442\u0430\u0442\u043e\u043a ..", - "rule_action_clear_notes_choice": "\u0412\u0438\u0434\u0430\u043b\u0456\u0442\u044c \u0431\u0443\u0434\u044c-\u044f\u043a\u0456 \u043f\u0440\u0438\u043c\u0456\u0442\u043a\u0438", - "rule_action_set_notes_choice": "\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u043d\u043e\u0442\u0430\u0442\u043a\u0438 \u0434\u043e ..", - "rule_action_link_to_bill_choice": "\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0440\u0430\u0445\u0443\u043d\u043e\u043a \u0434\u043e \u0441\u043f\u043b\u0430\u0442\u0438 ..", - "rule_action_convert_deposit_choice": "\u041f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u044e \u0432 \u0434\u0435\u043f\u043e\u0437\u0438\u0442", - "rule_action_convert_withdrawal_choice": "\u041f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0456\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u044e \u043d\u0430 \u0437\u043d\u044f\u0442\u0442\u044f", - "rule_action_convert_transfer_choice": "\u041f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457 \u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u0430\u0437", - "placeholder": "[Placeholder]", - "recurrences": "Recurring transactions", - "title_expenses": "\u0412\u0438\u0442\u0440\u0430\u0442\u0438", - "title_withdrawal": "\u0412\u0438\u0442\u0440\u0430\u0442\u0438", - "title_revenue": "\u0414\u043e\u0445\u0456\u0434 \/ \u043f\u0440\u0438\u0445\u0456\u0434", - "pref_1D": "\u041e\u0434\u0438\u043d \u0434\u0435\u043d\u044c", - "pref_1W": "\u041e\u0434\u0438\u043d \u0442\u0438\u0436\u0434\u0435\u043d\u044c", - "pref_1M": "\u041e\u0434\u0438\u043d \u043c\u0456\u0441\u044f\u0446\u044c", - "pref_3M": "\u0422\u0440\u0438 \u043c\u0456\u0441\u044f\u0446\u0456 (\u043a\u0432\u0430\u0440\u0442\u0430\u043b)", - "pref_6M": "\u0428\u0456\u0441\u0442\u044c \u043c\u0456\u0441\u044f\u0446\u0456\u0432", - "pref_1Y": "\u041e\u0434\u0438\u043d \u0440\u0456\u043a", - "repeat_freq_yearly": "\u0437\u0430 \u0440\u043e\u043a\u0430\u043c\u0438", - "repeat_freq_half-year": "\u043a\u043e\u0436\u043d\u0438\u0445 \u043f\u0456\u0432\u0440\u043e\u043a\u0443", - "repeat_freq_quarterly": "\u0437\u0430 \u043a\u0432\u0430\u0440\u0442\u0430\u043b\u0430\u043c\u0438", - "repeat_freq_monthly": "\u0449\u043e\u043c\u0456\u0441\u044f\u0446\u044f", - "repeat_freq_weekly": "\u0449\u043e\u0442\u0438\u0436\u043d\u044f", - "single_split": "\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438", - "asset_accounts": "\u041e\u0441\u043d\u043e\u0432\u043d\u0456 \u0440\u0430\u0445\u0443\u043d\u043a\u0438", - "expense_accounts": "\u0420\u0430\u0445\u0443\u043d\u043a\u0438 \u0432\u0438\u0442\u0440\u0430\u0442", - "liabilities_accounts": "\u041f\u0430\u0441\u0438\u0432\u0438", - "undefined_accounts": "Accounts", - "name": "Name", - "revenue_accounts": "\u0414\u0436\u0435\u0440\u0435\u043b\u0430 \u0434\u043e\u0445\u043e\u0434\u0456\u0432", - "description": "\u041e\u043f\u0438\u0441", - "category": "Category", - "title_deposit": "\u0414\u043e\u0445\u0456\u0434 \/ \u043f\u0440\u0438\u0445\u0456\u0434", - "title_transfer": "\u041f\u0435\u0440\u0435\u043a\u0430\u0437", - "title_transfers": "\u041f\u0435\u0440\u0435\u043a\u0430\u0437\u0438", - "piggyBanks": "\u0421\u043a\u0430\u0440\u0431\u043d\u0438\u0447\u043a\u0438", - "rules": "\u041f\u0440\u0430\u0432\u0438\u043b\u0430", - "accounts": "\u0420\u0430\u0445\u0443\u043d\u043a\u0438", - "categories": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457", - "tags": "\u0422\u0435\u0433\u0438", - "object_groups_page_title": "Groups", - "reports": "\u0417\u0432\u0456\u0442\u0438", - "webhooks": "\u0412\u0435\u0431-\u0433\u0430\u043a\u0438", - "currencies": "\u0412\u0430\u043b\u044e\u0442\u0438", - "administration": "Administration", - "profile": "\u041f\u0440\u043e\u0444\u0456\u043b\u044c", - "source_account": "\u0412\u0438\u0445\u0456\u0434\u043d\u0438\u0439 \u0440\u0430\u0445\u0443\u043d\u043e\u043a", - "destination_account": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f", - "amount": "\u0421\u0443\u043c\u0430", - "date": "\u0414\u0430\u0442\u0430", - "time": "Time", - "preferences": "\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f", - "transactions": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0457", - "balance": "Balance", - "budgets": "\u0411\u044e\u0434\u0436\u0435\u0442\u0438", - "subscriptions": "\u041f\u0456\u0434\u043f\u0438\u0441\u043a\u0438", - "welcome_back": "\u0429\u043e \u0432 \u0433\u0430\u043c\u0430\u043d\u0446\u0456?", - "bills_to_pay": "\u0420\u0430\u0445\u0443\u043d\u043a\u0438 \u0434\u043e \u0441\u043f\u043b\u0430\u0442\u0438", - "net_worth": "\u0427\u0438\u0441\u0442\u0456 \u0430\u043a\u0442\u0438\u0432\u0438", - "pref_last365": "\u041c\u0438\u043d\u0443\u043b\u0438\u0439 \u0440\u0456\u043a", - "pref_last90": "\u041e\u0441\u0442\u0430\u043d\u043d\u0456 90 \u0434\u043d\u0456\u0432", - "pref_last30": "\u041e\u0441\u0442\u0430\u043d\u043d\u0456 30 \u0434\u043d\u0456\u0432", - "pref_last7": "\u041e\u0441\u0442\u0430\u043d\u043d\u0456 7 \u0434\u043d\u0456\u0432", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/vi_VN/index.js b/frontend/src/i18n/vi_VN/index.js deleted file mode 100644 index fbb1050ad0..0000000000 --- a/frontend/src/i18n/vi_VN/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "vi", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "T\u00ean", - "amount_min": "S\u1ed1 ti\u1ec1n t\u1ed1i thi\u1ec3u", - "amount_max": "S\u1ed1 ti\u1ec1n t\u1ed1i \u0111a", - "url": "URL", - "title": "Ti\u00eau \u0111\u1ec1", - "first_date": "Ng\u00e0y \u0111\u1ea7u ti\u00ean", - "repetitions": "S\u1ef1 l\u1eb7p l\u1ea1i", - "description": "M\u00f4 t\u1ea3", - "iban": "IBAN", - "skip": "B\u1ecf qua", - "date": "Ng\u00e0y" - }, - "list": { - "name": "T\u00ean", - "account_number": "Account number", - "currentBalance": "S\u1ed1 d\u01b0 hi\u1ec7n t\u1ea1i", - "lastActivity": "Ho\u1ea1t \u0111\u1ed9ng cu\u1ed1i c\u00f9ng", - "active": "\u0110ang ho\u1ea1t \u0111\u1ed9ng?" - }, - "breadcrumbs": { - "placeholder": "Gi\u1eef ch\u1ed7", - "budgets": "Ng\u00e2n s\u00e1ch", - "subscriptions": "\u0110\u0103ng k\u00fd nh\u1eadn th\u00f4ng tin", - "transactions": "Giao d\u1ecbch", - "title_expenses": "Chi ph\u00ed", - "title_withdrawal": "Chi ph\u00ed", - "title_revenue": "Thu nh\u1eadp doanh thu", - "title_deposit": "Thu nh\u1eadp doanh thu", - "title_transfer": "Chuy\u1ec3n", - "title_transfers": "Chuy\u1ec3n", - "asset_accounts": "T\u00e0i kho\u1ea3n t\u00e0i s\u1ea3n", - "expense_accounts": "T\u00e0i kho\u1ea3n chi ph\u00ed", - "revenue_accounts": "T\u00e0i kho\u1ea3n thu nh\u1eadp", - "liabilities_accounts": "N\u1ee3 ph\u1ea3i tr\u1ea3" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "H\u00e0nh \u0111\u1ed9ng", - "edit": "S\u1eeda", - "delete": "X\u00f3a", - "reconcile": "\u0110\u1ed1i chi\u1ebfu", - "create_new_asset": "T\u1ea1o t\u00e0i kho\u1ea3n m\u1edbi", - "confirm_action": "Confirm action", - "new_budget": "Ng\u00e2n s\u00e1ch m\u1edbi", - "new_asset_account": "t\u00e0i kho\u1ea3n m\u1edbi", - "newTransfer": "Chuy\u1ec3n kho\u1ea3n m\u1edbi", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "Ti\u1ec1n g\u1eedi m\u1edbi", - "newWithdrawal": "Chi ph\u00ed m\u1edbi", - "bills_paid": "H\u00f3a \u0111\u01a1n thanh to\u00e1n", - "left_to_spend": "C\u00f2n l\u1ea1i \u0111\u1ec3 chi ti\u00eau", - "no_budget": "(kh\u00f4ng c\u00f3 ng\u00e2n s\u00e1ch)", - "budgeted": "Ng\u00e2n s\u00e1ch", - "spent": "\u0110\u00e3 chi", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "T\u00ean t\u00e0i kho\u1ea3n ch\u1ee9a..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "S\u1ed1 t\u00e0i kho\u1ea3n ngu\u1ed3n \/ IBAN l\u00e0..", - "rule_trigger_source_account_nr_contains_choice": "S\u1ed1 t\u00e0i kho\u1ea3n ngu\u1ed3n \/ IBAN ch\u1ee9a..", - "rule_trigger_destination_account_starts_choice": "T\u00ean t\u00e0i kho\u1ea3n \u0111\u00edch b\u1eaft \u0111\u1ea7u b\u1eb1ng..", - "rule_trigger_destination_account_ends_choice": "T\u00ean t\u00e0i kho\u1ea3n \u0111\u00edch k\u1ebft th\u00fac b\u1eb1ng..", - "rule_trigger_destination_account_is_choice": "T\u00ean t\u00e0i kho\u1ea3n \u0111\u00edch l\u00e0..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "Giao d\u1ecbch thu\u1ed9c lo\u1ea1i..", - "rule_trigger_category_is_choice": "Danh m\u1ee5c l\u00e0..", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "M\u00f4 t\u1ea3 b\u1eaft \u0111\u1ea7u b\u1eb1ng..", - "rule_trigger_description_ends_choice": "M\u00f4 t\u1ea3 k\u1ebft th\u00fac b\u1eb1ng..", - "rule_trigger_description_contains_choice": "M\u00f4 t\u1ea3 c\u00f3 ch\u1ee9a..", - "rule_trigger_description_is_choice": "M\u00f4 t\u1ea3 l\u00e0..", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Ng\u00e0y giao d\u1ecbch tr\u01b0\u1edbc..", - "rule_trigger_date_after_choice": "Ng\u00e0y giao d\u1ecbch sau..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "Ng\u00e2n s\u00e1ch l\u00e0..", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "Ti\u1ec1n t\u1ec7 giao d\u1ecbch l\u00e0..", - "rule_trigger_foreign_currency_is_choice": "Giao d\u1ecbch ngo\u1ea1i t\u1ec7 l\u00e0..", - "rule_trigger_has_attachments_choice": "C\u00f3 \u00edt nh\u1ea5t nhi\u1ec1u t\u1ec7p \u0111\u00ednh k\u00e8m n\u00e0y", - "rule_trigger_has_no_category_choice": "Kh\u00f4ng c\u00f3 danh m\u1ee5c", - "rule_trigger_has_any_category_choice": "C\u00f3 m\u1ed9t danh m\u1ee5c (b\u1ea5t k\u1ef3)", - "rule_trigger_has_no_budget_choice": "Kh\u00f4ng c\u00f3 ng\u00e2n s\u00e1ch", - "rule_trigger_has_any_budget_choice": "C\u00f3 ng\u00e2n s\u00e1ch (b\u1ea5t k\u1ef3)", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "Kh\u00f4ng c\u00f3 nh\u00e3n", - "rule_trigger_has_any_tag_choice": "C\u00f3 m\u1ed9t ho\u1eb7c nhi\u1ec1u nh\u00e3n(b\u1ea5t k\u1ef3)", - "rule_trigger_any_notes_choice": "C\u00f3 (b\u1ea5t k\u1ef3) ghi ch\u00fa", - "rule_trigger_no_notes_choice": "Kh\u00f4ng c\u00f3 ghi ch\u00fa", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "H\u00f3a \u0111\u01a1n l\u00e0..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "X\u00f3a m\u1ecdi danh m\u1ee5c", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "X\u00f3a m\u1ecdi ng\u00e2n s\u00e1ch", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "X\u00f3a t\u1ea5t c\u1ea3 c\u00e1c nh\u00e3n", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "X\u00f3a m\u1ecdi ghi ch\u00fa", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "Chuy\u1ec3n \u0111\u1ed5i giao d\u1ecbch th\u00e0nh ti\u1ec1n g\u1eedi", - "rule_action_convert_withdrawal_choice": "Chuy\u1ec3n \u0111\u1ed5i giao d\u1ecbch sang r\u00fat ti\u1ec1n", - "rule_action_convert_transfer_choice": "Chuy\u1ec3n \u0111\u1ed5i giao d\u1ecbch sang chuy\u1ec3n kho\u1ea3n", - "placeholder": "[Placeholder]", - "recurrences": "Giao d\u1ecbch \u0111\u1ecbnh k\u1ef3", - "title_expenses": "Chi ph\u00ed", - "title_withdrawal": "Chi ph\u00ed", - "title_revenue": "Thu nh\u1eadp doanh thu", - "pref_1D": "M\u1ed9t ng\u00e0y", - "pref_1W": "M\u1ed9t tu\u1ea7n", - "pref_1M": "M\u1ed9t th\u00e1ng", - "pref_3M": "Ba th\u00e1ng (qu\u00fd)", - "pref_6M": "S\u00e1u th\u00e1ng", - "pref_1Y": "M\u1ed9t n\u0103m", - "repeat_freq_yearly": "h\u00e0ng n\u0103m", - "repeat_freq_half-year": "m\u1ed7i n\u1eeda n\u0103m", - "repeat_freq_quarterly": "h\u00e0ng qu\u00fd", - "repeat_freq_monthly": "h\u00e0ng th\u00e1ng", - "repeat_freq_weekly": "h\u00e0ng tu\u1ea7n", - "single_split": "Chia ra", - "asset_accounts": "t\u00e0i kho\u1ea3n", - "expense_accounts": "T\u00e0i kho\u1ea3n chi ph\u00ed", - "liabilities_accounts": "N\u1ee3", - "undefined_accounts": "Accounts", - "name": "T\u00ean", - "revenue_accounts": "T\u00e0i kho\u1ea3n doanh thu", - "description": "S\u1ef1 mi\u00eau t\u1ea3", - "category": "Danh m\u1ee5c", - "title_deposit": "Thu nh\u1eadp doanh thu", - "title_transfer": "Chuy\u1ec3n", - "title_transfers": "Chuy\u1ec3n", - "piggyBanks": "Heo \u0111\u1ea5t", - "rules": "Quy t\u1eafc", - "accounts": "T\u00e0i kho\u1ea3n", - "categories": "Danh m\u1ee5c", - "tags": "Nh\u00e3n", - "object_groups_page_title": "C\u00e1c Nh\u00f3m", - "reports": "B\u00e1o c\u00e1o", - "webhooks": "Webhooks", - "currencies": "Ti\u1ec1n t\u1ec7", - "administration": "Qu\u1ea3n tr\u1ecb", - "profile": "H\u1ed3 s\u01a1", - "source_account": "Ngu\u1ed3n t\u00e0i kho\u1ea3n", - "destination_account": "T\u00e0i kho\u1ea3n \u0111\u00edch", - "amount": "S\u1ed1 ti\u1ec1n", - "date": "Ng\u00e0y", - "time": "Time", - "preferences": "C\u00e1 nh\u00e2n", - "transactions": "Giao d\u1ecbch", - "balance": "Ti\u1ec1n c\u00f2n l\u1ea1i", - "budgets": "Ng\u00e2n s\u00e1ch", - "subscriptions": "Subscriptions", - "welcome_back": "Ch\u00e0o m\u1eebng tr\u1edf l\u1ea1i?", - "bills_to_pay": "H\u00f3a \u0111\u01a1n ph\u1ea3i tr\u1ea3", - "net_worth": "T\u00e0i s\u1ea3n th\u1ef1c", - "pref_last365": "N\u0103m tr\u01b0\u1edbc", - "pref_last90": "90 ng\u00e0y cu\u1ed1i", - "pref_last30": "30 ng\u00e0y cu\u1ed1i", - "pref_last7": "7 ng\u00e0y tr\u01b0\u1edbc", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/i18n/zh_CN/index.js b/frontend/src/i18n/zh_CN/index.js deleted file mode 100644 index 3aa37b3759..0000000000 --- a/frontend/src/i18n/zh_CN/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "zh-cn", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "\u540d\u79f0", - "amount_min": "\u6700\u5c0f\u91d1\u989d", - "amount_max": "\u6700\u5927\u91d1\u989d", - "url": "\u7f51\u5740", - "title": "\u6807\u9898", - "first_date": "\u521d\u6b21\u65e5\u671f", - "repetitions": "\u91cd\u590d", - "description": "\u63cf\u8ff0", - "iban": "\u56fd\u9645\u94f6\u884c\u8d26\u6237\u53f7\u7801 IBAN", - "skip": "\u8df3\u8fc7", - "date": "\u65e5\u671f" - }, - "list": { - "name": "\u540d\u79f0", - "account_number": "\u8d26\u6237\u53f7\u7801", - "currentBalance": "\u76ee\u524d\u4f59\u989d", - "lastActivity": "\u4e0a\u6b21\u6d3b\u52a8", - "active": "\u662f\u5426\u542f\u7528\uff1f" - }, - "breadcrumbs": { - "placeholder": "[Placeholder][\u5360\u4f4d\u7b26]", - "budgets": "\u9884\u7b97", - "subscriptions": "\u8ba2\u9605\u5217\u8868", - "transactions": "\u4ea4\u6613", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "\u652f\u51fa", - "title_revenue": "\u6536\u76ca\/\u6536\u5165", - "title_deposit": "\u6536\u76ca\/\u6536\u5165", - "title_transfer": "\u8f6c\u8d26", - "title_transfers": "\u8f6c\u8d26", - "asset_accounts": "\u8d44\u4ea7\u8d26\u6237", - "expense_accounts": "\u652f\u51fa\u8d26\u6237", - "revenue_accounts": "\u6536\u5165\u8d26\u6237", - "liabilities_accounts": "\u503a\u52a1" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "\u64cd\u4f5c", - "edit": "\u7f16\u8f91", - "delete": "\u5220\u9664", - "reconcile": "\u5bf9\u8d26", - "create_new_asset": "\u521b\u5efa\u65b0\u8d44\u4ea7\u8d26\u6237", - "confirm_action": "\u786e\u8ba4\u64cd\u4f5c", - "new_budget": "\u65b0\u9884\u7b97", - "new_asset_account": "\u65b0\u8d44\u4ea7\u8d26\u6237", - "newTransfer": "\u65b0\u8f6c\u8d26", - "submission_options": "Submission options", - "apply_rules_checkbox": "\u5e94\u7528\u89c4\u5219", - "fire_webhooks_checkbox": "\u89e6\u53d1 webhook", - "newDeposit": "\u65b0\u6536\u5165", - "newWithdrawal": "\u65b0\u652f\u51fa", - "bills_paid": "\u5df2\u4ed8\u8d26\u5355", - "left_to_spend": "\u5269\u4f59\u652f\u51fa", - "no_budget": "(\u65e0\u9884\u7b97)", - "budgeted": "\u9884\u7b97\u4e0a\u9650", - "spent": "\u652f\u51fa", - "no_bill": "(\u65e0\u8d26\u5355)", - "rule_trigger_source_account_starts_choice": "\u6765\u6e90\u8d26\u6237\u540d\u79f0\u5f00\u5934\u4e3a...", - "rule_trigger_source_account_ends_choice": "\u6765\u6e90\u8d26\u6237\u7ed3\u5c3e\u4e3a\u2026", - "rule_trigger_source_account_is_choice": "\u6765\u6e90\u8d26\u6237\u540d\u79f0\u4e3a...", - "rule_trigger_source_account_contains_choice": "\u6765\u6e90\u8d26\u6237\u540d\u79f0\u5305\u542b...", - "rule_trigger_account_id_choice": "\u5176\u4e2d\u4e00\u4e2a\u8d26\u6237ID\u4e3a...", - "rule_trigger_source_account_id_choice": "\u6765\u6e90\u8d26\u6237 ID \u4e3a...", - "rule_trigger_destination_account_id_choice": "\u76ee\u6807\u8d26\u6237 ID \u4e3a...", - "rule_trigger_account_is_cash_choice": "\u5176\u4e2d\u4e00\u4e2a\u8d26\u6237\u662f\u73b0\u91d1\u8d26\u6237", - "rule_trigger_source_is_cash_choice": "\u6765\u6e90\u8d26\u6237\u4e3a (\u73b0\u91d1) \u8d26\u6237", - "rule_trigger_destination_is_cash_choice": "\u76ee\u6807\u8d26\u6237\u4e3a (\u73b0\u91d1) \u8d26\u6237", - "rule_trigger_source_account_nr_starts_choice": "\u6765\u6e90\u8d26\u6237\u7f16\u53f7 \/ IBAN \u5f00\u5934\u4e3a...", - "rule_trigger_source_account_nr_ends_choice": "\u6765\u6e90\u8d26\u6237\u7f16\u53f7 \/ IBAN \u7ed3\u5c3e\u4e3a...", - "rule_trigger_source_account_nr_is_choice": "\u6765\u6e90\u8d26\u6237\u7f16\u53f7 \/ IBAN \u4e3a...", - "rule_trigger_source_account_nr_contains_choice": "\u6765\u6e90\u8d26\u6237\u7f16\u53f7 \/ IBAN \u5305\u542b...", - "rule_trigger_destination_account_starts_choice": "\u76ee\u6807\u8d26\u6237\u540d\u79f0\u5f00\u5934\u4e3a...", - "rule_trigger_destination_account_ends_choice": "\u76ee\u6807\u8d26\u6237\u540d\u79f0\u7ed3\u5c3e\u4e3a...", - "rule_trigger_destination_account_is_choice": "\u76ee\u6807\u8d26\u6237\u540d\u79f0\u4e3a...", - "rule_trigger_destination_account_contains_choice": "\u76ee\u6807\u8d26\u6237\u540d\u79f0\u5305\u542b...", - "rule_trigger_destination_account_nr_starts_choice": "\u76ee\u6807\u8d26\u6237\u7f16\u53f7 \/ IBAN \u5f00\u5934\u4e3a...", - "rule_trigger_destination_account_nr_ends_choice": "\u76ee\u6807\u8d26\u6237\u7f16\u53f7 \/ IBAN \u7ed3\u5c3e\u4e3a...", - "rule_trigger_destination_account_nr_is_choice": "\u76ee\u6807\u8d26\u6237\u7f16\u53f7 \/ IBAN \u4e3a...", - "rule_trigger_destination_account_nr_contains_choice": "\u76ee\u6807\u8d26\u6237\u7f16\u53f7 \/ IBAN \u5305\u542b...", - "rule_trigger_transaction_type_choice": "\u4ea4\u6613\u7c7b\u578b\u4e3a\u2026", - "rule_trigger_category_is_choice": "\u5206\u7c7b\u4e3a...", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "\u91d1\u989d\u662f...", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "\u63cf\u8ff0\u5f00\u5934\u4e3a...", - "rule_trigger_description_ends_choice": "\u63cf\u8ff0\u7ed3\u5c3e\u4e3a...", - "rule_trigger_description_contains_choice": "\u63cf\u8ff0\u5305\u542b\u2026", - "rule_trigger_description_is_choice": "\u63cf\u8ff0\u4e3a\u2026", - "rule_trigger_date_on_choice": "\u4ea4\u6613\u65e5\u671f\u4e3a...", - "rule_trigger_date_before_choice": "\u4ea4\u6613\u65e5\u671f\u65e9\u4e8e...", - "rule_trigger_date_after_choice": "\u4ea4\u6613\u65e5\u671f\u665a\u4e8e...", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "\u9884\u7b97\u4e3a\u2026", - "rule_trigger_tag_is_choice": "\u5176\u4e2d\u4e00\u4e2a\u6807\u7b7e\u4e3a...", - "rule_trigger_currency_is_choice": "\u4ea4\u6613\u8d27\u5e01\u4e3a\u2026", - "rule_trigger_foreign_currency_is_choice": "\u4ea4\u6613\u5916\u5e01\u4e3a...", - "rule_trigger_has_attachments_choice": "\u81f3\u5c11\u6709\u8fd9\u4e48\u591a\u9644\u4ef6", - "rule_trigger_has_no_category_choice": "\u65e0\u5206\u7c7b", - "rule_trigger_has_any_category_choice": "\u6709\u4e00\u4e2a (\u4efb\u4f55) \u5206\u7c7b", - "rule_trigger_has_no_budget_choice": "\u6ca1\u6709\u9884\u7b97", - "rule_trigger_has_any_budget_choice": "\u6709\u4e00\u4e2a (\u4efb\u4f55) \u9884\u7b97", - "rule_trigger_has_no_bill_choice": "\u672a\u6709\u8d26\u5355", - "rule_trigger_has_any_bill_choice": "\u6709\u4e00\u4e2a\uff08\u4efb\u4f55\uff09\u8d26\u5355", - "rule_trigger_has_no_tag_choice": "\u6ca1\u6709\u6807\u7b7e", - "rule_trigger_has_any_tag_choice": "\u6709\u4e00\u4e2a\u6216\u591a\u4e2a (\u4efb\u4f55) \u6807\u7b7e", - "rule_trigger_any_notes_choice": "\u6709 (\u4efb\u610f) \u5907\u6ce8", - "rule_trigger_no_notes_choice": "\u65e0\u5907\u6ce8", - "rule_trigger_notes_is_choice": "\u5907\u6ce8\u4e3a...", - "rule_trigger_notes_contains_choice": "\u5907\u6ce8\u5305\u542b...", - "rule_trigger_notes_starts_choice": "\u5907\u6ce8\u5f00\u5934\u4e3a...", - "rule_trigger_notes_ends_choice": "\u5907\u6ce8\u7ed3\u5c3e\u4e3a...", - "rule_trigger_bill_is_choice": "\u8d26\u5355\u662f...", - "rule_trigger_external_id_is_choice": "\u5916\u90e8ID\u4e3a...", - "rule_trigger_internal_reference_is_choice": "\u5185\u90e8\u5f15\u7528\u4e3a...", - "rule_trigger_journal_id_choice": "\u4ea4\u6613\u65e5\u5fd7 ID \u4e3a...", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "\u4ea4\u6613\u6ca1\u6709\u5916\u90e8\u94fe\u63a5", - "rule_trigger_id_choice": "\u4ea4\u6613ID\u4e3a...", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u6e05\u7a7a\u4efb\u4f55\u5206\u7c7b", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u6e05\u7a7a\u4efb\u4f55\u9884\u7b97", - "rule_action_add_tag_choice": "\u6dfb\u52a0\u6807\u7b7e..", - "rule_action_remove_tag_choice": "\u79fb\u9664\u6807\u7b7e..", - "rule_action_remove_all_tags_choice": "\u79fb\u9664\u6240\u6709\u6807\u7b7e", - "rule_action_set_description_choice": "\u8bbe\u7f6e\u63cf\u8ff0\u4e3a", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "\u79fb\u9664\u6240\u6709\u5907\u6ce8", - "rule_action_set_notes_choice": "\u8bbe\u7f6e\u5907\u6ce8\u4e3a..", - "rule_action_link_to_bill_choice": "\u5173\u8054\u81f3\u8d26\u5355\u2026", - "rule_action_convert_deposit_choice": "\u8f6c\u6362\u4ea4\u6613\u4e3a\u6536\u5165", - "rule_action_convert_withdrawal_choice": "\u8f6c\u6362\u4ea4\u6613\u4e3a\u652f\u51fa", - "rule_action_convert_transfer_choice": "\u8f6c\u6362\u4ea4\u6613\u4e3a\u8f6c\u8d26", - "placeholder": "[Placeholder]", - "recurrences": "\u5b9a\u671f\u4ea4\u6613", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "\u652f\u51fa", - "title_revenue": "\u6536\u5165", - "pref_1D": "1\u5929", - "pref_1W": "1\u5468", - "pref_1M": "1\u4e2a\u6708", - "pref_3M": "3\u4e2a\u6708 (1\u5b63\u5ea6)", - "pref_6M": "6\u4e2a\u6708", - "pref_1Y": "1\u5e74", - "repeat_freq_yearly": "\u6bcf\u5e74", - "repeat_freq_half-year": "\u6bcf\u534a\u5e74", - "repeat_freq_quarterly": "\u6bcf\u5b63", - "repeat_freq_monthly": "\u6bcf\u6708", - "repeat_freq_weekly": "\u6bcf\u5468", - "single_split": "\u62c6\u5206", - "asset_accounts": "\u8d44\u4ea7\u8d26\u6237", - "expense_accounts": "\u652f\u51fa\u8d26\u6237", - "liabilities_accounts": "\u503a\u52a1\u8d26\u6237", - "undefined_accounts": "\u8d26\u6237", - "name": "\u540d\u79f0", - "revenue_accounts": "\u6536\u5165\u8d26\u6237", - "description": "\u63cf\u8ff0", - "category": "\u5206\u7c7b", - "title_deposit": "\u6536\u5165", - "title_transfer": "\u8f6c\u8d26", - "title_transfers": "\u8f6c\u8d26", - "piggyBanks": "\u5b58\u94b1\u7f50", - "rules": "\u89c4\u5219", - "accounts": "\u8d26\u6237", - "categories": "\u5206\u7c7b", - "tags": "\u6807\u7b7e", - "object_groups_page_title": "\u7ec4", - "reports": "\u62a5\u8868", - "webhooks": "Webhooks", - "currencies": "\u8d27\u5e01", - "administration": "\u7ba1\u7406", - "profile": "\u4e2a\u4eba\u6863\u6848", - "source_account": "\u6765\u6e90\u8d26\u6237", - "destination_account": "\u76ee\u6807\u8d26\u6237", - "amount": "\u91d1\u989d", - "date": "\u65e5\u671f", - "time": "\u65f6\u95f4", - "preferences": "\u504f\u597d\u8bbe\u5b9a", - "transactions": "\u4ea4\u6613", - "balance": "\u4f59\u989d", - "budgets": "\u9884\u7b97", - "subscriptions": "Subscriptions", - "welcome_back": "\u4eca\u5929\u7406\u8d22\u4e86\u5417\uff1f", - "bills_to_pay": "\u5f85\u4ed8\u8d26\u5355", - "net_worth": "\u51c0\u8d44\u4ea7", - "pref_last365": "\u6700\u8fd1\u4e00\u5e74", - "pref_last90": "\u6700\u8fd190\u5929", - "pref_last30": "\u6700\u8fd1 30 \u5929", - "pref_last7": "\u6700\u8fd17\u5929", - "pref_YTD": "\u4eca\u5e74\u81f3\u4eca", - "pref_QTD": "\u672c\u5b63\u5ea6\u81f3\u4eca", - "pref_MTD": "\u672c\u6708\u81f3\u4eca" - } -} diff --git a/frontend/src/i18n/zh_TW/index.js b/frontend/src/i18n/zh_TW/index.js deleted file mode 100644 index 0eaa5c8736..0000000000 --- a/frontend/src/i18n/zh_TW/index.js +++ /dev/null @@ -1,228 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default { - "config": { - "html_language": "zh-tw", - "month_and_day_fns": "MMMM d, y" - }, - "form": { - "name": "\u540d\u7a31", - "amount_min": "\u6700\u5c0f\u91d1\u984d", - "amount_max": "\u6700\u5927\u91d1\u984d", - "url": "URL", - "title": "\u6a19\u984c", - "first_date": "\u521d\u6b21\u65e5\u671f", - "repetitions": "\u91cd\u8907", - "description": "\u63cf\u8ff0", - "iban": "\u570b\u969b\u9280\u884c\u5e33\u6236\u865f\u78bc (IBAN)", - "skip": "\u7565\u904e", - "date": "\u65e5\u671f" - }, - "list": { - "name": "\u540d\u7a31", - "account_number": "\u5e33\u6236\u865f\u78bc", - "currentBalance": "\u76ee\u524d\u9918\u984d", - "lastActivity": "\u4e0a\u6b21\u6d3b\u52d5", - "active": "\u662f\u5426\u555f\u7528\uff1f" - }, - "breadcrumbs": { - "placeholder": "[Placeholder]", - "budgets": "\u9810\u7b97", - "subscriptions": "\u8a02\u95b1", - "transactions": "\u4ea4\u6613", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "Expenses", - "title_revenue": "Revenue \/ income", - "title_deposit": "Revenue \/ income", - "title_transfer": "\u8f49\u5e33", - "title_transfers": "\u8f49\u5e33", - "asset_accounts": "\u8cc7\u7522\u5e33\u6236", - "expense_accounts": "Expense accounts", - "revenue_accounts": "Revenue accounts", - "liabilities_accounts": "Liabilities" - }, - "firefly": { - "administration_index": "Financial administration", - "actions": "\u64cd\u4f5c", - "edit": "\u7de8\u8f2f", - "delete": "\u522a\u9664", - "reconcile": "Reconcile", - "create_new_asset": "\u5efa\u7acb\u65b0\u8cc7\u7522\u5e33\u6236", - "confirm_action": "Confirm action", - "new_budget": "\u65b0\u9810\u7b97", - "new_asset_account": "\u65b0\u8cc7\u7522\u5e33\u6236", - "newTransfer": "\u65b0\u8f49\u5e33", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", - "newDeposit": "\u65b0\u5b58\u6b3e", - "newWithdrawal": "\u65b0\u652f\u51fa", - "bills_paid": "\u5df2\u7e73\u5e33\u55ae", - "left_to_spend": "\u5269\u9918\u53ef\u82b1\u8cbb", - "no_budget": "(\u7121\u9810\u7b97)", - "budgeted": "\u5df2\u5217\u5165\u9810\u7b97", - "spent": "\u652f\u51fa", - "no_bill": "(no bill)", - "rule_trigger_source_account_starts_choice": "Source account name starts with..", - "rule_trigger_source_account_ends_choice": "Source account name ends with..", - "rule_trigger_source_account_is_choice": "Source account name is..", - "rule_trigger_source_account_contains_choice": "Source account name contains..", - "rule_trigger_account_id_choice": "Either account ID is exactly..", - "rule_trigger_source_account_id_choice": "Source account ID is exactly..", - "rule_trigger_destination_account_id_choice": "Destination account ID is exactly..", - "rule_trigger_account_is_cash_choice": "Either account is cash", - "rule_trigger_source_is_cash_choice": "Source account is (cash) account", - "rule_trigger_destination_is_cash_choice": "Destination account is (cash) account", - "rule_trigger_source_account_nr_starts_choice": "Source account number \/ IBAN starts with..", - "rule_trigger_source_account_nr_ends_choice": "Source account number \/ IBAN ends with..", - "rule_trigger_source_account_nr_is_choice": "Source account number \/ IBAN is..", - "rule_trigger_source_account_nr_contains_choice": "Source account number \/ IBAN contains..", - "rule_trigger_destination_account_starts_choice": "Destination account name starts with..", - "rule_trigger_destination_account_ends_choice": "Destination account name ends with..", - "rule_trigger_destination_account_is_choice": "Destination account name is..", - "rule_trigger_destination_account_contains_choice": "Destination account name contains..", - "rule_trigger_destination_account_nr_starts_choice": "Destination account number \/ IBAN starts with..", - "rule_trigger_destination_account_nr_ends_choice": "Destination account number \/ IBAN ends with..", - "rule_trigger_destination_account_nr_is_choice": "Destination account number \/ IBAN is..", - "rule_trigger_destination_account_nr_contains_choice": "Destination account number \/ IBAN contains..", - "rule_trigger_transaction_type_choice": "\u8f49\u5e33\u985e\u578b\u70ba\u2026", - "rule_trigger_category_is_choice": "\u985e\u5225...", - "rule_trigger_amount_less_choice": "Amount is less than or equal to ..", - "rule_trigger_amount_is_choice": "Amount is..", - "rule_trigger_amount_more_choice": "Amount is more than or equal to..", - "rule_trigger_description_starts_choice": "\u63cf\u8ff0\u4ee5\u2026\u958b\u982d", - "rule_trigger_description_ends_choice": "\u63cf\u8ff0\u4ee5\u2026\u4f5c\u7d50", - "rule_trigger_description_contains_choice": "\u63cf\u8ff0\u5305\u542b\u2026", - "rule_trigger_description_is_choice": "\u63cf\u8ff0\u662f\u2026", - "rule_trigger_date_on_choice": "Transaction date is..", - "rule_trigger_date_before_choice": "Transaction date is before..", - "rule_trigger_date_after_choice": "Transaction date is after..", - "rule_trigger_created_at_on_choice": "Transaction was made on..", - "rule_trigger_updated_at_on_choice": "Transaction was last edited on..", - "rule_trigger_budget_is_choice": "\u9810\u7b97\u70ba\u2026", - "rule_trigger_tag_is_choice": "Any tag is..", - "rule_trigger_currency_is_choice": "\u8f49\u5e33\u8ca8\u5e63\u70ba\u2026", - "rule_trigger_foreign_currency_is_choice": "Transaction foreign currency is..", - "rule_trigger_has_attachments_choice": "\u81f3\u5c11\u6709\u9019\u9ebc\u591a\u9644\u52a0\u6a94\u6848", - "rule_trigger_has_no_category_choice": "\u7121\u5206\u985e", - "rule_trigger_has_any_category_choice": "\u6709\u4e00\u500b (\u4efb\u4f55) \u5206\u985e", - "rule_trigger_has_no_budget_choice": "\u6c92\u6709\u9810\u7b97", - "rule_trigger_has_any_budget_choice": "\u6709\u4e00\u500b (\u4efb\u4f55) \u9810\u7b97", - "rule_trigger_has_no_bill_choice": "Has no bill", - "rule_trigger_has_any_bill_choice": "Has a (any) bill", - "rule_trigger_has_no_tag_choice": "\u6c92\u6709\u6a19\u7c64", - "rule_trigger_has_any_tag_choice": "\u6709\u4e00\u500b\u6216\u591a\u500b (\u4efb\u4f55) \u6a19\u7c64", - "rule_trigger_any_notes_choice": "\u6709 (\u4efb\u4f55) \u8a3b\u91cb", - "rule_trigger_no_notes_choice": "\u6c92\u6709\u8a3b\u91cb", - "rule_trigger_notes_is_choice": "Notes are..", - "rule_trigger_notes_contains_choice": "Notes contain..", - "rule_trigger_notes_starts_choice": "Notes start with..", - "rule_trigger_notes_ends_choice": "Notes end with..", - "rule_trigger_bill_is_choice": "Bill is..", - "rule_trigger_external_id_is_choice": "External ID is..", - "rule_trigger_internal_reference_is_choice": "Internal reference is..", - "rule_trigger_journal_id_choice": "Transaction journal ID is..", - "rule_trigger_any_external_url_choice": "Transaction has an (any) external URL", - "rule_trigger_no_external_url_choice": "Transaction has no external URL", - "rule_trigger_id_choice": "Transaction ID is..", - "rule_action_delete_transaction_choice": "DELETE transaction(!)", - "rule_action_set_category_choice": "Set category to ..", - "rule_action_clear_category_choice": "\u6e05\u7a7a\u4efb\u4f55\u5206\u985e", - "rule_action_set_budget_choice": "Set budget to ..", - "rule_action_clear_budget_choice": "\u6e05\u7a7a\u4efb\u4f55\u9810\u7b97", - "rule_action_add_tag_choice": "Add tag ..", - "rule_action_remove_tag_choice": "Remove tag ..", - "rule_action_remove_all_tags_choice": "\u79fb\u9664\u6240\u6709\u6a19\u7c64", - "rule_action_set_description_choice": "Set description to ..", - "rule_action_update_piggy_choice": "Add \/ remove transaction amount in piggy bank ..", - "rule_action_append_description_choice": "Append description with ..", - "rule_action_prepend_description_choice": "Prepend description with ..", - "rule_action_set_source_account_choice": "Set source account to ..", - "rule_action_set_destination_account_choice": "Set destination account to ..", - "rule_action_append_notes_choice": "Append notes with ..", - "rule_action_prepend_notes_choice": "Prepend notes with ..", - "rule_action_clear_notes_choice": "\u79fb\u9664\u4efb\u4f55\u8a3b\u91cb", - "rule_action_set_notes_choice": "Set notes to ..", - "rule_action_link_to_bill_choice": "Link to a bill ..", - "rule_action_convert_deposit_choice": "\u8f49\u63db\u4ea4\u6613\u70ba\u5b58\u6b3e", - "rule_action_convert_withdrawal_choice": "\u8f49\u63db\u4ea4\u6613\u81f3\u63d0\u6b3e", - "rule_action_convert_transfer_choice": "\u8f49\u63db\u4ea4\u6613\u81f3\u8f49\u5e33", - "placeholder": "[Placeholder]", - "recurrences": "\u9031\u671f\u6027\u4ea4\u6613", - "title_expenses": "\u652f\u51fa", - "title_withdrawal": "\u652f\u51fa", - "title_revenue": "\u6536\u5165", - "pref_1D": "1 \u5929", - "pref_1W": "1 \u9031", - "pref_1M": "1 \u500b\u6708", - "pref_3M": "3\u500b\u6708 (\u5b63)", - "pref_6M": "6\u500b\u6708", - "pref_1Y": "1\u5e74", - "repeat_freq_yearly": "\u6bcf\u5e74", - "repeat_freq_half-year": "\u6bcf\u534a\u5e74", - "repeat_freq_quarterly": "\u6bcf\u5b63", - "repeat_freq_monthly": "\u6bcf\u6708", - "repeat_freq_weekly": "\u6bcf\u9031", - "single_split": "Split", - "asset_accounts": "\u8cc7\u7522\u5e33\u6236", - "expense_accounts": "\u652f\u51fa\u5e33\u6236", - "liabilities_accounts": "\u50b5\u52d9", - "undefined_accounts": "Accounts", - "name": "\u540d\u7a31", - "revenue_accounts": "\u6536\u5165\u5e33\u6236", - "description": "\u63cf\u8ff0", - "category": "\u5206\u985e", - "title_deposit": "\u6536\u5165", - "title_transfer": "\u8f49\u5e33", - "title_transfers": "\u8f49\u5e33", - "piggyBanks": "\u5c0f\u8c6c\u64b2\u6eff", - "rules": "\u898f\u5247", - "accounts": "\u5e33\u6236", - "categories": "\u5206\u985e", - "tags": "\u6a19\u7c64", - "object_groups_page_title": "Groups", - "reports": "\u5831\u8868", - "webhooks": "Webhooks", - "currencies": "\u8ca8\u5e63", - "administration": "\u7ba1\u7406", - "profile": "\u500b\u4eba\u6a94\u6848", - "source_account": "\u4f86\u6e90\u5e33\u6236", - "destination_account": "\u76ee\u6a19\u5e33\u6236", - "amount": "\u91d1\u984d", - "date": "\u65e5\u671f", - "time": "Time", - "preferences": "\u504f\u597d\u8a2d\u5b9a", - "transactions": "\u4ea4\u6613", - "balance": "\u9918\u984d", - "budgets": "\u9810\u7b97", - "subscriptions": "Subscriptions", - "welcome_back": "What's playing?", - "bills_to_pay": "\u5f85\u4ed8\u5e33\u55ae", - "net_worth": "\u6de8\u503c", - "pref_last365": "Last year", - "pref_last90": "Last 90 days", - "pref_last30": "Last 30 days", - "pref_last7": "Last 7 days", - "pref_YTD": "Year to date", - "pref_QTD": "Quarter to date", - "pref_MTD": "Month to date" - } -} diff --git a/frontend/src/index.template.html b/frontend/src/index.template.html deleted file mode 100644 index fafca50d10..0000000000 --- a/frontend/src/index.template.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - <%= productName %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - diff --git a/frontend/src/layouts/MainLayout.vue b/frontend/src/layouts/MainLayout.vue deleted file mode 100644 index a09beb3158..0000000000 --- a/frontend/src/layouts/MainLayout.vue +++ /dev/null @@ -1,391 +0,0 @@ - - - - - - - - diff --git a/frontend/src/pages/Error404.vue b/frontend/src/pages/Error404.vue deleted file mode 100644 index 7b1f15688b..0000000000 --- a/frontend/src/pages/Error404.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - - - diff --git a/frontend/src/pages/Index.vue b/frontend/src/pages/Index.vue deleted file mode 100644 index 315111d840..0000000000 --- a/frontend/src/pages/Index.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - - - diff --git a/frontend/src/pages/accounts/Create.vue b/frontend/src/pages/accounts/Create.vue deleted file mode 100644 index a6cdba9ba8..0000000000 --- a/frontend/src/pages/accounts/Create.vue +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/accounts/Edit.vue b/frontend/src/pages/accounts/Edit.vue deleted file mode 100644 index d5ad30b194..0000000000 --- a/frontend/src/pages/accounts/Edit.vue +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/accounts/Index.vue b/frontend/src/pages/accounts/Index.vue deleted file mode 100644 index af04e4caef..0000000000 --- a/frontend/src/pages/accounts/Index.vue +++ /dev/null @@ -1,259 +0,0 @@ - - - - - diff --git a/frontend/src/pages/accounts/Reconcile.vue b/frontend/src/pages/accounts/Reconcile.vue deleted file mode 100644 index af32e40eaf..0000000000 --- a/frontend/src/pages/accounts/Reconcile.vue +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/accounts/Show.vue b/frontend/src/pages/accounts/Show.vue deleted file mode 100644 index 904239b9fd..0000000000 --- a/frontend/src/pages/accounts/Show.vue +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/administration/Index.vue b/frontend/src/pages/administration/Index.vue deleted file mode 100644 index 0f0c4db408..0000000000 --- a/frontend/src/pages/administration/Index.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/budgets/Create.vue b/frontend/src/pages/budgets/Create.vue deleted file mode 100644 index 0564a9dd09..0000000000 --- a/frontend/src/pages/budgets/Create.vue +++ /dev/null @@ -1,193 +0,0 @@ - - - - - diff --git a/frontend/src/pages/budgets/Edit.vue b/frontend/src/pages/budgets/Edit.vue deleted file mode 100644 index e2c8bdef6b..0000000000 --- a/frontend/src/pages/budgets/Edit.vue +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/budgets/Index.vue b/frontend/src/pages/budgets/Index.vue deleted file mode 100644 index dc1ac75caf..0000000000 --- a/frontend/src/pages/budgets/Index.vue +++ /dev/null @@ -1,217 +0,0 @@ - - - - - diff --git a/frontend/src/pages/budgets/Show.vue b/frontend/src/pages/budgets/Show.vue deleted file mode 100644 index c97f02da9a..0000000000 --- a/frontend/src/pages/budgets/Show.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/categories/Create.vue b/frontend/src/pages/categories/Create.vue deleted file mode 100644 index 94ce83a203..0000000000 --- a/frontend/src/pages/categories/Create.vue +++ /dev/null @@ -1,192 +0,0 @@ - - - - - diff --git a/frontend/src/pages/categories/Edit.vue b/frontend/src/pages/categories/Edit.vue deleted file mode 100644 index ba9f1e3b34..0000000000 --- a/frontend/src/pages/categories/Edit.vue +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/categories/Index.vue b/frontend/src/pages/categories/Index.vue deleted file mode 100644 index fe607eb147..0000000000 --- a/frontend/src/pages/categories/Index.vue +++ /dev/null @@ -1,214 +0,0 @@ - - - - - diff --git a/frontend/src/pages/categories/Show.vue b/frontend/src/pages/categories/Show.vue deleted file mode 100644 index 637c226586..0000000000 --- a/frontend/src/pages/categories/Show.vue +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/currencies/Create.vue b/frontend/src/pages/currencies/Create.vue deleted file mode 100644 index e6de6b2c23..0000000000 --- a/frontend/src/pages/currencies/Create.vue +++ /dev/null @@ -1,227 +0,0 @@ - - - - - diff --git a/frontend/src/pages/currencies/Edit.vue b/frontend/src/pages/currencies/Edit.vue deleted file mode 100644 index dc9fce03fe..0000000000 --- a/frontend/src/pages/currencies/Edit.vue +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/currencies/Index.vue b/frontend/src/pages/currencies/Index.vue deleted file mode 100644 index 155089e53b..0000000000 --- a/frontend/src/pages/currencies/Index.vue +++ /dev/null @@ -1,217 +0,0 @@ - - - - - diff --git a/frontend/src/pages/currencies/Show.vue b/frontend/src/pages/currencies/Show.vue deleted file mode 100644 index 2a11cf0bbc..0000000000 --- a/frontend/src/pages/currencies/Show.vue +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/dashboard/Dashboard.vue b/frontend/src/pages/dashboard/Dashboard.vue deleted file mode 100644 index 01e5f89368..0000000000 --- a/frontend/src/pages/dashboard/Dashboard.vue +++ /dev/null @@ -1,115 +0,0 @@ - - - - - diff --git a/frontend/src/pages/dashboard/HomeChart.vue b/frontend/src/pages/dashboard/HomeChart.vue deleted file mode 100644 index b9571df099..0000000000 --- a/frontend/src/pages/dashboard/HomeChart.vue +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/development/Index.vue b/frontend/src/pages/development/Index.vue deleted file mode 100644 index 4d24ccff4a..0000000000 --- a/frontend/src/pages/development/Index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/export/Index.vue b/frontend/src/pages/export/Index.vue deleted file mode 100644 index a3bba747f1..0000000000 --- a/frontend/src/pages/export/Index.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/groups/Edit.vue b/frontend/src/pages/groups/Edit.vue deleted file mode 100644 index 4e63dd65f1..0000000000 --- a/frontend/src/pages/groups/Edit.vue +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/groups/Index.vue b/frontend/src/pages/groups/Index.vue deleted file mode 100644 index 6f7162b8b8..0000000000 --- a/frontend/src/pages/groups/Index.vue +++ /dev/null @@ -1,197 +0,0 @@ - - - - - diff --git a/frontend/src/pages/groups/Show.vue b/frontend/src/pages/groups/Show.vue deleted file mode 100644 index bb9463a898..0000000000 --- a/frontend/src/pages/groups/Show.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/piggy-banks/Create.vue b/frontend/src/pages/piggy-banks/Create.vue deleted file mode 100644 index c861cbd857..0000000000 --- a/frontend/src/pages/piggy-banks/Create.vue +++ /dev/null @@ -1,272 +0,0 @@ - - - - - diff --git a/frontend/src/pages/piggy-banks/Edit.vue b/frontend/src/pages/piggy-banks/Edit.vue deleted file mode 100644 index 40d78c0651..0000000000 --- a/frontend/src/pages/piggy-banks/Edit.vue +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/piggy-banks/Index.vue b/frontend/src/pages/piggy-banks/Index.vue deleted file mode 100644 index 122c37a6d7..0000000000 --- a/frontend/src/pages/piggy-banks/Index.vue +++ /dev/null @@ -1,208 +0,0 @@ - - - - - diff --git a/frontend/src/pages/piggy-banks/Show.vue b/frontend/src/pages/piggy-banks/Show.vue deleted file mode 100644 index 0bab3c0067..0000000000 --- a/frontend/src/pages/piggy-banks/Show.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/preferences/Index.vue b/frontend/src/pages/preferences/Index.vue deleted file mode 100644 index c88965c1f9..0000000000 --- a/frontend/src/pages/preferences/Index.vue +++ /dev/null @@ -1,413 +0,0 @@ - - - - - diff --git a/frontend/src/pages/profile/Data.vue b/frontend/src/pages/profile/Data.vue deleted file mode 100644 index b1728c923d..0000000000 --- a/frontend/src/pages/profile/Data.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - - - diff --git a/frontend/src/pages/profile/Index.vue b/frontend/src/pages/profile/Index.vue deleted file mode 100644 index ad6ff78a6d..0000000000 --- a/frontend/src/pages/profile/Index.vue +++ /dev/null @@ -1,169 +0,0 @@ - - - - - diff --git a/frontend/src/pages/recurring/Create.vue b/frontend/src/pages/recurring/Create.vue deleted file mode 100644 index 27162ba00c..0000000000 --- a/frontend/src/pages/recurring/Create.vue +++ /dev/null @@ -1,590 +0,0 @@ - - - - - diff --git a/frontend/src/pages/recurring/Edit.vue b/frontend/src/pages/recurring/Edit.vue deleted file mode 100644 index e435cb3f9b..0000000000 --- a/frontend/src/pages/recurring/Edit.vue +++ /dev/null @@ -1,606 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/recurring/Index.vue b/frontend/src/pages/recurring/Index.vue deleted file mode 100644 index 443045da9c..0000000000 --- a/frontend/src/pages/recurring/Index.vue +++ /dev/null @@ -1,209 +0,0 @@ - - - - - diff --git a/frontend/src/pages/recurring/Show.vue b/frontend/src/pages/recurring/Show.vue deleted file mode 100644 index 1b549e9473..0000000000 --- a/frontend/src/pages/recurring/Show.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/reports/Default.vue b/frontend/src/pages/reports/Default.vue deleted file mode 100644 index 9201b62109..0000000000 --- a/frontend/src/pages/reports/Default.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/reports/Index.vue b/frontend/src/pages/reports/Index.vue deleted file mode 100644 index 8667ec25ce..0000000000 --- a/frontend/src/pages/reports/Index.vue +++ /dev/null @@ -1,157 +0,0 @@ - - - - - diff --git a/frontend/src/pages/rule-groups/Create.vue b/frontend/src/pages/rule-groups/Create.vue deleted file mode 100644 index 9e7d005968..0000000000 --- a/frontend/src/pages/rule-groups/Create.vue +++ /dev/null @@ -1,189 +0,0 @@ - - - - - diff --git a/frontend/src/pages/rule-groups/Edit.vue b/frontend/src/pages/rule-groups/Edit.vue deleted file mode 100644 index fd2fe528b5..0000000000 --- a/frontend/src/pages/rule-groups/Edit.vue +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/rules/Create.vue b/frontend/src/pages/rules/Create.vue deleted file mode 100644 index 77ff629b52..0000000000 --- a/frontend/src/pages/rules/Create.vue +++ /dev/null @@ -1,593 +0,0 @@ - - - - - diff --git a/frontend/src/pages/rules/Edit.vue b/frontend/src/pages/rules/Edit.vue deleted file mode 100644 index dc620d768f..0000000000 --- a/frontend/src/pages/rules/Edit.vue +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/rules/Index.vue b/frontend/src/pages/rules/Index.vue deleted file mode 100644 index f636e5f44c..0000000000 --- a/frontend/src/pages/rules/Index.vue +++ /dev/null @@ -1,232 +0,0 @@ - - - - - diff --git a/frontend/src/pages/rules/Show.vue b/frontend/src/pages/rules/Show.vue deleted file mode 100644 index 8d8111b184..0000000000 --- a/frontend/src/pages/rules/Show.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/subscriptions/Create.vue b/frontend/src/pages/subscriptions/Create.vue deleted file mode 100644 index fa17e4c1e9..0000000000 --- a/frontend/src/pages/subscriptions/Create.vue +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/subscriptions/Edit.vue b/frontend/src/pages/subscriptions/Edit.vue deleted file mode 100644 index a122e9d35d..0000000000 --- a/frontend/src/pages/subscriptions/Edit.vue +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/subscriptions/Index.vue b/frontend/src/pages/subscriptions/Index.vue deleted file mode 100644 index 1f67f71ec3..0000000000 --- a/frontend/src/pages/subscriptions/Index.vue +++ /dev/null @@ -1,197 +0,0 @@ - - - - - diff --git a/frontend/src/pages/subscriptions/Show.vue b/frontend/src/pages/subscriptions/Show.vue deleted file mode 100644 index ae5df5896c..0000000000 --- a/frontend/src/pages/subscriptions/Show.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/system/Index.vue b/frontend/src/pages/system/Index.vue deleted file mode 100644 index 0ca511f7d9..0000000000 --- a/frontend/src/pages/system/Index.vue +++ /dev/null @@ -1,211 +0,0 @@ - - - - - diff --git a/frontend/src/pages/tags/Index.vue b/frontend/src/pages/tags/Index.vue deleted file mode 100644 index b51bf8e3ae..0000000000 --- a/frontend/src/pages/tags/Index.vue +++ /dev/null @@ -1,137 +0,0 @@ - - - - - diff --git a/frontend/src/pages/tags/Show.vue b/frontend/src/pages/tags/Show.vue deleted file mode 100644 index 5e2b63cea5..0000000000 --- a/frontend/src/pages/tags/Show.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/transactions/Create.vue b/frontend/src/pages/transactions/Create.vue deleted file mode 100644 index cfd7bdb62f..0000000000 --- a/frontend/src/pages/transactions/Create.vue +++ /dev/null @@ -1,436 +0,0 @@ - - - - - diff --git a/frontend/src/pages/transactions/Edit.vue b/frontend/src/pages/transactions/Edit.vue deleted file mode 100644 index 12a8160320..0000000000 --- a/frontend/src/pages/transactions/Edit.vue +++ /dev/null @@ -1,447 +0,0 @@ - - - - - diff --git a/frontend/src/pages/transactions/Index.vue b/frontend/src/pages/transactions/Index.vue deleted file mode 100644 index e318467b7b..0000000000 --- a/frontend/src/pages/transactions/Index.vue +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/transactions/Show.vue b/frontend/src/pages/transactions/Show.vue deleted file mode 100644 index ead8b9a430..0000000000 --- a/frontend/src/pages/transactions/Show.vue +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/webhooks/Create.vue b/frontend/src/pages/webhooks/Create.vue deleted file mode 100644 index 916c0409c7..0000000000 --- a/frontend/src/pages/webhooks/Create.vue +++ /dev/null @@ -1,280 +0,0 @@ - - - - - diff --git a/frontend/src/pages/webhooks/Edit.vue b/frontend/src/pages/webhooks/Edit.vue deleted file mode 100644 index 78e7e29da5..0000000000 --- a/frontend/src/pages/webhooks/Edit.vue +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - - diff --git a/frontend/src/pages/webhooks/Index.vue b/frontend/src/pages/webhooks/Index.vue deleted file mode 100644 index 5ffd05425d..0000000000 --- a/frontend/src/pages/webhooks/Index.vue +++ /dev/null @@ -1,188 +0,0 @@ - - - - - diff --git a/frontend/src/pages/webhooks/Show.vue b/frontend/src/pages/webhooks/Show.vue deleted file mode 100644 index cca5c24c84..0000000000 --- a/frontend/src/pages/webhooks/Show.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - diff --git a/frontend/src/quasar.d.ts b/frontend/src/quasar.d.ts deleted file mode 100644 index 965b8e0bdd..0000000000 --- a/frontend/src/quasar.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * quasar.d.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -// Forces TS to apply `@quasar/app` augmentations of `quasar` package -// Removing this would break `quasar/wrappers` imports as those typings are declared -// into `@quasar/app` -// As a side effect, since `@quasar/app` reference `quasar` to augment it, -// this declaration also apply `quasar` own -// augmentations (eg. adds `$q` into Vue component context) -/// diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js deleted file mode 100644 index ab2e3e075a..0000000000 --- a/frontend/src/router/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {route} from 'quasar/wrappers' -import {createMemoryHistory, createRouter, createWebHashHistory, createWebHistory} from 'vue-router' -import routes from './routes' - -/* - * If not building with SSR mode, you can - * directly export the Router instantiation; - * - * The function below can be async too; either use - * async/await or return a Promise which resolves - * with the Router instance. - */ - -export default route(function (/* { store, ssrContext } */) { - const createHistory = process.env.SERVER - ? createMemoryHistory - : (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory) - - const Router = createRouter({ - scrollBehavior: () => ({left: 0, top: 0}), - routes, - - // Leave this as is and make changes in quasar.conf.js instead! - // quasar.conf.js -> build -> vueRouterMode - // quasar.conf.js -> build -> publicPath - history: createHistory(process.env.MODE === 'ssr' ? void 0 : process.env.VUE_ROUTER_BASE) - }) - - return Router -}) diff --git a/frontend/src/router/routes.js b/frontend/src/router/routes.js deleted file mode 100644 index 931efdf39e..0000000000 --- a/frontend/src/router/routes.js +++ /dev/null @@ -1,989 +0,0 @@ -/* - * routes.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -const routes = [ - { - path: '/', - component: () => import('layouts/MainLayout.vue'), - children: [{ - path: '', - component: () => import('pages/Index.vue'), - name: 'index', - meta: {dateSelector: true, pageTitle: 'firefly.welcome_back',} - }] - }, - // beta - { - path: '/development', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/development/Index.vue'), - name: 'development.index', - meta: { - pageTitle: 'firefly.development' - } - } - ] - }, - // beta - { - path: '/export', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/export/Index.vue'), - name: 'export.index', - meta: { - pageTitle: 'firefly.export' - } - } - ] - }, - // budgets - { - path: '/budgets', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/budgets/Index.vue'), - name: 'budgets.index', - meta: { - pageTitle: 'firefly.budgets', - breadcrumbs: [ - {title: 'budgets', route: 'budgets.index', params: []} - ] - } - } - ] - }, - { - path: '/budgets/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/budgets/Show.vue'), - name: 'budgets.show', - meta: { - pageTitle: 'firefly.budgets', - breadcrumbs: [ - {title: 'placeholder', route: 'budgets.show', params: []} - ] - } - } - ] - }, - { - path: '/budgets/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/budgets/Edit.vue'), - name: 'budgets.edit', - meta: { - pageTitle: 'firefly.budgets', - breadcrumbs: [ - {title: 'placeholder', route: 'budgets.show', params: []} - ] - } - } - ] - }, - { - path: '/budgets/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/budgets/Create.vue'), - name: 'budgets.create', - meta: { - pageTitle: 'firefly.budgets', - breadcrumbs: [ - {title: 'placeholder', route: 'budgets.show', params: []} - ] - } - } - ] - }, - // subscriptions - { - path: '/subscriptions', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/subscriptions/Index.vue'), - name: 'subscriptions.index', - meta: { - pageTitle: 'firefly.subscriptions', - breadcrumbs: [{title: 'placeholder', route: 'subscriptions.index', params: []}] - } - } - ] - }, - { - path: '/subscriptions/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/subscriptions/Show.vue'), - name: 'subscriptions.show', - meta: { - pageTitle: 'firefly.subscriptions', - breadcrumbs: [ - {title: 'placeholder', route: 'subscriptions.index'}, - ] - } - } - ] - }, - { - path: '/subscriptions/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/subscriptions/Edit.vue'), - name: 'subscriptions.edit', - meta: { - pageTitle: 'firefly.subscriptions', - breadcrumbs: [ - {title: 'placeholder', route: 'subscriptions.index'}, - ] - } - } - ] - }, - { - path: '/subscriptions/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/subscriptions/Create.vue'), - name: 'subscriptions.create', - meta: { - dateSelector: false, - pageTitle: 'firefly.subscriptions', - } - } - ] - }, - // piggy banks - { - path: '/piggy-banks', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/piggy-banks/Index.vue'), - name: 'piggy-banks.index', - meta: { - pageTitle: 'firefly.piggyBanks', - breadcrumbs: [{title: 'piggy-banks', route: 'piggy-banks.index', params: []}] - } - - } - ] - }, - { - path: '/piggy-banks/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/piggy-banks/Create.vue'), - name: 'piggy-banks.create', - meta: { - pageTitle: 'firefly.piggy-banks', - breadcrumbs: [ - {title: 'placeholder', route: 'piggy-banks.create', params: []} - ] - } - } - ] - }, - { - path: '/piggy-banks/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/piggy-banks/Show.vue'), - name: 'piggy-banks.show', - meta: { - pageTitle: 'firefly.piggy-banks', - breadcrumbs: [ - {title: 'placeholder', route: 'piggy-banks.index'}, - ] - } - } - ] - }, - { - path: '/piggy-banks/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/piggy-banks/Edit.vue'), - name: 'piggy-banks.edit', - meta: { - pageTitle: 'firefly.piggy-banks', - breadcrumbs: [ - {title: 'placeholder', route: 'piggy-banks.index'}, - ] - } - } - ] - }, - - // transactions (single) - { - path: '/transactions/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/transactions/Show.vue'), - name: 'transactions.show', - meta: { - pageTitle: 'firefly.transactions', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'transactions.show', params: []} - ] - } - } - ] - }, - // transactions (create) - { - path: '/transactions/create/:type', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/transactions/Create.vue'), - name: 'transactions.create', - meta: { - dateSelector: false, - pageTitle: 'firefly.transactions', - } - } - ] - }, - // transactions (index) - { - path: '/transactions/:type', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/transactions/Index.vue'), - name: 'transactions.index', - meta: { - dateSelector: false, - pageTitle: 'firefly.transactions', - breadcrumbs: [ - {title: 'transactions'}, - ] - } - } - ] - }, - { - path: '/transactions/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/transactions/Edit.vue'), - name: 'transactions.edit', - meta: { - pageTitle: 'firefly.transactions', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'transactions.show', params: []} - ] - } - } - ] - }, - - // rules - { - path: '/rules', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rules/Index.vue'), - name: 'rules.index', - meta: { - pageTitle: 'firefly.rules', - } - } - ] - }, - { - path: '/rules/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rules/Show.vue'), - name: 'rules.show', - meta: { - pageTitle: 'firefly.rules', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'transactions.show', params: []} - ] - } - } - ] - }, - { - path: '/rules/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rules/Create.vue'), - name: 'rules.create', - meta: { - pageTitle: 'firefly.rules', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - ] - } - } - ] - }, - { - path: '/rules/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rules/Edit.vue'), - name: 'rules.edit', - meta: { - pageTitle: 'firefly.rules', - breadcrumbs: [ - {title: 'placeholder', route: 'rules.index', params: {type: 'todo'}}, - ] - } - } - ] - }, - { - path: '/rule-groups/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rule-groups/Edit.vue'), - name: 'rule-groups.edit', - meta: { - pageTitle: 'firefly.rules', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - ] - } - } - ] - }, - { - path: '/rule-groups/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/rule-groups/Create.vue'), - name: 'rule-groups.create', - meta: { - pageTitle: 'firefly.rule-groups', - breadcrumbs: [ - {title: 'placeholder', route: 'transactions.index', params: {type: 'todo'}}, - ] - } - } - ] - }, - - // recurring transactions - { - path: '/recurring', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/recurring/Index.vue'), - name: 'recurring.index', - meta: { - pageTitle: 'firefly.recurrences', - } - } - ] - }, - { - path: '/recurring/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/recurring/Create.vue'), - name: 'recurring.create', - meta: { - pageTitle: 'firefly.recurrences', - breadcrumbs: [ - {title: 'placeholder', route: 'recurrences.create', params: []} - ] - } - } - ] - }, - { - path: '/recurring/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/recurring/Show.vue'), - name: 'recurring.show', - meta: { - pageTitle: 'firefly.recurrences', - breadcrumbs: [ - {title: 'placeholder', route: 'recurrences.index'}, - ] - } - } - ] - }, - { - path: '/recurring/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/recurring/Edit.vue'), - name: 'recurring.edit', - meta: { - pageTitle: 'firefly.recurrences', - breadcrumbs: [ - {title: 'placeholder', route: 'recurrences.index'}, - ] - } - } - ] - }, - - // accounts - // account (single) - { - path: '/accounts/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/accounts/Show.vue'), - name: 'accounts.show', - meta: { - pageTitle: 'firefly.accounts', - breadcrumbs: [ - {title: 'placeholder', route: 'accounts.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'accounts.show', params: []} - ] - } - } - ] - }, - { - path: '/accounts/reconcile/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/accounts/Reconcile.vue'), - name: 'accounts.reconcile', - meta: { - pageTitle: 'firefly.accounts', - breadcrumbs: [ - {title: 'placeholder', route: 'accounts.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'accounts.reconcile', params: []} - ] - } - } - ] - }, - { - path: '/accounts/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/accounts/Edit.vue'), - name: 'accounts.edit', - meta: { - pageTitle: 'firefly.accounts', - breadcrumbs: [ - {title: 'placeholder', route: 'accounts.index', params: {type: 'todo'}}, - {title: 'placeholder', route: 'accounts.edit', params: []} - ] - } - } - ] - }, - { - path: '/accounts/:type', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/accounts/Index.vue'), - name: 'accounts.index', - meta: { - pageTitle: 'firefly.accounts', - } - } - ] - }, - { - path: '/accounts/create/:type', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/accounts/Create.vue'), - name: 'accounts.create', - meta: { - pageTitle: 'firefly.accounts', - } - } - ] - }, - - // categories - { - path: '/categories', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/categories/Index.vue'), - name: 'categories.index', - meta: { - pageTitle: 'firefly.categories', - } - } - ] - }, - { - path: '/categories/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/categories/Show.vue'), - name: 'categories.show', - meta: { - pageTitle: 'firefly.categories', - breadcrumbs: [ - {title: 'placeholder', route: 'categories.show', params: []} - ] - } - } - ] - }, - { - path: '/categories/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/categories/Edit.vue'), - name: 'categories.edit', - meta: { - pageTitle: 'firefly.categories', - breadcrumbs: [ - {title: 'placeholder', route: 'categories.show', params: []} - ] - } - } - ] - }, - { - path: '/categories/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/categories/Create.vue'), - name: 'categories.create', - meta: { - pageTitle: 'firefly.categories', - breadcrumbs: [ - {title: 'placeholder', route: 'categories.show', params: []} - ] - } - } - ] - }, - // tags - { - path: '/tags', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/tags/Index.vue'), - name: 'tags.index', - meta: { - pageTitle: 'firefly.tags', - } - } - ] - }, - { - path: '/tags/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/tags/Show.vue'), - name: 'tags.show', - meta: { - pageTitle: 'firefly.tags', - breadcrumbs: [ - {title: 'placeholder', route: 'tags.show', params: []} - ] - } - } - ] - }, - - // groups - { - path: '/groups', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/groups/Index.vue'), - name: 'groups.index', - meta: { - pageTitle: 'firefly.object_groups_page_title' - } - } - ] - }, - { - path: '/groups/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/groups/Show.vue'), - name: 'groups.show', - meta: { - pageTitle: 'firefly.groups', - breadcrumbs: [ - {title: 'placeholder', route: 'groups.show', params: []} - ] - } - } - ] - }, - { - path: '/groups/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/groups/Edit.vue'), - name: 'groups.edit', - meta: { - pageTitle: 'firefly.groups', - breadcrumbs: [ - {title: 'placeholder', route: 'categories.show', params: []} - ] - } - } - ] - }, - // reports - { - path: '/reports', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/reports/Index.vue'), - name: 'reports.index', - meta: { - pageTitle: 'firefly.reports' - } - } - ] - }, - { - path: '/report/default/:accounts/:start/:end', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/reports/Default.vue'), - name: 'reports.default', - meta: { - pageTitle: 'firefly.reports' - } - } - ] - }, - - // webhooks - { - path: '/webhooks', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/webhooks/Index.vue'), - name: 'webhooks.index', - meta: { - pageTitle: 'firefly.webhooks' - } - } - ] - }, - { - path: '/webhooks/show/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/webhooks/Show.vue'), - name: 'webhooks.show', - meta: { - pageTitle: 'firefly.webhooks', - breadcrumbs: [ - {title: 'placeholder', route: 'groups.show', params: []} - ] - } - } - ] - }, - { - path: '/webhooks/edit/:id', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/webhooks/Edit.vue'), - name: 'webhooks.edit', - meta: { - pageTitle: 'firefly.webhooks', - breadcrumbs: [ - {title: 'placeholder', route: 'groups.show', params: []} - ] - } - } - ] - }, - { - path: '/webhooks/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/webhooks/Create.vue'), - name: 'webhooks.create', - meta: { - pageTitle: 'firefly.webhooks', - breadcrumbs: [ - {title: 'placeholder', route: 'webhooks.show', params: []} - ] - } - } - ] - }, - - // currencies - { - path: '/currencies', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/currencies/Index.vue'), - name: 'currencies.index', - meta: { - pageTitle: 'firefly.currencies' - } - } - ] - }, - { - path: '/currencies/show/:code', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/currencies/Show.vue'), - name: 'currencies.show', - meta: { - pageTitle: 'firefly.currencies', - breadcrumbs: [ - {title: 'placeholder', route: 'currencies.show', params: []} - ] - } - } - ] - }, - { - path: '/currencies/edit/:code', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/currencies/Edit.vue'), - name: 'currencies.edit', - meta: { - pageTitle: 'firefly.currencies', - breadcrumbs: [ - {title: 'placeholder', route: 'currencies.show', params: []} - ] - } - } - ] - }, - { - path: '/currencies/create', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/currencies/Create.vue'), - name: 'currencies.create', - meta: { - pageTitle: 'firefly.currencies', - breadcrumbs: [ - {title: 'placeholder', route: 'currencies.create', params: []} - ] - } - } - ] - }, - // financial administration - { - path: '/administrations', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/administration/Index.vue'), - name: 'administration.index', - meta: { - pageTitle: 'firefly.administration_index' - } - } - ] - }, - - // profile - { - path: '/profile', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/profile/Index.vue'), - name: 'profile.index', - meta: { - pageTitle: 'firefly.profile' - } - } - ] - }, - { - path: '/profile/data', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/profile/Data.vue'), - name: 'profile.data', - meta: { - pageTitle: 'firefly.profile_data' - } - } - ] - }, - - // preferences - { - path: '/preferences', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/preferences/Index.vue'), - name: 'preferences.index', - meta: { - pageTitle: 'firefly.preferences' - } - } - ] - }, - - // administration (system settings) - { - path: '/system', - component: () => import('layouts/MainLayout.vue'), - children: [ - { - path: '', - component: () => import('pages/system/Index.vue'), - name: 'system.index', - meta: { - pageTitle: 'firefly.system' - } - } - ] - }, - - // Always leave this as last one, - // but you can also remove it - { - path: '/:catchAll(.*)*', - component: () => import('pages/Error404.vue') - } -] - -export default routes diff --git a/frontend/src/shims-vue.d.ts b/frontend/src/shims-vue.d.ts deleted file mode 100644 index db6b5f9d21..0000000000 --- a/frontend/src/shims-vue.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * shims-vue.d.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -// Mocks all files ending in `.vue` showing them as plain Vue instances -/* eslint-disable */ -declare module '*.vue' { - import type {DefineComponent} from 'vue'; - const component: DefineComponent<{}, {}, any>; - export default component; -} diff --git a/frontend/src/store/fireflyiii/actions.js b/frontend/src/store/fireflyiii/actions.js deleted file mode 100644 index 8bb7353cfa..0000000000 --- a/frontend/src/store/fireflyiii/actions.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * actions.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* -export function someAction (context) { -} -*/ - - -export function refreshCacheKey(context) { - let cacheKey = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8); - context.commit('setCacheKey', cacheKey); -} - -export function resetRange(context) { - let defaultRange = context.getters.getDefaultRange; - context.commit('setRange', defaultRange); -} - diff --git a/frontend/src/store/fireflyiii/getters.js b/frontend/src/store/fireflyiii/getters.js deleted file mode 100644 index b098eb63b7..0000000000 --- a/frontend/src/store/fireflyiii/getters.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * getters.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* -export function someGetter (state) { -} -*/ - -export function getViewRange(state) { - return state.viewRange; -} - -export function getListPageSize(state) { - return state.listPageSize; -} - -export function getCurrencyCode(state) { - return state.currencyCode; -} - -export function getCurrencyId(state) { - return state.currencyId; -} - -export function getRange(state) { - return state.range; -} - -export function getDefaultRange(state) { - return state.defaultRange; -} - -export function getCacheKey(state) { - return state.cacheKey; -} diff --git a/frontend/src/store/fireflyiii/index.js b/frontend/src/store/fireflyiii/index.js deleted file mode 100644 index 809ed856ac..0000000000 --- a/frontend/src/store/fireflyiii/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * index.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import state from './state' -import * as getters from './getters' -import * as mutations from './mutations' -import * as actions from './actions' - -export default { - namespaced: true, - state, - getters, - mutations, - actions -} diff --git a/frontend/src/store/fireflyiii/mutations.js b/frontend/src/store/fireflyiii/mutations.js deleted file mode 100644 index 859f0ab85d..0000000000 --- a/frontend/src/store/fireflyiii/mutations.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * mutations.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* -export function someMutation (state) { -} -*/ - -export const updateViewRange = (state, viewRange) => { - state.viewRange = viewRange; -} - -export const updateListPageSize = (state, value) => { - state.listPageSize = value; -} - -export const setRange = (state, value) => { - state.range = value; -} - -export const setDefaultRange = (state, value) => { - state.defaultRange = value; -} - -export const setCurrencyCode = (state, value) => { - state.currencyCode = value; -} -export const setCurrencyId = (state, value) => { - state.currencyId = value; -} - -export const setCacheKey = (state, value) => { - state.cacheKey = value; -} diff --git a/frontend/src/store/fireflyiii/state.js b/frontend/src/store/fireflyiii/state.js deleted file mode 100644 index 1438189613..0000000000 --- a/frontend/src/store/fireflyiii/state.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * state.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default function () { - return { - drawerState: true, - viewRange: '1M', - listPageSize: 10, - range: { - start: null, - end: null - }, - defaultRange: { - start: null, - end: null - }, - currencyCode: 'AAA', - currencyId: '0', - cacheKey: 'initial' - } -} diff --git a/frontend/src/store/module-example/actions.ts b/frontend/src/store/module-example/actions.ts deleted file mode 100644 index 1f2ba6653a..0000000000 --- a/frontend/src/store/module-example/actions.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * actions.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {ActionTree} from 'vuex'; -import {StateInterface} from '../index'; -import {ExampleStateInterface} from './state'; - -const actions: ActionTree = { - someAction(/* context */) { - // your code - } -}; - -export default actions; diff --git a/frontend/src/store/module-example/getters.ts b/frontend/src/store/module-example/getters.ts deleted file mode 100644 index 9e4ecae55d..0000000000 --- a/frontend/src/store/module-example/getters.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * getters.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {GetterTree} from 'vuex'; -import {StateInterface} from '../index'; -import {ExampleStateInterface} from './state'; - -const getters: GetterTree = { - someAction(/* context */) { - // your code - } -}; - -export default getters; diff --git a/frontend/src/store/module-example/index.ts b/frontend/src/store/module-example/index.ts deleted file mode 100644 index 6407dee003..0000000000 --- a/frontend/src/store/module-example/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * index.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {Module} from 'vuex'; -import {StateInterface} from '../index'; -import state, {ExampleStateInterface} from './state'; -import actions from './actions'; -import getters from './getters'; -import mutations from './mutations'; - -const exampleModule: Module = { - namespaced: true, - actions, - getters, - mutations, - state -}; - -export default exampleModule; diff --git a/frontend/src/store/module-example/mutations.ts b/frontend/src/store/module-example/mutations.ts deleted file mode 100644 index af0e5f70c0..0000000000 --- a/frontend/src/store/module-example/mutations.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * mutations.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {MutationTree} from 'vuex'; -import {ExampleStateInterface} from './state'; - -const mutation: MutationTree = { - someMutation(/* state: ExampleStateInterface */) { - // your code - } -}; - -export default mutation; diff --git a/frontend/src/store/store-flag.d.ts b/frontend/src/store/store-flag.d.ts deleted file mode 100644 index f7f914fd5a..0000000000 --- a/frontend/src/store/store-flag.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * store-flag.d.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* eslint-disable */ -// THIS FEATURE-FLAG FILE IS AUTOGENERATED, -// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING -import "quasar/dist/types/feature-flag"; - -declare module "quasar/dist/types/feature-flag" { - interface QuasarFeatureFlags { - store: true; - } -} diff --git a/frontend/src/stores/fireflyiii.js b/frontend/src/stores/fireflyiii.js deleted file mode 100644 index 842a18e7e2..0000000000 --- a/frontend/src/stores/fireflyiii.js +++ /dev/null @@ -1,221 +0,0 @@ -/* - * fireflyiii.js - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {defineStore} from 'pinia'; -import { - endOfDay, - endOfMonth, - endOfQuarter, - endOfWeek, - startOfDay, - startOfMonth, - startOfQuarter, - startOfWeek, - startOfYear, - subDays -} from "date-fns"; - -export const useFireflyIIIStore = defineStore('firefly-iii', { - state: () => ({ - drawerState: true, - viewRange: '1M', - listPageSize: 10, - locale: 'en-US', - range: { - start: null, end: null - }, - defaultRange: { - start: null, - end: null - }, - currencyCode: 'AAA', - currencyId: '0', - cacheKey: 'initial' - }), - - getters: { - getViewRange(state) { - return state.viewRange; - }, - getLocale(state) { - return state.locale; - }, - - getListPageSize(state) { - return state.listPageSize; - }, - - getCurrencyCode(state) { - return state.currencyCode; - }, getCurrencyId(state) { - return state.currencyId; - }, - - getRange(state) { - return state.range; - }, getDefaultRange(state) { - return state.defaultRange; - }, - - getCacheKey(state) { - return state.cacheKey; - } - }, - - actions: { - // actions - refreshCacheKey() { - let cacheKey = Math.random().toString(36).replace(/[^a-z]+/g, '').slice(0, 8); - this.setCacheKey(cacheKey); - }, - - resetRange() { - let defaultRange = this.defaultRange; - this.setRange(defaultRange); - }, - - setDatesFromViewRange() { - let start; - let end; - let viewRange = this.viewRange; - - let today = new Date; - switch (viewRange) { - case 'last365': - start = startOfDay(subDays(today, 365)); - end = endOfDay(today); - break; - case 'last90': - start = startOfDay(subDays(today, 90)); - end = endOfDay(today); - break; - case 'last30': - start = startOfDay(subDays(today, 30)); - end = endOfDay(today); - break; - case 'last7': - start = startOfDay(subDays(today, 7)); - end = endOfDay(today); - break; - case 'YTD': - start = startOfYear(today); - end = endOfDay(today); - break; - case 'QTD': - start = startOfQuarter(today); - end = endOfDay(today); - break; - case 'MTD': - start = startOfMonth(today); - end = endOfDay(today); - break; - case '1D': - // today: - start = startOfDay(today); - end = endOfDay(today); - break; - case '1W': - // this week: - start = startOfDay(startOfWeek(today, {weekStartsOn: 1})); - end = endOfDay(endOfWeek(today, {weekStartsOn: 1})); - break; - case '1M': - // this month: - start = startOfDay(startOfMonth(today)); - end = endOfDay(endOfMonth(today)); - break; - case '3M': - // this quarter - start = startOfDay(startOfQuarter(today)); - end = endOfDay(endOfQuarter(today)); - break; - case '6M': - // this half-year - if (today.getMonth() <= 5) { - start = new Date(today); - start.setMonth(0); - start.setDate(1); - start = startOfDay(start); - end = new Date(today); - end.setMonth(5); - end.setDate(30); - end = endOfDay(start); - } - if (today.getMonth() > 5) { - start = new Date(today); - start.setMonth(6); - start.setDate(1); - start = startOfDay(start); - end = new Date(today); - end.setMonth(11); - end.setDate(31); - end = endOfDay(start); - } - break; - case '1Y': - // this year - start = new Date(today); - start.setMonth(0); - start.setDate(1); - start = startOfDay(start); - - end = new Date(today); - end.setMonth(11); - end.setDate(31); - end = endOfDay(end); - break; - } - this.setRange({start: start, end: end}); - this.setDefaultRange({start: start, end: end}); - }, - - // mutators - - updateViewRange(viewRange) { - this.viewRange = viewRange; - }, - - updateListPageSize(value) { - this.listPageSize = value; - }, - setLocale(value) { - this.locale = value; - }, - - setRange(value) { - this.range = value; - return value; - }, - - setDefaultRange(value) { - this.defaultRange = value; - }, - - setCurrencyCode(value) { - this.currencyCode = value; - }, setCurrencyId(value) { - this.currencyId = value; - }, - - setCacheKey(value) { - this.cacheKey = value; - } - } -}) diff --git a/frontend/src/stores/store-flag.d.ts b/frontend/src/stores/store-flag.d.ts deleted file mode 100644 index f7f914fd5a..0000000000 --- a/frontend/src/stores/store-flag.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * store-flag.d.ts - * Copyright (c) 2022 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -/* eslint-disable */ -// THIS FEATURE-FLAG FILE IS AUTOGENERATED, -// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING -import "quasar/dist/types/feature-flag"; - -declare module "quasar/dist/types/feature-flag" { - interface QuasarFeatureFlags { - store: true; - } -} diff --git a/frontend/src/support/transactions/calculate-type.js b/frontend/src/support/transactions/calculate-type.js deleted file mode 100644 index 7fbd2f7d15..0000000000 --- a/frontend/src/support/transactions/calculate-type.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - * calculate-type.js - * Copyright (c) 2023 james@firefly-iii.org - * - * This file is part of Firefly III (https://github.com/firefly-iii). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -export default class CalculateType { - calculateType(source, destination) { - const srcEmpty = this.empty(source); - const dstEmpty = this.empty(destination); - // both are null or '' - if (srcEmpty && dstEmpty) { - return 'unknown'; - } - - // source has data, dest has not - if (typeof source === 'object' && null !== source && dstEmpty) { - if (source.type === 'Asset account' || source.type === 'Loan' || source.type === 'Debt' || source.type === 'Mortgage') { - return 'withdrawal'; - } - if (source.type === 'Revenue account') { - return 'deposit'; - } - } - // dst has data, source has not - if (typeof destination === 'object' && null !== destination && srcEmpty) { - if (destination.type === 'Asset account') { - return 'deposit'; - } - } - // both have data: - if (!srcEmpty && !dstEmpty) { - if (source.type === 'Asset account' && destination.type === 'Expense account') { - return 'withdrawal'; - } - if (source.type === destination.type) { - return 'transfer'; - } - } - - console.error('Cannot handle'); - console.log(source); - console.log(destination); - } - - empty(value) { - if (null === value || '' === value) { - return true; - } - if (null !== value && typeof value === 'object') { - return false; - } - return true; - } -} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json deleted file mode 100644 index 4b67725f2c..0000000000 --- a/frontend/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@quasar/app-webpack/tsconfig-preset", - "compilerOptions": { - "baseUrl": "." - } -} diff --git a/frontend/yarn.lock b/frontend/yarn.lock deleted file mode 100644 index d4adaa8d33..0000000000 --- a/frontend/yarn.lock +++ /dev/null @@ -1,6623 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" - integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.0" - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" - integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== - -"@babel/compat-data@^7.20.5": - version "7.20.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" - integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== - -"@babel/core@^7.12.0": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" - integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.12" - "@babel/types" "^7.20.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/eslint-parser@^7.13.14": - version "7.16.5" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.16.5.tgz#48d3485091d6e36915358e4c0d0b2ebe6da90462" - integrity sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA== - dependencies: - eslint-scope "^5.1.1" - eslint-visitor-keys "^2.1.0" - semver "^6.3.0" - -"@babel/generator@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.9.tgz#f4af9fd38fa8de143c29fce3f71852406fc1e2fc" - integrity sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ== - dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" - integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.9.6": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" - integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6", "@babel/helper-create-class-features-plugin@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d" - integrity sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" - integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" - -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" - -"@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-member-expression-to-functions@^7.16.7", "@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" - integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - -"@babel/helper-module-transforms@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" - integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.10" - "@babel/types" "^7.20.7" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-simple-access@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" - integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - -"@babel/helper-wrap-function@^7.16.7", "@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helpers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" - integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/highlight@^7.10.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== - dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.16.7": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" - integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.16.4": - version "7.16.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314" - integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ== - -"@babel/parser@^7.16.7", "@babel/parser@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" - integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== - -"@babel/parser@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" - integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" - integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" - integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.16.7", "@babel/plugin-proposal-class-properties@^7.5.5": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-class-static-block@^7.16.7": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" - integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.6" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-decorators@^7.4.4": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz#67a1653be9c77ce5b6c318aa90c8287b87831619" - integrity sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.9" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.17.0" - charcodes "^0.2.0" - -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.16.7", "@babel/plugin-proposal-export-namespace-from@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" - integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-function-sent@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.16.7.tgz#a258face9ce63ee0c14e396c9b96f171a340de89" - integrity sha512-iJ4DQ1TblymT9ylXSxRG9JH+kYWEHcKdKz47kQqZ9Qij6HOOjTbP9ksG1RFtM+CMnmLJaaG/P+YCvgqUt+5hTw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.7" - "@babel/plugin-syntax-function-sent" "^7.16.7" - -"@babel/plugin-proposal-json-strings@^7.16.7", "@babel/plugin-proposal-json-strings@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" - integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" - integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" - integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.16.7", "@babel/plugin-proposal-numeric-separator@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" - integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== - dependencies: - "@babel/compat-data" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" - integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.16.11": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" - integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" - integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-throw-expressions@^7.2.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.16.7.tgz#d3512286f634a06f7271abecce752e1655b9ab03" - integrity sha512-BbjL/uDt7c+OKA7k2YbZIPtOb6qmrzXPybjqrGreP8wMMzTPKjjiK+moqgpElsIXv1XHmlk9PQWdOHD5sL93KA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-throw-expressions" "^7.16.7" - -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-decorators@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz#a2be3b2c9fe7d78bd4994e790896bc411e2f166d" - integrity sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-function-sent@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.16.7.tgz#46ff4ac849881dbeaa5c5ab60cd1041ffc606095" - integrity sha512-W2fOJmlqHJ0kalyP8kAA0Jx5Hn87OX5qZwjtII3uqi+VpIdLTJLAHH8d4qIt5eqflLALFf6ehVT6+mnFJ2d7AA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-import-meta@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-throw-expressions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.16.7.tgz#5fd64f4d58d653499cc1077bb58594e18da5a514" - integrity sha512-6Kw78ssLHIADvVsqLOLLxuxH4SG55A2tqn0Og2tQQq6X/06HBWLClg6quL+oTfyeVEsPnFYTSECkajseotTnbA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-arrow-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" - integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-block-scoping@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" - integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-classes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" - integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" - integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-destructuring@^7.16.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" - integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-duplicate-keys@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" - integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-for-of@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" - integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== - dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" - integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-modules-amd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" - integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.16.8": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz#274be1a2087beec0254d4abd4d86e52442e1e5b6" - integrity sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw== - dependencies: - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" - integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== - dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" - integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" - integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - -"@babel/plugin-transform-new-target@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" - integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - -"@babel/plugin-transform-parameters@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" - integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-regenerator@^7.16.7": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz#0a33c3a61cf47f45ed3232903683a0afd2d3460c" - integrity sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ== - dependencies: - regenerator-transform "^0.15.0" - -"@babel/plugin-transform-reserved-words@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" - integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-runtime@^7.9.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70" - integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - semver "^6.3.0" - -"@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" - integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-template-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" - integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-typeof-symbol@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" - integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/preset-env@^7.9.0": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" - integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== - dependencies: - "@babel/compat-data" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.16.7" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.16.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.16.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.16.8" - "@babel/plugin-transform-modules-systemjs" "^7.16.7" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.16.7" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.8" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.20.2" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.8.4", "@babel/runtime@^7.9.0": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" - integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/template@^7.18.10", "@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.9.tgz#1f9b207435d9ae4a8ed6998b2b82300d83c37a0d" - integrity sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.9" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.9" - "@babel/types" "^7.17.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.7": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5" - integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.4.4": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" - integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@intlify/core-base@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.1.9.tgz#e4e8c951010728e4af3a0d13d74cf3f9e7add7f6" - integrity sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw== - dependencies: - "@intlify/devtools-if" "9.1.9" - "@intlify/message-compiler" "9.1.9" - "@intlify/message-resolver" "9.1.9" - "@intlify/runtime" "9.1.9" - "@intlify/shared" "9.1.9" - "@intlify/vue-devtools" "9.1.9" - -"@intlify/devtools-if@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.1.9.tgz#a30e1dd1256ff2c5c98d8d75d075384fba898e5d" - integrity sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ== - dependencies: - "@intlify/shared" "9.1.9" - -"@intlify/message-compiler@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.1.9.tgz#1193cbd224a71c2fb981455b8534a3c766d2948d" - integrity sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ== - dependencies: - "@intlify/message-resolver" "9.1.9" - "@intlify/shared" "9.1.9" - source-map "0.6.1" - -"@intlify/message-resolver@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/message-resolver/-/message-resolver-9.1.9.tgz#3155ccd2f5e6d0dc16cad8b7f1d8e97fcda05bfc" - integrity sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA== - -"@intlify/runtime@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/runtime/-/runtime-9.1.9.tgz#2c12ce29518a075629efed0a8ed293ee740cb285" - integrity sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg== - dependencies: - "@intlify/message-compiler" "9.1.9" - "@intlify/message-resolver" "9.1.9" - "@intlify/shared" "9.1.9" - -"@intlify/shared@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.1.9.tgz#0baaf96128b85560666bec784ffb01f6623cc17a" - integrity sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw== - -"@intlify/vue-devtools@9.1.9": - version "9.1.9" - resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz#2be8f4dbe7f7ed4115676eb32348141d411e426b" - integrity sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og== - dependencies: - "@intlify/message-resolver" "9.1.9" - "@intlify/runtime" "9.1.9" - "@intlify/shared" "9.1.9" - -"@jest/schemas@^29.0.0": - version "29.0.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" - integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== - dependencies: - "@sinclair/typebox" "^0.24.1" - -"@jest/types@^29.3.1": - version "29.3.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.3.1.tgz#7c5a80777cb13e703aeec6788d044150341147e3" - integrity sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA== - dependencies: - "@jest/schemas" "^29.0.0" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.14": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" - integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz#0300943770e04231041a51bd39f0439b5c7ab4f0" - integrity sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" - integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== - -"@popperjs/core@^2.11.2": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" - integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== - -"@quasar/app-webpack@^3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@quasar/app-webpack/-/app-webpack-3.9.2.tgz#cbf28e2ef84a94a0507f2f17218b29a2ebf6dd88" - integrity sha512-F/LyEXExcnw1niVjuLoSaRLBS2rlmsQJxuOWed6qL9Xnh+KzW1S/V1FxtDtJOQCjbI2S9YvOP6wcmuB6xEiatg== - dependencies: - "@quasar/babel-preset-app" "2.0.2" - "@quasar/render-ssr-error" "^1.0.1" - "@quasar/ssr-helpers" "2.2.2" - "@types/chrome" "^0.0.208" - "@types/compression" "^1.7.2" - "@types/cordova" "0.0.34" - "@types/express" "4.17.15" - "@types/webpack-bundle-analyzer" "4.6.0" - archiver "5.3.1" - autoprefixer "10.4.13" - browserslist "^4.12.0" - chalk "4.1.2" - chokidar "3.5.3" - ci-info "3.7.1" - compression-webpack-plugin "10.0.0" - copy-webpack-plugin "11.0.0" - cross-spawn "7.0.3" - css-loader "6.7.3" - css-minimizer-webpack-plugin "4.2.2" - cssnano "5.1.14" - dot-prop "6.0.1" - elementtree "0.1.7" - error-stack-parser "2.1.4" - express "4.18.2" - fast-glob "3.2.12" - file-loader "6.2.0" - fork-ts-checker-webpack-plugin "6.5.0" - fs-extra "11.1.0" - hash-sum "2.0.0" - html-minifier "4.0.0" - html-webpack-plugin "5.5.0" - inquirer "8.2.2" - isbinaryfile "5.0.0" - launch-editor-middleware "2.6.0" - lodash "^4.17.21" - log-update "4.0.0" - mini-css-extract-plugin "2.7.2" - minimist "1.2.7" - node-loader "2.0.0" - null-loader "4.0.1" - open "8.4.0" - postcss "^8.4.4" - postcss-loader "7.0.2" - postcss-rtlcss "4.0.1" - register-service-worker "1.7.2" - sass "1.32.12" - sass-loader "13.2.0" - semver "7.3.8" - table "6.8.1" - terser-webpack-plugin "5.3.6" - ts-loader "9.4.2" - typescript "4.9.4" - url-loader "4.1.1" - vue-loader "17.0.1" - vue-style-loader "4.1.3" - webpack "^5.58.1" - webpack-bundle-analyzer "4.7.0" - webpack-chain "6.5.1" - webpack-dev-server "4.11.1" - webpack-merge "5.8.0" - webpack-node-externals "3.0.0" - -"@quasar/babel-preset-app@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@quasar/babel-preset-app/-/babel-preset-app-2.0.2.tgz#0ba6c7600c0f0d4b65305361eaf9da27420bb5cc" - integrity sha512-2mM4d3F53vSLwgqEoRqN2imgiEjQTO1rPrfwmo3uBvM+rJRFc4TUOqZrbIoGhKSIb4V+PTvWeFDl4pgej8eHoA== - dependencies: - "@babel/core" "^7.12.0" - "@babel/helper-compilation-targets" "^7.9.6" - "@babel/helper-module-imports" "^7.8.3" - "@babel/plugin-proposal-class-properties" "^7.5.5" - "@babel/plugin-proposal-decorators" "^7.4.4" - "@babel/plugin-proposal-export-namespace-from" "^7.2.0" - "@babel/plugin-proposal-function-sent" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-numeric-separator" "^7.2.0" - "@babel/plugin-proposal-throw-expressions" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-import-meta" "^7.2.0" - "@babel/plugin-transform-runtime" "^7.9.0" - "@babel/preset-env" "^7.9.0" - "@babel/runtime" "^7.9.0" - babel-loader "^9.1.2" - babel-plugin-dynamic-import-node "^2.3.0" - babel-plugin-module-resolver "^5.0.0" - core-js "^3.6.5" - core-js-compat "^3.6.5" - -"@quasar/extras@^1.16.5": - version "1.16.5" - resolved "https://registry.yarnpkg.com/@quasar/extras/-/extras-1.16.5.tgz#77fd7b8e77e45a2798067a1e4aeafb39a95daf51" - integrity sha512-3VAJS9NECr1OSHX674+3YvEMIlHclr81aZrEkoBtVqr+sX4In22Up44toua+qNFsxnoATPqzpwKOJxA3iAF71Q== - -"@quasar/render-ssr-error@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@quasar/render-ssr-error/-/render-ssr-error-1.0.1.tgz#5400b51c1bc55f4ee7bfb62ecb6f7c7d0f88ce7f" - integrity sha512-4Shxl079hew/yZnIsDtWpRD8enOmqMjMu/s2bkGN0QBvlsRkpWv9pwOz5geJXZxBa17q1S4txvByBxkhPfhWaQ== - dependencies: - stack-trace "^1.0.0-pre2" - -"@quasar/ssr-helpers@2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@quasar/ssr-helpers/-/ssr-helpers-2.2.2.tgz#3e707090063d6e0b10596c9f59cdbdc0a2c96652" - integrity sha512-lz30NGk5Qrl8YCOg3kg+1cqI+muFNs6cAokJcNjx4sR9MKsB25hgL8kUkWXhknPqfWHWnOujB1LR6AefdVaTUQ== - dependencies: - serialize-javascript "^6.0.0" - -"@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== - dependencies: - "@types/node" "*" - -"@types/chrome@^0.0.208": - version "0.0.208" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.208.tgz#c52992e46723c783d3fd84a8b90dd8b3e87af67f" - integrity sha512-VDU/JnXkF5qaI7WBz14Azpa2VseZTgML0ia/g/B1sr9OfdOnHiH/zZ7P7qCDqxSlkqJh76/bPc8jLFcx8rHJmw== - dependencies: - "@types/filesystem" "*" - "@types/har-format" "*" - -"@types/compression@^1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@types/compression/-/compression-1.7.2.tgz#7cc1cdb01b4730eea284615a68fc70a2cdfd5e71" - integrity sha512-lwEL4M/uAGWngWFLSG87ZDr2kLrbuR8p7X+QZB1OQlT+qkHsCPDVFnHPyXf4Vyl4yDDorNY+mAhosxkCvppatg== - dependencies: - "@types/express" "*" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/cordova@0.0.34": - version "0.0.34" - resolved "https://registry.yarnpkg.com/@types/cordova/-/cordova-0.0.34.tgz#ea7addf74ecec3d7629827a0c39e2c9addc73d04" - integrity sha1-6nrd907Ow9dimCegw54smt3HPQQ= - -"@types/eslint-scope@^3.7.3": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" - integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.4.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" - integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.28" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" - integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express-serve-static-core@^4.17.31": - version "4.17.32" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82" - integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/express@4.17.15": - version "4.17.15" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff" - integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.31" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/filesystem@*": - version "0.0.32" - resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.32.tgz#307df7cc084a2293c3c1a31151b178063e0a8edf" - integrity sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ== - dependencies: - "@types/filewriter" "*" - -"@types/filewriter@*": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.29.tgz#a48795ecadf957f6c0d10e0c34af86c098fa5bee" - integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ== - -"@types/har-format@*": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.8.tgz#e6908b76d4c88be3db642846bb8b455f0bfb1c4e" - integrity sha512-OP6L9VuZNdskgNN3zFQQ54ceYD8OLq5IbqO4VK91ORLfOm7WdT/CiT/pHEBSQEqCInJ2y3O6iCm/zGtPElpgJQ== - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-proxy@^1.17.8": - version "1.17.8" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.8.tgz#968c66903e7e42b483608030ee85800f22d03f55" - integrity sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/json-schema@^7.0.7": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== - -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - -"@types/node@*": - version "17.0.23" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da" - integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw== - -"@types/node@^12.20.21": - version "12.20.39" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.39.tgz#ef3cb119eaba80e9f1012c78b9384a7489a18bf6" - integrity sha512-U7PMwkDmc3bnL0e4U8oA0POpi1vfsYDc+DEUS2+rPxm9NlLcW1dBa5JcRhO633PoPUcCSWMNXrMsqhmAVEo+IQ== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/retry@^0.12.0": - version "0.12.1" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" - integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== - -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== - dependencies: - "@types/node" "*" - -"@types/webpack-bundle-analyzer@4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.0.tgz#8863d62d2432126c2b3a9239cafa469215981c24" - integrity sha512-XeQmQCCXdZdap+A/60UKmxW5Mz31Vp9uieGlHB3T4z/o2OLVLtTI3bvTuS6A2OWd/rbAAQiGGWIEFQACu16szA== - dependencies: - "@types/node" "*" - tapable "^2.2.0" - webpack "^5" - -"@types/ws@^8.5.1": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^17.0.8": - version "17.0.20" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.20.tgz#107f0fcc13bd4a524e352b41c49fe88aab5c54d5" - integrity sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^4.16.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== - dependencies: - "@typescript-eslint/experimental-utils" "4.33.0" - "@typescript-eslint/scope-manager" "4.33.0" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/parser@^4.16.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== - dependencies: - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - debug "^4.3.1" - -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== - -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== - dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" - -"@vue/compiler-core@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.26.tgz#9ab92ae624da51f7b6064f4679c2d4564f437cc8" - integrity sha512-N5XNBobZbaASdzY9Lga2D9Lul5vdCIOXvUMd6ThcN8zgqQhPKfCV+wfAJNNJKQkSHudnYRO2gEB+lp0iN3g2Tw== - dependencies: - "@babel/parser" "^7.16.4" - "@vue/shared" "3.2.26" - estree-walker "^2.0.2" - source-map "^0.6.1" - -"@vue/compiler-dom@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.26.tgz#c7a7b55d50a7b7981dd44fc28211df1450482667" - integrity sha512-smBfaOW6mQDxcT3p9TKT6mE22vjxjJL50GFVJiI0chXYGU/xzC05QRGrW3HHVuJrmLTLx5zBhsZ2dIATERbarg== - dependencies: - "@vue/compiler-core" "3.2.26" - "@vue/shared" "3.2.26" - -"@vue/compiler-sfc@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.26.tgz#3ce76677e4aa58311655a3bea9eb1cb804d2273f" - integrity sha512-ePpnfktV90UcLdsDQUh2JdiTuhV0Skv2iYXxfNMOK/F3Q+2BO0AulcVcfoksOpTJGmhhfosWfMyEaEf0UaWpIw== - dependencies: - "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.26" - "@vue/compiler-dom" "3.2.26" - "@vue/compiler-ssr" "3.2.26" - "@vue/reactivity-transform" "3.2.26" - "@vue/shared" "3.2.26" - estree-walker "^2.0.2" - magic-string "^0.25.7" - postcss "^8.1.10" - source-map "^0.6.1" - -"@vue/compiler-ssr@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.26.tgz#fd049523341fbf4ab5e88e25eef566d862894ba7" - integrity sha512-2mywLX0ODc4Zn8qBoA2PDCsLEZfpUGZcyoFRLSOjyGGK6wDy2/5kyDOWtf0S0UvtoyVq95OTSGIALjZ4k2q/ag== - dependencies: - "@vue/compiler-dom" "3.2.26" - "@vue/shared" "3.2.26" - -"@vue/devtools-api@^6.0.0-beta.18", "@vue/devtools-api@^6.0.0-beta.7": - version "6.0.0-beta.21.1" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.0.0-beta.21.1.tgz#f1410f53c42aa67fa3b01ca7bdba891f69d7bc97" - integrity sha512-FqC4s3pm35qGVeXRGOjTsRzlkJjrBLriDS9YXbflHLsfA9FrcKzIyWnLXoNm+/7930E8rRakXuAc2QkC50swAw== - -"@vue/devtools-api@^6.1.4": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092" - integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ== - -"@vue/reactivity-transform@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.26.tgz#6d8f20a4aa2d19728f25de99962addbe7c4d03e9" - integrity sha512-XKMyuCmzNA7nvFlYhdKwD78rcnmPb7q46uoR00zkX6yZrUmcCQ5OikiwUEVbvNhL5hBJuvbSO95jB5zkUon+eQ== - dependencies: - "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.26" - "@vue/shared" "3.2.26" - estree-walker "^2.0.2" - magic-string "^0.25.7" - -"@vue/reactivity@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.26.tgz#d529191e581521c3c12e29ef986d4c8a933a0f83" - integrity sha512-h38bxCZLW6oFJVDlCcAiUKFnXI8xP8d+eO0pcDxx+7dQfSPje2AO6M9S9QO6MrxQB7fGP0DH0dYQ8ksf6hrXKQ== - dependencies: - "@vue/shared" "3.2.26" - -"@vue/runtime-core@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.26.tgz#5c59cc440ed7a39b6dbd4c02e2d21c8d1988f0de" - integrity sha512-BcYi7qZ9Nn+CJDJrHQ6Zsmxei2hDW0L6AB4vPvUQGBm2fZyC0GXd/4nVbyA2ubmuhctD5RbYY8L+5GUJszv9mQ== - dependencies: - "@vue/reactivity" "3.2.26" - "@vue/shared" "3.2.26" - -"@vue/runtime-dom@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.26.tgz#84d3ae2584488747717c2e072d5d9112c0d2e6c2" - integrity sha512-dY56UIiZI+gjc4e8JQBwAifljyexfVCkIAu/WX8snh8vSOt/gMSEGwPRcl2UpYpBYeyExV8WCbgvwWRNt9cHhQ== - dependencies: - "@vue/runtime-core" "3.2.26" - "@vue/shared" "3.2.26" - csstype "^2.6.8" - -"@vue/server-renderer@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.26.tgz#f16a4b9fbcc917417b4cea70c99afce2701341cf" - integrity sha512-Jp5SggDUvvUYSBIvYEhy76t4nr1vapY/FIFloWmQzn7UxqaHrrBpbxrqPcTrSgGrcaglj0VBp22BKJNre4aA1w== - dependencies: - "@vue/compiler-ssr" "3.2.26" - "@vue/shared" "3.2.26" - -"@vue/shared@3.2.26": - version "3.2.26" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.26.tgz#7acd1621783571b9a82eca1f041b4a0a983481d9" - integrity sha512-vPV6Cq+NIWbH5pZu+V+2QHE9y1qfuTq49uNWw4f7FDEeZaDU2H2cx5jcUZOAKW7qTrUS4k6qZPbMy1x4N96nbA== - -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== - -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== - -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== - -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== - -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - -acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.0.4, acorn@^8.5.0: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - -acorn@^8.7.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.8.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb" - integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -apexcharts@^3.32.1: - version "3.32.1" - resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.32.1.tgz#6aa8db07f0b9432c9a9564530bda775617ec6eb3" - integrity sha512-8rcB7u616lXXANG49h9vwyX0gZh0DWi4D23VnE8IU5grjaxW69IiXYldn+jB9Av407w8RVZjUv1xUpk0JlxxMg== - dependencies: - svg.draggable.js "^2.2.2" - svg.easing.js "^2.0.0" - svg.filter.js "^2.0.2" - svg.pathmorphing.js "^0.1.3" - svg.resize.js "^1.4.3" - svg.select.js "^3.0.1" - -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" - integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== - dependencies: - archiver-utils "^2.1.0" - async "^3.2.3" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" - readdir-glob "^1.0.0" - tar-stream "^2.2.0" - zip-stream "^4.1.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" - integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@10.4.13: - version "10.4.13" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" - integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== - dependencies: - browserslist "^4.21.4" - caniuse-lite "^1.0.30001426" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -axios-cache-adapter@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/axios-cache-adapter/-/axios-cache-adapter-2.7.3.tgz#0d1eefa0f25b88f42a95c7528d7345bde688181d" - integrity sha512-A+ZKJ9lhpjthOEp4Z3QR/a9xC4du1ALaAsejgRGrH9ef6kSDxdFrhRpulqsh9khsEnwXxGfgpUuDp1YXMNMEiQ== - dependencies: - cache-control-esm "1.0.0" - md5 "^2.2.1" - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -babel-loader@^9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.2.tgz#a16a080de52d08854ee14570469905a5fc00d39c" - integrity sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA== - dependencies: - find-cache-dir "^3.3.2" - schema-utils "^4.0.0" - -babel-plugin-dynamic-import-node@^2.3.0, babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-module-resolver@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz#2b7fc176bd55da25f516abf96015617b4f70fc73" - integrity sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q== - dependencies: - find-babel-config "^2.0.0" - glob "^8.0.3" - pkg-up "^3.1.0" - reselect "^4.1.7" - resolve "^1.22.1" - -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" - -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -body-parser@1.19.2: - version "1.19.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" - integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.9.7" - raw-body "2.4.3" - type-is "~1.6.18" - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.11.tgz#5418e5c1ac91c89a406f853a942e7892829c0d89" - integrity sha512-drMprzr2rDTCtgEE3VgdA9uUFaUHF+jXduwYSThHJnKMYM+FhI9Z3ph+TX3xy0LtgYHae6CHYPJ/2UnK8nQHcA== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.4" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4.19.1: - version "4.20.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" - integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== - dependencies: - caniuse-lite "^1.0.30001317" - electron-to-chromium "^1.4.84" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - -browserslist@^4.21.3, browserslist@^4.21.4: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cache-control-esm@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cache-control-esm/-/cache-control-esm-1.0.0.tgz#417647ecf1837a5e74155f55d5a4ae32a84e2581" - integrity sha512-Fa3UV4+eIk4EOih8FTV6EEsVKO0W5XWtNs6FC3InTfVz+EjurjPfDXY5wZDo/lxjDxg5RjNcurLyxEJBcEUx9g== - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: - version "1.0.30001446" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001446.tgz#6d4ba828ab19f49f9bcd14a8430d30feebf1e0c5" - integrity sha512-fEoga4PrImGcwUUGEol/PoFCSBnSkA9drgdkxXkJLsUBOnJ8rs3zDv6ApqYXGQFOyMPsjh79naWhF4DAxbF8rw== - -chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -charcodes@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" - integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= - -chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@3.7.1, ci-info@^3.2.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.7.1.tgz#708a6cdae38915d597afdf3b145f2f8e1ff55f3f" - integrity sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w== - -clean-css@^4.2.1: - version "4.2.4" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" - integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== - dependencies: - source-map "~0.6.0" - -clean-css@^5.2.2: - version "5.3.0" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.0.tgz#ad3d8238d5f3549e83d5f87205189494bc7cbb59" - integrity sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ== - dependencies: - source-map "~0.6.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colord@^2.9.1: - version "2.9.2" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" - integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== - -colorette@^2.0.10: - version "2.0.16" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" - integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== - -commander@^2.19.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compress-commons@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" - integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^4.0.2" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression-webpack-plugin@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-10.0.0.tgz#3496af1b0dc792e13efc474498838dbff915c823" - integrity sha512-wLXLIBwpul/ALcm7Aj+69X0pYT3BYt6DdPn3qrgBIh9YejV9Bju9ShhlAsjujLyWMo6SAweFIWaUoFmXZNuNrg== - dependencies: - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -copy-webpack-plugin@11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - -core-js-compat@^3.20.2, core-js-compat@^3.21.0, core-js-compat@^3.6.5: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" - integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== - dependencies: - browserslist "^4.19.1" - semver "7.0.0" - -core-js@^3.6.5: - version "3.20.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.1.tgz#eb1598047b7813572f1dc24b7c6a95528c99eef3" - integrity sha512-btdpStYFQScnNVQ5slVcr858KP0YWYjV16eGJQw8Gg7CWtu/2qNvIM3qVRIR3n1pK2R9NNOrTevbvAYxajwEjg== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -crc32-stream@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" - integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== - dependencies: - crc-32 "^1.2.0" - readable-stream "^3.4.0" - -cross-spawn@7.0.3, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= - -css-declaration-sorter@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" - integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w== - -css-loader@6.7.3: - version "6.7.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" - integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.19" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.3.8" - -css-minimizer-webpack-plugin@4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz#79f6199eb5adf1ff7ba57f105e3752d15211eb35" - integrity sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA== - dependencies: - cssnano "^5.1.8" - jest-worker "^29.1.2" - postcss "^8.4.17" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^5.2.13: - version "5.2.13" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz#e7353b0c57975d1bdd97ac96e68e5c1b8c68e990" - integrity sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ== - dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.0" - postcss-convert-values "^5.1.3" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.7" - postcss-merge-rules "^5.1.3" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.4" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.1" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.1" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== - -cssnano@5.1.14, cssnano@^5.1.8: - version "5.1.14" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.14.tgz#07b0af6da73641276fe5a6d45757702ebae2eb05" - integrity sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw== - dependencies: - cssnano-preset-default "^5.2.13" - lilconfig "^2.0.3" - yaml "^1.10.2" - -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -csstype@^2.6.8: - version "2.6.19" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa" - integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ== - -date-fns@^2.28.0: - version "2.28.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" - integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.0.1, debug@^4.1.1, debug@^4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -debug@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== - -electron-to-chromium@^1.4.84: - version "1.4.107" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz#564257014ab14033b4403a309c813123c58a3fb9" - integrity sha512-Huen6taaVrUrSy8o7mGStByba8PfOWWluHNxSHGBrCgEdFVLtvdQDBr9LBCF9Uci8SYxh28QNNMO0oC17wbGAg== - -elementtree@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/elementtree/-/elementtree-0.1.7.tgz#9ac91be6e52fb6e6244c4e54a4ac3ed8ae8e29c0" - integrity sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA= - dependencies: - sax "1.1.4" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.0.0: - version "5.9.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz#0224dcd6a43389ebfb2d55efee517e5466772dd9" - integrity sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enhanced-resolve@^5.10.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^8.1.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== - -eslint-plugin-vue@^7.0.0: - version "7.20.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz#98c21885a6bfdf0713c3a92957a5afeaaeed9253" - integrity sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw== - dependencies: - eslint-utils "^2.1.0" - natural-compare "^1.4.0" - semver "^6.3.0" - vue-eslint-parser "^7.10.0" - -eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@^7.14.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -express@4.18.2: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -express@^4.17.3: - version "4.17.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" - integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.19.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.4.2" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.9.7" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.17.2" - serve-static "1.14.2" - setprototypeof "1.2.0" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@3.2.12, fast-glob@^3.2.11: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-loader@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-babel-config@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.0.0.tgz#a8216f825415a839d0f23f4d18338a1cc966f701" - integrity sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw== - dependencies: - json5 "^2.1.1" - path-exists "^4.0.0" - -find-cache-dir@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" - integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== - -follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.14.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" - integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== - -fork-ts-checker-webpack-plugin@6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz#0282b335fa495a97e167f69018f566ea7d2a2b5e" - integrity sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw== - dependencies: - "@babel/code-frame" "^7.8.3" - "@types/json-schema" "^7.0.5" - chalk "^4.1.0" - chokidar "^3.4.2" - cosmiconfig "^6.0.0" - deepmerge "^4.2.2" - fs-extra "^9.0.0" - glob "^7.1.6" - memfs "^3.1.2" - minimatch "^3.0.4" - schema-utils "2.7.0" - semver "^7.3.2" - tapable "^1.0.0" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" - integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0, globals@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" - integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -globby@^13.1.1: - version "13.1.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" - integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-sum@2.0.0, hash-sum@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" - integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-minifier@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-4.0.0.tgz#cca9aad8bce1175e02e17a8c33e46d8988889f56" - integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig== - dependencies: - camel-case "^3.0.0" - clean-css "^4.2.1" - commander "^2.19.0" - he "^1.2.0" - param-case "^2.1.1" - relateurl "^0.2.7" - uglify-js "^3.5.1" - -html-webpack-plugin@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" - integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" - integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== - -http-proxy-middleware@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz#03af0f4676d172ae775cb5c33f592f40e1a4e07a" - integrity sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4, ignore@^5.1.8: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inquirer@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.2.tgz#1310517a87a0814d25336c78a20b44c3d9b7629d" - integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" - -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isbinaryfile@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234" - integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -javascript-stringify@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" - integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== - -jest-util@^29.3.1: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.3.1.tgz#1dda51e378bbcb7e3bc9d8ab651445591ed373e1" - integrity sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ== - dependencies: - "@jest/types" "^29.3.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.1.2: - version "29.3.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.3.1.tgz#e9462161017a9bb176380d721cab022661da3d6b" - integrity sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw== - dependencies: - "@types/node" "*" - jest-util "^29.3.1" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.1, json5@^2.1.2, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klona@^2.0.4, klona@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" - integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== - -launch-editor-middleware@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.6.0.tgz#2ba4fe4b695d7fe3d44dee86b6d46d57b8332dfd" - integrity sha512-K2yxgljj5TdCeRN1lBtO3/J26+AIDDDw+04y6VAiZbWcTdBwsYN6RrZBnW5DN/QiSIdKNjKdATLUUluWWFYTIA== - dependencies: - launch-editor "^2.6.0" - -launch-editor@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" - integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.7.3" - -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^1.0.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -md5@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memfs@^3.1.2, memfs@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305" - integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw== - dependencies: - fs-monkey "1.0.3" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^4.0.0, micromatch@^4.0.2: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mini-css-extract-plugin@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz#e049d3ea7d3e4e773aad585c6cb329ce0c7b72d7" - integrity sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw== - dependencies: - schema-utils "^4.0.0" - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimist@1.2.7, minimist@^1.2.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -mrmime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b" - integrity sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.4: - version "7.2.4" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.4.tgz#cf0b115c31e922aeb20b64e6556cbeb34cf0dd19" - integrity sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-forge@^1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-loader@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-2.0.0.tgz#9109a6d828703fd3e0aa03c1baec12a798071562" - integrity sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q== - dependencies: - loader-utils "^2.0.0" - -node-releases@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.3.tgz#225ee7488e4a5e636da8da52854844f9d716ca96" - integrity sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw== - -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nth-check@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" - integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== - dependencies: - boolbase "^1.0.0" - -null-loader@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-4.0.1.tgz#8e63bd3a2dd3c64236a4679428632edd0a6dbc6a" - integrity sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@8.4.0, open@^8.0.9: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-retry@^4.5.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c" - integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA== - dependencies: - "@types/retry" "^0.12.0" - retry "^0.13.1" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -param-case@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pinia@^2.0.14: - version "2.0.16" - resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.0.16.tgz#0105db595f5f792e17c04692e36807d8ea62f5cc" - integrity sha512-9/LMVO+/epny1NBfC77vnps4g3JRezxhhoF1xLUk8mZkUIxVnwfEAIRiAX8mYBTD/KCwZqnDMqXc8w3eU0FQGg== - dependencies: - "@vue/devtools-api" "^6.1.4" - vue-demi "*" - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== - dependencies: - postcss-selector-parser "^6.0.9" - postcss-value-parser "^4.2.0" - -postcss-colormin@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" - integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== - dependencies: - browserslist "^4.16.6" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" - integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== - -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== - -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== - -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== - -postcss-loader@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.2.tgz#b53ff44a26fba3688eee92a048c7f2d4802e23bb" - integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.8" - -postcss-merge-longhand@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" - integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^5.1.1" - -postcss-merge-rules@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz#8f97679e67cc8d08677a6519afca41edf2220894" - integrity sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" - -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== - dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" - integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== - dependencies: - browserslist "^4.21.4" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== - -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" - integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== - dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== - dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-reduce-initial@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz#c18b7dfb88aee24b1f8e4936541c29adbd35224e" - integrity sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-rtlcss@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-rtlcss/-/postcss-rtlcss-4.0.1.tgz#aec5261a8fc6878f33bceb4c9de3e15945e6f4ab" - integrity sha512-x92gkPeo4Mt9K6oP02EghAkQkq3/dr19SWGQZdEOWfmFnjoUvET5+aoTr85eM+JH+hupSSXZhc+kqVrvAJrkvg== - dependencies: - rtlcss "4.0.0" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^2.7.0" - -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.1.10, postcss@^8.4.17, postcss@^8.4.19, postcss@^8.4.4, postcss@^8.4.6: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@6.9.7: - version "6.9.7" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== - -quasar@^2.12.3: - version "2.12.3" - resolved "https://registry.yarnpkg.com/quasar/-/quasar-2.12.3.tgz#dd898cce1bbaf9e02310cc7e777c9c42a836a003" - integrity sha512-9KK5TXWGsZ6XFF6MJQ0E98yp++D1PagqSJrKpE91A6QnZ1gng4KtkFI5iPyuqXciFpXvxniiLsZtxD5ZICHvPw== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" - integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== - dependencies: - bytes "3.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdir-glob@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" - integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== - dependencies: - minimatch "^3.0.4" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -register-service-worker@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/register-service-worker/-/register-service-worker-1.7.2.tgz#6516983e1ef790a98c4225af1216bc80941a4bd2" - integrity sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A== - -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== - -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -reselect@^4.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" - integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve@^1.14.2: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rtlcss@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.0.0.tgz#ba73233b9c79fbf66eb867f2ae937713acbf2b40" - integrity sha512-j6oypPP+mgFwDXL1JkLCtm6U/DQntMUqlv5SOhpgHhdIE+PmBcjrtAHIpXfbIup47kD5Sgja9JDsDF1NNOsBwQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - postcss "^8.4.6" - strip-json-comments "^3.1.1" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== - dependencies: - tslib "^2.1.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-loader@13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-13.2.0.tgz#80195050f58c9aac63b792fa52acb6f5e0f6bdc3" - integrity sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - -sass@1.32.12: - version "1.32.12" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.12.tgz#a2a47ad0f1c168222db5206444a30c12457abb9f" - integrity sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA== - dependencies: - chokidar ">=3.0.0 <4.0.0" - -sax@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.4.tgz#74b6d33c9ae1e001510f179a91168588f1aedaa9" - integrity sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk= - -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.17.2: - version "0.17.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" - integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "1.8.1" - mime "1.6.0" - ms "2.1.3" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.14.2: - version "1.14.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" - integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.2" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.3: - version "1.7.4" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" - integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sirv@^1.0.7: - version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" - integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-trace@^1.0.0-pre2: - version "1.0.0-pre2" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-1.0.0-pre2.tgz#46a83a79f1b287807e9aaafc6a5dd8bcde626f9c" - integrity sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A== - -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -string-width@^4.1.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -stylehacks@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" - integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== - dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg.draggable.js@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz#c514a2f1405efb6f0263e7958f5b68fce50603ba" - integrity sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw== - dependencies: - svg.js "^2.0.1" - -svg.easing.js@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/svg.easing.js/-/svg.easing.js-2.0.0.tgz#8aa9946b0a8e27857a5c40a10eba4091e5691f12" - integrity sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI= - dependencies: - svg.js ">=2.3.x" - -svg.filter.js@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/svg.filter.js/-/svg.filter.js-2.0.2.tgz#91008e151389dd9230779fcbe6e2c9a362d1c203" - integrity sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM= - dependencies: - svg.js "^2.2.5" - -svg.js@>=2.3.x, svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.4.0, svg.js@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/svg.js/-/svg.js-2.7.1.tgz#eb977ed4737001eab859949b4a398ee1bb79948d" - integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA== - -svg.pathmorphing.js@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz#c25718a1cc7c36e852ecabc380e758ac09bb2b65" - integrity sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww== - dependencies: - svg.js "^2.4.0" - -svg.resize.js@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/svg.resize.js/-/svg.resize.js-1.4.3.tgz#885abd248e0cd205b36b973c4b578b9a36f23332" - integrity sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw== - dependencies: - svg.js "^2.6.5" - svg.select.js "^2.1.2" - -svg.select.js@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-2.1.2.tgz#e41ce13b1acff43a7441f9f8be87a2319c87be73" - integrity sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ== - dependencies: - svg.js "^2.2.5" - -svg.select.js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-3.0.1.tgz#a4198e359f3825739226415f82176a90ea5cc917" - integrity sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw== - dependencies: - svg.js "^2.6.5" - -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - -table@6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -table@^6.0.9: - version "6.7.5" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.5.tgz#f04478c351ef3d8c7904f0e8be90a1b62417d238" - integrity sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-stream@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -terser-webpack-plugin@5.3.6: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.14" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" - -terser-webpack-plugin@^5.1.3: - version "5.3.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54" - integrity sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g== - dependencies: - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - terser "^5.7.2" - -terser@^5.10.0, terser@^5.7.2: - version "5.14.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" - integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -terser@^5.14.1: - version "5.16.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" - integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== - -ts-loader@9.4.2: - version "9.4.2" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.2.tgz#80a45eee92dd5170b900b3d00abcfa14949aeb78" - integrity sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^5.0.0" - micromatch "^4.0.0" - semver "^7.3.4" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3, tslib@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typescript@4.9.4: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== - -uglify-js@^3.5.1: - version "3.15.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.4.tgz#fa95c257e88f85614915b906204b9623d4fa340d" - integrity sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-loader@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vue-demi@*: - version "0.13.5" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.5.tgz#d5eddbc9eaefb89ce5995269d1fa6b0486312092" - integrity sha512-tO3K2bML3AwiHmVHeKCq6HLef2st4zBXIV5aEkoJl6HZ+gJWxWv2O8wLH8qrA3SX3lDoTDHNghLX1xZg83MXvw== - -vue-eslint-parser@^7.10.0: - version "7.11.0" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz#214b5dea961007fcffb2ee65b8912307628d0daf" - integrity sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg== - dependencies: - debug "^4.1.1" - eslint-scope "^5.1.1" - eslint-visitor-keys "^1.1.0" - espree "^6.2.1" - esquery "^1.4.0" - lodash "^4.17.21" - semver "^6.3.0" - -vue-i18n@^9.0.0: - version "9.1.9" - resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.1.9.tgz#cb53e06ab5cc5b7eed59332f151caf48d47be9bb" - integrity sha512-JeRdNVxS2OGp1E+pye5XB6+M6BBkHwAv9C80Q7+kzoMdUDGRna06tjC0vCB/jDX9aWrl5swxOMFcyAr7or8XTA== - dependencies: - "@intlify/core-base" "9.1.9" - "@intlify/shared" "9.1.9" - "@intlify/vue-devtools" "9.1.9" - "@vue/devtools-api" "^6.0.0-beta.7" - -vue-loader@17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-17.0.1.tgz#c0ee8875e0610a0c2d13ba9b4d50a9c8442e7a3a" - integrity sha512-/OOyugJnImKCkAKrAvdsWMuwoCqGxWT5USLsjohzWbMgOwpA5wQmzQiLMzZd7DjhIfunzAGIApTOgIylz/kwcg== - dependencies: - chalk "^4.1.0" - hash-sum "^2.0.0" - loader-utils "^2.0.0" - -vue-router@^4.0.0: - version "4.0.12" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.12.tgz#8dc792cddf5bb1abcc3908f9064136de7e13c460" - integrity sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg== - dependencies: - "@vue/devtools-api" "^6.0.0-beta.18" - -vue-style-loader@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" - integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue3-apexcharts@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/vue3-apexcharts/-/vue3-apexcharts-1.4.1.tgz#ea561308430a1c5213b7f17c44ba3c845f6c490d" - integrity sha512-96qP8JDqB9vwU7bkG5nVU+E0UGQn7yYQVqUUCLQMYWDuQyu2vE77H/UFZ1yI+hwzlSTBKT9BqnNG8JsFegB3eg== - -vue@3: - version "3.2.26" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.26.tgz#5db575583ecae495c7caa5c12fd590dffcbb763e" - integrity sha512-KD4lULmskL5cCsEkfhERVRIOEDrfEL9CwAsLYpzptOGjaGFNWo3BQ9g8MAb7RaIO71rmVOziZ/uEN/rHwcUIhg== - dependencies: - "@vue/compiler-dom" "3.2.26" - "@vue/compiler-sfc" "3.2.26" - "@vue/runtime-dom" "3.2.26" - "@vue/server-renderer" "3.2.26" - "@vue/shared" "3.2.26" - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webpack-bundle-analyzer@4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz#33c1c485a7fcae8627c547b5c3328b46de733c66" - integrity sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg== - dependencies: - acorn "^8.0.4" - acorn-walk "^8.0.0" - chalk "^4.1.0" - commander "^7.2.0" - gzip-size "^6.0.0" - lodash "^4.17.20" - opener "^1.5.2" - sirv "^1.0.7" - ws "^7.3.1" - -webpack-chain@6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206" - integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^2.0.1" - -webpack-dev-middleware@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz#aa079a8dedd7e58bfeab358a9af7dab304cee57f" - integrity sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg== - dependencies: - colorette "^2.0.10" - memfs "^3.4.1" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@4.11.1: - version "4.11.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5" - integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.4.2" - -webpack-merge@5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-node-externals@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#1a3407c158d547a9feb4229a9e3385b7b60c9917" - integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5, webpack@^5.58.1: - version "5.76.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.1.tgz#7773de017e988bccb0f13c7d75ec245f377d295c" - integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -word-wrap@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" - integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@^7.3.1: - version "7.5.7" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== - -ws@^8.4.2: - version "8.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -zip-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" - integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^4.1.0" - readable-stream "^3.6.0" diff --git a/index.php b/index.php index 81e30f194c..3de8c46999 100644 --- a/index.php +++ b/index.php @@ -48,7 +48,7 @@ echo ' Leaving your web server configured like this is a huge security risk.

-Please read more on the Github help pages. +Please read more on the Github help pages.

diff --git a/package-lock.json b/package-lock.json index e1b180dcab..5279b819a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,30 +5,65 @@ "packages": { "": { "dependencies": { + "@ag-grid-community/client-side-row-model": "^31.0.3", + "@ag-grid-community/core": "^31.0.3", + "@ag-grid-community/infinite-row-model": "^31.0.3", + "@ag-grid-community/styles": "^31.0.3", "@fortawesome/fontawesome-free": "^6.4.0", "@popperjs/core": "^2.11.8", - "alpinejs": "^3.13.1", + "alpinejs": "^3.13.3", "bootstrap": "^5.3.0", "bootstrap5-autocomplete": "^1.1.22", + "bootstrap5-tags": "^1.6.15", "chart.js": "^4.4.0", "chartjs-adapter-date-fns": "^3.0.0", "chartjs-chart-sankey": "^0.12.0", - "date-fns": "^2.30.0", - "i18n-js": "^4.3.2", + "date-fns": "^3.2.0", + "i18next": "^23.7.18", + "i18next-chained-backend": "^4.6.2", + "i18next-http-backend": "^2.4.2", + "i18next-localstorage-backend": "^4.2.0", + "leaflet": "^1.9.4", "store": "^2.0.12" }, "devDependencies": { - "axios": "^1.5.1", + "axios": "^1.6.3", "laravel-vite-plugin": "^0.8.1", - "sass": "^1.69.0", - "vite": "^4.4.11", + "sass": "^1.69.6", + "vite": "^4.5.2", "vite-plugin-manifest-sri": "^0.1.0" } }, + "node_modules/@ag-grid-community/client-side-row-model": { + "version": "31.1.1", + "resolved": "https://registry.npmjs.org/@ag-grid-community/client-side-row-model/-/client-side-row-model-31.1.1.tgz", + "integrity": "sha512-KBSPaEJ1q97xooJd7U6W8PUfzUDecnsvE+Y05Xg/s6i61fLKyDTxDVJB/kETxdST0+T8FgjFMaPjY0hAZBOhWg==", + "dependencies": { + "@ag-grid-community/core": "31.1.1" + } + }, + "node_modules/@ag-grid-community/core": { + "version": "31.1.1", + "resolved": "https://registry.npmjs.org/@ag-grid-community/core/-/core-31.1.1.tgz", + "integrity": "sha512-WFN3yXpFR0uMJQZak6x4kzLl7nJPrrorUWf/KWH4ToP6PMZcc6cKT3jge3bJ0SBkzs2m7oQGnmi8rfTaHuXI4Q==" + }, + "node_modules/@ag-grid-community/infinite-row-model": { + "version": "31.1.1", + "resolved": "https://registry.npmjs.org/@ag-grid-community/infinite-row-model/-/infinite-row-model-31.1.1.tgz", + "integrity": "sha512-cOuqOZD+V0ShwlxZy0Q5UJAD4ixO9GteCsJyvueAybq7BO8MfYCfjAS+Wk/z6hPEsuoGLk6lupIzneNVyDmzfA==", + "dependencies": { + "@ag-grid-community/core": "31.1.1" + } + }, + "node_modules/@ag-grid-community/styles": { + "version": "31.1.1", + "resolved": "https://registry.npmjs.org/@ag-grid-community/styles/-/styles-31.1.1.tgz", + "integrity": "sha512-Q44beV3vD1jydB0smro9+nJY9g60uSjQ+cM8cHEIS9gDCG/37WiabdtQybJceeIHbne51MJPtOAa89y/TfnbQg==" + }, "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", + "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -389,9 +424,9 @@ } }, "node_modules/@fortawesome/fontawesome-free": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz", - "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.1.tgz", + "integrity": "sha512-CNy5vSwN3fsUStPRLX7fUYojyuzoEMSXPl7zSLJ8TgtRfjv24LOnOWKT2zYwaHZCJGkdyRnTmstR0P+Ah503Gw==", "hasInstallScript": true, "engines": { "node": ">=6" @@ -425,9 +460,9 @@ "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==" }, "node_modules/alpinejs": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.13.1.tgz", - "integrity": "sha512-/LZ7mumW02V7AV5xTTftJFHS0I3KOXLl7tHm4xpxXAV+HJ/zjTT0n8MU7RZ6UoGPhmO/i+KEhQojaH/0RsH5tg==", + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.13.5.tgz", + "integrity": "sha512-1d2XeNGN+Zn7j4mUAKXtAgdc4/rLeadyTMWeJGXF5DzwawPBxwTiBhFFm6w/Ei8eJxUZeyNWWSD9zknfdz1kEw==", "dependencies": { "@vue/reactivity": "~3.1.1" } @@ -452,24 +487,16 @@ "dev": true }, "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", "dev": true, "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -480,9 +507,9 @@ } }, "node_modules/bootstrap": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", - "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", "funding": [ { "type": "github", @@ -498,9 +525,14 @@ } }, "node_modules/bootstrap5-autocomplete": { - "version": "1.1.22", - "resolved": "https://registry.npmjs.org/bootstrap5-autocomplete/-/bootstrap5-autocomplete-1.1.22.tgz", - "integrity": "sha512-vn4/+j/MmupcfQB9dwoGFadyk3OorxZh2Eyo8YVSBiaJBcaM1u+FYl0lgOCHQWRqN3MXqM4YCebo8xiyFIW/fw==" + "version": "1.1.25", + "resolved": "https://registry.npmjs.org/bootstrap5-autocomplete/-/bootstrap5-autocomplete-1.1.25.tgz", + "integrity": "sha512-6Z7vzlVBJduPUi7U1MPRBzoXmJf8ob9tGcUNxxos6qU1bbjPX7Li30r1Dhtk55hSBfPmVuN7p6zahF7G38xtWA==" + }, + "node_modules/bootstrap5-tags": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/bootstrap5-tags/-/bootstrap5-tags-1.7.1.tgz", + "integrity": "sha512-qBgtw8E4b+zNfNGPNZAaiC4oR2QSI2OWQYx523S03+ZFXPFUU7fJyMA4ynTYG2CE6hpy3e8HB5Lx9nWn1jrlNA==" }, "node_modules/braces": { "version": "3.0.2", @@ -515,14 +547,14 @@ } }, "node_modules/chart.js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz", - "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.2.tgz", + "integrity": "sha512-6GD7iKwFpP5kbSD4MeRRRlTnQvxfQREy36uEtm1hzHzcOqwWx0YEHuspuoNlslu+nciLIB7fjjsHkUv/FzFcOg==", "dependencies": { "@kurkle/color": "^0.3.0" }, "engines": { - "pnpm": ">=7" + "pnpm": ">=8" } }, "node_modules/chartjs-adapter-date-fns": { @@ -543,16 +575,10 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -565,6 +591,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -581,19 +610,21 @@ "node": ">= 0.8" } }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, + "node-fetch": "^2.6.12" + } + }, + "node_modules/date-fns": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.3.1.tgz", + "integrity": "sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" } }, "node_modules/delayed-stream": { @@ -655,9 +686,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "dev": true, "funding": [ { @@ -714,20 +745,56 @@ "node": ">= 6" } }, - "node_modules/i18n-js": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/i18n-js/-/i18n-js-4.3.2.tgz", - "integrity": "sha512-n8gbEbQEueym2/q2yrZk5/xKWjFcKtg3/Escw4JHSVWa8qtKqP8j7se3UjkRbHlO/REqFA0V/MG1q8tEfyHeOA==", + "node_modules/i18next": { + "version": "23.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.10.0.tgz", + "integrity": "sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], "dependencies": { - "bignumber.js": "*", - "lodash": "*", - "make-plural": "*" + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/i18next-chained-backend": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/i18next-chained-backend/-/i18next-chained-backend-4.6.2.tgz", + "integrity": "sha512-2P092fR+nAPQlGzPUoIIxbwo7PTBqQYgLxwv1XhSTQUAUoelLo5LkX+FqRxxSDg9WEAsrc8+2WL6mJtMGIa6WQ==", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/i18next-http-backend": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.0.tgz", + "integrity": "sha512-Z/aQsGZk1gSxt2/DztXk92DuDD20J+rNudT7ZCdTrNOiK8uQppfvdjq9+DFQfpAnFPn3VZS+KQIr1S/W1KxhpQ==", + "dependencies": { + "cross-fetch": "4.0.0" + } + }, + "node_modules/i18next-localstorage-backend": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/i18next-localstorage-backend/-/i18next-localstorage-backend-4.2.0.tgz", + "integrity": "sha512-vglEQF0AnLriX7dLA2drHnqAYzHxnLwWQzBDw8YxcIDjOvYZz5rvpal59Dq4In+IHNmGNM32YgF0TDjBT0fHmA==", + "dependencies": { + "@babel/runtime": "^7.22.15" } }, "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", "dev": true }, "node_modules/is-binary-path": { @@ -788,15 +855,10 @@ "vite": "^3.0.0 || ^4.0.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/make-plural": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.3.0.tgz", - "integrity": "sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw==" + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" }, "node_modules/mime-db": { "version": "1.52.0", @@ -820,9 +882,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -837,6 +899,25 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -865,9 +946,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, "funding": [ { @@ -884,7 +965,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -911,9 +992,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/rollup": { "version": "3.29.4", @@ -932,9 +1013,9 @@ } }, "node_modules/sass": { - "version": "1.69.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.3.tgz", - "integrity": "sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==", + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -977,10 +1058,15 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/vite": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", - "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -1033,16 +1119,13 @@ } }, "node_modules/vite-plugin-full-reload": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.5.tgz", - "integrity": "sha512-kVZFDFWr0DxiHn6MuDVTQf7gnWIdETGlZh0hvTiMXzRN80vgF4PKbONSq8U1d0WtHsKaFODTQgJeakLacoPZEQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz", + "integrity": "sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==", "dev": true, "dependencies": { "picocolors": "^1.0.0", "picomatch": "^2.3.1" - }, - "peerDependencies": { - "vite": "^2 || ^3 || ^4" } }, "node_modules/vite-plugin-manifest-sri": { @@ -1050,6 +1133,20 @@ "resolved": "https://registry.npmjs.org/vite-plugin-manifest-sri/-/vite-plugin-manifest-sri-0.1.0.tgz", "integrity": "sha512-m4gcEXwcA1MfCVYTLVHYsB03Xsc6L4VYfhxXmcYcS+rN3kTjuWkXMaA8OuOV1gFdi1bMJFkLTJCPciYApvCm/g==", "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } } } } diff --git a/package.json b/package.json index f58614c426..738b5046b8 100644 --- a/package.json +++ b/package.json @@ -6,23 +6,32 @@ "build": "vite build" }, "devDependencies": { - "axios": "^1.5.1", + "axios": "^1.6.3", "laravel-vite-plugin": "^0.8.1", - "sass": "^1.69.0", - "vite": "^4.4.11", + "sass": "^1.69.6", + "vite": "^4.5.2", "vite-plugin-manifest-sri": "^0.1.0" }, "dependencies": { + "@ag-grid-community/client-side-row-model": "^31.0.3", + "@ag-grid-community/core": "^31.0.3", + "@ag-grid-community/infinite-row-model": "^31.0.3", + "@ag-grid-community/styles": "^31.0.3", "@fortawesome/fontawesome-free": "^6.4.0", "@popperjs/core": "^2.11.8", - "alpinejs": "^3.13.1", + "alpinejs": "^3.13.3", "bootstrap": "^5.3.0", "bootstrap5-autocomplete": "^1.1.22", + "bootstrap5-tags": "^1.6.15", "chart.js": "^4.4.0", "chartjs-adapter-date-fns": "^3.0.0", "chartjs-chart-sankey": "^0.12.0", - "date-fns": "^2.30.0", - "i18n-js": "^4.3.2", + "date-fns": "^3.2.0", + "i18next": "^23.7.18", + "i18next-chained-backend": "^4.6.2", + "i18next-http-backend": "^2.4.2", + "i18next-localstorage-backend": "^4.2.0", + "leaflet": "^1.9.4", "store": "^2.0.12" } } diff --git a/phpunit.xml b/phpunit.xml index aa51a02e21..5979cacc3f 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,23 +1,4 @@ - - - - + diff --git a/public/.well-known/security.txt b/public/.well-known/security.txt index b0a9e45f39..cd36850af4 100644 --- a/public/.well-known/security.txt +++ b/public/.well-known/security.txt @@ -14,7 +14,7 @@ Hash: SHA256 Contact: mailto:james@firefly-iii.org Expires: 2024-12-31T23:00:00.000Z Preferred-Languages: en, nl -Policy: https://docs.firefly-iii.org/firefly-iii/support/ +Policy: https://docs.firefly-iii.org/explanation/support/ # # Thank you for your time! @@ -24,18 +24,18 @@ Policy: https://docs.firefly-iii.org/firefly-iii/support/ # -----BEGIN PGP SIGNATURE----- -iQJKBAABCAA0FiEEAvQEbEsjbgYJVxYStJoyS36tbYAFAmUGj9gWHGphbWVzQGZp -cmVmbHktaWlpLm9yZwAKCRC0mjJLfq1tgA0WD/9cHNSphMqPx05Tkak5kNKsmyYW -YXZ4kcw5haLwcxk4ipudCzYLWejcXI7z/WVdYQrZVMw6Kaz6Z/ZgJQk6mQXTeb3L -WcmxmiKGQk5twnmIy7vpoBgt2QH70lhP/x+FH0w1j22RM5b66gj/BZBYowtmUI1L -HIwsTvtjBGZA8aJSPmtRGULJ45/GDZYi/Hjx49hPPLjIE8VP53Wa7L284i4R+gG9 -IEle9kqb2OUUp0+CmIXSKAvtFpDHt9Yc0AE6PU0WpSg3LI6NqyUiM2CdKvyKvtIV -Y15LoJTkTuORzudP1HCImfcQUdJgrMe1DGz2siHqxTJVDUwzEVc6mOkGnefhIpFy -jN0ik6pCSkLNsSYImQZq9H6d9yiPPYSR3JFjTDtEVnANjlT08ywPdsyWgvNaHHh1 -eMRy9+X24g9cQ7MqU77Y8p2/v3IudWbEsi+M1FUm4W0TE/MsNv9xydRvB6M41eVc -raYnk8cVmEzpjsyxi9lAqpk4+qYD04JecYCPxkX6XxkFxzswS20LR4VVOamfKgv1 -yIzg1sCMArHeq0OC1k6lskB8DTXvw5+838iw4h8I0T6MAqXj4RKv8C45w7+uSlG9 -oXhpUweiiRzyZPWbWXU7jC9BvDyqfuxq9jn4LFDzAOV0raLz6QThiUcR3f7h2Rvo -KiDjx3KprWU+swTosw== -=1jlJ +iQJKBAABCAA0FiEEAvQEbEsjbgYJVxYStJoyS36tbYAFAmV37E8WHGphbWVzQGZp +cmVmbHktaWlpLm9yZwAKCRC0mjJLfq1tgFtzD/4lrhVkCi4mRAroSMbz7ZHbLwLi +RAgiaFmnDI48LqkX/jJJTWSy8czl9gkKO9uVJzXwmjVzFg5vJTkRfjvNlTyOpL/l +gB+REFYGadp8ulMCZcBlFgLbyAWtvHKV3UW//G8fzrASAEe+2eiuPQooLmwaKows +X+ty2zZEH282uAiR36otlGR2UpUcYAy0XcAuE7hIxfHA8bsh5uqzAkm74OsynC8E +6vBEi1QzarE+cfoZqBtriWELyownM9Z5a/cIzm47RfBkFUKXaQBL3pYN1kX2TAi5 +1//0WLrDiotkIwPmdYiYFmVmaJDjcapcAkDoD/wAv8BxxjPZ900RCTF4jzMTxIu0 +t6umbm3SaA/vaINv8ilmMMj6ep49GE8EssHvRBUaGnv7JjHe+XCZrOsk3a5+Z4zQ +Sd9nuryLCX/G3Bz63rU/V1evuCT7ouNEWKUlwtYCqU+6BfumTdbJCPEH/4szxoi2 +cPvIw5Y5sA9ue5Wm4RIX7G0DyIRJJf3CB0PJWuujzF548hn60MPBLDw7xSraTQNX +v1GRwTHIOo6e1U47naz9U3Dv3pK2J5aibL4K6pjyZG1bTqfE/0uY0hEXVFuNqAxT +B6LSAcrP4j+bU4oZlWRx99yHv1ComWZzi/JvRKp9Y0aTcWbAeT+oz3PFw8K5lff/ +eweJG/H9BuHgDXdYQg== +=Z9Gk -----END PGP SIGNATURE----- diff --git a/public/.well-known/security.txt.sig b/public/.well-known/security.txt.sig index 6f4360e7f6..8bfbe16831 100644 --- a/public/.well-known/security.txt.sig +++ b/public/.well-known/security.txt.sig @@ -1,17 +1,17 @@ -----BEGIN PGP SIGNATURE----- -iQJKBAABCAA0FiEEAvQEbEsjbgYJVxYStJoyS36tbYAFAmUGj9gWHGphbWVzQGZp -cmVmbHktaWlpLm9yZwAKCRC0mjJLfq1tgA0WD/9cHNSphMqPx05Tkak5kNKsmyYW -YXZ4kcw5haLwcxk4ipudCzYLWejcXI7z/WVdYQrZVMw6Kaz6Z/ZgJQk6mQXTeb3L -WcmxmiKGQk5twnmIy7vpoBgt2QH70lhP/x+FH0w1j22RM5b66gj/BZBYowtmUI1L -HIwsTvtjBGZA8aJSPmtRGULJ45/GDZYi/Hjx49hPPLjIE8VP53Wa7L284i4R+gG9 -IEle9kqb2OUUp0+CmIXSKAvtFpDHt9Yc0AE6PU0WpSg3LI6NqyUiM2CdKvyKvtIV -Y15LoJTkTuORzudP1HCImfcQUdJgrMe1DGz2siHqxTJVDUwzEVc6mOkGnefhIpFy -jN0ik6pCSkLNsSYImQZq9H6d9yiPPYSR3JFjTDtEVnANjlT08ywPdsyWgvNaHHh1 -eMRy9+X24g9cQ7MqU77Y8p2/v3IudWbEsi+M1FUm4W0TE/MsNv9xydRvB6M41eVc -raYnk8cVmEzpjsyxi9lAqpk4+qYD04JecYCPxkX6XxkFxzswS20LR4VVOamfKgv1 -yIzg1sCMArHeq0OC1k6lskB8DTXvw5+838iw4h8I0T6MAqXj4RKv8C45w7+uSlG9 -oXhpUweiiRzyZPWbWXU7jC9BvDyqfuxq9jn4LFDzAOV0raLz6QThiUcR3f7h2Rvo -KiDjx3KprWU+swTosw== -=1jlJ +iQJKBAABCAA0FiEEAvQEbEsjbgYJVxYStJoyS36tbYAFAmV37E8WHGphbWVzQGZp +cmVmbHktaWlpLm9yZwAKCRC0mjJLfq1tgFtzD/4lrhVkCi4mRAroSMbz7ZHbLwLi +RAgiaFmnDI48LqkX/jJJTWSy8czl9gkKO9uVJzXwmjVzFg5vJTkRfjvNlTyOpL/l +gB+REFYGadp8ulMCZcBlFgLbyAWtvHKV3UW//G8fzrASAEe+2eiuPQooLmwaKows +X+ty2zZEH282uAiR36otlGR2UpUcYAy0XcAuE7hIxfHA8bsh5uqzAkm74OsynC8E +6vBEi1QzarE+cfoZqBtriWELyownM9Z5a/cIzm47RfBkFUKXaQBL3pYN1kX2TAi5 +1//0WLrDiotkIwPmdYiYFmVmaJDjcapcAkDoD/wAv8BxxjPZ900RCTF4jzMTxIu0 +t6umbm3SaA/vaINv8ilmMMj6ep49GE8EssHvRBUaGnv7JjHe+XCZrOsk3a5+Z4zQ +Sd9nuryLCX/G3Bz63rU/V1evuCT7ouNEWKUlwtYCqU+6BfumTdbJCPEH/4szxoi2 +cPvIw5Y5sA9ue5Wm4RIX7G0DyIRJJf3CB0PJWuujzF548hn60MPBLDw7xSraTQNX +v1GRwTHIOo6e1U47naz9U3Dv3pK2J5aibL4K6pjyZG1bTqfE/0uY0hEXVFuNqAxT +B6LSAcrP4j+bU4oZlWRx99yHv1ComWZzi/JvRKp9Y0aTcWbAeT+oz3PFw8K5lff/ +eweJG/H9BuHgDXdYQg== +=Z9Gk -----END PGP SIGNATURE----- diff --git a/public/build/assets/app-28a195fd.css b/public/build/assets/app-fb7b26ec.css similarity index 75% rename from public/build/assets/app-28a195fd.css rename to public/build/assets/app-fb7b26ec.css index a68b491e8d..64cd198444 100644 --- a/public/build/assets/app-28a195fd.css +++ b/public/build/assets/app-fb7b26ec.css @@ -16,8 +16,8 @@ * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . - */.fa{font-family:var(--fa-style-family, "Font Awesome 6 Free");font-weight:var(--fa-style, 900)}.fa,.fa-classic,.fa-sharp,.fas,.fa-solid,.far,.fa-regular,.fab,.fa-brands{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display, inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fas,.fa-classic,.fa-solid,.far,.fa-regular{font-family:"Font Awesome 6 Free"}.fab,.fa-brands{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin, 2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em) * -1);position:absolute;text-align:center;width:var(--fa-li-width, 2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color, #eee);border-radius:var(--fa-border-radius, .1em);border-style:var(--fa-border-style, solid);border-width:var(--fa-border-width, .08em);padding:var(--fa-border-padding, .2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin, .3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin, .3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.28, .84, .42, 1))}.fa-fade{animation-name:fa-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-beat-fade{animation-name:fa-beat-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-shake{animation-name:fa-shake;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 2s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin-reverse{--fa-animation-direction: reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, steps(8))}@media (prefers-reduced-motion: reduce){.fa-beat,.fa-bounce,.fa-fade,.fa-beat-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale, 1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x, 1.1),var(--fa-bounce-start-scale-y, .9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x, .9),var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x, 1.05),var(--fa-bounce-land-scale-y, .95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound, -.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity, .4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity, .4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale, 1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x, 0),var(--fa-flip-y, 1),var(--fa-flip-z, 0),var(--fa-flip-angle, -180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0)}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle, none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index, auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse, #fff)}.fa-0:before{content:"0"}.fa-1:before{content:"1"}.fa-2:before{content:"2"}.fa-3:before{content:"3"}.fa-4:before{content:"4"}.fa-5:before{content:"5"}.fa-6:before{content:"6"}.fa-7:before{content:"7"}.fa-8:before{content:"8"}.fa-9:before{content:"9"}.fa-fill-drip:before{content:""}.fa-arrows-to-circle:before{content:""}.fa-circle-chevron-right:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-at:before{content:"@"}.fa-trash-can:before{content:""}.fa-trash-alt:before{content:""}.fa-text-height:before{content:""}.fa-user-xmark:before{content:""}.fa-user-times:before{content:""}.fa-stethoscope:before{content:""}.fa-message:before{content:""}.fa-comment-alt:before{content:""}.fa-info:before{content:""}.fa-down-left-and-up-right-to-center:before{content:""}.fa-compress-alt:before{content:""}.fa-explosion:before{content:""}.fa-file-lines:before{content:""}.fa-file-alt:before{content:""}.fa-file-text:before{content:""}.fa-wave-square:before{content:""}.fa-ring:before{content:""}.fa-building-un:before{content:""}.fa-dice-three:before{content:""}.fa-calendar-days:before{content:""}.fa-calendar-alt:before{content:""}.fa-anchor-circle-check:before{content:""}.fa-building-circle-arrow-right:before{content:""}.fa-volleyball:before{content:""}.fa-volleyball-ball:before{content:""}.fa-arrows-up-to-line:before{content:""}.fa-sort-down:before{content:""}.fa-sort-desc:before{content:""}.fa-circle-minus:before{content:""}.fa-minus-circle:before{content:""}.fa-door-open:before{content:""}.fa-right-from-bracket:before{content:""}.fa-sign-out-alt:before{content:""}.fa-atom:before{content:""}.fa-soap:before{content:""}.fa-icons:before{content:""}.fa-heart-music-camera-bolt:before{content:""}.fa-microphone-lines-slash:before{content:""}.fa-microphone-alt-slash:before{content:""}.fa-bridge-circle-check:before{content:""}.fa-pump-medical:before{content:""}.fa-fingerprint:before{content:""}.fa-hand-point-right:before{content:""}.fa-magnifying-glass-location:before{content:""}.fa-search-location:before{content:""}.fa-forward-step:before{content:""}.fa-step-forward:before{content:""}.fa-face-smile-beam:before{content:""}.fa-smile-beam:before{content:""}.fa-flag-checkered:before{content:""}.fa-football:before{content:""}.fa-football-ball:before{content:""}.fa-school-circle-exclamation:before{content:""}.fa-crop:before{content:""}.fa-angles-down:before{content:""}.fa-angle-double-down:before{content:""}.fa-users-rectangle:before{content:""}.fa-people-roof:before{content:""}.fa-people-line:before{content:""}.fa-beer-mug-empty:before{content:""}.fa-beer:before{content:""}.fa-diagram-predecessor:before{content:""}.fa-arrow-up-long:before{content:""}.fa-long-arrow-up:before{content:""}.fa-fire-flame-simple:before{content:""}.fa-burn:before{content:""}.fa-person:before{content:""}.fa-male:before{content:""}.fa-laptop:before{content:""}.fa-file-csv:before{content:""}.fa-menorah:before{content:""}.fa-truck-plane:before{content:""}.fa-record-vinyl:before{content:""}.fa-face-grin-stars:before{content:""}.fa-grin-stars:before{content:""}.fa-bong:before{content:""}.fa-spaghetti-monster-flying:before{content:""}.fa-pastafarianism:before{content:""}.fa-arrow-down-up-across-line:before{content:""}.fa-spoon:before{content:""}.fa-utensil-spoon:before{content:""}.fa-jar-wheat:before{content:""}.fa-envelopes-bulk:before{content:""}.fa-mail-bulk:before{content:""}.fa-file-circle-exclamation:before{content:""}.fa-circle-h:before{content:""}.fa-hospital-symbol:before{content:""}.fa-pager:before{content:""}.fa-address-book:before{content:""}.fa-contact-book:before{content:""}.fa-strikethrough:before{content:""}.fa-k:before{content:"K"}.fa-landmark-flag:before{content:""}.fa-pencil:before{content:""}.fa-pencil-alt:before{content:""}.fa-backward:before{content:""}.fa-caret-right:before{content:""}.fa-comments:before{content:""}.fa-paste:before{content:""}.fa-file-clipboard:before{content:""}.fa-code-pull-request:before{content:""}.fa-clipboard-list:before{content:""}.fa-truck-ramp-box:before{content:""}.fa-truck-loading:before{content:""}.fa-user-check:before{content:""}.fa-vial-virus:before{content:""}.fa-sheet-plastic:before{content:""}.fa-blog:before{content:""}.fa-user-ninja:before{content:""}.fa-person-arrow-up-from-line:before{content:""}.fa-scroll-torah:before{content:""}.fa-torah:before{content:""}.fa-broom-ball:before{content:""}.fa-quidditch:before{content:""}.fa-quidditch-broom-ball:before{content:""}.fa-toggle-off:before{content:""}.fa-box-archive:before{content:""}.fa-archive:before{content:""}.fa-person-drowning:before{content:""}.fa-arrow-down-9-1:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-sort-numeric-down-alt:before{content:""}.fa-face-grin-tongue-squint:before{content:""}.fa-grin-tongue-squint:before{content:""}.fa-spray-can:before{content:""}.fa-truck-monster:before{content:""}.fa-w:before{content:"W"}.fa-earth-africa:before{content:""}.fa-globe-africa:before{content:""}.fa-rainbow:before{content:""}.fa-circle-notch:before{content:""}.fa-tablet-screen-button:before{content:""}.fa-tablet-alt:before{content:""}.fa-paw:before{content:""}.fa-cloud:before{content:""}.fa-trowel-bricks:before{content:""}.fa-face-flushed:before{content:""}.fa-flushed:before{content:""}.fa-hospital-user:before{content:""}.fa-tent-arrow-left-right:before{content:""}.fa-gavel:before{content:""}.fa-legal:before{content:""}.fa-binoculars:before{content:""}.fa-microphone-slash:before{content:""}.fa-box-tissue:before{content:""}.fa-motorcycle:before{content:""}.fa-bell-concierge:before{content:""}.fa-concierge-bell:before{content:""}.fa-pen-ruler:before{content:""}.fa-pencil-ruler:before{content:""}.fa-people-arrows:before{content:""}.fa-people-arrows-left-right:before{content:""}.fa-mars-and-venus-burst:before{content:""}.fa-square-caret-right:before{content:""}.fa-caret-square-right:before{content:""}.fa-scissors:before{content:""}.fa-cut:before{content:""}.fa-sun-plant-wilt:before{content:""}.fa-toilets-portable:before{content:""}.fa-hockey-puck:before{content:""}.fa-table:before{content:""}.fa-magnifying-glass-arrow-right:before{content:""}.fa-tachograph-digital:before{content:""}.fa-digital-tachograph:before{content:""}.fa-users-slash:before{content:""}.fa-clover:before{content:""}.fa-reply:before{content:""}.fa-mail-reply:before{content:""}.fa-star-and-crescent:before{content:""}.fa-house-fire:before{content:""}.fa-square-minus:before{content:""}.fa-minus-square:before{content:""}.fa-helicopter:before{content:""}.fa-compass:before{content:""}.fa-square-caret-down:before{content:""}.fa-caret-square-down:before{content:""}.fa-file-circle-question:before{content:""}.fa-laptop-code:before{content:""}.fa-swatchbook:before{content:""}.fa-prescription-bottle:before{content:""}.fa-bars:before{content:""}.fa-navicon:before{content:""}.fa-people-group:before{content:""}.fa-hourglass-end:before{content:""}.fa-hourglass-3:before{content:""}.fa-heart-crack:before{content:""}.fa-heart-broken:before{content:""}.fa-square-up-right:before{content:""}.fa-external-link-square-alt:before{content:""}.fa-face-kiss-beam:before{content:""}.fa-kiss-beam:before{content:""}.fa-film:before{content:""}.fa-ruler-horizontal:before{content:""}.fa-people-robbery:before{content:""}.fa-lightbulb:before{content:""}.fa-caret-left:before{content:""}.fa-circle-exclamation:before{content:""}.fa-exclamation-circle:before{content:""}.fa-school-circle-xmark:before{content:""}.fa-arrow-right-from-bracket:before{content:""}.fa-sign-out:before{content:""}.fa-circle-chevron-down:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-unlock-keyhole:before{content:""}.fa-unlock-alt:before{content:""}.fa-cloud-showers-heavy:before{content:""}.fa-headphones-simple:before{content:""}.fa-headphones-alt:before{content:""}.fa-sitemap:before{content:""}.fa-circle-dollar-to-slot:before{content:""}.fa-donate:before{content:""}.fa-memory:before{content:""}.fa-road-spikes:before{content:""}.fa-fire-burner:before{content:""}.fa-flag:before{content:""}.fa-hanukiah:before{content:""}.fa-feather:before{content:""}.fa-volume-low:before{content:""}.fa-volume-down:before{content:""}.fa-comment-slash:before{content:""}.fa-cloud-sun-rain:before{content:""}.fa-compress:before{content:""}.fa-wheat-awn:before{content:""}.fa-wheat-alt:before{content:""}.fa-ankh:before{content:""}.fa-hands-holding-child:before{content:""}.fa-asterisk:before{content:"*"}.fa-square-check:before{content:""}.fa-check-square:before{content:""}.fa-peseta-sign:before{content:""}.fa-heading:before{content:""}.fa-header:before{content:""}.fa-ghost:before{content:""}.fa-list:before{content:""}.fa-list-squares:before{content:""}.fa-square-phone-flip:before{content:""}.fa-phone-square-alt:before{content:""}.fa-cart-plus:before{content:""}.fa-gamepad:before{content:""}.fa-circle-dot:before{content:""}.fa-dot-circle:before{content:""}.fa-face-dizzy:before{content:""}.fa-dizzy:before{content:""}.fa-egg:before{content:""}.fa-house-medical-circle-xmark:before{content:""}.fa-campground:before{content:""}.fa-folder-plus:before{content:""}.fa-futbol:before{content:""}.fa-futbol-ball:before{content:""}.fa-soccer-ball:before{content:""}.fa-paintbrush:before{content:""}.fa-paint-brush:before{content:""}.fa-lock:before{content:""}.fa-gas-pump:before{content:""}.fa-hot-tub-person:before{content:""}.fa-hot-tub:before{content:""}.fa-map-location:before{content:""}.fa-map-marked:before{content:""}.fa-house-flood-water:before{content:""}.fa-tree:before{content:""}.fa-bridge-lock:before{content:""}.fa-sack-dollar:before{content:""}.fa-pen-to-square:before{content:""}.fa-edit:before{content:""}.fa-car-side:before{content:""}.fa-share-nodes:before{content:""}.fa-share-alt:before{content:""}.fa-heart-circle-minus:before{content:""}.fa-hourglass-half:before{content:""}.fa-hourglass-2:before{content:""}.fa-microscope:before{content:""}.fa-sink:before{content:""}.fa-bag-shopping:before{content:""}.fa-shopping-bag:before{content:""}.fa-arrow-down-z-a:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-alpha-down-alt:before{content:""}.fa-mitten:before{content:""}.fa-person-rays:before{content:""}.fa-users:before{content:""}.fa-eye-slash:before{content:""}.fa-flask-vial:before{content:""}.fa-hand:before{content:""}.fa-hand-paper:before{content:""}.fa-om:before{content:""}.fa-worm:before{content:""}.fa-house-circle-xmark:before{content:""}.fa-plug:before{content:""}.fa-chevron-up:before{content:""}.fa-hand-spock:before{content:""}.fa-stopwatch:before{content:""}.fa-face-kiss:before{content:""}.fa-kiss:before{content:""}.fa-bridge-circle-xmark:before{content:""}.fa-face-grin-tongue:before{content:""}.fa-grin-tongue:before{content:""}.fa-chess-bishop:before{content:""}.fa-face-grin-wink:before{content:""}.fa-grin-wink:before{content:""}.fa-ear-deaf:before{content:""}.fa-deaf:before{content:""}.fa-deafness:before{content:""}.fa-hard-of-hearing:before{content:""}.fa-road-circle-check:before{content:""}.fa-dice-five:before{content:""}.fa-square-rss:before{content:""}.fa-rss-square:before{content:""}.fa-land-mine-on:before{content:""}.fa-i-cursor:before{content:""}.fa-stamp:before{content:""}.fa-stairs:before{content:""}.fa-i:before{content:"I"}.fa-hryvnia-sign:before{content:""}.fa-hryvnia:before{content:""}.fa-pills:before{content:""}.fa-face-grin-wide:before{content:""}.fa-grin-alt:before{content:""}.fa-tooth:before{content:""}.fa-v:before{content:"V"}.fa-bangladeshi-taka-sign:before{content:""}.fa-bicycle:before{content:""}.fa-staff-snake:before{content:""}.fa-rod-asclepius:before{content:""}.fa-rod-snake:before{content:""}.fa-staff-aesculapius:before{content:""}.fa-head-side-cough-slash:before{content:""}.fa-truck-medical:before{content:""}.fa-ambulance:before{content:""}.fa-wheat-awn-circle-exclamation:before{content:""}.fa-snowman:before{content:""}.fa-mortar-pestle:before{content:""}.fa-road-barrier:before{content:""}.fa-school:before{content:""}.fa-igloo:before{content:""}.fa-joint:before{content:""}.fa-angle-right:before{content:""}.fa-horse:before{content:""}.fa-q:before{content:"Q"}.fa-g:before{content:"G"}.fa-notes-medical:before{content:""}.fa-temperature-half:before{content:""}.fa-temperature-2:before{content:""}.fa-thermometer-2:before{content:""}.fa-thermometer-half:before{content:""}.fa-dong-sign:before{content:""}.fa-capsules:before{content:""}.fa-poo-storm:before{content:""}.fa-poo-bolt:before{content:""}.fa-face-frown-open:before{content:""}.fa-frown-open:before{content:""}.fa-hand-point-up:before{content:""}.fa-money-bill:before{content:""}.fa-bookmark:before{content:""}.fa-align-justify:before{content:""}.fa-umbrella-beach:before{content:""}.fa-helmet-un:before{content:""}.fa-bullseye:before{content:""}.fa-bacon:before{content:""}.fa-hand-point-down:before{content:""}.fa-arrow-up-from-bracket:before{content:""}.fa-folder:before{content:""}.fa-folder-blank:before{content:""}.fa-file-waveform:before{content:""}.fa-file-medical-alt:before{content:""}.fa-radiation:before{content:""}.fa-chart-simple:before{content:""}.fa-mars-stroke:before{content:""}.fa-vial:before{content:""}.fa-gauge:before{content:""}.fa-dashboard:before{content:""}.fa-gauge-med:before{content:""}.fa-tachometer-alt-average:before{content:""}.fa-wand-magic-sparkles:before{content:""}.fa-magic-wand-sparkles:before{content:""}.fa-e:before{content:"E"}.fa-pen-clip:before{content:""}.fa-pen-alt:before{content:""}.fa-bridge-circle-exclamation:before{content:""}.fa-user:before{content:""}.fa-school-circle-check:before{content:""}.fa-dumpster:before{content:""}.fa-van-shuttle:before{content:""}.fa-shuttle-van:before{content:""}.fa-building-user:before{content:""}.fa-square-caret-left:before{content:""}.fa-caret-square-left:before{content:""}.fa-highlighter:before{content:""}.fa-key:before{content:""}.fa-bullhorn:before{content:""}.fa-globe:before{content:""}.fa-synagogue:before{content:""}.fa-person-half-dress:before{content:""}.fa-road-bridge:before{content:""}.fa-location-arrow:before{content:""}.fa-c:before{content:"C"}.fa-tablet-button:before{content:""}.fa-building-lock:before{content:""}.fa-pizza-slice:before{content:""}.fa-money-bill-wave:before{content:""}.fa-chart-area:before{content:""}.fa-area-chart:before{content:""}.fa-house-flag:before{content:""}.fa-person-circle-minus:before{content:""}.fa-ban:before{content:""}.fa-cancel:before{content:""}.fa-camera-rotate:before{content:""}.fa-spray-can-sparkles:before{content:""}.fa-air-freshener:before{content:""}.fa-star:before{content:""}.fa-repeat:before{content:""}.fa-cross:before{content:""}.fa-box:before{content:""}.fa-venus-mars:before{content:""}.fa-arrow-pointer:before{content:""}.fa-mouse-pointer:before{content:""}.fa-maximize:before{content:""}.fa-expand-arrows-alt:before{content:""}.fa-charging-station:before{content:""}.fa-shapes:before{content:""}.fa-triangle-circle-square:before{content:""}.fa-shuffle:before{content:""}.fa-random:before{content:""}.fa-person-running:before{content:""}.fa-running:before{content:""}.fa-mobile-retro:before{content:""}.fa-grip-lines-vertical:before{content:""}.fa-spider:before{content:""}.fa-hands-bound:before{content:""}.fa-file-invoice-dollar:before{content:""}.fa-plane-circle-exclamation:before{content:""}.fa-x-ray:before{content:""}.fa-spell-check:before{content:""}.fa-slash:before{content:""}.fa-computer-mouse:before{content:""}.fa-mouse:before{content:""}.fa-arrow-right-to-bracket:before{content:""}.fa-sign-in:before{content:""}.fa-shop-slash:before{content:""}.fa-store-alt-slash:before{content:""}.fa-server:before{content:""}.fa-virus-covid-slash:before{content:""}.fa-shop-lock:before{content:""}.fa-hourglass-start:before{content:""}.fa-hourglass-1:before{content:""}.fa-blender-phone:before{content:""}.fa-building-wheat:before{content:""}.fa-person-breastfeeding:before{content:""}.fa-right-to-bracket:before{content:""}.fa-sign-in-alt:before{content:""}.fa-venus:before{content:""}.fa-passport:before{content:""}.fa-heart-pulse:before{content:""}.fa-heartbeat:before{content:""}.fa-people-carry-box:before{content:""}.fa-people-carry:before{content:""}.fa-temperature-high:before{content:""}.fa-microchip:before{content:""}.fa-crown:before{content:""}.fa-weight-hanging:before{content:""}.fa-xmarks-lines:before{content:""}.fa-file-prescription:before{content:""}.fa-weight-scale:before{content:""}.fa-weight:before{content:""}.fa-user-group:before{content:""}.fa-user-friends:before{content:""}.fa-arrow-up-a-z:before{content:""}.fa-sort-alpha-up:before{content:""}.fa-chess-knight:before{content:""}.fa-face-laugh-squint:before{content:""}.fa-laugh-squint:before{content:""}.fa-wheelchair:before{content:""}.fa-circle-arrow-up:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-toggle-on:before{content:""}.fa-person-walking:before{content:""}.fa-walking:before{content:""}.fa-l:before{content:"L"}.fa-fire:before{content:""}.fa-bed-pulse:before{content:""}.fa-procedures:before{content:""}.fa-shuttle-space:before{content:""}.fa-space-shuttle:before{content:""}.fa-face-laugh:before{content:""}.fa-laugh:before{content:""}.fa-folder-open:before{content:""}.fa-heart-circle-plus:before{content:""}.fa-code-fork:before{content:""}.fa-city:before{content:""}.fa-microphone-lines:before{content:""}.fa-microphone-alt:before{content:""}.fa-pepper-hot:before{content:""}.fa-unlock:before{content:""}.fa-colon-sign:before{content:""}.fa-headset:before{content:""}.fa-store-slash:before{content:""}.fa-road-circle-xmark:before{content:""}.fa-user-minus:before{content:""}.fa-mars-stroke-up:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-champagne-glasses:before{content:""}.fa-glass-cheers:before{content:""}.fa-clipboard:before{content:""}.fa-house-circle-exclamation:before{content:""}.fa-file-arrow-up:before{content:""}.fa-file-upload:before{content:""}.fa-wifi:before{content:""}.fa-wifi-3:before{content:""}.fa-wifi-strong:before{content:""}.fa-bath:before{content:""}.fa-bathtub:before{content:""}.fa-underline:before{content:""}.fa-user-pen:before{content:""}.fa-user-edit:before{content:""}.fa-signature:before{content:""}.fa-stroopwafel:before{content:""}.fa-bold:before{content:""}.fa-anchor-lock:before{content:""}.fa-building-ngo:before{content:""}.fa-manat-sign:before{content:""}.fa-not-equal:before{content:""}.fa-border-top-left:before{content:""}.fa-border-style:before{content:""}.fa-map-location-dot:before{content:""}.fa-map-marked-alt:before{content:""}.fa-jedi:before{content:""}.fa-square-poll-vertical:before{content:""}.fa-poll:before{content:""}.fa-mug-hot:before{content:""}.fa-car-battery:before{content:""}.fa-battery-car:before{content:""}.fa-gift:before{content:""}.fa-dice-two:before{content:""}.fa-chess-queen:before{content:""}.fa-glasses:before{content:""}.fa-chess-board:before{content:""}.fa-building-circle-check:before{content:""}.fa-person-chalkboard:before{content:""}.fa-mars-stroke-right:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-hand-back-fist:before{content:""}.fa-hand-rock:before{content:""}.fa-square-caret-up:before{content:""}.fa-caret-square-up:before{content:""}.fa-cloud-showers-water:before{content:""}.fa-chart-bar:before{content:""}.fa-bar-chart:before{content:""}.fa-hands-bubbles:before{content:""}.fa-hands-wash:before{content:""}.fa-less-than-equal:before{content:""}.fa-train:before{content:""}.fa-eye-low-vision:before{content:""}.fa-low-vision:before{content:""}.fa-crow:before{content:""}.fa-sailboat:before{content:""}.fa-window-restore:before{content:""}.fa-square-plus:before{content:""}.fa-plus-square:before{content:""}.fa-torii-gate:before{content:""}.fa-frog:before{content:""}.fa-bucket:before{content:""}.fa-image:before{content:""}.fa-microphone:before{content:""}.fa-cow:before{content:""}.fa-caret-up:before{content:""}.fa-screwdriver:before{content:""}.fa-folder-closed:before{content:""}.fa-house-tsunami:before{content:""}.fa-square-nfi:before{content:""}.fa-arrow-up-from-ground-water:before{content:""}.fa-martini-glass:before{content:""}.fa-glass-martini-alt:before{content:""}.fa-rotate-left:before{content:""}.fa-rotate-back:before{content:""}.fa-rotate-backward:before{content:""}.fa-undo-alt:before{content:""}.fa-table-columns:before{content:""}.fa-columns:before{content:""}.fa-lemon:before{content:""}.fa-head-side-mask:before{content:""}.fa-handshake:before{content:""}.fa-gem:before{content:""}.fa-dolly:before{content:""}.fa-dolly-box:before{content:""}.fa-smoking:before{content:""}.fa-minimize:before{content:""}.fa-compress-arrows-alt:before{content:""}.fa-monument:before{content:""}.fa-snowplow:before{content:""}.fa-angles-right:before{content:""}.fa-angle-double-right:before{content:""}.fa-cannabis:before{content:""}.fa-circle-play:before{content:""}.fa-play-circle:before{content:""}.fa-tablets:before{content:""}.fa-ethernet:before{content:""}.fa-euro-sign:before{content:""}.fa-eur:before{content:""}.fa-euro:before{content:""}.fa-chair:before{content:""}.fa-circle-check:before{content:""}.fa-check-circle:before{content:""}.fa-circle-stop:before{content:""}.fa-stop-circle:before{content:""}.fa-compass-drafting:before{content:""}.fa-drafting-compass:before{content:""}.fa-plate-wheat:before{content:""}.fa-icicles:before{content:""}.fa-person-shelter:before{content:""}.fa-neuter:before{content:""}.fa-id-badge:before{content:""}.fa-marker:before{content:""}.fa-face-laugh-beam:before{content:""}.fa-laugh-beam:before{content:""}.fa-helicopter-symbol:before{content:""}.fa-universal-access:before{content:""}.fa-circle-chevron-up:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-lari-sign:before{content:""}.fa-volcano:before{content:""}.fa-person-walking-dashed-line-arrow-right:before{content:""}.fa-sterling-sign:before{content:""}.fa-gbp:before{content:""}.fa-pound-sign:before{content:""}.fa-viruses:before{content:""}.fa-square-person-confined:before{content:""}.fa-user-tie:before{content:""}.fa-arrow-down-long:before{content:""}.fa-long-arrow-down:before{content:""}.fa-tent-arrow-down-to-line:before{content:""}.fa-certificate:before{content:""}.fa-reply-all:before{content:""}.fa-mail-reply-all:before{content:""}.fa-suitcase:before{content:""}.fa-person-skating:before{content:""}.fa-skating:before{content:""}.fa-filter-circle-dollar:before{content:""}.fa-funnel-dollar:before{content:""}.fa-camera-retro:before{content:""}.fa-circle-arrow-down:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-file-import:before{content:""}.fa-arrow-right-to-file:before{content:""}.fa-square-arrow-up-right:before{content:""}.fa-external-link-square:before{content:""}.fa-box-open:before{content:""}.fa-scroll:before{content:""}.fa-spa:before{content:""}.fa-location-pin-lock:before{content:""}.fa-pause:before{content:""}.fa-hill-avalanche:before{content:""}.fa-temperature-empty:before{content:""}.fa-temperature-0:before{content:""}.fa-thermometer-0:before{content:""}.fa-thermometer-empty:before{content:""}.fa-bomb:before{content:""}.fa-registered:before{content:""}.fa-address-card:before{content:""}.fa-contact-card:before{content:""}.fa-vcard:before{content:""}.fa-scale-unbalanced-flip:before{content:""}.fa-balance-scale-right:before{content:""}.fa-subscript:before{content:""}.fa-diamond-turn-right:before{content:""}.fa-directions:before{content:""}.fa-burst:before{content:""}.fa-house-laptop:before{content:""}.fa-laptop-house:before{content:""}.fa-face-tired:before{content:""}.fa-tired:before{content:""}.fa-money-bills:before{content:""}.fa-smog:before{content:""}.fa-crutch:before{content:""}.fa-cloud-arrow-up:before{content:""}.fa-cloud-upload:before{content:""}.fa-cloud-upload-alt:before{content:""}.fa-palette:before{content:""}.fa-arrows-turn-right:before{content:""}.fa-vest:before{content:""}.fa-ferry:before{content:""}.fa-arrows-down-to-people:before{content:""}.fa-seedling:before{content:""}.fa-sprout:before{content:""}.fa-left-right:before{content:""}.fa-arrows-alt-h:before{content:""}.fa-boxes-packing:before{content:""}.fa-circle-arrow-left:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-group-arrows-rotate:before{content:""}.fa-bowl-food:before{content:""}.fa-candy-cane:before{content:""}.fa-arrow-down-wide-short:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-down:before{content:""}.fa-cloud-bolt:before{content:""}.fa-thunderstorm:before{content:""}.fa-text-slash:before{content:""}.fa-remove-format:before{content:""}.fa-face-smile-wink:before{content:""}.fa-smile-wink:before{content:""}.fa-file-word:before{content:""}.fa-file-powerpoint:before{content:""}.fa-arrows-left-right:before{content:""}.fa-arrows-h:before{content:""}.fa-house-lock:before{content:""}.fa-cloud-arrow-down:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-download-alt:before{content:""}.fa-children:before{content:""}.fa-chalkboard:before{content:""}.fa-blackboard:before{content:""}.fa-user-large-slash:before{content:""}.fa-user-alt-slash:before{content:""}.fa-envelope-open:before{content:""}.fa-handshake-simple-slash:before{content:""}.fa-handshake-alt-slash:before{content:""}.fa-mattress-pillow:before{content:""}.fa-guarani-sign:before{content:""}.fa-arrows-rotate:before{content:""}.fa-refresh:before{content:""}.fa-sync:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-cruzeiro-sign:before{content:""}.fa-greater-than-equal:before{content:""}.fa-shield-halved:before{content:""}.fa-shield-alt:before{content:""}.fa-book-atlas:before{content:""}.fa-atlas:before{content:""}.fa-virus:before{content:""}.fa-envelope-circle-check:before{content:""}.fa-layer-group:before{content:""}.fa-arrows-to-dot:before{content:""}.fa-archway:before{content:""}.fa-heart-circle-check:before{content:""}.fa-house-chimney-crack:before{content:""}.fa-house-damage:before{content:""}.fa-file-zipper:before{content:""}.fa-file-archive:before{content:""}.fa-square:before{content:""}.fa-martini-glass-empty:before{content:""}.fa-glass-martini:before{content:""}.fa-couch:before{content:""}.fa-cedi-sign:before{content:""}.fa-italic:before{content:""}.fa-church:before{content:""}.fa-comments-dollar:before{content:""}.fa-democrat:before{content:""}.fa-z:before{content:"Z"}.fa-person-skiing:before{content:""}.fa-skiing:before{content:""}.fa-road-lock:before{content:""}.fa-a:before{content:"A"}.fa-temperature-arrow-down:before{content:""}.fa-temperature-down:before{content:""}.fa-feather-pointed:before{content:""}.fa-feather-alt:before{content:""}.fa-p:before{content:"P"}.fa-snowflake:before{content:""}.fa-newspaper:before{content:""}.fa-rectangle-ad:before{content:""}.fa-ad:before{content:""}.fa-circle-arrow-right:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-filter-circle-xmark:before{content:""}.fa-locust:before{content:""}.fa-sort:before{content:""}.fa-unsorted:before{content:""}.fa-list-ol:before{content:""}.fa-list-1-2:before{content:""}.fa-list-numeric:before{content:""}.fa-person-dress-burst:before{content:""}.fa-money-check-dollar:before{content:""}.fa-money-check-alt:before{content:""}.fa-vector-square:before{content:""}.fa-bread-slice:before{content:""}.fa-language:before{content:""}.fa-face-kiss-wink-heart:before{content:""}.fa-kiss-wink-heart:before{content:""}.fa-filter:before{content:""}.fa-question:before{content:"?"}.fa-file-signature:before{content:""}.fa-up-down-left-right:before{content:""}.fa-arrows-alt:before{content:""}.fa-house-chimney-user:before{content:""}.fa-hand-holding-heart:before{content:""}.fa-puzzle-piece:before{content:""}.fa-money-check:before{content:""}.fa-star-half-stroke:before{content:""}.fa-star-half-alt:before{content:""}.fa-code:before{content:""}.fa-whiskey-glass:before{content:""}.fa-glass-whiskey:before{content:""}.fa-building-circle-exclamation:before{content:""}.fa-magnifying-glass-chart:before{content:""}.fa-arrow-up-right-from-square:before{content:""}.fa-external-link:before{content:""}.fa-cubes-stacked:before{content:""}.fa-won-sign:before{content:""}.fa-krw:before{content:""}.fa-won:before{content:""}.fa-virus-covid:before{content:""}.fa-austral-sign:before{content:""}.fa-f:before{content:"F"}.fa-leaf:before{content:""}.fa-road:before{content:""}.fa-taxi:before{content:""}.fa-cab:before{content:""}.fa-person-circle-plus:before{content:""}.fa-chart-pie:before{content:""}.fa-pie-chart:before{content:""}.fa-bolt-lightning:before{content:""}.fa-sack-xmark:before{content:""}.fa-file-excel:before{content:""}.fa-file-contract:before{content:""}.fa-fish-fins:before{content:""}.fa-building-flag:before{content:""}.fa-face-grin-beam:before{content:""}.fa-grin-beam:before{content:""}.fa-object-ungroup:before{content:""}.fa-poop:before{content:""}.fa-location-pin:before{content:""}.fa-map-marker:before{content:""}.fa-kaaba:before{content:""}.fa-toilet-paper:before{content:""}.fa-helmet-safety:before{content:""}.fa-hard-hat:before{content:""}.fa-hat-hard:before{content:""}.fa-eject:before{content:""}.fa-circle-right:before{content:""}.fa-arrow-alt-circle-right:before{content:""}.fa-plane-circle-check:before{content:""}.fa-face-rolling-eyes:before{content:""}.fa-meh-rolling-eyes:before{content:""}.fa-object-group:before{content:""}.fa-chart-line:before{content:""}.fa-line-chart:before{content:""}.fa-mask-ventilator:before{content:""}.fa-arrow-right:before{content:""}.fa-signs-post:before{content:""}.fa-map-signs:before{content:""}.fa-cash-register:before{content:""}.fa-person-circle-question:before{content:""}.fa-h:before{content:"H"}.fa-tarp:before{content:""}.fa-screwdriver-wrench:before{content:""}.fa-tools:before{content:""}.fa-arrows-to-eye:before{content:""}.fa-plug-circle-bolt:before{content:""}.fa-heart:before{content:""}.fa-mars-and-venus:before{content:""}.fa-house-user:before{content:""}.fa-home-user:before{content:""}.fa-dumpster-fire:before{content:""}.fa-house-crack:before{content:""}.fa-martini-glass-citrus:before{content:""}.fa-cocktail:before{content:""}.fa-face-surprise:before{content:""}.fa-surprise:before{content:""}.fa-bottle-water:before{content:""}.fa-circle-pause:before{content:""}.fa-pause-circle:before{content:""}.fa-toilet-paper-slash:before{content:""}.fa-apple-whole:before{content:""}.fa-apple-alt:before{content:""}.fa-kitchen-set:before{content:""}.fa-r:before{content:"R"}.fa-temperature-quarter:before{content:""}.fa-temperature-1:before{content:""}.fa-thermometer-1:before{content:""}.fa-thermometer-quarter:before{content:""}.fa-cube:before{content:""}.fa-bitcoin-sign:before{content:""}.fa-shield-dog:before{content:""}.fa-solar-panel:before{content:""}.fa-lock-open:before{content:""}.fa-elevator:before{content:""}.fa-money-bill-transfer:before{content:""}.fa-money-bill-trend-up:before{content:""}.fa-house-flood-water-circle-arrow-right:before{content:""}.fa-square-poll-horizontal:before{content:""}.fa-poll-h:before{content:""}.fa-circle:before{content:""}.fa-backward-fast:before{content:""}.fa-fast-backward:before{content:""}.fa-recycle:before{content:""}.fa-user-astronaut:before{content:""}.fa-plane-slash:before{content:""}.fa-trademark:before{content:""}.fa-basketball:before{content:""}.fa-basketball-ball:before{content:""}.fa-satellite-dish:before{content:""}.fa-circle-up:before{content:""}.fa-arrow-alt-circle-up:before{content:""}.fa-mobile-screen-button:before{content:""}.fa-mobile-alt:before{content:""}.fa-volume-high:before{content:""}.fa-volume-up:before{content:""}.fa-users-rays:before{content:""}.fa-wallet:before{content:""}.fa-clipboard-check:before{content:""}.fa-file-audio:before{content:""}.fa-burger:before{content:""}.fa-hamburger:before{content:""}.fa-wrench:before{content:""}.fa-bugs:before{content:""}.fa-rupee-sign:before{content:""}.fa-rupee:before{content:""}.fa-file-image:before{content:""}.fa-circle-question:before{content:""}.fa-question-circle:before{content:""}.fa-plane-departure:before{content:""}.fa-handshake-slash:before{content:""}.fa-book-bookmark:before{content:""}.fa-code-branch:before{content:""}.fa-hat-cowboy:before{content:""}.fa-bridge:before{content:""}.fa-phone-flip:before{content:""}.fa-phone-alt:before{content:""}.fa-truck-front:before{content:""}.fa-cat:before{content:""}.fa-anchor-circle-exclamation:before{content:""}.fa-truck-field:before{content:""}.fa-route:before{content:""}.fa-clipboard-question:before{content:""}.fa-panorama:before{content:""}.fa-comment-medical:before{content:""}.fa-teeth-open:before{content:""}.fa-file-circle-minus:before{content:""}.fa-tags:before{content:""}.fa-wine-glass:before{content:""}.fa-forward-fast:before{content:""}.fa-fast-forward:before{content:""}.fa-face-meh-blank:before{content:""}.fa-meh-blank:before{content:""}.fa-square-parking:before{content:""}.fa-parking:before{content:""}.fa-house-signal:before{content:""}.fa-bars-progress:before{content:""}.fa-tasks-alt:before{content:""}.fa-faucet-drip:before{content:""}.fa-cart-flatbed:before{content:""}.fa-dolly-flatbed:before{content:""}.fa-ban-smoking:before{content:""}.fa-smoking-ban:before{content:""}.fa-terminal:before{content:""}.fa-mobile-button:before{content:""}.fa-house-medical-flag:before{content:""}.fa-basket-shopping:before{content:""}.fa-shopping-basket:before{content:""}.fa-tape:before{content:""}.fa-bus-simple:before{content:""}.fa-bus-alt:before{content:""}.fa-eye:before{content:""}.fa-face-sad-cry:before{content:""}.fa-sad-cry:before{content:""}.fa-audio-description:before{content:""}.fa-person-military-to-person:before{content:""}.fa-file-shield:before{content:""}.fa-user-slash:before{content:""}.fa-pen:before{content:""}.fa-tower-observation:before{content:""}.fa-file-code:before{content:""}.fa-signal:before{content:""}.fa-signal-5:before{content:""}.fa-signal-perfect:before{content:""}.fa-bus:before{content:""}.fa-heart-circle-xmark:before{content:""}.fa-house-chimney:before{content:""}.fa-home-lg:before{content:""}.fa-window-maximize:before{content:""}.fa-face-frown:before{content:""}.fa-frown:before{content:""}.fa-prescription:before{content:""}.fa-shop:before{content:""}.fa-store-alt:before{content:""}.fa-floppy-disk:before{content:""}.fa-save:before{content:""}.fa-vihara:before{content:""}.fa-scale-unbalanced:before{content:""}.fa-balance-scale-left:before{content:""}.fa-sort-up:before{content:""}.fa-sort-asc:before{content:""}.fa-comment-dots:before{content:""}.fa-commenting:before{content:""}.fa-plant-wilt:before{content:""}.fa-diamond:before{content:""}.fa-face-grin-squint:before{content:""}.fa-grin-squint:before{content:""}.fa-hand-holding-dollar:before{content:""}.fa-hand-holding-usd:before{content:""}.fa-bacterium:before{content:""}.fa-hand-pointer:before{content:""}.fa-drum-steelpan:before{content:""}.fa-hand-scissors:before{content:""}.fa-hands-praying:before{content:""}.fa-praying-hands:before{content:""}.fa-arrow-rotate-right:before{content:""}.fa-arrow-right-rotate:before{content:""}.fa-arrow-rotate-forward:before{content:""}.fa-redo:before{content:""}.fa-biohazard:before{content:""}.fa-location-crosshairs:before{content:""}.fa-location:before{content:""}.fa-mars-double:before{content:""}.fa-child-dress:before{content:""}.fa-users-between-lines:before{content:""}.fa-lungs-virus:before{content:""}.fa-face-grin-tears:before{content:""}.fa-grin-tears:before{content:""}.fa-phone:before{content:""}.fa-calendar-xmark:before{content:""}.fa-calendar-times:before{content:""}.fa-child-reaching:before{content:""}.fa-head-side-virus:before{content:""}.fa-user-gear:before{content:""}.fa-user-cog:before{content:""}.fa-arrow-up-1-9:before{content:""}.fa-sort-numeric-up:before{content:""}.fa-door-closed:before{content:""}.fa-shield-virus:before{content:""}.fa-dice-six:before{content:""}.fa-mosquito-net:before{content:""}.fa-bridge-water:before{content:""}.fa-person-booth:before{content:""}.fa-text-width:before{content:""}.fa-hat-wizard:before{content:""}.fa-pen-fancy:before{content:""}.fa-person-digging:before{content:""}.fa-digging:before{content:""}.fa-trash:before{content:""}.fa-gauge-simple:before{content:""}.fa-gauge-simple-med:before{content:""}.fa-tachometer-average:before{content:""}.fa-book-medical:before{content:""}.fa-poo:before{content:""}.fa-quote-right:before{content:""}.fa-quote-right-alt:before{content:""}.fa-shirt:before{content:""}.fa-t-shirt:before{content:""}.fa-tshirt:before{content:""}.fa-cubes:before{content:""}.fa-divide:before{content:""}.fa-tenge-sign:before{content:""}.fa-tenge:before{content:""}.fa-headphones:before{content:""}.fa-hands-holding:before{content:""}.fa-hands-clapping:before{content:""}.fa-republican:before{content:""}.fa-arrow-left:before{content:""}.fa-person-circle-xmark:before{content:""}.fa-ruler:before{content:""}.fa-align-left:before{content:""}.fa-dice-d6:before{content:""}.fa-restroom:before{content:""}.fa-j:before{content:"J"}.fa-users-viewfinder:before{content:""}.fa-file-video:before{content:""}.fa-up-right-from-square:before{content:""}.fa-external-link-alt:before{content:""}.fa-table-cells:before{content:""}.fa-th:before{content:""}.fa-file-pdf:before{content:""}.fa-book-bible:before{content:""}.fa-bible:before{content:""}.fa-o:before{content:"O"}.fa-suitcase-medical:before{content:""}.fa-medkit:before{content:""}.fa-user-secret:before{content:""}.fa-otter:before{content:""}.fa-person-dress:before{content:""}.fa-female:before{content:""}.fa-comment-dollar:before{content:""}.fa-business-time:before{content:""}.fa-briefcase-clock:before{content:""}.fa-table-cells-large:before{content:""}.fa-th-large:before{content:""}.fa-book-tanakh:before{content:""}.fa-tanakh:before{content:""}.fa-phone-volume:before{content:""}.fa-volume-control-phone:before{content:""}.fa-hat-cowboy-side:before{content:""}.fa-clipboard-user:before{content:""}.fa-child:before{content:""}.fa-lira-sign:before{content:""}.fa-satellite:before{content:""}.fa-plane-lock:before{content:""}.fa-tag:before{content:""}.fa-comment:before{content:""}.fa-cake-candles:before{content:""}.fa-birthday-cake:before{content:""}.fa-cake:before{content:""}.fa-envelope:before{content:""}.fa-angles-up:before{content:""}.fa-angle-double-up:before{content:""}.fa-paperclip:before{content:""}.fa-arrow-right-to-city:before{content:""}.fa-ribbon:before{content:""}.fa-lungs:before{content:""}.fa-arrow-up-9-1:before{content:""}.fa-sort-numeric-up-alt:before{content:""}.fa-litecoin-sign:before{content:""}.fa-border-none:before{content:""}.fa-circle-nodes:before{content:""}.fa-parachute-box:before{content:""}.fa-indent:before{content:""}.fa-truck-field-un:before{content:""}.fa-hourglass:before{content:""}.fa-hourglass-empty:before{content:""}.fa-mountain:before{content:""}.fa-user-doctor:before{content:""}.fa-user-md:before{content:""}.fa-circle-info:before{content:""}.fa-info-circle:before{content:""}.fa-cloud-meatball:before{content:""}.fa-camera:before{content:""}.fa-camera-alt:before{content:""}.fa-square-virus:before{content:""}.fa-meteor:before{content:""}.fa-car-on:before{content:""}.fa-sleigh:before{content:""}.fa-arrow-down-1-9:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-down:before{content:""}.fa-hand-holding-droplet:before{content:""}.fa-hand-holding-water:before{content:""}.fa-water:before{content:""}.fa-calendar-check:before{content:""}.fa-braille:before{content:""}.fa-prescription-bottle-medical:before{content:""}.fa-prescription-bottle-alt:before{content:""}.fa-landmark:before{content:""}.fa-truck:before{content:""}.fa-crosshairs:before{content:""}.fa-person-cane:before{content:""}.fa-tent:before{content:""}.fa-vest-patches:before{content:""}.fa-check-double:before{content:""}.fa-arrow-down-a-z:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-down:before{content:""}.fa-money-bill-wheat:before{content:""}.fa-cookie:before{content:""}.fa-arrow-rotate-left:before{content:""}.fa-arrow-left-rotate:before{content:""}.fa-arrow-rotate-back:before{content:""}.fa-arrow-rotate-backward:before{content:""}.fa-undo:before{content:""}.fa-hard-drive:before{content:""}.fa-hdd:before{content:""}.fa-face-grin-squint-tears:before{content:""}.fa-grin-squint-tears:before{content:""}.fa-dumbbell:before{content:""}.fa-rectangle-list:before{content:""}.fa-list-alt:before{content:""}.fa-tarp-droplet:before{content:""}.fa-house-medical-circle-check:before{content:""}.fa-person-skiing-nordic:before{content:""}.fa-skiing-nordic:before{content:""}.fa-calendar-plus:before{content:""}.fa-plane-arrival:before{content:""}.fa-circle-left:before{content:""}.fa-arrow-alt-circle-left:before{content:""}.fa-train-subway:before{content:""}.fa-subway:before{content:""}.fa-chart-gantt:before{content:""}.fa-indian-rupee-sign:before{content:""}.fa-indian-rupee:before{content:""}.fa-inr:before{content:""}.fa-crop-simple:before{content:""}.fa-crop-alt:before{content:""}.fa-money-bill-1:before{content:""}.fa-money-bill-alt:before{content:""}.fa-left-long:before{content:""}.fa-long-arrow-alt-left:before{content:""}.fa-dna:before{content:""}.fa-virus-slash:before{content:""}.fa-minus:before{content:""}.fa-subtract:before{content:""}.fa-chess:before{content:""}.fa-arrow-left-long:before{content:""}.fa-long-arrow-left:before{content:""}.fa-plug-circle-check:before{content:""}.fa-street-view:before{content:""}.fa-franc-sign:before{content:""}.fa-volume-off:before{content:""}.fa-hands-asl-interpreting:before{content:""}.fa-american-sign-language-interpreting:before{content:""}.fa-asl-interpreting:before{content:""}.fa-hands-american-sign-language-interpreting:before{content:""}.fa-gear:before{content:""}.fa-cog:before{content:""}.fa-droplet-slash:before{content:""}.fa-tint-slash:before{content:""}.fa-mosque:before{content:""}.fa-mosquito:before{content:""}.fa-star-of-david:before{content:""}.fa-person-military-rifle:before{content:""}.fa-cart-shopping:before{content:""}.fa-shopping-cart:before{content:""}.fa-vials:before{content:""}.fa-plug-circle-plus:before{content:""}.fa-place-of-worship:before{content:""}.fa-grip-vertical:before{content:""}.fa-arrow-turn-up:before{content:""}.fa-level-up:before{content:""}.fa-u:before{content:"U"}.fa-square-root-variable:before{content:""}.fa-square-root-alt:before{content:""}.fa-clock:before{content:""}.fa-clock-four:before{content:""}.fa-backward-step:before{content:""}.fa-step-backward:before{content:""}.fa-pallet:before{content:""}.fa-faucet:before{content:""}.fa-baseball-bat-ball:before{content:""}.fa-s:before{content:"S"}.fa-timeline:before{content:""}.fa-keyboard:before{content:""}.fa-caret-down:before{content:""}.fa-house-chimney-medical:before{content:""}.fa-clinic-medical:before{content:""}.fa-temperature-three-quarters:before{content:""}.fa-temperature-3:before{content:""}.fa-thermometer-3:before{content:""}.fa-thermometer-three-quarters:before{content:""}.fa-mobile-screen:before{content:""}.fa-mobile-android-alt:before{content:""}.fa-plane-up:before{content:""}.fa-piggy-bank:before{content:""}.fa-battery-half:before{content:""}.fa-battery-3:before{content:""}.fa-mountain-city:before{content:""}.fa-coins:before{content:""}.fa-khanda:before{content:""}.fa-sliders:before{content:""}.fa-sliders-h:before{content:""}.fa-folder-tree:before{content:""}.fa-network-wired:before{content:""}.fa-map-pin:before{content:""}.fa-hamsa:before{content:""}.fa-cent-sign:before{content:""}.fa-flask:before{content:""}.fa-person-pregnant:before{content:""}.fa-wand-sparkles:before{content:""}.fa-ellipsis-vertical:before{content:""}.fa-ellipsis-v:before{content:""}.fa-ticket:before{content:""}.fa-power-off:before{content:""}.fa-right-long:before{content:""}.fa-long-arrow-alt-right:before{content:""}.fa-flag-usa:before{content:""}.fa-laptop-file:before{content:""}.fa-tty:before{content:""}.fa-teletype:before{content:""}.fa-diagram-next:before{content:""}.fa-person-rifle:before{content:""}.fa-house-medical-circle-exclamation:before{content:""}.fa-closed-captioning:before{content:""}.fa-person-hiking:before{content:""}.fa-hiking:before{content:""}.fa-venus-double:before{content:""}.fa-images:before{content:""}.fa-calculator:before{content:""}.fa-people-pulling:before{content:""}.fa-n:before{content:"N"}.fa-cable-car:before{content:""}.fa-tram:before{content:""}.fa-cloud-rain:before{content:""}.fa-building-circle-xmark:before{content:""}.fa-ship:before{content:""}.fa-arrows-down-to-line:before{content:""}.fa-download:before{content:""}.fa-face-grin:before{content:""}.fa-grin:before{content:""}.fa-delete-left:before{content:""}.fa-backspace:before{content:""}.fa-eye-dropper:before{content:""}.fa-eye-dropper-empty:before{content:""}.fa-eyedropper:before{content:""}.fa-file-circle-check:before{content:""}.fa-forward:before{content:""}.fa-mobile:before{content:""}.fa-mobile-android:before{content:""}.fa-mobile-phone:before{content:""}.fa-face-meh:before{content:""}.fa-meh:before{content:""}.fa-align-center:before{content:""}.fa-book-skull:before{content:""}.fa-book-dead:before{content:""}.fa-id-card:before{content:""}.fa-drivers-license:before{content:""}.fa-outdent:before{content:""}.fa-dedent:before{content:""}.fa-heart-circle-exclamation:before{content:""}.fa-house:before{content:""}.fa-home:before{content:""}.fa-home-alt:before{content:""}.fa-home-lg-alt:before{content:""}.fa-calendar-week:before{content:""}.fa-laptop-medical:before{content:""}.fa-b:before{content:"B"}.fa-file-medical:before{content:""}.fa-dice-one:before{content:""}.fa-kiwi-bird:before{content:""}.fa-arrow-right-arrow-left:before{content:""}.fa-exchange:before{content:""}.fa-rotate-right:before{content:""}.fa-redo-alt:before{content:""}.fa-rotate-forward:before{content:""}.fa-utensils:before{content:""}.fa-cutlery:before{content:""}.fa-arrow-up-wide-short:before{content:""}.fa-sort-amount-up:before{content:""}.fa-mill-sign:before{content:""}.fa-bowl-rice:before{content:""}.fa-skull:before{content:""}.fa-tower-broadcast:before{content:""}.fa-broadcast-tower:before{content:""}.fa-truck-pickup:before{content:""}.fa-up-long:before{content:""}.fa-long-arrow-alt-up:before{content:""}.fa-stop:before{content:""}.fa-code-merge:before{content:""}.fa-upload:before{content:""}.fa-hurricane:before{content:""}.fa-mound:before{content:""}.fa-toilet-portable:before{content:""}.fa-compact-disc:before{content:""}.fa-file-arrow-down:before{content:""}.fa-file-download:before{content:""}.fa-caravan:before{content:""}.fa-shield-cat:before{content:""}.fa-bolt:before{content:""}.fa-zap:before{content:""}.fa-glass-water:before{content:""}.fa-oil-well:before{content:""}.fa-vault:before{content:""}.fa-mars:before{content:""}.fa-toilet:before{content:""}.fa-plane-circle-xmark:before{content:""}.fa-yen-sign:before{content:""}.fa-cny:before{content:""}.fa-jpy:before{content:""}.fa-rmb:before{content:""}.fa-yen:before{content:""}.fa-ruble-sign:before{content:""}.fa-rouble:before{content:""}.fa-rub:before{content:""}.fa-ruble:before{content:""}.fa-sun:before{content:""}.fa-guitar:before{content:""}.fa-face-laugh-wink:before{content:""}.fa-laugh-wink:before{content:""}.fa-horse-head:before{content:""}.fa-bore-hole:before{content:""}.fa-industry:before{content:""}.fa-circle-down:before{content:""}.fa-arrow-alt-circle-down:before{content:""}.fa-arrows-turn-to-dots:before{content:""}.fa-florin-sign:before{content:""}.fa-arrow-down-short-wide:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-amount-down-alt:before{content:""}.fa-less-than:before{content:"<"}.fa-angle-down:before{content:""}.fa-car-tunnel:before{content:""}.fa-head-side-cough:before{content:""}.fa-grip-lines:before{content:""}.fa-thumbs-down:before{content:""}.fa-user-lock:before{content:""}.fa-arrow-right-long:before{content:""}.fa-long-arrow-right:before{content:""}.fa-anchor-circle-xmark:before{content:""}.fa-ellipsis:before{content:""}.fa-ellipsis-h:before{content:""}.fa-chess-pawn:before{content:""}.fa-kit-medical:before{content:""}.fa-first-aid:before{content:""}.fa-person-through-window:before{content:""}.fa-toolbox:before{content:""}.fa-hands-holding-circle:before{content:""}.fa-bug:before{content:""}.fa-credit-card:before{content:""}.fa-credit-card-alt:before{content:""}.fa-car:before{content:""}.fa-automobile:before{content:""}.fa-hand-holding-hand:before{content:""}.fa-book-open-reader:before{content:""}.fa-book-reader:before{content:""}.fa-mountain-sun:before{content:""}.fa-arrows-left-right-to-line:before{content:""}.fa-dice-d20:before{content:""}.fa-truck-droplet:before{content:""}.fa-file-circle-xmark:before{content:""}.fa-temperature-arrow-up:before{content:""}.fa-temperature-up:before{content:""}.fa-medal:before{content:""}.fa-bed:before{content:""}.fa-square-h:before{content:""}.fa-h-square:before{content:""}.fa-podcast:before{content:""}.fa-temperature-full:before{content:""}.fa-temperature-4:before{content:""}.fa-thermometer-4:before{content:""}.fa-thermometer-full:before{content:""}.fa-bell:before{content:""}.fa-superscript:before{content:""}.fa-plug-circle-xmark:before{content:""}.fa-star-of-life:before{content:""}.fa-phone-slash:before{content:""}.fa-paint-roller:before{content:""}.fa-handshake-angle:before{content:""}.fa-hands-helping:before{content:""}.fa-location-dot:before{content:""}.fa-map-marker-alt:before{content:""}.fa-file:before{content:""}.fa-greater-than:before{content:">"}.fa-person-swimming:before{content:""}.fa-swimmer:before{content:""}.fa-arrow-down:before{content:""}.fa-droplet:before{content:""}.fa-tint:before{content:""}.fa-eraser:before{content:""}.fa-earth-americas:before{content:""}.fa-earth:before{content:""}.fa-earth-america:before{content:""}.fa-globe-americas:before{content:""}.fa-person-burst:before{content:""}.fa-dove:before{content:""}.fa-battery-empty:before{content:""}.fa-battery-0:before{content:""}.fa-socks:before{content:""}.fa-inbox:before{content:""}.fa-section:before{content:""}.fa-gauge-high:before{content:""}.fa-tachometer-alt:before{content:""}.fa-tachometer-alt-fast:before{content:""}.fa-envelope-open-text:before{content:""}.fa-hospital:before{content:""}.fa-hospital-alt:before{content:""}.fa-hospital-wide:before{content:""}.fa-wine-bottle:before{content:""}.fa-chess-rook:before{content:""}.fa-bars-staggered:before{content:""}.fa-reorder:before{content:""}.fa-stream:before{content:""}.fa-dharmachakra:before{content:""}.fa-hotdog:before{content:""}.fa-person-walking-with-cane:before{content:""}.fa-blind:before{content:""}.fa-drum:before{content:""}.fa-ice-cream:before{content:""}.fa-heart-circle-bolt:before{content:""}.fa-fax:before{content:""}.fa-paragraph:before{content:""}.fa-check-to-slot:before{content:""}.fa-vote-yea:before{content:""}.fa-star-half:before{content:""}.fa-boxes-stacked:before{content:""}.fa-boxes:before{content:""}.fa-boxes-alt:before{content:""}.fa-link:before{content:""}.fa-chain:before{content:""}.fa-ear-listen:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-tree-city:before{content:""}.fa-play:before{content:""}.fa-font:before{content:""}.fa-rupiah-sign:before{content:""}.fa-magnifying-glass:before{content:""}.fa-search:before{content:""}.fa-table-tennis-paddle-ball:before{content:""}.fa-ping-pong-paddle-ball:before{content:""}.fa-table-tennis:before{content:""}.fa-person-dots-from-line:before{content:""}.fa-diagnoses:before{content:""}.fa-trash-can-arrow-up:before{content:""}.fa-trash-restore-alt:before{content:""}.fa-naira-sign:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-walkie-talkie:before{content:""}.fa-file-pen:before{content:""}.fa-file-edit:before{content:""}.fa-receipt:before{content:""}.fa-square-pen:before{content:""}.fa-pen-square:before{content:""}.fa-pencil-square:before{content:""}.fa-suitcase-rolling:before{content:""}.fa-person-circle-exclamation:before{content:""}.fa-chevron-down:before{content:""}.fa-battery-full:before{content:""}.fa-battery:before{content:""}.fa-battery-5:before{content:""}.fa-skull-crossbones:before{content:""}.fa-code-compare:before{content:""}.fa-list-ul:before{content:""}.fa-list-dots:before{content:""}.fa-school-lock:before{content:""}.fa-tower-cell:before{content:""}.fa-down-long:before{content:""}.fa-long-arrow-alt-down:before{content:""}.fa-ranking-star:before{content:""}.fa-chess-king:before{content:""}.fa-person-harassing:before{content:""}.fa-brazilian-real-sign:before{content:""}.fa-landmark-dome:before{content:""}.fa-landmark-alt:before{content:""}.fa-arrow-up:before{content:""}.fa-tv:before{content:""}.fa-television:before{content:""}.fa-tv-alt:before{content:""}.fa-shrimp:before{content:""}.fa-list-check:before{content:""}.fa-tasks:before{content:""}.fa-jug-detergent:before{content:""}.fa-circle-user:before{content:""}.fa-user-circle:before{content:""}.fa-user-shield:before{content:""}.fa-wind:before{content:""}.fa-car-burst:before{content:""}.fa-car-crash:before{content:""}.fa-y:before{content:"Y"}.fa-person-snowboarding:before{content:""}.fa-snowboarding:before{content:""}.fa-truck-fast:before{content:""}.fa-shipping-fast:before{content:""}.fa-fish:before{content:""}.fa-user-graduate:before{content:""}.fa-circle-half-stroke:before{content:""}.fa-adjust:before{content:""}.fa-clapperboard:before{content:""}.fa-circle-radiation:before{content:""}.fa-radiation-alt:before{content:""}.fa-baseball:before{content:""}.fa-baseball-ball:before{content:""}.fa-jet-fighter-up:before{content:""}.fa-diagram-project:before{content:""}.fa-project-diagram:before{content:""}.fa-copy:before{content:""}.fa-volume-xmark:before{content:""}.fa-volume-mute:before{content:""}.fa-volume-times:before{content:""}.fa-hand-sparkles:before{content:""}.fa-grip:before{content:""}.fa-grip-horizontal:before{content:""}.fa-share-from-square:before{content:""}.fa-share-square:before{content:""}.fa-child-combatant:before{content:""}.fa-child-rifle:before{content:""}.fa-gun:before{content:""}.fa-square-phone:before{content:""}.fa-phone-square:before{content:""}.fa-plus:before{content:"+"}.fa-add:before{content:"+"}.fa-expand:before{content:""}.fa-computer:before{content:""}.fa-xmark:before{content:""}.fa-close:before{content:""}.fa-multiply:before{content:""}.fa-remove:before{content:""}.fa-times:before{content:""}.fa-arrows-up-down-left-right:before{content:""}.fa-arrows:before{content:""}.fa-chalkboard-user:before{content:""}.fa-chalkboard-teacher:before{content:""}.fa-peso-sign:before{content:""}.fa-building-shield:before{content:""}.fa-baby:before{content:""}.fa-users-line:before{content:""}.fa-quote-left:before{content:""}.fa-quote-left-alt:before{content:""}.fa-tractor:before{content:""}.fa-trash-arrow-up:before{content:""}.fa-trash-restore:before{content:""}.fa-arrow-down-up-lock:before{content:""}.fa-lines-leaning:before{content:""}.fa-ruler-combined:before{content:""}.fa-copyright:before{content:""}.fa-equals:before{content:"="}.fa-blender:before{content:""}.fa-teeth:before{content:""}.fa-shekel-sign:before{content:""}.fa-ils:before{content:""}.fa-shekel:before{content:""}.fa-sheqel:before{content:""}.fa-sheqel-sign:before{content:""}.fa-map:before{content:""}.fa-rocket:before{content:""}.fa-photo-film:before{content:""}.fa-photo-video:before{content:""}.fa-folder-minus:before{content:""}.fa-store:before{content:""}.fa-arrow-trend-up:before{content:""}.fa-plug-circle-minus:before{content:""}.fa-sign-hanging:before{content:""}.fa-sign:before{content:""}.fa-bezier-curve:before{content:""}.fa-bell-slash:before{content:""}.fa-tablet:before{content:""}.fa-tablet-android:before{content:""}.fa-school-flag:before{content:""}.fa-fill:before{content:""}.fa-angle-up:before{content:""}.fa-drumstick-bite:before{content:""}.fa-holly-berry:before{content:""}.fa-chevron-left:before{content:""}.fa-bacteria:before{content:""}.fa-hand-lizard:before{content:""}.fa-notdef:before{content:""}.fa-disease:before{content:""}.fa-briefcase-medical:before{content:""}.fa-genderless:before{content:""}.fa-chevron-right:before{content:""}.fa-retweet:before{content:""}.fa-car-rear:before{content:""}.fa-car-alt:before{content:""}.fa-pump-soap:before{content:""}.fa-video-slash:before{content:""}.fa-battery-quarter:before{content:""}.fa-battery-2:before{content:""}.fa-radio:before{content:""}.fa-baby-carriage:before{content:""}.fa-carriage-baby:before{content:""}.fa-traffic-light:before{content:""}.fa-thermometer:before{content:""}.fa-vr-cardboard:before{content:""}.fa-hand-middle-finger:before{content:""}.fa-percent:before{content:"%"}.fa-percentage:before{content:"%"}.fa-truck-moving:before{content:""}.fa-glass-water-droplet:before{content:""}.fa-display:before{content:""}.fa-face-smile:before{content:""}.fa-smile:before{content:""}.fa-thumbtack:before{content:""}.fa-thumb-tack:before{content:""}.fa-trophy:before{content:""}.fa-person-praying:before{content:""}.fa-pray:before{content:""}.fa-hammer:before{content:""}.fa-hand-peace:before{content:""}.fa-rotate:before{content:""}.fa-sync-alt:before{content:""}.fa-spinner:before{content:""}.fa-robot:before{content:""}.fa-peace:before{content:""}.fa-gears:before{content:""}.fa-cogs:before{content:""}.fa-warehouse:before{content:""}.fa-arrow-up-right-dots:before{content:""}.fa-splotch:before{content:""}.fa-face-grin-hearts:before{content:""}.fa-grin-hearts:before{content:""}.fa-dice-four:before{content:""}.fa-sim-card:before{content:""}.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-mercury:before{content:""}.fa-arrow-turn-down:before{content:""}.fa-level-down:before{content:""}.fa-person-falling-burst:before{content:""}.fa-award:before{content:""}.fa-ticket-simple:before{content:""}.fa-ticket-alt:before{content:""}.fa-building:before{content:""}.fa-angles-left:before{content:""}.fa-angle-double-left:before{content:""}.fa-qrcode:before{content:""}.fa-clock-rotate-left:before{content:""}.fa-history:before{content:""}.fa-face-grin-beam-sweat:before{content:""}.fa-grin-beam-sweat:before{content:""}.fa-file-export:before{content:""}.fa-arrow-right-from-file:before{content:""}.fa-shield:before{content:""}.fa-shield-blank:before{content:""}.fa-arrow-up-short-wide:before{content:""}.fa-sort-amount-up-alt:before{content:""}.fa-house-medical:before{content:""}.fa-golf-ball-tee:before{content:""}.fa-golf-ball:before{content:""}.fa-circle-chevron-left:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-house-chimney-window:before{content:""}.fa-pen-nib:before{content:""}.fa-tent-arrow-turn-left:before{content:""}.fa-tents:before{content:""}.fa-wand-magic:before{content:""}.fa-magic:before{content:""}.fa-dog:before{content:""}.fa-carrot:before{content:""}.fa-moon:before{content:""}.fa-wine-glass-empty:before{content:""}.fa-wine-glass-alt:before{content:""}.fa-cheese:before{content:""}.fa-yin-yang:before{content:""}.fa-music:before{content:""}.fa-code-commit:before{content:""}.fa-temperature-low:before{content:""}.fa-person-biking:before{content:""}.fa-biking:before{content:""}.fa-broom:before{content:""}.fa-shield-heart:before{content:""}.fa-gopuram:before{content:""}.fa-earth-oceania:before{content:""}.fa-globe-oceania:before{content:""}.fa-square-xmark:before{content:""}.fa-times-square:before{content:""}.fa-xmark-square:before{content:""}.fa-hashtag:before{content:"#"}.fa-up-right-and-down-left-from-center:before{content:""}.fa-expand-alt:before{content:""}.fa-oil-can:before{content:""}.fa-t:before{content:"T"}.fa-hippo:before{content:""}.fa-chart-column:before{content:""}.fa-infinity:before{content:""}.fa-vial-circle-check:before{content:""}.fa-person-arrow-down-to-line:before{content:""}.fa-voicemail:before{content:""}.fa-fan:before{content:""}.fa-person-walking-luggage:before{content:""}.fa-up-down:before{content:""}.fa-arrows-alt-v:before{content:""}.fa-cloud-moon-rain:before{content:""}.fa-calendar:before{content:""}.fa-trailer:before{content:""}.fa-bahai:before{content:""}.fa-haykal:before{content:""}.fa-sd-card:before{content:""}.fa-dragon:before{content:""}.fa-shoe-prints:before{content:""}.fa-circle-plus:before{content:""}.fa-plus-circle:before{content:""}.fa-face-grin-tongue-wink:before{content:""}.fa-grin-tongue-wink:before{content:""}.fa-hand-holding:before{content:""}.fa-plug-circle-exclamation:before{content:""}.fa-link-slash:before{content:""}.fa-chain-broken:before{content:""}.fa-chain-slash:before{content:""}.fa-unlink:before{content:""}.fa-clone:before{content:""}.fa-person-walking-arrow-loop-left:before{content:""}.fa-arrow-up-z-a:before{content:""}.fa-sort-alpha-up-alt:before{content:""}.fa-fire-flame-curved:before{content:""}.fa-fire-alt:before{content:""}.fa-tornado:before{content:""}.fa-file-circle-plus:before{content:""}.fa-book-quran:before{content:""}.fa-quran:before{content:""}.fa-anchor:before{content:""}.fa-border-all:before{content:""}.fa-face-angry:before{content:""}.fa-angry:before{content:""}.fa-cookie-bite:before{content:""}.fa-arrow-trend-down:before{content:""}.fa-rss:before{content:""}.fa-feed:before{content:""}.fa-draw-polygon:before{content:""}.fa-scale-balanced:before{content:""}.fa-balance-scale:before{content:""}.fa-gauge-simple-high:before{content:""}.fa-tachometer:before{content:""}.fa-tachometer-fast:before{content:""}.fa-shower:before{content:""}.fa-desktop:before{content:""}.fa-desktop-alt:before{content:""}.fa-m:before{content:"M"}.fa-table-list:before{content:""}.fa-th-list:before{content:""}.fa-comment-sms:before{content:""}.fa-sms:before{content:""}.fa-book:before{content:""}.fa-user-plus:before{content:""}.fa-check:before{content:""}.fa-battery-three-quarters:before{content:""}.fa-battery-4:before{content:""}.fa-house-circle-check:before{content:""}.fa-angle-left:before{content:""}.fa-diagram-successor:before{content:""}.fa-truck-arrow-right:before{content:""}.fa-arrows-split-up-and-left:before{content:""}.fa-hand-fist:before{content:""}.fa-fist-raised:before{content:""}.fa-cloud-moon:before{content:""}.fa-briefcase:before{content:""}.fa-person-falling:before{content:""}.fa-image-portrait:before{content:""}.fa-portrait:before{content:""}.fa-user-tag:before{content:""}.fa-rug:before{content:""}.fa-earth-europe:before{content:""}.fa-globe-europe:before{content:""}.fa-cart-flatbed-suitcase:before{content:""}.fa-luggage-cart:before{content:""}.fa-rectangle-xmark:before{content:""}.fa-rectangle-times:before{content:""}.fa-times-rectangle:before{content:""}.fa-window-close:before{content:""}.fa-baht-sign:before{content:""}.fa-book-open:before{content:""}.fa-book-journal-whills:before{content:""}.fa-journal-whills:before{content:""}.fa-handcuffs:before{content:""}.fa-triangle-exclamation:before{content:""}.fa-exclamation-triangle:before{content:""}.fa-warning:before{content:""}.fa-database:before{content:""}.fa-share:before{content:""}.fa-arrow-turn-right:before{content:""}.fa-mail-forward:before{content:""}.fa-bottle-droplet:before{content:""}.fa-mask-face:before{content:""}.fa-hill-rockslide:before{content:""}.fa-right-left:before{content:""}.fa-exchange-alt:before{content:""}.fa-paper-plane:before{content:""}.fa-road-circle-exclamation:before{content:""}.fa-dungeon:before{content:""}.fa-align-right:before{content:""}.fa-money-bill-1-wave:before{content:""}.fa-money-bill-wave-alt:before{content:""}.fa-life-ring:before{content:""}.fa-hands:before{content:""}.fa-sign-language:before{content:""}.fa-signing:before{content:""}.fa-calendar-day:before{content:""}.fa-water-ladder:before{content:""}.fa-ladder-water:before{content:""}.fa-swimming-pool:before{content:""}.fa-arrows-up-down:before{content:""}.fa-arrows-v:before{content:""}.fa-face-grimace:before{content:""}.fa-grimace:before{content:""}.fa-wheelchair-move:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-turn-down:before{content:""}.fa-level-down-alt:before{content:""}.fa-person-walking-arrow-right:before{content:""}.fa-square-envelope:before{content:""}.fa-envelope-square:before{content:""}.fa-dice:before{content:""}.fa-bowling-ball:before{content:""}.fa-brain:before{content:""}.fa-bandage:before{content:""}.fa-band-aid:before{content:""}.fa-calendar-minus:before{content:""}.fa-circle-xmark:before{content:""}.fa-times-circle:before{content:""}.fa-xmark-circle:before{content:""}.fa-gifts:before{content:""}.fa-hotel:before{content:""}.fa-earth-asia:before{content:""}.fa-globe-asia:before{content:""}.fa-id-card-clip:before{content:""}.fa-id-card-alt:before{content:""}.fa-magnifying-glass-plus:before{content:""}.fa-search-plus:before{content:""}.fa-thumbs-up:before{content:""}.fa-user-clock:before{content:""}.fa-hand-dots:before{content:""}.fa-allergies:before{content:""}.fa-file-invoice:before{content:""}.fa-window-minimize:before{content:""}.fa-mug-saucer:before{content:""}.fa-coffee:before{content:""}.fa-brush:before{content:""}.fa-mask:before{content:""}.fa-magnifying-glass-minus:before{content:""}.fa-search-minus:before{content:""}.fa-ruler-vertical:before{content:""}.fa-user-large:before{content:""}.fa-user-alt:before{content:""}.fa-train-tram:before{content:""}.fa-user-nurse:before{content:""}.fa-syringe:before{content:""}.fa-cloud-sun:before{content:""}.fa-stopwatch-20:before{content:""}.fa-square-full:before{content:""}.fa-magnet:before{content:""}.fa-jar:before{content:""}.fa-note-sticky:before{content:""}.fa-sticky-note:before{content:""}.fa-bug-slash:before{content:""}.fa-arrow-up-from-water-pump:before{content:""}.fa-bone:before{content:""}.fa-user-injured:before{content:""}.fa-face-sad-tear:before{content:""}.fa-sad-tear:before{content:""}.fa-plane:before{content:""}.fa-tent-arrows-down:before{content:""}.fa-exclamation:before{content:"!"}.fa-arrows-spin:before{content:""}.fa-print:before{content:""}.fa-turkish-lira-sign:before{content:""}.fa-try:before{content:""}.fa-turkish-lira:before{content:""}.fa-dollar-sign:before{content:"$"}.fa-dollar:before{content:"$"}.fa-usd:before{content:"$"}.fa-x:before{content:"X"}.fa-magnifying-glass-dollar:before{content:""}.fa-search-dollar:before{content:""}.fa-users-gear:before{content:""}.fa-users-cog:before{content:""}.fa-person-military-pointing:before{content:""}.fa-building-columns:before{content:""}.fa-bank:before{content:""}.fa-institution:before{content:""}.fa-museum:before{content:""}.fa-university:before{content:""}.fa-umbrella:before{content:""}.fa-trowel:before{content:""}.fa-d:before{content:"D"}.fa-stapler:before{content:""}.fa-masks-theater:before{content:""}.fa-theater-masks:before{content:""}.fa-kip-sign:before{content:""}.fa-hand-point-left:before{content:""}.fa-handshake-simple:before{content:""}.fa-handshake-alt:before{content:""}.fa-jet-fighter:before{content:""}.fa-fighter-jet:before{content:""}.fa-square-share-nodes:before{content:""}.fa-share-alt-square:before{content:""}.fa-barcode:before{content:""}.fa-plus-minus:before{content:""}.fa-video:before{content:""}.fa-video-camera:before{content:""}.fa-graduation-cap:before{content:""}.fa-mortar-board:before{content:""}.fa-hand-holding-medical:before{content:""}.fa-person-circle-check:before{content:""}.fa-turn-up:before{content:""}.fa-level-up-alt:before{content:""}.sr-only,.fa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sr-only-focusable:not(:focus),.fa-sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(/build/assets/fa-solid-900-886c8611.woff2) format("woff2"),url(/build/assets/fa-solid-900-cea79b34.ttf) format("truetype")}.fas,.fa-solid{font-weight:900}:root,:host{--fa-style-family-brands: "Font Awesome 6 Brands";--fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(/build/assets/fa-brands-400-faae6fc0.woff2) format("woff2"),url(/build/assets/fa-brands-400-003f1154.ttf) format("truetype")}.fab,.fa-brands{font-weight:400}.fa-monero:before{content:""}.fa-hooli:before{content:""}.fa-yelp:before{content:""}.fa-cc-visa:before{content:""}.fa-lastfm:before{content:""}.fa-shopware:before{content:""}.fa-creative-commons-nc:before{content:""}.fa-aws:before{content:""}.fa-redhat:before{content:""}.fa-yoast:before{content:""}.fa-cloudflare:before{content:""}.fa-ups:before{content:""}.fa-wpexplorer:before{content:""}.fa-dyalog:before{content:""}.fa-bity:before{content:""}.fa-stackpath:before{content:""}.fa-buysellads:before{content:""}.fa-first-order:before{content:""}.fa-modx:before{content:""}.fa-guilded:before{content:""}.fa-vnv:before{content:""}.fa-square-js:before{content:""}.fa-js-square:before{content:""}.fa-microsoft:before{content:""}.fa-qq:before{content:""}.fa-orcid:before{content:""}.fa-java:before{content:""}.fa-invision:before{content:""}.fa-creative-commons-pd-alt:before{content:""}.fa-centercode:before{content:""}.fa-glide-g:before{content:""}.fa-drupal:before{content:""}.fa-hire-a-helper:before{content:""}.fa-creative-commons-by:before{content:""}.fa-unity:before{content:""}.fa-whmcs:before{content:""}.fa-rocketchat:before{content:""}.fa-vk:before{content:""}.fa-untappd:before{content:""}.fa-mailchimp:before{content:""}.fa-css3-alt:before{content:""}.fa-square-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-vimeo-v:before{content:""}.fa-contao:before{content:""}.fa-square-font-awesome:before{content:""}.fa-deskpro:before{content:""}.fa-sistrix:before{content:""}.fa-square-instagram:before{content:""}.fa-instagram-square:before{content:""}.fa-battle-net:before{content:""}.fa-the-red-yeti:before{content:""}.fa-square-hacker-news:before{content:""}.fa-hacker-news-square:before{content:""}.fa-edge:before{content:""}.fa-threads:before{content:""}.fa-napster:before{content:""}.fa-square-snapchat:before{content:""}.fa-snapchat-square:before{content:""}.fa-google-plus-g:before{content:""}.fa-artstation:before{content:""}.fa-markdown:before{content:""}.fa-sourcetree:before{content:""}.fa-google-plus:before{content:""}.fa-diaspora:before{content:""}.fa-foursquare:before{content:""}.fa-stack-overflow:before{content:""}.fa-github-alt:before{content:""}.fa-phoenix-squadron:before{content:""}.fa-pagelines:before{content:""}.fa-algolia:before{content:""}.fa-red-river:before{content:""}.fa-creative-commons-sa:before{content:""}.fa-safari:before{content:""}.fa-google:before{content:""}.fa-square-font-awesome-stroke:before{content:""}.fa-font-awesome-alt:before{content:""}.fa-atlassian:before{content:""}.fa-linkedin-in:before{content:""}.fa-digital-ocean:before{content:""}.fa-nimblr:before{content:""}.fa-chromecast:before{content:""}.fa-evernote:before{content:""}.fa-hacker-news:before{content:""}.fa-creative-commons-sampling:before{content:""}.fa-adversal:before{content:""}.fa-creative-commons:before{content:""}.fa-watchman-monitoring:before{content:""}.fa-fonticons:before{content:""}.fa-weixin:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-codepen:before{content:""}.fa-git-alt:before{content:""}.fa-lyft:before{content:""}.fa-rev:before{content:""}.fa-windows:before{content:""}.fa-wizards-of-the-coast:before{content:""}.fa-square-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-meetup:before{content:""}.fa-centos:before{content:""}.fa-adn:before{content:""}.fa-cloudsmith:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-square-dribbble:before{content:""}.fa-dribbble-square:before{content:""}.fa-codiepie:before{content:""}.fa-node:before{content:""}.fa-mix:before{content:""}.fa-steam:before{content:""}.fa-cc-apple-pay:before{content:""}.fa-scribd:before{content:""}.fa-debian:before{content:""}.fa-openid:before{content:""}.fa-instalod:before{content:""}.fa-expeditedssl:before{content:""}.fa-sellcast:before{content:""}.fa-square-twitter:before{content:""}.fa-twitter-square:before{content:""}.fa-r-project:before{content:""}.fa-delicious:before{content:""}.fa-freebsd:before{content:""}.fa-vuejs:before{content:""}.fa-accusoft:before{content:""}.fa-ioxhost:before{content:""}.fa-fonticons-fi:before{content:""}.fa-app-store:before{content:""}.fa-cc-mastercard:before{content:""}.fa-itunes-note:before{content:""}.fa-golang:before{content:""}.fa-kickstarter:before{content:""}.fa-grav:before{content:""}.fa-weibo:before{content:""}.fa-uncharted:before{content:""}.fa-firstdraft:before{content:""}.fa-square-youtube:before{content:""}.fa-youtube-square:before{content:""}.fa-wikipedia-w:before{content:""}.fa-wpressr:before{content:""}.fa-rendact:before{content:""}.fa-angellist:before{content:""}.fa-galactic-republic:before{content:""}.fa-nfc-directional:before{content:""}.fa-skype:before{content:""}.fa-joget:before{content:""}.fa-fedora:before{content:""}.fa-stripe-s:before{content:""}.fa-meta:before{content:""}.fa-laravel:before{content:""}.fa-hotjar:before{content:""}.fa-bluetooth-b:before{content:""}.fa-sticker-mule:before{content:""}.fa-creative-commons-zero:before{content:""}.fa-hips:before{content:""}.fa-behance:before{content:""}.fa-reddit:before{content:""}.fa-discord:before{content:""}.fa-chrome:before{content:""}.fa-app-store-ios:before{content:""}.fa-cc-discover:before{content:""}.fa-wpbeginner:before{content:""}.fa-confluence:before{content:""}.fa-mdb:before{content:""}.fa-dochub:before{content:""}.fa-accessible-icon:before{content:""}.fa-ebay:before{content:""}.fa-amazon:before{content:""}.fa-unsplash:before{content:""}.fa-yarn:before{content:""}.fa-square-steam:before{content:""}.fa-steam-square:before{content:""}.fa-500px:before{content:""}.fa-square-vimeo:before{content:""}.fa-vimeo-square:before{content:""}.fa-asymmetrik:before{content:""}.fa-font-awesome:before{content:""}.fa-font-awesome-flag:before{content:""}.fa-font-awesome-logo-full:before{content:""}.fa-gratipay:before{content:""}.fa-apple:before{content:""}.fa-hive:before{content:""}.fa-gitkraken:before{content:""}.fa-keybase:before{content:""}.fa-apple-pay:before{content:""}.fa-padlet:before{content:""}.fa-amazon-pay:before{content:""}.fa-square-github:before{content:""}.fa-github-square:before{content:""}.fa-stumbleupon:before{content:""}.fa-fedex:before{content:""}.fa-phoenix-framework:before{content:""}.fa-shopify:before{content:""}.fa-neos:before{content:""}.fa-square-threads:before{content:""}.fa-hackerrank:before{content:""}.fa-researchgate:before{content:""}.fa-swift:before{content:""}.fa-angular:before{content:""}.fa-speakap:before{content:""}.fa-angrycreative:before{content:""}.fa-y-combinator:before{content:""}.fa-empire:before{content:""}.fa-envira:before{content:""}.fa-square-gitlab:before{content:""}.fa-gitlab-square:before{content:""}.fa-studiovinari:before{content:""}.fa-pied-piper:before{content:""}.fa-wordpress:before{content:""}.fa-product-hunt:before{content:""}.fa-firefox:before{content:""}.fa-linode:before{content:""}.fa-goodreads:before{content:""}.fa-square-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-jsfiddle:before{content:""}.fa-sith:before{content:""}.fa-themeisle:before{content:""}.fa-page4:before{content:""}.fa-hashnode:before{content:""}.fa-react:before{content:""}.fa-cc-paypal:before{content:""}.fa-squarespace:before{content:""}.fa-cc-stripe:before{content:""}.fa-creative-commons-share:before{content:""}.fa-bitcoin:before{content:""}.fa-keycdn:before{content:""}.fa-opera:before{content:""}.fa-itch-io:before{content:""}.fa-umbraco:before{content:""}.fa-galactic-senate:before{content:""}.fa-ubuntu:before{content:""}.fa-draft2digital:before{content:""}.fa-stripe:before{content:""}.fa-houzz:before{content:""}.fa-gg:before{content:""}.fa-dhl:before{content:""}.fa-square-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-xing:before{content:""}.fa-blackberry:before{content:""}.fa-creative-commons-pd:before{content:""}.fa-playstation:before{content:""}.fa-quinscape:before{content:""}.fa-less:before{content:""}.fa-blogger-b:before{content:""}.fa-opencart:before{content:""}.fa-vine:before{content:""}.fa-paypal:before{content:""}.fa-gitlab:before{content:""}.fa-typo3:before{content:""}.fa-reddit-alien:before{content:""}.fa-yahoo:before{content:""}.fa-dailymotion:before{content:""}.fa-affiliatetheme:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-bootstrap:before{content:""}.fa-odnoklassniki:before{content:""}.fa-nfc-symbol:before{content:""}.fa-ethereum:before{content:""}.fa-speaker-deck:before{content:""}.fa-creative-commons-nc-eu:before{content:""}.fa-patreon:before{content:""}.fa-avianex:before{content:""}.fa-ello:before{content:""}.fa-gofore:before{content:""}.fa-bimobject:before{content:""}.fa-facebook-f:before{content:""}.fa-square-google-plus:before{content:""}.fa-google-plus-square:before{content:""}.fa-mandalorian:before{content:""}.fa-first-order-alt:before{content:""}.fa-osi:before{content:""}.fa-google-wallet:before{content:""}.fa-d-and-d-beyond:before{content:""}.fa-periscope:before{content:""}.fa-fulcrum:before{content:""}.fa-cloudscale:before{content:""}.fa-forumbee:before{content:""}.fa-mizuni:before{content:""}.fa-schlix:before{content:""}.fa-square-xing:before{content:""}.fa-xing-square:before{content:""}.fa-bandcamp:before{content:""}.fa-wpforms:before{content:""}.fa-cloudversify:before{content:""}.fa-usps:before{content:""}.fa-megaport:before{content:""}.fa-magento:before{content:""}.fa-spotify:before{content:""}.fa-optin-monster:before{content:""}.fa-fly:before{content:""}.fa-aviato:before{content:""}.fa-itunes:before{content:""}.fa-cuttlefish:before{content:""}.fa-blogger:before{content:""}.fa-flickr:before{content:""}.fa-viber:before{content:""}.fa-soundcloud:before{content:""}.fa-digg:before{content:""}.fa-tencent-weibo:before{content:""}.fa-symfony:before{content:""}.fa-maxcdn:before{content:""}.fa-etsy:before{content:""}.fa-facebook-messenger:before{content:""}.fa-audible:before{content:""}.fa-think-peaks:before{content:""}.fa-bilibili:before{content:""}.fa-erlang:before{content:""}.fa-x-twitter:before{content:""}.fa-cotton-bureau:before{content:""}.fa-dashcube:before{content:""}.fa-42-group:before{content:""}.fa-innosoft:before{content:""}.fa-stack-exchange:before{content:""}.fa-elementor:before{content:""}.fa-square-pied-piper:before{content:""}.fa-pied-piper-square:before{content:""}.fa-creative-commons-nd:before{content:""}.fa-palfed:before{content:""}.fa-superpowers:before{content:""}.fa-resolving:before{content:""}.fa-xbox:before{content:""}.fa-searchengin:before{content:""}.fa-tiktok:before{content:""}.fa-square-facebook:before{content:""}.fa-facebook-square:before{content:""}.fa-renren:before{content:""}.fa-linux:before{content:""}.fa-glide:before{content:""}.fa-linkedin:before{content:""}.fa-hubspot:before{content:""}.fa-deploydog:before{content:""}.fa-twitch:before{content:""}.fa-ravelry:before{content:""}.fa-mixer:before{content:""}.fa-square-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-vimeo:before{content:""}.fa-mendeley:before{content:""}.fa-uniregistry:before{content:""}.fa-figma:before{content:""}.fa-creative-commons-remix:before{content:""}.fa-cc-amazon-pay:before{content:""}.fa-dropbox:before{content:""}.fa-instagram:before{content:""}.fa-cmplid:before{content:""}.fa-facebook:before{content:""}.fa-gripfire:before{content:""}.fa-jedi-order:before{content:""}.fa-uikit:before{content:""}.fa-fort-awesome-alt:before{content:""}.fa-phabricator:before{content:""}.fa-ussunnah:before{content:""}.fa-earlybirds:before{content:""}.fa-trade-federation:before{content:""}.fa-autoprefixer:before{content:""}.fa-whatsapp:before{content:""}.fa-slideshare:before{content:""}.fa-google-play:before{content:""}.fa-viadeo:before{content:""}.fa-line:before{content:""}.fa-google-drive:before{content:""}.fa-servicestack:before{content:""}.fa-simplybuilt:before{content:""}.fa-bitbucket:before{content:""}.fa-imdb:before{content:""}.fa-deezer:before{content:""}.fa-raspberry-pi:before{content:""}.fa-jira:before{content:""}.fa-docker:before{content:""}.fa-screenpal:before{content:""}.fa-bluetooth:before{content:""}.fa-gitter:before{content:""}.fa-d-and-d:before{content:""}.fa-microblog:before{content:""}.fa-cc-diners-club:before{content:""}.fa-gg-circle:before{content:""}.fa-pied-piper-hat:before{content:""}.fa-kickstarter-k:before{content:""}.fa-yandex:before{content:""}.fa-readme:before{content:""}.fa-html5:before{content:""}.fa-sellsy:before{content:""}.fa-sass:before{content:""}.fa-wirsindhandwerk:before{content:""}.fa-wsh:before{content:""}.fa-buromobelexperte:before{content:""}.fa-salesforce:before{content:""}.fa-octopus-deploy:before{content:""}.fa-medapps:before{content:""}.fa-ns8:before{content:""}.fa-pinterest-p:before{content:""}.fa-apper:before{content:""}.fa-fort-awesome:before{content:""}.fa-waze:before{content:""}.fa-cc-jcb:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-fantasy-flight-games:before{content:""}.fa-rust:before{content:""}.fa-wix:before{content:""}.fa-square-behance:before{content:""}.fa-behance-square:before{content:""}.fa-supple:before{content:""}.fa-rebel:before{content:""}.fa-css3:before{content:""}.fa-staylinked:before{content:""}.fa-kaggle:before{content:""}.fa-space-awesome:before{content:""}.fa-deviantart:before{content:""}.fa-cpanel:before{content:""}.fa-goodreads-g:before{content:""}.fa-square-git:before{content:""}.fa-git-square:before{content:""}.fa-square-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-trello:before{content:""}.fa-creative-commons-nc-jp:before{content:""}.fa-get-pocket:before{content:""}.fa-perbyte:before{content:""}.fa-grunt:before{content:""}.fa-weebly:before{content:""}.fa-connectdevelop:before{content:""}.fa-leanpub:before{content:""}.fa-black-tie:before{content:""}.fa-themeco:before{content:""}.fa-python:before{content:""}.fa-android:before{content:""}.fa-bots:before{content:""}.fa-free-code-camp:before{content:""}.fa-hornbill:before{content:""}.fa-js:before{content:""}.fa-ideal:before{content:""}.fa-git:before{content:""}.fa-dev:before{content:""}.fa-sketch:before{content:""}.fa-yandex-international:before{content:""}.fa-cc-amex:before{content:""}.fa-uber:before{content:""}.fa-github:before{content:""}.fa-php:before{content:""}.fa-alipay:before{content:""}.fa-youtube:before{content:""}.fa-skyatlas:before{content:""}.fa-firefox-browser:before{content:""}.fa-replyd:before{content:""}.fa-suse:before{content:""}.fa-jenkins:before{content:""}.fa-twitter:before{content:""}.fa-rockrms:before{content:""}.fa-pinterest:before{content:""}.fa-buffer:before{content:""}.fa-npm:before{content:""}.fa-yammer:before{content:""}.fa-btc:before{content:""}.fa-dribbble:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-internet-explorer:before{content:""}.fa-stubber:before{content:""}.fa-telegram:before{content:""}.fa-telegram-plane:before{content:""}.fa-old-republic:before{content:""}.fa-odysee:before{content:""}.fa-square-whatsapp:before{content:""}.fa-whatsapp-square:before{content:""}.fa-node-js:before{content:""}.fa-edge-legacy:before{content:""}.fa-slack:before{content:""}.fa-slack-hash:before{content:""}.fa-medrt:before{content:""}.fa-usb:before{content:""}.fa-tumblr:before{content:""}.fa-vaadin:before{content:""}.fa-quora:before{content:""}.fa-square-x-twitter:before{content:""}.fa-reacteurope:before{content:""}.fa-medium:before{content:""}.fa-medium-m:before{content:""}.fa-amilia:before{content:""}.fa-mixcloud:before{content:""}.fa-flipboard:before{content:""}.fa-viacoin:before{content:""}.fa-critical-role:before{content:""}.fa-sitrox:before{content:""}.fa-discourse:before{content:""}.fa-joomla:before{content:""}.fa-mastodon:before{content:""}.fa-airbnb:before{content:""}.fa-wolf-pack-battalion:before{content:""}.fa-buy-n-large:before{content:""}.fa-gulp:before{content:""}.fa-creative-commons-sampling-plus:before{content:""}.fa-strava:before{content:""}.fa-ember:before{content:""}.fa-canadian-maple-leaf:before{content:""}.fa-teamspeak:before{content:""}.fa-pushed:before{content:""}.fa-wordpress-simple:before{content:""}.fa-nutritionix:before{content:""}.fa-wodu:before{content:""}.fa-google-pay:before{content:""}.fa-intercom:before{content:""}.fa-zhihu:before{content:""}.fa-korvue:before{content:""}.fa-pix:before{content:""}.fa-steam-symbol:before{content:""}/*! - * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + */.fa{font-family:var(--fa-style-family, "Font Awesome 6 Free");font-weight:var(--fa-style, 900)}.fa,.fa-classic,.fa-sharp,.fas,.fa-solid,.far,.fa-regular,.fab,.fa-brands{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display, inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fas,.fa-classic,.fa-solid,.far,.fa-regular{font-family:"Font Awesome 6 Free"}.fab,.fa-brands{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin, 2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em) * -1);position:absolute;text-align:center;width:var(--fa-li-width, 2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color, #eee);border-radius:var(--fa-border-radius, .1em);border-style:var(--fa-border-style, solid);border-width:var(--fa-border-width, .08em);padding:var(--fa-border-padding, .2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin, .3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin, .3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.28, .84, .42, 1))}.fa-fade{animation-name:fa-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-beat-fade{animation-name:fa-beat-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-shake{animation-name:fa-shake;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 2s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin-reverse{--fa-animation-direction: reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, steps(8))}@media (prefers-reduced-motion: reduce){.fa-beat,.fa-bounce,.fa-fade,.fa-beat-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale, 1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x, 1.1),var(--fa-bounce-start-scale-y, .9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x, .9),var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x, 1.05),var(--fa-bounce-land-scale-y, .95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound, -.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity, .4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity, .4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale, 1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x, 0),var(--fa-flip-y, 1),var(--fa-flip-z, 0),var(--fa-flip-angle, -180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0)}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle, none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index, auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse, #fff)}.fa-0:before{content:"0"}.fa-1:before{content:"1"}.fa-2:before{content:"2"}.fa-3:before{content:"3"}.fa-4:before{content:"4"}.fa-5:before{content:"5"}.fa-6:before{content:"6"}.fa-7:before{content:"7"}.fa-8:before{content:"8"}.fa-9:before{content:"9"}.fa-fill-drip:before{content:""}.fa-arrows-to-circle:before{content:""}.fa-circle-chevron-right:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-at:before{content:"@"}.fa-trash-can:before{content:""}.fa-trash-alt:before{content:""}.fa-text-height:before{content:""}.fa-user-xmark:before{content:""}.fa-user-times:before{content:""}.fa-stethoscope:before{content:""}.fa-message:before{content:""}.fa-comment-alt:before{content:""}.fa-info:before{content:""}.fa-down-left-and-up-right-to-center:before{content:""}.fa-compress-alt:before{content:""}.fa-explosion:before{content:""}.fa-file-lines:before{content:""}.fa-file-alt:before{content:""}.fa-file-text:before{content:""}.fa-wave-square:before{content:""}.fa-ring:before{content:""}.fa-building-un:before{content:""}.fa-dice-three:before{content:""}.fa-calendar-days:before{content:""}.fa-calendar-alt:before{content:""}.fa-anchor-circle-check:before{content:""}.fa-building-circle-arrow-right:before{content:""}.fa-volleyball:before{content:""}.fa-volleyball-ball:before{content:""}.fa-arrows-up-to-line:before{content:""}.fa-sort-down:before{content:""}.fa-sort-desc:before{content:""}.fa-circle-minus:before{content:""}.fa-minus-circle:before{content:""}.fa-door-open:before{content:""}.fa-right-from-bracket:before{content:""}.fa-sign-out-alt:before{content:""}.fa-atom:before{content:""}.fa-soap:before{content:""}.fa-icons:before{content:""}.fa-heart-music-camera-bolt:before{content:""}.fa-microphone-lines-slash:before{content:""}.fa-microphone-alt-slash:before{content:""}.fa-bridge-circle-check:before{content:""}.fa-pump-medical:before{content:""}.fa-fingerprint:before{content:""}.fa-hand-point-right:before{content:""}.fa-magnifying-glass-location:before{content:""}.fa-search-location:before{content:""}.fa-forward-step:before{content:""}.fa-step-forward:before{content:""}.fa-face-smile-beam:before{content:""}.fa-smile-beam:before{content:""}.fa-flag-checkered:before{content:""}.fa-football:before{content:""}.fa-football-ball:before{content:""}.fa-school-circle-exclamation:before{content:""}.fa-crop:before{content:""}.fa-angles-down:before{content:""}.fa-angle-double-down:before{content:""}.fa-users-rectangle:before{content:""}.fa-people-roof:before{content:""}.fa-people-line:before{content:""}.fa-beer-mug-empty:before{content:""}.fa-beer:before{content:""}.fa-diagram-predecessor:before{content:""}.fa-arrow-up-long:before{content:""}.fa-long-arrow-up:before{content:""}.fa-fire-flame-simple:before{content:""}.fa-burn:before{content:""}.fa-person:before{content:""}.fa-male:before{content:""}.fa-laptop:before{content:""}.fa-file-csv:before{content:""}.fa-menorah:before{content:""}.fa-truck-plane:before{content:""}.fa-record-vinyl:before{content:""}.fa-face-grin-stars:before{content:""}.fa-grin-stars:before{content:""}.fa-bong:before{content:""}.fa-spaghetti-monster-flying:before{content:""}.fa-pastafarianism:before{content:""}.fa-arrow-down-up-across-line:before{content:""}.fa-spoon:before{content:""}.fa-utensil-spoon:before{content:""}.fa-jar-wheat:before{content:""}.fa-envelopes-bulk:before{content:""}.fa-mail-bulk:before{content:""}.fa-file-circle-exclamation:before{content:""}.fa-circle-h:before{content:""}.fa-hospital-symbol:before{content:""}.fa-pager:before{content:""}.fa-address-book:before{content:""}.fa-contact-book:before{content:""}.fa-strikethrough:before{content:""}.fa-k:before{content:"K"}.fa-landmark-flag:before{content:""}.fa-pencil:before{content:""}.fa-pencil-alt:before{content:""}.fa-backward:before{content:""}.fa-caret-right:before{content:""}.fa-comments:before{content:""}.fa-paste:before{content:""}.fa-file-clipboard:before{content:""}.fa-code-pull-request:before{content:""}.fa-clipboard-list:before{content:""}.fa-truck-ramp-box:before{content:""}.fa-truck-loading:before{content:""}.fa-user-check:before{content:""}.fa-vial-virus:before{content:""}.fa-sheet-plastic:before{content:""}.fa-blog:before{content:""}.fa-user-ninja:before{content:""}.fa-person-arrow-up-from-line:before{content:""}.fa-scroll-torah:before{content:""}.fa-torah:before{content:""}.fa-broom-ball:before{content:""}.fa-quidditch:before{content:""}.fa-quidditch-broom-ball:before{content:""}.fa-toggle-off:before{content:""}.fa-box-archive:before{content:""}.fa-archive:before{content:""}.fa-person-drowning:before{content:""}.fa-arrow-down-9-1:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-sort-numeric-down-alt:before{content:""}.fa-face-grin-tongue-squint:before{content:""}.fa-grin-tongue-squint:before{content:""}.fa-spray-can:before{content:""}.fa-truck-monster:before{content:""}.fa-w:before{content:"W"}.fa-earth-africa:before{content:""}.fa-globe-africa:before{content:""}.fa-rainbow:before{content:""}.fa-circle-notch:before{content:""}.fa-tablet-screen-button:before{content:""}.fa-tablet-alt:before{content:""}.fa-paw:before{content:""}.fa-cloud:before{content:""}.fa-trowel-bricks:before{content:""}.fa-face-flushed:before{content:""}.fa-flushed:before{content:""}.fa-hospital-user:before{content:""}.fa-tent-arrow-left-right:before{content:""}.fa-gavel:before{content:""}.fa-legal:before{content:""}.fa-binoculars:before{content:""}.fa-microphone-slash:before{content:""}.fa-box-tissue:before{content:""}.fa-motorcycle:before{content:""}.fa-bell-concierge:before{content:""}.fa-concierge-bell:before{content:""}.fa-pen-ruler:before{content:""}.fa-pencil-ruler:before{content:""}.fa-people-arrows:before{content:""}.fa-people-arrows-left-right:before{content:""}.fa-mars-and-venus-burst:before{content:""}.fa-square-caret-right:before{content:""}.fa-caret-square-right:before{content:""}.fa-scissors:before{content:""}.fa-cut:before{content:""}.fa-sun-plant-wilt:before{content:""}.fa-toilets-portable:before{content:""}.fa-hockey-puck:before{content:""}.fa-table:before{content:""}.fa-magnifying-glass-arrow-right:before{content:""}.fa-tachograph-digital:before{content:""}.fa-digital-tachograph:before{content:""}.fa-users-slash:before{content:""}.fa-clover:before{content:""}.fa-reply:before{content:""}.fa-mail-reply:before{content:""}.fa-star-and-crescent:before{content:""}.fa-house-fire:before{content:""}.fa-square-minus:before{content:""}.fa-minus-square:before{content:""}.fa-helicopter:before{content:""}.fa-compass:before{content:""}.fa-square-caret-down:before{content:""}.fa-caret-square-down:before{content:""}.fa-file-circle-question:before{content:""}.fa-laptop-code:before{content:""}.fa-swatchbook:before{content:""}.fa-prescription-bottle:before{content:""}.fa-bars:before{content:""}.fa-navicon:before{content:""}.fa-people-group:before{content:""}.fa-hourglass-end:before{content:""}.fa-hourglass-3:before{content:""}.fa-heart-crack:before{content:""}.fa-heart-broken:before{content:""}.fa-square-up-right:before{content:""}.fa-external-link-square-alt:before{content:""}.fa-face-kiss-beam:before{content:""}.fa-kiss-beam:before{content:""}.fa-film:before{content:""}.fa-ruler-horizontal:before{content:""}.fa-people-robbery:before{content:""}.fa-lightbulb:before{content:""}.fa-caret-left:before{content:""}.fa-circle-exclamation:before{content:""}.fa-exclamation-circle:before{content:""}.fa-school-circle-xmark:before{content:""}.fa-arrow-right-from-bracket:before{content:""}.fa-sign-out:before{content:""}.fa-circle-chevron-down:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-unlock-keyhole:before{content:""}.fa-unlock-alt:before{content:""}.fa-cloud-showers-heavy:before{content:""}.fa-headphones-simple:before{content:""}.fa-headphones-alt:before{content:""}.fa-sitemap:before{content:""}.fa-circle-dollar-to-slot:before{content:""}.fa-donate:before{content:""}.fa-memory:before{content:""}.fa-road-spikes:before{content:""}.fa-fire-burner:before{content:""}.fa-flag:before{content:""}.fa-hanukiah:before{content:""}.fa-feather:before{content:""}.fa-volume-low:before{content:""}.fa-volume-down:before{content:""}.fa-comment-slash:before{content:""}.fa-cloud-sun-rain:before{content:""}.fa-compress:before{content:""}.fa-wheat-awn:before{content:""}.fa-wheat-alt:before{content:""}.fa-ankh:before{content:""}.fa-hands-holding-child:before{content:""}.fa-asterisk:before{content:"*"}.fa-square-check:before{content:""}.fa-check-square:before{content:""}.fa-peseta-sign:before{content:""}.fa-heading:before{content:""}.fa-header:before{content:""}.fa-ghost:before{content:""}.fa-list:before{content:""}.fa-list-squares:before{content:""}.fa-square-phone-flip:before{content:""}.fa-phone-square-alt:before{content:""}.fa-cart-plus:before{content:""}.fa-gamepad:before{content:""}.fa-circle-dot:before{content:""}.fa-dot-circle:before{content:""}.fa-face-dizzy:before{content:""}.fa-dizzy:before{content:""}.fa-egg:before{content:""}.fa-house-medical-circle-xmark:before{content:""}.fa-campground:before{content:""}.fa-folder-plus:before{content:""}.fa-futbol:before{content:""}.fa-futbol-ball:before{content:""}.fa-soccer-ball:before{content:""}.fa-paintbrush:before{content:""}.fa-paint-brush:before{content:""}.fa-lock:before{content:""}.fa-gas-pump:before{content:""}.fa-hot-tub-person:before{content:""}.fa-hot-tub:before{content:""}.fa-map-location:before{content:""}.fa-map-marked:before{content:""}.fa-house-flood-water:before{content:""}.fa-tree:before{content:""}.fa-bridge-lock:before{content:""}.fa-sack-dollar:before{content:""}.fa-pen-to-square:before{content:""}.fa-edit:before{content:""}.fa-car-side:before{content:""}.fa-share-nodes:before{content:""}.fa-share-alt:before{content:""}.fa-heart-circle-minus:before{content:""}.fa-hourglass-half:before{content:""}.fa-hourglass-2:before{content:""}.fa-microscope:before{content:""}.fa-sink:before{content:""}.fa-bag-shopping:before{content:""}.fa-shopping-bag:before{content:""}.fa-arrow-down-z-a:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-alpha-down-alt:before{content:""}.fa-mitten:before{content:""}.fa-person-rays:before{content:""}.fa-users:before{content:""}.fa-eye-slash:before{content:""}.fa-flask-vial:before{content:""}.fa-hand:before{content:""}.fa-hand-paper:before{content:""}.fa-om:before{content:""}.fa-worm:before{content:""}.fa-house-circle-xmark:before{content:""}.fa-plug:before{content:""}.fa-chevron-up:before{content:""}.fa-hand-spock:before{content:""}.fa-stopwatch:before{content:""}.fa-face-kiss:before{content:""}.fa-kiss:before{content:""}.fa-bridge-circle-xmark:before{content:""}.fa-face-grin-tongue:before{content:""}.fa-grin-tongue:before{content:""}.fa-chess-bishop:before{content:""}.fa-face-grin-wink:before{content:""}.fa-grin-wink:before{content:""}.fa-ear-deaf:before{content:""}.fa-deaf:before{content:""}.fa-deafness:before{content:""}.fa-hard-of-hearing:before{content:""}.fa-road-circle-check:before{content:""}.fa-dice-five:before{content:""}.fa-square-rss:before{content:""}.fa-rss-square:before{content:""}.fa-land-mine-on:before{content:""}.fa-i-cursor:before{content:""}.fa-stamp:before{content:""}.fa-stairs:before{content:""}.fa-i:before{content:"I"}.fa-hryvnia-sign:before{content:""}.fa-hryvnia:before{content:""}.fa-pills:before{content:""}.fa-face-grin-wide:before{content:""}.fa-grin-alt:before{content:""}.fa-tooth:before{content:""}.fa-v:before{content:"V"}.fa-bangladeshi-taka-sign:before{content:""}.fa-bicycle:before{content:""}.fa-staff-snake:before{content:""}.fa-rod-asclepius:before{content:""}.fa-rod-snake:before{content:""}.fa-staff-aesculapius:before{content:""}.fa-head-side-cough-slash:before{content:""}.fa-truck-medical:before{content:""}.fa-ambulance:before{content:""}.fa-wheat-awn-circle-exclamation:before{content:""}.fa-snowman:before{content:""}.fa-mortar-pestle:before{content:""}.fa-road-barrier:before{content:""}.fa-school:before{content:""}.fa-igloo:before{content:""}.fa-joint:before{content:""}.fa-angle-right:before{content:""}.fa-horse:before{content:""}.fa-q:before{content:"Q"}.fa-g:before{content:"G"}.fa-notes-medical:before{content:""}.fa-temperature-half:before{content:""}.fa-temperature-2:before{content:""}.fa-thermometer-2:before{content:""}.fa-thermometer-half:before{content:""}.fa-dong-sign:before{content:""}.fa-capsules:before{content:""}.fa-poo-storm:before{content:""}.fa-poo-bolt:before{content:""}.fa-face-frown-open:before{content:""}.fa-frown-open:before{content:""}.fa-hand-point-up:before{content:""}.fa-money-bill:before{content:""}.fa-bookmark:before{content:""}.fa-align-justify:before{content:""}.fa-umbrella-beach:before{content:""}.fa-helmet-un:before{content:""}.fa-bullseye:before{content:""}.fa-bacon:before{content:""}.fa-hand-point-down:before{content:""}.fa-arrow-up-from-bracket:before{content:""}.fa-folder:before{content:""}.fa-folder-blank:before{content:""}.fa-file-waveform:before{content:""}.fa-file-medical-alt:before{content:""}.fa-radiation:before{content:""}.fa-chart-simple:before{content:""}.fa-mars-stroke:before{content:""}.fa-vial:before{content:""}.fa-gauge:before{content:""}.fa-dashboard:before{content:""}.fa-gauge-med:before{content:""}.fa-tachometer-alt-average:before{content:""}.fa-wand-magic-sparkles:before{content:""}.fa-magic-wand-sparkles:before{content:""}.fa-e:before{content:"E"}.fa-pen-clip:before{content:""}.fa-pen-alt:before{content:""}.fa-bridge-circle-exclamation:before{content:""}.fa-user:before{content:""}.fa-school-circle-check:before{content:""}.fa-dumpster:before{content:""}.fa-van-shuttle:before{content:""}.fa-shuttle-van:before{content:""}.fa-building-user:before{content:""}.fa-square-caret-left:before{content:""}.fa-caret-square-left:before{content:""}.fa-highlighter:before{content:""}.fa-key:before{content:""}.fa-bullhorn:before{content:""}.fa-globe:before{content:""}.fa-synagogue:before{content:""}.fa-person-half-dress:before{content:""}.fa-road-bridge:before{content:""}.fa-location-arrow:before{content:""}.fa-c:before{content:"C"}.fa-tablet-button:before{content:""}.fa-building-lock:before{content:""}.fa-pizza-slice:before{content:""}.fa-money-bill-wave:before{content:""}.fa-chart-area:before{content:""}.fa-area-chart:before{content:""}.fa-house-flag:before{content:""}.fa-person-circle-minus:before{content:""}.fa-ban:before{content:""}.fa-cancel:before{content:""}.fa-camera-rotate:before{content:""}.fa-spray-can-sparkles:before{content:""}.fa-air-freshener:before{content:""}.fa-star:before{content:""}.fa-repeat:before{content:""}.fa-cross:before{content:""}.fa-box:before{content:""}.fa-venus-mars:before{content:""}.fa-arrow-pointer:before{content:""}.fa-mouse-pointer:before{content:""}.fa-maximize:before{content:""}.fa-expand-arrows-alt:before{content:""}.fa-charging-station:before{content:""}.fa-shapes:before{content:""}.fa-triangle-circle-square:before{content:""}.fa-shuffle:before{content:""}.fa-random:before{content:""}.fa-person-running:before{content:""}.fa-running:before{content:""}.fa-mobile-retro:before{content:""}.fa-grip-lines-vertical:before{content:""}.fa-spider:before{content:""}.fa-hands-bound:before{content:""}.fa-file-invoice-dollar:before{content:""}.fa-plane-circle-exclamation:before{content:""}.fa-x-ray:before{content:""}.fa-spell-check:before{content:""}.fa-slash:before{content:""}.fa-computer-mouse:before{content:""}.fa-mouse:before{content:""}.fa-arrow-right-to-bracket:before{content:""}.fa-sign-in:before{content:""}.fa-shop-slash:before{content:""}.fa-store-alt-slash:before{content:""}.fa-server:before{content:""}.fa-virus-covid-slash:before{content:""}.fa-shop-lock:before{content:""}.fa-hourglass-start:before{content:""}.fa-hourglass-1:before{content:""}.fa-blender-phone:before{content:""}.fa-building-wheat:before{content:""}.fa-person-breastfeeding:before{content:""}.fa-right-to-bracket:before{content:""}.fa-sign-in-alt:before{content:""}.fa-venus:before{content:""}.fa-passport:before{content:""}.fa-heart-pulse:before{content:""}.fa-heartbeat:before{content:""}.fa-people-carry-box:before{content:""}.fa-people-carry:before{content:""}.fa-temperature-high:before{content:""}.fa-microchip:before{content:""}.fa-crown:before{content:""}.fa-weight-hanging:before{content:""}.fa-xmarks-lines:before{content:""}.fa-file-prescription:before{content:""}.fa-weight-scale:before{content:""}.fa-weight:before{content:""}.fa-user-group:before{content:""}.fa-user-friends:before{content:""}.fa-arrow-up-a-z:before{content:""}.fa-sort-alpha-up:before{content:""}.fa-chess-knight:before{content:""}.fa-face-laugh-squint:before{content:""}.fa-laugh-squint:before{content:""}.fa-wheelchair:before{content:""}.fa-circle-arrow-up:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-toggle-on:before{content:""}.fa-person-walking:before{content:""}.fa-walking:before{content:""}.fa-l:before{content:"L"}.fa-fire:before{content:""}.fa-bed-pulse:before{content:""}.fa-procedures:before{content:""}.fa-shuttle-space:before{content:""}.fa-space-shuttle:before{content:""}.fa-face-laugh:before{content:""}.fa-laugh:before{content:""}.fa-folder-open:before{content:""}.fa-heart-circle-plus:before{content:""}.fa-code-fork:before{content:""}.fa-city:before{content:""}.fa-microphone-lines:before{content:""}.fa-microphone-alt:before{content:""}.fa-pepper-hot:before{content:""}.fa-unlock:before{content:""}.fa-colon-sign:before{content:""}.fa-headset:before{content:""}.fa-store-slash:before{content:""}.fa-road-circle-xmark:before{content:""}.fa-user-minus:before{content:""}.fa-mars-stroke-up:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-champagne-glasses:before{content:""}.fa-glass-cheers:before{content:""}.fa-clipboard:before{content:""}.fa-house-circle-exclamation:before{content:""}.fa-file-arrow-up:before{content:""}.fa-file-upload:before{content:""}.fa-wifi:before{content:""}.fa-wifi-3:before{content:""}.fa-wifi-strong:before{content:""}.fa-bath:before{content:""}.fa-bathtub:before{content:""}.fa-underline:before{content:""}.fa-user-pen:before{content:""}.fa-user-edit:before{content:""}.fa-signature:before{content:""}.fa-stroopwafel:before{content:""}.fa-bold:before{content:""}.fa-anchor-lock:before{content:""}.fa-building-ngo:before{content:""}.fa-manat-sign:before{content:""}.fa-not-equal:before{content:""}.fa-border-top-left:before{content:""}.fa-border-style:before{content:""}.fa-map-location-dot:before{content:""}.fa-map-marked-alt:before{content:""}.fa-jedi:before{content:""}.fa-square-poll-vertical:before{content:""}.fa-poll:before{content:""}.fa-mug-hot:before{content:""}.fa-car-battery:before{content:""}.fa-battery-car:before{content:""}.fa-gift:before{content:""}.fa-dice-two:before{content:""}.fa-chess-queen:before{content:""}.fa-glasses:before{content:""}.fa-chess-board:before{content:""}.fa-building-circle-check:before{content:""}.fa-person-chalkboard:before{content:""}.fa-mars-stroke-right:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-hand-back-fist:before{content:""}.fa-hand-rock:before{content:""}.fa-square-caret-up:before{content:""}.fa-caret-square-up:before{content:""}.fa-cloud-showers-water:before{content:""}.fa-chart-bar:before{content:""}.fa-bar-chart:before{content:""}.fa-hands-bubbles:before{content:""}.fa-hands-wash:before{content:""}.fa-less-than-equal:before{content:""}.fa-train:before{content:""}.fa-eye-low-vision:before{content:""}.fa-low-vision:before{content:""}.fa-crow:before{content:""}.fa-sailboat:before{content:""}.fa-window-restore:before{content:""}.fa-square-plus:before{content:""}.fa-plus-square:before{content:""}.fa-torii-gate:before{content:""}.fa-frog:before{content:""}.fa-bucket:before{content:""}.fa-image:before{content:""}.fa-microphone:before{content:""}.fa-cow:before{content:""}.fa-caret-up:before{content:""}.fa-screwdriver:before{content:""}.fa-folder-closed:before{content:""}.fa-house-tsunami:before{content:""}.fa-square-nfi:before{content:""}.fa-arrow-up-from-ground-water:before{content:""}.fa-martini-glass:before{content:""}.fa-glass-martini-alt:before{content:""}.fa-rotate-left:before{content:""}.fa-rotate-back:before{content:""}.fa-rotate-backward:before{content:""}.fa-undo-alt:before{content:""}.fa-table-columns:before{content:""}.fa-columns:before{content:""}.fa-lemon:before{content:""}.fa-head-side-mask:before{content:""}.fa-handshake:before{content:""}.fa-gem:before{content:""}.fa-dolly:before{content:""}.fa-dolly-box:before{content:""}.fa-smoking:before{content:""}.fa-minimize:before{content:""}.fa-compress-arrows-alt:before{content:""}.fa-monument:before{content:""}.fa-snowplow:before{content:""}.fa-angles-right:before{content:""}.fa-angle-double-right:before{content:""}.fa-cannabis:before{content:""}.fa-circle-play:before{content:""}.fa-play-circle:before{content:""}.fa-tablets:before{content:""}.fa-ethernet:before{content:""}.fa-euro-sign:before{content:""}.fa-eur:before{content:""}.fa-euro:before{content:""}.fa-chair:before{content:""}.fa-circle-check:before{content:""}.fa-check-circle:before{content:""}.fa-circle-stop:before{content:""}.fa-stop-circle:before{content:""}.fa-compass-drafting:before{content:""}.fa-drafting-compass:before{content:""}.fa-plate-wheat:before{content:""}.fa-icicles:before{content:""}.fa-person-shelter:before{content:""}.fa-neuter:before{content:""}.fa-id-badge:before{content:""}.fa-marker:before{content:""}.fa-face-laugh-beam:before{content:""}.fa-laugh-beam:before{content:""}.fa-helicopter-symbol:before{content:""}.fa-universal-access:before{content:""}.fa-circle-chevron-up:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-lari-sign:before{content:""}.fa-volcano:before{content:""}.fa-person-walking-dashed-line-arrow-right:before{content:""}.fa-sterling-sign:before{content:""}.fa-gbp:before{content:""}.fa-pound-sign:before{content:""}.fa-viruses:before{content:""}.fa-square-person-confined:before{content:""}.fa-user-tie:before{content:""}.fa-arrow-down-long:before{content:""}.fa-long-arrow-down:before{content:""}.fa-tent-arrow-down-to-line:before{content:""}.fa-certificate:before{content:""}.fa-reply-all:before{content:""}.fa-mail-reply-all:before{content:""}.fa-suitcase:before{content:""}.fa-person-skating:before{content:""}.fa-skating:before{content:""}.fa-filter-circle-dollar:before{content:""}.fa-funnel-dollar:before{content:""}.fa-camera-retro:before{content:""}.fa-circle-arrow-down:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-file-import:before{content:""}.fa-arrow-right-to-file:before{content:""}.fa-square-arrow-up-right:before{content:""}.fa-external-link-square:before{content:""}.fa-box-open:before{content:""}.fa-scroll:before{content:""}.fa-spa:before{content:""}.fa-location-pin-lock:before{content:""}.fa-pause:before{content:""}.fa-hill-avalanche:before{content:""}.fa-temperature-empty:before{content:""}.fa-temperature-0:before{content:""}.fa-thermometer-0:before{content:""}.fa-thermometer-empty:before{content:""}.fa-bomb:before{content:""}.fa-registered:before{content:""}.fa-address-card:before{content:""}.fa-contact-card:before{content:""}.fa-vcard:before{content:""}.fa-scale-unbalanced-flip:before{content:""}.fa-balance-scale-right:before{content:""}.fa-subscript:before{content:""}.fa-diamond-turn-right:before{content:""}.fa-directions:before{content:""}.fa-burst:before{content:""}.fa-house-laptop:before{content:""}.fa-laptop-house:before{content:""}.fa-face-tired:before{content:""}.fa-tired:before{content:""}.fa-money-bills:before{content:""}.fa-smog:before{content:""}.fa-crutch:before{content:""}.fa-cloud-arrow-up:before{content:""}.fa-cloud-upload:before{content:""}.fa-cloud-upload-alt:before{content:""}.fa-palette:before{content:""}.fa-arrows-turn-right:before{content:""}.fa-vest:before{content:""}.fa-ferry:before{content:""}.fa-arrows-down-to-people:before{content:""}.fa-seedling:before{content:""}.fa-sprout:before{content:""}.fa-left-right:before{content:""}.fa-arrows-alt-h:before{content:""}.fa-boxes-packing:before{content:""}.fa-circle-arrow-left:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-group-arrows-rotate:before{content:""}.fa-bowl-food:before{content:""}.fa-candy-cane:before{content:""}.fa-arrow-down-wide-short:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-down:before{content:""}.fa-cloud-bolt:before{content:""}.fa-thunderstorm:before{content:""}.fa-text-slash:before{content:""}.fa-remove-format:before{content:""}.fa-face-smile-wink:before{content:""}.fa-smile-wink:before{content:""}.fa-file-word:before{content:""}.fa-file-powerpoint:before{content:""}.fa-arrows-left-right:before{content:""}.fa-arrows-h:before{content:""}.fa-house-lock:before{content:""}.fa-cloud-arrow-down:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-download-alt:before{content:""}.fa-children:before{content:""}.fa-chalkboard:before{content:""}.fa-blackboard:before{content:""}.fa-user-large-slash:before{content:""}.fa-user-alt-slash:before{content:""}.fa-envelope-open:before{content:""}.fa-handshake-simple-slash:before{content:""}.fa-handshake-alt-slash:before{content:""}.fa-mattress-pillow:before{content:""}.fa-guarani-sign:before{content:""}.fa-arrows-rotate:before{content:""}.fa-refresh:before{content:""}.fa-sync:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-cruzeiro-sign:before{content:""}.fa-greater-than-equal:before{content:""}.fa-shield-halved:before{content:""}.fa-shield-alt:before{content:""}.fa-book-atlas:before{content:""}.fa-atlas:before{content:""}.fa-virus:before{content:""}.fa-envelope-circle-check:before{content:""}.fa-layer-group:before{content:""}.fa-arrows-to-dot:before{content:""}.fa-archway:before{content:""}.fa-heart-circle-check:before{content:""}.fa-house-chimney-crack:before{content:""}.fa-house-damage:before{content:""}.fa-file-zipper:before{content:""}.fa-file-archive:before{content:""}.fa-square:before{content:""}.fa-martini-glass-empty:before{content:""}.fa-glass-martini:before{content:""}.fa-couch:before{content:""}.fa-cedi-sign:before{content:""}.fa-italic:before{content:""}.fa-church:before{content:""}.fa-comments-dollar:before{content:""}.fa-democrat:before{content:""}.fa-z:before{content:"Z"}.fa-person-skiing:before{content:""}.fa-skiing:before{content:""}.fa-road-lock:before{content:""}.fa-a:before{content:"A"}.fa-temperature-arrow-down:before{content:""}.fa-temperature-down:before{content:""}.fa-feather-pointed:before{content:""}.fa-feather-alt:before{content:""}.fa-p:before{content:"P"}.fa-snowflake:before{content:""}.fa-newspaper:before{content:""}.fa-rectangle-ad:before{content:""}.fa-ad:before{content:""}.fa-circle-arrow-right:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-filter-circle-xmark:before{content:""}.fa-locust:before{content:""}.fa-sort:before{content:""}.fa-unsorted:before{content:""}.fa-list-ol:before{content:""}.fa-list-1-2:before{content:""}.fa-list-numeric:before{content:""}.fa-person-dress-burst:before{content:""}.fa-money-check-dollar:before{content:""}.fa-money-check-alt:before{content:""}.fa-vector-square:before{content:""}.fa-bread-slice:before{content:""}.fa-language:before{content:""}.fa-face-kiss-wink-heart:before{content:""}.fa-kiss-wink-heart:before{content:""}.fa-filter:before{content:""}.fa-question:before{content:"?"}.fa-file-signature:before{content:""}.fa-up-down-left-right:before{content:""}.fa-arrows-alt:before{content:""}.fa-house-chimney-user:before{content:""}.fa-hand-holding-heart:before{content:""}.fa-puzzle-piece:before{content:""}.fa-money-check:before{content:""}.fa-star-half-stroke:before{content:""}.fa-star-half-alt:before{content:""}.fa-code:before{content:""}.fa-whiskey-glass:before{content:""}.fa-glass-whiskey:before{content:""}.fa-building-circle-exclamation:before{content:""}.fa-magnifying-glass-chart:before{content:""}.fa-arrow-up-right-from-square:before{content:""}.fa-external-link:before{content:""}.fa-cubes-stacked:before{content:""}.fa-won-sign:before{content:""}.fa-krw:before{content:""}.fa-won:before{content:""}.fa-virus-covid:before{content:""}.fa-austral-sign:before{content:""}.fa-f:before{content:"F"}.fa-leaf:before{content:""}.fa-road:before{content:""}.fa-taxi:before{content:""}.fa-cab:before{content:""}.fa-person-circle-plus:before{content:""}.fa-chart-pie:before{content:""}.fa-pie-chart:before{content:""}.fa-bolt-lightning:before{content:""}.fa-sack-xmark:before{content:""}.fa-file-excel:before{content:""}.fa-file-contract:before{content:""}.fa-fish-fins:before{content:""}.fa-building-flag:before{content:""}.fa-face-grin-beam:before{content:""}.fa-grin-beam:before{content:""}.fa-object-ungroup:before{content:""}.fa-poop:before{content:""}.fa-location-pin:before{content:""}.fa-map-marker:before{content:""}.fa-kaaba:before{content:""}.fa-toilet-paper:before{content:""}.fa-helmet-safety:before{content:""}.fa-hard-hat:before{content:""}.fa-hat-hard:before{content:""}.fa-eject:before{content:""}.fa-circle-right:before{content:""}.fa-arrow-alt-circle-right:before{content:""}.fa-plane-circle-check:before{content:""}.fa-face-rolling-eyes:before{content:""}.fa-meh-rolling-eyes:before{content:""}.fa-object-group:before{content:""}.fa-chart-line:before{content:""}.fa-line-chart:before{content:""}.fa-mask-ventilator:before{content:""}.fa-arrow-right:before{content:""}.fa-signs-post:before{content:""}.fa-map-signs:before{content:""}.fa-cash-register:before{content:""}.fa-person-circle-question:before{content:""}.fa-h:before{content:"H"}.fa-tarp:before{content:""}.fa-screwdriver-wrench:before{content:""}.fa-tools:before{content:""}.fa-arrows-to-eye:before{content:""}.fa-plug-circle-bolt:before{content:""}.fa-heart:before{content:""}.fa-mars-and-venus:before{content:""}.fa-house-user:before{content:""}.fa-home-user:before{content:""}.fa-dumpster-fire:before{content:""}.fa-house-crack:before{content:""}.fa-martini-glass-citrus:before{content:""}.fa-cocktail:before{content:""}.fa-face-surprise:before{content:""}.fa-surprise:before{content:""}.fa-bottle-water:before{content:""}.fa-circle-pause:before{content:""}.fa-pause-circle:before{content:""}.fa-toilet-paper-slash:before{content:""}.fa-apple-whole:before{content:""}.fa-apple-alt:before{content:""}.fa-kitchen-set:before{content:""}.fa-r:before{content:"R"}.fa-temperature-quarter:before{content:""}.fa-temperature-1:before{content:""}.fa-thermometer-1:before{content:""}.fa-thermometer-quarter:before{content:""}.fa-cube:before{content:""}.fa-bitcoin-sign:before{content:""}.fa-shield-dog:before{content:""}.fa-solar-panel:before{content:""}.fa-lock-open:before{content:""}.fa-elevator:before{content:""}.fa-money-bill-transfer:before{content:""}.fa-money-bill-trend-up:before{content:""}.fa-house-flood-water-circle-arrow-right:before{content:""}.fa-square-poll-horizontal:before{content:""}.fa-poll-h:before{content:""}.fa-circle:before{content:""}.fa-backward-fast:before{content:""}.fa-fast-backward:before{content:""}.fa-recycle:before{content:""}.fa-user-astronaut:before{content:""}.fa-plane-slash:before{content:""}.fa-trademark:before{content:""}.fa-basketball:before{content:""}.fa-basketball-ball:before{content:""}.fa-satellite-dish:before{content:""}.fa-circle-up:before{content:""}.fa-arrow-alt-circle-up:before{content:""}.fa-mobile-screen-button:before{content:""}.fa-mobile-alt:before{content:""}.fa-volume-high:before{content:""}.fa-volume-up:before{content:""}.fa-users-rays:before{content:""}.fa-wallet:before{content:""}.fa-clipboard-check:before{content:""}.fa-file-audio:before{content:""}.fa-burger:before{content:""}.fa-hamburger:before{content:""}.fa-wrench:before{content:""}.fa-bugs:before{content:""}.fa-rupee-sign:before{content:""}.fa-rupee:before{content:""}.fa-file-image:before{content:""}.fa-circle-question:before{content:""}.fa-question-circle:before{content:""}.fa-plane-departure:before{content:""}.fa-handshake-slash:before{content:""}.fa-book-bookmark:before{content:""}.fa-code-branch:before{content:""}.fa-hat-cowboy:before{content:""}.fa-bridge:before{content:""}.fa-phone-flip:before{content:""}.fa-phone-alt:before{content:""}.fa-truck-front:before{content:""}.fa-cat:before{content:""}.fa-anchor-circle-exclamation:before{content:""}.fa-truck-field:before{content:""}.fa-route:before{content:""}.fa-clipboard-question:before{content:""}.fa-panorama:before{content:""}.fa-comment-medical:before{content:""}.fa-teeth-open:before{content:""}.fa-file-circle-minus:before{content:""}.fa-tags:before{content:""}.fa-wine-glass:before{content:""}.fa-forward-fast:before{content:""}.fa-fast-forward:before{content:""}.fa-face-meh-blank:before{content:""}.fa-meh-blank:before{content:""}.fa-square-parking:before{content:""}.fa-parking:before{content:""}.fa-house-signal:before{content:""}.fa-bars-progress:before{content:""}.fa-tasks-alt:before{content:""}.fa-faucet-drip:before{content:""}.fa-cart-flatbed:before{content:""}.fa-dolly-flatbed:before{content:""}.fa-ban-smoking:before{content:""}.fa-smoking-ban:before{content:""}.fa-terminal:before{content:""}.fa-mobile-button:before{content:""}.fa-house-medical-flag:before{content:""}.fa-basket-shopping:before{content:""}.fa-shopping-basket:before{content:""}.fa-tape:before{content:""}.fa-bus-simple:before{content:""}.fa-bus-alt:before{content:""}.fa-eye:before{content:""}.fa-face-sad-cry:before{content:""}.fa-sad-cry:before{content:""}.fa-audio-description:before{content:""}.fa-person-military-to-person:before{content:""}.fa-file-shield:before{content:""}.fa-user-slash:before{content:""}.fa-pen:before{content:""}.fa-tower-observation:before{content:""}.fa-file-code:before{content:""}.fa-signal:before{content:""}.fa-signal-5:before{content:""}.fa-signal-perfect:before{content:""}.fa-bus:before{content:""}.fa-heart-circle-xmark:before{content:""}.fa-house-chimney:before{content:""}.fa-home-lg:before{content:""}.fa-window-maximize:before{content:""}.fa-face-frown:before{content:""}.fa-frown:before{content:""}.fa-prescription:before{content:""}.fa-shop:before{content:""}.fa-store-alt:before{content:""}.fa-floppy-disk:before{content:""}.fa-save:before{content:""}.fa-vihara:before{content:""}.fa-scale-unbalanced:before{content:""}.fa-balance-scale-left:before{content:""}.fa-sort-up:before{content:""}.fa-sort-asc:before{content:""}.fa-comment-dots:before{content:""}.fa-commenting:before{content:""}.fa-plant-wilt:before{content:""}.fa-diamond:before{content:""}.fa-face-grin-squint:before{content:""}.fa-grin-squint:before{content:""}.fa-hand-holding-dollar:before{content:""}.fa-hand-holding-usd:before{content:""}.fa-bacterium:before{content:""}.fa-hand-pointer:before{content:""}.fa-drum-steelpan:before{content:""}.fa-hand-scissors:before{content:""}.fa-hands-praying:before{content:""}.fa-praying-hands:before{content:""}.fa-arrow-rotate-right:before{content:""}.fa-arrow-right-rotate:before{content:""}.fa-arrow-rotate-forward:before{content:""}.fa-redo:before{content:""}.fa-biohazard:before{content:""}.fa-location-crosshairs:before{content:""}.fa-location:before{content:""}.fa-mars-double:before{content:""}.fa-child-dress:before{content:""}.fa-users-between-lines:before{content:""}.fa-lungs-virus:before{content:""}.fa-face-grin-tears:before{content:""}.fa-grin-tears:before{content:""}.fa-phone:before{content:""}.fa-calendar-xmark:before{content:""}.fa-calendar-times:before{content:""}.fa-child-reaching:before{content:""}.fa-head-side-virus:before{content:""}.fa-user-gear:before{content:""}.fa-user-cog:before{content:""}.fa-arrow-up-1-9:before{content:""}.fa-sort-numeric-up:before{content:""}.fa-door-closed:before{content:""}.fa-shield-virus:before{content:""}.fa-dice-six:before{content:""}.fa-mosquito-net:before{content:""}.fa-bridge-water:before{content:""}.fa-person-booth:before{content:""}.fa-text-width:before{content:""}.fa-hat-wizard:before{content:""}.fa-pen-fancy:before{content:""}.fa-person-digging:before{content:""}.fa-digging:before{content:""}.fa-trash:before{content:""}.fa-gauge-simple:before{content:""}.fa-gauge-simple-med:before{content:""}.fa-tachometer-average:before{content:""}.fa-book-medical:before{content:""}.fa-poo:before{content:""}.fa-quote-right:before{content:""}.fa-quote-right-alt:before{content:""}.fa-shirt:before{content:""}.fa-t-shirt:before{content:""}.fa-tshirt:before{content:""}.fa-cubes:before{content:""}.fa-divide:before{content:""}.fa-tenge-sign:before{content:""}.fa-tenge:before{content:""}.fa-headphones:before{content:""}.fa-hands-holding:before{content:""}.fa-hands-clapping:before{content:""}.fa-republican:before{content:""}.fa-arrow-left:before{content:""}.fa-person-circle-xmark:before{content:""}.fa-ruler:before{content:""}.fa-align-left:before{content:""}.fa-dice-d6:before{content:""}.fa-restroom:before{content:""}.fa-j:before{content:"J"}.fa-users-viewfinder:before{content:""}.fa-file-video:before{content:""}.fa-up-right-from-square:before{content:""}.fa-external-link-alt:before{content:""}.fa-table-cells:before{content:""}.fa-th:before{content:""}.fa-file-pdf:before{content:""}.fa-book-bible:before{content:""}.fa-bible:before{content:""}.fa-o:before{content:"O"}.fa-suitcase-medical:before{content:""}.fa-medkit:before{content:""}.fa-user-secret:before{content:""}.fa-otter:before{content:""}.fa-person-dress:before{content:""}.fa-female:before{content:""}.fa-comment-dollar:before{content:""}.fa-business-time:before{content:""}.fa-briefcase-clock:before{content:""}.fa-table-cells-large:before{content:""}.fa-th-large:before{content:""}.fa-book-tanakh:before{content:""}.fa-tanakh:before{content:""}.fa-phone-volume:before{content:""}.fa-volume-control-phone:before{content:""}.fa-hat-cowboy-side:before{content:""}.fa-clipboard-user:before{content:""}.fa-child:before{content:""}.fa-lira-sign:before{content:""}.fa-satellite:before{content:""}.fa-plane-lock:before{content:""}.fa-tag:before{content:""}.fa-comment:before{content:""}.fa-cake-candles:before{content:""}.fa-birthday-cake:before{content:""}.fa-cake:before{content:""}.fa-envelope:before{content:""}.fa-angles-up:before{content:""}.fa-angle-double-up:before{content:""}.fa-paperclip:before{content:""}.fa-arrow-right-to-city:before{content:""}.fa-ribbon:before{content:""}.fa-lungs:before{content:""}.fa-arrow-up-9-1:before{content:""}.fa-sort-numeric-up-alt:before{content:""}.fa-litecoin-sign:before{content:""}.fa-border-none:before{content:""}.fa-circle-nodes:before{content:""}.fa-parachute-box:before{content:""}.fa-indent:before{content:""}.fa-truck-field-un:before{content:""}.fa-hourglass:before{content:""}.fa-hourglass-empty:before{content:""}.fa-mountain:before{content:""}.fa-user-doctor:before{content:""}.fa-user-md:before{content:""}.fa-circle-info:before{content:""}.fa-info-circle:before{content:""}.fa-cloud-meatball:before{content:""}.fa-camera:before{content:""}.fa-camera-alt:before{content:""}.fa-square-virus:before{content:""}.fa-meteor:before{content:""}.fa-car-on:before{content:""}.fa-sleigh:before{content:""}.fa-arrow-down-1-9:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-down:before{content:""}.fa-hand-holding-droplet:before{content:""}.fa-hand-holding-water:before{content:""}.fa-water:before{content:""}.fa-calendar-check:before{content:""}.fa-braille:before{content:""}.fa-prescription-bottle-medical:before{content:""}.fa-prescription-bottle-alt:before{content:""}.fa-landmark:before{content:""}.fa-truck:before{content:""}.fa-crosshairs:before{content:""}.fa-person-cane:before{content:""}.fa-tent:before{content:""}.fa-vest-patches:before{content:""}.fa-check-double:before{content:""}.fa-arrow-down-a-z:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-down:before{content:""}.fa-money-bill-wheat:before{content:""}.fa-cookie:before{content:""}.fa-arrow-rotate-left:before{content:""}.fa-arrow-left-rotate:before{content:""}.fa-arrow-rotate-back:before{content:""}.fa-arrow-rotate-backward:before{content:""}.fa-undo:before{content:""}.fa-hard-drive:before{content:""}.fa-hdd:before{content:""}.fa-face-grin-squint-tears:before{content:""}.fa-grin-squint-tears:before{content:""}.fa-dumbbell:before{content:""}.fa-rectangle-list:before{content:""}.fa-list-alt:before{content:""}.fa-tarp-droplet:before{content:""}.fa-house-medical-circle-check:before{content:""}.fa-person-skiing-nordic:before{content:""}.fa-skiing-nordic:before{content:""}.fa-calendar-plus:before{content:""}.fa-plane-arrival:before{content:""}.fa-circle-left:before{content:""}.fa-arrow-alt-circle-left:before{content:""}.fa-train-subway:before{content:""}.fa-subway:before{content:""}.fa-chart-gantt:before{content:""}.fa-indian-rupee-sign:before{content:""}.fa-indian-rupee:before{content:""}.fa-inr:before{content:""}.fa-crop-simple:before{content:""}.fa-crop-alt:before{content:""}.fa-money-bill-1:before{content:""}.fa-money-bill-alt:before{content:""}.fa-left-long:before{content:""}.fa-long-arrow-alt-left:before{content:""}.fa-dna:before{content:""}.fa-virus-slash:before{content:""}.fa-minus:before{content:""}.fa-subtract:before{content:""}.fa-chess:before{content:""}.fa-arrow-left-long:before{content:""}.fa-long-arrow-left:before{content:""}.fa-plug-circle-check:before{content:""}.fa-street-view:before{content:""}.fa-franc-sign:before{content:""}.fa-volume-off:before{content:""}.fa-hands-asl-interpreting:before{content:""}.fa-american-sign-language-interpreting:before{content:""}.fa-asl-interpreting:before{content:""}.fa-hands-american-sign-language-interpreting:before{content:""}.fa-gear:before{content:""}.fa-cog:before{content:""}.fa-droplet-slash:before{content:""}.fa-tint-slash:before{content:""}.fa-mosque:before{content:""}.fa-mosquito:before{content:""}.fa-star-of-david:before{content:""}.fa-person-military-rifle:before{content:""}.fa-cart-shopping:before{content:""}.fa-shopping-cart:before{content:""}.fa-vials:before{content:""}.fa-plug-circle-plus:before{content:""}.fa-place-of-worship:before{content:""}.fa-grip-vertical:before{content:""}.fa-arrow-turn-up:before{content:""}.fa-level-up:before{content:""}.fa-u:before{content:"U"}.fa-square-root-variable:before{content:""}.fa-square-root-alt:before{content:""}.fa-clock:before{content:""}.fa-clock-four:before{content:""}.fa-backward-step:before{content:""}.fa-step-backward:before{content:""}.fa-pallet:before{content:""}.fa-faucet:before{content:""}.fa-baseball-bat-ball:before{content:""}.fa-s:before{content:"S"}.fa-timeline:before{content:""}.fa-keyboard:before{content:""}.fa-caret-down:before{content:""}.fa-house-chimney-medical:before{content:""}.fa-clinic-medical:before{content:""}.fa-temperature-three-quarters:before{content:""}.fa-temperature-3:before{content:""}.fa-thermometer-3:before{content:""}.fa-thermometer-three-quarters:before{content:""}.fa-mobile-screen:before{content:""}.fa-mobile-android-alt:before{content:""}.fa-plane-up:before{content:""}.fa-piggy-bank:before{content:""}.fa-battery-half:before{content:""}.fa-battery-3:before{content:""}.fa-mountain-city:before{content:""}.fa-coins:before{content:""}.fa-khanda:before{content:""}.fa-sliders:before{content:""}.fa-sliders-h:before{content:""}.fa-folder-tree:before{content:""}.fa-network-wired:before{content:""}.fa-map-pin:before{content:""}.fa-hamsa:before{content:""}.fa-cent-sign:before{content:""}.fa-flask:before{content:""}.fa-person-pregnant:before{content:""}.fa-wand-sparkles:before{content:""}.fa-ellipsis-vertical:before{content:""}.fa-ellipsis-v:before{content:""}.fa-ticket:before{content:""}.fa-power-off:before{content:""}.fa-right-long:before{content:""}.fa-long-arrow-alt-right:before{content:""}.fa-flag-usa:before{content:""}.fa-laptop-file:before{content:""}.fa-tty:before{content:""}.fa-teletype:before{content:""}.fa-diagram-next:before{content:""}.fa-person-rifle:before{content:""}.fa-house-medical-circle-exclamation:before{content:""}.fa-closed-captioning:before{content:""}.fa-person-hiking:before{content:""}.fa-hiking:before{content:""}.fa-venus-double:before{content:""}.fa-images:before{content:""}.fa-calculator:before{content:""}.fa-people-pulling:before{content:""}.fa-n:before{content:"N"}.fa-cable-car:before{content:""}.fa-tram:before{content:""}.fa-cloud-rain:before{content:""}.fa-building-circle-xmark:before{content:""}.fa-ship:before{content:""}.fa-arrows-down-to-line:before{content:""}.fa-download:before{content:""}.fa-face-grin:before{content:""}.fa-grin:before{content:""}.fa-delete-left:before{content:""}.fa-backspace:before{content:""}.fa-eye-dropper:before{content:""}.fa-eye-dropper-empty:before{content:""}.fa-eyedropper:before{content:""}.fa-file-circle-check:before{content:""}.fa-forward:before{content:""}.fa-mobile:before{content:""}.fa-mobile-android:before{content:""}.fa-mobile-phone:before{content:""}.fa-face-meh:before{content:""}.fa-meh:before{content:""}.fa-align-center:before{content:""}.fa-book-skull:before{content:""}.fa-book-dead:before{content:""}.fa-id-card:before{content:""}.fa-drivers-license:before{content:""}.fa-outdent:before{content:""}.fa-dedent:before{content:""}.fa-heart-circle-exclamation:before{content:""}.fa-house:before{content:""}.fa-home:before{content:""}.fa-home-alt:before{content:""}.fa-home-lg-alt:before{content:""}.fa-calendar-week:before{content:""}.fa-laptop-medical:before{content:""}.fa-b:before{content:"B"}.fa-file-medical:before{content:""}.fa-dice-one:before{content:""}.fa-kiwi-bird:before{content:""}.fa-arrow-right-arrow-left:before{content:""}.fa-exchange:before{content:""}.fa-rotate-right:before{content:""}.fa-redo-alt:before{content:""}.fa-rotate-forward:before{content:""}.fa-utensils:before{content:""}.fa-cutlery:before{content:""}.fa-arrow-up-wide-short:before{content:""}.fa-sort-amount-up:before{content:""}.fa-mill-sign:before{content:""}.fa-bowl-rice:before{content:""}.fa-skull:before{content:""}.fa-tower-broadcast:before{content:""}.fa-broadcast-tower:before{content:""}.fa-truck-pickup:before{content:""}.fa-up-long:before{content:""}.fa-long-arrow-alt-up:before{content:""}.fa-stop:before{content:""}.fa-code-merge:before{content:""}.fa-upload:before{content:""}.fa-hurricane:before{content:""}.fa-mound:before{content:""}.fa-toilet-portable:before{content:""}.fa-compact-disc:before{content:""}.fa-file-arrow-down:before{content:""}.fa-file-download:before{content:""}.fa-caravan:before{content:""}.fa-shield-cat:before{content:""}.fa-bolt:before{content:""}.fa-zap:before{content:""}.fa-glass-water:before{content:""}.fa-oil-well:before{content:""}.fa-vault:before{content:""}.fa-mars:before{content:""}.fa-toilet:before{content:""}.fa-plane-circle-xmark:before{content:""}.fa-yen-sign:before{content:""}.fa-cny:before{content:""}.fa-jpy:before{content:""}.fa-rmb:before{content:""}.fa-yen:before{content:""}.fa-ruble-sign:before{content:""}.fa-rouble:before{content:""}.fa-rub:before{content:""}.fa-ruble:before{content:""}.fa-sun:before{content:""}.fa-guitar:before{content:""}.fa-face-laugh-wink:before{content:""}.fa-laugh-wink:before{content:""}.fa-horse-head:before{content:""}.fa-bore-hole:before{content:""}.fa-industry:before{content:""}.fa-circle-down:before{content:""}.fa-arrow-alt-circle-down:before{content:""}.fa-arrows-turn-to-dots:before{content:""}.fa-florin-sign:before{content:""}.fa-arrow-down-short-wide:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-amount-down-alt:before{content:""}.fa-less-than:before{content:"<"}.fa-angle-down:before{content:""}.fa-car-tunnel:before{content:""}.fa-head-side-cough:before{content:""}.fa-grip-lines:before{content:""}.fa-thumbs-down:before{content:""}.fa-user-lock:before{content:""}.fa-arrow-right-long:before{content:""}.fa-long-arrow-right:before{content:""}.fa-anchor-circle-xmark:before{content:""}.fa-ellipsis:before{content:""}.fa-ellipsis-h:before{content:""}.fa-chess-pawn:before{content:""}.fa-kit-medical:before{content:""}.fa-first-aid:before{content:""}.fa-person-through-window:before{content:""}.fa-toolbox:before{content:""}.fa-hands-holding-circle:before{content:""}.fa-bug:before{content:""}.fa-credit-card:before{content:""}.fa-credit-card-alt:before{content:""}.fa-car:before{content:""}.fa-automobile:before{content:""}.fa-hand-holding-hand:before{content:""}.fa-book-open-reader:before{content:""}.fa-book-reader:before{content:""}.fa-mountain-sun:before{content:""}.fa-arrows-left-right-to-line:before{content:""}.fa-dice-d20:before{content:""}.fa-truck-droplet:before{content:""}.fa-file-circle-xmark:before{content:""}.fa-temperature-arrow-up:before{content:""}.fa-temperature-up:before{content:""}.fa-medal:before{content:""}.fa-bed:before{content:""}.fa-square-h:before{content:""}.fa-h-square:before{content:""}.fa-podcast:before{content:""}.fa-temperature-full:before{content:""}.fa-temperature-4:before{content:""}.fa-thermometer-4:before{content:""}.fa-thermometer-full:before{content:""}.fa-bell:before{content:""}.fa-superscript:before{content:""}.fa-plug-circle-xmark:before{content:""}.fa-star-of-life:before{content:""}.fa-phone-slash:before{content:""}.fa-paint-roller:before{content:""}.fa-handshake-angle:before{content:""}.fa-hands-helping:before{content:""}.fa-location-dot:before{content:""}.fa-map-marker-alt:before{content:""}.fa-file:before{content:""}.fa-greater-than:before{content:">"}.fa-person-swimming:before{content:""}.fa-swimmer:before{content:""}.fa-arrow-down:before{content:""}.fa-droplet:before{content:""}.fa-tint:before{content:""}.fa-eraser:before{content:""}.fa-earth-americas:before{content:""}.fa-earth:before{content:""}.fa-earth-america:before{content:""}.fa-globe-americas:before{content:""}.fa-person-burst:before{content:""}.fa-dove:before{content:""}.fa-battery-empty:before{content:""}.fa-battery-0:before{content:""}.fa-socks:before{content:""}.fa-inbox:before{content:""}.fa-section:before{content:""}.fa-gauge-high:before{content:""}.fa-tachometer-alt:before{content:""}.fa-tachometer-alt-fast:before{content:""}.fa-envelope-open-text:before{content:""}.fa-hospital:before{content:""}.fa-hospital-alt:before{content:""}.fa-hospital-wide:before{content:""}.fa-wine-bottle:before{content:""}.fa-chess-rook:before{content:""}.fa-bars-staggered:before{content:""}.fa-reorder:before{content:""}.fa-stream:before{content:""}.fa-dharmachakra:before{content:""}.fa-hotdog:before{content:""}.fa-person-walking-with-cane:before{content:""}.fa-blind:before{content:""}.fa-drum:before{content:""}.fa-ice-cream:before{content:""}.fa-heart-circle-bolt:before{content:""}.fa-fax:before{content:""}.fa-paragraph:before{content:""}.fa-check-to-slot:before{content:""}.fa-vote-yea:before{content:""}.fa-star-half:before{content:""}.fa-boxes-stacked:before{content:""}.fa-boxes:before{content:""}.fa-boxes-alt:before{content:""}.fa-link:before{content:""}.fa-chain:before{content:""}.fa-ear-listen:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-tree-city:before{content:""}.fa-play:before{content:""}.fa-font:before{content:""}.fa-rupiah-sign:before{content:""}.fa-magnifying-glass:before{content:""}.fa-search:before{content:""}.fa-table-tennis-paddle-ball:before{content:""}.fa-ping-pong-paddle-ball:before{content:""}.fa-table-tennis:before{content:""}.fa-person-dots-from-line:before{content:""}.fa-diagnoses:before{content:""}.fa-trash-can-arrow-up:before{content:""}.fa-trash-restore-alt:before{content:""}.fa-naira-sign:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-walkie-talkie:before{content:""}.fa-file-pen:before{content:""}.fa-file-edit:before{content:""}.fa-receipt:before{content:""}.fa-square-pen:before{content:""}.fa-pen-square:before{content:""}.fa-pencil-square:before{content:""}.fa-suitcase-rolling:before{content:""}.fa-person-circle-exclamation:before{content:""}.fa-chevron-down:before{content:""}.fa-battery-full:before{content:""}.fa-battery:before{content:""}.fa-battery-5:before{content:""}.fa-skull-crossbones:before{content:""}.fa-code-compare:before{content:""}.fa-list-ul:before{content:""}.fa-list-dots:before{content:""}.fa-school-lock:before{content:""}.fa-tower-cell:before{content:""}.fa-down-long:before{content:""}.fa-long-arrow-alt-down:before{content:""}.fa-ranking-star:before{content:""}.fa-chess-king:before{content:""}.fa-person-harassing:before{content:""}.fa-brazilian-real-sign:before{content:""}.fa-landmark-dome:before{content:""}.fa-landmark-alt:before{content:""}.fa-arrow-up:before{content:""}.fa-tv:before{content:""}.fa-television:before{content:""}.fa-tv-alt:before{content:""}.fa-shrimp:before{content:""}.fa-list-check:before{content:""}.fa-tasks:before{content:""}.fa-jug-detergent:before{content:""}.fa-circle-user:before{content:""}.fa-user-circle:before{content:""}.fa-user-shield:before{content:""}.fa-wind:before{content:""}.fa-car-burst:before{content:""}.fa-car-crash:before{content:""}.fa-y:before{content:"Y"}.fa-person-snowboarding:before{content:""}.fa-snowboarding:before{content:""}.fa-truck-fast:before{content:""}.fa-shipping-fast:before{content:""}.fa-fish:before{content:""}.fa-user-graduate:before{content:""}.fa-circle-half-stroke:before{content:""}.fa-adjust:before{content:""}.fa-clapperboard:before{content:""}.fa-circle-radiation:before{content:""}.fa-radiation-alt:before{content:""}.fa-baseball:before{content:""}.fa-baseball-ball:before{content:""}.fa-jet-fighter-up:before{content:""}.fa-diagram-project:before{content:""}.fa-project-diagram:before{content:""}.fa-copy:before{content:""}.fa-volume-xmark:before{content:""}.fa-volume-mute:before{content:""}.fa-volume-times:before{content:""}.fa-hand-sparkles:before{content:""}.fa-grip:before{content:""}.fa-grip-horizontal:before{content:""}.fa-share-from-square:before{content:""}.fa-share-square:before{content:""}.fa-child-combatant:before{content:""}.fa-child-rifle:before{content:""}.fa-gun:before{content:""}.fa-square-phone:before{content:""}.fa-phone-square:before{content:""}.fa-plus:before{content:"+"}.fa-add:before{content:"+"}.fa-expand:before{content:""}.fa-computer:before{content:""}.fa-xmark:before{content:""}.fa-close:before{content:""}.fa-multiply:before{content:""}.fa-remove:before{content:""}.fa-times:before{content:""}.fa-arrows-up-down-left-right:before{content:""}.fa-arrows:before{content:""}.fa-chalkboard-user:before{content:""}.fa-chalkboard-teacher:before{content:""}.fa-peso-sign:before{content:""}.fa-building-shield:before{content:""}.fa-baby:before{content:""}.fa-users-line:before{content:""}.fa-quote-left:before{content:""}.fa-quote-left-alt:before{content:""}.fa-tractor:before{content:""}.fa-trash-arrow-up:before{content:""}.fa-trash-restore:before{content:""}.fa-arrow-down-up-lock:before{content:""}.fa-lines-leaning:before{content:""}.fa-ruler-combined:before{content:""}.fa-copyright:before{content:""}.fa-equals:before{content:"="}.fa-blender:before{content:""}.fa-teeth:before{content:""}.fa-shekel-sign:before{content:""}.fa-ils:before{content:""}.fa-shekel:before{content:""}.fa-sheqel:before{content:""}.fa-sheqel-sign:before{content:""}.fa-map:before{content:""}.fa-rocket:before{content:""}.fa-photo-film:before{content:""}.fa-photo-video:before{content:""}.fa-folder-minus:before{content:""}.fa-store:before{content:""}.fa-arrow-trend-up:before{content:""}.fa-plug-circle-minus:before{content:""}.fa-sign-hanging:before{content:""}.fa-sign:before{content:""}.fa-bezier-curve:before{content:""}.fa-bell-slash:before{content:""}.fa-tablet:before{content:""}.fa-tablet-android:before{content:""}.fa-school-flag:before{content:""}.fa-fill:before{content:""}.fa-angle-up:before{content:""}.fa-drumstick-bite:before{content:""}.fa-holly-berry:before{content:""}.fa-chevron-left:before{content:""}.fa-bacteria:before{content:""}.fa-hand-lizard:before{content:""}.fa-notdef:before{content:""}.fa-disease:before{content:""}.fa-briefcase-medical:before{content:""}.fa-genderless:before{content:""}.fa-chevron-right:before{content:""}.fa-retweet:before{content:""}.fa-car-rear:before{content:""}.fa-car-alt:before{content:""}.fa-pump-soap:before{content:""}.fa-video-slash:before{content:""}.fa-battery-quarter:before{content:""}.fa-battery-2:before{content:""}.fa-radio:before{content:""}.fa-baby-carriage:before{content:""}.fa-carriage-baby:before{content:""}.fa-traffic-light:before{content:""}.fa-thermometer:before{content:""}.fa-vr-cardboard:before{content:""}.fa-hand-middle-finger:before{content:""}.fa-percent:before{content:"%"}.fa-percentage:before{content:"%"}.fa-truck-moving:before{content:""}.fa-glass-water-droplet:before{content:""}.fa-display:before{content:""}.fa-face-smile:before{content:""}.fa-smile:before{content:""}.fa-thumbtack:before{content:""}.fa-thumb-tack:before{content:""}.fa-trophy:before{content:""}.fa-person-praying:before{content:""}.fa-pray:before{content:""}.fa-hammer:before{content:""}.fa-hand-peace:before{content:""}.fa-rotate:before{content:""}.fa-sync-alt:before{content:""}.fa-spinner:before{content:""}.fa-robot:before{content:""}.fa-peace:before{content:""}.fa-gears:before{content:""}.fa-cogs:before{content:""}.fa-warehouse:before{content:""}.fa-arrow-up-right-dots:before{content:""}.fa-splotch:before{content:""}.fa-face-grin-hearts:before{content:""}.fa-grin-hearts:before{content:""}.fa-dice-four:before{content:""}.fa-sim-card:before{content:""}.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-mercury:before{content:""}.fa-arrow-turn-down:before{content:""}.fa-level-down:before{content:""}.fa-person-falling-burst:before{content:""}.fa-award:before{content:""}.fa-ticket-simple:before{content:""}.fa-ticket-alt:before{content:""}.fa-building:before{content:""}.fa-angles-left:before{content:""}.fa-angle-double-left:before{content:""}.fa-qrcode:before{content:""}.fa-clock-rotate-left:before{content:""}.fa-history:before{content:""}.fa-face-grin-beam-sweat:before{content:""}.fa-grin-beam-sweat:before{content:""}.fa-file-export:before{content:""}.fa-arrow-right-from-file:before{content:""}.fa-shield:before{content:""}.fa-shield-blank:before{content:""}.fa-arrow-up-short-wide:before{content:""}.fa-sort-amount-up-alt:before{content:""}.fa-house-medical:before{content:""}.fa-golf-ball-tee:before{content:""}.fa-golf-ball:before{content:""}.fa-circle-chevron-left:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-house-chimney-window:before{content:""}.fa-pen-nib:before{content:""}.fa-tent-arrow-turn-left:before{content:""}.fa-tents:before{content:""}.fa-wand-magic:before{content:""}.fa-magic:before{content:""}.fa-dog:before{content:""}.fa-carrot:before{content:""}.fa-moon:before{content:""}.fa-wine-glass-empty:before{content:""}.fa-wine-glass-alt:before{content:""}.fa-cheese:before{content:""}.fa-yin-yang:before{content:""}.fa-music:before{content:""}.fa-code-commit:before{content:""}.fa-temperature-low:before{content:""}.fa-person-biking:before{content:""}.fa-biking:before{content:""}.fa-broom:before{content:""}.fa-shield-heart:before{content:""}.fa-gopuram:before{content:""}.fa-earth-oceania:before{content:""}.fa-globe-oceania:before{content:""}.fa-square-xmark:before{content:""}.fa-times-square:before{content:""}.fa-xmark-square:before{content:""}.fa-hashtag:before{content:"#"}.fa-up-right-and-down-left-from-center:before{content:""}.fa-expand-alt:before{content:""}.fa-oil-can:before{content:""}.fa-t:before{content:"T"}.fa-hippo:before{content:""}.fa-chart-column:before{content:""}.fa-infinity:before{content:""}.fa-vial-circle-check:before{content:""}.fa-person-arrow-down-to-line:before{content:""}.fa-voicemail:before{content:""}.fa-fan:before{content:""}.fa-person-walking-luggage:before{content:""}.fa-up-down:before{content:""}.fa-arrows-alt-v:before{content:""}.fa-cloud-moon-rain:before{content:""}.fa-calendar:before{content:""}.fa-trailer:before{content:""}.fa-bahai:before{content:""}.fa-haykal:before{content:""}.fa-sd-card:before{content:""}.fa-dragon:before{content:""}.fa-shoe-prints:before{content:""}.fa-circle-plus:before{content:""}.fa-plus-circle:before{content:""}.fa-face-grin-tongue-wink:before{content:""}.fa-grin-tongue-wink:before{content:""}.fa-hand-holding:before{content:""}.fa-plug-circle-exclamation:before{content:""}.fa-link-slash:before{content:""}.fa-chain-broken:before{content:""}.fa-chain-slash:before{content:""}.fa-unlink:before{content:""}.fa-clone:before{content:""}.fa-person-walking-arrow-loop-left:before{content:""}.fa-arrow-up-z-a:before{content:""}.fa-sort-alpha-up-alt:before{content:""}.fa-fire-flame-curved:before{content:""}.fa-fire-alt:before{content:""}.fa-tornado:before{content:""}.fa-file-circle-plus:before{content:""}.fa-book-quran:before{content:""}.fa-quran:before{content:""}.fa-anchor:before{content:""}.fa-border-all:before{content:""}.fa-face-angry:before{content:""}.fa-angry:before{content:""}.fa-cookie-bite:before{content:""}.fa-arrow-trend-down:before{content:""}.fa-rss:before{content:""}.fa-feed:before{content:""}.fa-draw-polygon:before{content:""}.fa-scale-balanced:before{content:""}.fa-balance-scale:before{content:""}.fa-gauge-simple-high:before{content:""}.fa-tachometer:before{content:""}.fa-tachometer-fast:before{content:""}.fa-shower:before{content:""}.fa-desktop:before{content:""}.fa-desktop-alt:before{content:""}.fa-m:before{content:"M"}.fa-table-list:before{content:""}.fa-th-list:before{content:""}.fa-comment-sms:before{content:""}.fa-sms:before{content:""}.fa-book:before{content:""}.fa-user-plus:before{content:""}.fa-check:before{content:""}.fa-battery-three-quarters:before{content:""}.fa-battery-4:before{content:""}.fa-house-circle-check:before{content:""}.fa-angle-left:before{content:""}.fa-diagram-successor:before{content:""}.fa-truck-arrow-right:before{content:""}.fa-arrows-split-up-and-left:before{content:""}.fa-hand-fist:before{content:""}.fa-fist-raised:before{content:""}.fa-cloud-moon:before{content:""}.fa-briefcase:before{content:""}.fa-person-falling:before{content:""}.fa-image-portrait:before{content:""}.fa-portrait:before{content:""}.fa-user-tag:before{content:""}.fa-rug:before{content:""}.fa-earth-europe:before{content:""}.fa-globe-europe:before{content:""}.fa-cart-flatbed-suitcase:before{content:""}.fa-luggage-cart:before{content:""}.fa-rectangle-xmark:before{content:""}.fa-rectangle-times:before{content:""}.fa-times-rectangle:before{content:""}.fa-window-close:before{content:""}.fa-baht-sign:before{content:""}.fa-book-open:before{content:""}.fa-book-journal-whills:before{content:""}.fa-journal-whills:before{content:""}.fa-handcuffs:before{content:""}.fa-triangle-exclamation:before{content:""}.fa-exclamation-triangle:before{content:""}.fa-warning:before{content:""}.fa-database:before{content:""}.fa-share:before{content:""}.fa-mail-forward:before{content:""}.fa-bottle-droplet:before{content:""}.fa-mask-face:before{content:""}.fa-hill-rockslide:before{content:""}.fa-right-left:before{content:""}.fa-exchange-alt:before{content:""}.fa-paper-plane:before{content:""}.fa-road-circle-exclamation:before{content:""}.fa-dungeon:before{content:""}.fa-align-right:before{content:""}.fa-money-bill-1-wave:before{content:""}.fa-money-bill-wave-alt:before{content:""}.fa-life-ring:before{content:""}.fa-hands:before{content:""}.fa-sign-language:before{content:""}.fa-signing:before{content:""}.fa-calendar-day:before{content:""}.fa-water-ladder:before{content:""}.fa-ladder-water:before{content:""}.fa-swimming-pool:before{content:""}.fa-arrows-up-down:before{content:""}.fa-arrows-v:before{content:""}.fa-face-grimace:before{content:""}.fa-grimace:before{content:""}.fa-wheelchair-move:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-turn-down:before{content:""}.fa-level-down-alt:before{content:""}.fa-person-walking-arrow-right:before{content:""}.fa-square-envelope:before{content:""}.fa-envelope-square:before{content:""}.fa-dice:before{content:""}.fa-bowling-ball:before{content:""}.fa-brain:before{content:""}.fa-bandage:before{content:""}.fa-band-aid:before{content:""}.fa-calendar-minus:before{content:""}.fa-circle-xmark:before{content:""}.fa-times-circle:before{content:""}.fa-xmark-circle:before{content:""}.fa-gifts:before{content:""}.fa-hotel:before{content:""}.fa-earth-asia:before{content:""}.fa-globe-asia:before{content:""}.fa-id-card-clip:before{content:""}.fa-id-card-alt:before{content:""}.fa-magnifying-glass-plus:before{content:""}.fa-search-plus:before{content:""}.fa-thumbs-up:before{content:""}.fa-user-clock:before{content:""}.fa-hand-dots:before{content:""}.fa-allergies:before{content:""}.fa-file-invoice:before{content:""}.fa-window-minimize:before{content:""}.fa-mug-saucer:before{content:""}.fa-coffee:before{content:""}.fa-brush:before{content:""}.fa-mask:before{content:""}.fa-magnifying-glass-minus:before{content:""}.fa-search-minus:before{content:""}.fa-ruler-vertical:before{content:""}.fa-user-large:before{content:""}.fa-user-alt:before{content:""}.fa-train-tram:before{content:""}.fa-user-nurse:before{content:""}.fa-syringe:before{content:""}.fa-cloud-sun:before{content:""}.fa-stopwatch-20:before{content:""}.fa-square-full:before{content:""}.fa-magnet:before{content:""}.fa-jar:before{content:""}.fa-note-sticky:before{content:""}.fa-sticky-note:before{content:""}.fa-bug-slash:before{content:""}.fa-arrow-up-from-water-pump:before{content:""}.fa-bone:before{content:""}.fa-user-injured:before{content:""}.fa-face-sad-tear:before{content:""}.fa-sad-tear:before{content:""}.fa-plane:before{content:""}.fa-tent-arrows-down:before{content:""}.fa-exclamation:before{content:"!"}.fa-arrows-spin:before{content:""}.fa-print:before{content:""}.fa-turkish-lira-sign:before{content:""}.fa-try:before{content:""}.fa-turkish-lira:before{content:""}.fa-dollar-sign:before{content:"$"}.fa-dollar:before{content:"$"}.fa-usd:before{content:"$"}.fa-x:before{content:"X"}.fa-magnifying-glass-dollar:before{content:""}.fa-search-dollar:before{content:""}.fa-users-gear:before{content:""}.fa-users-cog:before{content:""}.fa-person-military-pointing:before{content:""}.fa-building-columns:before{content:""}.fa-bank:before{content:""}.fa-institution:before{content:""}.fa-museum:before{content:""}.fa-university:before{content:""}.fa-umbrella:before{content:""}.fa-trowel:before{content:""}.fa-d:before{content:"D"}.fa-stapler:before{content:""}.fa-masks-theater:before{content:""}.fa-theater-masks:before{content:""}.fa-kip-sign:before{content:""}.fa-hand-point-left:before{content:""}.fa-handshake-simple:before{content:""}.fa-handshake-alt:before{content:""}.fa-jet-fighter:before{content:""}.fa-fighter-jet:before{content:""}.fa-square-share-nodes:before{content:""}.fa-share-alt-square:before{content:""}.fa-barcode:before{content:""}.fa-plus-minus:before{content:""}.fa-video:before{content:""}.fa-video-camera:before{content:""}.fa-graduation-cap:before{content:""}.fa-mortar-board:before{content:""}.fa-hand-holding-medical:before{content:""}.fa-person-circle-check:before{content:""}.fa-turn-up:before{content:""}.fa-level-up-alt:before{content:""}.sr-only,.fa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sr-only-focusable:not(:focus),.fa-sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(/build/assets/fa-solid-900-9fc85f3a.woff2) format("woff2"),url(/build/assets/fa-solid-900-fbbf06d7.ttf) format("truetype")}.fas,.fa-solid{font-weight:900}:root,:host{--fa-style-family-brands: "Font Awesome 6 Brands";--fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(/build/assets/fa-brands-400-3a8924cd.woff2) format("woff2"),url(/build/assets/fa-brands-400-5656d596.ttf) format("truetype")}.fab,.fa-brands{font-weight:400}.fa-monero:before{content:""}.fa-hooli:before{content:""}.fa-yelp:before{content:""}.fa-cc-visa:before{content:""}.fa-lastfm:before{content:""}.fa-shopware:before{content:""}.fa-creative-commons-nc:before{content:""}.fa-aws:before{content:""}.fa-redhat:before{content:""}.fa-yoast:before{content:""}.fa-cloudflare:before{content:""}.fa-ups:before{content:""}.fa-pixiv:before{content:""}.fa-wpexplorer:before{content:""}.fa-dyalog:before{content:""}.fa-bity:before{content:""}.fa-stackpath:before{content:""}.fa-buysellads:before{content:""}.fa-first-order:before{content:""}.fa-modx:before{content:""}.fa-guilded:before{content:""}.fa-vnv:before{content:""}.fa-square-js:before{content:""}.fa-js-square:before{content:""}.fa-microsoft:before{content:""}.fa-qq:before{content:""}.fa-orcid:before{content:""}.fa-java:before{content:""}.fa-invision:before{content:""}.fa-creative-commons-pd-alt:before{content:""}.fa-centercode:before{content:""}.fa-glide-g:before{content:""}.fa-drupal:before{content:""}.fa-hire-a-helper:before{content:""}.fa-creative-commons-by:before{content:""}.fa-unity:before{content:""}.fa-whmcs:before{content:""}.fa-rocketchat:before{content:""}.fa-vk:before{content:""}.fa-untappd:before{content:""}.fa-mailchimp:before{content:""}.fa-css3-alt:before{content:""}.fa-square-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-vimeo-v:before{content:""}.fa-contao:before{content:""}.fa-square-font-awesome:before{content:""}.fa-deskpro:before{content:""}.fa-brave:before{content:""}.fa-sistrix:before{content:""}.fa-square-instagram:before{content:""}.fa-instagram-square:before{content:""}.fa-battle-net:before{content:""}.fa-the-red-yeti:before{content:""}.fa-square-hacker-news:before{content:""}.fa-hacker-news-square:before{content:""}.fa-edge:before{content:""}.fa-threads:before{content:""}.fa-napster:before{content:""}.fa-square-snapchat:before{content:""}.fa-snapchat-square:before{content:""}.fa-google-plus-g:before{content:""}.fa-artstation:before{content:""}.fa-markdown:before{content:""}.fa-sourcetree:before{content:""}.fa-google-plus:before{content:""}.fa-diaspora:before{content:""}.fa-foursquare:before{content:""}.fa-stack-overflow:before{content:""}.fa-github-alt:before{content:""}.fa-phoenix-squadron:before{content:""}.fa-pagelines:before{content:""}.fa-algolia:before{content:""}.fa-red-river:before{content:""}.fa-creative-commons-sa:before{content:""}.fa-safari:before{content:""}.fa-google:before{content:""}.fa-square-font-awesome-stroke:before{content:""}.fa-font-awesome-alt:before{content:""}.fa-atlassian:before{content:""}.fa-linkedin-in:before{content:""}.fa-digital-ocean:before{content:""}.fa-nimblr:before{content:""}.fa-chromecast:before{content:""}.fa-evernote:before{content:""}.fa-hacker-news:before{content:""}.fa-creative-commons-sampling:before{content:""}.fa-adversal:before{content:""}.fa-creative-commons:before{content:""}.fa-watchman-monitoring:before{content:""}.fa-fonticons:before{content:""}.fa-weixin:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-codepen:before{content:""}.fa-git-alt:before{content:""}.fa-lyft:before{content:""}.fa-rev:before{content:""}.fa-windows:before{content:""}.fa-wizards-of-the-coast:before{content:""}.fa-square-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-meetup:before{content:""}.fa-centos:before{content:""}.fa-adn:before{content:""}.fa-cloudsmith:before{content:""}.fa-opensuse:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-square-dribbble:before{content:""}.fa-dribbble-square:before{content:""}.fa-codiepie:before{content:""}.fa-node:before{content:""}.fa-mix:before{content:""}.fa-steam:before{content:""}.fa-cc-apple-pay:before{content:""}.fa-scribd:before{content:""}.fa-debian:before{content:""}.fa-openid:before{content:""}.fa-instalod:before{content:""}.fa-expeditedssl:before{content:""}.fa-sellcast:before{content:""}.fa-square-twitter:before{content:""}.fa-twitter-square:before{content:""}.fa-r-project:before{content:""}.fa-delicious:before{content:""}.fa-freebsd:before{content:""}.fa-vuejs:before{content:""}.fa-accusoft:before{content:""}.fa-ioxhost:before{content:""}.fa-fonticons-fi:before{content:""}.fa-app-store:before{content:""}.fa-cc-mastercard:before{content:""}.fa-itunes-note:before{content:""}.fa-golang:before{content:""}.fa-kickstarter:before{content:""}.fa-grav:before{content:""}.fa-weibo:before{content:""}.fa-uncharted:before{content:""}.fa-firstdraft:before{content:""}.fa-square-youtube:before{content:""}.fa-youtube-square:before{content:""}.fa-wikipedia-w:before{content:""}.fa-wpressr:before{content:""}.fa-rendact:before{content:""}.fa-angellist:before{content:""}.fa-galactic-republic:before{content:""}.fa-nfc-directional:before{content:""}.fa-skype:before{content:""}.fa-joget:before{content:""}.fa-fedora:before{content:""}.fa-stripe-s:before{content:""}.fa-meta:before{content:""}.fa-laravel:before{content:""}.fa-hotjar:before{content:""}.fa-bluetooth-b:before{content:""}.fa-square-letterboxd:before{content:""}.fa-sticker-mule:before{content:""}.fa-creative-commons-zero:before{content:""}.fa-hips:before{content:""}.fa-behance:before{content:""}.fa-reddit:before{content:""}.fa-discord:before{content:""}.fa-chrome:before{content:""}.fa-app-store-ios:before{content:""}.fa-cc-discover:before{content:""}.fa-wpbeginner:before{content:""}.fa-confluence:before{content:""}.fa-shoelace:before{content:""}.fa-mdb:before{content:""}.fa-dochub:before{content:""}.fa-accessible-icon:before{content:""}.fa-ebay:before{content:""}.fa-amazon:before{content:""}.fa-unsplash:before{content:""}.fa-yarn:before{content:""}.fa-square-steam:before{content:""}.fa-steam-square:before{content:""}.fa-500px:before{content:""}.fa-square-vimeo:before{content:""}.fa-vimeo-square:before{content:""}.fa-asymmetrik:before{content:""}.fa-font-awesome:before{content:""}.fa-font-awesome-flag:before{content:""}.fa-font-awesome-logo-full:before{content:""}.fa-gratipay:before{content:""}.fa-apple:before{content:""}.fa-hive:before{content:""}.fa-gitkraken:before{content:""}.fa-keybase:before{content:""}.fa-apple-pay:before{content:""}.fa-padlet:before{content:""}.fa-amazon-pay:before{content:""}.fa-square-github:before{content:""}.fa-github-square:before{content:""}.fa-stumbleupon:before{content:""}.fa-fedex:before{content:""}.fa-phoenix-framework:before{content:""}.fa-shopify:before{content:""}.fa-neos:before{content:""}.fa-square-threads:before{content:""}.fa-hackerrank:before{content:""}.fa-researchgate:before{content:""}.fa-swift:before{content:""}.fa-angular:before{content:""}.fa-speakap:before{content:""}.fa-angrycreative:before{content:""}.fa-y-combinator:before{content:""}.fa-empire:before{content:""}.fa-envira:before{content:""}.fa-google-scholar:before{content:""}.fa-square-gitlab:before{content:""}.fa-gitlab-square:before{content:""}.fa-studiovinari:before{content:""}.fa-pied-piper:before{content:""}.fa-wordpress:before{content:""}.fa-product-hunt:before{content:""}.fa-firefox:before{content:""}.fa-linode:before{content:""}.fa-goodreads:before{content:""}.fa-square-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-jsfiddle:before{content:""}.fa-sith:before{content:""}.fa-themeisle:before{content:""}.fa-page4:before{content:""}.fa-hashnode:before{content:""}.fa-react:before{content:""}.fa-cc-paypal:before{content:""}.fa-squarespace:before{content:""}.fa-cc-stripe:before{content:""}.fa-creative-commons-share:before{content:""}.fa-bitcoin:before{content:""}.fa-keycdn:before{content:""}.fa-opera:before{content:""}.fa-itch-io:before{content:""}.fa-umbraco:before{content:""}.fa-galactic-senate:before{content:""}.fa-ubuntu:before{content:""}.fa-draft2digital:before{content:""}.fa-stripe:before{content:""}.fa-houzz:before{content:""}.fa-gg:before{content:""}.fa-dhl:before{content:""}.fa-square-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-xing:before{content:""}.fa-blackberry:before{content:""}.fa-creative-commons-pd:before{content:""}.fa-playstation:before{content:""}.fa-quinscape:before{content:""}.fa-less:before{content:""}.fa-blogger-b:before{content:""}.fa-opencart:before{content:""}.fa-vine:before{content:""}.fa-signal-messenger:before{content:""}.fa-paypal:before{content:""}.fa-gitlab:before{content:""}.fa-typo3:before{content:""}.fa-reddit-alien:before{content:""}.fa-yahoo:before{content:""}.fa-dailymotion:before{content:""}.fa-affiliatetheme:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-bootstrap:before{content:""}.fa-odnoklassniki:before{content:""}.fa-nfc-symbol:before{content:""}.fa-mintbit:before{content:""}.fa-ethereum:before{content:""}.fa-speaker-deck:before{content:""}.fa-creative-commons-nc-eu:before{content:""}.fa-patreon:before{content:""}.fa-avianex:before{content:""}.fa-ello:before{content:""}.fa-gofore:before{content:""}.fa-bimobject:before{content:""}.fa-brave-reverse:before{content:""}.fa-facebook-f:before{content:""}.fa-square-google-plus:before{content:""}.fa-google-plus-square:before{content:""}.fa-mandalorian:before{content:""}.fa-first-order-alt:before{content:""}.fa-osi:before{content:""}.fa-google-wallet:before{content:""}.fa-d-and-d-beyond:before{content:""}.fa-periscope:before{content:""}.fa-fulcrum:before{content:""}.fa-cloudscale:before{content:""}.fa-forumbee:before{content:""}.fa-mizuni:before{content:""}.fa-schlix:before{content:""}.fa-square-xing:before{content:""}.fa-xing-square:before{content:""}.fa-bandcamp:before{content:""}.fa-wpforms:before{content:""}.fa-cloudversify:before{content:""}.fa-usps:before{content:""}.fa-megaport:before{content:""}.fa-magento:before{content:""}.fa-spotify:before{content:""}.fa-optin-monster:before{content:""}.fa-fly:before{content:""}.fa-aviato:before{content:""}.fa-itunes:before{content:""}.fa-cuttlefish:before{content:""}.fa-blogger:before{content:""}.fa-flickr:before{content:""}.fa-viber:before{content:""}.fa-soundcloud:before{content:""}.fa-digg:before{content:""}.fa-tencent-weibo:before{content:""}.fa-letterboxd:before{content:""}.fa-symfony:before{content:""}.fa-maxcdn:before{content:""}.fa-etsy:before{content:""}.fa-facebook-messenger:before{content:""}.fa-audible:before{content:""}.fa-think-peaks:before{content:""}.fa-bilibili:before{content:""}.fa-erlang:before{content:""}.fa-x-twitter:before{content:""}.fa-cotton-bureau:before{content:""}.fa-dashcube:before{content:""}.fa-42-group:before{content:""}.fa-innosoft:before{content:""}.fa-stack-exchange:before{content:""}.fa-elementor:before{content:""}.fa-square-pied-piper:before{content:""}.fa-pied-piper-square:before{content:""}.fa-creative-commons-nd:before{content:""}.fa-palfed:before{content:""}.fa-superpowers:before{content:""}.fa-resolving:before{content:""}.fa-xbox:before{content:""}.fa-searchengin:before{content:""}.fa-tiktok:before{content:""}.fa-square-facebook:before{content:""}.fa-facebook-square:before{content:""}.fa-renren:before{content:""}.fa-linux:before{content:""}.fa-glide:before{content:""}.fa-linkedin:before{content:""}.fa-hubspot:before{content:""}.fa-deploydog:before{content:""}.fa-twitch:before{content:""}.fa-ravelry:before{content:""}.fa-mixer:before{content:""}.fa-square-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-vimeo:before{content:""}.fa-mendeley:before{content:""}.fa-uniregistry:before{content:""}.fa-figma:before{content:""}.fa-creative-commons-remix:before{content:""}.fa-cc-amazon-pay:before{content:""}.fa-dropbox:before{content:""}.fa-instagram:before{content:""}.fa-cmplid:before{content:""}.fa-upwork:before{content:""}.fa-facebook:before{content:""}.fa-gripfire:before{content:""}.fa-jedi-order:before{content:""}.fa-uikit:before{content:""}.fa-fort-awesome-alt:before{content:""}.fa-phabricator:before{content:""}.fa-ussunnah:before{content:""}.fa-earlybirds:before{content:""}.fa-trade-federation:before{content:""}.fa-autoprefixer:before{content:""}.fa-whatsapp:before{content:""}.fa-slideshare:before{content:""}.fa-google-play:before{content:""}.fa-viadeo:before{content:""}.fa-line:before{content:""}.fa-google-drive:before{content:""}.fa-servicestack:before{content:""}.fa-simplybuilt:before{content:""}.fa-bitbucket:before{content:""}.fa-imdb:before{content:""}.fa-deezer:before{content:""}.fa-raspberry-pi:before{content:""}.fa-jira:before{content:""}.fa-docker:before{content:""}.fa-screenpal:before{content:""}.fa-bluetooth:before{content:""}.fa-gitter:before{content:""}.fa-d-and-d:before{content:""}.fa-microblog:before{content:""}.fa-cc-diners-club:before{content:""}.fa-gg-circle:before{content:""}.fa-pied-piper-hat:before{content:""}.fa-kickstarter-k:before{content:""}.fa-yandex:before{content:""}.fa-readme:before{content:""}.fa-html5:before{content:""}.fa-sellsy:before{content:""}.fa-sass:before{content:""}.fa-wirsindhandwerk:before{content:""}.fa-wsh:before{content:""}.fa-buromobelexperte:before{content:""}.fa-salesforce:before{content:""}.fa-octopus-deploy:before{content:""}.fa-medapps:before{content:""}.fa-ns8:before{content:""}.fa-pinterest-p:before{content:""}.fa-apper:before{content:""}.fa-fort-awesome:before{content:""}.fa-waze:before{content:""}.fa-cc-jcb:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-fantasy-flight-games:before{content:""}.fa-rust:before{content:""}.fa-wix:before{content:""}.fa-square-behance:before{content:""}.fa-behance-square:before{content:""}.fa-supple:before{content:""}.fa-webflow:before{content:""}.fa-rebel:before{content:""}.fa-css3:before{content:""}.fa-staylinked:before{content:""}.fa-kaggle:before{content:""}.fa-space-awesome:before{content:""}.fa-deviantart:before{content:""}.fa-cpanel:before{content:""}.fa-goodreads-g:before{content:""}.fa-square-git:before{content:""}.fa-git-square:before{content:""}.fa-square-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-trello:before{content:""}.fa-creative-commons-nc-jp:before{content:""}.fa-get-pocket:before{content:""}.fa-perbyte:before{content:""}.fa-grunt:before{content:""}.fa-weebly:before{content:""}.fa-connectdevelop:before{content:""}.fa-leanpub:before{content:""}.fa-black-tie:before{content:""}.fa-themeco:before{content:""}.fa-python:before{content:""}.fa-android:before{content:""}.fa-bots:before{content:""}.fa-free-code-camp:before{content:""}.fa-hornbill:before{content:""}.fa-js:before{content:""}.fa-ideal:before{content:""}.fa-git:before{content:""}.fa-dev:before{content:""}.fa-sketch:before{content:""}.fa-yandex-international:before{content:""}.fa-cc-amex:before{content:""}.fa-uber:before{content:""}.fa-github:before{content:""}.fa-php:before{content:""}.fa-alipay:before{content:""}.fa-youtube:before{content:""}.fa-skyatlas:before{content:""}.fa-firefox-browser:before{content:""}.fa-replyd:before{content:""}.fa-suse:before{content:""}.fa-jenkins:before{content:""}.fa-twitter:before{content:""}.fa-rockrms:before{content:""}.fa-pinterest:before{content:""}.fa-buffer:before{content:""}.fa-npm:before{content:""}.fa-yammer:before{content:""}.fa-btc:before{content:""}.fa-dribbble:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-internet-explorer:before{content:""}.fa-stubber:before{content:""}.fa-telegram:before{content:""}.fa-telegram-plane:before{content:""}.fa-old-republic:before{content:""}.fa-odysee:before{content:""}.fa-square-whatsapp:before{content:""}.fa-whatsapp-square:before{content:""}.fa-node-js:before{content:""}.fa-edge-legacy:before{content:""}.fa-slack:before{content:""}.fa-slack-hash:before{content:""}.fa-medrt:before{content:""}.fa-usb:before{content:""}.fa-tumblr:before{content:""}.fa-vaadin:before{content:""}.fa-quora:before{content:""}.fa-square-x-twitter:before{content:""}.fa-reacteurope:before{content:""}.fa-medium:before{content:""}.fa-medium-m:before{content:""}.fa-amilia:before{content:""}.fa-mixcloud:before{content:""}.fa-flipboard:before{content:""}.fa-viacoin:before{content:""}.fa-critical-role:before{content:""}.fa-sitrox:before{content:""}.fa-discourse:before{content:""}.fa-joomla:before{content:""}.fa-mastodon:before{content:""}.fa-airbnb:before{content:""}.fa-wolf-pack-battalion:before{content:""}.fa-buy-n-large:before{content:""}.fa-gulp:before{content:""}.fa-creative-commons-sampling-plus:before{content:""}.fa-strava:before{content:""}.fa-ember:before{content:""}.fa-canadian-maple-leaf:before{content:""}.fa-teamspeak:before{content:""}.fa-pushed:before{content:""}.fa-wordpress-simple:before{content:""}.fa-nutritionix:before{content:""}.fa-wodu:before{content:""}.fa-google-pay:before{content:""}.fa-intercom:before{content:""}.fa-zhihu:before{content:""}.fa-korvue:before{content:""}.fa-pix:before{content:""}.fa-steam-symbol:before{content:""}/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. - */:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(/build/assets/fa-regular-400-9169d8be.woff2) format("woff2"),url(/build/assets/fa-regular-400-7d81a1a7.ttf) format("truetype")}.far,.fa-regular{font-weight:400} + */:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(/build/assets/fa-regular-400-2bccecf0.woff2) format("woff2"),url(/build/assets/fa-regular-400-5d02dc9b.ttf) format("truetype")}.far,.fa-regular{font-weight:400} diff --git a/public/build/assets/create-5a4939e8.js b/public/build/assets/create-5a4939e8.js new file mode 100644 index 0000000000..0b024e21c1 --- /dev/null +++ b/public/build/assets/create-5a4939e8.js @@ -0,0 +1 @@ +import{a as m,d as y,f as d}from"./format-money-2e5851ad.js";import{d as w,c as b}from"./create-empty-split-81f71b2e.js";import{l as v,a as T,b as C,c as P,p as E,d as _,s as L,e as c,f as S,g as D,h as A,i as x,j as k,k as h,m as p}from"./splice-errors-into-transactions-6727b386.js";import{l,i as r,m as B}from"./vendor-50e42c6c.js";import"./get-28b9aa25.js";class M{post(t){let s="/api/v2/transactions";return m.post(s,t)}}let n=[],u=[];document.addEventListener("location-remove",e=>{u[e.detail.index].remove()});function O(e){let t=0;if(document.querySelector("#form")._x_dataStack[0].$data.entries[t].hasLocation===!1){u[t]=new l.marker(e.latlng,{draggable:!0}),u[t].on("dragend",U),u[t].addTo(n[t]);const o=new CustomEvent("location-set",{detail:{latitude:e.latlng.lat,longitude:e.latlng.lng,index:t,zoomLevel:n[t].getZoom()}});document.dispatchEvent(o)}}function F(e){let t=0;const s=new CustomEvent("location-zoom",{detail:{index:t,zoomLevel:n[t].getZoom()}});document.dispatchEvent(s)}function U(e){let t=e.target,s=t.getLatLng();t.setLatLng(new l.LatLng(s.lat,s.lng),{draggable:"true"});const o=new CustomEvent("location-move",{detail:{latitude:s.lat,longitude:s.lng,index:0}});document.dispatchEvent(o)}function z(e){if(e>0){console.warn("Corwardly refuse to add a map on split #"+(e+1));return}if(typeof n[e]>"u"){let t=document.getElementById("location_map");t&&(n[e]=l.map(t).setView([t.dataset.latitude,t.dataset.longitude],t.dataset.zoomLevel),l.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png",{maxZoom:19,attribution:'© OpenStreetMap'}).addTo(n[e]),n[e].on("click",O),n[e].on("zoomend",F))}}const a=k();let I=function(){return{entries:[],formStates:{loadingCurrencies:!0,loadingBudgets:!0,loadingPiggyBanks:!0,loadingSubscriptions:!0,isSubmitting:!1,returnHereButton:!1,saveAsNewButton:!1,resetButton:!0,rulesButton:!0,webhooksButton:!0},formBehaviour:{formType:"create",foreignCurrencyEnabled:!0},formData:{defaultCurrency:null,enabledCurrencies:[],nativeCurrencies:[],foreignCurrencies:[],budgets:[],piggyBanks:[],subscriptions:[]},groupProperties:{transactionType:"unknown",title:null,id:null,totalAmount:0},notifications:{error:{show:!1,text:"",url:""},success:{show:!1,text:"",url:""},wait:{show:!1,text:""}},filters:{source:[],destination:[]},changedDateTime(e){console.warn("changedDateTime, event is not used")},changedDescription(e){console.warn("changedDescription, event is not used")},changedDestinationAccount(e){this.detectTransactionType()},changedSourceAccount(e){this.detectTransactionType()},detectTransactionType(){const e=this.entries[0].source_account.type??"unknown",t=this.entries[0].destination_account.type??"unknown";if(e==="unknown"&&t==="unknown"){this.groupProperties.transactionType="unknown",console.warn("Cannot infer transaction type from two unknown accounts.");return}if(e===t&&["Asset account","Loan","Debt","Mortgage"].includes(e)){this.groupProperties.transactionType="transfer",console.log('Transaction type is detected to be "'+this.groupProperties.transactionType+'".'),console.log("filter down currencies for transfer."),this.filterNativeCurrencies(this.entries[0].source_account.currency_code),this.filterForeignCurrencies(this.entries[0].destination_account.currency_code);return}if(e==="Asset account"&&["Expense account","Debt","Loan","Mortgage"].includes(t)){this.groupProperties.transactionType="withdrawal",console.log('[a] Transaction type is detected to be "'+this.groupProperties.transactionType+'".'),this.filterNativeCurrencies(this.entries[0].source_account.currency_code);return}if(e==="Asset account"&&t==="unknown"){this.groupProperties.transactionType="withdrawal",console.log('[b] Transaction type is detected to be "'+this.groupProperties.transactionType+'".'),console.log(this.entries[0].source_account),this.filterNativeCurrencies(this.entries[0].source_account.currency_code);return}if(["Debt","Loan","Mortgage"].includes(e)&&t==="Expense account"){this.groupProperties.transactionType="withdrawal",console.log('[c] Transaction type is detected to be "'+this.groupProperties.transactionType+'".'),this.filterNativeCurrencies(this.entries[0].source_account.currency_code);return}if(e==="Revenue account"&&["Asset account","Debt","Loan","Mortgage"].includes(t)){this.groupProperties.transactionType="deposit",console.log('Transaction type is detected to be "'+this.groupProperties.transactionType+'".');return}if(e==="unknown"&&["Asset account","Debt","Loan","Mortgage"].includes(t)){this.groupProperties.transactionType="deposit",console.log('Transaction type is detected to be "'+this.groupProperties.transactionType+'".');return}if(e==="Expense account"&&["Asset account","Debt","Loan","Mortgage"].includes(t)){this.groupProperties.transactionType="deposit",console.warn('FORCE transaction type to be "'+this.groupProperties.transactionType+'".'),this.entries[0].source_account.id="";return}if(["Debt","Loan","Mortgage"].includes(e)&&t==="Asset account"){this.groupProperties.transactionType="deposit",console.log('Transaction type is detected to be "'+this.groupProperties.transactionType+'".');return}console.warn('Unknown account combination between "'+e+'" and "'+t+'".')},formattedTotalAmount(){return this.entries.length===0?d(this.groupProperties.totalAmount,"EUR"):d(this.groupProperties.totalAmount,this.entries[0].currency_code??"EUR")},filterForeignCurrencies(e){let t=[],s;for(let o in this.formData.enabledCurrencies)if(this.formData.enabledCurrencies.hasOwnProperty(o)){let i=this.formData.enabledCurrencies[o];i.code===e&&(s=i)}t.push(s),this.formData.foreignCurrencies=t,t.length===1&&t[0].code===this.entries[0].source_account.currency_code&&(console.log("Foreign currency is same as source currency. Disable foreign amount."),this.formBehaviour.foreignCurrencyEnabled=!1),t.length===1&&t[0].code!==this.entries[0].source_account.currency_code&&(console.log("Foreign currency is NOT same as source currency. Enable foreign amount."),this.formBehaviour.foreignCurrencyEnabled=!0);for(let o in this.entries)this.entries.hasOwnProperty(o)&&(this.entries[o].foreign_currency_code=e)},filterNativeCurrencies(e){let t=[],s;for(let o in this.formData.enabledCurrencies)if(this.formData.enabledCurrencies.hasOwnProperty(o)){let i=this.formData.enabledCurrencies[o];i.code===e&&(s=i)}t.push(s),this.formData.nativeCurrencies=t;for(let o in this.entries)this.entries.hasOwnProperty(o)&&(this.entries[o].currency_code=e)},changedAmount(e){const t=parseInt(e.target.dataset.index);this.entries[t].amount=parseFloat(e.target.value),this.groupProperties.totalAmount=0;for(let s in this.entries)this.entries.hasOwnProperty(s)&&(this.groupProperties.totalAmount=this.groupProperties.totalAmount+parseFloat(this.entries[s].amount))},addedSplit(){},processUpload(e){this.showMessageOrRedirectUser()},processUploadError(e){this.notifications.success.show=!1,this.notifications.wait.show=!1,this.notifications.error.show=!0,this.formStates.isSubmitting=!1,this.notifications.error.text=r.t("firefly.errors_upload"),console.error(e)},init(){this.addSplit(),v().then(e=>{this.formStates.loadingCurrencies=!1,this.formData.defaultCurrency=e.defaultCurrency,this.formData.enabledCurrencies=e.enabledCurrencies,this.formData.nativeCurrencies=e.nativeCurrencies,this.formData.foreignCurrencies=e.foreignCurrencies}),T().then(e=>{this.formData.budgets=e,this.formStates.loadingBudgets=!1}),C().then(e=>{this.formData.piggyBanks=e,this.formStates.loadingPiggyBanks=!1}),P().then(e=>{this.formData.subscriptions=e,this.formStates.loadingSubscriptions=!1}),document.addEventListener("upload-success",e=>{this.processUpload(e),document.querySelectorAll("input[type=file]").value=""}),document.addEventListener("upload-error",e=>{this.processUploadError(e)}),document.addEventListener("location-move",e=>{this.entries[e.detail.index].latitude=e.detail.latitude,this.entries[e.detail.index].longitude=e.detail.longitude}),document.addEventListener("location-set",e=>{this.entries[e.detail.index].hasLocation=!0,this.entries[e.detail.index].latitude=e.detail.latitude,this.entries[e.detail.index].longitude=e.detail.longitude,this.entries[e.detail.index].zoomLevel=e.detail.zoomLevel}),document.addEventListener("location-zoom",e=>{this.entries[e.detail.index].hasLocation=!0,this.entries[e.detail.index].zoomLevel=e.detail.zoomLevel}),this.filters.source=["Asset account","Loan","Debt","Mortgage","Revenue account"],this.filters.destination=["Expense account","Loan","Debt","Mortgage","Asset account"]},submitTransaction(){this.notifications.error.show=!1,this.notifications.success.show=!1,this.notifications.wait.show=!1;for(let o in this.entries)this.entries.hasOwnProperty(o)&&(this.entries[o].errors=w());this.formStates.isSubmitting=!0,this.detectTransactionType();let e=E(this.entries,null,this.groupProperties.transactionType),t={group_title:this.groupProperties.title,fire_webhooks:this.formStates.webhooksButton,apply_rules:this.formStates.rulesButton,transactions:e};this.groupProperties.title===null&&e.length>1&&(t.group_title=e[0].description);let s=new M;console.log(t),s.post(t).then(o=>{const i=o.data.data;if(this.groupProperties.id=parseInt(i.id),this.groupProperties.title=i.attributes.group_title??i.attributes.transactions[0].description,_(this.groupProperties.id,i.attributes.transactions)>0){this.notifications.wait.show=!0,this.notifications.wait.text=r.t("firefly.wait_attachments");return}this.showMessageOrRedirectUser()}).catch(o=>{this.submitting=!1,console.log(o),typeof o.response<"u"&&this.parseErrors(o.response.data)})},showMessageOrRedirectUser(){if(this.notifications.error.show=!1,this.notifications.success.show=!1,this.notifications.wait.show=!1,this.formStates.returnHereButton){this.notifications.success.show=!0,this.notifications.success.url="transactions/show/"+this.groupProperties.id,this.notifications.success.text=r.t("firefly.stored_journal_js",{description:this.groupProperties.title}),this.formStates.resetButton&&(this.entries=[],this.addSplit(),this.groupProperties.totalAmount=0);return}window.location="transactions/show/"+this.groupProperties.id+"?transaction_group_id="+this.groupProperties.id+"&message=created"},parseErrors(e){this.notifications.error.show=!0,this.notifications.success.show=!1,this.notifications.wait.show=!1,this.formStates.isSubmitting=!1,this.notifications.error.text=r.t("firefly.errors_submission_v2",{errorMessage:e.message}),e.hasOwnProperty("errors")&&(this.entries=L(e.errors,this.entries))},addSplit(){this.entries.push(b()),setTimeout(()=>{B.init("select.ac-tags",{allowClear:!0,server:a.tag,liveServer:!0,clearEnd:!0,allowNew:!0,notFoundMessage:r.t("firefly.nothing_found"),noCache:!0,fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}}});const e=this.entries.length-1;z(e);const t=function(s,o,i){return s.name_with_balance+'
'+r.t("firefly.account_type_"+s.type)+""};c({selector:"input.ac-source",serverUrl:a.account,onChange:S,onSelectItem:D,hiddenValue:this.entries[e].source_account.alpine_name}),c({selector:"input.ac-dest",serverUrl:a.account,filters:this.filters.destination,onRenderItem:t,onChange:A,onSelectItem:x}),c({selector:"input.ac-category",serverUrl:a.category,valueField:"id",labelField:"name",onChange:h,onSelectItem:h}),c({selector:"input.ac-description",serverUrl:a.description,valueField:"id",labelField:"description",onChange:p,onSelectItem:p})},150)},removeSplit(e){this.entries.splice(e,1),document.querySelector("#split-0-tab").click()},clearLocation(e){e.preventDefault();const t=e.currentTarget,s=parseInt(t.attributes["data-index"].value);this.entries[s].hasLocation=!1,this.entries[s].latitude=null,this.entries[s].longitude=null,this.entries[s].zoomLevel=null;const o=new CustomEvent("location-remove",{detail:{index:s}});return document.dispatchEvent(o),!1}}},g={transactions:I,dates:y};function f(){Object.keys(g).forEach(e=>{console.log(`Loading page component "${e}"`);let t=g[e]();Alpine.data(e,()=>t)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{console.log("Loaded through event listener."),f()});window.bootstrapped&&(console.log("Loaded through window variable."),f()); diff --git a/public/build/assets/create-baf83427.js b/public/build/assets/create-baf83427.js deleted file mode 100644 index b1cd642430..0000000000 --- a/public/build/assets/create-baf83427.js +++ /dev/null @@ -1 +0,0 @@ -var N=Object.defineProperty;var q=(n,e,t)=>e in n?N(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var C=(n,e,t)=>(q(n,typeof e!="symbol"?e+"":e,t),t);import{x as H,w as P,J as j,z as R,I as z,A as $,y as V}from"./load-translations-9a154502.js";function A(){return{id:"",name:""}}function B(){let e=H(new Date,"yyyy-MM-dd HH:mm");return{description:"",amount:"",source_account:A(),destination_account:A(),date:e}}function W(n,e){let t=[];for(let s in n)if(n.hasOwnProperty(s)){const i=n[s];let o={};o.description=i.description,o.source_name=i.source_account.name,o.destination_name=i.destination_account.name,o.amount=i.amount,o.date=i.date,i.source_account.id.toString()!==""&&(o.source_id=i.source_account.id),i.destination_account.id.toString()!==""&&(o.destination_id=i.destination_account.id),o.type=e,t.push(o)}return t}const T={showAllSuggestions:!1,suggestionsThreshold:1,maximumItems:0,autoselectFirst:!0,ignoreEnter:!1,updateOnSelect:!1,highlightTyped:!1,highlightClass:"",fullWidth:!1,fixed:!1,fuzzy:!1,startsWith:!1,preventBrowserAutocomplete:!1,itemClass:"",activeClasses:["bg-primary","text-white"],labelField:"label",valueField:"value",searchFields:["label"],queryParam:"query",items:[],source:null,hiddenInput:!1,hiddenValue:"",clearControl:"",datalist:"",server:"",serverMethod:"GET",serverParams:{},serverDataKey:"data",fetchOptions:{},liveServer:!1,noCache:!0,debounceTime:300,notFoundMessage:"",onRenderItem:(n,e,t)=>e,onSelectItem:(n,e)=>{},onServerResponse:(n,e)=>n.json(),onChange:(n,e)=>{}},x="is-loading",L="is-active",f="show",_="next",v="prev",g=new WeakMap;let k=0,b=0;function U(n,e=300){let t;return(...s)=>{clearTimeout(t),t=setTimeout(()=>{n.apply(this,s)},e)}}function G(n){return n.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function y(n){return n?G(n.toString()).toLowerCase():""}function K(n,e){if(n.indexOf(e)>=0)return!0;let t=0;for(let s=0;se+"‍").join("")}class I{constructor(e,t={}){C(this,"handleEvent",e=>{["scroll","resize"].includes(e.type)?(this._timer&&window.cancelAnimationFrame(this._timer),this._timer=window.requestAnimationFrame(()=>{this[`on${e.type}`](e)})):this[`on${e.type}`](e)});if(!(e instanceof HTMLElement)){console.error("Invalid element",e);return}g.set(e,this),k++,b++,this._searchInput=e,this._configure(t),this._preventInput=!1,this._keyboardNavigation=!1,this._searchFunc=U(()=>{this._loadFromServer(!0)},this._config.debounceTime),this._configureSearchInput(),this._configureDropElement(),this._config.fixed&&(document.addEventListener("scroll",this,!0),window.addEventListener("resize",this));const s=this._getClearControl();s&&s.addEventListener("click",this),["focus","change","blur","input","keydown"].forEach(i=>{this._searchInput.addEventListener(i,this)}),["mousemove","mouseleave"].forEach(i=>{this._dropElement.addEventListener(i,this)}),this._fetchData()}static init(e="input.autocomplete",t={}){document.querySelectorAll(e).forEach(i=>{this.getOrCreateInstance(i,t)})}static getInstance(e){return g.has(e)?g.get(e):null}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,t)}dispose(){b--,["focus","change","blur","input","keydown"].forEach(t=>{this._searchInput.removeEventListener(t,this)}),["mousemove","mouseleave"].forEach(t=>{this._dropElement.removeEventListener(t,this)});const e=this._getClearControl();e&&e.removeEventListener("click",this),this._config.fixed&&b<=0&&(document.removeEventListener("scroll",this,!0),window.removeEventListener("resize",this)),this._dropElement.parentElement.removeChild(this._dropElement),g.delete(this._searchInput)}_getClearControl(){if(this._config.clearControl)return document.querySelector(this._config.clearControl)}_configure(e={}){this._config=Object.assign({},T);const t={...e,...this._searchInput.dataset},s=i=>["true","false","1","0",!0,!1].includes(i)&&!!JSON.parse(i);for(const[i,o]of Object.entries(T)){if(t[i]===void 0)continue;const a=t[i];switch(typeof o){case"number":this._config[i]=parseInt(a);break;case"boolean":this._config[i]=s(a);break;case"string":this._config[i]=a.toString();break;case"object":if(Array.isArray(o))if(typeof a=="string"){const r=a.includes("|")?"|":",";this._config[i]=a.split(r)}else this._config[i]=a;else this._config[i]=typeof a=="string"?JSON.parse(a):a;break;case"function":this._config[i]=typeof a=="string"?window[a]:a;break;default:this._config[i]=a;break}}}_configureSearchInput(){if(this._searchInput.autocomplete="off",this._searchInput.spellcheck=!1,w(this._searchInput,{"aria-autocomplete":"list","aria-haspopup":"menu","aria-expanded":"false",role:"combobox"}),this._searchInput.id&&this._config.preventBrowserAutocomplete){const e=document.querySelector(`[for="${this._searchInput.id}"]`);e&&X(e)}this._hiddenInput=null,this._config.hiddenInput&&(this._hiddenInput=document.createElement("input"),this._hiddenInput.type="hidden",this._hiddenInput.value=this._config.hiddenValue,this._hiddenInput.name=this._searchInput.name,this._searchInput.name="_"+this._searchInput.name,D(this._searchInput,this._hiddenInput))}_configureDropElement(){this._dropElement=document.createElement("ul"),this._dropElement.id="ac-menu-"+k,this._dropElement.classList.add("dropdown-menu","autocomplete-menu","p-0"),this._dropElement.style.maxHeight="280px",this._config.fullWidth||(this._dropElement.style.maxWidth="360px"),this._config.fixed&&(this._dropElement.style.position="fixed"),this._dropElement.style.overflowY="auto",this._dropElement.style.overscrollBehavior="contain",this._dropElement.style.textAlign="unset",D(this._searchInput,this._dropElement),this._searchInput.setAttribute("aria-controls",this._dropElement.id)}onclick(e){e.target.matches(this._config.clearControl)&&this.clear()}oninput(e){this._preventInput||(this._hiddenInput&&(this._hiddenInput.value=null),this.showOrSearch())}onchange(e){const t=this._searchInput.value,s=Object.values(this._items).find(i=>i.label===t);this._config.onChange(s,this)}onblur(e){this.hideSuggestions()}onfocus(e){this.showOrSearch()}onkeydown(e){switch(e.keyCode||e.key){case 13:case"Enter":if(this.isDropdownVisible()){const s=this.getSelection();s&&s.click(),(s||!this._config.ignoreEnter)&&e.preventDefault()}break;case 38:case"ArrowUp":e.preventDefault(),this._keyboardNavigation=!0,this._moveSelection(v);break;case 40:case"ArrowDown":e.preventDefault(),this._keyboardNavigation=!0,this.isDropdownVisible()?this._moveSelection(_):this.showOrSearch(!1);break;case 27:case"Escape":this.isDropdownVisible()&&(this._searchInput.focus(),this.hideSuggestions());break}}onmousemove(e){this._keyboardNavigation=!1}onmouseleave(e){this.removeSelection()}onscroll(e){this._positionMenu()}onresize(e){this._positionMenu()}getConfig(e=null){return e!==null?this._config[e]:this._config}setConfig(e,t){this._config[e]=t}setData(e){this._items={},this._addItems(e)}enable(){this._searchInput.setAttribute("disabled","")}disable(){this._searchInput.removeAttribute("disabled")}isDisabled(){return this._searchInput.hasAttribute("disabled")||this._searchInput.disabled||this._searchInput.hasAttribute("readonly")}isDropdownVisible(){return this._dropElement.classList.contains(f)}clear(){this._searchInput.value="",this._hiddenInput&&(this._hiddenInput.value="")}getSelection(){return this._dropElement.querySelector("a."+L)}removeSelection(){const e=this.getSelection();e&&e.classList.remove(...this._activeClasses())}_activeClasses(){return[...this._config.activeClasses,L]}_isItemEnabled(e){if(e.style.display==="none")return!1;const t=e.firstElementChild;return t.tagName==="A"&&!t.classList.contains("disabled")}_moveSelection(e=_,t=null){const s=this.getSelection();if(s){const i=e===_?"nextSibling":"previousSibling";t=s.parentNode;do t=t[i];while(t&&!this._isItemEnabled(t));t?(s.classList.remove(...this._activeClasses()),e===v?t.parentNode.scrollTop=t.offsetTop-t.parentNode.offsetTop:t.offsetTop>t.parentNode.offsetHeight-t.offsetHeight&&(t.parentNode.scrollTop+=t.offsetHeight)):s&&(t=s.parentElement)}else{if(e===v)return t;if(!t)for(t=this._dropElement.firstChild;t&&!this._isItemEnabled(t);)t=t.nextSibling}if(t){const i=t.querySelector("a");i.classList.add(...this._activeClasses()),this._searchInput.setAttribute("aria-activedescendant",i.id),this._config.updateOnSelect&&(this._searchInput.value=i.dataset.label)}else this._searchInput.setAttribute("aria-activedescendant","");return t}_shouldShow(){return this.isDisabled()?!1:this._searchInput.value.length>=this._config.suggestionsThreshold}showOrSearch(e=!0){if(e&&!this._shouldShow()){this.hideSuggestions();return}this._config.liveServer?this._searchFunc():this._config.source?this._config.source(this._searchInput.value,t=>{this.setData(t),this._showSuggestions()}):this._showSuggestions()}_createGroup(e){const t=this._createLi(),s=document.createElement("span");return t.append(s),s.classList.add("dropdown-header","text-truncate"),s.innerHTML=e,t}_createItem(e,t){let s=t.label;if(this._config.highlightTyped){const a=y(s).indexOf(e);s=s.substring(0,a)+`${s.substring(a,a+e.length)}`+s.substring(a+e.length,s.length)}s=this._config.onRenderItem(t,s,this);const i=this._createLi(),o=document.createElement("a");if(i.append(o),o.id=this._dropElement.id+"-"+this._dropElement.children.length,o.classList.add("dropdown-item","text-truncate"),this._config.itemClass&&o.classList.add(...this._config.itemClass.split(" ")),o.setAttribute("data-value",t.value),o.setAttribute("data-label",t.label),o.setAttribute("tabindex","-1"),o.setAttribute("role","menuitem"),o.setAttribute("href","#"),o.innerHTML=s,t.data)for(const[a,r]of Object.entries(t.data))o.dataset[a]=r;return o.addEventListener("mouseenter",a=>{this._keyboardNavigation||(this.removeSelection(),i.querySelector("a").classList.add(...this._activeClasses()))}),o.addEventListener("mousedown",a=>{a.preventDefault()}),o.addEventListener("click",a=>{a.preventDefault(),this._preventInput=!0,this._searchInput.value=J(t.label),this._hiddenInput&&(this._hiddenInput.value=t.value),this._config.onSelectItem(t,this),this.hideSuggestions(),this._preventInput=!1}),i}_showSuggestions(){if(document.activeElement!=this._searchInput)return;const e=y(this._searchInput.value);this._dropElement.innerHTML="";const t=Object.keys(this._items);let s=0,i=null;const o=[];for(let a=0;a0&&this._config.searchFields.forEach(d=>{const p=y(c[d]);let m=!1;if(this._config.fuzzy)m=K(p,e);else{const E=p.indexOf(e);m=this._config.startsWith?E===0:E>=0}m&&(l=!0)});const F=l||e.length===0;if(u||l){if(s++,c.group&&!o.includes(c.group)){const p=this._createGroup(c.group);this._dropElement.appendChild(p),o.push(c.group)}const d=this._createItem(e,c);if(!i&&F&&(i=d),this._dropElement.appendChild(d),this._config.maximumItems>0&&s>=this._config.maximumItems)break}}if(i&&this._config.autoselectFirst&&(this.removeSelection(),this._moveSelection(_,i)),s===0)if(this._config.notFoundMessage){const a=this._createLi();a.innerHTML=`${this._config.notFoundMessage}`,this._dropElement.appendChild(a),this._showDropdown()}else this.hideSuggestions();else this._showDropdown()}_createLi(){const e=document.createElement("li");return e.setAttribute("role","presentation"),e}_showDropdown(){this._dropElement.classList.add(f),this._dropElement.setAttribute("role","menu"),w(this._searchInput,{"aria-expanded":"true"}),this._positionMenu()}toggleSuggestions(e=!0){this._dropElement.classList.contains(f)?this.hideSuggestions():this.showOrSearch(e)}hideSuggestions(){this._dropElement.classList.remove(f),w(this._searchInput,{"aria-expanded":"false"}),this.removeSelection()}getInput(){return this._searchInput}getDropMenu(){return this._dropElement}_positionMenu(){const e=window.getComputedStyle(this._searchInput),t=this._searchInput.getBoundingClientRect(),s=e.direction==="rtl",i=this._config.fullWidth,o=this._config.fixed;let a=null,r=null;o&&(a=t.x,r=t.y+t.height,s&&!i&&(a-=this._dropElement.offsetWidth-t.width)),this._dropElement.style.transform="unset",i&&(this._dropElement.style.width=this._searchInput.offsetWidth+"px"),a!==null&&(this._dropElement.style.left=a+"px"),r!==null&&(this._dropElement.style.top=r+"px");const c=this._dropElement.getBoundingClientRect(),u=window.innerHeight;if(c.y+c.height>u){const l=i?t.height+4:t.height;this._dropElement.style.transform="translateY(calc(-100.1% - "+l+"px))"}}_fetchData(){this._items={},this._addItems(this._config.items);const e=this._config.datalist;if(e){const t=document.querySelector(`#${e}`);if(t){const s=Array.from(t.children).map(i=>{const o=i.getAttribute("value")??i.innerHTML.toLowerCase(),a=i.innerHTML;return{value:o,label:a}});this._addItems(s)}else console.error(`Datalist not found ${e}`)}this._setHiddenVal(),this._config.server&&!this._config.liveServer&&this._loadFromServer()}_setHiddenVal(){if(this._config.hiddenInput&&!this._config.hiddenValue)for(const[e,t]of Object.entries(this._items))t.label==this._searchInput.value&&(this._hiddenInput.value=e)}_addItems(e){const t=Object.keys(e);for(let s=0;sc.group=o.group),this._addItems(o.items);continue}const a=typeof o=="string"?o:o.label,r=typeof o!="object"?{}:o;r.label=o[this._config.labelField]??a,r.value=o[this._config.valueField]??i,r.label&&(this._items[r.value]=r)}}_loadFromServer(e=!1){this._abortController&&this._abortController.abort(),this._abortController=new AbortController;let t=this._searchInput.dataset.serverParams||{};typeof t=="string"&&(t=JSON.parse(t));const s=Object.assign({},this._config.serverParams,t);if(s[this._config.queryParam]=this._searchInput.value,this._config.noCache&&(s.t=Date.now()),s.related){const r=document.getElementById(s.related);if(r){s.related=r.value;const c=r.getAttribute("name");c&&(s[c]=r.value)}}const i=new URLSearchParams(s);let o=this._config.server,a=Object.assign(this._config.fetchOptions,{method:this._config.serverMethod||"GET",signal:this._abortController.signal});a.method==="POST"?a.body=i:o+="?"+i.toString(),this._searchInput.classList.add(x),fetch(o,a).then(r=>this._config.onServerResponse(r,this)).then(r=>{const c=r[this._config.serverDataKey]||r;this.setData(c),this._setHiddenVal(),this._abortController=null,e&&this._showSuggestions()}).catch(r=>{r.name==="AbortError"||this._abortController.signal.aborted||console.error(r)}).finally(r=>{this._searchInput.classList.remove(x)})}}class Y{post(e){let t="/api/v2/transactions";return P.post(t,e)}}let h;const S={description:"/api/v2/autocomplete/transaction-descriptions",account:"/api/v2/autocomplete/accounts"};let Q=function(){return{count:0,totalAmount:0,transactionType:"unknown",showSuccessMessage:!1,showErrorMessage:!1,entries:[],filters:{source:[],destination:[]},detectTransactionType(){const n=this.entries[0].source_account.type??"unknown",e=this.entries[0].destination_account.type??"unknown";if(n==="unknown"&&e==="unknown"){this.transactionType="unknown",console.warn("Cannot infer transaction type from two unknown accounts.");return}if(n===e&&["Asset account","Loan","Debt","Mortgage"].includes(n)){this.transactionType="transfer",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(n==="Asset account"&&["Expense account","Debt","Loan","Mortgage"].includes(e)){this.transactionType="withdrawal",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(n==="Asset account"&&e==="unknown"){this.transactionType="withdrawal",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(["Debt","Loan","Mortgage"].includes(n)&&e==="Expense account"){this.transactionType="withdrawal",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(n==="Revenue account"&&["Asset account","Debt","Loan","Mortgage"].includes(e)){this.transactionType="deposit",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(["Debt","Loan","Mortgage"].includes(n)&&e==="Asset account"){this.transactionType="deposit",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}console.warn('Unknown account combination between "'+n+'" and "'+e+'".')},selectSourceAccount(n,e){const t=parseInt(e._searchInput.attributes["data-index"].value);document.querySelector("#form")._x_dataStack[0].$data.entries[t].source_account={id:n.id,name:n.name,type:n.type},console.log("Changed source account into a known "+n.type.toLowerCase())},changedAmount(n){const e=parseInt(n.target.dataset.index);this.entries[e].amount=parseFloat(n.target.value),this.totalAmount=0;for(let t in this.entries)this.entries.hasOwnProperty(t)&&(this.totalAmount=this.totalAmount+parseFloat(this.entries[t].amount));console.log("Changed amount to "+this.totalAmount)},selectDestAccount(n,e){const t=parseInt(e._searchInput.attributes["data-index"].value);document.querySelector("#form")._x_dataStack[0].$data.entries[t].destination_account={id:n.id,name:n.name,type:n.type},console.log("Changed destination account into a known "+n.type.toLowerCase())},changeSourceAccount(n,e){if(typeof n>"u"){const t=parseInt(e._searchInput.attributes["data-index"].value);if(document.querySelector("#form")._x_dataStack[0].$data.entries[t].source_account.name===e._searchInput.value){console.warn('Ignore hallucinated source account name change to "'+e._searchInput.value+'"');return}document.querySelector("#form")._x_dataStack[0].$data.entries[t].source_account={name:e._searchInput.value},console.log('Changed source account into a unknown account called "'+e._searchInput.value+'"')}},changeDestAccount(n,e){if(typeof n>"u"){const t=parseInt(e._searchInput.attributes["data-index"].value);if(document.querySelector("#form")._x_dataStack[0].$data.entries[t].destination_account.name===e._searchInput.value){console.warn('Ignore hallucinated destination account name change to "'+e._searchInput.value+'"');return}document.querySelector("#form")._x_dataStack[0].$data.entries[t].destination_account={name:e._searchInput.value},console.log('Changed destination account into a unknown account called "'+e._searchInput.value+'"')}},showError:!1,showSuccess:!1,addedSplit(){console.log("addedSplit"),I.init("input.ac-source",{server:S.account,serverParams:{types:this.filters.source},fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},hiddenInput:!0,preventBrowserAutocomplete:!0,highlightTyped:!0,liveServer:!0,onChange:this.changeSourceAccount,onSelectItem:this.selectSourceAccount,onRenderItem:function(n,e,t){return n.name_with_balance+'
'+h.t("firefly.account_type_"+n.type)+""}}),I.init("input.ac-dest",{server:S.account,serverParams:{types:this.filters.destination},fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},hiddenInput:!0,preventBrowserAutocomplete:!0,liveServer:!0,highlightTyped:!0,onSelectItem:this.selectDestAccount,onChange:this.changeDestAccount,onRenderItem:function(n,e,t){return n.name_with_balance+'
'+h.t("firefly.account_type_"+n.type)+""}}),this.filters.destination=[],I.init("input.ac-description",{server:S.description,fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},valueField:"id",labelField:"description",highlightTyped:!0,onSelectItem:console.log})},init(){Promise.all([R("language","en_US")]).then(n=>{h=new z;const e=n[0].replace("-","_");h.locale=e,$(h,e).then(()=>{this.addSplit()})}),this.filters.source=["Asset account","Loan","Debt","Mortgage","Revenue account"],this.filters.destination=["Expense account","Loan","Debt","Mortgage","Asset account"]},submitTransaction(){this.detectTransactionType();let n=W(this.entries,this.transactionType),e={group_title:null,fire_webhooks:!1,apply_rules:!1,transactions:n};n.length>1&&(e.group_title=n[0].description);let t=new Y;console.log(e),t.post(e).then(s=>{this.showSuccessMessage=!0,console.log(s),window.location="transactions/show/"+s.data.data.id+"?transaction_group_id="+s.data.data.id+"&message=created"}).catch(s=>{this.showErrorMessage=!0,console.error(s)})},addSplit(){this.entries.push(B())},removeSplit(n){this.entries.splice(n,1),document.querySelector("#split-0-tab").click()},formattedTotalAmount(){return V(this.totalAmount,"EUR")}}},O={transactions:Q,dates:j};function M(){Object.keys(O).forEach(n=>{console.log(`Loading page component "${n}"`);let e=O[n]();Alpine.data(n,()=>e)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{console.log("Loaded through event listener."),M()});window.bootstrapped&&(console.log("Loaded through window variable."),M()); diff --git a/public/build/assets/create-empty-split-81f71b2e.js b/public/build/assets/create-empty-split-81f71b2e.js new file mode 100644 index 0000000000..373ed83f6b --- /dev/null +++ b/public/build/assets/create-empty-split-81f71b2e.js @@ -0,0 +1 @@ +import{f as n}from"./vendor-50e42c6c.js";function e(){return{id:"",name:"",alpine_name:""}}function o(){return{description:[],amount:[],currency_code:[],foreign_amount:[],foreign_currency_code:[],source_account:[],destination_account:[],budget_id:[],category_name:[],piggy_bank_id:[],bill_id:[],tags:[],notes:[],internal_reference:[],external_url:[],latitude:[],longitude:[],zoom_level:[],date:[],interest_date:[],book_date:[],process_date:[],due_date:[],payment_date:[],invoice_date:[]}}function d(){let t=n(new Date,"yyyy-MM-dd HH:mm");return{description:"",amount:"",currency_code:"EUR",foreign_amount:"",foreign_currency_code:"",source_account:e(),destination_account:e(),budget_id:null,category_name:"",piggy_bank_id:null,bill_id:null,tags:[],notes:"",internal_reference:"",external_url:"",hasLocation:!1,latitude:null,longitude:null,zoomLevel:null,date:t,interest_date:"",book_date:"",process_date:"",due_date:"",payment_date:"",invoice_date:"",errors:o()}}export{d as c,o as d}; diff --git a/public/build/assets/dashboard-5f195194.js b/public/build/assets/dashboard-5f195194.js new file mode 100644 index 0000000000..821786ade0 --- /dev/null +++ b/public/build/assets/dashboard-5f195194.js @@ -0,0 +1 @@ +import{a as O,f,g as v,P as bt,d as wt}from"./format-money-2e5851ad.js";import{f as g,C as m,a as S,i as p,S as vt,F as mt,L as Ct,b as kt,A as Pt,B as Dt,T as xt,P as Ot,c as Mt,d as Ft,p as St,e as At,g as Bt,h as jt,j as Wt,k as It}from"./vendor-50e42c6c.js";import{G as $t}from"./get-e0a81c64.js";import{G as Vt,a as Kt}from"./get-28b9aa25.js";class Lt{get(e,n,a){return O.get("/api/v2/summary/basic",{params:{start:e,end:n,code:a}})}}function P(t,e,n){const a=g(e,"y-MM-dd")+"_"+g(n,"y-MM-dd")+"_"+t;return console.log("getCacheKey: "+a),String(a)}let U=!1;const Et=()=>({balanceBox:{amounts:[],subtitles:[]},billBox:{paid:[],unpaid:[]},leftBox:{left:[],perDay:[]},netBox:{net:[]},autoConversion:!1,loading:!1,boxData:null,boxOptions:null,getFreshData(){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),n=P("dashboard-boxes-data",t,e),a=window.store.get("cacheValid");let r=window.store.get(n);if(a&&typeof r<"u"){this.boxData=r,this.generateOptions(this.boxData);return}new Lt().get(g(t,"yyyy-MM-dd"),g(e,"yyyy-MM-dd"),null).then(i=>{this.boxData=i.data,window.store.set(n,i.data),this.generateOptions(this.boxData)})},generateOptions(t){this.balanceBox={amounts:[],subtitles:[]},this.billBox={paid:[],unpaid:[]},this.leftBox={left:[],perDay:[]},this.netBox={net:[]};let e={};for(const n in t)if(t.hasOwnProperty(n)){const a=t[n];if(!a.hasOwnProperty("key"))continue;let r=a.key;if(this.autoConversion){if(r.startsWith("balance-in-native")){this.balanceBox.amounts.push(f(a.value,a.currency_code)),e.hasOwnProperty(a.currency_code)||(e[a.currency_code]="");continue}if(r.startsWith("spent-in-native")){e.hasOwnProperty(a.currency_code)||(e[a.currency_code]=""),e[a.currency_code]=e[a.currency_code]+f(a.value,a.currency_code);continue}if(r.startsWith("earned-in-native")){e.hasOwnProperty(a.currency_code)||(e[a.currency_code]=""),e[a.currency_code]=f(a.value,a.currency_code)+" + "+e[a.currency_code];continue}if(r.startsWith("bills-unpaid-in-native")){this.billBox.unpaid.push(f(a.value,a.currency_code));continue}if(r.startsWith("bills-paid-in-native")){this.billBox.paid.push(f(a.value,a.currency_code));continue}if(r.startsWith("left-to-spend-in-native")){this.leftBox.left.push(f(a.value,a.currency_code));continue}if(r.startsWith("left-per-day-to-spend-in-native")){this.leftBox.perDay.push(f(a.value,a.currency_code));continue}if(r.startsWith("net-worth-in-native")){this.netBox.net.push(f(a.value,a.currency_code));continue}}if(!this.autoConversion&&!r.endsWith("native")){if(r.startsWith("balance-in-")){this.balanceBox.amounts.push(f(a.value,a.currency_code));continue}if(r.startsWith("spent-in-")){e.hasOwnProperty(a.currency_code)||(e[a.currency_code]=""),e[a.currency_code]=e[a.currency_code]+f(a.value,a.currency_code);continue}if(r.startsWith("earned-in-")){e.hasOwnProperty(a.currency_code)||(e[a.currency_code]=""),e[a.currency_code]=f(a.value,a.currency_code)+" + "+e[a.currency_code];continue}if(r.startsWith("bills-unpaid-in-")){this.billBox.unpaid.push(f(a.value,a.currency_code));continue}if(r.startsWith("bills-paid-in-")){this.billBox.paid.push(f(a.value,a.currency_code));continue}if(r.startsWith("left-to-spend-in-")){this.leftBox.left.push(f(a.value,a.currency_code));continue}if(r.startsWith("left-per-day-to-spend-in-")){this.leftBox.perDay.push(f(a.value,a.currency_code));continue}r.startsWith("net-worth-in-")&&this.netBox.net.push(f(a.value,a.currency_code))}}for(let n in e)e.hasOwnProperty(n)&&this.balanceBox.subtitles.push(e[n]);this.loading=!1},loadBoxes(){if(this.loading!==!0){if(this.loading=!0,this.boxData===null){this.getFreshData();return}this.generateOptions(this.boxData),this.loading=!1}},init(){Promise.all([v("viewRange"),v("autoConversion",!1)]).then(t=>{U=!0,this.autoConversion=t[1],this.loadBoxes()}),window.store.observe("end",()=>{U&&(this.boxData=null,this.loadBoxes())}),window.store.observe("autoConversion",t=>{U&&(this.autoConversion=t,this.loadBoxes())})}});class Gt{put(e,n){let a="/api/v1/preferences/"+e;return O.put(a,{data:n})}}function Tt(t,e=null){window.store.set(t,e),new Gt().put(t,e).then(a=>{}).catch(()=>{new bt().post(t,e).then(r=>{})})}let Rt=class{dashboard(e,n){let a=g(e,"y-MM-dd"),r=g(n,"y-MM-dd");return O.get("/api/v2/chart/account/dashboard",{params:{start:a,end:r}})}expense(e,n){let a=g(e,"y-MM-dd"),r=g(n,"y-MM-dd");return O.get("/api/v2/chart/account/expense-dashboard",{params:{start:a,end:r}})}};class st{get(e,n){let a={date:g(n,"y-MM-dd").slice(0,10)};return n?O.get("/api/v2/accounts/"+e,{params:a}):O.get("/api/v2/accounts/"+e)}transactions(e,n){const a={page:n.page??1};return n.hasOwnProperty("start")&&(a.start=g(n.start,"y-MM-dd")),n.hasOwnProperty("end")&&(a.end=g(n.end,"y-MM-dd")),O.get("/api/v2/accounts/"+e+"/transactions",{params:a})}}function N(t){return t==="sankey"?{type:"sankey",data:{datasets:[]},options:{animations:!1}}:t==="pie"?{type:"pie",data:{datasets:[]}}:t==="column"?{type:"bar",data:{labels:[],datasets:[]},options:{plugins:{tooltip:{callbacks:{label:function(e){let n=e.dataset.currency_code;return f(e.raw,n)}}}},maintainAspectRatio:!1,scales:{}}}:t==="line"?{options:{plugins:{tooltip:{callbacks:{label:function(e){let n=e.dataset.currency_code;return f(e.raw,n)}}}},maintainAspectRatio:!1,scales:{x:{type:"time",time:{tooltipFormat:"PP"}}}},type:"line",data:{labels:[],datasets:[]}}:{}}let q=new m("#36a2eb"),I=new m("#ff6384"),G=new m("#4bc0c0"),ft=new m("#ff9f40"),qt=new m("#9966ff"),Nt=new m("#ffcd56"),Yt=new m("#c9cbcf"),lt=0;window.theme==="dark"&&(I.darken(.3).desaturate(.3),G.darken(.3).desaturate(.3),q.darken(.3).desaturate(.3),ft.darken(.3).desaturate(.3));let z=[I,ft,q,G,qt,Nt,Yt,G];function j(t,e){let n={borderColor:I.rgbString(),backgroundColor:I.rgbString()},a;switch(t){default:let o=Math.floor(lt/2)%z.length;a=new m(z[o].rgbString()),a.lighten(.38),n={borderColor:z[o].hexString(),backgroundColor:a.hexString()};break;case"spent":a=new m(q.rgbString()),a.lighten(.38),n={borderColor:q.rgbString(),backgroundColor:a.rgbString()};break;case"left":a=new m(G.rgbString()),a.lighten(.38),n={borderColor:G.rgbString(),backgroundColor:a.rgbString()};break;case"overspent":a=new m(I.rgbString()),a.lighten(.22),n={borderColor:I.rgbString(),backgroundColor:a.rgbString()};break}return lt++,e==="border"?n.borderColor:e==="background"?n.backgroundColor:"#FF0000"}let A=[],$=null,H=null,J=!1;const Ut=()=>({loading:!1,loadingAccounts:!1,accountList:[],autoConversion:!1,chartOptions:null,switchAutoConversion(){this.autoConversion=!this.autoConversion,Tt("autoConversion",this.autoConversion)},getFreshData(){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),n=P("dashboard-accounts-chart",t,e),a=window.store.get("cacheValid");let r=window.store.get(n);if(a&&typeof r<"u"){console.log(r),this.drawChart(this.generateOptions(r)),this.loading=!1;return}new Rt().dashboard(t,e,null).then(i=>{this.chartData=i.data,window.store.set(n,i.data),console.log(i.data),this.drawChart(this.generateOptions(this.chartData)),this.loading=!1})},generateOptions(t){A=[];let e=N("line");for(let n=0;n0){this.loadingAccounts=!1;return}const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),n=P("dashboard-accounts-data",t,e),a=window.store.get("cacheValid");let r=window.store.get(n);if(a&&typeof r<"u"){this.accountList=r,this.loadingAccounts=!1;return}const o=10;let i=0,l=0,u=[];Promise.all([v("frontpageAccounts")]).then(d=>{i=d[0].length;for(let h in d[0]){let c=d[0];if(c.hasOwnProperty(h)){let _=c[h];new st().get(_,new Date(window.store.get("end"))).then(w=>{let C=w.data.data;const yt={page:1,start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))};new st().transactions(C.id,yt).then(at=>{let nt=[];for(let B=0;B=o);B++){let M=at.data.data[B],rt={title:M.attributes.group_title===null?"":M.attributes.group_title,id:M.id,transactions:[]};for(let Y=0;YB.order-M.order),this.accountList=u,this.loadingAccounts=!1,window.store.set(n,u))})})}}})},init(){Promise.all([v("viewRange","1M"),v("autoConversion",!1),v("language","en_US")]).then(t=>{this.autoConversion=t[1],J=!0,this.loadChart(),this.loadAccounts()}),window.store.observe("end",()=>{J&&(H=null,this.accountList=[],this.loadChart(),this.loadAccounts())}),window.store.observe("autoConversion",()=>{J&&(this.loadChart(),this.loadAccounts())})}});let zt=class{dashboard(e,n){let a=g(e,"y-MM-dd"),r=g(n,"y-MM-dd");return O.get("/api/v2/chart/budget/dashboard",{params:{start:a,end:r}})}},V=[],T=null,F=null,Z=!1;const Ht=()=>({loading:!1,autoConversion:!1,loadChart(){if(this.loading!==!0){if(this.loading=!0,F!==null){this.drawChart(this.generateOptions(F)),this.loading=!1;return}this.getFreshData()}},drawChart(t){if(T!==null){T.data.datasets=t.data.datasets,T.update();return}T=new S(document.querySelector("#budget-chart"),t)},getFreshData(){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),n=P("dashboard-budgets-chart",t,e),a=window.store.get("cacheValid");let r=window.store.get(n);if(a&&typeof r<"u"){F=r,this.drawChart(this.generateOptions(F)),this.loading=!1;return}new zt().dashboard(t,e,null).then(i=>{F=i.data,this.drawChart(this.generateOptions(F)),window.store.set(n,F),this.loading=!1})},generateOptions(t){V=[];let e=N("column");e.options.locale=window.store.get("locale").replace("_","-"),e.options.plugins={tooltip:{callbacks:{title:function(n){return n.label},label:function(n){let a=n.dataset.label||"";return a&&(a+=": "),a+" "+f(n.parsed.y,V[n.parsed.x]??"EUR")}}}},e.data={labels:[],datasets:[{label:p.t("firefly.spent"),data:[],borderWidth:1,stack:1,backgroundColor:j("spent","background"),borderColor:j("spent","border")},{label:p.t("firefly.left"),data:[],borderWidth:1,stack:1,backgroundColor:j("left","background"),borderColor:j("left","border")},{label:p.t("firefly.overspent"),data:[],borderWidth:1,stack:1,backgroundColor:j("overspent","background"),borderColor:j("overspent","border")}]};for(const n in t)if(t.hasOwnProperty(n)){let a=t[n],r=a.label+" ("+a.currency_code+")";e.data.labels.push(r),this.autoConversion&&(V.push(a.native_currency_code),e.data.datasets[0].data.push(parseFloat(a.native_entries.spent)*-1),e.data.datasets[1].data.push(parseFloat(a.native_entries.left)),e.data.datasets[2].data.push(parseFloat(a.native_entries.overspent))),this.autoConversion||(V.push(a.currency_code),e.data.datasets[0].data.push(parseFloat(a.entries.spent)*-1),e.data.datasets[1].data.push(parseFloat(a.entries.left)),e.data.datasets[2].data.push(parseFloat(a.entries.overspent)))}return e.options.scales={y:{ticks:{callback:function(n){return f(n,V[0]??"EUR")}}}},e},init(){Promise.all([v("autoConversion",!1)]).then(t=>{this.autoConversion=t[0],Z=!0,this.loading===!1&&this.loadChart()}),window.store.observe("end",()=>{Z&&this.loading===!1&&(F=null,this.loadChart())}),window.store.observe("autoConversion",t=>{Z&&(this.autoConversion=t,this.loading===!1&&this.loadChart())})}});class Jt{dashboard(e,n){let a=g(e,"y-MM-dd"),r=g(n,"y-MM-dd");return O.get("/api/v2/chart/category/dashboard",{params:{start:a,end:r}})}}let ut=[],K=null,W=null,Q=!1;const Zt=()=>({loading:!1,autoConversion:!1,generateOptions(t){ut=[];let e=N("column"),n={};for(const r in t)if(t.hasOwnProperty(r)){let o=t[r],i=o.currency_code;this.autoConversion&&(i=o.native_currency_code),n.hasOwnProperty(i)||(n[i]={name:i,yAxisID:"",data:{}},ut.push(i))}for(const r in t)if(t.hasOwnProperty(r)){let o=t[r],i=o.currency_code;this.autoConversion&&(i=o.native_currency_code);for(const l in n)if(n.hasOwnProperty(l)){let u=0;i===l&&(u=parseFloat(o.amount),""+o.currency_code,this.autoConversion&&(u=parseFloat(o.native_amount),""+o.native_currency_code)),n[l].data.hasOwnProperty(o.label)&&(n[l].data[o.label]=n[l].data[o.label]+u),n[l].data.hasOwnProperty(o.label)||(n[l].data[o.label]=u)}e.data.labels.includes(o.label)||e.data.labels.push(o.label)}let a=0;for(const r in n){let o="y"+r,i={label:r,currency_code:r,yAxisID:o,data:[]};for(const l in n[r].data)i.data.push(n[r].data[l]);e.data.datasets.push(i),e.options.scales.hasOwnProperty(o)||(e.options.scales[o]={beginAtZero:!0,type:"linear",position:a===1?"right":"left",ticks:{callback:function(l,u,d){return f(l,r)}}},a++)}return e},drawChart(t){if(K!==null){K.options=t.options,K.data=t.data,K.update();return}K=new S(document.querySelector("#category-chart"),t)},getFreshData(){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),n=P("dashboard-categories-chart",t,e),a=window.store.get("cacheValid");let r=window.store.get(n);if(a&&typeof r<"u"){W=r,this.drawChart(this.generateOptions(W)),this.loading=!1;return}new Jt().dashboard(t,e,null).then(i=>{W=i.data,this.drawChart(this.generateOptions(i.data)),window.store.set(n,W),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,W!==null){this.drawChart(this.generateOptions(W)),this.loading=!1;return}this.getFreshData()}},init(){Promise.all([v("autoConversion",!1)]).then(t=>{this.autoConversion=t[0],Q=!0,this.loadChart()}),window.store.observe("end",()=>{Q&&(this.chartData=null,this.loadChart())}),window.store.observe("autoConversion",t=>{Q&&(this.autoConversion=t,this.loadChart())})}});S.register({SankeyController:vt,Flow:mt});const ct="dashboard-sankey-data";let X=!1,R=null,D=[],y=!1,s={category:null,unknown_category:null,in:null,out:null,unknown_source:null,unknown_dest:null,unknown_account:null,expense_account:null,revenue_account:null,budget:null,unknown_budget:null,all_money:null};const dt=function(t){return t.includes(s.revenue_account)?"forestgreen":t.includes("("+s.in+",")?"green":t.includes(s.budget)||t.includes(s.unknown_budget)?"Orchid":t.includes("("+s.out+",")?"MediumOrchid":t.includes(s.all_money)?"blue":"red"};function L(t,e,n,a){if(t==="category"&&e!==null&&n==="in")return s.category+' "'+e+'" ('+s.in+(y?", "+a+")":")");if(t==="category"&&e===null&&n==="in")return s.unknown_category+" ("+s.in+(y?", "+a+")":")");if(t==="category"&&e!==null&&n==="out")return s.category+' "'+e+'" ('+s.out+(y?", "+a+")":")");if(t==="category"&&e===null&&n==="out")return s.unknown_category+" ("+s.out+(y?", "+a+")":")");if(t==="account"&&e===null&&n==="in")return s.unknown_source+(y?" ("+a+")":"");if(t==="account"&&e!==null&&n==="in")return s.revenue_account+'"'+e+'"'+(y?" ("+a+")":"");if(t==="account"&&e===null&&n==="out")return s.unknown_dest+(y?" ("+a+")":"");if(t==="account"&&e!==null&&n==="out")return s.expense_account+' "'+e+'"'+(y?" ("+a+")":"");if(t==="budget"&&e!==null)return s.budget+' "'+e+'"'+(y?" ("+a+")":"");if(t==="budget"&&e===null)return s.unknown_budget+(y?" ("+a+")":"");console.error('Cannot handle: type:"'+t+'", dir: "'+n+'"')}function E(t,e,n){if(t==="category"&&e!==null)return s.category+' "'+e+'"'+(y?" ("+n+")":"");if(t==="category"&&e===null)return s.unknown_category+(y?" ("+n+")":"");if(t==="account"&&e===null)return s.unknown_account+(y?" ("+n+")":"");if(t==="account"&&e!==null)return e+(y?" ("+n+")":"");if(t==="budget"&&e!==null)return s.budget+' "'+e+'"'+(y?" ("+n+")":"");if(t==="budget"&&e===null)return s.unknown_budget+(y?" ("+n+")":"");console.error('Cannot handle: type:"'+t+'"')}const Qt=()=>({loading:!1,autoConversion:!1,generateOptions(){let t=N("sankey"),e={},n={};for(let r in D)if(D.hasOwnProperty(r)){let o=D[r];for(let i in o.attributes.transactions)if(o.attributes.transactions.hasOwnProperty(i)){let l=o.attributes.transactions[i],u=this.autoConversion?l.native_currency_code:l.currency_code,d=this.autoConversion?parseFloat(l.native_amount):parseFloat(l.amount),h;if(l.type==="deposit"){let c=L("category",l.category_name,"in",u),_=L("account",l.source_name,"in",u);n[c]=E("category",l.category_name,u),n[_]=E("account",l.source_name,u),h=_+"-"+c+"-"+u,e.hasOwnProperty(h)||(e[h]={from:_,to:c,amount:0}),e[h].amount+=d,h=c+"-"+s.all_money+"-"+u,e.hasOwnProperty(h)||(e[h]={from:c,to:s.all_money+(this.autoConversion?" ("+u+")":""),amount:0}),e[h].amount+=d}if(l.type==="withdrawal"){let c=L("budget",l.budget_name,"out",u);n[c]=E("budget",l.budget_name,u),h=s.all_money+"-"+c+"-"+u,e.hasOwnProperty(h)||(e[h]={from:s.all_money+(this.autoConversion?" ("+u+")":""),to:c,amount:0}),e[h].amount+=d;let _=L("category",l.category_name,"out",u);n[_]=E("category",l.category_name,u),h=c+"-"+_+"-"+u,e.hasOwnProperty(h)||(e[h]={from:c,to:_,amount:0}),e[h].amount+=d;let w=L("account",l.destination_name,"out",u);n[w]=E("account",l.destination_name,u),h=_+"-"+w+"-"+u,e.hasOwnProperty(h)||(e[h]={from:_,to:w,amount:0}),e[h].amount+=d}}}let a={label:"Firefly III dashboard sankey chart",data:[],colorFrom:r=>dt(r.dataset.data[r.dataIndex]?r.dataset.data[r.dataIndex].from:""),colorTo:r=>dt(r.dataset.data[r.dataIndex]?r.dataset.data[r.dataIndex].to:""),colorMode:"gradient",labels:n,size:"min"};for(let r in e)if(e.hasOwnProperty(r)){let o=e[r];a.data.push({from:o.from,to:o.to,flow:o.amount})}return t.data.datasets.push(a),t},drawChart(t){if(R!==null){R.data.datasets=t.data.datasets,R.update();return}R=new S(document.querySelector("#sankey-chart"),t)},getFreshData(){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),n=P(ct,t,e),a=window.store.get("cacheValid");let r=window.store.get(n);if(a&&typeof r<"u"){D=r,this.drawChart(this.generateOptions()),this.loading=!1;return}let o={start:g(t,"y-MM-dd"),end:g(e,"y-MM-dd"),type:"withdrawal,deposit",page:1};this.downloadTransactions(o)},downloadTransactions(t){const e=new Date(window.store.get("start")),n=new Date(window.store.get("end")),a=P(ct,e,n);new $t().list(t).then(o=>{if(D=[...D,...o.data.data],parseInt(o.data.meta.pagination.total_pages)>t.page){t.page++,this.downloadTransactions(t);return}window.store.set(a,D),this.drawChart(this.generateOptions()),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,D.length!==0){this.drawChart(this.generateOptions()),this.loading=!1;return}this.getFreshData()}},init(){D=[],Promise.all([v("autoConversion",!1)]).then(t=>{this.autoConversion=t[0],y=t[0],s.all_money=p.t("firefly.all_money"),s.category=p.t("firefly.category"),s.in=p.t("firefly.money_flowing_in"),s.out=p.t("firefly.money_flowing_out"),s.unknown_category=p.t("firefly.unknown_category_plain"),s.unknown_source=p.t("firefly.unknown_source_plain"),s.unknown_dest=p.t("firefly.unknown_dest_plain"),s.unknown_account=p.t("firefly.unknown_any_plain"),s.unknown_budget=p.t("firefly.unknown_budget_plain"),s.expense_account=p.t("firefly.expense_account"),s.revenue_account=p.t("firefly.revenue_account"),s.budget=p.t("firefly.budget"),X=!0,this.loadChart()}),window.store.observe("end",()=>{X&&(this.transactions=[],this.loadChart())}),window.store.observe("autoConversion",t=>{X&&(this.autoConversion=t,this.loadChart())})}});let tt=!1,b={};function gt(t){return new Vt().list(t).then(n=>{let a=n.data.data;for(let r in a)if(a.hasOwnProperty(r)){let o=a[r];if(o.attributes.active&&o.attributes.pay_dates.length>0){let i=o.attributes.object_group_id===null?0:o.attributes.object_group_id,l=o.attributes.object_group_title===null?p.t("firefly.default_group_title_name_plain"):o.attributes.object_group_title,u=o.attributes.object_group_order===null?0:o.attributes.object_group_order;b.hasOwnProperty(i)||(b[i]={id:i,title:l,order:u,payment_info:{},bills:[]});let d={id:o.id,name:o.attributes.name,amount_min:o.attributes.amount_min,amount_max:o.attributes.amount_max,amount:(parseFloat(o.attributes.amount_max)+parseFloat(o.attributes.amount_min))/2,currency_code:o.attributes.currency_code,native_amount_min:o.attributes.native_amount_min,native_amount_max:o.attributes.native_amount_max,native_amount:(parseFloat(o.attributes.native_amount_max)+parseFloat(o.attributes.native_amount_min))/2,native_currency_code:o.attributes.native_currency_code,transactions:[],pay_dates:o.attributes.pay_dates,paid:o.attributes.paid_dates.length>0};d.expected_amount=t.autoConversion?f(d.native_amount,d.native_currency_code):f(d.amount,d.currency_code),d.expected_times=p.t("firefly.subscr_expected_x_times",{times:o.attributes.pay_dates.length,amount:d.expected_amount});for(let h in o.attributes.paid_dates)if(o.attributes.paid_dates.hasOwnProperty(h)){const c=o.attributes.paid_dates[h];let _=100;t.autoConversion&&(_=Math.round(-100+parseFloat(c.native_amount)*-1/parseFloat(d.native_amount)*100)),t.autoConversion||(_=Math.round(-100+parseFloat(c.amount)*-1/parseFloat(d.amount)*100));let w={amount:t.autoConversion?f(c.native_amount,c.native_currency_code):f(c.amount,c.currency_code),percentage:_,date:g(new Date(c.date),"PP"),foreign_amount:null};c.foreign_currency_code!==null&&(w.foreign_amount=t.autoConversion?c.foreign_native_amount:c.foreign_amount,w.foreign_currency_code=t.autoConversion?c.native_currency_code:c.foreign_currency_code),d.transactions.push(w)}if(b[i].bills.push(d),o.attributes.paid_dates.length===0){const h=o.attributes.pay_dates.length*d.amount,c=o.attributes.pay_dates.length*d.native_amount;b[i].payment_info.hasOwnProperty(d.currency_code)||(b[i].payment_info[d.currency_code]={currency_code:d.currency_code,paid:0,unpaid:0,native_currency_code:d.native_currency_code,native_paid:0,native_unpaid:0}),b[i].payment_info[d.currency_code].unpaid+=h,b[i].payment_info[d.currency_code].native_unpaid+=c}if(o.attributes.paid_dates.length>0){for(let h in o.attributes.paid_dates)if(o.attributes.paid_dates.hasOwnProperty(h)){let c=o.attributes.paid_dates[h];b[i].payment_info.hasOwnProperty(c.currency_code)||(b[i].payment_info[c.currency_code]={currency_code:d.currency_code,paid:0,unpaid:0,native_currency_code:d.native_currency_code,native_paid:0,native_unpaid:0});const _=parseFloat(c.amount)*-1,w=parseFloat(c.native_amount)*-1;b[i].payment_info[c.currency_code].paid+=_,b[i].payment_info[c.currency_code].native_paid+=w}}}}return parseInt(n.data.meta.pagination.total_pages)>t.page?(t.page++,gt(t)):Promise.resolve()})}const Xt=()=>({loading:!1,autoConversion:!1,subscriptions:[],startSubscriptions(){this.loading=!0;let t=new Date(window.store.get("start")),e=new Date(window.store.get("end"));const n=window.store.get("cacheValid");let a=window.store.get(P("subscriptions-data-dashboard",t,e));n&&typeof a<"u",b={},this.subscriptions=[];let r={start:g(t,"y-MM-dd"),end:g(e,"y-MM-dd"),autoConversion:this.autoConversion,page:1};gt(r).then(()=>{let o=Object.values(b);for(let i in o)if(o.hasOwnProperty(i)){let l=o[i];const u=Object.keys(l.payment_info);l.col_size=u.length===1?"col-6 offset-3":"col-6",l.chart_width=u.length===1?"50%":"100%",l.payment_length=u.length,this.subscriptions.push(l)}this.loading=!1})},drawPieChart(t,e,n){let a="#pie_"+t+"_"+n.currency_code;const r=this.autoConversion?n.native_unpaid:n.unpaid,o=this.autoConversion?n.native_paid:n.paid,i=this.autoConversion?n.native_currency_code:n.currency_code,u={type:"doughnut",data:{labels:[p.t("firefly.paid"),p.t("firefly.unpaid")],datasets:[{label:p.t("firefly.subscriptions_in_group",{title:e}),data:[o,r],backgroundColor:["rgb(54, 162, 235)","rgb(255, 99, 132)"],hoverOffset:4}]},options:{plugins:{tooltip:{callbacks:{label:function(h){return h.dataset.label+": "+f(h.raw,i)}}}}}};var d=S.getChart(document.querySelector(a));typeof d<"u"&&d.destroy(),new S(document.querySelector(a),u)},init(){Promise.all([v("autoConversion",!1)]).then(t=>{this.autoConversion=t[0],tt=!0,this.loading===!1&&this.startSubscriptions()}),window.store.observe("end",()=>{tt&&this.loading===!1&&this.startSubscriptions()}),window.store.observe("autoConversion",t=>{tt&&(this.autoConversion=t,this.loading===!1&&this.startSubscriptions())})}});let x={},et=!1;const ht="dashboard-piggies-data",te=()=>({loading:!1,autoConversion:!1,sankeyGrouping:"account",piggies:[],getFreshData(){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),n=P(ht,t,e),a=window.store.get("cacheValid");let r=window.store.get(n);if(a&&typeof r<"u"){x=r,this.parsePiggies(),this.loading=!1;return}let o={start:g(t,"y-MM-dd"),end:g(e,"y-MM-dd"),page:1};this.downloadPiggyBanks(o)},downloadPiggyBanks(t){const e=new Date(window.store.get("start")),n=new Date(window.store.get("end")),a=P(ht,e,n);new Kt().list(t).then(o=>{if(x=[...x,...o.data.data],parseInt(o.data.meta.pagination.total_pages)>t.page){t.page++,this.downloadPiggyBanks(t);return}window.store.set(a,x),this.parsePiggies(),this.loading=!1})},parsePiggies(){let t=[];for(let e in x)if(x.hasOwnProperty(e)){let n=x[e];if(n.attributes.percentage>=100||n.attributes.percentage===0)continue;let a=n.object_group_title??p.t("firefly.default_group_title_name_plain");t.hasOwnProperty(a)||(t[a]={id:n.object_group_id??0,title:a,order:n.object_group_order??0,piggies:[]});let r={id:n.id,name:n.attributes.name,percentage:parseInt(n.attributes.percentage),amount:this.autoConversion?n.attributes.native_current_amount:n.attributes.current_amount,left_to_save:this.autoConversion?n.attributes.native_left_to_save:n.attributes.left_to_save,target_amount:this.autoConversion?n.attributes.native_target_amount:n.attributes.target_amount,save_per_month:this.autoConversion?n.attributes.native_save_per_month:n.attributes.save_per_month,currency_code:this.autoConversion?n.attributes.native_currency_code:n.attributes.currency_code};t[a].piggies.push(r)}this.piggies=Object.values(t)},loadPiggyBanks(){if(this.loading!==!0){if(this.loading=!0,this.piggies.length!==0){this.parsePiggies(),this.loading=!1;return}this.getFreshData()}},init(){x=[],Promise.all([v("autoConversion",!1)]).then(t=>{et=!0,this.autoConversion=t[0],this.loadPiggyBanks()}),window.store.observe("end",()=>{et&&(x=[],this.loadPiggyBanks())}),window.store.observe("autoConversion",t=>{et&&(this.autoConversion=t,this.loadPiggyBanks())})}});S.register({LineController:Ct,LineElement:kt,ArcElement:Pt,BarController:Dt,TimeScale:xt,PieController:Ot,BarElement:Mt,Filler:Ft,Colors:St,LinearScale:At,CategoryScale:Bt,PointElement:jt,Tooltip:Wt,Legend:It});const pt={dates:wt,boxes:Et,accounts:Ut,budgets:Ht,categories:Zt,sankey:Qt,subscriptions:Xt,piggies:te};function _t(t){Object.keys(t).forEach(e=>{let n=t[e]();Alpine.data(e,()=>n)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{console.log("Loaded through event listener."),_t(pt)});window.bootstrapped&&(console.log("Loaded through window variable."),_t(pt)); diff --git a/public/build/assets/dashboard-daa2fdbe.js b/public/build/assets/dashboard-daa2fdbe.js deleted file mode 100644 index 08df6f886b..0000000000 --- a/public/build/assets/dashboard-daa2fdbe.js +++ /dev/null @@ -1,30 +0,0 @@ -var Sa=Object.defineProperty;var Oa=(n,t,e)=>t in n?Sa(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var k=(n,t,e)=>(Oa(n,typeof t!="symbol"?t+"":t,e),e);import{r as z,a as ai,t as wt,s as Yi,g as ji,b as ls,c as mr,d as j,e as br,f as yr,_ as an,h as Aa,i as Ui,j as _r,k as La,l as Ra,m as xr,n as Fa,o as Os,p as Ia,q as As,u as Ea,v as za,w as vt,x as J,y as V,z as bt,P as Ba,I as li,A as ci,B as Na,C as Wa,D as Ha,E as Va,F as Ls,G as Ya,H as ja,J as Ua}from"./load-translations-9a154502.js";var $a=36e5;function qa(n,t){z(2,arguments);var e=wt(t);return ai(n,e*$a)}var Xa=864e5;function Ka(n,t){z(2,arguments);var e=Yi(n),i=Yi(t),s=e.getTime()-ji(e),o=i.getTime()-ji(i);return Math.round((s-o)/Xa)}var Ga=6e4;function Qa(n,t){z(2,arguments);var e=wt(t);return ai(n,e*Ga)}function Za(n,t){z(2,arguments);var e=wt(t),i=e*3;return ls(n,i)}function Ja(n,t){z(2,arguments);var e=wt(t);return ai(n,e*1e3)}function tl(n,t){z(2,arguments);var e=wt(t),i=e*7;return mr(n,i)}function el(n,t){z(2,arguments);var e=wt(t);return ls(n,e*12)}function tn(n,t){z(2,arguments);var e=j(n),i=j(t),s=e.getTime()-i.getTime();return s<0?-1:s>0?1:s}var ui=6e4,hi=36e5,nl=1e3;function il(n,t){z(2,arguments);var e=j(n),i=j(t),s=e.getFullYear()-i.getFullYear(),o=e.getMonth()-i.getMonth();return s*12+o}function sl(n,t){z(2,arguments);var e=j(n),i=j(t);return e.getFullYear()-i.getFullYear()}function Rs(n,t){var e=n.getFullYear()-t.getFullYear()||n.getMonth()-t.getMonth()||n.getDate()-t.getDate()||n.getHours()-t.getHours()||n.getMinutes()-t.getMinutes()||n.getSeconds()-t.getSeconds()||n.getMilliseconds()-t.getMilliseconds();return e<0?-1:e>0?1:e}function vr(n,t){z(2,arguments);var e=j(n),i=j(t),s=Rs(e,i),o=Math.abs(Ka(e,i));e.setDate(e.getDate()-s*o);var r=+(Rs(e,i)===-s),a=s*(o-r);return a===0?0:a}function di(n,t){return z(2,arguments),j(n).getTime()-j(t).getTime()}var Fs={ceil:Math.ceil,round:Math.round,floor:Math.floor,trunc:function(t){return t<0?Math.ceil(t):Math.floor(t)}},ol="trunc";function bn(n){return n?Fs[n]:Fs[ol]}function rl(n,t,e){z(2,arguments);var i=di(n,t)/hi;return bn(e==null?void 0:e.roundingMethod)(i)}function al(n,t,e){z(2,arguments);var i=di(n,t)/ui;return bn(e==null?void 0:e.roundingMethod)(i)}function ll(n){z(1,arguments);var t=j(n);return br(t).getTime()===yr(t).getTime()}function wr(n,t){z(2,arguments);var e=j(n),i=j(t),s=tn(e,i),o=Math.abs(il(e,i)),r;if(o<1)r=0;else{e.getMonth()===1&&e.getDate()>27&&e.setDate(30),e.setMonth(e.getMonth()-s*o);var a=tn(e,i)===-s;ll(j(n))&&o===1&&tn(n,i)===1&&(a=!1),r=s*(o-Number(a))}return r===0?0:r}function cl(n,t,e){z(2,arguments);var i=wr(n,t)/3;return bn(e==null?void 0:e.roundingMethod)(i)}function ul(n,t,e){z(2,arguments);var i=di(n,t)/1e3;return bn(e==null?void 0:e.roundingMethod)(i)}function hl(n,t,e){z(2,arguments);var i=vr(n,t)/7;return bn(e==null?void 0:e.roundingMethod)(i)}function dl(n,t){z(2,arguments);var e=j(n),i=j(t),s=tn(e,i),o=Math.abs(sl(e,i));e.setFullYear(1584),i.setFullYear(1584);var r=tn(e,i)===-s,a=s*(o-Number(r));return a===0?0:a}function fl(n){z(1,arguments);var t=j(n);return t.setSeconds(0,0),t}function gl(n){z(1,arguments);var t=j(n),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function pl(n){z(1,arguments);var t=j(n);return t.setMinutes(59,59,999),t}function ml(n){z(1,arguments);var t=j(n);return t.setSeconds(59,999),t}function bl(n){z(1,arguments);var t=j(n);return t.setMilliseconds(999),t}function yl(n,t){if(n==null)throw new TypeError("assign requires that input parameter not be null or undefined");for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n}function Is(n,t){(t==null||t>n.length)&&(t=n.length);for(var e=0,i=new Array(t);e=n.length?{done:!0}:{done:!1,value:n[i++]}},e:function(c){throw c},f:s}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o=!0,r=!1,a;return{s:function(){e=e.call(n)},n:function(){var c=e.next();return o=c.done,c},e:function(c){r=!0,a=c},f:function(){try{!o&&e.return!=null&&e.return()}finally{if(r)throw a}}}}function D(n){if(n===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}function $i(n,t){return $i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,s){return i.__proto__=s,i},$i(n,t)}function B(n,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),Object.defineProperty(n,"prototype",{writable:!1}),t&&$i(n,t)}function Gn(n){return Gn=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Gn(n)}function xl(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vl(n,t){if(t&&(an(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return D(n)}function N(n){var t=xl();return function(){var i=Gn(n),s;if(t){var o=Gn(this).constructor;s=Reflect.construct(i,arguments,o)}else s=i.apply(this,arguments);return vl(this,s)}}function I(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function wl(n,t){if(an(n)!=="object"||n===null)return n;var e=n[Symbol.toPrimitive];if(e!==void 0){var i=e.call(n,t||"default");if(an(i)!=="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(n)}function Mr(n){var t=wl(n,"string");return an(t)==="symbol"?t:String(t)}function zs(n,t){for(var e=0;e0,i=e?t:1-t,s;if(i<=50)s=n||100;else{var o=i+50,r=Math.floor(o/100)*100,a=n>=o%100;s=n+r-(a?100:0)}return e?s:1-s}function Dr(n){return n%400===0||n%4===0&&n%100!==0}var Dl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r0}},{key:"set",value:function(s,o,r){var a=s.getUTCFullYear();if(r.isTwoDigitYear){var l=Pr(r.year,a);return s.setUTCFullYear(l,0,1),s.setUTCHours(0,0,0,0),s}var c=!("era"in o)||o.era===1?r.year:1-r.year;return s.setUTCFullYear(c,0,1),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Tl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r0}},{key:"set",value:function(s,o,r,a){var l=Aa(s,a);if(r.isTwoDigitYear){var c=Pr(r.year,l);return s.setUTCFullYear(c,0,a.firstWeekContainsDate),s.setUTCHours(0,0,0,0),Ui(s,a)}var u=!("era"in o)||o.era===1?r.year:1-r.year;return s.setUTCFullYear(u,0,a.firstWeekContainsDate),s.setUTCHours(0,0,0,0),Ui(s,a)}}]),e}(Y),Sl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=4}},{key:"set",value:function(s,o,r){return s.setUTCMonth((r-1)*3,1),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Ll=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=4}},{key:"set",value:function(s,o,r){return s.setUTCMonth((r-1)*3,1),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Rl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=11}},{key:"set",value:function(s,o,r){return s.setUTCMonth(r,1),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Fl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=11}},{key:"set",value:function(s,o,r){return s.setUTCMonth(r,1),s.setUTCHours(0,0,0,0),s}}]),e}(Y);function Il(n,t,e){z(2,arguments);var i=j(n),s=wt(t),o=La(i,e)-s;return i.setUTCDate(i.getUTCDate()-o*7),i}var El=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=53}},{key:"set",value:function(s,o,r,a){return Ui(Il(s,r,a),a)}}]),e}(Y);function zl(n,t){z(2,arguments);var e=j(n),i=wt(t),s=Ra(e)-i;return e.setUTCDate(e.getUTCDate()-s*7),e}var Bl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=53}},{key:"set",value:function(s,o,r){return _r(zl(s,r))}}]),e}(Y),Nl=[31,28,31,30,31,30,31,31,30,31,30,31],Wl=[31,29,31,30,31,30,31,31,30,31,30,31],Hl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=Wl[l]:o>=1&&o<=Nl[l]}},{key:"set",value:function(s,o,r){return s.setUTCDate(r),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Vl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=366:o>=1&&o<=365}},{key:"set",value:function(s,o,r){return s.setUTCMonth(0,r),s.setUTCHours(0,0,0,0),s}}]),e}(Y);function us(n,t,e){var i,s,o,r,a,l,c,u;z(2,arguments);var h=xr(),d=wt((i=(s=(o=(r=e==null?void 0:e.weekStartsOn)!==null&&r!==void 0?r:e==null||(a=e.locale)===null||a===void 0||(l=a.options)===null||l===void 0?void 0:l.weekStartsOn)!==null&&o!==void 0?o:h.weekStartsOn)!==null&&s!==void 0?s:(c=h.locale)===null||c===void 0||(u=c.options)===null||u===void 0?void 0:u.weekStartsOn)!==null&&i!==void 0?i:0);if(!(d>=0&&d<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var f=j(n),g=wt(t),p=f.getUTCDay(),m=g%7,b=(m+7)%7,y=(b=0&&o<=6}},{key:"set",value:function(s,o,r,a){return s=us(s,r,a),s.setUTCHours(0,0,0,0),s}}]),e}(Y),jl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=6}},{key:"set",value:function(s,o,r,a){return s=us(s,r,a),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Ul=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=6}},{key:"set",value:function(s,o,r,a){return s=us(s,r,a),s.setUTCHours(0,0,0,0),s}}]),e}(Y);function $l(n,t){z(2,arguments);var e=wt(t);e%7===0&&(e=e-7);var i=1,s=j(n),o=s.getUTCDay(),r=e%7,a=(r+7)%7,l=(a=1&&o<=7}},{key:"set",value:function(s,o,r){return s=$l(s,r),s.setUTCHours(0,0,0,0),s}}]),e}(Y),Xl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=12}},{key:"set",value:function(s,o,r){var a=s.getUTCHours()>=12;return a&&r<12?s.setUTCHours(r+12,0,0,0):!a&&r===12?s.setUTCHours(0,0,0,0):s.setUTCHours(r,0,0,0),s}}]),e}(Y),Zl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=23}},{key:"set",value:function(s,o,r){return s.setUTCHours(r,0,0,0),s}}]),e}(Y),Jl=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=11}},{key:"set",value:function(s,o,r){var a=s.getUTCHours()>=12;return a&&r<12?s.setUTCHours(r+12,0,0,0):s.setUTCHours(r,0,0,0),s}}]),e}(Y),tc=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&o<=24}},{key:"set",value:function(s,o,r){var a=r<=24?r%24:r;return s.setUTCHours(a,0,0,0),s}}]),e}(Y),ec=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=59}},{key:"set",value:function(s,o,r){return s.setUTCMinutes(r,0,0),s}}]),e}(Y),nc=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=0&&o<=59}},{key:"set",value:function(s,o,r){return s.setUTCSeconds(r,0),s}}]),e}(Y),ic=function(n){B(e,n);var t=N(e);function e(){var i;I(this,e);for(var s=arguments.length,o=new Array(s),r=0;r=1&&A<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var O=wt((g=(p=(m=(b=i==null?void 0:i.weekStartsOn)!==null&&b!==void 0?b:i==null||(y=i.locale)===null||y===void 0||(x=y.options)===null||x===void 0?void 0:x.weekStartsOn)!==null&&m!==void 0?m:M.weekStartsOn)!==null&&p!==void 0?p:(v=M.locale)===null||v===void 0||(_=v.options)===null||_===void 0?void 0:_.weekStartsOn)!==null&&g!==void 0?g:0);if(!(O>=0&&O<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(C==="")return w===""?j(e):new Date(NaN);var R={firstWeekContainsDate:A,weekStartsOn:O,locale:T},st=[new Cl],gt=C.match(uc).map(function(ct){var q=ct[0];if(q in Os){var St=Os[q];return St(ct,T.formatLong)}return ct}).join("").match(cc),W=[],U=Es(gt),Q;try{var Mt=function(){var q=Q.value;!(i!=null&&i.useAdditionalWeekYearTokens)&&Ia(q)&&As(q,C,n),!(i!=null&&i.useAdditionalDayOfYearTokens)&&Ea(q)&&As(q,C,n);var St=q[0],wn=lc[St];if(wn){var Ds=wn.incompatibleTokens;if(Array.isArray(Ds)){var Ts=W.find(function(Ss){return Ds.includes(Ss.token)||Ss.token===St});if(Ts)throw new RangeError("The format string mustn't contain `".concat(Ts.fullToken,"` and `").concat(q,"` at the same time"))}else if(wn.incompatibleTokens==="*"&&W.length>0)throw new RangeError("The format string mustn't contain `".concat(q,"` and any other token at the same time"));W.push({token:St,fullToken:q});var xi=wn.run(w,q,T.match,R);if(!xi)return{v:new Date(NaN)};st.push(xi.setter),w=xi.rest}else{if(St.match(gc))throw new RangeError("Format string contains an unescaped latin alphabet character `"+St+"`");if(q==="''"?q="'":St==="'"&&(q=mc(q)),w.indexOf(q)===0)w=w.slice(q.length);else return{v:new Date(NaN)}}};for(U.s();!(Q=U.n()).done;){var lt=Mt();if(an(lt)==="object")return lt.v}}catch(ct){U.e(ct)}finally{U.f()}if(w.length>0&&fc.test(w))return new Date(NaN);var Kt=st.map(function(ct){return ct.priority}).sort(function(ct,q){return q-ct}).filter(function(ct,q,St){return St.indexOf(ct)===q}).map(function(ct){return st.filter(function(q){return q.priority===ct}).sort(function(q,St){return St.subPriority-q.subPriority})}).map(function(ct){return ct[0]}),Gt=j(e);if(isNaN(Gt.getTime()))return new Date(NaN);var Tt=za(Gt,ji(Gt)),Qt={},Rt=Es(Kt),Zt;try{for(Rt.s();!(Zt=Rt.n()).done;){var Jt=Zt.value;if(!Jt.validate(Tt,R))return new Date(NaN);var vn=Jt.set(Tt,Qt,R);Array.isArray(vn)?(Tt=vn[0],yl(Qt,vn[1])):Tt=vn}}catch(ct){Rt.e(ct)}finally{Rt.f()}return Tt}function mc(n){return n.match(hc)[1].replace(dc,"'")}function bc(n){z(1,arguments);var t=j(n);return t.setMinutes(0,0,0),t}function yc(n){z(1,arguments);var t=j(n);return t.setMilliseconds(0),t}function _c(n,t){var e;z(1,arguments);var i=wt((e=t==null?void 0:t.additionalDigits)!==null&&e!==void 0?e:2);if(i!==2&&i!==1&&i!==0)throw new RangeError("additionalDigits must be 0, 1 or 2");if(!(typeof n=="string"||Object.prototype.toString.call(n)==="[object String]"))return new Date(NaN);var s=Mc(n),o;if(s.date){var r=kc(s.date,i);o=Cc(r.restDateString,r.year)}if(!o||isNaN(o.getTime()))return new Date(NaN);var a=o.getTime(),l=0,c;if(s.time&&(l=Pc(s.time),isNaN(l)))return new Date(NaN);if(s.timezone){if(c=Dc(s.timezone),isNaN(c))return new Date(NaN)}else{var u=new Date(a+l),h=new Date(0);return h.setFullYear(u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()),h.setHours(u.getUTCHours(),u.getUTCMinutes(),u.getUTCSeconds(),u.getUTCMilliseconds()),h}return new Date(a+l+c)}var Mn={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},xc=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,vc=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,wc=/^([+-])(\d{2})(?::?(\d{2}))?$/;function Mc(n){var t={},e=n.split(Mn.dateTimeDelimiter),i;if(e.length>2)return t;if(/:/.test(e[0])?i=e[0]:(t.date=e[0],i=e[1],Mn.timeZoneDelimiter.test(t.date)&&(t.date=n.split(Mn.timeZoneDelimiter)[0],i=n.substr(t.date.length,n.length))),i){var s=Mn.timezone.exec(i);s?(t.time=i.replace(s[1],""),t.timezone=s[1]):t.time=i}return t}function kc(n,t){var e=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),i=n.match(e);if(!i)return{year:NaN,restDateString:""};var s=i[1]?parseInt(i[1]):null,o=i[2]?parseInt(i[2]):null;return{year:o===null?s:o*100,restDateString:n.slice((i[1]||i[2]).length)}}function Cc(n,t){if(t===null)return new Date(NaN);var e=n.match(xc);if(!e)return new Date(NaN);var i=!!e[4],s=Be(e[1]),o=Be(e[2])-1,r=Be(e[3]),a=Be(e[4]),l=Be(e[5])-1;if(i)return Lc(t,a,l)?Tc(t,a,l):new Date(NaN);var c=new Date(0);return!Oc(t,o,r)||!Ac(t,s)?new Date(NaN):(c.setUTCFullYear(t,o,Math.max(s,r)),c)}function Be(n){return n?parseInt(n):1}function Pc(n){var t=n.match(vc);if(!t)return NaN;var e=vi(t[1]),i=vi(t[2]),s=vi(t[3]);return Rc(e,i,s)?e*hi+i*ui+s*1e3:NaN}function vi(n){return n&&parseFloat(n.replace(",","."))||0}function Dc(n){if(n==="Z")return 0;var t=n.match(wc);if(!t)return 0;var e=t[1]==="+"?-1:1,i=parseInt(t[2]),s=t[3]&&parseInt(t[3])||0;return Fc(i,s)?e*(i*hi+s*ui):NaN}function Tc(n,t,e){var i=new Date(0);i.setUTCFullYear(n,0,4);var s=i.getUTCDay()||7,o=(t-1)*7+e+1-s;return i.setUTCDate(i.getUTCDate()+o),i}var Sc=[31,null,31,30,31,30,31,31,30,31,30,31];function Tr(n){return n%400===0||n%4===0&&n%100!==0}function Oc(n,t,e){return t>=0&&t<=11&&e>=1&&e<=(Sc[t]||(Tr(n)?29:28))}function Ac(n,t){return t>=1&&t<=(Tr(n)?366:365)}function Lc(n,t,e){return t>=1&&t<=53&&e>=0&&e<=6}function Rc(n,t,e){return n===24?t===0&&e===0:e>=0&&e<60&&t>=0&&t<60&&n>=0&&n<25}function Fc(n,t){return t>=0&&t<=59}class Ic{get(t,e,i){return vt.get("/api/v2/summary/basic",{params:{start:t,end:e,code:i}})}}function Nt(n,t,e){const i=J(t,"y-MM-dd")+"_"+J(e,"y-MM-dd")+"_"+n;return console.log("getCacheKey: "+i),String(i)}let wi=!1;const Ec=()=>({balanceBox:{amounts:[],subtitles:[]},billBox:{paid:[],unpaid:[]},leftBox:{left:[],perDay:[]},netBox:{net:[]},autoConversion:!1,loading:!1,boxData:null,boxOptions:null,getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-boxes-data",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){this.boxData=s,this.generateOptions(this.boxData);return}new Ic().get(J(n,"yyyy-MM-dd"),J(t,"yyyy-MM-dd"),null).then(r=>{this.boxData=r.data,window.store.set(e,r.data),this.generateOptions(this.boxData)})},generateOptions(n){this.balanceBox={amounts:[],subtitles:[]},this.billBox={paid:[],unpaid:[]},this.leftBox={left:[],perDay:[]},this.netBox={net:[]};let t={};for(const e in n)if(n.hasOwnProperty(e)){const i=n[e];if(!i.hasOwnProperty("key"))continue;let s=i.key;if(this.autoConversion){if(s.startsWith("balance-in-native")){this.balanceBox.amounts.push(V(i.value,i.currency_code)),t.hasOwnProperty(i.currency_code)||(t[i.currency_code]="");continue}if(s.startsWith("spent-in-native")){t.hasOwnProperty(i.currency_code)||(t[i.currency_code]=""),t[i.currency_code]=t[i.currency_code]+V(i.value,i.currency_code);continue}if(s.startsWith("earned-in-native")){t.hasOwnProperty(i.currency_code)||(t[i.currency_code]=""),t[i.currency_code]=V(i.value,i.currency_code)+" + "+t[i.currency_code];continue}if(s.startsWith("bills-unpaid-in-native")){this.billBox.unpaid.push(V(i.value,i.currency_code));continue}if(s.startsWith("bills-paid-in-native")){this.billBox.paid.push(V(i.value,i.currency_code));continue}if(s.startsWith("left-to-spend-in-native")){this.leftBox.left.push(V(i.value,i.currency_code));continue}if(s.startsWith("left-per-day-to-spend-in-native")){this.leftBox.perDay.push(V(i.value,i.currency_code));continue}if(s.startsWith("net-worth-in-native")){this.netBox.net.push(V(i.value,i.currency_code));continue}}if(!this.autoConversion&&!s.endsWith("native")){if(s.startsWith("balance-in-")){this.balanceBox.amounts.push(V(i.value,i.currency_code));continue}if(s.startsWith("spent-in-")){t.hasOwnProperty(i.currency_code)||(t[i.currency_code]=""),t[i.currency_code]=t[i.currency_code]+V(i.value,i.currency_code);continue}if(s.startsWith("earned-in-")){t.hasOwnProperty(i.currency_code)||(t[i.currency_code]=""),t[i.currency_code]=V(i.value,i.currency_code)+" + "+t[i.currency_code];continue}if(s.startsWith("bills-unpaid-in-")){this.billBox.unpaid.push(V(i.value,i.currency_code));continue}if(s.startsWith("bills-paid-in-")){this.billBox.paid.push(V(i.value,i.currency_code));continue}if(s.startsWith("left-to-spend-in-")){this.leftBox.left.push(V(i.value,i.currency_code));continue}if(s.startsWith("left-per-day-to-spend-in-")){this.leftBox.perDay.push(V(i.value,i.currency_code));continue}s.startsWith("net-worth-in-")&&this.netBox.net.push(V(i.value,i.currency_code))}}for(let e in t)t.hasOwnProperty(e)&&this.balanceBox.subtitles.push(t[e]);this.loading=!1},loadBoxes(){if(this.loading!==!0){if(this.loading=!0,this.boxData===null){this.getFreshData();return}this.generateOptions(this.boxData),this.loading=!1}},init(){Promise.all([bt("viewRange"),bt("autoConversion",!1)]).then(n=>{wi=!0,this.autoConversion=n[1],this.loadBoxes()}),window.store.observe("end",()=>{wi&&(this.boxData=null,this.loadBoxes())}),window.store.observe("autoConversion",n=>{wi&&(this.autoConversion=n,this.loadBoxes())})}});class zc{put(t,e){let i="/api/v1/preferences/"+t;return vt.put(i,{data:e})}}function Bc(n,t=null){window.store.set(n,t),new zc().put(n,t).then(i=>{}).catch(()=>{new Ba().post(n,t).then(s=>{})})}let Nc=class{dashboard(t,e){let i=J(t,"y-MM-dd"),s=J(e,"y-MM-dd");return vt.get("/api/v2/chart/account/dashboard",{params:{start:i,end:s}})}expense(t,e){let i=J(t,"y-MM-dd"),s=J(e,"y-MM-dd");return vt.get("/api/v2/chart/account/expense-dashboard",{params:{start:i,end:s}})}},Bs=class{get(t,e){let i={date:J(e,"y-MM-dd").slice(0,10)};return e?vt.get("/api/v2/accounts/"+t,{params:i}):vt.get("/api/v2/accounts/"+t)}transactions(t,e){const i={page:e.page??1};return e.hasOwnProperty("start")&&(i.start=J(e.start,"y-MM-dd")),e.hasOwnProperty("end")&&(i.end=J(e.end,"y-MM-dd")),vt.get("/api/v2/accounts/"+t+"/transactions",{params:i})}};/*! - * @kurkle/color v0.3.2 - * https://github.com/kurkle/color#readme - * (c) 2023 Jukka Kurkela - * Released under the MIT License - */function yn(n){return n+.5|0}const ne=(n,t,e)=>Math.max(Math.min(n,e),t);function Ge(n){return ne(yn(n*2.55),0,255)}function le(n){return ne(yn(n*255),0,255)}function Ut(n){return ne(yn(n/2.55)/100,0,1)}function Ns(n){return ne(yn(n*100),0,100)}const Ot={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},qi=[..."0123456789ABCDEF"],Wc=n=>qi[n&15],Hc=n=>qi[(n&240)>>4]+qi[n&15],kn=n=>(n&240)>>4===(n&15),Vc=n=>kn(n.r)&&kn(n.g)&&kn(n.b)&&kn(n.a);function Yc(n){var t=n.length,e;return n[0]==="#"&&(t===4||t===5?e={r:255&Ot[n[1]]*17,g:255&Ot[n[2]]*17,b:255&Ot[n[3]]*17,a:t===5?Ot[n[4]]*17:255}:(t===7||t===9)&&(e={r:Ot[n[1]]<<4|Ot[n[2]],g:Ot[n[3]]<<4|Ot[n[4]],b:Ot[n[5]]<<4|Ot[n[6]],a:t===9?Ot[n[7]]<<4|Ot[n[8]]:255})),e}const jc=(n,t)=>n<255?t(n):"";function Uc(n){var t=Vc(n)?Wc:Hc;return n?"#"+t(n.r)+t(n.g)+t(n.b)+jc(n.a,t):void 0}const $c=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Sr(n,t,e){const i=t*Math.min(e,1-e),s=(o,r=(o+n/30)%12)=>e-i*Math.max(Math.min(r-3,9-r,1),-1);return[s(0),s(8),s(4)]}function qc(n,t,e){const i=(s,o=(s+n/60)%6)=>e-e*t*Math.max(Math.min(o,4-o,1),0);return[i(5),i(3),i(1)]}function Xc(n,t,e){const i=Sr(n,1,.5);let s;for(t+e>1&&(s=1/(t+e),t*=s,e*=s),s=0;s<3;s++)i[s]*=1-t-e,i[s]+=t;return i}function Kc(n,t,e,i,s){return n===s?(t-e)/i+(t.5?u/(2-o-r):u/(o+r),l=Kc(e,i,s,u,o),l=l*60+.5),[l|0,c||0,a]}function ds(n,t,e,i){return(Array.isArray(t)?n(t[0],t[1],t[2]):n(t,e,i)).map(le)}function fs(n,t,e){return ds(Sr,n,t,e)}function Gc(n,t,e){return ds(Xc,n,t,e)}function Qc(n,t,e){return ds(qc,n,t,e)}function Or(n){return(n%360+360)%360}function Zc(n){const t=$c.exec(n);let e=255,i;if(!t)return;t[5]!==i&&(e=t[6]?Ge(+t[5]):le(+t[5]));const s=Or(+t[2]),o=+t[3]/100,r=+t[4]/100;return t[1]==="hwb"?i=Gc(s,o,r):t[1]==="hsv"?i=Qc(s,o,r):i=fs(s,o,r),{r:i[0],g:i[1],b:i[2],a:e}}function Jc(n,t){var e=hs(n);e[0]=Or(e[0]+t),e=fs(e),n.r=e[0],n.g=e[1],n.b=e[2]}function tu(n){if(!n)return;const t=hs(n),e=t[0],i=Ns(t[1]),s=Ns(t[2]);return n.a<255?`hsla(${e}, ${i}%, ${s}%, ${Ut(n.a)})`:`hsl(${e}, ${i}%, ${s}%)`}const Ws={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},Hs={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function eu(){const n={},t=Object.keys(Hs),e=Object.keys(Ws);let i,s,o,r,a;for(i=0;i>16&255,o>>8&255,o&255]}return n}let Cn;function nu(n){Cn||(Cn=eu(),Cn.transparent=[0,0,0,0]);const t=Cn[n.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}const iu=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function su(n){const t=iu.exec(n);let e=255,i,s,o;if(t){if(t[7]!==i){const r=+t[7];e=t[8]?Ge(r):ne(r*255,0,255)}return i=+t[1],s=+t[3],o=+t[5],i=255&(t[2]?Ge(i):ne(i,0,255)),s=255&(t[4]?Ge(s):ne(s,0,255)),o=255&(t[6]?Ge(o):ne(o,0,255)),{r:i,g:s,b:o,a:e}}}function ou(n){return n&&(n.a<255?`rgba(${n.r}, ${n.g}, ${n.b}, ${Ut(n.a)})`:`rgb(${n.r}, ${n.g}, ${n.b})`)}const Mi=n=>n<=.0031308?n*12.92:Math.pow(n,1/2.4)*1.055-.055,Ce=n=>n<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4);function ru(n,t,e){const i=Ce(Ut(n.r)),s=Ce(Ut(n.g)),o=Ce(Ut(n.b));return{r:le(Mi(i+e*(Ce(Ut(t.r))-i))),g:le(Mi(s+e*(Ce(Ut(t.g))-s))),b:le(Mi(o+e*(Ce(Ut(t.b))-o))),a:n.a+e*(t.a-n.a)}}function Pn(n,t,e){if(n){let i=hs(n);i[t]=Math.max(0,Math.min(i[t]+i[t]*e,t===0?360:1)),i=fs(i),n.r=i[0],n.g=i[1],n.b=i[2]}}function Ar(n,t){return n&&Object.assign(t||{},n)}function Vs(n){var t={r:0,g:0,b:0,a:255};return Array.isArray(n)?n.length>=3&&(t={r:n[0],g:n[1],b:n[2],a:255},n.length>3&&(t.a=le(n[3]))):(t=Ar(n,{r:0,g:0,b:0,a:1}),t.a=le(t.a)),t}function au(n){return n.charAt(0)==="r"?su(n):Zc(n)}class dt{constructor(t){if(t instanceof dt)return t;const e=typeof t;let i;e==="object"?i=Vs(t):e==="string"&&(i=Yc(t)||nu(t)||au(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=Ar(this._rgb);return t&&(t.a=Ut(t.a)),t}set rgb(t){this._rgb=Vs(t)}rgbString(){return this._valid?ou(this._rgb):void 0}hexString(){return this._valid?Uc(this._rgb):void 0}hslString(){return this._valid?tu(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let o;const r=e===o?.5:e,a=2*r-1,l=i.a-s.a,c=((a*l===-1?a:(a+l)/(1+a*l))+1)/2;o=1-c,i.r=255&c*i.r+o*s.r+.5,i.g=255&c*i.g+o*s.g+.5,i.b=255&c*i.b+o*s.b+.5,i.a=r*i.a+(1-r)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=ru(this._rgb,t._rgb,e)),this}clone(){return new dt(this.rgb)}alpha(t){return this._rgb.a=le(t),this}clearer(t){const e=this._rgb;return e.a*=1-t,this}greyscale(){const t=this._rgb,e=yn(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){const e=this._rgb;return e.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Pn(this._rgb,2,t),this}darken(t){return Pn(this._rgb,2,-t),this}saturate(t){return Pn(this._rgb,1,t),this}desaturate(t){return Pn(this._rgb,1,-t),this}rotate(t){return Jc(this._rgb,t),this}}/*! - * Chart.js v4.4.0 - * https://www.chartjs.org - * (c) 2023 Chart.js Contributors - * Released under the MIT License - */function Wt(){}const lu=(()=>{let n=0;return()=>n++})();function H(n){return n===null||typeof n>"u"}function K(n){if(Array.isArray&&Array.isArray(n))return!0;const t=Object.prototype.toString.call(n);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function F(n){return n!==null&&Object.prototype.toString.call(n)==="[object Object]"}function et(n){return(typeof n=="number"||n instanceof Number)&&isFinite(+n)}function Pt(n,t){return et(n)?n:t}function S(n,t){return typeof n>"u"?t:n}const cu=(n,t)=>typeof n=="string"&&n.endsWith("%")?parseFloat(n)/100:+n/t,Lr=(n,t)=>typeof n=="string"&&n.endsWith("%")?parseFloat(n)/100*t:+n;function X(n,t,e){if(n&&typeof n.call=="function")return n.apply(e,t)}function $(n,t,e,i){let s,o,r;if(K(n))if(o=n.length,i)for(s=o-1;s>=0;s--)t.call(e,n[s],s);else for(s=0;sn,x:n=>n.x,y:n=>n.y};function du(n){const t=n.split("."),e=[];let i="";for(const s of t)i+=s,i.endsWith("\\")?i=i.slice(0,-1)+".":(e.push(i),i="");return e}function fu(n){const t=du(n);return e=>{for(const i of t){if(i==="")break;e=e&&e[i]}return e}}function ce(n,t){return(Ys[t]||(Ys[t]=fu(t)))(n)}function gs(n){return n.charAt(0).toUpperCase()+n.slice(1)}const cn=n=>typeof n<"u",ue=n=>typeof n=="function",js=(n,t)=>{if(n.size!==t.size)return!1;for(const e of n)if(!t.has(e))return!1;return!0};function gu(n){return n.type==="mouseup"||n.type==="click"||n.type==="contextmenu"}const tt=Math.PI,G=2*tt,pu=G+tt,ti=Number.POSITIVE_INFINITY,mu=tt/180,at=tt/2,de=tt/4,Us=tt*2/3,ie=Math.log10,Bt=Math.sign;function nn(n,t,e){return Math.abs(n-t)s-o).pop(),t}function un(n){return!isNaN(parseFloat(n))&&isFinite(n)}function yu(n,t){const e=Math.round(n);return e-t<=n&&e+t>=n}function Fr(n,t,e){let i,s,o;for(i=0,s=n.length;il&&c=Math.min(t,e)-i&&n<=Math.max(t,e)+i}function ms(n,t,e){e=e||(r=>n[r]1;)o=s+i>>1,e(o)?s=o:i=o;return{lo:s,hi:i}}const xe=(n,t,e,i)=>ms(n,e,i?s=>{const o=n[s][t];return on[s][t]ms(n,e,i=>n[i][t]>=e);function wu(n,t,e){let i=0,s=n.length;for(;ii&&n[s-1]>e;)s--;return i>0||s{const i="_onData"+gs(e),s=n[e];Object.defineProperty(n,e,{configurable:!0,enumerable:!1,value(...o){const r=s.apply(this,o);return n._chartjs.listeners.forEach(a=>{typeof a[i]=="function"&&a[i](...o)}),r}})})}function Xs(n,t){const e=n._chartjs;if(!e)return;const i=e.listeners,s=i.indexOf(t);s!==-1&&i.splice(s,1),!(i.length>0)&&(Er.forEach(o=>{delete n[o]}),delete n._chartjs)}function zr(n){const t=new Set(n);return t.size===n.length?n:Array.from(t)}const Br=function(){return typeof window>"u"?function(n){return n()}:window.requestAnimationFrame}();function Nr(n,t){let e=[],i=!1;return function(...s){e=s,i||(i=!0,Br.call(window,()=>{i=!1,n.apply(t,e)}))}}function ku(n,t){let e;return function(...i){return t?(clearTimeout(e),e=setTimeout(n,t,i)):n.apply(this,i),t}}const Wr=n=>n==="start"?"left":n==="end"?"right":"center",kt=(n,t,e)=>n==="start"?t:n==="end"?e:(t+e)/2,Cu=(n,t,e,i)=>n===(i?"left":"right")?e:n==="center"?(t+e)/2:t;function Pu(n,t,e){const i=t.length;let s=0,o=i;if(n._sorted){const{iScale:r,_parsed:a}=n,l=r.axis,{min:c,max:u,minDefined:h,maxDefined:d}=r.getUserBounds();h&&(s=ft(Math.min(xe(a,l,c).lo,e?i:xe(t,l,r.getPixelForValue(c)).lo),0,i-1)),d?o=ft(Math.max(xe(a,r.axis,u,!0).hi+1,e?0:xe(t,l,r.getPixelForValue(u),!0).hi+1),s,i)-s:o=i-s}return{start:s,count:o}}function Du(n){const{xScale:t,yScale:e,_scaleRanges:i}=n,s={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!i)return n._scaleRanges=s,!0;const o=i.xmin!==t.min||i.xmax!==t.max||i.ymin!==e.min||i.ymax!==e.max;return Object.assign(i,s),o}const Dn=n=>n===0||n===1,Ks=(n,t,e)=>-(Math.pow(2,10*(n-=1))*Math.sin((n-t)*G/e)),Gs=(n,t,e)=>Math.pow(2,-10*n)*Math.sin((n-t)*G/e)+1,sn={linear:n=>n,easeInQuad:n=>n*n,easeOutQuad:n=>-n*(n-2),easeInOutQuad:n=>(n/=.5)<1?.5*n*n:-.5*(--n*(n-2)-1),easeInCubic:n=>n*n*n,easeOutCubic:n=>(n-=1)*n*n+1,easeInOutCubic:n=>(n/=.5)<1?.5*n*n*n:.5*((n-=2)*n*n+2),easeInQuart:n=>n*n*n*n,easeOutQuart:n=>-((n-=1)*n*n*n-1),easeInOutQuart:n=>(n/=.5)<1?.5*n*n*n*n:-.5*((n-=2)*n*n*n-2),easeInQuint:n=>n*n*n*n*n,easeOutQuint:n=>(n-=1)*n*n*n*n+1,easeInOutQuint:n=>(n/=.5)<1?.5*n*n*n*n*n:.5*((n-=2)*n*n*n*n+2),easeInSine:n=>-Math.cos(n*at)+1,easeOutSine:n=>Math.sin(n*at),easeInOutSine:n=>-.5*(Math.cos(tt*n)-1),easeInExpo:n=>n===0?0:Math.pow(2,10*(n-1)),easeOutExpo:n=>n===1?1:-Math.pow(2,-10*n)+1,easeInOutExpo:n=>Dn(n)?n:n<.5?.5*Math.pow(2,10*(n*2-1)):.5*(-Math.pow(2,-10*(n*2-1))+2),easeInCirc:n=>n>=1?n:-(Math.sqrt(1-n*n)-1),easeOutCirc:n=>Math.sqrt(1-(n-=1)*n),easeInOutCirc:n=>(n/=.5)<1?-.5*(Math.sqrt(1-n*n)-1):.5*(Math.sqrt(1-(n-=2)*n)+1),easeInElastic:n=>Dn(n)?n:Ks(n,.075,.3),easeOutElastic:n=>Dn(n)?n:Gs(n,.075,.3),easeInOutElastic(n){return Dn(n)?n:n<.5?.5*Ks(n*2,.1125,.45):.5+.5*Gs(n*2-1,.1125,.45)},easeInBack(n){return n*n*((1.70158+1)*n-1.70158)},easeOutBack(n){return(n-=1)*n*((1.70158+1)*n+1.70158)+1},easeInOutBack(n){let t=1.70158;return(n/=.5)<1?.5*(n*n*(((t*=1.525)+1)*n-t)):.5*((n-=2)*n*(((t*=1.525)+1)*n+t)+2)},easeInBounce:n=>1-sn.easeOutBounce(1-n),easeOutBounce(n){return n<1/2.75?7.5625*n*n:n<2/2.75?7.5625*(n-=1.5/2.75)*n+.75:n<2.5/2.75?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375},easeInOutBounce:n=>n<.5?sn.easeInBounce(n*2)*.5:sn.easeOutBounce(n*2-1)*.5+.5};function bs(n){if(n&&typeof n=="object"){const t=n.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function Ae(n){return bs(n)?n:new dt(n)}function on(n){return bs(n)?n:new dt(n).saturate(.5).darken(.1).hexString()}const Tu=["x","y","borderWidth","radius","tension"],Su=["color","borderColor","backgroundColor"];function Ou(n){n.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),n.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>t!=="onProgress"&&t!=="onComplete"&&t!=="fn"}),n.set("animations",{colors:{type:"color",properties:Su},numbers:{type:"number",properties:Tu}}),n.describe("animations",{_fallback:"animation"}),n.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>t|0}}}})}function Au(n){n.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}const Qs=new Map;function Lu(n,t){t=t||{};const e=n+JSON.stringify(t);let i=Qs.get(e);return i||(i=new Intl.NumberFormat(n,t),Qs.set(e,i)),i}function _n(n,t,e){return Lu(t,e).format(n)}const Hr={values(n){return K(n)?n:""+n},numeric(n,t,e){if(n===0)return"0";const i=this.chart.options.locale;let s,o=n;if(e.length>1){const c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(s="scientific"),o=Ru(n,e)}const r=ie(Math.abs(o)),a=isNaN(r)?1:Math.max(Math.min(-1*Math.floor(r),20),0),l={notation:s,minimumFractionDigits:a,maximumFractionDigits:a};return Object.assign(l,this.options.ticks.format),_n(n,i,l)},logarithmic(n,t,e){if(n===0)return"0";const i=e[t].significand||n/Math.pow(10,Math.floor(ie(n)));return[1,2,3,5,10,15].includes(i)||t>.8*e.length?Hr.numeric.call(this,n,t,e):""}};function Ru(n,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&n!==Math.floor(n)&&(e=n-Math.floor(n)),e}var fi={formatters:Hr};function Fu(n){n.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:fi.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),n.route("scale.ticks","color","","color"),n.route("scale.grid","color","","borderColor"),n.route("scale.border","color","","borderColor"),n.route("scale.title","color","","color"),n.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&t!=="callback"&&t!=="parser",_indexable:t=>t!=="borderDash"&&t!=="tickBorderDash"&&t!=="dash"}),n.describe("scales",{_fallback:"scale"}),n.describe("scale.ticks",{_scriptable:t=>t!=="backdropPadding"&&t!=="callback",_indexable:t=>t!=="backdropPadding"})}const Me=Object.create(null),Ki=Object.create(null);function rn(n,t){if(!t)return n;const e=t.split(".");for(let i=0,s=e.length;ii.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(i,s)=>on(s.backgroundColor),this.hoverBorderColor=(i,s)=>on(s.borderColor),this.hoverColor=(i,s)=>on(s.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ki(this,t,e)}get(t){return rn(this,t)}describe(t,e){return ki(Ki,t,e)}override(t,e){return ki(Me,t,e)}route(t,e,i,s){const o=rn(this,t),r=rn(this,i),a="_"+e;Object.defineProperties(o,{[a]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){const l=this[a],c=r[s];return F(l)?Object.assign({},c,l):S(l,c)},set(l){this[a]=l}}})}apply(t){t.forEach(e=>e(this))}}var nt=new Iu({_scriptable:n=>!n.startsWith("on"),_indexable:n=>n!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[Ou,Au,Fu]);function Eu(n){return!n||H(n.size)||H(n.family)?null:(n.style?n.style+" ":"")+(n.weight?n.weight+" ":"")+n.size+"px "+n.family}function ei(n,t,e,i,s){let o=t[s];return o||(o=t[s]=n.measureText(s).width,e.push(s)),o>i&&(i=o),i}function zu(n,t,e,i){i=i||{};let s=i.data=i.data||{},o=i.garbageCollect=i.garbageCollect||[];i.font!==t&&(s=i.data={},o=i.garbageCollect=[],i.font=t),n.save(),n.font=t;let r=0;const a=e.length;let l,c,u,h,d;for(l=0;le.length){for(l=0;l0&&n.stroke()}}function qt(n,t,e){return e=e||.5,!t||n&&n.x>t.left-e&&n.xt.top-e&&n.y0&&o.strokeColor!=="";let l,c;for(n.save(),n.font=s.string,Wu(n,o),l=0;l+n||0;function ys(n,t){const e={},i=F(t),s=i?Object.keys(t):t,o=F(n)?i?r=>S(n[r],n[t[r]]):r=>n[r]:()=>n;for(const r of s)e[r]=$u(o(r));return e}function Yr(n){return ys(n,{top:"y",right:"x",bottom:"y",left:"x"})}function ve(n){return ys(n,["topLeft","topRight","bottomLeft","bottomRight"])}function yt(n){const t=Yr(n);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function ut(n,t){n=n||{},t=t||nt.font;let e=S(n.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let i=S(n.style,t.style);i&&!(""+i).match(ju)&&(console.warn('Invalid font style specified: "'+i+'"'),i=void 0);const s={family:S(n.family,t.family),lineHeight:Uu(S(n.lineHeight,t.lineHeight),e),size:e,style:i,weight:S(n.weight,t.weight),string:""};return s.string=Eu(s),s}function Tn(n,t,e,i){let s=!0,o,r,a;for(o=0,r=n.length;oe&&a===0?0:a+l;return{min:r(i,-Math.abs(o)),max:r(s,o)}}function he(n,t){return Object.assign(Object.create(n),t)}function _s(n,t=[""],e,i,s=()=>n[0]){const o=e||n;typeof i>"u"&&(i=qr("_fallback",n));const r={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:n,_rootScopes:o,_fallback:i,_getTarget:s,override:a=>_s([a,...n],t,o,i)};return new Proxy(r,{deleteProperty(a,l){return delete a[l],delete a._keys,delete n[0][l],!0},get(a,l){return Ur(a,l,()=>eh(l,t,n,a))},getOwnPropertyDescriptor(a,l){return Reflect.getOwnPropertyDescriptor(a._scopes[0],l)},getPrototypeOf(){return Reflect.getPrototypeOf(n[0])},has(a,l){return to(a).includes(l)},ownKeys(a){return to(a)},set(a,l,c){const u=a._storage||(a._storage=s());return a[l]=u[l]=c,delete a._keys,!0}})}function Ee(n,t,e,i){const s={_cacheable:!1,_proxy:n,_context:t,_subProxy:e,_stack:new Set,_descriptors:jr(n,i),setContext:o=>Ee(n,o,e,i),override:o=>Ee(n.override(o),t,e,i)};return new Proxy(s,{deleteProperty(o,r){return delete o[r],delete n[r],!0},get(o,r,a){return Ur(o,r,()=>Ku(o,r,a))},getOwnPropertyDescriptor(o,r){return o._descriptors.allKeys?Reflect.has(n,r)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(n,r)},getPrototypeOf(){return Reflect.getPrototypeOf(n)},has(o,r){return Reflect.has(n,r)},ownKeys(){return Reflect.ownKeys(n)},set(o,r,a){return n[r]=a,delete o[r],!0}})}function jr(n,t={scriptable:!0,indexable:!0}){const{_scriptable:e=t.scriptable,_indexable:i=t.indexable,_allKeys:s=t.allKeys}=n;return{allKeys:s,scriptable:e,indexable:i,isScriptable:ue(e)?e:()=>e,isIndexable:ue(i)?i:()=>i}}const Xu=(n,t)=>n?n+gs(t):t,xs=(n,t)=>F(t)&&n!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function Ur(n,t,e){if(Object.prototype.hasOwnProperty.call(n,t))return n[t];const i=e();return n[t]=i,i}function Ku(n,t,e){const{_proxy:i,_context:s,_subProxy:o,_descriptors:r}=n;let a=i[t];return ue(a)&&r.isScriptable(t)&&(a=Gu(t,a,n,e)),K(a)&&a.length&&(a=Qu(t,a,n,r.isIndexable)),xs(t,a)&&(a=Ee(a,s,o&&o[t],r)),a}function Gu(n,t,e,i){const{_proxy:s,_context:o,_subProxy:r,_stack:a}=e;if(a.has(n))throw new Error("Recursion detected: "+Array.from(a).join("->")+"->"+n);a.add(n);let l=t(o,r||i);return a.delete(n),xs(n,l)&&(l=vs(s._scopes,s,n,l)),l}function Qu(n,t,e,i){const{_proxy:s,_context:o,_subProxy:r,_descriptors:a}=e;if(typeof o.index<"u"&&i(n))return t[o.index%t.length];if(F(t[0])){const l=t,c=s._scopes.filter(u=>u!==l);t=[];for(const u of l){const h=vs(c,s,n,u);t.push(Ee(h,o,r&&r[n],a))}}return t}function $r(n,t,e){return ue(n)?n(t,e):n}const Zu=(n,t)=>n===!0?t:typeof n=="string"?ce(t,n):void 0;function Ju(n,t,e,i,s){for(const o of t){const r=Zu(e,o);if(r){n.add(r);const a=$r(r._fallback,e,s);if(typeof a<"u"&&a!==e&&a!==i)return a}else if(r===!1&&typeof i<"u"&&e!==i)return null}return!1}function vs(n,t,e,i){const s=t._rootScopes,o=$r(t._fallback,e,i),r=[...n,...s],a=new Set;a.add(i);let l=Js(a,r,e,o||e,i);return l===null||typeof o<"u"&&o!==e&&(l=Js(a,r,o,l,i),l===null)?!1:_s(Array.from(a),[""],s,o,()=>th(t,e,i))}function Js(n,t,e,i,s){for(;e;)e=Ju(n,t,e,i,s);return e}function th(n,t,e){const i=n._getTarget();t in i||(i[t]={});const s=i[t];return K(s)&&F(e)?e:s||{}}function eh(n,t,e,i){let s;for(const o of t)if(s=qr(Xu(o,n),e),typeof s<"u")return xs(n,s)?vs(e,i,n,s):s}function qr(n,t){for(const e of t){if(!e)continue;const i=e[n];if(typeof i<"u")return i}}function to(n){let t=n._keys;return t||(t=n._keys=nh(n._scopes)),t}function nh(n){const t=new Set;for(const e of n)for(const i of Object.keys(e).filter(s=>!s.startsWith("_")))t.add(i);return Array.from(t)}function ih(n,t,e,i){const{iScale:s}=n,{key:o="r"}=this._parsing,r=new Array(i);let a,l,c,u;for(a=0,l=i;atn==="x"?"y":"x";function oh(n,t,e,i){const s=n.skip?t:n,o=t,r=e.skip?t:e,a=Xi(o,s),l=Xi(r,o);let c=a/(a+l),u=l/(a+l);c=isNaN(c)?0:c,u=isNaN(u)?0:u;const h=i*c,d=i*u;return{previous:{x:o.x-h*(r.x-s.x),y:o.y-h*(r.y-s.y)},next:{x:o.x+d*(r.x-s.x),y:o.y+d*(r.y-s.y)}}}function rh(n,t,e){const i=n.length;let s,o,r,a,l,c=ze(n,0);for(let u=0;u!c.skip)),t.cubicInterpolationMode==="monotone")lh(n,s);else{let c=i?n[n.length-1]:n[0];for(o=0,r=n.length;on.ownerDocument.defaultView.getComputedStyle(n,null);function hh(n,t){return mi(n).getPropertyValue(t)}const dh=["top","right","bottom","left"];function we(n,t,e){const i={};e=e?"-"+e:"";for(let s=0;s<4;s++){const o=dh[s];i[o]=parseFloat(n[t+"-"+o+e])||0}return i.width=i.left+i.right,i.height=i.top+i.bottom,i}const fh=(n,t,e)=>(n>0||t>0)&&(!e||!e.shadowRoot);function gh(n,t){const e=n.touches,i=e&&e.length?e[0]:n,{offsetX:s,offsetY:o}=i;let r=!1,a,l;if(fh(s,o,n.target))a=s,l=o;else{const c=t.getBoundingClientRect();a=i.clientX-c.left,l=i.clientY-c.top,r=!0}return{x:a,y:l,box:r}}function be(n,t){if("native"in n)return n;const{canvas:e,currentDevicePixelRatio:i}=t,s=mi(e),o=s.boxSizing==="border-box",r=we(s,"padding"),a=we(s,"border","width"),{x:l,y:c,box:u}=gh(n,e),h=r.left+(u&&a.left),d=r.top+(u&&a.top);let{width:f,height:g}=t;return o&&(f-=r.width+a.width,g-=r.height+a.height),{x:Math.round((l-h)/f*e.width/i),y:Math.round((c-d)/g*e.height/i)}}function ph(n,t,e){let i,s;if(t===void 0||e===void 0){const o=ws(n);if(!o)t=n.clientWidth,e=n.clientHeight;else{const r=o.getBoundingClientRect(),a=mi(o),l=we(a,"border","width"),c=we(a,"padding");t=r.width-c.width-l.width,e=r.height-c.height-l.height,i=ni(a.maxWidth,o,"clientWidth"),s=ni(a.maxHeight,o,"clientHeight")}}return{width:t,height:e,maxWidth:i||ti,maxHeight:s||ti}}const On=n=>Math.round(n*10)/10;function mh(n,t,e,i){const s=mi(n),o=we(s,"margin"),r=ni(s.maxWidth,n,"clientWidth")||ti,a=ni(s.maxHeight,n,"clientHeight")||ti,l=ph(n,t,e);let{width:c,height:u}=l;if(s.boxSizing==="content-box"){const d=we(s,"border","width"),f=we(s,"padding");c-=f.width+d.width,u-=f.height+d.height}return c=Math.max(0,c-o.width),u=Math.max(0,i?c/i:u-o.height),c=On(Math.min(c,r,l.maxWidth)),u=On(Math.min(u,a,l.maxHeight)),c&&!u&&(u=On(c/2)),(t!==void 0||e!==void 0)&&i&&l.height&&u>l.height&&(u=l.height,c=On(Math.floor(u*i))),{width:c,height:u}}function eo(n,t,e){const i=t||1,s=Math.floor(n.height*i),o=Math.floor(n.width*i);n.height=Math.floor(n.height),n.width=Math.floor(n.width);const r=n.canvas;return r.style&&(e||!r.style.height&&!r.style.width)&&(r.style.height=`${n.height}px`,r.style.width=`${n.width}px`),n.currentDevicePixelRatio!==i||r.height!==s||r.width!==o?(n.currentDevicePixelRatio=i,r.height=s,r.width=o,n.ctx.setTransform(i,0,0,i,0,0),!0):!1}const bh=function(){let n=!1;try{const t={get passive(){return n=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch{}return n}();function no(n,t){const e=hh(n,t),i=e&&e.match(/^(\d+)(\.\d+)?px$/);return i?+i[1]:void 0}function ye(n,t,e,i){return{x:n.x+e*(t.x-n.x),y:n.y+e*(t.y-n.y)}}function yh(n,t,e,i){return{x:n.x+e*(t.x-n.x),y:i==="middle"?e<.5?n.y:t.y:i==="after"?e<1?n.y:t.y:e>0?t.y:n.y}}function _h(n,t,e,i){const s={x:n.cp2x,y:n.cp2y},o={x:t.cp1x,y:t.cp1y},r=ye(n,s,e),a=ye(s,o,e),l=ye(o,t,e),c=ye(r,a,e),u=ye(a,l,e);return ye(c,u,e)}const xh=function(n,t){return{x(e){return n+n+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,i){return e-i},leftForLtr(e,i){return e-i}}},vh=function(){return{x(n){return n},setWidth(n){},textAlign(n){return n},xPlus(n,t){return n+t},leftForLtr(n,t){return n}}};function Fe(n,t,e){return n?xh(t,e):vh()}function Gr(n,t){let e,i;(t==="ltr"||t==="rtl")&&(e=n.canvas.style,i=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),n.prevTextDirection=i)}function Qr(n,t){t!==void 0&&(delete n.prevTextDirection,n.canvas.style.setProperty("direction",t[0],t[1]))}function Zr(n){return n==="angle"?{between:hn,compare:_u,normalize:Dt}:{between:$t,compare:(t,e)=>t-e,normalize:t=>t}}function io({start:n,end:t,count:e,loop:i,style:s}){return{start:n%e,end:t%e,loop:i&&(t-n+1)%e===0,style:s}}function wh(n,t,e){const{property:i,start:s,end:o}=e,{between:r,normalize:a}=Zr(i),l=t.length;let{start:c,end:u,loop:h}=n,d,f;if(h){for(c+=l,u+=l,d=0,f=l;dl(s,x,b)&&a(s,x)!==0,_=()=>a(o,b)===0||l(o,x,b),w=()=>p||v(),C=()=>!p||_();for(let M=u,T=u;M<=h;++M)y=t[M%r],!y.skip&&(b=c(y[i]),b!==x&&(p=l(b,s,o),m===null&&w()&&(m=a(b,s)===0?M:T),m!==null&&C()&&(g.push(io({start:m,end:M,loop:d,count:r,style:f})),m=null),T=M,x=b));return m!==null&&g.push(io({start:m,end:h,loop:d,count:r,style:f})),g}function ta(n,t){const e=[],i=n.segments;for(let s=0;ss&&n[o%t].skip;)o--;return o%=t,{start:s,end:o}}function kh(n,t,e,i){const s=n.length,o=[];let r=t,a=n[t],l;for(l=t+1;l<=e;++l){const c=n[l%s];c.skip||c.stop?a.skip||(i=!1,o.push({start:t%s,end:(l-1)%s,loop:i}),t=r=c.stop?l:null):(r=l,a.skip&&(t=l)),a=c}return r!==null&&o.push({start:t%s,end:r%s,loop:i}),o}function Ch(n,t){const e=n.points,i=n.options.spanGaps,s=e.length;if(!s)return[];const o=!!n._loop,{start:r,end:a}=Mh(e,s,o,i);if(i===!0)return so(n,[{start:r,end:a,loop:o}],e,t);const l=aa({chart:t,initial:e.initial,numSteps:r,currentStep:Math.min(i-e.start,r)}))}_refresh(){this._request||(this._running=!0,this._request=Br.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((i,s)=>{if(!i.running||!i.items.length)return;const o=i.items;let r=o.length-1,a=!1,l;for(;r>=0;--r)l=o[r],l._active?(l._total>i.duration&&(i.duration=l._total),l.tick(t),a=!0):(o[r]=o[o.length-1],o.pop());a&&(s.draw(),this._notify(s,i,t,"progress")),o.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((i,s)=>Math.max(i,s._duration),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var Yt=new Th;const ro="transparent",Sh={boolean(n,t,e){return e>.5?t:n},color(n,t,e){const i=Ae(n||ro),s=i.valid&&Ae(t||ro);return s&&s.valid?s.mix(i,e).hexString():t},number(n,t,e){return n+(t-n)*e}};class Oh{constructor(t,e,i,s){const o=e[i];s=Tn([t.to,s,o,t.from]);const r=Tn([t.from,o,s]);this._active=!0,this._fn=t.fn||Sh[t.type||typeof r],this._easing=sn[t.easing]||sn.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=r,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],o=i-this._start,r=this._duration-o;this._start=i,this._duration=Math.floor(Math.max(r,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=Tn([t.to,e,s,t.from]),this._from=Tn([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,o=this._from,r=this._loop,a=this._to;let l;if(this._active=o!==a&&(r||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[s]=this._fn(o,a,l)}wait(){const t=this._promises||(this._promises=[]);return new Promise((e,i)=>{t.push({res:e,rej:i})})}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let s=0;s{const o=t[s];if(!F(o))return;const r={};for(const a of e)r[a]=o[a];(K(o.properties)&&o.properties||[s]).forEach(a=>{(a===s||!i.has(a))&&i.set(a,r)})})}_animateOptions(t,e){const i=e.options,s=Lh(t,i);if(!s)return[];const o=this._createAnimations(s,i);return i.$shared&&Ah(t.options.$animations,i).then(()=>{t.options=i},()=>{}),o}_createAnimations(t,e){const i=this._properties,s=[],o=t.$animations||(t.$animations={}),r=Object.keys(e),a=Date.now();let l;for(l=r.length-1;l>=0;--l){const c=r[l];if(c.charAt(0)==="$")continue;if(c==="options"){s.push(...this._animateOptions(t,e));continue}const u=e[c];let h=o[c];const d=i.get(c);if(h)if(d&&h.active()){h.update(d,u,a);continue}else h.cancel();if(!d||!d.duration){t[c]=u;continue}o[c]=h=new Oh(d,t,c,u),s.push(h)}return s}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}const i=this._createAnimations(t,e);if(i.length)return Yt.add(this._chart,i),!0}}function Ah(n,t){const e=[],i=Object.keys(t);for(let s=0;s0||!e&&o<0)return s.index}return null}function ho(n,t){const{chart:e,_cachedMeta:i}=n,s=e._stacks||(e._stacks={}),{iScale:o,vScale:r,index:a}=i,l=o.axis,c=r.axis,u=Eh(o,r,i),h=t.length;let d;for(let f=0;fe[i].axis===t).shift()}function Nh(n,t){return he(n,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Wh(n,t,e){return he(n,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function Ne(n,t){const e=n.controller.index,i=n.vScale&&n.vScale.axis;if(i){t=t||n._parsed;for(const s of t){const o=s._stacks;if(!o||o[i]===void 0||o[i][e]===void 0)return;delete o[i][e],o[i]._visualValues!==void 0&&o[i]._visualValues[e]!==void 0&&delete o[i]._visualValues[e]}}}const Pi=n=>n==="reset"||n==="none",fo=(n,t)=>t?n:Object.assign({},n),Hh=(n,t,e)=>n&&!t.hidden&&t._stacked&&{keys:na(e,!0),values:null};class Xt{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=co(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Ne(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(h,d,f,g)=>h==="x"?d:h==="r"?g:f,o=e.xAxisID=S(i.xAxisID,Ci(t,"x")),r=e.yAxisID=S(i.yAxisID,Ci(t,"y")),a=e.rAxisID=S(i.rAxisID,Ci(t,"r")),l=e.indexAxis,c=e.iAxisID=s(l,o,r,a),u=e.vAxisID=s(l,r,o,a);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(r),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(u)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&Xs(this._data,this),t._stacked&&Ne(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(F(e))this._data=Ih(e);else if(i!==e){if(i){Xs(i,this);const s=this._cachedMeta;Ne(s),s._parsed=[]}e&&Object.isExtensible(e)&&Mu(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const o=e._stacked;e._stacked=co(e.vScale,e),e.stack!==i.stack&&(s=!0,Ne(e),e.stack=i.stack),this._resyncElements(t),(s||o!==e._stacked)&&ho(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:o,_stacked:r}=i,a=o.axis;let l=t===0&&e===s.length?!0:i._sorted,c=t>0&&i._parsed[t-1],u,h,d;if(this._parsing===!1)i._parsed=s,i._sorted=!0,d=s;else{K(s[t])?d=this.parseArrayData(i,s,t,e):F(s[t])?d=this.parseObjectData(i,s,t,e):d=this.parsePrimitiveData(i,s,t,e);const f=()=>h[a]===null||c&&h[a]p||h=0;--d)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,o,r;for(s=0,o=e.length;s=0&&tthis.getContext(i,s,e),p=c.resolveNamedOptions(d,f,g,h);return p.$shared&&(p.$shared=l,o[r]=Object.freeze(fo(p,l))),p}_resolveAnimations(t,e,i){const s=this.chart,o=this._cachedDataOpts,r=`animation-${e}`,a=o[r];if(a)return a;let l;if(s.options.animation!==!1){const u=this.chart.config,h=u.datasetAnimationScopeKeys(this._type,e),d=u.getOptionScopes(this.getDataset(),h);l=u.createResolver(d,this.getContext(t,i,e))}const c=new ea(s,l&&l.animations);return l&&l._cacheable&&(o[r]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Pi(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,o=this.getSharedOptions(i),r=this.includeOptions(e,o)||o!==s;return this.updateSharedOptions(o,e,i),{sharedOptions:o,includeOptions:r}}updateElement(t,e,i,s){Pi(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Pi(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const o=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[a,l,c]of this._syncList)this[a](l,c);this._syncList=[];const s=i.length,o=e.length,r=Math.min(o,s);r&&this.parse(0,r),o>s?this._insertElements(s,o-s,t):o{for(c.length+=e,a=c.length-1;a>=r;a--)c[a]=c[a-e]};for(l(o),a=t;as-o))}return n._cache.$bar}function Yh(n){const t=n.iScale,e=Vh(t,n.type);let i=t._length,s,o,r,a;const l=()=>{r===32767||r===-32768||(cn(a)&&(i=Math.min(i,Math.abs(r-a)||i)),a=r)};for(s=0,o=e.length;s0?s[n-1]:null,a=nMath.abs(a)&&(l=a,c=r),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:s,end:o,min:r,max:a}}function ia(n,t,e,i){return K(n)?$h(n,t,e,i):t[e.axis]=e.parse(n,i),t}function go(n,t,e,i){const s=n.iScale,o=n.vScale,r=s.getLabels(),a=s===o,l=[];let c,u,h,d;for(c=e,u=e+i;c=e?1:-1)}function Xh(n){let t,e,i,s,o;return n.horizontal?(t=n.base>n.x,e="left",i="right"):(t=n.basel.controller.options.grouped),o=i.options.stacked,r=[],a=l=>{const c=l.controller.getParsed(e),u=c&&c[l.vScale.axis];if(H(u)||isNaN(u))return!0};for(const l of s)if(!(e!==void 0&&a(l))&&((o===!1||r.indexOf(l.stack)===-1||o===void 0&&l.stack===void 0)&&r.push(l.stack),l.index===t))break;return r.length||r.push(void 0),r}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),o=e!==void 0?s.indexOf(e):-1;return o===-1?s.length-1:o}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let o,r;for(o=0,r=e.data.length;ohn(x,a,l,!0)?1:Math.max(v,v*e,_,_*e),g=(x,v,_)=>hn(x,a,l,!0)?-1:Math.min(v,v*e,_,_*e),p=f(0,c,h),m=f(at,u,d),b=g(tt,c,h),y=g(tt+at,u,d);i=(p-b)/2,s=(m-y)/2,o=-(p+b)/2,r=-(m+y)/2}return{ratioX:i,ratioY:s,offsetX:o,offsetY:r}}class Le extends Xt{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(this._parsing===!1)s._parsed=i;else{let o=l=>+i[l];if(F(i[t])){const{key:l="value"}=this._parsing;o=c=>+ce(i[c],l)}let r,a;for(r=t,a=t+e;r0&&!isNaN(t)?G*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],o=_n(e._parsed[t],i.options.locale);return{label:s[t]||"",value:o}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,o,r,a,l;if(!t){for(s=0,o=i.data.datasets.length;st!=="spacing",_indexable:t=>t!=="spacing"&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")}),k(Le,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map((o,r)=>{const l=t.getDatasetMeta(0).controller.getStyle(r);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:s,lineWidth:l.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(r),index:r}})}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}});class jn extends Xt{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:o}=e,r=this.chart._animationsDisabled;let{start:a,count:l}=Pu(e,s,r);this._drawStart=a,this._drawCount=l,Du(e)&&(a=0,l=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!o._decimated,i.points=s;const c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(i,void 0,{animated:!r,options:c},t),this.updateElements(s,a,l,t)}updateElements(t,e,i,s){const o=s==="reset",{iScale:r,vScale:a,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:u,includeOptions:h}=this._getSharedOptions(e,s),d=r.axis,f=a.axis,{spanGaps:g,segment:p}=this.options,m=un(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||s==="none",y=e+i,x=t.length;let v=e>0&&this.getParsed(e-1);for(let _=0;_=y){C.skip=!0;continue}const M=this.getParsed(_),T=H(M[f]),A=C[d]=r.getPixelForValue(M[d],_),O=C[f]=o||T?a.getBasePixel():a.getPixelForValue(l?this.applyStack(a,M,l):M[f],_);C.skip=isNaN(A)||isNaN(O)||T,C.stop=_>0&&Math.abs(M[d]-v[d])>m,p&&(C.parsed=M,C.raw=c.data[_]),h&&(C.options=u||this.resolveDataElementOptions(_,w.active?"active":s)),b||this.updateElement(w,_,C,s),v=M}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const o=s[0].size(this.resolveDataElementOptions(0)),r=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,o,r)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}k(jn,"id","line"),k(jn,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),k(jn,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});class Un extends Xt{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],o=_n(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:o}}parseObjectData(t,e,i,s){return ih.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((i,s)=>{const o=this.getParsed(s).r;!isNaN(o)&&this.chart.getDataVisibility(s)&&(oe.max&&(e.max=o))}),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(s/2,0),r=Math.max(i.cutoutPercentage?o/100*i.cutoutPercentage:1,0),a=(o-r)/t.getVisibleDatasetCount();this.outerRadius=o-a*this.index,this.innerRadius=this.outerRadius-a}updateElements(t,e,i,s){const o=s==="reset",r=this.chart,l=r.options.animation,c=this._cachedMeta.rScale,u=c.xCenter,h=c.yCenter,d=c.getIndexAngle(0)-.5*tt;let f=d,g;const p=360/this.countVisibleElements();for(g=0;g{!isNaN(this.getParsed(s).r)&&this.chart.getDataVisibility(s)&&e++}),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?At(this.resolveDataElementOptions(t,e).angle||i):0}}k(Un,"id","polarArea"),k(Un,"defaults",{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0}),k(Un,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map((o,r)=>{const l=t.getDatasetMeta(0).controller.getStyle(r);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:s,lineWidth:l.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(r),index:r}})}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});class Qi extends Le{}k(Qi,"id","pie"),k(Qi,"defaults",{cutout:0,rotation:0,circumference:360,radius:"100%"});function ge(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Ms{constructor(t){k(this,"options");this.options=t||{}}static override(t){Object.assign(Ms.prototype,t)}init(){}formats(){return ge()}parse(){return ge()}format(){return ge()}add(){return ge()}diff(){return ge()}startOf(){return ge()}endOf(){return ge()}}var sa={_date:Ms};function Jh(n,t,e,i){const{controller:s,data:o,_sorted:r}=n,a=s._cachedMeta.iScale;if(a&&t===a.axis&&t!=="r"&&r&&o.length){const l=a._reversePixels?vu:xe;if(i){if(s._sharedOptions){const c=o[0],u=typeof c.getRange=="function"&&c.getRange(t);if(u){const h=l(o,t,e-u),d=l(o,t,e+u);return{lo:h.lo,hi:d.hi}}}}else return l(o,t,e)}return{lo:0,hi:o.length-1}}function xn(n,t,e,i,s){const o=n.getSortedVisibleDatasetMetas(),r=e[t];for(let a=0,l=o.length;a{l[r](t[e],s)&&(o.push({element:l,datasetIndex:c,index:u}),a=a||l.inRange(t.x,t.y,s))}),i&&!a?[]:o}var id={evaluateInteractionItems:xn,modes:{index(n,t,e,i){const s=be(t,n),o=e.axis||"x",r=e.includeInvisible||!1,a=e.intersect?Ti(n,s,o,i,r):Si(n,s,o,!1,i,r),l=[];return a.length?(n.getSortedVisibleDatasetMetas().forEach(c=>{const u=a[0].index,h=c.data[u];h&&!h.skip&&l.push({element:h,datasetIndex:c.index,index:u})}),l):[]},dataset(n,t,e,i){const s=be(t,n),o=e.axis||"xy",r=e.includeInvisible||!1;let a=e.intersect?Ti(n,s,o,i,r):Si(n,s,o,!1,i,r);if(a.length>0){const l=a[0].datasetIndex,c=n.getDatasetMeta(l).data;a=[];for(let u=0;ue.pos===t)}function yo(n,t){return n.filter(e=>oa.indexOf(e.pos)===-1&&e.box.axis===t)}function He(n,t){return n.sort((e,i)=>{const s=t?i:e,o=t?e:i;return s.weight===o.weight?s.index-o.index:s.weight-o.weight})}function sd(n){const t=[];let e,i,s,o,r,a;for(e=0,i=(n||[]).length;ec.box.fullSize),!0),i=He(We(t,"left"),!0),s=He(We(t,"right")),o=He(We(t,"top"),!0),r=He(We(t,"bottom")),a=yo(t,"x"),l=yo(t,"y");return{fullSize:e,leftAndTop:i.concat(o),rightAndBottom:s.concat(l).concat(r).concat(a),chartArea:We(t,"chartArea"),vertical:i.concat(s).concat(l),horizontal:o.concat(r).concat(a)}}function _o(n,t,e,i){return Math.max(n[e],t[e])+Math.max(n[i],t[i])}function ra(n,t){n.top=Math.max(n.top,t.top),n.left=Math.max(n.left,t.left),n.bottom=Math.max(n.bottom,t.bottom),n.right=Math.max(n.right,t.right)}function ld(n,t,e,i){const{pos:s,box:o}=e,r=n.maxPadding;if(!F(s)){e.size&&(n[s]-=e.size);const h=i[e.stack]||{size:0,count:1};h.size=Math.max(h.size,e.horizontal?o.height:o.width),e.size=h.size/h.count,n[s]+=e.size}o.getPadding&&ra(r,o.getPadding());const a=Math.max(0,t.outerWidth-_o(r,n,"left","right")),l=Math.max(0,t.outerHeight-_o(r,n,"top","bottom")),c=a!==n.w,u=l!==n.h;return n.w=a,n.h=l,e.horizontal?{same:c,other:u}:{same:u,other:c}}function cd(n){const t=n.maxPadding;function e(i){const s=Math.max(t[i]-n[i],0);return n[i]+=s,s}n.y+=e("top"),n.x+=e("left"),e("right"),e("bottom")}function ud(n,t){const e=t.maxPadding;function i(s){const o={left:0,top:0,right:0,bottom:0};return s.forEach(r=>{o[r]=Math.max(t[r],e[r])}),o}return i(n?["left","right"]:["top","bottom"])}function Qe(n,t,e,i){const s=[];let o,r,a,l,c,u;for(o=0,r=n.length,c=0;o{typeof p.beforeLayout=="function"&&p.beforeLayout()});const u=l.reduce((p,m)=>m.box.options&&m.box.options.display===!1?p:p+1,0)||1,h=Object.freeze({outerWidth:t,outerHeight:e,padding:s,availableWidth:o,availableHeight:r,vBoxMaxWidth:o/2/u,hBoxMaxHeight:r/2}),d=Object.assign({},s);ra(d,yt(i));const f=Object.assign({maxPadding:d,w:o,h:r,x:s.left,y:s.top},s),g=rd(l.concat(c),h);Qe(a.fullSize,f,h,g),Qe(l,f,h,g),Qe(c,f,h,g)&&Qe(l,f,h,g),cd(f),xo(a.leftAndTop,f,h,g),f.x+=f.w,f.y+=f.h,xo(a.rightAndBottom,f,h,g),n.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},$(a.chartArea,p=>{const m=p.box;Object.assign(m,n.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}};class aa{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class hd extends aa{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const $n="$chartjs",dd={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},vo=n=>n===null||n==="";function fd(n,t){const e=n.style,i=n.getAttribute("height"),s=n.getAttribute("width");if(n[$n]={initial:{height:i,width:s,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",vo(s)){const o=no(n,"width");o!==void 0&&(n.width=o)}if(vo(i))if(n.style.height==="")n.height=n.width/(t||2);else{const o=no(n,"height");o!==void 0&&(n.height=o)}return n}const la=bh?{passive:!0}:!1;function gd(n,t,e){n.addEventListener(t,e,la)}function pd(n,t,e){n.canvas.removeEventListener(t,e,la)}function md(n,t){const e=dd[n.type]||n.type,{x:i,y:s}=be(n,t);return{type:e,chart:t,native:n,x:i!==void 0?i:null,y:s!==void 0?s:null}}function ii(n,t){for(const e of n)if(e===t||e.contains(t))return!0}function bd(n,t,e){const i=n.canvas,s=new MutationObserver(o=>{let r=!1;for(const a of o)r=r||ii(a.addedNodes,i),r=r&&!ii(a.removedNodes,i);r&&e()});return s.observe(document,{childList:!0,subtree:!0}),s}function yd(n,t,e){const i=n.canvas,s=new MutationObserver(o=>{let r=!1;for(const a of o)r=r||ii(a.removedNodes,i),r=r&&!ii(a.addedNodes,i);r&&e()});return s.observe(document,{childList:!0,subtree:!0}),s}const fn=new Map;let wo=0;function ca(){const n=window.devicePixelRatio;n!==wo&&(wo=n,fn.forEach((t,e)=>{e.currentDevicePixelRatio!==n&&t()}))}function _d(n,t){fn.size||window.addEventListener("resize",ca),fn.set(n,t)}function xd(n){fn.delete(n),fn.size||window.removeEventListener("resize",ca)}function vd(n,t,e){const i=n.canvas,s=i&&ws(i);if(!s)return;const o=Nr((a,l)=>{const c=s.clientWidth;e(a,l),c{const l=a[0],c=l.contentRect.width,u=l.contentRect.height;c===0&&u===0||o(c,u)});return r.observe(s),_d(n,o),r}function Oi(n,t,e){e&&e.disconnect(),t==="resize"&&xd(n)}function wd(n,t,e){const i=n.canvas,s=Nr(o=>{n.ctx!==null&&e(md(o,n))},n);return gd(i,t,s),s}class Md extends aa{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(fd(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[$n])return!1;const i=e[$n].initial;["height","width"].forEach(o=>{const r=i[o];H(r)?e.removeAttribute(o):e.setAttribute(o,r)});const s=i.style||{};return Object.keys(s).forEach(o=>{e.style[o]=s[o]}),e.width=e.width,delete e[$n],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),r={attach:bd,detach:yd,resize:vd}[e]||wd;s[e]=r(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:Oi,detach:Oi,resize:Oi}[e]||pd)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return mh(t,e,i,s)}isAttached(t){const e=ws(t);return!!(e&&e.isConnected)}}function kd(n){return!Kr()||typeof OffscreenCanvas<"u"&&n instanceof OffscreenCanvas?hd:Md}class Lt{constructor(){k(this,"x");k(this,"y");k(this,"active",!1);k(this,"options");k(this,"$animations")}tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return un(this.x)&&un(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach(o=>{s[o]=i[o]&&i[o].active()?i[o]._to:this[o]}),s}}k(Lt,"defaults",{}),k(Lt,"defaultRoutes");function Cd(n,t){const e=n.options.ticks,i=Pd(n),s=Math.min(e.maxTicksLimit||i,i),o=e.major.enabled?Td(t):[],r=o.length,a=o[0],l=o[r-1],c=[];if(r>s)return Sd(t,c,o,r/s),c;const u=Dd(o,t,s);if(r>0){let h,d;const f=r>1?Math.round((l-a)/(r-1)):null;for(Ln(t,c,u,H(f)?0:a-f,a),h=0,d=r-1;hs)return l}return Math.max(s,1)}function Td(n){const t=[];let e,i;for(e=0,i=n.length;en==="left"?"right":n==="right"?"left":n,Mo=(n,t,e)=>t==="top"||t==="left"?n[t]+e:n[t]-e,ko=(n,t)=>Math.min(t||n,n);function Co(n,t){const e=[],i=n.length/t,s=n.length;let o=0;for(;or+a)))return l}function Rd(n,t){$(n,e=>{const i=e.gc,s=i.length/2;let o;if(s>t){for(o=0;oi?i:e,i=s&&e>i?e:i,{min:Pt(e,Pt(i,e)),max:Pt(i,Pt(e,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){X(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:o,ticks:r}=this.options,a=r.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=qu(this,o,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=a=o||i<=1||!this.isHorizontal()){this.labelRotation=s;return}const u=this._getLabelSizes(),h=u.widest.width,d=u.highest.height,f=ft(this.chart.width-h,0,this.maxWidth);a=t.offset?this.maxWidth/i:f/(i-1),h+6>a&&(a=f/(i-(t.offset?.5:1)),l=this.maxHeight-Ve(t.grid)-e.padding-Po(t.title,this.chart.options.font),c=Math.sqrt(h*h+d*d),r=ps(Math.min(Math.asin(ft((u.highest.height+6)/a,-1,1)),Math.asin(ft(l/c,-1,1))-Math.asin(ft(d/c,-1,1)))),r=Math.max(s,Math.min(o,r))),this.labelRotation=r}afterCalculateLabelRotation(){X(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){X(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:o}}=this,r=this._isVisible(),a=this.isHorizontal();if(r){const l=Po(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ve(o)+l):(t.height=this.maxHeight,t.width=Ve(o)+l),i.display&&this.ticks.length){const{first:c,last:u,widest:h,highest:d}=this._getLabelSizes(),f=i.padding*2,g=At(this.labelRotation),p=Math.cos(g),m=Math.sin(g);if(a){const b=i.mirror?0:m*h.width+p*d.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{const b=i.mirror?0:p*h.width+m*d.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,u,m,p)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:o,padding:r},position:a}=this.options,l=this.labelRotation!==0,c=a!=="top"&&this.axis==="x";if(this.isHorizontal()){const u=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let d=0,f=0;l?c?(d=s*t.width,f=i*e.height):(d=i*t.height,f=s*e.width):o==="start"?f=e.width:o==="end"?d=t.width:o!=="inner"&&(d=t.width/2,f=e.width/2),this.paddingLeft=Math.max((d-u+r)*this.width/(this.width-u),0),this.paddingRight=Math.max((f-h+r)*this.width/(this.width-h),0)}else{let u=e.height/2,h=t.height/2;o==="start"?(u=0,h=t.height):o==="end"&&(u=e.height,h=0),this.paddingTop=u+r,this.paddingBottom=h+r}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){X(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,i;for(e=0,i=t.length;e({width:r[T]||0,height:a[T]||0});return{first:M(0),last:M(e-1),widest:M(w),highest:M(C),widths:r,heights:a}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return xu(this._alignToPixels?fe(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:l/s:l*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:o,position:r,border:a}=s,l=o.offset,c=this.isHorizontal(),h=this.ticks.length+(l?1:0),d=Ve(o),f=[],g=a.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(U){return fe(i,U,p)};let y,x,v,_,w,C,M,T,A,O,R,st;if(r==="top")y=b(this.bottom),C=this.bottom-d,T=y-m,O=b(t.top)+m,st=t.bottom;else if(r==="bottom")y=b(this.top),O=t.top,st=b(t.bottom)-m,C=y+m,T=this.top+d;else if(r==="left")y=b(this.right),w=this.right-d,M=y-m,A=b(t.left)+m,R=t.right;else if(r==="right")y=b(this.left),A=t.left,R=b(t.right)-m,w=y+m,M=this.left+d;else if(e==="x"){if(r==="center")y=b((t.top+t.bottom)/2+.5);else if(F(r)){const U=Object.keys(r)[0],Q=r[U];y=b(this.chart.scales[U].getPixelForValue(Q))}O=t.top,st=t.bottom,C=y+m,T=C+d}else if(e==="y"){if(r==="center")y=b((t.left+t.right)/2);else if(F(r)){const U=Object.keys(r)[0],Q=r[U];y=b(this.chart.scales[U].getPixelForValue(Q))}w=y-m,M=w-d,A=t.left,R=t.right}const gt=S(s.ticks.maxTicksLimit,h),W=Math.max(1,Math.ceil(h/gt));for(x=0;xo.value===t);return s>=0?e.setContext(this.getContext(s)).lineWidth:0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let o,r;const a=(l,c,u)=>{!u.width||!u.color||(i.save(),i.lineWidth=u.width,i.strokeStyle=u.color,i.setLineDash(u.borderDash||[]),i.lineDashOffset=u.borderDashOffset,i.beginPath(),i.moveTo(l.x,l.y),i.lineTo(c.x,c.y),i.stroke(),i.restore())};if(e.display)for(o=0,r=s.length;o{this.draw(o)}}]:[{z:i,draw:o=>{this.drawBackground(),this.drawGrid(o),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:o=>{this.drawLabels(o)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let o,r;for(o=0,r=e.length;o{const i=e.split("."),s=i.pop(),o=[n].concat(i).join("."),r=t[e].split("."),a=r.pop(),l=r.join(".");nt.route(o,s,l,a)})}function Wd(n){return"id"in n&&"defaults"in n}class Hd{constructor(){this.controllers=new Rn(Xt,"datasets",!0),this.elements=new Rn(Lt,"elements"),this.plugins=new Rn(Object,"plugins"),this.scales=new Rn(ke,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach(s=>{const o=i||this._getRegistryForType(s);i||o.isForType(s)||o===this.plugins&&s.id?this._exec(t,o,s):$(s,r=>{const a=i||this._getRegistryForType(r);this._exec(t,a,r)})})}_exec(t,e,i){const s=gs(t);X(i["before"+s],[],i),e[t](i),X(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;eo.filter(a=>!r.some(l=>a.plugin.id===l.plugin.id));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Yd(n){const t={},e=[],i=Object.keys(It.plugins.items);for(let o=0;o1&&Do(n[0].toLowerCase());if(i)return i}throw new Error(`Cannot determine type of '${n}' axis. Please provide 'axis' or 'position' option.`)}function To(n,t,e){if(e[t+"AxisID"]===n)return{axis:t}}function Gd(n,t){if(t.data&&t.data.datasets){const e=t.data.datasets.filter(i=>i.xAxisID===n||i.yAxisID===n);if(e.length)return To(n,"x",e[0])||To(n,"y",e[0])}return{}}function Qd(n,t){const e=Me[n.type]||{scales:{}},i=t.scales||{},s=Zi(n.type,t),o=Object.create(null);return Object.keys(i).forEach(r=>{const a=i[r];if(!F(a))return console.error(`Invalid scale configuration for scale: ${r}`);if(a._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${r}`);const l=Ji(r,a,Gd(r,n),nt.scales[a.type]),c=Xd(l,s),u=e.scales||{};o[r]=en(Object.create(null),[{axis:l},a,u[l],u[c]])}),n.data.datasets.forEach(r=>{const a=r.type||n.type,l=r.indexAxis||Zi(a,t),u=(Me[a]||{}).scales||{};Object.keys(u).forEach(h=>{const d=qd(h,l),f=r[d+"AxisID"]||d;o[f]=o[f]||Object.create(null),en(o[f],[{axis:d},i[f],u[h]])})}),Object.keys(o).forEach(r=>{const a=o[r];en(a,[nt.scales[a.type],nt.scale])}),o}function ua(n){const t=n.options||(n.options={});t.plugins=S(t.plugins,{}),t.scales=Qd(n,t)}function ha(n){return n=n||{},n.datasets=n.datasets||[],n.labels=n.labels||[],n}function Zd(n){return n=n||{},n.data=ha(n.data),ua(n),n}const So=new Map,da=new Set;function Fn(n,t){let e=So.get(n);return e||(e=t(),So.set(n,e),da.add(e)),e}const Ye=(n,t,e)=>{const i=ce(t,e);i!==void 0&&n.add(i)};class Jd{constructor(t){this._config=Zd(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=ha(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),ua(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Fn(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return Fn(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return Fn(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){const e=t.id,i=this.type;return Fn(`${i}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return(!s||e)&&(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:o}=this,r=this._cachedScopes(t,i),a=r.get(e);if(a)return a;const l=new Set;e.forEach(u=>{t&&(l.add(t),u.forEach(h=>Ye(l,t,h))),u.forEach(h=>Ye(l,s,h)),u.forEach(h=>Ye(l,Me[o]||{},h)),u.forEach(h=>Ye(l,nt,h)),u.forEach(h=>Ye(l,Ki,h))});const c=Array.from(l);return c.length===0&&c.push(Object.create(null)),da.has(e)&&r.set(e,c),c}chartOptionScopes(){const{options:t,type:e}=this;return[t,Me[e]||{},nt.datasets[e]||{},{type:e},nt,Ki]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:r,subPrefixes:a}=Oo(this._resolverCache,t,s);let l=r;if(ef(r,e)){o.$shared=!1,i=ue(i)?i():i;const c=this.createResolver(t,i,a);l=Ee(r,i,c)}for(const c of e)o[c]=l[c];return o}createResolver(t,e,i=[""],s){const{resolver:o}=Oo(this._resolverCache,t,i);return F(e)?Ee(o,e,void 0,s):o}}function Oo(n,t,e){let i=n.get(t);i||(i=new Map,n.set(t,i));const s=e.join();let o=i.get(s);return o||(o={resolver:_s(t,e),subPrefixes:e.filter(a=>!a.toLowerCase().includes("hover"))},i.set(s,o)),o}const tf=n=>F(n)&&Object.getOwnPropertyNames(n).reduce((t,e)=>t||ue(n[e]),!1);function ef(n,t){const{isScriptable:e,isIndexable:i}=jr(n);for(const s of t){const o=e(s),r=i(s),a=(r||o)&&n[s];if(o&&(ue(a)||tf(a))||r&&K(a))return!0}return!1}var nf="4.4.0";const sf=["top","bottom","left","right","chartArea"];function Ao(n,t){return n==="top"||n==="bottom"||sf.indexOf(n)===-1&&t==="x"}function Lo(n,t){return function(e,i){return e[n]===i[n]?e[t]-i[t]:e[n]-i[n]}}function Ro(n){const t=n.chart,e=t.options.animation;t.notifyPlugins("afterRender"),X(e&&e.onComplete,[n],t)}function of(n){const t=n.chart,e=t.options.animation;X(e&&e.onProgress,[n],t)}function fa(n){return Kr()&&typeof n=="string"?n=document.getElementById(n):n&&n.length&&(n=n[0]),n&&n.canvas&&(n=n.canvas),n}const qn={},Fo=n=>{const t=fa(n);return Object.values(qn).filter(e=>e.canvas===t).pop()};function rf(n,t,e){const i=Object.keys(n);for(const s of i){const o=+s;if(o>=t){const r=n[s];delete n[s],(e>0||o>t)&&(n[o+e]=r)}}}function af(n,t,e,i){return!e||n.type==="mouseout"?null:i?t:n}function In(n,t,e){return n.options.clip?n[e]:t[e]}function lf(n,t){const{xScale:e,yScale:i}=n;return e&&i?{left:In(e,t,"left"),right:In(e,t,"right"),top:In(i,t,"top"),bottom:In(i,t,"bottom")}:t}class mt{static register(...t){It.add(...t),Io()}static unregister(...t){It.remove(...t),Io()}constructor(t,e){const i=this.config=new Jd(e),s=fa(t),o=Fo(s);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const r=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||kd(s)),this.platform.updateConfig(i);const a=this.platform.acquireContext(s,r.aspectRatio),l=a&&a.canvas,c=l&&l.height,u=l&&l.width;if(this.id=lu(),this.ctx=a,this.canvas=l,this.width=u,this.height=c,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Vd,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=ku(h=>this.update(h),r.resizeDelay||0),this._dataChanges=[],qn[this.id]=this,!a||!l){console.error("Failed to create chart: can't acquire context from the given item");return}Yt.listen(this,"complete",Ro),Yt.listen(this,"progress",of),this._initialize(),this.attached&&this.update()}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:o}=this;return H(t)?e&&o?o:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return It}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():eo(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Zs(this.canvas,this.ctx),this}stop(){return Yt.stop(this),this}resize(t,e){Yt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,o=i.maintainAspectRatio&&this.aspectRatio,r=this.platform.getMaximumSize(s,t,e,o),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=r.width,this.height=r.height,this._aspectRatio=this.aspectRatio,eo(this,a,!0)&&(this.notifyPlugins("resize",{size:r}),X(i.onResize,[this,r],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const e=this.options.scales||{};$(e,(i,s)=>{i.id=s})}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce((r,a)=>(r[a]=!1,r),{});let o=[];e&&(o=o.concat(Object.keys(e).map(r=>{const a=e[r],l=Ji(r,a),c=l==="r",u=l==="x";return{options:a,dposition:c?"chartArea":u?"bottom":"left",dtype:c?"radialLinear":u?"category":"linear"}}))),$(o,r=>{const a=r.options,l=a.id,c=Ji(l,a),u=S(a.type,r.dtype);(a.position===void 0||Ao(a.position,c)!==Ao(r.dposition))&&(a.position=r.dposition),s[l]=!0;let h=null;if(l in i&&i[l].type===u)h=i[l];else{const d=It.getScale(u);h=new d({id:l,type:u,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(a,t)}),$(s,(r,a)=>{r||delete i[a]}),$(i,r=>{se.configure(this,r,r.options),se.addBox(this,r)})}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort((s,o)=>s.index-o.index),i>e){for(let s=e;se.length&&delete this._stacks,t.forEach((i,s)=>{e.filter(o=>o===i._dataset).length===0&&this._destroyDatasetMeta(s)})}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;const o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let r=0;for(let c=0,u=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Lo("z","_idx"));const{_active:a,_lastEvent:l}=this;l?this._eventHandler(l,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){$(this.scales,t=>{se.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);(!js(e,i)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:o}of e){const r=i==="_removeElements"?-o:o;rf(t,s,r)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=o=>new Set(t.filter(r=>r[0]===o).map((r,a)=>a+","+r.splice(1).join(","))),s=i(0);for(let o=1;oo.split(",")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;se.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],$(this.boxes,s=>{i&&s.position==="chartArea"||(s.configure&&s.configure(),this._layers.push(...s._layers()))},this),this._layers.forEach((s,o)=>{s._idx=o}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,i=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,o=lf(t,this.chartArea),r={meta:t,index:t.index,cancelable:!0};this.notifyPlugins("beforeDatasetDraw",r)!==!1&&(s&&gi(e,{left:i.left===!1?0:o.left-i.left,right:i.right===!1?this.width:o.right+i.right,top:i.top===!1?0:o.top-i.top,bottom:i.bottom===!1?this.height:o.bottom+i.bottom}),t.controller.draw(),s&&pi(e),r.cancelable=!1,this.notifyPlugins("afterDatasetDraw",r))}isPointInArea(t){return qt(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const o=id.modes[e];return typeof o=="function"?o(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter(o=>o&&o._dataset===e).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=he(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return typeof i.hidden=="boolean"?!i.hidden:!e.hidden}setDatasetVisibility(t,e){const i=this.getDatasetMeta(t);i.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",o=this.getDatasetMeta(t),r=o.controller._resolveAnimations(void 0,s);cn(e)?(o.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),r.update(o,{visible:i}),this.update(a=>a.datasetIndex===t?s:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),Yt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,o,r),t[o]=r},s=(o,r,a)=>{o.offsetX=r,o.offsetY=a,this._eventHandler(o)};$(this.options.events,o=>i(o,s))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},s=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)};let r;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",o),i("detach",r)};r=()=>{this.attached=!1,s("resize",o),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():r()}unbindEvents(){$(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},$(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let o,r,a,l;for(e==="dataset"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller["_"+s+"DatasetHoverStyle"]()),a=0,l=t.length;a{const a=this.getDatasetMeta(o);if(!a)throw new Error("No dataset found at index "+o);return{datasetIndex:o,element:a.data[r],index:r}});!Zn(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return this._plugins._cache.filter(e=>e.plugin.id===t).length===1}_updateHoverStyles(t,e,i){const s=this.options.hover,o=(l,c)=>l.filter(u=>!c.some(h=>u.datasetIndex===h.datasetIndex&&u.index===h.index)),r=o(e,t),a=i?t:o(t,e);r.length&&this.updateHoverStyle(r,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=r=>(r.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",i,s)===!1)return;const o=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(o||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:o}=this,r=e,a=this._getActiveElements(t,s,i,r),l=gu(t),c=af(t,this._lastEvent,i,l);i&&(this._lastEvent=null,X(o.onHover,[t,a,this],this),l&&X(o.onClick,[t,a,this],this));const u=!Zn(a,s);return(u||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=c,u}_getActiveElements(t,e,i,s){if(t.type==="mouseout")return[];if(!i)return e;const o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,s)}}k(mt,"defaults",nt),k(mt,"instances",qn),k(mt,"overrides",Me),k(mt,"registry",It),k(mt,"version",nf),k(mt,"getChart",Fo);function Io(){return $(mt.instances,n=>n._plugins.invalidate())}function cf(n,t,e){const{startAngle:i,pixelMargin:s,x:o,y:r,outerRadius:a,innerRadius:l}=t;let c=s/a;n.beginPath(),n.arc(o,r,a,i-c,e+c),l>s?(c=s/l,n.arc(o,r,l,e+c,i-c,!0)):n.arc(o,r,s,e+at,i-at),n.closePath(),n.clip()}function uf(n){return ys(n,["outerStart","outerEnd","innerStart","innerEnd"])}function hf(n,t,e,i){const s=uf(n.options.borderRadius),o=(e-t)/2,r=Math.min(o,i*t/2),a=l=>{const c=(e-Math.min(o,l))*i/2;return ft(l,0,Math.min(o,c))};return{outerStart:a(s.outerStart),outerEnd:a(s.outerEnd),innerStart:ft(s.innerStart,0,r),innerEnd:ft(s.innerEnd,0,r)}}function Pe(n,t,e,i){return{x:e+n*Math.cos(t),y:i+n*Math.sin(t)}}function si(n,t,e,i,s,o){const{x:r,y:a,startAngle:l,pixelMargin:c,innerRadius:u}=t,h=Math.max(t.outerRadius+i+e-c,0),d=u>0?u+i+e+c:0;let f=0;const g=s-l;if(i){const W=u>0?u-i:0,U=h>0?h-i:0,Q=(W+U)/2,Mt=Q!==0?g*Q/(Q+i):g;f=(g-Mt)/2}const p=Math.max(.001,g*h-e/tt)/h,m=(g-p)/2,b=l+m+f,y=s-m-f,{outerStart:x,outerEnd:v,innerStart:_,innerEnd:w}=hf(t,d,h,y-b),C=h-x,M=h-v,T=b+x/C,A=y-v/M,O=d+_,R=d+w,st=b+_/O,gt=y-w/R;if(n.beginPath(),o){const W=(T+A)/2;if(n.arc(r,a,h,T,W),n.arc(r,a,h,W,A),v>0){const lt=Pe(M,A,r,a);n.arc(lt.x,lt.y,v,A,y+at)}const U=Pe(R,y,r,a);if(n.lineTo(U.x,U.y),w>0){const lt=Pe(R,gt,r,a);n.arc(lt.x,lt.y,w,y+at,gt+Math.PI)}const Q=(y-w/d+(b+_/d))/2;if(n.arc(r,a,d,y-w/d,Q,!0),n.arc(r,a,d,Q,b+_/d,!0),_>0){const lt=Pe(O,st,r,a);n.arc(lt.x,lt.y,_,st+Math.PI,b-at)}const Mt=Pe(C,b,r,a);if(n.lineTo(Mt.x,Mt.y),x>0){const lt=Pe(C,T,r,a);n.arc(lt.x,lt.y,x,b-at,T)}}else{n.moveTo(r,a);const W=Math.cos(T)*h+r,U=Math.sin(T)*h+a;n.lineTo(W,U);const Q=Math.cos(A)*h+r,Mt=Math.sin(A)*h+a;n.lineTo(Q,Mt)}n.closePath()}function df(n,t,e,i,s){const{fullCircles:o,startAngle:r,circumference:a}=t;let l=t.endAngle;if(o){si(n,t,e,i,l,s);for(let c=0;c=G||hn(r,l,c),m=$t(a,u+f,h+f);return p&&m}getCenterPoint(e){const{x:i,y:s,startAngle:o,endAngle:r,innerRadius:a,outerRadius:l}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],e),{offset:c,spacing:u}=this.options,h=(o+r)/2,d=(a+l+u+c)/2;return{x:i+Math.cos(h)*d,y:s+Math.sin(h)*d}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){const{options:i,circumference:s}=this,o=(i.offset||0)/4,r=(i.spacing||0)/2,a=i.circular;if(this.pixelMargin=i.borderAlign==="inner"?.33:0,this.fullCircles=s>G?Math.floor(s/G):0,s===0||this.innerRadius<0||this.outerRadius<0)return;e.save();const l=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(l)*o,Math.sin(l)*o);const c=1-Math.sin(Math.min(tt,s||0)),u=o*c;e.fillStyle=i.backgroundColor,e.strokeStyle=i.borderColor,df(e,this,u,r,a),ff(e,this,u,r,a),e.restore()}}k(Ze,"id","arc"),k(Ze,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0}),k(Ze,"defaultRoutes",{backgroundColor:"backgroundColor"}),k(Ze,"descriptors",{_scriptable:!0,_indexable:e=>e!=="borderDash"});function ga(n,t,e=t){n.lineCap=S(e.borderCapStyle,t.borderCapStyle),n.setLineDash(S(e.borderDash,t.borderDash)),n.lineDashOffset=S(e.borderDashOffset,t.borderDashOffset),n.lineJoin=S(e.borderJoinStyle,t.borderJoinStyle),n.lineWidth=S(e.borderWidth,t.borderWidth),n.strokeStyle=S(e.borderColor,t.borderColor)}function gf(n,t,e){n.lineTo(e.x,e.y)}function pf(n){return n.stepped?Bu:n.tension||n.cubicInterpolationMode==="monotone"?Nu:gf}function pa(n,t,e={}){const i=n.length,{start:s=0,end:o=i-1}=e,{start:r,end:a}=t,l=Math.max(s,r),c=Math.min(o,a),u=sa&&o>a;return{count:i,start:l,loop:t.loop,ilen:c(r+(c?a-v:v))%o,x=()=>{p!==m&&(n.lineTo(u,m),n.lineTo(u,p),n.lineTo(u,b))};for(l&&(f=s[y(0)],n.moveTo(f.x,f.y)),d=0;d<=a;++d){if(f=s[y(d)],f.skip)continue;const v=f.x,_=f.y,w=v|0;w===g?(_m&&(m=_),u=(h*u+v)/++h):(x(),n.lineTo(v,_),g=w,h=0,p=m=_),b=_}x()}function ts(n){const t=n.options,e=t.borderDash&&t.borderDash.length;return!n._decimated&&!n._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?bf:mf}function yf(n){return n.stepped?yh:n.tension||n.cubicInterpolationMode==="monotone"?_h:ye}function _f(n,t,e,i){let s=t._path;s||(s=t._path=new Path2D,t.path(s,e,i)&&s.closePath()),ga(n,t.options),n.stroke(s)}function xf(n,t,e,i){const{segments:s,options:o}=t,r=ts(t);for(const a of s)ga(n,o,a.style),n.beginPath(),r(n,t,a,{start:e,end:e+i-1})&&n.closePath(),n.stroke()}const vf=typeof Path2D=="function";function wf(n,t,e,i){vf&&!t.options.segment?_f(n,t,e,i):xf(n,t,e,i)}class oe extends Lt{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||i.cubicInterpolationMode==="monotone")&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;uh(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Ch(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],o=this.points,r=ta(this,{property:e,start:s,end:s});if(!r.length)return;const a=[],l=yf(i);let c,u;for(c=0,u=r.length;ct!=="borderDash"&&t!=="fill"});function Eo(n,t,e,i){const s=n.options,{[e]:o}=n.getProps([e],i);return Math.abs(t-o)n.replace("rgb(","rgba(").replace(")",", 0.5)"));function ba(n){return es[n%es.length]}function ya(n){return zo[n%zo.length]}function Tf(n,t){return n.borderColor=ba(t),n.backgroundColor=ya(t),++t}function Sf(n,t){return n.backgroundColor=n.data.map(()=>ba(t++)),t}function Of(n,t){return n.backgroundColor=n.data.map(()=>ya(t++)),t}function Af(n){let t=0;return(e,i)=>{const s=n.getDatasetMeta(i).controller;s instanceof Le?t=Sf(e,t):s instanceof Un?t=Of(e,t):s&&(t=Tf(e,t))}}function Bo(n){let t;for(t in n)if(n[t].borderColor||n[t].backgroundColor)return!0;return!1}function Lf(n){return n&&(n.borderColor||n.backgroundColor)}var Rf={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(n,t,e){if(!e.enabled)return;const{data:{datasets:i},options:s}=n.config,{elements:o}=s;if(!e.forceOverride&&(Bo(i)||Lf(s)||o&&Bo(o)))return;const r=Af(n);i.forEach(r)}};function Ff(n,t,e){const i=n.segments,s=n.points,o=t.points,r=[];for(const a of i){let{start:l,end:c}=a;c=ks(l,c,s);const u=ns(e,s[l],s[c],a.loop);if(!t.segments){r.push({source:a,target:u,start:s[l],end:s[c]});continue}const h=ta(t,u);for(const d of h){const f=ns(e,o[d.start],o[d.end],d.loop),g=Jr(a,s,f);for(const p of g)r.push({source:p,target:d,start:{[e]:No(u,f,"start",Math.max)},end:{[e]:No(u,f,"end",Math.min)}})}}return r}function ns(n,t,e,i){if(i)return;let s=t[n],o=e[n];return n==="angle"&&(s=Dt(s),o=Dt(o)),{property:n,start:s,end:o}}function If(n,t){const{x:e=null,y:i=null}=n||{},s=t.points,o=[];return t.segments.forEach(({start:r,end:a})=>{a=ks(r,a,s);const l=s[r],c=s[a];i!==null?(o.push({x:l.x,y:i}),o.push({x:c.x,y:i})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function ks(n,t,e){for(;t>n;t--){const i=e[t];if(!isNaN(i.x)&&!isNaN(i.y))break}return t}function No(n,t,e,i){return n&&t?i(n[e],t[e]):n?n[e]:t?t[e]:0}function _a(n,t){let e=[],i=!1;return K(n)?(i=!0,e=n):e=If(n,t),e.length?new oe({points:e,options:{tension:0},_loop:i,_fullLoop:i}):null}function Wo(n){return n&&n.fill!==!1}function Ef(n,t,e){let s=n[t].fill;const o=[t];let r;if(!e)return s;for(;s!==!1&&o.indexOf(s)===-1;){if(!et(s))return s;if(r=n[s],!r)return!1;if(r.visible)return s;o.push(s),s=r.fill}return!1}function zf(n,t,e){const i=Hf(n);if(F(i))return isNaN(i.value)?!1:i;let s=parseFloat(i);return et(s)&&Math.floor(s)===s?Bf(i[0],t,s,e):["origin","start","end","stack","shape"].indexOf(i)>=0&&i}function Bf(n,t,e,i){return(n==="-"||n==="+")&&(e=t+e),e===t||e<0||e>=i?!1:e}function Nf(n,t){let e=null;return n==="start"?e=t.bottom:n==="end"?e=t.top:F(n)?e=t.getPixelForValue(n.value):t.getBasePixel&&(e=t.getBasePixel()),e}function Wf(n,t,e){let i;return n==="start"?i=e:n==="end"?i=t.options.reverse?t.min:t.max:F(n)?i=n.value:i=t.getBaseValue(),i}function Hf(n){const t=n.options,e=t.fill;let i=S(e&&e.target,e);return i===void 0&&(i=!!t.backgroundColor),i===!1||i===null?!1:i===!0?"origin":i}function Vf(n){const{scale:t,index:e,line:i}=n,s=[],o=i.segments,r=i.points,a=Yf(t,e);a.push(_a({x:null,y:t.bottom},i));for(let l=0;l=0;--r){const a=s[r].$filler;a&&(a.line.updateControlPoints(o,a.axis),i&&a.fill&&Ri(n.ctx,a,o))}},beforeDatasetsDraw(n,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;const i=n.getSortedVisibleDatasetMetas();for(let s=i.length-1;s>=0;--s){const o=i[s].$filler;Wo(o)&&Ri(n.ctx,o,n.chartArea)}},beforeDatasetDraw(n,t,e){const i=t.meta.$filler;!Wo(i)||e.drawTime!=="beforeDatasetDraw"||Ri(n.ctx,i,n.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const jo=(n,t)=>{let{boxHeight:e=t,boxWidth:i=t}=n;return n.usePointStyle&&(e=Math.min(e,t),i=n.pointStyleWidth||Math.min(i,t)),{boxWidth:i,boxHeight:e,itemHeight:Math.max(t,e)}},tg=(n,t)=>n!==null&&t!==null&&n.datasetIndex===t.datasetIndex&&n.index===t.index;class Uo extends Lt{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=X(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(i=>t.filter(i,this.chart.data))),t.sort&&(e=e.sort((i,s)=>t.sort(i,s,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}const i=t.labels,s=ut(i.font),o=s.size,r=this._computeTitleHeight(),{boxWidth:a,itemHeight:l}=jo(i,o);let c,u;e.font=s.string,this.isHorizontal()?(c=this.maxWidth,u=this._fitRows(r,o,a,l)+10):(u=this.maxHeight,c=this._fitCols(r,s,a,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(u,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:o,maxWidth:r,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],u=s+a;let h=t;o.textAlign="left",o.textBaseline="middle";let d=-1,f=-u;return this.legendItems.forEach((g,p)=>{const m=i+e/2+o.measureText(g.text).width;(p===0||c[c.length-1]+m+2*a>r)&&(h+=u,c[c.length-(p>0?0:1)]=0,f+=u,d++),l[p]={left:0,top:f,row:d,width:m,height:s},c[c.length-1]+=m+a}),h}_fitCols(t,e,i,s){const{ctx:o,maxHeight:r,options:{labels:{padding:a}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],u=r-t;let h=a,d=0,f=0,g=0,p=0;return this.legendItems.forEach((m,b)=>{const{itemWidth:y,itemHeight:x}=eg(i,e,o,m,s);b>0&&f+x+2*a>u&&(h+=d+a,c.push({width:d,height:f}),g+=d+a,p++,d=f=0),l[b]={left:g,top:f,col:p,width:y,height:x},d=Math.max(d,y),f+=x+a}),h+=d,c.push({width:d,height:f}),h}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:o}}=this,r=Fe(o,this.left,this.width);if(this.isHorizontal()){let a=0,l=kt(i,this.left+s,this.right-this.lineWidths[a]);for(const c of e)a!==c.row&&(a=c.row,l=kt(i,this.left+s,this.right-this.lineWidths[a])),c.top+=this.top+t+s,c.left=r.leftForLtr(r.x(l),c.width),l+=c.width+s}else{let a=0,l=kt(i,this.top+t+s,this.bottom-this.columnSizes[a].height);for(const c of e)c.col!==a&&(a=c.col,l=kt(i,this.top+t+s,this.bottom-this.columnSizes[a].height)),c.top=l,c.left+=this.left+s,c.left=r.leftForLtr(r.x(c.left),c.width),l+=c.height+s}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){const t=this.ctx;gi(t,this),this._draw(),pi(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:o,labels:r}=t,a=nt.color,l=Fe(t.rtl,this.left,this.width),c=ut(r.font),{padding:u}=r,h=c.size,d=h/2;let f;this.drawTitle(),s.textAlign=l.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=c.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=jo(r,h),b=function(w,C,M){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const T=S(M.lineWidth,1);if(s.fillStyle=S(M.fillStyle,a),s.lineCap=S(M.lineCap,"butt"),s.lineDashOffset=S(M.lineDashOffset,0),s.lineJoin=S(M.lineJoin,"miter"),s.lineWidth=T,s.strokeStyle=S(M.strokeStyle,a),s.setLineDash(S(M.lineDash,[])),r.usePointStyle){const A={radius:p*Math.SQRT2/2,pointStyle:M.pointStyle,rotation:M.rotation,borderWidth:T},O=l.xPlus(w,g/2),R=C+d;Vr(s,A,O,R,r.pointStyleWidth&&g)}else{const A=C+Math.max((h-p)/2,0),O=l.leftForLtr(w,g),R=ve(M.borderRadius);s.beginPath(),Object.values(R).some(st=>st!==0)?dn(s,{x:O,y:A,w:g,h:p,radius:R}):s.rect(O,A,g,p),s.fill(),T!==0&&s.stroke()}s.restore()},y=function(w,C,M){Ie(s,M.text,w,C+m/2,c,{strikethrough:M.hidden,textAlign:l.textAlign(M.textAlign)})},x=this.isHorizontal(),v=this._computeTitleHeight();x?f={x:kt(o,this.left+u,this.right-i[0]),y:this.top+u+v,line:0}:f={x:this.left+u,y:kt(o,this.top+v+u,this.bottom-e[0].height),line:0},Gr(this.ctx,t.textDirection);const _=m+u;this.legendItems.forEach((w,C)=>{s.strokeStyle=w.fontColor,s.fillStyle=w.fontColor;const M=s.measureText(w.text).width,T=l.textAlign(w.textAlign||(w.textAlign=r.textAlign)),A=g+d+M;let O=f.x,R=f.y;l.setWidth(this.width),x?C>0&&O+A+u>this.right&&(R=f.y+=_,f.line++,O=f.x=kt(o,this.left+u,this.right-i[f.line])):C>0&&R+_>this.bottom&&(O=f.x=O+e[f.line].width+u,f.line++,R=f.y=kt(o,this.top+v+u,this.bottom-e[f.line].height));const st=l.x(O);if(b(st,R,w),O=Cu(T,O+g+d,x?O+A:this.right,t.rtl),y(l.x(O),R,w),x)f.x+=A+u;else if(typeof w.text!="string"){const gt=c.lineHeight;f.y+=va(w,gt)+u}else f.y+=_}),Qr(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=ut(e.font),s=yt(e.padding);if(!e.display)return;const o=Fe(t.rtl,this.left,this.width),r=this.ctx,a=e.position,l=i.size/2,c=s.top+l;let u,h=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),u=this.top+c,h=kt(t.align,h,this.right-d);else{const g=this.columnSizes.reduce((p,m)=>Math.max(p,m.height),0);u=c+kt(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}const f=kt(a,h,h+d);r.textAlign=o.textAlign(Wr(a)),r.textBaseline="middle",r.strokeStyle=e.color,r.fillStyle=e.color,r.font=i.string,Ie(r,e.text,f,u,i)}_computeTitleHeight(){const t=this.options.title,e=ut(t.font),i=yt(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,o;if($t(t,this.left,this.right)&&$t(e,this.top,this.bottom)){for(o=this.legendHitBoxes,i=0;io.length>r.length?o:r)),t+e.size/2+i.measureText(s).width}function ig(n,t,e){let i=n;return typeof t.text!="string"&&(i=va(t,e)),i}function va(n,t){const e=n.text?n.text.length:0;return t*e}function sg(n,t){return!!((n==="mousemove"||n==="mouseout")&&(t.onHover||t.onLeave)||t.onClick&&(n==="click"||n==="mouseup"))}var og={id:"legend",_element:Uo,start(n,t,e){const i=n.legend=new Uo({ctx:n.ctx,options:e,chart:n});se.configure(n,i,e),se.addBox(n,i)},stop(n){se.removeBox(n,n.legend),delete n.legend},beforeUpdate(n,t,e){const i=n.legend;se.configure(n,i,e),i.options=e},afterUpdate(n){const t=n.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(n,t){t.replay||n.legend.handleEvent(t.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(n,t,e){const i=t.datasetIndex,s=e.chart;s.isDatasetVisible(i)?(s.hide(i),t.hidden=!0):(s.show(i),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:n=>n.chart.options.color,boxWidth:40,padding:10,generateLabels(n){const t=n.data.datasets,{labels:{usePointStyle:e,pointStyle:i,textAlign:s,color:o,useBorderRadius:r,borderRadius:a}}=n.legend.options;return n._getSortedDatasetMetas().map(l=>{const c=l.controller.getStyle(e?0:void 0),u=yt(c.borderWidth);return{text:t[l.index].label,fillStyle:c.backgroundColor,fontColor:o,hidden:!l.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(u.width+u.height)/4,strokeStyle:c.borderColor,pointStyle:i||c.pointStyle,rotation:c.rotation,textAlign:s||c.textAlign,borderRadius:r&&(a||c.borderRadius),datasetIndex:l.index}},this)}},title:{color:n=>n.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:n=>!n.startsWith("on"),labels:{_scriptable:n=>!["generateLabels","filter","sort"].includes(n)}}};const Je={average(n){if(!n.length)return!1;let t,e,i=0,s=0,o=0;for(t=0,e=n.length;t-1?n.split(` -`):n}function rg(n,t){const{element:e,datasetIndex:i,index:s}=t,o=n.getDatasetMeta(i).controller,{label:r,value:a}=o.getLabelAndValue(s);return{chart:n,label:r,parsed:o.getParsed(s),raw:n.data.datasets[i].data[s],formattedValue:a,dataset:o.getDataset(),dataIndex:s,datasetIndex:i,element:e}}function $o(n,t){const e=n.chart.ctx,{body:i,footer:s,title:o}=n,{boxWidth:r,boxHeight:a}=t,l=ut(t.bodyFont),c=ut(t.titleFont),u=ut(t.footerFont),h=o.length,d=s.length,f=i.length,g=yt(t.padding);let p=g.height,m=0,b=i.reduce((v,_)=>v+_.before.length+_.lines.length+_.after.length,0);if(b+=n.beforeBody.length+n.afterBody.length,h&&(p+=h*c.lineHeight+(h-1)*t.titleSpacing+t.titleMarginBottom),b){const v=t.displayColors?Math.max(a,l.lineHeight):l.lineHeight;p+=f*v+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}d&&(p+=t.footerMarginTop+d*u.lineHeight+(d-1)*t.footerSpacing);let y=0;const x=function(v){m=Math.max(m,e.measureText(v).width+y)};return e.save(),e.font=c.string,$(n.title,x),e.font=l.string,$(n.beforeBody.concat(n.afterBody),x),y=t.displayColors?r+2+t.boxPadding:0,$(i,v=>{$(v.before,x),$(v.lines,x),$(v.after,x)}),y=0,e.font=u.string,$(n.footer,x),e.restore(),m+=g.width,{width:m,height:p}}function ag(n,t){const{y:e,height:i}=t;return en.height-i/2?"bottom":"center"}function lg(n,t,e,i){const{x:s,width:o}=i,r=e.caretSize+e.caretPadding;if(n==="left"&&s+o+r>t.width||n==="right"&&s-o-r<0)return!0}function cg(n,t,e,i){const{x:s,width:o}=e,{width:r,chartArea:{left:a,right:l}}=n;let c="center";return i==="center"?c=s<=(a+l)/2?"left":"right":s<=o/2?c="left":s>=r-o/2&&(c="right"),lg(c,n,t,e)&&(c="center"),c}function qo(n,t,e){const i=e.yAlign||t.yAlign||ag(n,e);return{xAlign:e.xAlign||t.xAlign||cg(n,t,e,i),yAlign:i}}function ug(n,t){let{x:e,width:i}=n;return t==="right"?e-=i:t==="center"&&(e-=i/2),e}function hg(n,t,e){let{y:i,height:s}=n;return t==="top"?i+=e:t==="bottom"?i-=s+e:i-=s/2,i}function Xo(n,t,e,i){const{caretSize:s,caretPadding:o,cornerRadius:r}=n,{xAlign:a,yAlign:l}=e,c=s+o,{topLeft:u,topRight:h,bottomLeft:d,bottomRight:f}=ve(r);let g=ug(t,a);const p=hg(t,l,c);return l==="center"?a==="left"?g+=c:a==="right"&&(g-=c):a==="left"?g-=Math.max(u,d)+s:a==="right"&&(g+=Math.max(h,f)+s),{x:ft(g,0,i.width-t.width),y:ft(p,0,i.height-t.height)}}function En(n,t,e){const i=yt(e.padding);return t==="center"?n.x+n.width/2:t==="right"?n.x+n.width-i.right:n.x+i.left}function Ko(n){return Ft([],jt(n))}function dg(n,t,e){return he(n,{tooltip:t,tooltipItems:e,type:"tooltip"})}function Go(n,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?n.override(e):n}const wa={beforeTitle:Wt,title(n){if(n.length>0){const t=n[0],e=t.chart.data.labels,i=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndex"u"?wa[t].call(e,i):s}class is extends Lt{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,o=new ea(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=dg(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:i}=e,s=_t(i,"beforeTitle",this,t),o=_t(i,"title",this,t),r=_t(i,"afterTitle",this,t);let a=[];return a=Ft(a,jt(s)),a=Ft(a,jt(o)),a=Ft(a,jt(r)),a}getBeforeBody(t,e){return Ko(_t(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:i}=e,s=[];return $(t,o=>{const r={before:[],lines:[],after:[]},a=Go(i,o);Ft(r.before,jt(_t(a,"beforeLabel",this,o))),Ft(r.lines,_t(a,"label",this,o)),Ft(r.after,jt(_t(a,"afterLabel",this,o))),s.push(r)}),s}getAfterBody(t,e){return Ko(_t(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=_t(i,"beforeFooter",this,t),o=_t(i,"footer",this,t),r=_t(i,"afterFooter",this,t);let a=[];return a=Ft(a,jt(s)),a=Ft(a,jt(o)),a=Ft(a,jt(r)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],o=[],r=[];let a=[],l,c;for(l=0,c=e.length;lt.filter(u,h,d,i))),t.itemSort&&(a=a.sort((u,h)=>t.itemSort(u,h,i))),$(a,u=>{const h=Go(t.callbacks,u);s.push(_t(h,"labelColor",this,u)),o.push(_t(h,"labelPointStyle",this,u)),r.push(_t(h,"labelTextColor",this,u))}),this.labelColors=s,this.labelPointStyles=o,this.labelTextColors=r,this.dataPoints=a,a}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let o,r=[];if(!s.length)this.opacity!==0&&(o={opacity:0});else{const a=Je[i.position].call(this,s,this._eventPosition);r=this._createItems(i),this.title=this.getTitle(r,i),this.beforeBody=this.getBeforeBody(r,i),this.body=this.getBody(r,i),this.afterBody=this.getAfterBody(r,i),this.footer=this.getFooter(r,i);const l=this._size=$o(this,i),c=Object.assign({},a,l),u=qo(this.chart,i,c),h=Xo(i,c,u,this.chart);this.xAlign=u.xAlign,this.yAlign=u.yAlign,o={opacity:1,x:h.x,y:h.y,width:l.width,height:l.height,caretX:a.x,caretY:a.y}}this._tooltipItems=r,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const o=this.getCaretPosition(t,i,s);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:o}=this,{caretSize:r,cornerRadius:a}=i,{topLeft:l,topRight:c,bottomLeft:u,bottomRight:h}=ve(a),{x:d,y:f}=t,{width:g,height:p}=e;let m,b,y,x,v,_;return o==="center"?(v=f+p/2,s==="left"?(m=d,b=m-r,x=v+r,_=v-r):(m=d+g,b=m+r,x=v-r,_=v+r),y=m):(s==="left"?b=d+Math.max(l,u)+r:s==="right"?b=d+g-Math.max(c,h)-r:b=this.caretX,o==="top"?(x=f,v=x-r,m=b-r,y=b+r):(x=f+p,v=x+r,m=b+r,y=b-r),_=x),{x1:m,x2:b,x3:y,y1:x,y2:v,y3:_}}drawTitle(t,e,i){const s=this.title,o=s.length;let r,a,l;if(o){const c=Fe(i.rtl,this.x,this.width);for(t.x=En(this,i.titleAlign,i),e.textAlign=c.textAlign(i.titleAlign),e.textBaseline="middle",r=ut(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=r.string,l=0;ly!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,dn(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=r.backgroundColor,t.beginPath(),dn(t,{x:m,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=r.backgroundColor,t.fillRect(m,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:o,bodyAlign:r,displayColors:a,boxHeight:l,boxWidth:c,boxPadding:u}=i,h=ut(i.bodyFont);let d=h.lineHeight,f=0;const g=Fe(i.rtl,this.x,this.width),p=function(M){e.fillText(M,g.x(t.x+f),t.y+d/2),t.y+=d+o},m=g.textAlign(r);let b,y,x,v,_,w,C;for(e.textAlign=r,e.textBaseline="middle",e.font=h.string,t.x=En(this,m,i),e.fillStyle=i.bodyColor,$(this.beforeBody,p),f=a&&m!=="right"?r==="center"?c/2+u:c+2+u:0,v=0,w=s.length;v0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,o=i&&i.y;if(s||o){const r=Je[t.position].call(this,this._active,this._eventPosition);if(!r)return;const a=this._size=$o(this,t),l=Object.assign({},r,this._size),c=qo(e,t,l),u=Xo(t,l,c,e);(s._to!==u.x||o._to!==u.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=a.width,this.height=a.height,this.caretX=r.x,this.caretY=r.y,this._resolveAnimations().update(this,u))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},o={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const r=yt(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(o,t,s,e),Gr(t,e.textDirection),o.y+=r.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),Qr(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map(({datasetIndex:a,index:l})=>{const c=this.chart.getDatasetMeta(a);if(!c)throw new Error("Cannot find a dataset at index "+a);return{datasetIndex:a,element:c.data[l],index:l}}),o=!Zn(i,s),r=this._positionChanged(s,e);(o||r)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,o=this._active||[],r=this._getActiveElements(t,o,e,i),a=this._positionChanged(r,t),l=e||!Zn(r,o)||a;return l&&(this._active=r,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,i,s){const o=this.options;if(t.type==="mouseout")return[];if(!s)return e;const r=this.chart.getElementsAtEventForMode(t,o.mode,o,i);return o.reverse&&r.reverse(),r}_positionChanged(t,e){const{caretX:i,caretY:s,options:o}=this,r=Je[o.position].call(this,t,e);return r!==!1&&(i!==r.x||s!==r.y)}}k(is,"positioners",Je);var fg={id:"tooltip",_element:is,positioners:Je,afterInit(n,t,e){e&&(n.tooltip=new is({chart:n,options:e}))},beforeUpdate(n,t,e){n.tooltip&&n.tooltip.initialize(e)},reset(n,t,e){n.tooltip&&n.tooltip.initialize(e)},afterDraw(n){const t=n.tooltip;if(t&&t._willRender()){const e={tooltip:t};if(n.notifyPlugins("beforeTooltipDraw",{...e,cancelable:!0})===!1)return;t.draw(n.ctx),n.notifyPlugins("afterTooltipDraw",e)}},afterEvent(n,t){if(n.tooltip){const e=t.replay;n.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(n,t)=>t.bodyFont.size,boxWidth:(n,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:wa},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:n=>n!=="filter"&&n!=="itemSort"&&n!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};const gg=(n,t,e,i)=>(typeof t=="string"?(e=n.push(t)-1,i.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function pg(n,t,e,i){const s=n.indexOf(t);if(s===-1)return gg(n,t,e,i);const o=n.lastIndexOf(t);return s!==o?e:s}const mg=(n,t)=>n===null?null:ft(Math.round(n),0,t);function Qo(n){const t=this.getLabels();return n>=0&&ne.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}k(ss,"id","category"),k(ss,"defaults",{ticks:{callback:Qo}});function bg(n,t){const e=[],{bounds:s,step:o,min:r,max:a,precision:l,count:c,maxTicks:u,maxDigits:h,includeBounds:d}=n,f=o||1,g=u-1,{min:p,max:m}=t,b=!H(r),y=!H(a),x=!H(c),v=(m-p)/(h+1);let _=$s((m-p)/g/f)*f,w,C,M,T;if(_<1e-14&&!b&&!y)return[{value:p},{value:m}];T=Math.ceil(m/_)-Math.floor(p/_),T>g&&(_=$s(T*_/g/f)*f),H(l)||(w=Math.pow(10,l),_=Math.ceil(_*w)/w),s==="ticks"?(C=Math.floor(p/_)*_,M=Math.ceil(m/_)*_):(C=p,M=m),b&&y&&o&&yu((a-r)/o,_/1e3)?(T=Math.round(Math.min((a-r)/_,u)),_=(a-r)/T,C=r,M=a):x?(C=b?r:C,M=y?a:M,T=c-1,_=(M-C)/T):(T=(M-C)/_,nn(T,Math.round(T),_/1e3)?T=Math.round(T):T=Math.ceil(T));const A=Math.max(qs(_),qs(C));w=Math.pow(10,H(l)?A:l),C=Math.round(C*w)/w,M=Math.round(M*w)/w;let O=0;for(b&&(d&&C!==r?(e.push({value:r}),Ca)break;e.push({value:R})}return y&&d&&M!==a?e.length&&nn(e[e.length-1].value,a,Zo(a,v,n))?e[e.length-1].value=a:e.push({value:a}):(!y||M===a)&&e.push({value:M}),e}function Zo(n,t,{horizontal:e,minRotation:i}){const s=At(i),o=(e?Math.sin(s):Math.cos(s))||.001,r=.75*t*(""+n).length;return Math.min(t/o,r)}class oi extends ke{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return H(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:o}=this;const r=l=>s=e?s:l,a=l=>o=i?o:l;if(t){const l=Bt(s),c=Bt(o);l<0&&c<0?a(0):l>0&&c>0&&r(0)}if(s===o){let l=o===0?1:Math.abs(o*.05);a(o+l),t||r(s-l)}this.min=s,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:e,stepSize:i}=t,s;return i?(s=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,s>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${s} ticks. Limiting to 1000.`),s=1e3)):(s=this.computeTickLimit(),e=e||11),e&&(s=Math.min(e,s)),s}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s={maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,r=bg(s,o);return t.bounds==="ticks"&&Fr(r,this,"value"),t.reverse?(r.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),r}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return _n(t,this.chart.options.locale,this.options.ticks.format)}}class os extends oi{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=et(t)?t:0,this.max=et(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=At(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/s))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}k(os,"id","linear"),k(os,"defaults",{ticks:{callback:fi.formatters.numeric}});const gn=n=>Math.floor(ie(n)),pe=(n,t)=>Math.pow(10,gn(n)+t);function Jo(n){return n/Math.pow(10,gn(n))===1}function tr(n,t,e){const i=Math.pow(10,e),s=Math.floor(n/i);return Math.ceil(t/i)-s}function yg(n,t){const e=t-n;let i=gn(e);for(;tr(n,t,i)>10;)i++;for(;tr(n,t,i)<10;)i--;return Math.min(i,gn(n))}function _g(n,{min:t,max:e}){t=Pt(n.min,t);const i=[],s=gn(t);let o=yg(t,e),r=o<0?Math.pow(10,Math.abs(o)):1;const a=Math.pow(10,o),l=s>o?Math.pow(10,s):0,c=Math.round((t-l)*r)/r,u=Math.floor((t-l)/a/10)*a*10;let h=Math.floor((c-u)/Math.pow(10,o)),d=Pt(n.min,Math.round((l+u+h*Math.pow(10,o))*r)/r);for(;d=10?h=h<15?15:20:h++,h>=20&&(o++,h=2,r=o>=0?1:r),d=Math.round((l+u+h*Math.pow(10,o))*r)/r;const f=Pt(n.max,d);return i.push({value:f,major:Jo(f),significand:h}),i}class er extends ke{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=oi.prototype.parse.apply(this,[t,e]);if(i===0){this._zero=!0;return}return et(i)&&i>0?i:null}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=et(t)?Math.max(0,t):null,this.max=et(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!et(this._userMin)&&(this.min=t===pe(this.min,0)?pe(this.min,-1):pe(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const o=a=>i=t?i:a,r=a=>s=e?s:a;i===s&&(i<=0?(o(1),r(10)):(o(pe(i,-1)),r(pe(s,1)))),i<=0&&o(pe(s,-1)),s<=0&&r(pe(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},i=_g(e,this);return t.bounds==="ticks"&&Fr(i,this,"value"),t.reverse?(i.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),i}getLabelForValue(t){return t===void 0?"0":_n(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=ie(t),this._valueRange=ie(this.max)-ie(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(ie(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}k(er,"id","logarithmic"),k(er,"defaults",{ticks:{callback:fi.formatters.logarithmic,major:{enabled:!0}}});function rs(n){const t=n.ticks;if(t.display&&n.display){const e=yt(t.backdropPadding);return S(t.font&&t.font.size,nt.font.size)+e.height}return 0}function xg(n,t,e){return e=K(e)?e:[e],{w:zu(n,t.string,e),h:e.length*t.lineHeight}}function nr(n,t,e,i,s){return n===i||n===s?{start:t-e/2,end:t+e/2}:ns?{start:t-e,end:t}:{start:t,end:t+e}}function vg(n){const t={l:n.left+n._padding.left,r:n.right-n._padding.right,t:n.top+n._padding.top,b:n.bottom-n._padding.bottom},e=Object.assign({},t),i=[],s=[],o=n._pointLabels.length,r=n.options.pointLabels,a=r.centerPointLabels?tt/o:0;for(let l=0;lt.r&&(a=(i.end-t.r)/o,n.r=Math.max(n.r,t.r+a)),s.startt.b&&(l=(s.end-t.b)/r,n.b=Math.max(n.b,t.b+l))}function Mg(n,t,e){const i=n.drawingArea,{extra:s,additionalAngle:o,padding:r,size:a}=e,l=n.getPointPosition(t,i+s+r,o),c=Math.round(ps(Dt(l.angle+at))),u=Tg(l.y,a.h,c),h=Pg(c),d=Dg(l.x,a.w,h);return{visible:!0,x:l.x,y:u,textAlign:h,left:d,top:u,right:d+a.w,bottom:u+a.h}}function kg(n,t){if(!t)return!0;const{left:e,top:i,right:s,bottom:o}=n;return!(qt({x:e,y:i},t)||qt({x:e,y:o},t)||qt({x:s,y:i},t)||qt({x:s,y:o},t))}function Cg(n,t,e){const i=[],s=n._pointLabels.length,o=n.options,{centerPointLabels:r,display:a}=o.pointLabels,l={extra:rs(o)/2,additionalAngle:r?tt/s:0};let c;for(let u=0;u270||e<90)&&(n-=t),n}function Sg(n,t,e){const{left:i,top:s,right:o,bottom:r}=e,{backdropColor:a}=t;if(!H(a)){const l=ve(t.borderRadius),c=yt(t.backdropPadding);n.fillStyle=a;const u=i-c.left,h=s-c.top,d=o-i+c.width,f=r-s+c.height;Object.values(l).some(g=>g!==0)?(n.beginPath(),dn(n,{x:u,y:h,w:d,h:f,radius:l}),n.fill()):n.fillRect(u,h,d,f)}}function Og(n,t){const{ctx:e,options:{pointLabels:i}}=n;for(let s=t-1;s>=0;s--){const o=n._pointLabelItems[s];if(!o.visible)continue;const r=i.setContext(n.getPointLabelContext(s));Sg(e,r,o);const a=ut(r.font),{x:l,y:c,textAlign:u}=o;Ie(e,n._pointLabels[s],l,c+a.lineHeight/2,a,{color:r.color,textAlign:u,textBaseline:"middle"})}}function Ma(n,t,e,i){const{ctx:s}=n;if(e)s.arc(n.xCenter,n.yCenter,t,0,G);else{let o=n.getPointPosition(0,t);s.moveTo(o.x,o.y);for(let r=1;r{const s=X(this.options.pointLabels.callback,[e,i],this);return s||s===0?s:""}).filter((e,i)=>this.chart.getDataVisibility(i))}fit(){const t=this.options;t.display&&t.pointLabels.display?vg(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){const e=G/(this._pointLabels.length||1),i=this.options.startAngle||0;return Dt(t*e+At(i))}getDistanceFromCenterForValue(t){if(H(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(H(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(h!==0){l=this.getDistanceFromCenterForValue(u.value);const d=this.getContext(h),f=s.setContext(d),g=o.setContext(d);Ag(this,f,l,r,g)}}),i.display){for(t.save(),a=r-1;a>=0;a--){const u=i.setContext(this.getPointLabelContext(a)),{color:h,lineWidth:d}=u;!d||!h||(t.lineWidth=d,t.strokeStyle=h,t.setLineDash(u.borderDash),t.lineDashOffset=u.borderDashOffset,l=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),c=this.getPointPosition(a,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let o,r;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((a,l)=>{if(l===0&&!e.reverse)return;const c=i.setContext(this.getContext(l)),u=ut(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=u.string,r=t.measureText(a.label).width,t.fillStyle=c.backdropColor;const h=yt(c.backdropPadding);t.fillRect(-r/2-h.left,-o-u.size/2-h.top,r+h.width,u.size+h.height)}Ie(t,a.label,0,-o,u,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}}k(zn,"id","radialLinear"),k(zn,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:fi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),k(zn,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),k(zn,"descriptors",{angleLines:{_fallback:"grid"}});const bi={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},xt=Object.keys(bi);function ir(n,t){return n-t}function sr(n,t){if(H(t))return null;const e=n._adapter,{parser:i,round:s,isoWeekday:o}=n._parseOpts;let r=t;return typeof i=="function"&&(r=i(r)),et(r)||(r=typeof i=="string"?e.parse(r,i):e.parse(r)),r===null?null:(s&&(r=s==="week"&&(un(o)||o===!0)?e.startOf(r,"isoWeek",o):e.startOf(r,s)),+r)}function or(n,t,e,i){const s=xt.length;for(let o=xt.indexOf(n);o=xt.indexOf(e);o--){const r=xt[o];if(bi[r].common&&n._adapter.diff(s,i,r)>=t-1)return r}return xt[e?xt.indexOf(e):0]}function Fg(n){for(let t=xt.indexOf(n)+1,e=xt.length;t=t?e[i]:e[s];n[o]=!0}}function Ig(n,t,e,i){const s=n._adapter,o=+s.startOf(t[0].value,i),r=t[t.length-1].value;let a,l;for(a=o;a<=r;a=+s.add(a,1,i))l=e[a],l>=0&&(t[l].major=!0);return t}function ar(n,t,e){const i=[],s={},o=t.length;let r,a;for(r=0;r+t.value))}initOffsets(t=[]){let e=0,i=0,s,o;this.options.offset&&t.length&&(s=this.getDecimalForValue(t[0]),t.length===1?e=1-s:e=(this.getDecimalForValue(t[1])-s)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?i=o:i=(o-this.getDecimalForValue(t[t.length-2]))/2);const r=t.length<3?.5:.25;e=ft(e,0,r),i=ft(i,0,r),this._offsets={start:e,end:i,factor:1/(e+1+i)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,o=s.time,r=o.unit||or(o.minUnit,e,i,this._getLabelCapacity(e)),a=S(s.ticks.stepSize,1),l=r==="week"?o.isoWeekday:!1,c=un(l)||l===!0,u={};let h=e,d,f;if(c&&(h=+t.startOf(h,"isoWeek",l)),h=+t.startOf(h,c?"day":r),t.diff(i,e,r)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+r);const g=s.ticks.source==="data"&&this.getDataTimestamps();for(d=h,f=0;d+p)}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const s=this.options.time.displayFormats,o=this._unit,r=e||s[o];return this._adapter.format(t,r)}_tickFormatFunction(t,e,i,s){const o=this.options,r=o.ticks.callback;if(r)return X(r,[t,e,i],this);const a=o.time.displayFormats,l=this._unit,c=this._majorUnit,u=l&&a[l],h=c&&a[c],d=i[e],f=c&&h&&d&&d.major;return this._adapter.format(t,s||(f?h:u))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t=this._cache.data||[],e,i;if(t.length)return t;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(e=0,i=s.length;e=n[i].pos&&t<=n[s].pos&&({lo:i,hi:s}=xe(n,"pos",t)),{pos:o,time:a}=n[i],{pos:r,time:l}=n[s]):(t>=n[i].time&&t<=n[s].time&&({lo:i,hi:s}=xe(n,"time",t)),{time:o,pos:a}=n[i],{time:r,pos:l}=n[s]);const c=r-o;return c?a+(l-a)*(t-o)/c:a}class lr extends pn{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Bn(e,this.min),this._tableRange=Bn(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],o=[];let r,a,l,c,u;for(r=0,a=t.length;r=e&&c<=i&&s.push(c);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(r=0,a=s.length;rs-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return e.length&&i.length?t=this.normalize(e.concat(i)):t=e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(Bn(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return Bn(this._table,i*this._tableRange+this._minPos,!0)}}k(lr,"id","timeseries"),k(lr,"defaults",pn.defaults);function yi(n){return n==="sankey"?{type:"sankey",data:{datasets:[]},options:{animations:!1}}:n==="pie"?{type:"pie",data:{datasets:[]}}:n==="column"?{type:"bar",data:{labels:[],datasets:[]},options:{plugins:{tooltip:{callbacks:{label:function(t){let e=t.dataset.currency_code;return V(t.raw,e)}}}},maintainAspectRatio:!1,scales:{}}}:n==="line"?{options:{plugins:{tooltip:{callbacks:{label:function(t){let e=t.dataset.currency_code;return V(t.raw,e)}}}},maintainAspectRatio:!1,scales:{x:{type:"time",time:{tooltipFormat:"PP"}}}},type:"line",data:{labels:[],datasets:[]}}:{}}let ri=new dt("#36a2eb"),Re=new dt("#ff6384"),mn=new dt("#4bc0c0"),ka=new dt("#ff9f40"),Eg=new dt("#9966ff"),zg=new dt("#ffcd56"),Bg=new dt("#c9cbcf"),cr=0;window.theme==="dark"&&(Re.darken(.3).desaturate(.3),mn.darken(.3).desaturate(.3),ri.darken(.3).desaturate(.3),ka.darken(.3).desaturate(.3));let Fi=[Re,ka,ri,mn,Eg,zg,Bg,mn];function De(n,t){let e={borderColor:Re.rgbString(),backgroundColor:Re.rgbString()},i;switch(n){default:let o=Math.floor(cr/2)%Fi.length;i=new dt(Fi[o].rgbString()),i.lighten(.38),e={borderColor:Fi[o].hexString(),backgroundColor:i.hexString()};break;case"spent":i=new dt(ri.rgbString()),i.lighten(.38),e={borderColor:ri.rgbString(),backgroundColor:i.rgbString()};break;case"left":i=new dt(mn.rgbString()),i.lighten(.38),e={borderColor:mn.rgbString(),backgroundColor:i.rgbString()};break;case"overspent":i=new dt(Re.rgbString()),i.lighten(.22),e={borderColor:Re.rgbString(),backgroundColor:i.rgbString()};break}return cr++,t==="border"?e.borderColor:t==="background"?e.backgroundColor:"#FF0000"}let me=[],je=null,Ii=null,Ei=!1;const Ng=()=>({loading:!1,loadingAccounts:!1,accountList:[],autoConversion:!1,chartOptions:null,switchAutoConversion(){this.autoConversion=!this.autoConversion,Bc("autoConversion",this.autoConversion)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-accounts-chart",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){console.log(s),this.drawChart(this.generateOptions(s)),this.loading=!1;return}new Nc().dashboard(n,t,null).then(r=>{this.chartData=r.data,window.store.set(e,r.data),console.log(r.data),this.drawChart(this.generateOptions(this.chartData)),this.loading=!1})},generateOptions(n){me=[];let t=yi("line");for(let e=0;e0){this.loadingAccounts=!1;return}const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-accounts-data",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){this.accountList=s,this.loadingAccounts=!1;return}const o=10;let r=0,a=0,l=[];Promise.all([bt("frontpageAccounts")]).then(c=>{r=c[0].length;for(let u in c[0]){let h=c[0];if(h.hasOwnProperty(u)){let d=h[u];new Bs().get(d,new Date(window.store.get("end"))).then(f=>{let g=f.data.data;const p={page:1,start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))};new Bs().transactions(g.id,p).then(m=>{let b=[];for(let y=0;y=o);y++){let x=m.data.data[y],v={title:x.attributes.group_title===null?"":x.attributes.group_title,id:x.id,transactions:[]};for(let _=0;_y.order-x.order),this.accountList=l,this.loadingAccounts=!1,window.store.set(e,l))})})}}})},init(){Promise.all([bt("viewRange","1M"),bt("autoConversion",!1),bt("language","en_US")]).then(n=>{this.autoConversion=n[1],Ei=!0,this.loadChart(),this.loadAccounts()}),window.store.observe("end",()=>{Ei&&(Ii=null,this.accountList=[],this.loadChart(),this.loadAccounts())}),window.store.observe("autoConversion",()=>{Ei&&(this.loadChart(),this.loadAccounts())})}});let Wg=class{dashboard(t,e){let i=J(t,"y-MM-dd"),s=J(e,"y-MM-dd");return vt.get("/api/v2/chart/budget/dashboard",{params:{start:i,end:s}})}},Ue=[],Nn=null,te=null,zi=!1,Te;const Hg=()=>({loading:!1,autoConversion:!1,loadChart(){if(this.loading!==!0){if(this.loading=!0,te!==null){this.drawChart(this.generateOptions(te)),this.loading=!1;return}this.getFreshData()}},drawChart(n){if(Nn!==null){Nn.data.datasets=n.data.datasets,Nn.update();return}Nn=new mt(document.querySelector("#budget-chart"),n)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-budgets-chart",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){te=s,this.drawChart(this.generateOptions(te)),this.loading=!1;return}new Wg().dashboard(n,t,null).then(r=>{te=r.data,this.drawChart(this.generateOptions(te)),window.store.set(e,te),this.loading=!1})},generateOptions(n){Ue=[];let t=yi("column");t.options.locale=window.store.get("locale").replace("_","-"),t.options.plugins={tooltip:{callbacks:{title:function(e){return e.label},label:function(e){let i=e.dataset.label||"";return i&&(i+=": "),i+" "+V(e.parsed.y,Ue[e.parsed.x]??"EUR")}}}},t.data={labels:[],datasets:[{label:Te.t("firefly.spent"),data:[],borderWidth:1,stack:1,backgroundColor:De("spent","background"),borderColor:De("spent","border")},{label:Te.t("firefly.left"),data:[],borderWidth:1,stack:1,backgroundColor:De("left","background"),borderColor:De("left","border")},{label:Te.t("firefly.overspent"),data:[],borderWidth:1,stack:1,backgroundColor:De("overspent","background"),borderColor:De("overspent","border")}]};for(const e in n)if(n.hasOwnProperty(e)){let i=n[e],s=i.label+" ("+i.currency_code+")";t.data.labels.push(s),this.autoConversion&&(Ue.push(i.native_currency_code),t.data.datasets[0].data.push(parseFloat(i.native_entries.spent)*-1),t.data.datasets[1].data.push(parseFloat(i.native_entries.left)),t.data.datasets[2].data.push(parseFloat(i.native_entries.overspent))),this.autoConversion||(Ue.push(i.currency_code),t.data.datasets[0].data.push(parseFloat(i.entries.spent)*-1),t.data.datasets[1].data.push(parseFloat(i.entries.left)),t.data.datasets[2].data.push(parseFloat(i.entries.overspent)))}return t.options.scales={y:{ticks:{callback:function(e){return V(e,Ue[0]??"EUR")}}}},t},init(){Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{Te=new li;const t=n[1].replace("-","_");Te.locale=t,ci(Te,t).then(()=>{this.autoConversion=n[0],zi=!0,this.loading===!1&&this.loadChart()})}),window.store.observe("end",()=>{zi&&this.loading===!1&&(te=null,this.loadChart())}),window.store.observe("autoConversion",n=>{zi&&(this.autoConversion=n,this.loading===!1&&this.loadChart())})}});class Vg{dashboard(t,e){let i=J(t,"y-MM-dd"),s=J(e,"y-MM-dd");return vt.get("/api/v2/chart/category/dashboard",{params:{start:i,end:s}})}}let ur=[],$e=null,Se=null,Bi=!1;const Yg=()=>({loading:!1,autoConversion:!1,generateOptions(n){ur=[];let t=yi("column"),e={};for(const s in n)if(n.hasOwnProperty(s)){let o=n[s],r=o.currency_code;this.autoConversion&&(r=o.native_currency_code),e.hasOwnProperty(r)||(e[r]={name:r,yAxisID:"",data:{}},ur.push(r))}for(const s in n)if(n.hasOwnProperty(s)){let o=n[s],r=o.currency_code;this.autoConversion&&(r=o.native_currency_code);for(const a in e)if(e.hasOwnProperty(a)){let l=0;r===a&&(l=parseFloat(o.amount),""+o.currency_code,this.autoConversion&&(l=parseFloat(o.native_amount),""+o.native_currency_code)),e[a].data.hasOwnProperty(o.label)&&(e[a].data[o.label]=e[a].data[o.label]+l),e[a].data.hasOwnProperty(o.label)||(e[a].data[o.label]=l)}t.data.labels.includes(o.label)||t.data.labels.push(o.label)}let i=0;for(const s in e){let o="y"+s,r={label:s,currency_code:s,yAxisID:o,data:[]};for(const a in e[s].data)r.data.push(e[s].data[a]);t.data.datasets.push(r),t.options.scales.hasOwnProperty(o)||(t.options.scales[o]={beginAtZero:!0,type:"linear",position:i===1?"right":"left",ticks:{callback:function(a,l,c){return V(a,s)}}},i++)}return t},drawChart(n){if($e!==null){$e.options=n.options,$e.data=n.data,$e.update();return}$e=new mt(document.querySelector("#category-chart"),n)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt("dashboard-categories-chart",n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){Se=s,this.drawChart(this.generateOptions(Se)),this.loading=!1;return}new Vg().dashboard(n,t,null).then(r=>{Se=r.data,this.drawChart(this.generateOptions(r.data)),window.store.set(e,Se),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,Se!==null){this.drawChart(this.generateOptions(Se)),this.loading=!1;return}this.getFreshData()}},init(){Promise.all([bt("autoConversion",!1)]).then(n=>{this.autoConversion=n[0],Bi=!0,this.loadChart()}),window.store.observe("end",()=>{Bi&&(this.chartData=null,this.loadChart())}),window.store.observe("autoConversion",n=>{Bi&&(this.autoConversion=n,this.loadChart())})}});let jg=class{get(t){return vt.get("/api/v2/transactions",{params:t})}};/*! - * chartjs-chart-sankey v0.12.0 - * https://github.com/kurkle/chartjs-chart-sankey#readme - * (c) 2022 Jukka Kurkela - * Released under the MIT license - */function Ug(n){const t=[],e=K(n)?n:H(n)?[]:[n];for(;e.length;){const i=e.pop();typeof i=="string"?t.unshift.apply(t,i.split(` -`)):Array.isArray(i)?e.push.apply(e,i):H(e)||t.unshift(""+i)}return t}function Ni(n){return!n||["min","max"].indexOf(n)===-1?"max":n}const ae=n=>n!==void 0;function $g(n,t){const e=new Set(t.map(r=>r.to)),i=new Set(t.map(r=>r.from)),s=new Set([...n.keys()]);let o=0;for(;s.size;){const r=qg([...s],e);for(const a of r){const l=n.get(a);ae(l.x)||(l.x=o),s.delete(a)}s.size&&(e.clear(),t.filter(a=>s.has(a.from)).forEach(a=>e.add(a.to)),o++)}return[...n.keys()].filter(r=>!i.has(r)).forEach(r=>{const a=n.get(r);a.column||(a.x=o)}),o}function qg(n,t){const e=n.filter(i=>!t.has(i));return e.length?e:n.slice(0,1)}const Xg=(n,t)=>n.x!==t.x?n.x-t.x:n.y-t.y;let Wn=-1;function Kg(){return Wn=Wn<100?Wn+1:0,Wn}function as(n,t,e=Kg()){let i=0;for(const s of n)s.node._visited!==e&&(s.node._visited=e,i+=s.node[t].length+as(s.node[t],t,e));return i}const Ca=n=>(t,e)=>as(t.node[n],n)-as(e.node[n],n)||t.node[n].length-e.node[n].length;function Cs(n,t){n.from.sort(Ca("from"));for(const e of n.from){const i=e.node;ae(i.y)||(i.y=t,Cs(i,t)),t=Math.max(i.y+i.out,t)}return t}function _e(n,t){n.to.sort(Ca("to"));for(const e of n.to){const i=e.node;ae(i.y)||(i.y=t,_e(i,t)),t=Math.max(i.y+i.in,t)}return t}function qe(n,t){return ae(n.y)?n.y:(n.y=t,t)}function Gg(n,t){const e=n.filter(u=>u.x===0),i=n.filter(u=>u.x===t),s=e.filter(u=>!ae(u.y)),o=i.filter(u=>!ae(u.y)),r=n.filter(u=>u.x>0&&u.xMath.max(u,h.y+h.out||0),0),l=i.reduce((u,h)=>Math.max(u,h.y+h.in||0),0),c=0;return a>=l?(s.forEach(u=>{a=qe(u,a),a=Math.max(a+u.out,_e(u,a))}),o.forEach(u=>{l=qe(u,l),l=Math.max(l+u.in,_e(u,l))})):(o.forEach(u=>{l=qe(u,l),l=Math.max(l+u.in,_e(u,l))}),s.forEach(u=>{a=qe(u,a),a=Math.max(a+u.out,_e(u,a))})),r.forEach(u=>{let h=n.filter(d=>d.x===u.x&&ae(d.y)).reduce((d,f)=>Math.max(d,f.y+Math.max(f.in,f.out)),0);h=qe(u,h),h=Math.max(h+u.in,Cs(u,h)),h=Math.max(h+u.out,_e(u,h)),c=Math.max(c,h)}),Math.max(a,l,c)}function Qg(n,t){n.sort((r,a)=>Math.max(a.in,a.out)-Math.max(r.in,r.out));const e=n[0];e.y=0;const i=Cs(e,0),s=_e(e,0),o=Gg(n,t);return Math.max(i,s,o)}function Zg(n,t){let e=0,i=0;for(let s=0;s<=t;s++){let o=i;const r=n.filter(a=>a.x===s).sort((a,l)=>a.priority-l.priority);i=r[0].to.filter(a=>a.node.x>s+1).reduce((a,l)=>a+l.flow,0)||0;for(const a of r)a.y=o,o+=Math.max(a.out,a.in);e=Math.max(o,e)}return e}function Jg(n,t){let e=1,i=0,s=0,o=0;const r=[];n.sort(Xg);for(const a of n){if(a.y){if(a.x===0)r.push(a.y);else{for(i!==a.x&&(i=a.x,s=0),e=s+1;ea.y);e++);s=e}a.y+=e*t,e++}o=Math.max(o,a.y+Math.max(a.in,a.out))}return o}function tp(n,t){n.forEach(e=>{const i=Math[t](e.in||e.out,e.out||e.in),s=il.node.y+l.node.out/2-(c.node.y+c.node.out/2)).forEach((l,c)=>{s?l.addY=c*(i-l.flow)/(a-1):(l.addY=r,r+=l.flow)}),r=0,a=e.to.length,e.to.sort((l,c)=>l.node.y+l.node.in/2-(c.node.y+c.node.in/2)).forEach((l,c)=>{o?l.addY=c*(i-l.flow)/(a-1):(l.addY=r,r+=l.flow)})})}function ep(n,t,e,i){const s=[...n.values()],o=$g(n,t),a=(e?Zg(s,o):Qg(s,o))*.03,l=Jg(s,a);return tp(s,i),{maxX:o,maxY:l}}function np(n){const t=new Map;for(let i=0;is.flow-i.flow;return[...t.values()].forEach(i=>{i.from=i.from.sort(e),i.from.forEach(s=>{s.node=t.get(s.key)}),i.to=i.to.sort(e),i.to.forEach(s=>{s.node=t.get(s.key)})}),t}function hr(n,t,e){for(const i of n)if(i.key===t&&i.index===e)return i.addY;return 0}class _i extends Xt{parseObjectData(t,e,i,s){const{from:o="from",to:r="to",flow:a="flow"}=this.options.parsing,l=e.map(({[o]:y,[r]:x,[a]:v})=>({from:y,to:x,flow:v})),{xScale:c,yScale:u}=t,h=[],d=this._nodes=np(l),{column:f,priority:g,size:p}=this.getDataset();if(g)for(const y of d.values())y.key in g&&(y.priority=g[y.key]);if(f)for(const y of d.values())y.key in f&&(y.column=!0,y.x=f[y.key]);const{maxX:m,maxY:b}=ep(d,l,!!g,Ni(p));this._maxX=m,this._maxY=b;for(let y=0,x=l.length;y1){const d=c-u*l/2+h;for(let f=0;fn.type==="data"?(n.parsed._custom.x-n.parsed.x)*200:void 0,delay:n=>n.type==="data"?n.parsed.x*500+n.dataIndex*20:void 0},colors:{type:"color",properties:["colorFrom","colorTo"]}},transitions:{hide:{animations:{colors:{type:"color",properties:["colorFrom","colorTo"],to:"transparent"}}},show:{animations:{colors:{type:"color",properties:["colorFrom","colorTo"],from:"transparent"}}}}};_i.overrides={interaction:{mode:"nearest",intersect:!0},datasets:{clip:!1,parsing:!0},plugins:{tooltip:{callbacks:{title(){return""},label(n){const t=n.dataset.data[n.dataIndex];return t.from+" -> "+t.to+": "+t.flow}}},legend:{display:!1}},scales:{x:{type:"linear",bounds:"data",display:!1,min:0,offset:!1},y:{type:"linear",bounds:"data",display:!1,min:0,reverse:!0,offset:!1}},layout:{padding:{top:3,left:3,right:13,bottom:3}}};const dr=(n,t,e,i)=>n({x:n.x+e*(t.x-n.x),y:n.y+e*(t.y-n.y)});function ip(n,{x:t,x2:e,options:i}){let s;i.colorMode==="from"?s=Ae(i.colorFrom).alpha(.5).rgbString():i.colorMode==="to"?s=Ae(i.colorTo).alpha(.5).rgbString():(s=n.createLinearGradient(t,0,e,0),s.addColorStop(0,Ae(i.colorFrom).alpha(.5).rgbString()),s.addColorStop(1,Ae(i.colorTo).alpha(.5).rgbString())),n.fillStyle=s,n.strokeStyle=s,n.lineWidth=.5}class Ps extends Lt{constructor(t){super(),this.options=void 0,this.x=void 0,this.y=void 0,this.x2=void 0,this.y2=void 0,this.height=void 0,t&&Object.assign(this,t)}draw(t){const e=this,{x:i,x2:s,y:o,y2:r,height:a,progress:l}=e,{cp1:c,cp2:u}=dr(i,o,s,r);l!==0&&(t.save(),l<1&&(t.beginPath(),t.rect(i,Math.min(o,r),(s-i)*l+1,Math.abs(r-o)+a+1),t.clip()),ip(t,e),t.beginPath(),t.moveTo(i,o),t.bezierCurveTo(c.x,c.y,u.x,u.y,s,r),t.lineTo(s,r+a),t.bezierCurveTo(u.x,u.y+a,c.x,c.y+a,i,o+a),t.lineTo(i,o),t.stroke(),t.closePath(),t.fill(),t.restore())}inRange(t,e,i){const{x:s,y:o,x2:r,y2:a,height:l}=this.getProps(["x","y","x2","y2","height"],i);if(tr)return!1;const{cp1:c,cp2:u}=dr(s,o,r,a),h=(t-s)/(r-s),d={x:s,y:o},f={x:r,y:a},g=Oe(d,c,h),p=Oe(c,u,h),m=Oe(u,f,h),b=Oe(g,p,h),y=Oe(p,m,h),x=Oe(b,y,h).y;return e>=x&&e<=x+l}inXRange(t,e){const{x:i,x2:s}=this.getProps(["x","x2"],e);return t>=i&&t<=s}inYRange(t,e){const{y:i,y2:s,height:o}=this.getProps(["y","y2","height"],e),r=Math.min(i,s),a=Math.max(i,s)+o;return t>=r&&t<=a}getCenterPoint(t){const{x:e,y:i,x2:s,y2:o,height:r}=this.getProps(["x","y","x2","y2","height"],t);return{x:(e+s)/2,y:(i+o+r)/2}}tooltipPosition(t){return this.getCenterPoint(t)}getRange(t){return t==="x"?this.width/2:this.height/2}}Ps.id="flow";Ps.defaults={colorFrom:"red",colorTo:"green",colorMode:"gradient",hoverColorFrom:(n,t)=>on(t.colorFrom),hoverColorTo:(n,t)=>on(t.colorTo)};mt.register({SankeyController:_i,Flow:Ps});const fr="dashboard-sankey-data";let pt,Wi=!1,Hn=null,Ht=[],ht=!1,L={category:null,unknown_category:null,in:null,out:null,unknown_source:null,unknown_dest:null,unknown_account:null,expense_account:null,revenue_account:null,budget:null,unknown_budget:null,all_money:null};const gr=function(n){return n.includes(L.revenue_account)?"forestgreen":n.includes("("+L.in+",")?"green":n.includes(L.budget)||n.includes(L.unknown_budget)?"Orchid":n.includes("("+L.out+",")?"MediumOrchid":n.includes(L.all_money)?"blue":"red"};function Xe(n,t,e,i){if(n==="category"&&t!==null&&e==="in")return L.category+' "'+t+'" ('+L.in+(ht?", "+i+")":")");if(n==="category"&&t===null&&e==="in")return L.unknown_category+" ("+L.in+(ht?", "+i+")":")");if(n==="category"&&t!==null&&e==="out")return L.category+' "'+t+'" ('+L.out+(ht?", "+i+")":")");if(n==="category"&&t===null&&e==="out")return L.unknown_category+" ("+L.out+(ht?", "+i+")":")");if(n==="account"&&t===null&&e==="in")return L.unknown_source+(ht?" ("+i+")":"");if(n==="account"&&t!==null&&e==="in")return L.revenue_account+'"'+t+'"'+(ht?" ("+i+")":"");if(n==="account"&&t===null&&e==="out")return L.unknown_dest+(ht?" ("+i+")":"");if(n==="account"&&t!==null&&e==="out")return L.expense_account+' "'+t+'"'+(ht?" ("+i+")":"");if(n==="budget"&&t!==null)return L.budget+' "'+t+'"'+(ht?" ("+i+")":"");if(n==="budget"&&t===null)return L.unknown_budget+(ht?" ("+i+")":"");console.error('Cannot handle: type:"'+n+'", dir: "'+e+'"')}function Ke(n,t,e){if(n==="category"&&t!==null)return L.category+' "'+t+'"'+(ht?" ("+e+")":"");if(n==="category"&&t===null)return L.unknown_category+(ht?" ("+e+")":"");if(n==="account"&&t===null)return L.unknown_account+(ht?" ("+e+")":"");if(n==="account"&&t!==null)return t+(ht?" ("+e+")":"");if(n==="budget"&&t!==null)return L.budget+' "'+t+'"'+(ht?" ("+e+")":"");if(n==="budget"&&t===null)return L.unknown_budget+(ht?" ("+e+")":"");console.error('Cannot handle: type:"'+n+'"')}const sp=()=>({loading:!1,autoConversion:!1,generateOptions(){let n=yi("sankey"),t={},e={};for(let s in Ht)if(Ht.hasOwnProperty(s)){let o=Ht[s];for(let r in o.attributes.transactions)if(o.attributes.transactions.hasOwnProperty(r)){let a=o.attributes.transactions[r],l=this.autoConversion?a.native_currency_code:a.currency_code,c=this.autoConversion?parseFloat(a.native_amount):parseFloat(a.amount),u;if(a.type==="deposit"){let h=Xe("category",a.category_name,"in",l),d=Xe("account",a.source_name,"in",l);e[h]=Ke("category",a.category_name,l),e[d]=Ke("account",a.source_name,l),u=d+"-"+h+"-"+l,t.hasOwnProperty(u)||(t[u]={from:d,to:h,amount:0}),t[u].amount+=c,u=h+"-"+L.all_money+"-"+l,t.hasOwnProperty(u)||(t[u]={from:h,to:L.all_money+(this.autoConversion?" ("+l+")":""),amount:0}),t[u].amount+=c}if(a.type==="withdrawal"){let h=Xe("budget",a.budget_name,"out",l);e[h]=Ke("budget",a.budget_name,l),u=L.all_money+"-"+h+"-"+l,t.hasOwnProperty(u)||(t[u]={from:L.all_money+(this.autoConversion?" ("+l+")":""),to:h,amount:0}),t[u].amount+=c;let d=Xe("category",a.category_name,"out",l);e[d]=Ke("category",a.category_name,l),u=h+"-"+d+"-"+l,t.hasOwnProperty(u)||(t[u]={from:h,to:d,amount:0}),t[u].amount+=c;let f=Xe("account",a.destination_name,"out",l);e[f]=Ke("account",a.destination_name,l),u=d+"-"+f+"-"+l,t.hasOwnProperty(u)||(t[u]={from:d,to:f,amount:0}),t[u].amount+=c}}}let i={label:"Firefly III dashboard sankey chart",data:[],colorFrom:s=>gr(s.dataset.data[s.dataIndex]?s.dataset.data[s.dataIndex].from:""),colorTo:s=>gr(s.dataset.data[s.dataIndex]?s.dataset.data[s.dataIndex].to:""),colorMode:"gradient",labels:e,size:"min"};for(let s in t)if(t.hasOwnProperty(s)){let o=t[s];i.data.push({from:o.from,to:o.to,flow:o.amount})}return n.data.datasets.push(i),n},drawChart(n){if(Hn!==null){Hn.data.datasets=n.data.datasets,Hn.update();return}Hn=new mt(document.querySelector("#sankey-chart"),n)},getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt(fr,n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){Ht=s,this.drawChart(this.generateOptions()),this.loading=!1;return}let o={start:J(n,"y-MM-dd"),end:J(t,"y-MM-dd"),type:"withdrawal,deposit",page:1};this.downloadTransactions(o)},downloadTransactions(n){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),i=Nt(fr,t,e);new jg().get(n).then(o=>{if(Ht=[...Ht,...o.data.data],parseInt(o.data.meta.pagination.total_pages)>n.page){n.page++,this.downloadTransactions(n);return}window.store.set(i,Ht),this.drawChart(this.generateOptions()),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,Ht.length!==0){this.drawChart(this.generateOptions()),this.loading=!1;return}this.getFreshData()}},init(){Ht=[],Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{this.autoConversion=n[0],ht=n[0],pt=new li;const t=n[1].replace("-","_");pt.locale=t,ci(pt,t).then(()=>{L.all_money=pt.t("firefly.all_money"),L.category=pt.t("firefly.category"),L.in=pt.t("firefly.money_flowing_in"),L.out=pt.t("firefly.money_flowing_out"),L.unknown_category=pt.t("firefly.unknown_category_plain"),L.unknown_source=pt.t("firefly.unknown_source_plain"),L.unknown_dest=pt.t("firefly.unknown_dest_plain"),L.unknown_account=pt.t("firefly.unknown_any_plain"),L.unknown_budget=pt.t("firefly.unknown_budget_plain"),L.expense_account=pt.t("firefly.expense_account"),L.revenue_account=pt.t("firefly.revenue_account"),L.budget=pt.t("firefly.budget"),Wi=!0,this.loadChart()})}),window.store.observe("end",()=>{Wi&&(this.transactions=[],this.loadChart())}),window.store.observe("autoConversion",n=>{Wi&&(this.autoConversion=n,this.loadChart())})}});let op=class{get(t){return vt.get("/api/v2/subscriptions",{params:t})}paid(t){return vt.get("/api/v2/subscriptions/sum/paid",{params:t})}unpaid(t){return vt.get("/api/v2/subscriptions/sum/unpaid",{params:t})}},Hi=!1,ee,Ct={};function Pa(n){return new op().get(n).then(e=>{let i=e.data.data;for(let s in i)if(i.hasOwnProperty(s)){let o=i[s];if(o.attributes.active&&o.attributes.pay_dates.length>0){let r=o.attributes.object_group_id===null?0:o.attributes.object_group_id,a=o.attributes.object_group_title===null?ee.t("firefly.default_group_title_name_plain"):o.attributes.object_group_title,l=o.attributes.object_group_order===null?0:o.attributes.object_group_order;Ct.hasOwnProperty(r)||(Ct[r]={id:r,title:a,order:l,payment_info:{},bills:[]});let c={id:o.id,name:o.attributes.name,amount_min:o.attributes.amount_min,amount_max:o.attributes.amount_max,amount:(parseFloat(o.attributes.amount_max)+parseFloat(o.attributes.amount_min))/2,currency_code:o.attributes.currency_code,native_amount_min:o.attributes.native_amount_min,native_amount_max:o.attributes.native_amount_max,native_amount:(parseFloat(o.attributes.native_amount_max)+parseFloat(o.attributes.native_amount_min))/2,native_currency_code:o.attributes.native_currency_code,transactions:[],pay_dates:o.attributes.pay_dates,paid:o.attributes.paid_dates.length>0};c.expected_amount=n.autoConversion?V(c.native_amount,c.native_currency_code):V(c.amount,c.currency_code),c.expected_times=ee.t("firefly.subscr_expected_x_times",{times:o.attributes.pay_dates.length,amount:c.expected_amount});for(let u in o.attributes.paid_dates)if(o.attributes.paid_dates.hasOwnProperty(u)){const h=o.attributes.paid_dates[u];let d=100;n.autoConversion&&(d=Math.round(-100+parseFloat(h.native_amount)*-1/parseFloat(c.native_amount)*100)),n.autoConversion||(d=Math.round(-100+parseFloat(h.amount)*-1/parseFloat(c.amount)*100));let f={amount:n.autoConversion?V(h.native_amount,h.native_currency_code):V(h.amount,h.currency_code),percentage:d,date:J(new Date(h.date),"PP"),foreign_amount:null};h.foreign_currency_code!==null&&(f.foreign_amount=n.autoConversion?h.foreign_native_amount:h.foreign_amount,f.foreign_currency_code=n.autoConversion?h.native_currency_code:h.foreign_currency_code),c.transactions.push(f)}if(Ct[r].bills.push(c),o.attributes.paid_dates.length===0){const u=o.attributes.pay_dates.length*c.amount,h=o.attributes.pay_dates.length*c.native_amount;Ct[r].payment_info.hasOwnProperty(c.currency_code)||(Ct[r].payment_info[c.currency_code]={currency_code:c.currency_code,paid:0,unpaid:0,native_currency_code:c.native_currency_code,native_paid:0,native_unpaid:0}),Ct[r].payment_info[c.currency_code].unpaid+=u,Ct[r].payment_info[c.currency_code].native_unpaid+=h}if(o.attributes.paid_dates.length>0){for(let u in o.attributes.paid_dates)if(o.attributes.paid_dates.hasOwnProperty(u)){let h=o.attributes.paid_dates[u];Ct[r].payment_info.hasOwnProperty(h.currency_code)||(Ct[r].payment_info[h.currency_code]={currency_code:c.currency_code,paid:0,unpaid:0,native_currency_code:c.native_currency_code,native_paid:0,native_unpaid:0});const d=parseFloat(h.amount)*-1,f=parseFloat(h.native_amount)*-1;Ct[r].payment_info[h.currency_code].paid+=d,Ct[r].payment_info[h.currency_code].native_paid+=f}}}}return parseInt(e.data.meta.pagination.total_pages)>n.page?(n.page++,Pa(n)):Promise.resolve()})}const rp=()=>({loading:!1,autoConversion:!1,subscriptions:[],startSubscriptions(){this.loading=!0;let n=new Date(window.store.get("start")),t=new Date(window.store.get("end"));console.log("here we are");const e=window.store.get("cacheValid");let i=window.store.get(Nt("subscriptions-data-dashboard",n,t));e&&typeof i<"u",Ct={},this.subscriptions=[],console.log("cache is invalid, must download");let s={start:J(n,"y-MM-dd"),end:J(t,"y-MM-dd"),autoConversion:this.autoConversion,page:1};Pa(s).then(()=>{console.log("Done with download!");let o=Object.values(Ct);for(let r in o)if(o.hasOwnProperty(r)){let a=o[r];const l=Object.keys(a.payment_info);a.col_size=l.length===1?"col-6 offset-3":"col-6",a.chart_width=l.length===1?"50%":"100%",a.payment_length=l.length,this.subscriptions.push(a)}this.loading=!1})},drawPieChart(n,t,e){let i="#pie_"+n+"_"+e.currency_code;const s=this.autoConversion?e.native_unpaid:e.unpaid,o=this.autoConversion?e.native_paid:e.paid,r=this.autoConversion?e.native_currency_code:e.currency_code,l={type:"doughnut",data:{labels:[ee.t("firefly.paid"),ee.t("firefly.unpaid")],datasets:[{label:ee.t("firefly.subscriptions_in_group",{title:t}),data:[o,s],backgroundColor:["rgb(54, 162, 235)","rgb(255, 99, 132)"],hoverOffset:4}]},options:{plugins:{tooltip:{callbacks:{label:function(u){return u.dataset.label+": "+V(u.raw,r)}}}}}};var c=mt.getChart(document.querySelector(i));typeof c<"u"&&c.destroy(),new mt(document.querySelector(i),l)},init(){console.log("subscriptions init"),Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{console.log("subscriptions after promises"),this.autoConversion=n[0],Hi=!0,ee=new li;const t=n[1].replace("-","_");ee.locale=t,ci(ee,t).then(()=>{this.loading===!1&&this.startSubscriptions()})}),window.store.observe("end",()=>{Hi&&(console.log("subscriptions observe end"),this.loading===!1&&this.startSubscriptions())}),window.store.observe("autoConversion",n=>{Hi&&(console.log("subscriptions observe autoConversion"),this.autoConversion=n,this.loading===!1&&this.startSubscriptions())})}});class ap{get(t){return vt.get("/api/v2/piggy-banks",{params:t})}}let Vt={},Vi=!1,Vn;const pr="dashboard-piggies-data",lp=()=>({loading:!1,autoConversion:!1,sankeyGrouping:"account",piggies:[],getFreshData(){const n=new Date(window.store.get("start")),t=new Date(window.store.get("end")),e=Nt(pr,n,t),i=window.store.get("cacheValid");let s=window.store.get(e);if(i&&typeof s<"u"){Vt=s,this.parsePiggies(),this.loading=!1;return}let o={start:J(n,"y-MM-dd"),end:J(t,"y-MM-dd"),page:1};this.downloadPiggyBanks(o)},downloadPiggyBanks(n){const t=new Date(window.store.get("start")),e=new Date(window.store.get("end")),i=Nt(pr,t,e);new ap().get(n).then(o=>{if(Vt=[...Vt,...o.data.data],parseInt(o.data.meta.pagination.total_pages)>n.page){n.page++,this.downloadPiggyBanks(n);return}window.store.set(i,Vt),this.parsePiggies(),this.loading=!1})},parsePiggies(){let n=[];for(let t in Vt)if(Vt.hasOwnProperty(t)){let e=Vt[t];if(e.attributes.percentage>=100||e.attributes.percentage===0)continue;let i=e.object_group_title??Vn.t("firefly.default_group_title_name_plain");n.hasOwnProperty(i)||(n[i]={id:e.object_group_id??0,title:i,order:e.object_group_order??0,piggies:[]});let s={id:e.id,name:e.attributes.name,percentage:parseInt(e.attributes.percentage),amount:this.autoConversion?e.attributes.native_current_amount:e.attributes.current_amount,left_to_save:this.autoConversion?e.attributes.native_left_to_save:e.attributes.left_to_save,target_amount:this.autoConversion?e.attributes.native_target_amount:e.attributes.target_amount,save_per_month:this.autoConversion?e.attributes.native_save_per_month:e.attributes.save_per_month,currency_code:this.autoConversion?e.attributes.native_currency_code:e.attributes.currency_code};n[i].piggies.push(s)}this.piggies=Object.values(n)},loadPiggyBanks(){if(this.loading!==!0){if(this.loading=!0,this.piggies.length!==0){this.parsePiggies(),this.loading=!1;return}this.getFreshData()}},init(){Vt=[],Promise.all([bt("autoConversion",!1),bt("language","en_US")]).then(n=>{Vn=new li;const t=n[1].replace("-","_");Vn.locale=t,ci(Vn,t).then(()=>{Vi=!0,this.autoConversion=n[0],this.loadPiggyBanks()})}),window.store.observe("end",()=>{Vi&&(Vt=[],this.loadPiggyBanks())}),window.store.observe("autoConversion",n=>{Vi&&(this.autoConversion=n,this.loadPiggyBanks())})}});/*! - * chartjs-adapter-date-fns v3.0.0 - * https://www.chartjs.org - * (c) 2022 chartjs-adapter-date-fns Contributors - * Released under the MIT license - */const cp={datetime:"MMM d, yyyy, h:mm:ss aaaa",millisecond:"h:mm:ss.SSS aaaa",second:"h:mm:ss aaaa",minute:"h:mm aaaa",hour:"ha",day:"MMM d",week:"PP",month:"MMM yyyy",quarter:"qqq - yyyy",year:"yyyy"};sa._date.override({_id:"date-fns",formats:function(){return cp},parse:function(n,t){if(n===null||typeof n>"u")return null;const e=typeof n;return e==="number"||n instanceof Date?n=j(n):e==="string"&&(typeof t=="string"?n=pc(n,t,new Date,this.options):n=_c(n,this.options)),Na(n)?n.getTime():null},format:function(n,t){return J(n,t,this.options)},add:function(n,t,e){switch(e){case"millisecond":return ai(n,t);case"second":return Ja(n,t);case"minute":return Qa(n,t);case"hour":return qa(n,t);case"day":return mr(n,t);case"week":return tl(n,t);case"month":return ls(n,t);case"quarter":return Za(n,t);case"year":return el(n,t);default:return n}},diff:function(n,t,e){switch(e){case"millisecond":return di(n,t);case"second":return ul(n,t);case"minute":return al(n,t);case"hour":return rl(n,t);case"day":return vr(n,t);case"week":return hl(n,t);case"month":return wr(n,t);case"quarter":return cl(n,t);case"year":return dl(n,t);default:return 0}},startOf:function(n,t,e){switch(t){case"second":return yc(n);case"minute":return fl(n);case"hour":return bc(n);case"day":return Yi(n);case"week":return Ls(n);case"isoWeek":return Ls(n,{weekStartsOn:+e});case"month":return Va(n);case"quarter":return Ha(n);case"year":return Wa(n);default:return n}},endOf:function(n,t){switch(t){case"second":return bl(n);case"minute":return ml(n);case"hour":return pl(n);case"day":return br(n);case"week":return ja(n);case"month":return yr(n);case"quarter":return Ya(n);case"year":return gl(n);default:return n}}});mt.register({LineController:jn,LineElement:oe,ArcElement:Ze,BarController:Yn,TimeScale:pn,PieController:Qi,BarElement:Kn,Filler:Jf,Colors:Rf,LinearScale:os,CategoryScale:ss,PointElement:Xn,Tooltip:fg,Legend:og});const Da={dates:Ua,boxes:Ec,accounts:Ng,budgets:Hg,categories:Yg,sankey:sp,subscriptions:rp,piggies:lp};function Ta(n){Object.keys(n).forEach(t=>{console.log(`Loading page component "${t}"`);let e=n[t]();Alpine.data(t,()=>e)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{Ta(Da)});window.bootstrapped&&Ta(Da); diff --git a/public/build/assets/edit-4c7ba005.js b/public/build/assets/edit-4c7ba005.js new file mode 100644 index 0000000000..ebb26c4a9a --- /dev/null +++ b/public/build/assets/edit-4c7ba005.js @@ -0,0 +1 @@ +import{d as p,f as l}from"./format-money-2e5851ad.js";import{G as f}from"./get-e0a81c64.js";import{p as g}from"./parse-downloaded-splits-83822d1b.js";import{p as m,d as w,e as a,f as y,g as b,h as P,i as S,l as v,a as C,b as A,c as _,s as E,j as D,k as c,m as u}from"./splice-errors-into-transactions-6727b386.js";import{i as o,m as T}from"./vendor-50e42c6c.js";import{d as x}from"./create-empty-split-81f71b2e.js";import{P as B}from"./put-bb9ad93a.js";import"./get-28b9aa25.js";const n=D();let L=function(){return{entries:[],originals:[],formStates:{loadingCurrencies:!0,loadingBudgets:!0,loadingPiggyBanks:!0,loadingSubscriptions:!0,isSubmitting:!1,returnHereButton:!1,saveAsNewButton:!1,resetButton:!0,rulesButton:!0,webhooksButton:!0},formBehaviour:{formType:"edit",foreignCurrencyEnabled:!0},formData:{defaultCurrency:null,enabledCurrencies:[],nativeCurrencies:[],foreignCurrencies:[],budgets:[],piggyBanks:[],subscriptions:[]},groupProperties:{transactionType:"unknown",title:null,editTitle:null,id:null,totalAmount:0},notifications:{error:{show:!1,text:"",url:""},success:{show:!1,text:"",url:""},wait:{show:!1,text:""}},submitTransaction(){this.notifications.error.show=!1,this.notifications.success.show=!1,this.notifications.wait.show=!1;for(let e in this.entries)this.entries.hasOwnProperty(e)&&(this.entries[e].errors=x());this.formStates.isSubmitting=!0;let t=m(this.entries,this.originals,this.groupProperties.transactionType),s={group_title:this.groupProperties.editTitle,fire_webhooks:this.formStates.webhooksButton,apply_rules:this.formStates.rulesButton,transactions:t};this.groupProperties.title===null&&t.length>1&&(s.group_title=t[0].description);let r=new B;console.log(s),r.put(s,{id:this.groupProperties.id}).then(e=>{const i=e.data.data;if(this.groupProperties.id=parseInt(i.id),this.groupProperties.title=i.attributes.group_title??i.attributes.transactions[0].description,w(this.groupProperties.id,i.attributes.transactions)>0){this.notifications.wait.show=!0,this.notifications.wait.text=o.t("firefly.wait_attachments");return}this.showMessageOrRedirectUser()}).catch(e=>{this.submitting=!1,console.log(e),typeof e.response<"u"&&this.parseErrors(e.response.data)})},filters:{source:[],destination:[]},addedSplit(){setTimeout(()=>{const t=function(s,r,e){return s.name_with_balance+'
'+o.t("firefly.account_type_"+s.type)+""};a({selector:"input.ac-source",serverUrl:n.account,filters:this.filters.source,onRenderItem:t,onChange:y,onSelectItem:b}),a({selector:"input.ac-dest",serverUrl:n.account,filters:this.filters.destination,onRenderItem:t,onChange:P,onSelectItem:S}),a({selector:"input.ac-category",serverUrl:n.category,valueField:"id",labelField:"name",onChange:c,onSelectItem:c}),a({selector:"input.ac-description",serverUrl:n.description,valueField:"id",labelField:"description",onChange:u,onSelectItem:u})},250)},changedDateTime(t){console.warn("changedDateTime, event is not used")},changedDescription(t){console.warn("changedDescription, event is not used")},changedDestinationAccount(t){console.warn("changedDestinationAccount, event is not used")},changedSourceAccount(t){console.warn("changedSourceAccount, event is not used")},formattedTotalAmount(){return this.entries.length===0?l(this.groupProperties.totalAmount,"EUR"):l(this.groupProperties.totalAmount,this.entries[0].currency_code??"EUR")},getTags(t){return console.log("at get tags "+t),console.log(this.entries[t].tags),this.entries[t].tags??[]},getTransactionGroup(){this.entries=[];const t=window.location.href.split("/"),s=parseInt(t[t.length-1]);new f().show(s,{}).then(e=>{const i=e.data.data;this.groupProperties.id=parseInt(i.id),this.groupProperties.transactionType=i.attributes.transactions[0].type.toLowerCase(),this.groupProperties.title=i.attributes.title??i.attributes.transactions[0].description,this.entries=g(i.attributes.transactions,parseInt(i.id)),this.notifications.wait.show=!1}).then(()=>{this.groupProperties.totalAmount=0;for(let e in this.entries)this.entries.hasOwnProperty(e)&&(this.groupProperties.totalAmount=this.groupProperties.totalAmount+parseFloat(this.entries[e].amount),this.filters.source.push(this.entries[e].source_account.type),this.filters.destination.push(this.entries[e].destination_account.type));console.log(this.filters),setTimeout(()=>{T.init("select.ac-tags",{allowClear:!0,server:n.tag,liveServer:!0,clearEnd:!0,allowNew:!0,notFoundMessage:o.t("firefly.nothing_found"),noCache:!0,fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}}})},150)})},init(){this.notifications.wait.show=!0,this.notifications.wait.text=o.t("firefly.wait_loading_transaction"),this.getTransactionGroup(),v().then(t=>{this.formStates.loadingCurrencies=!1,this.formData.defaultCurrency=t.defaultCurrency,this.formData.enabledCurrencies=t.enabledCurrencies,this.formData.nativeCurrencies=t.nativeCurrencies,this.formData.foreignCurrencies=t.foreignCurrencies}),C().then(t=>{this.formData.budgets=t,this.formStates.loadingBudgets=!1}),A().then(t=>{this.formData.piggyBanks=t,this.formStates.loadingPiggyBanks=!1}),_().then(t=>{this.formData.subscriptions=t,this.formStates.loadingSubscriptions=!1}),document.addEventListener("upload-success",t=>{this.processUpload(t),document.querySelectorAll("input[type=file]").value=""}),document.addEventListener("upload-error",t=>{this.processUploadError(t)}),document.addEventListener("location-move",t=>{this.entries[t.detail.index].latitude=t.detail.latitude,this.entries[t.detail.index].longitude=t.detail.longitude}),document.addEventListener("location-set",t=>{this.entries[t.detail.index].hasLocation=!0,this.entries[t.detail.index].latitude=t.detail.latitude,this.entries[t.detail.index].longitude=t.detail.longitude,this.entries[t.detail.index].zoomLevel=t.detail.zoomLevel}),document.addEventListener("location-zoom",t=>{this.entries[t.detail.index].hasLocation=!0,this.entries[t.detail.index].zoomLevel=t.detail.zoomLevel})},changedAmount(t){const s=parseInt(t.target.dataset.index);this.entries[s].amount=parseFloat(t.target.value),this.groupProperties.totalAmount=0;for(let r in this.entries)this.entries.hasOwnProperty(r)&&(this.groupProperties.totalAmount=this.groupProperties.totalAmount+parseFloat(this.entries[r].amount))},showMessageOrRedirectUser(){if(this.notifications.error.show=!1,this.notifications.success.show=!1,this.notifications.wait.show=!1,this.formStates.returnHereButton){this.notifications.success.show=!0,this.notifications.success.url="transactions/show/"+this.groupProperties.id,this.notifications.success.text=o.t("firefly.updated_journal_js",{description:this.groupProperties.title});return}window.location="transactions/show/"+this.groupProperties.id+"?transaction_group_id="+this.groupProperties.id+"&message=updated"},parseErrors(t){this.notifications.error.show=!0,this.notifications.success.show=!1,this.notifications.wait.show=!1,this.formStates.isSubmitting=!1,this.notifications.error.text=o.t("firefly.errors_submission_v2",{errorMessage:t.message}),t.hasOwnProperty("errors")&&(this.entries=E(t.errors,this.entries))},processUpload(t){this.showMessageOrRedirectUser()},processUploadError(t){this.notifications.success.show=!1,this.notifications.wait.show=!1,this.notifications.error.show=!0,this.formStates.isSubmitting=!1,this.notifications.error.text=o.t("firefly.errors_upload"),console.error(t)}}},h={transactions:L,dates:p};function d(){Object.keys(h).forEach(t=>{console.log(`Loading page component "${t}"`);let s=h[t]();Alpine.data(t,()=>s)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{console.log("Loaded through event listener."),d()});window.bootstrapped&&(console.log("Loaded through window variable."),d()); diff --git a/public/build/assets/fa-brands-400-003f1154.ttf b/public/build/assets/fa-brands-400-003f1154.ttf deleted file mode 100644 index 30f55b7435..0000000000 Binary files a/public/build/assets/fa-brands-400-003f1154.ttf and /dev/null differ diff --git a/public/build/assets/fa-brands-400-3a8924cd.woff2 b/public/build/assets/fa-brands-400-3a8924cd.woff2 new file mode 100644 index 0000000000..36fbda7d33 Binary files /dev/null and b/public/build/assets/fa-brands-400-3a8924cd.woff2 differ diff --git a/public/build/assets/fa-brands-400-5656d596.ttf b/public/build/assets/fa-brands-400-5656d596.ttf new file mode 100644 index 0000000000..5efb1d4f96 Binary files /dev/null and b/public/build/assets/fa-brands-400-5656d596.ttf differ diff --git a/public/build/assets/fa-brands-400-faae6fc0.woff2 b/public/build/assets/fa-brands-400-faae6fc0.woff2 deleted file mode 100644 index 8a480d9b1f..0000000000 Binary files a/public/build/assets/fa-brands-400-faae6fc0.woff2 and /dev/null differ diff --git a/public/build/assets/fa-regular-400-2bccecf0.woff2 b/public/build/assets/fa-regular-400-2bccecf0.woff2 new file mode 100644 index 0000000000..b6cabbacb6 Binary files /dev/null and b/public/build/assets/fa-regular-400-2bccecf0.woff2 differ diff --git a/public/build/assets/fa-regular-400-5d02dc9b.ttf b/public/build/assets/fa-regular-400-5d02dc9b.ttf new file mode 100644 index 0000000000..838b4e2cfe Binary files /dev/null and b/public/build/assets/fa-regular-400-5d02dc9b.ttf differ diff --git a/public/build/assets/fa-regular-400-7d81a1a7.ttf b/public/build/assets/fa-regular-400-7d81a1a7.ttf deleted file mode 100644 index c79589d83d..0000000000 Binary files a/public/build/assets/fa-regular-400-7d81a1a7.ttf and /dev/null differ diff --git a/public/build/assets/fa-regular-400-9169d8be.woff2 b/public/build/assets/fa-regular-400-9169d8be.woff2 deleted file mode 100644 index 059a94e2fd..0000000000 Binary files a/public/build/assets/fa-regular-400-9169d8be.woff2 and /dev/null differ diff --git a/public/build/assets/fa-solid-900-886c8611.woff2 b/public/build/assets/fa-solid-900-886c8611.woff2 deleted file mode 100644 index 88b0367aae..0000000000 Binary files a/public/build/assets/fa-solid-900-886c8611.woff2 and /dev/null differ diff --git a/public/build/assets/fa-solid-900-9fc85f3a.woff2 b/public/build/assets/fa-solid-900-9fc85f3a.woff2 new file mode 100644 index 0000000000..824d518eb4 Binary files /dev/null and b/public/build/assets/fa-solid-900-9fc85f3a.woff2 differ diff --git a/public/build/assets/fa-solid-900-cea79b34.ttf b/public/build/assets/fa-solid-900-cea79b34.ttf deleted file mode 100644 index e479fb2934..0000000000 Binary files a/public/build/assets/fa-solid-900-cea79b34.ttf and /dev/null differ diff --git a/public/build/assets/fa-solid-900-fbbf06d7.ttf b/public/build/assets/fa-solid-900-fbbf06d7.ttf new file mode 100644 index 0000000000..ec24749db9 Binary files /dev/null and b/public/build/assets/fa-solid-900-fbbf06d7.ttf differ diff --git a/public/build/assets/format-money-2e5851ad.js b/public/build/assets/format-money-2e5851ad.js new file mode 100644 index 0000000000..a4a38bac2d --- /dev/null +++ b/public/build/assets/format-money-2e5851ad.js @@ -0,0 +1 @@ +import{q as y,s as d,r as l,t as p,u as _,v as c,w as b,x as N,y as P,z as v,D as g,i as C,E as B,G as x,H as O,J as o,K as E,N as T,f as L,O as S,Q as W,R as U,U as I,V as q,W as Q,X as V,Y,Z as $,_ as j,$ as z,a0 as X,a1 as F,a2 as G,a3 as H,a4 as J,a5 as K,a6 as Z,a7 as ee,a8 as te,a9 as ae,aa as se,ab as ne,ac as re,ad as le,ae as de,af as oe,ag as ie,ah as ue,ai as ge,aj as ce,ak as we,al as he,am as ye}from"./vendor-50e42c6c.js";const k="/",h=y.create({baseURL:k,withCredentials:!0});y.defaults.withCredentials=!0;y.defaults.baseURL=k;class R{getByName(e){return h.get("/api/v1/preferences/"+e)}getByNameNow(e){return h.get("/api/v1/preferences/"+e)}postByName(e,a){return h.post("/api/v1/preferences",{name:e,data:a})}}class A{post(e,a){let s="/api/v1/preferences";return h.post(s,{name:e,data:a})}}function fe(t,e=null){return new R().getByName(t).then(s=>Promise.resolve(m(t,s))).catch(()=>{new A().post(t,e).then(i=>Promise.resolve(m(t,i)))})}function m(t,e){return e.data.data.attributes.data}function w(t,e=null){const a=window.store.get("cacheValid");if(a&&window.hasOwnProperty(t))return Promise.resolve(window[t]);const s=window.store.get(t);return a&&typeof s<"u"?Promise.resolve(s):new R().getByName(t).then(u=>Promise.resolve(M(t,u))).catch(()=>{new A().post(t,e).then(n=>Promise.resolve(M(t,n)))})}function M(t,e){let a=e.data.data.attributes.data;return window.store.set(t,a),a}function be(t,e){let a,s;switch(t){case"last365":a=d(g(e,365)),s=l(e);break;case"last90":a=d(g(e,90)),s=l(e);break;case"last30":a=d(g(e,30)),s=l(e);break;case"last7":a=d(g(e,7)),s=l(e);break;case"YTD":a=v(e),s=l(e);break;case"QTD":a=p(e),s=l(e);break;case"MTD":a=c(e),s=l(e);break;case"1D":a=d(e),s=l(e);break;case"1W":a=d(N(e,{weekStartsOn:1})),s=l(P(e,{weekStartsOn:1}));break;case"1M":a=d(c(e)),s=l(b(e));break;case"3M":a=d(p(e)),s=l(_(e));break;case"6M":e.getMonth()<=5&&(a=new Date(e),a.setMonth(0),a.setDate(1),a=d(a),s=new Date(e),s.setMonth(5),s.setDate(30),s=l(a)),e.getMonth()>5&&(a=new Date(e),a.setMonth(6),a.setDate(1),a=d(a),s=new Date(e),s.setMonth(11),s.setDate(31),s=l(a));break;case"1Y":a=new Date(e),a.setMonth(0),a.setDate(1),a=d(a),s=new Date(e),s.setMonth(11),s.setDate(31),s=l(s);break}return{start:a,end:s}}let D=!1;function pe(t){if(D===!1){const e=t.replace("-","_");D=!0;const a=7*24*60*60*1e3;return console.log('Will load language "'+e+'"'),C.use(B).init({load:"languageOnly",fallbackLng:"en",lng:e,debug:!1,backend:{backends:[x,O],backendOptions:[{load:"languageOnly",expirationTime:a},{loadPath:"./v2/i18n/{{lng}}.json"}]}})}return console.warn("Loading translations skipped."),Promise.resolve()}o.addPlugin(E);window.bootstrapped=!1;window.store=o;fe("lastActivity").then(t=>{const e=o.get("lastActivity");o.set("cacheValid",e===t),o.set("lastActivity",t),console.log("Server value: "+t),console.log("Local value: "+e),console.log("Cache valid: "+(e===t))}).then(()=>{Promise.all([w("viewRange"),w("darkMode"),w("locale"),w("language")]).then(t=>{if(!o.get("start")||!o.get("end")){const e=be(t[0],new Date);o.set("start",e.start),o.set("end",e.end)}window.__localeId__=t[2],o.set("language",t[3]),o.set("locale",t[3]),pe(t[3]).then(()=>{const e=new Event("firefly-iii-bootstrapped");document.dispatchEvent(e),window.bootstrapped=!0})})});window.axios=y;window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest";window.Alpine=T;const f={bg:S,cs:W,da:U,de:I,el:q,enGB:Q,enUS:V,es:Y,ca:$,fi:j,fr:z,hu:X,id:F,it:G,ja:H,ko:J,nb:K,nn:Z,nl:ee,pl:te,ptBR:ae,pt:se,ro:ne,ru:re,sk:le,sl:de,sv:oe,tr:ie,uk:ue,vi:ge,zhTW:ce,zhCN:we};function r(t,e="PP"){let a=window.__localeId__.replace("_","");return L(t,e,{locale:f[a]??f[a.slice(0,2)]??f.enUS})}const Me=()=>({range:{start:null,end:null},defaultRange:{start:null,end:null},language:"en_US",init(){this.range={start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))},this.defaultRange={start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))},this.language=window.store.get("language"),this.locale=window.store.get("locale"),this.locale=this.locale==="equal"?this.language:this.locale,window.__localeId__=this.language,this.buildDateRange(),window.store.observe("start",t=>{this.range.start=new Date(t)}),window.store.observe("end",t=>{this.range.end=new Date(t),this.buildDateRange()})},buildDateRange(){let t=this.getNextRange(),e=this.getPrevRange(),a=this.lastDays(7),s=this.lastDays(30),i=this.mtd(),u=this.ytd(),n=document.getElementsByClassName("daterange-holder")[0];n.textContent=r(this.range.start)+" - "+r(this.range.end),n.setAttribute("data-start",r(this.range.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(this.range.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-current")[0],n.textContent=r(this.defaultRange.start)+" - "+r(this.defaultRange.end),n.setAttribute("data-start",r(this.defaultRange.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(this.defaultRange.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-next")[0],n.textContent=r(t.start)+" - "+r(t.end),n.setAttribute("data-start",r(t.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(t.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-prev")[0],n.textContent=r(e.start)+" - "+r(e.end),n.setAttribute("data-start",r(e.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(e.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-7d")[0],n.setAttribute("data-start",r(a.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(a.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-90d")[0],n.setAttribute("data-start",r(s.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(s.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-mtd")[0],n.setAttribute("data-start",r(i.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(i.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-ytd")[0],n.setAttribute("data-start",r(u.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(u.end,"yyyy-MM-dd"))},getNextRange(){let t=c(this.range.start),e=he(t,1),a=b(e);return{start:e,end:a}},getPrevRange(){let t=c(this.range.start),e=ye(t,1),a=b(e);return{start:e,end:a}},ytd(){let t=new Date;return{start:v(this.range.start),end:t}},mtd(){let t=new Date;return{start:c(this.range.start),end:t}},lastDays(t){let e=new Date;return{start:g(e,t),end:e}},changeDateRange(t){t.preventDefault();let e=t.currentTarget,a=new Date(e.getAttribute("data-start")),s=new Date(e.getAttribute("data-end"));return window.store.set("start",a),window.store.set("end",s),!1}});function De(t,e){let a=window.__localeId__.replace("_","-");return Intl.NumberFormat(a,{style:"currency",currency:e}).format(t)}export{A as P,h as a,r as b,Me as d,De as f,w as g}; diff --git a/public/build/assets/get-28b9aa25.js b/public/build/assets/get-28b9aa25.js new file mode 100644 index 0000000000..429dc34edc --- /dev/null +++ b/public/build/assets/get-28b9aa25.js @@ -0,0 +1 @@ +import{a as s}from"./format-money-2e5851ad.js";let t=class{list(a){return s.get("/api/v2/subscriptions",{params:a})}paid(a){return s.get("/api/v2/subscriptions/sum/paid",{params:a})}unpaid(a){return s.get("/api/v2/subscriptions/sum/unpaid",{params:a})}};class e{list(a){return s.get("/api/v2/piggy-banks",{params:a})}}export{t as G,e as a}; diff --git a/public/build/assets/get-e0a81c64.js b/public/build/assets/get-e0a81c64.js new file mode 100644 index 0000000000..4d023dbe96 --- /dev/null +++ b/public/build/assets/get-e0a81c64.js @@ -0,0 +1 @@ +import{a as t}from"./format-money-2e5851ad.js";class n{list(a){return t.get("/api/v2/transactions",{params:a})}infiniteList(a){return t.get("/api/v2/infinite/transactions",{params:a})}show(a,i){return t.get("/api/v2/transactions/"+a,{params:i})}}export{n as G}; diff --git a/public/build/assets/index-90222973.js b/public/build/assets/index-90222973.js new file mode 100644 index 0000000000..281c2a2b7f --- /dev/null +++ b/public/build/assets/index-90222973.js @@ -0,0 +1 @@ +import{b,d as V,f as u}from"./format-money-2e5851ad.js";import{M as E,I as j,f as m,i as d,o as C}from"./vendor-50e42c6c.js";import{P as c}from"./put-bb9ad93a.js";import{G as T}from"./get-e0a81c64.js";class v{init(t){document.addEventListener("cellValueChanged",()=>{console.log("I just realized a cell value has changed.")}),console.log("AmountEditor.init"),this.params=t,this.originalValue=t.value,this.eGui=document.createElement("div"),this.input=document.createElement("input"),this.input.type="number",this.input.min="0",this.input.step="any",this.input.style.overflow="hidden",this.input.style.textOverflow="ellipsis",this.input.autofocus=!0,this.input.value=parseFloat(t.value.amount).toFixed(t.value.decimal_places)}onChange(t){console.log("AmountEditor.onChange"),this.params.onValueChange(t),this.params.stopEditing(t)}afterGuiAttached(){this.input.focus(),this.input.select()}getGui(){return console.log("AmountEditor.getGui"),this.eGui.appendChild(this.input),this.eGui}getValue(){return console.log("AmountEditor.getValue"),this.originalValue.amount=parseFloat(this.input.value),this.submitAmount(this.originalValue),this.originalValue}submitAmount(t){console.log("AmountEditor.submitAmount"),console.log(t);const i=t.amount;console.log('New value for field "amount" in transaction journal #'+t.transaction_journal_id+" of group #"+t.id+' is "'+i+'"');let o={transactions:[{transaction_journal_id:t.transaction_journal_id,amount:i}]};new c().put(o,{id:t.id})}}class x{constructor(){this.type="all",this.rowCount=null,this.sortModel=null}rowCount(){return this.rowCount}getRows(t){console.log("The sort model used is: ",t.sortModel);let i=[];for(let a in t.sortModel)if(t.sortModel.hasOwnProperty(a)){let n=t.sortModel[a];i.push({column:n.colId,direction:n.sort})}new T().infiniteList({start_row:t.startRow,end_row:t.endRow,type:this.type,sorting:i}).then(a=>{this.parseTransactions(a.data.data,t.successCallback),this.rowCount=a.data.meta.pagination.total}).catch(a=>{console.log(a)})}parseTransactions(t,i){let o=[];for(let a in t)if(t.hasOwnProperty(a)){let n=t[a],s=n.attributes.transactions.length>1,f=!0;for(let g in n.attributes.transactions)if(n.attributes.transactions.hasOwnProperty(g)){let r=n.attributes.transactions[g],l={};l.split=s,l.firstSplit=f,l.group_title=n.attributes.group_title,l.created_at=n.attributes.created_at,l.updated_at=n.attributes.updated_at,l.user=n.attributes.user,l.user_group=n.attributes.user_group,l.id=parseInt(n.id),l.transaction_journal_id=parseInt(r.transaction_journal_id),l.description=r.description,l.date=new Date(r.date),l.from={name:r.source_name,id:r.source_id,type:r.source_type},l.to={name:r.destination_name,id:r.destination_id,type:r.destination_type},l.category={name:r.category_name,id:r.category_id},l.budget={name:r.budget_name,id:r.budget_id},l.amount={id:parseInt(n.id),transaction_journal_id:parseInt(r.transaction_journal_id),type:r.type,amount:r.amount,currency_code:r.currency_code,decimal_places:r.currency_decimal_places,foreign_amount:r.foreign_amount,foreign_currency_code:r.foreign_currency_code,foreign_decimal_places:r.foreign_currency_decimal_places},l.icon={classes:"fa fa-solid fa-arrow-left",id:l.id},f=!1,o.push(l)}}return i(o,!1),o}setType(t){this.type=t}}class A{init(t){console.log("DateTimeEditor.init"),this.params=t,this.originalValue=t.value,this.eGui=document.createElement("div"),this.input=document.createElement("input"),this.input.type="datetime-local",this.input.style.overflow="hidden",this.input.style.textOverflow="ellipsis",this.input.value=b(t.value,"yyyy-MM-dd HH:mm")}onChange(t){console.log("DateTimeEditor.onChange"),this.params.onValueChange(t),this.params.stopEditing(t)}afterGuiAttached(){this.input.focus()}getGui(){return console.log("DateTimeEditor.getGui"),this.eGui.appendChild(this.input),this.eGui}getValue(){return console.log("DateTimeEditor.getValue"),this.originalValue=this.input.value,this.originalValue}submitAmount(t){console.log("AmountEditor.submitAmount"),console.log(t);const i=t.amount;console.log('New value for field "amount" in transaction journal #'+t.transaction_journal_id+" of group #"+t.id+' is "'+i+'"');let o={transactions:[{transaction_journal_id:t.transaction_journal_id,amount:i}]};new c().put(o,{id:t.id})}}const _=new x,p=window.location.href.split("/"),M=p[p.length-1];_.setType(M);document.addEventListener("cellEditRequest",()=>{console.log("Loaded through event listener.")});let w;const R=["description","amount","date"],D=e=>{console.log("onCellEditRequestMethod");const t=e.data,i=e.colDef.field;let o=e.newValue;if(!R.includes(i)){console.log("Field "+i+" is not editable.");return}i==="amount"&&(o=e.newValue.amount,console.log("New value is now"+o)),console.log('New value for field "'+i+'" in transaction journal #'+t.transaction_journal_id+" of group #"+t.id+' is "'+o+'"'),t[i]=o,w.getRowNode(String(e.rowIndex)).updateData(t);let n={transactions:[{transaction_journal_id:t.transaction_journal_id}]};n.transactions[0][i]=o,new c().put(n,{id:t.id})};document.addEventListener("cellValueChanged",()=>{console.log("I just realized a cell value has changed.")});document.addEventListener("onCellValueChanged",()=>{console.log("I just realized a cell value has changed.")});const G={rowModelType:"infinite",datasource:_,onCellEditRequest:D,readOnlyEdit:!0,columnDefs:[{field:"icon",editable:!1,headerName:"",sortable:!1,width:40,cellRenderer:function(e){return e.getValue()?'':""}},{field:"description",cellDataType:"text",editable:!0},{field:"amount",editable:function(e){return e.data.amount.foreign_amount===null&&e.data.amount.foreign_currency_code===null},cellEditor:v,cellRenderer(e){if(e.getValue()){let t="",i=parseFloat(e.getValue().amount),o=e.getValue(),a="text-danger";if(o.type==="withdrawal"&&(i=i*-1),o.type==="deposit"&&(a="text-success"),o.type==="transfer"&&(a="text-info"),t+=''+u(i,e.getValue().currency_code)+"",o.foreign_amount){let n=parseFloat(e.getValue().foreign_amount);o.type==="withdrawal"&&(n=n*-1),t+=' ('+u(n,o.foreign_currency_code)+")"}return t}return""}},{field:"date",editable:!0,cellDataType:"date",cellEditor:A,cellEditorPopup:!0,cellEditorPopupPosition:"under",cellRenderer(e){return e.getValue()?m(e.getValue(),d.t("config.date_time_fns_short")):""}},{field:"from",cellDataType:"text",cellRenderer:function(e){if(e.getValue()){let t=e.getValue();return''+t.name+""}return""}},{field:"to",cellDataType:"text",cellRenderer:function(e){if(e.getValue()){let t=e.getValue();return''+t.name+""}return""}},{field:"category",cellDataType:"text",cellRenderer:function(e){if(e.getValue()){let t=e.getValue();if(t.id!==null)return''+t.name+""}return""}},{field:"budget",cellDataType:"text",cellRenderer:function(e){if(e.getValue()){let t=e.getValue();if(t.id!==null)return''+t.name+""}return""}}]};E.registerModules([j]);let P=function(){return{notifications:{error:{show:!1,text:"",url:""},success:{show:!1,text:"",url:""},wait:{show:!1,text:""}},transactions:[],totalPages:1,perPage:50,page:1,tableColumns:{description:{enabled:!0},source:{enabled:!0},destination:{enabled:!0},amount:{enabled:!0}},table:null,formatMoney(e,t){return u(e,t)},format(e){return m(e,d.t("config.date_time_fns"))},init(){this.notifications.wait.show=!0,this.notifications.wait.text=d.t("firefly.wait_loading_data"),w=C(document.querySelector("#grid"),G)},parseTransactions(e){for(let t in e)if(e.hasOwnProperty(t)){let i=e[t],o=i.attributes.transactions.length>1,a=!0;for(let n in i.attributes.transactions)if(i.attributes.transactions.hasOwnProperty(n)){let s=i.attributes.transactions[n];s.split=o,tranaction.icon="fa fa-solid fa-arrow-left",s.firstSplit=a,s.group_title=i.attributes.group_title,s.id=i.id,s.created_at=i.attributes.created_at,s.updated_at=i.attributes.updated_at,s.user=i.attributes.user,s.user_group=i.attributes.user_group,a=!1,this.transactions.push(s)}}this.notifications.wait.show=!1,console.log("refresh!")}}},h={index:P,dates:V};function y(){Object.keys(h).forEach(e=>{console.log(`Loading page component "${e}"`);let t=h[e]();Alpine.data(e,()=>t)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{console.log("Loaded through event listener."),y()});window.bootstrapped&&(console.log("Loaded through window variable."),y()); diff --git a/public/build/assets/index-badb0a41.css b/public/build/assets/index-badb0a41.css new file mode 100644 index 0000000000..cf22823e9c --- /dev/null +++ b/public/build/assets/index-badb0a41.css @@ -0,0 +1 @@ +.ag-theme-firefly-iii .ag-root,.ag-theme-firefly-iii .ag-root-wrapper{border:0} diff --git a/public/build/assets/layers-1dbbe9d0.png b/public/build/assets/layers-1dbbe9d0.png new file mode 100644 index 0000000000..1a72e5784b Binary files /dev/null and b/public/build/assets/layers-1dbbe9d0.png differ diff --git a/public/build/assets/layers-2x-066daca8.png b/public/build/assets/layers-2x-066daca8.png new file mode 100644 index 0000000000..200c333dca Binary files /dev/null and b/public/build/assets/layers-2x-066daca8.png differ diff --git a/public/build/assets/load-translations-9a154502.js b/public/build/assets/load-translations-9a154502.js deleted file mode 100644 index 4f53dc6dd5..0000000000 --- a/public/build/assets/load-translations-9a154502.js +++ /dev/null @@ -1,19 +0,0 @@ -function bind$4(t,e){return function(){return t.apply(e,arguments)}}const{toString:toString$7}=Object.prototype,{getPrototypeOf}=Object,kindOf=(t=>e=>{const a=toString$7.call(e);return t[a]||(t[a]=a.slice(8,-1).toLowerCase())})(Object.create(null)),kindOfTest=t=>(t=t.toLowerCase(),e=>kindOf(e)===t),typeOfTest=t=>e=>typeof e===t,{isArray:isArray$c}=Array,isUndefined=typeOfTest("undefined");function isBuffer$3(t){return t!==null&&!isUndefined(t)&&t.constructor!==null&&!isUndefined(t.constructor)&&isFunction$5(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}const isArrayBuffer=kindOfTest("ArrayBuffer");function isArrayBufferView(t){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(t):e=t&&t.buffer&&isArrayBuffer(t.buffer),e}const isString$1=typeOfTest("string"),isFunction$5=typeOfTest("function"),isNumber=typeOfTest("number"),isObject$b=t=>t!==null&&typeof t=="object",isBoolean=t=>t===!0||t===!1,isPlainObject=t=>{if(kindOf(t)!=="object")return!1;const e=getPrototypeOf(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)},isDate$1=kindOfTest("Date"),isFile=kindOfTest("File"),isBlob=kindOfTest("Blob"),isFileList=kindOfTest("FileList"),isStream=t=>isObject$b(t)&&isFunction$5(t.pipe),isFormData=t=>{let e;return t&&(typeof FormData=="function"&&t instanceof FormData||isFunction$5(t.append)&&((e=kindOf(t))==="formdata"||e==="object"&&isFunction$5(t.toString)&&t.toString()==="[object FormData]"))},isURLSearchParams=kindOfTest("URLSearchParams"),trim$2=t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function forEach(t,e,{allOwnKeys:a=!1}={}){if(t===null||typeof t>"u")return;let r,n;if(typeof t!="object"&&(t=[t]),isArray$c(t))for(r=0,n=t.length;r0;)if(n=a[r],e===n.toLowerCase())return n;return null}const _global=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),isContextDefined=t=>!isUndefined(t)&&t!==_global;function merge(){const{caseless:t}=isContextDefined(this)&&this||{},e={},a=(r,n)=>{const i=t&&findKey$1(e,n)||n;isPlainObject(e[i])&&isPlainObject(r)?e[i]=merge(e[i],r):isPlainObject(r)?e[i]=merge({},r):isArray$c(r)?e[i]=r.slice():e[i]=r};for(let r=0,n=arguments.length;r(forEach(e,(n,i)=>{a&&isFunction$5(n)?t[i]=bind$4(n,a):t[i]=n},{allOwnKeys:r}),t),stripBOM=t=>(t.charCodeAt(0)===65279&&(t=t.slice(1)),t),inherits=(t,e,a,r)=>{t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),a&&Object.assign(t.prototype,a)},toFlatObject=(t,e,a,r)=>{let n,i,o;const s={};if(e=e||{},t==null)return e;do{for(n=Object.getOwnPropertyNames(t),i=n.length;i-- >0;)o=n[i],(!r||r(o,t,e))&&!s[o]&&(e[o]=t[o],s[o]=!0);t=a!==!1&&getPrototypeOf(t)}while(t&&(!a||a(t,e))&&t!==Object.prototype);return e},endsWith=(t,e,a)=>{t=String(t),(a===void 0||a>t.length)&&(a=t.length),a-=e.length;const r=t.indexOf(e,a);return r!==-1&&r===a},toArray=t=>{if(!t)return null;if(isArray$c(t))return t;let e=t.length;if(!isNumber(e))return null;const a=new Array(e);for(;e-- >0;)a[e]=t[e];return a},isTypedArray$3=(t=>e=>t&&e instanceof t)(typeof Uint8Array<"u"&&getPrototypeOf(Uint8Array)),forEachEntry=(t,e)=>{const r=(t&&t[Symbol.iterator]).call(t);let n;for(;(n=r.next())&&!n.done;){const i=n.value;e.call(t,i[0],i[1])}},matchAll=(t,e)=>{let a;const r=[];for(;(a=t.exec(e))!==null;)r.push(a);return r},isHTMLForm=kindOfTest("HTMLFormElement"),toCamelCase=t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(a,r,n){return r.toUpperCase()+n}),hasOwnProperty$c=(({hasOwnProperty:t})=>(e,a)=>t.call(e,a))(Object.prototype),isRegExp=kindOfTest("RegExp"),reduceDescriptors=(t,e)=>{const a=Object.getOwnPropertyDescriptors(t),r={};forEach(a,(n,i)=>{let o;(o=e(n,i,t))!==!1&&(r[i]=o||n)}),Object.defineProperties(t,r)},freezeMethods=t=>{reduceDescriptors(t,(e,a)=>{if(isFunction$5(t)&&["arguments","caller","callee"].indexOf(a)!==-1)return!1;const r=t[a];if(isFunction$5(r)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+a+"'")})}})},toObjectSet=(t,e)=>{const a={},r=n=>{n.forEach(i=>{a[i]=!0})};return isArray$c(t)?r(t):r(String(t).split(e)),a},noop$3=()=>{},toFiniteNumber=(t,e)=>(t=+t,Number.isFinite(t)?t:e),ALPHA="abcdefghijklmnopqrstuvwxyz",DIGIT="0123456789",ALPHABET={DIGIT,ALPHA,ALPHA_DIGIT:ALPHA+ALPHA.toUpperCase()+DIGIT},generateString=(t=16,e=ALPHABET.ALPHA_DIGIT)=>{let a="";const{length:r}=e;for(;t--;)a+=e[Math.random()*r|0];return a};function isSpecCompliantForm(t){return!!(t&&isFunction$5(t.append)&&t[Symbol.toStringTag]==="FormData"&&t[Symbol.iterator])}const toJSONObject=t=>{const e=new Array(10),a=(r,n)=>{if(isObject$b(r)){if(e.indexOf(r)>=0)return;if(!("toJSON"in r)){e[n]=r;const i=isArray$c(r)?[]:{};return forEach(r,(o,s)=>{const u=a(o,n+1);!isUndefined(u)&&(i[s]=u)}),e[n]=void 0,i}}return r};return a(t,0)},isAsyncFn=kindOfTest("AsyncFunction"),isThenable=t=>t&&(isObject$b(t)||isFunction$5(t))&&isFunction$5(t.then)&&isFunction$5(t.catch),utils={isArray:isArray$c,isArrayBuffer,isBuffer:isBuffer$3,isFormData,isArrayBufferView,isString:isString$1,isNumber,isBoolean,isObject:isObject$b,isPlainObject,isUndefined,isDate:isDate$1,isFile,isBlob,isRegExp,isFunction:isFunction$5,isStream,isURLSearchParams,isTypedArray:isTypedArray$3,isFileList,forEach,merge,extend,trim:trim$2,stripBOM,inherits,toFlatObject,kindOf,kindOfTest,endsWith,toArray,forEachEntry,matchAll,isHTMLForm,hasOwnProperty:hasOwnProperty$c,hasOwnProp:hasOwnProperty$c,reduceDescriptors,freezeMethods,toObjectSet,toCamelCase,noop:noop$3,toFiniteNumber,findKey:findKey$1,global:_global,isContextDefined,ALPHABET,generateString,isSpecCompliantForm,toJSONObject,isAsyncFn,isThenable};function AxiosError(t,e,a,r,n){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=t,this.name="AxiosError",e&&(this.code=e),a&&(this.config=a),r&&(this.request=r),n&&(this.response=n)}utils.inherits(AxiosError,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:utils.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const prototype$1=AxiosError.prototype,descriptors={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(t=>{descriptors[t]={value:t}});Object.defineProperties(AxiosError,descriptors);Object.defineProperty(prototype$1,"isAxiosError",{value:!0});AxiosError.from=(t,e,a,r,n,i)=>{const o=Object.create(prototype$1);return utils.toFlatObject(t,o,function(u){return u!==Error.prototype},s=>s!=="isAxiosError"),AxiosError.call(o,t.message,e,a,r,n),o.cause=t,o.name=t.name,i&&Object.assign(o,i),o};const httpAdapter=null;function isVisitable(t){return utils.isPlainObject(t)||utils.isArray(t)}function removeBrackets(t){return utils.endsWith(t,"[]")?t.slice(0,-2):t}function renderKey(t,e,a){return t?t.concat(e).map(function(n,i){return n=removeBrackets(n),!a&&i?"["+n+"]":n}).join(a?".":""):e}function isFlatArray(t){return utils.isArray(t)&&!t.some(isVisitable)}const predicates=utils.toFlatObject(utils,{},null,function(e){return/^is[A-Z]/.test(e)});function toFormData(t,e,a){if(!utils.isObject(t))throw new TypeError("target must be an object");e=e||new FormData,a=utils.toFlatObject(a,{metaTokens:!0,dots:!1,indexes:!1},!1,function(O,M){return!utils.isUndefined(M[O])});const r=a.metaTokens,n=a.visitor||l,i=a.dots,o=a.indexes,u=(a.Blob||typeof Blob<"u"&&Blob)&&utils.isSpecCompliantForm(e);if(!utils.isFunction(n))throw new TypeError("visitor must be a function");function c(T){if(T===null)return"";if(utils.isDate(T))return T.toISOString();if(!u&&utils.isBlob(T))throw new AxiosError("Blob is not supported. Use a Buffer instead.");return utils.isArrayBuffer(T)||utils.isTypedArray(T)?u&&typeof Blob=="function"?new Blob([T]):Buffer.from(T):T}function l(T,O,M){let C=T;if(T&&!M&&typeof T=="object"){if(utils.endsWith(O,"{}"))O=r?O:O.slice(0,-2),T=JSON.stringify(T);else if(utils.isArray(T)&&isFlatArray(T)||(utils.isFileList(T)||utils.endsWith(O,"[]"))&&(C=utils.toArray(T)))return O=removeBrackets(O),C.forEach(function(L,D){!(utils.isUndefined(L)||L===null)&&e.append(o===!0?renderKey([O],D,i):o===null?O:O+"[]",c(L))}),!1}return isVisitable(T)?!0:(e.append(renderKey(M,O,i),c(T)),!1)}const p=[],v=Object.assign(predicates,{defaultVisitor:l,convertValue:c,isVisitable});function S(T,O){if(!utils.isUndefined(T)){if(p.indexOf(T)!==-1)throw Error("Circular reference detected in "+O.join("."));p.push(T),utils.forEach(T,function(C,w){(!(utils.isUndefined(C)||C===null)&&n.call(e,C,utils.isString(w)?w.trim():w,O,v))===!0&&S(C,O?O.concat(w):[w])}),p.pop()}}if(!utils.isObject(t))throw new TypeError("data must be an object");return S(t),e}function encode$1(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(r){return e[r]})}function AxiosURLSearchParams(t,e){this._pairs=[],t&&toFormData(t,this,e)}const prototype=AxiosURLSearchParams.prototype;prototype.append=function(e,a){this._pairs.push([e,a])};prototype.toString=function(e){const a=e?function(r){return e.call(this,r,encode$1)}:encode$1;return this._pairs.map(function(n){return a(n[0])+"="+a(n[1])},"").join("&")};function encode(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function buildURL(t,e,a){if(!e)return t;const r=a&&a.encode||encode,n=a&&a.serialize;let i;if(n?i=n(e,a):i=utils.isURLSearchParams(e)?e.toString():new AxiosURLSearchParams(e,a).toString(r),i){const o=t.indexOf("#");o!==-1&&(t=t.slice(0,o)),t+=(t.indexOf("?")===-1?"?":"&")+i}return t}class InterceptorManager{constructor(){this.handlers=[]}use(e,a,r){return this.handlers.push({fulfilled:e,rejected:a,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){utils.forEach(this.handlers,function(r){r!==null&&e(r)})}}const InterceptorManager$1=InterceptorManager,transitionalDefaults={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},URLSearchParams$1=typeof URLSearchParams<"u"?URLSearchParams:AxiosURLSearchParams,FormData$1=typeof FormData<"u"?FormData:null,Blob$1=typeof Blob<"u"?Blob:null,isStandardBrowserEnv=(()=>{let t;return typeof navigator<"u"&&((t=navigator.product)==="ReactNative"||t==="NativeScript"||t==="NS")?!1:typeof window<"u"&&typeof document<"u"})(),isStandardBrowserWebWorkerEnv=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),platform={isBrowser:!0,classes:{URLSearchParams:URLSearchParams$1,FormData:FormData$1,Blob:Blob$1},isStandardBrowserEnv,isStandardBrowserWebWorkerEnv,protocols:["http","https","file","blob","url","data"]};function toURLEncodedForm(t,e){return toFormData(t,new platform.classes.URLSearchParams,Object.assign({visitor:function(a,r,n,i){return platform.isNode&&utils.isBuffer(a)?(this.append(r,a.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},e))}function parsePropPath(t){return utils.matchAll(/\w+|\[(\w*)]/g,t).map(e=>e[0]==="[]"?"":e[1]||e[0])}function arrayToObject(t){const e={},a=Object.keys(t);let r;const n=a.length;let i;for(r=0;r=a.length;return o=!o&&utils.isArray(n)?n.length:o,u?(utils.hasOwnProp(n,o)?n[o]=[n[o],r]:n[o]=r,!s):((!n[o]||!utils.isObject(n[o]))&&(n[o]=[]),e(a,r,n[o],i)&&utils.isArray(n[o])&&(n[o]=arrayToObject(n[o])),!s)}if(utils.isFormData(t)&&utils.isFunction(t.entries)){const a={};return utils.forEachEntry(t,(r,n)=>{e(parsePropPath(r),n,a,0)}),a}return null}function stringifySafely(t,e,a){if(utils.isString(t))try{return(e||JSON.parse)(t),utils.trim(t)}catch(r){if(r.name!=="SyntaxError")throw r}return(a||JSON.stringify)(t)}const defaults={transitional:transitionalDefaults,adapter:["xhr","http"],transformRequest:[function(e,a){const r=a.getContentType()||"",n=r.indexOf("application/json")>-1,i=utils.isObject(e);if(i&&utils.isHTMLForm(e)&&(e=new FormData(e)),utils.isFormData(e))return n&&n?JSON.stringify(formDataToJSON(e)):e;if(utils.isArrayBuffer(e)||utils.isBuffer(e)||utils.isStream(e)||utils.isFile(e)||utils.isBlob(e))return e;if(utils.isArrayBufferView(e))return e.buffer;if(utils.isURLSearchParams(e))return a.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return toURLEncodedForm(e,this.formSerializer).toString();if((s=utils.isFileList(e))||r.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return toFormData(s?{"files[]":e}:e,u&&new u,this.formSerializer)}}return i||n?(a.setContentType("application/json",!1),stringifySafely(e)):e}],transformResponse:[function(e){const a=this.transitional||defaults.transitional,r=a&&a.forcedJSONParsing,n=this.responseType==="json";if(e&&utils.isString(e)&&(r&&!this.responseType||n)){const o=!(a&&a.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(s){if(o)throw s.name==="SyntaxError"?AxiosError.from(s,AxiosError.ERR_BAD_RESPONSE,this,null,this.response):s}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:platform.classes.FormData,Blob:platform.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};utils.forEach(["delete","get","head","post","put","patch"],t=>{defaults.headers[t]={}});const defaults$1=defaults,ignoreDuplicateOf=utils.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),parseHeaders=t=>{const e={};let a,r,n;return t&&t.split(` -`).forEach(function(o){n=o.indexOf(":"),a=o.substring(0,n).trim().toLowerCase(),r=o.substring(n+1).trim(),!(!a||e[a]&&ignoreDuplicateOf[a])&&(a==="set-cookie"?e[a]?e[a].push(r):e[a]=[r]:e[a]=e[a]?e[a]+", "+r:r)}),e},$internals=Symbol("internals");function normalizeHeader(t){return t&&String(t).trim().toLowerCase()}function normalizeValue(t){return t===!1||t==null?t:utils.isArray(t)?t.map(normalizeValue):String(t)}function parseTokens(t){const e=Object.create(null),a=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=a.exec(t);)e[r[1]]=r[2];return e}const isValidHeaderName=t=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim());function matchHeaderValue(t,e,a,r,n){if(utils.isFunction(r))return r.call(this,e,a);if(n&&(e=a),!!utils.isString(e)){if(utils.isString(r))return e.indexOf(r)!==-1;if(utils.isRegExp(r))return r.test(e)}}function formatHeader(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,a,r)=>a.toUpperCase()+r)}function buildAccessors(t,e){const a=utils.toCamelCase(" "+e);["get","set","has"].forEach(r=>{Object.defineProperty(t,r+a,{value:function(n,i,o){return this[r].call(this,e,n,i,o)},configurable:!0})})}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,a,r){const n=this;function i(s,u,c){const l=normalizeHeader(u);if(!l)throw new Error("header name must be a non-empty string");const p=utils.findKey(n,l);(!p||n[p]===void 0||c===!0||c===void 0&&n[p]!==!1)&&(n[p||u]=normalizeValue(s))}const o=(s,u)=>utils.forEach(s,(c,l)=>i(c,l,u));return utils.isPlainObject(e)||e instanceof this.constructor?o(e,a):utils.isString(e)&&(e=e.trim())&&!isValidHeaderName(e)?o(parseHeaders(e),a):e!=null&&i(a,e,r),this}get(e,a){if(e=normalizeHeader(e),e){const r=utils.findKey(this,e);if(r){const n=this[r];if(!a)return n;if(a===!0)return parseTokens(n);if(utils.isFunction(a))return a.call(this,n,r);if(utils.isRegExp(a))return a.exec(n);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,a){if(e=normalizeHeader(e),e){const r=utils.findKey(this,e);return!!(r&&this[r]!==void 0&&(!a||matchHeaderValue(this,this[r],r,a)))}return!1}delete(e,a){const r=this;let n=!1;function i(o){if(o=normalizeHeader(o),o){const s=utils.findKey(r,o);s&&(!a||matchHeaderValue(r,r[s],s,a))&&(delete r[s],n=!0)}}return utils.isArray(e)?e.forEach(i):i(e),n}clear(e){const a=Object.keys(this);let r=a.length,n=!1;for(;r--;){const i=a[r];(!e||matchHeaderValue(this,this[i],i,e,!0))&&(delete this[i],n=!0)}return n}normalize(e){const a=this,r={};return utils.forEach(this,(n,i)=>{const o=utils.findKey(r,i);if(o){a[o]=normalizeValue(n),delete a[i];return}const s=e?formatHeader(i):String(i).trim();s!==i&&delete a[i],a[s]=normalizeValue(n),r[s]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const a=Object.create(null);return utils.forEach(this,(r,n)=>{r!=null&&r!==!1&&(a[n]=e&&utils.isArray(r)?r.join(", "):r)}),a}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,a])=>e+": "+a).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...a){const r=new this(e);return a.forEach(n=>r.set(n)),r}static accessor(e){const r=(this[$internals]=this[$internals]={accessors:{}}).accessors,n=this.prototype;function i(o){const s=normalizeHeader(o);r[s]||(buildAccessors(n,o),r[s]=!0)}return utils.isArray(e)?e.forEach(i):i(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils.reduceDescriptors(AxiosHeaders.prototype,({value:t},e)=>{let a=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(r){this[a]=r}}});utils.freezeMethods(AxiosHeaders);const AxiosHeaders$1=AxiosHeaders;function transformData(t,e){const a=this||defaults$1,r=e||a,n=AxiosHeaders$1.from(r.headers);let i=r.data;return utils.forEach(t,function(s){i=s.call(a,i,n.normalize(),e?e.status:void 0)}),n.normalize(),i}function isCancel(t){return!!(t&&t.__CANCEL__)}function CanceledError(t,e,a){AxiosError.call(this,t??"canceled",AxiosError.ERR_CANCELED,e,a),this.name="CanceledError"}utils.inherits(CanceledError,AxiosError,{__CANCEL__:!0});function settle(t,e,a){const r=a.config.validateStatus;!a.status||!r||r(a.status)?t(a):e(new AxiosError("Request failed with status code "+a.status,[AxiosError.ERR_BAD_REQUEST,AxiosError.ERR_BAD_RESPONSE][Math.floor(a.status/100)-4],a.config,a.request,a))}const cookies=platform.isStandardBrowserEnv?function(){return{write:function(a,r,n,i,o,s){const u=[];u.push(a+"="+encodeURIComponent(r)),utils.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),utils.isString(i)&&u.push("path="+i),utils.isString(o)&&u.push("domain="+o),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(a){const r=document.cookie.match(new RegExp("(^|;\\s*)("+a+")=([^;]*)"));return r?decodeURIComponent(r[3]):null},remove:function(a){this.write(a,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}();function isAbsoluteURL(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}function combineURLs(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}function buildFullPath(t,e){return t&&!isAbsoluteURL(e)?combineURLs(t,e):e}const isURLSameOrigin=platform.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),a=document.createElement("a");let r;function n(i){let o=i;return e&&(a.setAttribute("href",o),o=a.href),a.setAttribute("href",o),{href:a.href,protocol:a.protocol?a.protocol.replace(/:$/,""):"",host:a.host,search:a.search?a.search.replace(/^\?/,""):"",hash:a.hash?a.hash.replace(/^#/,""):"",hostname:a.hostname,port:a.port,pathname:a.pathname.charAt(0)==="/"?a.pathname:"/"+a.pathname}}return r=n(window.location.href),function(o){const s=utils.isString(o)?n(o):o;return s.protocol===r.protocol&&s.host===r.host}}():function(){return function(){return!0}}();function parseProtocol(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}function speedometer(t,e){t=t||10;const a=new Array(t),r=new Array(t);let n=0,i=0,o;return e=e!==void 0?e:1e3,function(u){const c=Date.now(),l=r[i];o||(o=c),a[n]=u,r[n]=c;let p=i,v=0;for(;p!==n;)v+=a[p++],p=p%t;if(n=(n+1)%t,n===i&&(i=(i+1)%t),c-o{const i=n.loaded,o=n.lengthComputable?n.total:void 0,s=i-a,u=r(s),c=i<=o;a=i;const l={loaded:i,total:o,progress:o?i/o:void 0,bytes:s,rate:u||void 0,estimated:u&&o&&c?(o-i)/u:void 0,event:n};l[e?"download":"upload"]=!0,t(l)}}const isXHRAdapterSupported=typeof XMLHttpRequest<"u",xhrAdapter=isXHRAdapterSupported&&function(t){return new Promise(function(a,r){let n=t.data;const i=AxiosHeaders$1.from(t.headers).normalize(),o=t.responseType;let s;function u(){t.cancelToken&&t.cancelToken.unsubscribe(s),t.signal&&t.signal.removeEventListener("abort",s)}let c;utils.isFormData(n)&&(platform.isStandardBrowserEnv||platform.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.getContentType(/^\s*multipart\/form-data/)?utils.isString(c=i.getContentType())&&i.setContentType(c.replace(/^\s*(multipart\/form-data);+/,"$1")):i.setContentType("multipart/form-data"));let l=new XMLHttpRequest;if(t.auth){const T=t.auth.username||"",O=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";i.set("Authorization","Basic "+btoa(T+":"+O))}const p=buildFullPath(t.baseURL,t.url);l.open(t.method.toUpperCase(),buildURL(p,t.params,t.paramsSerializer),!0),l.timeout=t.timeout;function v(){if(!l)return;const T=AxiosHeaders$1.from("getAllResponseHeaders"in l&&l.getAllResponseHeaders()),M={data:!o||o==="text"||o==="json"?l.responseText:l.response,status:l.status,statusText:l.statusText,headers:T,config:t,request:l};settle(function(w){a(w),u()},function(w){r(w),u()},M),l=null}if("onloadend"in l?l.onloadend=v:l.onreadystatechange=function(){!l||l.readyState!==4||l.status===0&&!(l.responseURL&&l.responseURL.indexOf("file:")===0)||setTimeout(v)},l.onabort=function(){l&&(r(new AxiosError("Request aborted",AxiosError.ECONNABORTED,t,l)),l=null)},l.onerror=function(){r(new AxiosError("Network Error",AxiosError.ERR_NETWORK,t,l)),l=null},l.ontimeout=function(){let O=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded";const M=t.transitional||transitionalDefaults;t.timeoutErrorMessage&&(O=t.timeoutErrorMessage),r(new AxiosError(O,M.clarifyTimeoutError?AxiosError.ETIMEDOUT:AxiosError.ECONNABORTED,t,l)),l=null},platform.isStandardBrowserEnv){const T=(t.withCredentials||isURLSameOrigin(p))&&t.xsrfCookieName&&cookies.read(t.xsrfCookieName);T&&i.set(t.xsrfHeaderName,T)}n===void 0&&i.setContentType(null),"setRequestHeader"in l&&utils.forEach(i.toJSON(),function(O,M){l.setRequestHeader(M,O)}),utils.isUndefined(t.withCredentials)||(l.withCredentials=!!t.withCredentials),o&&o!=="json"&&(l.responseType=t.responseType),typeof t.onDownloadProgress=="function"&&l.addEventListener("progress",progressEventReducer(t.onDownloadProgress,!0)),typeof t.onUploadProgress=="function"&&l.upload&&l.upload.addEventListener("progress",progressEventReducer(t.onUploadProgress)),(t.cancelToken||t.signal)&&(s=T=>{l&&(r(!T||T.type?new CanceledError(null,t,l):T),l.abort(),l=null)},t.cancelToken&&t.cancelToken.subscribe(s),t.signal&&(t.signal.aborted?s():t.signal.addEventListener("abort",s)));const S=parseProtocol(p);if(S&&platform.protocols.indexOf(S)===-1){r(new AxiosError("Unsupported protocol "+S+":",AxiosError.ERR_BAD_REQUEST,t));return}l.send(n||null)})},knownAdapters={http:httpAdapter,xhr:xhrAdapter};utils.forEach(knownAdapters,(t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch{}Object.defineProperty(t,"adapterName",{value:e})}});const renderReason=t=>`- ${t}`,isResolvedHandle=t=>utils.isFunction(t)||t===null||t===!1,adapters={getAdapter:t=>{t=utils.isArray(t)?t:[t];const{length:e}=t;let a,r;const n={};for(let i=0;i`adapter ${s} `+(u===!1?"is not supported by the environment":"is not available in the build"));let o=e?i.length>1?`since : -`+i.map(renderReason).join(` -`):" "+renderReason(i[0]):"as no adapter specified";throw new AxiosError("There is no suitable adapter to dispatch the request "+o,"ERR_NOT_SUPPORT")}return r},adapters:knownAdapters};function throwIfCancellationRequested(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new CanceledError(null,t)}function dispatchRequest(t){return throwIfCancellationRequested(t),t.headers=AxiosHeaders$1.from(t.headers),t.data=transformData.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),adapters.getAdapter(t.adapter||defaults$1.adapter)(t).then(function(r){return throwIfCancellationRequested(t),r.data=transformData.call(t,t.transformResponse,r),r.headers=AxiosHeaders$1.from(r.headers),r},function(r){return isCancel(r)||(throwIfCancellationRequested(t),r&&r.response&&(r.response.data=transformData.call(t,t.transformResponse,r.response),r.response.headers=AxiosHeaders$1.from(r.response.headers))),Promise.reject(r)})}const headersToObject=t=>t instanceof AxiosHeaders$1?t.toJSON():t;function mergeConfig(t,e){e=e||{};const a={};function r(c,l,p){return utils.isPlainObject(c)&&utils.isPlainObject(l)?utils.merge.call({caseless:p},c,l):utils.isPlainObject(l)?utils.merge({},l):utils.isArray(l)?l.slice():l}function n(c,l,p){if(utils.isUndefined(l)){if(!utils.isUndefined(c))return r(void 0,c,p)}else return r(c,l,p)}function i(c,l){if(!utils.isUndefined(l))return r(void 0,l)}function o(c,l){if(utils.isUndefined(l)){if(!utils.isUndefined(c))return r(void 0,c)}else return r(void 0,l)}function s(c,l,p){if(p in e)return r(c,l);if(p in t)return r(void 0,c)}const u={url:i,method:i,data:i,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:s,headers:(c,l)=>n(headersToObject(c),headersToObject(l),!0)};return utils.forEach(Object.keys(Object.assign({},t,e)),function(l){const p=u[l]||n,v=p(t[l],e[l],l);utils.isUndefined(v)&&p!==s||(a[l]=v)}),a}const VERSION$1="1.5.1",validators$1={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{validators$1[t]=function(r){return typeof r===t||"a"+(e<1?"n ":" ")+t}});const deprecatedWarnings={};validators$1.transitional=function(e,a,r){function n(i,o){return"[Axios v"+VERSION$1+"] Transitional option '"+i+"'"+o+(r?". "+r:"")}return(i,o,s)=>{if(e===!1)throw new AxiosError(n(o," has been removed"+(a?" in "+a:"")),AxiosError.ERR_DEPRECATED);return a&&!deprecatedWarnings[o]&&(deprecatedWarnings[o]=!0,console.warn(n(o," has been deprecated since v"+a+" and will be removed in the near future"))),e?e(i,o,s):!0}};function assertOptions(t,e,a){if(typeof t!="object")throw new AxiosError("options must be an object",AxiosError.ERR_BAD_OPTION_VALUE);const r=Object.keys(t);let n=r.length;for(;n-- >0;){const i=r[n],o=e[i];if(o){const s=t[i],u=s===void 0||o(s,i,t);if(u!==!0)throw new AxiosError("option "+i+" must be "+u,AxiosError.ERR_BAD_OPTION_VALUE);continue}if(a!==!0)throw new AxiosError("Unknown option "+i,AxiosError.ERR_BAD_OPTION)}}const validator={assertOptions,validators:validators$1},validators=validator.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new InterceptorManager$1,response:new InterceptorManager$1}}request(e,a){typeof e=="string"?(a=a||{},a.url=e):a=e||{},a=mergeConfig(this.defaults,a);const{transitional:r,paramsSerializer:n,headers:i}=a;r!==void 0&&validator.assertOptions(r,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),n!=null&&(utils.isFunction(n)?a.paramsSerializer={serialize:n}:validator.assertOptions(n,{encode:validators.function,serialize:validators.function},!0)),a.method=(a.method||this.defaults.method||"get").toLowerCase();let o=i&&utils.merge(i.common,i[a.method]);i&&utils.forEach(["delete","get","head","post","put","patch","common"],T=>{delete i[T]}),a.headers=AxiosHeaders$1.concat(o,i);const s=[];let u=!0;this.interceptors.request.forEach(function(O){typeof O.runWhen=="function"&&O.runWhen(a)===!1||(u=u&&O.synchronous,s.unshift(O.fulfilled,O.rejected))});const c=[];this.interceptors.response.forEach(function(O){c.push(O.fulfilled,O.rejected)});let l,p=0,v;if(!u){const T=[dispatchRequest.bind(this),void 0];for(T.unshift.apply(T,s),T.push.apply(T,c),v=T.length,l=Promise.resolve(a);p{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](n);r._listeners=null}),this.promise.then=n=>{let i;const o=new Promise(s=>{r.subscribe(s),i=s}).then(n);return o.cancel=function(){r.unsubscribe(i)},o},e(function(i,o,s){r.reason||(r.reason=new CanceledError(i,o,s),a(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const a=this._listeners.indexOf(e);a!==-1&&this._listeners.splice(a,1)}static source(){let e;return{token:new CancelToken(function(n){e=n}),cancel:e}}}const CancelToken$1=CancelToken;function spread(t){return function(a){return t.apply(null,a)}}function isAxiosError(t){return utils.isObject(t)&&t.isAxiosError===!0}const HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode).forEach(([t,e])=>{HttpStatusCode[e]=t});const HttpStatusCode$1=HttpStatusCode;function createInstance(t){const e=new Axios$1(t),a=bind$4(Axios$1.prototype.request,e);return utils.extend(a,Axios$1.prototype,e,{allOwnKeys:!0}),utils.extend(a,e,null,{allOwnKeys:!0}),a.create=function(n){return createInstance(mergeConfig(t,n))},a}const axios=createInstance(defaults$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel;axios.VERSION=VERSION$1;axios.toFormData=toFormData;axios.AxiosError=AxiosError;axios.Cancel=axios.CanceledError;axios.all=function(e){return Promise.all(e)};axios.spread=spread;axios.isAxiosError=isAxiosError;axios.mergeConfig=mergeConfig;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=t=>formDataToJSON(utils.isHTMLForm(t)?new FormData(t):t);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;const axios$1=axios;var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var assign=make_assign(),create$2=make_create(),trim$1=make_trim(),Global$5=typeof window<"u"?window:commonjsGlobal,util$7={assign,create:create$2,trim:trim$1,bind:bind$3,slice:slice$2,each:each$8,map,pluck:pluck$1,isList:isList$1,isFunction:isFunction$4,isObject:isObject$a,Global:Global$5};function make_assign(){return Object.assign?Object.assign:function(e,a,r,n){for(var i=1;i"u"?null:console;if(t){var e=t.warn?t.warn:t.log;e.apply(t,arguments)}}function createStore(t,e,a){a||(a=""),t&&!isList(t)&&(t=[t]),e&&!isList(e)&&(e=[e]);var r=a?"__storejs_"+a+"_":"",n=a?new RegExp("^"+r):null,i=/^[a-zA-Z0-9_\-]*$/;if(!i.test(a))throw new Error("store.js namespaces can only have alphanumerics + underscores and dashes");var o={_namespacePrefix:r,_namespaceRegexp:n,_testStorage:function(u){try{var c="__storejs__test__";u.write(c,c);var l=u.read(c)===c;return u.remove(c),l}catch{return!1}},_assignPluginFnProp:function(u,c){var l=this[c];this[c]=function(){var v=slice$1(arguments,0),S=this;function T(){if(l)return each$7(arguments,function(M,C){v[C]=M}),l.apply(S,v)}var O=[T].concat(v);return u.apply(S,O)}},_serialize:function(u){return JSON.stringify(u)},_deserialize:function(u,c){if(!u)return c;var l="";try{l=JSON.parse(u)}catch{l=u}return l!==void 0?l:c},_addStorage:function(u){this.enabled||this._testStorage(u)&&(this.storage=u,this.enabled=!0)},_addPlugin:function(u){var c=this;if(isList(u)){each$7(u,function(v){c._addPlugin(v)});return}var l=pluck(this.plugins,function(v){return u===v});if(!l){if(this.plugins.push(u),!isFunction$3(u))throw new Error("Plugins must be function values that return objects");var p=u.call(this);if(!isObject$9(p))throw new Error("Plugins must return an object of function properties");each$7(p,function(v,S){if(!isFunction$3(v))throw new Error("Bad plugin property: "+S+" from plugin "+u.name+". Plugins should only return functions.");c._assignPluginFnProp(v,S)})}},addStorage:function(u){_warn("store.addStorage(storage) is deprecated. Use createStore([storages])"),this._addStorage(u)}},s=create$1(o,storeAPI,{plugins:[]});return s.raw={},each$7(s,function(u,c){isFunction$3(u)&&(s.raw[c]=bind$2(s,u))}),each$7(t,function(u){s._addStorage(u)}),each$7(e,function(u){s._addPlugin(u)}),s}var util$5=util$7,Global$4=util$5.Global,localStorage_1={name:"localStorage",read:read$6,write:write$6,each:each$6,remove:remove$5,clearAll:clearAll$5};function localStorage(){return Global$4.localStorage}function read$6(t){return localStorage().getItem(t)}function write$6(t,e){return localStorage().setItem(t,e)}function each$6(t){for(var e=localStorage().length-1;e>=0;e--){var a=localStorage().key(e);t(read$6(a),a)}}function remove$5(t){return localStorage().removeItem(t)}function clearAll$5(){return localStorage().clear()}var util$4=util$7,Global$3=util$4.Global,oldFFGlobalStorage={name:"oldFF-globalStorage",read:read$5,write:write$5,each:each$5,remove:remove$4,clearAll:clearAll$4},globalStorage=Global$3.globalStorage;function read$5(t){return globalStorage[t]}function write$5(t,e){globalStorage[t]=e}function each$5(t){for(var e=globalStorage.length-1;e>=0;e--){var a=globalStorage.key(e);t(globalStorage[a],a)}}function remove$4(t){return globalStorage.removeItem(t)}function clearAll$4(){each$5(function(t,e){delete globalStorage[t]})}var util$3=util$7,Global$2=util$3.Global,oldIEUserDataStorage={name:"oldIE-userDataStorage",write:write$4,read:read$4,each:each$4,remove:remove$3,clearAll:clearAll$3},storageName="storejs",doc$1=Global$2.document,_withStorageEl=_makeIEStorageElFunction(),disable=(Global$2.navigator?Global$2.navigator.userAgent:"").match(/ (MSIE 8|MSIE 9|MSIE 10)\./);function write$4(t,e){if(!disable){var a=fixKey(t);_withStorageEl(function(r){r.setAttribute(a,e),r.save(storageName)})}}function read$4(t){if(!disable){var e=fixKey(t),a=null;return _withStorageEl(function(r){a=r.getAttribute(e)}),a}}function each$4(t){_withStorageEl(function(e){for(var a=e.XMLDocument.documentElement.attributes,r=a.length-1;r>=0;r--){var n=a[r];t(e.getAttribute(n.name),n.name)}})}function remove$3(t){var e=fixKey(t);_withStorageEl(function(a){a.removeAttribute(e),a.save(storageName)})}function clearAll$3(){_withStorageEl(function(t){var e=t.XMLDocument.documentElement.attributes;t.load(storageName);for(var a=e.length-1;a>=0;a--)t.removeAttribute(e[a].name);t.save(storageName)})}var forbiddenCharsRegex=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g");function fixKey(t){return t.replace(/^\d/,"___$&").replace(forbiddenCharsRegex,"___")}function _makeIEStorageElFunction(){if(!doc$1||!doc$1.documentElement||!doc$1.documentElement.addBehavior)return null;var t="script",e,a,r;try{a=new ActiveXObject("htmlfile"),a.open(),a.write("<"+t+">document.w=window'),a.close(),e=a.w.frames[0].document,r=e.createElement("div")}catch{r=doc$1.createElement("div"),e=doc$1.body}return function(n){var i=[].slice.call(arguments,0);i.unshift(r),e.appendChild(r),r.addBehavior("#default#userData"),r.load(storageName),n.apply(this,i),e.removeChild(r)}}var util$2=util$7,Global$1=util$2.Global,trim=util$2.trim,cookieStorage={name:"cookieStorage",read:read$3,write:write$3,each:each$3,remove:remove$2,clearAll:clearAll$2},doc=Global$1.document;function read$3(t){if(!t||!_has(t))return null;var e="(?:^|.*;\\s*)"+escape(t).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";return unescape(doc.cookie.replace(new RegExp(e),"$1"))}function each$3(t){for(var e=doc.cookie.split(/; ?/g),a=e.length-1;a>=0;a--)if(trim(e[a])){var r=e[a].split("="),n=unescape(r[0]),i=unescape(r[1]);t(i,n)}}function write$3(t,e){t&&(doc.cookie=escape(t)+"="+escape(e)+"; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/")}function remove$2(t){!t||!_has(t)||(doc.cookie=escape(t)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/")}function clearAll$2(){each$3(function(t,e){remove$2(e)})}function _has(t){return new RegExp("(?:^|;\\s*)"+escape(t).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(doc.cookie)}var util$1=util$7,Global=util$1.Global,sessionStorage_1={name:"sessionStorage",read:read$2,write:write$2,each:each$2,remove:remove$1,clearAll:clearAll$1};function sessionStorage(){return Global.sessionStorage}function read$2(t){return sessionStorage().getItem(t)}function write$2(t,e){return sessionStorage().setItem(t,e)}function each$2(t){for(var e=sessionStorage().length-1;e>=0;e--){var a=sessionStorage().key(e);t(read$2(a),a)}}function remove$1(t){return sessionStorage().removeItem(t)}function clearAll$1(){return sessionStorage().clear()}var memoryStorage_1={name:"memoryStorage",read:read$1,write:write$1,each:each$1,remove,clearAll},memoryStorage={};function read$1(t){return memoryStorage[t]}function write$1(t,e){memoryStorage[t]=e}function each$1(t){for(var e in memoryStorage)memoryStorage.hasOwnProperty(e)&&t(memoryStorage[e],e)}function remove(t){delete memoryStorage[t]}function clearAll(t){memoryStorage={}}var all=[localStorage_1,oldFFGlobalStorage,oldIEUserDataStorage,cookieStorage,sessionStorage_1,memoryStorage_1],json2$1={},hasRequiredJson2;function requireJson2(){return hasRequiredJson2||(hasRequiredJson2=1,typeof JSON!="object"&&(JSON={}),function(){var rx_one=/^[\],:{}\s]*$/,rx_two=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,rx_three=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,rx_four=/(?:^|:|,)(?:\s*\[)+/g,rx_escapable=/[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,rx_dangerous=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;function f(t){return t<10?"0"+t:t}function this_value(){return this.valueOf()}typeof Date.prototype.toJSON!="function"&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},Boolean.prototype.toJSON=this_value,Number.prototype.toJSON=this_value,String.prototype.toJSON=this_value);var gap,indent,meta,rep;function quote(t){return rx_escapable.lastIndex=0,rx_escapable.test(t)?'"'+t.replace(rx_escapable,function(e){var a=meta[e];return typeof a=="string"?a:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'}function str(t,e){var a,r,n,i,o=gap,s,u=e[t];switch(u&&typeof u=="object"&&typeof u.toJSON=="function"&&(u=u.toJSON(t)),typeof rep=="function"&&(u=rep.call(e,t,u)),typeof u){case"string":return quote(u);case"number":return isFinite(u)?String(u):"null";case"boolean":case"null":return String(u);case"object":if(!u)return"null";if(gap+=indent,s=[],Object.prototype.toString.apply(u)==="[object Array]"){for(i=u.length,a=0;alastFlushedIndex&&queue.splice(e,1)}function queueFlush(){!flushing&&!flushPending&&(flushPending=!0,queueMicrotask(flushJobs))}function flushJobs(){flushPending=!1,flushing=!0;for(let t=0;tt.effect(e,{scheduler:a=>{shouldSchedule?scheduler(a):a()}}),raw=t.raw}function overrideEffect(t){effect$3=t}function elementBoundEffect(t){let e=()=>{};return[r=>{let n=effect$3(r);return t._x_effects||(t._x_effects=new Set,t._x_runEffects=()=>{t._x_effects.forEach(i=>i())}),t._x_effects.add(n),e=()=>{n!==void 0&&(t._x_effects.delete(n),release(n))},n},()=>{e()}]}function dispatch(t,e,a={}){t.dispatchEvent(new CustomEvent(e,{detail:a,bubbles:!0,composed:!0,cancelable:!0}))}function walk(t,e){if(typeof ShadowRoot=="function"&&t instanceof ShadowRoot){Array.from(t.children).forEach(n=>walk(n,e));return}let a=!1;if(e(t,()=>a=!0),a)return;let r=t.firstElementChild;for(;r;)walk(r,e),r=r.nextElementSibling}function warn(t,...e){console.warn(`Alpine Warning: ${t}`,...e)}var started=!1;function start$1(){started&&warn("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),started=!0,document.body||warn("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` diff --git a/resources/assets/js/components/transactions/ForeignAmountSelect.vue b/resources/assets/js/components/transactions/ForeignAmountSelect.vue index 4b867b2771..77d4fdb065 100644 --- a/resources/assets/js/components/transactions/ForeignAmountSelect.vue +++ b/resources/assets/js/components/transactions/ForeignAmountSelect.vue @@ -200,7 +200,7 @@ export default { this.getCurrencies(1); }, getCurrencies: function(page) { - console.log('loadCurrencies on page ' + page); + // console.log('loadCurrencies on page ' + page); let url = document.getElementsByTagName('base')[0].href + "api/v1/currencies?page=" + page; axios.get(url, {}).then((res) => { diff --git a/resources/assets/js/components/transactions/StandardDate.vue b/resources/assets/js/components/transactions/StandardDate.vue index 20177c3a96..ab9239d44b 100644 --- a/resources/assets/js/components/transactions/StandardDate.vue +++ b/resources/assets/js/components/transactions/StandardDate.vue @@ -32,8 +32,7 @@ autocomplete="off" class="form-control" name="date[]" - - type="date" + type="datetime-local" v-bind:placeholder="$t('firefly.date')" v-bind:title="$t('firefly.date')" @input="handleInput" > diff --git a/resources/assets/js/components/webhooks/Edit.vue b/resources/assets/js/components/webhooks/Edit.vue index a145a8a03e..c91982619c 100644 --- a/resources/assets/js/components/webhooks/Edit.vue +++ b/resources/assets/js/components/webhooks/Edit.vue @@ -119,7 +119,7 @@ export default { methods: { getWebhook: function () { const page = window.location.href.split('/'); - const webhookId = page[page.length - 1]; + const webhookId = parseInt(page[page.length - 1]); this.downloadWebhook(webhookId); }, downloadWebhook: function (id) { diff --git a/resources/assets/js/components/webhooks/Index.vue b/resources/assets/js/components/webhooks/Index.vue index f8196b16b3..8d846a227f 100644 --- a/resources/assets/js/components/webhooks/Index.vue +++ b/resources/assets/js/components/webhooks/Index.vue @@ -80,7 +80,7 @@ - diff --git a/resources/assets/js/components/webhooks/Show.vue b/resources/assets/js/components/webhooks/Show.vue index 577a68a420..32f9f74980 100644 --- a/resources/assets/js/components/webhooks/Show.vue +++ b/resources/assets/js/components/webhooks/Show.vue @@ -277,7 +277,7 @@ export default { getWebhook() { this.loading = true; const page = window.location.href.split('/'); - this.id = page[page.length - 1] + this.id = parseInt(page[page.length - 1]); this.downloadWebhook(); this.downloadWebhookMessages(); }, @@ -288,7 +288,6 @@ export default { if (e) { e.preventDefault(); } - console.log('here we are'); let journalId = parseInt(prompt('Enter a transaction ID')); if (journalId !== null && journalId > 0 && journalId <= 16777216) { console.log('OK 1'); diff --git a/resources/assets/js/locales/bg.json b/resources/assets/js/locales/bg.json index 94334c32f0..819884d2d8 100644 --- a/resources/assets/js/locales/bg.json +++ b/resources/assets/js/locales/bg.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "\u041a\u0430\u043a\u0432\u043e \u0441\u0435 \u0441\u043b\u0443\u0447\u0432\u0430?", "flash_error": "\u0413\u0440\u0435\u0448\u043a\u0430!", + "flash_warning": "\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!", "flash_success": "\u0423\u0441\u043f\u0435\u0445!", "close": "\u0417\u0430\u0442\u0432\u043e\u0440\u0438", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f", - "errors_submission": "\u0418\u043c\u0430\u0448\u0435 \u043d\u0435\u0449\u043e \u043d\u0435\u0440\u0435\u0434\u043d\u043e \u0441 \u0432\u0430\u0448\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u0438. \u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0433\u0440\u0435\u0448\u043a\u0438\u0442\u0435.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "\u0420\u0430\u0437\u0434\u0435\u043b\u0438", "single_split": "\u0420\u0430\u0437\u0434\u0435\u043b", "transaction_stored_link": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f #{ID}(\"{title}\")<\/a> \u0431\u0435\u0448\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430.", @@ -24,11 +27,13 @@ "destination_account": "\u041f\u0440\u0438\u0445\u043e\u0434\u043d\u0430 \u0441\u043c\u0435\u0442\u043a\u0430", "add_another_split": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433 \u0440\u0430\u0437\u0434\u0435\u043b", "submission": "\u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435", + "stored_journal": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u044a\u0437\u0434\u0430\u0434\u0435\u043d\u0430 \u043d\u043e\u0432\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \":description\"", "create_another": "\u0421\u043b\u0435\u0434 \u0441\u044a\u0445\u0440\u0430\u043d\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u0441\u0435 \u0432\u044a\u0440\u043d\u0435\u0442\u0435 \u0442\u0443\u043a, \u0437\u0430 \u0434\u0430 \u0441\u044a\u0437\u0434\u0430\u0434\u0435\u0442\u0435 \u043d\u043e\u0432\u0430.", "reset_after": "\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044f\u0440\u0430 \u0441\u043b\u0435\u0434 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435", "submit": "\u041f\u043e\u0442\u0432\u044a\u0440\u0434\u0438", "amount": "\u0421\u0443\u043c\u0430", "date": "\u0414\u0430\u0442\u0430", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u0415\u0442\u0438\u043a\u0435\u0442\u0438", "no_budget": "(\u0431\u0435\u0437 \u0431\u044e\u0434\u0436\u0435\u0442)", "no_bill": "(\u043d\u044f\u043c\u0430 \u0441\u043c\u0435\u0442\u043a\u0430)", diff --git a/resources/assets/js/locales/ca.json b/resources/assets/js/locales/ca.json index 591aaebc3e..8b3ad2d18c 100644 --- a/resources/assets/js/locales/ca.json +++ b/resources/assets/js/locales/ca.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Qu\u00e8 est\u00e0 passant?", "flash_error": "Error!", + "flash_warning": "Atenci\u00f3!", "flash_success": "\u00c8xit!", "close": "Tancar", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Descripci\u00f3 de la transacci\u00f3 dividida", - "errors_submission": "Ha hagut un error amb el teu enviament. Per favor, revisa els errors.", + "errors_submission": "Hi ha hagut un error amb el teu enviament. Per favor, revisa els errors de sota.", "split": "Dividir", "single_split": "Divisi\u00f3", "transaction_stored_link": "La Transacci\u00f3 #{ID} (\"{title}\")<\/a> s'ha desat.", @@ -24,11 +27,13 @@ "destination_account": "Compte de dest\u00ed", "add_another_split": "Afegeix una nova divisi\u00f3", "submission": "Enviament", + "stored_journal": "S'ha creat la retirada \":description\" satisfact\u00f2riament", "create_another": "Despr\u00e9s de guardar, torna ac\u00ed per crear-ne un altre.", "reset_after": "Reiniciar el formulari despr\u00e9s d'enviar", "submit": "Enviar", "amount": "Import", "date": "Data", + "is_reconciled_fields_dropped": "Com aquesta transacci\u00f3 est\u00e0 reconciliada, no podr\u00e0s actualitzar els comptes, ni les quantitats.", "tags": "Etiquetes", "no_budget": "(cap pressupost)", "no_bill": "(cap factura)", diff --git a/resources/assets/js/locales/cs.json b/resources/assets/js/locales/cs.json index 34318eb0e9..f2c3d8fee9 100644 --- a/resources/assets/js/locales/cs.json +++ b/resources/assets/js/locales/cs.json @@ -2,15 +2,18 @@ "firefly": { "welcome_back": "Jak to jde?", "flash_error": "Chyba!", + "flash_warning": "Varov\u00e1n\u00ed!", "flash_success": "\u00dasp\u011b\u0161n\u011b dokon\u010deno!", "close": "Zav\u0159\u00edt", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Popis roz\u00fa\u010dtov\u00e1n\u00ed", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Rozd\u011blit", "single_split": "Rozd\u011blit", "transaction_stored_link": "Transaction #{ID} (\"{title}\")<\/a> has been stored.", - "webhook_stored_link": "Webhook #{ID} (\"{title}\")<\/a> has been stored.", - "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") has been updated.", + "webhook_stored_link": "Webhook #{ID} (\"{title}\")<\/a> byl ulo\u017een.", + "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") byl aktualizov\u00e1n.", "transaction_updated_link": "Transaction #{ID}<\/a> (\"{title}\") has been updated.", "transaction_new_stored_link": "Transaction #{ID}<\/a> has been stored.", "transaction_journal_information": "Informace o transakci", @@ -24,11 +27,13 @@ "destination_account": "C\u00edlov\u00fd \u00fa\u010det", "add_another_split": "P\u0159idat dal\u0161\u00ed roz\u00fa\u010dtov\u00e1n\u00ed", "submission": "Submission", + "stored_journal": "\u00dasp\u011b\u0161n\u011b vytvo\u0159ena nov\u00e1 transakce \u201e:description\u201c", "create_another": "After storing, return here to create another one.", "reset_after": "Reset form after submission", "submit": "Odeslat", "amount": "\u010c\u00e1stka", "date": "Datum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u0160t\u00edtky", "no_budget": "(\u017e\u00e1dn\u00fd rozpo\u010det)", "no_bill": "(no bill)", @@ -92,39 +97,39 @@ "multi_account_warning_withdrawal": "Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.", "multi_account_warning_deposit": "Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.", "multi_account_warning_transfer": "Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.", - "webhook_trigger_STORE_TRANSACTION": "After transaction creation", - "webhook_trigger_UPDATE_TRANSACTION": "After transaction update", - "webhook_trigger_DESTROY_TRANSACTION": "After transaction delete", - "webhook_response_TRANSACTIONS": "Transaction details", - "webhook_response_ACCOUNTS": "Account details", - "webhook_response_none_NONE": "No details", + "webhook_trigger_STORE_TRANSACTION": "Po vytvo\u0159en\u00ed transakce", + "webhook_trigger_UPDATE_TRANSACTION": "Po aktualizaci transakce", + "webhook_trigger_DESTROY_TRANSACTION": "Po odstran\u011bn\u00ed transakce", + "webhook_response_TRANSACTIONS": "Podrobnosti transakce", + "webhook_response_ACCOUNTS": "Podrobnosti \u00fa\u010dtu", + "webhook_response_none_NONE": "\u017d\u00e1dn\u00e9 detaily", "webhook_delivery_JSON": "JSON", "actions": "Akce", "meta_data": "Metadata", - "webhook_messages": "Webhook message", + "webhook_messages": "Zpr\u00e1va webhooku", "inactive": "Neaktivn\u00ed", - "no_webhook_messages": "There are no webhook messages", - "inspect": "Inspect", - "create_new_webhook": "Create new webhook", + "no_webhook_messages": "Neexistuj\u00ed \u017e\u00e1dn\u00e9 zpr\u00e1vy webhooku", + "inspect": "Prozkoumat", + "create_new_webhook": "Vytvo\u0159it nov\u00fd webhook", "webhooks": "Webhooky", - "webhook_trigger_form_help": "Indicate on what event the webhook will trigger", - "webhook_response_form_help": "Indicate what the webhook must submit to the URL.", - "webhook_delivery_form_help": "Which format the webhook must deliver data in.", - "webhook_active_form_help": "The webhook must be active or it won't be called.", - "edit_webhook_js": "Edit webhook \"{title}\"", - "webhook_was_triggered": "The webhook was triggered on the indicated transaction. Please wait for results to appear.", - "view_message": "View message", - "view_attempts": "View failed attempts", - "message_content_title": "Webhook message content", - "message_content_help": "This is the content of the message that was sent (or tried) using this webhook.", - "attempt_content_title": "Webhook attempts", - "attempt_content_help": "These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.", - "no_attempts": "There are no unsuccessful attempts. That's a good thing!", + "webhook_trigger_form_help": "Ur\u010dit, na kterou ud\u00e1lost se spust\u00ed webhook", + "webhook_response_form_help": "Ur\u010dit, co mus\u00ed webhook odeslat do URL.", + "webhook_delivery_form_help": "V jak\u00e9m form\u00e1tu mus\u00ed webhook pos\u00edlat data.", + "webhook_active_form_help": "Webhook mus\u00ed b\u00fdt aktivn\u00ed, nebo nebude zavol\u00e1n.", + "edit_webhook_js": "Upravit webhook \"{title}\"", + "webhook_was_triggered": "Webhook byl spu\u0161t\u011bn na ur\u010den\u00e9 transakci. Pros\u00edm po\u010dkejte, ne\u017e se objev\u00ed v\u00fdsledky.", + "view_message": "Zobrazit zpr\u00e1vu", + "view_attempts": "Zobrazit ne\u00fasp\u011b\u0161n\u00e9 pokusy", + "message_content_title": "Obsah zpr\u00e1vy webhooku", + "message_content_help": "Toto je obsah zpr\u00e1vy, kter\u00e1 byla odesl\u00e1na (nebo vyzkou\u0161ena) pomoc\u00ed tohoto webhooku.", + "attempt_content_title": "Pokusy webhooku", + "attempt_content_help": "To v\u0161e jsou ne\u00fasp\u011b\u0161n\u00e9 pokusy t\u00e9to zpravy webhooku o odesl\u00e1n\u00ed na nakonfigurovanou URL. Po n\u011bjak\u00e9 dob\u011b, Firefly III p\u0159estane zkou\u0161et odes\u00edlat zpr\u00e1vu.", + "no_attempts": "Nebyly nalezeny \u017e\u00e1dn\u00e9 ne\u00fasp\u011b\u0161n\u00e9 pokusy. To je dobr\u00e1 v\u011bc!", "webhook_attempt_at": "Attempt at {moment}", - "logs": "Logs", - "response": "Response", - "visit_webhook_url": "Visit webhook URL", - "reset_webhook_secret": "Reset webhook secret" + "logs": "Logy", + "response": "Odpov\u011b\u010f", + "visit_webhook_url": "Nav\u0161t\u00edvit URL webhooku", + "reset_webhook_secret": "Restartovat tajn\u00fd kl\u00ed\u010d webhooku" }, "form": { "url": "URL", @@ -139,7 +144,7 @@ "invoice_date": "Datum vystaven\u00ed", "internal_reference": "Intern\u00ed reference", "webhook_response": "Response", - "webhook_trigger": "Trigger", + "webhook_trigger": "Spou\u0161t\u011b\u010d", "webhook_delivery": "Delivery" }, "list": { diff --git a/resources/assets/js/locales/da.json b/resources/assets/js/locales/da.json index 8bf5c6c9e5..03f0a3a0f5 100644 --- a/resources/assets/js/locales/da.json +++ b/resources/assets/js/locales/da.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Hvad spiller?", "flash_error": "Fejl!", + "flash_warning": "Advarsel!", "flash_success": "Succes!", "close": "Luk", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Description of the split transaction", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Opdel", "single_split": "Opdel", "transaction_stored_link": "Transaction #{ID} (\"{title}\")<\/a> has been stored.", @@ -24,11 +27,13 @@ "destination_account": "Destinationskonto", "add_another_split": "Add another split", "submission": "Submission", + "stored_journal": "Successfully created new transaction \":description\"", "create_another": "After storing, return here to create another one.", "reset_after": "Reset form after submission", "submit": "Submit", "amount": "Bel\u00f8b", "date": "Date", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etiketter", "no_budget": "(no budget)", "no_bill": "(no bill)", @@ -138,9 +143,9 @@ "payment_date": "Betalingsdato", "invoice_date": "Fakturadato", "internal_reference": "Intern reference", - "webhook_response": "Response", - "webhook_trigger": "Trigger", - "webhook_delivery": "Delivery" + "webhook_response": "Svar", + "webhook_trigger": "Udl\u00f8ser", + "webhook_delivery": "Levering" }, "list": { "active": "Aktiv?", @@ -152,6 +157,6 @@ }, "config": { "html_language": "da", - "date_time_fns": "MMMM do, yyyy @ HH:mm:ss" + "date_time_fns": "MMMM g\u00f8r, yyyy @ HH:mm:ss" } } \ No newline at end of file diff --git a/resources/assets/js/locales/de.json b/resources/assets/js/locales/de.json index f8291b4f96..6d51c1872e 100644 --- a/resources/assets/js/locales/de.json +++ b/resources/assets/js/locales/de.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "\u00dcberblick", "flash_error": "Fehler!", + "flash_warning": "Achtung!", "flash_success": "Geschafft!", "close": "Schlie\u00dfen", + "select_dest_account": "Bitte einen g\u00fcltigen Zielkontonamen ausw\u00e4hlen oder eingeben", + "select_source_account": "Bitte einen g\u00fcltigen Quellkontonamen ausw\u00e4hlen oder eingeben", "split_transaction_title": "Beschreibung der Splittbuchung", - "errors_submission": "Ihre \u00dcbermittlung ist fehlgeschlagen. Bitte \u00fcberpr\u00fcfen Sie die Fehler.", + "errors_submission": "Bei Ihren Eingaben stimmt etwas nicht. Bitte \u00fcberpr\u00fcfen Sie die unten stehenden Fehler.", "split": "Teilen", "single_split": "Teilen", "transaction_stored_link": "Buchung #{ID} (\"{title}\")<\/a> wurde gespeichert.", @@ -24,11 +27,13 @@ "destination_account": "Zielkonto", "add_another_split": "Eine weitere Aufteilung hinzuf\u00fcgen", "submission": "\u00dcbermittlung", + "stored_journal": "Neue \u00dcberweisung \":description\" erfolgreich erstellt", "create_another": "Nach dem Speichern hierher zur\u00fcckkehren, um ein weiteres zu erstellen.", "reset_after": "Formular nach der \u00dcbermittlung zur\u00fccksetzen", "submit": "Absenden", "amount": "Betrag", "date": "Datum", + "is_reconciled_fields_dropped": "Da diese Buchung abgeglichen ist, k\u00f6nnen Sie weder die Konten noch den\/die Betrag\/Betr\u00e4ge aktualisieren.", "tags": "Schlagw\u00f6rter", "no_budget": "(kein Budget)", "no_bill": "(keine Belege)", @@ -137,7 +142,7 @@ "foreign_amount": "Ausl\u00e4ndischer Betrag", "payment_date": "Zahlungsdatum", "invoice_date": "Rechnungsdatum", - "internal_reference": "Interner Verweis", + "internal_reference": "Interne Referenz", "webhook_response": "Antwort", "webhook_trigger": "Ausl\u00f6ser", "webhook_delivery": "Zustellung" diff --git a/resources/assets/js/locales/el.json b/resources/assets/js/locales/el.json index 264ad77515..e2a6d65c7f 100644 --- a/resources/assets/js/locales/el.json +++ b/resources/assets/js/locales/el.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "\u03a4\u03b9 \u03c0\u03b1\u03af\u03b6\u03b5\u03b9;", "flash_error": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1!", + "flash_warning": "\u03a0\u03c1\u03bf\u03c3\u03bf\u03c7\u03ae!", "flash_success": "\u0395\u03c0\u03b9\u03c4\u03c5\u03c7\u03af\u03b1!", "close": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc", - "errors_submission": "\u03a5\u03c0\u03ae\u03c1\u03be\u03b5 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf \u03bb\u03ac\u03b8\u03bf\u03c2 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae \u03c3\u03b1\u03c2. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b5\u03bb\u03ad\u03b3\u03be\u03c4\u03b5 \u03c4\u03b1 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1\u03c4\u03b1.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "\u0394\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2", "single_split": "\u0394\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2", "transaction_stored_link": "\u0397 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae #{ID} (\"{title}\")<\/a> \u03ad\u03c7\u03b5\u03b9 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03c4\u03b5\u03af.", @@ -24,11 +27,13 @@ "destination_account": "\u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc\u03c2 \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd", "add_another_split": "\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03b5\u03bd\u03cc\u03c2 \u03b1\u03ba\u03cc\u03bc\u03b1 \u03b4\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd", "submission": "\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae", + "stored_journal": "\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5 \u03b5\u03c0\u03b9\u03c4\u03c5\u03c7\u03ce\u03c2 \u03b7 \u03bd\u03ad\u03b1 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \":description\"", "create_another": "\u039c\u03b5\u03c4\u03ac \u03c4\u03b7\u03bd \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7, \u03b5\u03c0\u03b9\u03c3\u03c4\u03c1\u03ad\u03c8\u03c4\u03b5 \u03b5\u03b4\u03ce \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b1\u03ba\u03cc\u03bc\u03b7 \u03ad\u03bd\u03b1.", "reset_after": "\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c6\u03cc\u03c1\u03bc\u03b1\u03c2 \u03bc\u03b5\u03c4\u03ac \u03c4\u03b7\u03bd \u03c5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae", "submit": "\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae", "amount": "\u03a0\u03bf\u03c3\u03cc", "date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u0395\u03c4\u03b9\u03ba\u03ad\u03c4\u03b5\u03c2", "no_budget": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc)", "no_bill": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03ac\u03b3\u03b9\u03bf \u03ad\u03be\u03bf\u03b4\u03bf)", diff --git a/resources/assets/js/locales/en-gb.json b/resources/assets/js/locales/en-gb.json index 18715fdb72..2999f99e7f 100644 --- a/resources/assets/js/locales/en-gb.json +++ b/resources/assets/js/locales/en-gb.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "What's playing?", "flash_error": "Error!", + "flash_warning": "Warning!", "flash_success": "Success!", "close": "Close", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Description of the split transaction", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Split", "single_split": "Split", "transaction_stored_link": "Transaction #{ID} (\"{title}\")<\/a> has been stored.", @@ -24,11 +27,13 @@ "destination_account": "Destination account", "add_another_split": "Add another split", "submission": "Submission", + "stored_journal": "Successfully created new transaction \":description\"", "create_another": "After storing, return here to create another one.", "reset_after": "Reset form after submission", "submit": "Submit", "amount": "Amount", "date": "Date", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tags", "no_budget": "(no budget)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/en.json b/resources/assets/js/locales/en.json index e83579aac1..e41ff89456 100644 --- a/resources/assets/js/locales/en.json +++ b/resources/assets/js/locales/en.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "What's playing?", "flash_error": "Error!", + "flash_warning": "Warning!", "flash_success": "Success!", "close": "Close", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Description of the split transaction", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Split", "single_split": "Split", "transaction_stored_link": "Transaction #{ID} (\"{title}\")<\/a> has been stored.", @@ -24,11 +27,13 @@ "destination_account": "Destination account", "add_another_split": "Add another split", "submission": "Submission", + "stored_journal": "Successfully created new transaction \":description\"", "create_another": "After storing, return here to create another one.", "reset_after": "Reset form after submission", "submit": "Submit", "amount": "Amount", "date": "Date", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tags", "no_budget": "(no budget)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/es.json b/resources/assets/js/locales/es.json index b9b357e222..f93deb7778 100644 --- a/resources/assets/js/locales/es.json +++ b/resources/assets/js/locales/es.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "\u00bfQu\u00e9 est\u00e1 pasando?", "flash_error": "\u00a1Error!", + "flash_warning": "\u00a1Advertencia!", "flash_success": "\u00a1Operaci\u00f3n correcta!", "close": "Cerrar", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Descripci\u00f3n de la transacci\u00f3n dividida", - "errors_submission": "Hubo un problema con su env\u00edo. Por favor, compruebe los errores.", + "errors_submission": "Hubo un problema con su env\u00edo. Por favor, compruebe los siguientes errores.", "split": "Separar", "single_split": "Divisi\u00f3n", "transaction_stored_link": "La transacci\u00f3n #{ID} (\"{title}\")<\/a> ha sido almacenada.", @@ -24,11 +27,13 @@ "destination_account": "Cuenta destino", "add_another_split": "A\u00f1adir otra divisi\u00f3n", "submission": "Env\u00edo", + "stored_journal": "Nueva transacci\u00f3n creada exitosamente \":description\"", "create_another": "Despu\u00e9s de guardar, vuelve aqu\u00ed para crear otro.", "reset_after": "Restablecer formulario despu\u00e9s del env\u00edo", "submit": "Enviar", "amount": "Cantidad", "date": "Fecha", + "is_reconciled_fields_dropped": "Debido a que esta transacci\u00f3n est\u00e1 reconciliada, no podr\u00e1 actualizar las cuentas, ni las cantidades.", "tags": "Etiquetas", "no_budget": "(sin presupuesto)", "no_bill": "(sin factura)", diff --git a/resources/assets/js/locales/fi.json b/resources/assets/js/locales/fi.json index 46c49fb710..468931fead 100644 --- a/resources/assets/js/locales/fi.json +++ b/resources/assets/js/locales/fi.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Mit\u00e4 kuuluu?", "flash_error": "Virhe!", + "flash_warning": "Varoitus!", "flash_success": "Valmista tuli!", "close": "Sulje", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Jaetun tapahtuman kuvaus", - "errors_submission": "Lomakkeen tiedoissa oli jotain vikaa. Ole hyv\u00e4 ja tarkista virheet.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Jaa", "single_split": "Jako", "transaction_stored_link": "Tapahtuma #{ID} (\"{title}\")<\/a> on tallennettu.", @@ -24,11 +27,13 @@ "destination_account": "Kohdetili", "add_another_split": "Lis\u00e4\u00e4 tapahtumaan uusi osa", "submission": "Vahvistus", + "stored_journal": "Loit onnistuneesti uuden tapahtuman \":description\"", "create_another": "Tallennuksen j\u00e4lkeen, palaa takaisin luomaan uusi tapahtuma.", "reset_after": "Tyhjenn\u00e4 lomake l\u00e4hetyksen j\u00e4lkeen", "submit": "Vahvista", "amount": "Summa", "date": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "T\u00e4git", "no_budget": "(ei budjettia)", "no_bill": "(ei laskua)", diff --git a/resources/assets/js/locales/fr.json b/resources/assets/js/locales/fr.json index bbf3b664f9..2d51ce069a 100644 --- a/resources/assets/js/locales/fr.json +++ b/resources/assets/js/locales/fr.json @@ -2,12 +2,15 @@ "firefly": { "welcome_back": "Quoi de neuf ?", "flash_error": "Erreur !", + "flash_warning": "Attention !", "flash_success": "Super !", "close": "Fermer", - "split_transaction_title": "Description de l'op\u00e9ration ventil\u00e9e", - "errors_submission": "Certaines informations ne sont pas correctes dans votre formulaire. Veuillez v\u00e9rifier les erreurs.", - "split": "Ventiler", - "single_split": "Ventilation", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", + "split_transaction_title": "Description de l'op\u00e9ration s\u00e9par\u00e9e", + "errors_submission": "Certaines informations ne sont pas correctes dans votre formulaire. Veuillez v\u00e9rifier les erreurs ci-dessous.", + "split": "S\u00e9paration", + "single_split": "S\u00e9paration unique", "transaction_stored_link": "L'op\u00e9ration n\u00b0{ID} (\"{title}\")<\/a> a \u00e9t\u00e9 enregistr\u00e9e.", "webhook_stored_link": "Le Webhook #{ID} (\"{title}\")<\/a> a \u00e9t\u00e9 enregistr\u00e9.", "webhook_updated_link": "Le webhook #{ID}<\/a> (\"{title}\") a \u00e9t\u00e9 mis \u00e0 jour.", @@ -24,11 +27,13 @@ "destination_account": "Compte de destination", "add_another_split": "Ajouter une autre fraction", "submission": "Soumission", + "stored_journal": "Op\u00e9ration \":description\" cr\u00e9\u00e9e avec succ\u00e8s", "create_another": "Apr\u00e8s enregistrement, revenir ici pour en cr\u00e9er un nouveau.", "reset_after": "R\u00e9initialiser le formulaire apr\u00e8s soumission", "submit": "Soumettre", "amount": "Montant", "date": "Date", + "is_reconciled_fields_dropped": "Comme cette op\u00e9ration est rapproch\u00e9e, vous ne pourrez pas modifier les comptes, ni le(s) montant(s).", "tags": "Tags", "no_budget": "(pas de budget)", "no_bill": "(aucune facture)", @@ -39,11 +44,11 @@ "update_transaction": "Mettre \u00e0 jour l'op\u00e9ration", "after_update_create_another": "Apr\u00e8s la mise \u00e0 jour, revenir ici pour continuer l'\u00e9dition.", "store_as_new": "Enregistrer comme une nouvelle op\u00e9ration au lieu de mettre \u00e0 jour.", - "split_title_help": "Si vous cr\u00e9ez une op\u00e9ration ventil\u00e9e, il doit y avoir une description globale pour chaque fractions de l'op\u00e9ration.", + "split_title_help": "Si vous cr\u00e9ez une op\u00e9ration s\u00e9par\u00e9e, il doit y avoir une description globale pour chaque fraction de l'op\u00e9ration.", "none_in_select_list": "(aucun)", "no_piggy_bank": "(aucune tirelire)", "description": "Description", - "split_transaction_title_help": "Si vous cr\u00e9ez une op\u00e9ration ventil\u00e9e, il doit y avoir une description globale pour chaque fraction de l'op\u00e9ration.", + "split_transaction_title_help": "Si vous cr\u00e9ez une op\u00e9ration s\u00e9par\u00e9e, il doit y avoir une description globale pour chaque fraction de l'op\u00e9ration.", "destination_account_reconciliation": "Vous ne pouvez pas modifier le compte de destination d'une op\u00e9ration de rapprochement.", "source_account_reconciliation": "Vous ne pouvez pas modifier le compte source d'une op\u00e9ration de rapprochement.", "budget": "Budget", @@ -88,10 +93,10 @@ "profile_oauth_client_secret_expl": "Voici votre nouveau secret de client. C'est la seule fois qu'il sera affich\u00e9, donc ne le perdez pas ! Vous pouvez maintenant utiliser ce secret pour faire des requ\u00eates d'API.", "profile_oauth_confidential": "Confidentiel", "profile_oauth_confidential_help": "Exiger que le client s'authentifie avec un secret. Les clients confidentiels peuvent d\u00e9tenir des informations d'identification de mani\u00e8re s\u00e9curis\u00e9e sans les exposer \u00e0 des tiers non autoris\u00e9s. Les applications publiques, telles que les applications de bureau natif ou les SPA JavaScript, ne peuvent pas tenir des secrets en toute s\u00e9curit\u00e9.", - "multi_account_warning_unknown": "Selon le type d'op\u00e9ration que vous cr\u00e9ez, le(s) compte(s) source et\/ou de destination des ventilations suivantes peuvent \u00eatre remplac\u00e9s par celui de la premi\u00e8re ventilation de l'op\u00e9ration.", - "multi_account_warning_withdrawal": "Gardez en t\u00eate que le compte source des ventilations suivantes peut \u00eatre remplac\u00e9 par celui de la premi\u00e8re ventilation de la d\u00e9pense.", - "multi_account_warning_deposit": "Gardez en t\u00eate que le compte de destination des ventilations suivantes peut \u00eatre remplac\u00e9 par celui de la premi\u00e8re ventilation du d\u00e9p\u00f4t.", - "multi_account_warning_transfer": "Gardez en t\u00eate que les comptes source et de destination des ventilations suivantes peuvent \u00eatre remplac\u00e9s par ceux de la premi\u00e8re ventilation du transfert.", + "multi_account_warning_unknown": "Selon le type d'op\u00e9ration que vous cr\u00e9ez, le(s) compte(s) source et\/ou de destination des s\u00e9parations suivantes peuvent \u00eatre remplac\u00e9s par celui de la premi\u00e8re s\u00e9paration de l'op\u00e9ration.", + "multi_account_warning_withdrawal": "Gardez en t\u00eate que le compte source des s\u00e9parations suivantes peut \u00eatre remplac\u00e9 par celui de la premi\u00e8re s\u00e9paration de la d\u00e9pense.", + "multi_account_warning_deposit": "Gardez en t\u00eate que le compte de destination des s\u00e9parations suivantes peut \u00eatre remplac\u00e9 par celui de la premi\u00e8re s\u00e9paration du d\u00e9p\u00f4t.", + "multi_account_warning_transfer": "Gardez en t\u00eate que les comptes source et de destination des s\u00e9parations suivantes peuvent \u00eatre remplac\u00e9s par ceux de la premi\u00e8re s\u00e9paration du transfert.", "webhook_trigger_STORE_TRANSACTION": "Apr\u00e8s la cr\u00e9ation de l'op\u00e9ration", "webhook_trigger_UPDATE_TRANSACTION": "Apr\u00e8s la mise \u00e0 jour de l'op\u00e9ration", "webhook_trigger_DESTROY_TRANSACTION": "Apr\u00e8s la suppression de l'op\u00e9ration", diff --git a/resources/assets/js/locales/hu.json b/resources/assets/js/locales/hu.json index d17346601e..525f99061a 100644 --- a/resources/assets/js/locales/hu.json +++ b/resources/assets/js/locales/hu.json @@ -2,15 +2,18 @@ "firefly": { "welcome_back": "Mi a helyzet?", "flash_error": "Hiba!", + "flash_warning": "Figyelmeztet\u00e9s!", "flash_success": "Siker!", "close": "Bez\u00e1r\u00e1s", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Felosztott tranzakci\u00f3 le\u00edr\u00e1sa", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "errors_submission": "Hiba t\u00f6rt\u00e9nt a bek\u00fcld\u00e9s sor\u00e1n. K\u00e9rlek jav\u00edtsd az al\u00e1bbi hib\u00e1kat.", "split": "Feloszt\u00e1s", "single_split": "Feloszt\u00e1s", "transaction_stored_link": "Transaction #{ID} (\"{title}\")<\/a> mentve.", - "webhook_stored_link": "Webhook #{ID} (\"{title}\")<\/a> has been stored.", - "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") has been updated.", + "webhook_stored_link": "Webhook #{ID} (\"{title}\")<\/a> elt\u00e1rolva.", + "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") friss\u00edtve.", "transaction_updated_link": "Transaction #{ID}<\/a> (\"{title}\") has been updated.", "transaction_new_stored_link": "Transaction #{ID}<\/a> mentve.", "transaction_journal_information": "Tranzakci\u00f3s inform\u00e1ci\u00f3k", @@ -24,11 +27,13 @@ "destination_account": "C\u00e9lsz\u00e1mla", "add_another_split": "M\u00e1sik feloszt\u00e1s hozz\u00e1ad\u00e1sa", "submission": "Feliratkoz\u00e1s", + "stored_journal": "\":description\" \u00faj tranzakci\u00f3 sikeresen l\u00e9trehozva", "create_another": "A t\u00e1rol\u00e1s ut\u00e1n t\u00e9rjen vissza ide \u00faj l\u00e9trehoz\u00e1s\u00e1hoz.", "reset_after": "\u0170rlap t\u00f6rl\u00e9se a bek\u00fcld\u00e9s ut\u00e1n", "submit": "Bek\u00fcld\u00e9s", "amount": "\u00d6sszeg", "date": "D\u00e1tum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "C\u00edmk\u00e9k", "no_budget": "(nincs k\u00f6lts\u00e9gkeret)", "no_bill": "(no bill)", @@ -92,39 +97,39 @@ "multi_account_warning_withdrawal": "Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.", "multi_account_warning_deposit": "Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.", "multi_account_warning_transfer": "Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.", - "webhook_trigger_STORE_TRANSACTION": "After transaction creation", - "webhook_trigger_UPDATE_TRANSACTION": "After transaction update", - "webhook_trigger_DESTROY_TRANSACTION": "After transaction delete", - "webhook_response_TRANSACTIONS": "Transaction details", - "webhook_response_ACCOUNTS": "Account details", - "webhook_response_none_NONE": "No details", + "webhook_trigger_STORE_TRANSACTION": "Tranzakci\u00f3 l\u00e9trehoz\u00e1sa ut\u00e1n", + "webhook_trigger_UPDATE_TRANSACTION": "Tranzakci\u00f3 friss\u00edt\u00e9se ut\u00e1n", + "webhook_trigger_DESTROY_TRANSACTION": "Tranzakci\u00f3 t\u00f6rl\u00e9se ut\u00e1n", + "webhook_response_TRANSACTIONS": "Tranzakci\u00f3 r\u00e9szletei", + "webhook_response_ACCOUNTS": "Sz\u00e1mlaadatok", + "webhook_response_none_NONE": "Nincsenek r\u00e9szletek", "webhook_delivery_JSON": "JSON", "actions": "M\u0171veletek", "meta_data": "Metaadat", - "webhook_messages": "Webhook message", + "webhook_messages": "Webhook \u00fczenet", "inactive": "Inakt\u00edv", - "no_webhook_messages": "There are no webhook messages", - "inspect": "Inspect", - "create_new_webhook": "Create new webhook", - "webhooks": "Webhooks", - "webhook_trigger_form_help": "Indicate on what event the webhook will trigger", - "webhook_response_form_help": "Indicate what the webhook must submit to the URL.", - "webhook_delivery_form_help": "Which format the webhook must deliver data in.", - "webhook_active_form_help": "The webhook must be active or it won't be called.", - "edit_webhook_js": "Edit webhook \"{title}\"", - "webhook_was_triggered": "The webhook was triggered on the indicated transaction. Please wait for results to appear.", - "view_message": "View message", - "view_attempts": "View failed attempts", - "message_content_title": "Webhook message content", - "message_content_help": "This is the content of the message that was sent (or tried) using this webhook.", - "attempt_content_title": "Webhook attempts", - "attempt_content_help": "These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.", - "no_attempts": "There are no unsuccessful attempts. That's a good thing!", - "webhook_attempt_at": "Attempt at {moment}", - "logs": "Logs", - "response": "Response", - "visit_webhook_url": "Visit webhook URL", - "reset_webhook_secret": "Reset webhook secret" + "no_webhook_messages": "Nincsenek webhook \u00fczenetek", + "inspect": "Vizsg\u00e1lat", + "create_new_webhook": "\u00daj webhook l\u00e9trehoz\u00e1sa", + "webhooks": "Webhook-ok", + "webhook_trigger_form_help": "Adja meg, hogy a webhook-ot milyen esem\u00e9nyre ind\u00edtja el", + "webhook_response_form_help": "Adja meg, hogy a webhook mit k\u00fcldj\u00f6n az URL-re.", + "webhook_delivery_form_help": "Milyen form\u00e1tumban k\u00e9zbes\u00edtse a webhook az adatokat.", + "webhook_active_form_help": "A webhook-nak akt\u00edvnak kell lennie, k\u00fcl\u00f6nben nem fogj\u00e1k megh\u00edvni.", + "edit_webhook_js": "Webhook \"{title}\" m\u00f3dos\u00edt\u00e1sa", + "webhook_was_triggered": "A webhook a jelzett tranzakci\u00f3n\u00e1l aktiv\u00e1l\u00f3dott. K\u00e9rem, v\u00e1rjon az eredm\u00e9nyek megjel\u00edt\u00e9s\u00e9re.", + "view_message": "\u00dczenet megtekint\u00e9se", + "view_attempts": "Sikertelen k\u00eds\u00e9rletek megjelen\u00edt\u00e9se", + "message_content_title": "Webhook \u00fczenet tartalma", + "message_content_help": "Az \u00fczenet tartalma amit a webhook k\u00fcld\u00f6tt (vagy k\u00eds\u00e9relt meg k\u00fcldeni).", + "attempt_content_title": "Webhook k\u00eds\u00e9rletek", + "attempt_content_help": "Az \u00f6sszes sikertelen\u00fcl k\u00fcld\u00f6tt webhook \u00fczenet a be\u00e1ll\u00edtott URL-re. Id\u0151vel a Firefly III felhagy a pr\u00f3b\u00e1lkoz\u00e1ssal.", + "no_attempts": "Nincsenek sikertelen k\u00eds\u00e9rletek. Nagyon j\u00f3!", + "webhook_attempt_at": "K\u00eds\u00e9rlet {moment}-kor", + "logs": "Napl\u00f3k", + "response": "V\u00e1lasz", + "visit_webhook_url": "Webhook URL megl\u00e1togat\u00e1sa", + "reset_webhook_secret": "Webhook titok vissza\u00e1ll\u00edt\u00e1sa" }, "form": { "url": "URL", diff --git a/resources/assets/js/locales/id.json b/resources/assets/js/locales/id.json index 52625bdb16..658f7bfcd4 100644 --- a/resources/assets/js/locales/id.json +++ b/resources/assets/js/locales/id.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Apa yang sedang dimainkan?", "flash_error": "Kesalahan!", + "flash_warning": "PERINGATAN!", "flash_success": "Keberhasilan!", "close": "Dekat", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Description of the split transaction", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Pisah", "single_split": "Pisah", "transaction_stored_link": "Transaction #{ID} (\"{title}\")<\/a> has been stored.", @@ -24,11 +27,13 @@ "destination_account": "Akun tujuan", "add_another_split": "Tambahkan perpecahan lagi", "submission": "Submission", + "stored_journal": "Berhasil membuat transaksi baru \":description\"", "create_another": "After storing, return here to create another one.", "reset_after": "Reset form after submission", "submit": "Menyerahkan", "amount": "Jumlah", "date": "Tanggal", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Tag", "no_budget": "(no budget)", "no_bill": "(no bill)", diff --git a/resources/assets/js/locales/it.json b/resources/assets/js/locales/it.json index 04a278f409..83df157f95 100644 --- a/resources/assets/js/locales/it.json +++ b/resources/assets/js/locales/it.json @@ -2,8 +2,11 @@ "firefly": { "welcome_back": "La tua situazione finanziaria", "flash_error": "Errore!", + "flash_warning": "Avviso!", "flash_success": "Successo!", "close": "Chiudi", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Descrizione della transazione suddivisa", "errors_submission": "Errore durante l'invio. Controlla gli errori segnalati qui sotto.", "split": "Dividi", @@ -14,9 +17,9 @@ "transaction_updated_link": "La transazione #{ID}<\/a> (\"{title}\") \u00e8 stata aggiornata.", "transaction_new_stored_link": "La transazione #{ID}<\/a> \u00e8 stata salvata.", "transaction_journal_information": "Informazioni transazione", - "submission_options": "Submission options", - "apply_rules_checkbox": "Apply rules", - "fire_webhooks_checkbox": "Fire webhooks", + "submission_options": "Opzioni di invio", + "apply_rules_checkbox": "Applica le regole", + "fire_webhooks_checkbox": "Esegui webhook", "no_budget_pointer": "Sembra che tu non abbia ancora dei budget. Dovresti crearne alcuni nella pagina dei budget<\/a>. I budget possono aiutarti a tenere traccia delle spese.", "no_bill_pointer": "Sembra che tu non abbia ancora delle bollette. Dovresti crearne alcune nella pagina delle bollette<\/a>. Le bollette possono aiutarti a tenere traccia delle spese.", "source_account": "Conto di origine", @@ -24,11 +27,13 @@ "destination_account": "Conto destinazione", "add_another_split": "Aggiungi un'altra divisione", "submission": "Invio", + "stored_journal": "Nuova transazione \":description\" creata correttamente", "create_another": "Dopo il salvataggio, torna qui per crearne un'altra.", "reset_after": "Resetta il modulo dopo l'invio", "submit": "Invia", "amount": "Importo", "date": "Data", + "is_reconciled_fields_dropped": "Poich\u00e9 questa transazione \u00e8 riconciliata, non potrai aggiornare i conti, n\u00e9 gli importi.", "tags": "Etichette", "no_budget": "(nessun budget)", "no_bill": "(nessuna bolletta)", @@ -68,7 +73,7 @@ "profile_oauth_edit_client": "Modifica client", "profile_oauth_name_help": "Qualcosa di cui i tuoi utenti potranno riconoscere e fidarsi.", "profile_oauth_redirect_url": "URL di reindirizzamento", - "profile_oauth_clients_external_auth": "If you're using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.", + "profile_oauth_clients_external_auth": "Se stai utilizzando un fornitore di autenticazione esterno come Authelia, i client di OAuth non funzioneranno. Puoi utilizzare soltanto i Token d'Accesso Personale.", "profile_oauth_redirect_url_help": "L'URL di callback dell'autorizzazione della tua applicazione.", "profile_authorized_apps": "Applicazioni autorizzate", "profile_authorized_clients": "Client autorizzati", diff --git a/resources/assets/js/locales/ja.json b/resources/assets/js/locales/ja.json index 0457e06a55..7c7c7d34e1 100644 --- a/resources/assets/js/locales/ja.json +++ b/resources/assets/js/locales/ja.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "\u6982\u8981", "flash_error": "\u30a8\u30e9\u30fc\uff01", + "flash_warning": "\u8b66\u544a\uff01", "flash_success": "\u6210\u529f\u3057\u307e\u3057\u305f\uff01", "close": "\u9589\u3058\u308b", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "\u5206\u5272\u53d6\u5f15\u306e\u6982\u8981", - "errors_submission": "\u9001\u4fe1\u5185\u5bb9\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3057\u305f\u3002\u30a8\u30e9\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "\u5206\u5272", "single_split": "\u5206\u5272", "transaction_stored_link": "\u53d6\u5f15 #{ID}\u300c{title}\u300d<\/a> \u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\u3002", @@ -24,11 +27,13 @@ "destination_account": "\u9810\u3051\u5165\u308c\u53e3\u5ea7", "add_another_split": "\u5225\u306e\u5206\u5272\u3092\u8ffd\u52a0", "submission": "\u9001\u4fe1", + "stored_journal": "\u53d6\u5f15\u300c:description\u300d\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f", "create_another": "\u4fdd\u5b58\u5f8c\u306b\u623b\u308a\u4f5c\u6210\u3092\u7d9a\u3051\u308b\u3002", "reset_after": "\u9001\u4fe1\u5f8c\u306b\u30d5\u30a9\u30fc\u30e0\u3092\u30ea\u30bb\u30c3\u30c8", "submit": "\u9001\u4fe1", "amount": "\u91d1\u984d", "date": "\u65e5\u4ed8", + "is_reconciled_fields_dropped": "\u3053\u306e\u53d6\u5f15\u306f\u7167\u5408\u6e08\u307f\u306e\u305f\u3081\u3001\u53e3\u5ea7\u3084\u91d1\u984d\u3092\u66f4\u65b0\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002", "tags": "\u30bf\u30b0", "no_budget": "(\u4e88\u7b97\u306a\u3057)", "no_bill": "(\u8acb\u6c42\u306a\u3057)", diff --git a/resources/assets/js/locales/ko.json b/resources/assets/js/locales/ko.json index 8e4c7f1c6a..15c1700f79 100644 --- a/resources/assets/js/locales/ko.json +++ b/resources/assets/js/locales/ko.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "\ubb34\uc2a8 \uc77c\uc774\uc8e0?", "flash_error": "\uc624\ub958!", + "flash_warning": "\uacbd\uace0!", "flash_success": "\uc131\uacf5!", "close": "\ub2eb\uae30", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "\ubd84\ud560 \uac70\ub798\uc5d0 \ub300\ud55c \uc124\uba85", - "errors_submission": "\uc81c\ucd9c\ud55c \ub0b4\uc6a9\uc5d0 \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc624\ub958\ub97c \ud655\uc778\ud574 \uc8fc\uc138\uc694.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "\ub098\ub204\uae30", "single_split": "\ub098\ub204\uae30", "transaction_stored_link": "\uac70\ub798 #{ID} (\"{title}\")<\/a>\uac00 \uc800\uc7a5\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", @@ -24,11 +27,13 @@ "destination_account": "\ub300\uc0c1 \uacc4\uc815", "add_another_split": "\ub2e4\ub978 \ubd84\ud560 \ucd94\uac00", "submission": "\uc81c\ucd9c", + "stored_journal": "\uc0c8\ub85c\uc6b4 \":description\" \uac70\ub798 \uc0dd\uc131 \uc131\uacf5", "create_another": "\uc800\uc7a5\ud6c4 \uc774 \ud398\uc774\uc9c0\ub85c \ub3cc\uc544\uc640 \ub2e4\ub978 \uac83\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.", "reset_after": "\uc81c\ucd9c \ud6c4 \uc591\uc2dd \uc7ac\uc124\uc815", "submit": "\uc81c\ucd9c", "amount": "\uae08\uc561", "date": "\ub0a0\uc9dc", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\ud0dc\uadf8", "no_budget": "(\uc608\uc0b0 \uc5c6\uc74c)", "no_bill": "(\uccad\uad6c\uc11c \uc5c6\uc74c)", diff --git a/resources/assets/js/locales/nb.json b/resources/assets/js/locales/nb.json index 038d7d9172..3ee13ffde7 100644 --- a/resources/assets/js/locales/nb.json +++ b/resources/assets/js/locales/nb.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Hvordan g\u00e5r det?", "flash_error": "Feil!", + "flash_warning": "Advarsel!", "flash_success": "Suksess!", "close": "Lukk", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Beskrivelse av den splittende transaksjon", - "errors_submission": "Noe gikk galt med innleveringen. Vennligst sjekk ut feilene.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Del opp", "single_split": "Del opp", "transaction_stored_link": "Transaksjon #{ID} (\"{title}\")<\/a> har blitt lagret.", @@ -23,12 +26,14 @@ "hidden_fields_preferences": "You can enable more transaction options in your preferences<\/a>.", "destination_account": "Destinasjonskonto", "add_another_split": "Legg til en oppdeling til", - "submission": "Submission", + "submission": "Innlevering", + "stored_journal": "Opprettet ny transaksjon \":description\"", "create_another": "G\u00e5 tilbake hit etter lagring for \u00e5 opprette en ny.", "reset_after": "Nullstill skjema etter innsending", "submit": "Send inn", "amount": "Bel\u00f8p", "date": "Dato", + "is_reconciled_fields_dropped": "Fordi denne transaksjonen er avstemt, vil du ikke kunne oppdatere kontoene eller bel\u00f8pene.", "tags": "Tagger", "no_budget": "(ingen budsjett)", "no_bill": "(ingen regning)", @@ -46,7 +51,7 @@ "split_transaction_title_help": "Hvis du oppretter en splittet transaksjon, m\u00e5 du ha en hoved beskrivelse for alle deler av transaksjonen.", "destination_account_reconciliation": "Du kan ikke redigere kildekontoen for en avstemmingstransaksjon.", "source_account_reconciliation": "Du kan ikke redigere kildekontoen for en avstemmingstransaksjon.", - "budget": "Busjett", + "budget": "Budsjett", "bill": "Regning", "you_create_withdrawal": "Du lager et uttak.", "you_create_transfer": "Du lager en overf\u00f8ring.", diff --git a/resources/assets/js/locales/nl.json b/resources/assets/js/locales/nl.json index f4b1927816..3db52eb611 100644 --- a/resources/assets/js/locales/nl.json +++ b/resources/assets/js/locales/nl.json @@ -2,8 +2,11 @@ "firefly": { "welcome_back": "Hoe staat het er voor?", "flash_error": "Fout!", + "flash_warning": "Waarschuwing!", "flash_success": "Gelukt!", "close": "Sluiten", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Beschrijving van de gesplitste transactie", "errors_submission": "Er ging iets mis. Check de errors.", "split": "Splitsen", @@ -24,11 +27,13 @@ "destination_account": "Doelrekening", "add_another_split": "Voeg een split toe", "submission": "Indienen", + "stored_journal": "Nieuw transactie \":description\" opgeslagen", "create_another": "Terug naar deze pagina voor een nieuwe transactie.", "reset_after": "Reset formulier na opslaan", "submit": "Invoeren", "amount": "Bedrag", "date": "Datum", + "is_reconciled_fields_dropped": "Omdat deze transactie al is afgestemd, kan je het bedrag noch de rekeningen wijzigen.", "tags": "Tags", "no_budget": "(geen budget)", "no_bill": "(geen contract)", @@ -152,6 +157,6 @@ }, "config": { "html_language": "nl", - "date_time_fns": "D MMMM yyyy @ HH:mm:ss" + "date_time_fns": "d MMMM yyyy @ HH:mm:ss" } } \ No newline at end of file diff --git a/resources/assets/js/locales/nn.json b/resources/assets/js/locales/nn.json index f22e55dd0b..0c57001a34 100644 --- a/resources/assets/js/locales/nn.json +++ b/resources/assets/js/locales/nn.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Korleis g\u00e5r det?", "flash_error": "Feil!", + "flash_warning": "Advarsel!", "flash_success": "Suksess!", "close": "Lukk", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Beskrivinga av den splitta transaksjonen", - "errors_submission": "Noko gjekk gale med innleveringa. Ver venleg \u00e5 sjekk feila.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Del opp", "single_split": "Del opp", "transaction_stored_link": "Transaksjon #{ID} (\"{title}\")<\/a> har vorte lagra.", @@ -24,11 +27,13 @@ "destination_account": "M\u00e5lkonto", "add_another_split": "Legg til ein oppdeling til", "submission": "Submission", + "stored_journal": "Opprettet ny transaksjon \":description\"", "create_another": "G\u00e5 tilbake hit etter lagring for \u00e5 oppretta ein ny.", "reset_after": "Nullstill skjema etter innsending", "submit": "Send inn", "amount": "Bel\u00f8p", "date": "Dato", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "N\u00f8kkelord", "no_budget": "(ingen budsjett)", "no_bill": "(ingen rekning)", diff --git a/resources/assets/js/locales/pl.json b/resources/assets/js/locales/pl.json index 34b7177077..9b50dfea21 100644 --- a/resources/assets/js/locales/pl.json +++ b/resources/assets/js/locales/pl.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Co jest grane?", "flash_error": "B\u0142\u0105d!", + "flash_warning": "Ostrze\u017cenie!", "flash_success": "Sukces!", "close": "Zamknij", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Opis podzielonej transakcji", - "errors_submission": "Co\u015b posz\u0142o nie tak w czasie zapisu. Prosz\u0119 sprawd\u017a b\u0142\u0119dy.", + "errors_submission": "Co\u015b posz\u0142o nie tak w czasie zapisu. Prosz\u0119, sprawd\u017a b\u0142\u0119dy poni\u017cej.", "split": "Podziel", "single_split": "Podzia\u0142", "transaction_stored_link": "Transakcja #{ID} (\"{title}\")<\/a> zosta\u0142a zapisana.", @@ -24,11 +27,13 @@ "destination_account": "Konto docelowe", "add_another_split": "Dodaj kolejny podzia\u0142", "submission": "Zapisz", + "stored_journal": "Pomy\u015blnie utworzono now\u0105 transakcj\u0119 \":description\"", "create_another": "Po zapisaniu wr\u00f3\u0107 tutaj, aby utworzy\u0107 kolejny.", "reset_after": "Wyczy\u015b\u0107 formularz po zapisaniu", "submit": "Prze\u015blij", "amount": "Kwota", "date": "Data", + "is_reconciled_fields_dropped": "Poniewa\u017c ta transakcja jest uzgodniona, nie b\u0119dziesz w stanie zaktualizowa\u0107 ani kont, ani kwot.", "tags": "Tagi", "no_budget": "(brak bud\u017cetu)", "no_bill": "(brak rachunku)", @@ -68,7 +73,7 @@ "profile_oauth_edit_client": "Edytuj klienta", "profile_oauth_name_help": "Co\u015b, co Twoi u\u017cytkownicy b\u0119d\u0105 rozpoznawa\u0107 i ufa\u0107.", "profile_oauth_redirect_url": "Przekierowanie URL", - "profile_oauth_clients_external_auth": "If you're using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.", + "profile_oauth_clients_external_auth": "Je\u015bli u\u017cywasz zewn\u0119trznego dostawcy uwierzytelniania, takiego jak Authelia, klienci OAuth nie b\u0119d\u0105 dzia\u0142a\u0107. Mo\u017cesz u\u017cywa\u0107 tylko osobistych token\u00f3w dost\u0119pu.", "profile_oauth_redirect_url_help": "Adres URL wywo\u0142ania zwrotnego autoryzacji aplikacji.", "profile_authorized_apps": "Autoryzowane aplikacje", "profile_authorized_clients": "Autoryzowani klienci", diff --git a/resources/assets/js/locales/pt-br.json b/resources/assets/js/locales/pt-br.json index a0efbaf68a..49346d4897 100644 --- a/resources/assets/js/locales/pt-br.json +++ b/resources/assets/js/locales/pt-br.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "O que est\u00e1 acontecendo?", "flash_error": "Erro!", + "flash_warning": "Aten\u00e7\u00e3o!", "flash_success": "Sucesso!", "close": "Fechar", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Descri\u00e7\u00e3o da transa\u00e7\u00e3o dividida", - "errors_submission": "H\u00e1 algo de errado com o seu envio. Por favor, verifique os erros abaixo.", + "errors_submission": "Algo deu errado com seu envio. Por favor, verifique os erros abaixo.", "split": "Dividir", "single_split": "Divis\u00e3o", "transaction_stored_link": "Transa\u00e7\u00e3o #{ID} (\"{title}\")<\/a> foi salva.", @@ -24,11 +27,13 @@ "destination_account": "Conta destino", "add_another_split": "Adicionar outra divis\u00e3o", "submission": "Envio", + "stored_journal": "Transa\u00e7\u00e3o \":description\" inclu\u00edda com sucesso", "create_another": "Depois de armazenar, retorne aqui para criar outro.", "reset_after": "Limpar o formul\u00e1rio ap\u00f3s o envio", "submit": "Enviar", "amount": "Valor", "date": "Data", + "is_reconciled_fields_dropped": "Como a transa\u00e7\u00e3o est\u00e1 reconciliada, voc\u00ea n\u00e3o pode atualizar as contas, nem o(s) valor(es).", "tags": "Tags", "no_budget": "(sem or\u00e7amento)", "no_bill": "(sem fatura)", @@ -44,7 +49,7 @@ "no_piggy_bank": "(nenhum cofrinho)", "description": "Descri\u00e7\u00e3o", "split_transaction_title_help": "Se voc\u00ea criar uma transa\u00e7\u00e3o dividida, deve haver uma descri\u00e7\u00e3o global para todas as partes da transa\u00e7\u00e3o.", - "destination_account_reconciliation": "Voc\u00ea n\u00e3o pode editar a conta de origem de uma transa\u00e7\u00e3o de reconcilia\u00e7\u00e3o.", + "destination_account_reconciliation": "Voc\u00ea n\u00e3o pode editar a conta destino de uma transa\u00e7\u00e3o de reconcilia\u00e7\u00e3o.", "source_account_reconciliation": "Voc\u00ea n\u00e3o pode editar a conta de origem de uma transa\u00e7\u00e3o de reconcilia\u00e7\u00e3o.", "budget": "Or\u00e7amento", "bill": "Fatura", @@ -89,9 +94,9 @@ "profile_oauth_confidential": "Confidencial", "profile_oauth_confidential_help": "Exige que o cliente se autentique com um segredo. Clientes confidenciais podem manter credenciais de forma segura sem exp\u00f4-las \u00e0 partes n\u00e3o autorizadas. Aplica\u00e7\u00f5es p\u00fablicas, como aplica\u00e7\u00f5es de \u00e1rea de trabalho nativas ou JavaScript SPA, s\u00e3o incapazes de manter segredos com seguran\u00e7a.", "multi_account_warning_unknown": "Dependendo do tipo de transa\u00e7\u00e3o que voc\u00ea criar, a conta de origem e\/ou de destino das divis\u00f5es subsequentes pode ser sobrescrita pelo que estiver definido na primeira divis\u00e3o da transa\u00e7\u00e3o.", - "multi_account_warning_withdrawal": "Tenha em mente que a conta de origem das subsequentes divis\u00f5es ser\u00e1 sobrescrita pelo que estiver definido na primeira divis\u00e3o da sa\u00edda.", + "multi_account_warning_withdrawal": "Tenha em mente que a conta de origem das divis\u00f5es subsequentes ser\u00e1 sobrescrita pelo que estiver definido na primeira divis\u00e3o da sa\u00edda.", "multi_account_warning_deposit": "Tenha em mente que a conta de destino das divis\u00f5es subsequentes ser\u00e1 sobrescrita pelo que estiver definido na primeira divis\u00e3o da entrada.", - "multi_account_warning_transfer": "Tenha em mente que a conta de origem + de destino das divis\u00f5es subsequentes ser\u00e1 sobrescrita pelo que for definido na primeira divis\u00e3o da transfer\u00eancia.", + "multi_account_warning_transfer": "Tenha em mente que a conta de origem + de destino das divis\u00f5es subsequentes ser\u00e3o sobrescritas pelo que for definido na primeira divis\u00e3o da transfer\u00eancia.", "webhook_trigger_STORE_TRANSACTION": "Ap\u00f3s cria\u00e7\u00e3o da transa\u00e7\u00e3o", "webhook_trigger_UPDATE_TRANSACTION": "Ap\u00f3s atualiza\u00e7\u00e3o da transa\u00e7\u00e3o", "webhook_trigger_DESTROY_TRANSACTION": "Ap\u00f3s exclus\u00e3o da transa\u00e7\u00e3o", @@ -128,10 +133,10 @@ }, "form": { "url": "URL", - "active": "Ativar", - "interest_date": "Data de interesse", + "active": "Ativo", + "interest_date": "Data do juros", "title": "T\u00edtulo", - "book_date": "Data reserva", + "book_date": "Data de lan\u00e7amento", "process_date": "Data de processamento", "due_date": "Data de vencimento", "foreign_amount": "Montante em moeda estrangeira", diff --git a/resources/assets/js/locales/pt.json b/resources/assets/js/locales/pt.json index e7b4a1a378..eb8864f5f0 100644 --- a/resources/assets/js/locales/pt.json +++ b/resources/assets/js/locales/pt.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Painel de controlo", "flash_error": "Erro!", + "flash_warning": "Aviso!", "flash_success": "Sucesso!", "close": "Fechar", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Descri\u00e7\u00e3o da transa\u00e7\u00e3o dividida", - "errors_submission": "Aconteceu algo errado com a sua submiss\u00e3o. Por favor, verifique os erros.", + "errors_submission": "Algo correu mal com o envio dos dados. Por favor verifique e corrija os erros abaixo.", "split": "Dividir", "single_split": "Divis\u00e3o", "transaction_stored_link": "A transa\u00e7\u00e3o #{ID} (\"{title}\")<\/a> foi guardada.", @@ -24,11 +27,13 @@ "destination_account": "Conta de destino", "add_another_split": "Adicionar outra divis\u00e3o", "submission": "Submiss\u00e3o", + "stored_journal": "Inserida a transa\u00e7\u00e3o \":description\" com sucesso", "create_another": "Depois de guardar, voltar aqui para criar outra.", "reset_after": "Reiniciar o formul\u00e1rio ap\u00f3s o envio", "submit": "Guardar", "amount": "Montante", "date": "Data", + "is_reconciled_fields_dropped": "Como esta transa\u00e7\u00e3o est\u00e1 reconciliada, n\u00e3o pode atualizar as contas, nem os montantes.", "tags": "Etiquetas", "no_budget": "(sem or\u00e7amento)", "no_bill": "(sem encargo)", diff --git a/resources/assets/js/locales/ro.json b/resources/assets/js/locales/ro.json index 47248b3d58..4c770f6538 100644 --- a/resources/assets/js/locales/ro.json +++ b/resources/assets/js/locales/ro.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Ce se red\u0103?", "flash_error": "Eroare!", + "flash_warning": "Avertizare!", "flash_success": "Succes!", "close": "\u00cenchide", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Descrierea tranzac\u021biei divizate", - "errors_submission": "A fost ceva \u00een neregul\u0103 cu depunerea ta. Te rug\u0103m s\u0103 verifici erorile.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "\u00cemparte", "single_split": "\u00cemparte", "transaction_stored_link": "Tranzac\u021bia #{ID} (\"{title}\")<\/a> a fost stocat\u0103.", @@ -24,11 +27,13 @@ "destination_account": "Contul de destina\u021bie", "add_another_split": "Ad\u0103uga\u021bi o divizare", "submission": "Transmitere", + "stored_journal": "A fost creat\u0103 cu succes o tranzac\u021bie nou\u0103 \":description\"", "create_another": "Dup\u0103 stocare, reveni\u021bi aici pentru a crea alta.", "reset_after": "Reseta\u021bi formularul dup\u0103 trimitere", "submit": "Trimite", "amount": "Sum\u0103", "date": "Dat\u0103", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etichete", "no_budget": "(nici un buget)", "no_bill": "(f\u0103r\u0103 factur\u0103)", diff --git a/resources/assets/js/locales/ru.json b/resources/assets/js/locales/ru.json index 5443cd80f5..cf5d1d41e0 100644 --- a/resources/assets/js/locales/ru.json +++ b/resources/assets/js/locales/ru.json @@ -2,15 +2,18 @@ "firefly": { "welcome_back": "\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043c\u043e\u0438\u043c\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438?", "flash_error": "\u041e\u0448\u0438\u0431\u043a\u0430!", + "flash_warning": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435!", "flash_success": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e!", "close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", - "errors_submission": "\u041f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0438\u0436\u0435.", + "errors_submission": "\u0421 \u0432\u0430\u0448\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0438\u0436\u0435.", "split": "\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c", "single_split": "\u0420\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f", "transaction_stored_link": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f #{ID} (\"{title}\")<\/a> \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430.", - "webhook_stored_link": "Webhook #{ID} (\"{title}\")<\/a> has been stored.", - "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") has been updated.", + "webhook_stored_link": "\u0412\u0435\u0431-\u0445\u0443\u043a #{ID} (\"{title}\")<\/a> \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d.", + "webhook_updated_link": "\u0412\u0435\u0431-\u0445\u0443\u043a #{ID} (\"{title}\")<\/a> \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d.", "transaction_updated_link": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f #{ID}<\/a> (\"{title}\") \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430.", "transaction_new_stored_link": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f #{ID}<\/a> \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430.", "transaction_journal_information": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438", @@ -24,11 +27,13 @@ "destination_account": "\u0421\u0447\u0451\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f", "add_another_split": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0447\u0430\u0441\u0442\u044c", "submission": "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c", + "stored_journal": "\u041d\u043e\u0432\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \":description\" \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0430", "create_another": "\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0441\u044e\u0434\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c.", "reset_after": "\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438", "submit": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c", "amount": "\u0421\u0443\u043c\u043c\u0430", "date": "\u0414\u0430\u0442\u0430", + "is_reconciled_fields_dropped": "\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0441\u0432\u0435\u0440\u0435\u043d\u0430, \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0447\u0435\u0442\u0430, \u043d\u0438 \u0441\u0443\u043c\u043c\u0443(\u044b).", "tags": "\u041c\u0435\u0442\u043a\u0438", "no_budget": "(\u0432\u043d\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u0430)", "no_bill": "(\u043d\u0435\u0442 \u0441\u0447\u0451\u0442\u0430 \u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0443)", @@ -107,24 +112,24 @@ "inspect": "\u041f\u0440\u043e\u0438\u043d\u0441\u043f\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c", "create_new_webhook": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0432\u0435\u0431\u0445\u0443\u043a", "webhooks": "\u0412\u0435\u0431-\u0445\u0443\u043a\u0438", - "webhook_trigger_form_help": "Indicate on what event the webhook will trigger", - "webhook_response_form_help": "Indicate what the webhook must submit to the URL.", - "webhook_delivery_form_help": "Which format the webhook must deliver data in.", - "webhook_active_form_help": "The webhook must be active or it won't be called.", + "webhook_trigger_form_help": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435, \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0431-\u0445\u0443\u043a", + "webhook_response_form_help": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u0435\u0431-\u0445\u0443\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 URL.", + "webhook_delivery_form_help": "\u0412 \u043a\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0431-\u0445\u0443\u043a\u0430.", + "webhook_active_form_help": "\u0412\u0435\u0431-\u0445\u0443\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0438\u043b\u0438 \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d.", "edit_webhook_js": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0431\u0445\u0443\u043a \"{title}\"", - "webhook_was_triggered": "The webhook was triggered on the indicated transaction. Please wait for results to appear.", + "webhook_was_triggered": "\u0412\u0435\u0431-\u0445\u0443\u043a \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0434\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.", "view_message": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f", "view_attempts": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a", "message_content_title": "\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f webhook", - "message_content_help": "This is the content of the message that was sent (or tried) using this webhook.", - "attempt_content_title": "Webhook attempts", - "attempt_content_help": "These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.", - "no_attempts": "There are no unsuccessful attempts. That's a good thing!", - "webhook_attempt_at": "Attempt at {moment}", + "message_content_help": "\u042d\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e (\u0438\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u043e) \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0432\u0435\u0431-\u0445\u0443\u043a\u0430.", + "attempt_content_title": "\u041f\u043e\u043f\u044b\u0442\u043a\u0438 \u0432\u0435\u0431-\u0445\u0443\u043a\u0430", + "attempt_content_help": "\u042d\u0442\u043e \u0432\u0441\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u0432\u0435\u0431-\u0445\u0443\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 URL. \u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f Firefly III \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0438.", + "no_attempts": "\u041d\u0435\u0442 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e!", + "webhook_attempt_at": "\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432 {moment}", "logs": "\u041b\u043e\u0433\u0438", "response": "\u041e\u0442\u0432\u0435\u0442", "visit_webhook_url": "\u041f\u043e\u0441\u0435\u0442\u0438\u0442\u044c URL \u0432\u0435\u0431\u0445\u0443\u043a\u0430", - "reset_webhook_secret": "Reset webhook secret" + "reset_webhook_secret": "\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0435\u043a\u0440\u0435\u0442 webhook" }, "form": { "url": "\u0421\u0441\u044b\u043b\u043a\u0430", diff --git a/resources/assets/js/locales/sk.json b/resources/assets/js/locales/sk.json index 4f4c07f397..61191157b4 100644 --- a/resources/assets/js/locales/sk.json +++ b/resources/assets/js/locales/sk.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Ako to ide?", "flash_error": "Chyba!", + "flash_warning": "Varovanie!", "flash_success": "Hotovo!", "close": "Zavrie\u0165", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Popis roz\u00fa\u010dtovania", - "errors_submission": "Pri odosielan\u00ed sa nie\u010do nepodarilo. Skontrolujte pros\u00edm chyby.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Roz\u00fa\u010dtova\u0165", "single_split": "Roz\u00fa\u010dtova\u0165", "transaction_stored_link": "Transakcia #{ID} (\"{title}\")<\/a> bola ulo\u017een\u00e1.", @@ -24,11 +27,13 @@ "destination_account": "Cie\u013eov\u00fd \u00fa\u010det", "add_another_split": "Prida\u0165 \u010fal\u0161ie roz\u00fa\u010dtovanie", "submission": "Odoslanie", + "stored_journal": "Nov\u00e1 transakcia \u201e:description\u201c bola vytvoren\u00e1", "create_another": "Po ulo\u017een\u00ed sa vr\u00e1ti\u0165 sp\u00e4\u0165 sem a vytvori\u0165 \u010fal\u0161\u00ed.", "reset_after": "Po odoslan\u00ed vynulova\u0165 formul\u00e1r", "submit": "Odosla\u0165", "amount": "Suma", "date": "D\u00e1tum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u0160t\u00edtky", "no_budget": "(\u017eiadny rozpo\u010det)", "no_bill": "(\u017eiadny \u00fa\u010det)", diff --git a/resources/assets/js/locales/sl.json b/resources/assets/js/locales/sl.json index 3a8232b4d6..8b935efafe 100644 --- a/resources/assets/js/locales/sl.json +++ b/resources/assets/js/locales/sl.json @@ -1,34 +1,39 @@ { "firefly": { - "welcome_back": "Kaj dogaja?", + "welcome_back": "Kaj vse se dogaja?", "flash_error": "Napaka!", + "flash_warning": "Opozorilo!", "flash_success": "Uspelo je!", - "close": "zapri", - "split_transaction_title": "Opis deljene transakcije", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "close": "Zapri", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", + "split_transaction_title": "Opis razdeljene transakcije", + "errors_submission": "Nekaj je bilo narobe z va\u0161o oddajo. Preverite spodnje napake.", "split": "Razdeli", "single_split": "Razdeli", - "transaction_stored_link": "Transaction #{ID} (\"{title}\")<\/a> has been stored.", + "transaction_stored_link": "Transakcija \u0161t. #{ID} (\"{title}\")<\/a> je bila shranjena.", "webhook_stored_link": "Webhook #{ID} (\"{title}\")<\/a> je bil shranjen.", - "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") je posodobljen.", - "transaction_updated_link": "Transaction #{ID}<\/a> (\"{title}\") has been updated.", - "transaction_new_stored_link": "Transaction #{ID}<\/a> has been stored.", + "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") je bil posodobljen.", + "transaction_updated_link": "Transakcija \u0161t. #{ID}<\/a> (\"{title}\") je bila posodobljena.", + "transaction_new_stored_link": "Transakcija \u0161t. #{ID}<\/a> je bila shranjena.", "transaction_journal_information": "Informacije o transakciji", - "submission_options": "Submission options", - "apply_rules_checkbox": "Uporabi pravila", - "fire_webhooks_checkbox": "Spro\u017ei Webhooke", + "submission_options": "Mo\u017enosti oddaje", + "apply_rules_checkbox": "Uporabite pravila", + "fire_webhooks_checkbox": "Spro\u017eite Webhooke", "no_budget_pointer": "Zdi se, da \u0161e nimate prora\u010duna. Ustvarite jih nekaj na strani prora\u010duni<\/a>. Prora\u010duni vam lahko pomagajo spremljati stro\u0161ke.", "no_bill_pointer": "Zdi se, da \u0161e nimate ra\u010dunov. Ustvarite jih na strani ra\u010duni<\/a>. Ra\u010duni vam lahko pomagajo spremljati stro\u0161ke.", "source_account": "Izvorni ra\u010dun", - "hidden_fields_preferences": "You can enable more transaction options in your preferences<\/a>.", + "hidden_fields_preferences": "Ve\u010d mo\u017enosti transakcije lahko omogo\u010dite v nastavitvah<\/a>.", "destination_account": "Ciljni ra\u010dun", - "add_another_split": "Dodaj delitev", - "submission": "Oddaja", - "create_another": "After storing, return here to create another one.", - "reset_after": "Reset form after submission", - "submit": "Potrdi", + "add_another_split": "Dodaj \u0161e eno razdelitev", + "submission": "Predlo\u017eitev", + "stored_journal": "Nova transakcija \":description\" je uspe\u0161no ustvarjena", + "create_another": "Po shranjevanju se vrnite sem, da ustvarite \u0161e enega.", + "reset_after": "Po predlo\u017eitvi ponastavite obrazec", + "submit": "Potrdite", "amount": "Znesek", "date": "Datum", + "is_reconciled_fields_dropped": "Ker je ta transakcija usklajena, ne boste mogli posodobiti ra\u010dunov niti zneskov.", "tags": "Oznake", "no_budget": "(brez prora\u010duna)", "no_bill": "(ni ra\u010duna)", @@ -37,61 +42,61 @@ "notes": "Opombe", "external_url": "Zunanji URL", "update_transaction": "Posodobi transakcije", - "after_update_create_another": "After updating, return here to continue editing.", - "store_as_new": "Store as a new transaction instead of updating.", - "split_title_help": "\u010ce ustvarite deljeno transakcijo, mora obstajati globalni opis za vse dele transakcije.", + "after_update_create_another": "Po posodobitvi se vrnite sem za nadaljevanje urejanja.", + "store_as_new": "Shranite kot novo transakcijo namesto posodabljanja.", + "split_title_help": "\u010ce ustvarite razdeljeno transakcijo, mora obstajati globalni opis za vse dele transakcije.", "none_in_select_list": "(brez)", "no_piggy_bank": "(brez hranilnika)", "description": "Opis", - "split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction.", + "split_transaction_title_help": "\u010ce ustvarite razdeljeno transakcijo, mora obstajati globalni opis za vse razdelitve transakcije.", "destination_account_reconciliation": "Pri usklajevalni transakciji ni mo\u017eno urejati ciljnega ra\u010duna.", "source_account_reconciliation": "Pri usklajevalni transakciji ni mo\u017eno urejati izvornega ra\u010duna.", "budget": "Prora\u010dun", - "bill": "Trajnik", - "you_create_withdrawal": "You're creating a withdrawal.", - "you_create_transfer": "You're creating a transfer.", - "you_create_deposit": "You're creating a deposit.", - "edit": "uredi", - "delete": "izbri\u0161i", + "bill": "Ra\u010dun", + "you_create_withdrawal": "Ustvarjate odliv.", + "you_create_transfer": "Ustvarjate prenos.", + "you_create_deposit": "Ustvarja\u0161 priliv.", + "edit": "Uredi", + "delete": "Izbri\u0161i", "name": "Ime", "profile_whoops": "Ups!", "profile_something_wrong": "Nekaj je \u0161lo narobe!", - "profile_try_again": "Something went wrong. Please try again.", - "profile_oauth_clients": "OAuth Clients", - "profile_oauth_no_clients": "You have not created any OAuth clients.", - "profile_oauth_clients_header": "Clients", + "profile_try_again": "Nekaj \u200b\u200bje \u0161lo narobe. Prosim poskusite znova.", + "profile_oauth_clients": "Odjemalci OAuth", + "profile_oauth_no_clients": "Ustvarili niste \u0161e nobenega odjemalca OAuth.", + "profile_oauth_clients_header": "Odjemalci", "profile_oauth_client_id": "Client ID", "profile_oauth_client_name": "Ime", - "profile_oauth_client_secret": "Skrivnost", - "profile_oauth_create_new_client": "Create New Client", - "profile_oauth_create_client": "Create Client", + "profile_oauth_client_secret": "Skrivna koda", + "profile_oauth_create_new_client": "Ustvari novega odjemalca", + "profile_oauth_create_client": "Ustvari odjemalca", "profile_oauth_edit_client": "Urejanje odjemalca", - "profile_oauth_name_help": "Something your users will recognize and trust.", - "profile_oauth_redirect_url": "Redirect URL", - "profile_oauth_clients_external_auth": "If you're using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.", - "profile_oauth_redirect_url_help": "Your application's authorization callback URL.", - "profile_authorized_apps": "Authorized applications", - "profile_authorized_clients": "Authorized clients", - "profile_scopes": "Obseg", - "profile_revoke": "Prekli\u010di", - "profile_personal_access_tokens": "Personal Access Tokens", - "profile_personal_access_token": "Personal Access Token", - "profile_personal_access_token_explanation": "Here is your new personal access token. This is the only time it will be shown so don't lose it! You may now use this token to make API requests.", - "profile_no_personal_access_token": "You have not created any personal access tokens.", + "profile_oauth_name_help": "Nekaj, kar bodo va\u0161i uporabniki prepoznali in mu zaupali.", + "profile_oauth_redirect_url": "URL preusmeritve", + "profile_oauth_clients_external_auth": "\u010ce uporabljate zunanjega ponudnika preverjanja pristnosti, kot je Authelia, odjemalci OAuth ne bodo delovali. Uporabljate lahko samo osebne \u017eetone za dostop.", + "profile_oauth_redirect_url_help": "URL povratnega klica avtorizacije va\u0161e aplikacije.", + "profile_authorized_apps": "Poobla\u0161\u010dene aplikacije", + "profile_authorized_clients": "Poobla\u0161\u010deni odjemalci", + "profile_scopes": "Podro\u010dja", + "profile_revoke": "Odvzemi dostop", + "profile_personal_access_tokens": "Osebni dostopni \u017eetoni", + "profile_personal_access_token": "Osebni dostopni \u017eeton", + "profile_personal_access_token_explanation": "Tukaj je va\u0161 novi \u017eeton za osebni dostop. To je edini \u010das, da bo prikazan, zato ga ne izgubite! Od zdaj naprej lahko uporabite ta \u017eeton za po\u0161iljanje zahtev API.", + "profile_no_personal_access_token": "Niste ustvarili nobenih osebnih \u017eetonov za dostop.", "profile_create_new_token": "Ustvari nov \u017eeton", "profile_create_token": "Ustvari \u017eeton", "profile_create": "Ustvari", "profile_save_changes": "Shrani spremembe", - "default_group_title_name": "(ungrouped)", + "default_group_title_name": "(nezdru\u017eeno)", "piggy_bank": "Dodaj hranilnik", - "profile_oauth_client_secret_title": "Client Secret", - "profile_oauth_client_secret_expl": "Here is your new client secret. This is the only time it will be shown so don't lose it! You may now use this secret to make API requests.", + "profile_oauth_client_secret_title": "Skrivna koda odjemalca", + "profile_oauth_client_secret_expl": "Tukaj je skrivna koda va\u0161ega odjemalca. To je edini \u010das, da bo prikazana, zato je ne izgubite! Zdaj lahko uporabite to skrivno kodo za po\u0161iljanje zahtev API.", "profile_oauth_confidential": "Zaupno", - "profile_oauth_confidential_help": "Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.", - "multi_account_warning_unknown": "Depending on the type of transaction you create, the source and\/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.", - "multi_account_warning_withdrawal": "Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.", - "multi_account_warning_deposit": "Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.", - "multi_account_warning_transfer": "Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.", + "profile_oauth_confidential_help": "Od odjemalca zahtevajte avtentikacijo s skrivno kodo. Zaupni odjemalci imajo lahko poverilnice na varen na\u010din, ne da bi jih izpostavili nepoobla\u0161\u010denim osebam. Javne aplikacije, kot so izvorne namizne aplikacije ali aplikacije JavaScript SPA, ne morejo varno hraniti skrivnih kod.", + "multi_account_warning_unknown": "Odvisno od vrste transakcije, ki jo ustvarite, lahko izvorni in\/ali ciljni ra\u010dun poznej\u0161ih razdelitev preglasi tisto, kar je definirano v prvi razdelitvi transakcije.", + "multi_account_warning_withdrawal": "Upo\u0161tevajte, da bo izvorni ra\u010dun poznej\u0161ih razdelitev preglasilo tisto, kar je definirano v prvi razdelitvi odliva.", + "multi_account_warning_deposit": "Upo\u0161tevajte, da bo ciljni ra\u010dun poznej\u0161ih delitev preglasilo tisto, kar je opredeljeno v prvi delitvi priliva.", + "multi_account_warning_transfer": "Upo\u0161tevajte, da bo izvorni + ciljni ra\u010dun poznej\u0161ih razdelitev preglasilo tisto, kar je definirano v prvi razdelitvi prenosa.", "webhook_trigger_STORE_TRANSACTION": "Po ustvarjanju transakcije", "webhook_trigger_UPDATE_TRANSACTION": "Po posodabljanju transakcije", "webhook_trigger_DESTROY_TRANSACTION": "Po brisanju transakcije", @@ -103,12 +108,12 @@ "meta_data": "Meta podatki", "webhook_messages": "Webhook sporo\u010dilo", "inactive": "Neaktivno", - "no_webhook_messages": "Tukaj ni sporo\u010dil spletnih kljuk", + "no_webhook_messages": "Tukaj ni webhook sporo\u010dil", "inspect": "Preglejte", "create_new_webhook": "Ustvari nov webhook", - "webhooks": "Spletne kljuke (Webhooks)", + "webhooks": "Webhooks", "webhook_trigger_form_help": "Navedite, ob katerem dogodku se bo spro\u017eil webhook", - "webhook_response_form_help": "Navedite, kaj mora webhook predlo\u017eiti URL-ju.", + "webhook_response_form_help": "Navedite, kaj mora webhook poslati po URL-ju.", "webhook_delivery_form_help": "V kateri obliki mora webhook dostaviti podatke.", "webhook_active_form_help": "Webhook mora biti aktiven, sicer ne bo poklican.", "edit_webhook_js": "Uredi webhook \"{title}\"", @@ -119,12 +124,12 @@ "message_content_help": "To je vsebina sporo\u010dila, ki je bilo poslano (ali poskuseno) s tem webhookom.", "attempt_content_title": "Poskusi Webhook", "attempt_content_help": "To so vsi neuspe\u0161ni poskusi po\u0161iljanja tega sporo\u010dila webhook na konfigurirani URL. \u010cez nekaj \u010dasa bo Firefly III nehal posku\u0161ati.", - "no_attempts": "Neuspe\u0161nih poskusov ni. To je dobra stvar!", + "no_attempts": "Ni neuspe\u0161nih poskusov. To je dobra stvar!", "webhook_attempt_at": "Poskus ob {moment}", - "logs": "Logi", + "logs": "Dnevniki", "response": "Odziv", "visit_webhook_url": "Obi\u0161\u010dite URL webhooka", - "reset_webhook_secret": "Ponastavi skrivnost webhooka" + "reset_webhook_secret": "Ponastavi skrivno kodo webhooka" }, "form": { "url": "URL", diff --git a/resources/assets/js/locales/sv.json b/resources/assets/js/locales/sv.json index 790b5aa810..7bfa04fc1b 100644 --- a/resources/assets/js/locales/sv.json +++ b/resources/assets/js/locales/sv.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Vad spelas?", "flash_error": "Fel!", + "flash_warning": "Varning!", "flash_success": "Slutf\u00f6rd!", "close": "St\u00e4ng", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Beskrivning av delad transaktion", - "errors_submission": "N\u00e5got fel uppstod med inskickningen. V\u00e4nligen kontrollera felen nedan.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Dela", "single_split": "Dela", "transaction_stored_link": "Transaktion #{ID} (\"{title}\")<\/a> sparades.", @@ -24,11 +27,13 @@ "destination_account": "Till konto", "add_another_split": "L\u00e4gga till en annan delning", "submission": "Inskickning", + "stored_journal": "Skapade ny transaktion \":description\"", "create_another": "Efter sparat, \u00e5terkom hit f\u00f6r att skapa ytterligare en.", "reset_after": "\u00c5terst\u00e4ll formul\u00e4r efter inskickat", "submit": "Skicka", "amount": "Belopp", "date": "Datum", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etiketter", "no_budget": "(ingen budget)", "no_bill": "(ingen r\u00e4kning)", @@ -139,16 +144,16 @@ "invoice_date": "Fakturadatum", "internal_reference": "Intern referens", "webhook_response": "Response", - "webhook_trigger": "Trigger", + "webhook_trigger": "Utl\u00f6sare", "webhook_delivery": "Delivery" }, "list": { "active": "\u00c4r aktiv?", - "trigger": "Trigger", - "response": "Response", - "delivery": "Delivery", + "trigger": "Utl\u00f6sare", + "response": "Svar", + "delivery": "Leverans", "url": "URL", - "secret": "Secret" + "secret": "Hemlighet" }, "config": { "html_language": "sv", diff --git a/resources/assets/js/locales/tr.json b/resources/assets/js/locales/tr.json index 5df7ae320e..f83416b8d7 100644 --- a/resources/assets/js/locales/tr.json +++ b/resources/assets/js/locales/tr.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "Neler oluyor?", "flash_error": "Hata!", + "flash_warning": "Uyar\u0131!", "flash_success": "Ba\u015far\u0131l\u0131!", "close": "Kapat", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Description of the split transaction", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "B\u00f6l", "single_split": "B\u00f6l", "transaction_stored_link": "\u0130\u015flem #{ID} (\"{title}\")<\/a> sakl\u0131 olmu\u015ftur.", @@ -24,11 +27,13 @@ "destination_account": "Hedef hesap", "add_another_split": "Ba\u015fka bir b\u00f6lme ekle", "submission": "Submission", + "stored_journal": "\":description\" Yeni i\u015flem ba\u015far\u0131yla olu\u015fturuldu", "create_another": "After storing, return here to create another one.", "reset_after": "Reset form after submission", "submit": "G\u00f6nder", "amount": "Miktar", "date": "Tarih", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Etiketler", "no_budget": "(b\u00fct\u00e7e yok)", "no_bill": "(hay\u0131r bill)", diff --git a/resources/assets/js/locales/uk.json b/resources/assets/js/locales/uk.json index 5b9e04e509..06664f7bcc 100644 --- a/resources/assets/js/locales/uk.json +++ b/resources/assets/js/locales/uk.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "\u0429\u043e \u0432 \u0433\u0430\u043c\u0430\u043d\u0446\u0456?", "flash_error": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430!", + "flash_warning": "\u0423\u0432\u0430\u0433\u0430!", "flash_success": "\u0423\u0441\u043f\u0456\u0448\u043d\u043e!", "close": "\u0417\u0430\u043a\u0440\u0438\u0442\u0438", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "Description of the split transaction", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438", "single_split": "\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438", "transaction_stored_link": "Transaction #{ID} (\"{title}\")<\/a> has been stored.", @@ -24,11 +27,13 @@ "destination_account": "\u0420\u0430\u0445\u0443\u043d\u043e\u043a \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f", "add_another_split": "Add another split", "submission": "Submission", + "stored_journal": "Successfully created new transaction \":description\"", "create_another": "After storing, return here to create another one.", "reset_after": "Reset form after submission", "submit": "\u041f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438", "amount": "\u0421\u0443\u043c\u0430", "date": "\u0414\u0430\u0442\u0430", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u0422\u0435\u0433\u0438", "no_budget": "(\u043f\u043e\u0437\u0430 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c)", "no_bill": "(no bill)", @@ -68,7 +73,7 @@ "profile_oauth_edit_client": "\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043a\u043b\u0456\u0454\u043d\u0442\u0430", "profile_oauth_name_help": "\u0429\u043e\u0441\u044c, \u0449\u043e \u0432\u0430\u0448\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0456 \u0432\u043f\u0456\u0437\u043d\u0430\u044e\u0442\u044c \u0456 \u0434\u043e\u0432\u0456\u0440\u044f\u0442\u0438\u043c\u0443\u0442\u044c.", "profile_oauth_redirect_url": "URL-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044f", - "profile_oauth_clients_external_auth": "If you're using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.", + "profile_oauth_clients_external_auth": "\u042f\u043a\u0449\u043e \u0432\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044c\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0447\u0430\u043b\u044c\u043d\u0438\u043a\u0430 \u0430\u0432\u0442\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u0457, \u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434 Authelia, \u043a\u043b\u0456\u0454\u043d\u0442\u0438 OAuth \u043d\u0435 \u043f\u0440\u0430\u0446\u044e\u0432\u0430\u0442\u0438\u043c\u0443\u0442\u044c. \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043b\u0438\u0448\u0435 \u043e\u0441\u043e\u0431\u0438\u0441\u0442\u0456 \u0442\u043e\u043a\u0435\u043d\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0443.", "profile_oauth_redirect_url_help": "\u0417\u043e\u0432\u043d\u0456\u0448\u043d\u0456\u0439 URL \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0456\u0457 \u0434\u043e\u0434\u0430\u0442\u043a\u0430.", "profile_authorized_apps": "\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u0456 \u0434\u043e\u0434\u0430\u0442\u043a\u0438", "profile_authorized_clients": "\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u0456 \u043a\u043b\u0456\u0454\u043d\u0442\u0438", @@ -88,10 +93,10 @@ "profile_oauth_client_secret_expl": "\u041e\u0441\u044c \u043d\u043e\u0432\u0438\u0439 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u0438\u0439 \u043a\u043b\u044e\u0447 \u043a\u043b\u0456\u0454\u043d\u0442\u0430. \u0426\u0435 \u0454\u0434\u0438\u043d\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u043b\u0438 \u0432\u0456\u043d \u0431\u0443\u0434\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439, \u0442\u043e\u043c\u0443 \u043d\u0435 \u0432\u0442\u0440\u0430\u0447\u0430\u0439\u0442\u0435 \u0439\u043e\u0433\u043e! \u0422\u0435\u043f\u0435\u0440 \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u0438\u0439 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u043d\u0430\u0434\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0437\u0430\u043f\u0438\u0442\u0456\u0432 API.", "profile_oauth_confidential": "\u041a\u043e\u043d\u0444\u0456\u0434\u0435\u043d\u0446\u0456\u0439\u043d\u043e", "profile_oauth_confidential_help": "\u0412\u0438\u043c\u0430\u0433\u0430\u0439\u0442\u0435 \u0432\u0456\u0434 \u043a\u043b\u0456\u0454\u043d\u0442\u0430 \u0430\u0432\u0442\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u0457 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430. \u041a\u043e\u043d\u0444\u0456\u0434\u0435\u043d\u0446\u0456\u0439\u043d\u0456 \u043a\u043b\u0456\u0454\u043d\u0442\u0438 \u043c\u043e\u0436\u0443\u0442\u044c \u0431\u0435\u0437\u043f\u0435\u0447\u043d\u043e \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043e\u0431\u043b\u0456\u043a\u043e\u0432\u0456 \u0434\u0430\u043d\u0456, \u0431\u0435\u0437 \u043d\u0430\u0434\u0430\u043d\u043d\u044f \u0457\u0445 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u0438\u043c \u043e\u0441\u043e\u0431\u0430\u043c. \u041f\u0443\u0431\u043b\u0456\u0447\u043d\u0456 \u0434\u043e\u0434\u0430\u0442\u043a\u0438, \u0442\u0430\u043a\u0456 \u044f\u043a native desktop \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0438 \u0430\u0431\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0438 JavaScript SPA, \u043d\u0435 \u043c\u043e\u0436\u0443\u0442\u044c \u043d\u0430\u0434\u0456\u0439\u043d\u043e \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u0438.", - "multi_account_warning_unknown": "Depending on the type of transaction you create, the source and\/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.", - "multi_account_warning_withdrawal": "Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.", - "multi_account_warning_deposit": "Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.", - "multi_account_warning_transfer": "Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.", + "multi_account_warning_unknown": "\u0417\u0430\u043b\u0435\u0436\u043d\u043e \u0432\u0456\u0434 \u0442\u0438\u043f\u0443 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0457, \u044f\u043a\u0443 \u0432\u0438 \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u0442\u0435, \u0432\u0438\u0445\u0456\u0434\u043d\u0438\u043c \u0456\/\u0430\u0431\u043e \u0446\u0456\u043b\u044c\u043e\u0432\u0438\u043c \u0440\u0430\u0445\u0443\u043d\u043a\u043e\u043c \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0445 \u043f\u043e\u0434\u0456\u043b\u0456\u0432 \u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438 \u0440\u0430\u0445\u0443\u043d\u043e\u043a, \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0443 \u043f\u0435\u0440\u0448\u043e\u043c\u0443 \u043f\u043e\u0434\u0456\u043b\u0456 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0457.", + "multi_account_warning_withdrawal": "\u0417\u0430\u0443\u0432\u0430\u0436\u0442\u0435, \u0449\u043e \u0432\u0438\u0445\u0456\u0434\u043d\u0438\u043c \u0440\u0430\u0445\u0443\u043d\u043a\u043e\u043c \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0445 \u0440\u043e\u0437\u043f\u043e\u0434\u0456\u043b\u0456\u0432 \u0431\u0443\u0434\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0440\u0430\u0445\u0443\u043d\u043e\u043a, \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0443 \u043f\u0435\u0440\u0448\u043e\u043c\u0443 \u0440\u043e\u0437\u043f\u043e\u0434\u0456\u043b\u0456 \u0432\u0438\u043f\u043b\u0430\u0442.", + "multi_account_warning_deposit": "\u0417\u0430\u0443\u0432\u0430\u0436\u0442\u0435, \u0449\u043e \u0446\u0456\u043b\u044c\u043e\u0432\u0438\u043c \u0440\u0430\u0445\u0443\u043d\u043a\u043e\u043c \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0445 \u0440\u043e\u0437\u043f\u043e\u0434\u0456\u043b\u0456\u0432 \u0431\u0443\u0434\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0440\u0430\u0445\u0443\u043d\u043e\u043a, \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0443 \u043f\u0435\u0440\u0448\u043e\u043c\u0443 \u0440\u043e\u0437\u043f\u043e\u0434\u0456\u043b\u0456 \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0443.", + "multi_account_warning_transfer": "\u0417\u0430\u0443\u0432\u0430\u0436\u0442\u0435, \u0449\u043e \u043e\u0431\u043b\u0456\u043a\u043e\u0432\u0456 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0436\u0435\u0440\u0435\u043b\u0430 \u0442\u0430 \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0445 \u043f\u043e\u0434\u0456\u043b\u0456\u0432 \u0431\u0443\u0434\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u0440\u0430\u0445\u0443\u043d\u043e\u043a, \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0443 \u043f\u0435\u0440\u0448\u043e\u043c\u0443 \u043f\u043e\u0434\u0456\u043b\u0456 \u043f\u0435\u0440\u0435\u043a\u0430\u0437\u0443.", "webhook_trigger_STORE_TRANSACTION": "\u041f\u0456\u0441\u043b\u044f \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457", "webhook_trigger_UPDATE_TRANSACTION": "\u041f\u0456\u0441\u043b\u044f \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457", "webhook_trigger_DESTROY_TRANSACTION": "\u041f\u0456\u0441\u043b\u044f \u0432\u0438\u0434\u0430\u043b\u0435\u043d\u043d\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457", @@ -129,18 +134,18 @@ "form": { "url": "URL-\u0430\u0434\u0440\u0435\u0441\u0430", "active": "\u0410\u043a\u0442\u0438\u0432\u043d\u043e", - "interest_date": "\u0414\u0430\u0442\u0430 \u043d\u0430\u0440\u0430\u0445\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0456\u0434\u0441\u043e\u0442\u043a\u0443", + "interest_date": "\u0414\u0430\u0442\u0430 \u043d\u0430\u0440\u0430\u0445\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0456\u0434\u0441\u043e\u0442\u043a\u0456\u0432", "title": "\u041d\u0430\u0437\u0432\u0430", - "book_date": "\u0414\u0430\u0442\u0430 \u043e\u0431\u043b\u0456\u043a\u0443", + "book_date": "\u0414\u0430\u0442\u0430 \u0431\u0440\u043e\u043d\u044e\u0432\u0430\u043d\u043d\u044f", "process_date": "\u0414\u0430\u0442\u0430 \u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u043d\u043d\u044f", "due_date": "\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f", "foreign_amount": "\u0406\u043d\u043e\u0437\u0435\u043c\u043d\u0430 \u0441\u0443\u043c\u0430", "payment_date": "\u0414\u0430\u0442\u0430 \u043e\u043f\u043b\u0430\u0442\u0438", - "invoice_date": "\u0414\u0430\u0442\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443", + "invoice_date": "\u0414\u0430\u0442\u0430 \u0440\u0430\u0445\u0443\u043d\u043a\u0443-\u0444\u0430\u043a\u0442\u0443\u0440\u0438", "internal_reference": "\u0412\u043d\u0443\u0442\u0440\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f", - "webhook_response": "Response", - "webhook_trigger": "Trigger", - "webhook_delivery": "Delivery" + "webhook_response": "\u0412\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c", + "webhook_trigger": "\u0422\u0440\u0438\u0433\u0435\u0440", + "webhook_delivery": "\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430" }, "list": { "active": "\u0427\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0438\u0439?", @@ -152,6 +157,6 @@ }, "config": { "html_language": "uk", - "date_time_fns": "\u041c\u041c\u041c\u041c do, \u0440\u0456\u043a @ \u0413\u0413:\u0445\u0432:\u0441\u0435\u043a" + "date_time_fns": "MMMM do, yyyy @ HH:mm:ss" } } \ No newline at end of file diff --git a/resources/assets/js/locales/vi.json b/resources/assets/js/locales/vi.json index 6841e52b5c..41ba0ceae9 100644 --- a/resources/assets/js/locales/vi.json +++ b/resources/assets/js/locales/vi.json @@ -2,33 +2,38 @@ "firefly": { "welcome_back": "Ch\u00e0o m\u1eebng tr\u1edf l\u1ea1i?", "flash_error": "L\u1ed7i!", + "flash_warning": "C\u1ea3nh b\u00e1o!", "flash_success": "Th\u00e0nh c\u00f4ng!", "close": "\u0110\u00f3ng", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "M\u00f4 t\u1ea3 giao d\u1ecbch t\u00e1ch", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "Chia ra", "single_split": "Chia ra", "transaction_stored_link": "Giao d\u1ecbch #{ID} (\"{title}\")<\/a> \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef.", - "webhook_stored_link": "Webhook #{ID} (\"{title}\")<\/a> has been stored.", - "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") has been updated.", + "webhook_stored_link": "Webhook #{ID} (\"{title}\")<\/a> \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef.", + "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.", "transaction_updated_link": "Transaction #{ID}<\/a> (\"{title}\") has been updated.", "transaction_new_stored_link": " Giao d\u1ecbch #{ID}<\/a> \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef.", "transaction_journal_information": "Th\u00f4ng tin giao d\u1ecbch", "submission_options": "Submission options", "apply_rules_checkbox": "Apply rules", "fire_webhooks_checkbox": "Fire webhooks", - "no_budget_pointer": "You seem to have no budgets yet. You should create some on the budgets<\/a>-page. Budgets can help you keep track of expenses.", - "no_bill_pointer": "You seem to have no bills yet. You should create some on the bills<\/a>-page. Bills can help you keep track of expenses.", + "no_budget_pointer": "D\u01b0\u1eddng nh\u01b0 b\u1ea1n ch\u01b0a c\u00f3 ng\u00e2n s\u00e1ch. B\u1ea1n n\u00ean t\u1ea1o v\u00e0i c\u00e1i t\u1ea1i trang ng\u00e2n s\u00e1ch<\/a>-. Ng\u00e2n s\u00e1ch c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n theo d\u00f5i chi ti\u00eau.", + "no_bill_pointer": "D\u01b0\u1eddng nh\u01b0 b\u1ea1n ch\u01b0a c\u00f3 h\u00f3a \u0111\u01a1n. B\u1ea1n n\u00ean t\u1ea1o v\u00e0i c\u00e1i t\u1ea1i trang h\u00f3a \u0111\u01a1n<\/a>-. H\u00f3a \u0111\u01a1n c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n theo d\u00f5i chi ti\u00eau.", "source_account": "Ngu\u1ed3n t\u00e0i kho\u1ea3n", "hidden_fields_preferences": "You can enable more transaction options in your preferences<\/a>.", "destination_account": "T\u00e0i kho\u1ea3n \u0111\u00edch", "add_another_split": "Th\u00eam m\u1ed9t ph\u00e2n chia kh\u00e1c", "submission": "G\u1eedi", + "stored_journal": "T\u1ea1o th\u00e0nh c\u00f4ng giao d\u1ecbch m\u1edbi \":description\"", "create_another": "Sau khi l\u01b0u tr\u1eef, quay tr\u1edf l\u1ea1i \u0111\u00e2y \u0111\u1ec3 t\u1ea1o m\u1ed9t c\u00e1i kh\u00e1c.", "reset_after": "\u0110\u1eb7t l\u1ea1i m\u1eabu sau khi g\u1eedi", "submit": "G\u1eedi", "amount": "S\u1ed1 ti\u1ec1n", "date": "Ng\u00e0y", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "Nh\u00e3n", "no_budget": "(kh\u00f4ng c\u00f3 ng\u00e2n s\u00e1ch)", "no_bill": "(no bill)", @@ -92,39 +97,39 @@ "multi_account_warning_withdrawal": "Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.", "multi_account_warning_deposit": "Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.", "multi_account_warning_transfer": "Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.", - "webhook_trigger_STORE_TRANSACTION": "After transaction creation", - "webhook_trigger_UPDATE_TRANSACTION": "After transaction update", - "webhook_trigger_DESTROY_TRANSACTION": "After transaction delete", - "webhook_response_TRANSACTIONS": "Transaction details", - "webhook_response_ACCOUNTS": "Account details", - "webhook_response_none_NONE": "No details", + "webhook_trigger_STORE_TRANSACTION": "Sau khi t\u1ea1o giao d\u1ecbch", + "webhook_trigger_UPDATE_TRANSACTION": "Sau khi c\u1eadp nh\u1eadt giao d\u1ecbch", + "webhook_trigger_DESTROY_TRANSACTION": "Sau khi x\u00f3a giao d\u1ecbch", + "webhook_response_TRANSACTIONS": "Chi ti\u1ebft giao d\u1ecbch", + "webhook_response_ACCOUNTS": "Chi ti\u1ebft t\u00e0i kho\u1ea3n", + "webhook_response_none_NONE": "Kh\u00f4ng c\u00f3 chi ti\u1ebft", "webhook_delivery_JSON": "JSON", "actions": "H\u00e0nh \u0111\u1ed9ng", "meta_data": "Meta data", - "webhook_messages": "Webhook message", + "webhook_messages": "Tin nh\u1eafn webhook", "inactive": "Kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng", - "no_webhook_messages": "There are no webhook messages", - "inspect": "Inspect", - "create_new_webhook": "Create new webhook", + "no_webhook_messages": "Kh\u00f4ng c\u00f3 tin nh\u1eafn webhook", + "inspect": "Ki\u1ec3m tra", + "create_new_webhook": "T\u1ea1o webhook m\u1edbi", "webhooks": "Webhooks", - "webhook_trigger_form_help": "Indicate on what event the webhook will trigger", - "webhook_response_form_help": "Indicate what the webhook must submit to the URL.", - "webhook_delivery_form_help": "Which format the webhook must deliver data in.", - "webhook_active_form_help": "The webhook must be active or it won't be called.", - "edit_webhook_js": "Edit webhook \"{title}\"", - "webhook_was_triggered": "The webhook was triggered on the indicated transaction. Please wait for results to appear.", - "view_message": "View message", - "view_attempts": "View failed attempts", - "message_content_title": "Webhook message content", - "message_content_help": "This is the content of the message that was sent (or tried) using this webhook.", - "attempt_content_title": "Webhook attempts", - "attempt_content_help": "These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.", - "no_attempts": "There are no unsuccessful attempts. That's a good thing!", - "webhook_attempt_at": "Attempt at {moment}", - "logs": "Logs", - "response": "Response", - "visit_webhook_url": "Visit webhook URL", - "reset_webhook_secret": "Reset webhook secret" + "webhook_trigger_form_help": "Ch\u1ecdn lo\u1ea1i s\u1ef1 ki\u1ec7n n\u00e0o webhook s\u1ebd k\u00edch ho\u1ea1t", + "webhook_response_form_help": "Ch\u1ecdn URL n\u00e0o webhook s\u1ebd g\u1eedi th\u00f4ng tin.", + "webhook_delivery_form_help": "Lo\u1ea1i \u0111\u1ecbnh d\u1ea1ng webhook g\u1eedi d\u1eef li\u1ec7u v\u00e0o.", + "webhook_active_form_help": "Webhook ph\u1ea3i \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t ho\u1eb7c n\u00f3 s\u1ebd \u0111\u01b0\u1ee3c g\u1ecdi.", + "edit_webhook_js": "S\u1eeda webhook \"{title}\"", + "webhook_was_triggered": "Webhook s\u1ebd k\u00edch ho\u1ea1t tr\u00ean nh\u1eefng giao d\u1ecbch n\u00e0y. Xin \u0111\u1ee3i m\u1ed9t l\u00fac \u0111\u1ec3 k\u1ebft qu\u1ea3 hi\u1ec7n ra.", + "view_message": "Xem tin nh\u1eafn", + "view_attempts": "Xem nh\u1eefng l\u1ea7n th\u1eed l\u1ed7i", + "message_content_title": "N\u1ed9i dung tin nh\u1eafn webhook", + "message_content_help": "\u0110\u00e2y l\u00e0 n\u1ed9i dung c\u1ee7a tin nh\u1eafn \u0111\u00e3 \u0111\u01b0\u1ee3c g\u1eedi (hay \u0111\u00e3 th\u1eed) b\u1eb1ng nh\u1eefng webhook n\u00e0y.", + "attempt_content_title": "C\u00e1c l\u1ea7n th\u1eed webhook", + "attempt_content_help": "\u0110\u00e2y l\u00e0 t\u1ea5t c\u1ea3 nh\u1eefng l\u1ea7n th\u1eed g\u1eedi c\u00e1c tin nh\u1eafn webhook \u0111\u1ebfn URL ch\u1ec9 \u0111\u1ecbnh nh\u01b0ng kh\u00f4ng th\u00e0nh c\u00f4ng. Sau m\u1ed9t kho\u1ea3ng th\u1eddi gian Firefly III s\u1ebd d\u1eebng th\u1eed.", + "no_attempts": "Kh\u00f4ng c\u00f3 l\u1ea7n th\u1eed kh\u00f4ng th\u00e0nh c\u00f4ng n\u00e0o. Th\u1eadt l\u00e0 t\u1ed1t!", + "webhook_attempt_at": "Th\u1eed l\u00fac {moment}", + "logs": "Nh\u1eadt k\u00fd", + "response": "\u0110\u00e1p l\u1ea1i", + "visit_webhook_url": "\u0110i \u0111\u1ebfn webhook URL", + "reset_webhook_secret": "C\u00e0i l\u1ea1i kh\u00f3a webhook" }, "form": { "url": "URL", @@ -138,20 +143,20 @@ "payment_date": "Ng\u00e0y thanh to\u00e1n", "invoice_date": "Ng\u00e0y h\u00f3a \u0111\u01a1n", "internal_reference": "T\u00e0i li\u1ec7u tham kh\u1ea3o n\u1ed9i b\u1ed9", - "webhook_response": "Response", - "webhook_trigger": "Trigger", - "webhook_delivery": "Delivery" + "webhook_response": "\u0110\u00e1p l\u1ea1i", + "webhook_trigger": "K\u00edch ho\u1ea1t", + "webhook_delivery": "Ph\u00e2n ph\u1ed1i" }, "list": { "active": "\u0110ang ho\u1ea1t \u0111\u1ed9ng?", - "trigger": "Trigger", - "response": "Response", - "delivery": "Delivery", + "trigger": "K\u00edch ho\u1ea1t", + "response": "\u0110\u00e1p l\u1ea1i", + "delivery": "Ph\u00e2n ph\u1ed1i", "url": "URL", - "secret": "Secret" + "secret": "M\u00e3 b\u00ed m\u1eadt" }, "config": { "html_language": "vi", - "date_time_fns": "MMMM do, yyyy @ HH:mm:ss" + "date_time_fns": "d MMMM yyyy @ HH:mm:ss" } } \ No newline at end of file diff --git a/resources/assets/js/locales/zh-cn.json b/resources/assets/js/locales/zh-cn.json index 67dedf9fd5..1c88f23e1a 100644 --- a/resources/assets/js/locales/zh-cn.json +++ b/resources/assets/js/locales/zh-cn.json @@ -2,10 +2,13 @@ "firefly": { "welcome_back": "\u4eca\u5929\u7406\u8d22\u4e86\u5417\uff1f", "flash_error": "\u9519\u8bef\uff01", + "flash_warning": "\u8b66\u544a\uff01", "flash_success": "\u6210\u529f\uff01", "close": "\u5173\u95ed", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "\u62c6\u5206\u4ea4\u6613\u7684\u63cf\u8ff0", - "errors_submission": "\u60a8\u63d0\u4ea4\u7684\u5185\u5bb9\u6709\u8bef\uff0c\u8bf7\u68c0\u67e5\u9519\u8bef\u4fe1\u606f\u3002", + "errors_submission": "\u60a8\u7684\u63d0\u4ea4\u6709\u8bef\uff0c\u8bf7\u67e5\u770b\u4e0b\u9762\u8f93\u51fa\u7684\u9519\u8bef\u4fe1\u606f\u3002", "split": "\u62c6\u5206", "single_split": "\u62c6\u5206", "transaction_stored_link": "\u4ea4\u6613 #{ID} (\u201c{title}\u201d)<\/a> \u5df2\u4fdd\u5b58\u3002", @@ -24,11 +27,13 @@ "destination_account": "\u76ee\u6807\u8d26\u6237", "add_another_split": "\u589e\u52a0\u53e6\u4e00\u7b14\u62c6\u5206", "submission": "\u63d0\u4ea4", + "stored_journal": "\u6210\u529f\u521b\u5efa\u65b0\u4ea4\u6613\u201c:description\u201d", "create_another": "\u4fdd\u5b58\u540e\uff0c\u8fd4\u56de\u6b64\u9875\u9762\u4ee5\u521b\u5efa\u65b0\u8bb0\u5f55", "reset_after": "\u63d0\u4ea4\u540e\u91cd\u7f6e\u8868\u5355", "submit": "\u63d0\u4ea4", "amount": "\u91d1\u989d", "date": "\u65e5\u671f", + "is_reconciled_fields_dropped": "\u8fd9\u7b14\u4ea4\u6613\u5df2\u7ecf\u5bf9\u8d26\uff0c\u60a8\u65e0\u6cd5\u66f4\u65b0\u8d26\u6237\uff0c\u4e5f\u65e0\u6cd5\u66f4\u65b0\u91d1\u989d\u3002", "tags": "\u6807\u7b7e", "no_budget": "(\u65e0\u9884\u7b97)", "no_bill": "(\u65e0\u8d26\u5355)", diff --git a/resources/assets/js/locales/zh-tw.json b/resources/assets/js/locales/zh-tw.json index 20d0271714..931d5a63e3 100644 --- a/resources/assets/js/locales/zh-tw.json +++ b/resources/assets/js/locales/zh-tw.json @@ -2,12 +2,15 @@ "firefly": { "welcome_back": "What's playing?", "flash_error": "\u932f\u8aa4\uff01", + "flash_warning": "\u8b66\u544a\uff01", "flash_success": "\u6210\u529f\uff01", "close": "\u95dc\u9589", + "select_dest_account": "Please select or type a valid destination account name", + "select_source_account": "Please select or type a valid source account name", "split_transaction_title": "\u62c6\u5206\u4ea4\u6613\u7684\u63cf\u8ff0", - "errors_submission": "There was something wrong with your submission. Please check out the errors.", + "errors_submission": "There was something wrong with your submission. Please check out the errors below.", "split": "\u5206\u5272", - "single_split": "Split", + "single_split": "\u62c6\u5206", "transaction_stored_link": "Transaction #{ID} (\"{title}\")<\/a> has been stored.", "webhook_stored_link": "Webhook #{ID} (\"{title}\")<\/a> has been stored.", "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") has been updated.", @@ -24,11 +27,13 @@ "destination_account": "\u76ee\u6a19\u5e33\u6236", "add_another_split": "\u589e\u52a0\u62c6\u5206", "submission": "Submission", + "stored_journal": "\u5df2\u6210\u529f\u5efa\u7acb\u65b0\u4ea4\u6613 \u201c:description\u201d", "create_another": "After storing, return here to create another one.", "reset_after": "Reset form after submission", "submit": "\u9001\u51fa", "amount": "\u91d1\u984d", "date": "\u65e5\u671f", + "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).", "tags": "\u6a19\u7c64", "no_budget": "(\u7121\u9810\u7b97)", "no_bill": "(no bill)", @@ -41,7 +46,7 @@ "store_as_new": "Store as a new transaction instead of updating.", "split_title_help": "\u82e5\u60a8\u5efa\u7acb\u4e00\u7b46\u62c6\u5206\u4ea4\u6613\uff0c\u9808\u6709\u4e00\u500b\u6709\u95dc\u4ea4\u6613\u6240\u6709\u62c6\u5206\u7684\u6574\u9ad4\u63cf\u8ff0\u3002", "none_in_select_list": "(\u7a7a)", - "no_piggy_bank": "(no piggy bank)", + "no_piggy_bank": "(\u7121\u5c0f\u8c6c\u64b2\u6eff)", "description": "\u63cf\u8ff0", "split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction.", "destination_account_reconciliation": "You can't edit the destination account of a reconciliation transaction.", @@ -92,11 +97,11 @@ "multi_account_warning_withdrawal": "Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.", "multi_account_warning_deposit": "Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.", "multi_account_warning_transfer": "Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.", - "webhook_trigger_STORE_TRANSACTION": "After transaction creation", - "webhook_trigger_UPDATE_TRANSACTION": "After transaction update", - "webhook_trigger_DESTROY_TRANSACTION": "After transaction delete", - "webhook_response_TRANSACTIONS": "Transaction details", - "webhook_response_ACCOUNTS": "Account details", + "webhook_trigger_STORE_TRANSACTION": "\u5728\u4ea4\u6613\u5efa\u7acb\u5f8c", + "webhook_trigger_UPDATE_TRANSACTION": "\u5728\u4ea4\u6613\u66f4\u65b0\u5f8c", + "webhook_trigger_DESTROY_TRANSACTION": "\u5728\u4ea4\u6613\u522a\u9664\u5f8c", + "webhook_response_TRANSACTIONS": "\u4ea4\u6613\u8a73\u60c5", + "webhook_response_ACCOUNTS": "\u5e33\u865f\u8a73\u60c5", "webhook_response_none_NONE": "No details", "webhook_delivery_JSON": "JSON", "actions": "\u64cd\u4f5c", @@ -104,7 +109,7 @@ "webhook_messages": "Webhook message", "inactive": "\u672a\u555f\u7528", "no_webhook_messages": "There are no webhook messages", - "inspect": "Inspect", + "inspect": "\u6aa2\u67e5", "create_new_webhook": "Create new webhook", "webhooks": "Webhooks", "webhook_trigger_form_help": "Indicate on what event the webhook will trigger", @@ -113,7 +118,7 @@ "webhook_active_form_help": "The webhook must be active or it won't be called.", "edit_webhook_js": "Edit webhook \"{title}\"", "webhook_was_triggered": "The webhook was triggered on the indicated transaction. Please wait for results to appear.", - "view_message": "View message", + "view_message": "\u67e5\u770b\u8a0a\u606f", "view_attempts": "View failed attempts", "message_content_title": "Webhook message content", "message_content_help": "This is the content of the message that was sent (or tried) using this webhook.", @@ -121,8 +126,8 @@ "attempt_content_help": "These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.", "no_attempts": "There are no unsuccessful attempts. That's a good thing!", "webhook_attempt_at": "Attempt at {moment}", - "logs": "Logs", - "response": "Response", + "logs": "\u7d00\u9304\u65e5\u8a8c", + "response": "\u56de\u8986", "visit_webhook_url": "Visit webhook URL", "reset_webhook_secret": "Reset webhook secret" }, diff --git a/frontend/src/api/rule-groups/post.js b/resources/assets/v2/api/v1/attachments/post.js similarity index 68% rename from frontend/src/api/rule-groups/post.js rename to resources/assets/v2/api/v1/attachments/post.js index 70601acba1..9954feabca 100644 --- a/frontend/src/api/rule-groups/post.js +++ b/resources/assets/v2/api/v1/attachments/post.js @@ -1,6 +1,6 @@ /* * post.js - * Copyright (c) 2022 james@firefly-iii.org + * Copyright (c) 2024 james@firefly-iii.org * * This file is part of Firefly III (https://github.com/firefly-iii). * @@ -18,11 +18,16 @@ * along with this program. If not, see . */ -import {api} from "boot/axios"; +import {api} from "../../../boot/axios"; export default class Post { - post(submission) { - let url = '/api/v1/rule_groups'; - return api.post(url, submission); - } + post(fileName, attachableType, attachableId) { + let url = '/api/v1/attachments'; + return api.post(url, {filename: fileName, attachable_type: attachableType, attachable_id: attachableId}); + } + + upload(id, data) { + let url = './api/v1/attachments/' + id + '/upload'; + return axios.post(url, data); + } } diff --git a/resources/assets/v2/api/v1/preferences/index.js b/resources/assets/v2/api/v1/preferences/index.js index e037b9101a..23720ae815 100644 --- a/resources/assets/v2/api/v1/preferences/index.js +++ b/resources/assets/v2/api/v1/preferences/index.js @@ -24,7 +24,6 @@ export default class Preferences { getByName(name) { return api.get('/api/v1/preferences/' + name); } - getByNameNow(name) { return api.get('/api/v1/preferences/' + name); } diff --git a/frontend/src/api/rules/get.js b/resources/assets/v2/api/v2/model/budget/get.js similarity index 76% rename from frontend/src/api/rules/get.js rename to resources/assets/v2/api/v2/model/budget/get.js index 98f6bc77b6..010ebcb7b5 100644 --- a/frontend/src/api/rules/get.js +++ b/resources/assets/v2/api/v2/model/budget/get.js @@ -18,14 +18,18 @@ * along with this program. If not, see . */ -import {api} from "boot/axios"; +import {api} from "../../../../boot/axios"; +import format from "date-fns/format"; export default class Get { - get(identifier, date) { - let url = '/api/v1/rules/' + identifier; - if (!date) { - return api.get(url); + + /** + * + * @param params + * @returns {Promise>} + */ + list(params) { + return api.get('/api/v2/budgets', {params: params}); } - return api.get(url, {params: {date: date}}); - } + } diff --git a/frontend/src/api/recurring/get.js b/resources/assets/v2/api/v2/model/currency/get.js similarity index 76% rename from frontend/src/api/recurring/get.js rename to resources/assets/v2/api/v2/model/currency/get.js index d08f98d99b..576df40041 100644 --- a/frontend/src/api/recurring/get.js +++ b/resources/assets/v2/api/v2/model/currency/get.js @@ -18,11 +18,18 @@ * along with this program. If not, see . */ -import {api} from "boot/axios"; +import {api} from "../../../../boot/axios"; +import format from "date-fns/format"; export default class Get { - get(identifier) { - let url = '/api/v1/recurrences/' + identifier; - return api.get(url); - } + + /** + * + * @param params + * @returns {Promise>} + */ + list(params) { + return api.get('/api/v2/currencies', {params: params}); + } + } diff --git a/resources/assets/v2/api/v2/model/piggy-bank/get.js b/resources/assets/v2/api/v2/model/piggy-bank/get.js index 9ecf33fff6..22ab0af115 100644 --- a/resources/assets/v2/api/v2/model/piggy-bank/get.js +++ b/resources/assets/v2/api/v2/model/piggy-bank/get.js @@ -28,7 +28,7 @@ export default class Get { * @param params * @returns {Promise>} */ - get(params) { + list(params) { return api.get('/api/v2/piggy-banks', {params: params}); } diff --git a/resources/assets/v2/api/v2/model/subscription/get.js b/resources/assets/v2/api/v2/model/subscription/get.js index af4308c7f4..c66f7bd155 100644 --- a/resources/assets/v2/api/v2/model/subscription/get.js +++ b/resources/assets/v2/api/v2/model/subscription/get.js @@ -28,7 +28,7 @@ export default class Get { * @param params * @returns {Promise>} */ - get(params) { + list(params) { return api.get('/api/v2/subscriptions', {params: params}); } diff --git a/resources/assets/v2/api/v2/model/transaction/get.js b/resources/assets/v2/api/v2/model/transaction/get.js index 45dc7817b6..b7bbfdba80 100644 --- a/resources/assets/v2/api/v2/model/transaction/get.js +++ b/resources/assets/v2/api/v2/model/transaction/get.js @@ -28,7 +28,13 @@ export default class Get { * @param params * @returns {Promise>} */ - get(params) { + list(params) { return api.get('/api/v2/transactions', {params: params}); } + infiniteList(params) { + return api.get('/api/v2/infinite/transactions', {params: params}); + } + show(id, params){ + return api.get('/api/v2/transactions/' + id, {params: params}); + } } diff --git a/frontend/src/api/accounts/put.js b/resources/assets/v2/api/v2/model/transaction/put.js similarity index 77% rename from frontend/src/api/accounts/put.js rename to resources/assets/v2/api/v2/model/transaction/put.js index 58a6c43d12..09efefc8d9 100644 --- a/frontend/src/api/accounts/put.js +++ b/resources/assets/v2/api/v2/model/transaction/put.js @@ -1,6 +1,6 @@ /* * post.js - * Copyright (c) 2022 james@firefly-iii.org + * Copyright (c) 2023 james@firefly-iii.org * * This file is part of Firefly III (https://github.com/firefly-iii). * @@ -18,11 +18,11 @@ * along with this program. If not, see . */ -import {api} from "boot/axios"; +import {api} from "../../../../boot/axios"; export default class Put { - post(identifier, submission) { - let url = '/api/v1/accounts/' + identifier; - return api.put(url, submission); - } + put(submission, params) { + let url = '/api/v2/transactions/' + parseInt(params.id); + return api.put(url, submission); + } } diff --git a/resources/assets/v2/boot/bootstrap.js b/resources/assets/v2/boot/bootstrap.js index a9da211fd2..ca6959b893 100644 --- a/resources/assets/v2/boot/bootstrap.js +++ b/resources/assets/v2/boot/bootstrap.js @@ -31,13 +31,12 @@ import observePlugin from 'store/plugins/observe'; import Alpine from "alpinejs"; import * as bootstrap from 'bootstrap'; import {getFreshVariable} from "../store/get-fresh-variable.js"; - -store.addPlugin(observePlugin); - - // import even more import {getVariable} from "../store/get-variable.js"; import {getViewRange} from "../support/get-viewrange.js"; +import {loadTranslations} from "../support/load-translations.js"; + +store.addPlugin(observePlugin); window.bootstrapped = false; window.store = store; @@ -69,16 +68,13 @@ getFreshVariable('lastActivity').then((serverValue) => { window.__localeId__ = values[2]; store.set('language', values[3]); store.set('locale', values[3]); - - const event = new Event('firefly-iii-bootstrapped'); - document.dispatchEvent(event); - window.bootstrapped = true; + loadTranslations(values[3]).then(() => { + const event = new Event('firefly-iii-bootstrapped'); + document.dispatchEvent(event); + window.bootstrapped = true; + }); }); }); -// wait for 3 promises, because we need those later on. - window.axios = axios; window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; - - window.Alpine = Alpine diff --git a/frontend/src/store/module-example/state.ts b/resources/assets/v2/css/grid-ff3-theme.css similarity index 66% rename from frontend/src/store/module-example/state.ts rename to resources/assets/v2/css/grid-ff3-theme.css index 53cf3ed434..db6a734e58 100644 --- a/frontend/src/store/module-example/state.ts +++ b/resources/assets/v2/css/grid-ff3-theme.css @@ -1,6 +1,6 @@ /* - * state.ts - * Copyright (c) 2022 james@firefly-iii.org + * grid-ff3-theme.css + * Copyright (c) 2024 james@firefly-iii.org. * * This file is part of Firefly III (https://github.com/firefly-iii). * @@ -15,17 +15,18 @@ * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . + * along with this program. If not, see https://www.gnu.org/licenses/. */ -export interface ExampleStateInterface { - prop: boolean; +/* ag-theme-acmecorp.css */ +.ag-theme-firefly-iii { + /* --ag-odd-row-background-color: #f00; */ +} +.ag-theme-firefly-iii .ag-root { + border:0; +} +.ag-theme-firefly-iii .ag-root-wrapper +{ + border:0; } -function state(): ExampleStateInterface { - return { - prop: false - } -} - -export default state; diff --git a/resources/assets/v2/libraries/dark-editable/Modes/BaseMode.js b/resources/assets/v2/libraries/dark-editable/Modes/BaseMode.js new file mode 100644 index 0000000000..b8805dac37 --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/Modes/BaseMode.js @@ -0,0 +1,42 @@ +/* + * BaseMode.js + * Copyright (c) 2024 https://github.com/DarKsandr/dark-editable + * + * License: MIT + * + * Copied and slightly edited by James Cole + */ +export default class BaseMode{ + constructor(context) { + if(this.constructor === BaseMode){ + throw new Error(`It's abstract class`); + } + this.context = context; + } + event_show(){ + this.context.typeElement.hideError(); + this.context.typeElement.element.value = this.context.value; + this.context.element.dispatchEvent(new CustomEvent("show")); + } + event_shown(){ + this.context.element.dispatchEvent(new CustomEvent("shown")); + } + event_hide(){ + this.context.element.dispatchEvent(new CustomEvent("hide")); + } + event_hidden(){ + this.context.element.dispatchEvent(new CustomEvent("hidden")); + } + init(){ + throw new Error('Method `init` not define!'); + } + enable(){ + throw new Error('Method `enable` not define!'); + } + disable(){ + throw new Error('Method `disable` not define!'); + } + hide(){ + throw new Error('Method `hide` not define!'); + } +} diff --git a/resources/assets/v2/libraries/dark-editable/Modes/InlineMode.js b/resources/assets/v2/libraries/dark-editable/Modes/InlineMode.js new file mode 100644 index 0000000000..b17fa4b44b --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/Modes/InlineMode.js @@ -0,0 +1,40 @@ +/* + * InlineMode.js + * Copyright (c) 2024 https://github.com/DarKsandr/dark-editable + * + * License: MIT + * + * Copied and slightly edited by James Cole + */ + +import BaseMode from "./BaseMode.js"; + +export default class InlineMode extends BaseMode{ + init(){ + const open = () => { + if(!this.context.disabled){ + const item = this.context.typeElement.create(); + this.event_show(); + this.context.element.removeEventListener('click', open); + this.context.element.innerHTML = ''; + this.context.element.append(item); + this.event_shown(); + } + } + this.context.element.addEventListener('click', open); + } + enable(){ + + } + disable(){ + + } + hide(){ + this.event_hide(); + this.context.element.innerHTML = this.context.value; + setTimeout(() => { + this.init(); + this.event_hidden(); + }, 100); + } +} diff --git a/resources/assets/v2/libraries/dark-editable/Modes/PopupMode.js b/resources/assets/v2/libraries/dark-editable/Modes/PopupMode.js new file mode 100644 index 0000000000..8ffbfaa738 --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/Modes/PopupMode.js @@ -0,0 +1,53 @@ +/* + * PopupMode.js + * Copyright (c) 2024 https://github.com/DarKsandr/dark-editable + * + * License: MIT + * + * Copied and slightly edited by James Cole + */ + +import BaseMode from "./BaseMode.js"; + +export default class PopupMode extends BaseMode{ + init(){ + this.popover = new bootstrap.Popover(this.context.element, { + container: "body", + content: this.context.typeElement.create(), + html: true, + customClass: "dark-editable", + title: this.context.title, + }); + this.context.element.addEventListener('show.bs.popover', () => { + this.event_show(); + }); + this.context.element.addEventListener('shown.bs.popover', () => { + this.event_shown(); + }); + this.context.element.addEventListener('hide.bs.popover', () => { + this.event_hide(); + }); + this.context.element.addEventListener('hidden.bs.popover', () => { + this.event_hidden(); + }); + + document.addEventListener('click', (e) => { + const target = e.target; + if(target === this.popover.tip || target === this.context.element) return; + let current = target; + while(current = current.parentNode){ + if(current === this.popover.tip) return; + } + this.hide(); + }) + } + enable(){ + this.popover.enable(); + } + disable(){ + this.popover.disable(); + } + hide(){ + this.popover.hide(); + } +} diff --git a/resources/assets/v2/libraries/dark-editable/Types/BaseType.js b/resources/assets/v2/libraries/dark-editable/Types/BaseType.js new file mode 100644 index 0000000000..1c3bc35e71 --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/Types/BaseType.js @@ -0,0 +1,287 @@ +/* + * BaseMode.js + * Copyright (c) 2024 https://github.com/DarKsandr/dark-editable + * + * License: MIT + * + * Copied and slightly edited by James Cole + */ + +export default class BaseType { + context = null; + element = null; + error = null; + form = null; + load = null; + buttonGroup = null; + buttons = {success: null, cancel: null}; + + constructor(context) { + if (this.constructor === BaseType) { + throw new Error(`It's abstract class`); + } + this.context = context; + } + + create() { + throw new Error('Method `create` not define!'); + } + + createContainer(element) { + const div = document.createElement(`div`); + + // original list of elements: + this.element = element; + this.error = this.createContainerError(); + this.form = this.createContainerForm(); + this.load = this.createContainerLoad(); + this.buttons.success = this.createButtonSuccess(); + this.buttons.cancel = this.createButtonCancel(); + + // create first div, with label and input: + const topDiv = document.createElement(`div`); + topDiv.classList.add("col-12"); + + // create label: + const label = document.createElement(`label`); + label.classList.add("visually-hidden"); + label.for = element.id; + + // add label + input to top div: + topDiv.append(label, element); + + // create second div, with button group: + const bottomDiv = document.createElement(`div`); + bottomDiv.classList.add("col-12"); + + // create button group: + this.buttonGroup = this.createButtonGroup(); + + // append buttons to button group: + this.buttonGroup.append(this.buttons.success, this.buttons.cancel); + bottomDiv.append(this.buttonGroup); + + // append bottom and top div to form: + this.form.append(topDiv, bottomDiv); + + //this.form.append(element, this.load, this.buttons.success, this.buttons.cancel); + //this.form.append(element, this.load, this.buttonGroup); + div.append(this.error, this.form); + return div; + } + + createButtonGroup() { + const div = document.createElement(`div`); + div.classList.add("btn-group", "btn-group-sm"); + return div; + } + + createContainerError() { + const div = document.createElement(`div`); + div.classList.add("text-danger", "fst-italic", "mb-2", "fw-bold"); + div.style.display = "none"; + return div; + } + + createContainerForm() { + + + const form = document.createElement(`form`); + form.classList.add("row", "row-cols-lg-auto", "g-3", "align-items-center"); + //form.style.gap = "20px"; + form.addEventListener('submit', async e => { + e.preventDefault(); + const newValue = this.getValue(); + if (this.context.send && this.context.pk && this.context.url && (this.context.value !== newValue)) { + this.showLoad(); + let msg; + try { + const response = await this.ajax(newValue); + if (response.ok) { + msg = await this.context.success(response, newValue); + } else { + msg = await this.context.error(response, newValue) || `${response.status} ${response.statusText}`; + } + } catch (error) { + console.error(error); + msg = error; + } + + if (msg) { + this.setError(msg); + this.showError(); + } else { + this.setError(null); + this.hideError(); + this.context.value = this.getValue(); + this.context.modeElement.hide(); + this.initText(); + } + this.hideLoad(); + } else { + this.context.value = this.getValue(); + this.context.modeElement.hide(); + this.initText(); + } + this.context.element.dispatchEvent(new CustomEvent("save")); + }) + return form; + } + + createContainerLoad() { + const div = document.createElement(`div`); + div.style.display = "none"; + div.style.position = "absolute"; + div.style.background = "white"; + div.style.width = "100%"; + div.style.height = "100%"; + div.style.top = 0; + div.style.left = 0; + const loader = document.createElement(`div`); + loader.classList.add("dark-editable-loader"); + div.append(loader); + return div; + } + + createButton() { + const button = document.createElement("button"); + button.type = "button"; + button.classList.add("btn", "btn-sm"); + button.style.color = "transparent"; + button.style.textShadow = "0 0 0 white"; + return button; + } + + createButtonSuccess() { + const btn_success = this.createButton(); + btn_success.type = "submit"; + btn_success.classList.add("btn-success"); + btn_success.innerHTML = "✔"; + return btn_success; + } + + createButtonCancel() { + const btn_cancel = this.createButton(); + btn_cancel.classList.add("btn-danger"); + const div = document.createElement("div"); + div.innerHTML = "✖"; + btn_cancel.append(div); + btn_cancel.addEventListener("click", () => { + this.context.modeElement.hide(); + }); + return btn_cancel; + } + + hideLoad() { + this.load.style.display = "none"; + } + + showLoad() { + this.load.style.display = "block"; + } + + ajax(new_value) { + let url = this.context.url; + //const form = new FormData; + let message; + let submit = false; + + console.log(this.context); + // replace form with custom sets. Not sure yet of the format, this will have to grow in time. + if ('journal_description' === this.context.options.formType) { + submit = true; + message = { + transactions: [ + { + transaction_journal_id: this.context.options.journalId, + description: new_value, + } + ] + }; + } + + if(false === submit) { + console.error('Cannot deal with form type "'+this.context.formType+'"'); + } + + // form.append("pk", this.context.pk); + + // form.append("name", this.context.name); + // form.append("value", new_value); + + const option = { + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': document.head.querySelector('meta[name="csrf-token"]').content + } + }; + option.method = this.context.ajaxOptions.method; + + if(this.context.options.method) { + option.method = this.context.options.method; + } + if ('POST' === option.method || 'PUT' === this.context.options.method) { + option.body = JSON.stringify(message); + } else { + url += "?" + new URLSearchParams(form).toString(); + } + return fetch(url, option); + } + + async successResponse(response, newValue) { + + } + + async errorResponse(response, newValue) { + + } + + setError(errorMsg) { + this.error.innerHTML = errorMsg; + } + + showError() { + this.error.style.display = "block"; + } + + hideError() { + if (this.error) { + this.error.style.display = "none"; + } + } + + createElement(name) { + const element = document.createElement(name); + console.log(element); + element.classList.add("form-control"); + if (this.context.required) { + element.required = this.context.required; + } + this.add_focus(element); + return element; + } + + add_focus(element) { + this.context.element.addEventListener('shown', function () { + element.focus(); + }); + } + + initText() { + if (this.context.value === "") { + this.context.element.innerHTML = this.context.emptytext; + return true; + } else { + this.context.element.innerHTML = this.context.value; + return false; + } + } + + initOptions() { + + } + + getValue() { + return this.element.value; + } +} diff --git a/resources/assets/v2/libraries/dark-editable/Types/DateTimeType.js b/resources/assets/v2/libraries/dark-editable/Types/DateTimeType.js new file mode 100644 index 0000000000..70947aee3e --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/Types/DateTimeType.js @@ -0,0 +1,16 @@ +import DateType from "./DateType.js"; + +export default class DateTimeType extends DateType{ + create(){ + const input = this.createElement(`input`); + input.type = "datetime-local"; + + return this.createContainer(input); + } + + initOptions(){ + this.context.get_opt("format", "YYYY-MM-DD HH:mm"); + this.context.get_opt("viewformat", "YYYY-MM-DD HH:mm"); + this.context.value = moment(this.context.value).format("YYYY-MM-DDTHH:mm"); + } +} \ No newline at end of file diff --git a/resources/assets/v2/libraries/dark-editable/Types/DateType.js b/resources/assets/v2/libraries/dark-editable/Types/DateType.js new file mode 100644 index 0000000000..9e3e279fdc --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/Types/DateType.js @@ -0,0 +1,25 @@ +import BaseType from "./BaseType.js"; + +export default class DateType extends BaseType{ + create(){ + const input = this.createElement(`input`); + input.type = "date"; + + return this.createContainer(input); + } + + initText(){ + if(this.value === ""){ + this.context.element.innerHTML = this.context.emptytext; + return true; + } else { + this.context.element.innerHTML = moment(this.context.value).format(this.context.viewformat); + return false; + } + } + + initOptions(){ + this.context.get_opt("format", "YYYY-MM-DD"); + this.context.get_opt("viewformat", "YYYY-MM-DD"); + } +} \ No newline at end of file diff --git a/resources/assets/v2/libraries/dark-editable/Types/InputType.js b/resources/assets/v2/libraries/dark-editable/Types/InputType.js new file mode 100644 index 0000000000..a931713951 --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/Types/InputType.js @@ -0,0 +1,19 @@ +import BaseType from "./BaseType.js"; + +export default class InputType extends BaseType{ + create(){ + // expand input element with necessary classes and things. + // + + + const input = this.createElement(`input`); + const id = this.context.element.id + '_input'; + input.type = this.context.type; + input.id = id; + input.autocomplete = 'off'; + input.placeholder = this.context.element.innerText; + input.classList.add("form-control", "form-control-md"); + + return this.createContainer(input); + } +} diff --git a/resources/assets/v2/libraries/dark-editable/Types/SelectType.js b/resources/assets/v2/libraries/dark-editable/Types/SelectType.js new file mode 100644 index 0000000000..1519d2977f --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/Types/SelectType.js @@ -0,0 +1,36 @@ +import BaseType from "./BaseType.js"; + +export default class SelectType extends BaseType{ + create(){ + const select = this.createElement(`select`); + this.context.source.forEach(item => { + const opt = document.createElement(`option`); + opt.value = item.value; + opt.innerHTML = item.text; + select.append(opt); + }); + + return this.createContainer(select); + } + + initText(){ + this.context.element.innerHTML = this.context.emptytext; + if(this.context.value !== "" && this.context.source.length > 0){ + for(const key in this.context.source){ + const item = this.context.source[ key ]; + if(item.value == this.context.value){ + this.context.element.innerHTML = item.text; + return false; + } + } + } + return true; + } + + initOptions(){ + this.context.get_opt("source", []); + if(typeof this.context.source === "string" && this.context.source !== ""){ + this.context.source = JSON.parse(this.context.source); + } + } +} \ No newline at end of file diff --git a/resources/assets/v2/libraries/dark-editable/Types/TextAreaType.js b/resources/assets/v2/libraries/dark-editable/Types/TextAreaType.js new file mode 100644 index 0000000000..81eb16ce33 --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/Types/TextAreaType.js @@ -0,0 +1,9 @@ +import BaseType from "./BaseType.js"; + +export default class TextAreaType extends BaseType{ + create(){ + const textarea = this.createElement(`textarea`); + + return this.createContainer(textarea); + } +} \ No newline at end of file diff --git a/resources/assets/v2/libraries/dark-editable/dark-editable.css b/resources/assets/v2/libraries/dark-editable/dark-editable.css new file mode 100755 index 0000000000..368b06e55a --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/dark-editable.css @@ -0,0 +1,87 @@ +.dark-editable-element{ + border-bottom: dashed 1px #0088cc; + text-decoration: none; + cursor: pointer; +} +.dark-editable-element-disabled{ + border-bottom: none; + cursor: default; +} +.dark-editable-element-empty{ + font-style: italic; + color: #DD1144; +} +.dark-editable{ + max-width: none; +} + +.dark-editable-loader { + font-size: 5px; + left: 50%; + top: 50%; + width: 1em; + height: 1em; + border-radius: 50%; + position: relative; + text-indent: -9999em; + -webkit-animation: load5 1.1s infinite ease; + animation: load5 1.1s infinite ease; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + } + @-webkit-keyframes load5 { + 0%, + 100% { + box-shadow: 0em -2.6em 0em 0em #000000, 1.8em -1.8em 0 0em rgba(0,0,0, 0.2), 2.5em 0em 0 0em rgba(0,0,0, 0.2), 1.75em 1.75em 0 0em rgba(0,0,0, 0.2), 0em 2.5em 0 0em rgba(0,0,0, 0.2), -1.8em 1.8em 0 0em rgba(0,0,0, 0.2), -2.6em 0em 0 0em rgba(0,0,0, 0.5), -1.8em -1.8em 0 0em rgba(0,0,0, 0.7); + } + 12.5% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.7), 1.8em -1.8em 0 0em #000000, 2.5em 0em 0 0em rgba(0,0,0, 0.2), 1.75em 1.75em 0 0em rgba(0,0,0, 0.2), 0em 2.5em 0 0em rgba(0,0,0, 0.2), -1.8em 1.8em 0 0em rgba(0,0,0, 0.2), -2.6em 0em 0 0em rgba(0,0,0, 0.2), -1.8em -1.8em 0 0em rgba(0,0,0, 0.5); + } + 25% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.5), 1.8em -1.8em 0 0em rgba(0,0,0, 0.7), 2.5em 0em 0 0em #000000, 1.75em 1.75em 0 0em rgba(0,0,0, 0.2), 0em 2.5em 0 0em rgba(0,0,0, 0.2), -1.8em 1.8em 0 0em rgba(0,0,0, 0.2), -2.6em 0em 0 0em rgba(0,0,0, 0.2), -1.8em -1.8em 0 0em rgba(0,0,0, 0.2); + } + 37.5% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.2), 1.8em -1.8em 0 0em rgba(0,0,0, 0.5), 2.5em 0em 0 0em rgba(0,0,0, 0.7), 1.75em 1.75em 0 0em #000000, 0em 2.5em 0 0em rgba(0,0,0, 0.2), -1.8em 1.8em 0 0em rgba(0,0,0, 0.2), -2.6em 0em 0 0em rgba(0,0,0, 0.2), -1.8em -1.8em 0 0em rgba(0,0,0, 0.2); + } + 50% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.2), 1.8em -1.8em 0 0em rgba(0,0,0, 0.2), 2.5em 0em 0 0em rgba(0,0,0, 0.5), 1.75em 1.75em 0 0em rgba(0,0,0, 0.7), 0em 2.5em 0 0em #000000, -1.8em 1.8em 0 0em rgba(0,0,0, 0.2), -2.6em 0em 0 0em rgba(0,0,0, 0.2), -1.8em -1.8em 0 0em rgba(0,0,0, 0.2); + } + 62.5% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.2), 1.8em -1.8em 0 0em rgba(0,0,0, 0.2), 2.5em 0em 0 0em rgba(0,0,0, 0.2), 1.75em 1.75em 0 0em rgba(0,0,0, 0.5), 0em 2.5em 0 0em rgba(0,0,0, 0.7), -1.8em 1.8em 0 0em #000000, -2.6em 0em 0 0em rgba(0,0,0, 0.2), -1.8em -1.8em 0 0em rgba(0,0,0, 0.2); + } + 75% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.2), 1.8em -1.8em 0 0em rgba(0,0,0, 0.2), 2.5em 0em 0 0em rgba(0,0,0, 0.2), 1.75em 1.75em 0 0em rgba(0,0,0, 0.2), 0em 2.5em 0 0em rgba(0,0,0, 0.5), -1.8em 1.8em 0 0em rgba(0,0,0, 0.7), -2.6em 0em 0 0em #000000, -1.8em -1.8em 0 0em rgba(0,0,0, 0.2); + } + 87.5% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.2), 1.8em -1.8em 0 0em rgba(0,0,0, 0.2), 2.5em 0em 0 0em rgba(0,0,0, 0.2), 1.75em 1.75em 0 0em rgba(0,0,0, 0.2), 0em 2.5em 0 0em rgba(0,0,0, 0.2), -1.8em 1.8em 0 0em rgba(0,0,0, 0.5), -2.6em 0em 0 0em rgba(0,0,0, 0.7), -1.8em -1.8em 0 0em #000000; + } + } + @keyframes load5 { + 0%, + 100% { + box-shadow: 0em -2.6em 0em 0em #000000, 1.8em -1.8em 0 0em rgba(0,0,0, 0.2), 2.5em 0em 0 0em rgba(0,0,0, 0.2), 1.75em 1.75em 0 0em rgba(0,0,0, 0.2), 0em 2.5em 0 0em rgba(0,0,0, 0.2), -1.8em 1.8em 0 0em rgba(0,0,0, 0.2), -2.6em 0em 0 0em rgba(0,0,0, 0.5), -1.8em -1.8em 0 0em rgba(0,0,0, 0.7); + } + 12.5% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.7), 1.8em -1.8em 0 0em #000000, 2.5em 0em 0 0em rgba(0,0,0, 0.2), 1.75em 1.75em 0 0em rgba(0,0,0, 0.2), 0em 2.5em 0 0em rgba(0,0,0, 0.2), -1.8em 1.8em 0 0em rgba(0,0,0, 0.2), -2.6em 0em 0 0em rgba(0,0,0, 0.2), -1.8em -1.8em 0 0em rgba(0,0,0, 0.5); + } + 25% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.5), 1.8em -1.8em 0 0em rgba(0,0,0, 0.7), 2.5em 0em 0 0em #000000, 1.75em 1.75em 0 0em rgba(0,0,0, 0.2), 0em 2.5em 0 0em rgba(0,0,0, 0.2), -1.8em 1.8em 0 0em rgba(0,0,0, 0.2), -2.6em 0em 0 0em rgba(0,0,0, 0.2), -1.8em -1.8em 0 0em rgba(0,0,0, 0.2); + } + 37.5% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.2), 1.8em -1.8em 0 0em rgba(0,0,0, 0.5), 2.5em 0em 0 0em rgba(0,0,0, 0.7), 1.75em 1.75em 0 0em #000000, 0em 2.5em 0 0em rgba(0,0,0, 0.2), -1.8em 1.8em 0 0em rgba(0,0,0, 0.2), -2.6em 0em 0 0em rgba(0,0,0, 0.2), -1.8em -1.8em 0 0em rgba(0,0,0, 0.2); + } + 50% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.2), 1.8em -1.8em 0 0em rgba(0,0,0, 0.2), 2.5em 0em 0 0em rgba(0,0,0, 0.5), 1.75em 1.75em 0 0em rgba(0,0,0, 0.7), 0em 2.5em 0 0em #000000, -1.8em 1.8em 0 0em rgba(0,0,0, 0.2), -2.6em 0em 0 0em rgba(0,0,0, 0.2), -1.8em -1.8em 0 0em rgba(0,0,0, 0.2); + } + 62.5% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.2), 1.8em -1.8em 0 0em rgba(0,0,0, 0.2), 2.5em 0em 0 0em rgba(0,0,0, 0.2), 1.75em 1.75em 0 0em rgba(0,0,0, 0.5), 0em 2.5em 0 0em rgba(0,0,0, 0.7), -1.8em 1.8em 0 0em #000000, -2.6em 0em 0 0em rgba(0,0,0, 0.2), -1.8em -1.8em 0 0em rgba(0,0,0, 0.2); + } + 75% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.2), 1.8em -1.8em 0 0em rgba(0,0,0, 0.2), 2.5em 0em 0 0em rgba(0,0,0, 0.2), 1.75em 1.75em 0 0em rgba(0,0,0, 0.2), 0em 2.5em 0 0em rgba(0,0,0, 0.5), -1.8em 1.8em 0 0em rgba(0,0,0, 0.7), -2.6em 0em 0 0em #000000, -1.8em -1.8em 0 0em rgba(0,0,0, 0.2); + } + 87.5% { + box-shadow: 0em -2.6em 0em 0em rgba(0,0,0, 0.2), 1.8em -1.8em 0 0em rgba(0,0,0, 0.2), 2.5em 0em 0 0em rgba(0,0,0, 0.2), 1.75em 1.75em 0 0em rgba(0,0,0, 0.2), 0em 2.5em 0 0em rgba(0,0,0, 0.2), -1.8em 1.8em 0 0em rgba(0,0,0, 0.5), -2.6em 0em 0 0em rgba(0,0,0, 0.7), -1.8em -1.8em 0 0em #000000; + } + } + \ No newline at end of file diff --git a/resources/assets/v2/libraries/dark-editable/dark-editable.js b/resources/assets/v2/libraries/dark-editable/dark-editable.js new file mode 100644 index 0000000000..e9ea1d03f5 --- /dev/null +++ b/resources/assets/v2/libraries/dark-editable/dark-editable.js @@ -0,0 +1,181 @@ +/* + * dark-editable.js + * Copyright (c) 2024 https://github.com/DarKsandr/dark-editable + * + * License: MIT + * + * Copied and slightly edited by James Cole + */ + +import "./dark-editable.css"; +import PopupMode from "./Modes/PopupMode.js"; +import InlineMode from "./Modes/InlineMode.js"; +import BaseType from "./Types/BaseType.js"; +import InputType from "./Types/InputType.js"; +import TextAreaType from "./Types/TextAreaType.js"; +import SelectType from "./Types/SelectType.js"; +import DateType from "./Types/DateType.js"; +import DateTimeType from "./Types/DateTimeType.js"; + +export default class DarkEditable{ + modeElement = null; + typeElement = null; + mode = null; + type = null; + emptytext = null; + viewformat = null; + pk = null; + name = null; + + constructor(element, options = {}){ + this.element = element; + this.options = options; + + this.init_options(); + this.typeElement = this.route_type(); + this.typeElement.initOptions(); + this.modeElement = this.route_mode(); + this.modeElement.init(); + this.init_text(); + this.init_style(); + if(this.disabled){ + this.disable(); + } + this.element.dispatchEvent(new CustomEvent("init")); + } + + /* INIT METHODS */ + + get_opt(name, default_value){ + return this[ name ] = this.element.dataset?.[ name ] ?? this.options?.[ name ] ?? default_value; + } + get_opt_bool(name, default_value){ + this.get_opt(name, default_value); + if(typeof this[ name ] !== "boolean"){ + if(this[ name ] === "true") { + this[ name ] = true; + } else if(this[ name ] === "false") { + this[ name ] = false; + } else { + this[ name ] = default_value; + } + } + return this[ name ]; + } + + init_options(){ + //priority date elements + this.get_opt("value", this.element.innerHTML); + this.get_opt("name", this.element.id); + this.get_opt("pk", null); + this.get_opt("title", ""); + this.get_opt("type", "text"); + this.get_opt("emptytext", "Empty"); + this.get_opt("mode", "popup"); + this.get_opt("url", null); + this.get_opt("ajaxOptions", {}); + this.ajaxOptions = Object.assign({ + method: "POST", + dataType: "text", + }, this.ajaxOptions); + this.get_opt_bool("send", true); + this.get_opt_bool("disabled", false); + this.get_opt_bool("required", false); + if(this.options?.success && typeof this.options?.success == "function"){ + this.success = this.options.success; + } + if(this.options?.error && typeof this.options?.error == "function"){ + this.error = this.options.error; + } + } + + init_text(){ + const empty_class = "dark-editable-element-empty"; + this.element.classList.remove(empty_class); + if(this.typeElement.initText()){ + this.element.classList.add(empty_class); + } + } + + init_style(){ + this.element.classList.add("dark-editable-element"); + } + + /* INIT METHODS END */ + route_mode(){ + switch (this.mode){ + default: + throw new Error(`Mode ${this.mode} not found!`) + case 'popup': + return new PopupMode(this); + case 'inline': + return new InlineMode(this); + } + } + + route_type(){ + if(this.type.prototype instanceof BaseType){ + return new this.type(this); + } + if(typeof this.type === 'string'){ + switch(this.type){ + case "text": + case "password": + case "email": + case "url": + case "tel": + case "number": + case "range": + case "time": + return new InputType(this); + case "textarea": + return new TextAreaType(this); + case "select": + return new SelectType(this); + case "date": + return new DateType(this); + case "datetime": + return new DateTimeType(this); + } + } + throw new Error(`Undefined type`); + } + + /* AJAX */ + + async success(response, newValue){ + return await this.typeElement.successResponse(response, newValue); + } + + async error(response, newValue){ + return await this.typeElement.errorResponse(response, newValue); + } + + /* AJAX END */ + + /* METHODS */ + + enable(){ + this.disabled = false; + this.element.classList.remove("dark-editable-element-disabled"); + this.modeElement.enable(); + + } + + disable(){ + this.disabled = true; + this.element.classList.add("dark-editable-element-disabled"); + this.modeElement.enable(); + } + + setValue(value){ + this.value = value; + this.init_text(); + } + + getValue(){ + return this.value; + } + + /* METHODS END */ +} diff --git a/resources/assets/v2/pages/dashboard/boxes.js b/resources/assets/v2/pages/dashboard/boxes.js index 31fcb019f3..cdd1260fda 100644 --- a/resources/assets/v2/pages/dashboard/boxes.js +++ b/resources/assets/v2/pages/dashboard/boxes.js @@ -55,7 +55,6 @@ export default () => ({ this.boxData = response.data; window.store.set(boxesCacheKey, response.data); this.generateOptions(this.boxData); - //this.drawChart(); }); }, generateOptions(data) { diff --git a/resources/assets/v2/pages/dashboard/budgets.js b/resources/assets/v2/pages/dashboard/budgets.js index 9c9acb2a0a..903fb9549c 100644 --- a/resources/assets/v2/pages/dashboard/budgets.js +++ b/resources/assets/v2/pages/dashboard/budgets.js @@ -22,17 +22,15 @@ import Dashboard from "../../api/v2/chart/budget/dashboard.js"; import {getDefaultChartSettings} from "../../support/default-chart-settings.js"; import formatMoney from "../../util/format-money.js"; import {Chart} from 'chart.js'; -import {I18n} from "i18n-js"; -import {loadTranslations} from "../../support/load-translations.js"; import {getColors} from "../../support/get-colors.js"; import {getCacheKey} from "../../support/get-cache-key.js"; +import i18next from "i18next"; let currencies = []; let chart = null; let chartData = null; let afterPromises = false; -let i18n; // for translating items in the chart. export default () => ({ loading: false, @@ -105,7 +103,7 @@ export default () => ({ labels: [], datasets: [ { - label: i18n.t('firefly.spent'), + label: i18next.t('firefly.spent'), data: [], borderWidth: 1, stack: 1, @@ -113,7 +111,7 @@ export default () => ({ borderColor: getColors('spent', 'border'), }, { - label: i18n.t('firefly.left'), + label: i18next.t('firefly.left'), data: [], borderWidth: 1, stack: 1, @@ -121,7 +119,7 @@ export default () => ({ borderColor: getColors('left', 'border'), }, { - label: i18n.t('firefly.overspent'), + label: i18next.t('firefly.overspent'), data: [], borderWidth: 1, stack: 1, @@ -174,19 +172,12 @@ export default () => ({ init() { - // console.log('budgets init'); - Promise.all([getVariable('autoConversion', false), getVariable('language', 'en_US')]).then((values) => { - - i18n = new I18n(); - const locale = values[1].replace('-', '_'); - i18n.locale = locale; - loadTranslations(i18n, locale).then(() => { - this.autoConversion = values[0]; - afterPromises = true; - if (false === this.loading) { - this.loadChart(); - } - }); + Promise.all([getVariable('autoConversion', false)]).then((values) => { + this.autoConversion = values[0]; + afterPromises = true; + if (false === this.loading) { + this.loadChart(); + } }); window.store.observe('end', () => { if (!afterPromises) { diff --git a/resources/assets/v2/pages/dashboard/dashboard.js b/resources/assets/v2/pages/dashboard/dashboard.js index a7433873cb..e23dea9867 100644 --- a/resources/assets/v2/pages/dashboard/dashboard.js +++ b/resources/assets/v2/pages/dashboard/dashboard.js @@ -27,23 +27,21 @@ import categories from './categories.js'; import sankey from './sankey.js'; import subscriptions from './subscriptions.js'; import piggies from './piggies.js'; - - import { + ArcElement, + BarController, + BarElement, + CategoryScale, Chart, + Colors, + Filler, + Legend, + LinearScale, LineController, LineElement, PieController, - BarController, - BarElement, - TimeScale, - ArcElement, - LinearScale, - Legend, - Filler, - Colors, - CategoryScale, PointElement, + TimeScale, Tooltip } from "chart.js"; import 'chartjs-adapter-date-fns'; @@ -77,9 +75,10 @@ const comps = { piggies }; +//let i18n; + function loadPage(comps) { Object.keys(comps).forEach(comp => { - console.log(`Loading page component "${comp}"`); let data = comps[comp](); Alpine.data(comp, () => data); }); @@ -88,11 +87,11 @@ function loadPage(comps) { // wait for load until bootstrapped event is received. document.addEventListener('firefly-iii-bootstrapped', () => { - //console.log('Loaded through event listener.'); + console.log('Loaded through event listener.'); loadPage(comps); }); // or is bootstrapped before event is triggered. if (window.bootstrapped) { - //console.log('Loaded through window variable.'); + console.log('Loaded through window variable.'); loadPage(comps); } diff --git a/resources/assets/v2/pages/dashboard/piggies.js b/resources/assets/v2/pages/dashboard/piggies.js index c6058e7c2b..3b949d3e05 100644 --- a/resources/assets/v2/pages/dashboard/piggies.js +++ b/resources/assets/v2/pages/dashboard/piggies.js @@ -19,14 +19,12 @@ */ import {getVariable} from "../../store/get-variable.js"; import Get from "../../api/v2/model/piggy-bank/get.js"; -import {I18n} from "i18n-js"; -import {loadTranslations} from "../../support/load-translations.js"; import {getCacheKey} from "../../support/get-cache-key.js"; import {format} from "date-fns"; +import i18next from "i18next"; let apiData = {}; let afterPromises = false; -let i18n; const PIGGY_CACHE_KEY = 'dashboard-piggies-data'; export default () => ({ @@ -61,7 +59,7 @@ export default () => ({ const end = new Date(window.store.get('end')); const cacheKey = getCacheKey(PIGGY_CACHE_KEY, start, end); const getter = new Get(); - getter.get(params).then((response) => { + getter.list(params).then((response) => { apiData = [...apiData, ...response.data.data]; if (parseInt(response.data.meta.pagination.total_pages) > params.page) { params.page++; @@ -84,7 +82,7 @@ export default () => ({ if (0 === current.attributes.percentage) { continue; } - let groupName = current.object_group_title ?? i18n.t('firefly.default_group_title_name_plain'); + let groupName = current.object_group_title ?? i18next.t('firefly.default_group_title_name_plain'); if (!dataSet.hasOwnProperty(groupName)) { dataSet[groupName] = { id: current.object_group_id ?? 0, @@ -130,18 +128,11 @@ export default () => ({ init() { // console.log('piggies init'); apiData = []; - Promise.all([getVariable('autoConversion', false), getVariable('language', 'en_US')]).then((values) => { - - i18n = new I18n(); - const locale = values[1].replace('-', '_'); - i18n.locale = locale; - loadTranslations(i18n, locale).then(() => { - // console.log('piggies after promises'); - afterPromises = true; - this.autoConversion = values[0]; - this.loadPiggyBanks(); - }); + Promise.all([getVariable('autoConversion', false)]).then((values) => { + afterPromises = true; + this.autoConversion = values[0]; + this.loadPiggyBanks(); }); window.store.observe('end', () => { diff --git a/resources/assets/v2/pages/dashboard/sankey.js b/resources/assets/v2/pages/dashboard/sankey.js index 370314492e..0f2d841524 100644 --- a/resources/assets/v2/pages/dashboard/sankey.js +++ b/resources/assets/v2/pages/dashboard/sankey.js @@ -22,15 +22,13 @@ import Get from "../../api/v2/model/transaction/get.js"; import {getDefaultChartSettings} from "../../support/default-chart-settings.js"; import {Chart} from 'chart.js'; import {Flow, SankeyController} from 'chartjs-chart-sankey'; -import {loadTranslations} from "../../support/load-translations.js"; -import {I18n} from "i18n-js"; import {getCacheKey} from "../../support/get-cache-key.js"; import {format} from "date-fns"; +import i18next from "i18next"; Chart.register({SankeyController, Flow}); const SANKEY_CACHE_KEY = 'dashboard-sankey-data'; -let i18n; let currencies = []; let afterPromises = false; let chart = null; @@ -318,7 +316,7 @@ export default () => ({ //console.log('Downloading page ' + params.page + '...'); const getter = new Get(); - getter.get(params).then((response) => { + getter.list(params).then((response) => { transactions = [...transactions, ...response.data.data]; //this.drawChart(this.generateOptions(response.data)); //this.loading = false; @@ -350,31 +348,26 @@ export default () => ({ init() { // console.log('sankey init'); transactions = []; - Promise.all([getVariable('autoConversion', false), getVariable('language', 'en_US')]).then((values) => { + Promise.all([getVariable('autoConversion', false)]).then((values) => { this.autoConversion = values[0]; autoConversion = values[0]; - i18n = new I18n(); - const locale = values[1].replace('-', '_'); - i18n.locale = locale; - loadTranslations(i18n, locale).then(() => { // some translations: - translations.all_money = i18n.t('firefly.all_money'); - translations.category = i18n.t('firefly.category'); - translations.in = i18n.t('firefly.money_flowing_in'); - translations.out = i18n.t('firefly.money_flowing_out'); - translations.unknown_category = i18n.t('firefly.unknown_category_plain'); - translations.unknown_source = i18n.t('firefly.unknown_source_plain'); - translations.unknown_dest = i18n.t('firefly.unknown_dest_plain'); - translations.unknown_account = i18n.t('firefly.unknown_any_plain'); - translations.unknown_budget = i18n.t('firefly.unknown_budget_plain'); - translations.expense_account = i18n.t('firefly.expense_account'); - translations.revenue_account = i18n.t('firefly.revenue_account'); - translations.budget = i18n.t('firefly.budget'); + translations.all_money = i18next.t('firefly.all_money'); + translations.category = i18next.t('firefly.category'); + translations.in = i18next.t('firefly.money_flowing_in'); + translations.out = i18next.t('firefly.money_flowing_out'); + translations.unknown_category = i18next.t('firefly.unknown_category_plain'); + translations.unknown_source = i18next.t('firefly.unknown_source_plain'); + translations.unknown_dest = i18next.t('firefly.unknown_dest_plain'); + translations.unknown_account = i18next.t('firefly.unknown_any_plain'); + translations.unknown_budget = i18next.t('firefly.unknown_budget_plain'); + translations.expense_account = i18next.t('firefly.expense_account'); + translations.revenue_account = i18next.t('firefly.revenue_account'); + translations.budget = i18next.t('firefly.budget'); // console.log('sankey after promises'); afterPromises = true; this.loadChart(); - }); }); window.store.observe('end', () => { diff --git a/resources/assets/v2/pages/dashboard/subscriptions.js b/resources/assets/v2/pages/dashboard/subscriptions.js index b98320e6ef..6a90e1f2d3 100644 --- a/resources/assets/v2/pages/dashboard/subscriptions.js +++ b/resources/assets/v2/pages/dashboard/subscriptions.js @@ -20,23 +20,20 @@ import {getVariable} from "../../store/get-variable.js"; import Get from "../../api/v2/model/subscription/get.js"; import {format} from "date-fns"; -import {I18n} from "i18n-js"; -import {loadTranslations} from "../../support/load-translations.js"; import {getCacheKey} from "../../support/get-cache-key.js"; import {Chart} from "chart.js"; import formatMoney from "../../util/format-money.js"; - +import i18next from "i18next"; // let chart = null; // let chartData = null; let afterPromises = false; -let i18n; // for translating items in the chart. let apiData = []; let subscriptionData = {}; function downloadSubscriptions(params) { const getter = new Get(); - return getter.get(params) + return getter.list(params) // first promise: parse the data: .then((response) => { let data = response.data.data; @@ -47,7 +44,7 @@ function downloadSubscriptions(params) { //console.log(current); if (current.attributes.active && current.attributes.pay_dates.length > 0) { let objectGroupId = null === current.attributes.object_group_id ? 0 : current.attributes.object_group_id; - let objectGroupTitle = null === current.attributes.object_group_title ? i18n.t('firefly.default_group_title_name_plain') : current.attributes.object_group_title; + let objectGroupTitle = null === current.attributes.object_group_title ? i18next.t('firefly.default_group_title_name_plain') : current.attributes.object_group_title; let objectGroupOrder = null === current.attributes.object_group_order ? 0 : current.attributes.object_group_order; if (!subscriptionData.hasOwnProperty(objectGroupId)) { subscriptionData[objectGroupId] = { @@ -84,7 +81,7 @@ function downloadSubscriptions(params) { // set variables bill.expected_amount = params.autoConversion ? formatMoney(bill.native_amount, bill.native_currency_code) : formatMoney(bill.amount, bill.currency_code); - bill.expected_times = i18n.t('firefly.subscr_expected_x_times', { + bill.expected_times = i18next.t('firefly.subscr_expected_x_times', { times: current.attributes.pay_dates.length, amount: bill.expected_amount }); @@ -188,7 +185,6 @@ export default () => ({ let start = new Date(window.store.get('start')); let end = new Date(window.store.get('end')); - console.log('here we are'); const cacheValid = window.store.get('cacheValid'); let cachedData = window.store.get(getCacheKey('subscriptions-data-dashboard', start, end)); @@ -199,7 +195,6 @@ export default () => ({ // reset subscription data subscriptionData = {}; this.subscriptions = []; - console.log('cache is invalid, must download'); let params = { start: format(start, 'y-MM-dd'), end: format(end, 'y-MM-dd'), @@ -207,7 +202,6 @@ export default () => ({ page: 1 }; downloadSubscriptions(params).then(() => { - console.log('Done with download!'); let set = Object.values(subscriptionData); // convert subscriptionData to usable data (especially for the charts) for (let i in set) { @@ -237,11 +231,11 @@ export default () => ({ const currencyCode = this.autoConversion ? data.native_currency_code : data.currency_code; const chartData = { labels: [ - i18n.t('firefly.paid'), - i18n.t('firefly.unpaid') + i18next.t('firefly.paid'), + i18next.t('firefly.unpaid') ], datasets: [{ - label: i18n.t('firefly.subscriptions_in_group', {title: groupTitle}), + label: i18next.t('firefly.subscriptions_in_group', {title: groupTitle}), data: [paidAmount, unpaidAmount], backgroundColor: [ 'rgb(54, 162, 235)', @@ -273,20 +267,13 @@ export default () => ({ }, init() { - console.log('subscriptions init'); - Promise.all([getVariable('autoConversion', false), getVariable('language', 'en_US')]).then((values) => { - console.log('subscriptions after promises'); + Promise.all([getVariable('autoConversion', false)]).then((values) => { this.autoConversion = values[0]; afterPromises = true; - i18n = new I18n(); - const locale = values[1].replace('-', '_'); - i18n.locale = locale; - loadTranslations(i18n, locale).then(() => { - if (false === this.loading) { - this.startSubscriptions(); - } - }); + if (false === this.loading) { + this.startSubscriptions(); + } }); @@ -294,7 +281,6 @@ export default () => ({ if (!afterPromises) { return; } - console.log('subscriptions observe end'); if (false === this.loading) { this.startSubscriptions(); } @@ -303,7 +289,6 @@ export default () => ({ if (!afterPromises) { return; } - console.log('subscriptions observe autoConversion'); this.autoConversion = newValue; if (false === this.loading) { this.startSubscriptions(); diff --git a/resources/assets/v2/pages/shared/dates.js b/resources/assets/v2/pages/shared/dates.js index 0982e02ce7..b975f1d690 100644 --- a/resources/assets/v2/pages/shared/dates.js +++ b/resources/assets/v2/pages/shared/dates.js @@ -33,6 +33,7 @@ import { subMonths } from "date-fns"; import format from '../../util/format' +import i18next from "i18next"; export default () => ({ range: { @@ -44,8 +45,6 @@ export default () => ({ language: 'en_US', init() { - // console.log('Dates init'); - this.range = { start: new Date(window.store.get('start')), end: new Date(window.store.get('end')) @@ -67,23 +66,6 @@ export default () => ({ this.range.end = new Date(newValue); this.buildDateRange(); }); - - //this.range = this.setDatesFromViewRange(this.range.start); - // get values from store and use them accordingly. - // this.viewRange = window.BasicStore.get('viewRange'); - // this.locale = window.BasicStore.get('locale'); - // this.language = window.BasicStore.get('language'); - // this.locale = 'equal' === this.locale ? this.language : this.locale; - // window.__localeId__ = this.language; - // - // // the range is always null but later on we will store it in BasicStore. - // if (null === this.range.start && null === this.range.end) { - // console.log('start + end = null, calling setDatesFromViewRange()'); - // this.range = this.setDatesFromViewRange(new Date); - // } - // console.log('MainApp: set defaultRange'); - // this.defaultRange = this.setDatesFromViewRange(new Date); - // // default range is always the current period (initialized ahead) }, diff --git a/resources/assets/v2/pages/template.js b/resources/assets/v2/pages/template.js new file mode 100644 index 0000000000..ce0ac609dd --- /dev/null +++ b/resources/assets/v2/pages/template.js @@ -0,0 +1,58 @@ +/* + * template.js + * Copyright (c) 2024 james@firefly-iii.org. + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + */ + +import '../../boot/bootstrap.js'; +import dates from "./shared/dates.js"; + + +let somethings = function() { + return { + pageProperties: {}, + functionName() { + + }, + init() { + + } + } +} + + +let comps = {somethings, dates}; + +function loadPage() { + Object.keys(comps).forEach(comp => { + console.log(`Loading page component "${comp}"`); + let data = comps[comp](); + Alpine.data(comp, () => data); + }); + Alpine.start(); +} + +// wait for load until bootstrapped event is received. +document.addEventListener('firefly-iii-bootstrapped', () => { + console.log('Loaded through event listener.'); + loadPage(); +}); +// or is bootstrapped before event is triggered. +if (window.bootstrapped) { + console.log('Loaded through window variable.'); + loadPage(); +} diff --git a/resources/assets/v2/pages/transactions/create.js b/resources/assets/v2/pages/transactions/create.js index 7c6b800727..fc2e338889 100644 --- a/resources/assets/v2/pages/transactions/create.js +++ b/resources/assets/v2/pages/transactions/create.js @@ -20,267 +20,520 @@ import '../../boot/bootstrap.js'; import dates from '../../pages/shared/dates.js'; -import {createEmptySplit} from "./shared/create-empty-split.js"; +import {createEmptySplit, defaultErrorSet} from "./shared/create-empty-split.js"; import {parseFromEntries} from "./shared/parse-from-entries.js"; import formatMoney from "../../util/format-money.js"; -import Autocomplete from "bootstrap5-autocomplete"; import Post from "../../api/v2/model/transaction/post.js"; -import {getVariable} from "../../store/get-variable.js"; -import {I18n} from "i18n-js"; -import {loadTranslations} from "../../support/load-translations.js"; +import {loadCurrencies} from "./shared/load-currencies.js"; +import {loadBudgets} from "./shared/load-budgets.js"; +import {loadPiggyBanks} from "./shared/load-piggy-banks.js"; +import {loadSubscriptions} from "./shared/load-subscriptions.js"; -let i18n; +import 'leaflet/dist/leaflet.css'; +import {addAutocomplete, getUrls} from "./shared/add-autocomplete.js"; +import { + changeCategory, + changeDescription, + changeDestinationAccount, + changeSourceAccount, + selectDestinationAccount, + selectSourceAccount +} from "./shared/autocomplete-functions.js"; +import {processAttachments} from "./shared/process-attachments.js"; +import {spliceErrorsIntoTransactions} from "./shared/splice-errors-into-transactions.js"; +import Tags from "bootstrap5-tags"; +import {addLocation} from "./shared/manage-locations.js"; +import i18next from "i18next"; +// TODO upload attachments to other file +// TODO fix two maps, perhaps disconnect from entries entirely. +// TODO group title +// TODO map location from preferences +// TODO field preferences -const urls = { - description: '/api/v2/autocomplete/transaction-descriptions', - account: '/api/v2/autocomplete/accounts', -}; +const urls = getUrls(); let transactions = function () { return { - count: 0, - totalAmount: 0, - transactionType: 'unknown', - showSuccessMessage: false, - showErrorMessage: false, + // transactions are stored in "entries": entries: [], - filters: { - source: [], - destination: [], + + // state of the form is stored in formState: + formStates: { + loadingCurrencies: true, + loadingBudgets: true, + loadingPiggyBanks: true, + loadingSubscriptions: true, + isSubmitting: false, + returnHereButton: false, + saveAsNewButton: false, // edit form only + resetButton: true, + rulesButton: true, + webhooksButton: true, }, + + // form behaviour during transaction + formBehaviour: { + formType: 'create', foreignCurrencyEnabled: true, + }, + + // form data (except transactions) is stored in formData + formData: { + defaultCurrency: null, + enabledCurrencies: [], + nativeCurrencies: [], + foreignCurrencies: [], + budgets: [], + piggyBanks: [], + subscriptions: [], + }, + + // properties for the entire transaction group + groupProperties: { + transactionType: 'unknown', title: null, id: null, totalAmount: 0, + }, + + // notifications + notifications: { + error: { + show: false, text: '', url: '', + }, success: { + show: false, text: '', url: '', + }, wait: { + show: false, text: '', + + } + }, + + + // part of the account selection auto-complete + filters: { + source: [], destination: [], + }, + + // events in the form + changedDateTime(event) { + console.warn('changedDateTime, event is not used'); + }, + + changedDescription(event) { + console.warn('changedDescription, event is not used'); + }, + + changedDestinationAccount(event) { + this.detectTransactionType(); + }, + + changedSourceAccount(event) { + this.detectTransactionType(); + }, + detectTransactionType() { const sourceType = this.entries[0].source_account.type ?? 'unknown'; const destType = this.entries[0].destination_account.type ?? 'unknown'; if ('unknown' === sourceType && 'unknown' === destType) { - this.transactionType = 'unknown'; + this.groupProperties.transactionType = 'unknown'; console.warn('Cannot infer transaction type from two unknown accounts.'); return; } + // transfer: both are the same and in strict set of account types if (sourceType === destType && ['Asset account', 'Loan', 'Debt', 'Mortgage'].includes(sourceType)) { - this.transactionType = 'transfer'; - console.log('Transaction type is detected to be "' + this.transactionType + '".'); + this.groupProperties.transactionType = 'transfer'; + console.log('Transaction type is detected to be "' + this.groupProperties.transactionType + '".'); + + // this also locks the amount into the amount of the source account + // and the foreign amount (if different) in that of the destination account. + console.log('filter down currencies for transfer.'); + this.filterNativeCurrencies(this.entries[0].source_account.currency_code); + this.filterForeignCurrencies(this.entries[0].destination_account.currency_code); return; } // withdrawals: if ('Asset account' === sourceType && ['Expense account', 'Debt', 'Loan', 'Mortgage'].includes(destType)) { - this.transactionType = 'withdrawal'; - console.log('Transaction type is detected to be "' + this.transactionType + '".'); + this.groupProperties.transactionType = 'withdrawal'; + console.log('[a] Transaction type is detected to be "' + this.groupProperties.transactionType + '".'); + this.filterNativeCurrencies(this.entries[0].source_account.currency_code); return; } if ('Asset account' === sourceType && 'unknown' === destType) { - this.transactionType = 'withdrawal'; - console.log('Transaction type is detected to be "' + this.transactionType + '".'); + this.groupProperties.transactionType = 'withdrawal'; + console.log('[b] Transaction type is detected to be "' + this.groupProperties.transactionType + '".'); + console.log(this.entries[0].source_account); + this.filterNativeCurrencies(this.entries[0].source_account.currency_code); return; } if (['Debt', 'Loan', 'Mortgage'].includes(sourceType) && 'Expense account' === destType) { - this.transactionType = 'withdrawal'; - console.log('Transaction type is detected to be "' + this.transactionType + '".'); + this.groupProperties.transactionType = 'withdrawal'; + console.log('[c] Transaction type is detected to be "' + this.groupProperties.transactionType + '".'); + this.filterNativeCurrencies(this.entries[0].source_account.currency_code); return; } // deposits: if ('Revenue account' === sourceType && ['Asset account', 'Debt', 'Loan', 'Mortgage'].includes(destType)) { - this.transactionType = 'deposit'; - console.log('Transaction type is detected to be "' + this.transactionType + '".'); + this.groupProperties.transactionType = 'deposit'; + console.log('Transaction type is detected to be "' + this.groupProperties.transactionType + '".'); + return; + } + if ('unknown' === sourceType && ['Asset account', 'Debt', 'Loan', 'Mortgage'].includes(destType)) { + this.groupProperties.transactionType = 'deposit'; + console.log('Transaction type is detected to be "' + this.groupProperties.transactionType + '".'); + return; + } + if ('Expense account' === sourceType && ['Asset account', 'Debt', 'Loan', 'Mortgage'].includes(destType)) { + this.groupProperties.transactionType = 'deposit'; + console.warn('FORCE transaction type to be "' + this.groupProperties.transactionType + '".'); + this.entries[0].source_account.id = ''; return; } if (['Debt', 'Loan', 'Mortgage'].includes(sourceType) && 'Asset account' === destType) { - this.transactionType = 'deposit'; - console.log('Transaction type is detected to be "' + this.transactionType + '".'); + this.groupProperties.transactionType = 'deposit'; + console.log('Transaction type is detected to be "' + this.groupProperties.transactionType + '".'); return; } console.warn('Unknown account combination between "' + sourceType + '" and "' + destType + '".'); }, - selectSourceAccount(item, ac) { - const index = parseInt(ac._searchInput.attributes['data-index'].value); - document.querySelector('#form')._x_dataStack[0].$data.entries[index].source_account = - { - id: item.id, - name: item.name, - type: item.type, - }; - console.log('Changed source account into a known ' + item.type.toLowerCase()); + + formattedTotalAmount() { + if (this.entries.length === 0) { + return formatMoney(this.groupProperties.totalAmount, 'EUR'); + } + return formatMoney(this.groupProperties.totalAmount, this.entries[0].currency_code ?? 'EUR'); }, + + filterForeignCurrencies(code) { + let list = []; + let currency; + for (let i in this.formData.enabledCurrencies) { + if (this.formData.enabledCurrencies.hasOwnProperty(i)) { + let current = this.formData.enabledCurrencies[i]; + if (current.code === code) { + currency = current; + } + } + } + list.push(currency); + this.formData.foreignCurrencies = list; + // is he source account currency anyway: + if (1 === list.length && list[0].code === this.entries[0].source_account.currency_code) { + console.log('Foreign currency is same as source currency. Disable foreign amount.'); + this.formBehaviour.foreignCurrencyEnabled = false; + } + if (1 === list.length && list[0].code !== this.entries[0].source_account.currency_code) { + console.log('Foreign currency is NOT same as source currency. Enable foreign amount.'); + this.formBehaviour.foreignCurrencyEnabled = true; + } + + // this also forces the currency_code on ALL entries. + for (let i in this.entries) { + if (this.entries.hasOwnProperty(i)) { + this.entries[i].foreign_currency_code = code; + } + } + }, + + filterNativeCurrencies(code) { + let list = []; + let currency; + for (let i in this.formData.enabledCurrencies) { + if (this.formData.enabledCurrencies.hasOwnProperty(i)) { + let current = this.formData.enabledCurrencies[i]; + if (current.code === code) { + currency = current; + } + } + } + list.push(currency); + this.formData.nativeCurrencies = list; + + // this also forces the currency_code on ALL entries. + for (let i in this.entries) { + if (this.entries.hasOwnProperty(i)) { + this.entries[i].currency_code = code; + } + } + }, + changedAmount(e) { const index = parseInt(e.target.dataset.index); this.entries[index].amount = parseFloat(e.target.value); - this.totalAmount = 0; + this.groupProperties.totalAmount = 0; for (let i in this.entries) { if (this.entries.hasOwnProperty(i)) { - this.totalAmount = this.totalAmount + parseFloat(this.entries[i].amount); + this.groupProperties.totalAmount = this.groupProperties.totalAmount + parseFloat(this.entries[i].amount); } } - console.log('Changed amount to ' + this.totalAmount); }, - selectDestAccount(item, ac) { - const index = parseInt(ac._searchInput.attributes['data-index'].value); - document.querySelector('#form')._x_dataStack[0].$data.entries[index].destination_account = - { - id: item.id, - name: item.name, - type: item.type, - }; - console.log('Changed destination account into a known ' + item.type.toLowerCase()); - }, - changeSourceAccount(item, ac) { - if (typeof item === 'undefined') { - const index = parseInt(ac._searchInput.attributes['data-index'].value); - let source = document.querySelector('#form')._x_dataStack[0].$data.entries[index].source_account; - if (source.name === ac._searchInput.value) { - console.warn('Ignore hallucinated source account name change to "' + ac._searchInput.value + '"'); - return; - } - document.querySelector('#form')._x_dataStack[0].$data.entries[index].source_account = - { - name: ac._searchInput.value, - }; - console.log('Changed source account into a unknown account called "' + ac._searchInput.value + '"'); - } - }, - changeDestAccount(item, ac) { - if (typeof item === 'undefined') { - const index = parseInt(ac._searchInput.attributes['data-index'].value); - let destination = document.querySelector('#form')._x_dataStack[0].$data.entries[index].destination_account; - if (destination.name === ac._searchInput.value) { - console.warn('Ignore hallucinated destination account name change to "' + ac._searchInput.value + '"'); - return; - } - document.querySelector('#form')._x_dataStack[0].$data.entries[index].destination_account = - { - name: ac._searchInput.value, - }; - console.log('Changed destination account into a unknown account called "' + ac._searchInput.value + '"'); - } - }, - - - // error and success messages: - showError: false, - showSuccess: false, addedSplit() { - console.log('addedSplit'); - Autocomplete.init("input.ac-source", { - server: urls.account, - serverParams: { - types: this.filters.source, - }, - fetchOptions: { - headers: { - 'X-CSRF-TOKEN': document.head.querySelector('meta[name="csrf-token"]').content - } - }, - hiddenInput: true, - preventBrowserAutocomplete: true, - highlightTyped: true, - liveServer: true, - onChange: this.changeSourceAccount, - onSelectItem: this.selectSourceAccount, - onRenderItem: function (item, b, c) { - return item.name_with_balance + '
' + i18n.t('firefly.account_type_' + item.type) + ''; - } - }); - - Autocomplete.init("input.ac-dest", { - server: urls.account, - serverParams: { - types: this.filters.destination, - }, - fetchOptions: { - headers: { - 'X-CSRF-TOKEN': document.head.querySelector('meta[name="csrf-token"]').content - } - }, - hiddenInput: true, - preventBrowserAutocomplete: true, - liveServer: true, - highlightTyped: true, - onSelectItem: this.selectDestAccount, - onChange: this.changeDestAccount, - onRenderItem: function (item, b, c) { - return item.name_with_balance + '
' + i18n.t('firefly.account_type_' + item.type) + ''; - } - }); - this.filters.destination = []; - Autocomplete.init('input.ac-description', { - server: urls.description, - fetchOptions: { - headers: { - 'X-CSRF-TOKEN': document.head.querySelector('meta[name="csrf-token"]').content - } - }, - valueField: "id", - labelField: "description", - highlightTyped: true, - onSelectItem: console.log, - }); }, + processUpload(event) { + this.showMessageOrRedirectUser(); + }, + + processUploadError(event) { + this.notifications.success.show = false; + this.notifications.wait.show = false; + this.notifications.error.show = true; + this.formStates.isSubmitting = false; + this.notifications.error.text = i18next.t('firefly.errors_upload'); + console.error(event); + }, + init() { - Promise.all([getVariable('language', 'en_US')]).then((values) => { - i18n = new I18n(); - const locale = values[0].replace('-', '_'); - i18n.locale = locale; - loadTranslations(i18n, locale).then(() => { - this.addSplit(); - }); + this.addSplit(); + // load currencies and save in form data. + loadCurrencies().then(data => { + this.formStates.loadingCurrencies = false; + this.formData.defaultCurrency = data.defaultCurrency; + this.formData.enabledCurrencies = data.enabledCurrencies; + this.formData.nativeCurrencies = data.nativeCurrencies; + this.formData.foreignCurrencies = data.foreignCurrencies; }); + loadBudgets().then(data => { + this.formData.budgets = data; + this.formStates.loadingBudgets = false; + }); + loadPiggyBanks().then(data => { + this.formData.piggyBanks = data; + this.formStates.loadingPiggyBanks = false; + }); + loadSubscriptions().then(data => { + this.formData.subscriptions = data; + this.formStates.loadingSubscriptions = false; + }); + + document.addEventListener('upload-success', (event) => { + this.processUpload(event); + document.querySelectorAll("input[type=file]").value = ""; + }); + + document.addEventListener('upload-error', (event) => { + this.processUploadError(event); + }); + document.addEventListener('location-move', (event) => { + this.entries[event.detail.index].latitude = event.detail.latitude; + this.entries[event.detail.index].longitude = event.detail.longitude; + }); + + document.addEventListener('location-set', (event) => { + this.entries[event.detail.index].hasLocation = true; + this.entries[event.detail.index].latitude = event.detail.latitude; + this.entries[event.detail.index].longitude = event.detail.longitude; + this.entries[event.detail.index].zoomLevel = event.detail.zoomLevel; + }); + + document.addEventListener('location-zoom', (event) => { + this.entries[event.detail.index].hasLocation = true; + this.entries[event.detail.index].zoomLevel = event.detail.zoomLevel; + }); + + // source can never be expense account this.filters.source = ['Asset account', 'Loan', 'Debt', 'Mortgage', 'Revenue account']; // destination can never be revenue account this.filters.destination = ['Expense account', 'Loan', 'Debt', 'Mortgage', 'Asset account']; }, - submitTransaction() { - this.detectTransactionType(); - // todo disable buttons - let transactions = parseFromEntries(this.entries, this.transactionType); + submitTransaction() { + // reset all messages: + this.notifications.error.show = false; + this.notifications.success.show = false; + this.notifications.wait.show = false; + + // reset all errors in the entries array: + for (let i in this.entries) { + if (this.entries.hasOwnProperty(i)) { + this.entries[i].errors = defaultErrorSet(); + } + } + + // form is now submitting: + this.formStates.isSubmitting = true; + + // final check on transaction type. + this.detectTransactionType(); + + // parse transaction: + let transactions = parseFromEntries(this.entries, null, this.groupProperties.transactionType); let submission = { - // todo process all options - group_title: null, - fire_webhooks: false, - apply_rules: false, + group_title: this.groupProperties.title, + fire_webhooks: this.formStates.webhooksButton, + apply_rules: this.formStates.rulesButton, transactions: transactions }; - if (transactions.length > 1) { - // todo improve me + + // catch for group title: + if (null === this.groupProperties.title && transactions.length > 1) { submission.group_title = transactions[0].description; } + + // submit the transaction. Multi-stage process thing going on here! let poster = new Post(); console.log(submission); poster.post(submission).then((response) => { - // todo create success banner - this.showSuccessMessage = true; - // todo release form - console.log(response); + const group = response.data.data; + // submission was a success! + this.groupProperties.id = parseInt(group.id); + this.groupProperties.title = group.attributes.group_title ?? group.attributes.transactions[0].description - // todo or redirect to transaction. - window.location = 'transactions/show/' + response.data.data.id + '?transaction_group_id=' + response.data.data.id + '&message=created'; + // process attachments, if any: + const attachmentCount = processAttachments(this.groupProperties.id, group.attributes.transactions); + if (attachmentCount > 0) { + // if count is more than zero, system is processing transactions in the background. + this.notifications.wait.show = true; + this.notifications.wait.text = i18next.t('firefly.wait_attachments'); + return; + } + + // if not, respond to user options: + this.showMessageOrRedirectUser(); }).catch((error) => { - this.showErrorMessage = true; - // todo create error banner. - // todo release form - console.error(error); + + this.submitting = false; + console.log(error); + // todo put errors in form + if (typeof error.response !== 'undefined') { + this.parseErrors(error.response.data); + } + + }); }, + + showMessageOrRedirectUser() { + // disable all messages: + this.notifications.error.show = false; + this.notifications.success.show = false; + this.notifications.wait.show = false; + + if (this.formStates.returnHereButton) { + + this.notifications.success.show = true; + this.notifications.success.url = 'transactions/show/' + this.groupProperties.id; + this.notifications.success.text = i18next.t('firefly.stored_journal_js', {description: this.groupProperties.title}); + + if (this.formStates.resetButton) { + this.entries = []; + this.addSplit(); + this.groupProperties.totalAmount = 0; + } + return; + } + window.location = 'transactions/show/' + this.groupProperties.id + '?transaction_group_id=' + this.groupProperties.id + '&message=created'; + }, + + parseErrors(data) { + // disable all messages: + this.notifications.error.show = true; + this.notifications.success.show = false; + this.notifications.wait.show = false; + this.formStates.isSubmitting = false; + this.notifications.error.text = i18next.t('firefly.errors_submission_v2', {errorMessage: data.message}); + + if (data.hasOwnProperty('errors')) { + this.entries = spliceErrorsIntoTransactions(data.errors, this.entries); + } + }, + addSplit() { this.entries.push(createEmptySplit()); + + setTimeout(() => { + // render tags: + Tags.init('select.ac-tags', { + allowClear: true, + server: urls.tag, + liveServer: true, + clearEnd: true, + allowNew: true, + notFoundMessage: i18next.t('firefly.nothing_found'), + noCache: true, + fetchOptions: { + headers: { + 'X-CSRF-TOKEN': document.head.querySelector('meta[name="csrf-token"]').content + } + } + }); + const count = this.entries.length - 1; + // if(document.querySelector('#location_map_' + count)) { } + addLocation(count); + + // addedSplit, is called from the HTML + // for source account + const renderAccount = function (item, b, c) { + return item.name_with_balance + '
' + i18next.t('firefly.account_type_' + item.type) + ''; + }; + addAutocomplete({ + selector: 'input.ac-source', + serverUrl: urls.account, + // filters: this.filters.source, + // onRenderItem: renderAccount, + onChange: changeSourceAccount, + onSelectItem: selectSourceAccount, + hiddenValue: this.entries[count].source_account.alpine_name + }); + addAutocomplete({ + selector: 'input.ac-dest', + serverUrl: urls.account, + filters: this.filters.destination, + onRenderItem: renderAccount, + onChange: changeDestinationAccount, + onSelectItem: selectDestinationAccount + }); + addAutocomplete({ + selector: 'input.ac-category', + serverUrl: urls.category, + valueField: 'id', + labelField: 'name', + onChange: changeCategory, + onSelectItem: changeCategory + }); + addAutocomplete({ + selector: 'input.ac-description', + serverUrl: urls.description, + valueField: 'id', + labelField: 'description', + onChange: changeDescription, + onSelectItem: changeDescription, + }); + + }, 150); }, + removeSplit(index) { this.entries.splice(index, 1); // fall back to index 0 const triggerFirstTabEl = document.querySelector('#split-0-tab') triggerFirstTabEl.click(); }, - formattedTotalAmount() { - return formatMoney(this.totalAmount, 'EUR'); - } + + clearLocation(e) { + e.preventDefault(); + // remove location from entry, fire event, do nothing else (the map is somebody else's problem). + + const target = e.currentTarget; + const index = parseInt(target.attributes['data-index'].value); + this.entries[index].hasLocation = false; + this.entries[index].latitude = null; + this.entries[index].longitude = null; + this.entries[index].zoomLevel = null; + + const removeEvent = new CustomEvent('location-remove', { + detail: { + index: index + } + }); + document.dispatchEvent(removeEvent); + + return false; + }, } } diff --git a/resources/assets/v2/pages/transactions/edit.js b/resources/assets/v2/pages/transactions/edit.js new file mode 100644 index 0000000000..2235068894 --- /dev/null +++ b/resources/assets/v2/pages/transactions/edit.js @@ -0,0 +1,434 @@ +/* + * edit.js + * Copyright (c) 2024 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import '../../boot/bootstrap.js'; +import dates from '../../pages/shared/dates.js'; +import formatMoney from "../../util/format-money.js"; +import Get from "../../api/v2/model/transaction/get.js"; +import {parseDownloadedSplits} from "./shared/parse-downloaded-splits.js"; +import {addAutocomplete, getUrls} from "./shared/add-autocomplete.js"; +import { + changeCategory, + changeDescription, + changeDestinationAccount, + changeSourceAccount, + selectDestinationAccount, + selectSourceAccount +} from "./shared/autocomplete-functions.js"; +import {loadCurrencies} from "./shared/load-currencies.js"; +import {loadBudgets} from "./shared/load-budgets.js"; +import {loadPiggyBanks} from "./shared/load-piggy-banks.js"; +import {loadSubscriptions} from "./shared/load-subscriptions.js"; +import Tags from "bootstrap5-tags"; +import i18next from "i18next"; +import {defaultErrorSet} from "./shared/create-empty-split.js"; +import {parseFromEntries} from "./shared/parse-from-entries.js"; +import Put from "../../api/v2/model/transaction/put.js"; +import {processAttachments} from "./shared/process-attachments.js"; +import {spliceErrorsIntoTransactions} from "./shared/splice-errors-into-transactions.js"; + +// TODO upload attachments to other file +// TODO fix two maps, perhaps disconnect from entries entirely. +// TODO group title +// TODO map location from preferences +// TODO field preferences +// TODO filters +// TODO parse amount + +const urls = getUrls(); + +let transactions = function () { + return { + // transactions are stored in "entries": + entries: [], + originals: [], + + // state of the form is stored in formState: + formStates: { + loadingCurrencies: true, + loadingBudgets: true, + loadingPiggyBanks: true, + loadingSubscriptions: true, + isSubmitting: false, + returnHereButton: false, + saveAsNewButton: false, // edit form only + resetButton: true, + rulesButton: true, + webhooksButton: true, + }, + + // form behaviour during transaction + formBehaviour: { + formType: 'edit', + foreignCurrencyEnabled: true, + }, + + // form data (except transactions) is stored in formData + formData: { + defaultCurrency: null, + enabledCurrencies: [], + nativeCurrencies: [], + foreignCurrencies: [], + budgets: [], + piggyBanks: [], + subscriptions: [], + }, + + // properties for the entire transaction group + groupProperties: { + transactionType: 'unknown', + title: null, + editTitle: null, + id: null, totalAmount: 0, + }, + + // notifications + notifications: { + error: { + show: false, text: '', url: '', + }, success: { + show: false, text: '', url: '', + }, wait: { + show: false, text: '', + + } + }, + + // submit the transaction form. + // TODO pretty much duplicate of create.js + submitTransaction() { + // reset all messages: + this.notifications.error.show = false; + this.notifications.success.show = false; + this.notifications.wait.show = false; + + // reset all errors in the entries array: + for (let i in this.entries) { + if (this.entries.hasOwnProperty(i)) { + this.entries[i].errors = defaultErrorSet(); + } + } + + // form is now submitting: + this.formStates.isSubmitting = true; + + // parse transaction: + let transactions = parseFromEntries(this.entries, this.originals, this.groupProperties.transactionType); + let submission = { + group_title: this.groupProperties.editTitle, + fire_webhooks: this.formStates.webhooksButton, + apply_rules: this.formStates.rulesButton, + transactions: transactions + }; + + + // catch for group title: + if (null === this.groupProperties.title && transactions.length > 1) { + submission.group_title = transactions[0].description; + } + + // submit the transaction. Multi-stage process thing going on here! + let putter = new Put(); + console.log(submission); + putter.put(submission, {id: this.groupProperties.id}).then((response) => { + const group = response.data.data; + // submission was a success! + this.groupProperties.id = parseInt(group.id); + this.groupProperties.title = group.attributes.group_title ?? group.attributes.transactions[0].description + + // process attachments, if any: + const attachmentCount = processAttachments(this.groupProperties.id, group.attributes.transactions); + + if (attachmentCount > 0) { + // if count is more than zero, system is processing transactions in the background. + this.notifications.wait.show = true; + this.notifications.wait.text = i18next.t('firefly.wait_attachments'); + return; + } + + // if not, respond to user options: + this.showMessageOrRedirectUser(); + }).catch((error) => { + + this.submitting = false; + console.log(error); + // todo put errors in form + if (typeof error.response !== 'undefined') { + this.parseErrors(error.response.data); + } + + + }); + + + }, + // part of the account selection auto-complete + filters: { + source: [], destination: [], + }, + + addedSplit() { + setTimeout(() => { + // addedSplit, is called from the HTML + // for source account + const renderAccount = function (item, b, c) { + return item.name_with_balance + '
' + i18next.t('firefly.account_type_' + item.type) + ''; + }; + addAutocomplete({ + selector: 'input.ac-source', + serverUrl: urls.account, + filters: this.filters.source, + onRenderItem: renderAccount, + onChange: changeSourceAccount, + onSelectItem: selectSourceAccount + }); + addAutocomplete({ + selector: 'input.ac-dest', + serverUrl: urls.account, + filters: this.filters.destination, + onRenderItem: renderAccount, + onChange: changeDestinationAccount, + onSelectItem: selectDestinationAccount + }); + addAutocomplete({ + selector: 'input.ac-category', + serverUrl: urls.category, + valueField: 'id', + labelField: 'name', + onChange: changeCategory, + onSelectItem: changeCategory + }); + addAutocomplete({ + selector: 'input.ac-description', + serverUrl: urls.description, + valueField: 'id', + labelField: 'description', + onChange: changeDescription, + onSelectItem: changeDescription, + }); + }, 250); + + }, + + // events in the form + changedDateTime(event) { + console.warn('changedDateTime, event is not used'); + }, + + changedDescription(event) { + console.warn('changedDescription, event is not used'); + }, + + changedDestinationAccount(event) { + console.warn('changedDestinationAccount, event is not used'); + }, + + changedSourceAccount(event) { + console.warn('changedSourceAccount, event is not used'); + }, + + // duplicate function but this is easier. + formattedTotalAmount() { + if (this.entries.length === 0) { + return formatMoney(this.groupProperties.totalAmount, 'EUR'); + } + return formatMoney(this.groupProperties.totalAmount, this.entries[0].currency_code ?? 'EUR'); + }, + getTags(index) { + console.log('at get tags ' + index); + console.log(this.entries[index].tags); + return this.entries[index].tags ?? []; + }, + + getTransactionGroup() { + this.entries = []; + const page = window.location.href.split('/'); + const groupId = parseInt(page[page.length - 1]); + const getter = new Get(); + getter.show(groupId, {}).then((response) => { + const data = response.data.data; + this.groupProperties.id = parseInt(data.id); + this.groupProperties.transactionType = data.attributes.transactions[0].type.toLowerCase(); + this.groupProperties.title = data.attributes.title ?? data.attributes.transactions[0].description; + this.entries = parseDownloadedSplits(data.attributes.transactions, parseInt(data.id)); + + // remove waiting thing. + this.notifications.wait.show = false; + }).then(() => { + this.groupProperties.totalAmount = 0; + for (let i in this.entries) { + if (this.entries.hasOwnProperty(i)) { + this.groupProperties.totalAmount = this.groupProperties.totalAmount + parseFloat(this.entries[i].amount); + // TODO this does not include all possible types. + this.filters.source.push(this.entries[i].source_account.type); + this.filters.destination.push(this.entries[i].destination_account.type); + } + } + console.log(this.filters); + setTimeout(() => { + // render tags: + Tags.init('select.ac-tags', { + allowClear: true, + server: urls.tag, + liveServer: true, + clearEnd: true, + allowNew: true, + notFoundMessage: i18next.t('firefly.nothing_found'), + noCache: true, + fetchOptions: { + headers: { + 'X-CSRF-TOKEN': document.head.querySelector('meta[name="csrf-token"]').content + } + } + }); + }, 150); + }); + }, + + init() { + // download translations and get the transaction group. + this.notifications.wait.show = true; + this.notifications.wait.text = i18next.t('firefly.wait_loading_transaction'); + this.getTransactionGroup(); + + // load meta data. + loadCurrencies().then(data => { + this.formStates.loadingCurrencies = false; + this.formData.defaultCurrency = data.defaultCurrency; + this.formData.enabledCurrencies = data.enabledCurrencies; + this.formData.nativeCurrencies = data.nativeCurrencies; + this.formData.foreignCurrencies = data.foreignCurrencies; + }); + + loadBudgets().then(data => { + this.formData.budgets = data; + this.formStates.loadingBudgets = false; + }); + loadPiggyBanks().then(data => { + this.formData.piggyBanks = data; + this.formStates.loadingPiggyBanks = false; + }); + loadSubscriptions().then(data => { + this.formData.subscriptions = data; + this.formStates.loadingSubscriptions = false; + }); + + // add some event listeners + document.addEventListener('upload-success', (event) => { + this.processUpload(event); + document.querySelectorAll("input[type=file]").value = ""; + }); + + document.addEventListener('upload-error', (event) => { + this.processUploadError(event); + }); + document.addEventListener('location-move', (event) => { + this.entries[event.detail.index].latitude = event.detail.latitude; + this.entries[event.detail.index].longitude = event.detail.longitude; + }); + + document.addEventListener('location-set', (event) => { + this.entries[event.detail.index].hasLocation = true; + this.entries[event.detail.index].latitude = event.detail.latitude; + this.entries[event.detail.index].longitude = event.detail.longitude; + this.entries[event.detail.index].zoomLevel = event.detail.zoomLevel; + }); + + document.addEventListener('location-zoom', (event) => { + this.entries[event.detail.index].hasLocation = true; + this.entries[event.detail.index].zoomLevel = event.detail.zoomLevel; + }); + }, + + changedAmount(e) { + const index = parseInt(e.target.dataset.index); + this.entries[index].amount = parseFloat(e.target.value); + this.groupProperties.totalAmount = 0; + for (let i in this.entries) { + if (this.entries.hasOwnProperty(i)) { + this.groupProperties.totalAmount = this.groupProperties.totalAmount + parseFloat(this.entries[i].amount); + } + } + }, + // TODO is a duplicate + showMessageOrRedirectUser() { + // disable all messages: + this.notifications.error.show = false; + this.notifications.success.show = false; + this.notifications.wait.show = false; + + if (this.formStates.returnHereButton) { + this.notifications.success.show = true; + this.notifications.success.url = 'transactions/show/' + this.groupProperties.id; + this.notifications.success.text = i18next.t('firefly.updated_journal_js', {description: this.groupProperties.title}); + return; + } + window.location = 'transactions/show/' + this.groupProperties.id + '?transaction_group_id=' + this.groupProperties.id + '&message=updated'; + }, + // TODO is a duplicate + parseErrors(data) { + // disable all messages: + this.notifications.error.show = true; + this.notifications.success.show = false; + this.notifications.wait.show = false; + this.formStates.isSubmitting = false; + this.notifications.error.text = i18next.t('firefly.errors_submission_v2', {errorMessage: data.message}); + + if (data.hasOwnProperty('errors')) { + this.entries = spliceErrorsIntoTransactions(data.errors, this.entries); + } + }, + // TODO is a duplicate + processUpload(event) { + this.showMessageOrRedirectUser(); + }, + // TODO is a duplicate + processUploadError(event) { + this.notifications.success.show = false; + this.notifications.wait.show = false; + this.notifications.error.show = true; + this.formStates.isSubmitting = false; + this.notifications.error.text = i18next.t('firefly.errors_upload'); + console.error(event); + }, + } +} + +let comps = {transactions, dates}; + +function loadPage() { + Object.keys(comps).forEach(comp => { + console.log(`Loading page component "${comp}"`); + let data = comps[comp](); + Alpine.data(comp, () => data); + }); + Alpine.start(); +} + +// wait for load until bootstrapped event is received. +document.addEventListener('firefly-iii-bootstrapped', () => { + console.log('Loaded through event listener.'); + loadPage(); +}); +// or is bootstrapped before event is triggered. +if (window.bootstrapped) { + console.log('Loaded through window variable.'); + loadPage(); +} diff --git a/resources/assets/v2/pages/transactions/index.js b/resources/assets/v2/pages/transactions/index.js new file mode 100644 index 0000000000..cabf7e4698 --- /dev/null +++ b/resources/assets/v2/pages/transactions/index.js @@ -0,0 +1,381 @@ +/* + * show.js + * Copyright (c) 2024 james@firefly-iii.org. + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + */ + +import '../../boot/bootstrap.js'; +import dates from "../shared/dates.js"; +import i18next from "i18next"; +import {format} from "date-fns"; +import formatMoney from "../../util/format-money.js"; +import Put from "../../api/v2/model/transaction/put.js"; + +import {createGrid, ModuleRegistry} from "@ag-grid-community/core"; + +import '@ag-grid-community/styles/ag-grid.css'; +import '@ag-grid-community/styles/ag-theme-alpine.css'; +import '../../css/grid-ff3-theme.css'; + +import AmountEditor from "../../support/ag-grid/AmountEditor.js"; + +import TransactionDataSource from "../../support/ag-grid/TransactionDataSource.js"; +import {InfiniteRowModelModule} from '@ag-grid-community/infinite-row-model'; +import DateTimeEditor from "../../support/ag-grid/DateTimeEditor.js"; + +const ds = new TransactionDataSource(); + +// set type from URL +const urlParts = window.location.href.split('/'); +const type = urlParts[urlParts.length - 1]; +ds.setType(type); + +document.addEventListener('cellEditRequest', () => { + console.log('Loaded through event listener.'); + //loadPage(); +}); +let rowImmutableStore = []; + +let dataTable; +const editableFields = ['description', 'amount', 'date']; + +const onCellEditRequestMethod = (event) => { + console.log('onCellEditRequestMethod'); + const data = event.data; + const field = event.colDef.field; + let newValue = event.newValue; + if (!editableFields.includes(field)) { + console.log('Field ' + field + ' is not editable.'); + return; + } + + // this needs to be better + if ('amount' === field) { + newValue = event.newValue.amount; + console.log('New value is now' + newValue); + } + + console.log('New value for field "' + field + '" in transaction journal #' + data.transaction_journal_id + ' of group #' + data.id + ' is "' + newValue + '"'); + data[field] = newValue; + let rowNode = dataTable.getRowNode(String(event.rowIndex)); + rowNode.updateData(data); + + // then push update to Firefly III over API: + let submission = { + transactions: [ + { + transaction_journal_id: data.transaction_journal_id, + } + ] + }; + submission.transactions[0][field] = newValue; + + let putter = new Put(); + putter.put(submission, {id: data.id}); + + +}; + +document.addEventListener('cellValueChanged', () => { + console.log('I just realized a cell value has changed.'); +}); +document.addEventListener('onCellValueChanged', () => { + console.log('I just realized a cell value has changed.'); +}); + +let doOnCellValueChanged = function (e) { + console.log('I just realized a cell value has changed.'); +}; + +const gridOptions = { + rowModelType: 'infinite', + datasource: ds, + onCellEditRequest: onCellEditRequestMethod, + readOnlyEdit: true, + // Row Data: The data to be displayed. + // rowData: [ + // { description: "Tesla", model: "Model Y", price: 64950, electric: true }, + // { description: "Ford", model: "F-Series", price: 33850, electric: false }, + // { description: "Toyota", model: "Corolla", price: 29600, electric: false }, + // ], + // Column Definitions: Defines & controls grid columns. + columnDefs: [ + { + field: "icon", + editable: false, + headerName: '', + sortable: false, + width: 40, + cellRenderer: function (params) { + if (params.getValue()) { + return '
'; + } + return ''; + } + }, + { + field: "description", + cellDataType: 'text', + editable: true, + // cellRenderer: function (params) { + // if (params.getValue()) { + // return '' + params.getValue() + ''; + // } + // return ''; + // } + + }, + { + field: "amount", + editable: function (params) { + // only when NO foreign amount. + return null === params.data.amount.foreign_amount && null === params.data.amount.foreign_currency_code; + }, + cellEditor: AmountEditor, + cellRenderer(params) { + if (params.getValue()) { + let returnString = ''; + let amount = parseFloat(params.getValue().amount); + let obj = params.getValue(); + let stringClass = 'text-danger'; + if (obj.type === 'withdrawal') { + amount = amount * -1; + } + if (obj.type === 'deposit') { + stringClass = 'text-success'; + } + if (obj.type === 'transfer') { + stringClass = 'text-info'; + } + returnString += '' + formatMoney(amount, params.getValue().currency_code) + ''; + + // foreign amount: + if (obj.foreign_amount) { + let foreignAmount = parseFloat(params.getValue().foreign_amount); + if (obj.type === 'withdrawal') { + foreignAmount = foreignAmount * -1; + } + returnString += ' (' + formatMoney(foreignAmount, obj.foreign_currency_code) + ')'; + } + return returnString; + } + return ''; + } + + }, + { + field: "date", + editable: true, + cellDataType: 'date', + cellEditor: DateTimeEditor, + cellEditorPopup: true, + cellEditorPopupPosition: 'under', + cellRenderer(params) { + if (params.getValue()) { + return format(params.getValue(), i18next.t('config.date_time_fns_short')); + } + return ''; + } + }, + { + field: "from", + cellDataType: 'text', + cellRenderer: function (params) { + if (params.getValue()) { + let obj = params.getValue(); + return '' + obj.name + ''; + } + return ''; + } + }, + { + field: "to", + cellDataType: 'text', + cellRenderer: function (params) { + if (params.getValue()) { + let obj = params.getValue(); + return '' + obj.name + ''; + } + return ''; + } + }, + { + field: "category", + cellDataType: 'text', + cellRenderer: function (params) { + if (params.getValue()) { + let obj = params.getValue(); + if (null !== obj.id) { + return '' + obj.name + ''; + } + } + return ''; + } + }, + { + field: "budget", + cellDataType: 'text', + cellRenderer: function (params) { + if (params.getValue()) { + let obj = params.getValue(); + if (null !== obj.id) { + return '' + obj.name + ''; + } + } + return ''; + } + }, + ] +}; + + +ModuleRegistry.registerModules([InfiniteRowModelModule]); +let index = function () { + return { + // notifications + notifications: { + error: { + show: false, text: '', url: '', + }, success: { + show: false, text: '', url: '', + }, wait: { + show: false, text: '', + + } + }, + transactions: [], + totalPages: 1, + perPage: 50, + page: 1, + // available columns: + tableColumns: { + description: { + enabled: true + }, + source: { + enabled: true + }, + destination: { + enabled: true + }, + amount: { + enabled: true + }, + }, + + table: null, + + formatMoney(amount, currencyCode) { + return formatMoney(amount, currencyCode); + }, + format(date) { + return format(date, i18next.t('config.date_time_fns')); + }, + init() { + this.notifications.wait.show = true; + this.notifications.wait.text = i18next.t('firefly.wait_loading_data') + // TODO need date range. + // TODO handle page number + //this.getTransactions(this.page); + + // Your Javascript code to create the grid + dataTable = createGrid(document.querySelector('#grid'), gridOptions); + + + }, + // getTransactions(page) { + // const urlParts = window.location.href.split('/'); + // const type = urlParts[urlParts.length - 1]; + // let getter = new Get(); + // + // getter.list({page: page, type: type}).then(response => { + // this.parseTransactions(response.data.data) + // + // // set meta data + // this.totalPages = response.data.meta.pagination.total_pages; + // this.perPage = response.data.meta.pagination.per_page; + // this.page = response.data.meta.pagination.current_page; + // }).catch(error => { + // // to do this is auto generated + // this.notifications.wait.show = false; + // this.notifications.error.show = true; + // this.notifications.error.text = error.response.data.message; + // }); + // }, + parseTransactions(data) { + // no parse, just save + for (let i in data) { + if (data.hasOwnProperty(i)) { + let current = data[i]; + let isSplit = current.attributes.transactions.length > 1; + let firstSplit = true; + + // foreach on transactions, no matter how many. + for (let ii in current.attributes.transactions) { + if (current.attributes.transactions.hasOwnProperty(ii)) { + let transaction = current.attributes.transactions[ii]; + + + transaction.split = isSplit; + tranaction.icon = 'fa fa-solid fa-arrow-left'; + transaction.firstSplit = firstSplit; + transaction.group_title = current.attributes.group_title; + transaction.id = current.id; + transaction.created_at = current.attributes.created_at; + transaction.updated_at = current.attributes.updated_at; + transaction.user = current.attributes.user; + transaction.user_group = current.attributes.user_group; + + // set firstSplit = false for next run if applicable. + firstSplit = false; + //console.log(transaction); + this.transactions.push(transaction); + //this.gridOptions.rowData.push(transaction); + } + } + } + } + // only now, disable wait thing. + this.notifications.wait.show = false; + console.log('refresh!'); + //this.table.refreshCells(); + + }, + } +} + +let comps = {index, dates}; + +function loadPage() { + Object.keys(comps).forEach(comp => { + console.log(`Loading page component "${comp}"`); + let data = comps[comp](); + Alpine.data(comp, () => data); + }); + Alpine.start(); +} + +// wait for load until bootstrapped event is received. +document.addEventListener('firefly-iii-bootstrapped', () => { + console.log('Loaded through event listener.'); + loadPage(); +}); +// or is bootstrapped before event is triggered. +if (window.bootstrapped) { + console.log('Loaded through window variable.'); + loadPage(); +} diff --git a/resources/assets/v2/pages/transactions/shared/add-autocomplete.js b/resources/assets/v2/pages/transactions/shared/add-autocomplete.js new file mode 100644 index 0000000000..0acb04f368 --- /dev/null +++ b/resources/assets/v2/pages/transactions/shared/add-autocomplete.js @@ -0,0 +1,69 @@ +/* + * add-autocomplete.js + * Copyright (c) 2024 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import Autocomplete from "bootstrap5-autocomplete"; + +export function getUrls() { + return { + description: '/api/v2/autocomplete/transaction-descriptions', + account: '/api/v2/autocomplete/accounts', + category: '/api/v2/autocomplete/categories', + tag: '/api/v2/autocomplete/tags', + } +} + +export function addAutocomplete(options) { + const params = { + server: options.serverUrl, + serverParams: {}, + fetchOptions: { + headers: { + 'X-CSRF-TOKEN': document.head.querySelector('meta[name="csrf-token"]').content + } + }, + hiddenInput: true, + // preventBrowserAutocomplete: true, + highlightTyped: true, + liveServer: true, + }; + if (typeof options.filters !== 'undefined' && options.filters.length > 0) { + params.serverParams.types = options.filters; + } + if (typeof options.onRenderItem !== 'undefined' && null !== options.onRenderItem) { + params.onRenderItem = options.onRenderItem; + } + if (options.valueField) { + params.valueField = options.valueField; + } + if (options.labelField) { + params.labelField = options.labelField; + } + if (options.onSelectItem) { + params.onSelectItem = options.onSelectItem; + } + if (options.onChange) { + params.onChange = options.onChange; + } + if(options.hiddenValue) { + params.hiddenValue = options.hiddenValue; + } + + Autocomplete.init(options.selector, params); +} diff --git a/resources/assets/v2/pages/transactions/shared/autocomplete-functions.js b/resources/assets/v2/pages/transactions/shared/autocomplete-functions.js new file mode 100644 index 0000000000..19e11aad52 --- /dev/null +++ b/resources/assets/v2/pages/transactions/shared/autocomplete-functions.js @@ -0,0 +1,85 @@ +/* + * autocomplete-functions.js + * Copyright (c) 2024 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +export function changeCategory(item, ac) { + const index = parseInt(ac._searchInput.attributes['data-index'].value); + if (typeof item !== 'undefined' && item.name) { + document.querySelector('#form')._x_dataStack[0].$data.entries[index].category_name = item.name; + return; + } + document.querySelector('#form')._x_dataStack[0].$data.entries[index].category_name = ac._searchInput.value; +} + +export function changeDescription(item, ac) { + const index = parseInt(ac._searchInput.attributes['data-index'].value); + if (typeof item !== 'undefined' && item.description) { + document.querySelector('#form')._x_dataStack[0].$data.entries[index].description = item.description; + return; + } + document.querySelector('#form')._x_dataStack[0].$data.entries[index].description = ac._searchInput.value; +} + +export function changeDestinationAccount(item, ac) { + if (typeof item === 'undefined') { + const index = parseInt(ac._searchInput.attributes['data-index'].value); + let destination = document.querySelector('#form')._x_dataStack[0].$data.entries[index].destination_account; + + if (destination.name === ac._searchInput.value) { + console.warn('Ignore hallucinated destination account name change to "' + ac._searchInput.value + '"'); + return; + } + document.querySelector('#form')._x_dataStack[0].$data.entries[index].destination_account = { + name: ac._searchInput.value, alpine_name: ac._searchInput.value, + }; + document.querySelector('#form')._x_dataStack[0].changedDestinationAccount(); + } +} + +export function selectDestinationAccount(item, ac) { + const index = parseInt(ac._searchInput.attributes['data-index'].value); + document.querySelector('#form')._x_dataStack[0].$data.entries[index].destination_account = { + id: item.id, name: item.name, alpine_name: item.name, type: item.type, currency_code: item.currency_code, + }; + document.querySelector('#form')._x_dataStack[0].changedDestinationAccount(); +} + +export function changeSourceAccount(item, ac) { + // console.log('changeSourceAccount'); + if (typeof item === 'undefined') { + const index = parseInt(ac._searchInput.attributes['data-index'].value); + let source = document.querySelector('#form')._x_dataStack[0].$data.entries[index].source_account; + if (source.name === ac._searchInput.value) { + return; + } + document.querySelector('#form')._x_dataStack[0].$data.entries[index].source_account = { + name: ac._searchInput.value, alpine_name: ac._searchInput.value, + }; + + document.querySelector('#form')._x_dataStack[0].changedSourceAccount(); + } +} + +export function selectSourceAccount(item, ac) { + const index = parseInt(ac._searchInput.attributes['data-index'].value); + document.querySelector('#form')._x_dataStack[0].$data.entries[index].source_account = { + id: item.id, name: item.name, alpine_name: item.name, type: item.type, currency_code: item.currency_code, + }; + document.querySelector('#form')._x_dataStack[0].changedSourceAccount(); +} diff --git a/resources/assets/v2/pages/transactions/shared/create-empty-split.js b/resources/assets/v2/pages/transactions/shared/create-empty-split.js index b28997f7d2..95ea4c61dd 100644 --- a/resources/assets/v2/pages/transactions/shared/create-empty-split.js +++ b/resources/assets/v2/pages/transactions/shared/create-empty-split.js @@ -25,6 +25,49 @@ function getAccount() { return { id: '', name: '', + alpine_name: '', + }; +} + +export function defaultErrorSet() { + return { + description: [], + + // amount information: + amount: [], + currency_code: [], + foreign_amount: [], + foreign_currency_code: [], + + // source and destination + source_account: [], + destination_account: [], + + // meta data information: + budget_id: [], + category_name: [], + piggy_bank_id: [], + bill_id: [], + tags: [], + notes: [], + + // other meta fields: + internal_reference: [], + external_url: [], + + // map + latitude: [], + longitude: [], + zoom_level: [], + + // date and time + date: [], + interest_date: [], + book_date: [], + process_date: [], + due_date: [], + payment_date: [], + invoice_date: [], }; } @@ -33,9 +76,45 @@ export function createEmptySplit() { let formatted = format(now, 'yyyy-MM-dd HH:mm'); return { description: '', + + // amount information: amount: '', + currency_code: 'EUR', + foreign_amount: '', + foreign_currency_code: '', + + // source and destination source_account: getAccount(), destination_account: getAccount(), - date: formatted + + // meta data information: + budget_id: null, + category_name: '', + piggy_bank_id: null, + bill_id: null, + tags: [], + notes: '', + + // other meta fields: + internal_reference: '', + external_url: '', + + // map + hasLocation: false, + latitude: null, + longitude: null, + zoomLevel: null, + + + // date and time + date: formatted, + interest_date: '', + book_date: '', + process_date: '', + due_date: '', + payment_date: '', + invoice_date: '', + + errors: defaultErrorSet(), }; } diff --git a/frontend/src/api/currencies/index.js b/resources/assets/v2/pages/transactions/shared/load-budgets.js similarity index 51% rename from frontend/src/api/currencies/index.js rename to resources/assets/v2/pages/transactions/shared/load-budgets.js index 86c8c916e9..27ba98b582 100644 --- a/frontend/src/api/currencies/index.js +++ b/resources/assets/v2/pages/transactions/shared/load-budgets.js @@ -1,6 +1,6 @@ /* - * basic.js - * Copyright (c) 2021 james@firefly-iii.org + * load-budgets.js + * Copyright (c) 2024 james@firefly-iii.org * * This file is part of Firefly III (https://github.com/firefly-iii). * @@ -18,14 +18,29 @@ * along with this program. If not, see . */ -import {api} from "boot/axios"; -import Authenticate from '../authenticate/index'; -export default class Currencies { - default() { - let auth = new Authenticate(); - return auth.authenticate().then(() => { - return api.get('/api/v1/currencies/default') +import Get from "../../../api/v2/model/budget/get.js"; + +export function loadBudgets() { + let params = { + page: 1, limit: 1337 + }; + let getter = new Get(); + return getter.list(params).then((response) => { + let returnData = [{ + id: 0, name: '(no budget)', + }]; + + for (let i in response.data.data) { + if (response.data.data.hasOwnProperty(i)) { + let current = response.data.data[i]; + let obj = { + id: current.id, name: current.attributes.name, + }; + returnData.push(obj); + } + } + return returnData; }); - } + } diff --git a/resources/assets/v2/pages/transactions/shared/load-currencies.js b/resources/assets/v2/pages/transactions/shared/load-currencies.js new file mode 100644 index 0000000000..048baa5701 --- /dev/null +++ b/resources/assets/v2/pages/transactions/shared/load-currencies.js @@ -0,0 +1,65 @@ +/* + * load-currencies.js + * Copyright (c) 2024 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + + +import Get from "../../../api/v2/model/currency/get.js"; + +export function loadCurrencies() { + let params = { + page: 1, limit: 1337 + }; + let getter = new Get(); + return getter.list(params).then((response) => { + let returnData = { + defaultCurrency: {}, + nativeCurrencies: [], + foreignCurrencies: [], + enabledCurrencies: [], + }; + + returnData.foreignCurrencies.push({ + id: 0, name: '(no foreign currency)', code: '', default: false, symbol: '', decimal_places: 2, + }); + for (let i in response.data.data) { + if (response.data.data.hasOwnProperty(i)) { + let current = response.data.data[i]; + if (current.attributes.enabled) { + let obj = + { + id: current.id, + name: current.attributes.name, + code: current.attributes.code, + default: current.attributes.default, + symbol: current.attributes.symbol, + decimal_places: current.attributes.decimal_places, + + }; + if (obj.default) { + returnData.defaultCurrency = obj; + } + returnData.enabledCurrencies.push(obj); + returnData.nativeCurrencies.push(obj); + returnData.foreignCurrencies.push(obj); + } + } + } + return returnData; + }); +} diff --git a/resources/assets/v2/pages/transactions/shared/load-piggy-banks.js b/resources/assets/v2/pages/transactions/shared/load-piggy-banks.js new file mode 100644 index 0000000000..3e32d8afb6 --- /dev/null +++ b/resources/assets/v2/pages/transactions/shared/load-piggy-banks.js @@ -0,0 +1,63 @@ +/* + * load-piggy-banks.js + * Copyright (c) 2024 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import Get from "../../../api/v2/model/piggy-bank/get.js"; + +export function loadPiggyBanks() { + let params = { + page: 1, limit: 1337 + }; + let getter = new Get(); + return getter.list(params).then((response) => { + let piggyBanks = { + '0': { + id: 0, name: '(no group)', order: 0, piggyBanks: [{ + id: 0, name: '(no piggy bank)', order: 0, + }] + } + }; + + for (let i in response.data.data) { + if (response.data.data.hasOwnProperty(i)) { + let current = response.data.data[i]; + let objectGroupId = current.attributes.object_group_id ?? '0'; + let objectGroupTitle = current.attributes.object_group_title ?? '(no group)'; + let piggyBank = { + id: current.id, name: current.attributes.name, order: current.attributes.order, + }; + if (!piggyBanks.hasOwnProperty(objectGroupId)) { + piggyBanks[objectGroupId] = { + id: objectGroupId, + name: objectGroupTitle, + order: current.attributes.object_group_order ?? 0, + piggyBanks: [] + }; + } + piggyBanks[objectGroupId].piggyBanks.push(piggyBank); + piggyBanks[objectGroupId].piggyBanks.sort((a, b) => a.order - b.order); + } + } + //tempObject.sort((a,b) => a.order - b.order); + return Object.keys(piggyBanks).sort().reduce((obj, key) => { + obj[key] = piggyBanks[key]; + return obj; + }, {}); + }); +} diff --git a/resources/assets/v2/pages/transactions/shared/load-subscriptions.js b/resources/assets/v2/pages/transactions/shared/load-subscriptions.js new file mode 100644 index 0000000000..29dea7b13b --- /dev/null +++ b/resources/assets/v2/pages/transactions/shared/load-subscriptions.js @@ -0,0 +1,61 @@ +/* + * load-subscriptions.js + * Copyright (c) 2024 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import SubscriptionGet from "../../../api/v2/model/subscription/get.js"; + +export function loadSubscriptions() { + let params = { + page: 1, limit: 1337 + }; + let getter = new SubscriptionGet(); + return getter.list(params).then((response) => { + let subscriptions = { + '0': { + id: 0, name: '(no group)', order: 0, subscriptions: [{ + id: 0, name: '(no subscription)', order: 0, + }] + } + }; + for (let i in response.data.data) { + if (response.data.data.hasOwnProperty(i)) { + let current = response.data.data[i]; + let objectGroupId = current.attributes.object_group_id ?? '0'; + let objectGroupTitle = current.attributes.object_group_title ?? '(no group)'; + let piggyBank = { + id: current.id, name: current.attributes.name, order: current.attributes.order, + }; + if (!subscriptions.hasOwnProperty(objectGroupId)) { + subscriptions[objectGroupId] = { + id: objectGroupId, + name: objectGroupTitle, + order: current.attributes.object_group_order ?? 0, + subscriptions: [] + }; + } + subscriptions[objectGroupId].subscriptions.push(piggyBank); + subscriptions[objectGroupId].subscriptions.sort((a, b) => a.order - b.order); + } + } + return Object.keys(subscriptions).sort().reduce((obj, key) => { + obj[key] = subscriptions[key]; + return obj; + }, {}); + }); +} diff --git a/resources/assets/v2/pages/transactions/shared/manage-locations.js b/resources/assets/v2/pages/transactions/shared/manage-locations.js new file mode 100644 index 0000000000..92fce38165 --- /dev/null +++ b/resources/assets/v2/pages/transactions/shared/manage-locations.js @@ -0,0 +1,105 @@ +/* + * manage-locations.js + * Copyright (c) 2024 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import L from "leaflet"; + +let maps = []; +let markers = []; + +// listen to event to remove marker: + +// location-remove + +document.addEventListener('location-remove', (event) => { + markers[event.detail.index].remove(); +}); + + +function addPointToMap(e) { + // index is always 0. + // let index = parseInt(e.originalEvent.currentTarget.attributes['data-index'].value); + let index = 0; + let hasLocation = document.querySelector('#form')._x_dataStack[0].$data.entries[index].hasLocation; + + if (false === hasLocation) { + markers[index] = new L.marker(e.latlng, {draggable: true}); + markers[index].on('dragend', dragEnd); + markers[index].addTo(maps[index]); + + const setEvent = new CustomEvent('location-set', { + detail: { + latitude: e.latlng.lat, + longitude: e.latlng.lng, + index: index, + zoomLevel: maps[index].getZoom() + } + }); + document.dispatchEvent(setEvent); + } +} + +function saveZoomOfMap(e) { + //let index = parseInt(e.sourceTarget._container.attributes['data-index'].value); + let index = 0; + const zoomEvent = new CustomEvent('location-zoom', { + detail: { + index: index, + zoomLevel: maps[index].getZoom() + } + }); + document.dispatchEvent(zoomEvent); +} + +function dragEnd(event) { + let marker = event.target; + let position = marker.getLatLng(); + marker.setLatLng(new L.LatLng(position.lat, position.lng), {draggable: 'true'}); + const moveEvent = new CustomEvent('location-move', { + detail: { + latitude: position.lat, + longitude: position.lng, + index: 0 + } + }); + document.dispatchEvent(moveEvent); +} + +export function addLocation(index) { + if (index > 0) { + console.warn('Corwardly refuse to add a map on split #' + (index + 1)); + return; + } + if (typeof maps[index] === 'undefined') { + // map holder is always the same: + + //let holder = document.getElementById('location_map_' + index); + let holder = document.getElementById('location_map'); + if (holder) { + maps[index] = L.map(holder).setView([holder.dataset.latitude, holder.dataset.longitude], holder.dataset.zoomLevel); + + L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { + maxZoom: 19, + attribution: '© OpenStreetMap' + }).addTo(maps[index]); + maps[index].on('click', addPointToMap); + maps[index].on('zoomend', saveZoomOfMap); + } + } +} diff --git a/resources/assets/v2/pages/transactions/shared/parse-downloaded-splits.js b/resources/assets/v2/pages/transactions/shared/parse-downloaded-splits.js new file mode 100644 index 0000000000..d5685f60ef --- /dev/null +++ b/resources/assets/v2/pages/transactions/shared/parse-downloaded-splits.js @@ -0,0 +1,96 @@ +/* + * parse-downloaded-splits.js + * Copyright (c) 2024 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import {createEmptySplit} from "./create-empty-split.js"; +import {format} from "date-fns"; +import formatMoney from "../../../util/format-money.js"; + +export function parseDownloadedSplits(downloads, groupId) { + let returnArray = []; + for (let i in downloads) { + if (downloads.hasOwnProperty(i)) { + // we have at least all default values! + let download = downloads[i]; + let current = createEmptySplit(); + + // meta data + current.transaction_journal_id = download.transaction_journal_id; + current.transaction_group_id = groupId; + current.bill_id = download.bill_id; + current.bill_name = download.bill_name; + current.budget_id = download.budget_id; + current.budget_name = download.budget_name; + current.category_name = download.category_name; + current.category_id = download.category_id; + current.piggy_bank_id = download.piggy_bank_id; + current.piggy_bank_name = download.piggy_bank_name; + + // meta dates + current.book_date = download.book_date; + current.due_date = download.due_date; + current.interest_date = download.interest_date; + current.invoice_date = download.invoice_date; + current.payment_date = download.payment_date; + current.process_date = download.process_date; + + // more meta + current.external_url = download.external_url; + current.internal_reference = download.internal_reference; + current.notes = download.notes; + current.tags = download.tags; + + // amount + current.amount = parseFloat(download.amount).toFixed(download.currency_decimal_places); + current.currency_code = download.currency_code; + if(null !== download.foreign_amount) { + current.forein_currency_code = download.foreign_currency_code; + current.foreign_amount = parseFloat(download.foreign_amount).toFixed(download.foreign_currency_decimal_places); + } + + // date and description + current.date = format(new Date(download.date), 'yyyy-MM-dd HH:mm'); + current.description = download.description; + + // source and destination + current.destination_account = { + id: download.destination_id, + name: download.destination_name, + type: download.destination_type, + alpine_name: download.destination_name, + }; + + current.source_account = { + id: download.source_id, + name: download.source_name, + type: download.source_type, + alpine_name: download.source_name, + }; + + if(null !== download.latitude) { + current.hasLocation = true; + current.latitude = download.latitude; + current.longitude = download.longitude; + current.zoomLevel = download.zoom_level; + } + returnArray.push(current); + } + } + return returnArray; +} diff --git a/resources/assets/v2/pages/transactions/shared/parse-from-entries.js b/resources/assets/v2/pages/transactions/shared/parse-from-entries.js index fb49b9fb25..f3e0c93fea 100644 --- a/resources/assets/v2/pages/transactions/shared/parse-from-entries.js +++ b/resources/assets/v2/pages/transactions/shared/parse-from-entries.js @@ -20,31 +20,84 @@ /** * - * @param entries */ -export function parseFromEntries(entries, transactionType) { +export function parseFromEntries(entries, originals, transactionType) { let returnArray = []; for (let i in entries) { if (entries.hasOwnProperty(i)) { const entry = entries[i]; + let compare = false; + let original = {}; + if (originals !== null && originals.hasOwnProperty(i)) { + compare = true; + let original = originals[i]; + } let current = {}; // fields for transaction - current.description = entry.description; + if ((compare && original.description !== entry.description) || !compare) { + current.description = entry.description; + } + + // source and destination current.source_name = entry.source_account.name; current.destination_name = entry.destination_account.name; + + // amount information: current.amount = entry.amount; + current.currency_code = entry.currency_code; + + + // dates current.date = entry.date; + current.interest_date = entry.interest_date; + current.book_date = entry.book_date; + current.process_date = entry.process_date; + current.due_date = entry.due_date; + current.payment_date = entry.payment_date; + current.invoice_date = entry.invoice_date; + + // meta + current.budget_id = entry.budget_id; + current.category_name = entry.category_name; + current.piggy_bank_id = entry.piggy_bank_id; + current.bill_id = entry.bill_id; + current.tags = entry.tags; + current.notes = entry.notes; + + // more meta + current.internal_reference = entry.internal_reference; + current.external_url = entry.external_url; + + // location + current.store_location = false; + if (entry.hasLocation) { + current.store_location = true; + current.longitude = entry.longitude.toString(); + current.latitude = entry.latitude.toString(); + current.zoom_level = entry.zoomLevel; + } + + // if foreign amount currency code is set: + if (typeof entry.foreign_currency_code !== 'undefined' && '' !== entry.foreign_currency_code.toString()) { + current.foreign_currency_code = entry.foreign_currency_code; + if (typeof entry.foreign_amount !== 'undefined' && '' !== entry.foreign_amount.toString()) { + current.foreign_amount = entry.foreign_amount; + } + if (typeof entry.foreign_amount === 'undefined' || '' === entry.foreign_amount.toString()) { + delete current.foreign_amount; + delete current.foreign_currency_code; + } + } // if ID is set: - if ('' !== entry.source_account.id.toString()) { + if (typeof entry.source_account.id !== 'undefined' && '' !== entry.source_account.id.toString()) { current.source_id = entry.source_account.id; } - if ('' !== entry.destination_account.id.toString()) { + if (typeof entry.destination_account.id !== 'undefined' && '' !== entry.destination_account.id.toString()) { current.destination_id = entry.destination_account.id; } - // TODO transaction type is hard coded: current.type = transactionType; diff --git a/resources/assets/v2/pages/transactions/shared/process-attachments.js b/resources/assets/v2/pages/transactions/shared/process-attachments.js new file mode 100644 index 0000000000..a842671942 --- /dev/null +++ b/resources/assets/v2/pages/transactions/shared/process-attachments.js @@ -0,0 +1,114 @@ +/* + * process-attachments.js + * Copyright (c) 2024 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import AttachmentPost from "../../../api/v1/attachments/post.js"; + +let uploadFiles = function (fileData) { + let count = fileData.length; + let uploads = 0; + let hasError = false; + + for (const key in fileData) { + if (fileData.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294 && false === hasError) { + let poster = new AttachmentPost(); + poster.post(fileData[key].name, 'TransactionJournal', fileData[key].journal).then(response => { + let attachmentId = parseInt(response.data.data.id); + poster.upload(attachmentId, fileData[key].content).then(attachmentResponse => { + uploads++; + if (uploads === count) { + const event = new CustomEvent('upload-success', {some: 'details'}); + document.dispatchEvent(event); + } + }).catch(error => { + console.error('Could not upload'); + console.error(error); + uploads++; + // break right away + const event = new CustomEvent('upload-failed', {error: error}); + document.dispatchEvent(event); + hasError = true; + }); + }).catch(error => { + console.error('Could not create upload.'); + console.error(error); + uploads++; + const event = new CustomEvent('upload-failed', {error: error}); + document.dispatchEvent(event); + hasError = true; + }); + } + } +} + + +export function processAttachments(groupId, transactions) { + // reverse list of transactions + transactions = transactions.reverse(); + + // array of all files to be uploaded: + let toBeUploaded = []; + let count = 0; + // array with all file data. + let fileData = []; + + // all attachments + let attachments = document.querySelectorAll('input[name="attachments[]"]'); + + // loop over all attachments, and add references to this array: + for (const key in attachments) { + if (attachments.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) { + for (const fileKey in attachments[key].files) { + if (attachments[key].files.hasOwnProperty(fileKey) && /^0$|^[1-9]\d*$/.test(fileKey) && fileKey <= 4294967294) { + // include journal thing. + toBeUploaded.push({ + journal: transactions[key].transaction_journal_id, + file: attachments[key].files[fileKey] + }); + count++; + } + } + } + } + + // loop all uploads. This is async. + for (const key in toBeUploaded) { + if (toBeUploaded.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) { + + // create file reader thing that will read all of these uploads + (function (f, key) { + let fileReader = new FileReader(); + fileReader.onloadend = function (evt) { + if (evt.target.readyState === FileReader.DONE) { // DONE == 2 + fileData.push({ + name: toBeUploaded[key].file.name, + journal: toBeUploaded[key].journal, + content: new Blob([evt.target.result]) + }); + if (fileData.length === count) { + uploadFiles(fileData); + } + } + }; + fileReader.readAsArrayBuffer(f.file); + })(toBeUploaded[key], key,); + } + } + return count; +} diff --git a/resources/assets/v2/pages/transactions/shared/splice-errors-into-transactions.js b/resources/assets/v2/pages/transactions/shared/splice-errors-into-transactions.js new file mode 100644 index 0000000000..8df406d30e --- /dev/null +++ b/resources/assets/v2/pages/transactions/shared/splice-errors-into-transactions.js @@ -0,0 +1,106 @@ +/* + * splice-errors-into-transactions.js + * Copyright (c) 2024 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +import i18next from "i18next"; + +function cleanupErrors(fullName, shortName, errors) { + let newErrors = []; + let message = ''; + for (let i in errors) { + if (errors.hasOwnProperty(i)) { + newErrors.push(errors[i].replace(fullName, shortName)); + } + } + return newErrors; +} + +export function spliceErrorsIntoTransactions(errors, transactions) { + let transactionIndex; + let fieldName; + let errorArray; + for (const key in errors) { + if (errors.hasOwnProperty(key)) { + if (key === 'group_title') { + console.error('Cannot handle error in group title.'); + // todo handle group errors. + //this.group_title_errors = errors.errors[key]; + continue; + } + transactionIndex = parseInt(key.split('.')[1]); + fieldName = key.split('.')[2]; + errorArray = cleanupErrors(key, fieldName, errors[key]); + if (!transactions.hasOwnProperty(transactionIndex)) { + console.error('Cannot handle errors in index #' + transactionIndex); + continue; + } + switch (fieldName) { + case 'currency_code': + case 'foreign_currency_code': + case 'category_name': + case 'piggy_bank_id': + case 'notes': + case 'internal_reference': + case 'external_url': + case 'latitude': + case 'longitude': + case 'zoom_level': + case 'interest_date': + case 'book_date': + case 'process_date': + case 'due_date': + case 'payment_date': + case 'invoice_date': + case 'amount': + case 'date': + case 'budget_id': + case 'bill_id': + case 'description': + case 'tags': + transactions[transactionIndex].errors[fieldName] = errorArray; + break; + case 'source_name': + case 'source_id': + transactions[transactionIndex].errors.source_account = transactions[transactionIndex].errors.source_account.concat(errorArray); + break; + case 'type': + // add custom error to source and destination account + transactions[transactionIndex].errors.source_account = transactions[transactionIndex].errors.source_account.concat([i18next.t('validation.bad_type_source')]); + transactions[transactionIndex].errors.destination_account = transactions[transactionIndex].errors.destination_account.concat([i18next.t('validation.bad_type_destination')]); + break; + case 'destination_name': + case 'destination_id': + transactions[transactionIndex].errors.destination_account = transactions[transactionIndex].errors.destination_account.concat(errorArray); + break; + case 'foreign_amount': + case 'foreign_currency_id': + transactions[transactionIndex].errors.foreign_amount = transactions[transactionIndex].errors.foreign_amount.concat(errorArray); + break; + } + // unique some errors. + if (typeof transactions[transactionIndex] !== 'undefined') { + transactions[transactionIndex].errors.source_account = Array.from(new Set(transactions[transactionIndex].errors.source_account)); + transactions[transactionIndex].errors.destination_account = Array.from(new Set(transactions[transactionIndex].errors.destination_account)); + } + } + } + console.log(transactions[0].errors); + + return transactions; + +} diff --git a/resources/assets/v2/pages/transactions/show.js b/resources/assets/v2/pages/transactions/show.js new file mode 100644 index 0000000000..5b24c388c8 --- /dev/null +++ b/resources/assets/v2/pages/transactions/show.js @@ -0,0 +1,157 @@ +/* + * show.js + * Copyright (c) 2024 james@firefly-iii.org. + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + */ + +import '../../boot/bootstrap.js'; +import dates from "../shared/dates.js"; +import i18next from "i18next"; +import Get from "../../api/v2/model/transaction/get.js"; +import {parseDownloadedSplits} from "./shared/parse-downloaded-splits.js"; +import {format} from "date-fns"; +import formatMoney from "../../util/format-money.js"; +import {inlineJournalDescription} from "../../support/inline-edit.js"; + + +let show = function () { + return { + // notifications + notifications: { + error: { + show: false, text: '', url: '', + }, success: { + show: false, text: '', url: '', + }, wait: { + show: false, text: '', + + } + }, + groupProperties: { + id: 0, + transactionType: '', + transactionTypeTranslated: '', + title: '', + date: new Date, + }, + dateFields: ["book_date", "due_date", "interest_date", "invoice_date", "payment_date", "process_date"], + metaFields: ['external_id', 'internal_reference', 'sepa_batch_id', 'sepa_ct_id', 'sepa_ct_op', 'sepa_db', 'sepa_country', 'sepa_cc', 'sepa_ep', 'sepa_ci', 'external_url'], + + // parse amounts per currency + amounts: {}, + + entries: [], + + pageProperties: {}, + formatMoney(amount, currencyCode) { + console.log('formatting', amount, currencyCode); + if ('' === currencyCode) { + currencyCode = 'EUR'; + } + return formatMoney(amount, currencyCode); + }, + format(date) { + return format(date, i18next.t('config.date_time_fns')); + }, + init() { + this.notifications.wait.show = true; + this.notifications.wait.text = i18next.t('firefly.wait_loading_data') + const page = window.location.href.split('/'); + const groupId = parseInt(page[page.length - 1]); + const getter = new Get(); + getter.show(groupId, {}).then((response) => { + const data = response.data.data; + this.groupProperties.id = parseInt(data.id); + this.groupProperties.transactionType = data.attributes.transactions[0].type; + this.groupProperties.transactionTypeTranslated = i18next.t('firefly.' + data.attributes.transactions[0].type); + this.groupProperties.title = data.attributes.title ?? data.attributes.transactions[0].description; + this.entries = parseDownloadedSplits(data.attributes.transactions, parseInt(data.id)); + // remove waiting thing. + this.notifications.wait.show = false; + }).then(() => { + for (let i in this.entries) { + if (this.entries.hasOwnProperty(i)) { + const currencyCode = this.entries[i].currency_code; + const foreignCurrencyCode = this.entries[i].foreign_currency_code; + + if (undefined === this.amounts[currencyCode]) { + this.amounts[currencyCode] = 0; + this.amounts[currencyCode] += parseFloat(this.entries[i].amount); + } + if (null !== foreignCurrencyCode && '' !== foreignCurrencyCode && undefined === this.amounts[foreignCurrencyCode]) { + this.amounts[foreignCurrencyCode] = 0; + this.amounts[foreignCurrencyCode] += parseFloat(this.entries[i].foreign_amount); + } + if (0 === parseInt(i)) { + this.groupProperties.date = this.entries[i].date; + } + } + } + + // at this point do the inline change fields + const descriptions = document.querySelectorAll('.journal_description'); + for (const i in descriptions) { + if (descriptions.hasOwnProperty(i)) { + const current = descriptions[i]; + // this is all manual work for now, and should be better + // TODO make better + current.addEventListener('save', function (e) { + const journalId = parseInt(e.currentTarget.dataset.id); + const groupId = parseInt(e.currentTarget.dataset.group); + const length = parseInt(e.currentTarget.dataset.length); // TODO not happy with this. + const newDescription = e.currentTarget.textContent; + console.log(length); + if (1 === length) { + // update "group" transaction title because it's equal to this journal's description. + document.querySelector('.group_title[data-group="' + groupId + '"]').textContent = newDescription; + document.querySelector('.group_title_title[data-group="' + groupId + '"]').textContent = newDescription; + } + }) + inlineJournalDescription(current); + } + } + + }).catch((error) => { + // todo auto generated. + this.notifications.error.show = true; + this.notifications.error.text = error.message; + }); + } + } +} + +let comps = {show, dates}; + +function loadPage() { + Object.keys(comps).forEach(comp => { + console.log(`Loading page component "${comp}"`); + let data = comps[comp](); + Alpine.data(comp, () => data); + }); + Alpine.start(); +} + +// wait for load until bootstrapped event is received. +document.addEventListener('firefly-iii-bootstrapped', () => { + console.log('Loaded through event listener.'); + loadPage(); +}); +// or is bootstrapped before event is triggered. +if (window.bootstrapped) { + console.log('Loaded through window variable.'); + loadPage(); +} diff --git a/resources/assets/v2/support/ag-grid/AmountEditor.js b/resources/assets/v2/support/ag-grid/AmountEditor.js new file mode 100644 index 0000000000..4af7697b26 --- /dev/null +++ b/resources/assets/v2/support/ag-grid/AmountEditor.js @@ -0,0 +1,110 @@ +/* + * AmountEditor.js + * Copyright (c) 2024 james@firefly-iii.org. + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + */ + + + +import Put from "../../api/v2/model/transaction/put.js"; + +export default class AmountEditor { + + init(params) { + + document.addEventListener('cellValueChanged', () => { + console.log('I just realized a cell value has changed.'); + }); + + console.log('AmountEditor.init'); + this.params = params; + this.originalValue = params.value; + this.eGui = document.createElement('div'); + + this.input = document.createElement('input'); + this.input.type = 'number'; + this.input.min = '0'; + this.input.step = 'any'; + this.input.style.overflow = 'hidden'; + this.input.style.textOverflow = 'ellipsis'; + this.input.autofocus = true; + this.input.value = parseFloat(params.value.amount).toFixed(params.value.decimal_places); + + //this.input.onchange = function(e) { this.onChange(e, params);} + // params.onValueChange; + //this.input.onblur = params.onValueChange; + + // this.input.onblur = function () { + // params.stopEditing(); + // }; + + // this.eGui.innerHTML = ``; + } + onChange(e) { + console.log('AmountEditor.onChange'); + this.params.onValueChange(e); + this.params.stopEditing(e); + } + + // focus and select can be done after the gui is attached + afterGuiAttached() { + this.input.focus(); + this.input.select(); + } + + + getGui() { + console.log('AmountEditor.getGui'); + this.eGui.appendChild(this.input); + return this.eGui; + } + + getValue() { + console.log('AmountEditor.getValue'); + this.originalValue.amount = parseFloat(this.input.value); + + // needs a manual submission to Firefly III here. + this.submitAmount(this.originalValue); + + + return this.originalValue; + } + + submitAmount(value) { + console.log('AmountEditor.submitAmount'); + console.log(value); + const newValue = value.amount; + console.log('New value for field "amount" in transaction journal #' + value.transaction_journal_id + ' of group #' + value.id + ' is "' + newValue + '"'); + + // push update to Firefly III over API: + let submission = { + transactions: [ + { + transaction_journal_id: value.transaction_journal_id, + amount: newValue + } + ] + }; + + let putter = new Put(); + putter.put(submission, {id: value.id}); + } + +} diff --git a/resources/assets/v2/support/ag-grid/DateTimeEditor.js b/resources/assets/v2/support/ag-grid/DateTimeEditor.js new file mode 100644 index 0000000000..d802cec07e --- /dev/null +++ b/resources/assets/v2/support/ag-grid/DateTimeEditor.js @@ -0,0 +1,84 @@ +/* + * AmountEditor.js + * Copyright (c) 2024 james@firefly-iii.org. + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + */ + + + +import Put from "../../api/v2/model/transaction/put.js"; +import format from "../../util/format.js"; + +export default class DateTimeEditor { + + init(params) { + console.log('DateTimeEditor.init'); + this.params = params; + this.originalValue = params.value; + this.eGui = document.createElement('div'); + + this.input = document.createElement('input'); + this.input.type = 'datetime-local'; + this.input.style.overflow = 'hidden'; + this.input.style.textOverflow = 'ellipsis'; + this.input.value = format(params.value, 'yyyy-MM-dd HH:mm'); + } + onChange(e) { + console.log('DateTimeEditor.onChange'); + this.params.onValueChange(e); + this.params.stopEditing(e); + } + + // focus and select can be done after the gui is attached + afterGuiAttached() { + this.input.focus(); + } + + getGui() { + console.log('DateTimeEditor.getGui'); + this.eGui.appendChild(this.input); + return this.eGui; + } + + getValue() { + console.log('DateTimeEditor.getValue'); + this.originalValue = this.input.value; + + return this.originalValue; + } + + submitAmount(value) { + console.log('AmountEditor.submitAmount'); + console.log(value); + const newValue = value.amount; + console.log('New value for field "amount" in transaction journal #' + value.transaction_journal_id + ' of group #' + value.id + ' is "' + newValue + '"'); + + // push update to Firefly III over API: + let submission = { + transactions: [ + { + transaction_journal_id: value.transaction_journal_id, + amount: newValue + } + ] + }; + + let putter = new Put(); + putter.put(submission, {id: value.id}); + } + +} diff --git a/resources/assets/v2/support/ag-grid/TransactionDataSource.js b/resources/assets/v2/support/ag-grid/TransactionDataSource.js new file mode 100644 index 0000000000..87e15419cc --- /dev/null +++ b/resources/assets/v2/support/ag-grid/TransactionDataSource.js @@ -0,0 +1,146 @@ +/* + * TransactionDataSource.js + * Copyright (c) 2024 james@firefly-iii.org. + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + */ + +import Get from "../../api/v2/model/transaction/get.js"; + +export default class TransactionDataSource { + constructor() { + this.type = 'all'; + this.rowCount = null; + this.sortModel = null; + } + + + rowCount() { + return this.rowCount; + } + + getRows(params) { + console.log('The sort model used is: ', params.sortModel); + let sorting = []; + + for(let i in params.sortModel) { + if(params.sortModel.hasOwnProperty(i)) { + let sort = params.sortModel[i]; + sorting.push({column: sort.colId, direction: sort.sort}); + } + } + + let getter = new Get(); + + getter.infiniteList({start_row: params.startRow, end_row: params.endRow, type: this.type, sorting: sorting}).then(response => { + this.parseTransactions(response.data.data, params.successCallback); + + // set meta data + this.rowCount = response.data.meta.pagination.total; + }).catch(error => { + // todo this is auto generated + //this.notifications.wait.show = false; + //this.notifications.error.show = true; + //this.notifications.error.text = error.response.data.message; + console.log(error); + }); + } + + parseTransactions(data, callback) { + let transactions = []; + // no parse, just save + for (let i in data) { + if (data.hasOwnProperty(i)) { + let current = data[i]; + let isSplit = current.attributes.transactions.length > 1; + let firstSplit = true; + + // foreach on transactions, no matter how many. + for (let ii in current.attributes.transactions) { + if (current.attributes.transactions.hasOwnProperty(ii)) { + let transaction = current.attributes.transactions[ii]; + + + let entry = {}; + // split info + + entry.split = isSplit; + entry.firstSplit = firstSplit; + + // group attributes + entry.group_title = current.attributes.group_title; + entry.created_at = current.attributes.created_at; + entry.updated_at = current.attributes.updated_at; + entry.user = current.attributes.user; + entry.user_group = current.attributes.user_group; + + // create actual transaction: + entry.id = parseInt(current.id); + entry.transaction_journal_id = parseInt(transaction.transaction_journal_id); + entry.description = transaction.description; + entry.date = new Date(transaction.date); + + // complex fields + entry.from = { + name: transaction.source_name, + id: transaction.source_id, + type: transaction.source_type, + }; + entry.to = { + name: transaction.destination_name, + id: transaction.destination_id, + type: transaction.destination_type, + }; + entry.category = { + name: transaction.category_name, + id: transaction.category_id, + }; + entry.budget = { + name: transaction.budget_name, + id: transaction.budget_id, + }; + + entry.amount = { + id: parseInt(current.id), + transaction_journal_id: parseInt(transaction.transaction_journal_id), + type: transaction.type, + amount: transaction.amount, + currency_code: transaction.currency_code, + decimal_places: transaction.currency_decimal_places, + foreign_amount: transaction.foreign_amount, + foreign_currency_code: transaction.foreign_currency_code, + foreign_decimal_places: transaction.foreign_currency_decimal_places, + }; + + entry.icon = {classes: 'fa fa-solid fa-arrow-left', id: entry.id}; + + // set firstSplit = false for next run if applicable. + //console.log(transaction); + firstSplit = false; + transactions.push(entry); + } + } + } + } + callback(transactions, false) + return transactions; + } + + setType(type) { + this.type = type; + } + +} diff --git a/frontend/babel.config.js b/resources/assets/v2/support/inline-edit.js similarity index 50% rename from frontend/babel.config.js rename to resources/assets/v2/support/inline-edit.js index 88ca4e7820..190a539e1d 100644 --- a/frontend/babel.config.js +++ b/resources/assets/v2/support/inline-edit.js @@ -1,6 +1,6 @@ /* - * babel.config.js - * Copyright (c) 2022 james@firefly-iii.org + * inline-edit.js + * Copyright (c) 2024 james@firefly-iii.org. * * This file is part of Firefly III (https://github.com/firefly-iii). * @@ -15,21 +15,25 @@ * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . + * along with this program. If not, see https://www.gnu.org/licenses/. */ -/* eslint-env node */ +import DarkEditable from "../libraries/dark-editable/dark-editable.js"; -module.exports = api => { - return { - presets: [ - [ - '@quasar/babel-preset-app', - api.caller(caller => caller && caller.target === 'node') - ? { targets: { node: 'current' } } - : {} - ] - ] - } +function inlineJournalDescription(element) { + const journalId = parseInt(element.dataset.id); + const groupId = parseInt(element.dataset.group); + const opts = { + pk: groupId, + mode: 'inline', + url: './api/v2/transactions/' + groupId, + formType: 'journal_description', + journalId: journalId, + method: 'PUT', + }; + new DarkEditable(element, + opts + ); } +export {inlineJournalDescription}; diff --git a/resources/assets/v2/support/load-translations.js b/resources/assets/v2/support/load-translations.js index 17162a8065..6e7a372745 100644 --- a/resources/assets/v2/support/load-translations.js +++ b/resources/assets/v2/support/load-translations.js @@ -18,16 +18,43 @@ * along with this program. If not, see . */ + +import i18next from "i18next"; +import ChainedBackend from "i18next-chained-backend"; +import HttpBackend from "i18next-http-backend"; +import LocalStorageBackend from "i18next-localstorage-backend"; + let loaded = false; -async function loadTranslations(i18n, locale) { +function loadTranslations(locale) { if (false === loaded) { - locale = locale.replace('-', '_'); - const response = await fetch(`./v2/i18n/${locale}.json`); - const translations = await response.json(); - i18n.store(translations); + const replacedLocale = locale.replace('-', '_'); + loaded = true; + const expireTime = import.meta.env.MODE === 'development' ? 1 : 7 * 24 * 60 * 60 * 1000; + console.log('Will load language "'+replacedLocale+'"'); + return i18next + .use(ChainedBackend) + .init({ + load: 'languageOnly', + fallbackLng: "en", + lng: replacedLocale, + debug: import.meta.env.MODE === 'development', + backend: { + backends: [ + LocalStorageBackend, + HttpBackend + ], + backendOptions: [{ + load: 'languageOnly', + expirationTime: expireTime + }, { + loadPath: './v2/i18n/{{lng}}.json' + }] + } + }); } - //loaded = true; + console.warn('Loading translations skipped.'); + return Promise.resolve(); } export {loadTranslations}; diff --git a/resources/lang/bg_BG/api.php b/resources/lang/bg_BG/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/bg_BG/api.php +++ b/resources/lang/bg_BG/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/bg_BG/auth.php b/resources/lang/bg_BG/auth.php index 501e75def4..3c72b8b760 100644 --- a/resources/lang/bg_BG/auth.php +++ b/resources/lang/bg_BG/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Въведените удостоверителни данни не съвпадат с нашите записи.', 'throttle' => 'Твърде много опити за влизане. Опитайте се пак след :seconds секунди.', diff --git a/resources/lang/bg_BG/breadcrumbs.php b/resources/lang/bg_BG/breadcrumbs.php index f8d070f9c2..fc738f7bed 100644 --- a/resources/lang/bg_BG/breadcrumbs.php +++ b/resources/lang/bg_BG/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Начало', - 'budgets' => 'Бюджети', - 'subscriptions' => 'Абонаменти', - 'transactions' => 'Транзакции', - 'title_expenses' => 'Разходи', - 'title_withdrawal' => 'Разходи', - 'title_revenue' => 'Приходи', - 'title_deposit' => 'Приходи', - 'title_transfer' => 'Прехвърляния', - 'title_transfers' => 'Прехвърляния', - 'edit_currency' => 'Редактирай валута ":name"', - 'delete_currency' => 'Изтрий валута ":name"', - 'newPiggyBank' => 'Създай нова касичка', - 'edit_piggyBank' => 'Редактирай касичка ":name"', - 'preferences' => 'Настройки', - 'profile' => 'Профил', - 'accounts' => 'Сметки', - 'changePassword' => 'Промени паролата си', - 'change_email' => 'Смяна на имейл адрес', - 'bills' => 'Сметки', - 'newBill' => 'Нова сметка', - 'edit_bill' => 'Редактирай сметка ":name"', - 'delete_bill' => 'Изтрий сметка ":name"', - 'reports' => 'Отчети', - 'search_result' => 'Резултати от търсенето за ":query"', - 'withdrawal_list' => 'Разходи', - 'Withdrawal_list' => 'Разходи', - 'deposit_list' => 'Приходи, доходи и депозити', - 'transfer_list' => 'Прехвърляне', - 'transfers_list' => 'Прехвърляне', + 'home' => 'Начало', + 'budgets' => 'Бюджети', + 'subscriptions' => 'Абонаменти', + 'transactions' => 'Транзакции', + 'title_expenses' => 'Разходи', + 'title_withdrawal' => 'Разходи', + 'title_revenue' => 'Приходи', + 'title_deposit' => 'Приходи', + 'title_transfer' => 'Прехвърляния', + 'title_transfers' => 'Прехвърляния', + 'edit_currency' => 'Редактирай валута ":name"', + 'delete_currency' => 'Изтрий валута ":name"', + 'newPiggyBank' => 'Създай нова касичка', + 'edit_piggyBank' => 'Редактирай касичка ":name"', + 'preferences' => 'Настройки', + 'profile' => 'Профил', + 'accounts' => 'Сметки', + 'changePassword' => 'Промени паролата си', + 'change_email' => 'Смяна на имейл адрес', + 'bills' => 'Сметки', + 'newBill' => 'Нова сметка', + 'edit_bill' => 'Редактирай сметка ":name"', + 'delete_bill' => 'Изтрий сметка ":name"', + 'reports' => 'Отчети', + 'search_result' => 'Резултати от търсенето за ":query"', + 'withdrawal_list' => 'Разходи', + 'Withdrawal_list' => 'Разходи', + 'deposit_list' => 'Приходи, доходи и депозити', + 'transfer_list' => 'Прехвърляне', + 'transfers_list' => 'Прехвърляне', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Съгласувания', 'create_withdrawal' => 'Създай нов разход', 'create_deposit' => 'Създай нов приход', diff --git a/resources/lang/bg_BG/components.php b/resources/lang/bg_BG/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/bg_BG/components.php +++ b/resources/lang/bg_BG/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/bg_BG/config.php b/resources/lang/bg_BG/config.php index 5eca2f6218..e64007b783 100644 --- a/resources/lang/bg_BG/config.php +++ b/resources/lang/bg_BG/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'bg', - 'locale' => 'bg, Bulgarian, bg_BG.utf8, bg_BG.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'bg', + 'locale' => 'bg, Bulgarian, bg_BG.utf8, bg_BG.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'Do MMMM YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'Do MMMM, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'Do MMMM YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'Do MMMM, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'Do MMMM, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'Do MMMM, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Week' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Week' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Понеделник', - 'dow_2' => 'Вторник', - 'dow_3' => 'Сряда', - 'dow_4' => 'Четвъртък', - 'dow_5' => 'Петък', - 'dow_6' => 'Събота', - 'dow_7' => 'Неделя', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Понеделник', + 'dow_2' => 'Вторник', + 'dow_3' => 'Сряда', + 'dow_4' => 'Четвъртък', + 'dow_5' => 'Петък', + 'dow_6' => 'Събота', + 'dow_7' => 'Неделя', ]; /* diff --git a/resources/lang/bg_BG/demo.php b/resources/lang/bg_BG/demo.php index 0b6ca970ec..21fadbda1d 100644 --- a/resources/lang/bg_BG/demo.php +++ b/resources/lang/bg_BG/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/bg_BG/email.php b/resources/lang/bg_BG/email.php index 3d4de8e48f..d769924bb0 100644 --- a/resources/lang/bg_BG/email.php +++ b/resources/lang/bg_BG/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Тестово съобщение от вашата инсталация на Firefly III', 'admin_test_body' => 'Това е тестово съобщение от вашата Firefly III инстанция. То беше изпратено на :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'An invitation has been created', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Смяна на парола:', 'registered_doc_link' => 'Документация:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'A new Firefly III version is available', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Ако предпочитате, можете също да отворите нов проблем на https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Пълният stacktrace е отдолу:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III създаде нова транзакция | Firefly III създаде :count нови транзакции', 'new_journals_header' => 'Firefly III създаде транзакция за вас. Можете да я намерите във вашата инсталация на Firefly III: | Firefly III създаде :count транзакции за вас. Можете да ги намерите във вашата инсталация на Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/bg_BG/errors.php b/resources/lang/bg_BG/errors.php index afe03af3ea..a3abb846d2 100644 --- a/resources/lang/bg_BG/errors.php +++ b/resources/lang/bg_BG/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Проследяване на стека', 'more_info' => 'Повече информация', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Моля, съберете повече информация в директорията storage/logs , където ще намерите файловете на дневника. Ако използвате Docker, използвайте docker logs -f [container].', - 'collect_info_more' => 'Можете да прочетете повече за събирането на информация за грешки на the FAQ.', - 'github_help' => 'Получете помощ на GitHub', - 'github_instructions' => 'Добре дошли сте да отворите нов проблем на GitHub.', - 'use_search' => 'Използвайте търсенето!', - 'include_info' => 'Включете информацията от тази debug страница.', - 'tell_more' => 'Разкажете ни повече от „казва Опаааа!“', - 'include_logs' => 'Включете регистрационни файлове за грешки (вижте по-горе).', - 'what_did_you_do' => 'Кажете ни какво правихте.', - 'offline_header' => 'Вие вероятно не сте на линия', - 'offline_unreachable' => 'Firefly III е недостижим. Устройството Ви в момента не е на линия или сървърът не работи.', - 'offline_github' => 'Ако сте сигурни, че Вашето устройство и сървъра са на линия, моля отворете билет на GitHub.', - + 'collect_info' => 'Моля, съберете повече информация в директорията storage/logs , където ще намерите файловете на дневника. Ако използвате Docker, използвайте docker logs -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Получете помощ на GitHub', + 'github_instructions' => 'Добре дошли сте да отворите нов проблем на GitHub.', + 'use_search' => 'Използвайте търсенето!', + 'include_info' => 'Включете информацията от тази debug страница.', + 'tell_more' => 'Разкажете ни повече от „казва Опаааа!“', + 'include_logs' => 'Включете регистрационни файлове за грешки (вижте по-горе).', + 'what_did_you_do' => 'Кажете ни какво правихте.', + 'offline_header' => 'Вие вероятно не сте на линия', + 'offline_unreachable' => 'Firefly III е недостижим. Устройството Ви в момента не е на линия или сървърът не работи.', + 'offline_github' => 'Ако сте сигурни, че Вашето устройство и сървъра са на линия, моля отворете билет на GitHub.', ]; diff --git a/resources/lang/bg_BG/firefly.php b/resources/lang/bg_BG/firefly.php index 28a75a7e98..43ba9cf0f7 100644 --- a/resources/lang/bg_BG/firefly.php +++ b/resources/lang/bg_BG/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Затвори', - 'actions' => 'Действия', - 'edit' => 'Промени', - 'delete' => 'Изтрий', - 'split' => 'Раздели', - 'single_split' => 'Раздел', - 'clone' => 'Дублирай', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => 'Последните седем дни', - 'last_thirty_days' => 'Последните трийсет дни', - 'last_180_days' => 'Последните 180 дни', - 'month_to_date' => 'От началото на месеца', - 'year_to_date' => 'От началото на годината', - 'YTD' => 'YTD', - 'welcome_back' => 'Какво се случва?', - 'everything' => 'Всичко', - 'today' => 'Днес', - 'customRange' => 'Потребителски диапазон', - 'date_range' => 'Период', - 'apply' => 'Приложи', - 'select_date' => 'Изберете дата..', - 'cancel' => 'Отказ', - 'from' => 'От', - 'to' => 'До', - 'structure' => 'Структура', - 'help_translating' => 'Този помощен текст още не е наличен на Вашия език. Ще помогнете ли с превода?', - 'showEverything' => 'Покажи всичко', - 'never' => 'Никога', - 'no_results_for_empty_search' => 'Вашето търсене беше празно и нищо не беше намерено.', - 'removed_amount' => 'Изтрито :amount', - 'added_amount' => 'Добавено :amount', - 'asset_account_role_help' => 'Всички допълнителни опции, получени от вашия избор, могат да бъдат зададени по-късно.', - 'Opening balance' => 'Начално салдо', - 'create_new_stuff' => 'Създайте нови неща', - 'new_withdrawal' => 'Ново теглене', - 'create_new_transaction' => 'Създай нова трансакция', - 'sidebar_frontpage_create' => 'Създай', - 'new_transaction' => 'Нова транзакция', - 'no_rules_for_bill' => 'С тази сметка няма свързани правила.', - 'go_to_asset_accounts' => 'Вижте активите си', - 'go_to_budgets' => 'Вижте бюджетите си', - 'go_to_withdrawals' => 'Вижте тегленията си', - 'clones_journal_x' => 'Тази транзакция е копирана от ":description" (#:id)', - 'go_to_categories' => 'Виж категориите си', - 'go_to_bills' => 'Виж сметките си', - 'go_to_expense_accounts' => 'Виж разходните си сметки', - 'go_to_revenue_accounts' => 'Виж приходните си сметки', - 'go_to_piggies' => 'Виж касичките си', - 'new_deposit' => 'Нов депозит', - 'new_transfer' => 'Ново прехвърляне', - 'new_transfers' => 'Ново прехвърляне', - 'new_asset_account' => 'Нова сметка за активи', - 'new_expense_account' => 'Нова сметка за разходи', - 'new_revenue_account' => 'Нова сметка за приходи', - 'new_liabilities_account' => 'Ново задължение', - 'new_budget' => 'Нов бюджет', - 'new_bill' => 'Нова сметка', - 'block_account_logout' => 'Излезли сте от системата. Блокираните акаунти не могат да използват този сайт. Регистрирахте ли се с валиден имейл адрес?', - 'flash_success' => 'Успех!', - 'flash_info' => 'Съобщение', - 'flash_warning' => 'Внимание!', - 'flash_error' => 'Грешка!', - 'flash_danger' => 'Опасност!', - 'flash_info_multiple' => 'Има ново съобщение| Има :count нови съобщения', - 'flash_error_multiple' => 'Има нова грешка| Има :count нови грешки', - 'net_worth' => 'Нетна стойност', - 'help_for_this_page' => 'Помощ за тази страница', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => 'Здравейте!', - 'two_factor_enter_code' => 'За да продължите, моля въведете вашия двуфакторен код за удостоверяване. Вашето приложение може да го генерира за вас.', - 'two_factor_code_here' => 'Въведете кода тук', - 'two_factor_title' => 'Двуфакторно удостоверяване', - 'authenticate' => 'Удостоверяване', - 'two_factor_forgot_title' => 'Загубена двуфакторната идентификация', - 'two_factor_forgot' => 'Забравих своето двуфакторно нещо.', - 'two_factor_lost_header' => 'Загубихте вашата двуфакторната идентификация?', - 'two_factor_lost_intro' => 'Ако сте загубили и резервните си кодове, имате лош късмет. Това не е нещо, което можете да поправите от уеб интерфейса. Имате два варианта.', - 'two_factor_lost_fix_self' => 'Ако използвате свой собствен екземпляр на Firefly III, прочетете тази статия в ЧЗВ за инструкции.', - 'two_factor_lost_fix_owner' => 'В противен случай изпратете имейл на собственика на сайта,:site_owner и ги помолете да нулират вашето двуфакторно удостоверяване.', - 'mfa_backup_code' => 'Използвали сте резервен код, за да влезете в Firefly III. Не може да се използва отново, затова го зачеркнете от списъка си.', - 'pref_two_factor_new_backup_codes' => 'Вземете нови резервни кодове', - 'pref_two_factor_backup_code_count' => 'Имате :count валиден резервен код.|Имате :count валидни резервни кодове.', - '2fa_i_have_them' => 'Съхраних ги!', - 'warning_much_data' => ':days дни с данни може да отнеме известно време.', - 'registered' => 'Регистрирахте се успешно!', - 'Default asset account' => 'Сметка за активи по подразбиране', - 'no_budget_pointer' => 'Изглежда все още нямате бюджети. Трябва да създадете някои на страницата Бюджети . Бюджетите могат да ви помогнат да следите разходите си.', - 'no_bill_pointer' => 'Изглежда все още нямате сметки. Трябва да създадете някои на страницата Сметки . Сметките могат да ви помогнат да следите разходите си.', - 'Savings account' => 'Спестовна сметка', - 'Credit card' => 'Кредитна карта', - 'source_accounts' => 'Разходна сметка|Разходни сметки', - 'destination_accounts' => 'Приходна сметка|Приходни сметки', - 'user_id_is' => 'Вашето потребителско ID е :user', - 'field_supports_markdown' => 'Това поле поддържа Markdown.', - 'need_more_help' => 'Ако имате нужда от още помощ за използването на Firefly III, моля отворете билет на Github.', - 'reenable_intro_text' => 'Може също да активирате отново въведението.', - 'intro_boxes_after_refresh' => 'Полетата на въведението ще се появят отново, когато опресните страницата.', - 'show_all_no_filter' => 'Покажи всички транзакции без групиране по дата.', - 'expenses_by_category' => 'Разходи по категории', - 'expenses_by_budget' => 'Разходи по бюджети', - 'income_by_category' => 'Приходи по категория', - 'expenses_by_asset_account' => 'Разходи по сметка за активи', - 'expenses_by_expense_account' => 'Разходи по разходна сметка', - 'cannot_redirect_to_account' => 'Firefly III не може да ви пренасочи към правилната страница. Извиняваме се.', - 'sum_of_expenses' => 'Сума на разходите', - 'sum_of_income' => 'Сума на приходите', - 'liabilities' => 'Задължения', - 'spent_in_specific_budget' => 'Похарчено в бюджет ":budget"', - 'spent_in_specific_double' => 'Похарчено от сметка ":account"', - 'earned_in_specific_double' => 'Получено в сметка ":account"', - 'source_account' => 'Разходна сметка', - 'source_account_reconciliation' => 'Не може да редактирате разходната сметка на транзакция за съгласуване.', - 'destination_account' => 'Приходна сметка', - 'destination_account_reconciliation' => 'Не може да редактирате приходната сметка на транзакция за съгласуване.', - 'sum_of_expenses_in_budget' => 'Общо похарчено в бюджет ":budget"', - 'left_in_budget_limit' => 'Остави да харчи според бюджета', - 'current_period' => 'Текущ период', - 'show_the_current_period_and_overview' => 'Покажи текущия период и обобщение', - 'pref_languages_locale' => 'За да работи език, различен от английския, вашата операционна система трябва да е снабдена с правилната локална информация. Ако няма такава, валутните данни, дати и суми могат да бъдат форматирани погрешно.', - 'budget_in_period' => 'Всички транзакции за бюджет ":name" между :start и :end в :currency', - 'chart_budget_in_period' => 'Графика на всички транзакции за бюджет ":name" между :start и :end в :currency', - 'chart_budget_in_period_only_currency' => 'Сумата, която бюджетирахте беше в :currency, така че тази графика ще показва само транзакции в :currency.', - 'chart_account_in_period' => 'Графика на всички транзакции за сметка ":name" (:balance) между :start и :end', - 'chart_category_in_period' => 'Графика на всички транзакции за категория ":name" между :start и :end', - 'chart_category_all' => 'Графика на всички транзакции за категория ":name"', - 'clone_withdrawal' => 'Копирай това теглене', - 'clone_deposit' => 'Копирай този депозит', - 'clone_transfer' => 'Копирай този трансфер', - 'multi_select_no_selection' => 'Нищо не е избрано', - 'multi_select_select_all' => 'Избери всички', - 'multi_select_n_selected' => 'избрани', - 'multi_select_all_selected' => 'Всички избрани', - 'multi_select_filter_placeholder' => 'Търси..', - 'intro_next_label' => 'Следващ', - 'intro_prev_label' => 'Предишен', - 'intro_skip_label' => 'Пропусни', - 'intro_done_label' => 'Готово', - 'between_dates_breadcrumb' => 'Между :start и :end', - 'all_journals_without_budget' => 'Всички транзакции без бюджет', - 'journals_without_budget' => 'Транзакции без бюджет', - 'all_journals_without_category' => 'Всички транзакции без категория', - 'journals_without_category' => 'Транзакции без категория', - 'all_journals_for_account' => 'Всички транзакции за сметка :name', - 'chart_all_journals_for_account' => 'Графика на всички транзакции за сметка :name', - 'journals_in_period_for_account' => 'Всички транзакции за сметка :name между :start и :end', - 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', - 'transferred' => 'Прехвърлени', - 'all_withdrawal' => 'Всички разходи', - 'all_transactions' => 'Всички транзакции', - 'title_withdrawal_between' => 'Всички разходи между :start и :end', - 'all_deposit' => 'Всички приходи', - 'title_deposit_between' => 'Всички приходи между :start и :end', - 'all_transfers' => 'Всички трансфери', - 'title_transfers_between' => 'Всички трансфери между :start и :end', - 'all_transfer' => 'Всички трансфери', - 'all_journals_for_tag' => 'Всички транзакции за етикет ":tag"', - 'title_transfer_between' => 'Всички трансфери между :start и :end', - 'all_journals_for_category' => 'Всички транзакции за категория :name', - 'all_journals_for_budget' => 'Всички транзакции за бюджет :name', - 'chart_all_journals_for_budget' => 'Графика на всички транзакции за бюджет :name', - 'journals_in_period_for_category' => 'Всички транзакции за категория :name между :start и :end', - 'journals_in_period_for_tag' => 'Всички транзакции за етикет :tag между :start и :end', - 'not_available_demo_user' => 'Функцията, до която се опитвате да получите достъп, не е достъпна за демо потребители.', - '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' => 'Грешна конфигурация на сървъра', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Бърз ключ', - 'sign_in_to_start' => 'Влезте, за да започнете сесията си', - 'sign_in' => 'Вход', - 'register_new_account' => 'Регистриране на нов профил', - 'forgot_my_password' => 'Забравена парола', - 'problems_with_input' => 'Имаше някои проблеми с вашите данни.', - 'reset_password' => 'Промяна на паролата ви', - 'button_reset_password' => 'Нулиране на паролата', - 'reset_button' => 'Изчисти', - 'want_to_login' => 'Искам да вляза', - 'login_page_title' => 'Влезте в Firefly III', - 'register_page_title' => 'Регистрирайте се в Firefly III', - 'forgot_pw_page_title' => 'Забравихте паролата си за Firefly III', - 'reset_pw_page_title' => 'Нулирайте паролата си за Firefly III', - 'cannot_reset_demo_user' => 'Не можете да нулирате паролата на демо потребителя.', - 'no_att_demo_user' => 'Демо потребителят не може да прикачва документи.', - 'button_register' => 'Регистриране', - 'authorization' => 'Позволение', - 'active_bills_only' => 'само активни сметки', - 'active_bills_only_total' => 'всички активни сметки', - 'active_exp_bills_only' => 'активни и очаквани сметки', - 'active_exp_bills_only_total' => 'всички активни и очаквани сметки', - 'per_period_sum_1D' => 'Очаквани дневни разходи', - 'per_period_sum_1W' => 'Очаквани седмични разходи', - 'per_period_sum_1M' => 'Очаквани месечни разходи', - 'per_period_sum_3M' => 'Очаквани тримесечни разходи', - 'per_period_sum_6M' => 'Очаквани разходи за полугодие', - 'per_period_sum_1Y' => 'Очаквани годишни разходи', - 'average_per_bill' => 'средно за сметка', - 'expected_total' => 'общо очаквано', - 'reconciliation_account_name' => ':name съгласуване (:currency)', - 'saved' => 'Записан', - 'advanced_options' => 'Разширени настройки', - 'advanced_options_explain' => 'Някои страници в Firefly III имат разширени опции, скрити зад този бутон. Тази страница няма нищо интересно тук, но проверете останалите!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Затвори', + 'actions' => 'Действия', + 'edit' => 'Промени', + 'delete' => 'Изтрий', + 'split' => 'Раздели', + 'single_split' => 'Раздел', + 'clone' => 'Дублирай', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Confirm action', + 'last_seven_days' => 'Последните седем дни', + 'last_thirty_days' => 'Последните трийсет дни', + 'last_180_days' => 'Последните 180 дни', + 'month_to_date' => 'От началото на месеца', + 'year_to_date' => 'От началото на годината', + 'YTD' => 'YTD', + 'welcome_back' => 'Какво се случва?', + 'everything' => 'Всичко', + 'today' => 'Днес', + 'customRange' => 'Потребителски диапазон', + 'date_range' => 'Период', + 'apply' => 'Приложи', + 'select_date' => 'Изберете дата..', + 'cancel' => 'Отказ', + 'from' => 'От', + 'to' => 'До', + 'structure' => 'Структура', + 'help_translating' => 'Този помощен текст още не е наличен на Вашия език. Ще помогнете ли с превода?', + 'showEverything' => 'Покажи всичко', + 'never' => 'Никога', + 'no_results_for_empty_search' => 'Вашето търсене беше празно и нищо не беше намерено.', + 'removed_amount' => 'Изтрито :amount', + 'added_amount' => 'Добавено :amount', + 'asset_account_role_help' => 'Всички допълнителни опции, получени от вашия избор, могат да бъдат зададени по-късно.', + 'Opening balance' => 'Начално салдо', + 'create_new_stuff' => 'Създайте нови неща', + 'new_withdrawal' => 'Ново теглене', + 'create_new_transaction' => 'Създай нова трансакция', + 'sidebar_frontpage_create' => 'Създай', + 'new_transaction' => 'Нова транзакция', + 'no_rules_for_bill' => 'С тази сметка няма свързани правила.', + 'go_to_asset_accounts' => 'Вижте активите си', + 'go_to_budgets' => 'Вижте бюджетите си', + 'go_to_withdrawals' => 'Вижте тегленията си', + 'clones_journal_x' => 'Тази транзакция е копирана от ":description" (#:id)', + 'go_to_categories' => 'Виж категориите си', + 'go_to_bills' => 'Виж сметките си', + 'go_to_expense_accounts' => 'Виж разходните си сметки', + 'go_to_revenue_accounts' => 'Виж приходните си сметки', + 'go_to_piggies' => 'Виж касичките си', + 'new_deposit' => 'Нов депозит', + 'new_transfer' => 'Ново прехвърляне', + 'new_transfers' => 'Ново прехвърляне', + 'new_asset_account' => 'Нова сметка за активи', + 'new_expense_account' => 'Нова сметка за разходи', + 'new_revenue_account' => 'Нова сметка за приходи', + 'new_liabilities_account' => 'Ново задължение', + 'new_budget' => 'Нов бюджет', + 'new_bill' => 'Нова сметка', + 'block_account_logout' => 'Излезли сте от системата. Блокираните акаунти не могат да използват този сайт. Регистрирахте ли се с валиден имейл адрес?', + 'flash_success' => 'Успех!', + 'flash_info' => 'Съобщение', + 'flash_warning' => 'Внимание!', + 'flash_error' => 'Грешка!', + 'flash_danger' => 'Опасност!', + 'flash_info_multiple' => 'Има ново съобщение| Има :count нови съобщения', + 'flash_error_multiple' => 'Има нова грешка| Има :count нови грешки', + 'net_worth' => 'Нетна стойност', + 'help_for_this_page' => 'Помощ за тази страница', + 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', + 'two_factor_welcome' => 'Здравейте!', + 'two_factor_enter_code' => 'За да продължите, моля въведете вашия двуфакторен код за удостоверяване. Вашето приложение може да го генерира за вас.', + 'two_factor_code_here' => 'Въведете кода тук', + 'two_factor_title' => 'Двуфакторно удостоверяване', + 'authenticate' => 'Удостоверяване', + 'two_factor_forgot_title' => 'Загубена двуфакторната идентификация', + 'two_factor_forgot' => 'Забравих своето двуфакторно нещо.', + 'two_factor_lost_header' => 'Загубихте вашата двуфакторната идентификация?', + 'two_factor_lost_intro' => 'Ако сте загубили и резервните си кодове, имате лош късмет. Това не е нещо, което можете да поправите от уеб интерфейса. Имате два варианта.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner и ги помолете да нулират вашето двуфакторно удостоверяване.', + 'mfa_backup_code' => 'Използвали сте резервен код, за да влезете в Firefly III. Не може да се използва отново, затова го зачеркнете от списъка си.', + 'pref_two_factor_new_backup_codes' => 'Вземете нови резервни кодове', + 'pref_two_factor_backup_code_count' => 'Имате :count валиден резервен код.|Имате :count валидни резервни кодове.', + '2fa_i_have_them' => 'Съхраних ги!', + 'warning_much_data' => ':days дни с данни може да отнеме известно време.', + 'registered' => 'Регистрирахте се успешно!', + 'Default asset account' => 'Сметка за активи по подразбиране', + 'no_budget_pointer' => 'Изглежда все още нямате бюджети. Трябва да създадете някои на страницата Бюджети . Бюджетите могат да ви помогнат да следите разходите си.', + 'no_bill_pointer' => 'Изглежда все още нямате сметки. Трябва да създадете някои на страницата Сметки . Сметките могат да ви помогнат да следите разходите си.', + 'Savings account' => 'Спестовна сметка', + 'Credit card' => 'Кредитна карта', + 'source_accounts' => 'Разходна сметка|Разходни сметки', + 'destination_accounts' => 'Приходна сметка|Приходни сметки', + 'user_id_is' => 'Вашето потребителско ID е :user', + 'field_supports_markdown' => 'Това поле поддържа Markdown.', + 'need_more_help' => 'Ако имате нужда от още помощ за използването на Firefly III, моля отворете билет на Github.', + 'reenable_intro_text' => 'Може също да активирате отново въведението.', + 'intro_boxes_after_refresh' => 'Полетата на въведението ще се появят отново, когато опресните страницата.', + 'show_all_no_filter' => 'Покажи всички транзакции без групиране по дата.', + 'expenses_by_category' => 'Разходи по категории', + 'expenses_by_budget' => 'Разходи по бюджети', + 'income_by_category' => 'Приходи по категория', + 'expenses_by_asset_account' => 'Разходи по сметка за активи', + 'expenses_by_expense_account' => 'Разходи по разходна сметка', + 'cannot_redirect_to_account' => 'Firefly III не може да ви пренасочи към правилната страница. Извиняваме се.', + 'sum_of_expenses' => 'Сума на разходите', + 'sum_of_income' => 'Сума на приходите', + 'liabilities' => 'Задължения', + 'spent_in_specific_budget' => 'Похарчено в бюджет ":budget"', + 'spent_in_specific_double' => 'Похарчено от сметка ":account"', + 'earned_in_specific_double' => 'Получено в сметка ":account"', + 'source_account' => 'Разходна сметка', + 'source_account_reconciliation' => 'Не може да редактирате разходната сметка на транзакция за съгласуване.', + 'destination_account' => 'Приходна сметка', + 'destination_account_reconciliation' => 'Не може да редактирате приходната сметка на транзакция за съгласуване.', + 'sum_of_expenses_in_budget' => 'Общо похарчено в бюджет ":budget"', + 'left_in_budget_limit' => 'Остави да харчи според бюджета', + 'current_period' => 'Текущ период', + 'show_the_current_period_and_overview' => 'Покажи текущия период и обобщение', + 'pref_languages_locale' => 'За да работи език, различен от английския, вашата операционна система трябва да е снабдена с правилната локална информация. Ако няма такава, валутните данни, дати и суми могат да бъдат форматирани погрешно.', + 'budget_in_period' => 'Всички транзакции за бюджет ":name" между :start и :end в :currency', + 'chart_budget_in_period' => 'Графика на всички транзакции за бюджет ":name" между :start и :end в :currency', + 'chart_budget_in_period_only_currency' => 'Сумата, която бюджетирахте беше в :currency, така че тази графика ще показва само транзакции в :currency.', + 'chart_account_in_period' => 'Графика на всички транзакции за сметка ":name" (:balance) между :start и :end', + 'chart_category_in_period' => 'Графика на всички транзакции за категория ":name" между :start и :end', + 'chart_category_all' => 'Графика на всички транзакции за категория ":name"', + 'clone_withdrawal' => 'Копирай това теглене', + 'clone_deposit' => 'Копирай този депозит', + 'clone_transfer' => 'Копирай този трансфер', + 'multi_select_no_selection' => 'Нищо не е избрано', + 'multi_select_select_all' => 'Избери всички', + 'multi_select_n_selected' => 'избрани', + 'multi_select_all_selected' => 'Всички избрани', + 'multi_select_filter_placeholder' => 'Търси..', + 'intro_next_label' => 'Следващ', + 'intro_prev_label' => 'Предишен', + 'intro_skip_label' => 'Пропусни', + 'intro_done_label' => 'Готово', + 'between_dates_breadcrumb' => 'Между :start и :end', + 'all_journals_without_budget' => 'Всички транзакции без бюджет', + 'journals_without_budget' => 'Транзакции без бюджет', + 'all_journals_without_category' => 'Всички транзакции без категория', + 'journals_without_category' => 'Транзакции без категория', + 'all_journals_for_account' => 'Всички транзакции за сметка :name', + 'chart_all_journals_for_account' => 'Графика на всички транзакции за сметка :name', + 'journals_in_period_for_account' => 'Всички транзакции за сметка :name между :start и :end', + 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', + 'transferred' => 'Прехвърлени', + 'all_withdrawal' => 'Всички разходи', + 'all_transactions' => 'Всички транзакции', + 'title_withdrawal_between' => 'Всички разходи между :start и :end', + 'all_deposit' => 'Всички приходи', + 'title_deposit_between' => 'Всички приходи между :start и :end', + 'all_transfers' => 'Всички трансфери', + 'title_transfers_between' => 'Всички трансфери между :start и :end', + 'all_transfer' => 'Всички трансфери', + 'all_journals_for_tag' => 'Всички транзакции за етикет ":tag"', + 'title_transfer_between' => 'Всички трансфери между :start и :end', + 'all_journals_for_category' => 'Всички транзакции за категория :name', + 'all_journals_for_budget' => 'Всички транзакции за бюджет :name', + 'chart_all_journals_for_budget' => 'Графика на всички транзакции за бюджет :name', + 'journals_in_period_for_category' => 'Всички транзакции за категория :name между :start и :end', + 'journals_in_period_for_tag' => 'Всички транзакции за етикет :tag между :start и :end', + 'not_available_demo_user' => 'Функцията, до която се опитвате да получите достъп, не е достъпна за демо потребители.', + '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' => 'Грешна конфигурация на сървъра', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Бърз ключ', + 'sign_in_to_start' => 'Влезте, за да започнете сесията си', + 'sign_in' => 'Вход', + 'register_new_account' => 'Регистриране на нов профил', + 'forgot_my_password' => 'Забравена парола', + 'problems_with_input' => 'Имаше някои проблеми с вашите данни.', + 'reset_password' => 'Промяна на паролата ви', + 'button_reset_password' => 'Нулиране на паролата', + 'reset_button' => 'Изчисти', + 'want_to_login' => 'Искам да вляза', + 'login_page_title' => 'Влезте в Firefly III', + 'register_page_title' => 'Регистрирайте се в Firefly III', + 'forgot_pw_page_title' => 'Забравихте паролата си за Firefly III', + 'reset_pw_page_title' => 'Нулирайте паролата си за Firefly III', + 'cannot_reset_demo_user' => 'Не можете да нулирате паролата на демо потребителя.', + 'no_att_demo_user' => 'Демо потребителят не може да прикачва документи.', + 'button_register' => 'Регистриране', + 'authorization' => 'Позволение', + 'active_bills_only' => 'само активни сметки', + 'active_bills_only_total' => 'всички активни сметки', + 'active_exp_bills_only' => 'активни и очаквани сметки', + 'active_exp_bills_only_total' => 'всички активни и очаквани сметки', + 'per_period_sum_1D' => 'Очаквани дневни разходи', + 'per_period_sum_1W' => 'Очаквани седмични разходи', + 'per_period_sum_1M' => 'Очаквани месечни разходи', + 'per_period_sum_3M' => 'Очаквани тримесечни разходи', + 'per_period_sum_6M' => 'Очаквани разходи за полугодие', + 'per_period_sum_1Y' => 'Очаквани годишни разходи', + 'average_per_bill' => 'средно за сметка', + 'expected_total' => 'общо очаквано', + 'reconciliation_account_name' => ':name съгласуване (:currency)', + 'saved' => 'Записан', + 'advanced_options' => 'Разширени настройки', + 'advanced_options_explain' => 'Някои страници в Firefly III имат разширени опции, скрити зад този бутон. Тази страница няма нищо интересно тук, но проверете останалите!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', + 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', + 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', + 'webhook_response_TRANSACTIONS' => 'Transaction details', + 'webhook_response_ACCOUNTS' => 'Account details', + 'webhook_response_none_NONE' => 'No details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspect', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => 'View message', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logs', + 'response' => 'Response', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Firefly III v:version заявка за потвърждение', - 'authorization_request_intro' => 'Апликацията ":client" иска разрешение за достъп до вашето финансово управление. Искате ли да упълномощите :client за достъп до тези записи?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', - 'scopes_will_be_able' => 'Това приложение ще има право да:', - 'button_authorize' => 'Разреши', - 'none_in_select_list' => '(нищо)', - 'no_piggy_bank' => '(без касичка)', - 'name_in_currency' => ':name в :currency', - 'paid_in_currency' => 'Платено в :currency', - 'unpaid_in_currency' => 'Неплатено в :currency', - 'is_alpha_warning' => 'Изпълнявате ALPHA версия. Внимавайте за грешки и проблеми.', - 'is_beta_warning' => 'Изпълнявате BETA версия. Внимавайте за грешки и проблеми.', - 'all_destination_accounts' => 'Приходни сметки', - 'all_source_accounts' => 'Разходни сметки', - 'back_to_index' => 'Обратно към списъка', - 'cant_logout_guard' => 'Firefly III не може да ви отпише.', - 'internal_reference' => 'Вътрешна референция', + 'authorization_request' => 'Firefly III v:version заявка за потвърждение', + 'authorization_request_intro' => 'Апликацията ":client" иска разрешение за достъп до вашето финансово управление. Искате ли да упълномощите :client за достъп до тези записи?', + 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', + 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', + 'scopes_will_be_able' => 'Това приложение ще има право да:', + 'button_authorize' => 'Разреши', + 'none_in_select_list' => '(нищо)', + 'no_piggy_bank' => '(без касичка)', + 'name_in_currency' => ':name в :currency', + 'paid_in_currency' => 'Платено в :currency', + 'unpaid_in_currency' => 'Неплатено в :currency', + 'is_alpha_warning' => 'Изпълнявате ALPHA версия. Внимавайте за грешки и проблеми.', + 'is_beta_warning' => 'Изпълнявате BETA версия. Внимавайте за грешки и проблеми.', + 'all_destination_accounts' => 'Приходни сметки', + 'all_source_accounts' => 'Разходни сметки', + 'back_to_index' => 'Обратно към списъка', + 'cant_logout_guard' => 'Firefly III не може да ви отпише.', + 'internal_reference' => 'Вътрешна референция', // check for updates: - 'update_check_title' => 'Проверка за обновления', - 'admin_update_check_title' => 'Автоматично проверявай за обновяване', - 'admin_update_check_explain' => 'Firefly III може да проверява за актуализации автоматично. Когато активирате тази настройка, тя ще се свърже със сървъра за актуализиране на Firefly III, за да провери дали е налична нова версия на Firefly III. Когато е налична, ще получите известие. Можете да тествате това известие с помощта на бутона вдясно. Моля, посочете по-долу, ако искате Firefly III да провери за актуализации.', - 'check_for_updates_permission' => 'Firefly III може да проверява за актуализации, но се нуждае от вашето разрешение за това. Моля, отидете на администриране , за да посочите дали искате тази функция да бъде активирана.', - 'updates_ask_me_later' => 'Попитай ме по-късно', - 'updates_do_not_check' => 'Не проверявай за обновления', - 'updates_enable_check' => 'Активирай проверката за обновления', - 'admin_update_check_now_title' => 'Провери за обновления сега', - 'admin_update_check_now_explain' => 'Ако натиснете бутона, Firefly III ще провери дали текущата ви версия е най-новата.', - 'check_for_updates_button' => 'Провери сега!', - 'update_new_version_alert' => 'Налична е нова версия на Firefly III. Вие изпълнявате :your_version, последната версия е :new_version, която беше пусната на :date.', - 'update_version_beta' => 'Това е BETA версия. Може да се натъкнете на проблеми.', - 'update_version_alpha' => 'Това е ALPHA версия. Може да се натъкнете на проблеми.', - 'update_current_version_alert' => 'Изпълнявате :version, която е най-новата налична версия.', - 'update_newer_version_alert' => 'Изпълнявате: :your_version, която е по-нова от последната налична версия: :new_version.', - 'update_check_error' => 'Възникна грешка при проверка за актуализации: :error', - 'unknown_error' => 'Неизвестна грешка. Съжаляваме за това.', - 'just_new_release' => 'Има нова версия! Версия :version беше пусната на :date. Това издание е много свежо. Изчакайте няколко дни, за да се стабилизира новото издание.', - 'disabled_but_check' => 'Деактивирахте проверката за обновления. Затова не забравяйте периодично да проверявате ръчно за актуализации. Благодарим Ви!', - 'admin_update_channel_title' => 'Канал за обновления', - 'admin_update_channel_explain' => 'Firefly III има три "канала" за обновления, които определят искате да доближите кривата на функции, подобрения и грешки. Използвайте "beta" канала, ако сте авантюристични и "alpha", когато обичате да живеете опасно живота.', - 'update_channel_stable' => 'Стабилна. Всичко трябва да работи както се очаква.', - 'update_channel_beta' => 'Beta. Нови функции, но някои нещата могат да бъдат "счупени".', - 'update_channel_alpha' => 'Alpha. Нахвърляме неща тук и използваме каквито "прилепне".', + 'update_check_title' => 'Проверка за обновления', + 'admin_update_check_title' => 'Автоматично проверявай за обновяване', + 'admin_update_check_explain' => 'Firefly III може да проверява за актуализации автоматично. Когато активирате тази настройка, тя ще се свърже със сървъра за актуализиране на Firefly III, за да провери дали е налична нова версия на Firefly III. Когато е налична, ще получите известие. Можете да тествате това известие с помощта на бутона вдясно. Моля, посочете по-долу, ако искате Firefly III да провери за актуализации.', + 'check_for_updates_permission' => 'Firefly III може да проверява за актуализации, но се нуждае от вашето разрешение за това. Моля, отидете на администриране , за да посочите дали искате тази функция да бъде активирана.', + 'updates_ask_me_later' => 'Попитай ме по-късно', + 'updates_do_not_check' => 'Не проверявай за обновления', + 'updates_enable_check' => 'Активирай проверката за обновления', + 'admin_update_check_now_title' => 'Провери за обновления сега', + 'admin_update_check_now_explain' => 'Ако натиснете бутона, Firefly III ще провери дали текущата ви версия е най-новата.', + 'check_for_updates_button' => 'Провери сега!', + 'update_new_version_alert' => 'Налична е нова версия на Firefly III. Вие изпълнявате :your_version, последната версия е :new_version, която беше пусната на :date.', + 'update_version_beta' => 'Това е BETA версия. Може да се натъкнете на проблеми.', + 'update_version_alpha' => 'Това е ALPHA версия. Може да се натъкнете на проблеми.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Изпълнявате :version, която е най-новата налична версия.', + 'update_newer_version_alert' => 'Изпълнявате: :your_version, която е по-нова от последната налична версия: :new_version.', + 'update_check_error' => 'Възникна грешка при проверка за актуализации: :error', + 'unknown_error' => 'Неизвестна грешка. Съжаляваме за това.', + 'disabled_but_check' => 'Деактивирахте проверката за обновления. Затова не забравяйте периодично да проверявате ръчно за актуализации. Благодарим Ви!', + 'admin_update_channel_title' => 'Канал за обновления', + 'admin_update_channel_explain' => 'Firefly III има три "канала" за обновления, които определят искате да доближите кривата на функции, подобрения и грешки. Използвайте "beta" канала, ако сте авантюристични и "alpha", когато обичате да живеете опасно живота.', + 'update_channel_stable' => 'Стабилна. Всичко трябва да работи както се очаква.', + 'update_channel_beta' => 'Beta. Нови функции, но някои нещата могат да бъдат "счупени".', + 'update_channel_alpha' => 'Alpha. Нахвърляме неща тук и използваме каквито "прилепне".', // search - 'search' => 'Търсене', - 'search_query' => 'Заявка', - 'search_found_transactions' => 'Firefly III намери :count транзакция за :time секунди.|Firefly III намери :count транзакции за :time секунди.', - 'search_found_more_transactions' => 'Firefly III намери повече от :count транзакции за :time секунди.', - 'search_for_query' => 'Firefly III търси за транзакции с всички от следните думи в тях::query', - 'invalid_operators_list' => 'Дадените параметрите за търсене не са валидни и ще бъдат пренебрегнати.', + 'search' => 'Търсене', + 'search_query' => 'Заявка', + 'search_found_transactions' => 'Firefly III намери :count транзакция за :time секунди.|Firefly III намери :count транзакции за :time секунди.', + 'search_found_more_transactions' => 'Firefly III намери повече от :count транзакции за :time секунди.', + 'search_for_query' => 'Firefly III търси за транзакции с всички от следните думи в тях::query', + 'invalid_operators_list' => 'Дадените параметрите за търсене не са валидни и ще бъдат пренебрегнати.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaction date is ":value"', 'search_modifier_not_date_on' => 'Transaction date is not ":value"', 'search_modifier_reconciled' => 'Transaction is reconciled', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Видът на транзакцията е ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Етикетът е ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Транзацията е през ":value" месец или след него', 'search_modifier_date_after_day' => 'Транзацията е на ":value" число от месеца или след него', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => 'Създай ново правило от низа за търсене', 'rule_from_search_words' => 'Механизмът за правила има затруднения с обработката на ":string". Предложеното правило, което отговаря на низа ви за търсене, може да даде различни резултати. Моля проверете внимателно задействанията на правилото.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'И следните модификатори се прилагат към търсенето:', 'general_search_error' => 'При търсенето възникна грешка. Моля, проверете лог файловете за повече информация.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'Не можете да изпълнявате неактивни правила.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Правила', 'rule_name' => 'Име на правилото', 'rule_triggers' => 'Правилото се задейства, когато', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Когато се обновява транзакция', 'rule_trigger_user_action' => 'Действието на потребителя е „:trigger_value“', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Името на разходната сметка започва с..', 'rule_trigger_source_account_starts' => 'Името на разходната сметка започва с ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Бюджетът е ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Валутата на транзакцията е..', 'rule_trigger_currency_is' => 'Валутата на транзакцията е ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Чуждата валута на транзакцията е..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Група правила за сметки', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Правило за сметка ":name"', 'new_rule_for_bill_description' => 'Това правило маркира транзакции за сметка ":name".', - 'new_rule_for_journal_title' => 'Правило базирано на транзакция ":description"', - 'new_rule_for_journal_description' => 'Това правило е базирано на транзакция ":description". То ще открива транзакции, които са идентични.', + 'new_rule_for_journal_title' => 'Правило базирано на транзакция ":description"', + 'new_rule_for_journal_description' => 'Това правило е базирано на транзакция ":description". То ще открива транзакции, които са идентични.', // tags - 'store_new_tag' => 'Запаметете нов етикет', - 'update_tag' => 'Обновяване на етикет', - 'no_location_set' => 'Не е зададено местоположение.', - 'meta_data' => 'Мета данни', - 'location' => 'Местоположение', - 'without_date' => 'Без дата', - 'result' => 'Резултат', - 'sums_apply_to_range' => 'Всички суми се отнасят към избрания диапазон', - 'mapbox_api_key' => 'За да използвате карта, вземете API ключ от Mapbox . Отворете вашия .env файл и въведете този код след MAPBOX_API_KEY = .', - 'press_object_location' => 'Щракнете с десния бутон или натиснете дълго, за да зададете местоположението на обекта.', - 'clear_location' => 'Изчисти местоположението', - 'delete_all_selected_tags' => 'Изтрий всички избрани етикети', - 'select_tags_to_delete' => 'Не забравяйте да изберете някои етикети.', - 'deleted_x_tags' => 'Изтрит :count етикет.|Изтрити :count етикети.', - 'create_rule_from_transaction' => 'Създайте правило въз основа на транзакцията', - 'create_recurring_from_transaction' => 'Създай повтаряща се транзакция базирана на транзакция', - + 'store_new_tag' => 'Запаметете нов етикет', + 'update_tag' => 'Обновяване на етикет', + 'no_location_set' => 'Не е зададено местоположение.', + 'meta_data' => 'Мета данни', + 'location' => 'Местоположение', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Без дата', + 'result' => 'Резултат', + 'sums_apply_to_range' => 'Всички суми се отнасят към избрания диапазон', + 'mapbox_api_key' => 'За да използвате карта, вземете API ключ от Mapbox . Отворете вашия .env файл и въведете този код след MAPBOX_API_KEY = .', + 'press_object_location' => 'Щракнете с десния бутон или натиснете дълго, за да зададете местоположението на обекта.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Изчисти местоположението', + 'delete_all_selected_tags' => 'Изтрий всички избрани етикети', + 'select_tags_to_delete' => 'Не забравяйте да изберете някои етикети.', + 'deleted_x_tags' => 'Изтрит :count етикет.|Изтрити :count етикети.', + 'create_rule_from_transaction' => 'Създайте правило въз основа на транзакцията', + 'create_recurring_from_transaction' => 'Създай повтаряща се транзакция базирана на транзакция', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(равно на език)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Сметки на началния екран', - 'pref_home_screen_accounts_help' => 'Кои сметки трябва да се виждат на началната страница?', - 'pref_view_range' => 'Виж диапазон', - 'pref_view_range_help' => 'Някои графики се групират автоматично по периоди. Вашите бюджети също ще бъдат групирани по периоди. Какъв период бихте предпочели?', - 'pref_1D' => 'Един ден', - 'pref_1W' => 'Една седмица', - 'pref_1M' => 'Един месец', - 'pref_3M' => 'Три месеца (тримесечие)', - 'pref_6M' => 'Шест месеца', - 'pref_1Y' => 'Една година', - 'pref_last365' => 'Last year', - 'pref_last90' => 'Last 90 days', - 'pref_last30' => 'Last 30 days', - 'pref_last7' => 'Last 7 days', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Езици', - 'pref_locale' => 'Локални настройки', - 'pref_languages_help' => 'Firefly III поддържа няколко езика. Кой предпочиташ?', - 'pref_locale_help' => 'Firefly III ви позволява да задавате други локални настройки, например как се форматират валути, числа и дати. Записите в този списък може да не се поддържат от вашата система. Firefly III няма правилните настройки за дата за всеки локал; свържете се с мен за подобрения.', - 'pref_locale_no_demo' => 'Тази функция няма да работи за демо потребителя.', - 'pref_custom_fiscal_year' => 'Настройки за фискалната година', - 'pref_custom_fiscal_year_label' => 'Включено', - 'pref_custom_fiscal_year_help' => 'В страни, които използват финансова година различна от 1 януари до 31 декември, можете да го включите и да определите началните / крайните дати на фискалната година', - 'pref_fiscal_year_start_label' => 'Начална дата на фискалната година', - 'pref_two_factor_auth' => 'Удостоверяване в две стъпки', - 'pref_two_factor_auth_help' => 'Когато активирате потвърждаване в две стъпки (известно също като двуфакторно удостоверяване), добавяте допълнителен слой сигурност към вашия акаунт. Влизате с нещо, което знаете (вашата парола) и нещо, което имате (код за потвърждение). Кодовете за потвърждение се генерират от приложение на вашия телефон, например Authy или Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Включи удостоверяване в две стъпки', - 'pref_two_factor_auth_disabled' => 'Кодът за удостоверяване в две стъпки е премахнат и деактивиран', - 'pref_two_factor_auth_remove_it' => 'Не забравяйте да премахнете профила от приложението си за удостоверяване!', - 'pref_two_factor_auth_code' => 'Код за потвърждение', - 'pref_two_factor_auth_code_help' => 'Сканирайте QR кода с приложение на телефона си като Authy или Google Authenticator и въведете генерирания код.', - 'pref_two_factor_auth_reset_code' => 'Нулирайте кода за потвърждение', - 'pref_two_factor_auth_disable_2fa' => 'Изключване на 2FA', - '2fa_use_secret_instead' => 'Ако не можете да сканирате QR кода, не се колебайте да използвате вместо това тайната::secret .', - '2fa_backup_codes' => 'Съхранявайте тези резервни кодове за достъп в случай, че загубите устройството си.', - '2fa_already_enabled' => 'Удостоверяването в две стъпки е вече включено.', - 'wrong_mfa_code' => 'Този MFA код е невалиден.', - 'pref_save_settings' => 'Запис на настройките', - 'saved_preferences' => 'Настройките са запазени!', - 'preferences_general' => 'Основни', - 'preferences_frontpage' => 'Начален екран', - 'preferences_security' => 'Сигурност', - 'preferences_layout' => 'Оформление', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Покажи депозитите на началния екран', - 'pref_home_show_deposits_info' => 'Началният екран вече показва вашите сметки за разходи. Трябва ли да показва и вашите сметки за приходи?', - 'pref_home_do_show_deposits' => 'Да, покажете ги', - 'successful_count' => 'от които :count успешни', - 'list_page_size_title' => 'Размер на страницата', - 'list_page_size_help' => 'Всеки списък от неща (сметки, транзакции и т.н.) показва най-много толкова на страница.', - 'list_page_size_label' => 'Размер на страницата', - 'between_dates' => '(:start и :end)', - 'pref_optional_fields_transaction' => 'Незадължителни полета за транзакции', - 'pref_optional_fields_transaction_help' => 'По подразбиране не всички полета са активирани при създаване на нова транзакция (поради претрупването). По-долу можете да активирате тези полета, ако смятате че биха могли да бъдат полезни за вас. Разбира се, всяко поле, което е деактивирано но вече попълнено, ще бъде видимо независимо от настройката.', - 'optional_tj_date_fields' => 'Полета за дати', - 'optional_tj_other_fields' => 'Other fields', - 'optional_tj_attachment_fields' => 'Полета за прикачени файлове', - 'pref_optional_tj_interest_date' => 'Полета за лихви', - 'pref_optional_tj_book_date' => 'Дата на осчетоводяване', - 'pref_optional_tj_process_date' => 'Дата на обработка', - 'pref_optional_tj_due_date' => 'Дата на падеж', - 'pref_optional_tj_payment_date' => 'Дата на плащане', - 'pref_optional_tj_invoice_date' => 'Дата на фактура', - 'pref_optional_tj_internal_reference' => 'Вътрешна референция', - 'pref_optional_tj_notes' => 'Бележки', - 'pref_optional_tj_attachments' => 'Прикачени файлове', - 'pref_optional_tj_external_url' => 'External URL', - 'pref_optional_tj_location' => 'Location', - 'pref_optional_tj_links' => 'Transaction links', - 'optional_field_meta_dates' => 'Дати', - 'optional_field_meta_business' => 'Бизнес', - 'optional_field_attachments' => 'Прикачени файлове', - 'optional_field_meta_data' => 'Незадължителни мета данни', - 'external_url' => 'Външен URL адрес', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(равно на език)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Сметки на началния екран', + 'pref_home_screen_accounts_help' => 'Кои сметки трябва да се виждат на началната страница?', + 'pref_view_range' => 'Виж диапазон', + 'pref_view_range_help' => 'Някои графики се групират автоматично по периоди. Вашите бюджети също ще бъдат групирани по периоди. Какъв период бихте предпочели?', + 'pref_1D' => 'Един ден', + 'pref_1W' => 'Една седмица', + 'pref_1M' => 'Един месец', + 'pref_3M' => 'Три месеца (тримесечие)', + 'pref_6M' => 'Шест месеца', + 'pref_1Y' => 'Една година', + 'pref_last365' => 'Last year', + 'pref_last90' => 'Last 90 days', + 'pref_last30' => 'Last 30 days', + 'pref_last7' => 'Last 7 days', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => 'Езици', + 'pref_locale' => 'Локални настройки', + 'pref_languages_help' => 'Firefly III поддържа няколко езика. Кой предпочиташ?', + 'pref_locale_help' => 'Firefly III ви позволява да задавате други локални настройки, например как се форматират валути, числа и дати. Записите в този списък може да не се поддържат от вашата система. Firefly III няма правилните настройки за дата за всеки локал; свържете се с мен за подобрения.', + 'pref_locale_no_demo' => 'Тази функция няма да работи за демо потребителя.', + 'pref_custom_fiscal_year' => 'Настройки за фискалната година', + 'pref_custom_fiscal_year_label' => 'Включено', + 'pref_custom_fiscal_year_help' => 'В страни, които използват финансова година различна от 1 януари до 31 декември, можете да го включите и да определите началните / крайните дати на фискалната година', + 'pref_fiscal_year_start_label' => 'Начална дата на фискалната година', + 'pref_two_factor_auth' => 'Удостоверяване в две стъпки', + 'pref_two_factor_auth_help' => 'Когато активирате потвърждаване в две стъпки (известно също като двуфакторно удостоверяване), добавяте допълнителен слой сигурност към вашия акаунт. Влизате с нещо, което знаете (вашата парола) и нещо, което имате (код за потвърждение). Кодовете за потвърждение се генерират от приложение на вашия телефон, например Authy или Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Включи удостоверяване в две стъпки', + 'pref_two_factor_auth_disabled' => 'Кодът за удостоверяване в две стъпки е премахнат и деактивиран', + 'pref_two_factor_auth_remove_it' => 'Не забравяйте да премахнете профила от приложението си за удостоверяване!', + 'pref_two_factor_auth_code' => 'Код за потвърждение', + 'pref_two_factor_auth_code_help' => 'Сканирайте QR кода с приложение на телефона си като Authy или Google Authenticator и въведете генерирания код.', + 'pref_two_factor_auth_reset_code' => 'Нулирайте кода за потвърждение', + 'pref_two_factor_auth_disable_2fa' => 'Изключване на 2FA', + '2fa_use_secret_instead' => 'Ако не можете да сканирате QR кода, не се колебайте да използвате вместо това тайната::secret .', + '2fa_backup_codes' => 'Съхранявайте тези резервни кодове за достъп в случай, че загубите устройството си.', + '2fa_already_enabled' => 'Удостоверяването в две стъпки е вече включено.', + 'wrong_mfa_code' => 'Този MFA код е невалиден.', + 'pref_save_settings' => 'Запис на настройките', + 'saved_preferences' => 'Настройките са запазени!', + 'preferences_general' => 'Основни', + 'preferences_frontpage' => 'Начален екран', + 'preferences_security' => 'Сигурност', + 'preferences_layout' => 'Оформление', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Покажи депозитите на началния екран', + 'pref_home_show_deposits_info' => 'Началният екран вече показва вашите сметки за разходи. Трябва ли да показва и вашите сметки за приходи?', + 'pref_home_do_show_deposits' => 'Да, покажете ги', + 'successful_count' => 'от които :count успешни', + 'list_page_size_title' => 'Размер на страницата', + 'list_page_size_help' => 'Всеки списък от неща (сметки, транзакции и т.н.) показва най-много толкова на страница.', + 'list_page_size_label' => 'Размер на страницата', + 'between_dates' => '(:start и :end)', + 'pref_optional_fields_transaction' => 'Незадължителни полета за транзакции', + 'pref_optional_fields_transaction_help' => 'По подразбиране не всички полета са активирани при създаване на нова транзакция (поради претрупването). По-долу можете да активирате тези полета, ако смятате че биха могли да бъдат полезни за вас. Разбира се, всяко поле, което е деактивирано но вече попълнено, ще бъде видимо независимо от настройката.', + 'optional_tj_date_fields' => 'Полета за дати', + 'optional_tj_other_fields' => 'Other fields', + 'optional_tj_attachment_fields' => 'Полета за прикачени файлове', + 'pref_optional_tj_interest_date' => 'Полета за лихви', + 'pref_optional_tj_book_date' => 'Дата на осчетоводяване', + 'pref_optional_tj_process_date' => 'Дата на обработка', + 'pref_optional_tj_due_date' => 'Дата на падеж', + 'pref_optional_tj_payment_date' => 'Дата на плащане', + 'pref_optional_tj_invoice_date' => 'Дата на фактура', + 'pref_optional_tj_internal_reference' => 'Вътрешна референция', + 'pref_optional_tj_notes' => 'Бележки', + 'pref_optional_tj_attachments' => 'Прикачени файлове', + 'pref_optional_tj_external_url' => 'External URL', + 'pref_optional_tj_location' => 'Location', + 'pref_optional_tj_links' => 'Transaction links', + 'optional_field_meta_dates' => 'Дати', + 'optional_field_meta_business' => 'Бизнес', + 'optional_field_attachments' => 'Прикачени файлове', + 'optional_field_meta_data' => 'Незадължителни мета данни', + 'external_url' => 'Външен URL адрес', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'Всички други ваши сесии бяха затворени.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Изтрийте ВСИЧКИ ваши бюджети', - 'delete_all_categories' => 'Изтрийте ВСИЧКИ ваши категории', - 'delete_all_tags' => 'Изтрийте ВСИЧКИ ваши етикети', - 'delete_all_bills' => 'Изтрийте ВСИЧКИ ваши сметки', - 'delete_all_piggy_banks' => 'Изтрийте ВСИЧКИ ваши касички', - 'delete_all_rules' => 'Изтрийте ВСИЧКИ ваши правила', - 'delete_all_recurring' => 'Изтрийте ВСИЧКИ ваши повтарящи се транзакции', - 'delete_all_object_groups' => 'Изтрийте ВСИЧКИ ваши групи обекти', - 'delete_all_accounts' => 'Изтрийте ВСИЧКИ ваши сметки', - 'delete_all_asset_accounts' => 'Изтрийте ВСИЧКИ ваши сметки за активи', - 'delete_all_expense_accounts' => 'Изтрийте ВСИЧКИ ваши сметки за разходи', - 'delete_all_revenue_accounts' => 'Изтрийте ВСИЧКИ ваши сметки за приходи', - 'delete_all_liabilities' => 'Изтрийте ВСИЧКИ ваши задължения', - 'delete_all_transactions' => 'Изтрийте ВСИЧКИ ваши транзакции', - 'delete_all_withdrawals' => 'Изтрийте ВСИЧКИ ваши тегления', - 'delete_all_deposits' => 'Изтрийте ВСИЧКИ ваши депозити', - 'delete_all_transfers' => 'Изтрийте ВСИЧКИ ваши прехвърляния', - 'also_delete_transactions' => 'Изтриването на сметки ще изтрие също така и ВСИЧКИ свързани тегления, депозити и прехвърляния!', - 'deleted_all_budgets' => 'Всички бюджети бяха изтрити', - 'deleted_all_categories' => 'Всички категории бяха изтрити', - 'deleted_all_tags' => 'Всички етикети бяха изтрити', - 'deleted_all_bills' => 'Всички сметки бяха изтрити', - 'deleted_all_piggy_banks' => 'Всички касички бяха изтрити', - 'deleted_all_rules' => 'Всички правила и групи правила бяха изтрити', - 'deleted_all_object_groups' => 'Всички групи бяха изтрити', - 'deleted_all_accounts' => 'Всички сметки бяха изтрити', - 'deleted_all_asset_accounts' => 'Всички сметки за активи бяха изтрити', - 'deleted_all_expense_accounts' => 'Всички сметки за разходи бяха изтрити', - 'deleted_all_revenue_accounts' => 'Всички сметки за приходи бяха изтрити', - 'deleted_all_liabilities' => 'Всички задължения бяха изтрити', - 'deleted_all_transactions' => 'Всички транзакции бяха изтрити', - 'deleted_all_withdrawals' => 'Всички тегления бяха изтрити', - 'deleted_all_deposits' => 'Всички депозити бяха изтрити', - 'deleted_all_transfers' => 'Всички прехвърляния бяха изтрити', - 'deleted_all_recurring' => 'Всички повтарящи се транзакции бяха изтрити', - 'change_your_password' => 'Смяна на парола', - 'delete_account' => 'Изтриване на профил', - 'current_password' => 'Текуща парола', - 'new_password' => 'Нова парола', - 'new_password_again' => 'Нова парола (повтори)', - 'delete_your_account' => 'Изтриване на вашият профил', - 'delete_your_account_help' => 'Изтриването на профила ви също ще изтрие всички сметки, транзакции, всичко , което може да сте запазили в Firefly III. Ще бъде МИНАЛО.', - 'delete_your_account_password' => 'Въведете паролата си, за да продължите.', - 'password' => 'Парола', - 'are_you_sure' => 'Сигурен ли сте? Не можете да отмените това.', - 'delete_account_button' => 'ИЗТРИВАНЕ на вашият профил', - 'invalid_current_password' => 'Невалидна текуща парола!', - 'password_changed' => 'Паролата е променена!', - 'should_change' => 'Идеята е да СМЕНИТЕ паролата си.', - 'invalid_password' => 'Невалидна парола!', - 'what_is_pw_security' => 'Какво е "проверете сигурността на паролата"?', - 'secure_pw_title' => 'Как да изберем сигурна парола', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => 'Не минава и седмица без да прочетете в новините за сайт, който губи паролите на своите потребители. Хакерите и крадците използват тези пароли, за да се опитат да откраднат вашата лична информация. Тази информация е ценна.', - 'secure_pw_ff' => 'Използвате ли една и съща парола в Интернет? Ако един сайт загуби паролата ви, хакерите имат достъп до всичките ви данни. Firefly III разчита на вас да изберете силна и уникална парола, за да защитите финансовите си записи.', - 'secure_pw_check_box' => 'За да ви помогне да направите това Firefly III може да провери дали паролата, която искате да използвате, е била открадната в миналото. В такъв случай Firefly III ви съветва да НЕ използвате тази парола.', - 'secure_pw_working_title' => 'Как работи това?', - 'secure_pw_working' => 'Като поставите отметка в квадратчето, Firefly III ще изпрати първите пет знака от хеша на SHA1 на вашата парола до уебсайтът на Troy Hunt , за да се види дали е в списъка. Това ще ви попречи да използвате опасни пароли, както се препоръчва в последната Специална публикация на NIST на тази тема.', - 'secure_pw_should' => 'Трябва ли да маркирам квадратчето?', - 'secure_pw_long_password' => 'Да. Винаги проверявайте дали вашата парола е безопасна.', - 'command_line_token' => 'Маркер за командният ред', - 'explain_command_line_token' => 'Този маркер ще ви е необходим, за да изпълнявате опции на командния ред, като например експортиране на данни. Без него тази чувствителна команда няма да работи. Не споделяйте маркера на вашия команден ред. Никой няма да ви поиска този знак, дори аз. Ако се страхувате, че сте загубили този маркер или ако сте параноик, регенерирайте този маркер с помощта на бутона.', - 'regenerate_command_line_token' => 'Регенерирайте маркера на командния ред', - 'token_regenerated' => 'Беше генериран нов маркер за команден ред', - 'change_your_email' => 'Смяна на имейл адрес', - 'email_verification' => 'Ще бъде изпратено имейл съобщение до вашия стар И нов имейл адрес. За целите на сигурността няма да можете да влезете, докато не потвърдите новия си имейл адрес. Ако не сте сигурни дали вашата инсталация Firefly III може да изпраща имейл, моля не използвайте тази функция. Ако сте администратор, можете да тествате това в Администрация .', - 'email_changed_logout' => 'Докато не потвърдите своя имейл адрес, не можете да влезете.', - 'login_with_new_email' => 'Вече можете да влезете с новия си имейл адрес.', - 'login_with_old_email' => 'Вече можете да влезете отново със стария си имейл адрес.', - 'login_provider_local_only' => 'Това действие не е достъпно при удостоверяване чрез ":login_provider".', - 'external_user_mgt_disabled' => 'Това действие не е достъпно, когато Firefly III не е отговорен за управлението на потребителите или обработката на удостоверяването.', - 'external_auth_disabled' => 'Това действие не е достъпно, когато Firefly III не е отговорен обработката на удостоверяването.', - 'delete_local_info_only' => "Тъй като Firefly III не е отговорен за управлението на потребителите или обработката на удостоверяването, тази функция ще изтрие само локална информация на Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth клиенти', - 'profile_oauth_no_clients' => 'Не сте създали клиенти на OAuth.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Клиенти', - 'profile_oauth_client_id' => 'ИД (ID) на клиент', - 'profile_oauth_client_name' => 'Име', - 'profile_oauth_client_secret' => 'Тайна', - 'profile_oauth_create_new_client' => 'Създай нов клиент', - 'profile_oauth_create_client' => 'Създай клиент', - 'profile_oauth_edit_client' => 'Редактирай клиент', - 'profile_oauth_name_help' => 'Нещо, което вашите потребители ще разпознаят и ще се доверят.', - 'profile_oauth_redirect_url' => 'Линк на препратката', - 'profile_oauth_redirect_url_help' => 'URL адрес за обратно извикване на оторизацията на вашето приложение.', - 'profile_authorized_apps' => 'Удостоверени приложения', - 'profile_authorized_clients' => 'Удостоверени клиенти', - 'profile_scopes' => 'Сфери', - 'profile_revoke' => 'Анулирай', - 'profile_oauth_client_secret_title' => 'Тайна на клиента', - 'profile_oauth_client_secret_expl' => 'Това е новата ви "тайна на клиента". Това е единственият път, когато ще бъде показана, така че не го губете! Вече можете да използвате този маркер, за да отправяте заявки към API.', - 'profile_personal_access_tokens' => 'Персонални маркери за достъп', - 'profile_personal_access_token' => 'Персонален маркер за достъп', - 'profile_oauth_confidential' => 'Поверително', - 'profile_oauth_confidential_help' => 'Изисквайте клиента да се удостоверява с тайна. Поверителните клиенти могат да притежават идентификационни данни по защитен начин, без да ги излагат на неоторизирани страни. Публичните приложения, като например десктопа или JavaScript SPA приложения, не могат да пазят тайни по сигурен начин.', - 'profile_personal_access_token_explanation' => 'Това е новия ви персонален маркер за достъп. Това е единственият път, когато ще бъде показан, така че не го губете! Вече можете да използвате този маркер, за да отправяте заявки към API.', - 'profile_no_personal_access_token' => 'Не сте създали никакви лични маркери за достъп.', - 'profile_create_new_token' => 'Създай нов маркер', - 'profile_create_token' => 'Създай маркер', - 'profile_create' => 'Създай', - 'profile_save_changes' => 'Запазване на промените', - 'profile_whoops' => 'Опаааа!', - 'profile_something_wrong' => 'Нещо се обърка!', - 'profile_try_again' => 'Нещо се обърка. Моля, опитайте отново.', - 'amounts' => 'Суми', - 'multi_account_warning_unknown' => 'В зависимост от вида на транзакцията която създавате, източникът и / или целевата сметка на следващите разделяния може да бъде променена от това което е дефинирано в първото разделение на транзакцията.', - 'multi_account_warning_withdrawal' => 'Имайте предвид, че разходна сметка на следващите разделяния ще бъде тази която е дефинирана в първия раздел на тегленето.', - 'multi_account_warning_deposit' => 'Имайте предвид, че приходната сметка на следващите разделяния ще бъде тази която е дефинирана в първия раздел на депозита.', - 'multi_account_warning_transfer' => 'Имайте предвид, че приходната + разходната сметка на следващите разделяния ще бъде тази която е дефинирана в първия раздел на прехвърлянето.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'Всички други ваши сесии бяха затворени.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Изтрийте ВСИЧКИ ваши бюджети', + 'delete_all_categories' => 'Изтрийте ВСИЧКИ ваши категории', + 'delete_all_tags' => 'Изтрийте ВСИЧКИ ваши етикети', + 'delete_all_bills' => 'Изтрийте ВСИЧКИ ваши сметки', + 'delete_all_piggy_banks' => 'Изтрийте ВСИЧКИ ваши касички', + 'delete_all_rules' => 'Изтрийте ВСИЧКИ ваши правила', + 'delete_all_recurring' => 'Изтрийте ВСИЧКИ ваши повтарящи се транзакции', + 'delete_all_object_groups' => 'Изтрийте ВСИЧКИ ваши групи обекти', + 'delete_all_accounts' => 'Изтрийте ВСИЧКИ ваши сметки', + 'delete_all_asset_accounts' => 'Изтрийте ВСИЧКИ ваши сметки за активи', + 'delete_all_expense_accounts' => 'Изтрийте ВСИЧКИ ваши сметки за разходи', + 'delete_all_revenue_accounts' => 'Изтрийте ВСИЧКИ ваши сметки за приходи', + 'delete_all_liabilities' => 'Изтрийте ВСИЧКИ ваши задължения', + 'delete_all_transactions' => 'Изтрийте ВСИЧКИ ваши транзакции', + 'delete_all_withdrawals' => 'Изтрийте ВСИЧКИ ваши тегления', + 'delete_all_deposits' => 'Изтрийте ВСИЧКИ ваши депозити', + 'delete_all_transfers' => 'Изтрийте ВСИЧКИ ваши прехвърляния', + 'also_delete_transactions' => 'Изтриването на сметки ще изтрие също така и ВСИЧКИ свързани тегления, депозити и прехвърляния!', + 'deleted_all_budgets' => 'Всички бюджети бяха изтрити', + 'deleted_all_categories' => 'Всички категории бяха изтрити', + 'deleted_all_tags' => 'Всички етикети бяха изтрити', + 'deleted_all_bills' => 'Всички сметки бяха изтрити', + 'deleted_all_piggy_banks' => 'Всички касички бяха изтрити', + 'deleted_all_rules' => 'Всички правила и групи правила бяха изтрити', + 'deleted_all_object_groups' => 'Всички групи бяха изтрити', + 'deleted_all_accounts' => 'Всички сметки бяха изтрити', + 'deleted_all_asset_accounts' => 'Всички сметки за активи бяха изтрити', + 'deleted_all_expense_accounts' => 'Всички сметки за разходи бяха изтрити', + 'deleted_all_revenue_accounts' => 'Всички сметки за приходи бяха изтрити', + 'deleted_all_liabilities' => 'Всички задължения бяха изтрити', + 'deleted_all_transactions' => 'Всички транзакции бяха изтрити', + 'deleted_all_withdrawals' => 'Всички тегления бяха изтрити', + 'deleted_all_deposits' => 'Всички депозити бяха изтрити', + 'deleted_all_transfers' => 'Всички прехвърляния бяха изтрити', + 'deleted_all_recurring' => 'Всички повтарящи се транзакции бяха изтрити', + 'change_your_password' => 'Смяна на парола', + 'delete_account' => 'Изтриване на профил', + 'current_password' => 'Текуща парола', + 'new_password' => 'Нова парола', + 'new_password_again' => 'Нова парола (повтори)', + 'delete_your_account' => 'Изтриване на вашият профил', + 'delete_your_account_help' => 'Изтриването на профила ви също ще изтрие всички сметки, транзакции, всичко , което може да сте запазили в Firefly III. Ще бъде МИНАЛО.', + 'delete_your_account_password' => 'Въведете паролата си, за да продължите.', + 'password' => 'Парола', + 'are_you_sure' => 'Сигурен ли сте? Не можете да отмените това.', + 'delete_account_button' => 'ИЗТРИВАНЕ на вашият профил', + 'invalid_current_password' => 'Невалидна текуща парола!', + 'password_changed' => 'Паролата е променена!', + 'should_change' => 'Идеята е да СМЕНИТЕ паролата си.', + 'invalid_password' => 'Невалидна парола!', + 'what_is_pw_security' => 'Какво е "проверете сигурността на паролата"?', + 'secure_pw_title' => 'Как да изберем сигурна парола', + 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', + 'secure_pw_history' => 'Не минава и седмица без да прочетете в новините за сайт, който губи паролите на своите потребители. Хакерите и крадците използват тези пароли, за да се опитат да откраднат вашата лична информация. Тази информация е ценна.', + 'secure_pw_ff' => 'Използвате ли една и съща парола в Интернет? Ако един сайт загуби паролата ви, хакерите имат достъп до всичките ви данни. Firefly III разчита на вас да изберете силна и уникална парола, за да защитите финансовите си записи.', + 'secure_pw_check_box' => 'За да ви помогне да направите това Firefly III може да провери дали паролата, която искате да използвате, е била открадната в миналото. В такъв случай Firefly III ви съветва да НЕ използвате тази парола.', + 'secure_pw_working_title' => 'Как работи това?', + 'secure_pw_working' => 'Като поставите отметка в квадратчето, Firefly III ще изпрати първите пет знака от хеша на SHA1 на вашата парола до уебсайтът на Troy Hunt , за да се види дали е в списъка. Това ще ви попречи да използвате опасни пароли, както се препоръчва в последната Специална публикация на NIST на тази тема.', + 'secure_pw_should' => 'Трябва ли да маркирам квадратчето?', + 'secure_pw_long_password' => 'Да. Винаги проверявайте дали вашата парола е безопасна.', + 'command_line_token' => 'Маркер за командният ред', + 'explain_command_line_token' => 'Този маркер ще ви е необходим, за да изпълнявате опции на командния ред, като например експортиране на данни. Без него тази чувствителна команда няма да работи. Не споделяйте маркера на вашия команден ред. Никой няма да ви поиска този знак, дори аз. Ако се страхувате, че сте загубили този маркер или ако сте параноик, регенерирайте този маркер с помощта на бутона.', + 'regenerate_command_line_token' => 'Регенерирайте маркера на командния ред', + 'token_regenerated' => 'Беше генериран нов маркер за команден ред', + 'change_your_email' => 'Смяна на имейл адрес', + 'email_verification' => 'Ще бъде изпратено имейл съобщение до вашия стар И нов имейл адрес. За целите на сигурността няма да можете да влезете, докато не потвърдите новия си имейл адрес. Ако не сте сигурни дали вашата инсталация Firefly III може да изпраща имейл, моля не използвайте тази функция. Ако сте администратор, можете да тествате това в Администрация .', + 'email_changed_logout' => 'Докато не потвърдите своя имейл адрес, не можете да влезете.', + 'login_with_new_email' => 'Вече можете да влезете с новия си имейл адрес.', + 'login_with_old_email' => 'Вече можете да влезете отново със стария си имейл адрес.', + 'login_provider_local_only' => 'Това действие не е достъпно при удостоверяване чрез ":login_provider".', + 'external_user_mgt_disabled' => 'Това действие не е достъпно, когато Firefly III не е отговорен за управлението на потребителите или обработката на удостоверяването.', + 'external_auth_disabled' => 'Това действие не е достъпно, когато Firefly III не е отговорен обработката на удостоверяването.', + 'delete_local_info_only' => 'Тъй като Firefly III не е отговорен за управлението на потребителите или обработката на удостоверяването, тази функция ще изтрие само локална информация на Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth клиенти', + 'profile_oauth_no_clients' => 'Не сте създали клиенти на OAuth.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Клиенти', + 'profile_oauth_client_id' => 'ИД (ID) на клиент', + 'profile_oauth_client_name' => 'Име', + 'profile_oauth_client_secret' => 'Тайна', + 'profile_oauth_create_new_client' => 'Създай нов клиент', + 'profile_oauth_create_client' => 'Създай клиент', + 'profile_oauth_edit_client' => 'Редактирай клиент', + 'profile_oauth_name_help' => 'Нещо, което вашите потребители ще разпознаят и ще се доверят.', + 'profile_oauth_redirect_url' => 'Линк на препратката', + 'profile_oauth_redirect_url_help' => 'URL адрес за обратно извикване на оторизацията на вашето приложение.', + 'profile_authorized_apps' => 'Удостоверени приложения', + 'profile_authorized_clients' => 'Удостоверени клиенти', + 'profile_scopes' => 'Сфери', + 'profile_revoke' => 'Анулирай', + 'profile_oauth_client_secret_title' => 'Тайна на клиента', + 'profile_oauth_client_secret_expl' => 'Това е новата ви "тайна на клиента". Това е единственият път, когато ще бъде показана, така че не го губете! Вече можете да използвате този маркер, за да отправяте заявки към API.', + 'profile_personal_access_tokens' => 'Персонални маркери за достъп', + 'profile_personal_access_token' => 'Персонален маркер за достъп', + 'profile_oauth_confidential' => 'Поверително', + 'profile_oauth_confidential_help' => 'Изисквайте клиента да се удостоверява с тайна. Поверителните клиенти могат да притежават идентификационни данни по защитен начин, без да ги излагат на неоторизирани страни. Публичните приложения, като например десктопа или JavaScript SPA приложения, не могат да пазят тайни по сигурен начин.', + 'profile_personal_access_token_explanation' => 'Това е новия ви персонален маркер за достъп. Това е единственият път, когато ще бъде показан, така че не го губете! Вече можете да използвате този маркер, за да отправяте заявки към API.', + 'profile_no_personal_access_token' => 'Не сте създали никакви лични маркери за достъп.', + 'profile_create_new_token' => 'Създай нов маркер', + 'profile_create_token' => 'Създай маркер', + 'profile_create' => 'Създай', + 'profile_save_changes' => 'Запазване на промените', + 'profile_whoops' => 'Опаааа!', + 'profile_something_wrong' => 'Нещо се обърка!', + 'profile_try_again' => 'Нещо се обърка. Моля, опитайте отново.', + 'amounts' => 'Суми', + 'multi_account_warning_unknown' => 'В зависимост от вида на транзакцията която създавате, източникът и / или целевата сметка на следващите разделяния може да бъде променена от това което е дефинирано в първото разделение на транзакцията.', + 'multi_account_warning_withdrawal' => 'Имайте предвид, че разходна сметка на следващите разделяния ще бъде тази която е дефинирана в първия раздел на тегленето.', + 'multi_account_warning_deposit' => 'Имайте предвид, че приходната сметка на следващите разделяния ще бъде тази която е дефинирана в първия раздел на депозита.', + 'multi_account_warning_transfer' => 'Имайте предвид, че приходната + разходната сметка на следващите разделяния ще бъде тази която е дефинирана в първия раздел на прехвърлянето.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Експортирайте данни от Firefly III', - 'export_data_menu' => 'Експортирай данни', - 'export_data_bc' => 'Експортирайте данни от Firefly III', - 'export_data_main_title' => 'Експортирайте данни от Firefly III', - 'export_data_expl' => 'Тази връзка ви позволява да експортирате всички транзакции + мета данни от Firefly III. Моля, обърнете се към помощника (горе вдясно (?) - икона) за повече информация за процеса.', - 'export_data_all_transactions' => 'Експортирай всички транзакции', - 'export_data_advanced_expl' => 'Ако имате нужда от по-усъвършенстван или специфичен тип експорт, прочетете помощта за това как да използвате командата на конзолата php artisan help firefly-iii:export-data .', + 'export_data_title' => 'Експортирайте данни от Firefly III', + 'export_data_menu' => 'Експортирай данни', + 'export_data_bc' => 'Експортирайте данни от Firefly III', + 'export_data_main_title' => 'Експортирайте данни от Firefly III', + 'export_data_expl' => 'Тази връзка ви позволява да експортирате всички транзакции + мета данни от Firefly III. Моля, обърнете се към помощника (горе вдясно (?) - икона) за повече информация за процеса.', + 'export_data_all_transactions' => 'Експортирай всички транзакции', + 'export_data_advanced_expl' => 'Ако имате нужда от по-усъвършенстван или специфичен тип експорт, прочетете помощта за това как да използвате командата на конзолата php artisan help firefly-iii:export-data .', // attachments - 'nr_of_attachments' => 'Един прикачен файл|:count прикачени файла', - 'attachments' => 'Прикачени файлове', - 'edit_attachment' => 'Редактирай прикачен файл ":name"', - 'update_attachment' => 'Обнови прикачения файл', - 'delete_attachment' => 'Изтрий прикачен файл ":name"', - 'attachment_deleted' => 'Изтрит прикачен файл ":name"', - 'liabilities_deleted' => 'Изтрито задължение ":name"', - 'attachment_updated' => 'Обновен прикачен файл ":name"', - 'upload_max_file_size' => 'Максимален размер на файла: :size', - 'list_all_attachments' => 'Списък на всички прикачени файлове', + 'nr_of_attachments' => 'Един прикачен файл|:count прикачени файла', + 'attachments' => 'Прикачени файлове', + 'edit_attachment' => 'Редактирай прикачен файл ":name"', + 'update_attachment' => 'Обнови прикачения файл', + 'delete_attachment' => 'Изтрий прикачен файл ":name"', + 'attachment_deleted' => 'Изтрит прикачен файл ":name"', + 'liabilities_deleted' => 'Изтрито задължение ":name"', + 'attachment_updated' => 'Обновен прикачен файл ":name"', + 'upload_max_file_size' => 'Максимален размер на файла: :size', + 'list_all_attachments' => 'Списък на всички прикачени файлове', // transaction index - 'title_expenses' => 'Разходи', - 'title_withdrawal' => 'Тегления', - 'title_revenue' => 'Приходи', - 'title_deposit' => 'Депозити', - 'title_transfer' => 'Прехвърляния', - 'title_transfers' => 'Прехвърляния', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Разходи', + 'title_withdrawal' => 'Тегления', + 'title_revenue' => 'Приходи', + 'title_deposit' => 'Депозити', + 'title_transfer' => 'Прехвърляния', + 'title_transfers' => 'Прехвърляния', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Тази транзакция вече е теглене', - 'convert_is_already_type_Deposit' => 'Тази транзакция вече е депозит', - 'convert_is_already_type_Transfer' => 'Тази транзакция вече е прехвърляне', - 'convert_to_Withdrawal' => 'Преобразувайте ":description" в теглене', - 'convert_to_Deposit' => 'Преобразувайте ":description" в депозит', - 'convert_to_Transfer' => 'Преобразувайте ":description" в прехвърляне', - 'convert_options_WithdrawalDeposit' => 'Преобразувайте теглене в депозит', - 'convert_options_WithdrawalTransfer' => 'Преобразувайте теглене в прехвърляне', - 'convert_options_DepositTransfer' => 'Преобразувайте депозит в прехвърляне', - 'convert_options_DepositWithdrawal' => 'Преобразувайте депозит в теглене', - 'convert_options_TransferWithdrawal' => 'Преобразувайте прехвърляне в теглене', - 'convert_options_TransferDeposit' => 'Преобразувайте прехвърляне в депозит', - 'convert_Withdrawal_to_deposit' => 'Преобразувайте това теглене в депозит', - 'convert_Withdrawal_to_transfer' => 'Преобразувайте това теглене в прехвърляне', - 'convert_Deposit_to_withdrawal' => 'Преобразувайте този депозит в теглене', - 'convert_Deposit_to_transfer' => 'Преобразувайте този депозит в прехвърляне', - 'convert_Transfer_to_deposit' => 'Преобразувайте това прехвърляне в депозит', - 'convert_Transfer_to_withdrawal' => 'Преобразувайте това прехвърляне в теглене', - 'convert_please_set_revenue_source' => 'Моля, изберете приходната сметка, откъде ще дойдат парите.', - 'convert_please_set_asset_destination' => 'Моля, изберете сметката за активи, където ще отидат парите.', - 'convert_please_set_expense_destination' => 'Моля изберете разходната сметка, където ще отидат парите.', - 'convert_please_set_asset_source' => 'Моля изберете сметката за активи, откъде ще дойдат парите.', - 'convert_expl_w_d' => 'При конвертиране от теглене в депозит парите ще бъдат депозирани в показаната сметка за активи, вместо да бъдат изтеглени от нея.|При конвертиране от теглене в депозит парите ще бъдат внесени в показаните сметки за активи, вместо да бъдат изтеглени от тях.', - 'convert_expl_w_t' => 'При конвертиране на теглене в трансфер парите ще бъдат прехвърлени от изходната сметка в друга сметка за активи или сметка за задължения, вместо да бъдат изразходвани по първоначалната сметка за разходи.|При конвертиране на теглене в трансфер парите ще бъдат прехвърлени от изходните сметки в други сметки за активи или задължения, вместо да бъдат изразходвани по първоначалните сметки за разходи.', - 'convert_expl_d_w' => 'При конвертиране на депозит в теглене парите ще бъдат изтеглени от показаната изходна сметка, вместо да бъдат внесени в нея.|При конвертиране на депозит в теглене, парите ще бъдат изтеглени от показаните изходни сметки, вместо да бъдат депозирани в тях.', - 'convert_expl_d_t' => 'Когато конвертирате депозит в прехвърляне, парите ще бъдат депозирани в посочената целева сметка от който и да е от вашите активи или пасиви.|Когато конвертирате депозит в прехвърляне, парите ще бъдат депозирани в посочените целеви сметки от която и да е от вашите сметки за активи или пасиви.', - 'convert_expl_t_w' => 'Когато конвертирате трансфер в теглене, парите ще бъдат изразходвани за целевата сметка, която сте задали тук, вместо да бъдат прехвърлени.|Когато конвертирате трансфер в теглене, парите ще бъдат изразходвани за целевите сметки, които сте задали тук, вместо да бъдат прехвърлени.', - 'convert_expl_t_d' => 'Когато преобразувате прехвърляне в депозит, парите ще бъдат депозирани в целевата сметка, която виждате тук, вместо да бъдат прехвърлени.|Когато конвертирате прехвърляне в депозит, парите ще бъдат внесени в целевите сметки, които виждате тук, вместо да бъде прехвърлени в тях.', - 'convert_select_sources' => 'За да завършите преобразуването, моля задайте нова сметка източник по-долу.|За да завършите преобразуването, моля задайте новите сметки източници по-долу.', - 'convert_select_destinations' => 'За да завършите преобразуването, моля изберете новата целева сметка по-долу.|За да завършите преобразуването, моля изберете новите целеви сметки по-долу.', - 'converted_to_Withdrawal' => 'Транзакцията беше преобразувана в теглене', - 'converted_to_Deposit' => 'Транзакцията беше преобразувана в депозит', - 'converted_to_Transfer' => 'Транзакцията беше преобразувана в прехвърляне', - 'invalid_convert_selection' => 'Избраната от Вас сметка вече се използва в тази транзакция или не съществува.', - 'source_or_dest_invalid' => 'Не могат да се намерят правилните данни за транзакцията. Преобразуването не е възможно.', - 'convert_to_withdrawal' => 'Преобразуване в теглене', - 'convert_to_deposit' => 'Преобразуване в депозит', - 'convert_to_transfer' => 'Преобразуване в прехвърляне', + 'convert_is_already_type_Withdrawal' => 'Тази транзакция вече е теглене', + 'convert_is_already_type_Deposit' => 'Тази транзакция вече е депозит', + 'convert_is_already_type_Transfer' => 'Тази транзакция вече е прехвърляне', + 'convert_to_Withdrawal' => 'Преобразувайте ":description" в теглене', + 'convert_to_Deposit' => 'Преобразувайте ":description" в депозит', + 'convert_to_Transfer' => 'Преобразувайте ":description" в прехвърляне', + 'convert_options_WithdrawalDeposit' => 'Преобразувайте теглене в депозит', + 'convert_options_WithdrawalTransfer' => 'Преобразувайте теглене в прехвърляне', + 'convert_options_DepositTransfer' => 'Преобразувайте депозит в прехвърляне', + 'convert_options_DepositWithdrawal' => 'Преобразувайте депозит в теглене', + 'convert_options_TransferWithdrawal' => 'Преобразувайте прехвърляне в теглене', + 'convert_options_TransferDeposit' => 'Преобразувайте прехвърляне в депозит', + 'convert_Withdrawal_to_deposit' => 'Преобразувайте това теглене в депозит', + 'convert_Withdrawal_to_transfer' => 'Преобразувайте това теглене в прехвърляне', + 'convert_Deposit_to_withdrawal' => 'Преобразувайте този депозит в теглене', + 'convert_Deposit_to_transfer' => 'Преобразувайте този депозит в прехвърляне', + 'convert_Transfer_to_deposit' => 'Преобразувайте това прехвърляне в депозит', + 'convert_Transfer_to_withdrawal' => 'Преобразувайте това прехвърляне в теглене', + 'convert_please_set_revenue_source' => 'Моля, изберете приходната сметка, откъде ще дойдат парите.', + 'convert_please_set_asset_destination' => 'Моля, изберете сметката за активи, където ще отидат парите.', + 'convert_please_set_expense_destination' => 'Моля изберете разходната сметка, където ще отидат парите.', + 'convert_please_set_asset_source' => 'Моля изберете сметката за активи, откъде ще дойдат парите.', + 'convert_expl_w_d' => 'При конвертиране от теглене в депозит парите ще бъдат депозирани в показаната сметка за активи, вместо да бъдат изтеглени от нея.|При конвертиране от теглене в депозит парите ще бъдат внесени в показаните сметки за активи, вместо да бъдат изтеглени от тях.', + 'convert_expl_w_t' => 'При конвертиране на теглене в трансфер парите ще бъдат прехвърлени от изходната сметка в друга сметка за активи или сметка за задължения, вместо да бъдат изразходвани по първоначалната сметка за разходи.|При конвертиране на теглене в трансфер парите ще бъдат прехвърлени от изходните сметки в други сметки за активи или задължения, вместо да бъдат изразходвани по първоначалните сметки за разходи.', + 'convert_expl_d_w' => 'При конвертиране на депозит в теглене парите ще бъдат изтеглени от показаната изходна сметка, вместо да бъдат внесени в нея.|При конвертиране на депозит в теглене, парите ще бъдат изтеглени от показаните изходни сметки, вместо да бъдат депозирани в тях.', + 'convert_expl_d_t' => 'Когато конвертирате депозит в прехвърляне, парите ще бъдат депозирани в посочената целева сметка от който и да е от вашите активи или пасиви.|Когато конвертирате депозит в прехвърляне, парите ще бъдат депозирани в посочените целеви сметки от която и да е от вашите сметки за активи или пасиви.', + 'convert_expl_t_w' => 'Когато конвертирате трансфер в теглене, парите ще бъдат изразходвани за целевата сметка, която сте задали тук, вместо да бъдат прехвърлени.|Когато конвертирате трансфер в теглене, парите ще бъдат изразходвани за целевите сметки, които сте задали тук, вместо да бъдат прехвърлени.', + 'convert_expl_t_d' => 'Когато преобразувате прехвърляне в депозит, парите ще бъдат депозирани в целевата сметка, която виждате тук, вместо да бъдат прехвърлени.|Когато конвертирате прехвърляне в депозит, парите ще бъдат внесени в целевите сметки, които виждате тук, вместо да бъде прехвърлени в тях.', + 'convert_select_sources' => 'За да завършите преобразуването, моля задайте нова сметка източник по-долу.|За да завършите преобразуването, моля задайте новите сметки източници по-долу.', + 'convert_select_destinations' => 'За да завършите преобразуването, моля изберете новата целева сметка по-долу.|За да завършите преобразуването, моля изберете новите целеви сметки по-долу.', + 'converted_to_Withdrawal' => 'Транзакцията беше преобразувана в теглене', + 'converted_to_Deposit' => 'Транзакцията беше преобразувана в депозит', + 'converted_to_Transfer' => 'Транзакцията беше преобразувана в прехвърляне', + 'invalid_convert_selection' => 'Избраната от Вас сметка вече се използва в тази транзакция или не съществува.', + 'source_or_dest_invalid' => 'Не могат да се намерят правилните данни за транзакцията. Преобразуването не е възможно.', + 'convert_to_withdrawal' => 'Преобразуване в теглене', + 'convert_to_deposit' => 'Преобразуване в депозит', + 'convert_to_transfer' => 'Преобразуване в прехвърляне', // create new stuff: - 'create_new_withdrawal' => 'Създай ново теглене', - 'create_new_deposit' => 'Създай нов депозит', - 'create_new_transfer' => 'Създай ново прехвърляне', - 'create_new_asset' => 'Създай нова сметка за активи', - 'create_new_liabilities' => 'Create new liability', - 'create_new_expense' => 'Създай нова сметка за разходи', - 'create_new_revenue' => 'Създай нова сметка за приходи', - 'create_new_piggy_bank' => 'Създай нова касичка', - 'create_new_bill' => 'Създай нова сметка', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Създай ново теглене', + 'create_new_deposit' => 'Създай нов депозит', + 'create_new_transfer' => 'Създай ново прехвърляне', + 'create_new_asset' => 'Създай нова сметка за активи', + 'create_new_liabilities' => 'Create new liability', + 'create_new_expense' => 'Създай нова сметка за разходи', + 'create_new_revenue' => 'Създай нова сметка за приходи', + 'create_new_piggy_bank' => 'Създай нова касичка', + 'create_new_bill' => 'Създай нова сметка', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Създай нова валута', - 'store_currency' => 'Запази нова валута', - 'update_currency' => 'Обнови нова валута', - 'new_default_currency' => ':name сега е валутата по подразбиране.', - 'cannot_delete_currency' => 'Не може да се изтрие :name, защото все още се използва.', - 'cannot_delete_fallback_currency' => ':name е резервната валута на системата и не може да бъде изтрита.', - 'cannot_disable_currency_journals' => 'Не може да се деактивира :name, защото транзакции все още я използват.', - 'cannot_disable_currency_last_left' => 'Не може да се деактивира :name, защото това е последната активна валута.', - 'cannot_disable_currency_account_meta' => 'Не може да се деактивира :name, защото се използва в сметки за активи.', - 'cannot_disable_currency_bills' => 'Не може да се деактивира :name, защото се използва в сметки.', - 'cannot_disable_currency_recurring' => 'Не може да се деактивира :name, защото се използва в повтарящи се транзакции.', - 'cannot_disable_currency_available_budgets' => 'Не може да се деактивира :name, защото се използва в налични бюджети.', - 'cannot_disable_currency_budget_limits' => 'Не може да се деактивира :name, защото се използва в лимити по бюджети.', - 'cannot_disable_currency_current_default' => 'Не може да се деактивира :name, защото е текущата валута по подразбиране.', - 'cannot_disable_currency_system_fallback' => 'Не може да се деактивира :name, защото е валута по подразбиране за системата.', - 'disable_EUR_side_effects' => 'Еврото е аварийната резервна валутата на системата. Деактивирането му може да има нежелани странични ефекти и може да анулира вашата гаранция.', - 'deleted_currency' => 'Валута :name е изтрита', - 'created_currency' => 'Валута :name е създадена', - 'could_not_store_currency' => 'Новата валута не можа да се запази.', - 'updated_currency' => 'Валута :name е обновена', - 'ask_site_owner' => 'Моля помолете :owner да добави, премахне или редактира валути.', - 'currencies_intro' => 'Firefly III поддържа различни валути, които можете да зададете и активирате тук.', - 'make_default_currency' => 'Направи по подразбиране', - 'default_currency' => 'по подразбиране', - 'currency_is_disabled' => 'Изключено', - 'enable_currency' => 'Включено', - 'disable_currency' => 'Деактивиране', - 'currencies_default_disabled' => 'Повечето от тези валути са деактивирани по подразбиране. За да ги използвате, първо трябва да ги активирате.', - 'currency_is_now_enabled' => 'Валута ":name" беше активирана', - 'currency_is_now_disabled' => 'Валута ":name" беше деактивирана', + 'create_currency' => 'Създай нова валута', + 'store_currency' => 'Запази нова валута', + 'update_currency' => 'Обнови нова валута', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Не може да се изтрие :name, защото все още се използва.', + 'cannot_delete_fallback_currency' => ':name е резервната валута на системата и не може да бъде изтрита.', + 'cannot_disable_currency_journals' => 'Не може да се деактивира :name, защото транзакции все още я използват.', + 'cannot_disable_currency_last_left' => 'Не може да се деактивира :name, защото това е последната активна валута.', + 'cannot_disable_currency_account_meta' => 'Не може да се деактивира :name, защото се използва в сметки за активи.', + 'cannot_disable_currency_bills' => 'Не може да се деактивира :name, защото се използва в сметки.', + 'cannot_disable_currency_recurring' => 'Не може да се деактивира :name, защото се използва в повтарящи се транзакции.', + 'cannot_disable_currency_available_budgets' => 'Не може да се деактивира :name, защото се използва в налични бюджети.', + 'cannot_disable_currency_budget_limits' => 'Не може да се деактивира :name, защото се използва в лимити по бюджети.', + 'cannot_disable_currency_current_default' => 'Не може да се деактивира :name, защото е текущата валута по подразбиране.', + 'cannot_disable_currency_system_fallback' => 'Не може да се деактивира :name, защото е валута по подразбиране за системата.', + 'disable_EUR_side_effects' => 'Еврото е аварийната резервна валутата на системата. Деактивирането му може да има нежелани странични ефекти и може да анулира вашата гаранция.', + 'deleted_currency' => 'Валута :name е изтрита', + 'created_currency' => 'Валута :name е създадена', + 'could_not_store_currency' => 'Новата валута не можа да се запази.', + 'updated_currency' => 'Валута :name е обновена', + 'ask_site_owner' => 'Моля помолете :owner да добави, премахне или редактира валути.', + 'currencies_intro' => 'Firefly III поддържа различни валути, които можете да зададете и активирате тук.', + 'make_default_currency' => 'Направи по подразбиране', + 'default_currency' => 'по подразбиране', + 'currency_is_disabled' => 'Изключено', + 'enable_currency' => 'Включено', + 'disable_currency' => 'Деактивиране', + 'currencies_default_disabled' => 'Повечето от тези валути са деактивирани по подразбиране. За да ги използвате, първо трябва да ги активирате.', + 'currency_is_now_enabled' => 'Валута ":name" беше активирана', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Валута ":name" беше деактивирана', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Задължителни полета', - 'optionalFields' => 'Незадължителни полета', - 'options' => 'Настройки', + 'mandatoryFields' => 'Задължителни полета', + 'optionalFields' => 'Незадължителни полета', + 'options' => 'Настройки', // budgets: - 'daily_budgets' => 'Дневни бюджети', - 'weekly_budgets' => 'Седмични бюджети', - 'monthly_budgets' => 'Месечни бюджети', - 'quarterly_budgets' => 'Тримесечни бюджети', - 'half_year_budgets' => 'Шестмесечни бюджети', - 'yearly_budgets' => 'Годишни бюджети', - 'other_budgets' => 'Времево персонализирани бюджети', - 'budget_limit_not_in_range' => 'Тази сума се отнася за периода от :start до :end:', - 'total_available_budget' => 'Общ наличен бюджет (между :start и :end)', - 'total_available_budget_in_currency' => 'Общ наличен бюджет в :currency', - 'see_below' => 'виж по-долу', - 'create_new_budget' => 'Създай нов бюджет', - 'store_new_budget' => 'Запази новия бюджет', - 'stored_new_budget' => 'Новия бюджет ":name" е запазен', - 'available_between' => 'Разполагаеми между :start и :end', - 'transactionsWithoutBudget' => 'Разходи без бюджет', - 'transactions_no_budget' => 'Разходи без бюджет между :start и :end', - 'spent_between' => 'Вече похарчени между :start и :end', - 'set_available_amount' => 'Задайте наличната сума', - 'update_available_amount' => 'Обновете наличната сума', - 'ab_basic_modal_explain' => 'Използвайте тази форма, за да посочите колко очаквате да можете да бюджетирате (общо, във :currency) за посочения период.', - 'createBudget' => 'Нов бюджет', - 'invalid_currency' => 'Това е невалидна валута', - 'invalid_amount' => 'Моля въведете сума', - 'set_ab' => 'Наличната сума на бюджета бе зададена', - 'updated_ab' => 'Наличната сума на бюджета бе обновена', - 'deleted_ab' => 'Наличната сума на бюджета бе изтрита', - 'deleted_bl' => 'Бюджетната сума бе премахната', - 'alt_currency_ab_create' => 'Задайте наличния бюджет в друга валута', - 'bl_create_btn' => 'Задайте бюджет в друга валута', - 'inactiveBudgets' => 'Неактивни бюджети', - 'without_budget_between' => 'Транзакции без бюджет между :start и :end', - 'delete_budget' => 'Изтрий бюджет ":name"', - 'deleted_budget' => 'Бюджет ":name" бе изтрит', - 'edit_budget' => 'Редактирай бюджет ":name"', - 'updated_budget' => 'Бюджет ":name" бе обновен', - 'update_amount' => 'Обнови сумата', - 'update_budget' => 'Обнови бюджет', - 'update_budget_amount_range' => 'Обнови (очакваната) налична сума между :start и :end', - 'set_budget_limit_title' => 'Задайте сума за бюджет :budget между :start и :end', - 'set_budget_limit' => 'Задайте сума за бюджет', - 'budget_period_navigator' => 'Указател за периода', - 'info_on_available_amount' => 'Какво имам на разположение?', - 'available_amount_indication' => 'Използвайте тези суми, за да получите насока какъв може да бъде общият ви бюджет.', - 'suggested' => 'Предложен', - 'average_between' => 'Средно между :start и :end', - 'transferred_in' => 'Прехвърлени (към)', - 'transferred_away' => 'Прехвърлени (от)', - 'auto_budget_none' => 'Няма автоматичен бюджет', - 'auto_budget_reset' => 'Задайте фиксирана сума за всеки период', - 'auto_budget_rollover' => 'Добавете сума за всеки период', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'На ден', - 'auto_budget_period_weekly' => 'На седмица', - 'auto_budget_period_monthly' => 'Месечно', - 'auto_budget_period_quarterly' => 'Тримесечно', - 'auto_budget_period_half_year' => 'На полугодие', - 'auto_budget_period_yearly' => 'Годишно', - 'auto_budget_help' => 'Можете да прочетете повече за тази функция в помощта. Кликнете върху иконата (?) горе вдясно.', - 'auto_budget_reset_icon' => 'Този бюджет ще бъде зададен периодично', - 'auto_budget_rollover_icon' => 'Размерът на бюджета ще се увеличава периодично', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Премахнете сумата на бюджета в :currency', + 'daily_budgets' => 'Дневни бюджети', + 'weekly_budgets' => 'Седмични бюджети', + 'monthly_budgets' => 'Месечни бюджети', + 'quarterly_budgets' => 'Тримесечни бюджети', + 'half_year_budgets' => 'Шестмесечни бюджети', + 'yearly_budgets' => 'Годишни бюджети', + 'other_budgets' => 'Времево персонализирани бюджети', + 'budget_limit_not_in_range' => 'Тази сума се отнася за периода от :start до :end:', + 'total_available_budget' => 'Общ наличен бюджет (между :start и :end)', + 'total_available_budget_in_currency' => 'Общ наличен бюджет в :currency', + 'see_below' => 'виж по-долу', + 'create_new_budget' => 'Създай нов бюджет', + 'store_new_budget' => 'Запази новия бюджет', + 'stored_new_budget' => 'Новия бюджет ":name" е запазен', + 'available_between' => 'Разполагаеми между :start и :end', + 'transactionsWithoutBudget' => 'Разходи без бюджет', + 'transactions_no_budget' => 'Разходи без бюджет между :start и :end', + 'spent_between' => 'Вече похарчени между :start и :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Задайте наличната сума', + 'update_available_amount' => 'Обновете наличната сума', + 'ab_basic_modal_explain' => 'Използвайте тази форма, за да посочите колко очаквате да можете да бюджетирате (общо, във :currency) за посочения период.', + 'createBudget' => 'Нов бюджет', + 'invalid_currency' => 'Това е невалидна валута', + 'invalid_amount' => 'Моля въведете сума', + 'set_ab' => 'Наличната сума на бюджета бе зададена', + 'updated_ab' => 'Наличната сума на бюджета бе обновена', + 'deleted_ab' => 'Наличната сума на бюджета бе изтрита', + 'deleted_bl' => 'Бюджетната сума бе премахната', + 'alt_currency_ab_create' => 'Задайте наличния бюджет в друга валута', + 'bl_create_btn' => 'Задайте бюджет в друга валута', + 'inactiveBudgets' => 'Неактивни бюджети', + 'without_budget_between' => 'Транзакции без бюджет между :start и :end', + 'delete_budget' => 'Изтрий бюджет ":name"', + 'deleted_budget' => 'Бюджет ":name" бе изтрит', + 'edit_budget' => 'Редактирай бюджет ":name"', + 'updated_budget' => 'Бюджет ":name" бе обновен', + 'update_amount' => 'Обнови сумата', + 'update_budget' => 'Обнови бюджет', + 'update_budget_amount_range' => 'Обнови (очакваната) налична сума между :start и :end', + 'set_budget_limit_title' => 'Задайте сума за бюджет :budget между :start и :end', + 'set_budget_limit' => 'Задайте сума за бюджет', + 'budget_period_navigator' => 'Указател за периода', + 'info_on_available_amount' => 'Какво имам на разположение?', + 'available_amount_indication' => 'Използвайте тези суми, за да получите насока какъв може да бъде общият ви бюджет.', + 'suggested' => 'Предложен', + 'average_between' => 'Средно между :start и :end', + 'transferred_in' => 'Прехвърлени (към)', + 'transferred_away' => 'Прехвърлени (от)', + 'auto_budget_none' => 'Няма автоматичен бюджет', + 'auto_budget_reset' => 'Задайте фиксирана сума за всеки период', + 'auto_budget_rollover' => 'Добавете сума за всеки период', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'На ден', + 'auto_budget_period_weekly' => 'На седмица', + 'auto_budget_period_monthly' => 'Месечно', + 'auto_budget_period_quarterly' => 'Тримесечно', + 'auto_budget_period_half_year' => 'На полугодие', + 'auto_budget_period_yearly' => 'Годишно', + 'auto_budget_help' => 'Можете да прочетете повече за тази функция в помощта. Кликнете върху иконата (?) горе вдясно.', + 'auto_budget_reset_icon' => 'Този бюджет ще бъде зададен периодично', + 'auto_budget_rollover_icon' => 'Размерът на бюджета ще се увеличава периодично', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Премахнете сумата на бюджета в :currency', // bills: - 'subscription' => 'Suscripción', - 'not_expected_period' => 'Не се очаква този период', - 'subscriptions_in_group' => 'Suscripciones en el grupo "%{title}"', - 'subscr_expected_x_times' => 'Se debe pagar %{amount} %{times} veces este periodo', - 'not_or_not_yet' => '(Все още) не', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Сметката "търси" транзакции между :low и :high.', - 'running_again_loss' => 'По-рано свързаните транзакции с тази сметка могат да загубят връзката си, ако те (вече не) съвпадат с правилото (правилата).', - 'bill_related_rules' => 'Правила, свързани с тази сметка', - 'repeats' => 'Повторения', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Свързани транзакции', - 'auto_match_on' => 'Автоматично свързани от Firefly III', - 'auto_match_off' => 'Не автоматично свързани от Firefly III', - 'next_expected_match' => 'Следващо очаквано съвпадение', - 'delete_bill' => 'Изтрий сметка ":name"', - 'deleted_bill' => 'Сметка ":name" бе изтрита', - 'edit_bill' => 'Редактирай сметка ":name"', - 'more' => 'Още', - 'rescan_old' => 'Изпълнете отново правилата за всички транзакции', - 'update_bill' => 'Редактирай сметка', - 'updated_bill' => 'Сметка ":name" бе обновена', - 'store_new_bill' => 'Запаметете нова сметка', - 'stored_new_bill' => 'Новата сметка ":name" бе запазена', - 'cannot_scan_inactive_bill' => 'Неактивните сметки не могат да бъдат сканирани.', - 'rescanned_bill' => 'Преразгледахме всичко и свързахме :count транзакция със сметката.|Преразгледахме всичко и свързахме :count транзакциите със сметката.', - 'average_bill_amount_year' => 'Средна сума на сметката (:year)', - 'average_bill_amount_overall' => 'Средна сума на сметката (общо)', - 'bill_is_active' => 'Сметката е активна', - 'bill_expected_between' => 'Очаквано между :start и :end', - 'bill_will_automatch' => 'Сметката автоматично ще бъде свързана със съответстващи транзакции', - 'skips_over' => 'прескача', - 'bill_store_error' => 'Възникна неочаквана грешка при записа на новата ви сметка. Моля проверете лог файловете', - 'list_inactive_rule' => 'неактивно правило', - 'bill_edit_rules' => 'Firefly III ще се опита да редактира и правилото, свързано с тази сметка. Ако сами сте редактирали това правило, Firefly III няма да промени нищо.|Firefly III също ще се опита да редактира и :count правила, свързани с тази сметка. Ако сами сте редактирали тези правила, Firefly III няма да промени нищо.', - 'bill_expected_date' => 'Очаквано :date', - 'bill_expected_date_js' => 'Expected {date}', - 'expected_amount' => 'Importe (Previsto)', - 'bill_paid_on' => 'Paid on {date}', - 'bill_repeats_weekly' => 'Повтаря се седмично', - 'bill_repeats_monthly' => 'Повтаря се месечно', - 'bill_repeats_quarterly' => 'Повтаря се тримесечно', - 'bill_repeats_half-year' => 'Повтаря се на половин година', - 'bill_repeats_yearly' => 'Повтаря се годишно', - 'bill_repeats_weekly_other' => 'Повтаря се през седмица', - 'bill_repeats_monthly_other' => 'Повтаря се през месец', - 'bill_repeats_quarterly_other' => 'Повтаря се през тримесечие', - 'bill_repeats_half-year_other' => 'Повтаря се годишно', - 'bill_repeats_yearly_other' => 'Повтаря се през година', - 'bill_repeats_weekly_skip' => 'Повтаря се през {skip} седмици', - 'bill_repeats_monthly_skip' => 'Повтаря се през {skip} месеца', - 'bill_repeats_quarterly_skip' => 'Повтаря се през {skip} тримесечия', - 'bill_repeats_half-year_skip' => 'Повтаря се през {skip} половин години', - 'bill_repeats_yearly_skip' => 'Повтаря се през {skip} години', - 'subscriptions' => 'Абонаменти', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Завинаги', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Suscripción', + 'not_expected_period' => 'Не се очаква този период', + 'subscriptions_in_group' => 'Suscripciones en el grupo "%{title}"', + 'subscr_expected_x_times' => 'Se debe pagar %{amount} %{times} veces este periodo', + 'not_or_not_yet' => '(Все още) не', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Сметката "търси" транзакции между :low и :high.', + 'running_again_loss' => 'По-рано свързаните транзакции с тази сметка могат да загубят връзката си, ако те (вече не) съвпадат с правилото (правилата).', + 'bill_related_rules' => 'Правила, свързани с тази сметка', + 'repeats' => 'Повторения', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Свързани транзакции', + 'auto_match_on' => 'Автоматично свързани от Firefly III', + 'auto_match_off' => 'Не автоматично свързани от Firefly III', + 'next_expected_match' => 'Следващо очаквано съвпадение', + 'delete_bill' => 'Изтрий сметка ":name"', + 'deleted_bill' => 'Сметка ":name" бе изтрита', + 'edit_bill' => 'Редактирай сметка ":name"', + 'more' => 'Още', + 'rescan_old' => 'Изпълнете отново правилата за всички транзакции', + 'update_bill' => 'Редактирай сметка', + 'updated_bill' => 'Сметка ":name" бе обновена', + 'store_new_bill' => 'Запаметете нова сметка', + 'stored_new_bill' => 'Новата сметка ":name" бе запазена', + 'cannot_scan_inactive_bill' => 'Неактивните сметки не могат да бъдат сканирани.', + 'rescanned_bill' => 'Преразгледахме всичко и свързахме :count транзакция със сметката.|Преразгледахме всичко и свързахме :count транзакциите със сметката.', + 'average_bill_amount_year' => 'Средна сума на сметката (:year)', + 'average_bill_amount_overall' => 'Средна сума на сметката (общо)', + 'bill_is_active' => 'Сметката е активна', + 'bill_expected_between' => 'Очаквано между :start и :end', + 'bill_will_automatch' => 'Сметката автоматично ще бъде свързана със съответстващи транзакции', + 'skips_over' => 'прескача', + 'bill_store_error' => 'Възникна неочаквана грешка при записа на новата ви сметка. Моля проверете лог файловете', + 'list_inactive_rule' => 'неактивно правило', + 'bill_edit_rules' => 'Firefly III ще се опита да редактира и правилото, свързано с тази сметка. Ако сами сте редактирали това правило, Firefly III няма да промени нищо.|Firefly III също ще се опита да редактира и :count правила, свързани с тази сметка. Ако сами сте редактирали тези правила, Firefly III няма да промени нищо.', + 'bill_expected_date' => 'Очаквано :date', + 'bill_expected_date_js' => 'Expected {date}', + 'expected_amount' => 'Importe (Previsto)', + 'bill_paid_on' => 'Paid on {date}', + 'bill_repeats_weekly' => 'Повтаря се седмично', + 'bill_repeats_monthly' => 'Повтаря се месечно', + 'bill_repeats_quarterly' => 'Повтаря се тримесечно', + 'bill_repeats_half-year' => 'Повтаря се на половин година', + 'bill_repeats_yearly' => 'Повтаря се годишно', + 'bill_repeats_weekly_other' => 'Повтаря се през седмица', + 'bill_repeats_monthly_other' => 'Повтаря се през месец', + 'bill_repeats_quarterly_other' => 'Повтаря се през тримесечие', + 'bill_repeats_half-year_other' => 'Повтаря се годишно', + 'bill_repeats_yearly_other' => 'Повтаря се през година', + 'bill_repeats_weekly_skip' => 'Повтаря се през {skip} седмици', + 'bill_repeats_monthly_skip' => 'Повтаря се през {skip} месеца', + 'bill_repeats_quarterly_skip' => 'Повтаря се през {skip} тримесечия', + 'bill_repeats_half-year_skip' => 'Повтаря се през {skip} половин години', + 'bill_repeats_yearly_skip' => 'Повтаря се през {skip} години', + 'subscriptions' => 'Абонаменти', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Завинаги', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'Имате :count неактивна (архивирана) сметка, която можете да видите на тази отделна страница.|Имате :count неактивни (архивирани) сметки, които можете да видите на тази отделна страница.', - 'all_accounts_inactive' => 'Това са вашите неактивни сметки.', - 'active_account_link' => 'Тази връзка ви връща към активните ви сметки.', - 'account_missing_transaction' => 'Сметка #:id (":name") не може да се вижда директно, но в Firefly липсва информация за пренасочване.', - 'cc_monthly_payment_date_help' => 'Изберете която и да е година и месец, те ще бъдат игнорирани. От значение е само денят от месеца.', - 'details_for_asset' => 'Подробности за сметката за активи ":name"', - 'details_for_expense' => 'Подробности за сметката за разходи ":name"', - 'details_for_revenue' => 'Подробности за сметката за приходи ":name"', - 'details_for_cash' => 'Подробности за касова сметка ":name"', - 'store_new_asset_account' => 'Запамети нова сметка за активи', - 'store_new_expense_account' => 'Запамети нова сметка за разходи', - 'store_new_revenue_account' => 'Запамети нова сметка за приходи', - 'edit_asset_account' => 'Редактирай сметка за активи ":name"', - 'edit_expense_account' => 'Редактирай сметка за разходи ":name"', - 'edit_revenue_account' => 'Редактирай сметка за приходи ":name"', - 'delete_asset_account' => 'Изтрий сметка за активи ":name"', - 'delete_expense_account' => 'Изтрий сметка за разходи ":name"', - 'delete_revenue_account' => 'Изтрий сметка за приходи ":name"', - 'delete_liabilities_account' => 'Изтрий задължение ":name"', - 'asset_deleted' => 'Сметка за активи ":name" е успешно изтрита', - 'account_deleted' => 'Сметка ":name" е успешно изтрита', - 'expense_deleted' => 'Сметка за разходи ":name" е успешно изтрита', - 'revenue_deleted' => 'Сметка за приходи ":name" е успешно изтрита', - 'update_asset_account' => 'Редактирай сметка за активи', - 'update_undefined_account' => 'Актуализиране на сметката', - 'update_liabilities_account' => 'Редактирай задължение', - 'update_expense_account' => 'Редактирай сметка за разходи', - 'update_revenue_account' => 'Редактирай сметка за приходи', - 'make_new_asset_account' => 'Създай нова сметка за активи', - 'make_new_expense_account' => 'Създай нова сметка за разходи', - 'make_new_revenue_account' => 'Създай нова сметка за приходи', - 'make_new_liabilities_account' => 'Създай ново задължение', - 'asset_accounts' => 'Сметки за активи', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Сметки за активи (деактивирани)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Сметки за разходи', - 'expense_accounts_inactive' => 'Сметки за разходи (деактивирани)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Сметки за приходи', - 'revenue_accounts_inactive' => 'Сметки за приходи (деактивирани)', - 'cash_accounts' => 'Касови сметки', - 'Cash account' => 'Касова сметка', - 'liabilities_accounts' => 'Задължения', - 'liabilities_accounts_inactive' => 'Задължения (деактивирани)', - 'reconcile_account' => 'Съгласувай сметка ":account"', - 'overview_of_reconcile_modal' => 'Преглед на съгласуването', - 'delete_reconciliation' => 'Изтрий съгласуването', - 'update_reconciliation' => 'Обнови съгласуването', - 'amount_cannot_be_zero' => 'Сумата не може да е нула', - 'end_of_reconcile_period' => 'Край на периода на съгласуване: :period', - 'start_of_reconcile_period' => 'Начало на периода на съгласуване: :period', - 'start_balance' => 'Начално салдо', - 'end_balance' => 'Крайно салдо', - 'update_balance_dates_instruction' => 'Съпоставете сумите и датите по-горе с банковото си извлечение и натиснете „Започнете съгласуване“', - 'select_transactions_instruction' => 'Изберете транзакциите, които се виждат в банковото ви извлечение.', - 'select_range_and_balance' => 'Първо проверете периода от време и балансите. След това натиснете "Започнете съгласуване"', - 'date_change_instruction' => 'Ако промените периода от време сега, целия напредък ще бъде загубен.', - 'update_selection' => 'Обновяване на избраните', - 'store_reconcile' => 'Запази съгласуването', - 'reconciliation_transaction' => 'Транзакция за съгласуване', - 'Reconciliation' => 'Съгласуване', - 'reconciliation' => 'Съгласуване', - 'reconcile_options' => 'Настройки за съгласуване', - 'reconcile_range' => 'Период за съгласуване', - 'start_reconcile' => 'Започнете съгласуване', - 'cash_account_type' => 'Касова сметка (В брой)', - 'cash' => 'в брой', - 'cant_find_redirect_account' => 'Firefly III се опита да ви пренасочи, но не успя. Съжалявам за това. Обратно към началото.', - 'account_type' => 'Вид на сметка', - 'save_transactions_by_moving' => 'Запазете тази транзакция, като я преместите в друг акаунт:|Запазете тези транзакции, като ги преместите в друг акаунт:', - 'save_transactions_by_moving_js' => 'Няма транзакции|Запазете тази транзакция, като я преместите в друг акаунт. |Запазете тези транзакции, като ги преместите в друг акаунт.', - 'stored_new_account' => 'Новата сметка ":name" бе запаметена!', - 'stored_new_account_js' => 'Нова сметка "{name}" запазена!', - 'updated_account' => 'Сметка ":name" бе обновена', - 'updated_account_js' => 'Актуализирана сметка "{title}".', - 'credit_card_options' => 'Настройки за кредитни карти', - 'no_transactions_account' => 'Няма транзакции (в този период) за сметка за активи ":name".', - 'no_transactions_period' => 'Няма транзакции (в този период).', - 'no_data_for_chart' => 'Няма достатъчно информация (все още) за генериране на тази графика.', - 'select_at_least_one_account' => 'Моля изберете поне една сметка за активи', - 'select_at_least_one_category' => 'Моля изберете поне една категория', - 'select_at_least_one_budget' => 'Моля изберете поне един бюджет', - 'select_at_least_one_tag' => 'Моля изберете поне един етикет', - 'select_at_least_one_expense' => 'Моля изберете поне една комбинация от сметки за разходи / приходи. Ако нямате такива (списъкът е празен), този отчет не е наличен.', - 'account_default_currency' => 'Това ще бъде валутата по подразбиране за тази сметка.', - 'reconcile_has_more' => 'Вашата книга в Firefly III има повече пари, отколкото вашата банка твърди, че трябва да имате. Има няколко варианта. Моля изберете какво да правите. След това натиснете „Потвърждаване на съгласуването“.', - 'reconcile_has_less' => 'Вашата книга в Firefly III има по-малко пари, отколкото вашата банка твърди, че трябва да имате. Има няколко варианта. Моля изберете какво да правите. След това натиснете „Потвърждаване на съгласуването“.', - 'reconcile_is_equal' => 'Вашата книга в Firefly III и вашите банкови извлечения съвпадат. Няма какво да се прави. Моля натиснете „Потвърждаване на съгласуването“, за да потвърдите вашите данни.', - 'create_pos_reconcile_transaction' => 'Изчистете избраните транзакции и създайте корекция, като добавите :amount към тази сметка за активи.', - 'create_neg_reconcile_transaction' => 'Изчистете избраните транзакции и създайте корекция, като извадите :amount от тази сметка за активи.', - 'reconcile_do_nothing' => 'Изчистете избраните транзакции, но не коригирайте.', - 'reconcile_go_back' => 'Винаги можете да редактирате или изтриете корекцията по-късно.', - 'must_be_asset_account' => 'Може да съгласувате само сметки за активи', - 'reconciliation_stored' => 'Съгласуването е запаметено', - 'reconciliation_error' => 'Поради грешка транзакциите бяха маркирани като съгласувани, но корекцията не е запазена: :error.', - 'reconciliation_transaction_title' => 'Съгласуване (:from до :to)', - 'sum_of_reconciliation' => 'Сума на съгласуването', - 'reconcile_this_account' => 'Съгласувай тази сметка', - 'reconcile' => 'Съгласувай', - 'show' => 'Покажи', - 'confirm_reconciliation' => 'Потвърждаване на съгласуването', - 'submitted_start_balance' => 'Въведено начално салдо', - 'selected_transactions' => 'Избрани транзакции (:count)', - 'already_cleared_transactions' => 'Вече приключени транзакции (:count)', - 'submitted_end_balance' => 'Въведено крайно салдо', - 'initial_balance_description' => 'Първоначално салдо за ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'неизвестна', - 'interest_calc_daily' => 'На ден', - 'interest_calc_monthly' => 'На месец', - 'interest_calc_yearly' => 'Годишно', - 'interest_calc_weekly' => 'Седмично', - 'interest_calc_half-year' => 'За половин година', - 'interest_calc_quarterly' => 'За тримесечие', - 'initial_balance_account' => 'Първоначално салдо на сметка ":account"', - 'list_options' => 'Списък на опциите', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'Имате :count неактивна (архивирана) сметка, която можете да видите на тази отделна страница.|Имате :count неактивни (архивирани) сметки, които можете да видите на тази отделна страница.', + 'all_accounts_inactive' => 'Това са вашите неактивни сметки.', + 'active_account_link' => 'Тази връзка ви връща към активните ви сметки.', + 'account_missing_transaction' => 'Сметка #:id (":name") не може да се вижда директно, но в Firefly липсва информация за пренасочване.', + 'cc_monthly_payment_date_help' => 'Изберете която и да е година и месец, те ще бъдат игнорирани. От значение е само денят от месеца.', + 'details_for_asset' => 'Подробности за сметката за активи ":name"', + 'details_for_expense' => 'Подробности за сметката за разходи ":name"', + 'details_for_revenue' => 'Подробности за сметката за приходи ":name"', + 'details_for_cash' => 'Подробности за касова сметка ":name"', + 'store_new_asset_account' => 'Запамети нова сметка за активи', + 'store_new_expense_account' => 'Запамети нова сметка за разходи', + 'store_new_revenue_account' => 'Запамети нова сметка за приходи', + 'edit_asset_account' => 'Редактирай сметка за активи ":name"', + 'edit_expense_account' => 'Редактирай сметка за разходи ":name"', + 'edit_revenue_account' => 'Редактирай сметка за приходи ":name"', + 'delete_asset_account' => 'Изтрий сметка за активи ":name"', + 'delete_expense_account' => 'Изтрий сметка за разходи ":name"', + 'delete_revenue_account' => 'Изтрий сметка за приходи ":name"', + 'delete_liabilities_account' => 'Изтрий задължение ":name"', + 'asset_deleted' => 'Сметка за активи ":name" е успешно изтрита', + 'account_deleted' => 'Сметка ":name" е успешно изтрита', + 'expense_deleted' => 'Сметка за разходи ":name" е успешно изтрита', + 'revenue_deleted' => 'Сметка за приходи ":name" е успешно изтрита', + 'update_asset_account' => 'Редактирай сметка за активи', + 'update_undefined_account' => 'Актуализиране на сметката', + 'update_liabilities_account' => 'Редактирай задължение', + 'update_expense_account' => 'Редактирай сметка за разходи', + 'update_revenue_account' => 'Редактирай сметка за приходи', + 'make_new_asset_account' => 'Създай нова сметка за активи', + 'make_new_expense_account' => 'Създай нова сметка за разходи', + 'make_new_revenue_account' => 'Създай нова сметка за приходи', + 'make_new_liabilities_account' => 'Създай ново задължение', + 'asset_accounts' => 'Сметки за активи', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Сметки за активи (деактивирани)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Сметки за разходи', + 'expense_accounts_inactive' => 'Сметки за разходи (деактивирани)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Сметки за приходи', + 'revenue_accounts_inactive' => 'Сметки за приходи (деактивирани)', + 'cash_accounts' => 'Касови сметки', + 'Cash account' => 'Касова сметка', + 'liabilities_accounts' => 'Задължения', + 'liabilities_accounts_inactive' => 'Задължения (деактивирани)', + 'reconcile_account' => 'Съгласувай сметка ":account"', + 'overview_of_reconcile_modal' => 'Преглед на съгласуването', + 'delete_reconciliation' => 'Изтрий съгласуването', + 'update_reconciliation' => 'Обнови съгласуването', + 'amount_cannot_be_zero' => 'Сумата не може да е нула', + 'end_of_reconcile_period' => 'Край на периода на съгласуване: :period', + 'start_of_reconcile_period' => 'Начало на периода на съгласуване: :period', + 'start_balance' => 'Начално салдо', + 'end_balance' => 'Крайно салдо', + 'update_balance_dates_instruction' => 'Съпоставете сумите и датите по-горе с банковото си извлечение и натиснете „Започнете съгласуване“', + 'select_transactions_instruction' => 'Изберете транзакциите, които се виждат в банковото ви извлечение.', + 'select_range_and_balance' => 'Първо проверете периода от време и балансите. След това натиснете "Започнете съгласуване"', + 'date_change_instruction' => 'Ако промените периода от време сега, целия напредък ще бъде загубен.', + 'update_selection' => 'Обновяване на избраните', + 'store_reconcile' => 'Запази съгласуването', + 'reconciliation_transaction' => 'Транзакция за съгласуване', + 'Reconciliation' => 'Съгласуване', + 'reconciliation' => 'Съгласуване', + 'reconcile_options' => 'Настройки за съгласуване', + 'reconcile_range' => 'Период за съгласуване', + 'start_reconcile' => 'Започнете съгласуване', + 'cash_account_type' => 'Касова сметка (В брой)', + 'cash' => 'в брой', + 'cant_find_redirect_account' => 'Firefly III се опита да ви пренасочи, но не успя. Съжалявам за това. Обратно към началото.', + 'account_type' => 'Вид на сметка', + 'save_transactions_by_moving' => 'Запазете тази транзакция, като я преместите в друг акаунт:|Запазете тези транзакции, като ги преместите в друг акаунт:', + 'save_transactions_by_moving_js' => 'Няма транзакции|Запазете тази транзакция, като я преместите в друг акаунт. |Запазете тези транзакции, като ги преместите в друг акаунт.', + 'stored_new_account' => 'Новата сметка ":name" бе запаметена!', + 'stored_new_account_js' => 'Нова сметка "{name}" запазена!', + 'updated_account' => 'Сметка ":name" бе обновена', + 'updated_account_js' => 'Актуализирана сметка "{title}".', + 'credit_card_options' => 'Настройки за кредитни карти', + 'no_transactions_account' => 'Няма транзакции (в този период) за сметка за активи ":name".', + 'no_transactions_period' => 'Няма транзакции (в този период).', + 'no_data_for_chart' => 'Няма достатъчно информация (все още) за генериране на тази графика.', + 'select_at_least_one_account' => 'Моля изберете поне една сметка за активи', + 'select_at_least_one_category' => 'Моля изберете поне една категория', + 'select_at_least_one_budget' => 'Моля изберете поне един бюджет', + 'select_at_least_one_tag' => 'Моля изберете поне един етикет', + 'select_at_least_one_expense' => 'Моля изберете поне една комбинация от сметки за разходи / приходи. Ако нямате такива (списъкът е празен), този отчет не е наличен.', + 'account_default_currency' => 'Това ще бъде валутата по подразбиране за тази сметка.', + 'reconcile_has_more' => 'Вашата книга в Firefly III има повече пари, отколкото вашата банка твърди, че трябва да имате. Има няколко варианта. Моля изберете какво да правите. След това натиснете „Потвърждаване на съгласуването“.', + 'reconcile_has_less' => 'Вашата книга в Firefly III има по-малко пари, отколкото вашата банка твърди, че трябва да имате. Има няколко варианта. Моля изберете какво да правите. След това натиснете „Потвърждаване на съгласуването“.', + 'reconcile_is_equal' => 'Вашата книга в Firefly III и вашите банкови извлечения съвпадат. Няма какво да се прави. Моля натиснете „Потвърждаване на съгласуването“, за да потвърдите вашите данни.', + 'create_pos_reconcile_transaction' => 'Изчистете избраните транзакции и създайте корекция, като добавите :amount към тази сметка за активи.', + 'create_neg_reconcile_transaction' => 'Изчистете избраните транзакции и създайте корекция, като извадите :amount от тази сметка за активи.', + 'reconcile_do_nothing' => 'Изчистете избраните транзакции, но не коригирайте.', + 'reconcile_go_back' => 'Винаги можете да редактирате или изтриете корекцията по-късно.', + 'must_be_asset_account' => 'Може да съгласувате само сметки за активи', + 'reconciliation_stored' => 'Съгласуването е запаметено', + 'reconciliation_error' => 'Поради грешка транзакциите бяха маркирани като съгласувани, но корекцията не е запазена: :error.', + 'reconciliation_transaction_title' => 'Съгласуване (:from до :to)', + 'sum_of_reconciliation' => 'Сума на съгласуването', + 'reconcile_this_account' => 'Съгласувай тази сметка', + 'reconcile' => 'Съгласувай', + 'show' => 'Покажи', + 'confirm_reconciliation' => 'Потвърждаване на съгласуването', + 'submitted_start_balance' => 'Въведено начално салдо', + 'selected_transactions' => 'Избрани транзакции (:count)', + 'already_cleared_transactions' => 'Вече приключени транзакции (:count)', + 'submitted_end_balance' => 'Въведено крайно салдо', + 'initial_balance_description' => 'Първоначално салдо за ":account"', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'неизвестна', + 'interest_calc_daily' => 'На ден', + 'interest_calc_monthly' => 'На месец', + 'interest_calc_yearly' => 'Годишно', + 'interest_calc_weekly' => 'Седмично', + 'interest_calc_half-year' => 'За половин година', + 'interest_calc_quarterly' => 'За тримесечие', + 'initial_balance_account' => 'Първоначално салдо на сметка ":account"', + 'list_options' => 'Списък на опциите', // categories: - 'new_category' => 'Нова категория', - 'create_new_category' => 'Създай нова категория', - 'without_category' => 'Без категория', - 'update_category' => 'Обновяване на категория', - 'updated_category' => 'Обновяване на категория ":name"', - 'categories' => 'Категории', - 'edit_category' => 'Обнови категория ":name"', - 'no_category' => '(без категория)', - 'unknown_category_plain' => 'No category', - 'category' => 'Категория', - 'delete_category' => 'Изтрий категория ":name"', - 'deleted_category' => 'Категория ":name" бе изтрита', - 'store_category' => 'Запази нова категория', - 'stored_category' => 'Новата категория ":name" бе запазена', - 'without_category_between' => 'Без категория между :start и :end', + 'new_category' => 'Нова категория', + 'create_new_category' => 'Създай нова категория', + 'without_category' => 'Без категория', + 'update_category' => 'Обновяване на категория', + 'updated_category' => 'Обновяване на категория ":name"', + 'categories' => 'Категории', + 'edit_category' => 'Обнови категория ":name"', + 'no_category' => '(без категория)', + 'unknown_category_plain' => 'No category', + 'category' => 'Категория', + 'delete_category' => 'Изтрий категория ":name"', + 'deleted_category' => 'Категория ":name" бе изтрита', + 'store_category' => 'Запази нова категория', + 'stored_category' => 'Новата категория ":name" бе запазена', + 'without_category_between' => 'Без категория между :start и :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Обнови тегленето', - 'update_deposit' => 'Обнови депозита', - 'update_transaction' => 'Обнови транзакцията', - 'update_transfer' => 'Обнови прехвърлянето', - 'updated_withdrawal' => 'Тегленето ":description" бе обновено', - 'updated_deposit' => 'Депозитът ":description" бе обновен', - 'updated_transfer' => 'Прехвърлянето ":description" бе обновено', - 'no_changes_withdrawal' => 'Теглене ":description" не беше променено.', - 'no_changes_deposit' => 'Депозит ":description" не беше променен.', - 'no_changes_transfer' => 'Прехвърляне ":description" не беше променено.', - 'delete_withdrawal' => 'Изтрий тегленето ":description"', - 'delete_deposit' => 'Изтрий депозита ":description"', - 'delete_transfer' => 'Изтрий прехвърлянето ":description"', - 'deleted_withdrawal' => 'Тегленето ":description" бе успешно изтрито', - 'deleted_deposit' => 'Депозитът ":description" бе успешно изтрит', - 'deleted_transfer' => 'Прехвърлянето ":description" бе успешно изтрито', - 'deleted_reconciliation' => 'Транзакцията за съгласуване ":description" бе успешно изтрита', - 'stored_journal' => 'Успешно създадена нова транзакция ":description"', - 'stored_journal_no_descr' => 'Новата ви транзакция бе успешно създадена', - 'updated_journal_no_descr' => 'Транзакция бе успешно обновена', - 'select_transactions' => 'Избери транзакции', - 'rule_group_select_transactions' => 'Прилагайте ":title" към транзакции', - 'rule_select_transactions' => 'Прилагайте ":title" към транзакции', - 'stop_selection' => 'Спрете да избирате транзакции', - 'reconcile_selected' => 'Съгласувай', - 'mass_delete_journals' => 'Изтрийте няколко транзакции', - 'mass_edit_journals' => 'Обновете няколко транзакции', - 'mass_bulk_journals' => 'Групова редакция на няколко транзакции', - 'mass_bulk_journals_explain' => 'Тази форма ви позволява да промените свойствата на транзакциите по-долу, в една бърза актуализация. Всички транзакции в таблицата ще се обновят, когато промените параметрите, които виждате тук.', - 'part_of_split' => 'Тази транзакция е част от разделена транзакция. Ако не сте избрали всички разделяния, може да завършите с промяна само на половината транзакция.', - 'bulk_set_new_values' => 'Използвайте полетата по-долу за да зададете нови стойности. Ако ги оставите празни, то всички ще станат празни. Също така имайте предвид, че ще бъде зададен бюджет само за тегленията.', - 'no_bulk_category' => 'Не обновявай категорията', - 'no_bulk_budget' => 'Не обновявай бюджета', - 'no_bulk_tags' => 'Не обновявай етикетите', - 'replace_with_these_tags' => 'Замести с тези етикети', - 'append_these_tags' => 'Допълни тези етикети', - 'mass_edit' => 'Редактирай избраното самостоятелно', - 'bulk_edit' => 'Редактирай избраното групово', - 'mass_delete' => 'Изтрий избраното', - 'cannot_edit_other_fields' => 'Не можете да редактирате групово други полета освен следните, защото няма място за показването им. Моля последвайте връзката и ги редактирайте едно по едно, ако трябва да редактирате тези полета.', - 'cannot_change_amount_reconciled' => 'Не можете да промените сумата на съгласуваните транзакции.', - 'no_budget' => '(без бюджет)', - 'no_bill' => '(няма сметка)', - 'account_per_budget' => 'Сметка по бюджет', - 'account_per_category' => 'Сметка по категория', - 'create_new_object' => 'Създай', - 'empty' => '(празно)', - 'all_other_budgets' => '(всички други бюджети)', - 'all_other_accounts' => '(всички други сметки)', - 'expense_per_source_account' => 'Разходи по разходна сметка', - 'expense_per_destination_account' => 'Разходи по приходна сметка', - 'income_per_destination_account' => 'Приходи по приходна сметка', - 'spent_in_specific_category' => 'Похарчени в категория ":category"', - 'earned_in_specific_category' => 'Получени в категория ":category"', - 'spent_in_specific_tag' => 'Похарчени с етикет ":tag"', - 'earned_in_specific_tag' => 'Получени с етикет ":tag"', - 'income_per_source_account' => 'Приходи по разходна сметка', - 'average_spending_per_destination' => 'Среден разход по приходна сметка', - 'average_spending_per_source' => 'Среден разход по разходна сметка', - 'average_earning_per_source' => 'Среден приход по разходна сметка', - 'average_earning_per_destination' => 'Среден приход по разходна сметка', - 'account_per_tag' => 'Сметка по етикет', - 'tag_report_expenses_listed_once' => 'Разходите и доходите никога не са посочени два пъти. Ако транзакцията има множество етикети, тя може да се показва само под един от нейните етикети. В този списък може да изглежда че липсват данни, но сумите ще бъдат правилни.', - 'double_report_expenses_charted_once' => 'Разходите и доходите никога не са посочени два пъти. Ако транзакцията има множество етикети, тя може да се показва само под един от нейните етикети. В тази графика може да изглежда че липсват данни, но сумите ще бъдат правилни.', - 'tag_report_chart_single_tag' => 'Тази графика се отнася за един етикет. Ако транзакция има множество етикети, това което виждате тук, може да бъде отразено и в графиките на други етикети.', - 'tag' => 'Етикет', - 'no_budget_squared' => '(без бюджет)', - 'perm-delete-many' => 'Изтриването на много елементи с едно действие може да бъде много разрушително. Моля бъдете внимателни. Възможно е да изтриете част от разделена транзакция на тази страница, така че внимавайте.', - 'mass_deleted_transactions_success' => 'Изтрита :count транзакция.|Изтрити :count транзакции.', - 'mass_edited_transactions_success' => 'Обновена :count транзакция.|Обновени :count транзакции.', - 'opt_group_' => '(без тип сметка)', - 'opt_group_no_account_type' => '(без тип сметка)', - 'opt_group_defaultAsset' => 'Сметки за активи по подразбиране', - 'opt_group_savingAsset' => 'Спестовни сметки', - 'opt_group_sharedAsset' => 'Сметки за споделени активи', - 'opt_group_ccAsset' => 'Кредитни карти', - 'opt_group_cashWalletAsset' => 'Парични портфейли', - 'opt_group_expense_account' => 'Сметки за разходи', - 'opt_group_revenue_account' => 'Сметки за приходи', - 'opt_group_l_Loan' => 'Задължение: Заем', - 'opt_group_cash_account' => 'Касова сметка', - 'opt_group_l_Debt' => 'Задължение: Дълг', - 'opt_group_l_Mortgage' => 'Задължение: Ипотека', - 'opt_group_l_Credit card' => 'Задължение: Кредитна карта', - 'notes' => 'Бележки', - 'unknown_journal_error' => 'Транзакцията не можа да се запази. Моля проверете лог файловете.', - 'attachment_not_found' => 'Този прикачен файл не можа да бъде намерен.', - 'journal_link_bill' => 'Тази транзакция е свързана със сметка :name . За да изтриете връзката, премахнете отметката от квадратчето. Използвайте правила, за да я свържете с друга сметка.', - 'transaction_stored_link' => 'Транзакция #{ID}("{title}") беше записана.', - 'transaction_new_stored_link' => 'Транзакция #{ID} беше записана.', - 'transaction_updated_link' => 'Транзакция #{ID} ("{title}") беше обновена.', - 'transaction_updated_no_changes' => 'Транзакция #{ID} ("{title}") не е получила промени.', - 'first_split_decides' => 'Първия раздел определя стойността на това поле', - 'first_split_overrules_source' => 'Първия раздел може да отмени разходната сметка', - 'first_split_overrules_destination' => 'Първия раздел може да отмени приходната сметка', - 'spent_x_of_y' => 'Похарчено е {amount} от {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Обнови тегленето', + 'update_deposit' => 'Обнови депозита', + 'update_transaction' => 'Обнови транзакцията', + 'update_transfer' => 'Обнови прехвърлянето', + 'updated_withdrawal' => 'Тегленето ":description" бе обновено', + 'updated_deposit' => 'Депозитът ":description" бе обновен', + 'updated_transfer' => 'Прехвърлянето ":description" бе обновено', + 'no_changes_withdrawal' => 'Теглене ":description" не беше променено.', + 'no_changes_deposit' => 'Депозит ":description" не беше променен.', + 'no_changes_transfer' => 'Прехвърляне ":description" не беше променено.', + 'delete_withdrawal' => 'Изтрий тегленето ":description"', + 'delete_deposit' => 'Изтрий депозита ":description"', + 'delete_transfer' => 'Изтрий прехвърлянето ":description"', + 'deleted_withdrawal' => 'Тегленето ":description" бе успешно изтрито', + 'deleted_deposit' => 'Депозитът ":description" бе успешно изтрит', + 'deleted_transfer' => 'Прехвърлянето ":description" бе успешно изтрито', + 'deleted_reconciliation' => 'Транзакцията за съгласуване ":description" бе успешно изтрита', + 'stored_journal' => 'Успешно създадена нова транзакция ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Новата ви транзакция бе успешно създадена', + 'updated_journal_no_descr' => 'Транзакция бе успешно обновена', + 'select_transactions' => 'Избери транзакции', + 'rule_group_select_transactions' => 'Прилагайте ":title" към транзакции', + 'rule_select_transactions' => 'Прилагайте ":title" към транзакции', + 'stop_selection' => 'Спрете да избирате транзакции', + 'reconcile_selected' => 'Съгласувай', + 'mass_delete_journals' => 'Изтрийте няколко транзакции', + 'mass_edit_journals' => 'Обновете няколко транзакции', + 'mass_bulk_journals' => 'Групова редакция на няколко транзакции', + 'mass_bulk_journals_explain' => 'Тази форма ви позволява да промените свойствата на транзакциите по-долу, в една бърза актуализация. Всички транзакции в таблицата ще се обновят, когато промените параметрите, които виждате тук.', + 'part_of_split' => 'Тази транзакция е част от разделена транзакция. Ако не сте избрали всички разделяния, може да завършите с промяна само на половината транзакция.', + 'bulk_set_new_values' => 'Използвайте полетата по-долу за да зададете нови стойности. Ако ги оставите празни, то всички ще станат празни. Също така имайте предвид, че ще бъде зададен бюджет само за тегленията.', + 'no_bulk_category' => 'Не обновявай категорията', + 'no_bulk_budget' => 'Не обновявай бюджета', + 'no_bulk_tags' => 'Не обновявай етикетите', + 'replace_with_these_tags' => 'Замести с тези етикети', + 'append_these_tags' => 'Допълни тези етикети', + 'mass_edit' => 'Редактирай избраното самостоятелно', + 'bulk_edit' => 'Редактирай избраното групово', + 'mass_delete' => 'Изтрий избраното', + 'cannot_edit_other_fields' => 'Не можете да редактирате групово други полета освен следните, защото няма място за показването им. Моля последвайте връзката и ги редактирайте едно по едно, ако трябва да редактирате тези полета.', + 'cannot_change_amount_reconciled' => 'Не можете да промените сумата на съгласуваните транзакции.', + 'no_budget' => '(без бюджет)', + 'no_bill' => '(няма сметка)', + 'account_per_budget' => 'Сметка по бюджет', + 'account_per_category' => 'Сметка по категория', + 'create_new_object' => 'Създай', + 'empty' => '(празно)', + 'all_other_budgets' => '(всички други бюджети)', + 'all_other_accounts' => '(всички други сметки)', + 'expense_per_source_account' => 'Разходи по разходна сметка', + 'expense_per_destination_account' => 'Разходи по приходна сметка', + 'income_per_destination_account' => 'Приходи по приходна сметка', + 'spent_in_specific_category' => 'Похарчени в категория ":category"', + 'earned_in_specific_category' => 'Получени в категория ":category"', + 'spent_in_specific_tag' => 'Похарчени с етикет ":tag"', + 'earned_in_specific_tag' => 'Получени с етикет ":tag"', + 'income_per_source_account' => 'Приходи по разходна сметка', + 'average_spending_per_destination' => 'Среден разход по приходна сметка', + 'average_spending_per_source' => 'Среден разход по разходна сметка', + 'average_earning_per_source' => 'Среден приход по разходна сметка', + 'average_earning_per_destination' => 'Среден приход по разходна сметка', + 'account_per_tag' => 'Сметка по етикет', + 'tag_report_expenses_listed_once' => 'Разходите и доходите никога не са посочени два пъти. Ако транзакцията има множество етикети, тя може да се показва само под един от нейните етикети. В този списък може да изглежда че липсват данни, но сумите ще бъдат правилни.', + 'double_report_expenses_charted_once' => 'Разходите и доходите никога не са посочени два пъти. Ако транзакцията има множество етикети, тя може да се показва само под един от нейните етикети. В тази графика може да изглежда че липсват данни, но сумите ще бъдат правилни.', + 'tag_report_chart_single_tag' => 'Тази графика се отнася за един етикет. Ако транзакция има множество етикети, това което виждате тук, може да бъде отразено и в графиките на други етикети.', + 'tag' => 'Етикет', + 'no_budget_squared' => '(без бюджет)', + 'perm-delete-many' => 'Изтриването на много елементи с едно действие може да бъде много разрушително. Моля бъдете внимателни. Възможно е да изтриете част от разделена транзакция на тази страница, така че внимавайте.', + 'mass_deleted_transactions_success' => 'Изтрита :count транзакция.|Изтрити :count транзакции.', + 'mass_edited_transactions_success' => 'Обновена :count транзакция.|Обновени :count транзакции.', + 'opt_group_' => '(без тип сметка)', + 'opt_group_no_account_type' => '(без тип сметка)', + 'opt_group_defaultAsset' => 'Сметки за активи по подразбиране', + 'opt_group_savingAsset' => 'Спестовни сметки', + 'opt_group_sharedAsset' => 'Сметки за споделени активи', + 'opt_group_ccAsset' => 'Кредитни карти', + 'opt_group_cashWalletAsset' => 'Парични портфейли', + 'opt_group_expense_account' => 'Сметки за разходи', + 'opt_group_revenue_account' => 'Сметки за приходи', + 'opt_group_l_Loan' => 'Задължение: Заем', + 'opt_group_cash_account' => 'Касова сметка', + 'opt_group_l_Debt' => 'Задължение: Дълг', + 'opt_group_l_Mortgage' => 'Задължение: Ипотека', + 'opt_group_l_Credit card' => 'Задължение: Кредитна карта', + 'notes' => 'Бележки', + 'unknown_journal_error' => 'Транзакцията не можа да се запази. Моля проверете лог файловете.', + 'attachment_not_found' => 'Този прикачен файл не можа да бъде намерен.', + 'journal_link_bill' => 'Тази транзакция е свързана със сметка :name . За да изтриете връзката, премахнете отметката от квадратчето. Използвайте правила, за да я свържете с друга сметка.', + 'transaction_stored_link' => 'Транзакция #{ID}("{title}") беше записана.', + 'transaction_new_stored_link' => 'Транзакция #{ID} беше записана.', + 'transaction_updated_link' => 'Транзакция #{ID} ("{title}") беше обновена.', + 'transaction_updated_no_changes' => 'Транзакция #{ID} ("{title}") не е получила промени.', + 'first_split_decides' => 'Първия раздел определя стойността на това поле', + 'first_split_overrules_source' => 'Първия раздел може да отмени разходната сметка', + 'first_split_overrules_destination' => 'Първия раздел може да отмени приходната сметка', + 'spent_x_of_y' => 'Похарчено е {amount} от {total}', // new user: - 'welcome' => 'Добре дошли в Firefly III!', - 'submit' => 'Потвърди', - 'submission' => 'Изпращане', - 'submit_yes_really' => 'Потвърди (знам какво правя)', - 'getting_started' => 'Начални стъпки', - 'to_get_started' => 'Хубаво е да видите, че успешно сте инсталирали Firefly III. За да започнете с този инструмент, моля въведете името на вашата банка и салдото на основната си сметка. Не се притеснявайте, ако имате няколко сметки. Можете да ги добавите по-късно. Просто Firefly III се нуждае от нещо, с което да започне.', - 'savings_balance_text' => 'Firefly III автоматично ще ви създаде спестовна сметка. По подразбиране няма да има пари в спестовната ви сметка, но ако кажете на Firefly III салдото, то ще се съхрани като начално.', - 'finish_up_new_user' => 'Това е! Можете да продължите, като натиснете Потвърди. Ще бъдете отведени до индекса на Firefly III.', - 'stored_new_accounts_new_user' => 'Супер! Вашите нови сметки са съхранени.', - 'set_preferred_language' => 'Ако предпочитате да използвате Firefly III на друг език, моля посочете го тук.', - 'language' => 'Език', - 'new_savings_account' => ':bank_name спестовна сметка', - 'cash_wallet' => 'Паричен портфейл', - 'currency_not_present' => 'Не се притеснявайте, ако валутата която обикновено използвате не е посочена. Можете да създадете свои собствени валути в Опции> Валути.', + 'welcome' => 'Добре дошли в Firefly III!', + 'submit' => 'Потвърди', + 'submission' => 'Изпращане', + 'submit_yes_really' => 'Потвърди (знам какво правя)', + 'getting_started' => 'Начални стъпки', + 'to_get_started' => 'Хубаво е да видите, че успешно сте инсталирали Firefly III. За да започнете с този инструмент, моля въведете името на вашата банка и салдото на основната си сметка. Не се притеснявайте, ако имате няколко сметки. Можете да ги добавите по-късно. Просто Firefly III се нуждае от нещо, с което да започне.', + 'savings_balance_text' => 'Firefly III автоматично ще ви създаде спестовна сметка. По подразбиране няма да има пари в спестовната ви сметка, но ако кажете на Firefly III салдото, то ще се съхрани като начално.', + 'finish_up_new_user' => 'Това е! Можете да продължите, като натиснете Потвърди. Ще бъдете отведени до индекса на Firefly III.', + 'stored_new_accounts_new_user' => 'Супер! Вашите нови сметки са съхранени.', + 'set_preferred_language' => 'Ако предпочитате да използвате Firefly III на друг език, моля посочете го тук.', + 'language' => 'Език', + 'new_savings_account' => ':bank_name спестовна сметка', + 'cash_wallet' => 'Паричен портфейл', + 'currency_not_present' => 'Не се притеснявайте, ако валутата която обикновено използвате не е посочена. Можете да създадете свои собствени валути в Опции> Валути.', // home page: - 'transaction_table_description' => 'Таблица съдържаща вашите транзакции', - 'opposing_account' => 'Противоположна сметка', - 'yourAccounts' => 'Вашите сметки', - 'your_accounts' => 'Общ преглед на вашата сметка', - 'category_overview' => 'Общ преглед на категория', - 'expense_overview' => 'Общ преглед на разходна сметка', - 'revenue_overview' => 'Общ преглед на приходна сметка', - 'budgetsAndSpending' => 'Бюджети и разходи', - 'budgets_and_spending' => 'Бюджети и разходи', - 'go_to_budget' => 'Отиди на бюджет "{budget}"', - 'go_to_deposits' => 'Отиди в депозити', - 'go_to_expenses' => 'Отиди в Разходи ', - 'savings' => 'Спестявания', - 'newWithdrawal' => 'Нов разход', - 'newDeposit' => 'Нов депозит', - 'newTransfer' => 'Ново прехвърляне', - 'bills_to_pay' => 'Сметки за плащане', - 'per_day' => 'На ден', - 'left_to_spend_per_day' => 'Остава за разходи на ден', - 'bills_paid' => 'Платени сметки', - 'custom_period' => 'Период по избор', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Избор на период', + 'transaction_table_description' => 'Таблица съдържаща вашите транзакции', + 'opposing_account' => 'Противоположна сметка', + 'yourAccounts' => 'Вашите сметки', + 'your_accounts' => 'Общ преглед на вашата сметка', + 'category_overview' => 'Общ преглед на категория', + 'expense_overview' => 'Общ преглед на разходна сметка', + 'revenue_overview' => 'Общ преглед на приходна сметка', + 'budgetsAndSpending' => 'Бюджети и разходи', + 'budgets_and_spending' => 'Бюджети и разходи', + 'go_to_budget' => 'Отиди на бюджет "{budget}"', + 'go_to_deposits' => 'Отиди в депозити', + 'go_to_expenses' => 'Отиди в Разходи ', + 'savings' => 'Спестявания', + 'newWithdrawal' => 'Нов разход', + 'newDeposit' => 'Нов депозит', + 'newTransfer' => 'Ново прехвърляне', + 'bills_to_pay' => 'Сметки за плащане', + 'per_day' => 'На ден', + 'left_to_spend_per_day' => 'Остава за разходи на ден', + 'bills_paid' => 'Платени сметки', + 'custom_period' => 'Период по избор', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Избор на период', // menu and titles, should be recycled as often as possible: - 'currency' => 'Валута', - 'preferences' => 'Настройки', - 'logout' => 'Изход', - 'logout_other_sessions' => 'Изход от всички други сесии', - 'toggleNavigation' => 'Превключване на навигацията', - 'searchPlaceholder' => 'Търсене...', - 'version' => 'Версия', - 'dashboard' => 'Основно табло', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Наличен бюджет ({currency})', - 'currencies' => 'Валути', - 'activity' => 'Дейност', - 'usage' => 'Използване', - 'accounts' => 'Сметки', - 'Asset account' => 'Сметка за активи', - 'Default account' => 'Сметка за активи', - 'Expense account' => 'Сметка за разходи', - 'Revenue account' => 'Сметка за приходи', - 'Initial balance account' => 'Първоначално салдо на сметка', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Дълг', - 'account_type_Loan' => 'Заем', - 'account_type_Mortgage' => 'Ипотека', - 'account_type_debt' => 'Дълг', - 'account_type_loan' => 'Заем', - 'account_type_mortgage' => 'Ипотека', - 'account_type_Credit card' => 'Кредитна карта', - 'credit_card_type_monthlyFull' => 'Пълно плащане всеки месец', - 'liability_direction_credit' => 'Дължът ми този дълг', - 'liability_direction_debit' => 'Дължа този дълг на някого', - 'liability_direction_credit_short' => 'Дължът ми дълг', - 'liability_direction_debit_short' => 'Дължа дълг', - 'liability_direction__short' => 'Неизвестно', - 'liability_direction_null_short' => 'Неизвестно', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Бюджети', - 'tags' => 'Етикети', - 'reports' => 'Отчети', - 'transactions' => 'Транзакции', - 'expenses' => 'Разходи', - 'income' => 'Приходи', - 'transfers' => 'Прехвърляния', - 'moneyManagement' => 'Управление на финансите', - 'money_management' => 'Управление на финансите', - 'tools' => 'Инструменти', - 'piggyBanks' => 'Касички', - 'piggy_banks' => 'Касички', - 'amount_x_of_y' => '{current} от {total}', - 'bills' => 'Сметки', - 'withdrawal' => 'Теглене', - 'opening_balance' => 'Начално салдо', - 'deposit' => 'Депозит', - 'account' => 'Сметка', - 'transfer' => 'Прехвърляне', - 'Withdrawal' => 'Теглене', - 'Deposit' => 'Депозит', - 'Transfer' => 'Прехвърляне', - 'bill' => 'Сметка', - 'yes' => 'Да', - 'no' => 'Не', - 'amount' => 'Сума', - 'overview' => 'Общ преглед', - 'saveOnAccount' => 'Спести в сметка', - 'unknown' => 'Неизвестно', - 'monthly' => 'Месечно', - 'profile' => 'Профил', - 'errors' => 'Грешки', - 'debt_start_date' => 'Начална дата на дълга', - 'debt_start_amount' => 'Начална сума на дълга', - 'debt_start_amount_help' => 'Винаги е най-добре да зададете тази стойност на отрицателна сума. Прочетете страниците за помощ (горе вдясно (?) - икона) за повече информация.', - 'interest_period_help' => 'Това поле е чисто козметично и няма да бъде изчислено за вас. Както се оказва, банките са много подъл, така че Firefly III никога не се оправя.', - 'store_new_liabilities_account' => 'Запамети ново задължение', - 'edit_liabilities_account' => 'Редактирай задължение ":name"', - 'financial_control' => 'Финансов контрол', - 'accounting' => 'Счетоводство', - 'automation' => 'Автоматизация', - 'others' => 'Други', - 'classification' => 'Класификация', - 'store_transaction' => 'Запазете транзакция', + 'currency' => 'Валута', + 'preferences' => 'Настройки', + 'logout' => 'Изход', + 'logout_other_sessions' => 'Изход от всички други сесии', + 'toggleNavigation' => 'Превключване на навигацията', + 'searchPlaceholder' => 'Търсене...', + 'version' => 'Версия', + 'dashboard' => 'Основно табло', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Наличен бюджет ({currency})', + 'currencies' => 'Валути', + 'activity' => 'Дейност', + 'usage' => 'Използване', + 'accounts' => 'Сметки', + 'Asset account' => 'Сметка за активи', + 'Default account' => 'Сметка за активи', + 'Expense account' => 'Сметка за разходи', + 'Revenue account' => 'Сметка за приходи', + 'Initial balance account' => 'Първоначално салдо на сметка', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Дълг', + 'account_type_Loan' => 'Заем', + 'account_type_Mortgage' => 'Ипотека', + 'account_type_debt' => 'Дълг', + 'account_type_loan' => 'Заем', + 'account_type_mortgage' => 'Ипотека', + 'account_type_Credit card' => 'Кредитна карта', + 'credit_card_type_monthlyFull' => 'Пълно плащане всеки месец', + 'liability_direction_credit' => 'Дължът ми този дълг', + 'liability_direction_debit' => 'Дължа този дълг на някого', + 'liability_direction_credit_short' => 'Дължът ми дълг', + 'liability_direction_debit_short' => 'Дължа дълг', + 'liability_direction__short' => 'Неизвестно', + 'liability_direction_null_short' => 'Неизвестно', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Бюджети', + 'tags' => 'Етикети', + 'reports' => 'Отчети', + 'transactions' => 'Транзакции', + 'expenses' => 'Разходи', + 'income' => 'Приходи', + 'transfers' => 'Прехвърляния', + 'moneyManagement' => 'Управление на финансите', + 'money_management' => 'Управление на финансите', + 'tools' => 'Инструменти', + 'piggyBanks' => 'Касички', + 'piggy_banks' => 'Касички', + 'amount_x_of_y' => '{current} от {total}', + 'bills' => 'Сметки', + 'withdrawal' => 'Теглене', + 'opening_balance' => 'Начално салдо', + 'deposit' => 'Депозит', + 'account' => 'Сметка', + 'transfer' => 'Прехвърляне', + 'Withdrawal' => 'Теглене', + 'Deposit' => 'Депозит', + 'Transfer' => 'Прехвърляне', + 'bill' => 'Сметка', + 'yes' => 'Да', + 'no' => 'Не', + 'amount' => 'Сума', + 'overview' => 'Общ преглед', + 'saveOnAccount' => 'Спести в сметка', + 'unknown' => 'Неизвестно', + 'monthly' => 'Месечно', + 'profile' => 'Профил', + 'errors' => 'Грешки', + 'debt_start_date' => 'Начална дата на дълга', + 'debt_start_amount' => 'Начална сума на дълга', + 'debt_start_amount_help' => 'Винаги е най-добре да зададете тази стойност на отрицателна сума. Прочетете страниците за помощ (горе вдясно (?) - икона) за повече информация.', + 'interest_period_help' => 'Това поле е чисто козметично и няма да бъде изчислено за вас. Както се оказва, банките са много подъл, така че Firefly III никога не се оправя.', + 'store_new_liabilities_account' => 'Запамети ново задължение', + 'edit_liabilities_account' => 'Редактирай задължение ":name"', + 'financial_control' => 'Финансов контрол', + 'accounting' => 'Счетоводство', + 'automation' => 'Автоматизация', + 'others' => 'Други', + 'classification' => 'Класификация', + 'store_transaction' => 'Запазете транзакция', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Финансов отчет по подразбиране между :start и :end', - 'report_audit' => 'Преглед на историята на транзакциите между :start и :end', - 'report_category' => 'Отчет по категория между :start и :end', - 'report_double' => 'Отчет Разходи / Сметка за приходи между :start и :end', - 'report_budget' => 'Отчет по бюджет между :start и :end', - 'report_tag' => 'Отчет по етикет между :start и :end', - 'quick_link_reports' => 'Бързи връзки', - 'quick_link_examples' => 'Това са само някои примерни връзки, за да започнете. Разгледайте страниците за помощ под бутона (?) за информация относно всички отчети и "вълшебните" думи, които можете да използвате.', - 'quick_link_default_report' => 'Финансов отчет по подразбиране', - 'quick_link_audit_report' => 'Преглед на историята на транзакциите', - 'report_this_month_quick' => 'Текущ месец, всички сметки', - 'report_last_month_quick' => 'Миналия месец, всички сметки', - 'report_this_year_quick' => 'Текуща година, всички сметки', - 'report_this_fiscal_year_quick' => 'Текуща финансова година, всички сметки', - 'report_all_time_quick' => 'За цялото време, всички сметки', - 'reports_can_bookmark' => 'Не забравяйте, че на отчетите могат да бъдат поставени отметки.', - 'incomeVsExpenses' => 'Приход срещу разходи', - 'accountBalances' => 'Салда по сметки', - 'balanceStart' => 'Салдо в началото на периода', - 'balanceEnd' => 'Салдо в края на периода', - 'splitByAccount' => 'Раздели по сметка', - 'coveredWithTags' => 'Покрити с етикети', - 'leftInBudget' => 'Останало в бюджета', - 'left_in_debt' => 'Дължима сума', - 'sumOfSums' => 'Сума от суми', - 'noCategory' => '(без категория)', - 'notCharged' => 'Не е таксувано (все още)', - 'inactive' => 'Неактивно', - 'active' => 'Активно', - 'difference' => 'Разлика', - 'money_flowing_in' => 'Входящи', - 'money_flowing_out' => 'Изходящи', - 'topX' => 'топ :number', - 'show_full_list' => 'Показване на целия списък', - 'show_only_top' => 'Покажи само топ :number', - 'report_type' => 'Тип на отчета', - 'report_type_default' => 'Финансов отчет по подразбиране', - 'report_type_audit' => 'Преглед на историята на транзакциите (проверка)', - 'report_type_category' => 'Отчет по категория', - 'report_type_budget' => 'Отчет по бюджет', - 'report_type_tag' => 'Отчет по етикет', - 'report_type_double' => 'Отчет по сметка за разходи / приходи', - 'more_info_help' => 'Повече информация за тези видове отчети можете да намерите в помощните страници. Натиснете иконата (?) в горния десен ъгъл.', - 'report_included_accounts' => 'Включени сметки', - 'report_date_range' => 'Период', - 'report_preset_ranges' => 'Предварително зададени периоди', - 'shared' => 'Споделени', - 'fiscal_year' => 'Фискална година', - 'income_entry' => 'Приход от сметка ":name" между :start и :end', - 'expense_entry' => 'Разход по сметка ":name" между :start и :end', - 'category_entry' => 'Разходи и приходи в категория ":name" между :start и :end', - 'budget_spent_amount' => 'Разходи в бюджет ":budget" между :start и :end', - 'balance_amount' => 'Разходи в бюджет ":budget" платени от сметка ":account" между :start и :end', - 'no_audit_activity' => 'Няма регистрирана активност в сметка :account_name между :start и :end.', - 'audit_end_balance' => 'Салдото по сметка :account_nameв края на :end беше :balance', - 'reports_extra_options' => 'Допълнителни опции', - 'report_has_no_extra_options' => 'Този отчет няма допълнителни опции', - 'reports_submit' => 'Виж отчета', - 'end_after_start_date' => 'Крайната дата на отчета трябва да бъде след началната дата.', - 'select_category' => 'Изберете категория(и)', - 'select_budget' => 'Изберете бюджет(и).', - 'select_tag' => 'Изберете етикет(и).', - 'income_per_category' => 'Приходи по категория', - 'expense_per_category' => 'Разходи по категория', - 'expense_per_budget' => 'Разходи по бюджет', - 'income_per_account' => 'Приходи по сметка', - 'expense_per_account' => 'Разходи по сметка', - 'expense_per_tag' => 'Разходи по етикет', - 'income_per_tag' => 'Приход по етикет', - 'include_expense_not_in_budget' => 'Включени разходи, които не са в избрания(те) бюджет(и)', - 'include_expense_not_in_account' => 'Включени разходи, които не са в избраната(ите) сметка(и)', - 'include_expense_not_in_category' => 'Включени разходи, които не са в избраната(ите) категория(и)', - 'include_income_not_in_category' => 'Включени приходи, които не са в избраната(ите) категория(и)', - 'include_income_not_in_account' => 'Включени приходи, които не са в избраната(ите) сметка(и)', - 'include_income_not_in_tags' => 'Включени приходи, които не са с избрания(те) етикет(и)', - 'include_expense_not_in_tags' => 'Включени разходи, които не са с избрания(те) етикет(и)', - 'everything_else' => 'Други', - 'income_and_expenses' => 'Приходи и разходи', - 'spent_average' => 'Похарчени (средно)', - 'income_average' => 'Доход (средно)', - 'transaction_count' => 'Брой транзакции', - 'average_spending_per_account' => 'Средни разходи по сметка', - 'average_income_per_account' => 'Средни приходи по сметка', - 'total' => 'Общо', - 'description' => 'Описание', - 'sum_of_period' => 'Сума за периода', - 'average_in_period' => 'Средно за периода', - 'account_role_defaultAsset' => 'Сметка за активи по подразбиране', - 'account_role_sharedAsset' => 'Сметка за споделени активи', - 'account_role_savingAsset' => 'Спестовна сметка', - 'account_role_ccAsset' => 'Кредитна карта', - 'account_role_cashWalletAsset' => 'Паричен портфейл', - 'budget_chart_click' => 'Моля кликнете върху име на бюджет в таблицата по-горе, за да видите графика.', - 'category_chart_click' => 'Моля кликнете върху име на категория в таблицата по-горе, за да видите графика.', - 'in_out_accounts' => 'Спечелени и похарчени по комбинация', - 'in_out_accounts_per_asset' => 'Спечелени и похарчени (по сметка за активи)', - 'in_out_per_category' => 'Спечелени и похарчени по категория', - 'out_per_budget' => 'Похарчени по бюджет', - 'select_expense_revenue' => 'Изберете сметка за Разходи / Приходи', - 'multi_currency_report_sum' => 'Тъй като този списък съдържа сметки с няколко валути, сумата (ите) която виждате може да няма смисъл. Отчетът винаги ще се връща към вашата валута по подразбиране.', - 'sum_in_default_currency' => 'Сумата винаги ще бъде във вашата валута по подразбиране.', - 'net_filtered_prefs' => 'Тази графика никога няма да включва сметки, при които в опцията „Включи в нетната стойност“ не е поставена отметка.', + 'report_default' => 'Финансов отчет по подразбиране между :start и :end', + 'report_audit' => 'Преглед на историята на транзакциите между :start и :end', + 'report_category' => 'Отчет по категория между :start и :end', + 'report_double' => 'Отчет Разходи / Сметка за приходи между :start и :end', + 'report_budget' => 'Отчет по бюджет между :start и :end', + 'report_tag' => 'Отчет по етикет между :start и :end', + 'quick_link_reports' => 'Бързи връзки', + 'quick_link_examples' => 'Това са само някои примерни връзки, за да започнете. Разгледайте страниците за помощ под бутона (?) за информация относно всички отчети и "вълшебните" думи, които можете да използвате.', + 'quick_link_default_report' => 'Финансов отчет по подразбиране', + 'quick_link_audit_report' => 'Преглед на историята на транзакциите', + 'report_this_month_quick' => 'Текущ месец, всички сметки', + 'report_last_month_quick' => 'Миналия месец, всички сметки', + 'report_this_year_quick' => 'Текуща година, всички сметки', + 'report_this_fiscal_year_quick' => 'Текуща финансова година, всички сметки', + 'report_all_time_quick' => 'За цялото време, всички сметки', + 'reports_can_bookmark' => 'Не забравяйте, че на отчетите могат да бъдат поставени отметки.', + 'incomeVsExpenses' => 'Приход срещу разходи', + 'accountBalances' => 'Салда по сметки', + 'balanceStart' => 'Салдо в началото на периода', + 'balanceEnd' => 'Салдо в края на периода', + 'splitByAccount' => 'Раздели по сметка', + 'coveredWithTags' => 'Покрити с етикети', + 'leftInBudget' => 'Останало в бюджета', + 'left_in_debt' => 'Дължима сума', + 'sumOfSums' => 'Сума от суми', + 'noCategory' => '(без категория)', + 'notCharged' => 'Не е таксувано (все още)', + 'inactive' => 'Неактивно', + 'active' => 'Активно', + 'difference' => 'Разлика', + 'money_flowing_in' => 'Входящи', + 'money_flowing_out' => 'Изходящи', + 'topX' => 'топ :number', + 'show_full_list' => 'Показване на целия списък', + 'show_only_top' => 'Покажи само топ :number', + 'report_type' => 'Тип на отчета', + 'report_type_default' => 'Финансов отчет по подразбиране', + 'report_type_audit' => 'Преглед на историята на транзакциите (проверка)', + 'report_type_category' => 'Отчет по категория', + 'report_type_budget' => 'Отчет по бюджет', + 'report_type_tag' => 'Отчет по етикет', + 'report_type_double' => 'Отчет по сметка за разходи / приходи', + 'more_info_help' => 'Повече информация за тези видове отчети можете да намерите в помощните страници. Натиснете иконата (?) в горния десен ъгъл.', + 'report_included_accounts' => 'Включени сметки', + 'report_date_range' => 'Период', + 'report_preset_ranges' => 'Предварително зададени периоди', + 'shared' => 'Споделени', + 'fiscal_year' => 'Фискална година', + 'income_entry' => 'Приход от сметка ":name" между :start и :end', + 'expense_entry' => 'Разход по сметка ":name" между :start и :end', + 'category_entry' => 'Разходи и приходи в категория ":name" между :start и :end', + 'budget_spent_amount' => 'Разходи в бюджет ":budget" между :start и :end', + 'balance_amount' => 'Разходи в бюджет ":budget" платени от сметка ":account" между :start и :end', + 'no_audit_activity' => 'Няма регистрирана активност в сметка :account_name между :start и :end.', + 'audit_end_balance' => 'Салдото по сметка :account_nameв края на :end беше :balance', + 'reports_extra_options' => 'Допълнителни опции', + 'report_has_no_extra_options' => 'Този отчет няма допълнителни опции', + 'reports_submit' => 'Виж отчета', + 'end_after_start_date' => 'Крайната дата на отчета трябва да бъде след началната дата.', + 'select_category' => 'Изберете категория(и)', + 'select_budget' => 'Изберете бюджет(и).', + 'select_tag' => 'Изберете етикет(и).', + 'income_per_category' => 'Приходи по категория', + 'expense_per_category' => 'Разходи по категория', + 'expense_per_budget' => 'Разходи по бюджет', + 'income_per_account' => 'Приходи по сметка', + 'expense_per_account' => 'Разходи по сметка', + 'expense_per_tag' => 'Разходи по етикет', + 'income_per_tag' => 'Приход по етикет', + 'include_expense_not_in_budget' => 'Включени разходи, които не са в избрания(те) бюджет(и)', + 'include_expense_not_in_account' => 'Включени разходи, които не са в избраната(ите) сметка(и)', + 'include_expense_not_in_category' => 'Включени разходи, които не са в избраната(ите) категория(и)', + 'include_income_not_in_category' => 'Включени приходи, които не са в избраната(ите) категория(и)', + 'include_income_not_in_account' => 'Включени приходи, които не са в избраната(ите) сметка(и)', + 'include_income_not_in_tags' => 'Включени приходи, които не са с избрания(те) етикет(и)', + 'include_expense_not_in_tags' => 'Включени разходи, които не са с избрания(те) етикет(и)', + 'everything_else' => 'Други', + 'income_and_expenses' => 'Приходи и разходи', + 'spent_average' => 'Похарчени (средно)', + 'income_average' => 'Доход (средно)', + 'transaction_count' => 'Брой транзакции', + 'average_spending_per_account' => 'Средни разходи по сметка', + 'average_income_per_account' => 'Средни приходи по сметка', + 'total' => 'Общо', + 'description' => 'Описание', + 'sum_of_period' => 'Сума за периода', + 'average_in_period' => 'Средно за периода', + 'account_role_defaultAsset' => 'Сметка за активи по подразбиране', + 'account_role_sharedAsset' => 'Сметка за споделени активи', + 'account_role_savingAsset' => 'Спестовна сметка', + 'account_role_ccAsset' => 'Кредитна карта', + 'account_role_cashWalletAsset' => 'Паричен портфейл', + 'budget_chart_click' => 'Моля кликнете върху име на бюджет в таблицата по-горе, за да видите графика.', + 'category_chart_click' => 'Моля кликнете върху име на категория в таблицата по-горе, за да видите графика.', + 'in_out_accounts' => 'Спечелени и похарчени по комбинация', + 'in_out_accounts_per_asset' => 'Спечелени и похарчени (по сметка за активи)', + 'in_out_per_category' => 'Спечелени и похарчени по категория', + 'out_per_budget' => 'Похарчени по бюджет', + 'select_expense_revenue' => 'Изберете сметка за Разходи / Приходи', + 'multi_currency_report_sum' => 'Тъй като този списък съдържа сметки с няколко валути, сумата (ите) която виждате може да няма смисъл. Отчетът винаги ще се връща към вашата валута по подразбиране.', + 'sum_in_default_currency' => 'Сумата винаги ще бъде във вашата валута по подразбиране.', + 'net_filtered_prefs' => 'Тази графика никога няма да включва сметки, при които в опцията „Включи в нетната стойност“ не е поставена отметка.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Графика', - 'month' => 'Месец', - 'budget' => 'Бюджет', - 'spent' => 'Похарчени', - 'spent_capped' => 'Похарчени (ограничени)', - 'spent_in_budget' => 'Похарчени в бюджет', - 'left_to_spend' => 'Останали за харчене', - 'earned' => 'Спечелени', - 'overspent' => 'Преразход', - 'left' => 'Останали', - 'max-amount' => 'Максимална сума', - 'min-amount' => 'Минимална сума', - 'journal-amount' => 'Текущ запис на сметка', - 'name' => 'Име', - 'date' => 'Дата', - 'date_and_time' => 'Дата и час', - 'time' => 'Време', - 'paid' => 'Платени', - 'unpaid' => 'Неплатени', - 'day' => 'Ден', - 'budgeted' => 'Бюджетирани', - 'period' => 'Период', - 'balance' => 'Салдо', - 'in_out_period' => 'In + out this period', - 'sum' => 'Сума', - 'summary' => 'Обобщение', - 'average' => 'Средно', - 'balanceFor' => 'Салдо за :name', - 'no_tags' => '(без етикети)', + 'chart' => 'Графика', + 'month' => 'Месец', + 'budget' => 'Бюджет', + 'spent' => 'Похарчени', + 'spent_capped' => 'Похарчени (ограничени)', + 'spent_in_budget' => 'Похарчени в бюджет', + 'left_to_spend' => 'Останали за харчене', + 'earned' => 'Спечелени', + 'overspent' => 'Преразход', + 'left' => 'Останали', + 'max-amount' => 'Максимална сума', + 'min-amount' => 'Минимална сума', + 'journal-amount' => 'Текущ запис на сметка', + 'name' => 'Име', + 'date' => 'Дата', + 'date_and_time' => 'Дата и час', + 'time' => 'Време', + 'paid' => 'Платени', + 'unpaid' => 'Неплатени', + 'day' => 'Ден', + 'budgeted' => 'Бюджетирани', + 'period' => 'Период', + 'balance' => 'Салдо', + 'in_out_period' => 'In + out this period', + 'sum' => 'Сума', + 'summary' => 'Обобщение', + 'average' => 'Средно', + 'balanceFor' => 'Салдо за :name', + 'no_tags' => '(без етикети)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Добавете пари към касичка ":name"', - 'piggy_bank' => 'Касичка', - 'new_piggy_bank' => 'Нова касичка', - 'store_piggy_bank' => 'Запази новата касичка', - 'stored_piggy_bank' => 'Запази новата касичка ":name"', - 'account_status' => 'Състояние на сметка', - 'left_for_piggy_banks' => 'Остава за касичките', - 'sum_of_piggy_banks' => 'Сума на касичките', - 'saved_so_far' => 'Спестени до сега', - 'left_to_save' => 'Остава да се спестят', - 'suggested_amount' => 'Предложена месечна сума за спестяване', - 'add_money_to_piggy_title' => 'Добавете пари към касичка ":name"', - 'remove_money_from_piggy_title' => 'Извадете пари от касичка ":name"', - 'add' => 'Добави', - 'no_money_for_piggy' => 'Нямате пари да добавите в тази касичка.', - 'suggested_savings_per_month' => 'Предложено на месец', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Добавете пари към касичка ":name"', + 'piggy_bank' => 'Касичка', + 'new_piggy_bank' => 'Нова касичка', + 'store_piggy_bank' => 'Запази новата касичка', + 'stored_piggy_bank' => 'Запази новата касичка ":name"', + 'account_status' => 'Състояние на сметка', + 'left_for_piggy_banks' => 'Остава за касичките', + 'sum_of_piggy_banks' => 'Сума на касичките', + 'saved_so_far' => 'Спестени до сега', + 'left_to_save' => 'Остава да се спестят', + 'suggested_amount' => 'Предложена месечна сума за спестяване', + 'add_money_to_piggy_title' => 'Добавете пари към касичка ":name"', + 'remove_money_from_piggy_title' => 'Извадете пари от касичка ":name"', + 'add' => 'Добави', + 'no_money_for_piggy' => 'Нямате пари да добавите в тази касичка.', + 'suggested_savings_per_month' => 'Предложено на месец', - 'remove' => 'Премахни', - 'max_amount_add' => 'Максималната сума, която можете да добавите е', - 'max_amount_remove' => 'Максималната сума, която можете да извадите е', - 'update_piggy_button' => 'Редактирай касичка', - 'update_piggy_title' => 'Редактирай касичка ":name"', - 'updated_piggy_bank' => 'Редактирана касичка ":name"', - 'details' => 'Подробности', - 'events' => 'Събития', - 'target_amount' => 'Планирана сума', - 'start_date' => 'Начална дата', - 'no_start_date' => 'Няма начална дата', - 'target_date' => 'Целева дата', - 'no_target_date' => 'Няма целева дата', - 'table' => 'Таблица', - 'delete_piggy_bank' => 'Изтрий касичка ":name"', - 'cannot_add_amount_piggy' => 'Не можа да се добави :amount към ":name".', - 'cannot_remove_from_piggy' => 'Не можа да се извади :amount от ":name".', - 'deleted_piggy_bank' => 'Изтрита касичка ":name"', - 'added_amount_to_piggy' => 'Добавени :amount към ":name"', - 'removed_amount_from_piggy' => 'Извадени :amount към ":name"', - 'piggy_events' => 'Сродни касички', + 'remove' => 'Премахни', + 'max_amount_add' => 'Максималната сума, която можете да добавите е', + 'max_amount_remove' => 'Максималната сума, която можете да извадите е', + 'update_piggy_button' => 'Редактирай касичка', + 'update_piggy_title' => 'Редактирай касичка ":name"', + 'updated_piggy_bank' => 'Редактирана касичка ":name"', + 'details' => 'Подробности', + 'events' => 'Събития', + 'target_amount' => 'Планирана сума', + 'start_date' => 'Начална дата', + 'no_start_date' => 'Няма начална дата', + 'target_date' => 'Целева дата', + 'no_target_date' => 'Няма целева дата', + 'table' => 'Таблица', + 'delete_piggy_bank' => 'Изтрий касичка ":name"', + 'cannot_add_amount_piggy' => 'Не можа да се добави :amount към ":name".', + 'cannot_remove_from_piggy' => 'Не можа да се извади :amount от ":name".', + 'deleted_piggy_bank' => 'Изтрита касичка ":name"', + 'added_amount_to_piggy' => 'Добавени :amount към ":name"', + 'removed_amount_from_piggy' => 'Извадени :amount към ":name"', + 'piggy_events' => 'Сродни касички', // tags - 'delete_tag' => 'Изтрий етикет ":tag"', - 'deleted_tag' => 'Изтрит етикет ":tag"', - 'new_tag' => 'Създай нов етикет', - 'edit_tag' => 'Редактирай етикет ":tag"', - 'updated_tag' => 'Редактиран етикет ":tag"', - 'created_tag' => 'Етикет ":tag" беше създаден!', + 'delete_tag' => 'Изтрий етикет ":tag"', + 'deleted_tag' => 'Изтрит етикет ":tag"', + 'new_tag' => 'Създай нов етикет', + 'edit_tag' => 'Редактирай етикет ":tag"', + 'updated_tag' => 'Редактиран етикет ":tag"', + 'created_tag' => 'Етикет ":tag" беше създаден!', - 'transaction_journal_information' => 'Информация за транзакция', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Мета информация', - 'transaction_journal_more' => 'Повече информация', - 'basic_journal_information' => 'Основна информация за транзакция', - 'transaction_journal_extra' => 'Допълнителна информация', - 'att_part_of_journal' => 'Запазено като ":journal"', - 'total_amount' => 'Обща сума', - 'number_of_decimals' => 'Брой десетични знаци', + 'transaction_journal_information' => 'Информация за транзакция', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Мета информация', + 'transaction_journal_more' => 'Повече информация', + 'basic_journal_information' => 'Основна информация за транзакция', + 'transaction_journal_extra' => 'Допълнителна информация', + 'att_part_of_journal' => 'Запазено като ":journal"', + 'total_amount' => 'Обща сума', + 'number_of_decimals' => 'Брой десетични знаци', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Управление', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Управление на потребители', - 'list_all_users' => 'Всички потребители', - 'all_users' => 'Всички потребители', - 'instance_configuration' => 'Конфигурация', - 'firefly_instance_configuration' => 'Опции за конфигурация на Firefly III', - 'setting_single_user_mode' => 'Режим за един потребител', - 'setting_single_user_mode_explain' => 'По подразбиране Firefly III приема само една (1) регистрация: Вие. Това е мярка за сигурност предотвратяваща други да използват вашата инсталация, освен ако не им разрешите. Бъдещите регистрации са блокирани. Когато премахнете отметката от това поле и други ще могат да използват вашия инсталация, ако приемем че могат да я достигнат (когато е свързана с Интернет).', - 'store_configuration' => 'Запази конфигурацията', - 'single_user_administration' => 'Управление на потребителя за :email', - 'edit_user' => 'Редактиране на потребител :email', - 'hidden_fields_preferences' => 'Можете да активирате повече опции за транзакции във вашите настройки.', - 'user_data_information' => 'Данни на потребителя', - 'user_information' => 'Информация за потребителя', - 'total_size' => 'общ размер', - 'budget_or_budgets' => ':count бюджет|:count бюджети', - 'budgets_with_limits' => ':count бюджет с дефинирана сума|:count бюджети с дефинирани суми', - 'nr_of_rules_in_total_groups' => ':count_rules правило(а) и :count_groups група(и) правила', - 'tag_or_tags' => ':count етикет|:count етикети', - 'configuration_updated' => 'Настройките са обновени', - 'setting_is_demo_site' => 'Демо страница', - 'setting_is_demo_site_explain' => 'Ако поставите отметка в това поле, тази инсталация ще се държи така, сякаш това е демонстрационният сайт, което може да има странни странични ефекти.', - 'block_code_bounced' => 'Имейл съобщение(я) отскочиха', - 'block_code_expired' => 'Демо профилът изтече', - 'no_block_code' => 'Няма причина за блокиране или потребителят не е блокиран', - 'block_code_email_changed' => 'Потребителят все още не е потвърдил новия имейл адрес', - 'admin_update_email' => 'Противно на страницата на потребителския профил, потребителят НЯМА да бъде уведомен, че имейл адресът им е променен!', - 'update_user' => 'Редактиране на потребител', - 'updated_user' => 'Данните на потребителя бяха променени.', - 'delete_user' => 'Изтрий потребител :email', - 'user_deleted' => 'Този потребител беше изтрит', - 'send_test_email' => 'Изпращане на тестово имейл съобщение', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Изпрати съобщение', - 'send_test_triggered' => 'Тестът се задейства. Проверете входящата си поща и лог файловете.', - 'give_admin_careful' => 'Потребителите, на които са предоставени администраторски права, могат да отнемат вашите права. Бъдете внимателен.', - 'admin_maintanance_title' => 'Поддръжка', - 'admin_maintanance_expl' => 'Няколко изящни бутона за поддръжка на Firefly III', - 'admin_maintenance_clear_cache' => 'Изчисти кеша', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Описание на разделена транзакция', - 'split_transaction_title_help' => 'Ако създадете разделена транзакция, трябва да има глобално описание за всички раздели на транзакцията.', - 'split_title_help' => 'Ако създадете разделена транзакция, трябва да има глобално описание за всички раздели на транзакцията.', - 'you_create_transfer' => 'Създавате прехвърляне.', - 'you_create_withdrawal' => 'Създавате теглене.', - 'you_create_deposit' => 'Създавате депозит.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Управление', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'Управление на потребители', + 'list_all_users' => 'Всички потребители', + 'all_users' => 'Всички потребители', + 'instance_configuration' => 'Конфигурация', + 'firefly_instance_configuration' => 'Опции за конфигурация на Firefly III', + 'setting_single_user_mode' => 'Режим за един потребител', + 'setting_single_user_mode_explain' => 'По подразбиране Firefly III приема само една (1) регистрация: Вие. Това е мярка за сигурност предотвратяваща други да използват вашата инсталация, освен ако не им разрешите. Бъдещите регистрации са блокирани. Когато премахнете отметката от това поле и други ще могат да използват вашия инсталация, ако приемем че могат да я достигнат (когато е свързана с Интернет).', + 'store_configuration' => 'Запази конфигурацията', + 'single_user_administration' => 'Управление на потребителя за :email', + 'edit_user' => 'Редактиране на потребител :email', + 'hidden_fields_preferences' => 'Можете да активирате повече опции за транзакции във вашите настройки.', + 'user_data_information' => 'Данни на потребителя', + 'user_information' => 'Информация за потребителя', + 'total_size' => 'общ размер', + 'budget_or_budgets' => ':count бюджет|:count бюджети', + 'budgets_with_limits' => ':count бюджет с дефинирана сума|:count бюджети с дефинирани суми', + 'nr_of_rules_in_total_groups' => ':count_rules правило(а) и :count_groups група(и) правила', + 'tag_or_tags' => ':count етикет|:count етикети', + 'configuration_updated' => 'Настройките са обновени', + 'setting_is_demo_site' => 'Демо страница', + 'setting_is_demo_site_explain' => 'Ако поставите отметка в това поле, тази инсталация ще се държи така, сякаш това е демонстрационният сайт, което може да има странни странични ефекти.', + 'block_code_bounced' => 'Имейл съобщение(я) отскочиха', + 'block_code_expired' => 'Демо профилът изтече', + 'no_block_code' => 'Няма причина за блокиране или потребителят не е блокиран', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Потребителят все още не е потвърдил новия имейл адрес', + 'admin_update_email' => 'Противно на страницата на потребителския профил, потребителят НЯМА да бъде уведомен, че имейл адресът им е променен!', + 'update_user' => 'Редактиране на потребител', + 'updated_user' => 'Данните на потребителя бяха променени.', + 'delete_user' => 'Изтрий потребител :email', + 'user_deleted' => 'Този потребител беше изтрит', + 'send_test_email' => 'Изпращане на тестово имейл съобщение', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Изпрати съобщение', + 'send_test_triggered' => 'Тестът се задейства. Проверете входящата си поща и лог файловете.', + 'give_admin_careful' => 'Потребителите, на които са предоставени администраторски права, могат да отнемат вашите права. Бъдете внимателен.', + 'admin_maintanance_title' => 'Поддръжка', + 'admin_maintanance_expl' => 'Няколко изящни бутона за поддръжка на Firefly III', + 'admin_maintenance_clear_cache' => 'Изчисти кеша', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Описание на разделена транзакция', + 'split_transaction_title_help' => 'Ако създадете разделена транзакция, трябва да има глобално описание за всички раздели на транзакцията.', + 'split_title_help' => 'Ако създадете разделена транзакция, трябва да има глобално описание за всички раздели на транзакцията.', + 'you_create_transfer' => 'Създавате прехвърляне.', + 'you_create_withdrawal' => 'Създавате теглене.', + 'you_create_deposit' => 'Създавате депозит.', // links - 'journal_link_configuration' => 'Конфигурация на връзки за транзакции', - 'create_new_link_type' => 'Създаване на нов тип връзка', - 'store_new_link_type' => 'Запамети нов тип връзка', - 'update_link_type' => 'Редактирай тип връзка', - 'edit_link_type' => 'Редактирай тип връзка ":name"', - 'updated_link_type' => 'Редактирана тип връзка ":name"', - 'delete_link_type' => 'Изтрий тип връзка ":name"', - 'deleted_link_type' => 'Изтрита тип връзка ":name"', - 'stored_new_link_type' => 'Запамети нов тип връзка ":name"', - 'cannot_edit_link_type' => 'Невъзможна редакцията на тип връзка ":name"', - 'link_type_help_name' => 'Т.е. "Дубликати"', - 'link_type_help_inward' => 'Т.е. "дубликати"', - 'link_type_help_outward' => 'Т.е. "е дублирана от"', - 'save_connections_by_moving' => 'Запишете връзката между тези транзакции, като ги преместите в друг тип връзка:', - 'do_not_save_connection' => '(не запазвайте връзката)', - 'link_transaction' => 'Свържи транзакция', - 'link_to_other_transaction' => 'Свържете тази транзакция с друга транзакция', - 'select_transaction_to_link' => 'Изберете транзакция с която да свържете тази транзакция. Връзките понастоящем не се използват в Firefly III (освен че са показани), но смятам да променя това в бъдеще. Използвайте полето за търсене, за да изберете транзакция по заглавие или по идентификатор. Ако искате да добавите персонализирани типове връзки, прегледайте секцията за администриране.', - 'this_transaction' => 'Тази транзакция', - 'transaction' => 'Транзакция', - 'comments' => 'Коментари', - 'link_notes' => 'Бележки, които искате да запазите с връзката.', - 'invalid_link_selection' => 'Тези транзакции не могат да се свържат', - 'selected_transaction' => 'Избрани транзакции', - 'journals_linked' => 'Транзакциите са свързани.', - 'journals_error_linked' => 'Тези транзакции са вече свързани.', - 'journals_link_to_self' => 'Не може да свържете транзакция към самата нея', - 'journal_links' => 'Връзки на транзакция', - 'this_withdrawal' => 'Това теглене', - 'this_deposit' => 'Този депозит', - 'this_transfer' => 'Това прехвърляне', - 'overview_for_link' => 'Общ преглед за тип връзка ":name"', - 'source_transaction' => 'Източник транзакция', - 'link_description' => 'Описание на връзка', - 'destination_transaction' => 'Дестинация на транзакция', - 'delete_journal_link' => 'Изтрий връзката между :source и :destination', - 'deleted_link' => 'Изтрита връзка', + 'journal_link_configuration' => 'Конфигурация на връзки за транзакции', + 'create_new_link_type' => 'Създаване на нов тип връзка', + 'store_new_link_type' => 'Запамети нов тип връзка', + 'update_link_type' => 'Редактирай тип връзка', + 'edit_link_type' => 'Редактирай тип връзка ":name"', + 'updated_link_type' => 'Редактирана тип връзка ":name"', + 'delete_link_type' => 'Изтрий тип връзка ":name"', + 'deleted_link_type' => 'Изтрита тип връзка ":name"', + 'stored_new_link_type' => 'Запамети нов тип връзка ":name"', + 'cannot_edit_link_type' => 'Невъзможна редакцията на тип връзка ":name"', + 'link_type_help_name' => 'Т.е. "Дубликати"', + 'link_type_help_inward' => 'Т.е. "дубликати"', + 'link_type_help_outward' => 'Т.е. "е дублирана от"', + 'save_connections_by_moving' => 'Запишете връзката между тези транзакции, като ги преместите в друг тип връзка:', + 'do_not_save_connection' => '(не запазвайте връзката)', + 'link_transaction' => 'Свържи транзакция', + 'link_to_other_transaction' => 'Свържете тази транзакция с друга транзакция', + 'select_transaction_to_link' => 'Изберете транзакция с която да свържете тази транзакция. Връзките понастоящем не се използват в Firefly III (освен че са показани), но смятам да променя това в бъдеще. Използвайте полето за търсене, за да изберете транзакция по заглавие или по идентификатор. Ако искате да добавите персонализирани типове връзки, прегледайте секцията за администриране.', + 'this_transaction' => 'Тази транзакция', + 'transaction' => 'Транзакция', + 'comments' => 'Коментари', + 'link_notes' => 'Бележки, които искате да запазите с връзката.', + 'invalid_link_selection' => 'Тези транзакции не могат да се свържат', + 'selected_transaction' => 'Избрани транзакции', + 'journals_linked' => 'Транзакциите са свързани.', + 'journals_error_linked' => 'Тези транзакции са вече свързани.', + 'journals_link_to_self' => 'Не може да свържете транзакция към самата нея', + 'journal_links' => 'Връзки на транзакция', + 'this_withdrawal' => 'Това теглене', + 'this_deposit' => 'Този депозит', + 'this_transfer' => 'Това прехвърляне', + 'overview_for_link' => 'Общ преглед за тип връзка ":name"', + 'source_transaction' => 'Източник транзакция', + 'link_description' => 'Описание на връзка', + 'destination_transaction' => 'Дестинация на транзакция', + 'delete_journal_link' => 'Изтрий връзката между :source и :destination', + 'deleted_link' => 'Изтрита връзка', // link translations: - 'Paid_name' => 'Платени', - 'Refund_name' => 'Кеш бек', - 'Reimbursement_name' => 'Възстановяване', - 'Related_name' => 'Сродни', - 'relates to_inward' => 'свързано с', - 'is (partially) refunded by_inward' => 'е (частично) възстановено от', - 'is (partially) paid for by_inward' => 'е (частично) платено от', - 'is (partially) reimbursed by_inward' => 'е (частично) възстановено от', - 'inward_transaction' => 'Входяща транзакция', - 'outward_transaction' => 'Изходяща транзакция', - 'relates to_outward' => 'свързано с', - '(partially) refunds_outward' => '(частично) възстановява', - '(partially) pays for_outward' => '(частично) плаща за', - '(partially) reimburses_outward' => '(частично) възстановява', - 'is (partially) refunded by' => 'е (частично) възстановено от', - 'is (partially) paid for by' => 'е (частично) платено от', - 'is (partially) reimbursed by' => 'е (частично) възстановено от', - 'relates to' => 'свързано с', - '(partially) refunds' => '(частично) възстановява', - '(partially) pays for' => '(частично) плаща за', - '(partially) reimburses' => '(частично) възстановява', + 'Paid_name' => 'Платени', + 'Refund_name' => 'Кеш бек', + 'Reimbursement_name' => 'Възстановяване', + 'Related_name' => 'Сродни', + 'relates to_inward' => 'свързано с', + 'is (partially) refunded by_inward' => 'е (частично) възстановено от', + 'is (partially) paid for by_inward' => 'е (частично) платено от', + 'is (partially) reimbursed by_inward' => 'е (частично) възстановено от', + 'inward_transaction' => 'Входяща транзакция', + 'outward_transaction' => 'Изходяща транзакция', + 'relates to_outward' => 'свързано с', + '(partially) refunds_outward' => '(частично) възстановява', + '(partially) pays for_outward' => '(частично) плаща за', + '(partially) reimburses_outward' => '(частично) възстановява', + 'is (partially) refunded by' => 'е (частично) възстановено от', + 'is (partially) paid for by' => 'е (частично) платено от', + 'is (partially) reimbursed by' => 'е (частично) възстановено от', + 'relates to' => 'свързано с', + '(partially) refunds' => '(частично) възстановява', + '(partially) pays for' => '(частично) плаща за', + '(partially) reimburses' => '(частично) възстановява', // split a transaction: - 'splits' => 'Раздели', - 'add_another_split' => 'Добавяне на друг раздел', - 'cannot_edit_opening_balance' => 'Не можете да редактирате началния баланс на сметката.', - 'no_edit_multiple_left' => 'Не сте избрали валидни транзакции, които да редактирате.', - 'breadcrumb_convert_group' => 'Преобразувай транзакция', - 'convert_invalid_source' => 'Информацията за източника е невалидна за транзакция #%d.', - 'convert_invalid_destination' => 'Информацията за дестинацията е невалидна за транзакция #%d.', - 'create_another' => 'След съхраняването се върнете тук, за да създадете нова.', - 'after_update_create_another' => 'След обновяването се върнете тук, за да продължите с редакцията.', - 'store_as_new' => 'Съхранете като нова транзакция, вместо да я актуализирате.', - 'reset_after' => 'Изчистване на формуляра след изпращане', - 'errors_submission' => 'Имаше нещо нередно с вашите данни. Моля, проверете грешките.', - 'transaction_expand_split' => 'Разшири раздел', - 'transaction_collapse_split' => 'Свий раздел', + 'splits' => 'Раздели', + 'add_another_split' => 'Добавяне на друг раздел', + 'cannot_edit_opening_balance' => 'Не можете да редактирате началния баланс на сметката.', + 'no_edit_multiple_left' => 'Не сте избрали валидни транзакции, които да редактирате.', + 'breadcrumb_convert_group' => 'Преобразувай транзакция', + 'convert_invalid_source' => 'Информацията за източника е невалидна за транзакция #%d.', + 'convert_invalid_destination' => 'Информацията за дестинацията е невалидна за транзакция #%d.', + 'create_another' => 'След съхраняването се върнете тук, за да създадете нова.', + 'after_update_create_another' => 'След обновяването се върнете тук, за да продължите с редакцията.', + 'store_as_new' => 'Съхранете като нова транзакция, вместо да я актуализирате.', + 'reset_after' => 'Изчистване на формуляра след изпращане', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Разшири раздел', + 'transaction_collapse_split' => 'Свий раздел', // object groups - 'default_group_title_name' => '(без група)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(без група)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Нека да създадем сметка за активи!', - 'no_accounts_intro_asset' => 'Все още нямате сметки за активи. Сметките за активи са вашите основни сметки: вашата разплащателна сметка, спестовна сметка, споделена сметка или дори вашата кредитна карта.', - 'no_accounts_imperative_asset' => 'За да започнете да използвате Firefly III, трябва да създадете поне една сметка за активи. Нека го направим сега:', - 'no_accounts_create_asset' => 'Създай сметка за активи', - 'no_accounts_title_expense' => 'Нека да създадем сметка за разходи!', - 'no_accounts_intro_expense' => 'Все още нямате сметки за разходи. Сметките за разходи са местата, където харчите пари, като магазини и супермаркети.', - 'no_accounts_imperative_expense' => 'Сметките за разходи се създават автоматично, когато създавате транзакции, но можете да създадете и ръчно, ако искате. Нека сега създадем такава:', - 'no_accounts_create_expense' => 'Създай сметка за разходи', - 'no_accounts_title_revenue' => 'Нека да създадем сметка за приходи!', - 'no_accounts_intro_revenue' => 'Все още нямате сметки за приходи. Приходните сметки са местата, от които получавате пари, например от вашия работодател.', - 'no_accounts_imperative_revenue' => 'Приходните сметки се създават автоматично, когато създавате транзакции, но можете да създадете и ръчно, ако искате. Нека сега създадем такава:', - 'no_accounts_create_revenue' => 'Създай сметка за приходи', - 'no_accounts_title_liabilities' => 'Нека да създадем задължение!', - 'no_accounts_intro_liabilities' => 'Все още нямате задължения. Задължения са сметките, които регистрират вашите (студентски) заеми и други дългове.', - 'no_accounts_imperative_liabilities' => 'Не е необходимо да използвате тази функция, но тя може да бъде полезна, ако искате да следите тези неща.', - 'no_accounts_create_liabilities' => 'Създай задължение', - 'no_budgets_title_default' => 'Нека да създадем бюджет', - 'no_rules_title_default' => 'Нека да създадем правило', - 'no_budgets_intro_default' => 'Все още нямате бюджети. Бюджетите се използват за организиране на разходите ви в логически групи, на които можете да дадете лимит, за да ограничите разходите си.', - 'no_rules_intro_default' => 'Все още нямаш правила. Правилата са силни автоматизации, които могат да управляват транзации за теб.', - 'no_rules_imperative_default' => 'Правилата могат да бъдат много полезни, когато управляваш транзакции. Нека да създадем едно сега:', - 'no_budgets_imperative_default' => 'Бюджетите са основните инструменти на финансовото управление. Нека сега създадем такъв:', - 'no_budgets_create_default' => 'Създай бюджет', - 'no_rules_create_default' => 'Създай правило', - 'no_categories_title_default' => 'Нека да създадем категория!', - 'no_categories_intro_default' => 'Все още нямате категории. Категориите се използват за фина настройка на вашите транзакции и етикетиране с тяхната определена категория.', - 'no_categories_imperative_default' => 'Категориите се създават автоматично, когато създавате транзакции, но можете да създадете и ръчно. Нека сега създадем такава:', - 'no_categories_create_default' => 'Създай категория', - 'no_tags_title_default' => 'Нека да създадем етикет!', - 'no_tags_intro_default' => 'Все още нямате етикети. Етикетите се използват за фина настройка на вашите транзакции и маркирането им с конкретни ключови думи.', - 'no_tags_imperative_default' => 'Етикетите се създават автоматично, когато създавате транзакции, но можете да създадете и ръчно. Нека сега създадем такъв:', - 'no_tags_create_default' => 'Създай етикет', - 'no_transactions_title_withdrawal' => 'Нека да създадем разход!', - 'no_transactions_intro_withdrawal' => 'Все още нямате разходи. Трябва да създадете разходи, за да започнете да управлявате финансите си.', - 'no_transactions_imperative_withdrawal' => 'Похарчихте ли някакви пари? След това трябва да го запишете:', - 'no_transactions_create_withdrawal' => 'Създай разход', - 'no_transactions_title_deposit' => 'Нека да създадем приход!', - 'no_transactions_intro_deposit' => 'Все още нямате записан доход. Трябва да създадете записи за доходи, за да започнете да управлявате финансите си.', - 'no_transactions_imperative_deposit' => 'Получихте ли някакви пари? След това трябва да го запишете:', - 'no_transactions_create_deposit' => 'Създай депозит', - 'no_transactions_title_transfers' => 'Нека да създадем прехвърляне!', - 'no_transactions_intro_transfers' => 'Все още нямате прехвърляния. Когато премествате пари между сметки за активи те се записват като прехвърляния.', - 'no_transactions_imperative_transfers' => 'Преместихте ли някакви пари? След това трябва да го запишете:', - 'no_transactions_create_transfers' => 'Създай прехвърляне', - 'no_piggies_title_default' => 'Нека да създадем касичка!', - 'no_piggies_intro_default' => 'Все още нямате касички. Можете да създадете касички, за да разделите спестяванията си и да следите за какво спестявате.', - 'no_piggies_imperative_default' => 'Имате ли неща, за които спестявате пари? Създайте касичка и следете:', - 'no_piggies_create_default' => 'Създай нова касичка', - 'no_bills_title_default' => 'Нека да създадем сметка!', - 'no_bills_intro_default' => 'Все още нямате сметки. Можете да създавате сметки, за да следите редовни разходи, като наема или застраховката си.', - 'no_bills_imperative_default' => 'Имате ли такива редовни сметки? Създайте сметка и следете плащанията си:', - 'no_bills_create_default' => 'Създай сметка', + 'no_accounts_title_asset' => 'Нека да създадем сметка за активи!', + 'no_accounts_intro_asset' => 'Все още нямате сметки за активи. Сметките за активи са вашите основни сметки: вашата разплащателна сметка, спестовна сметка, споделена сметка или дори вашата кредитна карта.', + 'no_accounts_imperative_asset' => 'За да започнете да използвате Firefly III, трябва да създадете поне една сметка за активи. Нека го направим сега:', + 'no_accounts_create_asset' => 'Създай сметка за активи', + 'no_accounts_title_expense' => 'Нека да създадем сметка за разходи!', + 'no_accounts_intro_expense' => 'Все още нямате сметки за разходи. Сметките за разходи са местата, където харчите пари, като магазини и супермаркети.', + 'no_accounts_imperative_expense' => 'Сметките за разходи се създават автоматично, когато създавате транзакции, но можете да създадете и ръчно, ако искате. Нека сега създадем такава:', + 'no_accounts_create_expense' => 'Създай сметка за разходи', + 'no_accounts_title_revenue' => 'Нека да създадем сметка за приходи!', + 'no_accounts_intro_revenue' => 'Все още нямате сметки за приходи. Приходните сметки са местата, от които получавате пари, например от вашия работодател.', + 'no_accounts_imperative_revenue' => 'Приходните сметки се създават автоматично, когато създавате транзакции, но можете да създадете и ръчно, ако искате. Нека сега създадем такава:', + 'no_accounts_create_revenue' => 'Създай сметка за приходи', + 'no_accounts_title_liabilities' => 'Нека да създадем задължение!', + 'no_accounts_intro_liabilities' => 'Все още нямате задължения. Задължения са сметките, които регистрират вашите (студентски) заеми и други дългове.', + 'no_accounts_imperative_liabilities' => 'Не е необходимо да използвате тази функция, но тя може да бъде полезна, ако искате да следите тези неща.', + 'no_accounts_create_liabilities' => 'Създай задължение', + 'no_budgets_title_default' => 'Нека да създадем бюджет', + 'no_rules_title_default' => 'Нека да създадем правило', + 'no_budgets_intro_default' => 'Все още нямате бюджети. Бюджетите се използват за организиране на разходите ви в логически групи, на които можете да дадете лимит, за да ограничите разходите си.', + 'no_rules_intro_default' => 'Все още нямаш правила. Правилата са силни автоматизации, които могат да управляват транзации за теб.', + 'no_rules_imperative_default' => 'Правилата могат да бъдат много полезни, когато управляваш транзакции. Нека да създадем едно сега:', + 'no_budgets_imperative_default' => 'Бюджетите са основните инструменти на финансовото управление. Нека сега създадем такъв:', + 'no_budgets_create_default' => 'Създай бюджет', + 'no_rules_create_default' => 'Създай правило', + 'no_categories_title_default' => 'Нека да създадем категория!', + 'no_categories_intro_default' => 'Все още нямате категории. Категориите се използват за фина настройка на вашите транзакции и етикетиране с тяхната определена категория.', + 'no_categories_imperative_default' => 'Категориите се създават автоматично, когато създавате транзакции, но можете да създадете и ръчно. Нека сега създадем такава:', + 'no_categories_create_default' => 'Създай категория', + 'no_tags_title_default' => 'Нека да създадем етикет!', + 'no_tags_intro_default' => 'Все още нямате етикети. Етикетите се използват за фина настройка на вашите транзакции и маркирането им с конкретни ключови думи.', + 'no_tags_imperative_default' => 'Етикетите се създават автоматично, когато създавате транзакции, но можете да създадете и ръчно. Нека сега създадем такъв:', + 'no_tags_create_default' => 'Създай етикет', + 'no_transactions_title_withdrawal' => 'Нека да създадем разход!', + 'no_transactions_intro_withdrawal' => 'Все още нямате разходи. Трябва да създадете разходи, за да започнете да управлявате финансите си.', + 'no_transactions_imperative_withdrawal' => 'Похарчихте ли някакви пари? След това трябва да го запишете:', + 'no_transactions_create_withdrawal' => 'Създай разход', + 'no_transactions_title_deposit' => 'Нека да създадем приход!', + 'no_transactions_intro_deposit' => 'Все още нямате записан доход. Трябва да създадете записи за доходи, за да започнете да управлявате финансите си.', + 'no_transactions_imperative_deposit' => 'Получихте ли някакви пари? След това трябва да го запишете:', + 'no_transactions_create_deposit' => 'Създай депозит', + 'no_transactions_title_transfers' => 'Нека да създадем прехвърляне!', + 'no_transactions_intro_transfers' => 'Все още нямате прехвърляния. Когато премествате пари между сметки за активи те се записват като прехвърляния.', + 'no_transactions_imperative_transfers' => 'Преместихте ли някакви пари? След това трябва да го запишете:', + 'no_transactions_create_transfers' => 'Създай прехвърляне', + 'no_piggies_title_default' => 'Нека да създадем касичка!', + 'no_piggies_intro_default' => 'Все още нямате касички. Можете да създадете касички, за да разделите спестяванията си и да следите за какво спестявате.', + 'no_piggies_imperative_default' => 'Имате ли неща, за които спестявате пари? Създайте касичка и следете:', + 'no_piggies_create_default' => 'Създай нова касичка', + 'no_bills_title_default' => 'Нека да създадем сметка!', + 'no_bills_intro_default' => 'Все още нямате сметки. Можете да създавате сметки, за да следите редовни разходи, като наема или застраховката си.', + 'no_bills_imperative_default' => 'Имате ли такива редовни сметки? Създайте сметка и следете плащанията си:', + 'no_bills_create_default' => 'Създай сметка', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Повтарящи се транзакции', - 'repeat_until_in_past' => 'Тази повтаряща се транзакция спря да се повтаря на :date.', - 'recurring_calendar_view' => 'Календар', - 'no_recurring_title_default' => 'Нека да създадем повтаряща се транзакция!', - 'no_recurring_intro_default' => 'Все още нямате повтарящи се транзакции. Можете да ги използвате, за да накарате Firefly III автоматично да създава транзакции за вас.', - 'no_recurring_imperative_default' => 'Това е доста сложна функция, но може да бъде изключително полезна. Уверете се, че сте прочели документацията (?) - иконата в горния десен ъгъл), преди да продължите.', - 'no_recurring_create_default' => 'Създай повтаряща се транзакция', - 'make_new_recurring' => 'Създай повтаряща се транзакция', - 'recurring_daily' => 'Всеки ден', - 'recurring_weekly' => 'Всяка седмица в :weekday', - 'recurring_weekly_skip' => 'Всяка :skip (-ва/-ра/-та) седмица в :weekday', - 'recurring_monthly' => 'Всеки месец на :dayOfMonth -ия ден', - 'recurring_monthly_skip' => 'Всеки :skip (-ви/-ри/-ти) месец на :dayOfMonth -ия ден', - 'recurring_ndom' => 'Всеки месец на :dayOfMonth :weekday', - 'recurring_yearly' => 'Всяка година на :date', - 'overview_for_recurrence' => 'Общ преглед на повтаряща се транзакция ":title"', - 'warning_duplicates_repetitions' => 'В редки случаи датите се появяват два пъти в този списък. Това може да се случи, когато множество повторения се сблъскат. Firefly III винаги ще генерира по една транзакция на ден.', - 'created_transactions' => 'Сродни транзакции', - 'expected_withdrawals' => 'Очаквани тегления', - 'expected_deposits' => 'Очаквани депозити', - 'expected_transfers' => 'Очаквани прехвърляния', - 'created_withdrawals' => 'Създадени тегления', - 'created_deposits' => 'Създадени депозити', - 'created_transfers' => 'Създадени прехвърляния', - 'recurring_info' => 'Повтарящи се транзакции :count / :total', - 'created_from_recurrence' => 'Създадено от повтаряща се транзакция ":title" (#:id)', - 'recurring_never_cron' => 'Изглежда, че задачата на cron, която е необходима за поддържане на повтарящи се транзакции, никога не се е изпълнявала. Това, разбира се, е нормално, когато току-що сте инсталирали Firefly III, но това трябва да е нещо, което да настроите възможно най-скоро. Моля, разгледайте помощните страници, като използвате иконата (?) в горния десен ъгъл на страницата.', - 'recurring_cron_long_ago' => 'Изглежда, че са минали повече от 36 часа, откакто задачата на cron за поддръжка на повтарящи се транзакции е задействана за последен път. Сигурни ли сте, че е настроена правилно? Моля, разгледайте помощните страници, като използвате иконата (?) в горния десен ъгъл на страницата.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Повтарящи се транзакции', + 'repeat_until_in_past' => 'Тази повтаряща се транзакция спря да се повтаря на :date.', + 'recurring_calendar_view' => 'Календар', + 'no_recurring_title_default' => 'Нека да създадем повтаряща се транзакция!', + 'no_recurring_intro_default' => 'Все още нямате повтарящи се транзакции. Можете да ги използвате, за да накарате Firefly III автоматично да създава транзакции за вас.', + 'no_recurring_imperative_default' => 'Това е доста сложна функция, но може да бъде изключително полезна. Уверете се, че сте прочели документацията (?) - иконата в горния десен ъгъл), преди да продължите.', + 'no_recurring_create_default' => 'Създай повтаряща се транзакция', + 'make_new_recurring' => 'Създай повтаряща се транзакция', + 'recurring_daily' => 'Всеки ден', + 'recurring_weekly' => 'Всяка седмица в :weekday', + 'recurring_weekly_skip' => 'Всяка :skip (-ва/-ра/-та) седмица в :weekday', + 'recurring_monthly' => 'Всеки месец на :dayOfMonth -ия ден', + 'recurring_monthly_skip' => 'Всеки :skip (-ви/-ри/-ти) месец на :dayOfMonth -ия ден', + 'recurring_ndom' => 'Всеки месец на :dayOfMonth :weekday', + 'recurring_yearly' => 'Всяка година на :date', + 'overview_for_recurrence' => 'Общ преглед на повтаряща се транзакция ":title"', + 'warning_duplicates_repetitions' => 'В редки случаи датите се появяват два пъти в този списък. Това може да се случи, когато множество повторения се сблъскат. Firefly III винаги ще генерира по една транзакция на ден.', + 'created_transactions' => 'Сродни транзакции', + 'expected_withdrawals' => 'Очаквани тегления', + 'expected_deposits' => 'Очаквани депозити', + 'expected_transfers' => 'Очаквани прехвърляния', + 'created_withdrawals' => 'Създадени тегления', + 'created_deposits' => 'Създадени депозити', + 'created_transfers' => 'Създадени прехвърляния', + 'recurring_info' => 'Повтарящи се транзакции :count / :total', + 'created_from_recurrence' => 'Създадено от повтаряща се транзакция ":title" (#:id)', + 'recurring_never_cron' => 'Изглежда, че задачата на cron, която е необходима за поддържане на повтарящи се транзакции, никога не се е изпълнявала. Това, разбира се, е нормално, когато току-що сте инсталирали Firefly III, но това трябва да е нещо, което да настроите възможно най-скоро. Моля, разгледайте помощните страници, като използвате иконата (?) в горния десен ъгъл на страницата.', + 'recurring_cron_long_ago' => 'Изглежда, че са минали повече от 36 часа, откакто задачата на cron за поддръжка на повтарящи се транзакции е задействана за последен път. Сигурни ли сте, че е настроена правилно? Моля, разгледайте помощните страници, като използвате иконата (?) в горния десен ъгъл на страницата.', - 'create_new_recurrence' => 'Създай нова повтаряща се транзакция', - 'help_first_date' => 'Посочете първото очаквано повторение. Това трябва да бъде в бъдещето.', - 'help_first_date_no_past' => 'Посочете първото очаквано повторение. Firefly III няма да създава транзакции в миналото.', - 'no_currency' => '(без валута)', - 'mandatory_for_recurring' => 'Задължителна информация за повторение', - 'mandatory_for_transaction' => 'Задължителна информация за транзакция', - 'optional_for_recurring' => 'Незадължителна информация за повторение', - 'optional_for_transaction' => 'Незадължителна информация за транзакция', - 'change_date_other_options' => 'Променете "първа дата", за да видите още опции.', - 'mandatory_fields_for_tranaction' => 'Стойностите тук ще влязат в създадената транзакция (и)', - 'click_for_calendar' => 'Кликнете тук за календар, който ви показва кога транзакцията ще се повтори.', - 'repeat_forever' => 'Повтаряй завинаги', - 'repeat_until_date' => 'Повтаряй до дата', - 'repeat_times' => 'Повтаряй определен брой пъти', - 'recurring_skips_one' => 'През едно', - 'recurring_skips_more' => 'Пропусни :count събития', - 'store_new_recurrence' => 'Запамети повтаряща се транзакция', - 'stored_new_recurrence' => 'Повтаряща се транзакция ":title" беше успешно запаметена.', - 'edit_recurrence' => 'Редактирай повтаряща се транзакция ":title"', - 'recurring_repeats_until' => 'Повтаряй до :date', - 'recurring_repeats_forever' => 'Повтаря се завинаги', - 'recurring_repeats_x_times' => 'Повтаря се :count път|Повтаря се :count пъти', - 'update_recurrence' => 'Обнови повтарящата се транзакция', - 'updated_recurrence' => 'Обновена е повтарящата се транзакция ":title"', - 'recurrence_is_inactive' => 'Тази повтаряща се транзакция не е активна и няма да генерира нови транзакции.', - 'delete_recurring' => 'Изтрий повтаряща се транзакция ":title"', - 'new_recurring_transaction' => 'Нова повтаряща се транзакция', - 'help_weekend' => 'Какво трябва да направи Firefly III, когато повтарящата се транзакция се падне в събота или неделя?', - 'do_nothing' => 'Просто създай транзакцията', - 'skip_transaction' => 'Пропусни транзакцията', - 'jump_to_friday' => 'Създай транзакцията на предишния петък', - 'jump_to_monday' => 'Създай транзакцията на следващия понеделник', - 'will_jump_friday' => 'Ще бъде създадена в петък вместо уикендите.', - 'will_jump_monday' => 'Ще бъде създадена в понеделник вместо уикендите.', - 'except_weekends' => 'Освен уикендите', - 'recurrence_deleted' => 'Повтарящата се транзакция ":title" беше изтрита', + 'create_new_recurrence' => 'Създай нова повтаряща се транзакция', + 'help_first_date' => 'Посочете първото очаквано повторение. Това трябва да бъде в бъдещето.', + 'help_first_date_no_past' => 'Посочете първото очаквано повторение. Firefly III няма да създава транзакции в миналото.', + 'no_currency' => '(без валута)', + 'mandatory_for_recurring' => 'Задължителна информация за повторение', + 'mandatory_for_transaction' => 'Задължителна информация за транзакция', + 'optional_for_recurring' => 'Незадължителна информация за повторение', + 'optional_for_transaction' => 'Незадължителна информация за транзакция', + 'change_date_other_options' => 'Променете "първа дата", за да видите още опции.', + 'mandatory_fields_for_tranaction' => 'Стойностите тук ще влязат в създадената транзакция (и)', + 'click_for_calendar' => 'Кликнете тук за календар, който ви показва кога транзакцията ще се повтори.', + 'repeat_forever' => 'Повтаряй завинаги', + 'repeat_until_date' => 'Повтаряй до дата', + 'repeat_times' => 'Повтаряй определен брой пъти', + 'recurring_skips_one' => 'През едно', + 'recurring_skips_more' => 'Пропусни :count събития', + 'store_new_recurrence' => 'Запамети повтаряща се транзакция', + 'stored_new_recurrence' => 'Повтаряща се транзакция ":title" беше успешно запаметена.', + 'edit_recurrence' => 'Редактирай повтаряща се транзакция ":title"', + 'recurring_repeats_until' => 'Повтаряй до :date', + 'recurring_repeats_forever' => 'Повтаря се завинаги', + 'recurring_repeats_x_times' => 'Повтаря се :count път|Повтаря се :count пъти', + 'update_recurrence' => 'Обнови повтарящата се транзакция', + 'updated_recurrence' => 'Обновена е повтарящата се транзакция ":title"', + 'recurrence_is_inactive' => 'Тази повтаряща се транзакция не е активна и няма да генерира нови транзакции.', + 'delete_recurring' => 'Изтрий повтаряща се транзакция ":title"', + 'new_recurring_transaction' => 'Нова повтаряща се транзакция', + 'help_weekend' => 'Какво трябва да направи Firefly III, когато повтарящата се транзакция се падне в събота или неделя?', + 'do_nothing' => 'Просто създай транзакцията', + 'skip_transaction' => 'Пропусни транзакцията', + 'jump_to_friday' => 'Създай транзакцията на предишния петък', + 'jump_to_monday' => 'Създай транзакцията на следващия понеделник', + 'will_jump_friday' => 'Ще бъде създадена в петък вместо уикендите.', + 'will_jump_monday' => 'Ще бъде създадена в понеделник вместо уикендите.', + 'except_weekends' => 'Освен уикендите', + 'recurrence_deleted' => 'Повтарящата се транзакция ":title" беше изтрита', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Баланс (:currency)', - 'box_spent_in_currency' => 'Похарчени (:currency)', - 'box_earned_in_currency' => 'Спечелени (:currency)', - 'box_budgeted_in_currency' => 'Бюджетирани (:currency)', - 'box_bill_paid_in_currency' => 'Платени сметки (:currency)', - 'box_bill_unpaid_in_currency' => 'Неплатени сметки (:currency)', - 'box_left_to_spend_in_currency' => 'Останали за харчене (:currency)', - 'box_net_worth_in_currency' => 'Общо богатство (:currency)', - 'box_spend_per_day' => 'Останали за харчене на ден: :amount', + 'box_balance_in_currency' => 'Баланс (:currency)', + 'box_spent_in_currency' => 'Похарчени (:currency)', + 'box_earned_in_currency' => 'Спечелени (:currency)', + 'box_budgeted_in_currency' => 'Бюджетирани (:currency)', + 'box_bill_paid_in_currency' => 'Платени сметки (:currency)', + 'box_bill_unpaid_in_currency' => 'Неплатени сметки (:currency)', + 'box_left_to_spend_in_currency' => 'Останали за харчене (:currency)', + 'box_net_worth_in_currency' => 'Общо богатство (:currency)', + 'box_spend_per_day' => 'Останали за харчене на ден: :amount', // debug page - 'debug_page' => 'Страница за отстраняване на грешки', - 'debug_submit_instructions' => 'Ако имате проблеми, можете да използвате информацията в това поле като информация за отстраняване на грешки. Моля, копирайте и поставете в нов или съществуващ GitHub issue . Той ще генерира красива таблица, която може да се използва за бързо диагностициране на проблема ви.', - 'debug_pretty_table' => 'Ако копирате / поставите полето по-долу в GitHub issue, той ще генерира таблица. Моля, не обграждайте този текст със кавички.', - 'debug_additional_data' => 'Можете също да споделите съдържанието на полето по-долу. Можете също да копирате и поставите това в нов или съществуващ GitHub issue . Съдържанието на това поле обаче може да съдържа лична информация като имена на сметки, данни за транзакции или имейл адреси.', + 'debug_page' => 'Страница за отстраняване на грешки', + 'debug_submit_instructions' => 'Ако имате проблеми, можете да използвате информацията в това поле като информация за отстраняване на грешки. Моля, копирайте и поставете в нов или съществуващ GitHub issue . Той ще генерира красива таблица, която може да се използва за бързо диагностициране на проблема ви.', + 'debug_pretty_table' => 'Ако копирате / поставите полето по-долу в GitHub issue, той ще генерира таблица. Моля, не обграждайте този текст със кавички.', + 'debug_additional_data' => 'Можете също да споделите съдържанието на полето по-долу. Можете също да копирате и поставите това в нов или съществуващ GitHub issue . Съдържанието на това поле обаче може да съдържа лична информация като имена на сметки, данни за транзакции или имейл адреси.', // object groups - 'object_groups_menu_bar' => 'Групи', - 'object_groups_page_title' => 'Групи', - 'object_groups_breadcrumb' => 'Групи', - 'object_groups_index' => 'Общ преглед', - 'object_groups' => 'Групи', - 'object_groups_empty_explain' => 'Някои неща в Firefly III могат да бъдат разделени на групи. Касичките например разполагат с поле „Група“ в екраните за редактиране и създаване. Когато зададете това поле, можете да редактирате имената и реда на групите на тази страница. За повече информация вижте помощните страници в горния десен ъгъл, под иконата (?).', - 'object_group_title' => 'Заглавие', - 'edit_object_group' => 'Редактирай група ":title"', - 'delete_object_group' => 'Изтрий група ":title"', - 'update_object_group' => 'Обнови група', - 'updated_object_group' => 'Успешно обновена група ":title"', - 'deleted_object_group' => 'Успешно изтрита група ":title"', - 'object_group' => 'Група', + 'object_groups_menu_bar' => 'Групи', + 'object_groups_page_title' => 'Групи', + 'object_groups_breadcrumb' => 'Групи', + 'object_groups_index' => 'Общ преглед', + 'object_groups' => 'Групи', + 'object_groups_empty_explain' => 'Някои неща в Firefly III могат да бъдат разделени на групи. Касичките например разполагат с поле „Група“ в екраните за редактиране и създаване. Когато зададете това поле, можете да редактирате имената и реда на групите на тази страница. За повече информация вижте помощните страници в горния десен ъгъл, под иконата (?).', + 'object_group_title' => 'Заглавие', + 'edit_object_group' => 'Редактирай група ":title"', + 'delete_object_group' => 'Изтрий група ":title"', + 'update_object_group' => 'Обнови група', + 'updated_object_group' => 'Успешно обновена група ":title"', + 'deleted_object_group' => 'Успешно изтрита група ":title"', + 'object_group' => 'Група', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/bg_BG/form.php b/resources/lang/bg_BG/form.php index 8d90fa6bf0..92d192c65a 100644 --- a/resources/lang/bg_BG/form.php +++ b/resources/lang/bg_BG/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Име на банката', - 'bank_balance' => 'Салдо', - 'savings_balance' => 'Спестявания', - 'credit_card_limit' => 'Лимит по кредитна карта', - 'automatch' => 'Автоматично съчетаване', - 'skip' => 'Пропусни', - 'enabled' => 'Активирано', - 'name' => 'Име', - 'active' => 'Активен', - 'amount_min' => 'Минимална сума', - 'amount_max' => 'Максимална сума', - 'match' => 'Съответства на', - 'strict' => 'Строг режим', - 'repeat_freq' => 'Повторения', - 'object_group' => 'Група', - 'location' => 'Местоположение', - 'update_channel' => 'Канал за обновления', - 'currency_id' => 'Валута', - 'transaction_currency_id' => 'Валута', - 'auto_budget_currency_id' => 'Валута', - 'external_ip' => 'Външен IP адрес на вашия сървър', - 'attachments' => 'Прикачени файлове', - 'BIC' => 'BIC', - 'verify_password' => 'Проверете сигурността на паролата', - 'source_account' => 'Разходна сметка', - 'destination_account' => 'Приходна сметка', - 'asset_destination_account' => 'Приходна сметка', - 'include_net_worth' => 'Включи в общото богатство', - 'asset_source_account' => 'Разходна сметка', - 'journal_description' => 'Описание', - 'note' => 'Бележки', - 'currency' => 'Валута', - 'account_id' => 'Сметка за активи', - 'budget_id' => 'Бюджет', - 'bill_id' => 'Bill', - 'opening_balance' => 'Начално салдо', - 'tagMode' => 'Режим на етикети', - 'virtual_balance' => 'Виртуален баланс', + 'bank_name' => 'Име на банката', + 'bank_balance' => 'Салдо', + 'savings_balance' => 'Спестявания', + 'credit_card_limit' => 'Лимит по кредитна карта', + 'automatch' => 'Автоматично съчетаване', + 'skip' => 'Пропусни', + 'enabled' => 'Активирано', + 'name' => 'Име', + 'active' => 'Активен', + 'amount_min' => 'Минимална сума', + 'amount_max' => 'Максимална сума', + 'match' => 'Съответства на', + 'strict' => 'Строг режим', + 'repeat_freq' => 'Повторения', + 'object_group' => 'Група', + 'location' => 'Местоположение', + 'update_channel' => 'Канал за обновления', + 'currency_id' => 'Валута', + 'transaction_currency_id' => 'Валута', + 'auto_budget_currency_id' => 'Валута', + 'external_ip' => 'Външен IP адрес на вашия сървър', + 'attachments' => 'Прикачени файлове', + 'BIC' => 'BIC', + 'verify_password' => 'Проверете сигурността на паролата', + 'source_account' => 'Разходна сметка', + 'destination_account' => 'Приходна сметка', + 'asset_destination_account' => 'Приходна сметка', + 'include_net_worth' => 'Включи в общото богатство', + 'asset_source_account' => 'Разходна сметка', + 'journal_description' => 'Описание', + 'note' => 'Бележки', + 'currency' => 'Валута', + 'account_id' => 'Сметка за активи', + 'budget_id' => 'Бюджет', + 'bill_id' => 'Bill', + 'opening_balance' => 'Начално салдо', + 'tagMode' => 'Режим на етикети', + 'virtual_balance' => 'Виртуален баланс', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Планирана сума', 'account_role' => 'Роля на сметката', 'opening_balance_date' => 'Дата на началното салдо', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Наистина ли искате да изтриете транзакцията озаглавена ":description"?', 'mass_journal_are_you_sure' => 'Наистина ли искате да изтриете тези транзакции?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Наистина ли искате да изтриете етикета ":tag"?', 'journal_link_areYouSure' => 'Наистина ли искате да изтриете връзката между :source и :destination?', 'linkType_areYouSure' => 'Наистина ли искате да изтриете типа връзка ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Албум', 'song' => 'Песен', - // admin 'domain' => 'Домейн', 'single_user_mode' => 'Изключи нови регистрации', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS account', 'local_account' => 'Firefly III сметка', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Дата от', - 'to_date' => 'Дата до', - 'due_date' => 'Дата на падеж', - 'payment_date' => 'Дата на плащане', - 'invoice_date' => 'Дата на фактура', - 'internal_reference' => 'Вътрешна референция', - 'inward' => 'Входящо описание', - 'outward' => 'Изходящо описание', - 'rule_group_id' => 'Група правила', - 'transaction_description' => 'Описание на транзакция', - 'first_date' => 'Първа дата', - 'transaction_type' => 'Вид транзакция', - 'repeat_until' => 'Повтаряй до', - 'recurring_description' => 'Описание на повтаряща се транзакция', - 'repetition_type' => 'Тип на повторенията', - 'foreign_currency_id' => 'Чужда валута', - 'repetition_end' => 'Повторенията спират', - 'repetitions' => 'Повторения', - 'calendar' => 'Календар', - 'weekend' => 'Уикенд', - 'client_secret' => 'Тайна на клиента', - 'withdrawal_destination_id' => 'Приходна сметка', - 'deposit_source_id' => 'Разходна сметка', - 'expected_on' => 'Очаквано на', - 'paid' => 'Платени', - 'auto_budget_type' => 'Автоматичен бюджет', - 'auto_budget_amount' => 'Сума за автоматичен бюджет', - 'auto_budget_period' => 'Период за автоматичен бюджет', - 'collected' => 'Събрани', - 'submitted' => 'Потвърдено', - 'key' => 'Ключ', - 'value' => 'Съдържание на записа', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Дата от', + 'to_date' => 'Дата до', + 'due_date' => 'Дата на падеж', + 'payment_date' => 'Дата на плащане', + 'invoice_date' => 'Дата на фактура', + 'internal_reference' => 'Вътрешна референция', + 'inward' => 'Входящо описание', + 'outward' => 'Изходящо описание', + 'rule_group_id' => 'Група правила', + 'transaction_description' => 'Описание на транзакция', + 'first_date' => 'Първа дата', + 'transaction_type' => 'Вид транзакция', + 'repeat_until' => 'Повтаряй до', + 'recurring_description' => 'Описание на повтаряща се транзакция', + 'repetition_type' => 'Тип на повторенията', + 'foreign_currency_id' => 'Чужда валута', + 'repetition_end' => 'Повторенията спират', + 'repetitions' => 'Повторения', + 'calendar' => 'Календар', + 'weekend' => 'Уикенд', + 'client_secret' => 'Тайна на клиента', + 'withdrawal_destination_id' => 'Приходна сметка', + 'deposit_source_id' => 'Разходна сметка', + 'expected_on' => 'Очаквано на', + 'paid' => 'Платени', + 'auto_budget_type' => 'Автоматичен бюджет', + 'auto_budget_amount' => 'Сума за автоматичен бюджет', + 'auto_budget_period' => 'Период за автоматичен бюджет', + 'collected' => 'Събрани', + 'submitted' => 'Потвърдено', + 'key' => 'Ключ', + 'value' => 'Съдържание на записа', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/bg_BG/intro.php b/resources/lang/bg_BG/intro.php index bbb484c2cb..2cf8e13fbe 100644 --- a/resources/lang/bg_BG/intro.php +++ b/resources/lang/bg_BG/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Добре дошли в заглавната страница на Firefly III. Моля отделете време за това въведение, за да усетите как работи Firefly III.', - 'index_accounts-chart' => 'Тази графика показва текущият баланс на вашите сметки за активи. Можете да изберете видимите тук сметки според вашите предпочитания.', - 'index_box_out_holder' => 'Тази малка кутия и кутиите до нея ще ви дадат бърз общ преглед на вашата финансова ситуация.', - 'index_help' => 'Ако някога имате нужда от помощ със страница или форма, натиснете този бутон.', - 'index_outro' => 'Повечето страници на Firefly III ще започнат с малка обиколка като тази. Моля свържете се с мен, когато имате въпроси или коментари. Насладете се!', - 'index_sidebar-toggle' => 'За да създадете нови транзакции, сметки или други неща, използвайте менюто под тази икона.', - 'index_cash_account' => 'Това са създадените досега сметки. Можете да използвате касовата сметка за проследяване на разходите в брой, но това не е задължително.', + 'index_intro' => 'Добре дошли в заглавната страница на Firefly III. Моля отделете време за това въведение, за да усетите как работи Firefly III.', + 'index_accounts-chart' => 'Тази графика показва текущият баланс на вашите сметки за активи. Можете да изберете видимите тук сметки според вашите предпочитания.', + 'index_box_out_holder' => 'Тази малка кутия и кутиите до нея ще ви дадат бърз общ преглед на вашата финансова ситуация.', + 'index_help' => 'Ако някога имате нужда от помощ със страница или форма, натиснете този бутон.', + 'index_outro' => 'Повечето страници на Firefly III ще започнат с малка обиколка като тази. Моля свържете се с мен, когато имате въпроси или коментари. Насладете се!', + 'index_sidebar-toggle' => 'За да създадете нови транзакции, сметки или други неща, използвайте менюто под тази икона.', + 'index_cash_account' => 'Това са създадените досега сметки. Можете да използвате касовата сметка за проследяване на разходите в брой, но това не е задължително.', // transactions - 'transactions_create_basic_info' => 'Въведете основната информация за вашата транзакция. Източник, дестинация, дата и описание.', - 'transactions_create_amount_info' => 'Въведете сумата на транзакцията. Ако е необходимо, полетата ще се актуализират автоматично за информация за сума в чужда валута.', - 'transactions_create_optional_info' => 'Всички тези полета не са задължителни. Добавянето на метаданни тук ще направи вашите транзакции по-добре организирани.', - 'transactions_create_split' => 'Ако искате да разделите транзакция, добавете още разделяния с този бутон', + 'transactions_create_basic_info' => 'Въведете основната информация за вашата транзакция. Източник, дестинация, дата и описание.', + 'transactions_create_amount_info' => 'Въведете сумата на транзакцията. Ако е необходимо, полетата ще се актуализират автоматично за информация за сума в чужда валута.', + 'transactions_create_optional_info' => 'Всички тези полета не са задължителни. Добавянето на метаданни тук ще направи вашите транзакции по-добре организирани.', + 'transactions_create_split' => 'Ако искате да разделите транзакция, добавете още разделяния с този бутон', // create account: - 'accounts_create_iban' => 'Дайте на вашите сметки валиден IBAN. Това може да направи импортирането на данни много лесно в бъдеще.', - 'accounts_create_asset_opening_balance' => 'Сметките за активи може да имат "начално салдо", което показва началото на историята на този акаунт в Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III поддържа множество валути. Сметките за активи имат една основна валута, която трябва да зададете тук.', - 'accounts_create_asset_virtual' => 'Понякога може да е полезно да се даде виртуален баланс на вашата сметка: допълнителна сума, която винаги се добавя към или отстранява от действителното салдо.', + 'accounts_create_iban' => 'Дайте на вашите сметки валиден IBAN. Това може да направи импортирането на данни много лесно в бъдеще.', + 'accounts_create_asset_opening_balance' => 'Сметките за активи може да имат "начално салдо", което показва началото на историята на този акаунт в Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III поддържа множество валути. Сметките за активи имат една основна валута, която трябва да зададете тук.', + 'accounts_create_asset_virtual' => 'Понякога може да е полезно да се даде виртуален баланс на вашата сметка: допълнителна сума, която винаги се добавя към или отстранява от действителното салдо.', // budgets index - 'budgets_index_intro' => 'Бюджетите се използват за управление на вашите финанси и формират една от основните функции на Firefly III.', - 'budgets_index_set_budget' => 'Задайте общия си бюджет за всеки период, за да може Firefly III да ви каже дали сте предвидили всички налични пари.', - 'budgets_index_see_expenses_bar' => 'Харченето на пари бавно ще запълва тази лента.', - 'budgets_index_navigate_periods' => 'Придвижвайте се през периодите, за да задавате лесно бюджетите си напред.', - 'budgets_index_new_budget' => 'Създайте нови бюджети, както сметнете за добре.', - 'budgets_index_list_of_budgets' => 'Използвайте тази таблица, за да зададете сумите за всеки бюджет и да видите как се справяте.', - 'budgets_index_outro' => 'За да научите повече за бюджетирането, проверете иконата за помощ в горния десен ъгъл.', + 'budgets_index_intro' => 'Бюджетите се използват за управление на вашите финанси и формират една от основните функции на Firefly III.', + 'budgets_index_see_expenses_bar' => 'Харченето на пари бавно ще запълва тази лента.', + 'budgets_index_navigate_periods' => 'Придвижвайте се през периодите, за да задавате лесно бюджетите си напред.', + 'budgets_index_new_budget' => 'Създайте нови бюджети, както сметнете за добре.', + 'budgets_index_list_of_budgets' => 'Използвайте тази таблица, за да зададете сумите за всеки бюджет и да видите как се справяте.', + 'budgets_index_outro' => 'За да научите повече за бюджетирането, проверете иконата за помощ в горния десен ъгъл.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Използвайте тези отчети, за да получите подробна информация за вашите финанси.', - 'reports_index_inputReportType' => 'Изберете тип отчет. Разгледайте страниците за помощ, за да видите какво ви показва всеки отчет.', - 'reports_index_inputAccountsSelect' => 'Можете да изключите или включите сметки за активи, както сметнете за добре.', - 'reports_index_inputDateRange' => 'Избраният диапазон от дати зависи изцяло от вас: от един ден до 10 години.', - 'reports_index_extra-options-box' => 'В зависимост от отчета който сте избрали, можете да изберете допълнителни филтри и опции тук. Гледайте това поле, когато променяте типовете отчети.', + 'reports_index_intro' => 'Използвайте тези отчети, за да получите подробна информация за вашите финанси.', + 'reports_index_inputReportType' => 'Изберете тип отчет. Разгледайте страниците за помощ, за да видите какво ви показва всеки отчет.', + 'reports_index_inputAccountsSelect' => 'Можете да изключите или включите сметки за активи, както сметнете за добре.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'В зависимост от отчета който сте избрали, можете да изберете допълнителни филтри и опции тук. Гледайте това поле, когато променяте типовете отчети.', // reports (reports) - 'reports_report_default_intro' => 'Този отчет ще ви даде бърз и изчерпателен преглед на вашите финанси. Ако искате да видите нещо друго, моля не колебайте да се свържете с мен!', - 'reports_report_audit_intro' => 'Този отчет ще ви даде подробна информация за вашите сметки за активи.', - 'reports_report_audit_optionsBox' => 'Използвайте тези квадратчета, за да покажете или скриете колоните които ви интересуват.', + 'reports_report_default_intro' => 'Този отчет ще ви даде бърз и изчерпателен преглед на вашите финанси. Ако искате да видите нещо друго, моля не колебайте да се свържете с мен!', + 'reports_report_audit_intro' => 'Този отчет ще ви даде подробна информация за вашите сметки за активи.', + 'reports_report_audit_optionsBox' => 'Използвайте тези квадратчета, за да покажете или скриете колоните които ви интересуват.', - 'reports_report_category_intro' => 'Този отчет ще ви даде представа за една или няколко категории.', - 'reports_report_category_pieCharts' => 'Тези диаграми ще ви дадат представа за разходите и приходите по категория или по сметка.', - 'reports_report_category_incomeAndExpensesChart' => 'Тази диаграма показва вашите разходи и приходи по категория.', + 'reports_report_category_intro' => 'Този отчет ще ви даде представа за една или няколко категории.', + 'reports_report_category_pieCharts' => 'Тези диаграми ще ви дадат представа за разходите и приходите по категория или по сметка.', + 'reports_report_category_incomeAndExpensesChart' => 'Тази диаграма показва вашите разходи и приходи по категория.', - 'reports_report_tag_intro' => 'Този отчет ще ви даде представа за един или няколко етикета.', - 'reports_report_tag_pieCharts' => 'Тези диаграми ще ви дадат представа за разходите и приходите по етикет, сметка, категория или бюджет.', - 'reports_report_tag_incomeAndExpensesChart' => 'Тази диаграма показва вашите разходи и доходи по етикет.', + 'reports_report_tag_intro' => 'Този отчет ще ви даде представа за един или няколко етикета.', + 'reports_report_tag_pieCharts' => 'Тези диаграми ще ви дадат представа за разходите и приходите по етикет, сметка, категория или бюджет.', + 'reports_report_tag_incomeAndExpensesChart' => 'Тази диаграма показва вашите разходи и доходи по етикет.', 'reports_report_budget_intro' => 'Този отчет ще ви даде представа за един или няколко бюджета.', 'reports_report_budget_pieCharts' => 'Тези диаграми ще ви дадат представа за разходите по бюджет или по сметка.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'До тази лента за прогрес са разположени два бутона (+ и -) за добавяне или премахване на пари от всяка касичка.', 'piggy-banks_index_accountStatus' => 'За всяка сметка за активи с най-малко една касичка статусът е посочен в тази таблица.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Каква е твоята цел? Нов диван, камера, пари за спешни случаи?', 'piggy-banks_create_date' => 'Можете да зададете целева дата или краен срок за вашата касичка.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Използвайте сметки за да проследявате сумата пари, които дължите за всеки период. Помислете за разходи като наем, застраховка или ипотечни плащания.', 'bills_create_name' => 'Използвайте описателно име като "Наем" или "Здравно осигуряване".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Изберете минимална и максимална сума за тази сметка.', 'bills_create_repeat_freq_holder' => 'Повечето сметки се повтарят месечно, но можете да зададете друга честота тук.', 'bills_create_skip_holder' => 'Ако сметката се повтаря на всеки 2 седмици, полето "Пропусни" трябва да бъде настроено на "1", за да се прескача през седмица.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Използвайте този бутон, за да видите кои транзакции биха съответствали на вашето правило.', 'rules_create_actions' => 'Задайте толкова действия, колкото искате.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Повече опции са достъпни зад тези раздели.', diff --git a/resources/lang/bg_BG/list.php b/resources/lang/bg_BG/list.php index a7a25561f8..36d4c5bbec 100644 --- a/resources/lang/bg_BG/list.php +++ b/resources/lang/bg_BG/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Бутони', - 'icon' => 'Икона', - 'id' => 'ID', - 'create_date' => 'Създаден на', - 'update_date' => 'Обновен на', - 'updated_at' => 'Обновен на', - 'balance_before' => 'Баланс преди', - 'balance_after' => 'Баланс след', - 'name' => 'Име', - 'role' => 'Привилегии', - 'currentBalance' => 'Текущ баланс', - 'linked_to_rules' => 'Съответстващи правила', - 'active' => 'Активен ли е?', - 'percentage' => '%', - 'recurring_transaction' => 'Повтарящи се транзакции', - 'next_due' => 'Следващата дължима', - 'transaction_type' => 'Вид', - 'lastActivity' => 'Последна активност', - 'balanceDiff' => 'Балансова разлика', - 'other_meta_data' => 'Други мета данни', - 'invited_at' => 'Поканен на', - 'expires' => 'Поканата изтича', - 'invited_by' => 'Покана от', - 'invite_link' => 'Линк за Покана', - 'account_type' => 'Вид на сметка', - 'created_at' => 'Създаден на', - 'account' => 'Сметка', - 'external_url' => 'Външен линк', - 'matchingAmount' => 'Сума', - 'destination' => 'Дестинация', - 'source' => 'Източник', - 'next_expected_match' => 'Следващo очакванo съвпадение', - 'automatch' => 'Автоматично съвпадение?', + 'buttons' => 'Бутони', + 'icon' => 'Икона', + 'id' => 'ID', + 'create_date' => 'Създаден на', + 'update_date' => 'Обновен на', + 'updated_at' => 'Обновен на', + 'balance_before' => 'Баланс преди', + 'balance_after' => 'Баланс след', + 'name' => 'Име', + 'role' => 'Привилегии', + 'currentBalance' => 'Текущ баланс', + 'linked_to_rules' => 'Съответстващи правила', + 'active' => 'Активен ли е?', + 'percentage' => '%', + 'recurring_transaction' => 'Повтарящи се транзакции', + 'next_due' => 'Следващата дължима', + 'transaction_type' => 'Вид', + 'lastActivity' => 'Последна активност', + 'balanceDiff' => 'Балансова разлика', + 'other_meta_data' => 'Други мета данни', + 'invited_at' => 'Поканен на', + 'expires' => 'Поканата изтича', + 'invited_by' => 'Покана от', + 'invite_link' => 'Линк за Покана', + 'account_type' => 'Вид на сметка', + 'created_at' => 'Създаден на', + 'account' => 'Сметка', + 'external_url' => 'Външен линк', + 'matchingAmount' => 'Сума', + 'destination' => 'Дестинация', + 'source' => 'Източник', + 'next_expected_match' => 'Следващo очакванo съвпадение', + 'automatch' => 'Автоматично съвпадение?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Повторения', 'description' => 'Описание', 'amount' => 'Сума', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Сметка в bunq', 'file_name' => 'Име на файла', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Размер на файла', - 'file_type' => 'Вид файл', - 'attached_to' => 'Приложен към', - 'file_exists' => 'Файлът съществува', - 'spectre_bank' => 'Банка', - 'spectre_last_use' => 'Последно влизане', - 'spectre_status' => 'Състояние', - 'bunq_payment_id' => 'bunq payment ID', - 'repetitions' => 'Повторения', - 'title' => 'Заглавие', - 'transaction_s' => 'Транзакция(и)', - 'field' => 'Поле', - 'value' => 'Стойност', - 'interest' => 'Лихва', - 'interest_period' => 'Лихвен период', - 'liability_type' => 'Вид на задължението', - 'liability_direction' => 'Задължения вход/изход', - 'end_date' => 'Крайна дата', - 'payment_info' => 'Платежна информация', - 'expected_info' => 'Следваща очаквана транзакция', - 'start_date' => 'Начална дата', - 'trigger' => 'Задействане', - 'response' => 'Отговор', - 'delivery' => 'Delivery', - 'url' => 'URL адрес', - 'secret' => 'Тайна', - + 'file_size' => 'Размер на файла', + 'file_type' => 'Вид файл', + 'attached_to' => 'Приложен към', + 'file_exists' => 'Файлът съществува', + 'spectre_bank' => 'Банка', + 'spectre_last_use' => 'Последно влизане', + 'spectre_status' => 'Състояние', + 'bunq_payment_id' => 'bunq payment ID', + 'repetitions' => 'Повторения', + 'title' => 'Заглавие', + 'transaction_s' => 'Транзакция(и)', + 'field' => 'Поле', + 'value' => 'Стойност', + 'interest' => 'Лихва', + 'interest_period' => 'Лихвен период', + 'liability_type' => 'Вид на задължението', + 'liability_direction' => 'Задължения вход/изход', + 'end_date' => 'Крайна дата', + 'payment_info' => 'Платежна информация', + 'expected_info' => 'Следваща очаквана транзакция', + 'start_date' => 'Начална дата', + 'trigger' => 'Задействане', + 'response' => 'Отговор', + 'delivery' => 'Delivery', + 'url' => 'URL адрес', + 'secret' => 'Тайна', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/bg_BG/pagination.php b/resources/lang/bg_BG/pagination.php index cbf5d810b6..ba6ea8aebd 100644 --- a/resources/lang/bg_BG/pagination.php +++ b/resources/lang/bg_BG/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/bg_BG/passwords.php b/resources/lang/bg_BG/passwords.php index 8816297d9e..4fe8db4665 100644 --- a/resources/lang/bg_BG/passwords.php +++ b/resources/lang/bg_BG/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/bg_BG/rules.php b/resources/lang/bg_BG/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/bg_BG/rules.php +++ b/resources/lang/bg_BG/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/bg_BG/validation.php b/resources/lang/bg_BG/validation.php index ff7d684ee9..0afc837eb6 100644 --- a/resources/lang/bg_BG/validation.php +++ b/resources/lang/bg_BG/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'Това е невалиден IBAN.', - 'zero_or_more' => 'Стойността не може да бъде отрицателна.', - 'date_or_time' => 'Стойността трябва да е валидна дата и време (ISO 8601).', - 'source_equals_destination' => 'Разходната сметка е еднаква на приходната сметка.', - 'unique_account_number_for_user' => 'Изглежда, че този номер на сметка вече се използва.', - 'unique_iban_for_user' => 'Изглежда, че този IBAN вече се използва.', - 'deleted_user' => 'Поради съображения за сигурност не можете да се регистрирате, като използвате този имейл адрес.', - 'rule_trigger_value' => 'Тази стойност е невалидна за избраното задействане.', - 'rule_action_value' => 'Тази стойност е невалидна за избраното действие.', - 'file_already_attached' => 'Каченият файл ":name" вече е прикачен към този обект.', - 'file_attached' => 'Успешно качен файл ":name".', - 'must_exist' => 'Идентификаторът в поле :attribute не съществува в базата данни.', - 'all_accounts_equal' => 'Всички сметки в това поле трябва да са еднакви.', - 'group_title_mandatory' => 'Заглавието на групата е задължително, когато има повече от една транзакция.', - 'transaction_types_equal' => 'Всички разделяния трябва да са от един и същи тип.', - 'invalid_transaction_type' => 'Невалиден тип транзакция.', - 'invalid_selection' => 'Изборът ви е невалиден.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Нужна е поне една транзакция.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Нужно е поне едно повторение.', - 'require_repeat_until' => 'Изисква се или брой повторения, или крайна дата (повтори_до). Не и двете.', - 'require_currency_info' => 'Съдържанието на това поле е невалидно без информация за валута.', - 'not_transfer_account' => 'Този акаунт не е акаунт, който може да се използва за прехвърляния.', - 'require_currency_amount' => 'Съдържанието на това поле е невалидно без стойност в другата валута.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Описанието на транзакцията не трябва да е равно на общото описание.', - 'file_invalid_mime' => 'Файлът ":name" е от тип ":mime", който не се приема за качване.', - 'file_too_large' => 'Файлът ":name" е твърде голям.', - 'belongs_to_user' => 'Стойността на :attribute не е известна.', - 'accepted' => ':attribute трябва да бъде приет.', - 'bic' => 'Това е невалиден BIC.', - 'at_least_one_trigger' => 'Правилото трябва да има поне еднo задействане.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'Правилото трябва да има поне еднo действие.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'Това не са валидни base64 кодирани данни.', - 'model_id_invalid' => 'Даденото ID изглежда невалидно за този модел.', - 'less' => ':attribute трябва да е по-малко от 10 000 000', - 'active_url' => ':attribute не е валиден URL адрес.', - 'after' => ':attribute трябва да бъде дата след :date.', - 'date_after' => 'The start date must be before the end date.', - 'alpha' => ':attribute може да съдържа единствено букви.', - 'alpha_dash' => ':attribute може да съдържа само букви, числа и тирета.', - 'alpha_num' => ':attribute може да съдържа само букви и числа.', - 'array' => ':attribute трябва да бъде масив.', - 'unique_for_user' => 'Вече има запис с :attribute.', - 'before' => ':attribute трябва да бъде дата преди :date.', - 'unique_object_for_user' => 'Това име вече се използва.', - 'unique_account_for_user' => 'Това име на потребител вече се използва.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => 'Това е невалиден IBAN.', + 'zero_or_more' => 'Стойността не може да бъде отрицателна.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Стойността трябва да е валидна дата и време (ISO 8601).', + 'source_equals_destination' => 'Разходната сметка е еднаква на приходната сметка.', + 'unique_account_number_for_user' => 'Изглежда, че този номер на сметка вече се използва.', + 'unique_iban_for_user' => 'Изглежда, че този IBAN вече се използва.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Поради съображения за сигурност не можете да се регистрирате, като използвате този имейл адрес.', + 'rule_trigger_value' => 'Тази стойност е невалидна за избраното задействане.', + 'rule_action_value' => 'Тази стойност е невалидна за избраното действие.', + 'file_already_attached' => 'Каченият файл ":name" вече е прикачен към този обект.', + 'file_attached' => 'Успешно качен файл ":name".', + 'must_exist' => 'Идентификаторът в поле :attribute не съществува в базата данни.', + 'all_accounts_equal' => 'Всички сметки в това поле трябва да са еднакви.', + 'group_title_mandatory' => 'Заглавието на групата е задължително, когато има повече от една транзакция.', + 'transaction_types_equal' => 'Всички разделяния трябва да са от един и същи тип.', + 'invalid_transaction_type' => 'Невалиден тип транзакция.', + 'invalid_selection' => 'Изборът ви е невалиден.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Нужна е поне една транзакция.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Нужно е поне едно повторение.', + 'require_repeat_until' => 'Изисква се или брой повторения, или крайна дата (повтори_до). Не и двете.', + 'require_currency_info' => 'Съдържанието на това поле е невалидно без информация за валута.', + 'not_transfer_account' => 'Този акаунт не е акаунт, който може да се използва за прехвърляния.', + 'require_currency_amount' => 'Съдържанието на това поле е невалидно без стойност в другата валута.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'Описанието на транзакцията не трябва да е равно на общото описание.', + 'file_invalid_mime' => 'Файлът ":name" е от тип ":mime", който не се приема за качване.', + 'file_too_large' => 'Файлът ":name" е твърде голям.', + 'belongs_to_user' => 'Стойността на :attribute не е известна.', + 'accepted' => ':attribute трябва да бъде приет.', + 'bic' => 'Това е невалиден BIC.', + 'at_least_one_trigger' => 'Правилото трябва да има поне еднo задействане.', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => 'Правилото трябва да има поне еднo действие.', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => 'Това не са валидни base64 кодирани данни.', + 'model_id_invalid' => 'Даденото ID изглежда невалидно за този модел.', + 'less' => ':attribute трябва да е по-малко от 10 000 000', + 'active_url' => ':attribute не е валиден URL адрес.', + 'after' => ':attribute трябва да бъде дата след :date.', + 'date_after' => 'The start date must be before the end date.', + 'alpha' => ':attribute може да съдържа единствено букви.', + 'alpha_dash' => ':attribute може да съдържа само букви, числа и тирета.', + 'alpha_num' => ':attribute може да съдържа само букви и числа.', + 'array' => ':attribute трябва да бъде масив.', + 'unique_for_user' => 'Вече има запис с :attribute.', + 'before' => ':attribute трябва да бъде дата преди :date.', + 'unique_object_for_user' => 'Това име вече се използва.', + 'unique_account_for_user' => 'Това име на потребител вече се използва.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute трябва да бъде между :min и :max.', + 'between.file' => ':attribute трябва да бъде с големина между :min и :max Kb.', + 'between.string' => ':attribute трябва да бъде с дължина между :min и :max символа.', + 'between.array' => ':attribute трябва да има между :min и :max елемента.', + 'boolean' => ':attribute трябва да бъде вярно или невярно.', + 'confirmed' => 'Потвържденито на :attribute не съвпада.', + 'date' => ':attribute не е валидна дата.', + 'date_format' => ':attribute не е в посоченият формат - :format.', + 'different' => ':attribute и :other трябва да са различни.', + 'digits' => ':attribute трябва да бъде с дължина :digits цифри.', + 'digits_between' => ':attribute трябва да бъде с дължина между :min и :max цифри.', + 'email' => ':attribute трябва да бъде валиден имейл адрес.', + 'filled' => 'Полето :attribute е задължително.', + 'exists' => 'Избраният :attribute е невалиден.', + 'image' => ':attribute трябва да е изображение.', + 'in' => 'Избраният :attribute е невалиден.', + 'integer' => ':attribute трябва да бъде цяло число.', + 'ip' => ':attribute трябва да бъде валиден IP адрес.', + 'json' => ':attribute трябва да е валиден JSON низ.', + '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' => 'Избраният :attribute е невалиден.', + 'numeric' => ':attribute трябва да бъде число.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Сумата в основна валута трябва да бъде число.', + 'numeric_destination' => 'Сумата в приходната сметка трябва да е число.', + 'numeric_source' => 'Сумата в разходната сметка трябва да е число.', + 'regex' => 'Форматът на :attribute е невалиден.', + 'required' => 'Полето :attribute е задължително.', + 'required_if' => 'Полето :attribute е задължително, когато :other е :value.', + 'required_unless' => 'Полето :attribute е задължително, освен когато :other е в :values.', + 'required_with' => 'Полето :attribute е задължително, когато присъства :values.', + 'required_with_all' => 'Полето :attribute е задължително, когато присъства :values.', + 'required_without' => 'Полето :attribute е задължително, когато не присъства :values.', + 'required_without_all' => 'Полето :attribute е задължително, когато не са избрано нищо от :values.', + 'same' => ':attribute и :other трябва да съвпадат.', + 'size.numeric' => ':attribute трябва да бъде :size.', + 'amount_min_over_max' => 'Минималната сума не може да бъде по-голяма от максималната.', + 'size.file' => ':attribute трябва да бъде с големина :size Kb.', + 'size.string' => ':attribute трябва да бъде с дължина :size символа.', + 'size.array' => ':attribute трябва да съдържа :size елемента.', + 'unique' => ':attribute вече е зает.', + 'string' => ':attribute трябва да бъде низ.', + 'url' => 'Форматът на :attribute е невалиден.', + 'timezone' => ':attribute трябва да бъде валидна зона.', + '2fa_code' => 'Форматът на полето :attribute е невалиден.', + 'dimensions' => 'Изображението :attribute има невалидни размери.', + 'distinct' => 'Полето :attribute има дублираща се стойност.', + 'file' => ':attribute трябва да е файл.', + 'in_array' => 'Полето :attribute не съществува в :other.', + 'present' => 'Полето :attribute е задължително.', + 'amount_zero' => 'Общата сума не може да е нула.', + 'current_target_amount' => 'Текущата сума трябва да бъде по-малка от планираната сума.', + 'unique_piggy_bank_for_user' => 'Името на касичката трябва да е уникално.', + 'unique_object_group' => 'Името на групата трябва да е уникално', + 'starts_with' => 'Стойността трябва да започва с :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Both accounts must be of the same account type', + 'same_account_currency' => 'Both accounts must have the same currency setting', - 'between.numeric' => ':attribute трябва да бъде между :min и :max.', - 'between.file' => ':attribute трябва да бъде с големина между :min и :max Kb.', - 'between.string' => ':attribute трябва да бъде с дължина между :min и :max символа.', - 'between.array' => ':attribute трябва да има между :min и :max елемента.', - 'boolean' => ':attribute трябва да бъде вярно или невярно.', - 'confirmed' => 'Потвържденито на :attribute не съвпада.', - 'date' => ':attribute не е валидна дата.', - 'date_format' => ':attribute не е в посоченият формат - :format.', - 'different' => ':attribute и :other трябва да са различни.', - 'digits' => ':attribute трябва да бъде с дължина :digits цифри.', - 'digits_between' => ':attribute трябва да бъде с дължина между :min и :max цифри.', - 'email' => ':attribute трябва да бъде валиден имейл адрес.', - 'filled' => 'Полето :attribute е задължително.', - 'exists' => 'Избраният :attribute е невалиден.', - 'image' => ':attribute трябва да е изображение.', - 'in' => 'Избраният :attribute е невалиден.', - 'integer' => ':attribute трябва да бъде цяло число.', - 'ip' => ':attribute трябва да бъде валиден IP адрес.', - 'json' => ':attribute трябва да е валиден JSON низ.', - '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' => 'Избраният :attribute е невалиден.', - 'numeric' => ':attribute трябва да бъде число.', - 'numeric_native' => 'Сумата в основна валута трябва да бъде число.', - 'numeric_destination' => 'Сумата в приходната сметка трябва да е число.', - 'numeric_source' => 'Сумата в разходната сметка трябва да е число.', - 'regex' => 'Форматът на :attribute е невалиден.', - 'required' => 'Полето :attribute е задължително.', - 'required_if' => 'Полето :attribute е задължително, когато :other е :value.', - 'required_unless' => 'Полето :attribute е задължително, освен когато :other е в :values.', - 'required_with' => 'Полето :attribute е задължително, когато присъства :values.', - 'required_with_all' => 'Полето :attribute е задължително, когато присъства :values.', - 'required_without' => 'Полето :attribute е задължително, когато не присъства :values.', - 'required_without_all' => 'Полето :attribute е задължително, когато не са избрано нищо от :values.', - 'same' => ':attribute и :other трябва да съвпадат.', - 'size.numeric' => ':attribute трябва да бъде :size.', - 'amount_min_over_max' => 'Минималната сума не може да бъде по-голяма от максималната.', - 'size.file' => ':attribute трябва да бъде с големина :size Kb.', - 'size.string' => ':attribute трябва да бъде с дължина :size символа.', - 'size.array' => ':attribute трябва да съдържа :size елемента.', - 'unique' => ':attribute вече е зает.', - 'string' => ':attribute трябва да бъде низ.', - 'url' => 'Форматът на :attribute е невалиден.', - 'timezone' => ':attribute трябва да бъде валидна зона.', - '2fa_code' => 'Форматът на полето :attribute е невалиден.', - 'dimensions' => 'Изображението :attribute има невалидни размери.', - 'distinct' => 'Полето :attribute има дублираща се стойност.', - 'file' => ':attribute трябва да е файл.', - 'in_array' => 'Полето :attribute не съществува в :other.', - 'present' => 'Полето :attribute е задължително.', - 'amount_zero' => 'Общата сума не може да е нула.', - 'current_target_amount' => 'Текущата сума трябва да бъде по-малка от планираната сума.', - 'unique_piggy_bank_for_user' => 'Името на касичката трябва да е уникално.', - 'unique_object_group' => 'Името на групата трябва да е уникално', - 'starts_with' => 'Стойността трябва да започва с :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Both accounts must be of the same account type', - 'same_account_currency' => 'Both accounts must have the same currency setting', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Това не е сигурна парола. Моля, опитайте отново. За повече информация посетете https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Невалиден тип повторение за повтарящи се транзакции.', - 'valid_recurrence_rep_moment' => 'Невалиден момент на повторение за този тип повторение.', - 'invalid_account_info' => 'Невалидна информация за сметка.', - 'attributes' => [ + 'secure_password' => 'Това не е сигурна парола. Моля, опитайте отново. За повече информация посетете https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Невалиден тип повторение за повтарящи се транзакции.', + 'valid_recurrence_rep_moment' => 'Невалиден момент на повторение за този тип повторение.', + 'invalid_account_info' => 'Невалидна информация за сметка.', + 'attributes' => [ 'email' => 'имейл адрес', 'description' => 'описание', 'amount' => 'сума', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Трябва да използвате валидно ID на разходната сметка и / или валидно име на разходната сметка, за да продължите.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Не може да се намери валидна приходна сметка при търсене на ID ":id" или име ":name".', + 'withdrawal_source_need_data' => 'Трябва да използвате валидно ID на разходната сметка и / или валидно име на разходната сметка, за да продължите.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Не може да се намери валидна приходна сметка при търсене на ID ":id" или име ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Трябва да използвате валидно ID на разходната сметка и / или валидно име на разходната сметка, за да продължите.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Не може да се намери валидна приходна сметка при търсене на ID ":id" или име ":name".', - 'deposit_dest_wrong_type' => 'Използваната приходна сметка не е от правилния тип.', + 'deposit_source_need_data' => 'Трябва да използвате валидно ID на разходната сметка и / или валидно име на разходната сметка, за да продължите.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Не може да се намери валидна приходна сметка при търсене на ID ":id" или име ":name".', + 'deposit_dest_wrong_type' => 'Използваната приходна сметка не е от правилния тип.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Трябва да използвате валидно ID на разходната сметка и / или валидно име на разходната сметка, за да продължите.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Не може да се намери валидна приходна сметка при търсене на ID ":id" или име ":name".', + 'need_id_in_edit' => 'Всяко разделяне трябва да има transaction_journal_id (или валидно ID или 0).', - 'transfer_source_need_data' => 'Трябва да използвате валидно ID на разходната сметка и / или валидно име на разходната сметка, за да продължите.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Не може да се намери валидна приходна сметка при търсене на ID ":id" или име ":name".', - 'need_id_in_edit' => 'Всяко разделяне трябва да има transaction_journal_id (или валидно ID или 0).', + 'ob_source_need_data' => 'Трябва да използвате валидно ID на разходната сметка и / или валидно име на разходната сметка, за да продължите.', + 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Не може да се намери валидна приходна сметка при търсене на ID ":id" или име ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Трябва да използвате валидно ID на разходната сметка и / или валидно име на разходната сметка, за да продължите.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Не може да се намери валидна приходна сметка при търсене на ID ":id" или име ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Не може да използвате тази сметка като разходна сметка.', + 'generic_invalid_destination' => 'Не може да използвате тази сметка като приходна сметка.', - 'generic_invalid_source' => 'Не може да използвате тази сметка като разходна сметка.', - 'generic_invalid_destination' => 'Не може да използвате тази сметка като приходна сметка.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => ':attribute трябва да е по-голямо или равно на :value.', - 'gt.numeric' => ':attribute трябва да бъде по-голям от :value.', - 'gte.file' => ':attribute трябва да е по-голямо или равно на :value Kb.', - 'gte.string' => ':attribute трябва да е по-голямо или равно на :value символа.', - 'gte.array' => ':attribute трябва да има :value елемента или повече.', + 'gte.numeric' => ':attribute трябва да е по-голямо или равно на :value.', + 'gt.numeric' => ':attribute трябва да бъде по-голям от :value.', + 'gte.file' => ':attribute трябва да е по-голямо или равно на :value Kb.', + 'gte.string' => ':attribute трябва да е по-голямо или равно на :value символа.', + 'gte.array' => ':attribute трябва да има :value елемента или повече.', 'amount_required_for_auto_budget' => 'Необходима е сума.', 'auto_budget_amount_positive' => 'Сумата трябва да е по-голяма от нула.', + 'auto_budget_period_mandatory' => 'Периодът на автоматичния бюджет е задължително поле.', // no access to administration: diff --git a/resources/lang/ca_ES/api.php b/resources/lang/ca_ES/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/ca_ES/api.php +++ b/resources/lang/ca_ES/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/ca_ES/auth.php b/resources/lang/ca_ES/auth.php index 55be7930b3..efadc85fad 100644 --- a/resources/lang/ca_ES/auth.php +++ b/resources/lang/ca_ES/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Aquestes credencials no es corresponen a les que tenim registrades.', 'throttle' => 'Massa intents d\'inici de sessió. Si us plau, prova-ho en :seconds segons.', diff --git a/resources/lang/ca_ES/breadcrumbs.php b/resources/lang/ca_ES/breadcrumbs.php index 8a6e0a99fe..ddb4815548 100644 --- a/resources/lang/ca_ES/breadcrumbs.php +++ b/resources/lang/ca_ES/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Inici', - 'budgets' => 'Pressupostos', - 'subscriptions' => 'Subscripcions', - 'transactions' => 'Transaccions', - 'title_expenses' => 'Despeses', - 'title_withdrawal' => 'Despeses', - 'title_revenue' => 'Ingressos / salari', - 'title_deposit' => 'Ingressos / salari', - 'title_transfer' => 'Transferències', - 'title_transfers' => 'Transferències', - 'edit_currency' => 'Edita la moneda ":name"', - 'delete_currency' => 'Elimina la moneda ":name"', - 'newPiggyBank' => 'Crea una guardiola nova', - 'edit_piggyBank' => 'Edita la guardiola ":name"', - 'preferences' => 'Preferències', - 'profile' => 'Perfil', - 'accounts' => 'Comptes', - 'changePassword' => 'Canvia la teva contrasenya', - 'change_email' => 'Canvia la teva adreça de correu', - 'bills' => 'Factures', - 'newBill' => 'Nova factura', - 'edit_bill' => 'Edita la factura ":name"', - 'delete_bill' => 'Elimina la factura ":name"', - 'reports' => 'Informes', - 'search_result' => 'Resultats de la cerca ":query"', - 'withdrawal_list' => 'Despeses', - 'Withdrawal_list' => 'Despeses', - 'deposit_list' => 'Benefici, ingressos i dipòsits', - 'transfer_list' => 'Transferències', - 'transfers_list' => 'Transferències', + 'home' => 'Inici', + 'budgets' => 'Pressupostos', + 'subscriptions' => 'Subscripcions', + 'transactions' => 'Transaccions', + 'title_expenses' => 'Despeses', + 'title_withdrawal' => 'Despeses', + 'title_revenue' => 'Ingressos / salari', + 'title_deposit' => 'Ingressos / salari', + 'title_transfer' => 'Transferències', + 'title_transfers' => 'Transferències', + 'edit_currency' => 'Edita la moneda ":name"', + 'delete_currency' => 'Elimina la moneda ":name"', + 'newPiggyBank' => 'Crea una guardiola nova', + 'edit_piggyBank' => 'Edita la guardiola ":name"', + 'preferences' => 'Preferències', + 'profile' => 'Perfil', + 'accounts' => 'Comptes', + 'changePassword' => 'Canvia la teva contrasenya', + 'change_email' => 'Canvia la teva adreça de correu', + 'bills' => 'Factures', + 'newBill' => 'Nova factura', + 'edit_bill' => 'Edita la factura ":name"', + 'delete_bill' => 'Elimina la factura ":name"', + 'reports' => 'Informes', + 'search_result' => 'Resultats de la cerca ":query"', + 'withdrawal_list' => 'Despeses', + 'Withdrawal_list' => 'Despeses', + 'deposit_list' => 'Benefici, ingressos i dipòsits', + 'transfer_list' => 'Transferències', + 'transfers_list' => 'Transferències', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Consolidacions', 'create_withdrawal' => 'Crea un nou reintegrament', 'create_deposit' => 'Crea un nou dipòsit', diff --git a/resources/lang/ca_ES/components.php b/resources/lang/ca_ES/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/ca_ES/components.php +++ b/resources/lang/ca_ES/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ca_ES/config.php b/resources/lang/ca_ES/config.php index 6730ca2775..3bd8587a4b 100644 --- a/resources/lang/ca_ES/config.php +++ b/resources/lang/ca_ES/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'ca', - 'locale' => 'ca, Català, ca_ES.utf8, ca_ES.utf8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'ca', + 'locale' => 'ca, Català, ca_ES.utf8, ca_ES.utf8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMM, YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'Do MMMM, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D MMM, YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'Do MMMM, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd D [de/d\'] MMMM [de] YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd D [de/d\'] MMMM [de] YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'D [de/d\'] MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'D [de/d\'] MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'Do MMMM, YYYY a les HH:mm:ss', + 'date_time_fns' => 'D [de/d\'] MMMM yyyy [a les] HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'Do MMMM, YYYY a les HH:mm:ss', - 'date_time_fns' => 'D [de/d\'] MMMM yyyy [a les] HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Setmana' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Setmana' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Trimestre' Q, yyyy", - 'half_year_fns' => "'S{half}', yyyy", - 'dow_1' => 'Dilluns', - 'dow_2' => 'Dimarts', - 'dow_3' => 'Dimecres', - 'dow_4' => 'Dijous', - 'dow_5' => 'Divendres', - 'dow_6' => 'Dissabte', - 'dow_7' => 'Diumenge', + 'quarter_fns' => "'Trimestre' Q, yyyy", + 'half_year_fns' => "'S{half}', yyyy", + 'dow_1' => 'Dilluns', + 'dow_2' => 'Dimarts', + 'dow_3' => 'Dimecres', + 'dow_4' => 'Dijous', + 'dow_5' => 'Divendres', + 'dow_6' => 'Dissabte', + 'dow_7' => 'Diumenge', ]; /* diff --git a/resources/lang/ca_ES/demo.php b/resources/lang/ca_ES/demo.php index 7e2aa74516..f54415258c 100644 --- a/resources/lang/ca_ES/demo.php +++ b/resources/lang/ca_ES/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ca_ES/email.php b/resources/lang/ca_ES/email.php index 55f40e2209..dc4f387091 100644 --- a/resources/lang/ca_ES/email.php +++ b/resources/lang/ca_ES/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Missatge de prova de la teva instal·lació de Firefly III', 'admin_test_body' => 'Aquest és un missatge de prova de la teva instància de Firefly III. S\'ha enviat a :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'S\'ha creat una invitació', 'invitation_created_body' => 'L\'usuari administrador ":email" ha creat una invitació d\'usuari que pot utilitzar qui estigui darrere l\'adreça de correu ":invitee". La invitació serà vàlida durant 48 h.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Restablir contrasenya:', 'registered_doc_link' => 'Documentació:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Hi ha disponible una nova versió de Firefly III', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Si ho prefereixes, també pots obrir un nou issue a https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'La traça completa és a continuació:', 'error_headers' => 'Les següents capçaleres també podrien ser rellevants:', + 'error_post' => 'Enviat per l\'usuari:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III ha creat una nova transacció|Firefly III ha creat :count noves transaccions', 'new_journals_header' => 'Firefly III ha creat una transacció per tu. Pots trobar-la a la teva instal·lació de Firefly III:|Firefly III ha creat :count transaccions per tu. Les pots trobar a la teva instal·lació de Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'La factura **":name"** venç el :date. Això és **AVUI!**', 'bill_warning_extension_date_zero' => 'La factura **":name"** ha de ser prorrogada o cancel·lada el :date. Això és **AVUI!**', 'bill_warning_please_action' => 'Si us plau, prengui les mesures oportunes.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ca_ES/errors.php b/resources/lang/ca_ES/errors.php index 3779838334..649afbb4d7 100644 --- a/resources/lang/ca_ES/errors.php +++ b/resources/lang/ca_ES/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Traça de la pila', 'more_info' => 'Més informació', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Si us plau, recopili més informació al directori emmagatzematge/registre on hi ha els fitxers de registre. Si utilitzes Docker, utilitza docker logs -f [container].', - 'collect_info_more' => 'Pots llegir més sobre recol·lectar informació d\'errors a les Preguntes Freqüents.', - 'github_help' => 'Obtenir ajuda a GitHub', - 'github_instructions' => 'Ets més que benvingut a obrir un nou issue a GitHub.', - 'use_search' => 'Utilitza la cerca!', - 'include_info' => 'Inclou la informació d\'aquesta pàgina de depuració.', - 'tell_more' => 'Explica\'ns més que "diu Ups"', - 'include_logs' => 'Inclou els registres d\'errors (mirar a sobre).', - 'what_did_you_do' => 'Explica\'ns el que estaves fent.', - 'offline_header' => 'Probablement estàs desconnectat', - 'offline_unreachable' => 'Firefly III no es troba accessible. El teu dispositiu està desconnectat o el servidor no funciona.', - 'offline_github' => 'Si n\'estàs segur que el teu dispositiu i el servidor estan connectats, si us plau, obre un tiquet a GitHub.', - + 'collect_info' => 'Si us plau, recopili més informació al directori emmagatzematge/registre on hi ha els fitxers de registre. Si utilitzes Docker, utilitza docker logs -f [container].', + 'collect_info_more' => 'Pots llegir més sobre la recol·lecció d\'errors a les FAQ.', + 'github_help' => 'Obtenir ajuda a GitHub', + 'github_instructions' => 'Ets més que benvingut a obrir un nou issue a GitHub.', + 'use_search' => 'Utilitza la cerca!', + 'include_info' => 'Inclou la informació d\'aquesta pàgina de depuració.', + 'tell_more' => 'Explica\'ns més que "diu Ups"', + 'include_logs' => 'Inclou els registres d\'errors (mirar a sobre).', + 'what_did_you_do' => 'Explica\'ns el que estaves fent.', + 'offline_header' => 'Probablement estàs desconnectat', + 'offline_unreachable' => 'Firefly III no es troba accessible. El teu dispositiu està desconnectat o el servidor no funciona.', + 'offline_github' => 'Si n\'estàs segur que el teu dispositiu i el servidor estan connectats, si us plau, obre un tiquet a GitHub.', ]; diff --git a/resources/lang/ca_ES/firefly.php b/resources/lang/ca_ES/firefly.php index d6cb64ee7e..5d3fa62a0e 100644 --- a/resources/lang/ca_ES/firefly.php +++ b/resources/lang/ca_ES/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Tancar', - 'actions' => 'Accions', - 'edit' => 'Editar', - 'delete' => 'Eliminar', - 'split' => 'Dividir', - 'single_split' => 'Divisió', - 'clone' => 'Duplicar', - 'confirm_action' => 'Confirmar acció', - 'last_seven_days' => 'Últims set dies', - 'last_thirty_days' => 'Últims trenta dies', - 'last_180_days' => 'Últims 180 dies', - 'month_to_date' => 'Mes en curs', - 'year_to_date' => 'Any en curs', - 'YTD' => 'Any en curs', - 'welcome_back' => 'Què està passant?', - 'everything' => 'Tot', - 'today' => 'avui', - 'customRange' => 'Interval personalitzat', - 'date_range' => 'Interval de dates', - 'apply' => 'Aplicar', - 'select_date' => 'Seleccionar data..', - 'cancel' => 'Cancel·lar', - 'from' => 'De', - 'to' => 'A', - 'structure' => 'Estructura', - 'help_translating' => 'Aquest text d\'ajuda encara no està disponible en el teu idioma. Ens ajudaries a traduir-lo?', - 'showEverything' => 'Mostrar tot', - 'never' => 'Mai', - 'no_results_for_empty_search' => 'La cerca era buida, per la qual cosa no s\'ha trobat res.', - 'removed_amount' => 'Eliminat :amount', - 'added_amount' => 'Afegit :amount', - 'asset_account_role_help' => 'Qualsevol opció addicional resultant de la teva elecció, es pot escollir més endavant.', - 'Opening balance' => 'Saldo inicial', - 'create_new_stuff' => 'Crear coses noves', - 'new_withdrawal' => 'Nova retirada', - 'create_new_transaction' => 'Crear una transacció nova', - 'sidebar_frontpage_create' => 'Crear', - 'new_transaction' => 'Nova transacció', - 'no_rules_for_bill' => 'La factura no té normes associades.', - 'go_to_asset_accounts' => 'Veure el teu compte d\'actius', - 'go_to_budgets' => 'Anar als teus pressupostos', - 'go_to_withdrawals' => 'Anar a les teves retirades', - 'clones_journal_x' => 'Aquesta transacció és duplicada de ":description" (#:id)', - 'go_to_categories' => 'Anar a les teves categories', - 'go_to_bills' => 'Anar a les teves factures', - 'go_to_expense_accounts' => 'Veure els teus comptes de despeses', - 'go_to_revenue_accounts' => 'Veure els teus comptes de beneficis', - 'go_to_piggies' => 'Anar a la teva guardiola', - 'new_deposit' => 'Nou dipòsit', - 'new_transfer' => 'Nova transferència', - 'new_transfers' => 'Nova transferència', - 'new_asset_account' => 'Nou compte d\'actiu', - 'new_expense_account' => 'Nou compte de despeses', - 'new_revenue_account' => 'Nou compte de beneficis', - 'new_liabilities_account' => 'Nou deute', - 'new_budget' => 'Nou pressupost', - 'new_bill' => 'Nova factura', - 'block_account_logout' => 'S\'ha tancat la teva sessió. Els comptes bloquejats no poden utilitzar aquest lloc. T\'has registrat amb una adreça de correu vàlida?', - 'flash_success' => 'Èxit!', - 'flash_info' => 'Missatge', - 'flash_warning' => 'Atenció!', - 'flash_error' => 'Error!', - 'flash_danger' => 'Perill!', - 'flash_info_multiple' => 'Hi ha un missatge|Hi ha :count missatges', - 'flash_error_multiple' => 'Hi ha un error|Hi ha :count errors', - 'net_worth' => 'Valor net', - 'help_for_this_page' => 'Ajuda per aquesta pàgina', - 'help_for_this_page_body' => 'Pots trobar més informació sobre aquesta pàgina a la documentació.', - 'two_factor_welcome' => 'Hola!', - 'two_factor_enter_code' => 'Per continuar, si us plau, introdueix el teu codi d\'autenticació en dues passes. La teva aplicació el pot generar per tu.', - 'two_factor_code_here' => 'Introduir codi aquí', - 'two_factor_title' => 'Autenticació en dues passes', - 'authenticate' => 'Autentificar', - 'two_factor_forgot_title' => 'Autenticació en dues passes perduda', - 'two_factor_forgot' => 'He oblidat la meva cosa de dos factors.', - 'two_factor_lost_header' => 'Has perdut la teva autenticació en dues passes?', - 'two_factor_lost_intro' => 'Si també has perdut els teus codis de seguretat, has tingut mala sort. No hi ha res que puguis fer per arreglar-ho des de la interfície web. Tens dues opcions.', - 'two_factor_lost_fix_self' => 'Si executes la teva pròpia instància de Firefly III, llegeix aquesta entrada al FAQ per obtenir instruccions.', - 'two_factor_lost_fix_owner' => 'Altrament, envia un correu al propietari del lloc, :site_owner i demana-li que reiniciï la teva autenticació de dues passes.', - 'mfa_backup_code' => 'Has fet servir un codi de seguretat per iniciar sessió a Firefly III. No es pot tornar a utilitzar, així que ratlla\'l de la llista.', - 'pref_two_factor_new_backup_codes' => 'Obtenir nous codis de seguretat', - 'pref_two_factor_backup_code_count' => 'Tens :count codi de seguretat vàlid.|Tens :count codis de seguretat vàlids.', - '2fa_i_have_them' => 'Els he guardat!', - 'warning_much_data' => ':days dies de dades poden tardar a carregar-se.', - 'registered' => 'T\'has registrat satisfactòriament!', - 'Default asset account' => 'Compte d\'actius per defecte', - 'no_budget_pointer' => 'Sembla que encara no tens cap pressupost. N\'hauries de crear alguns a la pàgina de pressuposts. Els pressupostos et poden ajudar a fer el seguiment de les teves despeses.', - 'no_bill_pointer' => 'Sembla que encara no tens cap factura. N\'hauries de crear alguna a la pàgina de factures. Les factures et poden ajudar a fer el seguiment de les teves despeses.', - 'Savings account' => 'Compte d\'estalvis', - 'Credit card' => 'Targeta de crèdit', - 'source_accounts' => 'Compte d\'origen|Comptes d\'origen', - 'destination_accounts' => 'Compte de destí|Comptes de destí', - 'user_id_is' => 'El teu identificador d\'usuari és :user', - 'field_supports_markdown' => 'Aquest camp suporta Markdown.', - 'need_more_help' => 'Si necessites més ajuda per utilitzar Firefly III, si us plau, obre un tiquet a GitHub.', - 'reenable_intro_text' => 'També pots tornar a activar la guia d\'introducció.', - 'intro_boxes_after_refresh' => 'Els quadres d\'introducció tornaran a aparèixer quan actualitzis la pàgina.', - 'show_all_no_filter' => 'Mostrar totes les transaccions sense agrupar-les per data.', - 'expenses_by_category' => 'Despeses per categoria', - 'expenses_by_budget' => 'Despeses per pressupost', - 'income_by_category' => 'Ingressos per categoria', - 'expenses_by_asset_account' => 'Despeses per compte d\'actius', - 'expenses_by_expense_account' => 'Despeses per compte de despeses', - 'cannot_redirect_to_account' => 'Firefly III no et pot redirigir a la pàgina correcta. Disculpes.', - 'sum_of_expenses' => 'Total de despeses', - 'sum_of_income' => 'Total d\'ingressos', - 'liabilities' => 'Passius', - 'spent_in_specific_budget' => 'Gastat del pressupost ":budget"', - 'spent_in_specific_double' => 'Gastat del compte ":account"', - 'earned_in_specific_double' => 'Guanyat al compte ":account"', - 'source_account' => 'Compte d\'origen', - 'source_account_reconciliation' => 'No pots editar el compte d\'origen d\'una transacció de consolidació.', - 'destination_account' => 'Compte de destí', - 'destination_account_reconciliation' => 'No pots editar el compte de destí d\'una transacció de reconciliació.', - 'sum_of_expenses_in_budget' => 'Total gastat del pressupost ":budget"', - 'left_in_budget_limit' => 'Disponible per gastar segons el pressupost', - 'current_period' => 'Període actual', - 'show_the_current_period_and_overview' => 'Mostrar el període actual i la vista general', - 'pref_languages_locale' => 'Perquè una llengua diferent de l\'anglès funcioni correctament, el teu sistema operatiu ha de tenir la informació regional correcta. Si no hi és, les dades de monedes, dates i quantitats podrien formatar-se incorrectament.', - 'budget_in_period' => 'Totes les transaccions del pressupost ":name" entre :start i :end en :currency', - 'chart_budget_in_period' => 'Gràfica de totes les transaccions del pressupost ":name" entre :start i :end en :currency', - 'chart_budget_in_period_only_currency' => 'La quantitat la vas pressupostar en :currency, així que la gràfica només mostrarà transaccions en :currency.', - 'chart_account_in_period' => 'Gràfica de totes les transaccions del compte ":name" (:balance) entre :start i :end', - 'chart_category_in_period' => 'Gràfica de totes les transaccions de la categoria ":name" entre :start i :end', - 'chart_category_all' => 'Gràfica de totes les transaccions de la categoria ":name"', - 'clone_withdrawal' => 'Duplicar aquesta retirada', - 'clone_deposit' => 'Duplicar aquest dipòsit', - 'clone_transfer' => 'Duplicar aquesta transferència', - 'multi_select_no_selection' => 'Res seleccionat', - 'multi_select_select_all' => 'Seleccionar-ho tot', - 'multi_select_n_selected' => 'seleccionat', - 'multi_select_all_selected' => 'Tots seleccionats', - 'multi_select_filter_placeholder' => 'Buscar..', - 'intro_next_label' => 'Següent', - 'intro_prev_label' => 'Anterior', - 'intro_skip_label' => 'Ometre', - 'intro_done_label' => 'Fet', - 'between_dates_breadcrumb' => 'Entre :start i :end', - 'all_journals_without_budget' => 'Totes les transaccions sense pressupost', - 'journals_without_budget' => 'Transaccions sense pressupost', - 'all_journals_without_category' => 'Totes les transaccions sense categoria', - 'journals_without_category' => 'Transaccions sense categoria', - 'all_journals_for_account' => 'Totes les transaccions del compte :name', - 'chart_all_journals_for_account' => 'Gràfica de totes les transaccions del compte :name', - 'journals_in_period_for_account' => 'Totes les transaccions del compte :name entre :start i :end', - 'journals_in_period_for_account_js' => 'Totes les transaccions del compte {title} entre {start} i {end}', - 'transferred' => 'Transferit', - 'all_withdrawal' => 'Totes les despeses', - 'all_transactions' => 'Totes les transaccions', - 'title_withdrawal_between' => 'Totes les despeses entre :start i :end', - 'all_deposit' => 'Tots els beneficis', - 'title_deposit_between' => 'Tots els beneficis entre :start i :end', - 'all_transfers' => 'Totes les transferències', - 'title_transfers_between' => 'Totes les transferències entre :start i :end', - 'all_transfer' => 'Totes les transferències', - 'all_journals_for_tag' => 'Totes les transferències amb l\'etiqueta ":tag"', - 'title_transfer_between' => 'Totes les transferències entre :start i :end', - 'all_journals_for_category' => 'Totes les transaccions amb categoria :name', - 'all_journals_for_budget' => 'Totes les transaccions del pressupost :name', - 'chart_all_journals_for_budget' => 'Gràfica de totes les transaccions del pressupost :name', - 'journals_in_period_for_category' => 'Totes les transaccions de la categoria :name entre :start i :end', - 'journals_in_period_for_tag' => 'Totes les transaccions amb etiqueta :tag entre :start i :end', - 'not_available_demo_user' => 'La característica a la qual intentes accedir no es troba disponible pels usuaris de demostració.', - 'exchange_rate_instructions' => 'El compte d\'actius "@name" només accepta transaccions en @native_currency. Si vols utilitzar @foreign_currency, assegurat que la quantitat en @native_currency també sigui coneguda:', - 'transfer_exchange_rate_instructions' => 'El compte d\'actius d\'origen "@source_name" només accepta transaccions en @source_currency. El compte de destí "@dest_name" només accepta transaccions en @dest_currency. Has d\'indicar la quantitat correcta transferida en ambdues monedes.', - 'transaction_data' => 'Dades de transacció', - 'invalid_server_configuration' => 'Configuració del servidor invàlida', - 'invalid_locale_settings' => 'Firefly III no pot formatar quantitats monetàries perquè el servidor no té els paquets necessaris. Hi ha instruccions de com fer-ho.', - 'quickswitch' => 'Canvi ràpid', - 'sign_in_to_start' => 'Inicia sessió per començar', - 'sign_in' => 'Iniciar sessió', - 'register_new_account' => 'Registrar un nou compte', - 'forgot_my_password' => 'He oblidat la meva contrasenya', - 'problems_with_input' => 'Hi ha hagut alguns problemes amb els valors introduïts.', - 'reset_password' => 'Restablir la teva contrasenya', - 'button_reset_password' => 'Restablir contrasenya', - 'reset_button' => 'Restablir', - 'want_to_login' => 'Vull iniciar sessió', - 'login_page_title' => 'Iniciar sessió a Firefly III', - 'register_page_title' => 'Registrar-se a Firefly III', - 'forgot_pw_page_title' => 'Contrasenya de Firefly III oblidada', - 'reset_pw_page_title' => 'Restablir contrasenya de Firefly III', - 'cannot_reset_demo_user' => 'No pots restablir la contrasenya de l\'usuari de demo.', - 'no_att_demo_user' => 'L\'usuari de demostració no pot pujar fitxers adjunts.', - 'button_register' => 'Registrar-se', - 'authorization' => 'Autorització', - 'active_bills_only' => 'només factures actives', - 'active_bills_only_total' => 'totes les factures actives', - 'active_exp_bills_only' => 'només factures actives i esperades', - 'active_exp_bills_only_total' => 'només totes les factures actives esperades', - 'per_period_sum_1D' => 'Costos diaris esperats', - 'per_period_sum_1W' => 'Costos setmanals esperats', - 'per_period_sum_1M' => 'Costos mensuals esperats', - 'per_period_sum_3M' => 'Costos trimestrals esperats', - 'per_period_sum_6M' => 'Costos semestrals esperats', - 'per_period_sum_1Y' => 'Costos anuals esperats', - 'average_per_bill' => 'mitjana per factura', - 'expected_total' => 'total esperat', - 'reconciliation_account_name' => ':name consolidació (:currency)', - 'saved' => 'Guardat', - 'advanced_options' => 'Opcions avançades', - 'advanced_options_explain' => 'Algunes pàgines de Firefly III tenen opcions avançades amagades darrere aquest botó. Aquesta pàgina no té res d\'especial, però pots comprovar les altres!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Tancar', + 'actions' => 'Accions', + 'edit' => 'Editar', + 'delete' => 'Eliminar', + 'split' => 'Dividir', + 'single_split' => 'Divisió', + 'clone' => 'Duplicar', + 'clone_and_edit' => 'Clona i edita', + 'confirm_action' => 'Confirmar acció', + 'last_seven_days' => 'Últims set dies', + 'last_thirty_days' => 'Últims trenta dies', + 'last_180_days' => 'Últims 180 dies', + 'month_to_date' => 'Mes en curs', + 'year_to_date' => 'Any en curs', + 'YTD' => 'Any en curs', + 'welcome_back' => 'Què està passant?', + 'everything' => 'Tot', + 'today' => 'avui', + 'customRange' => 'Interval personalitzat', + 'date_range' => 'Interval de dates', + 'apply' => 'Aplicar', + 'select_date' => 'Seleccionar data..', + 'cancel' => 'Cancel·lar', + 'from' => 'De', + 'to' => 'A', + 'structure' => 'Estructura', + 'help_translating' => 'Aquest text d\'ajuda encara no està disponible en el teu idioma. Ens ajudaries a traduir-lo?', + 'showEverything' => 'Mostrar tot', + 'never' => 'Mai', + 'no_results_for_empty_search' => 'La cerca era buida, per la qual cosa no s\'ha trobat res.', + 'removed_amount' => 'Eliminat :amount', + 'added_amount' => 'Afegit :amount', + 'asset_account_role_help' => 'Qualsevol opció addicional resultant de la teva elecció, es pot escollir més endavant.', + 'Opening balance' => 'Saldo inicial', + 'create_new_stuff' => 'Crear coses noves', + 'new_withdrawal' => 'Nova retirada', + 'create_new_transaction' => 'Crear una transacció nova', + 'sidebar_frontpage_create' => 'Crear', + 'new_transaction' => 'Nova transacció', + 'no_rules_for_bill' => 'La factura no té normes associades.', + 'go_to_asset_accounts' => 'Veure el teu compte d\'actius', + 'go_to_budgets' => 'Anar als teus pressupostos', + 'go_to_withdrawals' => 'Anar a les teves retirades', + 'clones_journal_x' => 'Aquesta transacció és duplicada de ":description" (#:id)', + 'go_to_categories' => 'Anar a les teves categories', + 'go_to_bills' => 'Anar a les teves factures', + 'go_to_expense_accounts' => 'Veure els teus comptes de despeses', + 'go_to_revenue_accounts' => 'Veure els teus comptes de beneficis', + 'go_to_piggies' => 'Anar a la teva guardiola', + 'new_deposit' => 'Nou dipòsit', + 'new_transfer' => 'Nova transferència', + 'new_transfers' => 'Nova transferència', + 'new_asset_account' => 'Nou compte d\'actiu', + 'new_expense_account' => 'Nou compte de despeses', + 'new_revenue_account' => 'Nou compte de beneficis', + 'new_liabilities_account' => 'Nou deute', + 'new_budget' => 'Nou pressupost', + 'new_bill' => 'Nova factura', + 'block_account_logout' => 'S\'ha tancat la teva sessió. Els comptes bloquejats no poden utilitzar aquest lloc. T\'has registrat amb una adreça de correu vàlida?', + 'flash_success' => 'Èxit!', + 'flash_info' => 'Missatge', + 'flash_warning' => 'Atenció!', + 'flash_error' => 'Error!', + 'flash_danger' => 'Perill!', + 'flash_info_multiple' => 'Hi ha un missatge|Hi ha :count missatges', + 'flash_error_multiple' => 'Hi ha un error|Hi ha :count errors', + 'net_worth' => 'Valor net', + 'help_for_this_page' => 'Ajuda per aquesta pàgina', + 'help_for_this_page_body' => 'Pots trobar més informació sobre aquesta pàgina a la documentació.', + 'two_factor_welcome' => 'Hola!', + 'two_factor_enter_code' => 'Per continuar, si us plau, introdueix el teu codi d\'autenticació en dues passes. La teva aplicació el pot generar per tu.', + 'two_factor_code_here' => 'Introduir codi aquí', + 'two_factor_title' => 'Autenticació en dues passes', + 'authenticate' => 'Autentificar', + 'two_factor_forgot_title' => 'Autenticació en dues passes perduda', + 'two_factor_forgot' => 'He oblidat la meva cosa de dos factors.', + 'two_factor_lost_header' => 'Has perdut la teva autenticació en dues passes?', + 'two_factor_lost_intro' => 'Si també has perdut els teus codis de seguretat, has tingut mala sort. No hi ha res que puguis fer per arreglar-ho des de la interfície web. Tens dues opcions.', + 'two_factor_lost_fix_self' => 'Si tens la teva pròpia instància de Firefly III, llegeix :site_owner i demana-li que reiniciï la teva autenticació de dues passes.', + 'mfa_backup_code' => 'Has fet servir un codi de seguretat per iniciar sessió a Firefly III. No es pot tornar a utilitzar, així que ratlla\'l de la llista.', + 'pref_two_factor_new_backup_codes' => 'Obtenir nous codis de seguretat', + 'pref_two_factor_backup_code_count' => 'Tens :count codi de seguretat vàlid.|Tens :count codis de seguretat vàlids.', + '2fa_i_have_them' => 'Els he guardat!', + 'warning_much_data' => ':days dies de dades poden tardar a carregar-se.', + 'registered' => 'T\'has registrat satisfactòriament!', + 'Default asset account' => 'Compte d\'actius per defecte', + 'no_budget_pointer' => 'Sembla que encara no tens cap pressupost. N\'hauries de crear alguns a la pàgina de pressuposts. Els pressupostos et poden ajudar a fer el seguiment de les teves despeses.', + 'no_bill_pointer' => 'Sembla que encara no tens cap factura. N\'hauries de crear alguna a la pàgina de factures. Les factures et poden ajudar a fer el seguiment de les teves despeses.', + 'Savings account' => 'Compte d\'estalvis', + 'Credit card' => 'Targeta de crèdit', + 'source_accounts' => 'Compte d\'origen|Comptes d\'origen', + 'destination_accounts' => 'Compte de destí|Comptes de destí', + 'user_id_is' => 'El teu identificador d\'usuari és :user', + 'field_supports_markdown' => 'Aquest camp suporta Markdown.', + 'need_more_help' => 'Si necessites més ajuda per utilitzar Firefly III, si us plau, obre un tiquet a GitHub.', + 'reenable_intro_text' => 'També pots tornar a activar la guia d\'introducció.', + 'intro_boxes_after_refresh' => 'Els quadres d\'introducció tornaran a aparèixer quan actualitzis la pàgina.', + 'show_all_no_filter' => 'Mostrar totes les transaccions sense agrupar-les per data.', + 'expenses_by_category' => 'Despeses per categoria', + 'expenses_by_budget' => 'Despeses per pressupost', + 'income_by_category' => 'Ingressos per categoria', + 'expenses_by_asset_account' => 'Despeses per compte d\'actius', + 'expenses_by_expense_account' => 'Despeses per compte de despeses', + 'cannot_redirect_to_account' => 'Firefly III no et pot redirigir a la pàgina correcta. Disculpes.', + 'sum_of_expenses' => 'Total de despeses', + 'sum_of_income' => 'Total d\'ingressos', + 'liabilities' => 'Passius', + 'spent_in_specific_budget' => 'Gastat del pressupost ":budget"', + 'spent_in_specific_double' => 'Gastat del compte ":account"', + 'earned_in_specific_double' => 'Guanyat al compte ":account"', + 'source_account' => 'Compte d\'origen', + 'source_account_reconciliation' => 'No pots editar el compte d\'origen d\'una transacció de consolidació.', + 'destination_account' => 'Compte de destí', + 'destination_account_reconciliation' => 'No pots editar el compte de destí d\'una transacció de reconciliació.', + 'sum_of_expenses_in_budget' => 'Total gastat del pressupost ":budget"', + 'left_in_budget_limit' => 'Disponible per gastar segons el pressupost', + 'current_period' => 'Període actual', + 'show_the_current_period_and_overview' => 'Mostrar el període actual i la vista general', + 'pref_languages_locale' => 'Perquè una llengua diferent de l\'anglès funcioni correctament, el teu sistema operatiu ha de tenir la informació regional correcta. Si no hi és, les dades de monedes, dates i quantitats podrien formatar-se incorrectament.', + 'budget_in_period' => 'Totes les transaccions del pressupost ":name" entre :start i :end en :currency', + 'chart_budget_in_period' => 'Gràfica de totes les transaccions del pressupost ":name" entre :start i :end en :currency', + 'chart_budget_in_period_only_currency' => 'La quantitat la vas pressupostar en :currency, així que la gràfica només mostrarà transaccions en :currency.', + 'chart_account_in_period' => 'Gràfica de totes les transaccions del compte ":name" (:balance) entre :start i :end', + 'chart_category_in_period' => 'Gràfica de totes les transaccions de la categoria ":name" entre :start i :end', + 'chart_category_all' => 'Gràfica de totes les transaccions de la categoria ":name"', + 'clone_withdrawal' => 'Duplicar aquesta retirada', + 'clone_deposit' => 'Duplicar aquest dipòsit', + 'clone_transfer' => 'Duplicar aquesta transferència', + 'multi_select_no_selection' => 'Res seleccionat', + 'multi_select_select_all' => 'Seleccionar-ho tot', + 'multi_select_n_selected' => 'seleccionat', + 'multi_select_all_selected' => 'Tots seleccionats', + 'multi_select_filter_placeholder' => 'Buscar..', + 'intro_next_label' => 'Següent', + 'intro_prev_label' => 'Anterior', + 'intro_skip_label' => 'Ometre', + 'intro_done_label' => 'Fet', + 'between_dates_breadcrumb' => 'Entre :start i :end', + 'all_journals_without_budget' => 'Totes les transaccions sense pressupost', + 'journals_without_budget' => 'Transaccions sense pressupost', + 'all_journals_without_category' => 'Totes les transaccions sense categoria', + 'journals_without_category' => 'Transaccions sense categoria', + 'all_journals_for_account' => 'Totes les transaccions del compte :name', + 'chart_all_journals_for_account' => 'Gràfica de totes les transaccions del compte :name', + 'journals_in_period_for_account' => 'Totes les transaccions del compte :name entre :start i :end', + 'journals_in_period_for_account_js' => 'Totes les transaccions del compte {title} entre {start} i {end}', + 'transferred' => 'Transferit', + 'all_withdrawal' => 'Totes les despeses', + 'all_transactions' => 'Totes les transaccions', + 'title_withdrawal_between' => 'Totes les despeses entre :start i :end', + 'all_deposit' => 'Tots els beneficis', + 'title_deposit_between' => 'Tots els beneficis entre :start i :end', + 'all_transfers' => 'Totes les transferències', + 'title_transfers_between' => 'Totes les transferències entre :start i :end', + 'all_transfer' => 'Totes les transferències', + 'all_journals_for_tag' => 'Totes les transferències amb l\'etiqueta ":tag"', + 'title_transfer_between' => 'Totes les transferències entre :start i :end', + 'all_journals_for_category' => 'Totes les transaccions amb categoria :name', + 'all_journals_for_budget' => 'Totes les transaccions del pressupost :name', + 'chart_all_journals_for_budget' => 'Gràfica de totes les transaccions del pressupost :name', + 'journals_in_period_for_category' => 'Totes les transaccions de la categoria :name entre :start i :end', + 'journals_in_period_for_tag' => 'Totes les transaccions amb etiqueta :tag entre :start i :end', + 'not_available_demo_user' => 'La característica a la qual intentes accedir no es troba disponible pels usuaris de demostració.', + 'exchange_rate_instructions' => 'El compte d\'actius "@name" només accepta transaccions en @native_currency. Si vols utilitzar @foreign_currency, assegurat que la quantitat en @native_currency també sigui coneguda:', + 'transfer_exchange_rate_instructions' => 'El compte d\'actius d\'origen "@source_name" només accepta transaccions en @source_currency. El compte de destí "@dest_name" només accepta transaccions en @dest_currency. Has d\'indicar la quantitat correcta transferida en ambdues monedes.', + 'transaction_data' => 'Dades de transacció', + 'invalid_server_configuration' => 'Configuració del servidor invàlida', + 'invalid_locale_settings' => 'Firefly III no pot formatar quantitats monetàries perquè el teu servidor no té instal·lats alguns paquets necessaris. Hi ha instruccions sobre com fer-ho.', + 'quickswitch' => 'Canvi ràpid', + 'sign_in_to_start' => 'Inicia sessió per començar', + 'sign_in' => 'Iniciar sessió', + 'register_new_account' => 'Registrar un nou compte', + 'forgot_my_password' => 'He oblidat la meva contrasenya', + 'problems_with_input' => 'Hi ha hagut alguns problemes amb els valors introduïts.', + 'reset_password' => 'Restablir la teva contrasenya', + 'button_reset_password' => 'Restablir contrasenya', + 'reset_button' => 'Restablir', + 'want_to_login' => 'Vull iniciar sessió', + 'login_page_title' => 'Iniciar sessió a Firefly III', + 'register_page_title' => 'Registrar-se a Firefly III', + 'forgot_pw_page_title' => 'Contrasenya de Firefly III oblidada', + 'reset_pw_page_title' => 'Restablir contrasenya de Firefly III', + 'cannot_reset_demo_user' => 'No pots restablir la contrasenya de l\'usuari de demo.', + 'no_att_demo_user' => 'L\'usuari de demostració no pot pujar fitxers adjunts.', + 'button_register' => 'Registrar-se', + 'authorization' => 'Autorització', + 'active_bills_only' => 'només factures actives', + 'active_bills_only_total' => 'totes les factures actives', + 'active_exp_bills_only' => 'només factures actives i esperades', + 'active_exp_bills_only_total' => 'només totes les factures actives esperades', + 'per_period_sum_1D' => 'Costos diaris esperats', + 'per_period_sum_1W' => 'Costos setmanals esperats', + 'per_period_sum_1M' => 'Costos mensuals esperats', + 'per_period_sum_3M' => 'Costos trimestrals esperats', + 'per_period_sum_6M' => 'Costos semestrals esperats', + 'per_period_sum_1Y' => 'Costos anuals esperats', + 'average_per_bill' => 'mitjana per factura', + 'expected_total' => 'total esperat', + 'reconciliation_account_name' => ':name consolidació (:currency)', + 'saved' => 'Guardat', + 'advanced_options' => 'Opcions avançades', + 'advanced_options_explain' => 'Algunes pàgines de Firefly III tenen opcions avançades amagades darrere aquest botó. Aquesta pàgina no té res d\'especial, però pots comprovar les altres!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'No hi ha missatges webhook', - 'webhook_trigger_STORE_TRANSACTION' => 'Després de crear la transacció', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Després d\'actualitzar la transacció', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Després d\'eliminar la transacció', - 'webhook_response_TRANSACTIONS' => 'Detalls de la transacció', - 'webhook_response_ACCOUNTS' => 'Detalls del compte', - 'webhook_response_none_NONE' => 'Sense detalls', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspeccionar', - 'create_new_webhook' => 'Crear nou webhook', - 'webhooks_create_breadcrumb' => 'Crear nou webhook', - 'webhook_trigger_form_help' => 'Indicar quin esdeveniment activarà el webhook', - 'webhook_response_form_help' => 'Indicar què ha d\'enviar el webhook a l\'URL.', - 'webhook_delivery_form_help' => 'En quin format ha d\'entregar les dades el webhook.', - 'webhook_active_form_help' => 'El wehook ha d\'estar actiu o no es cridarà.', - 'stored_new_webhook' => 'Nou webhook guardat ":title"', - 'delete_webhook' => 'Webhook eliminat', - 'deleted_webhook' => 'Webhook eliminat ":title"', - 'edit_webhook' => 'Editar webhook ":title"', - 'updated_webhook' => 'Webhook actualitzat ":title"', - 'edit_webhook_js' => 'Editar webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'El webhook ha sigut cridat a la transacció indicada. Per favor, espera a que apareguen els resultats.', - 'webhook_messages' => 'Missatge del webhook', - 'view_message' => 'Veure el missatge', - 'view_attempts' => 'Veure intents fallits', - 'message_content_title' => 'Contingut del missatge del webhook', - 'message_content_help' => 'Aquest és el contingut del missatge que s\'ha enviat (o s\'ha intentat) utilitzant aquest webhook.', - 'attempt_content_title' => 'Intents de webhook', - 'attempt_content_help' => 'Aquests han estat tots els intents sense èxit d\'enviar el missatge del webhook a l\'URL configurat. Després de cert temps, Firefly III deixarà de provar-ho.', - 'no_attempts' => 'No hi ha hagut intents sense èxit. Això és bon senyal!', - 'webhook_attempt_at' => 'Intent de {moment}', - 'logs' => 'Registres', - 'response' => 'Resposta', - 'visit_webhook_url' => 'Visitar l\'URL del webhook', - 'reset_webhook_secret' => 'Reiniciar el secret del webhook', - 'webhook_stored_link' => 'S\'ha desat el Webook #{ID} ("{title}") correctament.', - 'webhook_updated_link' => 'S\'ha actualitzat el Webook #{ID} ("{title}").', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'deshabilitat', + 'no_webhook_messages' => 'No hi ha missatges webhook', + 'webhook_trigger_STORE_TRANSACTION' => 'Després de crear la transacció', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Després d\'actualitzar la transacció', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Després d\'eliminar la transacció', + 'webhook_response_TRANSACTIONS' => 'Detalls de la transacció', + 'webhook_response_ACCOUNTS' => 'Detalls del compte', + 'webhook_response_none_NONE' => 'Sense detalls', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspeccionar', + 'create_new_webhook' => 'Crear nou webhook', + 'webhooks_create_breadcrumb' => 'Crear nou webhook', + 'webhook_trigger_form_help' => 'Indicar quin esdeveniment activarà el webhook', + 'webhook_response_form_help' => 'Indicar què ha d\'enviar el webhook a l\'URL.', + 'webhook_delivery_form_help' => 'En quin format ha d\'entregar les dades el webhook.', + 'webhook_active_form_help' => 'El wehook ha d\'estar actiu o no es cridarà.', + 'stored_new_webhook' => 'Nou webhook guardat ":title"', + 'delete_webhook' => 'Webhook eliminat', + 'deleted_webhook' => 'Webhook eliminat ":title"', + 'edit_webhook' => 'Editar webhook ":title"', + 'updated_webhook' => 'Webhook actualitzat ":title"', + 'edit_webhook_js' => 'Editar webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'El webhook ha sigut cridat a la transacció indicada. Per favor, espera a que apareguen els resultats.', + 'webhook_messages' => 'Missatge del webhook', + 'view_message' => 'Veure el missatge', + 'view_attempts' => 'Veure intents fallits', + 'message_content_title' => 'Contingut del missatge del webhook', + 'message_content_help' => 'Aquest és el contingut del missatge que s\'ha enviat (o s\'ha intentat) utilitzant aquest webhook.', + 'attempt_content_title' => 'Intents de webhook', + 'attempt_content_help' => 'Aquests han estat tots els intents sense èxit d\'enviar el missatge del webhook a l\'URL configurat. Després de cert temps, Firefly III deixarà de provar-ho.', + 'no_attempts' => 'No hi ha hagut intents sense èxit. Això és bon senyal!', + 'webhook_attempt_at' => 'Intent de {moment}', + 'logs' => 'Registres', + 'response' => 'Resposta', + 'visit_webhook_url' => 'Visitar l\'URL del webhook', + 'reset_webhook_secret' => 'Reiniciar el secret del webhook', + 'webhook_stored_link' => 'S\'ha desat el Webook #{ID} ("{title}") correctament.', + 'webhook_updated_link' => 'S\'ha actualitzat el Webook #{ID} ("{title}").', // API access - 'authorization_request' => 'Firefly III v:version Sol·licitud d\'Autorització', - 'authorization_request_intro' => 'L\'aplicació ":client" està demanant permís per tenir accés a l\'administració de les teves finances. Vols autoritzar a :client a accedir a les dades?', - 'authorization_request_site' => 'Seràs redirigit a :url que podrà accedir a les dades del teu Firefly III.', - 'authorization_request_invalid' => 'Aquesta sol·licitud d\'accés no és vàlida. Si us plau, no tornis a obrir aquest enllaç.', - 'scopes_will_be_able' => 'Aquesta aplicació podrà:', - 'button_authorize' => 'Autoritzar', - 'none_in_select_list' => '(cap)', - 'no_piggy_bank' => '(sense guardiola)', - 'name_in_currency' => ':name en :currency', - 'paid_in_currency' => 'Pagat en :currency', - 'unpaid_in_currency' => 'Pendent de pagament en :currency', - 'is_alpha_warning' => 'Estàs executant una versió ALFA. Ves amb compte amb els errors i problemes.', - 'is_beta_warning' => 'Estàs executant una versió BETA. Ves amb compte amb els errors i problemes.', - 'all_destination_accounts' => 'Comptes de destí', - 'all_source_accounts' => 'Comptes d\'origen', - 'back_to_index' => 'Tornar a l\'índex', - 'cant_logout_guard' => 'Firefly III no pot tancar la sessió.', - 'internal_reference' => 'Referència interna', + 'authorization_request' => 'Firefly III v:version Sol·licitud d\'Autorització', + 'authorization_request_intro' => 'L\'aplicació ":client" està demanant permís per tenir accés a l\'administració de les teves finances. Vols autoritzar a :client a accedir a les dades?', + 'authorization_request_site' => 'Seràs redirigit a :url que podrà accedir a les dades del teu Firefly III.', + 'authorization_request_invalid' => 'Aquesta sol·licitud d\'accés no és vàlida. Si us plau, no tornis a obrir aquest enllaç.', + 'scopes_will_be_able' => 'Aquesta aplicació podrà:', + 'button_authorize' => 'Autoritzar', + 'none_in_select_list' => '(cap)', + 'no_piggy_bank' => '(sense guardiola)', + 'name_in_currency' => ':name en :currency', + 'paid_in_currency' => 'Pagat en :currency', + 'unpaid_in_currency' => 'Pendent de pagament en :currency', + 'is_alpha_warning' => 'Estàs executant una versió ALFA. Ves amb compte amb els errors i problemes.', + 'is_beta_warning' => 'Estàs executant una versió BETA. Ves amb compte amb els errors i problemes.', + 'all_destination_accounts' => 'Comptes de destí', + 'all_source_accounts' => 'Comptes d\'origen', + 'back_to_index' => 'Tornar a l\'índex', + 'cant_logout_guard' => 'Firefly III no pot tancar la sessió.', + 'internal_reference' => 'Referència interna', // check for updates: - 'update_check_title' => 'Buscar actualitzacions', - 'admin_update_check_title' => 'Buscar actualitzacions automàticament', - 'admin_update_check_explain' => 'Firefly III pot buscar actualitzacions automàticament. Quan actives aquesta peferència, contactarà el servidor d\'actualitzacions de Firefly III per comprovar si hi ha una nova versió de Firefly III disponible. Quan hi sigui, se\'t notificarà. Pots provar aquesta notificació utilitzant el botó de la dreta. Si us plau, indica a sota si vols que Firefly III busqui actualitzacions.', - 'check_for_updates_permission' => 'Firefly III pot buscar actualitzacions, però necessita el teu permís per a fer-ho. Si us plau, ves a administració per indicar si vols activar aquesta característica.', - 'updates_ask_me_later' => 'Pregunta\'m més endavant', - 'updates_do_not_check' => 'No busquis actualitzacions', - 'updates_enable_check' => 'Activa el buscador d\'actualitzacions', - 'admin_update_check_now_title' => 'Busca actualitzacions ara', - 'admin_update_check_now_explain' => 'Si prems el botó, Firefly III comprovarà si la versió actual és l\'última.', - 'check_for_updates_button' => 'Comprovar ara!', - 'update_new_version_alert' => 'Hi ha una nova versió de Firefly III disponible. Estàs executant la versió :your_version, i l\'última versió és la :new_version que es va publicar el :date.', - 'update_version_beta' => 'Aquesta és una versió BETA. Podries tenir problemes.', - 'update_version_alpha' => 'Aquesta és una versió ALFA. Podries tenir problemes.', - 'update_current_version_alert' => 'Estàs executant :version, que és l\'última versió disponible.', - 'update_newer_version_alert' => 'Estàs executant :your_version, que és més nova que l\'última versió, :new_version.', - 'update_check_error' => 'Ha succeït un error mentre es comprovaven les actualitzacions: :error', - 'unknown_error' => 'Error desconegut. Ho sento.', - 'just_new_release' => 'Hi ha una nova versió disponible! La versió :version es va publicar el :date. Aquesta versió és molt fresca. Espera uns dies a què la nova versió s\'estabilitzi.', - 'disabled_but_check' => 'Has desactivat la cerca d\'actualitzacions. Així que no t\'oblidis de comprovar les actualitzacions tu mateix de tant en tant. Gràcies!', - 'admin_update_channel_title' => 'Canal d\'actualitzacions', - 'admin_update_channel_explain' => 'Firefly III té tres "canals" d\'actualització que determinen quant d\'avançat estàs en termes de característiques, millores i errors. Utilitza el canal "beta" si ets un aventurer i "alfa" si t\'agrada viure al límit.', - 'update_channel_stable' => 'Estable. Tot hauria de funcionar com s\'espera.', - 'update_channel_beta' => 'Beta. Noves característiques, però algunes coses podrien fallar.', - 'update_channel_alpha' => 'Alfa. Anem provant coses, i utilitzem el que funcioni.', + 'update_check_title' => 'Buscar actualitzacions', + 'admin_update_check_title' => 'Buscar actualitzacions automàticament', + 'admin_update_check_explain' => 'Firefly III pot buscar actualitzacions automàticament. Quan actives aquesta peferència, contactarà el servidor d\'actualitzacions de Firefly III per comprovar si hi ha una nova versió de Firefly III disponible. Quan hi sigui, se\'t notificarà. Pots provar aquesta notificació utilitzant el botó de la dreta. Si us plau, indica a sota si vols que Firefly III busqui actualitzacions.', + 'check_for_updates_permission' => 'Firefly III pot buscar actualitzacions, però necessita el teu permís per a fer-ho. Si us plau, ves a administració per indicar si vols activar aquesta característica.', + 'updates_ask_me_later' => 'Pregunta\'m més endavant', + 'updates_do_not_check' => 'No busquis actualitzacions', + 'updates_enable_check' => 'Activa el buscador d\'actualitzacions', + 'admin_update_check_now_title' => 'Busca actualitzacions ara', + 'admin_update_check_now_explain' => 'Si prems el botó, Firefly III comprovarà si la versió actual és l\'última.', + 'check_for_updates_button' => 'Comprovar ara!', + 'update_new_version_alert' => 'Hi ha una nova versió de Firefly III disponible. Estàs executant la versió :your_version, i l\'última versió és la :new_version que es va publicar el :date.', + 'update_version_beta' => 'Aquesta és una versió BETA. Podries tenir problemes.', + 'update_version_alpha' => 'Aquesta és una versió ALFA. Podries tenir problemes.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Estàs executant :version, que és l\'última versió disponible.', + 'update_newer_version_alert' => 'Estàs executant :your_version, que és més nova que l\'última versió, :new_version.', + 'update_check_error' => 'Ha succeït un error mentre es comprovaven les actualitzacions: :error', + 'unknown_error' => 'Error desconegut. Ho sento.', + 'disabled_but_check' => 'Has desactivat la cerca d\'actualitzacions. Així que no t\'oblidis de comprovar les actualitzacions tu mateix de tant en tant. Gràcies!', + 'admin_update_channel_title' => 'Canal d\'actualitzacions', + 'admin_update_channel_explain' => 'Firefly III té tres "canals" d\'actualització que determinen quant d\'avançat estàs en termes de característiques, millores i errors. Utilitza el canal "beta" si ets un aventurer i "alfa" si t\'agrada viure al límit.', + 'update_channel_stable' => 'Estable. Tot hauria de funcionar com s\'espera.', + 'update_channel_beta' => 'Beta. Noves característiques, però algunes coses podrien fallar.', + 'update_channel_alpha' => 'Alfa. Anem provant coses, i utilitzem el que funcioni.', // search - 'search' => 'Cercar', - 'search_query' => 'Consulta', - 'search_found_transactions' => 'Firefly III ha trobat :count transacció en :time segons.|Firefly III ha trobat :count transaccions en :time segons.', - 'search_found_more_transactions' => 'Firefly III ha trobat més de :count transaccions en :time segons.', - 'search_for_query' => 'Firefly III està cercant transaccions que continguin totes aquestes paraules: :query', - 'invalid_operators_list' => 'Aquests paràmetres de cerca no són vàlids i s\'han ignorat.', + 'search' => 'Cercar', + 'search_query' => 'Consulta', + 'search_found_transactions' => 'Firefly III ha trobat :count transacció en :time segons.|Firefly III ha trobat :count transaccions en :time segons.', + 'search_found_more_transactions' => 'Firefly III ha trobat més de :count transaccions en :time segons.', + 'search_for_query' => 'Firefly III està cercant transaccions que continguin totes aquestes paraules: :query', + 'invalid_operators_list' => 'Aquests paràmetres de cerca no són vàlids i s\'han ignorat.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'La data de la transacció és ":value"', 'search_modifier_not_date_on' => 'La data de la transacció no és ":value"', 'search_modifier_reconciled' => 'La transacció s\'ha consolidat', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'El tipus de transacció és ":value"', 'search_modifier_not_transaction_type' => 'El tipus de transacció no és ":value"', 'search_modifier_tag_is' => 'L\'etiqueta és ":value"', + 'search_modifier_tag_contains' => 'L\'etiqueta conté ":value"', + 'search_modifier_not_tag_contains' => 'L\'etiqueta no conté ":value"', + 'search_modifier_tag_ends' => 'L\'etiqueta acaba amb ":value"', + 'search_modifier_tag_starts' => 'L\'etiqueta comença amb ":value"', 'search_modifier_not_tag_is' => 'Cap etiqueta és ":value"', 'search_modifier_date_on_year' => 'L\'any de la transacció és ":value"', 'search_modifier_not_date_on_year' => 'L\'any de la transacció no és ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'El mes de la transacció és igual o posterior a ":value"', 'search_modifier_date_after_day' => 'El dia del mes de la transacció és igual o posterior a ":value"', - // new 'search_modifier_tag_is_not' => 'Cap etiqueta és ":value"', 'search_modifier_not_tag_is_not' => 'L\'etiqueta és ":value"', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => 'Crear regla nova a partir de la consulta de la cerca', 'rule_from_search_words' => 'El motor de regles ha tingut problemes gestionant ":string". La regla suggerida que s\'ajusti a la consulta de cerca pot donar resultats diferents. Si us plau, verifica els activadors de la regla curosament.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Els següents modificadors també s\'han aplicat a la cerca:', 'general_search_error' => 'Ha succeït un error durant la cerca. Si us plau, comprova els fitxers de registre per obtenir més informació.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'No', 'cannot_fire_inactive_rules' => 'No pots executar regles inactives.', + 'show_triggers' => 'Mostra els activadors', + 'show_actions' => 'Mostra les accions', 'rules' => 'Regles', 'rule_name' => 'Nom de la regla', 'rule_triggers' => 'La regla s\'activa quan', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Quan s\'actualitza una transacció', 'rule_trigger_user_action' => 'L\'acció de l\'usuari és ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'El nom del compte d\'origen comença per..', 'rule_trigger_source_account_starts' => 'El nom del compte d\'origen comença per ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'El pressupost és ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Qualsevol etiqueta és..', 'rule_trigger_tag_is' => 'Qualsevol etiqueta és ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'La moneda de la transacció és..', 'rule_trigger_currency_is' => 'La moneda de la transacció és ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'La moneda estrangera de la transacció és..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'La transacció no existeix', 'rule_trigger_not_has_attachments' => 'La transacció no té fitxers adjunts', 'rule_trigger_not_has_any_category' => 'La transacció no té categoria', - 'rule_trigger_not_has_any_budget' => 'La transacció no té categoria', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'La transacció no té factura', 'rule_trigger_not_has_any_tag' => 'La transacció no té etiquetes', 'rule_trigger_not_any_notes' => 'La transacció no té notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'El compte de destí no és un compte d\'efectiu', 'rule_trigger_not_account_is_cash' => 'Cap dels comptes és un compte d\'efectiu', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'ELIMINAR transacció(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Afegir notes a la descripció', 'rule_action_move_descr_to_notes' => 'Substituir les notes per la descripció', 'rule_action_move_notes_to_descr' => 'Substituir la descripció per les notes', + 'rule_action_set_destination_to_cash_choice' => 'Establir el compte destí a (efectiu)', + 'rule_action_set_source_to_cash_choice' => 'Establir el compte font a (efectiu)', 'rulegroup_for_bills_title' => 'Grup de regles per factures', 'rulegroup_for_bills_description' => 'Un grup de regles especial per totes les regles que involucren factures.', 'rule_for_bill_title' => 'Regla autogenerada per la factura ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Regla per la factura ":name"', 'new_rule_for_bill_description' => 'Aquesta regla marca les transaccions per la factura ":name".', - 'new_rule_for_journal_title' => 'Regla basada en la transacció ":description"', - 'new_rule_for_journal_description' => 'Aquesta regla està basada en la transacció ":description". Farà coincidència amb les transaccions que siguin exactament iguals.', + 'new_rule_for_journal_title' => 'Regla basada en la transacció ":description"', + 'new_rule_for_journal_description' => 'Aquesta regla està basada en la transacció ":description". Farà coincidència amb les transaccions que siguin exactament iguals.', // tags - 'store_new_tag' => 'Guardar nova etiqueta', - 'update_tag' => 'Actualitzar etiqueta', - 'no_location_set' => 'Ubicació no establerta.', - 'meta_data' => 'Meta dades', - 'location' => 'Ubicació', - 'without_date' => 'Sense data', - 'result' => 'Resultat', - 'sums_apply_to_range' => 'Totes les sumes s\'apliquen al rang seleccionat', - 'mapbox_api_key' => 'Per fer servir el mapa, aconsegueix una clau API de Mapbox. Obre el fitxer .env i introdueix-hi el codi després de MAPBOX_API_KEY=.', - 'press_object_location' => 'Botó dret o premi de forma prolongada per definir la ubicació de l\'objecte.', - 'clear_location' => 'Netejar ubicació', - 'delete_all_selected_tags' => 'Eliminar totes les etiquetes seleccionades', - 'select_tags_to_delete' => 'No t\'oblidis de seleccionar alguna etiqueta.', - 'deleted_x_tags' => ':count etiqueta eliminada.|:count etiquetes eliminades.', - 'create_rule_from_transaction' => 'Crear regla basada en la transacció', - 'create_recurring_from_transaction' => 'Crear transacció periòdica basada en la transacció', - + 'store_new_tag' => 'Guardar nova etiqueta', + 'update_tag' => 'Actualitzar etiqueta', + 'no_location_set' => 'Ubicació no establerta.', + 'meta_data' => 'Meta dades', + 'location' => 'Ubicació', + 'location_first_split' => 'La ubicació d\'aquesta transacció pot ser establerta a la primera divisió de la transacció.', + 'without_date' => 'Sense data', + 'result' => 'Resultat', + 'sums_apply_to_range' => 'Totes les sumes s\'apliquen al rang seleccionat', + 'mapbox_api_key' => 'Per fer servir el mapa, aconsegueix una clau API de Mapbox. Obre el fitxer .env i introdueix-hi el codi després de MAPBOX_API_KEY=.', + 'press_object_location' => 'Botó dret o premi de forma prolongada per definir la ubicació de l\'objecte.', + 'click_tap_location' => 'Fes clic o toca el mapa per afegir una ubicació', + 'clear_location' => 'Netejar ubicació', + 'delete_all_selected_tags' => 'Eliminar totes les etiquetes seleccionades', + 'select_tags_to_delete' => 'No t\'oblidis de seleccionar alguna etiqueta.', + 'deleted_x_tags' => ':count etiqueta eliminada.|:count etiquetes eliminades.', + 'create_rule_from_transaction' => 'Crear regla basada en la transacció', + 'create_recurring_from_transaction' => 'Crear transacció periòdica basada en la transacció', // preferences - 'dark_mode_option_browser' => 'Deixa que el navegador decideixi', - 'dark_mode_option_light' => 'Sempre Clar', - 'dark_mode_option_dark' => 'Sempre fosc', - 'equal_to_language' => '(igual a l\'idioma)', - 'dark_mode_preference' => 'Mode fosc', - 'dark_mode_preference_help' => 'Digues quan vols que Firefly III faci servir el tema fosc.', - 'pref_home_screen_accounts' => 'Comptes a la pantalla d\'inici', - 'pref_home_screen_accounts_help' => 'Quins comptes s\'han de mostrar a la pàgina d\'inici?', - 'pref_view_range' => 'Interval de visió', - 'pref_view_range_help' => 'Algunes gràfiques s\'agrupen automàticament en períodes. Els teus pressuposts també s\'agruparan en períodes. Quin període prefereixes?', - 'pref_1D' => 'Un dia', - 'pref_1W' => 'Una setmana', - 'pref_1M' => 'Un mes', - 'pref_3M' => 'Tres mesos (trimestre)', - 'pref_6M' => 'Sis mesos', - 'pref_1Y' => 'Un any', - 'pref_last365' => 'L\'any passat', - 'pref_last90' => 'Últims 90 dies', - 'pref_last30' => 'Últims 30 dies', - 'pref_last7' => 'Últims 7 dies', - 'pref_YTD' => 'Any en curs', - 'pref_QTD' => 'Trimestre en curs', - 'pref_MTD' => 'Mes en curs', - 'pref_languages' => 'Idiomes', - 'pref_locale' => 'Preferències d\'idioma', - 'pref_languages_help' => 'Firefly III suporta diversos idiomes. Quin prefereixes?', - 'pref_locale_help' => 'Firefly III et permet configurar altres paràmetres locals, com el format de les monedes, números i dates. Algunes entrades de la llista podrien no estar suportades pel teu sistema. Firefly III no té els paràmetres correctes per les dates en tots els idiomes; contacta amb mi per obtenir millores.', - 'pref_locale_no_demo' => 'Aquesta característica no funciona per l\'usuari de demostració.', - 'pref_custom_fiscal_year' => 'Preferències de l\'any fiscal', - 'pref_custom_fiscal_year_label' => 'Activat', - 'pref_custom_fiscal_year_help' => 'Pels països que fan servir anys fiscals diferents de l\'1 de gener al 31 de desembre, pots canviar-ho especificant els dies d\'inici / final de l\'any fiscal', - 'pref_fiscal_year_start_label' => 'Data d\'inici de l\'any fiscal', - 'pref_two_factor_auth' => 'Verificació en dues passes', - 'pref_two_factor_auth_help' => 'Quan actives la verificació en dues passes (també coneguda com a autenticació en dues passes), afegeixes una capa addicional de seguretat al teu compte. Inicies sessió amb una cosa que coneixes (la teva contrasenya) i una cosa que tens (un codi de verificació). Els codis de verificació es generen amb una aplicació al teu telèfon, com per exemple Authy o Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Activar la verificació en dues passes', - 'pref_two_factor_auth_disabled' => 'Codi de verificació en dues passes eliminat i desactivat', - 'pref_two_factor_auth_remove_it' => 'No t\'oblidis d\'eliminar el compte de la teva aplicació d\'autenticació!', - 'pref_two_factor_auth_code' => 'Verificar el codi', - 'pref_two_factor_auth_code_help' => 'Escaneja el codi QR amb una aplicació al teu telèfon com Authy o Google Authenticator i introdueix el codi generat.', - 'pref_two_factor_auth_reset_code' => 'Reiniciar codi de verificació', - 'pref_two_factor_auth_disable_2fa' => 'Desactivar 2FA', - '2fa_use_secret_instead' => 'Si no pots escanejar el codi QR, pots fer servir el codi secret en comptes: :secret.', - '2fa_backup_codes' => 'Guarda aquests codis de seguretat per poder accedir en el cas que perdis el teu dispositiu.', - '2fa_already_enabled' => 'La verificació en dues passes ja està activada.', - 'wrong_mfa_code' => 'Aquest codi MFA no és vàlid.', - 'pref_save_settings' => 'Guardar preferències', - 'saved_preferences' => 'Preferències guardades!', - 'preferences_general' => 'General', - 'preferences_frontpage' => 'Pantalla d\'inici', - 'preferences_security' => 'Seguretat', - 'preferences_layout' => 'Disseny', - 'preferences_notifications' => 'Notificacions', - 'pref_home_show_deposits' => 'Mostrar dipòsits a la pantalla d\'inici', - 'pref_home_show_deposits_info' => 'La pantalla d\'inici ja mostra els teus comptes de despeses. Ha de mostrar també els teus comptes de beneficis?', - 'pref_home_do_show_deposits' => 'Sí, mostra\'ls', - 'successful_count' => 'dels quals :count satisfactoris', - 'list_page_size_title' => 'Mida de pàgina', - 'list_page_size_help' => 'Qualsevol llista de coses (comptes, transaccions, etc) mostra com a màxim aquesta quantitat per pàgina.', - 'list_page_size_label' => 'Mida de pàgina', - 'between_dates' => '(:start i :end)', - 'pref_optional_fields_transaction' => 'Camps opcionals per transaccions', - 'pref_optional_fields_transaction_help' => 'Per defecte no tots els camps són actius quan es crea una nova transacció (pel desordre). A continuació, pots activar aquests camps si creus que et seran útils. Per descomptat, qualsevol camp que es desactivi, però que ja s\'hagi omplert, serà visible tot i aquesta preferència.', - 'optional_tj_date_fields' => 'Camps de data', - 'optional_tj_other_fields' => 'Altres camps', - 'optional_tj_attachment_fields' => 'Camps d\'adjunts', - 'pref_optional_tj_interest_date' => 'Data d\'interès', - 'pref_optional_tj_book_date' => 'Data de registre', - 'pref_optional_tj_process_date' => 'Data de processament', - 'pref_optional_tj_due_date' => 'Data de venciment', - 'pref_optional_tj_payment_date' => 'Data de pagament', - 'pref_optional_tj_invoice_date' => 'Data de facturació', - 'pref_optional_tj_internal_reference' => 'Referència interna', - 'pref_optional_tj_notes' => 'Notes', - 'pref_optional_tj_attachments' => 'Adjunts', - 'pref_optional_tj_external_url' => 'URL extern', - 'pref_optional_tj_location' => 'Ubicació', - 'pref_optional_tj_links' => 'Enllaços de transacció', - 'optional_field_meta_dates' => 'Dates', - 'optional_field_meta_business' => 'Negocis', - 'optional_field_attachments' => 'Adjunts', - 'optional_field_meta_data' => 'Metadades opcionals', - 'external_url' => 'URL extern', - 'pref_notification_bill_reminder' => 'Recordatori de venciment de factures', - 'pref_notification_new_access_token' => 'Avisar quan es creï un nou identificador d\'accés API', - 'pref_notification_transaction_creation' => 'Avisar quan una transacció es creï automàticament', - 'pref_notification_user_login' => 'Avisar quan s\'iniciï sessió des d\'una nova ubicació', - 'pref_notification_rule_action_failures' => 'Alerta quan les accions de la regla no es poden executar (només Slack i Discord)', - 'pref_notifications' => 'Notificacions', - 'pref_notifications_help' => 'Indica si aquestes són notificacions que vols rebre. Algunes notificacions podrien contenir informació financera sensible.', - 'slack_webhook_url' => 'Webhook URL de Slack', - 'slack_webhook_url_help' => 'Si vols que Firefly III et notifiqui utilitzant Slack, introdueix el webhook URL aquí. Altrament, deixa el camp en blanc. Si ets administrador, també has d\'introduir l\'URL a l\'administració.', - 'slack_url_label' => 'URL del webhook entrant de Slack', + 'dark_mode_option_browser' => 'Deixa que el navegador decideixi', + 'dark_mode_option_light' => 'Sempre Clar', + 'dark_mode_option_dark' => 'Sempre fosc', + 'equal_to_language' => '(igual a l\'idioma)', + 'dark_mode_preference' => 'Mode fosc', + 'dark_mode_preference_help' => 'Digues quan vols que Firefly III faci servir el tema fosc.', + 'pref_home_screen_accounts' => 'Comptes a la pantalla d\'inici', + 'pref_home_screen_accounts_help' => 'Quins comptes s\'han de mostrar a la pàgina d\'inici?', + 'pref_view_range' => 'Interval de visió', + 'pref_view_range_help' => 'Algunes gràfiques s\'agrupen automàticament en períodes. Els teus pressuposts també s\'agruparan en períodes. Quin període prefereixes?', + 'pref_1D' => 'Un dia', + 'pref_1W' => 'Una setmana', + 'pref_1M' => 'Un mes', + 'pref_3M' => 'Tres mesos (trimestre)', + 'pref_6M' => 'Sis mesos', + 'pref_1Y' => 'Un any', + 'pref_last365' => 'L\'any passat', + 'pref_last90' => 'Últims 90 dies', + 'pref_last30' => 'Últims 30 dies', + 'pref_last7' => 'Últims 7 dies', + 'pref_YTD' => 'Any en curs', + 'pref_QTD' => 'Trimestre en curs', + 'pref_MTD' => 'Mes en curs', + 'pref_languages' => 'Idiomes', + 'pref_locale' => 'Preferències d\'idioma', + 'pref_languages_help' => 'Firefly III suporta diversos idiomes. Quin prefereixes?', + 'pref_locale_help' => 'Firefly III et permet configurar altres paràmetres locals, com el format de les monedes, números i dates. Algunes entrades de la llista podrien no estar suportades pel teu sistema. Firefly III no té els paràmetres correctes per les dates en tots els idiomes; contacta amb mi per obtenir millores.', + 'pref_locale_no_demo' => 'Aquesta característica no funciona per l\'usuari de demostració.', + 'pref_custom_fiscal_year' => 'Preferències de l\'any fiscal', + 'pref_custom_fiscal_year_label' => 'Activat', + 'pref_custom_fiscal_year_help' => 'Pels països que fan servir anys fiscals diferents de l\'1 de gener al 31 de desembre, pots canviar-ho especificant els dies d\'inici / final de l\'any fiscal', + 'pref_fiscal_year_start_label' => 'Data d\'inici de l\'any fiscal', + 'pref_two_factor_auth' => 'Verificació en dues passes', + 'pref_two_factor_auth_help' => 'Quan actives la verificació en dues passes (també coneguda com a autenticació en dues passes), afegeixes una capa addicional de seguretat al teu compte. Inicies sessió amb una cosa que coneixes (la teva contrasenya) i una cosa que tens (un codi de verificació). Els codis de verificació es generen amb una aplicació al teu telèfon, com per exemple Authy o Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Activar la verificació en dues passes', + 'pref_two_factor_auth_disabled' => 'Codi de verificació en dues passes eliminat i desactivat', + 'pref_two_factor_auth_remove_it' => 'No t\'oblidis d\'eliminar el compte de la teva aplicació d\'autenticació!', + 'pref_two_factor_auth_code' => 'Verificar el codi', + 'pref_two_factor_auth_code_help' => 'Escaneja el codi QR amb una aplicació al teu telèfon com Authy o Google Authenticator i introdueix el codi generat.', + 'pref_two_factor_auth_reset_code' => 'Reiniciar codi de verificació', + 'pref_two_factor_auth_disable_2fa' => 'Desactivar 2FA', + '2fa_use_secret_instead' => 'Si no pots escanejar el codi QR, pots fer servir el codi secret en comptes: :secret.', + '2fa_backup_codes' => 'Guarda aquests codis de seguretat per poder accedir en el cas que perdis el teu dispositiu.', + '2fa_already_enabled' => 'La verificació en dues passes ja està activada.', + 'wrong_mfa_code' => 'Aquest codi MFA no és vàlid.', + 'pref_save_settings' => 'Guardar preferències', + 'saved_preferences' => 'Preferències guardades!', + 'preferences_general' => 'General', + 'preferences_frontpage' => 'Pantalla d\'inici', + 'preferences_security' => 'Seguretat', + 'preferences_layout' => 'Disseny', + 'preferences_notifications' => 'Notificacions', + 'pref_home_show_deposits' => 'Mostrar dipòsits a la pantalla d\'inici', + 'pref_home_show_deposits_info' => 'La pantalla d\'inici ja mostra els teus comptes de despeses. Ha de mostrar també els teus comptes de beneficis?', + 'pref_home_do_show_deposits' => 'Sí, mostra\'ls', + 'successful_count' => 'dels quals :count satisfactoris', + 'list_page_size_title' => 'Mida de pàgina', + 'list_page_size_help' => 'Qualsevol llista de coses (comptes, transaccions, etc) mostra com a màxim aquesta quantitat per pàgina.', + 'list_page_size_label' => 'Mida de pàgina', + 'between_dates' => '(:start i :end)', + 'pref_optional_fields_transaction' => 'Camps opcionals per transaccions', + 'pref_optional_fields_transaction_help' => 'Per defecte no tots els camps són actius quan es crea una nova transacció (pel desordre). A continuació, pots activar aquests camps si creus que et seran útils. Per descomptat, qualsevol camp que es desactivi, però que ja s\'hagi omplert, serà visible tot i aquesta preferència.', + 'optional_tj_date_fields' => 'Camps de data', + 'optional_tj_other_fields' => 'Altres camps', + 'optional_tj_attachment_fields' => 'Camps d\'adjunts', + 'pref_optional_tj_interest_date' => 'Data d\'interès', + 'pref_optional_tj_book_date' => 'Data de registre', + 'pref_optional_tj_process_date' => 'Data de processament', + 'pref_optional_tj_due_date' => 'Data de venciment', + 'pref_optional_tj_payment_date' => 'Data de pagament', + 'pref_optional_tj_invoice_date' => 'Data de facturació', + 'pref_optional_tj_internal_reference' => 'Referència interna', + 'pref_optional_tj_notes' => 'Notes', + 'pref_optional_tj_attachments' => 'Adjunts', + 'pref_optional_tj_external_url' => 'URL extern', + 'pref_optional_tj_location' => 'Ubicació', + 'pref_optional_tj_links' => 'Enllaços de transacció', + 'optional_field_meta_dates' => 'Dates', + 'optional_field_meta_business' => 'Negocis', + 'optional_field_attachments' => 'Adjunts', + 'optional_field_meta_data' => 'Metadades opcionals', + 'external_url' => 'URL extern', + 'pref_notification_bill_reminder' => 'Recordatori de venciment de factures', + 'pref_notification_new_access_token' => 'Avisar quan es creï un nou identificador d\'accés API', + 'pref_notification_transaction_creation' => 'Avisar quan una transacció es creï automàticament', + 'pref_notification_user_login' => 'Avisar quan s\'iniciï sessió des d\'una nova ubicació', + 'pref_notification_rule_action_failures' => 'Alerta quan les accions de la regla no es poden executar (només Slack i Discord)', + 'pref_notifications' => 'Notificacions', + 'pref_notifications_help' => 'Indica si aquestes són notificacions que vols rebre. Algunes notificacions podrien contenir informació financera sensible.', + 'slack_webhook_url' => 'Webhook URL de Slack', + 'slack_webhook_url_help' => 'Si vols que Firefly III et notifiqui utilitzant Slack, introdueix el webhook URL aquí. Altrament, deixa el camp en blanc. Si ets administrador, també has d\'introduir l\'URL a l\'administració.', + 'slack_url_label' => 'URL del webhook entrant de Slack', // Financial administrations - 'administration_index' => 'Administració financera', - 'administrations_index_menu' => 'Administració financera', + 'administration_index' => 'Administració financera', + 'administrations_index_menu' => 'Administració financera', // profile: - 'purge_data_title' => 'Purgar dades de Firefly III', - 'purge_data_expl' => '"Purgar" vol dir "eliminar allò que ja s\'ha eliminat". En circumstàncies normals, Firefly III no eliminar res permanentment. Només ho oculta. El següent botó elimina tots els registres prèviament "eliminats" PER SEMPRE.', - 'delete_stuff_header' => 'Eliminar i purgar dades', - 'purge_all_data' => 'Purgar tots els registres eliminats', - 'purge_data' => 'Purgar dades', - 'purged_all_records' => 'Tots els registres eliminats s\'han purgat.', - 'delete_data_title' => 'Eliminar dades de Firefly III', - 'permanent_delete_stuff' => 'Pots eliminar coses de Firefly III. Utilitzar els següents botons vol dir que els elements s\'eliminaran de la vista i s\'amagaran. No hi ha botó per desfer-ho, però els elements romandran a la base de dades, d\'on els podràs recuperar si és necessari.', - 'other_sessions_logged_out' => 'Totes les altres sessions s\'han desconnectat.', - 'delete_unused_accounts' => 'Eliminar els comptes no usats netejarà les llistes d\'autocompletat.', - 'delete_all_unused_accounts' => 'Eliminar comptes no usats', - 'deleted_all_unused_accounts' => 'Tots els comptes no usats s\'han eliminat', - 'delete_all_budgets' => 'Eliminar TOTS els pressupostos', - 'delete_all_categories' => 'Eliminar TOTES les categories', - 'delete_all_tags' => 'Eliminar TOTES les etiquetes', - 'delete_all_bills' => 'Eliminar TOTES les factures', - 'delete_all_piggy_banks' => 'Eliminar TOTES les guardioles', - 'delete_all_rules' => 'Eliminar TOTES les regles', - 'delete_all_recurring' => 'Eliminar TOTES les transaccions recurrents', - 'delete_all_object_groups' => 'Eliminar TOTS els grups d\'objectes', - 'delete_all_accounts' => 'Eliminar TOTS els comptes', - 'delete_all_asset_accounts' => 'Eliminar TOTS els comptes d\'actius', - 'delete_all_expense_accounts' => 'Eliminar TOTS els comptes de despeses', - 'delete_all_revenue_accounts' => 'Eliminar TOTS els comptes de beneficis', - 'delete_all_liabilities' => 'Eliminar TOTS els passius', - 'delete_all_transactions' => 'Eliminar TOTES les transaccions', - 'delete_all_withdrawals' => 'Eliminar TOTES les retirades', - 'delete_all_deposits' => 'Eliminar TOTS els dipòsits', - 'delete_all_transfers' => 'Eliminar TOTES les transferències', - 'also_delete_transactions' => 'Eliminar els comptes també eliminarà TOTES les retirades, dipòsits i transferències associats!', - 'deleted_all_budgets' => 'Tots els pressuposts han estat esborrats', - 'deleted_all_categories' => 'Totes les categories han estat esborrades', - 'deleted_all_tags' => 'Totes les etiquetes han estat esborrades', - 'deleted_all_bills' => 'Totes les factures han estat esborrades', - 'deleted_all_piggy_banks' => 'Totes les guardioles han estat esborrades', - 'deleted_all_rules' => 'Totes les regles i grups de regles han estat esborrats', - 'deleted_all_object_groups' => 'Tots els grups han estat esborrats', - 'deleted_all_accounts' => 'Tots els comptes han estat esborrats', - 'deleted_all_asset_accounts' => 'Tots els comptes d\'actius han estat eliminats', - 'deleted_all_expense_accounts' => 'Tots els comptes de despeses han estat eliminats', - 'deleted_all_revenue_accounts' => 'Tots els comptes de beneficis han estat eliminats', - 'deleted_all_liabilities' => 'Tots els passius han estat eliminats', - 'deleted_all_transactions' => 'Totes les transaccions han estat eliminades', - 'deleted_all_withdrawals' => 'Totes les retirades han estat eliminades', - 'deleted_all_deposits' => 'Tots els dipòsits han estat eliminats', - 'deleted_all_transfers' => 'Totes les transferències han estat eliminades', - 'deleted_all_recurring' => 'Totes les transaccions periòdiques han estat eliminades', - 'change_your_password' => 'Canvia la contrasenya', - 'delete_account' => 'Eliminar compte', - 'current_password' => 'Contrasenya actual', - 'new_password' => 'Nova contrasenya', - 'new_password_again' => 'Nova contrasenya (de nou)', - 'delete_your_account' => 'Eliminar el teu compte', - 'delete_your_account_help' => 'Eliminar el teu compte també eliminarà qualsevol compte, transacció, qualsevol cosa que hagis guardat a Firefly III. Se n\'haurà ANAT.', - 'delete_your_account_password' => 'Introdueix la contrasenya per continuar.', - 'password' => 'Contrasenya', - 'are_you_sure' => 'Estàs segur? Això no es pot desfer.', - 'delete_account_button' => 'ELIMINAR el teu compte', - 'invalid_current_password' => 'Contrasenya actual invàlida!', - 'password_changed' => 'Contrasenya canviada!', - 'should_change' => 'La idea és canviar la teva contrasenya.', - 'invalid_password' => 'Contrasenya invàlida!', - 'what_is_pw_security' => 'Què és "verificar seguretat de la contrasenya"?', - 'secure_pw_title' => 'Com escollir una contrasenya segura', - 'forgot_password_response' => 'Gràcies. Si existeix un compte amb aquesta adreça de correu electrònic, trobaràs les instruccions a la teva safata d\'entrada.', - 'secure_pw_history' => 'Cada setmana pots llegir a les notícies sobre llocs web que perden les contrasenyes dels seus usuaris. Els hackers i lladres fan servir aquestes contrasenyes per provar de robar la teva informació privada. Aquesta informació és valuosa.', - 'secure_pw_ff' => 'Fas servir la mateixa contrasenya per tot internet? Si un lloc web perd la teva contrasenya, els hackers tindran accés a totes les teves dades. Firefly III depèn que triïs una contrasenya forta i única per protegir els teus registres financers.', - 'secure_pw_check_box' => 'Per ajudar-te en això, Firefly III pot comprovar si la contrasenya que vols fer servir s\'ha robat anteriorment. Si aquest és el cas, Firefly III et recomanarà NO utilitzar aquesta contrasenya.', - 'secure_pw_working_title' => 'Com funciona?', - 'secure_pw_working' => 'Seleccionant la casella, Firefly III enviarà els cinc primers caràcters del HASH SHA1 de la teva contrasenya a la pàgina web de Troy Hunt per comprovar si es troba a la seva llista. Això impedirà que facis servir contrasenyes insegures tal com es recomana en lúltima Publicació Especial del NIST sobre aquest tema.', - 'secure_pw_should' => 'Hauria de seleccionar la casella?', - 'secure_pw_long_password' => 'Sí. Verifica sempre que la contrasenya és segura.', - 'command_line_token' => 'Token de línia d\'ordres', - 'explain_command_line_token' => 'Necessites aquest token per executar opcions de línia d\'ordres, com exportar dades. Sense ell, aquesta ordre sensitiva no funcionarà. No comparteixis aquest token de línia d\'ordres. Ningú et demanarà per aquest token, ni tan sols jo. Si et preocupa haver-lo perdut, o estàs paranoic, regenera el token amb aquest botó.', - 'regenerate_command_line_token' => 'Regenerar token de la línia d\'ordres', - 'token_regenerated' => 'S\'ha generat un nou token de línia d\'ordres', - 'change_your_email' => 'Canviar adreça de correu electrònic', - 'email_verification' => 'Un missatge de correu s\'enviarà al teu compte de correu anterior I AL nou. Per qüestions de seguretat, no podràs iniciar sessió fins que no verifiques el nou compte de correu. Si no n\'estàs segur de que la teva instal·lació de Firefly III sigui capaç d\'enviar correus, si us plau, no facis servir aquesta funció. Si ets administrador, pots provar-ho a Administració.', - 'email_changed_logout' => 'Fins que no verifiquis l\'adreça de correu, no pots iniciar sessió.', - 'login_with_new_email' => 'Ja pots iniciar sessió amb la teva nova adreça de correu.', - 'login_with_old_email' => 'Ja pots tornar a iniciar sessió amb la teva adreça de correu anterior.', - 'login_provider_local_only' => 'Aquesta acció no està disponible quan t\'identifiques a través de ":login_provider".', - 'external_user_mgt_disabled' => 'Aquesta acció no està disponible quan Firefly III no és responsable de la gestió d\'usuaris o de la seva identificació.', - 'external_auth_disabled' => 'Aquesta acció no està disponible quan Firefly III no és responsable de la gestió de la identificació.', - 'delete_local_info_only' => "Ja que Firefly III no és responsable de la gestió d'usuaris o de la seva identificació, aquesta funció només eliminarà informació local de Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Clients OAuth', - 'profile_oauth_no_clients' => 'No has creat cap client OAuth.', - 'profile_oauth_clients_external_auth' => 'Si estàs fent servir un proveïdor extern d\'autentificació com Authelia, els Clients OAuth no funcionaran. Sols pots fer servir Tokens d\'Accés Personal.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'ID de Client', - 'profile_oauth_client_name' => 'Nom', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Crear client nou', - 'profile_oauth_create_client' => 'Crear client', - 'profile_oauth_edit_client' => 'Editar client', - 'profile_oauth_name_help' => 'Alguna cosa que els teus usuaris reconeixeran i hi confiaran.', - 'profile_oauth_redirect_url' => 'URL de redirecció', - 'profile_oauth_redirect_url_help' => 'L\'URL de crida de retorn de la teva aplicació.', - 'profile_authorized_apps' => 'Aplicacions autoritzades', - 'profile_authorized_clients' => 'Clients autoritzats', - 'profile_scopes' => 'Àmbits', - 'profile_revoke' => 'Revocar', - 'profile_oauth_client_secret_title' => 'Secret del client', - 'profile_oauth_client_secret_expl' => 'Aquest és el teu nou secret de client. És l\'únic cop que es mostrarà, així que no el perdis! Ara ja pots utilitzar aquest secret per fer crides a l\'API.', - 'profile_personal_access_tokens' => 'Testimoni d\'accés personal', - 'profile_personal_access_token' => 'Testimoni d\'accés personal', - 'profile_oauth_confidential' => 'Confidencial', - 'profile_oauth_confidential_help' => 'Requerir el client d\'autenticar-se amb un secret. Els clients confidencials poden mantenir credencials de forma segura sense exposar-les a parts no autoritzades. Les aplicacions públiques, com les d\'escriptori o SPA de JavaScript, no poden guardar secrets de forma segura.', - 'profile_personal_access_token_explanation' => 'Aquest és el teu nou testimoni d\'accés personal. És l\'únic cop que es mostrarà, així que no el perdis! Ara ja pots utilitzar aquest testimoni per fer crides a l\'API.', - 'profile_no_personal_access_token' => 'No has creat cap testimoni d\'accés personal.', - 'profile_create_new_token' => 'Crear nou testimoni', - 'profile_create_token' => 'Crear testimoni', - 'profile_create' => 'Crear', - 'profile_save_changes' => 'Desar els canvis', - 'profile_whoops' => 'Vaja!', - 'profile_something_wrong' => 'Alguna cosa ha sortit malament!', - 'profile_try_again' => 'Alguna cosa ha anat malament. Si us plau, prova de nou.', - 'amounts' => 'Quantitats', - 'multi_account_warning_unknown' => 'Depenent del tipus de transacció que creïs, el compte d\'origen i/o el de destí de divisions posteriors pot ser anul·lada pel que es defineix en la primera divisió de la transacció.', - 'multi_account_warning_withdrawal' => 'Tingues en compte que el compte d\'origen de divisions posteriors serà anul·lat pel que es troba definit a la primera divisió de la retirada.', - 'multi_account_warning_deposit' => 'Tingues en compte que el compte de destí de divisions posteriors serà anul·lat pel que es troba definit a la primera divisió del dipòsit.', - 'multi_account_warning_transfer' => 'Tingues en compte que el compte d\'origen + destí de divisions posteriors serà anul·lat pel que es troba definit a la primera divisió de la transferència.', + 'purge_data_title' => 'Purgar dades de Firefly III', + 'purge_data_expl' => '"Purgar" vol dir "eliminar allò que ja s\'ha eliminat". En circumstàncies normals, Firefly III no eliminar res permanentment. Només ho oculta. El següent botó elimina tots els registres prèviament "eliminats" PER SEMPRE.', + 'delete_stuff_header' => 'Eliminar i purgar dades', + 'purge_all_data' => 'Purgar tots els registres eliminats', + 'purge_data' => 'Purgar dades', + 'purged_all_records' => 'Tots els registres eliminats s\'han purgat.', + 'delete_data_title' => 'Eliminar dades de Firefly III', + 'permanent_delete_stuff' => 'Pots eliminar coses de Firefly III. Utilitzar els següents botons vol dir que els elements s\'eliminaran de la vista i s\'amagaran. No hi ha botó per desfer-ho, però els elements romandran a la base de dades, d\'on els podràs recuperar si és necessari.', + 'other_sessions_logged_out' => 'Totes les altres sessions s\'han desconnectat.', + 'delete_unused_accounts' => 'Eliminar els comptes no usats netejarà les llistes d\'autocompletat.', + 'delete_all_unused_accounts' => 'Eliminar comptes no usats', + 'deleted_all_unused_accounts' => 'Tots els comptes no usats s\'han eliminat', + 'delete_all_budgets' => 'Eliminar TOTS els pressupostos', + 'delete_all_categories' => 'Eliminar TOTES les categories', + 'delete_all_tags' => 'Eliminar TOTES les etiquetes', + 'delete_all_bills' => 'Eliminar TOTES les factures', + 'delete_all_piggy_banks' => 'Eliminar TOTES les guardioles', + 'delete_all_rules' => 'Eliminar TOTES les regles', + 'delete_all_recurring' => 'Eliminar TOTES les transaccions recurrents', + 'delete_all_object_groups' => 'Eliminar TOTS els grups d\'objectes', + 'delete_all_accounts' => 'Eliminar TOTS els comptes', + 'delete_all_asset_accounts' => 'Eliminar TOTS els comptes d\'actius', + 'delete_all_expense_accounts' => 'Eliminar TOTS els comptes de despeses', + 'delete_all_revenue_accounts' => 'Eliminar TOTS els comptes de beneficis', + 'delete_all_liabilities' => 'Eliminar TOTS els passius', + 'delete_all_transactions' => 'Eliminar TOTES les transaccions', + 'delete_all_withdrawals' => 'Eliminar TOTES les retirades', + 'delete_all_deposits' => 'Eliminar TOTS els dipòsits', + 'delete_all_transfers' => 'Eliminar TOTES les transferències', + 'also_delete_transactions' => 'Eliminar els comptes també eliminarà TOTES les retirades, dipòsits i transferències associats!', + 'deleted_all_budgets' => 'Tots els pressuposts han estat esborrats', + 'deleted_all_categories' => 'Totes les categories han estat esborrades', + 'deleted_all_tags' => 'Totes les etiquetes han estat esborrades', + 'deleted_all_bills' => 'Totes les factures han estat esborrades', + 'deleted_all_piggy_banks' => 'Totes les guardioles han estat esborrades', + 'deleted_all_rules' => 'Totes les regles i grups de regles han estat esborrats', + 'deleted_all_object_groups' => 'Tots els grups han estat esborrats', + 'deleted_all_accounts' => 'Tots els comptes han estat esborrats', + 'deleted_all_asset_accounts' => 'Tots els comptes d\'actius han estat eliminats', + 'deleted_all_expense_accounts' => 'Tots els comptes de despeses han estat eliminats', + 'deleted_all_revenue_accounts' => 'Tots els comptes de beneficis han estat eliminats', + 'deleted_all_liabilities' => 'Tots els passius han estat eliminats', + 'deleted_all_transactions' => 'Totes les transaccions han estat eliminades', + 'deleted_all_withdrawals' => 'Totes les retirades han estat eliminades', + 'deleted_all_deposits' => 'Tots els dipòsits han estat eliminats', + 'deleted_all_transfers' => 'Totes les transferències han estat eliminades', + 'deleted_all_recurring' => 'Totes les transaccions periòdiques han estat eliminades', + 'change_your_password' => 'Canvia la contrasenya', + 'delete_account' => 'Eliminar compte', + 'current_password' => 'Contrasenya actual', + 'new_password' => 'Nova contrasenya', + 'new_password_again' => 'Nova contrasenya (de nou)', + 'delete_your_account' => 'Eliminar el teu compte', + 'delete_your_account_help' => 'Eliminar el teu compte també eliminarà qualsevol compte, transacció, qualsevol cosa que hagis guardat a Firefly III. Se n\'haurà ANAT.', + 'delete_your_account_password' => 'Introdueix la contrasenya per continuar.', + 'password' => 'Contrasenya', + 'are_you_sure' => 'Estàs segur? Això no es pot desfer.', + 'delete_account_button' => 'ELIMINAR el teu compte', + 'invalid_current_password' => 'Contrasenya actual invàlida!', + 'password_changed' => 'Contrasenya canviada!', + 'should_change' => 'La idea és canviar la teva contrasenya.', + 'invalid_password' => 'Contrasenya invàlida!', + 'what_is_pw_security' => 'Què és "verificar seguretat de la contrasenya"?', + 'secure_pw_title' => 'Com escollir una contrasenya segura', + 'forgot_password_response' => 'Gràcies. Si existeix un compte amb aquesta adreça de correu electrònic, trobaràs les instruccions a la teva safata d\'entrada.', + 'secure_pw_history' => 'Cada setmana pots llegir a les notícies sobre llocs web que perden les contrasenyes dels seus usuaris. Els hackers i lladres fan servir aquestes contrasenyes per provar de robar la teva informació privada. Aquesta informació és valuosa.', + 'secure_pw_ff' => 'Fas servir la mateixa contrasenya per tot internet? Si un lloc web perd la teva contrasenya, els hackers tindran accés a totes les teves dades. Firefly III depèn que triïs una contrasenya forta i única per protegir els teus registres financers.', + 'secure_pw_check_box' => 'Per ajudar-te en això, Firefly III pot comprovar si la contrasenya que vols fer servir s\'ha robat anteriorment. Si aquest és el cas, Firefly III et recomanarà NO utilitzar aquesta contrasenya.', + 'secure_pw_working_title' => 'Com funciona?', + 'secure_pw_working' => 'Seleccionant la casella, Firefly III enviarà els cinc primers caràcters del HASH SHA1 de la teva contrasenya a la pàgina web de Troy Hunt per comprovar si es troba a la seva llista. Això impedirà que facis servir contrasenyes insegures tal com es recomana en lúltima Publicació Especial del NIST sobre aquest tema.', + 'secure_pw_should' => 'Hauria de seleccionar la casella?', + 'secure_pw_long_password' => 'Sí. Verifica sempre que la contrasenya és segura.', + 'command_line_token' => 'Token de línia d\'ordres', + 'explain_command_line_token' => 'Necessites aquest token per executar opcions de línia d\'ordres, com exportar dades. Sense ell, aquesta ordre sensitiva no funcionarà. No comparteixis aquest token de línia d\'ordres. Ningú et demanarà per aquest token, ni tan sols jo. Si et preocupa haver-lo perdut, o estàs paranoic, regenera el token amb aquest botó.', + 'regenerate_command_line_token' => 'Regenerar token de la línia d\'ordres', + 'token_regenerated' => 'S\'ha generat un nou token de línia d\'ordres', + 'change_your_email' => 'Canviar adreça de correu electrònic', + 'email_verification' => 'Un missatge de correu s\'enviarà al teu compte de correu anterior I AL nou. Per qüestions de seguretat, no podràs iniciar sessió fins que no verifiques el nou compte de correu. Si no n\'estàs segur de que la teva instal·lació de Firefly III sigui capaç d\'enviar correus, si us plau, no facis servir aquesta funció. Si ets administrador, pots provar-ho a Administració.', + 'email_changed_logout' => 'Fins que no verifiquis l\'adreça de correu, no pots iniciar sessió.', + 'login_with_new_email' => 'Ja pots iniciar sessió amb la teva nova adreça de correu.', + 'login_with_old_email' => 'Ja pots tornar a iniciar sessió amb la teva adreça de correu anterior.', + 'login_provider_local_only' => 'Aquesta acció no està disponible quan t\'identifiques a través de ":login_provider".', + 'external_user_mgt_disabled' => 'Aquesta acció no està disponible quan Firefly III no és responsable de la gestió d\'usuaris o de la seva identificació.', + 'external_auth_disabled' => 'Aquesta acció no està disponible quan Firefly III no és responsable de la gestió de la identificació.', + 'delete_local_info_only' => "Ja que Firefly III no és responsable de la gestió d'usuaris o de la seva identificació, aquesta funció només eliminarà informació local de Firefly III.", + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Clients OAuth', + 'profile_oauth_no_clients' => 'No has creat cap client OAuth.', + 'profile_oauth_clients_external_auth' => 'Si estàs fent servir un proveïdor extern d\'autentificació com Authelia, els Clients OAuth no funcionaran. Sols pots fer servir Tokens d\'Accés Personal.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'ID de Client', + 'profile_oauth_client_name' => 'Nom', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Crear client nou', + 'profile_oauth_create_client' => 'Crear client', + 'profile_oauth_edit_client' => 'Editar client', + 'profile_oauth_name_help' => 'Alguna cosa que els teus usuaris reconeixeran i hi confiaran.', + 'profile_oauth_redirect_url' => 'URL de redirecció', + 'profile_oauth_redirect_url_help' => 'L\'URL de crida de retorn de la teva aplicació.', + 'profile_authorized_apps' => 'Aplicacions autoritzades', + 'profile_authorized_clients' => 'Clients autoritzats', + 'profile_scopes' => 'Àmbits', + 'profile_revoke' => 'Revocar', + 'profile_oauth_client_secret_title' => 'Secret del client', + 'profile_oauth_client_secret_expl' => 'Aquest és el teu nou secret de client. És l\'únic cop que es mostrarà, així que no el perdis! Ara ja pots utilitzar aquest secret per fer crides a l\'API.', + 'profile_personal_access_tokens' => 'Testimoni d\'accés personal', + 'profile_personal_access_token' => 'Testimoni d\'accés personal', + 'profile_oauth_confidential' => 'Confidencial', + 'profile_oauth_confidential_help' => 'Requerir el client d\'autenticar-se amb un secret. Els clients confidencials poden mantenir credencials de forma segura sense exposar-les a parts no autoritzades. Les aplicacions públiques, com les d\'escriptori o SPA de JavaScript, no poden guardar secrets de forma segura.', + 'profile_personal_access_token_explanation' => 'Aquest és el teu nou testimoni d\'accés personal. És l\'únic cop que es mostrarà, així que no el perdis! Ara ja pots utilitzar aquest testimoni per fer crides a l\'API.', + 'profile_no_personal_access_token' => 'No has creat cap testimoni d\'accés personal.', + 'profile_create_new_token' => 'Crear nou testimoni', + 'profile_create_token' => 'Crear testimoni', + 'profile_create' => 'Crear', + 'profile_save_changes' => 'Desar els canvis', + 'profile_whoops' => 'Vaja!', + 'profile_something_wrong' => 'Alguna cosa ha sortit malament!', + 'profile_try_again' => 'Alguna cosa ha anat malament. Si us plau, prova de nou.', + 'amounts' => 'Quantitats', + 'multi_account_warning_unknown' => 'Depenent del tipus de transacció que creïs, el compte d\'origen i/o el de destí de divisions posteriors pot ser anul·lada pel que es defineix en la primera divisió de la transacció.', + 'multi_account_warning_withdrawal' => 'Tingues en compte que el compte d\'origen de divisions posteriors serà anul·lat pel que es troba definit a la primera divisió de la retirada.', + 'multi_account_warning_deposit' => 'Tingues en compte que el compte de destí de divisions posteriors serà anul·lat pel que es troba definit a la primera divisió del dipòsit.', + 'multi_account_warning_transfer' => 'Tingues en compte que el compte d\'origen + destí de divisions posteriors serà anul·lat pel que es troba definit a la primera divisió de la transferència.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Exportar dades de Firefly III', - 'export_data_menu' => 'Exportar dades', - 'export_data_bc' => 'Exportar dades de Firefly III', - 'export_data_main_title' => 'Exportar dades de Firefly III', - 'export_data_expl' => 'Aquest enllaç et permet exportar totes les transaccions + metadades de Firefly III. Si us plau, consulta l\'ajuda (icona (?) superior dreta) per més informació sobre el procés.', - 'export_data_all_transactions' => 'Exportar totes les transaccions', - 'export_data_advanced_expl' => 'Si necessites una exportació més avançada o específica, llegeix l\'ajuda sobre com fer servir les ordres de consola php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Exportar dades de Firefly III', + 'export_data_menu' => 'Exportar dades', + 'export_data_bc' => 'Exportar dades de Firefly III', + 'export_data_main_title' => 'Exportar dades de Firefly III', + 'export_data_expl' => 'Aquest enllaç et permet exportar totes les transaccions + metadades de Firefly III. Si us plau, consulta l\'ajuda (icona (?) superior dreta) per més informació sobre el procés.', + 'export_data_all_transactions' => 'Exportar totes les transaccions', + 'export_data_advanced_expl' => 'Si necessites una exportació més avançada o específica, llegeix l\'ajuda sobre com fer servir les ordres de consola php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Un adjunt::count adjunts', - 'attachments' => 'Adjunts', - 'edit_attachment' => 'Editar adjunt ":name"', - 'update_attachment' => 'Actualitzar adjunt', - 'delete_attachment' => 'Eliminar adjunt ":name"', - 'attachment_deleted' => 'Adjunt ":name" eliminat', - 'liabilities_deleted' => 'Passiu ":name" eliminat', - 'attachment_updated' => 'Adjunt ":name" actualitzat', - 'upload_max_file_size' => 'Mida màxima del fitxer: :size', - 'list_all_attachments' => 'Llistat de tots els adjunts', + 'nr_of_attachments' => 'Un adjunt::count adjunts', + 'attachments' => 'Adjunts', + 'edit_attachment' => 'Editar adjunt ":name"', + 'update_attachment' => 'Actualitzar adjunt', + 'delete_attachment' => 'Eliminar adjunt ":name"', + 'attachment_deleted' => 'Adjunt ":name" eliminat', + 'liabilities_deleted' => 'Passiu ":name" eliminat', + 'attachment_updated' => 'Adjunt ":name" actualitzat', + 'upload_max_file_size' => 'Mida màxima del fitxer: :size', + 'list_all_attachments' => 'Llistat de tots els adjunts', // transaction index - 'title_expenses' => 'Despeses', - 'title_withdrawal' => 'Despeses', - 'title_revenue' => 'Ingressos / salari', - 'title_deposit' => 'Ingressos / salari', - 'title_transfer' => 'Transferències', - 'title_transfers' => 'Transferències', - 'submission_options' => 'Opcions de tramesa', - 'apply_rules_checkbox' => 'Aplicar regles', - 'fire_webhooks_checkbox' => 'Disparar webhooks', + 'is_reconciled_fields_dropped' => 'Com aquesta transacció està reconciliada, no podràs actualitzar els comptes, ni les quantitats.', + 'title_expenses' => 'Despeses', + 'title_withdrawal' => 'Despeses', + 'title_revenue' => 'Ingressos / salari', + 'title_deposit' => 'Ingressos / salari', + 'title_transfer' => 'Transferències', + 'title_transfers' => 'Transferències', + 'submission_options' => 'Opcions de tramesa', + 'apply_rules_checkbox' => 'Aplicar regles', + 'fire_webhooks_checkbox' => 'Disparar webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Aquesta transacció ja és una retirada', - 'convert_is_already_type_Deposit' => 'Aquesta transacció ja és un dipòsit', - 'convert_is_already_type_Transfer' => 'Aquesta transacció ja és una transferència', - 'convert_to_Withdrawal' => 'Convertir ":description" en una retirada', - 'convert_to_Deposit' => 'Convertir ":description" en un dipòsit', - 'convert_to_Transfer' => 'Convertir ":description" en una transferència', - 'convert_options_WithdrawalDeposit' => 'Convertir retirada en un dipòsit', - 'convert_options_WithdrawalTransfer' => 'Convertir retirada en una transferència', - 'convert_options_DepositTransfer' => 'Convertir dipòsit en una transferència', - 'convert_options_DepositWithdrawal' => 'Convertir dipòsit en una retirada', - 'convert_options_TransferWithdrawal' => 'Convertir transferència en una retirada', - 'convert_options_TransferDeposit' => 'Convertir transferència en un dipòsit', - 'convert_Withdrawal_to_deposit' => 'Convertir aquesta retirada en un dipòsit', - 'convert_Withdrawal_to_transfer' => 'Convertir aquesta retirada en una transferència', - 'convert_Deposit_to_withdrawal' => 'Convertir aquest dipòsit en una retirada', - 'convert_Deposit_to_transfer' => 'Convertir aquest dipòsit en una transferència', - 'convert_Transfer_to_deposit' => 'Convertir aquesta transferència en un dipòsit', - 'convert_Transfer_to_withdrawal' => 'Convertir aquesta transferència en una retirada', - 'convert_please_set_revenue_source' => 'Si us plau, escull el compte de beneficis d\'on vindran els diners.', - 'convert_please_set_asset_destination' => 'Si us plau, escull el compte d\'actius a on aniran els diners.', - 'convert_please_set_expense_destination' => 'Si us plau, escull el compte de despeses a on aniran els diners.', - 'convert_please_set_asset_source' => 'Si us plau, escull el compte d\'actius d\'on vindran els diners.', - 'convert_expl_w_d' => 'Quan es converteix d\'una retirada a un dipòsit, els diners es dipositaran en el compte de destí mostrat, en comptes de ser-ne retirats.|Quan es converteix d\'una retirada a un dipòsit, els diners es dipositaran en els comptes de destí mostrats, en comptes de ser-ne retirats.', - 'convert_expl_w_t' => 'Quan es converteix d\'una retirada a una transferència, els diners es transferiran del compte d\'origen a un altre compte d\'actius o passius en comptes de ser gastats del compte de despeses original.|Quan es converteix d\'una retirada a una transferència, els diners es transferiran dels comptes d\'origen a uns altres comptes d\'actius o passius en comptes de ser gastats del compte de despeses original.', - 'convert_expl_d_w' => 'Quan es converteix d\'un dipòsit a una retirada, els diners es retiraran del compte d\'origen mostrat, en comptes de ser-hi dipositats.|Quan es converteix d\'un dipòsit a una retirada, els diners es retiraran dels comptes d\'origen mostrats, en comptes de ser-hi dipositats.', - 'convert_expl_d_t' => 'Quan es converteix d\'un dipòsit a una transferència, els diners es dipositaran al compte de destí llistat des de qualsevol dels comptes d\'actius o passius.|Quan es converteix d\'un dipòsit a una transferència, els diners es dipositaran als comptes de destí llistats des de qualsevol dels comptes d\'actius o passius.', - 'convert_expl_t_w' => 'Quan es converteix una transferència en una retirada, els diners es gastaran al compte de destí que indiquis aquí, en comptes de ser transferits.|Quan es converteix una transferència en una retirada, els diners es gastaran als comptes de destí que indiquis aquí, en comptes de ser transferits.', - 'convert_expl_t_d' => 'Quan es converteix una transferència en un dipòsit, els diners es dipositaran al compte de destí que veus aquí, en comptes de ser-hi transferits.|Quan es converteix una transferència en un dipòsit, els diners es dipositaran als comptes de destí que veus aquí, en comptes de ser-hi transferits.', - 'convert_select_sources' => 'Per completar la conversió, si us plau, estableix un nou compte d\'origen a sota.|Per completar la conversió, si us plau, estableix els nous comptes d\'origen a sota.', - 'convert_select_destinations' => 'Per completar la conversió, si us plau, selecciona un no compte de destí a sota.|Per completar la conversió, si us plau, selecciona els nous comptes de destí a sota.', - 'converted_to_Withdrawal' => 'La transacció s\'ha convertit a retirada', - 'converted_to_Deposit' => 'La transacció s\'ha convertit a dipòsit', - 'converted_to_Transfer' => 'La transacció s\'ha convertit a transferència', - 'invalid_convert_selection' => 'El compte que has seleccionat ja s\'està utilitzant o no existeix.', - 'source_or_dest_invalid' => 'No es poden trobar els detalls correctes de la transacció. La conversió no és possible.', - 'convert_to_withdrawal' => 'Convertir a retirada', - 'convert_to_deposit' => 'Convertir a dipòsit', - 'convert_to_transfer' => 'Convertir a transferència', + 'convert_is_already_type_Withdrawal' => 'Aquesta transacció ja és una retirada', + 'convert_is_already_type_Deposit' => 'Aquesta transacció ja és un dipòsit', + 'convert_is_already_type_Transfer' => 'Aquesta transacció ja és una transferència', + 'convert_to_Withdrawal' => 'Convertir ":description" en una retirada', + 'convert_to_Deposit' => 'Convertir ":description" en un dipòsit', + 'convert_to_Transfer' => 'Convertir ":description" en una transferència', + 'convert_options_WithdrawalDeposit' => 'Convertir retirada en un dipòsit', + 'convert_options_WithdrawalTransfer' => 'Convertir retirada en una transferència', + 'convert_options_DepositTransfer' => 'Convertir dipòsit en una transferència', + 'convert_options_DepositWithdrawal' => 'Convertir dipòsit en una retirada', + 'convert_options_TransferWithdrawal' => 'Convertir transferència en una retirada', + 'convert_options_TransferDeposit' => 'Convertir transferència en un dipòsit', + 'convert_Withdrawal_to_deposit' => 'Convertir aquesta retirada en un dipòsit', + 'convert_Withdrawal_to_transfer' => 'Convertir aquesta retirada en una transferència', + 'convert_Deposit_to_withdrawal' => 'Convertir aquest dipòsit en una retirada', + 'convert_Deposit_to_transfer' => 'Convertir aquest dipòsit en una transferència', + 'convert_Transfer_to_deposit' => 'Convertir aquesta transferència en un dipòsit', + 'convert_Transfer_to_withdrawal' => 'Convertir aquesta transferència en una retirada', + 'convert_please_set_revenue_source' => 'Si us plau, escull el compte de beneficis d\'on vindran els diners.', + 'convert_please_set_asset_destination' => 'Si us plau, escull el compte d\'actius a on aniran els diners.', + 'convert_please_set_expense_destination' => 'Si us plau, escull el compte de despeses a on aniran els diners.', + 'convert_please_set_asset_source' => 'Si us plau, escull el compte d\'actius d\'on vindran els diners.', + 'convert_expl_w_d' => 'Quan es converteix d\'una retirada a un dipòsit, els diners es dipositaran en el compte de destí mostrat, en comptes de ser-ne retirats.|Quan es converteix d\'una retirada a un dipòsit, els diners es dipositaran en els comptes de destí mostrats, en comptes de ser-ne retirats.', + 'convert_expl_w_t' => 'Quan es converteix d\'una retirada a una transferència, els diners es transferiran del compte d\'origen a un altre compte d\'actius o passius en comptes de ser gastats del compte de despeses original.|Quan es converteix d\'una retirada a una transferència, els diners es transferiran dels comptes d\'origen a uns altres comptes d\'actius o passius en comptes de ser gastats del compte de despeses original.', + 'convert_expl_d_w' => 'Quan es converteix d\'un dipòsit a una retirada, els diners es retiraran del compte d\'origen mostrat, en comptes de ser-hi dipositats.|Quan es converteix d\'un dipòsit a una retirada, els diners es retiraran dels comptes d\'origen mostrats, en comptes de ser-hi dipositats.', + 'convert_expl_d_t' => 'Quan es converteix d\'un dipòsit a una transferència, els diners es dipositaran al compte de destí llistat des de qualsevol dels comptes d\'actius o passius.|Quan es converteix d\'un dipòsit a una transferència, els diners es dipositaran als comptes de destí llistats des de qualsevol dels comptes d\'actius o passius.', + 'convert_expl_t_w' => 'Quan es converteix una transferència en una retirada, els diners es gastaran al compte de destí que indiquis aquí, en comptes de ser transferits.|Quan es converteix una transferència en una retirada, els diners es gastaran als comptes de destí que indiquis aquí, en comptes de ser transferits.', + 'convert_expl_t_d' => 'Quan es converteix una transferència en un dipòsit, els diners es dipositaran al compte de destí que veus aquí, en comptes de ser-hi transferits.|Quan es converteix una transferència en un dipòsit, els diners es dipositaran als comptes de destí que veus aquí, en comptes de ser-hi transferits.', + 'convert_select_sources' => 'Per completar la conversió, si us plau, estableix un nou compte d\'origen a sota.|Per completar la conversió, si us plau, estableix els nous comptes d\'origen a sota.', + 'convert_select_destinations' => 'Per completar la conversió, si us plau, selecciona un no compte de destí a sota.|Per completar la conversió, si us plau, selecciona els nous comptes de destí a sota.', + 'converted_to_Withdrawal' => 'La transacció s\'ha convertit a retirada', + 'converted_to_Deposit' => 'La transacció s\'ha convertit a dipòsit', + 'converted_to_Transfer' => 'La transacció s\'ha convertit a transferència', + 'invalid_convert_selection' => 'El compte que has seleccionat ja s\'està utilitzant o no existeix.', + 'source_or_dest_invalid' => 'No es poden trobar els detalls correctes de la transacció. La conversió no és possible.', + 'convert_to_withdrawal' => 'Convertir a retirada', + 'convert_to_deposit' => 'Convertir a dipòsit', + 'convert_to_transfer' => 'Convertir a transferència', // create new stuff: - 'create_new_withdrawal' => 'Crear una nova retirada', - 'create_new_deposit' => 'Crea un nou dipòsit', - 'create_new_transfer' => 'Crear nova transferència', - 'create_new_asset' => 'Crear un nou compte d\'actius', - 'create_new_liabilities' => 'Crear nou passiu', - 'create_new_expense' => 'Crear un nou compte de despeses', - 'create_new_revenue' => 'Crear un nou compte de beneficis', - 'create_new_piggy_bank' => 'Crea una guardiola nova', - 'create_new_bill' => 'Crear una nova factura', - 'create_new_subscription' => 'Crea una nova subscripció', - 'create_new_rule' => 'Crea una nova regla', + 'create_new_withdrawal' => 'Crear una nova retirada', + 'create_new_deposit' => 'Crea un nou dipòsit', + 'create_new_transfer' => 'Crear nova transferència', + 'create_new_asset' => 'Crear un nou compte d\'actius', + 'create_new_liabilities' => 'Crear nou passiu', + 'create_new_expense' => 'Crear un nou compte de despeses', + 'create_new_revenue' => 'Crear un nou compte de beneficis', + 'create_new_piggy_bank' => 'Crea una guardiola nova', + 'create_new_bill' => 'Crear una nova factura', + 'create_new_subscription' => 'Crea una nova subscripció', + 'create_new_rule' => 'Crea una nova regla', // currencies: - 'create_currency' => 'Crear una nova moneda', - 'store_currency' => 'Guardar nova moneda', - 'update_currency' => 'Actualitza la moneda', - 'new_default_currency' => ':name és ara la moneda per defecte.', - 'cannot_delete_currency' => 'No es pot eliminar :name perquè encara s\'utilitza.', - 'cannot_delete_fallback_currency' => ':name és la moneda alternativa del sistema i no es pot eliminar.', - 'cannot_disable_currency_journals' => 'No es pot deshabilitar :name perquè les transaccions encara la fan servir.', - 'cannot_disable_currency_last_left' => 'No es pot deshabilitar :name perquè és l\'única moneda activa.', - 'cannot_disable_currency_account_meta' => 'No es pot deshabilitar :name perquè s\'utilitza en comptes d\'actius.', - 'cannot_disable_currency_bills' => 'No es pot deshabilitar :name perquè s\'utilitza en factures.', - 'cannot_disable_currency_recurring' => 'No es pot deshabilitar :name perquè s\'utilitza en transaccions periòdiques.', - 'cannot_disable_currency_available_budgets' => 'No es pot deshabilitar :name perquè s\'utilitza en pressupostos disponibles.', - 'cannot_disable_currency_budget_limits' => 'No es pot deshabilitar :name perquè s\'utilitza en límits de pressupostos.', - 'cannot_disable_currency_current_default' => 'No es pot deshabilitar :name perquè és la moneda per defecte actual.', - 'cannot_disable_currency_system_fallback' => 'No es pot deshabilitar :name perquè és la moneda per defecte del sistema.', - 'disable_EUR_side_effects' => 'L\'Euro és la moneda alternativa d\'emergència del sistema. Deshabilitar-la pot tenir efectes secundaris i podria anul·lar la garantia.', - 'deleted_currency' => 'Moneda :name eliminada', - 'created_currency' => 'Moneda :name creada', - 'could_not_store_currency' => 'No s\'ha pogut guardar la nova moneda.', - 'updated_currency' => 'Moneda :name actualitzada', - 'ask_site_owner' => 'Si us plau, pregunta a :owner per afegir, eliminar o editar monedes.', - 'currencies_intro' => 'Firefly III admet diverses monedes que pots establir i habilitar aquí.', - 'make_default_currency' => 'Establir per defecte', - 'default_currency' => 'per defecte', - 'currency_is_disabled' => 'Deshabilitat', - 'enable_currency' => 'Habilitar', - 'disable_currency' => 'Deshabilitar', - 'currencies_default_disabled' => 'La majoria d\'aquestes monedes estan deshabilitades per defecte. Per utilitzar-les, les has d\'habilitar primer.', - 'currency_is_now_enabled' => 'La moneda ":name" s\'ha habilitat', - 'currency_is_now_disabled' => 'La moneda ":name" s\'ha deshabilitat', + 'create_currency' => 'Crear una nova moneda', + 'store_currency' => 'Guardar nova moneda', + 'update_currency' => 'Actualitza la moneda', + 'new_default_currency' => '":name" està ara a la moneda per defecte.', + 'default_currency_failed' => 'No s\'ha pogut establir ":name" com a la moneda per defecte. Per favor, revisa els registres.', + 'cannot_delete_currency' => 'No es pot eliminar :name perquè encara s\'utilitza.', + 'cannot_delete_fallback_currency' => ':name és la moneda alternativa del sistema i no es pot eliminar.', + 'cannot_disable_currency_journals' => 'No es pot deshabilitar :name perquè les transaccions encara la fan servir.', + 'cannot_disable_currency_last_left' => 'No es pot deshabilitar :name perquè és l\'única moneda activa.', + 'cannot_disable_currency_account_meta' => 'No es pot deshabilitar :name perquè s\'utilitza en comptes d\'actius.', + 'cannot_disable_currency_bills' => 'No es pot deshabilitar :name perquè s\'utilitza en factures.', + 'cannot_disable_currency_recurring' => 'No es pot deshabilitar :name perquè s\'utilitza en transaccions periòdiques.', + 'cannot_disable_currency_available_budgets' => 'No es pot deshabilitar :name perquè s\'utilitza en pressupostos disponibles.', + 'cannot_disable_currency_budget_limits' => 'No es pot deshabilitar :name perquè s\'utilitza en límits de pressupostos.', + 'cannot_disable_currency_current_default' => 'No es pot deshabilitar :name perquè és la moneda per defecte actual.', + 'cannot_disable_currency_system_fallback' => 'No es pot deshabilitar :name perquè és la moneda per defecte del sistema.', + 'disable_EUR_side_effects' => 'L\'Euro és la moneda alternativa d\'emergència del sistema. Deshabilitar-la pot tenir efectes secundaris i podria anul·lar la garantia.', + 'deleted_currency' => 'Moneda :name eliminada', + 'created_currency' => 'Moneda :name creada', + 'could_not_store_currency' => 'No s\'ha pogut guardar la nova moneda.', + 'updated_currency' => 'Moneda :name actualitzada', + 'ask_site_owner' => 'Si us plau, pregunta a :owner per afegir, eliminar o editar monedes.', + 'currencies_intro' => 'Firefly III admet diverses monedes que pots establir i habilitar aquí.', + 'make_default_currency' => 'Establir per defecte', + 'default_currency' => 'per defecte', + 'currency_is_disabled' => 'Deshabilitat', + 'enable_currency' => 'Habilitar', + 'disable_currency' => 'Deshabilitar', + 'currencies_default_disabled' => 'La majoria d\'aquestes monedes estan deshabilitades per defecte. Per utilitzar-les, les has d\'habilitar primer.', + 'currency_is_now_enabled' => 'La moneda ":name" s\'ha habilitat', + 'could_not_enable_currency' => 'No s\'ha pogut habilitar la moneda ":name". Per favor, revisa els registres.', + 'currency_is_now_disabled' => 'La moneda ":name" s\'ha deshabilitat', + 'could_not_disable_currency' => 'No s\'ha pogut deshabilitar la moneda ":name". Pot ser encara està en ús?', // forms: - 'mandatoryFields' => 'Camps obligatoris', - 'optionalFields' => 'Camps opcionals', - 'options' => 'Opcions', + 'mandatoryFields' => 'Camps obligatoris', + 'optionalFields' => 'Camps opcionals', + 'options' => 'Opcions', // budgets: - 'daily_budgets' => 'Pressuposts diaris', - 'weekly_budgets' => 'Pressuposts setmanals', - 'monthly_budgets' => 'Pressuposts mensuals', - 'quarterly_budgets' => 'Pressuposts trimestrals', - 'half_year_budgets' => 'Pressuposts semestrals', - 'yearly_budgets' => 'Pressuposts anuals', - 'other_budgets' => 'Pressuposts de temps personalitzat', - 'budget_limit_not_in_range' => 'Aquesta quantitat s\'aplica des de :start fins a :end:', - 'total_available_budget' => 'Pressupost total disponible (entre :start i :end)', - 'total_available_budget_in_currency' => 'Pressupost total disponible en :currency', - 'see_below' => 'veure a sota', - 'create_new_budget' => 'Crea un nou pressuport', - 'store_new_budget' => 'Desa el pressuport nou', - 'stored_new_budget' => 'S\'ha desat el nou pressupost ":name"', - 'available_between' => 'Disponible entre :start i :end', - 'transactionsWithoutBudget' => 'Despeses sense pressupost', - 'transactions_no_budget' => 'Despeses sense pressupost entre :start i :end', - 'spent_between' => 'Ja t\'has gastat entre :start i :end', - 'set_available_amount' => 'Establir quantitat disponible', - 'update_available_amount' => 'Actualitzar quantitat disponible', - 'ab_basic_modal_explain' => 'Utilitza aquest formulari per a indicar el pressupost que esperes tindre (en total, en :currency) en el període indicat.', - 'createBudget' => 'Nou pressupost', - 'invalid_currency' => 'Moneda invàlida', - 'invalid_amount' => 'Per favor, introdueix una quantitat', - 'set_ab' => 'El pressupost disponible establert', - 'updated_ab' => 'La quantitat disponible al pressupost s\'ha actualitzat', - 'deleted_ab' => 'La quantitat disponible al pressupost s\'ha eliminat', - 'deleted_bl' => 'La quantitat pressupostada s\'ha eliminat', - 'alt_currency_ab_create' => 'Veure el pressupost disponible en una altra moneda', - 'bl_create_btn' => 'Establir pressupost en una altra moneda', - 'inactiveBudgets' => 'Pressupostos inactius', - 'without_budget_between' => 'Transaccions sense un pressupost entre :start i :end', - 'delete_budget' => 'Eliminar pressupost ":name"', - 'deleted_budget' => 'Eliminat el pressupost ":name"', - 'edit_budget' => 'Editar pressupost ":name"', - 'updated_budget' => 'Actualitzat el pressupost ":name"', - 'update_amount' => 'Actualitzar quantitat', - 'update_budget' => 'Actualitzar pressupost', - 'update_budget_amount_range' => 'Actualitza la quantitat (esperada) disponible entre :start i :end', - 'set_budget_limit_title' => 'Estableix la quantitat pressupostada per al pressupost :budget entre :start i :end', - 'set_budget_limit' => 'Establir quantitat pressupostada', - 'budget_period_navigator' => 'Navegador de períodes', - 'info_on_available_amount' => 'Què tinc disponible?', - 'available_amount_indication' => 'Utilitza aquestes quantitats per a tindre una aproximació de quin és el teu pressupost disponible.', - 'suggested' => 'Suggerit', - 'average_between' => 'Mitjana entre :start i :end', - 'transferred_in' => 'Transferit (cap a dins)', - 'transferred_away' => 'Transferit (cap a fora)', - 'auto_budget_none' => 'Cap auto-pressupost', - 'auto_budget_reset' => 'Estableix una quantitat fixa cada període', - 'auto_budget_rollover' => 'Afegeix una quantitat cada periode', - 'auto_budget_adjusted' => 'Afegeix una quantitat cada període i corregeix per a sobredespeses', - 'auto_budget_period_daily' => 'Diàriament', - 'auto_budget_period_weekly' => 'Setmanalment', - 'auto_budget_period_monthly' => 'Mensualment', - 'auto_budget_period_quarterly' => 'Quadrimestralment', - 'auto_budget_period_half_year' => 'Cada mig any', - 'auto_budget_period_yearly' => 'Anualment', - 'auto_budget_help' => 'Pots llegir més sobre aquesta funció en l\'ajuda. Fes clic a la icona superior dreta (?).', - 'auto_budget_reset_icon' => 'El pressupost s\'establirà periòdicament', - 'auto_budget_rollover_icon' => 'La quantitat pressupostada s\'incrementarà periòdicament', - 'auto_budget_adjusted_icon' => 'La quantitat del pressupost augmentarà periòdicament i es corregirà per a sobredespeses', - 'remove_budgeted_amount' => 'S\'ha eliminat la quantitat pressupostada en :currency', + 'daily_budgets' => 'Pressuposts diaris', + 'weekly_budgets' => 'Pressuposts setmanals', + 'monthly_budgets' => 'Pressuposts mensuals', + 'quarterly_budgets' => 'Pressuposts trimestrals', + 'half_year_budgets' => 'Pressuposts semestrals', + 'yearly_budgets' => 'Pressuposts anuals', + 'other_budgets' => 'Pressuposts de temps personalitzat', + 'budget_limit_not_in_range' => 'Aquesta quantitat s\'aplica des de :start fins a :end:', + 'total_available_budget' => 'Pressupost total disponible (entre :start i :end)', + 'total_available_budget_in_currency' => 'Pressupost total disponible en :currency', + 'see_below' => 'veure a sota', + 'create_new_budget' => 'Crea un nou pressuport', + 'store_new_budget' => 'Desa el pressuport nou', + 'stored_new_budget' => 'S\'ha desat el nou pressupost ":name"', + 'available_between' => 'Disponible entre :start i :end', + 'transactionsWithoutBudget' => 'Despeses sense pressupost', + 'transactions_no_budget' => 'Despeses sense pressupost entre :start i :end', + 'spent_between' => 'Ja t\'has gastat entre :start i :end', + 'spent_between_left' => 'Has gastat :spent entre :start i :end, deixant :left restants.', + 'set_available_amount' => 'Establir quantitat disponible', + 'update_available_amount' => 'Actualitzar quantitat disponible', + 'ab_basic_modal_explain' => 'Utilitza aquest formulari per a indicar el pressupost que esperes tindre (en total, en :currency) en el període indicat.', + 'createBudget' => 'Nou pressupost', + 'invalid_currency' => 'Moneda invàlida', + 'invalid_amount' => 'Per favor, introdueix una quantitat', + 'set_ab' => 'El pressupost disponible establert', + 'updated_ab' => 'La quantitat disponible al pressupost s\'ha actualitzat', + 'deleted_ab' => 'La quantitat disponible al pressupost s\'ha eliminat', + 'deleted_bl' => 'La quantitat pressupostada s\'ha eliminat', + 'alt_currency_ab_create' => 'Veure el pressupost disponible en una altra moneda', + 'bl_create_btn' => 'Establir pressupost en una altra moneda', + 'inactiveBudgets' => 'Pressupostos inactius', + 'without_budget_between' => 'Transaccions sense un pressupost entre :start i :end', + 'delete_budget' => 'Eliminar pressupost ":name"', + 'deleted_budget' => 'Eliminat el pressupost ":name"', + 'edit_budget' => 'Editar pressupost ":name"', + 'updated_budget' => 'Actualitzat el pressupost ":name"', + 'update_amount' => 'Actualitzar quantitat', + 'update_budget' => 'Actualitzar pressupost', + 'update_budget_amount_range' => 'Actualitza la quantitat (esperada) disponible entre :start i :end', + 'set_budget_limit_title' => 'Estableix la quantitat pressupostada per al pressupost :budget entre :start i :end', + 'set_budget_limit' => 'Establir quantitat pressupostada', + 'budget_period_navigator' => 'Navegador de períodes', + 'info_on_available_amount' => 'Què tinc disponible?', + 'available_amount_indication' => 'Utilitza aquestes quantitats per a tindre una aproximació de quin és el teu pressupost disponible.', + 'suggested' => 'Suggerit', + 'average_between' => 'Mitjana entre :start i :end', + 'transferred_in' => 'Transferit (cap a dins)', + 'transferred_away' => 'Transferit (cap a fora)', + 'auto_budget_none' => 'Cap auto-pressupost', + 'auto_budget_reset' => 'Estableix una quantitat fixa cada període', + 'auto_budget_rollover' => 'Afegeix una quantitat cada periode', + 'auto_budget_adjusted' => 'Afegeix una quantitat cada període i corregeix per a sobredespeses', + 'auto_budget_period_daily' => 'Diàriament', + 'auto_budget_period_weekly' => 'Setmanalment', + 'auto_budget_period_monthly' => 'Mensualment', + 'auto_budget_period_quarterly' => 'Quadrimestralment', + 'auto_budget_period_half_year' => 'Cada mig any', + 'auto_budget_period_yearly' => 'Anualment', + 'auto_budget_help' => 'Pots llegir més sobre aquesta funció en l\'ajuda. Fes clic a la icona superior dreta (?).', + 'auto_budget_reset_icon' => 'El pressupost s\'establirà periòdicament', + 'auto_budget_rollover_icon' => 'La quantitat pressupostada s\'incrementarà periòdicament', + 'auto_budget_adjusted_icon' => 'La quantitat del pressupost augmentarà periòdicament i es corregirà per a sobredespeses', + 'remove_budgeted_amount' => 'S\'ha eliminat la quantitat pressupostada en :currency', // bills: - 'subscription' => 'Subscripció', - 'not_expected_period' => 'No s\'espera aquest periode', - 'subscriptions_in_group' => 'Subscripcions al grup "%{title}"', - 'subscr_expected_x_times' => 'S\'espera que pagues %{amount} %{times} vegades aquest període', - 'not_or_not_yet' => 'No (encara)', - 'visit_bill' => 'Visita la factura ":name" en Firefly III', - 'match_between_amounts' => 'La factura coincideix amb les transaccions entre :low i :high.', - 'running_again_loss' => 'Les transaccions enllaçades previament a aquesta factura pot ser perguen la connexió (si no coincideixen les normes).', - 'bill_related_rules' => 'Normes relacionades a aquesta factura', - 'repeats' => 'Repeticions', - 'bill_end_date_help' => 'Camp opcional. S\'espera que la factura acabe aquest dia.', - 'bill_extension_date_help' => 'Camp opcional. La factura ha de ser estesa (o cancel·lada) aquest dia o abans.', - 'bill_end_index_line' => 'La factura acaba el :date', - 'bill_extension_index_line' => 'La factura ha de ser cancel·lada o estesa el :date', - 'connected_journals' => 'Transaccions connectades', - 'auto_match_on' => 'Quadrades automàticament per Firefly III', - 'auto_match_off' => 'No quadrades automàticament per Firefly III', - 'next_expected_match' => 'Pròxima coincidència esperada', - 'delete_bill' => 'Elimina la factura ":name"', - 'deleted_bill' => 'S\'ha eliminat la factura ":name"', - 'edit_bill' => 'Editar factura ":name"', - 'more' => 'Més', - 'rescan_old' => 'Executa les normes altra vegada, en totes les transaccions', - 'update_bill' => 'Actualiza la factura', - 'updated_bill' => 'S\'ha actualitzat la factura ":name"', - 'store_new_bill' => 'Desa una factura nova', - 'stored_new_bill' => 'S\'ha desat la nova factura ":name"', - 'cannot_scan_inactive_bill' => 'Les factures inactives no poden ser escanejades.', - 'rescanned_bill' => 'S\'ha escanejat tot altra vegada, i s\'ha enllaçat :count transacció a la factura.|S\'ha escanejat tot altra vegada, i s\'han enllaçat :count transaccions a la factura.', - 'average_bill_amount_year' => 'Quantitat de factures mitjana (:year)', - 'average_bill_amount_overall' => 'Quantitat de factures mitjana (global)', - 'bill_is_active' => 'La factura està activa', - 'bill_expected_between' => 'S\'espera entre :start i :end', - 'bill_will_automatch' => 'La factura s\'enllaçarà automàticament a les transaccions que encaixen', - 'skips_over' => 'es salta', - 'bill_store_error' => 'Ha hagut un error inesperat al desar la teua nova factura. Per favor, comprova els registres', - 'list_inactive_rule' => 'regla inactiva', - 'bill_edit_rules' => 'Firefly III intentarà editar la norma relacionada amb aquesta factura. Tot i això, si has editat aquesta norma pel teu compte, Firefly III no canviarà res.|Firefly III intentarà editar les :count normes relacionades amb aquesta factura. Tot i això, si les has editat pel teu compte, Firefly III no canviarà res.', - 'bill_expected_date' => 'S\'espera :date', - 'bill_expected_date_js' => 'S\'espera {date}', - 'expected_amount' => 'Quantitat (esperada)', - 'bill_paid_on' => 'Pagat el {date}', - 'bill_repeats_weekly' => 'Es repeteix setmanalment', - 'bill_repeats_monthly' => 'Es repeteix mensualment', - 'bill_repeats_quarterly' => 'Es repeteix quadrimestralment', - 'bill_repeats_half-year' => 'Es repeteix cada mig any', - 'bill_repeats_yearly' => 'Es repeteix anualment', - 'bill_repeats_weekly_other' => 'Es repeteix cada dos setmanes', - 'bill_repeats_monthly_other' => 'Es repeteix cada dos mesos', - 'bill_repeats_quarterly_other' => 'Es repeteix cada dos quadrimestres', - 'bill_repeats_half-year_other' => 'Es repeteix anualment', - 'bill_repeats_yearly_other' => 'Es repeteix cada dos anys', - 'bill_repeats_weekly_skip' => 'Es repeteix cada {skip} setmanes', - 'bill_repeats_monthly_skip' => 'Es repeteix cada {skip} mesos', - 'bill_repeats_quarterly_skip' => 'Es repeteix cada {skip} quadrimestres', - 'bill_repeats_half-year_skip' => 'Es repeteix cada {skip} mitjos anys', - 'bill_repeats_yearly_skip' => 'Es repeteix cada {skip} anys', - 'subscriptions' => 'Subscripcions', - 'go_to_subscriptions' => 'Ves a les teves subscripcions', - 'forever' => 'Per a sempre', - 'extension_date_is' => 'La data d\'extensió és {date}', + 'subscription' => 'Subscripció', + 'not_expected_period' => 'No s\'espera aquest periode', + 'subscriptions_in_group' => 'Subscripcions al grup "%{title}"', + 'subscr_expected_x_times' => 'S\'espera que pagues %{amount} %{times} vegades aquest període', + 'not_or_not_yet' => 'No (encara)', + 'visit_bill' => 'Visita la factura ":name" en Firefly III', + 'match_between_amounts' => 'La factura coincideix amb les transaccions entre :low i :high.', + 'running_again_loss' => 'Les transaccions enllaçades previament a aquesta factura pot ser perguen la connexió (si no coincideixen les normes).', + 'bill_related_rules' => 'Normes relacionades a aquesta factura', + 'repeats' => 'Repeticions', + 'bill_end_date_help' => 'Camp opcional. S\'espera que la factura acabe aquest dia.', + 'bill_extension_date_help' => 'Camp opcional. La factura ha de ser estesa (o cancel·lada) aquest dia o abans.', + 'bill_end_index_line' => 'La factura acaba el :date', + 'bill_extension_index_line' => 'La factura ha de ser cancel·lada o estesa el :date', + 'connected_journals' => 'Transaccions connectades', + 'auto_match_on' => 'Quadrades automàticament per Firefly III', + 'auto_match_off' => 'No quadrades automàticament per Firefly III', + 'next_expected_match' => 'Pròxima coincidència esperada', + 'delete_bill' => 'Elimina la factura ":name"', + 'deleted_bill' => 'S\'ha eliminat la factura ":name"', + 'edit_bill' => 'Editar factura ":name"', + 'more' => 'Més', + 'rescan_old' => 'Executa les normes altra vegada, en totes les transaccions', + 'update_bill' => 'Actualiza la factura', + 'updated_bill' => 'S\'ha actualitzat la factura ":name"', + 'store_new_bill' => 'Desa una factura nova', + 'stored_new_bill' => 'S\'ha desat la nova factura ":name"', + 'cannot_scan_inactive_bill' => 'Les factures inactives no poden ser escanejades.', + 'rescanned_bill' => 'S\'ha escanejat tot altra vegada, i s\'ha enllaçat :count transacció a la factura.|S\'ha escanejat tot altra vegada, i s\'han enllaçat :count transaccions a la factura.', + 'average_bill_amount_year' => 'Quantitat de factures mitjana (:year)', + 'average_bill_amount_overall' => 'Quantitat de factures mitjana (global)', + 'bill_is_active' => 'La factura està activa', + 'bill_expected_between' => 'S\'espera entre :start i :end', + 'bill_will_automatch' => 'La factura s\'enllaçarà automàticament a les transaccions que encaixen', + 'skips_over' => 'es salta', + 'bill_store_error' => 'Ha hagut un error inesperat al desar la teua nova factura. Per favor, comprova els registres', + 'list_inactive_rule' => 'regla inactiva', + 'bill_edit_rules' => 'Firefly III intentarà editar la norma relacionada amb aquesta factura. Tot i això, si has editat aquesta norma pel teu compte, Firefly III no canviarà res.|Firefly III intentarà editar les :count normes relacionades amb aquesta factura. Tot i això, si les has editat pel teu compte, Firefly III no canviarà res.', + 'bill_expected_date' => 'S\'espera :date', + 'bill_expected_date_js' => 'S\'espera {date}', + 'expected_amount' => 'Quantitat (esperada)', + 'bill_paid_on' => 'Pagat el {date}', + 'bill_repeats_weekly' => 'Es repeteix setmanalment', + 'bill_repeats_monthly' => 'Es repeteix mensualment', + 'bill_repeats_quarterly' => 'Es repeteix quadrimestralment', + 'bill_repeats_half-year' => 'Es repeteix cada mig any', + 'bill_repeats_yearly' => 'Es repeteix anualment', + 'bill_repeats_weekly_other' => 'Es repeteix cada dos setmanes', + 'bill_repeats_monthly_other' => 'Es repeteix cada dos mesos', + 'bill_repeats_quarterly_other' => 'Es repeteix cada dos quadrimestres', + 'bill_repeats_half-year_other' => 'Es repeteix anualment', + 'bill_repeats_yearly_other' => 'Es repeteix cada dos anys', + 'bill_repeats_weekly_skip' => 'Es repeteix cada {skip} setmanes', + 'bill_repeats_monthly_skip' => 'Es repeteix cada {skip} mesos', + 'bill_repeats_quarterly_skip' => 'Es repeteix cada {skip} quadrimestres', + 'bill_repeats_half-year_skip' => 'Es repeteix cada {skip} mitjos anys', + 'bill_repeats_yearly_skip' => 'Es repeteix cada {skip} anys', + 'subscriptions' => 'Subscripcions', + 'go_to_subscriptions' => 'Ves a les teves subscripcions', + 'forever' => 'Per a sempre', + 'extension_date_is' => 'La data d\'extensió és {date}', // accounts: - 'i_am_owed_amount' => 'Se\'m deu la quantitat', - 'i_owe_amount' => 'Jo dec la quantitat', - 'inactive_account_link' => 'Tens :count compte inactiu (arxivat), que pots veure en aquesta pàgina.|Tens :count comptes inactius (arxivats), els pots veure en aquesta pàgina.', - 'all_accounts_inactive' => 'Aquests són els teus comptes inactius.', - 'active_account_link' => 'Aquest enllaç et retorna als teus comptes actius.', - 'account_missing_transaction' => 'El compte #:id (":name") no es pot visualitzar directament ja que Firefly no té alguna informació de redirecció.', - 'cc_monthly_payment_date_help' => 'Selecciona qualsevol any o mes, i serà ignorat. Només el dia és rellevant.', - 'details_for_asset' => 'Detalls per al compte d\'actius ":name"', - 'details_for_expense' => 'Detalls per al compte de despeses ":name"', - 'details_for_revenue' => 'Detalls per al compte de beneficis ":name"', - 'details_for_cash' => 'Detalls per al compte d\'efectiu ":name"', - 'store_new_asset_account' => 'Desa el nou compte d\'actius', - 'store_new_expense_account' => 'Desa el nou compte de despeses', - 'store_new_revenue_account' => 'Desa el nou compte de beneficis', - 'edit_asset_account' => 'Edita el compte d\'actius ":name"', - 'edit_expense_account' => 'Edita el compte de despeses ":name"', - 'edit_revenue_account' => 'Edita el compte de beneficis ":name"', - 'delete_asset_account' => 'Elimina el compte d\'actius ":name"', - 'delete_expense_account' => 'Elimina el compte de despeses ":name"', - 'delete_revenue_account' => 'Elimina el compte de beneficis ":name"', - 'delete_liabilities_account' => 'Elimina el passiu ":name"', - 'asset_deleted' => 'S\'ha eliminat el compte d\'actius ":name" satisfactòriament', - 'account_deleted' => 'S\'ha eliminat el compte ":name" satisfactòriament', - 'expense_deleted' => 'S\'ha eliminat el compte de despeses ":name" satisfactòriament', - 'revenue_deleted' => 'S\'ha eliminat el compte de beneficis ":name" satisfactòriament', - 'update_asset_account' => 'Actualitza el compte d\'actius', - 'update_undefined_account' => 'Actualitza el compte', - 'update_liabilities_account' => 'Actualitza el passiu', - 'update_expense_account' => 'Actualitza el compte de despeses', - 'update_revenue_account' => 'Actualitza el compte de beneficis', - 'make_new_asset_account' => 'Crea un nou compte d\'actius', - 'make_new_expense_account' => 'Crea un nou compte de despeses', - 'make_new_revenue_account' => 'Crea un nou compte de beneficis', - 'make_new_liabilities_account' => 'Crea un nou passiu', - 'asset_accounts' => 'Comptes d\'actius', - 'undefined_accounts' => 'Comptes', - 'asset_accounts_inactive' => 'Comptes d\'actius (inactius)', - 'expense_account' => 'Compte de despeses', - 'expense_accounts' => 'Comptes de despeses', - 'expense_accounts_inactive' => 'Comptes de despeses (inactius)', - 'revenue_account' => 'Compte d\'ingressos', - 'revenue_accounts' => 'Comptes d\'ingressos', - 'revenue_accounts_inactive' => 'Comptes d\'ingressos (inactius)', - 'cash_accounts' => 'Comptes d\'efectiu', - 'Cash account' => 'Compte d\'efectiu', - 'liabilities_accounts' => 'Passius', - 'liabilities_accounts_inactive' => 'Passius (inactiu)', - 'reconcile_account' => 'Consolida el compte ":account"', - 'overview_of_reconcile_modal' => 'Visió general de consolidació', - 'delete_reconciliation' => 'Elimina la consolidació', - 'update_reconciliation' => 'Actualitza la consolidació', - 'amount_cannot_be_zero' => 'La quantitat no pot ser zero', - 'end_of_reconcile_period' => 'Final del període de consolidació :period', - 'start_of_reconcile_period' => 'Inici del període de consolidació :period', - 'start_balance' => 'Saldo inicial', - 'end_balance' => 'Saldo final', - 'update_balance_dates_instruction' => 'Encaixa les quantitats i dates de dalt amb el teu extracte bancari, i prem "Comença a consolidar"', - 'select_transactions_instruction' => 'Selecciona les transaccions que apareixen en el teu extracte bancari.', - 'select_range_and_balance' => 'Primer, verifica el rang de dates i saldo. Després prem "Comença a consolidar"', - 'date_change_instruction' => 'Si canvies el rang de dates ara, es perdrà el progrés.', - 'update_selection' => 'Actualitza la selecció', - 'store_reconcile' => 'Desa la consolidació', - 'reconciliation_transaction' => 'Consolida la transacció', - 'Reconciliation' => 'Consolidació', - 'reconciliation' => 'Consolidació', - 'reconcile_options' => 'Opcions de consolidació', - 'reconcile_range' => 'Rang de consolidació', - 'start_reconcile' => 'Comença a consolidar', - 'cash_account_type' => 'Efectiu', - 'cash' => 'efectiu', - 'cant_find_redirect_account' => 'Firefly III ha intentat redireccionar-te però no ha pogut. Disculpa les molèsties. Torna a l\'índex.', - 'account_type' => 'Tipus de compte', - 'save_transactions_by_moving' => 'Desa aquesta transacció movent-la a un altre compte:|Desa aquestes transaccions movent-les a un altre compte:', - 'save_transactions_by_moving_js' => 'Sense transaccions.|Desa aquesta transacció movent-la a un altre compte. |Desa aquestes transaccions movent-les a un altre compte.', - 'stored_new_account' => 'S\'ha desat el compte nou ":name"!', - 'stored_new_account_js' => 'S\'ha desat el compte nou "{name}"!', - 'updated_account' => 'S\'ha actualitzat el compte ":name"', - 'updated_account_js' => 'S\'ha actualitzat el compte "{title}".', - 'credit_card_options' => 'Opcions de la targeta de crèdit', - 'no_transactions_account' => 'No hi ha cap transacció (en aquest període) per al compte d\'actius ":name".', - 'no_transactions_period' => 'No hi ha transaccions (en aquest període).', - 'no_data_for_chart' => 'No hi ha prou informació (encara) per a generar aquest gràfic.', - 'select_at_least_one_account' => 'Per favor, selecciona almenys un compte d\'actius', - 'select_at_least_one_category' => 'Per favor, selecciona almenys una categoria', - 'select_at_least_one_budget' => 'Per favor, selecciona almenys un pressupost', - 'select_at_least_one_tag' => 'Per favor, selecciona almenys una etiqueta', - 'select_at_least_one_expense' => 'Per favor, selecciona almenys una combinació de comptes de despeses/beneficis. Aquest informe no està disponible si no en tens cap (la llista està buida).', - 'account_default_currency' => 'Aquesta serà la nova moneda associada amb aquest compte.', - 'reconcile_has_more' => 'La compatibilitat a Firefly III diu que tens més diners del que diu el teu banc. Tens diverses opcions. Per favor, tria què fer, i després prem a "Confirmar consolidació".', - 'reconcile_has_less' => 'La compatibilitat a Firefly III diu que tens menys diners del que diu el teu banc. Tens diverses opcions. Per favor, tria què fer, i després prem a "Confirmar consolidació".', - 'reconcile_is_equal' => 'La compatibilitat a Firefly III coincideix amb el que diu el teu banc. No cal fer res més. Per favor, prem a "Confirmar consolidació" per a confirmar l\'entrada.', - 'create_pos_reconcile_transaction' => 'Buida les transaccions seleccionades, i crea una correcció afegint :amount a aquest compte d\'actius.', - 'create_neg_reconcile_transaction' => 'Buida les transaccions seleccionades, i crea una correció eliminant :amount d\'aquest compte d\'actius.', - 'reconcile_do_nothing' => 'Buida les transaccions seleccionades, però no corregir res.', - 'reconcile_go_back' => 'Sempre pots editar o eliminar una correció més tard.', - 'must_be_asset_account' => 'Sols pots consolidar comptes d\'actius', - 'reconciliation_stored' => 'Consolidació desada', - 'reconciliation_error' => 'A causa d\'un error les transaccions han sigut marcades com a consolidades, però la correcció no s\'ha desat: :error.', - 'reconciliation_transaction_title' => 'Consolidació (:from to :to)', - 'sum_of_reconciliation' => 'Suma de la consolidació', - 'reconcile_this_account' => 'Consolida aquest compte', - 'reconcile' => 'Consolidar', - 'show' => 'Mostra', - 'confirm_reconciliation' => 'Confirma la consolidació', - 'submitted_start_balance' => 'Enviat el balanç inicial', - 'selected_transactions' => 'Transaccions seleccionades (:count)', - 'already_cleared_transactions' => 'Transaccions ja comprovades (:count)', - 'submitted_end_balance' => 'Enviat el balanç final', - 'initial_balance_description' => 'Balanç inicial per a ":account"', - 'liability_credit_description' => 'Crèdit de passius per a ":account"', - 'interest_calc_' => 'desconegut', - 'interest_calc_daily' => 'Per dia', - 'interest_calc_monthly' => 'Per mes', - 'interest_calc_yearly' => 'Per any', - 'interest_calc_weekly' => 'Per setmana', - 'interest_calc_half-year' => 'Cada mig any', - 'interest_calc_quarterly' => 'Per quadrimestre', - 'initial_balance_account' => 'Compte de balanç inicial de :account', - 'list_options' => 'Llista opcions', + 'i_am_owed_amount' => 'Se\'m deu la quantitat', + 'i_owe_amount' => 'Jo dec la quantitat', + 'inactive_account_link' => 'Tens :count compte inactiu (arxivat), que pots veure en aquesta pàgina.|Tens :count comptes inactius (arxivats), els pots veure en aquesta pàgina.', + 'all_accounts_inactive' => 'Aquests són els teus comptes inactius.', + 'active_account_link' => 'Aquest enllaç et retorna als teus comptes actius.', + 'account_missing_transaction' => 'El compte #:id (":name") no es pot visualitzar directament ja que Firefly no té alguna informació de redirecció.', + 'cc_monthly_payment_date_help' => 'Selecciona qualsevol any o mes, i serà ignorat. Només el dia és rellevant.', + 'details_for_asset' => 'Detalls per al compte d\'actius ":name"', + 'details_for_expense' => 'Detalls per al compte de despeses ":name"', + 'details_for_revenue' => 'Detalls per al compte de beneficis ":name"', + 'details_for_cash' => 'Detalls per al compte d\'efectiu ":name"', + 'store_new_asset_account' => 'Desa el nou compte d\'actius', + 'store_new_expense_account' => 'Desa el nou compte de despeses', + 'store_new_revenue_account' => 'Desa el nou compte de beneficis', + 'edit_asset_account' => 'Edita el compte d\'actius ":name"', + 'edit_expense_account' => 'Edita el compte de despeses ":name"', + 'edit_revenue_account' => 'Edita el compte de beneficis ":name"', + 'delete_asset_account' => 'Elimina el compte d\'actius ":name"', + 'delete_expense_account' => 'Elimina el compte de despeses ":name"', + 'delete_revenue_account' => 'Elimina el compte de beneficis ":name"', + 'delete_liabilities_account' => 'Elimina el passiu ":name"', + 'asset_deleted' => 'S\'ha eliminat el compte d\'actius ":name" satisfactòriament', + 'account_deleted' => 'S\'ha eliminat el compte ":name" satisfactòriament', + 'expense_deleted' => 'S\'ha eliminat el compte de despeses ":name" satisfactòriament', + 'revenue_deleted' => 'S\'ha eliminat el compte de beneficis ":name" satisfactòriament', + 'update_asset_account' => 'Actualitza el compte d\'actius', + 'update_undefined_account' => 'Actualitza el compte', + 'update_liabilities_account' => 'Actualitza el passiu', + 'update_expense_account' => 'Actualitza el compte de despeses', + 'update_revenue_account' => 'Actualitza el compte de beneficis', + 'make_new_asset_account' => 'Crea un nou compte d\'actius', + 'make_new_expense_account' => 'Crea un nou compte de despeses', + 'make_new_revenue_account' => 'Crea un nou compte de beneficis', + 'make_new_liabilities_account' => 'Crea un nou passiu', + 'asset_accounts' => 'Comptes d\'actius', + 'undefined_accounts' => 'Comptes', + 'asset_accounts_inactive' => 'Comptes d\'actius (inactius)', + 'expense_account' => 'Compte de despeses', + 'expense_accounts' => 'Comptes de despeses', + 'expense_accounts_inactive' => 'Comptes de despeses (inactius)', + 'revenue_account' => 'Compte d\'ingressos', + 'revenue_accounts' => 'Comptes d\'ingressos', + 'revenue_accounts_inactive' => 'Comptes d\'ingressos (inactius)', + 'cash_accounts' => 'Comptes d\'efectiu', + 'Cash account' => 'Compte d\'efectiu', + 'liabilities_accounts' => 'Passius', + 'liabilities_accounts_inactive' => 'Passius (inactiu)', + 'reconcile_account' => 'Consolida el compte ":account"', + 'overview_of_reconcile_modal' => 'Visió general de consolidació', + 'delete_reconciliation' => 'Elimina la consolidació', + 'update_reconciliation' => 'Actualitza la consolidació', + 'amount_cannot_be_zero' => 'La quantitat no pot ser zero', + 'end_of_reconcile_period' => 'Final del període de consolidació :period', + 'start_of_reconcile_period' => 'Inici del període de consolidació :period', + 'start_balance' => 'Saldo inicial', + 'end_balance' => 'Saldo final', + 'update_balance_dates_instruction' => 'Encaixa les quantitats i dates de dalt amb el teu extracte bancari, i prem "Comença a consolidar"', + 'select_transactions_instruction' => 'Selecciona les transaccions que apareixen en el teu extracte bancari.', + 'select_range_and_balance' => 'Primer, verifica el rang de dates i saldo. Després prem "Comença a consolidar"', + 'date_change_instruction' => 'Si canvies el rang de dates ara, es perdrà el progrés.', + 'update_selection' => 'Actualitza la selecció', + 'store_reconcile' => 'Desa la consolidació', + 'reconciliation_transaction' => 'Consolida la transacció', + 'Reconciliation' => 'Consolidació', + 'reconciliation' => 'Consolidació', + 'reconcile_options' => 'Opcions de consolidació', + 'reconcile_range' => 'Rang de consolidació', + 'start_reconcile' => 'Comença a consolidar', + 'cash_account_type' => 'Efectiu', + 'cash' => 'efectiu', + 'cant_find_redirect_account' => 'Firefly III ha intentat redireccionar-te però no ha pogut. Disculpa les molèsties. Torna a l\'índex.', + 'account_type' => 'Tipus de compte', + 'save_transactions_by_moving' => 'Desa aquesta transacció movent-la a un altre compte:|Desa aquestes transaccions movent-les a un altre compte:', + 'save_transactions_by_moving_js' => 'Sense transaccions.|Desa aquesta transacció movent-la a un altre compte. |Desa aquestes transaccions movent-les a un altre compte.', + 'stored_new_account' => 'S\'ha desat el compte nou ":name"!', + 'stored_new_account_js' => 'S\'ha desat el compte nou "{name}"!', + 'updated_account' => 'S\'ha actualitzat el compte ":name"', + 'updated_account_js' => 'S\'ha actualitzat el compte "{title}".', + 'credit_card_options' => 'Opcions de la targeta de crèdit', + 'no_transactions_account' => 'No hi ha cap transacció (en aquest període) per al compte d\'actius ":name".', + 'no_transactions_period' => 'No hi ha transaccions (en aquest període).', + 'no_data_for_chart' => 'No hi ha prou informació (encara) per a generar aquest gràfic.', + 'select_at_least_one_account' => 'Per favor, selecciona almenys un compte d\'actius', + 'select_at_least_one_category' => 'Per favor, selecciona almenys una categoria', + 'select_at_least_one_budget' => 'Per favor, selecciona almenys un pressupost', + 'select_at_least_one_tag' => 'Per favor, selecciona almenys una etiqueta', + 'select_at_least_one_expense' => 'Per favor, selecciona almenys una combinació de comptes de despeses/beneficis. Aquest informe no està disponible si no en tens cap (la llista està buida).', + 'account_default_currency' => 'Aquesta serà la nova moneda associada amb aquest compte.', + 'reconcile_has_more' => 'La compatibilitat a Firefly III diu que tens més diners del que diu el teu banc. Tens diverses opcions. Per favor, tria què fer, i després prem a "Confirmar consolidació".', + 'reconcile_has_less' => 'La compatibilitat a Firefly III diu que tens menys diners del que diu el teu banc. Tens diverses opcions. Per favor, tria què fer, i després prem a "Confirmar consolidació".', + 'reconcile_is_equal' => 'La compatibilitat a Firefly III coincideix amb el que diu el teu banc. No cal fer res més. Per favor, prem a "Confirmar consolidació" per a confirmar l\'entrada.', + 'create_pos_reconcile_transaction' => 'Buida les transaccions seleccionades, i crea una correcció afegint :amount a aquest compte d\'actius.', + 'create_neg_reconcile_transaction' => 'Buida les transaccions seleccionades, i crea una correció eliminant :amount d\'aquest compte d\'actius.', + 'reconcile_do_nothing' => 'Buida les transaccions seleccionades, però no corregir res.', + 'reconcile_go_back' => 'Sempre pots editar o eliminar una correció més tard.', + 'must_be_asset_account' => 'Sols pots consolidar comptes d\'actius', + 'reconciliation_stored' => 'Consolidació desada', + 'reconciliation_error' => 'A causa d\'un error les transaccions han sigut marcades com a consolidades, però la correcció no s\'ha desat: :error.', + 'reconciliation_transaction_title' => 'Consolidació (:from to :to)', + 'sum_of_reconciliation' => 'Suma de la consolidació', + 'reconcile_this_account' => 'Consolida aquest compte', + 'reconcile' => 'Consolidar', + 'show' => 'Mostra', + 'confirm_reconciliation' => 'Confirma la consolidació', + 'submitted_start_balance' => 'Enviat el balanç inicial', + 'selected_transactions' => 'Transaccions seleccionades (:count)', + 'already_cleared_transactions' => 'Transaccions ja comprovades (:count)', + 'submitted_end_balance' => 'Enviat el balanç final', + 'initial_balance_description' => 'Balanç inicial per a ":account"', + 'liability_credit_description' => 'Crèdit de passius per a ":account"', + 'interest_calc_' => 'desconegut', + 'interest_calc_daily' => 'Per dia', + 'interest_calc_monthly' => 'Per mes', + 'interest_calc_yearly' => 'Per any', + 'interest_calc_weekly' => 'Per setmana', + 'interest_calc_half-year' => 'Cada mig any', + 'interest_calc_quarterly' => 'Per quadrimestre', + 'initial_balance_account' => 'Compte de balanç inicial de :account', + 'list_options' => 'Llista opcions', // categories: - 'new_category' => 'Nova categoria', - 'create_new_category' => 'Crear una nova categoria', - 'without_category' => 'Sense cap categoria', - 'update_category' => 'Actualitza la categoria', - 'updated_category' => 'Actualitzar la categoria ":name"', - 'categories' => 'Categories', - 'edit_category' => 'Editar la categoria ":name"', - 'no_category' => '(cap categoria)', - 'unknown_category_plain' => 'Sense categoria', - 'category' => 'Categoria', - 'delete_category' => 'Eliminar categoria ":name"', - 'deleted_category' => 'S\'ha eliminat la categoria ":name"', - 'store_category' => 'Desa la nova categoria', - 'stored_category' => 'S\'ha desat la nova categoria ":name"', - 'without_category_between' => 'Sense categoria entre :start i :end', + 'new_category' => 'Nova categoria', + 'create_new_category' => 'Crear una nova categoria', + 'without_category' => 'Sense cap categoria', + 'update_category' => 'Actualitza la categoria', + 'updated_category' => 'Actualitzar la categoria ":name"', + 'categories' => 'Categories', + 'edit_category' => 'Editar la categoria ":name"', + 'no_category' => '(cap categoria)', + 'unknown_category_plain' => 'Sense categoria', + 'category' => 'Categoria', + 'delete_category' => 'Eliminar categoria ":name"', + 'deleted_category' => 'S\'ha eliminat la categoria ":name"', + 'store_category' => 'Desa la nova categoria', + 'stored_category' => 'S\'ha desat la nova categoria ":name"', + 'without_category_between' => 'Sense categoria entre :start i :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Actualitzar retirada', - 'update_deposit' => 'Actualitzar ingrés', - 'update_transaction' => 'Actualitzar transacció', - 'update_transfer' => 'Actualitzar transferència', - 'updated_withdrawal' => 'S\'ha actualitzat la retirada ":description"', - 'updated_deposit' => 'S\'ha actualitzat l\'ingrés ":description"', - 'updated_transfer' => 'S\'ha actualitzat la transferència ":description"', - 'no_changes_withdrawal' => 'La retirada ":description" no s\'ha canviat.', - 'no_changes_deposit' => 'L\'ingrès ":description" no s\'ha canviat.', - 'no_changes_transfer' => 'La transferència ":description" no s\'ha canviat.', - 'delete_withdrawal' => 'Elimina la retirada ":description"', - 'delete_deposit' => 'Elimina l\'ingrès ":description"', - 'delete_transfer' => 'Elimina la transferència ":description"', - 'deleted_withdrawal' => 'S\'ha eliminat la retirada ":description" satisfactòriament', - 'deleted_deposit' => 'S\'ha eliminat l\'ingrès ":description" satisfactòriament', - 'deleted_transfer' => 'S\'ha eliminat la transferència ":description" satisfactòriament', - 'deleted_reconciliation' => 'S\'ha eliminat la transacció de consolidació ":description" satisfactòriament', - 'stored_journal' => 'S\'ha creat la retirada ":description" satisfactòriament', - 'stored_journal_no_descr' => 'S\'ha creat la teua nova transacció satisfactòriament', - 'updated_journal_no_descr' => 'S\'ha actualitzat la teua transacció satisfactòriament', - 'select_transactions' => 'Selecciona transaccions', - 'rule_group_select_transactions' => 'Aplica ":title" a totes les transaccions', - 'rule_select_transactions' => 'Aplica ":title" a totes les transaccions', - 'stop_selection' => 'Para de seleccionar transaccions', - 'reconcile_selected' => 'Consolidar', - 'mass_delete_journals' => 'Elimina un nombre de transaccions', - 'mass_edit_journals' => 'Edita un nombre de transaccions', - 'mass_bulk_journals' => 'Edita en grup un nombre de transaccions', - 'mass_bulk_journals_explain' => 'Aquest formulari et permet canviar propietats de les transaccions següents en una mateixa actualització. Totes les transaccions de la taula seran actualitzades quan canvies els paràmetres mostrats ací.', - 'part_of_split' => 'Aquesta transacció forma part d\'una transacció dividida. Si no has seleccionat totes les divisions, pot ser que modifiques només algunes transaccions.', - 'bulk_set_new_values' => 'Utilitza les entrades següents per a establir nous valors. Si les deixes en blanc, es desaran en blanc per a tots. Tingues en compte que només les retirades seran assignades a un pressupost.', - 'no_bulk_category' => 'No actualitzes la categoria', - 'no_bulk_budget' => 'No actualitzes el pressupost', - 'no_bulk_tags' => 'No actualitzes la/les etiquetes', - 'replace_with_these_tags' => 'Reemplaça amb les següents etiquetes', - 'append_these_tags' => 'Afegeix aquestes etiquetes', - 'mass_edit' => 'Edita la selecció individualment', - 'bulk_edit' => 'Edita la selecció en grup', - 'mass_delete' => 'Elimina la selecció', - 'cannot_edit_other_fields' => 'No pots editar altres camps diferents als llistats, perquè no hi ha espai per a mostrar-los. Per favor, segueix l\'enllaç i edita-les una per una, si vols editar aquests camps.', - 'cannot_change_amount_reconciled' => 'No pots canviar la quantitat de transaccions consolidades.', - 'no_budget' => '(cap pressupost)', - 'no_bill' => '(cap factura)', - 'account_per_budget' => 'Compte per pressupost', - 'account_per_category' => 'Compte per categoria', - 'create_new_object' => 'Crear', - 'empty' => '(buit)', - 'all_other_budgets' => '(tots els pressupostos)', - 'all_other_accounts' => '(tots els comptes)', - 'expense_per_source_account' => 'Despeses per compte d\'origen', - 'expense_per_destination_account' => 'Despeses per compte de destinació', - 'income_per_destination_account' => 'Ingressos per compte de destinació', - 'spent_in_specific_category' => 'Gastat a la categoria ":category"', - 'earned_in_specific_category' => 'Guanyat a la categoria ":category"', - 'spent_in_specific_tag' => 'Gastat a l\'etiqueta ":tag"', - 'earned_in_specific_tag' => 'Guanyat a l\'etiqueta ":tag"', - 'income_per_source_account' => 'Ingressos per compte d\'origen', - 'average_spending_per_destination' => 'Despeses mitjanes per compte de destí', - 'average_spending_per_source' => 'Despeses mitjanes per compte d\'origen', - 'average_earning_per_source' => 'Benefici mitjà per compte d\'origen', - 'average_earning_per_destination' => 'Benefici mitjà per compte de destí', - 'account_per_tag' => 'Compte per etiqueta', - 'tag_report_expenses_listed_once' => 'Les despeses i ingressos mai es mostren dues vegades. Si una transacció té varies etiquetes, pot ser sols es mostre en una d\'elles. Pot semblar que falten dades a aquesta llista, però les quantitats seran correctes.', - 'double_report_expenses_charted_once' => 'Les despeses i ingressos mai es llisten dues vegades. Si una transacció té varies etiquetes, pot ser sols es mostre en una d\'elles. Pot semblar que falten dades a aquesta gràfica, però les quantitats seran correctes.', - 'tag_report_chart_single_tag' => 'Aquesta gràfica s\'aplica a una única etiqueta. Si una transacció en té diverses, el que veuràs ací pot estar reflectit a les gràfiques d\'altres etiquetes també.', - 'tag' => 'Etiqueta', - 'no_budget_squared' => '(cap pressupost)', - 'perm-delete-many' => 'Eliminar molts elements a la vegada pot causar problemes. Per favor, ves amb cura. Pots eliminar una part d\'una transacció dividida des d\'aquesta pàgina, així que ves amb compte.', - 'mass_deleted_transactions_success' => 'S\'ha eliminat :count transacció.|S\'han eliminat :count transaccions.', - 'mass_edited_transactions_success' => 'S\'ha actualitzat :count transacció.|S\'han actualitzat :count transaccions.', - 'opt_group_' => '(cap tipus de compte)', - 'opt_group_no_account_type' => '(cap tipus de compte)', - 'opt_group_defaultAsset' => 'Comptes d\'actius per defecte', - 'opt_group_savingAsset' => 'Comptes d\'estalvis', - 'opt_group_sharedAsset' => 'Comptes d\'actius per defecte', - 'opt_group_ccAsset' => 'Targetes de crèdit', - 'opt_group_cashWalletAsset' => 'Carteres d\'efectiu', - 'opt_group_expense_account' => 'Comptes de despeses', - 'opt_group_revenue_account' => 'Comptes d\'ingressos', - 'opt_group_l_Loan' => 'Passiu: prèstec', - 'opt_group_cash_account' => 'Compte d\'efectiu', - 'opt_group_l_Debt' => 'Passiu: Deute', - 'opt_group_l_Mortgage' => 'Passiu: Hipoteca', - 'opt_group_l_Credit card' => 'Passiu: Targeta de crèdit', - 'notes' => 'Notes', - 'unknown_journal_error' => 'No s\'ha pogut desar la transacció. Per favor, revisa els arxius de registre.', - 'attachment_not_found' => 'No s\'ha trobat aquest adjunt.', - 'journal_link_bill' => 'Aquesta transacció està enllaçada a la factura :name. Per a eliminar la connexió, desmarca la casella. Utilitza regles per a connectar-la a una altra factura.', - 'transaction_stored_link' => 'La Transacció #{ID} ("{title}") s\'ha desat.', - 'transaction_new_stored_link' => 'La Transacció #{ID} s\'ha desat.', - 'transaction_updated_link' => 'La transacció#{ID} ("{title}") s\'ha actualitzat.', - 'transaction_updated_no_changes' => 'La Transacció #{ID} ("{title}") no ha sigut modificada.', - 'first_split_decides' => 'La primera divisió determina el valor d\'aquest camp', - 'first_split_overrules_source' => 'La primera divisió pot sobreescriure el compte d\'origen', - 'first_split_overrules_destination' => 'La primera divisió pot sobreescriure el compte de destinació', - 'spent_x_of_y' => 'Gastat {amount} de {total}', + 'wait_loading_transaction' => 'Per favor, espera que carregui el formulari', + 'wait_loading_data' => 'Per favor, espera que carregui la teva informació...', + 'wait_attachments' => 'Per favor, espera que els adjunts es carreguin.', + 'errors_upload' => 'La pujada ha fallat. Per favor comprova la consola del teu navegador per a l\'error.', + 'amount_foreign_if' => 'Quantitat en la moneda estrangera, si aplica', + 'amount_destination_account' => 'Quantitat en la moneda del compte de destí', + 'edit_transaction_title' => 'Editar transacció ":description"', + 'unreconcile' => 'Desfés la reconciliació', + 'update_withdrawal' => 'Actualitzar retirada', + 'update_deposit' => 'Actualitzar ingrés', + 'update_transaction' => 'Actualitzar transacció', + 'update_transfer' => 'Actualitzar transferència', + 'updated_withdrawal' => 'S\'ha actualitzat la retirada ":description"', + 'updated_deposit' => 'S\'ha actualitzat l\'ingrés ":description"', + 'updated_transfer' => 'S\'ha actualitzat la transferència ":description"', + 'no_changes_withdrawal' => 'La retirada ":description" no s\'ha canviat.', + 'no_changes_deposit' => 'L\'ingrès ":description" no s\'ha canviat.', + 'no_changes_transfer' => 'La transferència ":description" no s\'ha canviat.', + 'delete_withdrawal' => 'Elimina la retirada ":description"', + 'delete_deposit' => 'Elimina l\'ingrès ":description"', + 'delete_transfer' => 'Elimina la transferència ":description"', + 'deleted_withdrawal' => 'S\'ha eliminat la retirada ":description" satisfactòriament', + 'deleted_deposit' => 'S\'ha eliminat l\'ingrès ":description" satisfactòriament', + 'deleted_transfer' => 'S\'ha eliminat la transferència ":description" satisfactòriament', + 'deleted_reconciliation' => 'S\'ha eliminat la transacció de consolidació ":description" satisfactòriament', + 'stored_journal' => 'S\'ha creat la retirada ":description" satisfactòriament', + 'stored_journal_js' => 'S\'ha creat la transacció "%{description}" correctament', + 'stored_journal_no_descr' => 'S\'ha creat la teua nova transacció satisfactòriament', + 'updated_journal_no_descr' => 'S\'ha actualitzat la teua transacció satisfactòriament', + 'select_transactions' => 'Selecciona transaccions', + 'rule_group_select_transactions' => 'Aplica ":title" a totes les transaccions', + 'rule_select_transactions' => 'Aplica ":title" a totes les transaccions', + 'stop_selection' => 'Para de seleccionar transaccions', + 'reconcile_selected' => 'Consolidar', + 'mass_delete_journals' => 'Elimina un nombre de transaccions', + 'mass_edit_journals' => 'Edita un nombre de transaccions', + 'mass_bulk_journals' => 'Edita en grup un nombre de transaccions', + 'mass_bulk_journals_explain' => 'Aquest formulari et permet canviar propietats de les transaccions següents en una mateixa actualització. Totes les transaccions de la taula seran actualitzades quan canvies els paràmetres mostrats ací.', + 'part_of_split' => 'Aquesta transacció forma part d\'una transacció dividida. Si no has seleccionat totes les divisions, pot ser que modifiques només algunes transaccions.', + 'bulk_set_new_values' => 'Utilitza les entrades següents per a establir nous valors. Si les deixes en blanc, es desaran en blanc per a tots. Tingues en compte que només les retirades seran assignades a un pressupost.', + 'no_bulk_category' => 'No actualitzes la categoria', + 'no_bulk_budget' => 'No actualitzes el pressupost', + 'no_bulk_tags' => 'No actualitzes la/les etiquetes', + 'replace_with_these_tags' => 'Reemplaça amb les següents etiquetes', + 'append_these_tags' => 'Afegeix aquestes etiquetes', + 'mass_edit' => 'Edita la selecció individualment', + 'bulk_edit' => 'Edita la selecció en grup', + 'mass_delete' => 'Elimina la selecció', + 'cannot_edit_other_fields' => 'No pots editar altres camps diferents als llistats, perquè no hi ha espai per a mostrar-los. Per favor, segueix l\'enllaç i edita-les una per una, si vols editar aquests camps.', + 'cannot_change_amount_reconciled' => 'No pots canviar la quantitat de transaccions consolidades.', + 'no_budget' => '(cap pressupost)', + 'no_bill' => '(cap factura)', + 'account_per_budget' => 'Compte per pressupost', + 'account_per_category' => 'Compte per categoria', + 'create_new_object' => 'Crear', + 'empty' => '(buit)', + 'all_other_budgets' => '(tots els pressupostos)', + 'all_other_accounts' => '(tots els comptes)', + 'expense_per_source_account' => 'Despeses per compte d\'origen', + 'expense_per_destination_account' => 'Despeses per compte de destinació', + 'income_per_destination_account' => 'Ingressos per compte de destinació', + 'spent_in_specific_category' => 'Gastat a la categoria ":category"', + 'earned_in_specific_category' => 'Guanyat a la categoria ":category"', + 'spent_in_specific_tag' => 'Gastat a l\'etiqueta ":tag"', + 'earned_in_specific_tag' => 'Guanyat a l\'etiqueta ":tag"', + 'income_per_source_account' => 'Ingressos per compte d\'origen', + 'average_spending_per_destination' => 'Despeses mitjanes per compte de destí', + 'average_spending_per_source' => 'Despeses mitjanes per compte d\'origen', + 'average_earning_per_source' => 'Benefici mitjà per compte d\'origen', + 'average_earning_per_destination' => 'Benefici mitjà per compte de destí', + 'account_per_tag' => 'Compte per etiqueta', + 'tag_report_expenses_listed_once' => 'Les despeses i ingressos mai es mostren dues vegades. Si una transacció té varies etiquetes, pot ser sols es mostre en una d\'elles. Pot semblar que falten dades a aquesta llista, però les quantitats seran correctes.', + 'double_report_expenses_charted_once' => 'Les despeses i ingressos mai es llisten dues vegades. Si una transacció té varies etiquetes, pot ser sols es mostre en una d\'elles. Pot semblar que falten dades a aquesta gràfica, però les quantitats seran correctes.', + 'tag_report_chart_single_tag' => 'Aquesta gràfica s\'aplica a una única etiqueta. Si una transacció en té diverses, el que veuràs ací pot estar reflectit a les gràfiques d\'altres etiquetes també.', + 'tag' => 'Etiqueta', + 'no_budget_squared' => '(cap pressupost)', + 'perm-delete-many' => 'Eliminar molts elements a la vegada pot causar problemes. Per favor, ves amb cura. Pots eliminar una part d\'una transacció dividida des d\'aquesta pàgina, així que ves amb compte.', + 'mass_deleted_transactions_success' => 'S\'ha eliminat :count transacció.|S\'han eliminat :count transaccions.', + 'mass_edited_transactions_success' => 'S\'ha actualitzat :count transacció.|S\'han actualitzat :count transaccions.', + 'opt_group_' => '(cap tipus de compte)', + 'opt_group_no_account_type' => '(cap tipus de compte)', + 'opt_group_defaultAsset' => 'Comptes d\'actius per defecte', + 'opt_group_savingAsset' => 'Comptes d\'estalvis', + 'opt_group_sharedAsset' => 'Comptes d\'actius per defecte', + 'opt_group_ccAsset' => 'Targetes de crèdit', + 'opt_group_cashWalletAsset' => 'Carteres d\'efectiu', + 'opt_group_expense_account' => 'Comptes de despeses', + 'opt_group_revenue_account' => 'Comptes d\'ingressos', + 'opt_group_l_Loan' => 'Passiu: prèstec', + 'opt_group_cash_account' => 'Compte d\'efectiu', + 'opt_group_l_Debt' => 'Passiu: Deute', + 'opt_group_l_Mortgage' => 'Passiu: Hipoteca', + 'opt_group_l_Credit card' => 'Passiu: Targeta de crèdit', + 'notes' => 'Notes', + 'unknown_journal_error' => 'No s\'ha pogut desar la transacció. Per favor, revisa els arxius de registre.', + 'attachment_not_found' => 'No s\'ha trobat aquest adjunt.', + 'journal_link_bill' => 'Aquesta transacció està enllaçada a la factura :name. Per a eliminar la connexió, desmarca la casella. Utilitza regles per a connectar-la a una altra factura.', + 'transaction_stored_link' => 'La Transacció #{ID} ("{title}") s\'ha desat.', + 'transaction_new_stored_link' => 'La Transacció #{ID} s\'ha desat.', + 'transaction_updated_link' => 'La transacció#{ID} ("{title}") s\'ha actualitzat.', + 'transaction_updated_no_changes' => 'La Transacció #{ID} ("{title}") no ha sigut modificada.', + 'first_split_decides' => 'La primera divisió determina el valor d\'aquest camp', + 'first_split_overrules_source' => 'La primera divisió pot sobreescriure el compte d\'origen', + 'first_split_overrules_destination' => 'La primera divisió pot sobreescriure el compte de destinació', + 'spent_x_of_y' => 'Gastat {amount} de {total}', // new user: - 'welcome' => 'Benvingut a Firefly III!', - 'submit' => 'Enviar', - 'submission' => 'Enviament', - 'submit_yes_really' => 'Envia (sé el que estic fent)', - 'getting_started' => 'Començant', - 'to_get_started' => 'Ens alegrem de veure que has instal·lat Firefly III. Per a començar amb aquesta eine, per favor, introdueix el nom del teu banc, i el saldo del teu compte principal. No et preocupes si tens diversos comptes, els pots afegir més tard. Firefly III necessita alguna cosa amb la que començar.', - 'savings_balance_text' => 'Firefly III crearà un compte d\'estalvis automàticament per a tu. Per defecte no hi hauran diners en aquest compte, però si li ho ordenes, Firefly III desarà el saldo d\'aquest compte com a tal.', - 'finish_up_new_user' => 'Ja està! Per a continuar prem Envia. Seràs redirigit a la pàgina d\'inici de Firefly III.', - 'stored_new_accounts_new_user' => 'Visca! S\'han desat els teus nous comptes.', - 'set_preferred_language' => 'Si prefereixes fer servir Firefly III en un altre idioma, ho pots canviar ací.', - 'language' => 'Idioma', - 'new_savings_account' => 'Compte d\'estalvis de :bank_name', - 'cash_wallet' => 'Cartera d\'efectiu', - 'currency_not_present' => 'Si la moneda que fas servir normalment no ix a la llista, no et preocupes, pots crear la teua pròpia en Opcions > Monedes.', + 'welcome' => 'Benvingut a Firefly III!', + 'submit' => 'Enviar', + 'submission' => 'Enviament', + 'submit_yes_really' => 'Envia (sé el que estic fent)', + 'getting_started' => 'Començant', + 'to_get_started' => 'Ens alegrem de veure que has instal·lat Firefly III. Per a començar amb aquesta eine, per favor, introdueix el nom del teu banc, i el saldo del teu compte principal. No et preocupes si tens diversos comptes, els pots afegir més tard. Firefly III necessita alguna cosa amb la que començar.', + 'savings_balance_text' => 'Firefly III crearà un compte d\'estalvis automàticament per a tu. Per defecte no hi hauran diners en aquest compte, però si li ho ordenes, Firefly III desarà el saldo d\'aquest compte com a tal.', + 'finish_up_new_user' => 'Ja està! Per a continuar prem Envia. Seràs redirigit a la pàgina d\'inici de Firefly III.', + 'stored_new_accounts_new_user' => 'Visca! S\'han desat els teus nous comptes.', + 'set_preferred_language' => 'Si prefereixes fer servir Firefly III en un altre idioma, ho pots canviar ací.', + 'language' => 'Idioma', + 'new_savings_account' => 'Compte d\'estalvis de :bank_name', + 'cash_wallet' => 'Cartera d\'efectiu', + 'currency_not_present' => 'Si la moneda que fas servir normalment no ix a la llista, no et preocupes, pots crear la teua pròpia en Opcions > Monedes.', // home page: - 'transaction_table_description' => 'Una taula amb les teues transaccions', - 'opposing_account' => 'Compte oposat', - 'yourAccounts' => 'Els teus comptes', - 'your_accounts' => 'Visió general del teu compte', - 'category_overview' => 'Visió general de Categoria', - 'expense_overview' => 'Visió general del compte de despeses', - 'revenue_overview' => 'Visió general del compte d\'ingressos', - 'budgetsAndSpending' => 'Pressupostos i despeses', - 'budgets_and_spending' => 'Pressupostos i despeses', - 'go_to_budget' => 'Ves al pressupost "{budget}"', - 'go_to_deposits' => 'Ves a ingressos', - 'go_to_expenses' => 'Ves a despeses', - 'savings' => 'Estalvis', - 'newWithdrawal' => 'Nova despesa', - 'newDeposit' => 'Nou dipòsit', - 'newTransfer' => 'Nova transferència', - 'bills_to_pay' => 'Factures a pagar', - 'per_day' => 'Per dia', - 'left_to_spend_per_day' => 'Resta per a gastar per dia', - 'bills_paid' => 'Factures pagades', - 'custom_period' => 'Període personalitzat', - 'reset_to_current' => 'Reinicia al període actual', - 'select_period' => 'Seleccionar període', + 'transaction_table_description' => 'Una taula amb les teues transaccions', + 'opposing_account' => 'Compte oposat', + 'yourAccounts' => 'Els teus comptes', + 'your_accounts' => 'Visió general del teu compte', + 'category_overview' => 'Visió general de Categoria', + 'expense_overview' => 'Visió general del compte de despeses', + 'revenue_overview' => 'Visió general del compte d\'ingressos', + 'budgetsAndSpending' => 'Pressupostos i despeses', + 'budgets_and_spending' => 'Pressupostos i despeses', + 'go_to_budget' => 'Ves al pressupost "{budget}"', + 'go_to_deposits' => 'Ves a ingressos', + 'go_to_expenses' => 'Ves a despeses', + 'savings' => 'Estalvis', + 'newWithdrawal' => 'Nova despesa', + 'newDeposit' => 'Nou dipòsit', + 'newTransfer' => 'Nova transferència', + 'bills_to_pay' => 'Factures a pagar', + 'per_day' => 'Per dia', + 'left_to_spend_per_day' => 'Resta per a gastar per dia', + 'bills_paid' => 'Factures pagades', + 'custom_period' => 'Període personalitzat', + 'reset_to_current' => 'Reinicia al període actual', + 'select_period' => 'Seleccionar període', // menu and titles, should be recycled as often as possible: - 'currency' => 'Moneda', - 'preferences' => 'Configuració', - 'logout' => 'Tanca la sessió', - 'logout_other_sessions' => 'Tanca les altres sessions', - 'toggleNavigation' => 'Alternar navegació', - 'searchPlaceholder' => 'Cerca...', - 'version' => 'Versió', - 'dashboard' => 'Panell de control', - 'income_and_expense' => 'Ingressos i despeses', - 'all_money' => 'Tots els teus diners', - 'unknown_source_plain' => 'Compte font desconegut', - 'unknown_dest_plain' => 'Compte de destí desconegut', - 'unknown_any_plain' => 'Compte desconegut', - 'unknown_budget_plain' => 'Cap pressupost', - 'available_budget' => 'Pressupost disponible ({currency})', - 'currencies' => 'Monedes', - 'activity' => 'Activitat (exercici)', - 'usage' => 'Ús', - 'accounts' => 'Comptes', - 'Asset account' => 'Compte d\'actius', - 'Default account' => 'Compte d\'actius', - 'Expense account' => 'Compte de despeses', - 'Revenue account' => 'Compte de beneficis', - 'Initial balance account' => 'Compte de balanç inicial', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Deute', - 'account_type_Loan' => 'Crèdit', - 'account_type_Mortgage' => 'Hipoteca', - 'account_type_debt' => 'Deute', - 'account_type_loan' => 'Crèdit', - 'account_type_mortgage' => 'Hipoteca', - 'account_type_Credit card' => 'Targeta de crèdit', - 'credit_card_type_monthlyFull' => 'Pagament complet tots els mesos', - 'liability_direction_credit' => 'Se\'m deu aquest deute', - 'liability_direction_debit' => 'Dec aquest deute a una altra persona', - 'liability_direction_credit_short' => 'Se\'m deu', - 'liability_direction_debit_short' => 'Ho dec', - 'liability_direction__short' => 'Desconegut', - 'liability_direction_null_short' => 'Desconegut', - 'Liability credit' => 'Crèdit de passius', - 'budgets' => 'Pressupostos', - 'tags' => 'Etiquetes', - 'reports' => 'Informes', - 'transactions' => 'Transaccions', - 'expenses' => 'Despeses', - 'income' => 'Beneficis / ingressos', - 'transfers' => 'Transferències', - 'moneyManagement' => 'Gestió dels diners', - 'money_management' => 'Gestió dels diners', - 'tools' => 'Eines', - 'piggyBanks' => 'Guardioles', - 'piggy_banks' => 'Guardioles', - 'amount_x_of_y' => '{current} de {total}', - 'bills' => 'Factures', - 'withdrawal' => 'Retirada', - 'opening_balance' => 'Saldo inicial', - 'deposit' => 'Ingrés', - 'account' => 'Compte', - 'transfer' => 'Transferència', - 'Withdrawal' => 'Retirada', - 'Deposit' => 'Ingrés', - 'Transfer' => 'Transferència', - 'bill' => 'Factura', - 'yes' => 'Sí', - 'no' => 'No', - 'amount' => 'Import', - 'overview' => 'Visió general', - 'saveOnAccount' => 'Desa al compte', - 'unknown' => 'Desconegut', - 'monthly' => 'Mensualment', - 'profile' => 'Perfil', - 'errors' => 'Errors', - 'debt_start_date' => 'Data d\'inici del deute', - 'debt_start_amount' => 'Quantitat d\'inici del deute', - 'debt_start_amount_help' => 'Sempre és millor establir aquest valor a una quantitat negativa. Revisa les pàgines d\'ajuda (la icona (?) de dalt a la dreta) per a més informació.', - 'interest_period_help' => 'Aquest camp és simplement cosmètic, i no serà calculat. Resulta que els banc són bastant exquisits, i Firefly III mai obté els valors correctament.', - 'store_new_liabilities_account' => 'Desa el nou passiu', - 'edit_liabilities_account' => 'Edita el passiu ":name"', - 'financial_control' => 'Control financer', - 'accounting' => 'Comptes', - 'automation' => 'Automatització', - 'others' => 'Altres', - 'classification' => 'Classificació', - 'store_transaction' => 'Desar transacció', + 'currency' => 'Moneda', + 'preferences' => 'Configuració', + 'logout' => 'Tanca la sessió', + 'logout_other_sessions' => 'Tanca les altres sessions', + 'toggleNavigation' => 'Alternar navegació', + 'searchPlaceholder' => 'Cerca...', + 'version' => 'Versió', + 'dashboard' => 'Panell de control', + 'income_and_expense' => 'Ingressos i despeses', + 'all_money' => 'Tots els teus diners', + 'unknown_source_plain' => 'Compte font desconegut', + 'unknown_dest_plain' => 'Compte de destí desconegut', + 'unknown_any_plain' => 'Compte desconegut', + 'unknown_budget_plain' => 'Cap pressupost', + 'available_budget' => 'Pressupost disponible ({currency})', + 'currencies' => 'Monedes', + 'activity' => 'Activitat (exercici)', + 'usage' => 'Ús', + 'accounts' => 'Comptes', + 'Asset account' => 'Compte d\'actius', + 'Default account' => 'Compte d\'actius', + 'Expense account' => 'Compte de despeses', + 'Revenue account' => 'Compte de beneficis', + 'Initial balance account' => 'Compte de balanç inicial', + 'account_type_Asset account' => 'Compte d\'actius', + 'account_type_Expense account' => 'Compte de despeses', + 'account_type_Revenue account' => 'Compte d\'ingressos', + 'account_type_Debt' => 'Deute', + 'account_type_Loan' => 'Crèdit', + 'account_type_Mortgage' => 'Hipoteca', + 'account_type_debt' => 'Deute', + 'account_type_loan' => 'Crèdit', + 'account_type_mortgage' => 'Hipoteca', + 'account_type_Credit card' => 'Targeta de crèdit', + 'credit_card_type_monthlyFull' => 'Pagament complet tots els mesos', + 'liability_direction_credit' => 'Se\'m deu aquest deute', + 'liability_direction_debit' => 'Dec aquest deute a una altra persona', + 'liability_direction_credit_short' => 'Se\'m deu', + 'liability_direction_debit_short' => 'Ho dec', + 'liability_direction__short' => 'Desconegut', + 'liability_direction_null_short' => 'Desconegut', + 'Liability credit' => 'Crèdit de passius', + 'budgets' => 'Pressupostos', + 'tags' => 'Etiquetes', + 'reports' => 'Informes', + 'transactions' => 'Transaccions', + 'expenses' => 'Despeses', + 'income' => 'Beneficis / ingressos', + 'transfers' => 'Transferències', + 'moneyManagement' => 'Gestió dels diners', + 'money_management' => 'Gestió dels diners', + 'tools' => 'Eines', + 'piggyBanks' => 'Guardioles', + 'piggy_banks' => 'Guardioles', + 'amount_x_of_y' => '{current} de {total}', + 'bills' => 'Factures', + 'withdrawal' => 'Retirada', + 'opening_balance' => 'Saldo inicial', + 'deposit' => 'Ingrés', + 'account' => 'Compte', + 'transfer' => 'Transferència', + 'Withdrawal' => 'Retirada', + 'Deposit' => 'Ingrés', + 'Transfer' => 'Transferència', + 'bill' => 'Factura', + 'yes' => 'Sí', + 'no' => 'No', + 'amount' => 'Import', + 'overview' => 'Visió general', + 'saveOnAccount' => 'Desa al compte', + 'unknown' => 'Desconegut', + 'monthly' => 'Mensualment', + 'profile' => 'Perfil', + 'errors' => 'Errors', + 'debt_start_date' => 'Data d\'inici del deute', + 'debt_start_amount' => 'Quantitat d\'inici del deute', + 'debt_start_amount_help' => 'Sempre és millor establir aquest valor a una quantitat negativa. Revisa les pàgines d\'ajuda (la icona (?) de dalt a la dreta) per a més informació.', + 'interest_period_help' => 'Aquest camp és simplement cosmètic, i no serà calculat. Resulta que els banc són bastant exquisits, i Firefly III mai obté els valors correctament.', + 'store_new_liabilities_account' => 'Desa el nou passiu', + 'edit_liabilities_account' => 'Edita el passiu ":name"', + 'financial_control' => 'Control financer', + 'accounting' => 'Comptes', + 'automation' => 'Automatització', + 'others' => 'Altres', + 'classification' => 'Classificació', + 'store_transaction' => 'Desar transacció', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Informe financer per defecte entre :start i :end', - 'report_audit' => 'Visió general de l\'historial de transaccions entre :start i :end', - 'report_category' => 'Informe de categories entre :start i :end', - 'report_double' => 'Informe de comptes de despeses/beneficis entre :start i :end', - 'report_budget' => 'Informe de pressupost entre :start i :end', - 'report_tag' => 'Informe d\'etiquetes entre :start i :end', - 'quick_link_reports' => 'Enllaços ràpids', - 'quick_link_examples' => 'Aquests són alguns enllaços d\'exemple per a ajudar-te a començar. Llegeix les pàgines d\'ajuda en la icona (?) per a informació sobre tots els informes i les paraules màgiques que pots fer servir.', - 'quick_link_default_report' => 'Informe financer per defecte', - 'quick_link_audit_report' => 'Visió general de l\'historial de transaccions', - 'report_this_month_quick' => 'Mes actual, tots els comptes', - 'report_last_month_quick' => 'Últim mes, tots els comptes', - 'report_this_year_quick' => 'Any actual, tots els comptes', - 'report_this_fiscal_year_quick' => 'Any fiscal actual, tots els comptes', - 'report_all_time_quick' => 'Des de sempre, tots els comptes', - 'reports_can_bookmark' => 'Recorda que els informes poden ser marcats.', - 'incomeVsExpenses' => 'Ingressos vs. despeses', - 'accountBalances' => 'Saldo del compte', - 'balanceStart' => 'Saldo a l\'inici del període', - 'balanceEnd' => 'Saldo al final del període', - 'splitByAccount' => 'Divideix per compte', - 'coveredWithTags' => 'Cobert per etiquetes', - 'leftInBudget' => 'Restant al pressupost', - 'left_in_debt' => 'Import pendent', - 'sumOfSums' => 'Suma de sumes', - 'noCategory' => '(cap categoria)', - 'notCharged' => 'No cobrat (encara)', - 'inactive' => 'Inactiu', - 'active' => 'Actiu', - 'difference' => 'Diferència', - 'money_flowing_in' => 'Entrant', - 'money_flowing_out' => 'Eixint', - 'topX' => ':number primers', - 'show_full_list' => 'Mostra la llista sencera', - 'show_only_top' => 'Mostra sols els millors :number', - 'report_type' => 'Tipus d\'informe', - 'report_type_default' => 'Informe financer per defecte', - 'report_type_audit' => 'Visió general de l\'historial de transaccions (auditoria)', - 'report_type_category' => 'Informe de categoria', - 'report_type_budget' => 'Informe de pressupost', - 'report_type_tag' => 'Informe d\'etiqueta', - 'report_type_double' => 'Informe del compte de despeses/guanys', - 'more_info_help' => 'Pots trobar més informació sobre aquests tipus d\'informe a les pàgines d\'ajuda. Prem la icona (?) a la part superior dreta.', - 'report_included_accounts' => 'Comptes inclosos', - 'report_date_range' => 'Interval de dates', - 'report_preset_ranges' => 'Intervals predefinits', - 'shared' => 'Compartit', - 'fiscal_year' => 'Any fiscal', - 'income_entry' => 'Els ingressos del compte ":name" entre el :start i :end', - 'expense_entry' => 'Les despeses al compte ":name" entre el :start i :end', - 'category_entry' => 'Despeses i ingressos de la categoria ":name" entre el :start i :end', - 'budget_spent_amount' => 'Despeses al pressupost ":budget" entre :start i :end', - 'balance_amount' => 'Despeses al pressupost ":budget" pagats des del compte ":account" entre el :start i :end', - 'no_audit_activity' => 'No s\'ha desat cap activitat al compte :account_name entre el :start i :end.', - 'audit_end_balance' => 'Saldo del compte :account_name al final de :end va ser :balance', - 'reports_extra_options' => 'Opcions extra', - 'report_has_no_extra_options' => 'Aquest informe no té més opcions', - 'reports_submit' => 'Veure informe', - 'end_after_start_date' => 'La data final de l\'informe ha de ser després de la d\'inici.', - 'select_category' => 'Escull categories', - 'select_budget' => 'Escull pressupostos.', - 'select_tag' => 'Escull etiquetes.', - 'income_per_category' => 'Ingressos per categoria', - 'expense_per_category' => 'Despeses per categoria', - 'expense_per_budget' => 'Gastat per pressupost', - 'income_per_account' => 'Ingressos per compte', - 'expense_per_account' => 'Despeses per compte', - 'expense_per_tag' => 'Depeses per compte', - 'income_per_tag' => 'Ingressos per compte', - 'include_expense_not_in_budget' => 'Les despeses incloses no hi són al pressupost(os) seleccionats', - 'include_expense_not_in_account' => 'Les despeses seleccionades no estan als comptes seleccionats', - 'include_expense_not_in_category' => 'Les depeses incloses no estan a les categories seleccionades', - 'include_income_not_in_category' => 'Els ingressos seleccionats no estan a les categories seleccionades', - 'include_income_not_in_account' => 'Els ingressos seleccionats no estan a les categories seleccionades', - 'include_income_not_in_tags' => 'Els ingressos seleccionats no estan a les etiquetes seleccionades', - 'include_expense_not_in_tags' => 'Les despeses seleccionades no estan a les etiquetes seleccionades', - 'everything_else' => 'Tota la resta', - 'income_and_expenses' => 'Ingressos i despeses', - 'spent_average' => 'Gastat (mitjana)', - 'income_average' => 'Ingressat (mitjana)', - 'transaction_count' => 'Nombre de transaccions', - 'average_spending_per_account' => 'Despesa mitjana per compte', - 'average_income_per_account' => 'Ingrés mitjà per compte', - 'total' => 'Total', - 'description' => 'Descripció', - 'sum_of_period' => 'Suma del període', - 'average_in_period' => 'Mitjana al període', - 'account_role_defaultAsset' => 'Compte d\'actius per defecte', - 'account_role_sharedAsset' => 'Compte d\'actius compartit', - 'account_role_savingAsset' => 'Compte d\'estalvis', - 'account_role_ccAsset' => 'Targeta de crèdit', - 'account_role_cashWalletAsset' => 'Cartera d\'efectiu', - 'budget_chart_click' => 'Per favor, fes clic al nom del pressupost a la taula superior per a veure una gràfica.', - 'category_chart_click' => 'Per favor, fes clic al nom de la categoria a la taula superior per a veure una gràfica.', - 'in_out_accounts' => 'Guanyat i gastat per combinació', - 'in_out_accounts_per_asset' => 'Guanyat i gastat (per compte d\'actius)', - 'in_out_per_category' => 'Guanyat i gastat per categoria', - 'out_per_budget' => 'Gastat per pressupost', - 'select_expense_revenue' => 'Selecciona el compte de despeses/beneficis', - 'multi_currency_report_sum' => 'Com que aquesta llista conté comptes amb monedes diferents, la/les sumes poden no tenir sentit. El report sempre es mostrarà en la moneda per defecte.', - 'sum_in_default_currency' => 'La suma sempre estarà en la teua moneda per defecte.', - 'net_filtered_prefs' => 'Aquesta gràfica mai inclourà comptes que tenen la casella "Inclou al valor net" desmarcada.', + 'report_default' => 'Informe financer per defecte entre :start i :end', + 'report_audit' => 'Visió general de l\'historial de transaccions entre :start i :end', + 'report_category' => 'Informe de categories entre :start i :end', + 'report_double' => 'Informe de comptes de despeses/beneficis entre :start i :end', + 'report_budget' => 'Informe de pressupost entre :start i :end', + 'report_tag' => 'Informe d\'etiquetes entre :start i :end', + 'quick_link_reports' => 'Enllaços ràpids', + 'quick_link_examples' => 'Aquests són alguns enllaços d\'exemple per a ajudar-te a començar. Llegeix les pàgines d\'ajuda en la icona (?) per a informació sobre tots els informes i les paraules màgiques que pots fer servir.', + 'quick_link_default_report' => 'Informe financer per defecte', + 'quick_link_audit_report' => 'Visió general de l\'historial de transaccions', + 'report_this_month_quick' => 'Mes actual, tots els comptes', + 'report_last_month_quick' => 'Últim mes, tots els comptes', + 'report_this_year_quick' => 'Any actual, tots els comptes', + 'report_this_fiscal_year_quick' => 'Any fiscal actual, tots els comptes', + 'report_all_time_quick' => 'Des de sempre, tots els comptes', + 'reports_can_bookmark' => 'Recorda que els informes poden ser marcats.', + 'incomeVsExpenses' => 'Ingressos vs. despeses', + 'accountBalances' => 'Saldo del compte', + 'balanceStart' => 'Saldo a l\'inici del període', + 'balanceEnd' => 'Saldo al final del període', + 'splitByAccount' => 'Divideix per compte', + 'coveredWithTags' => 'Cobert per etiquetes', + 'leftInBudget' => 'Restant al pressupost', + 'left_in_debt' => 'Import pendent', + 'sumOfSums' => 'Suma de sumes', + 'noCategory' => '(cap categoria)', + 'notCharged' => 'No cobrat (encara)', + 'inactive' => 'Inactiu', + 'active' => 'Actiu', + 'difference' => 'Diferència', + 'money_flowing_in' => 'Entrant', + 'money_flowing_out' => 'Eixint', + 'topX' => ':number primers', + 'show_full_list' => 'Mostra la llista sencera', + 'show_only_top' => 'Mostra sols els millors :number', + 'report_type' => 'Tipus d\'informe', + 'report_type_default' => 'Informe financer per defecte', + 'report_type_audit' => 'Visió general de l\'historial de transaccions (auditoria)', + 'report_type_category' => 'Informe de categoria', + 'report_type_budget' => 'Informe de pressupost', + 'report_type_tag' => 'Informe d\'etiqueta', + 'report_type_double' => 'Informe del compte de despeses/guanys', + 'more_info_help' => 'Pots trobar més informació sobre aquests tipus d\'informe a les pàgines d\'ajuda. Prem la icona (?) a la part superior dreta.', + 'report_included_accounts' => 'Comptes inclosos', + 'report_date_range' => 'Interval de dates', + 'report_preset_ranges' => 'Intervals predefinits', + 'shared' => 'Compartit', + 'fiscal_year' => 'Any fiscal', + 'income_entry' => 'Els ingressos del compte ":name" entre el :start i :end', + 'expense_entry' => 'Les despeses al compte ":name" entre el :start i :end', + 'category_entry' => 'Despeses i ingressos de la categoria ":name" entre el :start i :end', + 'budget_spent_amount' => 'Despeses al pressupost ":budget" entre :start i :end', + 'balance_amount' => 'Despeses al pressupost ":budget" pagats des del compte ":account" entre el :start i :end', + 'no_audit_activity' => 'No s\'ha desat cap activitat al compte :account_name entre el :start i :end.', + 'audit_end_balance' => 'Saldo del compte :account_name al final de :end va ser :balance', + 'reports_extra_options' => 'Opcions extra', + 'report_has_no_extra_options' => 'Aquest informe no té més opcions', + 'reports_submit' => 'Veure informe', + 'end_after_start_date' => 'La data final de l\'informe ha de ser després de la d\'inici.', + 'select_category' => 'Escull categories', + 'select_budget' => 'Escull pressupostos.', + 'select_tag' => 'Escull etiquetes.', + 'income_per_category' => 'Ingressos per categoria', + 'expense_per_category' => 'Despeses per categoria', + 'expense_per_budget' => 'Gastat per pressupost', + 'income_per_account' => 'Ingressos per compte', + 'expense_per_account' => 'Despeses per compte', + 'expense_per_tag' => 'Depeses per compte', + 'income_per_tag' => 'Ingressos per compte', + 'include_expense_not_in_budget' => 'Les despeses incloses no hi són al pressupost(os) seleccionats', + 'include_expense_not_in_account' => 'Les despeses seleccionades no estan als comptes seleccionats', + 'include_expense_not_in_category' => 'Les depeses incloses no estan a les categories seleccionades', + 'include_income_not_in_category' => 'Els ingressos seleccionats no estan a les categories seleccionades', + 'include_income_not_in_account' => 'Els ingressos seleccionats no estan a les categories seleccionades', + 'include_income_not_in_tags' => 'Els ingressos seleccionats no estan a les etiquetes seleccionades', + 'include_expense_not_in_tags' => 'Les despeses seleccionades no estan a les etiquetes seleccionades', + 'everything_else' => 'Tota la resta', + 'income_and_expenses' => 'Ingressos i despeses', + 'spent_average' => 'Gastat (mitjana)', + 'income_average' => 'Ingressat (mitjana)', + 'transaction_count' => 'Nombre de transaccions', + 'average_spending_per_account' => 'Despesa mitjana per compte', + 'average_income_per_account' => 'Ingrés mitjà per compte', + 'total' => 'Total', + 'description' => 'Descripció', + 'sum_of_period' => 'Suma del període', + 'average_in_period' => 'Mitjana al període', + 'account_role_defaultAsset' => 'Compte d\'actius per defecte', + 'account_role_sharedAsset' => 'Compte d\'actius compartit', + 'account_role_savingAsset' => 'Compte d\'estalvis', + 'account_role_ccAsset' => 'Targeta de crèdit', + 'account_role_cashWalletAsset' => 'Cartera d\'efectiu', + 'budget_chart_click' => 'Per favor, fes clic al nom del pressupost a la taula superior per a veure una gràfica.', + 'category_chart_click' => 'Per favor, fes clic al nom de la categoria a la taula superior per a veure una gràfica.', + 'in_out_accounts' => 'Guanyat i gastat per combinació', + 'in_out_accounts_per_asset' => 'Guanyat i gastat (per compte d\'actius)', + 'in_out_per_category' => 'Guanyat i gastat per categoria', + 'out_per_budget' => 'Gastat per pressupost', + 'select_expense_revenue' => 'Selecciona el compte de despeses/beneficis', + 'multi_currency_report_sum' => 'Com que aquesta llista conté comptes amb monedes diferents, la/les sumes poden no tenir sentit. El report sempre es mostrarà en la moneda per defecte.', + 'sum_in_default_currency' => 'La suma sempre estarà en la teua moneda per defecte.', + 'net_filtered_prefs' => 'Aquesta gràfica mai inclourà comptes que tenen la casella "Inclou al valor net" desmarcada.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Gràfica', - 'month' => 'Mes', - 'budget' => 'Pressupost', - 'spent' => 'Gastat', - 'spent_capped' => 'Gastat (capat)', - 'spent_in_budget' => 'Gastat al pressupost', - 'left_to_spend' => 'Queda per gastar', - 'earned' => 'Guanyat', - 'overspent' => 'Gastat de més', - 'left' => 'Queda', - 'max-amount' => 'Import màxim', - 'min-amount' => 'Import mínim', - 'journal-amount' => 'Entrada de la factura actual', - 'name' => 'Nom', - 'date' => 'Data', - 'date_and_time' => 'Hora i data', - 'time' => 'Hora', - 'paid' => 'Pagat', - 'unpaid' => 'Pendent de pagament', - 'day' => 'Dia', - 'budgeted' => 'Pressupostat', - 'period' => 'Període', - 'balance' => 'Saldo', - 'in_out_period' => 'Entrades + Sortides aquest període', - 'sum' => 'Suma', - 'summary' => 'Resum', - 'average' => 'Mitjana', - 'balanceFor' => 'Saldo per a :name', - 'no_tags' => '(cap etiqueta)', + 'chart' => 'Gràfica', + 'month' => 'Mes', + 'budget' => 'Pressupost', + 'spent' => 'Gastat', + 'spent_capped' => 'Gastat (capat)', + 'spent_in_budget' => 'Gastat al pressupost', + 'left_to_spend' => 'Queda per gastar', + 'earned' => 'Guanyat', + 'overspent' => 'Gastat de més', + 'left' => 'Queda', + 'max-amount' => 'Import màxim', + 'min-amount' => 'Import mínim', + 'journal-amount' => 'Entrada de la factura actual', + 'name' => 'Nom', + 'date' => 'Data', + 'date_and_time' => 'Hora i data', + 'time' => 'Hora', + 'paid' => 'Pagat', + 'unpaid' => 'Pendent de pagament', + 'day' => 'Dia', + 'budgeted' => 'Pressupostat', + 'period' => 'Període', + 'balance' => 'Saldo', + 'in_out_period' => 'Entrades + Sortides aquest període', + 'sum' => 'Suma', + 'summary' => 'Resum', + 'average' => 'Mitjana', + 'balanceFor' => 'Saldo per a :name', + 'no_tags' => '(cap etiqueta)', + 'nothing_found' => '(no s\'ha trobat res)', // piggy banks: - 'event_history' => 'Historial d\'esdeveniments', - 'add_money_to_piggy' => 'Afegeix diners a la guardiola ":name"', - 'piggy_bank' => 'Guardiola', - 'new_piggy_bank' => 'Guardiola nova', - 'store_piggy_bank' => 'Desa una nova guardiola', - 'stored_piggy_bank' => 'Desa la nova guardiola ":name"', - 'account_status' => 'Estat del compte', - 'left_for_piggy_banks' => 'Queda per a les guardioles', - 'sum_of_piggy_banks' => 'Suma de les guardioles', - 'saved_so_far' => 'Estalviat fins ara', - 'left_to_save' => 'Queda per estalviar', - 'suggested_amount' => 'Quantitat mensual suggerida per estalviar', - 'add_money_to_piggy_title' => 'Afegeix diners a la guardiola ":name"', - 'remove_money_from_piggy_title' => 'Retira diners de la guardiola ":name"', - 'add' => 'Afegeix', - 'no_money_for_piggy' => 'No tens diners per a posar en aquesta guardiola.', - 'suggested_savings_per_month' => 'Suggerit al mes', + 'event_history' => 'Historial d\'esdeveniments', + 'add_money_to_piggy' => 'Afegeix diners a la guardiola ":name"', + 'piggy_bank' => 'Guardiola', + 'new_piggy_bank' => 'Guardiola nova', + 'store_piggy_bank' => 'Desa una nova guardiola', + 'stored_piggy_bank' => 'Desa la nova guardiola ":name"', + 'account_status' => 'Estat del compte', + 'left_for_piggy_banks' => 'Queda per a les guardioles', + 'sum_of_piggy_banks' => 'Suma de les guardioles', + 'saved_so_far' => 'Estalviat fins ara', + 'left_to_save' => 'Queda per estalviar', + 'suggested_amount' => 'Quantitat mensual suggerida per estalviar', + 'add_money_to_piggy_title' => 'Afegeix diners a la guardiola ":name"', + 'remove_money_from_piggy_title' => 'Retira diners de la guardiola ":name"', + 'add' => 'Afegeix', + 'no_money_for_piggy' => 'No tens diners per a posar en aquesta guardiola.', + 'suggested_savings_per_month' => 'Suggerit al mes', - 'remove' => 'Suprimeix', - 'max_amount_add' => 'L\'import màxim que pots afegir és', - 'max_amount_remove' => 'L\'import màxim que pots eliminar és', - 'update_piggy_button' => 'Actualitza la guardiola', - 'update_piggy_title' => 'Actualitza la guardiola ":name"', - 'updated_piggy_bank' => 'S\'ha actualitzat la guardiola ":name"', - 'details' => 'Detalls', - 'events' => 'Esdeveniments', - 'target_amount' => 'Quantitat objectiu', - 'start_date' => 'Data d\'inici', - 'no_start_date' => 'Cap data d\'inici', - 'target_date' => 'Data objectiu', - 'no_target_date' => 'Cap data objectiu', - 'table' => 'Taula', - 'delete_piggy_bank' => 'Elimina la guardiola ":name"', - 'cannot_add_amount_piggy' => 'No s\'ha pogut afegir :amount a ":name".', - 'cannot_remove_from_piggy' => 'No s\'ha pogut eliminar :amount de ":name".', - 'deleted_piggy_bank' => 'S\'ha eliminat la guardiola ":name"', - 'added_amount_to_piggy' => 'S\'ha afegit :amount a ":name"', - 'removed_amount_from_piggy' => 'S\'ha eliminat :amount de ":name"', - 'piggy_events' => 'Guardioles relacionades', + 'remove' => 'Suprimeix', + 'max_amount_add' => 'L\'import màxim que pots afegir és', + 'max_amount_remove' => 'L\'import màxim que pots eliminar és', + 'update_piggy_button' => 'Actualitza la guardiola', + 'update_piggy_title' => 'Actualitza la guardiola ":name"', + 'updated_piggy_bank' => 'S\'ha actualitzat la guardiola ":name"', + 'details' => 'Detalls', + 'events' => 'Esdeveniments', + 'target_amount' => 'Quantitat objectiu', + 'start_date' => 'Data d\'inici', + 'no_start_date' => 'Cap data d\'inici', + 'target_date' => 'Data objectiu', + 'no_target_date' => 'Cap data objectiu', + 'table' => 'Taula', + 'delete_piggy_bank' => 'Elimina la guardiola ":name"', + 'cannot_add_amount_piggy' => 'No s\'ha pogut afegir :amount a ":name".', + 'cannot_remove_from_piggy' => 'No s\'ha pogut eliminar :amount de ":name".', + 'deleted_piggy_bank' => 'S\'ha eliminat la guardiola ":name"', + 'added_amount_to_piggy' => 'S\'ha afegit :amount a ":name"', + 'removed_amount_from_piggy' => 'S\'ha eliminat :amount de ":name"', + 'piggy_events' => 'Guardioles relacionades', // tags - 'delete_tag' => 'Elimina l\'etiqueta ":tag"', - 'deleted_tag' => 'S\'ha eliminat l\'etiqueta ":tag"', - 'new_tag' => 'Crea una etiqueta', - 'edit_tag' => 'Edita l\'etiqueta ":tag"', - 'updated_tag' => 'S\'ha actualitzat l\'etiqueta ":tag"', - 'created_tag' => 'L\'etiqueta ":tag" ha sigut creada!', + 'delete_tag' => 'Elimina l\'etiqueta ":tag"', + 'deleted_tag' => 'S\'ha eliminat l\'etiqueta ":tag"', + 'new_tag' => 'Crea una etiqueta', + 'edit_tag' => 'Edita l\'etiqueta ":tag"', + 'updated_tag' => 'S\'ha actualitzat l\'etiqueta ":tag"', + 'created_tag' => 'L\'etiqueta ":tag" ha sigut creada!', - 'transaction_journal_information' => 'Informació de la transacció', - 'transaction_journal_amount' => 'Informació de la quantitat', - 'transaction_journal_meta' => 'Metainformació', - 'transaction_journal_more' => 'Més informació', - 'basic_journal_information' => 'Informació de transacció bàsica', - 'transaction_journal_extra' => 'Informació addicional', - 'att_part_of_journal' => 'Desada en ":journal"', - 'total_amount' => 'Import total', - 'number_of_decimals' => 'Nombre de decimals', + 'transaction_journal_information' => 'Informació de la transacció', + 'transaction_journal_amount' => 'Informació de la quantitat', + 'transaction_journal_meta' => 'Metainformació', + 'transaction_journal_more' => 'Més informació', + 'basic_journal_information' => 'Informació de transacció bàsica', + 'transaction_journal_extra' => 'Informació addicional', + 'att_part_of_journal' => 'Desada en ":journal"', + 'total_amount' => 'Import total', + 'number_of_decimals' => 'Nombre de decimals', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'La invitació a ":address" ja ha sigut gastada.', - 'invite_is_deleted' => 'La invitació a ":address" ha sigut eliminada.', - 'invite_new_user_title' => 'Invitar nou usuari', - 'invite_new_user_text' => 'Com a administrador, pots convidar usuaris a l\'administració de Firefly III. Amb aquest enllaç podran crear un compte. L\'usuari convidat, i el seu compte d\'invitació apareixeran a la taula inferior. Pots compartir l\'enllaç.', - 'invited_user_mail' => 'Correu electrònic', - 'invite_user' => 'Convida l\'usuari', - 'user_is_invited' => 'El correu electrònic ":address" s\'ha convidat a Firefly III', - 'administration' => 'Administració', - 'system_settings' => 'Configuració del sistema', - 'code_already_used' => 'El code d\'invitació ja s\'ha gastat', - 'user_administration' => 'Administració d\'usuaris', - 'list_all_users' => 'Tots els usuaris', - 'all_users' => 'Tots els usuaris', - 'instance_configuration' => 'Configuració', - 'firefly_instance_configuration' => 'Opcions de configuració per a Firefly III', - 'setting_single_user_mode' => 'Mode d\'un sol usuari', - 'setting_single_user_mode_explain' => 'Per defecte, Firefly III sols accepta (1) registre: tu. Aquesta és una mesura de seguretat, que prevent que qualsevol altra persona accedeixa a la instància sense el teu permís. Els registres futurs es bloquejaran. Si desmarques aquesta casella, altres persones podran fer ús de la instància, sempre i quant tingues accés (quan està connectada a Internet).', - 'store_configuration' => 'Desa la configuració', - 'single_user_administration' => 'Administració d\'usuari per a :email', - 'edit_user' => 'Edita l\'usuari :email', - 'hidden_fields_preferences' => 'Pots habilitar més opcions de transacció a la configuració.', - 'user_data_information' => 'Dades d\'usuari', - 'user_information' => 'Informació d\'usuari', - 'total_size' => 'mida total', - 'budget_or_budgets' => ':count pressupost|:count pressuposts', - 'budgets_with_limits' => ':count pressupost amb quantitat configurada|:count pressupostos amb quantitat configurada', - 'nr_of_rules_in_total_groups' => ':count_rules regla/regles en :count_groups grup/grups', - 'tag_or_tags' => ':count etiqueta|:count etiquetes', - 'configuration_updated' => 'La configuració s\'ha actualitzat', - 'setting_is_demo_site' => 'Lloc de prova', - 'setting_is_demo_site_explain' => 'Si marques aquesta casella, la instal·lacció es comportarà com el lloc de prova. Açò pot tindre efectes adversos.', - 'block_code_bounced' => 'Correus electrònics retornats', - 'block_code_expired' => 'El compte de prova ha expirat', - 'no_block_code' => 'No hi ha cap motiu per a bloquejar, o l\'usuari no està bloquejat', - 'block_code_email_changed' => 'L\'usuari encara no ha confirmat la seua direcció de correu electrònic', - 'admin_update_email' => 'A diferència de la pàgina de perfil, l\'usuari NO serà notificat si es canvia la seva adreça electrònica!', - 'update_user' => 'Actualitza l\'usuari', - 'updated_user' => 'Les dades de l\'usuari s\'han actualitzat.', - 'delete_user' => 'Eliminar l\'usuari :email', - 'user_deleted' => 'S\'ha eliminat l\'usuari', - 'send_test_email' => 'Envia un correu de prova', - 'send_test_email_text' => 'Per a veure si la teua instal·lació pot enviar correus electrònics, o penjar missatges de Slack, per favor, prem aquest botó. No veuràs cap error ací, els fitxers de registre els mostraran. Pots premer aquest botó tantes vegades com vulgues. No hi ha control de correu brossa. Aquest missatge serà enviat a :email, i no hauria de tardar en arribar.', - 'send_message' => 'Enviar missatge', - 'send_test_triggered' => 'La prova s\'ha enviat. Comprova la teua safata d\'entrada, i els arxius de registre.', - 'give_admin_careful' => 'Els usuaris que tinguin el permís d\'administrador poden fer-se amb el teu compte. Ves amb cura.', - 'admin_maintanance_title' => 'Manteniment', - 'admin_maintanance_expl' => 'Alguns botons per al manteniment de Firefly III', - 'admin_maintenance_clear_cache' => 'Esborra la memòria cau', - 'admin_notifications' => 'Notificacions d\'administració', - 'admin_notifications_expl' => 'Aquestes notificacions poden ser habilitades o deshabilitades per l\'administrador. Si vols rebre aquests missatges a través de Slack també, estableix la direcció de "webhook entrant".', - 'admin_notification_check_user_new_reg' => 'L\'usuari rep un missatge de benvinguda després del registre', - 'admin_notification_check_admin_new_reg' => 'L\'administrador/administradors rep una notificació de nou registre', - 'admin_notification_check_new_version' => 'Nova versió disponible', - 'admin_notification_check_invite_created' => 'Un usuari ha estat convidat a Firefly III', - 'admin_notification_check_invite_redeemed' => 'Una invitació ha sigut bescanviada', - 'all_invited_users' => 'Tots els usuaris convidats', - 'save_notification_settings' => 'Desa la configuració', - 'notification_settings_saved' => 'La configuració de notificacions s\'ha desat', - - - 'split_transaction_title' => 'Descripció de la transacció dividida', - 'split_transaction_title_help' => 'Si crees una transacció dividida, ha d\'haver una descripció global per a totes les divisions de la transacció.', - 'split_title_help' => 'Si crees una transacció dividida, ha d\'haver una descripció global per a totes les divisions de la transacció.', - 'you_create_transfer' => 'Estàs creant una transferència.', - 'you_create_withdrawal' => 'Estàs creant una retirada.', - 'you_create_deposit' => 'Estàs creant un ingrés.', + 'invite_is_already_redeemed' => 'La invitació a ":address" ja ha sigut gastada.', + 'invite_is_deleted' => 'La invitació a ":address" ha sigut eliminada.', + 'invite_new_user_title' => 'Invitar nou usuari', + 'invite_new_user_text' => 'Com a administrador, pots convidar usuaris a l\'administració de Firefly III. Amb aquest enllaç podran crear un compte. L\'usuari convidat, i el seu compte d\'invitació apareixeran a la taula inferior. Pots compartir l\'enllaç.', + 'invited_user_mail' => 'Correu electrònic', + 'invite_user' => 'Convida l\'usuari', + 'user_is_invited' => 'El correu electrònic ":address" s\'ha convidat a Firefly III', + 'administration' => 'Administració', + 'system_settings' => 'Configuració del sistema', + 'code_already_used' => 'El code d\'invitació ja s\'ha gastat', + 'user_administration' => 'Administració d\'usuaris', + 'list_all_users' => 'Tots els usuaris', + 'all_users' => 'Tots els usuaris', + 'instance_configuration' => 'Configuració', + 'firefly_instance_configuration' => 'Opcions de configuració per a Firefly III', + 'setting_single_user_mode' => 'Mode d\'un sol usuari', + 'setting_single_user_mode_explain' => 'Per defecte, Firefly III sols accepta (1) registre: tu. Aquesta és una mesura de seguretat, que prevent que qualsevol altra persona accedeixa a la instància sense el teu permís. Els registres futurs es bloquejaran. Si desmarques aquesta casella, altres persones podran fer ús de la instància, sempre i quant tingues accés (quan està connectada a Internet).', + 'store_configuration' => 'Desa la configuració', + 'single_user_administration' => 'Administració d\'usuari per a :email', + 'edit_user' => 'Edita l\'usuari :email', + 'hidden_fields_preferences' => 'Pots habilitar més opcions de transacció a la configuració.', + 'user_data_information' => 'Dades d\'usuari', + 'user_information' => 'Informació d\'usuari', + 'total_size' => 'mida total', + 'budget_or_budgets' => ':count pressupost|:count pressuposts', + 'budgets_with_limits' => ':count pressupost amb quantitat configurada|:count pressupostos amb quantitat configurada', + 'nr_of_rules_in_total_groups' => ':count_rules regla/regles en :count_groups grup/grups', + 'tag_or_tags' => ':count etiqueta|:count etiquetes', + 'configuration_updated' => 'La configuració s\'ha actualitzat', + 'setting_is_demo_site' => 'Lloc de prova', + 'setting_is_demo_site_explain' => 'Si marques aquesta casella, la instal·lacció es comportarà com el lloc de prova. Açò pot tindre efectes adversos.', + 'block_code_bounced' => 'Correus electrònics retornats', + 'block_code_expired' => 'El compte de prova ha expirat', + 'no_block_code' => 'No hi ha cap motiu per a bloquejar, o l\'usuari no està bloquejat', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'L\'usuari encara no ha confirmat la seua direcció de correu electrònic', + 'admin_update_email' => 'A diferència de la pàgina de perfil, l\'usuari NO serà notificat si es canvia la seva adreça electrònica!', + 'update_user' => 'Actualitza l\'usuari', + 'updated_user' => 'Les dades de l\'usuari s\'han actualitzat.', + 'delete_user' => 'Eliminar l\'usuari :email', + 'user_deleted' => 'S\'ha eliminat l\'usuari', + 'send_test_email' => 'Envia un correu de prova', + 'send_test_email_text' => 'Per a veure si la teua instal·lació pot enviar correus electrònics, o penjar missatges de Slack, per favor, prem aquest botó. No veuràs cap error ací, els fitxers de registre els mostraran. Pots premer aquest botó tantes vegades com vulgues. No hi ha control de correu brossa. Aquest missatge serà enviat a :email, i no hauria de tardar en arribar.', + 'send_message' => 'Enviar missatge', + 'send_test_triggered' => 'La prova s\'ha enviat. Comprova la teua safata d\'entrada, i els arxius de registre.', + 'give_admin_careful' => 'Els usuaris que tinguin el permís d\'administrador poden fer-se amb el teu compte. Ves amb cura.', + 'admin_maintanance_title' => 'Manteniment', + 'admin_maintanance_expl' => 'Alguns botons per al manteniment de Firefly III', + 'admin_maintenance_clear_cache' => 'Esborra la memòria cau', + 'admin_notifications' => 'Notificacions d\'administració', + 'admin_notifications_expl' => 'Aquestes notificacions poden ser habilitades o deshabilitades per l\'administrador. Si vols rebre aquests missatges a través de Slack també, estableix la direcció de "webhook entrant".', + 'admin_notification_check_user_new_reg' => 'L\'usuari rep un missatge de benvinguda després del registre', + 'admin_notification_check_admin_new_reg' => 'L\'administrador/administradors rep una notificació de nou registre', + 'admin_notification_check_new_version' => 'Nova versió disponible', + 'admin_notification_check_invite_created' => 'Un usuari ha estat convidat a Firefly III', + 'admin_notification_check_invite_redeemed' => 'Una invitació ha sigut bescanviada', + 'all_invited_users' => 'Tots els usuaris convidats', + 'save_notification_settings' => 'Desa la configuració', + 'notification_settings_saved' => 'La configuració de notificacions s\'ha desat', + 'split_transaction_title' => 'Descripció de la transacció dividida', + 'split_transaction_title_help' => 'Si crees una transacció dividida, ha d\'haver una descripció global per a totes les divisions de la transacció.', + 'split_title_help' => 'Si crees una transacció dividida, ha d\'haver una descripció global per a totes les divisions de la transacció.', + 'you_create_transfer' => 'Estàs creant una transferència.', + 'you_create_withdrawal' => 'Estàs creant una retirada.', + 'you_create_deposit' => 'Estàs creant un ingrés.', // links - 'journal_link_configuration' => 'Configuració dels enllaços de la transacció', - 'create_new_link_type' => 'Crea un nou tipus d\'enllaç', - 'store_new_link_type' => 'Desa el nou tipus d\'enllaç', - 'update_link_type' => 'Actualitza el tipus d\'enllaç', - 'edit_link_type' => 'Edita el tipus d\'enllaç ":name"', - 'updated_link_type' => 'S\'ha actualitzat el tipus d\'enllaç ":name"', - 'delete_link_type' => 'Elimina el tipus d\'enllaç ":name"', - 'deleted_link_type' => 'S\'ha eliminat el tipus d\'enllaç ":name"', - 'stored_new_link_type' => 'Desa el nou tipus d\'enllaç ":name"', - 'cannot_edit_link_type' => 'No s\'ha pogut editar el tipus d\'enllaç ":name"', - 'link_type_help_name' => 'Ie. "Duplicats"', - 'link_type_help_inward' => 'Ie. "duplicats"', - 'link_type_help_outward' => 'Ie. "està duplicat per"', - 'save_connections_by_moving' => 'Desa l\'enllaç entre aquestes transaccions movent-les a un altre tipus d\'enllaç:', - 'do_not_save_connection' => '(no deses la connexió)', - 'link_transaction' => 'Enllaça la transacció', - 'link_to_other_transaction' => 'Enllaça aquesta transacció a una altra', - 'select_transaction_to_link' => 'Selecciona una transacció per a enllaçar-la a aquesta. Els enllaços no es fan servir actualment a Firefly III (a part de mostrar-se), però tinc plans per a fer servir aquesta funció en un futur. Fes servir la capsa de cerca per a seleccionar una transacció a partir del títol o de la ID. Si vols afegir tipus d\'enllaç personalitzats, mira la secció d\'administració.', - 'this_transaction' => 'Aquesta transacció', - 'transaction' => 'Transacció', - 'comments' => 'Comentaris', - 'link_notes' => 'Qualsevol nota que vulgues desar amb l\'enllaç.', - 'invalid_link_selection' => 'No s\'han pogut enllaçar les transaccions', - 'selected_transaction' => 'Transacció selecionada', - 'journals_linked' => 'Les transaccions estan enllaçades.', - 'journals_error_linked' => 'Aquestes transaccions ja estan enllaçades.', - 'journals_link_to_self' => 'No pots enllaçar una transacció a ella mateixa', - 'journal_links' => 'Enllaços de transacció', - 'this_withdrawal' => 'Aquesta retirada', - 'this_deposit' => 'Aquest ingrés', - 'this_transfer' => 'Aquesta transferència', - 'overview_for_link' => 'Visió general per al tipus d\'enllaç ":name"', - 'source_transaction' => 'Transacció d\'origen', - 'link_description' => 'Descripció de l\'enllaç', - 'destination_transaction' => 'Transacció de destinació', - 'delete_journal_link' => 'Elimina l\'enllaç entre :source i :destination', - 'deleted_link' => 'Enllaç eliminat', + 'journal_link_configuration' => 'Configuració dels enllaços de la transacció', + 'create_new_link_type' => 'Crea un nou tipus d\'enllaç', + 'store_new_link_type' => 'Desa el nou tipus d\'enllaç', + 'update_link_type' => 'Actualitza el tipus d\'enllaç', + 'edit_link_type' => 'Edita el tipus d\'enllaç ":name"', + 'updated_link_type' => 'S\'ha actualitzat el tipus d\'enllaç ":name"', + 'delete_link_type' => 'Elimina el tipus d\'enllaç ":name"', + 'deleted_link_type' => 'S\'ha eliminat el tipus d\'enllaç ":name"', + 'stored_new_link_type' => 'Desa el nou tipus d\'enllaç ":name"', + 'cannot_edit_link_type' => 'No s\'ha pogut editar el tipus d\'enllaç ":name"', + 'link_type_help_name' => 'Ie. "Duplicats"', + 'link_type_help_inward' => 'Ie. "duplicats"', + 'link_type_help_outward' => 'Ie. "està duplicat per"', + 'save_connections_by_moving' => 'Desa l\'enllaç entre aquestes transaccions movent-les a un altre tipus d\'enllaç:', + 'do_not_save_connection' => '(no deses la connexió)', + 'link_transaction' => 'Enllaça la transacció', + 'link_to_other_transaction' => 'Enllaça aquesta transacció a una altra', + 'select_transaction_to_link' => 'Selecciona una transacció per a enllaçar-la a aquesta. Els enllaços no es fan servir actualment a Firefly III (a part de mostrar-se), però tinc plans per a fer servir aquesta funció en un futur. Fes servir la capsa de cerca per a seleccionar una transacció a partir del títol o de la ID. Si vols afegir tipus d\'enllaç personalitzats, mira la secció d\'administració.', + 'this_transaction' => 'Aquesta transacció', + 'transaction' => 'Transacció', + 'comments' => 'Comentaris', + 'link_notes' => 'Qualsevol nota que vulgues desar amb l\'enllaç.', + 'invalid_link_selection' => 'No s\'han pogut enllaçar les transaccions', + 'selected_transaction' => 'Transacció selecionada', + 'journals_linked' => 'Les transaccions estan enllaçades.', + 'journals_error_linked' => 'Aquestes transaccions ja estan enllaçades.', + 'journals_link_to_self' => 'No pots enllaçar una transacció a ella mateixa', + 'journal_links' => 'Enllaços de transacció', + 'this_withdrawal' => 'Aquesta retirada', + 'this_deposit' => 'Aquest ingrés', + 'this_transfer' => 'Aquesta transferència', + 'overview_for_link' => 'Visió general per al tipus d\'enllaç ":name"', + 'source_transaction' => 'Transacció d\'origen', + 'link_description' => 'Descripció de l\'enllaç', + 'destination_transaction' => 'Transacció de destinació', + 'delete_journal_link' => 'Elimina l\'enllaç entre :source i :destination', + 'deleted_link' => 'Enllaç eliminat', // link translations: - 'Paid_name' => 'Pagat', - 'Refund_name' => 'Reemborsar', - 'Reimbursement_name' => 'Reemborsament', - 'Related_name' => 'Relacionat', - 'relates to_inward' => 'fa referència a', - 'is (partially) refunded by_inward' => 'està (parcialment) reemborsada per', - 'is (partially) paid for by_inward' => 'està (parcialment) pagada per', - 'is (partially) reimbursed by_inward' => 'està (parcialment) reemborsada per', - 'inward_transaction' => 'Transacció entrant', - 'outward_transaction' => 'Transacció eixint', - 'relates to_outward' => 'fa referència a', - '(partially) refunds_outward' => 'reemborsa (parcialment)', - '(partially) pays for_outward' => 'paga per (parcialment)', - '(partially) reimburses_outward' => 'reemborsa (parcialment)', - 'is (partially) refunded by' => 'està (parcialment) reemborsada per', - 'is (partially) paid for by' => 'està (parcialment) pagada per', - 'is (partially) reimbursed by' => 'està (parcialment) reemborsada per', - 'relates to' => 'fa referència a', - '(partially) refunds' => 'reemborsa (parcialment)', - '(partially) pays for' => 'paga per (parcialment)', - '(partially) reimburses' => 'reemborsa (parcialment)', + 'Paid_name' => 'Pagat', + 'Refund_name' => 'Reemborsar', + 'Reimbursement_name' => 'Reemborsament', + 'Related_name' => 'Relacionat', + 'relates to_inward' => 'fa referència a', + 'is (partially) refunded by_inward' => 'està (parcialment) reemborsada per', + 'is (partially) paid for by_inward' => 'està (parcialment) pagada per', + 'is (partially) reimbursed by_inward' => 'està (parcialment) reemborsada per', + 'inward_transaction' => 'Transacció entrant', + 'outward_transaction' => 'Transacció eixint', + 'relates to_outward' => 'fa referència a', + '(partially) refunds_outward' => 'reemborsa (parcialment)', + '(partially) pays for_outward' => 'paga per (parcialment)', + '(partially) reimburses_outward' => 'reemborsa (parcialment)', + 'is (partially) refunded by' => 'està (parcialment) reemborsada per', + 'is (partially) paid for by' => 'està (parcialment) pagada per', + 'is (partially) reimbursed by' => 'està (parcialment) reemborsada per', + 'relates to' => 'fa referència a', + '(partially) refunds' => 'reemborsa (parcialment)', + '(partially) pays for' => 'paga per (parcialment)', + '(partially) reimburses' => 'reemborsa (parcialment)', // split a transaction: - 'splits' => 'Divisió', - 'add_another_split' => 'Afegeix una nova divisió', - 'cannot_edit_opening_balance' => 'No pots editar el balanç d\'obertura d\'un compte.', - 'no_edit_multiple_left' => 'No has seleccionat cap transacció per a editar.', - 'breadcrumb_convert_group' => 'Converteix la transacció', - 'convert_invalid_source' => 'La informació d\'origen és invàlida per a la transacció #%d.', - 'convert_invalid_destination' => 'La informació de destinació és invàlida per a la transacció #%d.', - 'create_another' => 'Després de guardar, torna ací per crear-ne un altre.', - 'after_update_create_another' => 'Després d\'actualitzar, torna ací per a seguir editant.', - 'store_as_new' => 'Desa com a una nova transacció, en comptes d\'actualitzar.', - 'reset_after' => 'Reiniciar el formulari després d\'enviar', - 'errors_submission' => 'Ha hagut un error amb el teu enviament. Per favor, revisa els errors.', - 'transaction_expand_split' => 'Expandeix la divisió', - 'transaction_collapse_split' => 'Contrau la divisió', + 'splits' => 'Divisió', + 'add_another_split' => 'Afegeix una nova divisió', + 'cannot_edit_opening_balance' => 'No pots editar el balanç d\'obertura d\'un compte.', + 'no_edit_multiple_left' => 'No has seleccionat cap transacció per a editar.', + 'breadcrumb_convert_group' => 'Converteix la transacció', + 'convert_invalid_source' => 'La informació d\'origen és invàlida per a la transacció #%d.', + 'convert_invalid_destination' => 'La informació de destinació és invàlida per a la transacció #%d.', + 'create_another' => 'Després de guardar, torna ací per crear-ne un altre.', + 'after_update_create_another' => 'Després d\'actualitzar, torna ací per a seguir editant.', + 'store_as_new' => 'Desa com a una nova transacció, en comptes d\'actualitzar.', + 'reset_after' => 'Reiniciar el formulari després d\'enviar', + 'errors_submission' => 'Hi ha hagut un error amb el teu enviament. Per favor, revisa els errors de sota.', + 'errors_submission_v2' => 'Hi ha hagut un error amb el teu enviament. Per favor, comprova els següents errors: %{errorMessage}', + 'transaction_expand_split' => 'Expandeix la divisió', + 'transaction_collapse_split' => 'Contrau la divisió', // object groups - 'default_group_title_name' => '(no agrupades)', - 'default_group_title_name_plain' => 'no agrupades', + 'default_group_title_name' => '(no agrupades)', + 'default_group_title_name_plain' => 'no agrupades', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Anem a crear un compte d\'actius!', - 'no_accounts_intro_asset' => 'No tens cap compte d\'actius encara. Els comptes d\'actius són els teus comptes principals: comptes d\'ingressos, d\'estalvis, compartits, o inclús la teua targeta de crèdit.', - 'no_accounts_imperative_asset' => 'Per a començar a gastar Firefly III has de crear com a mínim un compte d\'actius. Som-hi!', - 'no_accounts_create_asset' => 'Crea un nou compte d\'actius', - 'no_accounts_title_expense' => 'Anem a crear un compte de despeses!', - 'no_accounts_intro_expense' => 'No tens cap compte de despeses encara. Els comptes de despeses són els llocs on gastes diners, com tendes o supermercats.', - 'no_accounts_imperative_expense' => 'Els comptes de despeses es creen automàticament quan crees transaccions, no obstant, els pots crear manualment també, si vols. Anem a crear-ne un ara:', - 'no_accounts_create_expense' => 'Crea un compte de despeses', - 'no_accounts_title_revenue' => 'Anem a crear un compte d\'ingressos!', - 'no_accounts_intro_revenue' => 'No tens cap compte d\'ingressos encara. Els comptes d\'ingressos són els llocs dels quals reps diners, com el teu cap, o empresa, per exemple.', - 'no_accounts_imperative_revenue' => 'Els comptes d\'ingressos es creen automàticament quan crees transaccions, no obstant, els pots crear manualment també, si vols. Anem a crear-ne un ara:', - 'no_accounts_create_revenue' => 'Crea un nou compte de beneficis', - 'no_accounts_title_liabilities' => 'Anem a crear un passiu!', - 'no_accounts_intro_liabilities' => 'Encara no tens cap passiu. Els passius són els comptes en els quals registres els teus deutes i préstecs.', - 'no_accounts_imperative_liabilities' => 'No cal que faces servir aquesta funció, però pot ser útil per a tindre un registre d\'aquestes coses.', - 'no_accounts_create_liabilities' => 'Crea un nou passiu', - 'no_budgets_title_default' => 'Anem a crear un pressupost', - 'no_rules_title_default' => 'Anem a crear una regla', - 'no_budgets_intro_default' => 'No tens cap pressupost encara. Els pressupostos es fan servir per a organitzar les teves despeses en grups lògics, als quals els pots posar un límit per a limitar les teves despeses.', - 'no_rules_intro_default' => 'No tens cap regla encara. Les regles són automatitzacions potents que poden administrar transaccions per a tu.', - 'no_rules_imperative_default' => 'Les regles són molt útils quan estàs administrant transaccions. Creem-ne una:', - 'no_budgets_imperative_default' => 'Els pressupostos són les eines bàsiques d\'administració financera. Creem-ne una:', - 'no_budgets_create_default' => 'Crea un pressuport', - 'no_rules_create_default' => 'Crea una regla', - 'no_categories_title_default' => 'Anem a crear una categoria!', - 'no_categories_intro_default' => 'No tens cap categoria encara. Les categories es fan servir per a ajustar les teues transaccions, i etiquetar-les amb la corresponent categoria.', - 'no_categories_imperative_default' => 'Les categories es creen automàticament quan crees transaccions, però en pots crear una manualment. Anem a fer-ho:', - 'no_categories_create_default' => 'Crea una categoria', - 'no_tags_title_default' => 'Anem a crear una etiqueta!', - 'no_tags_intro_default' => 'No tens cap etiqueta encara. Les etiquetes es fan servir per a ajustar les teves transaccions, i etiquetar-les amb paraules claus específiques.', - 'no_tags_imperative_default' => 'Les etiquetes es creen automàticament quan crees transaccions, però les pots crear manualment també. Anem a fer-ho:', - 'no_tags_create_default' => 'Crea una etiqueta', - 'no_transactions_title_withdrawal' => 'Creem una despesa!', - 'no_transactions_intro_withdrawal' => 'No tens cap despesa encara. Hauries de crear despeses per a començar a administrar les teves finances.', - 'no_transactions_imperative_withdrawal' => 'Has gastat diners? Doncs hauries d\'anotar-ho:', - 'no_transactions_create_withdrawal' => 'Crea una despesa', - 'no_transactions_title_deposit' => 'Anem a crear un ingrés!', - 'no_transactions_intro_deposit' => 'No tens cap ingrés registrat encara. Hauries de crear algun per a començar a administrar les teves finances.', - 'no_transactions_imperative_deposit' => 'Has rebut diners? Hauries d\'anotar-ho:', - 'no_transactions_create_deposit' => 'Crea un ingrés', - 'no_transactions_title_transfers' => 'Anem a crear una transferència!', - 'no_transactions_intro_transfers' => 'No tens cap transferència encara. Quan mogues diners entre comptes, es desarà com una transferència.', - 'no_transactions_imperative_transfers' => 'Has mogut diners? Ho hauries d\'anotar:', - 'no_transactions_create_transfers' => 'Crea una transferència', - 'no_piggies_title_default' => 'Anem a crear una guardiola!', - 'no_piggies_intro_default' => 'No tens cap guardiola encara. Pots crear guardioles per a dividir els teus estalvis, i saber per a què estàs estalviant.', - 'no_piggies_imperative_default' => 'Estàs guardant diners per a alguna cosa? Crea una guardiola, i segueix el procés:', - 'no_piggies_create_default' => 'Crea una nova guardiola', - 'no_bills_title_default' => 'Anem a crear una factura!', - 'no_bills_intro_default' => 'No tens cap factura encara. Pots crear factures per a tindre registre de les teues despeses habituals, com els lloguer, o el segur.', - 'no_bills_imperative_default' => 'Tens alguna factura regular? Crea una factura, i segueix els pagaments:', - 'no_bills_create_default' => 'Crea una factura', + 'no_accounts_title_asset' => 'Anem a crear un compte d\'actius!', + 'no_accounts_intro_asset' => 'No tens cap compte d\'actius encara. Els comptes d\'actius són els teus comptes principals: comptes d\'ingressos, d\'estalvis, compartits, o inclús la teua targeta de crèdit.', + 'no_accounts_imperative_asset' => 'Per a començar a gastar Firefly III has de crear com a mínim un compte d\'actius. Som-hi!', + 'no_accounts_create_asset' => 'Crea un nou compte d\'actius', + 'no_accounts_title_expense' => 'Anem a crear un compte de despeses!', + 'no_accounts_intro_expense' => 'No tens cap compte de despeses encara. Els comptes de despeses són els llocs on gastes diners, com tendes o supermercats.', + 'no_accounts_imperative_expense' => 'Els comptes de despeses es creen automàticament quan crees transaccions, no obstant, els pots crear manualment també, si vols. Anem a crear-ne un ara:', + 'no_accounts_create_expense' => 'Crea un compte de despeses', + 'no_accounts_title_revenue' => 'Anem a crear un compte d\'ingressos!', + 'no_accounts_intro_revenue' => 'No tens cap compte d\'ingressos encara. Els comptes d\'ingressos són els llocs dels quals reps diners, com el teu cap, o empresa, per exemple.', + 'no_accounts_imperative_revenue' => 'Els comptes d\'ingressos es creen automàticament quan crees transaccions, no obstant, els pots crear manualment també, si vols. Anem a crear-ne un ara:', + 'no_accounts_create_revenue' => 'Crea un nou compte de beneficis', + 'no_accounts_title_liabilities' => 'Anem a crear un passiu!', + 'no_accounts_intro_liabilities' => 'Encara no tens cap passiu. Els passius són els comptes en els quals registres els teus deutes i préstecs.', + 'no_accounts_imperative_liabilities' => 'No cal que faces servir aquesta funció, però pot ser útil per a tindre un registre d\'aquestes coses.', + 'no_accounts_create_liabilities' => 'Crea un nou passiu', + 'no_budgets_title_default' => 'Anem a crear un pressupost', + 'no_rules_title_default' => 'Anem a crear una regla', + 'no_budgets_intro_default' => 'No tens cap pressupost encara. Els pressupostos es fan servir per a organitzar les teves despeses en grups lògics, als quals els pots posar un límit per a limitar les teves despeses.', + 'no_rules_intro_default' => 'No tens cap regla encara. Les regles són automatitzacions potents que poden administrar transaccions per a tu.', + 'no_rules_imperative_default' => 'Les regles són molt útils quan estàs administrant transaccions. Creem-ne una:', + 'no_budgets_imperative_default' => 'Els pressupostos són les eines bàsiques d\'administració financera. Creem-ne una:', + 'no_budgets_create_default' => 'Crea un pressuport', + 'no_rules_create_default' => 'Crea una regla', + 'no_categories_title_default' => 'Anem a crear una categoria!', + 'no_categories_intro_default' => 'No tens cap categoria encara. Les categories es fan servir per a ajustar les teues transaccions, i etiquetar-les amb la corresponent categoria.', + 'no_categories_imperative_default' => 'Les categories es creen automàticament quan crees transaccions, però en pots crear una manualment. Anem a fer-ho:', + 'no_categories_create_default' => 'Crea una categoria', + 'no_tags_title_default' => 'Anem a crear una etiqueta!', + 'no_tags_intro_default' => 'No tens cap etiqueta encara. Les etiquetes es fan servir per a ajustar les teves transaccions, i etiquetar-les amb paraules claus específiques.', + 'no_tags_imperative_default' => 'Les etiquetes es creen automàticament quan crees transaccions, però les pots crear manualment també. Anem a fer-ho:', + 'no_tags_create_default' => 'Crea una etiqueta', + 'no_transactions_title_withdrawal' => 'Creem una despesa!', + 'no_transactions_intro_withdrawal' => 'No tens cap despesa encara. Hauries de crear despeses per a començar a administrar les teves finances.', + 'no_transactions_imperative_withdrawal' => 'Has gastat diners? Doncs hauries d\'anotar-ho:', + 'no_transactions_create_withdrawal' => 'Crea una despesa', + 'no_transactions_title_deposit' => 'Anem a crear un ingrés!', + 'no_transactions_intro_deposit' => 'No tens cap ingrés registrat encara. Hauries de crear algun per a començar a administrar les teves finances.', + 'no_transactions_imperative_deposit' => 'Has rebut diners? Hauries d\'anotar-ho:', + 'no_transactions_create_deposit' => 'Crea un ingrés', + 'no_transactions_title_transfers' => 'Anem a crear una transferència!', + 'no_transactions_intro_transfers' => 'No tens cap transferència encara. Quan mogues diners entre comptes, es desarà com una transferència.', + 'no_transactions_imperative_transfers' => 'Has mogut diners? Ho hauries d\'anotar:', + 'no_transactions_create_transfers' => 'Crea una transferència', + 'no_piggies_title_default' => 'Anem a crear una guardiola!', + 'no_piggies_intro_default' => 'No tens cap guardiola encara. Pots crear guardioles per a dividir els teus estalvis, i saber per a què estàs estalviant.', + 'no_piggies_imperative_default' => 'Estàs guardant diners per a alguna cosa? Crea una guardiola, i segueix el procés:', + 'no_piggies_create_default' => 'Crea una nova guardiola', + 'no_bills_title_default' => 'Anem a crear una factura!', + 'no_bills_intro_default' => 'No tens cap factura encara. Pots crear factures per a tindre registre de les teues despeses habituals, com els lloguer, o el segur.', + 'no_bills_imperative_default' => 'Tens alguna factura regular? Crea una factura, i segueix els pagaments:', + 'no_bills_create_default' => 'Crea una factura', // recurring transactions - 'create_right_now' => 'Crea ara mateix', - 'no_new_transaction_in_recurrence' => 'No s\'ha creat cap transacció. Pot ser ja s\'havia executat per a aquesta data?', - 'recurrences' => 'Transaccions recurrents', - 'repeat_until_in_past' => 'Aquesta transacció recurrent es va parar d\'executar el :date.', - 'recurring_calendar_view' => 'Calendari', - 'no_recurring_title_default' => 'Anem a crear una transacció recurrent!', - 'no_recurring_intro_default' => 'No tens cap transacció recurrent. Fes servir aquesta funció per a que Firefly III cree transaccions automàticament per a tu.', - 'no_recurring_imperative_default' => 'És una funció bastant avançada, però que et pot ser molt útil. Assegura\'t de llegir la documentació, a la icona (?) de dalt a la dreta, abans de continuar.', - 'no_recurring_create_default' => 'Crea una transacció recurrent', - 'make_new_recurring' => 'Crea una transacció recurrent', - 'recurring_daily' => 'Cada dia', - 'recurring_weekly' => 'Cada dia els :weekday', - 'recurring_weekly_skip' => 'Cada :skip(a) setmana els :weekday', - 'recurring_monthly' => 'Cada mes al dia :dayOfMonth', - 'recurring_monthly_skip' => 'Cada mes :skip el dia :dayOfMonth', - 'recurring_ndom' => 'Cada mes els :weekday dia :dayOfMonth', - 'recurring_yearly' => 'Cada any els :date', - 'overview_for_recurrence' => 'Visió general per a la transacció recurrent ":title"', - 'warning_duplicates_repetitions' => 'En algun cas extrany, pot ser que les dates apareguen dobles a la llista. Pot passar quan varies repeticions coincideixen. Firefly III sempre generarà una transacció al dia.', - 'created_transactions' => 'Transaccions relacionades', - 'expected_withdrawals' => 'Retirades esperades', - 'expected_deposits' => 'Ingressos esperats', - 'expected_transfers' => 'Transferències esperades', - 'created_withdrawals' => 'Retirades creades', - 'created_deposits' => 'Ingressos creats', - 'created_transfers' => 'Transferències creades', - 'recurring_info' => 'Transacció recurrent :count / :total', - 'created_from_recurrence' => 'Creat de la transacció recurrent ":title" (#:id)', - 'recurring_never_cron' => 'Sembla que el treball cron que és necessari per a les transaccions recurrents no s\'ha executat mai. Açò és normal si acabes d\'instal·lar Firefly III, però hauria d\'executar-se el més prompte possible. Revisa les pàgines d\'ajuda fent servir la icona (?) a la part superior dreta de la pàgina.', - 'recurring_cron_long_ago' => 'Sembla que fa més de 36 hores que s\'ha executat el treball cron per última vegada. Segur que està ben configurat? Per favor, revisa les pàgines d\'ajuda fent servir la icona (?) de dalt a la dreta.', + 'create_right_now' => 'Crea ara mateix', + 'no_new_transaction_in_recurrence' => 'No s\'ha creat cap transacció. Pot ser ja s\'havia executat per a aquesta data?', + 'recurrences' => 'Transaccions recurrents', + 'repeat_until_in_past' => 'Aquesta transacció recurrent es va parar d\'executar el :date.', + 'recurring_calendar_view' => 'Calendari', + 'no_recurring_title_default' => 'Anem a crear una transacció recurrent!', + 'no_recurring_intro_default' => 'No tens cap transacció recurrent. Fes servir aquesta funció per a que Firefly III cree transaccions automàticament per a tu.', + 'no_recurring_imperative_default' => 'És una funció bastant avançada, però que et pot ser molt útil. Assegura\'t de llegir la documentació, a la icona (?) de dalt a la dreta, abans de continuar.', + 'no_recurring_create_default' => 'Crea una transacció recurrent', + 'make_new_recurring' => 'Crea una transacció recurrent', + 'recurring_daily' => 'Cada dia', + 'recurring_weekly' => 'Cada dia els :weekday', + 'recurring_weekly_skip' => 'Cada :skip(a) setmana els :weekday', + 'recurring_monthly' => 'Cada mes al dia :dayOfMonth', + 'recurring_monthly_skip' => 'Cada mes :skip el dia :dayOfMonth', + 'recurring_ndom' => 'Cada mes els :weekday dia :dayOfMonth', + 'recurring_yearly' => 'Cada any els :date', + 'overview_for_recurrence' => 'Visió general per a la transacció recurrent ":title"', + 'warning_duplicates_repetitions' => 'En algun cas extrany, pot ser que les dates apareguen dobles a la llista. Pot passar quan varies repeticions coincideixen. Firefly III sempre generarà una transacció al dia.', + 'created_transactions' => 'Transaccions relacionades', + 'expected_withdrawals' => 'Retirades esperades', + 'expected_deposits' => 'Ingressos esperats', + 'expected_transfers' => 'Transferències esperades', + 'created_withdrawals' => 'Retirades creades', + 'created_deposits' => 'Ingressos creats', + 'created_transfers' => 'Transferències creades', + 'recurring_info' => 'Transacció recurrent :count / :total', + 'created_from_recurrence' => 'Creat de la transacció recurrent ":title" (#:id)', + 'recurring_never_cron' => 'Sembla que el treball cron que és necessari per a les transaccions recurrents no s\'ha executat mai. Açò és normal si acabes d\'instal·lar Firefly III, però hauria d\'executar-se el més prompte possible. Revisa les pàgines d\'ajuda fent servir la icona (?) a la part superior dreta de la pàgina.', + 'recurring_cron_long_ago' => 'Sembla que fa més de 36 hores que s\'ha executat el treball cron per última vegada. Segur que està ben configurat? Per favor, revisa les pàgines d\'ajuda fent servir la icona (?) de dalt a la dreta.', - 'create_new_recurrence' => 'Crea una nova transacció recurrent', - 'help_first_date' => 'Indica la primera recurrència esperada. Ha de ser en el futur.', - 'help_first_date_no_past' => 'Indica la primera recurrència esperada. Firefly III no crearà transaccions en el passat.', - 'no_currency' => '(sense moneda)', - 'mandatory_for_recurring' => 'Informació de recurrència requerida', - 'mandatory_for_transaction' => 'Informació de transacció requerida', - 'optional_for_recurring' => 'Informació de recurrència opcional', - 'optional_for_transaction' => 'Informació de transacció opcional', - 'change_date_other_options' => 'Canvia la "primera data" per a veure més opcions.', - 'mandatory_fields_for_tranaction' => 'Els valors ací acabaran sent les transaccions que es creen', - 'click_for_calendar' => 'Fes clic ací per a veure un calendari que mostra quan la transacció es repetirà.', - 'repeat_forever' => 'Repeteix per a sempre', - 'repeat_until_date' => 'Repeteix fins a', - 'repeat_times' => 'Repeteix un nombre de vegades', - 'recurring_skips_one' => 'Cada', - 'recurring_skips_more' => 'Salta :count repeticions', - 'store_new_recurrence' => 'Desa la transacció recurrent', - 'stored_new_recurrence' => 'La transacció recurrent ":title" s\'ha desat correctament.', - 'edit_recurrence' => 'Edita la transacció recurrent ":title"', - 'recurring_repeats_until' => 'Es repeteix fins a :date', - 'recurring_repeats_forever' => 'Es repeteix per a sempre', - 'recurring_repeats_x_times' => 'Es repeteix :count vegada|Es repeteix :count vegades', - 'update_recurrence' => 'Actualitza la transacció recurrent', - 'updated_recurrence' => 'S\'ha actualitzat la transacció recurrent ":title"', - 'recurrence_is_inactive' => 'Aquesta transacció recurrent no està activa i no generarà noves transaccions.', - 'delete_recurring' => 'Elimina la transacció recurrent ":title"', - 'new_recurring_transaction' => 'Nova transacció recurrent', - 'help_weekend' => 'Què hauria de fer Firefly III quan la transacció cau dissabte o diumenge?', - 'do_nothing' => 'Simplement crea la transacció', - 'skip_transaction' => 'Salta la ocurrència', - 'jump_to_friday' => 'Crea la transacció el divendres anterior', - 'jump_to_monday' => 'Crea la transacció el següent dilluns', - 'will_jump_friday' => 'Serà creada divendres en comptes de al cap de setmana.', - 'will_jump_monday' => 'Serà creada dilluns en comptes de al cap de setmana.', - 'except_weekends' => 'Excepte els caps de setmana', - 'recurrence_deleted' => 'S\'ha eliminat la transacció recurrent ":title"', + 'create_new_recurrence' => 'Crea una nova transacció recurrent', + 'help_first_date' => 'Indica la primera recurrència esperada. Ha de ser en el futur.', + 'help_first_date_no_past' => 'Indica la primera recurrència esperada. Firefly III no crearà transaccions en el passat.', + 'no_currency' => '(sense moneda)', + 'mandatory_for_recurring' => 'Informació de recurrència requerida', + 'mandatory_for_transaction' => 'Informació de transacció requerida', + 'optional_for_recurring' => 'Informació de recurrència opcional', + 'optional_for_transaction' => 'Informació de transacció opcional', + 'change_date_other_options' => 'Canvia la "primera data" per a veure més opcions.', + 'mandatory_fields_for_tranaction' => 'Els valors ací acabaran sent les transaccions que es creen', + 'click_for_calendar' => 'Fes clic ací per a veure un calendari que mostra quan la transacció es repetirà.', + 'repeat_forever' => 'Repeteix per a sempre', + 'repeat_until_date' => 'Repeteix fins a', + 'repeat_times' => 'Repeteix un nombre de vegades', + 'recurring_skips_one' => 'Cada', + 'recurring_skips_more' => 'Salta :count repeticions', + 'store_new_recurrence' => 'Desa la transacció recurrent', + 'stored_new_recurrence' => 'La transacció recurrent ":title" s\'ha desat correctament.', + 'edit_recurrence' => 'Edita la transacció recurrent ":title"', + 'recurring_repeats_until' => 'Es repeteix fins a :date', + 'recurring_repeats_forever' => 'Es repeteix per a sempre', + 'recurring_repeats_x_times' => 'Es repeteix :count vegada|Es repeteix :count vegades', + 'update_recurrence' => 'Actualitza la transacció recurrent', + 'updated_recurrence' => 'S\'ha actualitzat la transacció recurrent ":title"', + 'recurrence_is_inactive' => 'Aquesta transacció recurrent no està activa i no generarà noves transaccions.', + 'delete_recurring' => 'Elimina la transacció recurrent ":title"', + 'new_recurring_transaction' => 'Nova transacció recurrent', + 'help_weekend' => 'Què hauria de fer Firefly III quan la transacció cau dissabte o diumenge?', + 'do_nothing' => 'Simplement crea la transacció', + 'skip_transaction' => 'Salta la ocurrència', + 'jump_to_friday' => 'Crea la transacció el divendres anterior', + 'jump_to_monday' => 'Crea la transacció el següent dilluns', + 'will_jump_friday' => 'Serà creada divendres en comptes de al cap de setmana.', + 'will_jump_monday' => 'Serà creada dilluns en comptes de al cap de setmana.', + 'except_weekends' => 'Excepte els caps de setmana', + 'recurrence_deleted' => 'S\'ha eliminat la transacció recurrent ":title"', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Saldo (:currency)', - 'box_spent_in_currency' => 'Gastat (:currency)', - 'box_earned_in_currency' => 'Guanyat (:currency)', - 'box_budgeted_in_currency' => 'Pressupostat (:currency)', - 'box_bill_paid_in_currency' => 'Factures pagades (:currency)', - 'box_bill_unpaid_in_currency' => 'Factures pendents (:currency)', - 'box_left_to_spend_in_currency' => 'Queda per gastar (:currency)', - 'box_net_worth_in_currency' => 'Valor net (:currency)', - 'box_spend_per_day' => 'Queda per gastar al dia: :amount', + 'box_balance_in_currency' => 'Saldo (:currency)', + 'box_spent_in_currency' => 'Gastat (:currency)', + 'box_earned_in_currency' => 'Guanyat (:currency)', + 'box_budgeted_in_currency' => 'Pressupostat (:currency)', + 'box_bill_paid_in_currency' => 'Factures pagades (:currency)', + 'box_bill_unpaid_in_currency' => 'Factures pendents (:currency)', + 'box_left_to_spend_in_currency' => 'Queda per gastar (:currency)', + 'box_net_worth_in_currency' => 'Valor net (:currency)', + 'box_spend_per_day' => 'Queda per gastar al dia: :amount', // debug page - 'debug_page' => 'Pàgina de debug', - 'debug_submit_instructions' => 'Si tens cpa problema, pots gastar la informació d\'aquesta pàgina com a informació de debug. Per favor, copia i enganxa en una issue de Github existent o una nova. Generarà una taula que serà útil per a poder diagnosticar el teu problema ràpidament.', - 'debug_pretty_table' => 'Si copies i enganxes aquesta capsa en una issue de GitHub generarà una taula. Per favor, no rodeges aquest text amb asteriscs o apòstrofs.', - 'debug_additional_data' => 'També pots compartir els continguts de la caixa. Pots copiar i enganxar-los en una issue de GitHub nova, o una ja existent. No obstant, el contingut de la capsa pot tenir informació privada, com nom de comptes, detalls de transaccions o direccions de correu electrònic.', + 'debug_page' => 'Pàgina de debug', + 'debug_submit_instructions' => 'Si tens cpa problema, pots gastar la informació d\'aquesta pàgina com a informació de debug. Per favor, copia i enganxa en una issue de Github existent o una nova. Generarà una taula que serà útil per a poder diagnosticar el teu problema ràpidament.', + 'debug_pretty_table' => 'Si copies i enganxes aquesta capsa en una issue de GitHub generarà una taula. Per favor, no rodeges aquest text amb asteriscs o apòstrofs.', + 'debug_additional_data' => 'També pots compartir els continguts de la caixa. Pots copiar i enganxar-los en una issue de GitHub nova, o una ja existent. No obstant, el contingut de la capsa pot tenir informació privada, com nom de comptes, detalls de transaccions o direccions de correu electrònic.', // object groups - 'object_groups_menu_bar' => 'Grups', - 'object_groups_page_title' => 'Grups', - 'object_groups_breadcrumb' => 'Grups', - 'object_groups_index' => 'Visió general', - 'object_groups' => 'Grups', - 'object_groups_empty_explain' => 'Algunes coses a Firefly III pot ser dividida en grups. Les guardioles, per exemple, tenen una funció de grup en la pàgina de creació i edició. Quan estableixen aquest camp, pots editar els noms, i ordenar els grups en aquesta pàgina. Per a més informació, llegeix les pàgines d\'ajuda en la icona (?) de dalt a la dreta.', - 'object_group_title' => 'Títol', - 'edit_object_group' => 'Edita el grup ":title"', - 'delete_object_group' => 'Elimina el grup ":title"', - 'update_object_group' => 'Actualiza el grup', - 'updated_object_group' => 'S\'ha actualitzat el grup ":title" satisfactòriament', - 'deleted_object_group' => 'S\'ha eliminat el grup ":title" satisfactòriament', - 'object_group' => 'Grup', + 'object_groups_menu_bar' => 'Grups', + 'object_groups_page_title' => 'Grups', + 'object_groups_breadcrumb' => 'Grups', + 'object_groups_index' => 'Visió general', + 'object_groups' => 'Grups', + 'object_groups_empty_explain' => 'Algunes coses a Firefly III pot ser dividida en grups. Les guardioles, per exemple, tenen una funció de grup en la pàgina de creació i edició. Quan estableixen aquest camp, pots editar els noms, i ordenar els grups en aquesta pàgina. Per a més informació, llegeix les pàgines d\'ajuda en la icona (?) de dalt a la dreta.', + 'object_group_title' => 'Títol', + 'edit_object_group' => 'Edita el grup ":title"', + 'delete_object_group' => 'Elimina el grup ":title"', + 'update_object_group' => 'Actualiza el grup', + 'updated_object_group' => 'S\'ha actualitzat el grup ":title" satisfactòriament', + 'deleted_object_group' => 'S\'ha eliminat el grup ":title" satisfactòriament', + 'object_group' => 'Grup', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audita les entrades de registre', - 'ale_action_log_add' => 'S\'ha afegit :amount a la guardiola ":name"', - 'ale_action_log_remove' => 'S\'ha eliminat :amount de la guardiola ":name"', - 'ale_action_clear_budget' => 'Eliminat del pressupost', - 'ale_action_update_group_title' => 'S\'ha actualitzat el títol del grup de transaccions', - 'ale_action_update_date' => 'S\'ha actualitzat la data de transacció', - 'ale_action_update_order' => 'S\'ha actualitzat l\'ordre de transaccions', - 'ale_action_clear_category' => 'Eliminat de la categoria', - 'ale_action_clear_notes' => 'Notes eliminades', - 'ale_action_clear_tag' => 'Etiqueta buidada', - 'ale_action_clear_all_tags' => 'Buidades totes les etiquetes', - 'ale_action_set_bill' => 'Enllaçat a la factura', - 'ale_action_switch_accounts' => 'S\'han canviat els comptes font i de destinació', - 'ale_action_set_budget' => 'Establir pressupost', - 'ale_action_set_category' => 'Establir categoria', - 'ale_action_set_source' => 'Establir compte d\'origen', - 'ale_action_set_destination' => 'Establir compte de destinació', - 'ale_action_update_transaction_type' => 'Tipus de transacció canviat', - 'ale_action_update_notes' => 'Notes canviades', - 'ale_action_update_description' => 'Descripció canviada', - 'ale_action_add_to_piggy' => 'Guardiola', - 'ale_action_remove_from_piggy' => 'Guardiola', - 'ale_action_add_tag' => 'Etiqueta afegida', + 'audit_log_entries' => 'Audita les entrades de registre', + 'ale_action_log_add' => 'S\'ha afegit :amount a la guardiola ":name"', + 'ale_action_log_remove' => 'S\'ha eliminat :amount de la guardiola ":name"', + 'ale_action_clear_budget' => 'Eliminat del pressupost', + 'ale_action_update_group_title' => 'S\'ha actualitzat el títol del grup de transaccions', + 'ale_action_update_date' => 'S\'ha actualitzat la data de transacció', + 'ale_action_update_order' => 'S\'ha actualitzat l\'ordre de transaccions', + 'ale_action_clear_category' => 'Eliminat de la categoria', + 'ale_action_clear_notes' => 'Notes eliminades', + 'ale_action_clear_tag' => 'Etiqueta buidada', + 'ale_action_clear_all_tags' => 'Buidades totes les etiquetes', + 'ale_action_set_bill' => 'Enllaçat a la factura', + 'ale_action_switch_accounts' => 'S\'han canviat els comptes font i de destinació', + 'ale_action_set_budget' => 'Establir pressupost', + 'ale_action_set_category' => 'Establir categoria', + 'ale_action_set_source' => 'Establir compte d\'origen', + 'ale_action_set_destination' => 'Establir compte de destinació', + 'ale_action_update_transaction_type' => 'Tipus de transacció canviat', + 'ale_action_update_notes' => 'Notes canviades', + 'ale_action_update_description' => 'Descripció canviada', + 'ale_action_add_to_piggy' => 'Guardiola', + 'ale_action_remove_from_piggy' => 'Guardiola', + 'ale_action_add_tag' => 'Etiqueta afegida', // dashboard - 'enable_auto_convert' => 'Habilita la conversió de moneda', - 'disable_auto_convert' => 'Deshabilita la conversió de moneda', - + 'enable_auto_convert' => 'Habilita la conversió de moneda', + 'disable_auto_convert' => 'Deshabilita la conversió de moneda', ]; /* diff --git a/resources/lang/ca_ES/form.php b/resources/lang/ca_ES/form.php index cec9ae3257..5fc9ae32f2 100644 --- a/resources/lang/ca_ES/form.php +++ b/resources/lang/ca_ES/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Nom del banc', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Saldo d\'estalvis', - 'credit_card_limit' => 'Límit de la targeta de crèdit', - 'automatch' => 'Coincidir automàticament', - 'skip' => 'Ometre', - 'enabled' => 'Activat', - 'name' => 'Nom', - 'active' => 'Actiu', - 'amount_min' => 'Import mínim', - 'amount_max' => 'Import màxim', - 'match' => 'Coincideix en', - 'strict' => 'Mode estricte', - 'repeat_freq' => 'Repeticions', - 'object_group' => 'Grup', - 'location' => 'Ubicació', - 'update_channel' => 'Canal d\'actualitzacions', - 'currency_id' => 'Moneda', - 'transaction_currency_id' => 'Moneda', - 'auto_budget_currency_id' => 'Moneda', - 'external_ip' => 'IP externa del servidor', - 'attachments' => 'Adjunts', - 'BIC' => 'BIC', - 'verify_password' => 'Verificar la seguretat de la contrasenya', - 'source_account' => 'Compte d\'origen', - 'destination_account' => 'Compte de destí', - 'asset_destination_account' => 'Compte de destí', - 'include_net_worth' => 'Incloure en valor net', - 'asset_source_account' => 'Compte d\'origen', - 'journal_description' => 'Descripció', - 'note' => 'Notes', - 'currency' => 'Moneda', - 'account_id' => 'Compte d\'actiu', - 'budget_id' => 'Pressupost', - 'bill_id' => 'Factura', - 'opening_balance' => 'Saldo inicial', - 'tagMode' => 'Mode d\'etiqueta', - 'virtual_balance' => 'Saldo virtual', + 'bank_name' => 'Nom del banc', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Saldo d\'estalvis', + 'credit_card_limit' => 'Límit de la targeta de crèdit', + 'automatch' => 'Coincidir automàticament', + 'skip' => 'Ometre', + 'enabled' => 'Activat', + 'name' => 'Nom', + 'active' => 'Actiu', + 'amount_min' => 'Import mínim', + 'amount_max' => 'Import màxim', + 'match' => 'Coincideix en', + 'strict' => 'Mode estricte', + 'repeat_freq' => 'Repeticions', + 'object_group' => 'Grup', + 'location' => 'Ubicació', + 'update_channel' => 'Canal d\'actualitzacions', + 'currency_id' => 'Moneda', + 'transaction_currency_id' => 'Moneda', + 'auto_budget_currency_id' => 'Moneda', + 'external_ip' => 'IP externa del servidor', + 'attachments' => 'Adjunts', + 'BIC' => 'BIC', + 'verify_password' => 'Verificar la seguretat de la contrasenya', + 'source_account' => 'Compte d\'origen', + 'destination_account' => 'Compte de destí', + 'asset_destination_account' => 'Compte de destí', + 'include_net_worth' => 'Incloure en valor net', + 'asset_source_account' => 'Compte d\'origen', + 'journal_description' => 'Descripció', + 'note' => 'Notes', + 'currency' => 'Moneda', + 'account_id' => 'Compte d\'actiu', + 'budget_id' => 'Pressupost', + 'bill_id' => 'Factura', + 'opening_balance' => 'Saldo inicial', + 'tagMode' => 'Mode d\'etiqueta', + 'virtual_balance' => 'Saldo virtual', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Quantitat objectiu', 'account_role' => 'Rol del compte', 'opening_balance_date' => 'Data del saldo inicial', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Estàs segur que vols eliminar la transacció amb descripció ":description"?', 'mass_journal_are_you_sure' => 'Estàs segur que vols eliminar aquestes transaccions?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Estàs segur que vols eliminar l\'etiqueta ":tag"?', 'journal_link_areYouSure' => 'Estàs segur que vols eliminar l\'enllaç entre :source i :destination?', 'linkType_areYouSure' => 'Estàs segur que vols eliminar el tipus d\'enllaç ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Àlbum', 'song' => 'Cançó', - // admin 'domain' => 'Domini', 'single_user_mode' => 'Deshabilitar registre d\'usuaris', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Compte FinTS', 'local_account' => 'Compte Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Data des de', - 'to_date' => 'Data fins a', - 'due_date' => 'Data de venciment', - 'payment_date' => 'Data de pagament', - 'invoice_date' => 'Data de facturació', - 'internal_reference' => 'Referència interna', - 'inward' => 'Descripció interna', - 'outward' => 'Descripció externa', - 'rule_group_id' => 'Grup de regles', - 'transaction_description' => 'Descripció de la transacció', - 'first_date' => 'Primera data', - 'transaction_type' => 'Tipus de transacció', - 'repeat_until' => 'Repetir fins a', - 'recurring_description' => 'Descripció de la transacció periòdica', - 'repetition_type' => 'Tipus de repetició', - 'foreign_currency_id' => 'Moneda estrangera', - 'repetition_end' => 'La repetició acaba', - 'repetitions' => 'Repeticions', - 'calendar' => 'Calendari', - 'weekend' => 'Cap de setmana', - 'client_secret' => 'Secret del client', - 'withdrawal_destination_id' => 'Compte de destí', - 'deposit_source_id' => 'Compte d\'origen', - 'expected_on' => 'S\'esperava el', - 'paid' => 'Pagat', - 'auto_budget_type' => 'Pressupost automàtic', - 'auto_budget_amount' => 'Import del pressupost automàtic', - 'auto_budget_period' => 'Període del pressupost automàtic', - 'collected' => 'Cobrat', - 'submitted' => 'Enviat', - 'key' => 'Clau', - 'value' => 'Contingut del registre', - 'webhook_delivery' => 'Lliurament', - 'webhook_response' => 'Resposta', - 'webhook_trigger' => 'Activador', + 'from_date' => 'Data des de', + 'to_date' => 'Data fins a', + 'due_date' => 'Data de venciment', + 'payment_date' => 'Data de pagament', + 'invoice_date' => 'Data de facturació', + 'internal_reference' => 'Referència interna', + 'inward' => 'Descripció interna', + 'outward' => 'Descripció externa', + 'rule_group_id' => 'Grup de regles', + 'transaction_description' => 'Descripció de la transacció', + 'first_date' => 'Primera data', + 'transaction_type' => 'Tipus de transacció', + 'repeat_until' => 'Repetir fins a', + 'recurring_description' => 'Descripció de la transacció periòdica', + 'repetition_type' => 'Tipus de repetició', + 'foreign_currency_id' => 'Moneda estrangera', + 'repetition_end' => 'La repetició acaba', + 'repetitions' => 'Repeticions', + 'calendar' => 'Calendari', + 'weekend' => 'Cap de setmana', + 'client_secret' => 'Secret del client', + 'withdrawal_destination_id' => 'Compte de destí', + 'deposit_source_id' => 'Compte d\'origen', + 'expected_on' => 'S\'esperava el', + 'paid' => 'Pagat', + 'auto_budget_type' => 'Pressupost automàtic', + 'auto_budget_amount' => 'Import del pressupost automàtic', + 'auto_budget_period' => 'Període del pressupost automàtic', + 'collected' => 'Cobrat', + 'submitted' => 'Enviat', + 'key' => 'Clau', + 'value' => 'Contingut del registre', + 'webhook_delivery' => 'Lliurament', + 'webhook_response' => 'Resposta', + 'webhook_trigger' => 'Activador', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ca_ES/intro.php b/resources/lang/ca_ES/intro.php index 56b3986dab..cdb70b72ee 100644 --- a/resources/lang/ca_ES/intro.php +++ b/resources/lang/ca_ES/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Benvingut a la pàgina d\'inici de Firefly III. Si us plau, pren-te el teu temps per seguir aquesta guia per fer-te una idea de com funciona Firefly III.', - 'index_accounts-chart' => 'Aquesta gràfica mostra el saldo actual dels teus comptes. Pots seleccionar els comptes que es mostren des de les preferències.', - 'index_box_out_holder' => 'Aquesta caixeta i les que es troben a continuació, et donaran una vista general de la teva situació financera.', - 'index_help' => 'Si mai necessites ajuda amb una pàgina o formulari, prem aquest botó.', - 'index_outro' => 'La majoria de pàgines de Firefly III començaran amb una petita introducció com aquesta. Si us plau, posa\'t en contacte amb mi si tens preguntes o comentaris. Gaudeix!', - 'index_sidebar-toggle' => 'Per crear noves transaccions, comptes o altres coses, fes servir el menú sota aquesta icona.', - 'index_cash_account' => 'Aquests són els comptes creats fins ara. Pots fer servir el compte d\'efectiu per fer el seguiment de les despeses d\'efectiu, però, evidentment, no és obligatori.', + 'index_intro' => 'Benvingut a la pàgina d\'inici de Firefly III. Si us plau, pren-te el teu temps per seguir aquesta guia per fer-te una idea de com funciona Firefly III.', + 'index_accounts-chart' => 'Aquesta gràfica mostra el saldo actual dels teus comptes. Pots seleccionar els comptes que es mostren des de les preferències.', + 'index_box_out_holder' => 'Aquesta caixeta i les que es troben a continuació, et donaran una vista general de la teva situació financera.', + 'index_help' => 'Si mai necessites ajuda amb una pàgina o formulari, prem aquest botó.', + 'index_outro' => 'La majoria de pàgines de Firefly III començaran amb una petita introducció com aquesta. Si us plau, posa\'t en contacte amb mi si tens preguntes o comentaris. Gaudeix!', + 'index_sidebar-toggle' => 'Per crear noves transaccions, comptes o altres coses, fes servir el menú sota aquesta icona.', + 'index_cash_account' => 'Aquests són els comptes creats fins ara. Pots fer servir el compte d\'efectiu per fer el seguiment de les despeses d\'efectiu, però, evidentment, no és obligatori.', // transactions - 'transactions_create_basic_info' => 'Introdueix la informació bàsica de la transacció. Origen, destí, data i descripció.', - 'transactions_create_amount_info' => 'Introdueix la quantitat de la transacció. Si és necessari, els camps s\'actualitzaran automàticament per la informació en quantitat estrangera.', - 'transactions_create_optional_info' => 'Tots aquests camps són opcionals. Afegir metadades aquí farà que les transaccions estiguin organitzades millor.', - 'transactions_create_split' => 'Si vols dividir una transacció, afegeix més divisions amb aquest botó', + 'transactions_create_basic_info' => 'Introdueix la informació bàsica de la transacció. Origen, destí, data i descripció.', + 'transactions_create_amount_info' => 'Introdueix la quantitat de la transacció. Si és necessari, els camps s\'actualitzaran automàticament per la informació en quantitat estrangera.', + 'transactions_create_optional_info' => 'Tots aquests camps són opcionals. Afegir metadades aquí farà que les transaccions estiguin organitzades millor.', + 'transactions_create_split' => 'Si vols dividir una transacció, afegeix més divisions amb aquest botó', // create account: - 'accounts_create_iban' => 'Indica un IBAN vàlid pel teu compte. Això pot facilitar la importació de dades en un futur.', - 'accounts_create_asset_opening_balance' => 'Els comptes d\'actius poden tenir un "saldo d\'obertura", indicant l\'inici de l\'historial del compte a Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III admet diverses monedes. Els comptes d\'actius tenen una moneda principal, la qual has d\'indicar aquí.', - 'accounts_create_asset_virtual' => 'A vegades et podria ser d\'ajuda donar al teu compte un saldo virtual: una quantitat addicional que s\'afegeix o resta sempre del saldo real.', + 'accounts_create_iban' => 'Indica un IBAN vàlid pel teu compte. Això pot facilitar la importació de dades en un futur.', + 'accounts_create_asset_opening_balance' => 'Els comptes d\'actius poden tenir un "saldo d\'obertura", indicant l\'inici de l\'historial del compte a Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III admet diverses monedes. Els comptes d\'actius tenen una moneda principal, la qual has d\'indicar aquí.', + 'accounts_create_asset_virtual' => 'A vegades et podria ser d\'ajuda donar al teu compte un saldo virtual: una quantitat addicional que s\'afegeix o resta sempre del saldo real.', // budgets index - 'budgets_index_intro' => 'Els pressupostos s\'usen per gestionar les teves finances i són una de les funcions principals de Firefly III.', - 'budgets_index_set_budget' => 'Configura el pressupost total per cada període, de tal manera que Firefly III et pugui indicar si has pressupostat tots els diners disponibles.', - 'budgets_index_see_expenses_bar' => 'Gastar diners anirà omplint a poc a poc aquesta barra.', - 'budgets_index_navigate_periods' => 'Navega a través dels períodes per configurar fàcilment els pressupostos amb antelació.', - 'budgets_index_new_budget' => 'Crea nous pressupostos tal com et sigui convenient.', - 'budgets_index_list_of_budgets' => 'Fes servir aquesta taula per establir les quantitats per cada pressupost i veure com t\'està anant.', - 'budgets_index_outro' => 'Per aprendre més coses sobre pressupostar, dóna un cop d\'ull a la icona d\'ajuda de la cantonada superior dreta.', + 'budgets_index_intro' => 'Els pressupostos s\'usen per gestionar les teves finances i són una de les funcions principals de Firefly III.', + 'budgets_index_see_expenses_bar' => 'Gastar diners anirà omplint a poc a poc aquesta barra.', + 'budgets_index_navigate_periods' => 'Navega a través dels períodes per configurar fàcilment els pressupostos amb antelació.', + 'budgets_index_new_budget' => 'Crea nous pressupostos tal com et sigui convenient.', + 'budgets_index_list_of_budgets' => 'Fes servir aquesta taula per establir les quantitats per cada pressupost i veure com t\'està anant.', + 'budgets_index_outro' => 'Per aprendre més coses sobre pressupostar, dóna un cop d\'ull a la icona d\'ajuda de la cantonada superior dreta.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Fes servir aquests informes per obtenir detalls de les teves finances.', - 'reports_index_inputReportType' => 'Escull un tipus d\'informe. Dóna un cop d\'ull a les pàgines d\'ajuda per veure el que mostra cada informe.', - 'reports_index_inputAccountsSelect' => 'Pots excloure o incloure comptes d\'actius com et vagi millor.', - 'reports_index_inputDateRange' => 'L\'interval de dades seleccionat depèn de tu: d\'un dia a 10 anys.', - 'reports_index_extra-options-box' => 'Depenent de l\'informe que hagis seleccionat, pots seleccionar filtres i opcions addicionals. Mira aquesta capsa quan canviïs el tipus d\'informe.', + 'reports_index_intro' => 'Fes servir aquests informes per obtenir detalls de les teves finances.', + 'reports_index_inputReportType' => 'Escull un tipus d\'informe. Dóna un cop d\'ull a les pàgines d\'ajuda per veure el que mostra cada informe.', + 'reports_index_inputAccountsSelect' => 'Pots excloure o incloure comptes d\'actius com et vagi millor.', + 'reports_index_inputDateRange' => 'El rang de dates seleccionat el determines tú: des d\'un dia fins a 10 anys o més.', + 'reports_index_extra-options-box' => 'Depenent de l\'informe que hagis seleccionat, pots seleccionar filtres i opcions addicionals. Mira aquesta capsa quan canviïs el tipus d\'informe.', // reports (reports) - 'reports_report_default_intro' => 'Aquest informe et donarà una vista general ràpida i exhaustiva de les teves finances. Si vols veure alguna cosa més, si us plau, no dubtis en contactar amb mi!', - 'reports_report_audit_intro' => 'Aquest informe et donarà informació detallada dels teus comptes d\'actius.', - 'reports_report_audit_optionsBox' => 'Fes servir aquestes caselles per mostrar o ocultar les columnes que t\'interessin.', + 'reports_report_default_intro' => 'Aquest informe et donarà una vista general ràpida i exhaustiva de les teves finances. Si vols veure alguna cosa més, si us plau, no dubtis en contactar amb mi!', + 'reports_report_audit_intro' => 'Aquest informe et donarà informació detallada dels teus comptes d\'actius.', + 'reports_report_audit_optionsBox' => 'Fes servir aquestes caselles per mostrar o ocultar les columnes que t\'interessin.', - 'reports_report_category_intro' => 'Aquest informe et donarà detalls d\'una o múltiples categories.', - 'reports_report_category_pieCharts' => 'Aquestes gràfiques et donaran detalls de les despeses i ingressos per categoria o per compte.', - 'reports_report_category_incomeAndExpensesChart' => 'Aquesta gràfica mostra les despeses i ingressos per categoria.', + 'reports_report_category_intro' => 'Aquest informe et donarà detalls d\'una o múltiples categories.', + 'reports_report_category_pieCharts' => 'Aquestes gràfiques et donaran detalls de les despeses i ingressos per categoria o per compte.', + 'reports_report_category_incomeAndExpensesChart' => 'Aquesta gràfica mostra les despeses i ingressos per categoria.', - 'reports_report_tag_intro' => 'Aquest informe et donarà detalls d\'una o més etiquetes.', - 'reports_report_tag_pieCharts' => 'Aquestes gràfiques et donaran detalls de les despeses i ingressos per etiqueta, compte, categoria o pressupost.', - 'reports_report_tag_incomeAndExpensesChart' => 'Aquesta gràfica mostra les teves despeses i ingressos per etiqueta.', + 'reports_report_tag_intro' => 'Aquest informe et donarà detalls d\'una o més etiquetes.', + 'reports_report_tag_pieCharts' => 'Aquestes gràfiques et donaran detalls de les despeses i ingressos per etiqueta, compte, categoria o pressupost.', + 'reports_report_tag_incomeAndExpensesChart' => 'Aquesta gràfica mostra les teves despeses i ingressos per etiqueta.', 'reports_report_budget_intro' => 'Aquest informe et donarà detalls d\'un o més pressupostos.', 'reports_report_budget_pieCharts' => 'Aquestes gràfiques et donaran detalls de les despeses per pressupost o per compte.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Al costat d\'aquesta barra de progrés hi ha dos botons (+ i -) per afegir o treure diners de cada guardiola.', 'piggy-banks_index_accountStatus' => 'Per cada compte d\'actius amb una guardiola com a mínim, el seu estat es llista en aquesta taula.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Quin és el teu objectiu? Un nou sofà, una càmera, diners per emergències?', 'piggy-banks_create_date' => 'Pots establir una data objectiu o una data límit per la teva guardiola.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Fes servir les factures per fer el seguiment als diners que deguis a cada període. Pensa en despeses com el lloguer, assegurança o el pagament de la hipoteca.', 'bills_create_name' => 'Usa noms descriptius com "Lloguer" o "Assegurança de salut".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Selecciona una quantitat mínima i màxima per aquesta factura.', 'bills_create_repeat_freq_holder' => 'La majoria de factures es repeteixen mensualment, però pots establir una altra freqüència aquí.', 'bills_create_skip_holder' => 'Si una factura es repeteix cada 2 setmanes, el camp "ometre" s\'ha d\'establir a "1" per saltar cada altra setmana.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Fes servir aquest botó per veure quines transaccions coincideixen amb la regla.', 'rules_create_actions' => 'Estableix tantes accions com vulguis.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Hi ha més opcions disponibles sota aquestes pestanyes.', diff --git a/resources/lang/ca_ES/list.php b/resources/lang/ca_ES/list.php index 04caca0d4a..eaafe83af6 100644 --- a/resources/lang/ca_ES/list.php +++ b/resources/lang/ca_ES/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Botons', - 'icon' => 'Icona', - 'id' => 'ID', - 'create_date' => 'Data de creació', - 'update_date' => 'Data d\'actualització', - 'updated_at' => 'Data d\'actualització', - 'balance_before' => 'Balanç abans de', - 'balance_after' => 'Balanç després de', - 'name' => 'Nom', - 'role' => 'Rol', - 'currentBalance' => 'Saldo actual', - 'linked_to_rules' => 'Regles rellevants', - 'active' => 'Està actiu?', - 'percentage' => '%', - 'recurring_transaction' => 'Transacció periòdica', - 'next_due' => 'Pròxim venciment', - 'transaction_type' => 'Tipus', - 'lastActivity' => 'Darrera activitat', - 'balanceDiff' => 'Diferència de saldo', - 'other_meta_data' => 'Altres meta dades', - 'invited_at' => 'Convidat el', - 'expires' => 'La invitació venç el', - 'invited_by' => 'Convidat per', - 'invite_link' => 'Enllaç d\'invitació', - 'account_type' => 'Tipus de compte', - 'created_at' => 'Data de creació', - 'account' => 'Compte', - 'external_url' => 'URL extern', - 'matchingAmount' => 'Quantitat', - 'destination' => 'Destí', - 'source' => 'Origen', - 'next_expected_match' => 'Pròxima coincidència esperada', - 'automatch' => 'Cercar coincidència automàticament?', + 'buttons' => 'Botons', + 'icon' => 'Icona', + 'id' => 'ID', + 'create_date' => 'Data de creació', + 'update_date' => 'Data d\'actualització', + 'updated_at' => 'Data d\'actualització', + 'balance_before' => 'Balanç abans de', + 'balance_after' => 'Balanç després de', + 'name' => 'Nom', + 'role' => 'Rol', + 'currentBalance' => 'Saldo actual', + 'linked_to_rules' => 'Regles rellevants', + 'active' => 'Està actiu?', + 'percentage' => '%', + 'recurring_transaction' => 'Transacció periòdica', + 'next_due' => 'Pròxim venciment', + 'transaction_type' => 'Tipus', + 'lastActivity' => 'Darrera activitat', + 'balanceDiff' => 'Diferència de saldo', + 'other_meta_data' => 'Altres meta dades', + 'invited_at' => 'Convidat el', + 'expires' => 'La invitació venç el', + 'invited_by' => 'Convidat per', + 'invite_link' => 'Enllaç d\'invitació', + 'account_type' => 'Tipus de compte', + 'created_at' => 'Data de creació', + 'account' => 'Compte', + 'external_url' => 'URL extern', + 'matchingAmount' => 'Quantitat', + 'destination' => 'Destí', + 'source' => 'Origen', + 'next_expected_match' => 'Pròxima coincidència esperada', + 'automatch' => 'Cercar coincidència automàticament?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Repeticions', 'description' => 'Descripció', 'amount' => 'Quantitat', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Compte amb bunq', 'file_name' => 'Nom del fitxer', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Mida del fitxer', - 'file_type' => 'Tipus de fitxer', - 'attached_to' => 'Adjuntat a', - 'file_exists' => 'El fitxer existeix', - 'spectre_bank' => 'Banc', - 'spectre_last_use' => 'Darrer inici de sessió', - 'spectre_status' => 'Estat', - 'bunq_payment_id' => 'ID de pagament bunq', - 'repetitions' => 'Repeticions', - 'title' => 'Títol', - 'transaction_s' => 'Transacció(ns)', - 'field' => 'Camp', - 'value' => 'Valor', - 'interest' => 'Interès', - 'interest_period' => 'Període d\'interès', - 'liability_type' => 'Tipus de passiu', - 'liability_direction' => 'Passiu entrant/sortint', - 'end_date' => 'Data de fi', - 'payment_info' => 'Informació de pagament', - 'expected_info' => 'Següent transacció esperada', - 'start_date' => 'Data d\'inici', - 'trigger' => 'Activador', - 'response' => 'Resposta', - 'delivery' => 'Lliurament', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Mida del fitxer', + 'file_type' => 'Tipus de fitxer', + 'attached_to' => 'Adjuntat a', + 'file_exists' => 'El fitxer existeix', + 'spectre_bank' => 'Banc', + 'spectre_last_use' => 'Darrer inici de sessió', + 'spectre_status' => 'Estat', + 'bunq_payment_id' => 'ID de pagament bunq', + 'repetitions' => 'Repeticions', + 'title' => 'Títol', + 'transaction_s' => 'Transacció(ns)', + 'field' => 'Camp', + 'value' => 'Valor', + 'interest' => 'Interès', + 'interest_period' => 'Període d\'interès', + 'liability_type' => 'Tipus de passiu', + 'liability_direction' => 'Passiu entrant/sortint', + 'end_date' => 'Data de fi', + 'payment_info' => 'Informació de pagament', + 'expected_info' => 'Següent transacció esperada', + 'start_date' => 'Data d\'inici', + 'trigger' => 'Activador', + 'response' => 'Resposta', + 'delivery' => 'Lliurament', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ca_ES/pagination.php b/resources/lang/ca_ES/pagination.php index f457079a9b..b7d8ac63d4 100644 --- a/resources/lang/ca_ES/pagination.php +++ b/resources/lang/ca_ES/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ca_ES/passwords.php b/resources/lang/ca_ES/passwords.php index 485e806f5d..5435edc856 100644 --- a/resources/lang/ca_ES/passwords.php +++ b/resources/lang/ca_ES/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ca_ES/rules.php b/resources/lang/ca_ES/rules.php index 1ad0acaf56..69670696ec 100644 --- a/resources/lang/ca_ES/rules.php +++ b/resources/lang/ca_ES/rules.php @@ -1,6 +1,5 @@ 'Firefly III no pot trobar la subscripció ":name"', 'no_notes_to_move' => 'La transacció no té cap nota que moure al camp de descripció', 'no_tags_to_remove' => 'La transacció no té etiquetes que eliminar', + 'not_withdrawal' => 'La transacció no és una retirada', + 'not_deposit' => 'La transacció no és un dipòsit', 'cannot_find_tag' => 'Firefly III no ha pogut trobar l\'etiqueta ":tag"', 'cannot_find_asset' => 'Firefly III no ha pogut trobar el compte d\'actius ":name"', 'cannot_find_accounts' => 'Firefly III no ha pogut trobar el compte destí o font', diff --git a/resources/lang/ca_ES/validation.php b/resources/lang/ca_ES/validation.php index ce8efbd7a8..69bef504a0 100644 --- a/resources/lang/ca_ES/validation.php +++ b/resources/lang/ca_ES/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'A l\'array li falta la clàusula "where"', - 'missing_update' => 'A l\'array li falta la clàusula "update"', - 'invalid_where_key' => 'El JSON conté una clau invàlida per la clàusula "where"', - 'invalid_update_key' => 'El JSON conté una clau invàlida per la clàusula "update"', - 'invalid_query_data' => 'Hi ha dades invàlides al camp %s:%s de la consulta.', - 'invalid_query_account_type' => 'La consulta conté comptes de diferents tipus, cosa que no és permesa.', - 'invalid_query_currency' => 'La consulta conté comptes amb diferents preferències de moneda, cosa que no és permesa.', - 'iban' => 'Aquest IBAN no és vàlid.', - 'zero_or_more' => 'El valor no pot ser negatiu.', - 'date_or_time' => 'El valor ha de ser una data o hora vàlida (ISO 8601).', - 'source_equals_destination' => 'El compte d\'origen és el mateix que el compte de destí.', - 'unique_account_number_for_user' => 'Sembla que el número de compte ja està en ús.', - 'unique_iban_for_user' => 'Sembla que l\'IBAN ja està en ús.', - 'deleted_user' => 'Per restriccions de seguretat, no et pots registrar amb aquesta adreça de correu electrònic.', - 'rule_trigger_value' => 'Aquest valor és invàlid per l\'activador seleccionat.', - 'rule_action_value' => 'Aquest valor és invàlid per l\'acció seleccionada.', - 'file_already_attached' => 'El fitxer ":name" ja s\'havia afegit a aquest objecte.', - 'file_attached' => 'El fitxer ":name" s\'ha pujat satisfactòriament.', - 'must_exist' => 'L\'ID del camp :attribute no existeix a la base de dades.', - 'all_accounts_equal' => 'Tots els comptes d\'aquest camp han de ser iguals.', - 'group_title_mandatory' => 'El títol de grup és obligatori quan hi ha més d\'una transacció.', - 'transaction_types_equal' => 'Totes les divisions han de ser del mateix tipus.', - 'invalid_transaction_type' => 'Tipus de transacció invàlid.', - 'invalid_selection' => 'La selecció és invàlida.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Necessites almenys una transacció.', - 'recurring_transaction_id' => 'Necessites almenys una transacció.', - 'need_id_to_match' => 'Has d\'enviar aquesta entrada amb un ID perquè l\'API sigui capaç de comparar-lo.', - 'too_many_unmatched' => 'No s\'han pogut relacionar massa transaccions a les seves entrades respectives de la base de dades. Assegura\'t que les entrades existents tenen un ID vàlid.', - 'id_does_not_match' => 'L\'ID enviat #:id no coincideix amb l\'ID esperat. Assegura\'t que encaixa, o omet el camp.', - 'at_least_one_repetition' => 'Necessites almenys una repetició.', - 'require_repeat_until' => 'Fa falta un nombre de repeticions, o una data de finalització (repeat_until). No ambdues.', - 'require_currency_info' => 'El contingut d\'aquest camp no és vàlid sense informació de la moneda.', - 'not_transfer_account' => 'Aquest compte no és un compte que puguis fer servir per transferències.', - 'require_currency_amount' => 'El contingut d\'aquest camp no és vàlid sense informació de la quantitat estrangera.', - 'require_foreign_currency' => 'Cal introduir un número a aquest camp', - 'require_foreign_dest' => 'El valor d\'aquest camp ha de quadrar amb la moneda del compte destí.', - 'require_foreign_src' => 'El valor d\'aquest camp ha de quadrar amb la moneda del compte font.', - 'equal_description' => 'La descripció de la transacció no hauria de ser igual a la descripció global.', - 'file_invalid_mime' => 'El fitxer ":name" és de tipus ":mime", el qual no s\'accepta com a pujada.', - 'file_too_large' => 'El fitxer ":name" és massa gran.', - 'belongs_to_user' => 'El valor de :attribute és desconegut.', - 'accepted' => 'El camp :attribute s\'ha d\'acceptar.', - 'bic' => 'Això no és un BIC vàlid.', - 'at_least_one_trigger' => 'La regla ha de tenir almenys un activador.', - 'at_least_one_active_trigger' => 'La regla ha de tenir almenys un activador actiu.', - 'at_least_one_action' => 'La regla ha de tenir almenys una acció.', - 'at_least_one_active_action' => 'La regla ha de tenir almenys una acció activa.', - 'base64' => 'Aquesta dada codificada en base64 no és vàlida.', - 'model_id_invalid' => 'L\'ID donada sembla invàlida per aquest model.', - 'less' => ':attribute ha de ser inferior a 10.000.000', - 'active_url' => 'El camp :attribute no és un URL vàlid.', - 'after' => 'El camp :attribute ha de ser una data posterior a :date.', - 'date_after' => 'La data d\'inici ha de ser prèvia a la data de fi.', - 'alpha' => 'El camp :attribute només pot contenir lletres.', - 'alpha_dash' => 'El camp :attribute només pot contenir lletres, números i guions.', - 'alpha_num' => 'El camp :attribute només pot contenir lletres i números.', - 'array' => 'El camp :attribute ha de ser un vector.', - 'unique_for_user' => 'Ja hi ha una entrada amb aquest :attribute.', - 'before' => 'El camp :attribute ha de ser una data anterior a :date.', - 'unique_object_for_user' => 'Aquest nom ja és en ús.', - 'unique_account_for_user' => 'Aquest nom de compte ja és en ús.', + 'bad_type_source' => 'Firefly III no pot determinar el tipus de transacció a partir d\'aquest compte font.', + 'bad_type_destination' => 'Firefly III no pot determinar el tipus de transacció a partir d\'aquest compte de destí.', + 'missing_where' => 'A l\'array li falta la clàusula "where"', + 'missing_update' => 'A l\'array li falta la clàusula "update"', + 'invalid_where_key' => 'El JSON conté una clau invàlida per la clàusula "where"', + 'invalid_update_key' => 'El JSON conté una clau invàlida per la clàusula "update"', + 'invalid_query_data' => 'Hi ha dades invàlides al camp %s:%s de la consulta.', + 'invalid_query_account_type' => 'La consulta conté comptes de diferents tipus, cosa que no és permesa.', + 'invalid_query_currency' => 'La consulta conté comptes amb diferents preferències de moneda, cosa que no és permesa.', + 'iban' => 'Aquest IBAN no és vàlid.', + 'zero_or_more' => 'El valor no pot ser negatiu.', + 'more_than_zero' => 'El valor ha de ser superior a zero.', + 'more_than_zero_correct' => 'El valor ha de ser zero o més.', + 'no_asset_account' => 'Aquest no és un compte d\'actius.', + 'date_or_time' => 'El valor ha de ser una data o hora vàlida (ISO 8601).', + 'source_equals_destination' => 'El compte d\'origen és el mateix que el compte de destí.', + 'unique_account_number_for_user' => 'Sembla que el número de compte ja està en ús.', + 'unique_iban_for_user' => 'Sembla que l\'IBAN ja està en ús.', + 'reconciled_forbidden_field' => 'Aquesta transacció ja està reconciliada, no pots canviar el ":field"', + 'deleted_user' => 'Per restriccions de seguretat, no et pots registrar amb aquesta adreça de correu electrònic.', + 'rule_trigger_value' => 'Aquest valor és invàlid per l\'activador seleccionat.', + 'rule_action_value' => 'Aquest valor és invàlid per l\'acció seleccionada.', + 'file_already_attached' => 'El fitxer ":name" ja s\'havia afegit a aquest objecte.', + 'file_attached' => 'El fitxer ":name" s\'ha pujat satisfactòriament.', + 'must_exist' => 'L\'ID del camp :attribute no existeix a la base de dades.', + 'all_accounts_equal' => 'Tots els comptes d\'aquest camp han de ser iguals.', + 'group_title_mandatory' => 'El títol de grup és obligatori quan hi ha més d\'una transacció.', + 'transaction_types_equal' => 'Totes les divisions han de ser del mateix tipus.', + 'invalid_transaction_type' => 'Tipus de transacció invàlid.', + 'invalid_selection' => 'La selecció és invàlida.', + 'belongs_user' => 'Aquest valor està enllaçat a un objecte que sembla que no existeix.', + 'belongs_user_or_user_group' => 'Aquest valor està enllaçat a un objecte que sembla no existir a la teva administració financera actual.', + 'at_least_one_transaction' => 'Necessites almenys una transacció.', + 'recurring_transaction_id' => 'Necessites almenys una transacció.', + 'need_id_to_match' => 'Has d\'enviar aquesta entrada amb un ID perquè l\'API sigui capaç de comparar-lo.', + 'too_many_unmatched' => 'No s\'han pogut relacionar massa transaccions a les seves entrades respectives de la base de dades. Assegura\'t que les entrades existents tenen un ID vàlid.', + 'id_does_not_match' => 'L\'ID enviat #:id no coincideix amb l\'ID esperat. Assegura\'t que encaixa, o omet el camp.', + 'at_least_one_repetition' => 'Necessites almenys una repetició.', + 'require_repeat_until' => 'Fa falta un nombre de repeticions, o una data de finalització (repeat_until). No ambdues.', + 'require_currency_info' => 'El contingut d\'aquest camp no és vàlid sense informació de la moneda.', + 'not_transfer_account' => 'Aquest compte no és un compte que puguis fer servir per transferències.', + 'require_currency_amount' => 'El contingut d\'aquest camp no és vàlid sense informació de la quantitat estrangera.', + 'require_foreign_currency' => 'Cal introduir un número a aquest camp', + 'require_foreign_dest' => 'El valor d\'aquest camp ha de quadrar amb la moneda del compte destí.', + 'require_foreign_src' => 'El valor d\'aquest camp ha de quadrar amb la moneda del compte font.', + 'equal_description' => 'La descripció de la transacció no hauria de ser igual a la descripció global.', + 'file_invalid_mime' => 'El fitxer ":name" és de tipus ":mime", el qual no s\'accepta com a pujada.', + 'file_too_large' => 'El fitxer ":name" és massa gran.', + 'belongs_to_user' => 'El valor de :attribute és desconegut.', + 'accepted' => 'El camp :attribute s\'ha d\'acceptar.', + 'bic' => 'Això no és un BIC vàlid.', + 'at_least_one_trigger' => 'La regla ha de tenir almenys un activador.', + 'at_least_one_active_trigger' => 'La regla ha de tenir almenys un activador actiu.', + 'at_least_one_action' => 'La regla ha de tenir almenys una acció.', + 'at_least_one_active_action' => 'La regla ha de tenir almenys una acció activa.', + 'base64' => 'Aquesta dada codificada en base64 no és vàlida.', + 'model_id_invalid' => 'L\'ID donada sembla invàlida per aquest model.', + 'less' => ':attribute ha de ser inferior a 10.000.000', + 'active_url' => 'El camp :attribute no és un URL vàlid.', + 'after' => 'El camp :attribute ha de ser una data posterior a :date.', + 'date_after' => 'La data d\'inici ha de ser prèvia a la data de fi.', + 'alpha' => 'El camp :attribute només pot contenir lletres.', + 'alpha_dash' => 'El camp :attribute només pot contenir lletres, números i guions.', + 'alpha_num' => 'El camp :attribute només pot contenir lletres i números.', + 'array' => 'El camp :attribute ha de ser un vector.', + 'unique_for_user' => 'Ja hi ha una entrada amb aquest :attribute.', + 'before' => 'El camp :attribute ha de ser una data anterior a :date.', + 'unique_object_for_user' => 'Aquest nom ja és en ús.', + 'unique_account_for_user' => 'Aquest nom de compte ja és en ús.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => 'El camp :attribute ha d\'estar entre :min i :max.', + 'between.file' => 'El camp :attribute ha de tenir entre :min i :max kilobytes.', + 'between.string' => 'El camp :attribute ha de tenir entre :min i :max caràcters.', + 'between.array' => 'El camp :attribute ha de tenir entre :min i :max elements.', + 'boolean' => 'El camp :attribute ha de ser cert o fals.', + 'confirmed' => 'La confirmació del camp :attribute no coincideix.', + 'date' => 'El camp :attribute no és una data vàlida.', + 'date_format' => 'El camp :attribute no coincideix amb el format :format.', + 'different' => 'Els camps :attribute i :other han de ser diferents.', + 'digits' => 'El camp :attribute ha de tenir :digits dígits.', + 'digits_between' => 'El camp :attribute ha de tenir entre :min i :max dígits.', + 'email' => 'El camp :attribute ha de ser una adreça electrònica vàlida.', + 'filled' => 'El camp :attribute és obligatori.', + 'exists' => 'El camp :attribute seleccionat no és vàlid.', + 'image' => 'El camp :attribute ha de ser una imatge.', + 'in' => 'El camp :attribute seleccionat no és vàlid.', + 'integer' => 'El camp :attribute ha de ser un nombre enter.', + 'ip' => 'El camp :attribute ha de ser una adreça IP vàlida.', + 'json' => 'El camp :attribute ha de ser una cadena JSON vàlida.', + 'max.numeric' => 'El camp :attribute no pot ser més gran que :max.', + 'max.file' => 'El camp :attribute no pot tenir més de :max kilobytes.', + 'max.string' => 'El camp :attribute no pot tenir més de :max caràcters.', + 'max.array' => 'El camp :attribute no pot tenir més de :max elements.', + 'mimes' => 'El camp :attribute ha de ser un fitxer del tipus: :values.', + 'min.numeric' => 'El :attribute ha de ser com a mínim :min.', + 'lte.numeric' => 'El camp :attribute ha de ser inferior o igual a :value.', + 'min.file' => 'El camp :attribute ha de tenir com a mínim :min kilobytes.', + 'min.string' => 'El camp :attribute ha de tenir com a mínim :min caràcters.', + 'min.array' => 'El camp :attribute ha de tenir com a mínim :min elements.', + 'not_in' => 'El camp :attribute seleccionat no és vàlid.', + 'numeric' => 'El camp :attribute ha de ser un número.', + 'scientific_notation' => 'El :attribute no pot fer servir notació científica.', + 'numeric_native' => 'La quantitat nativa ha de ser un número.', + 'numeric_destination' => 'La quantitat de destí ha de ser un número.', + 'numeric_source' => 'La quantitat d\'origen ha de ser un número.', + 'regex' => 'El format de :attribute no és vàlid.', + 'required' => 'El camp :attribute és obligatori.', + 'required_if' => 'El camp :attribute és obligatori quan :other és :value.', + 'required_unless' => 'El camp :attribute és obligatori excepte quan :other és :values.', + 'required_with' => 'El camp :attribute és obligatori quan :values hi sigui present.', + 'required_with_all' => 'El camp :attribute és obligatori quan :values hi sigui present.', + 'required_without' => 'El camp :attribute és obligatori quan :values no hi sigui present.', + 'required_without_all' => 'El camp :attribute és obligatori quan no hi ha cap d\'aquests valors: :values.', + 'same' => 'Els camps :attribute i :other han de coincidir.', + 'size.numeric' => 'El camp :attribute ha de ser :size.', + 'amount_min_over_max' => 'La quantitat mínima no pot ser més gran que la quantitat màxima.', + 'size.file' => 'La mida de :attribute ha de ser :size kilobytes.', + 'size.string' => 'El camp :attribute ha de tenir :size caràcters.', + 'size.array' => 'El camp :attribute ha de contenir :size elements.', + 'unique' => ':attribute ja s’està utilitzant.', + 'string' => 'El camp :attribute ha de ser una cadena de caràcters.', + 'url' => 'El format de :attribute no és vàlid.', + 'timezone' => 'El camp :attribute ha de ser una zona vàlida.', + '2fa_code' => 'El camp :attribute no és vàlid.', + 'dimensions' => 'El camp :attribute té dimensions d\'imatge incorrectes.', + 'distinct' => 'El camp :attribute té un valor duplicat.', + 'file' => 'El camp :attribute ha de ser un fitxer.', + 'in_array' => 'El camp :attribute no existeix en :other.', + 'present' => 'El camp :attribute ha de ser-hi.', + 'amount_zero' => 'La quantitat total no pot ser zero.', + 'current_target_amount' => 'La quantitat actual ha de ser inferior a la quantitat objectiu.', + 'unique_piggy_bank_for_user' => 'El nom de la guardiola ha de ser únic.', + 'unique_object_group' => 'El nom del grup ha de ser únic', + 'starts_with' => 'El valor ha de començar per :values.', + 'unique_webhook' => 'Ja tens un webhook amb aquesta combinació d\'URL, activador, resposta i lliurament.', + 'unique_existing_webhook' => 'Ja tens un altre webhook amb aquesta combinació d\'URL, activador, resposta i lliurament.', + 'same_account_type' => 'Ambdues comptes han de ser del mateix tipus', + 'same_account_currency' => 'Ambdues comptes han de tenir la mateixa configuració de moneda', - 'between.numeric' => 'El camp :attribute ha d\'estar entre :min i :max.', - 'between.file' => 'El camp :attribute ha de tenir entre :min i :max kilobytes.', - 'between.string' => 'El camp :attribute ha de tenir entre :min i :max caràcters.', - 'between.array' => 'El camp :attribute ha de tenir entre :min i :max elements.', - 'boolean' => 'El camp :attribute ha de ser cert o fals.', - 'confirmed' => 'La confirmació del camp :attribute no coincideix.', - 'date' => 'El camp :attribute no és una data vàlida.', - 'date_format' => 'El camp :attribute no coincideix amb el format :format.', - 'different' => 'Els camps :attribute i :other han de ser diferents.', - 'digits' => 'El camp :attribute ha de tenir :digits dígits.', - 'digits_between' => 'El camp :attribute ha de tenir entre :min i :max dígits.', - 'email' => 'El camp :attribute ha de ser una adreça electrònica vàlida.', - 'filled' => 'El camp :attribute és obligatori.', - 'exists' => 'El camp :attribute seleccionat no és vàlid.', - 'image' => 'El camp :attribute ha de ser una imatge.', - 'in' => 'El camp :attribute seleccionat no és vàlid.', - 'integer' => 'El camp :attribute ha de ser un nombre enter.', - 'ip' => 'El camp :attribute ha de ser una adreça IP vàlida.', - 'json' => 'El camp :attribute ha de ser una cadena JSON vàlida.', - 'max.numeric' => 'El camp :attribute no pot ser més gran que :max.', - 'max.file' => 'El camp :attribute no pot tenir més de :max kilobytes.', - 'max.string' => 'El camp :attribute no pot tenir més de :max caràcters.', - 'max.array' => 'El camp :attribute no pot tenir més de :max elements.', - 'mimes' => 'El camp :attribute ha de ser un fitxer del tipus: :values.', - 'min.numeric' => 'El :attribute ha de ser com a mínim :min.', - 'lte.numeric' => 'El camp :attribute ha de ser inferior o igual a :value.', - 'min.file' => 'El camp :attribute ha de tenir com a mínim :min kilobytes.', - 'min.string' => 'El camp :attribute ha de tenir com a mínim :min caràcters.', - 'min.array' => 'El camp :attribute ha de tenir com a mínim :min elements.', - 'not_in' => 'El camp :attribute seleccionat no és vàlid.', - 'numeric' => 'El camp :attribute ha de ser un número.', - 'numeric_native' => 'La quantitat nativa ha de ser un número.', - 'numeric_destination' => 'La quantitat de destí ha de ser un número.', - 'numeric_source' => 'La quantitat d\'origen ha de ser un número.', - 'regex' => 'El format de :attribute no és vàlid.', - 'required' => 'El camp :attribute és obligatori.', - 'required_if' => 'El camp :attribute és obligatori quan :other és :value.', - 'required_unless' => 'El camp :attribute és obligatori excepte quan :other és :values.', - 'required_with' => 'El camp :attribute és obligatori quan :values hi sigui present.', - 'required_with_all' => 'El camp :attribute és obligatori quan :values hi sigui present.', - 'required_without' => 'El camp :attribute és obligatori quan :values no hi sigui present.', - 'required_without_all' => 'El camp :attribute és obligatori quan no hi ha cap d\'aquests valors: :values.', - 'same' => 'Els camps :attribute i :other han de coincidir.', - 'size.numeric' => 'El camp :attribute ha de ser :size.', - 'amount_min_over_max' => 'La quantitat mínima no pot ser més gran que la quantitat màxima.', - 'size.file' => 'La mida de :attribute ha de ser :size kilobytes.', - 'size.string' => 'El camp :attribute ha de tenir :size caràcters.', - 'size.array' => 'El camp :attribute ha de contenir :size elements.', - 'unique' => ':attribute ja s’està utilitzant.', - 'string' => 'El camp :attribute ha de ser una cadena de caràcters.', - 'url' => 'El format de :attribute no és vàlid.', - 'timezone' => 'El camp :attribute ha de ser una zona vàlida.', - '2fa_code' => 'El camp :attribute no és vàlid.', - 'dimensions' => 'El camp :attribute té dimensions d\'imatge incorrectes.', - 'distinct' => 'El camp :attribute té un valor duplicat.', - 'file' => 'El camp :attribute ha de ser un fitxer.', - 'in_array' => 'El camp :attribute no existeix en :other.', - 'present' => 'El camp :attribute ha de ser-hi.', - 'amount_zero' => 'La quantitat total no pot ser zero.', - 'current_target_amount' => 'La quantitat actual ha de ser inferior a la quantitat objectiu.', - 'unique_piggy_bank_for_user' => 'El nom de la guardiola ha de ser únic.', - 'unique_object_group' => 'El nom del grup ha de ser únic', - 'starts_with' => 'El valor ha de començar per :values.', - 'unique_webhook' => 'Ja tens un webhook amb aquesta combinació d\'URL, activador, resposta i lliurament.', - 'unique_existing_webhook' => 'Ja tens un altre webhook amb aquesta combinació d\'URL, activador, resposta i lliurament.', - 'same_account_type' => 'Ambdues comptes han de ser del mateix tipus', - 'same_account_currency' => 'Ambdues comptes han de tenir la mateixa configuració de moneda', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Aquesta contrasenya no és segura. Si us plau, prova-ho de nou. Per més informació, visita https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Tipus de repetició invàlid per transaccions periòdiques.', - 'valid_recurrence_rep_moment' => 'Moment de repetició invàlid per aquest tipus de repetició.', - 'invalid_account_info' => 'Informació de compte invàlida.', - 'attributes' => [ + 'secure_password' => 'Aquesta contrasenya no és segura. Si us plau, prova-ho de nou. Per més informació, visita https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Tipus de repetició invàlid per transaccions periòdiques.', + 'valid_recurrence_rep_moment' => 'Moment de repetició invàlid per aquest tipus de repetició.', + 'invalid_account_info' => 'Informació de compte invàlida.', + 'attributes' => [ 'email' => 'adreça de correu electrònic', 'description' => 'descripció', 'amount' => 'quantitat', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Necessites obtenir un ID de compte d\'origen vàlid i/o un nom de compte d\'origen vàlid per continuar.', - 'withdrawal_source_bad_data' => '[a] No s\'ha pogut trobar un compte font vàlid en cercar per l\'ID ":id" o el nom ":name".', - 'withdrawal_dest_need_data' => '[a] Cal obtenir un identificador o nom del compte destí per a continuar.', - 'withdrawal_dest_bad_data' => 'No s\'ha pogut trobar un compte de destí vàlid buscant l\'ID ":id" o el nom ":name".', + 'withdrawal_source_need_data' => 'Necessites obtenir un ID de compte d\'origen vàlid i/o un nom de compte d\'origen vàlid per continuar.', + 'withdrawal_source_bad_data' => '[a] No s\'ha pogut trobar un compte font vàlid en cercar per l\'ID ":id" o el nom ":name".', + 'withdrawal_dest_need_data' => '[a] Cal obtenir un identificador o nom del compte destí per a continuar.', + 'withdrawal_dest_bad_data' => 'No s\'ha pogut trobar un compte de destí vàlid buscant l\'ID ":id" o el nom ":name".', - 'withdrawal_dest_iban_exists' => 'L\'IBAN de destí ja està sent utilitzat per un altre compte d\'actius o passius, i no pot ser utilitzat com a destinació de retirada.', - 'deposit_src_iban_exists' => 'L\'IBAN font ja està sent utilitzat per un altre compte d\'actius o passius, i no pot ser utilitzat com a destinació de dipòsit.', + 'withdrawal_dest_iban_exists' => 'L\'IBAN de destí ja està sent utilitzat per un altre compte d\'actius o passius, i no pot ser utilitzat com a destinació de retirada.', + 'deposit_src_iban_exists' => 'L\'IBAN font ja està sent utilitzat per un altre compte d\'actius o passius, i no pot ser utilitzat com a destinació de dipòsit.', - 'reconciliation_source_bad_data' => 'No s\'ha pogut trobar un compte de consolidació vàlid al cercar per la ID ":id" o el nom ":name".', + 'reconciliation_source_bad_data' => 'No s\'ha pogut trobar un compte de consolidació vàlid al cercar per la ID ":id" o el nom ":name".', - 'generic_source_bad_data' => '[e] No s\'ha pogut trobar un compte font vàlid en cercar per l\'identificador ":id" o el nom ":name".', + 'generic_source_bad_data' => '[e] No s\'ha pogut trobar un compte font vàlid en cercar per l\'identificador ":id" o el nom ":name".', - 'deposit_source_need_data' => 'Necessites obtenir un ID de compte d\'origen vàlid i/o un nom de compte d\'origen vàlid per continuar.', - 'deposit_source_bad_data' => '[b] No s\'ha pogut trobar un compte font vàlid en cercar per l\'identificador ":id" o el nom ":name".', - 'deposit_dest_need_data' => '[b] Cal obtenir un identificador i/o nom vàlid d\'un compte destí per a continuar.', - 'deposit_dest_bad_data' => 'No s\'ha pogut trobar un compte de destí vàlid buscant l\'ID ":id" o el nom ":name".', - 'deposit_dest_wrong_type' => 'El compte de destí enviat no és del tipus correcte.', + 'deposit_source_need_data' => 'Necessites obtenir un ID de compte d\'origen vàlid i/o un nom de compte d\'origen vàlid per continuar.', + 'deposit_source_bad_data' => '[b] No s\'ha pogut trobar un compte font vàlid en cercar per l\'identificador ":id" o el nom ":name".', + 'deposit_dest_need_data' => '[b] Cal obtenir un identificador i/o nom vàlid d\'un compte destí per a continuar.', + 'deposit_dest_bad_data' => 'No s\'ha pogut trobar un compte de destí vàlid buscant l\'ID ":id" o el nom ":name".', + 'deposit_dest_wrong_type' => 'El compte de destí enviat no és del tipus correcte.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Necessites obtenir un ID de compte d\'origen vàlid i/o un nom de compte d\'origen vàlid per continuar.', + 'transfer_source_bad_data' => '[c] No s\'ha pogut trobar un compte font vàlid en cercar per l\'identificador ":id" o el nom ":name".', + 'transfer_dest_need_data' => '[c] Cal obtenir un identificador i/o nom vàlid d\'un compte destí per a continuar.', + 'transfer_dest_bad_data' => 'No s\'ha pogut trobar un compte de destí vàlid buscant l\'ID ":id" o el nom ":name".', + 'need_id_in_edit' => 'Cada divisió ha de tenir transaction_journal_id (ID vàlid o 0).', - 'transfer_source_need_data' => 'Necessites obtenir un ID de compte d\'origen vàlid i/o un nom de compte d\'origen vàlid per continuar.', - 'transfer_source_bad_data' => '[c] No s\'ha pogut trobar un compte font vàlid en cercar per l\'identificador ":id" o el nom ":name".', - 'transfer_dest_need_data' => '[c] Cal obtenir un identificador i/o nom vàlid d\'un compte destí per a continuar.', - 'transfer_dest_bad_data' => 'No s\'ha pogut trobar un compte de destí vàlid buscant l\'ID ":id" o el nom ":name".', - 'need_id_in_edit' => 'Cada divisió ha de tenir transaction_journal_id (ID vàlid o 0).', + 'ob_source_need_data' => 'Necessites obtenir un ID de compte d\'origen vàlid i/o un nom de compte d\'origen vàlid per continuar.', + 'lc_source_need_data' => 'Necessites obtenir un ID de compte d\'origen vàlid per continuar.', + 'ob_dest_need_data' => '[d] Cal obtenir un identificador i/o nom vàlid d\'un compte destí per a continuar.', + 'ob_dest_bad_data' => 'No s\'ha pogut trobar un compte de destí vàlid buscant l\'ID ":id" o el nom ":name".', + 'reconciliation_either_account' => 'Per enviar una consolidació, has d\'enviar un compte d\'origen o de destí. Ni ambdós, ni cap.', - 'ob_source_need_data' => 'Necessites obtenir un ID de compte d\'origen vàlid i/o un nom de compte d\'origen vàlid per continuar.', - 'lc_source_need_data' => 'Necessites obtenir un ID de compte d\'origen vàlid per continuar.', - 'ob_dest_need_data' => '[d] Cal obtenir un identificador i/o nom vàlid d\'un compte destí per a continuar.', - 'ob_dest_bad_data' => 'No s\'ha pogut trobar un compte de destí vàlid buscant l\'ID ":id" o el nom ":name".', - 'reconciliation_either_account' => 'Per enviar una consolidació, has d\'enviar un compte d\'origen o de destí. Ni ambdós, ni cap.', + 'generic_invalid_source' => 'No pots fer servir aquest compte com a compte d\'origen.', + 'generic_invalid_destination' => 'No pots fer servir aquest compte com a compte de destí.', - 'generic_invalid_source' => 'No pots fer servir aquest compte com a compte d\'origen.', - 'generic_invalid_destination' => 'No pots fer servir aquest compte com a compte de destí.', + 'generic_no_source' => 'Has de confirmar l\'informació del compte font, o afegir un identificador de transacció.', + 'generic_no_destination' => 'Has de confirmar la informació del compte de destinació, o introduïr un identificador de transacció.', - 'generic_no_source' => 'Has de confirmar l\'informació del compte font, o afegir un identificador de transacció.', - 'generic_no_destination' => 'Has de confirmar la informació del compte de destinació, o introduïr un identificador de transacció.', - - 'gte.numeric' => 'El camp :attribute ha de ser més gran o igual que :value.', - 'gt.numeric' => 'El camp :attribute ha de ser més gran que :value.', - 'gte.file' => 'El camp :attribute ha de tenir :value kilobytes o més.', - 'gte.string' => 'El camp :attribute ha de tenir :value caràcters o més.', - 'gte.array' => 'El camp :attribute ha de tenir :value elements o més.', + 'gte.numeric' => 'El camp :attribute ha de ser més gran o igual que :value.', + 'gt.numeric' => 'El camp :attribute ha de ser més gran que :value.', + 'gte.file' => 'El camp :attribute ha de tenir :value kilobytes o més.', + 'gte.string' => 'El camp :attribute ha de tenir :value caràcters o més.', + 'gte.array' => 'El camp :attribute ha de tenir :value elements o més.', 'amount_required_for_auto_budget' => 'Es requereix la quantitat.', 'auto_budget_amount_positive' => 'La quantitat ha de ser superior a zero.', + 'auto_budget_period_mandatory' => 'El període de pressupost automàtic és un camp obligatori.', // no access to administration: diff --git a/resources/lang/cs_CZ/api.php b/resources/lang/cs_CZ/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/cs_CZ/api.php +++ b/resources/lang/cs_CZ/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/cs_CZ/auth.php b/resources/lang/cs_CZ/auth.php index 34ea8c3c46..c07d4a1e2d 100644 --- a/resources/lang/cs_CZ/auth.php +++ b/resources/lang/cs_CZ/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Nesprávné přihlašovací údaje.', 'throttle' => 'Příliš mnoho pokusů o přihlášení. Zkuste to prosím znovu za :seconds sekund.', diff --git a/resources/lang/cs_CZ/breadcrumbs.php b/resources/lang/cs_CZ/breadcrumbs.php index e4a7544a0c..a7d39da5ef 100644 --- a/resources/lang/cs_CZ/breadcrumbs.php +++ b/resources/lang/cs_CZ/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Domů', - 'budgets' => 'Budgets', - 'subscriptions' => 'Subscriptions', - 'transactions' => 'Transactions', - 'title_expenses' => 'Expenses', - 'title_withdrawal' => 'Expenses', - 'title_revenue' => 'Revenue / income', - 'title_deposit' => 'Revenue / income', - 'title_transfer' => 'Transfers', - 'title_transfers' => 'Transfers', - 'edit_currency' => 'Upravit měnu „:name“', - 'delete_currency' => 'Odstranit měnu „:name“', - 'newPiggyBank' => 'Vytvořit novou pokladničku', - 'edit_piggyBank' => 'Upravit pokladničku „:name“', - 'preferences' => 'Předvolby', - 'profile' => 'Profil', - 'accounts' => 'Účty', - 'changePassword' => 'Změnit heslo', - 'change_email' => 'Změnit e-mailovou adresu', - 'bills' => 'Účtenky a faktury', - 'newBill' => 'Nová účtenka/faktura', - 'edit_bill' => 'Upravit účtenku/fakturu „:name“', - 'delete_bill' => 'Odstranit účtenku/fakturu „:name“', - 'reports' => 'Sestavy', - 'search_result' => 'Výsledky hledání pro „:query“', - 'withdrawal_list' => 'Výdaje', - 'Withdrawal_list' => 'Výdaje', - 'deposit_list' => 'Výnosy, příjmy a vklady', - 'transfer_list' => 'Převody', - 'transfers_list' => 'Převody', + 'home' => 'Domů', + 'budgets' => 'Budgets', + 'subscriptions' => 'Subscriptions', + 'transactions' => 'Transactions', + 'title_expenses' => 'Expenses', + 'title_withdrawal' => 'Expenses', + 'title_revenue' => 'Revenue / income', + 'title_deposit' => 'Revenue / income', + 'title_transfer' => 'Transfers', + 'title_transfers' => 'Transfers', + 'edit_currency' => 'Upravit měnu „:name“', + 'delete_currency' => 'Odstranit měnu „:name“', + 'newPiggyBank' => 'Vytvořit novou pokladničku', + 'edit_piggyBank' => 'Upravit pokladničku „:name“', + 'preferences' => 'Předvolby', + 'profile' => 'Profil', + 'accounts' => 'Účty', + 'changePassword' => 'Změnit heslo', + 'change_email' => 'Změnit e-mailovou adresu', + 'bills' => 'Účtenky a faktury', + 'newBill' => 'Nová účtenka/faktura', + 'edit_bill' => 'Upravit účtenku/fakturu „:name“', + 'delete_bill' => 'Odstranit účtenku/fakturu „:name“', + 'reports' => 'Sestavy', + 'search_result' => 'Výsledky hledání pro „:query“', + 'withdrawal_list' => 'Výdaje', + 'Withdrawal_list' => 'Výdaje', + 'deposit_list' => 'Výnosy, příjmy a vklady', + 'transfer_list' => 'Převody', + 'transfers_list' => 'Převody', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Vyúčtování', 'create_withdrawal' => 'Vytvořit nový výběr', 'create_deposit' => 'Vytvořit nový vklad', diff --git a/resources/lang/cs_CZ/components.php b/resources/lang/cs_CZ/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/cs_CZ/components.php +++ b/resources/lang/cs_CZ/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/cs_CZ/config.php b/resources/lang/cs_CZ/config.php index 86b90b3c6f..012ab4e72c 100644 --- a/resources/lang/cs_CZ/config.php +++ b/resources/lang/cs_CZ/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'cs', - 'locale' => 'cs, Čeština, cs_CZ, cs_CZ.utf8, cs_CZ.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'cs', + 'locale' => 'cs, Čeština, cs_CZ, cs_CZ.utf8, cs_CZ.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, RRRR', - 'month_and_day_fns' => 'd MMMM, y', - 'month_and_day_js' => 'D. MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, RRRR', + 'month_and_day_fns' => 'd MMMM, y', + 'month_and_day_js' => 'D. MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'D. MMMM YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'D. MMMM YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D. MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D. MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'týden' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'týden' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Pondělí', - 'dow_2' => 'Úterý', - 'dow_3' => 'Středa', - 'dow_4' => 'Čtvrtek', - 'dow_5' => 'Pátek', - 'dow_6' => 'Sobota', - 'dow_7' => 'Neděle', + 'quarter_fns' => "Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Pondělí', + 'dow_2' => 'Úterý', + 'dow_3' => 'Středa', + 'dow_4' => 'Čtvrtek', + 'dow_5' => 'Pátek', + 'dow_6' => 'Sobota', + 'dow_7' => 'Neděle', ]; /* diff --git a/resources/lang/cs_CZ/demo.php b/resources/lang/cs_CZ/demo.php index 812f0f08c7..9547ba5f29 100644 --- a/resources/lang/cs_CZ/demo.php +++ b/resources/lang/cs_CZ/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/cs_CZ/email.php b/resources/lang/cs_CZ/email.php index b7b0e30239..21ef240f87 100644 --- a/resources/lang/cs_CZ/email.php +++ b/resources/lang/cs_CZ/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Testovací zpráva z vaší instalace Firefly III', 'admin_test_body' => 'Toto je testovací zpráva z instance Firefly III. Byla odeslána na :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'An invitation has been created', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Obnovení hesla:', 'registered_doc_link' => 'Dokumentace:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'A new Firefly III version is available', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Pokud chcete, můžete vytvořit hlášení problému na https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Celý zásobník je níže:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III vytvořil novou transakci|Firefly III vytvořil :count nových transakcí', 'new_journals_header' => 'Firefly III pro Vás vytvořil transakci. Můžete ji najít ve vaší instalaci Firefly III:|Firefly III vytvořil :count transakcí. Najdete je ve vaší instalaci Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/cs_CZ/errors.php b/resources/lang/cs_CZ/errors.php index 81e9f2ac88..86d8dae511 100644 --- a/resources/lang/cs_CZ/errors.php +++ b/resources/lang/cs_CZ/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Trasování zásobníku', 'more_info' => 'Více informací', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Shromažďujte prosím další informace do adresáře storage/logs, kde najdete chybové záznamy. Pokud používáte Docker, použijte docker logs -f [container].', - 'collect_info_more' => 'Více informací o shromažďování chyb si můžete přečíst v FAQ.', - 'github_help' => 'Získejte nápovědu na GitHub', - 'github_instructions' => 'Jste více než vítáni při otevření nových hlášení na GitHub.', - 'use_search' => 'Použijte vyhledávání!', - 'include_info' => 'Zahrnout informace z této ladící stránky.', - 'tell_more' => 'Řekněte nám více než "se objevilo Hups!"', - 'include_logs' => 'Zahrnout protokoly chyb (viz výše).', - 'what_did_you_do' => 'Řekněte nám, co jste dělali.', - 'offline_header' => 'Jste pravděpodobně offline', - 'offline_unreachable' => 'Firefly III je nedostupný. Vaše zařízení je momentálně offline nebo server nefunguje.', - 'offline_github' => 'Pokud jste si jisti, že jak vaše zařízení tak i server jsou dostupne online, vytvořte prosím ticket na GitHub.', - + 'collect_info' => 'Shromažďujte prosím další informace do adresáře storage/logs, kde najdete chybové záznamy. Pokud používáte Docker, použijte docker logs -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Získejte nápovědu na GitHub', + 'github_instructions' => 'Jste více než vítáni při otevření nových hlášení na GitHub.', + 'use_search' => 'Použijte vyhledávání!', + 'include_info' => 'Zahrnout informace z této ladící stránky.', + 'tell_more' => 'Řekněte nám více než "se objevilo Hups!"', + 'include_logs' => 'Zahrnout protokoly chyb (viz výše).', + 'what_did_you_do' => 'Řekněte nám, co jste dělali.', + 'offline_header' => 'Jste pravděpodobně offline', + 'offline_unreachable' => 'Firefly III je nedostupný. Vaše zařízení je momentálně offline nebo server nefunguje.', + 'offline_github' => 'Pokud jste si jisti, že jak vaše zařízení tak i server jsou dostupne online, vytvořte prosím ticket na GitHub.', ]; diff --git a/resources/lang/cs_CZ/firefly.php b/resources/lang/cs_CZ/firefly.php index 6459a90e3f..935847cd8c 100644 --- a/resources/lang/cs_CZ/firefly.php +++ b/resources/lang/cs_CZ/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Zavřít', - 'actions' => 'Akce', - 'edit' => 'Upravit', - 'delete' => 'Odstranit', - 'split' => 'Rozdělit', - 'single_split' => 'Rozdělit', - 'clone' => 'Klonovat', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => 'Uplynulých 7 dnů', - 'last_thirty_days' => 'Uplynulých 30 dní', - 'last_180_days' => 'Posledních 180 dní', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'Tento rok', - 'welcome_back' => 'Jak to jde?', - 'everything' => 'Vše', - 'today' => 'dnes', - 'customRange' => 'Vlastní rozsah', - 'date_range' => 'Časové období', - 'apply' => 'Použít', - 'select_date' => 'Vyberte datum…', - 'cancel' => 'Storno', - 'from' => 'Od', - 'to' => 'Komu', - 'structure' => 'Struktura', - 'help_translating' => 'Text této nápovědy ještě není k dispozici ve vašem jazyce. Pomůžete s překladem?', - 'showEverything' => 'Zobrazit vše', - 'never' => 'Nikdy', - 'no_results_for_empty_search' => 'Nezadali jste žádné parametry vyhledávání, takže nebylo co hledat.', - 'removed_amount' => 'Odebráno :amount', - 'added_amount' => 'Přidáno :amount', - 'asset_account_role_help' => 'Jakékoliv další možnosti, vyplývající z vaší volby lze nastavit později.', - 'Opening balance' => 'Počáteční zůstatek', - 'create_new_stuff' => 'Vytvořit novou věc', - 'new_withdrawal' => 'Nový výběr', - 'create_new_transaction' => 'Vytvořit novou transakci', - 'sidebar_frontpage_create' => 'Vytvořit', - 'new_transaction' => 'Nová transakce', - 'no_rules_for_bill' => 'Tento účet nemá přiřazena žádná pravidla.', - 'go_to_asset_accounts' => 'Zobrazit účty s aktivy', - 'go_to_budgets' => 'Přejít k rozpočtům', - 'go_to_withdrawals' => 'Přejít na výběry', - 'clones_journal_x' => 'Tato transakce je kopií „:description“ (#:id)', - 'go_to_categories' => 'Přejít ke kategoriím', - 'go_to_bills' => 'Přejít k účtům', - 'go_to_expense_accounts' => 'Zobrazit výdajové účty', - 'go_to_revenue_accounts' => 'Zobrazit výnosové účty', - 'go_to_piggies' => 'Přejít k pokladničkám', - 'new_deposit' => 'Nový vklad', - 'new_transfer' => 'Nový převod', - 'new_transfers' => 'Nový převod', - 'new_asset_account' => 'Nový účet s aktivy', - 'new_expense_account' => 'Nový výdajový účet', - 'new_revenue_account' => 'Nový výnosový účet', - 'new_liabilities_account' => 'Nový závazek', - 'new_budget' => 'Nový rozpočet', - 'new_bill' => 'Nová platba', - 'block_account_logout' => 'Byli jste odhlášeni. Zablokované účty nemohou tuto stránku používat. Zaregistrovali jste se pomocí platné e-mailové adresy?', - 'flash_success' => 'Úspěšně dokončeno!', - 'flash_info' => 'Zpráva', - 'flash_warning' => 'Varování!', - 'flash_error' => 'Chyba!', - 'flash_danger' => 'Pozor!', - 'flash_info_multiple' => 'Jedna zpráva | :count zpráv', - 'flash_error_multiple' => 'Jedna chyba | :count chyb', - 'net_worth' => 'Čisté jmění', - 'help_for_this_page' => 'Nápověda pro tuto stránku', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => 'Zdravíme!', - 'two_factor_enter_code' => 'Pro pokračování zadejte kód pro dvoufázové ověření. Vaše aplikace ho pro vás může vytvořit.', - 'two_factor_code_here' => 'Sem zadejte kód', - 'two_factor_title' => 'Dvoufázové ověření', - 'authenticate' => 'Ověřit', - 'two_factor_forgot_title' => 'Ztratil(a) jsem dvoufázové ověřování', - 'two_factor_forgot' => 'Zapomněl(a) jsem si nástroj pro dvoufázové ověření.', - 'two_factor_lost_header' => 'Ztratili jste své dvoufázové ověření?', - 'two_factor_lost_intro' => 'Pokud jste ztratili i své záložní kódy, máte smůlu. Toto se pak už nedá napravit z webového rozhraní. Máte dvě možnosti:', - 'two_factor_lost_fix_self' => 'Pokud spustíte vlastní instanci Firefly III, přečtěte si tento záznam v FAQ pro pokyny.', - 'two_factor_lost_fix_owner' => 'V ostatních případech napište provozovateli, :site_owner a požádejte ho o resetování svého dvoufázového ověřování.', - 'mfa_backup_code' => 'Použitím záložního kódu, umožňujícího přihlášení do Firefly III, platnost kódu zaniká. Takže kód, kterým jste se už přihlásili, už k ničemu není (není možné ho použít opakovaně) proto si ho ze seznamu vyškrtněte.', - 'pref_two_factor_new_backup_codes' => 'Získat nové záložní kódy', - 'pref_two_factor_backup_code_count' => 'Máte :count platný kód zálohy.|Máte :count platných záložních kódů.', - '2fa_i_have_them' => 'Uložil jsem je!', - 'warning_much_data' => ':days dnů dat může chvíli trvat načíst.', - 'registered' => 'Úspěšně jste se zaregistrovali!', - 'Default asset account' => 'Výchozí účet s aktivy', - 'no_budget_pointer' => 'Zdá se, že ještě nemáte žádné rozpočty. Měli byste některé vytvořit na rozpočty-. Rozpočty vám mohou pomoci sledovat výdaje.', - 'no_bill_pointer' => 'Zdá se, že ještě nemáte žádné účty. Měli byste některé vytvořit na účtech. Účty vám mohou pomoci sledovat výdaje.', - 'Savings account' => 'Spořicí účet', - 'Credit card' => 'Kreditní karta', - 'source_accounts' => 'Zdrojový účet|Zdrojové účty', - 'destination_accounts' => 'Cílový účet|Cílové účty', - 'user_id_is' => 'Vaš identifikátor uživatele je :user', - 'field_supports_markdown' => 'Text v této kolonce je možné formátovat pomocí Markdown.', - 'need_more_help' => 'Pokud potřebujete další pomoc s používáním Firefly III, založte požadavek na portálu GitHub.', - 'reenable_intro_text' => 'Můžete si také znovu spustit úvodního průvodce.', - 'intro_boxes_after_refresh' => 'Oblasti s úvodem se znovu objeví po opětovném načtení stránky.', - 'show_all_no_filter' => 'Při jejich seskupení podle data zobrazit veškeré transakce.', - 'expenses_by_category' => 'Výdaje podle kategorie', - 'expenses_by_budget' => 'Výdaje podle rozpočtu', - 'income_by_category' => 'Příjem podle kategorie', - 'expenses_by_asset_account' => 'Výdaje podle účtů aktiv', - 'expenses_by_expense_account' => 'Výdaje podle výdajových účtů', - 'cannot_redirect_to_account' => 'Firefly III se nedaří přesměrovat vás na správnou stránku. Omlouváme se.', - 'sum_of_expenses' => 'Souhrn výdajů', - 'sum_of_income' => 'Souhrn příjmů', - 'liabilities' => 'Závazky', - 'spent_in_specific_budget' => 'Utraceno v rozpočtu „:budget“', - 'spent_in_specific_double' => 'Utraceno v účtu „:account“', - 'earned_in_specific_double' => 'Vyděláno v účtu „:account“', - 'source_account' => 'Zdrojový účet', - 'source_account_reconciliation' => 'Nemůžete upravovat zdrojový účet srovnávací transakce.', - 'destination_account' => 'Cílový účet', - 'destination_account_reconciliation' => 'Cílový účet odsouhlasené transakce nelze upravit.', - 'sum_of_expenses_in_budget' => 'Celkem utraceno v rozpočtu „:budget“', - 'left_in_budget_limit' => 'Ponecháno k utracení dle rozpočtu', - 'current_period' => 'Stávající období', - 'show_the_current_period_and_overview' => 'Zobrazit stávající období a přehled', - 'pref_languages_locale' => 'Aby správně fungovalo i pro jiné jazyky, než je angličtina je třeba, aby operační systém byl vybaven správnými údaji o místních a jazykových nastaveních. Pokud nejsou přítomné, data měn, datumů a částek mohou být chybně formátované.', - 'budget_in_period' => 'Všechny transakce pro rozpočet „:name“ mezi :start a :end v :currency', - 'chart_budget_in_period' => 'Graf všech transakcí pro rozpočet „:name“ mezi :start a :end v :currency', - 'chart_budget_in_period_only_currency' => 'Částka rozpočtu byla v :currency, takže tento graf bude zobrazovat pouze transakce v :currency.', - 'chart_account_in_period' => 'Graf veškerých transakcí pro účet „:name“ mezi :start a :end', - 'chart_category_in_period' => 'Graf veškerých transakcí pro kategorii „:name“ mezi :start a :end', - 'chart_category_all' => 'Graf veškerých transakcí pro kategoii „:name“', - 'clone_withdrawal' => 'Klonovat tento výběr', - 'clone_deposit' => 'Klonovat tento vklad', - 'clone_transfer' => 'Klonovat tento převod', - 'multi_select_no_selection' => 'Nic nevybráno', - 'multi_select_select_all' => 'Vybrat vše', - 'multi_select_n_selected' => 'vybráno', - 'multi_select_all_selected' => 'Všechny vybrané', - 'multi_select_filter_placeholder' => 'Najít…', - 'intro_next_label' => 'Následující', - 'intro_prev_label' => 'Předchozí', - 'intro_skip_label' => 'Přeskočit', - 'intro_done_label' => 'Hotovo', - 'between_dates_breadcrumb' => 'Mezi :start a :end', - 'all_journals_without_budget' => 'Všechny transakce bez rozpočtu', - 'journals_without_budget' => 'Transakce bez rozpočtu', - 'all_journals_without_category' => 'Všechny transakce bez kategorie', - 'journals_without_category' => 'Transakce bez kategorie', - 'all_journals_for_account' => 'Všechny transakce pro účet :name', - 'chart_all_journals_for_account' => 'Graf veškerých transakcí pro účet „:name“', - 'journals_in_period_for_account' => 'Veškeré transakce pro účet „:name“ mezi :start a :end', - 'journals_in_period_for_account_js' => 'Veškeré transakce pro účet {title} mezi {start} a {end}', - 'transferred' => 'Přeneseno', - 'all_withdrawal' => 'Všechny výdaje', - 'all_transactions' => 'Všechny transakce', - 'title_withdrawal_between' => 'Všechny výdaje mezi :start a :end', - 'all_deposit' => 'Veškeré výnosy', - 'title_deposit_between' => 'Všechny výnosy mezi :start a :end', - 'all_transfers' => 'Všechny převody', - 'title_transfers_between' => 'Všechny převody mezi :start a :end', - 'all_transfer' => 'Všechny převody', - 'all_journals_for_tag' => 'Všechny transakce pro značku „:tag“', - 'title_transfer_between' => 'Všechny převody mezi :start a :end', - 'all_journals_for_category' => 'Všechny transakce pro kategorii :name', - 'all_journals_for_budget' => 'Všechny transakce pro rozpočet :name', - 'chart_all_journals_for_budget' => 'Graf veškerých transakcí pro rozpočet „:name“', - 'journals_in_period_for_category' => 'Veškeré transakce pro kategorii „:name“ mezi :start a :end', - 'journals_in_period_for_tag' => 'Veškeré transakce pro štítek :tag mezi :start a :end', - 'not_available_demo_user' => 'Funkce, kterou se snažíte použít není uživatelům ukázky k dispozici.', - 'exchange_rate_instructions' => 'Účet aktiv „@name“ přijímá transakce pouze v @native_currency. Pokud chcete namísto toho použít @foreign_currency ověřte, že je známa také částka v @native_currency:', - 'transfer_exchange_rate_instructions' => 'Zdrojový účet aktiv "@source_name" přijímá pouze transakce v @source_currency. Cílový účet aktiv „@dest_name“ přijímá pouze transakce v @dest_currency. V obou měnách musíte uvést převedenou částku správně.', - 'transaction_data' => 'Data transakce', - 'invalid_server_configuration' => 'Neplatné nastavení serveru', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Rychlé přepnutí', - 'sign_in_to_start' => 'Pro zahájení vaší relace se přihlaste', - 'sign_in' => 'Přihlásit', - 'register_new_account' => 'Zaregistrovat nový účet', - 'forgot_my_password' => 'Zapomněl(a) jsem své heslo', - 'problems_with_input' => 'Vyskytly se problémy se vstupními údaji.', - 'reset_password' => 'Resetovat své heslo', - 'button_reset_password' => 'Resetovat heslo', - 'reset_button' => 'Resetovat', - 'want_to_login' => 'Chci se přihlásit', - 'login_page_title' => 'Přihlášení do Firefly III', - 'register_page_title' => 'Registrace do Firefly III', - 'forgot_pw_page_title' => 'Zapomenuté heslo do Firefly III', - 'reset_pw_page_title' => 'Reset hesla do Firefly III', - 'cannot_reset_demo_user' => 'Heslo uživatele pro ukázku (demo) nelze resetovat.', - 'no_att_demo_user' => 'Demo uživatel nemůže nahrát přílohy.', - 'button_register' => 'Zaregistrovat se', - 'authorization' => 'Pověření', - 'active_bills_only' => 'pouze aktivní účty', - 'active_bills_only_total' => 'všechny aktivní účty', - 'active_exp_bills_only' => 'pouze aktivní a očekávané účty', - 'active_exp_bills_only_total' => 'pouze aktivní a očekávané účty', - 'per_period_sum_1D' => 'Očekávané denní výdaje', - 'per_period_sum_1W' => 'Očekávané týdenní výdaje', - 'per_period_sum_1M' => 'Očekávané měsíční výdaje', - 'per_period_sum_3M' => 'Očekávané čtvrtletní výdaje', - 'per_period_sum_6M' => 'Očekávané pololetní výdaje', - 'per_period_sum_1Y' => 'Očekávané roční výdaje', - 'average_per_bill' => 'průměr na účet', - 'expected_total' => 'očekávaný celkový součet', - 'reconciliation_account_name' => ':name sesouhlasení (:currency)', - 'saved' => 'Uloženo', - 'advanced_options' => 'Rozšířené možnosti', - 'advanced_options_explain' => 'Některé stránky ve Firefly III mají za tímto tlačítkem skryté rozšířené možnosti. Tato stránka zde nemá nic krásného, ale podívejte se na ostatní!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Zavřít', + 'actions' => 'Akce', + 'edit' => 'Upravit', + 'delete' => 'Odstranit', + 'split' => 'Rozdělit', + 'single_split' => 'Rozdělit', + 'clone' => 'Klonovat', + 'clone_and_edit' => 'Klonovat a upravit', + 'confirm_action' => 'Potvrdit akci', + 'last_seven_days' => 'Uplynulých 7 dnů', + 'last_thirty_days' => 'Uplynulých 30 dní', + 'last_180_days' => 'Posledních 180 dní', + 'month_to_date' => 'Month to date', + 'year_to_date' => 'Year to date', + 'YTD' => 'Tento rok', + 'welcome_back' => 'Jak to jde?', + 'everything' => 'Vše', + 'today' => 'dnes', + 'customRange' => 'Vlastní rozsah', + 'date_range' => 'Časové období', + 'apply' => 'Použít', + 'select_date' => 'Vyberte datum…', + 'cancel' => 'Storno', + 'from' => 'Od', + 'to' => 'Komu', + 'structure' => 'Struktura', + 'help_translating' => 'Text této nápovědy ještě není k dispozici ve vašem jazyce. Pomůžete s překladem?', + 'showEverything' => 'Zobrazit vše', + 'never' => 'Nikdy', + 'no_results_for_empty_search' => 'Nezadali jste žádné parametry vyhledávání, takže nebylo co hledat.', + 'removed_amount' => 'Odebráno :amount', + 'added_amount' => 'Přidáno :amount', + 'asset_account_role_help' => 'Jakékoliv další možnosti, vyplývající z vaší volby lze nastavit později.', + 'Opening balance' => 'Počáteční zůstatek', + 'create_new_stuff' => 'Vytvořit novou věc', + 'new_withdrawal' => 'Nový výběr', + 'create_new_transaction' => 'Vytvořit novou transakci', + 'sidebar_frontpage_create' => 'Vytvořit', + 'new_transaction' => 'Nová transakce', + 'no_rules_for_bill' => 'Tento účet nemá přiřazena žádná pravidla.', + 'go_to_asset_accounts' => 'Zobrazit účty s aktivy', + 'go_to_budgets' => 'Přejít k rozpočtům', + 'go_to_withdrawals' => 'Přejít na výběry', + 'clones_journal_x' => 'Tato transakce je kopií „:description“ (#:id)', + 'go_to_categories' => 'Přejít ke kategoriím', + 'go_to_bills' => 'Přejít k účtům', + 'go_to_expense_accounts' => 'Zobrazit výdajové účty', + 'go_to_revenue_accounts' => 'Zobrazit výnosové účty', + 'go_to_piggies' => 'Přejít k pokladničkám', + 'new_deposit' => 'Nový vklad', + 'new_transfer' => 'Nový převod', + 'new_transfers' => 'Nový převod', + 'new_asset_account' => 'Nový účet s aktivy', + 'new_expense_account' => 'Nový výdajový účet', + 'new_revenue_account' => 'Nový výnosový účet', + 'new_liabilities_account' => 'Nový závazek', + 'new_budget' => 'Nový rozpočet', + 'new_bill' => 'Nová platba', + 'block_account_logout' => 'Byli jste odhlášeni. Zablokované účty nemohou tuto stránku používat. Zaregistrovali jste se pomocí platné e-mailové adresy?', + 'flash_success' => 'Úspěšně dokončeno!', + 'flash_info' => 'Zpráva', + 'flash_warning' => 'Varování!', + 'flash_error' => 'Chyba!', + 'flash_danger' => 'Pozor!', + 'flash_info_multiple' => 'Jedna zpráva | :count zpráv', + 'flash_error_multiple' => 'Jedna chyba | :count chyb', + 'net_worth' => 'Čisté jmění', + 'help_for_this_page' => 'Nápověda pro tuto stránku', + 'help_for_this_page_body' => 'Více informací o této stránce naleznete v dokumentaci.', + 'two_factor_welcome' => 'Zdravíme!', + 'two_factor_enter_code' => 'Pro pokračování zadejte kód pro dvoufázové ověření. Vaše aplikace ho pro vás může vytvořit.', + 'two_factor_code_here' => 'Sem zadejte kód', + 'two_factor_title' => 'Dvoufázové ověření', + 'authenticate' => 'Ověřit', + 'two_factor_forgot_title' => 'Ztratil(a) jsem dvoufázové ověřování', + 'two_factor_forgot' => 'Zapomněl(a) jsem si nástroj pro dvoufázové ověření.', + 'two_factor_lost_header' => 'Ztratili jste své dvoufázové ověření?', + 'two_factor_lost_intro' => 'Pokud jste ztratili i své záložní kódy, máte smůlu. Toto se pak už nedá napravit z webového rozhraní. Máte dvě možnosti:', + 'two_factor_lost_fix_self' => 'Pokud si sami provozujete instanci Firefly III, přečtěte si :site_owner a požádejte ho o resetování svého dvoufázového ověřování.', + 'mfa_backup_code' => 'Použitím záložního kódu, umožňujícího přihlášení do Firefly III, platnost kódu zaniká. Takže kód, kterým jste se už přihlásili, už k ničemu není (není možné ho použít opakovaně) proto si ho ze seznamu vyškrtněte.', + 'pref_two_factor_new_backup_codes' => 'Získat nové záložní kódy', + 'pref_two_factor_backup_code_count' => 'Máte :count platný kód zálohy.|Máte :count platných záložních kódů.', + '2fa_i_have_them' => 'Uložil jsem je!', + 'warning_much_data' => ':days dnů dat může chvíli trvat načíst.', + 'registered' => 'Úspěšně jste se zaregistrovali!', + 'Default asset account' => 'Výchozí účet s aktivy', + 'no_budget_pointer' => 'Zdá se, že ještě nemáte žádné rozpočty. Měli byste některé vytvořit na rozpočty-. Rozpočty vám mohou pomoci sledovat výdaje.', + 'no_bill_pointer' => 'Zdá se, že ještě nemáte žádné účty. Měli byste některé vytvořit na účtech. Účty vám mohou pomoci sledovat výdaje.', + 'Savings account' => 'Spořicí účet', + 'Credit card' => 'Kreditní karta', + 'source_accounts' => 'Zdrojový účet|Zdrojové účty', + 'destination_accounts' => 'Cílový účet|Cílové účty', + 'user_id_is' => 'Vaš identifikátor uživatele je :user', + 'field_supports_markdown' => 'Text v této kolonce je možné formátovat pomocí Markdown.', + 'need_more_help' => 'Pokud potřebujete další pomoc s používáním Firefly III, založte požadavek na portálu GitHub.', + 'reenable_intro_text' => 'Můžete si také znovu spustit úvodního průvodce.', + 'intro_boxes_after_refresh' => 'Oblasti s úvodem se znovu objeví po opětovném načtení stránky.', + 'show_all_no_filter' => 'Při jejich seskupení podle data zobrazit veškeré transakce.', + 'expenses_by_category' => 'Výdaje podle kategorie', + 'expenses_by_budget' => 'Výdaje podle rozpočtu', + 'income_by_category' => 'Příjem podle kategorie', + 'expenses_by_asset_account' => 'Výdaje podle účtů aktiv', + 'expenses_by_expense_account' => 'Výdaje podle výdajových účtů', + 'cannot_redirect_to_account' => 'Firefly III se nedaří přesměrovat vás na správnou stránku. Omlouváme se.', + 'sum_of_expenses' => 'Souhrn výdajů', + 'sum_of_income' => 'Souhrn příjmů', + 'liabilities' => 'Závazky', + 'spent_in_specific_budget' => 'Utraceno v rozpočtu „:budget“', + 'spent_in_specific_double' => 'Utraceno v účtu „:account“', + 'earned_in_specific_double' => 'Vyděláno v účtu „:account“', + 'source_account' => 'Zdrojový účet', + 'source_account_reconciliation' => 'Nemůžete upravovat zdrojový účet srovnávací transakce.', + 'destination_account' => 'Cílový účet', + 'destination_account_reconciliation' => 'Cílový účet odsouhlasené transakce nelze upravit.', + 'sum_of_expenses_in_budget' => 'Celkem utraceno v rozpočtu „:budget“', + 'left_in_budget_limit' => 'Ponecháno k utracení dle rozpočtu', + 'current_period' => 'Stávající období', + 'show_the_current_period_and_overview' => 'Zobrazit stávající období a přehled', + 'pref_languages_locale' => 'Aby správně fungovalo i pro jiné jazyky, než je angličtina je třeba, aby operační systém byl vybaven správnými údaji o místních a jazykových nastaveních. Pokud nejsou přítomné, data měn, datumů a částek mohou být chybně formátované.', + 'budget_in_period' => 'Všechny transakce pro rozpočet „:name“ mezi :start a :end v :currency', + 'chart_budget_in_period' => 'Graf všech transakcí pro rozpočet „:name“ mezi :start a :end v :currency', + 'chart_budget_in_period_only_currency' => 'Částka rozpočtu byla v :currency, takže tento graf bude zobrazovat pouze transakce v :currency.', + 'chart_account_in_period' => 'Graf veškerých transakcí pro účet „:name“ mezi :start a :end', + 'chart_category_in_period' => 'Graf veškerých transakcí pro kategorii „:name“ mezi :start a :end', + 'chart_category_all' => 'Graf veškerých transakcí pro kategoii „:name“', + 'clone_withdrawal' => 'Klonovat tento výběr', + 'clone_deposit' => 'Klonovat tento vklad', + 'clone_transfer' => 'Klonovat tento převod', + 'multi_select_no_selection' => 'Nic nevybráno', + 'multi_select_select_all' => 'Vybrat vše', + 'multi_select_n_selected' => 'vybráno', + 'multi_select_all_selected' => 'Všechny vybrané', + 'multi_select_filter_placeholder' => 'Najít…', + 'intro_next_label' => 'Následující', + 'intro_prev_label' => 'Předchozí', + 'intro_skip_label' => 'Přeskočit', + 'intro_done_label' => 'Hotovo', + 'between_dates_breadcrumb' => 'Mezi :start a :end', + 'all_journals_without_budget' => 'Všechny transakce bez rozpočtu', + 'journals_without_budget' => 'Transakce bez rozpočtu', + 'all_journals_without_category' => 'Všechny transakce bez kategorie', + 'journals_without_category' => 'Transakce bez kategorie', + 'all_journals_for_account' => 'Všechny transakce pro účet :name', + 'chart_all_journals_for_account' => 'Graf veškerých transakcí pro účet „:name“', + 'journals_in_period_for_account' => 'Veškeré transakce pro účet „:name“ mezi :start a :end', + 'journals_in_period_for_account_js' => 'Veškeré transakce pro účet {title} mezi {start} a {end}', + 'transferred' => 'Přeneseno', + 'all_withdrawal' => 'Všechny výdaje', + 'all_transactions' => 'Všechny transakce', + 'title_withdrawal_between' => 'Všechny výdaje mezi :start a :end', + 'all_deposit' => 'Veškeré výnosy', + 'title_deposit_between' => 'Všechny výnosy mezi :start a :end', + 'all_transfers' => 'Všechny převody', + 'title_transfers_between' => 'Všechny převody mezi :start a :end', + 'all_transfer' => 'Všechny převody', + 'all_journals_for_tag' => 'Všechny transakce pro značku „:tag“', + 'title_transfer_between' => 'Všechny převody mezi :start a :end', + 'all_journals_for_category' => 'Všechny transakce pro kategorii :name', + 'all_journals_for_budget' => 'Všechny transakce pro rozpočet :name', + 'chart_all_journals_for_budget' => 'Graf veškerých transakcí pro rozpočet „:name“', + 'journals_in_period_for_category' => 'Veškeré transakce pro kategorii „:name“ mezi :start a :end', + 'journals_in_period_for_tag' => 'Veškeré transakce pro štítek :tag mezi :start a :end', + 'not_available_demo_user' => 'Funkce, kterou se snažíte použít není uživatelům ukázky k dispozici.', + 'exchange_rate_instructions' => 'Účet aktiv „@name“ přijímá transakce pouze v @native_currency. Pokud chcete namísto toho použít @foreign_currency ověřte, že je známa také částka v @native_currency:', + 'transfer_exchange_rate_instructions' => 'Zdrojový účet aktiv "@source_name" přijímá pouze transakce v @source_currency. Cílový účet aktiv „@dest_name“ přijímá pouze transakce v @dest_currency. V obou měnách musíte uvést převedenou částku správně.', + 'transaction_data' => 'Data transakce', + 'invalid_server_configuration' => 'Neplatné nastavení serveru', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Rychlé přepnutí', + 'sign_in_to_start' => 'Pro zahájení vaší relace se přihlaste', + 'sign_in' => 'Přihlásit', + 'register_new_account' => 'Zaregistrovat nový účet', + 'forgot_my_password' => 'Zapomněl(a) jsem své heslo', + 'problems_with_input' => 'Vyskytly se problémy se vstupními údaji.', + 'reset_password' => 'Resetovat své heslo', + 'button_reset_password' => 'Resetovat heslo', + 'reset_button' => 'Resetovat', + 'want_to_login' => 'Chci se přihlásit', + 'login_page_title' => 'Přihlášení do Firefly III', + 'register_page_title' => 'Registrace do Firefly III', + 'forgot_pw_page_title' => 'Zapomenuté heslo do Firefly III', + 'reset_pw_page_title' => 'Reset hesla do Firefly III', + 'cannot_reset_demo_user' => 'Heslo uživatele pro ukázku (demo) nelze resetovat.', + 'no_att_demo_user' => 'Demo uživatel nemůže nahrát přílohy.', + 'button_register' => 'Zaregistrovat se', + 'authorization' => 'Pověření', + 'active_bills_only' => 'pouze aktivní účty', + 'active_bills_only_total' => 'všechny aktivní účty', + 'active_exp_bills_only' => 'pouze aktivní a očekávané účty', + 'active_exp_bills_only_total' => 'pouze aktivní a očekávané účty', + 'per_period_sum_1D' => 'Očekávané denní výdaje', + 'per_period_sum_1W' => 'Očekávané týdenní výdaje', + 'per_period_sum_1M' => 'Očekávané měsíční výdaje', + 'per_period_sum_3M' => 'Očekávané čtvrtletní výdaje', + 'per_period_sum_6M' => 'Očekávané pololetní výdaje', + 'per_period_sum_1Y' => 'Očekávané roční výdaje', + 'average_per_bill' => 'průměr na účet', + 'expected_total' => 'očekávaný celkový součet', + 'reconciliation_account_name' => ':name sesouhlasení (:currency)', + 'saved' => 'Uloženo', + 'advanced_options' => 'Rozšířené možnosti', + 'advanced_options_explain' => 'Některé stránky ve Firefly III mají za tímto tlačítkem skryté rozšířené možnosti. Tato stránka zde nemá nic krásného, ale podívejte se na ostatní!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooky', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhooky', + 'webhooks_breadcrumb' => 'Webhooky', + 'webhooks_menu_disabled' => 'zakázáno', + 'no_webhook_messages' => 'Neexistují žádné zprávy webhooku', + 'webhook_trigger_STORE_TRANSACTION' => 'Po vytvoření transakce', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Po aktualizaci transakce', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Po odstranění transakce', + 'webhook_response_TRANSACTIONS' => 'Podrobnosti transakce', + 'webhook_response_ACCOUNTS' => 'Podrobnosti účtu', + 'webhook_response_none_NONE' => 'Žádné detaily', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Prozkoumat', + 'create_new_webhook' => 'Vytvořit nový webhook', + 'webhooks_create_breadcrumb' => 'Vytvořit nový webhook', + 'webhook_trigger_form_help' => 'Určit, na kterou událost se spustí webhook', + 'webhook_response_form_help' => 'Určit, co musí webhook odeslat do URL.', + 'webhook_delivery_form_help' => 'V jakém formátu musí webhook posílat data.', + 'webhook_active_form_help' => 'Webhook musí být aktivní, nebo nebude zavolán.', + 'stored_new_webhook' => 'Uložený nový webhook ":title"', + 'delete_webhook' => 'Smazat webhook', + 'deleted_webhook' => 'Smazán webhook ":title"', + 'edit_webhook' => 'Upravit webhook ":title"', + 'updated_webhook' => 'Aktualizován webhook ":title"', + 'edit_webhook_js' => 'Upravit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'Webhook byl spuštěn na určené transakci. Prosím počkejte, než se objeví výsledky.', + 'webhook_messages' => 'Zpráva webhooku', + 'view_message' => 'Zobrazit zprávu', + 'view_attempts' => 'Zobrazit neúspěšné pokusy', + 'message_content_title' => 'Obsah zprávy webhooku', + 'message_content_help' => 'Toto je obsah zprávy, která byla odeslána (nebo vyzkoušena) pomocí tohoto webhooku.', + 'attempt_content_title' => 'Pokusy webhooku', + 'attempt_content_help' => 'To vše jsou neúspěšné pokusy této zpravy webhooku o odeslání na nakonfigurovanou URL. Po nějaké době, Firefly III přestane zkoušet odesílat zprávu.', + 'no_attempts' => 'Nebyly nalezeny žádné neúspěšné pokusy. To je dobrá věc!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logy', + 'response' => 'Odpověď', + 'visit_webhook_url' => 'Navštívit URL webhooku', + 'reset_webhook_secret' => 'Restartovat tajný klíč webhooku', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") byl uložen.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") byl aktualizován.', // API access - 'authorization_request' => 'Požadavek na ověření – Firefly III verze :version', - 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', - 'scopes_will_be_able' => 'Tato aplikace bude moci:', - 'button_authorize' => 'Autorizovat', - 'none_in_select_list' => '(žádné)', - 'no_piggy_bank' => '(žádná pokladnička)', - 'name_in_currency' => ':name v :currency', - 'paid_in_currency' => 'Zaplaceno v :currency', - 'unpaid_in_currency' => 'Nezaplaceno v :currency', - 'is_alpha_warning' => 'Používáte ALPHA verzi. Buďte ostražití před chybami a problémy.', - 'is_beta_warning' => 'Používáte BETA verzi. Buďte ostražití před chybami a problémy.', - 'all_destination_accounts' => 'Cílové účty', - 'all_source_accounts' => 'Zdrojové účty', - 'back_to_index' => 'Zpět na index', - 'cant_logout_guard' => 'Firefly III Vás nemůže odhlásit.', - 'internal_reference' => 'Interní odkaz', + 'authorization_request' => 'Požadavek na ověření – Firefly III verze :version', + 'authorization_request_intro' => 'Aplikace :client žádá oprávnění pro přístup k vaší finanční správě. Chcete autorizovat :client pro přístup k těmto záznamům?', + 'authorization_request_site' => 'Budete přesměrováni na :url, na které pak budete mít přístup k vašim údajům Firefly III.', + 'authorization_request_invalid' => 'Tento požadavek na přístup je neplatný. Prosím, nikdy nezkoušejte tento odkaz znovu.', + 'scopes_will_be_able' => 'Tato aplikace bude moci:', + 'button_authorize' => 'Autorizovat', + 'none_in_select_list' => '(žádné)', + 'no_piggy_bank' => '(žádná pokladnička)', + 'name_in_currency' => ':name v :currency', + 'paid_in_currency' => 'Zaplaceno v :currency', + 'unpaid_in_currency' => 'Nezaplaceno v :currency', + 'is_alpha_warning' => 'Používáte ALPHA verzi. Buďte ostražití před chybami a problémy.', + 'is_beta_warning' => 'Používáte BETA verzi. Buďte ostražití před chybami a problémy.', + 'all_destination_accounts' => 'Cílové účty', + 'all_source_accounts' => 'Zdrojové účty', + 'back_to_index' => 'Zpět na index', + 'cant_logout_guard' => 'Firefly III Vás nemůže odhlásit.', + 'internal_reference' => 'Interní odkaz', // check for updates: - 'update_check_title' => 'Zjistit dostupnost případných aktualizací', - 'admin_update_check_title' => 'Zjišťovat dostupnost případných aktualizací automaticky', - 'admin_update_check_explain' => 'Firefly III může automaticky zjišťovat dostupnost aktualizací. Pokud toto nastavení zapnete, Firefly III kontaktuje aktualizační server a zjistí, zda je k dispozici nová verze Firefly III. Pokud ano, budete na to upozorněni. Fungování tohoto oznámení je možné si vyzkoušet pomocí tlačítka vpravo. Označte níže, zda si přejete, aby Firefly III zjišťovalo dostupnost aktualizací.', - 'check_for_updates_permission' => 'Firefly III umí zjišťovat dostupnost případných aktualizací, ale potřebuje k tomu vaše svolení. Přejděte do správy a označte, zda chcete tuto funkci zapnout.', - 'updates_ask_me_later' => 'Zeptat se znovu později', - 'updates_do_not_check' => 'Nezjišťovat dostupnost případných aktualizací', - 'updates_enable_check' => 'Zjišťovat dostupnost případných aktualizací', - 'admin_update_check_now_title' => 'Zjistit dostupno případných aktualizací nyní', - 'admin_update_check_now_explain' => 'Stisknutím tohoto tlačítka Firefly III ověří, zda používáte nejnovější verzi.', - 'check_for_updates_button' => 'Zkontrolovat nyní!', - 'update_new_version_alert' => 'Je k dispozici nová verze Firefly III. Nyní provozujete verzi :your_version, nejnovější verze je :new_version, která byla vydaná :date.', - 'update_version_beta' => 'Tato verze je BETA verze. Můžete narazit na problémy.', - 'update_version_alpha' => 'Tato verze je ALFA verze. Můžete narazit na problémy.', - 'update_current_version_alert' => 'Provozujete verzi :version, která je nejnovější dostupnou verzí.', - 'update_newer_version_alert' => 'Používáte verzi :your_version, která je novější než poslední stabilní verze :new_version.', - 'update_check_error' => 'Došlo k chybě při kontrole aktualizací: :error', - 'unknown_error' => 'Neznámá chyba. Omlouváme se.', - 'just_new_release' => 'Je dostupná nová verze! Verze :version byla vydána :date. Tato verze je velmi čerstvá. Počkejte několik dní, než se nová verze stabilizuje.', - 'disabled_but_check' => 'Zakázali jste kontrolu aktualizací. Nezapomeňte tedy občas zkontrolovat aktualizace sami. Děkujeme!', - 'admin_update_channel_title' => 'Kanál aktualizací', - 'admin_update_channel_explain' => 'Firefly III má tři aktualizační "kanály", které určují, jak moc jste napřed, jde-li o funkce, vylepšení a chyby. Použijte "beta" kanál, pokud jste dobrodružný a "alfa", když chcete žít nebezpečně.', - 'update_channel_stable' => 'Stabilní. Vše by mělo fungovat podle očekávání.', - 'update_channel_beta' => 'Beta verze. Jsou zde nové funkce, ale nemusí vše fungovat.', - 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', + 'update_check_title' => 'Zjistit dostupnost případných aktualizací', + 'admin_update_check_title' => 'Zjišťovat dostupnost případných aktualizací automaticky', + 'admin_update_check_explain' => 'Firefly III může automaticky zjišťovat dostupnost aktualizací. Pokud toto nastavení zapnete, Firefly III kontaktuje aktualizační server a zjistí, zda je k dispozici nová verze Firefly III. Pokud ano, budete na to upozorněni. Fungování tohoto oznámení je možné si vyzkoušet pomocí tlačítka vpravo. Označte níže, zda si přejete, aby Firefly III zjišťovalo dostupnost aktualizací.', + 'check_for_updates_permission' => 'Firefly III umí zjišťovat dostupnost případných aktualizací, ale potřebuje k tomu vaše svolení. Přejděte do správy a označte, zda chcete tuto funkci zapnout.', + 'updates_ask_me_later' => 'Zeptat se znovu později', + 'updates_do_not_check' => 'Nezjišťovat dostupnost případných aktualizací', + 'updates_enable_check' => 'Zjišťovat dostupnost případných aktualizací', + 'admin_update_check_now_title' => 'Zjistit dostupno případných aktualizací nyní', + 'admin_update_check_now_explain' => 'Stisknutím tohoto tlačítka Firefly III ověří, zda používáte nejnovější verzi.', + 'check_for_updates_button' => 'Zkontrolovat nyní!', + 'update_new_version_alert' => 'Je k dispozici nová verze Firefly III. Nyní provozujete verzi :your_version, nejnovější verze je :new_version, která byla vydaná :date.', + 'update_version_beta' => 'Tato verze je BETA verze. Můžete narazit na problémy.', + 'update_version_alpha' => 'Tato verze je ALFA verze. Můžete narazit na problémy.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Provozujete verzi :version, která je nejnovější dostupnou verzí.', + 'update_newer_version_alert' => 'Používáte verzi :your_version, která je novější než poslední stabilní verze :new_version.', + 'update_check_error' => 'Došlo k chybě při kontrole aktualizací: :error', + 'unknown_error' => 'Neznámá chyba. Omlouváme se.', + 'disabled_but_check' => 'Zakázali jste kontrolu aktualizací. Nezapomeňte tedy občas zkontrolovat aktualizace sami. Děkujeme!', + 'admin_update_channel_title' => 'Kanál aktualizací', + 'admin_update_channel_explain' => 'Firefly III má tři aktualizační "kanály", které určují, jak moc jste napřed, jde-li o funkce, vylepšení a chyby. Použijte "beta" kanál, pokud jste dobrodružný a "alfa", když chcete žít nebezpečně.', + 'update_channel_stable' => 'Stabilní. Vše by mělo fungovat podle očekávání.', + 'update_channel_beta' => 'Beta verze. Jsou zde nové funkce, ale nemusí vše fungovat.', + 'update_channel_alpha' => 'Alfa. Míchame všechno dohromady a používáme vše, co se osvědčí.', // search - 'search' => 'Hledat', - 'search_query' => 'Dotaz', - 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', - 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', - 'search_for_query' => 'Firefly III is searching for transactions with all of these words in them: :query', - 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', + 'search' => 'Hledat', + 'search_query' => 'Dotaz', + 'search_found_transactions' => 'Firefly III nalezl :count transakci během :time sekund.|Firefly III nalezl :count transakcí během :time sekund.', + 'search_found_more_transactions' => 'Firefly III nalezlo vice než :count transakcí za :time sekund.', + 'search_for_query' => 'Firefly III hledá transakce se všemi těmito slovy: :query', + 'invalid_operators_list' => 'Tyto vyhledávací parametry nejsou platné a byly ignorovány.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,218 +351,220 @@ return [ * */ - - 'search_modifier_date_on' => 'Transaction date is ":value"', - 'search_modifier_not_date_on' => 'Transaction date is not ":value"', - 'search_modifier_reconciled' => 'Transaction is reconciled', + 'search_modifier_date_on' => 'Datum transakce je ":value"', + 'search_modifier_not_date_on' => 'Datum transakce není ":value"', + 'search_modifier_reconciled' => 'Transakce je odsouhlasena', 'search_modifier_not_reconciled' => 'Transaction is not reconciled', 'search_modifier_id' => 'Číslo transakce je „:value“', - 'search_modifier_not_id' => 'Transaction ID is not ":value"', + 'search_modifier_not_id' => 'ID transakce není ":value"', 'search_modifier_date_before' => 'Datum transakce je před (včetně) ":value"', 'search_modifier_date_after' => 'Datum transakce je po (včetně) ":value"', - 'search_modifier_external_id_is' => 'External ID is ":value"', - 'search_modifier_not_external_id_is' => 'External ID is not ":value"', - 'search_modifier_no_external_url' => 'The transaction has no external URL', - 'search_modifier_no_external_id' => 'The transaction has no external ID', - 'search_modifier_not_any_external_url' => 'The transaction has no external URL', - 'search_modifier_not_any_external_id' => 'The transaction has no external ID', - 'search_modifier_any_external_url' => 'The transaction must have a (any) external URL', - 'search_modifier_any_external_id' => 'The transaction must have a (any) external ID', - 'search_modifier_not_no_external_url' => 'The transaction must have a (any) external URL', - 'search_modifier_not_no_external_id' => 'The transaction must have a (any) external ID', - 'search_modifier_internal_reference_is' => 'Internal reference is ":value"', - 'search_modifier_not_internal_reference_is' => 'Internal reference is not ":value"', - 'search_modifier_description_starts' => 'Description starts with ":value"', - 'search_modifier_not_description_starts' => 'Description does not start with ":value"', - 'search_modifier_description_ends' => 'Description ends on ":value"', - 'search_modifier_not_description_ends' => 'Description does not end on ":value"', - 'search_modifier_description_contains' => 'Description contains ":value"', - 'search_modifier_not_description_contains' => 'Description does not contain ":value"', - 'search_modifier_description_is' => 'Description is exactly ":value"', - 'search_modifier_not_description_is' => 'Description is exactly not ":value"', - 'search_modifier_currency_is' => 'Transaction (foreign) currency is ":value"', - 'search_modifier_not_currency_is' => 'Transaction (foreign) currency is not ":value"', - 'search_modifier_foreign_currency_is' => 'Transaction foreign currency is ":value"', - 'search_modifier_not_foreign_currency_is' => 'Transaction foreign currency is not ":value"', - 'search_modifier_has_attachments' => 'The transaction must have an attachment', - 'search_modifier_has_no_category' => 'The transaction must have no category', - 'search_modifier_not_has_no_category' => 'The transaction must have a (any) category', - 'search_modifier_not_has_any_category' => 'The transaction must have no category', - 'search_modifier_has_any_category' => 'The transaction must have a (any) category', - 'search_modifier_has_no_budget' => 'The transaction must have no budget', - 'search_modifier_not_has_any_budget' => 'The transaction must have no budget', - 'search_modifier_has_any_budget' => 'The transaction must have a (any) budget', - 'search_modifier_not_has_no_budget' => 'The transaction must have a (any) budget', - 'search_modifier_has_no_bill' => 'The transaction must have no bill', - 'search_modifier_not_has_no_bill' => 'The transaction must have a (any) bill', - 'search_modifier_has_any_bill' => 'The transaction must have a (any) bill', - 'search_modifier_not_has_any_bill' => 'The transaction must have no bill', - 'search_modifier_has_no_tag' => 'The transaction must have no tags', - 'search_modifier_not_has_any_tag' => 'The transaction must have no tags', - 'search_modifier_not_has_no_tag' => 'The transaction must have a (any) tag', - 'search_modifier_has_any_tag' => 'The transaction must have a (any) tag', - 'search_modifier_notes_contains' => 'The transaction notes contain ":value"', - 'search_modifier_not_notes_contains' => 'The transaction notes do not contain ":value"', - 'search_modifier_notes_starts' => 'The transaction notes start with ":value"', - 'search_modifier_not_notes_starts' => 'The transaction notes do not start with ":value"', - 'search_modifier_notes_ends' => 'The transaction notes end with ":value"', - 'search_modifier_not_notes_ends' => 'The transaction notes do not end with ":value"', - 'search_modifier_notes_is' => 'The transaction notes are exactly ":value"', - 'search_modifier_not_notes_is' => 'The transaction notes are exactly not ":value"', - 'search_modifier_no_notes' => 'The transaction has no notes', - 'search_modifier_not_no_notes' => 'The transaction must have notes', - 'search_modifier_any_notes' => 'The transaction must have notes', - 'search_modifier_not_any_notes' => 'The transaction has no notes', - 'search_modifier_amount_is' => 'Amount is exactly :value', - 'search_modifier_not_amount_is' => 'Amount is not :value', - 'search_modifier_amount_less' => 'Amount is less than or equal to :value', - 'search_modifier_not_amount_more' => 'Amount is less than or equal to :value', - 'search_modifier_amount_more' => 'Amount is more than or equal to :value', - 'search_modifier_not_amount_less' => 'Amount is more than or equal to :value', - 'search_modifier_source_account_is' => 'Source account name is exactly ":value"', - 'search_modifier_not_source_account_is' => 'Source account name is not ":value"', - 'search_modifier_source_account_contains' => 'Source account name contains ":value"', - 'search_modifier_not_source_account_contains' => 'Source account name does not contain ":value"', - 'search_modifier_source_account_starts' => 'Source account name starts with ":value"', - 'search_modifier_not_source_account_starts' => 'Source account name does not start with ":value"', - 'search_modifier_source_account_ends' => 'Source account name ends with ":value"', - 'search_modifier_not_source_account_ends' => 'Source account name does not end with ":value"', - 'search_modifier_source_account_id' => 'Source account ID is :value', - 'search_modifier_not_source_account_id' => 'Source account ID is not :value', - 'search_modifier_source_account_nr_is' => 'Source account number (IBAN) is ":value"', - 'search_modifier_not_source_account_nr_is' => 'Source account number (IBAN) is not ":value"', - 'search_modifier_source_account_nr_contains' => 'Source account number (IBAN) contains ":value"', - 'search_modifier_not_source_account_nr_contains' => 'Source account number (IBAN) does not contain ":value"', - 'search_modifier_source_account_nr_starts' => 'Source account number (IBAN) starts with ":value"', - 'search_modifier_not_source_account_nr_starts' => 'Source account number (IBAN) does not start with ":value"', - 'search_modifier_source_account_nr_ends' => 'Source account number (IBAN) ends on ":value"', - 'search_modifier_not_source_account_nr_ends' => 'Source account number (IBAN) does not end on ":value"', - 'search_modifier_destination_account_is' => 'Destination account name is exactly ":value"', - 'search_modifier_not_destination_account_is' => 'Destination account name is not ":value"', - 'search_modifier_destination_account_contains' => 'Destination account name contains ":value"', - 'search_modifier_not_destination_account_contains' => 'Destination account name does not contain ":value"', - 'search_modifier_destination_account_starts' => 'Destination account name starts with ":value"', - 'search_modifier_not_destination_account_starts' => 'Destination account name does not start with ":value"', - 'search_modifier_destination_account_ends' => 'Destination account name ends on ":value"', - 'search_modifier_not_destination_account_ends' => 'Destination account name does not end on ":value"', - 'search_modifier_destination_account_id' => 'Destination account ID is :value', - 'search_modifier_not_destination_account_id' => 'Destination account ID is not :value', - 'search_modifier_destination_is_cash' => 'Destination account is the "(cash)" account', - 'search_modifier_not_destination_is_cash' => 'Destination account is not the "(cash)" account', - 'search_modifier_source_is_cash' => 'Source account is the "(cash)" account', - 'search_modifier_not_source_is_cash' => 'Source account is not the "(cash)" account', - 'search_modifier_destination_account_nr_is' => 'Destination account number (IBAN) is ":value"', - 'search_modifier_not_destination_account_nr_is' => 'Destination account number (IBAN) is ":value"', - 'search_modifier_destination_account_nr_contains' => 'Destination account number (IBAN) contains ":value"', - 'search_modifier_not_destination_account_nr_contains' => 'Destination account number (IBAN) does not contain ":value"', - 'search_modifier_destination_account_nr_starts' => 'Destination account number (IBAN) starts with ":value"', - 'search_modifier_not_destination_account_nr_starts' => 'Destination account number (IBAN) does not start with ":value"', - 'search_modifier_destination_account_nr_ends' => 'Destination account number (IBAN) ends with ":value"', - 'search_modifier_not_destination_account_nr_ends' => 'Destination account number (IBAN) does not end with ":value"', - 'search_modifier_account_id' => 'Source or destination account ID\'s is/are: :value', - 'search_modifier_not_account_id' => 'Source or destination account ID\'s is/are not: :value', - 'search_modifier_category_is' => 'Category is ":value"', - 'search_modifier_not_category_is' => 'Category is not ":value"', - 'search_modifier_budget_is' => 'Budget is ":value"', - 'search_modifier_not_budget_is' => 'Budget is not ":value"', - 'search_modifier_bill_is' => 'Bill is ":value"', - 'search_modifier_not_bill_is' => 'Bill is not ":value"', - 'search_modifier_transaction_type' => 'Transaction type is ":value"', - 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', - 'search_modifier_tag_is' => 'Tag is ":value"', - 'search_modifier_not_tag_is' => 'No tag is ":value"', - 'search_modifier_date_on_year' => 'Transaction is in year ":value"', - 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', - 'search_modifier_date_on_month' => 'Transaction is in month ":value"', - 'search_modifier_not_date_on_month' => 'Transaction is not in month ":value"', - 'search_modifier_date_on_day' => 'Transaction is on day of month ":value"', - 'search_modifier_not_date_on_day' => 'Transaction is not 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 is 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"', - + 'search_modifier_external_id_is' => 'Externí ID je ":value"', + 'search_modifier_not_external_id_is' => 'Externí ID není ":value"', + 'search_modifier_no_external_url' => 'Transakce nemá žádnou externí URL', + 'search_modifier_no_external_id' => 'Transakce nemá žádnou externí ID', + 'search_modifier_not_any_external_url' => 'Transakce nemá žádnou externí URL', + 'search_modifier_not_any_external_id' => 'Transakce nemá žádnou externí ID', + 'search_modifier_any_external_url' => 'Transakce musí mít (libovolnou) externí URL', + 'search_modifier_any_external_id' => 'Transakce musí mít (libovolnou) externí ID', + 'search_modifier_not_no_external_url' => 'Transakce musí mít (libovolnou) externí URL', + 'search_modifier_not_no_external_id' => 'Transakce musí mít (libovolnou) externí ID', + 'search_modifier_internal_reference_is' => 'Interní reference je ":value"', + 'search_modifier_not_internal_reference_is' => 'Interní reference není ":value"', + 'search_modifier_description_starts' => 'Popis začíná na ":value"', + 'search_modifier_not_description_starts' => 'Popis nezačíná na ":value"', + 'search_modifier_description_ends' => 'Popis končí na ":value"', + 'search_modifier_not_description_ends' => 'Popis nekončí na ":value"', + 'search_modifier_description_contains' => 'Popis obsahuje ":value"', + 'search_modifier_not_description_contains' => 'Popis neobsahuje ":value"', + 'search_modifier_description_is' => 'Popis je přesně ":value"', + 'search_modifier_not_description_is' => 'Popis není přesně ":value"', + 'search_modifier_currency_is' => '(Zahraniční) měna transakce je ":value"', + 'search_modifier_not_currency_is' => '(Zahraniční) měna transakce není ":value"', + 'search_modifier_foreign_currency_is' => 'Zahraniční měna transakce je ":value"', + 'search_modifier_not_foreign_currency_is' => 'Zahraniční měna transakce není ":value"', + 'search_modifier_has_attachments' => 'Transakce musí mít přílohu', + 'search_modifier_has_no_category' => 'Transakce nesmí mít žádnou kategorii', + 'search_modifier_not_has_no_category' => 'Transakce musí mít (libovolnou) kategorii', + 'search_modifier_not_has_any_category' => 'Transakce nesmí mít žádnou kategorii', + 'search_modifier_has_any_category' => 'Transakce musí mít (libovolnou) kategorii', + 'search_modifier_has_no_budget' => 'Transakce nesmí mít žádný rozpočet', + 'search_modifier_not_has_any_budget' => 'Transakce nesmí mít žádný rozpočet', + 'search_modifier_has_any_budget' => 'Transakce musí mít (libovolný) rozpočet', + 'search_modifier_not_has_no_budget' => 'Transakce musí mít (libovolný) rozpočet', + 'search_modifier_has_no_bill' => 'Transakce nesmí mít účet', + 'search_modifier_not_has_no_bill' => 'Transakce musí mít (libovolný) účet', + 'search_modifier_has_any_bill' => 'Transakce musí mít (libovolný) účet', + 'search_modifier_not_has_any_bill' => 'Transakce nesmí mít účet', + 'search_modifier_has_no_tag' => 'Transakce nesmí mít žádné štítky', + 'search_modifier_not_has_any_tag' => 'Transakce nesmí mít žádné štítky', + 'search_modifier_not_has_no_tag' => 'Transakce musí mít (libovolný) štítek', + 'search_modifier_has_any_tag' => 'Transakce musí mít (libovolný) štítek', + 'search_modifier_notes_contains' => 'Poznámky k transakci obsahují ":value"', + 'search_modifier_not_notes_contains' => 'Poznámky k transakci neobsahují ":value"', + 'search_modifier_notes_starts' => 'Poznámky k transakci začínají na ":value"', + 'search_modifier_not_notes_starts' => 'Poznámky k transakci nezačínají na ":value"', + 'search_modifier_notes_ends' => 'Poznámky k transakci končí na ":value"', + 'search_modifier_not_notes_ends' => 'Poznámky k transakci nekončí na ":value"', + 'search_modifier_notes_is' => 'Poznámky k transakci jsou přesně ":value"', + 'search_modifier_not_notes_is' => 'Poznámky k transakci nejsou přesně ":value"', + 'search_modifier_no_notes' => 'Transakce nemá žádné poznámky', + 'search_modifier_not_no_notes' => 'Transakce musí mít poznámky', + 'search_modifier_any_notes' => 'Transakce musí mít poznámky', + 'search_modifier_not_any_notes' => 'Transakce nemá žádné poznámky', + 'search_modifier_amount_is' => 'Částka je přesně :value', + 'search_modifier_not_amount_is' => 'Částka není přesně :value', + 'search_modifier_amount_less' => 'Částka je menší nebo rovna :value', + 'search_modifier_not_amount_more' => 'Částka je menší nebo rovna :value', + 'search_modifier_amount_more' => 'Částka je větší nebo rovna :value', + 'search_modifier_not_amount_less' => 'Částka je větší nebo rovna :value', + 'search_modifier_source_account_is' => 'Název zdrojového účtu je přesně ":value"', + 'search_modifier_not_source_account_is' => 'Název zdrojového účtu není ":value"', + 'search_modifier_source_account_contains' => 'Název zdrojového účtu obsahuje ":value"', + 'search_modifier_not_source_account_contains' => 'Název zdrojového účtu neobsahuje ":value"', + 'search_modifier_source_account_starts' => 'Název zdrojového účtu začíná na ":value"', + 'search_modifier_not_source_account_starts' => 'Název zdrojového účtu nezačíná na ":value"', + 'search_modifier_source_account_ends' => 'Název zdrojového účtu končí na ":value"', + 'search_modifier_not_source_account_ends' => 'Název zdrojového účtu nekončí na ":value"', + 'search_modifier_source_account_id' => 'ID zdrojového účtu je :value', + 'search_modifier_not_source_account_id' => 'ID zdrojového účtu není :value', + 'search_modifier_source_account_nr_is' => 'Číslo zdrojového účtu (IBAN) je ":value"', + 'search_modifier_not_source_account_nr_is' => 'Číslo zdrojového účtu (IBAN) není ":value"', + 'search_modifier_source_account_nr_contains' => 'Číslo zdrojového účtu (IBAN) obsahuje ":value"', + 'search_modifier_not_source_account_nr_contains' => 'Číslo zdrojového účtu (IBAN) neobsahuje ":value"', + 'search_modifier_source_account_nr_starts' => 'Číslo zdrojového účtu (IBAN) začíná na ":value"', + 'search_modifier_not_source_account_nr_starts' => 'Číslo zdrojového účtu (IBAN) nezačíná na ":value"', + 'search_modifier_source_account_nr_ends' => 'Číslo zdrojového účtu (IBAN) končí na ":value"', + 'search_modifier_not_source_account_nr_ends' => 'Číslo zdrojového účtu (IBAN) nekončí na ":value"', + 'search_modifier_destination_account_is' => 'Název cílového účtu je přesně ":value"', + 'search_modifier_not_destination_account_is' => 'Název cílového účtu není ":value"', + 'search_modifier_destination_account_contains' => 'Název cílového účtu obsahuje ":value"', + 'search_modifier_not_destination_account_contains' => 'Název cílového účtu neobsahuje ":value"', + 'search_modifier_destination_account_starts' => 'Název cílového účtu začíná na ":value"', + 'search_modifier_not_destination_account_starts' => 'Název cílového účtu nezačíná na ":value"', + 'search_modifier_destination_account_ends' => 'Název cílového účtu končí na ":value"', + 'search_modifier_not_destination_account_ends' => 'Název cílového účtu nekončí na ":value"', + 'search_modifier_destination_account_id' => 'ID cílového účtu je :value', + 'search_modifier_not_destination_account_id' => 'ID cílového účtu není :value', + 'search_modifier_destination_is_cash' => 'Cílový účet je (hotovostní) účet', + 'search_modifier_not_destination_is_cash' => 'Cílový účet není (hotovostní) účet', + 'search_modifier_source_is_cash' => 'Zdrojový účet je (hotovostní) účet', + 'search_modifier_not_source_is_cash' => 'Zdrojový účet není (hotovostní) účet', + 'search_modifier_destination_account_nr_is' => 'ČÍslo cílového účtu (IBAN) je ":value"', + 'search_modifier_not_destination_account_nr_is' => 'Číslo cílového účtu (IBAN) je ":value"', + 'search_modifier_destination_account_nr_contains' => 'Číslo cílového účtu (IBAN) obsahuje ":value"', + 'search_modifier_not_destination_account_nr_contains' => 'Číslo cílového účtu (IBAN) neobsahuje ":value"', + 'search_modifier_destination_account_nr_starts' => 'Číslo cílového účtu (IBAN) začíná na ":value"', + 'search_modifier_not_destination_account_nr_starts' => 'Číslo cílového účtu (IBAN) nezačíná na ":value"', + 'search_modifier_destination_account_nr_ends' => 'Číslo cílového účtu (IBAN) končí na ":value"', + 'search_modifier_not_destination_account_nr_ends' => 'Číslo cílového účtu (IBAN) nekončí na ":value"', + 'search_modifier_account_id' => 'ID zdrojového nebo cílového účtu je/jsou: :value', + 'search_modifier_not_account_id' => 'ID zdrojového nebo cílového účtu není/nejsou: :value', + 'search_modifier_category_is' => 'Kategorie je „:value“', + 'search_modifier_not_category_is' => 'Kategorie není „:value“', + 'search_modifier_budget_is' => 'Rozpočet je „:value“', + 'search_modifier_not_budget_is' => 'Rozpočet není „:value“', + 'search_modifier_bill_is' => 'Účet je ":value"', + 'search_modifier_not_bill_is' => 'Účet není ":value"', + 'search_modifier_transaction_type' => 'Typ transakce je ":value"', + 'search_modifier_not_transaction_type' => 'Typ transakce není ":value"', + 'search_modifier_tag_is' => 'Štítek je „:value“', + 'search_modifier_tag_contains' => 'Štítek obsahuje ":value"', + 'search_modifier_not_tag_contains' => 'Štítek neobsahuje ":value"', + 'search_modifier_tag_ends' => 'Štítek končí na ":value"', + 'search_modifier_tag_starts' => 'Štítek začíná na ":value"', + 'search_modifier_not_tag_is' => 'Žádný štítek není ":value"', + 'search_modifier_date_on_year' => 'Transakce je v roce ":value"', + 'search_modifier_not_date_on_year' => 'Transakce není v roce ":value"', + 'search_modifier_date_on_month' => 'Transakce je v měsíci ":value"', + 'search_modifier_not_date_on_month' => 'Transakce není v měsíci ":value"', + 'search_modifier_date_on_day' => 'Transakce je v :value. dni měsíce', + 'search_modifier_not_date_on_day' => 'Transakce není v :value. dni měsíce', + 'search_modifier_date_before_year' => 'Transakce je před nebo v roce ":value"', + 'search_modifier_date_before_month' => 'Transakce je před nebo v měsíci ":value"', + 'search_modifier_date_before_day' => 'Transakce je před nebo v :value. dni měsíce', + 'search_modifier_date_after_year' => 'Transakce je v roce nebo po roce ":value"', + 'search_modifier_date_after_month' => 'Transakce je v měsící nebo po měsíci ":value"', + 'search_modifier_date_after_day' => 'Transakce je po nebo v :value. dni měsíce', // new - 'search_modifier_tag_is_not' => 'No tag is ":value"', - 'search_modifier_not_tag_is_not' => 'Tag is ":value"', - 'search_modifier_account_is' => 'Either account is ":value"', - 'search_modifier_not_account_is' => 'Neither account is ":value"', - 'search_modifier_account_contains' => 'Either account contains ":value"', - 'search_modifier_not_account_contains' => 'Neither account contains ":value"', - 'search_modifier_account_ends' => 'Either account ends with ":value"', - 'search_modifier_not_account_ends' => 'Neither account ends with ":value"', - 'search_modifier_account_starts' => 'Either account starts with ":value"', - 'search_modifier_not_account_starts' => 'Neither account starts with ":value"', - 'search_modifier_account_nr_is' => 'Either account number / IBAN is ":value"', - 'search_modifier_not_account_nr_is' => 'Neither account number / IBAN is ":value"', - 'search_modifier_account_nr_contains' => 'Either account number / IBAN contains ":value"', - 'search_modifier_not_account_nr_contains' => 'Neither account number / IBAN contains ":value"', - 'search_modifier_account_nr_ends' => 'Either account number / IBAN ends with ":value"', - 'search_modifier_not_account_nr_ends' => 'Neither account number / IBAN ends with ":value"', - 'search_modifier_account_nr_starts' => 'Either account number / IBAN starts with ":value"', - 'search_modifier_not_account_nr_starts' => 'Neither account number / IBAN starts with ":value"', - 'search_modifier_category_contains' => 'Category contains ":value"', - 'search_modifier_not_category_contains' => 'Category does not contain ":value"', - 'search_modifier_category_ends' => 'Category ends on ":value"', - 'search_modifier_not_category_ends' => 'Category does not end on ":value"', - 'search_modifier_category_starts' => 'Category starts with ":value"', - 'search_modifier_not_category_starts' => 'Category does not start with ":value"', - 'search_modifier_budget_contains' => 'Budget contains ":value"', - 'search_modifier_not_budget_contains' => 'Budget does not contain ":value"', - 'search_modifier_budget_ends' => 'Budget ends with ":value"', - 'search_modifier_not_budget_ends' => 'Budget does not end on ":value"', - 'search_modifier_budget_starts' => 'Budget starts with ":value"', - 'search_modifier_not_budget_starts' => 'Budget does not start with ":value"', - 'search_modifier_bill_contains' => 'Bill contains ":value"', - 'search_modifier_not_bill_contains' => 'Bill does not contain ":value"', - 'search_modifier_bill_ends' => 'Bill ends with ":value"', - 'search_modifier_not_bill_ends' => 'Bill does not end on ":value"', - 'search_modifier_bill_starts' => 'Bill starts with ":value"', - 'search_modifier_not_bill_starts' => 'Bill does not start with ":value"', - 'search_modifier_external_id_contains' => 'External ID contains ":value"', - 'search_modifier_not_external_id_contains' => 'External ID does not contain ":value"', - 'search_modifier_external_id_ends' => 'External ID ends with ":value"', - 'search_modifier_not_external_id_ends' => 'External ID does not end with ":value"', - 'search_modifier_external_id_starts' => 'External ID starts with ":value"', - 'search_modifier_not_external_id_starts' => 'External ID does not start with ":value"', - 'search_modifier_internal_reference_contains' => 'Internal reference contains ":value"', - 'search_modifier_not_internal_reference_contains' => 'Internal reference does not contain ":value"', - 'search_modifier_internal_reference_ends' => 'Internal reference ends with ":value"', - 'search_modifier_internal_reference_starts' => 'Internal reference starts with ":value"', - 'search_modifier_not_internal_reference_ends' => 'Internal reference does not end with ":value"', - 'search_modifier_not_internal_reference_starts' => 'Internal reference does not start with ":value"', - 'search_modifier_external_url_is' => 'External URL is ":value"', - 'search_modifier_not_external_url_is' => 'External URL is not ":value"', - 'search_modifier_external_url_contains' => 'External URL contains ":value"', - 'search_modifier_not_external_url_contains' => 'External URL does not contain ":value"', - 'search_modifier_external_url_ends' => 'External URL ends with ":value"', - 'search_modifier_not_external_url_ends' => 'External URL does not end with ":value"', - 'search_modifier_external_url_starts' => 'External URL starts with ":value"', - 'search_modifier_not_external_url_starts' => 'External URL does not start with ":value"', - 'search_modifier_has_no_attachments' => 'Transaction has no attachments', - 'search_modifier_not_has_no_attachments' => 'Transaction has attachments', - 'search_modifier_not_has_attachments' => 'Transaction has no attachments', - 'search_modifier_account_is_cash' => 'Either account is the "(cash)" account.', - 'search_modifier_not_account_is_cash' => 'Neither account is the "(cash)" account.', + 'search_modifier_tag_is_not' => 'Žádný štítek není ":value"', + 'search_modifier_not_tag_is_not' => 'Štítek je „:value“', + 'search_modifier_account_is' => 'Alespoň jeden účet je ":value"', + 'search_modifier_not_account_is' => 'Ani jeden účet není ":value"', + 'search_modifier_account_contains' => 'Alespoň jeden účet obsahuje ":value"', + 'search_modifier_not_account_contains' => 'Ani jeden účet neobsahuje ":value"', + 'search_modifier_account_ends' => 'Alespoň jeden účet končí na ":value"', + 'search_modifier_not_account_ends' => 'Ani jeden účet nekončí na ":value"', + 'search_modifier_account_starts' => 'Alespoň jeden účet začíná na ":value"', + 'search_modifier_not_account_starts' => 'Ani jeden účet nezačíná na ":value"', + 'search_modifier_account_nr_is' => 'Alespoň jedno číslo účtu / IBAN je ":value"', + 'search_modifier_not_account_nr_is' => 'Ani jedno číslo účtu / IBAN není ":value"', + 'search_modifier_account_nr_contains' => 'Alespoň jedno číslo účtu / IBAN obsahuje ":value"', + 'search_modifier_not_account_nr_contains' => 'Ani jedno číslo účtu / IBAN neobsahuje ":value"', + 'search_modifier_account_nr_ends' => 'Alespoň jedno číslo účtu / IBAN končí na ":value"', + 'search_modifier_not_account_nr_ends' => 'Ani jedno číslo účtu / IBAN nekončí na ":value"', + 'search_modifier_account_nr_starts' => 'Alespoň jedno číslo účtu / IBAN začíná na ":value"', + 'search_modifier_not_account_nr_starts' => 'Ani jedno číslo účtu / IBAN nezačíná na ":value"', + 'search_modifier_category_contains' => 'Kategorie obsahuje ":value"', + 'search_modifier_not_category_contains' => 'Kategorie neobsahuje ":value"', + 'search_modifier_category_ends' => 'Kategorie končí na ":value"', + 'search_modifier_not_category_ends' => 'Kategorie nekončí na ":value"', + 'search_modifier_category_starts' => 'Kategorie začíná na ":value"', + 'search_modifier_not_category_starts' => 'Kategorie nezačíná na ":value"', + 'search_modifier_budget_contains' => 'Rozpočet obsahuje ":value"', + 'search_modifier_not_budget_contains' => 'Rozpočet neobsahuje ":value"', + 'search_modifier_budget_ends' => 'Rozpočet končí na ":value"', + 'search_modifier_not_budget_ends' => 'Rozpočet nekončí na ":value"', + 'search_modifier_budget_starts' => 'Rozpočet začíná na ":value"', + 'search_modifier_not_budget_starts' => 'Rozpočet nezačíná na ":value"', + 'search_modifier_bill_contains' => 'Účet obsahuje ":value"', + 'search_modifier_not_bill_contains' => 'Účet neobsahuje ":value"', + 'search_modifier_bill_ends' => 'Účet končí na ":value"', + 'search_modifier_not_bill_ends' => 'Účet nekončí na ":value"', + 'search_modifier_bill_starts' => 'Účet začíná na ":value"', + 'search_modifier_not_bill_starts' => 'Účet nezačíná na ":value"', + 'search_modifier_external_id_contains' => 'Externí ID obsahuje ":value"', + 'search_modifier_not_external_id_contains' => 'Externí ID neobsahuje ":value"', + 'search_modifier_external_id_ends' => 'Externí ID končí na ":value"', + 'search_modifier_not_external_id_ends' => 'Externí ID nekončí na ":value"', + 'search_modifier_external_id_starts' => 'Externí ID začíná na ":value"', + 'search_modifier_not_external_id_starts' => 'Externí ID nezačíná na ":value"', + 'search_modifier_internal_reference_contains' => 'Interní reference obsahuje ":value"', + 'search_modifier_not_internal_reference_contains' => 'Interní reference neobsahuje ":value"', + 'search_modifier_internal_reference_ends' => 'Interní reference končí na ":value"', + 'search_modifier_internal_reference_starts' => 'Interní reference začíná na ":value"', + 'search_modifier_not_internal_reference_ends' => 'Interní reference nekončí na ":value"', + 'search_modifier_not_internal_reference_starts' => 'Interní reference nezačíná na ":value"', + 'search_modifier_external_url_is' => 'Externí URL je ":value"', + 'search_modifier_not_external_url_is' => 'Externí URL není ":value"', + 'search_modifier_external_url_contains' => 'Externí URL obsahuje ":value"', + 'search_modifier_not_external_url_contains' => 'Externí URL neobsahuje ":value"', + 'search_modifier_external_url_ends' => 'Externí URL končí na ":value"', + 'search_modifier_not_external_url_ends' => 'Externí URL nekončí na ":value"', + 'search_modifier_external_url_starts' => 'Externí URL začíná na ":value"', + 'search_modifier_not_external_url_starts' => 'Externí URL nezačíná na ":value"', + 'search_modifier_has_no_attachments' => 'Transakce nemá žádné přílohy', + 'search_modifier_not_has_no_attachments' => 'Transakce má přílohy', + 'search_modifier_not_has_attachments' => 'Transakce nemá žádné přílohy', + 'search_modifier_account_is_cash' => 'Alespoň jeden účet je hotovostní.', + 'search_modifier_not_account_is_cash' => 'Ani jeden účet není hotovostní účet.', 'search_modifier_journal_id' => 'The journal ID is ":value"', 'search_modifier_not_journal_id' => 'The journal ID is not ":value"', - 'search_modifier_recurrence_id' => 'The recurring transaction ID is ":value"', - 'search_modifier_not_recurrence_id' => 'The recurring transaction ID is not ":value"', - 'search_modifier_foreign_amount_is' => 'The foreign amount is ":value"', - 'search_modifier_not_foreign_amount_is' => 'The foreign amount is not ":value"', - 'search_modifier_foreign_amount_less' => 'The foreign amount is less than ":value"', - 'search_modifier_not_foreign_amount_more' => 'The foreign amount is less than ":value"', - 'search_modifier_not_foreign_amount_less' => 'The foreign amount is more than ":value"', - 'search_modifier_foreign_amount_more' => 'The foreign amount is more than ":value"', - 'search_modifier_exists' => 'Transaction exists (any transaction)', - 'search_modifier_not_exists' => 'Transaction does not exist (no transaction)', + 'search_modifier_recurrence_id' => 'ID opakované transakce je ":value"', + 'search_modifier_not_recurrence_id' => 'ID opakované transakce není ":value"', + 'search_modifier_foreign_amount_is' => 'Zahraniční částka je ":value"', + 'search_modifier_not_foreign_amount_is' => 'Zahraniční částka není ":value"', + 'search_modifier_foreign_amount_less' => 'Zahraniční částka je menší než ":value"', + 'search_modifier_not_foreign_amount_more' => 'Zahraniční částka je menší než ":value"', + 'search_modifier_not_foreign_amount_less' => 'Zahraniční částka je vyšší než ":value"', + 'search_modifier_foreign_amount_more' => 'Zahraniční částka je vyšší než ":value"', + 'search_modifier_exists' => 'Transakce existuje (jakákoli transakce)', + 'search_modifier_not_exists' => 'Transakce neexistuje (žádná transakce)', // date fields - 'search_modifier_interest_date_on' => 'Transaction interest date is ":value"', - 'search_modifier_not_interest_date_on' => 'Transaction interest date is not ":value"', + 'search_modifier_interest_date_on' => 'Datum zúročení transakce je ":value"', + 'search_modifier_not_interest_date_on' => 'Datum zúročení transakce není ":value"', 'search_modifier_interest_date_on_year' => 'Transaction interest date is in year ":value"', 'search_modifier_not_interest_date_on_year' => 'Transaction interest date is not in year ":value"', 'search_modifier_interest_date_on_month' => 'Transaction interest date is in month ":value"', @@ -597,57 +601,57 @@ return [ 'search_modifier_process_date_after_year' => 'Transaction process date is after or in year ":value"', 'search_modifier_process_date_after_month' => 'Transaction process date is after or in month ":value"', 'search_modifier_process_date_after_day' => 'Transaction process date is after or on day of month ":value"', - 'search_modifier_due_date_on_year' => 'Transaction due date is in year ":value"', - 'search_modifier_due_date_on_month' => 'Transaction due date is in month ":value"', - 'search_modifier_due_date_on_day' => 'Transaction due date is on day of month ":value"', - 'search_modifier_not_due_date_on_year' => 'Transaction due date is not in year ":value"', - 'search_modifier_not_due_date_on_month' => 'Transaction due date is not in month ":value"', - 'search_modifier_not_due_date_on_day' => 'Transaction due date is not on day of month ":value"', - 'search_modifier_due_date_before_year' => 'Transaction due date is before or in year ":value"', - 'search_modifier_due_date_before_month' => 'Transaction due date is before or in month ":value"', - 'search_modifier_due_date_before_day' => 'Transaction due date is before or on day of month ":value"', - 'search_modifier_due_date_after_year' => 'Transaction due date is after or in year ":value"', - 'search_modifier_due_date_after_month' => 'Transaction due date is after or in month ":value"', - 'search_modifier_due_date_after_day' => 'Transaction due date is after or on day of month ":value"', - 'search_modifier_payment_date_on_year' => 'Transaction payment date is in year ":value"', - 'search_modifier_payment_date_on_month' => 'Transaction payment date is in month ":value"', - 'search_modifier_payment_date_on_day' => 'Transaction payment date is on day of month ":value"', - 'search_modifier_not_payment_date_on_year' => 'Transaction payment date is not in year ":value"', - 'search_modifier_not_payment_date_on_month' => 'Transaction payment date is not in month ":value"', - 'search_modifier_not_payment_date_on_day' => 'Transaction payment date is not on day of month ":value"', - 'search_modifier_payment_date_before_year' => 'Transaction payment date is before or in year ":value"', - 'search_modifier_payment_date_before_month' => 'Transaction payment date is before or in month ":value"', - 'search_modifier_payment_date_before_day' => 'Transaction payment date is before or on day of month ":value"', - 'search_modifier_payment_date_after_year' => 'Transaction payment date is after or in year ":value"', - 'search_modifier_payment_date_after_month' => 'Transaction payment date is after or in month ":value"', - 'search_modifier_payment_date_after_day' => 'Transaction payment date is after or on day of month ":value"', - 'search_modifier_invoice_date_on_year' => 'Transaction invoice date is in year ":value"', - 'search_modifier_invoice_date_on_month' => 'Transaction invoice date is in month ":value"', - 'search_modifier_invoice_date_on_day' => 'Transaction invoice date is on day of month ":value"', - 'search_modifier_not_invoice_date_on_year' => 'Transaction invoice date is not in year ":value"', - 'search_modifier_not_invoice_date_on_month' => 'Transaction invoice date is not in month ":value"', - 'search_modifier_not_invoice_date_on_day' => 'Transaction invoice date is not on day of month ":value"', - 'search_modifier_invoice_date_before_year' => 'Transaction invoice date is before or in year ":value"', - 'search_modifier_invoice_date_before_month' => 'Transaction invoice date is before or in month ":value"', - 'search_modifier_invoice_date_before_day' => 'Transaction invoice date is before or on day of month ":value"', - 'search_modifier_invoice_date_after_year' => 'Transaction invoice date is after or in year ":value"', - 'search_modifier_invoice_date_after_month' => 'Transaction invoice date is after or in month ":value"', - 'search_modifier_invoice_date_after_day' => 'Transaction invoice date is after or on day of month ":value"', + 'search_modifier_due_date_on_year' => 'Datum splatnosti transakce je v roce ":value"', + 'search_modifier_due_date_on_month' => 'Datum splatnosti transakce je v měsíci ":value"', + 'search_modifier_due_date_on_day' => 'Datum splatnosti transakce je v ":value". dni měsíce', + 'search_modifier_not_due_date_on_year' => 'Datum splatnosti transakce není v roce ":value"', + 'search_modifier_not_due_date_on_month' => 'Datum splatnosti transakce není v měsíci ":value"', + 'search_modifier_not_due_date_on_day' => 'Datum splatnosti transakce není v ":value". dni měsíce', + 'search_modifier_due_date_before_year' => 'Datum splatnosti transakce je před nebo v roce ":value"', + 'search_modifier_due_date_before_month' => 'Datum splatnosti transakce je před nebo v měsíci ":value"', + 'search_modifier_due_date_before_day' => 'Datum splatnosti transakce je před nebo v ":value". dni měsíce', + 'search_modifier_due_date_after_year' => 'Datum splatnosti transakce je po nebo v roce ":value"', + 'search_modifier_due_date_after_month' => 'Datum splatnosti transakce je po nebo v měsíci ":value"', + 'search_modifier_due_date_after_day' => 'Datum splatnosti transakce je po nebo v ":value". dni měsíce', + 'search_modifier_payment_date_on_year' => 'Datum platby transakce je v roce ":value"', + 'search_modifier_payment_date_on_month' => 'Datum platby transakce je v měsíci ":value"', + 'search_modifier_payment_date_on_day' => 'Datum platby transakce je v ":value". dni měsíce', + 'search_modifier_not_payment_date_on_year' => 'Datum platby transakce není v roce ":value"', + 'search_modifier_not_payment_date_on_month' => 'Datum platby transakce není v měsíci ":value"', + 'search_modifier_not_payment_date_on_day' => 'Datum platby transakce není v ":value". den měsíce', + 'search_modifier_payment_date_before_year' => 'Datum platby transakce je před nebo v roce ":value"', + 'search_modifier_payment_date_before_month' => 'Datum platby transakce je před nebo v měsíci ":value"', + 'search_modifier_payment_date_before_day' => 'Datum platby transakce je před nebo v ":value". dni měsíce', + 'search_modifier_payment_date_after_year' => 'Datum platby transakce je po nebo v roce ":value"', + 'search_modifier_payment_date_after_month' => 'Datum platby transakce je po nebo v měsíci ":value"', + 'search_modifier_payment_date_after_day' => 'Datum platby transakce je po nebo v ":value". dni měsíce', + 'search_modifier_invoice_date_on_year' => 'Datum vystavení faktury transakce je v roce ":value"', + 'search_modifier_invoice_date_on_month' => 'Datum vystavení faktury transakce je v měsíci ":value"', + 'search_modifier_invoice_date_on_day' => 'Datum vystavení faktury transakce je v ":value". dni měsíce', + 'search_modifier_not_invoice_date_on_year' => 'Datum vystavení faktury transakce není v roce ":value"', + 'search_modifier_not_invoice_date_on_month' => 'Datum vystavení faktury transakce není v měsíci ":value"', + 'search_modifier_not_invoice_date_on_day' => 'Datum vystavení faktury transakce není v ":value". dni měsíce', + 'search_modifier_invoice_date_before_year' => 'Datum vystavení faktury transakce je před nebo v roce ":value"', + 'search_modifier_invoice_date_before_month' => 'Datum vystavení faktury transakce je před nebo v měsíci ":value"', + 'search_modifier_invoice_date_before_day' => 'Datum vystavení faktury transakce je před nebo v ":value". dni měsíce', + 'search_modifier_invoice_date_after_year' => 'Datum vystavení faktury transakce je po nebo v roce ":value"', + 'search_modifier_invoice_date_after_month' => 'Datum vystavení faktury transakce je po nebo v měsíci ":value"', + 'search_modifier_invoice_date_after_day' => 'Datum vystavení faktury transakce je po nebo v ":value". dni měsíce', // other dates - 'search_modifier_updated_at_on_year' => 'Transaction was last updated in year ":value"', - 'search_modifier_updated_at_on_month' => 'Transaction was last updated in month ":value"', - 'search_modifier_updated_at_on_day' => 'Transaction was last updated on day of month ":value"', - 'search_modifier_not_updated_at_on_year' => 'Transaction was not last updated in year ":value"', - 'search_modifier_not_updated_at_on_month' => 'Transaction was not last updated in month ":value"', - 'search_modifier_not_updated_at_on_day' => 'Transaction was not last updated on day of month ":value"', - 'search_modifier_updated_at_before_year' => 'Transaction was last updated in or before year ":value"', - 'search_modifier_updated_at_before_month' => 'Transaction was last updated in or before month ":value"', - 'search_modifier_updated_at_before_day' => 'Transaction was last updated on or before day of month ":value"', - 'search_modifier_updated_at_after_year' => 'Transaction was last updated in or after year ":value"', - 'search_modifier_updated_at_after_month' => 'Transaction was last updated in or after month ":value"', - 'search_modifier_updated_at_after_day' => 'Transaction was last updated on or after day of month ":value"', - 'search_modifier_created_at_on_year' => 'Transaction was created in year ":value"', - 'search_modifier_created_at_on_month' => 'Transaction was created in month ":value"', + 'search_modifier_updated_at_on_year' => 'Transakce byla naposledy aktualizována v roce ":value"', + 'search_modifier_updated_at_on_month' => 'Transakce byla naposledy aktualizována v měsíci ":value"', + 'search_modifier_updated_at_on_day' => 'Transakce byla naposledy aktualizována v ":value". dni měsíce', + 'search_modifier_not_updated_at_on_year' => 'Transakce nebyla naposledy aktualizována v roce ":value"', + 'search_modifier_not_updated_at_on_month' => 'Transakce nebyla naposledy aktualizována v měsíci ":value"', + 'search_modifier_not_updated_at_on_day' => 'Transakce nebyla naposledy aktualizována v ":value". dni měsíce', + 'search_modifier_updated_at_before_year' => 'Transakce byla naposledy aktualizována v roce nebo před rokem ":value"', + 'search_modifier_updated_at_before_month' => 'Transakce byla naposledy aktualizována v měsíci nebo dříve ":value"', + 'search_modifier_updated_at_before_day' => 'Transakce byla naposledy aktualizována před nebo v ":value". dni měsíce', + 'search_modifier_updated_at_after_year' => 'Transakce byla naposledy aktualizována v roce nebo po roce ":value"', + 'search_modifier_updated_at_after_month' => 'Transakce byla naposledy aktualizována v měsíci nebo po měsíci ":value"', + 'search_modifier_updated_at_after_day' => 'Transakce byla naposledy aktualizována po nebo v ":value". dni měsíce', + 'search_modifier_created_at_on_year' => 'Transakce byla vytvořena v roce ":value"', + 'search_modifier_created_at_on_month' => 'Transakce byla vytvořena v měsíci ":value"', 'search_modifier_created_at_on_day' => 'Transaction was created on day of month ":value"', 'search_modifier_not_created_at_on_year' => 'Transaction was not created in year ":value"', 'search_modifier_not_created_at_on_month' => 'Transaction was not created in month ":value"', @@ -655,11 +659,11 @@ return [ 'search_modifier_created_at_before_year' => 'Transaction was created in or before year ":value"', 'search_modifier_created_at_before_month' => 'Transaction was created in or before month ":value"', 'search_modifier_created_at_before_day' => 'Transaction was created on or before day of month ":value"', - 'search_modifier_created_at_after_year' => 'Transaction was created in or after year ":value"', - 'search_modifier_created_at_after_month' => 'Transaction was created in or after month ":value"', - 'search_modifier_created_at_after_day' => 'Transaction was created on or after day of month ":value"', - 'search_modifier_interest_date_before' => 'Transaction interest date is on or before ":value"', - 'search_modifier_interest_date_after' => 'Transaction interest date is on or after ":value"', + 'search_modifier_created_at_after_year' => 'Transakce byla vytvořena v roce nebo po roce ":value"', + 'search_modifier_created_at_after_month' => 'Transakce byla vytvořena v měsíci nebo po měsíci ":value"', + 'search_modifier_created_at_after_day' => 'Transakce byla vytvořena v nebo po :value. dni měsíce', + 'search_modifier_interest_date_before' => 'Datum zúročení je v nebo před ":value"', + 'search_modifier_interest_date_after' => 'Datum zúročení transakce je v nebo po ":value"', 'search_modifier_book_date_on' => 'Transaction book date is on ":value"', 'search_modifier_not_book_date_on' => 'Transaction book date is not on ":value"', 'search_modifier_book_date_before' => 'Transaction book date is on or before ":value"', @@ -668,8 +672,8 @@ return [ 'search_modifier_not_process_date_on' => 'Transaction process date is not on ":value"', 'search_modifier_process_date_before' => 'Transaction process date is on or before ":value"', 'search_modifier_process_date_after' => 'Transaction process date is on or after ":value"', - 'search_modifier_due_date_on' => 'Transaction due date is on ":value"', - 'search_modifier_not_due_date_on' => 'Transaction due date is not on ":value"', + 'search_modifier_due_date_on' => 'Datum splatnosti transakce je ":value"', + 'search_modifier_not_due_date_on' => 'Datum splatnosti transakce není v ":value"', 'search_modifier_due_date_before' => 'Transaction due date is on or before ":value"', 'search_modifier_due_date_after' => 'Transaction due date is on or after ":value"', 'search_modifier_payment_date_on' => 'Transaction payment date is on ":value"', @@ -699,8 +703,8 @@ return [ 'search_modifier_attachment_notes_ends' => 'Any attachment\'s notes end with ":value"', 'search_modifier_not_attachment_name_is' => 'Any attachment\'s name is not ":value"', 'search_modifier_not_attachment_name_contains' => 'Any attachment\'s name does not contain ":value"', - 'search_modifier_not_attachment_name_starts' => 'Any attachment\'s name does not start with ":value"', - 'search_modifier_not_attachment_name_ends' => 'Any attachment\'s name does not end with ":value"', + 'search_modifier_not_attachment_name_starts' => 'Žádný název přílohy nezačíná na ":value"', + 'search_modifier_not_attachment_name_ends' => 'Žádný název přílohy nekončí na „:value“', 'search_modifier_not_attachment_notes_are' => 'Any attachment\'s notes are not ":value"', 'search_modifier_not_attachment_notes_contains' => 'Any attachment\'s notes do not contain ":value"', 'search_modifier_not_attachment_notes_starts' => 'Any attachment\'s notes start with ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'The following modifiers are applied to the search as well:', 'general_search_error' => 'An error occurred while searching. Please check the log files for more information.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'You cannot execute inactive rules.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Pravidla', 'rule_name' => 'Název pravidla', 'rule_triggers' => 'Pravidlo se uplatní když', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Kdy je transakce aktualizována', 'rule_trigger_user_action' => 'Uživatelská akce je „:trigger_value“', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Source account name starts with..', 'rule_trigger_source_account_starts' => 'Source account name starts with ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Rozpočet je „:trigger_value“', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Měna transakce je…', 'rule_trigger_currency_is' => 'Měna transakce je „:trigger_value“', 'rule_trigger_foreign_currency_is_choice' => 'Transaction foreign currency is..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Rule group for bills', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Rule for bill ":name"', 'new_rule_for_bill_description' => 'This rule marks transactions for bill ":name".', - 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', - 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', + 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', + 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', // tags - 'store_new_tag' => 'Uložit nový štítek', - 'update_tag' => 'Aktualizovat štítek', - 'no_location_set' => 'Není nastaveno žádné umístění.', - 'meta_data' => 'Metadata', - 'location' => 'Umístění', - 'without_date' => 'Bez data', - 'result' => 'Výsledek', - 'sums_apply_to_range' => 'Všechny součty se vztahují na vybraný rozsah', - 'mapbox_api_key' => 'Pro použití mapy, získejte klíč k aplikačnímu programovému rozhraní Mapbox. Otevřete soubor .env a tento kód zadejte za MAPBOX_API_KEY=.', - 'press_object_location' => 'Right click or long press to set the object\'s location.', - 'clear_location' => 'Vymazat umístění', - 'delete_all_selected_tags' => 'Delete all selected tags', - 'select_tags_to_delete' => 'Don\'t forget to select some tags.', - 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', - 'create_rule_from_transaction' => 'Create rule based on transaction', - 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', - + 'store_new_tag' => 'Uložit nový štítek', + 'update_tag' => 'Aktualizovat štítek', + 'no_location_set' => 'Není nastaveno žádné umístění.', + 'meta_data' => 'Metadata', + 'location' => 'Umístění', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Bez data', + 'result' => 'Výsledek', + 'sums_apply_to_range' => 'Všechny součty se vztahují na vybraný rozsah', + 'mapbox_api_key' => 'Pro použití mapy, získejte klíč k aplikačnímu programovému rozhraní Mapbox. Otevřete soubor .env a tento kód zadejte za MAPBOX_API_KEY=.', + 'press_object_location' => 'Right click or long press to set the object\'s location.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Vymazat umístění', + 'delete_all_selected_tags' => 'Delete all selected tags', + 'select_tags_to_delete' => 'Don\'t forget to select some tags.', + 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', + 'create_rule_from_transaction' => 'Create rule based on transaction', + 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(rovno jazyku)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Účty na domovské obrazovce', - 'pref_home_screen_accounts_help' => 'Které účty zobrazit na domovské stránce?', - 'pref_view_range' => 'Zobrazit rozsah', - 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', - 'pref_1D' => 'Jeden den', - 'pref_1W' => 'Jeden týden', - 'pref_1M' => 'Jeden měsíc', - 'pref_3M' => 'Tři měsíce (čtvrtletí)', - 'pref_6M' => 'Šest měsíců', - 'pref_1Y' => 'Jeden rok', - 'pref_last365' => 'Last year', - 'pref_last90' => 'Last 90 days', - 'pref_last30' => 'Last 30 days', - 'pref_last7' => 'Last 7 days', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Jazyky', - 'pref_locale' => 'Místní nastavení', - 'pref_languages_help' => 'Firefly III podporuje několik jazyků – ve kterém ho chcete používat?', - 'pref_locale_help' => 'Firefly III vám umožňuje nastavit další lokální nastavení, jako je formátování měn, čísel a dat. Položky v tomto seznamu nemusí být podporovány vaším systémem. Firefly III nemá správné nastavení data pro každé lokální místo. Pro vylepšení mě kontaktujte.', - 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', - 'pref_custom_fiscal_year' => 'Nastavení fiskálního roku', - 'pref_custom_fiscal_year_label' => 'Zapnuto', - 'pref_custom_fiscal_year_help' => 'Pro země, ve kterých finanční rok nezačíná 1. ledna a tedy ani nekončí 31. prosince, je možné zapnutím tohoto určit den začátku a konce fiskálního roku', - 'pref_fiscal_year_start_label' => 'Fiscal year start date', - 'pref_two_factor_auth' => 'Dvoufázové ověření', - 'pref_two_factor_auth_help' => 'When you enable 2-step verification (also known as two-factor authentication), you add an extra layer of security to your account. You sign in with something you know (your password) and something you have (a verification code). Verification codes are generated by an application on your phone, such as Authy or Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Zapnout dvoufázové ověření', - 'pref_two_factor_auth_disabled' => '2-step verification code removed and disabled', - 'pref_two_factor_auth_remove_it' => 'Nezapomeňte účet odstranit z vaší ověřovací aplikace!', - 'pref_two_factor_auth_code' => 'Ověřit kód', - 'pref_two_factor_auth_code_help' => 'Naskenujte QR kód aplikací na vašem telefonu (jako například Authy nebo Google Authenticator) a zadejte aplikací vytvořený kód.', - 'pref_two_factor_auth_reset_code' => 'Resetovat ověřovací kód', - 'pref_two_factor_auth_disable_2fa' => 'Vypnout dvoufázové ověření', - '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', - '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', - '2fa_already_enabled' => '2-step verification is already enabled.', - 'wrong_mfa_code' => 'This MFA code is not valid.', - 'pref_save_settings' => 'Uložit nastavení', - 'saved_preferences' => 'Předvolby uloženy!', - 'preferences_general' => 'Obecné', - 'preferences_frontpage' => 'Domovská obrazovka', - 'preferences_security' => 'Zabezpečení', - 'preferences_layout' => 'Rozvržení', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Zobrazovat vklady na domovské obrazovce', - 'pref_home_show_deposits_info' => 'Domovská obrazovka už zobrazuje vaše výdajové účty. Mají být zobrazovány také ty příjmové?', - 'pref_home_do_show_deposits' => 'Ano, zobrazit je', - 'successful_count' => 'z toho :count úspěšné', - 'list_page_size_title' => 'Velikost stránky', - 'list_page_size_help' => 'Jakýkoli seznam věcí (účty, transakce, atd) zobrazuje nejvýše tolik na stránku.', - 'list_page_size_label' => 'Velikost stránky', - 'between_dates' => '(:start a :end)', - 'pref_optional_fields_transaction' => 'Volitelné kolonky pro transakce', - 'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.', - 'optional_tj_date_fields' => 'Kolonky pro datum', - 'optional_tj_other_fields' => 'Další pole', - 'optional_tj_attachment_fields' => 'Kolonky příloh', - 'pref_optional_tj_interest_date' => 'Úrokové datum', - 'pref_optional_tj_book_date' => 'Datum rezervace', - 'pref_optional_tj_process_date' => 'Datum zpracování', - 'pref_optional_tj_due_date' => 'Datum splatnosti', - 'pref_optional_tj_payment_date' => 'Datum zaplacení', - 'pref_optional_tj_invoice_date' => 'Datum vystavení', - 'pref_optional_tj_internal_reference' => 'Interní reference', - 'pref_optional_tj_notes' => 'Poznámky', - 'pref_optional_tj_attachments' => 'Přílohy', - 'pref_optional_tj_external_url' => 'External URL', - 'pref_optional_tj_location' => 'Poloha', - 'pref_optional_tj_links' => 'Transaction links', - 'optional_field_meta_dates' => 'Datumy', - 'optional_field_meta_business' => 'Business', - 'optional_field_attachments' => 'Přílohy', - 'optional_field_meta_data' => 'Volitelná metadata', - 'external_url' => 'Externí URL adresa', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(rovno jazyku)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Účty na domovské obrazovce', + 'pref_home_screen_accounts_help' => 'Které účty zobrazit na domovské stránce?', + 'pref_view_range' => 'Zobrazit rozsah', + 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', + 'pref_1D' => 'Jeden den', + 'pref_1W' => 'Jeden týden', + 'pref_1M' => 'Jeden měsíc', + 'pref_3M' => 'Tři měsíce (čtvrtletí)', + 'pref_6M' => 'Šest měsíců', + 'pref_1Y' => 'Jeden rok', + 'pref_last365' => 'Last year', + 'pref_last90' => 'Last 90 days', + 'pref_last30' => 'Last 30 days', + 'pref_last7' => 'Last 7 days', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => 'Jazyky', + 'pref_locale' => 'Místní nastavení', + 'pref_languages_help' => 'Firefly III podporuje několik jazyků – ve kterém ho chcete používat?', + 'pref_locale_help' => 'Firefly III vám umožňuje nastavit další lokální nastavení, jako je formátování měn, čísel a dat. Položky v tomto seznamu nemusí být podporovány vaším systémem. Firefly III nemá správné nastavení data pro každé lokální místo. Pro vylepšení mě kontaktujte.', + 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', + 'pref_custom_fiscal_year' => 'Nastavení fiskálního roku', + 'pref_custom_fiscal_year_label' => 'Zapnuto', + 'pref_custom_fiscal_year_help' => 'Pro země, ve kterých finanční rok nezačíná 1. ledna a tedy ani nekončí 31. prosince, je možné zapnutím tohoto určit den začátku a konce fiskálního roku', + 'pref_fiscal_year_start_label' => 'Fiscal year start date', + 'pref_two_factor_auth' => 'Dvoufázové ověření', + 'pref_two_factor_auth_help' => 'When you enable 2-step verification (also known as two-factor authentication), you add an extra layer of security to your account. You sign in with something you know (your password) and something you have (a verification code). Verification codes are generated by an application on your phone, such as Authy or Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Zapnout dvoufázové ověření', + 'pref_two_factor_auth_disabled' => '2-step verification code removed and disabled', + 'pref_two_factor_auth_remove_it' => 'Nezapomeňte účet odstranit z vaší ověřovací aplikace!', + 'pref_two_factor_auth_code' => 'Ověřit kód', + 'pref_two_factor_auth_code_help' => 'Naskenujte QR kód aplikací na vašem telefonu (jako například Authy nebo Google Authenticator) a zadejte aplikací vytvořený kód.', + 'pref_two_factor_auth_reset_code' => 'Resetovat ověřovací kód', + 'pref_two_factor_auth_disable_2fa' => 'Vypnout dvoufázové ověření', + '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', + '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', + '2fa_already_enabled' => '2-step verification is already enabled.', + 'wrong_mfa_code' => 'This MFA code is not valid.', + 'pref_save_settings' => 'Uložit nastavení', + 'saved_preferences' => 'Předvolby uloženy!', + 'preferences_general' => 'Obecné', + 'preferences_frontpage' => 'Domovská obrazovka', + 'preferences_security' => 'Zabezpečení', + 'preferences_layout' => 'Rozvržení', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Zobrazovat vklady na domovské obrazovce', + 'pref_home_show_deposits_info' => 'Domovská obrazovka už zobrazuje vaše výdajové účty. Mají být zobrazovány také ty příjmové?', + 'pref_home_do_show_deposits' => 'Ano, zobrazit je', + 'successful_count' => 'z toho :count úspěšné', + 'list_page_size_title' => 'Velikost stránky', + 'list_page_size_help' => 'Jakýkoli seznam věcí (účty, transakce, atd) zobrazuje nejvýše tolik na stránku.', + 'list_page_size_label' => 'Velikost stránky', + 'between_dates' => '(:start a :end)', + 'pref_optional_fields_transaction' => 'Volitelné kolonky pro transakce', + 'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.', + 'optional_tj_date_fields' => 'Kolonky pro datum', + 'optional_tj_other_fields' => 'Další pole', + 'optional_tj_attachment_fields' => 'Kolonky příloh', + 'pref_optional_tj_interest_date' => 'Úrokové datum', + 'pref_optional_tj_book_date' => 'Datum rezervace', + 'pref_optional_tj_process_date' => 'Datum zpracování', + 'pref_optional_tj_due_date' => 'Datum splatnosti', + 'pref_optional_tj_payment_date' => 'Datum zaplacení', + 'pref_optional_tj_invoice_date' => 'Datum vystavení', + 'pref_optional_tj_internal_reference' => 'Interní reference', + 'pref_optional_tj_notes' => 'Poznámky', + 'pref_optional_tj_attachments' => 'Přílohy', + 'pref_optional_tj_external_url' => 'External URL', + 'pref_optional_tj_location' => 'Poloha', + 'pref_optional_tj_links' => 'Transaction links', + 'optional_field_meta_dates' => 'Datumy', + 'optional_field_meta_business' => 'Business', + 'optional_field_attachments' => 'Přílohy', + 'optional_field_meta_data' => 'Volitelná metadata', + 'external_url' => 'Externí URL adresa', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'All your other sessions have been logged out.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Delete ALL your budgets', - 'delete_all_categories' => 'Smazat VŠECHNY vaše kategorie', - 'delete_all_tags' => 'Smazat VŠECHNY vaše štítky', - 'delete_all_bills' => 'Delete ALL your bills', - 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', - 'delete_all_rules' => 'Delete ALL your rules', - 'delete_all_recurring' => 'Delete ALL your recurring transactions', - 'delete_all_object_groups' => 'Delete ALL your object groups', - 'delete_all_accounts' => 'Delete ALL your accounts', - 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', - 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', - 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', - 'delete_all_liabilities' => 'Delete ALL your liabilities', - 'delete_all_transactions' => 'Delete ALL your transactions', - 'delete_all_withdrawals' => 'Delete ALL your withdrawals', - 'delete_all_deposits' => 'Delete ALL your deposits', - 'delete_all_transfers' => 'Delete ALL your transfers', - 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', - 'deleted_all_budgets' => 'Všechny rozpočty byly smazány', - 'deleted_all_categories' => 'Všechny kategorie byly smazány', - 'deleted_all_tags' => 'Všechny štítky byly smazány', - 'deleted_all_bills' => 'All bills have been deleted', - 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', - 'deleted_all_rules' => 'All rules and rule groups have been deleted', - 'deleted_all_object_groups' => 'All groups have been deleted', - 'deleted_all_accounts' => 'All accounts have been deleted', - 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', - 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', - 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', - 'deleted_all_liabilities' => 'All liabilities have been deleted', - 'deleted_all_transactions' => 'All transactions have been deleted', - 'deleted_all_withdrawals' => 'All withdrawals have been deleted', - 'deleted_all_deposits' => 'All deposits have been deleted', - 'deleted_all_transfers' => 'All transfers have been deleted', - 'deleted_all_recurring' => 'All recurring transactions have been deleted', - 'change_your_password' => 'Změnit své heslo', - 'delete_account' => 'Smazat účet', - 'current_password' => 'Stávající heslo', - 'new_password' => 'Nové heslo', - 'new_password_again' => 'Nové heslo (zopakování)', - 'delete_your_account' => 'Smazat svůj účet', - 'delete_your_account_help' => 'Smazání vašeho účtu smaže také všechny účty, transakce, vše, co jste ve Firefly III uložili. Bude to PRYČ.', - 'delete_your_account_password' => 'Pokračujte zadáním svého hesla.', - 'password' => 'Heslo', - 'are_you_sure' => 'Opravdu provést? Není možné vzít zpět.', - 'delete_account_button' => 'SMAZAT svůj účet', - 'invalid_current_password' => 'Neplatné stávající heslo!', - 'password_changed' => 'Heslo změněno.', - 'should_change' => 'Myšlenka je změnit si heslo.', - 'invalid_password' => 'Neplatné heslo.', - 'what_is_pw_security' => 'Co je „ověřit odolnost hesla“.', - 'secure_pw_title' => 'Jak zvolit odolné heslo', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => 'Nemine týden, abychom neviděli zprávy o stránkách, ze kterých unikly hesla jejich uživatelů. Hackeři a zloději tato hesla používají pro pokus o ukradení vašich soukromých informací. Informace jsou cenné.', - 'secure_pw_ff' => 'Používáte stejná hesla napříč webem? Pokud jedna ze stránek ztratí vaše heslo, hackeři mají přístup ke všem vašim datům. Firefly III spoléhá na to, že zvolíte silné a jinde nepoužívané heslo pro ochranu vašich finančních záznamů.', - 'secure_pw_check_box' => 'Jako pomoc Firefly III může zkontrolovat heslo které chcete použít, zda v minulosti nebylo ukradeno (včetně jeho otisku). V takovém případě aplikace NEdoporučí používat takové heslo.', - 'secure_pw_working_title' => 'Jak to funguje?', - 'secure_pw_working' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', - 'secure_pw_should' => 'Mám tuto kolonku zaškrtnout?', - 'secure_pw_long_password' => 'Ano, vždy ověřit že je heslo bezpečné.', - 'command_line_token' => 'Token pro příkazový řádek', - 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', - 'regenerate_command_line_token' => 'Regenerate command line token', - 'token_regenerated' => 'Byl vytvořen nový token pro příkazový řádek', - 'change_your_email' => 'Změna e-mailové adresy', - 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', - 'email_changed_logout' => 'Dokud neověříte svou emailovou adresu, nemůžete se přihlásit.', - 'login_with_new_email' => 'Nyní se můžete přihlásit pomocí nové e-mailové adresy.', - 'login_with_old_email' => 'Nyní se můžete přihlásit pomocí původní e-mailové adresy.', - 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', - 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', - 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', - 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Clients', - 'profile_oauth_no_clients' => 'Zatím jste nevytvořili OAuth klienty.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Klienti', - 'profile_oauth_client_id' => 'ID zákazníka', - 'profile_oauth_client_name' => 'Jméno', - 'profile_oauth_client_secret' => 'Tajný klíč', - 'profile_oauth_create_new_client' => 'Vytvořit nového klienta', - 'profile_oauth_create_client' => 'Vytvořit klienta', - 'profile_oauth_edit_client' => 'Upravit klienta', - 'profile_oauth_name_help' => 'Something your users will recognize and trust.', - 'profile_oauth_redirect_url' => 'Přesměrovat URL adresu', - 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', - 'profile_authorized_apps' => 'Authorized applications', - 'profile_authorized_clients' => 'Autorizovaní klienti', - 'profile_scopes' => 'Scopes', - 'profile_revoke' => 'Revoke', - 'profile_oauth_client_secret_title' => 'Client Secret', - 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', - 'profile_personal_access_tokens' => 'Personal Access Tokens', - 'profile_personal_access_token' => 'Personal Access Token', - 'profile_oauth_confidential' => 'Confidential', - 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', - 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', - 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', - 'profile_create_new_token' => 'Vytvořit nový token', - 'profile_create_token' => 'Vytvořit token', - 'profile_create' => 'Vytvořit', - 'profile_save_changes' => 'Uložit změny', - 'profile_whoops' => 'Omlouváme se, tohle nějak nefunguje', - 'profile_something_wrong' => 'Something went wrong!', - 'profile_try_again' => 'Something went wrong. Please try again.', - 'amounts' => 'Amounts', - 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', - 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', - 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', - 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'All your other sessions have been logged out.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Delete ALL your budgets', + 'delete_all_categories' => 'Smazat VŠECHNY vaše kategorie', + 'delete_all_tags' => 'Smazat VŠECHNY vaše štítky', + 'delete_all_bills' => 'Delete ALL your bills', + 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', + 'delete_all_rules' => 'Delete ALL your rules', + 'delete_all_recurring' => 'Delete ALL your recurring transactions', + 'delete_all_object_groups' => 'Delete ALL your object groups', + 'delete_all_accounts' => 'Delete ALL your accounts', + 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', + 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', + 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', + 'delete_all_liabilities' => 'Delete ALL your liabilities', + 'delete_all_transactions' => 'Delete ALL your transactions', + 'delete_all_withdrawals' => 'Delete ALL your withdrawals', + 'delete_all_deposits' => 'Delete ALL your deposits', + 'delete_all_transfers' => 'Delete ALL your transfers', + 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', + 'deleted_all_budgets' => 'Všechny rozpočty byly smazány', + 'deleted_all_categories' => 'Všechny kategorie byly smazány', + 'deleted_all_tags' => 'Všechny štítky byly smazány', + 'deleted_all_bills' => 'All bills have been deleted', + 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', + 'deleted_all_rules' => 'All rules and rule groups have been deleted', + 'deleted_all_object_groups' => 'All groups have been deleted', + 'deleted_all_accounts' => 'All accounts have been deleted', + 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', + 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', + 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', + 'deleted_all_liabilities' => 'All liabilities have been deleted', + 'deleted_all_transactions' => 'All transactions have been deleted', + 'deleted_all_withdrawals' => 'All withdrawals have been deleted', + 'deleted_all_deposits' => 'All deposits have been deleted', + 'deleted_all_transfers' => 'All transfers have been deleted', + 'deleted_all_recurring' => 'All recurring transactions have been deleted', + 'change_your_password' => 'Změnit své heslo', + 'delete_account' => 'Smazat účet', + 'current_password' => 'Stávající heslo', + 'new_password' => 'Nové heslo', + 'new_password_again' => 'Nové heslo (zopakování)', + 'delete_your_account' => 'Smazat svůj účet', + 'delete_your_account_help' => 'Smazání vašeho účtu smaže také všechny účty, transakce, vše, co jste ve Firefly III uložili. Bude to PRYČ.', + 'delete_your_account_password' => 'Pokračujte zadáním svého hesla.', + 'password' => 'Heslo', + 'are_you_sure' => 'Opravdu provést? Není možné vzít zpět.', + 'delete_account_button' => 'SMAZAT svůj účet', + 'invalid_current_password' => 'Neplatné stávající heslo!', + 'password_changed' => 'Heslo změněno.', + 'should_change' => 'Myšlenka je změnit si heslo.', + 'invalid_password' => 'Neplatné heslo.', + 'what_is_pw_security' => 'Co je „ověřit odolnost hesla“.', + 'secure_pw_title' => 'Jak zvolit odolné heslo', + 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', + 'secure_pw_history' => 'Nemine týden, abychom neviděli zprávy o stránkách, ze kterých unikly hesla jejich uživatelů. Hackeři a zloději tato hesla používají pro pokus o ukradení vašich soukromých informací. Informace jsou cenné.', + 'secure_pw_ff' => 'Používáte stejná hesla napříč webem? Pokud jedna ze stránek ztratí vaše heslo, hackeři mají přístup ke všem vašim datům. Firefly III spoléhá na to, že zvolíte silné a jinde nepoužívané heslo pro ochranu vašich finančních záznamů.', + 'secure_pw_check_box' => 'Jako pomoc Firefly III může zkontrolovat heslo které chcete použít, zda v minulosti nebylo ukradeno (včetně jeho otisku). V takovém případě aplikace NEdoporučí používat takové heslo.', + 'secure_pw_working_title' => 'Jak to funguje?', + 'secure_pw_working' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', + 'secure_pw_should' => 'Mám tuto kolonku zaškrtnout?', + 'secure_pw_long_password' => 'Ano, vždy ověřit že je heslo bezpečné.', + 'command_line_token' => 'Token pro příkazový řádek', + 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', + 'regenerate_command_line_token' => 'Regenerate command line token', + 'token_regenerated' => 'Byl vytvořen nový token pro příkazový řádek', + 'change_your_email' => 'Změna e-mailové adresy', + 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', + 'email_changed_logout' => 'Dokud neověříte svou emailovou adresu, nemůžete se přihlásit.', + 'login_with_new_email' => 'Nyní se můžete přihlásit pomocí nové e-mailové adresy.', + 'login_with_old_email' => 'Nyní se můžete přihlásit pomocí původní e-mailové adresy.', + 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', + 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', + 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', + 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Clients', + 'profile_oauth_no_clients' => 'Zatím jste nevytvořili OAuth klienty.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Klienti', + 'profile_oauth_client_id' => 'ID zákazníka', + 'profile_oauth_client_name' => 'Jméno', + 'profile_oauth_client_secret' => 'Tajný klíč', + 'profile_oauth_create_new_client' => 'Vytvořit nového klienta', + 'profile_oauth_create_client' => 'Vytvořit klienta', + 'profile_oauth_edit_client' => 'Upravit klienta', + 'profile_oauth_name_help' => 'Something your users will recognize and trust.', + 'profile_oauth_redirect_url' => 'Přesměrovat URL adresu', + 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', + 'profile_authorized_apps' => 'Authorized applications', + 'profile_authorized_clients' => 'Autorizovaní klienti', + 'profile_scopes' => 'Scopes', + 'profile_revoke' => 'Revoke', + 'profile_oauth_client_secret_title' => 'Client Secret', + 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', + 'profile_personal_access_tokens' => 'Personal Access Tokens', + 'profile_personal_access_token' => 'Personal Access Token', + 'profile_oauth_confidential' => 'Confidential', + 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', + 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', + 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', + 'profile_create_new_token' => 'Vytvořit nový token', + 'profile_create_token' => 'Vytvořit token', + 'profile_create' => 'Vytvořit', + 'profile_save_changes' => 'Uložit změny', + 'profile_whoops' => 'Omlouváme se, tohle nějak nefunguje', + 'profile_something_wrong' => 'Something went wrong!', + 'profile_try_again' => 'Something went wrong. Please try again.', + 'amounts' => 'Amounts', + 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', + 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', + 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', + 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Export data from Firefly III', - 'export_data_menu' => 'Exportovat data', - 'export_data_bc' => 'Export data from Firefly III', - 'export_data_main_title' => 'Export data from Firefly III', - 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', - 'export_data_all_transactions' => 'Export all transactions', - 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Export data from Firefly III', + 'export_data_menu' => 'Exportovat data', + 'export_data_bc' => 'Export data from Firefly III', + 'export_data_main_title' => 'Export data from Firefly III', + 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', + 'export_data_all_transactions' => 'Export all transactions', + 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Jedna příloha|:count příloh', - 'attachments' => 'Přílohy', - 'edit_attachment' => 'Upravit přílohu ":name"', - 'update_attachment' => 'Aktualizovat přílohu', - 'delete_attachment' => 'Smazat přílohu „:name“', - 'attachment_deleted' => 'Příloha „:name“ smazána', - 'liabilities_deleted' => 'Smazán závazek „:name“', - 'attachment_updated' => 'Příloha „:name“ smazána', - 'upload_max_file_size' => 'Nejvyšší umožněná velikost souboru: :size', - 'list_all_attachments' => 'Seznam všech příloh', + 'nr_of_attachments' => 'Jedna příloha|:count příloh', + 'attachments' => 'Přílohy', + 'edit_attachment' => 'Upravit přílohu ":name"', + 'update_attachment' => 'Aktualizovat přílohu', + 'delete_attachment' => 'Smazat přílohu „:name“', + 'attachment_deleted' => 'Příloha „:name“ smazána', + 'liabilities_deleted' => 'Smazán závazek „:name“', + 'attachment_updated' => 'Příloha „:name“ smazána', + 'upload_max_file_size' => 'Nejvyšší umožněná velikost souboru: :size', + 'list_all_attachments' => 'Seznam všech příloh', // transaction index - 'title_expenses' => 'Výdaje', - 'title_withdrawal' => 'Výdaje', - 'title_revenue' => 'Odměna/příjem', - 'title_deposit' => 'Odměna/příjem', - 'title_transfer' => 'Převody', - 'title_transfers' => 'Převody', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Výdaje', + 'title_withdrawal' => 'Výdaje', + 'title_revenue' => 'Odměna/příjem', + 'title_deposit' => 'Odměna/příjem', + 'title_transfer' => 'Převody', + 'title_transfers' => 'Převody', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Tato transakce už je výběrem', - 'convert_is_already_type_Deposit' => 'Tato transakce už je vkladem', - 'convert_is_already_type_Transfer' => 'Tato transakce už je převodem', - 'convert_to_Withdrawal' => 'Přeměnit „:description“ na výběr', - 'convert_to_Deposit' => 'Přeměnit „:description“ na vklad', - 'convert_to_Transfer' => 'Přeměnit „:description“ na přenos', - 'convert_options_WithdrawalDeposit' => 'Přeměnit výběr na vklad', - 'convert_options_WithdrawalTransfer' => 'Přeměnit výběr na převod', - 'convert_options_DepositTransfer' => 'Přeměnit výběr na přenos', - 'convert_options_DepositWithdrawal' => 'Přeměnit vklad na výběr', - 'convert_options_TransferWithdrawal' => 'Přeměnit převod na výběr', - 'convert_options_TransferDeposit' => 'Přeměnit převod na vklad', - 'convert_Withdrawal_to_deposit' => 'Přeměnit tento výběr na vklad', - 'convert_Withdrawal_to_transfer' => 'Přeměnit tento výběr na převod', - 'convert_Deposit_to_withdrawal' => 'Přeměnit tento vklad na výběr', - 'convert_Deposit_to_transfer' => 'Přeměnit tento výběr na přenos', - 'convert_Transfer_to_deposit' => 'Přeměnit tento převod na vklad', - 'convert_Transfer_to_withdrawal' => 'Přeměnit tento převod výběr', - 'convert_please_set_revenue_source' => 'Please pick the revenue account where the money will come from.', - 'convert_please_set_asset_destination' => 'Vyberte účet aktiv, na který peníze půjdou.', - 'convert_please_set_expense_destination' => 'Vyberte výdajový účet, na který peníze půjdou.', - 'convert_please_set_asset_source' => 'Vyberte účet aktiv, ze kterého peníze půjdou.', - 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', - 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', - 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal', - 'converted_to_Deposit' => 'The transaction has been converted to a deposit', - 'converted_to_Transfer' => 'The transaction has been converted to a transfer', - 'invalid_convert_selection' => 'The account you have selected is already used in this transaction or does not exist.', - 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', - 'convert_to_withdrawal' => 'Přeměnit na výběr', - 'convert_to_deposit' => 'Přeměnit na vklad', - 'convert_to_transfer' => 'Přeměnit na převod', + 'convert_is_already_type_Withdrawal' => 'Tato transakce už je výběrem', + 'convert_is_already_type_Deposit' => 'Tato transakce už je vkladem', + 'convert_is_already_type_Transfer' => 'Tato transakce už je převodem', + 'convert_to_Withdrawal' => 'Přeměnit „:description“ na výběr', + 'convert_to_Deposit' => 'Přeměnit „:description“ na vklad', + 'convert_to_Transfer' => 'Přeměnit „:description“ na přenos', + 'convert_options_WithdrawalDeposit' => 'Přeměnit výběr na vklad', + 'convert_options_WithdrawalTransfer' => 'Přeměnit výběr na převod', + 'convert_options_DepositTransfer' => 'Přeměnit výběr na přenos', + 'convert_options_DepositWithdrawal' => 'Přeměnit vklad na výběr', + 'convert_options_TransferWithdrawal' => 'Přeměnit převod na výběr', + 'convert_options_TransferDeposit' => 'Přeměnit převod na vklad', + 'convert_Withdrawal_to_deposit' => 'Přeměnit tento výběr na vklad', + 'convert_Withdrawal_to_transfer' => 'Přeměnit tento výběr na převod', + 'convert_Deposit_to_withdrawal' => 'Přeměnit tento vklad na výběr', + 'convert_Deposit_to_transfer' => 'Přeměnit tento výběr na přenos', + 'convert_Transfer_to_deposit' => 'Přeměnit tento převod na vklad', + 'convert_Transfer_to_withdrawal' => 'Přeměnit tento převod výběr', + 'convert_please_set_revenue_source' => 'Please pick the revenue account where the money will come from.', + 'convert_please_set_asset_destination' => 'Vyberte účet aktiv, na který peníze půjdou.', + 'convert_please_set_expense_destination' => 'Vyberte výdajový účet, na který peníze půjdou.', + 'convert_please_set_asset_source' => 'Vyberte účet aktiv, ze kterého peníze půjdou.', + 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', + 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', + 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', + 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', + 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', + 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', + 'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal', + 'converted_to_Deposit' => 'The transaction has been converted to a deposit', + 'converted_to_Transfer' => 'The transaction has been converted to a transfer', + 'invalid_convert_selection' => 'The account you have selected is already used in this transaction or does not exist.', + 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', + 'convert_to_withdrawal' => 'Přeměnit na výběr', + 'convert_to_deposit' => 'Přeměnit na vklad', + 'convert_to_transfer' => 'Přeměnit na převod', // create new stuff: - 'create_new_withdrawal' => 'Vytvořit nový výběr', - 'create_new_deposit' => 'Vytvořit nový vklad', - 'create_new_transfer' => 'Vytvořit nový převod', - 'create_new_asset' => 'Vytvořit nový účet aktiv', - 'create_new_liabilities' => 'Create new liability', - 'create_new_expense' => 'Vytvořit výdajový účet', - 'create_new_revenue' => 'Vytvořit nový příjmový účet', - 'create_new_piggy_bank' => 'Vytvořit novou pokladničku', - 'create_new_bill' => 'Vytvořit novou fakturu', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Vytvořit nový výběr', + 'create_new_deposit' => 'Vytvořit nový vklad', + 'create_new_transfer' => 'Vytvořit nový převod', + 'create_new_asset' => 'Vytvořit nový účet aktiv', + 'create_new_liabilities' => 'Create new liability', + 'create_new_expense' => 'Vytvořit výdajový účet', + 'create_new_revenue' => 'Vytvořit nový příjmový účet', + 'create_new_piggy_bank' => 'Vytvořit novou pokladničku', + 'create_new_bill' => 'Vytvořit novou fakturu', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Vytvořit novou měnu', - 'store_currency' => 'Uložit novou měnu', - 'update_currency' => 'Aktualizovat měnu', - 'new_default_currency' => ':name je nyní výchozí měna.', - 'cannot_delete_currency' => ':name nelze odstranit, protože je v aplikaci stále pro něco používáno.', - 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', - 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', - 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', - 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', - 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', - 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', - 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', - 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', - 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', - 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', - 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', - 'deleted_currency' => 'Měna :name smazána', - 'created_currency' => 'Měna :name vytvořena', - 'could_not_store_currency' => 'Novou měnu se nepodařilo uložit.', - 'updated_currency' => 'Měna :name aktualizována', - 'ask_site_owner' => 'Please ask :owner to add, remove or edit currencies.', - 'currencies_intro' => 'Firefly III podporuje různé měny, které můžete nastavit a zpřístupnit zde.', - 'make_default_currency' => 'Nastavit jako výchozí', - 'default_currency' => 'výchozí', - 'currency_is_disabled' => 'Vypnuto', - 'enable_currency' => 'Zapnout', - 'disable_currency' => 'Vypnout', - 'currencies_default_disabled' => 'Většina těchto měn je ve výchozím stavu vypnutá. Pro jejich použití, je třeba je nejdříve zapnout.', - 'currency_is_now_enabled' => 'Měna „:name“ byla zapnuta', - 'currency_is_now_disabled' => 'Měna „:name“ byla vypnuta', + 'create_currency' => 'Vytvořit novou měnu', + 'store_currency' => 'Uložit novou měnu', + 'update_currency' => 'Aktualizovat měnu', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => ':name nelze odstranit, protože je v aplikaci stále pro něco používáno.', + 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', + 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', + 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', + 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', + 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', + 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', + 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', + 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', + 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', + 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', + 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', + 'deleted_currency' => 'Měna :name smazána', + 'created_currency' => 'Měna :name vytvořena', + 'could_not_store_currency' => 'Novou měnu se nepodařilo uložit.', + 'updated_currency' => 'Měna :name aktualizována', + 'ask_site_owner' => 'Please ask :owner to add, remove or edit currencies.', + 'currencies_intro' => 'Firefly III podporuje různé měny, které můžete nastavit a zpřístupnit zde.', + 'make_default_currency' => 'Nastavit jako výchozí', + 'default_currency' => 'výchozí', + 'currency_is_disabled' => 'Vypnuto', + 'enable_currency' => 'Zapnout', + 'disable_currency' => 'Vypnout', + 'currencies_default_disabled' => 'Většina těchto měn je ve výchozím stavu vypnutá. Pro jejich použití, je třeba je nejdříve zapnout.', + 'currency_is_now_enabled' => 'Měna „:name“ byla zapnuta', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Měna „:name“ byla vypnuta', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Povinné kolonky', - 'optionalFields' => 'Volitelné kolonky', - 'options' => 'Možnosti', + 'mandatoryFields' => 'Povinné kolonky', + 'optionalFields' => 'Volitelné kolonky', + 'options' => 'Možnosti', // budgets: - 'daily_budgets' => 'Denní rozpočty', - 'weekly_budgets' => 'Týdenní rozpočty', - 'monthly_budgets' => 'Měsíční rozpočty', - 'quarterly_budgets' => 'Čtvrtletní rozpočty', - 'half_year_budgets' => 'Pololetní rozpočty', - 'yearly_budgets' => 'Roční rozpočty', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', - 'total_available_budget' => 'Total available budget (between :start and :end)', - 'total_available_budget_in_currency' => 'Celkový rozpočet k dispozici v :currency', - 'see_below' => 'viz níže', - 'create_new_budget' => 'Vytvořit nový rozpočet', - 'store_new_budget' => 'Uložit nový rozpočet', - 'stored_new_budget' => 'Uložen novým rozpočet „:name“', - 'available_between' => 'Dostupné mezi :start a :end', - 'transactionsWithoutBudget' => 'Výdaje bez rozpočtu', - 'transactions_no_budget' => 'Výdaje bez rozpočtu mezi :start a :end', - 'spent_between' => 'Už utraceno mezi :start a :end', - 'set_available_amount' => 'Nastavit částku k dispozici', - 'update_available_amount' => 'Aktualizovat částku k dispozici', - 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', - 'createBudget' => 'Nový rozpočet', - 'invalid_currency' => 'Toto není platná měna', - 'invalid_amount' => 'Prosím, zadejte částku', - 'set_ab' => 'The available budget amount has been set', - 'updated_ab' => 'The available budget amount has been updated', - 'deleted_ab' => 'The available budget amount has been deleted', - 'deleted_bl' => 'The budgeted amount has been removed', - 'alt_currency_ab_create' => 'Set the available budget in another currency', - 'bl_create_btn' => 'Set budget in another currency', - 'inactiveBudgets' => 'Neaktivní rozpočty', - 'without_budget_between' => 'Transakce bez rozpočtu mezi :start a :end', - 'delete_budget' => 'Smazat rozpočet „:name“', - 'deleted_budget' => 'Smazán rozpočet „:name“', - 'edit_budget' => 'Upravit rozpočet „:name“', - 'updated_budget' => 'Aktualizován rozpočet „:name“', - 'update_amount' => 'Aktualizovat částku', - 'update_budget' => 'Aktualizovat rozpočet', - 'update_budget_amount_range' => 'Update (expected) available amount between :start and :end', - 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', - 'set_budget_limit' => 'Nastavte částku rozpočtu', - 'budget_period_navigator' => 'Period navigator', - 'info_on_available_amount' => 'Co mám(e) k dispozici?', - 'available_amount_indication' => 'Use these amounts to get an indication of what your total budget could be.', - 'suggested' => 'Navrhované', - 'average_between' => 'Průměr mezi :start a :end', - 'transferred_in' => 'Převedeno (k nám)', - 'transferred_away' => 'Převedeno (pryč)', - 'auto_budget_none' => 'No auto-budget', - 'auto_budget_reset' => 'Set a fixed amount every period', - 'auto_budget_rollover' => 'Add an amount every period', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Denně', - 'auto_budget_period_weekly' => 'Týdně', - 'auto_budget_period_monthly' => 'Měsíčně', - 'auto_budget_period_quarterly' => 'Čtvrletně', - 'auto_budget_period_half_year' => 'Každého půl roku', - 'auto_budget_period_yearly' => 'Ročně', - 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', - 'auto_budget_reset_icon' => 'This budget will be set periodically', - 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', + 'daily_budgets' => 'Denní rozpočty', + 'weekly_budgets' => 'Týdenní rozpočty', + 'monthly_budgets' => 'Měsíční rozpočty', + 'quarterly_budgets' => 'Čtvrtletní rozpočty', + 'half_year_budgets' => 'Pololetní rozpočty', + 'yearly_budgets' => 'Roční rozpočty', + 'other_budgets' => 'Custom timed budgets', + 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', + 'total_available_budget' => 'Total available budget (between :start and :end)', + 'total_available_budget_in_currency' => 'Celkový rozpočet k dispozici v :currency', + 'see_below' => 'viz níže', + 'create_new_budget' => 'Vytvořit nový rozpočet', + 'store_new_budget' => 'Uložit nový rozpočet', + 'stored_new_budget' => 'Uložen novým rozpočet „:name“', + 'available_between' => 'Dostupné mezi :start a :end', + 'transactionsWithoutBudget' => 'Výdaje bez rozpočtu', + 'transactions_no_budget' => 'Výdaje bez rozpočtu mezi :start a :end', + 'spent_between' => 'Už utraceno mezi :start a :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Nastavit částku k dispozici', + 'update_available_amount' => 'Aktualizovat částku k dispozici', + 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', + 'createBudget' => 'Nový rozpočet', + 'invalid_currency' => 'Toto není platná měna', + 'invalid_amount' => 'Prosím, zadejte částku', + 'set_ab' => 'The available budget amount has been set', + 'updated_ab' => 'The available budget amount has been updated', + 'deleted_ab' => 'The available budget amount has been deleted', + 'deleted_bl' => 'The budgeted amount has been removed', + 'alt_currency_ab_create' => 'Set the available budget in another currency', + 'bl_create_btn' => 'Set budget in another currency', + 'inactiveBudgets' => 'Neaktivní rozpočty', + 'without_budget_between' => 'Transakce bez rozpočtu mezi :start a :end', + 'delete_budget' => 'Smazat rozpočet „:name“', + 'deleted_budget' => 'Smazán rozpočet „:name“', + 'edit_budget' => 'Upravit rozpočet „:name“', + 'updated_budget' => 'Aktualizován rozpočet „:name“', + 'update_amount' => 'Aktualizovat částku', + 'update_budget' => 'Aktualizovat rozpočet', + 'update_budget_amount_range' => 'Update (expected) available amount between :start and :end', + 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', + 'set_budget_limit' => 'Nastavte částku rozpočtu', + 'budget_period_navigator' => 'Period navigator', + 'info_on_available_amount' => 'Co mám(e) k dispozici?', + 'available_amount_indication' => 'Use these amounts to get an indication of what your total budget could be.', + 'suggested' => 'Navrhované', + 'average_between' => 'Průměr mezi :start a :end', + 'transferred_in' => 'Převedeno (k nám)', + 'transferred_away' => 'Převedeno (pryč)', + 'auto_budget_none' => 'No auto-budget', + 'auto_budget_reset' => 'Set a fixed amount every period', + 'auto_budget_rollover' => 'Add an amount every period', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Denně', + 'auto_budget_period_weekly' => 'Týdně', + 'auto_budget_period_monthly' => 'Měsíčně', + 'auto_budget_period_quarterly' => 'Čtvrletně', + 'auto_budget_period_half_year' => 'Každého půl roku', + 'auto_budget_period_yearly' => 'Ročně', + 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', + 'auto_budget_reset_icon' => 'This budget will be set periodically', + 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Not expected this period', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Zatím ne', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Bill matches transactions between :low and :high.', - 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', - 'bill_related_rules' => 'Pravidla vztahující se k této účtence/faktuře', - 'repeats' => 'Opakuje se', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Propojené transakce', - 'auto_match_on' => 'Automaticky spárováno Firefly III', - 'auto_match_off' => 'Not automatically matched by Firefly III', - 'next_expected_match' => 'Příští očekávaná shoda', - 'delete_bill' => 'Smazat účtenku „:name“', - 'deleted_bill' => 'Smazán účet „:name“', - 'edit_bill' => 'Upravit účtenku „:name“', - 'more' => 'Více', - 'rescan_old' => 'Spustit pravidla znovu, na všechny transakce', - 'update_bill' => 'Aktualizovat účtenku', - 'updated_bill' => 'Aktualizovat účtenku „:name“', - 'store_new_bill' => 'Uložit novou účtenku', - 'stored_new_bill' => 'Stored new bill ":name"', - 'cannot_scan_inactive_bill' => 'Inactive bills cannot be scanned.', - 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', - 'average_bill_amount_year' => 'Average bill amount (:year)', - 'average_bill_amount_overall' => 'Average bill amount (overall)', - 'bill_is_active' => 'Bill is active', - 'bill_expected_between' => 'Očekáváno mezi :start a :end', - 'bill_will_automatch' => 'Účtenka bude automaticky propojena s odpovídajícími transakcemi', - 'skips_over' => 'přeskočí přes', - 'bill_store_error' => 'Při ukládání nové účtenky došlo k neočekávané chybě. Podívejte se do souborů se záznamem událostí', - 'list_inactive_rule' => 'neaktivní pravidlo', - 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', - 'bill_expected_date' => 'Expected :date', - 'bill_expected_date_js' => 'Expected {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Paid on {date}', - 'bill_repeats_weekly' => 'Repeats weekly', - 'bill_repeats_monthly' => 'Repeats monthly', - 'bill_repeats_quarterly' => 'Repeats quarterly', - 'bill_repeats_half-year' => 'Repeats every half year', - 'bill_repeats_yearly' => 'Repeats yearly', - 'bill_repeats_weekly_other' => 'Repeats every other week', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Repeats yearly', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Subscriptions', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Forever', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Not expected this period', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Zatím ne', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Bill matches transactions between :low and :high.', + 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', + 'bill_related_rules' => 'Pravidla vztahující se k této účtence/faktuře', + 'repeats' => 'Opakuje se', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Propojené transakce', + 'auto_match_on' => 'Automaticky spárováno Firefly III', + 'auto_match_off' => 'Not automatically matched by Firefly III', + 'next_expected_match' => 'Příští očekávaná shoda', + 'delete_bill' => 'Smazat účtenku „:name“', + 'deleted_bill' => 'Smazán účet „:name“', + 'edit_bill' => 'Upravit účtenku „:name“', + 'more' => 'Více', + 'rescan_old' => 'Spustit pravidla znovu, na všechny transakce', + 'update_bill' => 'Aktualizovat účtenku', + 'updated_bill' => 'Aktualizovat účtenku „:name“', + 'store_new_bill' => 'Uložit novou účtenku', + 'stored_new_bill' => 'Stored new bill ":name"', + 'cannot_scan_inactive_bill' => 'Inactive bills cannot be scanned.', + 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', + 'average_bill_amount_year' => 'Average bill amount (:year)', + 'average_bill_amount_overall' => 'Average bill amount (overall)', + 'bill_is_active' => 'Bill is active', + 'bill_expected_between' => 'Očekáváno mezi :start a :end', + 'bill_will_automatch' => 'Účtenka bude automaticky propojena s odpovídajícími transakcemi', + 'skips_over' => 'přeskočí přes', + 'bill_store_error' => 'Při ukládání nové účtenky došlo k neočekávané chybě. Podívejte se do souborů se záznamem událostí', + 'list_inactive_rule' => 'neaktivní pravidlo', + 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', + 'bill_expected_date' => 'Expected :date', + 'bill_expected_date_js' => 'Expected {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Paid on {date}', + 'bill_repeats_weekly' => 'Repeats weekly', + 'bill_repeats_monthly' => 'Repeats monthly', + 'bill_repeats_quarterly' => 'Repeats quarterly', + 'bill_repeats_half-year' => 'Repeats every half year', + 'bill_repeats_yearly' => 'Repeats yearly', + 'bill_repeats_weekly_other' => 'Repeats every other week', + 'bill_repeats_monthly_other' => 'Repeats every other month', + 'bill_repeats_quarterly_other' => 'Repeats every other quarter', + 'bill_repeats_half-year_other' => 'Repeats yearly', + 'bill_repeats_yearly_other' => 'Repeats every other year', + 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', + 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', + 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', + 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', + 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', + 'subscriptions' => 'Subscriptions', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Forever', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', - 'all_accounts_inactive' => 'These are your inactive accounts.', - 'active_account_link' => 'This link goes back to your active accounts.', - 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', - 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', - 'details_for_asset' => 'Podrobnosti o účtu aktiv „:name“', - 'details_for_expense' => 'Podrobnosti pro výdajový účet „:name“', - 'details_for_revenue' => 'Details for revenue account ":name"', - 'details_for_cash' => 'Podrobnosti o hotovostním účtu „:name“', - 'store_new_asset_account' => 'Uložit nový účet aktiv', - 'store_new_expense_account' => 'Uložit nový výdajový účet', - 'store_new_revenue_account' => 'Uložit nový příjmový účet', - 'edit_asset_account' => 'Upravit účet aktiv „:name“', - 'edit_expense_account' => 'Upravit výdajový účet „:name“', - 'edit_revenue_account' => 'Upravit účet odměn „:name“', - 'delete_asset_account' => 'Smazat účet aktiv „:name“', - 'delete_expense_account' => 'Delete expense account ":name"', - 'delete_revenue_account' => 'Delete revenue account ":name"', - 'delete_liabilities_account' => 'Smazat závazek „:name“', - 'asset_deleted' => 'Successfully deleted asset account ":name"', - 'account_deleted' => 'Successfully deleted account ":name"', - 'expense_deleted' => 'Successfully deleted expense account ":name"', - 'revenue_deleted' => 'Successfully deleted revenue account ":name"', - 'update_asset_account' => 'Aktualizovat výdajový účet', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => 'Aktualizovat závazek', - 'update_expense_account' => 'Aktualizovat výdajový účet', - 'update_revenue_account' => 'Aktualizovat příjmový účet', - 'make_new_asset_account' => 'Vytvořit nový účet aktiv', - 'make_new_expense_account' => 'Vytvořit výdajový účet', - 'make_new_revenue_account' => 'Vytvořit nový příjmový účet', - 'make_new_liabilities_account' => 'Vytvořit nový závazek', - 'asset_accounts' => 'Účty aktiv', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Asset accounts (inactive)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Výdajové účty', - 'expense_accounts_inactive' => 'Výdajové účty (neaktivní)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Příjmové účty', - 'revenue_accounts_inactive' => 'Příjmové účty (neaktivní)', - 'cash_accounts' => 'Hotovostní účty', - 'Cash account' => 'Hotovostní účet', - 'liabilities_accounts' => 'Závazky', - 'liabilities_accounts_inactive' => 'Závazky (neaktivní)', - 'reconcile_account' => 'Vyúčtovat účet ":account"', - 'overview_of_reconcile_modal' => 'Overview of reconciliation', - 'delete_reconciliation' => 'Odstranit vyúčtování', - 'update_reconciliation' => 'Upravit vyúčtování', - 'amount_cannot_be_zero' => 'Částka nemůže být nula', - 'end_of_reconcile_period' => 'Konec vyúčtovacího období: :period', - 'start_of_reconcile_period' => 'Začátek vyúčtovacího období: :period', - 'start_balance' => 'Počáteční zůstatek', - 'end_balance' => 'Konečný zůstatek', - 'update_balance_dates_instruction' => 'Match the amounts and dates above to your bank statement, and press "Start reconciling"', - 'select_transactions_instruction' => 'Select the transactions that appear on your bank statement.', - 'select_range_and_balance' => 'First verify the date-range and balances. Then press "Start reconciling"', - 'date_change_instruction' => 'If you change the date range now, any progress will be lost.', - 'update_selection' => 'Aktualizovat výběr', - 'store_reconcile' => 'Uložit vyúčtování', - 'reconciliation_transaction' => 'Reconciliation transaction', - 'Reconciliation' => 'Vyúčtování', - 'reconciliation' => 'Vyúčtování', - 'reconcile_options' => 'Možnosti vyúčtování', - 'reconcile_range' => 'Rozsah vyúčtování', - 'start_reconcile' => 'Spustit vyúčtování', - 'cash_account_type' => 'Hotovost', - 'cash' => 'hotovost', - 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', - 'account_type' => 'Typ účtu', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'Nový účet „:name“ uložen!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => 'Aktualizován účet „:name“', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Předvolby kreditní karty', - 'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".', - 'no_transactions_period' => 'Neexistují žádné transakce (v tomto období).', - 'no_data_for_chart' => 'Pro vytvoření tohoto grafu není dostatek informací (zatím).', - 'select_at_least_one_account' => 'Vyberte alespoň jeden účet aktiv', - 'select_at_least_one_category' => 'Vyberte alespoň jednu kategorii', - 'select_at_least_one_budget' => 'Vyberte alespoň jeden rozpočet', - 'select_at_least_one_tag' => 'Vyberte alespoň jeden štítek', - 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', - 'account_default_currency' => 'This will be the default currency associated with this account.', - 'reconcile_has_more' => 'Your Firefly III ledger has more money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', - 'reconcile_has_less' => 'Your Firefly III ledger has less money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', - 'reconcile_is_equal' => 'Your Firefly III ledger and your bank statements match. There is nothing to do. Please press "Confirm reconciliation" to confirm your input.', - 'create_pos_reconcile_transaction' => 'Clear the selected transactions, and create a correction adding :amount to this asset account.', - 'create_neg_reconcile_transaction' => 'Clear the selected transactions, and create a correction removing :amount from this asset account.', - 'reconcile_do_nothing' => 'Clear the selected transactions, but do not correct.', - 'reconcile_go_back' => 'Opravu můžete kdykoli upravit nebo odstranit.', - 'must_be_asset_account' => 'You can only reconcile asset accounts', - 'reconciliation_stored' => 'Vyúčtování uloženo', - 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', - 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', - 'sum_of_reconciliation' => 'Sum of reconciliation', - 'reconcile_this_account' => 'Vyúčtovat tento účet', - 'reconcile' => 'Reconcile', - 'show' => 'Show', - 'confirm_reconciliation' => 'Potvrdit vyúčtování', - 'submitted_start_balance' => 'Předložený počáteční zůstatek', - 'selected_transactions' => 'Vybrané transakce (:count)', - 'already_cleared_transactions' => 'Already cleared transactions (:count)', - 'submitted_end_balance' => 'Předložený konečný zůstatek', - 'initial_balance_description' => 'Počáteční zůstatek pro „:account“', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'neznámé', - 'interest_calc_daily' => 'Za den', - 'interest_calc_monthly' => 'Za měsíc', - 'interest_calc_yearly' => 'Za rok', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half year', - 'interest_calc_quarterly' => 'Per quarter', - 'initial_balance_account' => 'Initial balance account of :account', - 'list_options' => 'Seznam možností', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', + 'all_accounts_inactive' => 'These are your inactive accounts.', + 'active_account_link' => 'This link goes back to your active accounts.', + 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', + 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', + 'details_for_asset' => 'Podrobnosti o účtu aktiv „:name“', + 'details_for_expense' => 'Podrobnosti pro výdajový účet „:name“', + 'details_for_revenue' => 'Details for revenue account ":name"', + 'details_for_cash' => 'Podrobnosti o hotovostním účtu „:name“', + 'store_new_asset_account' => 'Uložit nový účet aktiv', + 'store_new_expense_account' => 'Uložit nový výdajový účet', + 'store_new_revenue_account' => 'Uložit nový příjmový účet', + 'edit_asset_account' => 'Upravit účet aktiv „:name“', + 'edit_expense_account' => 'Upravit výdajový účet „:name“', + 'edit_revenue_account' => 'Upravit účet odměn „:name“', + 'delete_asset_account' => 'Smazat účet aktiv „:name“', + 'delete_expense_account' => 'Delete expense account ":name"', + 'delete_revenue_account' => 'Delete revenue account ":name"', + 'delete_liabilities_account' => 'Smazat závazek „:name“', + 'asset_deleted' => 'Successfully deleted asset account ":name"', + 'account_deleted' => 'Successfully deleted account ":name"', + 'expense_deleted' => 'Successfully deleted expense account ":name"', + 'revenue_deleted' => 'Successfully deleted revenue account ":name"', + 'update_asset_account' => 'Aktualizovat výdajový účet', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => 'Aktualizovat závazek', + 'update_expense_account' => 'Aktualizovat výdajový účet', + 'update_revenue_account' => 'Aktualizovat příjmový účet', + 'make_new_asset_account' => 'Vytvořit nový účet aktiv', + 'make_new_expense_account' => 'Vytvořit výdajový účet', + 'make_new_revenue_account' => 'Vytvořit nový příjmový účet', + 'make_new_liabilities_account' => 'Vytvořit nový závazek', + 'asset_accounts' => 'Účty aktiv', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Asset accounts (inactive)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Výdajové účty', + 'expense_accounts_inactive' => 'Výdajové účty (neaktivní)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Příjmové účty', + 'revenue_accounts_inactive' => 'Příjmové účty (neaktivní)', + 'cash_accounts' => 'Hotovostní účty', + 'Cash account' => 'Hotovostní účet', + 'liabilities_accounts' => 'Závazky', + 'liabilities_accounts_inactive' => 'Závazky (neaktivní)', + 'reconcile_account' => 'Vyúčtovat účet ":account"', + 'overview_of_reconcile_modal' => 'Overview of reconciliation', + 'delete_reconciliation' => 'Odstranit vyúčtování', + 'update_reconciliation' => 'Upravit vyúčtování', + 'amount_cannot_be_zero' => 'Částka nemůže být nula', + 'end_of_reconcile_period' => 'Konec vyúčtovacího období: :period', + 'start_of_reconcile_period' => 'Začátek vyúčtovacího období: :period', + 'start_balance' => 'Počáteční zůstatek', + 'end_balance' => 'Konečný zůstatek', + 'update_balance_dates_instruction' => 'Match the amounts and dates above to your bank statement, and press "Start reconciling"', + 'select_transactions_instruction' => 'Select the transactions that appear on your bank statement.', + 'select_range_and_balance' => 'First verify the date-range and balances. Then press "Start reconciling"', + 'date_change_instruction' => 'If you change the date range now, any progress will be lost.', + 'update_selection' => 'Aktualizovat výběr', + 'store_reconcile' => 'Uložit vyúčtování', + 'reconciliation_transaction' => 'Reconciliation transaction', + 'Reconciliation' => 'Vyúčtování', + 'reconciliation' => 'Vyúčtování', + 'reconcile_options' => 'Možnosti vyúčtování', + 'reconcile_range' => 'Rozsah vyúčtování', + 'start_reconcile' => 'Spustit vyúčtování', + 'cash_account_type' => 'Hotovost', + 'cash' => 'hotovost', + 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', + 'account_type' => 'Typ účtu', + 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => 'Nový účet „:name“ uložen!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => 'Aktualizován účet „:name“', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Předvolby kreditní karty', + 'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".', + 'no_transactions_period' => 'Neexistují žádné transakce (v tomto období).', + 'no_data_for_chart' => 'Pro vytvoření tohoto grafu není dostatek informací (zatím).', + 'select_at_least_one_account' => 'Vyberte alespoň jeden účet aktiv', + 'select_at_least_one_category' => 'Vyberte alespoň jednu kategorii', + 'select_at_least_one_budget' => 'Vyberte alespoň jeden rozpočet', + 'select_at_least_one_tag' => 'Vyberte alespoň jeden štítek', + 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', + 'account_default_currency' => 'This will be the default currency associated with this account.', + 'reconcile_has_more' => 'Your Firefly III ledger has more money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', + 'reconcile_has_less' => 'Your Firefly III ledger has less money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', + 'reconcile_is_equal' => 'Your Firefly III ledger and your bank statements match. There is nothing to do. Please press "Confirm reconciliation" to confirm your input.', + 'create_pos_reconcile_transaction' => 'Clear the selected transactions, and create a correction adding :amount to this asset account.', + 'create_neg_reconcile_transaction' => 'Clear the selected transactions, and create a correction removing :amount from this asset account.', + 'reconcile_do_nothing' => 'Clear the selected transactions, but do not correct.', + 'reconcile_go_back' => 'Opravu můžete kdykoli upravit nebo odstranit.', + 'must_be_asset_account' => 'You can only reconcile asset accounts', + 'reconciliation_stored' => 'Vyúčtování uloženo', + 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', + 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', + 'sum_of_reconciliation' => 'Sum of reconciliation', + 'reconcile_this_account' => 'Vyúčtovat tento účet', + 'reconcile' => 'Reconcile', + 'show' => 'Show', + 'confirm_reconciliation' => 'Potvrdit vyúčtování', + 'submitted_start_balance' => 'Předložený počáteční zůstatek', + 'selected_transactions' => 'Vybrané transakce (:count)', + 'already_cleared_transactions' => 'Already cleared transactions (:count)', + 'submitted_end_balance' => 'Předložený konečný zůstatek', + 'initial_balance_description' => 'Počáteční zůstatek pro „:account“', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'neznámé', + 'interest_calc_daily' => 'Za den', + 'interest_calc_monthly' => 'Za měsíc', + 'interest_calc_yearly' => 'Za rok', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half year', + 'interest_calc_quarterly' => 'Per quarter', + 'initial_balance_account' => 'Initial balance account of :account', + 'list_options' => 'Seznam možností', // categories: - 'new_category' => 'Nová kategorie', - 'create_new_category' => 'Vytvořit novou kategorii', - 'without_category' => 'Bez kategorie', - 'update_category' => 'Aktualizovat kategorii', - 'updated_category' => 'Aktualizována kategorie „:name“', - 'categories' => 'Kategorie', - 'edit_category' => 'Upravit kategorii „:name“', - 'no_category' => '(žádná kategorie)', - 'unknown_category_plain' => 'No category', - 'category' => 'Kategorie', - 'delete_category' => 'Smazat kategorii „:name“', - 'deleted_category' => 'Kategorie „:name“ smazána', - 'store_category' => 'Uložit novou kategori', - 'stored_category' => 'Uložena nová kategorie „:name“', - 'without_category_between' => 'Bez kategorie mezi :start a :end', + 'new_category' => 'Nová kategorie', + 'create_new_category' => 'Vytvořit novou kategorii', + 'without_category' => 'Bez kategorie', + 'update_category' => 'Aktualizovat kategorii', + 'updated_category' => 'Aktualizována kategorie „:name“', + 'categories' => 'Kategorie', + 'edit_category' => 'Upravit kategorii „:name“', + 'no_category' => '(žádná kategorie)', + 'unknown_category_plain' => 'No category', + 'category' => 'Kategorie', + 'delete_category' => 'Smazat kategorii „:name“', + 'deleted_category' => 'Kategorie „:name“ smazána', + 'store_category' => 'Uložit novou kategori', + 'stored_category' => 'Uložena nová kategorie „:name“', + 'without_category_between' => 'Bez kategorie mezi :start a :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Aktualizovat výběr', - 'update_deposit' => 'Aktualizovat vklad', - 'update_transaction' => 'Aktualizovat transakci', - 'update_transfer' => 'Aktualizovat převod', - 'updated_withdrawal' => 'Aktualizován výběr „:description“', - 'updated_deposit' => 'Aktualizován vklad „:description“', - 'updated_transfer' => 'Aktualizován převod „:description“', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => 'Smazat výběr „:description“', - 'delete_deposit' => 'Smazat vklad „:description“', - 'delete_transfer' => 'Smazat převod „:description“', - 'deleted_withdrawal' => 'Úspěšně smazán výběr „:description“', - 'deleted_deposit' => 'Úspěšně smazán vklad „:description“', - 'deleted_transfer' => 'Úspěšně smazán převod „:description“', - 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', - 'stored_journal' => 'Úspěšně vytvořena nová transakce „:description“', - 'stored_journal_no_descr' => 'Successfully created your new transaction', - 'updated_journal_no_descr' => 'Successfully updated your transaction', - 'select_transactions' => 'Vybrat transakce', - 'rule_group_select_transactions' => 'Apply ":title" to transactions', - 'rule_select_transactions' => 'Apply ":title" to transactions', - 'stop_selection' => 'Zastavit označování transakcí', - 'reconcile_selected' => 'Reconcile', - 'mass_delete_journals' => 'Smazat počet transakcí', - 'mass_edit_journals' => 'Upravit počet transakcí', - 'mass_bulk_journals' => 'Hromadná úprava počtu transakcí', - 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', - 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', - 'bulk_set_new_values' => 'Nové hodnoty nastavíte pomocí vstupních kolonek níže. Pokud je nevyplníte, budou u všeho vyprázdněny. Také si všimněte, že pouze výběry dostanou rozpočet.', - 'no_bulk_category' => 'Neaktualizovat kategorii', - 'no_bulk_budget' => 'Neaktualizovat rozpočet', - 'no_bulk_tags' => 'Neaktualizovat štítky', - 'replace_with_these_tags' => 'Nahradit těmito štítky', - 'append_these_tags' => 'Přidat tyto štítky', - 'mass_edit' => 'Edit selected individually', - 'bulk_edit' => 'Hromadná úprava označeného', - 'mass_delete' => 'Smazat označené', - 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', - 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', - 'no_budget' => '(žádný rozpočet)', - 'no_bill' => '(no bill)', - 'account_per_budget' => 'Účty pro jednotlivé rozpočty', - 'account_per_category' => 'Účty pro jednotlivé kategorie', - 'create_new_object' => 'Vytvořit', - 'empty' => '(prázdné)', - 'all_other_budgets' => '(všechny ostatní rozpočty)', - 'all_other_accounts' => '(všechny ostatní účty)', - 'expense_per_source_account' => 'Výdaje podle zdrojového účtu', - 'expense_per_destination_account' => 'Výdaje podle cílového účtu', - 'income_per_destination_account' => 'Příjmy podle cílového účtu', - 'spent_in_specific_category' => 'Utraceno v kategorii „:category“', - 'earned_in_specific_category' => 'Získáno v kategorii „:category“', - 'spent_in_specific_tag' => 'Utraceno pod štítkem „:tag“', - 'earned_in_specific_tag' => 'Získáno pod štítkem „:tag“', - 'income_per_source_account' => 'Příjem podle zdrojového účtu', - 'average_spending_per_destination' => 'Průměrný výdaj podle cílového účtu', - 'average_spending_per_source' => 'Průměrný výdaj podle zdrojového účtu', - 'average_earning_per_source' => 'Průměrný příjem v jednotlivých zdrojových účtech', - 'average_earning_per_destination' => 'Průměrný příjem v jednotlivých cílových účtech', - 'account_per_tag' => 'Účty pod jednotlivými štítky', - 'tag_report_expenses_listed_once' => 'Výdaje a příjmy nikdy nejsou vypsány dvakrát. Pokud má transakce vícero štítků, zobrazí se pouze pod jedním z nich. Může se zdát, že na seznamu chybí údaje, ale částky budou správné.', - 'double_report_expenses_charted_once' => 'Výdaje a příjmy nikdy nejsou zobrazeny dvakrát. Pokud má transakce vícero štítků, zobrazí se pouze pod jedním z nich. Může se zdát, že tento graf postrádá některé údaje, ale částky budou správné.', - 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', - 'tag' => 'Štítek', - 'no_budget_squared' => '(žádný rozpočet)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(žádný typ účtu)', - 'opt_group_no_account_type' => '(žádný typ účtu)', - 'opt_group_defaultAsset' => 'Výchozí majetkový účet', - 'opt_group_savingAsset' => 'Spořicí účty', - 'opt_group_sharedAsset' => 'Sdílené účty aktiv', - 'opt_group_ccAsset' => 'Kreditní karty', - 'opt_group_cashWalletAsset' => 'Peněženky', - 'opt_group_expense_account' => 'Účty pro výdaje', - 'opt_group_revenue_account' => 'Účty pro příjmy', - 'opt_group_l_Loan' => 'Závazek: Půjčka', - 'opt_group_cash_account' => 'Hotovostní účet', - 'opt_group_l_Debt' => 'Závazek: Dluh', - 'opt_group_l_Mortgage' => 'Závazek: hypotéka', - 'opt_group_l_Credit card' => 'Závazek: kreditní karta', - 'notes' => 'Poznámky', - 'unknown_journal_error' => 'Transakci se nedaří uložit. Podívejte se do souborů se záznamy událostí.', - 'attachment_not_found' => 'Tuto přílohu se nepodařilo najít.', - 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', - 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', - 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Aktualizovat výběr', + 'update_deposit' => 'Aktualizovat vklad', + 'update_transaction' => 'Aktualizovat transakci', + 'update_transfer' => 'Aktualizovat převod', + 'updated_withdrawal' => 'Aktualizován výběr „:description“', + 'updated_deposit' => 'Aktualizován vklad „:description“', + 'updated_transfer' => 'Aktualizován převod „:description“', + 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', + 'no_changes_deposit' => 'Deposit ":description" was not changed.', + 'no_changes_transfer' => 'Transfer ":description" was not changed.', + 'delete_withdrawal' => 'Smazat výběr „:description“', + 'delete_deposit' => 'Smazat vklad „:description“', + 'delete_transfer' => 'Smazat převod „:description“', + 'deleted_withdrawal' => 'Úspěšně smazán výběr „:description“', + 'deleted_deposit' => 'Úspěšně smazán vklad „:description“', + 'deleted_transfer' => 'Úspěšně smazán převod „:description“', + 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', + 'stored_journal' => 'Úspěšně vytvořena nová transakce „:description“', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Successfully created your new transaction', + 'updated_journal_no_descr' => 'Successfully updated your transaction', + 'select_transactions' => 'Vybrat transakce', + 'rule_group_select_transactions' => 'Apply ":title" to transactions', + 'rule_select_transactions' => 'Apply ":title" to transactions', + 'stop_selection' => 'Zastavit označování transakcí', + 'reconcile_selected' => 'Reconcile', + 'mass_delete_journals' => 'Smazat počet transakcí', + 'mass_edit_journals' => 'Upravit počet transakcí', + 'mass_bulk_journals' => 'Hromadná úprava počtu transakcí', + 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', + 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', + 'bulk_set_new_values' => 'Nové hodnoty nastavíte pomocí vstupních kolonek níže. Pokud je nevyplníte, budou u všeho vyprázdněny. Také si všimněte, že pouze výběry dostanou rozpočet.', + 'no_bulk_category' => 'Neaktualizovat kategorii', + 'no_bulk_budget' => 'Neaktualizovat rozpočet', + 'no_bulk_tags' => 'Neaktualizovat štítky', + 'replace_with_these_tags' => 'Nahradit těmito štítky', + 'append_these_tags' => 'Přidat tyto štítky', + 'mass_edit' => 'Edit selected individually', + 'bulk_edit' => 'Hromadná úprava označeného', + 'mass_delete' => 'Smazat označené', + 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', + 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', + 'no_budget' => '(žádný rozpočet)', + 'no_bill' => '(no bill)', + 'account_per_budget' => 'Účty pro jednotlivé rozpočty', + 'account_per_category' => 'Účty pro jednotlivé kategorie', + 'create_new_object' => 'Vytvořit', + 'empty' => '(prázdné)', + 'all_other_budgets' => '(všechny ostatní rozpočty)', + 'all_other_accounts' => '(všechny ostatní účty)', + 'expense_per_source_account' => 'Výdaje podle zdrojového účtu', + 'expense_per_destination_account' => 'Výdaje podle cílového účtu', + 'income_per_destination_account' => 'Příjmy podle cílového účtu', + 'spent_in_specific_category' => 'Utraceno v kategorii „:category“', + 'earned_in_specific_category' => 'Získáno v kategorii „:category“', + 'spent_in_specific_tag' => 'Utraceno pod štítkem „:tag“', + 'earned_in_specific_tag' => 'Získáno pod štítkem „:tag“', + 'income_per_source_account' => 'Příjem podle zdrojového účtu', + 'average_spending_per_destination' => 'Průměrný výdaj podle cílového účtu', + 'average_spending_per_source' => 'Průměrný výdaj podle zdrojového účtu', + 'average_earning_per_source' => 'Průměrný příjem v jednotlivých zdrojových účtech', + 'average_earning_per_destination' => 'Průměrný příjem v jednotlivých cílových účtech', + 'account_per_tag' => 'Účty pod jednotlivými štítky', + 'tag_report_expenses_listed_once' => 'Výdaje a příjmy nikdy nejsou vypsány dvakrát. Pokud má transakce vícero štítků, zobrazí se pouze pod jedním z nich. Může se zdát, že na seznamu chybí údaje, ale částky budou správné.', + 'double_report_expenses_charted_once' => 'Výdaje a příjmy nikdy nejsou zobrazeny dvakrát. Pokud má transakce vícero štítků, zobrazí se pouze pod jedním z nich. Může se zdát, že tento graf postrádá některé údaje, ale částky budou správné.', + 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', + 'tag' => 'Štítek', + 'no_budget_squared' => '(žádný rozpočet)', + 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', + 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', + 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', + 'opt_group_' => '(žádný typ účtu)', + 'opt_group_no_account_type' => '(žádný typ účtu)', + 'opt_group_defaultAsset' => 'Výchozí majetkový účet', + 'opt_group_savingAsset' => 'Spořicí účty', + 'opt_group_sharedAsset' => 'Sdílené účty aktiv', + 'opt_group_ccAsset' => 'Kreditní karty', + 'opt_group_cashWalletAsset' => 'Peněženky', + 'opt_group_expense_account' => 'Účty pro výdaje', + 'opt_group_revenue_account' => 'Účty pro příjmy', + 'opt_group_l_Loan' => 'Závazek: Půjčka', + 'opt_group_cash_account' => 'Hotovostní účet', + 'opt_group_l_Debt' => 'Závazek: Dluh', + 'opt_group_l_Mortgage' => 'Závazek: hypotéka', + 'opt_group_l_Credit card' => 'Závazek: kreditní karta', + 'notes' => 'Poznámky', + 'unknown_journal_error' => 'Transakci se nedaří uložit. Podívejte se do souborů se záznamy událostí.', + 'attachment_not_found' => 'Tuto přílohu se nepodařilo najít.', + 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', + 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', + 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => 'Vítejte ve Firefly III!', - 'submit' => 'Odeslat', - 'submission' => 'Submission', - 'submit_yes_really' => 'Odeslat (vím, co dělám)', - 'getting_started' => 'Začínáme', - 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main checking account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', - 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', - 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', - 'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.', - 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', - 'language' => 'Jazyk', - 'new_savings_account' => ':bank_name spořící účet', - 'cash_wallet' => 'Peněženka', - 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', + 'welcome' => 'Vítejte ve Firefly III!', + 'submit' => 'Odeslat', + 'submission' => 'Submission', + 'submit_yes_really' => 'Odeslat (vím, co dělám)', + 'getting_started' => 'Začínáme', + 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main checking account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', + 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', + 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', + 'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.', + 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', + 'language' => 'Jazyk', + 'new_savings_account' => ':bank_name spořící účet', + 'cash_wallet' => 'Peněženka', + 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', // home page: - 'transaction_table_description' => 'A table containing your transactions', - 'opposing_account' => 'Protiúčet', - 'yourAccounts' => 'Vaše účty', - 'your_accounts' => 'Přehled vašeho účtu', - 'category_overview' => 'Přehled kategorie', - 'expense_overview' => 'Expense account overview', - 'revenue_overview' => 'Přehled příjmových účtů', - 'budgetsAndSpending' => 'Rozpočty a útraty', - 'budgets_and_spending' => 'Rozpočty a útraty', - 'go_to_budget' => 'Přejít na rozpočet „{budget}“', - 'go_to_deposits' => 'Přejít na vklady', - 'go_to_expenses' => 'Přejít na výdaje', - 'savings' => 'Úspory', - 'newWithdrawal' => 'Nový výdaj', - 'newDeposit' => 'Nový vklad', - 'newTransfer' => 'Nový převod', - 'bills_to_pay' => 'Faktury k zaplacení', - 'per_day' => 'Za den', - 'left_to_spend_per_day' => 'Zbývá na denní útratu', - 'bills_paid' => 'Zaplacené účty', - 'custom_period' => 'Vlastní období', - 'reset_to_current' => 'Obnovit aktuální období', - 'select_period' => 'Vyberte období', + 'transaction_table_description' => 'A table containing your transactions', + 'opposing_account' => 'Protiúčet', + 'yourAccounts' => 'Vaše účty', + 'your_accounts' => 'Přehled vašeho účtu', + 'category_overview' => 'Přehled kategorie', + 'expense_overview' => 'Expense account overview', + 'revenue_overview' => 'Přehled příjmových účtů', + 'budgetsAndSpending' => 'Rozpočty a útraty', + 'budgets_and_spending' => 'Rozpočty a útraty', + 'go_to_budget' => 'Přejít na rozpočet „{budget}“', + 'go_to_deposits' => 'Přejít na vklady', + 'go_to_expenses' => 'Přejít na výdaje', + 'savings' => 'Úspory', + 'newWithdrawal' => 'Nový výdaj', + 'newDeposit' => 'Nový vklad', + 'newTransfer' => 'Nový převod', + 'bills_to_pay' => 'Faktury k zaplacení', + 'per_day' => 'Za den', + 'left_to_spend_per_day' => 'Zbývá na denní útratu', + 'bills_paid' => 'Zaplacené účty', + 'custom_period' => 'Vlastní období', + 'reset_to_current' => 'Obnovit aktuální období', + 'select_period' => 'Vyberte období', // menu and titles, should be recycled as often as possible: - 'currency' => 'Měna', - 'preferences' => 'Předvolby', - 'logout' => 'Odhlásit se', - 'logout_other_sessions' => 'Logout all other sessions', - 'toggleNavigation' => 'Vyp/zap. navigaci', - 'searchPlaceholder' => 'Hledat…', - 'version' => 'Verze', - 'dashboard' => 'Přehled', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Rozpočet k dispozici ({currency})', - 'currencies' => 'Měny', - 'activity' => 'Aktivita', - 'usage' => 'Použití', - 'accounts' => 'Účty', - 'Asset account' => 'Účet aktiv', - 'Default account' => 'Účet aktiv', - 'Expense account' => 'Výdajový účet', - 'Revenue account' => 'Příjmový účet', - 'Initial balance account' => 'Účet počátečního zůstatku', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Dluh', - 'account_type_Loan' => 'Půjčka', - 'account_type_Mortgage' => 'Hypotéka', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Kreditní karta', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Rozpočty', - 'tags' => 'Štítky', - 'reports' => 'Přehledy', - 'transactions' => 'Transakce', - 'expenses' => 'Výdaje', - 'income' => 'Odměna/příjem', - 'transfers' => 'Převody', - 'moneyManagement' => 'Správa peněz', - 'money_management' => 'Správa peněz', - 'tools' => 'Nástroje', - 'piggyBanks' => 'Pokladničky', - 'piggy_banks' => 'Pokladničky', - 'amount_x_of_y' => '{current} z {total}', - 'bills' => 'Účty', - 'withdrawal' => 'Výběr', - 'opening_balance' => 'Počáteční zůstatek', - 'deposit' => 'Vklad', - 'account' => 'Účet', - 'transfer' => 'Převod', - 'Withdrawal' => 'Výběr', - 'Deposit' => 'Vklad', - 'Transfer' => 'Převod', - 'bill' => 'Účet', - 'yes' => 'Ano', - 'no' => 'Ne', - 'amount' => 'Částka', - 'overview' => 'Přehled', - 'saveOnAccount' => 'Uložit na účet', - 'unknown' => 'Neznámé', - 'monthly' => 'Měsíčně', - 'profile' => 'Profil', - 'errors' => 'Chyby', - 'debt_start_date' => 'Datum začátku dluhu', - 'debt_start_amount' => 'Počáteční výše dluhu', - 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', - 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', - 'store_new_liabilities_account' => 'Uložit nový závazek', - 'edit_liabilities_account' => 'Upravit závazek „:name“', - 'financial_control' => 'Finanční kontrola', - 'accounting' => 'Accounting', - 'automation' => 'Automatizace', - 'others' => 'Ostatní', - 'classification' => 'Klasifikace', - 'store_transaction' => 'Store transaction', + 'currency' => 'Měna', + 'preferences' => 'Předvolby', + 'logout' => 'Odhlásit se', + 'logout_other_sessions' => 'Logout all other sessions', + 'toggleNavigation' => 'Vyp/zap. navigaci', + 'searchPlaceholder' => 'Hledat…', + 'version' => 'Verze', + 'dashboard' => 'Přehled', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Rozpočet k dispozici ({currency})', + 'currencies' => 'Měny', + 'activity' => 'Aktivita', + 'usage' => 'Použití', + 'accounts' => 'Účty', + 'Asset account' => 'Účet aktiv', + 'Default account' => 'Účet aktiv', + 'Expense account' => 'Výdajový účet', + 'Revenue account' => 'Příjmový účet', + 'Initial balance account' => 'Účet počátečního zůstatku', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Dluh', + 'account_type_Loan' => 'Půjčka', + 'account_type_Mortgage' => 'Hypotéka', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Kreditní karta', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'I am owed this debt', + 'liability_direction_debit' => 'I owe this debt to somebody else', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Rozpočty', + 'tags' => 'Štítky', + 'reports' => 'Přehledy', + 'transactions' => 'Transakce', + 'expenses' => 'Výdaje', + 'income' => 'Odměna/příjem', + 'transfers' => 'Převody', + 'moneyManagement' => 'Správa peněz', + 'money_management' => 'Správa peněz', + 'tools' => 'Nástroje', + 'piggyBanks' => 'Pokladničky', + 'piggy_banks' => 'Pokladničky', + 'amount_x_of_y' => '{current} z {total}', + 'bills' => 'Účty', + 'withdrawal' => 'Výběr', + 'opening_balance' => 'Počáteční zůstatek', + 'deposit' => 'Vklad', + 'account' => 'Účet', + 'transfer' => 'Převod', + 'Withdrawal' => 'Výběr', + 'Deposit' => 'Vklad', + 'Transfer' => 'Převod', + 'bill' => 'Účet', + 'yes' => 'Ano', + 'no' => 'Ne', + 'amount' => 'Částka', + 'overview' => 'Přehled', + 'saveOnAccount' => 'Uložit na účet', + 'unknown' => 'Neznámé', + 'monthly' => 'Měsíčně', + 'profile' => 'Profil', + 'errors' => 'Chyby', + 'debt_start_date' => 'Datum začátku dluhu', + 'debt_start_amount' => 'Počáteční výše dluhu', + 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', + 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', + 'store_new_liabilities_account' => 'Uložit nový závazek', + 'edit_liabilities_account' => 'Upravit závazek „:name“', + 'financial_control' => 'Finanční kontrola', + 'accounting' => 'Accounting', + 'automation' => 'Automatizace', + 'others' => 'Ostatní', + 'classification' => 'Klasifikace', + 'store_transaction' => 'Store transaction', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Výchozí finanční výkaz v období :start a :end', - 'report_audit' => 'Přehled historie transakcí mezi :start a :end', - 'report_category' => 'Výkaz kategorie z rozmezí :start a :end', - 'report_double' => 'Expense/revenue account report between :start and :end', - 'report_budget' => 'Budget report between :start and :end', - 'report_tag' => 'Tag report between :start and :end', - 'quick_link_reports' => 'Rychlé odkazy', - 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', - 'quick_link_default_report' => 'Výchozí výkaz o financích', - 'quick_link_audit_report' => 'Přehled historie transakcí', - 'report_this_month_quick' => 'Stávající měsíc, všechny účty', - 'report_last_month_quick' => 'Minulý měsíc, všechny účty', - 'report_this_year_quick' => 'Stávající rok, všechny účty', - 'report_this_fiscal_year_quick' => 'Stávající fiskální rok, všechny účty', - 'report_all_time_quick' => 'Kdykoli, všechny účty', - 'reports_can_bookmark' => 'Pamatujte, že výkazy je možné si ukládat do záložek.', - 'incomeVsExpenses' => 'Příjmy vůči nákladům', - 'accountBalances' => 'Zůstatky účtů', - 'balanceStart' => 'Zůstatek na začátku období', - 'balanceEnd' => 'Zůstatek na konci období', - 'splitByAccount' => 'Rozúčtování podle účtů', - 'coveredWithTags' => 'Pokryto štítky', - 'leftInBudget' => 'Zbývá v rozpočtu', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Souhrn součtů', - 'noCategory' => '(bez kategorie)', - 'notCharged' => 'Nestrženo (zatím)', - 'inactive' => 'Neaktivní', - 'active' => 'Aktivní', - 'difference' => 'Rozdíl', - 'money_flowing_in' => 'Vstup', - 'money_flowing_out' => 'Výstup', - 'topX' => 'nej :number', - 'show_full_list' => 'Zobrazit celý seznam', - 'show_only_top' => 'Zobrazit pouze :number nej', - 'report_type' => 'Typ přehledu', - 'report_type_default' => 'Výchozí výkaz o financích', - 'report_type_audit' => 'Přehled historie transakcí (audit)', - 'report_type_category' => 'Výkaz o kategorii', - 'report_type_budget' => 'Sestava rozpočtu', - 'report_type_tag' => 'Přehled značek', - 'report_type_double' => 'Expense/revenue account report', - 'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.', - 'report_included_accounts' => 'Zahrnuté účty', - 'report_date_range' => 'Období', - 'report_preset_ranges' => 'Přednastavené rozsahy', - 'shared' => 'Sdíleno', - 'fiscal_year' => 'Fiskální rok', - 'income_entry' => 'Příjmy z účtu „:name“ mezi :start a :end', - 'expense_entry' => 'Výdaje z účtu „:name“ v rozmezí :start a :end', - 'category_entry' => 'Výdaje a příjmy na účtu „:name“ v rozmezí :start a :end', - 'budget_spent_amount' => 'Výdaje z rozpočtu „:budget“ v rozmezí :start a :end', - 'balance_amount' => 'Výdaje z rozpočtu „:budget“ placené z účtu „:account“ v období :start a :end', - 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', - 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', - 'reports_extra_options' => 'Další volby', - 'report_has_no_extra_options' => 'Tento výkaz nemá žádné další volby', - 'reports_submit' => 'Zobrazit výkaz', - 'end_after_start_date' => 'Je třeba, aby konečné datum výkazu bylo později, než to počáteční.', - 'select_category' => 'Vybrat kategorie', - 'select_budget' => 'Vybrat rozpočty', - 'select_tag' => 'Vybrat štítky', - 'income_per_category' => 'Příjem podle kategorie', - 'expense_per_category' => 'Výdaje podle kategorie', - 'expense_per_budget' => 'Výdaje podle rozpočtu', - 'income_per_account' => 'Příjem podle účtu', - 'expense_per_account' => 'Výdaj podle účtu', - 'expense_per_tag' => 'Výdaje podle štítku', - 'income_per_tag' => 'Příjmy podle štítku', - 'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)', - 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', - 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', - 'include_income_not_in_category' => 'Included income not in the selected category(ies)', - 'include_income_not_in_account' => 'Included income not in the selected account(s)', - 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', - 'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)', - 'everything_else' => 'Všechno ostatní', - 'income_and_expenses' => 'Příjmy a výdaje', - 'spent_average' => 'Utraceno (průměrně)', - 'income_average' => 'Získáno (průměrně)', - 'transaction_count' => 'Počet transakcí', - 'average_spending_per_account' => 'Průměrné výdaje na účet', - 'average_income_per_account' => 'Průměrný příjem v jednotlivých účtech', - 'total' => 'Celkem', - 'description' => 'Popis', - 'sum_of_period' => 'Souhrn období', - 'average_in_period' => 'Průměr období', - 'account_role_defaultAsset' => 'Výchozí účet aktiv', - 'account_role_sharedAsset' => 'Sdílený účet aktiv', - 'account_role_savingAsset' => 'Spořicí účet', - 'account_role_ccAsset' => 'Kreditní karta', - 'account_role_cashWalletAsset' => 'Peněženka', - 'budget_chart_click' => 'Graf zobrazíte kliknutím na název rozpočtu ve výše uvedené tabulce.', - 'category_chart_click' => 'Graf zobrazíte kliknutím na název kategorie ve výše uvedené tabulce.', - 'in_out_accounts' => 'Earned and spent per combination', - 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', - 'in_out_per_category' => 'Získáno a vydáno v jednotlivých kategoriích', - 'out_per_budget' => 'Vydáno v jednotlivých rozpočtech', - 'select_expense_revenue' => 'Vybrat účet výdajů/odměn', - 'multi_currency_report_sum' => 'Protože tento seznam obsahuje účty v různých měnách, nedávají zobrazované součty smysl. Výkaz vždy náhradně použije měnu, kterou máte nastavenou jako výchozí.', - 'sum_in_default_currency' => 'Souhrn vždy bude v měně, kterou jste nastavili jako výchozí.', - 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', + 'report_default' => 'Výchozí finanční výkaz v období :start a :end', + 'report_audit' => 'Přehled historie transakcí mezi :start a :end', + 'report_category' => 'Výkaz kategorie z rozmezí :start a :end', + 'report_double' => 'Expense/revenue account report between :start and :end', + 'report_budget' => 'Budget report between :start and :end', + 'report_tag' => 'Tag report between :start and :end', + 'quick_link_reports' => 'Rychlé odkazy', + 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', + 'quick_link_default_report' => 'Výchozí výkaz o financích', + 'quick_link_audit_report' => 'Přehled historie transakcí', + 'report_this_month_quick' => 'Stávající měsíc, všechny účty', + 'report_last_month_quick' => 'Minulý měsíc, všechny účty', + 'report_this_year_quick' => 'Stávající rok, všechny účty', + 'report_this_fiscal_year_quick' => 'Stávající fiskální rok, všechny účty', + 'report_all_time_quick' => 'Kdykoli, všechny účty', + 'reports_can_bookmark' => 'Pamatujte, že výkazy je možné si ukládat do záložek.', + 'incomeVsExpenses' => 'Příjmy vůči nákladům', + 'accountBalances' => 'Zůstatky účtů', + 'balanceStart' => 'Zůstatek na začátku období', + 'balanceEnd' => 'Zůstatek na konci období', + 'splitByAccount' => 'Rozúčtování podle účtů', + 'coveredWithTags' => 'Pokryto štítky', + 'leftInBudget' => 'Zbývá v rozpočtu', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Souhrn součtů', + 'noCategory' => '(bez kategorie)', + 'notCharged' => 'Nestrženo (zatím)', + 'inactive' => 'Neaktivní', + 'active' => 'Aktivní', + 'difference' => 'Rozdíl', + 'money_flowing_in' => 'Vstup', + 'money_flowing_out' => 'Výstup', + 'topX' => 'nej :number', + 'show_full_list' => 'Zobrazit celý seznam', + 'show_only_top' => 'Zobrazit pouze :number nej', + 'report_type' => 'Typ přehledu', + 'report_type_default' => 'Výchozí výkaz o financích', + 'report_type_audit' => 'Přehled historie transakcí (audit)', + 'report_type_category' => 'Výkaz o kategorii', + 'report_type_budget' => 'Sestava rozpočtu', + 'report_type_tag' => 'Přehled značek', + 'report_type_double' => 'Expense/revenue account report', + 'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.', + 'report_included_accounts' => 'Zahrnuté účty', + 'report_date_range' => 'Období', + 'report_preset_ranges' => 'Přednastavené rozsahy', + 'shared' => 'Sdíleno', + 'fiscal_year' => 'Fiskální rok', + 'income_entry' => 'Příjmy z účtu „:name“ mezi :start a :end', + 'expense_entry' => 'Výdaje z účtu „:name“ v rozmezí :start a :end', + 'category_entry' => 'Výdaje a příjmy na účtu „:name“ v rozmezí :start a :end', + 'budget_spent_amount' => 'Výdaje z rozpočtu „:budget“ v rozmezí :start a :end', + 'balance_amount' => 'Výdaje z rozpočtu „:budget“ placené z účtu „:account“ v období :start a :end', + 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', + 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', + 'reports_extra_options' => 'Další volby', + 'report_has_no_extra_options' => 'Tento výkaz nemá žádné další volby', + 'reports_submit' => 'Zobrazit výkaz', + 'end_after_start_date' => 'Je třeba, aby konečné datum výkazu bylo později, než to počáteční.', + 'select_category' => 'Vybrat kategorie', + 'select_budget' => 'Vybrat rozpočty', + 'select_tag' => 'Vybrat štítky', + 'income_per_category' => 'Příjem podle kategorie', + 'expense_per_category' => 'Výdaje podle kategorie', + 'expense_per_budget' => 'Výdaje podle rozpočtu', + 'income_per_account' => 'Příjem podle účtu', + 'expense_per_account' => 'Výdaj podle účtu', + 'expense_per_tag' => 'Výdaje podle štítku', + 'income_per_tag' => 'Příjmy podle štítku', + 'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)', + 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', + 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', + 'include_income_not_in_category' => 'Included income not in the selected category(ies)', + 'include_income_not_in_account' => 'Included income not in the selected account(s)', + 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', + 'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)', + 'everything_else' => 'Všechno ostatní', + 'income_and_expenses' => 'Příjmy a výdaje', + 'spent_average' => 'Utraceno (průměrně)', + 'income_average' => 'Získáno (průměrně)', + 'transaction_count' => 'Počet transakcí', + 'average_spending_per_account' => 'Průměrné výdaje na účet', + 'average_income_per_account' => 'Průměrný příjem v jednotlivých účtech', + 'total' => 'Celkem', + 'description' => 'Popis', + 'sum_of_period' => 'Souhrn období', + 'average_in_period' => 'Průměr období', + 'account_role_defaultAsset' => 'Výchozí účet aktiv', + 'account_role_sharedAsset' => 'Sdílený účet aktiv', + 'account_role_savingAsset' => 'Spořicí účet', + 'account_role_ccAsset' => 'Kreditní karta', + 'account_role_cashWalletAsset' => 'Peněženka', + 'budget_chart_click' => 'Graf zobrazíte kliknutím na název rozpočtu ve výše uvedené tabulce.', + 'category_chart_click' => 'Graf zobrazíte kliknutím na název kategorie ve výše uvedené tabulce.', + 'in_out_accounts' => 'Earned and spent per combination', + 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', + 'in_out_per_category' => 'Získáno a vydáno v jednotlivých kategoriích', + 'out_per_budget' => 'Vydáno v jednotlivých rozpočtech', + 'select_expense_revenue' => 'Vybrat účet výdajů/odměn', + 'multi_currency_report_sum' => 'Protože tento seznam obsahuje účty v různých měnách, nedávají zobrazované součty smysl. Výkaz vždy náhradně použije měnu, kterou máte nastavenou jako výchozí.', + 'sum_in_default_currency' => 'Souhrn vždy bude v měně, kterou jste nastavili jako výchozí.', + 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Graf', - 'month' => 'Měsíc', - 'budget' => 'Rozpočet', - 'spent' => 'Utraceno', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => 'Utraceno v rozpočtu', - 'left_to_spend' => 'Zbývá k utracení', - 'earned' => 'Vyděláno', - 'overspent' => 'Překročeny výdaje', - 'left' => 'Zbývá', - 'max-amount' => 'Maximální částka', - 'min-amount' => 'Nejmenší možná částka', - 'journal-amount' => 'Current bill entry', - 'name' => 'Název', - 'date' => 'Datum', - 'date_and_time' => 'Datum a čas', - 'time' => 'Čas', - 'paid' => 'Zaplaceno', - 'unpaid' => 'Nezaplaceno', - 'day' => 'Den', - 'budgeted' => 'Rozpočet', - 'period' => 'Období', - 'balance' => 'Zůstatek', - 'in_out_period' => 'In + out this period', - 'sum' => 'Součet', - 'summary' => 'Souhrn', - 'average' => 'Průměr', - 'balanceFor' => 'Zůstatek na :name', - 'no_tags' => '(žádné štítky)', + 'chart' => 'Graf', + 'month' => 'Měsíc', + 'budget' => 'Rozpočet', + 'spent' => 'Utraceno', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => 'Utraceno v rozpočtu', + 'left_to_spend' => 'Zbývá k utracení', + 'earned' => 'Vyděláno', + 'overspent' => 'Překročeny výdaje', + 'left' => 'Zbývá', + 'max-amount' => 'Maximální částka', + 'min-amount' => 'Nejmenší možná částka', + 'journal-amount' => 'Current bill entry', + 'name' => 'Název', + 'date' => 'Datum', + 'date_and_time' => 'Datum a čas', + 'time' => 'Čas', + 'paid' => 'Zaplaceno', + 'unpaid' => 'Nezaplaceno', + 'day' => 'Den', + 'budgeted' => 'Rozpočet', + 'period' => 'Období', + 'balance' => 'Zůstatek', + 'in_out_period' => 'In + out this period', + 'sum' => 'Součet', + 'summary' => 'Souhrn', + 'average' => 'Průměr', + 'balanceFor' => 'Zůstatek na :name', + 'no_tags' => '(žádné štítky)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Vložit peníze do pokladničky ":name"', - 'piggy_bank' => 'Pokladnička', - 'new_piggy_bank' => 'Nová pokladnička', - 'store_piggy_bank' => 'Uložit novou pokladničku', - 'stored_piggy_bank' => 'Uložit novou pokladničku „:name“', - 'account_status' => 'Stav účtu', - 'left_for_piggy_banks' => 'Zbývá pro pokladničky', - 'sum_of_piggy_banks' => 'Součet pokladniček', - 'saved_so_far' => 'Doposud naspořeno', - 'left_to_save' => 'Zbývá pro spoření', - 'suggested_amount' => 'Doporučené měsíční částka do úspor', - 'add_money_to_piggy_title' => 'Vložit peníze do pokladničky ":name"', - 'remove_money_from_piggy_title' => 'Vybrat peníze z pokladničky ":name"', - 'add' => 'Přidat', - 'no_money_for_piggy' => 'Nejsou žádné peníze, které by se daly vložit do této pokladničky.', - 'suggested_savings_per_month' => 'Doporučeno na měsíc', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Vložit peníze do pokladničky ":name"', + 'piggy_bank' => 'Pokladnička', + 'new_piggy_bank' => 'Nová pokladnička', + 'store_piggy_bank' => 'Uložit novou pokladničku', + 'stored_piggy_bank' => 'Uložit novou pokladničku „:name“', + 'account_status' => 'Stav účtu', + 'left_for_piggy_banks' => 'Zbývá pro pokladničky', + 'sum_of_piggy_banks' => 'Součet pokladniček', + 'saved_so_far' => 'Doposud naspořeno', + 'left_to_save' => 'Zbývá pro spoření', + 'suggested_amount' => 'Doporučené měsíční částka do úspor', + 'add_money_to_piggy_title' => 'Vložit peníze do pokladničky ":name"', + 'remove_money_from_piggy_title' => 'Vybrat peníze z pokladničky ":name"', + 'add' => 'Přidat', + 'no_money_for_piggy' => 'Nejsou žádné peníze, které by se daly vložit do této pokladničky.', + 'suggested_savings_per_month' => 'Doporučeno na měsíc', - 'remove' => 'Odebrat', - 'max_amount_add' => 'Nejvyšší částka, kterou je možné přidat je', - 'max_amount_remove' => 'Nejvyšší částka, kterou je možné odebrat je', - 'update_piggy_button' => 'Aktualizovat pokladničku', - 'update_piggy_title' => 'Aktualizovat pokladničku ":name"', - 'updated_piggy_bank' => 'Aktualizována pokladnička „:name“', - 'details' => 'Podrobnosti', - 'events' => 'Události', - 'target_amount' => 'Cílová částka', - 'start_date' => 'Datum zahájení', - 'no_start_date' => 'Žádné datum začátku', - 'target_date' => 'Cílové datum', - 'no_target_date' => 'Žádné cílové datum', - 'table' => 'Tabulka', - 'delete_piggy_bank' => 'Smazat pokladničku ":name"', - 'cannot_add_amount_piggy' => 'Nedaří se přidat :amount do „:name“.', - 'cannot_remove_from_piggy' => 'Could not remove :amount from ":name".', - 'deleted_piggy_bank' => 'Pokladnička ":name" smazána', - 'added_amount_to_piggy' => ':amount přidáno do „:name“', - 'removed_amount_from_piggy' => ':amount odebráno z „:name“', - 'piggy_events' => 'Související pokladničky', + 'remove' => 'Odebrat', + 'max_amount_add' => 'Nejvyšší částka, kterou je možné přidat je', + 'max_amount_remove' => 'Nejvyšší částka, kterou je možné odebrat je', + 'update_piggy_button' => 'Aktualizovat pokladničku', + 'update_piggy_title' => 'Aktualizovat pokladničku ":name"', + 'updated_piggy_bank' => 'Aktualizována pokladnička „:name“', + 'details' => 'Podrobnosti', + 'events' => 'Události', + 'target_amount' => 'Cílová částka', + 'start_date' => 'Datum zahájení', + 'no_start_date' => 'Žádné datum začátku', + 'target_date' => 'Cílové datum', + 'no_target_date' => 'Žádné cílové datum', + 'table' => 'Tabulka', + 'delete_piggy_bank' => 'Smazat pokladničku ":name"', + 'cannot_add_amount_piggy' => 'Nedaří se přidat :amount do „:name“.', + 'cannot_remove_from_piggy' => 'Could not remove :amount from ":name".', + 'deleted_piggy_bank' => 'Pokladnička ":name" smazána', + 'added_amount_to_piggy' => ':amount přidáno do „:name“', + 'removed_amount_from_piggy' => ':amount odebráno z „:name“', + 'piggy_events' => 'Související pokladničky', // tags - 'delete_tag' => 'Smazat štítek „:tag“', - 'deleted_tag' => 'Smazán štítek „:tag“', - 'new_tag' => 'Vytvořit nový štítek', - 'edit_tag' => 'Upravit štítek „:tag“', - 'updated_tag' => 'Aktualizován štítek „:tag“', - 'created_tag' => 'Štítek „:tag“ byl vytvořen.', + 'delete_tag' => 'Smazat štítek „:tag“', + 'deleted_tag' => 'Smazán štítek „:tag“', + 'new_tag' => 'Vytvořit nový štítek', + 'edit_tag' => 'Upravit štítek „:tag“', + 'updated_tag' => 'Aktualizován štítek „:tag“', + 'created_tag' => 'Štítek „:tag“ byl vytvořen.', - 'transaction_journal_information' => 'Informace o transakci', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta informace', - 'transaction_journal_more' => 'Další informace', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Více informací', - 'att_part_of_journal' => 'Uloženo pod „:journal“', - 'total_amount' => 'Celková částka', - 'number_of_decimals' => 'Počet desetinných míst', + 'transaction_journal_information' => 'Informace o transakci', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Meta informace', + 'transaction_journal_more' => 'Další informace', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Více informací', + 'att_part_of_journal' => 'Uloženo pod „:journal“', + 'total_amount' => 'Celková částka', + 'number_of_decimals' => 'Počet desetinných míst', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Správa', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Správa uživatelů', - 'list_all_users' => 'Všichni uživatelé', - 'all_users' => 'Všichni uživatelé', - 'instance_configuration' => 'Nastavení', - 'firefly_instance_configuration' => 'Možnosti nastavení Firefly III', - 'setting_single_user_mode' => 'Režim pro jediného uživatele', - 'setting_single_user_mode_explain' => 'Ve výchozím stavu, Firefly III přijme pouze jednu registraci – Vás. Toto je bezpečnostní opatření, bránící ostatním použít vaši instanci, dokud jim to nepovolíte. Další registrace jsou blokovány. Pokud zrušíte zaškrtnutí tohoto, ostatní mohou vaši instanci také použít za předpokladu, že je jim dostupná (když je připojena k Internetu).', - 'store_configuration' => 'Uložit nastavení', - 'single_user_administration' => 'Správa uživatele pro :email', - 'edit_user' => 'Upravit uživatele :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'Uživatelská data', - 'user_information' => 'Informace o uživateli', - 'total_size' => 'celková velikost', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'Nastavení bylo aktualizováno', - 'setting_is_demo_site' => 'Demostránka', - 'setting_is_demo_site_explain' => 'If you check this box, this installation will behave as if it is the demo site, which can have weird side effects.', - 'block_code_bounced' => 'Email message(s) bounced', - 'block_code_expired' => 'Platnost demoúčtu skončila', - 'no_block_code' => 'Není důvod pro blokování nebo uživatel není blokován', - 'block_code_email_changed' => 'Uživatel ještě nepotvrdil svou e-mailovou adresu', - 'admin_update_email' => 'Narozdíl od profilové stránky uživatel NEBUDE upozorněn na změnu své e-mailové adresy!', - 'update_user' => 'Aktualizovat uživatele', - 'updated_user' => 'Data uživatele byla změněna.', - 'delete_user' => 'Smazat uživatele :email', - 'user_deleted' => 'Uživatel byl smazán', - 'send_test_email' => 'Poslat zkušební e-mail', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Poslat zprávu', - 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', - 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', - 'admin_maintanance_title' => 'Údržba', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Vymazat mezipaměť', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Popis rozúčtování', - 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'split_title_help' => 'Pokud vytvoříte rozúčtování, je třeba, aby zde byl celkový popis pro všechna rozúčtování dané transakce.', - 'you_create_transfer' => 'You\'re creating a transfer.', - 'you_create_withdrawal' => 'You\'re creating a withdrawal.', - 'you_create_deposit' => 'You\'re creating a deposit.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Správa', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'Správa uživatelů', + 'list_all_users' => 'Všichni uživatelé', + 'all_users' => 'Všichni uživatelé', + 'instance_configuration' => 'Nastavení', + 'firefly_instance_configuration' => 'Možnosti nastavení Firefly III', + 'setting_single_user_mode' => 'Režim pro jediného uživatele', + 'setting_single_user_mode_explain' => 'Ve výchozím stavu, Firefly III přijme pouze jednu registraci – Vás. Toto je bezpečnostní opatření, bránící ostatním použít vaši instanci, dokud jim to nepovolíte. Další registrace jsou blokovány. Pokud zrušíte zaškrtnutí tohoto, ostatní mohou vaši instanci také použít za předpokladu, že je jim dostupná (když je připojena k Internetu).', + 'store_configuration' => 'Uložit nastavení', + 'single_user_administration' => 'Správa uživatele pro :email', + 'edit_user' => 'Upravit uživatele :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'Uživatelská data', + 'user_information' => 'Informace o uživateli', + 'total_size' => 'celková velikost', + 'budget_or_budgets' => ':count budget|:count budgets', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'Nastavení bylo aktualizováno', + 'setting_is_demo_site' => 'Demostránka', + 'setting_is_demo_site_explain' => 'If you check this box, this installation will behave as if it is the demo site, which can have weird side effects.', + 'block_code_bounced' => 'Email message(s) bounced', + 'block_code_expired' => 'Platnost demoúčtu skončila', + 'no_block_code' => 'Není důvod pro blokování nebo uživatel není blokován', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Uživatel ještě nepotvrdil svou e-mailovou adresu', + 'admin_update_email' => 'Narozdíl od profilové stránky uživatel NEBUDE upozorněn na změnu své e-mailové adresy!', + 'update_user' => 'Aktualizovat uživatele', + 'updated_user' => 'Data uživatele byla změněna.', + 'delete_user' => 'Smazat uživatele :email', + 'user_deleted' => 'Uživatel byl smazán', + 'send_test_email' => 'Poslat zkušební e-mail', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Poslat zprávu', + 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', + 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', + 'admin_maintanance_title' => 'Údržba', + 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', + 'admin_maintenance_clear_cache' => 'Vymazat mezipaměť', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Popis rozúčtování', + 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'split_title_help' => 'Pokud vytvoříte rozúčtování, je třeba, aby zde byl celkový popis pro všechna rozúčtování dané transakce.', + 'you_create_transfer' => 'You\'re creating a transfer.', + 'you_create_withdrawal' => 'You\'re creating a withdrawal.', + 'you_create_deposit' => 'You\'re creating a deposit.', // links - 'journal_link_configuration' => 'Transaction links configuration', - 'create_new_link_type' => 'Vytvořit nový typ odkazu', - 'store_new_link_type' => 'Uložit nový typ odkazu', - 'update_link_type' => 'Aktualizovat typ propojení', - 'edit_link_type' => 'Upravit odkaz typu „:name“', - 'updated_link_type' => 'Updated link type ":name"', - 'delete_link_type' => 'Delete link type ":name"', - 'deleted_link_type' => 'Deleted link type ":name"', - 'stored_new_link_type' => 'Store new link type ":name"', - 'cannot_edit_link_type' => 'Cannot edit link type ":name"', - 'link_type_help_name' => 'Ie. "Duplicates"', - 'link_type_help_inward' => 'tj. „duplicity“', - 'link_type_help_outward' => 'Ie. "is duplicated by"', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(neukládat spojení)', - 'link_transaction' => 'Propojit transakci', - 'link_to_other_transaction' => 'Propojit tuto transakci s jinou', - 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', - 'this_transaction' => 'Tato transakce', - 'transaction' => 'Transakce', - 'comments' => 'Komentáře', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Tyto transakce nelze propojit', - 'selected_transaction' => 'Vybraná transakce', - 'journals_linked' => 'Transakce jsou propojeny.', - 'journals_error_linked' => 'Tyto transakce už jsou propojené.', - 'journals_link_to_self' => 'Není možné propojit transakci s ní samotnou', - 'journal_links' => 'Transaction links', - 'this_withdrawal' => 'Tento výběr', - 'this_deposit' => 'Tento vklad', - 'this_transfer' => 'Tento převod', - 'overview_for_link' => 'Overview for link type ":name"', - 'source_transaction' => 'Zdrojová transakce', - 'link_description' => 'Popis odkazu', - 'destination_transaction' => 'Cílová transakce', - 'delete_journal_link' => 'Delete the link between :source and :destination', - 'deleted_link' => 'Smazaný odkaz', + 'journal_link_configuration' => 'Transaction links configuration', + 'create_new_link_type' => 'Vytvořit nový typ odkazu', + 'store_new_link_type' => 'Uložit nový typ odkazu', + 'update_link_type' => 'Aktualizovat typ propojení', + 'edit_link_type' => 'Upravit odkaz typu „:name“', + 'updated_link_type' => 'Updated link type ":name"', + 'delete_link_type' => 'Delete link type ":name"', + 'deleted_link_type' => 'Deleted link type ":name"', + 'stored_new_link_type' => 'Store new link type ":name"', + 'cannot_edit_link_type' => 'Cannot edit link type ":name"', + 'link_type_help_name' => 'Ie. "Duplicates"', + 'link_type_help_inward' => 'tj. „duplicity“', + 'link_type_help_outward' => 'Ie. "is duplicated by"', + 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', + 'do_not_save_connection' => '(neukládat spojení)', + 'link_transaction' => 'Propojit transakci', + 'link_to_other_transaction' => 'Propojit tuto transakci s jinou', + 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', + 'this_transaction' => 'Tato transakce', + 'transaction' => 'Transakce', + 'comments' => 'Komentáře', + 'link_notes' => 'Any notes you wish to store with the link.', + 'invalid_link_selection' => 'Tyto transakce nelze propojit', + 'selected_transaction' => 'Vybraná transakce', + 'journals_linked' => 'Transakce jsou propojeny.', + 'journals_error_linked' => 'Tyto transakce už jsou propojené.', + 'journals_link_to_self' => 'Není možné propojit transakci s ní samotnou', + 'journal_links' => 'Transaction links', + 'this_withdrawal' => 'Tento výběr', + 'this_deposit' => 'Tento vklad', + 'this_transfer' => 'Tento převod', + 'overview_for_link' => 'Overview for link type ":name"', + 'source_transaction' => 'Zdrojová transakce', + 'link_description' => 'Popis odkazu', + 'destination_transaction' => 'Cílová transakce', + 'delete_journal_link' => 'Delete the link between :source and :destination', + 'deleted_link' => 'Smazaný odkaz', // link translations: - 'Paid_name' => 'Zaplaceno', - 'Refund_name' => 'Vrácení peněz', - 'Reimbursement_name' => 'Náhrada', - 'Related_name' => 'Související', - 'relates to_inward' => 'souvisí s', - 'is (partially) refunded by_inward' => 'is (partially) refunded by', - 'is (partially) paid for by_inward' => 'is (partially) paid for by', - 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', - 'inward_transaction' => 'Inward transaction', - 'outward_transaction' => 'Outward transaction', - 'relates to_outward' => 'souvisí s', - '(partially) refunds_outward' => '(partially) refunds', - '(partially) pays for_outward' => '(partially) pays for', - '(partially) reimburses_outward' => '(partially) reimburses', - 'is (partially) refunded by' => 'is (partially) refunded by', - 'is (partially) paid for by' => 'is (partially) paid for by', - 'is (partially) reimbursed by' => 'is (partially) reimbursed by', - 'relates to' => 'souvisí s', - '(partially) refunds' => '(partially) refunds', - '(partially) pays for' => '(partially) pays for', - '(partially) reimburses' => '(partially) reimburses', + 'Paid_name' => 'Zaplaceno', + 'Refund_name' => 'Vrácení peněz', + 'Reimbursement_name' => 'Náhrada', + 'Related_name' => 'Související', + 'relates to_inward' => 'souvisí s', + 'is (partially) refunded by_inward' => 'is (partially) refunded by', + 'is (partially) paid for by_inward' => 'is (partially) paid for by', + 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', + 'inward_transaction' => 'Inward transaction', + 'outward_transaction' => 'Outward transaction', + 'relates to_outward' => 'souvisí s', + '(partially) refunds_outward' => '(partially) refunds', + '(partially) pays for_outward' => '(partially) pays for', + '(partially) reimburses_outward' => '(partially) reimburses', + 'is (partially) refunded by' => 'is (partially) refunded by', + 'is (partially) paid for by' => 'is (partially) paid for by', + 'is (partially) reimbursed by' => 'is (partially) reimbursed by', + 'relates to' => 'souvisí s', + '(partially) refunds' => '(partially) refunds', + '(partially) pays for' => '(partially) pays for', + '(partially) reimburses' => '(partially) reimburses', // split a transaction: - 'splits' => 'Rozúčtování', - 'add_another_split' => 'Přidat další rozúčtování', - 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', - 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', - 'breadcrumb_convert_group' => 'Převést transakci', - 'convert_invalid_source' => 'Zdrojové informace jsou neplatné pro transakci #%d.', - 'convert_invalid_destination' => 'Cílové informace jsou neplatné pro transakci #%d.', - 'create_another' => 'After storing, return here to create another one.', - 'after_update_create_another' => 'After updating, return here to continue editing.', - 'store_as_new' => 'Store as a new transaction instead of updating.', - 'reset_after' => 'Reset form after submission', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Rozúčtování', + 'add_another_split' => 'Přidat další rozúčtování', + 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', + 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', + 'breadcrumb_convert_group' => 'Převést transakci', + 'convert_invalid_source' => 'Zdrojové informace jsou neplatné pro transakci #%d.', + 'convert_invalid_destination' => 'Cílové informace jsou neplatné pro transakci #%d.', + 'create_another' => 'After storing, return here to create another one.', + 'after_update_create_another' => 'After updating, return here to continue editing.', + 'store_as_new' => 'Store as a new transaction instead of updating.', + 'reset_after' => 'Reset form after submission', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(neseskupeno)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(neseskupeno)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Vytvořme účet aktiv!', - 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.', - 'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:', - 'no_accounts_create_asset' => 'Vytvořit nový účet', - 'no_accounts_title_expense' => 'Vytvořme výdajový účet!', - 'no_accounts_intro_expense' => 'Doposud jste nevytvořily žádné účty pro výdaje. Tyto účty jsou tím, kde utrácíte peníze, jako například obchody a supermarkety.', - 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_expense' => 'Vytvořit výdajový účet', - 'no_accounts_title_revenue' => 'Vytvořme příjmový účet!', - 'no_accounts_intro_revenue' => 'Doposud jste ještě nevytvořili žádné příjmové účty. Příjmové účty jsou místa, ze kterých dostáváte peníze – například váš zaměstnavatel.', - 'no_accounts_imperative_revenue' => 'Revenue accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_revenue' => 'Vytvořit příjmový účet', - 'no_accounts_title_liabilities' => 'Pojďme vytvořit závazek!', - 'no_accounts_intro_liabilities' => 'Zatím nemáte žádné závazky. Ty jsou účty které registrují vaše půjčky a ostatní dluhy.', - 'no_accounts_imperative_liabilities' => 'Tuto funkci nemusíte používat, ale hodí se pokud si chcete držet přehled v těchto věcech.', - 'no_accounts_create_liabilities' => 'Vytvořit závazek', - 'no_budgets_title_default' => 'Pojďme vytvořit rozpočet', - 'no_rules_title_default' => 'Pojďme vytvořit pravidlo', - 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Rozpočty jsou základní nástroje správy financí. Pojďme takový vytvořit:', - 'no_budgets_create_default' => 'Vytvořit rozpočet', - 'no_rules_create_default' => 'Vytvořit pravidlo', - 'no_categories_title_default' => 'Pojďme vytvořit kategorii!', - 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', - 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_categories_create_default' => 'Vytvořit kategorii', - 'no_tags_title_default' => 'Pojďme vytvořit štítek!', - 'no_tags_intro_default' => 'Zatím jste nezadali nevytvořili žádné štítky. Ty slouží k jemnému dolaďování vašich transakcí a označují je konkrétními klíčovými slovy.', - 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_tags_create_default' => 'Vytvořit štítek', - 'no_transactions_title_withdrawal' => 'Pojďme vytvořit výdaj!', - 'no_transactions_intro_withdrawal' => 'You have no expenses yet. You should create expenses to start managing your finances.', - 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', - 'no_transactions_create_withdrawal' => 'Vytvořit výdaj', - 'no_transactions_title_deposit' => 'Pojďme vytvořit nějaký příjem!', - 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', - 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', - 'no_transactions_create_deposit' => 'Vytvořit vklad', - 'no_transactions_title_transfers' => 'Pojďme vytvořit převod!', - 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', - 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', - 'no_transactions_create_transfers' => 'Vytvořit převod', - 'no_piggies_title_default' => 'Vytvořit pokladničku!', - 'no_piggies_intro_default' => 'You have no piggy banks yet. You can create piggy banks to divide your savings and keep track of what you\'re saving up for.', - 'no_piggies_imperative_default' => 'Do you have things you\'re saving money for? Create a piggy bank and keep track:', - 'no_piggies_create_default' => 'Vytvořit novou pokladničku', - 'no_bills_title_default' => 'Pojďme vytvořit účet!', - 'no_bills_intro_default' => 'You have no bills yet. You can create bills to keep track of regular expenses, like your rent or insurance.', - 'no_bills_imperative_default' => 'Do you have such regular bills? Create a bill and keep track of your payments:', - 'no_bills_create_default' => 'Vytvořit účet', + 'no_accounts_title_asset' => 'Vytvořme účet aktiv!', + 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.', + 'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:', + 'no_accounts_create_asset' => 'Vytvořit nový účet', + 'no_accounts_title_expense' => 'Vytvořme výdajový účet!', + 'no_accounts_intro_expense' => 'Doposud jste nevytvořily žádné účty pro výdaje. Tyto účty jsou tím, kde utrácíte peníze, jako například obchody a supermarkety.', + 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_expense' => 'Vytvořit výdajový účet', + 'no_accounts_title_revenue' => 'Vytvořme příjmový účet!', + 'no_accounts_intro_revenue' => 'Doposud jste ještě nevytvořili žádné příjmové účty. Příjmové účty jsou místa, ze kterých dostáváte peníze – například váš zaměstnavatel.', + 'no_accounts_imperative_revenue' => 'Revenue accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_revenue' => 'Vytvořit příjmový účet', + 'no_accounts_title_liabilities' => 'Pojďme vytvořit závazek!', + 'no_accounts_intro_liabilities' => 'Zatím nemáte žádné závazky. Ty jsou účty které registrují vaše půjčky a ostatní dluhy.', + 'no_accounts_imperative_liabilities' => 'Tuto funkci nemusíte používat, ale hodí se pokud si chcete držet přehled v těchto věcech.', + 'no_accounts_create_liabilities' => 'Vytvořit závazek', + 'no_budgets_title_default' => 'Pojďme vytvořit rozpočet', + 'no_rules_title_default' => 'Pojďme vytvořit pravidlo', + 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Rozpočty jsou základní nástroje správy financí. Pojďme takový vytvořit:', + 'no_budgets_create_default' => 'Vytvořit rozpočet', + 'no_rules_create_default' => 'Vytvořit pravidlo', + 'no_categories_title_default' => 'Pojďme vytvořit kategorii!', + 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', + 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_categories_create_default' => 'Vytvořit kategorii', + 'no_tags_title_default' => 'Pojďme vytvořit štítek!', + 'no_tags_intro_default' => 'Zatím jste nezadali nevytvořili žádné štítky. Ty slouží k jemnému dolaďování vašich transakcí a označují je konkrétními klíčovými slovy.', + 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_tags_create_default' => 'Vytvořit štítek', + 'no_transactions_title_withdrawal' => 'Pojďme vytvořit výdaj!', + 'no_transactions_intro_withdrawal' => 'You have no expenses yet. You should create expenses to start managing your finances.', + 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', + 'no_transactions_create_withdrawal' => 'Vytvořit výdaj', + 'no_transactions_title_deposit' => 'Pojďme vytvořit nějaký příjem!', + 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', + 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', + 'no_transactions_create_deposit' => 'Vytvořit vklad', + 'no_transactions_title_transfers' => 'Pojďme vytvořit převod!', + 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', + 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', + 'no_transactions_create_transfers' => 'Vytvořit převod', + 'no_piggies_title_default' => 'Vytvořit pokladničku!', + 'no_piggies_intro_default' => 'You have no piggy banks yet. You can create piggy banks to divide your savings and keep track of what you\'re saving up for.', + 'no_piggies_imperative_default' => 'Do you have things you\'re saving money for? Create a piggy bank and keep track:', + 'no_piggies_create_default' => 'Vytvořit novou pokladničku', + 'no_bills_title_default' => 'Pojďme vytvořit účet!', + 'no_bills_intro_default' => 'You have no bills yet. You can create bills to keep track of regular expenses, like your rent or insurance.', + 'no_bills_imperative_default' => 'Do you have such regular bills? Create a bill and keep track of your payments:', + 'no_bills_create_default' => 'Vytvořit účet', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Opakované transakce', - 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', - 'recurring_calendar_view' => 'Kalendář', - 'no_recurring_title_default' => 'Pojďme vytvořit opakující se transakci!', - 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', - 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', - 'no_recurring_create_default' => 'Vytvořit opakující se transakci', - 'make_new_recurring' => 'Vytvořit opakující se transakci', - 'recurring_daily' => 'Každý den', - 'recurring_weekly' => 'Každý týden v :weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => 'Každý rok v :date', - 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', - 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', - 'created_transactions' => 'Související transakce', - 'expected_withdrawals' => 'Očekávané výběry', - 'expected_deposits' => 'Očekávané vklady', - 'expected_transfers' => 'Očekávané převody', - 'created_withdrawals' => 'Vytvořené výběry', - 'created_deposits' => 'Vytvořené vklady', - 'created_transfers' => 'Vytvořené převody', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', - 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Opakované transakce', + 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', + 'recurring_calendar_view' => 'Kalendář', + 'no_recurring_title_default' => 'Pojďme vytvořit opakující se transakci!', + 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', + 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', + 'no_recurring_create_default' => 'Vytvořit opakující se transakci', + 'make_new_recurring' => 'Vytvořit opakující se transakci', + 'recurring_daily' => 'Každý den', + 'recurring_weekly' => 'Každý týden v :weekday', + 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', + 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => 'Každý rok v :date', + 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', + 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', + 'created_transactions' => 'Související transakce', + 'expected_withdrawals' => 'Očekávané výběry', + 'expected_deposits' => 'Očekávané vklady', + 'expected_transfers' => 'Očekávané převody', + 'created_withdrawals' => 'Vytvořené výběry', + 'created_deposits' => 'Vytvořené vklady', + 'created_transfers' => 'Vytvořené převody', + 'recurring_info' => 'Recurring transaction :count / :total', + 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', + 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'create_new_recurrence' => 'Vytvořit novou opakující se transakci', - 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', - 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', - 'no_currency' => '(žádná měna)', - 'mandatory_for_recurring' => 'Nezbytné informace k opakovanosti', - 'mandatory_for_transaction' => 'Povinné informace o transakci', - 'optional_for_recurring' => 'Volitelné informace o opakovanosti', - 'optional_for_transaction' => 'Volitelné informace o transakci', - 'change_date_other_options' => 'Pro zobrazení více možností změňte „datum první“.', - 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', - 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', - 'repeat_forever' => 'Opakovat donekonečna', - 'repeat_until_date' => 'Opakovat do data', - 'repeat_times' => 'Zopakovat tolikrát', - 'recurring_skips_one' => 'Každý druhý', - 'recurring_skips_more' => 'Přeskočí :count výskytů', - 'store_new_recurrence' => 'Uložit opakovanou transakci', - 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', - 'edit_recurrence' => 'Edit recurring transaction ":title"', - 'recurring_repeats_until' => 'Opakuje se do :date', - 'recurring_repeats_forever' => 'Opakuje navždy', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Aktualizovat opakující se transakci', - 'updated_recurrence' => 'Updated recurring transaction ":title"', - 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', - 'delete_recurring' => 'Delete recurring transaction ":title"', - 'new_recurring_transaction' => 'Nová opakující se transakce', - 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', - 'do_nothing' => 'Jen vytvořit transakci', - 'skip_transaction' => 'Přeskočit opakovanost', - 'jump_to_friday' => 'Namísto toho vytvořit transakci v předchozí pátek', - 'jump_to_monday' => 'Namísto toho vytvořit transakci v předchozí pondělí', - 'will_jump_friday' => 'Bude vytvořeno v pátek namísto víkendů.', - 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', - 'except_weekends' => 'Vyjma výkendů', - 'recurrence_deleted' => 'Recurring transaction ":title" deleted', + 'create_new_recurrence' => 'Vytvořit novou opakující se transakci', + 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', + 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', + 'no_currency' => '(žádná měna)', + 'mandatory_for_recurring' => 'Nezbytné informace k opakovanosti', + 'mandatory_for_transaction' => 'Povinné informace o transakci', + 'optional_for_recurring' => 'Volitelné informace o opakovanosti', + 'optional_for_transaction' => 'Volitelné informace o transakci', + 'change_date_other_options' => 'Pro zobrazení více možností změňte „datum první“.', + 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', + 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', + 'repeat_forever' => 'Opakovat donekonečna', + 'repeat_until_date' => 'Opakovat do data', + 'repeat_times' => 'Zopakovat tolikrát', + 'recurring_skips_one' => 'Každý druhý', + 'recurring_skips_more' => 'Přeskočí :count výskytů', + 'store_new_recurrence' => 'Uložit opakovanou transakci', + 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', + 'edit_recurrence' => 'Edit recurring transaction ":title"', + 'recurring_repeats_until' => 'Opakuje se do :date', + 'recurring_repeats_forever' => 'Opakuje navždy', + 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', + 'update_recurrence' => 'Aktualizovat opakující se transakci', + 'updated_recurrence' => 'Updated recurring transaction ":title"', + 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', + 'delete_recurring' => 'Delete recurring transaction ":title"', + 'new_recurring_transaction' => 'Nová opakující se transakce', + 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', + 'do_nothing' => 'Jen vytvořit transakci', + 'skip_transaction' => 'Přeskočit opakovanost', + 'jump_to_friday' => 'Namísto toho vytvořit transakci v předchozí pátek', + 'jump_to_monday' => 'Namísto toho vytvořit transakci v předchozí pondělí', + 'will_jump_friday' => 'Bude vytvořeno v pátek namísto víkendů.', + 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', + 'except_weekends' => 'Vyjma výkendů', + 'recurrence_deleted' => 'Recurring transaction ":title" deleted', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Zůstatek (:currency)', - 'box_spent_in_currency' => 'Utraceno (:currency)', - 'box_earned_in_currency' => 'Vyděláno (:currency)', - 'box_budgeted_in_currency' => 'Rozpočet (:currency)', - 'box_bill_paid_in_currency' => 'Zaplacené účty (:currency)', - 'box_bill_unpaid_in_currency' => 'Nezaplacené účty (:currency)', - 'box_left_to_spend_in_currency' => 'Zbývá k utracení (:currency)', - 'box_net_worth_in_currency' => 'Čisté jmění (:currency)', - 'box_spend_per_day' => 'Zbývá pro denní útratu: :amount', + 'box_balance_in_currency' => 'Zůstatek (:currency)', + 'box_spent_in_currency' => 'Utraceno (:currency)', + 'box_earned_in_currency' => 'Vyděláno (:currency)', + 'box_budgeted_in_currency' => 'Rozpočet (:currency)', + 'box_bill_paid_in_currency' => 'Zaplacené účty (:currency)', + 'box_bill_unpaid_in_currency' => 'Nezaplacené účty (:currency)', + 'box_left_to_spend_in_currency' => 'Zbývá k utracení (:currency)', + 'box_net_worth_in_currency' => 'Čisté jmění (:currency)', + 'box_spend_per_day' => 'Zbývá pro denní útratu: :amount', // debug page - 'debug_page' => 'Ladící stránka', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Ladící stránka', + 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', + 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', + 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', // object groups - 'object_groups_menu_bar' => 'Skupiny', - 'object_groups_page_title' => 'Skupiny', - 'object_groups_breadcrumb' => 'Skupiny', - 'object_groups_index' => 'Přehled', - 'object_groups' => 'Skupiny', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Název', - 'edit_object_group' => 'Upravit skupinu „:title“', - 'delete_object_group' => 'Odstranit skupinu „:title“', - 'update_object_group' => 'Aktualizovat skupinu', - 'updated_object_group' => 'Skupina „:title“ byla úspěšně aktualizována', - 'deleted_object_group' => 'Skupina „:title“ byla úspěšně odstraněna', - 'object_group' => 'Skupina', + 'object_groups_menu_bar' => 'Skupiny', + 'object_groups_page_title' => 'Skupiny', + 'object_groups_breadcrumb' => 'Skupiny', + 'object_groups_index' => 'Přehled', + 'object_groups' => 'Skupiny', + 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', + 'object_group_title' => 'Název', + 'edit_object_group' => 'Upravit skupinu „:title“', + 'delete_object_group' => 'Odstranit skupinu „:title“', + 'update_object_group' => 'Aktualizovat skupinu', + 'updated_object_group' => 'Skupina „:title“ byla úspěšně aktualizována', + 'deleted_object_group' => 'Skupina „:title“ byla úspěšně odstraněna', + 'object_group' => 'Skupina', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/cs_CZ/form.php b/resources/lang/cs_CZ/form.php index 4e990fe15c..5d6eaf3ac1 100644 --- a/resources/lang/cs_CZ/form.php +++ b/resources/lang/cs_CZ/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Název banky', - 'bank_balance' => 'Zůstatek', - 'savings_balance' => 'Zůstatek úspor', - 'credit_card_limit' => 'Limit kreditní karty', - 'automatch' => 'Hledat shodu automaticky', - 'skip' => 'Přeskočit', - 'enabled' => 'Zapnuto', - 'name' => 'Název', - 'active' => 'Aktivní', - 'amount_min' => 'Minimální částka', - 'amount_max' => 'Maximální částka', - 'match' => 'Shody', - 'strict' => 'Striktní režim', - 'repeat_freq' => 'Opakuje se', - 'object_group' => 'Skupina', - 'location' => 'Údaje o poloze', - 'update_channel' => 'Kanál aktualizací', - 'currency_id' => 'Měna', - 'transaction_currency_id' => 'Měna', - 'auto_budget_currency_id' => 'Měna', - 'external_ip' => 'Externí IP adresa vašeho serveru', - 'attachments' => 'Přílohy', - 'BIC' => 'BIC', - 'verify_password' => 'Ověřit odolnost hesla', - 'source_account' => 'Zdrojový účet', - 'destination_account' => 'Cílový účet', - 'asset_destination_account' => 'Cílový účet', - 'include_net_worth' => 'Zahrnout do čistého jmění', - 'asset_source_account' => 'Zdrojový účet', - 'journal_description' => 'Popis', - 'note' => 'Poznámky', - 'currency' => 'Měna', - 'account_id' => 'Účet aktiv', - 'budget_id' => 'Rozpočet', - 'bill_id' => 'Účet', - 'opening_balance' => 'Počáteční zůstatek', - 'tagMode' => 'Režim štítku', - 'virtual_balance' => 'Virtuální zůstatek', + 'bank_name' => 'Název banky', + 'bank_balance' => 'Zůstatek', + 'savings_balance' => 'Zůstatek úspor', + 'credit_card_limit' => 'Limit kreditní karty', + 'automatch' => 'Hledat shodu automaticky', + 'skip' => 'Přeskočit', + 'enabled' => 'Zapnuto', + 'name' => 'Název', + 'active' => 'Aktivní', + 'amount_min' => 'Minimální částka', + 'amount_max' => 'Maximální částka', + 'match' => 'Shody', + 'strict' => 'Striktní režim', + 'repeat_freq' => 'Opakuje se', + 'object_group' => 'Skupina', + 'location' => 'Údaje o poloze', + 'update_channel' => 'Kanál aktualizací', + 'currency_id' => 'Měna', + 'transaction_currency_id' => 'Měna', + 'auto_budget_currency_id' => 'Měna', + 'external_ip' => 'Externí IP adresa vašeho serveru', + 'attachments' => 'Přílohy', + 'BIC' => 'BIC', + 'verify_password' => 'Ověřit odolnost hesla', + 'source_account' => 'Zdrojový účet', + 'destination_account' => 'Cílový účet', + 'asset_destination_account' => 'Cílový účet', + 'include_net_worth' => 'Zahrnout do čistého jmění', + 'asset_source_account' => 'Zdrojový účet', + 'journal_description' => 'Popis', + 'note' => 'Poznámky', + 'currency' => 'Měna', + 'account_id' => 'Účet aktiv', + 'budget_id' => 'Rozpočet', + 'bill_id' => 'Účet', + 'opening_balance' => 'Počáteční zůstatek', + 'tagMode' => 'Režim štítku', + 'virtual_balance' => 'Virtuální zůstatek', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Cílová částka', 'account_role' => 'Role účtu', 'opening_balance_date' => 'Datum počátečního zůstatku', @@ -147,11 +145,11 @@ return [ 'start_date' => 'Začátek rozsahu', 'end_date' => 'Konec rozsahu', 'enddate' => 'Datum ukončení', - 'move_rules_before_delete' => 'Rule group', + 'move_rules_before_delete' => 'Skupina pravidel', 'start' => 'Začátek rozsahu', 'end' => 'Konec rozsahu', 'delete_account' => 'Smazat účet „:name“', - 'delete_webhook' => 'Delete webhook ":title"', + 'delete_webhook' => 'Smazat webhook ":title"', 'delete_bill' => 'Smazán účet „:name“', 'delete_budget' => 'Smazat rozpočet „:name“', 'delete_category' => 'Smazat kategorii „:name“', @@ -172,7 +170,7 @@ return [ 'object_group_areYouSure' => 'Jste si jisti, že chcete odstranit skupinu s názvem „:title“?', 'ruleGroup_areYouSure' => 'Opravdu chcete odstranit skupinu pravidel s názvem „:title“?', 'budget_areYouSure' => 'Jste si jisti, že chcete odstranit rozpočet s názvem „:name“?', - 'webhook_areYouSure' => 'Are you sure you want to delete the webhook named ":title"?', + 'webhook_areYouSure' => 'Jste si jistí, že chcete smazat webhook zvaný ":title"?', 'category_areYouSure' => 'Jste si jisti, že chcete odstranit kategorii s názvem „:name“?', 'recurring_areYouSure' => 'Jste si jisti, že chcete odstranit opakovanou transakci s názvem „:title“?', 'currency_areYouSure' => 'Jste si jisti, že chcete odstranit měnu s názvem „:name“?', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Jste si jisti, že chcete odstranit transakci popsanou „:description“?', 'mass_journal_are_you_sure' => 'Jste si jisti, že chcete odstranit tyto transakce?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Jste si jisti, že chcete odstranit štítek „:tag“?', 'journal_link_areYouSure' => 'Jste si jisti, že chcete odstranit provázání mezi :source a :destination?', 'linkType_areYouSure' => 'Jste si jisti, že chcete odstranit typ provázání „:name“ (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Skladba', - // admin 'domain' => 'Doména', 'single_user_mode' => 'Vypnout možnost registrace uživatelů', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS účet', 'local_account' => 'Účet Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Od data', - 'to_date' => 'Do data', - 'due_date' => 'Datum splatnosti', - 'payment_date' => 'Datum zaplacení', - 'invoice_date' => 'Datum vystavení', - 'internal_reference' => 'Interní reference', - 'inward' => 'Vnitřní popis', - 'outward' => 'Vnější popis', - 'rule_group_id' => 'Skupina pravidel', - 'transaction_description' => 'Popis transakce', - 'first_date' => 'První datum', - 'transaction_type' => 'Typ transakce', - 'repeat_until' => 'Opakovat do data', - 'recurring_description' => 'Popis opakující se transakce', - 'repetition_type' => 'Typ opakování', - 'foreign_currency_id' => 'Zahraniční měna', - 'repetition_end' => 'Opakování končí', - 'repetitions' => 'Opakování', - 'calendar' => 'Kalendář', - 'weekend' => 'Víkend', - 'client_secret' => 'Tajný klíč klienta', - 'withdrawal_destination_id' => 'Cílový účet', - 'deposit_source_id' => 'Zdrojový účet', - 'expected_on' => 'Očekáváno v', - 'paid' => 'Zaplaceno', - 'auto_budget_type' => 'Automatický rozpočet', - 'auto_budget_amount' => 'Částka automatického rozpočtu', - 'auto_budget_period' => 'Období automatického rozpočtu', - 'collected' => 'Shromážděno', - 'submitted' => 'Odesláno', - 'key' => 'Klíč', - 'value' => 'Obsah záznamu', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Od data', + 'to_date' => 'Do data', + 'due_date' => 'Datum splatnosti', + 'payment_date' => 'Datum zaplacení', + 'invoice_date' => 'Datum vystavení', + 'internal_reference' => 'Interní reference', + 'inward' => 'Vnitřní popis', + 'outward' => 'Vnější popis', + 'rule_group_id' => 'Skupina pravidel', + 'transaction_description' => 'Popis transakce', + 'first_date' => 'První datum', + 'transaction_type' => 'Typ transakce', + 'repeat_until' => 'Opakovat do data', + 'recurring_description' => 'Popis opakující se transakce', + 'repetition_type' => 'Typ opakování', + 'foreign_currency_id' => 'Zahraniční měna', + 'repetition_end' => 'Opakování končí', + 'repetitions' => 'Opakování', + 'calendar' => 'Kalendář', + 'weekend' => 'Víkend', + 'client_secret' => 'Tajný klíč klienta', + 'withdrawal_destination_id' => 'Cílový účet', + 'deposit_source_id' => 'Zdrojový účet', + 'expected_on' => 'Očekáváno v', + 'paid' => 'Zaplaceno', + 'auto_budget_type' => 'Automatický rozpočet', + 'auto_budget_amount' => 'Částka automatického rozpočtu', + 'auto_budget_period' => 'Období automatického rozpočtu', + 'collected' => 'Shromážděno', + 'submitted' => 'Odesláno', + 'key' => 'Klíč', + 'value' => 'Obsah záznamu', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Spouštěč', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/cs_CZ/intro.php b/resources/lang/cs_CZ/intro.php index a47acd1557..79a525c7fb 100644 --- a/resources/lang/cs_CZ/intro.php +++ b/resources/lang/cs_CZ/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Vítejte na titulní stránce Firefly III. Věnujte čas projití se tímto úvodem, abyste se dozvěděli, jak Firefly III funguje.', - 'index_accounts-chart' => 'Tento graf zobrazuje stávající zůstatky vašich majetkových účtů. Jaké účty se zde mají zobrazovat lze nastavit v předvolbách.', - 'index_box_out_holder' => 'Tato malá oblast a ty další vedle něho podávají rychlý přehled vaší finanční situace.', - 'index_help' => 'Pokud budete potřebovat nápovědu ke stránce nebo formuláři, klikněte na toto tlačítko.', - 'index_outro' => 'Většina stránek Firefly III začíná krátkou prohlídkou, jako je tato. Obraťte se na mně, pokud máte dotazy nebo komentáře. Ať poslouží!', - 'index_sidebar-toggle' => 'Nabídku pod touto ikonou použijte pro vytváření nových transakcí, účtů a ostatní věcí.', - 'index_cash_account' => 'Toto jsou doposud vytvořené účty. Hotovostní účet můžete použít pro sledování výdajů v hotovosti, ale není to pochopitelně povinné.', + 'index_intro' => 'Vítejte na titulní stránce Firefly III. Věnujte čas projití se tímto úvodem, abyste se dozvěděli, jak Firefly III funguje.', + 'index_accounts-chart' => 'Tento graf zobrazuje stávající zůstatky vašich majetkových účtů. Jaké účty se zde mají zobrazovat lze nastavit v předvolbách.', + 'index_box_out_holder' => 'Tato malá oblast a ty další vedle něho podávají rychlý přehled vaší finanční situace.', + 'index_help' => 'Pokud budete potřebovat nápovědu ke stránce nebo formuláři, klikněte na toto tlačítko.', + 'index_outro' => 'Většina stránek Firefly III začíná krátkou prohlídkou, jako je tato. Obraťte se na mně, pokud máte dotazy nebo komentáře. Ať poslouží!', + 'index_sidebar-toggle' => 'Nabídku pod touto ikonou použijte pro vytváření nových transakcí, účtů a ostatní věcí.', + 'index_cash_account' => 'Toto jsou doposud vytvořené účty. Hotovostní účet můžete použít pro sledování výdajů v hotovosti, ale není to pochopitelně povinné.', // transactions - 'transactions_create_basic_info' => 'Zadejte základní informace o vaší transakci. Zdroj, destinace, datum a popis.', - 'transactions_create_amount_info' => 'Zadejte částku transakce. V případě potřeby budou pole automaticky aktualizována pro informace o zahraniční měně.', - 'transactions_create_optional_info' => 'Všechna tato pole jsou nepovinná. Přidáním metadat se ale vaše transakce lépe organizují.', - 'transactions_create_split' => 'Pokud chcete transakci rozdělit, přidejte další rozdělení s tímto tlačítkem', + 'transactions_create_basic_info' => 'Zadejte základní informace o vaší transakci. Zdroj, destinace, datum a popis.', + 'transactions_create_amount_info' => 'Zadejte částku transakce. V případě potřeby budou pole automaticky aktualizována pro informace o zahraniční měně.', + 'transactions_create_optional_info' => 'Všechna tato pole jsou nepovinná. Přidáním metadat se ale vaše transakce lépe organizují.', + 'transactions_create_split' => 'Pokud chcete transakci rozdělit, přidejte další rozdělení s tímto tlačítkem', // create account: - 'accounts_create_iban' => 'Zadejte u svých účtů platný IBAN identifikátor. To by v budoucnu mohlo velmi ulehčit import dat.', - 'accounts_create_asset_opening_balance' => 'Majetkové účty mohou mít „počáteční zůstatek“, označující začátek historie tohoto účtu ve Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III podporuje vícero měn. Majetkové účty mají jednu hlavní měnu, kterou je třeba nastavit zde.', - 'accounts_create_asset_virtual' => 'Někdy se může hodit dát svému účtu virtuální zůstatek: extra částku, vždy přičítanou nebo odečítanou od stávajícího zůstatku.', + 'accounts_create_iban' => 'Zadejte u svých účtů platný IBAN identifikátor. To by v budoucnu mohlo velmi ulehčit import dat.', + 'accounts_create_asset_opening_balance' => 'Majetkové účty mohou mít „počáteční zůstatek“, označující začátek historie tohoto účtu ve Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III podporuje vícero měn. Majetkové účty mají jednu hlavní měnu, kterou je třeba nastavit zde.', + 'accounts_create_asset_virtual' => 'Někdy se může hodit dát svému účtu virtuální zůstatek: extra částku, vždy přičítanou nebo odečítanou od stávajícího zůstatku.', // budgets index - 'budgets_index_intro' => 'Rozpočty slouží ke správě vašich financí a tvoří jednu z hlavních funkcí Firefly III.', - 'budgets_index_set_budget' => 'Nastavte celkový rozpočet pro každé z období a Firefly III vám sdělí, pokud jste vyčerpali všechny dostupné peníze.', - 'budgets_index_see_expenses_bar' => 'Utracené peníze budou zvolna plnit tento pruh.', - 'budgets_index_navigate_periods' => 'Procházejte obdobími a jednoduše nastavujte rozpočty dopředu.', - 'budgets_index_new_budget' => 'Vytvářejte nové rozpočty, jak uznáte za vhodné.', - 'budgets_index_list_of_budgets' => 'Použijte tuto tabulku k nastavení částek pro každý rozpočet a zjistěte, jak na tom jste.', - 'budgets_index_outro' => 'Pokud se chcete dozvědět více o tvorbě rozpočtů, klikněte na ikonu nápovědy v pravém horním rohu.', + 'budgets_index_intro' => 'Rozpočty slouží ke správě vašich financí a tvoří jednu z hlavních funkcí Firefly III.', + 'budgets_index_see_expenses_bar' => 'Utracené peníze budou zvolna plnit tento pruh.', + 'budgets_index_navigate_periods' => 'Procházejte obdobími a jednoduše nastavujte rozpočty dopředu.', + 'budgets_index_new_budget' => 'Vytvářejte nové rozpočty, jak uznáte za vhodné.', + 'budgets_index_list_of_budgets' => 'Použijte tuto tabulku k nastavení částek pro každý rozpočet a zjistěte, jak na tom jste.', + 'budgets_index_outro' => 'Pokud se chcete dozvědět více o tvorbě rozpočtů, klikněte na ikonu nápovědy v pravém horním rohu.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Pomocí těchto přehledů získáte podrobné informace o svých financích.', - 'reports_index_inputReportType' => 'Vyberte typ přehledu. Podívejte se na stránky nápovědy a zjistěte, co vám každý přehled ukazuje.', - 'reports_index_inputAccountsSelect' => 'Můžete vynechávat nebo zahrnovat majetkové účty, jak potřebujete.', - 'reports_index_inputDateRange' => 'Vybrané časové období je zcela na vás: od jednoho dne do deseti let.', - 'reports_index_extra-options-box' => 'Podle toho, jaký výkaz jste vybrali, je zde možné vybrat další filtry a volby. Při změně typu výkazu sledujte tuto oblast.', + 'reports_index_intro' => 'Pomocí těchto přehledů získáte podrobné informace o svých financích.', + 'reports_index_inputReportType' => 'Vyberte typ přehledu. Podívejte se na stránky nápovědy a zjistěte, co vám každý přehled ukazuje.', + 'reports_index_inputAccountsSelect' => 'Můžete vynechávat nebo zahrnovat majetkové účty, jak potřebujete.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Podle toho, jaký výkaz jste vybrali, je zde možné vybrat další filtry a volby. Při změně typu výkazu sledujte tuto oblast.', // reports (reports) - 'reports_report_default_intro' => 'Tento výkaz vám podá rychlý a podrobný přehled vašich financí. Pokud chcete vidět něco jiného, neváhejte se na mne obrátit!', - 'reports_report_audit_intro' => 'Tento výkaz vám podá podrobný vhled do vašich majetkových účtů.', - 'reports_report_audit_optionsBox' => 'Pomocí těchto zaškrtávacích kolonek zobrazujte nebo skrývejte sloupce, které vás (ne)zajímají.', + 'reports_report_default_intro' => 'Tento výkaz vám podá rychlý a podrobný přehled vašich financí. Pokud chcete vidět něco jiného, neváhejte se na mne obrátit!', + 'reports_report_audit_intro' => 'Tento výkaz vám podá podrobný vhled do vašich majetkových účtů.', + 'reports_report_audit_optionsBox' => 'Pomocí těchto zaškrtávacích kolonek zobrazujte nebo skrývejte sloupce, které vás (ne)zajímají.', - 'reports_report_category_intro' => 'Tato sestava vám podá vhled do jedné nebo více kategorií.', - 'reports_report_category_pieCharts' => 'Tyto grafy vám podají vhled do výdajů a příjmů pro jednotlivé kategorie nebo účty.', - 'reports_report_category_incomeAndExpensesChart' => 'Tento graf zobrazuje vaše náklady a příjmy v jednotlivých kategoriích.', + 'reports_report_category_intro' => 'Tato sestava vám podá vhled do jedné nebo více kategorií.', + 'reports_report_category_pieCharts' => 'Tyto grafy vám podají vhled do výdajů a příjmů pro jednotlivé kategorie nebo účty.', + 'reports_report_category_incomeAndExpensesChart' => 'Tento graf zobrazuje vaše náklady a příjmy v jednotlivých kategoriích.', - 'reports_report_tag_intro' => 'Tato sestava vám podává vhled do jednoho nebo více štítků.', - 'reports_report_tag_pieCharts' => 'Tyto grafy vám podávají vhled do nákladů a příjmů pro jednotlivé štítky, účty, kategorie nebo rozpočty.', - 'reports_report_tag_incomeAndExpensesChart' => 'Tento graf zobrazuje vaše výdaje a příjmy pro každý štítek.', + 'reports_report_tag_intro' => 'Tato sestava vám podává vhled do jednoho nebo více štítků.', + 'reports_report_tag_pieCharts' => 'Tyto grafy vám podávají vhled do nákladů a příjmů pro jednotlivé štítky, účty, kategorie nebo rozpočty.', + 'reports_report_tag_incomeAndExpensesChart' => 'Tento graf zobrazuje vaše výdaje a příjmy pro každý štítek.', 'reports_report_budget_intro' => 'Tato sestava vám dává vhled do jednoho nebo více rozpočtů.', 'reports_report_budget_pieCharts' => 'Tyto grafy vám podají vhled do výdajů pro jednotlivé rozpočty nebo účty.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Vedle tohoto ukazatele postupu se nachází dvě tlačítka (+ a -) pro přidání nebo odebrání peněz z každé z pokladniček.', 'piggy-banks_index_accountStatus' => 'Pro každý majetkový účet s alespoň jednou pokladničkou je v této tabulce vypsán stav.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Co je vašim cílem? Nová pohovka, fotoaparát, rezerva pro nečekané výdaje?', 'piggy-banks_create_date' => 'Pro pokladničku je možné nastavit cílové datum nebo termín.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Faktury používejte pro sledování částek, které máte v každém z období zaplatit. Jedná se výdaje jako nájem, pojištění nebo splátky hypotéky.', 'bills_create_name' => 'Zadejte výstižný název, jako „Nájem“ nebo „Životní pojištění“.', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Vyberte nejnižší a nejvyšší částku pro tuto fakturu.', 'bills_create_repeat_freq_holder' => 'Většina plateb se opakuje měsíčně, ale je zde možné nastavit i jinou frekvenci.', 'bills_create_skip_holder' => 'Pokud se platba opakuje každé dva týdny, kolonka „přeskočit“ by měla být nastavená na „1“, aby byl vynechán každý druhý týden.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Toto tlačítko slouží ke zobrazení transakcí, které odpovídají pravidlu.', 'rules_create_actions' => 'Nastavte tolik akcí, kolik chcete.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Další volby jsou k dispozici v kartách.', diff --git a/resources/lang/cs_CZ/list.php b/resources/lang/cs_CZ/list.php index f463c7f444..2b5ab9b992 100644 --- a/resources/lang/cs_CZ/list.php +++ b/resources/lang/cs_CZ/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Tlačítka', - 'icon' => 'Ikona', - 'id' => 'ID', - 'create_date' => 'Vytvořeno', - 'update_date' => 'Aktualizováno', - 'updated_at' => 'Aktualizováno', - 'balance_before' => 'Zůstatek před', - 'balance_after' => 'Zůstatek po', - 'name' => 'Jméno', - 'role' => 'Role', - 'currentBalance' => 'Aktuální zůstatek', - 'linked_to_rules' => 'Příslušná pravidla', - 'active' => 'Aktivní?', - 'percentage' => '%', - 'recurring_transaction' => 'Opakované transakce', - 'next_due' => 'Příští splatnost', - 'transaction_type' => 'Typ', - 'lastActivity' => 'Poslední aktivita', - 'balanceDiff' => 'Rozdíl zůstatku', - 'other_meta_data' => 'Ostatní metadata', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Typ účtu', - 'created_at' => 'Vytvořeno', - 'account' => 'Účet', - 'external_url' => 'External URL', - 'matchingAmount' => 'Částka', - 'destination' => 'Cíl', - 'source' => 'Zdroj', - 'next_expected_match' => 'Další očekávaná shoda', - 'automatch' => 'Automatické hledání shody?', + 'buttons' => 'Tlačítka', + 'icon' => 'Ikona', + 'id' => 'ID', + 'create_date' => 'Vytvořeno', + 'update_date' => 'Aktualizováno', + 'updated_at' => 'Aktualizováno', + 'balance_before' => 'Zůstatek před', + 'balance_after' => 'Zůstatek po', + 'name' => 'Jméno', + 'role' => 'Role', + 'currentBalance' => 'Aktuální zůstatek', + 'linked_to_rules' => 'Příslušná pravidla', + 'active' => 'Aktivní?', + 'percentage' => '%', + 'recurring_transaction' => 'Opakované transakce', + 'next_due' => 'Příští splatnost', + 'transaction_type' => 'Typ', + 'lastActivity' => 'Poslední aktivita', + 'balanceDiff' => 'Rozdíl zůstatku', + 'other_meta_data' => 'Ostatní metadata', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => 'Typ účtu', + 'created_at' => 'Vytvořeno', + 'account' => 'Účet', + 'external_url' => 'External URL', + 'matchingAmount' => 'Částka', + 'destination' => 'Cíl', + 'source' => 'Zdroj', + 'next_expected_match' => 'Další očekávaná shoda', + 'automatch' => 'Automatické hledání shody?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Opakuje se', 'description' => 'Popis', 'amount' => 'Částka', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Účet s bunq', 'file_name' => 'Název souboru', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Velikost souboru', - 'file_type' => 'Typ souboru', - 'attached_to' => 'Připojeno k', - 'file_exists' => 'Soubor existuje', - 'spectre_bank' => 'Banka', - 'spectre_last_use' => 'Minulé přihlášení', - 'spectre_status' => 'Stav', - 'bunq_payment_id' => 'ID platby bunq', - 'repetitions' => 'Opakování', - 'title' => 'Název', - 'transaction_s' => 'Transakce', - 'field' => 'Kolonka', - 'value' => 'Hodnota', - 'interest' => 'Úrok', - 'interest_period' => 'Úrokové období', - 'liability_type' => 'Typ závazku', - 'liability_direction' => 'Směr závazku', - 'end_date' => 'Datum ukončení', - 'payment_info' => 'Informace o platbě', - 'expected_info' => 'Další očekávaná transakce', - 'start_date' => 'Datum zahájení', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Velikost souboru', + 'file_type' => 'Typ souboru', + 'attached_to' => 'Připojeno k', + 'file_exists' => 'Soubor existuje', + 'spectre_bank' => 'Banka', + 'spectre_last_use' => 'Minulé přihlášení', + 'spectre_status' => 'Stav', + 'bunq_payment_id' => 'ID platby bunq', + 'repetitions' => 'Opakování', + 'title' => 'Název', + 'transaction_s' => 'Transakce', + 'field' => 'Kolonka', + 'value' => 'Hodnota', + 'interest' => 'Úrok', + 'interest_period' => 'Úrokové období', + 'liability_type' => 'Typ závazku', + 'liability_direction' => 'Směr závazku', + 'end_date' => 'Datum ukončení', + 'payment_info' => 'Informace o platbě', + 'expected_info' => 'Další očekávaná transakce', + 'start_date' => 'Datum zahájení', + 'trigger' => 'Trigger', + 'response' => 'Response', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/cs_CZ/pagination.php b/resources/lang/cs_CZ/pagination.php index c57dab52e9..bd6c9335d2 100644 --- a/resources/lang/cs_CZ/pagination.php +++ b/resources/lang/cs_CZ/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/cs_CZ/passwords.php b/resources/lang/cs_CZ/passwords.php index cbc478c454..b8b96b4fc7 100644 --- a/resources/lang/cs_CZ/passwords.php +++ b/resources/lang/cs_CZ/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/cs_CZ/rules.php b/resources/lang/cs_CZ/rules.php index 389fb335ff..c034df02ae 100644 --- a/resources/lang/cs_CZ/rules.php +++ b/resources/lang/cs_CZ/rules.php @@ -1,6 +1,5 @@ 'Action ":action", present in rule ":rule", could not be applied to transaction #:group: :error', - 'find_or_create_tag_failed' => 'Could not find or create tag ":tag"', - 'tag_already_added' => 'Tag ":tag" is already linked to this transaction', - 'inspect_transaction' => 'Inspect transaction ":title" @ Firefly III', - 'inspect_rule' => 'Inspect rule ":title" @ Firefly III', - 'journal_other_user' => 'This transaction doesn\'t belong to the user', - 'no_such_journal' => 'This transaction doesn\'t exist', - 'journal_already_no_budget' => 'This transaction has no budget, so it cannot be removed', - 'journal_already_no_category' => 'This transaction had no category, so it cannot be removed', - 'journal_already_no_notes' => 'This transaction had no notes, so they cannot be removed', - 'journal_not_found' => 'Firefly III can\'t find the requested transaction', - 'split_group' => 'Firefly III cannot execute this action on a transaction with multiple splits', - 'is_already_withdrawal' => 'This transaction is already a withdrawal', - 'is_already_deposit' => 'This transaction is already a deposit', - 'is_already_transfer' => 'This transaction is already a transfer', - 'is_not_transfer' => 'This transaction is not a transfer', - 'complex_error' => 'Something complicated went wrong. Sorry about that. Please inspect the logs of Firefly III', - 'no_valid_opposing' => 'Conversion failed because there is no valid account named ":account"', - 'new_notes_empty' => 'The notes to be set are empty', - 'unsupported_transaction_type_withdrawal' => 'Firefly III cannot convert a ":type" to a withdrawal', - 'unsupported_transaction_type_deposit' => 'Firefly III cannot convert a ":type" to a deposit', - 'unsupported_transaction_type_transfer' => 'Firefly III cannot convert a ":type" to a transfer', - 'already_has_source_asset' => 'This transaction already has ":name" as the source asset account', - 'already_has_destination_asset' => 'This transaction already has ":name" as the destination asset account', - 'already_has_destination' => 'This transaction already has ":name" as the destination account', - 'already_has_source' => 'This transaction already has ":name" as the source account', + 'main_message' => 'Akce ":action", přítomná v pravidle ":rule", nelze použít na transakci #:group: :error', + 'find_or_create_tag_failed' => 'Nelze najít nebo vytvořit štítek ":tag"', + 'tag_already_added' => 'Štítek ":tag" je již propojen s touto transakcí', + 'inspect_transaction' => 'Prozkoumat transakci ":title" @ Firefly III', + 'inspect_rule' => 'Prozkoumat pravidlo ":title" @ Firefly III', + 'journal_other_user' => 'Tato transakce nepatří uživateli', + 'no_such_journal' => 'Tato transakce neexistuje', + 'journal_already_no_budget' => 'Tato transakce nemá žádný rozpočet, proto nemůže být odstraněna', + 'journal_already_no_category' => 'Tato transakce nemá žádnou kategorii, proto nemůže být odstraněna', + 'journal_already_no_notes' => 'Tato transakce neměla žádné poznámky, takže nemůže být odstraněna', + 'journal_not_found' => 'Firefly III nemůže najít požadovanou transakci', + 'split_group' => 'Firefly III nemůže provést tuto akci na transakci rozdělenou na více částí', + 'is_already_withdrawal' => 'Tato transakce už je výběrem', + 'is_already_deposit' => 'Tato transakce už je vkladem', + 'is_already_transfer' => 'Tato transakce už je převodem', + 'is_not_transfer' => 'Tato transakce není převod', + 'complex_error' => 'Něco se pokazilo. Omlouváme se, prosím zkontrolujte logy Firefly III', + 'no_valid_opposing' => 'Převod se nezdařil, protože neexistuje žádný platný účet s názvem ":account"', + 'new_notes_empty' => 'Poznámky, které mají být nastaveny, jsou prázdné', + 'unsupported_transaction_type_withdrawal' => 'Firefly III nemůže převést ":type" na výběr', + 'unsupported_transaction_type_deposit' => 'Firefly III nemůže konvertovat ":type" na vklad', + 'unsupported_transaction_type_transfer' => 'Firefly III nemůže konvertovat ":type" na převod', + 'already_has_source_asset' => 'Tato transakce již má ":name" jako zdrojový majetkový účet', + 'already_has_destination_asset' => 'Tato transakce již má ":name" jako cílový majetkový účet', + 'already_has_destination' => 'Tato transakce již má ":name" jako cílový účet', + 'already_has_source' => 'Tato transakce již má ":name" jako zdrojový účet', 'already_linked_to_subscription' => 'The transaction is already linked to subscription ":name"', - 'already_linked_to_category' => 'The transaction is already linked to category ":name"', - 'already_linked_to_budget' => 'The transaction is already linked to budget ":name"', + 'already_linked_to_category' => 'Transakce je již propojena s kategorií ":name"', + 'already_linked_to_budget' => 'Transakce je již propojena s rozpočtem ":name"', 'cannot_find_subscription' => 'Firefly III can\'t find subscription ":name"', - 'no_notes_to_move' => 'The transaction has no notes to move to the description field', - 'no_tags_to_remove' => 'The transaction has no tags to remove', - 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', - 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', - 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', - 'cannot_find_source_transaction' => 'Firefly III can\'t find the source transaction', - 'cannot_find_destination_transaction' => 'Firefly III can\'t find the destination transaction', - 'cannot_find_source_transaction_account' => 'Firefly III can\'t find the source transaction account', - 'cannot_find_destination_transaction_account' => 'Firefly III can\'t find the destination transaction account', - 'cannot_find_piggy' => 'Firefly III can\'t find a piggy bank named ":name"', - 'no_link_piggy' => 'This transaction\'s accounts are not linked to the piggy bank, so no action will be taken', - 'cannot_unlink_tag' => 'Tag ":tag" isn\'t linked to this transaction', - 'cannot_find_budget' => 'Firefly III can\'t find budget ":name"', - 'cannot_find_category' => 'Firefly III can\'t find category ":name"', - 'cannot_set_budget' => 'Firefly III can\'t set budget ":name" to a transaction of type ":type"', + 'no_notes_to_move' => 'Transakce nemá žádné poznámky k přesunutí do pole popisu', + 'no_tags_to_remove' => 'Transakce nemá žádné štítky k odstranění', + 'not_withdrawal' => 'Transakce není výběrem', + 'not_deposit' => 'Transakce není vklad', + 'cannot_find_tag' => 'Firefly III nemůže najít štítek ":tag"', + 'cannot_find_asset' => 'Firefly III nemůže najít majetkový účet ":name"', + 'cannot_find_accounts' => 'Firefly III nemůže najít zdrojový nebo cílový účet', + 'cannot_find_source_transaction' => 'Firefly III nemůže najít zdrojovou transakci', + 'cannot_find_destination_transaction' => 'Firefly III nemůže najít cílovou transakci', + 'cannot_find_source_transaction_account' => 'Firefly III nemůže najít zdrojový transakční účet', + 'cannot_find_destination_transaction_account' => 'Firefly III nemůže najít cílový účet transakce', + 'cannot_find_piggy' => 'Firefly III nemůže najít pokladničku s názvem ":name"', + 'no_link_piggy' => 'Účty této transakce nejsou propojeny s pokladničkou, takže žádná akce nebude provedena', + 'cannot_unlink_tag' => 'Štítek ":tag" není propojen s touto transakcí', + 'cannot_find_budget' => 'Firefly III nemůže najít rozpočet ":name"', + 'cannot_find_category' => 'Firefly III nemůže najít kategorii ":name"', + 'cannot_set_budget' => 'Firefly III nemůže nastavit rozpočet ":name" na transakci typu ":type"', ]; diff --git a/resources/lang/cs_CZ/validation.php b/resources/lang/cs_CZ/validation.php index 02349a1678..d72b0fe447 100644 --- a/resources/lang/cs_CZ/validation.php +++ b/resources/lang/cs_CZ/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Váš dotaz obsahuje účty, které mají různá nastavení měny, což není povoleno.', - 'iban' => 'Toto není platný IBAN.', - 'zero_or_more' => 'Hodnota nemůže být záporná.', - 'date_or_time' => 'Je třeba, aby hodnota byla platné datum nebo čas (ve formátu dle normy ISO 8601).', - 'source_equals_destination' => 'Zdrojový účet je zároveň i cílový.', - 'unique_account_number_for_user' => 'Zdá se, že toto číslo účtu se již používá.', - 'unique_iban_for_user' => 'Vypadá to, že tento IBAN kód se již používá.', - 'deleted_user' => 'Z bezpečnostních důvodů se nemůžete registrovat pomocí této emailové adresy.', - 'rule_trigger_value' => 'Tato hodnota není platná pro označený spouštěč.', - 'rule_action_value' => 'Tato hodnota je neplatná pro vybranou akci.', - 'file_already_attached' => 'Nahraný soubor ":name" je již připojen k tomuto objektu.', - 'file_attached' => 'Soubor „:name“ úspěšně nahrán.', - 'must_exist' => 'Identifikátor v kolonce :attribute v databázi neexistuje.', - 'all_accounts_equal' => 'Je třeba, aby všechny účty v této kolonce byly stejné.', - 'group_title_mandatory' => 'Pokud je zde více než jedna transakce, je název skupiny třeba vyplnit.', - 'transaction_types_equal' => 'Je třeba, aby všechna rozdělení byla stejného typu.', - 'invalid_transaction_type' => 'Neplatný typ transakce.', - 'invalid_selection' => 'Váš výběr je neplatný.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Potřebujete alespoň jednu transakci.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Potřebujete alespoň jedno opakování.', - 'require_repeat_until' => 'Vyžaduje buď několik opakování nebo datum ukončení (repeat_until). Ne obojí.', - 'require_currency_info' => 'Obsah tohoto pole je neplatný bez informace o měně.', - 'not_transfer_account' => 'Tento účet není účet, který lze použít pro převody.', - 'require_currency_amount' => 'Obsah tohoto pole je neplatný bez informace o měně.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Popis transakce nesmí být stejný jako globální popis.', - 'file_invalid_mime' => 'Soubor ":name" je typu ":mime", který není schválen pro nahrání.', - 'file_too_large' => 'Soubor ":name" je příliš velký.', - 'belongs_to_user' => 'Hodnota :attribute není známa.', - 'accepted' => 'Je potřeba potvrdit :attribute.', - 'bic' => 'Toto není platný BIC.', - 'at_least_one_trigger' => 'Je třeba, aby pravidlo mělo alespoň jeden spouštěč.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'Pravidlo musí obsahovat alespoň jednu akci.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'Data nejsou v platném base64 kódování.', - 'model_id_invalid' => 'Zdá se, že dané ID je neplatné pro tento model.', - 'less' => ':attribute musí být menší než 10.000.000', - 'active_url' => ':attribute není platná adresa URL.', - 'after' => ':attribute nemůže být dříve než :date.', - 'date_after' => 'Počáteční datum musí být před datem ukončení.', - 'alpha' => ':attribute může obsahovat pouze písmena.', - 'alpha_dash' => ':attribute může obsahovat pouze písmena, čísla a pomlčky.', - 'alpha_num' => ':attribute může obsahovat pouze písmena a čísla.', - 'array' => ':attribute musí být pole.', - 'unique_for_user' => 'Položka s tímto :attribute již existuje.', - 'before' => ':attribute nemůže být později než :date.', - 'unique_object_for_user' => 'Tento název je již používán.', - 'unique_account_for_user' => 'Tento název účtu je již používán.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Váš dotaz obsahuje účty, které mají různá nastavení měny, což není povoleno.', + 'iban' => 'Toto není platný IBAN.', + 'zero_or_more' => 'Hodnota nemůže být záporná.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Je třeba, aby hodnota byla platné datum nebo čas (ve formátu dle normy ISO 8601).', + 'source_equals_destination' => 'Zdrojový účet je zároveň i cílový.', + 'unique_account_number_for_user' => 'Zdá se, že toto číslo účtu se již používá.', + 'unique_iban_for_user' => 'Vypadá to, že tento IBAN kód se již používá.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Z bezpečnostních důvodů se nemůžete registrovat pomocí této emailové adresy.', + 'rule_trigger_value' => 'Tato hodnota není platná pro označený spouštěč.', + 'rule_action_value' => 'Tato hodnota je neplatná pro vybranou akci.', + 'file_already_attached' => 'Nahraný soubor ":name" je již připojen k tomuto objektu.', + 'file_attached' => 'Soubor „:name“ úspěšně nahrán.', + 'must_exist' => 'Identifikátor v kolonce :attribute v databázi neexistuje.', + 'all_accounts_equal' => 'Je třeba, aby všechny účty v této kolonce byly stejné.', + 'group_title_mandatory' => 'Pokud je zde více než jedna transakce, je název skupiny třeba vyplnit.', + 'transaction_types_equal' => 'Je třeba, aby všechna rozdělení byla stejného typu.', + 'invalid_transaction_type' => 'Neplatný typ transakce.', + 'invalid_selection' => 'Váš výběr je neplatný.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Potřebujete alespoň jednu transakci.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Potřebujete alespoň jedno opakování.', + 'require_repeat_until' => 'Vyžaduje buď několik opakování nebo datum ukončení (repeat_until). Ne obojí.', + 'require_currency_info' => 'Obsah tohoto pole je neplatný bez informace o měně.', + 'not_transfer_account' => 'Tento účet není účet, který lze použít pro převody.', + 'require_currency_amount' => 'Obsah tohoto pole je neplatný bez informace o měně.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'Popis transakce nesmí být stejný jako globální popis.', + 'file_invalid_mime' => 'Soubor ":name" je typu ":mime", který není schválen pro nahrání.', + 'file_too_large' => 'Soubor ":name" je příliš velký.', + 'belongs_to_user' => 'Hodnota :attribute není známa.', + 'accepted' => 'Je potřeba potvrdit :attribute.', + 'bic' => 'Toto není platný BIC.', + 'at_least_one_trigger' => 'Je třeba, aby pravidlo mělo alespoň jeden spouštěč.', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => 'Pravidlo musí obsahovat alespoň jednu akci.', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => 'Data nejsou v platném base64 kódování.', + 'model_id_invalid' => 'Zdá se, že dané ID je neplatné pro tento model.', + 'less' => ':attribute musí být menší než 10.000.000', + 'active_url' => ':attribute není platná adresa URL.', + 'after' => ':attribute nemůže být dříve než :date.', + 'date_after' => 'Počáteční datum musí být před datem ukončení.', + 'alpha' => ':attribute může obsahovat pouze písmena.', + 'alpha_dash' => ':attribute může obsahovat pouze písmena, čísla a pomlčky.', + 'alpha_num' => ':attribute může obsahovat pouze písmena a čísla.', + 'array' => ':attribute musí být pole.', + 'unique_for_user' => 'Položka s tímto :attribute již existuje.', + 'before' => ':attribute nemůže být později než :date.', + 'unique_object_for_user' => 'Tento název je již používán.', + 'unique_account_for_user' => 'Tento název účtu je již používán.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute musí být v rozmezí :min a :max.', + 'between.file' => ':attribute musí být v rozmezí :min a :max kilobajtů.', + 'between.string' => ':attribute musí mít délku v rozmezí :min a :max znaků.', + 'between.array' => ':attribute musí mít mezi :min a :max položkami.', + 'boolean' => ':attribute musí mít hodnotu pravda nebo nepravda.', + 'confirmed' => 'Potvrzení :attribute se neshoduje.', + 'date' => ':attribute není platným datem.', + 'date_format' => ':attribute neodpovídá formátu :format.', + 'different' => ':attribute a :other se musí lišit.', + 'digits' => ':attribute musí obsahovat :digits číslic.', + 'digits_between' => ':attribute musí být v rozmezí :min a :max číslic.', + 'email' => ':attribute musí být platná e-mailová adresa.', + 'filled' => 'Pole :attribute nesmí být prázdné.', + 'exists' => 'Vybraný :attribute je neplatný.', + 'image' => 'Je třeba, aby :attribute byl obrázek.', + 'in' => 'Vybraný :attribute není platný.', + 'integer' => 'Je třeba, aby :attribute byl celé číslo.', + 'ip' => 'Je třeba, aby :attribute byla platná IP adresa.', + 'json' => 'Je třeba, aby :attribute byl platný JSON řetězec.', + 'max.numeric' => ':attribute nemůže být vyšší než :max.', + 'max.file' => ':attribute nesmí být větší než :max kilobajtů.', + 'max.string' => ':attribute nesmí být větší než :max znaků.', + 'max.array' => ':attribute nesmí obsahovat více než :max položek.', + 'mimes' => ':attribute musí být soubor typu: :values.', + 'min.numeric' => 'Je třeba, aby :attribute bylo alespoň :min.', + 'lte.numeric' => 'Je třeba, aby :attribute byl nižší nebo roven :value.', + 'min.file' => 'Je třeba, aby :attribute byl alespoň :min kilobajtů.', + 'min.string' => 'Je třeba, aby :attribute bylo alespoň :min znaků dlouhé.', + 'min.array' => ':attribute musí obsahovat alespoň :min položek.', + 'not_in' => 'Vybraný :attribute není platný.', + 'numeric' => 'Je třeba, aby :attribute byl číslo.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Je třeba, aby částka v hlavní měně bylo číslo.', + 'numeric_destination' => 'Je třeba, aby cílová částka bylo číslo.', + 'numeric_source' => 'Je třeba, aby zdrojová částka bylo číslo.', + 'regex' => 'Formát :attribute není platný.', + 'required' => 'Kolonku :attribute je třeba vyplnit.', + 'required_if' => ':attribute je vyžadováno pokud :other je :value.', + 'required_unless' => ':attribute je vyžadováno pokud :other není v :values.', + 'required_with' => ':attribute musí být vyplněno pokud :values je zvoleno.', + 'required_with_all' => ':attribute musí být vyplněno pokud :values je zvoleno.', + 'required_without' => ':attribute musí být vyplněno pokud :values není zvoleno.', + 'required_without_all' => ':attribute musí být vyplněno pokud žádná :values není zvoleno.', + 'same' => ':attribute a :other se musí shodovat.', + 'size.numeric' => 'Je třeba, aby :attribute byl :size.', + 'amount_min_over_max' => 'Minimální částka nemůže být vyšší než maximální částka.', + 'size.file' => ':attribute musí mít :size kilobajtů.', + 'size.string' => ':attribute musí mít :size znaků.', + 'size.array' => ':attribute musí obsahovat :size položek.', + 'unique' => ':attribute již byl použit.', + 'string' => 'Je třeba, aby :attribute byl řetězec.', + 'url' => 'Formát :attribute není platný.', + 'timezone' => 'Je třeba, aby :attribute byla platná zóna.', + '2fa_code' => 'Kolonka :attribute není platná.', + 'dimensions' => ':attribute nemá platné rozměry obrázku.', + 'distinct' => 'Kolonka :attribute má duplicitní hodnotu.', + 'file' => 'Je třeba, aby :attribute byl soubor.', + 'in_array' => 'Pole :attribute neexistuje v :other.', + 'present' => 'Je třeba, aby kolonka :attribute byla přítomna.', + 'amount_zero' => 'Celková částka nemůže být nula.', + 'current_target_amount' => 'Aktuální částka musí být menší než cílová částka.', + 'unique_piggy_bank_for_user' => 'Je třeba, aby se názvy pokladniček neopakovaly.', + 'unique_object_group' => 'Název skupiny musí být jedinečný', + 'starts_with' => 'Hodnota musí začínat :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Oba účty musí být stejného typu', + 'same_account_currency' => 'Oba účty musí mít stejné nastavení měny', - 'between.numeric' => ':attribute musí být v rozmezí :min a :max.', - 'between.file' => ':attribute musí být v rozmezí :min a :max kilobajtů.', - 'between.string' => ':attribute musí mít délku v rozmezí :min a :max znaků.', - 'between.array' => ':attribute musí mít mezi :min a :max položkami.', - 'boolean' => ':attribute musí mít hodnotu pravda nebo nepravda.', - 'confirmed' => 'Potvrzení :attribute se neshoduje.', - 'date' => ':attribute není platným datem.', - 'date_format' => ':attribute neodpovídá formátu :format.', - 'different' => ':attribute a :other se musí lišit.', - 'digits' => ':attribute musí obsahovat :digits číslic.', - 'digits_between' => ':attribute musí být v rozmezí :min a :max číslic.', - 'email' => ':attribute musí být platná e-mailová adresa.', - 'filled' => 'Pole :attribute nesmí být prázdné.', - 'exists' => 'Vybraný :attribute je neplatný.', - 'image' => 'Je třeba, aby :attribute byl obrázek.', - 'in' => 'Vybraný :attribute není platný.', - 'integer' => 'Je třeba, aby :attribute byl celé číslo.', - 'ip' => 'Je třeba, aby :attribute byla platná IP adresa.', - 'json' => 'Je třeba, aby :attribute byl platný JSON řetězec.', - 'max.numeric' => ':attribute nemůže být vyšší než :max.', - 'max.file' => ':attribute nesmí být větší než :max kilobajtů.', - 'max.string' => ':attribute nesmí být větší než :max znaků.', - 'max.array' => ':attribute nesmí obsahovat více než :max položek.', - 'mimes' => ':attribute musí být soubor typu: :values.', - 'min.numeric' => 'Je třeba, aby :attribute bylo alespoň :min.', - 'lte.numeric' => 'Je třeba, aby :attribute byl nižší nebo roven :value.', - 'min.file' => 'Je třeba, aby :attribute byl alespoň :min kilobajtů.', - 'min.string' => 'Je třeba, aby :attribute bylo alespoň :min znaků dlouhé.', - 'min.array' => ':attribute musí obsahovat alespoň :min položek.', - 'not_in' => 'Vybraný :attribute není platný.', - 'numeric' => 'Je třeba, aby :attribute byl číslo.', - 'numeric_native' => 'Je třeba, aby částka v hlavní měně bylo číslo.', - 'numeric_destination' => 'Je třeba, aby cílová částka bylo číslo.', - 'numeric_source' => 'Je třeba, aby zdrojová částka bylo číslo.', - 'regex' => 'Formát :attribute není platný.', - 'required' => 'Kolonku :attribute je třeba vyplnit.', - 'required_if' => ':attribute je vyžadováno pokud :other je :value.', - 'required_unless' => ':attribute je vyžadováno pokud :other není v :values.', - 'required_with' => ':attribute musí být vyplněno pokud :values je zvoleno.', - 'required_with_all' => ':attribute musí být vyplněno pokud :values je zvoleno.', - 'required_without' => ':attribute musí být vyplněno pokud :values není zvoleno.', - 'required_without_all' => ':attribute musí být vyplněno pokud žádná :values není zvoleno.', - 'same' => ':attribute a :other se musí shodovat.', - 'size.numeric' => 'Je třeba, aby :attribute byl :size.', - 'amount_min_over_max' => 'Minimální částka nemůže být vyšší než maximální částka.', - 'size.file' => ':attribute musí mít :size kilobajtů.', - 'size.string' => ':attribute musí mít :size znaků.', - 'size.array' => ':attribute musí obsahovat :size položek.', - 'unique' => ':attribute již byl použit.', - 'string' => 'Je třeba, aby :attribute byl řetězec.', - 'url' => 'Formát :attribute není platný.', - 'timezone' => 'Je třeba, aby :attribute byla platná zóna.', - '2fa_code' => 'Kolonka :attribute není platná.', - 'dimensions' => ':attribute nemá platné rozměry obrázku.', - 'distinct' => 'Kolonka :attribute má duplicitní hodnotu.', - 'file' => 'Je třeba, aby :attribute byl soubor.', - 'in_array' => 'Pole :attribute neexistuje v :other.', - 'present' => 'Je třeba, aby kolonka :attribute byla přítomna.', - 'amount_zero' => 'Celková částka nemůže být nula.', - 'current_target_amount' => 'Aktuální částka musí být menší než cílová částka.', - 'unique_piggy_bank_for_user' => 'Je třeba, aby se názvy pokladniček neopakovaly.', - 'unique_object_group' => 'Název skupiny musí být jedinečný', - 'starts_with' => 'Hodnota musí začínat :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Oba účty musí být stejného typu', - 'same_account_currency' => 'Oba účty musí mít stejné nastavení měny', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Toto není bezpečné heslo. Zkuste jiné. Více se dozvíte na http://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Neplatný typ opakování pro opakované transakce.', - 'valid_recurrence_rep_moment' => 'Neplatné opakování v tento moment tohoto typu opakování.', - 'invalid_account_info' => 'Neplatná informace o účtu.', - 'attributes' => [ + 'secure_password' => 'Toto není bezpečné heslo. Zkuste jiné. Více se dozvíte na http://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Neplatný typ opakování pro opakované transakce.', + 'valid_recurrence_rep_moment' => 'Neplatné opakování v tento moment tohoto typu opakování.', + 'invalid_account_info' => 'Neplatná informace o účtu.', + 'attributes' => [ 'email' => 'e-mailová adresa', 'description' => 'popis', 'amount' => 'částka', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Pro pokračování je potřeba získat platné ID zdrojového účtu a/nebo platný název zdrojového účtu.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Při hledání ID „:id“ nebo jména „:name“ nelze najít platný cílový účet.', + 'withdrawal_source_need_data' => 'Pro pokračování je potřeba získat platné ID zdrojového účtu a/nebo platný název zdrojového účtu.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Při hledání ID „:id“ nebo jména „:name“ nelze najít platný cílový účet.', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Pro pokračování je potřeba získat platné ID zdrojového účtu a/nebo platný název zdrojového účtu.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Při hledání ID „:id“ nebo jména „:name“ nelze najít platný cílový účet.', - 'deposit_dest_wrong_type' => 'Předložený cílový účet není správného typu.', + 'deposit_source_need_data' => 'Pro pokračování je potřeba získat platné ID zdrojového účtu a/nebo platný název zdrojového účtu.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Při hledání ID „:id“ nebo jména „:name“ nelze najít platný cílový účet.', + 'deposit_dest_wrong_type' => 'Předložený cílový účet není správného typu.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Pro pokračování je potřeba získat platné ID zdrojového účtu a/nebo platný název zdrojového účtu.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Při hledání ID „:id“ nebo jména „:name“ nelze najít platný cílový účet.', + 'need_id_in_edit' => 'Každé rozdělení musí mít transakci_journal_id (platné ID nebo 0).', - 'transfer_source_need_data' => 'Pro pokračování je potřeba získat platné ID zdrojového účtu a/nebo platný název zdrojového účtu.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Při hledání ID „:id“ nebo jména „:name“ nelze najít platný cílový účet.', - 'need_id_in_edit' => 'Každé rozdělení musí mít transakci_journal_id (platné ID nebo 0).', + 'ob_source_need_data' => 'Pro pokračování je potřeba získat platné ID zdrojového účtu a/nebo platný název zdrojového účtu.', + 'lc_source_need_data' => 'Pro pokračování je třeba získat platné ID zdrojového účtu.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Při hledání ID „:id“ nebo jména „:name“ nelze najít platný cílový účet.', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Pro pokračování je potřeba získat platné ID zdrojového účtu a/nebo platný název zdrojového účtu.', - 'lc_source_need_data' => 'Pro pokračování je třeba získat platné ID zdrojového účtu.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Při hledání ID „:id“ nebo jména „:name“ nelze najít platný cílový účet.', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Tento účet nelze použít jako zdrojový účet.', + 'generic_invalid_destination' => 'Tento účet nelze použít jako cílový účet.', - 'generic_invalid_source' => 'Tento účet nelze použít jako zdrojový účet.', - 'generic_invalid_destination' => 'Tento účet nelze použít jako cílový účet.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'Je třeba, aby :attribute byl větší nebo roven :value.', - 'gt.numeric' => 'Je třeba, aby :attribute byl větší než :value.', - 'gte.file' => 'Hodnota :attribute musí být větší nebo rovná :value kilobajtů.', - 'gte.string' => 'Hodnota :attribute musí být větší nebo rovná :value znaků.', - 'gte.array' => 'Hodnota :attribute musí obsahovat :value nebo víc položek.', + 'gte.numeric' => 'Je třeba, aby :attribute byl větší nebo roven :value.', + 'gt.numeric' => 'Je třeba, aby :attribute byl větší než :value.', + 'gte.file' => 'Hodnota :attribute musí být větší nebo rovná :value kilobajtů.', + 'gte.string' => 'Hodnota :attribute musí být větší nebo rovná :value znaků.', + 'gte.array' => 'Hodnota :attribute musí obsahovat :value nebo víc položek.', 'amount_required_for_auto_budget' => 'Částka je povinná.', 'auto_budget_amount_positive' => 'Částka musí být vyšší než nula.', + 'auto_budget_period_mandatory' => 'Období automatického rozpočtu je povinné.', // no access to administration: diff --git a/resources/lang/da_DK/api.php b/resources/lang/da_DK/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/da_DK/api.php +++ b/resources/lang/da_DK/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/da_DK/auth.php b/resources/lang/da_DK/auth.php index 225134e1d6..835c70d86e 100644 --- a/resources/lang/da_DK/auth.php +++ b/resources/lang/da_DK/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Forkert brugernavn eller adgangskode.', 'throttle' => 'For mange mislykkede loginforsøg. Prøv igen om :seconds seconds.', diff --git a/resources/lang/da_DK/breadcrumbs.php b/resources/lang/da_DK/breadcrumbs.php index 12e9862925..5361b498a4 100644 --- a/resources/lang/da_DK/breadcrumbs.php +++ b/resources/lang/da_DK/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Hjem', - 'budgets' => 'Budget', - 'subscriptions' => 'Abonnementer', - 'transactions' => 'Transaktioner', - 'title_expenses' => 'Udgifter', - 'title_withdrawal' => 'Udgifter', - 'title_revenue' => 'Indtægter / indkomster', - 'title_deposit' => 'Indtægter / indkomster', - 'title_transfer' => 'Overførsler', - 'title_transfers' => 'Overførsler', - 'edit_currency' => 'Rediger valuta ":name"', - 'delete_currency' => 'Slet valuta ":name"', - 'newPiggyBank' => 'Opret ny sparegris', - 'edit_piggyBank' => 'Rediger sparegris ":name"', - 'preferences' => 'Indstillinger', - 'profile' => 'Profil', - 'accounts' => 'Konti', - 'changePassword' => 'Skift din adgangskode', - 'change_email' => 'Skift din e-mail adresse', - 'bills' => 'Regninger', - 'newBill' => 'Ny regning', - 'edit_bill' => 'Rediger regning ":name"', - 'delete_bill' => 'Slet regning ":name"', - 'reports' => 'Rapporter', - 'search_result' => 'Søgeresultater for ":query"', - 'withdrawal_list' => 'Udgifter', - 'Withdrawal_list' => 'Udgifter', - 'deposit_list' => 'Omsætning, indkomst og indskud', - 'transfer_list' => 'Overførsler', - 'transfers_list' => 'Overførsler', + 'home' => 'Hjem', + 'budgets' => 'Budget', + 'subscriptions' => 'Abonnementer', + 'transactions' => 'Transaktioner', + 'title_expenses' => 'Udgifter', + 'title_withdrawal' => 'Udgifter', + 'title_revenue' => 'Indtægter / indkomster', + 'title_deposit' => 'Indtægter / indkomster', + 'title_transfer' => 'Overførsler', + 'title_transfers' => 'Overførsler', + 'edit_currency' => 'Rediger valuta ":name"', + 'delete_currency' => 'Slet valuta ":name"', + 'newPiggyBank' => 'Opret ny sparegris', + 'edit_piggyBank' => 'Rediger sparegris ":name"', + 'preferences' => 'Indstillinger', + 'profile' => 'Profil', + 'accounts' => 'Konti', + 'changePassword' => 'Skift din adgangskode', + 'change_email' => 'Skift din e-mail adresse', + 'bills' => 'Regninger', + 'newBill' => 'Ny regning', + 'edit_bill' => 'Rediger regning ":name"', + 'delete_bill' => 'Slet regning ":name"', + 'reports' => 'Rapporter', + 'search_result' => 'Søgeresultater for ":query"', + 'withdrawal_list' => 'Udgifter', + 'Withdrawal_list' => 'Udgifter', + 'deposit_list' => 'Omsætning, indkomst og indskud', + 'transfer_list' => 'Overførsler', + 'transfers_list' => 'Overførsler', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Afstemninger', 'create_withdrawal' => 'Opret ny hævning', 'create_deposit' => 'Opret ny indtægt', diff --git a/resources/lang/da_DK/components.php b/resources/lang/da_DK/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/da_DK/components.php +++ b/resources/lang/da_DK/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/da_DK/config.php b/resources/lang/da_DK/config.php index 1b31f86dcf..717724f9ee 100644 --- a/resources/lang/da_DK/config.php +++ b/resources/lang/da_DK/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'da', - 'locale' => 'da, Danish, da_DK.utf8, da_DK.UTF8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'da', + 'locale' => 'da, Danish, da_DK.utf8, da_DK.UTF8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMMM, YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'Do MMMM, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D MMMM, YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'Do MMMM, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, ÅÅÅÅ', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, ÅÅÅÅ', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'D MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'D MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'Do MMMM, YYYY @ HH:mm:ss', + 'date_time_fns' => 'MMMM gør, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'Do MMMM, YYYY @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] U, GGGG', + 'week_in_year_fns' => "'Uge' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Uge' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'kvt.' Q, yyyy", - 'half_year_fns' => "'H{half}', yyyyy", - 'dow_1' => 'Mandag', - 'dow_2' => 'Tirsdag', - 'dow_3' => 'Onsdag', - 'dow_4' => 'Torsdag', - 'dow_5' => 'Fredag', - 'dow_6' => 'Lørdag', - 'dow_7' => 'Søndag', + 'quarter_fns' => "'kvt.' Q, yyyy", + 'half_year_fns' => "'H{half}', yyyyy", + 'dow_1' => 'Mandag', + 'dow_2' => 'Tirsdag', + 'dow_3' => 'Onsdag', + 'dow_4' => 'Torsdag', + 'dow_5' => 'Fredag', + 'dow_6' => 'Lørdag', + 'dow_7' => 'Søndag', ]; /* diff --git a/resources/lang/da_DK/demo.php b/resources/lang/da_DK/demo.php index e20935714d..73a1c6be2b 100644 --- a/resources/lang/da_DK/demo.php +++ b/resources/lang/da_DK/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/da_DK/email.php b/resources/lang/da_DK/email.php index 7dcaf2a143..8d799df246 100644 --- a/resources/lang/da_DK/email.php +++ b/resources/lang/da_DK/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'En testbesked fra din Firefly III-installation', 'admin_test_body' => 'Dette er en test besked fra din Firefly III installation. Den blev sendt til :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,14 +55,13 @@ return [ * */ - // invite 'invitation_created_subject' => 'En invitation er blevet oprettet', - 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', + 'invitation_created_body' => 'Admin bruger ":email" oprettede en brugerinvitation, som kan bruges af hvem, der står bag e-mail-adressen ":invitee". Invitationen vil være gyldig i 48 timer.', 'invite_user_subject' => 'Du er blevet inviteret til at oprette en Firefly III-konto.', - 'invitation_introduction' => 'You\'ve been invited to create a Firefly III account on **:host**. Firefly III is a personal, self-hosted, private personal finance manager. All the cool kids are using it.', - 'invitation_invited_by' => 'You\'ve been invited by ":admin" and this invitation was sent to ":invitee". That\'s you, right?', - 'invitation_url' => 'The invitation is valid for 48 hours and can be redeemed by surfing to [Firefly III](:url). Enjoy!', + 'invitation_introduction' => 'Du er blevet inviteret til at oprette en Firefly III-konto på **:host**. Firefly III er en personlig, self-hosted, privat personlig finanschef. Alle de seje børn bruger det.', + 'invitation_invited_by' => 'Du er blevet inviteret af ":admin" og denne invitation blev sendt til ":invitee". Det er dig, ikke?', + 'invitation_url' => 'Invitationen er gyldig i 48 timer og kan indløses ved at surfe på [Firefly III](:url). God fornøjelse!', // new IP 'login_from_new_ip' => 'Nyt login på Firefly III', @@ -77,22 +75,22 @@ return [ // access token created 'access_token_created_subject' => 'Et nyt adgangstoken blev oprettet', 'access_token_created_body' => 'Nogen (forhåbentlig dig) har netop oprettet en ny Firefly III API Access Token til din brugerkonto.', - 'access_token_created_explanation' => 'With this token, they can access **all** of your financial records through the Firefly III API.', - 'access_token_created_revoke' => 'If this wasn\'t you, please revoke this token as soon as possible at :url', + 'access_token_created_explanation' => 'Med denne klient kan de gennem Firefly II APIen få adgang til **alle** dine regnskaber og financielle optegnelser.', + 'access_token_created_revoke' => 'Hvis det ikke var dig så venligst annuller denne token så hurtigt som muligt på :url', // registered 'registered_subject' => 'Velkommen til Firefly III!', - 'registered_subject_admin' => 'A new user has registered', - 'admin_new_user_registered' => 'A new user has registered. User **:email** was given user ID #:id.', + 'registered_subject_admin' => 'En ny bruger er registreret', + 'admin_new_user_registered' => 'En ny bruger er registreret. Bruger **:email** fik bruger-ID #:id.', 'registered_welcome' => 'Velkomme til [Firefly III](:address). Dine registrering er gennemført, og denne email tjener til at bekræftige dette. :-)', - 'registered_pw' => 'If you have forgotten your password already, please reset it using [the password reset tool](:address/password/reset).', + 'registered_pw' => 'Hvis du allerede har glemt din adgangskode, kan du nulstille den ved at benytte [adgangskodenulstillingsværktøjet](:address/password/reset).', 'registered_help' => 'Der er et hjælpe-ikon i øverste højre hjørne af hver side. Hvis du har brug for hjælp, kan du klikke på det!', 'registered_closing' => 'God fornøjelse!', 'registered_firefly_iii_link' => 'Firefly III:', 'registered_pw_reset_link' => 'Nulstilling af adgangskode:', 'registered_doc_link' => 'Dokumentation:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,32 +101,31 @@ return [ * */ - // new version - 'new_version_email_subject' => 'A new Firefly III version is available', + 'new_version_email_subject' => 'En ny Firefly III-version er tilgængelig', // email change 'email_change_subject' => 'Din Firefly III email adresse er ændret', 'email_change_body_to_new' => 'Du eller nogen med adgang til din Firefly III-konto har ændret din e-mailadresse. Hvis du ikke forventede denne besked, bedes du ignorere og slette den.', - 'email_change_body_to_old' => 'You or somebody with access to your Firefly III account has changed your email address. If you did not expect this to happen, you **must** follow the "undo"-link below to protect your account!', + 'email_change_body_to_old' => 'Du, eller nogen med adgang til din Firefly III-konto, har ændret din e-mailadresse. Hvis ikke dette er forventet, **skal** du klikke på nedenstående "fortryd"-link for at beskytte din konto!', 'email_change_ignore' => 'Hvis du har igangsat denne ændring, kan du roligt ignorere denne besked.', 'email_change_old' => 'Den forrige email adresse var: :email', - 'email_change_old_strong' => 'The old email address was: **:email**', + 'email_change_old_strong' => 'Den forrige email adresse var: **:email**', 'email_change_new' => 'Den nye email adresse er: :email', - 'email_change_new_strong' => 'The new email address is: **:email**', + 'email_change_new_strong' => 'Den nye email adresse er: **:email**', 'email_change_instructions' => 'Du kan ikke bruge Firefly III, før du bekræfter denne ændring. Følg linket nedenfor for at gøre det.', 'email_change_undo_link' => 'For at fortryde ændringen, følg dette link:', // OAuth token created 'oauth_created_subject' => 'En ny OAuth klient er oprettet', - 'oauth_created_body' => 'Somebody (hopefully you) just created a new Firefly III API OAuth Client for your user account. It\'s labeled ":name" and has callback URL `:url`.', - 'oauth_created_explanation' => 'With this client, they can access **all** of your financial records through the Firefly III API.', - 'oauth_created_undo' => 'If this wasn\'t you, please revoke this client as soon as possible at `:url`', + 'oauth_created_body' => 'Nogen (forhåbentligt dig) har netop oprettet en ny Firefly III API OAuth klient til din brugerkonto. Den er mærket ":name" og har callback URL`:url`.', + 'oauth_created_explanation' => 'Med denne klient kan de gennem Firefly II APIen få adgang til **alle** dine regnskaber og financielle optegnelser.', + 'oauth_created_undo' => 'Hvis ikke det var dig, bedes du annullere denne klient så hurtigt som muligt på `:url`', // reset password 'reset_pw_subject' => 'Anmodning om nulstilling af din adgangskode', 'reset_pw_instructions' => 'Nogen forsøgte at nulstille din adgangskode. Hvis det var dig, bedes du følge linket nedenfor for at gøre det.', - 'reset_pw_warning' => '**PLEASE** verify that the link actually goes to the Firefly III you expect it to go!', + 'reset_pw_warning' => '**VENLIGST** bekræft, at linket faktisk fører til den Firefly III du forventer, at det skal føre til!', // error 'error_subject' => 'Der er opstået en fejl i Firefly III', @@ -145,9 +142,10 @@ return [ 'error_github_html' => 'Hvis du foretrækker det, kan du også rapportere et nyt problem på GitHub.', 'error_github_text' => 'Hvis du foretrækker det, kan du også rapportere et nyt problem på https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Den fulde stacktrace er nedenfor:', - 'error_headers' => 'The following headers may also be relevant:', + 'error_headers' => 'Følgende overskrifter kan også være relevante:', + 'error_post' => 'Dette blev indsendt af brugeren:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,22 +156,20 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III har oprettet en ny transaktion|Firefly III har oprettet :count nye transaktioner', 'new_journals_header' => 'Firefly III har oprettet en transaktion for dig. Du kan finde den i din Firefly III installation:|Firefly III har oprettet :count transaktioner for dig. Du kan finde dem i din Firefly III installation:', // bill warning - 'bill_warning_subject_end_date' => 'Your bill ":name" is due to end in :diff days', - 'bill_warning_subject_now_end_date' => 'Your bill ":name" is due to end TODAY', - 'bill_warning_subject_extension_date' => 'Your bill ":name" is due to be extended or cancelled in :diff days', - 'bill_warning_subject_now_extension_date' => 'Your bill ":name" is due to be extended or cancelled TODAY', - 'bill_warning_end_date' => 'Your bill **":name"** is due to end on :date. This moment will pass in about **:diff days**.', - 'bill_warning_extension_date' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass in about **:diff days**.', + 'bill_warning_subject_end_date' => 'Din regning ":name" udløber om :diff dage', + 'bill_warning_subject_now_end_date' => 'Din regning ":name" skal afsluttes I DAG', + 'bill_warning_subject_extension_date' => 'Din regning ":name" er sat til blive udskudt eller annulleret om :diff dage', + 'bill_warning_subject_now_extension_date' => 'Din regning ":name" er sat til at forlænges eller annulleres I DAG', + 'bill_warning_end_date' => 'Regningen **":name"** er sat til at stoppe den :date. Denne dato vil blive overskredet **:diff dage**.', + 'bill_warning_extension_date' => 'Regningen **":name"** er sat til at udskudt eller annuleret den :date. Denne dato vil blive overskredet om**:diff dage**.', 'bill_warning_end_date_zero' => 'Regningen **":name"** er sat til at stoppe den :date. Denne dato vil blive overskredet **idag!**', - 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', + 'bill_warning_extension_date_zero' => 'Regningen **":name"** er sat til at blive udskudt eller annuleret om :date. Denne dato vil blive overskrevet **I DAG!**', 'bill_warning_please_action' => 'Udfør venligt den krævede handling.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/da_DK/errors.php b/resources/lang/da_DK/errors.php index 3725068d78..45677b70bf 100644 --- a/resources/lang/da_DK/errors.php +++ b/resources/lang/da_DK/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack trace', 'more_info' => 'Yderligere information', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Der findes mere information i mappen storage/logs hvor du vil finde logfilerne. Hvis du kører Docker, brug docker logs -f [container].', - 'collect_info_more' => 'Du kan læse mere om indhentning af fejloplysninger i FAQ.', - 'github_help' => 'Få hjælp på GitHub', - 'github_instructions' => 'Du er mere end velkommen til at oprette en ny fejlmelding på GitHub.', - 'use_search' => 'Brug søgefeltet!', - 'include_info' => 'Inkludér informationen fra denne fejlfindingsside.', - 'tell_more' => 'Uddyb gerne mere end bare "det siger Hovsa!"', - 'include_logs' => 'Inkludér fejllogfiler (se ovenfor).', - 'what_did_you_do' => 'Fortæl os, hvad du lavede.', - 'offline_header' => 'Du er sandsynligvis offline', - 'offline_unreachable' => 'Firefly III er ikke tilgængelig. Din enhed er i øjeblikket offline, eller serveren fungerer ikke.', - 'offline_github' => 'Hvis du er sikker på, at både din enhed og serveren er online, skal du åbne en ticket på GitHub.', - + 'collect_info' => 'Der findes mere information i mappen storage/logs hvor du vil finde logfilerne. Hvis du kører Docker, brug docker logs -f [container].', + 'collect_info_more' => 'Du kan læse mere om indsamling af fejloplysninger i FAQ.', + 'github_help' => 'Få hjælp på GitHub', + 'github_instructions' => 'Du er mere end velkommen til at oprette en ny fejlmelding på GitHub.', + 'use_search' => 'Brug søgefeltet!', + 'include_info' => 'Inkludér informationen fra denne fejlfindingsside.', + 'tell_more' => 'Uddyb gerne mere end bare "det siger Hovsa!"', + 'include_logs' => 'Inkludér fejllogfiler (se ovenfor).', + 'what_did_you_do' => 'Fortæl os, hvad du lavede.', + 'offline_header' => 'Du er sandsynligvis offline', + 'offline_unreachable' => 'Firefly III er ikke tilgængelig. Din enhed er i øjeblikket offline, eller serveren fungerer ikke.', + 'offline_github' => 'Hvis du er sikker på, at både din enhed og serveren er online, skal du åbne en ticket på GitHub.', ]; diff --git a/resources/lang/da_DK/firefly.php b/resources/lang/da_DK/firefly.php index 84621269e8..308e4c6c3f 100644 --- a/resources/lang/da_DK/firefly.php +++ b/resources/lang/da_DK/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Luk', - 'actions' => 'Handlinger', - 'edit' => 'Rediger', - 'delete' => 'Slet', - 'split' => 'Opdel', - 'single_split' => 'Opdel', - 'clone' => 'Klon', - 'confirm_action' => 'Bekræft', - 'last_seven_days' => 'Sidste syv dage', - 'last_thirty_days' => 'Sidste tredive dage', - 'last_180_days' => 'Seneste 180 dage', - 'month_to_date' => 'Måned til dato', - 'year_to_date' => 'År til dato', - 'YTD' => 'ÅTD', - 'welcome_back' => 'Hvad spiller?', - 'everything' => 'Alting', - 'today' => 'i dag', - 'customRange' => 'Tilpasset interval', - 'date_range' => 'Dato interval', - 'apply' => 'Anvend', - 'select_date' => 'Vælg dato..', - 'cancel' => 'Annuller', - 'from' => 'Fra', - 'to' => 'Til', - 'structure' => 'Struktur', - 'help_translating' => 'Denne hjælpetekst er endnu ikke tilgængelig på dit sprog. Vil du hjælpe med at oversætte?', - 'showEverything' => 'Vis alt', - 'never' => 'Aldrig', - 'no_results_for_empty_search' => 'Din søgning var tom, så intet blev fundet.', - 'removed_amount' => 'Fjernede :amount', - 'added_amount' => 'Tilføjede :amount', - 'asset_account_role_help' => 'Ekstra indstillinger der opstår på baggrund af dit valg kan sættes senere.', - 'Opening balance' => 'Startsaldo', - 'create_new_stuff' => 'Opret nye ting', - 'new_withdrawal' => 'Ny hævning', - 'create_new_transaction' => 'Opret en ny transaktion', - 'sidebar_frontpage_create' => 'Opret', - 'new_transaction' => 'Ny overførsel', - 'no_rules_for_bill' => 'Denne regning er ikke associeret med nogle regler.', - 'go_to_asset_accounts' => 'Se dine aktiver', - 'go_to_budgets' => 'Gå til dine budgetter', - 'go_to_withdrawals' => 'Gå til dine udbetalinger', - 'clones_journal_x' => 'Denne transaktion er en klon af ":description" (#:id)', - 'go_to_categories' => 'Gå til dine kategorier', - 'go_to_bills' => 'Gå til dine regninger', - 'go_to_expense_accounts' => 'Se dine udgiftskonti', - 'go_to_revenue_accounts' => 'Se dine indkomstkonti', - 'go_to_piggies' => 'Gå til dine sparegrise', - 'new_deposit' => 'Ny deponering', - 'new_transfer' => 'Ny overførsel', - 'new_transfers' => 'Ny overførsel', - 'new_asset_account' => 'Ny aktivkonto', - 'new_expense_account' => 'Ny udgiftskonto', - 'new_revenue_account' => 'Ny indkomstkonto', - 'new_liabilities_account' => 'Ny passivkonto', - 'new_budget' => 'Nyt budget', - 'new_bill' => 'Ny regning', - 'block_account_logout' => 'Du er blevet logget ud. Blokerede konti kan ikke bruge denne side. Oprettede du dig med en gyldig e-mailadresse?', - 'flash_success' => 'Succes!', - 'flash_info' => 'Besked', - 'flash_warning' => 'Advarsel!', - 'flash_error' => 'Fejl!', - 'flash_danger' => 'Fare!', - 'flash_info_multiple' => 'Der er en besked|Der er :count beskeder', - 'flash_error_multiple' => 'Der er en fejl|Der er :count fejl', - 'net_worth' => 'Nettoformue', - 'help_for_this_page' => 'Hjælp til denne side', - 'help_for_this_page_body' => 'Du kan finde mere information om denne side i dokumentationen.', - 'two_factor_welcome' => 'Hej!', - 'two_factor_enter_code' => 'For at fortsætte, indtast venligst din to-faktor-godkendelseskode. Dit program vil generere den for dig.', - 'two_factor_code_here' => 'Indtast koden her', - 'two_factor_title' => 'Tofaktorgodkendelse', - 'authenticate' => 'Godkend', - 'two_factor_forgot_title' => 'Glemt totrinsbekræftelse', - 'two_factor_forgot' => 'Jeg har glemt min tofaktor-ting.', - 'two_factor_lost_header' => 'Glemt din totrinsbekræftelse?', - 'two_factor_lost_intro' => 'Hvis du også har glemt dine backupkoder, så er det sort uheld. Det er ikke noget, du kan fikse fra webinterfacet. Du har to muligheder.', - 'two_factor_lost_fix_self' => 'Hvis du kører din egen instans af Firefly III, læs dette indlæg i FAQ\'en for instruktioner.', - 'two_factor_lost_fix_owner' => 'Ellers, send en e-mail til sideejeren, :site_owner og spørg dem om at nulstille din tofaktorgodkendelse.', - 'mfa_backup_code' => 'Du har brugt en backupkode til at logge ind på Firefly III. Den kan ikke bruges igen, så streg den fra din liste.', - 'pref_two_factor_new_backup_codes' => 'Få nye backupkoder', - 'pref_two_factor_backup_code_count' => 'Du har :count gyldig backup kode.|Du har :count gyldige backup koder.', - '2fa_i_have_them' => 'Jeg gemte dem!', - 'warning_much_data' => ':days dages data kan tage et stykke tid at indlæse.', - 'registered' => 'Du er blevet succesfuldt oprettet!', - 'Default asset account' => 'Standard aktivkonto', - 'no_budget_pointer' => 'Det ser ud til, at du ikke har oprettet budgetter endnu. Du burde oprette nogle på budgetsiden. Budgetter kan hjælpe dig med at holde styr på udgifter.', - 'no_bill_pointer' => 'Du synes ikke at have nogen regninger endnu. Du bør oprette nogle på regninger-siden. Regninger kan hjælpe dig med at holde styr på udgifterne.', - 'Savings account' => 'Opsparingskonto', - 'Credit card' => 'Kreditkort', - 'source_accounts' => 'Kildekonto|Kildekonti', - 'destination_accounts' => 'Destinationskontoen|Destinationskonti', - 'user_id_is' => 'Dit brugerid er :user', - 'field_supports_markdown' => 'Dette felt undersøtter Markdown.', - 'need_more_help' => 'Hvis du har brug for mere hjælp til at bruge Firefly III, åbn venligst en sag på Github.', - 'reenable_intro_text' => 'Du kan også genaktivere introduktionsguiden.', - 'intro_boxes_after_refresh' => 'Introduktionsboksene vil kunne ses igen, når du genopfrisker siden.', - 'show_all_no_filter' => 'Vis alle transaktioner uden at gruppere dem efter dato.', - 'expenses_by_category' => 'Udgifter per kategori', - 'expenses_by_budget' => 'Udgifter per budget', - 'income_by_category' => 'Indkomst per kategori', - 'expenses_by_asset_account' => 'Udgifter per aktivkonto', - 'expenses_by_expense_account' => 'Udgifter per udgiftskonto', - 'cannot_redirect_to_account' => 'Firefly III kan ikke videresende dig til den korrekte side. Beklager.', - 'sum_of_expenses' => 'Sum af udgifter', - 'sum_of_income' => 'Sum af indkomst', - 'liabilities' => 'Gæld', - 'spent_in_specific_budget' => 'Brugt på budget ":budget"', - 'spent_in_specific_double' => 'Forbrug på konto ":account"', - 'earned_in_specific_double' => 'Optjent på konto ":account"', - 'source_account' => 'Kildekonto', - 'source_account_reconciliation' => 'Du kan ikke redigere kildekontoen på en afstemningstransaktion.', - 'destination_account' => 'Destinationskonto', - 'destination_account_reconciliation' => 'Du kan ikke redigere destinationskontoen på en afstemningstransaktion.', - 'sum_of_expenses_in_budget' => 'Total brugt på budget ":budget"', - 'left_in_budget_limit' => 'Resterende beløb i henhold til budgettet', - 'current_period' => 'Aktuel periode', - 'show_the_current_period_and_overview' => 'Vis den aktuelle periode og overblik', - 'pref_languages_locale' => 'For at et andet sprog end engelsk skal virke rigtigt, skal dit operativsystem være udstyret med den korrekte lokale-information. Hvis denne ikke er til stede, vil valutadata, datoer og beløb muligvis vises forkert.', - 'budget_in_period' => 'Alle transaktioner for budget ":name" mellem :start og :end i :currency', - 'chart_budget_in_period' => 'Diagram for alle transaktioner for budget ":name" mellem :start og :end i :currency', - 'chart_budget_in_period_only_currency' => 'Beløbet du budgetterede var i :currency, så dette diagram vil kun vise transaktioner i :currency.', - 'chart_account_in_period' => 'Diagram for alle transaktion for konto ":name" (:balance) mellem :start og :end', - 'chart_category_in_period' => 'Diagram for alle transaktion i kategori ":name" mellem :start og :end', - 'chart_category_all' => 'Diagram for alle transaktion i kategori ":name"', - 'clone_withdrawal' => 'Klon denne hævning', - 'clone_deposit' => 'Klon denne deponering', - 'clone_transfer' => 'Klon denne overførsel', - 'multi_select_no_selection' => 'Ingen valgt', - 'multi_select_select_all' => 'Vælg alle', - 'multi_select_n_selected' => 'valgt', - 'multi_select_all_selected' => 'Alt valgt', - 'multi_select_filter_placeholder' => 'Find..', - 'intro_next_label' => 'Næste', - 'intro_prev_label' => 'Forrige', - 'intro_skip_label' => 'Spring over', - 'intro_done_label' => 'Udført', - 'between_dates_breadcrumb' => 'Mellem :start og :end', - 'all_journals_without_budget' => 'Alle transaktion uden et budget', - 'journals_without_budget' => 'Transaktioner uden et budget', - 'all_journals_without_category' => 'Alle transaktion uden en kategori', - 'journals_without_category' => 'Transaktioner uden en kategori', - 'all_journals_for_account' => 'Alle transaktioner for konto :name', - 'chart_all_journals_for_account' => 'Diagram af alle transaktioner for konto :name', - 'journals_in_period_for_account' => 'Alle transaktioner for konto :name imellem :start og :end', - 'journals_in_period_for_account_js' => 'Alle transaktioner for konto {title} mellem {start} og {end}', - 'transferred' => 'Overført', - 'all_withdrawal' => 'Alle udgifter', - 'all_transactions' => 'Alle transaktioner', - 'title_withdrawal_between' => 'Alle udgifter imellem :start og :end', - 'all_deposit' => 'Alle indkomster', - 'title_deposit_between' => 'Alle indkomster imellem :start og :end', - 'all_transfers' => 'Alle overførsler', - 'title_transfers_between' => 'Alle overførsler imellem :start og :end', - 'all_transfer' => 'Alle overførsler', - 'all_journals_for_tag' => 'Alle overførsler for tag ":tag"', - 'title_transfer_between' => 'Alle overførsler imellem :start og :end', - 'all_journals_for_category' => 'Alle transaktioner for kategori :name', - 'all_journals_for_budget' => 'Alle transaktioner for budget :name', - 'chart_all_journals_for_budget' => 'Diagram over alle transaktioner for budget :name', - 'journals_in_period_for_category' => 'Alle transaktioner for kategori :name mellem :start og :end', - 'journals_in_period_for_tag' => 'Alle transaktioner for tag :tag mellem :start og :end', - 'not_available_demo_user' => 'Den funktion, du forsøger at få adgang til, er ikke tilgængelig for demobrugere.', - 'exchange_rate_instructions' => 'Aktivkonto "@name" tillader kun transaktioner i @native_currency. Hvis du ønsker at bruge @foreign_currency i stedet, så sørg for at beløbet i @native_currency også er registreret:', - 'transfer_exchange_rate_instructions' => 'Kildekonto "@source_name" tillader kun transaktioner i @source_currency. Destinationskonto "@dest_name" tillader kun transaktioner i @dest_currency. Du skal rigtigt angive det overførte beløb i begge valutaer.', - 'transaction_data' => 'Transaktionsdata', - 'invalid_server_configuration' => 'Ugyldig server konfiguration', - 'invalid_locale_settings' => 'Firefly III er ude af stand til at formattere pengebeløb, fordi din server mangler de nødvendige softwarepakker. Der findes instruktioner til at gøre dette.', - 'quickswitch' => 'Hurtigskift', - 'sign_in_to_start' => 'Log ind for at starte din session', - 'sign_in' => 'Log ind', - 'register_new_account' => 'Registrer en ny konto', - 'forgot_my_password' => 'Jeg har glemt min adgangskode', - 'problems_with_input' => 'Der var nogle problemer med din indtastning.', - 'reset_password' => 'Nulstil din adgangskode', - 'button_reset_password' => 'Nulstil adgangskode', - 'reset_button' => 'Nulstil', - 'want_to_login' => 'Jeg ønsker at logge ind', - 'login_page_title' => 'Log ind i Firefly III', - 'register_page_title' => 'Registrer hos Firefly III', - 'forgot_pw_page_title' => 'Glemt din adgangskode til Firefly III', - 'reset_pw_page_title' => 'Nulstil din adgangskode til Firefly III', - 'cannot_reset_demo_user' => 'Du kan ikke nulstille adgangskoden til demo-brugeren.', - 'no_att_demo_user' => 'Demo brugeren kan ikke uploade vedhæftede filer.', - 'button_register' => 'Registrér', - 'authorization' => 'Autorisation', - 'active_bills_only' => 'kun aktuelle regninger', - 'active_bills_only_total' => 'alle aktuelle regninger', - 'active_exp_bills_only' => 'kun aktuelle og forventede regninger', - 'active_exp_bills_only_total' => 'kun alle forventede og aktuelle regninger', - 'per_period_sum_1D' => 'Forventede daglige omkostninger', - 'per_period_sum_1W' => 'Forventede ugentlige omkostninger', - 'per_period_sum_1M' => 'Forventede månedlige omkostninger', - 'per_period_sum_3M' => 'Forventede kvartalsvise omkostninger', - 'per_period_sum_6M' => 'Forventede halvårlige omkostninger', - 'per_period_sum_1Y' => 'Forventede årlige omkostninger', - 'average_per_bill' => 'gennemsnit pr. regning', - 'expected_total' => 'forventet total', - 'reconciliation_account_name' => ':name afstemning (:currency)', - 'saved' => 'Gemt', - 'advanced_options' => 'Avancerede indstillinger', - 'advanced_options_explain' => 'Nogle sider i Firefly III har avancerede indstillinger der kan tilgås via denne knap. Denne side har ikke noget specielt her, men tjek de andre!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Luk', + 'actions' => 'Handlinger', + 'edit' => 'Rediger', + 'delete' => 'Slet', + 'split' => 'Opdel', + 'single_split' => 'Opdel', + 'clone' => 'Klon', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Bekræft', + 'last_seven_days' => 'Sidste syv dage', + 'last_thirty_days' => 'Sidste tredive dage', + 'last_180_days' => 'Seneste 180 dage', + 'month_to_date' => 'Måned til dato', + 'year_to_date' => 'År til dato', + 'YTD' => 'ÅTD', + 'welcome_back' => 'Hvad spiller?', + 'everything' => 'Alting', + 'today' => 'i dag', + 'customRange' => 'Tilpasset interval', + 'date_range' => 'Dato interval', + 'apply' => 'Anvend', + 'select_date' => 'Vælg dato..', + 'cancel' => 'Annuller', + 'from' => 'Fra', + 'to' => 'Til', + 'structure' => 'Struktur', + 'help_translating' => 'Denne hjælpetekst er endnu ikke tilgængelig på dit sprog. Vil du hjælpe med at oversætte?', + 'showEverything' => 'Vis alt', + 'never' => 'Aldrig', + 'no_results_for_empty_search' => 'Din søgning var tom, så intet blev fundet.', + 'removed_amount' => 'Fjernede :amount', + 'added_amount' => 'Tilføjede :amount', + 'asset_account_role_help' => 'Ekstra indstillinger der opstår på baggrund af dit valg kan sættes senere.', + 'Opening balance' => 'Startsaldo', + 'create_new_stuff' => 'Opret nye ting', + 'new_withdrawal' => 'Ny hævning', + 'create_new_transaction' => 'Opret en ny transaktion', + 'sidebar_frontpage_create' => 'Opret', + 'new_transaction' => 'Ny overførsel', + 'no_rules_for_bill' => 'Denne regning er ikke associeret med nogle regler.', + 'go_to_asset_accounts' => 'Se dine aktiver', + 'go_to_budgets' => 'Gå til dine budgetter', + 'go_to_withdrawals' => 'Gå til dine udbetalinger', + 'clones_journal_x' => 'Denne transaktion er en klon af ":description" (#:id)', + 'go_to_categories' => 'Gå til dine kategorier', + 'go_to_bills' => 'Gå til dine regninger', + 'go_to_expense_accounts' => 'Se dine udgiftskonti', + 'go_to_revenue_accounts' => 'Se dine indkomstkonti', + 'go_to_piggies' => 'Gå til dine sparegrise', + 'new_deposit' => 'Ny deponering', + 'new_transfer' => 'Ny overførsel', + 'new_transfers' => 'Ny overførsel', + 'new_asset_account' => 'Ny aktivkonto', + 'new_expense_account' => 'Ny udgiftskonto', + 'new_revenue_account' => 'Ny indkomstkonto', + 'new_liabilities_account' => 'Ny passivkonto', + 'new_budget' => 'Nyt budget', + 'new_bill' => 'Ny regning', + 'block_account_logout' => 'Du er blevet logget ud. Blokerede konti kan ikke bruge denne side. Oprettede du dig med en gyldig e-mailadresse?', + 'flash_success' => 'Succes!', + 'flash_info' => 'Besked', + 'flash_warning' => 'Advarsel!', + 'flash_error' => 'Fejl!', + 'flash_danger' => 'Fare!', + 'flash_info_multiple' => 'Der er en besked|Der er :count beskeder', + 'flash_error_multiple' => 'Der er en fejl|Der er :count fejl', + 'net_worth' => 'Nettoformue', + 'help_for_this_page' => 'Hjælp til denne side', + 'help_for_this_page_body' => 'Du kan finde mere information om denne side i dokumentationen.', + 'two_factor_welcome' => 'Hej!', + 'two_factor_enter_code' => 'For at fortsætte, indtast venligst din to-faktor-godkendelseskode. Dit program vil generere den for dig.', + 'two_factor_code_here' => 'Indtast koden her', + 'two_factor_title' => 'Tofaktorgodkendelse', + 'authenticate' => 'Godkend', + 'two_factor_forgot_title' => 'Glemt totrinsbekræftelse', + 'two_factor_forgot' => 'Jeg har glemt min tofaktor-ting.', + 'two_factor_lost_header' => 'Glemt din totrinsbekræftelse?', + 'two_factor_lost_intro' => 'Hvis du også har glemt dine backupkoder, så er det sort uheld. Det er ikke noget, du kan fikse fra webinterfacet. Du har to muligheder.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner og spørg dem om at nulstille din tofaktorgodkendelse.', + 'mfa_backup_code' => 'Du har brugt en backupkode til at logge ind på Firefly III. Den kan ikke bruges igen, så streg den fra din liste.', + 'pref_two_factor_new_backup_codes' => 'Få nye backupkoder', + 'pref_two_factor_backup_code_count' => 'Du har :count gyldig backup kode.|Du har :count gyldige backup koder.', + '2fa_i_have_them' => 'Jeg gemte dem!', + 'warning_much_data' => ':days dages data kan tage et stykke tid at indlæse.', + 'registered' => 'Du er blevet succesfuldt oprettet!', + 'Default asset account' => 'Standard aktivkonto', + 'no_budget_pointer' => 'Det ser ud til, at du ikke har oprettet budgetter endnu. Du burde oprette nogle på budgetsiden. Budgetter kan hjælpe dig med at holde styr på udgifter.', + 'no_bill_pointer' => 'Du synes ikke at have nogen regninger endnu. Du bør oprette nogle på regninger-siden. Regninger kan hjælpe dig med at holde styr på udgifterne.', + 'Savings account' => 'Opsparingskonto', + 'Credit card' => 'Kreditkort', + 'source_accounts' => 'Kildekonto|Kildekonti', + 'destination_accounts' => 'Destinationskontoen|Destinationskonti', + 'user_id_is' => 'Dit brugerid er :user', + 'field_supports_markdown' => 'Dette felt undersøtter Markdown.', + 'need_more_help' => 'Hvis du har brug for mere hjælp til at bruge Firefly III, åbn venligst en sag på Github.', + 'reenable_intro_text' => 'Du kan også genaktivere introduktionsguiden.', + 'intro_boxes_after_refresh' => 'Introduktionsboksene vil kunne ses igen, når du genopfrisker siden.', + 'show_all_no_filter' => 'Vis alle transaktioner uden at gruppere dem efter dato.', + 'expenses_by_category' => 'Udgifter per kategori', + 'expenses_by_budget' => 'Udgifter per budget', + 'income_by_category' => 'Indkomst per kategori', + 'expenses_by_asset_account' => 'Udgifter per aktivkonto', + 'expenses_by_expense_account' => 'Udgifter per udgiftskonto', + 'cannot_redirect_to_account' => 'Firefly III kan ikke videresende dig til den korrekte side. Beklager.', + 'sum_of_expenses' => 'Sum af udgifter', + 'sum_of_income' => 'Sum af indkomst', + 'liabilities' => 'Gæld', + 'spent_in_specific_budget' => 'Brugt på budget ":budget"', + 'spent_in_specific_double' => 'Forbrug på konto ":account"', + 'earned_in_specific_double' => 'Optjent på konto ":account"', + 'source_account' => 'Kildekonto', + 'source_account_reconciliation' => 'Du kan ikke redigere kildekontoen på en afstemningstransaktion.', + 'destination_account' => 'Destinationskonto', + 'destination_account_reconciliation' => 'Du kan ikke redigere destinationskontoen på en afstemningstransaktion.', + 'sum_of_expenses_in_budget' => 'Total brugt på budget ":budget"', + 'left_in_budget_limit' => 'Resterende beløb i henhold til budgettet', + 'current_period' => 'Aktuel periode', + 'show_the_current_period_and_overview' => 'Vis den aktuelle periode og overblik', + 'pref_languages_locale' => 'For at et andet sprog end engelsk skal virke rigtigt, skal dit operativsystem være udstyret med den korrekte lokale-information. Hvis denne ikke er til stede, vil valutadata, datoer og beløb muligvis vises forkert.', + 'budget_in_period' => 'Alle transaktioner for budget ":name" mellem :start og :end i :currency', + 'chart_budget_in_period' => 'Diagram for alle transaktioner for budget ":name" mellem :start og :end i :currency', + 'chart_budget_in_period_only_currency' => 'Beløbet du budgetterede var i :currency, så dette diagram vil kun vise transaktioner i :currency.', + 'chart_account_in_period' => 'Diagram for alle transaktion for konto ":name" (:balance) mellem :start og :end', + 'chart_category_in_period' => 'Diagram for alle transaktion i kategori ":name" mellem :start og :end', + 'chart_category_all' => 'Diagram for alle transaktion i kategori ":name"', + 'clone_withdrawal' => 'Klon denne hævning', + 'clone_deposit' => 'Klon denne deponering', + 'clone_transfer' => 'Klon denne overførsel', + 'multi_select_no_selection' => 'Ingen valgt', + 'multi_select_select_all' => 'Vælg alle', + 'multi_select_n_selected' => 'valgt', + 'multi_select_all_selected' => 'Alt valgt', + 'multi_select_filter_placeholder' => 'Find..', + 'intro_next_label' => 'Næste', + 'intro_prev_label' => 'Forrige', + 'intro_skip_label' => 'Spring over', + 'intro_done_label' => 'Udført', + 'between_dates_breadcrumb' => 'Mellem :start og :end', + 'all_journals_without_budget' => 'Alle transaktion uden et budget', + 'journals_without_budget' => 'Transaktioner uden et budget', + 'all_journals_without_category' => 'Alle transaktion uden en kategori', + 'journals_without_category' => 'Transaktioner uden en kategori', + 'all_journals_for_account' => 'Alle transaktioner for konto :name', + 'chart_all_journals_for_account' => 'Diagram af alle transaktioner for konto :name', + 'journals_in_period_for_account' => 'Alle transaktioner for konto :name imellem :start og :end', + 'journals_in_period_for_account_js' => 'Alle transaktioner for konto {title} mellem {start} og {end}', + 'transferred' => 'Overført', + 'all_withdrawal' => 'Alle udgifter', + 'all_transactions' => 'Alle transaktioner', + 'title_withdrawal_between' => 'Alle udgifter imellem :start og :end', + 'all_deposit' => 'Alle indkomster', + 'title_deposit_between' => 'Alle indkomster imellem :start og :end', + 'all_transfers' => 'Alle overførsler', + 'title_transfers_between' => 'Alle overførsler imellem :start og :end', + 'all_transfer' => 'Alle overførsler', + 'all_journals_for_tag' => 'Alle overførsler for tag ":tag"', + 'title_transfer_between' => 'Alle overførsler imellem :start og :end', + 'all_journals_for_category' => 'Alle transaktioner for kategori :name', + 'all_journals_for_budget' => 'Alle transaktioner for budget :name', + 'chart_all_journals_for_budget' => 'Diagram over alle transaktioner for budget :name', + 'journals_in_period_for_category' => 'Alle transaktioner for kategori :name mellem :start og :end', + 'journals_in_period_for_tag' => 'Alle transaktioner for tag :tag mellem :start og :end', + 'not_available_demo_user' => 'Den funktion, du forsøger at få adgang til, er ikke tilgængelig for demobrugere.', + 'exchange_rate_instructions' => 'Aktivkonto "@name" tillader kun transaktioner i @native_currency. Hvis du ønsker at bruge @foreign_currency i stedet, så sørg for at beløbet i @native_currency også er registreret:', + 'transfer_exchange_rate_instructions' => 'Kildekonto "@source_name" tillader kun transaktioner i @source_currency. Destinationskonto "@dest_name" tillader kun transaktioner i @dest_currency. Du skal rigtigt angive det overførte beløb i begge valutaer.', + 'transaction_data' => 'Transaktionsdata', + 'invalid_server_configuration' => 'Ugyldig server konfiguration', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Hurtigskift', + 'sign_in_to_start' => 'Log ind for at starte din session', + 'sign_in' => 'Log ind', + 'register_new_account' => 'Registrer en ny konto', + 'forgot_my_password' => 'Jeg har glemt min adgangskode', + 'problems_with_input' => 'Der var nogle problemer med din indtastning.', + 'reset_password' => 'Nulstil din adgangskode', + 'button_reset_password' => 'Nulstil adgangskode', + 'reset_button' => 'Nulstil', + 'want_to_login' => 'Jeg ønsker at logge ind', + 'login_page_title' => 'Log ind i Firefly III', + 'register_page_title' => 'Registrer hos Firefly III', + 'forgot_pw_page_title' => 'Glemt din adgangskode til Firefly III', + 'reset_pw_page_title' => 'Nulstil din adgangskode til Firefly III', + 'cannot_reset_demo_user' => 'Du kan ikke nulstille adgangskoden til demo-brugeren.', + 'no_att_demo_user' => 'Demo brugeren kan ikke uploade vedhæftede filer.', + 'button_register' => 'Registrér', + 'authorization' => 'Autorisation', + 'active_bills_only' => 'kun aktuelle regninger', + 'active_bills_only_total' => 'alle aktuelle regninger', + 'active_exp_bills_only' => 'kun aktuelle og forventede regninger', + 'active_exp_bills_only_total' => 'kun alle forventede og aktuelle regninger', + 'per_period_sum_1D' => 'Forventede daglige omkostninger', + 'per_period_sum_1W' => 'Forventede ugentlige omkostninger', + 'per_period_sum_1M' => 'Forventede månedlige omkostninger', + 'per_period_sum_3M' => 'Forventede kvartalsvise omkostninger', + 'per_period_sum_6M' => 'Forventede halvårlige omkostninger', + 'per_period_sum_1Y' => 'Forventede årlige omkostninger', + 'average_per_bill' => 'gennemsnit pr. regning', + 'expected_total' => 'forventet total', + 'reconciliation_account_name' => ':name afstemning (:currency)', + 'saved' => 'Gemt', + 'advanced_options' => 'Avancerede indstillinger', + 'advanced_options_explain' => 'Nogle sider i Firefly III har avancerede indstillinger der kan tilgås via denne knap. Denne side har ikke noget specielt her, men tjek de andre!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'Der er ingen webhook-beskeder', - 'webhook_trigger_STORE_TRANSACTION' => 'Efter oprettelse af transaktion', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Efter opdatering af transaktion', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Efter sletning af transaktion', - 'webhook_response_TRANSACTIONS' => 'Transaktionsdetaljer', - 'webhook_response_ACCOUNTS' => 'Kontodetaljer', - 'webhook_response_none_NONE' => 'Ingen detaljer', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Opret ny webhook', - 'webhooks_create_breadcrumb' => 'Opret ny webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Hvilket format webhook skal levere data i.', - 'webhook_active_form_help' => 'Webhooken skal være aktiv, ellers vil den ikke blive kaldt.', - 'stored_new_webhook' => 'Gemte ny webhook ":title"', - 'delete_webhook' => 'Slet webhook', - 'deleted_webhook' => 'Slettede webhook ":title"', - 'edit_webhook' => 'Rediger webhook ":title"', - 'updated_webhook' => 'Opdaterede webhook ":title"', - 'edit_webhook_js' => 'Rediger webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook-besked', - 'view_message' => 'Vis besked', - 'view_attempts' => 'Vis mislykkede forsøg', - 'message_content_title' => 'Webhook-beskedindhold', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook-forsøg', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'Der er ingen mislykkede forsøg. Det er en god ting!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Svar', - 'visit_webhook_url' => 'Besøg webhook-URL', - 'reset_webhook_secret' => 'Nulstil webhook-hemmelighed', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'Der er ingen webhook-beskeder', + 'webhook_trigger_STORE_TRANSACTION' => 'Efter oprettelse af transaktion', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Efter opdatering af transaktion', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Efter sletning af transaktion', + 'webhook_response_TRANSACTIONS' => 'Transaktionsdetaljer', + 'webhook_response_ACCOUNTS' => 'Kontodetaljer', + 'webhook_response_none_NONE' => 'Ingen detaljer', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspect', + 'create_new_webhook' => 'Opret ny webhook', + 'webhooks_create_breadcrumb' => 'Opret ny webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Hvilket format webhook skal levere data i.', + 'webhook_active_form_help' => 'Webhooken skal være aktiv, ellers vil den ikke blive kaldt.', + 'stored_new_webhook' => 'Gemte ny webhook ":title"', + 'delete_webhook' => 'Slet webhook', + 'deleted_webhook' => 'Slettede webhook ":title"', + 'edit_webhook' => 'Rediger webhook ":title"', + 'updated_webhook' => 'Opdaterede webhook ":title"', + 'edit_webhook_js' => 'Rediger webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook-besked', + 'view_message' => 'Vis besked', + 'view_attempts' => 'Vis mislykkede forsøg', + 'message_content_title' => 'Webhook-beskedindhold', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook-forsøg', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'Der er ingen mislykkede forsøg. Det er en god ting!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logs', + 'response' => 'Svar', + 'visit_webhook_url' => 'Besøg webhook-URL', + 'reset_webhook_secret' => 'Nulstil webhook-hemmelighed', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Firefly III v:version Anmodning om Autorisation', - 'authorization_request_intro' => ':client anmoder om at få adgang til din økonomi. Vil du give :client adgang til disse poster?', - 'authorization_request_site' => 'Du vil blive omdirigeret til :url som derefter vil være i stand til at få adgang til dine Firefly III-data.', - 'authorization_request_invalid' => 'Denne adgangsanmodning er ugyldig. Følg aldrig dette link igen.', - 'scopes_will_be_able' => 'Applikationen vil kunne:', - 'button_authorize' => 'Autoriser', - 'none_in_select_list' => '(ingen)', - 'no_piggy_bank' => '(ingen opsparing)', - 'name_in_currency' => ':name i :currency', - 'paid_in_currency' => 'Betalt i :currency', - 'unpaid_in_currency' => 'Ikke betalt i :currency', - 'is_alpha_warning' => 'Du kører en ALPHA version. Vær opmærksom på fejl og mangler.', - 'is_beta_warning' => 'Du kører en BETA version. Vær opmærksom på fejl og mangler.', - 'all_destination_accounts' => 'Destinationskonti', - 'all_source_accounts' => 'Kildekonti', - 'back_to_index' => 'Tilbage til indholdsfortegnelsen', - 'cant_logout_guard' => 'Firefly III kan ikke logge dig ud.', - 'internal_reference' => 'Intern reference', + 'authorization_request' => 'Firefly III v:version Anmodning om Autorisation', + 'authorization_request_intro' => ':client anmoder om at få adgang til din økonomi. Vil du give :client adgang til disse poster?', + 'authorization_request_site' => 'Du vil blive omdirigeret til :url som derefter vil være i stand til at få adgang til dine Firefly III-data.', + 'authorization_request_invalid' => 'Denne adgangsanmodning er ugyldig. Følg aldrig dette link igen.', + 'scopes_will_be_able' => 'Applikationen vil kunne:', + 'button_authorize' => 'Autoriser', + 'none_in_select_list' => '(ingen)', + 'no_piggy_bank' => '(ingen opsparing)', + 'name_in_currency' => ':name i :currency', + 'paid_in_currency' => 'Betalt i :currency', + 'unpaid_in_currency' => 'Ikke betalt i :currency', + 'is_alpha_warning' => 'Du kører en ALPHA version. Vær opmærksom på fejl og mangler.', + 'is_beta_warning' => 'Du kører en BETA version. Vær opmærksom på fejl og mangler.', + 'all_destination_accounts' => 'Destinationskonti', + 'all_source_accounts' => 'Kildekonti', + 'back_to_index' => 'Tilbage til indholdsfortegnelsen', + 'cant_logout_guard' => 'Firefly III kan ikke logge dig ud.', + 'internal_reference' => 'Intern reference', // check for updates: - 'update_check_title' => 'Søg efter opdateringer', - 'admin_update_check_title' => 'Søg automatisk efter opdateringer', - 'admin_update_check_explain' => 'Firefly III kan tjekke for opdateringer automatisk. Når du aktiverer denne indstilling, vil det kontakte Firefly III-opdateringsserveren for at se, om en ny version af Firefly III er tilgængelig. Når det er, vil du få en meddelelse. Du kan teste denne meddelelse ved hjælp af knappen til højre. Angiv venligst nedenfor, hvis du vil have Firefly III til automatisk at søge efter opdateringer.', - 'check_for_updates_permission' => 'Firefly III kan tjekke for opdateringer, men behøver din tilladelse til at gøre det. Gå venligst til administrationen for at angive, om du gerne vil have denne funktion aktiveret.', - 'updates_ask_me_later' => 'Spørg mig senere', - 'updates_do_not_check' => 'Søg ikke efter opdateringer', - 'updates_enable_check' => 'Aktiver søgning for opdateringer', - 'admin_update_check_now_title' => 'Søg efter opdateringer nu', - 'admin_update_check_now_explain' => 'Hvis du trykker på knappen, vil Firefly III tjekke, om din nuværende version er den seneste.', - 'check_for_updates_button' => 'Tjek nu!', - 'update_new_version_alert' => 'En ny version af Firefly III er tilgængelig. Du bruger :your_version, den nyeste version er :new_version, som blev udgivet den :date.', - 'update_version_beta' => 'Denne version er en BETA version. Du kan løbe ind i problemer.', - 'update_version_alpha' => 'Denne version er en ALPHA version. Du kan løbe ind i problemer.', - 'update_current_version_alert' => 'Du bruger :version, som er den seneste tilgængelige udgivelse.', - 'update_newer_version_alert' => 'Du bruger :your_version, som er nyere end den seneste udgivelse, :new_version.', - 'update_check_error' => 'Der opstod en fejl under søgning efter opdateringer: :error', - 'unknown_error' => 'Ukendt fejl. Beklager.', - 'just_new_release' => 'En ny version er tilgængelig! Version :version blev udgivet :date. Denne udgivelse er meget ny. Vent et par dage for mere stabilitet.', - 'disabled_but_check' => 'Du har deaktiveret automatisk søgning efter opdateringer. Så glem ikke, nu og da, at tjekke for opdateringer. Tak!', - 'admin_update_channel_title' => 'Opdateringskanal', - 'admin_update_channel_explain' => 'Firefly III har tre opdaterings "kanaler" som bestemmer, hvor du er i forhold til funktioner, forbedringer og fejl. Brug "beta" kanalen, hvis du er eventyrlig og "alfa" kanalen, hvis du vil leve livet farligt.', - 'update_channel_stable' => 'Stabil. Alt bør fungere som forventet.', - 'update_channel_beta' => 'Beta. Nye funktioner, men der kan være fejl.', - 'update_channel_alpha' => 'Alfa. Meget afprøves, og vi bruger det som fungerer.', + 'update_check_title' => 'Søg efter opdateringer', + 'admin_update_check_title' => 'Søg automatisk efter opdateringer', + 'admin_update_check_explain' => 'Firefly III kan tjekke for opdateringer automatisk. Når du aktiverer denne indstilling, vil det kontakte Firefly III-opdateringsserveren for at se, om en ny version af Firefly III er tilgængelig. Når det er, vil du få en meddelelse. Du kan teste denne meddelelse ved hjælp af knappen til højre. Angiv venligst nedenfor, hvis du vil have Firefly III til automatisk at søge efter opdateringer.', + 'check_for_updates_permission' => 'Firefly III kan tjekke for opdateringer, men behøver din tilladelse til at gøre det. Gå venligst til administrationen for at angive, om du gerne vil have denne funktion aktiveret.', + 'updates_ask_me_later' => 'Spørg mig senere', + 'updates_do_not_check' => 'Søg ikke efter opdateringer', + 'updates_enable_check' => 'Aktiver søgning for opdateringer', + 'admin_update_check_now_title' => 'Søg efter opdateringer nu', + 'admin_update_check_now_explain' => 'Hvis du trykker på knappen, vil Firefly III tjekke, om din nuværende version er den seneste.', + 'check_for_updates_button' => 'Tjek nu!', + 'update_new_version_alert' => 'En ny version af Firefly III er tilgængelig. Du bruger :your_version, den nyeste version er :new_version, som blev udgivet den :date.', + 'update_version_beta' => 'Denne version er en BETA version. Du kan løbe ind i problemer.', + 'update_version_alpha' => 'Denne version er en ALPHA version. Du kan løbe ind i problemer.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Du bruger :version, som er den seneste tilgængelige udgivelse.', + 'update_newer_version_alert' => 'Du bruger :your_version, som er nyere end den seneste udgivelse, :new_version.', + 'update_check_error' => 'Der opstod en fejl under søgning efter opdateringer: :error', + 'unknown_error' => 'Ukendt fejl. Beklager.', + 'disabled_but_check' => 'Du har deaktiveret automatisk søgning efter opdateringer. Så glem ikke, nu og da, at tjekke for opdateringer. Tak!', + 'admin_update_channel_title' => 'Opdateringskanal', + 'admin_update_channel_explain' => 'Firefly III har tre opdaterings "kanaler" som bestemmer, hvor du er i forhold til funktioner, forbedringer og fejl. Brug "beta" kanalen, hvis du er eventyrlig og "alfa" kanalen, hvis du vil leve livet farligt.', + 'update_channel_stable' => 'Stabil. Alt bør fungere som forventet.', + 'update_channel_beta' => 'Beta. Nye funktioner, men der kan være fejl.', + 'update_channel_alpha' => 'Alfa. Meget afprøves, og vi bruger det som fungerer.', // search - 'search' => 'Søg', - 'search_query' => 'Forespørgsel', - 'search_found_transactions' => 'Firefly III fandt:count transaktion på :time sekunder.IFirefly III fandt :count transaktioner på :time sekunder.', - 'search_found_more_transactions' => 'Firefly III fandt mere end :count transaktioner på :time sekunder.', - 'search_for_query' => 'Firefly III søger efter transaktioner der indeholder følgende ord: :query', - 'invalid_operators_list' => 'Disse søgeparametre er ikke gyldige og er blevet ignoreret.', + 'search' => 'Søg', + 'search_query' => 'Forespørgsel', + 'search_found_transactions' => 'Firefly III fandt:count transaktion på :time sekunder.IFirefly III fandt :count transaktioner på :time sekunder.', + 'search_found_more_transactions' => 'Firefly III fandt mere end :count transaktioner på :time sekunder.', + 'search_for_query' => 'Firefly III søger efter transaktioner der indeholder følgende ord: :query', + 'invalid_operators_list' => 'Disse søgeparametre er ikke gyldige og er blevet ignoreret.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaktionsdato er ":value"', 'search_modifier_not_date_on' => 'Transaktionsdato er ikke ":value"', 'search_modifier_reconciled' => 'Transaktionen er afstemt', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Transaktionstype er ":value"', 'search_modifier_not_transaction_type' => 'Transaktionstype er ikke ":value"', 'search_modifier_tag_is' => 'Tag er ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'Intet tag er ":value"', 'search_modifier_date_on_year' => 'Transaktionen er i år ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Transaktionen er i eller efter måned ":value"', 'search_modifier_date_after_day' => 'Transaktionen er på eller efter den ":value". i måneden', - // new 'search_modifier_tag_is_not' => 'Intet tag er ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => 'Opret ny regel fra søgeforespørgsel', 'rule_from_search_words' => 'Der er problemer med at håndtere forespørgslen ":string". Den foreslåede regel, der passer til din søgeforespørgsel, kan give forskellige resultater. Kontroller venligst omhyggeligt de udløsende hændelser.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'De følgende tilpasninger anvendes også i søgningen:', 'general_search_error' => 'Der opstod en fejl under søgningen. Kontroller logfilerne for mere information.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'Du kan ikke afvikle inaktive regler.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Regler', 'rule_name' => 'Navn på regel', 'rule_triggers' => 'Regel udløsere, ved', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Når en transaktion opdateres', 'rule_trigger_user_action' => 'Brugerhandling er ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Kildekontonavn starter med..', 'rule_trigger_source_account_starts' => 'Kildekontonavn starter med ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Budgettet er ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Transaktionsvalutaen er..', 'rule_trigger_currency_is' => 'Transaktionsvalutaen er ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Udenlandsk transaktionsvaluta er..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Regelgruppe for regninger', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Regel for regning ":name"', 'new_rule_for_bill_description' => 'Denne regel markerer transaktioner for regning ":name".', - 'new_rule_for_journal_title' => 'Regel baseret på transaktionen ":description"', - 'new_rule_for_journal_description' => 'Denne regel er baseret på transaktionen ":description". Den vil matche transaktioner, der er nøjagtigt de samme.', + 'new_rule_for_journal_title' => 'Regel baseret på transaktionen ":description"', + 'new_rule_for_journal_description' => 'Denne regel er baseret på transaktionen ":description". Den vil matche transaktioner, der er nøjagtigt de samme.', // tags - 'store_new_tag' => 'Gem nyt tag', - 'update_tag' => 'Opdater tag', - 'no_location_set' => 'Ingen stedangivelse.', - 'meta_data' => 'Meta data', - 'location' => 'Sted', - 'without_date' => 'Uden dato', - 'result' => 'Resultat', - 'sums_apply_to_range' => 'Alle beløb gælder for det valgte interval', - 'mapbox_api_key' => 'For at bruge kortet, hent en API-nøgle fra Mapbox. Åbn .env -filen og indtast denne kode under MAPBOX_API_KEY=.', - 'press_object_location' => 'Højreklik eller langt tryk for at angive objektets placering.', - 'clear_location' => 'Ryd stedangivelse', - 'delete_all_selected_tags' => 'Slet alle valgte tags', - 'select_tags_to_delete' => 'Glem ikke at vælge nogle tags.', - 'deleted_x_tags' => 'Slettede :count tag.|Slettede :count tags.', - 'create_rule_from_transaction' => 'Opret regel baseret på transaktion', - 'create_recurring_from_transaction' => 'Opret periodisk transaktion baseret på transaktion', - + 'store_new_tag' => 'Gem nyt tag', + 'update_tag' => 'Opdater tag', + 'no_location_set' => 'Ingen stedangivelse.', + 'meta_data' => 'Meta data', + 'location' => 'Sted', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Uden dato', + 'result' => 'Resultat', + 'sums_apply_to_range' => 'Alle beløb gælder for det valgte interval', + 'mapbox_api_key' => 'For at bruge kortet, hent en API-nøgle fra Mapbox. Åbn .env -filen og indtast denne kode under MAPBOX_API_KEY=.', + 'press_object_location' => 'Højreklik eller langt tryk for at angive objektets placering.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Ryd stedangivelse', + 'delete_all_selected_tags' => 'Slet alle valgte tags', + 'select_tags_to_delete' => 'Glem ikke at vælge nogle tags.', + 'deleted_x_tags' => 'Slettede :count tag.|Slettede :count tags.', + 'create_rule_from_transaction' => 'Opret regel baseret på transaktion', + 'create_recurring_from_transaction' => 'Opret periodisk transaktion baseret på transaktion', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(lig med sprog)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Startskærmskonti', - 'pref_home_screen_accounts_help' => 'Hvilke konti skal vises på hjemmesiden?', - 'pref_view_range' => 'Vis interval', - 'pref_view_range_help' => 'Nogle diagrammer er automatisk grupperet i perioder. Dine budgetter vil også blive grupperet i perioder. Hvilken periode vil du foretrække?', - 'pref_1D' => 'En dag', - 'pref_1W' => 'En uge', - 'pref_1M' => 'En måned', - 'pref_3M' => 'Tre måneder (kvartal)', - 'pref_6M' => 'Seks måneder', - 'pref_1Y' => 'Et år', - 'pref_last365' => 'Sidste år', - 'pref_last90' => 'Sidste 90 dage', - 'pref_last30' => 'Sidste 30 dage', - 'pref_last7' => 'Sidste 7 dage', - 'pref_YTD' => 'År til dato', - 'pref_QTD' => 'Kvartal til dato', - 'pref_MTD' => 'Måned til dato', - 'pref_languages' => 'Sprog', - 'pref_locale' => 'Landekode indstillinger', - 'pref_languages_help' => 'Firefly III understøtter flere sprog. Hvilket foretrækker du?', - 'pref_locale_help' => 'Firefly III giver dig mulighed for at indstille andre landestandard indstillinger, såsom hvordan valutaer, tal og datoer er formateret. Indstillingerne i denne liste understøttes muligvis ikke af dit system. Firefly III har ikke de korrekte datoindstillinger for hver landestandard; kontakt mig for forbedringer.', - 'pref_locale_no_demo' => 'Denne funktion virker ikke for demo-brugeren.', - 'pref_custom_fiscal_year' => 'Skatteår indstillinger', - 'pref_custom_fiscal_year_label' => 'Aktiveret', - 'pref_custom_fiscal_year_help' => 'For lande, der anvender anden regnskabsårsperiode end 1. januar til 31. december, kan du slå dette til og angive start-/slut- dato for regnskabsåret', - 'pref_fiscal_year_start_label' => 'Regnskabsårets start dato', - 'pref_two_factor_auth' => '2-trins verificering', - 'pref_two_factor_auth_help' => 'Når du aktiverer totrinsbekræftelse (også kendt som tofaktorgodkendelse), tilføjer du et ekstra lag af sikkerhed til din konto. Du logger ind med noget, du kender (din adgangskode) og noget du har (en bekræftelseskode). Bekræftelseskoder genereres af et program på din telefon, såsom Authy eller Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Aktivér totrinsbekræftelse', - 'pref_two_factor_auth_disabled' => '2-trins bekræftelseskode fjernet og deaktiveret', - 'pref_two_factor_auth_remove_it' => 'Glem ikke at fjerne kontoen fra din godkendelse app!', - 'pref_two_factor_auth_code' => 'Bekræftelseskode', - 'pref_two_factor_auth_code_help' => 'Scan QR-koden med et program på din telefon, såsom Authy eller Google Authenticator og angiv den genererede kode.', - 'pref_two_factor_auth_reset_code' => 'Nulstil bekræftelseskode', - 'pref_two_factor_auth_disable_2fa' => 'Deaktiver To-faktor-godkendelse', - '2fa_use_secret_instead' => 'Hvis du ikke kan scanne QR-koden, er du velkommen til at bruge \'koden\' i stedet: :secret.', - '2fa_backup_codes' => 'Gem disse backup koder for adgang, hvis du mister din enhed.', - '2fa_already_enabled' => '2-trins bekræftelse er allerede aktiveret.', - 'wrong_mfa_code' => 'Denne Multifaktor bekræftelseskode er ikke gyldig.', - 'pref_save_settings' => 'Gem indstillinger', - 'saved_preferences' => 'Indstillinger gemt!', - 'preferences_general' => 'Generelt', - 'preferences_frontpage' => 'Startskærm', - 'preferences_security' => 'Sikkerhed', - 'preferences_layout' => 'Layout', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Vis indskud på startskærmen', - 'pref_home_show_deposits_info' => 'Startskærmen viser allerede dine udgiftskonti. Skal det også vise dine indtægtskonti?', - 'pref_home_do_show_deposits' => 'Ja, vis dem', - 'successful_count' => 'heraf :count lykkedes', - 'list_page_size_title' => 'Sidestørrelse', - 'list_page_size_help' => 'Enhver vilkårlig liste (konti, transaktioner osv.) viser højst så mange per side.', - 'list_page_size_label' => 'Sidestørrelse', - 'between_dates' => '(:start og :end)', - 'pref_optional_fields_transaction' => 'Valgfrie felter for transaktioner', - 'pref_optional_fields_transaction_help' => 'Som standard er ikke alle felter aktiveret, når du opretter en ny transaktion (undgår rod). Nedenfor kan du aktivere disse felter, hvis du tror, de kunne være nyttige for dig. Selvfølgelig vil ethvert felt, der er deaktiveret, men allerede udfyldt, være synligt uanset konfigurationen.', - 'optional_tj_date_fields' => 'Dato felter', - 'optional_tj_other_fields' => 'Andre felter', - 'optional_tj_attachment_fields' => 'Bilagsfelter', - 'pref_optional_tj_interest_date' => 'Rentedato', - 'pref_optional_tj_book_date' => 'Bogføringsdato', - 'pref_optional_tj_process_date' => 'Behandlingsdato', - 'pref_optional_tj_due_date' => 'Forfaldsdato', - 'pref_optional_tj_payment_date' => 'Betalingsdato', - 'pref_optional_tj_invoice_date' => 'Fakturadato', - 'pref_optional_tj_internal_reference' => 'Intern reference', - 'pref_optional_tj_notes' => 'Bemærkninger', - 'pref_optional_tj_attachments' => 'Vedhæftninger', - 'pref_optional_tj_external_url' => 'Eksternt URL', - 'pref_optional_tj_location' => 'Placering', - 'pref_optional_tj_links' => 'Transaktionslinks', - 'optional_field_meta_dates' => 'Datoer', - 'optional_field_meta_business' => 'Forretning', - 'optional_field_attachments' => 'Vedhæftninger', - 'optional_field_meta_data' => 'Valgfrit metadata', - 'external_url' => 'Ekstern URL', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(lig med sprog)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Startskærmskonti', + 'pref_home_screen_accounts_help' => 'Hvilke konti skal vises på hjemmesiden?', + 'pref_view_range' => 'Vis interval', + 'pref_view_range_help' => 'Nogle diagrammer er automatisk grupperet i perioder. Dine budgetter vil også blive grupperet i perioder. Hvilken periode vil du foretrække?', + 'pref_1D' => 'En dag', + 'pref_1W' => 'En uge', + 'pref_1M' => 'En måned', + 'pref_3M' => 'Tre måneder (kvartal)', + 'pref_6M' => 'Seks måneder', + 'pref_1Y' => 'Et år', + 'pref_last365' => 'Sidste år', + 'pref_last90' => 'Sidste 90 dage', + 'pref_last30' => 'Sidste 30 dage', + 'pref_last7' => 'Sidste 7 dage', + 'pref_YTD' => 'År til dato', + 'pref_QTD' => 'Kvartal til dato', + 'pref_MTD' => 'Måned til dato', + 'pref_languages' => 'Sprog', + 'pref_locale' => 'Landekode indstillinger', + 'pref_languages_help' => 'Firefly III understøtter flere sprog. Hvilket foretrækker du?', + 'pref_locale_help' => 'Firefly III giver dig mulighed for at indstille andre landestandard indstillinger, såsom hvordan valutaer, tal og datoer er formateret. Indstillingerne i denne liste understøttes muligvis ikke af dit system. Firefly III har ikke de korrekte datoindstillinger for hver landestandard; kontakt mig for forbedringer.', + 'pref_locale_no_demo' => 'Denne funktion virker ikke for demo-brugeren.', + 'pref_custom_fiscal_year' => 'Skatteår indstillinger', + 'pref_custom_fiscal_year_label' => 'Aktiveret', + 'pref_custom_fiscal_year_help' => 'For lande, der anvender anden regnskabsårsperiode end 1. januar til 31. december, kan du slå dette til og angive start-/slut- dato for regnskabsåret', + 'pref_fiscal_year_start_label' => 'Regnskabsårets start dato', + 'pref_two_factor_auth' => '2-trins verificering', + 'pref_two_factor_auth_help' => 'Når du aktiverer totrinsbekræftelse (også kendt som tofaktorgodkendelse), tilføjer du et ekstra lag af sikkerhed til din konto. Du logger ind med noget, du kender (din adgangskode) og noget du har (en bekræftelseskode). Bekræftelseskoder genereres af et program på din telefon, såsom Authy eller Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Aktivér totrinsbekræftelse', + 'pref_two_factor_auth_disabled' => '2-trins bekræftelseskode fjernet og deaktiveret', + 'pref_two_factor_auth_remove_it' => 'Glem ikke at fjerne kontoen fra din godkendelse app!', + 'pref_two_factor_auth_code' => 'Bekræftelseskode', + 'pref_two_factor_auth_code_help' => 'Scan QR-koden med et program på din telefon, såsom Authy eller Google Authenticator og angiv den genererede kode.', + 'pref_two_factor_auth_reset_code' => 'Nulstil bekræftelseskode', + 'pref_two_factor_auth_disable_2fa' => 'Deaktiver To-faktor-godkendelse', + '2fa_use_secret_instead' => 'Hvis du ikke kan scanne QR-koden, er du velkommen til at bruge \'koden\' i stedet: :secret.', + '2fa_backup_codes' => 'Gem disse backup koder for adgang, hvis du mister din enhed.', + '2fa_already_enabled' => '2-trins bekræftelse er allerede aktiveret.', + 'wrong_mfa_code' => 'Denne Multifaktor bekræftelseskode er ikke gyldig.', + 'pref_save_settings' => 'Gem indstillinger', + 'saved_preferences' => 'Indstillinger gemt!', + 'preferences_general' => 'Generelt', + 'preferences_frontpage' => 'Startskærm', + 'preferences_security' => 'Sikkerhed', + 'preferences_layout' => 'Layout', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Vis indskud på startskærmen', + 'pref_home_show_deposits_info' => 'Startskærmen viser allerede dine udgiftskonti. Skal det også vise dine indtægtskonti?', + 'pref_home_do_show_deposits' => 'Ja, vis dem', + 'successful_count' => 'heraf :count lykkedes', + 'list_page_size_title' => 'Sidestørrelse', + 'list_page_size_help' => 'Enhver vilkårlig liste (konti, transaktioner osv.) viser højst så mange per side.', + 'list_page_size_label' => 'Sidestørrelse', + 'between_dates' => '(:start og :end)', + 'pref_optional_fields_transaction' => 'Valgfrie felter for transaktioner', + 'pref_optional_fields_transaction_help' => 'Som standard er ikke alle felter aktiveret, når du opretter en ny transaktion (undgår rod). Nedenfor kan du aktivere disse felter, hvis du tror, de kunne være nyttige for dig. Selvfølgelig vil ethvert felt, der er deaktiveret, men allerede udfyldt, være synligt uanset konfigurationen.', + 'optional_tj_date_fields' => 'Dato felter', + 'optional_tj_other_fields' => 'Andre felter', + 'optional_tj_attachment_fields' => 'Bilagsfelter', + 'pref_optional_tj_interest_date' => 'Rentedato', + 'pref_optional_tj_book_date' => 'Bogføringsdato', + 'pref_optional_tj_process_date' => 'Behandlingsdato', + 'pref_optional_tj_due_date' => 'Forfaldsdato', + 'pref_optional_tj_payment_date' => 'Betalingsdato', + 'pref_optional_tj_invoice_date' => 'Fakturadato', + 'pref_optional_tj_internal_reference' => 'Intern reference', + 'pref_optional_tj_notes' => 'Bemærkninger', + 'pref_optional_tj_attachments' => 'Vedhæftninger', + 'pref_optional_tj_external_url' => 'Eksternt URL', + 'pref_optional_tj_location' => 'Placering', + 'pref_optional_tj_links' => 'Transaktionslinks', + 'optional_field_meta_dates' => 'Datoer', + 'optional_field_meta_business' => 'Forretning', + 'optional_field_attachments' => 'Vedhæftninger', + 'optional_field_meta_data' => 'Valgfrit metadata', + 'external_url' => 'Ekstern URL', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'Alle dine andre sessioner er blevet logget af.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Slet ALLE dine budgetter', - 'delete_all_categories' => 'Slet alle dine kategorier', - 'delete_all_tags' => 'Slet ALLE dine tags', - 'delete_all_bills' => 'Slet alle dine regninger', - 'delete_all_piggy_banks' => 'Slet ALLE dine "sparegrise"', - 'delete_all_rules' => 'Slet ALLE dine regninger', - 'delete_all_recurring' => 'Slet ALLE dine periodiske transaktioner', - 'delete_all_object_groups' => 'Slet ALLE dine objektgrupper', - 'delete_all_accounts' => 'Slet ALLE dine konti', - 'delete_all_asset_accounts' => 'Slet ALLE dine aktiv konti', - 'delete_all_expense_accounts' => 'Slet ALLE dine udgiftskonti', - 'delete_all_revenue_accounts' => 'Slet ALLE dine indtægtskonti', - 'delete_all_liabilities' => 'Slet ALLE dine forpligtelser', - 'delete_all_transactions' => 'Slet ALLE dine transaktioner', - 'delete_all_withdrawals' => 'Slet ALLE dine udbetalinger', - 'delete_all_deposits' => 'Slet ALLE dine indskud', - 'delete_all_transfers' => 'Slet ALLE dine overførsler', - 'also_delete_transactions' => 'Sletning af konti vil også slette ALLE tilknyttede udbetalinger, indskud og transaktioner!', - 'deleted_all_budgets' => 'Alle budgetter er blevet slettet', - 'deleted_all_categories' => 'Alle kategorier er blevet slettet', - 'deleted_all_tags' => 'Alle tags er blevet slettet', - 'deleted_all_bills' => 'Alle regninger er blevet slettet', - 'deleted_all_piggy_banks' => 'Alle "sparegrise" er blevet slettet', - 'deleted_all_rules' => 'Alle regler og regelgrupper er blevet slettet', - 'deleted_all_object_groups' => 'Alle grupper er blevet slettet', - 'deleted_all_accounts' => 'Alle konti er blevet slettet', - 'deleted_all_asset_accounts' => 'Alle aktiv konti er blevet slettet', - 'deleted_all_expense_accounts' => 'Alle udgiftskonti er blevet slettet', - 'deleted_all_revenue_accounts' => 'Alle indtægtskonti er slettet', - 'deleted_all_liabilities' => 'Alle forpligtelser er blevet slettet', - 'deleted_all_transactions' => 'Alle transaktioner er blevet slettet', - 'deleted_all_withdrawals' => 'Alle udbetalinger er blevet slettet', - 'deleted_all_deposits' => 'Alle indskud er blevet slettet', - 'deleted_all_transfers' => 'Alle overførsler er blevet slettet', - 'deleted_all_recurring' => 'Alle periodiske transaktioner er blevet slettet', - 'change_your_password' => 'Skift din adgangskode', - 'delete_account' => 'Slet konto', - 'current_password' => 'Aktuel adgangskode', - 'new_password' => 'Nyt Password', - 'new_password_again' => 'Ny adgangskode (gentag)', - 'delete_your_account' => 'Slet din konto', - 'delete_your_account_help' => 'Sletning af din konto vil også slette alle konti, transaktioner, alt du måtte have gemt i Firefly III. Det vil være VÆK.', - 'delete_your_account_password' => 'Indtast din adgangskode for at fortsætte.', - 'password' => 'Adgangskode', - 'are_you_sure' => 'Er du sikker? Du kan ikke fortryde dette.', - 'delete_account_button' => 'SLET din konto', - 'invalid_current_password' => 'Ugyldig adgangskode!', - 'password_changed' => 'Adgangskoden ændret!', - 'should_change' => 'Idéen er at ændre din adgangskode.', - 'invalid_password' => 'Ugyldig adgangskode!', - 'what_is_pw_security' => 'Hvad er "bekræft adgangskodesikkerhed"?', - 'secure_pw_title' => 'Sådan vælger du en sikker adgangskode', - 'forgot_password_response' => 'Tak. Hvis en konto findes med denne e-mailadresse, vil du finde instruktioner i din indbakke.', - 'secure_pw_history' => 'Ikke en uge går, uden at du læser i nyhederne om at et websted lækker sine brugeres kodeord. Hackere og tyve bruger disse adgangskoder til at forsøge at stjæle dine private oplysninger. Den information er værdifuld.', - 'secure_pw_ff' => 'Bruger du den samme adgangskode over hele internettet? Hvis et websted lækker din adgangskode, har hackere adgang til alle dine data. Firefly III betror dig om at vælge en stærk og unik adgangskode til at beskytte dine regnskaber.', - 'secure_pw_check_box' => 'Firefly III kan kontrollere om den adgangskode du ønsker at bruge er lækket tidligere. Hvis dette er tilfældet, anbefaler Firefly III dig IKKE at anvende denne adgangskode.', - 'secure_pw_working_title' => 'Hvordan virker det?', - 'secure_pw_working' => 'Ved at afkrydse boksen, vil Firefly III sende de første fem tegn af SHA1-hashen af din adgangskode til hjemmesiden for Troy Hunt for at se, om det er på listen. Dette vil stoppe dig i at bruge usikre adgangskoder, som anbefales i den seneste NIST Special Publication om dette emne.', - 'secure_pw_should' => 'Skal jeg tjekke boksen?', - 'secure_pw_long_password' => 'Ja. Kontroller altid, at din adgangskode er sikker.', - 'command_line_token' => 'Kommandolinje-token', - 'explain_command_line_token' => 'Du har brug for dette token for at udføre kommandolinje kommandoer til eksempelvis eksport af data. Uden dene, vil denne følsomme kommandoer ikke virke. Del ikke dit kommandolinje-token. Ingen vil bede dig om dette token, ikke engang mig. Hvis du frygter, at du har mistet dette, eller hvis du er paranoid, kan du regenerere dette token ved hjælp af knappen.', - 'regenerate_command_line_token' => 'Regenerer kommandolinje-token', - 'token_regenerated' => 'En ny kommandolinje-token blev genereret', - 'change_your_email' => 'Skift din e-mail adresse', - 'email_verification' => 'En e-mail vil blive sendt til din gamle og nye e-mail adresse. Af sikkerhedshensyn vil du ikke kunne logge ind, før du bekræfter din nye e-mailadresse. Hvis du er usikker på, om din Firefly III-installation er i stand til at sende e-mail, skal du ikke bruge denne funktion. Hvis du er administrator, kan du teste dette i Administration.', - 'email_changed_logout' => 'Indtil du bekræfter din e-mailadresse, kan du ikke logge ind.', - 'login_with_new_email' => 'Du kan nu logge ind med din nye e-mail-adresse.', - 'login_with_old_email' => 'Du kan nu logge ind med din gamle e-mail-adresse igen.', - 'login_provider_local_only' => 'Denne handling er ikke tilgængelig ved godkendelse via ":login_provider".', - 'external_user_mgt_disabled' => 'Denne handling er ikke tilgængelig, når Firefly III ikke er ansvarlig for brugerhåndtering eller godkendelseshåndtering.', - 'external_auth_disabled' => 'Denne handling er ikke tilgængelig, når Firefly III ikke er ansvarlig for autentificering.', - 'delete_local_info_only' => "Da Firefly III ikke er ansvarlig for brugerhåndtering eller godkendelseshåndtering, vil denne funktion kun slette lokale Firefly III-oplysninger.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Klienter', - 'profile_oauth_no_clients' => 'Du har ikke oprettet nogen OAuth klienter.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Klienter', - 'profile_oauth_client_id' => 'Klient ID', - 'profile_oauth_client_name' => 'Navn', - 'profile_oauth_client_secret' => 'Hemmelighed', - 'profile_oauth_create_new_client' => 'Opret ny klient', - 'profile_oauth_create_client' => 'Opret klient', - 'profile_oauth_edit_client' => 'Rediger klient', - 'profile_oauth_name_help' => 'Noget dine brugere vil genkende og stole på.', - 'profile_oauth_redirect_url' => 'Omdirigerings-URL', - 'profile_oauth_redirect_url_help' => 'Din autoriserings callback URL.', - 'profile_authorized_apps' => 'Autoriserede programmer', - 'profile_authorized_clients' => 'Autoriserede klienter', - 'profile_scopes' => 'Anvendelsesområde', - 'profile_revoke' => 'Tilbagekald', - 'profile_oauth_client_secret_title' => 'Klient Hemmelighed', - 'profile_oauth_client_secret_expl' => 'Her er din nye klient hemmelighed. Dette er den eneste tid, den vil blive vist, så mist det ikke! Du kan nu bruge denne hemmelighed til at lave API-anmodninger.', - 'profile_personal_access_tokens' => 'Personlige Adgangstokens', - 'profile_personal_access_token' => 'Personligt Adgangstoken', - 'profile_oauth_confidential' => 'Fortroligt', - 'profile_oauth_confidential_help' => 'Kræver klienten at godkende med en hemmelighed. Fortrolige klienter kan holde legitimationsoplysninger på en sikker måde uden at udsætte dem for uautoriserede parter. Offentlige applikationer, såsom native desktop eller JavaScript SPA applikationer, er ikke i stand til at holde hemmeligheder sikkert.', - 'profile_personal_access_token_explanation' => 'Her er dit nye personlige adgangstoken. Dette er den eneste gang det vil blive vist, så mist det ikke! Du kan nu bruge dette token til at foretage API-anmodninger.', - 'profile_no_personal_access_token' => 'Du har ikke oprettet en personlig adgangstoken.', - 'profile_create_new_token' => 'Opret nyt token', - 'profile_create_token' => 'Opret token', - 'profile_create' => 'Opret', - 'profile_save_changes' => 'Gem ændringer', - 'profile_whoops' => 'Hovsa!', - 'profile_something_wrong' => 'Noget gik galt!', - 'profile_try_again' => 'Noget gik galt. Forsøg venligst igen.', - 'amounts' => 'Beløb', - 'multi_account_warning_unknown' => 'Afhængigt af hvilken type transaktion du opretter kan kilden og/eller destinationskontoen for efterfølgende opsplitninger tilsidesættes, uanset hvad der er defineret i den første opdeling af transaktionen.', - 'multi_account_warning_withdrawal' => 'Husk, at kildekontoen for efterfølgende opdelinger vil blive overstyret af hvad der er defineret i den første opdeling af tilbagetrækningen.', - 'multi_account_warning_deposit' => 'Husk, at destinationskontoen for efterfølgende opdelinger vil blive tilsidesat af hvad der er defineret i den første opsplitning af depositummet.', - 'multi_account_warning_transfer' => 'Husk på, at kilden + destination konto for efterfølgende opdelinger vil blive overstyret af hvad der er defineret i den første opdeling af overførslen.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'Alle dine andre sessioner er blevet logget af.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Slet ALLE dine budgetter', + 'delete_all_categories' => 'Slet alle dine kategorier', + 'delete_all_tags' => 'Slet ALLE dine tags', + 'delete_all_bills' => 'Slet alle dine regninger', + 'delete_all_piggy_banks' => 'Slet ALLE dine "sparegrise"', + 'delete_all_rules' => 'Slet ALLE dine regninger', + 'delete_all_recurring' => 'Slet ALLE dine periodiske transaktioner', + 'delete_all_object_groups' => 'Slet ALLE dine objektgrupper', + 'delete_all_accounts' => 'Slet ALLE dine konti', + 'delete_all_asset_accounts' => 'Slet ALLE dine aktiv konti', + 'delete_all_expense_accounts' => 'Slet ALLE dine udgiftskonti', + 'delete_all_revenue_accounts' => 'Slet ALLE dine indtægtskonti', + 'delete_all_liabilities' => 'Slet ALLE dine forpligtelser', + 'delete_all_transactions' => 'Slet ALLE dine transaktioner', + 'delete_all_withdrawals' => 'Slet ALLE dine udbetalinger', + 'delete_all_deposits' => 'Slet ALLE dine indskud', + 'delete_all_transfers' => 'Slet ALLE dine overførsler', + 'also_delete_transactions' => 'Sletning af konti vil også slette ALLE tilknyttede udbetalinger, indskud og transaktioner!', + 'deleted_all_budgets' => 'Alle budgetter er blevet slettet', + 'deleted_all_categories' => 'Alle kategorier er blevet slettet', + 'deleted_all_tags' => 'Alle tags er blevet slettet', + 'deleted_all_bills' => 'Alle regninger er blevet slettet', + 'deleted_all_piggy_banks' => 'Alle "sparegrise" er blevet slettet', + 'deleted_all_rules' => 'Alle regler og regelgrupper er blevet slettet', + 'deleted_all_object_groups' => 'Alle grupper er blevet slettet', + 'deleted_all_accounts' => 'Alle konti er blevet slettet', + 'deleted_all_asset_accounts' => 'Alle aktiv konti er blevet slettet', + 'deleted_all_expense_accounts' => 'Alle udgiftskonti er blevet slettet', + 'deleted_all_revenue_accounts' => 'Alle indtægtskonti er slettet', + 'deleted_all_liabilities' => 'Alle forpligtelser er blevet slettet', + 'deleted_all_transactions' => 'Alle transaktioner er blevet slettet', + 'deleted_all_withdrawals' => 'Alle udbetalinger er blevet slettet', + 'deleted_all_deposits' => 'Alle indskud er blevet slettet', + 'deleted_all_transfers' => 'Alle overførsler er blevet slettet', + 'deleted_all_recurring' => 'Alle periodiske transaktioner er blevet slettet', + 'change_your_password' => 'Skift din adgangskode', + 'delete_account' => 'Slet konto', + 'current_password' => 'Aktuel adgangskode', + 'new_password' => 'Nyt Password', + 'new_password_again' => 'Ny adgangskode (gentag)', + 'delete_your_account' => 'Slet din konto', + 'delete_your_account_help' => 'Sletning af din konto vil også slette alle konti, transaktioner, alt du måtte have gemt i Firefly III. Det vil være VÆK.', + 'delete_your_account_password' => 'Indtast din adgangskode for at fortsætte.', + 'password' => 'Adgangskode', + 'are_you_sure' => 'Er du sikker? Du kan ikke fortryde dette.', + 'delete_account_button' => 'SLET din konto', + 'invalid_current_password' => 'Ugyldig adgangskode!', + 'password_changed' => 'Adgangskoden ændret!', + 'should_change' => 'Idéen er at ændre din adgangskode.', + 'invalid_password' => 'Ugyldig adgangskode!', + 'what_is_pw_security' => 'Hvad er "bekræft adgangskodesikkerhed"?', + 'secure_pw_title' => 'Sådan vælger du en sikker adgangskode', + 'forgot_password_response' => 'Tak. Hvis en konto findes med denne e-mailadresse, vil du finde instruktioner i din indbakke.', + 'secure_pw_history' => 'Ikke en uge går, uden at du læser i nyhederne om at et websted lækker sine brugeres kodeord. Hackere og tyve bruger disse adgangskoder til at forsøge at stjæle dine private oplysninger. Den information er værdifuld.', + 'secure_pw_ff' => 'Bruger du den samme adgangskode over hele internettet? Hvis et websted lækker din adgangskode, har hackere adgang til alle dine data. Firefly III betror dig om at vælge en stærk og unik adgangskode til at beskytte dine regnskaber.', + 'secure_pw_check_box' => 'Firefly III kan kontrollere om den adgangskode du ønsker at bruge er lækket tidligere. Hvis dette er tilfældet, anbefaler Firefly III dig IKKE at anvende denne adgangskode.', + 'secure_pw_working_title' => 'Hvordan virker det?', + 'secure_pw_working' => 'Ved at afkrydse boksen, vil Firefly III sende de første fem tegn af SHA1-hashen af din adgangskode til hjemmesiden for Troy Hunt for at se, om det er på listen. Dette vil stoppe dig i at bruge usikre adgangskoder, som anbefales i den seneste NIST Special Publication om dette emne.', + 'secure_pw_should' => 'Skal jeg tjekke boksen?', + 'secure_pw_long_password' => 'Ja. Kontroller altid, at din adgangskode er sikker.', + 'command_line_token' => 'Kommandolinje-token', + 'explain_command_line_token' => 'Du har brug for dette token for at udføre kommandolinje kommandoer til eksempelvis eksport af data. Uden dene, vil denne følsomme kommandoer ikke virke. Del ikke dit kommandolinje-token. Ingen vil bede dig om dette token, ikke engang mig. Hvis du frygter, at du har mistet dette, eller hvis du er paranoid, kan du regenerere dette token ved hjælp af knappen.', + 'regenerate_command_line_token' => 'Regenerer kommandolinje-token', + 'token_regenerated' => 'En ny kommandolinje-token blev genereret', + 'change_your_email' => 'Skift din e-mail adresse', + 'email_verification' => 'En e-mail vil blive sendt til din gamle og nye e-mail adresse. Af sikkerhedshensyn vil du ikke kunne logge ind, før du bekræfter din nye e-mailadresse. Hvis du er usikker på, om din Firefly III-installation er i stand til at sende e-mail, skal du ikke bruge denne funktion. Hvis du er administrator, kan du teste dette i Administration.', + 'email_changed_logout' => 'Indtil du bekræfter din e-mailadresse, kan du ikke logge ind.', + 'login_with_new_email' => 'Du kan nu logge ind med din nye e-mail-adresse.', + 'login_with_old_email' => 'Du kan nu logge ind med din gamle e-mail-adresse igen.', + 'login_provider_local_only' => 'Denne handling er ikke tilgængelig ved godkendelse via ":login_provider".', + 'external_user_mgt_disabled' => 'Denne handling er ikke tilgængelig, når Firefly III ikke er ansvarlig for brugerhåndtering eller godkendelseshåndtering.', + 'external_auth_disabled' => 'Denne handling er ikke tilgængelig, når Firefly III ikke er ansvarlig for autentificering.', + 'delete_local_info_only' => 'Da Firefly III ikke er ansvarlig for brugerhåndtering eller godkendelseshåndtering, vil denne funktion kun slette lokale Firefly III-oplysninger.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Klienter', + 'profile_oauth_no_clients' => 'Du har ikke oprettet nogen OAuth klienter.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Klienter', + 'profile_oauth_client_id' => 'Klient ID', + 'profile_oauth_client_name' => 'Navn', + 'profile_oauth_client_secret' => 'Hemmelighed', + 'profile_oauth_create_new_client' => 'Opret ny klient', + 'profile_oauth_create_client' => 'Opret klient', + 'profile_oauth_edit_client' => 'Rediger klient', + 'profile_oauth_name_help' => 'Noget dine brugere vil genkende og stole på.', + 'profile_oauth_redirect_url' => 'Omdirigerings-URL', + 'profile_oauth_redirect_url_help' => 'Din autoriserings callback URL.', + 'profile_authorized_apps' => 'Autoriserede programmer', + 'profile_authorized_clients' => 'Autoriserede klienter', + 'profile_scopes' => 'Anvendelsesområde', + 'profile_revoke' => 'Tilbagekald', + 'profile_oauth_client_secret_title' => 'Klient Hemmelighed', + 'profile_oauth_client_secret_expl' => 'Her er din nye klient hemmelighed. Dette er den eneste tid, den vil blive vist, så mist det ikke! Du kan nu bruge denne hemmelighed til at lave API-anmodninger.', + 'profile_personal_access_tokens' => 'Personlige Adgangstokens', + 'profile_personal_access_token' => 'Personligt Adgangstoken', + 'profile_oauth_confidential' => 'Fortroligt', + 'profile_oauth_confidential_help' => 'Kræver klienten at godkende med en hemmelighed. Fortrolige klienter kan holde legitimationsoplysninger på en sikker måde uden at udsætte dem for uautoriserede parter. Offentlige applikationer, såsom native desktop eller JavaScript SPA applikationer, er ikke i stand til at holde hemmeligheder sikkert.', + 'profile_personal_access_token_explanation' => 'Her er dit nye personlige adgangstoken. Dette er den eneste gang det vil blive vist, så mist det ikke! Du kan nu bruge dette token til at foretage API-anmodninger.', + 'profile_no_personal_access_token' => 'Du har ikke oprettet en personlig adgangstoken.', + 'profile_create_new_token' => 'Opret nyt token', + 'profile_create_token' => 'Opret token', + 'profile_create' => 'Opret', + 'profile_save_changes' => 'Gem ændringer', + 'profile_whoops' => 'Hovsa!', + 'profile_something_wrong' => 'Noget gik galt!', + 'profile_try_again' => 'Noget gik galt. Forsøg venligst igen.', + 'amounts' => 'Beløb', + 'multi_account_warning_unknown' => 'Afhængigt af hvilken type transaktion du opretter kan kilden og/eller destinationskontoen for efterfølgende opsplitninger tilsidesættes, uanset hvad der er defineret i den første opdeling af transaktionen.', + 'multi_account_warning_withdrawal' => 'Husk, at kildekontoen for efterfølgende opdelinger vil blive overstyret af hvad der er defineret i den første opdeling af tilbagetrækningen.', + 'multi_account_warning_deposit' => 'Husk, at destinationskontoen for efterfølgende opdelinger vil blive tilsidesat af hvad der er defineret i den første opsplitning af depositummet.', + 'multi_account_warning_transfer' => 'Husk på, at kilden + destination konto for efterfølgende opdelinger vil blive overstyret af hvad der er defineret i den første opdeling af overførslen.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Eksporter data fra Firefly III', - 'export_data_menu' => 'Eksporter data', - 'export_data_bc' => 'Eksporter data fra Firefly III', - 'export_data_main_title' => 'Eksporter data fra Firefly III', - 'export_data_expl' => 'Dette link giver dig mulighed for at eksportere alle transaktioner + metadata fra Firefly III. Se hjælp (øverste højre (?)-ikon) for mere information om processen.', - 'export_data_all_transactions' => 'Eksporter alle transaktioner', - 'export_data_advanced_expl' => 'Hvis du har brug for en mere avanceret eller specifik dataeksport, kan du under hjælp læse, hvordan du bruger konsolkommandoen php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Eksporter data fra Firefly III', + 'export_data_menu' => 'Eksporter data', + 'export_data_bc' => 'Eksporter data fra Firefly III', + 'export_data_main_title' => 'Eksporter data fra Firefly III', + 'export_data_expl' => 'Dette link giver dig mulighed for at eksportere alle transaktioner + metadata fra Firefly III. Se hjælp (øverste højre (?)-ikon) for mere information om processen.', + 'export_data_all_transactions' => 'Eksporter alle transaktioner', + 'export_data_advanced_expl' => 'Hvis du har brug for en mere avanceret eller specifik dataeksport, kan du under hjælp læse, hvordan du bruger konsolkommandoen php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Én vedhæftet fil|:count vedhæftede filer', - 'attachments' => 'Vedhæftninger', - 'edit_attachment' => 'Rediger vedhæftet fil ":name"', - 'update_attachment' => 'Opdater vedhæftning', - 'delete_attachment' => 'Slet vedhæftet fil ":name"', - 'attachment_deleted' => 'Slettede vedhæftning ":name"', - 'liabilities_deleted' => 'Slettet gæld ":name"', - 'attachment_updated' => 'Opdateret vedhæftning ":name"', - 'upload_max_file_size' => 'Maksimal filstørrelse: :size', - 'list_all_attachments' => 'Liste over alle vedhæftede filer', + 'nr_of_attachments' => 'Én vedhæftet fil|:count vedhæftede filer', + 'attachments' => 'Vedhæftninger', + 'edit_attachment' => 'Rediger vedhæftet fil ":name"', + 'update_attachment' => 'Opdater vedhæftning', + 'delete_attachment' => 'Slet vedhæftet fil ":name"', + 'attachment_deleted' => 'Slettede vedhæftning ":name"', + 'liabilities_deleted' => 'Slettet gæld ":name"', + 'attachment_updated' => 'Opdateret vedhæftning ":name"', + 'upload_max_file_size' => 'Maksimal filstørrelse: :size', + 'list_all_attachments' => 'Liste over alle vedhæftede filer', // transaction index - 'title_expenses' => 'Udgifter', - 'title_withdrawal' => 'Udgifter', - 'title_revenue' => 'Indtægter / indkomst', - 'title_deposit' => 'Indtægter / indkomster', - 'title_transfer' => 'Overførsler', - 'title_transfers' => 'Overførsler', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Udgifter', + 'title_withdrawal' => 'Udgifter', + 'title_revenue' => 'Indtægter / indkomst', + 'title_deposit' => 'Indtægter / indkomster', + 'title_transfer' => 'Overførsler', + 'title_transfers' => 'Overførsler', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Denne transaktion er allerede en udbetaling', - 'convert_is_already_type_Deposit' => 'Denne transaktion er allerede en indbetaling', - 'convert_is_already_type_Transfer' => 'Denne transaktion er allerede en overførsel', - 'convert_to_Withdrawal' => 'Konverter ":description" til en udbetaling', - 'convert_to_Deposit' => 'Konverter ":description" til en indbetaling', - 'convert_to_Transfer' => 'Konverter ":description" til en overførsel', - 'convert_options_WithdrawalDeposit' => 'Konverter en udbetaling til en indbetaling', - 'convert_options_WithdrawalTransfer' => 'Konverter en udbetaling til en overførsel', - 'convert_options_DepositTransfer' => 'Konverter et indbetaling til en overførsel', - 'convert_options_DepositWithdrawal' => 'Konverter et indbetaling til en udbetaling', - 'convert_options_TransferWithdrawal' => 'Konverter en overførsel til en hævning', - 'convert_options_TransferDeposit' => 'Konverter en overførsel til en indbetaling', - 'convert_Withdrawal_to_deposit' => 'Konverter denne hævning til en indbetaling', - 'convert_Withdrawal_to_transfer' => 'Konverter denne udbetaling til en overførsel', - 'convert_Deposit_to_withdrawal' => 'Konverter dette indskud til en udbetaling', - 'convert_Deposit_to_transfer' => 'Konverter dette indskud til en overførsel', - 'convert_Transfer_to_deposit' => 'Konverter denne overførsel til en indbetaling', - 'convert_Transfer_to_withdrawal' => 'Konverter denne overførsel til en udbetaling', - 'convert_please_set_revenue_source' => 'Vælg venligst den indtægtskonto, hvor pengene kommer fra.', - 'convert_please_set_asset_destination' => 'Vælg venligst den aktivkonto, hvor pengene skal overføres til.', - 'convert_please_set_expense_destination' => 'Vælg venligst den udgiftskonto, hvor pengene skal flyttes til.', - 'convert_please_set_asset_source' => 'Vælg venligst aktivkontoen, hvor pengene kommer fra.', - 'convert_expl_w_d' => 'Ved konvertering fra en udbetaling til et indskud, vil pengene blive deponeret på den viste destinationskonto, i stedet for at blive trukket tilbage fra den. Ved konvertering fra en udbetaling til et indskud, vil pengene blive deponeret på de viste destinationskonti i stedet for at blive trukket tilbage fra dem.', - 'convert_expl_w_t' => 'Ved omregning af en udbetaling til en overførsel pengene vil blive overført væk fra kildekontoen til andre aktiver eller passiver i stedet for at blive brugt på den oprindelige omkostningskonto. Ved omregning af en udbetaling til en overførsel pengene vil blive overført væk fra kildekonti til andre aktiv- eller passivkonti i stedet for at blive brugt på de oprindelige omkostningskonti.', - 'convert_expl_d_w' => 'Ved konvertering af en indbetaling til en udbetaling, vil pengene blive trukket tilbage fra den viste kilde konto, i stedet for at blive deponeret i den. Ved konvertering af et depositum til en udbetaling, vil pengene blive trukket tilbage fra de viste kildekonti i stedet for at blive deponeret i dem.', - 'convert_expl_d_t' => 'Når du konverterer en indbetaling til en overførsel, pengene vil blive deponeret på den anførte destinationskonto fra en af dine aktiver eller passiver konto. Når du konverterer en indbetaling til en overførsel, pengene vil blive deponeret på de anførte destinationskonti fra et af dine aktiver eller passivkonti.', - 'convert_expl_t_w' => 'Når du konverterer en overførsel til en udbetaling, vil pengene blive brugt på den destinationskonto, du angiver her, i stedet for at blive overført væk. Når du konverterer en overførsel til en udbetaling, vil pengene blive brugt på de destinationskonti, du angiver her, i stedet for at blive overført væk.', - 'convert_expl_t_d' => 'Når du konverterer en overførsel til et indskud, pengene vil blive deponeret på den destinationskonto, du ser her, i stedet for at blive overført til den. Når du konverterer en overførsel til et indskud, pengene vil blive deponeret på de destinationskonti, du ser her, i stedet for at blive overført til dem.', - 'convert_select_sources' => 'For at fuldføre konverteringen, skal du indstille den nye kilde konto nedenfor.● For at fuldføre konverteringen, skal du indstille den nye kilde konti nedenfor.', - 'convert_select_destinations' => 'For at fuldføre konverteringen, skal du vælge den nye destination konto nedenfor.● For at fuldføre konverteringen, skal du vælge den nye destination konti nedenfor.', - 'converted_to_Withdrawal' => 'Transaktionen er blevet konverteret til en udbetaling', - 'converted_to_Deposit' => 'Transaktionen er blevet konverteret til et indskud', - 'converted_to_Transfer' => 'Transaktionen er blevet konverteret til en overførsel', - 'invalid_convert_selection' => 'Den valgte konto er allerede brugt i denne transaktion eller eksisterer ikke.', - 'source_or_dest_invalid' => 'Kan ikke finde de korrekte transaktionsdetaljer. Konvertering er ikke muligt.', - 'convert_to_withdrawal' => 'Konverter til en udbetaling', - 'convert_to_deposit' => 'Konverter til en indbetaling', - 'convert_to_transfer' => 'Konvertér til en overførsel', + 'convert_is_already_type_Withdrawal' => 'Denne transaktion er allerede en udbetaling', + 'convert_is_already_type_Deposit' => 'Denne transaktion er allerede en indbetaling', + 'convert_is_already_type_Transfer' => 'Denne transaktion er allerede en overførsel', + 'convert_to_Withdrawal' => 'Konverter ":description" til en udbetaling', + 'convert_to_Deposit' => 'Konverter ":description" til en indbetaling', + 'convert_to_Transfer' => 'Konverter ":description" til en overførsel', + 'convert_options_WithdrawalDeposit' => 'Konverter en udbetaling til en indbetaling', + 'convert_options_WithdrawalTransfer' => 'Konverter en udbetaling til en overførsel', + 'convert_options_DepositTransfer' => 'Konverter et indbetaling til en overførsel', + 'convert_options_DepositWithdrawal' => 'Konverter et indbetaling til en udbetaling', + 'convert_options_TransferWithdrawal' => 'Konverter en overførsel til en hævning', + 'convert_options_TransferDeposit' => 'Konverter en overførsel til en indbetaling', + 'convert_Withdrawal_to_deposit' => 'Konverter denne hævning til en indbetaling', + 'convert_Withdrawal_to_transfer' => 'Konverter denne udbetaling til en overførsel', + 'convert_Deposit_to_withdrawal' => 'Konverter dette indskud til en udbetaling', + 'convert_Deposit_to_transfer' => 'Konverter dette indskud til en overførsel', + 'convert_Transfer_to_deposit' => 'Konverter denne overførsel til en indbetaling', + 'convert_Transfer_to_withdrawal' => 'Konverter denne overførsel til en udbetaling', + 'convert_please_set_revenue_source' => 'Vælg venligst den indtægtskonto, hvor pengene kommer fra.', + 'convert_please_set_asset_destination' => 'Vælg venligst den aktivkonto, hvor pengene skal overføres til.', + 'convert_please_set_expense_destination' => 'Vælg venligst den udgiftskonto, hvor pengene skal flyttes til.', + 'convert_please_set_asset_source' => 'Vælg venligst aktivkontoen, hvor pengene kommer fra.', + 'convert_expl_w_d' => 'Ved konvertering fra en udbetaling til et indskud, vil pengene blive deponeret på den viste destinationskonto, i stedet for at blive trukket tilbage fra den. Ved konvertering fra en udbetaling til et indskud, vil pengene blive deponeret på de viste destinationskonti i stedet for at blive trukket tilbage fra dem.', + 'convert_expl_w_t' => 'Ved omregning af en udbetaling til en overførsel pengene vil blive overført væk fra kildekontoen til andre aktiver eller passiver i stedet for at blive brugt på den oprindelige omkostningskonto. Ved omregning af en udbetaling til en overførsel pengene vil blive overført væk fra kildekonti til andre aktiv- eller passivkonti i stedet for at blive brugt på de oprindelige omkostningskonti.', + 'convert_expl_d_w' => 'Ved konvertering af en indbetaling til en udbetaling, vil pengene blive trukket tilbage fra den viste kilde konto, i stedet for at blive deponeret i den. Ved konvertering af et depositum til en udbetaling, vil pengene blive trukket tilbage fra de viste kildekonti i stedet for at blive deponeret i dem.', + 'convert_expl_d_t' => 'Når du konverterer en indbetaling til en overførsel, pengene vil blive deponeret på den anførte destinationskonto fra en af dine aktiver eller passiver konto. Når du konverterer en indbetaling til en overførsel, pengene vil blive deponeret på de anførte destinationskonti fra et af dine aktiver eller passivkonti.', + 'convert_expl_t_w' => 'Når du konverterer en overførsel til en udbetaling, vil pengene blive brugt på den destinationskonto, du angiver her, i stedet for at blive overført væk. Når du konverterer en overførsel til en udbetaling, vil pengene blive brugt på de destinationskonti, du angiver her, i stedet for at blive overført væk.', + 'convert_expl_t_d' => 'Når du konverterer en overførsel til et indskud, pengene vil blive deponeret på den destinationskonto, du ser her, i stedet for at blive overført til den. Når du konverterer en overførsel til et indskud, pengene vil blive deponeret på de destinationskonti, du ser her, i stedet for at blive overført til dem.', + 'convert_select_sources' => 'For at fuldføre konverteringen, skal du indstille den nye kilde konto nedenfor.● For at fuldføre konverteringen, skal du indstille den nye kilde konti nedenfor.', + 'convert_select_destinations' => 'For at fuldføre konverteringen, skal du vælge den nye destination konto nedenfor.● For at fuldføre konverteringen, skal du vælge den nye destination konti nedenfor.', + 'converted_to_Withdrawal' => 'Transaktionen er blevet konverteret til en udbetaling', + 'converted_to_Deposit' => 'Transaktionen er blevet konverteret til et indskud', + 'converted_to_Transfer' => 'Transaktionen er blevet konverteret til en overførsel', + 'invalid_convert_selection' => 'Den valgte konto er allerede brugt i denne transaktion eller eksisterer ikke.', + 'source_or_dest_invalid' => 'Kan ikke finde de korrekte transaktionsdetaljer. Konvertering er ikke muligt.', + 'convert_to_withdrawal' => 'Konverter til en udbetaling', + 'convert_to_deposit' => 'Konverter til en indbetaling', + 'convert_to_transfer' => 'Konvertér til en overførsel', // create new stuff: - 'create_new_withdrawal' => 'Opret ny udbetaling', - 'create_new_deposit' => 'Opret ny indbetaling', - 'create_new_transfer' => 'Opret ny overførsel', - 'create_new_asset' => 'Opret ny aktivkonto', - 'create_new_liabilities' => 'Opret ny passiv', - 'create_new_expense' => 'Opret ny omkostningskonto', - 'create_new_revenue' => 'Opret ny indtægtskonto', - 'create_new_piggy_bank' => 'Opret ny sparegris', - 'create_new_bill' => 'Opret ny regning', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Opret ny udbetaling', + 'create_new_deposit' => 'Opret ny indbetaling', + 'create_new_transfer' => 'Opret ny overførsel', + 'create_new_asset' => 'Opret ny aktivkonto', + 'create_new_liabilities' => 'Opret ny passiv', + 'create_new_expense' => 'Opret ny omkostningskonto', + 'create_new_revenue' => 'Opret ny indtægtskonto', + 'create_new_piggy_bank' => 'Opret ny sparegris', + 'create_new_bill' => 'Opret ny regning', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Opret en ny valuta', - 'store_currency' => 'Gem ny valuta', - 'update_currency' => 'Opdater valuta', - 'new_default_currency' => ':name er nu standard valuta.', - 'cannot_delete_currency' => 'Kan ikke slette :name , fordi den stadig er i brug.', - 'cannot_delete_fallback_currency' => ':name er systemet fallback valuta og kan ikke slettes.', - 'cannot_disable_currency_journals' => 'Kan ikke deaktivere :name , da transaktionerne stadig bruger den.', - 'cannot_disable_currency_last_left' => 'Kan ikke deaktivere :name , fordi det er den sidste aktiverede valuta.', - 'cannot_disable_currency_account_meta' => 'Kan ikke deaktivere :name , fordi den bruges på aktivkonti.', - 'cannot_disable_currency_bills' => 'Kan ikke deaktivere :name fordi det bruges i regninger.', - 'cannot_disable_currency_recurring' => 'Kan ikke deaktivere :name fordi det bruges i tilbagevendende transaktioner.', - 'cannot_disable_currency_available_budgets' => 'Kan ikke deaktivere :name fordi det bruges i tilgængelige budgetter.', - 'cannot_disable_currency_budget_limits' => 'Kan ikke deaktivere :name fordi det bruges i budgetgrænser.', - 'cannot_disable_currency_current_default' => 'Kan ikke deaktivere :name fordi det er systemets standardvaluta.', - 'cannot_disable_currency_system_fallback' => 'Kan ikke deaktivere :name fordi det er systemets standardvaluta.', - 'disable_EUR_side_effects' => 'Euroen er systemets nødnødvaluta. Deaktivering af systemet kan have utilsigtede bivirkninger og kan annullere din garanti.', - 'deleted_currency' => 'Valuta :name slettet', - 'created_currency' => 'Valuta :name oprettet', - 'could_not_store_currency' => 'Kunne ikke gemme den nye valuta.', - 'updated_currency' => 'Valuta :name opdateret', - 'ask_site_owner' => 'Bed venligst :owner om at tilføje, fjerne eller redigere valutaer.', - 'currencies_intro' => 'Firefly III understøtter forskellige valutaer, som du kan indstille og aktivere her.', - 'make_default_currency' => 'Gør til standard', - 'default_currency' => 'standard', - 'currency_is_disabled' => 'Deaktiveret', - 'enable_currency' => 'Aktiver', - 'disable_currency' => 'Deaktivér', - 'currencies_default_disabled' => 'De fleste af disse valutaer er som standard deaktiveret. For at bruge dem, skal du først aktivere dem.', - 'currency_is_now_enabled' => 'Valuta ":name" er blevet aktiveret', - 'currency_is_now_disabled' => 'Valuta ":name" er blevet deaktiveret', + 'create_currency' => 'Opret en ny valuta', + 'store_currency' => 'Gem ny valuta', + 'update_currency' => 'Opdater valuta', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Kan ikke slette :name , fordi den stadig er i brug.', + 'cannot_delete_fallback_currency' => ':name er systemet fallback valuta og kan ikke slettes.', + 'cannot_disable_currency_journals' => 'Kan ikke deaktivere :name , da transaktionerne stadig bruger den.', + 'cannot_disable_currency_last_left' => 'Kan ikke deaktivere :name , fordi det er den sidste aktiverede valuta.', + 'cannot_disable_currency_account_meta' => 'Kan ikke deaktivere :name , fordi den bruges på aktivkonti.', + 'cannot_disable_currency_bills' => 'Kan ikke deaktivere :name fordi det bruges i regninger.', + 'cannot_disable_currency_recurring' => 'Kan ikke deaktivere :name fordi det bruges i tilbagevendende transaktioner.', + 'cannot_disable_currency_available_budgets' => 'Kan ikke deaktivere :name fordi det bruges i tilgængelige budgetter.', + 'cannot_disable_currency_budget_limits' => 'Kan ikke deaktivere :name fordi det bruges i budgetgrænser.', + 'cannot_disable_currency_current_default' => 'Kan ikke deaktivere :name fordi det er systemets standardvaluta.', + 'cannot_disable_currency_system_fallback' => 'Kan ikke deaktivere :name fordi det er systemets standardvaluta.', + 'disable_EUR_side_effects' => 'Euroen er systemets nødnødvaluta. Deaktivering af systemet kan have utilsigtede bivirkninger og kan annullere din garanti.', + 'deleted_currency' => 'Valuta :name slettet', + 'created_currency' => 'Valuta :name oprettet', + 'could_not_store_currency' => 'Kunne ikke gemme den nye valuta.', + 'updated_currency' => 'Valuta :name opdateret', + 'ask_site_owner' => 'Bed venligst :owner om at tilføje, fjerne eller redigere valutaer.', + 'currencies_intro' => 'Firefly III understøtter forskellige valutaer, som du kan indstille og aktivere her.', + 'make_default_currency' => 'Gør til standard', + 'default_currency' => 'standard', + 'currency_is_disabled' => 'Deaktiveret', + 'enable_currency' => 'Aktiver', + 'disable_currency' => 'Deaktivér', + 'currencies_default_disabled' => 'De fleste af disse valutaer er som standard deaktiveret. For at bruge dem, skal du først aktivere dem.', + 'currency_is_now_enabled' => 'Valuta ":name" er blevet aktiveret', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Valuta ":name" er blevet deaktiveret', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Obligatoriske felter', - 'optionalFields' => 'Valgfrie felter', - 'options' => 'Indstillinger', + 'mandatoryFields' => 'Obligatoriske felter', + 'optionalFields' => 'Valgfrie felter', + 'options' => 'Indstillinger', // budgets: - 'daily_budgets' => 'Daglige budgetter', - 'weekly_budgets' => 'Ugentlige budgetter', - 'monthly_budgets' => 'Månedlige budgetter', - 'quarterly_budgets' => 'Kvartalsvise budgetter', - 'half_year_budgets' => 'Halvårlige budgetter', - 'yearly_budgets' => 'Årlige budgetter', - 'other_budgets' => 'Brugerdefinerede tidsbegrænsede budgetter', - 'budget_limit_not_in_range' => 'Dette beløb gælder fra :start til :end:', - 'total_available_budget' => 'Samlet disponibelt budget (mellem :start og :end)', - 'total_available_budget_in_currency' => 'Samlet disponibelt budget i :currency', - 'see_below' => 'se nedenfor', - 'create_new_budget' => 'Opret et nyt budget', - 'store_new_budget' => 'Gem nyt budget', - 'stored_new_budget' => 'Gemt nyt budget ":name"', - 'available_between' => 'Tilgængelig mellem :start og :end', - 'transactionsWithoutBudget' => 'Udgifter uden budget', - 'transactions_no_budget' => 'Udgifter uden budget mellem :start og :end', - 'spent_between' => 'Allerede brugt mellem :start og :end', - 'set_available_amount' => 'Angiv disponibelt beløb', - 'update_available_amount' => 'Opdater disponibelt beløb', - 'ab_basic_modal_explain' => 'Brug denne formular til at angive, hvor meget du forventer at kunne budgettere (i alt, i :currency) i den angivne periode.', - 'createBudget' => 'Nyt budget', - 'invalid_currency' => 'Dette er en ugyldig valuta', - 'invalid_amount' => 'Indtast et beløb', - 'set_ab' => 'Det disponible budgetbeløb er fastsat', - 'updated_ab' => 'Det disponible budgetbeløb er blevet opdateret', - 'deleted_ab' => 'Det disponible budgetbeløb er blevet slettet', - 'deleted_bl' => 'Det budgetterede beløb er blevet fjernet', - 'alt_currency_ab_create' => 'Sæt det tilgængelige budget i en anden valuta', - 'bl_create_btn' => 'Sæt budget i en anden valuta', - 'inactiveBudgets' => 'Inaktive budgetter', - 'without_budget_between' => 'Transaktioner uden et budget mellem :start og :end', - 'delete_budget' => 'Slet budget ":name"', - 'deleted_budget' => 'Slettet budget ":name"', - 'edit_budget' => 'Rediger budget ":name"', - 'updated_budget' => 'Opdateret budget ":name"', - 'update_amount' => 'Opdater beløb', - 'update_budget' => 'Opdater budget', - 'update_budget_amount_range' => 'Opdatering (forventet) disponibelt beløb mellem :start og :end', - 'set_budget_limit_title' => 'Sæt budgetteret beløb for budget :budget mellem :start og :end', - 'set_budget_limit' => 'Sæt budgetteret beløb', - 'budget_period_navigator' => 'Periode navigator', - 'info_on_available_amount' => 'Hvad har jeg til rådighed?', - 'available_amount_indication' => 'Brug disse beløb til at få en angivelse af, hvad dit samlede budget kan være.', - 'suggested' => 'Foreslået', - 'average_between' => 'Gennemsnit mellem :start og :end', - 'transferred_in' => 'Overført (ind)', - 'transferred_away' => 'Overført (ud)', - 'auto_budget_none' => 'Ingen auto-budget', - 'auto_budget_reset' => 'Angiv et fast beløb for hver periode', - 'auto_budget_rollover' => 'Tilføj et beløb hver periode', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Daglig', - 'auto_budget_period_weekly' => 'Ugentlig', - 'auto_budget_period_monthly' => 'Månedlig', - 'auto_budget_period_quarterly' => 'Kvartalsvis', - 'auto_budget_period_half_year' => 'Hvert halve år', - 'auto_budget_period_yearly' => 'Årlig', - 'auto_budget_help' => 'Du kan læse mere om denne funktion i hjælpen. Klik på ikonet øverst til højre (?)', - 'auto_budget_reset_icon' => 'Dette budget vil blive fastsat periodisk', - 'auto_budget_rollover_icon' => 'Budgettet vil stige med jævne mellemrum', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Fjern budgetteret beløb i :currency', + 'daily_budgets' => 'Daglige budgetter', + 'weekly_budgets' => 'Ugentlige budgetter', + 'monthly_budgets' => 'Månedlige budgetter', + 'quarterly_budgets' => 'Kvartalsvise budgetter', + 'half_year_budgets' => 'Halvårlige budgetter', + 'yearly_budgets' => 'Årlige budgetter', + 'other_budgets' => 'Brugerdefinerede tidsbegrænsede budgetter', + 'budget_limit_not_in_range' => 'Dette beløb gælder fra :start til :end:', + 'total_available_budget' => 'Samlet disponibelt budget (mellem :start og :end)', + 'total_available_budget_in_currency' => 'Samlet disponibelt budget i :currency', + 'see_below' => 'se nedenfor', + 'create_new_budget' => 'Opret et nyt budget', + 'store_new_budget' => 'Gem nyt budget', + 'stored_new_budget' => 'Gemt nyt budget ":name"', + 'available_between' => 'Tilgængelig mellem :start og :end', + 'transactionsWithoutBudget' => 'Udgifter uden budget', + 'transactions_no_budget' => 'Udgifter uden budget mellem :start og :end', + 'spent_between' => 'Allerede brugt mellem :start og :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Angiv disponibelt beløb', + 'update_available_amount' => 'Opdater disponibelt beløb', + 'ab_basic_modal_explain' => 'Brug denne formular til at angive, hvor meget du forventer at kunne budgettere (i alt, i :currency) i den angivne periode.', + 'createBudget' => 'Nyt budget', + 'invalid_currency' => 'Dette er en ugyldig valuta', + 'invalid_amount' => 'Indtast et beløb', + 'set_ab' => 'Det disponible budgetbeløb er fastsat', + 'updated_ab' => 'Det disponible budgetbeløb er blevet opdateret', + 'deleted_ab' => 'Det disponible budgetbeløb er blevet slettet', + 'deleted_bl' => 'Det budgetterede beløb er blevet fjernet', + 'alt_currency_ab_create' => 'Sæt det tilgængelige budget i en anden valuta', + 'bl_create_btn' => 'Sæt budget i en anden valuta', + 'inactiveBudgets' => 'Inaktive budgetter', + 'without_budget_between' => 'Transaktioner uden et budget mellem :start og :end', + 'delete_budget' => 'Slet budget ":name"', + 'deleted_budget' => 'Slettet budget ":name"', + 'edit_budget' => 'Rediger budget ":name"', + 'updated_budget' => 'Opdateret budget ":name"', + 'update_amount' => 'Opdater beløb', + 'update_budget' => 'Opdater budget', + 'update_budget_amount_range' => 'Opdatering (forventet) disponibelt beløb mellem :start og :end', + 'set_budget_limit_title' => 'Sæt budgetteret beløb for budget :budget mellem :start og :end', + 'set_budget_limit' => 'Sæt budgetteret beløb', + 'budget_period_navigator' => 'Periode navigator', + 'info_on_available_amount' => 'Hvad har jeg til rådighed?', + 'available_amount_indication' => 'Brug disse beløb til at få en angivelse af, hvad dit samlede budget kan være.', + 'suggested' => 'Foreslået', + 'average_between' => 'Gennemsnit mellem :start og :end', + 'transferred_in' => 'Overført (ind)', + 'transferred_away' => 'Overført (ud)', + 'auto_budget_none' => 'Ingen auto-budget', + 'auto_budget_reset' => 'Angiv et fast beløb for hver periode', + 'auto_budget_rollover' => 'Tilføj et beløb hver periode', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Daglig', + 'auto_budget_period_weekly' => 'Ugentlig', + 'auto_budget_period_monthly' => 'Månedlig', + 'auto_budget_period_quarterly' => 'Kvartalsvis', + 'auto_budget_period_half_year' => 'Hvert halve år', + 'auto_budget_period_yearly' => 'Årlig', + 'auto_budget_help' => 'Du kan læse mere om denne funktion i hjælpen. Klik på ikonet øverst til højre (?)', + 'auto_budget_reset_icon' => 'Dette budget vil blive fastsat periodisk', + 'auto_budget_rollover_icon' => 'Budgettet vil stige med jævne mellemrum', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Fjern budgetteret beløb i :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Ikke forventet denne periode', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Ikke (endnu)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Faktura matcher transaktioner mellem :low og :high.', - 'running_again_loss' => 'Tidligere tilknyttede transaktioner til denne regning kan miste deres forbindelse, hvis de (ikke længere) matcher reglen.', - 'bill_related_rules' => 'Regler relateret til denne regning', - 'repeats' => 'Gentagelser', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Tilsluttede transaktioner', - 'auto_match_on' => 'Automatisk matchet af Firefly III', - 'auto_match_off' => 'Ikke automatisk matchet af Firefly III', - 'next_expected_match' => 'Næste forventede match', - 'delete_bill' => 'Slet regning ":name"', - 'deleted_bill' => 'Slettede regning ":name"', - 'edit_bill' => 'Rediger regning ":name"', - 'more' => 'Mere', - 'rescan_old' => 'Kør regler igen, på alle transaktioner', - 'update_bill' => 'Opdater regning', - 'updated_bill' => 'Opdateret regning ":name"', - 'store_new_bill' => 'Gem ny regning', - 'stored_new_bill' => 'Gemt nyt regning":name"', - 'cannot_scan_inactive_bill' => 'Inaktive regninger kan ikke scannes.', - 'rescanned_bill' => 'Gen -scannede alt og linkede :count transaktion til regningen.|Gen -scannede alt, og linkede :count transaktioner til regningerne.', - 'average_bill_amount_year' => 'Gennemsnitligt regningsbeløb (:year)', - 'average_bill_amount_overall' => 'Gennemsnitligt regningsbeløb (generelt)', - 'bill_is_active' => 'Faktura er aktiv', - 'bill_expected_between' => 'Forventet mellem :start og :end', - 'bill_will_automatch' => 'Faktura vil automatisk blive knyttet til matchende transaktioner', - 'skips_over' => 'springer over', - 'bill_store_error' => 'En uventet fejl opstod under lagring af din nye regning. Kontroller logfilerne', - 'list_inactive_rule' => 'inaktiv regel', - 'bill_edit_rules' => 'Firefly III vil forsøge at redigere reglen relateret til denne regning også. Hvis du selv har redigeret denne regel, vil Firefly III dog ikke ændre noget.|Firefly III vil forsøge at redigere :count regler relateret til denne regning. Hvis du har redigeret disse regler selv dog, Firefly III vil ikke ændre noget.', - 'bill_expected_date' => 'Forventede :date', - 'bill_expected_date_js' => 'Forventede {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Betalt {date}', - 'bill_repeats_weekly' => 'Gentages ugentligt', - 'bill_repeats_monthly' => 'Gentages månedligt', - 'bill_repeats_quarterly' => 'Gentages kvartalsvis', - 'bill_repeats_half-year' => 'Gentages hvert halve år', - 'bill_repeats_yearly' => 'Gentages årligt', - 'bill_repeats_weekly_other' => 'Gentages hver anden uge', - 'bill_repeats_monthly_other' => 'Gentages hver anden måned', - 'bill_repeats_quarterly_other' => 'Gentages hvert andet kvartal', - 'bill_repeats_half-year_other' => 'Gentages årligt', - 'bill_repeats_yearly_other' => 'Gentages hvert andet år', - 'bill_repeats_weekly_skip' => 'Gentages hver {skip} uge', - 'bill_repeats_monthly_skip' => 'Gentages hver {skip} måned', - 'bill_repeats_quarterly_skip' => 'Gentages hver {skip} kvartal', - 'bill_repeats_half-year_skip' => 'Gentages hvert {skip} halve år', - 'bill_repeats_yearly_skip' => 'Gentages hvert {skip} år', - 'subscriptions' => 'Abonnementer', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'For evigt', - 'extension_date_is' => 'Udvidelsesdato er {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Ikke forventet denne periode', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Ikke (endnu)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Faktura matcher transaktioner mellem :low og :high.', + 'running_again_loss' => 'Tidligere tilknyttede transaktioner til denne regning kan miste deres forbindelse, hvis de (ikke længere) matcher reglen.', + 'bill_related_rules' => 'Regler relateret til denne regning', + 'repeats' => 'Gentagelser', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Tilsluttede transaktioner', + 'auto_match_on' => 'Automatisk matchet af Firefly III', + 'auto_match_off' => 'Ikke automatisk matchet af Firefly III', + 'next_expected_match' => 'Næste forventede match', + 'delete_bill' => 'Slet regning ":name"', + 'deleted_bill' => 'Slettede regning ":name"', + 'edit_bill' => 'Rediger regning ":name"', + 'more' => 'Mere', + 'rescan_old' => 'Kør regler igen, på alle transaktioner', + 'update_bill' => 'Opdater regning', + 'updated_bill' => 'Opdateret regning ":name"', + 'store_new_bill' => 'Gem ny regning', + 'stored_new_bill' => 'Gemt nyt regning":name"', + 'cannot_scan_inactive_bill' => 'Inaktive regninger kan ikke scannes.', + 'rescanned_bill' => 'Gen -scannede alt og linkede :count transaktion til regningen.|Gen -scannede alt, og linkede :count transaktioner til regningerne.', + 'average_bill_amount_year' => 'Gennemsnitligt regningsbeløb (:year)', + 'average_bill_amount_overall' => 'Gennemsnitligt regningsbeløb (generelt)', + 'bill_is_active' => 'Faktura er aktiv', + 'bill_expected_between' => 'Forventet mellem :start og :end', + 'bill_will_automatch' => 'Faktura vil automatisk blive knyttet til matchende transaktioner', + 'skips_over' => 'springer over', + 'bill_store_error' => 'En uventet fejl opstod under lagring af din nye regning. Kontroller logfilerne', + 'list_inactive_rule' => 'inaktiv regel', + 'bill_edit_rules' => 'Firefly III vil forsøge at redigere reglen relateret til denne regning også. Hvis du selv har redigeret denne regel, vil Firefly III dog ikke ændre noget.|Firefly III vil forsøge at redigere :count regler relateret til denne regning. Hvis du har redigeret disse regler selv dog, Firefly III vil ikke ændre noget.', + 'bill_expected_date' => 'Forventede :date', + 'bill_expected_date_js' => 'Forventede {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Betalt {date}', + 'bill_repeats_weekly' => 'Gentages ugentligt', + 'bill_repeats_monthly' => 'Gentages månedligt', + 'bill_repeats_quarterly' => 'Gentages kvartalsvis', + 'bill_repeats_half-year' => 'Gentages hvert halve år', + 'bill_repeats_yearly' => 'Gentages årligt', + 'bill_repeats_weekly_other' => 'Gentages hver anden uge', + 'bill_repeats_monthly_other' => 'Gentages hver anden måned', + 'bill_repeats_quarterly_other' => 'Gentages hvert andet kvartal', + 'bill_repeats_half-year_other' => 'Gentages årligt', + 'bill_repeats_yearly_other' => 'Gentages hvert andet år', + 'bill_repeats_weekly_skip' => 'Gentages hver {skip} uge', + 'bill_repeats_monthly_skip' => 'Gentages hver {skip} måned', + 'bill_repeats_quarterly_skip' => 'Gentages hver {skip} kvartal', + 'bill_repeats_half-year_skip' => 'Gentages hvert {skip} halve år', + 'bill_repeats_yearly_skip' => 'Gentages hvert {skip} år', + 'subscriptions' => 'Abonnementer', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'For evigt', + 'extension_date_is' => 'Udvidelsesdato er {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'Du har :count inaktive (arkiveret) konto, som du kan se på denne separate side.|Du har :count inaktive (arkiveret) konti, som du kan se på denne separate side.', - 'all_accounts_inactive' => 'Dette er dine inaktive konti.', - 'active_account_link' => 'Dette link går tilbage til dine aktive konti.', - 'account_missing_transaction' => 'Konto #:id (":name") kan ikke ses direkte, men Firefly mangler omdirigeringsoplysninger.', - 'cc_monthly_payment_date_help' => 'Vælg et hvilket som helst år og en hvilken som helst måned, det vil blive ignoreret alligevel. Kun dagen i måneden er relevant.', - 'details_for_asset' => 'Detaljer for aktivkonto ":name"', - 'details_for_expense' => 'Detaljer for udgiftskonto":name"', - 'details_for_revenue' => 'Detaljer for indtægtskonto":name"', - 'details_for_cash' => 'Detaljer for kontantkonto ":name"', - 'store_new_asset_account' => 'Gem ny aktivkonto', - 'store_new_expense_account' => 'Gem ny omkostningskonto', - 'store_new_revenue_account' => 'Gem ny indtægtskonto', - 'edit_asset_account' => 'Rediger aktiv konto ":name"', - 'edit_expense_account' => 'Rediger omkostningskonto ":name"', - 'edit_revenue_account' => 'Rediger indtægtskonto ":name"', - 'delete_asset_account' => 'Slet aktiv konto ":name"', - 'delete_expense_account' => 'Slet omkostningskonto ":name"', - 'delete_revenue_account' => 'Slet indtægtskonto ":name"', - 'delete_liabilities_account' => 'Slet passiv ":name"', - 'asset_deleted' => 'Kontoen ":name" blev slettet', - 'account_deleted' => 'Kontoen ":name" blev slettet', - 'expense_deleted' => 'Udgiftskontoen ":name" blev slettet', - 'revenue_deleted' => 'Indtægtskontoen ":name" blev slettet', - 'update_asset_account' => 'Opdater konto', - 'update_undefined_account' => 'Opdater konto', - 'update_liabilities_account' => 'Opdater ansvarskonto', - 'update_expense_account' => 'Opdater udgiftskonto', - 'update_revenue_account' => 'Opdater indtægtskonto', - 'make_new_asset_account' => 'Opret ny konto', - 'make_new_expense_account' => 'Opret ny udgiftskonto', - 'make_new_revenue_account' => 'Opret ny indtægtskonto', - 'make_new_liabilities_account' => 'Opret en ny ansvarskonto', - 'asset_accounts' => 'Aktivkonti', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Aktivkonti (inaktiv)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Udgiftskonti', - 'expense_accounts_inactive' => 'Udgiftskonti (inaktiv)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Indtægtskonti', - 'revenue_accounts_inactive' => 'Indtægtskonti (inaktive)', - 'cash_accounts' => 'Kontant konti', - 'Cash account' => 'Kontant konto', - 'liabilities_accounts' => 'Gæld', - 'liabilities_accounts_inactive' => 'Gæld (inaktiv)', - 'reconcile_account' => 'Afstem konto ":account"', - 'overview_of_reconcile_modal' => 'Overblik af afstemning', - 'delete_reconciliation' => 'Slet afstemning', - 'update_reconciliation' => 'Opdater afstemning', - 'amount_cannot_be_zero' => 'Beløbet kan ikke være 0', - 'end_of_reconcile_period' => 'Slut på afstemningsperiode: :period', - 'start_of_reconcile_period' => 'Start på afstemningsperiode: :period', - 'start_balance' => 'Start saldo', - 'end_balance' => 'Slut saldo', - 'update_balance_dates_instruction' => 'Afpas beløber og datoer herover med dit kontoudtog og tryk på "Start afstemning"', - 'select_transactions_instruction' => 'Vælg de transaktioner, der vises på dit kontoudtog.', - 'select_range_and_balance' => 'Kontroller først datointerval og beløb. Tryk derefter på "Start afstemning"', - 'date_change_instruction' => 'Hvis du ændrer datointervallet nu, vil nuværende fremskridt gå tabt.', - 'update_selection' => 'Opdater valgte', - 'store_reconcile' => 'Gem afstemning', - 'reconciliation_transaction' => 'Afstem transaktion', - 'Reconciliation' => 'Afstemning', - 'reconciliation' => 'Afstemning', - 'reconcile_options' => 'Indstillinger for afstemning', - 'reconcile_range' => 'Afstemningsinterval', - 'start_reconcile' => 'Start afstemning', - 'cash_account_type' => 'Kontant', - 'cash' => 'kontant', - 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', - 'account_type' => 'Account type', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'New account ":name" stored!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => 'Opdateret konto ":name"', - 'updated_account_js' => 'Opdateret konto "{title}".', - 'credit_card_options' => 'Credit card options', - 'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".', - 'no_transactions_period' => 'Der er ingen transaktioner (i denne periode).', - 'no_data_for_chart' => 'Der er ikke nok information (endnu) til at generere dette diagram.', - 'select_at_least_one_account' => 'Please select at least one asset account', - 'select_at_least_one_category' => 'Vælg venligst mindst én kategori', - 'select_at_least_one_budget' => 'Vælg venligst mindst et budget', - 'select_at_least_one_tag' => 'Vælg venligst mindst et tag', - 'select_at_least_one_expense' => 'Vælg venligst mindst én kombination af udgifter/indtægtskonti. Hvis du ikke har nogen (listen er tom) er denne rapport ikke tilgængelig.', - 'account_default_currency' => 'Dette vil være den standard valuta, der er tilknyttet denne konto.', - 'reconcile_has_more' => 'Din Firefly III hovedbog holder flere penge end din bank angiver du bør have. Der er flere muligheder. Vælg venligst hvad der skal gøres. Tryk derefter på "Bekræft afstemning".', - 'reconcile_has_less' => 'Din Firefly III hovedbog holder færre penge end din bank angiver du bør have. Der er flere muligheder. Vælg venligst hvad der skal gøres. Tryk derefter på "Bekræft afstemning".', - 'reconcile_is_equal' => 'Din firefly III hovedbog og dine kontoudtog stemmer. Der er intet at gøre. Tryk på "Bekræft afstemning" for at bekræfte dit input.', - 'create_pos_reconcile_transaction' => 'Ryd de valgte transaktioner, og opret en korrektion, der tilføjer :amount til denne aktivkonto.', - 'create_neg_reconcile_transaction' => 'Ryd de valgte transaktioner, og opret en korrektion, der fjerner :amount fra denne aktivkonto.', - 'reconcile_do_nothing' => 'Ryd de valgte transaktioner, uden at korrigere.', - 'reconcile_go_back' => 'Du kan altid redigere eller slette en korrektion senere.', - 'must_be_asset_account' => 'Du kan kun afstemme aktivkonti', - 'reconciliation_stored' => 'Afstemning gemt', - 'reconciliation_error' => 'På grund af en fejl blev transaktionerne markeret som afstemt, men korrektionen blev ikke gemt: :error.', - 'reconciliation_transaction_title' => 'Afstemning (:from til :to)', - 'sum_of_reconciliation' => 'Sum af korrektionen', - 'reconcile_this_account' => 'Afstem denne konto', - 'reconcile' => 'Afstem', - 'show' => 'Vis', - 'confirm_reconciliation' => 'Bekræft afstemning', - 'submitted_start_balance' => 'Indsendt start saldo', - 'selected_transactions' => 'Valgte transaktioner (:count)', - 'already_cleared_transactions' => 'Already cleared transactions (:count)', - 'submitted_end_balance' => 'Indsendt slut saldo', - 'initial_balance_description' => 'Start saldo for ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'ukendt', - 'interest_calc_daily' => 'Pr. dag', - 'interest_calc_monthly' => 'Pr. måned', - 'interest_calc_yearly' => 'Pr. år', - 'interest_calc_weekly' => 'Pr. uge', - 'interest_calc_half-year' => 'Hvert halve år', - 'interest_calc_quarterly' => 'Pr. kvartal', - 'initial_balance_account' => 'Start saldo for :account', - 'list_options' => 'Vis valgmuligheder', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'Du har :count inaktive (arkiveret) konto, som du kan se på denne separate side.|Du har :count inaktive (arkiveret) konti, som du kan se på denne separate side.', + 'all_accounts_inactive' => 'Dette er dine inaktive konti.', + 'active_account_link' => 'Dette link går tilbage til dine aktive konti.', + 'account_missing_transaction' => 'Konto #:id (":name") kan ikke ses direkte, men Firefly mangler omdirigeringsoplysninger.', + 'cc_monthly_payment_date_help' => 'Vælg et hvilket som helst år og en hvilken som helst måned, det vil blive ignoreret alligevel. Kun dagen i måneden er relevant.', + 'details_for_asset' => 'Detaljer for aktivkonto ":name"', + 'details_for_expense' => 'Detaljer for udgiftskonto":name"', + 'details_for_revenue' => 'Detaljer for indtægtskonto":name"', + 'details_for_cash' => 'Detaljer for kontantkonto ":name"', + 'store_new_asset_account' => 'Gem ny aktivkonto', + 'store_new_expense_account' => 'Gem ny omkostningskonto', + 'store_new_revenue_account' => 'Gem ny indtægtskonto', + 'edit_asset_account' => 'Rediger aktiv konto ":name"', + 'edit_expense_account' => 'Rediger omkostningskonto ":name"', + 'edit_revenue_account' => 'Rediger indtægtskonto ":name"', + 'delete_asset_account' => 'Slet aktiv konto ":name"', + 'delete_expense_account' => 'Slet omkostningskonto ":name"', + 'delete_revenue_account' => 'Slet indtægtskonto ":name"', + 'delete_liabilities_account' => 'Slet passiv ":name"', + 'asset_deleted' => 'Kontoen ":name" blev slettet', + 'account_deleted' => 'Kontoen ":name" blev slettet', + 'expense_deleted' => 'Udgiftskontoen ":name" blev slettet', + 'revenue_deleted' => 'Indtægtskontoen ":name" blev slettet', + 'update_asset_account' => 'Opdater konto', + 'update_undefined_account' => 'Opdater konto', + 'update_liabilities_account' => 'Opdater ansvarskonto', + 'update_expense_account' => 'Opdater udgiftskonto', + 'update_revenue_account' => 'Opdater indtægtskonto', + 'make_new_asset_account' => 'Opret ny konto', + 'make_new_expense_account' => 'Opret ny udgiftskonto', + 'make_new_revenue_account' => 'Opret ny indtægtskonto', + 'make_new_liabilities_account' => 'Opret en ny ansvarskonto', + 'asset_accounts' => 'Aktivkonti', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Aktivkonti (inaktiv)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Udgiftskonti', + 'expense_accounts_inactive' => 'Udgiftskonti (inaktiv)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Indtægtskonti', + 'revenue_accounts_inactive' => 'Indtægtskonti (inaktive)', + 'cash_accounts' => 'Kontant konti', + 'Cash account' => 'Kontant konto', + 'liabilities_accounts' => 'Gæld', + 'liabilities_accounts_inactive' => 'Gæld (inaktiv)', + 'reconcile_account' => 'Afstem konto ":account"', + 'overview_of_reconcile_modal' => 'Overblik af afstemning', + 'delete_reconciliation' => 'Slet afstemning', + 'update_reconciliation' => 'Opdater afstemning', + 'amount_cannot_be_zero' => 'Beløbet kan ikke være 0', + 'end_of_reconcile_period' => 'Slut på afstemningsperiode: :period', + 'start_of_reconcile_period' => 'Start på afstemningsperiode: :period', + 'start_balance' => 'Start saldo', + 'end_balance' => 'Slut saldo', + 'update_balance_dates_instruction' => 'Afpas beløber og datoer herover med dit kontoudtog og tryk på "Start afstemning"', + 'select_transactions_instruction' => 'Vælg de transaktioner, der vises på dit kontoudtog.', + 'select_range_and_balance' => 'Kontroller først datointerval og beløb. Tryk derefter på "Start afstemning"', + 'date_change_instruction' => 'Hvis du ændrer datointervallet nu, vil nuværende fremskridt gå tabt.', + 'update_selection' => 'Opdater valgte', + 'store_reconcile' => 'Gem afstemning', + 'reconciliation_transaction' => 'Afstem transaktion', + 'Reconciliation' => 'Afstemning', + 'reconciliation' => 'Afstemning', + 'reconcile_options' => 'Indstillinger for afstemning', + 'reconcile_range' => 'Afstemningsinterval', + 'start_reconcile' => 'Start afstemning', + 'cash_account_type' => 'Kontant', + 'cash' => 'kontant', + 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', + 'account_type' => 'Account type', + 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => 'New account ":name" stored!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => 'Opdateret konto ":name"', + 'updated_account_js' => 'Opdateret konto "{title}".', + 'credit_card_options' => 'Credit card options', + 'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".', + 'no_transactions_period' => 'Der er ingen transaktioner (i denne periode).', + 'no_data_for_chart' => 'Der er ikke nok information (endnu) til at generere dette diagram.', + 'select_at_least_one_account' => 'Please select at least one asset account', + 'select_at_least_one_category' => 'Vælg venligst mindst én kategori', + 'select_at_least_one_budget' => 'Vælg venligst mindst et budget', + 'select_at_least_one_tag' => 'Vælg venligst mindst et tag', + 'select_at_least_one_expense' => 'Vælg venligst mindst én kombination af udgifter/indtægtskonti. Hvis du ikke har nogen (listen er tom) er denne rapport ikke tilgængelig.', + 'account_default_currency' => 'Dette vil være den standard valuta, der er tilknyttet denne konto.', + 'reconcile_has_more' => 'Din Firefly III hovedbog holder flere penge end din bank angiver du bør have. Der er flere muligheder. Vælg venligst hvad der skal gøres. Tryk derefter på "Bekræft afstemning".', + 'reconcile_has_less' => 'Din Firefly III hovedbog holder færre penge end din bank angiver du bør have. Der er flere muligheder. Vælg venligst hvad der skal gøres. Tryk derefter på "Bekræft afstemning".', + 'reconcile_is_equal' => 'Din firefly III hovedbog og dine kontoudtog stemmer. Der er intet at gøre. Tryk på "Bekræft afstemning" for at bekræfte dit input.', + 'create_pos_reconcile_transaction' => 'Ryd de valgte transaktioner, og opret en korrektion, der tilføjer :amount til denne aktivkonto.', + 'create_neg_reconcile_transaction' => 'Ryd de valgte transaktioner, og opret en korrektion, der fjerner :amount fra denne aktivkonto.', + 'reconcile_do_nothing' => 'Ryd de valgte transaktioner, uden at korrigere.', + 'reconcile_go_back' => 'Du kan altid redigere eller slette en korrektion senere.', + 'must_be_asset_account' => 'Du kan kun afstemme aktivkonti', + 'reconciliation_stored' => 'Afstemning gemt', + 'reconciliation_error' => 'På grund af en fejl blev transaktionerne markeret som afstemt, men korrektionen blev ikke gemt: :error.', + 'reconciliation_transaction_title' => 'Afstemning (:from til :to)', + 'sum_of_reconciliation' => 'Sum af korrektionen', + 'reconcile_this_account' => 'Afstem denne konto', + 'reconcile' => 'Afstem', + 'show' => 'Vis', + 'confirm_reconciliation' => 'Bekræft afstemning', + 'submitted_start_balance' => 'Indsendt start saldo', + 'selected_transactions' => 'Valgte transaktioner (:count)', + 'already_cleared_transactions' => 'Already cleared transactions (:count)', + 'submitted_end_balance' => 'Indsendt slut saldo', + 'initial_balance_description' => 'Start saldo for ":account"', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'ukendt', + 'interest_calc_daily' => 'Pr. dag', + 'interest_calc_monthly' => 'Pr. måned', + 'interest_calc_yearly' => 'Pr. år', + 'interest_calc_weekly' => 'Pr. uge', + 'interest_calc_half-year' => 'Hvert halve år', + 'interest_calc_quarterly' => 'Pr. kvartal', + 'initial_balance_account' => 'Start saldo for :account', + 'list_options' => 'Vis valgmuligheder', // categories: - 'new_category' => 'Ny kategori', - 'create_new_category' => 'Opret ny kategori', - 'without_category' => 'Uden en kategori', - 'update_category' => 'Opdater kategori', - 'updated_category' => 'Kategori ":name" er blevet opdateret', - 'categories' => 'Kategorier', - 'edit_category' => 'Rediger kategori ":name"', - 'no_category' => '(ingen kategori)', - 'unknown_category_plain' => 'No category', - 'category' => 'Kategori', - 'delete_category' => 'Slet kategori ":name"', - 'deleted_category' => 'Kategori ":name" er blevet slettet', - 'store_category' => 'Gem ny kategori', - 'stored_category' => 'Stored new category ":name"', - 'without_category_between' => 'Without category between :start and :end', + 'new_category' => 'Ny kategori', + 'create_new_category' => 'Opret ny kategori', + 'without_category' => 'Uden en kategori', + 'update_category' => 'Opdater kategori', + 'updated_category' => 'Kategori ":name" er blevet opdateret', + 'categories' => 'Kategorier', + 'edit_category' => 'Rediger kategori ":name"', + 'no_category' => '(ingen kategori)', + 'unknown_category_plain' => 'No category', + 'category' => 'Kategori', + 'delete_category' => 'Slet kategori ":name"', + 'deleted_category' => 'Kategori ":name" er blevet slettet', + 'store_category' => 'Gem ny kategori', + 'stored_category' => 'Stored new category ":name"', + 'without_category_between' => 'Without category between :start and :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Opdater udbetaling', - 'update_deposit' => 'Opdater indbetaling', - 'update_transaction' => 'Opdater transaktion', - 'update_transfer' => 'Opdater overførsel', - 'updated_withdrawal' => 'Opdateret udbetaling ":description"', - 'updated_deposit' => 'Opdateret indbetaling ":description"', - 'updated_transfer' => 'Opdateret overførsel ":description"', - 'no_changes_withdrawal' => 'Udbetalingen ":description" blev ikke ændret.', - 'no_changes_deposit' => 'Indbetalingen ":description" blev ikke ændret.', - 'no_changes_transfer' => 'Overførslen ":description" blev ikke ændret.', - 'delete_withdrawal' => 'Slet udbetalingen ":description"', - 'delete_deposit' => 'Slet indbetalingen ":description"', - 'delete_transfer' => 'Slet overførslen ":description"', - 'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"', - 'deleted_deposit' => 'Successfully deleted deposit ":description"', - 'deleted_transfer' => 'Successfully deleted transfer ":description"', - 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', - 'stored_journal' => 'Successfully created new transaction ":description"', - 'stored_journal_no_descr' => 'Successfully created your new transaction', - 'updated_journal_no_descr' => 'Successfully updated your transaction', - 'select_transactions' => 'Select transactions', - 'rule_group_select_transactions' => 'Apply ":title" to transactions', - 'rule_select_transactions' => 'Apply ":title" to transactions', - 'stop_selection' => 'Stop selecting transactions', - 'reconcile_selected' => 'Reconcile', - 'mass_delete_journals' => 'Delete a number of transactions', - 'mass_edit_journals' => 'Edit a number of transactions', - 'mass_bulk_journals' => 'Bulk edit a number of transactions', - 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', - 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', - 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', - 'no_bulk_category' => 'Don\'t update category', - 'no_bulk_budget' => 'Don\'t update budget', - 'no_bulk_tags' => 'Don\'t update tag(s)', - 'replace_with_these_tags' => 'Replace with these tags', - 'append_these_tags' => 'Add these tags', - 'mass_edit' => 'Edit selected individually', - 'bulk_edit' => 'Edit selected in bulk', - 'mass_delete' => 'Delete selected', - 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', - 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', - 'no_budget' => '(no budget)', - 'no_bill' => '(no bill)', - 'account_per_budget' => 'Konto pr. budget', - 'account_per_category' => 'Konto pr. kategori', - 'create_new_object' => 'Opret', - 'empty' => '(tom)', - 'all_other_budgets' => '(alle andre budgetter)', - 'all_other_accounts' => '(alle andre konti)', - 'expense_per_source_account' => 'Udgifter pr. kildekonto', - 'expense_per_destination_account' => 'Udgifter pr. destination konto', - 'income_per_destination_account' => 'Income per destination account', - 'spent_in_specific_category' => 'Spent in category ":category"', - 'earned_in_specific_category' => 'Earned in category ":category"', - 'spent_in_specific_tag' => 'Spent in tag ":tag"', - 'earned_in_specific_tag' => 'Earned in tag ":tag"', - 'income_per_source_account' => 'Income per source account', - 'average_spending_per_destination' => 'Average expense per destination account', - 'average_spending_per_source' => 'Gennemsnitlig udgift pr. kildekonto', - 'average_earning_per_source' => 'Gennemsnitlig indtjening pr. kildekonto', - 'average_earning_per_destination' => 'Gennemsnitlig indtjening pr. destinationskonto', - 'account_per_tag' => 'Konto pr. tag', - 'tag_report_expenses_listed_once' => 'Udgifter og indtægter bliver aldrig vist flere gange. Hvis en transaktion har flere tags, bliver den kun vist under et af sine tags. Det ligner måske at denne liste mangler data, men beløbene vil være korrekte.', - 'double_report_expenses_charted_once' => 'Udgifter og indtægter bliver aldrig vist flere gange. Hvis en transaktion har flere tags, bliver den kun vist under et af sine tags. Det ligner måske at denne graf mangler data, men beløbene vil være korrekte.', - 'tag_report_chart_single_tag' => 'Denne graf viser ét enkelt tag. Hvis en transaktion har flere tags, vil hvad der bliver vist her måske også fremgå af andre grafer.', - 'tag' => 'Tag', - 'no_budget_squared' => '(intet budget)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(ingen kontotype)', - 'opt_group_no_account_type' => '(ingen kontotype)', - 'opt_group_defaultAsset' => 'Default asset accounts', - 'opt_group_savingAsset' => 'Savings accounts', - 'opt_group_sharedAsset' => 'Shared asset accounts', - 'opt_group_ccAsset' => 'Credit cards', - 'opt_group_cashWalletAsset' => 'Cash wallets', - 'opt_group_expense_account' => 'Udgiftskonti', - 'opt_group_revenue_account' => 'Indtægtskonti', - 'opt_group_l_Loan' => 'Ansvar: Lån', - 'opt_group_cash_account' => 'Kontant konto', - 'opt_group_l_Debt' => 'Ansvar: Gæld', - 'opt_group_l_Mortgage' => 'Ansvar: Pant', - 'opt_group_l_Credit card' => 'Ansvar: Kreditkort', - 'notes' => 'Noter', - 'unknown_journal_error' => 'Kunne ikke gemme transaktionen. Kontroller logfilerne.', - 'attachment_not_found' => 'Denne vedhæftning kunne ikke findes.', - 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', - 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', - 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Opdater udbetaling', + 'update_deposit' => 'Opdater indbetaling', + 'update_transaction' => 'Opdater transaktion', + 'update_transfer' => 'Opdater overførsel', + 'updated_withdrawal' => 'Opdateret udbetaling ":description"', + 'updated_deposit' => 'Opdateret indbetaling ":description"', + 'updated_transfer' => 'Opdateret overførsel ":description"', + 'no_changes_withdrawal' => 'Udbetalingen ":description" blev ikke ændret.', + 'no_changes_deposit' => 'Indbetalingen ":description" blev ikke ændret.', + 'no_changes_transfer' => 'Overførslen ":description" blev ikke ændret.', + 'delete_withdrawal' => 'Slet udbetalingen ":description"', + 'delete_deposit' => 'Slet indbetalingen ":description"', + 'delete_transfer' => 'Slet overførslen ":description"', + 'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"', + 'deleted_deposit' => 'Successfully deleted deposit ":description"', + 'deleted_transfer' => 'Successfully deleted transfer ":description"', + 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', + 'stored_journal' => 'Successfully created new transaction ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Successfully created your new transaction', + 'updated_journal_no_descr' => 'Successfully updated your transaction', + 'select_transactions' => 'Select transactions', + 'rule_group_select_transactions' => 'Apply ":title" to transactions', + 'rule_select_transactions' => 'Apply ":title" to transactions', + 'stop_selection' => 'Stop selecting transactions', + 'reconcile_selected' => 'Reconcile', + 'mass_delete_journals' => 'Delete a number of transactions', + 'mass_edit_journals' => 'Edit a number of transactions', + 'mass_bulk_journals' => 'Bulk edit a number of transactions', + 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', + 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', + 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', + 'no_bulk_category' => 'Don\'t update category', + 'no_bulk_budget' => 'Don\'t update budget', + 'no_bulk_tags' => 'Don\'t update tag(s)', + 'replace_with_these_tags' => 'Replace with these tags', + 'append_these_tags' => 'Add these tags', + 'mass_edit' => 'Edit selected individually', + 'bulk_edit' => 'Edit selected in bulk', + 'mass_delete' => 'Delete selected', + 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', + 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', + 'no_budget' => '(no budget)', + 'no_bill' => '(no bill)', + 'account_per_budget' => 'Konto pr. budget', + 'account_per_category' => 'Konto pr. kategori', + 'create_new_object' => 'Opret', + 'empty' => '(tom)', + 'all_other_budgets' => '(alle andre budgetter)', + 'all_other_accounts' => '(alle andre konti)', + 'expense_per_source_account' => 'Udgifter pr. kildekonto', + 'expense_per_destination_account' => 'Udgifter pr. destination konto', + 'income_per_destination_account' => 'Income per destination account', + 'spent_in_specific_category' => 'Spent in category ":category"', + 'earned_in_specific_category' => 'Earned in category ":category"', + 'spent_in_specific_tag' => 'Spent in tag ":tag"', + 'earned_in_specific_tag' => 'Earned in tag ":tag"', + 'income_per_source_account' => 'Income per source account', + 'average_spending_per_destination' => 'Average expense per destination account', + 'average_spending_per_source' => 'Gennemsnitlig udgift pr. kildekonto', + 'average_earning_per_source' => 'Gennemsnitlig indtjening pr. kildekonto', + 'average_earning_per_destination' => 'Gennemsnitlig indtjening pr. destinationskonto', + 'account_per_tag' => 'Konto pr. tag', + 'tag_report_expenses_listed_once' => 'Udgifter og indtægter bliver aldrig vist flere gange. Hvis en transaktion har flere tags, bliver den kun vist under et af sine tags. Det ligner måske at denne liste mangler data, men beløbene vil være korrekte.', + 'double_report_expenses_charted_once' => 'Udgifter og indtægter bliver aldrig vist flere gange. Hvis en transaktion har flere tags, bliver den kun vist under et af sine tags. Det ligner måske at denne graf mangler data, men beløbene vil være korrekte.', + 'tag_report_chart_single_tag' => 'Denne graf viser ét enkelt tag. Hvis en transaktion har flere tags, vil hvad der bliver vist her måske også fremgå af andre grafer.', + 'tag' => 'Tag', + 'no_budget_squared' => '(intet budget)', + 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', + 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', + 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', + 'opt_group_' => '(ingen kontotype)', + 'opt_group_no_account_type' => '(ingen kontotype)', + 'opt_group_defaultAsset' => 'Default asset accounts', + 'opt_group_savingAsset' => 'Savings accounts', + 'opt_group_sharedAsset' => 'Shared asset accounts', + 'opt_group_ccAsset' => 'Credit cards', + 'opt_group_cashWalletAsset' => 'Cash wallets', + 'opt_group_expense_account' => 'Udgiftskonti', + 'opt_group_revenue_account' => 'Indtægtskonti', + 'opt_group_l_Loan' => 'Ansvar: Lån', + 'opt_group_cash_account' => 'Kontant konto', + 'opt_group_l_Debt' => 'Ansvar: Gæld', + 'opt_group_l_Mortgage' => 'Ansvar: Pant', + 'opt_group_l_Credit card' => 'Ansvar: Kreditkort', + 'notes' => 'Noter', + 'unknown_journal_error' => 'Kunne ikke gemme transaktionen. Kontroller logfilerne.', + 'attachment_not_found' => 'Denne vedhæftning kunne ikke findes.', + 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', + 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', + 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => 'Welcome to Firefly III!', - 'submit' => 'Submit', - 'submission' => 'Submission', - 'submit_yes_really' => 'Submit (I know what I\'m doing)', - 'getting_started' => 'Kom godt i gang', - 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main checking account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', - 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', - 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', - 'stored_new_accounts_new_user' => 'Jubii, Dine nye konti er blevet gemt.', - 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', - 'language' => 'Sprog', - 'new_savings_account' => ':bank_name opsparingskonto', - 'cash_wallet' => 'Kontant tegnebog', - 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', + 'welcome' => 'Welcome to Firefly III!', + 'submit' => 'Submit', + 'submission' => 'Submission', + 'submit_yes_really' => 'Submit (I know what I\'m doing)', + 'getting_started' => 'Kom godt i gang', + 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main checking account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', + 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', + 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', + 'stored_new_accounts_new_user' => 'Jubii, Dine nye konti er blevet gemt.', + 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', + 'language' => 'Sprog', + 'new_savings_account' => ':bank_name opsparingskonto', + 'cash_wallet' => 'Kontant tegnebog', + 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', // home page: - 'transaction_table_description' => 'En tabel med dine transaktioner', - 'opposing_account' => 'Modsvarende konto', - 'yourAccounts' => 'Dine konti', - 'your_accounts' => 'Din kontooversigt', - 'category_overview' => 'Kategorioversigt', - 'expense_overview' => 'Expense account overview', - 'revenue_overview' => 'Revenue account overview', - 'budgetsAndSpending' => 'Budgets and spending', - 'budgets_and_spending' => 'Budgetter og udgifter', - 'go_to_budget' => 'Go to budget "{budget}"', - 'go_to_deposits' => 'Go to deposits', - 'go_to_expenses' => 'Go to expenses', - 'savings' => 'Savings', - 'newWithdrawal' => 'New expense', - 'newDeposit' => 'New deposit', - 'newTransfer' => 'New transfer', - 'bills_to_pay' => 'Regninger til betaling', - 'per_day' => 'Per day', - 'left_to_spend_per_day' => 'Left to spend per day', - 'bills_paid' => 'Betalte regninger', - 'custom_period' => 'Custom period', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Select a period', + 'transaction_table_description' => 'En tabel med dine transaktioner', + 'opposing_account' => 'Modsvarende konto', + 'yourAccounts' => 'Dine konti', + 'your_accounts' => 'Din kontooversigt', + 'category_overview' => 'Kategorioversigt', + 'expense_overview' => 'Expense account overview', + 'revenue_overview' => 'Revenue account overview', + 'budgetsAndSpending' => 'Budgets and spending', + 'budgets_and_spending' => 'Budgetter og udgifter', + 'go_to_budget' => 'Go to budget "{budget}"', + 'go_to_deposits' => 'Go to deposits', + 'go_to_expenses' => 'Go to expenses', + 'savings' => 'Savings', + 'newWithdrawal' => 'New expense', + 'newDeposit' => 'New deposit', + 'newTransfer' => 'New transfer', + 'bills_to_pay' => 'Regninger til betaling', + 'per_day' => 'Per day', + 'left_to_spend_per_day' => 'Left to spend per day', + 'bills_paid' => 'Betalte regninger', + 'custom_period' => 'Custom period', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Select a period', // menu and titles, should be recycled as often as possible: - 'currency' => 'Currency', - 'preferences' => 'Preferences', - 'logout' => 'Logout', - 'logout_other_sessions' => 'Logout all other sessions', - 'toggleNavigation' => 'Toggle navigation', - 'searchPlaceholder' => 'Search...', - 'version' => 'Version', - 'dashboard' => 'Dashboard', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Available budget ({currency})', - 'currencies' => 'Currencies', - 'activity' => 'Aktivitet', - 'usage' => 'Anvendelse', - 'accounts' => 'Konti', - 'Asset account' => 'Asset account', - 'Default account' => 'Asset account', - 'Expense account' => 'Udgiftskonto', - 'Revenue account' => 'Indtægtskonto', - 'Initial balance account' => 'Initial balance account', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Gæld', - 'account_type_Loan' => 'Lån', - 'account_type_Mortgage' => 'Pant', - 'account_type_debt' => 'Gæld', - 'account_type_loan' => 'Lån', - 'account_type_mortgage' => 'Pant', - 'account_type_Credit card' => 'Kreditkort', - 'credit_card_type_monthlyFull' => 'Fuld betaling hver måned', - 'liability_direction_credit' => 'Jeg skylder denne gæld', - 'liability_direction_debit' => 'Jeg skylder denne gæld til en anden', - 'liability_direction_credit_short' => 'Ejer denne gæld', - 'liability_direction_debit_short' => 'Ejer denne gæld', - 'liability_direction__short' => 'Ukendt', - 'liability_direction_null_short' => 'Ukendt', - 'Liability credit' => 'Passiv kredit', - 'budgets' => 'Budgetter', - 'tags' => 'Etiketter', - 'reports' => 'Rapporter', - 'transactions' => 'Transaktioner', - 'expenses' => 'Udgifter', - 'income' => 'Indtægter / indkomst', - 'transfers' => 'Overførsler', - 'moneyManagement' => 'Pengestyring', - 'money_management' => 'Pengestyring', - 'tools' => 'Værktøjer', - 'piggyBanks' => 'Sparebøsser', - 'piggy_banks' => 'Sparebøsser', - 'amount_x_of_y' => '{current} af {total}', - 'bills' => 'Regninger', - 'withdrawal' => 'Hævet', - 'opening_balance' => 'Startsaldo', - 'deposit' => 'Indbetaling', - 'account' => 'Konto', - 'transfer' => 'Overførsel', - 'Withdrawal' => 'Hævet', - 'Deposit' => 'Indbetaling', - 'Transfer' => 'Overførsel', - 'bill' => 'Regning', - 'yes' => 'Ja', - 'no' => 'Nej', - 'amount' => 'Beløb', - 'overview' => 'Oversigt', - 'saveOnAccount' => 'Gem på konto', - 'unknown' => 'Ukendt', - 'monthly' => 'Monthly', - 'profile' => 'Profile', - 'errors' => 'Errors', - 'debt_start_date' => 'Start date of debt', - 'debt_start_amount' => 'Start amount of debt', - 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', - 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', - 'store_new_liabilities_account' => 'Store new liability', - 'edit_liabilities_account' => 'Edit liability ":name"', - 'financial_control' => 'Financial control', - 'accounting' => 'Accounting', - 'automation' => 'Automation', - 'others' => 'Others', - 'classification' => 'Classification', - 'store_transaction' => 'Store transaction', + 'currency' => 'Currency', + 'preferences' => 'Preferences', + 'logout' => 'Logout', + 'logout_other_sessions' => 'Logout all other sessions', + 'toggleNavigation' => 'Toggle navigation', + 'searchPlaceholder' => 'Search...', + 'version' => 'Version', + 'dashboard' => 'Dashboard', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Available budget ({currency})', + 'currencies' => 'Currencies', + 'activity' => 'Aktivitet', + 'usage' => 'Anvendelse', + 'accounts' => 'Konti', + 'Asset account' => 'Asset account', + 'Default account' => 'Asset account', + 'Expense account' => 'Udgiftskonto', + 'Revenue account' => 'Indtægtskonto', + 'Initial balance account' => 'Initial balance account', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Gæld', + 'account_type_Loan' => 'Lån', + 'account_type_Mortgage' => 'Pant', + 'account_type_debt' => 'Gæld', + 'account_type_loan' => 'Lån', + 'account_type_mortgage' => 'Pant', + 'account_type_Credit card' => 'Kreditkort', + 'credit_card_type_monthlyFull' => 'Fuld betaling hver måned', + 'liability_direction_credit' => 'Jeg skylder denne gæld', + 'liability_direction_debit' => 'Jeg skylder denne gæld til en anden', + 'liability_direction_credit_short' => 'Ejer denne gæld', + 'liability_direction_debit_short' => 'Ejer denne gæld', + 'liability_direction__short' => 'Ukendt', + 'liability_direction_null_short' => 'Ukendt', + 'Liability credit' => 'Passiv kredit', + 'budgets' => 'Budgetter', + 'tags' => 'Etiketter', + 'reports' => 'Rapporter', + 'transactions' => 'Transaktioner', + 'expenses' => 'Udgifter', + 'income' => 'Indtægter / indkomst', + 'transfers' => 'Overførsler', + 'moneyManagement' => 'Pengestyring', + 'money_management' => 'Pengestyring', + 'tools' => 'Værktøjer', + 'piggyBanks' => 'Sparebøsser', + 'piggy_banks' => 'Sparebøsser', + 'amount_x_of_y' => '{current} af {total}', + 'bills' => 'Regninger', + 'withdrawal' => 'Hævet', + 'opening_balance' => 'Startsaldo', + 'deposit' => 'Indbetaling', + 'account' => 'Konto', + 'transfer' => 'Overførsel', + 'Withdrawal' => 'Hævet', + 'Deposit' => 'Indbetaling', + 'Transfer' => 'Overførsel', + 'bill' => 'Regning', + 'yes' => 'Ja', + 'no' => 'Nej', + 'amount' => 'Beløb', + 'overview' => 'Oversigt', + 'saveOnAccount' => 'Gem på konto', + 'unknown' => 'Ukendt', + 'monthly' => 'Monthly', + 'profile' => 'Profile', + 'errors' => 'Errors', + 'debt_start_date' => 'Start date of debt', + 'debt_start_amount' => 'Start amount of debt', + 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', + 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', + 'store_new_liabilities_account' => 'Store new liability', + 'edit_liabilities_account' => 'Edit liability ":name"', + 'financial_control' => 'Financial control', + 'accounting' => 'Accounting', + 'automation' => 'Automation', + 'others' => 'Others', + 'classification' => 'Classification', + 'store_transaction' => 'Store transaction', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Default financial report between :start and :end', - 'report_audit' => 'Transaction history overview between :start and :end', - 'report_category' => 'Category report between :start and :end', - 'report_double' => 'Expense/revenue account report between :start and :end', - 'report_budget' => 'Budget report between :start and :end', - 'report_tag' => 'Tag report between :start and :end', - 'quick_link_reports' => 'Quick links', - 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', - 'quick_link_default_report' => 'Default financial report', - 'quick_link_audit_report' => 'Transaction history overview', - 'report_this_month_quick' => 'Current month, all accounts', - 'report_last_month_quick' => 'Last month, all accounts', - 'report_this_year_quick' => 'Current year, all accounts', - 'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts', - 'report_all_time_quick' => 'All-time, all accounts', - 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', - 'incomeVsExpenses' => 'Income vs. expenses', - 'accountBalances' => 'Account balances', - 'balanceStart' => 'Balance at start of period', - 'balanceEnd' => 'Balance at end of period', - 'splitByAccount' => 'Split by account', - 'coveredWithTags' => 'Covered with tags', - 'leftInBudget' => 'Left in budget', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Sum of sums', - 'noCategory' => '(no category)', - 'notCharged' => 'Not charged (yet)', - 'inactive' => 'Inactive', - 'active' => 'Active', - 'difference' => 'Difference', - 'money_flowing_in' => 'In', - 'money_flowing_out' => 'Ud', - 'topX' => 'top :number', - 'show_full_list' => 'Vis hele listen', - 'show_only_top' => 'Vis kun top :number', - 'report_type' => 'Rapporttype', - 'report_type_default' => 'Standard regnskabsrapport', - 'report_type_audit' => 'Overblik over transaktionshistorik (revision)', - 'report_type_category' => 'Kategori rapport', - 'report_type_budget' => 'Budgetrapport', - 'report_type_tag' => 'Tag rapport', - 'report_type_double' => 'Regnskabsrapport for udgifter/indtægter', - 'more_info_help' => 'Mere information om disse typer af rapporter kan findes på hjælpesiderne. Tryk på (?) ikonet i øverste højre hjørne.', - 'report_included_accounts' => 'Inkluderede konti', - 'report_date_range' => 'Datointerval', - 'report_preset_ranges' => 'Forudindstillet intervaller', - 'shared' => 'Delt', - 'fiscal_year' => 'Regnskabsår', - 'income_entry' => 'Indtægter fra konto ":name" mellem :start og :end', - 'expense_entry' => 'Expenses to account ":name" between :start and :end', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => 'Expenses in budget ":budget" between :start and :end', - 'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end', - 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', - 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', - 'reports_extra_options' => 'Ekstra valgmuligheder', - 'report_has_no_extra_options' => 'Denne rapport har ingen ekstra muligheder', - 'reports_submit' => 'Vis rapport', - 'end_after_start_date' => 'Slutdato for rapport skal være efter startdato.', - 'select_category' => 'Vælg kategori(er)', - 'select_budget' => 'Vælg budget(ter).', - 'select_tag' => 'Vælg mærke(r).', - 'income_per_category' => 'Indkomst pr. kategori', - 'expense_per_category' => 'Udgift pr. kategori', - 'expense_per_budget' => 'Udgifter pr. budget', - 'income_per_account' => 'Indkomst pr. konto', - 'expense_per_account' => 'Udgift pr. konto', - 'expense_per_tag' => 'Udgift pr. mærke', - 'income_per_tag' => 'Indkomst pr. mærke', - 'include_expense_not_in_budget' => 'Inkluderede udgifter er ikke i det valgte budget(ter)', - 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', - 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', - 'include_income_not_in_category' => 'Included income not in the selected category(ies)', - 'include_income_not_in_account' => 'Included income not in the selected account(s)', - 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', - 'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)', - 'everything_else' => 'Alt andet', - 'income_and_expenses' => 'Indtægter og udgifter', - 'spent_average' => 'Brugt (gennemsnit)', - 'income_average' => 'Indkomst (gennemsnit)', - 'transaction_count' => 'Transaktionen tæller', - 'average_spending_per_account' => 'Gennemsnitlige udgifter pr. konto', - 'average_income_per_account' => 'Average income per account', - 'total' => 'Total', - 'description' => 'Description', - 'sum_of_period' => 'Sum of period', - 'average_in_period' => 'Average in period', - 'account_role_defaultAsset' => 'Default asset account', - 'account_role_sharedAsset' => 'Shared asset account', - 'account_role_savingAsset' => 'Savings account', - 'account_role_ccAsset' => 'Credit card', - 'account_role_cashWalletAsset' => 'Cash wallet', - 'budget_chart_click' => 'Please click on a budget name in the table above to see a chart.', - 'category_chart_click' => 'Please click on a category name in the table above to see a chart.', - 'in_out_accounts' => 'Earned and spent per combination', - 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', - 'in_out_per_category' => 'Earned and spent per category', - 'out_per_budget' => 'Spent per budget', - 'select_expense_revenue' => 'Select expense/revenue account', - 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', - 'sum_in_default_currency' => 'The sum will always be in your default currency.', - 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', + 'report_default' => 'Default financial report between :start and :end', + 'report_audit' => 'Transaction history overview between :start and :end', + 'report_category' => 'Category report between :start and :end', + 'report_double' => 'Expense/revenue account report between :start and :end', + 'report_budget' => 'Budget report between :start and :end', + 'report_tag' => 'Tag report between :start and :end', + 'quick_link_reports' => 'Quick links', + 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', + 'quick_link_default_report' => 'Default financial report', + 'quick_link_audit_report' => 'Transaction history overview', + 'report_this_month_quick' => 'Current month, all accounts', + 'report_last_month_quick' => 'Last month, all accounts', + 'report_this_year_quick' => 'Current year, all accounts', + 'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts', + 'report_all_time_quick' => 'All-time, all accounts', + 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', + 'incomeVsExpenses' => 'Income vs. expenses', + 'accountBalances' => 'Account balances', + 'balanceStart' => 'Balance at start of period', + 'balanceEnd' => 'Balance at end of period', + 'splitByAccount' => 'Split by account', + 'coveredWithTags' => 'Covered with tags', + 'leftInBudget' => 'Left in budget', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Sum of sums', + 'noCategory' => '(no category)', + 'notCharged' => 'Not charged (yet)', + 'inactive' => 'Inactive', + 'active' => 'Active', + 'difference' => 'Difference', + 'money_flowing_in' => 'In', + 'money_flowing_out' => 'Ud', + 'topX' => 'top :number', + 'show_full_list' => 'Vis hele listen', + 'show_only_top' => 'Vis kun top :number', + 'report_type' => 'Rapporttype', + 'report_type_default' => 'Standard regnskabsrapport', + 'report_type_audit' => 'Overblik over transaktionshistorik (revision)', + 'report_type_category' => 'Kategori rapport', + 'report_type_budget' => 'Budgetrapport', + 'report_type_tag' => 'Tag rapport', + 'report_type_double' => 'Regnskabsrapport for udgifter/indtægter', + 'more_info_help' => 'Mere information om disse typer af rapporter kan findes på hjælpesiderne. Tryk på (?) ikonet i øverste højre hjørne.', + 'report_included_accounts' => 'Inkluderede konti', + 'report_date_range' => 'Datointerval', + 'report_preset_ranges' => 'Forudindstillet intervaller', + 'shared' => 'Delt', + 'fiscal_year' => 'Regnskabsår', + 'income_entry' => 'Indtægter fra konto ":name" mellem :start og :end', + 'expense_entry' => 'Expenses to account ":name" between :start and :end', + 'category_entry' => 'Expenses and income in category ":name" between :start and :end', + 'budget_spent_amount' => 'Expenses in budget ":budget" between :start and :end', + 'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end', + 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', + 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', + 'reports_extra_options' => 'Ekstra valgmuligheder', + 'report_has_no_extra_options' => 'Denne rapport har ingen ekstra muligheder', + 'reports_submit' => 'Vis rapport', + 'end_after_start_date' => 'Slutdato for rapport skal være efter startdato.', + 'select_category' => 'Vælg kategori(er)', + 'select_budget' => 'Vælg budget(ter).', + 'select_tag' => 'Vælg mærke(r).', + 'income_per_category' => 'Indkomst pr. kategori', + 'expense_per_category' => 'Udgift pr. kategori', + 'expense_per_budget' => 'Udgifter pr. budget', + 'income_per_account' => 'Indkomst pr. konto', + 'expense_per_account' => 'Udgift pr. konto', + 'expense_per_tag' => 'Udgift pr. mærke', + 'income_per_tag' => 'Indkomst pr. mærke', + 'include_expense_not_in_budget' => 'Inkluderede udgifter er ikke i det valgte budget(ter)', + 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', + 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', + 'include_income_not_in_category' => 'Included income not in the selected category(ies)', + 'include_income_not_in_account' => 'Included income not in the selected account(s)', + 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', + 'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)', + 'everything_else' => 'Alt andet', + 'income_and_expenses' => 'Indtægter og udgifter', + 'spent_average' => 'Brugt (gennemsnit)', + 'income_average' => 'Indkomst (gennemsnit)', + 'transaction_count' => 'Transaktionen tæller', + 'average_spending_per_account' => 'Gennemsnitlige udgifter pr. konto', + 'average_income_per_account' => 'Average income per account', + 'total' => 'Total', + 'description' => 'Description', + 'sum_of_period' => 'Sum of period', + 'average_in_period' => 'Average in period', + 'account_role_defaultAsset' => 'Default asset account', + 'account_role_sharedAsset' => 'Shared asset account', + 'account_role_savingAsset' => 'Savings account', + 'account_role_ccAsset' => 'Credit card', + 'account_role_cashWalletAsset' => 'Cash wallet', + 'budget_chart_click' => 'Please click on a budget name in the table above to see a chart.', + 'category_chart_click' => 'Please click on a category name in the table above to see a chart.', + 'in_out_accounts' => 'Earned and spent per combination', + 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', + 'in_out_per_category' => 'Earned and spent per category', + 'out_per_budget' => 'Spent per budget', + 'select_expense_revenue' => 'Select expense/revenue account', + 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', + 'sum_in_default_currency' => 'The sum will always be in your default currency.', + 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Chart', - 'month' => 'Month', - 'budget' => 'Budget', - 'spent' => 'Spent', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => 'Spent in budget', - 'left_to_spend' => 'Left to spend', - 'earned' => 'Earned', - 'overspent' => 'Overspent', - 'left' => 'Left', - 'max-amount' => 'Maximum amount', - 'min-amount' => 'Minimum amount', - 'journal-amount' => 'Current bill entry', - 'name' => 'Name', - 'date' => 'Date', - 'date_and_time' => 'Date and time', - 'time' => 'Time', - 'paid' => 'Paid', - 'unpaid' => 'Ubetalt', - 'day' => 'Dag', - 'budgeted' => 'Budgetteret', - 'period' => 'Periode', - 'balance' => 'Saldo', - 'in_out_period' => 'In + out this period', - 'sum' => 'I alt', - 'summary' => 'Opsummering', - 'average' => 'Gennemsnitlig', - 'balanceFor' => 'Saldo for :name', - 'no_tags' => '(ingen mærker)', + 'chart' => 'Chart', + 'month' => 'Month', + 'budget' => 'Budget', + 'spent' => 'Spent', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => 'Spent in budget', + 'left_to_spend' => 'Left to spend', + 'earned' => 'Earned', + 'overspent' => 'Overspent', + 'left' => 'Left', + 'max-amount' => 'Maximum amount', + 'min-amount' => 'Minimum amount', + 'journal-amount' => 'Current bill entry', + 'name' => 'Name', + 'date' => 'Date', + 'date_and_time' => 'Date and time', + 'time' => 'Time', + 'paid' => 'Paid', + 'unpaid' => 'Ubetalt', + 'day' => 'Dag', + 'budgeted' => 'Budgetteret', + 'period' => 'Periode', + 'balance' => 'Saldo', + 'in_out_period' => 'In + out this period', + 'sum' => 'I alt', + 'summary' => 'Opsummering', + 'average' => 'Gennemsnitlig', + 'balanceFor' => 'Saldo for :name', + 'no_tags' => '(ingen mærker)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Tilføj penge til sparegrisen ":name"', - 'piggy_bank' => 'Sparegris', - 'new_piggy_bank' => 'Ny sparegris', - 'store_piggy_bank' => 'Gem ny sparegris', - 'stored_piggy_bank' => 'Gem ny sparegris ":name"', - 'account_status' => 'Status for konto', - 'left_for_piggy_banks' => 'Left for piggy banks', - 'sum_of_piggy_banks' => 'Sum of piggy banks', - 'saved_so_far' => 'Saved so far', - 'left_to_save' => 'Left to save', - 'suggested_amount' => 'Suggested monthly amount to save', - 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', - 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', - 'add' => 'Tilføj', - 'no_money_for_piggy' => 'You have no money to put in this piggy bank.', - 'suggested_savings_per_month' => 'Suggested per month', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Tilføj penge til sparegrisen ":name"', + 'piggy_bank' => 'Sparegris', + 'new_piggy_bank' => 'Ny sparegris', + 'store_piggy_bank' => 'Gem ny sparegris', + 'stored_piggy_bank' => 'Gem ny sparegris ":name"', + 'account_status' => 'Status for konto', + 'left_for_piggy_banks' => 'Left for piggy banks', + 'sum_of_piggy_banks' => 'Sum of piggy banks', + 'saved_so_far' => 'Saved so far', + 'left_to_save' => 'Left to save', + 'suggested_amount' => 'Suggested monthly amount to save', + 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', + 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', + 'add' => 'Tilføj', + 'no_money_for_piggy' => 'You have no money to put in this piggy bank.', + 'suggested_savings_per_month' => 'Suggested per month', - 'remove' => 'Fjern', - 'max_amount_add' => 'Det maksimale beløb, du kan tilføje er', - 'max_amount_remove' => 'Det maksimale beløb, du kan fjerne er', - 'update_piggy_button' => 'Update piggy bank', - 'update_piggy_title' => 'Update piggy bank ":name"', - 'updated_piggy_bank' => 'Updated piggy bank ":name"', - 'details' => 'Detaljer', - 'events' => 'Begivenheder', - 'target_amount' => 'Target amount', - 'start_date' => 'Start dato', - 'no_start_date' => 'No start date', - 'target_date' => 'Target date', - 'no_target_date' => 'No target date', - 'table' => 'Tabel', - 'delete_piggy_bank' => 'Delete piggy bank ":name"', - 'cannot_add_amount_piggy' => 'Could not add :amount to ":name".', - 'cannot_remove_from_piggy' => 'Could not remove :amount from ":name".', - 'deleted_piggy_bank' => 'Deleted piggy bank ":name"', - 'added_amount_to_piggy' => 'Added :amount to ":name"', - 'removed_amount_from_piggy' => 'Removed :amount from ":name"', - 'piggy_events' => 'Related piggy banks', + 'remove' => 'Fjern', + 'max_amount_add' => 'Det maksimale beløb, du kan tilføje er', + 'max_amount_remove' => 'Det maksimale beløb, du kan fjerne er', + 'update_piggy_button' => 'Update piggy bank', + 'update_piggy_title' => 'Update piggy bank ":name"', + 'updated_piggy_bank' => 'Updated piggy bank ":name"', + 'details' => 'Detaljer', + 'events' => 'Begivenheder', + 'target_amount' => 'Target amount', + 'start_date' => 'Start dato', + 'no_start_date' => 'No start date', + 'target_date' => 'Target date', + 'no_target_date' => 'No target date', + 'table' => 'Tabel', + 'delete_piggy_bank' => 'Delete piggy bank ":name"', + 'cannot_add_amount_piggy' => 'Could not add :amount to ":name".', + 'cannot_remove_from_piggy' => 'Could not remove :amount from ":name".', + 'deleted_piggy_bank' => 'Deleted piggy bank ":name"', + 'added_amount_to_piggy' => 'Added :amount to ":name"', + 'removed_amount_from_piggy' => 'Removed :amount from ":name"', + 'piggy_events' => 'Related piggy banks', // tags - 'delete_tag' => 'Delete tag ":tag"', - 'deleted_tag' => 'Deleted tag ":tag"', - 'new_tag' => 'Make new tag', - 'edit_tag' => 'Edit tag ":tag"', - 'updated_tag' => 'Updated tag ":tag"', - 'created_tag' => 'Tag ":tag" has been created!', + 'delete_tag' => 'Delete tag ":tag"', + 'deleted_tag' => 'Deleted tag ":tag"', + 'new_tag' => 'Make new tag', + 'edit_tag' => 'Edit tag ":tag"', + 'updated_tag' => 'Updated tag ":tag"', + 'created_tag' => 'Tag ":tag" has been created!', - 'transaction_journal_information' => 'Transaction information', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta information', - 'transaction_journal_more' => 'More information', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Stored under ":journal"', - 'total_amount' => 'Total amount', - 'number_of_decimals' => 'Number of decimals', + 'transaction_journal_information' => 'Transaction information', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Meta information', + 'transaction_journal_more' => 'More information', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => 'Stored under ":journal"', + 'total_amount' => 'Total amount', + 'number_of_decimals' => 'Number of decimals', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Administration', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'User administration', - 'list_all_users' => 'All users', - 'all_users' => 'All users', - 'instance_configuration' => 'Configuration', - 'firefly_instance_configuration' => 'Configuration options for Firefly III', - 'setting_single_user_mode' => 'Single user mode', - 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', - 'store_configuration' => 'Store configuration', - 'single_user_administration' => 'User administration for :email', - 'edit_user' => 'Edit user :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'User data', - 'user_information' => 'User information', - 'total_size' => 'total size', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'The configuration has been updated', - 'setting_is_demo_site' => 'Demo site', - 'setting_is_demo_site_explain' => 'If you check this box, this installation will behave as if it is the demo site, which can have weird side effects.', - 'block_code_bounced' => 'Email message(s) bounced', - 'block_code_expired' => 'Demo account expired', - 'no_block_code' => 'No reason for block or user not blocked', - 'block_code_email_changed' => 'User has not yet confirmed new email address', - 'admin_update_email' => 'Contrary to the profile page, the user will NOT be notified their email address has changed!', - 'update_user' => 'Update user', - 'updated_user' => 'User data has been changed.', - 'delete_user' => 'Delete user :email', - 'user_deleted' => 'The user has been deleted', - 'send_test_email' => 'Send test email message', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Send message', - 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', - 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', - 'admin_maintanance_title' => 'Maintenance', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Clear cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Description of the split transaction', - 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'you_create_transfer' => 'You\'re creating a transfer.', - 'you_create_withdrawal' => 'You\'re creating a withdrawal.', - 'you_create_deposit' => 'You\'re creating a deposit.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Administration', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'User administration', + 'list_all_users' => 'All users', + 'all_users' => 'All users', + 'instance_configuration' => 'Configuration', + 'firefly_instance_configuration' => 'Configuration options for Firefly III', + 'setting_single_user_mode' => 'Single user mode', + 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', + 'store_configuration' => 'Store configuration', + 'single_user_administration' => 'User administration for :email', + 'edit_user' => 'Edit user :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'User data', + 'user_information' => 'User information', + 'total_size' => 'total size', + 'budget_or_budgets' => ':count budget|:count budgets', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'The configuration has been updated', + 'setting_is_demo_site' => 'Demo site', + 'setting_is_demo_site_explain' => 'If you check this box, this installation will behave as if it is the demo site, which can have weird side effects.', + 'block_code_bounced' => 'Email message(s) bounced', + 'block_code_expired' => 'Demo account expired', + 'no_block_code' => 'No reason for block or user not blocked', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'User has not yet confirmed new email address', + 'admin_update_email' => 'Contrary to the profile page, the user will NOT be notified their email address has changed!', + 'update_user' => 'Update user', + 'updated_user' => 'User data has been changed.', + 'delete_user' => 'Delete user :email', + 'user_deleted' => 'The user has been deleted', + 'send_test_email' => 'Send test email message', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Send message', + 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', + 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', + 'admin_maintanance_title' => 'Maintenance', + 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', + 'admin_maintenance_clear_cache' => 'Clear cache', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Description of the split transaction', + 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'you_create_transfer' => 'You\'re creating a transfer.', + 'you_create_withdrawal' => 'You\'re creating a withdrawal.', + 'you_create_deposit' => 'You\'re creating a deposit.', // links - 'journal_link_configuration' => 'Transaction links configuration', - 'create_new_link_type' => 'Create new link type', - 'store_new_link_type' => 'Store new link type', - 'update_link_type' => 'Update link type', - 'edit_link_type' => 'Edit link type ":name"', - 'updated_link_type' => 'Updated link type ":name"', - 'delete_link_type' => 'Delete link type ":name"', - 'deleted_link_type' => 'Deleted link type ":name"', - 'stored_new_link_type' => 'Store new link type ":name"', - 'cannot_edit_link_type' => 'Cannot edit link type ":name"', - 'link_type_help_name' => 'Ie. "Duplicates"', - 'link_type_help_inward' => 'Ie. "duplicates"', - 'link_type_help_outward' => 'Ie. "is duplicated by"', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(do not save connection)', - 'link_transaction' => 'Link transaction', - 'link_to_other_transaction' => 'Link this transaction to another transaction', - 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', - 'this_transaction' => 'This transaction', - 'transaction' => 'Transaction', - 'comments' => 'Comments', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Cannot link these transactions', - 'selected_transaction' => 'Selected transaction', - 'journals_linked' => 'Transactions are linked.', - 'journals_error_linked' => 'These transactions are already linked.', - 'journals_link_to_self' => 'You cannot link a transaction to itself', - 'journal_links' => 'Transaction links', - 'this_withdrawal' => 'This withdrawal', - 'this_deposit' => 'This deposit', - 'this_transfer' => 'This transfer', - 'overview_for_link' => 'Overview for link type ":name"', - 'source_transaction' => 'Source transaction', - 'link_description' => 'Link description', - 'destination_transaction' => 'Destination transaction', - 'delete_journal_link' => 'Delete the link between :source and :destination', - 'deleted_link' => 'Deleted link', + 'journal_link_configuration' => 'Transaction links configuration', + 'create_new_link_type' => 'Create new link type', + 'store_new_link_type' => 'Store new link type', + 'update_link_type' => 'Update link type', + 'edit_link_type' => 'Edit link type ":name"', + 'updated_link_type' => 'Updated link type ":name"', + 'delete_link_type' => 'Delete link type ":name"', + 'deleted_link_type' => 'Deleted link type ":name"', + 'stored_new_link_type' => 'Store new link type ":name"', + 'cannot_edit_link_type' => 'Cannot edit link type ":name"', + 'link_type_help_name' => 'Ie. "Duplicates"', + 'link_type_help_inward' => 'Ie. "duplicates"', + 'link_type_help_outward' => 'Ie. "is duplicated by"', + 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', + 'do_not_save_connection' => '(do not save connection)', + 'link_transaction' => 'Link transaction', + 'link_to_other_transaction' => 'Link this transaction to another transaction', + 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', + 'this_transaction' => 'This transaction', + 'transaction' => 'Transaction', + 'comments' => 'Comments', + 'link_notes' => 'Any notes you wish to store with the link.', + 'invalid_link_selection' => 'Cannot link these transactions', + 'selected_transaction' => 'Selected transaction', + 'journals_linked' => 'Transactions are linked.', + 'journals_error_linked' => 'These transactions are already linked.', + 'journals_link_to_self' => 'You cannot link a transaction to itself', + 'journal_links' => 'Transaction links', + 'this_withdrawal' => 'This withdrawal', + 'this_deposit' => 'This deposit', + 'this_transfer' => 'This transfer', + 'overview_for_link' => 'Overview for link type ":name"', + 'source_transaction' => 'Source transaction', + 'link_description' => 'Link description', + 'destination_transaction' => 'Destination transaction', + 'delete_journal_link' => 'Delete the link between :source and :destination', + 'deleted_link' => 'Deleted link', // link translations: - 'Paid_name' => 'Paid', - 'Refund_name' => 'Refund', - 'Reimbursement_name' => 'Reimbursement', - 'Related_name' => 'Related', - 'relates to_inward' => 'relates to', - 'is (partially) refunded by_inward' => 'is (partially) refunded by', - 'is (partially) paid for by_inward' => 'is (partially) paid for by', - 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', - 'inward_transaction' => 'Inward transaction', - 'outward_transaction' => 'Outward transaction', - 'relates to_outward' => 'relates to', - '(partially) refunds_outward' => '(partially) refunds', - '(partially) pays for_outward' => '(partially) pays for', - '(partially) reimburses_outward' => '(partially) reimburses', - 'is (partially) refunded by' => 'is (partially) refunded by', - 'is (partially) paid for by' => 'is (partially) paid for by', - 'is (partially) reimbursed by' => 'is (partially) reimbursed by', - 'relates to' => 'relates to', - '(partially) refunds' => '(partially) refunds', - '(partially) pays for' => '(partially) pays for', - '(partially) reimburses' => '(partially) reimburses', + 'Paid_name' => 'Paid', + 'Refund_name' => 'Refund', + 'Reimbursement_name' => 'Reimbursement', + 'Related_name' => 'Related', + 'relates to_inward' => 'relates to', + 'is (partially) refunded by_inward' => 'is (partially) refunded by', + 'is (partially) paid for by_inward' => 'is (partially) paid for by', + 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', + 'inward_transaction' => 'Inward transaction', + 'outward_transaction' => 'Outward transaction', + 'relates to_outward' => 'relates to', + '(partially) refunds_outward' => '(partially) refunds', + '(partially) pays for_outward' => '(partially) pays for', + '(partially) reimburses_outward' => '(partially) reimburses', + 'is (partially) refunded by' => 'is (partially) refunded by', + 'is (partially) paid for by' => 'is (partially) paid for by', + 'is (partially) reimbursed by' => 'is (partially) reimbursed by', + 'relates to' => 'relates to', + '(partially) refunds' => '(partially) refunds', + '(partially) pays for' => '(partially) pays for', + '(partially) reimburses' => '(partially) reimburses', // split a transaction: - 'splits' => 'Splits', - 'add_another_split' => 'Add another split', - 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', - 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', - 'breadcrumb_convert_group' => 'Convert transaction', - 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', - 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', - 'create_another' => 'After storing, return here to create another one.', - 'after_update_create_another' => 'After updating, return here to continue editing.', - 'store_as_new' => 'Store as a new transaction instead of updating.', - 'reset_after' => 'Reset form after submission', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Splits', + 'add_another_split' => 'Add another split', + 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', + 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', + 'breadcrumb_convert_group' => 'Convert transaction', + 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', + 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', + 'create_another' => 'After storing, return here to create another one.', + 'after_update_create_another' => 'After updating, return here to continue editing.', + 'store_as_new' => 'Store as a new transaction instead of updating.', + 'reset_after' => 'Reset form after submission', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(ungrouped)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ungrouped)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Let\'s create an asset account!', - 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.', - 'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:', - 'no_accounts_create_asset' => 'Create an asset account', - 'no_accounts_title_expense' => 'Let\'s create an expense account!', - 'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.', - 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_expense' => 'Create an expense account', - 'no_accounts_title_revenue' => 'Let\'s create a revenue account!', - 'no_accounts_intro_revenue' => 'You have no revenue accounts yet. Revenue accounts are the places where you receive money from, such as your employer.', - 'no_accounts_imperative_revenue' => 'Revenue accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_revenue' => 'Create a revenue account', - 'no_accounts_title_liabilities' => 'Let\'s create a liability!', - 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', - 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', - 'no_accounts_create_liabilities' => 'Create a liability', - 'no_budgets_title_default' => 'Let\'s create a budget', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Budgets are the basic tools of financial management. Let\'s create one now:', - 'no_budgets_create_default' => 'Create a budget', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Let\'s create a category!', - 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', - 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_categories_create_default' => 'Create a category', - 'no_tags_title_default' => 'Let\'s create a tag!', - 'no_tags_intro_default' => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.', - 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_tags_create_default' => 'Create a tag', - 'no_transactions_title_withdrawal' => 'Let\'s create an expense!', - 'no_transactions_intro_withdrawal' => 'You have no expenses yet. You should create expenses to start managing your finances.', - 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', - 'no_transactions_create_withdrawal' => 'Create an expense', - 'no_transactions_title_deposit' => 'Let\'s create some income!', - 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', - 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', - 'no_transactions_create_deposit' => 'Create a deposit', - 'no_transactions_title_transfers' => 'Let\'s create a transfer!', - 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', - 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', - 'no_transactions_create_transfers' => 'Create a transfer', - 'no_piggies_title_default' => 'Let\'s create a piggy bank!', - 'no_piggies_intro_default' => 'You have no piggy banks yet. You can create piggy banks to divide your savings and keep track of what you\'re saving up for.', - 'no_piggies_imperative_default' => 'Do you have things you\'re saving money for? Create a piggy bank and keep track:', - 'no_piggies_create_default' => 'Create a new piggy bank', - 'no_bills_title_default' => 'Lad os oprette en regning!', - 'no_bills_intro_default' => 'Du har endnu ingen regninger. Du kan oprette regninger for at holde styr på almindelige udgifter, såsom din husleje eller forsikring.', - 'no_bills_imperative_default' => 'Har du sådanne regelmæssige regninger? Opret en regning og holde styr på dine betalinger:', - 'no_bills_create_default' => 'Opret ny regning', + 'no_accounts_title_asset' => 'Let\'s create an asset account!', + 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.', + 'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:', + 'no_accounts_create_asset' => 'Create an asset account', + 'no_accounts_title_expense' => 'Let\'s create an expense account!', + 'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.', + 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_expense' => 'Create an expense account', + 'no_accounts_title_revenue' => 'Let\'s create a revenue account!', + 'no_accounts_intro_revenue' => 'You have no revenue accounts yet. Revenue accounts are the places where you receive money from, such as your employer.', + 'no_accounts_imperative_revenue' => 'Revenue accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_revenue' => 'Create a revenue account', + 'no_accounts_title_liabilities' => 'Let\'s create a liability!', + 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', + 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', + 'no_accounts_create_liabilities' => 'Create a liability', + 'no_budgets_title_default' => 'Let\'s create a budget', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Budgets are the basic tools of financial management. Let\'s create one now:', + 'no_budgets_create_default' => 'Create a budget', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Let\'s create a category!', + 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', + 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_categories_create_default' => 'Create a category', + 'no_tags_title_default' => 'Let\'s create a tag!', + 'no_tags_intro_default' => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.', + 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_tags_create_default' => 'Create a tag', + 'no_transactions_title_withdrawal' => 'Let\'s create an expense!', + 'no_transactions_intro_withdrawal' => 'You have no expenses yet. You should create expenses to start managing your finances.', + 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', + 'no_transactions_create_withdrawal' => 'Create an expense', + 'no_transactions_title_deposit' => 'Let\'s create some income!', + 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', + 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', + 'no_transactions_create_deposit' => 'Create a deposit', + 'no_transactions_title_transfers' => 'Let\'s create a transfer!', + 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', + 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', + 'no_transactions_create_transfers' => 'Create a transfer', + 'no_piggies_title_default' => 'Let\'s create a piggy bank!', + 'no_piggies_intro_default' => 'You have no piggy banks yet. You can create piggy banks to divide your savings and keep track of what you\'re saving up for.', + 'no_piggies_imperative_default' => 'Do you have things you\'re saving money for? Create a piggy bank and keep track:', + 'no_piggies_create_default' => 'Create a new piggy bank', + 'no_bills_title_default' => 'Lad os oprette en regning!', + 'no_bills_intro_default' => 'Du har endnu ingen regninger. Du kan oprette regninger for at holde styr på almindelige udgifter, såsom din husleje eller forsikring.', + 'no_bills_imperative_default' => 'Har du sådanne regelmæssige regninger? Opret en regning og holde styr på dine betalinger:', + 'no_bills_create_default' => 'Opret ny regning', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Recurring transactions', - 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', - 'recurring_calendar_view' => 'Calendar', - 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', - 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', - 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', - 'no_recurring_create_default' => 'Create a recurring transaction', - 'make_new_recurring' => 'Create a recurring transaction', - 'recurring_daily' => 'Every day', - 'recurring_weekly' => 'Every week on :weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => 'Every year on :date', - 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', - 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', - 'created_transactions' => 'Related transactions', - 'expected_withdrawals' => 'Expected withdrawals', - 'expected_deposits' => 'Expected deposits', - 'expected_transfers' => 'Expected transfers', - 'created_withdrawals' => 'Created withdrawals', - 'created_deposits' => 'Created deposits', - 'created_transfers' => 'Created transfers', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', - 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Recurring transactions', + 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', + 'recurring_calendar_view' => 'Calendar', + 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', + 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', + 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', + 'no_recurring_create_default' => 'Create a recurring transaction', + 'make_new_recurring' => 'Create a recurring transaction', + 'recurring_daily' => 'Every day', + 'recurring_weekly' => 'Every week on :weekday', + 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', + 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => 'Every year on :date', + 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', + 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', + 'created_transactions' => 'Related transactions', + 'expected_withdrawals' => 'Expected withdrawals', + 'expected_deposits' => 'Expected deposits', + 'expected_transfers' => 'Expected transfers', + 'created_withdrawals' => 'Created withdrawals', + 'created_deposits' => 'Created deposits', + 'created_transfers' => 'Created transfers', + 'recurring_info' => 'Recurring transaction :count / :total', + 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', + 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'create_new_recurrence' => 'Create new recurring transaction', - 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', - 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', - 'no_currency' => '(no currency)', - 'mandatory_for_recurring' => 'Mandatory recurrence information', - 'mandatory_for_transaction' => 'Mandatory transaction information', - 'optional_for_recurring' => 'Optional recurrence information', - 'optional_for_transaction' => 'Optional transaction information', - 'change_date_other_options' => 'Change the "first date" to see more options.', - 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', - 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', - 'repeat_forever' => 'Repeat forever', - 'repeat_until_date' => 'Repeat until date', - 'repeat_times' => 'Repeat a number of times', - 'recurring_skips_one' => 'Every other', - 'recurring_skips_more' => 'Skips :count occurrences', - 'store_new_recurrence' => 'Store recurring transaction', - 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', - 'edit_recurrence' => 'Edit recurring transaction ":title"', - 'recurring_repeats_until' => 'Repeats until :date', - 'recurring_repeats_forever' => 'Repeats forever', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Update recurring transaction', - 'updated_recurrence' => 'Updated recurring transaction ":title"', - 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', - 'delete_recurring' => 'Delete recurring transaction ":title"', - 'new_recurring_transaction' => 'New recurring transaction', - 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', - 'do_nothing' => 'Just create the transaction', - 'skip_transaction' => 'Skip the occurrence', - 'jump_to_friday' => 'Create the transaction on the previous Friday instead', - 'jump_to_monday' => 'Create the transaction on the next Monday instead', - 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', - 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', - 'except_weekends' => 'Except weekends', - 'recurrence_deleted' => 'Recurring transaction ":title" deleted', + 'create_new_recurrence' => 'Create new recurring transaction', + 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', + 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', + 'no_currency' => '(no currency)', + 'mandatory_for_recurring' => 'Mandatory recurrence information', + 'mandatory_for_transaction' => 'Mandatory transaction information', + 'optional_for_recurring' => 'Optional recurrence information', + 'optional_for_transaction' => 'Optional transaction information', + 'change_date_other_options' => 'Change the "first date" to see more options.', + 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', + 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', + 'repeat_forever' => 'Repeat forever', + 'repeat_until_date' => 'Repeat until date', + 'repeat_times' => 'Repeat a number of times', + 'recurring_skips_one' => 'Every other', + 'recurring_skips_more' => 'Skips :count occurrences', + 'store_new_recurrence' => 'Store recurring transaction', + 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', + 'edit_recurrence' => 'Edit recurring transaction ":title"', + 'recurring_repeats_until' => 'Repeats until :date', + 'recurring_repeats_forever' => 'Repeats forever', + 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', + 'update_recurrence' => 'Update recurring transaction', + 'updated_recurrence' => 'Updated recurring transaction ":title"', + 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', + 'delete_recurring' => 'Delete recurring transaction ":title"', + 'new_recurring_transaction' => 'New recurring transaction', + 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', + 'do_nothing' => 'Just create the transaction', + 'skip_transaction' => 'Skip the occurrence', + 'jump_to_friday' => 'Create the transaction on the previous Friday instead', + 'jump_to_monday' => 'Create the transaction on the next Monday instead', + 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', + 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', + 'except_weekends' => 'Except weekends', + 'recurrence_deleted' => 'Recurring transaction ":title" deleted', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balance (:currency)', - 'box_spent_in_currency' => 'Spent (:currency)', - 'box_earned_in_currency' => 'Earned (:currency)', - 'box_budgeted_in_currency' => 'Budgeted (:currency)', - 'box_bill_paid_in_currency' => 'Betalte regninger (:currency)', - 'box_bill_unpaid_in_currency' => 'Ubetalte regninger (:currency)', - 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', - 'box_net_worth_in_currency' => 'Net worth (:currency)', - 'box_spend_per_day' => 'Left to spend per day: :amount', + 'box_balance_in_currency' => 'Balance (:currency)', + 'box_spent_in_currency' => 'Spent (:currency)', + 'box_earned_in_currency' => 'Earned (:currency)', + 'box_budgeted_in_currency' => 'Budgeted (:currency)', + 'box_bill_paid_in_currency' => 'Betalte regninger (:currency)', + 'box_bill_unpaid_in_currency' => 'Ubetalte regninger (:currency)', + 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', + 'box_net_worth_in_currency' => 'Net worth (:currency)', + 'box_spend_per_day' => 'Left to spend per day: :amount', // debug page - 'debug_page' => 'Debug page', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Debug page', + 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', + 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', + 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', // object groups - 'object_groups_menu_bar' => 'Groups', - 'object_groups_page_title' => 'Groups', - 'object_groups_breadcrumb' => 'Groups', - 'object_groups_index' => 'Overview', - 'object_groups' => 'Groups', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Title', - 'edit_object_group' => 'Edit group ":title"', - 'delete_object_group' => 'Delete group ":title"', - 'update_object_group' => 'Update group', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Group', + 'object_groups_menu_bar' => 'Groups', + 'object_groups_page_title' => 'Groups', + 'object_groups_breadcrumb' => 'Groups', + 'object_groups_index' => 'Overview', + 'object_groups' => 'Groups', + 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', + 'object_group_title' => 'Title', + 'edit_object_group' => 'Edit group ":title"', + 'delete_object_group' => 'Delete group ":title"', + 'update_object_group' => 'Update group', + 'updated_object_group' => 'Successfully updated group ":title"', + 'deleted_object_group' => 'Successfully deleted group ":title"', + 'object_group' => 'Group', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/da_DK/form.php b/resources/lang/da_DK/form.php index 2ed47386d9..ec5c19bde5 100644 --- a/resources/lang/da_DK/form.php +++ b/resources/lang/da_DK/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Bank navn', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Saldo for opsparingskonto', - 'credit_card_limit' => 'Kreditkort grænse', - 'automatch' => 'Automatisk afstemning', - 'skip' => 'Spring over', - 'enabled' => 'Aktiveret', - 'name' => 'Navn', - 'active' => 'Aktiv', - 'amount_min' => 'Minimumsbeløb', - 'amount_max' => 'Maksimumbeløb', - 'match' => 'Matcher på', - 'strict' => 'Strikt tilstand', - 'repeat_freq' => 'Gentagelser', - 'object_group' => 'Gruppe', - 'location' => 'Sted', - 'update_channel' => 'Opdateringskanal', - 'currency_id' => 'Valuta', - 'transaction_currency_id' => 'Valuta', - 'auto_budget_currency_id' => 'Valuta', - 'external_ip' => 'Din servers eksterne IP', - 'attachments' => 'Vedhæftninger', - 'BIC' => 'BIC', - 'verify_password' => 'Bekræft adgangskodesikkerhed', - 'source_account' => 'Kildekonto', - 'destination_account' => 'Destinationskonto', - 'asset_destination_account' => 'Destinationskonto', - 'include_net_worth' => 'Inkludér i formue', - 'asset_source_account' => 'Kildekonto', - 'journal_description' => 'Beskrivelse', - 'note' => 'Bemærkninger', - 'currency' => 'Valuta', - 'account_id' => 'Aktivkonto', - 'budget_id' => 'Budget', - 'bill_id' => 'Regning', - 'opening_balance' => 'Startsaldo', - 'tagMode' => 'Tag tilstand', - 'virtual_balance' => 'Virtuel saldo', + 'bank_name' => 'Bank navn', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Saldo for opsparingskonto', + 'credit_card_limit' => 'Kreditkort grænse', + 'automatch' => 'Automatisk afstemning', + 'skip' => 'Spring over', + 'enabled' => 'Aktiveret', + 'name' => 'Navn', + 'active' => 'Aktiv', + 'amount_min' => 'Minimumsbeløb', + 'amount_max' => 'Maksimumbeløb', + 'match' => 'Matcher på', + 'strict' => 'Strikt tilstand', + 'repeat_freq' => 'Gentagelser', + 'object_group' => 'Gruppe', + 'location' => 'Sted', + 'update_channel' => 'Opdateringskanal', + 'currency_id' => 'Valuta', + 'transaction_currency_id' => 'Valuta', + 'auto_budget_currency_id' => 'Valuta', + 'external_ip' => 'Din servers eksterne IP', + 'attachments' => 'Vedhæftninger', + 'BIC' => 'BIC', + 'verify_password' => 'Bekræft adgangskodesikkerhed', + 'source_account' => 'Kildekonto', + 'destination_account' => 'Destinationskonto', + 'asset_destination_account' => 'Destinationskonto', + 'include_net_worth' => 'Inkludér i formue', + 'asset_source_account' => 'Kildekonto', + 'journal_description' => 'Beskrivelse', + 'note' => 'Bemærkninger', + 'currency' => 'Valuta', + 'account_id' => 'Aktivkonto', + 'budget_id' => 'Budget', + 'bill_id' => 'Regning', + 'opening_balance' => 'Startsaldo', + 'tagMode' => 'Tag tilstand', + 'virtual_balance' => 'Virtuel saldo', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Målbeløb', 'account_role' => 'Kontorolle', 'opening_balance_date' => 'Dato for startsaldo', @@ -147,11 +145,11 @@ return [ 'start_date' => 'Start på området', 'end_date' => 'Slut på området', 'enddate' => 'Slut dato', - 'move_rules_before_delete' => 'Rule group', + 'move_rules_before_delete' => 'Regelgruppe', 'start' => 'Start på området', 'end' => 'Slut på området', 'delete_account' => 'Slet konto ":name"', - 'delete_webhook' => 'Delete webhook ":title"', + 'delete_webhook' => 'Slet webhook ":title"', 'delete_bill' => 'Slet regning ":name"', 'delete_budget' => 'Slet budget ":name"', 'delete_category' => 'Slet kategori ":name"', @@ -172,7 +170,7 @@ return [ 'object_group_areYouSure' => 'Er du sikker på du vil slette gruppen benævnt ":title"?', 'ruleGroup_areYouSure' => 'Er du sikker på du vil slette regelsætsgruppen benævnt ":title"?', 'budget_areYouSure' => 'Er du sikker på, at du vil slette budgettet benævnt ":name"?', - 'webhook_areYouSure' => 'Are you sure you want to delete the webhook named ":title"?', + 'webhook_areYouSure' => 'Er du sikker på, at du vil slette webhooket med navnet ":title"?', 'category_areYouSure' => 'Er du sikker på, at du vil slette kategorien ":name"?', 'recurring_areYouSure' => 'Er du sikker på, at du vil slette den periodiske transaktion benævnt ":title"?', 'currency_areYouSure' => 'Er du sikker på, at du vil slette ":name" valuetaen?', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Er du sikker på, at du vil slette transaktionen beskrevet med ":description"?', 'mass_journal_are_you_sure' => 'Er du sikker på, at du vil slette disse transaktioner?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Er du sikker på, at du vil slette tagget ":tag"?', 'journal_link_areYouSure' => 'Er du sikker på, at du vil slette linket mellem :source og :destination?', 'linkType_areYouSure' => 'Er du sikker på, at du vil slette linktypen ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Sang', - // admin 'domain' => 'Domæne', 'single_user_mode' => 'Deaktivér brugerregistrering', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS konto', 'local_account' => 'Firefly III konto', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Dato fra', - 'to_date' => 'Dato til', - 'due_date' => 'Forfaldsdato', - 'payment_date' => 'Betalingsdato', - 'invoice_date' => 'Fakturadato', - 'internal_reference' => 'Intern reference', - 'inward' => 'Indgående beskrivelse', - 'outward' => 'Udgående beskrivelse', - 'rule_group_id' => 'Regelgruppe', - 'transaction_description' => 'Transaktions beskrivelse', - 'first_date' => 'Første dato', - 'transaction_type' => 'Transaktionstype', - 'repeat_until' => 'Gentag indtil', - 'recurring_description' => 'Tilbagevendende transaktionsbeskrivelse', - 'repetition_type' => 'Gentagelsestype', - 'foreign_currency_id' => 'Fremmed valuta', - 'repetition_end' => 'Gentagelse slutter', - 'repetitions' => 'Gentagelser', - 'calendar' => 'Kalender', - 'weekend' => 'Weekend', - 'client_secret' => 'Klient hemmelig', - 'withdrawal_destination_id' => 'Destinationskonto', - 'deposit_source_id' => 'Kildekonto', - 'expected_on' => 'Forventet den', - 'paid' => 'Betalt', - 'auto_budget_type' => 'Auto-budget', - 'auto_budget_amount' => 'Auto-budget beløb', - 'auto_budget_period' => 'Auto-budget periode', - 'collected' => 'Indsamlet', - 'submitted' => 'Indsendt', - 'key' => 'Nøgle', - 'value' => 'Indholdet af post', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Dato fra', + 'to_date' => 'Dato til', + 'due_date' => 'Forfaldsdato', + 'payment_date' => 'Betalingsdato', + 'invoice_date' => 'Fakturadato', + 'internal_reference' => 'Intern reference', + 'inward' => 'Indgående beskrivelse', + 'outward' => 'Udgående beskrivelse', + 'rule_group_id' => 'Regelgruppe', + 'transaction_description' => 'Transaktions beskrivelse', + 'first_date' => 'Første dato', + 'transaction_type' => 'Transaktionstype', + 'repeat_until' => 'Gentag indtil', + 'recurring_description' => 'Tilbagevendende transaktionsbeskrivelse', + 'repetition_type' => 'Gentagelsestype', + 'foreign_currency_id' => 'Fremmed valuta', + 'repetition_end' => 'Gentagelse slutter', + 'repetitions' => 'Gentagelser', + 'calendar' => 'Kalender', + 'weekend' => 'Weekend', + 'client_secret' => 'Klient hemmelig', + 'withdrawal_destination_id' => 'Destinationskonto', + 'deposit_source_id' => 'Kildekonto', + 'expected_on' => 'Forventet den', + 'paid' => 'Betalt', + 'auto_budget_type' => 'Auto-budget', + 'auto_budget_amount' => 'Auto-budget beløb', + 'auto_budget_period' => 'Auto-budget periode', + 'collected' => 'Indsamlet', + 'submitted' => 'Indsendt', + 'key' => 'Nøgle', + 'value' => 'Indholdet af post', + 'webhook_delivery' => 'Levering', + 'webhook_response' => 'Svar', + 'webhook_trigger' => 'Udløser', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/da_DK/intro.php b/resources/lang/da_DK/intro.php index 4a9edebafd..0a324812d8 100644 --- a/resources/lang/da_DK/intro.php +++ b/resources/lang/da_DK/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Velkommen til forsiden af Firefly III. Tag lidt tid og gå gennem denne intro for at få en fornemmelse af hvordan Firefly III virker.', - 'index_accounts-chart' => 'Dette diagram viser den nuværende saldo på dine forbrugskonti. Du kan vælge de synlige konti i dine indstillinger.', - 'index_box_out_holder' => 'Denne lille boks og boksene ved siden af giver dig et hurtigt overblik over din finansielle situation.', - 'index_help' => 'Hvis du nogensinde har brug for hjælp med en side eller en formular, tryk på denne knap.', - 'index_outro' => 'De fleste sider i Firefly III starter med en lille tour som denne. Kontakt mig venligst, hvis du har spørgsmål eller kommentarer. God fornøjelse!', - 'index_sidebar-toggle' => 'For at oprette nye transaktioner, konti eller andet, brug da menuen under dette ikon.', - 'index_cash_account' => 'Disse er de oprettede konti for nu. Du kan bruge kontantkontoen til at spore dine kontante udgifter, men det er selvfølgelig ikke obligatorisk.', + 'index_intro' => 'Velkommen til forsiden af Firefly III. Tag lidt tid og gå gennem denne intro for at få en fornemmelse af hvordan Firefly III virker.', + 'index_accounts-chart' => 'Dette diagram viser den nuværende saldo på dine forbrugskonti. Du kan vælge de synlige konti i dine indstillinger.', + 'index_box_out_holder' => 'Denne lille boks og boksene ved siden af giver dig et hurtigt overblik over din finansielle situation.', + 'index_help' => 'Hvis du nogensinde har brug for hjælp med en side eller en formular, tryk på denne knap.', + 'index_outro' => 'De fleste sider i Firefly III starter med en lille tour som denne. Kontakt mig venligst, hvis du har spørgsmål eller kommentarer. God fornøjelse!', + 'index_sidebar-toggle' => 'For at oprette nye transaktioner, konti eller andet, brug da menuen under dette ikon.', + 'index_cash_account' => 'Disse er de oprettede konti for nu. Du kan bruge kontantkontoen til at spore dine kontante udgifter, men det er selvfølgelig ikke obligatorisk.', // transactions - 'transactions_create_basic_info' => 'Indtast de grundlæggende oplysninger for din transaktion. Kilde, destination, dato og beskrivelse.', - 'transactions_create_amount_info' => 'Indtast transaktionsbeløbet. Hvis det er nødvendigt, vil felterne automatisk opdatere for fremmedvaluta.', - 'transactions_create_optional_info' => 'Alle disse felter er valgfrie. Hvis du tilføjer metadata her, kan du organisere dine transaktioner bedre.', - 'transactions_create_split' => 'Hvis du vil opdele en transaktion, så kan dette gøres med denne knap', + 'transactions_create_basic_info' => 'Indtast de grundlæggende oplysninger for din transaktion. Kilde, destination, dato og beskrivelse.', + 'transactions_create_amount_info' => 'Indtast transaktionsbeløbet. Hvis det er nødvendigt, vil felterne automatisk opdatere for fremmedvaluta.', + 'transactions_create_optional_info' => 'Alle disse felter er valgfrie. Hvis du tilføjer metadata her, kan du organisere dine transaktioner bedre.', + 'transactions_create_split' => 'Hvis du vil opdele en transaktion, så kan dette gøres med denne knap', // create account: - 'accounts_create_iban' => 'Giv dine konti en gyldig IBAN. Dette kan gøre en dataimport lettere i fremtiden.', - 'accounts_create_asset_opening_balance' => 'Konti for aktiver kan have en "startsaldo", der angiver begyndelsen af kontoens historik i Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III understøtter flere valutaer. Konti for aktiver har en primær valuta, som du skal angive her.', - 'accounts_create_asset_virtual' => 'Det kan undertiden være en hjælp at give din konto en virtuel saldo: et beløb der altid tilføjes eller trækkes fra den faktiske saldo.', + 'accounts_create_iban' => 'Giv dine konti en gyldig IBAN. Dette kan gøre en dataimport lettere i fremtiden.', + 'accounts_create_asset_opening_balance' => 'Konti for aktiver kan have en "startsaldo", der angiver begyndelsen af kontoens historik i Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III understøtter flere valutaer. Konti for aktiver har en primær valuta, som du skal angive her.', + 'accounts_create_asset_virtual' => 'Det kan undertiden være en hjælp at give din konto en virtuel saldo: et beløb der altid tilføjes eller trækkes fra den faktiske saldo.', // budgets index - 'budgets_index_intro' => 'Budgetter bruges til at styre dine finanser og udgør en af de centrale funktioner i Firefly III.', - 'budgets_index_set_budget' => 'Opret dit samlede budget for hver periode, så Firefly III kan fortælle dig, om du har budgetteret alle tilgængelige midler.', - 'budgets_index_see_expenses_bar' => 'Efterhånden som penge forbruges, vil denne bjælke langsomt udfyldes.', - 'budgets_index_navigate_periods' => 'Naviger gennem perioder for nemt at kunne oprette budgetter fremadrettet.', - 'budgets_index_new_budget' => 'Opret nye budgetter, som du finder passende.', - 'budgets_index_list_of_budgets' => 'Brug denne tabel til at fastsætte beløbene for hvert budget og se, hvordan du klarer det.', - 'budgets_index_outro' => 'For at lære mere om budgettering, tjek hjælpeikonet i øverste højre hjørne.', + 'budgets_index_intro' => 'Budgetter bruges til at styre dine finanser og udgør en af de centrale funktioner i Firefly III.', + 'budgets_index_see_expenses_bar' => 'Efterhånden som penge forbruges, vil denne bjælke langsomt udfyldes.', + 'budgets_index_navigate_periods' => 'Naviger gennem perioder for nemt at kunne oprette budgetter fremadrettet.', + 'budgets_index_new_budget' => 'Opret nye budgetter, som du finder passende.', + 'budgets_index_list_of_budgets' => 'Brug denne tabel til at fastsætte beløbene for hvert budget og se, hvordan du klarer det.', + 'budgets_index_outro' => 'For at lære mere om budgettering, tjek hjælpeikonet i øverste højre hjørne.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Brug disse rapporter til at få detaljeret indsigt i dine finanser.', - 'reports_index_inputReportType' => 'Vælg en rapporttype. Tjek hjælpesiderne for at se, hvad hver rapport viser.', - 'reports_index_inputAccountsSelect' => 'Du kan udelukke eller inkludere aktiver som du finder passende.', - 'reports_index_inputDateRange' => 'Det valgte datointerval er helt op til dig: fra en dag til 10 år.', - 'reports_index_extra-options-box' => 'Afhængigt af den rapport du har valgt, kan du vælge ekstra filtre og indstillinger her. Se dette felt når du ændrer rapporttyper.', + 'reports_index_intro' => 'Brug disse rapporter til at få detaljeret indsigt i dine finanser.', + 'reports_index_inputReportType' => 'Vælg en rapporttype. Tjek hjælpesiderne for at se, hvad hver rapport viser.', + 'reports_index_inputAccountsSelect' => 'Du kan udelukke eller inkludere aktiver som du finder passende.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Afhængigt af den rapport du har valgt, kan du vælge ekstra filtre og indstillinger her. Se dette felt når du ændrer rapporttyper.', // reports (reports) - 'reports_report_default_intro' => 'Denne rapport vil give dig et hurtigt og omfattende overblik over dine finanser. Hvis du har forslag til andre, tøv ikke med at kontakte mig!', - 'reports_report_audit_intro' => 'Denne rapport vil give dig et detaljeret overblik over dine aktiver.', - 'reports_report_audit_optionsBox' => 'Brug disse afkrydsningsfelter til at vise eller skjule de kolonner, du er interesseret i.', + 'reports_report_default_intro' => 'Denne rapport vil give dig et hurtigt og omfattende overblik over dine finanser. Hvis du har forslag til andre, tøv ikke med at kontakte mig!', + 'reports_report_audit_intro' => 'Denne rapport vil give dig et detaljeret overblik over dine aktiver.', + 'reports_report_audit_optionsBox' => 'Brug disse afkrydsningsfelter til at vise eller skjule de kolonner, du er interesseret i.', - 'reports_report_category_intro' => 'Denne rapport vil give dig overblik over en eller flere kategorier.', - 'reports_report_category_pieCharts' => 'Disse diagrammer vil give dig overblik over udgifter og indkomst per kategori eller per konto.', - 'reports_report_category_incomeAndExpensesChart' => 'Dette diagram viser dine udgifter og indtægter per kategori.', + 'reports_report_category_intro' => 'Denne rapport vil give dig overblik over en eller flere kategorier.', + 'reports_report_category_pieCharts' => 'Disse diagrammer vil give dig overblik over udgifter og indkomst per kategori eller per konto.', + 'reports_report_category_incomeAndExpensesChart' => 'Dette diagram viser dine udgifter og indtægter per kategori.', - 'reports_report_tag_intro' => 'Denne rapport vil give dig overblik over et eller flere tags.', - 'reports_report_tag_pieCharts' => 'Disse diagrammer vil give dig overblik over udgifter og indkomst per tag, konto, kategori eller budget.', - 'reports_report_tag_incomeAndExpensesChart' => 'Dette diagram viser dine udgifter og indtægter per tag.', + 'reports_report_tag_intro' => 'Denne rapport vil give dig overblik over et eller flere tags.', + 'reports_report_tag_pieCharts' => 'Disse diagrammer vil give dig overblik over udgifter og indkomst per tag, konto, kategori eller budget.', + 'reports_report_tag_incomeAndExpensesChart' => 'Dette diagram viser dine udgifter og indtægter per tag.', 'reports_report_budget_intro' => 'Denne rapport vil give dig overblik over et eller flere budgetter.', 'reports_report_budget_pieCharts' => 'Disse diagrammer vil give dig overblik over udgifterne per budget eller per konto.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Ved siden af denne statuslinje er to knapper (+ og -) for at tilføje eller fjerne penge fra hver "sparebøsse".', 'piggy-banks_index_accountStatus' => 'For hver konto for aktiver med mindst en "sparebøsse" er status angivet i denne tabel.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Hvad er dit mål? En ny sofa, et kamera, penge til nødsituationer?', 'piggy-banks_create_date' => 'Du kan angive en måldato eller en deadline for din "sparebøsse".', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Brug regninger til at spore det beløb du skylder hver periode. Tænk på udgifter som leje, forsikring eller realkreditbetalinger.', 'bills_create_name' => 'Brug et beskrivende navn som "Leje" eller "Sundhedsforsikring".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Vælg et minimum og maksimum beløb for denne regning.', 'bills_create_repeat_freq_holder' => 'De fleste regninger gentages månedligt, men du kan indstille en anden hyppighed her.', 'bills_create_skip_holder' => 'Hvis en regning gentages hver 2. uge, skal "oversprings"-feltet indstilles til "1" for at springe over hver anden uge.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Brug denne knap til at se, hvilke transaktioner der ville passe til din regel.', 'rules_create_actions' => 'Angiv så mange handlinger som du ønsker.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Flere indstillinger er tilgængelige bag disse fanerblade.', diff --git a/resources/lang/da_DK/list.php b/resources/lang/da_DK/list.php index e58a3dbb62..5a2becd6d1 100644 --- a/resources/lang/da_DK/list.php +++ b/resources/lang/da_DK/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Knapper', - 'icon' => 'Ikon', - 'id' => 'ID', - 'create_date' => 'Oprettet den', - 'update_date' => 'Opdateret den', - 'updated_at' => 'Opdateret den', - 'balance_before' => 'Saldo før', - 'balance_after' => 'Saldo efter', - 'name' => 'Navn', - 'role' => 'Rolle', - 'currentBalance' => 'Nuværende saldo', - 'linked_to_rules' => 'Relevante regler', - 'active' => 'Aktiv?', - 'percentage' => 'pct.', - 'recurring_transaction' => 'Periodisk transaktion', - 'next_due' => 'Næste forfaldsdato', - 'transaction_type' => 'Type', - 'lastActivity' => 'Seneste aktivitet', - 'balanceDiff' => 'Saldo forskel', - 'other_meta_data' => 'Andre metadata', - 'invited_at' => 'Inviteret den', - 'expires' => 'Invitationen udløber', - 'invited_by' => 'Inviteret af', - 'invite_link' => 'Invitationslink', - 'account_type' => 'Kontotype', - 'created_at' => 'Oprettet den', - 'account' => 'Konto', - 'external_url' => 'Ekstern URL', - 'matchingAmount' => 'Beløb', - 'destination' => 'Destination', - 'source' => 'Kilde', - 'next_expected_match' => 'Næste forventede afstemning', - 'automatch' => 'Auto afstem?', + 'buttons' => 'Knapper', + 'icon' => 'Ikon', + 'id' => 'ID', + 'create_date' => 'Oprettet den', + 'update_date' => 'Opdateret den', + 'updated_at' => 'Opdateret den', + 'balance_before' => 'Saldo før', + 'balance_after' => 'Saldo efter', + 'name' => 'Navn', + 'role' => 'Rolle', + 'currentBalance' => 'Nuværende saldo', + 'linked_to_rules' => 'Relevante regler', + 'active' => 'Aktiv?', + 'percentage' => 'pct.', + 'recurring_transaction' => 'Periodisk transaktion', + 'next_due' => 'Næste forfaldsdato', + 'transaction_type' => 'Type', + 'lastActivity' => 'Seneste aktivitet', + 'balanceDiff' => 'Saldo forskel', + 'other_meta_data' => 'Andre metadata', + 'invited_at' => 'Inviteret den', + 'expires' => 'Invitationen udløber', + 'invited_by' => 'Inviteret af', + 'invite_link' => 'Invitationslink', + 'account_type' => 'Kontotype', + 'created_at' => 'Oprettet den', + 'account' => 'Konto', + 'external_url' => 'Ekstern URL', + 'matchingAmount' => 'Beløb', + 'destination' => 'Destination', + 'source' => 'Kilde', + 'next_expected_match' => 'Næste forventede afstemning', + 'automatch' => 'Auto afstem?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Gentagelser', 'description' => 'Beskrivelse', 'amount' => 'Beløb', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Konto hos bunq', 'file_name' => 'Filnavn', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Filstørrelse', - 'file_type' => 'Filtype', - 'attached_to' => 'Vedhæftet til', - 'file_exists' => 'Filen findes', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Seneste login', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'bunq betalings ID', - 'repetitions' => 'Gentagelser', - 'title' => 'Titel', - 'transaction_s' => 'Transaktion(er)', - 'field' => 'Felt', - 'value' => 'Værdi', - 'interest' => 'Renter', - 'interest_period' => 'Renteperiode', - 'liability_type' => 'Gældstype', - 'liability_direction' => 'Passiver ind/ud', - 'end_date' => 'Slut dato', - 'payment_info' => 'Betalings information', - 'expected_info' => 'Næste forventede transaktion', - 'start_date' => 'Start dato', - 'trigger' => 'Udløser', - 'response' => 'Svar', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Hemmelighed', - + 'file_size' => 'Filstørrelse', + 'file_type' => 'Filtype', + 'attached_to' => 'Vedhæftet til', + 'file_exists' => 'Filen findes', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Seneste login', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'bunq betalings ID', + 'repetitions' => 'Gentagelser', + 'title' => 'Titel', + 'transaction_s' => 'Transaktion(er)', + 'field' => 'Felt', + 'value' => 'Værdi', + 'interest' => 'Renter', + 'interest_period' => 'Renteperiode', + 'liability_type' => 'Gældstype', + 'liability_direction' => 'Passiver ind/ud', + 'end_date' => 'Slut dato', + 'payment_info' => 'Betalings information', + 'expected_info' => 'Næste forventede transaktion', + 'start_date' => 'Start dato', + 'trigger' => 'Udløser', + 'response' => 'Svar', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Hemmelighed', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/da_DK/pagination.php b/resources/lang/da_DK/pagination.php index c222dacd4b..5878137212 100644 --- a/resources/lang/da_DK/pagination.php +++ b/resources/lang/da_DK/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/da_DK/passwords.php b/resources/lang/da_DK/passwords.php index 19a44c17af..83638ee488 100644 --- a/resources/lang/da_DK/passwords.php +++ b/resources/lang/da_DK/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/da_DK/rules.php b/resources/lang/da_DK/rules.php index 389fb335ff..06edad7644 100644 --- a/resources/lang/da_DK/rules.php +++ b/resources/lang/da_DK/rules.php @@ -1,6 +1,5 @@ 'Action ":action", present in rule ":rule", could not be applied to transaction #:group: :error', - 'find_or_create_tag_failed' => 'Could not find or create tag ":tag"', - 'tag_already_added' => 'Tag ":tag" is already linked to this transaction', - 'inspect_transaction' => 'Inspect transaction ":title" @ Firefly III', - 'inspect_rule' => 'Inspect rule ":title" @ Firefly III', - 'journal_other_user' => 'This transaction doesn\'t belong to the user', - 'no_such_journal' => 'This transaction doesn\'t exist', - 'journal_already_no_budget' => 'This transaction has no budget, so it cannot be removed', - 'journal_already_no_category' => 'This transaction had no category, so it cannot be removed', - 'journal_already_no_notes' => 'This transaction had no notes, so they cannot be removed', - 'journal_not_found' => 'Firefly III can\'t find the requested transaction', - 'split_group' => 'Firefly III cannot execute this action on a transaction with multiple splits', - 'is_already_withdrawal' => 'This transaction is already a withdrawal', - 'is_already_deposit' => 'This transaction is already a deposit', - 'is_already_transfer' => 'This transaction is already a transfer', - 'is_not_transfer' => 'This transaction is not a transfer', - 'complex_error' => 'Something complicated went wrong. Sorry about that. Please inspect the logs of Firefly III', - 'no_valid_opposing' => 'Conversion failed because there is no valid account named ":account"', - 'new_notes_empty' => 'The notes to be set are empty', - 'unsupported_transaction_type_withdrawal' => 'Firefly III cannot convert a ":type" to a withdrawal', - 'unsupported_transaction_type_deposit' => 'Firefly III cannot convert a ":type" to a deposit', - 'unsupported_transaction_type_transfer' => 'Firefly III cannot convert a ":type" to a transfer', - 'already_has_source_asset' => 'This transaction already has ":name" as the source asset account', - 'already_has_destination_asset' => 'This transaction already has ":name" as the destination asset account', - 'already_has_destination' => 'This transaction already has ":name" as the destination account', - 'already_has_source' => 'This transaction already has ":name" as the source account', - 'already_linked_to_subscription' => 'The transaction is already linked to subscription ":name"', - 'already_linked_to_category' => 'The transaction is already linked to category ":name"', - 'already_linked_to_budget' => 'The transaction is already linked to budget ":name"', - 'cannot_find_subscription' => 'Firefly III can\'t find subscription ":name"', - 'no_notes_to_move' => 'The transaction has no notes to move to the description field', - 'no_tags_to_remove' => 'The transaction has no tags to remove', - 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', - 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', - 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', - 'cannot_find_source_transaction' => 'Firefly III can\'t find the source transaction', - 'cannot_find_destination_transaction' => 'Firefly III can\'t find the destination transaction', - 'cannot_find_source_transaction_account' => 'Firefly III can\'t find the source transaction account', - 'cannot_find_destination_transaction_account' => 'Firefly III can\'t find the destination transaction account', - 'cannot_find_piggy' => 'Firefly III can\'t find a piggy bank named ":name"', - 'no_link_piggy' => 'This transaction\'s accounts are not linked to the piggy bank, so no action will be taken', - 'cannot_unlink_tag' => 'Tag ":tag" isn\'t linked to this transaction', - 'cannot_find_budget' => 'Firefly III can\'t find budget ":name"', - 'cannot_find_category' => 'Firefly III can\'t find category ":name"', - 'cannot_set_budget' => 'Firefly III can\'t set budget ":name" to a transaction of type ":type"', + 'main_message' => 'Handling ":action", til stede i regel ":rule", kunne ikke anvendes på transaktion #:group: :error', + 'find_or_create_tag_failed' => 'Kunne ikke finde eller oprette tag ":tag"', + 'tag_already_added' => 'Tag ":tag" er allerede tilknyttet denne transaktion', + 'inspect_transaction' => 'Inspicer transaktion ":title" @ Firefly III', + 'inspect_rule' => 'Inspicer regel ":title" @ Firefly III', + 'journal_other_user' => 'Denne transaktion tilhører ikke brugeren', + 'no_such_journal' => 'Denne transaktion findes ikke', + 'journal_already_no_budget' => 'Denne transaktion har intet budget, så den kan ikke fjernes', + 'journal_already_no_category' => 'Denne transaktion havde ingen kategori, så den kan ikke fjernes', + 'journal_already_no_notes' => 'Denne transaktion har ingen noter, så de kan ikke fjernes', + 'journal_not_found' => 'Firefly III kan ikke finde den ønskede transaktion', + 'split_group' => 'Firefly III kan ikke udføre denne handling på en transaktion med flere opdelinger', + 'is_already_withdrawal' => 'Denne transaktion er allerede en hævning', + 'is_already_deposit' => 'Denne transaktion er allerede en deponering', + 'is_already_transfer' => 'Denne transaktion er allerede en overførsel', + 'is_not_transfer' => 'Denne transaktion er ikke en overførsel', + 'complex_error' => 'Noget kompliceret gik galt. Beklager over det. Tjek logs af Firefly III', + 'no_valid_opposing' => 'Konvertering mislykkedes fordi der ikke er en gyldig konto med navnet ":account"', + 'new_notes_empty' => 'De noter, der skal indstilles, er tomme', + 'unsupported_transaction_type_withdrawal' => 'Firefly III kan ikke konvertere en ":type" til en udbetaling', + 'unsupported_transaction_type_deposit' => 'Firefly III kan ikke konvertere en ":type" til en deponering', + 'unsupported_transaction_type_transfer' => 'Firefly III kan ikke konvertere en ":type" til en overførsel', + 'already_has_source_asset' => 'Denne transaktion har allerede ":name" som kildeaktivkonto', + 'already_has_destination_asset' => 'Denne transaktion har allerede ":name" som destinationsaktivkonto', + 'already_has_destination' => 'Denne transaktion har allerede ":name" som destinationskonto', + 'already_has_source' => 'Denne transaktion har allerede ":name" som kildekonto', + 'already_linked_to_subscription' => 'Denne transaktion er allerede knyttet til abonnement ":name"', + 'already_linked_to_category' => 'Denne transaktion er allerede knyttet til kategori ":name"', + 'already_linked_to_budget' => 'Denne transaktion er allerede knyttet til budget ":name"', + 'cannot_find_subscription' => 'Firefly III kan ikke finde abonnement ":name"', + 'no_notes_to_move' => 'Transaktionen har ingen noter at flytte til beskrivelsesfeltet', + 'no_tags_to_remove' => 'Transaktionen har ingen tags at fjerne', + 'not_withdrawal' => 'Denne transaktion er ikke en hævning', + 'not_deposit' => 'Denne transaktion er ikke en deponering', + 'cannot_find_tag' => 'Firefly III kan ikke finde tag ":tag"', + 'cannot_find_asset' => 'Firefly III kan ikke finde aktivkonto ":name"', + 'cannot_find_accounts' => 'Firefly III kan ikke finde kilde- eller destinationkontoen', + 'cannot_find_source_transaction' => 'Firefly III kan ikke finde kildetransaktionen', + 'cannot_find_destination_transaction' => 'Firefly III kan ikke finde destinationstransaktionen', + 'cannot_find_source_transaction_account' => 'Firefly III kan ikke finde kildetransaktionskontoen', + 'cannot_find_destination_transaction_account' => 'Firefly III kan ikke finde destinationstransaktionskontoen', + 'cannot_find_piggy' => 'Firefly III kan ikke finde en sparegris med navnet ":name"', + 'no_link_piggy' => 'Denne transaktions konti er ikke knyttet til sparegrisen, så ingen handling vil tage sted', + 'cannot_unlink_tag' => 'Tag ":tag" er ikke tilknyttet denne transaktion', + 'cannot_find_budget' => 'Firefly III kan ikke finde budget ":name"', + 'cannot_find_category' => 'Firefly III kan ikke finde kategori ":name"', + 'cannot_set_budget' => 'Firefly III kan ikke indstille budget ":name" til en transaktion af typen ":type"', ]; diff --git a/resources/lang/da_DK/validation.php b/resources/lang/da_DK/validation.php index 47420ee5b3..4371db83b5 100644 --- a/resources/lang/da_DK/validation.php +++ b/resources/lang/da_DK/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array mangler “Where”-sektion', - 'missing_update' => 'Array mangler “update”-sektion', - 'invalid_where_key' => 'JSON indeholder en ugyldig nøgle til "where"-sektionen', - 'invalid_update_key' => 'JSON indeholder en ugyldig nøgle til "update"-sektionen', - 'invalid_query_data' => 'Der er ugyldige data i feltet %s:%s i din forespørgsel.', - 'invalid_query_account_type' => 'Din forespørgsel indeholder konti af forskellige typer, hvilket ikke er tilladt.', - 'invalid_query_currency' => 'Din forespørgsel indeholder konti, der har forskellige valutaindstillinger, hvilket ikke er tilladt.', - 'iban' => 'Dette er ikke et gyldig IBAN.', - 'zero_or_more' => 'Denne værdi kan ikke være negativ.', - 'date_or_time' => 'Værdien skal være en gyldig dato eller tids værdi (ISO 8601).', - 'source_equals_destination' => 'Kildekontoen er den samme som modtagerkontoen.', - 'unique_account_number_for_user' => 'Det ser ud som om dette kontonummer allerede er i brug.', - 'unique_iban_for_user' => 'Det ser ud til denne IBAN allerede er i brug.', - 'deleted_user' => 'På grund af sikkerhedspolikker, kan du ikke registrere med denne email adresse.', - 'rule_trigger_value' => 'Denne værdi er ikke gyldig for den valgte trigger.', - 'rule_action_value' => 'Denne værdi er ikke gyldig for den valgte handling.', - 'file_already_attached' => 'Den uploadede fil ":name" er allerede vedhælftet til dette objekt.', - 'file_attached' => 'Oploadede succesfuldt filen: ":name".', - 'must_exist' => 'ID\'et i feltet :attribute eksisterer ikke i databasen.', - 'all_accounts_equal' => 'Alle konti i dette felt skal være ens.', - 'group_title_mandatory' => 'En gruppetitel er påkrævet når der er mere end en overførsel.', - 'transaction_types_equal' => 'Alle opsplitninger skal være af samme type.', - 'invalid_transaction_type' => 'Ugyldig overførelsestype.', - 'invalid_selection' => 'Din markering er ikke gyldig.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Kræver mindst en overførsel.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Kræver mindst en gentagelse.', - 'require_repeat_until' => 'Kræver enten et antal af gentagelser, eller en slutdato (repeat_until). Ikke begge.', - 'require_currency_info' => 'Indholdet af dette felt er ugyldigt uden møntfodsinformation.', - 'not_transfer_account' => 'Denne konto kan ikke benyttes til overførsler.', - 'require_currency_amount' => 'Indholdet af dette felt er ugyldigt uden information om det udenlandske beløb.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Overførselsbeskrivelse bør ikke være den samme som den generelle beskrivelse.', - 'file_invalid_mime' => 'Filen ":name" er af typen ":mime", som ikke er gyldig som en ny upload.', - 'file_too_large' => 'Filen ":name" er for stor.', - 'belongs_to_user' => 'Værdien af :attribute er ukendt.', - 'accepted' => ':attribute skal accepteres.', - 'bic' => 'Dette er ikke et gyldig BIC.', - 'at_least_one_trigger' => 'Reglen skal have mindst en udløser.', - 'at_least_one_active_trigger' => 'Reglen skal have mindst en aktivt udløser.', - 'at_least_one_action' => 'Reglen skal have mindst en aktion.', - 'at_least_one_active_action' => 'Reglen skal have mindst en aktiv aktion.', - 'base64' => 'Dette er ikke gyldig base64 indkodet data.', - 'model_id_invalid' => 'Dette givne ID virker ugyldigt for denne model.', - 'less' => ':attribute skal være mindre end 10.000.000', - 'active_url' => ':attribute er ikke en gyldig URL.', - 'after' => ':attribute skal være en dato efter :date.', - 'date_after' => 'Startdatoen skal være før slutdatoen.', - 'alpha' => ':attribute må kun indeholde bogstaver.', - 'alpha_dash' => ':attribute må kun indeholde bogstaver, tal og bindestreger.', - 'alpha_num' => ':attribute må kun bestå af bogstaver og tal.', - 'array' => ':attribute skal være et array.', - 'unique_for_user' => 'Der findes allerede en værdi med :attribute.', - 'before' => ':attribute skal være en dato før :date.', - 'unique_object_for_user' => 'Navnet er allerede i brug.', - 'unique_account_for_user' => 'Kontonavnet er allerede i brug.', + 'bad_type_source' => 'Firefly III kan ikke bestemme transaktionstypen baseret på denne kildekonto.', + 'bad_type_destination' => 'Firefly III kan ikke bestemme transaktionstypen baseret på denne destinationskonto.', + 'missing_where' => 'Array mangler “Where”-sektion', + 'missing_update' => 'Array mangler “update”-sektion', + 'invalid_where_key' => 'JSON indeholder en ugyldig nøgle til "where"-sektionen', + 'invalid_update_key' => 'JSON indeholder en ugyldig nøgle til "update"-sektionen', + 'invalid_query_data' => 'Der er ugyldige data i feltet %s:%s i din forespørgsel.', + 'invalid_query_account_type' => 'Din forespørgsel indeholder konti af forskellige typer, hvilket ikke er tilladt.', + 'invalid_query_currency' => 'Din forespørgsel indeholder konti, der har forskellige valutaindstillinger, hvilket ikke er tilladt.', + 'iban' => 'Dette er ikke et gyldig IBAN.', + 'zero_or_more' => 'Denne værdi kan ikke være negativ.', + 'more_than_zero' => 'Værdien skal være højere end nul.', + 'more_than_zero_correct' => 'Værdien skal være nul eller mere.', + 'no_asset_account' => 'Dette er ikke en aktivkonto.', + 'date_or_time' => 'Værdien skal være en gyldig dato eller tids værdi (ISO 8601).', + 'source_equals_destination' => 'Kildekontoen er den samme som modtagerkontoen.', + 'unique_account_number_for_user' => 'Det ser ud som om dette kontonummer allerede er i brug.', + 'unique_iban_for_user' => 'Det ser ud til denne IBAN allerede er i brug.', + 'reconciled_forbidden_field' => 'Denne transaktion er allerede forsonet, du kan ikke ændre ":field"', + 'deleted_user' => 'På grund af sikkerhedspolikker, kan du ikke registrere med denne email adresse.', + 'rule_trigger_value' => 'Denne værdi er ikke gyldig for den valgte trigger.', + 'rule_action_value' => 'Denne værdi er ikke gyldig for den valgte handling.', + 'file_already_attached' => 'Den uploadede fil ":name" er allerede vedhælftet til dette objekt.', + 'file_attached' => 'Oploadede succesfuldt filen: ":name".', + 'must_exist' => 'ID\'et i feltet :attribute eksisterer ikke i databasen.', + 'all_accounts_equal' => 'Alle konti i dette felt skal være ens.', + 'group_title_mandatory' => 'En gruppetitel er påkrævet når der er mere end en overførsel.', + 'transaction_types_equal' => 'Alle opsplitninger skal være af samme type.', + 'invalid_transaction_type' => 'Ugyldig overførelsestype.', + 'invalid_selection' => 'Din markering er ikke gyldig.', + 'belongs_user' => 'Denne værdi er knyttet til et objekt, der ikke ser ud til at eksistere.', + 'belongs_user_or_user_group' => 'Denne værdi er knyttet til et objekt, der ikke ser ud til at eksistere i din nuværende økonomiske administration.', + 'at_least_one_transaction' => 'Kræver mindst en overførsel.', + 'recurring_transaction_id' => 'Kræver mindst en overførsel.', + 'need_id_to_match' => 'Du skal indsende denne post med et ID for, at APIet kan matche det.', + 'too_many_unmatched' => 'For mange indsendte transaktioner kan ikke matches med deres respektive databaseposter. Sørg for, at eksisterende poster har et gyldigt ID.', + 'id_does_not_match' => 'Indsendt ID #:id matcher ikke forventet ID. Sørg for at det matcher eller udelad feltet.', + 'at_least_one_repetition' => 'Kræver mindst en gentagelse.', + 'require_repeat_until' => 'Kræver enten et antal af gentagelser, eller en slutdato (repeat_until). Ikke begge.', + 'require_currency_info' => 'Indholdet af dette felt er ugyldigt uden møntfodsinformation.', + 'not_transfer_account' => 'Denne konto kan ikke benyttes til overførsler.', + 'require_currency_amount' => 'Indholdet af dette felt er ugyldigt uden information om det udenlandske beløb.', + 'require_foreign_currency' => 'Dette felt kræver et tal', + 'require_foreign_dest' => 'Denne feltværdi skal matche valutaen på destinationskontoen.', + 'require_foreign_src' => 'Denne feltværdi skal matche valutaen på kildekontoen.', + 'equal_description' => 'Overførselsbeskrivelse bør ikke være den samme som den generelle beskrivelse.', + 'file_invalid_mime' => 'Filen ":name" er af typen ":mime", som ikke er gyldig som en ny upload.', + 'file_too_large' => 'Filen ":name" er for stor.', + 'belongs_to_user' => 'Værdien af :attribute er ukendt.', + 'accepted' => ':attribute skal accepteres.', + 'bic' => 'Dette er ikke et gyldig BIC.', + 'at_least_one_trigger' => 'Reglen skal have mindst en udløser.', + 'at_least_one_active_trigger' => 'Reglen skal have mindst en aktivt udløser.', + 'at_least_one_action' => 'Reglen skal have mindst en aktion.', + 'at_least_one_active_action' => 'Reglen skal have mindst en aktiv aktion.', + 'base64' => 'Dette er ikke gyldig base64 indkodet data.', + 'model_id_invalid' => 'Dette givne ID virker ugyldigt for denne model.', + 'less' => ':attribute skal være mindre end 10.000.000', + 'active_url' => ':attribute er ikke en gyldig URL.', + 'after' => ':attribute skal være en dato efter :date.', + 'date_after' => 'Startdatoen skal være før slutdatoen.', + 'alpha' => ':attribute må kun indeholde bogstaver.', + 'alpha_dash' => ':attribute må kun indeholde bogstaver, tal og bindestreger.', + 'alpha_num' => ':attribute må kun bestå af bogstaver og tal.', + 'array' => ':attribute skal være et array.', + 'unique_for_user' => 'Der findes allerede en værdi med :attribute.', + 'before' => ':attribute skal være en dato før :date.', + 'unique_object_for_user' => 'Navnet er allerede i brug.', + 'unique_account_for_user' => 'Kontonavnet er allerede i brug.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute skal være mellem :min og :max.', + 'between.file' => ':attribute skal være mellem :min og :max kilobytes.', + 'between.string' => ':attribute skal være imellem :min - :max tegn.', + 'between.array' => ':attribute skal have mellem :min og :max elementer.', + 'boolean' => ':attribute-feltet skal være enten sandt eller falsk.', + 'confirmed' => ':attribute bekræftelsen matcher ikke.', + 'date' => ':attribute er ikke en gyldig dato.', + 'date_format' => ':attribute matcher ikke formatet :format.', + 'different' => ':attribute og :other skal være forskellige.', + 'digits' => ':attribute skal være :digits cifre.', + 'digits_between' => ':attribute skal være mellem :min og :max cifre.', + 'email' => ':attribute skal være en gyldig email-adresse.', + 'filled' => ':attribute feltet er påkrævet.', + 'exists' => 'Den valgte :attribute er ikke gyldig.', + 'image' => ':attribute skal være et billede.', + 'in' => 'Den valgte :attribute er ikke gyldig.', + 'integer' => ':attribute skal være et heltal.', + 'ip' => ':attribute skal være en gyldig IP-adresse.', + 'json' => ':attribute skal være en gyldig JSON-streng.', + 'max.numeric' => ':attribute må ikke overstige :max.', + 'max.file' => ':attribute må ikke overstige :max kilobytes.', + 'max.string' => ':attribute må ikke overstige :max. tegn.', + 'max.array' => ':attribute må ikke have mere end :max elementer.', + 'mimes' => ':attribute skal være en fil af typen: :values.', + 'min.numeric' => ':attribute skal være mindst :min.', + 'lte.numeric' => ':attribute skal være mindre end eller lig med :value.', + 'min.file' => ':attribute skal være mindst :min kilobytes.', + 'min.string' => ':attribute skal mindst være :min tegn.', + 'min.array' => ':attribute skal have mindst :min elementer.', + 'not_in' => 'Den valgte :attribute er ikke gyldig.', + 'numeric' => ':attribute skal være et tal.', + 'scientific_notation' => ':attribute kan ikke bruge den videnskabelige notation.', + 'numeric_native' => 'Det oprindelige beløb skal være et tal.', + 'numeric_destination' => 'Bestemmelsesbeløbet skal være et tal.', + 'numeric_source' => 'Kildebeløbet skal være et tal.', + 'regex' => ':attribute formatet er ugylidgt.', + 'required' => ':attribute feltet er påkrævet.', + 'required_if' => ':attribute skal udfyldes når :other er :value.', + 'required_unless' => ':attribute feltet er påkrævet, medmindre :other er i :values.', + 'required_with' => ':attribute skal udfyldes når :values er udfyldt.', + 'required_with_all' => ':attribute skal udfyldes når :values er udfyldt.', + 'required_without' => 'Attributfeltet :attribute er påkrævet, når :values ikke er udfyldt.', + 'required_without_all' => 'Attributfeltet :attribute er påkrævet, når ingen af :values er udfyldt.', + 'same' => ':attribute og :other skal stemme overens.', + 'size.numeric' => 'Attributten :attribute skal være af størrelsen :size.', + 'amount_min_over_max' => 'Minimumsbeløbet kan ikke være større end det maksimale beløb.', + 'size.file' => 'Attributten :attribute skal være :size kilobytes.', + 'size.string' => 'Attributten :attribute skal være :size karakterer.', + 'size.array' => 'Attributten :attribute skal indeholde :size elementer.', + 'unique' => 'Attributten :attribute er allerede anvendt.', + 'string' => 'Attributten :attribute skal være en streng.', + 'url' => 'Attributten :attribute er ikke korrekt formateret.', + 'timezone' => 'Attributten :attribute skal være en gyldig zone.', + '2fa_code' => 'Attributfeltet :attribute er ygyldigt.', + 'dimensions' => 'Attributten :attribute har ugyldige billeddimensioner.', + 'distinct' => 'Attributfeltet :attribute har en duplikatværdi.', + 'file' => 'Attributten :attribute skal være en fil.', + 'in_array' => 'Attributfeltet :attribute findes ikke i :other.', + 'present' => 'Attributfeltet :attribute er påkrævet.', + 'amount_zero' => 'Det samlede beløb kan ikke være nul.', + 'current_target_amount' => 'Det aktuelle beløb skal være mindre end målbeløbet.', + 'unique_piggy_bank_for_user' => '"Sparebøssens" navn skal være unikt.', + 'unique_object_group' => 'Gruppenavnet skal være unikt', + 'starts_with' => 'Værdien skal starte med :values.', + 'unique_webhook' => 'Du har allerede en webhook med denne kombination af URL, udløser, respons og levering.', + 'unique_existing_webhook' => 'Du har allerede en anden webhook med denne kombination af URL, udløser, respons og levering.', + 'same_account_type' => 'Begge konti skal være af samme kontotype', + 'same_account_currency' => 'Begge konti skal have samme valuta', - 'between.numeric' => ':attribute skal være mellem :min og :max.', - 'between.file' => ':attribute skal være mellem :min og :max kilobytes.', - 'between.string' => ':attribute skal være imellem :min - :max tegn.', - 'between.array' => ':attribute skal have mellem :min og :max elementer.', - 'boolean' => ':attribute-feltet skal være enten sandt eller falsk.', - 'confirmed' => ':attribute bekræftelsen matcher ikke.', - 'date' => ':attribute er ikke en gyldig dato.', - 'date_format' => ':attribute matcher ikke formatet :format.', - 'different' => ':attribute og :other skal være forskellige.', - 'digits' => ':attribute skal være :digits cifre.', - 'digits_between' => ':attribute skal være mellem :min og :max cifre.', - 'email' => ':attribute skal være en gyldig email-adresse.', - 'filled' => ':attribute feltet er påkrævet.', - 'exists' => 'Den valgte :attribute er ikke gyldig.', - 'image' => ':attribute skal være et billede.', - 'in' => 'Den valgte :attribute er ikke gyldig.', - 'integer' => ':attribute skal være et heltal.', - 'ip' => ':attribute skal være en gyldig IP-adresse.', - 'json' => ':attribute skal være en gyldig JSON-streng.', - 'max.numeric' => ':attribute må ikke overstige :max.', - 'max.file' => ':attribute må ikke overstige :max kilobytes.', - 'max.string' => ':attribute må ikke overstige :max. tegn.', - 'max.array' => ':attribute må ikke have mere end :max elementer.', - 'mimes' => ':attribute skal være en fil af typen: :values.', - 'min.numeric' => ':attribute skal være mindst :min.', - 'lte.numeric' => ':attribute skal være mindre end eller lig med :value.', - 'min.file' => ':attribute skal være mindst :min kilobytes.', - 'min.string' => ':attribute skal mindst være :min tegn.', - 'min.array' => ':attribute skal have mindst :min elementer.', - 'not_in' => 'Den valgte :attribute er ikke gyldig.', - 'numeric' => ':attribute skal være et tal.', - 'numeric_native' => 'Det oprindelige beløb skal være et tal.', - 'numeric_destination' => 'Bestemmelsesbeløbet skal være et tal.', - 'numeric_source' => 'Kildebeløbet skal være et tal.', - 'regex' => ':attribute formatet er ugylidgt.', - 'required' => ':attribute feltet er påkrævet.', - 'required_if' => ':attribute skal udfyldes når :other er :value.', - 'required_unless' => ':attribute feltet er påkrævet, medmindre :other er i :values.', - 'required_with' => ':attribute skal udfyldes når :values er udfyldt.', - 'required_with_all' => ':attribute skal udfyldes når :values er udfyldt.', - 'required_without' => 'Attributfeltet :attribute er påkrævet, når :values ikke er udfyldt.', - 'required_without_all' => 'Attributfeltet :attribute er påkrævet, når ingen af :values er udfyldt.', - 'same' => ':attribute og :other skal stemme overens.', - 'size.numeric' => 'Attributten :attribute skal være af størrelsen :size.', - 'amount_min_over_max' => 'Minimumsbeløbet kan ikke være større end det maksimale beløb.', - 'size.file' => 'Attributten :attribute skal være :size kilobytes.', - 'size.string' => 'Attributten :attribute skal være :size karakterer.', - 'size.array' => 'Attributten :attribute skal indeholde :size elementer.', - 'unique' => 'Attributten :attribute er allerede anvendt.', - 'string' => 'Attributten :attribute skal være en streng.', - 'url' => 'Attributten :attribute er ikke korrekt formateret.', - 'timezone' => 'Attributten :attribute skal være en gyldig zone.', - '2fa_code' => 'Attributfeltet :attribute er ygyldigt.', - 'dimensions' => 'Attributten :attribute har ugyldige billeddimensioner.', - 'distinct' => 'Attributfeltet :attribute har en duplikatværdi.', - 'file' => 'Attributten :attribute skal være en fil.', - 'in_array' => 'Attributfeltet :attribute findes ikke i :other.', - 'present' => 'Attributfeltet :attribute er påkrævet.', - 'amount_zero' => 'Det samlede beløb kan ikke være nul.', - 'current_target_amount' => 'Det aktuelle beløb skal være mindre end målbeløbet.', - 'unique_piggy_bank_for_user' => '"Sparebøssens" navn skal være unikt.', - 'unique_object_group' => 'Gruppenavnet skal være unikt', - 'starts_with' => 'Værdien skal starte med :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Begge konti skal være af samme kontotype', - 'same_account_currency' => 'Begge konti skal have samme valuta', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Dette er ikke en sikker adgangskode. Prøv venligst igen. For mere information, besøg https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Ugyldig type gentalgelse for periodiske transaktioner.', - 'valid_recurrence_rep_moment' => 'Ugyldigt øjeblik for denne type gentagelse.', - 'invalid_account_info' => 'Ugyldig kontoinformation.', - 'attributes' => [ + 'secure_password' => 'Dette er ikke en sikker adgangskode. Prøv venligst igen. For mere information, besøg https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Ugyldig type gentalgelse for periodiske transaktioner.', + 'valid_recurrence_rep_moment' => 'Ugyldigt øjeblik for denne type gentagelse.', + 'invalid_account_info' => 'Ugyldig kontoinformation.', + 'attributes' => [ 'email' => 'e-mail adresse', 'description' => 'beskrivelse', 'amount' => 'beløb', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Det er nødvendigt at have et gyldigt kildekonto ID og/eller gyldigt kildekontonavn for at fortsætte.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Kunne ikke finde en gyldig destinationskonto, ved søgning efter ID ":id" eller navn ":name".', + 'withdrawal_source_need_data' => 'Det er nødvendigt at have et gyldigt kildekonto ID og/eller gyldigt kildekontonavn for at fortsætte.', + 'withdrawal_source_bad_data' => '[a] Kunne ikke finde en gyldig kildekonto ved søgning efter ID ":id" eller navn ":name".', + 'withdrawal_dest_need_data' => '[a] Det er nødvendigt at have et gyldigt destinationskonto-ID og/eller et gyldigt destinationskontonavn for at fortsætte.', + 'withdrawal_dest_bad_data' => 'Kunne ikke finde en gyldig destinationskonto, ved søgning efter ID ":id" eller navn ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'Denne destinationskonto-IBAN er allerede i brug af en aktivkonto eller en forpligtelse, og kan ikke anvendes som tilbagetrækningsdestination.', + 'deposit_src_iban_exists' => 'Denne kildekonto IBAN er allerede i brug af en aktivkonto eller en forpligtelse, og kan ikke anvendes som desponeringskilde.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Kunne ikke finde en gyldig afstemningskonto ved søgning for ID ":id" eller navn ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Kunne ikke finde en gyldig kildekonto ved søgning efter ID ":id" eller navn ":name".', - 'deposit_source_need_data' => 'Det er nødvendigt at have et gyldigt kildekonto ID og/eller gyldigt kildekontonavn for at fortsætte.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Kunne ikke finde en gyldig destinationskonto, ved søgning efter ID ":id" eller kontonavn ":name".', - 'deposit_dest_wrong_type' => 'Den foreslåede destinationskonto er ikke af den rigtige type.', + 'deposit_source_need_data' => 'Det er nødvendigt at have et gyldigt kildekonto ID og/eller gyldigt kildekontonavn for at fortsætte.', + 'deposit_source_bad_data' => '[b] Kunne ikke finde en gyldig kildekonto ved søgning efter ID ":id" eller navn ":name".', + 'deposit_dest_need_data' => '[b] Det er nødvendigt at have et gyldigt destinationskonto-ID og/eller et gyldigt destinationskontonavn for at fortsætte.', + 'deposit_dest_bad_data' => 'Kunne ikke finde en gyldig destinationskonto, ved søgning efter ID ":id" eller kontonavn ":name".', + 'deposit_dest_wrong_type' => 'Den foreslåede destinationskonto er ikke af den rigtige type.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,37 +267,37 @@ return [ * */ + 'transfer_source_need_data' => 'Det er nødvendigt at have et gyldigt kildekonto ID og/eller gyldigt kildekontonavn for at fortsætte.', + 'transfer_source_bad_data' => '[c] Kunne ikke finde en gyldig kildekonto ved søgning efter ID ":id" eller navn ":name".', + 'transfer_dest_need_data' => '[c] Det er nødvendigt at have et gyldigt destinationskonto-ID og/eller et gyldigt destinationskontonavn for at fortsætte.', + 'transfer_dest_bad_data' => 'Kunne ikke finde en gyldig destinationskonto, ved søgning efter ID ":id" eller kontonavn ":name".', + 'need_id_in_edit' => 'Hver opdeling skal have et transaction_journal_id (enten gyldigt ID eller 0).', - 'transfer_source_need_data' => 'Det er nødvendigt at have et gyldigt kildekonto ID og/eller gyldigt kildekontonavn for at fortsætte.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Kunne ikke finde en gyldig destinationskonto, ved søgning efter ID ":id" eller kontonavn ":name".', - 'need_id_in_edit' => 'Hver opdeling skal have et transaction_journal_id (enten gyldigt ID eller 0).', + 'ob_source_need_data' => 'Det er nødvendigt at have et gyldigt kildekonto ID og/eller gyldigt kildekontonavn for at fortsætte.', + 'lc_source_need_data' => 'Du skal bruge et gyldigt konto-id for at fortsætte.', + 'ob_dest_need_data' => '[d] Det er nødvendigt at have et gyldigt destinationskonto-ID og/eller et gyldigt destinationskontonavn for at fortsætte.', + 'ob_dest_bad_data' => 'Kunne ikke finde en gyldig destinationskonto, ved søgning efter ID ":id" eller kontonavn ":name".', + 'reconciliation_either_account' => 'For at indsende en forsoning skal du indsende enten en kilde- eller destinationskonto. Ikke begge, eller ingen af dem.', - 'ob_source_need_data' => 'Det er nødvendigt at have et gyldigt kildekonto ID og/eller gyldigt kildekontonavn for at fortsætte.', - 'lc_source_need_data' => 'Du skal bruge et gyldigt konto-id for at fortsætte.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Kunne ikke finde en gyldig destinationskonto, ved søgning efter ID ":id" eller kontonavn ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Du kan ikke bruge denne konto som kildekonto.', + 'generic_invalid_destination' => 'Du kan ikke bruge denne konto som destinationskonto.', - 'generic_invalid_source' => 'Du kan ikke bruge denne konto som kildekonto.', - 'generic_invalid_destination' => 'Du kan ikke bruge denne konto som destinationskonto.', + 'generic_no_source' => 'Du skal indsende kildekontooplysninger eller indsende et transaktionsjournal-ID.', + 'generic_no_destination' => 'Du skal indsende destinationskontooplysninger eller indsende et transkationsjournal-ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'Attributten :attribute skal være større end eller lig med :value.', - 'gt.numeric' => 'Attributten :attribute skal være større end :value.', - 'gte.file' => 'Attributten :attribute skal være større end eller lig med :value kilobytes.', - 'gte.string' => 'Attributten :attribute skal være større end eller lig med :value tegn.', - 'gte.array' => 'Attributten :attribute skal have :value elementer eller flere.', + 'gte.numeric' => 'Attributten :attribute skal være større end eller lig med :value.', + 'gt.numeric' => 'Attributten :attribute skal være større end :value.', + 'gte.file' => 'Attributten :attribute skal være større end eller lig med :value kilobytes.', + 'gte.string' => 'Attributten :attribute skal være større end eller lig med :value tegn.', + 'gte.array' => 'Attributten :attribute skal have :value elementer eller flere.', 'amount_required_for_auto_budget' => 'Beløb påkrævet.', 'auto_budget_amount_positive' => 'Beløbet skal være større end 0.', + 'auto_budget_period_mandatory' => 'Perioden for autobudget skal udfyldes.', // no access to administration: - 'no_access_user_group' => 'You do not have the correct access rights for this administration.', + 'no_access_user_group' => 'Du har ikke de korrekte adgangsrettigheder for denne administration.', ]; /* diff --git a/resources/lang/de_DE/api.php b/resources/lang/de_DE/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/de_DE/api.php +++ b/resources/lang/de_DE/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/de_DE/auth.php b/resources/lang/de_DE/auth.php index c0e8fe32d4..8bf28c7ace 100644 --- a/resources/lang/de_DE/auth.php +++ b/resources/lang/de_DE/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Falscher Benutzername und/oder falsches Passwort.', 'throttle' => 'Zu viele Anmeldeversuche. Bitte versuchen Sie es in :seconds Sekunde(n) erneut.', diff --git a/resources/lang/de_DE/breadcrumbs.php b/resources/lang/de_DE/breadcrumbs.php index fe451f5077..437fa37d80 100644 --- a/resources/lang/de_DE/breadcrumbs.php +++ b/resources/lang/de_DE/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Startseite', - 'budgets' => 'Kostenrahmen', - 'subscriptions' => 'Abonnements', - 'transactions' => 'Buchungen', - 'title_expenses' => 'Ausgaben', - 'title_withdrawal' => 'Ausgaben', - 'title_revenue' => 'Einnahmen / Einkommen', - 'title_deposit' => 'Einnahmen / Einkommen', - 'title_transfer' => 'Umbuchungen', - 'title_transfers' => 'Umbuchungen', - 'edit_currency' => 'Währung „:name” bearbeiten', - 'delete_currency' => 'Währung „:name” löschen', - 'newPiggyBank' => 'Neues Sparschwein erstellen', - 'edit_piggyBank' => 'Sparschwein „:name” bearbeiten', - 'preferences' => 'Einstellungen', - 'profile' => 'Profil', - 'accounts' => 'Konten', - 'changePassword' => 'Passwort ändern', - 'change_email' => 'E-Mail Adresse ändern', - 'bills' => 'Rechnungen', - 'newBill' => 'Neue Rechnung', - 'edit_bill' => 'Rechnung „:name” bearbeiten', - 'delete_bill' => 'Rechnung „:name” löschen', - 'reports' => 'Berichte', - 'search_result' => 'Suchergebnisse für ":query"', - 'withdrawal_list' => 'Ausgaben', - 'Withdrawal_list' => 'Ausgaben', - 'deposit_list' => 'Einnahmen, Einkommen und Einzahlungen', - 'transfer_list' => 'Umbuchungen', - 'transfers_list' => 'Umbuchungen', + 'home' => 'Startseite', + 'budgets' => 'Kostenrahmen', + 'subscriptions' => 'Abonnements', + 'transactions' => 'Buchungen', + 'title_expenses' => 'Ausgaben', + 'title_withdrawal' => 'Ausgaben', + 'title_revenue' => 'Einnahmen / Einkommen', + 'title_deposit' => 'Einnahmen / Einkommen', + 'title_transfer' => 'Umbuchungen', + 'title_transfers' => 'Umbuchungen', + 'edit_currency' => 'Währung „:name” bearbeiten', + 'delete_currency' => 'Währung „:name” löschen', + 'newPiggyBank' => 'Neues Sparschwein erstellen', + 'edit_piggyBank' => 'Sparschwein „:name” bearbeiten', + 'preferences' => 'Einstellungen', + 'profile' => 'Profil', + 'accounts' => 'Konten', + 'changePassword' => 'Passwort ändern', + 'change_email' => 'E-Mail Adresse ändern', + 'bills' => 'Rechnungen', + 'newBill' => 'Neue Rechnung', + 'edit_bill' => 'Rechnung „:name” bearbeiten', + 'delete_bill' => 'Rechnung „:name” löschen', + 'reports' => 'Berichte', + 'search_result' => 'Suchergebnisse für ":query"', + 'withdrawal_list' => 'Ausgaben', + 'Withdrawal_list' => 'Ausgaben', + 'deposit_list' => 'Einnahmen, Einkommen und Einzahlungen', + 'transfer_list' => 'Umbuchungen', + 'transfers_list' => 'Umbuchungen', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Kontenabgleiche', 'create_withdrawal' => 'Neue Ausgabe erstellen', 'create_deposit' => 'Neue Einnahme erstellen', diff --git a/resources/lang/de_DE/components.php b/resources/lang/de_DE/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/de_DE/components.php +++ b/resources/lang/de_DE/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/de_DE/config.php b/resources/lang/de_DE/config.php index 9d080909b7..56b3aa5627 100644 --- a/resources/lang/de_DE/config.php +++ b/resources/lang/de_DE/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'de', - 'locale' => 'de, Deutsch, de_DE.utf8, de_DE.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'de', + 'locale' => 'de, Deutsch, de_DE.utf8, de_DE.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'DD. MMM. YYYY', - 'month_and_day_fns' => 'd. MMMM Y', - 'month_and_day_js' => 'Do MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'DD. MMM. YYYY', + 'month_and_day_fns' => 'D. MMMM Y', + 'month_and_day_js' => 'Do MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd DD. MMMM YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd DD. MMMM YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'DD. MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'DD. MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'Do MMMM YYYY um HH:mm:ss', + 'date_time_fns' => 'dd. MMM. yyyy um HH:mm:ss', + 'date_time_fns_short' => 'dd. MMM. yyyy um HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'Do MMMM YYYY um HH:mm:ss', - 'date_time_fns' => 'dd. MMM. yyyy um HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D. MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D. MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[KW] W, GGGG', + 'week_in_year_fns' => "'Woche' ww/yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[KW] W, GGGG', - 'week_in_year_fns' => "'Woche' ww/yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'QQQ, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Montag', - 'dow_2' => 'Dienstag', - 'dow_3' => 'Mittwoch', - 'dow_4' => 'Donnerstag', - 'dow_5' => 'Freitag', - 'dow_6' => 'Samstag', - 'dow_7' => 'Sonntag', + 'quarter_fns' => "'Q'QQQ, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Montag', + 'dow_2' => 'Dienstag', + 'dow_3' => 'Mittwoch', + 'dow_4' => 'Donnerstag', + 'dow_5' => 'Freitag', + 'dow_6' => 'Samstag', + 'dow_7' => 'Sonntag', ]; /* diff --git a/resources/lang/de_DE/demo.php b/resources/lang/de_DE/demo.php index 315a11311c..65266b11a6 100644 --- a/resources/lang/de_DE/demo.php +++ b/resources/lang/de_DE/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/de_DE/email.php b/resources/lang/de_DE/email.php index 543f87b3c0..cdd998c4c4 100644 --- a/resources/lang/de_DE/email.php +++ b/resources/lang/de_DE/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Eine Testmeldung von Ihrer Firefly III Installation', 'admin_test_body' => 'Dies ist eine Testnachricht von Ihrer Firefly III-Instanz. Sie wurde an :email gesendet.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Eine Einladung wurde erstellt', 'invitation_created_body' => 'Admin-Benutzer „:email” hat eine Benutzereinladung erstellt, die von demjenigen benutzt werden kann, der hinter der E-Mail-Adresse „:invitee” steht. Die Einladung ist 48 Stunden lang gültig.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Passwort zurücksetzen:', 'registered_doc_link' => 'Dokumentation:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Eine neue Firefly III-Version ist verfügbar', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Wenn Sie es bevorzugen, können Sie auch einen Fehlerbericht auf https://github.com/firefly-iii/firefly-iii/issues eröffnen.', 'error_stacktrace_below' => 'Der vollständige Stacktrace ist unten:', 'error_headers' => 'Die folgenden Kopfzeilen können ebenfalls von Bedeutung sein:', + 'error_post' => 'Dies wurde vom Benutzer eingereicht:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III hat eine neue Transaktion erstellt|Firefly III hat :count neue Transaktionen erstellt', 'new_journals_header' => 'Firefly III hat eine Transaktion für Sie erstellt. Sie finden sie in Ihrer Firefly III Installation:|Firefly III hat :count Transaktionen für Sie erstellt. Sie können sie in Ihrer Firefly III Installation finden:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Ihre Rechnung **":name"** wird am :date enden. Dieser Zeitpunkt wird **HEUTE!** vergehen', 'bill_warning_extension_date_zero' => 'Ihre Rechnung **":name"** wird am :date verlängert oder storniert. Dieser Zeitpunkt wird **HEUTE!** vergehen', 'bill_warning_please_action' => 'Bitte ergreifen Sie die entsprechende Maßnahme.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/de_DE/errors.php b/resources/lang/de_DE/errors.php index 420ee387aa..ed99b6786a 100644 --- a/resources/lang/de_DE/errors.php +++ b/resources/lang/de_DE/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack-Trace', 'more_info' => 'Weitere Informationen', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Bitte sammeln Sie weitere Informationen im Verzeichnis storage/logs wo Sie Logdateien finden können. Wenn Sie Docker verwenden, verwenden Sie docker logs -f [container].', - 'collect_info_more' => 'Lesen Sie mehr über das Sammeln von Fehlerinformationen in der FAQ.', - 'github_help' => 'Hilfe auf GitHub erhalten', - 'github_instructions' => 'Sie sind herzlich eingeladen, ein neues Ticket auf GitHub zu öffnen.', - 'use_search' => 'Benutzen Sie die Suche!', - 'include_info' => 'Fügen Sie die Informationen von dieser Debug-Seite ein.', - 'tell_more' => 'Sagen Sie uns mehr als "Da steht Hoppla!"', - 'include_logs' => 'Fehlerprotokolle einschließen (siehe oben).', - 'what_did_you_do' => 'Teilen Sie uns mit, was Sie getan haben.', - 'offline_header' => 'Sie sind wahrscheinlich offline', - 'offline_unreachable' => 'Firefly III ist nicht erreichbar. Ihr Gerät ist offline oder der Server antwortet nicht.', - 'offline_github' => 'Falls Sie sicher sind, dass sowohl Ihr Gerät als auch der Server online sind, öffnen Sie bitte ein Ticket auf GitHub.', - + 'collect_info' => 'Bitte sammeln Sie weitere Informationen im Verzeichnis storage/logs wo Sie Logdateien finden können. Wenn Sie Docker verwenden, verwenden Sie docker logs -f [container].', + 'collect_info_more' => 'Weitere Informationen zum Sammeln von Fehlerinformationen finden Sie im FAQ.', + 'github_help' => 'Hilfe auf GitHub erhalten', + 'github_instructions' => 'Sie sind herzlich eingeladen, ein neues Ticket auf GitHub zu öffnen.', + 'use_search' => 'Benutzen Sie die Suche!', + 'include_info' => 'Fügen Sie die Informationen von dieser Debug-Seite ein.', + 'tell_more' => 'Sagen Sie uns mehr als "Da steht Hoppla!"', + 'include_logs' => 'Fehlerprotokolle einschließen (siehe oben).', + 'what_did_you_do' => 'Teilen Sie uns mit, was Sie getan haben.', + 'offline_header' => 'Sie sind wahrscheinlich offline', + 'offline_unreachable' => 'Firefly III ist nicht erreichbar. Ihr Gerät ist offline oder der Server antwortet nicht.', + 'offline_github' => 'Falls Sie sicher sind, dass sowohl Ihr Gerät als auch der Server online sind, öffnen Sie bitte ein Ticket auf GitHub.', ]; diff --git a/resources/lang/de_DE/firefly.php b/resources/lang/de_DE/firefly.php index d9d440decf..add057dffd 100644 --- a/resources/lang/de_DE/firefly.php +++ b/resources/lang/de_DE/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Schließen', - 'actions' => 'Aktionen', - 'edit' => 'Bearbeiten', - 'delete' => 'Löschen', - 'split' => 'Teilen', - 'single_split' => 'Teilen', - 'clone' => 'Duplizieren', - 'confirm_action' => 'Aktion bestätigen', - 'last_seven_days' => 'Letzte sieben Tage', - 'last_thirty_days' => 'Letzte 30 Tage', - 'last_180_days' => 'Letzte 180 Tage', - 'month_to_date' => 'Bisheriger Monat', - 'year_to_date' => 'Bisheriges Jahr', - 'YTD' => 'Seit Jahresbeginn', - 'welcome_back' => 'Überblick', - 'everything' => 'Alle', - 'today' => 'Heute', - 'customRange' => 'Individueller Bereich', - 'date_range' => 'Datumsbereich', - 'apply' => 'Übernehmen', - 'select_date' => 'Wähle ein Datum..', - 'cancel' => 'Abbrechen', - 'from' => 'Von', - 'to' => 'Bis', - 'structure' => 'Struktur', - 'help_translating' => 'Dieser Hilfetext ist noch nicht in Deutsch verfügbar. Möchten Sie beim Übersetzen helfen?', - 'showEverything' => 'Alles anzeigen', - 'never' => 'Nie', - 'no_results_for_empty_search' => 'Ihre Suche war leer, also wurde nichts gefunden.', - 'removed_amount' => ':amount entfernt', - 'added_amount' => ':amount hinzugefügt', - 'asset_account_role_help' => 'Alle zusätzlichen Optionen können später eingestellt werden.', - 'Opening balance' => 'Eröffnungssaldo', - 'create_new_stuff' => 'Erstelle neue Dinge', - 'new_withdrawal' => 'Neue Ausgabe', - 'create_new_transaction' => 'Neue Buchung erstellen', - 'sidebar_frontpage_create' => 'Erstellen', - 'new_transaction' => 'Neue Buchung', - 'no_rules_for_bill' => 'Dieser Rechnung sind keine Regeln zugeordnet.', - 'go_to_asset_accounts' => 'Bestandskonten anzeigen', - 'go_to_budgets' => 'Budgets anzeigen', - 'go_to_withdrawals' => 'Ausgaben anzeigen', - 'clones_journal_x' => 'Diese Buchung ist ein Duplikat von ":description" (#:id)', - 'go_to_categories' => 'Kategorien anzeigen', - 'go_to_bills' => 'Rechnungen anzeigen', - 'go_to_expense_accounts' => 'Ausgabenkonten anzeigen', - 'go_to_revenue_accounts' => 'Einnahmekonten anzeigen', - 'go_to_piggies' => 'Sparschweine anzeigen', - 'new_deposit' => 'Neue Einnahme', - 'new_transfer' => 'Neue Umbuchung', - 'new_transfers' => 'Neue Umbuchung', - 'new_asset_account' => 'Neues Bestandskonto', - 'new_expense_account' => 'Neues Ausgabenkonto', - 'new_revenue_account' => 'Neues Einnahmenkonto', - 'new_liabilities_account' => 'Neue Verbindlichkeit', - 'new_budget' => 'Neues Budget', - 'new_bill' => 'Neue Rechnung', - 'block_account_logout' => 'Sie wurden ausgeloggt. Blockierte Benutzerkonten können diese Seite nicht nutzen. Haben Sie sich mit einer gültigen E-Mail Adresse registriert?', - 'flash_success' => 'Geschafft!', - 'flash_info' => 'Nachricht', - 'flash_warning' => 'Achtung!', - 'flash_error' => 'Fehler!', - 'flash_danger' => 'Achtung!', - 'flash_info_multiple' => 'Es gibt eine Nachricht | Es gibt :count Nachrichten', - 'flash_error_multiple' => 'Es gibt einen Fehler|Es gibt :count Fehler', - 'net_worth' => 'Eigenkapital', - 'help_for_this_page' => 'Hilfe zu dieser Seite', - 'help_for_this_page_body' => 'Weitere Informationen über diese Seite finden Sie in unserer Dokumentation (engl.).', - 'two_factor_welcome' => 'Hallo!', - 'two_factor_enter_code' => 'Um fortzufahren geben Sie bitte ihren Zwei-Faktor-Authentifizierungscode ein. Ihre Anwendung kann diesen für Sie generieren.', - 'two_factor_code_here' => 'Code hier eingeben', - 'two_factor_title' => 'Zwei-Faktor-Authentifizierung', - 'authenticate' => 'Authentifizieren', - 'two_factor_forgot_title' => 'Zwei-Faktor-Authentifizierung verloren', - 'two_factor_forgot' => 'Ich kann keine 2FA-Codes generieren.', - 'two_factor_lost_header' => 'Haben Sie ihre Zwei-Faktor-Authentifizierung verloren?', - 'two_factor_lost_intro' => 'Wenn Sie auch Ihre Sicherungsschlüssel verloren haben, haben Sie Pech. Dies ist nichts, was Sie über die Weboberfläche beheben können. Sie haben jedoch zwei Möglichkeiten.', - 'two_factor_lost_fix_self' => 'Wenn Sie Ihre eigene Instanz von Firefly III betreiben, lesen Sie diesen Eintrag in den FAQ für Anweisungen.', - 'two_factor_lost_fix_owner' => 'Ansonsten, mailen Sie dem Inhaber der Website, :site_owner und bitten Sie ihn, Ihre Zwei-Faktor Authentifizierung zurückzusetzen.', - 'mfa_backup_code' => 'Sie haben sich mit einem Sicherungsschlüssel bei Firefly III angemeldet. Dieser kann nun nicht mehr verwendet werden, also streichen Sie ihn aus Ihrer Liste.', - 'pref_two_factor_new_backup_codes' => 'Neue Sicherungsschlüssel abrufen', - 'pref_two_factor_backup_code_count' => 'Sie haben :count gültigen Backup-Code.|Sie haben :count gültige Backup-Codes.', - '2fa_i_have_them' => 'Wurde gespeichert!', - 'warning_much_data' => ':days Tage Daten können eine Weile zum Laden benötigen.', - 'registered' => 'Sie haben sich erfolgreich registriert!', - 'Default asset account' => 'Standard-Bestandskonto', - 'no_budget_pointer' => 'Sie scheinen noch keine Budgets festgelegt zu haben. Sie sollten einige davon auf der Seite Budgets anlegen. Budgets können Ihnen dabei helfen, den Überblick über die Ausgaben zu behalten.', - 'no_bill_pointer' => 'Sie scheinen noch keine Rechnungen zu haben. Sie sollten einige auf der Seite Rechnungen erstellen. Anhand der Rechnungen können Sie den Überblick über Ihre Ausgaben behalten.', - 'Savings account' => 'Sparkonto', - 'Credit card' => 'Kreditkarte', - 'source_accounts' => 'Quellkonto|Quellkonten', - 'destination_accounts' => 'Zielkonto|Zielkonten', - 'user_id_is' => 'Ihre Benutzerkennung ist :user', - 'field_supports_markdown' => 'Dieses Feld unterstützt Markdown.', - 'need_more_help' => 'Wenn Sie Hilfe beim Bedienen von Firefly III brauchen, erstellen Sie ein Ticket auf Github.', - 'reenable_intro_text' => 'Sie können die Einführungsanleitung auch erneut aktivieren.', - 'intro_boxes_after_refresh' => 'Die Einführungsfelder werden wieder angezeigt, wenn Sie die Seite aktualisieren.', - 'show_all_no_filter' => 'Alle Buchungen anzeigen, ohne diese nach Datum zu gruppieren.', - 'expenses_by_category' => 'Ausgaben nach Kategorie', - 'expenses_by_budget' => 'Ausgaben nach Budget', - 'income_by_category' => 'Einnahmen nach Kategorie', - 'expenses_by_asset_account' => 'Ausgaben nach Bestandskonto', - 'expenses_by_expense_account' => 'Ausgaben nach Ausgabenkonto', - 'cannot_redirect_to_account' => 'Entschuldigen Sie bitte. Firefly III kann Sie nicht zur richtigen Seite weiterleiten.', - 'sum_of_expenses' => 'Summe von Ausgaben', - 'sum_of_income' => 'Summe von Einnahmen', - 'liabilities' => 'Verbindlichkeiten', - 'spent_in_specific_budget' => 'Ausgaben im Budget „:budget”', - 'spent_in_specific_double' => 'Ausgaben auf Konto ":account"', - 'earned_in_specific_double' => 'Einnahmen auf Konto ":account"', - 'source_account' => 'Quellkonto', - 'source_account_reconciliation' => 'Sie können das Quellkonto einer Kontenausgleichsbuchung nicht bearbeiten.', - 'destination_account' => 'Zielkonto', - 'destination_account_reconciliation' => 'Sie können das Zielkonto einer Kontenausgleichsbuchung nicht bearbeiten.', - 'sum_of_expenses_in_budget' => 'Gesamtausgaben im Budget „:budget”', - 'left_in_budget_limit' => 'Verbleibend zum Ausgeben laut der Budgetplanung', - 'current_period' => 'Aktueller Zeitraum', - 'show_the_current_period_and_overview' => 'Zeigen Sie den aktuellen Zeitraum und die Übersicht', - 'pref_languages_locale' => 'Damit eine andere Sprache als Englisch richtig funktioniert muss Ihr Betriebssystem mit den korrekten Gebietsschema-Informationen ausgestattet werden. Wenn diese nicht vorhanden sind, können die Währungsdaten, Termine und Mengen falsch formatiert sein.', - 'budget_in_period' => 'Alle Buchungen für den Kostenrahmen „:name” zwischen :start und :end in :currency', - 'chart_budget_in_period' => 'Diagramm für alle Buchungen für den Kostenrahmen ":name" zwischen :start und :end in :currency', - 'chart_budget_in_period_only_currency' => 'Der von Ihnen geplante Betrag war in :currency, so dass dieses Diagramm nur die Buchungen in :currency anzeigt.', - 'chart_account_in_period' => 'Diagramm für alle Buchungen für das Konto „:name” (:balance) zwischen :start und :end', - 'chart_category_in_period' => 'Diagramm für alle Buchungen der Kategorie „:name” zwischen :start und :end', - 'chart_category_all' => 'Diagramm für alle Buchungen der Kategorie „:name”', - 'clone_withdrawal' => 'Diese Ausgabe duplizieren', - 'clone_deposit' => 'Diese Einnahme duplizieren', - 'clone_transfer' => 'Diese Umbuchung duplizieren', - 'multi_select_no_selection' => 'Nichts ausgewählt', - 'multi_select_select_all' => 'Alle auswählen', - 'multi_select_n_selected' => 'ausgewählt', - 'multi_select_all_selected' => 'Alle ausgewählt', - 'multi_select_filter_placeholder' => 'Suche..', - 'intro_next_label' => 'Nächste', - 'intro_prev_label' => 'Vorherige', - 'intro_skip_label' => 'Überspringen', - 'intro_done_label' => 'Erledigt', - 'between_dates_breadcrumb' => 'Zwischen :start und :end', - 'all_journals_without_budget' => 'Alle Buchungen ohne Budget', - 'journals_without_budget' => 'Buchungen ohne Budget', - 'all_journals_without_category' => 'Alle Buchungen ohne Kategorie', - 'journals_without_category' => 'Buchungen ohne Kategorie', - 'all_journals_for_account' => 'Alle Buchungen für Konto „:name”', - 'chart_all_journals_for_account' => 'Diagramm für alle Buchungen des Kontos „:name”', - 'journals_in_period_for_account' => 'Alle Buchungen für Konto „:name” zwischen :start und :end', - 'journals_in_period_for_account_js' => 'Alle Buchungen für Account {title} zwischen {start} und {end}', - 'transferred' => 'Umgebucht', - 'all_withdrawal' => 'Alle Ausgaben', - 'all_transactions' => 'Alle Buchungen', - 'title_withdrawal_between' => 'Alle Ausgaben zwischen :start und :end', - 'all_deposit' => 'Alle Einnahmen', - 'title_deposit_between' => 'Alle Einnahmen zwischen :start und :end', - 'all_transfers' => 'Alle Umbuchungen', - 'title_transfers_between' => 'Alle Umbuchungen zwischen :start und :end', - 'all_transfer' => 'Alle Umbuchungen', - 'all_journals_for_tag' => 'Alle Buchungen für das Schlagwort „:tag”', - 'title_transfer_between' => 'Alle Umbuchungen zwischen :start und :end', - 'all_journals_for_category' => 'Alle Buchungen für Kategorie „:name”', - 'all_journals_for_budget' => 'Alle Buchungen im Budget „:name”', - 'chart_all_journals_for_budget' => 'Diagramm für alle Buchungen im Budget „:name”', - 'journals_in_period_for_category' => 'Alle Buchungen für Kategorie „:name” zwischen :start und :end', - 'journals_in_period_for_tag' => 'Alle Buchungen für das Schlagwort „:tag” zwischen :start und :end', - 'not_available_demo_user' => 'Die Funktionen, auf welche sie zugreifen wollen, steht Demo-Benutzern nicht zur Verfügung.', - 'exchange_rate_instructions' => 'Das Bestandskonto „@name” akzeptiert nur Buchungen in @native_currency. Wenn Sie stattdessen @foreign_currency verwenden wollen, sollten Sie sicherstellen, dass der Betrag auch in @native_currency angegeben ist:', - 'transfer_exchange_rate_instructions' => 'Das Quellkonto „@source_name” akzeptiert nur Buchungen in @source_currency. Das Zielkonto "@dest_name" akzeptiert nur Buchungen in @dest_currency. Sie müssen den Betrag in beiden Währungen korrekt angeben.', - 'transaction_data' => 'Transaktionsdaten', - 'invalid_server_configuration' => 'Ungültige Serverkonfiguration', - 'invalid_locale_settings' => 'Firefly III kann keine Geldbeträge formatieren, da Ihrem Server die erforderlichen Pakete fehlen. gibt eine Anleitung wie dies behoben werden kann.', - 'quickswitch' => 'Schnellauswahl', - 'sign_in_to_start' => 'Melden Sie sich an, um Ihre Sitzung zu starten', - 'sign_in' => 'Anmelden', - 'register_new_account' => 'Neues Benutzerkonto anlegen', - 'forgot_my_password' => 'Passwort vergessen', - 'problems_with_input' => 'Es gab Probleme mit Ihrer Eingabe.', - 'reset_password' => 'Ihr Passwort zurücksetzen', - 'button_reset_password' => 'Passwort zurücksetzen', - 'reset_button' => 'Zurücksetzen', - 'want_to_login' => 'Ich möchte mich anmelden', - 'login_page_title' => 'Bei Firefly III anmelden', - 'register_page_title' => 'Bei Firefly III registrieren', - 'forgot_pw_page_title' => 'Haben Sie Ihr Passwort für Firefly III vergessen?', - 'reset_pw_page_title' => 'Passwort für Firefly III zurücksetzen', - 'cannot_reset_demo_user' => 'Sie können das Passwort des Demo-Benutzers nicht zurücksetzen.', - 'no_att_demo_user' => 'Anwender der Demo-Version können keine Anhänge hochladen.', - 'button_register' => 'Registrieren', - 'authorization' => 'Autorisierung', - 'active_bills_only' => 'nur aktive Rechnungen', - 'active_bills_only_total' => 'Alle aktiven Rechnungen', - 'active_exp_bills_only' => 'nur aktive und erwartete Rechnungen', - 'active_exp_bills_only_total' => 'nur aktive und erwartete Rechnungen', - 'per_period_sum_1D' => 'Erwartete tägliche Kosten', - 'per_period_sum_1W' => 'Erwartete wöchentliche Kosten', - 'per_period_sum_1M' => 'Erwartete monatliche Kosten', - 'per_period_sum_3M' => 'Erwartete vierteljährliche Kosten', - 'per_period_sum_6M' => 'Erwartete halbjährliche Kosten', - 'per_period_sum_1Y' => 'Erwartete jährliche Kosten', - 'average_per_bill' => 'Durchschnitt je Rechnung', - 'expected_total' => 'Voraussichtliche Summe', - 'reconciliation_account_name' => ':name Kontenabgleich (:currency)', - 'saved' => 'Gespeichert', - 'advanced_options' => 'Erweiterte Optionen', - 'advanced_options_explain' => 'Auf einigen Seiten in Firefly III sind hinter dieser Schaltfläche erweiterte Optionen zu finden. Diese Seite enthält hier nichts Außergewöhnliches, aber schauen Sie sich die anderen an!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Schließen', + 'actions' => 'Aktionen', + 'edit' => 'Bearbeiten', + 'delete' => 'Löschen', + 'split' => 'Teilen', + 'single_split' => 'Teilen', + 'clone' => 'Duplizieren', + 'clone_and_edit' => 'Duplizieren und Bearbeiten', + 'confirm_action' => 'Aktion bestätigen', + 'last_seven_days' => 'Letzte sieben Tage', + 'last_thirty_days' => 'Letzte 30 Tage', + 'last_180_days' => 'Letzte 180 Tage', + 'month_to_date' => 'Bisheriger Monat', + 'year_to_date' => 'Bisheriges Jahr', + 'YTD' => 'Seit Jahresbeginn', + 'welcome_back' => 'Überblick', + 'everything' => 'Alle', + 'today' => 'Heute', + 'customRange' => 'Individueller Bereich', + 'date_range' => 'Datumsbereich', + 'apply' => 'Übernehmen', + 'select_date' => 'Wähle ein Datum..', + 'cancel' => 'Abbrechen', + 'from' => 'Von', + 'to' => 'Bis', + 'structure' => 'Struktur', + 'help_translating' => 'Dieser Hilfetext ist noch nicht in Deutsch verfügbar. Möchten Sie beim Übersetzen helfen?', + 'showEverything' => 'Alles anzeigen', + 'never' => 'Nie', + 'no_results_for_empty_search' => 'Ihre Suche war leer, also wurde nichts gefunden.', + 'removed_amount' => ':amount entfernt', + 'added_amount' => ':amount hinzugefügt', + 'asset_account_role_help' => 'Alle zusätzlichen Optionen können später eingestellt werden.', + 'Opening balance' => 'Eröffnungssaldo', + 'create_new_stuff' => 'Erstelle neue Dinge', + 'new_withdrawal' => 'Neue Ausgabe', + 'create_new_transaction' => 'Neue Buchung erstellen', + 'sidebar_frontpage_create' => 'Erstellen', + 'new_transaction' => 'Neue Buchung', + 'no_rules_for_bill' => 'Dieser Rechnung sind keine Regeln zugeordnet.', + 'go_to_asset_accounts' => 'Bestandskonten anzeigen', + 'go_to_budgets' => 'Budgets anzeigen', + 'go_to_withdrawals' => 'Ausgaben anzeigen', + 'clones_journal_x' => 'Diese Buchung ist ein Duplikat von ":description" (#:id)', + 'go_to_categories' => 'Kategorien anzeigen', + 'go_to_bills' => 'Rechnungen anzeigen', + 'go_to_expense_accounts' => 'Ausgabenkonten anzeigen', + 'go_to_revenue_accounts' => 'Einnahmekonten anzeigen', + 'go_to_piggies' => 'Sparschweine anzeigen', + 'new_deposit' => 'Neue Einnahme', + 'new_transfer' => 'Neue Umbuchung', + 'new_transfers' => 'Neue Umbuchung', + 'new_asset_account' => 'Neues Bestandskonto', + 'new_expense_account' => 'Neues Ausgabenkonto', + 'new_revenue_account' => 'Neues Einnahmenkonto', + 'new_liabilities_account' => 'Neue Verbindlichkeit', + 'new_budget' => 'Neues Budget', + 'new_bill' => 'Neue Rechnung', + 'block_account_logout' => 'Sie wurden ausgeloggt. Blockierte Benutzerkonten können diese Seite nicht nutzen. Haben Sie sich mit einer gültigen E-Mail Adresse registriert?', + 'flash_success' => 'Geschafft!', + 'flash_info' => 'Nachricht', + 'flash_warning' => 'Achtung!', + 'flash_error' => 'Fehler!', + 'flash_danger' => 'Achtung!', + 'flash_info_multiple' => 'Es gibt eine Nachricht | Es gibt :count Nachrichten', + 'flash_error_multiple' => 'Es gibt einen Fehler|Es gibt :count Fehler', + 'net_worth' => 'Eigenkapital', + 'help_for_this_page' => 'Hilfe zu dieser Seite', + 'help_for_this_page_body' => 'Weitere Informationen über diese Seite finden Sie in unserer Dokumentation (engl.).', + 'two_factor_welcome' => 'Hallo!', + 'two_factor_enter_code' => 'Um fortzufahren geben Sie bitte ihren Zwei-Faktor-Authentifizierungscode ein. Ihre Anwendung kann diesen für Sie generieren.', + 'two_factor_code_here' => 'Code hier eingeben', + 'two_factor_title' => 'Zwei-Faktor-Authentifizierung', + 'authenticate' => 'Authentifizieren', + 'two_factor_forgot_title' => 'Zwei-Faktor-Authentifizierung verloren', + 'two_factor_forgot' => 'Ich kann keine 2FA-Codes generieren.', + 'two_factor_lost_header' => 'Haben Sie ihre Zwei-Faktor-Authentifizierung verloren?', + 'two_factor_lost_intro' => 'Wenn Sie auch Ihre Sicherungsschlüssel verloren haben, haben Sie Pech. Dies ist nichts, was Sie über die Weboberfläche beheben können. Sie haben jedoch zwei Möglichkeiten.', + 'two_factor_lost_fix_self' => 'Wenn Sie Ihre eigene Instanz von Firefly III betreiben, lesen Sie :site_owner und bitten Sie ihn, Ihre Zwei-Faktor Authentifizierung zurückzusetzen.', + 'mfa_backup_code' => 'Sie haben sich mit einem Sicherungsschlüssel bei Firefly III angemeldet. Dieser kann nun nicht mehr verwendet werden, also streichen Sie ihn aus Ihrer Liste.', + 'pref_two_factor_new_backup_codes' => 'Neue Sicherungsschlüssel abrufen', + 'pref_two_factor_backup_code_count' => 'Sie haben :count gültigen Backup-Code.|Sie haben :count gültige Backup-Codes.', + '2fa_i_have_them' => 'Wurde gespeichert!', + 'warning_much_data' => ':days Tage Daten können eine Weile zum Laden benötigen.', + 'registered' => 'Sie haben sich erfolgreich registriert!', + 'Default asset account' => 'Standard-Bestandskonto', + 'no_budget_pointer' => 'Sie scheinen noch keine Budgets festgelegt zu haben. Sie sollten einige davon auf der Seite Budgets anlegen. Budgets können Ihnen dabei helfen, den Überblick über die Ausgaben zu behalten.', + 'no_bill_pointer' => 'Sie scheinen noch keine Rechnungen zu haben. Sie sollten einige auf der Seite Rechnungen erstellen. Anhand der Rechnungen können Sie den Überblick über Ihre Ausgaben behalten.', + 'Savings account' => 'Sparkonto', + 'Credit card' => 'Kreditkarte', + 'source_accounts' => 'Quellkonto|Quellkonten', + 'destination_accounts' => 'Zielkonto|Zielkonten', + 'user_id_is' => 'Ihre Benutzerkennung ist :user', + 'field_supports_markdown' => 'Dieses Feld unterstützt Markdown.', + 'need_more_help' => 'Wenn Sie Hilfe beim Bedienen von Firefly III brauchen, erstellen Sie ein Ticket auf Github.', + 'reenable_intro_text' => 'Sie können die Einführungsanleitung auch erneut aktivieren.', + 'intro_boxes_after_refresh' => 'Die Einführungsfelder werden wieder angezeigt, wenn Sie die Seite aktualisieren.', + 'show_all_no_filter' => 'Alle Buchungen anzeigen, ohne diese nach Datum zu gruppieren.', + 'expenses_by_category' => 'Ausgaben nach Kategorie', + 'expenses_by_budget' => 'Ausgaben nach Budget', + 'income_by_category' => 'Einnahmen nach Kategorie', + 'expenses_by_asset_account' => 'Ausgaben nach Bestandskonto', + 'expenses_by_expense_account' => 'Ausgaben nach Ausgabenkonto', + 'cannot_redirect_to_account' => 'Entschuldigen Sie bitte. Firefly III kann Sie nicht zur richtigen Seite weiterleiten.', + 'sum_of_expenses' => 'Summe von Ausgaben', + 'sum_of_income' => 'Summe von Einnahmen', + 'liabilities' => 'Verbindlichkeiten', + 'spent_in_specific_budget' => 'Ausgaben im Budget „:budget”', + 'spent_in_specific_double' => 'Ausgaben auf Konto ":account"', + 'earned_in_specific_double' => 'Einnahmen auf Konto ":account"', + 'source_account' => 'Quellkonto', + 'source_account_reconciliation' => 'Sie können das Quellkonto einer Kontenausgleichsbuchung nicht bearbeiten.', + 'destination_account' => 'Zielkonto', + 'destination_account_reconciliation' => 'Sie können das Zielkonto einer Kontenausgleichsbuchung nicht bearbeiten.', + 'sum_of_expenses_in_budget' => 'Gesamtausgaben im Budget „:budget”', + 'left_in_budget_limit' => 'Verbleibend zum Ausgeben laut der Budgetplanung', + 'current_period' => 'Aktueller Zeitraum', + 'show_the_current_period_and_overview' => 'Zeigen Sie den aktuellen Zeitraum und die Übersicht', + 'pref_languages_locale' => 'Damit eine andere Sprache als Englisch richtig funktioniert muss Ihr Betriebssystem mit den korrekten Gebietsschema-Informationen ausgestattet werden. Wenn diese nicht vorhanden sind, können die Währungsdaten, Termine und Mengen falsch formatiert sein.', + 'budget_in_period' => 'Alle Buchungen für den Kostenrahmen „:name” zwischen :start und :end in :currency', + 'chart_budget_in_period' => 'Diagramm für alle Buchungen für den Kostenrahmen ":name" zwischen :start und :end in :currency', + 'chart_budget_in_period_only_currency' => 'Der von Ihnen geplante Betrag war in :currency, so dass dieses Diagramm nur die Buchungen in :currency anzeigt.', + 'chart_account_in_period' => 'Diagramm für alle Buchungen für das Konto „:name” (:balance) zwischen :start und :end', + 'chart_category_in_period' => 'Diagramm für alle Buchungen der Kategorie „:name” zwischen :start und :end', + 'chart_category_all' => 'Diagramm für alle Buchungen der Kategorie „:name”', + 'clone_withdrawal' => 'Diese Ausgabe duplizieren', + 'clone_deposit' => 'Diese Einnahme duplizieren', + 'clone_transfer' => 'Diese Umbuchung duplizieren', + 'multi_select_no_selection' => 'Nichts ausgewählt', + 'multi_select_select_all' => 'Alle auswählen', + 'multi_select_n_selected' => 'ausgewählt', + 'multi_select_all_selected' => 'Alle ausgewählt', + 'multi_select_filter_placeholder' => 'Suche..', + 'intro_next_label' => 'Nächste', + 'intro_prev_label' => 'Vorherige', + 'intro_skip_label' => 'Überspringen', + 'intro_done_label' => 'Erledigt', + 'between_dates_breadcrumb' => 'Zwischen :start und :end', + 'all_journals_without_budget' => 'Alle Buchungen ohne Budget', + 'journals_without_budget' => 'Buchungen ohne Budget', + 'all_journals_without_category' => 'Alle Buchungen ohne Kategorie', + 'journals_without_category' => 'Buchungen ohne Kategorie', + 'all_journals_for_account' => 'Alle Buchungen für Konto „:name”', + 'chart_all_journals_for_account' => 'Diagramm für alle Buchungen des Kontos „:name”', + 'journals_in_period_for_account' => 'Alle Buchungen für Konto „:name” zwischen :start und :end', + 'journals_in_period_for_account_js' => 'Alle Buchungen für Account {title} zwischen {start} und {end}', + 'transferred' => 'Umgebucht', + 'all_withdrawal' => 'Alle Ausgaben', + 'all_transactions' => 'Alle Buchungen', + 'title_withdrawal_between' => 'Alle Ausgaben zwischen :start und :end', + 'all_deposit' => 'Alle Einnahmen', + 'title_deposit_between' => 'Alle Einnahmen zwischen :start und :end', + 'all_transfers' => 'Alle Umbuchungen', + 'title_transfers_between' => 'Alle Umbuchungen zwischen :start und :end', + 'all_transfer' => 'Alle Umbuchungen', + 'all_journals_for_tag' => 'Alle Buchungen für das Schlagwort „:tag”', + 'title_transfer_between' => 'Alle Umbuchungen zwischen :start und :end', + 'all_journals_for_category' => 'Alle Buchungen für Kategorie „:name”', + 'all_journals_for_budget' => 'Alle Buchungen im Budget „:name”', + 'chart_all_journals_for_budget' => 'Diagramm für alle Buchungen im Budget „:name”', + 'journals_in_period_for_category' => 'Alle Buchungen für Kategorie „:name” zwischen :start und :end', + 'journals_in_period_for_tag' => 'Alle Buchungen für das Schlagwort „:tag” zwischen :start und :end', + 'not_available_demo_user' => 'Die Funktionen, auf welche sie zugreifen wollen, steht Demo-Benutzern nicht zur Verfügung.', + 'exchange_rate_instructions' => 'Das Bestandskonto „@name” akzeptiert nur Buchungen in @native_currency. Wenn Sie stattdessen @foreign_currency verwenden wollen, sollten Sie sicherstellen, dass der Betrag auch in @native_currency angegeben ist:', + 'transfer_exchange_rate_instructions' => 'Das Quellkonto „@source_name” akzeptiert nur Buchungen in @source_currency. Das Zielkonto "@dest_name" akzeptiert nur Buchungen in @dest_currency. Sie müssen den Betrag in beiden Währungen korrekt angeben.', + 'transaction_data' => 'Transaktionsdaten', + 'invalid_server_configuration' => 'Ungültige Serverkonfiguration', + 'invalid_locale_settings' => 'Firefly III ist nicht in der Lage, Geldbeträge zu formatieren, weil Ihrem Server die erforderlichen Pakete fehlen. Es gibt Anleitungen, wie Sie dies tun können.', + 'quickswitch' => 'Schnellauswahl', + 'sign_in_to_start' => 'Melden Sie sich an, um Ihre Sitzung zu starten', + 'sign_in' => 'Anmelden', + 'register_new_account' => 'Neues Benutzerkonto anlegen', + 'forgot_my_password' => 'Passwort vergessen', + 'problems_with_input' => 'Es gab Probleme mit Ihrer Eingabe.', + 'reset_password' => 'Ihr Passwort zurücksetzen', + 'button_reset_password' => 'Passwort zurücksetzen', + 'reset_button' => 'Zurücksetzen', + 'want_to_login' => 'Ich möchte mich anmelden', + 'login_page_title' => 'Bei Firefly III anmelden', + 'register_page_title' => 'Bei Firefly III registrieren', + 'forgot_pw_page_title' => 'Haben Sie Ihr Passwort für Firefly III vergessen?', + 'reset_pw_page_title' => 'Passwort für Firefly III zurücksetzen', + 'cannot_reset_demo_user' => 'Sie können das Passwort des Demo-Benutzers nicht zurücksetzen.', + 'no_att_demo_user' => 'Anwender der Demo-Version können keine Anhänge hochladen.', + 'button_register' => 'Registrieren', + 'authorization' => 'Autorisierung', + 'active_bills_only' => 'nur aktive Rechnungen', + 'active_bills_only_total' => 'Alle aktiven Rechnungen', + 'active_exp_bills_only' => 'nur aktive und erwartete Rechnungen', + 'active_exp_bills_only_total' => 'nur aktive und erwartete Rechnungen', + 'per_period_sum_1D' => 'Erwartete tägliche Kosten', + 'per_period_sum_1W' => 'Erwartete wöchentliche Kosten', + 'per_period_sum_1M' => 'Erwartete monatliche Kosten', + 'per_period_sum_3M' => 'Erwartete vierteljährliche Kosten', + 'per_period_sum_6M' => 'Erwartete halbjährliche Kosten', + 'per_period_sum_1Y' => 'Erwartete jährliche Kosten', + 'average_per_bill' => 'Durchschnitt je Rechnung', + 'expected_total' => 'Voraussichtliche Summe', + 'reconciliation_account_name' => ':name Kontenabgleich (:currency)', + 'saved' => 'Gespeichert', + 'advanced_options' => 'Erweiterte Optionen', + 'advanced_options_explain' => 'Auf einigen Seiten in Firefly III sind hinter dieser Schaltfläche erweiterte Optionen zu finden. Diese Seite enthält hier nichts Außergewöhnliches, aber schauen Sie sich die anderen an!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'Es gibt keine Webhook Nachrichten', - 'webhook_trigger_STORE_TRANSACTION' => 'Nach Erstellen einer Buchung', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Nach Aktualisierung einer Buchung', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Nach dem Löschen einer Buchung', - 'webhook_response_TRANSACTIONS' => 'Buchungsdetails', - 'webhook_response_ACCOUNTS' => 'Kontodetails', - 'webhook_response_none_NONE' => 'Keine Daten', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Überprüfen', - 'create_new_webhook' => 'Neuen Webhook erstellen', - 'webhooks_create_breadcrumb' => 'Neuen Webhook erstellen', - 'webhook_trigger_form_help' => 'Geben Sie an, bei welchem Ereignis der Webhook ausgelöst werden soll', - 'webhook_response_form_help' => 'Geben Sie an, was der Webhook an die URL senden soll.', - 'webhook_delivery_form_help' => 'In welchem Format der Webhook Daten liefern muss.', - 'webhook_active_form_help' => 'Der Webhook muss aktiv sein oder wird nicht aufgerufen.', - 'stored_new_webhook' => 'Neuer Webhook ":title " gespeichert', - 'delete_webhook' => 'Webhook löschen', - 'deleted_webhook' => 'Webhook ":title" gelöscht', - 'edit_webhook' => 'Webhook ":title " bearbeiten', - 'updated_webhook' => 'Webhook ":title " aktualisiert', - 'edit_webhook_js' => 'Webhook "{title} " bearbeiten', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'Der Webhook wurde für die angezeigte Transaktion ausgelöst. Bitte warten Sie, bis die Ergebnisse erscheinen.', - 'webhook_messages' => 'Webhook-Nachricht', - 'view_message' => 'Nachricht anzeigen', - 'view_attempts' => 'Gescheiterte Versuche anzeigen', - 'message_content_title' => 'Webhook Nachrichteninhalt', - 'message_content_help' => 'Dies ist der Inhalt der Nachricht, die mit diesem Webhook gesendet (oder zu Senden versucht) wurde.', - 'attempt_content_title' => 'Webhook Versuche', - 'attempt_content_help' => 'Dies sind alle erfolglosen Versuche dieser Webhook-Nachricht, an die konfigurierte URL zu senden. Nach einiger Zeit wird es Firefly III nicht mehr versuchen.', - 'no_attempts' => 'Es gibt keine erfolglosen Versuche. Das ist eine gute Sache!', - 'webhook_attempt_at' => 'Versuch bei {moment}', - 'logs' => 'Protokolle', - 'response' => 'Antwort', - 'visit_webhook_url' => 'Webhook-URL besuchen', - 'reset_webhook_secret' => 'Webhook Secret zurücksetzen', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") wurde gespeichert.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") wurde aktualisiert.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'deaktiviert', + 'no_webhook_messages' => 'Es gibt keine Webhook Nachrichten', + 'webhook_trigger_STORE_TRANSACTION' => 'Nach Erstellen einer Buchung', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Nach Aktualisierung einer Buchung', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Nach dem Löschen einer Buchung', + 'webhook_response_TRANSACTIONS' => 'Buchungsdetails', + 'webhook_response_ACCOUNTS' => 'Kontodetails', + 'webhook_response_none_NONE' => 'Keine Daten', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Überprüfen', + 'create_new_webhook' => 'Neuen Webhook erstellen', + 'webhooks_create_breadcrumb' => 'Neuen Webhook erstellen', + 'webhook_trigger_form_help' => 'Geben Sie an, bei welchem Ereignis der Webhook ausgelöst werden soll', + 'webhook_response_form_help' => 'Geben Sie an, was der Webhook an die URL senden soll.', + 'webhook_delivery_form_help' => 'In welchem Format der Webhook Daten liefern muss.', + 'webhook_active_form_help' => 'Der Webhook muss aktiv sein oder wird nicht aufgerufen.', + 'stored_new_webhook' => 'Neuer Webhook ":title " gespeichert', + 'delete_webhook' => 'Webhook löschen', + 'deleted_webhook' => 'Webhook ":title" gelöscht', + 'edit_webhook' => 'Webhook ":title " bearbeiten', + 'updated_webhook' => 'Webhook ":title " aktualisiert', + 'edit_webhook_js' => 'Webhook "{title} " bearbeiten', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'Der Webhook wurde für die angezeigte Transaktion ausgelöst. Bitte warten Sie, bis die Ergebnisse erscheinen.', + 'webhook_messages' => 'Webhook-Nachricht', + 'view_message' => 'Nachricht anzeigen', + 'view_attempts' => 'Gescheiterte Versuche anzeigen', + 'message_content_title' => 'Webhook Nachrichteninhalt', + 'message_content_help' => 'Dies ist der Inhalt der Nachricht, die mit diesem Webhook gesendet (oder zu Senden versucht) wurde.', + 'attempt_content_title' => 'Webhook Versuche', + 'attempt_content_help' => 'Dies sind alle erfolglosen Versuche dieser Webhook-Nachricht, an die konfigurierte URL zu senden. Nach einiger Zeit wird es Firefly III nicht mehr versuchen.', + 'no_attempts' => 'Es gibt keine erfolglosen Versuche. Das ist eine gute Sache!', + 'webhook_attempt_at' => 'Versuch bei {moment}', + 'logs' => 'Protokolle', + 'response' => 'Antwort', + 'visit_webhook_url' => 'Webhook-URL besuchen', + 'reset_webhook_secret' => 'Webhook Secret zurücksetzen', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") wurde gespeichert.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") wurde aktualisiert.', // API access - 'authorization_request' => 'Firefly III v:version Autorisierungsanfrage', - 'authorization_request_intro' => 'Anwendung ":client" bittet um Erlaubnis, auf Ihre Finanzverwaltung zuzugreifen. Möchten Sie :client erlauben, auf diese Datensätze zuzugreifen?', - 'authorization_request_site' => 'Sie werden zu :url weitergeleitet, welche dann auf Ihre Daten in Firefly III zugreifen kann.', - 'authorization_request_invalid' => 'Diese Zugriffsanfrage ist ungültig. Bitte folgen Sie nie wieder diesem Link.', - 'scopes_will_be_able' => 'Diese Anwendung kann:', - 'button_authorize' => 'Erlauben', - 'none_in_select_list' => '(Keine)', - 'no_piggy_bank' => '(kein Sparschwein)', - 'name_in_currency' => ':name in :currency', - 'paid_in_currency' => 'Bezahlt in :currency', - 'unpaid_in_currency' => 'Unbezahlt in :currency', - 'is_alpha_warning' => 'Sie nutzen eine ALPHA-Version. Seien Sie vorsichtig bei Fehlern und Problemen.', - 'is_beta_warning' => 'Sie verwenden eine BETA-Version. Seien Sie vorsichtig bei Fehlern und Problemen.', - 'all_destination_accounts' => 'Zielkonten', - 'all_source_accounts' => 'Quellkonten', - 'back_to_index' => 'Zurück zum Index', - 'cant_logout_guard' => 'Firefly III kann Sie nicht abmelden.', - 'internal_reference' => 'Interne Referenz', + 'authorization_request' => 'Firefly III v:version Autorisierungsanfrage', + 'authorization_request_intro' => 'Anwendung ":client" bittet um Erlaubnis, auf Ihre Finanzverwaltung zuzugreifen. Möchten Sie :client erlauben, auf diese Datensätze zuzugreifen?', + 'authorization_request_site' => 'Sie werden zu :url weitergeleitet, welche dann auf Ihre Daten in Firefly III zugreifen kann.', + 'authorization_request_invalid' => 'Diese Zugriffsanfrage ist ungültig. Bitte folgen Sie nie wieder diesem Link.', + 'scopes_will_be_able' => 'Diese Anwendung kann:', + 'button_authorize' => 'Erlauben', + 'none_in_select_list' => '(Keine)', + 'no_piggy_bank' => '(kein Sparschwein)', + 'name_in_currency' => ':name in :currency', + 'paid_in_currency' => 'Bezahlt in :currency', + 'unpaid_in_currency' => 'Unbezahlt in :currency', + 'is_alpha_warning' => 'Sie nutzen eine ALPHA-Version. Seien Sie vorsichtig bei Fehlern und Problemen.', + 'is_beta_warning' => 'Sie verwenden eine BETA-Version. Seien Sie vorsichtig bei Fehlern und Problemen.', + 'all_destination_accounts' => 'Zielkonten', + 'all_source_accounts' => 'Quellkonten', + 'back_to_index' => 'Zurück zum Index', + 'cant_logout_guard' => 'Firefly III kann Sie nicht abmelden.', + 'internal_reference' => 'Interne Referenz', // check for updates: - 'update_check_title' => 'Nach Updates suchen', - 'admin_update_check_title' => 'Automatisch nach Updates suchen', - 'admin_update_check_explain' => 'Firefly III kann automatisch nach Aktualisierungen suchen. Wenn Sie diese Einstellung aktivieren, wird der Firefly III Aktualisierungsserver kontaktiert, um zu prüfen, ob eine neue Version von Firefly III verfügbar ist. Wenn dies der Fall ist, erhalten Sie eine Benachrichtigung. Sie können diese Benachrichtigung mit der Schaltfläche auf der rechten Seite testen. Bitte geben Sie unten an, ob Firefly III nach Aktualisierungen suchen soll.', - 'check_for_updates_permission' => 'Firefly III kann nach Updates suchen, benötigt jedoch Ihre Erlaubnis dazu. Bitte gehen Sie zur Administration, um anzugeben, ob diese Funktion aktiviert werden soll.', - 'updates_ask_me_later' => 'Später fragen', - 'updates_do_not_check' => 'Nicht nach Updates suchen', - 'updates_enable_check' => 'Nach Updates suchen', - 'admin_update_check_now_title' => 'Auf Update überprüfen', - 'admin_update_check_now_explain' => 'Wenn Sie den Knopf drücken, wird Firefly III überprüfen, ob Ihre Version die aktuellste ist.', - 'check_for_updates_button' => 'Jetzt prüfen!', - 'update_new_version_alert' => 'Eine neue Version von Firefly III ist verfügbar. Sie verwenden :your_version, die neueste Version ist :new_version, die am :date veröffentlicht wurde.', - 'update_version_beta' => 'Seien Sie vorsichtig bei der Verwendung dieser BETA-Version. Sie könnte noch Fehler enthaltern.', - 'update_version_alpha' => 'Seien Sie vorsichtig bei der Verwendung dieser APLPHA-Version. Sie kann Fehler enthaltern.', - 'update_current_version_alert' => 'Sie verwenden Version :version. Dies ist die neueste verfügbare Version.', - 'update_newer_version_alert' => 'Sie verwenden :your_version. Ihre Version ist neuer als die neueste Version (:new_version).', - 'update_check_error' => 'Bei der Suche nach Aktualisierungen ist ein Fehler aufgetreten: :error', - 'unknown_error' => 'Leider ist ein unbekannter Fehler aufgetreten.', - 'just_new_release' => 'Eine neue Version ist verfügbar! Version :version wurde veröffentlicht :date. Diese Version ist sehr neu. Warten Sie ein paar Tage, bis sich die neue Version stabiler ist.', - 'disabled_but_check' => 'Die Aktualisierungsprüfung ist deaktiviert. Vergessen Sie also nicht, von Zeit zu Zeit selbst nach Aktualisierungen zu suchen. Vielen Dank!', - 'admin_update_channel_title' => 'Aktualisierungskanal', - 'admin_update_channel_explain' => 'Firefly III verfügt über drei Aktualisierungskanäle, welche bestimmen, wie weit Sie in Bezug auf Funktionen, Verbesserungen und Fehler experimentierfreudig sind. Nutzen Sie den „Beta”-Kanal, wenn Sie abenteuerlustig sind, und den „Alpha”-Kanal, wenn Sie ein gefährliches Leben führen möchten.', - 'update_channel_stable' => 'Stabil — Alles sollte wie erwartet funktionieren.', - 'update_channel_beta' => 'Beta — Neue Funktionen, aber einige Funktionen könnten fehlerhaft sein.', - 'update_channel_alpha' => 'Alpha — Wir werfen neue Features hinein und schauen, was funktioniert.', + 'update_check_title' => 'Nach Updates suchen', + 'admin_update_check_title' => 'Automatisch nach Updates suchen', + 'admin_update_check_explain' => 'Firefly III kann automatisch nach Aktualisierungen suchen. Wenn Sie diese Einstellung aktivieren, wird der Firefly III Aktualisierungsserver kontaktiert, um zu prüfen, ob eine neue Version von Firefly III verfügbar ist. Wenn dies der Fall ist, erhalten Sie eine Benachrichtigung. Sie können diese Benachrichtigung mit der Schaltfläche auf der rechten Seite testen. Bitte geben Sie unten an, ob Firefly III nach Aktualisierungen suchen soll.', + 'check_for_updates_permission' => 'Firefly III kann nach Updates suchen, benötigt jedoch Ihre Erlaubnis dazu. Bitte gehen Sie zur Administration, um anzugeben, ob diese Funktion aktiviert werden soll.', + 'updates_ask_me_later' => 'Später fragen', + 'updates_do_not_check' => 'Nicht nach Updates suchen', + 'updates_enable_check' => 'Nach Updates suchen', + 'admin_update_check_now_title' => 'Auf Update überprüfen', + 'admin_update_check_now_explain' => 'Wenn Sie den Knopf drücken, wird Firefly III überprüfen, ob Ihre Version die aktuellste ist.', + 'check_for_updates_button' => 'Jetzt prüfen!', + 'update_new_version_alert' => 'Eine neue Version von Firefly III ist verfügbar. Sie verwenden :your_version, die neueste Version ist :new_version, die am :date veröffentlicht wurde.', + 'update_version_beta' => 'Seien Sie vorsichtig bei der Verwendung dieser BETA-Version. Sie könnte noch Fehler enthaltern.', + 'update_version_alpha' => 'Seien Sie vorsichtig bei der Verwendung dieser APLPHA-Version. Sie kann Fehler enthaltern.', + 'update_current_dev_older' => 'Sie verwenden die Entwicklungsversion „:version”, die älter ist als die neueste Version :new_version. Bitte aktualisieren Sie!', + 'update_current_dev_newer' => 'Sie verwenden die Entwicklungsversion „:version”, die neuer ist als die letzte Version :new_version.', + 'update_current_version_alert' => 'Sie verwenden Version :version. Dies ist die neueste verfügbare Version.', + 'update_newer_version_alert' => 'Sie verwenden :your_version. Ihre Version ist neuer als die neueste Version (:new_version).', + 'update_check_error' => 'Bei der Suche nach Aktualisierungen ist ein Fehler aufgetreten: :error', + 'unknown_error' => 'Leider ist ein unbekannter Fehler aufgetreten.', + 'disabled_but_check' => 'Die Aktualisierungsprüfung ist deaktiviert. Vergessen Sie also nicht, von Zeit zu Zeit selbst nach Aktualisierungen zu suchen. Vielen Dank!', + 'admin_update_channel_title' => 'Aktualisierungskanal', + 'admin_update_channel_explain' => 'Firefly III verfügt über drei Aktualisierungskanäle, welche bestimmen, wie weit Sie in Bezug auf Funktionen, Verbesserungen und Fehler experimentierfreudig sind. Nutzen Sie den „Beta”-Kanal, wenn Sie abenteuerlustig sind, und den „Alpha”-Kanal, wenn Sie ein gefährliches Leben führen möchten.', + 'update_channel_stable' => 'Stabil — Alles sollte wie erwartet funktionieren.', + 'update_channel_beta' => 'Beta — Neue Funktionen, aber einige Funktionen könnten fehlerhaft sein.', + 'update_channel_alpha' => 'Alpha — Wir werfen neue Features hinein und schauen, was funktioniert.', // search - 'search' => 'Suche', - 'search_query' => 'Abfrage', - 'search_found_transactions' => 'Firefly III hat :count Transaktion in :time Sekunden gefunden.|Firefly III hat :count Transaktionen in :time Sekunden gefunden.', - 'search_found_more_transactions' => 'Firefly III hat mehr als :count Transaktionen in :time Sekunden gefunden.', - 'search_for_query' => 'Firefly III sucht nach Buchungen mit folgenden Wörtern im Namen: :query', - 'invalid_operators_list' => 'Diese Suchparameter sind ungültig und wurden ignoriert.', + 'search' => 'Suche', + 'search_query' => 'Abfrage', + 'search_found_transactions' => 'Firefly III hat :count Transaktion in :time Sekunden gefunden.|Firefly III hat :count Transaktionen in :time Sekunden gefunden.', + 'search_found_more_transactions' => 'Firefly III hat mehr als :count Transaktionen in :time Sekunden gefunden.', + 'search_for_query' => 'Firefly III sucht nach Buchungen mit folgenden Wörtern im Namen: :query', + 'invalid_operators_list' => 'Diese Suchparameter sind ungültig und wurden ignoriert.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Buchungsdatum ist „:value”', 'search_modifier_not_date_on' => 'Buchungsdatum ist nicht ":value"', 'search_modifier_reconciled' => 'Buchung wurde abgeglichen', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Buchungstyp ist „:value”', 'search_modifier_not_transaction_type' => 'Buchungstyp ist nicht „:value”', 'search_modifier_tag_is' => 'Schlagwort ist „:value”', + 'search_modifier_tag_contains' => 'Schlagwort enthält ":value"', + 'search_modifier_not_tag_contains' => 'Schlagwort enthält nicht ":value"', + 'search_modifier_tag_ends' => 'Schlagwort endet mit ":value"', + 'search_modifier_tag_starts' => 'Schlagwort beginnt mit ":value"', 'search_modifier_not_tag_is' => 'Kein Schlagwort lautet ":value"', 'search_modifier_date_on_year' => 'Buchung im Jahr „:value”', 'search_modifier_not_date_on_year' => 'Buchung ist nicht im Jahr ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Buchung ist in oder nach dem Monat ":value"', 'search_modifier_date_after_day' => 'Buchung ist nach oder am ":value" Tag des Monats', - // new 'search_modifier_tag_is_not' => 'Kein Schlagwort lautet ":value"', 'search_modifier_not_tag_is_not' => 'Schlagwort ist ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Die folgenden Einschränkungen werden ebenfalls auf die Suche angewendet:', 'general_search_error' => 'Bei der Suche ist ein Fehler aufgetreten. Bitte überprüfen Sie die Protokolldateien für weitere Informationen.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Nicht', 'cannot_fire_inactive_rules' => 'Inaktive Regeln können nicht ausgeführt werden.', + 'show_triggers' => 'Auslöser anzeigen', + 'show_actions' => 'Aktionen anzeigen', 'rules' => 'Regeln', 'rule_name' => 'Name der Regel', 'rule_triggers' => 'Regel wird ausgelöst wenn', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Wenn eine Buchung aktualisiert wird', 'rule_trigger_user_action' => 'Die Nutzeraktion ist ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Quellkonto-Name beginnt mit..', 'rule_trigger_source_account_starts' => 'Name des Quellkontos beginnt mit ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Budget ist „:trigger_value”', 'rule_trigger_tag_is_choice' => 'Irgendein Schlagwort lautet..', 'rule_trigger_tag_is' => 'Irgendein Schlagwort lautet ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Beliebiges Schlagwort enthält …', + 'rule_trigger_tag_contains' => 'Beliebiges Schlagwort enthält „:trigger_value”', + 'rule_trigger_tag_ends_choice' => 'Beliebiges Schlagwort endet auf ...', + 'rule_trigger_tag_ends' => 'Beliebiges Schlagwort endet auf „:trigger_value”', + 'rule_trigger_tag_starts_choice' => 'Beliebiges Schlagwort beginnt mit ...', + 'rule_trigger_tag_starts' => 'Beliebiges Schlagwort beginnt mit „:trigger_value”', 'rule_trigger_currency_is_choice' => 'Buchungswährung ist..', 'rule_trigger_currency_is' => 'Buchungswährung ist „:trigger_value”', 'rule_trigger_foreign_currency_is_choice' => 'Fremdwährung der Buchung ist..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Buchung existiert nicht', 'rule_trigger_not_has_attachments' => 'Buchung hat keine Anhänge', 'rule_trigger_not_has_any_category' => 'Buchung ohne Kategorie', - 'rule_trigger_not_has_any_budget' => 'Buchung hat keine Kategorie', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Buchung ist keine Rechnung zugewiesen', 'rule_trigger_not_has_any_tag' => 'Buchung hat keine Schlagwörter', 'rule_trigger_not_any_notes' => 'Buchung hat keine Notizen', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Zielkonto ist kein Bargeldkonto', 'rule_trigger_not_account_is_cash' => 'Beide Konten sind keine Bargeldkonten', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'Buchung LÖSCHEN(!)', @@ -1235,7 +1244,7 @@ return [ 'rule_action_set_description' => 'Beschreibung setzen für ":action_value"', 'rule_action_append_description' => '":action_value" an Beschreibung anfügen', 'rule_action_prepend_description' => '":action_value" vor Beschreibung einfügen', - 'rule_action_set_category_choice' => 'Kategorie zuweisen ...', + 'rule_action_set_category_choice' => "Kategorie zuweisen\u{a0}...", 'rule_action_clear_category_choice' => 'Bereinige jede Kategorie', 'rule_action_set_budget_choice' => 'Setze Budget auf ..', 'rule_action_clear_budget_choice' => 'Alle Budgets leeren', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Notizen an die Beschreibung anhängen', 'rule_action_move_descr_to_notes' => 'Notizen durch die Beschreibung ersetzen', 'rule_action_move_notes_to_descr' => 'Beschreibung durch die Notizen ersetzen', + 'rule_action_set_destination_to_cash_choice' => 'Zielkonto auf (Bargeld) setzen', + 'rule_action_set_source_to_cash_choice' => 'Quellkonto auf (Bargeld) setzen', 'rulegroup_for_bills_title' => 'Regelgruppe für Rechnungen', 'rulegroup_for_bills_description' => 'Eine spezielle Regelgruppe für alle Regeln, die Rechnungen betreffen.', 'rule_for_bill_title' => 'Automatisch generierte Regel für die Rechnung ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Regel für Rechnung „:name”', 'new_rule_for_bill_description' => 'Diese Regel kennzeichnet Buchungen für die Rechnung „:name”.', - 'new_rule_for_journal_title' => 'Regel basierend auf der Buchung „:description”', - 'new_rule_for_journal_description' => 'Diese Regel basiert auf der Buchung „:description”. Sie stimmt mit Buchungen überein, die identisch sind.', + 'new_rule_for_journal_title' => 'Regel basierend auf der Buchung „:description”', + 'new_rule_for_journal_description' => 'Diese Regel basiert auf der Buchung „:description”. Sie stimmt mit Buchungen überein, die identisch sind.', // tags - 'store_new_tag' => 'Neues Schlagwort speichern', - 'update_tag' => 'Schlüsselwort aktualisieren', - 'no_location_set' => 'Kein Ort gesetzt.', - 'meta_data' => 'Metadaten', - 'location' => 'Standort', - 'without_date' => 'Ohne Datum', - 'result' => 'Ergebnis', - 'sums_apply_to_range' => 'Alle Summen beziehen sich auf den ausgewählten Bereich.', - 'mapbox_api_key' => 'Um Karten zu verwenden, besorgen Sie sich einen API-Schlüssel von Mapbox. Öffnen Sie Ihre Datei .env und geben Sie diesen Schlüssel nach MAPBOX_API_KEY= ein.', - 'press_object_location' => 'Rechtsklick oder Anklicken und gedrückt halten, um die Position des Objekts festzulegen.', - 'clear_location' => 'Ort leeren', - 'delete_all_selected_tags' => 'Alle markierten Stichwörter löschen', - 'select_tags_to_delete' => 'Nicht vergessen, einige Schlagwörter auszuwählen.', - 'deleted_x_tags' => ':count Tag gelöscht.|:count Tags gelöscht.', - 'create_rule_from_transaction' => 'Regel auf Basis der Buchung erstellen', - 'create_recurring_from_transaction' => 'Dauerauftrag basierend auf der Buchung erstellen', - + 'store_new_tag' => 'Neues Schlagwort speichern', + 'update_tag' => 'Schlüsselwort aktualisieren', + 'no_location_set' => 'Kein Ort gesetzt.', + 'meta_data' => 'Metadaten', + 'location' => 'Standort', + 'location_first_split' => 'Der Standort für diese Buchung kann bei der ersten Aufteilung dieser Buchung festgelegt werden.', + 'without_date' => 'Ohne Datum', + 'result' => 'Ergebnis', + 'sums_apply_to_range' => 'Alle Summen beziehen sich auf den ausgewählten Bereich.', + 'mapbox_api_key' => 'Um Karten zu verwenden, besorgen Sie sich einen API-Schlüssel von Mapbox. Öffnen Sie Ihre Datei .env und geben Sie diesen Schlüssel nach MAPBOX_API_KEY= ein.', + 'press_object_location' => 'Rechtsklick oder Anklicken und gedrückt halten, um die Position des Objekts festzulegen.', + 'click_tap_location' => 'Klicken/Tippen Sie auf die Karte, um einen Standort hinzuzufügen', + 'clear_location' => 'Ort leeren', + 'delete_all_selected_tags' => 'Alle markierten Stichwörter löschen', + 'select_tags_to_delete' => 'Nicht vergessen, einige Schlagwörter auszuwählen.', + 'deleted_x_tags' => ':count Tag gelöscht.|:count Tags gelöscht.', + 'create_rule_from_transaction' => 'Regel auf Basis der Buchung erstellen', + 'create_recurring_from_transaction' => 'Dauerauftrag basierend auf der Buchung erstellen', // preferences - 'dark_mode_option_browser' => 'Browser entscheiden lassen', - 'dark_mode_option_light' => 'Immer hell', - 'dark_mode_option_dark' => 'Immer dunkel', - 'equal_to_language' => '(entsprechend der Sprache)', - 'dark_mode_preference' => 'Dunkel Modus', - 'dark_mode_preference_help' => 'Firefly III mitteilen, wann der Dunkelmodus verwendet werden soll.', - 'pref_home_screen_accounts' => 'Konten auf dem Startbildschirm', - 'pref_home_screen_accounts_help' => 'Welche Konten sollen auf dem Startbildschirm angezeigt werden?', - 'pref_view_range' => 'Sichtbarer Zeitraum', - 'pref_view_range_help' => 'Einige Diagramme werden automatisch in Abschnitte aufgeteilt. Ihre Budgets werden ebenfalls in Abschnitte unterteilt. Welchen Zeitraum bevorzugen Sie?', - 'pref_1D' => 'Ein Tag', - 'pref_1W' => 'Eine Woche', - 'pref_1M' => 'Ein Monat', - 'pref_3M' => 'Drei Monate (Quartal)', - 'pref_6M' => 'Sechs Monate', - 'pref_1Y' => 'Ein Jahr', - 'pref_last365' => 'Letztes Jahr', - 'pref_last90' => 'Letzte 90 Tage', - 'pref_last30' => 'Letzte 30 Tage', - 'pref_last7' => 'Letzte 7 Tage', - 'pref_YTD' => 'Jahr bis heute', - 'pref_QTD' => 'Quartal bis heute', - 'pref_MTD' => 'Monat bis heute', - 'pref_languages' => 'Sprachen', - 'pref_locale' => 'Lokale Einstellungen', - 'pref_languages_help' => 'Firefly III unterstützt mehrere Sprachen. Welche möchten Sie nutzen?', - 'pref_locale_help' => 'Mit Firefly III können Sie weitere lokale Einstellungen vornehmen, z.B. wie Währungen, Zahlen und Daten formatiert werden sollen. Einträge in dieser Liste werden von Ihrem System möglicherweise nicht unterstützt. Firefly III enthält nicht die korrekten Datumseinstellungen für jedes Gebietsschema. Kontaktieren Sie uns für Verbesserungen.', - 'pref_locale_no_demo' => 'Diese Funktion kann von Demo-Nutzern nicht genutzt werden.', - 'pref_custom_fiscal_year' => 'Einstellungen zum Geschäftsjahr', - 'pref_custom_fiscal_year_label' => 'Aktiviert', - 'pref_custom_fiscal_year_help' => 'In Ländern, in denen ein Geschäftsjahr nicht vom 1. Januar bis 31. Dezember dauert, können Sie diese Option ändern und Start / Ende des Geschäftsjahres angeben', - 'pref_fiscal_year_start_label' => 'Startdatum des Geschäftsjahres', - 'pref_two_factor_auth' => 'Zwei-Faktor-Authentifizierung', - 'pref_two_factor_auth_help' => 'Wenn Sie die Zwei-Faktor-Authentifizierung aktivieren, fügen Sie ihrem Benutzerkonto eine zusätzliche Sicherheitsebene hinzu. Sie loggen sich ein mit etwas das Sie wissen (ihrem Passwort) und etwas das Sie besitzen (einem Bestätigungscode). Bestätigungscodes werden von Anwendungen auf ihrem Smartphone, wie Authy oder Google Authenticator, generiert.', - 'pref_enable_two_factor_auth' => 'Aktiviere Zwei-Faktor-Authentifizierung', - 'pref_two_factor_auth_disabled' => 'Der Code für die Zwei-Faktor-Authentifizierung wurde gelöscht und gesperrt', - 'pref_two_factor_auth_remove_it' => 'Vergessen Sie nicht ihr Benutzerkonto aus ihrer Authentifizierungsapp zu entfernen!', - 'pref_two_factor_auth_code' => 'Code überprüfen', - 'pref_two_factor_auth_code_help' => 'Scannen Sie den QR-Code mit einer Anwendung wie Authy oder Google Authenticator auf ihrem Handy und geben Sie den generierten Code ein.', - 'pref_two_factor_auth_reset_code' => 'Verifizierungscode zurücksetzen', - 'pref_two_factor_auth_disable_2fa' => '2FA deaktivieren', - '2fa_use_secret_instead' => 'Wenn Sie den QR-Code nicht einlesen können, können Sie stattdessen das Geheimnis verwenden: :secret.', - '2fa_backup_codes' => 'Speichern Sie diese Sicherungsschlüssel für den Zugriff, falls Sie Ihr Gerät verlieren sollten.', - '2fa_already_enabled' => 'Die 2-stufige Bestätigung ist bereits aktiviert.', - 'wrong_mfa_code' => 'Dieser MFA-Code ist ungültig.', - 'pref_save_settings' => 'Einstellungen speichern', - 'saved_preferences' => 'Einstellungen gespeichert!', - 'preferences_general' => 'Allgemein', - 'preferences_frontpage' => 'Startbildschirm', - 'preferences_security' => 'Sicherheit', - 'preferences_layout' => 'Anordnung', - 'preferences_notifications' => 'Benachrichtigungen', - 'pref_home_show_deposits' => 'Einnahmen auf dem Startbildschirm anzeigen', - 'pref_home_show_deposits_info' => 'Der Startbildschirm zeigt schon Ihre Ausgabekonten an. Sollen zusätzlich Ihre Einnahmekonten angezeigt werden?', - 'pref_home_do_show_deposits' => 'Ja, zeige sie an', - 'successful_count' => 'davon :count erfolgreich', - 'list_page_size_title' => 'Einträge pro Seite', - 'list_page_size_help' => 'Jede Liste von Elementen (Konten, Buchungen, usw.) zeigt höchstens so viele Elemente je Seite.', - 'list_page_size_label' => 'Einträge pro Seite', - 'between_dates' => '(:start und :end)', - 'pref_optional_fields_transaction' => 'Optionale Felder für Buchungen', - 'pref_optional_fields_transaction_help' => 'Wenn Sie eine Buchung anlegen sind standardmäßig nicht alle vorhandenen Felder aktiviert. Hier können Sie alle Felder aktivieren, die Sie gerne nutzen möchten. Alle Felder die deaktiviert sind, aber bereits ausgefüllt sind, werden unabhängig von ihren Einstellungen sichtbar sein.', - 'optional_tj_date_fields' => 'Datumsfelder', - 'optional_tj_other_fields' => 'Andere Felder', - 'optional_tj_attachment_fields' => 'Anlage Felder', - 'pref_optional_tj_interest_date' => 'Zinstermin', - 'pref_optional_tj_book_date' => 'Buchungsdatum', - 'pref_optional_tj_process_date' => 'Erfassungsdatum', - 'pref_optional_tj_due_date' => 'Fälligkeitstermin', - 'pref_optional_tj_payment_date' => 'Zahlungsdatum', - 'pref_optional_tj_invoice_date' => 'Rechnungsdatum', - 'pref_optional_tj_internal_reference' => 'Interne Referenz', - 'pref_optional_tj_notes' => 'Notizen', - 'pref_optional_tj_attachments' => 'Anhänge', - 'pref_optional_tj_external_url' => 'Externe URL', - 'pref_optional_tj_location' => 'Herkunft', - 'pref_optional_tj_links' => 'Buchungsverknüpfungen', - 'optional_field_meta_dates' => 'Daten', - 'optional_field_meta_business' => 'Geschäftlich', - 'optional_field_attachments' => 'Anhänge', - 'optional_field_meta_data' => 'Optionale Metadaten', - 'external_url' => 'Externe URL', - 'pref_notification_bill_reminder' => 'Erinnerung an fällige Rechnungen', - 'pref_notification_new_access_token' => 'Warnen, wenn ein neues API-Zugangs-Token erstellt wird', - 'pref_notification_transaction_creation' => 'Warnen, wenn eine Buchung automatisch erstellt wird', - 'pref_notification_user_login' => 'Warnen, wenn Sie sich von einem neuen Standort aus anmelden', - 'pref_notification_rule_action_failures' => 'Warnung, wenn Regelaktionen nicht ausgeführt werden (nur Slack oder Discord)', - 'pref_notifications' => 'Benachrichtigungen', - 'pref_notifications_help' => 'Geben Sie an, ob Sie diese Mitteilungen erhalten möchten. Einige Mitteilungen können sensible Finanzinformationen enthalten.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'Wenn Sie möchten, dass Firefly III Sie über Slack benachrichtigt, geben Sie hier die Webhook-URL ein. Ansonsten lassen Sie das Feld leer. Wenn Sie ein Administrator sind, müssen Sie diese URL auch in der Administration festlegen.', - 'slack_url_label' => 'Slack "eingehender Webhook" URL', + 'dark_mode_option_browser' => 'Browser entscheiden lassen', + 'dark_mode_option_light' => 'Immer hell', + 'dark_mode_option_dark' => 'Immer dunkel', + 'equal_to_language' => '(entsprechend der Sprache)', + 'dark_mode_preference' => 'Dunkel Modus', + 'dark_mode_preference_help' => 'Firefly III mitteilen, wann der Dunkelmodus verwendet werden soll.', + 'pref_home_screen_accounts' => 'Konten auf dem Startbildschirm', + 'pref_home_screen_accounts_help' => 'Welche Konten sollen auf dem Startbildschirm angezeigt werden?', + 'pref_view_range' => 'Sichtbarer Zeitraum', + 'pref_view_range_help' => 'Einige Diagramme werden automatisch in Abschnitte aufgeteilt. Ihre Budgets werden ebenfalls in Abschnitte unterteilt. Welchen Zeitraum bevorzugen Sie?', + 'pref_1D' => 'Ein Tag', + 'pref_1W' => 'Eine Woche', + 'pref_1M' => 'Ein Monat', + 'pref_3M' => 'Drei Monate (Quartal)', + 'pref_6M' => 'Sechs Monate', + 'pref_1Y' => 'Ein Jahr', + 'pref_last365' => 'Letztes Jahr', + 'pref_last90' => 'Letzte 90 Tage', + 'pref_last30' => "Letzte 30\u{a0}Tage", + 'pref_last7' => 'Letzte 7 Tage', + 'pref_YTD' => 'Jahr bis heute', + 'pref_QTD' => 'Quartal bis heute', + 'pref_MTD' => 'Monat bis heute', + 'pref_languages' => 'Sprachen', + 'pref_locale' => 'Lokale Einstellungen', + 'pref_languages_help' => 'Firefly III unterstützt mehrere Sprachen. Welche möchten Sie nutzen?', + 'pref_locale_help' => 'Mit Firefly III können Sie weitere lokale Einstellungen vornehmen, z.B. wie Währungen, Zahlen und Daten formatiert werden sollen. Einträge in dieser Liste werden von Ihrem System möglicherweise nicht unterstützt. Firefly III enthält nicht die korrekten Datumseinstellungen für jedes Gebietsschema. Kontaktieren Sie uns für Verbesserungen.', + 'pref_locale_no_demo' => 'Diese Funktion kann von Demo-Nutzern nicht genutzt werden.', + 'pref_custom_fiscal_year' => 'Einstellungen zum Geschäftsjahr', + 'pref_custom_fiscal_year_label' => 'Aktiviert', + 'pref_custom_fiscal_year_help' => 'In Ländern, in denen ein Geschäftsjahr nicht vom 1. Januar bis 31. Dezember dauert, können Sie diese Option ändern und Start / Ende des Geschäftsjahres angeben', + 'pref_fiscal_year_start_label' => 'Startdatum des Geschäftsjahres', + 'pref_two_factor_auth' => 'Zwei-Faktor-Authentifizierung', + 'pref_two_factor_auth_help' => 'Wenn Sie die Zwei-Faktor-Authentifizierung aktivieren, fügen Sie ihrem Benutzerkonto eine zusätzliche Sicherheitsebene hinzu. Sie loggen sich ein mit etwas das Sie wissen (ihrem Passwort) und etwas das Sie besitzen (einem Bestätigungscode). Bestätigungscodes werden von Anwendungen auf ihrem Smartphone, wie Authy oder Google Authenticator, generiert.', + 'pref_enable_two_factor_auth' => 'Aktiviere Zwei-Faktor-Authentifizierung', + 'pref_two_factor_auth_disabled' => 'Der Code für die Zwei-Faktor-Authentifizierung wurde gelöscht und gesperrt', + 'pref_two_factor_auth_remove_it' => 'Vergessen Sie nicht ihr Benutzerkonto aus ihrer Authentifizierungsapp zu entfernen!', + 'pref_two_factor_auth_code' => 'Code überprüfen', + 'pref_two_factor_auth_code_help' => 'Scannen Sie den QR-Code mit einer Anwendung wie Authy oder Google Authenticator auf ihrem Handy und geben Sie den generierten Code ein.', + 'pref_two_factor_auth_reset_code' => 'Verifizierungscode zurücksetzen', + 'pref_two_factor_auth_disable_2fa' => '2FA deaktivieren', + '2fa_use_secret_instead' => 'Wenn Sie den QR-Code nicht einlesen können, können Sie stattdessen das Geheimnis verwenden: :secret.', + '2fa_backup_codes' => 'Speichern Sie diese Sicherungsschlüssel für den Zugriff, falls Sie Ihr Gerät verlieren sollten.', + '2fa_already_enabled' => 'Die 2-stufige Bestätigung ist bereits aktiviert.', + 'wrong_mfa_code' => 'Dieser MFA-Code ist ungültig.', + 'pref_save_settings' => 'Einstellungen speichern', + 'saved_preferences' => 'Einstellungen gespeichert!', + 'preferences_general' => 'Allgemein', + 'preferences_frontpage' => 'Startbildschirm', + 'preferences_security' => 'Sicherheit', + 'preferences_layout' => 'Anordnung', + 'preferences_notifications' => 'Benachrichtigungen', + 'pref_home_show_deposits' => 'Einnahmen auf dem Startbildschirm anzeigen', + 'pref_home_show_deposits_info' => 'Der Startbildschirm zeigt schon Ihre Ausgabekonten an. Sollen zusätzlich Ihre Einnahmekonten angezeigt werden?', + 'pref_home_do_show_deposits' => 'Ja, zeige sie an', + 'successful_count' => 'davon :count erfolgreich', + 'list_page_size_title' => 'Einträge pro Seite', + 'list_page_size_help' => 'Jede Liste von Elementen (Konten, Buchungen, usw.) zeigt höchstens so viele Elemente je Seite.', + 'list_page_size_label' => 'Einträge pro Seite', + 'between_dates' => '(:start und :end)', + 'pref_optional_fields_transaction' => 'Optionale Felder für Buchungen', + 'pref_optional_fields_transaction_help' => 'Wenn Sie eine Buchung anlegen sind standardmäßig nicht alle vorhandenen Felder aktiviert. Hier können Sie alle Felder aktivieren, die Sie gerne nutzen möchten. Alle Felder die deaktiviert sind, aber bereits ausgefüllt sind, werden unabhängig von ihren Einstellungen sichtbar sein.', + 'optional_tj_date_fields' => 'Datumsfelder', + 'optional_tj_other_fields' => 'Andere Felder', + 'optional_tj_attachment_fields' => 'Anlage Felder', + 'pref_optional_tj_interest_date' => 'Zinstermin', + 'pref_optional_tj_book_date' => 'Buchungsdatum', + 'pref_optional_tj_process_date' => 'Erfassungsdatum', + 'pref_optional_tj_due_date' => 'Fälligkeitstermin', + 'pref_optional_tj_payment_date' => 'Zahlungsdatum', + 'pref_optional_tj_invoice_date' => 'Rechnungsdatum', + 'pref_optional_tj_internal_reference' => 'Interne Referenz', + 'pref_optional_tj_notes' => 'Notizen', + 'pref_optional_tj_attachments' => 'Anhänge', + 'pref_optional_tj_external_url' => 'Externe URL', + 'pref_optional_tj_location' => 'Herkunft', + 'pref_optional_tj_links' => 'Buchungsverknüpfungen', + 'optional_field_meta_dates' => 'Daten', + 'optional_field_meta_business' => 'Geschäftlich', + 'optional_field_attachments' => 'Anhänge', + 'optional_field_meta_data' => 'Optionale Metadaten', + 'external_url' => 'Externe URL', + 'pref_notification_bill_reminder' => 'Erinnerung an fällige Rechnungen', + 'pref_notification_new_access_token' => 'Warnen, wenn ein neues API-Zugangs-Token erstellt wird', + 'pref_notification_transaction_creation' => 'Warnen, wenn eine Buchung automatisch erstellt wird', + 'pref_notification_user_login' => 'Warnen, wenn Sie sich von einem neuen Standort aus anmelden', + 'pref_notification_rule_action_failures' => 'Warnung, wenn Regelaktionen nicht ausgeführt werden (nur Slack oder Discord)', + 'pref_notifications' => 'Benachrichtigungen', + 'pref_notifications_help' => 'Geben Sie an, ob Sie diese Mitteilungen erhalten möchten. Einige Mitteilungen können sensible Finanzinformationen enthalten.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'Wenn Sie möchten, dass Firefly III Sie über Slack benachrichtigt, geben Sie hier die Webhook-URL ein. Ansonsten lassen Sie das Feld leer. Wenn Sie ein Administrator sind, müssen Sie diese URL auch in der Administration festlegen.', + 'slack_url_label' => 'Slack "eingehender Webhook" URL', // Financial administrations - 'administration_index' => 'Finanzverwaltung', - 'administrations_index_menu' => 'Finanzverwaltung(en)', + 'administration_index' => 'Finanzverwaltung', + 'administrations_index_menu' => 'Finanzverwaltung(en)', // profile: - 'purge_data_title' => 'Daten aus Firefly III vernichten', - 'purge_data_expl' => '„Endgültiges Löschen” bedeutet „Löschen, was bereits gelöscht wurde”. Unter normalen Umständen löscht Firefly III nichts dauerhaft. Es verbirgt es nur. Die Schaltfläche unten löscht alle diese zuvor "gelöschten" Datensätze DAUERHAFT.', - 'delete_stuff_header' => 'Daten löschen und vernichten', - 'purge_all_data' => 'Alle gelöschten Datensätze vernichten', - 'purge_data' => 'Daten vernichten', - 'purged_all_records' => 'Alle gelöschten Datensätze wurden vernichtet.', - 'delete_data_title' => 'Daten aus Firefly III löschen', - 'permanent_delete_stuff' => 'Sie können Dinge aus Firefly III löschen. Mit den Buttons unten werden Ihre Gegenstände entfernt und ausgeblendet. Es keine Möglichkeit dies rückgängig zu machen, aber die Elemente können in der Datenbank verbleiben, wo sie gegebenenfalls wiederhergestellt werden können.', - 'other_sessions_logged_out' => 'Alle Ihre anderen Sitzungen wurden abgemeldet.', - 'delete_unused_accounts' => 'Durch das Löschen ungenutzter Konten werden Ihre Listen für die automatische Vervollständigung bereinigt.', - 'delete_all_unused_accounts' => 'Unbenutzte Konten löschen', - 'deleted_all_unused_accounts' => 'Alle ungenutzten Konten wurden gelöscht', - 'delete_all_budgets' => 'ALLE Ihre Budgets löschen', - 'delete_all_categories' => 'Alle Ihre Kategorien löschen', - 'delete_all_tags' => 'Alle Ihre Stichwörter löschen', - 'delete_all_bills' => 'ALLE Ihre Rechnungen löschen', - 'delete_all_piggy_banks' => 'ALLE Ihre Sparschweine löschen', - 'delete_all_rules' => 'ALLE Ihre Regeln löschen', - 'delete_all_recurring' => 'ALLE Daueraufträge löschen', - 'delete_all_object_groups' => 'ALLE Objektgruppen löschen', - 'delete_all_accounts' => 'ALLE Konten löschen', - 'delete_all_asset_accounts' => 'ALLE Bestandskonten löschen', - 'delete_all_expense_accounts' => 'ALLE Ausgabekonten löschen', - 'delete_all_revenue_accounts' => 'ALLE Einnahmekonten löschen', - 'delete_all_liabilities' => 'ALLE Verbindlichkeiten löschen', - 'delete_all_transactions' => 'ALLE Buchungen löschen', - 'delete_all_withdrawals' => 'ALLE Ausgaben löschen', - 'delete_all_deposits' => 'ALLE Einnahmen löschen', - 'delete_all_transfers' => 'ALLE Umbuchungen löschen', - 'also_delete_transactions' => 'Beim Löschen von Konten werden auch ALLE damit verbundenen Ausgaben, Einnahmen und Überweisungen gelöscht!', - 'deleted_all_budgets' => 'Alle Budgets wurden gelöscht', - 'deleted_all_categories' => 'Alle Kategorien wurden gelöscht', - 'deleted_all_tags' => 'Alle Schlagwörter wurden gelöscht', - 'deleted_all_bills' => 'Alle Rechnungen wurden gelöscht', - 'deleted_all_piggy_banks' => 'Alle Sparschweine wurden gelöscht', - 'deleted_all_rules' => 'Alle Regeln und Regelgruppen wurden gelöscht', - 'deleted_all_object_groups' => 'Alle Gruppen wurden gelöscht', - 'deleted_all_accounts' => 'Alle Konten wurden gelöscht', - 'deleted_all_asset_accounts' => 'Alle Bestandskonten wurden gelöscht', - 'deleted_all_expense_accounts' => 'Alle Ausgabenkonten wurden gelöscht', - 'deleted_all_revenue_accounts' => 'Alle Einnahmenkonten wurden gelöscht', - 'deleted_all_liabilities' => 'Alle Verbindlichkeiten wurden gelöscht', - 'deleted_all_transactions' => 'Alle Buchungen wurden gelöscht', - 'deleted_all_withdrawals' => 'Alle Ausgaben wurden gelöscht', - 'deleted_all_deposits' => 'Alle Einnahmen wurden gelöscht', - 'deleted_all_transfers' => 'Alle Umbuchungen wurden gelöscht', - 'deleted_all_recurring' => 'Alle Daueraufträge wurden gelöscht', - 'change_your_password' => 'Passwort ändern', - 'delete_account' => 'Konto löschen', - 'current_password' => 'Aktuelles Passwort', - 'new_password' => 'Neues Passwort', - 'new_password_again' => 'Neues Passwort (wiederholen)', - 'delete_your_account' => 'Ihren Account löschen', - 'delete_your_account_help' => 'Das Löschen ihres Benutzerkontos wird ebenfalls alle Konten, Buchungen, etc., also alles was Sie in Firefly gespeichert haben, löschen. Alles geht verloren und kann nicht wiederhergestellt werden.', - 'delete_your_account_password' => 'Geben Sie Ihr Kennwort ein um fortzufahren.', - 'password' => 'Passwort', - 'are_you_sure' => 'Sind Sie sich sicher? Sie können diesen Schritt nicht rückgängig machen.', - 'delete_account_button' => 'LÖSCHEN Sie ihr Benutzerkonto', - 'invalid_current_password' => 'Aktuelles Passwort ist ungültig!', - 'password_changed' => 'Passwort geändert!', - 'should_change' => 'Ziel ist es, ihr Passwort zu ändern.', - 'invalid_password' => 'Ungültiges Passwort!', - 'what_is_pw_security' => 'Was ist "Passwortsicherheit überprüfen"?', - 'secure_pw_title' => 'So wählen Sie ein sicheres Passwort aus', - 'forgot_password_response' => 'Vielen Dank. Falls ein Account mit dieser E-Mail-Adresse existiert, finden Sie im Posteingang weitere Anweisungen.', - 'secure_pw_history' => 'Keine Woche vergeht, dass Sie in den Nachrichten über eine Website lesen, die die Passwörter ihrer Benutzer verliert. Hacker und Diebe verwenden diese Passwörter, um zu versuchen, Ihre persönlichen Daten zu stehlen. Diese Informationen sind wertvoll.', - 'secure_pw_ff' => 'Verwenden Sie im gesamten Internet das gleiche Passwort? Wenn eine Website Ihr Passwort verliert, haben Hacker Zugriff auf alle Ihre Daten. Firefly III verlässt sich darauf, dass Sie ein sicheres und einzigartiges Passwort wählen, um Ihre Finanzdaten zu schützen.', - 'secure_pw_check_box' => 'Um Ihnen dabei zu helfen, kann Firefly III überprüfen, ob das von Ihnen gewünschte Passwort in der Vergangenheit gestohlen wurde. Wenn dies der Fall ist, rät Firefly III Ihnen, dieses Passwort NICHT zu verwenden.', - 'secure_pw_working_title' => 'Wie funktioniert es?', - 'secure_pw_working' => 'Wenn Sie das Kontrollkästchen aktivieren, wird Firefly III den SHA1-Hash der ersten 5 Zeichen Ihres Passworts an die Website von Troy Hunt senden, um zu sehen, ob es auf der Liste steht. Dies verhindert, dass Sie unsichere Passwörter verwenden, was in der aktuellen NIST-Sonderveröffentlichung zu diesem Thema empfohlen wird.', - 'secure_pw_should' => 'Soll ich die Box ankreuzen?', - 'secure_pw_long_password' => 'Ja. Damit vergewissern Sie sich immer, dass ihr Passwort sicher ist.', - 'command_line_token' => 'Kommandozeilen-Authentifizierungsschlüssel', - 'explain_command_line_token' => 'Sie benötigen dieses Token, um Kommandozeilenoptionen auszuführen, wie z. B. den Export von Daten. Ohne diese werden solche sensiblen Befehle nicht funktionieren. Teilen Sie Ihren Kommandozeilen-Authentifizierungsschlüssel nicht mit anderen. Niemand wird Sie um diesen Schlüssel bitten, nicht einmal ich. Wenn Sie befürchten, dass Sie diesen verloren haben, erneuern Sie den Schlüssel mit der Schaltfläche.', - 'regenerate_command_line_token' => 'Kommandozeilen-Authentifizierungsschlüssel erneut generieren', - 'token_regenerated' => 'Ein neuer Kommandozeilen-Authentifizierungsschlüssel wurde generiert', - 'change_your_email' => 'E-Mail Adresse ändern', - 'email_verification' => 'Eine E-Mail wird an Ihre alte UND neue E-Mail-Adresse gesendet. Aus Sicherheitsgründen können Sie sich erst anmelden, wenn Sie Ihre neue E-Mail-Adresse bestätigt haben. Wenn Sie sich nicht sicher sind, ob Ihre Firefly III-Installation E-Mails versenden kann, verwenden Sie diese Funktion bitte nicht. Wenn Sie Administrator sind, können Sie dies in der Verwaltung testen.', - 'email_changed_logout' => 'Sie müssen Ihre E-Mail-Adresse bestätigen, um sich anmelden zu können.', - 'login_with_new_email' => 'Sie können sich jetzt mit Ihrer neuen E-Mail-Adresse anmelden.', - 'login_with_old_email' => 'Sie können sich jetzt wieder mit Ihrer alten E-Mail-Adresse anmelden.', - 'login_provider_local_only' => 'Diese Aktion ist bei der Authentifizierung durch ":login_provider" nicht verfügbar.', - 'external_user_mgt_disabled' => 'Diese Aktion ist nicht verfügbar, wenn Firefly III nicht für die Benutzerverwaltung oder die Authentifizierungsbehandlung zuständig ist.', - 'external_auth_disabled' => 'Diese Aktion ist nicht verfügbar, wenn Firefly III nicht für die Bearbeitung der Authentifizierung zuständig ist.', - 'delete_local_info_only' => "Da Firefly III nicht für die Benutzerverwaltung oder die Authentifizierungsbehandlung zuständig ist, löscht diese Funktion nur lokale Firefly III-Informationen.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth-Clients', - 'profile_oauth_no_clients' => 'Sie haben noch keine OAuth-Clients erstellt.', - 'profile_oauth_clients_external_auth' => 'Wenn Sie einen externen Authentifizierungsanbieter wie Authelia verwenden, funktionieren OAuth Clients nicht. Sie können ausschließlich persönliche Zugriffstoken verwenden.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Client-ID', - 'profile_oauth_client_name' => 'Name', - 'profile_oauth_client_secret' => 'Geheimnis', - 'profile_oauth_create_new_client' => 'Neuen Client erstellen', - 'profile_oauth_create_client' => 'Client erstellen', - 'profile_oauth_edit_client' => 'Client bearbeiten', - 'profile_oauth_name_help' => 'Etwas das Ihre Nutzer erkennen und dem sie vertrauen.', - 'profile_oauth_redirect_url' => 'Weiterleitungs-URL', - 'profile_oauth_redirect_url_help' => 'Die Authorisierungs-Callback-URL Ihrer Anwendung.', - 'profile_authorized_apps' => 'Autorisierte Anwendungen', - 'profile_authorized_clients' => 'Autorisierte Clients', - 'profile_scopes' => 'Bereiche', - 'profile_revoke' => 'Widerrufen', - 'profile_oauth_client_secret_title' => 'Client Secret', - 'profile_oauth_client_secret_expl' => 'Hier ist Ihr neuer persönlicher Zugangsschlüssel. Dies ist das einzige Mal, dass er angezeigt wird, also verlieren Sie ihn nicht! Sie können diesen Token jetzt verwenden, um API-Anfragen zu stellen.', - 'profile_personal_access_tokens' => 'Persönliche Zugangs-Tokens', - 'profile_personal_access_token' => 'Persönlicher Zugangs-Token', - 'profile_oauth_confidential' => 'Vertraulich', - 'profile_oauth_confidential_help' => 'Der Client muss sich mit einem Secret authentifizieren. Vertrauliche Clients können die Anmeldedaten speichern, ohne diese unautorisierten Akteuren mitzuteilen. Öffentliche Anwendungen wie native Desktop- oder JavaScript-SPA-Anwendungen können Geheimnisse nicht sicher speichern.', - 'profile_personal_access_token_explanation' => 'Hier ist Ihr neuer persönlicher Zugangsschlüssel. Dies ist das einzige Mal, dass er angezeigt wird, also verlieren Sie ihn nicht! Sie können diesen Token jetzt verwenden, um API-Anfragen zu stellen.', - 'profile_no_personal_access_token' => 'Sie haben keine persönlichen Zugangsschlüssel erstellt.', - 'profile_create_new_token' => 'Neuen Schlüssel erstellen', - 'profile_create_token' => 'Schlüssel erstellen', - 'profile_create' => 'Erstellen', - 'profile_save_changes' => 'Änderungen speichern', - 'profile_whoops' => 'Huch!', - 'profile_something_wrong' => 'Ein Problem ist aufgetreten!', - 'profile_try_again' => 'Ein Problem ist aufgetreten. Bitte versuchen Sie es erneut.', - 'amounts' => 'Beträge', - 'multi_account_warning_unknown' => 'Abhängig von der Art der Buchung, die Sie anlegen, kann das Quell- und/oder Zielkonto nachfolgender Aufteilungen durch das überschrieben werden, was in der ersten Aufteilung der Buchung definiert wurde.', - 'multi_account_warning_withdrawal' => 'Bedenken Sie, dass das Quellkonto nachfolgender Aufteilungen von dem, was in der ersten Aufteilung der Abhebung definiert ist, außer Kraft gesetzt wird.', - 'multi_account_warning_deposit' => 'Bedenken Sie, dass das Zielkonto nachfolgender Aufteilungen von dem, was in der ersten Aufteilung der Einnahmen definiert ist, außer Kraft gesetzt wird.', - 'multi_account_warning_transfer' => 'Bedenken Sie, dass das Quell- und Zielkonto nachfolgender Aufteilungen durch das, was in der ersten Aufteilung der Übertragung definiert ist, außer Kraft gesetzt wird.', + 'purge_data_title' => 'Daten aus Firefly III vernichten', + 'purge_data_expl' => '„Endgültiges Löschen” bedeutet „Löschen, was bereits gelöscht wurde”. Unter normalen Umständen löscht Firefly III nichts dauerhaft. Es verbirgt es nur. Die Schaltfläche unten löscht alle diese zuvor "gelöschten" Datensätze DAUERHAFT.', + 'delete_stuff_header' => 'Daten löschen und vernichten', + 'purge_all_data' => 'Alle gelöschten Datensätze vernichten', + 'purge_data' => 'Daten vernichten', + 'purged_all_records' => 'Alle gelöschten Datensätze wurden vernichtet.', + 'delete_data_title' => 'Daten aus Firefly III löschen', + 'permanent_delete_stuff' => 'Sie können Dinge aus Firefly III löschen. Mit den Buttons unten werden Ihre Gegenstände entfernt und ausgeblendet. Es keine Möglichkeit dies rückgängig zu machen, aber die Elemente können in der Datenbank verbleiben, wo sie gegebenenfalls wiederhergestellt werden können.', + 'other_sessions_logged_out' => 'Alle Ihre anderen Sitzungen wurden abgemeldet.', + 'delete_unused_accounts' => 'Durch das Löschen ungenutzter Konten werden Ihre Listen für die automatische Vervollständigung bereinigt.', + 'delete_all_unused_accounts' => 'Unbenutzte Konten löschen', + 'deleted_all_unused_accounts' => 'Alle ungenutzten Konten wurden gelöscht', + 'delete_all_budgets' => 'ALLE Ihre Budgets löschen', + 'delete_all_categories' => 'Alle Ihre Kategorien löschen', + 'delete_all_tags' => 'Alle Ihre Stichwörter löschen', + 'delete_all_bills' => 'ALLE Ihre Rechnungen löschen', + 'delete_all_piggy_banks' => 'ALLE Ihre Sparschweine löschen', + 'delete_all_rules' => 'ALLE Ihre Regeln löschen', + 'delete_all_recurring' => 'ALLE Daueraufträge löschen', + 'delete_all_object_groups' => 'ALLE Objektgruppen löschen', + 'delete_all_accounts' => 'ALLE Konten löschen', + 'delete_all_asset_accounts' => 'ALLE Bestandskonten löschen', + 'delete_all_expense_accounts' => 'ALLE Ausgabekonten löschen', + 'delete_all_revenue_accounts' => 'ALLE Einnahmekonten löschen', + 'delete_all_liabilities' => 'ALLE Verbindlichkeiten löschen', + 'delete_all_transactions' => 'ALLE Buchungen löschen', + 'delete_all_withdrawals' => 'ALLE Ausgaben löschen', + 'delete_all_deposits' => 'ALLE Einnahmen löschen', + 'delete_all_transfers' => 'ALLE Umbuchungen löschen', + 'also_delete_transactions' => 'Beim Löschen von Konten werden auch ALLE damit verbundenen Ausgaben, Einnahmen und Überweisungen gelöscht!', + 'deleted_all_budgets' => 'Alle Budgets wurden gelöscht', + 'deleted_all_categories' => 'Alle Kategorien wurden gelöscht', + 'deleted_all_tags' => 'Alle Schlagwörter wurden gelöscht', + 'deleted_all_bills' => 'Alle Rechnungen wurden gelöscht', + 'deleted_all_piggy_banks' => 'Alle Sparschweine wurden gelöscht', + 'deleted_all_rules' => 'Alle Regeln und Regelgruppen wurden gelöscht', + 'deleted_all_object_groups' => 'Alle Gruppen wurden gelöscht', + 'deleted_all_accounts' => 'Alle Konten wurden gelöscht', + 'deleted_all_asset_accounts' => 'Alle Bestandskonten wurden gelöscht', + 'deleted_all_expense_accounts' => 'Alle Ausgabenkonten wurden gelöscht', + 'deleted_all_revenue_accounts' => 'Alle Einnahmenkonten wurden gelöscht', + 'deleted_all_liabilities' => 'Alle Verbindlichkeiten wurden gelöscht', + 'deleted_all_transactions' => 'Alle Buchungen wurden gelöscht', + 'deleted_all_withdrawals' => 'Alle Ausgaben wurden gelöscht', + 'deleted_all_deposits' => 'Alle Einnahmen wurden gelöscht', + 'deleted_all_transfers' => 'Alle Umbuchungen wurden gelöscht', + 'deleted_all_recurring' => 'Alle Daueraufträge wurden gelöscht', + 'change_your_password' => 'Passwort ändern', + 'delete_account' => 'Konto löschen', + 'current_password' => 'Aktuelles Passwort', + 'new_password' => 'Neues Passwort', + 'new_password_again' => 'Neues Passwort (wiederholen)', + 'delete_your_account' => 'Ihren Account löschen', + 'delete_your_account_help' => 'Das Löschen ihres Benutzerkontos wird ebenfalls alle Konten, Buchungen, etc., also alles was Sie in Firefly gespeichert haben, löschen. Alles geht verloren und kann nicht wiederhergestellt werden.', + 'delete_your_account_password' => 'Geben Sie Ihr Kennwort ein um fortzufahren.', + 'password' => 'Passwort', + 'are_you_sure' => 'Sind Sie sich sicher? Sie können diesen Schritt nicht rückgängig machen.', + 'delete_account_button' => 'LÖSCHEN Sie ihr Benutzerkonto', + 'invalid_current_password' => 'Aktuelles Passwort ist ungültig!', + 'password_changed' => 'Passwort geändert!', + 'should_change' => 'Ziel ist es, ihr Passwort zu ändern.', + 'invalid_password' => 'Ungültiges Passwort!', + 'what_is_pw_security' => 'Was ist "Passwortsicherheit überprüfen"?', + 'secure_pw_title' => 'So wählen Sie ein sicheres Passwort aus', + 'forgot_password_response' => 'Vielen Dank. Falls ein Account mit dieser E-Mail-Adresse existiert, finden Sie im Posteingang weitere Anweisungen.', + 'secure_pw_history' => 'Keine Woche vergeht, dass Sie in den Nachrichten über eine Website lesen, die die Passwörter ihrer Benutzer verliert. Hacker und Diebe verwenden diese Passwörter, um zu versuchen, Ihre persönlichen Daten zu stehlen. Diese Informationen sind wertvoll.', + 'secure_pw_ff' => 'Verwenden Sie im gesamten Internet das gleiche Passwort? Wenn eine Website Ihr Passwort verliert, haben Hacker Zugriff auf alle Ihre Daten. Firefly III verlässt sich darauf, dass Sie ein sicheres und einzigartiges Passwort wählen, um Ihre Finanzdaten zu schützen.', + 'secure_pw_check_box' => 'Um Ihnen dabei zu helfen, kann Firefly III überprüfen, ob das von Ihnen gewünschte Passwort in der Vergangenheit gestohlen wurde. Wenn dies der Fall ist, rät Firefly III Ihnen, dieses Passwort NICHT zu verwenden.', + 'secure_pw_working_title' => 'Wie funktioniert es?', + 'secure_pw_working' => 'Wenn Sie das Kontrollkästchen aktivieren, wird Firefly III den SHA1-Hash der ersten 5 Zeichen Ihres Passworts an die Website von Troy Hunt senden, um zu sehen, ob es auf der Liste steht. Dies verhindert, dass Sie unsichere Passwörter verwenden, was in der aktuellen NIST-Sonderveröffentlichung zu diesem Thema empfohlen wird.', + 'secure_pw_should' => 'Soll ich die Box ankreuzen?', + 'secure_pw_long_password' => 'Ja. Damit vergewissern Sie sich immer, dass ihr Passwort sicher ist.', + 'command_line_token' => 'Kommandozeilen-Authentifizierungsschlüssel', + 'explain_command_line_token' => 'Sie benötigen dieses Token, um Kommandozeilenoptionen auszuführen, wie z. B. den Export von Daten. Ohne diese werden solche sensiblen Befehle nicht funktionieren. Teilen Sie Ihren Kommandozeilen-Authentifizierungsschlüssel nicht mit anderen. Niemand wird Sie um diesen Schlüssel bitten, nicht einmal ich. Wenn Sie befürchten, dass Sie diesen verloren haben, erneuern Sie den Schlüssel mit der Schaltfläche.', + 'regenerate_command_line_token' => 'Kommandozeilen-Authentifizierungsschlüssel erneut generieren', + 'token_regenerated' => 'Ein neuer Kommandozeilen-Authentifizierungsschlüssel wurde generiert', + 'change_your_email' => 'E-Mail Adresse ändern', + 'email_verification' => 'Eine E-Mail wird an Ihre alte UND neue E-Mail-Adresse gesendet. Aus Sicherheitsgründen können Sie sich erst anmelden, wenn Sie Ihre neue E-Mail-Adresse bestätigt haben. Wenn Sie sich nicht sicher sind, ob Ihre Firefly III-Installation E-Mails versenden kann, verwenden Sie diese Funktion bitte nicht. Wenn Sie Administrator sind, können Sie dies in der Verwaltung testen.', + 'email_changed_logout' => 'Sie müssen Ihre E-Mail-Adresse bestätigen, um sich anmelden zu können.', + 'login_with_new_email' => 'Sie können sich jetzt mit Ihrer neuen E-Mail-Adresse anmelden.', + 'login_with_old_email' => 'Sie können sich jetzt wieder mit Ihrer alten E-Mail-Adresse anmelden.', + 'login_provider_local_only' => 'Diese Aktion ist bei der Authentifizierung durch ":login_provider" nicht verfügbar.', + 'external_user_mgt_disabled' => 'Diese Aktion ist nicht verfügbar, wenn Firefly III nicht für die Benutzerverwaltung oder die Authentifizierungsbehandlung zuständig ist.', + 'external_auth_disabled' => 'Diese Aktion ist nicht verfügbar, wenn Firefly III nicht für die Bearbeitung der Authentifizierung zuständig ist.', + 'delete_local_info_only' => 'Da Firefly III nicht für die Benutzerverwaltung oder die Authentifizierungsbehandlung zuständig ist, löscht diese Funktion nur lokale Firefly III-Informationen.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth-Clients', + 'profile_oauth_no_clients' => 'Sie haben noch keine OAuth-Clients erstellt.', + 'profile_oauth_clients_external_auth' => 'Wenn Sie einen externen Authentifizierungsanbieter wie Authelia verwenden, funktionieren OAuth Clients nicht. Sie können ausschließlich persönliche Zugriffstoken verwenden.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'Client-ID', + 'profile_oauth_client_name' => 'Name', + 'profile_oauth_client_secret' => 'Geheimnis', + 'profile_oauth_create_new_client' => 'Neuen Client erstellen', + 'profile_oauth_create_client' => 'Client erstellen', + 'profile_oauth_edit_client' => 'Client bearbeiten', + 'profile_oauth_name_help' => 'Etwas das Ihre Nutzer erkennen und dem sie vertrauen.', + 'profile_oauth_redirect_url' => 'Weiterleitungs-URL', + 'profile_oauth_redirect_url_help' => 'Die Authorisierungs-Callback-URL Ihrer Anwendung.', + 'profile_authorized_apps' => 'Autorisierte Anwendungen', + 'profile_authorized_clients' => 'Autorisierte Clients', + 'profile_scopes' => 'Bereiche', + 'profile_revoke' => 'Widerrufen', + 'profile_oauth_client_secret_title' => 'Client Secret', + 'profile_oauth_client_secret_expl' => 'Hier ist Ihr neuer persönlicher Zugangsschlüssel. Dies ist das einzige Mal, dass er angezeigt wird, also verlieren Sie ihn nicht! Sie können diesen Token jetzt verwenden, um API-Anfragen zu stellen.', + 'profile_personal_access_tokens' => 'Persönliche Zugangs-Tokens', + 'profile_personal_access_token' => 'Persönlicher Zugangs-Token', + 'profile_oauth_confidential' => 'Vertraulich', + 'profile_oauth_confidential_help' => 'Der Client muss sich mit einem Secret authentifizieren. Vertrauliche Clients können die Anmeldedaten speichern, ohne diese unautorisierten Akteuren mitzuteilen. Öffentliche Anwendungen wie native Desktop- oder JavaScript-SPA-Anwendungen können Geheimnisse nicht sicher speichern.', + 'profile_personal_access_token_explanation' => 'Hier ist Ihr neuer persönlicher Zugangsschlüssel. Dies ist das einzige Mal, dass er angezeigt wird, also verlieren Sie ihn nicht! Sie können diesen Token jetzt verwenden, um API-Anfragen zu stellen.', + 'profile_no_personal_access_token' => 'Sie haben keine persönlichen Zugangsschlüssel erstellt.', + 'profile_create_new_token' => 'Neuen Schlüssel erstellen', + 'profile_create_token' => 'Schlüssel erstellen', + 'profile_create' => 'Erstellen', + 'profile_save_changes' => 'Änderungen speichern', + 'profile_whoops' => 'Huch!', + 'profile_something_wrong' => 'Ein Problem ist aufgetreten!', + 'profile_try_again' => 'Ein Problem ist aufgetreten. Bitte versuchen Sie es erneut.', + 'amounts' => 'Beträge', + 'multi_account_warning_unknown' => 'Abhängig von der Art der Buchung, die Sie anlegen, kann das Quell- und/oder Zielkonto nachfolgender Aufteilungen durch das überschrieben werden, was in der ersten Aufteilung der Buchung definiert wurde.', + 'multi_account_warning_withdrawal' => 'Bedenken Sie, dass das Quellkonto nachfolgender Aufteilungen von dem, was in der ersten Aufteilung der Abhebung definiert ist, außer Kraft gesetzt wird.', + 'multi_account_warning_deposit' => 'Bedenken Sie, dass das Zielkonto nachfolgender Aufteilungen von dem, was in der ersten Aufteilung der Einnahmen definiert ist, außer Kraft gesetzt wird.', + 'multi_account_warning_transfer' => 'Bedenken Sie, dass das Quell- und Zielkonto nachfolgender Aufteilungen durch das, was in der ersten Aufteilung der Übertragung definiert ist, außer Kraft gesetzt wird.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Daten aus Firefly III exportieren', - 'export_data_menu' => 'Daten exportieren', - 'export_data_bc' => 'Daten aus Firefly III exportieren', - 'export_data_main_title' => 'Daten aus Firefly III exportieren', - 'export_data_expl' => 'Dieser Link ermöglicht es Ihnen, alle Transaktionen und deren Metadaten aus Firefly III zu exportieren. Weitere Informationen zur Vorgehensweise entnehmen Sie bitte der Hilfe (oben rechts das ❔-Symbol).', - 'export_data_all_transactions' => 'Alle Buchungen exportieren', - 'export_data_advanced_expl' => 'Wenn Sie eine erweiterte oder spezifische Art des Exports benötigen, lesen Sie die Hilfe zur Verwendung des Konsolenbefehls php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Daten aus Firefly III exportieren', + 'export_data_menu' => 'Daten exportieren', + 'export_data_bc' => 'Daten aus Firefly III exportieren', + 'export_data_main_title' => 'Daten aus Firefly III exportieren', + 'export_data_expl' => 'Dieser Link ermöglicht es Ihnen, alle Transaktionen und deren Metadaten aus Firefly III zu exportieren. Weitere Informationen zur Vorgehensweise entnehmen Sie bitte der Hilfe (oben rechts das ❔-Symbol).', + 'export_data_all_transactions' => 'Alle Buchungen exportieren', + 'export_data_advanced_expl' => 'Wenn Sie eine erweiterte oder spezifische Art des Exports benötigen, lesen Sie die Hilfe zur Verwendung des Konsolenbefehls php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Ein Anhang |:count Anhänge', - 'attachments' => 'Anhänge', - 'edit_attachment' => 'Anhang „:name” bearbeiten', - 'update_attachment' => 'Anhang aktualisieren', - 'delete_attachment' => 'Anhang „:name” löschen', - 'attachment_deleted' => 'Anhang „:name” gelöscht', - 'liabilities_deleted' => 'Verbindlichkeit „:name” gelöscht', - 'attachment_updated' => 'Anhang „:name” aktualisiert', - 'upload_max_file_size' => 'Maximale Dateigröße: :size', - 'list_all_attachments' => 'Liste aller Anhänge', + 'nr_of_attachments' => 'Ein Anhang |:count Anhänge', + 'attachments' => 'Anhänge', + 'edit_attachment' => 'Anhang „:name” bearbeiten', + 'update_attachment' => 'Anhang aktualisieren', + 'delete_attachment' => 'Anhang „:name” löschen', + 'attachment_deleted' => 'Anhang „:name” gelöscht', + 'liabilities_deleted' => 'Verbindlichkeit „:name” gelöscht', + 'attachment_updated' => 'Anhang „:name” aktualisiert', + 'upload_max_file_size' => 'Maximale Dateigröße: :size', + 'list_all_attachments' => 'Liste aller Anhänge', // transaction index - 'title_expenses' => 'Ausgaben', - 'title_withdrawal' => 'Ausgaben', - 'title_revenue' => 'Einnahmen / Einkommen', - 'title_deposit' => 'Einnahmen / Einkommen', - 'title_transfer' => 'Umbuchungen', - 'title_transfers' => 'Umbuchungen', - 'submission_options' => 'Übermittlungsoptionen', - 'apply_rules_checkbox' => 'Regeln anwenden', - 'fire_webhooks_checkbox' => 'Webhooks abfeuern', + 'is_reconciled_fields_dropped' => 'Da diese Buchung abgeglichen ist, können Sie weder die Konten noch den/die Betrag/Beträge aktualisieren.', + 'title_expenses' => 'Ausgaben', + 'title_withdrawal' => 'Ausgaben', + 'title_revenue' => 'Einnahmen / Einkommen', + 'title_deposit' => 'Einnahmen / Einkommen', + 'title_transfer' => 'Umbuchungen', + 'title_transfers' => 'Umbuchungen', + 'submission_options' => 'Übermittlungsoptionen', + 'apply_rules_checkbox' => 'Regeln anwenden', + 'fire_webhooks_checkbox' => 'Webhooks abfeuern', + 'select_source_account' => 'Bitte einen gültigen Quellkontonamen auswählen oder eingeben', + 'select_dest_account' => 'Bitte einen gültigen Zielkontonamen auswählen oder eingeben', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Diese Buchung ist bereits eine Ausgabe', - 'convert_is_already_type_Deposit' => 'Diese Buchung ist bereits eine Einnahme', - 'convert_is_already_type_Transfer' => 'Diese Buchung ist bereits eine Umbuchung', - 'convert_to_Withdrawal' => '":description" zu einer Ausgabe konvertieren', - 'convert_to_Deposit' => '":description" zu einer Einnahme konvertieren', - 'convert_to_Transfer' => '":description" zu einer Umbuchung konvertieren', - 'convert_options_WithdrawalDeposit' => 'Konvertieren Sie eine Ausgabe in eine Einnahme', - 'convert_options_WithdrawalTransfer' => 'Konvertieren Sie eine Ausgabe in eine Umbuchung', - 'convert_options_DepositTransfer' => 'Konvertieren Sie eine Einnahme in eine Umbuchung', - 'convert_options_DepositWithdrawal' => 'Konvertieren Sie eine Einnahme in eine Ausgabe', - 'convert_options_TransferWithdrawal' => 'Konvertieren Sie eine Umbuchung in eine Ausgabe', - 'convert_options_TransferDeposit' => 'Konvertieren Sie eine Umbuchung in eine Einnahme', - 'convert_Withdrawal_to_deposit' => 'Konvertieren Sie diese Ausgabe zu einer Einnahme', - 'convert_Withdrawal_to_transfer' => 'Konvertieren Sie diese Ausgabe in eine Umbuchung', - 'convert_Deposit_to_withdrawal' => 'Konvertieren Sie diese Einnahme zu einer Ausgabe', - 'convert_Deposit_to_transfer' => 'Konvertieren Sie diese Einnahme in eine Umbuchung', - 'convert_Transfer_to_deposit' => 'Konvertieren Sie diese Umbuchung in eine Einnahme', - 'convert_Transfer_to_withdrawal' => 'Konvertieren Sie diese Umbuchung in eine Ausgabe', - 'convert_please_set_revenue_source' => 'Bitte das Einnahmenkonto wählen, von welchem das Geld kommen wird.', - 'convert_please_set_asset_destination' => 'Bitte wählen Sie das Bestandskonto, auf das das Geld überwiesen werden soll.', - 'convert_please_set_expense_destination' => 'Bitte wählen Sie das Ausgabenkonto, an das das Geld gehen soll.', - 'convert_please_set_asset_source' => 'Bitte das Bestandskonto wählen, von dem das Geld kommt.', - 'convert_expl_w_d' => 'Bei der Umwandlung von einer Ausgabe in eine Einnahme wird das Geld auf das angezeigte Zielkonto eingezahlt, anstatt davon abgebucht zu werden.|Bei der Umwandlung von einer Ausgabe in eine Einnahme wird das Geld auf die angezeigten Zielkonten eingezahlt, anstatt von diesem abgebucht zu werden.', - 'convert_expl_w_t' => 'Bei der Umwandlung einer Ausgabe in eine Überweisung wird das Geld vom Quellkonto auf ein anderes Vermögens- oder Verbindlichkeitskonto überwiesen, anstatt auf das ursprüngliche Ausgabenkonto gebucht zu werden.|Bei der Umwandlung einer Ausgabe in eine Überweisung, wird das Geld von den Quellkonten auf andere Vermögens- oder Verbindlichkeitskonten überwiesen, anstatt auf die ursprünglichen Ausgabenkonten gebucht zu werden.', - 'convert_expl_d_w' => 'Wenn eine Einnahme in eine Ausgabe umgewandelt wird, wird das Geld von den angezeigten Quellkonten abgehoben, anstatt auf diese eingezahlt zu werden.|Wenn eine Einnahme in eine Ausgabe umgewandelt wird, wird das Geld von den angezeigten Quellkonten abgehoben, anstatt auf diese eingezahlt zu werden.', - 'convert_expl_d_t' => 'Wenn Sie eine Einnahme in einen Ümbuchung umwandeln, wird das Geld von einem Ihrer Aktiv- oder Passivkonten auf das aufgelistete Zielkonto eingezahlt.| Wenn Sie eine Einnahme in einen Umbuchung umwandeln, wird das Geld von einem Ihrer Aktiv- oder Passivkonten auf das aufgelistete Zielkonto eingezahlt.', - 'convert_expl_t_w' => 'Wenn Sie eine Überweisung in eine Abhebung umwandeln, wird das Geld auf dem hier angegebenen Zielkonto ausgegeben, anstatt überwiesen zu werden.| Wenn Sie eine Überweisung in eine Abhebung umwandeln, wird das Geld auf dem hier angegebenen Zielkonto ausgegeben, anstatt überwiesen zu werden.', - 'convert_expl_t_d' => 'Wenn Sie eine Umbuchung in eine Einnahme umwandeln, wird das Geld auf das hier angegebene Zielkonto eingezahlt und nicht auf dieses überwiesen.| Wenn Sie eine Umbuchung in eine Einnahme umwandeln, wird das Geld auf das hier angegebene Zielkonto eingezahlt und nicht auf dieses überwiesen.', - 'convert_select_sources' => 'Um die Umwandlung abzuschließen, wählen Sie bitte unten das neue Quellkonto aus.|Um die Umwandlung abzuschließen, wählen Sie bitte die neuen Quellkonten aus.', - 'convert_select_destinations' => 'Um die Umwandlung abzuschließen, wählen Sie bitte unten das neue Zielkonto aus.|Um die Umwandlung abzuschließen, wählen Sie bitte die neuen Zielkonten aus.', - 'converted_to_Withdrawal' => 'Die Buchung wurde in eine Ausgabe konvertiert', - 'converted_to_Deposit' => 'Die Buchung wurde in eine Einnahme konvertiert', - 'converted_to_Transfer' => 'Die Buchung wurde in eine Umbuchung konvertiert', - 'invalid_convert_selection' => 'Das von Ihnen ausgewählte Konto wird für diese Buchung bereits verwendet oder ist nicht vorhanden.', - 'source_or_dest_invalid' => 'Die korrekten Buchungsdetails konnten nicht gefunden werden. Eine Konvertierung ist nicht möglich.', - 'convert_to_withdrawal' => 'In eine Ausgabe umwandeln', - 'convert_to_deposit' => 'In eine Einnahme umwandeln', - 'convert_to_transfer' => 'In eine Umbuchung umwandeln', + 'convert_is_already_type_Withdrawal' => 'Diese Buchung ist bereits eine Ausgabe', + 'convert_is_already_type_Deposit' => 'Diese Buchung ist bereits eine Einnahme', + 'convert_is_already_type_Transfer' => 'Diese Buchung ist bereits eine Umbuchung', + 'convert_to_Withdrawal' => '":description" zu einer Ausgabe konvertieren', + 'convert_to_Deposit' => '":description" zu einer Einnahme konvertieren', + 'convert_to_Transfer' => '":description" zu einer Umbuchung konvertieren', + 'convert_options_WithdrawalDeposit' => 'Konvertieren Sie eine Ausgabe in eine Einnahme', + 'convert_options_WithdrawalTransfer' => 'Konvertieren Sie eine Ausgabe in eine Umbuchung', + 'convert_options_DepositTransfer' => 'Konvertieren Sie eine Einnahme in eine Umbuchung', + 'convert_options_DepositWithdrawal' => 'Konvertieren Sie eine Einnahme in eine Ausgabe', + 'convert_options_TransferWithdrawal' => 'Konvertieren Sie eine Umbuchung in eine Ausgabe', + 'convert_options_TransferDeposit' => 'Konvertieren Sie eine Umbuchung in eine Einnahme', + 'convert_Withdrawal_to_deposit' => 'Konvertieren Sie diese Ausgabe zu einer Einnahme', + 'convert_Withdrawal_to_transfer' => 'Konvertieren Sie diese Ausgabe in eine Umbuchung', + 'convert_Deposit_to_withdrawal' => 'Konvertieren Sie diese Einnahme zu einer Ausgabe', + 'convert_Deposit_to_transfer' => 'Konvertieren Sie diese Einnahme in eine Umbuchung', + 'convert_Transfer_to_deposit' => 'Konvertieren Sie diese Umbuchung in eine Einnahme', + 'convert_Transfer_to_withdrawal' => 'Konvertieren Sie diese Umbuchung in eine Ausgabe', + 'convert_please_set_revenue_source' => 'Bitte das Einnahmenkonto wählen, von welchem das Geld kommen wird.', + 'convert_please_set_asset_destination' => 'Bitte wählen Sie das Bestandskonto, auf das das Geld überwiesen werden soll.', + 'convert_please_set_expense_destination' => 'Bitte wählen Sie das Ausgabenkonto, an das das Geld gehen soll.', + 'convert_please_set_asset_source' => 'Bitte das Bestandskonto wählen, von dem das Geld kommt.', + 'convert_expl_w_d' => 'Bei der Umwandlung von einer Ausgabe in eine Einnahme wird das Geld auf das angezeigte Zielkonto eingezahlt, anstatt davon abgebucht zu werden.|Bei der Umwandlung von einer Ausgabe in eine Einnahme wird das Geld auf die angezeigten Zielkonten eingezahlt, anstatt von diesem abgebucht zu werden.', + 'convert_expl_w_t' => 'Bei der Umwandlung einer Ausgabe in eine Überweisung wird das Geld vom Quellkonto auf ein anderes Vermögens- oder Verbindlichkeitskonto überwiesen, anstatt auf das ursprüngliche Ausgabenkonto gebucht zu werden.|Bei der Umwandlung einer Ausgabe in eine Überweisung, wird das Geld von den Quellkonten auf andere Vermögens- oder Verbindlichkeitskonten überwiesen, anstatt auf die ursprünglichen Ausgabenkonten gebucht zu werden.', + 'convert_expl_d_w' => 'Wenn eine Einnahme in eine Ausgabe umgewandelt wird, wird das Geld von den angezeigten Quellkonten abgehoben, anstatt auf diese eingezahlt zu werden.|Wenn eine Einnahme in eine Ausgabe umgewandelt wird, wird das Geld von den angezeigten Quellkonten abgehoben, anstatt auf diese eingezahlt zu werden.', + 'convert_expl_d_t' => 'Wenn Sie eine Einnahme in einen Ümbuchung umwandeln, wird das Geld von einem Ihrer Aktiv- oder Passivkonten auf das aufgelistete Zielkonto eingezahlt.| Wenn Sie eine Einnahme in einen Umbuchung umwandeln, wird das Geld von einem Ihrer Aktiv- oder Passivkonten auf das aufgelistete Zielkonto eingezahlt.', + 'convert_expl_t_w' => 'Wenn Sie eine Überweisung in eine Abhebung umwandeln, wird das Geld auf dem hier angegebenen Zielkonto ausgegeben, anstatt überwiesen zu werden.| Wenn Sie eine Überweisung in eine Abhebung umwandeln, wird das Geld auf dem hier angegebenen Zielkonto ausgegeben, anstatt überwiesen zu werden.', + 'convert_expl_t_d' => 'Wenn Sie eine Umbuchung in eine Einnahme umwandeln, wird das Geld auf das hier angegebene Zielkonto eingezahlt und nicht auf dieses überwiesen.| Wenn Sie eine Umbuchung in eine Einnahme umwandeln, wird das Geld auf das hier angegebene Zielkonto eingezahlt und nicht auf dieses überwiesen.', + 'convert_select_sources' => 'Um die Umwandlung abzuschließen, wählen Sie bitte unten das neue Quellkonto aus.|Um die Umwandlung abzuschließen, wählen Sie bitte die neuen Quellkonten aus.', + 'convert_select_destinations' => 'Um die Umwandlung abzuschließen, wählen Sie bitte unten das neue Zielkonto aus.|Um die Umwandlung abzuschließen, wählen Sie bitte die neuen Zielkonten aus.', + 'converted_to_Withdrawal' => 'Die Buchung wurde in eine Ausgabe konvertiert', + 'converted_to_Deposit' => 'Die Buchung wurde in eine Einnahme konvertiert', + 'converted_to_Transfer' => 'Die Buchung wurde in eine Umbuchung konvertiert', + 'invalid_convert_selection' => 'Das von Ihnen ausgewählte Konto wird für diese Buchung bereits verwendet oder ist nicht vorhanden.', + 'source_or_dest_invalid' => 'Die korrekten Buchungsdetails konnten nicht gefunden werden. Eine Konvertierung ist nicht möglich.', + 'convert_to_withdrawal' => 'In eine Ausgabe umwandeln', + 'convert_to_deposit' => 'In eine Einnahme umwandeln', + 'convert_to_transfer' => 'In eine Umbuchung umwandeln', // create new stuff: - 'create_new_withdrawal' => 'Neue Ausgabe erstellen', - 'create_new_deposit' => 'Neue Einnahme erstellen', - 'create_new_transfer' => 'Neue Umbuchung erstellen', - 'create_new_asset' => 'Neues Bestandskonto erstellen', - 'create_new_liabilities' => 'Neue Verbindlichkeit anlegen', - 'create_new_expense' => 'Neues Ausgabenkonto erstellen', - 'create_new_revenue' => 'Neues Einnahmenkonto erstellen', - 'create_new_piggy_bank' => 'Ein neues Sparschwein erstellen', - 'create_new_bill' => 'Eine neue Rechnung erstellen', - 'create_new_subscription' => 'Neues Abonnement erstellen', - 'create_new_rule' => 'Neue Regel erstellen', + 'create_new_withdrawal' => 'Neue Ausgabe erstellen', + 'create_new_deposit' => 'Neue Einnahme erstellen', + 'create_new_transfer' => 'Neue Umbuchung erstellen', + 'create_new_asset' => 'Neues Bestandskonto erstellen', + 'create_new_liabilities' => 'Neue Verbindlichkeit anlegen', + 'create_new_expense' => 'Neues Ausgabenkonto erstellen', + 'create_new_revenue' => 'Neues Einnahmenkonto erstellen', + 'create_new_piggy_bank' => 'Ein neues Sparschwein erstellen', + 'create_new_bill' => 'Eine neue Rechnung erstellen', + 'create_new_subscription' => 'Neues Abonnement erstellen', + 'create_new_rule' => 'Neue Regel erstellen', // currencies: - 'create_currency' => 'Eine neue Währung erstellen', - 'store_currency' => 'Neue Währung speichern', - 'update_currency' => 'Währung aktualisieren', - 'new_default_currency' => '„:name” wird nun als Standardwährung verwendet.', - 'cannot_delete_currency' => '„:name” konnte nicht gelöscht werden, da diese noch verwendet wird.', - 'cannot_delete_fallback_currency' => ':name ist die Standardwährung des Systems und kann daher nicht gelöscht werden.', - 'cannot_disable_currency_journals' => '„:name” konnte nicht deaktiviert werden, da dieser noch von Buchungen verwendet wird.', - 'cannot_disable_currency_last_left' => '„:name” kann nicht deaktiviert werden, da es sich um die einzige aktivierte Währung handelt.', - 'cannot_disable_currency_account_meta' => ':name konnte nicht deaktiviert werden, da dieser noch in Bestandskonten verwendet wird.', - 'cannot_disable_currency_bills' => '„:name” konnte nicht deaktiviert werden, da dieser noch in Rechnungen verwendet wird.', - 'cannot_disable_currency_recurring' => '„:name” kann nicht deaktiviert werden, da dieser noch bei Daueraufträgen verwendet wird.', - 'cannot_disable_currency_available_budgets' => '„:name” kann nicht deaktiviert werden, da dieser noch in verfügbaren Kostenrahmen verwendet wird.', - 'cannot_disable_currency_budget_limits' => '„:name” konnte nicht deaktiviert werden, da dieser noch in Kostenrahmenbeschränkungen verwendet wird.', - 'cannot_disable_currency_current_default' => '„:name” konnte nicht deaktiviert werden, da es sich um die aktuelle Standardwährung handelt.', - 'cannot_disable_currency_system_fallback' => '„:name” konnte nicht deaktiviert werden, da es sich um die Standardwährung des Systems handelt.', - 'disable_EUR_side_effects' => 'Der Euro ist die Notfall-Rückfallwährung des Systems. Die Deaktivierung kann unbeabsichtigte Nebenwirkungen haben und den Verlust Ihrer Garantie zur Folge haben.', - 'deleted_currency' => 'Währung :name gelöscht', - 'created_currency' => 'Währung :name erstellt', - 'could_not_store_currency' => 'Die neue Währung konnte nicht gespeichert werden.', - 'updated_currency' => 'Währung :name aktualisiert', - 'ask_site_owner' => 'Bitte fragen sie :owner zum Hinzufügen, Entfernen oder Bearbeiten von Währungen.', - 'currencies_intro' => 'Firefly III unterstützt verschiedene Währungen, welche hier eingestellt und aktiviert werden können.', - 'make_default_currency' => 'Als Standard festlegen', - 'default_currency' => 'Standard', - 'currency_is_disabled' => 'Deaktiviert', - 'enable_currency' => 'Aktivieren', - 'disable_currency' => 'Deaktivieren', - 'currencies_default_disabled' => 'Die meisten dieser Währungen sind standardmäßig deaktiviert. Um sie zu verwenden, müssen Sie diese zuerst aktivieren.', - 'currency_is_now_enabled' => 'Währung „:name” wurde aktiviert', - 'currency_is_now_disabled' => 'Währung „:name” wurde deaktiviert', + 'create_currency' => 'Eine neue Währung erstellen', + 'store_currency' => 'Neue Währung speichern', + 'update_currency' => 'Währung aktualisieren', + 'new_default_currency' => '„:name” ist jetzt die Standardwährung.', + 'default_currency_failed' => '„:name” konnte nicht als Standardwährung festgelegt werden. Bitte prüfen Sie die Protokolle.', + 'cannot_delete_currency' => '„:name” konnte nicht gelöscht werden, da diese noch verwendet wird.', + 'cannot_delete_fallback_currency' => ':name ist die Standardwährung des Systems und kann daher nicht gelöscht werden.', + 'cannot_disable_currency_journals' => '„:name” konnte nicht deaktiviert werden, da dieser noch von Buchungen verwendet wird.', + 'cannot_disable_currency_last_left' => '„:name” kann nicht deaktiviert werden, da es sich um die einzige aktivierte Währung handelt.', + 'cannot_disable_currency_account_meta' => ':name konnte nicht deaktiviert werden, da dieser noch in Bestandskonten verwendet wird.', + 'cannot_disable_currency_bills' => '„:name” konnte nicht deaktiviert werden, da dieser noch in Rechnungen verwendet wird.', + 'cannot_disable_currency_recurring' => '„:name” kann nicht deaktiviert werden, da dieser noch bei Daueraufträgen verwendet wird.', + 'cannot_disable_currency_available_budgets' => '„:name” kann nicht deaktiviert werden, da dieser noch in verfügbaren Kostenrahmen verwendet wird.', + 'cannot_disable_currency_budget_limits' => '„:name” konnte nicht deaktiviert werden, da dieser noch in Kostenrahmenbeschränkungen verwendet wird.', + 'cannot_disable_currency_current_default' => '„:name” konnte nicht deaktiviert werden, da es sich um die aktuelle Standardwährung handelt.', + 'cannot_disable_currency_system_fallback' => '„:name” konnte nicht deaktiviert werden, da es sich um die Standardwährung des Systems handelt.', + 'disable_EUR_side_effects' => 'Der Euro ist die Notfall-Rückfallwährung des Systems. Die Deaktivierung kann unbeabsichtigte Nebenwirkungen haben und den Verlust Ihrer Garantie zur Folge haben.', + 'deleted_currency' => 'Währung :name gelöscht', + 'created_currency' => 'Währung :name erstellt', + 'could_not_store_currency' => 'Die neue Währung konnte nicht gespeichert werden.', + 'updated_currency' => 'Währung :name aktualisiert', + 'ask_site_owner' => 'Bitte fragen sie :owner zum Hinzufügen, Entfernen oder Bearbeiten von Währungen.', + 'currencies_intro' => 'Firefly III unterstützt verschiedene Währungen, welche hier eingestellt und aktiviert werden können.', + 'make_default_currency' => 'Als Standard festlegen', + 'default_currency' => 'Standard', + 'currency_is_disabled' => 'Deaktiviert', + 'enable_currency' => 'Aktivieren', + 'disable_currency' => 'Deaktivieren', + 'currencies_default_disabled' => 'Die meisten dieser Währungen sind standardmäßig deaktiviert. Um sie zu verwenden, müssen Sie diese zuerst aktivieren.', + 'currency_is_now_enabled' => 'Währung „:name” wurde aktiviert', + 'could_not_enable_currency' => 'Die Währung „:name” konnte nicht aktiviert werden. Bitte überprüfen Sie die Protokolle.', + 'currency_is_now_disabled' => 'Währung „:name” wurde deaktiviert', + 'could_not_disable_currency' => 'Die Währung „:name” konnte nicht deaktiviert werden. Vielleicht wird sie noch verwendet?', // forms: - 'mandatoryFields' => 'Pflichtfelder', - 'optionalFields' => 'Optionale Felder', - 'options' => 'Einstellungen', + 'mandatoryFields' => 'Pflichtfelder', + 'optionalFields' => 'Optionale Felder', + 'options' => 'Einstellungen', // budgets: - 'daily_budgets' => 'Tagesbudgets', - 'weekly_budgets' => 'Wochenbudgets', - 'monthly_budgets' => 'Monatsbudgets', - 'quarterly_budgets' => 'Quartalsbudgets', - 'half_year_budgets' => 'Halbjahresbudgets', - 'yearly_budgets' => 'Jahresbudgets', - 'other_budgets' => 'Zeitlich befristete Budgets', - 'budget_limit_not_in_range' => 'Dieser Betrag gilt von :start to :end:', - 'total_available_budget' => 'Verfügbares Gesamtbudget (zwischen :start und :end)', - 'total_available_budget_in_currency' => 'Verfügbares Gesamtbudget in :currency', - 'see_below' => 'Siehe unten', - 'create_new_budget' => 'Neues Budget erstellen', - 'store_new_budget' => 'Neues Budget speichern', - 'stored_new_budget' => 'Neues Budget „:name” gespeichert', - 'available_between' => 'Verfügbar zwischen :start und :end', - 'transactionsWithoutBudget' => 'Ausgaben ohne Budget', - 'transactions_no_budget' => 'Ausgaben ohne Budget zwischen :start und :end', - 'spent_between' => 'Bereits zwischen :start und :end ausgegeben', - 'set_available_amount' => 'Verfügbaren Betrag festlegen', - 'update_available_amount' => 'Verfügbaren Betrag aktualisieren', - 'ab_basic_modal_explain' => 'Verwenden Sie dieses Formular, um anzugeben, wie viel Sie erwarten, dass Sie im angegebenen Zeitraum vorsehen (insgesamt, in :currency) können.', - 'createBudget' => 'Neues Budget', - 'invalid_currency' => 'Ungültige Währung angegeben', - 'invalid_amount' => 'Bitte einen Betrag eingeben', - 'set_ab' => 'Der verfügbare Budgetbetrag wurde festgelegt', - 'updated_ab' => 'Der verfügbare Budgetbetrag wurde aktualisiert', - 'deleted_ab' => 'Der verfügbare Budgetbetrag wurde gelöscht', - 'deleted_bl' => 'Der eingeplante Betrag wurde entfernt', - 'alt_currency_ab_create' => 'Verfügbare Budget in einer anderen Währung angeben', - 'bl_create_btn' => 'Budget in einer anderen Währung angeben', - 'inactiveBudgets' => 'Inaktive Budgets', - 'without_budget_between' => 'Buchungen ohne Budget zwischen :start und :end', - 'delete_budget' => 'Budget „:name” löschen', - 'deleted_budget' => 'Budget „:name” gelöscht', - 'edit_budget' => 'Budget „:name” bearbeiten', - 'updated_budget' => 'Budget „:name” aktualisiert', - 'update_amount' => 'Betrag aktualisieren', - 'update_budget' => 'Budget aktualisieren', - 'update_budget_amount_range' => '(Erwarteten) Verfügbaren Betrag zwischen :start und :end aktualisieren', - 'set_budget_limit_title' => 'Eingeplanten Betrag für das Budget :budget zwischen :start und :end festlegen', - 'set_budget_limit' => 'Eingeplanten Betrag angeben', - 'budget_period_navigator' => 'Zeitraum-Navigator', - 'info_on_available_amount' => 'Wieviel ist verfügbar?', - 'available_amount_indication' => 'Verwenden Sie diese Angaben, um einen Anhaltspunkt darüber zu erhalten, wie hoch Ihr komplettes Budget sein könnte.', - 'suggested' => 'Vorgeschlagen', - 'average_between' => 'Durchschnitt zwischen :start und :end', - 'transferred_in' => 'Übertragen (eingehend)', - 'transferred_away' => 'Übertragen (ausgehend)', - 'auto_budget_none' => 'Kein Auto-Budget', - 'auto_budget_reset' => 'Festbetrag für jeden Zeitraum festlegen', - 'auto_budget_rollover' => 'Betrag pro Zeitraum hinzufügen', - 'auto_budget_adjusted' => 'Fügen Sie für jeden Zeitraum einen Betrag hinzu und korrigieren Sie die Mehrausgaben', - 'auto_budget_period_daily' => 'Täglich', - 'auto_budget_period_weekly' => 'Wöchentlich', - 'auto_budget_period_monthly' => 'Monatlich', - 'auto_budget_period_quarterly' => 'Quartalsweise', - 'auto_budget_period_half_year' => 'Halbjährlich', - 'auto_budget_period_yearly' => 'Jährlich', - 'auto_budget_help' => 'Mehr über diese Funktion können Sie in der Hilfe nachlesen. Klicken Sie oben rechts auf das ❓-Symbol.', - 'auto_budget_reset_icon' => 'Dieses Budget wird regelmäßig festgelegt', - 'auto_budget_rollover_icon' => 'Der Budgetbetrag wird regelmäßig erhöht', - 'auto_budget_adjusted_icon' => 'Der Budget-Betrag wird regelmäßig erhöht und wird bei Mehrausgaben korrigiert', - 'remove_budgeted_amount' => 'Budgetbetrag in :currency entfernen', + 'daily_budgets' => 'Tagesbudgets', + 'weekly_budgets' => 'Wochenbudgets', + 'monthly_budgets' => 'Monatsbudgets', + 'quarterly_budgets' => 'Quartalsbudgets', + 'half_year_budgets' => 'Halbjahresbudgets', + 'yearly_budgets' => 'Jahresbudgets', + 'other_budgets' => 'Zeitlich befristete Budgets', + 'budget_limit_not_in_range' => 'Dieser Betrag gilt von :start to :end:', + 'total_available_budget' => 'Verfügbares Gesamtbudget (zwischen :start und :end)', + 'total_available_budget_in_currency' => 'Verfügbares Gesamtbudget in :currency', + 'see_below' => 'Siehe unten', + 'create_new_budget' => 'Neues Budget erstellen', + 'store_new_budget' => 'Neues Budget speichern', + 'stored_new_budget' => 'Neues Budget „:name” gespeichert', + 'available_between' => 'Verfügbar zwischen :start und :end', + 'transactionsWithoutBudget' => 'Ausgaben ohne Budget', + 'transactions_no_budget' => 'Ausgaben ohne Budget zwischen :start und :end', + 'spent_between' => 'Bereits zwischen :start und :end ausgegeben', + 'spent_between_left' => ':spent zwischen :start und :end ausgegeben, :left verbleiben.', + 'set_available_amount' => 'Verfügbaren Betrag festlegen', + 'update_available_amount' => 'Verfügbaren Betrag aktualisieren', + 'ab_basic_modal_explain' => 'Verwenden Sie dieses Formular, um anzugeben, wie viel Sie erwarten, dass Sie im angegebenen Zeitraum vorsehen (insgesamt, in :currency) können.', + 'createBudget' => 'Neues Budget', + 'invalid_currency' => 'Ungültige Währung angegeben', + 'invalid_amount' => 'Bitte einen Betrag eingeben', + 'set_ab' => 'Der verfügbare Budgetbetrag wurde festgelegt', + 'updated_ab' => 'Der verfügbare Budgetbetrag wurde aktualisiert', + 'deleted_ab' => 'Der verfügbare Budgetbetrag wurde gelöscht', + 'deleted_bl' => 'Der eingeplante Betrag wurde entfernt', + 'alt_currency_ab_create' => 'Verfügbare Budget in einer anderen Währung angeben', + 'bl_create_btn' => 'Budget in einer anderen Währung angeben', + 'inactiveBudgets' => 'Inaktive Budgets', + 'without_budget_between' => 'Buchungen ohne Budget zwischen :start und :end', + 'delete_budget' => 'Budget „:name” löschen', + 'deleted_budget' => 'Budget „:name” gelöscht', + 'edit_budget' => 'Budget „:name” bearbeiten', + 'updated_budget' => 'Budget „:name” aktualisiert', + 'update_amount' => 'Betrag aktualisieren', + 'update_budget' => 'Budget aktualisieren', + 'update_budget_amount_range' => '(Erwarteten) Verfügbaren Betrag zwischen :start und :end aktualisieren', + 'set_budget_limit_title' => 'Eingeplanten Betrag für das Budget :budget zwischen :start und :end festlegen', + 'set_budget_limit' => 'Eingeplanten Betrag angeben', + 'budget_period_navigator' => 'Zeitraum-Navigator', + 'info_on_available_amount' => 'Wieviel ist verfügbar?', + 'available_amount_indication' => 'Verwenden Sie diese Angaben, um einen Anhaltspunkt darüber zu erhalten, wie hoch Ihr komplettes Budget sein könnte.', + 'suggested' => 'Vorgeschlagen', + 'average_between' => 'Durchschnitt zwischen :start und :end', + 'transferred_in' => 'Übertragen (eingehend)', + 'transferred_away' => 'Übertragen (ausgehend)', + 'auto_budget_none' => 'Kein Auto-Budget', + 'auto_budget_reset' => 'Festbetrag für jeden Zeitraum festlegen', + 'auto_budget_rollover' => 'Betrag pro Zeitraum hinzufügen', + 'auto_budget_adjusted' => 'Fügen Sie für jeden Zeitraum einen Betrag hinzu und korrigieren Sie die Mehrausgaben', + 'auto_budget_period_daily' => 'Täglich', + 'auto_budget_period_weekly' => 'Wöchentlich', + 'auto_budget_period_monthly' => 'Monatlich', + 'auto_budget_period_quarterly' => 'Quartalsweise', + 'auto_budget_period_half_year' => 'Halbjährlich', + 'auto_budget_period_yearly' => 'Jährlich', + 'auto_budget_help' => 'Mehr über diese Funktion können Sie in der Hilfe nachlesen. Klicken Sie oben rechts auf das ❓-Symbol.', + 'auto_budget_reset_icon' => 'Dieses Budget wird regelmäßig festgelegt', + 'auto_budget_rollover_icon' => 'Der Budgetbetrag wird regelmäßig erhöht', + 'auto_budget_adjusted_icon' => 'Der Budget-Betrag wird regelmäßig erhöht und wird bei Mehrausgaben korrigiert', + 'remove_budgeted_amount' => 'Budgetbetrag in :currency entfernen', // bills: - 'subscription' => 'Abonnement', - 'not_expected_period' => 'In diesem Zeitraum nicht erwartet', - 'subscriptions_in_group' => 'Abonnements in Gruppe "%{title}"', - 'subscr_expected_x_times' => 'Die Zahlung von %{amount} wird in diesem Zeitraum %{times}-mal erwartet', - 'not_or_not_yet' => '(Noch) nicht', - 'visit_bill' => 'Rechnung ":name" in Firefly III aufrufen', - 'match_between_amounts' => 'Rechnung passt zu Transaktionen zwischen :low und :high.', - 'running_again_loss' => 'Zuvor verknüpfte Buchungen mit dieser Rechnung können ihre Verbindung verlieren, wenn sie (nicht mehr) der/den Regel(n) entsprechen.', - 'bill_related_rules' => 'Regeln mit Verknüpfung zu dieser Rechnung', - 'repeats' => 'Wiederholungen', - 'bill_end_date_help' => 'Optionales Feld. Die Rechnung wird voraussichtlich an diesem Datum enden.', - 'bill_extension_date_help' => 'Optionales Feld. Die Rechnung muss an oder vor diesem Datum verlängert (oder storniert) werden.', - 'bill_end_index_line' => 'Diese Rechnung endet am :date', - 'bill_extension_index_line' => 'Diese Rechnung muss am :date verlängert oder storniert werden', - 'connected_journals' => 'Verknüpfte Buchungen', - 'auto_match_on' => 'Automatisch von Firefly III zugeordnet', - 'auto_match_off' => 'Nicht automatisch von Firefly III zugeordnet', - 'next_expected_match' => 'Nächste erwartete Übereinstimmung', - 'delete_bill' => 'Rechnung „:name” löschen', - 'deleted_bill' => 'Rechnung „:name” gelöscht', - 'edit_bill' => 'Rechnung „:name” bearbeiten', - 'more' => 'Weitere', - 'rescan_old' => 'Regeln für alle Buchungen erneut ausführen', - 'update_bill' => 'Rechnung aktualisieren', - 'updated_bill' => 'Rechnung „:name” aktualisiert', - 'store_new_bill' => 'Neue Rechnung speichern', - 'stored_new_bill' => 'Neue Rechnung „:name” gespeichert', - 'cannot_scan_inactive_bill' => 'Inaktive Rechnungen können nicht gescannt werden.', - 'rescanned_bill' => 'Alles neu eingelesen und :count Transaktion mit der Rechnung verknüpft.|Alles neu eingelesen und :count Transaktionen mit der Rechnung verknüpft.', - 'average_bill_amount_year' => 'Durchschnittliche Rechnungssumme (:year)', - 'average_bill_amount_overall' => 'Durchschnittliche Rechnungssumme (gesamt)', - 'bill_is_active' => 'Rechnung ist aktiv', - 'bill_expected_between' => 'Erwartet zwischen :start und :end', - 'bill_will_automatch' => 'Rechnung wird automatisch mit passenden Buchungen verknüpft', - 'skips_over' => 'überschreitet', - 'bill_store_error' => 'Beim Speichern Ihrer neuen Rechnung ist ein unerwarteter Fehler aufgetreten. Bitte überprüfen Sie die Protokolldateien.', - 'list_inactive_rule' => 'Inaktive Regeln', - 'bill_edit_rules' => 'Firefly III wird versuchen, auch die mit dieser Rechnung zusammenhängende Regel zu ändern. Wenn Sie diese Regel jedoch selbst bearbeitet haben, wird Firefly III nichts ändern.|Firefly III wird versuchen, die :count mit dieser Rechnung zusammenhängenden Regeln ebenfalls zu bearbeiten. Wenn Sie diese Regeln jedoch selbst bearbeitet haben, wird Firefly III nichts ändern.', - 'bill_expected_date' => 'Voraussichtlich :date', - 'bill_expected_date_js' => 'Erwartet {date}', - 'expected_amount' => '(Erwarteter) Betrag', - 'bill_paid_on' => 'Bezahlt am {date}', - 'bill_repeats_weekly' => 'Wiederholt sich wöchentlich', - 'bill_repeats_monthly' => 'Wiederholt sich monatlich', - 'bill_repeats_quarterly' => 'Wiederholt sich vierteljährlich', - 'bill_repeats_half-year' => 'Wiederholt sich halbjährlich', - 'bill_repeats_yearly' => 'Wiederholt sich jährlich', - 'bill_repeats_weekly_other' => 'Wiederholt sich jede zweite Woche', - 'bill_repeats_monthly_other' => 'Wiederholt sich jeden zweiten Monat', - 'bill_repeats_quarterly_other' => 'Wiederholt sich jedes zweite Vierteljahr', - 'bill_repeats_half-year_other' => 'Wiederholt sich jährlich', - 'bill_repeats_yearly_other' => 'Wiederholt sich jedes zweite Jahr', - 'bill_repeats_weekly_skip' => 'Wiederholt sich alle {skip} Wochen', - 'bill_repeats_monthly_skip' => 'Wiederholt sich alle {skip} Monate', - 'bill_repeats_quarterly_skip' => 'Wiederholt sich alle {skip} Vierteljahre', - 'bill_repeats_half-year_skip' => 'Wiederholt sich alle {skip} Halbjahre', - 'bill_repeats_yearly_skip' => 'Wiederholt sich alle {skip} Jahre', - 'subscriptions' => 'Abonnements', - 'go_to_subscriptions' => 'Zu Abonnements gehen', - 'forever' => 'Dauerhaft', - 'extension_date_is' => 'Zeitpunkt der Verlängerung ist {date}', + 'subscription' => 'Abonnement', + 'not_expected_period' => 'In diesem Zeitraum nicht erwartet', + 'subscriptions_in_group' => 'Abonnements in Gruppe "%{title}"', + 'subscr_expected_x_times' => 'Die Zahlung von %{amount} wird in diesem Zeitraum %{times}-mal erwartet', + 'not_or_not_yet' => '(Noch) nicht', + 'visit_bill' => 'Rechnung ":name" in Firefly III aufrufen', + 'match_between_amounts' => 'Rechnung passt zu Transaktionen zwischen :low und :high.', + 'running_again_loss' => 'Zuvor verknüpfte Buchungen mit dieser Rechnung können ihre Verbindung verlieren, wenn sie (nicht mehr) der/den Regel(n) entsprechen.', + 'bill_related_rules' => 'Regeln mit Verknüpfung zu dieser Rechnung', + 'repeats' => 'Wiederholungen', + 'bill_end_date_help' => 'Optionales Feld. Die Rechnung wird voraussichtlich an diesem Datum enden.', + 'bill_extension_date_help' => 'Optionales Feld. Die Rechnung muss an oder vor diesem Datum verlängert (oder storniert) werden.', + 'bill_end_index_line' => 'Diese Rechnung endet am :date', + 'bill_extension_index_line' => 'Diese Rechnung muss am :date verlängert oder storniert werden', + 'connected_journals' => 'Verknüpfte Buchungen', + 'auto_match_on' => 'Automatisch von Firefly III zugeordnet', + 'auto_match_off' => 'Nicht automatisch von Firefly III zugeordnet', + 'next_expected_match' => 'Nächste erwartete Übereinstimmung', + 'delete_bill' => 'Rechnung „:name” löschen', + 'deleted_bill' => 'Rechnung „:name” gelöscht', + 'edit_bill' => 'Rechnung „:name” bearbeiten', + 'more' => 'Weitere', + 'rescan_old' => 'Regeln für alle Buchungen erneut ausführen', + 'update_bill' => 'Rechnung aktualisieren', + 'updated_bill' => 'Rechnung „:name” aktualisiert', + 'store_new_bill' => 'Neue Rechnung speichern', + 'stored_new_bill' => 'Neue Rechnung „:name” gespeichert', + 'cannot_scan_inactive_bill' => 'Inaktive Rechnungen können nicht gescannt werden.', + 'rescanned_bill' => 'Alles neu eingelesen und :count Transaktion mit der Rechnung verknüpft.|Alles neu eingelesen und :count Transaktionen mit der Rechnung verknüpft.', + 'average_bill_amount_year' => 'Durchschnittliche Rechnungssumme (:year)', + 'average_bill_amount_overall' => 'Durchschnittliche Rechnungssumme (gesamt)', + 'bill_is_active' => 'Rechnung ist aktiv', + 'bill_expected_between' => 'Erwartet zwischen :start und :end', + 'bill_will_automatch' => 'Rechnung wird automatisch mit passenden Buchungen verknüpft', + 'skips_over' => 'überschreitet', + 'bill_store_error' => 'Beim Speichern Ihrer neuen Rechnung ist ein unerwarteter Fehler aufgetreten. Bitte überprüfen Sie die Protokolldateien.', + 'list_inactive_rule' => 'Inaktive Regeln', + 'bill_edit_rules' => 'Firefly III wird versuchen, auch die mit dieser Rechnung zusammenhängende Regel zu ändern. Wenn Sie diese Regel jedoch selbst bearbeitet haben, wird Firefly III nichts ändern.|Firefly III wird versuchen, die :count mit dieser Rechnung zusammenhängenden Regeln ebenfalls zu bearbeiten. Wenn Sie diese Regeln jedoch selbst bearbeitet haben, wird Firefly III nichts ändern.', + 'bill_expected_date' => 'Voraussichtlich :date', + 'bill_expected_date_js' => 'Erwartet {date}', + 'expected_amount' => '(Erwarteter) Betrag', + 'bill_paid_on' => 'Bezahlt am {date}', + 'bill_repeats_weekly' => 'Wiederholt sich wöchentlich', + 'bill_repeats_monthly' => 'Wiederholt sich monatlich', + 'bill_repeats_quarterly' => 'Wiederholt sich vierteljährlich', + 'bill_repeats_half-year' => 'Wiederholt sich halbjährlich', + 'bill_repeats_yearly' => 'Wiederholt sich jährlich', + 'bill_repeats_weekly_other' => 'Wiederholt sich jede zweite Woche', + 'bill_repeats_monthly_other' => 'Wiederholt sich jeden zweiten Monat', + 'bill_repeats_quarterly_other' => 'Wiederholt sich jedes zweite Vierteljahr', + 'bill_repeats_half-year_other' => 'Wiederholt sich jährlich', + 'bill_repeats_yearly_other' => 'Wiederholt sich jedes zweite Jahr', + 'bill_repeats_weekly_skip' => 'Wiederholt sich alle {skip} Wochen', + 'bill_repeats_monthly_skip' => 'Wiederholt sich alle {skip} Monate', + 'bill_repeats_quarterly_skip' => 'Wiederholt sich alle {skip} Vierteljahre', + 'bill_repeats_half-year_skip' => 'Wiederholt sich alle {skip} Halbjahre', + 'bill_repeats_yearly_skip' => 'Wiederholt sich alle {skip} Jahre', + 'subscriptions' => 'Abonnements', + 'go_to_subscriptions' => 'Zu Abonnements gehen', + 'forever' => 'Dauerhaft', + 'extension_date_is' => 'Zeitpunkt der Verlängerung ist {date}', // accounts: - 'i_am_owed_amount' => 'Mir wird Betrag geschuldet', - 'i_owe_amount' => 'Ich schulde Betrag', - 'inactive_account_link' => 'Sie haben :count inaktives (archiviertes) Konto, das Sie auf dieser separaten Seite sehen können.|Sie haben :count inaktive (archivierte) Konten, die Sie auf dieser separaten Seite anzeigen können.', - 'all_accounts_inactive' => 'Dies sind Ihre inaktiven Konten.', - 'active_account_link' => 'Diese Verknüpfung führt zurück zu Ihren aktiven Konten.', - 'account_missing_transaction' => 'Konto #:id („:name”) kann nicht direkt angezeigt werden, da Firefly III Weiterleitungsinformationen fehlen.', - 'cc_monthly_payment_date_help' => 'Wählen Sie ein beliebiges Jahr und einen beliebigen Monat, da diese Angaben ohnehin ignoriert werden. Nur der Tag des Monats ist relevant.', - 'details_for_asset' => 'Details zum Bestandskonto „:name”', - 'details_for_expense' => 'Details zum Ausgabenkonto „:name”', - 'details_for_revenue' => 'Details zum Einnahmenkonto „:name”', - 'details_for_cash' => 'Details zur Geldbörse „:name”', - 'store_new_asset_account' => 'Neues Bestandskonto speichern', - 'store_new_expense_account' => 'Neues Ausgabenkonto speichern', - 'store_new_revenue_account' => 'Neues Einnahmenkonto speichern', - 'edit_asset_account' => 'Bestandskonto „:name” bearbeiten', - 'edit_expense_account' => 'Ausgabenkonto „:name” bearbeiten', - 'edit_revenue_account' => 'Einnahmenkonto „:name” bearbeiten', - 'delete_asset_account' => 'Bestandskonto „:name” löschen', - 'delete_expense_account' => 'Ausgabenkonto „:name” löschen', - 'delete_revenue_account' => 'Einnahmenkonto „:name” löschen', - 'delete_liabilities_account' => 'Verbindlichkeit „:name” löschen', - 'asset_deleted' => 'Bestandskonto „:name” erfolgreich gelöscht', - 'account_deleted' => 'Konto „:name” erfolgreich gelöscht', - 'expense_deleted' => 'Ausgabenkonto „:name” erfolgreich gelöscht', - 'revenue_deleted' => 'Einnahmenkonto „:name” erfolgreich gelöscht', - 'update_asset_account' => 'Bestandskonto aktualisieren', - 'update_undefined_account' => 'Konto aktualisieren', - 'update_liabilities_account' => 'Verbindlichkeit aktualisieren', - 'update_expense_account' => 'Ausgabenkonto aktualisieren', - 'update_revenue_account' => 'Einnahmenkonto aktualisieren', - 'make_new_asset_account' => 'Neues Bestandskonto anlegen', - 'make_new_expense_account' => 'Neues Ausgabenkonto anlegen', - 'make_new_revenue_account' => 'Neues Einnahmenkonto anlegen', - 'make_new_liabilities_account' => 'Neue Verbindlichkeit anlegen', - 'asset_accounts' => 'Bestandskonten', - 'undefined_accounts' => 'Konten', - 'asset_accounts_inactive' => 'Bestandskonten (inaktiv)', - 'expense_account' => 'Ausgabenkonto', - 'expense_accounts' => 'Ausgabekonten', - 'expense_accounts_inactive' => 'Ausgabekonten (inaktiv)', - 'revenue_account' => 'Einnahmekonto', - 'revenue_accounts' => 'Einnahmekonten', - 'revenue_accounts_inactive' => 'Einnahmekonten (inaktiv)', - 'cash_accounts' => 'Geldbörsen', - 'Cash account' => 'Geldbörse', - 'liabilities_accounts' => 'Verbindlichkeiten', - 'liabilities_accounts_inactive' => 'Verbindlichkeiten (inaktiv)', - 'reconcile_account' => 'Konto „:account” abgleichen', - 'overview_of_reconcile_modal' => 'Überblick über den Kontenabgleich', - 'delete_reconciliation' => 'Kontenabgleich löschen', - 'update_reconciliation' => 'Kontenabgleich aktualisieren', - 'amount_cannot_be_zero' => 'Der Betrag darf nicht null sein', - 'end_of_reconcile_period' => 'Ende des Abgleichzeitraums: :period', - 'start_of_reconcile_period' => 'Beginn des Abgleichzeitraums: :period', - 'start_balance' => 'Startguthaben', - 'end_balance' => 'Endguthaben', - 'update_balance_dates_instruction' => 'Ordnen Sie die oben genannten Beträge und Daten Ihrem Kontoauszug zu und klicken Sie auf „Jetzt ausgleichen”', - 'select_transactions_instruction' => 'Wählen Sie die Buchungen aus, die auf Ihrem Kontoauszug angezeigt werden.', - 'select_range_and_balance' => 'Überprüfen Sie zunächst den Datumsbereich und das Guthaben. Anschließend drücken Sie auf „Jetzt abgleichen”', - 'date_change_instruction' => 'Wenn Sie den Datumsbereich jetzt ändern, geht der gesamte Verlauf verloren.', - 'update_selection' => 'Auswahl aktualisieren', - 'store_reconcile' => 'Kontenabgleich speichern', - 'reconciliation_transaction' => 'Ausgleichsbuchung', - 'Reconciliation' => 'Kontenabgleich', - 'reconciliation' => 'Kontenabgleich', - 'reconcile_options' => 'Kontenabgleich Optionen', - 'reconcile_range' => 'Kontenabgleich-Bereich', - 'start_reconcile' => 'Jetzt abgleichen', - 'cash_account_type' => 'Barzahlung', - 'cash' => 'Bar', - 'cant_find_redirect_account' => 'Firefly III hat vergeblich versucht, Sie umzuleiten. Zum Index zurückkehren.', - 'account_type' => 'Kontotyp', - 'save_transactions_by_moving' => 'Speichern Sie diese Transaktion, indem Sie sie auf ein anderes Konto verschieben:|Speichern Sie diese Transaktionen, indem Sie sie auf ein anderes Konto verschieben:', - 'save_transactions_by_moving_js' => 'Keine Buchungen|Speichern Sie diese Buchung, indem Sie sie auf ein anderes Konto verschieben. |Speichern Sie diese Buchungen, indem Sie sie auf ein anderes Konto verschieben.', - 'stored_new_account' => 'Neues Konto „:name” gespeichert!', - 'stored_new_account_js' => 'Neues Konto "„{name}”" gespeichert!', - 'updated_account' => 'Konto „:name” aktualisiert', - 'updated_account_js' => 'Konto "{title}" aktualisiert.', - 'credit_card_options' => 'Kreditkartenoptionen', - 'no_transactions_account' => 'Es liegen (in diesem Zeitraum) keine Buchungen für das Bestandskonto „:name” vor.', - 'no_transactions_period' => 'Keine Buchungen (in diesem Zeitraum) vorhanden.', - 'no_data_for_chart' => 'Es gibt derzeit (noch) nicht genügend Informationen, um dieses Diagramm zu generieren.', - 'select_at_least_one_account' => 'Bitte mindestens ein Bestandskonto auswählen', - 'select_at_least_one_category' => 'Bitte mindestens eine Kategorie auswählen', - 'select_at_least_one_budget' => 'Bitte mindestens ein Budget auswählen', - 'select_at_least_one_tag' => 'Bitte mindestens eine Schlagwort auswählen', - 'select_at_least_one_expense' => 'Bitte wählen Sie mindestens eine Kombination aus Ausgabe- und Einnahmekonten aus. Wenn Sie keine besitzen (die Liste ist leer), ist dieser Bericht nicht verfügbar.', - 'account_default_currency' => 'Dies ist die Standardwährung für dieses Konto.', - 'reconcile_has_more' => 'Ihr Firefly III-Konto verfügt über mehr Geld, als Ihre Bank behauptet. Es gibt mehrere Möglichkeiten. Bitte wählen Sie aus, was Sie tun möchten. Drücken Sie anschließend auf „Abgleich bestätigen”.', - 'reconcile_has_less' => 'Ihr Firefly III-Konto verfügt über weniger Geld, als Ihre Bank behauptet. Es gibt mehrere Möglichkeiten. Bitte wählen Sie aus, was Sie tun möchten. Drücken Sie dann auf „Abgleich bestätigen”.', - 'reconcile_is_equal' => 'Ihr Firefly III-Konto und Ihre Kontoauszüge stimmen überein. Es gibt nichts zu tun. Bitte drücken Sie auf „Abgleich bestätigen”, um Ihre Eingaben zu bestätigen.', - 'create_pos_reconcile_transaction' => 'Ausgewählte Umsätze bereinigen und einen Korrekturbetrag in Höhe von :amount auf dieses Bestandskonto überweisen.', - 'create_neg_reconcile_transaction' => 'Ausgewählte Umsätze bereinigen und einen Korrekturbetrag in Höhe von :amount von diesem Anlagenkonto zurücküberweisen.', - 'reconcile_do_nothing' => 'Ausgewählte Umsätze bereinigen, aber nicht korrigieren.', - 'reconcile_go_back' => 'Sie können dies jederzeit später bearbeiten oder löschen.', - 'must_be_asset_account' => 'Sie können nur Bestandskonten abgleichen', - 'reconciliation_stored' => 'Kontenabgleich gespeichert', - 'reconciliation_error' => 'Aufgrund eines Fehlers wurden die Buchungen als „Ausgeglichen” gekennzeichnet, aber die Korrektur wurde nicht gespeichert: :error.', - 'reconciliation_transaction_title' => 'Ausgleich (:from zu :to)', - 'sum_of_reconciliation' => 'Summe der Überleitungsrechnung', - 'reconcile_this_account' => 'Dieses Konto abgleichen', - 'reconcile' => 'Abgleichen', - 'show' => 'Anzeigen', - 'confirm_reconciliation' => 'Kontenabgleich bestätigen', - 'submitted_start_balance' => 'Übermitteltes Startguthaben', - 'selected_transactions' => 'Ausgewählte Umsätze (:count)', - 'already_cleared_transactions' => 'Bereits ausgeglichene Umsätze (:count)', - 'submitted_end_balance' => 'Übermittelter Abschlussguthaben', - 'initial_balance_description' => 'Anfangsguthaben für „:account”', - 'liability_credit_description' => 'Verbindlichkeitsguthaben für ":account"', - 'interest_calc_' => 'Unbekannt', - 'interest_calc_daily' => 'Täglich', - 'interest_calc_monthly' => 'Monatlich', - 'interest_calc_yearly' => 'Jährlich', - 'interest_calc_weekly' => 'Pro Woche', - 'interest_calc_half-year' => 'Halbjährlich', - 'interest_calc_quarterly' => 'Vierteljährlich', - 'initial_balance_account' => 'Anfangsguthaben von „:account”', - 'list_options' => 'Listenoptionen', + 'i_am_owed_amount' => 'Mir wird Betrag geschuldet', + 'i_owe_amount' => 'Ich schulde Betrag', + 'inactive_account_link' => 'Sie haben :count inaktives (archiviertes) Konto, das Sie auf dieser separaten Seite sehen können.|Sie haben :count inaktive (archivierte) Konten, die Sie auf dieser separaten Seite anzeigen können.', + 'all_accounts_inactive' => 'Dies sind Ihre inaktiven Konten.', + 'active_account_link' => 'Diese Verknüpfung führt zurück zu Ihren aktiven Konten.', + 'account_missing_transaction' => 'Konto #:id („:name”) kann nicht direkt angezeigt werden, da Firefly III Weiterleitungsinformationen fehlen.', + 'cc_monthly_payment_date_help' => 'Wählen Sie ein beliebiges Jahr und einen beliebigen Monat, da diese Angaben ohnehin ignoriert werden. Nur der Tag des Monats ist relevant.', + 'details_for_asset' => 'Details zum Bestandskonto „:name”', + 'details_for_expense' => 'Details zum Ausgabenkonto „:name”', + 'details_for_revenue' => 'Details zum Einnahmenkonto „:name”', + 'details_for_cash' => 'Details zur Geldbörse „:name”', + 'store_new_asset_account' => 'Neues Bestandskonto speichern', + 'store_new_expense_account' => 'Neues Ausgabenkonto speichern', + 'store_new_revenue_account' => 'Neues Einnahmenkonto speichern', + 'edit_asset_account' => 'Bestandskonto „:name” bearbeiten', + 'edit_expense_account' => 'Ausgabenkonto „:name” bearbeiten', + 'edit_revenue_account' => 'Einnahmenkonto „:name” bearbeiten', + 'delete_asset_account' => 'Bestandskonto „:name” löschen', + 'delete_expense_account' => 'Ausgabenkonto „:name” löschen', + 'delete_revenue_account' => 'Einnahmenkonto „:name” löschen', + 'delete_liabilities_account' => 'Verbindlichkeit „:name” löschen', + 'asset_deleted' => 'Bestandskonto „:name” erfolgreich gelöscht', + 'account_deleted' => 'Konto „:name” erfolgreich gelöscht', + 'expense_deleted' => 'Ausgabenkonto „:name” erfolgreich gelöscht', + 'revenue_deleted' => 'Einnahmenkonto „:name” erfolgreich gelöscht', + 'update_asset_account' => 'Bestandskonto aktualisieren', + 'update_undefined_account' => 'Konto aktualisieren', + 'update_liabilities_account' => 'Verbindlichkeit aktualisieren', + 'update_expense_account' => 'Ausgabenkonto aktualisieren', + 'update_revenue_account' => 'Einnahmenkonto aktualisieren', + 'make_new_asset_account' => 'Neues Bestandskonto anlegen', + 'make_new_expense_account' => 'Neues Ausgabenkonto anlegen', + 'make_new_revenue_account' => 'Neues Einnahmenkonto anlegen', + 'make_new_liabilities_account' => 'Neue Verbindlichkeit anlegen', + 'asset_accounts' => 'Bestandskonten', + 'undefined_accounts' => 'Konten', + 'asset_accounts_inactive' => 'Bestandskonten (inaktiv)', + 'expense_account' => 'Ausgabenkonto', + 'expense_accounts' => 'Ausgabekonten', + 'expense_accounts_inactive' => 'Ausgabekonten (inaktiv)', + 'revenue_account' => 'Einnahmekonto', + 'revenue_accounts' => 'Einnahmekonten', + 'revenue_accounts_inactive' => 'Einnahmekonten (inaktiv)', + 'cash_accounts' => 'Geldbörsen', + 'Cash account' => 'Geldbörse', + 'liabilities_accounts' => 'Verbindlichkeiten', + 'liabilities_accounts_inactive' => 'Verbindlichkeiten (inaktiv)', + 'reconcile_account' => 'Konto „:account” abgleichen', + 'overview_of_reconcile_modal' => 'Überblick über den Kontenabgleich', + 'delete_reconciliation' => 'Kontenabgleich löschen', + 'update_reconciliation' => 'Kontenabgleich aktualisieren', + 'amount_cannot_be_zero' => 'Der Betrag darf nicht null sein', + 'end_of_reconcile_period' => 'Ende des Abgleichzeitraums: :period', + 'start_of_reconcile_period' => 'Beginn des Abgleichzeitraums: :period', + 'start_balance' => 'Startguthaben', + 'end_balance' => 'Endguthaben', + 'update_balance_dates_instruction' => 'Ordnen Sie die oben genannten Beträge und Daten Ihrem Kontoauszug zu und klicken Sie auf „Jetzt ausgleichen”', + 'select_transactions_instruction' => 'Wählen Sie die Buchungen aus, die auf Ihrem Kontoauszug angezeigt werden.', + 'select_range_and_balance' => 'Überprüfen Sie zunächst den Datumsbereich und das Guthaben. Anschließend drücken Sie auf „Jetzt abgleichen”', + 'date_change_instruction' => 'Wenn Sie den Datumsbereich jetzt ändern, geht der gesamte Verlauf verloren.', + 'update_selection' => 'Auswahl aktualisieren', + 'store_reconcile' => 'Kontenabgleich speichern', + 'reconciliation_transaction' => 'Ausgleichsbuchung', + 'Reconciliation' => 'Kontenabgleich', + 'reconciliation' => 'Kontenabgleich', + 'reconcile_options' => 'Kontenabgleich Optionen', + 'reconcile_range' => 'Kontenabgleich-Bereich', + 'start_reconcile' => 'Jetzt abgleichen', + 'cash_account_type' => 'Barzahlung', + 'cash' => 'Bar', + 'cant_find_redirect_account' => 'Firefly III hat vergeblich versucht, Sie umzuleiten. Zum Index zurückkehren.', + 'account_type' => 'Kontotyp', + 'save_transactions_by_moving' => 'Speichern Sie diese Transaktion, indem Sie sie auf ein anderes Konto verschieben:|Speichern Sie diese Transaktionen, indem Sie sie auf ein anderes Konto verschieben:', + 'save_transactions_by_moving_js' => 'Keine Buchungen|Speichern Sie diese Buchung, indem Sie sie auf ein anderes Konto verschieben. |Speichern Sie diese Buchungen, indem Sie sie auf ein anderes Konto verschieben.', + 'stored_new_account' => 'Neues Konto „:name” gespeichert!', + 'stored_new_account_js' => 'Neues Konto "„{name}”" gespeichert!', + 'updated_account' => 'Konto „:name” aktualisiert', + 'updated_account_js' => 'Konto "{title}" aktualisiert.', + 'credit_card_options' => 'Kreditkartenoptionen', + 'no_transactions_account' => 'Es liegen (in diesem Zeitraum) keine Buchungen für das Bestandskonto „:name” vor.', + 'no_transactions_period' => 'Keine Buchungen (in diesem Zeitraum) vorhanden.', + 'no_data_for_chart' => 'Es gibt derzeit (noch) nicht genügend Informationen, um dieses Diagramm zu generieren.', + 'select_at_least_one_account' => 'Bitte mindestens ein Bestandskonto auswählen', + 'select_at_least_one_category' => 'Bitte mindestens eine Kategorie auswählen', + 'select_at_least_one_budget' => 'Bitte mindestens ein Budget auswählen', + 'select_at_least_one_tag' => 'Bitte mindestens eine Schlagwort auswählen', + 'select_at_least_one_expense' => 'Bitte wählen Sie mindestens eine Kombination aus Ausgabe- und Einnahmekonten aus. Wenn Sie keine besitzen (die Liste ist leer), ist dieser Bericht nicht verfügbar.', + 'account_default_currency' => 'Dies ist die Standardwährung für dieses Konto.', + 'reconcile_has_more' => 'Ihr Firefly III-Konto verfügt über mehr Geld, als Ihre Bank behauptet. Es gibt mehrere Möglichkeiten. Bitte wählen Sie aus, was Sie tun möchten. Drücken Sie anschließend auf „Abgleich bestätigen”.', + 'reconcile_has_less' => 'Ihr Firefly III-Konto verfügt über weniger Geld, als Ihre Bank behauptet. Es gibt mehrere Möglichkeiten. Bitte wählen Sie aus, was Sie tun möchten. Drücken Sie dann auf „Abgleich bestätigen”.', + 'reconcile_is_equal' => 'Ihr Firefly III-Konto und Ihre Kontoauszüge stimmen überein. Es gibt nichts zu tun. Bitte drücken Sie auf „Abgleich bestätigen”, um Ihre Eingaben zu bestätigen.', + 'create_pos_reconcile_transaction' => 'Ausgewählte Umsätze bereinigen und einen Korrekturbetrag in Höhe von :amount auf dieses Bestandskonto überweisen.', + 'create_neg_reconcile_transaction' => 'Ausgewählte Umsätze bereinigen und einen Korrekturbetrag in Höhe von :amount von diesem Anlagenkonto zurücküberweisen.', + 'reconcile_do_nothing' => 'Ausgewählte Umsätze bereinigen, aber nicht korrigieren.', + 'reconcile_go_back' => 'Sie können dies jederzeit später bearbeiten oder löschen.', + 'must_be_asset_account' => 'Sie können nur Bestandskonten abgleichen', + 'reconciliation_stored' => 'Kontenabgleich gespeichert', + 'reconciliation_error' => 'Aufgrund eines Fehlers wurden die Buchungen als „Ausgeglichen” gekennzeichnet, aber die Korrektur wurde nicht gespeichert: :error.', + 'reconciliation_transaction_title' => 'Ausgleich (:from zu :to)', + 'sum_of_reconciliation' => 'Summe der Überleitungsrechnung', + 'reconcile_this_account' => 'Dieses Konto abgleichen', + 'reconcile' => 'Abgleichen', + 'show' => 'Anzeigen', + 'confirm_reconciliation' => 'Kontenabgleich bestätigen', + 'submitted_start_balance' => 'Übermitteltes Startguthaben', + 'selected_transactions' => 'Ausgewählte Umsätze (:count)', + 'already_cleared_transactions' => 'Bereits ausgeglichene Umsätze (:count)', + 'submitted_end_balance' => 'Übermittelter Abschlussguthaben', + 'initial_balance_description' => 'Anfangsguthaben für „:account”', + 'liability_credit_description' => 'Verbindlichkeitsguthaben für ":account"', + 'interest_calc_' => 'Unbekannt', + 'interest_calc_daily' => 'Täglich', + 'interest_calc_monthly' => 'Monatlich', + 'interest_calc_yearly' => 'Jährlich', + 'interest_calc_weekly' => 'Pro Woche', + 'interest_calc_half-year' => 'Halbjährlich', + 'interest_calc_quarterly' => 'Vierteljährlich', + 'initial_balance_account' => 'Anfangsguthaben von „:account”', + 'list_options' => 'Listenoptionen', // categories: - 'new_category' => 'Neue Kategorie', - 'create_new_category' => 'Eine neue Kategorie erstellen', - 'without_category' => 'Ohne Kategorie', - 'update_category' => 'Kategorie aktualisieren', - 'updated_category' => 'Kategorie „:name” aktualisiert', - 'categories' => 'Kategorien', - 'edit_category' => 'Kategorie „:name” bearbeiten', - 'no_category' => '(keine Kategorie)', - 'unknown_category_plain' => 'Keine Kategorie', - 'category' => 'Kategorie', - 'delete_category' => 'Kategorie „:name” löschen', - 'deleted_category' => 'Kategorie „:name” gelöscht', - 'store_category' => 'Speichere neue Kategorie', - 'stored_category' => 'Neue Kategorie „:name” gespeichert', - 'without_category_between' => 'Ohne Kategorie zwischen :start und :end', + 'new_category' => 'Neue Kategorie', + 'create_new_category' => 'Eine neue Kategorie erstellen', + 'without_category' => 'Ohne Kategorie', + 'update_category' => 'Kategorie aktualisieren', + 'updated_category' => 'Kategorie „:name” aktualisiert', + 'categories' => 'Kategorien', + 'edit_category' => 'Kategorie „:name” bearbeiten', + 'no_category' => '(keine Kategorie)', + 'unknown_category_plain' => 'Keine Kategorie', + 'category' => 'Kategorie', + 'delete_category' => 'Kategorie „:name” löschen', + 'deleted_category' => 'Kategorie „:name” gelöscht', + 'store_category' => 'Speichere neue Kategorie', + 'stored_category' => 'Neue Kategorie „:name” gespeichert', + 'without_category_between' => 'Ohne Kategorie zwischen :start und :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Ausgaben aktualisieren', - 'update_deposit' => 'Einnahmen aktualisieren', - 'update_transaction' => 'Buchung aktualisieren', - 'update_transfer' => 'Umbuchung aktualisieren', - 'updated_withdrawal' => 'Ausgabe ":description" aktualisiert', - 'updated_deposit' => 'Einnahme ":description" aktualisiert', - 'updated_transfer' => 'Umbuchung ":description" aktualisiert', - 'no_changes_withdrawal' => 'Die Ausgabe „:description” wurde nicht geändert.', - 'no_changes_deposit' => 'Die Einnahme ":description" wurde nicht geändert.', - 'no_changes_transfer' => 'Die Umbuchung ":description" wurde nicht geändert.', - 'delete_withdrawal' => 'Ausgabe ":description" löschen', - 'delete_deposit' => 'Einnahme ":description" löschen', - 'delete_transfer' => 'Umbuchung ":description" löschen', - 'deleted_withdrawal' => 'Ausgabe ":description" erfolgreich gelöscht', - 'deleted_deposit' => 'Einnahme ":description" erfolgreich gelöscht', - 'deleted_transfer' => 'Umbuchung ":description" erfolgreich gelöscht', - 'deleted_reconciliation' => 'Ausgleichsbuchung „:description” erfolgreich gelöscht', - 'stored_journal' => 'Neue Überweisung ":description" erfolgreich erstellt', - 'stored_journal_no_descr' => 'Ihre neue Buchung wurde erfolgreich erstellt', - 'updated_journal_no_descr' => 'Ihre Buchung wurde erfolgreich aktualisiert', - 'select_transactions' => 'Buchungen auswählen', - 'rule_group_select_transactions' => '„:title” auf Buchungen anwenden', - 'rule_select_transactions' => '„:title” auf Buchungen anwenden', - 'stop_selection' => 'Auswählen von Buchungen anhalten', - 'reconcile_selected' => 'Abgleichen', - 'mass_delete_journals' => 'Anzahl von Buchungen löschen', - 'mass_edit_journals' => 'Anzahl von Buchungen bearbeiten', - 'mass_bulk_journals' => 'Massenbearbeitung mehrerer Buchungen', - 'mass_bulk_journals_explain' => 'Mit diesem Formular können Sie die Eigenschaften der unten aufgeführten Buchungen in einer einzigen umfassenden Aktualisierung ändern. Alle Buchungen in der Tabelle werden aktualisiert, wenn Sie die hier angezeigten Parameter ändern.', - 'part_of_split' => 'Diese Buchung ist Teil einer Splitbuchung. Wenn Sie nicht alle Aufteilungen ausgewählt haben, können Sie am Ende nur die Hälfte der Buchung ändern.', - 'bulk_set_new_values' => 'Verwenden Sie die folgenden Felder, um neue Werte einzustellen. Wenn Sie sie leer lassen, werden sie für alle geleert. Beachten Sie auch, dass nur Ausgaben mit einem Budget versehen werden.', - 'no_bulk_category' => 'Kategorie nicht aktualisieren', - 'no_bulk_budget' => 'Budget nicht aktualisieren', - 'no_bulk_tags' => 'Schlagwörter nicht aktualisieren', - 'replace_with_these_tags' => 'Durch diese Schlagwörter ersetzen', - 'append_these_tags' => 'Diese Schlagwörter hinzufügen', - 'mass_edit' => 'Ausgewählte einzeln bearbeiten', - 'bulk_edit' => 'Ausgewählte als Block bearbeiten', - 'mass_delete' => 'Ausgewählte löschen', - 'cannot_edit_other_fields' => 'Andere Felder als die hier gezeigten können Sie nicht gleichzeitig bearbeitet werden, da es keinen Platz gibt, diese anzuzeigen. Bitte folgen Sie dem Link und bearbeiten Sie die Felder einzeln, wenn Sie diese bearbeiten möchten.', - 'cannot_change_amount_reconciled' => 'Sie können den Betrag der abgeglichenen Buchungen nicht ändern.', - 'no_budget' => '(kein Budget)', - 'no_bill' => '(keine Belege)', - 'account_per_budget' => 'Konto je Budget', - 'account_per_category' => 'Konto je Kategorie', - 'create_new_object' => 'Erstellen', - 'empty' => '(leer)', - 'all_other_budgets' => '(alle anderen Budgets)', - 'all_other_accounts' => '(alle anderen Konten)', - 'expense_per_source_account' => 'Ausgaben je Quellkonto', - 'expense_per_destination_account' => 'Ausgaben je Zielkonto', - 'income_per_destination_account' => 'Einnahmen je Zielkonto', - 'spent_in_specific_category' => 'Ausgaben in der Kategorie „:category”', - 'earned_in_specific_category' => 'Einnahmen in der Kategorie „:category”', - 'spent_in_specific_tag' => 'Ausgaben im Schlagwort „:tag”', - 'earned_in_specific_tag' => 'Einnahmen im Schlagwort „:tag”', - 'income_per_source_account' => 'Einnahmen je Quellkonto', - 'average_spending_per_destination' => 'Durchschnittliche Kosten je Zielkonto', - 'average_spending_per_source' => 'Durchschnittliche Ausgaben je Quellkonto', - 'average_earning_per_source' => 'Durchschnittlicher Erlös je Quellkonto', - 'average_earning_per_destination' => 'Durchschnittlicher Einnahmen je Zielkonto', - 'account_per_tag' => 'Konto je Schlagwort', - 'tag_report_expenses_listed_once' => 'Ausgaben und Einnahmen werden nie doppelt ausgewiesen. Wenn einer Buchung mehrere Schagwörter zugeordnet sind, darf diese nur unter einem ihrer Schagwörter angezeigt werden. Diese Liste könnte fehlende Daten enthalten, aber die Beträge werden korrekt sein.', - 'double_report_expenses_charted_once' => 'Ausgaben und Einnahmen werden nie doppelt ausgewiesen. Wenn einer Buchung mehrer Schlagwörter zugeordnet wurden, darf diese nur unter einem ihrer Schlagwörter angezeigt werden. In diesem Diagramm fehlen möglicherweise Daten, aber die Beträge sind korrekt.', - 'tag_report_chart_single_tag' => 'Dieses Diagramm gilt für ein einzelnes Schlagwort. Wenn einer Buchung mehrere Schlagwörter zugeordnet sind, kann sich das, was Sie hier sehen, auch in den Diagrammen anderer Schlagwörter widerspiegeln.', - 'tag' => 'Schlagwort', - 'no_budget_squared' => '(kein Budget)', - 'perm-delete-many' => 'Das Löschen vieler Elemente auf einmal kann sehr problematisch sein. Bitte seien Sie vorsichtig. Sie können einen Teil einer Splitbuchung auf dieser Seite löschen, also seien Sie vorsichtig.', - 'mass_deleted_transactions_success' => ':count Transaktion gelöscht.|:count Transaktionen gelöscht.', - 'mass_edited_transactions_success' => ':count Transaktion aktualisiert.|:count Transaktionen aktualisiert.', - 'opt_group_' => '(kein Kontotyp)', - 'opt_group_no_account_type' => '(kein Kontotyp)', - 'opt_group_defaultAsset' => 'Standard-Anlagekonto', - 'opt_group_savingAsset' => 'Sparkonten', - 'opt_group_sharedAsset' => 'Gemeinsame Bestandskonten', - 'opt_group_ccAsset' => 'Kreditkarten', - 'opt_group_cashWalletAsset' => 'Geldbörsen', - 'opt_group_expense_account' => 'Ausgabekonten', - 'opt_group_revenue_account' => 'Einnahmekonten', - 'opt_group_l_Loan' => 'Verbindlichkeit: Darlehen', - 'opt_group_cash_account' => 'Geldkonto', - 'opt_group_l_Debt' => 'Verbindlichkeit: Forderung', - 'opt_group_l_Mortgage' => 'Verbindlichkeit: Hypothek', - 'opt_group_l_Credit card' => 'Verbindlichkeit: Kreditkarte', - 'notes' => 'Notizen', - 'unknown_journal_error' => 'Die Buchung konnte nicht gespeichert werden. Bitte überprüfen Sie die Protokolldateien.', - 'attachment_not_found' => 'Der Anhang konnte nicht gefunden werden.', - 'journal_link_bill' => 'Diese Buchung ist mit der Rechnung :name verknüpft. Um diese Verbindung aufzuheben, deaktivieren Sie das Kontrollkästchen. Verwenden Sie Regeln, um es mit einer anderen Rechnung zu verbinden.', - 'transaction_stored_link' => 'Buchung #{ID} ("{title}") wurde gespeichert.', - 'transaction_new_stored_link' => 'Buchung #{ID} wurde gespeichert.', - 'transaction_updated_link' => 'Die Buchung #{ID} ("{title}") wurde aktualisiert.', - 'transaction_updated_no_changes' => 'Die Buchung #{ID} ("{title}") wurde nicht verändert.', - 'first_split_decides' => 'Die erste Aufteilung bestimmt den Wert dieses Feldes', - 'first_split_overrules_source' => 'Die erste Aufteilung könnte das Quellkonto überschreiben', - 'first_split_overrules_destination' => 'Die erste Aufteilung könnte das Zielkonto überschreiben', - 'spent_x_of_y' => '{amount} von {total} ausgegeben', + 'wait_loading_transaction' => 'Bitte warten Sie, bis das Formular geladen wurde', + 'wait_loading_data' => 'Bitte warten Sie, bis Ihre Informationen geladen wurden …', + 'wait_attachments' => 'Bitte warten Sie, bis die Anhänge hochgeladen sind.', + 'errors_upload' => 'Das Hochladen ist fehlgeschlagen. Bitte überprüfen Sie Ihre Browserkonsole auf den Fehler.', + 'amount_foreign_if' => 'Betrag in Fremdwährung, falls vorhanden', + 'amount_destination_account' => 'Betrag in der Währung des Zielkontos', + 'edit_transaction_title' => 'Buchung „:description” bearbeiten', + 'unreconcile' => 'Kontenabgleich widerrufen', + 'update_withdrawal' => 'Ausgaben aktualisieren', + 'update_deposit' => 'Einnahmen aktualisieren', + 'update_transaction' => 'Buchung aktualisieren', + 'update_transfer' => 'Umbuchung aktualisieren', + 'updated_withdrawal' => 'Ausgabe ":description" aktualisiert', + 'updated_deposit' => 'Einnahme ":description" aktualisiert', + 'updated_transfer' => 'Umbuchung ":description" aktualisiert', + 'no_changes_withdrawal' => 'Die Ausgabe „:description” wurde nicht geändert.', + 'no_changes_deposit' => 'Die Einnahme ":description" wurde nicht geändert.', + 'no_changes_transfer' => 'Die Umbuchung ":description" wurde nicht geändert.', + 'delete_withdrawal' => 'Ausgabe ":description" löschen', + 'delete_deposit' => 'Einnahme ":description" löschen', + 'delete_transfer' => 'Umbuchung ":description" löschen', + 'deleted_withdrawal' => 'Ausgabe ":description" erfolgreich gelöscht', + 'deleted_deposit' => 'Einnahme ":description" erfolgreich gelöscht', + 'deleted_transfer' => 'Umbuchung ":description" erfolgreich gelöscht', + 'deleted_reconciliation' => 'Ausgleichsbuchung „:description” erfolgreich gelöscht', + 'stored_journal' => 'Neue Überweisung ":description" erfolgreich erstellt', + 'stored_journal_js' => 'Neue Buchung „%{description}” erfolgreich erstellt', + 'stored_journal_no_descr' => 'Ihre neue Buchung wurde erfolgreich erstellt', + 'updated_journal_no_descr' => 'Ihre Buchung wurde erfolgreich aktualisiert', + 'select_transactions' => 'Buchungen auswählen', + 'rule_group_select_transactions' => '„:title” auf Buchungen anwenden', + 'rule_select_transactions' => '„:title” auf Buchungen anwenden', + 'stop_selection' => 'Auswählen von Buchungen anhalten', + 'reconcile_selected' => 'Abgleichen', + 'mass_delete_journals' => 'Anzahl von Buchungen löschen', + 'mass_edit_journals' => 'Anzahl von Buchungen bearbeiten', + 'mass_bulk_journals' => 'Massenbearbeitung mehrerer Buchungen', + 'mass_bulk_journals_explain' => 'Mit diesem Formular können Sie die Eigenschaften der unten aufgeführten Buchungen in einer einzigen umfassenden Aktualisierung ändern. Alle Buchungen in der Tabelle werden aktualisiert, wenn Sie die hier angezeigten Parameter ändern.', + 'part_of_split' => 'Diese Buchung ist Teil einer Splitbuchung. Wenn Sie nicht alle Aufteilungen ausgewählt haben, können Sie am Ende nur die Hälfte der Buchung ändern.', + 'bulk_set_new_values' => 'Verwenden Sie die folgenden Felder, um neue Werte einzustellen. Wenn Sie sie leer lassen, werden sie für alle geleert. Beachten Sie auch, dass nur Ausgaben mit einem Budget versehen werden.', + 'no_bulk_category' => 'Kategorie nicht aktualisieren', + 'no_bulk_budget' => 'Budget nicht aktualisieren', + 'no_bulk_tags' => 'Schlagwörter nicht aktualisieren', + 'replace_with_these_tags' => 'Durch diese Schlagwörter ersetzen', + 'append_these_tags' => 'Diese Schlagwörter hinzufügen', + 'mass_edit' => 'Ausgewählte einzeln bearbeiten', + 'bulk_edit' => 'Ausgewählte als Block bearbeiten', + 'mass_delete' => 'Ausgewählte löschen', + 'cannot_edit_other_fields' => 'Andere Felder als die hier gezeigten können Sie nicht gleichzeitig bearbeitet werden, da es keinen Platz gibt, diese anzuzeigen. Bitte folgen Sie dem Link und bearbeiten Sie die Felder einzeln, wenn Sie diese bearbeiten möchten.', + 'cannot_change_amount_reconciled' => 'Sie können den Betrag der abgeglichenen Buchungen nicht ändern.', + 'no_budget' => '(kein Budget)', + 'no_bill' => '(keine Belege)', + 'account_per_budget' => 'Konto je Budget', + 'account_per_category' => 'Konto je Kategorie', + 'create_new_object' => 'Erstellen', + 'empty' => '(leer)', + 'all_other_budgets' => '(alle anderen Budgets)', + 'all_other_accounts' => '(alle anderen Konten)', + 'expense_per_source_account' => 'Ausgaben je Quellkonto', + 'expense_per_destination_account' => 'Ausgaben je Zielkonto', + 'income_per_destination_account' => 'Einnahmen je Zielkonto', + 'spent_in_specific_category' => 'Ausgaben in der Kategorie „:category”', + 'earned_in_specific_category' => 'Einnahmen in der Kategorie „:category”', + 'spent_in_specific_tag' => 'Ausgaben im Schlagwort „:tag”', + 'earned_in_specific_tag' => 'Einnahmen im Schlagwort „:tag”', + 'income_per_source_account' => 'Einnahmen je Quellkonto', + 'average_spending_per_destination' => 'Durchschnittliche Kosten je Zielkonto', + 'average_spending_per_source' => 'Durchschnittliche Ausgaben je Quellkonto', + 'average_earning_per_source' => 'Durchschnittlicher Erlös je Quellkonto', + 'average_earning_per_destination' => 'Durchschnittlicher Einnahmen je Zielkonto', + 'account_per_tag' => 'Konto je Schlagwort', + 'tag_report_expenses_listed_once' => 'Ausgaben und Einnahmen werden nie doppelt ausgewiesen. Wenn einer Buchung mehrere Schagwörter zugeordnet sind, darf diese nur unter einem ihrer Schagwörter angezeigt werden. Diese Liste könnte fehlende Daten enthalten, aber die Beträge werden korrekt sein.', + 'double_report_expenses_charted_once' => 'Ausgaben und Einnahmen werden nie doppelt ausgewiesen. Wenn einer Buchung mehrer Schlagwörter zugeordnet wurden, darf diese nur unter einem ihrer Schlagwörter angezeigt werden. In diesem Diagramm fehlen möglicherweise Daten, aber die Beträge sind korrekt.', + 'tag_report_chart_single_tag' => 'Dieses Diagramm gilt für ein einzelnes Schlagwort. Wenn einer Buchung mehrere Schlagwörter zugeordnet sind, kann sich das, was Sie hier sehen, auch in den Diagrammen anderer Schlagwörter widerspiegeln.', + 'tag' => 'Schlagwort', + 'no_budget_squared' => '(kein Budget)', + 'perm-delete-many' => 'Das Löschen vieler Elemente auf einmal kann sehr problematisch sein. Bitte seien Sie vorsichtig. Sie können einen Teil einer Splitbuchung auf dieser Seite löschen, also seien Sie vorsichtig.', + 'mass_deleted_transactions_success' => ':count Transaktion gelöscht.|:count Transaktionen gelöscht.', + 'mass_edited_transactions_success' => ':count Transaktion aktualisiert.|:count Transaktionen aktualisiert.', + 'opt_group_' => '(kein Kontotyp)', + 'opt_group_no_account_type' => '(kein Kontotyp)', + 'opt_group_defaultAsset' => 'Standard-Anlagekonto', + 'opt_group_savingAsset' => 'Sparkonten', + 'opt_group_sharedAsset' => 'Gemeinsame Bestandskonten', + 'opt_group_ccAsset' => 'Kreditkarten', + 'opt_group_cashWalletAsset' => 'Geldbörsen', + 'opt_group_expense_account' => 'Ausgabekonten', + 'opt_group_revenue_account' => 'Einnahmekonten', + 'opt_group_l_Loan' => 'Verbindlichkeit: Darlehen', + 'opt_group_cash_account' => 'Geldkonto', + 'opt_group_l_Debt' => 'Verbindlichkeit: Forderung', + 'opt_group_l_Mortgage' => 'Verbindlichkeit: Hypothek', + 'opt_group_l_Credit card' => 'Verbindlichkeit: Kreditkarte', + 'notes' => 'Notizen', + 'unknown_journal_error' => 'Die Buchung konnte nicht gespeichert werden. Bitte überprüfen Sie die Protokolldateien.', + 'attachment_not_found' => 'Der Anhang konnte nicht gefunden werden.', + 'journal_link_bill' => 'Diese Buchung ist mit der Rechnung :name verknüpft. Um diese Verbindung aufzuheben, deaktivieren Sie das Kontrollkästchen. Verwenden Sie Regeln, um es mit einer anderen Rechnung zu verbinden.', + 'transaction_stored_link' => 'Buchung #{ID} ("{title}") wurde gespeichert.', + 'transaction_new_stored_link' => 'Buchung #{ID} wurde gespeichert.', + 'transaction_updated_link' => 'Die Buchung #{ID} ("{title}") wurde aktualisiert.', + 'transaction_updated_no_changes' => 'Die Buchung #{ID} ("{title}") wurde nicht verändert.', + 'first_split_decides' => 'Die erste Aufteilung bestimmt den Wert dieses Feldes', + 'first_split_overrules_source' => 'Die erste Aufteilung könnte das Quellkonto überschreiben', + 'first_split_overrules_destination' => 'Die erste Aufteilung könnte das Zielkonto überschreiben', + 'spent_x_of_y' => '{amount} von {total} ausgegeben', // new user: - 'welcome' => 'Willkommen bei Firefly III!', - 'submit' => 'Absenden', - 'submission' => 'Übermittlung', - 'submit_yes_really' => 'Senden (Ich weiß, was ich tue)', - 'getting_started' => 'Erste Schritte', - 'to_get_started' => 'Es ist schön, dass Sie Firefly III erfolgreich installiert haben. Um mit diesem Tool zu beginnen, geben Sie bitte den Namen Ihrer Bank und das Guthaben Ihres Hauptkontos ein. Machen Sie sich keine Sorgen, wenn Sie mehrere Konten haben. Sie können diese später hinzufügen. Dies ist nur der Anfang.', - 'savings_balance_text' => 'Firefly III erstellt automatisch ein Sparkonto für Sie. Standardmäßig befindet sich kein Geld auf Ihrem Sparkonto, aber wenn Sie Firefly III das Guthaben mitteilen, wird es als solches gespeichert.', - 'finish_up_new_user' => 'Das war\'s! Sie können fortfahren, indem Sie Absenden drücken. Sie werden zur Startseite von Firefly III gebracht.', - 'stored_new_accounts_new_user' => 'Yay! Ihre neuen Konten wurden gespeichert.', - 'set_preferred_language' => 'Wenn Sie Firefly III in einer anderen Sprache verwenden möchten, geben Sie dies bitte hier an.', - 'language' => 'Sprache', - 'new_savings_account' => ':bank_name-Sparkonto', - 'cash_wallet' => 'Geldbörse', - 'currency_not_present' => 'Wenn die Währung, die Sie normalerweise verwenden, nicht aufgeführt ist, machen Sie sich keine Sorgen. Unter Optionen ➜ Währungen können Sie eigene Währungen anlegen.', + 'welcome' => 'Willkommen bei Firefly III!', + 'submit' => 'Absenden', + 'submission' => 'Übermittlung', + 'submit_yes_really' => 'Senden (Ich weiß, was ich tue)', + 'getting_started' => 'Erste Schritte', + 'to_get_started' => 'Es ist schön, dass Sie Firefly III erfolgreich installiert haben. Um mit diesem Tool zu beginnen, geben Sie bitte den Namen Ihrer Bank und das Guthaben Ihres Hauptkontos ein. Machen Sie sich keine Sorgen, wenn Sie mehrere Konten haben. Sie können diese später hinzufügen. Dies ist nur der Anfang.', + 'savings_balance_text' => 'Firefly III erstellt automatisch ein Sparkonto für Sie. Standardmäßig befindet sich kein Geld auf Ihrem Sparkonto, aber wenn Sie Firefly III das Guthaben mitteilen, wird es als solches gespeichert.', + 'finish_up_new_user' => 'Das war\'s! Sie können fortfahren, indem Sie Absenden drücken. Sie werden zur Startseite von Firefly III gebracht.', + 'stored_new_accounts_new_user' => 'Yay! Ihre neuen Konten wurden gespeichert.', + 'set_preferred_language' => 'Wenn Sie Firefly III in einer anderen Sprache verwenden möchten, geben Sie dies bitte hier an.', + 'language' => 'Sprache', + 'new_savings_account' => ':bank_name-Sparkonto', + 'cash_wallet' => 'Geldbörse', + 'currency_not_present' => 'Wenn die Währung, die Sie normalerweise verwenden, nicht aufgeführt ist, machen Sie sich keine Sorgen. Unter Optionen ➜ Währungen können Sie eigene Währungen anlegen.', // home page: - 'transaction_table_description' => 'Eine Tabelle mit Ihren Buchungen', - 'opposing_account' => 'Gegenkonto', - 'yourAccounts' => 'Deine Konten', - 'your_accounts' => 'Kontenübersicht', - 'category_overview' => 'Kategorieübersicht', - 'expense_overview' => 'Übersicht der Ausgabekonten', - 'revenue_overview' => 'Übersicht der Einnahmekonten', - 'budgetsAndSpending' => 'Budgets und Ausgaben', - 'budgets_and_spending' => 'Budgets und Ausgaben', - 'go_to_budget' => 'Zu Budget „{budget}” wechseln', - 'go_to_deposits' => 'Einnahmen anzeigen', - 'go_to_expenses' => 'Ausgaben anzeigen', - 'savings' => 'Erspartes', - 'newWithdrawal' => 'Neue Ausgabe', - 'newDeposit' => 'Neue Einnahme', - 'newTransfer' => 'Neue Umbuchung', - 'bills_to_pay' => 'Unbezahlte Rechnungen', - 'per_day' => 'Pro Tag', - 'left_to_spend_per_day' => 'Verbleibend zum Ausgeben je Tag', - 'bills_paid' => 'Rechnungen bezahlt', - 'custom_period' => 'Benutzerdefinierter Zeitraum', - 'reset_to_current' => 'Auf aktuellen Zeitraum zurücksetzen', - 'select_period' => 'Zeitraum auswählen', + 'transaction_table_description' => 'Eine Tabelle mit Ihren Buchungen', + 'opposing_account' => 'Gegenkonto', + 'yourAccounts' => 'Deine Konten', + 'your_accounts' => 'Kontenübersicht', + 'category_overview' => 'Kategorieübersicht', + 'expense_overview' => 'Übersicht der Ausgabekonten', + 'revenue_overview' => 'Übersicht der Einnahmekonten', + 'budgetsAndSpending' => 'Budgets und Ausgaben', + 'budgets_and_spending' => 'Budgets und Ausgaben', + 'go_to_budget' => 'Zu Budget „{budget}” wechseln', + 'go_to_deposits' => 'Einnahmen anzeigen', + 'go_to_expenses' => 'Ausgaben anzeigen', + 'savings' => 'Erspartes', + 'newWithdrawal' => 'Neue Ausgabe', + 'newDeposit' => 'Neue Einnahme', + 'newTransfer' => 'Neue Umbuchung', + 'bills_to_pay' => 'Unbezahlte Rechnungen', + 'per_day' => 'Pro Tag', + 'left_to_spend_per_day' => 'Verbleibend zum Ausgeben je Tag', + 'bills_paid' => 'Rechnungen bezahlt', + 'custom_period' => 'Benutzerdefinierter Zeitraum', + 'reset_to_current' => 'Auf aktuellen Zeitraum zurücksetzen', + 'select_period' => 'Zeitraum auswählen', // menu and titles, should be recycled as often as possible: - 'currency' => 'Währung', - 'preferences' => 'Einstellungen', - 'logout' => 'Abmelden', - 'logout_other_sessions' => 'Alle anderen Sitzungen abmelden', - 'toggleNavigation' => 'Navigation umschalten', - 'searchPlaceholder' => 'Suchen...', - 'version' => 'Version', - 'dashboard' => 'Übersicht', - 'income_and_expense' => 'Einnahmen und Ausgaben', - 'all_money' => 'All Ihr Geld', - 'unknown_source_plain' => 'Unbekanntes Quellkonto', - 'unknown_dest_plain' => 'Unbekanntes Zielkonto', - 'unknown_any_plain' => 'Unbekanntes Konto', - 'unknown_budget_plain' => 'Kein Budget', - 'available_budget' => 'Verfügbares Budget ({currency})', - 'currencies' => 'Währungen', - 'activity' => 'Aktivität', - 'usage' => 'Verwendung', - 'accounts' => 'Konten', - 'Asset account' => 'Bestandskonto', - 'Default account' => 'Bestandskonto', - 'Expense account' => 'Ausgabenkonto', - 'Revenue account' => 'Einnahmenkonto', - 'Initial balance account' => 'Eröffnungssaldo', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Schuld', - 'account_type_Loan' => 'Darlehen', - 'account_type_Mortgage' => 'Hypothek', - 'account_type_debt' => 'Schulden', - 'account_type_loan' => 'Darlehen', - 'account_type_mortgage' => 'Hypothek', - 'account_type_Credit card' => 'Kreditkarte', - 'credit_card_type_monthlyFull' => 'Vollständige Zahlung jeden Monat', - 'liability_direction_credit' => 'Mir wird dies geschuldet', - 'liability_direction_debit' => 'Ich schulde dies jemandem', - 'liability_direction_credit_short' => 'Geschuldeter Betrag', - 'liability_direction_debit_short' => 'Schuldiger Betrag', - 'liability_direction__short' => 'Unbekannt', - 'liability_direction_null_short' => 'Unbekannt', - 'Liability credit' => 'Verbindlichkeitsguthaben', - 'budgets' => 'Budgets', - 'tags' => 'Schlagwörter', - 'reports' => 'Berichte', - 'transactions' => 'Buchungen', - 'expenses' => 'Ausgaben', - 'income' => 'Einnahmen / Einkommen', - 'transfers' => 'Umbuchungen', - 'moneyManagement' => 'Geldverwaltung', - 'money_management' => 'Finanzverwaltung', - 'tools' => 'Extras', - 'piggyBanks' => 'Sparschweine', - 'piggy_banks' => 'Sparschweine', - 'amount_x_of_y' => '{current} von {total}', - 'bills' => 'Rechnungen', - 'withdrawal' => 'Ausgabe', - 'opening_balance' => 'Eröffnungsbilanz', - 'deposit' => 'Einnahme', - 'account' => 'Konto', - 'transfer' => 'Umbuchung', - 'Withdrawal' => 'Ausgabe', - 'Deposit' => 'Einnahme', - 'Transfer' => 'Umbuchung', - 'bill' => 'Rechnung', - 'yes' => 'Ja', - 'no' => 'Nein', - 'amount' => 'Betrag', - 'overview' => 'Übersicht', - 'saveOnAccount' => 'Rücklagen für Konto', - 'unknown' => 'Unbekannt', - 'monthly' => 'Monatlich', - 'profile' => 'Profil', - 'errors' => 'Fehler', - 'debt_start_date' => 'Startdatum der Verschuldung', - 'debt_start_amount' => 'Startbetrag der Verschuldung', - 'debt_start_amount_help' => 'Es wird empfohlen, diesen Wert auf einen negativen Betrag festzulegen. Lesen Sie die Hilfeseiten (oben rechts ❓-Symbol) für weitere Informationen.', - 'interest_period_help' => 'Dieses Feld ist rein kosmetisch und wird für Sie nicht berechnet. Wie sich herausstellt, sind Banken sehr hinterhältig, so dass Firefly III es nie richtig macht.', - 'store_new_liabilities_account' => 'Neue Verbindlichkeit speichern', - 'edit_liabilities_account' => 'Verbindlichkeit „:name” bearbeiten', - 'financial_control' => 'Finanzkontrolle', - 'accounting' => 'Buchhaltung', - 'automation' => 'Automatisierungen', - 'others' => 'Weitere', - 'classification' => 'Klassifizierung', - 'store_transaction' => 'Buchung speichern', + 'currency' => 'Währung', + 'preferences' => 'Einstellungen', + 'logout' => 'Abmelden', + 'logout_other_sessions' => 'Alle anderen Sitzungen abmelden', + 'toggleNavigation' => 'Navigation umschalten', + 'searchPlaceholder' => 'Suchen...', + 'version' => 'Version', + 'dashboard' => 'Übersicht', + 'income_and_expense' => 'Einnahmen und Ausgaben', + 'all_money' => 'All Ihr Geld', + 'unknown_source_plain' => 'Unbekanntes Quellkonto', + 'unknown_dest_plain' => 'Unbekanntes Zielkonto', + 'unknown_any_plain' => 'Unbekanntes Konto', + 'unknown_budget_plain' => 'Kein Budget', + 'available_budget' => 'Verfügbares Budget ({currency})', + 'currencies' => 'Währungen', + 'activity' => 'Aktivität', + 'usage' => 'Verwendung', + 'accounts' => 'Konten', + 'Asset account' => 'Bestandskonto', + 'Default account' => 'Bestandskonto', + 'Expense account' => 'Ausgabenkonto', + 'Revenue account' => 'Einnahmenkonto', + 'Initial balance account' => 'Eröffnungssaldo', + 'account_type_Asset account' => 'Bestandskonto', + 'account_type_Expense account' => 'Ausgabenkonto', + 'account_type_Revenue account' => 'Einnahmenkonto', + 'account_type_Debt' => 'Schuld', + 'account_type_Loan' => 'Darlehen', + 'account_type_Mortgage' => 'Hypothek', + 'account_type_debt' => 'Schulden', + 'account_type_loan' => 'Darlehen', + 'account_type_mortgage' => 'Hypothek', + 'account_type_Credit card' => 'Kreditkarte', + 'credit_card_type_monthlyFull' => 'Vollständige Zahlung jeden Monat', + 'liability_direction_credit' => 'Mir wird dies geschuldet', + 'liability_direction_debit' => 'Ich schulde dies jemandem', + 'liability_direction_credit_short' => 'Geschuldeter Betrag', + 'liability_direction_debit_short' => 'Schuldiger Betrag', + 'liability_direction__short' => 'Unbekannt', + 'liability_direction_null_short' => 'Unbekannt', + 'Liability credit' => 'Verbindlichkeitsguthaben', + 'budgets' => 'Budgets', + 'tags' => 'Schlagwörter', + 'reports' => 'Berichte', + 'transactions' => 'Buchungen', + 'expenses' => 'Ausgaben', + 'income' => 'Einnahmen / Einkommen', + 'transfers' => 'Umbuchungen', + 'moneyManagement' => 'Geldverwaltung', + 'money_management' => 'Finanzverwaltung', + 'tools' => 'Extras', + 'piggyBanks' => 'Sparschweine', + 'piggy_banks' => 'Sparschweine', + 'amount_x_of_y' => '{current} von {total}', + 'bills' => 'Rechnungen', + 'withdrawal' => 'Ausgabe', + 'opening_balance' => 'Eröffnungsbilanz', + 'deposit' => 'Einnahme', + 'account' => 'Konto', + 'transfer' => 'Umbuchung', + 'Withdrawal' => 'Ausgabe', + 'Deposit' => 'Einnahme', + 'Transfer' => 'Umbuchung', + 'bill' => 'Rechnung', + 'yes' => 'Ja', + 'no' => 'Nein', + 'amount' => 'Betrag', + 'overview' => 'Übersicht', + 'saveOnAccount' => 'Rücklagen für Konto', + 'unknown' => 'Unbekannt', + 'monthly' => 'Monatlich', + 'profile' => 'Profil', + 'errors' => 'Fehler', + 'debt_start_date' => 'Startdatum der Verschuldung', + 'debt_start_amount' => 'Startbetrag der Verschuldung', + 'debt_start_amount_help' => 'Es wird empfohlen, diesen Wert auf einen negativen Betrag festzulegen. Lesen Sie die Hilfeseiten (oben rechts ❓-Symbol) für weitere Informationen.', + 'interest_period_help' => 'Dieses Feld ist rein kosmetisch und wird für Sie nicht berechnet. Wie sich herausstellt, sind Banken sehr hinterhältig, so dass Firefly III es nie richtig macht.', + 'store_new_liabilities_account' => 'Neue Verbindlichkeit speichern', + 'edit_liabilities_account' => 'Verbindlichkeit „:name” bearbeiten', + 'financial_control' => 'Finanzkontrolle', + 'accounting' => 'Buchhaltung', + 'automation' => 'Automatisierungen', + 'others' => 'Weitere', + 'classification' => 'Klassifizierung', + 'store_transaction' => 'Buchung speichern', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Standardfinanzbericht zwischen :start und :end', - 'report_audit' => 'Übersicht des Buchungsverlaufs zwischen :start und :end', - 'report_category' => 'Kategoriebericht zwischen :start und :end', - 'report_double' => 'Ausgaben-/Einnahmenabrechnung zwischen :start and :end', - 'report_budget' => 'Finanzbericht zwischen :start and :end', - 'report_tag' => 'Schlagwortbericht zwischen :start und :end', - 'quick_link_reports' => 'Schnellzugriff', - 'quick_link_examples' => 'Dies sind nur einige Beispiel-Links, um Ihnen den Einstieg zu erleichtern. Auf den Hilfeseiten unter der Schaltfläche „(?)” finden Sie Informationen zu allen Berichten und den Zauberworten, die Sie verwenden können.', - 'quick_link_default_report' => 'Standard Finanzbericht', - 'quick_link_audit_report' => 'Transaktionshistorie', - 'report_this_month_quick' => 'Aktueller Monat, alle Konten', - 'report_last_month_quick' => 'Letzter Monat, alle Konten', - 'report_this_year_quick' => 'Aktuelles Jahr, alle Konten', - 'report_this_fiscal_year_quick' => 'Aktuelles Geschäftsjahr, alle Konten', - 'report_all_time_quick' => 'Gesamte Zeit, alle Konten', - 'reports_can_bookmark' => 'Berichte können als Lesezeichen gespeichert werden.', - 'incomeVsExpenses' => 'Einkommen vs Ausgaben', - 'accountBalances' => 'Kontostände', - 'balanceStart' => 'Bilanz zum Beginn der Periode', - 'balanceEnd' => 'Bilanz zum Ende der Periode', - 'splitByAccount' => 'Nach Konten aufgeteilt', - 'coveredWithTags' => 'Mit Schlagwörtern versehen', - 'leftInBudget' => 'Verblieben im Budget', - 'left_in_debt' => 'Fälliger Betrag', - 'sumOfSums' => 'Summe der Summen', - 'noCategory' => '(keine Kategorie)', - 'notCharged' => '(Noch) nicht belastet', - 'inactive' => 'Inaktiv', - 'active' => 'Aktiv', - 'difference' => 'Unterschied', - 'money_flowing_in' => 'Eingehend', - 'money_flowing_out' => 'Ausgehend', - 'topX' => 'Topnummer :number', - 'show_full_list' => 'Zeige die gesamte Liste', - 'show_only_top' => 'Nur die Top :number anzeigen', - 'report_type' => 'Typ des Berichts', - 'report_type_default' => 'Standard-Finanzbericht', - 'report_type_audit' => 'Übersicht der Transaktionen (Prüfung)', - 'report_type_category' => 'Kategorie-Bericht', - 'report_type_budget' => 'Finanzbericht', - 'report_type_tag' => 'Schlagwortbericht', - 'report_type_double' => 'Ausgaben-/Einnahmenabrechnung', - 'more_info_help' => 'Weitere Informationen über diese Art von Berichten finden Sie in der Hilfe. Drücken Sie hierfür das (?)-Symbol in der oberen rechten Ecke.', - 'report_included_accounts' => 'Einbezogene Konten', - 'report_date_range' => 'Zeitraum', - 'report_preset_ranges' => 'Voreingestellte Bereiche', - 'shared' => 'Geteilt', - 'fiscal_year' => 'Geschäftsjahr', - 'income_entry' => 'Einnahmen aus dem Konto „:name” zwischen :start und :end', - 'expense_entry' => 'Ausgaben für das Konto „:name” zwischen :start und :end', - 'category_entry' => 'Ausgaben und Einnahmen in der Kategorie „:name” zwischen :start und :end', - 'budget_spent_amount' => 'Ausgaben im Haushalt „:budget” zwischen :start und :end', - 'balance_amount' => 'Ausgaben im Budget „:budget” bezahlt von Konto „:account” zwischen :start und :end', - 'no_audit_activity' => 'Zwischen :start und :end wurde keine Aktivität auf dem Konto :account_name festgestellt.', - 'audit_end_balance' => 'Kontostand von :account_name war am Ende vom :end: :balance', - 'reports_extra_options' => 'Zusatzoptionen', - 'report_has_no_extra_options' => 'Dieser Bericht hat keine zusätzliche Optionen', - 'reports_submit' => 'Zeige Bericht', - 'end_after_start_date' => 'Enddatum des Berichts muss nach dem Startdatum liegen.', - 'select_category' => 'Kategorie(n) auswählen', - 'select_budget' => 'Budget(s) auswählen.', - 'select_tag' => 'Schlagworte wählen.', - 'income_per_category' => 'Einnahmen pro Kategorie', - 'expense_per_category' => 'Ausgaben pro Kategorie', - 'expense_per_budget' => 'Ausgaben je Budget', - 'income_per_account' => 'Einnahmen pro Konto', - 'expense_per_account' => 'Ausgaben pro Konto', - 'expense_per_tag' => 'Ausgaben je Schlagwort', - 'income_per_tag' => 'Einnahmen je Schlagwort', - 'include_expense_not_in_budget' => 'Enthaltene Ausgaben, die nicht in dem/den ausgewählten Finanzrahmen enthalten sind', - 'include_expense_not_in_account' => 'Enthaltene Ausgaben, die nicht in den ausgewählten Konten enthalten sind', - 'include_expense_not_in_category' => 'Enthaltene Ausgaben, die nicht in die ausgewählte(n) Kategorie(n) fallen', - 'include_income_not_in_category' => 'Enthaltene Erträge, die nicht in die ausgewählte(n) Kategorie(n) fallen', - 'include_income_not_in_account' => 'Enthaltene Erträge, die nicht in dem/den ausgewählten Konto(en) enthalten sind', - 'include_income_not_in_tags' => 'Enthaltene Erträge, die nicht in den ausgewählten Schlagwörtern enthalten sind', - 'include_expense_not_in_tags' => 'Enthaltene Ausgaben, die nicht in den ausgewählten Schlagwörtern enthalten sind', - 'everything_else' => 'Der Rest', - 'income_and_expenses' => 'Einkommen und Ausgaben', - 'spent_average' => 'Ausgaben (Durchschnitt)', - 'income_average' => 'Einkommen (Durchschnitt)', - 'transaction_count' => 'Überweisungen', - 'average_spending_per_account' => 'Durchschnittsausgaben pro Konto', - 'average_income_per_account' => 'Durchschnittseinkommen pro Konto', - 'total' => 'Gesamt', - 'description' => 'Beschreibung', - 'sum_of_period' => 'Summe des Zeitraums', - 'average_in_period' => 'Durchschnitt im Zeitraum', - 'account_role_defaultAsset' => 'Standard-Bestandskonto', - 'account_role_sharedAsset' => 'Gemeinsames Bestandskonto', - 'account_role_savingAsset' => 'Sparkonto', - 'account_role_ccAsset' => 'Kreditkarte', - 'account_role_cashWalletAsset' => 'Geldbörse', - 'budget_chart_click' => 'Klicken Sie auf einen Namen des Budgets in der obigen Tabelle, um ein Diagramm anzuzeigen.', - 'category_chart_click' => 'Klicken Sie auf einen Kategorienamen in der obigen Tabelle, um ein Diagramm zu sehen.', - 'in_out_accounts' => 'Einnahmen und Ausgaben je Kombination', - 'in_out_accounts_per_asset' => 'Einnahmen und Ausgaben (je Anlagenkonto)', - 'in_out_per_category' => 'Einnahmen und Ausgaben je Kategorie', - 'out_per_budget' => 'Ausgaben je Budget', - 'select_expense_revenue' => 'Ausgaben-/Einnahmenkonto auswählen', - 'multi_currency_report_sum' => 'Da diese Liste Konten mit mehreren Währungen enthält, ergeben die Summe(n), die angezeigt werden, möglicherweise keinen Sinn. Der Bericht wird immer auf Ihre Standardwährung zurückgesetzt.', - 'sum_in_default_currency' => 'Der Betrag wird immer in Ihrer Standardwährung angegeben.', - 'net_filtered_prefs' => 'Dieses Diagramm wird niemals Konten einbeziehen, die die Option "Im Eigenkapital enthalten" deaktiviert haben.', + 'report_default' => 'Standardfinanzbericht zwischen :start und :end', + 'report_audit' => 'Übersicht des Buchungsverlaufs zwischen :start und :end', + 'report_category' => 'Kategoriebericht zwischen :start und :end', + 'report_double' => 'Ausgaben-/Einnahmenabrechnung zwischen :start and :end', + 'report_budget' => 'Finanzbericht zwischen :start and :end', + 'report_tag' => 'Schlagwortbericht zwischen :start und :end', + 'quick_link_reports' => 'Schnellzugriff', + 'quick_link_examples' => 'Dies sind nur einige Beispiel-Links, um Ihnen den Einstieg zu erleichtern. Auf den Hilfeseiten unter der Schaltfläche „(?)” finden Sie Informationen zu allen Berichten und den Zauberworten, die Sie verwenden können.', + 'quick_link_default_report' => 'Standard Finanzbericht', + 'quick_link_audit_report' => 'Transaktionshistorie', + 'report_this_month_quick' => 'Aktueller Monat, alle Konten', + 'report_last_month_quick' => 'Letzter Monat, alle Konten', + 'report_this_year_quick' => 'Aktuelles Jahr, alle Konten', + 'report_this_fiscal_year_quick' => 'Aktuelles Geschäftsjahr, alle Konten', + 'report_all_time_quick' => 'Gesamte Zeit, alle Konten', + 'reports_can_bookmark' => 'Berichte können als Lesezeichen gespeichert werden.', + 'incomeVsExpenses' => 'Einkommen vs Ausgaben', + 'accountBalances' => 'Kontostände', + 'balanceStart' => 'Bilanz zum Beginn der Periode', + 'balanceEnd' => 'Bilanz zum Ende der Periode', + 'splitByAccount' => 'Nach Konten aufgeteilt', + 'coveredWithTags' => 'Mit Schlagwörtern versehen', + 'leftInBudget' => 'Verblieben im Budget', + 'left_in_debt' => 'Fälliger Betrag', + 'sumOfSums' => 'Summe der Summen', + 'noCategory' => '(keine Kategorie)', + 'notCharged' => '(Noch) nicht belastet', + 'inactive' => 'Inaktiv', + 'active' => 'Aktiv', + 'difference' => 'Unterschied', + 'money_flowing_in' => 'Eingehend', + 'money_flowing_out' => 'Ausgehend', + 'topX' => 'Topnummer :number', + 'show_full_list' => 'Zeige die gesamte Liste', + 'show_only_top' => 'Nur die Top :number anzeigen', + 'report_type' => 'Typ des Berichts', + 'report_type_default' => 'Standard-Finanzbericht', + 'report_type_audit' => 'Übersicht der Transaktionen (Prüfung)', + 'report_type_category' => 'Kategorie-Bericht', + 'report_type_budget' => 'Finanzbericht', + 'report_type_tag' => 'Schlagwortbericht', + 'report_type_double' => 'Ausgaben-/Einnahmenabrechnung', + 'more_info_help' => 'Weitere Informationen über diese Art von Berichten finden Sie in der Hilfe. Drücken Sie hierfür das (?)-Symbol in der oberen rechten Ecke.', + 'report_included_accounts' => 'Einbezogene Konten', + 'report_date_range' => 'Zeitraum', + 'report_preset_ranges' => 'Voreingestellte Bereiche', + 'shared' => 'Geteilt', + 'fiscal_year' => 'Geschäftsjahr', + 'income_entry' => 'Einnahmen aus dem Konto „:name” zwischen :start und :end', + 'expense_entry' => 'Ausgaben für das Konto „:name” zwischen :start und :end', + 'category_entry' => 'Ausgaben und Einnahmen in der Kategorie „:name” zwischen :start und :end', + 'budget_spent_amount' => 'Ausgaben im Haushalt „:budget” zwischen :start und :end', + 'balance_amount' => 'Ausgaben im Budget „:budget” bezahlt von Konto „:account” zwischen :start und :end', + 'no_audit_activity' => 'Zwischen :start und :end wurde keine Aktivität auf dem Konto :account_name festgestellt.', + 'audit_end_balance' => 'Kontostand von :account_name war am Ende vom :end: :balance', + 'reports_extra_options' => 'Zusatzoptionen', + 'report_has_no_extra_options' => 'Dieser Bericht hat keine zusätzliche Optionen', + 'reports_submit' => 'Zeige Bericht', + 'end_after_start_date' => 'Enddatum des Berichts muss nach dem Startdatum liegen.', + 'select_category' => 'Kategorie(n) auswählen', + 'select_budget' => 'Budget(s) auswählen.', + 'select_tag' => 'Schlagworte wählen.', + 'income_per_category' => 'Einnahmen pro Kategorie', + 'expense_per_category' => 'Ausgaben pro Kategorie', + 'expense_per_budget' => 'Ausgaben je Budget', + 'income_per_account' => 'Einnahmen pro Konto', + 'expense_per_account' => 'Ausgaben pro Konto', + 'expense_per_tag' => 'Ausgaben je Schlagwort', + 'income_per_tag' => 'Einnahmen je Schlagwort', + 'include_expense_not_in_budget' => 'Enthaltene Ausgaben, die nicht in dem/den ausgewählten Finanzrahmen enthalten sind', + 'include_expense_not_in_account' => 'Enthaltene Ausgaben, die nicht in den ausgewählten Konten enthalten sind', + 'include_expense_not_in_category' => 'Enthaltene Ausgaben, die nicht in die ausgewählte(n) Kategorie(n) fallen', + 'include_income_not_in_category' => 'Enthaltene Erträge, die nicht in die ausgewählte(n) Kategorie(n) fallen', + 'include_income_not_in_account' => 'Enthaltene Erträge, die nicht in dem/den ausgewählten Konto(en) enthalten sind', + 'include_income_not_in_tags' => 'Enthaltene Erträge, die nicht in den ausgewählten Schlagwörtern enthalten sind', + 'include_expense_not_in_tags' => 'Enthaltene Ausgaben, die nicht in den ausgewählten Schlagwörtern enthalten sind', + 'everything_else' => 'Der Rest', + 'income_and_expenses' => 'Einkommen und Ausgaben', + 'spent_average' => 'Ausgaben (Durchschnitt)', + 'income_average' => 'Einkommen (Durchschnitt)', + 'transaction_count' => 'Überweisungen', + 'average_spending_per_account' => 'Durchschnittsausgaben pro Konto', + 'average_income_per_account' => 'Durchschnittseinkommen pro Konto', + 'total' => 'Gesamt', + 'description' => 'Beschreibung', + 'sum_of_period' => 'Summe des Zeitraums', + 'average_in_period' => 'Durchschnitt im Zeitraum', + 'account_role_defaultAsset' => 'Standard-Bestandskonto', + 'account_role_sharedAsset' => 'Gemeinsames Bestandskonto', + 'account_role_savingAsset' => 'Sparkonto', + 'account_role_ccAsset' => 'Kreditkarte', + 'account_role_cashWalletAsset' => 'Geldbörse', + 'budget_chart_click' => 'Klicken Sie auf einen Namen des Budgets in der obigen Tabelle, um ein Diagramm anzuzeigen.', + 'category_chart_click' => 'Klicken Sie auf einen Kategorienamen in der obigen Tabelle, um ein Diagramm zu sehen.', + 'in_out_accounts' => 'Einnahmen und Ausgaben je Kombination', + 'in_out_accounts_per_asset' => 'Einnahmen und Ausgaben (je Anlagenkonto)', + 'in_out_per_category' => 'Einnahmen und Ausgaben je Kategorie', + 'out_per_budget' => 'Ausgaben je Budget', + 'select_expense_revenue' => 'Ausgaben-/Einnahmenkonto auswählen', + 'multi_currency_report_sum' => 'Da diese Liste Konten mit mehreren Währungen enthält, ergeben die Summe(n), die angezeigt werden, möglicherweise keinen Sinn. Der Bericht wird immer auf Ihre Standardwährung zurückgesetzt.', + 'sum_in_default_currency' => 'Der Betrag wird immer in Ihrer Standardwährung angegeben.', + 'net_filtered_prefs' => 'Dieses Diagramm wird niemals Konten einbeziehen, die die Option "Im Eigenkapital enthalten" deaktiviert haben.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Diagram', - 'month' => 'Monat', - 'budget' => 'Budget', - 'spent' => 'Ausgegeben', - 'spent_capped' => 'Ausgegeben (gedeckelt)', - 'spent_in_budget' => 'Ausgegeben im Budget', - 'left_to_spend' => 'Verbleibend zum Ausgeben', - 'earned' => 'Eingenommen', - 'overspent' => 'Zuviel ausgegeben', - 'left' => 'Übrig', - 'max-amount' => 'Höchstbetrag', - 'min-amount' => 'Mindestbetrag', - 'journal-amount' => 'Aktueller Rechnungseintrag', - 'name' => 'Name', - 'date' => 'Datum', - 'date_and_time' => 'Datum und Uhrzeit', - 'time' => 'Uhrzeit', - 'paid' => 'Bezahlt', - 'unpaid' => 'Unbezahlt', - 'day' => 'Tag', - 'budgeted' => 'Vorgesehen', - 'period' => 'Zeitraum', - 'balance' => 'Kontostand', - 'in_out_period' => 'Ein- + Ausgaben im Zeitraum', - 'sum' => 'Summe', - 'summary' => 'Zusammenfasssung', - 'average' => 'Durchschnitt', - 'balanceFor' => 'Kontostand für „:name”', - 'no_tags' => '(keine Schlagwörter)', + 'chart' => 'Diagram', + 'month' => 'Monat', + 'budget' => 'Budget', + 'spent' => 'Ausgegeben', + 'spent_capped' => 'Ausgegeben (gedeckelt)', + 'spent_in_budget' => 'Ausgegeben im Budget', + 'left_to_spend' => 'Verbleibend zum Ausgeben', + 'earned' => 'Eingenommen', + 'overspent' => 'Zuviel ausgegeben', + 'left' => 'Übrig', + 'max-amount' => 'Höchstbetrag', + 'min-amount' => 'Mindestbetrag', + 'journal-amount' => 'Aktueller Rechnungseintrag', + 'name' => 'Name', + 'date' => 'Datum', + 'date_and_time' => 'Datum und Uhrzeit', + 'time' => 'Uhrzeit', + 'paid' => 'Bezahlt', + 'unpaid' => 'Unbezahlt', + 'day' => 'Tag', + 'budgeted' => 'Vorgesehen', + 'period' => 'Zeitraum', + 'balance' => 'Kontostand', + 'in_out_period' => 'Ein- + Ausgaben im Zeitraum', + 'sum' => 'Summe', + 'summary' => 'Zusammenfasssung', + 'average' => 'Durchschnitt', + 'balanceFor' => 'Kontostand für „:name”', + 'no_tags' => '(keine Schlagwörter)', + 'nothing_found' => '(nichts gefunden)', // piggy banks: - 'event_history' => 'Ereignisverlauf', - 'add_money_to_piggy' => 'Geld zum Sparschwein „:name” übertragen', - 'piggy_bank' => 'Sparschwein', - 'new_piggy_bank' => 'Neues Sparschwein', - 'store_piggy_bank' => 'Speichere neues Sparschwein', - 'stored_piggy_bank' => 'Neues Sparschwein „:name” speichern', - 'account_status' => 'Kontostatus', - 'left_for_piggy_banks' => 'Übrig für Sparschweine', - 'sum_of_piggy_banks' => 'Summe der Sparschweine', - 'saved_so_far' => 'Gespart', - 'left_to_save' => 'Zu Sparen', - 'suggested_amount' => 'Empfohlener monatliche Sparbetrag', - 'add_money_to_piggy_title' => 'Geld dem Sparschwein „:name” hinzufügen', - 'remove_money_from_piggy_title' => 'Geld dem Sparschwein „:name” entnehmen', - 'add' => 'Hinzufügen', - 'no_money_for_piggy' => 'Sie haben kein Geld, welches Sie in dieses Sparschwein geben können.', - 'suggested_savings_per_month' => 'Monatlich empfohlen', + 'event_history' => 'Ereignisverlauf', + 'add_money_to_piggy' => 'Geld zum Sparschwein „:name” übertragen', + 'piggy_bank' => 'Sparschwein', + 'new_piggy_bank' => 'Neues Sparschwein', + 'store_piggy_bank' => 'Speichere neues Sparschwein', + 'stored_piggy_bank' => 'Neues Sparschwein „:name” speichern', + 'account_status' => 'Kontostatus', + 'left_for_piggy_banks' => 'Übrig für Sparschweine', + 'sum_of_piggy_banks' => 'Summe der Sparschweine', + 'saved_so_far' => 'Gespart', + 'left_to_save' => 'Zu Sparen', + 'suggested_amount' => 'Empfohlener monatliche Sparbetrag', + 'add_money_to_piggy_title' => 'Geld dem Sparschwein „:name” hinzufügen', + 'remove_money_from_piggy_title' => 'Geld dem Sparschwein „:name” entnehmen', + 'add' => 'Hinzufügen', + 'no_money_for_piggy' => 'Sie haben kein Geld, welches Sie in dieses Sparschwein geben können.', + 'suggested_savings_per_month' => 'Monatlich empfohlen', - 'remove' => 'Entfernen', - 'max_amount_add' => 'Der maximale Betrag, den Sie hinzufügen können ist', - 'max_amount_remove' => 'Der maximale Betrag, den Sie entnehmen können ist', - 'update_piggy_button' => 'Sparschwein aktualisieren', - 'update_piggy_title' => 'Sparschwein „:name” aktualisieren', - 'updated_piggy_bank' => 'Sparschwein „:name” aktualisiert', - 'details' => 'Details', - 'events' => 'Ereignisse', - 'target_amount' => 'Zielbetrag', - 'start_date' => 'Startdatum', - 'no_start_date' => 'Kein Startzeitpunkt', - 'target_date' => 'Zieldatum', - 'no_target_date' => 'Kein Zieldatum', - 'table' => 'Tabelle', - 'delete_piggy_bank' => 'Sparschwein „:name” löschen', - 'cannot_add_amount_piggy' => ':amount konnte nicht zu „:name” hinzugefügt werden.', - 'cannot_remove_from_piggy' => ':amount konnte nicht aus „:name” entfernt werden', - 'deleted_piggy_bank' => 'Sparschwein „:name” gelöscht', - 'added_amount_to_piggy' => ':amount zu „:name” hinzugefügt', - 'removed_amount_from_piggy' => ':amount aus „:name” entfernt', - 'piggy_events' => 'Zugehörige Sparschweine', + 'remove' => 'Entfernen', + 'max_amount_add' => 'Der maximale Betrag, den Sie hinzufügen können ist', + 'max_amount_remove' => 'Der maximale Betrag, den Sie entnehmen können ist', + 'update_piggy_button' => 'Sparschwein aktualisieren', + 'update_piggy_title' => 'Sparschwein „:name” aktualisieren', + 'updated_piggy_bank' => 'Sparschwein „:name” aktualisiert', + 'details' => 'Details', + 'events' => 'Ereignisse', + 'target_amount' => 'Zielbetrag', + 'start_date' => 'Startdatum', + 'no_start_date' => 'Kein Startzeitpunkt', + 'target_date' => 'Zieldatum', + 'no_target_date' => 'Kein Zieldatum', + 'table' => 'Tabelle', + 'delete_piggy_bank' => 'Sparschwein „:name” löschen', + 'cannot_add_amount_piggy' => ':amount konnte nicht zu „:name” hinzugefügt werden.', + 'cannot_remove_from_piggy' => ':amount konnte nicht aus „:name” entfernt werden', + 'deleted_piggy_bank' => 'Sparschwein „:name” gelöscht', + 'added_amount_to_piggy' => ':amount zu „:name” hinzugefügt', + 'removed_amount_from_piggy' => ':amount aus „:name” entfernt', + 'piggy_events' => 'Zugehörige Sparschweine', // tags - 'delete_tag' => 'Schlagwort „:tag” entfernen', - 'deleted_tag' => 'Schlagwort „:tag” entfernt', - 'new_tag' => 'Neues Schlagwort erstellen', - 'edit_tag' => 'Schlagwort „:tag” bearbeiten', - 'updated_tag' => 'Schlagwort „:tag” aktualisiertern', - 'created_tag' => 'Schlagwort „:tag” wurde angelegt!', + 'delete_tag' => 'Schlagwort „:tag” entfernen', + 'deleted_tag' => 'Schlagwort „:tag” entfernt', + 'new_tag' => 'Neues Schlagwort erstellen', + 'edit_tag' => 'Schlagwort „:tag” bearbeiten', + 'updated_tag' => 'Schlagwort „:tag” aktualisiertern', + 'created_tag' => 'Schlagwort „:tag” wurde angelegt!', - 'transaction_journal_information' => 'Transaktionsinformationen', - 'transaction_journal_amount' => 'Betraginformation', - 'transaction_journal_meta' => 'Metainformationen', - 'transaction_journal_more' => 'Weitere Informationen', - 'basic_journal_information' => 'Allgemeine Buchungsinformationen', - 'transaction_journal_extra' => 'Zusätzliche Informationen', - 'att_part_of_journal' => 'Unter „:journal” gespeichert', - 'total_amount' => 'Gesamtbetrag', - 'number_of_decimals' => 'Anzahl der Nachkommastellen', + 'transaction_journal_information' => 'Transaktionsinformationen', + 'transaction_journal_amount' => 'Betraginformation', + 'transaction_journal_meta' => 'Metainformationen', + 'transaction_journal_more' => 'Weitere Informationen', + 'basic_journal_information' => 'Allgemeine Buchungsinformationen', + 'transaction_journal_extra' => 'Zusätzliche Informationen', + 'att_part_of_journal' => 'Unter „:journal” gespeichert', + 'total_amount' => 'Gesamtbetrag', + 'number_of_decimals' => 'Anzahl der Nachkommastellen', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'Die Einladung zu „:address“ wurde bereits eingelöst.', - 'invite_is_deleted' => 'Die Einladung zu „:address“ wurde gelöscht.', - 'invite_new_user_title' => 'Neuen Nutzer einladen', - 'invite_new_user_text' => 'Als Administrator können Sie Benutzer einladen, sich auf Ihrer Firefly III Administration zu registrieren. Über den direkten Link, den Sie mit ihnen teilen können, können diese ein Konto registrieren. Der eingeladene Benutzer und sein Einladungslink erscheinen in der unten stehenden Tabelle. Sie können den Einladungslink mit ihm teilen.', - 'invited_user_mail' => 'E-Mail Adresse', - 'invite_user' => 'Nutzer einladen', - 'user_is_invited' => 'E-Mail Adresse ":address" wurde zu Firefly III eingeladen', - 'administration' => 'Verwaltung', - 'system_settings' => 'Systemeinstellungen', - 'code_already_used' => 'Einladungscode wurde bereits verwendet', - 'user_administration' => 'Nutzerinformation', - 'list_all_users' => 'Alle Benutzer', - 'all_users' => 'Alle Benutzer', - 'instance_configuration' => 'Konfiguration', - 'firefly_instance_configuration' => 'Konfigurationsoptionen für Firefly III', - 'setting_single_user_mode' => 'Einzelnutzermodus', - 'setting_single_user_mode_explain' => 'Dies ist eine sehr fortschrittliche Funktion, welche aber sehr nützlich sein kann. Stellen Sie sicher, dass Sie die Dokumentation (❓-Symbol in der oberen rechten Ecke) lesen, bevor Sie fortfahren.', - 'store_configuration' => 'Konfiguration speichern', - 'single_user_administration' => 'Benutzerverwaltung für :email', - 'edit_user' => 'Benutzer :email bearbeiten', - 'hidden_fields_preferences' => 'Sie können weitere Buchungsoptionen in Ihren Einstellungen aktivieren.', - 'user_data_information' => 'Nutzerdaten', - 'user_information' => 'Benutzerinformationen', - 'total_size' => 'Gesamtgröße', - 'budget_or_budgets' => ':count Budget|:count Budgets', - 'budgets_with_limits' => ':count Budget mit konfiguriertem Betrag|:count Budgets mit konfiguriertem Betrag', - 'nr_of_rules_in_total_groups' => ':count_rules Regel(n) in :count_groups Gruppenregel(n)', - 'tag_or_tags' => ':count Schlagwort|:count Schlagwörter', - 'configuration_updated' => 'Die Konfiguration wurde aktualisiert', - 'setting_is_demo_site' => 'Demonstrationsseite', - 'setting_is_demo_site_explain' => 'Wenn sie diese Option auswählen, wird sich diese Installation wie eine Demonstrationsseite verhalten, was ungewollte Auswirkungen haben kann.', - 'block_code_bounced' => 'E-Mail-Nachricht(en) wurden abgewiesen', - 'block_code_expired' => 'Demo-Konto abgelaufen', - 'no_block_code' => 'Kein Grund für Block oder Benutzer nicht blockiert', - 'block_code_email_changed' => 'Der Benutzer hat die neue E-Mail-Adresse noch nicht bestätigt', - 'admin_update_email' => 'Im Gegensatz zur Profilseite wird der Benutzer NICHT benachrichtigt, dass seine E-Mail-Adresse geändert wurde!', - 'update_user' => 'Benutzer aktualisieren', - 'updated_user' => 'Nutzerdaten wurden geändert.', - 'delete_user' => 'Benutzer :email löschen', - 'user_deleted' => 'Der Nutzer wurde gelöscht', - 'send_test_email' => 'Test-E-Mail senden', - 'send_test_email_text' => 'Um zu sehen, ob Ihre Installation in der Lage ist, E-Mails zu senden oder Slack Nachrichten zu veröffentlichen, klicken Sie bitte auf diesen Button. Sie werden keinen Fehler sehen (falls vorhanden), die Protokolldateien werden Fehler jedoch auflisten. Sie können diese Taste so oft drücken, wie Sie möchten. Es gibt keine Spam-Kontrolle. Die Nachricht wird an :email gesendet und sollte anschließend in Kürze eintreffen.', - 'send_message' => 'Nachricht senden', - 'send_test_triggered' => 'Der Test wurde ausgelöst. Überprüfen Sie Ihren Posteingang und die Protokolldateien.', - 'give_admin_careful' => 'Benutzer mit Admin-Rechten können Ihnen Ihre Rechte entziehen. Seien Sie vorsichtig.', - 'admin_maintanance_title' => 'Wartungsarbeiten', - 'admin_maintanance_expl' => 'Einige praktische Schaltflächen für die Wartung von Firefly III', - 'admin_maintenance_clear_cache' => 'Cache leeren', - 'admin_notifications' => 'Admin-Benachrichtigungen', - 'admin_notifications_expl' => 'Die folgenden Mitteilungen können vom Administrator aktiviert oder deaktiviert werden. Wenn Sie diese Nachrichten auch über Slack erhalten möchten, stellen Sie die URL „eingehender Webhook” ein.', - 'admin_notification_check_user_new_reg' => 'Benutzer erhält nach der Registrierung eine Willkommensnachricht', - 'admin_notification_check_admin_new_reg' => 'Administrator(en) erhalten Benachrichtigung über die Registrierung neuer Benutzer', - 'admin_notification_check_new_version' => 'Eine neue Version ist verfügbar', - 'admin_notification_check_invite_created' => 'Ein Benutzer wurde zu Firefly III eingeladen', - 'admin_notification_check_invite_redeemed' => 'Eine Benutzereinladung wurde eingelöst', - 'all_invited_users' => 'Alle eingeladenen Benutzer', - 'save_notification_settings' => 'Einstellungen speichern', - 'notification_settings_saved' => 'Die Benachrichtigungseinstellungen wurden gespeichert', - - - 'split_transaction_title' => 'Beschreibung der Splittbuchung', - 'split_transaction_title_help' => 'Wenn Sie eine Splittbuchung anlegen, muss es eine eindeutige Beschreibung für alle Aufteilungen der Buchung geben.', - 'split_title_help' => 'Wenn Sie eine Splittbuchung anlegen, muss es eine eindeutige Beschreibung für alle Aufteilungen der Buchhaltung geben.', - 'you_create_transfer' => 'Sie erstellen eine Umbuchung.', - 'you_create_withdrawal' => 'Sie haben eine Ausgabe erstellt.', - 'you_create_deposit' => 'Sie haben eine Einnahme erstellt.', + 'invite_is_already_redeemed' => 'Die Einladung zu „:address“ wurde bereits eingelöst.', + 'invite_is_deleted' => 'Die Einladung zu „:address“ wurde gelöscht.', + 'invite_new_user_title' => 'Neuen Nutzer einladen', + 'invite_new_user_text' => 'Als Administrator können Sie Benutzer einladen, sich auf Ihrer Firefly III Administration zu registrieren. Über den direkten Link, den Sie mit ihnen teilen können, können diese ein Konto registrieren. Der eingeladene Benutzer und sein Einladungslink erscheinen in der unten stehenden Tabelle. Sie können den Einladungslink mit ihm teilen.', + 'invited_user_mail' => 'E-Mail Adresse', + 'invite_user' => 'Nutzer einladen', + 'user_is_invited' => 'E-Mail Adresse ":address" wurde zu Firefly III eingeladen', + 'administration' => 'Verwaltung', + 'system_settings' => 'Systemeinstellungen', + 'code_already_used' => 'Einladungscode wurde bereits verwendet', + 'user_administration' => 'Nutzerinformation', + 'list_all_users' => 'Alle Benutzer', + 'all_users' => 'Alle Benutzer', + 'instance_configuration' => 'Konfiguration', + 'firefly_instance_configuration' => 'Konfigurationsoptionen für Firefly III', + 'setting_single_user_mode' => 'Einzelnutzermodus', + 'setting_single_user_mode_explain' => 'Dies ist eine sehr fortschrittliche Funktion, welche aber sehr nützlich sein kann. Stellen Sie sicher, dass Sie die Dokumentation (❓-Symbol in der oberen rechten Ecke) lesen, bevor Sie fortfahren.', + 'store_configuration' => 'Konfiguration speichern', + 'single_user_administration' => 'Benutzerverwaltung für :email', + 'edit_user' => 'Benutzer :email bearbeiten', + 'hidden_fields_preferences' => 'Sie können weitere Buchungsoptionen in Ihren Einstellungen aktivieren.', + 'user_data_information' => 'Nutzerdaten', + 'user_information' => 'Benutzerinformationen', + 'total_size' => 'Gesamtgröße', + 'budget_or_budgets' => ':count Budget|:count Budgets', + 'budgets_with_limits' => ':count Budget mit konfiguriertem Betrag|:count Budgets mit konfiguriertem Betrag', + 'nr_of_rules_in_total_groups' => ':count_rules Regel(n) in :count_groups Gruppenregel(n)', + 'tag_or_tags' => ':count Schlagwort|:count Schlagwörter', + 'configuration_updated' => 'Die Konfiguration wurde aktualisiert', + 'setting_is_demo_site' => 'Demonstrationsseite', + 'setting_is_demo_site_explain' => 'Wenn sie diese Option auswählen, wird sich diese Installation wie eine Demonstrationsseite verhalten, was ungewollte Auswirkungen haben kann.', + 'block_code_bounced' => 'E-Mail-Nachricht(en) wurden abgewiesen', + 'block_code_expired' => 'Demo-Konto abgelaufen', + 'no_block_code' => 'Kein Grund für Block oder Benutzer nicht blockiert', + 'demo_user_export' => 'Der Demo-Benutzer kann keine Daten exportieren', + 'block_code_email_changed' => 'Der Benutzer hat die neue E-Mail-Adresse noch nicht bestätigt', + 'admin_update_email' => 'Im Gegensatz zur Profilseite wird der Benutzer NICHT benachrichtigt, dass seine E-Mail-Adresse geändert wurde!', + 'update_user' => 'Benutzer aktualisieren', + 'updated_user' => 'Nutzerdaten wurden geändert.', + 'delete_user' => 'Benutzer :email löschen', + 'user_deleted' => 'Der Nutzer wurde gelöscht', + 'send_test_email' => 'Test-E-Mail senden', + 'send_test_email_text' => 'Um zu sehen, ob Ihre Installation in der Lage ist, E-Mails zu senden oder Slack Nachrichten zu veröffentlichen, klicken Sie bitte auf diesen Button. Sie werden keinen Fehler sehen (falls vorhanden), die Protokolldateien werden Fehler jedoch auflisten. Sie können diese Taste so oft drücken, wie Sie möchten. Es gibt keine Spam-Kontrolle. Die Nachricht wird an :email gesendet und sollte anschließend in Kürze eintreffen.', + 'send_message' => 'Nachricht senden', + 'send_test_triggered' => 'Der Test wurde ausgelöst. Überprüfen Sie Ihren Posteingang und die Protokolldateien.', + 'give_admin_careful' => 'Benutzer mit Admin-Rechten können Ihnen Ihre Rechte entziehen. Seien Sie vorsichtig.', + 'admin_maintanance_title' => 'Wartungsarbeiten', + 'admin_maintanance_expl' => 'Einige praktische Schaltflächen für die Wartung von Firefly III', + 'admin_maintenance_clear_cache' => 'Cache leeren', + 'admin_notifications' => 'Admin-Benachrichtigungen', + 'admin_notifications_expl' => 'Die folgenden Mitteilungen können vom Administrator aktiviert oder deaktiviert werden. Wenn Sie diese Nachrichten auch über Slack erhalten möchten, stellen Sie die URL „eingehender Webhook” ein.', + 'admin_notification_check_user_new_reg' => 'Benutzer erhält nach der Registrierung eine Willkommensnachricht', + 'admin_notification_check_admin_new_reg' => 'Administrator(en) erhalten Benachrichtigung über die Registrierung neuer Benutzer', + 'admin_notification_check_new_version' => 'Eine neue Version ist verfügbar', + 'admin_notification_check_invite_created' => 'Ein Benutzer wurde zu Firefly III eingeladen', + 'admin_notification_check_invite_redeemed' => 'Eine Benutzereinladung wurde eingelöst', + 'all_invited_users' => 'Alle eingeladenen Benutzer', + 'save_notification_settings' => 'Einstellungen speichern', + 'notification_settings_saved' => 'Die Benachrichtigungseinstellungen wurden gespeichert', + 'split_transaction_title' => 'Beschreibung der Splittbuchung', + 'split_transaction_title_help' => 'Wenn Sie eine Splittbuchung anlegen, muss es eine eindeutige Beschreibung für alle Aufteilungen der Buchung geben.', + 'split_title_help' => 'Wenn Sie eine Splittbuchung anlegen, muss es eine eindeutige Beschreibung für alle Aufteilungen der Buchhaltung geben.', + 'you_create_transfer' => 'Sie erstellen eine Umbuchung.', + 'you_create_withdrawal' => 'Sie haben eine Ausgabe erstellt.', + 'you_create_deposit' => 'Sie haben eine Einnahme erstellt.', // links - 'journal_link_configuration' => 'Konfiguration der Buchungsverknüpfungen', - 'create_new_link_type' => 'Neuen Verknüpfungstyp erstellen', - 'store_new_link_type' => 'Neuen Verknüpfungstyp speichern', - 'update_link_type' => 'Verknüpfungstyp aktualisieren', - 'edit_link_type' => 'Verknüpfungstyp „:name” bearbeiten', - 'updated_link_type' => 'Verknüpfungstyp „:name” aktualisiert', - 'delete_link_type' => 'Verknüpfungstyp „:name” löschen', - 'deleted_link_type' => 'Verknüpfungstyp „:name” gelöscht', - 'stored_new_link_type' => 'Neuen Verknüpfungstyp „:name” speichern', - 'cannot_edit_link_type' => 'Verknüpfungstyp „:name” konnte nicht bearbeite werden', - 'link_type_help_name' => 'd.h. „Kopien”', - 'link_type_help_inward' => 'd.h. „Kopien”', - 'link_type_help_outward' => 'd.h. „wird kopiert durch”', - 'save_connections_by_moving' => 'Speichern Sie die Verknüpfung zwischen diesen Transaktionen, indem Sie sie in einen anderen Verknüpfungstyp verschieben:', - 'do_not_save_connection' => '(Verbindung nicht speichern)', - 'link_transaction' => 'Überweisung verknüpfen', - 'link_to_other_transaction' => 'Diese Buchung mit einer anderen Zahlung verknüpfen', - 'select_transaction_to_link' => 'Wählen Sie eine Buchung aus, mit der Sie diese Buchung verknüpfen möchten. Die Links sind derzeit in Firefly III unbenutzt (abgesehen davon, dass sie gezeigt werden), aber es ist geplant, dies in der Zukunft zu ändern. Verwenden Sie das Suchfeld, um eine Buchung entweder nach Titel oder nach ID auszuwählen. Wenn Sie benutzerdefinierte Verbindungstypen hinzufügen möchten, besuchen Sie den Administrationsbereich.', - 'this_transaction' => 'Diese Transaktion', - 'transaction' => 'Überweisung', - 'comments' => 'Kommentare', - 'link_notes' => 'Alle Notizen, die Sie über den Link speichern möchten.', - 'invalid_link_selection' => 'Diese Buchungen konnten nicht verknüpft werden', - 'selected_transaction' => 'Ausgewählte Buchung', - 'journals_linked' => 'Buchungen wurden verknüpft.', - 'journals_error_linked' => 'Diese Buchungen sind bereits verknüpft.', - 'journals_link_to_self' => 'Sie können eine Buchung nicht mit sich selbst verknüpfen.', - 'journal_links' => 'Buchungsverknüpfungen', - 'this_withdrawal' => 'Diese Ausgabe', - 'this_deposit' => 'Diese Einnahme', - 'this_transfer' => 'Diese Umbuchung', - 'overview_for_link' => 'Übersicht für den Verknüpfungstyp „:name”', - 'source_transaction' => 'Ursprungsüberweisung', - 'link_description' => 'Linkbeschreibung', - 'destination_transaction' => 'Zielüberweisung', - 'delete_journal_link' => 'Löscht die Verknüpfung zwischen :source und :destination', - 'deleted_link' => 'Verknüpfung löschen', + 'journal_link_configuration' => 'Konfiguration der Buchungsverknüpfungen', + 'create_new_link_type' => 'Neuen Verknüpfungstyp erstellen', + 'store_new_link_type' => 'Neuen Verknüpfungstyp speichern', + 'update_link_type' => 'Verknüpfungstyp aktualisieren', + 'edit_link_type' => 'Verknüpfungstyp „:name” bearbeiten', + 'updated_link_type' => 'Verknüpfungstyp „:name” aktualisiert', + 'delete_link_type' => 'Verknüpfungstyp „:name” löschen', + 'deleted_link_type' => 'Verknüpfungstyp „:name” gelöscht', + 'stored_new_link_type' => 'Neuen Verknüpfungstyp „:name” speichern', + 'cannot_edit_link_type' => 'Verknüpfungstyp „:name” konnte nicht bearbeite werden', + 'link_type_help_name' => 'd.h. „Kopien”', + 'link_type_help_inward' => 'd.h. „Kopien”', + 'link_type_help_outward' => 'd.h. „wird kopiert durch”', + 'save_connections_by_moving' => 'Speichern Sie die Verknüpfung zwischen diesen Transaktionen, indem Sie sie in einen anderen Verknüpfungstyp verschieben:', + 'do_not_save_connection' => '(Verbindung nicht speichern)', + 'link_transaction' => 'Überweisung verknüpfen', + 'link_to_other_transaction' => 'Diese Buchung mit einer anderen Zahlung verknüpfen', + 'select_transaction_to_link' => 'Wählen Sie eine Buchung aus, mit der Sie diese Buchung verknüpfen möchten. Die Links sind derzeit in Firefly III unbenutzt (abgesehen davon, dass sie gezeigt werden), aber es ist geplant, dies in der Zukunft zu ändern. Verwenden Sie das Suchfeld, um eine Buchung entweder nach Titel oder nach ID auszuwählen. Wenn Sie benutzerdefinierte Verbindungstypen hinzufügen möchten, besuchen Sie den Administrationsbereich.', + 'this_transaction' => 'Diese Transaktion', + 'transaction' => 'Überweisung', + 'comments' => 'Kommentare', + 'link_notes' => 'Alle Notizen, die Sie über den Link speichern möchten.', + 'invalid_link_selection' => 'Diese Buchungen konnten nicht verknüpft werden', + 'selected_transaction' => 'Ausgewählte Buchung', + 'journals_linked' => 'Buchungen wurden verknüpft.', + 'journals_error_linked' => 'Diese Buchungen sind bereits verknüpft.', + 'journals_link_to_self' => 'Sie können eine Buchung nicht mit sich selbst verknüpfen.', + 'journal_links' => 'Buchungsverknüpfungen', + 'this_withdrawal' => 'Diese Ausgabe', + 'this_deposit' => 'Diese Einnahme', + 'this_transfer' => 'Diese Umbuchung', + 'overview_for_link' => 'Übersicht für den Verknüpfungstyp „:name”', + 'source_transaction' => 'Ursprungsüberweisung', + 'link_description' => 'Linkbeschreibung', + 'destination_transaction' => 'Zielüberweisung', + 'delete_journal_link' => 'Löscht die Verknüpfung zwischen :source und :destination', + 'deleted_link' => 'Verknüpfung löschen', // link translations: - 'Paid_name' => 'Bezahlt', - 'Refund_name' => 'Rückzahlung', - 'Reimbursement_name' => 'Rückzahlung', - 'Related_name' => 'Zugehörig', - 'relates to_inward' => 'bezieht sich auf', - 'is (partially) refunded by_inward' => 'wird (teilweise) erstattet durch', - 'is (partially) paid for by_inward' => 'wird (teilweise) bezahlt durch', - 'is (partially) reimbursed by_inward' => 'wird (teilweise) beglichen durch', - 'inward_transaction' => 'Eingehende Zahlung', - 'outward_transaction' => 'Ausgehende Zahlung', - 'relates to_outward' => 'bezieht sich auf', - '(partially) refunds_outward' => 'erstattet (teilweise)', - '(partially) pays for_outward' => 'zahlt (teilweise) für', - '(partially) reimburses_outward' => 'begleicht (teilweise)', - 'is (partially) refunded by' => 'wird (teilweise) erstattet durch', - 'is (partially) paid for by' => 'wird (teilweise) bezahlt durch', - 'is (partially) reimbursed by' => 'wird (teilweise) beglichen durch', - 'relates to' => 'bezieht sich auf', - '(partially) refunds' => 'erstattet (teilweise)', - '(partially) pays for' => 'zahlt (teilweise) für', - '(partially) reimburses' => 'begleicht (teilweise)', + 'Paid_name' => 'Bezahlt', + 'Refund_name' => 'Rückzahlung', + 'Reimbursement_name' => 'Rückzahlung', + 'Related_name' => 'Zugehörig', + 'relates to_inward' => 'bezieht sich auf', + 'is (partially) refunded by_inward' => 'wird (teilweise) erstattet durch', + 'is (partially) paid for by_inward' => 'wird (teilweise) bezahlt durch', + 'is (partially) reimbursed by_inward' => 'wird (teilweise) beglichen durch', + 'inward_transaction' => 'Eingehende Zahlung', + 'outward_transaction' => 'Ausgehende Zahlung', + 'relates to_outward' => 'bezieht sich auf', + '(partially) refunds_outward' => 'erstattet (teilweise)', + '(partially) pays for_outward' => 'zahlt (teilweise) für', + '(partially) reimburses_outward' => 'begleicht (teilweise)', + 'is (partially) refunded by' => 'wird (teilweise) erstattet durch', + 'is (partially) paid for by' => 'wird (teilweise) bezahlt durch', + 'is (partially) reimbursed by' => 'wird (teilweise) beglichen durch', + 'relates to' => 'bezieht sich auf', + '(partially) refunds' => 'erstattet (teilweise)', + '(partially) pays for' => 'zahlt (teilweise) für', + '(partially) reimburses' => 'begleicht (teilweise)', // split a transaction: - 'splits' => 'Teile', - 'add_another_split' => 'Eine weitere Aufteilung hinzufügen', - 'cannot_edit_opening_balance' => 'Sie können die Eröffnungsbilanz eines Kontos nicht bearbeiten.', - 'no_edit_multiple_left' => 'Sie haben keine gültigen Buchungen zur Bearbeitung ausgewählt.', - 'breadcrumb_convert_group' => 'Buchung umwandeln', - 'convert_invalid_source' => 'Die Quellinformationen sind für Buchung #%d ungültig.', - 'convert_invalid_destination' => 'Die Zielinformationen sind für Buchung „#%d” ungültig.', - 'create_another' => 'Nach dem Speichern hierher zurückkehren, um ein weiteres zu erstellen.', - 'after_update_create_another' => 'Nach dem Aktualisieren hierher zurückkehren, um weiter zu bearbeiten.', - 'store_as_new' => 'Als neue Buchung speichern statt zu aktualisieren.', - 'reset_after' => 'Formular nach der Übermittlung zurücksetzen', - 'errors_submission' => 'Ihre Übermittlung ist fehlgeschlagen. Bitte überprüfen Sie die Fehler.', - 'transaction_expand_split' => 'Aufteilung erweitern', - 'transaction_collapse_split' => 'Aufteilung reduzieren', + 'splits' => 'Teile', + 'add_another_split' => 'Eine weitere Aufteilung hinzufügen', + 'cannot_edit_opening_balance' => 'Sie können die Eröffnungsbilanz eines Kontos nicht bearbeiten.', + 'no_edit_multiple_left' => 'Sie haben keine gültigen Buchungen zur Bearbeitung ausgewählt.', + 'breadcrumb_convert_group' => 'Buchung umwandeln', + 'convert_invalid_source' => 'Die Quellinformationen sind für Buchung #%d ungültig.', + 'convert_invalid_destination' => 'Die Zielinformationen sind für Buchung „#%d” ungültig.', + 'create_another' => 'Nach dem Speichern hierher zurückkehren, um ein weiteres zu erstellen.', + 'after_update_create_another' => 'Nach dem Aktualisieren hierher zurückkehren, um weiter zu bearbeiten.', + 'store_as_new' => 'Als neue Buchung speichern statt zu aktualisieren.', + 'reset_after' => 'Formular nach der Übermittlung zurücksetzen', + 'errors_submission' => 'Bei Ihren Eingaben stimmt etwas nicht. Bitte überprüfen Sie die unten stehenden Fehler.', + 'errors_submission_v2' => 'Bei Ihren Eingaben stimmt etwas nicht. Bitte überprüfen Sie die nachfolgenden Fehler: %{errorMessage}', + 'transaction_expand_split' => 'Aufteilung erweitern', + 'transaction_collapse_split' => 'Aufteilung reduzieren', // object groups - 'default_group_title_name' => '(ohne Gruppierung)', - 'default_group_title_name_plain' => 'ungruppiert', + 'default_group_title_name' => '(ohne Gruppierung)', + 'default_group_title_name_plain' => 'ungruppiert', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Lassen Sie uns jetzt ein Bestandskonto anlegen!', - 'no_accounts_intro_asset' => 'Sie verfügen noch über keine Bestandskonten. Bestandskonten sind Ihre Hauptkonten: Ihr Girokonto, Sparkonto, Gemeinschaftskonto oder sogar Ihre Kreditkarte.', - 'no_accounts_imperative_asset' => 'Um Firefly III nutzen zu können, müssen Sie mindestens ein Bestandskonto anlegen. Lassen Sie uns das jetzt tun:', - 'no_accounts_create_asset' => 'Bestandskonto anlegen', - 'no_accounts_title_expense' => 'Lassen Sie uns jetzt ein Ausgabenkonto anlegen!', - 'no_accounts_intro_expense' => 'Sie besitzen noch keine Ausgabenkonten. Ausgabenkonten sind die Orte, an denen Sie Geld ausgeben, wie z.B. in Geschäften und Supermärkten.', - 'no_accounts_imperative_expense' => 'Ausgabenkonten werden beim Anlegen von Buchungen automatisch angelegt, können aber auch manuell angelegt werden. Lassen Sie uns jetzt eines erstellen:', - 'no_accounts_create_expense' => 'Ein Ausgabenkonto anlegen', - 'no_accounts_title_revenue' => 'Lassen Sie uns jetzt ein Einnahmenkonto anlegen!', - 'no_accounts_intro_revenue' => 'Sie verfügen noch über keine Einnahmekonten. Einnahmekonten sind die Einrichtungen, von denen Sie Geld erhalten, wie z.B. von Ihrem Arbeitgeber.', - 'no_accounts_imperative_revenue' => 'Einnahmekonten werden beim Anlegen von Buchungen automatisch angelegt, können aber auch manuell angelegt werden. Lassen Sie uns jetzt eines erstellen:', - 'no_accounts_create_revenue' => 'Neues Einnahmenkonto erstellen', - 'no_accounts_title_liabilities' => 'Lassen Sie uns eine Verbindlichkeit einrichten!', - 'no_accounts_intro_liabilities' => 'Sie verfügen noch über keine Verbindlichkeiten. Verbindlichkeiten sind die Konten, die Ihre (Studenten-)Darlehen und andere Forderungen verwalten.', - 'no_accounts_imperative_liabilities' => 'Sie müssen diese Funktion nicht verwenden, aber sie kann nützlich sein, wenn Sie diese Dinge im Auge behalten möchten.', - 'no_accounts_create_liabilities' => 'Verbindlichkeit erstellen', - 'no_budgets_title_default' => 'Lassen Sie uns jetzt ein Budget erstellen', - 'no_rules_title_default' => 'Lassen Sie uns eine Regel erstellen', - 'no_budgets_intro_default' => 'Sie verfügen noch über keinen Budgets. Budgets werden verwendet, um Ihre Ausgaben in logische Gruppen zu gliedern, die Sie mit einem weichen Limit versehen können, um Ihre Ausgaben zu begrenzen.', - 'no_rules_intro_default' => 'Sie haben noch keine Regeln. Regeln sind mächtige Automatisierungen, die Transaktionen für Sie verarbeiten können.', - 'no_rules_imperative_default' => 'Regeln können sehr nützlich sein, wenn Sie Transaktionen verwalten. Lassen Sie uns jetzt eine erstellen:', - 'no_budgets_imperative_default' => 'Budgets sind die grundlegenden Instrumente des Finanzmanagements. Lassen Sie uns jetzt eines erstellen:', - 'no_budgets_create_default' => 'Budget erstellen', - 'no_rules_create_default' => 'Eine Regel erstellen', - 'no_categories_title_default' => 'Erstellen wir eine Kategorie!', - 'no_categories_intro_default' => 'Sie verfügen noch über keine Kategorien. Kategorien werden verwendet, um Ihre Buchungen zu verfeinern und mit der entsprechenden Kategorie zu kennzeichnen.', - 'no_categories_imperative_default' => 'Kategorien werden automatisch angelegt, wenn Sie Buchungen anlegen, können aber auch manuell angelegt werden. Lassen Sie uns jetzt eine erstellen:', - 'no_categories_create_default' => 'Eine Kategorie erstellen', - 'no_tags_title_default' => 'Lassen Sie uns jetzt ein Schlagwort anlegen!', - 'no_tags_intro_default' => 'Sie haben noch keine Schlagwörter angelegt. Schlagwörter werden verwendet, um Ihre Umsätze zu verfeinern und mit bestimmten Schlüsselwörtern zu versehen.', - 'no_tags_imperative_default' => 'Schlagwörter werden automatisch erstellt, wenn Sie Buchungen anlegen, aber Sie können sie auch manuell erstellen. Lassen Sie uns jetzt eines erstellen:', - 'no_tags_create_default' => 'Neues Schlagwort erstellen', - 'no_transactions_title_withdrawal' => 'Lassen Sie uns jetzt eine Auslage erstellen!', - 'no_transactions_intro_withdrawal' => 'Sie haben noch keine Ausgaben verbucht. Sie sollten Ausgabenseinträge erstellen, um Ihre Finanzen zu verwalten.', - 'no_transactions_imperative_withdrawal' => 'Haben Sie Geld ausgegeben? Dann sollten Sie es aufschreiben:', - 'no_transactions_create_withdrawal' => 'Eine neue Ausgabe erstellen', - 'no_transactions_title_deposit' => 'Lassen Sie uns nun einige Einnahmen erstellen!', - 'no_transactions_intro_deposit' => 'Sie haben noch keine Einnahmen verbucht. Sie sollten Einkommenseinträge erstellen, um Ihre Finanzen zu verwalten.', - 'no_transactions_imperative_deposit' => 'Haben Sie Geld erhalten? Dann sollten Sie es aufschreiben:', - 'no_transactions_create_deposit' => 'Eine Einnahme erstellen', - 'no_transactions_title_transfers' => 'Erstellen wir eine Umbuchung!', - 'no_transactions_intro_transfers' => 'Sie verfügen noch über keine Umbuchungen. Wenn Sie Geld zwischen Bestandskonten verschieben, wird es als Umbuchung erfasst.', - 'no_transactions_imperative_transfers' => 'Haben Sie Geld umgebucht? Dann sollten Sie es eintragen:', - 'no_transactions_create_transfers' => 'Eine Umbuchung erstellen', - 'no_piggies_title_default' => 'Lassen Sie uns nun ein Sparschwein erstellen!', - 'no_piggies_intro_default' => 'Sie haben noch keine Sparschweine. Sie können Sparschweine erstellen, um Ihre Ersparnisse zu teilen und den Überblick darüber zu behalten, wofür Sie sparen.', - 'no_piggies_imperative_default' => 'Haben Sie Dinge, auf die Sie sparen? Erstellen Sie ein 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' => 'Sie haben noch keine Rechnungen. Sie können Rechnungen erstellen, um laufende Ausgaben, wie zum Beispiel Ihre Versicherung oder Miete, nachzuverfolgen.', - 'no_bills_imperative_default' => 'Haben Sie regelmäßige Rechnungen? Erstellen Sie eine Rechnung und verfolgen Sie Ihre Zahlungen:', - 'no_bills_create_default' => 'Eine Rechnung erstellen', + 'no_accounts_title_asset' => 'Lassen Sie uns jetzt ein Bestandskonto anlegen!', + 'no_accounts_intro_asset' => 'Sie verfügen noch über keine Bestandskonten. Bestandskonten sind Ihre Hauptkonten: Ihr Girokonto, Sparkonto, Gemeinschaftskonto oder sogar Ihre Kreditkarte.', + 'no_accounts_imperative_asset' => 'Um Firefly III nutzen zu können, müssen Sie mindestens ein Bestandskonto anlegen. Lassen Sie uns das jetzt tun:', + 'no_accounts_create_asset' => 'Bestandskonto anlegen', + 'no_accounts_title_expense' => 'Lassen Sie uns jetzt ein Ausgabenkonto anlegen!', + 'no_accounts_intro_expense' => 'Sie besitzen noch keine Ausgabenkonten. Ausgabenkonten sind die Orte, an denen Sie Geld ausgeben, wie z.B. in Geschäften und Supermärkten.', + 'no_accounts_imperative_expense' => 'Ausgabenkonten werden beim Anlegen von Buchungen automatisch angelegt, können aber auch manuell angelegt werden. Lassen Sie uns jetzt eines erstellen:', + 'no_accounts_create_expense' => 'Ein Ausgabenkonto anlegen', + 'no_accounts_title_revenue' => 'Lassen Sie uns jetzt ein Einnahmenkonto anlegen!', + 'no_accounts_intro_revenue' => 'Sie verfügen noch über keine Einnahmekonten. Einnahmekonten sind die Einrichtungen, von denen Sie Geld erhalten, wie z.B. von Ihrem Arbeitgeber.', + 'no_accounts_imperative_revenue' => 'Einnahmekonten werden beim Anlegen von Buchungen automatisch angelegt, können aber auch manuell angelegt werden. Lassen Sie uns jetzt eines erstellen:', + 'no_accounts_create_revenue' => 'Neues Einnahmenkonto erstellen', + 'no_accounts_title_liabilities' => 'Lassen Sie uns eine Verbindlichkeit einrichten!', + 'no_accounts_intro_liabilities' => 'Sie verfügen noch über keine Verbindlichkeiten. Verbindlichkeiten sind die Konten, die Ihre (Studenten-)Darlehen und andere Forderungen verwalten.', + 'no_accounts_imperative_liabilities' => 'Sie müssen diese Funktion nicht verwenden, aber sie kann nützlich sein, wenn Sie diese Dinge im Auge behalten möchten.', + 'no_accounts_create_liabilities' => 'Verbindlichkeit erstellen', + 'no_budgets_title_default' => 'Lassen Sie uns jetzt ein Budget erstellen', + 'no_rules_title_default' => 'Lassen Sie uns eine Regel erstellen', + 'no_budgets_intro_default' => 'Sie verfügen noch über keinen Budgets. Budgets werden verwendet, um Ihre Ausgaben in logische Gruppen zu gliedern, die Sie mit einem weichen Limit versehen können, um Ihre Ausgaben zu begrenzen.', + 'no_rules_intro_default' => 'Sie haben noch keine Regeln. Regeln sind mächtige Automatisierungen, die Transaktionen für Sie verarbeiten können.', + 'no_rules_imperative_default' => 'Regeln können sehr nützlich sein, wenn Sie Transaktionen verwalten. Lassen Sie uns jetzt eine erstellen:', + 'no_budgets_imperative_default' => 'Budgets sind die grundlegenden Instrumente des Finanzmanagements. Lassen Sie uns jetzt eines erstellen:', + 'no_budgets_create_default' => 'Budget erstellen', + 'no_rules_create_default' => 'Eine Regel erstellen', + 'no_categories_title_default' => 'Erstellen wir eine Kategorie!', + 'no_categories_intro_default' => 'Sie verfügen noch über keine Kategorien. Kategorien werden verwendet, um Ihre Buchungen zu verfeinern und mit der entsprechenden Kategorie zu kennzeichnen.', + 'no_categories_imperative_default' => 'Kategorien werden automatisch angelegt, wenn Sie Buchungen anlegen, können aber auch manuell angelegt werden. Lassen Sie uns jetzt eine erstellen:', + 'no_categories_create_default' => 'Eine Kategorie erstellen', + 'no_tags_title_default' => 'Lassen Sie uns jetzt ein Schlagwort anlegen!', + 'no_tags_intro_default' => 'Sie haben noch keine Schlagwörter angelegt. Schlagwörter werden verwendet, um Ihre Umsätze zu verfeinern und mit bestimmten Schlüsselwörtern zu versehen.', + 'no_tags_imperative_default' => 'Schlagwörter werden automatisch erstellt, wenn Sie Buchungen anlegen, aber Sie können sie auch manuell erstellen. Lassen Sie uns jetzt eines erstellen:', + 'no_tags_create_default' => 'Neues Schlagwort erstellen', + 'no_transactions_title_withdrawal' => 'Lassen Sie uns jetzt eine Auslage erstellen!', + 'no_transactions_intro_withdrawal' => 'Sie haben noch keine Ausgaben verbucht. Sie sollten Ausgabenseinträge erstellen, um Ihre Finanzen zu verwalten.', + 'no_transactions_imperative_withdrawal' => 'Haben Sie Geld ausgegeben? Dann sollten Sie es aufschreiben:', + 'no_transactions_create_withdrawal' => 'Eine neue Ausgabe erstellen', + 'no_transactions_title_deposit' => 'Lassen Sie uns nun einige Einnahmen erstellen!', + 'no_transactions_intro_deposit' => 'Sie haben noch keine Einnahmen verbucht. Sie sollten Einkommenseinträge erstellen, um Ihre Finanzen zu verwalten.', + 'no_transactions_imperative_deposit' => 'Haben Sie Geld erhalten? Dann sollten Sie es aufschreiben:', + 'no_transactions_create_deposit' => 'Eine Einnahme erstellen', + 'no_transactions_title_transfers' => 'Erstellen wir eine Umbuchung!', + 'no_transactions_intro_transfers' => 'Sie verfügen noch über keine Umbuchungen. Wenn Sie Geld zwischen Bestandskonten verschieben, wird es als Umbuchung erfasst.', + 'no_transactions_imperative_transfers' => 'Haben Sie Geld umgebucht? Dann sollten Sie es eintragen:', + 'no_transactions_create_transfers' => 'Eine Umbuchung erstellen', + 'no_piggies_title_default' => 'Lassen Sie uns nun ein Sparschwein erstellen!', + 'no_piggies_intro_default' => 'Sie haben noch keine Sparschweine. Sie können Sparschweine erstellen, um Ihre Ersparnisse zu teilen und den Überblick darüber zu behalten, wofür Sie sparen.', + 'no_piggies_imperative_default' => 'Haben Sie Dinge, auf die Sie sparen? Erstellen Sie ein 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' => 'Sie haben noch keine Rechnungen. Sie können Rechnungen erstellen, um laufende Ausgaben, wie zum Beispiel Ihre Versicherung oder Miete, nachzuverfolgen.', + 'no_bills_imperative_default' => 'Haben Sie regelmäßige Rechnungen? Erstellen Sie eine Rechnung und verfolgen Sie Ihre Zahlungen:', + 'no_bills_create_default' => 'Eine Rechnung erstellen', // recurring transactions - 'create_right_now' => 'Jetzt erstellen', - 'no_new_transaction_in_recurrence' => 'Es wurde keine neue Buchung erstellt. Vielleicht wurde sie für dieses Datum bereits ausgelöst?', - 'recurrences' => 'Daueraufträge', - 'repeat_until_in_past' => 'Diese wiederkehrende Buchung wiederholte ab dem :date nicht mehr.', - 'recurring_calendar_view' => 'Kalender', - 'no_recurring_title_default' => 'Lassen Sie uns einen Dauerauftrag erstellen!', - 'no_recurring_intro_default' => 'Sie haben noch keine Daueraufträge erstellt. Diese können Sie nutzen, um automatisch Buchungen von Firefly III erstellen zu lassen.', - 'no_recurring_imperative_default' => 'Dies ist eine sehr fortschrittliche Funktion, welche aber sehr nützlich sein kann. Stellen Sie sicher, dass Sie die Dokumentation (❓-Symbol in der oberen rechten Ecke) lesen, bevor Sie fortfahren.', - 'no_recurring_create_default' => 'Dauerauftrag erstellen', - 'make_new_recurring' => 'Dauerauftrag erstellen', - 'recurring_daily' => 'Täglich', - 'recurring_weekly' => 'Wöchentlich am :weekday', - 'recurring_weekly_skip' => 'Jede :skip(./././.) Woche am :weekday', - 'recurring_monthly' => 'An jedem :dayOfMonth. Tag des Monats', - 'recurring_monthly_skip' => 'Jeden :skip(./././.) Monat am :dayOfMonth(./././.) Tag', - 'recurring_ndom' => 'An jedem :dayOfMonth. :weekday', - 'recurring_yearly' => 'Jährlich am :date', - 'overview_for_recurrence' => 'Übersicht der Daueraufträge „:title”', - 'warning_duplicates_repetitions' => 'In seltenen Fällen werden die Daten zweimal in dieser Liste angezeigt. Dies kann passieren, wenn mehrere Wiederholungen aufeinandertreffen. Firefly III erzeugt immer eine Transaktion pro Tag.', - 'created_transactions' => 'Ähnliche Buchungen', - 'expected_withdrawals' => 'Erwartete Rückzahlungen', - 'expected_deposits' => 'Erwartete Einnahmen', - 'expected_transfers' => 'Erwartete Überweisungen', - 'created_withdrawals' => 'Erstellte Rückzahlungen', - 'created_deposits' => 'Erstellte Einnahmen', - 'created_transfers' => 'Erstellte Überweisungen', - 'recurring_info' => 'Dauerauftrag :count/:total', - 'created_from_recurrence' => 'Erstellt aus Dauerauftrag „:title” (#:id)', - 'recurring_never_cron' => 'Es scheint, dass der Cron-Job, der notwendig ist, um Daueraufträge zu unterstützen, nie ausgeführt wurde. Das ist natürlich normal, wenn Sie gerade Firefly III installiert haben, aber dies sollte so schnell wie möglich eingerichtet werden. Bitte besuchen Sie die Hilfeseiten über das ❓-Symbol in der oberen rechten Ecke der Seite.', - 'recurring_cron_long_ago' => 'Es sieht so aus, als wäre es mehr als 36 Stunden her, dass der Cron-Job zur Unterstützung von Daueraufträgen zum letzten Mal ausgeführt wurde. Sind Sie sicher, dass es richtig eingestellt ist? Bitte schauen Sie sich die Hilfeseiten über dem ❓-Symbol oben rechts auf der Seite an.', + 'create_right_now' => 'Jetzt erstellen', + 'no_new_transaction_in_recurrence' => 'Es wurde keine neue Buchung erstellt. Vielleicht wurde sie für dieses Datum bereits ausgelöst?', + 'recurrences' => 'Daueraufträge', + 'repeat_until_in_past' => 'Diese wiederkehrende Buchung wiederholte ab dem :date nicht mehr.', + 'recurring_calendar_view' => 'Kalender', + 'no_recurring_title_default' => 'Lassen Sie uns einen Dauerauftrag erstellen!', + 'no_recurring_intro_default' => 'Sie haben noch keine Daueraufträge erstellt. Diese können Sie nutzen, um automatisch Buchungen von Firefly III erstellen zu lassen.', + 'no_recurring_imperative_default' => 'Dies ist eine sehr fortschrittliche Funktion, welche aber sehr nützlich sein kann. Stellen Sie sicher, dass Sie die Dokumentation (❓-Symbol in der oberen rechten Ecke) lesen, bevor Sie fortfahren.', + 'no_recurring_create_default' => 'Dauerauftrag erstellen', + 'make_new_recurring' => 'Dauerauftrag erstellen', + 'recurring_daily' => 'Täglich', + 'recurring_weekly' => 'Wöchentlich am :weekday', + 'recurring_weekly_skip' => 'Jede :skip(./././.) Woche am :weekday', + 'recurring_monthly' => 'An jedem :dayOfMonth. Tag des Monats', + 'recurring_monthly_skip' => 'Jeden :skip(./././.) Monat am :dayOfMonth(./././.) Tag', + 'recurring_ndom' => 'An jedem :dayOfMonth. :weekday', + 'recurring_yearly' => 'Jährlich am :date', + 'overview_for_recurrence' => 'Übersicht der Daueraufträge „:title”', + 'warning_duplicates_repetitions' => 'In seltenen Fällen werden die Daten zweimal in dieser Liste angezeigt. Dies kann passieren, wenn mehrere Wiederholungen aufeinandertreffen. Firefly III erzeugt immer eine Transaktion pro Tag.', + 'created_transactions' => 'Ähnliche Buchungen', + 'expected_withdrawals' => 'Erwartete Rückzahlungen', + 'expected_deposits' => 'Erwartete Einnahmen', + 'expected_transfers' => 'Erwartete Überweisungen', + 'created_withdrawals' => 'Erstellte Rückzahlungen', + 'created_deposits' => 'Erstellte Einnahmen', + 'created_transfers' => 'Erstellte Überweisungen', + 'recurring_info' => 'Dauerauftrag :count/:total', + 'created_from_recurrence' => 'Erstellt aus Dauerauftrag „:title” (#:id)', + 'recurring_never_cron' => 'Es scheint, dass der Cron-Job, der notwendig ist, um Daueraufträge zu unterstützen, nie ausgeführt wurde. Das ist natürlich normal, wenn Sie gerade Firefly III installiert haben, aber dies sollte so schnell wie möglich eingerichtet werden. Bitte besuchen Sie die Hilfeseiten über das ❓-Symbol in der oberen rechten Ecke der Seite.', + 'recurring_cron_long_ago' => 'Es sieht so aus, als wäre es mehr als 36 Stunden her, dass der Cron-Job zur Unterstützung von Daueraufträgen zum letzten Mal ausgeführt wurde. Sind Sie sicher, dass es richtig eingestellt ist? Bitte schauen Sie sich die Hilfeseiten über dem ❓-Symbol oben rechts auf der Seite an.', - 'create_new_recurrence' => 'Neuen Dauerauftrag erstellen', - 'help_first_date' => 'Geben Sie die erste erwartete Wiederholung an. Zeitpunkt muss in der Zukunft liegen.', - 'help_first_date_no_past' => 'Geben Sie die erste erwartete Wiederholung an. Firefly III erzeugt keine Buchungen die in der Vergangenheit liegen.', - 'no_currency' => '(ohne Währung)', - 'mandatory_for_recurring' => 'Erforderliche Wiederholungsinformationen', - 'mandatory_for_transaction' => 'Erforderliche Buchungsinformationen', - 'optional_for_recurring' => 'Optionale Wiederholungsinformationen', - 'optional_for_transaction' => 'Optionale Buchungsinformationen', - 'change_date_other_options' => 'Ändern Sie das „erste Datum”, um weitere Optionen anzuzeigen.', - 'mandatory_fields_for_tranaction' => 'Diese Werte enden in der/den zu erstellenden Buchung(en)', - 'click_for_calendar' => 'Klicken Sie hier für einen Kalender, der Ihnen anzeigt, wann sich die Buchung wiederholen würde.', - 'repeat_forever' => 'Wiederholt sich für immer', - 'repeat_until_date' => 'Wiederholen bis Datum', - 'repeat_times' => 'Wiederholen Sie mehrmals', - 'recurring_skips_one' => 'Alle anderen', - 'recurring_skips_more' => 'Überspringt :count Vorgänge', - 'store_new_recurrence' => 'Dauerauftrag speichern', - 'stored_new_recurrence' => 'Dauerauftrag „:title” erfolgreich gespeichert.', - 'edit_recurrence' => 'Dauerauftrag „:title” bearbeiten', - 'recurring_repeats_until' => 'Wiederholt sich bis :date', - 'recurring_repeats_forever' => 'Wiederholt sich für immer', - 'recurring_repeats_x_times' => 'Wiederholt :count mal|Wiederholt :count mal', - 'update_recurrence' => 'Dauerauftrag aktualisieren', - 'updated_recurrence' => 'Dauerauftrag ":title" aktualisiert', - 'recurrence_is_inactive' => 'Dieser Dauerauftrag ist nicht aktiv und erzeugt keine neuen Buchungen.', - 'delete_recurring' => 'Dauerauftrag „:title” löschen', - 'new_recurring_transaction' => 'Neuer Dauerauftrag', - 'help_weekend' => 'Was sollte Firefly III tun, wenn der Dauerauftrag auf einen Samstag oder Sonntag fällt?', - 'do_nothing' => 'Einfach die Buchung anlegen', - 'skip_transaction' => 'Ereignis überspringen', - 'jump_to_friday' => 'Die Buchung stattdessen am vorhergehenden Freitag ausführen', - 'jump_to_monday' => 'Die Buchung stattdessen am darauffolgenden Montag ausführen', - 'will_jump_friday' => 'Wird am Freitag statt am Wochenende ausgeführt.', - 'will_jump_monday' => 'Wird am Montag statt am Wochenende ausgeführt.', - 'except_weekends' => 'Außer an Wochenenden', - 'recurrence_deleted' => 'Dauerauftrag „:title” gelöscht', + 'create_new_recurrence' => 'Neuen Dauerauftrag erstellen', + 'help_first_date' => 'Geben Sie die erste erwartete Wiederholung an. Zeitpunkt muss in der Zukunft liegen.', + 'help_first_date_no_past' => 'Geben Sie die erste erwartete Wiederholung an. Firefly III erzeugt keine Buchungen die in der Vergangenheit liegen.', + 'no_currency' => '(ohne Währung)', + 'mandatory_for_recurring' => 'Erforderliche Wiederholungsinformationen', + 'mandatory_for_transaction' => 'Erforderliche Buchungsinformationen', + 'optional_for_recurring' => 'Optionale Wiederholungsinformationen', + 'optional_for_transaction' => 'Optionale Buchungsinformationen', + 'change_date_other_options' => 'Ändern Sie das „erste Datum”, um weitere Optionen anzuzeigen.', + 'mandatory_fields_for_tranaction' => 'Diese Werte enden in der/den zu erstellenden Buchung(en)', + 'click_for_calendar' => 'Klicken Sie hier für einen Kalender, der Ihnen anzeigt, wann sich die Buchung wiederholen würde.', + 'repeat_forever' => 'Wiederholt sich für immer', + 'repeat_until_date' => 'Wiederholen bis Datum', + 'repeat_times' => 'Wiederholen Sie mehrmals', + 'recurring_skips_one' => 'Alle anderen', + 'recurring_skips_more' => 'Überspringt :count Vorgänge', + 'store_new_recurrence' => 'Dauerauftrag speichern', + 'stored_new_recurrence' => 'Dauerauftrag „:title” erfolgreich gespeichert.', + 'edit_recurrence' => 'Dauerauftrag „:title” bearbeiten', + 'recurring_repeats_until' => 'Wiederholt sich bis :date', + 'recurring_repeats_forever' => 'Wiederholt sich für immer', + 'recurring_repeats_x_times' => 'Wiederholt :count mal|Wiederholt :count mal', + 'update_recurrence' => 'Dauerauftrag aktualisieren', + 'updated_recurrence' => 'Dauerauftrag ":title" aktualisiert', + 'recurrence_is_inactive' => 'Dieser Dauerauftrag ist nicht aktiv und erzeugt keine neuen Buchungen.', + 'delete_recurring' => 'Dauerauftrag „:title” löschen', + 'new_recurring_transaction' => 'Neuer Dauerauftrag', + 'help_weekend' => 'Was sollte Firefly III tun, wenn der Dauerauftrag auf einen Samstag oder Sonntag fällt?', + 'do_nothing' => 'Einfach die Buchung anlegen', + 'skip_transaction' => 'Ereignis überspringen', + 'jump_to_friday' => 'Die Buchung stattdessen am vorhergehenden Freitag ausführen', + 'jump_to_monday' => 'Die Buchung stattdessen am darauffolgenden Montag ausführen', + 'will_jump_friday' => 'Wird am Freitag statt am Wochenende ausgeführt.', + 'will_jump_monday' => 'Wird am Montag statt am Wochenende ausgeführt.', + 'except_weekends' => 'Außer an Wochenenden', + 'recurrence_deleted' => 'Dauerauftrag „:title” gelöscht', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Guthaben (:currency)', - 'box_spent_in_currency' => 'Ausgaben (:currency)', - 'box_earned_in_currency' => 'Einnahmen (:currency)', - 'box_budgeted_in_currency' => 'Eingeplant (:currency)', - 'box_bill_paid_in_currency' => 'Gezahlte Rechnungen (:currency)', - 'box_bill_unpaid_in_currency' => 'Unbezahlte Rechnungen (:currency)', - 'box_left_to_spend_in_currency' => 'Verbleibend zum Ausgeben (:currency)', - 'box_net_worth_in_currency' => 'Eigenkapital (:currency)', - 'box_spend_per_day' => 'Pro Tag verbleibend zum Ausgeben: :amount', + 'box_balance_in_currency' => 'Guthaben (:currency)', + 'box_spent_in_currency' => 'Ausgaben (:currency)', + 'box_earned_in_currency' => 'Einnahmen (:currency)', + 'box_budgeted_in_currency' => 'Eingeplant (:currency)', + 'box_bill_paid_in_currency' => 'Gezahlte Rechnungen (:currency)', + 'box_bill_unpaid_in_currency' => 'Unbezahlte Rechnungen (:currency)', + 'box_left_to_spend_in_currency' => 'Verbleibend zum Ausgeben (:currency)', + 'box_net_worth_in_currency' => 'Eigenkapital (:currency)', + 'box_spend_per_day' => 'Pro Tag verbleibend zum Ausgeben: :amount', // debug page - 'debug_page' => 'Fehlersuche-Seite', - 'debug_submit_instructions' => 'Wenn Sie auf Probleme stoßen, können Sie die Informationen in diesem Feld als Fehlerbehebungsinformationen verwenden. Bitte kopieren Sie die Informationen per Kopieren und Einfügen in ein neues oder bestehendes GitHub issue. Dadurch wird eine übersichtliche Tabelle erzeugt, die zur schnellen Diagnose Ihres Problems verwendet werden kann.', - 'debug_pretty_table' => 'Wenn Sie das Feld unten in eine GitHub-Ausgabe kopieren/einfügen, wird eine Tabelle generiert. Bitte diesen Text nicht in Backticks oder Anführungszeichen setzen.', - 'debug_additional_data' => 'Sie können auch den Inhalt des Feldes unten freigeben. Sie können ihn auch durch Kopieren und Einfügen in eine neue oder bestehende GitHub-Ausgabe einfügen. Der Inhalt dieses Feldes kann jedoch private Informationen wie Kontonamen, Transaktionsdetails oder E-Mail-Adressen enthalten.', + 'debug_page' => 'Fehlersuche-Seite', + 'debug_submit_instructions' => 'Wenn Sie auf Probleme stoßen, können Sie die Informationen in diesem Feld als Fehlerbehebungsinformationen verwenden. Bitte kopieren Sie die Informationen per Kopieren und Einfügen in ein neues oder bestehendes GitHub issue. Dadurch wird eine übersichtliche Tabelle erzeugt, die zur schnellen Diagnose Ihres Problems verwendet werden kann.', + 'debug_pretty_table' => 'Wenn Sie das Feld unten in eine GitHub-Ausgabe kopieren/einfügen, wird eine Tabelle generiert. Bitte diesen Text nicht in Backticks oder Anführungszeichen setzen.', + 'debug_additional_data' => 'Sie können auch den Inhalt des Feldes unten freigeben. Sie können ihn auch durch Kopieren und Einfügen in eine neue oder bestehende GitHub-Ausgabe einfügen. Der Inhalt dieses Feldes kann jedoch private Informationen wie Kontonamen, Transaktionsdetails oder E-Mail-Adressen enthalten.', // object groups - 'object_groups_menu_bar' => 'Gruppen', - 'object_groups_page_title' => 'Gruppen', - 'object_groups_breadcrumb' => 'Gruppen', - 'object_groups_index' => 'Übersicht', - 'object_groups' => 'Gruppen', - 'object_groups_empty_explain' => 'Einige Dinge in Firefly III lassen sich in Gruppen einteilen. Sparschweine zum Beispiel verfügen über ein Feld "Gruppe" in den Bearbeitungs- und Erstellungsmasken. Wenn Sie dieses Feld einstellen, können Sie die Namen und die Reihenfolge der Gruppen auf dieser Seite bearbeiten. Weitere Informationen finden Sie auf den Hilfeseiten oben rechts unter dem ❓-Symbol.', - 'object_group_title' => 'Titel', - 'edit_object_group' => 'Gruppe „:title” bearbeiten', - 'delete_object_group' => 'Gruppe „:title” löschen', - 'update_object_group' => 'Gruppe aktualisieren', - 'updated_object_group' => 'Gruppe „:title” erfolgreich aktualisiert', - 'deleted_object_group' => 'Gruppe „:title” erfolgreich entfernt', - 'object_group' => 'Gruppe', + 'object_groups_menu_bar' => 'Gruppen', + 'object_groups_page_title' => 'Gruppen', + 'object_groups_breadcrumb' => 'Gruppen', + 'object_groups_index' => 'Übersicht', + 'object_groups' => 'Gruppen', + 'object_groups_empty_explain' => 'Einige Dinge in Firefly III lassen sich in Gruppen einteilen. Sparschweine zum Beispiel verfügen über ein Feld "Gruppe" in den Bearbeitungs- und Erstellungsmasken. Wenn Sie dieses Feld einstellen, können Sie die Namen und die Reihenfolge der Gruppen auf dieser Seite bearbeiten. Weitere Informationen finden Sie auf den Hilfeseiten oben rechts unter dem ❓-Symbol.', + 'object_group_title' => 'Titel', + 'edit_object_group' => 'Gruppe „:title” bearbeiten', + 'delete_object_group' => 'Gruppe „:title” löschen', + 'update_object_group' => 'Gruppe aktualisieren', + 'updated_object_group' => 'Gruppe „:title” erfolgreich aktualisiert', + 'deleted_object_group' => 'Gruppe „:title” erfolgreich entfernt', + 'object_group' => 'Gruppe', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit-Logeinträge', - 'ale_action_log_add' => ':amount zum Sparschwein ":name" hinzugefügt', - 'ale_action_log_remove' => ':amount aus Sparschwein ":name " entfernt', - 'ale_action_clear_budget' => 'Aus Budget entfernt', - 'ale_action_update_group_title' => 'Titel der Buchungsgruppe aktualisiert', - 'ale_action_update_date' => 'Buchungsdatum aktualisiert', - 'ale_action_update_order' => 'Buchungsreihenfolge aktualisiert', - 'ale_action_clear_category' => 'Aus Kategorie entfernt', - 'ale_action_clear_notes' => 'Notiz entfernt', - 'ale_action_clear_tag' => 'Schlagwort geleert', - 'ale_action_clear_all_tags' => 'Alle Schlagwörter geleert', - 'ale_action_set_bill' => 'Verknüpft mit Rechnung', - 'ale_action_switch_accounts' => 'Quell- und Zielkonto getauscht', - 'ale_action_set_budget' => 'Budget festlegen', - 'ale_action_set_category' => 'Kategorie festlegen', - 'ale_action_set_source' => 'Quellkonto festlegen', - 'ale_action_set_destination' => 'Zielkonto festlegen', - 'ale_action_update_transaction_type' => 'Buchungstyp geändert', - 'ale_action_update_notes' => 'Notizen aktualisiert', - 'ale_action_update_description' => 'Beschreibung geändert', - 'ale_action_add_to_piggy' => 'Sparschwein', - 'ale_action_remove_from_piggy' => 'Sparschwein', - 'ale_action_add_tag' => 'Schlagwort hinzugefügt', + 'audit_log_entries' => 'Audit-Logeinträge', + 'ale_action_log_add' => ':amount zum Sparschwein ":name" hinzugefügt', + 'ale_action_log_remove' => ':amount aus Sparschwein ":name " entfernt', + 'ale_action_clear_budget' => 'Aus Budget entfernt', + 'ale_action_update_group_title' => 'Titel der Buchungsgruppe aktualisiert', + 'ale_action_update_date' => 'Buchungsdatum aktualisiert', + 'ale_action_update_order' => 'Buchungsreihenfolge aktualisiert', + 'ale_action_clear_category' => 'Aus Kategorie entfernt', + 'ale_action_clear_notes' => 'Notiz entfernt', + 'ale_action_clear_tag' => 'Schlagwort geleert', + 'ale_action_clear_all_tags' => 'Alle Schlagwörter geleert', + 'ale_action_set_bill' => 'Verknüpft mit Rechnung', + 'ale_action_switch_accounts' => 'Quell- und Zielkonto getauscht', + 'ale_action_set_budget' => 'Budget festlegen', + 'ale_action_set_category' => 'Kategorie festlegen', + 'ale_action_set_source' => 'Quellkonto festlegen', + 'ale_action_set_destination' => 'Zielkonto festlegen', + 'ale_action_update_transaction_type' => 'Buchungstyp geändert', + 'ale_action_update_notes' => 'Notizen aktualisiert', + 'ale_action_update_description' => 'Beschreibung geändert', + 'ale_action_add_to_piggy' => 'Sparschwein', + 'ale_action_remove_from_piggy' => 'Sparschwein', + 'ale_action_add_tag' => 'Schlagwort hinzugefügt', // dashboard - 'enable_auto_convert' => 'Währungsumrechnung aktivieren', - 'disable_auto_convert' => 'Währungsumrechnung deaktivieren', - + 'enable_auto_convert' => 'Währungsumrechnung aktivieren', + 'disable_auto_convert' => 'Währungsumrechnung deaktivieren', ]; /* diff --git a/resources/lang/de_DE/form.php b/resources/lang/de_DE/form.php index 11a943e338..220bc87957 100644 --- a/resources/lang/de_DE/form.php +++ b/resources/lang/de_DE/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Name der Bank', - 'bank_balance' => 'Kontostand', - 'savings_balance' => 'Sparguthaben', - 'credit_card_limit' => 'Kreditkartenlimit', - 'automatch' => 'Automatisch reagieren', - 'skip' => 'Überspringen', - 'enabled' => 'Aktiviert', - 'name' => 'Name', - 'active' => 'Aktiv', - 'amount_min' => 'Mindestbetrag', - 'amount_max' => 'Höchstbetrag', - 'match' => 'Reagiert auf', - 'strict' => 'Strenger Modus', - 'repeat_freq' => 'Wiederholungen', - 'object_group' => 'Gruppe', - 'location' => 'Herkunft', - 'update_channel' => 'Aktualisierungskanal', - 'currency_id' => 'Währung', - 'transaction_currency_id' => 'Währung', - 'auto_budget_currency_id' => 'Währung', - 'external_ip' => 'Die externe IP-Adresse Ihres Servers', - 'attachments' => 'Anhänge', - 'BIC' => 'BIC', - 'verify_password' => 'Passwortsicherheit überprüfen', - 'source_account' => 'Quellkonto', - 'destination_account' => 'Zielkonto', - 'asset_destination_account' => 'Zielkonto', - 'include_net_worth' => 'Im Eigenkapital enthalten', - 'asset_source_account' => 'Quellkonto', - 'journal_description' => 'Beschreibung', - 'note' => 'Notizen', - 'currency' => 'Währung', - 'account_id' => 'Bestandskonto', - 'budget_id' => 'Budget', - 'bill_id' => 'Rechnung', - 'opening_balance' => 'Eröffnungsbilanz', - 'tagMode' => 'Schlagwort-Modus', - 'virtual_balance' => 'Virtueller Kontostand', + 'bank_name' => 'Name der Bank', + 'bank_balance' => 'Kontostand', + 'savings_balance' => 'Sparguthaben', + 'credit_card_limit' => 'Kreditkartenlimit', + 'automatch' => 'Automatisch reagieren', + 'skip' => 'Überspringen', + 'enabled' => 'Aktiviert', + 'name' => 'Name', + 'active' => 'Aktiv', + 'amount_min' => 'Mindestbetrag', + 'amount_max' => 'Höchstbetrag', + 'match' => 'Reagiert auf', + 'strict' => 'Strenger Modus', + 'repeat_freq' => 'Wiederholungen', + 'object_group' => 'Gruppe', + 'location' => 'Herkunft', + 'update_channel' => 'Aktualisierungskanal', + 'currency_id' => 'Währung', + 'transaction_currency_id' => 'Währung', + 'auto_budget_currency_id' => 'Währung', + 'external_ip' => 'Die externe IP-Adresse Ihres Servers', + 'attachments' => 'Anhänge', + 'BIC' => 'BIC', + 'verify_password' => 'Passwortsicherheit überprüfen', + 'source_account' => 'Quellkonto', + 'destination_account' => 'Zielkonto', + 'asset_destination_account' => 'Zielkonto', + 'include_net_worth' => 'Im Eigenkapital enthalten', + 'asset_source_account' => 'Quellkonto', + 'journal_description' => 'Beschreibung', + 'note' => 'Notizen', + 'currency' => 'Währung', + 'account_id' => 'Bestandskonto', + 'budget_id' => 'Budget', + 'bill_id' => 'Rechnung', + 'opening_balance' => 'Eröffnungsbilanz', + 'tagMode' => 'Schlagwort-Modus', + 'virtual_balance' => 'Virtueller Kontostand', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Zielbetrag', 'account_role' => 'Kontenfunktion', 'opening_balance_date' => 'Eröffnungsbilanzdatum', @@ -98,7 +96,7 @@ return [ 'returnHereUpdateExplanation' => 'Nach dem Update, hierher zurückkehren.', 'description' => 'Beschreibung', 'expense_account' => 'Ausgabenkonto', - 'revenue_account' => 'Kreditor (Einnahme)', + 'revenue_account' => 'Einnahmenkonto', 'decimal_places' => 'Nachkommastellen', 'destination_amount' => 'Betrag (Ziel)', 'new_email_address' => 'Neue E-Mail-Adresse', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Sind Sie sicher, dass Sie die Überweisung mit dem Namen ":description" löschen möchten?', 'mass_journal_are_you_sure' => 'Sind Sie sicher, dass Sie diese Überweisung löschen möchten?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Möchten Sie das Schlagwort „:tag” wirklich löschen?', 'journal_link_areYouSure' => 'Sind Sie sicher, dass Sie die Verknüpfung zwischen :source und :destination löschen möchten?', 'linkType_areYouSure' => 'Möchten Sie den Verknüpfungstyp „:name” („:inward”/„:outward”) wirklich löschen?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Titel', - // admin 'domain' => 'Domain', 'single_user_mode' => 'Registrierung deaktivieren', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS-Konto', 'local_account' => 'Firefly-III-Konto', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Datum ab', - 'to_date' => 'Datum bis', - 'due_date' => 'Fälligkeitstermin', - 'payment_date' => 'Zahlungsdatum', - 'invoice_date' => 'Rechnungsdatum', - 'internal_reference' => 'Interner Verweis', - 'inward' => 'Beschreibung der Eingänge', - 'outward' => 'Beschreibung der Ausgänge', - 'rule_group_id' => 'Regelgruppe', - 'transaction_description' => 'Beschreibung der Buchung', - 'first_date' => 'Erstes Datum', - 'transaction_type' => 'Art der Buchung', - 'repeat_until' => 'Wiederholen bis', - 'recurring_description' => 'Beschreibung des Dauerauftrags', - 'repetition_type' => 'Art der Wiederholung', - 'foreign_currency_id' => 'Fremdwährung', - 'repetition_end' => 'Wiederholung endet', - 'repetitions' => 'Wiederholungen', - 'calendar' => 'Kalender', - 'weekend' => 'Wochenende', - 'client_secret' => 'Kundengeheimnis', - 'withdrawal_destination_id' => 'Zielkonto', - 'deposit_source_id' => 'Quellkonto', - 'expected_on' => 'Erwartet am', - 'paid' => 'Bezahlt', - 'auto_budget_type' => 'Automatisches Budget', - 'auto_budget_amount' => 'Betrag des automatischen Budget', - 'auto_budget_period' => 'Zeitraum des automatischen Budget', - 'collected' => 'Gesammelt', - 'submitted' => 'Übermittelt', - 'key' => 'Schlüssel', - 'value' => 'Inhalt der Aufzeichnungen', - 'webhook_delivery' => 'Zustellung', - 'webhook_response' => 'Antwort', - 'webhook_trigger' => 'Auslöser', + 'from_date' => 'Datum ab', + 'to_date' => 'Datum bis', + 'due_date' => 'Fälligkeitstermin', + 'payment_date' => 'Zahlungsdatum', + 'invoice_date' => 'Rechnungsdatum', + 'internal_reference' => 'Interne Referenz', + 'inward' => 'Beschreibung der Eingänge', + 'outward' => 'Beschreibung der Ausgänge', + 'rule_group_id' => 'Regelgruppe', + 'transaction_description' => 'Beschreibung der Buchung', + 'first_date' => 'Erstes Datum', + 'transaction_type' => 'Art der Buchung', + 'repeat_until' => 'Wiederholen bis', + 'recurring_description' => 'Beschreibung des Dauerauftrags', + 'repetition_type' => 'Art der Wiederholung', + 'foreign_currency_id' => 'Fremdwährung', + 'repetition_end' => 'Wiederholung endet', + 'repetitions' => 'Wiederholungen', + 'calendar' => 'Kalender', + 'weekend' => 'Wochenende', + 'client_secret' => 'Kundengeheimnis', + 'withdrawal_destination_id' => 'Zielkonto', + 'deposit_source_id' => 'Quellkonto', + 'expected_on' => 'Erwartet am', + 'paid' => 'Bezahlt', + 'auto_budget_type' => 'Automatisches Budget', + 'auto_budget_amount' => 'Betrag des automatischen Budget', + 'auto_budget_period' => 'Zeitraum des automatischen Budget', + 'collected' => 'Gesammelt', + 'submitted' => 'Übermittelt', + 'key' => 'Schlüssel', + 'value' => 'Inhalt der Aufzeichnungen', + 'webhook_delivery' => 'Zustellung', + 'webhook_response' => 'Antwort', + 'webhook_trigger' => 'Auslöser', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/de_DE/intro.php b/resources/lang/de_DE/intro.php index e2ca176931..c6dc317f19 100644 --- a/resources/lang/de_DE/intro.php +++ b/resources/lang/de_DE/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Wilkommen auf der Startseite von Firefly III. Bitte nehmen Sie sich die Zeit, um ein Gefühl dafür zu bekommen, wie Firefly III funktioniert.', - 'index_accounts-chart' => 'Dieses Diagramm zeigt den aktuellen Saldo Ihrer Bestandskonten. Sie können die anzuzeigenden Konten in Ihren Einstellungen auswählen.', - 'index_box_out_holder' => 'Diese kleine und ihre benachbarten Boxen geben Ihnen einen schnellen Überblick über Ihre finanzielle Situation.', - 'index_help' => 'Wenn Sie jemals Hilfe bei einer Seite oder einem Formular benötigen, drücken Sie diese Taste.', - 'index_outro' => 'Die meisten Seiten von Firefly III werden mit einer kleinen Tour wie dieser beginnen. Bitte kontaktieren Sie mich, wenn Sie Fragen oder Kommentare haben. Viel Spaß!', - 'index_sidebar-toggle' => 'Um neue Transaktionen, Konten oder andere Dinge zu erstellen, verwenden Sie das Menü unter diesem Symbol.', - 'index_cash_account' => 'Dies sind die bisher angelegten Konten. Sie können das Geldkonto verwenden, um die Barausgaben zu verfolgen, aber es ist natürlich nicht zwingend erforderlich.', + 'index_intro' => 'Wilkommen auf der Startseite von Firefly III. Bitte nehmen Sie sich die Zeit, um ein Gefühl dafür zu bekommen, wie Firefly III funktioniert.', + 'index_accounts-chart' => 'Dieses Diagramm zeigt den aktuellen Saldo Ihrer Bestandskonten. Sie können die anzuzeigenden Konten in Ihren Einstellungen auswählen.', + 'index_box_out_holder' => 'Diese kleine und ihre benachbarten Boxen geben Ihnen einen schnellen Überblick über Ihre finanzielle Situation.', + 'index_help' => 'Wenn Sie jemals Hilfe bei einer Seite oder einem Formular benötigen, drücken Sie diese Taste.', + 'index_outro' => 'Die meisten Seiten von Firefly III werden mit einer kleinen Tour wie dieser beginnen. Bitte kontaktieren Sie mich, wenn Sie Fragen oder Kommentare haben. Viel Spaß!', + 'index_sidebar-toggle' => 'Um neue Transaktionen, Konten oder andere Dinge zu erstellen, verwenden Sie das Menü unter diesem Symbol.', + 'index_cash_account' => 'Dies sind die bisher angelegten Konten. Sie können das Geldkonto verwenden, um die Barausgaben zu verfolgen, aber es ist natürlich nicht zwingend erforderlich.', // transactions - 'transactions_create_basic_info' => 'Geben Sie die wesentlichen Informationen zu Ihrer Buchung ein. Quelle, Ziel, Datum und Beschreibung.', - 'transactions_create_amount_info' => 'Geben Sie den Betrag der Buchung ein. Falls erforderlich, werden die Felder für Auslandsbetragsinformationen automatisch aktualisiert.', - 'transactions_create_optional_info' => 'Alle diese Felder sind optional. Wenn Sie hier zusätzlich Informationen eingeben, werden Ihre Buchungen besser organisiert.', - 'transactions_create_split' => 'Wenn Sie eine Buchung aufteilen möchten, fügen Sie mit dieser Schaltfläche weitere Aufteilungen hinzu', + 'transactions_create_basic_info' => 'Geben Sie die wesentlichen Informationen zu Ihrer Buchung ein. Quelle, Ziel, Datum und Beschreibung.', + 'transactions_create_amount_info' => 'Geben Sie den Betrag der Buchung ein. Falls erforderlich, werden die Felder für Auslandsbetragsinformationen automatisch aktualisiert.', + 'transactions_create_optional_info' => 'Alle diese Felder sind optional. Wenn Sie hier zusätzlich Informationen eingeben, werden Ihre Buchungen besser organisiert.', + 'transactions_create_split' => 'Wenn Sie eine Buchung aufteilen möchten, fügen Sie mit dieser Schaltfläche weitere Aufteilungen hinzu', // create account: - 'accounts_create_iban' => 'Geben Sie Ihren Konten eine gültige IBAN. Dies könnte einen Datenimport in Zukunft sehr einfach machen.', - 'accounts_create_asset_opening_balance' => 'Bestandskonten können eine "Eröffnungsbilanz" haben, welche den Beginn des Verlaufs dieses Kontos in Firefly III angibt.', - 'accounts_create_asset_currency' => 'Firefly III unterstützt mehrere Währungen. Bestandskonten ist eine Hauptwährung zugeordnet, die Sie hier festlegen müssen.', - 'accounts_create_asset_virtual' => 'Es kann manchmal helfen, Ihrem Konto ein virtuelles Gleichgewicht zu geben: eine zusätzliche Menge, die dem tatsächlichen Kontostand immer hinzugefügt oder daraus entfernt wird.', + 'accounts_create_iban' => 'Geben Sie Ihren Konten eine gültige IBAN. Dies könnte einen Datenimport in Zukunft sehr einfach machen.', + 'accounts_create_asset_opening_balance' => 'Bestandskonten können eine "Eröffnungsbilanz" haben, welche den Beginn des Verlaufs dieses Kontos in Firefly III angibt.', + 'accounts_create_asset_currency' => 'Firefly III unterstützt mehrere Währungen. Bestandskonten ist eine Hauptwährung zugeordnet, die Sie hier festlegen müssen.', + 'accounts_create_asset_virtual' => 'Es kann manchmal helfen, Ihrem Konto ein virtuelles Gleichgewicht zu geben: eine zusätzliche Menge, die dem tatsächlichen Kontostand immer hinzugefügt oder daraus entfernt wird.', // budgets index - 'budgets_index_intro' => 'Budgets werden zur Verwaltung Ihrer Finanzen verwendet und bilden eine der Kernfunktionen von Firefly III.', - 'budgets_index_set_budget' => 'Stellen Sie Ihr Gesamt-Budget für jeden Zeitraum so ein, dass Firefly III Ihnen mitteilen kann, ob Sie alle verfügbaren Gelder einem Budget zugeordnet haben.', - 'budgets_index_see_expenses_bar' => 'Dieser Balken wird sich langsam füllen, wenn Sie Geld ausgeben.', - 'budgets_index_navigate_periods' => 'Navigieren Sie durch Zeitabschnitte, um Budgets im Voraus festzulegen.', - 'budgets_index_new_budget' => 'Erstellen Sie neue Budgets nach Ihren Wünschen.', - 'budgets_index_list_of_budgets' => 'Verwenden Sie diese Tabelle, um die Beträge für jedes Budget festzulegen und einen Überblick zu erhalten.', - 'budgets_index_outro' => 'Um mehr über die Finanzplanung zu erfahren, klicken Sie auf das Hilfesymbol in der oberen rechten Ecke.', + 'budgets_index_intro' => 'Budgets werden zur Verwaltung Ihrer Finanzen verwendet und bilden eine der Kernfunktionen von Firefly III.', + 'budgets_index_see_expenses_bar' => 'Dieser Balken wird sich langsam füllen, wenn Sie Geld ausgeben.', + 'budgets_index_navigate_periods' => 'Navigieren Sie durch Zeitabschnitte, um Budgets im Voraus festzulegen.', + 'budgets_index_new_budget' => 'Erstellen Sie neue Budgets nach Ihren Wünschen.', + 'budgets_index_list_of_budgets' => 'Verwenden Sie diese Tabelle, um die Beträge für jedes Budget festzulegen und einen Überblick zu erhalten.', + 'budgets_index_outro' => 'Um mehr über die Finanzplanung zu erfahren, klicken Sie auf das Hilfesymbol in der oberen rechten Ecke.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Verwenden Sie diese Reports, um detaillierte Einblicke in Ihre Finanzen zu erhalten.', - 'reports_index_inputReportType' => 'Wählen Sie einen Berichtstyp aus. Sehen Sie sich die Hilfeseiten an, um zu sehen, was jeder Bericht Ihnen zeigt.', - 'reports_index_inputAccountsSelect' => 'Sie können Bestandskonten ausschließen oder einbeziehen, wie Sie es für richtig halten.', - 'reports_index_inputDateRange' => 'Der gewählte Datumsbereich liegt ganz bei Ihnen: von einem Tag bis 10 Jahre.', - 'reports_index_extra-options-box' => 'Abhängig von dem ausgewählten Bericht können Sie hier zusätzliche Filter und Optionen auswählen. Sehen Sie sich dieses Feld an, wenn Sie Berichtstypen ändern.', + 'reports_index_intro' => 'Verwenden Sie diese Reports, um detaillierte Einblicke in Ihre Finanzen zu erhalten.', + 'reports_index_inputReportType' => 'Wählen Sie einen Berichtstyp aus. Sehen Sie sich die Hilfeseiten an, um zu sehen, was jeder Bericht Ihnen zeigt.', + 'reports_index_inputAccountsSelect' => 'Sie können Bestandskonten ausschließen oder einbeziehen, wie Sie es für richtig halten.', + 'reports_index_inputDateRange' => 'Der gewählte Datumsbereich liegt ganz bei Ihnen: von einem Tag bis zu 10 Jahren oder mehr.', + 'reports_index_extra-options-box' => 'Abhängig von dem ausgewählten Bericht können Sie hier zusätzliche Filter und Optionen auswählen. Sehen Sie sich dieses Feld an, wenn Sie Berichtstypen ändern.', // reports (reports) - 'reports_report_default_intro' => 'Dieser Bericht gibt Ihnen einen schnellen und umfassenden Überblick über Ihre Finanzen. Kontaktieren Sie mich bitte, wenn Sie Ideen für Ergänzungen haben!', - 'reports_report_audit_intro' => 'In diesem Bericht erhalten Sie detaillierte Einblicke in Ihre Bestandskonten.', - 'reports_report_audit_optionsBox' => 'Verwenden Sie diese Kontrollkästchen, um die Spalten anzuzeigen oder auszublenden, an denen Sie interessiert sind.', + 'reports_report_default_intro' => 'Dieser Bericht gibt Ihnen einen schnellen und umfassenden Überblick über Ihre Finanzen. Kontaktieren Sie mich bitte, wenn Sie Ideen für Ergänzungen haben!', + 'reports_report_audit_intro' => 'In diesem Bericht erhalten Sie detaillierte Einblicke in Ihre Bestandskonten.', + 'reports_report_audit_optionsBox' => 'Verwenden Sie diese Kontrollkästchen, um die Spalten anzuzeigen oder auszublenden, an denen Sie interessiert sind.', - 'reports_report_category_intro' => 'Dieser Bericht gibt Ihnen Einblick in eine oder mehrere Kategorien.', - 'reports_report_category_pieCharts' => 'Diese Diagramme geben Ihnen Einblick in Ausgaben und Einnahmen pro Kategorie oder pro Konto.', - 'reports_report_category_incomeAndExpensesChart' => 'Diese Tabelle zeigt Ihre Ausgaben und Einnahmen pro Kategorie.', + 'reports_report_category_intro' => 'Dieser Bericht gibt Ihnen Einblick in eine oder mehrere Kategorien.', + 'reports_report_category_pieCharts' => 'Diese Diagramme geben Ihnen Einblick in Ausgaben und Einnahmen pro Kategorie oder pro Konto.', + 'reports_report_category_incomeAndExpensesChart' => 'Diese Tabelle zeigt Ihre Ausgaben und Einnahmen pro Kategorie.', - 'reports_report_tag_intro' => 'Dieser Bericht gibt Ihnen Einblick in eine oder mehrere Schlagwörter.', - 'reports_report_tag_pieCharts' => 'Diese Diagramme geben Ihnen Einblick in Ausgaben und Einnahmen ja Schlagwort, Konto, Kategorie oder Budget.', - 'reports_report_tag_incomeAndExpensesChart' => 'Diese Tabelle zeigt Ihre Ausgaben und Einnahmen je Schlagwort.', + 'reports_report_tag_intro' => 'Dieser Bericht gibt Ihnen Einblick in eine oder mehrere Schlagwörter.', + 'reports_report_tag_pieCharts' => 'Diese Diagramme geben Ihnen Einblick in Ausgaben und Einnahmen ja Schlagwort, Konto, Kategorie oder Budget.', + 'reports_report_tag_incomeAndExpensesChart' => 'Diese Tabelle zeigt Ihre Ausgaben und Einnahmen je Schlagwort.', 'reports_report_budget_intro' => 'Dieser Bericht gibt Ihnen Einblick in ein oder mehrere Budgets.', 'reports_report_budget_pieCharts' => 'Diese Diagramme geben Ihnen Einblick in Ausgaben und Einnahmen je Budget oder Konto.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Neben diesem Fortschrittsbalken befinden sich zwei Buttons (+ und -), um Geld von jedem Sparschwein hinzuzufügen oder zu entfernen.', 'piggy-banks_index_accountStatus' => 'In dieser Tabelle wird der Status der Bestandskonten aufgeführt, die mit mindestens einem Sparschwein verbunden sind.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Worauf sparen Sie? Eine neue Couch, eine Kamera, Geld für Notfälle?', 'piggy-banks_create_date' => 'Sie können ein Zieldatum oder einen Termin für Ihr Sparschwein festlegen.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Verwendet Rechnungen, um den Gesamtbetrag zu ermitteln, den Sie in jedem Zeitraum zahlen müssen. Denken Sie an Ausgaben wie Miete, Versicherung oder Hypothekenzahlungen.', 'bills_create_name' => 'Verwenden Sie einen aussagekräftigen Namen wie "Miete" oder "Krankenversicherung".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Wählen Sie einen Mindest- und Höchstbetrag für diese Rechnung aus.', 'bills_create_repeat_freq_holder' => 'Die meisten Rechnungen wiederholen sich monatlich, aber Sie können hier eine andere Frequenz einstellen.', 'bills_create_skip_holder' => 'Wenn eine Rechnung alle 2 Wochen wiederholt wird, sollte das Feld „Überspringen” auf „1” festgelegt werden, um jede zweite Woche zu überspringen.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Verwenden Sie diese Schaltfläche, um zu sehen, welche Transaktionen zu Ihrer Regel passen würden.', 'rules_create_actions' => 'Legen Sie so viele Aktionen fest, wie Sie möchten.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Weitere Optionen sind hinter diesen Registerkarten verfügbar.', diff --git a/resources/lang/de_DE/list.php b/resources/lang/de_DE/list.php index e81d8d9cea..698ddfa3b2 100644 --- a/resources/lang/de_DE/list.php +++ b/resources/lang/de_DE/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Schaltflächen', - 'icon' => 'Symbol', - 'id' => 'Id', - 'create_date' => 'Erstellt am', - 'update_date' => 'Aktualisiert am', - 'updated_at' => 'Aktualisiert am', - 'balance_before' => 'Kontostand vorher', - 'balance_after' => 'Kontostand nachher', - 'name' => 'Name', - 'role' => 'Rolle', - 'currentBalance' => 'Aktueller Kontostand', - 'linked_to_rules' => 'Verlinkte Regeln', - 'active' => 'Aktiv?', - 'percentage' => '%', - 'recurring_transaction' => 'Dauerauftrag', - 'next_due' => 'Nächste Fälligkeit', - 'transaction_type' => 'Typ', - 'lastActivity' => 'Letzte Aktivität', - 'balanceDiff' => 'Saldendifferenz', - 'other_meta_data' => 'Weitere Metadaten', - 'invited_at' => 'Eingeladen am', - 'expires' => 'Einladung läuft ab am', - 'invited_by' => 'Eingeladen von', - 'invite_link' => 'Einladungs-Link', - 'account_type' => 'Kontotyp', - 'created_at' => 'Erstellt am', - 'account' => 'Konto', - 'external_url' => 'Externe URL', - 'matchingAmount' => 'Betrag', - 'destination' => 'Empfänger', - 'source' => 'Quelle', - 'next_expected_match' => 'Nächste erwartete Übereinstimmung', - 'automatch' => 'Automatisch erkennen?', + 'buttons' => 'Schaltflächen', + 'icon' => 'Symbol', + 'id' => 'Id', + 'create_date' => 'Erstellt am', + 'update_date' => 'Aktualisiert am', + 'updated_at' => 'Aktualisiert am', + 'balance_before' => 'Kontostand vorher', + 'balance_after' => 'Kontostand nachher', + 'name' => 'Name', + 'role' => 'Rolle', + 'currentBalance' => 'Aktueller Kontostand', + 'linked_to_rules' => 'Verlinkte Regeln', + 'active' => 'Aktiv?', + 'percentage' => '%', + 'recurring_transaction' => 'Dauerauftrag', + 'next_due' => 'Nächste Fälligkeit', + 'transaction_type' => 'Typ', + 'lastActivity' => 'Letzte Aktivität', + 'balanceDiff' => 'Saldendifferenz', + 'other_meta_data' => 'Weitere Metadaten', + 'invited_at' => 'Eingeladen am', + 'expires' => 'Einladung läuft ab am', + 'invited_by' => 'Eingeladen von', + 'invite_link' => 'Einladungs-Link', + 'account_type' => 'Kontotyp', + 'created_at' => 'Erstellt am', + 'account' => 'Konto', + 'external_url' => 'Externe URL', + 'matchingAmount' => 'Betrag', + 'destination' => 'Empfänger', + 'source' => 'Quelle', + 'next_expected_match' => 'Nächste erwartete Übereinstimmung', + 'automatch' => 'Automatisch erkennen?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Wiederholungen', 'description' => 'Beschreibung', 'amount' => 'Betrag', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Konto bei „bunq”', 'file_name' => 'Dateiname', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Dateigröße', - 'file_type' => 'Dateityp', - 'attached_to' => 'Zugewiesen zu', - 'file_exists' => 'Datei existiert', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Letzte Anmeldung', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'bunq-Zahlungskennung', - 'repetitions' => 'Wiederholungen', - 'title' => 'Titel', - 'transaction_s' => 'Buchung(en)', - 'field' => 'Feld', - 'value' => 'Wert', - 'interest' => 'Zinsen', - 'interest_period' => 'Zinsperiode', - 'liability_type' => 'Verbindlichkeitsart', - 'liability_direction' => 'Verbindlichkeit ein/aus', - 'end_date' => 'Endet am', - 'payment_info' => 'Zahlungsinformationen', - 'expected_info' => 'Nächste erwartete Buchung', - 'start_date' => 'Beginnt am', - 'trigger' => 'Auslöser', - 'response' => 'Antwort', - 'delivery' => 'Zustellung', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Dateigröße', + 'file_type' => 'Dateityp', + 'attached_to' => 'Zugewiesen zu', + 'file_exists' => 'Datei existiert', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Letzte Anmeldung', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'bunq-Zahlungskennung', + 'repetitions' => 'Wiederholungen', + 'title' => 'Titel', + 'transaction_s' => 'Buchung(en)', + 'field' => 'Feld', + 'value' => 'Wert', + 'interest' => 'Zinsen', + 'interest_period' => 'Zinsperiode', + 'liability_type' => 'Verbindlichkeitsart', + 'liability_direction' => 'Verbindlichkeit ein/aus', + 'end_date' => 'Endet am', + 'payment_info' => 'Zahlungsinformationen', + 'expected_info' => 'Nächste erwartete Buchung', + 'start_date' => 'Beginnt am', + 'trigger' => 'Auslöser', + 'response' => 'Antwort', + 'delivery' => 'Zustellung', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/de_DE/pagination.php b/resources/lang/de_DE/pagination.php index dde94d385f..c7df53eca8 100644 --- a/resources/lang/de_DE/pagination.php +++ b/resources/lang/de_DE/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/de_DE/passwords.php b/resources/lang/de_DE/passwords.php index d55472d3bb..cbce672a04 100644 --- a/resources/lang/de_DE/passwords.php +++ b/resources/lang/de_DE/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/de_DE/rules.php b/resources/lang/de_DE/rules.php index e3511fdde5..729843c3cc 100644 --- a/resources/lang/de_DE/rules.php +++ b/resources/lang/de_DE/rules.php @@ -1,6 +1,5 @@ 'Firefly III kann das Abonnement ":name" nicht finden', 'no_notes_to_move' => 'Diese Transaktion hat keine Notizen für das Beschreibungsfeld', 'no_tags_to_remove' => 'Die Buchung hat keine Schlagworte zum Entfernen', + 'not_withdrawal' => 'Diese Buchung ist keine Ausgabe', + 'not_deposit' => 'Diese Buchung ist keine Einnahme', 'cannot_find_tag' => 'Firefly III kann Schlagwort ":tag" nicht finden', 'cannot_find_asset' => 'Firefly III kann kein Girokonto ":name" finden', 'cannot_find_accounts' => 'Firefly III kann das Quell- oder Zielkonto nicht finden', diff --git a/resources/lang/de_DE/validation.php b/resources/lang/de_DE/validation.php index 53385c71ac..f8e09f12e3 100644 --- a/resources/lang/de_DE/validation.php +++ b/resources/lang/de_DE/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Dem Array fehlt die „where”-Klausel', - 'missing_update' => 'Dem Array fehlt die „update”-Klausel', - 'invalid_where_key' => 'JSON enthält einen ungültigen Schlüssel für die „where”-Klausel', - 'invalid_update_key' => 'JSON enthält einen ungültigen Schlüssel für die „update”-Klausel', - 'invalid_query_data' => 'Das Feld %s:%s Ihrer Abfrage enthält ungültige Daten.', - 'invalid_query_account_type' => 'Ihre Abfrage enthält unzulässigerweise Konten unterschiedlicher Typen.', - 'invalid_query_currency' => 'Ihre Abfrage enthält unzulässigerweise Konten mit unterschiedlicher Währungseinstellung.', - 'iban' => 'Dies ist keine gültige IBAN.', - 'zero_or_more' => 'Der Wert darf nicht negativ sein.', - 'date_or_time' => 'Der Wert muss ein gültiges Datum oder Zeitangabe sein (ISO 8601).', - 'source_equals_destination' => 'Das Quellkonto entspricht dem Zielkonto.', - 'unique_account_number_for_user' => 'Diese Kontonummer scheint bereits verwendet zu sein.', - 'unique_iban_for_user' => 'Dieser IBAN scheint bereits verwendet zu werden.', - 'deleted_user' => 'Aufgrund von Sicherheitsbeschränkungen ist eine Registrierung mit dieser E-Mail-Adresse nicht zugelassen.', - 'rule_trigger_value' => 'Dieser Wert ist für den ausgewählten Auslöser ungültig.', - 'rule_action_value' => 'Dieser Wert ist für die gewählte Aktion ungültig.', - 'file_already_attached' => 'Die hochgeladene Datei „:name” ist diesem Objekt bereits angehängt.', - 'file_attached' => 'Datei „:name” erfolgreich hochgeladen.', - 'must_exist' => 'Die ID in Feld :attribute existiert nicht in der Datenbank.', - 'all_accounts_equal' => 'Alle Konten in diesem Feld müssen identisch sein.', - 'group_title_mandatory' => 'Ein Gruppentitel ist zwingend erforderlich, wenn mehr als eine Buchung vorliegt.', - 'transaction_types_equal' => 'Alle Aufteilungen müssen vom gleichen Typ sein.', - 'invalid_transaction_type' => 'Ungültige Transaktionstyp', - 'invalid_selection' => 'Ihre Auswahl ist ungültig.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Sie brauchen mindestens eine Transaktion.', - 'recurring_transaction_id' => 'Sie benötigen mindestens eine Buchung.', - 'need_id_to_match' => 'Sie müssen diesen Eintrag mit einer ID übermitteln, damit die API ihn zuordnen kann.', - 'too_many_unmatched' => 'Zu viele eingereichte Vorgänge können nicht mit den entsprechenden Datenbankeinträgen abgeglichen werden. Stellen Sie sicher, dass vorhandene Einträge eine gültige ID besitzen.', - 'id_does_not_match' => 'Übermittelte ID #:id stimmt nicht mit der erwarteten ID überein. Stellen Sie sicher, dass sie übereinstimmt, oder lassen Sie das Feld leer.', - 'at_least_one_repetition' => 'Mindestens eine Wiederholung erforderlich.', - 'require_repeat_until' => 'Erfordert entweder eine Anzahl von Wiederholungen oder ein Enddatum (repeat_until). Nicht beides.', - 'require_currency_info' => 'Der Inhalt dieses Feldes ist ohne Währungsinformationen ungültig.', - 'not_transfer_account' => 'Dieses Konto ist kein Konto, welches für Buchungen genutzt werden kann.', - 'require_currency_amount' => 'Der Inhalt dieses Feldes ist ohne Eingabe eines Betrags in Fremdwährung ungültig.', - 'require_foreign_currency' => 'Dieses Feld muss eine Nummer enthalten', - 'require_foreign_dest' => 'Der Wert dieses Feldes muss mit der Währung des Zielkontos übereinstimmen.', - 'require_foreign_src' => 'Der Wert dieses Feldes muss mit der Währung des Quellkontos übereinstimmen.', - 'equal_description' => 'Die Transaktionsbeschreibung darf nicht der globalen Beschreibung entsprechen.', - 'file_invalid_mime' => 'Die Datei „:name” ist vom Typ „:mime”, welcher nicht zum Hochladen zugelassen ist.', - 'file_too_large' => 'Die Datei „:name” ist zu groß.', - 'belongs_to_user' => 'Der Wert von :attribute ist unbekannt.', - 'accepted' => ':attribute muss akzeptiert werden.', - 'bic' => 'Dies ist kein gültiger BIC.', - 'at_least_one_trigger' => 'Regel muss mindestens einen Auslöser enthalten', - 'at_least_one_active_trigger' => 'Der Regel muss mindestens ein aktiver Auslöser zugeordnet sein.', - 'at_least_one_action' => 'Regel muss mindestens eine Aktion enthalten', - 'at_least_one_active_action' => 'Der Regel muss mindestens eine aktive Aktion zugeordnet sein.', - 'base64' => 'Dies sind keine gültigen base64-kodierten Daten.', - 'model_id_invalid' => 'Die angegebene ID scheint für dieses Modell ungültig zu sein.', - 'less' => ':attribute muss kleiner als 10.000.000 sein', - 'active_url' => ':attribute ist keine gültige URL.', - 'after' => ':attribute muss ein Datum nach :date sein.', - 'date_after' => 'Das Startdatum muss vor dem Enddatum liegen.', - 'alpha' => ':attribute darf nur Buchstaben enthalten.', - 'alpha_dash' => ':attribute darf nur Buchstaben, Zahlen und Bindestrichen enthalten.', - 'alpha_num' => ':attribute darf nur Buchstaben und Zahlen enthalten.', - 'array' => ':attribute muss eine Liste sein.', - 'unique_for_user' => 'Es gibt bereits einen Eintrag mit diesem :attribute.', - 'before' => ':attribute muss ein Datum vor dem :date sein.', - 'unique_object_for_user' => 'Dieser Name wird bereits verwendet.', - 'unique_account_for_user' => 'Dieser Kontoname wird bereits verwendet.', + 'bad_type_source' => 'Firefly III kann die Buchungsart anhand dieses Quellkontos nicht ermitteln.', + 'bad_type_destination' => 'Firefly III kann die Buchungsart anhand dieses Zielkontos nicht ermitteln.', + 'missing_where' => 'Dem Array fehlt die „where”-Klausel', + 'missing_update' => 'Dem Array fehlt die „update”-Klausel', + 'invalid_where_key' => 'JSON enthält einen ungültigen Schlüssel für die „where”-Klausel', + 'invalid_update_key' => 'JSON enthält einen ungültigen Schlüssel für die „update”-Klausel', + 'invalid_query_data' => 'Das Feld %s:%s Ihrer Abfrage enthält ungültige Daten.', + 'invalid_query_account_type' => 'Ihre Abfrage enthält unzulässigerweise Konten unterschiedlicher Typen.', + 'invalid_query_currency' => 'Ihre Abfrage enthält unzulässigerweise Konten mit unterschiedlicher Währungseinstellung.', + 'iban' => 'Dies ist keine gültige IBAN.', + 'zero_or_more' => 'Der Wert darf nicht negativ sein.', + 'more_than_zero' => 'Der Wert muss größer als Null sein.', + 'more_than_zero_correct' => 'Der Wert muss Null oder mehr betragen.', + 'no_asset_account' => 'Dies ist kein Bestandskonto.', + 'date_or_time' => 'Der Wert muss ein gültiges Datum oder Zeitangabe sein (ISO 8601).', + 'source_equals_destination' => 'Das Quellkonto entspricht dem Zielkonto.', + 'unique_account_number_for_user' => 'Diese Kontonummer scheint bereits verwendet zu sein.', + 'unique_iban_for_user' => 'Dieser IBAN scheint bereits verwendet zu werden.', + 'reconciled_forbidden_field' => 'Diese Buchung ist bereits abgeglichen, Sie können das „:field” nicht ändern', + 'deleted_user' => 'Aufgrund von Sicherheitsbeschränkungen ist eine Registrierung mit dieser E-Mail-Adresse nicht zugelassen.', + 'rule_trigger_value' => 'Dieser Wert ist für den ausgewählten Auslöser ungültig.', + 'rule_action_value' => 'Dieser Wert ist für die gewählte Aktion ungültig.', + 'file_already_attached' => 'Die hochgeladene Datei „:name” ist diesem Objekt bereits angehängt.', + 'file_attached' => 'Datei „:name” erfolgreich hochgeladen.', + 'must_exist' => 'Die ID in Feld :attribute existiert nicht in der Datenbank.', + 'all_accounts_equal' => 'Alle Konten in diesem Feld müssen identisch sein.', + 'group_title_mandatory' => 'Ein Gruppentitel ist zwingend erforderlich, wenn mehr als eine Buchung vorliegt.', + 'transaction_types_equal' => 'Alle Aufteilungen müssen vom gleichen Typ sein.', + 'invalid_transaction_type' => 'Ungültige Transaktionstyp', + 'invalid_selection' => 'Ihre Auswahl ist ungültig.', + 'belongs_user' => 'Dieser Wert verweist auf ein Objekt, das offenbar nicht existiert.', + 'belongs_user_or_user_group' => 'Dieser Wert verweist auf ein Objekt, das in Ihrer aktuellen Finanzverwaltung offenbar nicht existiert.', + 'at_least_one_transaction' => 'Sie brauchen mindestens eine Transaktion.', + 'recurring_transaction_id' => 'Sie benötigen mindestens eine Buchung.', + 'need_id_to_match' => 'Sie müssen diesen Eintrag mit einer ID übermitteln, damit die API ihn zuordnen kann.', + 'too_many_unmatched' => 'Zu viele eingereichte Vorgänge können nicht mit den entsprechenden Datenbankeinträgen abgeglichen werden. Stellen Sie sicher, dass vorhandene Einträge eine gültige ID besitzen.', + 'id_does_not_match' => 'Übermittelte ID #:id stimmt nicht mit der erwarteten ID überein. Stellen Sie sicher, dass sie übereinstimmt, oder lassen Sie das Feld leer.', + 'at_least_one_repetition' => 'Mindestens eine Wiederholung erforderlich.', + 'require_repeat_until' => 'Erfordert entweder eine Anzahl von Wiederholungen oder ein Enddatum (repeat_until). Nicht beides.', + 'require_currency_info' => 'Der Inhalt dieses Feldes ist ohne Währungsinformationen ungültig.', + 'not_transfer_account' => 'Dieses Konto ist kein Konto, welches für Buchungen genutzt werden kann.', + 'require_currency_amount' => 'Der Inhalt dieses Feldes ist ohne Eingabe eines Betrags in Fremdwährung ungültig.', + 'require_foreign_currency' => 'Dieses Feld muss eine Nummer enthalten', + 'require_foreign_dest' => 'Der Wert dieses Feldes muss mit der Währung des Zielkontos übereinstimmen.', + 'require_foreign_src' => 'Der Wert dieses Feldes muss mit der Währung des Quellkontos übereinstimmen.', + 'equal_description' => 'Die Transaktionsbeschreibung darf nicht der globalen Beschreibung entsprechen.', + 'file_invalid_mime' => 'Die Datei „:name” ist vom Typ „:mime”, welcher nicht zum Hochladen zugelassen ist.', + 'file_too_large' => 'Die Datei „:name” ist zu groß.', + 'belongs_to_user' => 'Der Wert von :attribute ist unbekannt.', + 'accepted' => ':attribute muss akzeptiert werden.', + 'bic' => 'Dies ist kein gültiger BIC.', + 'at_least_one_trigger' => 'Regel muss mindestens einen Auslöser enthalten', + 'at_least_one_active_trigger' => 'Der Regel muss mindestens ein aktiver Auslöser zugeordnet sein.', + 'at_least_one_action' => 'Regel muss mindestens eine Aktion enthalten', + 'at_least_one_active_action' => 'Der Regel muss mindestens eine aktive Aktion zugeordnet sein.', + 'base64' => 'Dies sind keine gültigen base64-kodierten Daten.', + 'model_id_invalid' => 'Die angegebene ID scheint für dieses Modell ungültig zu sein.', + 'less' => ':attribute muss kleiner als 10.000.000 sein', + 'active_url' => ':attribute ist keine gültige URL.', + 'after' => ':attribute muss ein Datum nach :date sein.', + 'date_after' => 'Das Startdatum muss vor dem Enddatum liegen.', + 'alpha' => ':attribute darf nur Buchstaben enthalten.', + 'alpha_dash' => ':attribute darf nur Buchstaben, Zahlen und Bindestrichen enthalten.', + 'alpha_num' => ':attribute darf nur Buchstaben und Zahlen enthalten.', + 'array' => ':attribute muss eine Liste sein.', + 'unique_for_user' => 'Es gibt bereits einen Eintrag mit diesem :attribute.', + 'before' => ':attribute muss ein Datum vor dem :date sein.', + 'unique_object_for_user' => 'Dieser Name wird bereits verwendet.', + 'unique_account_for_user' => 'Dieser Kontoname wird bereits verwendet.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute muss zwischen :min und :max liegen.', + 'between.file' => ':attribute muss zwischen :min und :max Kilobytes groß sein.', + 'between.string' => ':attribute muss zwischen :min und :max Zeichen lang sein.', + 'between.array' => ':attribute muss zwischen :min und :max Elemente enthalten.', + 'boolean' => ':attribute Feld muss wahr oder falsch sein.', + 'confirmed' => ':attribute Bestätigung stimmt nicht überein.', + 'date' => ':attribute ist kein gültiges Datum.', + 'date_format' => ':attribute entspricht nicht dem Format :format.', + 'different' => ':attribute und :other müssen sich unterscheiden.', + 'digits' => ':attribute muss :digits Stellen haben.', + 'digits_between' => ':attribute muss zwischen :min und :max Stellen haben.', + 'email' => ':attribute muss eine gültige E-Mail Adresse sein.', + 'filled' => ':attribute Feld muss ausgefüllt sein.', + 'exists' => ':attribute ist ungültig.', + 'image' => ':attribute muss ein Bild sein.', + 'in' => ':attribute ist ungültig.', + 'integer' => ':attribute muss eine Ganzzahl sein.', + 'ip' => ':attribute muss eine gültige IP-Adresse sein.', + 'json' => ':attribute muss ein gültiger JSON-String sein.', + 'max.numeric' => ':attribute darf nicht größer als :max sein.', + 'max.file' => ':attribute darf nicht größer als :max Kilobytes sein.', + 'max.string' => ':attribute darf nicht mehr als :max Zeichen enthalten.', + 'max.array' => ':attribute darf nicht mehr als :max Elemente enthalten.', + 'mimes' => ':attribute muss eine Datei des Typ :values sein.', + 'min.numeric' => ':attribute muss mindestens :min sein.', + 'lte.numeric' => 'Das Attribut :attribute muss kleiner oder gleich :value sein.', + 'min.file' => ':attribute muss mindestens :min Kilobytes groß sein.', + 'min.string' => ':attribute muss mindestens :min Zeichen enthalten.', + 'min.array' => ':attribute muss mindestens :min Elemente enthalten.', + 'not_in' => ':attribute ist ungültig.', + 'numeric' => ':attribute muss eine Zahl sein.', + 'scientific_notation' => 'Das Attribut :attribute kann die wissenschaftliche Notation nicht verwenden.', + 'numeric_native' => 'Die native Betrag muss eine Zahl sein.', + 'numeric_destination' => 'Der Zielbeitrag muss eine Zahl sein.', + 'numeric_source' => 'Der Quellbetrag muss eine Zahl sein.', + 'regex' => 'Das Format von :attribute ist ungültig.', + 'required' => ':attribute Feld muss ausgefüllt sein.', + 'required_if' => ':attribute Feld ist notwendig, wenn :other :value entspricht.', + 'required_unless' => ':attribute Feld ist notwendig, außer :other ist in :values enthalten.', + 'required_with' => ':attribute Feld ist notwendig falls :values vorhanden sind.', + 'required_with_all' => ':attribute Feld ist notwendig falls :values vorhanden sind.', + 'required_without' => ':attribute Feld ist notwendig, falls :values nicht vorhanden ist.', + 'required_without_all' => ':attribute Feld ist notwendig, falls kein :values vorhanden ist.', + 'same' => ':attribute und :other müssen übereinstimmen.', + 'size.numeric' => ':attribute muss :size sein.', + 'amount_min_over_max' => 'Der Mindestbetrag darf nicht größer als der Höchstbetrag sein.', + 'size.file' => ':attribute muss :size Kilobytes groß sein.', + 'size.string' => ':attribute muss :size Zeichen enthalten.', + 'size.array' => ':attribute muss :size Elemente enthalten.', + 'unique' => ':attribute ist bereits vergeben.', + 'string' => ':attribute muss eine Zeichenfolge sein.', + 'url' => ':attribute Format ist ungültig.', + 'timezone' => ':attribute muss in einem gültigen Bereich liegen.', + '2fa_code' => ':attribute Feld ist ungültig.', + 'dimensions' => 'Das :attribute hat eine ungültige Auflösung.', + 'distinct' => 'Der Wert von :attribute existiert bereits.', + 'file' => 'Das :attribute muss eine Datei sein.', + 'in_array' => ':attribute existiert nicht in :other.', + 'present' => 'Das :attribute Feld muss vorhanden sein.', + 'amount_zero' => 'Der Gesamtbetrag darf nicht Null sein.', + 'current_target_amount' => 'Der aktuelle Betrag muss niedriger als der Zielbetrag sein.', + 'unique_piggy_bank_for_user' => 'Der Name des Sparschweins muss eindeutig sein.', + 'unique_object_group' => 'Der Gruppenname muss eindeutig sein', + 'starts_with' => 'Der Wert muss mit :values beginnen.', + 'unique_webhook' => 'Sie haben bereits einen Webhook mit dieser Kombination aus URL, Trigger, Antwort und Auslieferung.', + 'unique_existing_webhook' => 'Sie haben bereits einen weiteren Webhook mit dieser Kombination aus URL, Trigger, Antwort und Auslieferung.', + 'same_account_type' => 'Beide Konten müssen vom selben Kontotyp sein', + 'same_account_currency' => 'Beiden Konten muss die gleiche Währung zugeordnet sein', - 'between.numeric' => ':attribute muss zwischen :min und :max liegen.', - 'between.file' => ':attribute muss zwischen :min und :max Kilobytes groß sein.', - 'between.string' => ':attribute muss zwischen :min und :max Zeichen lang sein.', - 'between.array' => ':attribute muss zwischen :min und :max Elemente enthalten.', - 'boolean' => ':attribute Feld muss wahr oder falsch sein.', - 'confirmed' => ':attribute Bestätigung stimmt nicht überein.', - 'date' => ':attribute ist kein gültiges Datum.', - 'date_format' => ':attribute entspricht nicht dem Format :format.', - 'different' => ':attribute und :other müssen sich unterscheiden.', - 'digits' => ':attribute muss :digits Stellen haben.', - 'digits_between' => ':attribute muss zwischen :min und :max Stellen haben.', - 'email' => ':attribute muss eine gültige E-Mail Adresse sein.', - 'filled' => ':attribute Feld muss ausgefüllt sein.', - 'exists' => ':attribute ist ungültig.', - 'image' => ':attribute muss ein Bild sein.', - 'in' => ':attribute ist ungültig.', - 'integer' => ':attribute muss eine Ganzzahl sein.', - 'ip' => ':attribute muss eine gültige IP-Adresse sein.', - 'json' => ':attribute muss ein gültiger JSON-String sein.', - 'max.numeric' => ':attribute darf nicht größer als :max sein.', - 'max.file' => ':attribute darf nicht größer als :max Kilobytes sein.', - 'max.string' => ':attribute darf nicht mehr als :max Zeichen enthalten.', - 'max.array' => ':attribute darf nicht mehr als :max Elemente enthalten.', - 'mimes' => ':attribute muss eine Datei des Typ :values sein.', - 'min.numeric' => ':attribute muss mindestens :min sein.', - 'lte.numeric' => 'Das Attribut :attribute muss kleiner oder gleich :value sein.', - 'min.file' => ':attribute muss mindestens :min Kilobytes groß sein.', - 'min.string' => ':attribute muss mindestens :min Zeichen enthalten.', - 'min.array' => ':attribute muss mindestens :min Elemente enthalten.', - 'not_in' => ':attribute ist ungültig.', - 'numeric' => ':attribute muss eine Zahl sein.', - 'numeric_native' => 'Die native Betrag muss eine Zahl sein.', - 'numeric_destination' => 'Der Zielbeitrag muss eine Zahl sein.', - 'numeric_source' => 'Der Quellbetrag muss eine Zahl sein.', - 'regex' => 'Das Format von :attribute ist ungültig.', - 'required' => ':attribute Feld muss ausgefüllt sein.', - 'required_if' => ':attribute Feld ist notwendig, wenn :other :value entspricht.', - 'required_unless' => ':attribute Feld ist notwendig, außer :other ist in :values enthalten.', - 'required_with' => ':attribute Feld ist notwendig falls :values vorhanden sind.', - 'required_with_all' => ':attribute Feld ist notwendig falls :values vorhanden sind.', - 'required_without' => ':attribute Feld ist notwendig, falls :values nicht vorhanden ist.', - 'required_without_all' => ':attribute Feld ist notwendig, falls kein :values vorhanden ist.', - 'same' => ':attribute und :other müssen übereinstimmen.', - 'size.numeric' => ':attribute muss :size sein.', - 'amount_min_over_max' => 'Der Mindestbetrag darf nicht größer als der Höchstbetrag sein.', - 'size.file' => ':attribute muss :size Kilobytes groß sein.', - 'size.string' => ':attribute muss :size Zeichen enthalten.', - 'size.array' => ':attribute muss :size Elemente enthalten.', - 'unique' => ':attribute ist bereits vergeben.', - 'string' => ':attribute muss eine Zeichenfolge sein.', - 'url' => ':attribute Format ist ungültig.', - 'timezone' => ':attribute muss in einem gültigen Bereich liegen.', - '2fa_code' => ':attribute Feld ist ungültig.', - 'dimensions' => 'Das :attribute hat eine ungültige Auflösung.', - 'distinct' => 'Der Wert von :attribute existiert bereits.', - 'file' => 'Das :attribute muss eine Datei sein.', - 'in_array' => ':attribute existiert nicht in :other.', - 'present' => 'Das :attribute Feld muss vorhanden sein.', - 'amount_zero' => 'Der Gesamtbetrag darf nicht Null sein.', - 'current_target_amount' => 'Der aktuelle Betrag muss niedriger als der Zielbetrag sein.', - 'unique_piggy_bank_for_user' => 'Der Name des Sparschweins muss eindeutig sein.', - 'unique_object_group' => 'Der Gruppenname muss eindeutig sein', - 'starts_with' => 'Der Wert muss mit :values beginnen.', - 'unique_webhook' => 'Sie haben bereits einen Webhook mit dieser Kombination aus URL, Trigger, Antwort und Auslieferung.', - 'unique_existing_webhook' => 'Sie haben bereits einen weiteren Webhook mit dieser Kombination aus URL, Trigger, Antwort und Auslieferung.', - 'same_account_type' => 'Beide Konten müssen vom selben Kontotyp sein', - 'same_account_currency' => 'Beiden Konten muss die gleiche Währung zugeordnet sein', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Dies ist ein unsicheres Passwort. Bitte versuchen Sie es erneut. Weitere Informationen finden Sie unter https://github.com/firefly-iii/help/wiki/Secure-password', - 'valid_recurrence_rep_type' => 'Ungültige Wiederholungsart für Daueraufträge.', - 'valid_recurrence_rep_moment' => 'Ungültiges Wiederholungsmoment für diese Art der Wiederholung.', - 'invalid_account_info' => 'Ungültige Kontodaten.', - 'attributes' => [ + 'secure_password' => 'Dies ist ein unsicheres Passwort. Bitte versuchen Sie es erneut. Weitere Informationen finden Sie unter https://github.com/firefly-iii/help/wiki/Secure-password', + 'valid_recurrence_rep_type' => 'Ungültige Wiederholungsart für Daueraufträge.', + 'valid_recurrence_rep_moment' => 'Ungültiges Wiederholungsmoment für diese Art der Wiederholung.', + 'invalid_account_info' => 'Ungültige Kontodaten.', + 'attributes' => [ 'email' => 'E-Mail Adresse', 'description' => 'Beschreibung', 'amount' => 'Betrag', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Um fortzufahren, benötigen Sie eine gültige Quellkontenkennung und/oder einen gültigen Quellkontonamen.', - 'withdrawal_source_bad_data' => '[a] Bei der Suche nach der ID „:id” oder dem Namen „:name” konnte kein gültiges Quellkonto gefunden werden.', - 'withdrawal_dest_need_data' => '[a] Sie benötigen eine gültige Zielkonto-ID und/oder einen gültigen Zielkontonamen, um fortzufahren.', - 'withdrawal_dest_bad_data' => 'Bei der Suche nach Kennung „:id” oder Name „:name” konnte kein gültiges Zielkonto gefunden werden.', + 'withdrawal_source_need_data' => 'Um fortzufahren, benötigen Sie eine gültige Quellkontenkennung und/oder einen gültigen Quellkontonamen.', + 'withdrawal_source_bad_data' => '[a] Bei der Suche nach der ID „:id” oder dem Namen „:name” konnte kein gültiges Quellkonto gefunden werden.', + 'withdrawal_dest_need_data' => '[a] Sie benötigen eine gültige Zielkonto-ID und/oder einen gültigen Zielkontonamen, um fortzufahren.', + 'withdrawal_dest_bad_data' => 'Bei der Suche nach Kennung „:id” oder Name „:name” konnte kein gültiges Zielkonto gefunden werden.', - 'withdrawal_dest_iban_exists' => 'Die IBAN des Zielkontos wird bereits von einem Bestandskonto oder einer Verbindlichkeit genutzt und kann nicht als Auszahlungsziel verwendet werden.', - 'deposit_src_iban_exists' => 'Die IBAN des Quellkontos wird bereits von einem Bestandskonto oder einer Verbindlichkeit genutzt und kann nicht als Einlagenquelle verwendet werden.', + 'withdrawal_dest_iban_exists' => 'Die IBAN des Zielkontos wird bereits von einem Bestandskonto oder einer Verbindlichkeit genutzt und kann nicht als Auszahlungsziel verwendet werden.', + 'deposit_src_iban_exists' => 'Die IBAN des Quellkontos wird bereits von einem Bestandskonto oder einer Verbindlichkeit genutzt und kann nicht als Einlagenquelle verwendet werden.', - 'reconciliation_source_bad_data' => 'Bei der Suche nach ID „:id” oder Name „:name” konnte kein gültiges Ausgleichskonto gefunden werden.', + 'reconciliation_source_bad_data' => 'Bei der Suche nach ID „:id” oder Name „:name” konnte kein gültiges Ausgleichskonto gefunden werden.', - 'generic_source_bad_data' => '[e] Bei der Suche nach der ID „:id” oder dem Namen „:name” konnte kein gültiges Quellkonto gefunden werden.', + 'generic_source_bad_data' => '[e] Bei der Suche nach der ID „:id” oder dem Namen „:name” konnte kein gültiges Quellkonto gefunden werden.', - 'deposit_source_need_data' => 'Um fortzufahren, benötigen Sie eine gültige Quellkontenkennung und/oder einen gültigen Quellkontonamen.', - 'deposit_source_bad_data' => '[b] Bei der Suche nach der ID „:id” oder dem Namen „:name” konnte kein gültiges Quellkonto gefunden werden.', - 'deposit_dest_need_data' => '[b] Sie benötigen eine gültige Zielkonto-ID und/oder einen gültigen Zielkontonamen, um fortzufahren.', - 'deposit_dest_bad_data' => 'Bei der Suche nach der Kennung „:id” oder dem Namen „:name” konnte kein gültiges Zielkonto gefunden werden.', - 'deposit_dest_wrong_type' => 'Das übermittelte Zielkonto entspricht nicht dem geforderten Typ.', + 'deposit_source_need_data' => 'Um fortzufahren, benötigen Sie eine gültige Quellkontenkennung und/oder einen gültigen Quellkontonamen.', + 'deposit_source_bad_data' => '[b] Bei der Suche nach der ID „:id” oder dem Namen „:name” konnte kein gültiges Quellkonto gefunden werden.', + 'deposit_dest_need_data' => '[b] Sie benötigen eine gültige Zielkonto-ID und/oder einen gültigen Zielkontonamen, um fortzufahren.', + 'deposit_dest_bad_data' => 'Bei der Suche nach der Kennung „:id” oder dem Namen „:name” konnte kein gültiges Zielkonto gefunden werden.', + 'deposit_dest_wrong_type' => 'Das übermittelte Zielkonto entspricht nicht dem geforderten Typ.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Um fortzufahren, benötigen Sie eine gültige Quellkontenkennung und/oder einen gültigen Quellkontonamen.', + 'transfer_source_bad_data' => '[c] Bei der Suche nach der ID „:id” oder dem Namen „:name” konnte kein gültiges Quellkonto gefunden werden.', + 'transfer_dest_need_data' => '[c] Sie benötigen eine gültige Zielkonto-ID und/oder einen gültigen Zielkontonamen, um fortzufahren.', + 'transfer_dest_bad_data' => 'Bei der Suche nach der Kennung „:id” oder dem Namen „:name” konnte kein gültiges Zielkonto gefunden werden.', + 'need_id_in_edit' => 'Jeder Aufteilungen muss eine transaction_journal_id (entweder gültige ID oder 0) aufweisen.', - 'transfer_source_need_data' => 'Um fortzufahren, benötigen Sie eine gültige Quellkontenkennung und/oder einen gültigen Quellkontonamen.', - 'transfer_source_bad_data' => '[c] Bei der Suche nach der ID „:id” oder dem Namen „:name” konnte kein gültiges Quellkonto gefunden werden.', - 'transfer_dest_need_data' => '[c] Sie benötigen eine gültige Zielkonto-ID und/oder einen gültigen Zielkontonamen, um fortzufahren.', - 'transfer_dest_bad_data' => 'Bei der Suche nach der Kennung „:id” oder dem Namen „:name” konnte kein gültiges Zielkonto gefunden werden.', - 'need_id_in_edit' => 'Jeder Aufteilungen muss eine transaction_journal_id (entweder gültige ID oder 0) aufweisen.', + 'ob_source_need_data' => 'Sie benötigen eine gültige Quellkontonummer und/oder einen gültigen Quellkontonamen, um fortzufahren.', + 'lc_source_need_data' => 'Zum Fortfahren wird eine gültige Quellkonto-ID benötigt.', + 'ob_dest_need_data' => '[d] Sie benötigen eine gültige Zielkonto-ID und/oder einen gültigen Zielkontonamen, um fortzufahren.', + 'ob_dest_bad_data' => 'Bei der Suche nach der ID ":id" oder dem Namen ":name" konnte kein gültiges Zielkonto gefunden werden.', + 'reconciliation_either_account' => 'Um einen Abgleich zu übermitteln, müssen Sie entweder ein Quell- oder ein Zielkonto angeben. Nicht beides, nicht keines von beiden.', - 'ob_source_need_data' => 'Sie benötigen eine gültige Quellkontonummer und/oder einen gültigen Quellkontonamen, um fortzufahren.', - 'lc_source_need_data' => 'Zum Fortfahren wird eine gültige Quellkonto-ID benötigt.', - 'ob_dest_need_data' => '[d] Sie benötigen eine gültige Zielkonto-ID und/oder einen gültigen Zielkontonamen, um fortzufahren.', - 'ob_dest_bad_data' => 'Bei der Suche nach der ID ":id" oder dem Namen ":name" konnte kein gültiges Zielkonto gefunden werden.', - 'reconciliation_either_account' => 'Um einen Abgleich zu übermitteln, müssen Sie entweder ein Quell- oder ein Zielkonto angeben. Nicht beides, nicht keines von beiden.', + 'generic_invalid_source' => 'Sie können dieses Konto nicht als Quellkonto verwenden.', + 'generic_invalid_destination' => 'Sie können dieses Konto nicht als Zielkonto verwenden.', - 'generic_invalid_source' => 'Sie können dieses Konto nicht als Quellkonto verwenden.', - 'generic_invalid_destination' => 'Sie können dieses Konto nicht als Zielkonto verwenden.', + 'generic_no_source' => 'Sie müssen Informationen zum Quellkonto oder eine Transaktions-Journal-ID angeben.', + 'generic_no_destination' => 'Sie müssen Informationen zum Zielkonto oder eine Transaktions-Journal-ID angeben.', - 'generic_no_source' => 'Sie müssen Informationen zum Quellkonto oder eine Transaktions-Journal-ID angeben.', - 'generic_no_destination' => 'Sie müssen Informationen zum Zielkonto oder eine Transaktions-Journal-ID angeben.', - - 'gte.numeric' => ':attribute muss größer oder gleich :value sein.', - 'gt.numeric' => ':attribute muss größer als :value sein.', - 'gte.file' => ':attribute muss größer oder gleich :value Kilobytes sein.', - 'gte.string' => ':attribute muss mindestens :value Zeichen enthalten.', - 'gte.array' => ':attribute muss mindestens :value Elemente enthalten.', + 'gte.numeric' => ':attribute muss größer oder gleich :value sein.', + 'gt.numeric' => ':attribute muss größer als :value sein.', + 'gte.file' => ':attribute muss größer oder gleich :value Kilobytes sein.', + 'gte.string' => ':attribute muss mindestens :value Zeichen enthalten.', + 'gte.array' => ':attribute muss mindestens :value Elemente enthalten.', 'amount_required_for_auto_budget' => 'Betrag ist erforderlich.', 'auto_budget_amount_positive' => 'Der Betrag muss größer als Null sein.', + 'auto_budget_period_mandatory' => 'Der Zeitraum für das automatische Budget ist ein Pflichtfeld.', // no access to administration: diff --git a/resources/lang/el_GR/api.php b/resources/lang/el_GR/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/el_GR/api.php +++ b/resources/lang/el_GR/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/el_GR/auth.php b/resources/lang/el_GR/auth.php index 343e100dd5..f72505ee5f 100644 --- a/resources/lang/el_GR/auth.php +++ b/resources/lang/el_GR/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Αυτά τα διαπιστευτήρια δεν ταιριάζουν με τα αρχεία μας.', 'throttle' => 'Πάρα πολλές προσπάθειες σύνδεσης. Παρακαλώ δοκιμάστε ξανά σε :seconds δευτερόλεπτα.', diff --git a/resources/lang/el_GR/breadcrumbs.php b/resources/lang/el_GR/breadcrumbs.php index 0341f8bf39..79925a5cd1 100644 --- a/resources/lang/el_GR/breadcrumbs.php +++ b/resources/lang/el_GR/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Αρχική', - 'budgets' => 'Προϋπολογισμοί', - 'subscriptions' => 'Συνδρομές', - 'transactions' => 'Συναλλαγές', - 'title_expenses' => 'Δαπάνες', - 'title_withdrawal' => 'Δαπάνες', - 'title_revenue' => 'Έσοδα', - 'title_deposit' => 'Έσοδα', - 'title_transfer' => 'Μεταφορές', - 'title_transfers' => 'Μεταφορές', - 'edit_currency' => 'Επεξεργασία νομίσματος ":name"', - 'delete_currency' => 'Διαγραφή νομίσματος ":name"', - 'newPiggyBank' => 'Δημιουργία ενός νέου κουμπαρά', - 'edit_piggyBank' => 'Επεξεργασία κουμπαρά ":name"', - 'preferences' => 'Προτιμήσεις', - 'profile' => 'Προφίλ', - 'accounts' => 'Λογαριασμοί', - 'changePassword' => 'Αλλάξτε τον κωδικό σας', - 'change_email' => 'Αλλάξτε τη διεύθυνση του email σας', - 'bills' => 'Πάγια έξοδα', - 'newBill' => 'Νέο πάγιο έξοδο', - 'edit_bill' => 'Επεξεργασία πάγιου έξοδου ":name"', - 'delete_bill' => 'Διαγραφή πάγιου έξοδου ":name"', - 'reports' => 'Αναφορές', - 'search_result' => 'Αποτελέσματα αναζήτησης για ":query"', - 'withdrawal_list' => 'Δαπάνες', - 'Withdrawal_list' => 'Δαπάνες', - 'deposit_list' => 'Έσοδα και καταθέσεις', - 'transfer_list' => 'Μεταφορές', - 'transfers_list' => 'Μεταφορές', + 'home' => 'Αρχική', + 'budgets' => 'Προϋπολογισμοί', + 'subscriptions' => 'Συνδρομές', + 'transactions' => 'Συναλλαγές', + 'title_expenses' => 'Δαπάνες', + 'title_withdrawal' => 'Δαπάνες', + 'title_revenue' => 'Έσοδα', + 'title_deposit' => 'Έσοδα', + 'title_transfer' => 'Μεταφορές', + 'title_transfers' => 'Μεταφορές', + 'edit_currency' => 'Επεξεργασία νομίσματος ":name"', + 'delete_currency' => 'Διαγραφή νομίσματος ":name"', + 'newPiggyBank' => 'Δημιουργία ενός νέου κουμπαρά', + 'edit_piggyBank' => 'Επεξεργασία κουμπαρά ":name"', + 'preferences' => 'Προτιμήσεις', + 'profile' => 'Προφίλ', + 'accounts' => 'Λογαριασμοί', + 'changePassword' => 'Αλλάξτε τον κωδικό σας', + 'change_email' => 'Αλλάξτε τη διεύθυνση του email σας', + 'bills' => 'Πάγια έξοδα', + 'newBill' => 'Νέο πάγιο έξοδο', + 'edit_bill' => 'Επεξεργασία πάγιου έξοδου ":name"', + 'delete_bill' => 'Διαγραφή πάγιου έξοδου ":name"', + 'reports' => 'Αναφορές', + 'search_result' => 'Αποτελέσματα αναζήτησης για ":query"', + 'withdrawal_list' => 'Δαπάνες', + 'Withdrawal_list' => 'Δαπάνες', + 'deposit_list' => 'Έσοδα και καταθέσεις', + 'transfer_list' => 'Μεταφορές', + 'transfers_list' => 'Μεταφορές', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Συνδιαλλαγές', 'create_withdrawal' => 'Δημιουργία νέας ανάληψης', 'create_deposit' => 'Δημιουργία νέας κατάθεσης', diff --git a/resources/lang/el_GR/components.php b/resources/lang/el_GR/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/el_GR/components.php +++ b/resources/lang/el_GR/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/el_GR/config.php b/resources/lang/el_GR/config.php index ce696ae45a..075712073a 100644 --- a/resources/lang/el_GR/config.php +++ b/resources/lang/el_GR/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'el', - 'locale' => 'el, Ελληνικά, el_GR.utf8, el_GR.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'el', + 'locale' => 'el, Ελληνικά, el_GR.utf8, el_GR.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMM YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'Do MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D MMM YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'Do MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd Do MMMM YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd Do MMMM YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'Do MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'Do MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'Do MMMM YYYY, HH:mm:ss', + 'date_time_fns' => 'do MMMM yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'Do MMMM YYYY, HH:mm:ss', - 'date_time_fns' => 'do MMMM yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Εβδομάδα' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Εβδομάδα' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Δευτέρα', - 'dow_2' => 'Τρίτη', - 'dow_3' => 'Τετάρτη', - 'dow_4' => 'Πέμπτη', - 'dow_5' => 'Παρασκευή', - 'dow_6' => 'Σάββατο', - 'dow_7' => 'Κυριακή', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Δευτέρα', + 'dow_2' => 'Τρίτη', + 'dow_3' => 'Τετάρτη', + 'dow_4' => 'Πέμπτη', + 'dow_5' => 'Παρασκευή', + 'dow_6' => 'Σάββατο', + 'dow_7' => 'Κυριακή', ]; /* diff --git a/resources/lang/el_GR/demo.php b/resources/lang/el_GR/demo.php index 51fe949f4e..ae80b56052 100644 --- a/resources/lang/el_GR/demo.php +++ b/resources/lang/el_GR/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/el_GR/email.php b/resources/lang/el_GR/email.php index 19d4450557..266c973291 100644 --- a/resources/lang/el_GR/email.php +++ b/resources/lang/el_GR/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Ένα δοκιμαστικό μήνυμα από την εγκατάσταση του Firefly III', 'admin_test_body' => 'Αυτό είναι ένα δοκιμαστικό μήνυμα από την εγκατάσταση του Firefly III. Αποστάλθηκε στο :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Έχει δημιουργηθεί μια πρόσκληση', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Επαναφορά κωδικού πρόσβασης:', 'registered_doc_link' => 'Τεκμηρίωση:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Μια νέα έκδοση του Firefly III είναι διαθέσιμη', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Αν προτιμάτε, μπορείτε επίσης να ανοίξετε ένα νέο ζήτημα στο https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Το πλήρες stacktrace είναι παρακάτω:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Το Firefly III έχει δημιουργήσει μια νέα συναλλαγή|Το Firefly III έχει δημιουργήσει :count νέες συναλλαγές', 'new_journals_header' => 'Το Firefly III έχει δημιουργήσει μια συναλλαγή για εσάς. Μπορείτε να τη βρείτε στην εγκατάσταση Firefly ΙΙΙ:|Το Firefly III έχει δημιουργήσει :count συναλλαγές για εσάς. Μπορείτε να τις βρείτε στην εγκατάσταση Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/el_GR/errors.php b/resources/lang/el_GR/errors.php index d82477b66b..96c022a3bd 100644 --- a/resources/lang/el_GR/errors.php +++ b/resources/lang/el_GR/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Ιχνηλάτηση στοίβας', 'more_info' => 'Περισσότερες πληροφορίες', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Συλλέξτε περισσότερες πληροφορίες στον κατάλογο storage/logs όπου θα βρείτε αρχεία καταγραφής. Εάν χρησιμοποιείτε το Docker, χρησιμοποιήστε το docker logs -f [container].', - 'collect_info_more' => 'Μπορείτε να διαβάσετε περισσότερα σχετικά με τη συλλογή πληροφοριών σφάλματος στο FAQ.', - 'github_help' => 'Λάβετε βοήθεια στο GitHub', - 'github_instructions' => 'Είστε ευπρόσδεκτοι να ανοίξετε ένα νέο θέμα στο GitHub.', - 'use_search' => 'Χρησιμοποιήστε την αναζήτηση!', - 'include_info' => 'Συμπεριλάβετε τις πληροφορίες από αυτή τη σελίδα εντοπισμού σφαλμάτων.', - 'tell_more' => 'Πείτε μας λίγα περισσότερα από το "μου λέει Ουπς!"', - 'include_logs' => 'Συμπεριλάβετε αρχεία καταγραφής σφαλμάτων (δείτε παραπάνω).', - 'what_did_you_do' => 'Πείτε μας τι κάνατε.', - 'offline_header' => 'Μάλλον είστε εκτός σύνδεσης', - 'offline_unreachable' => 'Το Firefly III δεν είναι προσβάσιμο. Είτε η συσκευή σας αυτή τη στιγμή είναι εκτός σύνδεσης ή ο διακομιστής δεν λειτουργεί.', - 'offline_github' => 'Εάν είστε βέβαιοι ότι τόσο η συσκευή σας όσο και ο διακομιστής είναι συνδεδεμένοι, ανοίξτε ένα θέμα στο GitHub .', - + 'collect_info' => 'Συλλέξτε περισσότερες πληροφορίες στον κατάλογο storage/logs όπου θα βρείτε αρχεία καταγραφής. Εάν χρησιμοποιείτε το Docker, χρησιμοποιήστε το docker logs -f [container].', + 'collect_info_more' => 'Μπορείτε να διαβάσετε περισσότερα σχετικά με τη συλλογή πληροφοριών σφαλμάτων στο FAQ.', + 'github_help' => 'Λάβετε βοήθεια στο GitHub', + 'github_instructions' => 'Είστε ευπρόσδεκτοι να ανοίξετε ένα νέο θέμα στο GitHub.', + 'use_search' => 'Χρησιμοποιήστε την αναζήτηση!', + 'include_info' => 'Συμπεριλάβετε τις πληροφορίες από αυτή τη σελίδα εντοπισμού σφαλμάτων.', + 'tell_more' => 'Πείτε μας λίγα περισσότερα από το "μου λέει Ουπς!"', + 'include_logs' => 'Συμπεριλάβετε αρχεία καταγραφής σφαλμάτων (δείτε παραπάνω).', + 'what_did_you_do' => 'Πείτε μας τι κάνατε.', + 'offline_header' => 'Μάλλον είστε εκτός σύνδεσης', + 'offline_unreachable' => 'Το Firefly III δεν είναι προσβάσιμο. Είτε η συσκευή σας αυτή τη στιγμή είναι εκτός σύνδεσης ή ο διακομιστής δεν λειτουργεί.', + 'offline_github' => 'Εάν είστε βέβαιοι ότι τόσο η συσκευή σας όσο και ο διακομιστής είναι συνδεδεμένοι, ανοίξτε ένα θέμα στο GitHub .', ]; diff --git a/resources/lang/el_GR/firefly.php b/resources/lang/el_GR/firefly.php index 86b45ac213..2aa367f202 100644 --- a/resources/lang/el_GR/firefly.php +++ b/resources/lang/el_GR/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Κλείσιμο', - 'actions' => 'Ενέργειες', - 'edit' => 'Επεξεργασία', - 'delete' => 'Διαγραφή', - 'split' => 'Διαχωρισμός', - 'single_split' => 'Διαχωρισμός', - 'clone' => 'Κλωνοποίηση', - 'confirm_action' => 'Επιβεβαίωση ενέργειας', - 'last_seven_days' => 'Τελευταίες επτά ημέρες', - 'last_thirty_days' => 'Τελευταίες τριάντα ημέρες', - 'last_180_days' => 'Τελευταίες 180 ημέρες', - 'month_to_date' => 'Μήνας μέχρι σήμερα', - 'year_to_date' => 'Έτος μέχρι σήμερα', - 'YTD' => 'ΤΡΕΧΟΝ ΕΤΟΣ', - 'welcome_back' => 'Τι παίζει;', - 'everything' => 'Όλα', - 'today' => 'σήμερα', - 'customRange' => 'Προσαρμοσμένο εύρος', - 'date_range' => 'Ημερολογιακό Εύρος', - 'apply' => 'Εφαρμογή', - 'select_date' => 'Επιλογή ημερομηνίας..', - 'cancel' => 'Άκυρο', - 'from' => 'Από', - 'to' => 'Προς', - 'structure' => 'Δομή', - 'help_translating' => 'Αυτό το βοηθητικό κείμενο δεν είναι ακόμη διαθέσιμο στη γλώσσα σας.Θα βοηθήσετε στη μετάφραση;', - 'showEverything' => 'Εμφάνιση όλων', - 'never' => 'Ποτέ', - 'no_results_for_empty_search' => 'Η αναζήτησή σας ήταν κενή, οπότε δε βρέθηκε τίποτα.', - 'removed_amount' => 'Αφαιρέθηκαν :amount', - 'added_amount' => 'Προστέθηκαν :amount', - 'asset_account_role_help' => 'Όποιες επιπλέον επιλογές προκύψουν από την προτίμησή σας μπορούν να ρυθμιστούν αργότερα.', - 'Opening balance' => 'Υπόλοιπο έναρξης', - 'create_new_stuff' => 'Νέα καταχώρηση', - 'new_withdrawal' => 'Νέα ανάληψη', - 'create_new_transaction' => 'Δημιουργία μιας νέας συναλλαγής', - 'sidebar_frontpage_create' => 'Δημιουργία', - 'new_transaction' => 'Νέα συναλλαγή', - 'no_rules_for_bill' => 'Αυτό το πάγιο έξοδο δεν έχει σχετιζόμενους κανόνες.', - 'go_to_asset_accounts' => 'Δείτε τους λογαριασμούς κεφαλαίου σας', - 'go_to_budgets' => 'Πηγαίνετε στους προϋπολογισμούς σας', - 'go_to_withdrawals' => 'Πηγαίνετε στις αναλήψεις σας', - 'clones_journal_x' => 'Αυτή η συναλλαγή είναι ένας κλώνος του ":description" (#:id)', - 'go_to_categories' => 'Πηγαίνετε στις κατηγορίες σας', - 'go_to_bills' => 'Πηγαίνετε στα πάγια έξοδα', - 'go_to_expense_accounts' => 'Δείτε τους λογαριασμούς δαπανών σας', - 'go_to_revenue_accounts' => 'Δείτε τους λογαριασμούς εσόδων σας', - 'go_to_piggies' => 'Πηγαίνετε στους κουμπαράδες σας', - 'new_deposit' => 'Νέα κατάθεση', - 'new_transfer' => 'Νέα μεταφορά', - 'new_transfers' => 'Νέα μεταφορά', - 'new_asset_account' => 'Νέος λογαριασμός κεφαλαίου', - 'new_expense_account' => 'Νέος λογαριασμός δαπανών', - 'new_revenue_account' => 'Νέος λογαριασμός εσόδων', - 'new_liabilities_account' => 'Νέα υποχρέωση', - 'new_budget' => 'Νέος προϋπολογισμός', - 'new_bill' => 'Νέο πάγιο έξοδο', - 'block_account_logout' => 'Έχετε αποσυνδεθεί. Οι αποκλεισμένοι λογαριασμοί δεν μπορούν να χρησιμοποιήσουν αυτό τον ιστότοπο. Κάνατε εγγραφή με έγκυρο email;', - 'flash_success' => 'Επιτυχία!', - 'flash_info' => 'Μήνυμα', - 'flash_warning' => 'Προσοχή!', - 'flash_error' => 'Σφάλμα!', - 'flash_danger' => 'Κίνδυνος!', - 'flash_info_multiple' => 'Υπάρχει ένα μήνυμα|Υπάρχουν :count μηνύματα', - 'flash_error_multiple' => 'Υπάρχει ένα σφάλμα|Υπάρχουν :count σφάλματα', - 'net_worth' => 'Καθαρή αξία', - 'help_for_this_page' => 'Βοήθεια για αυτή τη σελίδα', - 'help_for_this_page_body' => 'Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με αυτή τη σελίδα στην τεκμηρίωση.', - 'two_factor_welcome' => 'Γειά!', - 'two_factor_enter_code' => 'Για να συνεχίσετε, παρακαλώ εισάγετε τον κωδικό επαλήθευσης δύο παραγόντων. Η εφαρμογή σας θα δημιουργήσει έναν για εσάς.', - 'two_factor_code_here' => 'Εισάγετε τον κωδικό εδώ', - 'two_factor_title' => 'Έλεγχος ταυτότητας δύο παραγόντων', - 'authenticate' => 'Ταυτοποίηση', - 'two_factor_forgot_title' => 'Απώλεια ταυτοποίησης δύο παραγόντων', - 'two_factor_forgot' => 'Ξέχασα τον παράγοντα ταυτοποίησης.', - 'two_factor_lost_header' => 'Χάσατε την ταυτότητα δύο παραγόντων;', - 'two_factor_lost_intro' => 'Εάν χάσατε τους εφεδρικούς κωδικούς σας επίσης, είστε άτυχοι. Αυτό δε μπορεί να διορθωθεί απευθείας. Έχετε δύο επιλογές.', - 'two_factor_lost_fix_self' => 'Εάν εκτελείτε μια δική σας εγκατάσταση του Firefly III, διαβάστε αυτήν την καταχώρηση στις Συχνές Ερωτήσεις για να δείτε τις οδηγίες.', - 'two_factor_lost_fix_owner' => 'Ειδάλλως, στείλτε email στον ιδιοκτήτη του ιστότοπου, :site_owner και ζητήστε να σας επαναφέρει την ταυτότητα δύο παραγόντων.', - 'mfa_backup_code' => 'Έχετε χρησιμοποιήσει ένα εφεδρικό κωδικό για να συνδεθείτε στο Firefly III. Δε μπορεί να χρησιμοποιηθεί ξανά, οπότε διαγράψτε το από τη λίστα σας.', - 'pref_two_factor_new_backup_codes' => 'Λάβετε νέους εφεδρικούς κωδικούς', - 'pref_two_factor_backup_code_count' => 'Έχετε :count έγκυρο εφεδρικό κωδικό.|Έχετε :count έγκυρους εφεδρικούς κωδικούς.', - '2fa_i_have_them' => 'Τους αποθήκευσα!', - 'warning_much_data' => ':days ημέρες δεδομένων θα καθυστερήσουν λιγάκι να φορτώσουν.', - 'registered' => 'Έχετε εγγραφεί επιτυχώς!', - 'Default asset account' => 'Βασικός λογαριασμός κεφαλαίου', - 'no_budget_pointer' => 'Φαίνεται πως δεν έχετε ορίσει προϋπολογισμούς ακόμη. Πρέπει να δημιουργήσετε κάποιον στη σελίδα προϋπολογισμών. Οι προϋπολογισμοί σας βοηθούν να επιβλέπετε τις δαπάνες σας.', - 'no_bill_pointer' => 'Φαίνεται πως δεν έχετε ορίσει πάγια έξοδα ακόμη. Πρέπει να δημιουργήσετε κάποιο στη σελίδα πάγιων εξόδων. Τα πάγια έξοδα σας βοηθούν να επιβλέπετε τις δαπάνες σας.', - 'Savings account' => 'Λογαριασμός αποταμίευσης', - 'Credit card' => 'Πιστωτική κάρτα', - 'source_accounts' => 'Λογαριασμός προέλευσης|Λογαριασμοί προέλευσης', - 'destination_accounts' => 'Λογαριασμός προορισμού|Λογαριασμοί προορισμού', - 'user_id_is' => 'Το αναγνωριστικό Id χρήστη είναι :user', - 'field_supports_markdown' => 'Αυτό το πεδίο υποστηρίζει Markdown.', - 'need_more_help' => 'Εάν χρειάζεστε περαιτέρω βοήθεια σχετικά με τη χρήση του Firefly III, παρακαλώ ανοίξτε ένα ticket στο Github.', - 'reenable_intro_text' => 'Μπορείτε επίσης να ενεργοποιήσετε και πάλι τον εισαγωγικό οδηγό.', - 'intro_boxes_after_refresh' => 'Τα πλαίσια εισαγωγής θα επανεμφανιστούν όταν ανανεώσετε τη σελίδα.', - 'show_all_no_filter' => 'Εμφάνιση όλων των συναλλαγών χωρίς την ομαδοποίηση ανά ημερομηνία.', - 'expenses_by_category' => 'Δαπάνες ανά κατηγορία', - 'expenses_by_budget' => 'Δαπάνες ανά προϋπολογισμό', - 'income_by_category' => 'Έσοδα ανά κατηγορία', - 'expenses_by_asset_account' => 'Δαπάνες ανά αποταμιευτικό λογαριασμό', - 'expenses_by_expense_account' => 'Δαπάνες ανά λογαριασμό δαπανών', - 'cannot_redirect_to_account' => 'Το Firefly III δεν μπορεί να σας ανακατευθύνει στη σωστή σελίδα. Συγγνώμη.', - 'sum_of_expenses' => 'Σύνολο δαπανών', - 'sum_of_income' => 'Σύνολο εσόδων', - 'liabilities' => 'Υποχρεώσεις', - 'spent_in_specific_budget' => 'Δαπάνες στον προϋπολογισμό ":budget"', - 'spent_in_specific_double' => 'Δαπάνες στο λογαριασμό ":account"', - 'earned_in_specific_double' => 'Κέρδη στο λογαριασμό ":account"', - 'source_account' => 'Λογαριασμός προέλευσης', - 'source_account_reconciliation' => 'Δεν μπορείτε να τροποποιήσετε τον λογαριασμό προέλευσης σε μια συναλλαγή τακτοποίησης.', - 'destination_account' => 'Λογαριασμός προορισμού', - 'destination_account_reconciliation' => 'Δεν μπορείτε να τροποποιήσετε τον λογαριασμό προορισμού σε μια συναλλαγή τακτοποίησης.', - 'sum_of_expenses_in_budget' => 'Σύνολο δαπανών στον προϋπολογισμό ":budget"', - 'left_in_budget_limit' => 'Απομένουν για δαπάνες σύμφωνα με τον προϋπολογισμό', - 'current_period' => 'Τρέχουσα περίοδος', - 'show_the_current_period_and_overview' => 'Εμφάνιση της τρέχουσας περιόδου και σύνοψη', - 'pref_languages_locale' => 'Για να λειτουργήσει σωστά μια γλώσσα διαφορετική των Αγγλικών, το λειτουργικό σας σύστημα πρέπει να διαθέτει τις σωστές πληροφορίες τοποθεσίας (locale). Εάν αυτές δεν είναι σωστές τότε τα δεδομένα νομισμάτων, οι ημερομηνίες και τα ποσά μπορεί να έχουν λάθος μορφοποίηση.', - 'budget_in_period' => 'Όλες οι συναλλαγές του προϋπολογισμού ":name" μεταξύ :start και :end σε :currency', - 'chart_budget_in_period' => 'Διάγραμμα όλων των συναλλαγών του προϋπολογισμού ":name" μεταξύ :start και :end σε :currency', - 'chart_budget_in_period_only_currency' => 'Το ποσό που προϋπολογίσατε ήταν σε :currency, έτσι αυτό το διάγραμμα δείχνει συναλλαγές μόνο σε :currency.', - 'chart_account_in_period' => 'Διάγραμμα όλων των συναλλαγών του λογαριασμού ":name" (:balance) μεταξύ :start και :end', - 'chart_category_in_period' => 'Διάγραμμα για όλες τις συναλλαγές της κατηγορίας ":name" μεταξύ :start και :end', - 'chart_category_all' => 'Διάγραμμα για όλες τις συναλλαγές της κατηγορίας ":name"', - 'clone_withdrawal' => 'Κλωνοποίηση αυτής της ανάληψης', - 'clone_deposit' => 'Κλωνοποίηση αυτής της κατάθεσης', - 'clone_transfer' => 'Κλωνοποίηση αυτής της μεταφοράς', - 'multi_select_no_selection' => 'Δεν επιλέχθηκε τίποτα', - 'multi_select_select_all' => 'Επιλογή Όλων', - 'multi_select_n_selected' => 'επιλεγμένο(α)', - 'multi_select_all_selected' => 'Επιλέχθηκαν όλα', - 'multi_select_filter_placeholder' => 'Εύρεση..', - 'intro_next_label' => 'Επόμενο', - 'intro_prev_label' => 'Προηγούμενο', - 'intro_skip_label' => 'Παράλειψη', - 'intro_done_label' => 'Ολοκληρώθηκε', - 'between_dates_breadcrumb' => 'Μεταξύ :start και :end', - 'all_journals_without_budget' => 'Όλες οι συναλλαγές εκτός κάποιου προϋπολογισμού', - 'journals_without_budget' => 'Συναλλαγές εκτός κάποιου προϋπολογισμού', - 'all_journals_without_category' => 'Όλες οι συναλλαγές χωρίς κατηγορία', - 'journals_without_category' => 'Συναλλαγές χωρίς κατηγορία', - 'all_journals_for_account' => 'Όλες οι συναλλαγές του λογαριασμού :name', - 'chart_all_journals_for_account' => 'Διάγραμμα όλων των συναλλαγών του λογαριασμού :name', - 'journals_in_period_for_account' => 'Όλες οι συναλλαγές του λογαριασμού :name μεταξύ :start και :end', - 'journals_in_period_for_account_js' => 'Όλες οι συναλλαγές για τον λογαριασμό {title} μεταξύ {start} και {end}', - 'transferred' => 'Μεταφέρθηκαν', - 'all_withdrawal' => 'Όλες οι δαπάνες', - 'all_transactions' => 'Όλες οι συναλλαγές', - 'title_withdrawal_between' => 'Όλες οι δαπάνες μεταξύ :start και :end', - 'all_deposit' => 'Όλα τα έσοδα', - 'title_deposit_between' => 'Όλα τα έσοδα μεταξύ :start και :end', - 'all_transfers' => 'Όλες οι μεταφορές', - 'title_transfers_between' => 'Όλες οι μεταφορές μεταξύ :start και :end', - 'all_transfer' => 'Όλες οι μεταφορές', - 'all_journals_for_tag' => 'Όλες οι συναλλαγές με ετικέτα ":tag"', - 'title_transfer_between' => 'Όλες οι μεταφορές μεταξύ :start και :end', - 'all_journals_for_category' => 'Όλες οι συναλλαγές της κατηγορίας :name', - 'all_journals_for_budget' => 'Όλες οι συναλλαγές του προϋπολογισμού :name', - 'chart_all_journals_for_budget' => 'Διάγραμμα όλων των συναλλαγών του προϋπολογισμού :name', - 'journals_in_period_for_category' => 'Όλες οι συναλλαγές της κατηγορίας :name μεταξύ :start και :end', - 'journals_in_period_for_tag' => 'Όλες οι συναλλαγές με ετικέτα :tag μεταξύ :start και :end', - 'not_available_demo_user' => 'Το χαρακτηριστικό στο οποίο προσπαθείτε να αποκτήσετε πρόσβαση δεν είναι διαθέσιμο σε χρήστες επίδειξης.', - 'exchange_rate_instructions' => 'Ο αποταμιευτικός λογαριασμός "@name" δέχεται μόνο συναλλαγές σε @native_currency. Εάν επιθυμείτε να χρησιμοποιήσετε @foreign_currence ανταυτού, σιγουρευτείτε ότι το ποσό σε @native_currency είναι επίσης γνωστό:', - 'transfer_exchange_rate_instructions' => 'Ο κεφαλαιακός λογαριασμός προέλευσης "@source_name" δέχεται συναλλαγές μόνο σε @source_currency. Ο κεφαλαιακός λογαριασμός προορισμού "@dest_name" δέχεται συναλλαγές μόνο σε @dest_currency. Πρέπει να παρέχετε το σωστό μεταφερόμενο ποσό και στα δύο νομίσματα.', - 'transaction_data' => 'Δεδομένα συναλλαγής', - 'invalid_server_configuration' => 'Μη έγκυρη παραμετροποίηση εξυπηρετητή', - 'invalid_locale_settings' => 'Το Firefly III δεν είναι σε θέση να διαμορφώσει χρηματικά ποσά επειδή ο διακομιστής σας λείπει τα απαιτούμενα πακέτα. Υπάρχουν οδηγίες πώς να το κάνετε αυτό.', - 'quickswitch' => 'Εναλλαγή', - 'sign_in_to_start' => 'Συνδεθείτε για να ξεκινήσετε τη συνεδρία σας', - 'sign_in' => 'Είσοδος', - 'register_new_account' => 'Εγγραφή νέου λογαριασμού', - 'forgot_my_password' => 'Ξέχασα τον κωδικό μου', - 'problems_with_input' => 'Παρουσιάστηκαν κάποια προβλήματα με την εισαγωγή σας.', - 'reset_password' => 'Επαναφέρετε τον κωδικό σας', - 'button_reset_password' => 'Επαναφορά κωδικού πρόσβασης', - 'reset_button' => 'Επαναφορά', - 'want_to_login' => 'Θέλω να συνδεθώ', - 'login_page_title' => 'Σύνδεση στο Firefly III', - 'register_page_title' => 'Εγγραφή στο Firefly III', - 'forgot_pw_page_title' => 'Ξεχάσατε τον κωδικό πρόσβασης για το Firefly III', - 'reset_pw_page_title' => 'Επαναφέρετε τον κωδικό πρόσβασης για το Firefly III', - 'cannot_reset_demo_user' => 'Δε μπορείτε να επαναφέρετε τον κωδικό πρόσβασης του χρήστη επίδειξης.', - 'no_att_demo_user' => 'Ο χρήστης επίδειξης δε μπορεί να ανεβάσει συνημμένα.', - 'button_register' => 'Εγγραφή', - 'authorization' => 'Εξουσιοδότηση', - 'active_bills_only' => 'μόνο ενεργά πάγια έξοδα', - 'active_bills_only_total' => 'όλα τα ενεργά πάγια έξοδα', - 'active_exp_bills_only' => 'μόνο ενεργά και αναμενόμενα πάγια έξοδα', - 'active_exp_bills_only_total' => 'όλα τα ενεργά αναμενόμενα πάγια έξοδα', - 'per_period_sum_1D' => 'Αναμενόμενο ημερήσιο κόστος', - 'per_period_sum_1W' => 'Αναμενόμενο εβδομαδιαίο κόστος', - 'per_period_sum_1M' => 'Αναμενόμενο μηνιαίο κόστος', - 'per_period_sum_3M' => 'Αναμενόμενο τριμηνιαίο κόστος', - 'per_period_sum_6M' => 'Αναμενόμενο εξαμηνιαίο κόστος', - 'per_period_sum_1Y' => 'Αναμενόμενο ετήσιο κόστος', - 'average_per_bill' => 'μέσος όρος ανά πάγιο έξοδο', - 'expected_total' => 'αναμενόμενο σύνολο', - 'reconciliation_account_name' => ':name τακτοποίηση (:currency)', - 'saved' => 'Αποθηκεύτηκε', - 'advanced_options' => 'Επιλογές για προχωρημένους', - 'advanced_options_explain' => 'Μερικές σελίδες στο Firefly III έχουν κρυμμένες επιλογές για προχωρημένους πίσω από αυτό το κουμπί. Αυτή η σελίδα δεν έχει τίποτα ουσιαστικό εδώ, αλλά ελέγξτε τις υπόλοιπες!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Κλείσιμο', + 'actions' => 'Ενέργειες', + 'edit' => 'Επεξεργασία', + 'delete' => 'Διαγραφή', + 'split' => 'Διαχωρισμός', + 'single_split' => 'Διαχωρισμός', + 'clone' => 'Κλωνοποίηση', + 'clone_and_edit' => 'Κλωνοποίηση και επεξεργασία', + 'confirm_action' => 'Επιβεβαίωση ενέργειας', + 'last_seven_days' => 'Τελευταίες επτά ημέρες', + 'last_thirty_days' => 'Τελευταίες τριάντα ημέρες', + 'last_180_days' => 'Τελευταίες 180 ημέρες', + 'month_to_date' => 'Μήνας μέχρι σήμερα', + 'year_to_date' => 'Έτος μέχρι σήμερα', + 'YTD' => 'ΤΡΕΧΟΝ ΕΤΟΣ', + 'welcome_back' => 'Τι παίζει;', + 'everything' => 'Όλα', + 'today' => 'σήμερα', + 'customRange' => 'Προσαρμοσμένο εύρος', + 'date_range' => 'Ημερολογιακό Εύρος', + 'apply' => 'Εφαρμογή', + 'select_date' => 'Επιλογή ημερομηνίας..', + 'cancel' => 'Άκυρο', + 'from' => 'Από', + 'to' => 'Προς', + 'structure' => 'Δομή', + 'help_translating' => 'Αυτό το βοηθητικό κείμενο δεν είναι ακόμη διαθέσιμο στη γλώσσα σας.Θα βοηθήσετε στη μετάφραση;', + 'showEverything' => 'Εμφάνιση όλων', + 'never' => 'Ποτέ', + 'no_results_for_empty_search' => 'Η αναζήτησή σας ήταν κενή, οπότε δε βρέθηκε τίποτα.', + 'removed_amount' => 'Αφαιρέθηκαν :amount', + 'added_amount' => 'Προστέθηκαν :amount', + 'asset_account_role_help' => 'Όποιες επιπλέον επιλογές προκύψουν από την προτίμησή σας μπορούν να ρυθμιστούν αργότερα.', + 'Opening balance' => 'Υπόλοιπο έναρξης', + 'create_new_stuff' => 'Νέα καταχώρηση', + 'new_withdrawal' => 'Νέα ανάληψη', + 'create_new_transaction' => 'Δημιουργία μιας νέας συναλλαγής', + 'sidebar_frontpage_create' => 'Δημιουργία', + 'new_transaction' => 'Νέα συναλλαγή', + 'no_rules_for_bill' => 'Αυτό το πάγιο έξοδο δεν έχει σχετιζόμενους κανόνες.', + 'go_to_asset_accounts' => 'Δείτε τους λογαριασμούς κεφαλαίου σας', + 'go_to_budgets' => 'Πηγαίνετε στους προϋπολογισμούς σας', + 'go_to_withdrawals' => 'Πηγαίνετε στις αναλήψεις σας', + 'clones_journal_x' => 'Αυτή η συναλλαγή είναι ένας κλώνος του ":description" (#:id)', + 'go_to_categories' => 'Πηγαίνετε στις κατηγορίες σας', + 'go_to_bills' => 'Πηγαίνετε στα πάγια έξοδα', + 'go_to_expense_accounts' => 'Δείτε τους λογαριασμούς δαπανών σας', + 'go_to_revenue_accounts' => 'Δείτε τους λογαριασμούς εσόδων σας', + 'go_to_piggies' => 'Πηγαίνετε στους κουμπαράδες σας', + 'new_deposit' => 'Νέα κατάθεση', + 'new_transfer' => 'Νέα μεταφορά', + 'new_transfers' => 'Νέα μεταφορά', + 'new_asset_account' => 'Νέος λογαριασμός κεφαλαίου', + 'new_expense_account' => 'Νέος λογαριασμός δαπανών', + 'new_revenue_account' => 'Νέος λογαριασμός εσόδων', + 'new_liabilities_account' => 'Νέα υποχρέωση', + 'new_budget' => 'Νέος προϋπολογισμός', + 'new_bill' => 'Νέο πάγιο έξοδο', + 'block_account_logout' => 'Έχετε αποσυνδεθεί. Οι αποκλεισμένοι λογαριασμοί δεν μπορούν να χρησιμοποιήσουν αυτό τον ιστότοπο. Κάνατε εγγραφή με έγκυρο email;', + 'flash_success' => 'Επιτυχία!', + 'flash_info' => 'Μήνυμα', + 'flash_warning' => 'Προσοχή!', + 'flash_error' => 'Σφάλμα!', + 'flash_danger' => 'Κίνδυνος!', + 'flash_info_multiple' => 'Υπάρχει ένα μήνυμα|Υπάρχουν :count μηνύματα', + 'flash_error_multiple' => 'Υπάρχει ένα σφάλμα|Υπάρχουν :count σφάλματα', + 'net_worth' => 'Καθαρή αξία', + 'help_for_this_page' => 'Βοήθεια για αυτή τη σελίδα', + 'help_for_this_page_body' => 'Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με αυτή τη σελίδα στην τεκμηρίωση.', + 'two_factor_welcome' => 'Γειά!', + 'two_factor_enter_code' => 'Για να συνεχίσετε, παρακαλώ εισάγετε τον κωδικό επαλήθευσης δύο παραγόντων. Η εφαρμογή σας θα δημιουργήσει έναν για εσάς.', + 'two_factor_code_here' => 'Εισάγετε τον κωδικό εδώ', + 'two_factor_title' => 'Έλεγχος ταυτότητας δύο παραγόντων', + 'authenticate' => 'Ταυτοποίηση', + 'two_factor_forgot_title' => 'Απώλεια ταυτοποίησης δύο παραγόντων', + 'two_factor_forgot' => 'Ξέχασα τον παράγοντα ταυτοποίησης.', + 'two_factor_lost_header' => 'Χάσατε την ταυτότητα δύο παραγόντων;', + 'two_factor_lost_intro' => 'Εάν χάσατε τους εφεδρικούς κωδικούς σας επίσης, είστε άτυχοι. Αυτό δε μπορεί να διορθωθεί απευθείας. Έχετε δύο επιλογές.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner και ζητήστε να σας επαναφέρει την ταυτότητα δύο παραγόντων.', + 'mfa_backup_code' => 'Έχετε χρησιμοποιήσει ένα εφεδρικό κωδικό για να συνδεθείτε στο Firefly III. Δε μπορεί να χρησιμοποιηθεί ξανά, οπότε διαγράψτε το από τη λίστα σας.', + 'pref_two_factor_new_backup_codes' => 'Λάβετε νέους εφεδρικούς κωδικούς', + 'pref_two_factor_backup_code_count' => 'Έχετε :count έγκυρο εφεδρικό κωδικό.|Έχετε :count έγκυρους εφεδρικούς κωδικούς.', + '2fa_i_have_them' => 'Τους αποθήκευσα!', + 'warning_much_data' => ':days ημέρες δεδομένων θα καθυστερήσουν λιγάκι να φορτώσουν.', + 'registered' => 'Έχετε εγγραφεί επιτυχώς!', + 'Default asset account' => 'Βασικός λογαριασμός κεφαλαίου', + 'no_budget_pointer' => 'Φαίνεται πως δεν έχετε ορίσει προϋπολογισμούς ακόμη. Πρέπει να δημιουργήσετε κάποιον στη σελίδα προϋπολογισμών. Οι προϋπολογισμοί σας βοηθούν να επιβλέπετε τις δαπάνες σας.', + 'no_bill_pointer' => 'Φαίνεται πως δεν έχετε ορίσει πάγια έξοδα ακόμη. Πρέπει να δημιουργήσετε κάποιο στη σελίδα πάγιων εξόδων. Τα πάγια έξοδα σας βοηθούν να επιβλέπετε τις δαπάνες σας.', + 'Savings account' => 'Λογαριασμός αποταμίευσης', + 'Credit card' => 'Πιστωτική κάρτα', + 'source_accounts' => 'Λογαριασμός προέλευσης|Λογαριασμοί προέλευσης', + 'destination_accounts' => 'Λογαριασμός προορισμού|Λογαριασμοί προορισμού', + 'user_id_is' => 'Το αναγνωριστικό Id χρήστη είναι :user', + 'field_supports_markdown' => 'Αυτό το πεδίο υποστηρίζει Markdown.', + 'need_more_help' => 'Εάν χρειάζεστε περαιτέρω βοήθεια σχετικά με τη χρήση του Firefly III, παρακαλώ ανοίξτε ένα ticket στο Github.', + 'reenable_intro_text' => 'Μπορείτε επίσης να ενεργοποιήσετε και πάλι τον εισαγωγικό οδηγό.', + 'intro_boxes_after_refresh' => 'Τα πλαίσια εισαγωγής θα επανεμφανιστούν όταν ανανεώσετε τη σελίδα.', + 'show_all_no_filter' => 'Εμφάνιση όλων των συναλλαγών χωρίς την ομαδοποίηση ανά ημερομηνία.', + 'expenses_by_category' => 'Δαπάνες ανά κατηγορία', + 'expenses_by_budget' => 'Δαπάνες ανά προϋπολογισμό', + 'income_by_category' => 'Έσοδα ανά κατηγορία', + 'expenses_by_asset_account' => 'Δαπάνες ανά αποταμιευτικό λογαριασμό', + 'expenses_by_expense_account' => 'Δαπάνες ανά λογαριασμό δαπανών', + 'cannot_redirect_to_account' => 'Το Firefly III δεν μπορεί να σας ανακατευθύνει στη σωστή σελίδα. Συγγνώμη.', + 'sum_of_expenses' => 'Σύνολο δαπανών', + 'sum_of_income' => 'Σύνολο εσόδων', + 'liabilities' => 'Υποχρεώσεις', + 'spent_in_specific_budget' => 'Δαπάνες στον προϋπολογισμό ":budget"', + 'spent_in_specific_double' => 'Δαπάνες στο λογαριασμό ":account"', + 'earned_in_specific_double' => 'Κέρδη στο λογαριασμό ":account"', + 'source_account' => 'Λογαριασμός προέλευσης', + 'source_account_reconciliation' => 'Δεν μπορείτε να τροποποιήσετε τον λογαριασμό προέλευσης σε μια συναλλαγή τακτοποίησης.', + 'destination_account' => 'Λογαριασμός προορισμού', + 'destination_account_reconciliation' => 'Δεν μπορείτε να τροποποιήσετε τον λογαριασμό προορισμού σε μια συναλλαγή τακτοποίησης.', + 'sum_of_expenses_in_budget' => 'Σύνολο δαπανών στον προϋπολογισμό ":budget"', + 'left_in_budget_limit' => 'Απομένουν για δαπάνες σύμφωνα με τον προϋπολογισμό', + 'current_period' => 'Τρέχουσα περίοδος', + 'show_the_current_period_and_overview' => 'Εμφάνιση της τρέχουσας περιόδου και σύνοψη', + 'pref_languages_locale' => 'Για να λειτουργήσει σωστά μια γλώσσα διαφορετική των Αγγλικών, το λειτουργικό σας σύστημα πρέπει να διαθέτει τις σωστές πληροφορίες τοποθεσίας (locale). Εάν αυτές δεν είναι σωστές τότε τα δεδομένα νομισμάτων, οι ημερομηνίες και τα ποσά μπορεί να έχουν λάθος μορφοποίηση.', + 'budget_in_period' => 'Όλες οι συναλλαγές του προϋπολογισμού ":name" μεταξύ :start και :end σε :currency', + 'chart_budget_in_period' => 'Διάγραμμα όλων των συναλλαγών του προϋπολογισμού ":name" μεταξύ :start και :end σε :currency', + 'chart_budget_in_period_only_currency' => 'Το ποσό που προϋπολογίσατε ήταν σε :currency, έτσι αυτό το διάγραμμα δείχνει συναλλαγές μόνο σε :currency.', + 'chart_account_in_period' => 'Διάγραμμα όλων των συναλλαγών του λογαριασμού ":name" (:balance) μεταξύ :start και :end', + 'chart_category_in_period' => 'Διάγραμμα για όλες τις συναλλαγές της κατηγορίας ":name" μεταξύ :start και :end', + 'chart_category_all' => 'Διάγραμμα για όλες τις συναλλαγές της κατηγορίας ":name"', + 'clone_withdrawal' => 'Κλωνοποίηση αυτής της ανάληψης', + 'clone_deposit' => 'Κλωνοποίηση αυτής της κατάθεσης', + 'clone_transfer' => 'Κλωνοποίηση αυτής της μεταφοράς', + 'multi_select_no_selection' => 'Δεν επιλέχθηκε τίποτα', + 'multi_select_select_all' => 'Επιλογή όλων', + 'multi_select_n_selected' => 'επιλεγμένο(α)', + 'multi_select_all_selected' => 'Επιλέχθηκαν όλα', + 'multi_select_filter_placeholder' => 'Εύρεση..', + 'intro_next_label' => 'Επόμενο', + 'intro_prev_label' => 'Προηγούμενο', + 'intro_skip_label' => 'Παράλειψη', + 'intro_done_label' => 'Ολοκληρώθηκε', + 'between_dates_breadcrumb' => 'Μεταξύ :start και :end', + 'all_journals_without_budget' => 'Όλες οι συναλλαγές εκτός κάποιου προϋπολογισμού', + 'journals_without_budget' => 'Συναλλαγές εκτός κάποιου προϋπολογισμού', + 'all_journals_without_category' => 'Όλες οι συναλλαγές χωρίς κατηγορία', + 'journals_without_category' => 'Συναλλαγές χωρίς κατηγορία', + 'all_journals_for_account' => 'Όλες οι συναλλαγές του λογαριασμού :name', + 'chart_all_journals_for_account' => 'Διάγραμμα όλων των συναλλαγών του λογαριασμού :name', + 'journals_in_period_for_account' => 'Όλες οι συναλλαγές του λογαριασμού :name μεταξύ :start και :end', + 'journals_in_period_for_account_js' => 'Όλες οι συναλλαγές για τον λογαριασμό {title} μεταξύ {start} και {end}', + 'transferred' => 'Μεταφέρθηκαν', + 'all_withdrawal' => 'Όλες οι δαπάνες', + 'all_transactions' => 'Όλες οι συναλλαγές', + 'title_withdrawal_between' => 'Όλες οι δαπάνες μεταξύ :start και :end', + 'all_deposit' => 'Όλα τα έσοδα', + 'title_deposit_between' => 'Όλα τα έσοδα μεταξύ :start και :end', + 'all_transfers' => 'Όλες οι μεταφορές', + 'title_transfers_between' => 'Όλες οι μεταφορές μεταξύ :start και :end', + 'all_transfer' => 'Όλες οι μεταφορές', + 'all_journals_for_tag' => 'Όλες οι συναλλαγές με ετικέτα ":tag"', + 'title_transfer_between' => 'Όλες οι μεταφορές μεταξύ :start και :end', + 'all_journals_for_category' => 'Όλες οι συναλλαγές της κατηγορίας :name', + 'all_journals_for_budget' => 'Όλες οι συναλλαγές του προϋπολογισμού :name', + 'chart_all_journals_for_budget' => 'Διάγραμμα όλων των συναλλαγών του προϋπολογισμού :name', + 'journals_in_period_for_category' => 'Όλες οι συναλλαγές της κατηγορίας :name μεταξύ :start και :end', + 'journals_in_period_for_tag' => 'Όλες οι συναλλαγές με ετικέτα :tag μεταξύ :start και :end', + 'not_available_demo_user' => 'Το χαρακτηριστικό στο οποίο προσπαθείτε να αποκτήσετε πρόσβαση δεν είναι διαθέσιμο σε χρήστες επίδειξης.', + 'exchange_rate_instructions' => 'Ο αποταμιευτικός λογαριασμός "@name" δέχεται μόνο συναλλαγές σε @native_currency. Εάν επιθυμείτε να χρησιμοποιήσετε @foreign_currence ανταυτού, σιγουρευτείτε ότι το ποσό σε @native_currency είναι επίσης γνωστό:', + 'transfer_exchange_rate_instructions' => 'Ο κεφαλαιακός λογαριασμός προέλευσης "@source_name" δέχεται συναλλαγές μόνο σε @source_currency. Ο κεφαλαιακός λογαριασμός προορισμού "@dest_name" δέχεται συναλλαγές μόνο σε @dest_currency. Πρέπει να παρέχετε το σωστό μεταφερόμενο ποσό και στα δύο νομίσματα.', + 'transaction_data' => 'Δεδομένα συναλλαγής', + 'invalid_server_configuration' => 'Μη έγκυρη παραμετροποίηση εξυπηρετητή', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Εναλλαγή', + 'sign_in_to_start' => 'Συνδεθείτε για να ξεκινήσετε τη συνεδρία σας', + 'sign_in' => 'Είσοδος', + 'register_new_account' => 'Εγγραφή νέου λογαριασμού', + 'forgot_my_password' => 'Ξέχασα τον κωδικό μου', + 'problems_with_input' => 'Παρουσιάστηκαν κάποια προβλήματα με την εισαγωγή σας.', + 'reset_password' => 'Επαναφέρετε τον κωδικό σας', + 'button_reset_password' => 'Επαναφορά κωδικού πρόσβασης', + 'reset_button' => 'Επαναφορά', + 'want_to_login' => 'Θέλω να συνδεθώ', + 'login_page_title' => 'Σύνδεση στο Firefly III', + 'register_page_title' => 'Εγγραφή στο Firefly III', + 'forgot_pw_page_title' => 'Ξεχάσατε τον κωδικό πρόσβασης για το Firefly III', + 'reset_pw_page_title' => 'Επαναφέρετε τον κωδικό πρόσβασης για το Firefly III', + 'cannot_reset_demo_user' => 'Δε μπορείτε να επαναφέρετε τον κωδικό πρόσβασης του χρήστη επίδειξης.', + 'no_att_demo_user' => 'Ο χρήστης επίδειξης δε μπορεί να ανεβάσει συνημμένα.', + 'button_register' => 'Εγγραφή', + 'authorization' => 'Εξουσιοδότηση', + 'active_bills_only' => 'μόνο ενεργά πάγια έξοδα', + 'active_bills_only_total' => 'όλα τα ενεργά πάγια έξοδα', + 'active_exp_bills_only' => 'μόνο ενεργά και αναμενόμενα πάγια έξοδα', + 'active_exp_bills_only_total' => 'όλα τα ενεργά αναμενόμενα πάγια έξοδα', + 'per_period_sum_1D' => 'Αναμενόμενο ημερήσιο κόστος', + 'per_period_sum_1W' => 'Αναμενόμενο εβδομαδιαίο κόστος', + 'per_period_sum_1M' => 'Αναμενόμενο μηνιαίο κόστος', + 'per_period_sum_3M' => 'Αναμενόμενο τριμηνιαίο κόστος', + 'per_period_sum_6M' => 'Αναμενόμενο εξαμηνιαίο κόστος', + 'per_period_sum_1Y' => 'Αναμενόμενο ετήσιο κόστος', + 'average_per_bill' => 'μέσος όρος ανά πάγιο έξοδο', + 'expected_total' => 'αναμενόμενο σύνολο', + 'reconciliation_account_name' => ':name τακτοποίηση (:currency)', + 'saved' => 'Αποθηκεύτηκε', + 'advanced_options' => 'Επιλογές για προχωρημένους', + 'advanced_options_explain' => 'Μερικές σελίδες στο Firefly III έχουν κρυμμένες επιλογές για προχωρημένους πίσω από αυτό το κουμπί. Αυτή η σελίδα δεν έχει τίποτα ουσιαστικό εδώ, αλλά ελέγξτε τις υπόλοιπες!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'Δεν υπάρχουν μηνύματα webhook', - 'webhook_trigger_STORE_TRANSACTION' => 'Μετά τη δημιουργία συναλλαγής', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Μετά την ενημέρωση της συναλλαγής', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Μετά τη διαγραφή συναλλαγής', - 'webhook_response_TRANSACTIONS' => 'Λεπτομέρειες συναλλαγής', - 'webhook_response_ACCOUNTS' => 'Πληροφορίες λογαριασμού', - 'webhook_response_none_NONE' => 'Δεν υπάρχουν λεπτομέρειες', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Έλεγχος', - 'create_new_webhook' => 'Δημιουργία νέου webhook', - 'webhooks_create_breadcrumb' => 'Δημιουργία νέου webhook', - 'webhook_trigger_form_help' => 'Επιλέξτε που θα ενεργοποιηθεί το webhook', - 'webhook_response_form_help' => 'Υποδείξτε τι πρέπει να υποβάλει το webhook στη διεύθυνση URL.', - 'webhook_delivery_form_help' => 'Ποια μορφή πρέπει να παραδώσει δεδομένα στο webhook.', - 'webhook_active_form_help' => 'Το webhook πρέπει να είναι ενεργό αλλιώς δεν θα κληθεί.', - 'stored_new_webhook' => 'Αποθηκευμένο νέο webhook ":title"', - 'delete_webhook' => 'Διαγραφή webhook', - 'deleted_webhook' => 'Διαγραμμένο webhook ":title"', - 'edit_webhook' => 'Επεξεργασία webhook ":title"', - 'updated_webhook' => 'Ενημερωμένο webhook ":title"', - 'edit_webhook_js' => 'Επεξεργασία webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'Το webhook ενεργοποιήθηκε στην επιλεγμένη συναλλαγή. Παρακαλώ περιμένετε να εμφανιστούν τα αποτελέσματα.', - 'webhook_messages' => 'Μήνυμα Webhook', - 'view_message' => 'Προβολή μηνύματος', - 'view_attempts' => 'Προβολή αποτυχημένων προσπαθειών', - 'message_content_title' => 'Περιεχόμενο μηνύματος Webhook', - 'message_content_help' => 'Αυτό είναι το περιεχόμενο του μηνύματος που στάλθηκε (ή δοκιμάστηκε) χρησιμοποιώντας αυτό το webhook.', - 'attempt_content_title' => 'Προσπάθειες Webhook', - 'attempt_content_help' => 'Αυτές είναι όλες οι ανεπιτυχείς προσπάθειες αυτού του μηνύματος webhook για υποβολή στην ρυθμισμένη διεύθυνση URL. Μετά από κάποιο χρονικό διάστημα, το Firefly III θα σταματήσει να προσπαθεί.', - 'no_attempts' => 'Δεν υπάρχουν ανεπιτυχείς προσπάθειες. Αυτό είναι καλό!', - 'webhook_attempt_at' => 'Προσπάθεια στο {moment}', - 'logs' => 'Αρχεία καταγραφής (Logs)', - 'response' => 'Απόκριση', - 'visit_webhook_url' => 'Επισκεφθείτε το URL του webhook', - 'reset_webhook_secret' => 'Επαναφορά μυστικού webhook', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") έχει αποθηκευτεί.', - 'webhook_updated_link' => 'Το Webhook #{ID} ("{title}") έχει ενημερωθεί.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'Δεν υπάρχουν μηνύματα webhook', + 'webhook_trigger_STORE_TRANSACTION' => 'Μετά τη δημιουργία συναλλαγής', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Μετά την ενημέρωση της συναλλαγής', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Μετά τη διαγραφή συναλλαγής', + 'webhook_response_TRANSACTIONS' => 'Λεπτομέρειες συναλλαγής', + 'webhook_response_ACCOUNTS' => 'Πληροφορίες λογαριασμού', + 'webhook_response_none_NONE' => 'Δεν υπάρχουν λεπτομέρειες', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Έλεγχος', + 'create_new_webhook' => 'Δημιουργία νέου webhook', + 'webhooks_create_breadcrumb' => 'Δημιουργία νέου webhook', + 'webhook_trigger_form_help' => 'Επιλέξτε που θα ενεργοποιηθεί το webhook', + 'webhook_response_form_help' => 'Υποδείξτε τι πρέπει να υποβάλει το webhook στη διεύθυνση URL.', + 'webhook_delivery_form_help' => 'Ποια μορφή πρέπει να παραδώσει δεδομένα στο webhook.', + 'webhook_active_form_help' => 'Το webhook πρέπει να είναι ενεργό αλλιώς δεν θα κληθεί.', + 'stored_new_webhook' => 'Αποθηκευμένο νέο webhook ":title"', + 'delete_webhook' => 'Διαγραφή webhook', + 'deleted_webhook' => 'Διαγραμμένο webhook ":title"', + 'edit_webhook' => 'Επεξεργασία webhook ":title"', + 'updated_webhook' => 'Ενημερωμένο webhook ":title"', + 'edit_webhook_js' => 'Επεξεργασία webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'Το webhook ενεργοποιήθηκε στην επιλεγμένη συναλλαγή. Παρακαλώ περιμένετε να εμφανιστούν τα αποτελέσματα.', + 'webhook_messages' => 'Μήνυμα Webhook', + 'view_message' => 'Προβολή μηνύματος', + 'view_attempts' => 'Προβολή αποτυχημένων προσπαθειών', + 'message_content_title' => 'Περιεχόμενο μηνύματος Webhook', + 'message_content_help' => 'Αυτό είναι το περιεχόμενο του μηνύματος που στάλθηκε (ή δοκιμάστηκε) χρησιμοποιώντας αυτό το webhook.', + 'attempt_content_title' => 'Προσπάθειες Webhook', + 'attempt_content_help' => 'Αυτές είναι όλες οι ανεπιτυχείς προσπάθειες αυτού του μηνύματος webhook για υποβολή στην ρυθμισμένη διεύθυνση URL. Μετά από κάποιο χρονικό διάστημα, το Firefly III θα σταματήσει να προσπαθεί.', + 'no_attempts' => 'Δεν υπάρχουν ανεπιτυχείς προσπάθειες. Αυτό είναι καλό!', + 'webhook_attempt_at' => 'Προσπάθεια στο {moment}', + 'logs' => 'Αρχεία καταγραφής (Logs)', + 'response' => 'Απόκριση', + 'visit_webhook_url' => 'Επισκεφθείτε το URL του webhook', + 'reset_webhook_secret' => 'Επαναφορά μυστικού webhook', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") έχει αποθηκευτεί.', + 'webhook_updated_link' => 'Το Webhook #{ID} ("{title}") έχει ενημερωθεί.', // API access - 'authorization_request' => 'Αίτημα Εξουσιοδότησης Firefly III v:version', - 'authorization_request_intro' => 'Η εφαρμογή ":client" ζητά άδεια πρόσβασης στην οικονομική σας διαχείριση. Θέλετε να εξουσιοδοτήσετε το :client να έχει πρόσβαση σε αυτές τις εγγραφές;', - 'authorization_request_site' => 'Θα ανακατευθυνθείτε στο :url το οποίο στη συνέχεια θα έχει πρόσβαση στα δεδομένα σας Firefly III.', - 'authorization_request_invalid' => 'Αυτό το αίτημα πρόσβασης δεν είναι έγκυρο. Παρακαλώ μην ακολουθήσετε ποτέ ξανά αυτόν τον σύνδεσμο.', - 'scopes_will_be_able' => 'Αυτή η εφαρμογή θα είναι σε θέση να:', - 'button_authorize' => 'Εξουσιοδότηση', - 'none_in_select_list' => '(τίποτα)', - 'no_piggy_bank' => '(χωρίς κουμπαρά)', - 'name_in_currency' => ':name σε :currency', - 'paid_in_currency' => 'Πληρώθηκε σε :currency', - 'unpaid_in_currency' => 'Απλήρωτο σε :currency', - 'is_alpha_warning' => 'Εκτελείτε μια προ-έκδοση ALPHA. Να είστε έτοιμοι να εντοπίσετε σφάλματα και άλλα ζητήματα.', - 'is_beta_warning' => 'Εκτελείτε μια δοκιμαστική έκδοση BETA. Να είστε έτοιμοι να εντοπίσετε σφάλματα και άλλα ζητήματα.', - 'all_destination_accounts' => 'Λογαριασμοί προορισμού', - 'all_source_accounts' => 'Λογαριασμοί προέλευσης', - 'back_to_index' => 'Επιστροφή στο ευρετήριο', - 'cant_logout_guard' => 'Το Firefly III δε μπορεί να σας αποσυνδέσει.', - 'internal_reference' => 'Εσωτερική αναφορά', + 'authorization_request' => 'Αίτημα Εξουσιοδότησης Firefly III v:version', + 'authorization_request_intro' => 'Η εφαρμογή ":client" ζητά άδεια πρόσβασης στην οικονομική σας διαχείριση. Θέλετε να εξουσιοδοτήσετε το :client να έχει πρόσβαση σε αυτές τις εγγραφές;', + 'authorization_request_site' => 'Θα ανακατευθυνθείτε στο :url το οποίο στη συνέχεια θα έχει πρόσβαση στα δεδομένα σας Firefly III.', + 'authorization_request_invalid' => 'Αυτό το αίτημα πρόσβασης δεν είναι έγκυρο. Παρακαλώ μην ακολουθήσετε ποτέ ξανά αυτόν τον σύνδεσμο.', + 'scopes_will_be_able' => 'Αυτή η εφαρμογή θα είναι σε θέση να:', + 'button_authorize' => 'Εξουσιοδότηση', + 'none_in_select_list' => '(τίποτα)', + 'no_piggy_bank' => '(χωρίς κουμπαρά)', + 'name_in_currency' => ':name σε :currency', + 'paid_in_currency' => 'Πληρώθηκε σε :currency', + 'unpaid_in_currency' => 'Απλήρωτο σε :currency', + 'is_alpha_warning' => 'Εκτελείτε μια προ-έκδοση ALPHA. Να είστε έτοιμοι να εντοπίσετε σφάλματα και άλλα ζητήματα.', + 'is_beta_warning' => 'Εκτελείτε μια δοκιμαστική έκδοση BETA. Να είστε έτοιμοι να εντοπίσετε σφάλματα και άλλα ζητήματα.', + 'all_destination_accounts' => 'Λογαριασμοί προορισμού', + 'all_source_accounts' => 'Λογαριασμοί προέλευσης', + 'back_to_index' => 'Επιστροφή στο ευρετήριο', + 'cant_logout_guard' => 'Το Firefly III δε μπορεί να σας αποσυνδέσει.', + 'internal_reference' => 'Εσωτερική αναφορά', // check for updates: - 'update_check_title' => 'Έλεγχος ενημερώσεων', - 'admin_update_check_title' => 'Αυτόματος έλεγχος ενημερώσεων', - 'admin_update_check_explain' => 'Το Firefly III μπορεί να ελέγξει αυτόματα για ενημερώσεις. Όταν ενεργοποιήσετε αυτή τη ρύθμιση, θα επικοινωνεί με τον διακομιστή ενημέρωσης του Firefly III για να διαπιστώσει εάν είναι διαθέσιμη μια νέα έκδοση για να λάβετε μια ειδοποίηση. Μπορείτε να δοκιμάσετε αυτή την ειδοποίηση πατώντας το κουμπί στα δεξιά. Υποδείξτε παρακάτω εάν θέλετε το Firefly III να ελέγχει για ενημερώσεις.', - 'check_for_updates_permission' => 'Το Firefly III μπορεί να ελέγχει για ενημερώσεις, αλλά χρειάζεται την άδειά σας για αυτό. Παρακαλώ πηγαίνετε στη διαχείριση για να υποδείξετε εάν θέλετε να ενεργοποιηθεί αυτό το χαρακτηριστικό.', - 'updates_ask_me_later' => 'Να ερωτηθώ αργότερα', - 'updates_do_not_check' => 'Να μη γίνεται έλεγχος για ενημερώσεις', - 'updates_enable_check' => 'Ενεργοποίηση του ελέγχου ενημερώσεων', - 'admin_update_check_now_title' => 'Έλεγχος για ενημερώσεις τώρα', - 'admin_update_check_now_explain' => 'Εάν πατήσετε αυτό του κουμπί, το Firefly III θα ελέγξει εάν έχετε την τελευταία έκδοση.', - 'check_for_updates_button' => 'Έλεγχος τώρα!', - 'update_new_version_alert' => 'Μία νέα έκδοση του Firefly III είναι διαθέσιμη. Έχετε την v:your_version, ενώ η τελευταία έκδοση είναι η v:new_version που κυκλοφόρησε στις :date.', - 'update_version_beta' => 'Αυτή είναι μια BETA δοκιμαστική έκδοση. Μπορεί να συναντήσετε προβλήματα.', - 'update_version_alpha' => 'Αυτή είναι μια ALPHA δοκιμαστική έκδοση. Μπορεί να συναντήσετε προβλήματα.', - 'update_current_version_alert' => 'Έχετε την έκδοση v:version, που είναι η τελευταία διαθέσιμη.', - 'update_newer_version_alert' => 'Έχετε την έκδοση v:your_version, που είναι νεότερη από την τελευταία έκδοση, v:new_version.', - 'update_check_error' => 'Παρουσιάστηκε σφάλμα κατά τον έλεγχο για ενημερώσεις: :error', - 'unknown_error' => 'Άγνωστο σφάλμα. Μας συγχωρείτε γι αυτό.', - 'just_new_release' => 'Μια νέα έκδοση είναι διαθέσιμη! Η εκδοσή :version κυκλοφόρησε :date. Όταν μια έκδοση είναι πολύ νέα είναι καλύτερο να περιμένετε λίγες μέρες για να είμαστε σίγουροι για τη νέα έκδοση.', - 'disabled_but_check' => 'Απενεργοποιήσατε τον έλεγχο ενημερώσεων. Επομένως, μην ξεχάσετε να ελέγχετε μόνος σας για τυχόν ενημερώσεις. Ευχαριστώ!', - 'admin_update_channel_title' => 'Κανάλι ενημερώσεων', - 'admin_update_channel_explain' => 'Το Firefly III έχει τρία "κανάλια" ενημερώσεων που καθορίζουν πόσο μπροστά είστε σε θέματα χαρακτηριστικών, βελτιστοποιήσεων και σφαλμάτων. Χρησιμοποιήστε το "beta" κανάλι εάν είστε τολμηροί και το "alpha" εάν είστε ριψοκίνδυνοι.', - 'update_channel_stable' => 'Σταθερή. Όλα λειτουργούν όπως προβλέπονται.', - 'update_channel_beta' => 'Beta. Νέα χαρακτηριστικά αλλά κάποια πράγματα μπορεί να μη λειτουργούν.', - 'update_channel_alpha' => 'Alpha. Δοκιμάζουμε πράγματα, και χρησιμοποιούμε αυτά που λειτουργούν.', + 'update_check_title' => 'Έλεγχος ενημερώσεων', + 'admin_update_check_title' => 'Αυτόματος έλεγχος ενημερώσεων', + 'admin_update_check_explain' => 'Το Firefly III μπορεί να ελέγξει αυτόματα για ενημερώσεις. Όταν ενεργοποιήσετε αυτή τη ρύθμιση, θα επικοινωνεί με τον διακομιστή ενημέρωσης του Firefly III για να διαπιστώσει εάν είναι διαθέσιμη μια νέα έκδοση για να λάβετε μια ειδοποίηση. Μπορείτε να δοκιμάσετε αυτή την ειδοποίηση πατώντας το κουμπί στα δεξιά. Υποδείξτε παρακάτω εάν θέλετε το Firefly III να ελέγχει για ενημερώσεις.', + 'check_for_updates_permission' => 'Το Firefly III μπορεί να ελέγχει για ενημερώσεις, αλλά χρειάζεται την άδειά σας για αυτό. Παρακαλώ πηγαίνετε στη διαχείριση για να υποδείξετε εάν θέλετε να ενεργοποιηθεί αυτό το χαρακτηριστικό.', + 'updates_ask_me_later' => 'Να ερωτηθώ αργότερα', + 'updates_do_not_check' => 'Να μη γίνεται έλεγχος για ενημερώσεις', + 'updates_enable_check' => 'Ενεργοποίηση του ελέγχου ενημερώσεων', + 'admin_update_check_now_title' => 'Έλεγχος για ενημερώσεις τώρα', + 'admin_update_check_now_explain' => 'Εάν πατήσετε αυτό του κουμπί, το Firefly III θα ελέγξει εάν έχετε την τελευταία έκδοση.', + 'check_for_updates_button' => 'Έλεγχος τώρα!', + 'update_new_version_alert' => 'Μία νέα έκδοση του Firefly III είναι διαθέσιμη. Έχετε την v:your_version, ενώ η τελευταία έκδοση είναι η v:new_version που κυκλοφόρησε στις :date.', + 'update_version_beta' => 'Αυτή είναι μια BETA δοκιμαστική έκδοση. Μπορεί να συναντήσετε προβλήματα.', + 'update_version_alpha' => 'Αυτή είναι μια ALPHA δοκιμαστική έκδοση. Μπορεί να συναντήσετε προβλήματα.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Έχετε την έκδοση v:version, που είναι η τελευταία διαθέσιμη.', + 'update_newer_version_alert' => 'Έχετε την έκδοση v:your_version, που είναι νεότερη από την τελευταία έκδοση, v:new_version.', + 'update_check_error' => 'Παρουσιάστηκε σφάλμα κατά τον έλεγχο για ενημερώσεις: :error', + 'unknown_error' => 'Άγνωστο σφάλμα. Μας συγχωρείτε γι αυτό.', + 'disabled_but_check' => 'Απενεργοποιήσατε τον έλεγχο ενημερώσεων. Επομένως, μην ξεχάσετε να ελέγχετε μόνος σας για τυχόν ενημερώσεις. Ευχαριστώ!', + 'admin_update_channel_title' => 'Κανάλι ενημερώσεων', + 'admin_update_channel_explain' => 'Το Firefly III έχει τρία "κανάλια" ενημερώσεων που καθορίζουν πόσο μπροστά είστε σε θέματα χαρακτηριστικών, βελτιστοποιήσεων και σφαλμάτων. Χρησιμοποιήστε το "beta" κανάλι εάν είστε τολμηροί και το "alpha" εάν είστε ριψοκίνδυνοι.', + 'update_channel_stable' => 'Σταθερή. Όλα λειτουργούν όπως προβλέπονται.', + 'update_channel_beta' => 'Beta. Νέα χαρακτηριστικά αλλά κάποια πράγματα μπορεί να μη λειτουργούν.', + 'update_channel_alpha' => 'Alpha. Δοκιμάζουμε πράγματα, και χρησιμοποιούμε αυτά που λειτουργούν.', // search - 'search' => 'Αναζήτηση', - 'search_query' => 'Ερώτημα', - 'search_found_transactions' => 'Το Firefly III βρήκε :count συναλλαγή σε :time δευτερόλεπτα.|Το Firefly III βρήκε :count συναλλαγές σε :time δευτερόλεπτα.', - 'search_found_more_transactions' => 'Το Firefly III βρήκε περισσότερες από :count συναλλαγές σε :time δευτερόλεπτα.', - 'search_for_query' => 'Το Firefly III αναζητεί για συναλλαγές που περιέχουν όλες αυτές τις λέξεις: :query', - 'invalid_operators_list' => 'Αυτές οι παράμετροι αναζήτησης δεν είναι έγκυρες και έχουν αγνοηθεί.', + 'search' => 'Αναζήτηση', + 'search_query' => 'Ερώτημα', + 'search_found_transactions' => 'Το Firefly III βρήκε :count συναλλαγή σε :time δευτερόλεπτα.|Το Firefly III βρήκε :count συναλλαγές σε :time δευτερόλεπτα.', + 'search_found_more_transactions' => 'Το Firefly III βρήκε περισσότερες από :count συναλλαγές σε :time δευτερόλεπτα.', + 'search_for_query' => 'Το Firefly III αναζητεί για συναλλαγές που περιέχουν όλες αυτές τις λέξεις: :query', + 'invalid_operators_list' => 'Αυτές οι παράμετροι αναζήτησης δεν είναι έγκυρες και έχουν αγνοηθεί.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Η ημερομηνία συναλλαγής είναι ":value"', 'search_modifier_not_date_on' => 'Η ημερομηνία συναλλαγής δεν είναι ":value"', 'search_modifier_reconciled' => 'Η συναλλαγή είναι τακτοποιημένη', @@ -391,10 +392,10 @@ return [ 'search_modifier_not_has_any_budget' => 'Η συναλλαγή δεν πρέπει να έχει προϋπολογισμό', 'search_modifier_has_any_budget' => 'Η συναλλαγή πρέπει να έχει έναν (οποιοδήποτε) προϋπολογισμό', 'search_modifier_not_has_no_budget' => 'Η συναλλαγή πρέπει να έχει έναν (οποιοδήποτε) προϋπολογισμό', - 'search_modifier_has_no_bill' => 'Η συναλλαγή δεν πρέπει να έχει λογαριασμό', - 'search_modifier_not_has_no_bill' => 'Η συναλλαγή πρέπει να έχει έναν (οποιοδήποτε) λογαριασμό', - 'search_modifier_has_any_bill' => 'Η συναλλαγή πρέπει να έχει έναν (οποιοδήποτε) λογαριασμό', - 'search_modifier_not_has_any_bill' => 'Η συναλλαγή δεν πρέπει να έχει λογαριασμό', + 'search_modifier_has_no_bill' => 'Η συναλλαγή δεν πρέπει να έχει πάγιο έξοδο', + 'search_modifier_not_has_no_bill' => 'Η συναλλαγή πρέπει να έχει ένα (οποιοδήποτε) πάγιο έξοδο', + 'search_modifier_has_any_bill' => 'Η συναλλαγή πρέπει να έχει ένα (οποιοδήποτε) πάγιο έξοδο', + 'search_modifier_not_has_any_bill' => 'Η συναλλαγή δεν πρέπει να έχει πάγιο έξοδο', 'search_modifier_has_no_tag' => 'Η συναλλαγή δεν πρέπει να έχει καμία ετικέτα', 'search_modifier_not_has_any_tag' => 'Η συναλλαγή δεν πρέπει να έχει ετικέτα', 'search_modifier_not_has_no_tag' => 'Η συναλλαγή πρέπει να έχει (οποιαδήποτε) ετικέτα', @@ -410,23 +411,23 @@ return [ 'search_modifier_no_notes' => 'Η συναλλαγή δεν έχει σημειώσεις', 'search_modifier_not_no_notes' => 'The transaction must have notes', 'search_modifier_any_notes' => 'Η συναλλαγή πρέπει να έχει σημειώσεις', - 'search_modifier_not_any_notes' => 'The transaction has no notes', + 'search_modifier_not_any_notes' => 'Η συναλλαγή δεν έχει σημειώσεις', 'search_modifier_amount_is' => 'Το ποσό είναι ακριβώς :value', - 'search_modifier_not_amount_is' => 'Amount is not :value', + 'search_modifier_not_amount_is' => 'Το ποσό δεν είναι :value', 'search_modifier_amount_less' => 'Το ποσό είναι μικρότερο ή ίσο με :value', - 'search_modifier_not_amount_more' => 'Amount is less than or equal to :value', + 'search_modifier_not_amount_more' => 'Το ποσό είναι μικρότερο ή ίσο με :value', 'search_modifier_amount_more' => 'Το ποσό είναι μεγαλύτερο ή ίσο με :value', - 'search_modifier_not_amount_less' => 'Amount is more than or equal to :value', + 'search_modifier_not_amount_less' => 'Το ποσό είναι μεγαλύτερο ή ίσο με :value', 'search_modifier_source_account_is' => 'Το όνομα του λογαριασμού προέλευσης είναι ακριβώς ":value"', - 'search_modifier_not_source_account_is' => 'Source account name is not ":value"', + 'search_modifier_not_source_account_is' => 'Το όνομα του λογαριασμού προέλευσης δεν είναι ":value"', 'search_modifier_source_account_contains' => 'Το όνομα του λογαριασμού προέλευσης περιέχει ":value"', - 'search_modifier_not_source_account_contains' => 'Source account name does not contain ":value"', + 'search_modifier_not_source_account_contains' => 'Το όνομα του λογαριασμού προέλευσης δεν περιέχει ":value"', 'search_modifier_source_account_starts' => 'Το όνομα του λογαριασμού προέλευσης αρχίζει με ":value"', - 'search_modifier_not_source_account_starts' => 'Source account name does not start with ":value"', + 'search_modifier_not_source_account_starts' => 'Το όνομα του λογαριασμού προέλευσης δεν αρχίζει με ":value"', 'search_modifier_source_account_ends' => 'Το όνομα του λογαριασμού προέλευσης τελειώνει με ":value"', - 'search_modifier_not_source_account_ends' => 'Source account name does not end with ":value"', + 'search_modifier_not_source_account_ends' => 'Το όνομα του λογαριασμού προέλευσης δεν τελειώνει με ":value"', 'search_modifier_source_account_id' => 'Το ID του λογαριασμού προέλευσης είναι :value', - 'search_modifier_not_source_account_id' => 'Source account ID is not :value', + 'search_modifier_not_source_account_id' => 'Το ID του λογαριασμού προέλευσης δεν είναι :value', 'search_modifier_source_account_nr_is' => 'Ο αριθμός (IBAN) του λογαριασμού προέλευσης είναι ":value"', 'search_modifier_not_source_account_nr_is' => 'Source account number (IBAN) is not ":value"', 'search_modifier_source_account_nr_contains' => 'Ο αριθμός (IBAN) του λογαριασμού προέλευσης περιέχει ":value"', @@ -460,14 +461,18 @@ return [ 'search_modifier_account_id' => 'Το/Τα αναγνωριστικά λογαριασμού προέλευσης ή προορισμού είναι: :value', 'search_modifier_not_account_id' => 'Source or destination account ID\'s is/are not: :value', 'search_modifier_category_is' => 'Η κατηγορία είναι ":value"', - 'search_modifier_not_category_is' => 'Category is not ":value"', + 'search_modifier_not_category_is' => 'Η κατηγορία δεν είναι ":value"', 'search_modifier_budget_is' => 'Ο προϋπολογισμός είναι ":value"', - 'search_modifier_not_budget_is' => 'Budget is not ":value"', + 'search_modifier_not_budget_is' => 'Ο προϋπολογισμός δεν είναι ":value"', 'search_modifier_bill_is' => 'Το πάγιο έξοδο είναι ":value"', - 'search_modifier_not_bill_is' => 'Bill is not ":value"', + 'search_modifier_not_bill_is' => 'Το πάγιο έξοδο δεν είναι ":value"', 'search_modifier_transaction_type' => 'Ο τύπος συναλλαγής είναι ":value"', - 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', + 'search_modifier_not_transaction_type' => 'Ο τύπος συναλλαγής δεν είναι ":value"', 'search_modifier_tag_is' => 'Η ετικέτα είναι ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Η συναλλαγή είναι στο έτος ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,12 +487,11 @@ return [ 'search_modifier_date_after_month' => 'Η συναλλαγή είναι μέσα ή μετά το μήνα ":value"', 'search_modifier_date_after_day' => 'Η συναλλαγή είναι μετά ή την ημέρα του μήνα ":value"', - // new 'search_modifier_tag_is_not' => 'Δεν υπάρχει ετικέτα ":value"', - 'search_modifier_not_tag_is_not' => 'Tag is ":value"', - 'search_modifier_account_is' => 'Either account is ":value"', - 'search_modifier_not_account_is' => 'Neither account is ":value"', + 'search_modifier_not_tag_is_not' => 'Η ετικέτα είναι ":value"', + 'search_modifier_account_is' => 'Οποιοσδήποτε λογαριασμός είναι ":value"', + 'search_modifier_not_account_is' => 'Κανένας λογαριασμός δεν είναι ":value"', 'search_modifier_account_contains' => 'Either account contains ":value"', 'search_modifier_not_account_contains' => 'Neither account contains ":value"', 'search_modifier_account_ends' => 'Either account ends with ":value"', @@ -495,7 +499,7 @@ return [ 'search_modifier_account_starts' => 'Either account starts with ":value"', 'search_modifier_not_account_starts' => 'Neither account starts with ":value"', 'search_modifier_account_nr_is' => 'Either account number / IBAN is ":value"', - 'search_modifier_not_account_nr_is' => 'Neither account number / IBAN is ":value"', + 'search_modifier_not_account_nr_is' => 'Κανένας αριθμός λογαριασμού / IBAN δεν είναι ":value"', 'search_modifier_account_nr_contains' => 'Either account number / IBAN contains ":value"', 'search_modifier_not_account_nr_contains' => 'Neither account number / IBAN contains ":value"', 'search_modifier_account_nr_ends' => 'Either account number / IBAN ends with ":value"', @@ -514,12 +518,12 @@ return [ 'search_modifier_not_budget_ends' => 'Budget does not end on ":value"', 'search_modifier_budget_starts' => 'Ο προϋπολογισμός αρχίζει με ":value"', 'search_modifier_not_budget_starts' => 'Budget does not start with ":value"', - 'search_modifier_bill_contains' => 'Bill contains ":value"', - 'search_modifier_not_bill_contains' => 'Bill does not contain ":value"', - 'search_modifier_bill_ends' => 'Bill ends with ":value"', - 'search_modifier_not_bill_ends' => 'Bill does not end on ":value"', - 'search_modifier_bill_starts' => 'Bill starts with ":value"', - 'search_modifier_not_bill_starts' => 'Bill does not start with ":value"', + 'search_modifier_bill_contains' => 'Το πάγιο έξοδο περιέχει ":value"', + 'search_modifier_not_bill_contains' => 'Το πάγιο έξοδο δεν περιέχει ":value"', + 'search_modifier_bill_ends' => 'Το πάγιο έξοδο τελειώνει με ":value"', + 'search_modifier_not_bill_ends' => 'Το πάγιο έξοδο δεν τελειώνει στο ":value"', + 'search_modifier_bill_starts' => 'Το πάγιο έξοδο ξεκινά με ":value"', + 'search_modifier_not_bill_starts' => 'Το πάγιο έξοδο δεν ξεκινά με ":value"', 'search_modifier_external_id_contains' => 'External ID contains ":value"', 'search_modifier_not_external_id_contains' => 'External ID does not contain ":value"', 'search_modifier_external_id_ends' => 'External ID ends with ":value"', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => 'Δημιουργία νέου κανόνα από το ερώτημα αναζήτησης', 'rule_from_search_words' => 'Η ρουτίνα για τους κανόνες δυσκολεύτηκε στο χειρισμό του ":string". Ο προτεινόμενος κανόνας που ταιριάζει στο ερώτημά αναζήτησης μπορεί να δώσει διαφορετικά αποτελέσματα. Παρακαλώ να επιβεβαιώσετε προσεκτικά τους κανόνες ενεργοποίησης.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Οι ακόλουθοι τροποποιητές εφαρμόστηκαν στην αναζήτηση επίσης:', 'general_search_error' => 'Ένα σφάλμα προέκυψε κατά την αναζήτηση. Παρακαλώ ελέγξτε τα αρχεία καταγραφής για περισσότερες πληροφορίες.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'Δεν μπορείτε να εκτελέσετε ανενεργούς κανόνες.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Κανόνες', 'rule_name' => 'Όνομα κανόνα', 'rule_triggers' => 'Ο κανόνας ενεργοποιείται όταν', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Όταν ενημερώνεται μία συναλλαγή', 'rule_trigger_user_action' => 'Η ενέργεια χρήστη είναι ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Το όνομα του λογαριασμού προέλευσης αρχίζει με..', 'rule_trigger_source_account_starts' => 'Το όνομα του λογαριασμού προέλευσης αρχίζει με ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Ο προϋπολογισμός είναι ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Οποιαδήποτε ετικέτα είναι..', 'rule_trigger_tag_is' => 'Οποιαδήποτε ετικέτα είναι ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Το νόμισμα της συναλλαγής είναι..', 'rule_trigger_currency_is' => 'Το νόμισμα της συναλλαγής είναι ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Το ξένο νόμισμα της συναλλαγής είναι..', @@ -979,12 +989,12 @@ return [ 'rule_trigger_budget_ends' => 'Budget ends with ":trigger_value"', 'rule_trigger_budget_starts_choice' => 'Budget starts with..', 'rule_trigger_budget_starts' => 'Budget starts with ":trigger_value"', - 'rule_trigger_bill_contains_choice' => 'Bill contains..', - 'rule_trigger_bill_contains' => 'Bill contains ":trigger_value"', - 'rule_trigger_bill_ends_choice' => 'Bill ends with..', - 'rule_trigger_bill_ends' => 'Bill ends with ":trigger_value"', - 'rule_trigger_bill_starts_choice' => 'Bill starts with..', - 'rule_trigger_bill_starts' => 'Bill starts with ":trigger_value"', + 'rule_trigger_bill_contains_choice' => 'Το πάγιο έξοδο περιέχει..', + 'rule_trigger_bill_contains' => 'Το πάγιο έξοδο περιέχει ":trigger_value"', + 'rule_trigger_bill_ends_choice' => 'Το πάγιο έξοδο τελειώνει με..', + 'rule_trigger_bill_ends' => 'Το πάγιο έξοδο τελειώνει με ":trigger_value"', + 'rule_trigger_bill_starts_choice' => 'Το πάγιο έξοδο ξεκινάει με..', + 'rule_trigger_bill_starts' => 'Το πάγιο έξοδο ξεκινά με ":trigger_value"', 'rule_trigger_external_id_contains_choice' => 'External ID contains..', 'rule_trigger_external_id_contains' => 'External ID contains ":trigger_value"', 'rule_trigger_external_id_ends_choice' => 'External ID ends with..', @@ -1127,10 +1137,10 @@ return [ 'rule_trigger_not_budget_contains' => 'Budget does not contain ":trigger_value"', 'rule_trigger_not_budget_ends' => 'Budget does not end on ":trigger_value"', 'rule_trigger_not_budget_starts' => 'Budget does not start with ":trigger_value"', - 'rule_trigger_not_bill_is' => 'Bill is not is ":trigger_value"', - 'rule_trigger_not_bill_contains' => 'Bill does not contain ":trigger_value"', - 'rule_trigger_not_bill_ends' => 'Bill does not end on ":trigger_value"', - 'rule_trigger_not_bill_starts' => 'Bill does not end with ":trigger_value"', + 'rule_trigger_not_bill_is' => 'Το πάγιο έξοδο δεν είναι ":trigger_value"', + 'rule_trigger_not_bill_contains' => 'Το πάγιο έξοδο δεν περιέχει ":trigger_value"', + 'rule_trigger_not_bill_ends' => 'Το πάγιο έξοδο δεν τελειώνει στο ":trigger_value"', + 'rule_trigger_not_bill_starts' => 'Το πάγιο έξοδο δεν τελειώνει με το ":trigger_value"', 'rule_trigger_not_external_id_is' => 'External ID is not ":trigger_value"', 'rule_trigger_not_external_id_contains' => 'External ID does not contain ":trigger_value"', 'rule_trigger_not_external_id_ends' => 'External ID does not end on ":trigger_value"', @@ -1193,15 +1203,15 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', - 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', + 'rule_trigger_not_has_any_bill' => 'Η συναλλαγή δεν έχει πάγιο έξοδο', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', 'rule_trigger_not_any_external_url' => 'Transaction has no external URL', 'rule_trigger_not_has_no_attachments' => 'Transaction has a (any) attachment(s)', 'rule_trigger_not_has_no_category' => 'Transaction has a (any) category', 'rule_trigger_not_has_no_budget' => 'Transaction has a (any) budget', - 'rule_trigger_not_has_no_bill' => 'Transaction has a (any) bill', + 'rule_trigger_not_has_no_bill' => 'Η συναλλαγή έχει ένα (οποιοδήποτε) πάγιο έξοδο', 'rule_trigger_not_has_no_tag' => 'Transaction has a (any) tag', 'rule_trigger_not_no_notes' => 'Transaction has any notes', 'rule_trigger_not_no_external_url' => 'Transaction has an external URL', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,11 +1230,10 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend - 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', - 'rule_action_delete_transaction' => 'DELETE transaction(!)', + 'rule_action_delete_transaction_choice' => 'ΔΙΑΓΡΑΦΗ συναλλαγής (!)', + 'rule_action_delete_transaction' => 'ΔΙΑΓΡΑΦΗ συναλλαγής (!)', 'rule_action_set_category' => 'Ορίστε την κατηγορία σε ":action_value"', 'rule_action_clear_category' => 'Καθαρισμός κατηγορίας', 'rule_action_set_budget' => 'Ορίστε τον προϋπολογισμό σε ":action_value"', @@ -1235,14 +1244,14 @@ return [ 'rule_action_set_description' => 'Ορίστε την περιγραφή σε ":action_value"', 'rule_action_append_description' => 'Προσαρτήστε την περιγραφή με ":action_value"', 'rule_action_prepend_description' => 'Προεπιλέξτε την περιγραφή με ":action_value"', - 'rule_action_set_category_choice' => 'Set category to ..', + 'rule_action_set_category_choice' => 'Ορισμός κατηγορίας σε ..', 'rule_action_clear_category_choice' => 'Καθαρισμός οποιασδήποτε κατηγορίας', - 'rule_action_set_budget_choice' => 'Set budget to ..', + 'rule_action_set_budget_choice' => 'Ορισμός προϋπολογισμού σε ..', 'rule_action_clear_budget_choice' => 'Καθαρισμός οποιουδήποτε προϋπολογισμού', - 'rule_action_add_tag_choice' => 'Add tag ..', - 'rule_action_remove_tag_choice' => 'Remove tag ..', + 'rule_action_add_tag_choice' => 'Προσθήκη ετικέτας ..', + 'rule_action_remove_tag_choice' => 'Αφαίρεση ετικέτας ..', 'rule_action_remove_all_tags_choice' => 'Αφαίρεση όλων των ετικετών', - 'rule_action_set_description_choice' => 'Set description to ..', + 'rule_action_set_description_choice' => 'Ορισμός περιγραφής σε ..', 'rule_action_update_piggy_choice' => 'Add / remove transaction amount in piggy bank ..', 'rule_action_update_piggy' => 'Add / remove transaction amount in piggy bank ":action_value"', 'rule_action_append_description_choice' => 'Append description with ..', @@ -1258,7 +1267,7 @@ return [ 'rule_action_clear_notes_choice' => 'Αφαίρεση οποιονδήποτε σημειώσεων', 'rule_action_clear_notes' => 'Αφαίρεση οποιονδήποτε σημειώσεων', 'rule_action_set_notes_choice' => 'Set notes to ..', - 'rule_action_link_to_bill_choice' => 'Link to a bill ..', + 'rule_action_link_to_bill_choice' => 'Σύνδεση σε ένα πάγιο έξοδο..', 'rule_action_link_to_bill' => 'Σύνδεση στο πάγιο έξοδο ":action_value"', 'rule_action_switch_accounts_choice' => 'Switch source and destination accounts (transfers only!)', 'rule_action_switch_accounts' => 'Switch source and destination', @@ -1277,261 +1286,264 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Ομάδα κανόνων για πάγια έξοδα', - 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', - 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', - 'rule_for_bill_description' => 'This rule is auto-generated to try to match bill ":name".', + 'rulegroup_for_bills_description' => 'Μια ειδική ομάδα κανόνων για όλους τους κανόνες που περιλαμβάνουν πάγια έξοδα.', + 'rule_for_bill_title' => 'Αυτόματα δημιουργημένος κανόνας για το πάγιο έξοδο ":name"', + 'rule_for_bill_description' => 'Αυτός ο κανόνας δημιουργείται αυτόματα στην προσπάθεια να αντιστοιχηθεί το πάγιο έξοδο ":name".', 'create_rule_for_bill' => 'Δημιουργία νέου κανόνα για το πάγιο έξοδο ":name"', - 'create_rule_for_bill_txt' => 'You have just created a new bill called ":name", congratulations!Firefly III can automagically match new withdrawals to this bill. For example, whenever you pay your rent, the bill "rent" will be linked to the expense. This way, Firefly III can accurately show you which bills are due and which ones aren\'t. In order to do so, a new rule must be created. Firefly III has filled in some sensible defaults for you. Please make sure these are correct. If these values are correct, Firefly III will automatically link the correct withdrawal to the correct bill. Please check out the triggers to see if they are correct, and add some if they\'re wrong.', + 'create_rule_for_bill_txt' => 'Συγχαρητήρια, μόλις δημιουργήσατε ένα νέο πάγιο έξοδο με το όνομα ":name"! Το Firefly III μπορεί να αντιστοιχίσει αυτόματα μελλοντικές πληρωμές για το πάγιο έξοδο. Για παράδειγμα, οποτεδήποτε πληρώνετε το ενοίκιο, ο λογαριασμός δαπανών "Ενοίκιο" θα συνδεθεί με αυτή την πάγια δαπάνη. Με αυτό τον τρόπο, το Firefly III μπορεί να εμφανίσει με ακρίβεια ποια πάγια έξοδα είναι σε καθυστέρηση και ποια όχι. Για να μπορεί να γίνει αυτό, θα πρέπει να δημιουργηθεί ένας νέος κανόνας. Το Firefly III έχει συμπληρωμένες ορισμένες λογικές προεπιλογές για εσάς. Παρακαλώ επιβεβαιώστε ότι είναι σωστές. Εάν αυτές οι τιμές είναι σωστές, το Firefly III θα συνδέσει αυτόματα τη σωστή ανάλογη ανάληψη με το πάγιο έξοδο. Παρακαλώ ελέγξτε τα κριτήρια ενεργοποίησης του κανόνα για να δείτε εάν είναι σωστά και προσθέστε επιπλέον εάν χρειάζεται.', 'new_rule_for_bill_title' => 'Κανόνας για το πάγιο έξοδο ":name"', 'new_rule_for_bill_description' => 'Αυτός ο κανόνας μαρκάρει συναλλαγές για το πάγιο έξοδο ":name".', - 'new_rule_for_journal_title' => 'Κανόνας με βάση τη συναλλαγή ":description"', - 'new_rule_for_journal_description' => 'Αυτός ο κανόνας έχει βασιστεί στη συναλλαγή ":description". Θα αντιστοιχεί σε συναλλαγές που είναι ίδιες ακριβώς.', + 'new_rule_for_journal_title' => 'Κανόνας με βάση τη συναλλαγή ":description"', + 'new_rule_for_journal_description' => 'Αυτός ο κανόνας έχει βασιστεί στη συναλλαγή ":description". Θα αντιστοιχεί σε συναλλαγές που είναι ίδιες ακριβώς.', // tags - 'store_new_tag' => 'Αποθήκευση νέας ετικέτας', - 'update_tag' => 'Ενημέρωση ετικέτας', - 'no_location_set' => 'Δεν ορίστηκε τοποθεσία.', - 'meta_data' => 'Μετα-δεδομένα', - 'location' => 'Τοποθεσία', - 'without_date' => 'Χωρίς ημερομηνία', - 'result' => 'Αποτέλεσμα', - 'sums_apply_to_range' => 'Όλα τα σύνολα αφορούν το συγκεκριμένο εύρος', - 'mapbox_api_key' => 'Για τη χρήση χάρτη, λάβετε ένα κλειδί API από Mapbox. Ανοίξτε το .env αρχείο σας και εισάγετε αυτόν τον κωδικό στο MAPBOX_API_KEY=.', - 'press_object_location' => 'Κάντε δεξί κλικ ή πιέστε παρατεταμένα για να ορίσετε την τοποθεσία του αντικειμένου.', - 'clear_location' => 'Εκκαθάριση τοποθεσίας', - 'delete_all_selected_tags' => 'Διαγραφή όλων των επιλεγμένων ετικετών', - 'select_tags_to_delete' => 'Μην ξεχάσετε να επιλέξετε ορισμένες ετικέτες.', - 'deleted_x_tags' => 'Διαγράφηκε :count ετικέτα.|Διαγράφηκαν :count ετικέτες.', - 'create_rule_from_transaction' => 'Δημιουργία κανόνα με βάση τη συναλλαγή', - 'create_recurring_from_transaction' => 'Δημιουργία επαναλαμβανόμενης συναλλαγής με βάση τη συναλλαγή', - + 'store_new_tag' => 'Αποθήκευση νέας ετικέτας', + 'update_tag' => 'Ενημέρωση ετικέτας', + 'no_location_set' => 'Δεν ορίστηκε τοποθεσία.', + 'meta_data' => 'Μετα-δεδομένα', + 'location' => 'Τοποθεσία', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Χωρίς ημερομηνία', + 'result' => 'Αποτέλεσμα', + 'sums_apply_to_range' => 'Όλα τα σύνολα αφορούν το συγκεκριμένο εύρος', + 'mapbox_api_key' => 'Για τη χρήση χάρτη, λάβετε ένα κλειδί API από Mapbox. Ανοίξτε το .env αρχείο σας και εισάγετε αυτόν τον κωδικό στο MAPBOX_API_KEY=.', + 'press_object_location' => 'Κάντε δεξί κλικ ή πιέστε παρατεταμένα για να ορίσετε την τοποθεσία του αντικειμένου.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Εκκαθάριση τοποθεσίας', + 'delete_all_selected_tags' => 'Διαγραφή όλων των επιλεγμένων ετικετών', + 'select_tags_to_delete' => 'Μην ξεχάσετε να επιλέξετε ορισμένες ετικέτες.', + 'deleted_x_tags' => 'Διαγράφηκε :count ετικέτα.|Διαγράφηκαν :count ετικέτες.', + 'create_rule_from_transaction' => 'Δημιουργία κανόνα με βάση τη συναλλαγή', + 'create_recurring_from_transaction' => 'Δημιουργία επαναλαμβανόμενης συναλλαγής με βάση τη συναλλαγή', // preferences - 'dark_mode_option_browser' => 'Σύμφωνα με τις προτιμήσεις του περιηγητή σας', - 'dark_mode_option_light' => 'Πάντα φωτεινό', - 'dark_mode_option_dark' => 'Πάντα σκοτεινό', - 'equal_to_language' => '(ίδιο με τη γλώσσα)', - 'dark_mode_preference' => 'Σκοτεινή λειτουργία', - 'dark_mode_preference_help' => 'Πείτε στο Firefly III πότε να χρησιμοποιεί σκοτεινή λειτουργία.', - 'pref_home_screen_accounts' => 'Λογαριασμοί αρχικής οθόνης', - 'pref_home_screen_accounts_help' => 'Ποιοι λογαριασμοί θα πρέπει να εμφανίζονται στην αρχική σελίδα;', - 'pref_view_range' => 'Εύρος εμφάνισης', - 'pref_view_range_help' => 'Κάποια διαγράμματα ομαδοποιούνται αυτόματα σε περιόδους. Οι προϋπολογισμοί σας θα ομαδοποιηθούν επίσης σε περιόδους. Ποιά περίοδο προτιμάτε;', - 'pref_1D' => 'Μία ημέρα', - 'pref_1W' => 'Μία εβδομάδα', - 'pref_1M' => 'Ένα μήνα', - 'pref_3M' => 'Τρεις μήνες (τρίμηνο)', - 'pref_6M' => 'Έξι μήνες (εξάμηνο)', - 'pref_1Y' => 'Ένα έτος', - 'pref_last365' => 'Προηγούμενο έτος', - 'pref_last90' => 'Τελευταίες 90 ημέρες', - 'pref_last30' => 'Τελευταίες 30 ημέρες', - 'pref_last7' => 'Τελευταίες 7 ημέρες', - 'pref_YTD' => 'Έτος μέχρι σήμερα', - 'pref_QTD' => 'Τρίμηνο μέχρι σήμερα', - 'pref_MTD' => 'Μήνας μέχρι σήμερα', - 'pref_languages' => 'Γλώσσες', - 'pref_locale' => 'Ρυθμίσεις τοποθεσίας', - 'pref_languages_help' => 'Το Firefly III υποστηρίζει διάφορες γλώσσες. Ποιά προτιμάτε;', - 'pref_locale_help' => 'Το Firefly III σας επιτρέπει να ορίσετε ορισμένες ρυθμίσεις τοποθεσίας, όπως τον τρόπο μορφοποίησης νομισμάτων, αριθμών και ημερομηνιών. Οι καταχωρήσεις σε αυτήν τη λίστα ενδέχεται να μην υποστηρίζονται από το σύστημά σας. Το Firefly III δεν έχει τις σωστές ρυθμίσεις ημερομηνίας για κάθε τοποθεσία. επικοινωνήστε μαζί μου για βελτιώσεις.', - 'pref_locale_no_demo' => 'Αυτό το χαρακτηριστικό δε θα λειτουργήσει για τον χρήστη επίδειξης.', - 'pref_custom_fiscal_year' => 'Ρυθμίσεις οικονομικού έτους', - 'pref_custom_fiscal_year_label' => 'Ενεργοποιημένο', - 'pref_custom_fiscal_year_help' => 'Σε χώρες που χρησιμοποιούν οικονομικό έτος διαφορετικό από 1 Ιανουαρίου εώς 31 Δεκεμβρίου, μπορείτε να ενεργοποιήσετε αυτή την επιλογή και να ορίσετε την αρχή και το τέλος του οικονομικού έτους', - 'pref_fiscal_year_start_label' => 'Έναρξη οικονομικού έτους', - 'pref_two_factor_auth' => 'Επιβεβαίωση δύο βημάτων', - 'pref_two_factor_auth_help' => 'Όταν ενεργοποιήσετε την ταυτοποίηση 2 βημάτων (επίσης γνωστή και ως έλεγχος ταυτότητας δύο παραγόντων), προσθέτετε ένα ακόμη επίπεδο ασφάλειας στο λογαριασμό σας. Μπορείτε να συνδεθείτε με κάτι που ξέρετε (τον κωδικό σας) και κάτι που έχετε (έναν κωδικό επιβεβαίωσης). Οι κωδικοί επιβεβαίωσης δημιουργούνται αυτόματα από μία εφαρμογή στο τηλέφωνό σας, όπως το Authy ή το Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Ενεργοποίηση επιβεβαίωσης 2 βημάτων', - 'pref_two_factor_auth_disabled' => 'Ο κωδικός επιβεβαίωσης 2 βημάτων αφαιρέθηκε και απενεργοποιήθηκε', - 'pref_two_factor_auth_remove_it' => 'Μην ξεχάσετε να αφαιρέσετε το λογαριασμό από την εφαρμογή ταυτοποίησης στο κινητό σας!', - 'pref_two_factor_auth_code' => 'Επιβεβαίωση κωδικού', - 'pref_two_factor_auth_code_help' => 'Σκανάρετε τον κώδικα QR με μία εφαρμογή στο κινητό σας όπως το Authy ή το Google Authenticator και εισάγετε τον κωδικό που δημιουργήθηκε.', - 'pref_two_factor_auth_reset_code' => 'Επαναφορά κωδικού επιβεβαίωσης', - 'pref_two_factor_auth_disable_2fa' => 'Απενεργοποίηση 2FA', - '2fa_use_secret_instead' => 'Εάν δεν μπορείτε να σκανάρετε τον κωδικό QR, δοκιμάστε να χρησιμοποιήσετε το μυστικό ανταυτού: :secret.', - '2fa_backup_codes' => 'Αποθηκεύστε αυτούς τους εφεδρικούς κωδικούς για να μπορείτε να έχετε πρόσβαση σε περίπτωση που χάσετε τη συσκευή σας.', - '2fa_already_enabled' => 'Η επαλήθευση 2 βημάτων είναι ήδη ενεργοποιημένη.', - 'wrong_mfa_code' => 'Αυτός ο κωδικός MFA δεν είναι έγκυρος.', - 'pref_save_settings' => 'Αποθήκευση ρυθμίσεων', - 'saved_preferences' => 'Οι προτιμήσεις αποθηκεύτηκαν!', - 'preferences_general' => 'Γενικά', - 'preferences_frontpage' => 'Αρχική οθόνη', - 'preferences_security' => 'Ασφάλεια', - 'preferences_layout' => 'Διάταξη', - 'preferences_notifications' => 'Ειδοποιήσεις', - 'pref_home_show_deposits' => 'Εμφάνιση καταθέσεων στην αρχική οθόνη', - 'pref_home_show_deposits_info' => 'Η αρχική οθόνη δείχνει ήδη τους λογαριασμούς δαπανών σας. Μήπως θα έπρεπε να δείχνει και τους λογαριασμούς εσόδων σας;', - 'pref_home_do_show_deposits' => 'Ναι, δείξτε τους', - 'successful_count' => 'από τις οποίες :count με επιτυχία', - 'list_page_size_title' => 'Μέγεθος σελίδας', - 'list_page_size_help' => 'Κάθε λίστα αντικειμένων (λογαριασμοί, συναλλαγές, κλπ) εμφανίζει το πολύ, τόσα ανά σελίδα.', - 'list_page_size_label' => 'Μέγεθος σελίδας', - 'between_dates' => '(:start και :end)', - 'pref_optional_fields_transaction' => 'Προαιρετικά πεδία για συναλλαγές', - 'pref_optional_fields_transaction_help' => 'Από προεπιλογή δεν μπορούν να ενεργοποιηθούν όλα τα πεδία όταν δημιουργείται μία νέα συναλλαγή (εξαιτίας της σύγχυσης). Παρακάτω, μπορείτε να ενεργοποιήσετε αυτά τα πεδία εάν νομίζετε ότι θα σας φανούν χρήσιμα. Φυσικά, όποιο πεδίο απενεργοποιείται, αλλά είναι ήδη συμπληρωμένο, θα συνεχίζει να εμφανίζεται ασχέτως της ρύθμισης.', - 'optional_tj_date_fields' => 'Πεδία ημερομηνίας', - 'optional_tj_other_fields' => 'Άλλα πεδία', - 'optional_tj_attachment_fields' => 'Πεδία συνημμένου', - 'pref_optional_tj_interest_date' => 'Ημερομηνία τοκισμού', - 'pref_optional_tj_book_date' => 'Ημερομηνία εγγραφής', - 'pref_optional_tj_process_date' => 'Ημερομηνία επεξεργασίας', - 'pref_optional_tj_due_date' => 'Ημερομηνία προθεσμίας', - 'pref_optional_tj_payment_date' => 'Ημερομηνία πληρωμής', - 'pref_optional_tj_invoice_date' => 'Ημερομηνία τιμολόγησης', - 'pref_optional_tj_internal_reference' => 'Εσωτερική αναφορά', - 'pref_optional_tj_notes' => 'Σημειώσεις', - 'pref_optional_tj_attachments' => 'Συνημμένα', - 'pref_optional_tj_external_url' => 'Εξωτερικό URL', - 'pref_optional_tj_location' => 'Τοποθεσία', - 'pref_optional_tj_links' => 'Συνδέσεις συναλλαγής', - 'optional_field_meta_dates' => 'Ημερομηνίες', - 'optional_field_meta_business' => 'Επιχείρηση', - 'optional_field_attachments' => 'Συνημμένα', - 'optional_field_meta_data' => 'Προαιρετικά μετα-δεδομένα', - 'external_url' => 'Εξωτερικό URL', - 'pref_notification_bill_reminder' => 'Υπενθύμιση τελευταίας προθεσμίας για πάγια έξοδα', - 'pref_notification_new_access_token' => 'Ειδοποίηση όταν δημιουργείται ένα νέο διακριτικό πρόσβασης API', - 'pref_notification_transaction_creation' => 'Ειδοποίηση όταν δημιουργείται αυτόματα μια συναλλαγή', - 'pref_notification_user_login' => 'Ειδοποίηση όταν συνδέεστε από μια νέα τοποθεσία', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Ειδοποιήσεις', - 'pref_notifications_help' => 'Υποδείξτε εάν πρόκειται για ειδοποιήσεις που θέλετε να λαμβάνετε. Ορισμένες ειδοποιήσεις ενδέχεται να περιέχουν ευαίσθητες οικονομικές πληροφορίες.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'Αν θέλετε το Firefly III να σας ειδοποιεί χρησιμοποιώντας το Slack, εισάγετε εδώ το webhook URL. Διαφορετικά αφήστε το πεδίο κενό. Αν είστε διαχειριστής, θα πρέπει να ορίσετε αυτό το URL και στη διαχείριση.', - 'slack_url_label' => '"Εισερχόμενο webhook" URL στο Slack', + 'dark_mode_option_browser' => 'Σύμφωνα με τις προτιμήσεις του περιηγητή σας', + 'dark_mode_option_light' => 'Πάντα φωτεινό', + 'dark_mode_option_dark' => 'Πάντα σκοτεινό', + 'equal_to_language' => '(ίδιο με τη γλώσσα)', + 'dark_mode_preference' => 'Σκοτεινή λειτουργία', + 'dark_mode_preference_help' => 'Πείτε στο Firefly III πότε να χρησιμοποιεί σκοτεινή λειτουργία.', + 'pref_home_screen_accounts' => 'Λογαριασμοί αρχικής οθόνης', + 'pref_home_screen_accounts_help' => 'Ποιοι λογαριασμοί θα πρέπει να εμφανίζονται στην αρχική σελίδα;', + 'pref_view_range' => 'Εύρος εμφάνισης', + 'pref_view_range_help' => 'Κάποια διαγράμματα ομαδοποιούνται αυτόματα σε περιόδους. Οι προϋπολογισμοί σας θα ομαδοποιηθούν επίσης σε περιόδους. Ποιά περίοδο προτιμάτε;', + 'pref_1D' => 'Μία ημέρα', + 'pref_1W' => 'Μία εβδομάδα', + 'pref_1M' => 'Ένα μήνα', + 'pref_3M' => 'Τρεις μήνες (τρίμηνο)', + 'pref_6M' => 'Έξι μήνες (εξάμηνο)', + 'pref_1Y' => 'Ένα έτος', + 'pref_last365' => 'Προηγούμενο έτος', + 'pref_last90' => 'Τελευταίες 90 ημέρες', + 'pref_last30' => 'Τελευταίες 30 ημέρες', + 'pref_last7' => 'Τελευταίες 7 ημέρες', + 'pref_YTD' => 'Έτος μέχρι σήμερα', + 'pref_QTD' => 'Τρίμηνο μέχρι σήμερα', + 'pref_MTD' => 'Μήνας μέχρι σήμερα', + 'pref_languages' => 'Γλώσσες', + 'pref_locale' => 'Ρυθμίσεις τοποθεσίας', + 'pref_languages_help' => 'Το Firefly III υποστηρίζει διάφορες γλώσσες. Ποιά προτιμάτε;', + 'pref_locale_help' => 'Το Firefly III σας επιτρέπει να ορίσετε ορισμένες ρυθμίσεις τοποθεσίας, όπως τον τρόπο μορφοποίησης νομισμάτων, αριθμών και ημερομηνιών. Οι καταχωρήσεις σε αυτήν τη λίστα ενδέχεται να μην υποστηρίζονται από το σύστημά σας. Το Firefly III δεν έχει τις σωστές ρυθμίσεις ημερομηνίας για κάθε τοποθεσία. επικοινωνήστε μαζί μου για βελτιώσεις.', + 'pref_locale_no_demo' => 'Αυτό το χαρακτηριστικό δε θα λειτουργήσει για τον χρήστη επίδειξης.', + 'pref_custom_fiscal_year' => 'Ρυθμίσεις οικονομικού έτους', + 'pref_custom_fiscal_year_label' => 'Ενεργοποιημένο', + 'pref_custom_fiscal_year_help' => 'Σε χώρες που χρησιμοποιούν οικονομικό έτος διαφορετικό από 1 Ιανουαρίου εώς 31 Δεκεμβρίου, μπορείτε να ενεργοποιήσετε αυτή την επιλογή και να ορίσετε την αρχή και το τέλος του οικονομικού έτους', + 'pref_fiscal_year_start_label' => 'Έναρξη οικονομικού έτους', + 'pref_two_factor_auth' => 'Επιβεβαίωση δύο βημάτων', + 'pref_two_factor_auth_help' => 'Όταν ενεργοποιήσετε την ταυτοποίηση 2 βημάτων (επίσης γνωστή και ως έλεγχος ταυτότητας δύο παραγόντων), προσθέτετε ένα ακόμη επίπεδο ασφάλειας στο λογαριασμό σας. Μπορείτε να συνδεθείτε με κάτι που ξέρετε (τον κωδικό σας) και κάτι που έχετε (έναν κωδικό επιβεβαίωσης). Οι κωδικοί επιβεβαίωσης δημιουργούνται αυτόματα από μία εφαρμογή στο τηλέφωνό σας, όπως το Authy ή το Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Ενεργοποίηση επιβεβαίωσης 2 βημάτων', + 'pref_two_factor_auth_disabled' => 'Ο κωδικός επιβεβαίωσης 2 βημάτων αφαιρέθηκε και απενεργοποιήθηκε', + 'pref_two_factor_auth_remove_it' => 'Μην ξεχάσετε να αφαιρέσετε το λογαριασμό από την εφαρμογή ταυτοποίησης στο κινητό σας!', + 'pref_two_factor_auth_code' => 'Επιβεβαίωση κωδικού', + 'pref_two_factor_auth_code_help' => 'Σκανάρετε τον κώδικα QR με μία εφαρμογή στο κινητό σας όπως το Authy ή το Google Authenticator και εισάγετε τον κωδικό που δημιουργήθηκε.', + 'pref_two_factor_auth_reset_code' => 'Επαναφορά κωδικού επιβεβαίωσης', + 'pref_two_factor_auth_disable_2fa' => 'Απενεργοποίηση 2FA', + '2fa_use_secret_instead' => 'Εάν δεν μπορείτε να σκανάρετε τον κωδικό QR, δοκιμάστε να χρησιμοποιήσετε το μυστικό ανταυτού: :secret.', + '2fa_backup_codes' => 'Αποθηκεύστε αυτούς τους εφεδρικούς κωδικούς για να μπορείτε να έχετε πρόσβαση σε περίπτωση που χάσετε τη συσκευή σας.', + '2fa_already_enabled' => 'Η επαλήθευση 2 βημάτων είναι ήδη ενεργοποιημένη.', + 'wrong_mfa_code' => 'Αυτός ο κωδικός MFA δεν είναι έγκυρος.', + 'pref_save_settings' => 'Αποθήκευση ρυθμίσεων', + 'saved_preferences' => 'Οι προτιμήσεις αποθηκεύτηκαν!', + 'preferences_general' => 'Γενικά', + 'preferences_frontpage' => 'Αρχική οθόνη', + 'preferences_security' => 'Ασφάλεια', + 'preferences_layout' => 'Διάταξη', + 'preferences_notifications' => 'Ειδοποιήσεις', + 'pref_home_show_deposits' => 'Εμφάνιση καταθέσεων στην αρχική οθόνη', + 'pref_home_show_deposits_info' => 'Η αρχική οθόνη δείχνει ήδη τους λογαριασμούς δαπανών σας. Μήπως θα έπρεπε να δείχνει και τους λογαριασμούς εσόδων σας;', + 'pref_home_do_show_deposits' => 'Ναι, δείξτε τους', + 'successful_count' => 'από τις οποίες :count με επιτυχία', + 'list_page_size_title' => 'Μέγεθος σελίδας', + 'list_page_size_help' => 'Κάθε λίστα αντικειμένων (λογαριασμοί, συναλλαγές, κλπ) εμφανίζει το πολύ, τόσα ανά σελίδα.', + 'list_page_size_label' => 'Μέγεθος σελίδας', + 'between_dates' => '(:start και :end)', + 'pref_optional_fields_transaction' => 'Προαιρετικά πεδία για συναλλαγές', + 'pref_optional_fields_transaction_help' => 'Από προεπιλογή δεν μπορούν να ενεργοποιηθούν όλα τα πεδία όταν δημιουργείται μία νέα συναλλαγή (εξαιτίας της σύγχυσης). Παρακάτω, μπορείτε να ενεργοποιήσετε αυτά τα πεδία εάν νομίζετε ότι θα σας φανούν χρήσιμα. Φυσικά, όποιο πεδίο απενεργοποιείται, αλλά είναι ήδη συμπληρωμένο, θα συνεχίζει να εμφανίζεται ασχέτως της ρύθμισης.', + 'optional_tj_date_fields' => 'Πεδία ημερομηνίας', + 'optional_tj_other_fields' => 'Άλλα πεδία', + 'optional_tj_attachment_fields' => 'Πεδία συνημμένου', + 'pref_optional_tj_interest_date' => 'Ημερομηνία τοκισμού', + 'pref_optional_tj_book_date' => 'Ημερομηνία εγγραφής', + 'pref_optional_tj_process_date' => 'Ημερομηνία επεξεργασίας', + 'pref_optional_tj_due_date' => 'Ημερομηνία προθεσμίας', + 'pref_optional_tj_payment_date' => 'Ημερομηνία πληρωμής', + 'pref_optional_tj_invoice_date' => 'Ημερομηνία τιμολόγησης', + 'pref_optional_tj_internal_reference' => 'Εσωτερική αναφορά', + 'pref_optional_tj_notes' => 'Σημειώσεις', + 'pref_optional_tj_attachments' => 'Συνημμένα', + 'pref_optional_tj_external_url' => 'Εξωτερικό URL', + 'pref_optional_tj_location' => 'Τοποθεσία', + 'pref_optional_tj_links' => 'Συνδέσεις συναλλαγής', + 'optional_field_meta_dates' => 'Ημερομηνίες', + 'optional_field_meta_business' => 'Επιχείρηση', + 'optional_field_attachments' => 'Συνημμένα', + 'optional_field_meta_data' => 'Προαιρετικά μετα-δεδομένα', + 'external_url' => 'Εξωτερικό URL', + 'pref_notification_bill_reminder' => 'Υπενθύμιση τελευταίας προθεσμίας για πάγια έξοδα', + 'pref_notification_new_access_token' => 'Ειδοποίηση όταν δημιουργείται ένα νέο διακριτικό πρόσβασης API', + 'pref_notification_transaction_creation' => 'Ειδοποίηση όταν δημιουργείται αυτόματα μια συναλλαγή', + 'pref_notification_user_login' => 'Ειδοποίηση όταν συνδέεστε από μια νέα τοποθεσία', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Ειδοποιήσεις', + 'pref_notifications_help' => 'Υποδείξτε εάν πρόκειται για ειδοποιήσεις που θέλετε να λαμβάνετε. Ορισμένες ειδοποιήσεις ενδέχεται να περιέχουν ευαίσθητες οικονομικές πληροφορίες.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'Αν θέλετε το Firefly III να σας ειδοποιεί χρησιμοποιώντας το Slack, εισάγετε εδώ το webhook URL. Διαφορετικά αφήστε το πεδίο κενό. Αν είστε διαχειριστής, θα πρέπει να ορίσετε αυτό το URL και στη διαχείριση.', + 'slack_url_label' => '"Εισερχόμενο webhook" URL στο Slack', // Financial administrations - 'administration_index' => 'Οικονομική διαχείριση', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Οικονομική διαχείριση', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Εκκαθάριση δεδομένων από το Firefly III', - 'purge_data_expl' => '"Εκκαθάριση" σημαίνει "διαγραφή αυτού που έχει ήδη διαγραφεί". Σε κανονικές συνθήκες, το Firefly III δε διαγράφει τίποτα οριστικά. Απλώς το κρύβει. Το παρακάτω κουμπί διαγράφει όλες αυτές τις προηγουμένως "διαγραμμένες" εγγραφές ΓΙΑ ΠΑΝΤΑ.', - 'delete_stuff_header' => 'Διαγραφή και εκκαθάριση δεδομένων', - 'purge_all_data' => 'Εκκαθάριση όλων των διαγραμμένων εγγραφών', - 'purge_data' => 'Εκκαθάριση δεδομένων', - 'purged_all_records' => 'Όλες οι διαγραμμένες εγγραφές έχουν εκκαθαριστεί οριστικά.', - 'delete_data_title' => 'Διαγραφή δεδομένων από το Firefly III', - 'permanent_delete_stuff' => 'Μπορείτε να διαγράψετε πράγματα από το Firefly III. Η χρήση των παρακάτω κουμπιών σημαίνει ότι τα στοιχεία σας αυτά θα είναι κρυμμένα και δε θα εμφανίζονται. Δεν υπάρχει κουμπί αναίρεσης για αυτή την ενέργεια, αλλά τα στοιχεία θα παραμείνουν στη βάση δεδομένων όπου μπορείτε να τα αναζητήσετε χειροκίνητα σε κάποια άλλη στιγμή εάν είναι απαραίτητο.', - 'other_sessions_logged_out' => 'Όλες οι άλλες συνεδρίες σας έχουν αποσυνδεθεί.', - 'delete_unused_accounts' => 'Η διαγραφή αχρησιμοποίητων λογαριασμών θα καθαρίσει τις λίστες αυτόματης συμπλήρωσης.', - 'delete_all_unused_accounts' => 'Διαγραφή αχρησιμοποίητων λογαριασμών', - 'deleted_all_unused_accounts' => 'Όλοι οι αχρησιμοποίητοι λογαριασμοί έχουν διαγραφεί', - 'delete_all_budgets' => 'Διαγραφή ΟΛΩΝ των προϋπολογισμών σας', - 'delete_all_categories' => 'Διαγραφή ΟΛΩΝ των κατηγοριών σας', - 'delete_all_tags' => 'Διαγραφή ΟΛΩΝ των ετικετών σας', - 'delete_all_bills' => 'Διαγραφή ΟΛΩΝ των πάγιων εξόδων σας', - 'delete_all_piggy_banks' => 'Διαγραφή ΟΛΩΝ των κουμπαράδων σας', - 'delete_all_rules' => 'Διαγραφή ΟΛΩΝ των κανόνων σας', - 'delete_all_recurring' => 'Διαγραφή ΟΛΩΝ των επαναλαμβανόμενων συναλλαγών σας', - 'delete_all_object_groups' => 'Διαγραφή ΟΛΩΝ των ομάδων αντικειμένων σας', - 'delete_all_accounts' => 'Διαγραφή ΟΛΩΝ των λογαριασμών σας', - 'delete_all_asset_accounts' => 'Διαγραφή ΟΛΩΝ των λογαριασμών κεφαλαίων σας', - 'delete_all_expense_accounts' => 'Διαγραφή ΟΛΩΝ των λογαριασμών δαπανών σας', - 'delete_all_revenue_accounts' => 'Διαγραφή ΟΛΩΝ των λογαριασμών εσόδων σας', - 'delete_all_liabilities' => 'Διαγραφή ΟΛΩΝ των υποχρεώσεων σας', - 'delete_all_transactions' => 'Διαγραφή ΟΛΩΝ των συναλλαγών σας', - 'delete_all_withdrawals' => 'Διαγραφή ΟΛΩΝ των αναλήψεων σας', - 'delete_all_deposits' => 'Διαγραφή ΟΛΩΝ των καταθέσεων σας', - 'delete_all_transfers' => 'Διαγραφή ΟΛΩΝ των μεταφορών σας', - 'also_delete_transactions' => 'Η διαγραφή λογαριασμών θα διαγράψει επίσης ΟΛΕΣ τις σχετικές αναλήψεις, καταθέσεις και μεταφορές!', - 'deleted_all_budgets' => 'Όλοι οι προϋπολογισμοί έχουν διαγραφεί', - 'deleted_all_categories' => 'Όλες οι κατηγορίες έχουν διαγραφεί', - 'deleted_all_tags' => 'Όλες οι ετικέτες έχουν διαγραφεί', - 'deleted_all_bills' => 'Όλα τα πάγια έξοδα έχουν διαγραφεί', - 'deleted_all_piggy_banks' => 'Όλοι οι κουμπαράδες έχουν διαγραφεί', - 'deleted_all_rules' => 'Όλοι οι κανόνες και οι ομάδες κανόνων έχουν διαγραφεί', - 'deleted_all_object_groups' => 'Όλες οι ομάδες έχουν διαγραφεί', - 'deleted_all_accounts' => 'Όλοι οι λογαριασμοί έχουν διαγραφεί', - 'deleted_all_asset_accounts' => 'Όλοι οι λογαριασμοί κεφαλαίων έχουν διαγραφεί', - 'deleted_all_expense_accounts' => 'Όλοι οι λογαριασμοί δαπανών έχουν διαγραφεί', - 'deleted_all_revenue_accounts' => 'Όλοι οι λογαριασμοί εσόδων έχουν διαγραφεί', - 'deleted_all_liabilities' => 'Όλες οι υποχρεώσεις έχουν διαγραφεί', - 'deleted_all_transactions' => 'Όλες οι συναλλαγές έχουν διαγραφεί', - 'deleted_all_withdrawals' => 'Όλες οι αναλήψεις έχουν διαγραφεί', - 'deleted_all_deposits' => 'Όλες οι καταθέσεις έχουν διαγραφεί', - 'deleted_all_transfers' => 'Όλες οι μεταφορές έχουν διαγραφεί', - 'deleted_all_recurring' => 'Όλες οι επαναλαμβανόμενες συναλλαγές έχουν διαγραφεί', - 'change_your_password' => 'Αλλαγή του κωδικού σας', - 'delete_account' => 'Διαγραφή λογαριασμού', - 'current_password' => 'Τρέχων κωδικός', - 'new_password' => 'Νέος κωδικός', - 'new_password_again' => 'Νέος κωδικός (επανάληψη)', - 'delete_your_account' => 'Διαγραφή του λογαριασμού σας', - 'delete_your_account_help' => 'Διαγράφοντας το λογαριασμό σας, θα διαγράψετε και όλες τις συναλλαγές, τους λογαριασμούς, οτιδήποτε μπορεί να έχετε αποθηκεύσει στο Firefly III. Θα ΕΞΑΦΑΝΙΣΤΟΥΝ.', - 'delete_your_account_password' => 'Εισάγετε τον κωδικό σας για να συνεχίσετε.', - 'password' => 'Κωδικός πρόσβασης', - 'are_you_sure' => 'Είστε σίγουρος; Δεν μπορείτε να το πάρετε πίσω.', - 'delete_account_button' => 'ΔΙΑΓΡΑΦΗ του λογαριασμού σας', - 'invalid_current_password' => 'Μη έγκυρος κωδικός!', - 'password_changed' => 'Ο κωδικός έχει αλλάξει!', - 'should_change' => 'Θα ήταν καλό να αλλάξετε τον κωδικό σας.', - 'invalid_password' => 'Άκυρος κωδικός!', - 'what_is_pw_security' => 'Τι είναι η "επιβεβαίωση ασφάλειας κωδικού";', - 'secure_pw_title' => 'Πως να διαλέξετε ένα ασφαλή κωδικό πρόσβασης', - 'forgot_password_response' => 'Σας ευχαριστούμε. Εάν υπάρχει λογαριασμός με αυτή τη διεύθυνση ηλεκτρονικού ταχυδρομείου, θα βρείτε οδηγίες στα εισερχόμενά σας.', - 'secure_pw_history' => 'Δεν περνάει ούτε μία εβδομάδα χωρίς να διαβάσεις για ένα site που έχασε τους κωδικούς των χρηστών του. Οι χάκερς και οι κλέφτες χρησιμοποιούν αυτούς τους κωδικούς για να κλέψουν προσωπικές σας πληροφορίες. Οι πληροφορίες αυτές είναι πολύτιμες.', - 'secure_pw_ff' => 'Χρησιμοποιείτε τον ίδιο κωδικό πρόσβασης παντού στο internet; Εάν ένας ιστότοπος διαρρεύσει τον κωδικό σας, οι χάκερ θα έχουν πρόσβαση σε όλα τα δεδομένα σας. Το Firefly III βασίζεται σε εσάς για να διαλέξετε ένα δυνατό και μοναδικό κωδικό για την προστασία των οικονομικών σας αρχείων.', - 'secure_pw_check_box' => 'Για να βοηθήσει σε αυτό το Firefly III μπορεί να ελέγξει εάν ο κωδικός που θέλετε να χρησιμοποιήσετε έχει κλαπεί στο παρελθόν. Εάν ισχύει αυτό, τότε το Firefly III σας συμβουλεύει να μη χρησιμοποιήσετε αυτό τον κωδικό.', - 'secure_pw_working_title' => 'Πως λειτουργεί;', - 'secure_pw_working' => 'Τσεκάροντας αυτό το πλαίσιο, το Firefly III θα στείλει τους 5 πρώτους χαρακτήρες του SHA1 hash του κωδικού σας στον Ιστότοπο του Troy Hunt για να δει εάν είναι στη λίστα. Αυτό θα σας εμποδίσει να χρησιμοποιήσετε ένα μη ασφαλές κωδικό όπως συνιστάται στη τελευταία Ειδική Έκδοση NIST πάνω στο θέμα αυτό.', - 'secure_pw_should' => 'Θα πρέπει να τσεκάρω αυτό το πλαίσιο;', - 'secure_pw_long_password' => 'Ναι. Πάντα να επιβεβαιώνετε ότι ο κωδικός σας είναι ασφαλής.', - 'command_line_token' => 'Διακριτικό γραμμής εντολών', - 'explain_command_line_token' => 'Χρειάζεστε αυτό το διακριτικό για να εκτελέσετε εργασίες γραμμής εντολών, όπως εξαγωγή δεδομένων. Χωρίς αυτό, οι εντολές δε θα λειτουργήσουν. Μην κοινοποιήσετε το διακριτικό της γραμμής εντολών. Κανείς δεν θα σας ζητήσει αυτό το διακριτικό. Εάν φοβάστε ότι το χάσατε, ή δε χρειάζεστε κάποιο ιδιαίτερο λόγο, δημιουργήστε ξανά αυτό το διακριτικό χρησιμοποιώντας το κουμπί.', - 'regenerate_command_line_token' => 'Αναδημιουργία διακριτικού γραμμής εντολών', - 'token_regenerated' => 'Δημιουργήθηκε ένα νέο διακριτικό γραμμής εντολών', - 'change_your_email' => 'Αλλάξτε την διεύθυνση email σας', - 'email_verification' => 'Ένα μήνυμα email θα σταλεί στην παλιά ΚΑΙ στη νέα σας διεύθυνση email. Για λόγους ασφαλείας, δεν θα μπορέσετε να συνδεθείτε εώς ότου επιβεβαιώσετε τη νέα σας διεύθυνση email. Εάν δεν είστε σίγουροι ότι η δική σας εγκατάσταση Firefly III μπορεί να στείλει email, παρακαλώ μην χρησιμοποιήσετε αυτή τη δυνατότητα. Εάν είστε διαχειριστής μπορείτε να δοκιμάσετε αυτή τη λειτουργία στη Διαχείριση.', - 'email_changed_logout' => 'Μέχρι να επιβεβαιώσετε την διεύθυνση email σας, δεν μπορείτε να συνδεθείτε.', - 'login_with_new_email' => 'Τώρα μπορείτε να συνδεθείτε με τη νέα σας διεύθυνση email.', - 'login_with_old_email' => 'Τώρα μπορείτε να συνδεθείτε με το παλιό σας email ξανά.', - 'login_provider_local_only' => 'Αυτή η λειτουργία δεν είναι διαθέσιμη όταν πιστοποιήστε μέσω ":login_provider".', - 'external_user_mgt_disabled' => 'Αυτή η ενέργεια δεν είναι διαθέσιμη όταν το Firefly III δεν είναι υπεύθυνο για διαχείριση χρηστών ή έλεγχο ταυτότητας.', - 'external_auth_disabled' => 'Αυτή η ενέργεια δεν είναι διαθέσιμη όταν το Firefly III δεν είναι υπεύθυνο για το χειρισμό ελέγχου ταυτότητας.', - 'delete_local_info_only' => "Επειδή το Firefly III δεν είναι υπεύθυνο για διαχείριση χρηστών ή έλεγχο ταυτότητας, αυτή η λειτουργία θα διαγράψει μόνο τις τοπικές εγγραφές του Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Πελάτες OAuth', - 'profile_oauth_no_clients' => 'Δεν έχετε δημιουργήσει πελάτες OAuth.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Πελάτες', - 'profile_oauth_client_id' => 'Αναγνωριστικό πελάτη', - 'profile_oauth_client_name' => 'Όνομα', - 'profile_oauth_client_secret' => 'Μυστικό', - 'profile_oauth_create_new_client' => 'Δημιουργία νέου πελάτη', - 'profile_oauth_create_client' => 'Δημιουργία πελάτη', - 'profile_oauth_edit_client' => 'Επεξεργασία πελάτη', - 'profile_oauth_name_help' => 'Κάτι που οι χρήστες σας θα αναγνωρίζουν και θα εμπιστεύονται.', - 'profile_oauth_redirect_url' => 'URL ανακατεύθυνσης', - 'profile_oauth_redirect_url_help' => 'To authorization callback URL της εφαρμογής σας.', - 'profile_authorized_apps' => 'Εξουσιοδοτημένες εφαρμογές', - 'profile_authorized_clients' => 'Εξουσιοδοτημένοι πελάτες', - 'profile_scopes' => 'Πεδία εφαρμογής', - 'profile_revoke' => 'Ανάκληση', - 'profile_oauth_client_secret_title' => 'Μυστικό Πελάτη', - 'profile_oauth_client_secret_expl' => 'Εδώ είναι το νέο σας μυστικό πελάτη. Αυτή είναι η μόνη φορά που θα σας εμφανιστεί, οπότε μην το χάσετε! Μπορείτε να το χρησιμοποιείτε για να κάνετε αιτήματα API.', - 'profile_personal_access_tokens' => 'Διακριτικά προσωπικής πρόσβασης', - 'profile_personal_access_token' => 'Διακριτικά προσωπικής πρόσβασης', - 'profile_oauth_confidential' => 'Εμπιστευτικό', - 'profile_oauth_confidential_help' => 'Απαιτήστε από το πρόγραμμα πελάτη να πραγματοποιήσει έλεγχο ταυτότητας με ένα μυστικό. Οι έμπιστοι πελάτες μπορούν να διατηρούν διαπιστευτήρια με ασφαλή τρόπο χωρίς να τα εκθέτουν σε μη εξουσιοδοτημένα μέρη. Οι δημόσιες εφαρμογές, όπως οι εγγενείς εφαρμογές για επιτραπέζιους υπολογιστές ή JavaScript SPA, δεν μπορούν να κρατήσουν μυστικά με ασφάλεια.', - 'profile_personal_access_token_explanation' => 'Εδώ είναι το νέο διακριτικό προσωπικής πρόσβασης. Αυτή είναι η μόνη φορά που θα εμφανιστεί, οπότε μη το χάσετε! Μπορείτε να χρησιμοποιείτε αυτό το διακριτικό για να κάνετε κλήσεις API.', - 'profile_no_personal_access_token' => 'Δεν έχετε δημιουργήσει προσωπικά διακριτικά πρόσβασης.', - 'profile_create_new_token' => 'Δημιουργία νέου διακριτικού', - 'profile_create_token' => 'Δημιουργία διακριτικού', - 'profile_create' => 'Δημιουργία', - 'profile_save_changes' => 'Αποθήκευση αλλαγών', - 'profile_whoops' => 'Ούπς!', - 'profile_something_wrong' => 'Κάτι πήγε στραβά!', - 'profile_try_again' => 'Κάτι πήγε στραβά. Παρακαλώ προσπαθήστε ξανά.', - 'amounts' => 'Ποσά', - 'multi_account_warning_unknown' => 'Ανάλογα με τον τύπο της συναλλαγής που δημιουργείτε, ο λογαριασμός προέλευσης ή/και προορισμού των επόμενων διαχωρισμών ενδέχεται να παρακαμφθεί από αυτό που ορίζεται στο πρώτο διαχωρισμό της συναλλαγής.', - 'multi_account_warning_withdrawal' => 'Λάβετε υπόψη ότι ο λογαριασμός προέλευσης των επόμενων διαχωρισμών θα υπερισχύσει αυτού του πρώτου διαχωρισμού της ανάληψης.', - 'multi_account_warning_deposit' => 'Λάβετε υπόψη ότι ο λογαριασμός προορισμού των επόμενων διαχωρισμών θα υπερισχύσει αυτού του πρώτου διαχωρισμού της κατάθεσης.', - 'multi_account_warning_transfer' => 'Λάβετε υπόψη ότι ο λογαριασμός προέλευσης και προορισμού των επόμενων διαχωρισμών θα υπερισχύσει αυτού του πρώτου διαχωρισμού της μεταφοράς.', + 'purge_data_title' => 'Εκκαθάριση δεδομένων από το Firefly III', + 'purge_data_expl' => '"Εκκαθάριση" σημαίνει "διαγραφή αυτού που έχει ήδη διαγραφεί". Σε κανονικές συνθήκες, το Firefly III δε διαγράφει τίποτα οριστικά. Απλώς το κρύβει. Το παρακάτω κουμπί διαγράφει όλες αυτές τις προηγουμένως "διαγραμμένες" εγγραφές ΓΙΑ ΠΑΝΤΑ.', + 'delete_stuff_header' => 'Διαγραφή και εκκαθάριση δεδομένων', + 'purge_all_data' => 'Εκκαθάριση όλων των διαγραμμένων εγγραφών', + 'purge_data' => 'Εκκαθάριση δεδομένων', + 'purged_all_records' => 'Όλες οι διαγραμμένες εγγραφές έχουν εκκαθαριστεί οριστικά.', + 'delete_data_title' => 'Διαγραφή δεδομένων από το Firefly III', + 'permanent_delete_stuff' => 'Μπορείτε να διαγράψετε πράγματα από το Firefly III. Η χρήση των παρακάτω κουμπιών σημαίνει ότι τα στοιχεία σας αυτά θα είναι κρυμμένα και δε θα εμφανίζονται. Δεν υπάρχει κουμπί αναίρεσης για αυτή την ενέργεια, αλλά τα στοιχεία θα παραμείνουν στη βάση δεδομένων όπου μπορείτε να τα αναζητήσετε χειροκίνητα σε κάποια άλλη στιγμή εάν είναι απαραίτητο.', + 'other_sessions_logged_out' => 'Όλες οι άλλες συνεδρίες σας έχουν αποσυνδεθεί.', + 'delete_unused_accounts' => 'Η διαγραφή αχρησιμοποίητων λογαριασμών θα καθαρίσει τις λίστες αυτόματης συμπλήρωσης.', + 'delete_all_unused_accounts' => 'Διαγραφή αχρησιμοποίητων λογαριασμών', + 'deleted_all_unused_accounts' => 'Όλοι οι αχρησιμοποίητοι λογαριασμοί έχουν διαγραφεί', + 'delete_all_budgets' => 'Διαγραφή ΟΛΩΝ των προϋπολογισμών σας', + 'delete_all_categories' => 'Διαγραφή ΟΛΩΝ των κατηγοριών σας', + 'delete_all_tags' => 'Διαγραφή ΟΛΩΝ των ετικετών σας', + 'delete_all_bills' => 'Διαγραφή ΟΛΩΝ των πάγιων εξόδων σας', + 'delete_all_piggy_banks' => 'Διαγραφή ΟΛΩΝ των κουμπαράδων σας', + 'delete_all_rules' => 'Διαγραφή ΟΛΩΝ των κανόνων σας', + 'delete_all_recurring' => 'Διαγραφή ΟΛΩΝ των επαναλαμβανόμενων συναλλαγών σας', + 'delete_all_object_groups' => 'Διαγραφή ΟΛΩΝ των ομάδων αντικειμένων σας', + 'delete_all_accounts' => 'Διαγραφή ΟΛΩΝ των λογαριασμών σας', + 'delete_all_asset_accounts' => 'Διαγραφή ΟΛΩΝ των λογαριασμών κεφαλαίων σας', + 'delete_all_expense_accounts' => 'Διαγραφή ΟΛΩΝ των λογαριασμών δαπανών σας', + 'delete_all_revenue_accounts' => 'Διαγραφή ΟΛΩΝ των λογαριασμών εσόδων σας', + 'delete_all_liabilities' => 'Διαγραφή ΟΛΩΝ των υποχρεώσεων σας', + 'delete_all_transactions' => 'Διαγραφή ΟΛΩΝ των συναλλαγών σας', + 'delete_all_withdrawals' => 'Διαγραφή ΟΛΩΝ των αναλήψεων σας', + 'delete_all_deposits' => 'Διαγραφή ΟΛΩΝ των καταθέσεων σας', + 'delete_all_transfers' => 'Διαγραφή ΟΛΩΝ των μεταφορών σας', + 'also_delete_transactions' => 'Η διαγραφή λογαριασμών θα διαγράψει επίσης ΟΛΕΣ τις σχετικές αναλήψεις, καταθέσεις και μεταφορές!', + 'deleted_all_budgets' => 'Όλοι οι προϋπολογισμοί έχουν διαγραφεί', + 'deleted_all_categories' => 'Όλες οι κατηγορίες έχουν διαγραφεί', + 'deleted_all_tags' => 'Όλες οι ετικέτες έχουν διαγραφεί', + 'deleted_all_bills' => 'Όλα τα πάγια έξοδα έχουν διαγραφεί', + 'deleted_all_piggy_banks' => 'Όλοι οι κουμπαράδες έχουν διαγραφεί', + 'deleted_all_rules' => 'Όλοι οι κανόνες και οι ομάδες κανόνων έχουν διαγραφεί', + 'deleted_all_object_groups' => 'Όλες οι ομάδες έχουν διαγραφεί', + 'deleted_all_accounts' => 'Όλοι οι λογαριασμοί έχουν διαγραφεί', + 'deleted_all_asset_accounts' => 'Όλοι οι λογαριασμοί κεφαλαίων έχουν διαγραφεί', + 'deleted_all_expense_accounts' => 'Όλοι οι λογαριασμοί δαπανών έχουν διαγραφεί', + 'deleted_all_revenue_accounts' => 'Όλοι οι λογαριασμοί εσόδων έχουν διαγραφεί', + 'deleted_all_liabilities' => 'Όλες οι υποχρεώσεις έχουν διαγραφεί', + 'deleted_all_transactions' => 'Όλες οι συναλλαγές έχουν διαγραφεί', + 'deleted_all_withdrawals' => 'Όλες οι αναλήψεις έχουν διαγραφεί', + 'deleted_all_deposits' => 'Όλες οι καταθέσεις έχουν διαγραφεί', + 'deleted_all_transfers' => 'Όλες οι μεταφορές έχουν διαγραφεί', + 'deleted_all_recurring' => 'Όλες οι επαναλαμβανόμενες συναλλαγές έχουν διαγραφεί', + 'change_your_password' => 'Αλλαγή του κωδικού σας', + 'delete_account' => 'Διαγραφή λογαριασμού', + 'current_password' => 'Τρέχων κωδικός', + 'new_password' => 'Νέος κωδικός', + 'new_password_again' => 'Νέος κωδικός (επανάληψη)', + 'delete_your_account' => 'Διαγραφή του λογαριασμού σας', + 'delete_your_account_help' => 'Διαγράφοντας το λογαριασμό σας, θα διαγράψετε και όλες τις συναλλαγές, τους λογαριασμούς, οτιδήποτε μπορεί να έχετε αποθηκεύσει στο Firefly III. Θα ΕΞΑΦΑΝΙΣΤΟΥΝ.', + 'delete_your_account_password' => 'Εισάγετε τον κωδικό σας για να συνεχίσετε.', + 'password' => 'Κωδικός πρόσβασης', + 'are_you_sure' => 'Είστε σίγουρος; Δεν μπορείτε να το πάρετε πίσω.', + 'delete_account_button' => 'ΔΙΑΓΡΑΦΗ του λογαριασμού σας', + 'invalid_current_password' => 'Μη έγκυρος κωδικός!', + 'password_changed' => 'Ο κωδικός έχει αλλάξει!', + 'should_change' => 'Θα ήταν καλό να αλλάξετε τον κωδικό σας.', + 'invalid_password' => 'Άκυρος κωδικός!', + 'what_is_pw_security' => 'Τι είναι η "επιβεβαίωση ασφάλειας κωδικού";', + 'secure_pw_title' => 'Πως να διαλέξετε ένα ασφαλή κωδικό πρόσβασης', + 'forgot_password_response' => 'Σας ευχαριστούμε. Εάν υπάρχει λογαριασμός με αυτή τη διεύθυνση ηλεκτρονικού ταχυδρομείου, θα βρείτε οδηγίες στα εισερχόμενά σας.', + 'secure_pw_history' => 'Δεν περνάει ούτε μία εβδομάδα χωρίς να διαβάσεις για ένα site που έχασε τους κωδικούς των χρηστών του. Οι χάκερς και οι κλέφτες χρησιμοποιούν αυτούς τους κωδικούς για να κλέψουν προσωπικές σας πληροφορίες. Οι πληροφορίες αυτές είναι πολύτιμες.', + 'secure_pw_ff' => 'Χρησιμοποιείτε τον ίδιο κωδικό πρόσβασης παντού στο internet; Εάν ένας ιστότοπος διαρρεύσει τον κωδικό σας, οι χάκερ θα έχουν πρόσβαση σε όλα τα δεδομένα σας. Το Firefly III βασίζεται σε εσάς για να διαλέξετε ένα δυνατό και μοναδικό κωδικό για την προστασία των οικονομικών σας αρχείων.', + 'secure_pw_check_box' => 'Για να βοηθήσει σε αυτό το Firefly III μπορεί να ελέγξει εάν ο κωδικός που θέλετε να χρησιμοποιήσετε έχει κλαπεί στο παρελθόν. Εάν ισχύει αυτό, τότε το Firefly III σας συμβουλεύει να μη χρησιμοποιήσετε αυτό τον κωδικό.', + 'secure_pw_working_title' => 'Πως λειτουργεί;', + 'secure_pw_working' => 'Τσεκάροντας αυτό το πλαίσιο, το Firefly III θα στείλει τους 5 πρώτους χαρακτήρες του SHA1 hash του κωδικού σας στον Ιστότοπο του Troy Hunt για να δει εάν είναι στη λίστα. Αυτό θα σας εμποδίσει να χρησιμοποιήσετε ένα μη ασφαλές κωδικό όπως συνιστάται στη τελευταία Ειδική Έκδοση NIST πάνω στο θέμα αυτό.', + 'secure_pw_should' => 'Θα πρέπει να τσεκάρω αυτό το πλαίσιο;', + 'secure_pw_long_password' => 'Ναι. Πάντα να επιβεβαιώνετε ότι ο κωδικός σας είναι ασφαλής.', + 'command_line_token' => 'Διακριτικό γραμμής εντολών', + 'explain_command_line_token' => 'Χρειάζεστε αυτό το διακριτικό για να εκτελέσετε εργασίες γραμμής εντολών, όπως εξαγωγή δεδομένων. Χωρίς αυτό, οι εντολές δε θα λειτουργήσουν. Μην κοινοποιήσετε το διακριτικό της γραμμής εντολών. Κανείς δεν θα σας ζητήσει αυτό το διακριτικό. Εάν φοβάστε ότι το χάσατε, ή δε χρειάζεστε κάποιο ιδιαίτερο λόγο, δημιουργήστε ξανά αυτό το διακριτικό χρησιμοποιώντας το κουμπί.', + 'regenerate_command_line_token' => 'Αναδημιουργία διακριτικού γραμμής εντολών', + 'token_regenerated' => 'Δημιουργήθηκε ένα νέο διακριτικό γραμμής εντολών', + 'change_your_email' => 'Αλλάξτε την διεύθυνση email σας', + 'email_verification' => 'Ένα μήνυμα email θα σταλεί στην παλιά ΚΑΙ στη νέα σας διεύθυνση email. Για λόγους ασφαλείας, δεν θα μπορέσετε να συνδεθείτε εώς ότου επιβεβαιώσετε τη νέα σας διεύθυνση email. Εάν δεν είστε σίγουροι ότι η δική σας εγκατάσταση Firefly III μπορεί να στείλει email, παρακαλώ μην χρησιμοποιήσετε αυτή τη δυνατότητα. Εάν είστε διαχειριστής μπορείτε να δοκιμάσετε αυτή τη λειτουργία στη Διαχείριση.', + 'email_changed_logout' => 'Μέχρι να επιβεβαιώσετε την διεύθυνση email σας, δεν μπορείτε να συνδεθείτε.', + 'login_with_new_email' => 'Τώρα μπορείτε να συνδεθείτε με τη νέα σας διεύθυνση email.', + 'login_with_old_email' => 'Τώρα μπορείτε να συνδεθείτε με το παλιό σας email ξανά.', + 'login_provider_local_only' => 'Αυτή η λειτουργία δεν είναι διαθέσιμη όταν πιστοποιήστε μέσω ":login_provider".', + 'external_user_mgt_disabled' => 'Αυτή η ενέργεια δεν είναι διαθέσιμη όταν το Firefly III δεν είναι υπεύθυνο για διαχείριση χρηστών ή έλεγχο ταυτότητας.', + 'external_auth_disabled' => 'Αυτή η ενέργεια δεν είναι διαθέσιμη όταν το Firefly III δεν είναι υπεύθυνο για το χειρισμό ελέγχου ταυτότητας.', + 'delete_local_info_only' => 'Επειδή το Firefly III δεν είναι υπεύθυνο για διαχείριση χρηστών ή έλεγχο ταυτότητας, αυτή η λειτουργία θα διαγράψει μόνο τις τοπικές εγγραφές του Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Πελάτες OAuth', + 'profile_oauth_no_clients' => 'Δεν έχετε δημιουργήσει πελάτες OAuth.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Πελάτες', + 'profile_oauth_client_id' => 'Αναγνωριστικό πελάτη', + 'profile_oauth_client_name' => 'Όνομα', + 'profile_oauth_client_secret' => 'Μυστικό', + 'profile_oauth_create_new_client' => 'Δημιουργία νέου πελάτη', + 'profile_oauth_create_client' => 'Δημιουργία πελάτη', + 'profile_oauth_edit_client' => 'Επεξεργασία πελάτη', + 'profile_oauth_name_help' => 'Κάτι που οι χρήστες σας θα αναγνωρίζουν και θα εμπιστεύονται.', + 'profile_oauth_redirect_url' => 'URL ανακατεύθυνσης', + 'profile_oauth_redirect_url_help' => 'To authorization callback URL της εφαρμογής σας.', + 'profile_authorized_apps' => 'Εξουσιοδοτημένες εφαρμογές', + 'profile_authorized_clients' => 'Εξουσιοδοτημένοι πελάτες', + 'profile_scopes' => 'Πεδία εφαρμογής', + 'profile_revoke' => 'Ανάκληση', + 'profile_oauth_client_secret_title' => 'Μυστικό Πελάτη', + 'profile_oauth_client_secret_expl' => 'Εδώ είναι το νέο σας μυστικό πελάτη. Αυτή είναι η μόνη φορά που θα σας εμφανιστεί, οπότε μην το χάσετε! Μπορείτε να το χρησιμοποιείτε για να κάνετε αιτήματα API.', + 'profile_personal_access_tokens' => 'Διακριτικά προσωπικής πρόσβασης', + 'profile_personal_access_token' => 'Διακριτικά προσωπικής πρόσβασης', + 'profile_oauth_confidential' => 'Εμπιστευτικό', + 'profile_oauth_confidential_help' => 'Απαιτήστε από το πρόγραμμα πελάτη να πραγματοποιήσει έλεγχο ταυτότητας με ένα μυστικό. Οι έμπιστοι πελάτες μπορούν να διατηρούν διαπιστευτήρια με ασφαλή τρόπο χωρίς να τα εκθέτουν σε μη εξουσιοδοτημένα μέρη. Οι δημόσιες εφαρμογές, όπως οι εγγενείς εφαρμογές για επιτραπέζιους υπολογιστές ή JavaScript SPA, δεν μπορούν να κρατήσουν μυστικά με ασφάλεια.', + 'profile_personal_access_token_explanation' => 'Εδώ είναι το νέο διακριτικό προσωπικής πρόσβασης. Αυτή είναι η μόνη φορά που θα εμφανιστεί, οπότε μη το χάσετε! Μπορείτε να χρησιμοποιείτε αυτό το διακριτικό για να κάνετε κλήσεις API.', + 'profile_no_personal_access_token' => 'Δεν έχετε δημιουργήσει προσωπικά διακριτικά πρόσβασης.', + 'profile_create_new_token' => 'Δημιουργία νέου διακριτικού', + 'profile_create_token' => 'Δημιουργία διακριτικού', + 'profile_create' => 'Δημιουργία', + 'profile_save_changes' => 'Αποθήκευση αλλαγών', + 'profile_whoops' => 'Ούπς!', + 'profile_something_wrong' => 'Κάτι πήγε στραβά!', + 'profile_try_again' => 'Κάτι πήγε στραβά. Παρακαλώ προσπαθήστε ξανά.', + 'amounts' => 'Ποσά', + 'multi_account_warning_unknown' => 'Ανάλογα με τον τύπο της συναλλαγής που δημιουργείτε, ο λογαριασμός προέλευσης ή/και προορισμού των επόμενων διαχωρισμών ενδέχεται να παρακαμφθεί από αυτό που ορίζεται στο πρώτο διαχωρισμό της συναλλαγής.', + 'multi_account_warning_withdrawal' => 'Λάβετε υπόψη ότι ο λογαριασμός προέλευσης των επόμενων διαχωρισμών θα υπερισχύσει αυτού του πρώτου διαχωρισμού της ανάληψης.', + 'multi_account_warning_deposit' => 'Λάβετε υπόψη ότι ο λογαριασμός προορισμού των επόμενων διαχωρισμών θα υπερισχύσει αυτού του πρώτου διαχωρισμού της κατάθεσης.', + 'multi_account_warning_transfer' => 'Λάβετε υπόψη ότι ο λογαριασμός προέλευσης και προορισμού των επόμενων διαχωρισμών θα υπερισχύσει αυτού του πρώτου διαχωρισμού της μεταφοράς.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Εξαγωγή δεδομένων από το Firefly III', - 'export_data_menu' => 'Εξαγωγή δεδομένων', - 'export_data_bc' => 'Εξαγωγή δεδομένων από το Firefly III', - 'export_data_main_title' => 'Εξαγωγή δεδομένων από το Firefly III', - 'export_data_expl' => 'Αυτός ο σύνδεσμος σας επιτρέπει να εξάγετε όλες τις συναλλαγές + μετα δεδομένα από το Firefly III. Παρακαλώ ανατρέξτε στη βοήθεια (εικονίδιο (?) επάνω δεξιά) για περισσότερες πληροφορίες για τη διαδικασία.', - 'export_data_all_transactions' => 'Εξαγωγή όλων των συναλλαγών', - 'export_data_advanced_expl' => 'Εάν χρειάζεστε έναν πιο εξειδικευμένο ή συγκεκριμένο τύπο εξαγωγής, διαβάστε τη βοήθεια για το πως να χρησιμοποιήσετε την κονσόλα εντολών php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Εξαγωγή δεδομένων από το Firefly III', + 'export_data_menu' => 'Εξαγωγή δεδομένων', + 'export_data_bc' => 'Εξαγωγή δεδομένων από το Firefly III', + 'export_data_main_title' => 'Εξαγωγή δεδομένων από το Firefly III', + 'export_data_expl' => 'Αυτός ο σύνδεσμος σας επιτρέπει να εξάγετε όλες τις συναλλαγές + μετα δεδομένα από το Firefly III. Παρακαλώ ανατρέξτε στη βοήθεια (εικονίδιο (?) επάνω δεξιά) για περισσότερες πληροφορίες για τη διαδικασία.', + 'export_data_all_transactions' => 'Εξαγωγή όλων των συναλλαγών', + 'export_data_advanced_expl' => 'Εάν χρειάζεστε έναν πιο εξειδικευμένο ή συγκεκριμένο τύπο εξαγωγής, διαβάστε τη βοήθεια για το πως να χρησιμοποιήσετε την κονσόλα εντολών php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Ένα συνημμένο|:count συνημμένα', - 'attachments' => 'Συνημμένα', - 'edit_attachment' => 'Τροποποίηση συνημμένου ":name"', - 'update_attachment' => 'Ενημέρωση συνημμένου', - 'delete_attachment' => 'Διαγραφή συνημμένου ":name"', - 'attachment_deleted' => 'Διεγράφη το συνημμένο ":name"', - 'liabilities_deleted' => 'Διεγράφη η υποχρέωση ":name"', - 'attachment_updated' => 'Ενημερώθηκε το συνημμένο ":name"', - 'upload_max_file_size' => 'Μέγιστο μέγεθος αρχείου: :size', - 'list_all_attachments' => 'Λίστα όλων των συνημμένων', + 'nr_of_attachments' => 'Ένα συνημμένο|:count συνημμένα', + 'attachments' => 'Συνημμένα', + 'edit_attachment' => 'Τροποποίηση συνημμένου ":name"', + 'update_attachment' => 'Ενημέρωση συνημμένου', + 'delete_attachment' => 'Διαγραφή συνημμένου ":name"', + 'attachment_deleted' => 'Διεγράφη το συνημμένο ":name"', + 'liabilities_deleted' => 'Διεγράφη η υποχρέωση ":name"', + 'attachment_updated' => 'Ενημερώθηκε το συνημμένο ":name"', + 'upload_max_file_size' => 'Μέγιστο μέγεθος αρχείου: :size', + 'list_all_attachments' => 'Λίστα όλων των συνημμένων', // transaction index - 'title_expenses' => 'Δαπάνες', - 'title_withdrawal' => 'Δαπάνες', - 'title_revenue' => 'Έσοδα', - 'title_deposit' => 'Έσοδα', - 'title_transfer' => 'Μεταφορές', - 'title_transfers' => 'Μεταφορές', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Ενεργοποίηση των webhook', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Δαπάνες', + 'title_withdrawal' => 'Δαπάνες', + 'title_revenue' => 'Έσοδα', + 'title_deposit' => 'Έσοδα', + 'title_transfer' => 'Μεταφορές', + 'title_transfers' => 'Μεταφορές', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Ενεργοποίηση των webhook', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Αυτή η συναλλαγή είναι ήδη μία ανάληψη', - 'convert_is_already_type_Deposit' => 'Αυτή η συναλλαγή είναι ήδη μία κατάθεση', - 'convert_is_already_type_Transfer' => 'Αυτή η συναλλαγή είναι ήδη μία μεταφορά', - 'convert_to_Withdrawal' => 'Μετατροπή ":description" σε μία ανάληψη', - 'convert_to_Deposit' => 'Μετατροπή ":description" σε μία κατάθεση', - 'convert_to_Transfer' => 'Μετατροπή ":description" σε μία μεταφορά', - 'convert_options_WithdrawalDeposit' => 'Μετατροπή μίας ανάληψης σε μία κατάθεση', - 'convert_options_WithdrawalTransfer' => 'Μετατροπή μίας ανάληψης σε μία μεταφορά', - 'convert_options_DepositTransfer' => 'Μετατροπή μίας κατάθεσης σε μία μεταφορά', - 'convert_options_DepositWithdrawal' => 'Μετατροπή μίας κατάθεσης σε μία ανάληψη', - 'convert_options_TransferWithdrawal' => 'Μετατροπή μίας μεταφοράς σε μία ανάληψη', - 'convert_options_TransferDeposit' => 'Μετατροπή μία μεταφοράς σε μία κατάθεση', - 'convert_Withdrawal_to_deposit' => 'Μετατροπή αυτή της ανάληψης σε κατάθεση', - 'convert_Withdrawal_to_transfer' => 'Μετατροπή αυτής της ανάληψης σε μεταφορά', - 'convert_Deposit_to_withdrawal' => 'Μετατροπή αυτής της κατάθεσης σε ανάληψη', - 'convert_Deposit_to_transfer' => 'Μετατροπή αυτής της κατάθεσης σε μεταφορά', - 'convert_Transfer_to_deposit' => 'Μετατροπή αυτής της μεταφοράς σε κατάθεση', - 'convert_Transfer_to_withdrawal' => 'Μετατροπή αυτής της μεταφοράς σε ανάληψη', - 'convert_please_set_revenue_source' => 'Παρακαλώ επιλέξτε το λογαριασμό εσόδων από τον οποίο θα προέλθουν τα χρήματα.', - 'convert_please_set_asset_destination' => 'Επιλέξτε τον κεφαλαιακό λογαριασμό όπου θα μεταβιβαστούν τα χρήματα.', - 'convert_please_set_expense_destination' => 'Επιλέξτε το λογαριασμό δαπανών όπου θα μεταβιβαστούν τα χρήματα.', - 'convert_please_set_asset_source' => 'Παρακαλώ επιλέξτε τον κεφαλαιακό λογαριασμό από τον οποίο θα προέλθουν τα χρήματα.', - 'convert_expl_w_d' => 'Όταν μετατρέπετε μια ανάληψη σε κατάθεση, τα χρήματα θα κατατεθούν στο λογαριασμό προορισμού, αντί να αναληφθούν από αυτόν.|Όταν μετατρέπετε μια ανάληψη σε κατάθεση, τα χρήματα θα κατατεθούν στους λογαριασμούς προορισμού που βλέπετε εδώ, αντί να αναληφθούν από αυτούς.', - 'convert_expl_w_t' => 'Κατά τη μετατροπή μιας ανάληψης σε μεταφορά, τα χρήματα θα αφαιρεθούν από τον λογαριασμό προέλευσης σε άλλο λογαριασμό κεφαλαίου ή υποχρεώσεων αντί να δαπανηθούν στον αρχικό λογαριασμό εξόδων.|Κατά τη μετατροπή μιας ανάληψης σε μεταφορά, τα χρήματα θα αφαιρεθούν από τους λογαριασμούς πηγής σε άλλους λογαριασμούς κεφαλαίου ή υποχρεώσεων αντί να δαπανηθούν στους αρχικούς λογαριασμούς εξόδων.', - 'convert_expl_d_w' => 'Όταν μετατρέπετε μια κατάθεση σε ανάληψη, τα χρήματα θα αναληφθούν από τον λογαριασμό προορισμού που βλέπετε εδώ, αντί να κατατεθούν σε αυτόν.|Όταν μετατρέπετε μια κατάθεση σε ανάληψη, τα χρήματα θα αναληφθούν από τους λογαριασμούς προορισμού που βλέπετε εδώ, αντί να κατατεθούν σε αυτούς.', - 'convert_expl_d_t' => 'Όταν μετατρέπετε μια κατάθεση σε μεταφορά, τα χρήματα θα κατατεθούν στο λογαριασμό προορισμού που αναγράφεται από οποιοδήποτε λογαριασμό κεφαλαίου ή υποχρεώσεών σας.|Όταν μετατρέπετε μια κατάθεση σε μεταφορά, τα χρήματα θα κατατεθούν στους λογαριασμούς προορισμού που αναγράφονται από οποιονδήποτε από τους λογαριασμούς κεφαλαίου ή υποχρεώσεών σας.', - 'convert_expl_t_w' => 'Όταν μετατρέπετε μια μεταφορά σε ανάληψη τα χρήματα θα δαπανηθούν στο λογαριασμό προορισμού που ορίσατε εδώ, αντί να αφαιρεθούν.|Όταν μετατρέπετε μια μεταφορά σε ανάληψη τα χρήματα θα δαπανηθούν στους λογαριασμούς προορισμού που ορίσατε εδώ, αντί να αφαιρεθούν.', - 'convert_expl_t_d' => 'Όταν μετατρέπετε μια μεταφορά σε κατάθεση, τα χρήματα θα κατατεθούν στο λογαριασμό προορισμού που βλέπετε εδώ, αντί να μεταφερθούν σε αυτόν.|Όταν μετατρέπετε μια μεταφορά σε κατάθεση, τα χρήματα θα κατατεθούν στους λογαριασμούς προορισμού που βλέπετε εδώ, αντί να μεταφερθούν σε αυτούς.', - 'convert_select_sources' => 'Για να ολοκληρώσετε τη μετατροπή, παρακαλώ επιλέξτε το νέο λογαριασμό προέλευσης παρακάτω.|Για να ολοκληρώσετε τη μετατροπή, επιλέξτε τους νέους λογαριασμούς προέλευσης παρακάτω.', - 'convert_select_destinations' => 'Για να ολοκληρώσετε τη μετατροπή, παρακαλώ επιλέξτε το νέο λογαριασμό προορισμού παρακάτω.|Για να ολοκληρώσετε τη μετατροπή, επιλέξτε τους νέους λογαριασμούς προορισμού παρακάτω.', - 'converted_to_Withdrawal' => 'Η συναλλαγή μετατράπηκε σε ανάληψη', - 'converted_to_Deposit' => 'Η συναλλαγή μετατράπηκε σε κατάθεση', - 'converted_to_Transfer' => 'Η συναλλαγή μετατράπηκε σε μεταφορά', - 'invalid_convert_selection' => 'Ο λογαριασμός που έχετε επιλέξει χρησιμοποιείται ήδη σε αυτή τη συναλλαγή ή δεν υπάρχει.', - 'source_or_dest_invalid' => 'Δεν είναι δυνατή η εύρεση των σωστών στοιχείων της συναλλαγής. Η μετατροπή δεν είναι δυνατή.', - 'convert_to_withdrawal' => 'Μετατροπή σε ανάληψη', - 'convert_to_deposit' => 'Μετατροπή σε κατάθεση', - 'convert_to_transfer' => 'Μετατροπή σε μεταφορά', + 'convert_is_already_type_Withdrawal' => 'Αυτή η συναλλαγή είναι ήδη μία ανάληψη', + 'convert_is_already_type_Deposit' => 'Αυτή η συναλλαγή είναι ήδη μία κατάθεση', + 'convert_is_already_type_Transfer' => 'Αυτή η συναλλαγή είναι ήδη μία μεταφορά', + 'convert_to_Withdrawal' => 'Μετατροπή ":description" σε μία ανάληψη', + 'convert_to_Deposit' => 'Μετατροπή ":description" σε μία κατάθεση', + 'convert_to_Transfer' => 'Μετατροπή ":description" σε μία μεταφορά', + 'convert_options_WithdrawalDeposit' => 'Μετατροπή μίας ανάληψης σε μία κατάθεση', + 'convert_options_WithdrawalTransfer' => 'Μετατροπή μίας ανάληψης σε μία μεταφορά', + 'convert_options_DepositTransfer' => 'Μετατροπή μίας κατάθεσης σε μία μεταφορά', + 'convert_options_DepositWithdrawal' => 'Μετατροπή μίας κατάθεσης σε μία ανάληψη', + 'convert_options_TransferWithdrawal' => 'Μετατροπή μίας μεταφοράς σε μία ανάληψη', + 'convert_options_TransferDeposit' => 'Μετατροπή μία μεταφοράς σε μία κατάθεση', + 'convert_Withdrawal_to_deposit' => 'Μετατροπή αυτή της ανάληψης σε κατάθεση', + 'convert_Withdrawal_to_transfer' => 'Μετατροπή αυτής της ανάληψης σε μεταφορά', + 'convert_Deposit_to_withdrawal' => 'Μετατροπή αυτής της κατάθεσης σε ανάληψη', + 'convert_Deposit_to_transfer' => 'Μετατροπή αυτής της κατάθεσης σε μεταφορά', + 'convert_Transfer_to_deposit' => 'Μετατροπή αυτής της μεταφοράς σε κατάθεση', + 'convert_Transfer_to_withdrawal' => 'Μετατροπή αυτής της μεταφοράς σε ανάληψη', + 'convert_please_set_revenue_source' => 'Παρακαλώ επιλέξτε το λογαριασμό εσόδων από τον οποίο θα προέλθουν τα χρήματα.', + 'convert_please_set_asset_destination' => 'Επιλέξτε τον κεφαλαιακό λογαριασμό όπου θα μεταβιβαστούν τα χρήματα.', + 'convert_please_set_expense_destination' => 'Επιλέξτε το λογαριασμό δαπανών όπου θα μεταβιβαστούν τα χρήματα.', + 'convert_please_set_asset_source' => 'Παρακαλώ επιλέξτε τον κεφαλαιακό λογαριασμό από τον οποίο θα προέλθουν τα χρήματα.', + 'convert_expl_w_d' => 'Όταν μετατρέπετε μια ανάληψη σε κατάθεση, τα χρήματα θα κατατεθούν στο λογαριασμό προορισμού, αντί να αναληφθούν από αυτόν.|Όταν μετατρέπετε μια ανάληψη σε κατάθεση, τα χρήματα θα κατατεθούν στους λογαριασμούς προορισμού που βλέπετε εδώ, αντί να αναληφθούν από αυτούς.', + 'convert_expl_w_t' => 'Κατά τη μετατροπή μιας ανάληψης σε μεταφορά, τα χρήματα θα αφαιρεθούν από τον λογαριασμό προέλευσης σε άλλο λογαριασμό κεφαλαίου ή υποχρεώσεων αντί να δαπανηθούν στον αρχικό λογαριασμό εξόδων.|Κατά τη μετατροπή μιας ανάληψης σε μεταφορά, τα χρήματα θα αφαιρεθούν από τους λογαριασμούς πηγής σε άλλους λογαριασμούς κεφαλαίου ή υποχρεώσεων αντί να δαπανηθούν στους αρχικούς λογαριασμούς εξόδων.', + 'convert_expl_d_w' => 'Όταν μετατρέπετε μια κατάθεση σε ανάληψη, τα χρήματα θα αναληφθούν από τον λογαριασμό προορισμού που βλέπετε εδώ, αντί να κατατεθούν σε αυτόν.|Όταν μετατρέπετε μια κατάθεση σε ανάληψη, τα χρήματα θα αναληφθούν από τους λογαριασμούς προορισμού που βλέπετε εδώ, αντί να κατατεθούν σε αυτούς.', + 'convert_expl_d_t' => 'Όταν μετατρέπετε μια κατάθεση σε μεταφορά, τα χρήματα θα κατατεθούν στο λογαριασμό προορισμού που αναγράφεται από οποιοδήποτε λογαριασμό κεφαλαίου ή υποχρεώσεών σας.|Όταν μετατρέπετε μια κατάθεση σε μεταφορά, τα χρήματα θα κατατεθούν στους λογαριασμούς προορισμού που αναγράφονται από οποιονδήποτε από τους λογαριασμούς κεφαλαίου ή υποχρεώσεών σας.', + 'convert_expl_t_w' => 'Όταν μετατρέπετε μια μεταφορά σε ανάληψη τα χρήματα θα δαπανηθούν στο λογαριασμό προορισμού που ορίσατε εδώ, αντί να αφαιρεθούν.|Όταν μετατρέπετε μια μεταφορά σε ανάληψη τα χρήματα θα δαπανηθούν στους λογαριασμούς προορισμού που ορίσατε εδώ, αντί να αφαιρεθούν.', + 'convert_expl_t_d' => 'Όταν μετατρέπετε μια μεταφορά σε κατάθεση, τα χρήματα θα κατατεθούν στο λογαριασμό προορισμού που βλέπετε εδώ, αντί να μεταφερθούν σε αυτόν.|Όταν μετατρέπετε μια μεταφορά σε κατάθεση, τα χρήματα θα κατατεθούν στους λογαριασμούς προορισμού που βλέπετε εδώ, αντί να μεταφερθούν σε αυτούς.', + 'convert_select_sources' => 'Για να ολοκληρώσετε τη μετατροπή, παρακαλώ επιλέξτε το νέο λογαριασμό προέλευσης παρακάτω.|Για να ολοκληρώσετε τη μετατροπή, επιλέξτε τους νέους λογαριασμούς προέλευσης παρακάτω.', + 'convert_select_destinations' => 'Για να ολοκληρώσετε τη μετατροπή, παρακαλώ επιλέξτε το νέο λογαριασμό προορισμού παρακάτω.|Για να ολοκληρώσετε τη μετατροπή, επιλέξτε τους νέους λογαριασμούς προορισμού παρακάτω.', + 'converted_to_Withdrawal' => 'Η συναλλαγή μετατράπηκε σε ανάληψη', + 'converted_to_Deposit' => 'Η συναλλαγή μετατράπηκε σε κατάθεση', + 'converted_to_Transfer' => 'Η συναλλαγή μετατράπηκε σε μεταφορά', + 'invalid_convert_selection' => 'Ο λογαριασμός που έχετε επιλέξει χρησιμοποιείται ήδη σε αυτή τη συναλλαγή ή δεν υπάρχει.', + 'source_or_dest_invalid' => 'Δεν είναι δυνατή η εύρεση των σωστών στοιχείων της συναλλαγής. Η μετατροπή δεν είναι δυνατή.', + 'convert_to_withdrawal' => 'Μετατροπή σε ανάληψη', + 'convert_to_deposit' => 'Μετατροπή σε κατάθεση', + 'convert_to_transfer' => 'Μετατροπή σε μεταφορά', // create new stuff: - 'create_new_withdrawal' => 'Δημιουργία νέας ανάληψης', - 'create_new_deposit' => 'Δημιουργία νέας κατάθεσης', - 'create_new_transfer' => 'Δημιουργία νέας μεταφοράς', - 'create_new_asset' => 'Δημιουργία νέου λογαριασμού κεφαλαίου', - 'create_new_liabilities' => 'Δημιουργία νέας υποχρέωσης', - 'create_new_expense' => 'Δημιουργία νέου λογαριασμού δαπανών', - 'create_new_revenue' => 'Δημιουργία νέου λογαριασμού εσόδων', - 'create_new_piggy_bank' => 'Δημιουργία ενός νέου κουμπαρά', - 'create_new_bill' => 'Δημιουργία νέου πάγιου έξοδου', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Δημιουργία νέας ανάληψης', + 'create_new_deposit' => 'Δημιουργία νέας κατάθεσης', + 'create_new_transfer' => 'Δημιουργία νέας μεταφοράς', + 'create_new_asset' => 'Δημιουργία νέου λογαριασμού κεφαλαίου', + 'create_new_liabilities' => 'Δημιουργία νέας υποχρέωσης', + 'create_new_expense' => 'Δημιουργία νέου λογαριασμού δαπανών', + 'create_new_revenue' => 'Δημιουργία νέου λογαριασμού εσόδων', + 'create_new_piggy_bank' => 'Δημιουργία ενός νέου κουμπαρά', + 'create_new_bill' => 'Δημιουργία νέου πάγιου έξοδου', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Δημιουργία νέου νομίσματος', - 'store_currency' => 'Αποθήκευση νέου νομίσματος', - 'update_currency' => 'Ενημέρωση νομίσματος', - 'new_default_currency' => ':name είναι τώρα το προεπιλεγμένο νόμισμα.', - 'cannot_delete_currency' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή είναι ακόμα σε χρήση.', - 'cannot_delete_fallback_currency' => ':name είναι το εφεδρικό νόμισμα του συστήματος και δεν μπορεί να διαγραφεί.', - 'cannot_disable_currency_journals' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή το χρησιμοποιούν ορισμένες συναλλαγές.', - 'cannot_disable_currency_last_left' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή είναι το μόνο ενεργό νόμισμα.', - 'cannot_disable_currency_account_meta' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή χρησιμοποιείται από λογαριασμούς κεφαλαίου.', - 'cannot_disable_currency_bills' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή το χρησιμοποιούν ορισμένα πάγια έξοδα.', - 'cannot_disable_currency_recurring' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή το χρησιμοποιούν ορισμένες επαναλαμβανόμενες συναλλαγές.', - 'cannot_disable_currency_available_budgets' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή χρησιμοποιείται στους διαθέσιμους προϋπολογισμούς.', - 'cannot_disable_currency_budget_limits' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή χρησιμοποιείται σε όρια προϋπολογισμού.', - 'cannot_disable_currency_current_default' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή είναι το προεπιλεγμένο νόμισμα αυτή τη στιγμή.', - 'cannot_disable_currency_system_fallback' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή είναι το προεπιλεγμένο νόμισμα του συστήματος.', - 'disable_EUR_side_effects' => 'Το Ευρώ είναι το εφεδρικό νόμισμα μετάπτωσης του συστήματος. Η απενεργοποίηση μπορεί να έχει ανεπιθύμητες παρενέργειες και μπορεί να ακυρώσει την εγγύησή σας.', - 'deleted_currency' => 'Το νόμισμα :name διαγράφηκε', - 'created_currency' => 'Το νόμισμα :name δημιουργήθηκε', - 'could_not_store_currency' => 'Δεν ήταν δυνατή η αποθήκευση του νέου νομίσματος.', - 'updated_currency' => 'Το νόμισμα :name ενημερώθηκε', - 'ask_site_owner' => 'Ζητήστε από τον :owner να προσθέσει, αφαιρέσει ή να επεξεργαστεί νομίσματα.', - 'currencies_intro' => 'Το Firefly III υποστηρίζει διάφορα νομίσματα τα οποία μπορείτε να ρυθμίσετε και να ενεργοποιήσετε εδώ.', - 'make_default_currency' => 'Ορισμός ως προεπιλογή', - 'default_currency' => 'προεπιλογή', - 'currency_is_disabled' => 'Απενεργοποιημένο', - 'enable_currency' => 'Ενεργοποίηση', - 'disable_currency' => 'Απενεργοποίηση', - 'currencies_default_disabled' => 'Τα περισσότερα από αυτά τα νομίσματα είναι απενεργοποιημένα από προεπιλογή. Για να τα χρησιμοποιήσετε, πρέπει πρώτα να τα ενεργοποιήσετε.', - 'currency_is_now_enabled' => 'Το νόμισμα:name ενεργοποιήθηκε', - 'currency_is_now_disabled' => 'Το νόμισμα:name απενεργοποιήθηκε', + 'create_currency' => 'Δημιουργία νέου νομίσματος', + 'store_currency' => 'Αποθήκευση νέου νομίσματος', + 'update_currency' => 'Ενημέρωση νομίσματος', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή είναι ακόμα σε χρήση.', + 'cannot_delete_fallback_currency' => ':name είναι το εφεδρικό νόμισμα του συστήματος και δεν μπορεί να διαγραφεί.', + 'cannot_disable_currency_journals' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή το χρησιμοποιούν ορισμένες συναλλαγές.', + 'cannot_disable_currency_last_left' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή είναι το μόνο ενεργό νόμισμα.', + 'cannot_disable_currency_account_meta' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή χρησιμοποιείται από λογαριασμούς κεφαλαίου.', + 'cannot_disable_currency_bills' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή το χρησιμοποιούν ορισμένα πάγια έξοδα.', + 'cannot_disable_currency_recurring' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή το χρησιμοποιούν ορισμένες επαναλαμβανόμενες συναλλαγές.', + 'cannot_disable_currency_available_budgets' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή χρησιμοποιείται στους διαθέσιμους προϋπολογισμούς.', + 'cannot_disable_currency_budget_limits' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή χρησιμοποιείται σε όρια προϋπολογισμού.', + 'cannot_disable_currency_current_default' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή είναι το προεπιλεγμένο νόμισμα αυτή τη στιγμή.', + 'cannot_disable_currency_system_fallback' => 'Δεν είναι δυνατή η απενεργοποίηση του :name επειδή είναι το προεπιλεγμένο νόμισμα του συστήματος.', + 'disable_EUR_side_effects' => 'Το Ευρώ είναι το εφεδρικό νόμισμα μετάπτωσης του συστήματος. Η απενεργοποίηση μπορεί να έχει ανεπιθύμητες παρενέργειες και μπορεί να ακυρώσει την εγγύησή σας.', + 'deleted_currency' => 'Το νόμισμα :name διαγράφηκε', + 'created_currency' => 'Το νόμισμα :name δημιουργήθηκε', + 'could_not_store_currency' => 'Δεν ήταν δυνατή η αποθήκευση του νέου νομίσματος.', + 'updated_currency' => 'Το νόμισμα :name ενημερώθηκε', + 'ask_site_owner' => 'Ζητήστε από τον :owner να προσθέσει, αφαιρέσει ή να επεξεργαστεί νομίσματα.', + 'currencies_intro' => 'Το Firefly III υποστηρίζει διάφορα νομίσματα τα οποία μπορείτε να ρυθμίσετε και να ενεργοποιήσετε εδώ.', + 'make_default_currency' => 'Ορισμός ως προεπιλογή', + 'default_currency' => 'προεπιλογή', + 'currency_is_disabled' => 'Απενεργοποιημένο', + 'enable_currency' => 'Ενεργοποίηση', + 'disable_currency' => 'Απενεργοποίηση', + 'currencies_default_disabled' => 'Τα περισσότερα από αυτά τα νομίσματα είναι απενεργοποιημένα από προεπιλογή. Για να τα χρησιμοποιήσετε, πρέπει πρώτα να τα ενεργοποιήσετε.', + 'currency_is_now_enabled' => 'Το νόμισμα:name ενεργοποιήθηκε', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Το νόμισμα:name απενεργοποιήθηκε', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Υποχρεωτικά πεδία', - 'optionalFields' => 'Προαιρετικά πεδία', - 'options' => 'Επιλογές', + 'mandatoryFields' => 'Υποχρεωτικά πεδία', + 'optionalFields' => 'Προαιρετικά πεδία', + 'options' => 'Επιλογές', // budgets: - 'daily_budgets' => 'Ημερήσιοι προϋπολογισμοί', - 'weekly_budgets' => 'Εβδομαδιαίοι προϋπολογισμοί', - 'monthly_budgets' => 'Μηνιαίοι προϋπολογισμοί', - 'quarterly_budgets' => 'Τριμηνιαίοι προϋπολογισμοί', - 'half_year_budgets' => 'Εξαμηνιαίοι προϋπολογισμοί', - 'yearly_budgets' => 'Ετήσιοι προϋπολογισμοί', - 'other_budgets' => 'Προϋπολογισμοί με χρονική προσαρμογή', - 'budget_limit_not_in_range' => 'Αυτό το ποσό ισχύει από :start έως :end:', - 'total_available_budget' => 'Συνολικός διαθέσιμος προϋπολογισμός (μεταξύ :start και :end)', - 'total_available_budget_in_currency' => 'Συνολικός διαθέσιμος προϋπολογισμός σε :currency', - 'see_below' => 'δες παρακάτω', - 'create_new_budget' => 'Δημιουργία νέου προϋπολογισμού', - 'store_new_budget' => 'Αποθήκευση νέου προϋπολογισμού', - 'stored_new_budget' => 'Αποθηκεύτηκε ο νέος προϋπολογισμός ":name"', - 'available_between' => 'Διαθέσιμο μεταξύ :start και :end', - 'transactionsWithoutBudget' => 'Δαπάνες εκτός κάποιου προϋπολογισμού', - 'transactions_no_budget' => 'Δαπάνες εκτός κάποιου προϋπολογισμού μεταξύ :start και :end', - 'spent_between' => 'Δαπανήθηκαν ήδη μεταξύ :start και :end', - 'set_available_amount' => 'Ορισμός διαθέσιμου ποσού', - 'update_available_amount' => 'Ενημέρωση διαθέσιμου ποσού', - 'ab_basic_modal_explain' => 'Χρησιμοποιήστε αυτή τη φόρμα για να υποδείξετε πόσα μπορείτε να προϋπολογίσετε (συνολικά, σε :currency) κατά την αναφερόμενη περίοδο.', - 'createBudget' => 'Νέος προϋπολογισμός', - 'invalid_currency' => 'Μη έγκυρο νόμισμα', - 'invalid_amount' => 'Παρακαλώ εισάγετε ένα ποσό', - 'set_ab' => 'Το διαθέσιμο ποσό προϋπολογισμού έχει οριστεί', - 'updated_ab' => 'Το διαθέσιμο ποσό προϋπολογισμού έχει ενημερωθεί', - 'deleted_ab' => 'Το διαθέσιμο ποσό προϋπολογισμού έχει διαγραφεί', - 'deleted_bl' => 'Το ποσό προϋπολογισμού έχει καταργηθεί', - 'alt_currency_ab_create' => 'Ορίστε τον διαθέσιμο προϋπολογισμό σε άλλο νόμισμα', - 'bl_create_btn' => 'Ορισμός προϋπολογισμού σε άλλο νόμισμα', - 'inactiveBudgets' => 'Ανενεργοί προϋπολογισμοί', - 'without_budget_between' => 'Συναλλαγές εκτός κάποιου προϋπολογισμού μεταξύ :start και :end', - 'delete_budget' => 'Διαγραφή προϋπολογισμού ":name"', - 'deleted_budget' => 'Διαγράφηκε ο προϋπολογισμός ":name"', - 'edit_budget' => 'Επεξεργασία προϋπολογισμού ":name"', - 'updated_budget' => 'Ενημερώθηκε ο προϋπολογισμός ":name"', - 'update_amount' => 'Ενημέρωση ποσού', - 'update_budget' => 'Ενημέρωση προϋπολογισμού', - 'update_budget_amount_range' => 'Ενημέρωση (αναμενόμενου) διαθέσιμου ποσού μεταξύ :start και :end', - 'set_budget_limit_title' => 'Ορισμός ποσού για τον προϋπολογισμό :budget μεταξύ :start και :end', - 'set_budget_limit' => 'Ορισμός ποσού προϋπολογισμού', - 'budget_period_navigator' => 'Περιήγηση περιόδου', - 'info_on_available_amount' => 'Τι έχω διαθέσιμο;', - 'available_amount_indication' => 'Χρησιμοποιήστε αυτά τα ποσά για μια ένδειξη του συνολικού προϋπολογισμού σας.', - 'suggested' => 'Πρόταση', - 'average_between' => 'Μέσος όρος μεταξύ :start και :end', - 'transferred_in' => 'Μεταφέρθηκαν (εντός)', - 'transferred_away' => 'Μεταφέρθηκαν (εκτός)', - 'auto_budget_none' => 'Χωρίς αυτόματο προϋπολογισμό', - 'auto_budget_reset' => 'Ορίστε ένα σταθερό ποσό κάθε περίοδο', - 'auto_budget_rollover' => 'Προσθέστε ένα ποσό σε κάθε περίοδο', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Ημερησίως', - 'auto_budget_period_weekly' => 'Εβδομαδιαίως', - 'auto_budget_period_monthly' => 'Μηνιαίως', - 'auto_budget_period_quarterly' => 'Τριμηνιαίως', - 'auto_budget_period_half_year' => 'Εξαμηνιαίως', - 'auto_budget_period_yearly' => 'Ετησίως', - 'auto_budget_help' => 'Μπορείτε να διαβάσετε περισσότερα σχετικά με αυτή τη λειτουργία στη βοήθεια. Κάντε κλικ στο εικονίδιο (?) επάνω δεξιά.', - 'auto_budget_reset_icon' => 'Αυτός ο προϋπολογισμός θα οριστεί περιοδικά', - 'auto_budget_rollover_icon' => 'Το ποσό του προϋπολογισμού θα αυξηθεί περιοδικά', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Κατάργηση ποσού προϋπολογισμού σε :currency', + 'daily_budgets' => 'Ημερήσιοι προϋπολογισμοί', + 'weekly_budgets' => 'Εβδομαδιαίοι προϋπολογισμοί', + 'monthly_budgets' => 'Μηνιαίοι προϋπολογισμοί', + 'quarterly_budgets' => 'Τριμηνιαίοι προϋπολογισμοί', + 'half_year_budgets' => 'Εξαμηνιαίοι προϋπολογισμοί', + 'yearly_budgets' => 'Ετήσιοι προϋπολογισμοί', + 'other_budgets' => 'Προϋπολογισμοί με χρονική προσαρμογή', + 'budget_limit_not_in_range' => 'Αυτό το ποσό ισχύει από :start έως :end:', + 'total_available_budget' => 'Συνολικός διαθέσιμος προϋπολογισμός (μεταξύ :start και :end)', + 'total_available_budget_in_currency' => 'Συνολικός διαθέσιμος προϋπολογισμός σε :currency', + 'see_below' => 'δες παρακάτω', + 'create_new_budget' => 'Δημιουργία νέου προϋπολογισμού', + 'store_new_budget' => 'Αποθήκευση νέου προϋπολογισμού', + 'stored_new_budget' => 'Αποθηκεύτηκε ο νέος προϋπολογισμός ":name"', + 'available_between' => 'Διαθέσιμο μεταξύ :start και :end', + 'transactionsWithoutBudget' => 'Δαπάνες εκτός κάποιου προϋπολογισμού', + 'transactions_no_budget' => 'Δαπάνες εκτός κάποιου προϋπολογισμού μεταξύ :start και :end', + 'spent_between' => 'Δαπανήθηκαν ήδη μεταξύ :start και :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Ορισμός διαθέσιμου ποσού', + 'update_available_amount' => 'Ενημέρωση διαθέσιμου ποσού', + 'ab_basic_modal_explain' => 'Χρησιμοποιήστε αυτή τη φόρμα για να υποδείξετε πόσα μπορείτε να προϋπολογίσετε (συνολικά, σε :currency) κατά την αναφερόμενη περίοδο.', + 'createBudget' => 'Νέος προϋπολογισμός', + 'invalid_currency' => 'Μη έγκυρο νόμισμα', + 'invalid_amount' => 'Παρακαλώ εισάγετε ένα ποσό', + 'set_ab' => 'Το διαθέσιμο ποσό προϋπολογισμού έχει οριστεί', + 'updated_ab' => 'Το διαθέσιμο ποσό προϋπολογισμού έχει ενημερωθεί', + 'deleted_ab' => 'Το διαθέσιμο ποσό προϋπολογισμού έχει διαγραφεί', + 'deleted_bl' => 'Το ποσό προϋπολογισμού έχει καταργηθεί', + 'alt_currency_ab_create' => 'Ορίστε τον διαθέσιμο προϋπολογισμό σε άλλο νόμισμα', + 'bl_create_btn' => 'Ορισμός προϋπολογισμού σε άλλο νόμισμα', + 'inactiveBudgets' => 'Ανενεργοί προϋπολογισμοί', + 'without_budget_between' => 'Συναλλαγές εκτός κάποιου προϋπολογισμού μεταξύ :start και :end', + 'delete_budget' => 'Διαγραφή προϋπολογισμού ":name"', + 'deleted_budget' => 'Διαγράφηκε ο προϋπολογισμός ":name"', + 'edit_budget' => 'Επεξεργασία προϋπολογισμού ":name"', + 'updated_budget' => 'Ενημερώθηκε ο προϋπολογισμός ":name"', + 'update_amount' => 'Ενημέρωση ποσού', + 'update_budget' => 'Ενημέρωση προϋπολογισμού', + 'update_budget_amount_range' => 'Ενημέρωση (αναμενόμενου) διαθέσιμου ποσού μεταξύ :start και :end', + 'set_budget_limit_title' => 'Ορισμός ποσού για τον προϋπολογισμό :budget μεταξύ :start και :end', + 'set_budget_limit' => 'Ορισμός ποσού προϋπολογισμού', + 'budget_period_navigator' => 'Περιήγηση περιόδου', + 'info_on_available_amount' => 'Τι έχω διαθέσιμο;', + 'available_amount_indication' => 'Χρησιμοποιήστε αυτά τα ποσά για μια ένδειξη του συνολικού προϋπολογισμού σας.', + 'suggested' => 'Πρόταση', + 'average_between' => 'Μέσος όρος μεταξύ :start και :end', + 'transferred_in' => 'Μεταφέρθηκαν (εντός)', + 'transferred_away' => 'Μεταφέρθηκαν (εκτός)', + 'auto_budget_none' => 'Χωρίς αυτόματο προϋπολογισμό', + 'auto_budget_reset' => 'Ορίστε ένα σταθερό ποσό κάθε περίοδο', + 'auto_budget_rollover' => 'Προσθέστε ένα ποσό σε κάθε περίοδο', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Ημερησίως', + 'auto_budget_period_weekly' => 'Εβδομαδιαίως', + 'auto_budget_period_monthly' => 'Μηνιαίως', + 'auto_budget_period_quarterly' => 'Τριμηνιαίως', + 'auto_budget_period_half_year' => 'Εξαμηνιαίως', + 'auto_budget_period_yearly' => 'Ετησίως', + 'auto_budget_help' => 'Μπορείτε να διαβάσετε περισσότερα σχετικά με αυτή τη λειτουργία στη βοήθεια. Κάντε κλικ στο εικονίδιο (?) επάνω δεξιά.', + 'auto_budget_reset_icon' => 'Αυτός ο προϋπολογισμός θα οριστεί περιοδικά', + 'auto_budget_rollover_icon' => 'Το ποσό του προϋπολογισμού θα αυξηθεί περιοδικά', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Κατάργηση ποσού προϋπολογισμού σε :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Δεν αναμένεται αυτή την περίοδο', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Όχι (ακόμη)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Αντιστοιχίες πάγιου έξοδου προς συναλλαγές μεταξύ :low και :high.', - 'running_again_loss' => 'Οι συναλλαγές που έχουν συνδεθεί προηγουμένως με αυτό το πάγιο έξοδο ενδέχεται να χάσουν τη σύνδεσή τους, αν δεν συμφωνούν (πλέον) με τον κανόνα(ες).', - 'bill_related_rules' => 'Συσχετιζόμενοι κανόνες με αυτό το πάγιο έξοδο', - 'repeats' => 'Επαναλήψεις', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Συνδεδεμένες συναλλαγές', - 'auto_match_on' => 'Αυτόματη αντιστοίχιση από το Firefly III', - 'auto_match_off' => 'Μη αυτόματη αντιστοίχιση από το Firefly III', - 'next_expected_match' => 'Επόμενη αναμενόμενη αντιστοίχιση', - 'delete_bill' => 'Διαγραφή πάγιου έξοδου ":name"', - 'deleted_bill' => 'Διαγράφηκε το πάγιο έξοδο ":name"', - 'edit_bill' => 'Επεξεργασία πάγιου έξοδου ":name"', - 'more' => 'Περισσότερα', - 'rescan_old' => 'Επανεκτέλεση των κανόνων σε όλες τις συναλλαγές', - 'update_bill' => 'Ενημέρωση πάγιου έξοδου', - 'updated_bill' => 'Ενημερώθηκε το πάγιο έξοδο ":name"', - 'store_new_bill' => 'Αποθήκευση νέου πάγιου έξοδου', - 'stored_new_bill' => 'Αποθηκεύτηκε το νέο πάγιο έξοδο ":name"', - 'cannot_scan_inactive_bill' => 'Ανενεργά πάγια έξοδα δε μπορούν να σαρωθούν.', - 'rescanned_bill' => 'Έγινε νέα σάρωση και συνδέθηκε :count συναλλαγή σε αυτό το πάγιο έξοδο.|Έγινε νέα σάρωση και συνδέθηκαν :count συναλλαγές σε αυτό το πάγιο έξοδο.', - 'average_bill_amount_year' => 'Μέσο ποσό σε πάγιο έξοδο (:year)', - 'average_bill_amount_overall' => 'Μέσο ποσό σε πάγιο έξοδο (συνολικά)', - 'bill_is_active' => 'Το πάγιο έξοδο είναι ενεργό', - 'bill_expected_between' => 'Αναμενόμενα μεταξύ :start και :end', - 'bill_will_automatch' => 'Το πάγιο έξοδο θα συνδεθεί αυτόματα με τις αντίστοιχες συναλλαγές', - 'skips_over' => 'παραλείπει', - 'bill_store_error' => 'Παρουσιάστηκε ένα μη αναμενόμενο σφάλμα κατά την αποθήκευση του νέου πάγιου έξοδου. Ελέγξτε τα αρχεία καταγραφής', - 'list_inactive_rule' => 'ανενεργός κανόνας', - 'bill_edit_rules' => 'Το Firefly III θα προσπαθήσει επίσης να επεξεργαστεί τον κανόνα που σχετίζεται με αυτόν τον λογαριασμό. Εάν όμως έχετε επεξεργαστεί ο ίδιος αυτόν τον κανόνα, το Firefly III δεν θα αλλάξει τίποτα.|Το Firefly III θα προσπαθήσει επίσης να επεξεργαστεί τους :count κανόνες που σχετίζονται με αυτόν τον λογαριασμό. Ωστόσο, εάν έχετε επεξεργαστεί αυτούς τους κανόνες μόνοι σας, το Firefly III δεν θα αλλάξει τίποτα.', - 'bill_expected_date' => 'Αναμένεται :date', - 'bill_expected_date_js' => 'Αναμένεται {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Πληρώθηκε στις {date}', - 'bill_repeats_weekly' => 'Επαναλαμβάνεται εβδομαδιαίως', - 'bill_repeats_monthly' => 'Επαναλαμβάνεται μηνιαίως', - 'bill_repeats_quarterly' => 'Επαναλαμβάνεται ανά τρίμηνο', - 'bill_repeats_half-year' => 'Επαναλαμβάνεται κάθε μισό χρόνο', - 'bill_repeats_yearly' => 'Επαναλαμβάνεται ετησίως', - 'bill_repeats_weekly_other' => 'Επαναλαμβάνεται κάθε δεύτερη εβδομάδα', - 'bill_repeats_monthly_other' => 'Επαναλαμβάνεται κάθε δεύτερο μήνα', - 'bill_repeats_quarterly_other' => 'Επαναλαμβάνεται κάθε δεύτερο τρίμηνο', - 'bill_repeats_half-year_other' => 'Επαναλαμβάνεται ετησίως', - 'bill_repeats_yearly_other' => 'Επαναλαμβάνεται κάθε δεύτερο χρόνο', - 'bill_repeats_weekly_skip' => 'Επαναλαμβάνεται κάθε {skip} εβδομάδες', - 'bill_repeats_monthly_skip' => 'Επαναλαμβάνεται κάθε {skip} μήνες', - 'bill_repeats_quarterly_skip' => 'Επαναλαμβάνεται κάθε {skip} τρίμηνα', - 'bill_repeats_half-year_skip' => 'Επαναλαμβάνεται κάθε {skip} εξάμηνα', - 'bill_repeats_yearly_skip' => 'Επαναλαμβάνεται κάθε {skip} έτη', - 'subscriptions' => 'Συνδρομές', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Για πάντα', - 'extension_date_is' => 'Η ημερομηνία παράτασης είναι {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Δεν αναμένεται αυτή την περίοδο', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Όχι (ακόμη)', + 'visit_bill' => 'Επισκεφθείτε το πάγιο έξοδο ":name" στο Firefly III', + 'match_between_amounts' => 'Αντιστοιχίες πάγιου έξοδου προς συναλλαγές μεταξύ :low και :high.', + 'running_again_loss' => 'Οι συναλλαγές που έχουν συνδεθεί προηγουμένως με αυτό το πάγιο έξοδο ενδέχεται να χάσουν τη σύνδεσή τους, αν δεν συμφωνούν (πλέον) με τον κανόνα(ες).', + 'bill_related_rules' => 'Συσχετιζόμενοι κανόνες με αυτό το πάγιο έξοδο', + 'repeats' => 'Επαναλήψεις', + 'bill_end_date_help' => 'Προαιρετικό πεδίο. Το πάγιο έξοδο αναμένεται να τελειώσει σε αυτή την ημερομηνία.', + 'bill_extension_date_help' => 'Προαιρετικό πεδίο. Το πάγιο έξοδο πρέπει να παραταθεί (ή να ακυρωθεί) πριν ή κατά από αυτή την ημερομηνία.', + 'bill_end_index_line' => 'Αυτό το πάγιο έξοδο τελειώνει στις :date', + 'bill_extension_index_line' => 'Αυτό το πάγιο έξοδο πρέπει να παραταθεί ή να ακυρωθεί στις :date', + 'connected_journals' => 'Συνδεδεμένες συναλλαγές', + 'auto_match_on' => 'Αυτόματη αντιστοίχιση από το Firefly III', + 'auto_match_off' => 'Μη αυτόματη αντιστοίχιση από το Firefly III', + 'next_expected_match' => 'Επόμενη αναμενόμενη αντιστοίχιση', + 'delete_bill' => 'Διαγραφή πάγιου έξοδου ":name"', + 'deleted_bill' => 'Διαγράφηκε το πάγιο έξοδο ":name"', + 'edit_bill' => 'Επεξεργασία πάγιου έξοδου ":name"', + 'more' => 'Περισσότερα', + 'rescan_old' => 'Επανεκτέλεση των κανόνων σε όλες τις συναλλαγές', + 'update_bill' => 'Ενημέρωση πάγιου έξοδου', + 'updated_bill' => 'Ενημερώθηκε το πάγιο έξοδο ":name"', + 'store_new_bill' => 'Αποθήκευση νέου πάγιου έξοδου', + 'stored_new_bill' => 'Αποθηκεύτηκε το νέο πάγιο έξοδο ":name"', + 'cannot_scan_inactive_bill' => 'Ανενεργά πάγια έξοδα δε μπορούν να σαρωθούν.', + 'rescanned_bill' => 'Έγινε νέα σάρωση και συνδέθηκε :count συναλλαγή σε αυτό το πάγιο έξοδο.|Έγινε νέα σάρωση και συνδέθηκαν :count συναλλαγές σε αυτό το πάγιο έξοδο.', + 'average_bill_amount_year' => 'Μέσο ποσό σε πάγιο έξοδο (:year)', + 'average_bill_amount_overall' => 'Μέσο ποσό σε πάγιο έξοδο (συνολικά)', + 'bill_is_active' => 'Το πάγιο έξοδο είναι ενεργό', + 'bill_expected_between' => 'Αναμενόμενα μεταξύ :start και :end', + 'bill_will_automatch' => 'Το πάγιο έξοδο θα συνδεθεί αυτόματα με τις αντίστοιχες συναλλαγές', + 'skips_over' => 'παραλείπει', + 'bill_store_error' => 'Παρουσιάστηκε ένα μη αναμενόμενο σφάλμα κατά την αποθήκευση του νέου πάγιου έξοδου. Ελέγξτε τα αρχεία καταγραφής', + 'list_inactive_rule' => 'ανενεργός κανόνας', + 'bill_edit_rules' => 'Το Firefly III θα προσπαθήσει επίσης να επεξεργαστεί τον κανόνα που σχετίζεται με αυτόν τον λογαριασμό. Εάν όμως έχετε επεξεργαστεί ο ίδιος αυτόν τον κανόνα, το Firefly III δεν θα αλλάξει τίποτα.|Το Firefly III θα προσπαθήσει επίσης να επεξεργαστεί τους :count κανόνες που σχετίζονται με αυτόν τον λογαριασμό. Ωστόσο, εάν έχετε επεξεργαστεί αυτούς τους κανόνες μόνοι σας, το Firefly III δεν θα αλλάξει τίποτα.', + 'bill_expected_date' => 'Αναμένεται :date', + 'bill_expected_date_js' => 'Αναμένεται {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Πληρώθηκε στις {date}', + 'bill_repeats_weekly' => 'Επαναλαμβάνεται εβδομαδιαίως', + 'bill_repeats_monthly' => 'Επαναλαμβάνεται μηνιαίως', + 'bill_repeats_quarterly' => 'Επαναλαμβάνεται ανά τρίμηνο', + 'bill_repeats_half-year' => 'Επαναλαμβάνεται κάθε μισό χρόνο', + 'bill_repeats_yearly' => 'Επαναλαμβάνεται ετησίως', + 'bill_repeats_weekly_other' => 'Επαναλαμβάνεται κάθε δεύτερη εβδομάδα', + 'bill_repeats_monthly_other' => 'Επαναλαμβάνεται κάθε δεύτερο μήνα', + 'bill_repeats_quarterly_other' => 'Επαναλαμβάνεται κάθε δεύτερο τρίμηνο', + 'bill_repeats_half-year_other' => 'Επαναλαμβάνεται ετησίως', + 'bill_repeats_yearly_other' => 'Επαναλαμβάνεται κάθε δεύτερο χρόνο', + 'bill_repeats_weekly_skip' => 'Επαναλαμβάνεται κάθε {skip} εβδομάδες', + 'bill_repeats_monthly_skip' => 'Επαναλαμβάνεται κάθε {skip} μήνες', + 'bill_repeats_quarterly_skip' => 'Επαναλαμβάνεται κάθε {skip} τρίμηνα', + 'bill_repeats_half-year_skip' => 'Επαναλαμβάνεται κάθε {skip} εξάμηνα', + 'bill_repeats_yearly_skip' => 'Επαναλαμβάνεται κάθε {skip} έτη', + 'subscriptions' => 'Συνδρομές', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Για πάντα', + 'extension_date_is' => 'Η ημερομηνία παράτασης είναι {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'Έχετε :count ανενεργό λογαριασμό (σε αρχειοθέτηση), τον οποίο μπορείτε να δείτε σε αυτή τη ξεχωριστή σελίδα.|Έχετε :count ανενεργούς λογαριασμούς (σε αρχειοθέτηση), τους οποίους μπορείτε να δείτε σε αυτή τη ξεχωριστή σελίδα.', - 'all_accounts_inactive' => 'Αυτοί είναι οι ανενεργοί λογαριασμοί σας.', - 'active_account_link' => 'Αυτός ο σύνδεσμος πηγαίνει πίσω στους ενεργούς λογαριασμούς σας.', - 'account_missing_transaction' => 'Ο λογαριασμός #:id (":name") δεν μπορεί να προβληθεί άμεσα, αλλά και το Firefly δεν έχει πληροφορίες ανακατεύθυνσης.', - 'cc_monthly_payment_date_help' => 'Επιλέξτε οποιοδήποτε έτος και μήνα, θα αγνοηθούν ούτως ή άλλως. Μόνο η επιλογή ημέρας του μήνα είναι σχετική.', - 'details_for_asset' => 'Λεπτομέρειες για τον λογαριασμό κεφαλαίου ":name"', - 'details_for_expense' => 'Λεπτομέρειες για το λογαριασμό δαπανών ":name"', - 'details_for_revenue' => 'Λεπτομέρειες για τον λογαριασμό εσόδων ":name"', - 'details_for_cash' => 'Λεπτομέρειες για to λογαριασμό μετρητών ":name"', - 'store_new_asset_account' => 'Αποθήκευση νέου λογαριασμού κεφαλαίου', - 'store_new_expense_account' => 'Αποθήκευση νέου λογαριασμού δαπανών', - 'store_new_revenue_account' => 'Αποθήκευση νέου λογαριασμού εσόδων', - 'edit_asset_account' => 'Επεξεργασία του κεφαλαιακού λογαριασμού ":name"', - 'edit_expense_account' => 'Επεξεργασία του λογαριασμού δαπανών ":name"', - 'edit_revenue_account' => 'Επεξεργασία λογαριασμού εσόδων ":name"', - 'delete_asset_account' => 'Διαγραφή του κεφαλαιακού λογαριασμού ":name"', - 'delete_expense_account' => 'Διαγραφή του λογαριασμού δαπανών ":name"', - 'delete_revenue_account' => 'Διαγραφή λογαριασμού εσόδων ":name"', - 'delete_liabilities_account' => 'Διαγραφή υποχρέωσης ":name"', - 'asset_deleted' => 'Επιτυχής διαγραφή του κεφαλαιακού λογαριασμού ":name"', - 'account_deleted' => 'Επιτυχής διαγραφή του λογαριασμού ":name"', - 'expense_deleted' => 'Επιτυχής διαγραφή του λογαριασμού δαπανών ":name"', - 'revenue_deleted' => 'Επιτυχής διαγραφή του λογαριασμού εσόδων ":name"', - 'update_asset_account' => 'Ενημέρωση λογαριασμού κεφαλαίου', - 'update_undefined_account' => 'Ενημέρωση λογαριασμού', - 'update_liabilities_account' => 'Ενημέρωση υποχρέωσης', - 'update_expense_account' => 'Ενημέρωση λογαριασμού δαπανών', - 'update_revenue_account' => 'Ενημέρωση λογαριασμού εσόδων', - 'make_new_asset_account' => 'Δημιουργία νέου λογαριασμού κεφαλαίου', - 'make_new_expense_account' => 'Δημιουργία νέου λογαριασμού δαπανών', - 'make_new_revenue_account' => 'Δημιουργία νέου λογαριασμού εσόδων', - 'make_new_liabilities_account' => 'Δημιουργία νέας υποχρέωσης', - 'asset_accounts' => 'Κεφάλαια', - 'undefined_accounts' => 'Λογαριασμοί', - 'asset_accounts_inactive' => 'Λογαριασμοί κεφαλαίου (ανενεργοί)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Δαπάνες', - 'expense_accounts_inactive' => 'Λογαριασμοί δαπανών (ανενεργοί)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Έσοδα', - 'revenue_accounts_inactive' => 'Λογαριασμοί εσόδων (ανενεργοί)', - 'cash_accounts' => 'Μετρητά', - 'Cash account' => 'Λογαριασμός μετρητών', - 'liabilities_accounts' => 'Υποχρεώσεις', - 'liabilities_accounts_inactive' => 'Υποχρεώσεις (ανενεργές)', - 'reconcile_account' => 'Τακτοποίηση λογαριασμού ":account"', - 'overview_of_reconcile_modal' => 'Επισκόπηση τακτοποίησης', - 'delete_reconciliation' => 'Διαγραφή τακτοποίησης', - 'update_reconciliation' => 'Ενημέρωση τακτοποίησης', - 'amount_cannot_be_zero' => 'Το ποσό δεν μπορεί να είναι μηδέν', - 'end_of_reconcile_period' => 'Τέλος περιόδου προς τακτοποίηση :period', - 'start_of_reconcile_period' => 'Έναρξη περιόδου προς τακτοποίηση :period', - 'start_balance' => 'Αρχικό υπόλοιπο', - 'end_balance' => 'Τελικό υπόλοιπο', - 'update_balance_dates_instruction' => 'Αντιστοιχίστε τα παραπάνω ποσά και ημερομηνίες με την τραπεζική σας κατάσταση και πατήστε "Έναρξη τακτοποίησης"', - 'select_transactions_instruction' => 'Επιλέξτε τις συναλλαγές που εμφανίζονται στην τραπεζική σας κατάσταση.', - 'select_range_and_balance' => 'Ελέγξτε πρώτα το χρονικό διάστημα καθώς και τα υπόλοιπα. Στη συνέχεια πατήστε "Έναρξη τακτοποίησης"', - 'date_change_instruction' => 'Εάν αλλάξετε τώρα το χρονικό διάστημα, θα χαθεί ότι είχατε εισάγει.', - 'update_selection' => 'Ενημέρωση επιλογής', - 'store_reconcile' => 'Αποθήκευση τακτοποίησης', - 'reconciliation_transaction' => 'Συναλλαγή τακτοποίησης', - 'Reconciliation' => 'Τακτοποίηση', - 'reconciliation' => 'Τακτοποίηση', - 'reconcile_options' => 'Επιλογές τακτοποίησης', - 'reconcile_range' => 'Εύρος τακτοποίησης', - 'start_reconcile' => 'Έναρξη τακτοποίησης', - 'cash_account_type' => 'Μετρητά', - 'cash' => 'μετρητά', - 'cant_find_redirect_account' => 'Το Firefly III προσπάθησε να σας ανακατευθύνει αλλά δεν κατάφερε. Συγνώμη για αυτό. Πίσω στην αρχική.', - 'account_type' => 'Τύπος λογαριασμού', - 'save_transactions_by_moving' => 'Αποθηκεύστε αυτή τη συναλλαγή μετακινώντας την σε ένα άλλο λογαριασμό:|Αποθηκεύστε αυτές τις συναλλαγές μετακινώντας τις σε ένα άλλο λογαριασμό:', - 'save_transactions_by_moving_js' => 'Δεν υπάρχουν συναλλαγές|Αποθηκεύστε αυτή τη συναλλαγή μετακινώντας την σε άλλο λογαριασμό|Αποθηκεύστε αυτές τις συναλλαγές μετακινώντας τις σε άλλο λογαριασμό.', - 'stored_new_account' => 'Ο νέος λογαριασμός ":name" αποθηκεύτηκε!', - 'stored_new_account_js' => 'Ο νέος λογαριασμός "{name}" αποθηκεύτηκε!', - 'updated_account' => 'Ενημερώθηκε ο λογαριασμός ":name"', - 'updated_account_js' => 'Ενημερώθηκε ο λογαριασμός "{title}".', - 'credit_card_options' => 'Επιλογές πιστωτικής κάρτας', - 'no_transactions_account' => 'Δεν υπάρχουν συναλλαγές (αυτήν την περίοδο) για τον λογαριασμό κεφαλαίου ":name".', - 'no_transactions_period' => 'Δεν υπάρχουν συναλλαγές (αυτήν την περίοδο).', - 'no_data_for_chart' => 'Δεν υπάρχουν αρκετές πληροφορίες (ακόμα) για να δημιουργηθεί αυτό το διάγραμμα.', - 'select_at_least_one_account' => 'Παρακαλώ επιλέξτε τουλάχιστον ένα λογαριασμό κεφαλαίου', - 'select_at_least_one_category' => 'Παρακαλώ επιλέξτε τουλάχιστον μια κατηγορία', - 'select_at_least_one_budget' => 'Επιλέξτε τουλάχιστον έναν προϋπολογισμό', - 'select_at_least_one_tag' => 'Παρακαλώ επιλέξτε τουλάχιστον μια ετικέτα', - 'select_at_least_one_expense' => 'Επιλέξτε τουλάχιστον έναν συνδυασμό λογαριασμών δαπανών / εσόδων. Εάν δεν έχετε (η λίστα είναι κενή) αυτή η αναφορά δεν είναι διαθέσιμη.', - 'account_default_currency' => 'Αυτό θα είναι το προεπιλεγμένο νόμισμα που σχετίζεται με αυτό το λογαριασμό.', - 'reconcile_has_more' => 'Το καθολικό στο Firefly III έχει περισσότερα χρήματα από όσα εμφανίζει η κατάσταση της τράπεζας. Υπάρχουν πολλές επιλογές. Επιλέξτε τι θέλετε να κάνετε. Στη συνέχεια πατήστε "Επιβεβαίωση τακτοποίησης".', - 'reconcile_has_less' => 'Το καθολικό στο Firefly III έχει λιγότερα χρήματα από όσα εμφανίζει η κατάσταση της τράπεζας. Υπάρχουν πολλές επιλογές. Επιλέξτε τι θέλετε να κάνετε. Στη συνέχεια πατήστε "Επιβεβαίωση τακτοποίησης".', - 'reconcile_is_equal' => 'Το καθολικό στο Firefly III ταιριάζει με την κατάσταση της τράπεζας. Δεν υπάρχει τίποτα να κάνετε. Πατήστε "Επιβεβαίωση τακτοποίησης" για επιβεβαίωση.', - 'create_pos_reconcile_transaction' => 'Εκκαθαρίστε τις επιλεγμένες συναλλαγές και δημιουργήστε μια διόρθωση προσθέτοντας :amount σε αυτό το λογαριασμό κεφαλαίου.', - 'create_neg_reconcile_transaction' => 'Εκκαθαρίστε τις επιλεγμένες συναλλαγές και δημιουργήστε μια διόρθωση αφαιρώντας :amount από αυτό το λογαριασμό κεφαλαίου.', - 'reconcile_do_nothing' => 'Σβήστε τις επιλεγμένες συναλλαγές, αλλά χωρίς διόρθωση.', - 'reconcile_go_back' => 'Μπορείτε να επεξεργαστείτε ή να διαγράψετε μια διόρθωση αργότερα.', - 'must_be_asset_account' => 'Μπορείτε να κάνετε τακτοποίηση μόνο σε λογαριασμούς κεφαλαίου', - 'reconciliation_stored' => 'Η τακτοποίηση αποθηκεύτηκε', - 'reconciliation_error' => 'Λόγω σφάλματος, οι συναλλαγές επισημάνθηκαν ως τακτοποιημένες αλλά η διόρθωση δεν έχει αποθηκευτεί: :error.', - 'reconciliation_transaction_title' => 'Τακτοποίηση (:from σε :to)', - 'sum_of_reconciliation' => 'Άθροισμα της τακτοποίησης', - 'reconcile_this_account' => 'Τακτοποίηση αυτού του λογαριασμού', - 'reconcile' => 'Τακτοποίηση', - 'show' => 'Εμφάνιση', - 'confirm_reconciliation' => 'Επιβεβαίωση τακτοποίησης', - 'submitted_start_balance' => 'Υποβλήθηκε το αρχικό υπόλοιπο', - 'selected_transactions' => 'Επιλεγμένες συναλλαγές (:count)', - 'already_cleared_transactions' => 'Συναλλαγές που έχουν ήδη ελεγχθεί (:count)', - 'submitted_end_balance' => 'Υποβλήθηκε το τελικό υπόλοιπο', - 'initial_balance_description' => 'Αρχικό υπόλοιπο για ":account"', - 'liability_credit_description' => 'Πίστωση υποχρέωσης για ":account"', - 'interest_calc_' => 'άγνωστο', - 'interest_calc_daily' => 'Ανά ημέρα', - 'interest_calc_monthly' => 'Ανά μήνα', - 'interest_calc_yearly' => 'Ανά έτος', - 'interest_calc_weekly' => 'Ανά εβδομάδα', - 'interest_calc_half-year' => 'Ανά εξάμηνο', - 'interest_calc_quarterly' => 'Ανά τρίμηνο', - 'initial_balance_account' => 'Αρχικό υπόλοιπο του λογαριασμού :account', - 'list_options' => 'Επιλογές λίστας', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'Έχετε :count ανενεργό λογαριασμό (σε αρχειοθέτηση), τον οποίο μπορείτε να δείτε σε αυτή τη ξεχωριστή σελίδα.|Έχετε :count ανενεργούς λογαριασμούς (σε αρχειοθέτηση), τους οποίους μπορείτε να δείτε σε αυτή τη ξεχωριστή σελίδα.', + 'all_accounts_inactive' => 'Αυτοί είναι οι ανενεργοί λογαριασμοί σας.', + 'active_account_link' => 'Αυτός ο σύνδεσμος πηγαίνει πίσω στους ενεργούς λογαριασμούς σας.', + 'account_missing_transaction' => 'Ο λογαριασμός #:id (":name") δεν μπορεί να προβληθεί άμεσα, αλλά και το Firefly δεν έχει πληροφορίες ανακατεύθυνσης.', + 'cc_monthly_payment_date_help' => 'Επιλέξτε οποιοδήποτε έτος και μήνα, θα αγνοηθούν ούτως ή άλλως. Μόνο η επιλογή ημέρας του μήνα είναι σχετική.', + 'details_for_asset' => 'Λεπτομέρειες για τον λογαριασμό κεφαλαίου ":name"', + 'details_for_expense' => 'Λεπτομέρειες για το λογαριασμό δαπανών ":name"', + 'details_for_revenue' => 'Λεπτομέρειες για τον λογαριασμό εσόδων ":name"', + 'details_for_cash' => 'Λεπτομέρειες για to λογαριασμό μετρητών ":name"', + 'store_new_asset_account' => 'Αποθήκευση νέου λογαριασμού κεφαλαίου', + 'store_new_expense_account' => 'Αποθήκευση νέου λογαριασμού δαπανών', + 'store_new_revenue_account' => 'Αποθήκευση νέου λογαριασμού εσόδων', + 'edit_asset_account' => 'Επεξεργασία του κεφαλαιακού λογαριασμού ":name"', + 'edit_expense_account' => 'Επεξεργασία του λογαριασμού δαπανών ":name"', + 'edit_revenue_account' => 'Επεξεργασία λογαριασμού εσόδων ":name"', + 'delete_asset_account' => 'Διαγραφή του κεφαλαιακού λογαριασμού ":name"', + 'delete_expense_account' => 'Διαγραφή του λογαριασμού δαπανών ":name"', + 'delete_revenue_account' => 'Διαγραφή λογαριασμού εσόδων ":name"', + 'delete_liabilities_account' => 'Διαγραφή υποχρέωσης ":name"', + 'asset_deleted' => 'Επιτυχής διαγραφή του κεφαλαιακού λογαριασμού ":name"', + 'account_deleted' => 'Επιτυχής διαγραφή του λογαριασμού ":name"', + 'expense_deleted' => 'Επιτυχής διαγραφή του λογαριασμού δαπανών ":name"', + 'revenue_deleted' => 'Επιτυχής διαγραφή του λογαριασμού εσόδων ":name"', + 'update_asset_account' => 'Ενημέρωση λογαριασμού κεφαλαίου', + 'update_undefined_account' => 'Ενημέρωση λογαριασμού', + 'update_liabilities_account' => 'Ενημέρωση υποχρέωσης', + 'update_expense_account' => 'Ενημέρωση λογαριασμού δαπανών', + 'update_revenue_account' => 'Ενημέρωση λογαριασμού εσόδων', + 'make_new_asset_account' => 'Δημιουργία νέου λογαριασμού κεφαλαίου', + 'make_new_expense_account' => 'Δημιουργία νέου λογαριασμού δαπανών', + 'make_new_revenue_account' => 'Δημιουργία νέου λογαριασμού εσόδων', + 'make_new_liabilities_account' => 'Δημιουργία νέας υποχρέωσης', + 'asset_accounts' => 'Κεφάλαια', + 'undefined_accounts' => 'Λογαριασμοί', + 'asset_accounts_inactive' => 'Λογαριασμοί κεφαλαίου (ανενεργοί)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Δαπάνες', + 'expense_accounts_inactive' => 'Λογαριασμοί δαπανών (ανενεργοί)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Έσοδα', + 'revenue_accounts_inactive' => 'Λογαριασμοί εσόδων (ανενεργοί)', + 'cash_accounts' => 'Μετρητά', + 'Cash account' => 'Λογαριασμός μετρητών', + 'liabilities_accounts' => 'Υποχρεώσεις', + 'liabilities_accounts_inactive' => 'Υποχρεώσεις (ανενεργές)', + 'reconcile_account' => 'Τακτοποίηση λογαριασμού ":account"', + 'overview_of_reconcile_modal' => 'Επισκόπηση τακτοποίησης', + 'delete_reconciliation' => 'Διαγραφή τακτοποίησης', + 'update_reconciliation' => 'Ενημέρωση τακτοποίησης', + 'amount_cannot_be_zero' => 'Το ποσό δεν μπορεί να είναι μηδέν', + 'end_of_reconcile_period' => 'Τέλος περιόδου προς τακτοποίηση :period', + 'start_of_reconcile_period' => 'Έναρξη περιόδου προς τακτοποίηση :period', + 'start_balance' => 'Αρχικό υπόλοιπο', + 'end_balance' => 'Τελικό υπόλοιπο', + 'update_balance_dates_instruction' => 'Αντιστοιχίστε τα παραπάνω ποσά και ημερομηνίες με την τραπεζική σας κατάσταση και πατήστε "Έναρξη τακτοποίησης"', + 'select_transactions_instruction' => 'Επιλέξτε τις συναλλαγές που εμφανίζονται στην τραπεζική σας κατάσταση.', + 'select_range_and_balance' => 'Ελέγξτε πρώτα το χρονικό διάστημα καθώς και τα υπόλοιπα. Στη συνέχεια πατήστε "Έναρξη τακτοποίησης"', + 'date_change_instruction' => 'Εάν αλλάξετε τώρα το χρονικό διάστημα, θα χαθεί ότι είχατε εισάγει.', + 'update_selection' => 'Ενημέρωση επιλογής', + 'store_reconcile' => 'Αποθήκευση τακτοποίησης', + 'reconciliation_transaction' => 'Συναλλαγή τακτοποίησης', + 'Reconciliation' => 'Τακτοποίηση', + 'reconciliation' => 'Τακτοποίηση', + 'reconcile_options' => 'Επιλογές τακτοποίησης', + 'reconcile_range' => 'Εύρος τακτοποίησης', + 'start_reconcile' => 'Έναρξη τακτοποίησης', + 'cash_account_type' => 'Μετρητά', + 'cash' => 'μετρητά', + 'cant_find_redirect_account' => 'Το Firefly III προσπάθησε να σας ανακατευθύνει αλλά δεν κατάφερε. Συγνώμη για αυτό. Πίσω στην αρχική.', + 'account_type' => 'Τύπος λογαριασμού', + 'save_transactions_by_moving' => 'Αποθηκεύστε αυτή τη συναλλαγή μετακινώντας την σε ένα άλλο λογαριασμό:|Αποθηκεύστε αυτές τις συναλλαγές μετακινώντας τις σε ένα άλλο λογαριασμό:', + 'save_transactions_by_moving_js' => 'Δεν υπάρχουν συναλλαγές|Αποθηκεύστε αυτή τη συναλλαγή μετακινώντας την σε άλλο λογαριασμό|Αποθηκεύστε αυτές τις συναλλαγές μετακινώντας τις σε άλλο λογαριασμό.', + 'stored_new_account' => 'Ο νέος λογαριασμός ":name" αποθηκεύτηκε!', + 'stored_new_account_js' => 'Ο νέος λογαριασμός "{name}" αποθηκεύτηκε!', + 'updated_account' => 'Ενημερώθηκε ο λογαριασμός ":name"', + 'updated_account_js' => 'Ενημερώθηκε ο λογαριασμός "{title}".', + 'credit_card_options' => 'Επιλογές πιστωτικής κάρτας', + 'no_transactions_account' => 'Δεν υπάρχουν συναλλαγές (αυτήν την περίοδο) για τον λογαριασμό κεφαλαίου ":name".', + 'no_transactions_period' => 'Δεν υπάρχουν συναλλαγές (αυτήν την περίοδο).', + 'no_data_for_chart' => 'Δεν υπάρχουν αρκετές πληροφορίες (ακόμα) για να δημιουργηθεί αυτό το διάγραμμα.', + 'select_at_least_one_account' => 'Παρακαλώ επιλέξτε τουλάχιστον ένα λογαριασμό κεφαλαίου', + 'select_at_least_one_category' => 'Παρακαλώ επιλέξτε τουλάχιστον μια κατηγορία', + 'select_at_least_one_budget' => 'Επιλέξτε τουλάχιστον έναν προϋπολογισμό', + 'select_at_least_one_tag' => 'Παρακαλώ επιλέξτε τουλάχιστον μια ετικέτα', + 'select_at_least_one_expense' => 'Επιλέξτε τουλάχιστον έναν συνδυασμό λογαριασμών δαπανών / εσόδων. Εάν δεν έχετε (η λίστα είναι κενή) αυτή η αναφορά δεν είναι διαθέσιμη.', + 'account_default_currency' => 'Αυτό θα είναι το προεπιλεγμένο νόμισμα που σχετίζεται με αυτό το λογαριασμό.', + 'reconcile_has_more' => 'Το καθολικό στο Firefly III έχει περισσότερα χρήματα από όσα εμφανίζει η κατάσταση της τράπεζας. Υπάρχουν πολλές επιλογές. Επιλέξτε τι θέλετε να κάνετε. Στη συνέχεια πατήστε "Επιβεβαίωση τακτοποίησης".', + 'reconcile_has_less' => 'Το καθολικό στο Firefly III έχει λιγότερα χρήματα από όσα εμφανίζει η κατάσταση της τράπεζας. Υπάρχουν πολλές επιλογές. Επιλέξτε τι θέλετε να κάνετε. Στη συνέχεια πατήστε "Επιβεβαίωση τακτοποίησης".', + 'reconcile_is_equal' => 'Το καθολικό στο Firefly III ταιριάζει με την κατάσταση της τράπεζας. Δεν υπάρχει τίποτα να κάνετε. Πατήστε "Επιβεβαίωση τακτοποίησης" για επιβεβαίωση.', + 'create_pos_reconcile_transaction' => 'Εκκαθαρίστε τις επιλεγμένες συναλλαγές και δημιουργήστε μια διόρθωση προσθέτοντας :amount σε αυτό το λογαριασμό κεφαλαίου.', + 'create_neg_reconcile_transaction' => 'Εκκαθαρίστε τις επιλεγμένες συναλλαγές και δημιουργήστε μια διόρθωση αφαιρώντας :amount από αυτό το λογαριασμό κεφαλαίου.', + 'reconcile_do_nothing' => 'Σβήστε τις επιλεγμένες συναλλαγές, αλλά χωρίς διόρθωση.', + 'reconcile_go_back' => 'Μπορείτε να επεξεργαστείτε ή να διαγράψετε μια διόρθωση αργότερα.', + 'must_be_asset_account' => 'Μπορείτε να κάνετε τακτοποίηση μόνο σε λογαριασμούς κεφαλαίου', + 'reconciliation_stored' => 'Η τακτοποίηση αποθηκεύτηκε', + 'reconciliation_error' => 'Λόγω σφάλματος, οι συναλλαγές επισημάνθηκαν ως τακτοποιημένες αλλά η διόρθωση δεν έχει αποθηκευτεί: :error.', + 'reconciliation_transaction_title' => 'Τακτοποίηση (:from σε :to)', + 'sum_of_reconciliation' => 'Άθροισμα της τακτοποίησης', + 'reconcile_this_account' => 'Τακτοποίηση αυτού του λογαριασμού', + 'reconcile' => 'Τακτοποίηση', + 'show' => 'Εμφάνιση', + 'confirm_reconciliation' => 'Επιβεβαίωση τακτοποίησης', + 'submitted_start_balance' => 'Υποβλήθηκε το αρχικό υπόλοιπο', + 'selected_transactions' => 'Επιλεγμένες συναλλαγές (:count)', + 'already_cleared_transactions' => 'Συναλλαγές που έχουν ήδη ελεγχθεί (:count)', + 'submitted_end_balance' => 'Υποβλήθηκε το τελικό υπόλοιπο', + 'initial_balance_description' => 'Αρχικό υπόλοιπο για ":account"', + 'liability_credit_description' => 'Πίστωση υποχρέωσης για ":account"', + 'interest_calc_' => 'άγνωστο', + 'interest_calc_daily' => 'Ανά ημέρα', + 'interest_calc_monthly' => 'Ανά μήνα', + 'interest_calc_yearly' => 'Ανά έτος', + 'interest_calc_weekly' => 'Ανά εβδομάδα', + 'interest_calc_half-year' => 'Ανά εξάμηνο', + 'interest_calc_quarterly' => 'Ανά τρίμηνο', + 'initial_balance_account' => 'Αρχικό υπόλοιπο του λογαριασμού :account', + 'list_options' => 'Επιλογές λίστας', // categories: - 'new_category' => 'Νέα κατηγορία', - 'create_new_category' => 'Δημιουργήστε νέα κατηγορία', - 'without_category' => 'Χωρίς κατηγορία', - 'update_category' => 'Ενημέρωση κατηγορίας', - 'updated_category' => 'Ενημερώθηκε η κατηγορία ":name"', - 'categories' => 'Κατηγορίες', - 'edit_category' => 'Επεξεργασία κατηγορίας: ":name"', - 'no_category' => '(χωρίς κατηγορία)', - 'unknown_category_plain' => 'No category', - 'category' => 'Κατηγορία', - 'delete_category' => 'Διαγραφή κατηγορίας":name"', - 'deleted_category' => 'Διεγράφη η κατηγορία ":name"', - 'store_category' => 'Αποθήκευση νέας κατηγορίας', - 'stored_category' => 'Αποθηκεύτηκε η νέα κατηγορία ":name"', - 'without_category_between' => 'Χωρίς κατηγορία μεταξύ :start και :end', + 'new_category' => 'Νέα κατηγορία', + 'create_new_category' => 'Δημιουργήστε νέα κατηγορία', + 'without_category' => 'Χωρίς κατηγορία', + 'update_category' => 'Ενημέρωση κατηγορίας', + 'updated_category' => 'Ενημερώθηκε η κατηγορία ":name"', + 'categories' => 'Κατηγορίες', + 'edit_category' => 'Επεξεργασία κατηγορίας: ":name"', + 'no_category' => '(χωρίς κατηγορία)', + 'unknown_category_plain' => 'No category', + 'category' => 'Κατηγορία', + 'delete_category' => 'Διαγραφή κατηγορίας":name"', + 'deleted_category' => 'Διεγράφη η κατηγορία ":name"', + 'store_category' => 'Αποθήκευση νέας κατηγορίας', + 'stored_category' => 'Αποθηκεύτηκε η νέα κατηγορία ":name"', + 'without_category_between' => 'Χωρίς κατηγορία μεταξύ :start και :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Ενημέρωση ανάληψης', - 'update_deposit' => 'Ενημέρωση κατάθεσης', - 'update_transaction' => 'Ενημέρωση συναλλαγής', - 'update_transfer' => 'Ενημέρωση μεταφοράς', - 'updated_withdrawal' => 'Ενημερώθηκε η ανάληψη ":description"', - 'updated_deposit' => 'Ενημερώθηκε η κατάθεση ":description"', - 'updated_transfer' => 'Ενημερώθηκε η μεταφορά ":description"', - 'no_changes_withdrawal' => 'Η ανάληψη ":description" δεν άλλαξε.', - 'no_changes_deposit' => 'Η κατάθεση ":description" δεν άλλαξε.', - 'no_changes_transfer' => 'Η μεταφορά ":description" δεν άλλαξε.', - 'delete_withdrawal' => 'Διαγραφή ανάληψης ":description"', - 'delete_deposit' => 'Διαγραφή κατάθεσης ":description"', - 'delete_transfer' => 'Διαγραφή μεταφοράς ":description"', - 'deleted_withdrawal' => 'Επιτυχής διαγραφή της ανάληψης ":description"', - 'deleted_deposit' => 'Επιτυχής διαγραφή της κατάθεσης ":description"', - 'deleted_transfer' => 'Επιτυχής διαγραφή της μεταφοράς ":description"', - 'deleted_reconciliation' => 'Επιτυχής διαγραφή της τακτοποιημένης συναλλαγής ":description"', - 'stored_journal' => 'Δημιουργήθηκε επιτυχώς η νέα συναλλαγή ":description"', - 'stored_journal_no_descr' => 'Δημιουργήθηκε επιτυχώς η νέα συναλλαγή', - 'updated_journal_no_descr' => 'Ενημερώθηκε επιτυχώς η συναλλαγή σας', - 'select_transactions' => 'Επιλέξτε συναλλαγές', - 'rule_group_select_transactions' => 'Εφαρμογή ":title" στις συναλλαγές', - 'rule_select_transactions' => 'Εφαρμογή ":title" στις συναλλαγές', - 'stop_selection' => 'Διακοπή επιλογής συναλλαγών', - 'reconcile_selected' => 'Τακτοποίηση', - 'mass_delete_journals' => 'Διαγραφή ενός πλήθους συναλλαγών', - 'mass_edit_journals' => 'Επεξεργασία ενός πλήθους συναλλαγών', - 'mass_bulk_journals' => 'Μαζική επεξεργασία ενός πλήθους συναλλαγών', - 'mass_bulk_journals_explain' => 'Αυτή η φόρμα σάς επιτρέπει να αλλάξετε τις ιδιότητες των συναλλαγών που παρατίθενται παρακάτω με μία μαζική ενημέρωση. Όλες οι συναλλαγές στον πίνακα θα ενημερωθούν όταν αλλάξετε τις παραμέτρους που βλέπετε εδώ.', - 'part_of_split' => 'Αυτή η συναλλαγή αποτελεί μέρος μιας διαχωρισμένης συναλλαγής. Εάν δεν έχετε επιλέξει όλους τις διαχωρισμούς, ενδέχεται να καταλήξετε να αλλάξετε μόνο τη μισή συναλλαγή.', - 'bulk_set_new_values' => 'Χρησιμοποιήστε τις παρακάτω εισόδους στοιχείων για να ορίσετε νέες τιμές. Εάν τα αφήσετε κενά, θα γίνουν κενά για όλα. Επίσης, σημειώστε ότι μόνο οι αναλήψεις θα λάβουν έναν προϋπολογισμό.', - 'no_bulk_category' => 'Μην ενημερώσεις την κατηγορία', - 'no_bulk_budget' => 'Μην ενημερώσεις τον προϋπολογισμό', - 'no_bulk_tags' => 'Μην ενημερώσεις τις ετικέτες', - 'replace_with_these_tags' => 'Αντικατάσταση με αυτές τις ετικέτες', - 'append_these_tags' => 'Προσθήκη των ετικετών', - 'mass_edit' => 'Μεμονωμένη επεξεργασία της επιλογής', - 'bulk_edit' => 'Μαζική επεξεργασία της επιλογής', - 'mass_delete' => 'Διαγραφή επιλεγμένων', - 'cannot_edit_other_fields' => 'Δεν μπορείτε να επεξεργαστείτε μαζικά άλλα πεδία εκτός από αυτά εδώ, γιατί δεν υπάρχει χώρος για να εμφανιστούν. Ακολουθήστε τον σύνδεσμο και επεξεργαστείτε τα μεμονωμένα, αν θέλετε να επεξεργαστείτε αυτά τα πεδία.', - 'cannot_change_amount_reconciled' => 'Δεν μπορείτε να αλλάξετε το ποσό σε τακτοποιημένες συναλλαγές.', - 'no_budget' => '(χωρίς προϋπολογισμό)', - 'no_bill' => '(χωρίς πάγιο έξοδο)', - 'account_per_budget' => 'Λογαριασμός ανά προϋπολογισμό', - 'account_per_category' => 'Λογαριασμοί ανά κατηγορία', - 'create_new_object' => 'Δημιουργία', - 'empty' => '(κενό)', - 'all_other_budgets' => '(όλοι οι άλλοι προϋπολογισμοί)', - 'all_other_accounts' => '(όλοι οι άλλοι λογαριασμοί)', - 'expense_per_source_account' => 'Δαπάνες ανά λογαριασμό προέλευσης', - 'expense_per_destination_account' => 'Δαπάνες ανά λογαριασμό προορισμού', - 'income_per_destination_account' => 'Έσοδα ανά λογαριασμό προορισμού', - 'spent_in_specific_category' => 'Δαπάνες στην κατηγορία ":category"', - 'earned_in_specific_category' => 'Κέρδη στην κατηγορία ":category"', - 'spent_in_specific_tag' => 'Δαπάνες με ετικέτα ":tag"', - 'earned_in_specific_tag' => 'Κέρδη με ετικέτα ":tag"', - 'income_per_source_account' => 'Έσοδα ανά λογαριασμό προέλευσης', - 'average_spending_per_destination' => 'Μέση δαπάνη ανά λογαριασμό προορισμού', - 'average_spending_per_source' => 'Μέση δαπάνη ανά λογαριασμό προέλευσης', - 'average_earning_per_source' => 'Μέσο κέρδος ανά λογαριασμό προέλευσης', - 'average_earning_per_destination' => 'Μέσο κέρδος ανά λογαριασμό προορισμού', - 'account_per_tag' => 'Λογαριασμός ανά ετικέτα', - 'tag_report_expenses_listed_once' => 'Οι δαπάνες και τα έσοδα δεν αναφέρονται ποτέ δύο φορές. Εάν μια συναλλαγή έχει πολλές ετικέτες, μπορεί να εμφανιστεί μόνο κάτω από μία από τις ετικέτες της. Αυτή η λίστα μπορεί να φαίνεται ότι έχει ελλιπή δεδομένα, αλλά τα ποσά θα είναι σωστά.', - 'double_report_expenses_charted_once' => 'Οι δαπάνες και τα έσοδα δεν εμφανίζονται ποτέ δύο φορές. Εάν μια συναλλαγή έχει πολλές ετικέτες, μπορεί να εμφανιστεί μόνο κάτω από μία από τις ετικέτες της. Αυτό το διάγραμμα ενδέχεται να φαίνεται ότι έχει ελλιπή δεδομένα, αλλά τα ποσά θα είναι σωστά.', - 'tag_report_chart_single_tag' => 'Αυτό το διάγραμμα ισχύει για μια ετικέτα. Εάν μια συναλλαγή έχει πολλές ετικέτες, αυτό που βλέπετε εδώ μπορεί να αντικατοπτρίζεται και στα διαγράμματα άλλων ετικετών.', - 'tag' => 'Ετικέτα', - 'no_budget_squared' => '(χωρίς προϋπολογισμό)', - 'perm-delete-many' => 'Η διαγραφή πολλών στοιχείων με μια κίνηση μπορεί να έχει απροσδόκητα αποτελέσματα. Παρακαλώ προσέξτε. Μπορείτε να διαγράψετε μέρος μιας διαχωρισμένης συναλλαγής από αυτήν τη σελίδα, οπότε δώστε προσοχή.', - 'mass_deleted_transactions_success' => 'Διαγράφηκε :count συναλλαγή.|Διαγράφηκαν :count συναλλαγές.', - 'mass_edited_transactions_success' => 'Ενημερώθηκε :count συναλλαγή.|Ενημερώθηκαν :count συναλλαγές.', - 'opt_group_' => '(χωρίς τύπο λογαριασμού)', - 'opt_group_no_account_type' => '(χωρίς τύπο λογαριασμού)', - 'opt_group_defaultAsset' => 'Βασικοί λογαριασμοί κεφαλαίου', - 'opt_group_savingAsset' => 'Λογαριασμοί αποταμίευσης', - 'opt_group_sharedAsset' => 'Κοινοί λογαριασμοί κεφαλαίου', - 'opt_group_ccAsset' => 'Πιστωτικές κάρτες', - 'opt_group_cashWalletAsset' => 'Πορτοφόλια μετρητών', - 'opt_group_expense_account' => 'Λογαριασμοί δαπανών', - 'opt_group_revenue_account' => 'Λογαριασμοί εσόδων', - 'opt_group_l_Loan' => 'Υποχρέωση: Δάνειο', - 'opt_group_cash_account' => 'Λογαριασμός μετρητών', - 'opt_group_l_Debt' => 'Υποχρέωση: Χρέος', - 'opt_group_l_Mortgage' => 'Υποχρέωση: Υποθήκη', - 'opt_group_l_Credit card' => 'Υποχρέωση: Πιστωτική κάρτα', - 'notes' => 'Σημειώσεις', - 'unknown_journal_error' => 'Δεν ήταν δυνατή η αποθήκευση της συναλλαγής. Ελέγξτε τα αρχεία καταγραφής.', - 'attachment_not_found' => 'Αυτό το συνημμένο δεν βρέθηκε.', - 'journal_link_bill' => 'Αυτή η συναλλαγή συνδέεται με το πάγιο έξοδο :name. Για να καταργήσετε τη σύνδεση, καταργήστε την επιλογή στο κουτάκι. Χρησιμοποιήστε κανόνες για να το συνδέσετε με ένα άλλο πάγιο έξοδο.', - 'transaction_stored_link' => 'Η συναλλαγή #{ID} ("{title}") έχει αποθηκευτεί.', - 'transaction_new_stored_link' => 'Η συναλλαγή #{ID} έχει αποθηκευτεί.', - 'transaction_updated_link' => 'Η συναλλαγή #{ID} ("{title}") έχει ενημερωθεί.', - 'transaction_updated_no_changes' => 'Η συναλλαγή #{ID} ("{title}") παρέμεινε χωρίς καμία αλλαγή.', - 'first_split_decides' => 'Ο πρώτος διαχωρισμός καθορίζει την τιμή αυτού του πεδίου', - 'first_split_overrules_source' => 'Ο πρώτος διαχωρισμός ενδέχεται να παρακάμψει τον λογαριασμό προέλευσης', - 'first_split_overrules_destination' => 'Ο πρώτος διαχωρισμός ενδέχεται να παρακάμψει τον λογαριασμό προορισμού', - 'spent_x_of_y' => 'Δαπανήθηκαν {amount} από {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Ενημέρωση ανάληψης', + 'update_deposit' => 'Ενημέρωση κατάθεσης', + 'update_transaction' => 'Ενημέρωση συναλλαγής', + 'update_transfer' => 'Ενημέρωση μεταφοράς', + 'updated_withdrawal' => 'Ενημερώθηκε η ανάληψη ":description"', + 'updated_deposit' => 'Ενημερώθηκε η κατάθεση ":description"', + 'updated_transfer' => 'Ενημερώθηκε η μεταφορά ":description"', + 'no_changes_withdrawal' => 'Η ανάληψη ":description" δεν άλλαξε.', + 'no_changes_deposit' => 'Η κατάθεση ":description" δεν άλλαξε.', + 'no_changes_transfer' => 'Η μεταφορά ":description" δεν άλλαξε.', + 'delete_withdrawal' => 'Διαγραφή ανάληψης ":description"', + 'delete_deposit' => 'Διαγραφή κατάθεσης ":description"', + 'delete_transfer' => 'Διαγραφή μεταφοράς ":description"', + 'deleted_withdrawal' => 'Επιτυχής διαγραφή της ανάληψης ":description"', + 'deleted_deposit' => 'Επιτυχής διαγραφή της κατάθεσης ":description"', + 'deleted_transfer' => 'Επιτυχής διαγραφή της μεταφοράς ":description"', + 'deleted_reconciliation' => 'Επιτυχής διαγραφή της τακτοποιημένης συναλλαγής ":description"', + 'stored_journal' => 'Δημιουργήθηκε επιτυχώς η νέα συναλλαγή ":description"', + 'stored_journal_js' => 'Δημιουργήθηκε επιτυχώς η νέα συναλλαγή "%{description}"', + 'stored_journal_no_descr' => 'Δημιουργήθηκε επιτυχώς η νέα συναλλαγή', + 'updated_journal_no_descr' => 'Ενημερώθηκε επιτυχώς η συναλλαγή σας', + 'select_transactions' => 'Επιλέξτε συναλλαγές', + 'rule_group_select_transactions' => 'Εφαρμογή ":title" στις συναλλαγές', + 'rule_select_transactions' => 'Εφαρμογή ":title" στις συναλλαγές', + 'stop_selection' => 'Διακοπή επιλογής συναλλαγών', + 'reconcile_selected' => 'Τακτοποίηση', + 'mass_delete_journals' => 'Διαγραφή ενός πλήθους συναλλαγών', + 'mass_edit_journals' => 'Επεξεργασία ενός πλήθους συναλλαγών', + 'mass_bulk_journals' => 'Μαζική επεξεργασία ενός πλήθους συναλλαγών', + 'mass_bulk_journals_explain' => 'Αυτή η φόρμα σάς επιτρέπει να αλλάξετε τις ιδιότητες των συναλλαγών που παρατίθενται παρακάτω με μία μαζική ενημέρωση. Όλες οι συναλλαγές στον πίνακα θα ενημερωθούν όταν αλλάξετε τις παραμέτρους που βλέπετε εδώ.', + 'part_of_split' => 'Αυτή η συναλλαγή αποτελεί μέρος μιας διαχωρισμένης συναλλαγής. Εάν δεν έχετε επιλέξει όλους τις διαχωρισμούς, ενδέχεται να καταλήξετε να αλλάξετε μόνο τη μισή συναλλαγή.', + 'bulk_set_new_values' => 'Χρησιμοποιήστε τις παρακάτω εισόδους στοιχείων για να ορίσετε νέες τιμές. Εάν τα αφήσετε κενά, θα γίνουν κενά για όλα. Επίσης, σημειώστε ότι μόνο οι αναλήψεις θα λάβουν έναν προϋπολογισμό.', + 'no_bulk_category' => 'Μην ενημερώσεις την κατηγορία', + 'no_bulk_budget' => 'Μην ενημερώσεις τον προϋπολογισμό', + 'no_bulk_tags' => 'Μην ενημερώσεις τις ετικέτες', + 'replace_with_these_tags' => 'Αντικατάσταση με αυτές τις ετικέτες', + 'append_these_tags' => 'Προσθήκη των ετικετών', + 'mass_edit' => 'Μεμονωμένη επεξεργασία της επιλογής', + 'bulk_edit' => 'Μαζική επεξεργασία της επιλογής', + 'mass_delete' => 'Διαγραφή επιλεγμένων', + 'cannot_edit_other_fields' => 'Δεν μπορείτε να επεξεργαστείτε μαζικά άλλα πεδία εκτός από αυτά εδώ, γιατί δεν υπάρχει χώρος για να εμφανιστούν. Ακολουθήστε τον σύνδεσμο και επεξεργαστείτε τα μεμονωμένα, αν θέλετε να επεξεργαστείτε αυτά τα πεδία.', + 'cannot_change_amount_reconciled' => 'Δεν μπορείτε να αλλάξετε το ποσό σε τακτοποιημένες συναλλαγές.', + 'no_budget' => '(χωρίς προϋπολογισμό)', + 'no_bill' => '(χωρίς πάγιο έξοδο)', + 'account_per_budget' => 'Λογαριασμός ανά προϋπολογισμό', + 'account_per_category' => 'Λογαριασμοί ανά κατηγορία', + 'create_new_object' => 'Δημιουργία', + 'empty' => '(κενό)', + 'all_other_budgets' => '(όλοι οι άλλοι προϋπολογισμοί)', + 'all_other_accounts' => '(όλοι οι άλλοι λογαριασμοί)', + 'expense_per_source_account' => 'Δαπάνες ανά λογαριασμό προέλευσης', + 'expense_per_destination_account' => 'Δαπάνες ανά λογαριασμό προορισμού', + 'income_per_destination_account' => 'Έσοδα ανά λογαριασμό προορισμού', + 'spent_in_specific_category' => 'Δαπάνες στην κατηγορία ":category"', + 'earned_in_specific_category' => 'Κέρδη στην κατηγορία ":category"', + 'spent_in_specific_tag' => 'Δαπάνες με ετικέτα ":tag"', + 'earned_in_specific_tag' => 'Κέρδη με ετικέτα ":tag"', + 'income_per_source_account' => 'Έσοδα ανά λογαριασμό προέλευσης', + 'average_spending_per_destination' => 'Μέση δαπάνη ανά λογαριασμό προορισμού', + 'average_spending_per_source' => 'Μέση δαπάνη ανά λογαριασμό προέλευσης', + 'average_earning_per_source' => 'Μέσο κέρδος ανά λογαριασμό προέλευσης', + 'average_earning_per_destination' => 'Μέσο κέρδος ανά λογαριασμό προορισμού', + 'account_per_tag' => 'Λογαριασμός ανά ετικέτα', + 'tag_report_expenses_listed_once' => 'Οι δαπάνες και τα έσοδα δεν αναφέρονται ποτέ δύο φορές. Εάν μια συναλλαγή έχει πολλές ετικέτες, μπορεί να εμφανιστεί μόνο κάτω από μία από τις ετικέτες της. Αυτή η λίστα μπορεί να φαίνεται ότι έχει ελλιπή δεδομένα, αλλά τα ποσά θα είναι σωστά.', + 'double_report_expenses_charted_once' => 'Οι δαπάνες και τα έσοδα δεν εμφανίζονται ποτέ δύο φορές. Εάν μια συναλλαγή έχει πολλές ετικέτες, μπορεί να εμφανιστεί μόνο κάτω από μία από τις ετικέτες της. Αυτό το διάγραμμα ενδέχεται να φαίνεται ότι έχει ελλιπή δεδομένα, αλλά τα ποσά θα είναι σωστά.', + 'tag_report_chart_single_tag' => 'Αυτό το διάγραμμα ισχύει για μια ετικέτα. Εάν μια συναλλαγή έχει πολλές ετικέτες, αυτό που βλέπετε εδώ μπορεί να αντικατοπτρίζεται και στα διαγράμματα άλλων ετικετών.', + 'tag' => 'Ετικέτα', + 'no_budget_squared' => '(χωρίς προϋπολογισμό)', + 'perm-delete-many' => 'Η διαγραφή πολλών στοιχείων με μια κίνηση μπορεί να έχει απροσδόκητα αποτελέσματα. Παρακαλώ προσέξτε. Μπορείτε να διαγράψετε μέρος μιας διαχωρισμένης συναλλαγής από αυτήν τη σελίδα, οπότε δώστε προσοχή.', + 'mass_deleted_transactions_success' => 'Διαγράφηκε :count συναλλαγή.|Διαγράφηκαν :count συναλλαγές.', + 'mass_edited_transactions_success' => 'Ενημερώθηκε :count συναλλαγή.|Ενημερώθηκαν :count συναλλαγές.', + 'opt_group_' => '(χωρίς τύπο λογαριασμού)', + 'opt_group_no_account_type' => '(χωρίς τύπο λογαριασμού)', + 'opt_group_defaultAsset' => 'Βασικοί λογαριασμοί κεφαλαίου', + 'opt_group_savingAsset' => 'Λογαριασμοί αποταμίευσης', + 'opt_group_sharedAsset' => 'Κοινοί λογαριασμοί κεφαλαίου', + 'opt_group_ccAsset' => 'Πιστωτικές κάρτες', + 'opt_group_cashWalletAsset' => 'Πορτοφόλια μετρητών', + 'opt_group_expense_account' => 'Λογαριασμοί δαπανών', + 'opt_group_revenue_account' => 'Λογαριασμοί εσόδων', + 'opt_group_l_Loan' => 'Υποχρέωση: Δάνειο', + 'opt_group_cash_account' => 'Λογαριασμός μετρητών', + 'opt_group_l_Debt' => 'Υποχρέωση: Χρέος', + 'opt_group_l_Mortgage' => 'Υποχρέωση: Υποθήκη', + 'opt_group_l_Credit card' => 'Υποχρέωση: Πιστωτική κάρτα', + 'notes' => 'Σημειώσεις', + 'unknown_journal_error' => 'Δεν ήταν δυνατή η αποθήκευση της συναλλαγής. Ελέγξτε τα αρχεία καταγραφής.', + 'attachment_not_found' => 'Αυτό το συνημμένο δεν βρέθηκε.', + 'journal_link_bill' => 'Αυτή η συναλλαγή συνδέεται με το πάγιο έξοδο :name. Για να καταργήσετε τη σύνδεση, καταργήστε την επιλογή στο κουτάκι. Χρησιμοποιήστε κανόνες για να το συνδέσετε με ένα άλλο πάγιο έξοδο.', + 'transaction_stored_link' => 'Η συναλλαγή #{ID} ("{title}") έχει αποθηκευτεί.', + 'transaction_new_stored_link' => 'Η συναλλαγή #{ID} έχει αποθηκευτεί.', + 'transaction_updated_link' => 'Η συναλλαγή #{ID} ("{title}") έχει ενημερωθεί.', + 'transaction_updated_no_changes' => 'Η συναλλαγή #{ID} ("{title}") παρέμεινε χωρίς καμία αλλαγή.', + 'first_split_decides' => 'Ο πρώτος διαχωρισμός καθορίζει την τιμή αυτού του πεδίου', + 'first_split_overrules_source' => 'Ο πρώτος διαχωρισμός ενδέχεται να παρακάμψει τον λογαριασμό προέλευσης', + 'first_split_overrules_destination' => 'Ο πρώτος διαχωρισμός ενδέχεται να παρακάμψει τον λογαριασμό προορισμού', + 'spent_x_of_y' => 'Δαπανήθηκαν {amount} από {total}', // new user: - 'welcome' => 'Καλωσήρθατε στο Firefly III!', - 'submit' => 'Υποβολή', - 'submission' => 'Υποβολή', - 'submit_yes_really' => 'Υποβολή (ξέρω τι κάνω)', - 'getting_started' => 'Ξεκινώντας', - 'to_get_started' => 'Είναι ευτυχής μια ακόμη επιτυχημένη εγκατάσταση του Firefly III. Για να ξεκινήσετε με αυτό το εργαλείο, εισαγάγετε το όνομα της τράπεζάς σας και το υπόλοιπο του κύριου τραπεζικού λογαριασμού. Μην ανησυχείτε αν έχετε πολλούς λογαριασμούς. Μπορείτε να τα προσθέσετε αργότερα. Απλά είναι το πρώτο αναγκαίο για να ξεκινήσει η χρήση του Firefly III.', - 'savings_balance_text' => 'Το Firefly III θα δημιουργήσει αυτόματα ένα λογαριασμό αποταμίευσης (ταμιευτήριο) για εσάς. Από προεπιλογή δε θα έχει χρήματα σε αυτό το λογαριασμό, εκτός και αν δώσετε το τρέχον υπόλοιπο στο Firefly III για καταχώρηση.', - 'finish_up_new_user' => 'Αυτό είναι! Μπορείτε να συνεχίσετε πατώντας το κουμπί Υποβολή. Θα μεταφερθείτε στο ευρετήριο του Firefly III.', - 'stored_new_accounts_new_user' => 'Ναι! Οι νέοι λογαριασμοί σας έχουν αποθηκευτεί.', - 'set_preferred_language' => 'Εάν προτιμάτε να χρησιμοποιήσετε το Firefly III σε άλλη γλώσσα, παρακαλούμε να το αναφέρετε εδώ.', - 'language' => 'Γλώσσα', - 'new_savings_account' => ':bank_name αποταμιευτικός λογαριασμός', - 'cash_wallet' => 'Πορτοφόλι μετρητών', - 'currency_not_present' => 'Αν δεν περιλαμβάνεται το νόμισμα που χρησιμοποιείτε, μην ανησυχείτε. Μπορείτε να δημιουργήσετε δικά σας νομίσματα στο Επιλογές > Νομίσματα.', + 'welcome' => 'Καλωσήρθατε στο Firefly III!', + 'submit' => 'Υποβολή', + 'submission' => 'Υποβολή', + 'submit_yes_really' => 'Υποβολή (ξέρω τι κάνω)', + 'getting_started' => 'Ξεκινώντας', + 'to_get_started' => 'Είναι ευτυχής μια ακόμη επιτυχημένη εγκατάσταση του Firefly III. Για να ξεκινήσετε με αυτό το εργαλείο, εισαγάγετε το όνομα της τράπεζάς σας και το υπόλοιπο του κύριου τραπεζικού λογαριασμού. Μην ανησυχείτε αν έχετε πολλούς λογαριασμούς. Μπορείτε να τα προσθέσετε αργότερα. Απλά είναι το πρώτο αναγκαίο για να ξεκινήσει η χρήση του Firefly III.', + 'savings_balance_text' => 'Το Firefly III θα δημιουργήσει αυτόματα ένα λογαριασμό αποταμίευσης (ταμιευτήριο) για εσάς. Από προεπιλογή δε θα έχει χρήματα σε αυτό το λογαριασμό, εκτός και αν δώσετε το τρέχον υπόλοιπο στο Firefly III για καταχώρηση.', + 'finish_up_new_user' => 'Αυτό είναι! Μπορείτε να συνεχίσετε πατώντας το κουμπί Υποβολή. Θα μεταφερθείτε στο ευρετήριο του Firefly III.', + 'stored_new_accounts_new_user' => 'Ναι! Οι νέοι λογαριασμοί σας έχουν αποθηκευτεί.', + 'set_preferred_language' => 'Εάν προτιμάτε να χρησιμοποιήσετε το Firefly III σε άλλη γλώσσα, παρακαλούμε να το αναφέρετε εδώ.', + 'language' => 'Γλώσσα', + 'new_savings_account' => ':bank_name αποταμιευτικός λογαριασμός', + 'cash_wallet' => 'Πορτοφόλι μετρητών', + 'currency_not_present' => 'Αν δεν περιλαμβάνεται το νόμισμα που χρησιμοποιείτε, μην ανησυχείτε. Μπορείτε να δημιουργήσετε δικά σας νομίσματα στο Επιλογές > Νομίσματα.', // home page: - 'transaction_table_description' => 'Ένας πίνακας με τις συναλλαγές σας', - 'opposing_account' => 'Έναντι λογαριασμός', - 'yourAccounts' => 'Οι λογαριασμοί σας', - 'your_accounts' => 'Επισκόπηση λογαριασμού', - 'category_overview' => 'Επισκόπηση κατηγορίας', - 'expense_overview' => 'Επισκόπηση λογαριασμού δαπανών', - 'revenue_overview' => 'Επισκόπηση λογαριασμού εσόδων', - 'budgetsAndSpending' => 'Προϋπολογισμοί και δαπάνες', - 'budgets_and_spending' => 'Προϋπολογισμοί και δαπάνες', - 'go_to_budget' => 'Πηγαίνετε στον προϋπολογισμό "{budget}"', - 'go_to_deposits' => 'Πηγαίνετε στις καταθέσεις', - 'go_to_expenses' => 'Πηγαίνετε στις δαπάνες', - 'savings' => 'Αποταμιεύσεις', - 'newWithdrawal' => 'Νέα δαπάνη', - 'newDeposit' => 'Νέα κατάθεση', - 'newTransfer' => 'Νέα μεταφορά', - 'bills_to_pay' => 'Πάγια έξοδα προς πληρωμή', - 'per_day' => 'Ανά ημέρα', - 'left_to_spend_per_day' => 'Διαθέσιμα προϋπολογισμών ανά ημέρα', - 'bills_paid' => 'Πληρωμένα πάγια έξοδα', - 'custom_period' => 'Προσαρμοσμένη περίοδος', - 'reset_to_current' => 'Επαναφορά στην τρέχουσα περίοδο', - 'select_period' => 'Επιλέξτε περίοδο', + 'transaction_table_description' => 'Ένας πίνακας με τις συναλλαγές σας', + 'opposing_account' => 'Έναντι λογαριασμός', + 'yourAccounts' => 'Οι λογαριασμοί σας', + 'your_accounts' => 'Επισκόπηση λογαριασμού', + 'category_overview' => 'Επισκόπηση κατηγορίας', + 'expense_overview' => 'Επισκόπηση λογαριασμού δαπανών', + 'revenue_overview' => 'Επισκόπηση λογαριασμού εσόδων', + 'budgetsAndSpending' => 'Προϋπολογισμοί και δαπάνες', + 'budgets_and_spending' => 'Προϋπολογισμοί και δαπάνες', + 'go_to_budget' => 'Πηγαίνετε στον προϋπολογισμό "{budget}"', + 'go_to_deposits' => 'Πηγαίνετε στις καταθέσεις', + 'go_to_expenses' => 'Πηγαίνετε στις δαπάνες', + 'savings' => 'Αποταμιεύσεις', + 'newWithdrawal' => 'Νέα δαπάνη', + 'newDeposit' => 'Νέα κατάθεση', + 'newTransfer' => 'Νέα μεταφορά', + 'bills_to_pay' => 'Πάγια έξοδα προς πληρωμή', + 'per_day' => 'Ανά ημέρα', + 'left_to_spend_per_day' => 'Διαθέσιμα προϋπολογισμών ανά ημέρα', + 'bills_paid' => 'Πληρωμένα πάγια έξοδα', + 'custom_period' => 'Προσαρμοσμένη περίοδος', + 'reset_to_current' => 'Επαναφορά στην τρέχουσα περίοδο', + 'select_period' => 'Επιλέξτε περίοδο', // menu and titles, should be recycled as often as possible: - 'currency' => 'Νόμισμα', - 'preferences' => 'Προτιμήσεις', - 'logout' => 'Αποσύνδεση', - 'logout_other_sessions' => 'Αποσυνδέσετε όλες τις άλλες συνεδρίες', - 'toggleNavigation' => 'Εναλλαγή περιήγησης', - 'searchPlaceholder' => 'Αναζήτηση...', - 'version' => 'Έκδοση', - 'dashboard' => 'Επισκόπηση', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Διαθέσιμος προϋπολογισμός ({currency})', - 'currencies' => 'Νομίσματα', - 'activity' => 'Δραστηριότητα', - 'usage' => 'Χρήση', - 'accounts' => 'Λογαριασμοί', - 'Asset account' => 'Λογαριασμός κεφαλαίου', - 'Default account' => 'Λογαριασμός κεφαλαίου', - 'Expense account' => 'Λογαριασμός δαπανών', - 'Revenue account' => 'Λογαριασμός εσόδων', - 'Initial balance account' => 'Αρχικό υπόλοιπο λογαριασμού', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Χρέος', - 'account_type_Loan' => 'Δάνειο', - 'account_type_Mortgage' => 'Υποθήκη', - 'account_type_debt' => 'Χρέος', - 'account_type_loan' => 'Δάνειο', - 'account_type_mortgage' => 'Υποθήκη', - 'account_type_Credit card' => 'Πιστωτική κάρτα', - 'credit_card_type_monthlyFull' => 'Εξόφληση κάθε μήνα', - 'liability_direction_credit' => 'Μου οφείλουν αυτό το χρέος σε μένα', - 'liability_direction_debit' => 'Οφείλω αυτό το χρέος σε κάποιον άλλο', - 'liability_direction_credit_short' => 'Μου οφείλουν αυτό το χρέος', - 'liability_direction_debit_short' => 'Οφείλω αυτό το χρέος', - 'liability_direction__short' => 'Άγνωστο', - 'liability_direction_null_short' => 'Άγνωστο', - 'Liability credit' => 'Πίστωση υποχρέωσης', - 'budgets' => 'Προϋπολογισμοί', - 'tags' => 'Ετικέτες', - 'reports' => 'Αναφορές', - 'transactions' => 'Συναλλαγές', - 'expenses' => 'Δαπάνες', - 'income' => 'Έσοδα', - 'transfers' => 'Μεταφορές', - 'moneyManagement' => 'Διαχείριση χρημάτων', - 'money_management' => 'Διαχείριση χρημάτων', - 'tools' => 'Εργαλεία', - 'piggyBanks' => 'Κουμπαράδες', - 'piggy_banks' => 'Κουμπαράδες', - 'amount_x_of_y' => '{current} από {total}', - 'bills' => 'Πάγια έξοδα', - 'withdrawal' => 'Ανάληψη', - 'opening_balance' => 'Υπόλοιπο έναρξης', - 'deposit' => 'Κατάθεση', - 'account' => 'Λογαριασμός', - 'transfer' => 'Μεταφορά', - 'Withdrawal' => 'Ανάληψη', - 'Deposit' => 'Κατάθεση', - 'Transfer' => 'Μεταφορά', - 'bill' => 'Πάγιο έξοδο', - 'yes' => 'Ναι', - 'no' => 'Όχι', - 'amount' => 'Ποσό', - 'overview' => 'Επισκόπηση', - 'saveOnAccount' => 'Εντός του λογαριασμού', - 'unknown' => 'Άγνωστο', - 'monthly' => 'Μηνιαίως', - 'profile' => 'Προφίλ', - 'errors' => 'Σφάλματα', - 'debt_start_date' => 'Ημερομηνία έναρξης χρέους', - 'debt_start_amount' => 'Αρχικό ποσό χρέους', - 'debt_start_amount_help' => 'Είναι πάντα καλύτερα να ορίζετε σε αυτήν την τιμή ένα αρνητικό ποσό. Διαβάστε τις σελίδες βοήθειας (εικονίδιο (?) επάνω δεξιά) για περισσότερες πληροφορίες.', - 'interest_period_help' => 'Αυτό το πεδίο είναι διακοσμητικό και δεν θα υπολογιστεί για εσάς. Όπως φαίνεται, οι τράπεζες είναι αρκετά πονηρές οπότε το Firefly III δεν το βρίσκει ποτέ σωστά.', - 'store_new_liabilities_account' => 'Αποθήκευση νέας υποχρέωσης', - 'edit_liabilities_account' => 'Επεξεργασία υποχρέωσης ":name"', - 'financial_control' => 'Οικονομικός έλεγχος', - 'accounting' => 'Λογιστική', - 'automation' => 'Αυτοματοποίηση', - 'others' => 'Λοιπά', - 'classification' => 'Ταξινόμηση', - 'store_transaction' => 'Αποθήκευση συναλλαγής', + 'currency' => 'Νόμισμα', + 'preferences' => 'Προτιμήσεις', + 'logout' => 'Αποσύνδεση', + 'logout_other_sessions' => 'Αποσυνδέσετε όλες τις άλλες συνεδρίες', + 'toggleNavigation' => 'Εναλλαγή περιήγησης', + 'searchPlaceholder' => 'Αναζήτηση...', + 'version' => 'Έκδοση', + 'dashboard' => 'Επισκόπηση', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Διαθέσιμος προϋπολογισμός ({currency})', + 'currencies' => 'Νομίσματα', + 'activity' => 'Δραστηριότητα', + 'usage' => 'Χρήση', + 'accounts' => 'Λογαριασμοί', + 'Asset account' => 'Λογαριασμός κεφαλαίου', + 'Default account' => 'Λογαριασμός κεφαλαίου', + 'Expense account' => 'Λογαριασμός δαπανών', + 'Revenue account' => 'Λογαριασμός εσόδων', + 'Initial balance account' => 'Αρχικό υπόλοιπο λογαριασμού', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Χρέος', + 'account_type_Loan' => 'Δάνειο', + 'account_type_Mortgage' => 'Υποθήκη', + 'account_type_debt' => 'Χρέος', + 'account_type_loan' => 'Δάνειο', + 'account_type_mortgage' => 'Υποθήκη', + 'account_type_Credit card' => 'Πιστωτική κάρτα', + 'credit_card_type_monthlyFull' => 'Εξόφληση κάθε μήνα', + 'liability_direction_credit' => 'Μου οφείλουν αυτό το χρέος σε μένα', + 'liability_direction_debit' => 'Οφείλω αυτό το χρέος σε κάποιον άλλο', + 'liability_direction_credit_short' => 'Μου οφείλουν αυτό το χρέος', + 'liability_direction_debit_short' => 'Οφείλω αυτό το χρέος', + 'liability_direction__short' => 'Άγνωστο', + 'liability_direction_null_short' => 'Άγνωστο', + 'Liability credit' => 'Πίστωση υποχρέωσης', + 'budgets' => 'Προϋπολογισμοί', + 'tags' => 'Ετικέτες', + 'reports' => 'Αναφορές', + 'transactions' => 'Συναλλαγές', + 'expenses' => 'Δαπάνες', + 'income' => 'Έσοδα', + 'transfers' => 'Μεταφορές', + 'moneyManagement' => 'Διαχείριση χρημάτων', + 'money_management' => 'Διαχείριση χρημάτων', + 'tools' => 'Εργαλεία', + 'piggyBanks' => 'Κουμπαράδες', + 'piggy_banks' => 'Κουμπαράδες', + 'amount_x_of_y' => '{current} από {total}', + 'bills' => 'Πάγια έξοδα', + 'withdrawal' => 'Ανάληψη', + 'opening_balance' => 'Υπόλοιπο έναρξης', + 'deposit' => 'Κατάθεση', + 'account' => 'Λογαριασμός', + 'transfer' => 'Μεταφορά', + 'Withdrawal' => 'Ανάληψη', + 'Deposit' => 'Κατάθεση', + 'Transfer' => 'Μεταφορά', + 'bill' => 'Πάγιο έξοδο', + 'yes' => 'Ναι', + 'no' => 'Όχι', + 'amount' => 'Ποσό', + 'overview' => 'Επισκόπηση', + 'saveOnAccount' => 'Εντός του λογαριασμού', + 'unknown' => 'Άγνωστο', + 'monthly' => 'Μηνιαίως', + 'profile' => 'Προφίλ', + 'errors' => 'Σφάλματα', + 'debt_start_date' => 'Ημερομηνία έναρξης χρέους', + 'debt_start_amount' => 'Αρχικό ποσό χρέους', + 'debt_start_amount_help' => 'Είναι πάντα καλύτερα να ορίζετε σε αυτήν την τιμή ένα αρνητικό ποσό. Διαβάστε τις σελίδες βοήθειας (εικονίδιο (?) επάνω δεξιά) για περισσότερες πληροφορίες.', + 'interest_period_help' => 'Αυτό το πεδίο είναι διακοσμητικό και δεν θα υπολογιστεί για εσάς. Όπως φαίνεται, οι τράπεζες είναι αρκετά πονηρές οπότε το Firefly III δεν το βρίσκει ποτέ σωστά.', + 'store_new_liabilities_account' => 'Αποθήκευση νέας υποχρέωσης', + 'edit_liabilities_account' => 'Επεξεργασία υποχρέωσης ":name"', + 'financial_control' => 'Οικονομικός έλεγχος', + 'accounting' => 'Λογιστική', + 'automation' => 'Αυτοματοποίηση', + 'others' => 'Λοιπά', + 'classification' => 'Ταξινόμηση', + 'store_transaction' => 'Αποθήκευση συναλλαγής', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Προεπιλεγμένη οικονομική αναφορά μεταξύ :start και :end', - 'report_audit' => 'Επισκόπηση ιστορικού συναλλαγών μεταξύ :start και :end', - 'report_category' => 'Αναφορά κατηγορίας μεταξύ :start και :end', - 'report_double' => 'Έκθεση λογαριασμών δαπανών/εσόδων μεταξύ :start και :end', - 'report_budget' => 'Αναφορά προϋπολογισμού μεταξύ :start και :end', - 'report_tag' => 'Αναφορά ετικετών μεταξύ :start και :end', - 'quick_link_reports' => 'Άμεσοι σύνδεσμοι', - 'quick_link_examples' => 'Αυτά είναι μερικά παραδείγματα συνδέσμων για να ξεκινήσετε. Δείτε τις σελίδες βοήθειας στο κουμπί (?) για πληροφορίες σχετικά με όλες τις αναφορές και τις μαγικές λέξεις που μπορείτε να χρησιμοποιήσετε.', - 'quick_link_default_report' => 'Προεπιλεγμένη οικονομική αναφορά', - 'quick_link_audit_report' => 'Επισκόπηση ιστορικού συναλλαγών', - 'report_this_month_quick' => 'Αυτός ο μήνας, όλοι οι λογαριασμοί', - 'report_last_month_quick' => 'Προηγούμενος μήνας, όλοι οι λογαριασμοί', - 'report_this_year_quick' => 'Αυτό το έτος, όλοι οι λογαριασμοί', - 'report_this_fiscal_year_quick' => 'Τρέχων οικονομικό έτος, όλοι οι λογαριασμοί', - 'report_all_time_quick' => 'Για όλο το διάστημα, όλοι οι λογαριασμοί', - 'reports_can_bookmark' => 'Θυμηθείτε ότι οι αναφορές μπορούν να καταχωρηθούν σε σελιδοδείκτες.', - 'incomeVsExpenses' => 'Έσοδα έναντι δαπανών', - 'accountBalances' => 'Υπόλοιπα λογαριασμών', - 'balanceStart' => 'Υπόλοιπο έναρξης περιόδου', - 'balanceEnd' => 'Υπόλοιπο λήξης περιόδου', - 'splitByAccount' => 'Διαχωρισμός ανά λογαριασμό', - 'coveredWithTags' => 'Καλύπτεται με ετικέτες', - 'leftInBudget' => 'Απομένουν στον προϋπολογισμό', - 'left_in_debt' => 'Οφειλόμενο ποσό', - 'sumOfSums' => 'Σύνολο υποσυνόλων', - 'noCategory' => '(χωρίς κατηγορία)', - 'notCharged' => 'Χωρίς χρέωση (ακόμα)', - 'inactive' => 'Ανενεργό', - 'active' => 'Ενεργό', - 'difference' => 'Διαφορά', - 'money_flowing_in' => 'Εισροές', - 'money_flowing_out' => 'Εκροές', - 'topX' => 'τα πρώτα :number', - 'show_full_list' => 'Εμφάνιση ολόκληρης της λίστας', - 'show_only_top' => 'Εμφάνισε μόνο τα πρώτα :number', - 'report_type' => 'Τύπος Αναφοράς', - 'report_type_default' => 'Προκαθορισμένη οικονομική αναφορά', - 'report_type_audit' => 'Επισκόπηση ιστορικού συναλλαγών (έλεγχος)', - 'report_type_category' => 'Αναφορά κατηγοριών', - 'report_type_budget' => 'Αναφορά προϋπολογισμών', - 'report_type_tag' => 'Αναφορά ετικετών', - 'report_type_double' => 'Έκθεση λογαριασμών δαπανών/εσόδων', - 'more_info_help' => 'Περισσότερες πληροφορίες σχετικά με αυτούς τους τύπους αναφορών μπορούν να βρεθούν στις σελίδες βοήθειας. Πατήστε το εικονίδιο (?) στην επάνω δεξιά γωνία.', - 'report_included_accounts' => 'Συμπεριλαμβανόμενοι λογαριασμοί', - 'report_date_range' => 'Χρονικό διάστημα', - 'report_preset_ranges' => 'Καθορισμένο διάστημα', - 'shared' => 'Κοινοί', - 'fiscal_year' => 'Οικονομικό έτος', - 'income_entry' => 'Έσοδα από λογαριασμό ":name" μεταξύ :start και :end', - 'expense_entry' => 'Δαπάνες στο λογαριασμό ":name" μεταξύ :start και :end', - 'category_entry' => 'Δαπάνες και έσοδα στην κατηγορία ":name" μεταξύ :start και :end', - 'budget_spent_amount' => 'Δαπάνες του προϋπολογισμού ":budget" μεταξύ :start και :end', - 'balance_amount' => 'Δαπάνες του προϋπολογισμού ":budget" που θα πληρωθούν από το λογαριασμό ":account" μεταξύ :start και :end', - 'no_audit_activity' => 'Καμία δραστηριότητα δεν καταγράφηκε στο λογαριασμό :account_name μεταξύ :start και :end.', - 'audit_end_balance' => 'Το υπόλοιπο του λογαριασμού :account_name στο τέλος του :end ήταν :balance', - 'reports_extra_options' => 'Επιπλέον επιλογές', - 'report_has_no_extra_options' => 'Αυτή η αναφορά δεν έχει επιπλέον επιλογές', - 'reports_submit' => 'Προβολή αναφοράς', - 'end_after_start_date' => 'Η ημερομηνία λήξης της αναφοράς πρέπει να είναι μεταγενέστερη της ημερομηνίας έναρξης.', - 'select_category' => 'Επιλογή κατηγοριών', - 'select_budget' => 'Επιλογή προϋπολογισμών', - 'select_tag' => 'Επιλογή ετικετών', - 'income_per_category' => 'Έσοδα ανά κατηγορία', - 'expense_per_category' => 'Δαπάνη ανά κατηγορία', - 'expense_per_budget' => 'Δαπάνη ανά προϋπολογισμό', - 'income_per_account' => 'Έσοδα ανά λογαριασμό', - 'expense_per_account' => 'Δαπάνη ανά λογαριασμό', - 'expense_per_tag' => 'Δαπάνη ανά ετικέτα', - 'income_per_tag' => 'Έσοδα ανά ετικέτα', - 'include_expense_not_in_budget' => 'Οι συμπεριλαμβανόμενες δαπάνες δεν περιλαμβάνονται στον επιλεγμένο προϋπολογισμό(ους)', - 'include_expense_not_in_account' => 'Οι συμπεριλαμβανόμενες δαπάνες δεν περιλαμβάνονται στον επιλεγμένο λογαριασμό(ους)', - 'include_expense_not_in_category' => 'Οι συμπεριλαμβανόμενες δαπάνες δεν περιλαμβάνονται στην επιλεγμένη κατηγορία(ες)', - 'include_income_not_in_category' => 'Τα συμπεριλαμβανόμενα έσοδα δεν είναι στην επιλεγμένη κατηγορία(ες)', - 'include_income_not_in_account' => 'Τα συμπεριλαμβανόμενα έσοδα δεν είναι στον επιλεγμένο λογαριασμό(ους)', - 'include_income_not_in_tags' => 'Τα συμπεριλαμβανόμενα έσοδα δεν είναι στην επιλεγμένη ετικέτα(ες)', - 'include_expense_not_in_tags' => 'Οι συμπεριλαμβανόμενες δαπάνες δεν περιλαμβάνονται στην επιλεγμένη ετικέτα(ες)', - 'everything_else' => 'Οτιδήποτε άλλο', - 'income_and_expenses' => 'Έσοδα και δαπάνες', - 'spent_average' => 'Δαπάνες (μέσος όρος)', - 'income_average' => 'Έσοδα (μέσος όρος)', - 'transaction_count' => 'Καταμέτρηση συναλλαγών', - 'average_spending_per_account' => 'Μέσες δαπάνες ανά λογαριασμό', - 'average_income_per_account' => 'Μέσος όρος εσόδων ανά λογαριασμό', - 'total' => 'Σύνολο', - 'description' => 'Περιγραφή', - 'sum_of_period' => 'Σύνολο περιόδου', - 'average_in_period' => 'Μέσος όρος περιόδου', - 'account_role_defaultAsset' => 'Βασικός λογαριασμός κεφαλαίου', - 'account_role_sharedAsset' => 'Κοινός λογαριασμός κεφαλαίου', - 'account_role_savingAsset' => 'Λογαριασμός αποταμίευσης', - 'account_role_ccAsset' => 'Πιστωτική κάρτα', - 'account_role_cashWalletAsset' => 'Πορτοφόλι μετρητών', - 'budget_chart_click' => 'Κάντε κλικ σε ένα όνομα προϋπολογισμού στον παραπάνω πίνακα για να δείτε ένα διάγραμμα.', - 'category_chart_click' => 'Κάντε κλικ σε ένα όνομα κατηγορίας στον παραπάνω πίνακα για να δείτε ένα διάγραμμα.', - 'in_out_accounts' => 'Κέρδη και δαπάνες ανά συνδυασμό', - 'in_out_accounts_per_asset' => 'Κέρδη και δαπάνες (ανά λογαριασμό κεφαλαίου)', - 'in_out_per_category' => 'Κέρδη και δαπάνες ανά κατηγορία', - 'out_per_budget' => 'Δαπάνες ανά προϋπολογισμό', - 'select_expense_revenue' => 'Επιλέξτε λογαριασμό δαπανών/εσόδων', - 'multi_currency_report_sum' => 'Επειδή αυτή η λίστα περιέχει λογαριασμούς με πολλαπλά νομίσματα, το σύνολο(α) που βλέπετε μπορεί να μην έχει νόημα. Η αναφορά θα επιστρέφει πάντα στο προεπιλεγμένο σας νόμισμα.', - 'sum_in_default_currency' => 'Το σύνολο θα είναι πάντοτε στο προεπιλεγμένο σας νόμισμα.', - 'net_filtered_prefs' => 'Αυτό το διάγραμμα δε θα περιλαμβάνει ποτέ λογαριασμούς που δεν έχουν τσεκαρισμένη την επιλογή "Συμπεριλαμβάνεται στην καθαρή αξία".', + 'report_default' => 'Προεπιλεγμένη οικονομική αναφορά μεταξύ :start και :end', + 'report_audit' => 'Επισκόπηση ιστορικού συναλλαγών μεταξύ :start και :end', + 'report_category' => 'Αναφορά κατηγορίας μεταξύ :start και :end', + 'report_double' => 'Έκθεση λογαριασμών δαπανών/εσόδων μεταξύ :start και :end', + 'report_budget' => 'Αναφορά προϋπολογισμού μεταξύ :start και :end', + 'report_tag' => 'Αναφορά ετικετών μεταξύ :start και :end', + 'quick_link_reports' => 'Άμεσοι σύνδεσμοι', + 'quick_link_examples' => 'Αυτά είναι μερικά παραδείγματα συνδέσμων για να ξεκινήσετε. Δείτε τις σελίδες βοήθειας στο κουμπί (?) για πληροφορίες σχετικά με όλες τις αναφορές και τις μαγικές λέξεις που μπορείτε να χρησιμοποιήσετε.', + 'quick_link_default_report' => 'Προεπιλεγμένη οικονομική αναφορά', + 'quick_link_audit_report' => 'Επισκόπηση ιστορικού συναλλαγών', + 'report_this_month_quick' => 'Αυτός ο μήνας, όλοι οι λογαριασμοί', + 'report_last_month_quick' => 'Προηγούμενος μήνας, όλοι οι λογαριασμοί', + 'report_this_year_quick' => 'Αυτό το έτος, όλοι οι λογαριασμοί', + 'report_this_fiscal_year_quick' => 'Τρέχων οικονομικό έτος, όλοι οι λογαριασμοί', + 'report_all_time_quick' => 'Για όλο το διάστημα, όλοι οι λογαριασμοί', + 'reports_can_bookmark' => 'Θυμηθείτε ότι οι αναφορές μπορούν να καταχωρηθούν σε σελιδοδείκτες.', + 'incomeVsExpenses' => 'Έσοδα έναντι δαπανών', + 'accountBalances' => 'Υπόλοιπα λογαριασμών', + 'balanceStart' => 'Υπόλοιπο έναρξης περιόδου', + 'balanceEnd' => 'Υπόλοιπο λήξης περιόδου', + 'splitByAccount' => 'Διαχωρισμός ανά λογαριασμό', + 'coveredWithTags' => 'Καλύπτεται με ετικέτες', + 'leftInBudget' => 'Απομένουν στον προϋπολογισμό', + 'left_in_debt' => 'Οφειλόμενο ποσό', + 'sumOfSums' => 'Σύνολο υποσυνόλων', + 'noCategory' => '(χωρίς κατηγορία)', + 'notCharged' => 'Χωρίς χρέωση (ακόμα)', + 'inactive' => 'Ανενεργό', + 'active' => 'Ενεργό', + 'difference' => 'Διαφορά', + 'money_flowing_in' => 'Εισροές', + 'money_flowing_out' => 'Εκροές', + 'topX' => 'τα πρώτα :number', + 'show_full_list' => 'Εμφάνιση ολόκληρης της λίστας', + 'show_only_top' => 'Εμφάνισε μόνο τα πρώτα :number', + 'report_type' => 'Τύπος Αναφοράς', + 'report_type_default' => 'Προκαθορισμένη οικονομική αναφορά', + 'report_type_audit' => 'Επισκόπηση ιστορικού συναλλαγών (έλεγχος)', + 'report_type_category' => 'Αναφορά κατηγοριών', + 'report_type_budget' => 'Αναφορά προϋπολογισμών', + 'report_type_tag' => 'Αναφορά ετικετών', + 'report_type_double' => 'Έκθεση λογαριασμών δαπανών/εσόδων', + 'more_info_help' => 'Περισσότερες πληροφορίες σχετικά με αυτούς τους τύπους αναφορών μπορούν να βρεθούν στις σελίδες βοήθειας. Πατήστε το εικονίδιο (?) στην επάνω δεξιά γωνία.', + 'report_included_accounts' => 'Συμπεριλαμβανόμενοι λογαριασμοί', + 'report_date_range' => 'Χρονικό διάστημα', + 'report_preset_ranges' => 'Καθορισμένο διάστημα', + 'shared' => 'Κοινοί', + 'fiscal_year' => 'Οικονομικό έτος', + 'income_entry' => 'Έσοδα από λογαριασμό ":name" μεταξύ :start και :end', + 'expense_entry' => 'Δαπάνες στο λογαριασμό ":name" μεταξύ :start και :end', + 'category_entry' => 'Δαπάνες και έσοδα στην κατηγορία ":name" μεταξύ :start και :end', + 'budget_spent_amount' => 'Δαπάνες του προϋπολογισμού ":budget" μεταξύ :start και :end', + 'balance_amount' => 'Δαπάνες του προϋπολογισμού ":budget" που θα πληρωθούν από το λογαριασμό ":account" μεταξύ :start και :end', + 'no_audit_activity' => 'Καμία δραστηριότητα δεν καταγράφηκε στο λογαριασμό :account_name μεταξύ :start και :end.', + 'audit_end_balance' => 'Το υπόλοιπο του λογαριασμού :account_name στο τέλος του :end ήταν :balance', + 'reports_extra_options' => 'Επιπλέον επιλογές', + 'report_has_no_extra_options' => 'Αυτή η αναφορά δεν έχει επιπλέον επιλογές', + 'reports_submit' => 'Προβολή αναφοράς', + 'end_after_start_date' => 'Η ημερομηνία λήξης της αναφοράς πρέπει να είναι μεταγενέστερη της ημερομηνίας έναρξης.', + 'select_category' => 'Επιλογή κατηγοριών', + 'select_budget' => 'Επιλογή προϋπολογισμών', + 'select_tag' => 'Επιλογή ετικετών', + 'income_per_category' => 'Έσοδα ανά κατηγορία', + 'expense_per_category' => 'Δαπάνη ανά κατηγορία', + 'expense_per_budget' => 'Δαπάνη ανά προϋπολογισμό', + 'income_per_account' => 'Έσοδα ανά λογαριασμό', + 'expense_per_account' => 'Δαπάνη ανά λογαριασμό', + 'expense_per_tag' => 'Δαπάνη ανά ετικέτα', + 'income_per_tag' => 'Έσοδα ανά ετικέτα', + 'include_expense_not_in_budget' => 'Οι συμπεριλαμβανόμενες δαπάνες δεν περιλαμβάνονται στον επιλεγμένο προϋπολογισμό(ους)', + 'include_expense_not_in_account' => 'Οι συμπεριλαμβανόμενες δαπάνες δεν περιλαμβάνονται στον επιλεγμένο λογαριασμό(ους)', + 'include_expense_not_in_category' => 'Οι συμπεριλαμβανόμενες δαπάνες δεν περιλαμβάνονται στην επιλεγμένη κατηγορία(ες)', + 'include_income_not_in_category' => 'Τα συμπεριλαμβανόμενα έσοδα δεν είναι στην επιλεγμένη κατηγορία(ες)', + 'include_income_not_in_account' => 'Τα συμπεριλαμβανόμενα έσοδα δεν είναι στον επιλεγμένο λογαριασμό(ους)', + 'include_income_not_in_tags' => 'Τα συμπεριλαμβανόμενα έσοδα δεν είναι στην επιλεγμένη ετικέτα(ες)', + 'include_expense_not_in_tags' => 'Οι συμπεριλαμβανόμενες δαπάνες δεν περιλαμβάνονται στην επιλεγμένη ετικέτα(ες)', + 'everything_else' => 'Οτιδήποτε άλλο', + 'income_and_expenses' => 'Έσοδα και δαπάνες', + 'spent_average' => 'Δαπάνες (μέσος όρος)', + 'income_average' => 'Έσοδα (μέσος όρος)', + 'transaction_count' => 'Καταμέτρηση συναλλαγών', + 'average_spending_per_account' => 'Μέσες δαπάνες ανά λογαριασμό', + 'average_income_per_account' => 'Μέσος όρος εσόδων ανά λογαριασμό', + 'total' => 'Σύνολο', + 'description' => 'Περιγραφή', + 'sum_of_period' => 'Σύνολο περιόδου', + 'average_in_period' => 'Μέσος όρος περιόδου', + 'account_role_defaultAsset' => 'Βασικός λογαριασμός κεφαλαίου', + 'account_role_sharedAsset' => 'Κοινός λογαριασμός κεφαλαίου', + 'account_role_savingAsset' => 'Λογαριασμός αποταμίευσης', + 'account_role_ccAsset' => 'Πιστωτική κάρτα', + 'account_role_cashWalletAsset' => 'Πορτοφόλι μετρητών', + 'budget_chart_click' => 'Κάντε κλικ σε ένα όνομα προϋπολογισμού στον παραπάνω πίνακα για να δείτε ένα διάγραμμα.', + 'category_chart_click' => 'Κάντε κλικ σε ένα όνομα κατηγορίας στον παραπάνω πίνακα για να δείτε ένα διάγραμμα.', + 'in_out_accounts' => 'Κέρδη και δαπάνες ανά συνδυασμό', + 'in_out_accounts_per_asset' => 'Κέρδη και δαπάνες (ανά λογαριασμό κεφαλαίου)', + 'in_out_per_category' => 'Κέρδη και δαπάνες ανά κατηγορία', + 'out_per_budget' => 'Δαπάνες ανά προϋπολογισμό', + 'select_expense_revenue' => 'Επιλέξτε λογαριασμό δαπανών/εσόδων', + 'multi_currency_report_sum' => 'Επειδή αυτή η λίστα περιέχει λογαριασμούς με πολλαπλά νομίσματα, το σύνολο(α) που βλέπετε μπορεί να μην έχει νόημα. Η αναφορά θα επιστρέφει πάντα στο προεπιλεγμένο σας νόμισμα.', + 'sum_in_default_currency' => 'Το σύνολο θα είναι πάντοτε στο προεπιλεγμένο σας νόμισμα.', + 'net_filtered_prefs' => 'Αυτό το διάγραμμα δε θα περιλαμβάνει ποτέ λογαριασμούς που δεν έχουν τσεκαρισμένη την επιλογή "Συμπεριλαμβάνεται στην καθαρή αξία".', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Διάγραμμα', - 'month' => 'Μήνας', - 'budget' => 'Προϋπολογισμός', - 'spent' => 'Δαπανήθηκαν', - 'spent_capped' => 'Δαπανήθηκαν (με όριο)', - 'spent_in_budget' => 'Δαπάνες ανά προϋπολογισμό', - 'left_to_spend' => 'Διαθέσιμα προϋπολογισμών', - 'earned' => 'Κερδήθηκαν', - 'overspent' => 'Υπέρβαση προϋπολογισμών', - 'left' => 'Απομένουν', - 'max-amount' => 'Μέγιστο ποσό', - 'min-amount' => 'Ελάχιστο ποσό', - 'journal-amount' => 'Καταχώρηση τρέχοντος πάγιου έξοδου', - 'name' => 'Όνομα', - 'date' => 'Ημερομηνία', - 'date_and_time' => 'Ημερομηνία και ώρα', - 'time' => 'Ώρα', - 'paid' => 'Πληρωμένο', - 'unpaid' => 'Απλήρωτο', - 'day' => 'Ημέρα', - 'budgeted' => 'Προϋπολογισμένο', - 'period' => 'Περίοδος', - 'balance' => 'Ισοζύγιο', - 'in_out_period' => 'In + out this period', - 'sum' => 'Σύνολο', - 'summary' => 'Σύνοψη', - 'average' => 'Μέσος όρος', - 'balanceFor' => 'Υπόλοιπο για :name', - 'no_tags' => '(χωρίς ετικέτες)', + 'chart' => 'Διάγραμμα', + 'month' => 'Μήνας', + 'budget' => 'Προϋπολογισμός', + 'spent' => 'Δαπανήθηκαν', + 'spent_capped' => 'Δαπανήθηκαν (με όριο)', + 'spent_in_budget' => 'Δαπάνες ανά προϋπολογισμό', + 'left_to_spend' => 'Διαθέσιμα προϋπολογισμών', + 'earned' => 'Κερδήθηκαν', + 'overspent' => 'Υπέρβαση προϋπολογισμών', + 'left' => 'Απομένουν', + 'max-amount' => 'Μέγιστο ποσό', + 'min-amount' => 'Ελάχιστο ποσό', + 'journal-amount' => 'Καταχώρηση τρέχοντος πάγιου έξοδου', + 'name' => 'Όνομα', + 'date' => 'Ημερομηνία', + 'date_and_time' => 'Ημερομηνία και ώρα', + 'time' => 'Ώρα', + 'paid' => 'Πληρωμένο', + 'unpaid' => 'Απλήρωτο', + 'day' => 'Ημέρα', + 'budgeted' => 'Προϋπολογισμένο', + 'period' => 'Περίοδος', + 'balance' => 'Ισοζύγιο', + 'in_out_period' => 'In + out this period', + 'sum' => 'Σύνολο', + 'summary' => 'Σύνοψη', + 'average' => 'Μέσος όρος', + 'balanceFor' => 'Υπόλοιπο για :name', + 'no_tags' => '(χωρίς ετικέτες)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Δέσμευση χρημάτων για τον κουμπαρά ":name"', - 'piggy_bank' => 'Κουμπαράς', - 'new_piggy_bank' => 'Νέος κουμπαράς', - 'store_piggy_bank' => 'Αποθήκευση νέου κουμπαρά', - 'stored_piggy_bank' => 'Αποθήκευση του νέου κουμπαρά ":name"', - 'account_status' => 'Κατάσταση λογαριασμού', - 'left_for_piggy_banks' => 'Διαθέσιμα προς δέσμευση', - 'sum_of_piggy_banks' => 'Σύνολο κουμπαράδων', - 'saved_so_far' => 'Δεσμεύτηκαν', - 'left_to_save' => 'Απομένουν για αποταμίευση', - 'suggested_amount' => 'Προτεινόμενο μηνιαίο ποσό για δέσμευση', - 'add_money_to_piggy_title' => 'Δέσμευση χρημάτων για τον κουμπαρά ":name"', - 'remove_money_from_piggy_title' => 'Αποδέσμευση χρημάτων από τον κουμπαρά ":name"', - 'add' => 'Προσθήκη', - 'no_money_for_piggy' => 'Δεν έχετε διαθέσιμα χρήματα προς δέσμευση για αυτόν τον κουμπαρά.', - 'suggested_savings_per_month' => 'Προτείνεται ανά μήνα', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Δέσμευση χρημάτων για τον κουμπαρά ":name"', + 'piggy_bank' => 'Κουμπαράς', + 'new_piggy_bank' => 'Νέος κουμπαράς', + 'store_piggy_bank' => 'Αποθήκευση νέου κουμπαρά', + 'stored_piggy_bank' => 'Αποθήκευση του νέου κουμπαρά ":name"', + 'account_status' => 'Κατάσταση λογαριασμού', + 'left_for_piggy_banks' => 'Διαθέσιμα προς δέσμευση', + 'sum_of_piggy_banks' => 'Σύνολο κουμπαράδων', + 'saved_so_far' => 'Δεσμεύτηκαν', + 'left_to_save' => 'Απομένουν για αποταμίευση', + 'suggested_amount' => 'Προτεινόμενο μηνιαίο ποσό για δέσμευση', + 'add_money_to_piggy_title' => 'Δέσμευση χρημάτων για τον κουμπαρά ":name"', + 'remove_money_from_piggy_title' => 'Αποδέσμευση χρημάτων από τον κουμπαρά ":name"', + 'add' => 'Προσθήκη', + 'no_money_for_piggy' => 'Δεν έχετε διαθέσιμα χρήματα προς δέσμευση για αυτόν τον κουμπαρά.', + 'suggested_savings_per_month' => 'Προτείνεται ανά μήνα', - 'remove' => 'Αφαίρεση', - 'max_amount_add' => 'Το μέγιστο ποσό που μπορείτε να δεσμεύσετε είναι', - 'max_amount_remove' => 'Το μέγιστο ποσό που μπορείτε να αποδεσμεύσετε είναι', - 'update_piggy_button' => 'Ενημέρωση κουμπαρά', - 'update_piggy_title' => 'Ενημέρωση του κουμπαρά ":name"', - 'updated_piggy_bank' => 'Ενημερώθηκε ο κουμπαράς":name"', - 'details' => 'Λεπτομέρειες', - 'events' => 'Συμβάντα', - 'target_amount' => 'Ποσό στόχου', - 'start_date' => 'Ημερομηνία έναρξης', - 'no_start_date' => 'Χωρίς ημερομηνία έναρξης', - 'target_date' => 'Ημερομηνία επίτευξης στόχου', - 'no_target_date' => 'Χωρίς ημερομηνία επίτευξης στόχου', - 'table' => 'Πίνακας', - 'delete_piggy_bank' => 'Διαγραφή του κουμπαρά ":name"', - 'cannot_add_amount_piggy' => 'Δεν ήταν δυνατή η προσθήκη :amount στο ":name".', - 'cannot_remove_from_piggy' => 'Δεν ήταν δυνατή η αποδέσμευση :amount από το ":name".', - 'deleted_piggy_bank' => 'Διαγράφηκε ο κουμπαράς ":name"', - 'added_amount_to_piggy' => 'Δεσμεύτηκαν :amount για το ":name"', - 'removed_amount_from_piggy' => 'Αποδεσμεύτηκαν :amount από το ":name"', - 'piggy_events' => 'Σχετικοί κουμπαράδες', + 'remove' => 'Αφαίρεση', + 'max_amount_add' => 'Το μέγιστο ποσό που μπορείτε να δεσμεύσετε είναι', + 'max_amount_remove' => 'Το μέγιστο ποσό που μπορείτε να αποδεσμεύσετε είναι', + 'update_piggy_button' => 'Ενημέρωση κουμπαρά', + 'update_piggy_title' => 'Ενημέρωση του κουμπαρά ":name"', + 'updated_piggy_bank' => 'Ενημερώθηκε ο κουμπαράς":name"', + 'details' => 'Λεπτομέρειες', + 'events' => 'Συμβάντα', + 'target_amount' => 'Ποσό στόχου', + 'start_date' => 'Ημερομηνία έναρξης', + 'no_start_date' => 'Χωρίς ημερομηνία έναρξης', + 'target_date' => 'Ημερομηνία επίτευξης στόχου', + 'no_target_date' => 'Χωρίς ημερομηνία επίτευξης στόχου', + 'table' => 'Πίνακας', + 'delete_piggy_bank' => 'Διαγραφή του κουμπαρά ":name"', + 'cannot_add_amount_piggy' => 'Δεν ήταν δυνατή η προσθήκη :amount στο ":name".', + 'cannot_remove_from_piggy' => 'Δεν ήταν δυνατή η αποδέσμευση :amount από το ":name".', + 'deleted_piggy_bank' => 'Διαγράφηκε ο κουμπαράς ":name"', + 'added_amount_to_piggy' => 'Δεσμεύτηκαν :amount για το ":name"', + 'removed_amount_from_piggy' => 'Αποδεσμεύτηκαν :amount από το ":name"', + 'piggy_events' => 'Σχετικοί κουμπαράδες', // tags - 'delete_tag' => 'Διαγραφή ετικέτας ":tag"', - 'deleted_tag' => 'Διαγράφηκε η ετικέτα ":tag"', - 'new_tag' => 'Δημιουργία νέας ετικέτας', - 'edit_tag' => 'Επεξεργασία ετικέτας ":tag"', - 'updated_tag' => 'Ενημερώθηκε η ετικέτα ":tag"', - 'created_tag' => 'Η ετικέτα ":tag" δημιουργήθηκε!', + 'delete_tag' => 'Διαγραφή ετικέτας ":tag"', + 'deleted_tag' => 'Διαγράφηκε η ετικέτα ":tag"', + 'new_tag' => 'Δημιουργία νέας ετικέτας', + 'edit_tag' => 'Επεξεργασία ετικέτας ":tag"', + 'updated_tag' => 'Ενημερώθηκε η ετικέτα ":tag"', + 'created_tag' => 'Η ετικέτα ":tag" δημιουργήθηκε!', - 'transaction_journal_information' => 'Πληροφορίες συναλλαγής', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Πληροφορίες μεταδεδομένων', - 'transaction_journal_more' => 'Περισσότερες πληροφορίες', - 'basic_journal_information' => 'Βασικές πληροφορίες συναλλαγής', - 'transaction_journal_extra' => 'Περισσότερες πληροφορίες', - 'att_part_of_journal' => 'Αποθηκεύτηκε στο ":journal"', - 'total_amount' => 'Συνολικό ποσό', - 'number_of_decimals' => 'Πλήθος δεκαδικών ψηφίων', + 'transaction_journal_information' => 'Πληροφορίες συναλλαγής', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Πληροφορίες μεταδεδομένων', + 'transaction_journal_more' => 'Περισσότερες πληροφορίες', + 'basic_journal_information' => 'Βασικές πληροφορίες συναλλαγής', + 'transaction_journal_extra' => 'Περισσότερες πληροφορίες', + 'att_part_of_journal' => 'Αποθηκεύτηκε στο ":journal"', + 'total_amount' => 'Συνολικό ποσό', + 'number_of_decimals' => 'Πλήθος δεκαδικών ψηφίων', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'Η πρόσκληση στο ":address" έχει ήδη χρησιμοποιηθεί.', - 'invite_is_deleted' => 'Η πρόσκληση στο ":address" έχει διαγραφεί.', - 'invite_new_user_title' => 'Πρόσκληση νέου χρήστη', - 'invite_new_user_text' => 'Ως διαχειριστής, μπορείτε να προσκαλέσετε νέους χρήστες για να εγγραφούν στο Firefly III. Χρησιμοποιώντας ένα άμεσο σύνδεσμο URL που μπορείτε να μοιραστείτε μαζί τους, θα μπορούν να δημιουργήσουν ένα νέο λογαριασμό στην πλατφόρμα. Ο προσκεκλημένος χρήστης και ο σύνδεσμος για την πρόσκλησή του, θα εμφανιστούν στον παρακάτω πίνακα. Μπορείτε να του κοινοποιήσετε το σύνδεσμο της πρόσκλησης.', - 'invited_user_mail' => 'Διεύθυνση E-mail', - 'invite_user' => 'Πρόσκληση χρήστη', - 'user_is_invited' => 'Η διεύθυνση ηλεκτρονικού ταχυδρομείου ":address" έλαβε πρόσκληση για εγγραφή στο Firefly III', - 'administration' => 'Διαχείριση', - 'system_settings' => 'System settings', - 'code_already_used' => 'Ο κωδικός πρόσκλησης έχει χρησιμοποιηθεί', - 'user_administration' => 'Διαχείριση χρηστών', - 'list_all_users' => 'Όλοι οι χρήστες', - 'all_users' => 'Όλοι οι χρήστες', - 'instance_configuration' => 'Παραμετροποίηση', - 'firefly_instance_configuration' => 'Επιλογές παραμετροποίησης του Firefly III', - 'setting_single_user_mode' => 'Λειτουργία ενός μοναδικού χρήστη', - 'setting_single_user_mode_explain' => 'Λόγω προεπιλογής το Firefly III δέχεται μόνο μία (1) εγγραφή χρήστη: εσάς. Πρόκειται για ένα μέτρο ασφαλείας που εμποδίζει τους άλλους να χρησιμοποιήσουν την εγκατάστασή σας, εκτός αν τους επιτρέπετε. Οι μελλοντικές εγγραφές χρηστών αποκλείονται. Όταν καταργήσετε την επιλογή σε αυτό το κουτάκι, άλλοι χρήστες θα μπορούν να χρησιμοποιήσουν την εγκατάστασή σας ταυτόχρονα, υποθέτοντας ότι μπορούν να συνδεθούν (σε περίπτωση σύνδεσης στο διαδίκτυο).', - 'store_configuration' => 'Αποθήκευση παραμετροποίησης', - 'single_user_administration' => 'Διαχείριση χρήστη :email', - 'edit_user' => 'Επεξεργασία χρήστη :email', - 'hidden_fields_preferences' => 'Μπορείτε να ενεργοποιήσετε περισσότερες επιλογές συναλλαγών στις προτιμήσεις.', - 'user_data_information' => 'Δεδομένα χρήστη', - 'user_information' => 'Πληροφορίες χρήστη', - 'total_size' => 'συνολικό μέγεθος', - 'budget_or_budgets' => ':count προϋπολογισμός|:count προϋπολογισμοί', - 'budgets_with_limits' => ':count προϋπολογισμός με καθορισμένο ποσό|:count προϋπολογισμοί με καθορισμένο ποσό', - 'nr_of_rules_in_total_groups' => ':count_rules κανόνες σε :count_groups ομάδες κανόνων', - 'tag_or_tags' => ':count ετικέτα|:count ετικέτες', - 'configuration_updated' => 'Η παραμετροποίηση ενημερώθηκε', - 'setting_is_demo_site' => 'Ιστοσελίδα επίδειξης', - 'setting_is_demo_site_explain' => 'Εάν επιλέξετε αυτό το κουτάκι, η εγκατάσταση θα συμπεριφέρεται σαν ιστοσελίδα επίδειξης, το οποίο μπορεί να έχει παράξενες παρενέργειες.', - 'block_code_bounced' => 'Το Email επέστρεψε χωρίς να έχει παραδοθεί', - 'block_code_expired' => 'Ο λογαριασμός επίδειξης έληξε', - 'no_block_code' => 'Δεν υπάρχει λόγος για αποκλεισμό ή ο χρήστης δεν είναι αποκλεισμένος', - 'block_code_email_changed' => 'Ο χρήστης δεν έχει ακόμη επιβεβαιώσει τη νέα διεύθυνση ηλεκτρονικού ταχυδρομείου', - 'admin_update_email' => 'Σε αντίθεση με τη σελίδα προφίλ, ο χρήστης ΔΕΝ θα ειδοποιηθεί ότι η διεύθυνση του ηλεκτρονικού ταχυδρομείου του έχει αλλάξει!', - 'update_user' => 'Ενημέρωση χρήστη', - 'updated_user' => 'Τα δεδομένα χρήστη έχουν αλλάξει.', - 'delete_user' => 'Διαγραφή χρήστη :email', - 'user_deleted' => 'Ο χρήστης έχει διαγραφεί', - 'send_test_email' => 'Αποστολή δοκιμαστικού μηνύματος email', - 'send_test_email_text' => 'Για να δείτε εάν η εγκατάστασή σας μπορεί να στείλει email ή να δημοσιεύσει μηνύματα στο Slack, πατήστε αυτό το κουμπί. Δεν θα δείτε κάποιο σφάλμα εδώ (αν υπάρχει), όμως τυχόν σφάλματα θα τα βρείτε στα αρχεία καταγραφής (log files). Μπορείτε να πατήσετε το κουμπί αποστολής όσες φορές θέλετε. Δεν υπάρχει έλεγχος ανεπιθύμητων μηνυμάτων. Το μήνυμα θα σταλεί στο :email και θα πρέπει να φτάσει σύντομα.', - 'send_message' => 'Αποστολή μηνύματος', - 'send_test_triggered' => 'Η δοκιμή ενεργοποιήθηκε. Ελέγξτε τα εισερχόμενα μηνύματα στο Email σας και τα αρχεία καταγραφής.', - 'give_admin_careful' => 'Οι χρήστες στους οποίους έχουν δοθεί δικαιώματα διαχειριστή μπορούν να καθαιρέσουν τη δική σας πρόσβαση. Ενεργήστε με προσοχή.', - 'admin_maintanance_title' => 'Συντήρηση', - 'admin_maintanance_expl' => 'Χρήσιμες λειτουργίες για συντήρηση στο Firefly III', - 'admin_maintenance_clear_cache' => 'Εκκαθάριση cache', - 'admin_notifications' => 'Ειδοποιήσεις διαχειριστή', - 'admin_notifications_expl' => 'Οι ακόλουθες ειδοποιήσεις μπορούν να ενεργοποιηθούν ή να απενεργοποιηθούν από το διαχειριστή. Αν θέλετε να παίρνετε αυτά τα μηνύματα και από το Slack, θα πρέπει να ορίστε το "εισερχόμενο webhook" URL.', - 'admin_notification_check_user_new_reg' => 'Ο χρήστης παίρνει μήνυμα καλωσορίσματος μετά την εγγραφή', - 'admin_notification_check_admin_new_reg' => 'Ο διαχειριστής(ες) λαμβάνει ειδοποίηση εγγραφής νέου χρήστη', - 'admin_notification_check_new_version' => 'Μια νέα έκδοση είναι διαθέσιμη', - 'admin_notification_check_invite_created' => 'Ένας χρήστης θα λάβει πρόσκληση για το Firefly III', - 'admin_notification_check_invite_redeemed' => 'Μια πρόσκληση χρήστη χρησιμοποιήθηκε', - 'all_invited_users' => 'Όλοι οι προσκεκλημένοι χρήστες', - 'save_notification_settings' => 'Αποθήκευση ρυθμίσεων', - 'notification_settings_saved' => 'Οι ρυθμίσεις ειδοποιήσεων έχουν αποθηκευτεί', - - - 'split_transaction_title' => 'Περιγραφή της συναλλαγής με διαχωρισμό', - 'split_transaction_title_help' => 'Εάν δημιουργήσετε μια διαχωρισμένη συναλλαγή, πρέπει να υπάρχει μια καθολική περιγραφή για όλους τους διαχωρισμούς της συναλλαγής.', - 'split_title_help' => 'Εάν δημιουργήσετε μια διαχωρισμένη συναλλαγή, πρέπει να υπάρχει μια καθολική περιγραφή για όλους τους διαχωρισμούς της συναλλαγής.', - 'you_create_transfer' => 'Δημιουργείτε μια μεταφορά.', - 'you_create_withdrawal' => 'Δημιουργείτε μια ανάληψη.', - 'you_create_deposit' => 'Δημιουργείτε μια κατάθεση.', + 'invite_is_already_redeemed' => 'Η πρόσκληση στο ":address" έχει ήδη χρησιμοποιηθεί.', + 'invite_is_deleted' => 'Η πρόσκληση στο ":address" έχει διαγραφεί.', + 'invite_new_user_title' => 'Πρόσκληση νέου χρήστη', + 'invite_new_user_text' => 'Ως διαχειριστής, μπορείτε να προσκαλέσετε νέους χρήστες για να εγγραφούν στο Firefly III. Χρησιμοποιώντας ένα άμεσο σύνδεσμο URL που μπορείτε να μοιραστείτε μαζί τους, θα μπορούν να δημιουργήσουν ένα νέο λογαριασμό στην πλατφόρμα. Ο προσκεκλημένος χρήστης και ο σύνδεσμος για την πρόσκλησή του, θα εμφανιστούν στον παρακάτω πίνακα. Μπορείτε να του κοινοποιήσετε το σύνδεσμο της πρόσκλησης.', + 'invited_user_mail' => 'Διεύθυνση E-mail', + 'invite_user' => 'Πρόσκληση χρήστη', + 'user_is_invited' => 'Η διεύθυνση ηλεκτρονικού ταχυδρομείου ":address" έλαβε πρόσκληση για εγγραφή στο Firefly III', + 'administration' => 'Διαχείριση', + 'system_settings' => 'System settings', + 'code_already_used' => 'Ο κωδικός πρόσκλησης έχει χρησιμοποιηθεί', + 'user_administration' => 'Διαχείριση χρηστών', + 'list_all_users' => 'Όλοι οι χρήστες', + 'all_users' => 'Όλοι οι χρήστες', + 'instance_configuration' => 'Παραμετροποίηση', + 'firefly_instance_configuration' => 'Επιλογές παραμετροποίησης του Firefly III', + 'setting_single_user_mode' => 'Λειτουργία ενός μοναδικού χρήστη', + 'setting_single_user_mode_explain' => 'Λόγω προεπιλογής το Firefly III δέχεται μόνο μία (1) εγγραφή χρήστη: εσάς. Πρόκειται για ένα μέτρο ασφαλείας που εμποδίζει τους άλλους να χρησιμοποιήσουν την εγκατάστασή σας, εκτός αν τους επιτρέπετε. Οι μελλοντικές εγγραφές χρηστών αποκλείονται. Όταν καταργήσετε την επιλογή σε αυτό το κουτάκι, άλλοι χρήστες θα μπορούν να χρησιμοποιήσουν την εγκατάστασή σας ταυτόχρονα, υποθέτοντας ότι μπορούν να συνδεθούν (σε περίπτωση σύνδεσης στο διαδίκτυο).', + 'store_configuration' => 'Αποθήκευση παραμετροποίησης', + 'single_user_administration' => 'Διαχείριση χρήστη :email', + 'edit_user' => 'Επεξεργασία χρήστη :email', + 'hidden_fields_preferences' => 'Μπορείτε να ενεργοποιήσετε περισσότερες επιλογές συναλλαγών στις προτιμήσεις.', + 'user_data_information' => 'Δεδομένα χρήστη', + 'user_information' => 'Πληροφορίες χρήστη', + 'total_size' => 'συνολικό μέγεθος', + 'budget_or_budgets' => ':count προϋπολογισμός|:count προϋπολογισμοί', + 'budgets_with_limits' => ':count προϋπολογισμός με καθορισμένο ποσό|:count προϋπολογισμοί με καθορισμένο ποσό', + 'nr_of_rules_in_total_groups' => ':count_rules κανόνες σε :count_groups ομάδες κανόνων', + 'tag_or_tags' => ':count ετικέτα|:count ετικέτες', + 'configuration_updated' => 'Η παραμετροποίηση ενημερώθηκε', + 'setting_is_demo_site' => 'Ιστοσελίδα επίδειξης', + 'setting_is_demo_site_explain' => 'Εάν επιλέξετε αυτό το κουτάκι, η εγκατάσταση θα συμπεριφέρεται σαν ιστοσελίδα επίδειξης, το οποίο μπορεί να έχει παράξενες παρενέργειες.', + 'block_code_bounced' => 'Το Email επέστρεψε χωρίς να έχει παραδοθεί', + 'block_code_expired' => 'Ο λογαριασμός επίδειξης έληξε', + 'no_block_code' => 'Δεν υπάρχει λόγος για αποκλεισμό ή ο χρήστης δεν είναι αποκλεισμένος', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Ο χρήστης δεν έχει ακόμη επιβεβαιώσει τη νέα διεύθυνση ηλεκτρονικού ταχυδρομείου', + 'admin_update_email' => 'Σε αντίθεση με τη σελίδα προφίλ, ο χρήστης ΔΕΝ θα ειδοποιηθεί ότι η διεύθυνση του ηλεκτρονικού ταχυδρομείου του έχει αλλάξει!', + 'update_user' => 'Ενημέρωση χρήστη', + 'updated_user' => 'Τα δεδομένα χρήστη έχουν αλλάξει.', + 'delete_user' => 'Διαγραφή χρήστη :email', + 'user_deleted' => 'Ο χρήστης έχει διαγραφεί', + 'send_test_email' => 'Αποστολή δοκιμαστικού μηνύματος email', + 'send_test_email_text' => 'Για να δείτε εάν η εγκατάστασή σας μπορεί να στείλει email ή να δημοσιεύσει μηνύματα στο Slack, πατήστε αυτό το κουμπί. Δεν θα δείτε κάποιο σφάλμα εδώ (αν υπάρχει), όμως τυχόν σφάλματα θα τα βρείτε στα αρχεία καταγραφής (log files). Μπορείτε να πατήσετε το κουμπί αποστολής όσες φορές θέλετε. Δεν υπάρχει έλεγχος ανεπιθύμητων μηνυμάτων. Το μήνυμα θα σταλεί στο :email και θα πρέπει να φτάσει σύντομα.', + 'send_message' => 'Αποστολή μηνύματος', + 'send_test_triggered' => 'Η δοκιμή ενεργοποιήθηκε. Ελέγξτε τα εισερχόμενα μηνύματα στο Email σας και τα αρχεία καταγραφής.', + 'give_admin_careful' => 'Οι χρήστες στους οποίους έχουν δοθεί δικαιώματα διαχειριστή μπορούν να καθαιρέσουν τη δική σας πρόσβαση. Ενεργήστε με προσοχή.', + 'admin_maintanance_title' => 'Συντήρηση', + 'admin_maintanance_expl' => 'Χρήσιμες λειτουργίες για συντήρηση στο Firefly III', + 'admin_maintenance_clear_cache' => 'Εκκαθάριση cache', + 'admin_notifications' => 'Ειδοποιήσεις διαχειριστή', + 'admin_notifications_expl' => 'Οι ακόλουθες ειδοποιήσεις μπορούν να ενεργοποιηθούν ή να απενεργοποιηθούν από το διαχειριστή. Αν θέλετε να παίρνετε αυτά τα μηνύματα και από το Slack, θα πρέπει να ορίστε το "εισερχόμενο webhook" URL.', + 'admin_notification_check_user_new_reg' => 'Ο χρήστης παίρνει μήνυμα καλωσορίσματος μετά την εγγραφή', + 'admin_notification_check_admin_new_reg' => 'Ο διαχειριστής(ες) λαμβάνει ειδοποίηση εγγραφής νέου χρήστη', + 'admin_notification_check_new_version' => 'Μια νέα έκδοση είναι διαθέσιμη', + 'admin_notification_check_invite_created' => 'Ένας χρήστης θα λάβει πρόσκληση για το Firefly III', + 'admin_notification_check_invite_redeemed' => 'Μια πρόσκληση χρήστη χρησιμοποιήθηκε', + 'all_invited_users' => 'Όλοι οι προσκεκλημένοι χρήστες', + 'save_notification_settings' => 'Αποθήκευση ρυθμίσεων', + 'notification_settings_saved' => 'Οι ρυθμίσεις ειδοποιήσεων έχουν αποθηκευτεί', + 'split_transaction_title' => 'Περιγραφή της συναλλαγής με διαχωρισμό', + 'split_transaction_title_help' => 'Εάν δημιουργήσετε μια διαχωρισμένη συναλλαγή, πρέπει να υπάρχει μια καθολική περιγραφή για όλους τους διαχωρισμούς της συναλλαγής.', + 'split_title_help' => 'Εάν δημιουργήσετε μια διαχωρισμένη συναλλαγή, πρέπει να υπάρχει μια καθολική περιγραφή για όλους τους διαχωρισμούς της συναλλαγής.', + 'you_create_transfer' => 'Δημιουργείτε μια μεταφορά.', + 'you_create_withdrawal' => 'Δημιουργείτε μια ανάληψη.', + 'you_create_deposit' => 'Δημιουργείτε μια κατάθεση.', // links - 'journal_link_configuration' => 'Παραμετροποίηση συνδέσεων συναλλαγών', - 'create_new_link_type' => 'Δημιουργία νέου τύπου συνδέσμου', - 'store_new_link_type' => 'Αποθήκευση νέου τύπου συνδέσμου', - 'update_link_type' => 'Ενημέρωση τύπου συνδέσμου', - 'edit_link_type' => 'Επεξεργασία τύπου συνδέσμου ":name"', - 'updated_link_type' => 'Ενημερώθηκε ο σύνδεσμος τύπου ":name"', - 'delete_link_type' => 'Διαγραφή τύπου συνδέσμου ":name"', - 'deleted_link_type' => 'Διαγράφηκε ο τύπος συνδέσμου ":name"', - 'stored_new_link_type' => 'Αποθήκευση νέου τύπου συνδέσμου ":name"', - 'cannot_edit_link_type' => 'Αδύνατη η επεξεργασία του τύπου συνδέσμου ":name"', - 'link_type_help_name' => 'Πχ. "Διπλότυπα"', - 'link_type_help_inward' => 'Πχ. "διπλότυπα"', - 'link_type_help_outward' => 'Πχ. "Είναι διπλότυπο από"', - 'save_connections_by_moving' => 'Αποθηκεύστε το σύνδεσμο μεταξύ αυτών των συναλλαγών μετακινώντας τις σε έναν άλλο τύπο συνδέσμου:', - 'do_not_save_connection' => '(μην αποθηκεύσεις την σύνδεση)', - 'link_transaction' => 'Σύνδεση συναλλαγής', - 'link_to_other_transaction' => 'Σύνδεση αυτής της συναλλαγής με μια άλλη συναλλαγή', - 'select_transaction_to_link' => 'Επιλέξτε μια συναλλαγή για να συνδεθεί τη συγκεκριμένη συναλλαγή. Οι σύνδεσμοι δεν χρησιμοποιούνται επί του παρόντος στο Firefly III (απλώς εμφανίζονται), αλλά αυτό σχεδιάζεται να αλλάξει μελλοντικά. Χρησιμοποιήστε το πλαίσιο αναζήτησης για να επιλέξετε μια συναλλαγή είτε με τίτλο είτε με αναγνωριστικό ID. Αν θέλετε να προσθέσετε προσαρμοσμένους τύπους συνδέσμων, ανατρέξτε στην ενότητα διαχείρισης.', - 'this_transaction' => 'Αυτή η συναλλαγή', - 'transaction' => 'Συναλλαγή', - 'comments' => 'Σχόλια', - 'link_notes' => 'Τυχόν σημειώσεις που θέλετε να αποθηκεύσετε με τη σύνδεση.', - 'invalid_link_selection' => 'Δεν είναι δυνατή η σύνδεση αυτών των συναλλαγών', - 'selected_transaction' => 'Επιλεγμένη συναλλαγή', - 'journals_linked' => 'Οι συναλλαγές είναι συνδεδεμένες.', - 'journals_error_linked' => 'Αυτές οι συναλλαγές είναι ήδη συνδεδεμένες.', - 'journals_link_to_self' => 'Δεν μπορείτε να συνδέσετε μια συναλλαγή με τον εαυτό της', - 'journal_links' => 'Συνδέσεις συναλλαγών', - 'this_withdrawal' => 'Αυτή η ανάληψη', - 'this_deposit' => 'Αυτή η κατάθεση', - 'this_transfer' => 'Αυτή η μεταφορά', - 'overview_for_link' => 'Επισκόπηση για τύπο συνδέσμου ":name"', - 'source_transaction' => 'Συναλλαγή προέλευσης', - 'link_description' => 'Περιγραφή σύνδεσης', - 'destination_transaction' => 'Συναλλαγή προορισμού', - 'delete_journal_link' => 'Διαγραφή του συνδέσμου μεταξύ :source και :destination', - 'deleted_link' => 'Διαγραμμένος σύνδεσμος', + 'journal_link_configuration' => 'Παραμετροποίηση συνδέσεων συναλλαγών', + 'create_new_link_type' => 'Δημιουργία νέου τύπου συνδέσμου', + 'store_new_link_type' => 'Αποθήκευση νέου τύπου συνδέσμου', + 'update_link_type' => 'Ενημέρωση τύπου συνδέσμου', + 'edit_link_type' => 'Επεξεργασία τύπου συνδέσμου ":name"', + 'updated_link_type' => 'Ενημερώθηκε ο σύνδεσμος τύπου ":name"', + 'delete_link_type' => 'Διαγραφή τύπου συνδέσμου ":name"', + 'deleted_link_type' => 'Διαγράφηκε ο τύπος συνδέσμου ":name"', + 'stored_new_link_type' => 'Αποθήκευση νέου τύπου συνδέσμου ":name"', + 'cannot_edit_link_type' => 'Αδύνατη η επεξεργασία του τύπου συνδέσμου ":name"', + 'link_type_help_name' => 'Πχ. "Διπλότυπα"', + 'link_type_help_inward' => 'Πχ. "διπλότυπα"', + 'link_type_help_outward' => 'Πχ. "Είναι διπλότυπο από"', + 'save_connections_by_moving' => 'Αποθηκεύστε το σύνδεσμο μεταξύ αυτών των συναλλαγών μετακινώντας τις σε έναν άλλο τύπο συνδέσμου:', + 'do_not_save_connection' => '(μην αποθηκεύσεις την σύνδεση)', + 'link_transaction' => 'Σύνδεση συναλλαγής', + 'link_to_other_transaction' => 'Σύνδεση αυτής της συναλλαγής με μια άλλη συναλλαγή', + 'select_transaction_to_link' => 'Επιλέξτε μια συναλλαγή για να συνδεθεί τη συγκεκριμένη συναλλαγή. Οι σύνδεσμοι δεν χρησιμοποιούνται επί του παρόντος στο Firefly III (απλώς εμφανίζονται), αλλά αυτό σχεδιάζεται να αλλάξει μελλοντικά. Χρησιμοποιήστε το πλαίσιο αναζήτησης για να επιλέξετε μια συναλλαγή είτε με τίτλο είτε με αναγνωριστικό ID. Αν θέλετε να προσθέσετε προσαρμοσμένους τύπους συνδέσμων, ανατρέξτε στην ενότητα διαχείρισης.', + 'this_transaction' => 'Αυτή η συναλλαγή', + 'transaction' => 'Συναλλαγή', + 'comments' => 'Σχόλια', + 'link_notes' => 'Τυχόν σημειώσεις που θέλετε να αποθηκεύσετε με τη σύνδεση.', + 'invalid_link_selection' => 'Δεν είναι δυνατή η σύνδεση αυτών των συναλλαγών', + 'selected_transaction' => 'Επιλεγμένη συναλλαγή', + 'journals_linked' => 'Οι συναλλαγές είναι συνδεδεμένες.', + 'journals_error_linked' => 'Αυτές οι συναλλαγές είναι ήδη συνδεδεμένες.', + 'journals_link_to_self' => 'Δεν μπορείτε να συνδέσετε μια συναλλαγή με τον εαυτό της', + 'journal_links' => 'Συνδέσεις συναλλαγών', + 'this_withdrawal' => 'Αυτή η ανάληψη', + 'this_deposit' => 'Αυτή η κατάθεση', + 'this_transfer' => 'Αυτή η μεταφορά', + 'overview_for_link' => 'Επισκόπηση για τύπο συνδέσμου ":name"', + 'source_transaction' => 'Συναλλαγή προέλευσης', + 'link_description' => 'Περιγραφή σύνδεσης', + 'destination_transaction' => 'Συναλλαγή προορισμού', + 'delete_journal_link' => 'Διαγραφή του συνδέσμου μεταξύ :source και :destination', + 'deleted_link' => 'Διαγραμμένος σύνδεσμος', // link translations: - 'Paid_name' => 'Πληρωμένο', - 'Refund_name' => 'Επιστροφή χρημάτων', - 'Reimbursement_name' => 'Αποζημίωση', - 'Related_name' => 'Σχετικά', - 'relates to_inward' => 'σχετίζεται με', - 'is (partially) refunded by_inward' => 'έχει επιστραφεί (εν μέρει) από', - 'is (partially) paid for by_inward' => 'έχει πληρωθεί (εν μέρει) από', - 'is (partially) reimbursed by_inward' => 'έχει αποζημιωθεί (εν μέρει) από', - 'inward_transaction' => 'Εσωτερική συναλλαγή', - 'outward_transaction' => 'Εξωτερική συναλλαγή', - 'relates to_outward' => 'σχετίζεται με', - '(partially) refunds_outward' => '(εν μέρει) επιστροφές', - '(partially) pays for_outward' => '(εν μέρει) πληρωμές για', - '(partially) reimburses_outward' => '(εν μέρει) αποζημιώσεις', - 'is (partially) refunded by' => 'έχει επιστραφεί (εν μέρει) από', - 'is (partially) paid for by' => 'έχει πληρωθεί (εν μέρει) από', - 'is (partially) reimbursed by' => 'έχει αποζημιωθεί (εν μέρει) από', - 'relates to' => 'σχετίζεται με', - '(partially) refunds' => 'επιστρέφει (εν μέρει) για', - '(partially) pays for' => 'πληρώνει (εν μέρη) για', - '(partially) reimburses' => 'αποζημιώνει (εν μέρει) για', + 'Paid_name' => 'Πληρωμένο', + 'Refund_name' => 'Επιστροφή χρημάτων', + 'Reimbursement_name' => 'Αποζημίωση', + 'Related_name' => 'Σχετικά', + 'relates to_inward' => 'σχετίζεται με', + 'is (partially) refunded by_inward' => 'έχει επιστραφεί (εν μέρει) από', + 'is (partially) paid for by_inward' => 'έχει πληρωθεί (εν μέρει) από', + 'is (partially) reimbursed by_inward' => 'έχει αποζημιωθεί (εν μέρει) από', + 'inward_transaction' => 'Εσωτερική συναλλαγή', + 'outward_transaction' => 'Εξωτερική συναλλαγή', + 'relates to_outward' => 'σχετίζεται με', + '(partially) refunds_outward' => '(εν μέρει) επιστροφές', + '(partially) pays for_outward' => '(εν μέρει) πληρωμές για', + '(partially) reimburses_outward' => '(εν μέρει) αποζημιώσεις', + 'is (partially) refunded by' => 'έχει επιστραφεί (εν μέρει) από', + 'is (partially) paid for by' => 'έχει πληρωθεί (εν μέρει) από', + 'is (partially) reimbursed by' => 'έχει αποζημιωθεί (εν μέρει) από', + 'relates to' => 'σχετίζεται με', + '(partially) refunds' => 'επιστρέφει (εν μέρει) για', + '(partially) pays for' => 'πληρώνει (εν μέρη) για', + '(partially) reimburses' => 'αποζημιώνει (εν μέρει) για', // split a transaction: - 'splits' => 'Διαχωρισμός', - 'add_another_split' => 'Προσθήκη ενός ακόμα διαχωρισμού', - 'cannot_edit_opening_balance' => 'Δεν μπορείτε να επεξεργαστείτε το υπόλοιπο έναρξης ενός λογαριασμού.', - 'no_edit_multiple_left' => 'Δεν έχετε επιλέξει έγκυρες συναλλαγές για επεξεργασία.', - 'breadcrumb_convert_group' => 'Μετατροπή συναλλαγής', - 'convert_invalid_source' => 'Οι πληροφορίες προέλευσης δεν είναι έγκυρες για τη συναλλαγή #%d.', - 'convert_invalid_destination' => 'Οι πληροφορίες προορισμού δεν είναι έγκυρες για τη συναλλαγή #%d.', - 'create_another' => 'Μετά την αποθήκευση, επιστρέψτε εδώ για να δημιουργήσετε ακόμη ένα.', - 'after_update_create_another' => 'Μετά την ενημέρωση, επιστρέψτε εδώ για να συνεχίσετε την επεξεργασία.', - 'store_as_new' => 'Αποθήκευση ως νέα συναλλαγή αντί για ενημέρωση.', - 'reset_after' => 'Επαναφορά φόρμας μετά την υποβολή', - 'errors_submission' => 'Υπήρξε κάποιο λάθος με την υποβολή σας. Παρακαλώ ελέγξτε τα σφάλματα.', - 'transaction_expand_split' => 'Ανάπτυξη διαχωρισμού', - 'transaction_collapse_split' => 'Σύμπτυξη διαχωρισμού', + 'splits' => 'Διαχωρισμός', + 'add_another_split' => 'Προσθήκη ενός ακόμα διαχωρισμού', + 'cannot_edit_opening_balance' => 'Δεν μπορείτε να επεξεργαστείτε το υπόλοιπο έναρξης ενός λογαριασμού.', + 'no_edit_multiple_left' => 'Δεν έχετε επιλέξει έγκυρες συναλλαγές για επεξεργασία.', + 'breadcrumb_convert_group' => 'Μετατροπή συναλλαγής', + 'convert_invalid_source' => 'Οι πληροφορίες προέλευσης δεν είναι έγκυρες για τη συναλλαγή #%d.', + 'convert_invalid_destination' => 'Οι πληροφορίες προορισμού δεν είναι έγκυρες για τη συναλλαγή #%d.', + 'create_another' => 'Μετά την αποθήκευση, επιστρέψτε εδώ για να δημιουργήσετε ακόμη ένα.', + 'after_update_create_another' => 'Μετά την ενημέρωση, επιστρέψτε εδώ για να συνεχίσετε την επεξεργασία.', + 'store_as_new' => 'Αποθήκευση ως νέα συναλλαγή αντί για ενημέρωση.', + 'reset_after' => 'Επαναφορά φόρμας μετά την υποβολή', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Ανάπτυξη διαχωρισμού', + 'transaction_collapse_split' => 'Σύμπτυξη διαχωρισμού', // object groups - 'default_group_title_name' => '(χωρίς ομάδα)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(χωρίς ομάδα)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Ας δημιουργήσουμε ένα λογαριασμό κεφαλαίου!', - 'no_accounts_intro_asset' => 'Δεν έχετε ακόμα λογαριασμούς κεφαλαίου. Οι κεφαλαιακοί λογαριασμοί είναι οι κύριοι λογαριασμοί σας: ο τρεχούμενος λογαριασμός, ο αποταμιευτικός λογαριασμός, ο κοινόχρηστος λογαριασμός ή ακόμα και η πιστωτική σας κάρτα.', - 'no_accounts_imperative_asset' => 'Για να ξεκινήσετε τη χρήση του Firefly III, πρέπει να δημιουργήσετε τουλάχιστον ένα λογαριασμό κεφαλαίου. Ας το κάνουμε τώρα:', - 'no_accounts_create_asset' => 'Δημιουργία νέου λογαριασμού κεφαλαίου', - 'no_accounts_title_expense' => 'Ας δημιουργήσουμε ένα λογαριασμό δαπανών!', - 'no_accounts_intro_expense' => 'Δεν έχετε ακόμα λογαριασμούς δαπανών. Οι λογαριασμοί δαπανών είναι τα μέρη που ξοδεύετε χρήματα, όπως τα καταστήματα και τα σούπερ μάρκετ.', - 'no_accounts_imperative_expense' => 'Οι λογαριασμοί δαπανών δημιουργούνται αυτόματα όταν δημιουργείτε συναλλαγές, αλλά μπορείτε να δημιουργήσετε ένα και χειροκίνητα αν θέλετε. Ας δημιουργήσουμε ένα τώρα:', - 'no_accounts_create_expense' => 'Δημιουργία νέου λογαριασμού δαπανών', - 'no_accounts_title_revenue' => 'Ας δημιουργήσουμε ένα λογαριασμό εσόδων!', - 'no_accounts_intro_revenue' => 'Δεν έχετε ακόμα λογαριασμούς εσόδων. Οι λογαριασμοί εσόδων είναι αυτοί από τους οποίους λαμβάνετε χρήματα, όπως ο μισθός ή είσπραξη ενοικίων.', - 'no_accounts_imperative_revenue' => 'Οι λογαριασμοί εσόδων δημιουργούνται αυτόματα όταν δημιουργείτε συναλλαγές, αλλά μπορείτε να δημιουργήσετε έναν και χειροκίνητα, αν θέλετε. Ας δημιουργήσουμε έναν τώρα:', - 'no_accounts_create_revenue' => 'Δημιουργία νέου λογαριασμού εσόδων', - 'no_accounts_title_liabilities' => 'Ας δημιουργήσουμε μια υποχρέωση!', - 'no_accounts_intro_liabilities' => 'Δεν έχετε ακόμα υποχρεώσεις. Οι υποχρεώσεις είναι οι λογαριασμοί που καταγράφουν δάνεια και διάφορα άλλα χρέη σας.', - 'no_accounts_imperative_liabilities' => 'Δεν χρειάζεται να χρησιμοποιήσετε αυτή τη λειτουργία, αλλά μπορεί να σας φανεί χρήσιμη εάν θέλετε να επιβλέπετε αυτά τα πράγματα.', - 'no_accounts_create_liabilities' => 'Δημιουργία μιας υποχρέωσης', - 'no_budgets_title_default' => 'Ας δημιουργήσουμε ένα προϋπολογισμό', - 'no_rules_title_default' => 'Ας δημιουργήσουμε ένα κανόνα', - 'no_budgets_intro_default' => 'Δεν έχετε ακόμα προϋπολογισμούς. Οι προϋπολογισμοί χρησιμοποιούνται για την οργάνωση των εξόδων σας σε λογικές ομάδες, στις οποίες μπορείτε να ορίσετε ένα λογικό άνω όριο με σκοπό να περιορίσετε τα έξοδά σας.', - 'no_rules_intro_default' => 'Δεν έχετε κανόνες ακόμα. Οι κανόνες είναι ισχυροί αυτοματισμοί που μπορούν να χειριστούν συναλλαγές για εσάς.', - 'no_rules_imperative_default' => 'Οι κανόνες μπορεί να είναι πολύ χρήσιμοι όταν διαχειρίζεστε συναλλαγές. Ας δημιουργήσουμε τώρα έναν:', - 'no_budgets_imperative_default' => 'Οι προϋπολογισμοί είναι τα βασικά εργαλεία της οικονομικής διαχείρισης. Ας δημιουργήσουμε έναν τώρα:', - 'no_budgets_create_default' => 'Δημιουργία ενός προϋπολογισμού', - 'no_rules_create_default' => 'Δημιουργία κανόνα', - 'no_categories_title_default' => 'Ας δημιουργήσουμε μια κατηγορία!', - 'no_categories_intro_default' => 'Δεν έχετε ακόμα κατηγορίες. Οι κατηγορίες χρησιμοποιούνται για την τελειοποίηση των συναλλαγών σας σημειώνοντας τη συγκεκριμένη κατηγορία τους.', - 'no_categories_imperative_default' => 'Οι κατηγορίες δημιουργούνται αυτόματα όταν δημιουργείτε συναλλαγές, αλλά μπορείτε να δημιουργήσετε μία και χειροκίνητα. Ας δημιουργήσουμε μια τώρα:', - 'no_categories_create_default' => 'Δημιουργία μιας κατηγορίας', - 'no_tags_title_default' => 'Ας δημιουργήσουμε μια ετικέτα!', - 'no_tags_intro_default' => 'Δεν έχετε ακόμα ετικέτες. Οι ετικέτες χρησιμοποιούνται για την τελειοποίηση των συναλλαγών σας σημειώνοντας συγκεκριμένες λέξεις-κλειδιά.', - 'no_tags_imperative_default' => 'Οι ετικέτες δημιουργούνται αυτόματα όταν δημιουργείτε συναλλαγές, αλλά μπορείτε να δημιουργήσετε μια και χειροκίνητα. Ας δημιουργήσουμε μια τώρα:', - 'no_tags_create_default' => 'Δημιουργία νέας ετικέτας', - 'no_transactions_title_withdrawal' => 'Ας δημιουργήσουμε μια δαπάνη!', - 'no_transactions_intro_withdrawal' => 'Δεν έχετε ακόμη δαπάνες. Θα πρέπει να δημιουργήσετε δαπάνες για να ξεκινήσετε τη διαχείριση των οικονομικών σας.', - 'no_transactions_imperative_withdrawal' => 'Έχετε δαπανήσει κάποια χρήματα; Τότε θα πρέπει να το γράψετε:', - 'no_transactions_create_withdrawal' => 'Δημιουργία μιας δαπάνης', - 'no_transactions_title_deposit' => 'Ας δημιουργήσουμε ένα έσοδο!', - 'no_transactions_intro_deposit' => 'Δεν έχετε ακόμη καταχωρημένα έσοδα. Θα πρέπει να εισάγετε κάποια έσοδα για να ξεκινήσετε τη διαχείριση των οικονομικών σας.', - 'no_transactions_imperative_deposit' => 'Έχετε λάβει κάποια χρήματα; Τότε θα πρέπει να το γράψετε:', - 'no_transactions_create_deposit' => 'Δημιουργία κατάθεσης', - 'no_transactions_title_transfers' => 'Ας δημιουργήσουμε μια μεταφορά!', - 'no_transactions_intro_transfers' => 'Δεν έχετε καταχωρήσει μεταφορές. Όταν μετακινείτε χρήματα μεταξύ δύο κεφαλαιακών λογαριασμών, αυτό καταγράφεται ως μια μεταφορά.', - 'no_transactions_imperative_transfers' => 'Έχετε κάνει κάποια μεταφορά χρημάτων; Τότε θα πρέπει να το γράψετε:', - 'no_transactions_create_transfers' => 'Δημιουργία νέας μεταφοράς', - 'no_piggies_title_default' => 'Ας δημιουργήσουμε ένα κουμπαρά!', - 'no_piggies_intro_default' => 'Δεν έχετε ορίσει κάποιο κουμπαρά. Μπορείτε να δημιουργήσετε κουμπαράδες για να καθορίσετε τις αποταμιεύσεις σας και να επιβλέπετε την πρόοδο της εξοικονόμησης.', - 'no_piggies_imperative_default' => 'Έχετε πράγματα για τα οποία εξοικονομείτε χρήματα; Δημιουργήστε ένα κουμπαρά για σωστή επίβλεψη:', - 'no_piggies_create_default' => 'Δημιουργία ενός νέου κουμπαρά', - 'no_bills_title_default' => 'Ας δημιουργήσουμε ένα πάγιο έξοδο!', - 'no_bills_intro_default' => 'Δεν έχετε ακόμα πάγια έξοδα. Μπορείτε να δημιουργήσετε πάγια έξοδα για να επιβλέπετε τις τακτικές δαπάνες, όπως το ενοίκιο ή η ασφάλιση.', - 'no_bills_imperative_default' => 'Έχετε τακτικά τέτοιες χρεώσεις; Δημιουργήστε ένα πάγιο έξοδο για να επιβλέπετε τις πληρωμές σας:', - 'no_bills_create_default' => 'Δημιουργία νέου πάγιου έξοδου', + 'no_accounts_title_asset' => 'Ας δημιουργήσουμε ένα λογαριασμό κεφαλαίου!', + 'no_accounts_intro_asset' => 'Δεν έχετε ακόμα λογαριασμούς κεφαλαίου. Οι κεφαλαιακοί λογαριασμοί είναι οι κύριοι λογαριασμοί σας: ο τρεχούμενος λογαριασμός, ο αποταμιευτικός λογαριασμός, ο κοινόχρηστος λογαριασμός ή ακόμα και η πιστωτική σας κάρτα.', + 'no_accounts_imperative_asset' => 'Για να ξεκινήσετε τη χρήση του Firefly III, πρέπει να δημιουργήσετε τουλάχιστον ένα λογαριασμό κεφαλαίου. Ας το κάνουμε τώρα:', + 'no_accounts_create_asset' => 'Δημιουργία νέου λογαριασμού κεφαλαίου', + 'no_accounts_title_expense' => 'Ας δημιουργήσουμε ένα λογαριασμό δαπανών!', + 'no_accounts_intro_expense' => 'Δεν έχετε ακόμα λογαριασμούς δαπανών. Οι λογαριασμοί δαπανών είναι τα μέρη που ξοδεύετε χρήματα, όπως τα καταστήματα και τα σούπερ μάρκετ.', + 'no_accounts_imperative_expense' => 'Οι λογαριασμοί δαπανών δημιουργούνται αυτόματα όταν δημιουργείτε συναλλαγές, αλλά μπορείτε να δημιουργήσετε ένα και χειροκίνητα αν θέλετε. Ας δημιουργήσουμε ένα τώρα:', + 'no_accounts_create_expense' => 'Δημιουργία νέου λογαριασμού δαπανών', + 'no_accounts_title_revenue' => 'Ας δημιουργήσουμε ένα λογαριασμό εσόδων!', + 'no_accounts_intro_revenue' => 'Δεν έχετε ακόμα λογαριασμούς εσόδων. Οι λογαριασμοί εσόδων είναι αυτοί από τους οποίους λαμβάνετε χρήματα, όπως ο μισθός ή είσπραξη ενοικίων.', + 'no_accounts_imperative_revenue' => 'Οι λογαριασμοί εσόδων δημιουργούνται αυτόματα όταν δημιουργείτε συναλλαγές, αλλά μπορείτε να δημιουργήσετε έναν και χειροκίνητα, αν θέλετε. Ας δημιουργήσουμε έναν τώρα:', + 'no_accounts_create_revenue' => 'Δημιουργία νέου λογαριασμού εσόδων', + 'no_accounts_title_liabilities' => 'Ας δημιουργήσουμε μια υποχρέωση!', + 'no_accounts_intro_liabilities' => 'Δεν έχετε ακόμα υποχρεώσεις. Οι υποχρεώσεις είναι οι λογαριασμοί που καταγράφουν δάνεια και διάφορα άλλα χρέη σας.', + 'no_accounts_imperative_liabilities' => 'Δεν χρειάζεται να χρησιμοποιήσετε αυτή τη λειτουργία, αλλά μπορεί να σας φανεί χρήσιμη εάν θέλετε να επιβλέπετε αυτά τα πράγματα.', + 'no_accounts_create_liabilities' => 'Δημιουργία μιας υποχρέωσης', + 'no_budgets_title_default' => 'Ας δημιουργήσουμε ένα προϋπολογισμό', + 'no_rules_title_default' => 'Ας δημιουργήσουμε ένα κανόνα', + 'no_budgets_intro_default' => 'Δεν έχετε ακόμα προϋπολογισμούς. Οι προϋπολογισμοί χρησιμοποιούνται για την οργάνωση των εξόδων σας σε λογικές ομάδες, στις οποίες μπορείτε να ορίσετε ένα λογικό άνω όριο με σκοπό να περιορίσετε τα έξοδά σας.', + 'no_rules_intro_default' => 'Δεν έχετε κανόνες ακόμα. Οι κανόνες είναι ισχυροί αυτοματισμοί που μπορούν να χειριστούν συναλλαγές για εσάς.', + 'no_rules_imperative_default' => 'Οι κανόνες μπορεί να είναι πολύ χρήσιμοι όταν διαχειρίζεστε συναλλαγές. Ας δημιουργήσουμε τώρα έναν:', + 'no_budgets_imperative_default' => 'Οι προϋπολογισμοί είναι τα βασικά εργαλεία της οικονομικής διαχείρισης. Ας δημιουργήσουμε έναν τώρα:', + 'no_budgets_create_default' => 'Δημιουργία ενός προϋπολογισμού', + 'no_rules_create_default' => 'Δημιουργία κανόνα', + 'no_categories_title_default' => 'Ας δημιουργήσουμε μια κατηγορία!', + 'no_categories_intro_default' => 'Δεν έχετε ακόμα κατηγορίες. Οι κατηγορίες χρησιμοποιούνται για την τελειοποίηση των συναλλαγών σας σημειώνοντας τη συγκεκριμένη κατηγορία τους.', + 'no_categories_imperative_default' => 'Οι κατηγορίες δημιουργούνται αυτόματα όταν δημιουργείτε συναλλαγές, αλλά μπορείτε να δημιουργήσετε μία και χειροκίνητα. Ας δημιουργήσουμε μια τώρα:', + 'no_categories_create_default' => 'Δημιουργία μιας κατηγορίας', + 'no_tags_title_default' => 'Ας δημιουργήσουμε μια ετικέτα!', + 'no_tags_intro_default' => 'Δεν έχετε ακόμα ετικέτες. Οι ετικέτες χρησιμοποιούνται για την τελειοποίηση των συναλλαγών σας σημειώνοντας συγκεκριμένες λέξεις-κλειδιά.', + 'no_tags_imperative_default' => 'Οι ετικέτες δημιουργούνται αυτόματα όταν δημιουργείτε συναλλαγές, αλλά μπορείτε να δημιουργήσετε μια και χειροκίνητα. Ας δημιουργήσουμε μια τώρα:', + 'no_tags_create_default' => 'Δημιουργία νέας ετικέτας', + 'no_transactions_title_withdrawal' => 'Ας δημιουργήσουμε μια δαπάνη!', + 'no_transactions_intro_withdrawal' => 'Δεν έχετε ακόμη δαπάνες. Θα πρέπει να δημιουργήσετε δαπάνες για να ξεκινήσετε τη διαχείριση των οικονομικών σας.', + 'no_transactions_imperative_withdrawal' => 'Έχετε δαπανήσει κάποια χρήματα; Τότε θα πρέπει να το γράψετε:', + 'no_transactions_create_withdrawal' => 'Δημιουργία μιας δαπάνης', + 'no_transactions_title_deposit' => 'Ας δημιουργήσουμε ένα έσοδο!', + 'no_transactions_intro_deposit' => 'Δεν έχετε ακόμη καταχωρημένα έσοδα. Θα πρέπει να εισάγετε κάποια έσοδα για να ξεκινήσετε τη διαχείριση των οικονομικών σας.', + 'no_transactions_imperative_deposit' => 'Έχετε λάβει κάποια χρήματα; Τότε θα πρέπει να το γράψετε:', + 'no_transactions_create_deposit' => 'Δημιουργία κατάθεσης', + 'no_transactions_title_transfers' => 'Ας δημιουργήσουμε μια μεταφορά!', + 'no_transactions_intro_transfers' => 'Δεν έχετε καταχωρήσει μεταφορές. Όταν μετακινείτε χρήματα μεταξύ δύο κεφαλαιακών λογαριασμών, αυτό καταγράφεται ως μια μεταφορά.', + 'no_transactions_imperative_transfers' => 'Έχετε κάνει κάποια μεταφορά χρημάτων; Τότε θα πρέπει να το γράψετε:', + 'no_transactions_create_transfers' => 'Δημιουργία νέας μεταφοράς', + 'no_piggies_title_default' => 'Ας δημιουργήσουμε ένα κουμπαρά!', + 'no_piggies_intro_default' => 'Δεν έχετε ορίσει κάποιο κουμπαρά. Μπορείτε να δημιουργήσετε κουμπαράδες για να καθορίσετε τις αποταμιεύσεις σας και να επιβλέπετε την πρόοδο της εξοικονόμησης.', + 'no_piggies_imperative_default' => 'Έχετε πράγματα για τα οποία εξοικονομείτε χρήματα; Δημιουργήστε ένα κουμπαρά για σωστή επίβλεψη:', + 'no_piggies_create_default' => 'Δημιουργία ενός νέου κουμπαρά', + 'no_bills_title_default' => 'Ας δημιουργήσουμε ένα πάγιο έξοδο!', + 'no_bills_intro_default' => 'Δεν έχετε ακόμα πάγια έξοδα. Μπορείτε να δημιουργήσετε πάγια έξοδα για να επιβλέπετε τις τακτικές δαπάνες, όπως το ενοίκιο ή η ασφάλιση.', + 'no_bills_imperative_default' => 'Έχετε τακτικά τέτοιες χρεώσεις; Δημιουργήστε ένα πάγιο έξοδο για να επιβλέπετε τις πληρωμές σας:', + 'no_bills_create_default' => 'Δημιουργία νέου πάγιου έξοδου', // recurring transactions - 'create_right_now' => 'Δημιουργία αυτή τη στιγμή', - 'no_new_transaction_in_recurrence' => 'Δε δημιουργήθηκε καμία νέα συναλλαγή. Μήπως ενεργοποιήθηκε ήδη για αυτή την ημερομηνία;', - 'recurrences' => 'Επαναλαμβανόμενες συναλλαγές', - 'repeat_until_in_past' => 'Αυτή η επαναλαμβανόμενη συναλλαγή σταμάτησε να επαναλαμβάνεται στις :date.', - 'recurring_calendar_view' => 'Ημερολόγιο', - 'no_recurring_title_default' => 'Ας δημιουργήσουμε μια επαναλαμβανόμενη συναλλαγή!', - 'no_recurring_intro_default' => 'Δεν έχετε ακόμα επαναλαμβανόμενες συναλλαγές. Μπορείτε να τις χρησιμοποιήσετε για να κάνετε το Firefly III να δημιουργεί αυτόματα συναλλαγές για εσάς.', - 'no_recurring_imperative_default' => 'Αυτό είναι ένα αρκετά προηγμένο χαρακτηριστικό αλλά μπορεί να είναι εξαιρετικά χρήσιμο. Βεβαιωθείτε ότι έχετε διαβάσει την τεκμηρίωση στο εικονίδιο (?) επάνω δεξιά γωνία, προτού συνεχίσετε.', - 'no_recurring_create_default' => 'Δημιουργία νέας επαναλαμβανόμενης συναλλαγής', - 'make_new_recurring' => 'Δημιουργία νέας επαναλαμβανόμενης συναλλαγής', - 'recurring_daily' => 'Καθημερινά', - 'recurring_weekly' => 'Κάθε εβδομάδα την :weekday', - 'recurring_weekly_skip' => 'Κάθε :skip(η/α/η/η) εβδομάδα την :weekday', - 'recurring_monthly' => 'Κάθε μήνα την :dayOfMonthη ημέρα', - 'recurring_monthly_skip' => 'Κάθε :skipο μήνα την :dayOfMonthη ημέρα', - 'recurring_ndom' => 'Κάθε μήνα την :dayOfMonthη :weekday', - 'recurring_yearly' => 'Ετήσια στις :date', - 'overview_for_recurrence' => 'Επισκόπηση της επαναλαμβανόμενης συναλλαγής ":title"', - 'warning_duplicates_repetitions' => 'Σε σπάνιες περιπτώσεις, οι ημερομηνίες εμφανίζονται δύο φορές σε αυτήν τη λίστα. Αυτό μπορεί να συμβεί όταν επικαλύπτονται πολλές επαναλήψεις. Το Firefly III θα παράγει πάντα μία συναλλαγή την ημέρα.', - 'created_transactions' => 'Σχετικές συναλλαγές', - 'expected_withdrawals' => 'Αναμενόμενες αναλήψεις', - 'expected_deposits' => 'Αναμενόμενες καταθέσεις', - 'expected_transfers' => 'Αναμενόμενες μεταφορές', - 'created_withdrawals' => 'Δημιουργήθηκαν αναλήψεις', - 'created_deposits' => 'Δημιουργήθηκαν καταθέσεις', - 'created_transfers' => 'Δημιουργήθηκαν μεταφορές', - 'recurring_info' => 'Επαναλαμβανόμενη συναλλαγή :count / :total', - 'created_from_recurrence' => 'Δημιουργήθηκε από την επαναλαμβανόμενη συναλλαγή ":title" (#:id)', - 'recurring_never_cron' => 'Φαίνεται ότι το cron job που είναι απαραίτητο για την υποστήριξη των επαναλαμβανόμενων συναλλαγών δεν έχει τρέξει ποτέ. Αυτό είναι φυσιολογικό εάν έχετε μόλις εγκαταστήσει το Firefly III, αλλά αυτό θα πρέπει να ρυθμιστεί το συντομότερο δυνατό. Ελέγξτε τις σελίδες βοήθειας χρησιμοποιώντας το εικονίδιο (?) στην επάνω δεξιά γωνία της σελίδας.', - 'recurring_cron_long_ago' => 'Φαίνεται ότι έχουν περάσει περισσότερες από 36 ώρες από τότε που το cron job για την υποστήριξη επαναλαμβανόμενων συναλλαγών έχει τρέξει για τελευταία φορά. Είστε βέβαιοι ότι έχει ρυθμιστεί σωστά; Ελέγξτε τις σελίδες βοήθειας χρησιμοποιώντας το εικονίδιο (?) στην επάνω δεξιά γωνία της σελίδας.', + 'create_right_now' => 'Δημιουργία αυτή τη στιγμή', + 'no_new_transaction_in_recurrence' => 'Δε δημιουργήθηκε καμία νέα συναλλαγή. Μήπως ενεργοποιήθηκε ήδη για αυτή την ημερομηνία;', + 'recurrences' => 'Επαναλαμβανόμενες συναλλαγές', + 'repeat_until_in_past' => 'Αυτή η επαναλαμβανόμενη συναλλαγή σταμάτησε να επαναλαμβάνεται στις :date.', + 'recurring_calendar_view' => 'Ημερολόγιο', + 'no_recurring_title_default' => 'Ας δημιουργήσουμε μια επαναλαμβανόμενη συναλλαγή!', + 'no_recurring_intro_default' => 'Δεν έχετε ακόμα επαναλαμβανόμενες συναλλαγές. Μπορείτε να τις χρησιμοποιήσετε για να κάνετε το Firefly III να δημιουργεί αυτόματα συναλλαγές για εσάς.', + 'no_recurring_imperative_default' => 'Αυτό είναι ένα αρκετά προηγμένο χαρακτηριστικό αλλά μπορεί να είναι εξαιρετικά χρήσιμο. Βεβαιωθείτε ότι έχετε διαβάσει την τεκμηρίωση στο εικονίδιο (?) επάνω δεξιά γωνία, προτού συνεχίσετε.', + 'no_recurring_create_default' => 'Δημιουργία νέας επαναλαμβανόμενης συναλλαγής', + 'make_new_recurring' => 'Δημιουργία νέας επαναλαμβανόμενης συναλλαγής', + 'recurring_daily' => 'Καθημερινά', + 'recurring_weekly' => 'Κάθε εβδομάδα την :weekday', + 'recurring_weekly_skip' => 'Κάθε :skip(η/α/η/η) εβδομάδα την :weekday', + 'recurring_monthly' => 'Κάθε μήνα την :dayOfMonthη ημέρα', + 'recurring_monthly_skip' => 'Κάθε :skipο μήνα την :dayOfMonthη ημέρα', + 'recurring_ndom' => 'Κάθε μήνα την :dayOfMonthη :weekday', + 'recurring_yearly' => 'Ετήσια στις :date', + 'overview_for_recurrence' => 'Επισκόπηση της επαναλαμβανόμενης συναλλαγής ":title"', + 'warning_duplicates_repetitions' => 'Σε σπάνιες περιπτώσεις, οι ημερομηνίες εμφανίζονται δύο φορές σε αυτήν τη λίστα. Αυτό μπορεί να συμβεί όταν επικαλύπτονται πολλές επαναλήψεις. Το Firefly III θα παράγει πάντα μία συναλλαγή την ημέρα.', + 'created_transactions' => 'Σχετικές συναλλαγές', + 'expected_withdrawals' => 'Αναμενόμενες αναλήψεις', + 'expected_deposits' => 'Αναμενόμενες καταθέσεις', + 'expected_transfers' => 'Αναμενόμενες μεταφορές', + 'created_withdrawals' => 'Δημιουργήθηκαν αναλήψεις', + 'created_deposits' => 'Δημιουργήθηκαν καταθέσεις', + 'created_transfers' => 'Δημιουργήθηκαν μεταφορές', + 'recurring_info' => 'Επαναλαμβανόμενη συναλλαγή :count / :total', + 'created_from_recurrence' => 'Δημιουργήθηκε από την επαναλαμβανόμενη συναλλαγή ":title" (#:id)', + 'recurring_never_cron' => 'Φαίνεται ότι το cron job που είναι απαραίτητο για την υποστήριξη των επαναλαμβανόμενων συναλλαγών δεν έχει τρέξει ποτέ. Αυτό είναι φυσιολογικό εάν έχετε μόλις εγκαταστήσει το Firefly III, αλλά αυτό θα πρέπει να ρυθμιστεί το συντομότερο δυνατό. Ελέγξτε τις σελίδες βοήθειας χρησιμοποιώντας το εικονίδιο (?) στην επάνω δεξιά γωνία της σελίδας.', + 'recurring_cron_long_ago' => 'Φαίνεται ότι έχουν περάσει περισσότερες από 36 ώρες από τότε που το cron job για την υποστήριξη επαναλαμβανόμενων συναλλαγών έχει τρέξει για τελευταία φορά. Είστε βέβαιοι ότι έχει ρυθμιστεί σωστά; Ελέγξτε τις σελίδες βοήθειας χρησιμοποιώντας το εικονίδιο (?) στην επάνω δεξιά γωνία της σελίδας.', - 'create_new_recurrence' => 'Δημιουργία νέας επαναλαμβανόμενης συναλλαγής', - 'help_first_date' => 'Αναφέρετε την πρώτη αναμενόμενη επανάληψη. Αυτό πρέπει να γίνει σε μελλοντικό χρόνο.', - 'help_first_date_no_past' => 'Αναφέρετε την πρώτη αναμενόμενη επανάληψη. Το Firefly III δεν θα δημιουργήσει συναλλαγές στο παρελθόν.', - 'no_currency' => '(χωρίς νόμισμα)', - 'mandatory_for_recurring' => 'Υποχρεωτικές πληροφορίες επανάληψης', - 'mandatory_for_transaction' => 'Υποχρεωτικές πληροφορίες συναλλαγής', - 'optional_for_recurring' => 'Προαιρετικές πληροφορίες επανάληψης', - 'optional_for_transaction' => 'Προαιρετικές πληροφορίες συναλλαγής', - 'change_date_other_options' => 'Αλλάξτε την "αρχική ημερομηνία" για να δείτε περισσότερες επιλογές.', - 'mandatory_fields_for_tranaction' => 'Αυτές οι τιμές καταλήγουν στις συναλλαγές που θα δημιουργούνται', - 'click_for_calendar' => 'Κάντε κλικ εδώ για ένα ημερολόγιο που σας δείχνει πότε θα επαναληφθεί η συναλλαγή.', - 'repeat_forever' => 'Επανάληψη για πάντα', - 'repeat_until_date' => 'Επανάληψη με ημερομηνία λήξης', - 'repeat_times' => 'Επανάληψη για συγκεκριμένο αριθμό', - 'recurring_skips_one' => 'Κάθε άλλη', - 'recurring_skips_more' => 'Παραλείπει :count εμφανίσεις', - 'store_new_recurrence' => 'Αποθήκευση επαναλαμβανόμενης συναλλαγής', - 'stored_new_recurrence' => 'Η επαναλαμβανόμενη συναλλαγή ":title" αποθηκεύτηκε επιτυχώς.', - 'edit_recurrence' => 'Επεξεργασία επαναλαμβανόμενης συναλλαγής ":title"', - 'recurring_repeats_until' => 'Επαναλαμβάνεται έως τις :date', - 'recurring_repeats_forever' => 'Επαναλαμβάνεται για πάντα', - 'recurring_repeats_x_times' => 'Επαναλαμβάνεται :count φορά|Επαναλαμβάνεται :count φορές', - 'update_recurrence' => 'Ενημέρωση επαναλαμβανόμενης συναλλαγής', - 'updated_recurrence' => 'Ενημερώθηκε η επαναλαμβανόμενη συναλλαγή ":title"', - 'recurrence_is_inactive' => 'Αυτή η επαναλαμβανόμενη συναλλαγή δεν είναι ενεργή και δε θα δημιουργήσει νέες συναλλαγές.', - 'delete_recurring' => 'Διαγραφή επαναλαμβανόμενης συναλλαγής ":title"', - 'new_recurring_transaction' => 'Νέα επαναλαμβανόμενη συναλλαγή', - 'help_weekend' => 'Τι θα πρέπει να κάνει το Firefly III όταν μια επαναλαμβανόμενη συναλλαγή πέφτει σε Σάββατο ή Κυριακή;', - 'do_nothing' => 'Απλά δημιούργησε τη συναλλαγή', - 'skip_transaction' => 'Παράλειψη της εμφάνισης', - 'jump_to_friday' => 'Δημιουργία της συναλλαγής για την προηγούμενη Παρασκευή', - 'jump_to_monday' => 'Δημιουργία της συναλλαγής για την επόμενη Δευτέρα', - 'will_jump_friday' => 'Θα δημιουργηθεί την Παρασκευή αντί για Σαββατοκύριακα.', - 'will_jump_monday' => 'Θα δημιουργηθεί τη Δευτέρα αντί για Σαββατοκύριακο.', - 'except_weekends' => 'Εκτός από τα Σαββατοκύριακα', - 'recurrence_deleted' => 'Η επαναλαμβανόμενη συναλλαγή ":title" διαγράφηκε', + 'create_new_recurrence' => 'Δημιουργία νέας επαναλαμβανόμενης συναλλαγής', + 'help_first_date' => 'Αναφέρετε την πρώτη αναμενόμενη επανάληψη. Αυτό πρέπει να γίνει σε μελλοντικό χρόνο.', + 'help_first_date_no_past' => 'Αναφέρετε την πρώτη αναμενόμενη επανάληψη. Το Firefly III δεν θα δημιουργήσει συναλλαγές στο παρελθόν.', + 'no_currency' => '(χωρίς νόμισμα)', + 'mandatory_for_recurring' => 'Υποχρεωτικές πληροφορίες επανάληψης', + 'mandatory_for_transaction' => 'Υποχρεωτικές πληροφορίες συναλλαγής', + 'optional_for_recurring' => 'Προαιρετικές πληροφορίες επανάληψης', + 'optional_for_transaction' => 'Προαιρετικές πληροφορίες συναλλαγής', + 'change_date_other_options' => 'Αλλάξτε την "αρχική ημερομηνία" για να δείτε περισσότερες επιλογές.', + 'mandatory_fields_for_tranaction' => 'Αυτές οι τιμές καταλήγουν στις συναλλαγές που θα δημιουργούνται', + 'click_for_calendar' => 'Κάντε κλικ εδώ για ένα ημερολόγιο που σας δείχνει πότε θα επαναληφθεί η συναλλαγή.', + 'repeat_forever' => 'Επανάληψη για πάντα', + 'repeat_until_date' => 'Επανάληψη με ημερομηνία λήξης', + 'repeat_times' => 'Επανάληψη για συγκεκριμένο αριθμό', + 'recurring_skips_one' => 'Κάθε άλλη', + 'recurring_skips_more' => 'Παραλείπει :count εμφανίσεις', + 'store_new_recurrence' => 'Αποθήκευση επαναλαμβανόμενης συναλλαγής', + 'stored_new_recurrence' => 'Η επαναλαμβανόμενη συναλλαγή ":title" αποθηκεύτηκε επιτυχώς.', + 'edit_recurrence' => 'Επεξεργασία επαναλαμβανόμενης συναλλαγής ":title"', + 'recurring_repeats_until' => 'Επαναλαμβάνεται έως τις :date', + 'recurring_repeats_forever' => 'Επαναλαμβάνεται για πάντα', + 'recurring_repeats_x_times' => 'Επαναλαμβάνεται :count φορά|Επαναλαμβάνεται :count φορές', + 'update_recurrence' => 'Ενημέρωση επαναλαμβανόμενης συναλλαγής', + 'updated_recurrence' => 'Ενημερώθηκε η επαναλαμβανόμενη συναλλαγή ":title"', + 'recurrence_is_inactive' => 'Αυτή η επαναλαμβανόμενη συναλλαγή δεν είναι ενεργή και δε θα δημιουργήσει νέες συναλλαγές.', + 'delete_recurring' => 'Διαγραφή επαναλαμβανόμενης συναλλαγής ":title"', + 'new_recurring_transaction' => 'Νέα επαναλαμβανόμενη συναλλαγή', + 'help_weekend' => 'Τι θα πρέπει να κάνει το Firefly III όταν μια επαναλαμβανόμενη συναλλαγή πέφτει σε Σάββατο ή Κυριακή;', + 'do_nothing' => 'Απλά δημιούργησε τη συναλλαγή', + 'skip_transaction' => 'Παράλειψη της εμφάνισης', + 'jump_to_friday' => 'Δημιουργία της συναλλαγής για την προηγούμενη Παρασκευή', + 'jump_to_monday' => 'Δημιουργία της συναλλαγής για την επόμενη Δευτέρα', + 'will_jump_friday' => 'Θα δημιουργηθεί την Παρασκευή αντί για Σαββατοκύριακα.', + 'will_jump_monday' => 'Θα δημιουργηθεί τη Δευτέρα αντί για Σαββατοκύριακο.', + 'except_weekends' => 'Εκτός από τα Σαββατοκύριακα', + 'recurrence_deleted' => 'Η επαναλαμβανόμενη συναλλαγή ":title" διαγράφηκε', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Υπόλοιπο (:currency)', - 'box_spent_in_currency' => 'Δαπάνες (:currency)', - 'box_earned_in_currency' => 'Κερδήθηκαν (:currency)', - 'box_budgeted_in_currency' => 'Προϋπολογισμένο (:currency)', - 'box_bill_paid_in_currency' => 'Πληρωμένα πάγια έξοδα (:currency)', - 'box_bill_unpaid_in_currency' => 'Απλήρωτα πάγια έξοδα (:currency)', - 'box_left_to_spend_in_currency' => 'Διαθέσιμα προϋπολογισμών (:currency)', - 'box_net_worth_in_currency' => 'Καθαρή αξία (:currency)', - 'box_spend_per_day' => 'Απομένουν για δαπάνες ανά ημέρα: :amount', + 'box_balance_in_currency' => 'Υπόλοιπο (:currency)', + 'box_spent_in_currency' => 'Δαπάνες (:currency)', + 'box_earned_in_currency' => 'Κερδήθηκαν (:currency)', + 'box_budgeted_in_currency' => 'Προϋπολογισμένο (:currency)', + 'box_bill_paid_in_currency' => 'Πληρωμένα πάγια έξοδα (:currency)', + 'box_bill_unpaid_in_currency' => 'Απλήρωτα πάγια έξοδα (:currency)', + 'box_left_to_spend_in_currency' => 'Διαθέσιμα προϋπολογισμών (:currency)', + 'box_net_worth_in_currency' => 'Καθαρή αξία (:currency)', + 'box_spend_per_day' => 'Απομένουν για δαπάνες ανά ημέρα: :amount', // debug page - 'debug_page' => 'Σελίδα αποσφαλμάτωσης', - 'debug_submit_instructions' => 'Εάν αντιμετωπίζετε προβλήματα, μπορείτε να χρησιμοποιήσετε τις πληροφορίες σε αυτό το πλαίσιο ως πληροφορίες εντοπισμού σφαλμάτων. Αντιγράψτε και επικολλήστε σε νέο ή υπάρχον GitHub issue. Θα δημιουργήσει έναν όμορφο πίνακα που μπορεί να χρησιμοποιηθεί για τη γρήγορη διάγνωση του προβλήματός σας.', - 'debug_pretty_table' => 'Εάν αντιγράψετε / επικολλήσετε το παρακάτω πλαίσιο σε ένα GitHub issue, θα δημιουργήσει ένα πίνακα. Μην περιβάλλετε αυτό το κείμενο με backticks ή εισαγωγικά.', - 'debug_additional_data' => 'Μπορείτε επίσης να μοιραστείτε το περιεχόμενο του παρακάτω πλαισίου. Μπορείτε επίσης να αντιγράψετε και να επικολλήσετε αυτό σε νέο ή υπάρχον GitHub issue. Ωστόσο, το περιεχόμενο αυτού του πλαισίου ενδέχεται να περιέχει ιδιωτικές πληροφορίες, όπως ονόματα λογαριασμών, λεπτομέρειες συναλλαγής ή διευθύνσεις ηλεκτρονικού ταχυδρομείου.', + 'debug_page' => 'Σελίδα αποσφαλμάτωσης', + 'debug_submit_instructions' => 'Εάν αντιμετωπίζετε προβλήματα, μπορείτε να χρησιμοποιήσετε τις πληροφορίες σε αυτό το πλαίσιο ως πληροφορίες εντοπισμού σφαλμάτων. Αντιγράψτε και επικολλήστε σε νέο ή υπάρχον GitHub issue. Θα δημιουργήσει έναν όμορφο πίνακα που μπορεί να χρησιμοποιηθεί για τη γρήγορη διάγνωση του προβλήματός σας.', + 'debug_pretty_table' => 'Εάν αντιγράψετε / επικολλήσετε το παρακάτω πλαίσιο σε ένα GitHub issue, θα δημιουργήσει ένα πίνακα. Μην περιβάλλετε αυτό το κείμενο με backticks ή εισαγωγικά.', + 'debug_additional_data' => 'Μπορείτε επίσης να μοιραστείτε το περιεχόμενο του παρακάτω πλαισίου. Μπορείτε επίσης να αντιγράψετε και να επικολλήσετε αυτό σε νέο ή υπάρχον GitHub issue. Ωστόσο, το περιεχόμενο αυτού του πλαισίου ενδέχεται να περιέχει ιδιωτικές πληροφορίες, όπως ονόματα λογαριασμών, λεπτομέρειες συναλλαγής ή διευθύνσεις ηλεκτρονικού ταχυδρομείου.', // object groups - 'object_groups_menu_bar' => 'Ομάδες', - 'object_groups_page_title' => 'Ομάδες', - 'object_groups_breadcrumb' => 'Ομάδες', - 'object_groups_index' => 'Επισκόπηση', - 'object_groups' => 'Ομάδες', - 'object_groups_empty_explain' => 'Ορισμένα στοιχεία στο Firefly III μπορούν να χωριστούν σε ομάδες. Οι κουμπαράδες, για παράδειγμα, διαθέτουν το πεδίο "Ομάδα" στις οθόνες επεξεργασίας και δημιουργίας. Όταν ορίζετε αυτό το πεδίο, μπορείτε να επεξεργαστείτε τα ονόματα και τη σειρά των ομάδων σε αυτήν τη σελίδα. Για περισσότερες πληροφορίες, ανατρέξτε στις σελίδες βοήθειας στην επάνω δεξιά γωνία, στο εικονίδιο (?).', - 'object_group_title' => 'Τίτλος', - 'edit_object_group' => 'Επεξεργασία ομάδας ":title"', - 'delete_object_group' => 'Διαγραφή ομάδας ":title"', - 'update_object_group' => 'Ενημέρωση ομάδας', - 'updated_object_group' => 'Επιτυχής ενημέρωση της ομάδας ":title"', - 'deleted_object_group' => 'Επιτυχής διαγραφή της ομάδας ":title"', - 'object_group' => 'Ομάδα', + 'object_groups_menu_bar' => 'Ομάδες', + 'object_groups_page_title' => 'Ομάδες', + 'object_groups_breadcrumb' => 'Ομάδες', + 'object_groups_index' => 'Επισκόπηση', + 'object_groups' => 'Ομάδες', + 'object_groups_empty_explain' => 'Ορισμένα στοιχεία στο Firefly III μπορούν να χωριστούν σε ομάδες. Οι κουμπαράδες, για παράδειγμα, διαθέτουν το πεδίο "Ομάδα" στις οθόνες επεξεργασίας και δημιουργίας. Όταν ορίζετε αυτό το πεδίο, μπορείτε να επεξεργαστείτε τα ονόματα και τη σειρά των ομάδων σε αυτήν τη σελίδα. Για περισσότερες πληροφορίες, ανατρέξτε στις σελίδες βοήθειας στην επάνω δεξιά γωνία, στο εικονίδιο (?).', + 'object_group_title' => 'Τίτλος', + 'edit_object_group' => 'Επεξεργασία ομάδας ":title"', + 'delete_object_group' => 'Διαγραφή ομάδας ":title"', + 'update_object_group' => 'Ενημέρωση ομάδας', + 'updated_object_group' => 'Επιτυχής ενημέρωση της ομάδας ":title"', + 'deleted_object_group' => 'Επιτυχής διαγραφή της ομάδας ":title"', + 'object_group' => 'Ομάδα', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Έλεγχος καταχώρησης', - 'ale_action_log_add' => 'Προστέθηκαν :amount στον κουμπαρά ":name"', - 'ale_action_log_remove' => 'Αφαιρέθηκαν :amount από τον κουμπαρά ":name"', - 'ale_action_clear_budget' => 'Αφαιρέθηκε από τον προϋπολογισμό', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Αφαιρέθηκε από την κατηγορία', - 'ale_action_clear_notes' => 'Αφαιρέθηκαν σημειώσεις', - 'ale_action_clear_tag' => 'Αφαίρεση ετικέτας', - 'ale_action_clear_all_tags' => 'Αφαίρεση όλων των ετικετών', - 'ale_action_set_bill' => 'Σύνδεση με πάγιο έξοδο', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Ορισμός προϋπολογισμού', - 'ale_action_set_category' => 'Ορισμός κατηγορίας', - 'ale_action_set_source' => 'Ορισμός λογαριασμού προέλευσης', - 'ale_action_set_destination' => 'Ορισμός λογαριασμού προορισμού', - 'ale_action_update_transaction_type' => 'Αλλαγή τύπου συναλλαγής', - 'ale_action_update_notes' => 'Αλλαγή σημειώσεων', - 'ale_action_update_description' => 'Αλλαγή περιγραφής', - 'ale_action_add_to_piggy' => 'Κουμπαράς', - 'ale_action_remove_from_piggy' => 'Κουμπαράς', - 'ale_action_add_tag' => 'Προστέθηκε ετικέτα', + 'audit_log_entries' => 'Έλεγχος καταχώρησης', + 'ale_action_log_add' => 'Προστέθηκαν :amount στον κουμπαρά ":name"', + 'ale_action_log_remove' => 'Αφαιρέθηκαν :amount από τον κουμπαρά ":name"', + 'ale_action_clear_budget' => 'Αφαιρέθηκε από τον προϋπολογισμό', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Αφαιρέθηκε από την κατηγορία', + 'ale_action_clear_notes' => 'Αφαιρέθηκαν σημειώσεις', + 'ale_action_clear_tag' => 'Αφαίρεση ετικέτας', + 'ale_action_clear_all_tags' => 'Αφαίρεση όλων των ετικετών', + 'ale_action_set_bill' => 'Σύνδεση με πάγιο έξοδο', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Ορισμός προϋπολογισμού', + 'ale_action_set_category' => 'Ορισμός κατηγορίας', + 'ale_action_set_source' => 'Ορισμός λογαριασμού προέλευσης', + 'ale_action_set_destination' => 'Ορισμός λογαριασμού προορισμού', + 'ale_action_update_transaction_type' => 'Αλλαγή τύπου συναλλαγής', + 'ale_action_update_notes' => 'Αλλαγή σημειώσεων', + 'ale_action_update_description' => 'Αλλαγή περιγραφής', + 'ale_action_add_to_piggy' => 'Κουμπαράς', + 'ale_action_remove_from_piggy' => 'Κουμπαράς', + 'ale_action_add_tag' => 'Προστέθηκε ετικέτα', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/el_GR/form.php b/resources/lang/el_GR/form.php index 094f3ee898..9a845e7eeb 100644 --- a/resources/lang/el_GR/form.php +++ b/resources/lang/el_GR/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Όνομα τράπεζας', - 'bank_balance' => 'Υπόλοιπο', - 'savings_balance' => 'Υπόλοιπο αποταμιεύσεων', - 'credit_card_limit' => 'Όριο πιστωτικής κάρτας', - 'automatch' => 'Αυτόματο ταίριασμα', - 'skip' => 'Παράλειψη', - 'enabled' => 'Ενεργοποιημένο', - 'name' => 'Όνομα', - 'active' => 'Ενεργό', - 'amount_min' => 'Ελάχιστο ποσό', - 'amount_max' => 'Μέγιστο ποσό', - 'match' => 'Αντιστοιχίες στις', - 'strict' => 'Αυστηρή λειτουργία', - 'repeat_freq' => 'Επαναλήψεις', - 'object_group' => 'Ομάδα', - 'location' => 'Τοποθεσία', - 'update_channel' => 'Κανάλι ενημερώσεων', - 'currency_id' => 'Νόμισμα', - 'transaction_currency_id' => 'Νόμισμα', - 'auto_budget_currency_id' => 'Νόμισμα', - 'external_ip' => 'Η εξωτερική IP του εξυπηρετητή σας', - 'attachments' => 'Συνημμένα', - 'BIC' => 'BIC', - 'verify_password' => 'Επιβεβαίωση ασφάλειας κωδικού', - 'source_account' => 'Λογαριασμός προέλευσης', - 'destination_account' => 'Λογαριασμός προορισμού', - 'asset_destination_account' => 'Λογαριασμός προορισμού', - 'include_net_worth' => 'Εντός καθαρής αξίας', - 'asset_source_account' => 'Λογαριασμός προέλευσης', - 'journal_description' => 'Περιγραφή', - 'note' => 'Σημειώσεις', - 'currency' => 'Νόμισμα', - 'account_id' => 'Λογαριασμός κεφαλαίου', - 'budget_id' => 'Προϋπολογισμός', - 'bill_id' => 'Πάγιο έξοδο', - 'opening_balance' => 'Υπόλοιπο έναρξης', - 'tagMode' => 'Λειτουργία ετικέτας', - 'virtual_balance' => 'Εικονικό υπόλοιπο', + 'bank_name' => 'Όνομα τράπεζας', + 'bank_balance' => 'Υπόλοιπο', + 'savings_balance' => 'Υπόλοιπο αποταμιεύσεων', + 'credit_card_limit' => 'Όριο πιστωτικής κάρτας', + 'automatch' => 'Αυτόματο ταίριασμα', + 'skip' => 'Παράλειψη', + 'enabled' => 'Ενεργοποιημένο', + 'name' => 'Όνομα', + 'active' => 'Ενεργό', + 'amount_min' => 'Ελάχιστο ποσό', + 'amount_max' => 'Μέγιστο ποσό', + 'match' => 'Αντιστοιχίες στις', + 'strict' => 'Αυστηρή λειτουργία', + 'repeat_freq' => 'Επαναλήψεις', + 'object_group' => 'Ομάδα', + 'location' => 'Τοποθεσία', + 'update_channel' => 'Κανάλι ενημερώσεων', + 'currency_id' => 'Νόμισμα', + 'transaction_currency_id' => 'Νόμισμα', + 'auto_budget_currency_id' => 'Νόμισμα', + 'external_ip' => 'Η εξωτερική IP του εξυπηρετητή σας', + 'attachments' => 'Συνημμένα', + 'BIC' => 'BIC', + 'verify_password' => 'Επιβεβαίωση ασφάλειας κωδικού', + 'source_account' => 'Λογαριασμός προέλευσης', + 'destination_account' => 'Λογαριασμός προορισμού', + 'asset_destination_account' => 'Λογαριασμός προορισμού', + 'include_net_worth' => 'Εντός καθαρής αξίας', + 'asset_source_account' => 'Λογαριασμός προέλευσης', + 'journal_description' => 'Περιγραφή', + 'note' => 'Σημειώσεις', + 'currency' => 'Νόμισμα', + 'account_id' => 'Λογαριασμός κεφαλαίου', + 'budget_id' => 'Προϋπολογισμός', + 'bill_id' => 'Πάγιο έξοδο', + 'opening_balance' => 'Υπόλοιπο έναρξης', + 'tagMode' => 'Λειτουργία ετικέτας', + 'virtual_balance' => 'Εικονικό υπόλοιπο', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Ποσό στόχου', 'account_role' => 'Ρόλος λογαριασμού', 'opening_balance_date' => 'Ημερομηνία υπολοίπου έναρξης', @@ -147,7 +145,7 @@ return [ 'start_date' => 'Αρχή του εύρους', 'end_date' => 'Τέλος του εύρους', 'enddate' => 'Ημερομηνία λήξης', - 'move_rules_before_delete' => 'Rule group', + 'move_rules_before_delete' => 'Ομάδα κανόνων', 'start' => 'Αρχή του εύρους', 'end' => 'Τέλος του εύρους', 'delete_account' => 'Διαγραφή λογαριασμού ":name"', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Είστε σίγουροι ότι θέλετε να διαγράψετε τη συναλλαγή με περιγραφή ":description";', 'mass_journal_are_you_sure' => 'Είστε σίγουροι ότι θέλετε να διαγράψετε αυτές τις συναλλαγές;', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Είστε σίγουροι ότι θέλετε να διαγράψετε την ετικέτα ":tag";', 'journal_link_areYouSure' => 'Είστε σίγουροι ότι θέλετε να διαγράψετε το σύνδεσμο μεταξύ :source και :destination;', 'linkType_areYouSure' => 'Είστε σίγουροι ότι θέλετε να διαγράψετε τον τύπο συνδέσμου ":name" (":inward" / ":outward");', @@ -230,7 +227,6 @@ return [ 'album' => 'Άλμπουμ', 'song' => 'Τραγούδι', - // admin 'domain' => 'Τομέας (Domain)', 'single_user_mode' => 'Απενεργοποίηση εγγραφής χρήστη', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Λογαριασμός FinTS', 'local_account' => 'Λογαριασμός Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Από ημερομηνία', - 'to_date' => 'Εώς ημερομηνία', - 'due_date' => 'Ημερομηνία προθεσμίας', - 'payment_date' => 'Ημερομηνία πληρωμής', - 'invoice_date' => 'Ημερομηνία τιμολόγησης', - 'internal_reference' => 'Εσωτερική αναφορά', - 'inward' => 'Εσωτερική περιγραφή', - 'outward' => 'Εξωτερική περιγραφή', - 'rule_group_id' => 'Ομάδα κανόνων', - 'transaction_description' => 'Περιγραφή συναλλαγής', - 'first_date' => 'Πρώτη ημερομηνία', - 'transaction_type' => 'Τύπος συναλλαγής', - 'repeat_until' => 'Επανάληψη εώς', - 'recurring_description' => 'Περιγραφή επαναλαμβανόμενης συναλλαγής', - 'repetition_type' => 'Τύπος επανάληψης', - 'foreign_currency_id' => 'Ξένο νόμισμα', - 'repetition_end' => 'Τέλος επανάληψης', - 'repetitions' => 'Επαναλήψεις', - 'calendar' => 'Ημερολόγιο', - 'weekend' => 'Σαββατοκύριακο', - 'client_secret' => 'Μυστικό πελάτη', - 'withdrawal_destination_id' => 'Λογαριασμός προορισμού', - 'deposit_source_id' => 'Λογαριασμός προέλευσης', - 'expected_on' => 'Αναμένεται στις', - 'paid' => 'Πληρώθηκε', - 'auto_budget_type' => 'Αυτόματος προϋπολογισμός', - 'auto_budget_amount' => 'Ποσό αυτόματου προϋπολογισμού', - 'auto_budget_period' => 'Περίοδος αυτόματου προϋπολογισμού', - 'collected' => 'Συλλέχθηκε', - 'submitted' => 'Υποβλήθηκε', - 'key' => 'Κλειδί', - 'value' => 'Περιεχόμενο της εγγραφής', - 'webhook_delivery' => 'Παράδοση', - 'webhook_response' => 'Απόκριση', - 'webhook_trigger' => 'Ενεργοποίηση', + 'from_date' => 'Από ημερομηνία', + 'to_date' => 'Εώς ημερομηνία', + 'due_date' => 'Ημερομηνία προθεσμίας', + 'payment_date' => 'Ημερομηνία πληρωμής', + 'invoice_date' => 'Ημερομηνία τιμολόγησης', + 'internal_reference' => 'Εσωτερική αναφορά', + 'inward' => 'Εσωτερική περιγραφή', + 'outward' => 'Εξωτερική περιγραφή', + 'rule_group_id' => 'Ομάδα κανόνων', + 'transaction_description' => 'Περιγραφή συναλλαγής', + 'first_date' => 'Πρώτη ημερομηνία', + 'transaction_type' => 'Τύπος συναλλαγής', + 'repeat_until' => 'Επανάληψη εώς', + 'recurring_description' => 'Περιγραφή επαναλαμβανόμενης συναλλαγής', + 'repetition_type' => 'Τύπος επανάληψης', + 'foreign_currency_id' => 'Ξένο νόμισμα', + 'repetition_end' => 'Τέλος επανάληψης', + 'repetitions' => 'Επαναλήψεις', + 'calendar' => 'Ημερολόγιο', + 'weekend' => 'Σαββατοκύριακο', + 'client_secret' => 'Μυστικό πελάτη', + 'withdrawal_destination_id' => 'Λογαριασμός προορισμού', + 'deposit_source_id' => 'Λογαριασμός προέλευσης', + 'expected_on' => 'Αναμένεται στις', + 'paid' => 'Πληρώθηκε', + 'auto_budget_type' => 'Αυτόματος προϋπολογισμός', + 'auto_budget_amount' => 'Ποσό αυτόματου προϋπολογισμού', + 'auto_budget_period' => 'Περίοδος αυτόματου προϋπολογισμού', + 'collected' => 'Συλλέχθηκε', + 'submitted' => 'Υποβλήθηκε', + 'key' => 'Κλειδί', + 'value' => 'Περιεχόμενο της εγγραφής', + 'webhook_delivery' => 'Παράδοση', + 'webhook_response' => 'Απόκριση', + 'webhook_trigger' => 'Ενεργοποίηση', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/el_GR/intro.php b/resources/lang/el_GR/intro.php index 2339b330e7..a1a9acd7d9 100644 --- a/resources/lang/el_GR/intro.php +++ b/resources/lang/el_GR/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Καλωσορίσατε στην αρχική σελίδα του Firefly III. Παρακαλούμε πάρτε το χρόνο σας με αυτή την εισαγωγή για να κατανοήσετε πως λειτουργεί το Firefly III.', - 'index_accounts-chart' => 'Αυτό το γράφημα δείχνει τo τρέχων υπόλοιπο των ενεργών λογαριασμών σας. Μπορείτε να επιλέξετε τους λογαριασμούς που εμφανίζονται εδώ στις προτιμήσεις σας.', - 'index_box_out_holder' => 'Αυτό το κουτάκι επιλογής καθώς και τα παρακείμενα, θα σας δώσουν μια σύνοψη της οικονομικής σας κατάστασης.', - 'index_help' => 'Εάν ποτέ χρειαστείτε βοήθεια με μια σελίδα ή φόρμα, πιέστε αυτό το κουμπί.', - 'index_outro' => 'Οι περισσότερες σελίδες του Firefly III θα ξεκινήσουν με μια μικρή περιήγηση όπως αυτή. Παρακαλώ επικοινωνήστε μαζί μου όταν έχετε ερωτήσεις ή σχόλια. Απολαύστε!', - 'index_sidebar-toggle' => 'Για τη δημιουργία νέων συναλλαγών, λογαριασμών ή άλλων αντικειμένων, χρησιμοποιήστε το μενού κάτω από αυτό το εικονίδιο.', - 'index_cash_account' => 'Αυτοί είναι οι δημιουργημένοι λογαριασμοί ως τώρα. Μπορείτε να χρησιμοποιήσετε το λογαριασμό μετρητών για καταγραφή δαπανών αλλά δεν είναι και υποχρεωτικό.', + 'index_intro' => 'Καλωσορίσατε στην αρχική σελίδα του Firefly III. Παρακαλούμε πάρτε το χρόνο σας με αυτή την εισαγωγή για να κατανοήσετε πως λειτουργεί το Firefly III.', + 'index_accounts-chart' => 'Αυτό το γράφημα δείχνει τo τρέχων υπόλοιπο των ενεργών λογαριασμών σας. Μπορείτε να επιλέξετε τους λογαριασμούς που εμφανίζονται εδώ στις προτιμήσεις σας.', + 'index_box_out_holder' => 'Αυτό το κουτάκι επιλογής καθώς και τα παρακείμενα, θα σας δώσουν μια σύνοψη της οικονομικής σας κατάστασης.', + 'index_help' => 'Εάν ποτέ χρειαστείτε βοήθεια με μια σελίδα ή φόρμα, πιέστε αυτό το κουμπί.', + 'index_outro' => 'Οι περισσότερες σελίδες του Firefly III θα ξεκινήσουν με μια μικρή περιήγηση όπως αυτή. Παρακαλώ επικοινωνήστε μαζί μου όταν έχετε ερωτήσεις ή σχόλια. Απολαύστε!', + 'index_sidebar-toggle' => 'Για τη δημιουργία νέων συναλλαγών, λογαριασμών ή άλλων αντικειμένων, χρησιμοποιήστε το μενού κάτω από αυτό το εικονίδιο.', + 'index_cash_account' => 'Αυτοί είναι οι δημιουργημένοι λογαριασμοί ως τώρα. Μπορείτε να χρησιμοποιήσετε το λογαριασμό μετρητών για καταγραφή δαπανών αλλά δεν είναι και υποχρεωτικό.', // transactions - 'transactions_create_basic_info' => 'Εισαγάγετε τις βασικές πληροφορίες για τη συναλλαγή σας. Προέλευση, προορισμός, ημερομηνία και περιγραφή.', - 'transactions_create_amount_info' => 'Εισαγάγετε το ποσό της συναλλαγής. Εάν είναι απαραίτητο, τα πεδία θα ενημερώνονται αυτόματα για πληροφορίες ξένου ποσού.', - 'transactions_create_optional_info' => 'Όλα αυτά τα πεδία είναι προαιρετικά. Η προσθήκη μετα-δεδομένων εδώ οργανώσει καλύτερα τις συναλλαγές σας.', - 'transactions_create_split' => 'Εάν θέλετε να διαχωρίσετε μια συναλλαγή, προσθέστε περισσότερους διαχωρισμούς με αυτό το κουμπί', + 'transactions_create_basic_info' => 'Εισαγάγετε τις βασικές πληροφορίες για τη συναλλαγή σας. Προέλευση, προορισμός, ημερομηνία και περιγραφή.', + 'transactions_create_amount_info' => 'Εισαγάγετε το ποσό της συναλλαγής. Εάν είναι απαραίτητο, τα πεδία θα ενημερώνονται αυτόματα για πληροφορίες ξένου ποσού.', + 'transactions_create_optional_info' => 'Όλα αυτά τα πεδία είναι προαιρετικά. Η προσθήκη μετα-δεδομένων εδώ οργανώσει καλύτερα τις συναλλαγές σας.', + 'transactions_create_split' => 'Εάν θέλετε να διαχωρίσετε μια συναλλαγή, προσθέστε περισσότερους διαχωρισμούς με αυτό το κουμπί', // create account: - 'accounts_create_iban' => 'Δώστε στους λογαριασμού σας έναν έγκυρο IBAN. Αυτό θα κάνει την εισαγωγή δεδομένων πολύ πιο εύκολη στο μέλλον.', - 'accounts_create_asset_opening_balance' => 'Οι λογαριασμοί κεφαλαίου μπορεί να έχουν ένα "υπόλοιπο έναρξης", καταδεικνύοντας την αρχή του ιστορικού αυτού του λογαριασμού στο Firefly III.', - 'accounts_create_asset_currency' => 'Το Firefly III υποστηρίζει πολλαπλά νομίσματα. Οι λογαριασμοί κεφαλαίου έχουν ένα κύριο νόμισμα, που πρέπει να ορίσετε εδώ.', - 'accounts_create_asset_virtual' => 'Κάποιες φορές βοηθάει να δώσετε στο λογαριασμό σας ένα εικονικό υπόλοιπο: ένα έξτρα ποσό πάντα προστίθεται ή αφαιρείται από το πραγματικό υπόλοιπο.', + 'accounts_create_iban' => 'Δώστε στους λογαριασμού σας έναν έγκυρο IBAN. Αυτό θα κάνει την εισαγωγή δεδομένων πολύ πιο εύκολη στο μέλλον.', + 'accounts_create_asset_opening_balance' => 'Οι λογαριασμοί κεφαλαίου μπορεί να έχουν ένα "υπόλοιπο έναρξης", καταδεικνύοντας την αρχή του ιστορικού αυτού του λογαριασμού στο Firefly III.', + 'accounts_create_asset_currency' => 'Το Firefly III υποστηρίζει πολλαπλά νομίσματα. Οι λογαριασμοί κεφαλαίου έχουν ένα κύριο νόμισμα, που πρέπει να ορίσετε εδώ.', + 'accounts_create_asset_virtual' => 'Κάποιες φορές βοηθάει να δώσετε στο λογαριασμό σας ένα εικονικό υπόλοιπο: ένα έξτρα ποσό πάντα προστίθεται ή αφαιρείται από το πραγματικό υπόλοιπο.', // budgets index - 'budgets_index_intro' => 'Οι προϋπολογισμοί χρησιμοποιούνται για τη διαχείριση των οικονομικών σας και σχηματίζουν μία από τις κεντρικές λειτουργίες του Firefly III.', - 'budgets_index_set_budget' => 'Ορίστε το συνολικό σας προϋπολογισμό για κάθε περίοδο ώστε να μπορεί το Firefly III να σας πει εάν έχετε προϋπολογίσει όλα τα διαθέσιμα χρήματα.', - 'budgets_index_see_expenses_bar' => 'Το ξόδεμα των χρημάτων θα γεμίσει σιγά σιγά αυτή την μπάρα.', - 'budgets_index_navigate_periods' => 'Περιηγηθείτε ανάμεσα σε περιόδους για να ορίσετε εύκολα προϋπολογισμούς πριν την ώρα τους.', - 'budgets_index_new_budget' => 'Δημιουργήστε νέους προϋπολογισμούς κατά βούληση.', - 'budgets_index_list_of_budgets' => 'Χρησιμοποιήστε αυτό τον πίνακα για να ορίσετε τα ποσά για κάθε προϋπολογισμό και την πρόοδό σας.', - 'budgets_index_outro' => 'Για να μάθετε περισσότερα για προϋπολογισμούς, ελέγξτε το εικονίδιο βοήθειας στην επάνω δεξιά γωνία.', + 'budgets_index_intro' => 'Οι προϋπολογισμοί χρησιμοποιούνται για τη διαχείριση των οικονομικών σας και σχηματίζουν μία από τις κεντρικές λειτουργίες του Firefly III.', + 'budgets_index_see_expenses_bar' => 'Το ξόδεμα των χρημάτων θα γεμίσει σιγά σιγά αυτή την μπάρα.', + 'budgets_index_navigate_periods' => 'Περιηγηθείτε ανάμεσα σε περιόδους για να ορίσετε εύκολα προϋπολογισμούς πριν την ώρα τους.', + 'budgets_index_new_budget' => 'Δημιουργήστε νέους προϋπολογισμούς κατά βούληση.', + 'budgets_index_list_of_budgets' => 'Χρησιμοποιήστε αυτό τον πίνακα για να ορίσετε τα ποσά για κάθε προϋπολογισμό και την πρόοδό σας.', + 'budgets_index_outro' => 'Για να μάθετε περισσότερα για προϋπολογισμούς, ελέγξτε το εικονίδιο βοήθειας στην επάνω δεξιά γωνία.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Χρησιμοποιήστε αυτές τις αναφορές για να λάβετε λεπτομερείς πληροφορίες για τα οικονομικά σας.', - 'reports_index_inputReportType' => 'Επιλέξτε έναν τύπο αναφοράς. Ελέγξτε τις σελίδες βοήθειας για να δείτε τι εμφανίζει ή κάθε αναφορά.', - 'reports_index_inputAccountsSelect' => 'Μπορείτε να παραλείψετε ή να συμπεριλάβετε λογαριασμούς κεφαλαίου κατά βούληση.', - 'reports_index_inputDateRange' => 'Το επιλεγμένο χρονικό διάστημα εξαρτάται αποκλειστικά από εσάς: από μία ημέρα έως 10 χρόνια.', - 'reports_index_extra-options-box' => 'Αναλόγως της αναφοράς που έχετε επιλέξει, μπορείτε να επιλέξετε επιπλέον φίλτρα και επιλογές εδώ. Δείτε αυτό το κουτάκι επιλογής όταν αλλάζετε τον τύπο αναφοράς.', + 'reports_index_intro' => 'Χρησιμοποιήστε αυτές τις αναφορές για να λάβετε λεπτομερείς πληροφορίες για τα οικονομικά σας.', + 'reports_index_inputReportType' => 'Επιλέξτε έναν τύπο αναφοράς. Ελέγξτε τις σελίδες βοήθειας για να δείτε τι εμφανίζει ή κάθε αναφορά.', + 'reports_index_inputAccountsSelect' => 'Μπορείτε να παραλείψετε ή να συμπεριλάβετε λογαριασμούς κεφαλαίου κατά βούληση.', + 'reports_index_inputDateRange' => 'Το επιλεγμένο χρονικό διάστημα εξαρτάται αποκλειστικά από εσάς: από μία ημέρα έως και περισσότερο από 10 χρόνια.', + 'reports_index_extra-options-box' => 'Αναλόγως της αναφοράς που έχετε επιλέξει, μπορείτε να επιλέξετε επιπλέον φίλτρα και επιλογές εδώ. Δείτε αυτό το κουτάκι επιλογής όταν αλλάζετε τον τύπο αναφοράς.', // reports (reports) - 'reports_report_default_intro' => 'Αυτή η αναφορά σας δίνει μια γρήγορη και εμπεριστατωμένη σύνοψη των οικονομικών σας. Εάν επιθυμείτε να βλέπετε και κάτι άλλο, παρακαλώ μη διστάσετε να επικοινωνήσετε μαζί μου!', - 'reports_report_audit_intro' => 'Αυτή η αναφορά θα σας δώσει λεπτομερείς πληροφορίες για τους λογαριασμούς κεφαλαίου που έχετε.', - 'reports_report_audit_optionsBox' => 'Χρησιμοποιήστε τα κουτάκια επιλογής για την εμφάνιση ή απόκρυψη στηλών που σας ενδιαφέρουν.', + 'reports_report_default_intro' => 'Αυτή η αναφορά σας δίνει μια γρήγορη και εμπεριστατωμένη σύνοψη των οικονομικών σας. Εάν επιθυμείτε να βλέπετε και κάτι άλλο, παρακαλώ μη διστάσετε να επικοινωνήσετε μαζί μου!', + 'reports_report_audit_intro' => 'Αυτή η αναφορά θα σας δώσει λεπτομερείς πληροφορίες για τους λογαριασμούς κεφαλαίου που έχετε.', + 'reports_report_audit_optionsBox' => 'Χρησιμοποιήστε τα κουτάκια επιλογής για την εμφάνιση ή απόκρυψη στηλών που σας ενδιαφέρουν.', - 'reports_report_category_intro' => 'Αυτή η αναφορά θα σας δώσει πληροφορίες για μία ή περισσότερες κατηγορίες.', - 'reports_report_category_pieCharts' => 'Αυτά τα γραφήματα θα σας δώσουν πληροφορίες για δαπάνες και έσοδα ανά κατηγορία ή ανά λογαριασμό.', - 'reports_report_category_incomeAndExpensesChart' => 'Αυτό το γράφημα σας δείχνει δαπάνες και έσοδα ανά κατηγορία.', + 'reports_report_category_intro' => 'Αυτή η αναφορά θα σας δώσει πληροφορίες για μία ή περισσότερες κατηγορίες.', + 'reports_report_category_pieCharts' => 'Αυτά τα γραφήματα θα σας δώσουν πληροφορίες για δαπάνες και έσοδα ανά κατηγορία ή ανά λογαριασμό.', + 'reports_report_category_incomeAndExpensesChart' => 'Αυτό το γράφημα σας δείχνει δαπάνες και έσοδα ανά κατηγορία.', - 'reports_report_tag_intro' => 'Αυτή η αναφορά θα σας δώσει πληροφορίες για μία ή περισσότερες ετικέτες.', - 'reports_report_tag_pieCharts' => 'Αυτά τα γραφήματα θα σας δώσουν πληροφορίες για δαπάνες και έσοδα ανά ετικέτα, λογαριασμό, κατηγορία ή προϋπολογισμό.', - 'reports_report_tag_incomeAndExpensesChart' => 'Αυτό το γράφημα σας δείχνει δαπάνες και έσοδα ανά ετικέτα.', + 'reports_report_tag_intro' => 'Αυτή η αναφορά θα σας δώσει πληροφορίες για μία ή περισσότερες ετικέτες.', + 'reports_report_tag_pieCharts' => 'Αυτά τα γραφήματα θα σας δώσουν πληροφορίες για δαπάνες και έσοδα ανά ετικέτα, λογαριασμό, κατηγορία ή προϋπολογισμό.', + 'reports_report_tag_incomeAndExpensesChart' => 'Αυτό το γράφημα σας δείχνει δαπάνες και έσοδα ανά ετικέτα.', 'reports_report_budget_intro' => 'Αυτή η αναφορά θα σας δώσει πληροφορίες για ένα ή περισσότερους προϋπολογισμούς.', 'reports_report_budget_pieCharts' => 'Αυτά τα γραφήματα θα σας δώσουν πληροφορίες για δαπάνες ανά προϋπολογισμό ή ανά λογαριασμό.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Διπλά από αυτή τη γραμμή προόδου υπάρχουν δύο κουμπιά (+ και -) για να προσθέσετε ή να αφαιρέσετε χρήματα από κάθε κουμπαρά.', 'piggy-banks_index_accountStatus' => 'Πίνακας κατάστασης για κάθε πάγιο λογαριασμό με τουλάχιστον ένα κουμπαρά.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Ποιός είναι ο στόχος σας; Ένας νέος καναπές, μια κάμερα, χρήματα για έκτακτες ανάγκες;', 'piggy-banks_create_date' => 'Μπορείτε να ορίσετε μια ημερομηνία επίτευξης στόχου ή μια προθεσμία για τον κουμπαρά σας.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Χρησιμοποιήστε πάγια έξοδα για να παρακολουθήσετε το ποσό των οφειλόμενων χρημάτων κάθε περιόδου. Σκεφθείτε πάγιες δαπάνες όπως ενοίκιο, ασφάλεια ή πληρωμές δόσεων.', 'bills_create_name' => 'Χρησιμοποιήστε ένα περιγραφικό όνομα όπως "Ενοίκιο" ή "Ασφάλεια υγείας".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Επιλέξτε ένα ελάχιστο και μέγιστο ποσό για αυτό το πάγιο έξοδο.', 'bills_create_repeat_freq_holder' => 'Τα πιο πολλά πάγια έξοδα επαναλαμβάνονται μηνιαίως, εδώ όμως μπορείτε να ορίσετε μια άλλη συχνότητα επανάληψης.', 'bills_create_skip_holder' => 'Εάν ένα πάγιο έξοδο επαναλαμβάνεται κάθε 2 εβδομάδες, το πεδίο "παράληψη" πρέπει να οριστεί σε "1" για την παράλειψη κάθε άλλης εβδομάδας.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Χρησιμοποιήστε αυτό το κουμπί για να δείτε ποιές συναλλαγές θα ταίριαζαν με τον κανόνα σας.', 'rules_create_actions' => 'Ορίστε όσες ενέργειες επιθυμείτε.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Περισσότερες επιλογές είναι διαθέσιμες πίσω από αυτές τις καρτέλες.', diff --git a/resources/lang/el_GR/list.php b/resources/lang/el_GR/list.php index 53bc8151d1..5a5408a9c8 100644 --- a/resources/lang/el_GR/list.php +++ b/resources/lang/el_GR/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Κουμπιά', - 'icon' => 'Εικονίδιο', - 'id' => 'ID', - 'create_date' => 'Δημιουργήθηκε στις', - 'update_date' => 'Ενημερώθηκε στις', - 'updated_at' => 'Ενημερώθηκε στις', - 'balance_before' => 'Υπόλοιπο πριν', - 'balance_after' => 'Υπόλοιπο μετά', - 'name' => 'Όνομα', - 'role' => 'Ρόλος', - 'currentBalance' => 'Τρέχον υπόλοιπο', - 'linked_to_rules' => 'Σχετικοί κανόνες', - 'active' => 'Είναι ενεργό;', - 'percentage' => 'pct.', - 'recurring_transaction' => 'Επαναλαμβανόμενη συναλλαγή', - 'next_due' => 'Επόμενη προθεσμία', - 'transaction_type' => 'Τύπος', - 'lastActivity' => 'Τελευταία δραστηριότητα', - 'balanceDiff' => 'Διαφορά υπολοίπου', - 'other_meta_data' => 'Άλλα μετα-δεδομένα', - 'invited_at' => 'Προσκλήθηκε στις', - 'expires' => 'Η πρόσκληση λήγει', - 'invited_by' => 'Προσκλήθηκε από', - 'invite_link' => 'Σύνδεσμος πρόσκλησης', - 'account_type' => 'Τύπος λογαριασμού', - 'created_at' => 'Δημιουργήθηκε στις', - 'account' => 'Λογαριασμός', - 'external_url' => 'Εξωτερικό URL', - 'matchingAmount' => 'Ποσό', - 'destination' => 'Προορισμός', - 'source' => 'Προέλευση', - 'next_expected_match' => 'Επόμενη αναμενόμενη αντιστοίχιση', - 'automatch' => 'Αυτόματη αντιστοίχιση;', + 'buttons' => 'Κουμπιά', + 'icon' => 'Εικονίδιο', + 'id' => 'ID', + 'create_date' => 'Δημιουργήθηκε στις', + 'update_date' => 'Ενημερώθηκε στις', + 'updated_at' => 'Ενημερώθηκε στις', + 'balance_before' => 'Υπόλοιπο πριν', + 'balance_after' => 'Υπόλοιπο μετά', + 'name' => 'Όνομα', + 'role' => 'Ρόλος', + 'currentBalance' => 'Τρέχον υπόλοιπο', + 'linked_to_rules' => 'Σχετικοί κανόνες', + 'active' => 'Είναι ενεργό;', + 'percentage' => 'pct.', + 'recurring_transaction' => 'Επαναλαμβανόμενη συναλλαγή', + 'next_due' => 'Επόμενη προθεσμία', + 'transaction_type' => 'Τύπος', + 'lastActivity' => 'Τελευταία δραστηριότητα', + 'balanceDiff' => 'Διαφορά υπολοίπου', + 'other_meta_data' => 'Άλλα μετα-δεδομένα', + 'invited_at' => 'Προσκλήθηκε στις', + 'expires' => 'Η πρόσκληση λήγει', + 'invited_by' => 'Προσκλήθηκε από', + 'invite_link' => 'Σύνδεσμος πρόσκλησης', + 'account_type' => 'Τύπος λογαριασμού', + 'created_at' => 'Δημιουργήθηκε στις', + 'account' => 'Λογαριασμός', + 'external_url' => 'Εξωτερικό URL', + 'matchingAmount' => 'Ποσό', + 'destination' => 'Προορισμός', + 'source' => 'Προέλευση', + 'next_expected_match' => 'Επόμενη αναμενόμενη αντιστοίχιση', + 'automatch' => 'Αυτόματη αντιστοίχιση;', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Επαναλήψεις', 'description' => 'Περιγραφή', 'amount' => 'Ποσό', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Λογαριασμός με bunq', 'file_name' => 'Όνομα αρχείου', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Μέγεθος αρχείου', - 'file_type' => 'Τύπος αρχείου', - 'attached_to' => 'Επισυναπτόμενο σε', - 'file_exists' => 'Το αρχείο υπάρχει', - 'spectre_bank' => 'Τράπεζα', - 'spectre_last_use' => 'Τελευταία σύνδεση', - 'spectre_status' => 'Κατάσταση', - 'bunq_payment_id' => 'bunq ID πληρωμής', - 'repetitions' => 'Επαναλήψεις', - 'title' => 'Τίτλος', - 'transaction_s' => 'Συναλλαγή(ές)', - 'field' => 'Πεδίο', - 'value' => 'Τιμή', - 'interest' => 'Τόκος', - 'interest_period' => 'Τοκιζόμενη περίοδος', - 'liability_type' => 'Τύπος υποχρέωσης', - 'liability_direction' => 'Υποχρέωση εντός/εκτός', - 'end_date' => 'Ημερομηνία λήξης', - 'payment_info' => 'Πληροφορίες Πληρωμής', - 'expected_info' => 'Επόμενη αναμενόμενη συναλλαγή', - 'start_date' => 'Ημερομηνία έναρξης', - 'trigger' => 'Ενεργοποίηση', - 'response' => 'Απόκριση', - 'delivery' => 'Παράδοση', - 'url' => 'Διεύθυνση URL', - 'secret' => 'Μυστικό', - + 'file_size' => 'Μέγεθος αρχείου', + 'file_type' => 'Τύπος αρχείου', + 'attached_to' => 'Επισυναπτόμενο σε', + 'file_exists' => 'Το αρχείο υπάρχει', + 'spectre_bank' => 'Τράπεζα', + 'spectre_last_use' => 'Τελευταία σύνδεση', + 'spectre_status' => 'Κατάσταση', + 'bunq_payment_id' => 'bunq ID πληρωμής', + 'repetitions' => 'Επαναλήψεις', + 'title' => 'Τίτλος', + 'transaction_s' => 'Συναλλαγή(ές)', + 'field' => 'Πεδίο', + 'value' => 'Τιμή', + 'interest' => 'Τόκος', + 'interest_period' => 'Τοκιζόμενη περίοδος', + 'liability_type' => 'Τύπος υποχρέωσης', + 'liability_direction' => 'Υποχρέωση εντός/εκτός', + 'end_date' => 'Ημερομηνία λήξης', + 'payment_info' => 'Πληροφορίες Πληρωμής', + 'expected_info' => 'Επόμενη αναμενόμενη συναλλαγή', + 'start_date' => 'Ημερομηνία έναρξης', + 'trigger' => 'Ενεργοποίηση', + 'response' => 'Απόκριση', + 'delivery' => 'Παράδοση', + 'url' => 'Διεύθυνση URL', + 'secret' => 'Μυστικό', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/el_GR/pagination.php b/resources/lang/el_GR/pagination.php index 994fe942db..166ea3147a 100644 --- a/resources/lang/el_GR/pagination.php +++ b/resources/lang/el_GR/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/el_GR/passwords.php b/resources/lang/el_GR/passwords.php index 3cf3f41e8e..1587ca93be 100644 --- a/resources/lang/el_GR/passwords.php +++ b/resources/lang/el_GR/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/el_GR/rules.php b/resources/lang/el_GR/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/el_GR/rules.php +++ b/resources/lang/el_GR/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/el_GR/validation.php b/resources/lang/el_GR/validation.php index 622820a78c..9532ff6c2c 100644 --- a/resources/lang/el_GR/validation.php +++ b/resources/lang/el_GR/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Από τον πίνακα λείπει η ρήτρα "where"', - 'missing_update' => 'Από τον πίνακα λείπει η ρήτρα "update"', - 'invalid_where_key' => 'Το JSON περιέχει ένα μη έγκυρο κλειδί για την ρήτρα "where"', - 'invalid_update_key' => 'Το JSON περιέχει ένα μη έγκυρο κλειδί για την ρήτρα "update"', - 'invalid_query_data' => 'Υπάρχουν μη έγκυρα δεδομένα στο πεδίο %s:%s του ερωτήματός σας.', - 'invalid_query_account_type' => 'Το ερώτημά σας περιέχει λογαριασμούς διαφορετικών τύπων, κάτι που δεν επιτρέπεται.', - 'invalid_query_currency' => 'Το ερώτημά σας περιέχει λογαριασμούς που έχουν διαφορετικές ρυθμίσεις νομίσματος, το οποίο δεν επιτρέπεται.', - 'iban' => 'Αυτό δεν είναι έγκυρο IBAN.', - 'zero_or_more' => 'Αυτή η τιμή δεν μπορεί να είναι αρνητική.', - 'date_or_time' => 'Αυτή η τιμή πρέπει να είναι έγκυρη ημερομηνία ή τιμή ώρας (ISO 8601).', - 'source_equals_destination' => 'Ο λογαριασμός προέλευσης ισούται με το λογαριασμό προορισμού.', - 'unique_account_number_for_user' => 'Φαίνεται πως αυτός ο αριθμός λογαριασμού χρησιμοποιείται ήδη.', - 'unique_iban_for_user' => 'Φαίνεται πως αυτό το IBAN είναι ήδη σε χρήση.', - 'deleted_user' => 'Για λόγους ασφαλείας, δεν μπορείτε να εγγραφείτε χρησιμοποιώντας αυτή τη διεύθυνση email.', - 'rule_trigger_value' => 'Αυτή η τιμή δεν είναι έγκυρη για το επιλεγμένο κριτήριο ενεργοποίησης.', - 'rule_action_value' => 'Αυτή η τιμή δεν είναι έγκυρη για την επιλεγμένη ενέργεια.', - 'file_already_attached' => 'Το μεταφορτωμένο αρχείο ":name" είναι ήδη συνημμένο σε αυτό το αντικείμενο.', - 'file_attached' => 'Επιτυχής μεταφόρτωση του αρχείου ":name".', - 'must_exist' => 'Το αναγνωριστικό στο πεδίο :attribute δεν υπάρχει στη βάση δεδομένων.', - 'all_accounts_equal' => 'Όλοι οι λογαριασμοί σε αυτό το πεδίο πρέπει να είναι ίσοι.', - 'group_title_mandatory' => 'Ένας τίτλος ομάδας είναι υποχρεωτικός όταν υπάρχουν περισσότερες από μία συναλλαγές.', - 'transaction_types_equal' => 'Όλοι οι διαχωρισμοί πρέπει να είναι ίδιου τύπου.', - 'invalid_transaction_type' => 'Μη έγκυρος τύπος συναλλαγής.', - 'invalid_selection' => 'Η επιλογή σας δεν είναι έγκυρη.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Απαιτείται τουλάχιστο μία συναλλαγή.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Απαιτείται τουλάχιστον μία επανάληψη.', - 'require_repeat_until' => 'Απαιτείται είτε ένας αριθμός επαναλήψεων, ή μία ημερομηνία λήξης (repeat_until). Όχι και τα δύο.', - 'require_currency_info' => 'Το περιεχόμενο αυτού του πεδίου δεν είναι έγκυρη χωρίς νομισματικές πληροφορίες.', - 'not_transfer_account' => 'Αυτός ο λογαριασμός δεν είναι λογαριασμός που μπορεί να χρησιμοποιηθεί για συναλλαγές.', - 'require_currency_amount' => 'Το περιεχόμενο αυτού του πεδίου δεν είναι έγκυρο χωρίς πληροφορίες ετερόχθονος ποσού.', - 'require_foreign_currency' => 'Αυτό το πεδίο απαιτεί έναν αριθμό', - 'require_foreign_dest' => 'Αυτή η τιμή πεδίου πρέπει να ταιριάζει με το νόμισμα του λογαριασμού προορισμού.', - 'require_foreign_src' => 'Αυτή η τιμή πεδίου πρέπει να ταιριάζει με το νόμισμα του λογαριασμού προέλευσης.', - 'equal_description' => 'Η περιγραφή της συναλλαγής δεν πρέπει να ισούται με καθολική περιγραφή.', - 'file_invalid_mime' => 'Το αρχείο ":name" είναι τύπου ":mime" που δεν είναι αποδεκτός ως νέας μεταφόρτωσης.', - 'file_too_large' => 'Το αρχείο ":name" είναι πολύ μεγάλο.', - 'belongs_to_user' => 'Η τιμή του :attribute είναι άγνωστη.', - 'accepted' => 'Το :attribute πρέπει να γίνει αποδεκτό.', - 'bic' => 'Αυτό δεν είναι έγκυρο IBAN.', - 'at_least_one_trigger' => 'Ο κανόνας πρέπει να έχει τουλάχιστον ένα κριτήριο ενεργοποίησης.', - 'at_least_one_active_trigger' => 'Ο κανόνας πρέπει να έχει τουλάχιστον ένα ενεργό κριτήριο ενεργοποίησης.', - 'at_least_one_action' => 'Ο κανόνας πρέπει να έχει τουλάχιστον μία λειτουργία.', - 'at_least_one_active_action' => 'Ο κανόνας πρέπει να έχει τουλάχιστον μία ενεργή λειτουργία.', - 'base64' => 'Αυτά δεν είναι έγκυρα base64 κωδικοποιημένα δεδομένα.', - 'model_id_invalid' => 'Το παραχωρημένο αναγνωριστικό δε φαίνεται έγκυρο για αυτό το μοντέλο.', - 'less' => 'Το :attribute πρέπει να είναι μικρότερο από 10,000,000', - 'active_url' => 'Το :attribute δεν είναι έγκυρο URL.', - 'after' => 'Το :attribute πρέπει να είναι ημερομηνία μετά από :date.', - 'date_after' => 'Η ημερομηνία έναρξης πρέπει να είναι πριν την ημερομηνία λήξης.', - 'alpha' => 'Το :attribute μπορεί να περιέχει μόνο γράμματα.', - 'alpha_dash' => 'Το :attribute μπορεί να περιέχει γράμματα, αριθμοί, και παύλες.', - 'alpha_num' => 'Το :attribute μπορεί να περιέχει γράμματα και αριθμούς.', - 'array' => 'Το :attribute πρέπει να είναι μία παράταξη.', - 'unique_for_user' => 'Υπάρχει ήδη μια εισαγωγή με αυτό το :attribute.', - 'before' => 'Αυτό το :attribute πρέπει να είναι μια ημερομηνία πρίν από :date.', - 'unique_object_for_user' => 'Αυτό το όνομα είναι ήδη σε χρήση.', - 'unique_account_for_user' => 'Αυτό το όνομα λογαριασμού είναι ήδη σε χρήση.', + 'bad_type_source' => 'Το Firefly III δεν μπορεί να καθορίσει τον τύπο συναλλαγής με βάση αυτό το λογαριασμό προέλευσης.', + 'bad_type_destination' => 'Το Firefly III δεν μπορεί να καθορίσει τον τύπο συναλλαγής με βάση αυτό το λογαριασμό προορισμού.', + 'missing_where' => 'Από τον πίνακα λείπει η ρήτρα "where"', + 'missing_update' => 'Από τον πίνακα λείπει η ρήτρα "update"', + 'invalid_where_key' => 'Το JSON περιέχει ένα μη έγκυρο κλειδί για την ρήτρα "where"', + 'invalid_update_key' => 'Το JSON περιέχει ένα μη έγκυρο κλειδί για την ρήτρα "update"', + 'invalid_query_data' => 'Υπάρχουν μη έγκυρα δεδομένα στο πεδίο %s:%s του ερωτήματός σας.', + 'invalid_query_account_type' => 'Το ερώτημά σας περιέχει λογαριασμούς διαφορετικών τύπων, κάτι που δεν επιτρέπεται.', + 'invalid_query_currency' => 'Το ερώτημά σας περιέχει λογαριασμούς που έχουν διαφορετικές ρυθμίσεις νομίσματος, το οποίο δεν επιτρέπεται.', + 'iban' => 'Αυτό δεν είναι έγκυρο IBAN.', + 'zero_or_more' => 'Αυτή η τιμή δεν μπορεί να είναι αρνητική.', + 'more_than_zero' => 'Η τιμή πρέπει να είναι μεγαλύτερη από το μηδέν.', + 'more_than_zero_correct' => 'Η τιμή πρέπει να είναι μηδέν ή περισσότερο.', + 'no_asset_account' => 'Αυτός δεν είναι λογαριασμός κεφαλαίου.', + 'date_or_time' => 'Αυτή η τιμή πρέπει να είναι έγκυρη ημερομηνία ή τιμή ώρας (ISO 8601).', + 'source_equals_destination' => 'Ο λογαριασμός προέλευσης ισούται με το λογαριασμό προορισμού.', + 'unique_account_number_for_user' => 'Φαίνεται πως αυτός ο αριθμός λογαριασμού χρησιμοποιείται ήδη.', + 'unique_iban_for_user' => 'Φαίνεται πως αυτό το IBAN είναι ήδη σε χρήση.', + 'reconciled_forbidden_field' => 'Αυτή η συναλλαγή έχει ήδη τακτοποιηθεί, δεν μπορείτε να αλλάξετε το ":field"', + 'deleted_user' => 'Για λόγους ασφαλείας, δεν μπορείτε να εγγραφείτε χρησιμοποιώντας αυτή τη διεύθυνση email.', + 'rule_trigger_value' => 'Αυτή η τιμή δεν είναι έγκυρη για το επιλεγμένο κριτήριο ενεργοποίησης.', + 'rule_action_value' => 'Αυτή η τιμή δεν είναι έγκυρη για την επιλεγμένη ενέργεια.', + 'file_already_attached' => 'Το μεταφορτωμένο αρχείο ":name" είναι ήδη συνημμένο σε αυτό το αντικείμενο.', + 'file_attached' => 'Επιτυχής μεταφόρτωση του αρχείου ":name".', + 'must_exist' => 'Το αναγνωριστικό στο πεδίο :attribute δεν υπάρχει στη βάση δεδομένων.', + 'all_accounts_equal' => 'Όλοι οι λογαριασμοί σε αυτό το πεδίο πρέπει να είναι ίσοι.', + 'group_title_mandatory' => 'Ένας τίτλος ομάδας είναι υποχρεωτικός όταν υπάρχουν περισσότερες από μία συναλλαγές.', + 'transaction_types_equal' => 'Όλοι οι διαχωρισμοί πρέπει να είναι ίδιου τύπου.', + 'invalid_transaction_type' => 'Μη έγκυρος τύπος συναλλαγής.', + 'invalid_selection' => 'Η επιλογή σας δεν είναι έγκυρη.', + 'belongs_user' => 'Αυτή η τιμή συνδέεται με ένα αντικείμενο που δεν φαίνεται να υπάρχει.', + 'belongs_user_or_user_group' => 'Αυτή η τιμή συνδέεται με ένα αντικείμενο που δεν φαίνεται να υπάρχει στην τρέχουσα οικονομική σας διαχείριση.', + 'at_least_one_transaction' => 'Απαιτείται τουλάχιστο μία συναλλαγή.', + 'recurring_transaction_id' => 'Απαιτείται τουλάχιστον μία συναλλαγή.', + 'need_id_to_match' => 'Πρέπει να υποβάλετε αυτήν την καταχώρηση με ένα ID για να μπορεί το API να το ταιριάζει.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Απαιτείται τουλάχιστον μία επανάληψη.', + 'require_repeat_until' => 'Απαιτείται είτε ένας αριθμός επαναλήψεων, ή μία ημερομηνία λήξης (repeat_until). Όχι και τα δύο.', + 'require_currency_info' => 'Το περιεχόμενο αυτού του πεδίου δεν είναι έγκυρη χωρίς νομισματικές πληροφορίες.', + 'not_transfer_account' => 'Αυτός ο λογαριασμός δεν είναι λογαριασμός που μπορεί να χρησιμοποιηθεί για συναλλαγές.', + 'require_currency_amount' => 'Το περιεχόμενο αυτού του πεδίου δεν είναι έγκυρο χωρίς πληροφορίες ετερόχθονος ποσού.', + 'require_foreign_currency' => 'Αυτό το πεδίο απαιτεί έναν αριθμό', + 'require_foreign_dest' => 'Αυτή η τιμή πεδίου πρέπει να ταιριάζει με το νόμισμα του λογαριασμού προορισμού.', + 'require_foreign_src' => 'Αυτή η τιμή πεδίου πρέπει να ταιριάζει με το νόμισμα του λογαριασμού προέλευσης.', + 'equal_description' => 'Η περιγραφή της συναλλαγής δεν πρέπει να ισούται με καθολική περιγραφή.', + 'file_invalid_mime' => 'Το αρχείο ":name" είναι τύπου ":mime" που δεν είναι αποδεκτός ως νέας μεταφόρτωσης.', + 'file_too_large' => 'Το αρχείο ":name" είναι πολύ μεγάλο.', + 'belongs_to_user' => 'Η τιμή του :attribute είναι άγνωστη.', + 'accepted' => 'Το :attribute πρέπει να γίνει αποδεκτό.', + 'bic' => 'Αυτό δεν είναι έγκυρο IBAN.', + 'at_least_one_trigger' => 'Ο κανόνας πρέπει να έχει τουλάχιστον ένα κριτήριο ενεργοποίησης.', + 'at_least_one_active_trigger' => 'Ο κανόνας πρέπει να έχει τουλάχιστον ένα ενεργό κριτήριο ενεργοποίησης.', + 'at_least_one_action' => 'Ο κανόνας πρέπει να έχει τουλάχιστον μία λειτουργία.', + 'at_least_one_active_action' => 'Ο κανόνας πρέπει να έχει τουλάχιστον μία ενεργή λειτουργία.', + 'base64' => 'Αυτά δεν είναι έγκυρα base64 κωδικοποιημένα δεδομένα.', + 'model_id_invalid' => 'Το παραχωρημένο αναγνωριστικό δε φαίνεται έγκυρο για αυτό το μοντέλο.', + 'less' => 'Το :attribute πρέπει να είναι μικρότερο από 10,000,000', + 'active_url' => 'Το :attribute δεν είναι έγκυρο URL.', + 'after' => 'Το :attribute πρέπει να είναι ημερομηνία μετά από :date.', + 'date_after' => 'Η ημερομηνία έναρξης πρέπει να είναι πριν την ημερομηνία λήξης.', + 'alpha' => 'Το :attribute μπορεί να περιέχει μόνο γράμματα.', + 'alpha_dash' => 'Το :attribute μπορεί να περιέχει γράμματα, αριθμοί, και παύλες.', + 'alpha_num' => 'Το :attribute μπορεί να περιέχει γράμματα και αριθμούς.', + 'array' => 'Το :attribute πρέπει να είναι μία παράταξη.', + 'unique_for_user' => 'Υπάρχει ήδη μια εισαγωγή με αυτό το :attribute.', + 'before' => 'Αυτό το :attribute πρέπει να είναι μια ημερομηνία πρίν από :date.', + 'unique_object_for_user' => 'Αυτό το όνομα είναι ήδη σε χρήση.', + 'unique_account_for_user' => 'Αυτό το όνομα λογαριασμού είναι ήδη σε χρήση.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => 'Το :attribute πρέπει να είναι μεταξύ :min και :max.', + 'between.file' => 'Το :attribute πρέπει να είναι μεταξύ :min και :max kilobytes.', + 'between.string' => 'To :attribute πρέπει να είναι μεταξύ :min και :max χαρακτήρων.', + 'between.array' => 'Το :attribute πρέπει να είναι μεταξύ :min και :max αντικειμένων.', + 'boolean' => 'Το πεδίο :attribute πρέπει να είναι αληθές ή ψευδές.', + 'confirmed' => 'Η επιβεβαίωση του :attribute δεν ταιριάζει.', + 'date' => 'Το :attribute δεν είναι έγκυρη ημερομηνία.', + 'date_format' => 'Το :attribute δεν ταιριάζει με τη μορφή :format.', + 'different' => 'Το :attribute και :other πρέπει να είναι διαφορετικά.', + 'digits' => 'Το :attribute πρέπει να είναι :digits ψηφία.', + 'digits_between' => 'Το :attribute πρέπει να είναι μεταξύ :min και :max ψηφίων.', + 'email' => 'Το :attribute πρέπει να είναι μία έγκυρη διεύθυνση email.', + 'filled' => 'Το πεδίο :attribute είναι απαραίτητο.', + 'exists' => 'Το επιλεγμένο :attribute δεν είναι έγκυρο.', + 'image' => 'Το :attribute πρέπει να είναι εικόνα.', + 'in' => 'Το επιλεγμένο :attribute δεν είναι έγκυρο.', + 'integer' => 'Το :attribute πρέπει να είναι ακέραιος αριθμός.', + 'ip' => 'Το :attribute πρέπει να είναι έγκυρη διεύθυνση IP.', + 'json' => 'Το :attribute πρέπει να είναι έγκυρο JSON string.', + 'max.numeric' => 'Το :attribute δεν μπορεί να είναι μεγαλύτερο του :max.', + 'max.file' => 'Το :attribute δεν μπορεί να είναι μεγαλύτερο από :max kilobytes.', + 'max.string' => 'Το :attribute δεν μπορεί να είναι μεγαλύτερο από :max χαρακτήρες.', + 'max.array' => 'Το :attribute δεν μπορεί να έχει περισσότερα από :max αντικείμενα.', + 'mimes' => 'Το :attribute πρέπει να είναι ένα αρχείου τύπου: :values.', + 'min.numeric' => 'Το :attribute πρέπει να είναι τουλάχιστον :min.', + 'lte.numeric' => 'Το :attribute πρέπει να είναι μικρότερο ή ίσο του :value.', + 'min.file' => 'Το :attribute πρέπει είναι τουλάχιστον :min kilobytes.', + 'min.string' => 'Το :attribute πρέπει να είναι τουλάχιστον :min χαρακτήρες.', + 'min.array' => 'Το :attribute πρέπει να είναι τουλάχιστον :min αντικείμενα.', + 'not_in' => 'Το επιλεγμένο :attribute δεν είναι έγκυρο.', + 'numeric' => 'Το :attribute πρέπει να είναι αριθμός.', + 'scientific_notation' => 'Στο :attribute δεν μπορεί να χρησιμοποιηθεί η επιστημονική σημειογραφία.', + 'numeric_native' => 'Το εγχώριο ποσό πρέπει να είναι αριθμός.', + 'numeric_destination' => 'Το ποσό προορισμού πρέπει να είναι αριθμός.', + 'numeric_source' => 'Το ποσό προέλευσης πρέπει να είναι αριθμός.', + 'regex' => 'Η μορφή του :attribute δεν είναι έγκυρη.', + 'required' => 'Το πεδίο :attribute είναι απαραίτητο.', + 'required_if' => 'Το πεδίο :attribute απαιτείται όταν το :other είναι :value.', + 'required_unless' => 'Το πεδίο :attribute είναι απαραίτητο εκτός αν το :other είναι σε :values.', + 'required_with' => 'Το πεδίο :attribute είναι απαραίτητο όταν :values είναι παρούσες.', + 'required_with_all' => 'Το πεδίο :attribute είναι απαραίτητο όταν :values είναι παρούσες.', + 'required_without' => 'To πεδίο :attribute είναι απαραίτητο όταν :values δεν είναι παρούσες.', + 'required_without_all' => 'Το πεδίο :attribute είναι απαραίτητο όταν καμία από :values είναι δεν είναι παρούσες.', + 'same' => 'Τα :attribute και :other πρέπει να ταιριάζουν.', + 'size.numeric' => 'Το :attribute πρέπει να είναι :size.', + 'amount_min_over_max' => 'Το ελάχιστο ποσό δεν μπορεί να είναι μεγαλύτερο του μέγιστου ποσού.', + 'size.file' => 'Το :attribute πρέπει να είναι :size kilobytes.', + 'size.string' => 'Το :attribute πρέπει να είναι :size χαρακτήρες.', + 'size.array' => 'Το :attribute πρέπει να περιέχει :size αντικείμενα.', + 'unique' => 'Το :attribute έχει ληφθεί ήδη.', + 'string' => 'Το :attribute πρέπει να είναι string.', + 'url' => 'Η μορφή :attribute δεν είναι έγκυρη.', + 'timezone' => 'Το :attribute πρέπει να είναι έγκυρη ζώνη.', + '2fa_code' => 'Το πεδίο :attribute δεν είναι έγκυρο.', + 'dimensions' => 'Το :attribute δεν έχει έγκυρες διαστάσεις εικόνας.', + 'distinct' => 'Το πεδίο :attribute έχει διπλότυπη τιμή.', + 'file' => 'Το :attribute πρέπει να είναι ένα αρχείο.', + 'in_array' => 'Το πεδίο :attribute δεν υπάρχει σε :other.', + 'present' => 'Το πεδίο :attribute πρέπει να είναι παρόν.', + 'amount_zero' => 'Το συνολικό ποσό δεν μπορεί να είναι μηδέν.', + 'current_target_amount' => 'Το τρέχων ποσό πρέπει να είναι μικρότερο από το ποσό προορισμού.', + 'unique_piggy_bank_for_user' => 'Το όνομα του κουμπαρά πρέπει να είναι μοναδικό.', + 'unique_object_group' => 'Το όνομα της ομάδας πρέπει να είναι μοναδικό', + 'starts_with' => 'Η τιμή πρέπει να ξεκινά με :values.', + 'unique_webhook' => 'Έχετε ήδη ένα webhook με αυτόν τον συνδυασμό URL, ενεργοποίησης, απόκρισης και παράδοσης.', + 'unique_existing_webhook' => 'Έχετε ήδη ένα άλλο webhook με αυτόν τον συνδυασμό URL, ενεργοποίησης, απόκρισης και παράδοσης.', + 'same_account_type' => 'Και οι δύο λογαριασμοί πρέπει να έχουν τον ίδιο τύπο λογαριασμού', + 'same_account_currency' => 'Και οι δύο λογαριασμοί πρέπει να έχουν την ίδια ρύθμιση νομίσματος', - 'between.numeric' => 'Το :attribute πρέπει να είναι μεταξύ :min και :max.', - 'between.file' => 'Το :attribute πρέπει να είναι μεταξύ :min και :max kilobytes.', - 'between.string' => 'To :attribute πρέπει να είναι μεταξύ :min και :max χαρακτήρων.', - 'between.array' => 'Το :attribute πρέπει να είναι μεταξύ :min και :max αντικειμένων.', - 'boolean' => 'Το πεδίο :attribute πρέπει να είναι αληθές ή ψευδές.', - 'confirmed' => 'Η επιβεβαίωση του :attribute δεν ταιριάζει.', - 'date' => 'Το :attribute δεν είναι έγκυρη ημερομηνία.', - 'date_format' => 'Το :attribute δεν ταιριάζει με τη μορφή :format.', - 'different' => 'Το :attribute και :other πρέπει να είναι διαφορετικά.', - 'digits' => 'Το :attribute πρέπει να είναι :digits ψηφία.', - 'digits_between' => 'Το :attribute πρέπει να είναι μεταξύ :min και :max ψηφίων.', - 'email' => 'Το :attribute πρέπει να είναι μία έγκυρη διεύθυνση email.', - 'filled' => 'Το πεδίο :attribute είναι απαραίτητο.', - 'exists' => 'Το επιλεγμένο :attribute δεν είναι έγκυρο.', - 'image' => 'Το :attribute πρέπει να είναι εικόνα.', - 'in' => 'Το επιλεγμένο :attribute δεν είναι έγκυρο.', - 'integer' => 'Το :attribute πρέπει να είναι ακέραιος αριθμός.', - 'ip' => 'Το :attribute πρέπει να είναι έγκυρη διεύθυνση IP.', - 'json' => 'Το :attribute πρέπει να είναι έγκυρο JSON string.', - 'max.numeric' => 'Το :attribute δεν μπορεί να είναι μεγαλύτερο του :max.', - 'max.file' => 'Το :attribute δεν μπορεί να είναι μεγαλύτερο από :max kilobytes.', - 'max.string' => 'Το :attribute δεν μπορεί να είναι μεγαλύτερο από :max χαρακτήρες.', - 'max.array' => 'Το :attribute δεν μπορεί να έχει περισσότερα από :max αντικείμενα.', - 'mimes' => 'Το :attribute πρέπει να είναι ένα αρχείου τύπου: :values.', - 'min.numeric' => 'Το :attribute πρέπει να είναι τουλάχιστον :min.', - 'lte.numeric' => 'Το :attribute πρέπει να είναι μικρότερο ή ίσο του :value.', - 'min.file' => 'Το :attribute πρέπει είναι τουλάχιστον :min kilobytes.', - 'min.string' => 'Το :attribute πρέπει να είναι τουλάχιστον :min χαρακτήρες.', - 'min.array' => 'Το :attribute πρέπει να είναι τουλάχιστον :min αντικείμενα.', - 'not_in' => 'Το επιλεγμένο :attribute δεν είναι έγκυρο.', - 'numeric' => 'Το :attribute πρέπει να είναι αριθμός.', - 'numeric_native' => 'Το εγχώριο ποσό πρέπει να είναι αριθμός.', - 'numeric_destination' => 'Το ποσό προορισμού πρέπει να είναι αριθμός.', - 'numeric_source' => 'Το ποσό προέλευσης πρέπει να είναι αριθμός.', - 'regex' => 'Η μορφή του :attribute δεν είναι έγκυρη.', - 'required' => 'Το πεδίο :attribute είναι απαραίτητο.', - 'required_if' => 'Το πεδίο :attribute απαιτείται όταν το :other είναι :value.', - 'required_unless' => 'Το πεδίο :attribute είναι απαραίτητο εκτός αν το :other είναι σε :values.', - 'required_with' => 'Το πεδίο :attribute είναι απαραίτητο όταν :values είναι παρούσες.', - 'required_with_all' => 'Το πεδίο :attribute είναι απαραίτητο όταν :values είναι παρούσες.', - 'required_without' => 'To πεδίο :attribute είναι απαραίτητο όταν :values δεν είναι παρούσες.', - 'required_without_all' => 'Το πεδίο :attribute είναι απαραίτητο όταν καμία από :values είναι δεν είναι παρούσες.', - 'same' => 'Τα :attribute και :other πρέπει να ταιριάζουν.', - 'size.numeric' => 'Το :attribute πρέπει να είναι :size.', - 'amount_min_over_max' => 'Το ελάχιστο ποσό δεν μπορεί να είναι μεγαλύτερο του μέγιστου ποσού.', - 'size.file' => 'Το :attribute πρέπει να είναι :size kilobytes.', - 'size.string' => 'Το :attribute πρέπει να είναι :size χαρακτήρες.', - 'size.array' => 'Το :attribute πρέπει να περιέχει :size αντικείμενα.', - 'unique' => 'Το :attribute έχει ληφθεί ήδη.', - 'string' => 'Το :attribute πρέπει να είναι string.', - 'url' => 'Η μορφή :attribute δεν είναι έγκυρη.', - 'timezone' => 'Το :attribute πρέπει να είναι έγκυρη ζώνη.', - '2fa_code' => 'Το πεδίο :attribute δεν είναι έγκυρο.', - 'dimensions' => 'Το :attribute δεν έχει έγκυρες διαστάσεις εικόνας.', - 'distinct' => 'Το πεδίο :attribute έχει διπλότυπη τιμή.', - 'file' => 'Το :attribute πρέπει να είναι ένα αρχείο.', - 'in_array' => 'Το πεδίο :attribute δεν υπάρχει σε :other.', - 'present' => 'Το πεδίο :attribute πρέπει να είναι παρόν.', - 'amount_zero' => 'Το συνολικό ποσό δεν μπορεί να είναι μηδέν.', - 'current_target_amount' => 'Το τρέχων ποσό πρέπει να είναι μικρότερο από το ποσό προορισμού.', - 'unique_piggy_bank_for_user' => 'Το όνομα του κουμπαρά πρέπει να είναι μοναδικό.', - 'unique_object_group' => 'Το όνομα της ομάδας πρέπει να είναι μοναδικό', - 'starts_with' => 'Η τιμή πρέπει να ξεκινά με :values.', - 'unique_webhook' => 'Έχετε ήδη ένα webhook με αυτόν τον συνδυασμό URL, ενεργοποίησης, απόκρισης και παράδοσης.', - 'unique_existing_webhook' => 'Έχετε ήδη ένα άλλο webhook με αυτόν τον συνδυασμό URL, ενεργοποίησης, απόκρισης και παράδοσης.', - 'same_account_type' => 'Και οι δύο λογαριασμοί πρέπει να έχουν τον ίδιο τύπο λογαριασμού', - 'same_account_currency' => 'Και οι δύο λογαριασμοί πρέπει να έχουν την ίδια ρύθμιση νομίσματος', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Αυτό δεν είναι ασφαλές συνθηματικό. Παρακαλώ δοκιμάστε ξανά. Για περισσότερες πληροφορίες επισκεφτείτε https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Μη έγκυρος τύπος επανάληψης για επαναλαμβανόμενες συναλλαγές.', - 'valid_recurrence_rep_moment' => 'Μη έγκυρη στιγμή επανάληψης για αυτό τον τύπο επανάληψης.', - 'invalid_account_info' => 'Μη έγκυρες πληροφορίες λογαριασμού.', - 'attributes' => [ + 'secure_password' => 'Αυτό δεν είναι ασφαλές συνθηματικό. Παρακαλώ δοκιμάστε ξανά. Για περισσότερες πληροφορίες επισκεφτείτε https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Μη έγκυρος τύπος επανάληψης για επαναλαμβανόμενες συναλλαγές.', + 'valid_recurrence_rep_moment' => 'Μη έγκυρη στιγμή επανάληψης για αυτό τον τύπο επανάληψης.', + 'invalid_account_info' => 'Μη έγκυρες πληροφορίες λογαριασμού.', + 'attributes' => [ 'email' => 'διεύθυνση email', 'description' => 'περιγραφή', 'amount' => 'ποσό', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Πρέπει να λάβετε ένα έγκυρο αναγνωριστικό λογαριασμού προέλευσης και/ή ένα έγκυρο όνομα λογαριασμού προέλευσης για να συνεχίσετε.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Δεν ήταν δυνατή η εύρεση ενός έγκυρου λογαριασμού προορισμού κατά την αναζήτηση του αναγνωριστικού ID ":id" ή του ονόματος ":name".', + 'withdrawal_source_need_data' => 'Πρέπει να λάβετε ένα έγκυρο αναγνωριστικό λογαριασμού προέλευσης και/ή ένα έγκυρο όνομα λογαριασμού προέλευσης για να συνεχίσετε.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Δεν ήταν δυνατή η εύρεση ενός έγκυρου λογαριασμού προορισμού κατά την αναζήτηση του αναγνωριστικού ID ":id" ή του ονόματος ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Πρέπει να λάβετε ένα έγκυρο αναγνωριστικό ID λογαριασμού προέλευσης και/ή ένα έγκυρο όνομα λογαριασμού προέλευσης για να συνεχίσετε.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Δεν ήταν δυνατή η εύρεση ενός έγκυρου λογαριασμού προορισμού κατά την αναζήτηση του αναγνωριστικού ID ":id" ή του ονόματος ":name".', - 'deposit_dest_wrong_type' => 'O υποβεβλημένος λογαριασμός προέλευσης δεν είναι σωστού τύπου.', + 'deposit_source_need_data' => 'Πρέπει να λάβετε ένα έγκυρο αναγνωριστικό ID λογαριασμού προέλευσης και/ή ένα έγκυρο όνομα λογαριασμού προέλευσης για να συνεχίσετε.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Δεν ήταν δυνατή η εύρεση ενός έγκυρου λογαριασμού προορισμού κατά την αναζήτηση του αναγνωριστικού ID ":id" ή του ονόματος ":name".', + 'deposit_dest_wrong_type' => 'O υποβεβλημένος λογαριασμός προέλευσης δεν είναι σωστού τύπου.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Πρέπει να λάβετε ένα έγκυρο αναγνωριστικό λογαριασμού προέλευσης και/ή ένα έγκυρο όνομα λογαριασμού προέλευσης για να συνεχίσετε.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Δεν ήταν δυνατή η εύρεση ενός έγκυρου λογαριασμού προορισμού κατά την αναζήτηση του αναγνωριστικού ID ":id" ή του ονόματος ":name".', + 'need_id_in_edit' => 'Κάθε διαχωρισμός πρέπει να έχει transaction_journal_id (είτε έγκυρο αναγνωριστικό ID ή 0).', - 'transfer_source_need_data' => 'Πρέπει να λάβετε ένα έγκυρο αναγνωριστικό λογαριασμού προέλευσης και/ή ένα έγκυρο όνομα λογαριασμού προέλευσης για να συνεχίσετε.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Δεν ήταν δυνατή η εύρεση ενός έγκυρου λογαριασμού προορισμού κατά την αναζήτηση του αναγνωριστικού ID ":id" ή του ονόματος ":name".', - 'need_id_in_edit' => 'Κάθε διαχωρισμός πρέπει να έχει transaction_journal_id (είτε έγκυρο αναγνωριστικό ID ή 0).', + 'ob_source_need_data' => 'Πρέπει να λάβετε ένα έγκυρο αναγνωριστικό λογαριασμού προέλευσης και/ή ένα έγκυρο όνομα λογαριασμού προέλευσης για να συνεχίσετε.', + 'lc_source_need_data' => 'Πρέπει να λάβετε ένα έγκυρο ID λογαριασμού προέλευσης για να συνεχίσετε.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Δεν ήταν δυνατή η εύρεση ενός έγκυρου λογαριασμού προορισμού κατά την αναζήτηση του αναγνωριστικού ID ":id" ή του ονόματος ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Πρέπει να λάβετε ένα έγκυρο αναγνωριστικό λογαριασμού προέλευσης και/ή ένα έγκυρο όνομα λογαριασμού προέλευσης για να συνεχίσετε.', - 'lc_source_need_data' => 'Πρέπει να λάβετε ένα έγκυρο ID λογαριασμού προέλευσης για να συνεχίσετε.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Δεν ήταν δυνατή η εύρεση ενός έγκυρου λογαριασμού προορισμού κατά την αναζήτηση του αναγνωριστικού ID ":id" ή του ονόματος ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Δεν μπορείτε να χρησιμοποιήσετε αυτό το λογαριασμό ως λογαριασμό προέλευσης.', + 'generic_invalid_destination' => 'Δεν μπορείτε να χρησιμοποιήσετε αυτό το λογαριασμό ως λογαριασμό προορισμού.', - 'generic_invalid_source' => 'Δεν μπορείτε να χρησιμοποιήσετε αυτό το λογαριασμό ως λογαριασμό προέλευσης.', - 'generic_invalid_destination' => 'Δεν μπορείτε να χρησιμοποιήσετε αυτό το λογαριασμό ως λογαριασμό προορισμού.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'Το :attribute πρέπει να είναι μεγαλύτερο ή ίσο με :value.', - 'gt.numeric' => 'Το :attribute πρέπει να είναι μεγαλύτερο από :value.', - 'gte.file' => 'Το :attribute πρέπει να είναι μεγαλύτερο ή ίσο με :value kilobytes.', - 'gte.string' => 'Το :attribute πρέπει να είναι μεγαλύτερο ή ίσο με :value χαρακτήρες.', - 'gte.array' => 'Το :attribute πρέπει να έχει :value αντικείμενα ή παραπάνω.', + 'gte.numeric' => 'Το :attribute πρέπει να είναι μεγαλύτερο ή ίσο με :value.', + 'gt.numeric' => 'Το :attribute πρέπει να είναι μεγαλύτερο από :value.', + 'gte.file' => 'Το :attribute πρέπει να είναι μεγαλύτερο ή ίσο με :value kilobytes.', + 'gte.string' => 'Το :attribute πρέπει να είναι μεγαλύτερο ή ίσο με :value χαρακτήρες.', + 'gte.array' => 'Το :attribute πρέπει να έχει :value αντικείμενα ή παραπάνω.', 'amount_required_for_auto_budget' => 'Πρέπει να συμπληρωθεί το ποσό.', 'auto_budget_amount_positive' => 'Το ποσό πρέπει να είναι μεγαλύτερο από το μηδέν.', + 'auto_budget_period_mandatory' => 'Η περίοδος αυτόματου προϋπολογισμού είναι υποχρεωτικό πεδίο.', // no access to administration: diff --git a/resources/lang/en_GB/api.php b/resources/lang/en_GB/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/en_GB/api.php +++ b/resources/lang/en_GB/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/en_GB/auth.php b/resources/lang/en_GB/auth.php index 8169492c34..d68e0fbe2f 100644 --- a/resources/lang/en_GB/auth.php +++ b/resources/lang/en_GB/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'These credentials do not match our records.', 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', diff --git a/resources/lang/en_GB/breadcrumbs.php b/resources/lang/en_GB/breadcrumbs.php index b326833093..968eae4abb 100644 --- a/resources/lang/en_GB/breadcrumbs.php +++ b/resources/lang/en_GB/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Home', - 'budgets' => 'Budgets', - 'subscriptions' => 'Subscriptions', - 'transactions' => 'Transactions', - 'title_expenses' => 'Expenses', - 'title_withdrawal' => 'Expenses', - 'title_revenue' => 'Revenue / income', - 'title_deposit' => 'Revenue / income', - 'title_transfer' => 'Transfers', - 'title_transfers' => 'Transfers', - 'edit_currency' => 'Edit currency ":name"', - 'delete_currency' => 'Delete currency ":name"', - 'newPiggyBank' => 'Create a new piggy bank', - 'edit_piggyBank' => 'Edit piggy bank ":name"', - 'preferences' => 'Preferences', - 'profile' => 'Profile', - 'accounts' => 'Accounts', - 'changePassword' => 'Change your password', - 'change_email' => 'Change your email address', - 'bills' => 'Bills', - 'newBill' => 'New bill', - 'edit_bill' => 'Edit bill ":name"', - 'delete_bill' => 'Delete bill ":name"', - 'reports' => 'Reports', - 'search_result' => 'Search results for ":query"', - 'withdrawal_list' => 'Expenses', - 'Withdrawal_list' => 'Expenses', - 'deposit_list' => 'Revenue, income and deposits', - 'transfer_list' => 'Transfers', - 'transfers_list' => 'Transfers', + 'home' => 'Home', + 'budgets' => 'Budgets', + 'subscriptions' => 'Subscriptions', + 'transactions' => 'Transactions', + 'title_expenses' => 'Expenses', + 'title_withdrawal' => 'Expenses', + 'title_revenue' => 'Revenue / income', + 'title_deposit' => 'Revenue / income', + 'title_transfer' => 'Transfers', + 'title_transfers' => 'Transfers', + 'edit_currency' => 'Edit currency ":name"', + 'delete_currency' => 'Delete currency ":name"', + 'newPiggyBank' => 'Create a new piggy bank', + 'edit_piggyBank' => 'Edit piggy bank ":name"', + 'preferences' => 'Preferences', + 'profile' => 'Profile', + 'accounts' => 'Accounts', + 'changePassword' => 'Change your password', + 'change_email' => 'Change your email address', + 'bills' => 'Bills', + 'newBill' => 'New bill', + 'edit_bill' => 'Edit bill ":name"', + 'delete_bill' => 'Delete bill ":name"', + 'reports' => 'Reports', + 'search_result' => 'Search results for ":query"', + 'withdrawal_list' => 'Expenses', + 'Withdrawal_list' => 'Expenses', + 'deposit_list' => 'Revenue, income and deposits', + 'transfer_list' => 'Transfers', + 'transfers_list' => 'Transfers', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Reconciliations', 'create_withdrawal' => 'Create new withdrawal', 'create_deposit' => 'Create new deposit', diff --git a/resources/lang/en_GB/components.php b/resources/lang/en_GB/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/en_GB/components.php +++ b/resources/lang/en_GB/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/en_GB/config.php b/resources/lang/en_GB/config.php index d15d6e9c16..1de568de8d 100644 --- a/resources/lang/en_GB/config.php +++ b/resources/lang/en_GB/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'en-gb', - 'locale' => 'en, English, en_GB.utf8, en_GB.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'en-gb', + 'locale' => 'en, English, en_GB.utf8, en_GB.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, YYYY', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, YYYY', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'MMMM Do, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Week' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Week' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Monday', - 'dow_2' => 'Tuesday', - 'dow_3' => 'Wednesday', - 'dow_4' => 'Thursday', - 'dow_5' => 'Friday', - 'dow_6' => 'Saturday', - 'dow_7' => 'Sunday', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Monday', + 'dow_2' => 'Tuesday', + 'dow_3' => 'Wednesday', + 'dow_4' => 'Thursday', + 'dow_5' => 'Friday', + 'dow_6' => 'Saturday', + 'dow_7' => 'Sunday', ]; /* diff --git a/resources/lang/en_GB/demo.php b/resources/lang/en_GB/demo.php index 1f0396d5c8..92ea83de87 100644 --- a/resources/lang/en_GB/demo.php +++ b/resources/lang/en_GB/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/en_GB/email.php b/resources/lang/en_GB/email.php index 615ef85782..92d0491035 100644 --- a/resources/lang/en_GB/email.php +++ b/resources/lang/en_GB/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'A test message from your Firefly III installation', 'admin_test_body' => 'This is a test message from your Firefly III instance. It was sent to :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'An invitation has been created', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Password reset:', 'registered_doc_link' => 'Documentation:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'A new Firefly III version is available', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'If you prefer, you can also open a new issue on https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'The full stacktrace is below:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III has created a new transaction|Firefly III has created :count new transactions', 'new_journals_header' => 'Firefly III has created a transaction for you. You can find it in your Firefly III installation:|Firefly III has created :count transactions for you. You can find them in your Firefly III installation:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/en_GB/errors.php b/resources/lang/en_GB/errors.php index 62b14a5fd4..62511b57e6 100644 --- a/resources/lang/en_GB/errors.php +++ b/resources/lang/en_GB/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack trace', 'more_info' => 'More information', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Please collect more information in the storage/logs directory where you will find log files. If you\'re running Docker, use docker logs -f [container].', - 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', - 'github_help' => 'Get help on GitHub', - 'github_instructions' => 'You\'re more than welcome to open a new issue on GitHub.', - 'use_search' => 'Use the search!', - 'include_info' => 'Include the information from this debug page.', - 'tell_more' => 'Tell us more than "it says Whoops!"', - 'include_logs' => 'Include error logs (see above).', - 'what_did_you_do' => 'Tell us what you were doing.', - 'offline_header' => 'You are probably offline', - 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', - 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', - + 'collect_info' => 'Please collect more information in the storage/logs directory where you will find log files. If you\'re running Docker, use docker logs -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Get help on GitHub', + 'github_instructions' => 'You\'re more than welcome to open a new issue on GitHub.', + 'use_search' => 'Use the search!', + 'include_info' => 'Include the information from this debug page.', + 'tell_more' => 'Tell us more than "it says Whoops!"', + 'include_logs' => 'Include error logs (see above).', + 'what_did_you_do' => 'Tell us what you were doing.', + 'offline_header' => 'You are probably offline', + 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', + 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', ]; diff --git a/resources/lang/en_GB/firefly.php b/resources/lang/en_GB/firefly.php index f3553ab544..9dcfdc06bc 100644 --- a/resources/lang/en_GB/firefly.php +++ b/resources/lang/en_GB/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Close', - 'actions' => 'Actions', - 'edit' => 'Edit', - 'delete' => 'Delete', - 'split' => 'Split', - 'single_split' => 'Split', - 'clone' => 'Clone', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => 'Last seven days', - 'last_thirty_days' => 'Last thirty days', - 'last_180_days' => 'Last 180 days', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'YTD', - 'welcome_back' => 'What\'s playing?', - 'everything' => 'Everything', - 'today' => 'today', - 'customRange' => 'Custom range', - 'date_range' => 'Date range', - 'apply' => 'Apply', - 'select_date' => 'Select date..', - 'cancel' => 'Cancel', - 'from' => 'From', - 'to' => 'To', - 'structure' => 'Structure', - 'help_translating' => 'This help text is not yet available in your language. Will you help translate?', - 'showEverything' => 'Show everything', - 'never' => 'Never', - 'no_results_for_empty_search' => 'Your search was empty, so nothing was found.', - 'removed_amount' => 'Removed :amount', - 'added_amount' => 'Added :amount', - 'asset_account_role_help' => 'Any extra options resulting from your choice can be set later.', - 'Opening balance' => 'Opening balance', - 'create_new_stuff' => 'Create new stuff', - 'new_withdrawal' => 'New withdrawal', - 'create_new_transaction' => 'Create a new transaction', - 'sidebar_frontpage_create' => 'Create', - 'new_transaction' => 'New transaction', - 'no_rules_for_bill' => 'This bill has no rules associated to it.', - 'go_to_asset_accounts' => 'View your asset accounts', - 'go_to_budgets' => 'Go to your budgets', - 'go_to_withdrawals' => 'Go to your withdrawals', - 'clones_journal_x' => 'This transaction is a clone of ":description" (#:id)', - 'go_to_categories' => 'Go to your categories', - 'go_to_bills' => 'Go to your bills', - 'go_to_expense_accounts' => 'See your expense accounts', - 'go_to_revenue_accounts' => 'See your revenue accounts', - 'go_to_piggies' => 'Go to your piggy banks', - 'new_deposit' => 'New deposit', - 'new_transfer' => 'New transfer', - 'new_transfers' => 'New transfer', - 'new_asset_account' => 'New asset account', - 'new_expense_account' => 'New expense account', - 'new_revenue_account' => 'New revenue account', - 'new_liabilities_account' => 'New liability', - 'new_budget' => 'New budget', - 'new_bill' => 'New bill', - 'block_account_logout' => 'You have been logged out. Blocked accounts cannot use this site. Did you register with a valid email address?', - 'flash_success' => 'Success!', - 'flash_info' => 'Message', - 'flash_warning' => 'Warning!', - 'flash_error' => 'Error!', - 'flash_danger' => 'Danger!', - 'flash_info_multiple' => 'There is one message|There are :count messages', - 'flash_error_multiple' => 'There is one error|There are :count errors', - 'net_worth' => 'Net worth', - 'help_for_this_page' => 'Help for this page', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => 'Hello!', - 'two_factor_enter_code' => 'To continue, please enter your two factor authentication code. Your application can generate it for you.', - 'two_factor_code_here' => 'Enter code here', - 'two_factor_title' => 'Two factor authentication', - 'authenticate' => 'Authenticate', - 'two_factor_forgot_title' => 'Lost two factor authentication', - 'two_factor_forgot' => 'I forgot my two-factor thing.', - 'two_factor_lost_header' => 'Lost your two factor authentication?', - 'two_factor_lost_intro' => 'If you lost your backup codes as well, you have bad luck. This is not something you can fix from the web interface. You have two choices.', - 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read this entry in the FAQ for instructions.', - 'two_factor_lost_fix_owner' => 'Otherwise, email the site owner, :site_owner and ask them to reset your two factor authentication.', - 'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.', - 'pref_two_factor_new_backup_codes' => 'Get new backup codes', - 'pref_two_factor_backup_code_count' => 'You have :count valid backup code.|You have :count valid backup codes.', - '2fa_i_have_them' => 'I stored them!', - 'warning_much_data' => ':days days of data may take a while to load.', - 'registered' => 'You have registered successfully!', - 'Default asset account' => 'Default asset account', - 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.', - 'no_bill_pointer' => 'You seem to have no bills yet. You should create some on the bills-page. Bills can help you keep track of expenses.', - 'Savings account' => 'Savings account', - 'Credit card' => 'Credit card', - 'source_accounts' => 'Source account|Source accounts', - 'destination_accounts' => 'Destination account|Destination accounts', - 'user_id_is' => 'Your user id is :user', - 'field_supports_markdown' => 'This field supports Markdown.', - 'need_more_help' => 'If you need more help using Firefly III, please open a ticket on Github.', - 'reenable_intro_text' => 'You can also re-enable the introduction guidance.', - 'intro_boxes_after_refresh' => 'The introduction boxes will reappear when you refresh the page.', - 'show_all_no_filter' => 'Show all transactions without grouping them by date.', - 'expenses_by_category' => 'Expenses by category', - 'expenses_by_budget' => 'Expenses by budget', - 'income_by_category' => 'Income by category', - 'expenses_by_asset_account' => 'Expenses by asset account', - 'expenses_by_expense_account' => 'Expenses by expense account', - 'cannot_redirect_to_account' => 'Firefly III cannot redirect you to the correct page. Apologies.', - 'sum_of_expenses' => 'Sum of expenses', - 'sum_of_income' => 'Sum of income', - 'liabilities' => 'Liabilities', - 'spent_in_specific_budget' => 'Spent in budget ":budget"', - 'spent_in_specific_double' => 'Spent in account ":account"', - 'earned_in_specific_double' => 'Earned in account ":account"', - 'source_account' => 'Source account', - 'source_account_reconciliation' => 'You can\'t edit the source account of a reconciliation transaction.', - 'destination_account' => 'Destination account', - 'destination_account_reconciliation' => 'You can\'t edit the destination account of a reconciliation transaction.', - 'sum_of_expenses_in_budget' => 'Spent total in budget ":budget"', - 'left_in_budget_limit' => 'Left to spend according to budgeting', - 'current_period' => 'Current period', - 'show_the_current_period_and_overview' => 'Show the current period and overview', - 'pref_languages_locale' => 'For a language other than English to work properly, your operating system must be equipped with the correct locale-information. If these are not present, currency data, dates and amounts may be formatted wrong.', - 'budget_in_period' => 'All transactions for budget ":name" between :start and :end in :currency', - 'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency', - 'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.', - 'chart_account_in_period' => 'Chart for all transactions for account ":name" (:balance) between :start and :end', - 'chart_category_in_period' => 'Chart for all transactions for category ":name" between :start and :end', - 'chart_category_all' => 'Chart for all transactions for category ":name"', - 'clone_withdrawal' => 'Clone this withdrawal', - 'clone_deposit' => 'Clone this deposit', - 'clone_transfer' => 'Clone this transfer', - 'multi_select_no_selection' => 'None selected', - 'multi_select_select_all' => 'Select all', - 'multi_select_n_selected' => 'selected', - 'multi_select_all_selected' => 'All selected', - 'multi_select_filter_placeholder' => 'Find..', - 'intro_next_label' => 'Next', - 'intro_prev_label' => 'Previous', - 'intro_skip_label' => 'Skip', - 'intro_done_label' => 'Done', - 'between_dates_breadcrumb' => 'Between :start and :end', - 'all_journals_without_budget' => 'All transactions without a budget', - 'journals_without_budget' => 'Transactions without a budget', - 'all_journals_without_category' => 'All transactions without a category', - 'journals_without_category' => 'Transactions without a category', - 'all_journals_for_account' => 'All transactions for account :name', - 'chart_all_journals_for_account' => 'Chart of all transactions for account :name', - 'journals_in_period_for_account' => 'All transactions for account :name between :start and :end', - 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', - 'transferred' => 'Transferred', - 'all_withdrawal' => 'All expenses', - 'all_transactions' => 'All transactions', - 'title_withdrawal_between' => 'All expenses between :start and :end', - 'all_deposit' => 'All revenue', - 'title_deposit_between' => 'All revenue between :start and :end', - 'all_transfers' => 'All transfers', - 'title_transfers_between' => 'All transfers between :start and :end', - 'all_transfer' => 'All transfers', - 'all_journals_for_tag' => 'All transactions for tag ":tag"', - 'title_transfer_between' => 'All transfers between :start and :end', - 'all_journals_for_category' => 'All transactions for category :name', - 'all_journals_for_budget' => 'All transactions for budget :name', - 'chart_all_journals_for_budget' => 'Chart of all transactions for budget :name', - 'journals_in_period_for_category' => 'All transactions for category :name between :start and :end', - 'journals_in_period_for_tag' => 'All transactions for tag :tag between :start and :end', - 'not_available_demo_user' => 'The feature you try to access is not available to demo users.', - 'exchange_rate_instructions' => 'Asset account "@name" only accepts transactions in @native_currency. If you wish to use @foreign_currency instead, make sure that the amount in @native_currency is known as well:', - 'transfer_exchange_rate_instructions' => 'Source asset account "@source_name" only accepts transactions in @source_currency. Destination asset account "@dest_name" only accepts transactions in @dest_currency. You must provide the transferred amount correctly in both currencies.', - 'transaction_data' => 'Transaction data', - 'invalid_server_configuration' => 'Invalid server configuration', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Quickswitch', - 'sign_in_to_start' => 'Sign in to start your session', - 'sign_in' => 'Sign in', - 'register_new_account' => 'Register a new account', - 'forgot_my_password' => 'I forgot my password', - 'problems_with_input' => 'There were some problems with your input.', - 'reset_password' => 'Reset your password', - 'button_reset_password' => 'Reset password', - 'reset_button' => 'Reset', - 'want_to_login' => 'I want to login', - 'login_page_title' => 'Login to Firefly III', - 'register_page_title' => 'Register at Firefly III', - 'forgot_pw_page_title' => 'Forgot your password for Firefly III', - 'reset_pw_page_title' => 'Reset your password for Firefly III', - 'cannot_reset_demo_user' => 'You cannot reset the password of the demo user.', - 'no_att_demo_user' => 'The demo user can\'t upload attachments.', - 'button_register' => 'Register', - 'authorization' => 'Authorisation', - 'active_bills_only' => 'active bills only', - 'active_bills_only_total' => 'all active bills', - 'active_exp_bills_only' => 'active and expected bills only', - 'active_exp_bills_only_total' => 'all active expected bills only', - 'per_period_sum_1D' => 'Expected daily costs', - 'per_period_sum_1W' => 'Expected weekly costs', - 'per_period_sum_1M' => 'Expected monthly costs', - 'per_period_sum_3M' => 'Expected quarterly costs', - 'per_period_sum_6M' => 'Expected half-yearly costs', - 'per_period_sum_1Y' => 'Expected yearly costs', - 'average_per_bill' => 'average per bill', - 'expected_total' => 'expected total', - 'reconciliation_account_name' => ':name reconciliation (:currency)', - 'saved' => 'Saved', - 'advanced_options' => 'Advanced options', - 'advanced_options_explain' => 'Some pages in Firefly III have advanced options hidden behind this button. This page doesn\'t have anything fancy here, but do check out the others!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Close', + 'actions' => 'Actions', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'split' => 'Split', + 'single_split' => 'Split', + 'clone' => 'Clone', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Confirm action', + 'last_seven_days' => 'Last seven days', + 'last_thirty_days' => 'Last thirty days', + 'last_180_days' => 'Last 180 days', + 'month_to_date' => 'Month to date', + 'year_to_date' => 'Year to date', + 'YTD' => 'YTD', + 'welcome_back' => 'What\'s playing?', + 'everything' => 'Everything', + 'today' => 'today', + 'customRange' => 'Custom range', + 'date_range' => 'Date range', + 'apply' => 'Apply', + 'select_date' => 'Select date..', + 'cancel' => 'Cancel', + 'from' => 'From', + 'to' => 'To', + 'structure' => 'Structure', + 'help_translating' => 'This help text is not yet available in your language. Will you help translate?', + 'showEverything' => 'Show everything', + 'never' => 'Never', + 'no_results_for_empty_search' => 'Your search was empty, so nothing was found.', + 'removed_amount' => 'Removed :amount', + 'added_amount' => 'Added :amount', + 'asset_account_role_help' => 'Any extra options resulting from your choice can be set later.', + 'Opening balance' => 'Opening balance', + 'create_new_stuff' => 'Create new stuff', + 'new_withdrawal' => 'New withdrawal', + 'create_new_transaction' => 'Create a new transaction', + 'sidebar_frontpage_create' => 'Create', + 'new_transaction' => 'New transaction', + 'no_rules_for_bill' => 'This bill has no rules associated to it.', + 'go_to_asset_accounts' => 'View your asset accounts', + 'go_to_budgets' => 'Go to your budgets', + 'go_to_withdrawals' => 'Go to your withdrawals', + 'clones_journal_x' => 'This transaction is a clone of ":description" (#:id)', + 'go_to_categories' => 'Go to your categories', + 'go_to_bills' => 'Go to your bills', + 'go_to_expense_accounts' => 'See your expense accounts', + 'go_to_revenue_accounts' => 'See your revenue accounts', + 'go_to_piggies' => 'Go to your piggy banks', + 'new_deposit' => 'New deposit', + 'new_transfer' => 'New transfer', + 'new_transfers' => 'New transfer', + 'new_asset_account' => 'New asset account', + 'new_expense_account' => 'New expense account', + 'new_revenue_account' => 'New revenue account', + 'new_liabilities_account' => 'New liability', + 'new_budget' => 'New budget', + 'new_bill' => 'New bill', + 'block_account_logout' => 'You have been logged out. Blocked accounts cannot use this site. Did you register with a valid email address?', + 'flash_success' => 'Success!', + 'flash_info' => 'Message', + 'flash_warning' => 'Warning!', + 'flash_error' => 'Error!', + 'flash_danger' => 'Danger!', + 'flash_info_multiple' => 'There is one message|There are :count messages', + 'flash_error_multiple' => 'There is one error|There are :count errors', + 'net_worth' => 'Net worth', + 'help_for_this_page' => 'Help for this page', + 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', + 'two_factor_welcome' => 'Hello!', + 'two_factor_enter_code' => 'To continue, please enter your two factor authentication code. Your application can generate it for you.', + 'two_factor_code_here' => 'Enter code here', + 'two_factor_title' => 'Two factor authentication', + 'authenticate' => 'Authenticate', + 'two_factor_forgot_title' => 'Lost two factor authentication', + 'two_factor_forgot' => 'I forgot my two-factor thing.', + 'two_factor_lost_header' => 'Lost your two factor authentication?', + 'two_factor_lost_intro' => 'If you lost your backup codes as well, you have bad luck. This is not something you can fix from the web interface. You have two choices.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner and ask them to reset your two factor authentication.', + 'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.', + 'pref_two_factor_new_backup_codes' => 'Get new backup codes', + 'pref_two_factor_backup_code_count' => 'You have :count valid backup code.|You have :count valid backup codes.', + '2fa_i_have_them' => 'I stored them!', + 'warning_much_data' => ':days days of data may take a while to load.', + 'registered' => 'You have registered successfully!', + 'Default asset account' => 'Default asset account', + 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.', + 'no_bill_pointer' => 'You seem to have no bills yet. You should create some on the bills-page. Bills can help you keep track of expenses.', + 'Savings account' => 'Savings account', + 'Credit card' => 'Credit card', + 'source_accounts' => 'Source account|Source accounts', + 'destination_accounts' => 'Destination account|Destination accounts', + 'user_id_is' => 'Your user id is :user', + 'field_supports_markdown' => 'This field supports Markdown.', + 'need_more_help' => 'If you need more help using Firefly III, please open a ticket on Github.', + 'reenable_intro_text' => 'You can also re-enable the introduction guidance.', + 'intro_boxes_after_refresh' => 'The introduction boxes will reappear when you refresh the page.', + 'show_all_no_filter' => 'Show all transactions without grouping them by date.', + 'expenses_by_category' => 'Expenses by category', + 'expenses_by_budget' => 'Expenses by budget', + 'income_by_category' => 'Income by category', + 'expenses_by_asset_account' => 'Expenses by asset account', + 'expenses_by_expense_account' => 'Expenses by expense account', + 'cannot_redirect_to_account' => 'Firefly III cannot redirect you to the correct page. Apologies.', + 'sum_of_expenses' => 'Sum of expenses', + 'sum_of_income' => 'Sum of income', + 'liabilities' => 'Liabilities', + 'spent_in_specific_budget' => 'Spent in budget ":budget"', + 'spent_in_specific_double' => 'Spent in account ":account"', + 'earned_in_specific_double' => 'Earned in account ":account"', + 'source_account' => 'Source account', + 'source_account_reconciliation' => 'You can\'t edit the source account of a reconciliation transaction.', + 'destination_account' => 'Destination account', + 'destination_account_reconciliation' => 'You can\'t edit the destination account of a reconciliation transaction.', + 'sum_of_expenses_in_budget' => 'Spent total in budget ":budget"', + 'left_in_budget_limit' => 'Left to spend according to budgeting', + 'current_period' => 'Current period', + 'show_the_current_period_and_overview' => 'Show the current period and overview', + 'pref_languages_locale' => 'For a language other than English to work properly, your operating system must be equipped with the correct locale-information. If these are not present, currency data, dates and amounts may be formatted wrong.', + 'budget_in_period' => 'All transactions for budget ":name" between :start and :end in :currency', + 'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency', + 'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.', + 'chart_account_in_period' => 'Chart for all transactions for account ":name" (:balance) between :start and :end', + 'chart_category_in_period' => 'Chart for all transactions for category ":name" between :start and :end', + 'chart_category_all' => 'Chart for all transactions for category ":name"', + 'clone_withdrawal' => 'Clone this withdrawal', + 'clone_deposit' => 'Clone this deposit', + 'clone_transfer' => 'Clone this transfer', + 'multi_select_no_selection' => 'None selected', + 'multi_select_select_all' => 'Select all', + 'multi_select_n_selected' => 'selected', + 'multi_select_all_selected' => 'All selected', + 'multi_select_filter_placeholder' => 'Find..', + 'intro_next_label' => 'Next', + 'intro_prev_label' => 'Previous', + 'intro_skip_label' => 'Skip', + 'intro_done_label' => 'Done', + 'between_dates_breadcrumb' => 'Between :start and :end', + 'all_journals_without_budget' => 'All transactions without a budget', + 'journals_without_budget' => 'Transactions without a budget', + 'all_journals_without_category' => 'All transactions without a category', + 'journals_without_category' => 'Transactions without a category', + 'all_journals_for_account' => 'All transactions for account :name', + 'chart_all_journals_for_account' => 'Chart of all transactions for account :name', + 'journals_in_period_for_account' => 'All transactions for account :name between :start and :end', + 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', + 'transferred' => 'Transferred', + 'all_withdrawal' => 'All expenses', + 'all_transactions' => 'All transactions', + 'title_withdrawal_between' => 'All expenses between :start and :end', + 'all_deposit' => 'All revenue', + 'title_deposit_between' => 'All revenue between :start and :end', + 'all_transfers' => 'All transfers', + 'title_transfers_between' => 'All transfers between :start and :end', + 'all_transfer' => 'All transfers', + 'all_journals_for_tag' => 'All transactions for tag ":tag"', + 'title_transfer_between' => 'All transfers between :start and :end', + 'all_journals_for_category' => 'All transactions for category :name', + 'all_journals_for_budget' => 'All transactions for budget :name', + 'chart_all_journals_for_budget' => 'Chart of all transactions for budget :name', + 'journals_in_period_for_category' => 'All transactions for category :name between :start and :end', + 'journals_in_period_for_tag' => 'All transactions for tag :tag between :start and :end', + 'not_available_demo_user' => 'The feature you try to access is not available to demo users.', + 'exchange_rate_instructions' => 'Asset account "@name" only accepts transactions in @native_currency. If you wish to use @foreign_currency instead, make sure that the amount in @native_currency is known as well:', + 'transfer_exchange_rate_instructions' => 'Source asset account "@source_name" only accepts transactions in @source_currency. Destination asset account "@dest_name" only accepts transactions in @dest_currency. You must provide the transferred amount correctly in both currencies.', + 'transaction_data' => 'Transaction data', + 'invalid_server_configuration' => 'Invalid server configuration', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Quickswitch', + 'sign_in_to_start' => 'Sign in to start your session', + 'sign_in' => 'Sign in', + 'register_new_account' => 'Register a new account', + 'forgot_my_password' => 'I forgot my password', + 'problems_with_input' => 'There were some problems with your input.', + 'reset_password' => 'Reset your password', + 'button_reset_password' => 'Reset password', + 'reset_button' => 'Reset', + 'want_to_login' => 'I want to login', + 'login_page_title' => 'Login to Firefly III', + 'register_page_title' => 'Register at Firefly III', + 'forgot_pw_page_title' => 'Forgot your password for Firefly III', + 'reset_pw_page_title' => 'Reset your password for Firefly III', + 'cannot_reset_demo_user' => 'You cannot reset the password of the demo user.', + 'no_att_demo_user' => 'The demo user can\'t upload attachments.', + 'button_register' => 'Register', + 'authorization' => 'Authorisation', + 'active_bills_only' => 'active bills only', + 'active_bills_only_total' => 'all active bills', + 'active_exp_bills_only' => 'active and expected bills only', + 'active_exp_bills_only_total' => 'all active expected bills only', + 'per_period_sum_1D' => 'Expected daily costs', + 'per_period_sum_1W' => 'Expected weekly costs', + 'per_period_sum_1M' => 'Expected monthly costs', + 'per_period_sum_3M' => 'Expected quarterly costs', + 'per_period_sum_6M' => 'Expected half-yearly costs', + 'per_period_sum_1Y' => 'Expected yearly costs', + 'average_per_bill' => 'average per bill', + 'expected_total' => 'expected total', + 'reconciliation_account_name' => ':name reconciliation (:currency)', + 'saved' => 'Saved', + 'advanced_options' => 'Advanced options', + 'advanced_options_explain' => 'Some pages in Firefly III have advanced options hidden behind this button. This page doesn\'t have anything fancy here, but do check out the others!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', + 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', + 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', + 'webhook_response_TRANSACTIONS' => 'Transaction details', + 'webhook_response_ACCOUNTS' => 'Account details', + 'webhook_response_none_NONE' => 'No details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspect', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => 'View message', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logs', + 'response' => 'Response', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Firefly III v:version Authorisation Request', - 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', - 'scopes_will_be_able' => 'This application will be able to:', - 'button_authorize' => 'Authorise', - 'none_in_select_list' => '(none)', - 'no_piggy_bank' => '(no piggy bank)', - 'name_in_currency' => ':name in :currency', - 'paid_in_currency' => 'Paid in :currency', - 'unpaid_in_currency' => 'Unpaid in :currency', - 'is_alpha_warning' => 'You are running an ALPHA version. Be wary of bugs and issues.', - 'is_beta_warning' => 'You are running an BETA version. Be wary of bugs and issues.', - 'all_destination_accounts' => 'Destination accounts', - 'all_source_accounts' => 'Source accounts', - 'back_to_index' => 'Back to the index', - 'cant_logout_guard' => 'Firefly III can\'t log you out.', - 'internal_reference' => 'Internal reference', + 'authorization_request' => 'Firefly III v:version Authorisation Request', + 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', + 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', + 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', + 'scopes_will_be_able' => 'This application will be able to:', + 'button_authorize' => 'Authorise', + 'none_in_select_list' => '(none)', + 'no_piggy_bank' => '(no piggy bank)', + 'name_in_currency' => ':name in :currency', + 'paid_in_currency' => 'Paid in :currency', + 'unpaid_in_currency' => 'Unpaid in :currency', + 'is_alpha_warning' => 'You are running an ALPHA version. Be wary of bugs and issues.', + 'is_beta_warning' => 'You are running an BETA version. Be wary of bugs and issues.', + 'all_destination_accounts' => 'Destination accounts', + 'all_source_accounts' => 'Source accounts', + 'back_to_index' => 'Back to the index', + 'cant_logout_guard' => 'Firefly III can\'t log you out.', + 'internal_reference' => 'Internal reference', // check for updates: - 'update_check_title' => 'Check for updates', - 'admin_update_check_title' => 'Automatically check for update', - 'admin_update_check_explain' => 'Firefly III can check for updates automatically. When you enable this setting, it will contact the Firefly III update server to see if a new version of Firefly III is available. When it is, you will get a notification. You can test this notification using the button on the right. Please indicate below if you want Firefly III to check for updates.', - 'check_for_updates_permission' => 'Firefly III can check for updates, but it needs your permission to do so. Please go to the administration to indicate if you would like this feature to be enabled.', - 'updates_ask_me_later' => 'Ask me later', - 'updates_do_not_check' => 'Do not check for updates', - 'updates_enable_check' => 'Enable the check for updates', - 'admin_update_check_now_title' => 'Check for updates now', - 'admin_update_check_now_explain' => 'If you press the button, Firefly III will see if your current version is the latest.', - 'check_for_updates_button' => 'Check now!', - 'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.', - 'update_version_beta' => 'This version is a BETA version. You may run into issues.', - 'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.', - 'update_current_version_alert' => 'You are running :version, which is the latest available release.', - 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', - 'update_check_error' => 'An error occurred while checking for updates: :error', - 'unknown_error' => 'Unknown error. Sorry about that.', - 'just_new_release' => 'A new version is available! Version :version was released :date. This release is very fresh. Wait a few days for the new release to stabilise.', - 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', - 'admin_update_channel_title' => 'Update channel', - 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.', - 'update_channel_stable' => 'Stable. Everything should work as expected.', - 'update_channel_beta' => 'Beta. New features but things may be broken.', - 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', + 'update_check_title' => 'Check for updates', + 'admin_update_check_title' => 'Automatically check for update', + 'admin_update_check_explain' => 'Firefly III can check for updates automatically. When you enable this setting, it will contact the Firefly III update server to see if a new version of Firefly III is available. When it is, you will get a notification. You can test this notification using the button on the right. Please indicate below if you want Firefly III to check for updates.', + 'check_for_updates_permission' => 'Firefly III can check for updates, but it needs your permission to do so. Please go to the administration to indicate if you would like this feature to be enabled.', + 'updates_ask_me_later' => 'Ask me later', + 'updates_do_not_check' => 'Do not check for updates', + 'updates_enable_check' => 'Enable the check for updates', + 'admin_update_check_now_title' => 'Check for updates now', + 'admin_update_check_now_explain' => 'If you press the button, Firefly III will see if your current version is the latest.', + 'check_for_updates_button' => 'Check now!', + 'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.', + 'update_version_beta' => 'This version is a BETA version. You may run into issues.', + 'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'You are running :version, which is the latest available release.', + 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', + 'update_check_error' => 'An error occurred while checking for updates: :error', + 'unknown_error' => 'Unknown error. Sorry about that.', + 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', + 'admin_update_channel_title' => 'Update channel', + 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.', + 'update_channel_stable' => 'Stable. Everything should work as expected.', + 'update_channel_beta' => 'Beta. New features but things may be broken.', + 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', // search - 'search' => 'Search', - 'search_query' => 'Query', - 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', - 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', - 'search_for_query' => 'Firefly III is searching for transactions with all of these words in them: :query', - 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', + 'search' => 'Search', + 'search_query' => 'Query', + 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', + 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', + 'search_for_query' => 'Firefly III is searching for transactions with all of these words in them: :query', + 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaction date is ":value"', 'search_modifier_not_date_on' => 'Transaction date is not ":value"', 'search_modifier_reconciled' => 'Transaction is reconciled', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Transaction type is ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Tag is ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'The following modifiers are applied to the search as well:', 'general_search_error' => 'An error occurred while searching. Please check the log files for more information.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'You cannot execute inactive rules.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Rules', 'rule_name' => 'Name of rule', 'rule_triggers' => 'Rule triggers when', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'When a transaction is updated', 'rule_trigger_user_action' => 'User action is ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Source account name starts with..', 'rule_trigger_source_account_starts' => 'Source account name starts with ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Budget is ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Transaction currency is..', 'rule_trigger_currency_is' => 'Transaction currency is ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Transaction foreign currency is..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Rule group for bills', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Rule for bill ":name"', 'new_rule_for_bill_description' => 'This rule marks transactions for bill ":name".', - 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', - 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', + 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', + 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', // tags - 'store_new_tag' => 'Store new tag', - 'update_tag' => 'Update tag', - 'no_location_set' => 'No location set.', - 'meta_data' => 'Meta data', - 'location' => 'Location', - 'without_date' => 'Without date', - 'result' => 'Result', - 'sums_apply_to_range' => 'All sums apply to the selected range', - 'mapbox_api_key' => 'To use map, get an API key from Mapbox. Open your .env file and enter this code after MAPBOX_API_KEY=.', - 'press_object_location' => 'Right click or long press to set the object\'s location.', - 'clear_location' => 'Clear location', - 'delete_all_selected_tags' => 'Delete all selected tags', - 'select_tags_to_delete' => 'Don\'t forget to select some tags.', - 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', - 'create_rule_from_transaction' => 'Create rule based on transaction', - 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', - + 'store_new_tag' => 'Store new tag', + 'update_tag' => 'Update tag', + 'no_location_set' => 'No location set.', + 'meta_data' => 'Meta data', + 'location' => 'Location', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Without date', + 'result' => 'Result', + 'sums_apply_to_range' => 'All sums apply to the selected range', + 'mapbox_api_key' => 'To use map, get an API key from Mapbox. Open your .env file and enter this code after MAPBOX_API_KEY=.', + 'press_object_location' => 'Right click or long press to set the object\'s location.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Clear location', + 'delete_all_selected_tags' => 'Delete all selected tags', + 'select_tags_to_delete' => 'Don\'t forget to select some tags.', + 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', + 'create_rule_from_transaction' => 'Create rule based on transaction', + 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(equal to language)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Home screen accounts', - 'pref_home_screen_accounts_help' => 'Which accounts should be displayed on the home page?', - 'pref_view_range' => 'View range', - 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', - 'pref_1D' => 'One day', - 'pref_1W' => 'One week', - 'pref_1M' => 'One month', - 'pref_3M' => 'Three months (quarter)', - 'pref_6M' => 'Six months', - 'pref_1Y' => 'One year', - 'pref_last365' => 'Last year', - 'pref_last90' => 'Last 90 days', - 'pref_last30' => 'Last 30 days', - 'pref_last7' => 'Last 7 days', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Languages', - 'pref_locale' => 'Locale settings', - 'pref_languages_help' => 'Firefly III supports several languages. Which one do you prefer?', - 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', - 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', - 'pref_custom_fiscal_year' => 'Fiscal year settings', - 'pref_custom_fiscal_year_label' => 'Enabled', - 'pref_custom_fiscal_year_help' => 'In countries that use a financial year other than January 1 to December 31, you can switch this on and specify start / end days of the fiscal year', - 'pref_fiscal_year_start_label' => 'Fiscal year start date', - 'pref_two_factor_auth' => '2-step verification', - 'pref_two_factor_auth_help' => 'When you enable 2-step verification (also known as two-factor authentication), you add an extra layer of security to your account. You sign in with something you know (your password) and something you have (a verification code). Verification codes are generated by an application on your phone, such as Authy or Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Enable 2-step verification', - 'pref_two_factor_auth_disabled' => '2-step verification code removed and disabled', - 'pref_two_factor_auth_remove_it' => 'Don\'t forget to remove the account from your authentication app!', - 'pref_two_factor_auth_code' => 'Verify code', - 'pref_two_factor_auth_code_help' => 'Scan the QR code with an application on your phone such as Authy or Google Authenticator and enter the generated code.', - 'pref_two_factor_auth_reset_code' => 'Reset verification code', - 'pref_two_factor_auth_disable_2fa' => 'Disable 2FA', - '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', - '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', - '2fa_already_enabled' => '2-step verification is already enabled.', - 'wrong_mfa_code' => 'This MFA code is not valid.', - 'pref_save_settings' => 'Save settings', - 'saved_preferences' => 'Preferences saved!', - 'preferences_general' => 'General', - 'preferences_frontpage' => 'Home screen', - 'preferences_security' => 'Security', - 'preferences_layout' => 'Layout', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Show deposits on the home screen', - 'pref_home_show_deposits_info' => 'The home screen already shows your expense accounts. Should it also show your revenue accounts?', - 'pref_home_do_show_deposits' => 'Yes, show them', - 'successful_count' => 'of which :count successful', - 'list_page_size_title' => 'Page size', - 'list_page_size_help' => 'Any list of things (accounts, transactions, etc) shows at most this many per page.', - 'list_page_size_label' => 'Page size', - 'between_dates' => '(:start and :end)', - 'pref_optional_fields_transaction' => 'Optional fields for transactions', - 'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.', - 'optional_tj_date_fields' => 'Date fields', - 'optional_tj_other_fields' => 'Other fields', - 'optional_tj_attachment_fields' => 'Attachment fields', - 'pref_optional_tj_interest_date' => 'Interest date', - 'pref_optional_tj_book_date' => 'Book date', - 'pref_optional_tj_process_date' => 'Processing date', - 'pref_optional_tj_due_date' => 'Due date', - 'pref_optional_tj_payment_date' => 'Payment date', - 'pref_optional_tj_invoice_date' => 'Invoice date', - 'pref_optional_tj_internal_reference' => 'Internal reference', - 'pref_optional_tj_notes' => 'Notes', - 'pref_optional_tj_attachments' => 'Attachments', - 'pref_optional_tj_external_url' => 'External URL', - 'pref_optional_tj_location' => 'Location', - 'pref_optional_tj_links' => 'Transaction links', - 'optional_field_meta_dates' => 'Dates', - 'optional_field_meta_business' => 'Business', - 'optional_field_attachments' => 'Attachments', - 'optional_field_meta_data' => 'Optional meta data', - 'external_url' => 'External URL', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(equal to language)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Home screen accounts', + 'pref_home_screen_accounts_help' => 'Which accounts should be displayed on the home page?', + 'pref_view_range' => 'View range', + 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', + 'pref_1D' => 'One day', + 'pref_1W' => 'One week', + 'pref_1M' => 'One month', + 'pref_3M' => 'Three months (quarter)', + 'pref_6M' => 'Six months', + 'pref_1Y' => 'One year', + 'pref_last365' => 'Last year', + 'pref_last90' => 'Last 90 days', + 'pref_last30' => 'Last 30 days', + 'pref_last7' => 'Last 7 days', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => 'Languages', + 'pref_locale' => 'Locale settings', + 'pref_languages_help' => 'Firefly III supports several languages. Which one do you prefer?', + 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', + 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', + 'pref_custom_fiscal_year' => 'Fiscal year settings', + 'pref_custom_fiscal_year_label' => 'Enabled', + 'pref_custom_fiscal_year_help' => 'In countries that use a financial year other than January 1 to December 31, you can switch this on and specify start / end days of the fiscal year', + 'pref_fiscal_year_start_label' => 'Fiscal year start date', + 'pref_two_factor_auth' => '2-step verification', + 'pref_two_factor_auth_help' => 'When you enable 2-step verification (also known as two-factor authentication), you add an extra layer of security to your account. You sign in with something you know (your password) and something you have (a verification code). Verification codes are generated by an application on your phone, such as Authy or Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Enable 2-step verification', + 'pref_two_factor_auth_disabled' => '2-step verification code removed and disabled', + 'pref_two_factor_auth_remove_it' => 'Don\'t forget to remove the account from your authentication app!', + 'pref_two_factor_auth_code' => 'Verify code', + 'pref_two_factor_auth_code_help' => 'Scan the QR code with an application on your phone such as Authy or Google Authenticator and enter the generated code.', + 'pref_two_factor_auth_reset_code' => 'Reset verification code', + 'pref_two_factor_auth_disable_2fa' => 'Disable 2FA', + '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', + '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', + '2fa_already_enabled' => '2-step verification is already enabled.', + 'wrong_mfa_code' => 'This MFA code is not valid.', + 'pref_save_settings' => 'Save settings', + 'saved_preferences' => 'Preferences saved!', + 'preferences_general' => 'General', + 'preferences_frontpage' => 'Home screen', + 'preferences_security' => 'Security', + 'preferences_layout' => 'Layout', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Show deposits on the home screen', + 'pref_home_show_deposits_info' => 'The home screen already shows your expense accounts. Should it also show your revenue accounts?', + 'pref_home_do_show_deposits' => 'Yes, show them', + 'successful_count' => 'of which :count successful', + 'list_page_size_title' => 'Page size', + 'list_page_size_help' => 'Any list of things (accounts, transactions, etc) shows at most this many per page.', + 'list_page_size_label' => 'Page size', + 'between_dates' => '(:start and :end)', + 'pref_optional_fields_transaction' => 'Optional fields for transactions', + 'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.', + 'optional_tj_date_fields' => 'Date fields', + 'optional_tj_other_fields' => 'Other fields', + 'optional_tj_attachment_fields' => 'Attachment fields', + 'pref_optional_tj_interest_date' => 'Interest date', + 'pref_optional_tj_book_date' => 'Book date', + 'pref_optional_tj_process_date' => 'Processing date', + 'pref_optional_tj_due_date' => 'Due date', + 'pref_optional_tj_payment_date' => 'Payment date', + 'pref_optional_tj_invoice_date' => 'Invoice date', + 'pref_optional_tj_internal_reference' => 'Internal reference', + 'pref_optional_tj_notes' => 'Notes', + 'pref_optional_tj_attachments' => 'Attachments', + 'pref_optional_tj_external_url' => 'External URL', + 'pref_optional_tj_location' => 'Location', + 'pref_optional_tj_links' => 'Transaction links', + 'optional_field_meta_dates' => 'Dates', + 'optional_field_meta_business' => 'Business', + 'optional_field_attachments' => 'Attachments', + 'optional_field_meta_data' => 'Optional meta data', + 'external_url' => 'External URL', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'All your other sessions have been logged out.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Delete ALL your budgets', - 'delete_all_categories' => 'Delete ALL your categories', - 'delete_all_tags' => 'Delete ALL your tags', - 'delete_all_bills' => 'Delete ALL your bills', - 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', - 'delete_all_rules' => 'Delete ALL your rules', - 'delete_all_recurring' => 'Delete ALL your recurring transactions', - 'delete_all_object_groups' => 'Delete ALL your object groups', - 'delete_all_accounts' => 'Delete ALL your accounts', - 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', - 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', - 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', - 'delete_all_liabilities' => 'Delete ALL your liabilities', - 'delete_all_transactions' => 'Delete ALL your transactions', - 'delete_all_withdrawals' => 'Delete ALL your withdrawals', - 'delete_all_deposits' => 'Delete ALL your deposits', - 'delete_all_transfers' => 'Delete ALL your transfers', - 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', - 'deleted_all_budgets' => 'All budgets have been deleted', - 'deleted_all_categories' => 'All categories have been deleted', - 'deleted_all_tags' => 'All tags have been deleted', - 'deleted_all_bills' => 'All bills have been deleted', - 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', - 'deleted_all_rules' => 'All rules and rule groups have been deleted', - 'deleted_all_object_groups' => 'All groups have been deleted', - 'deleted_all_accounts' => 'All accounts have been deleted', - 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', - 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', - 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', - 'deleted_all_liabilities' => 'All liabilities have been deleted', - 'deleted_all_transactions' => 'All transactions have been deleted', - 'deleted_all_withdrawals' => 'All withdrawals have been deleted', - 'deleted_all_deposits' => 'All deposits have been deleted', - 'deleted_all_transfers' => 'All transfers have been deleted', - 'deleted_all_recurring' => 'All recurring transactions have been deleted', - 'change_your_password' => 'Change your password', - 'delete_account' => 'Delete account', - 'current_password' => 'Current password', - 'new_password' => 'New password', - 'new_password_again' => 'New password (again)', - 'delete_your_account' => 'Delete your account', - 'delete_your_account_help' => 'Deleting your account will also delete any accounts, transactions, anything you might have saved into Firefly III. It\'ll be GONE.', - 'delete_your_account_password' => 'Enter your password to continue.', - 'password' => 'Password', - 'are_you_sure' => 'Are you sure? You cannot undo this.', - 'delete_account_button' => 'DELETE your account', - 'invalid_current_password' => 'Invalid current password!', - 'password_changed' => 'Password changed!', - 'should_change' => 'The idea is to change your password.', - 'invalid_password' => 'Invalid password!', - 'what_is_pw_security' => 'What is "verify password security"?', - 'secure_pw_title' => 'How to choose a secure password', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => 'Not a week goes by that you read in the news about a site losing the passwords of its users. Hackers and thieves use these passwords to try to steal your private information. This information is valuable.', - 'secure_pw_ff' => 'Do you use the same password all over the internet? If one site loses your password, hackers have access to all your data. Firefly III relies on you to choose a strong and unique password to protect your financial records.', - 'secure_pw_check_box' => 'To help you do that Firefly III can check if the password you want to use has been stolen in the past. If this is the case, Firefly III advises you NOT to use that password.', - 'secure_pw_working_title' => 'How does it work?', - 'secure_pw_working' => 'By ticking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', - 'secure_pw_should' => 'Should I tick the box?', - 'secure_pw_long_password' => 'Yes. Always verify your password is safe.', - 'command_line_token' => 'Command line token', - 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', - 'regenerate_command_line_token' => 'Regenerate command line token', - 'token_regenerated' => 'A new command line token was generated', - 'change_your_email' => 'Change your email address', - 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', - 'email_changed_logout' => 'Until you verify your email address, you cannot login.', - 'login_with_new_email' => 'You can now login with your new email address.', - 'login_with_old_email' => 'You can now login with your old email address again.', - 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', - 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', - 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', - 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Clients', - 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Client ID', - 'profile_oauth_client_name' => 'Name', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Create New Client', - 'profile_oauth_create_client' => 'Create Client', - 'profile_oauth_edit_client' => 'Edit Client', - 'profile_oauth_name_help' => 'Something your users will recognize and trust.', - 'profile_oauth_redirect_url' => 'Redirect URL', - 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', - 'profile_authorized_apps' => 'Authorized applications', - 'profile_authorized_clients' => 'Authorized clients', - 'profile_scopes' => 'Scopes', - 'profile_revoke' => 'Revoke', - 'profile_oauth_client_secret_title' => 'Client Secret', - 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', - 'profile_personal_access_tokens' => 'Personal Access Tokens', - 'profile_personal_access_token' => 'Personal Access Token', - 'profile_oauth_confidential' => 'Confidential', - 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', - 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', - 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', - 'profile_create_new_token' => 'Create new token', - 'profile_create_token' => 'Create token', - 'profile_create' => 'Create', - 'profile_save_changes' => 'Save changes', - 'profile_whoops' => 'Whoops!', - 'profile_something_wrong' => 'Something went wrong!', - 'profile_try_again' => 'Something went wrong. Please try again.', - 'amounts' => 'Amounts', - 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', - 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', - 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', - 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'All your other sessions have been logged out.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Delete ALL your budgets', + 'delete_all_categories' => 'Delete ALL your categories', + 'delete_all_tags' => 'Delete ALL your tags', + 'delete_all_bills' => 'Delete ALL your bills', + 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', + 'delete_all_rules' => 'Delete ALL your rules', + 'delete_all_recurring' => 'Delete ALL your recurring transactions', + 'delete_all_object_groups' => 'Delete ALL your object groups', + 'delete_all_accounts' => 'Delete ALL your accounts', + 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', + 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', + 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', + 'delete_all_liabilities' => 'Delete ALL your liabilities', + 'delete_all_transactions' => 'Delete ALL your transactions', + 'delete_all_withdrawals' => 'Delete ALL your withdrawals', + 'delete_all_deposits' => 'Delete ALL your deposits', + 'delete_all_transfers' => 'Delete ALL your transfers', + 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', + 'deleted_all_budgets' => 'All budgets have been deleted', + 'deleted_all_categories' => 'All categories have been deleted', + 'deleted_all_tags' => 'All tags have been deleted', + 'deleted_all_bills' => 'All bills have been deleted', + 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', + 'deleted_all_rules' => 'All rules and rule groups have been deleted', + 'deleted_all_object_groups' => 'All groups have been deleted', + 'deleted_all_accounts' => 'All accounts have been deleted', + 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', + 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', + 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', + 'deleted_all_liabilities' => 'All liabilities have been deleted', + 'deleted_all_transactions' => 'All transactions have been deleted', + 'deleted_all_withdrawals' => 'All withdrawals have been deleted', + 'deleted_all_deposits' => 'All deposits have been deleted', + 'deleted_all_transfers' => 'All transfers have been deleted', + 'deleted_all_recurring' => 'All recurring transactions have been deleted', + 'change_your_password' => 'Change your password', + 'delete_account' => 'Delete account', + 'current_password' => 'Current password', + 'new_password' => 'New password', + 'new_password_again' => 'New password (again)', + 'delete_your_account' => 'Delete your account', + 'delete_your_account_help' => 'Deleting your account will also delete any accounts, transactions, anything you might have saved into Firefly III. It\'ll be GONE.', + 'delete_your_account_password' => 'Enter your password to continue.', + 'password' => 'Password', + 'are_you_sure' => 'Are you sure? You cannot undo this.', + 'delete_account_button' => 'DELETE your account', + 'invalid_current_password' => 'Invalid current password!', + 'password_changed' => 'Password changed!', + 'should_change' => 'The idea is to change your password.', + 'invalid_password' => 'Invalid password!', + 'what_is_pw_security' => 'What is "verify password security"?', + 'secure_pw_title' => 'How to choose a secure password', + 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', + 'secure_pw_history' => 'Not a week goes by that you read in the news about a site losing the passwords of its users. Hackers and thieves use these passwords to try to steal your private information. This information is valuable.', + 'secure_pw_ff' => 'Do you use the same password all over the internet? If one site loses your password, hackers have access to all your data. Firefly III relies on you to choose a strong and unique password to protect your financial records.', + 'secure_pw_check_box' => 'To help you do that Firefly III can check if the password you want to use has been stolen in the past. If this is the case, Firefly III advises you NOT to use that password.', + 'secure_pw_working_title' => 'How does it work?', + 'secure_pw_working' => 'By ticking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', + 'secure_pw_should' => 'Should I tick the box?', + 'secure_pw_long_password' => 'Yes. Always verify your password is safe.', + 'command_line_token' => 'Command line token', + 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', + 'regenerate_command_line_token' => 'Regenerate command line token', + 'token_regenerated' => 'A new command line token was generated', + 'change_your_email' => 'Change your email address', + 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', + 'email_changed_logout' => 'Until you verify your email address, you cannot login.', + 'login_with_new_email' => 'You can now login with your new email address.', + 'login_with_old_email' => 'You can now login with your old email address again.', + 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', + 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', + 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', + 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Clients', + 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'Client ID', + 'profile_oauth_client_name' => 'Name', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Create New Client', + 'profile_oauth_create_client' => 'Create Client', + 'profile_oauth_edit_client' => 'Edit Client', + 'profile_oauth_name_help' => 'Something your users will recognize and trust.', + 'profile_oauth_redirect_url' => 'Redirect URL', + 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', + 'profile_authorized_apps' => 'Authorized applications', + 'profile_authorized_clients' => 'Authorized clients', + 'profile_scopes' => 'Scopes', + 'profile_revoke' => 'Revoke', + 'profile_oauth_client_secret_title' => 'Client Secret', + 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', + 'profile_personal_access_tokens' => 'Personal Access Tokens', + 'profile_personal_access_token' => 'Personal Access Token', + 'profile_oauth_confidential' => 'Confidential', + 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', + 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', + 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', + 'profile_create_new_token' => 'Create new token', + 'profile_create_token' => 'Create token', + 'profile_create' => 'Create', + 'profile_save_changes' => 'Save changes', + 'profile_whoops' => 'Whoops!', + 'profile_something_wrong' => 'Something went wrong!', + 'profile_try_again' => 'Something went wrong. Please try again.', + 'amounts' => 'Amounts', + 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', + 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', + 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', + 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Export data from Firefly III', - 'export_data_menu' => 'Export data', - 'export_data_bc' => 'Export data from Firefly III', - 'export_data_main_title' => 'Export data from Firefly III', - 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', - 'export_data_all_transactions' => 'Export all transactions', - 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Export data from Firefly III', + 'export_data_menu' => 'Export data', + 'export_data_bc' => 'Export data from Firefly III', + 'export_data_main_title' => 'Export data from Firefly III', + 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', + 'export_data_all_transactions' => 'Export all transactions', + 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'One attachment|:count attachments', - 'attachments' => 'Attachments', - 'edit_attachment' => 'Edit attachment ":name"', - 'update_attachment' => 'Update attachment', - 'delete_attachment' => 'Delete attachment ":name"', - 'attachment_deleted' => 'Deleted attachment ":name"', - 'liabilities_deleted' => 'Deleted liability ":name"', - 'attachment_updated' => 'Updated attachment ":name"', - 'upload_max_file_size' => 'Maximum file size: :size', - 'list_all_attachments' => 'List of all attachments', + 'nr_of_attachments' => 'One attachment|:count attachments', + 'attachments' => 'Attachments', + 'edit_attachment' => 'Edit attachment ":name"', + 'update_attachment' => 'Update attachment', + 'delete_attachment' => 'Delete attachment ":name"', + 'attachment_deleted' => 'Deleted attachment ":name"', + 'liabilities_deleted' => 'Deleted liability ":name"', + 'attachment_updated' => 'Updated attachment ":name"', + 'upload_max_file_size' => 'Maximum file size: :size', + 'list_all_attachments' => 'List of all attachments', // transaction index - 'title_expenses' => 'Expenses', - 'title_withdrawal' => 'Expenses', - 'title_revenue' => 'Revenue / income', - 'title_deposit' => 'Revenue / income', - 'title_transfer' => 'Transfers', - 'title_transfers' => 'Transfers', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Expenses', + 'title_withdrawal' => 'Expenses', + 'title_revenue' => 'Revenue / income', + 'title_deposit' => 'Revenue / income', + 'title_transfer' => 'Transfers', + 'title_transfers' => 'Transfers', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'This transaction is already a withdrawal', - 'convert_is_already_type_Deposit' => 'This transaction is already a deposit', - 'convert_is_already_type_Transfer' => 'This transaction is already a transfer', - 'convert_to_Withdrawal' => 'Convert ":description" to a withdrawal', - 'convert_to_Deposit' => 'Convert ":description" to a deposit', - 'convert_to_Transfer' => 'Convert ":description" to a transfer', - 'convert_options_WithdrawalDeposit' => 'Convert a withdrawal into a deposit', - 'convert_options_WithdrawalTransfer' => 'Convert a withdrawal into a transfer', - 'convert_options_DepositTransfer' => 'Convert a deposit into a transfer', - 'convert_options_DepositWithdrawal' => 'Convert a deposit into a withdrawal', - 'convert_options_TransferWithdrawal' => 'Convert a transfer into a withdrawal', - 'convert_options_TransferDeposit' => 'Convert a transfer into a deposit', - 'convert_Withdrawal_to_deposit' => 'Convert this withdrawal to a deposit', - 'convert_Withdrawal_to_transfer' => 'Convert this withdrawal to a transfer', - 'convert_Deposit_to_withdrawal' => 'Convert this deposit to a withdrawal', - 'convert_Deposit_to_transfer' => 'Convert this deposit to a transfer', - 'convert_Transfer_to_deposit' => 'Convert this transfer to a deposit', - 'convert_Transfer_to_withdrawal' => 'Convert this transfer to a withdrawal', - 'convert_please_set_revenue_source' => 'Please pick the revenue account where the money will come from.', - 'convert_please_set_asset_destination' => 'Please pick the asset account where the money will go to.', - 'convert_please_set_expense_destination' => 'Please pick the expense account where the money will go to.', - 'convert_please_set_asset_source' => 'Please pick the asset account where the money will come from.', - 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', - 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', - 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal', - 'converted_to_Deposit' => 'The transaction has been converted to a deposit', - 'converted_to_Transfer' => 'The transaction has been converted to a transfer', - 'invalid_convert_selection' => 'The account you have selected is already used in this transaction or does not exist.', - 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', - 'convert_to_withdrawal' => 'Convert to a withdrawal', - 'convert_to_deposit' => 'Convert to a deposit', - 'convert_to_transfer' => 'Convert to a transfer', + 'convert_is_already_type_Withdrawal' => 'This transaction is already a withdrawal', + 'convert_is_already_type_Deposit' => 'This transaction is already a deposit', + 'convert_is_already_type_Transfer' => 'This transaction is already a transfer', + 'convert_to_Withdrawal' => 'Convert ":description" to a withdrawal', + 'convert_to_Deposit' => 'Convert ":description" to a deposit', + 'convert_to_Transfer' => 'Convert ":description" to a transfer', + 'convert_options_WithdrawalDeposit' => 'Convert a withdrawal into a deposit', + 'convert_options_WithdrawalTransfer' => 'Convert a withdrawal into a transfer', + 'convert_options_DepositTransfer' => 'Convert a deposit into a transfer', + 'convert_options_DepositWithdrawal' => 'Convert a deposit into a withdrawal', + 'convert_options_TransferWithdrawal' => 'Convert a transfer into a withdrawal', + 'convert_options_TransferDeposit' => 'Convert a transfer into a deposit', + 'convert_Withdrawal_to_deposit' => 'Convert this withdrawal to a deposit', + 'convert_Withdrawal_to_transfer' => 'Convert this withdrawal to a transfer', + 'convert_Deposit_to_withdrawal' => 'Convert this deposit to a withdrawal', + 'convert_Deposit_to_transfer' => 'Convert this deposit to a transfer', + 'convert_Transfer_to_deposit' => 'Convert this transfer to a deposit', + 'convert_Transfer_to_withdrawal' => 'Convert this transfer to a withdrawal', + 'convert_please_set_revenue_source' => 'Please pick the revenue account where the money will come from.', + 'convert_please_set_asset_destination' => 'Please pick the asset account where the money will go to.', + 'convert_please_set_expense_destination' => 'Please pick the expense account where the money will go to.', + 'convert_please_set_asset_source' => 'Please pick the asset account where the money will come from.', + 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', + 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', + 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', + 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', + 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', + 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', + 'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal', + 'converted_to_Deposit' => 'The transaction has been converted to a deposit', + 'converted_to_Transfer' => 'The transaction has been converted to a transfer', + 'invalid_convert_selection' => 'The account you have selected is already used in this transaction or does not exist.', + 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', + 'convert_to_withdrawal' => 'Convert to a withdrawal', + 'convert_to_deposit' => 'Convert to a deposit', + 'convert_to_transfer' => 'Convert to a transfer', // create new stuff: - 'create_new_withdrawal' => 'Create new withdrawal', - 'create_new_deposit' => 'Create new deposit', - 'create_new_transfer' => 'Create new transfer', - 'create_new_asset' => 'Create new asset account', - 'create_new_liabilities' => 'Create new liability', - 'create_new_expense' => 'Create new expense account', - 'create_new_revenue' => 'Create new revenue account', - 'create_new_piggy_bank' => 'Create new piggy bank', - 'create_new_bill' => 'Create new bill', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Create new withdrawal', + 'create_new_deposit' => 'Create new deposit', + 'create_new_transfer' => 'Create new transfer', + 'create_new_asset' => 'Create new asset account', + 'create_new_liabilities' => 'Create new liability', + 'create_new_expense' => 'Create new expense account', + 'create_new_revenue' => 'Create new revenue account', + 'create_new_piggy_bank' => 'Create new piggy bank', + 'create_new_bill' => 'Create new bill', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Create a new currency', - 'store_currency' => 'Store new currency', - 'update_currency' => 'Update currency', - 'new_default_currency' => ':name is now the default currency.', - 'cannot_delete_currency' => 'Cannot delete :name because it is still in use.', - 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', - 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', - 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', - 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', - 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', - 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', - 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', - 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', - 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', - 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', - 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', - 'deleted_currency' => 'Currency :name deleted', - 'created_currency' => 'Currency :name created', - 'could_not_store_currency' => 'Could not store the new currency.', - 'updated_currency' => 'Currency :name updated', - 'ask_site_owner' => 'Please ask :owner to add, remove or edit currencies.', - 'currencies_intro' => 'Firefly III supports various currencies which you can set and enable here.', - 'make_default_currency' => 'Make default', - 'default_currency' => 'default', - 'currency_is_disabled' => 'Disabled', - 'enable_currency' => 'Enable', - 'disable_currency' => 'Disable', - 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', - 'currency_is_now_enabled' => 'Currency ":name" has been enabled', - 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'create_currency' => 'Create a new currency', + 'store_currency' => 'Store new currency', + 'update_currency' => 'Update currency', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Cannot delete :name because it is still in use.', + 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', + 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', + 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', + 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', + 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', + 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', + 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', + 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', + 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', + 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', + 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', + 'deleted_currency' => 'Currency :name deleted', + 'created_currency' => 'Currency :name created', + 'could_not_store_currency' => 'Could not store the new currency.', + 'updated_currency' => 'Currency :name updated', + 'ask_site_owner' => 'Please ask :owner to add, remove or edit currencies.', + 'currencies_intro' => 'Firefly III supports various currencies which you can set and enable here.', + 'make_default_currency' => 'Make default', + 'default_currency' => 'default', + 'currency_is_disabled' => 'Disabled', + 'enable_currency' => 'Enable', + 'disable_currency' => 'Disable', + 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', + 'currency_is_now_enabled' => 'Currency ":name" has been enabled', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Mandatory fields', - 'optionalFields' => 'Optional fields', - 'options' => 'Options', + 'mandatoryFields' => 'Mandatory fields', + 'optionalFields' => 'Optional fields', + 'options' => 'Options', // budgets: - 'daily_budgets' => 'Daily budgets', - 'weekly_budgets' => 'Weekly budgets', - 'monthly_budgets' => 'Monthly budgets', - 'quarterly_budgets' => 'Quarterly budgets', - 'half_year_budgets' => 'Half-yearly budgets', - 'yearly_budgets' => 'Yearly budgets', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', - 'total_available_budget' => 'Total available budget (between :start and :end)', - 'total_available_budget_in_currency' => 'Total available budget in :currency', - 'see_below' => 'see below', - 'create_new_budget' => 'Create a new budget', - 'store_new_budget' => 'Store new budget', - 'stored_new_budget' => 'Stored new budget ":name"', - 'available_between' => 'Available between :start and :end', - 'transactionsWithoutBudget' => 'Expenses without budget', - 'transactions_no_budget' => 'Expenses without budget between :start and :end', - 'spent_between' => 'Already spent between :start and :end', - 'set_available_amount' => 'Set available amount', - 'update_available_amount' => 'Update available amount', - 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', - 'createBudget' => 'New budget', - 'invalid_currency' => 'This is an invalid currency', - 'invalid_amount' => 'Please enter an amount', - 'set_ab' => 'The available budget amount has been set', - 'updated_ab' => 'The available budget amount has been updated', - 'deleted_ab' => 'The available budget amount has been deleted', - 'deleted_bl' => 'The budgeted amount has been removed', - 'alt_currency_ab_create' => 'Set the available budget in another currency', - 'bl_create_btn' => 'Set budget in another currency', - 'inactiveBudgets' => 'Inactive budgets', - 'without_budget_between' => 'Transactions without a budget between :start and :end', - 'delete_budget' => 'Delete budget ":name"', - 'deleted_budget' => 'Deleted budget ":name"', - 'edit_budget' => 'Edit budget ":name"', - 'updated_budget' => 'Updated budget ":name"', - 'update_amount' => 'Update amount', - 'update_budget' => 'Update budget', - 'update_budget_amount_range' => 'Update (expected) available amount between :start and :end', - 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', - 'set_budget_limit' => 'Set budgeted amount', - 'budget_period_navigator' => 'Period navigator', - 'info_on_available_amount' => 'What do I have available?', - 'available_amount_indication' => 'Use these amounts to get an indication of what your total budget could be.', - 'suggested' => 'Suggested', - 'average_between' => 'Average between :start and :end', - 'transferred_in' => 'Transferred (in)', - 'transferred_away' => 'Transferred (away)', - 'auto_budget_none' => 'No auto-budget', - 'auto_budget_reset' => 'Set a fixed amount every period', - 'auto_budget_rollover' => 'Add an amount every period', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Daily', - 'auto_budget_period_weekly' => 'Weekly', - 'auto_budget_period_monthly' => 'Monthly', - 'auto_budget_period_quarterly' => 'Quarterly', - 'auto_budget_period_half_year' => 'Every half year', - 'auto_budget_period_yearly' => 'Yearly', - 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', - 'auto_budget_reset_icon' => 'This budget will be set periodically', - 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', + 'daily_budgets' => 'Daily budgets', + 'weekly_budgets' => 'Weekly budgets', + 'monthly_budgets' => 'Monthly budgets', + 'quarterly_budgets' => 'Quarterly budgets', + 'half_year_budgets' => 'Half-yearly budgets', + 'yearly_budgets' => 'Yearly budgets', + 'other_budgets' => 'Custom timed budgets', + 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', + 'total_available_budget' => 'Total available budget (between :start and :end)', + 'total_available_budget_in_currency' => 'Total available budget in :currency', + 'see_below' => 'see below', + 'create_new_budget' => 'Create a new budget', + 'store_new_budget' => 'Store new budget', + 'stored_new_budget' => 'Stored new budget ":name"', + 'available_between' => 'Available between :start and :end', + 'transactionsWithoutBudget' => 'Expenses without budget', + 'transactions_no_budget' => 'Expenses without budget between :start and :end', + 'spent_between' => 'Already spent between :start and :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Set available amount', + 'update_available_amount' => 'Update available amount', + 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', + 'createBudget' => 'New budget', + 'invalid_currency' => 'This is an invalid currency', + 'invalid_amount' => 'Please enter an amount', + 'set_ab' => 'The available budget amount has been set', + 'updated_ab' => 'The available budget amount has been updated', + 'deleted_ab' => 'The available budget amount has been deleted', + 'deleted_bl' => 'The budgeted amount has been removed', + 'alt_currency_ab_create' => 'Set the available budget in another currency', + 'bl_create_btn' => 'Set budget in another currency', + 'inactiveBudgets' => 'Inactive budgets', + 'without_budget_between' => 'Transactions without a budget between :start and :end', + 'delete_budget' => 'Delete budget ":name"', + 'deleted_budget' => 'Deleted budget ":name"', + 'edit_budget' => 'Edit budget ":name"', + 'updated_budget' => 'Updated budget ":name"', + 'update_amount' => 'Update amount', + 'update_budget' => 'Update budget', + 'update_budget_amount_range' => 'Update (expected) available amount between :start and :end', + 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', + 'set_budget_limit' => 'Set budgeted amount', + 'budget_period_navigator' => 'Period navigator', + 'info_on_available_amount' => 'What do I have available?', + 'available_amount_indication' => 'Use these amounts to get an indication of what your total budget could be.', + 'suggested' => 'Suggested', + 'average_between' => 'Average between :start and :end', + 'transferred_in' => 'Transferred (in)', + 'transferred_away' => 'Transferred (away)', + 'auto_budget_none' => 'No auto-budget', + 'auto_budget_reset' => 'Set a fixed amount every period', + 'auto_budget_rollover' => 'Add an amount every period', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Daily', + 'auto_budget_period_weekly' => 'Weekly', + 'auto_budget_period_monthly' => 'Monthly', + 'auto_budget_period_quarterly' => 'Quarterly', + 'auto_budget_period_half_year' => 'Every half year', + 'auto_budget_period_yearly' => 'Yearly', + 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', + 'auto_budget_reset_icon' => 'This budget will be set periodically', + 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Not expected this period', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Not (yet)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Bill matches transactions between :low and :high.', - 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', - 'bill_related_rules' => 'Rules related to this bill', - 'repeats' => 'Repeats', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Connected transactions', - 'auto_match_on' => 'Automatically matched by Firefly III', - 'auto_match_off' => 'Not automatically matched by Firefly III', - 'next_expected_match' => 'Next expected match', - 'delete_bill' => 'Delete bill ":name"', - 'deleted_bill' => 'Deleted bill ":name"', - 'edit_bill' => 'Edit bill ":name"', - 'more' => 'More', - 'rescan_old' => 'Run rules again, on all transactions', - 'update_bill' => 'Update bill', - 'updated_bill' => 'Updated bill ":name"', - 'store_new_bill' => 'Store new bill', - 'stored_new_bill' => 'Stored new bill ":name"', - 'cannot_scan_inactive_bill' => 'Inactive bills cannot be scanned.', - 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', - 'average_bill_amount_year' => 'Average bill amount (:year)', - 'average_bill_amount_overall' => 'Average bill amount (overall)', - 'bill_is_active' => 'Bill is active', - 'bill_expected_between' => 'Expected between :start and :end', - 'bill_will_automatch' => 'Bill will automatically linked to matching transactions', - 'skips_over' => 'skips over', - 'bill_store_error' => 'An unexpected error occurred while storing your new bill. Please check the log files', - 'list_inactive_rule' => 'inactive rule', - 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', - 'bill_expected_date' => 'Expected :date', - 'bill_expected_date_js' => 'Expected {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Paid on {date}', - 'bill_repeats_weekly' => 'Repeats weekly', - 'bill_repeats_monthly' => 'Repeats monthly', - 'bill_repeats_quarterly' => 'Repeats quarterly', - 'bill_repeats_half-year' => 'Repeats every half year', - 'bill_repeats_yearly' => 'Repeats yearly', - 'bill_repeats_weekly_other' => 'Repeats every other week', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Repeats yearly', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Subscriptions', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Forever', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Not expected this period', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Not (yet)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Bill matches transactions between :low and :high.', + 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', + 'bill_related_rules' => 'Rules related to this bill', + 'repeats' => 'Repeats', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Connected transactions', + 'auto_match_on' => 'Automatically matched by Firefly III', + 'auto_match_off' => 'Not automatically matched by Firefly III', + 'next_expected_match' => 'Next expected match', + 'delete_bill' => 'Delete bill ":name"', + 'deleted_bill' => 'Deleted bill ":name"', + 'edit_bill' => 'Edit bill ":name"', + 'more' => 'More', + 'rescan_old' => 'Run rules again, on all transactions', + 'update_bill' => 'Update bill', + 'updated_bill' => 'Updated bill ":name"', + 'store_new_bill' => 'Store new bill', + 'stored_new_bill' => 'Stored new bill ":name"', + 'cannot_scan_inactive_bill' => 'Inactive bills cannot be scanned.', + 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', + 'average_bill_amount_year' => 'Average bill amount (:year)', + 'average_bill_amount_overall' => 'Average bill amount (overall)', + 'bill_is_active' => 'Bill is active', + 'bill_expected_between' => 'Expected between :start and :end', + 'bill_will_automatch' => 'Bill will automatically linked to matching transactions', + 'skips_over' => 'skips over', + 'bill_store_error' => 'An unexpected error occurred while storing your new bill. Please check the log files', + 'list_inactive_rule' => 'inactive rule', + 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', + 'bill_expected_date' => 'Expected :date', + 'bill_expected_date_js' => 'Expected {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Paid on {date}', + 'bill_repeats_weekly' => 'Repeats weekly', + 'bill_repeats_monthly' => 'Repeats monthly', + 'bill_repeats_quarterly' => 'Repeats quarterly', + 'bill_repeats_half-year' => 'Repeats every half year', + 'bill_repeats_yearly' => 'Repeats yearly', + 'bill_repeats_weekly_other' => 'Repeats every other week', + 'bill_repeats_monthly_other' => 'Repeats every other month', + 'bill_repeats_quarterly_other' => 'Repeats every other quarter', + 'bill_repeats_half-year_other' => 'Repeats yearly', + 'bill_repeats_yearly_other' => 'Repeats every other year', + 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', + 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', + 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', + 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', + 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', + 'subscriptions' => 'Subscriptions', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Forever', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', - 'all_accounts_inactive' => 'These are your inactive accounts.', - 'active_account_link' => 'This link goes back to your active accounts.', - 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', - 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', - 'details_for_asset' => 'Details for asset account ":name"', - 'details_for_expense' => 'Details for expense account ":name"', - 'details_for_revenue' => 'Details for revenue account ":name"', - 'details_for_cash' => 'Details for cash account ":name"', - 'store_new_asset_account' => 'Store new asset account', - 'store_new_expense_account' => 'Store new expense account', - 'store_new_revenue_account' => 'Store new revenue account', - 'edit_asset_account' => 'Edit asset account ":name"', - 'edit_expense_account' => 'Edit expense account ":name"', - 'edit_revenue_account' => 'Edit revenue account ":name"', - 'delete_asset_account' => 'Delete asset account ":name"', - 'delete_expense_account' => 'Delete expense account ":name"', - 'delete_revenue_account' => 'Delete revenue account ":name"', - 'delete_liabilities_account' => 'Delete liability ":name"', - 'asset_deleted' => 'Successfully deleted asset account ":name"', - 'account_deleted' => 'Successfully deleted account ":name"', - 'expense_deleted' => 'Successfully deleted expense account ":name"', - 'revenue_deleted' => 'Successfully deleted revenue account ":name"', - 'update_asset_account' => 'Update asset account', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => 'Update liability', - 'update_expense_account' => 'Update expense account', - 'update_revenue_account' => 'Update revenue account', - 'make_new_asset_account' => 'Create a new asset account', - 'make_new_expense_account' => 'Create a new expense account', - 'make_new_revenue_account' => 'Create a new revenue account', - 'make_new_liabilities_account' => 'Create a new liability', - 'asset_accounts' => 'Asset accounts', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Asset accounts (inactive)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Expense accounts', - 'expense_accounts_inactive' => 'Expense accounts (inactive)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Revenue accounts', - 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', - 'cash_accounts' => 'Cash accounts', - 'Cash account' => 'Cash account', - 'liabilities_accounts' => 'Liabilities', - 'liabilities_accounts_inactive' => 'Liabilities (inactive)', - 'reconcile_account' => 'Reconcile account ":account"', - 'overview_of_reconcile_modal' => 'Overview of reconciliation', - 'delete_reconciliation' => 'Delete reconciliation', - 'update_reconciliation' => 'Update reconciliation', - 'amount_cannot_be_zero' => 'The amount cannot be zero', - 'end_of_reconcile_period' => 'End of reconcile period: :period', - 'start_of_reconcile_period' => 'Start of reconcile period: :period', - 'start_balance' => 'Start balance', - 'end_balance' => 'End balance', - 'update_balance_dates_instruction' => 'Match the amounts and dates above to your bank statement, and press "Start reconciling"', - 'select_transactions_instruction' => 'Select the transactions that appear on your bank statement.', - 'select_range_and_balance' => 'First verify the date-range and balances. Then press "Start reconciling"', - 'date_change_instruction' => 'If you change the date range now, any progress will be lost.', - 'update_selection' => 'Update selection', - 'store_reconcile' => 'Store reconciliation', - 'reconciliation_transaction' => 'Reconciliation transaction', - 'Reconciliation' => 'Reconciliation', - 'reconciliation' => 'Reconciliation', - 'reconcile_options' => 'Reconciliation options', - 'reconcile_range' => 'Reconciliation range', - 'start_reconcile' => 'Start reconciling', - 'cash_account_type' => 'Cash', - 'cash' => 'cash', - 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', - 'account_type' => 'Account type', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'New account ":name" stored!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => 'Updated account ":name"', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Credit card options', - 'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".', - 'no_transactions_period' => 'There are no transactions (in this period).', - 'no_data_for_chart' => 'There is not enough information (yet) to generate this chart.', - 'select_at_least_one_account' => 'Please select at least one asset account', - 'select_at_least_one_category' => 'Please select at least one category', - 'select_at_least_one_budget' => 'Please select at least one budget', - 'select_at_least_one_tag' => 'Please select at least one tag', - 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', - 'account_default_currency' => 'This will be the default currency associated with this account.', - 'reconcile_has_more' => 'Your Firefly III ledger has more money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', - 'reconcile_has_less' => 'Your Firefly III ledger has less money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', - 'reconcile_is_equal' => 'Your Firefly III ledger and your bank statements match. There is nothing to do. Please press "Confirm reconciliation" to confirm your input.', - 'create_pos_reconcile_transaction' => 'Clear the selected transactions, and create a correction adding :amount to this asset account.', - 'create_neg_reconcile_transaction' => 'Clear the selected transactions, and create a correction removing :amount from this asset account.', - 'reconcile_do_nothing' => 'Clear the selected transactions, but do not correct.', - 'reconcile_go_back' => 'You can always edit or delete a correction later.', - 'must_be_asset_account' => 'You can only reconcile asset accounts', - 'reconciliation_stored' => 'Reconciliation stored', - 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', - 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', - 'sum_of_reconciliation' => 'Sum of reconciliation', - 'reconcile_this_account' => 'Reconcile this account', - 'reconcile' => 'Reconcile', - 'show' => 'Show', - 'confirm_reconciliation' => 'Confirm reconciliation', - 'submitted_start_balance' => 'Submitted start balance', - 'selected_transactions' => 'Selected transactions (:count)', - 'already_cleared_transactions' => 'Already cleared transactions (:count)', - 'submitted_end_balance' => 'Submitted end balance', - 'initial_balance_description' => 'Initial balance for ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'unknown', - 'interest_calc_daily' => 'Per day', - 'interest_calc_monthly' => 'Per month', - 'interest_calc_yearly' => 'Per year', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half year', - 'interest_calc_quarterly' => 'Per quarter', - 'initial_balance_account' => 'Initial balance account of :account', - 'list_options' => 'List options', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', + 'all_accounts_inactive' => 'These are your inactive accounts.', + 'active_account_link' => 'This link goes back to your active accounts.', + 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', + 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', + 'details_for_asset' => 'Details for asset account ":name"', + 'details_for_expense' => 'Details for expense account ":name"', + 'details_for_revenue' => 'Details for revenue account ":name"', + 'details_for_cash' => 'Details for cash account ":name"', + 'store_new_asset_account' => 'Store new asset account', + 'store_new_expense_account' => 'Store new expense account', + 'store_new_revenue_account' => 'Store new revenue account', + 'edit_asset_account' => 'Edit asset account ":name"', + 'edit_expense_account' => 'Edit expense account ":name"', + 'edit_revenue_account' => 'Edit revenue account ":name"', + 'delete_asset_account' => 'Delete asset account ":name"', + 'delete_expense_account' => 'Delete expense account ":name"', + 'delete_revenue_account' => 'Delete revenue account ":name"', + 'delete_liabilities_account' => 'Delete liability ":name"', + 'asset_deleted' => 'Successfully deleted asset account ":name"', + 'account_deleted' => 'Successfully deleted account ":name"', + 'expense_deleted' => 'Successfully deleted expense account ":name"', + 'revenue_deleted' => 'Successfully deleted revenue account ":name"', + 'update_asset_account' => 'Update asset account', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => 'Update liability', + 'update_expense_account' => 'Update expense account', + 'update_revenue_account' => 'Update revenue account', + 'make_new_asset_account' => 'Create a new asset account', + 'make_new_expense_account' => 'Create a new expense account', + 'make_new_revenue_account' => 'Create a new revenue account', + 'make_new_liabilities_account' => 'Create a new liability', + 'asset_accounts' => 'Asset accounts', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Asset accounts (inactive)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Expense accounts', + 'expense_accounts_inactive' => 'Expense accounts (inactive)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Revenue accounts', + 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', + 'cash_accounts' => 'Cash accounts', + 'Cash account' => 'Cash account', + 'liabilities_accounts' => 'Liabilities', + 'liabilities_accounts_inactive' => 'Liabilities (inactive)', + 'reconcile_account' => 'Reconcile account ":account"', + 'overview_of_reconcile_modal' => 'Overview of reconciliation', + 'delete_reconciliation' => 'Delete reconciliation', + 'update_reconciliation' => 'Update reconciliation', + 'amount_cannot_be_zero' => 'The amount cannot be zero', + 'end_of_reconcile_period' => 'End of reconcile period: :period', + 'start_of_reconcile_period' => 'Start of reconcile period: :period', + 'start_balance' => 'Start balance', + 'end_balance' => 'End balance', + 'update_balance_dates_instruction' => 'Match the amounts and dates above to your bank statement, and press "Start reconciling"', + 'select_transactions_instruction' => 'Select the transactions that appear on your bank statement.', + 'select_range_and_balance' => 'First verify the date-range and balances. Then press "Start reconciling"', + 'date_change_instruction' => 'If you change the date range now, any progress will be lost.', + 'update_selection' => 'Update selection', + 'store_reconcile' => 'Store reconciliation', + 'reconciliation_transaction' => 'Reconciliation transaction', + 'Reconciliation' => 'Reconciliation', + 'reconciliation' => 'Reconciliation', + 'reconcile_options' => 'Reconciliation options', + 'reconcile_range' => 'Reconciliation range', + 'start_reconcile' => 'Start reconciling', + 'cash_account_type' => 'Cash', + 'cash' => 'cash', + 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', + 'account_type' => 'Account type', + 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => 'New account ":name" stored!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => 'Updated account ":name"', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Credit card options', + 'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".', + 'no_transactions_period' => 'There are no transactions (in this period).', + 'no_data_for_chart' => 'There is not enough information (yet) to generate this chart.', + 'select_at_least_one_account' => 'Please select at least one asset account', + 'select_at_least_one_category' => 'Please select at least one category', + 'select_at_least_one_budget' => 'Please select at least one budget', + 'select_at_least_one_tag' => 'Please select at least one tag', + 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', + 'account_default_currency' => 'This will be the default currency associated with this account.', + 'reconcile_has_more' => 'Your Firefly III ledger has more money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', + 'reconcile_has_less' => 'Your Firefly III ledger has less money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', + 'reconcile_is_equal' => 'Your Firefly III ledger and your bank statements match. There is nothing to do. Please press "Confirm reconciliation" to confirm your input.', + 'create_pos_reconcile_transaction' => 'Clear the selected transactions, and create a correction adding :amount to this asset account.', + 'create_neg_reconcile_transaction' => 'Clear the selected transactions, and create a correction removing :amount from this asset account.', + 'reconcile_do_nothing' => 'Clear the selected transactions, but do not correct.', + 'reconcile_go_back' => 'You can always edit or delete a correction later.', + 'must_be_asset_account' => 'You can only reconcile asset accounts', + 'reconciliation_stored' => 'Reconciliation stored', + 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', + 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', + 'sum_of_reconciliation' => 'Sum of reconciliation', + 'reconcile_this_account' => 'Reconcile this account', + 'reconcile' => 'Reconcile', + 'show' => 'Show', + 'confirm_reconciliation' => 'Confirm reconciliation', + 'submitted_start_balance' => 'Submitted start balance', + 'selected_transactions' => 'Selected transactions (:count)', + 'already_cleared_transactions' => 'Already cleared transactions (:count)', + 'submitted_end_balance' => 'Submitted end balance', + 'initial_balance_description' => 'Initial balance for ":account"', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'unknown', + 'interest_calc_daily' => 'Per day', + 'interest_calc_monthly' => 'Per month', + 'interest_calc_yearly' => 'Per year', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half year', + 'interest_calc_quarterly' => 'Per quarter', + 'initial_balance_account' => 'Initial balance account of :account', + 'list_options' => 'List options', // categories: - 'new_category' => 'New category', - 'create_new_category' => 'Create a new category', - 'without_category' => 'Without a category', - 'update_category' => 'Update category', - 'updated_category' => 'Updated category ":name"', - 'categories' => 'Categories', - 'edit_category' => 'Edit category ":name"', - 'no_category' => '(no category)', - 'unknown_category_plain' => 'No category', - 'category' => 'Category', - 'delete_category' => 'Delete category ":name"', - 'deleted_category' => 'Deleted category ":name"', - 'store_category' => 'Store new category', - 'stored_category' => 'Stored new category ":name"', - 'without_category_between' => 'Without category between :start and :end', + 'new_category' => 'New category', + 'create_new_category' => 'Create a new category', + 'without_category' => 'Without a category', + 'update_category' => 'Update category', + 'updated_category' => 'Updated category ":name"', + 'categories' => 'Categories', + 'edit_category' => 'Edit category ":name"', + 'no_category' => '(no category)', + 'unknown_category_plain' => 'No category', + 'category' => 'Category', + 'delete_category' => 'Delete category ":name"', + 'deleted_category' => 'Deleted category ":name"', + 'store_category' => 'Store new category', + 'stored_category' => 'Stored new category ":name"', + 'without_category_between' => 'Without category between :start and :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Update withdrawal', - 'update_deposit' => 'Update deposit', - 'update_transaction' => 'Update transaction', - 'update_transfer' => 'Update transfer', - 'updated_withdrawal' => 'Updated withdrawal ":description"', - 'updated_deposit' => 'Updated deposit ":description"', - 'updated_transfer' => 'Updated transfer ":description"', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => 'Delete withdrawal ":description"', - 'delete_deposit' => 'Delete deposit ":description"', - 'delete_transfer' => 'Delete transfer ":description"', - 'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"', - 'deleted_deposit' => 'Successfully deleted deposit ":description"', - 'deleted_transfer' => 'Successfully deleted transfer ":description"', - 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', - 'stored_journal' => 'Successfully created new transaction ":description"', - 'stored_journal_no_descr' => 'Successfully created your new transaction', - 'updated_journal_no_descr' => 'Successfully updated your transaction', - 'select_transactions' => 'Select transactions', - 'rule_group_select_transactions' => 'Apply ":title" to transactions', - 'rule_select_transactions' => 'Apply ":title" to transactions', - 'stop_selection' => 'Stop selecting transactions', - 'reconcile_selected' => 'Reconcile', - 'mass_delete_journals' => 'Delete a number of transactions', - 'mass_edit_journals' => 'Edit a number of transactions', - 'mass_bulk_journals' => 'Bulk edit a number of transactions', - 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', - 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', - 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', - 'no_bulk_category' => 'Don\'t update category', - 'no_bulk_budget' => 'Don\'t update budget', - 'no_bulk_tags' => 'Don\'t update tag(s)', - 'replace_with_these_tags' => 'Replace with these tags', - 'append_these_tags' => 'Add these tags', - 'mass_edit' => 'Edit selected individually', - 'bulk_edit' => 'Edit selected in bulk', - 'mass_delete' => 'Delete selected', - 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', - 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', - 'no_budget' => '(no budget)', - 'no_bill' => '(no bill)', - 'account_per_budget' => 'Account per budget', - 'account_per_category' => 'Account per category', - 'create_new_object' => 'Create', - 'empty' => '(empty)', - 'all_other_budgets' => '(all other budgets)', - 'all_other_accounts' => '(all other accounts)', - 'expense_per_source_account' => 'Expenses per source account', - 'expense_per_destination_account' => 'Expenses per destination account', - 'income_per_destination_account' => 'Income per destination account', - 'spent_in_specific_category' => 'Spent in category ":category"', - 'earned_in_specific_category' => 'Earned in category ":category"', - 'spent_in_specific_tag' => 'Spent in tag ":tag"', - 'earned_in_specific_tag' => 'Earned in tag ":tag"', - 'income_per_source_account' => 'Income per source account', - 'average_spending_per_destination' => 'Average expense per destination account', - 'average_spending_per_source' => 'Average expense per source account', - 'average_earning_per_source' => 'Average earning per source account', - 'average_earning_per_destination' => 'Average earning per destination account', - 'account_per_tag' => 'Account per tag', - 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', - 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', - 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', - 'tag' => 'Tag', - 'no_budget_squared' => '(no budget)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(no account type)', - 'opt_group_no_account_type' => '(no account type)', - 'opt_group_defaultAsset' => 'Default asset accounts', - 'opt_group_savingAsset' => 'Savings accounts', - 'opt_group_sharedAsset' => 'Shared asset accounts', - 'opt_group_ccAsset' => 'Credit cards', - 'opt_group_cashWalletAsset' => 'Cash wallets', - 'opt_group_expense_account' => 'Expense accounts', - 'opt_group_revenue_account' => 'Revenue accounts', - 'opt_group_l_Loan' => 'Liability: Loan', - 'opt_group_cash_account' => 'Cash account', - 'opt_group_l_Debt' => 'Liability: Debt', - 'opt_group_l_Mortgage' => 'Liability: Mortgage', - 'opt_group_l_Credit card' => 'Liability: Credit card', - 'notes' => 'Notes', - 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.', - 'attachment_not_found' => 'This attachment could not be found.', - 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, untick the checkbox. Use rules to connect it to another bill.', - 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', - 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Update withdrawal', + 'update_deposit' => 'Update deposit', + 'update_transaction' => 'Update transaction', + 'update_transfer' => 'Update transfer', + 'updated_withdrawal' => 'Updated withdrawal ":description"', + 'updated_deposit' => 'Updated deposit ":description"', + 'updated_transfer' => 'Updated transfer ":description"', + 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', + 'no_changes_deposit' => 'Deposit ":description" was not changed.', + 'no_changes_transfer' => 'Transfer ":description" was not changed.', + 'delete_withdrawal' => 'Delete withdrawal ":description"', + 'delete_deposit' => 'Delete deposit ":description"', + 'delete_transfer' => 'Delete transfer ":description"', + 'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"', + 'deleted_deposit' => 'Successfully deleted deposit ":description"', + 'deleted_transfer' => 'Successfully deleted transfer ":description"', + 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', + 'stored_journal' => 'Successfully created new transaction ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Successfully created your new transaction', + 'updated_journal_no_descr' => 'Successfully updated your transaction', + 'select_transactions' => 'Select transactions', + 'rule_group_select_transactions' => 'Apply ":title" to transactions', + 'rule_select_transactions' => 'Apply ":title" to transactions', + 'stop_selection' => 'Stop selecting transactions', + 'reconcile_selected' => 'Reconcile', + 'mass_delete_journals' => 'Delete a number of transactions', + 'mass_edit_journals' => 'Edit a number of transactions', + 'mass_bulk_journals' => 'Bulk edit a number of transactions', + 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', + 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', + 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', + 'no_bulk_category' => 'Don\'t update category', + 'no_bulk_budget' => 'Don\'t update budget', + 'no_bulk_tags' => 'Don\'t update tag(s)', + 'replace_with_these_tags' => 'Replace with these tags', + 'append_these_tags' => 'Add these tags', + 'mass_edit' => 'Edit selected individually', + 'bulk_edit' => 'Edit selected in bulk', + 'mass_delete' => 'Delete selected', + 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', + 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', + 'no_budget' => '(no budget)', + 'no_bill' => '(no bill)', + 'account_per_budget' => 'Account per budget', + 'account_per_category' => 'Account per category', + 'create_new_object' => 'Create', + 'empty' => '(empty)', + 'all_other_budgets' => '(all other budgets)', + 'all_other_accounts' => '(all other accounts)', + 'expense_per_source_account' => 'Expenses per source account', + 'expense_per_destination_account' => 'Expenses per destination account', + 'income_per_destination_account' => 'Income per destination account', + 'spent_in_specific_category' => 'Spent in category ":category"', + 'earned_in_specific_category' => 'Earned in category ":category"', + 'spent_in_specific_tag' => 'Spent in tag ":tag"', + 'earned_in_specific_tag' => 'Earned in tag ":tag"', + 'income_per_source_account' => 'Income per source account', + 'average_spending_per_destination' => 'Average expense per destination account', + 'average_spending_per_source' => 'Average expense per source account', + 'average_earning_per_source' => 'Average earning per source account', + 'average_earning_per_destination' => 'Average earning per destination account', + 'account_per_tag' => 'Account per tag', + 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', + 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', + 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', + 'tag' => 'Tag', + 'no_budget_squared' => '(no budget)', + 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', + 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', + 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', + 'opt_group_' => '(no account type)', + 'opt_group_no_account_type' => '(no account type)', + 'opt_group_defaultAsset' => 'Default asset accounts', + 'opt_group_savingAsset' => 'Savings accounts', + 'opt_group_sharedAsset' => 'Shared asset accounts', + 'opt_group_ccAsset' => 'Credit cards', + 'opt_group_cashWalletAsset' => 'Cash wallets', + 'opt_group_expense_account' => 'Expense accounts', + 'opt_group_revenue_account' => 'Revenue accounts', + 'opt_group_l_Loan' => 'Liability: Loan', + 'opt_group_cash_account' => 'Cash account', + 'opt_group_l_Debt' => 'Liability: Debt', + 'opt_group_l_Mortgage' => 'Liability: Mortgage', + 'opt_group_l_Credit card' => 'Liability: Credit card', + 'notes' => 'Notes', + 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.', + 'attachment_not_found' => 'This attachment could not be found.', + 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, untick the checkbox. Use rules to connect it to another bill.', + 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', + 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => 'Welcome to Firefly III!', - 'submit' => 'Submit', - 'submission' => 'Submission', - 'submit_yes_really' => 'Submit (I know what I\'m doing)', - 'getting_started' => 'Getting started', - 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main current account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', - 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', - 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', - 'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.', - 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', - 'language' => 'Language', - 'new_savings_account' => ':bank_name savings account', - 'cash_wallet' => 'Cash wallet', - 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', + 'welcome' => 'Welcome to Firefly III!', + 'submit' => 'Submit', + 'submission' => 'Submission', + 'submit_yes_really' => 'Submit (I know what I\'m doing)', + 'getting_started' => 'Getting started', + 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main current account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', + 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', + 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', + 'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.', + 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', + 'language' => 'Language', + 'new_savings_account' => ':bank_name savings account', + 'cash_wallet' => 'Cash wallet', + 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', // home page: - 'transaction_table_description' => 'A table containing your transactions', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => 'Your accounts', - 'your_accounts' => 'Your account overview', - 'category_overview' => 'Category overview', - 'expense_overview' => 'Expense account overview', - 'revenue_overview' => 'Revenue account overview', - 'budgetsAndSpending' => 'Budgets and spending', - 'budgets_and_spending' => 'Budgets and spending', - 'go_to_budget' => 'Go to budget "{budget}"', - 'go_to_deposits' => 'Go to deposits', - 'go_to_expenses' => 'Go to expenses', - 'savings' => 'Savings', - 'newWithdrawal' => 'New expense', - 'newDeposit' => 'New deposit', - 'newTransfer' => 'New transfer', - 'bills_to_pay' => 'Bills to pay', - 'per_day' => 'Per day', - 'left_to_spend_per_day' => 'Left to spend per day', - 'bills_paid' => 'Bills paid', - 'custom_period' => 'Custom period', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Select a period', + 'transaction_table_description' => 'A table containing your transactions', + 'opposing_account' => 'Opposing account', + 'yourAccounts' => 'Your accounts', + 'your_accounts' => 'Your account overview', + 'category_overview' => 'Category overview', + 'expense_overview' => 'Expense account overview', + 'revenue_overview' => 'Revenue account overview', + 'budgetsAndSpending' => 'Budgets and spending', + 'budgets_and_spending' => 'Budgets and spending', + 'go_to_budget' => 'Go to budget "{budget}"', + 'go_to_deposits' => 'Go to deposits', + 'go_to_expenses' => 'Go to expenses', + 'savings' => 'Savings', + 'newWithdrawal' => 'New expense', + 'newDeposit' => 'New deposit', + 'newTransfer' => 'New transfer', + 'bills_to_pay' => 'Bills to pay', + 'per_day' => 'Per day', + 'left_to_spend_per_day' => 'Left to spend per day', + 'bills_paid' => 'Bills paid', + 'custom_period' => 'Custom period', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Select a period', // menu and titles, should be recycled as often as possible: - 'currency' => 'Currency', - 'preferences' => 'Preferences', - 'logout' => 'Logout', - 'logout_other_sessions' => 'Logout all other sessions', - 'toggleNavigation' => 'Toggle navigation', - 'searchPlaceholder' => 'Search...', - 'version' => 'Version', - 'dashboard' => 'Dashboard', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Available budget ({currency})', - 'currencies' => 'Currencies', - 'activity' => 'Activity', - 'usage' => 'Usage', - 'accounts' => 'Accounts', - 'Asset account' => 'Asset account', - 'Default account' => 'Asset account', - 'Expense account' => 'Expense account', - 'Revenue account' => 'Revenue account', - 'Initial balance account' => 'Initial balance account', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Debt', - 'account_type_Loan' => 'Loan', - 'account_type_Mortgage' => 'Mortgage', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Credit card', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Budgets', - 'tags' => 'Tags', - 'reports' => 'Reports', - 'transactions' => 'Transactions', - 'expenses' => 'Expenses', - 'income' => 'Revenue / income', - 'transfers' => 'Transfers', - 'moneyManagement' => 'Money management', - 'money_management' => 'Money management', - 'tools' => 'Tools', - 'piggyBanks' => 'Piggy banks', - 'piggy_banks' => 'Piggy banks', - 'amount_x_of_y' => '{current} of {total}', - 'bills' => 'Bills', - 'withdrawal' => 'Withdrawal', - 'opening_balance' => 'Opening balance', - 'deposit' => 'Deposit', - 'account' => 'Account', - 'transfer' => 'Transfer', - 'Withdrawal' => 'Withdrawal', - 'Deposit' => 'Deposit', - 'Transfer' => 'Transfer', - 'bill' => 'Bill', - 'yes' => 'Yes', - 'no' => 'No', - 'amount' => 'Amount', - 'overview' => 'Overview', - 'saveOnAccount' => 'Save on account', - 'unknown' => 'Unknown', - 'monthly' => 'Monthly', - 'profile' => 'Profile', - 'errors' => 'Errors', - 'debt_start_date' => 'Start date of debt', - 'debt_start_amount' => 'Start amount of debt', - 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', - 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', - 'store_new_liabilities_account' => 'Store new liability', - 'edit_liabilities_account' => 'Edit liability ":name"', - 'financial_control' => 'Financial control', - 'accounting' => 'Accounting', - 'automation' => 'Automation', - 'others' => 'Others', - 'classification' => 'Classification', - 'store_transaction' => 'Store transaction', + 'currency' => 'Currency', + 'preferences' => 'Preferences', + 'logout' => 'Logout', + 'logout_other_sessions' => 'Logout all other sessions', + 'toggleNavigation' => 'Toggle navigation', + 'searchPlaceholder' => 'Search...', + 'version' => 'Version', + 'dashboard' => 'Dashboard', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Available budget ({currency})', + 'currencies' => 'Currencies', + 'activity' => 'Activity', + 'usage' => 'Usage', + 'accounts' => 'Accounts', + 'Asset account' => 'Asset account', + 'Default account' => 'Asset account', + 'Expense account' => 'Expense account', + 'Revenue account' => 'Revenue account', + 'Initial balance account' => 'Initial balance account', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Debt', + 'account_type_Loan' => 'Loan', + 'account_type_Mortgage' => 'Mortgage', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Credit card', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'I am owed this debt', + 'liability_direction_debit' => 'I owe this debt to somebody else', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Budgets', + 'tags' => 'Tags', + 'reports' => 'Reports', + 'transactions' => 'Transactions', + 'expenses' => 'Expenses', + 'income' => 'Revenue / income', + 'transfers' => 'Transfers', + 'moneyManagement' => 'Money management', + 'money_management' => 'Money management', + 'tools' => 'Tools', + 'piggyBanks' => 'Piggy banks', + 'piggy_banks' => 'Piggy banks', + 'amount_x_of_y' => '{current} of {total}', + 'bills' => 'Bills', + 'withdrawal' => 'Withdrawal', + 'opening_balance' => 'Opening balance', + 'deposit' => 'Deposit', + 'account' => 'Account', + 'transfer' => 'Transfer', + 'Withdrawal' => 'Withdrawal', + 'Deposit' => 'Deposit', + 'Transfer' => 'Transfer', + 'bill' => 'Bill', + 'yes' => 'Yes', + 'no' => 'No', + 'amount' => 'Amount', + 'overview' => 'Overview', + 'saveOnAccount' => 'Save on account', + 'unknown' => 'Unknown', + 'monthly' => 'Monthly', + 'profile' => 'Profile', + 'errors' => 'Errors', + 'debt_start_date' => 'Start date of debt', + 'debt_start_amount' => 'Start amount of debt', + 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', + 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', + 'store_new_liabilities_account' => 'Store new liability', + 'edit_liabilities_account' => 'Edit liability ":name"', + 'financial_control' => 'Financial control', + 'accounting' => 'Accounting', + 'automation' => 'Automation', + 'others' => 'Others', + 'classification' => 'Classification', + 'store_transaction' => 'Store transaction', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Default financial report between :start and :end', - 'report_audit' => 'Transaction history overview between :start and :end', - 'report_category' => 'Category report between :start and :end', - 'report_double' => 'Expense/revenue account report between :start and :end', - 'report_budget' => 'Budget report between :start and :end', - 'report_tag' => 'Tag report between :start and :end', - 'quick_link_reports' => 'Quick links', - 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', - 'quick_link_default_report' => 'Default financial report', - 'quick_link_audit_report' => 'Transaction history overview', - 'report_this_month_quick' => 'Current month, all accounts', - 'report_last_month_quick' => 'Last month, all accounts', - 'report_this_year_quick' => 'Current year, all accounts', - 'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts', - 'report_all_time_quick' => 'All-time, all accounts', - 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', - 'incomeVsExpenses' => 'Income vs. expenses', - 'accountBalances' => 'Account balances', - 'balanceStart' => 'Balance at start of period', - 'balanceEnd' => 'Balance at end of period', - 'splitByAccount' => 'Split by account', - 'coveredWithTags' => 'Covered with tags', - 'leftInBudget' => 'Left in budget', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Sum of sums', - 'noCategory' => '(no category)', - 'notCharged' => 'Not charged (yet)', - 'inactive' => 'Inactive', - 'active' => 'Active', - 'difference' => 'Difference', - 'money_flowing_in' => 'In', - 'money_flowing_out' => 'Out', - 'topX' => 'top :number', - 'show_full_list' => 'Show entire list', - 'show_only_top' => 'Show only top :number', - 'report_type' => 'Report type', - 'report_type_default' => 'Default financial report', - 'report_type_audit' => 'Transaction history overview (audit)', - 'report_type_category' => 'Category report', - 'report_type_budget' => 'Budget report', - 'report_type_tag' => 'Tag report', - 'report_type_double' => 'Expense/revenue account report', - 'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.', - 'report_included_accounts' => 'Included accounts', - 'report_date_range' => 'Date range', - 'report_preset_ranges' => 'Pre-set ranges', - 'shared' => 'Shared', - 'fiscal_year' => 'Fiscal year', - 'income_entry' => 'Income from account ":name" between :start and :end', - 'expense_entry' => 'Expenses to account ":name" between :start and :end', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => 'Expenses in budget ":budget" between :start and :end', - 'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end', - 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', - 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', - 'reports_extra_options' => 'Extra options', - 'report_has_no_extra_options' => 'This report has no extra options', - 'reports_submit' => 'View report', - 'end_after_start_date' => 'End date of report must be after start date.', - 'select_category' => 'Select category(ies)', - 'select_budget' => 'Select budget(s).', - 'select_tag' => 'Select tag(s).', - 'income_per_category' => 'Income per category', - 'expense_per_category' => 'Expense per category', - 'expense_per_budget' => 'Expense per budget', - 'income_per_account' => 'Income per account', - 'expense_per_account' => 'Expense per account', - 'expense_per_tag' => 'Expense per tag', - 'income_per_tag' => 'Income per tag', - 'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)', - 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', - 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', - 'include_income_not_in_category' => 'Included income not in the selected category(ies)', - 'include_income_not_in_account' => 'Included income not in the selected account(s)', - 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', - 'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)', - 'everything_else' => 'Everything else', - 'income_and_expenses' => 'Income and expenses', - 'spent_average' => 'Spent (average)', - 'income_average' => 'Income (average)', - 'transaction_count' => 'Transaction count', - 'average_spending_per_account' => 'Average spending per account', - 'average_income_per_account' => 'Average income per account', - 'total' => 'Total', - 'description' => 'Description', - 'sum_of_period' => 'Sum of period', - 'average_in_period' => 'Average in period', - 'account_role_defaultAsset' => 'Default asset account', - 'account_role_sharedAsset' => 'Shared asset account', - 'account_role_savingAsset' => 'Savings account', - 'account_role_ccAsset' => 'Credit card', - 'account_role_cashWalletAsset' => 'Cash wallet', - 'budget_chart_click' => 'Please click on a budget name in the table above to see a chart.', - 'category_chart_click' => 'Please click on a category name in the table above to see a chart.', - 'in_out_accounts' => 'Earned and spent per combination', - 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', - 'in_out_per_category' => 'Earned and spent per category', - 'out_per_budget' => 'Spent per budget', - 'select_expense_revenue' => 'Select expense/revenue account', - 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', - 'sum_in_default_currency' => 'The sum will always be in your default currency.', - 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unticked.', + 'report_default' => 'Default financial report between :start and :end', + 'report_audit' => 'Transaction history overview between :start and :end', + 'report_category' => 'Category report between :start and :end', + 'report_double' => 'Expense/revenue account report between :start and :end', + 'report_budget' => 'Budget report between :start and :end', + 'report_tag' => 'Tag report between :start and :end', + 'quick_link_reports' => 'Quick links', + 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', + 'quick_link_default_report' => 'Default financial report', + 'quick_link_audit_report' => 'Transaction history overview', + 'report_this_month_quick' => 'Current month, all accounts', + 'report_last_month_quick' => 'Last month, all accounts', + 'report_this_year_quick' => 'Current year, all accounts', + 'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts', + 'report_all_time_quick' => 'All-time, all accounts', + 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', + 'incomeVsExpenses' => 'Income vs. expenses', + 'accountBalances' => 'Account balances', + 'balanceStart' => 'Balance at start of period', + 'balanceEnd' => 'Balance at end of period', + 'splitByAccount' => 'Split by account', + 'coveredWithTags' => 'Covered with tags', + 'leftInBudget' => 'Left in budget', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Sum of sums', + 'noCategory' => '(no category)', + 'notCharged' => 'Not charged (yet)', + 'inactive' => 'Inactive', + 'active' => 'Active', + 'difference' => 'Difference', + 'money_flowing_in' => 'In', + 'money_flowing_out' => 'Out', + 'topX' => 'top :number', + 'show_full_list' => 'Show entire list', + 'show_only_top' => 'Show only top :number', + 'report_type' => 'Report type', + 'report_type_default' => 'Default financial report', + 'report_type_audit' => 'Transaction history overview (audit)', + 'report_type_category' => 'Category report', + 'report_type_budget' => 'Budget report', + 'report_type_tag' => 'Tag report', + 'report_type_double' => 'Expense/revenue account report', + 'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.', + 'report_included_accounts' => 'Included accounts', + 'report_date_range' => 'Date range', + 'report_preset_ranges' => 'Pre-set ranges', + 'shared' => 'Shared', + 'fiscal_year' => 'Fiscal year', + 'income_entry' => 'Income from account ":name" between :start and :end', + 'expense_entry' => 'Expenses to account ":name" between :start and :end', + 'category_entry' => 'Expenses and income in category ":name" between :start and :end', + 'budget_spent_amount' => 'Expenses in budget ":budget" between :start and :end', + 'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end', + 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', + 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', + 'reports_extra_options' => 'Extra options', + 'report_has_no_extra_options' => 'This report has no extra options', + 'reports_submit' => 'View report', + 'end_after_start_date' => 'End date of report must be after start date.', + 'select_category' => 'Select category(ies)', + 'select_budget' => 'Select budget(s).', + 'select_tag' => 'Select tag(s).', + 'income_per_category' => 'Income per category', + 'expense_per_category' => 'Expense per category', + 'expense_per_budget' => 'Expense per budget', + 'income_per_account' => 'Income per account', + 'expense_per_account' => 'Expense per account', + 'expense_per_tag' => 'Expense per tag', + 'income_per_tag' => 'Income per tag', + 'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)', + 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', + 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', + 'include_income_not_in_category' => 'Included income not in the selected category(ies)', + 'include_income_not_in_account' => 'Included income not in the selected account(s)', + 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', + 'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)', + 'everything_else' => 'Everything else', + 'income_and_expenses' => 'Income and expenses', + 'spent_average' => 'Spent (average)', + 'income_average' => 'Income (average)', + 'transaction_count' => 'Transaction count', + 'average_spending_per_account' => 'Average spending per account', + 'average_income_per_account' => 'Average income per account', + 'total' => 'Total', + 'description' => 'Description', + 'sum_of_period' => 'Sum of period', + 'average_in_period' => 'Average in period', + 'account_role_defaultAsset' => 'Default asset account', + 'account_role_sharedAsset' => 'Shared asset account', + 'account_role_savingAsset' => 'Savings account', + 'account_role_ccAsset' => 'Credit card', + 'account_role_cashWalletAsset' => 'Cash wallet', + 'budget_chart_click' => 'Please click on a budget name in the table above to see a chart.', + 'category_chart_click' => 'Please click on a category name in the table above to see a chart.', + 'in_out_accounts' => 'Earned and spent per combination', + 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', + 'in_out_per_category' => 'Earned and spent per category', + 'out_per_budget' => 'Spent per budget', + 'select_expense_revenue' => 'Select expense/revenue account', + 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', + 'sum_in_default_currency' => 'The sum will always be in your default currency.', + 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unticked.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Chart', - 'month' => 'Month', - 'budget' => 'Budget', - 'spent' => 'Spent', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => 'Spent in budget', - 'left_to_spend' => 'Left to spend', - 'earned' => 'Earned', - 'overspent' => 'Overspent', - 'left' => 'Left', - 'max-amount' => 'Maximum amount', - 'min-amount' => 'Minimum amount', - 'journal-amount' => 'Current bill entry', - 'name' => 'Name', - 'date' => 'Date', - 'date_and_time' => 'Date and time', - 'time' => 'Time', - 'paid' => 'Paid', - 'unpaid' => 'Unpaid', - 'day' => 'Day', - 'budgeted' => 'Budgeted', - 'period' => 'Period', - 'balance' => 'Balance', - 'in_out_period' => 'In + out this period', - 'sum' => 'Sum', - 'summary' => 'Summary', - 'average' => 'Average', - 'balanceFor' => 'Balance for :name', - 'no_tags' => '(no tags)', + 'chart' => 'Chart', + 'month' => 'Month', + 'budget' => 'Budget', + 'spent' => 'Spent', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => 'Spent in budget', + 'left_to_spend' => 'Left to spend', + 'earned' => 'Earned', + 'overspent' => 'Overspent', + 'left' => 'Left', + 'max-amount' => 'Maximum amount', + 'min-amount' => 'Minimum amount', + 'journal-amount' => 'Current bill entry', + 'name' => 'Name', + 'date' => 'Date', + 'date_and_time' => 'Date and time', + 'time' => 'Time', + 'paid' => 'Paid', + 'unpaid' => 'Unpaid', + 'day' => 'Day', + 'budgeted' => 'Budgeted', + 'period' => 'Period', + 'balance' => 'Balance', + 'in_out_period' => 'In + out this period', + 'sum' => 'Sum', + 'summary' => 'Summary', + 'average' => 'Average', + 'balanceFor' => 'Balance for :name', + 'no_tags' => '(no tags)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Add money to piggy bank ":name"', - 'piggy_bank' => 'Piggy bank', - 'new_piggy_bank' => 'New piggy bank', - 'store_piggy_bank' => 'Store new piggy bank', - 'stored_piggy_bank' => 'Store new piggy bank ":name"', - 'account_status' => 'Account status', - 'left_for_piggy_banks' => 'Left for piggy banks', - 'sum_of_piggy_banks' => 'Sum of piggy banks', - 'saved_so_far' => 'Saved so far', - 'left_to_save' => 'Left to save', - 'suggested_amount' => 'Suggested monthly amount to save', - 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', - 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', - 'add' => 'Add', - 'no_money_for_piggy' => 'You have no money to put in this piggy bank.', - 'suggested_savings_per_month' => 'Suggested per month', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Add money to piggy bank ":name"', + 'piggy_bank' => 'Piggy bank', + 'new_piggy_bank' => 'New piggy bank', + 'store_piggy_bank' => 'Store new piggy bank', + 'stored_piggy_bank' => 'Store new piggy bank ":name"', + 'account_status' => 'Account status', + 'left_for_piggy_banks' => 'Left for piggy banks', + 'sum_of_piggy_banks' => 'Sum of piggy banks', + 'saved_so_far' => 'Saved so far', + 'left_to_save' => 'Left to save', + 'suggested_amount' => 'Suggested monthly amount to save', + 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', + 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', + 'add' => 'Add', + 'no_money_for_piggy' => 'You have no money to put in this piggy bank.', + 'suggested_savings_per_month' => 'Suggested per month', - 'remove' => 'Remove', - 'max_amount_add' => 'The maximum amount you can add is', - 'max_amount_remove' => 'The maximum amount you can remove is', - 'update_piggy_button' => 'Update piggy bank', - 'update_piggy_title' => 'Update piggy bank ":name"', - 'updated_piggy_bank' => 'Updated piggy bank ":name"', - 'details' => 'Details', - 'events' => 'Events', - 'target_amount' => 'Target amount', - 'start_date' => 'Start date', - 'no_start_date' => 'No start date', - 'target_date' => 'Target date', - 'no_target_date' => 'No target date', - 'table' => 'Table', - 'delete_piggy_bank' => 'Delete piggy bank ":name"', - 'cannot_add_amount_piggy' => 'Could not add :amount to ":name".', - 'cannot_remove_from_piggy' => 'Could not remove :amount from ":name".', - 'deleted_piggy_bank' => 'Deleted piggy bank ":name"', - 'added_amount_to_piggy' => 'Added :amount to ":name"', - 'removed_amount_from_piggy' => 'Removed :amount from ":name"', - 'piggy_events' => 'Related piggy banks', + 'remove' => 'Remove', + 'max_amount_add' => 'The maximum amount you can add is', + 'max_amount_remove' => 'The maximum amount you can remove is', + 'update_piggy_button' => 'Update piggy bank', + 'update_piggy_title' => 'Update piggy bank ":name"', + 'updated_piggy_bank' => 'Updated piggy bank ":name"', + 'details' => 'Details', + 'events' => 'Events', + 'target_amount' => 'Target amount', + 'start_date' => 'Start date', + 'no_start_date' => 'No start date', + 'target_date' => 'Target date', + 'no_target_date' => 'No target date', + 'table' => 'Table', + 'delete_piggy_bank' => 'Delete piggy bank ":name"', + 'cannot_add_amount_piggy' => 'Could not add :amount to ":name".', + 'cannot_remove_from_piggy' => 'Could not remove :amount from ":name".', + 'deleted_piggy_bank' => 'Deleted piggy bank ":name"', + 'added_amount_to_piggy' => 'Added :amount to ":name"', + 'removed_amount_from_piggy' => 'Removed :amount from ":name"', + 'piggy_events' => 'Related piggy banks', // tags - 'delete_tag' => 'Delete tag ":tag"', - 'deleted_tag' => 'Deleted tag ":tag"', - 'new_tag' => 'Make new tag', - 'edit_tag' => 'Edit tag ":tag"', - 'updated_tag' => 'Updated tag ":tag"', - 'created_tag' => 'Tag ":tag" has been created!', + 'delete_tag' => 'Delete tag ":tag"', + 'deleted_tag' => 'Deleted tag ":tag"', + 'new_tag' => 'Make new tag', + 'edit_tag' => 'Edit tag ":tag"', + 'updated_tag' => 'Updated tag ":tag"', + 'created_tag' => 'Tag ":tag" has been created!', - 'transaction_journal_information' => 'Transaction information', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta information', - 'transaction_journal_more' => 'More information', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Stored under ":journal"', - 'total_amount' => 'Total amount', - 'number_of_decimals' => 'Number of decimals', + 'transaction_journal_information' => 'Transaction information', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Meta information', + 'transaction_journal_more' => 'More information', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => 'Stored under ":journal"', + 'total_amount' => 'Total amount', + 'number_of_decimals' => 'Number of decimals', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Administration', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'User administration', - 'list_all_users' => 'All users', - 'all_users' => 'All users', - 'instance_configuration' => 'Configuration', - 'firefly_instance_configuration' => 'Configuration options for Firefly III', - 'setting_single_user_mode' => 'Single user mode', - 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you untick this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', - 'store_configuration' => 'Store configuration', - 'single_user_administration' => 'User administration for :email', - 'edit_user' => 'Edit user :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'User data', - 'user_information' => 'User information', - 'total_size' => 'total size', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'The configuration has been updated', - 'setting_is_demo_site' => 'Demo site', - 'setting_is_demo_site_explain' => 'If you tick this box, this installation will behave as if it is the demo site, which can have weird side effects.', - 'block_code_bounced' => 'Email message(s) bounced', - 'block_code_expired' => 'Demo account expired', - 'no_block_code' => 'No reason for block or user not blocked', - 'block_code_email_changed' => 'User has not yet confirmed new email address', - 'admin_update_email' => 'Contrary to the profile page, the user will NOT be notified their email address has changed!', - 'update_user' => 'Update user', - 'updated_user' => 'User data has been changed.', - 'delete_user' => 'Delete user :email', - 'user_deleted' => 'The user has been deleted', - 'send_test_email' => 'Send test email message', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Send message', - 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', - 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', - 'admin_maintanance_title' => 'Maintenance', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Clear cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Description of the split transaction', - 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'you_create_transfer' => 'You\'re creating a transfer.', - 'you_create_withdrawal' => 'You\'re creating a withdrawal.', - 'you_create_deposit' => 'You\'re creating a deposit.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Administration', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'User administration', + 'list_all_users' => 'All users', + 'all_users' => 'All users', + 'instance_configuration' => 'Configuration', + 'firefly_instance_configuration' => 'Configuration options for Firefly III', + 'setting_single_user_mode' => 'Single user mode', + 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you untick this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', + 'store_configuration' => 'Store configuration', + 'single_user_administration' => 'User administration for :email', + 'edit_user' => 'Edit user :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'User data', + 'user_information' => 'User information', + 'total_size' => 'total size', + 'budget_or_budgets' => ':count budget|:count budgets', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'The configuration has been updated', + 'setting_is_demo_site' => 'Demo site', + 'setting_is_demo_site_explain' => 'If you tick this box, this installation will behave as if it is the demo site, which can have weird side effects.', + 'block_code_bounced' => 'Email message(s) bounced', + 'block_code_expired' => 'Demo account expired', + 'no_block_code' => 'No reason for block or user not blocked', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'User has not yet confirmed new email address', + 'admin_update_email' => 'Contrary to the profile page, the user will NOT be notified their email address has changed!', + 'update_user' => 'Update user', + 'updated_user' => 'User data has been changed.', + 'delete_user' => 'Delete user :email', + 'user_deleted' => 'The user has been deleted', + 'send_test_email' => 'Send test email message', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Send message', + 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', + 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', + 'admin_maintanance_title' => 'Maintenance', + 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', + 'admin_maintenance_clear_cache' => 'Clear cache', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Description of the split transaction', + 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'you_create_transfer' => 'You\'re creating a transfer.', + 'you_create_withdrawal' => 'You\'re creating a withdrawal.', + 'you_create_deposit' => 'You\'re creating a deposit.', // links - 'journal_link_configuration' => 'Transaction links configuration', - 'create_new_link_type' => 'Create new link type', - 'store_new_link_type' => 'Store new link type', - 'update_link_type' => 'Update link type', - 'edit_link_type' => 'Edit link type ":name"', - 'updated_link_type' => 'Updated link type ":name"', - 'delete_link_type' => 'Delete link type ":name"', - 'deleted_link_type' => 'Deleted link type ":name"', - 'stored_new_link_type' => 'Store new link type ":name"', - 'cannot_edit_link_type' => 'Cannot edit link type ":name"', - 'link_type_help_name' => 'Ie. "Duplicates"', - 'link_type_help_inward' => 'Ie. "duplicates"', - 'link_type_help_outward' => 'Ie. "is duplicated by"', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(do not save connection)', - 'link_transaction' => 'Link transaction', - 'link_to_other_transaction' => 'Link this transaction to another transaction', - 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', - 'this_transaction' => 'This transaction', - 'transaction' => 'Transaction', - 'comments' => 'Comments', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Cannot link these transactions', - 'selected_transaction' => 'Selected transaction', - 'journals_linked' => 'Transactions are linked.', - 'journals_error_linked' => 'These transactions are already linked.', - 'journals_link_to_self' => 'You cannot link a transaction to itself', - 'journal_links' => 'Transaction links', - 'this_withdrawal' => 'This withdrawal', - 'this_deposit' => 'This deposit', - 'this_transfer' => 'This transfer', - 'overview_for_link' => 'Overview for link type ":name"', - 'source_transaction' => 'Source transaction', - 'link_description' => 'Link description', - 'destination_transaction' => 'Destination transaction', - 'delete_journal_link' => 'Delete the link between :source and :destination', - 'deleted_link' => 'Deleted link', + 'journal_link_configuration' => 'Transaction links configuration', + 'create_new_link_type' => 'Create new link type', + 'store_new_link_type' => 'Store new link type', + 'update_link_type' => 'Update link type', + 'edit_link_type' => 'Edit link type ":name"', + 'updated_link_type' => 'Updated link type ":name"', + 'delete_link_type' => 'Delete link type ":name"', + 'deleted_link_type' => 'Deleted link type ":name"', + 'stored_new_link_type' => 'Store new link type ":name"', + 'cannot_edit_link_type' => 'Cannot edit link type ":name"', + 'link_type_help_name' => 'Ie. "Duplicates"', + 'link_type_help_inward' => 'Ie. "duplicates"', + 'link_type_help_outward' => 'Ie. "is duplicated by"', + 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', + 'do_not_save_connection' => '(do not save connection)', + 'link_transaction' => 'Link transaction', + 'link_to_other_transaction' => 'Link this transaction to another transaction', + 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', + 'this_transaction' => 'This transaction', + 'transaction' => 'Transaction', + 'comments' => 'Comments', + 'link_notes' => 'Any notes you wish to store with the link.', + 'invalid_link_selection' => 'Cannot link these transactions', + 'selected_transaction' => 'Selected transaction', + 'journals_linked' => 'Transactions are linked.', + 'journals_error_linked' => 'These transactions are already linked.', + 'journals_link_to_self' => 'You cannot link a transaction to itself', + 'journal_links' => 'Transaction links', + 'this_withdrawal' => 'This withdrawal', + 'this_deposit' => 'This deposit', + 'this_transfer' => 'This transfer', + 'overview_for_link' => 'Overview for link type ":name"', + 'source_transaction' => 'Source transaction', + 'link_description' => 'Link description', + 'destination_transaction' => 'Destination transaction', + 'delete_journal_link' => 'Delete the link between :source and :destination', + 'deleted_link' => 'Deleted link', // link translations: - 'Paid_name' => 'Paid', - 'Refund_name' => 'Refund', - 'Reimbursement_name' => 'Reimbursement', - 'Related_name' => 'Related', - 'relates to_inward' => 'relates to', - 'is (partially) refunded by_inward' => 'is (partially) refunded by', - 'is (partially) paid for by_inward' => 'is (partially) paid for by', - 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', - 'inward_transaction' => 'Inward transaction', - 'outward_transaction' => 'Outward transaction', - 'relates to_outward' => 'relates to', - '(partially) refunds_outward' => '(partially) refunds', - '(partially) pays for_outward' => '(partially) pays for', - '(partially) reimburses_outward' => '(partially) reimburses', - 'is (partially) refunded by' => 'is (partially) refunded by', - 'is (partially) paid for by' => 'is (partially) paid for by', - 'is (partially) reimbursed by' => 'is (partially) reimbursed by', - 'relates to' => 'relates to', - '(partially) refunds' => '(partially) refunds', - '(partially) pays for' => '(partially) pays for', - '(partially) reimburses' => '(partially) reimburses', + 'Paid_name' => 'Paid', + 'Refund_name' => 'Refund', + 'Reimbursement_name' => 'Reimbursement', + 'Related_name' => 'Related', + 'relates to_inward' => 'relates to', + 'is (partially) refunded by_inward' => 'is (partially) refunded by', + 'is (partially) paid for by_inward' => 'is (partially) paid for by', + 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', + 'inward_transaction' => 'Inward transaction', + 'outward_transaction' => 'Outward transaction', + 'relates to_outward' => 'relates to', + '(partially) refunds_outward' => '(partially) refunds', + '(partially) pays for_outward' => '(partially) pays for', + '(partially) reimburses_outward' => '(partially) reimburses', + 'is (partially) refunded by' => 'is (partially) refunded by', + 'is (partially) paid for by' => 'is (partially) paid for by', + 'is (partially) reimbursed by' => 'is (partially) reimbursed by', + 'relates to' => 'relates to', + '(partially) refunds' => '(partially) refunds', + '(partially) pays for' => '(partially) pays for', + '(partially) reimburses' => '(partially) reimburses', // split a transaction: - 'splits' => 'Splits', - 'add_another_split' => 'Add another split', - 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', - 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', - 'breadcrumb_convert_group' => 'Convert transaction', - 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', - 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', - 'create_another' => 'After storing, return here to create another one.', - 'after_update_create_another' => 'After updating, return here to continue editing.', - 'store_as_new' => 'Store as a new transaction instead of updating.', - 'reset_after' => 'Reset form after submission', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Splits', + 'add_another_split' => 'Add another split', + 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', + 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', + 'breadcrumb_convert_group' => 'Convert transaction', + 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', + 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', + 'create_another' => 'After storing, return here to create another one.', + 'after_update_create_another' => 'After updating, return here to continue editing.', + 'store_as_new' => 'Store as a new transaction instead of updating.', + 'reset_after' => 'Reset form after submission', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(ungrouped)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ungrouped)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Let\'s create an asset account!', - 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your current account, savings account, shared account or even your credit card.', - 'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:', - 'no_accounts_create_asset' => 'Create an asset account', - 'no_accounts_title_expense' => 'Let\'s create an expense account!', - 'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.', - 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_expense' => 'Create an expense account', - 'no_accounts_title_revenue' => 'Let\'s create a revenue account!', - 'no_accounts_intro_revenue' => 'You have no revenue accounts yet. Revenue accounts are the places where you receive money from, such as your employer.', - 'no_accounts_imperative_revenue' => 'Revenue accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_revenue' => 'Create a revenue account', - 'no_accounts_title_liabilities' => 'Let\'s create a liability!', - 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', - 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', - 'no_accounts_create_liabilities' => 'Create a liability', - 'no_budgets_title_default' => 'Let\'s create a budget', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organise your expenses into logical groups, which you can give a soft-cap to limit your expenses.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Budgets are the basic tools of financial management. Let\'s create one now:', - 'no_budgets_create_default' => 'Create a budget', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Let\'s create a category!', - 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', - 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_categories_create_default' => 'Create a category', - 'no_tags_title_default' => 'Let\'s create a tag!', - 'no_tags_intro_default' => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.', - 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_tags_create_default' => 'Create a tag', - 'no_transactions_title_withdrawal' => 'Let\'s create an expense!', - 'no_transactions_intro_withdrawal' => 'You have no expenses yet. You should create expenses to start managing your finances.', - 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', - 'no_transactions_create_withdrawal' => 'Create an expense', - 'no_transactions_title_deposit' => 'Let\'s create some income!', - 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', - 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', - 'no_transactions_create_deposit' => 'Create a deposit', - 'no_transactions_title_transfers' => 'Let\'s create a transfer!', - 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', - 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', - 'no_transactions_create_transfers' => 'Create a transfer', - 'no_piggies_title_default' => 'Let\'s create a piggy bank!', - 'no_piggies_intro_default' => 'You have no piggy banks yet. You can create piggy banks to divide your savings and keep track of what you\'re saving up for.', - 'no_piggies_imperative_default' => 'Do you have things you\'re saving money for? Create a piggy bank and keep track:', - 'no_piggies_create_default' => 'Create a new piggy bank', - 'no_bills_title_default' => 'Let\'s create a bill!', - 'no_bills_intro_default' => 'You have no bills yet. You can create bills to keep track of regular expenses, like your rent or insurance.', - 'no_bills_imperative_default' => 'Do you have such regular bills? Create a bill and keep track of your payments:', - 'no_bills_create_default' => 'Create a bill', + 'no_accounts_title_asset' => 'Let\'s create an asset account!', + 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your current account, savings account, shared account or even your credit card.', + 'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:', + 'no_accounts_create_asset' => 'Create an asset account', + 'no_accounts_title_expense' => 'Let\'s create an expense account!', + 'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.', + 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_expense' => 'Create an expense account', + 'no_accounts_title_revenue' => 'Let\'s create a revenue account!', + 'no_accounts_intro_revenue' => 'You have no revenue accounts yet. Revenue accounts are the places where you receive money from, such as your employer.', + 'no_accounts_imperative_revenue' => 'Revenue accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_revenue' => 'Create a revenue account', + 'no_accounts_title_liabilities' => 'Let\'s create a liability!', + 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', + 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', + 'no_accounts_create_liabilities' => 'Create a liability', + 'no_budgets_title_default' => 'Let\'s create a budget', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organise your expenses into logical groups, which you can give a soft-cap to limit your expenses.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Budgets are the basic tools of financial management. Let\'s create one now:', + 'no_budgets_create_default' => 'Create a budget', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Let\'s create a category!', + 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', + 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_categories_create_default' => 'Create a category', + 'no_tags_title_default' => 'Let\'s create a tag!', + 'no_tags_intro_default' => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.', + 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_tags_create_default' => 'Create a tag', + 'no_transactions_title_withdrawal' => 'Let\'s create an expense!', + 'no_transactions_intro_withdrawal' => 'You have no expenses yet. You should create expenses to start managing your finances.', + 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', + 'no_transactions_create_withdrawal' => 'Create an expense', + 'no_transactions_title_deposit' => 'Let\'s create some income!', + 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', + 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', + 'no_transactions_create_deposit' => 'Create a deposit', + 'no_transactions_title_transfers' => 'Let\'s create a transfer!', + 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', + 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', + 'no_transactions_create_transfers' => 'Create a transfer', + 'no_piggies_title_default' => 'Let\'s create a piggy bank!', + 'no_piggies_intro_default' => 'You have no piggy banks yet. You can create piggy banks to divide your savings and keep track of what you\'re saving up for.', + 'no_piggies_imperative_default' => 'Do you have things you\'re saving money for? Create a piggy bank and keep track:', + 'no_piggies_create_default' => 'Create a new piggy bank', + 'no_bills_title_default' => 'Let\'s create a bill!', + 'no_bills_intro_default' => 'You have no bills yet. You can create bills to keep track of regular expenses, like your rent or insurance.', + 'no_bills_imperative_default' => 'Do you have such regular bills? Create a bill and keep track of your payments:', + 'no_bills_create_default' => 'Create a bill', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Recurring transactions', - 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', - 'recurring_calendar_view' => 'Calendar', - 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', - 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', - 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', - 'no_recurring_create_default' => 'Create a recurring transaction', - 'make_new_recurring' => 'Create a recurring transaction', - 'recurring_daily' => 'Every day', - 'recurring_weekly' => 'Every week on :weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => 'Every year on :date', - 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', - 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', - 'created_transactions' => 'Related transactions', - 'expected_withdrawals' => 'Expected withdrawals', - 'expected_deposits' => 'Expected deposits', - 'expected_transfers' => 'Expected transfers', - 'created_withdrawals' => 'Created withdrawals', - 'created_deposits' => 'Created deposits', - 'created_transfers' => 'Created transfers', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', - 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Recurring transactions', + 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', + 'recurring_calendar_view' => 'Calendar', + 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', + 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', + 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', + 'no_recurring_create_default' => 'Create a recurring transaction', + 'make_new_recurring' => 'Create a recurring transaction', + 'recurring_daily' => 'Every day', + 'recurring_weekly' => 'Every week on :weekday', + 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', + 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => 'Every year on :date', + 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', + 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', + 'created_transactions' => 'Related transactions', + 'expected_withdrawals' => 'Expected withdrawals', + 'expected_deposits' => 'Expected deposits', + 'expected_transfers' => 'Expected transfers', + 'created_withdrawals' => 'Created withdrawals', + 'created_deposits' => 'Created deposits', + 'created_transfers' => 'Created transfers', + 'recurring_info' => 'Recurring transaction :count / :total', + 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', + 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'create_new_recurrence' => 'Create new recurring transaction', - 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', - 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', - 'no_currency' => '(no currency)', - 'mandatory_for_recurring' => 'Mandatory recurrence information', - 'mandatory_for_transaction' => 'Mandatory transaction information', - 'optional_for_recurring' => 'Optional recurrence information', - 'optional_for_transaction' => 'Optional transaction information', - 'change_date_other_options' => 'Change the "first date" to see more options.', - 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', - 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', - 'repeat_forever' => 'Repeat forever', - 'repeat_until_date' => 'Repeat until date', - 'repeat_times' => 'Repeat a number of times', - 'recurring_skips_one' => 'Every other', - 'recurring_skips_more' => 'Skips :count occurrences', - 'store_new_recurrence' => 'Store recurring transaction', - 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', - 'edit_recurrence' => 'Edit recurring transaction ":title"', - 'recurring_repeats_until' => 'Repeats until :date', - 'recurring_repeats_forever' => 'Repeats forever', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Update recurring transaction', - 'updated_recurrence' => 'Updated recurring transaction ":title"', - 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', - 'delete_recurring' => 'Delete recurring transaction ":title"', - 'new_recurring_transaction' => 'New recurring transaction', - 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', - 'do_nothing' => 'Just create the transaction', - 'skip_transaction' => 'Skip the occurrence', - 'jump_to_friday' => 'Create the transaction on the previous Friday instead', - 'jump_to_monday' => 'Create the transaction on the next Monday instead', - 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', - 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', - 'except_weekends' => 'Except weekends', - 'recurrence_deleted' => 'Recurring transaction ":title" deleted', + 'create_new_recurrence' => 'Create new recurring transaction', + 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', + 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', + 'no_currency' => '(no currency)', + 'mandatory_for_recurring' => 'Mandatory recurrence information', + 'mandatory_for_transaction' => 'Mandatory transaction information', + 'optional_for_recurring' => 'Optional recurrence information', + 'optional_for_transaction' => 'Optional transaction information', + 'change_date_other_options' => 'Change the "first date" to see more options.', + 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', + 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', + 'repeat_forever' => 'Repeat forever', + 'repeat_until_date' => 'Repeat until date', + 'repeat_times' => 'Repeat a number of times', + 'recurring_skips_one' => 'Every other', + 'recurring_skips_more' => 'Skips :count occurrences', + 'store_new_recurrence' => 'Store recurring transaction', + 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', + 'edit_recurrence' => 'Edit recurring transaction ":title"', + 'recurring_repeats_until' => 'Repeats until :date', + 'recurring_repeats_forever' => 'Repeats forever', + 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', + 'update_recurrence' => 'Update recurring transaction', + 'updated_recurrence' => 'Updated recurring transaction ":title"', + 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', + 'delete_recurring' => 'Delete recurring transaction ":title"', + 'new_recurring_transaction' => 'New recurring transaction', + 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', + 'do_nothing' => 'Just create the transaction', + 'skip_transaction' => 'Skip the occurrence', + 'jump_to_friday' => 'Create the transaction on the previous Friday instead', + 'jump_to_monday' => 'Create the transaction on the next Monday instead', + 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', + 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', + 'except_weekends' => 'Except weekends', + 'recurrence_deleted' => 'Recurring transaction ":title" deleted', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balance (:currency)', - 'box_spent_in_currency' => 'Spent (:currency)', - 'box_earned_in_currency' => 'Earned (:currency)', - 'box_budgeted_in_currency' => 'Budgeted (:currency)', - 'box_bill_paid_in_currency' => 'Bills paid (:currency)', - 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', - 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', - 'box_net_worth_in_currency' => 'Net worth (:currency)', - 'box_spend_per_day' => 'Left to spend per day: :amount', + 'box_balance_in_currency' => 'Balance (:currency)', + 'box_spent_in_currency' => 'Spent (:currency)', + 'box_earned_in_currency' => 'Earned (:currency)', + 'box_budgeted_in_currency' => 'Budgeted (:currency)', + 'box_bill_paid_in_currency' => 'Bills paid (:currency)', + 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', + 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', + 'box_net_worth_in_currency' => 'Net worth (:currency)', + 'box_spend_per_day' => 'Left to spend per day: :amount', // debug page - 'debug_page' => 'Debug page', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Debug page', + 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', + 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', + 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', // object groups - 'object_groups_menu_bar' => 'Groups', - 'object_groups_page_title' => 'Groups', - 'object_groups_breadcrumb' => 'Groups', - 'object_groups_index' => 'Overview', - 'object_groups' => 'Groups', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Title', - 'edit_object_group' => 'Edit group ":title"', - 'delete_object_group' => 'Delete group ":title"', - 'update_object_group' => 'Update group', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Group', + 'object_groups_menu_bar' => 'Groups', + 'object_groups_page_title' => 'Groups', + 'object_groups_breadcrumb' => 'Groups', + 'object_groups_index' => 'Overview', + 'object_groups' => 'Groups', + 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', + 'object_group_title' => 'Title', + 'edit_object_group' => 'Edit group ":title"', + 'delete_object_group' => 'Delete group ":title"', + 'update_object_group' => 'Update group', + 'updated_object_group' => 'Successfully updated group ":title"', + 'deleted_object_group' => 'Successfully deleted group ":title"', + 'object_group' => 'Group', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/en_GB/form.php b/resources/lang/en_GB/form.php index f97fe082b3..be20349269 100644 --- a/resources/lang/en_GB/form.php +++ b/resources/lang/en_GB/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Bank name', - 'bank_balance' => 'Balance', - 'savings_balance' => 'Savings balance', - 'credit_card_limit' => 'Credit card limit', - 'automatch' => 'Match automatically', - 'skip' => 'Skip', - 'enabled' => 'Enabled', - 'name' => 'Name', - 'active' => 'Active', - 'amount_min' => 'Minimum amount', - 'amount_max' => 'Maximum amount', - 'match' => 'Matches on', - 'strict' => 'Strict mode', - 'repeat_freq' => 'Repeats', - 'object_group' => 'Group', - 'location' => 'Location', - 'update_channel' => 'Update channel', - 'currency_id' => 'Currency', - 'transaction_currency_id' => 'Currency', - 'auto_budget_currency_id' => 'Currency', - 'external_ip' => 'Your server\'s external IP', - 'attachments' => 'Attachments', - 'BIC' => 'BIC', - 'verify_password' => 'Verify password security', - 'source_account' => 'Source account', - 'destination_account' => 'Destination account', - 'asset_destination_account' => 'Destination account', - 'include_net_worth' => 'Include in net worth', - 'asset_source_account' => 'Source account', - 'journal_description' => 'Description', - 'note' => 'Notes', - 'currency' => 'Currency', - 'account_id' => 'Asset account', - 'budget_id' => 'Budget', - 'bill_id' => 'Bill', - 'opening_balance' => 'Opening balance', - 'tagMode' => 'Tag mode', - 'virtual_balance' => 'Virtual balance', + 'bank_name' => 'Bank name', + 'bank_balance' => 'Balance', + 'savings_balance' => 'Savings balance', + 'credit_card_limit' => 'Credit card limit', + 'automatch' => 'Match automatically', + 'skip' => 'Skip', + 'enabled' => 'Enabled', + 'name' => 'Name', + 'active' => 'Active', + 'amount_min' => 'Minimum amount', + 'amount_max' => 'Maximum amount', + 'match' => 'Matches on', + 'strict' => 'Strict mode', + 'repeat_freq' => 'Repeats', + 'object_group' => 'Group', + 'location' => 'Location', + 'update_channel' => 'Update channel', + 'currency_id' => 'Currency', + 'transaction_currency_id' => 'Currency', + 'auto_budget_currency_id' => 'Currency', + 'external_ip' => 'Your server\'s external IP', + 'attachments' => 'Attachments', + 'BIC' => 'BIC', + 'verify_password' => 'Verify password security', + 'source_account' => 'Source account', + 'destination_account' => 'Destination account', + 'asset_destination_account' => 'Destination account', + 'include_net_worth' => 'Include in net worth', + 'asset_source_account' => 'Source account', + 'journal_description' => 'Description', + 'note' => 'Notes', + 'currency' => 'Currency', + 'account_id' => 'Asset account', + 'budget_id' => 'Budget', + 'bill_id' => 'Bill', + 'opening_balance' => 'Opening balance', + 'tagMode' => 'Tag mode', + 'virtual_balance' => 'Virtual balance', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Target amount', 'account_role' => 'Account role', 'opening_balance_date' => 'Opening balance date', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Are you sure you want to delete the transaction described ":description"?', 'mass_journal_are_you_sure' => 'Are you sure you want to delete these transactions?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Are you sure you want to delete the tag ":tag"?', 'journal_link_areYouSure' => 'Are you sure you want to delete the link between :source and :destination?', 'linkType_areYouSure' => 'Are you sure you want to delete the link type ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Song', - // admin 'domain' => 'Domain', 'single_user_mode' => 'Disable user registration', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS account', 'local_account' => 'Firefly III account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Date from', - 'to_date' => 'Date to', - 'due_date' => 'Due date', - 'payment_date' => 'Payment date', - 'invoice_date' => 'Invoice date', - 'internal_reference' => 'Internal reference', - 'inward' => 'Inward description', - 'outward' => 'Outward description', - 'rule_group_id' => 'Rule group', - 'transaction_description' => 'Transaction description', - 'first_date' => 'First date', - 'transaction_type' => 'Transaction type', - 'repeat_until' => 'Repeat until', - 'recurring_description' => 'Recurring transaction description', - 'repetition_type' => 'Type of repetition', - 'foreign_currency_id' => 'Foreign currency', - 'repetition_end' => 'Repetition ends', - 'repetitions' => 'Repetitions', - 'calendar' => 'Calendar', - 'weekend' => 'Weekend', - 'client_secret' => 'Client secret', - 'withdrawal_destination_id' => 'Destination account', - 'deposit_source_id' => 'Source account', - 'expected_on' => 'Expected on', - 'paid' => 'Paid', - 'auto_budget_type' => 'Auto-budget', - 'auto_budget_amount' => 'Auto-budget amount', - 'auto_budget_period' => 'Auto-budget period', - 'collected' => 'Collected', - 'submitted' => 'Submitted', - 'key' => 'Key', - 'value' => 'Content of record', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Date from', + 'to_date' => 'Date to', + 'due_date' => 'Due date', + 'payment_date' => 'Payment date', + 'invoice_date' => 'Invoice date', + 'internal_reference' => 'Internal reference', + 'inward' => 'Inward description', + 'outward' => 'Outward description', + 'rule_group_id' => 'Rule group', + 'transaction_description' => 'Transaction description', + 'first_date' => 'First date', + 'transaction_type' => 'Transaction type', + 'repeat_until' => 'Repeat until', + 'recurring_description' => 'Recurring transaction description', + 'repetition_type' => 'Type of repetition', + 'foreign_currency_id' => 'Foreign currency', + 'repetition_end' => 'Repetition ends', + 'repetitions' => 'Repetitions', + 'calendar' => 'Calendar', + 'weekend' => 'Weekend', + 'client_secret' => 'Client secret', + 'withdrawal_destination_id' => 'Destination account', + 'deposit_source_id' => 'Source account', + 'expected_on' => 'Expected on', + 'paid' => 'Paid', + 'auto_budget_type' => 'Auto-budget', + 'auto_budget_amount' => 'Auto-budget amount', + 'auto_budget_period' => 'Auto-budget period', + 'collected' => 'Collected', + 'submitted' => 'Submitted', + 'key' => 'Key', + 'value' => 'Content of record', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/en_GB/intro.php b/resources/lang/en_GB/intro.php index a10d3b7659..b7acccb192 100644 --- a/resources/lang/en_GB/intro.php +++ b/resources/lang/en_GB/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Welcome to the index page of Firefly III. Please take the time to walk through this intro to get a feeling of how Firefly III works.', - 'index_accounts-chart' => 'This chart shows the current balance of your asset accounts. You can select the accounts visible here in your preferences.', - 'index_box_out_holder' => 'This little box and the boxes next to this one will give you a quick overview of your financial situation.', - 'index_help' => 'If you ever need help with a page or a form, press this button.', - 'index_outro' => 'Most pages of Firefly III will start with a little tour like this one. Please contact me when you have questions or comments. Enjoy!', - 'index_sidebar-toggle' => 'To create new transactions, accounts or other things, use the menu under this icon.', - 'index_cash_account' => 'These are the accounts created so far. You can use the cash account to track cash expenses but it\'s not mandatory of course.', + 'index_intro' => 'Welcome to the index page of Firefly III. Please take the time to walk through this intro to get a feeling of how Firefly III works.', + 'index_accounts-chart' => 'This chart shows the current balance of your asset accounts. You can select the accounts visible here in your preferences.', + 'index_box_out_holder' => 'This little box and the boxes next to this one will give you a quick overview of your financial situation.', + 'index_help' => 'If you ever need help with a page or a form, press this button.', + 'index_outro' => 'Most pages of Firefly III will start with a little tour like this one. Please contact me when you have questions or comments. Enjoy!', + 'index_sidebar-toggle' => 'To create new transactions, accounts or other things, use the menu under this icon.', + 'index_cash_account' => 'These are the accounts created so far. You can use the cash account to track cash expenses but it\'s not mandatory of course.', // transactions - 'transactions_create_basic_info' => 'Enter the basic information of your transaction. Source, destination, date and description.', - 'transactions_create_amount_info' => 'Enter the amount of the transaction. If necessary the fields will auto-update for foreign amount info.', - 'transactions_create_optional_info' => 'All of these fields are optional. Adding meta-data here will make your transactions better organised.', - 'transactions_create_split' => 'If you want to split a transaction, add more splits with this button', + 'transactions_create_basic_info' => 'Enter the basic information of your transaction. Source, destination, date and description.', + 'transactions_create_amount_info' => 'Enter the amount of the transaction. If necessary the fields will auto-update for foreign amount info.', + 'transactions_create_optional_info' => 'All of these fields are optional. Adding meta-data here will make your transactions better organised.', + 'transactions_create_split' => 'If you want to split a transaction, add more splits with this button', // create account: - 'accounts_create_iban' => 'Give your accounts a valid IBAN. This could make a data import very easy in the future.', - 'accounts_create_asset_opening_balance' => 'Assets accounts may have an "opening balance", indicating the start of this account\'s history in Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III supports multiple currencies. Asset accounts have one main currency, which you must set here.', - 'accounts_create_asset_virtual' => 'It can sometimes help to give your account a virtual balance: an extra amount always added to or removed from the actual balance.', + 'accounts_create_iban' => 'Give your accounts a valid IBAN. This could make a data import very easy in the future.', + 'accounts_create_asset_opening_balance' => 'Assets accounts may have an "opening balance", indicating the start of this account\'s history in Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III supports multiple currencies. Asset accounts have one main currency, which you must set here.', + 'accounts_create_asset_virtual' => 'It can sometimes help to give your account a virtual balance: an extra amount always added to or removed from the actual balance.', // budgets index - 'budgets_index_intro' => 'Budgets are used to manage your finances and form one of the core functions of Firefly III.', - 'budgets_index_set_budget' => 'Set your total budget for every period so Firefly III can tell you if you have budgeted all available money.', - 'budgets_index_see_expenses_bar' => 'Spending money will slowly fill this bar.', - 'budgets_index_navigate_periods' => 'Navigate through periods to easily set budgets ahead of time.', - 'budgets_index_new_budget' => 'Create new budgets as you see fit.', - 'budgets_index_list_of_budgets' => 'Use this table to set the amounts for each budget and see how you are doing.', - 'budgets_index_outro' => 'To learn more about budgeting, checkout the help icon in the top right corner.', + 'budgets_index_intro' => 'Budgets are used to manage your finances and form one of the core functions of Firefly III.', + 'budgets_index_see_expenses_bar' => 'Spending money will slowly fill this bar.', + 'budgets_index_navigate_periods' => 'Navigate through periods to easily set budgets ahead of time.', + 'budgets_index_new_budget' => 'Create new budgets as you see fit.', + 'budgets_index_list_of_budgets' => 'Use this table to set the amounts for each budget and see how you are doing.', + 'budgets_index_outro' => 'To learn more about budgeting, checkout the help icon in the top right corner.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Use these reports to get detailed insights in your finances.', - 'reports_index_inputReportType' => 'Pick a report type. Check out the help pages to see what each report shows you.', - 'reports_index_inputAccountsSelect' => 'You can exclude or include asset accounts as you see fit.', - 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years.', - 'reports_index_extra-options-box' => 'Depending on the report you have selected, you can select extra filters and options here. Watch this box when you change report types.', + 'reports_index_intro' => 'Use these reports to get detailed insights in your finances.', + 'reports_index_inputReportType' => 'Pick a report type. Check out the help pages to see what each report shows you.', + 'reports_index_inputAccountsSelect' => 'You can exclude or include asset accounts as you see fit.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Depending on the report you have selected, you can select extra filters and options here. Watch this box when you change report types.', // reports (reports) - 'reports_report_default_intro' => 'This report will give you a quick and comprehensive overview of your finances. If you wish to see anything else, please don\'t hestitate to contact me!', - 'reports_report_audit_intro' => 'This report will give you detailed insights in your asset accounts.', - 'reports_report_audit_optionsBox' => 'Use these check boxes to show or hide the columns you are interested in.', + 'reports_report_default_intro' => 'This report will give you a quick and comprehensive overview of your finances. If you wish to see anything else, please don\'t hestitate to contact me!', + 'reports_report_audit_intro' => 'This report will give you detailed insights in your asset accounts.', + 'reports_report_audit_optionsBox' => 'Use these check boxes to show or hide the columns you are interested in.', - 'reports_report_category_intro' => 'This report will give you insight in one or multiple categories.', - 'reports_report_category_pieCharts' => 'These charts will give you insight in expenses and income per category or per account.', - 'reports_report_category_incomeAndExpensesChart' => 'This chart shows your expenses and income per category.', + 'reports_report_category_intro' => 'This report will give you insight in one or multiple categories.', + 'reports_report_category_pieCharts' => 'These charts will give you insight in expenses and income per category or per account.', + 'reports_report_category_incomeAndExpensesChart' => 'This chart shows your expenses and income per category.', - 'reports_report_tag_intro' => 'This report will give you insight in one or multiple tags.', - 'reports_report_tag_pieCharts' => 'These charts will give you insight in expenses and income per tag, account, category or budget.', - 'reports_report_tag_incomeAndExpensesChart' => 'This chart shows your expenses and income per tag.', + 'reports_report_tag_intro' => 'This report will give you insight in one or multiple tags.', + 'reports_report_tag_pieCharts' => 'These charts will give you insight in expenses and income per tag, account, category or budget.', + 'reports_report_tag_incomeAndExpensesChart' => 'This chart shows your expenses and income per tag.', 'reports_report_budget_intro' => 'This report will give you insight in one or multiple budgets.', 'reports_report_budget_pieCharts' => 'These charts will give you insight in expenses per budget or per account.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Next to this progress bar are two buttons (+ and -) to add or remove money from each piggy bank.', 'piggy-banks_index_accountStatus' => 'For each asset account with at least one piggy bank the status is listed in this table.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'What is your goal? A new couch, a camera, money for emergencies?', 'piggy-banks_create_date' => 'You can set a target date or a deadline for your piggy bank.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Use bills to track the amount of money you\'re due every period. Think about expenses like rent, insurance or mortgage payments.', 'bills_create_name' => 'Use a descriptive name such as "Rent" or "Health insurance".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Select a minimum and maximum amount for this bill.', 'bills_create_repeat_freq_holder' => 'Most bills repeat monthly, but you can set another frequency here.', 'bills_create_skip_holder' => 'If a bill repeats every 2 weeks, the "skip"-field should be set to "1" to skip every other week.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Use this button to see which transactions would match your rule.', 'rules_create_actions' => 'Set as many actions as you like.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'More options are available behind these tabs.', diff --git a/resources/lang/en_GB/list.php b/resources/lang/en_GB/list.php index 9fa2a0fa9c..f4c5c32aac 100644 --- a/resources/lang/en_GB/list.php +++ b/resources/lang/en_GB/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Buttons', - 'icon' => 'Icon', - 'id' => 'ID', - 'create_date' => 'Created at', - 'update_date' => 'Updated at', - 'updated_at' => 'Updated at', - 'balance_before' => 'Balance before', - 'balance_after' => 'Balance after', - 'name' => 'Name', - 'role' => 'Role', - 'currentBalance' => 'Current balance', - 'linked_to_rules' => 'Relevant rules', - 'active' => 'Is active?', - 'percentage' => 'pct.', - 'recurring_transaction' => 'Recurring transaction', - 'next_due' => 'Next due', - 'transaction_type' => 'Type', - 'lastActivity' => 'Last activity', - 'balanceDiff' => 'Balance difference', - 'other_meta_data' => 'Other meta data', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Account type', - 'created_at' => 'Created at', - 'account' => 'Account', - 'external_url' => 'External URL', - 'matchingAmount' => 'Amount', - 'destination' => 'Destination', - 'source' => 'Source', - 'next_expected_match' => 'Next expected match', - 'automatch' => 'Auto match?', + 'buttons' => 'Buttons', + 'icon' => 'Icon', + 'id' => 'ID', + 'create_date' => 'Created at', + 'update_date' => 'Updated at', + 'updated_at' => 'Updated at', + 'balance_before' => 'Balance before', + 'balance_after' => 'Balance after', + 'name' => 'Name', + 'role' => 'Role', + 'currentBalance' => 'Current balance', + 'linked_to_rules' => 'Relevant rules', + 'active' => 'Is active?', + 'percentage' => 'pct.', + 'recurring_transaction' => 'Recurring transaction', + 'next_due' => 'Next due', + 'transaction_type' => 'Type', + 'lastActivity' => 'Last activity', + 'balanceDiff' => 'Balance difference', + 'other_meta_data' => 'Other meta data', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => 'Account type', + 'created_at' => 'Created at', + 'account' => 'Account', + 'external_url' => 'External URL', + 'matchingAmount' => 'Amount', + 'destination' => 'Destination', + 'source' => 'Source', + 'next_expected_match' => 'Next expected match', + 'automatch' => 'Auto match?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Repeats', 'description' => 'Description', 'amount' => 'Amount', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Account with bunq', 'file_name' => 'File name', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'File size', - 'file_type' => 'File type', - 'attached_to' => 'Attached to', - 'file_exists' => 'File exists', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Last login', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'bunq payment ID', - 'repetitions' => 'Repetitions', - 'title' => 'Title', - 'transaction_s' => 'Transaction(s)', - 'field' => 'Field', - 'value' => 'Value', - 'interest' => 'Interest', - 'interest_period' => 'Interest period', - 'liability_type' => 'Type of liability', - 'liability_direction' => 'Liability in/out', - 'end_date' => 'End date', - 'payment_info' => 'Payment information', - 'expected_info' => 'Next expected transaction', - 'start_date' => 'Start date', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'File size', + 'file_type' => 'File type', + 'attached_to' => 'Attached to', + 'file_exists' => 'File exists', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Last login', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'bunq payment ID', + 'repetitions' => 'Repetitions', + 'title' => 'Title', + 'transaction_s' => 'Transaction(s)', + 'field' => 'Field', + 'value' => 'Value', + 'interest' => 'Interest', + 'interest_period' => 'Interest period', + 'liability_type' => 'Type of liability', + 'liability_direction' => 'Liability in/out', + 'end_date' => 'End date', + 'payment_info' => 'Payment information', + 'expected_info' => 'Next expected transaction', + 'start_date' => 'Start date', + 'trigger' => 'Trigger', + 'response' => 'Response', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/en_GB/pagination.php b/resources/lang/en_GB/pagination.php index 7b95c55dbb..0e92d356c3 100644 --- a/resources/lang/en_GB/pagination.php +++ b/resources/lang/en_GB/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/en_GB/passwords.php b/resources/lang/en_GB/passwords.php index f73c7ad6f0..76351eb4cd 100644 --- a/resources/lang/en_GB/passwords.php +++ b/resources/lang/en_GB/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/en_GB/rules.php b/resources/lang/en_GB/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/en_GB/rules.php +++ b/resources/lang/en_GB/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/en_GB/validation.php b/resources/lang/en_GB/validation.php index 0bf069533e..4f09aa3e66 100644 --- a/resources/lang/en_GB/validation.php +++ b/resources/lang/en_GB/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'This is not a valid IBAN.', - 'zero_or_more' => 'The value cannot be negative.', - 'date_or_time' => 'The value must be a valid date or time value (ISO 8601).', - 'source_equals_destination' => 'The source account equals the destination account.', - 'unique_account_number_for_user' => 'This account number seems to be already in use.', - 'unique_iban_for_user' => 'It looks like this IBAN is already in use.', - 'deleted_user' => 'Due to security constraints, you cannot register using this email address.', - 'rule_trigger_value' => 'This value is invalid for the selected trigger.', - 'rule_action_value' => 'This value is invalid for the selected action.', - 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', - 'file_attached' => 'Successfully uploaded file ":name".', - 'must_exist' => 'The ID in field :attribute does not exist in the database.', - 'all_accounts_equal' => 'All accounts in this field must be equal.', - 'group_title_mandatory' => 'A group title is mandatory when there is more than one transaction.', - 'transaction_types_equal' => 'All splits must be of the same type.', - 'invalid_transaction_type' => 'Invalid transaction type.', - 'invalid_selection' => 'Your selection is invalid.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Need at least one transaction.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Need at least one repetition.', - 'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.', - 'require_currency_info' => 'The content of this field is invalid without currency information.', - 'not_transfer_account' => 'This account is not an account that can be used for transfers.', - 'require_currency_amount' => 'The content of this field is invalid without foreign amount information.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Transaction description should not equal global description.', - 'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.', - 'file_too_large' => 'File ":name" is too large.', - 'belongs_to_user' => 'The value of :attribute is unknown.', - 'accepted' => 'The :attribute must be accepted.', - 'bic' => 'This is not a valid BIC.', - 'at_least_one_trigger' => 'Rule must have at least one trigger.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'Rule must have at least one action.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'This is not valid base64 encoded data.', - 'model_id_invalid' => 'The given ID seems invalid for this model.', - 'less' => ':attribute must be less than 10,000,000', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'date_after' => 'The start date must be before the end date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'unique_for_user' => 'There already is an entry with this :attribute.', - 'before' => 'The :attribute must be a date before :date.', - 'unique_object_for_user' => 'This name is already in use.', - 'unique_account_for_user' => 'This account name is already in use.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => 'This is not a valid IBAN.', + 'zero_or_more' => 'The value cannot be negative.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'The value must be a valid date or time value (ISO 8601).', + 'source_equals_destination' => 'The source account equals the destination account.', + 'unique_account_number_for_user' => 'This account number seems to be already in use.', + 'unique_iban_for_user' => 'It looks like this IBAN is already in use.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Due to security constraints, you cannot register using this email address.', + 'rule_trigger_value' => 'This value is invalid for the selected trigger.', + 'rule_action_value' => 'This value is invalid for the selected action.', + 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', + 'file_attached' => 'Successfully uploaded file ":name".', + 'must_exist' => 'The ID in field :attribute does not exist in the database.', + 'all_accounts_equal' => 'All accounts in this field must be equal.', + 'group_title_mandatory' => 'A group title is mandatory when there is more than one transaction.', + 'transaction_types_equal' => 'All splits must be of the same type.', + 'invalid_transaction_type' => 'Invalid transaction type.', + 'invalid_selection' => 'Your selection is invalid.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Need at least one transaction.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Need at least one repetition.', + 'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.', + 'require_currency_info' => 'The content of this field is invalid without currency information.', + 'not_transfer_account' => 'This account is not an account that can be used for transfers.', + 'require_currency_amount' => 'The content of this field is invalid without foreign amount information.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'Transaction description should not equal global description.', + 'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.', + 'file_too_large' => 'File ":name" is too large.', + 'belongs_to_user' => 'The value of :attribute is unknown.', + 'accepted' => 'The :attribute must be accepted.', + 'bic' => 'This is not a valid BIC.', + 'at_least_one_trigger' => 'Rule must have at least one trigger.', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => 'Rule must have at least one action.', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => 'This is not valid base64 encoded data.', + 'model_id_invalid' => 'The given ID seems invalid for this model.', + 'less' => ':attribute must be less than 10,000,000', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'date_after' => 'The start date must be before the end date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'unique_for_user' => 'There already is an entry with this :attribute.', + 'before' => 'The :attribute must be a date before :date.', + 'unique_object_for_user' => 'This name is already in use.', + 'unique_account_for_user' => 'This account name is already in use.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => 'The :attribute must be between :min and :max.', + 'between.file' => 'The :attribute must be between :min and :max kilobytes.', + 'between.string' => 'The :attribute must be between :min and :max characters.', + 'between.array' => 'The :attribute must have between :min and :max items.', + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'filled' => 'The :attribute field is required.', + 'exists' => 'The selected :attribute is invalid.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max.numeric' => 'The :attribute may not be greater than :max.', + 'max.file' => 'The :attribute may not be greater than :max kilobytes.', + 'max.string' => 'The :attribute may not be greater than :max characters.', + 'max.array' => 'The :attribute may not have more than :max items.', + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min.numeric' => 'The :attribute must be at least :min.', + 'lte.numeric' => 'The :attribute must be less than or equal :value.', + 'min.file' => 'The :attribute must be at least :min kilobytes.', + 'min.string' => 'The :attribute must be at least :min characters.', + 'min.array' => 'The :attribute must have at least :min items.', + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'The native amount must be a number.', + 'numeric_destination' => 'The destination amount must be a number.', + 'numeric_source' => 'The source amount must be a number.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size.numeric' => 'The :attribute must be :size.', + 'amount_min_over_max' => 'The minimum amount cannot be larger than the maximum amount.', + 'size.file' => 'The :attribute must be :size kilobytes.', + 'size.string' => 'The :attribute must be :size characters.', + 'size.array' => 'The :attribute must contain :size items.', + 'unique' => 'The :attribute has already been taken.', + 'string' => 'The :attribute must be a string.', + 'url' => 'The :attribute format is invalid.', + 'timezone' => 'The :attribute must be a valid zone.', + '2fa_code' => 'The :attribute field is invalid.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'file' => 'The :attribute must be a file.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'present' => 'The :attribute field must be present.', + 'amount_zero' => 'The total amount cannot be zero.', + 'current_target_amount' => 'The current amount must be less than the target amount.', + 'unique_piggy_bank_for_user' => 'The name of the piggy bank must be unique.', + 'unique_object_group' => 'The group name must be unique', + 'starts_with' => 'The value must start with :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Both accounts must be of the same account type', + 'same_account_currency' => 'Both accounts must have the same currency setting', - 'between.numeric' => 'The :attribute must be between :min and :max.', - 'between.file' => 'The :attribute must be between :min and :max kilobytes.', - 'between.string' => 'The :attribute must be between :min and :max characters.', - 'between.array' => 'The :attribute must have between :min and :max items.', - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'email' => 'The :attribute must be a valid email address.', - 'filled' => 'The :attribute field is required.', - 'exists' => 'The selected :attribute is invalid.', - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'json' => 'The :attribute must be a valid JSON string.', - 'max.numeric' => 'The :attribute may not be greater than :max.', - 'max.file' => 'The :attribute may not be greater than :max kilobytes.', - 'max.string' => 'The :attribute may not be greater than :max characters.', - 'max.array' => 'The :attribute may not have more than :max items.', - 'mimes' => 'The :attribute must be a file of type: :values.', - 'min.numeric' => 'The :attribute must be at least :min.', - 'lte.numeric' => 'The :attribute must be less than or equal :value.', - 'min.file' => 'The :attribute must be at least :min kilobytes.', - 'min.string' => 'The :attribute must be at least :min characters.', - 'min.array' => 'The :attribute must have at least :min items.', - 'not_in' => 'The selected :attribute is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'numeric_native' => 'The native amount must be a number.', - 'numeric_destination' => 'The destination amount must be a number.', - 'numeric_source' => 'The source amount must be a number.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values is present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'size.numeric' => 'The :attribute must be :size.', - 'amount_min_over_max' => 'The minimum amount cannot be larger than the maximum amount.', - 'size.file' => 'The :attribute must be :size kilobytes.', - 'size.string' => 'The :attribute must be :size characters.', - 'size.array' => 'The :attribute must contain :size items.', - 'unique' => 'The :attribute has already been taken.', - 'string' => 'The :attribute must be a string.', - 'url' => 'The :attribute format is invalid.', - 'timezone' => 'The :attribute must be a valid zone.', - '2fa_code' => 'The :attribute field is invalid.', - 'dimensions' => 'The :attribute has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'file' => 'The :attribute must be a file.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'present' => 'The :attribute field must be present.', - 'amount_zero' => 'The total amount cannot be zero.', - 'current_target_amount' => 'The current amount must be less than the target amount.', - 'unique_piggy_bank_for_user' => 'The name of the piggy bank must be unique.', - 'unique_object_group' => 'The group name must be unique', - 'starts_with' => 'The value must start with :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Both accounts must be of the same account type', - 'same_account_currency' => 'Both accounts must have the same currency setting', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'This is not a secure password. Please try again. For more information, visit https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.', - 'valid_recurrence_rep_moment' => 'Invalid repetition moment for this type of repetition.', - 'invalid_account_info' => 'Invalid account information.', - 'attributes' => [ + 'secure_password' => 'This is not a secure password. Please try again. For more information, visit https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.', + 'valid_recurrence_rep_moment' => 'Invalid repetition moment for this type of repetition.', + 'invalid_account_info' => 'Invalid account information.', + 'attributes' => [ 'email' => 'email address', 'description' => 'description', 'amount' => 'amount', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'withdrawal_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', + 'deposit_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'need_id_in_edit' => 'Each split must have transaction_journal_id (either valid ID or 0).', - 'transfer_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'need_id_in_edit' => 'Each split must have transaction_journal_id (either valid ID or 0).', + 'ob_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'You can\'t use this account as the source account.', + 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', - 'generic_invalid_source' => 'You can\'t use this account as the source account.', - 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', - 'gt.numeric' => 'The :attribute must be greater than :value.', - 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', - 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', - 'gte.array' => 'The :attribute must have :value items or more.', + 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', + 'gt.numeric' => 'The :attribute must be greater than :value.', + 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', + 'gte.array' => 'The :attribute must have :value items or more.', 'amount_required_for_auto_budget' => 'The amount is required.', 'auto_budget_amount_positive' => 'The amount must be more than zero.', + 'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.', // no access to administration: diff --git a/resources/lang/en_US/api.php b/resources/lang/en_US/api.php index 526481993b..5309422de0 100644 --- a/resources/lang/en_US/api.php +++ b/resources/lang/en_US/api.php @@ -24,5 +24,4 @@ declare(strict_types=1); // Ignore this comment return [ - ]; diff --git a/resources/lang/en_US/auth.php b/resources/lang/en_US/auth.php index bafc9610ac..9f1063016d 100644 --- a/resources/lang/en_US/auth.php +++ b/resources/lang/en_US/auth.php @@ -24,7 +24,6 @@ declare(strict_types=1); - return [ 'failed' => 'These credentials do not match our records.', 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', diff --git a/resources/lang/en_US/breadcrumbs.php b/resources/lang/en_US/breadcrumbs.php index b55d6bc29d..8a7011923f 100644 --- a/resources/lang/en_US/breadcrumbs.php +++ b/resources/lang/en_US/breadcrumbs.php @@ -25,36 +25,36 @@ declare(strict_types=1); return [ - 'home' => 'Home', - 'budgets' => 'Budgets', - 'subscriptions' => 'Subscriptions', - 'transactions' => 'Transactions', - 'title_expenses' => 'Expenses', - 'title_withdrawal' => 'Expenses', - 'title_revenue' => 'Revenue / income', - 'title_deposit' => 'Revenue / income', - 'title_transfer' => 'Transfers', - 'title_transfers' => 'Transfers', - 'edit_currency' => 'Edit currency ":name"', - 'delete_currency' => 'Delete currency ":name"', - 'newPiggyBank' => 'Create a new piggy bank', - 'edit_piggyBank' => 'Edit piggy bank ":name"', - 'preferences' => 'Preferences', - 'profile' => 'Profile', - 'accounts' => 'Accounts', - 'changePassword' => 'Change your password', - 'change_email' => 'Change your email address', - 'bills' => 'Bills', - 'newBill' => 'New bill', - 'edit_bill' => 'Edit bill ":name"', - 'delete_bill' => 'Delete bill ":name"', - 'reports' => 'Reports', - 'search_result' => 'Search results for ":query"', - 'withdrawal_list' => 'Expenses', - 'Withdrawal_list' => 'Expenses', - 'deposit_list' => 'Revenue, income and deposits', - 'transfer_list' => 'Transfers', - 'transfers_list' => 'Transfers', + 'home' => 'Home', + 'budgets' => 'Budgets', + 'subscriptions' => 'Subscriptions', + 'transactions' => 'Transactions', + 'title_expenses' => 'Expenses', + 'title_withdrawal' => 'Expenses', + 'title_revenue' => 'Revenue / income', + 'title_deposit' => 'Revenue / income', + 'title_transfer' => 'Transfers', + 'title_transfers' => 'Transfers', + 'edit_currency' => 'Edit currency ":name"', + 'delete_currency' => 'Delete currency ":name"', + 'newPiggyBank' => 'Create a new piggy bank', + 'edit_piggyBank' => 'Edit piggy bank ":name"', + 'preferences' => 'Preferences', + 'profile' => 'Profile', + 'accounts' => 'Accounts', + 'changePassword' => 'Change your password', + 'change_email' => 'Change your email address', + 'bills' => 'Bills', + 'newBill' => 'New bill', + 'edit_bill' => 'Edit bill ":name"', + 'delete_bill' => 'Delete bill ":name"', + 'reports' => 'Reports', + 'search_result' => 'Search results for ":query"', + 'withdrawal_list' => 'Expenses', + 'Withdrawal_list' => 'Expenses', + 'deposit_list' => 'Revenue, income and deposits', + 'transfer_list' => 'Transfers', + 'transfers_list' => 'Transfers', // Ignore this comment diff --git a/resources/lang/en_US/config.php b/resources/lang/en_US/config.php index 2af7b3c75e..3305d22568 100644 --- a/resources/lang/en_US/config.php +++ b/resources/lang/en_US/config.php @@ -25,50 +25,51 @@ declare(strict_types=1); return [ - 'html_language' => 'en', - 'locale' => 'en, English, en_US.utf8, en_US.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'en', + 'locale' => 'en, English, en_US.utf8, en_US.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, YYYY', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, YYYY', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'MMMM Do, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', // Ignore this comment - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Week' w, yyyy", + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Week' w, yyyy", - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Monday', - 'dow_2' => 'Tuesday', - 'dow_3' => 'Wednesday', - 'dow_4' => 'Thursday', - 'dow_5' => 'Friday', - 'dow_6' => 'Saturday', - 'dow_7' => 'Sunday', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Monday', + 'dow_2' => 'Tuesday', + 'dow_3' => 'Wednesday', + 'dow_4' => 'Thursday', + 'dow_5' => 'Friday', + 'dow_6' => 'Saturday', + 'dow_7' => 'Sunday', ]; // Ignore this comment diff --git a/resources/lang/en_US/email.php b/resources/lang/en_US/email.php index 679159ff44..05ee4907db 100644 --- a/resources/lang/en_US/email.php +++ b/resources/lang/en_US/email.php @@ -116,6 +116,7 @@ return [ 'error_github_text' => 'If you prefer, you can also open a new issue on https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'The full stacktrace is below:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'This was submitted by the user:', // Ignore this comment @@ -133,6 +134,5 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; // Ignore this comment diff --git a/resources/lang/en_US/errors.php b/resources/lang/en_US/errors.php index eafd20e39c..2c090102c9 100644 --- a/resources/lang/en_US/errors.php +++ b/resources/lang/en_US/errors.php @@ -44,17 +44,16 @@ return [ // Ignore this comment - 'collect_info' => 'Please collect more information in the storage/logs directory where you will find log files. If you\'re running Docker, use docker logs -f [container].', - 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', - 'github_help' => 'Get help on GitHub', - 'github_instructions' => 'You\'re more than welcome to open a new issue on GitHub.', - 'use_search' => 'Use the search!', - 'include_info' => 'Include the information from this debug page.', - 'tell_more' => 'Tell us more than "it says Whoops!"', - 'include_logs' => 'Include error logs (see above).', - 'what_did_you_do' => 'Tell us what you were doing.', - 'offline_header' => 'You are probably offline', - 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', - 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', - + 'collect_info' => 'Please collect more information in the storage/logs directory where you will find log files. If you\'re running Docker, use docker logs -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Get help on GitHub', + 'github_instructions' => 'You\'re more than welcome to open a new issue on GitHub.', + 'use_search' => 'Use the search!', + 'include_info' => 'Include the information from this debug page.', + 'tell_more' => 'Tell us more than "it says Whoops!"', + 'include_logs' => 'Include error logs (see above).', + 'what_did_you_do' => 'Tell us what you were doing.', + 'offline_header' => 'You are probably offline', + 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', + 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', ]; diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index 832a7f369a..f70126cbb0 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -26,305 +26,308 @@ declare(strict_types=1); return [ // general stuff: - 'close' => 'Close', - 'actions' => 'Actions', - 'edit' => 'Edit', - 'delete' => 'Delete', - 'split' => 'Split', - 'single_split' => 'Split', - 'clone' => 'Clone', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => 'Last seven days', - 'last_thirty_days' => 'Last thirty days', - 'last_180_days' => 'Last 180 days', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'YTD', - 'welcome_back' => 'What\'s playing?', - 'everything' => 'Everything', - 'today' => 'today', - 'customRange' => 'Custom range', - 'date_range' => 'Date range', - 'apply' => 'Apply', - 'select_date' => 'Select date..', - 'cancel' => 'Cancel', - 'from' => 'From', - 'to' => 'To', - 'structure' => 'Structure', - 'help_translating' => 'This help text is not yet available in your language. Will you help translate?', - 'showEverything' => 'Show everything', - 'never' => 'Never', - 'no_results_for_empty_search' => 'Your search was empty, so nothing was found.', - 'removed_amount' => 'Removed :amount', - 'added_amount' => 'Added :amount', - 'asset_account_role_help' => 'Any extra options resulting from your choice can be set later.', - 'Opening balance' => 'Opening balance', - 'create_new_stuff' => 'Create new stuff', - 'new_withdrawal' => 'New withdrawal', - 'create_new_transaction' => 'Create a new transaction', - 'sidebar_frontpage_create' => 'Create', - 'new_transaction' => 'New transaction', - 'no_rules_for_bill' => 'This bill has no rules associated to it.', - 'go_to_asset_accounts' => 'View your asset accounts', - 'go_to_budgets' => 'Go to your budgets', - 'go_to_withdrawals' => 'Go to your withdrawals', - 'clones_journal_x' => 'This transaction is a clone of ":description" (#:id)', - 'go_to_categories' => 'Go to your categories', - 'go_to_bills' => 'Go to your bills', - 'go_to_expense_accounts' => 'See your expense accounts', - 'go_to_revenue_accounts' => 'See your revenue accounts', - 'go_to_piggies' => 'Go to your piggy banks', - 'new_deposit' => 'New deposit', - 'new_transfer' => 'New transfer', - 'new_transfers' => 'New transfer', - 'new_asset_account' => 'New asset account', - 'new_expense_account' => 'New expense account', - 'new_revenue_account' => 'New revenue account', - 'new_liabilities_account' => 'New liability', - 'new_budget' => 'New budget', - 'new_bill' => 'New bill', - 'block_account_logout' => 'You have been logged out. Blocked accounts cannot use this site. Did you register with a valid email address?', - 'flash_success' => 'Success!', - 'flash_info' => 'Message', - 'flash_warning' => 'Warning!', - 'flash_error' => 'Error!', - 'flash_danger' => 'Danger!', - 'flash_info_multiple' => 'There is one message|There are :count messages', - 'flash_error_multiple' => 'There is one error|There are :count errors', - 'net_worth' => 'Net worth', - 'help_for_this_page' => 'Help for this page', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => 'Hello!', - 'two_factor_enter_code' => 'To continue, please enter your two factor authentication code. Your application can generate it for you.', - 'two_factor_code_here' => 'Enter code here', - 'two_factor_title' => 'Two factor authentication', - 'authenticate' => 'Authenticate', - 'two_factor_forgot_title' => 'Lost two factor authentication', - 'two_factor_forgot' => 'I forgot my two-factor thing.', - 'two_factor_lost_header' => 'Lost your two factor authentication?', - 'two_factor_lost_intro' => 'If you lost your backup codes as well, you have bad luck. This is not something you can fix from the web interface. You have two choices.', - 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read this entry in the FAQ for instructions.', - 'two_factor_lost_fix_owner' => 'Otherwise, email the site owner, :site_owner and ask them to reset your two factor authentication.', - 'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.', - 'pref_two_factor_new_backup_codes' => 'Get new backup codes', - 'pref_two_factor_backup_code_count' => 'You have :count valid backup code.|You have :count valid backup codes.', - '2fa_i_have_them' => 'I stored them!', - 'warning_much_data' => ':days days of data may take a while to load.', - 'registered' => 'You have registered successfully!', - 'Default asset account' => 'Default asset account', - 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.', - 'no_bill_pointer' => 'You seem to have no bills yet. You should create some on the bills-page. Bills can help you keep track of expenses.', - 'Savings account' => 'Savings account', - 'Credit card' => 'Credit card', - 'source_accounts' => 'Source account|Source accounts', - 'destination_accounts' => 'Destination account|Destination accounts', - 'user_id_is' => 'Your user id is :user', - 'field_supports_markdown' => 'This field supports Markdown.', - 'need_more_help' => 'If you need more help using Firefly III, please open a ticket on Github.', - 'reenable_intro_text' => 'You can also re-enable the introduction guidance.', - 'intro_boxes_after_refresh' => 'The introduction boxes will reappear when you refresh the page.', - 'show_all_no_filter' => 'Show all transactions without grouping them by date.', - 'expenses_by_category' => 'Expenses by category', - 'expenses_by_budget' => 'Expenses by budget', - 'income_by_category' => 'Income by category', - 'expenses_by_asset_account' => 'Expenses by asset account', - 'expenses_by_expense_account' => 'Expenses by expense account', - 'cannot_redirect_to_account' => 'Firefly III cannot redirect you to the correct page. Apologies.', - 'sum_of_expenses' => 'Sum of expenses', - 'sum_of_income' => 'Sum of income', - 'liabilities' => 'Liabilities', - 'spent_in_specific_budget' => 'Spent in budget ":budget"', - 'spent_in_specific_double' => 'Spent in account ":account"', - 'earned_in_specific_double' => 'Earned in account ":account"', - 'source_account' => 'Source account', - 'source_account_reconciliation' => 'You can\'t edit the source account of a reconciliation transaction.', - 'destination_account' => 'Destination account', - 'destination_account_reconciliation' => 'You can\'t edit the destination account of a reconciliation transaction.', - 'sum_of_expenses_in_budget' => 'Spent total in budget ":budget"', - 'left_in_budget_limit' => 'Left to spend according to budgeting', - 'current_period' => 'Current period', - 'show_the_current_period_and_overview' => 'Show the current period and overview', - 'pref_languages_locale' => 'For a language other than English to work properly, your operating system must be equipped with the correct locale-information. If these are not present, currency data, dates and amounts may be formatted wrong.', - 'budget_in_period' => 'All transactions for budget ":name" between :start and :end in :currency', - 'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency', - 'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.', - 'chart_account_in_period' => 'Chart for all transactions for account ":name" (:balance) between :start and :end', - 'chart_category_in_period' => 'Chart for all transactions for category ":name" between :start and :end', - 'chart_category_all' => 'Chart for all transactions for category ":name"', - 'clone_withdrawal' => 'Clone this withdrawal', - 'clone_deposit' => 'Clone this deposit', - 'clone_transfer' => 'Clone this transfer', - 'multi_select_no_selection' => 'None selected', - 'multi_select_select_all' => 'Select all', - 'multi_select_n_selected' => 'selected', - 'multi_select_all_selected' => 'All selected', - 'multi_select_filter_placeholder' => 'Find..', - 'intro_next_label' => 'Next', - 'intro_prev_label' => 'Previous', - 'intro_skip_label' => 'Skip', - 'intro_done_label' => 'Done', - 'between_dates_breadcrumb' => 'Between :start and :end', - 'all_journals_without_budget' => 'All transactions without a budget', - 'journals_without_budget' => 'Transactions without a budget', - 'all_journals_without_category' => 'All transactions without a category', - 'journals_without_category' => 'Transactions without a category', - 'all_journals_for_account' => 'All transactions for account :name', - 'chart_all_journals_for_account' => 'Chart of all transactions for account :name', - 'journals_in_period_for_account' => 'All transactions for account :name between :start and :end', - 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', - 'transferred' => 'Transferred', - 'all_withdrawal' => 'All expenses', - 'all_transactions' => 'All transactions', - 'title_withdrawal_between' => 'All expenses between :start and :end', - 'all_deposit' => 'All revenue', - 'title_deposit_between' => 'All revenue between :start and :end', - 'all_transfers' => 'All transfers', - 'title_transfers_between' => 'All transfers between :start and :end', - 'all_transfer' => 'All transfers', - 'all_journals_for_tag' => 'All transactions for tag ":tag"', - 'title_transfer_between' => 'All transfers between :start and :end', - 'all_journals_for_category' => 'All transactions for category :name', - 'all_journals_for_budget' => 'All transactions for budget :name', - 'chart_all_journals_for_budget' => 'Chart of all transactions for budget :name', - 'journals_in_period_for_category' => 'All transactions for category :name between :start and :end', - 'journals_in_period_for_tag' => 'All transactions for tag :tag between :start and :end', - 'not_available_demo_user' => 'The feature you try to access is not available to demo users.', - 'exchange_rate_instructions' => 'Asset account "@name" only accepts transactions in @native_currency. If you wish to use @foreign_currency instead, make sure that the amount in @native_currency is known as well:', - 'transfer_exchange_rate_instructions' => 'Source asset account "@source_name" only accepts transactions in @source_currency. Destination asset account "@dest_name" only accepts transactions in @dest_currency. You must provide the transferred amount correctly in both currencies.', - 'transaction_data' => 'Transaction data', - 'invalid_server_configuration' => 'Invalid server configuration', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Quickswitch', - 'sign_in_to_start' => 'Sign in to start your session', - 'sign_in' => 'Sign in', - 'register_new_account' => 'Register a new account', - 'forgot_my_password' => 'I forgot my password', - 'problems_with_input' => 'There were some problems with your input.', - 'reset_password' => 'Reset your password', - 'button_reset_password' => 'Reset password', - 'reset_button' => 'Reset', - 'want_to_login' => 'I want to login', - 'login_page_title' => 'Login to Firefly III', - 'register_page_title' => 'Register at Firefly III', - 'forgot_pw_page_title' => 'Forgot your password for Firefly III', - 'reset_pw_page_title' => 'Reset your password for Firefly III', - 'cannot_reset_demo_user' => 'You cannot reset the password of the demo user.', - 'no_att_demo_user' => 'The demo user can\'t upload attachments.', - 'button_register' => 'Register', - 'authorization' => 'Authorization', - 'active_bills_only' => 'active bills only', - 'active_bills_only_total' => 'all active bills', - 'active_exp_bills_only' => 'active and expected bills only', - 'active_exp_bills_only_total' => 'all active expected bills only', - 'per_period_sum_1D' => 'Expected daily costs', - 'per_period_sum_1W' => 'Expected weekly costs', - 'per_period_sum_1M' => 'Expected monthly costs', - 'per_period_sum_3M' => 'Expected quarterly costs', - 'per_period_sum_6M' => 'Expected half-yearly costs', - 'per_period_sum_1Y' => 'Expected yearly costs', - 'average_per_bill' => 'average per bill', - 'expected_total' => 'expected total', - 'reconciliation_account_name' => ':name reconciliation (:currency)', - 'saved' => 'Saved', - 'advanced_options' => 'Advanced options', - 'advanced_options_explain' => 'Some pages in Firefly III have advanced options hidden behind this button. This page doesn\'t have anything fancy here, but do check out the others!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Close', + 'actions' => 'Actions', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'split' => 'Split', + 'single_split' => 'Split', + 'clone' => 'Clone', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Confirm action', + 'last_seven_days' => 'Last seven days', + 'last_thirty_days' => 'Last thirty days', + 'last_180_days' => 'Last 180 days', + 'month_to_date' => 'Month to date', + 'year_to_date' => 'Year to date', + 'YTD' => 'YTD', + 'welcome_back' => 'What\'s playing?', + 'everything' => 'Everything', + 'today' => 'today', + 'customRange' => 'Custom range', + 'date_range' => 'Date range', + 'apply' => 'Apply', + 'select_date' => 'Select date..', + 'cancel' => 'Cancel', + 'from' => 'From', + 'to' => 'To', + 'structure' => 'Structure', + 'help_translating' => 'This help text is not yet available in your language. Will you help translate?', + 'showEverything' => 'Show everything', + 'never' => 'Never', + 'no_results_for_empty_search' => 'Your search was empty, so nothing was found.', + 'removed_amount' => 'Removed :amount', + 'added_amount' => 'Added :amount', + 'asset_account_role_help' => 'Any extra options resulting from your choice can be set later.', + 'Opening balance' => 'Opening balance', + 'create_new_stuff' => 'Create new stuff', + 'new_withdrawal' => 'New withdrawal', + 'create_new_transaction' => 'Create a new transaction', + 'sidebar_frontpage_create' => 'Create', + 'new_transaction' => 'New transaction', + 'no_rules_for_bill' => 'This bill has no rules associated to it.', + 'go_to_asset_accounts' => 'View your asset accounts', + 'go_to_budgets' => 'Go to your budgets', + 'go_to_withdrawals' => 'Go to your withdrawals', + 'clones_journal_x' => 'This transaction is a clone of ":description" (#:id)', + 'go_to_categories' => 'Go to your categories', + 'go_to_bills' => 'Go to your bills', + 'go_to_expense_accounts' => 'See your expense accounts', + 'go_to_revenue_accounts' => 'See your revenue accounts', + 'go_to_piggies' => 'Go to your piggy banks', + 'new_deposit' => 'New deposit', + 'new_transfer' => 'New transfer', + 'new_transfers' => 'New transfer', + 'new_asset_account' => 'New asset account', + 'new_expense_account' => 'New expense account', + 'new_revenue_account' => 'New revenue account', + 'new_liabilities_account' => 'New liability', + 'new_budget' => 'New budget', + 'new_bill' => 'New bill', + 'block_account_logout' => 'You have been logged out. Blocked accounts cannot use this site. Did you register with a valid email address?', + 'flash_success' => 'Success!', + 'flash_info' => 'Message', + 'flash_warning' => 'Warning!', + 'flash_error' => 'Error!', + 'flash_danger' => 'Danger!', + 'flash_info_multiple' => 'There is one message|There are :count messages', + 'flash_error_multiple' => 'There is one error|There are :count errors', + 'net_worth' => 'Net worth', + 'help_for_this_page' => 'Help for this page', + 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', + 'two_factor_welcome' => 'Hello!', + 'two_factor_enter_code' => 'To continue, please enter your two factor authentication code. Your application can generate it for you.', + 'two_factor_code_here' => 'Enter code here', + 'two_factor_title' => 'Two factor authentication', + 'authenticate' => 'Authenticate', + 'two_factor_forgot_title' => 'Lost two factor authentication', + 'two_factor_forgot' => 'I forgot my two-factor thing.', + 'two_factor_lost_header' => 'Lost your two factor authentication?', + 'two_factor_lost_intro' => 'If you lost your backup codes as well, you have bad luck. This is not something you can fix from the web interface. You have two choices.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner and ask them to reset your two factor authentication.', + 'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.', + 'pref_two_factor_new_backup_codes' => 'Get new backup codes', + 'pref_two_factor_backup_code_count' => 'You have :count valid backup code.|You have :count valid backup codes.', + '2fa_i_have_them' => 'I stored them!', + 'warning_much_data' => ':days days of data may take a while to load.', + 'registered' => 'You have registered successfully!', + 'Default asset account' => 'Default asset account', + 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.', + 'no_bill_pointer' => 'You seem to have no bills yet. You should create some on the bills-page. Bills can help you keep track of expenses.', + 'Savings account' => 'Savings account', + 'Credit card' => 'Credit card', + 'source_accounts' => 'Source account|Source accounts', + 'destination_accounts' => 'Destination account|Destination accounts', + 'user_id_is' => 'Your user id is :user', + 'field_supports_markdown' => 'This field supports Markdown.', + 'need_more_help' => 'If you need more help using Firefly III, please open a ticket on Github.', + 'reenable_intro_text' => 'You can also re-enable the introduction guidance.', + 'intro_boxes_after_refresh' => 'The introduction boxes will reappear when you refresh the page.', + 'show_all_no_filter' => 'Show all transactions without grouping them by date.', + 'expenses_by_category' => 'Expenses by category', + 'expenses_by_budget' => 'Expenses by budget', + 'income_by_category' => 'Income by category', + 'expenses_by_asset_account' => 'Expenses by asset account', + 'expenses_by_expense_account' => 'Expenses by expense account', + 'cannot_redirect_to_account' => 'Firefly III cannot redirect you to the correct page. Apologies.', + 'sum_of_expenses' => 'Sum of expenses', + 'sum_of_income' => 'Sum of income', + 'liabilities' => 'Liabilities', + 'spent_in_specific_budget' => 'Spent in budget ":budget"', + 'spent_in_specific_double' => 'Spent in account ":account"', + 'earned_in_specific_double' => 'Earned in account ":account"', + 'source_account' => 'Source account', + 'source_account_reconciliation' => 'You can\'t edit the source account of a reconciliation transaction.', + 'destination_account' => 'Destination account', + 'destination_account_reconciliation' => 'You can\'t edit the destination account of a reconciliation transaction.', + 'sum_of_expenses_in_budget' => 'Spent total in budget ":budget"', + 'left_in_budget_limit' => 'Left to spend according to budgeting', + 'current_period' => 'Current period', + 'show_the_current_period_and_overview' => 'Show the current period and overview', + 'pref_languages_locale' => 'For a language other than English to work properly, your operating system must be equipped with the correct locale-information. If these are not present, currency data, dates and amounts may be formatted wrong.', + 'budget_in_period' => 'All transactions for budget ":name" between :start and :end in :currency', + 'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency', + 'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.', + 'chart_account_in_period' => 'Chart for all transactions for account ":name" (:balance) between :start and :end', + 'chart_category_in_period' => 'Chart for all transactions for category ":name" between :start and :end', + 'chart_category_all' => 'Chart for all transactions for category ":name"', + 'clone_withdrawal' => 'Clone this withdrawal', + 'clone_deposit' => 'Clone this deposit', + 'clone_transfer' => 'Clone this transfer', + 'multi_select_no_selection' => 'None selected', + 'multi_select_select_all' => 'Select all', + 'multi_select_n_selected' => 'selected', + 'multi_select_all_selected' => 'All selected', + 'multi_select_filter_placeholder' => 'Find..', + 'intro_next_label' => 'Next', + 'intro_prev_label' => 'Previous', + 'intro_skip_label' => 'Skip', + 'intro_done_label' => 'Done', + 'between_dates_breadcrumb' => 'Between :start and :end', + 'all_journals_without_budget' => 'All transactions without a budget', + 'journals_without_budget' => 'Transactions without a budget', + 'all_journals_without_category' => 'All transactions without a category', + 'journals_without_category' => 'Transactions without a category', + 'all_journals_for_account' => 'All transactions for account :name', + 'chart_all_journals_for_account' => 'Chart of all transactions for account :name', + 'journals_in_period_for_account' => 'All transactions for account :name between :start and :end', + 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', + 'transferred' => 'Transferred', + 'all_withdrawal' => 'All expenses', + 'all_transactions' => 'All transactions', + 'title_withdrawal_between' => 'All expenses between :start and :end', + 'all_deposit' => 'All revenue', + 'title_deposit_between' => 'All revenue between :start and :end', + 'all_transfers' => 'All transfers', + 'title_transfers_between' => 'All transfers between :start and :end', + 'all_transfer' => 'All transfers', + 'all_journals_for_tag' => 'All transactions for tag ":tag"', + 'title_transfer_between' => 'All transfers between :start and :end', + 'all_journals_for_category' => 'All transactions for category :name', + 'all_journals_for_budget' => 'All transactions for budget :name', + 'chart_all_journals_for_budget' => 'Chart of all transactions for budget :name', + 'journals_in_period_for_category' => 'All transactions for category :name between :start and :end', + 'journals_in_period_for_tag' => 'All transactions for tag :tag between :start and :end', + 'not_available_demo_user' => 'The feature you try to access is not available to demo users.', + 'exchange_rate_instructions' => 'Asset account "@name" only accepts transactions in @native_currency. If you wish to use @foreign_currency instead, make sure that the amount in @native_currency is known as well:', + 'transfer_exchange_rate_instructions' => 'Source asset account "@source_name" only accepts transactions in @source_currency. Destination asset account "@dest_name" only accepts transactions in @dest_currency. You must provide the transferred amount correctly in both currencies.', + 'transaction_data' => 'Transaction data', + 'invalid_server_configuration' => 'Invalid server configuration', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Quickswitch', + 'sign_in_to_start' => 'Sign in to start your session', + 'sign_in' => 'Sign in', + 'register_new_account' => 'Register a new account', + 'forgot_my_password' => 'I forgot my password', + 'problems_with_input' => 'There were some problems with your input.', + 'reset_password' => 'Reset your password', + 'button_reset_password' => 'Reset password', + 'reset_button' => 'Reset', + 'want_to_login' => 'I want to login', + 'login_page_title' => 'Login to Firefly III', + 'register_page_title' => 'Register at Firefly III', + 'forgot_pw_page_title' => 'Forgot your password for Firefly III', + 'reset_pw_page_title' => 'Reset your password for Firefly III', + 'cannot_reset_demo_user' => 'You cannot reset the password of the demo user.', + 'no_att_demo_user' => 'The demo user can\'t upload attachments.', + 'button_register' => 'Register', + 'authorization' => 'Authorization', + 'active_bills_only' => 'active bills only', + 'active_bills_only_total' => 'all active bills', + 'active_exp_bills_only' => 'active and expected bills only', + 'active_exp_bills_only_total' => 'all active expected bills only', + 'per_period_sum_1D' => 'Expected daily costs', + 'per_period_sum_1W' => 'Expected weekly costs', + 'per_period_sum_1M' => 'Expected monthly costs', + 'per_period_sum_3M' => 'Expected quarterly costs', + 'per_period_sum_6M' => 'Expected half-yearly costs', + 'per_period_sum_1Y' => 'Expected yearly costs', + 'average_per_bill' => 'average per bill', + 'expected_total' => 'expected total', + 'reconciliation_account_name' => ':name reconciliation (:currency)', + 'saved' => 'Saved', + 'advanced_options' => 'Advanced options', + 'advanced_options_explain' => 'Some pages in Firefly III have advanced options hidden behind this button. This page doesn\'t have anything fancy here, but do check out the others!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', + 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', + 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', + 'webhook_response_TRANSACTIONS' => 'Transaction details', + 'webhook_response_ACCOUNTS' => 'Account details', + 'webhook_response_none_NONE' => 'No details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspect', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => 'View message', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logs', + 'response' => 'Response', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Firefly III v:version Authorization Request', - 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', - 'scopes_will_be_able' => 'This application will be able to:', - 'button_authorize' => 'Authorize', - 'none_in_select_list' => '(none)', - 'no_piggy_bank' => '(no piggy bank)', - 'name_in_currency' => ':name in :currency', - 'paid_in_currency' => 'Paid in :currency', - 'unpaid_in_currency' => 'Unpaid in :currency', - 'is_alpha_warning' => 'You are running an ALPHA version. Be wary of bugs and issues.', - 'is_beta_warning' => 'You are running an BETA version. Be wary of bugs and issues.', - 'all_destination_accounts' => 'Destination accounts', - 'all_source_accounts' => 'Source accounts', - 'back_to_index' => 'Back to the index', - 'cant_logout_guard' => 'Firefly III can\'t log you out.', - 'internal_reference' => 'Internal reference', + 'authorization_request' => 'Firefly III v:version Authorization Request', + 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', + 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', + 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', + 'scopes_will_be_able' => 'This application will be able to:', + 'button_authorize' => 'Authorize', + 'none_in_select_list' => '(none)', + 'no_piggy_bank' => '(no piggy bank)', + 'name_in_currency' => ':name in :currency', + 'paid_in_currency' => 'Paid in :currency', + 'unpaid_in_currency' => 'Unpaid in :currency', + 'is_alpha_warning' => 'You are running an ALPHA version. Be wary of bugs and issues.', + 'is_beta_warning' => 'You are running an BETA version. Be wary of bugs and issues.', + 'all_destination_accounts' => 'Destination accounts', + 'all_source_accounts' => 'Source accounts', + 'back_to_index' => 'Back to the index', + 'cant_logout_guard' => 'Firefly III can\'t log you out.', + 'internal_reference' => 'Internal reference', // check for updates: - 'update_check_title' => 'Check for updates', - 'admin_update_check_title' => 'Automatically check for update', - 'admin_update_check_explain' => 'Firefly III can check for updates automatically. When you enable this setting, it will contact the Firefly III update server to see if a new version of Firefly III is available. When it is, you will get a notification. You can test this notification using the button on the right. Please indicate below if you want Firefly III to check for updates.', - 'check_for_updates_permission' => 'Firefly III can check for updates, but it needs your permission to do so. Please go to the administration to indicate if you would like this feature to be enabled.', - 'updates_ask_me_later' => 'Ask me later', - 'updates_do_not_check' => 'Do not check for updates', - 'updates_enable_check' => 'Enable the check for updates', - 'admin_update_check_now_title' => 'Check for updates now', - 'admin_update_check_now_explain' => 'If you press the button, Firefly III will see if your current version is the latest.', - 'check_for_updates_button' => 'Check now!', - 'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.', - 'update_version_beta' => 'This version is a BETA version. You may run into issues.', - 'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.', - 'update_current_version_alert' => 'You are running :version, which is the latest available release.', - 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', - 'update_check_error' => 'An error occurred while checking for updates: :error', - 'unknown_error' => 'Unknown error. Sorry about that.', - 'just_new_release' => 'A new version is available! Version :version was released :date. This release is very fresh. Wait a few days for the new release to stabilize.', - 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', - 'admin_update_channel_title' => 'Update channel', - 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.', - 'update_channel_stable' => 'Stable. Everything should work as expected.', - 'update_channel_beta' => 'Beta. New features but things may be broken.', - 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', + 'update_check_title' => 'Check for updates', + 'admin_update_check_title' => 'Automatically check for update', + 'admin_update_check_explain' => 'Firefly III can check for updates automatically. When you enable this setting, it will contact the Firefly III update server to see if a new version of Firefly III is available. When it is, you will get a notification. You can test this notification using the button on the right. Please indicate below if you want Firefly III to check for updates.', + 'check_for_updates_permission' => 'Firefly III can check for updates, but it needs your permission to do so. Please go to the administration to indicate if you would like this feature to be enabled.', + 'updates_ask_me_later' => 'Ask me later', + 'updates_do_not_check' => 'Do not check for updates', + 'updates_enable_check' => 'Enable the check for updates', + 'admin_update_check_now_title' => 'Check for updates now', + 'admin_update_check_now_explain' => 'If you press the button, Firefly III will see if your current version is the latest.', + 'check_for_updates_button' => 'Check now!', + 'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.', + 'update_version_beta' => 'This version is a BETA version. You may run into issues.', + 'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'You are running :version, which is the latest available release.', + 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', + 'update_check_error' => 'An error occurred while checking for updates: :error', + 'unknown_error' => 'Unknown error. Sorry about that.', + 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', + 'admin_update_channel_title' => 'Update channel', + 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.', + 'update_channel_stable' => 'Stable. Everything should work as expected.', + 'update_channel_beta' => 'Beta. New features but things may be broken.', + 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', // search - 'search' => 'Search', - 'search_query' => 'Query', - 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', - 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', - 'search_for_query' => 'Firefly III is searching for transactions with all of these words in them: :query', - 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', + 'search' => 'Search', + 'search_query' => 'Query', + 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', + 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', + 'search_for_query' => 'Firefly III is searching for transactions with all of these words in them: :query', + 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', // old @@ -448,6 +451,10 @@ return [ 'search_modifier_transaction_type' => 'Transaction type is ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Tag is ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -462,7 +469,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -717,6 +723,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'You cannot execute inactive rules.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Rules', 'rule_name' => 'Name of rule', 'rule_triggers' => 'Rule triggers when', @@ -784,7 +792,6 @@ return [ 'rule_trigger_update_journal' => 'When a transaction is updated', 'rule_trigger_user_action' => 'User action is ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Source account name starts with..', 'rule_trigger_source_account_starts' => 'Source account name starts with ":trigger_value"', @@ -862,6 +869,12 @@ return [ 'rule_trigger_budget_is' => 'Budget is ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Transaction currency is..', 'rule_trigger_currency_is' => 'Transaction currency is ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Transaction foreign currency is..', @@ -1163,7 +1176,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1237,6 +1250,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Rule group for bills', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1246,1410 +1261,1427 @@ return [ 'new_rule_for_bill_title' => 'Rule for bill ":name"', 'new_rule_for_bill_description' => 'This rule marks transactions for bill ":name".', - 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', - 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', + 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', + 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', // tags - 'store_new_tag' => 'Store new tag', - 'update_tag' => 'Update tag', - 'no_location_set' => 'No location set.', - 'meta_data' => 'Meta data', - 'location' => 'Location', - 'without_date' => 'Without date', - 'result' => 'Result', - 'sums_apply_to_range' => 'All sums apply to the selected range', - 'mapbox_api_key' => 'To use map, get an API key from Mapbox. Open your .env file and enter this code after MAPBOX_API_KEY=.', - 'press_object_location' => 'Right click or long press to set the object\'s location.', - 'clear_location' => 'Clear location', - 'delete_all_selected_tags' => 'Delete all selected tags', - 'select_tags_to_delete' => 'Don\'t forget to select some tags.', - 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', - 'create_rule_from_transaction' => 'Create rule based on transaction', - 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', - + 'store_new_tag' => 'Store new tag', + 'update_tag' => 'Update tag', + 'no_location_set' => 'No location set.', + 'meta_data' => 'Meta data', + 'location' => 'Location', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Without date', + 'result' => 'Result', + 'sums_apply_to_range' => 'All sums apply to the selected range', + 'mapbox_api_key' => 'To use map, get an API key from Mapbox. Open your .env file and enter this code after MAPBOX_API_KEY=.', + 'press_object_location' => 'Right click or long press to set the object\'s location.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Clear location', + 'delete_all_selected_tags' => 'Delete all selected tags', + 'select_tags_to_delete' => 'Don\'t forget to select some tags.', + 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', + 'create_rule_from_transaction' => 'Create rule based on transaction', + 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(equal to language)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Home screen accounts', - 'pref_home_screen_accounts_help' => 'Which accounts should be displayed on the home page?', - 'pref_view_range' => 'View range', - 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', - 'pref_1D' => 'One day', - 'pref_1W' => 'One week', - 'pref_1M' => 'One month', - 'pref_3M' => 'Three months (quarter)', - 'pref_6M' => 'Six months', - 'pref_1Y' => 'One year', - 'pref_last365' => 'Last year', - 'pref_last90' => 'Last 90 days', - 'pref_last30' => 'Last 30 days', - 'pref_last7' => 'Last 7 days', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Languages', - 'pref_locale' => 'Locale settings', - 'pref_languages_help' => 'Firefly III supports several languages. Which one do you prefer?', - 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', - 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', - 'pref_custom_fiscal_year' => 'Fiscal year settings', - 'pref_custom_fiscal_year_label' => 'Enabled', - 'pref_custom_fiscal_year_help' => 'In countries that use a financial year other than January 1 to December 31, you can switch this on and specify start / end days of the fiscal year', - 'pref_fiscal_year_start_label' => 'Fiscal year start date', - 'pref_two_factor_auth' => '2-step verification', - 'pref_two_factor_auth_help' => 'When you enable 2-step verification (also known as two-factor authentication), you add an extra layer of security to your account. You sign in with something you know (your password) and something you have (a verification code). Verification codes are generated by an application on your phone, such as Authy or Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Enable 2-step verification', - 'pref_two_factor_auth_disabled' => '2-step verification code removed and disabled', - 'pref_two_factor_auth_remove_it' => 'Don\'t forget to remove the account from your authentication app!', - 'pref_two_factor_auth_code' => 'Verify code', - 'pref_two_factor_auth_code_help' => 'Scan the QR code with an application on your phone such as Authy or Google Authenticator and enter the generated code.', - 'pref_two_factor_auth_reset_code' => 'Reset verification code', - 'pref_two_factor_auth_disable_2fa' => 'Disable 2FA', - '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', - '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', - '2fa_already_enabled' => '2-step verification is already enabled.', - 'wrong_mfa_code' => 'This MFA code is not valid.', - 'pref_save_settings' => 'Save settings', - 'saved_preferences' => 'Preferences saved!', - 'preferences_general' => 'General', - 'preferences_frontpage' => 'Home screen', - 'preferences_security' => 'Security', - 'preferences_layout' => 'Layout', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Show deposits on the home screen', - 'pref_home_show_deposits_info' => 'The home screen already shows your expense accounts. Should it also show your revenue accounts?', - 'pref_home_do_show_deposits' => 'Yes, show them', - 'successful_count' => 'of which :count successful', - 'list_page_size_title' => 'Page size', - 'list_page_size_help' => 'Any list of things (accounts, transactions, etc) shows at most this many per page.', - 'list_page_size_label' => 'Page size', - 'between_dates' => '(:start and :end)', - 'pref_optional_fields_transaction' => 'Optional fields for transactions', - 'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.', - 'optional_tj_date_fields' => 'Date fields', - 'optional_tj_other_fields' => 'Other fields', - 'optional_tj_attachment_fields' => 'Attachment fields', - 'pref_optional_tj_interest_date' => 'Interest date', - 'pref_optional_tj_book_date' => 'Book date', - 'pref_optional_tj_process_date' => 'Processing date', - 'pref_optional_tj_due_date' => 'Due date', - 'pref_optional_tj_payment_date' => 'Payment date', - 'pref_optional_tj_invoice_date' => 'Invoice date', - 'pref_optional_tj_internal_reference' => 'Internal reference', - 'pref_optional_tj_notes' => 'Notes', - 'pref_optional_tj_attachments' => 'Attachments', - 'pref_optional_tj_external_url' => 'External URL', - 'pref_optional_tj_location' => 'Location', - 'pref_optional_tj_links' => 'Transaction links', - 'optional_field_meta_dates' => 'Dates', - 'optional_field_meta_business' => 'Business', - 'optional_field_attachments' => 'Attachments', - 'optional_field_meta_data' => 'Optional meta data', - 'external_url' => 'External URL', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(equal to language)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Home screen accounts', + 'pref_home_screen_accounts_help' => 'Which accounts should be displayed on the home page?', + 'pref_view_range' => 'View range', + 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', + 'pref_1D' => 'One day', + 'pref_1W' => 'One week', + 'pref_1M' => 'One month', + 'pref_3M' => 'Three months (quarter)', + 'pref_6M' => 'Six months', + 'pref_1Y' => 'One year', + 'pref_last365' => 'Last year', + 'pref_last90' => 'Last 90 days', + 'pref_last30' => 'Last 30 days', + 'pref_last7' => 'Last 7 days', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => 'Languages', + 'pref_locale' => 'Locale settings', + 'pref_languages_help' => 'Firefly III supports several languages. Which one do you prefer?', + 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', + 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', + 'pref_custom_fiscal_year' => 'Fiscal year settings', + 'pref_custom_fiscal_year_label' => 'Enabled', + 'pref_custom_fiscal_year_help' => 'In countries that use a financial year other than January 1 to December 31, you can switch this on and specify start / end days of the fiscal year', + 'pref_fiscal_year_start_label' => 'Fiscal year start date', + 'pref_two_factor_auth' => '2-step verification', + 'pref_two_factor_auth_help' => 'When you enable 2-step verification (also known as two-factor authentication), you add an extra layer of security to your account. You sign in with something you know (your password) and something you have (a verification code). Verification codes are generated by an application on your phone, such as Authy or Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Enable 2-step verification', + 'pref_two_factor_auth_disabled' => '2-step verification code removed and disabled', + 'pref_two_factor_auth_remove_it' => 'Don\'t forget to remove the account from your authentication app!', + 'pref_two_factor_auth_code' => 'Verify code', + 'pref_two_factor_auth_code_help' => 'Scan the QR code with an application on your phone such as Authy or Google Authenticator and enter the generated code.', + 'pref_two_factor_auth_reset_code' => 'Reset verification code', + 'pref_two_factor_auth_disable_2fa' => 'Disable 2FA', + '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', + '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', + '2fa_already_enabled' => '2-step verification is already enabled.', + 'wrong_mfa_code' => 'This MFA code is not valid.', + 'pref_save_settings' => 'Save settings', + 'saved_preferences' => 'Preferences saved!', + 'preferences_general' => 'General', + 'preferences_frontpage' => 'Home screen', + 'preferences_security' => 'Security', + 'preferences_layout' => 'Layout', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Show deposits on the home screen', + 'pref_home_show_deposits_info' => 'The home screen already shows your expense accounts. Should it also show your revenue accounts?', + 'pref_home_do_show_deposits' => 'Yes, show them', + 'successful_count' => 'of which :count successful', + 'list_page_size_title' => 'Page size', + 'list_page_size_help' => 'Any list of things (accounts, transactions, etc) shows at most this many per page.', + 'list_page_size_label' => 'Page size', + 'between_dates' => '(:start and :end)', + 'pref_optional_fields_transaction' => 'Optional fields for transactions', + 'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.', + 'optional_tj_date_fields' => 'Date fields', + 'optional_tj_other_fields' => 'Other fields', + 'optional_tj_attachment_fields' => 'Attachment fields', + 'pref_optional_tj_interest_date' => 'Interest date', + 'pref_optional_tj_book_date' => 'Book date', + 'pref_optional_tj_process_date' => 'Processing date', + 'pref_optional_tj_due_date' => 'Due date', + 'pref_optional_tj_payment_date' => 'Payment date', + 'pref_optional_tj_invoice_date' => 'Invoice date', + 'pref_optional_tj_internal_reference' => 'Internal reference', + 'pref_optional_tj_notes' => 'Notes', + 'pref_optional_tj_attachments' => 'Attachments', + 'pref_optional_tj_external_url' => 'External URL', + 'pref_optional_tj_location' => 'Location', + 'pref_optional_tj_links' => 'Transaction links', + 'optional_field_meta_dates' => 'Dates', + 'optional_field_meta_business' => 'Business', + 'optional_field_attachments' => 'Attachments', + 'optional_field_meta_data' => 'Optional meta data', + 'external_url' => 'External URL', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'All your other sessions have been logged out.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Delete ALL your budgets', - 'delete_all_categories' => 'Delete ALL your categories', - 'delete_all_tags' => 'Delete ALL your tags', - 'delete_all_bills' => 'Delete ALL your bills', - 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', - 'delete_all_rules' => 'Delete ALL your rules', - 'delete_all_recurring' => 'Delete ALL your recurring transactions', - 'delete_all_object_groups' => 'Delete ALL your object groups', - 'delete_all_accounts' => 'Delete ALL your accounts', - 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', - 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', - 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', - 'delete_all_liabilities' => 'Delete ALL your liabilities', - 'delete_all_transactions' => 'Delete ALL your transactions', - 'delete_all_withdrawals' => 'Delete ALL your withdrawals', - 'delete_all_deposits' => 'Delete ALL your deposits', - 'delete_all_transfers' => 'Delete ALL your transfers', - 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', - 'deleted_all_budgets' => 'All budgets have been deleted', - 'deleted_all_categories' => 'All categories have been deleted', - 'deleted_all_tags' => 'All tags have been deleted', - 'deleted_all_bills' => 'All bills have been deleted', - 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', - 'deleted_all_rules' => 'All rules and rule groups have been deleted', - 'deleted_all_object_groups' => 'All groups have been deleted', - 'deleted_all_accounts' => 'All accounts have been deleted', - 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', - 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', - 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', - 'deleted_all_liabilities' => 'All liabilities have been deleted', - 'deleted_all_transactions' => 'All transactions have been deleted', - 'deleted_all_withdrawals' => 'All withdrawals have been deleted', - 'deleted_all_deposits' => 'All deposits have been deleted', - 'deleted_all_transfers' => 'All transfers have been deleted', - 'deleted_all_recurring' => 'All recurring transactions have been deleted', - 'change_your_password' => 'Change your password', - 'delete_account' => 'Delete account', - 'current_password' => 'Current password', - 'new_password' => 'New password', - 'new_password_again' => 'New password (again)', - 'delete_your_account' => 'Delete your account', - 'delete_your_account_help' => 'Deleting your account will also delete any accounts, transactions, anything you might have saved into Firefly III. It\'ll be GONE.', - 'delete_your_account_password' => 'Enter your password to continue.', - 'password' => 'Password', - 'are_you_sure' => 'Are you sure? You cannot undo this.', - 'delete_account_button' => 'DELETE your account', - 'invalid_current_password' => 'Invalid current password!', - 'password_changed' => 'Password changed!', - 'should_change' => 'The idea is to change your password.', - 'invalid_password' => 'Invalid password!', - 'what_is_pw_security' => 'What is "verify password security"?', - 'secure_pw_title' => 'How to choose a secure password', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => 'Not a week goes by that you read in the news about a site losing the passwords of its users. Hackers and thieves use these passwords to try to steal your private information. This information is valuable.', - 'secure_pw_ff' => 'Do you use the same password all over the internet? If one site loses your password, hackers have access to all your data. Firefly III relies on you to choose a strong and unique password to protect your financial records.', - 'secure_pw_check_box' => 'To help you do that Firefly III can check if the password you want to use has been stolen in the past. If this is the case, Firefly III advises you NOT to use that password.', - 'secure_pw_working_title' => 'How does it work?', - 'secure_pw_working' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', - 'secure_pw_should' => 'Should I check the box?', - 'secure_pw_long_password' => 'Yes. Always verify your password is safe.', - 'command_line_token' => 'Command line token', - 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', - 'regenerate_command_line_token' => 'Regenerate command line token', - 'token_regenerated' => 'A new command line token was generated', - 'change_your_email' => 'Change your email address', - 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', - 'email_changed_logout' => 'Until you verify your email address, you cannot login.', - 'login_with_new_email' => 'You can now login with your new email address.', - 'login_with_old_email' => 'You can now login with your old email address again.', - 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', - 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', - 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', - 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Clients', - 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Client ID', - 'profile_oauth_client_name' => 'Name', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Create New Client', - 'profile_oauth_create_client' => 'Create Client', - 'profile_oauth_edit_client' => 'Edit Client', - 'profile_oauth_name_help' => 'Something your users will recognize and trust.', - 'profile_oauth_redirect_url' => 'Redirect URL', - 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', - 'profile_authorized_apps' => 'Authorized applications', - 'profile_authorized_clients' => 'Authorized clients', - 'profile_scopes' => 'Scopes', - 'profile_revoke' => 'Revoke', - 'profile_oauth_client_secret_title' => 'Client Secret', - 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', - 'profile_personal_access_tokens' => 'Personal Access Tokens', - 'profile_personal_access_token' => 'Personal Access Token', - 'profile_oauth_confidential' => 'Confidential', - 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', - 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', - 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', - 'profile_create_new_token' => 'Create new token', - 'profile_create_token' => 'Create token', - 'profile_create' => 'Create', - 'profile_save_changes' => 'Save changes', - 'profile_whoops' => 'Whoops!', - 'profile_something_wrong' => 'Something went wrong!', - 'profile_try_again' => 'Something went wrong. Please try again.', - 'amounts' => 'Amounts', - 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', - 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', - 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', - 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'All your other sessions have been logged out.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Delete ALL your budgets', + 'delete_all_categories' => 'Delete ALL your categories', + 'delete_all_tags' => 'Delete ALL your tags', + 'delete_all_bills' => 'Delete ALL your bills', + 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', + 'delete_all_rules' => 'Delete ALL your rules', + 'delete_all_recurring' => 'Delete ALL your recurring transactions', + 'delete_all_object_groups' => 'Delete ALL your object groups', + 'delete_all_accounts' => 'Delete ALL your accounts', + 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', + 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', + 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', + 'delete_all_liabilities' => 'Delete ALL your liabilities', + 'delete_all_transactions' => 'Delete ALL your transactions', + 'delete_all_withdrawals' => 'Delete ALL your withdrawals', + 'delete_all_deposits' => 'Delete ALL your deposits', + 'delete_all_transfers' => 'Delete ALL your transfers', + 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', + 'deleted_all_budgets' => 'All budgets have been deleted', + 'deleted_all_categories' => 'All categories have been deleted', + 'deleted_all_tags' => 'All tags have been deleted', + 'deleted_all_bills' => 'All bills have been deleted', + 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', + 'deleted_all_rules' => 'All rules and rule groups have been deleted', + 'deleted_all_object_groups' => 'All groups have been deleted', + 'deleted_all_accounts' => 'All accounts have been deleted', + 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', + 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', + 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', + 'deleted_all_liabilities' => 'All liabilities have been deleted', + 'deleted_all_transactions' => 'All transactions have been deleted', + 'deleted_all_withdrawals' => 'All withdrawals have been deleted', + 'deleted_all_deposits' => 'All deposits have been deleted', + 'deleted_all_transfers' => 'All transfers have been deleted', + 'deleted_all_recurring' => 'All recurring transactions have been deleted', + 'change_your_password' => 'Change your password', + 'delete_account' => 'Delete account', + 'current_password' => 'Current password', + 'new_password' => 'New password', + 'new_password_again' => 'New password (again)', + 'delete_your_account' => 'Delete your account', + 'delete_your_account_help' => 'Deleting your account will also delete any accounts, transactions, anything you might have saved into Firefly III. It\'ll be GONE.', + 'delete_your_account_password' => 'Enter your password to continue.', + 'password' => 'Password', + 'are_you_sure' => 'Are you sure? You cannot undo this.', + 'delete_account_button' => 'DELETE your account', + 'invalid_current_password' => 'Invalid current password!', + 'password_changed' => 'Password changed!', + 'should_change' => 'The idea is to change your password.', + 'invalid_password' => 'Invalid password!', + 'what_is_pw_security' => 'What is "verify password security"?', + 'secure_pw_title' => 'How to choose a secure password', + 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', + 'secure_pw_history' => 'Not a week goes by that you read in the news about a site losing the passwords of its users. Hackers and thieves use these passwords to try to steal your private information. This information is valuable.', + 'secure_pw_ff' => 'Do you use the same password all over the internet? If one site loses your password, hackers have access to all your data. Firefly III relies on you to choose a strong and unique password to protect your financial records.', + 'secure_pw_check_box' => 'To help you do that Firefly III can check if the password you want to use has been stolen in the past. If this is the case, Firefly III advises you NOT to use that password.', + 'secure_pw_working_title' => 'How does it work?', + 'secure_pw_working' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', + 'secure_pw_should' => 'Should I check the box?', + 'secure_pw_long_password' => 'Yes. Always verify your password is safe.', + 'command_line_token' => 'Command line token', + 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', + 'regenerate_command_line_token' => 'Regenerate command line token', + 'token_regenerated' => 'A new command line token was generated', + 'change_your_email' => 'Change your email address', + 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', + 'email_changed_logout' => 'Until you verify your email address, you cannot login.', + 'login_with_new_email' => 'You can now login with your new email address.', + 'login_with_old_email' => 'You can now login with your old email address again.', + 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', + 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', + 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', + 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Clients', + 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'Client ID', + 'profile_oauth_client_name' => 'Name', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Create New Client', + 'profile_oauth_create_client' => 'Create Client', + 'profile_oauth_edit_client' => 'Edit Client', + 'profile_oauth_name_help' => 'Something your users will recognize and trust.', + 'profile_oauth_redirect_url' => 'Redirect URL', + 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', + 'profile_authorized_apps' => 'Authorized applications', + 'profile_authorized_clients' => 'Authorized clients', + 'profile_scopes' => 'Scopes', + 'profile_revoke' => 'Revoke', + 'profile_oauth_client_secret_title' => 'Client Secret', + 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', + 'profile_personal_access_tokens' => 'Personal Access Tokens', + 'profile_personal_access_token' => 'Personal Access Token', + 'profile_oauth_confidential' => 'Confidential', + 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', + 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', + 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', + 'profile_create_new_token' => 'Create new token', + 'profile_create_token' => 'Create token', + 'profile_create' => 'Create', + 'profile_save_changes' => 'Save changes', + 'profile_whoops' => 'Whoops!', + 'profile_something_wrong' => 'Something went wrong!', + 'profile_try_again' => 'Something went wrong. Please try again.', + 'amounts' => 'Amounts', + 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', + 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', + 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', + 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', // Ignore this comment // export data: - 'export_data_title' => 'Export data from Firefly III', - 'export_data_menu' => 'Export data', - 'export_data_bc' => 'Export data from Firefly III', - 'export_data_main_title' => 'Export data from Firefly III', - 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', - 'export_data_all_transactions' => 'Export all transactions', - 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Export data from Firefly III', + 'export_data_menu' => 'Export data', + 'export_data_bc' => 'Export data from Firefly III', + 'export_data_main_title' => 'Export data from Firefly III', + 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', + 'export_data_all_transactions' => 'Export all transactions', + 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'One attachment|:count attachments', - 'attachments' => 'Attachments', - 'edit_attachment' => 'Edit attachment ":name"', - 'update_attachment' => 'Update attachment', - 'delete_attachment' => 'Delete attachment ":name"', - 'attachment_deleted' => 'Deleted attachment ":name"', - 'liabilities_deleted' => 'Deleted liability ":name"', - 'attachment_updated' => 'Updated attachment ":name"', - 'upload_max_file_size' => 'Maximum file size: :size', - 'list_all_attachments' => 'List of all attachments', + 'nr_of_attachments' => 'One attachment|:count attachments', + 'attachments' => 'Attachments', + 'edit_attachment' => 'Edit attachment ":name"', + 'update_attachment' => 'Update attachment', + 'delete_attachment' => 'Delete attachment ":name"', + 'attachment_deleted' => 'Deleted attachment ":name"', + 'liabilities_deleted' => 'Deleted liability ":name"', + 'attachment_updated' => 'Updated attachment ":name"', + 'upload_max_file_size' => 'Maximum file size: :size', + 'list_all_attachments' => 'List of all attachments', // transaction index - 'title_expenses' => 'Expenses', - 'title_withdrawal' => 'Expenses', - 'title_revenue' => 'Revenue / income', - 'title_deposit' => 'Revenue / income', - 'title_transfer' => 'Transfers', - 'title_transfers' => 'Transfers', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Expenses', + 'title_withdrawal' => 'Expenses', + 'title_revenue' => 'Revenue / income', + 'title_deposit' => 'Revenue / income', + 'title_transfer' => 'Transfers', + 'title_transfers' => 'Transfers', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'This transaction is already a withdrawal', - 'convert_is_already_type_Deposit' => 'This transaction is already a deposit', - 'convert_is_already_type_Transfer' => 'This transaction is already a transfer', - 'convert_to_Withdrawal' => 'Convert ":description" to a withdrawal', - 'convert_to_Deposit' => 'Convert ":description" to a deposit', - 'convert_to_Transfer' => 'Convert ":description" to a transfer', - 'convert_options_WithdrawalDeposit' => 'Convert a withdrawal into a deposit', - 'convert_options_WithdrawalTransfer' => 'Convert a withdrawal into a transfer', - 'convert_options_DepositTransfer' => 'Convert a deposit into a transfer', - 'convert_options_DepositWithdrawal' => 'Convert a deposit into a withdrawal', - 'convert_options_TransferWithdrawal' => 'Convert a transfer into a withdrawal', - 'convert_options_TransferDeposit' => 'Convert a transfer into a deposit', - 'convert_Withdrawal_to_deposit' => 'Convert this withdrawal to a deposit', - 'convert_Withdrawal_to_transfer' => 'Convert this withdrawal to a transfer', - 'convert_Deposit_to_withdrawal' => 'Convert this deposit to a withdrawal', - 'convert_Deposit_to_transfer' => 'Convert this deposit to a transfer', - 'convert_Transfer_to_deposit' => 'Convert this transfer to a deposit', - 'convert_Transfer_to_withdrawal' => 'Convert this transfer to a withdrawal', - 'convert_please_set_revenue_source' => 'Please pick the revenue account where the money will come from.', - 'convert_please_set_asset_destination' => 'Please pick the asset account where the money will go to.', - 'convert_please_set_expense_destination' => 'Please pick the expense account where the money will go to.', - 'convert_please_set_asset_source' => 'Please pick the asset account where the money will come from.', - 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', - 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', - 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal', - 'converted_to_Deposit' => 'The transaction has been converted to a deposit', - 'converted_to_Transfer' => 'The transaction has been converted to a transfer', - 'invalid_convert_selection' => 'The account you have selected is already used in this transaction or does not exist.', - 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', - 'convert_to_withdrawal' => 'Convert to a withdrawal', - 'convert_to_deposit' => 'Convert to a deposit', - 'convert_to_transfer' => 'Convert to a transfer', + 'convert_is_already_type_Withdrawal' => 'This transaction is already a withdrawal', + 'convert_is_already_type_Deposit' => 'This transaction is already a deposit', + 'convert_is_already_type_Transfer' => 'This transaction is already a transfer', + 'convert_to_Withdrawal' => 'Convert ":description" to a withdrawal', + 'convert_to_Deposit' => 'Convert ":description" to a deposit', + 'convert_to_Transfer' => 'Convert ":description" to a transfer', + 'convert_options_WithdrawalDeposit' => 'Convert a withdrawal into a deposit', + 'convert_options_WithdrawalTransfer' => 'Convert a withdrawal into a transfer', + 'convert_options_DepositTransfer' => 'Convert a deposit into a transfer', + 'convert_options_DepositWithdrawal' => 'Convert a deposit into a withdrawal', + 'convert_options_TransferWithdrawal' => 'Convert a transfer into a withdrawal', + 'convert_options_TransferDeposit' => 'Convert a transfer into a deposit', + 'convert_Withdrawal_to_deposit' => 'Convert this withdrawal to a deposit', + 'convert_Withdrawal_to_transfer' => 'Convert this withdrawal to a transfer', + 'convert_Deposit_to_withdrawal' => 'Convert this deposit to a withdrawal', + 'convert_Deposit_to_transfer' => 'Convert this deposit to a transfer', + 'convert_Transfer_to_deposit' => 'Convert this transfer to a deposit', + 'convert_Transfer_to_withdrawal' => 'Convert this transfer to a withdrawal', + 'convert_please_set_revenue_source' => 'Please pick the revenue account where the money will come from.', + 'convert_please_set_asset_destination' => 'Please pick the asset account where the money will go to.', + 'convert_please_set_expense_destination' => 'Please pick the expense account where the money will go to.', + 'convert_please_set_asset_source' => 'Please pick the asset account where the money will come from.', + 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', + 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', + 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', + 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', + 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', + 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', + 'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal', + 'converted_to_Deposit' => 'The transaction has been converted to a deposit', + 'converted_to_Transfer' => 'The transaction has been converted to a transfer', + 'invalid_convert_selection' => 'The account you have selected is already used in this transaction or does not exist.', + 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', + 'convert_to_withdrawal' => 'Convert to a withdrawal', + 'convert_to_deposit' => 'Convert to a deposit', + 'convert_to_transfer' => 'Convert to a transfer', // create new stuff: - 'create_new_withdrawal' => 'Create new withdrawal', - 'create_new_deposit' => 'Create new deposit', - 'create_new_transfer' => 'Create new transfer', - 'create_new_asset' => 'Create new asset account', - 'create_new_liabilities' => 'Create new liability', - 'create_new_expense' => 'Create new expense account', - 'create_new_revenue' => 'Create new revenue account', - 'create_new_piggy_bank' => 'Create new piggy bank', - 'create_new_bill' => 'Create new bill', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Create new withdrawal', + 'create_new_deposit' => 'Create new deposit', + 'create_new_transfer' => 'Create new transfer', + 'create_new_asset' => 'Create new asset account', + 'create_new_liabilities' => 'Create new liability', + 'create_new_expense' => 'Create new expense account', + 'create_new_revenue' => 'Create new revenue account', + 'create_new_piggy_bank' => 'Create new piggy bank', + 'create_new_bill' => 'Create new bill', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Create a new currency', - 'store_currency' => 'Store new currency', - 'update_currency' => 'Update currency', - 'new_default_currency' => ':name is now the default currency.', - 'cannot_delete_currency' => 'Cannot delete :name because it is still in use.', - 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', - 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', - 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', - 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', - 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', - 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', - 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', - 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', - 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', - 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', - 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', - 'deleted_currency' => 'Currency :name deleted', - 'created_currency' => 'Currency :name created', - 'could_not_store_currency' => 'Could not store the new currency.', - 'updated_currency' => 'Currency :name updated', - 'ask_site_owner' => 'Please ask :owner to add, remove or edit currencies.', - 'currencies_intro' => 'Firefly III supports various currencies which you can set and enable here.', - 'make_default_currency' => 'Make default', - 'default_currency' => 'default', - 'currency_is_disabled' => 'Disabled', - 'enable_currency' => 'Enable', - 'disable_currency' => 'Disable', - 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', - 'currency_is_now_enabled' => 'Currency ":name" has been enabled', - 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'create_currency' => 'Create a new currency', + 'store_currency' => 'Store new currency', + 'update_currency' => 'Update currency', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Cannot delete :name because it is still in use.', + 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', + 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', + 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', + 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', + 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', + 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', + 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', + 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', + 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', + 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', + 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', + 'deleted_currency' => 'Currency :name deleted', + 'created_currency' => 'Currency :name created', + 'could_not_store_currency' => 'Could not store the new currency.', + 'updated_currency' => 'Currency :name updated', + 'ask_site_owner' => 'Please ask :owner to add, remove or edit currencies.', + 'currencies_intro' => 'Firefly III supports various currencies which you can set and enable here.', + 'make_default_currency' => 'Make default', + 'default_currency' => 'default', + 'currency_is_disabled' => 'Disabled', + 'enable_currency' => 'Enable', + 'disable_currency' => 'Disable', + 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', + 'currency_is_now_enabled' => 'Currency ":name" has been enabled', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Mandatory fields', - 'optionalFields' => 'Optional fields', - 'options' => 'Options', + 'mandatoryFields' => 'Mandatory fields', + 'optionalFields' => 'Optional fields', + 'options' => 'Options', // budgets: - 'daily_budgets' => 'Daily budgets', - 'weekly_budgets' => 'Weekly budgets', - 'monthly_budgets' => 'Monthly budgets', - 'quarterly_budgets' => 'Quarterly budgets', - 'half_year_budgets' => 'Half-yearly budgets', - 'yearly_budgets' => 'Yearly budgets', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', - 'total_available_budget' => 'Total available budget (between :start and :end)', - 'total_available_budget_in_currency' => 'Total available budget in :currency', - 'see_below' => 'see below', - 'create_new_budget' => 'Create a new budget', - 'store_new_budget' => 'Store new budget', - 'stored_new_budget' => 'Stored new budget ":name"', - 'available_between' => 'Available between :start and :end', - 'transactionsWithoutBudget' => 'Expenses without budget', - 'transactions_no_budget' => 'Expenses without budget between :start and :end', - 'spent_between' => 'Already spent between :start and :end', - 'set_available_amount' => 'Set available amount', - 'update_available_amount' => 'Update available amount', - 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', - 'createBudget' => 'New budget', - 'invalid_currency' => 'This is an invalid currency', - 'invalid_amount' => 'Please enter an amount', - 'set_ab' => 'The available budget amount has been set', - 'updated_ab' => 'The available budget amount has been updated', - 'deleted_ab' => 'The available budget amount has been deleted', - 'deleted_bl' => 'The budgeted amount has been removed', - 'alt_currency_ab_create' => 'Set the available budget in another currency', - 'bl_create_btn' => 'Set budget in another currency', - 'inactiveBudgets' => 'Inactive budgets', - 'without_budget_between' => 'Transactions without a budget between :start and :end', - 'delete_budget' => 'Delete budget ":name"', - 'deleted_budget' => 'Deleted budget ":name"', - 'edit_budget' => 'Edit budget ":name"', - 'updated_budget' => 'Updated budget ":name"', - 'update_amount' => 'Update amount', - 'update_budget' => 'Update budget', - 'update_budget_amount_range' => 'Update (expected) available amount between :start and :end', - 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', - 'set_budget_limit' => 'Set budgeted amount', - 'budget_period_navigator' => 'Period navigator', - 'info_on_available_amount' => 'What do I have available?', - 'available_amount_indication' => 'Use these amounts to get an indication of what your total budget could be.', - 'suggested' => 'Suggested', - 'average_between' => 'Average between :start and :end', - 'transferred_in' => 'Transferred (in)', - 'transferred_away' => 'Transferred (away)', - 'auto_budget_none' => 'No auto-budget', - 'auto_budget_reset' => 'Set a fixed amount every period', - 'auto_budget_rollover' => 'Add an amount every period', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Daily', - 'auto_budget_period_weekly' => 'Weekly', - 'auto_budget_period_monthly' => 'Monthly', - 'auto_budget_period_quarterly' => 'Quarterly', - 'auto_budget_period_half_year' => 'Every half year', - 'auto_budget_period_yearly' => 'Yearly', - 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', - 'auto_budget_reset_icon' => 'This budget will be set periodically', - 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', + 'daily_budgets' => 'Daily budgets', + 'weekly_budgets' => 'Weekly budgets', + 'monthly_budgets' => 'Monthly budgets', + 'quarterly_budgets' => 'Quarterly budgets', + 'half_year_budgets' => 'Half-yearly budgets', + 'yearly_budgets' => 'Yearly budgets', + 'other_budgets' => 'Custom timed budgets', + 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', + 'total_available_budget' => 'Total available budget (between :start and :end)', + 'total_available_budget_in_currency' => 'Total available budget in :currency', + 'see_below' => 'see below', + 'create_new_budget' => 'Create a new budget', + 'store_new_budget' => 'Store new budget', + 'stored_new_budget' => 'Stored new budget ":name"', + 'available_between' => 'Available between :start and :end', + 'transactionsWithoutBudget' => 'Expenses without budget', + 'transactions_no_budget' => 'Expenses without budget between :start and :end', + 'spent_between' => 'Already spent between :start and :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Set available amount', + 'update_available_amount' => 'Update available amount', + 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', + 'createBudget' => 'New budget', + 'invalid_currency' => 'This is an invalid currency', + 'invalid_amount' => 'Please enter an amount', + 'set_ab' => 'The available budget amount has been set', + 'updated_ab' => 'The available budget amount has been updated', + 'deleted_ab' => 'The available budget amount has been deleted', + 'deleted_bl' => 'The budgeted amount has been removed', + 'alt_currency_ab_create' => 'Set the available budget in another currency', + 'bl_create_btn' => 'Set budget in another currency', + 'inactiveBudgets' => 'Inactive budgets', + 'without_budget_between' => 'Transactions without a budget between :start and :end', + 'delete_budget' => 'Delete budget ":name"', + 'deleted_budget' => 'Deleted budget ":name"', + 'edit_budget' => 'Edit budget ":name"', + 'updated_budget' => 'Updated budget ":name"', + 'update_amount' => 'Update amount', + 'update_budget' => 'Update budget', + 'update_budget_amount_range' => 'Update (expected) available amount between :start and :end', + 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', + 'set_budget_limit' => 'Set budgeted amount', + 'budget_period_navigator' => 'Period navigator', + 'info_on_available_amount' => 'What do I have available?', + 'available_amount_indication' => 'Use these amounts to get an indication of what your total budget could be.', + 'suggested' => 'Suggested', + 'average_between' => 'Average between :start and :end', + 'transferred_in' => 'Transferred (in)', + 'transferred_away' => 'Transferred (away)', + 'auto_budget_none' => 'No auto-budget', + 'auto_budget_reset' => 'Set a fixed amount every period', + 'auto_budget_rollover' => 'Add an amount every period', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Daily', + 'auto_budget_period_weekly' => 'Weekly', + 'auto_budget_period_monthly' => 'Monthly', + 'auto_budget_period_quarterly' => 'Quarterly', + 'auto_budget_period_half_year' => 'Every half year', + 'auto_budget_period_yearly' => 'Yearly', + 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', + 'auto_budget_reset_icon' => 'This budget will be set periodically', + 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Not expected this period', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Not (yet)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Bill matches transactions between :low and :high.', - 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', - 'bill_related_rules' => 'Rules related to this bill', - 'repeats' => 'Repeats', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Connected transactions', - 'auto_match_on' => 'Automatically matched by Firefly III', - 'auto_match_off' => 'Not automatically matched by Firefly III', - 'next_expected_match' => 'Next expected match', - 'delete_bill' => 'Delete bill ":name"', - 'deleted_bill' => 'Deleted bill ":name"', - 'edit_bill' => 'Edit bill ":name"', - 'more' => 'More', - 'rescan_old' => 'Run rules again, on all transactions', - 'update_bill' => 'Update bill', - 'updated_bill' => 'Updated bill ":name"', - 'store_new_bill' => 'Store new bill', - 'stored_new_bill' => 'Stored new bill ":name"', - 'cannot_scan_inactive_bill' => 'Inactive bills cannot be scanned.', - 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', - 'average_bill_amount_year' => 'Average bill amount (:year)', - 'average_bill_amount_overall' => 'Average bill amount (overall)', - 'bill_is_active' => 'Bill is active', - 'bill_expected_between' => 'Expected between :start and :end', - 'bill_will_automatch' => 'Bill will automatically linked to matching transactions', - 'skips_over' => 'skips over', - 'bill_store_error' => 'An unexpected error occurred while storing your new bill. Please check the log files', - 'list_inactive_rule' => 'inactive rule', - 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', - 'bill_expected_date' => 'Expected :date', - 'bill_expected_date_js' => 'Expected {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Paid on {date}', - 'bill_repeats_weekly' => 'Repeats weekly', - 'bill_repeats_monthly' => 'Repeats monthly', - 'bill_repeats_quarterly' => 'Repeats quarterly', - 'bill_repeats_half-year' => 'Repeats every half year', - 'bill_repeats_yearly' => 'Repeats yearly', - 'bill_repeats_weekly_other' => 'Repeats every other week', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Repeats yearly', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Subscriptions', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Forever', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Not expected this period', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Not (yet)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Bill matches transactions between :low and :high.', + 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', + 'bill_related_rules' => 'Rules related to this bill', + 'repeats' => 'Repeats', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Connected transactions', + 'auto_match_on' => 'Automatically matched by Firefly III', + 'auto_match_off' => 'Not automatically matched by Firefly III', + 'next_expected_match' => 'Next expected match', + 'delete_bill' => 'Delete bill ":name"', + 'deleted_bill' => 'Deleted bill ":name"', + 'edit_bill' => 'Edit bill ":name"', + 'more' => 'More', + 'rescan_old' => 'Run rules again, on all transactions', + 'update_bill' => 'Update bill', + 'updated_bill' => 'Updated bill ":name"', + 'store_new_bill' => 'Store new bill', + 'stored_new_bill' => 'Stored new bill ":name"', + 'cannot_scan_inactive_bill' => 'Inactive bills cannot be scanned.', + 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', + 'average_bill_amount_year' => 'Average bill amount (:year)', + 'average_bill_amount_overall' => 'Average bill amount (overall)', + 'bill_is_active' => 'Bill is active', + 'bill_expected_between' => 'Expected between :start and :end', + 'bill_will_automatch' => 'Bill will automatically linked to matching transactions', + 'skips_over' => 'skips over', + 'bill_store_error' => 'An unexpected error occurred while storing your new bill. Please check the log files', + 'list_inactive_rule' => 'inactive rule', + 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', + 'bill_expected_date' => 'Expected :date', + 'bill_expected_date_js' => 'Expected {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Paid on {date}', + 'bill_repeats_weekly' => 'Repeats weekly', + 'bill_repeats_monthly' => 'Repeats monthly', + 'bill_repeats_quarterly' => 'Repeats quarterly', + 'bill_repeats_half-year' => 'Repeats every half year', + 'bill_repeats_yearly' => 'Repeats yearly', + 'bill_repeats_weekly_other' => 'Repeats every other week', + 'bill_repeats_monthly_other' => 'Repeats every other month', + 'bill_repeats_quarterly_other' => 'Repeats every other quarter', + 'bill_repeats_half-year_other' => 'Repeats yearly', + 'bill_repeats_yearly_other' => 'Repeats every other year', + 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', + 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', + 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', + 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', + 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', + 'subscriptions' => 'Subscriptions', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Forever', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', - 'all_accounts_inactive' => 'These are your inactive accounts.', - 'active_account_link' => 'This link goes back to your active accounts.', - 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', - 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', - 'details_for_asset' => 'Details for asset account ":name"', - 'details_for_expense' => 'Details for expense account ":name"', - 'details_for_revenue' => 'Details for revenue account ":name"', - 'details_for_cash' => 'Details for cash account ":name"', - 'store_new_asset_account' => 'Store new asset account', - 'store_new_expense_account' => 'Store new expense account', - 'store_new_revenue_account' => 'Store new revenue account', - 'edit_asset_account' => 'Edit asset account ":name"', - 'edit_expense_account' => 'Edit expense account ":name"', - 'edit_revenue_account' => 'Edit revenue account ":name"', - 'delete_asset_account' => 'Delete asset account ":name"', - 'delete_expense_account' => 'Delete expense account ":name"', - 'delete_revenue_account' => 'Delete revenue account ":name"', - 'delete_liabilities_account' => 'Delete liability ":name"', - 'asset_deleted' => 'Successfully deleted asset account ":name"', - 'account_deleted' => 'Successfully deleted account ":name"', - 'expense_deleted' => 'Successfully deleted expense account ":name"', - 'revenue_deleted' => 'Successfully deleted revenue account ":name"', - 'update_asset_account' => 'Update asset account', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => 'Update liability', - 'update_expense_account' => 'Update expense account', - 'update_revenue_account' => 'Update revenue account', - 'make_new_asset_account' => 'Create a new asset account', - 'make_new_expense_account' => 'Create a new expense account', - 'make_new_revenue_account' => 'Create a new revenue account', - 'make_new_liabilities_account' => 'Create a new liability', - 'asset_accounts' => 'Asset accounts', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Asset accounts (inactive)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Expense accounts', - 'expense_accounts_inactive' => 'Expense accounts (inactive)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Revenue accounts', - 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', - 'cash_accounts' => 'Cash accounts', - 'Cash account' => 'Cash account', - 'liabilities_accounts' => 'Liabilities', - 'liabilities_accounts_inactive' => 'Liabilities (inactive)', - 'reconcile_account' => 'Reconcile account ":account"', - 'overview_of_reconcile_modal' => 'Overview of reconciliation', - 'delete_reconciliation' => 'Delete reconciliation', - 'update_reconciliation' => 'Update reconciliation', - 'amount_cannot_be_zero' => 'The amount cannot be zero', - 'end_of_reconcile_period' => 'End of reconcile period: :period', - 'start_of_reconcile_period' => 'Start of reconcile period: :period', - 'start_balance' => 'Start balance', - 'end_balance' => 'End balance', - 'update_balance_dates_instruction' => 'Match the amounts and dates above to your bank statement, and press "Start reconciling"', - 'select_transactions_instruction' => 'Select the transactions that appear on your bank statement.', - 'select_range_and_balance' => 'First verify the date-range and balances. Then press "Start reconciling"', - 'date_change_instruction' => 'If you change the date range now, any progress will be lost.', - 'update_selection' => 'Update selection', - 'store_reconcile' => 'Store reconciliation', - 'reconciliation_transaction' => 'Reconciliation transaction', - 'Reconciliation' => 'Reconciliation', - 'reconciliation' => 'Reconciliation', - 'reconcile_options' => 'Reconciliation options', - 'reconcile_range' => 'Reconciliation range', - 'start_reconcile' => 'Start reconciling', - 'cash_account_type' => 'Cash', - 'cash' => 'cash', - 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', - 'account_type' => 'Account type', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'New account ":name" stored!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => 'Updated account ":name"', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Credit card options', - 'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".', - 'no_transactions_period' => 'There are no transactions (in this period).', - 'no_data_for_chart' => 'There is not enough information (yet) to generate this chart.', - 'select_at_least_one_account' => 'Please select at least one asset account', - 'select_at_least_one_category' => 'Please select at least one category', - 'select_at_least_one_budget' => 'Please select at least one budget', - 'select_at_least_one_tag' => 'Please select at least one tag', - 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', - 'account_default_currency' => 'This will be the default currency associated with this account.', - 'reconcile_has_more' => 'Your Firefly III ledger has more money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', - 'reconcile_has_less' => 'Your Firefly III ledger has less money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', - 'reconcile_is_equal' => 'Your Firefly III ledger and your bank statements match. There is nothing to do. Please press "Confirm reconciliation" to confirm your input.', - 'create_pos_reconcile_transaction' => 'Clear the selected transactions, and create a correction adding :amount to this asset account.', - 'create_neg_reconcile_transaction' => 'Clear the selected transactions, and create a correction removing :amount from this asset account.', - 'reconcile_do_nothing' => 'Clear the selected transactions, but do not correct.', - 'reconcile_go_back' => 'You can always edit or delete a correction later.', - 'must_be_asset_account' => 'You can only reconcile asset accounts', - 'reconciliation_stored' => 'Reconciliation stored', - 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', - 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', - 'sum_of_reconciliation' => 'Sum of reconciliation', - 'reconcile_this_account' => 'Reconcile this account', - 'reconcile' => 'Reconcile', - 'show' => 'Show', - 'confirm_reconciliation' => 'Confirm reconciliation', - 'submitted_start_balance' => 'Submitted start balance', - 'selected_transactions' => 'Selected transactions (:count)', - 'already_cleared_transactions' => 'Already cleared transactions (:count)', - 'submitted_end_balance' => 'Submitted end balance', - 'initial_balance_description' => 'Initial balance for ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'unknown', - 'interest_calc_daily' => 'Per day', - 'interest_calc_monthly' => 'Per month', - 'interest_calc_yearly' => 'Per year', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half year', - 'interest_calc_quarterly' => 'Per quarter', - 'initial_balance_account' => 'Initial balance account of :account', - 'list_options' => 'List options', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', + 'all_accounts_inactive' => 'These are your inactive accounts.', + 'active_account_link' => 'This link goes back to your active accounts.', + 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', + 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', + 'details_for_asset' => 'Details for asset account ":name"', + 'details_for_expense' => 'Details for expense account ":name"', + 'details_for_revenue' => 'Details for revenue account ":name"', + 'details_for_cash' => 'Details for cash account ":name"', + 'store_new_asset_account' => 'Store new asset account', + 'store_new_expense_account' => 'Store new expense account', + 'store_new_revenue_account' => 'Store new revenue account', + 'edit_asset_account' => 'Edit asset account ":name"', + 'edit_expense_account' => 'Edit expense account ":name"', + 'edit_revenue_account' => 'Edit revenue account ":name"', + 'delete_asset_account' => 'Delete asset account ":name"', + 'delete_expense_account' => 'Delete expense account ":name"', + 'delete_revenue_account' => 'Delete revenue account ":name"', + 'delete_liabilities_account' => 'Delete liability ":name"', + 'asset_deleted' => 'Successfully deleted asset account ":name"', + 'account_deleted' => 'Successfully deleted account ":name"', + 'expense_deleted' => 'Successfully deleted expense account ":name"', + 'revenue_deleted' => 'Successfully deleted revenue account ":name"', + 'update_asset_account' => 'Update asset account', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => 'Update liability', + 'update_expense_account' => 'Update expense account', + 'update_revenue_account' => 'Update revenue account', + 'make_new_asset_account' => 'Create a new asset account', + 'make_new_expense_account' => 'Create a new expense account', + 'make_new_revenue_account' => 'Create a new revenue account', + 'make_new_liabilities_account' => 'Create a new liability', + 'asset_accounts' => 'Asset accounts', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Asset accounts (inactive)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Expense accounts', + 'expense_accounts_inactive' => 'Expense accounts (inactive)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Revenue accounts', + 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', + 'cash_accounts' => 'Cash accounts', + 'Cash account' => 'Cash account', + 'liabilities_accounts' => 'Liabilities', + 'liabilities_accounts_inactive' => 'Liabilities (inactive)', + 'reconcile_account' => 'Reconcile account ":account"', + 'overview_of_reconcile_modal' => 'Overview of reconciliation', + 'delete_reconciliation' => 'Delete reconciliation', + 'update_reconciliation' => 'Update reconciliation', + 'amount_cannot_be_zero' => 'The amount cannot be zero', + 'end_of_reconcile_period' => 'End of reconcile period: :period', + 'start_of_reconcile_period' => 'Start of reconcile period: :period', + 'start_balance' => 'Start balance', + 'end_balance' => 'End balance', + 'update_balance_dates_instruction' => 'Match the amounts and dates above to your bank statement, and press "Start reconciling"', + 'select_transactions_instruction' => 'Select the transactions that appear on your bank statement.', + 'select_range_and_balance' => 'First verify the date-range and balances. Then press "Start reconciling"', + 'date_change_instruction' => 'If you change the date range now, any progress will be lost.', + 'update_selection' => 'Update selection', + 'store_reconcile' => 'Store reconciliation', + 'reconciliation_transaction' => 'Reconciliation transaction', + 'Reconciliation' => 'Reconciliation', + 'reconciliation' => 'Reconciliation', + 'reconcile_options' => 'Reconciliation options', + 'reconcile_range' => 'Reconciliation range', + 'start_reconcile' => 'Start reconciling', + 'cash_account_type' => 'Cash', + 'cash' => 'cash', + 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', + 'account_type' => 'Account type', + 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => 'New account ":name" stored!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => 'Updated account ":name"', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Credit card options', + 'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".', + 'no_transactions_period' => 'There are no transactions (in this period).', + 'no_data_for_chart' => 'There is not enough information (yet) to generate this chart.', + 'select_at_least_one_account' => 'Please select at least one asset account', + 'select_at_least_one_category' => 'Please select at least one category', + 'select_at_least_one_budget' => 'Please select at least one budget', + 'select_at_least_one_tag' => 'Please select at least one tag', + 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', + 'account_default_currency' => 'This will be the default currency associated with this account.', + 'reconcile_has_more' => 'Your Firefly III ledger has more money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', + 'reconcile_has_less' => 'Your Firefly III ledger has less money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', + 'reconcile_is_equal' => 'Your Firefly III ledger and your bank statements match. There is nothing to do. Please press "Confirm reconciliation" to confirm your input.', + 'create_pos_reconcile_transaction' => 'Clear the selected transactions, and create a correction adding :amount to this asset account.', + 'create_neg_reconcile_transaction' => 'Clear the selected transactions, and create a correction removing :amount from this asset account.', + 'reconcile_do_nothing' => 'Clear the selected transactions, but do not correct.', + 'reconcile_go_back' => 'You can always edit or delete a correction later.', + 'must_be_asset_account' => 'You can only reconcile asset accounts', + 'reconciliation_stored' => 'Reconciliation stored', + 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', + 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', + 'sum_of_reconciliation' => 'Sum of reconciliation', + 'reconcile_this_account' => 'Reconcile this account', + 'reconcile' => 'Reconcile', + 'show' => 'Show', + 'confirm_reconciliation' => 'Confirm reconciliation', + 'submitted_start_balance' => 'Submitted start balance', + 'selected_transactions' => 'Selected transactions (:count)', + 'already_cleared_transactions' => 'Already cleared transactions (:count)', + 'submitted_end_balance' => 'Submitted end balance', + 'initial_balance_description' => 'Initial balance for ":account"', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'unknown', + 'interest_calc_daily' => 'Per day', + 'interest_calc_monthly' => 'Per month', + 'interest_calc_yearly' => 'Per year', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half year', + 'interest_calc_quarterly' => 'Per quarter', + 'initial_balance_account' => 'Initial balance account of :account', + 'list_options' => 'List options', // categories: - 'new_category' => 'New category', - 'create_new_category' => 'Create a new category', - 'without_category' => 'Without a category', - 'update_category' => 'Update category', - 'updated_category' => 'Updated category ":name"', - 'categories' => 'Categories', - 'edit_category' => 'Edit category ":name"', - 'no_category' => '(no category)', - 'unknown_category_plain' => 'No category', - 'category' => 'Category', - 'delete_category' => 'Delete category ":name"', - 'deleted_category' => 'Deleted category ":name"', - 'store_category' => 'Store new category', - 'stored_category' => 'Stored new category ":name"', - 'without_category_between' => 'Without category between :start and :end', + 'new_category' => 'New category', + 'create_new_category' => 'Create a new category', + 'without_category' => 'Without a category', + 'update_category' => 'Update category', + 'updated_category' => 'Updated category ":name"', + 'categories' => 'Categories', + 'edit_category' => 'Edit category ":name"', + 'no_category' => '(no category)', + 'unknown_category_plain' => 'No category', + 'category' => 'Category', + 'delete_category' => 'Delete category ":name"', + 'deleted_category' => 'Deleted category ":name"', + 'store_category' => 'Store new category', + 'stored_category' => 'Stored new category ":name"', + 'without_category_between' => 'Without category between :start and :end', // Ignore this comment // transactions: - 'update_withdrawal' => 'Update withdrawal', - 'update_deposit' => 'Update deposit', - 'update_transaction' => 'Update transaction', - 'update_transfer' => 'Update transfer', - 'updated_withdrawal' => 'Updated withdrawal ":description"', - 'updated_deposit' => 'Updated deposit ":description"', - 'updated_transfer' => 'Updated transfer ":description"', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => 'Delete withdrawal ":description"', - 'delete_deposit' => 'Delete deposit ":description"', - 'delete_transfer' => 'Delete transfer ":description"', - 'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"', - 'deleted_deposit' => 'Successfully deleted deposit ":description"', - 'deleted_transfer' => 'Successfully deleted transfer ":description"', - 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', - 'stored_journal' => 'Successfully created new transaction ":description"', - 'stored_journal_no_descr' => 'Successfully created your new transaction', - 'updated_journal_no_descr' => 'Successfully updated your transaction', - 'select_transactions' => 'Select transactions', - 'rule_group_select_transactions' => 'Apply ":title" to transactions', - 'rule_select_transactions' => 'Apply ":title" to transactions', - 'stop_selection' => 'Stop selecting transactions', - 'reconcile_selected' => 'Reconcile', - 'mass_delete_journals' => 'Delete a number of transactions', - 'mass_edit_journals' => 'Edit a number of transactions', - 'mass_bulk_journals' => 'Bulk edit a number of transactions', - 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', - 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', - 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', - 'no_bulk_category' => 'Don\'t update category', - 'no_bulk_budget' => 'Don\'t update budget', - 'no_bulk_tags' => 'Don\'t update tag(s)', - 'replace_with_these_tags' => 'Replace with these tags', - 'append_these_tags' => 'Add these tags', - 'mass_edit' => 'Edit selected individually', - 'bulk_edit' => 'Edit selected in bulk', - 'mass_delete' => 'Delete selected', - 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', - 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', - 'no_budget' => '(no budget)', - 'no_bill' => '(no bill)', - 'account_per_budget' => 'Account per budget', - 'account_per_category' => 'Account per category', - 'create_new_object' => 'Create', - 'empty' => '(empty)', - 'all_other_budgets' => '(all other budgets)', - 'all_other_accounts' => '(all other accounts)', - 'expense_per_source_account' => 'Expenses per source account', - 'expense_per_destination_account' => 'Expenses per destination account', - 'income_per_destination_account' => 'Income per destination account', - 'spent_in_specific_category' => 'Spent in category ":category"', - 'earned_in_specific_category' => 'Earned in category ":category"', - 'spent_in_specific_tag' => 'Spent in tag ":tag"', - 'earned_in_specific_tag' => 'Earned in tag ":tag"', - 'income_per_source_account' => 'Income per source account', - 'average_spending_per_destination' => 'Average expense per destination account', - 'average_spending_per_source' => 'Average expense per source account', - 'average_earning_per_source' => 'Average earning per source account', - 'average_earning_per_destination' => 'Average earning per destination account', - 'account_per_tag' => 'Account per tag', - 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', - 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', - 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', - 'tag' => 'Tag', - 'no_budget_squared' => '(no budget)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(no account type)', - 'opt_group_no_account_type' => '(no account type)', - 'opt_group_defaultAsset' => 'Default asset accounts', - 'opt_group_savingAsset' => 'Savings accounts', - 'opt_group_sharedAsset' => 'Shared asset accounts', - 'opt_group_ccAsset' => 'Credit cards', - 'opt_group_cashWalletAsset' => 'Cash wallets', - 'opt_group_expense_account' => 'Expense accounts', - 'opt_group_revenue_account' => 'Revenue accounts', - 'opt_group_l_Loan' => 'Liability: Loan', - 'opt_group_cash_account' => 'Cash account', - 'opt_group_l_Debt' => 'Liability: Debt', - 'opt_group_l_Mortgage' => 'Liability: Mortgage', - 'opt_group_l_Credit card' => 'Liability: Credit card', - 'notes' => 'Notes', - 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.', - 'attachment_not_found' => 'This attachment could not be found.', - 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', - 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', - 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Update withdrawal', + 'update_deposit' => 'Update deposit', + 'update_transaction' => 'Update transaction', + 'update_transfer' => 'Update transfer', + 'updated_withdrawal' => 'Updated withdrawal ":description"', + 'updated_deposit' => 'Updated deposit ":description"', + 'updated_transfer' => 'Updated transfer ":description"', + 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', + 'no_changes_deposit' => 'Deposit ":description" was not changed.', + 'no_changes_transfer' => 'Transfer ":description" was not changed.', + 'delete_withdrawal' => 'Delete withdrawal ":description"', + 'delete_deposit' => 'Delete deposit ":description"', + 'delete_transfer' => 'Delete transfer ":description"', + 'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"', + 'deleted_deposit' => 'Successfully deleted deposit ":description"', + 'deleted_transfer' => 'Successfully deleted transfer ":description"', + 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', + 'stored_journal' => 'Successfully created new transaction ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Successfully created your new transaction', + 'updated_journal_no_descr' => 'Successfully updated your transaction', + 'select_transactions' => 'Select transactions', + 'rule_group_select_transactions' => 'Apply ":title" to transactions', + 'rule_select_transactions' => 'Apply ":title" to transactions', + 'stop_selection' => 'Stop selecting transactions', + 'reconcile_selected' => 'Reconcile', + 'mass_delete_journals' => 'Delete a number of transactions', + 'mass_edit_journals' => 'Edit a number of transactions', + 'mass_bulk_journals' => 'Bulk edit a number of transactions', + 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', + 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', + 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', + 'no_bulk_category' => 'Don\'t update category', + 'no_bulk_budget' => 'Don\'t update budget', + 'no_bulk_tags' => 'Don\'t update tag(s)', + 'replace_with_these_tags' => 'Replace with these tags', + 'append_these_tags' => 'Add these tags', + 'mass_edit' => 'Edit selected individually', + 'bulk_edit' => 'Edit selected in bulk', + 'mass_delete' => 'Delete selected', + 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', + 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', + 'no_budget' => '(no budget)', + 'no_bill' => '(no bill)', + 'account_per_budget' => 'Account per budget', + 'account_per_category' => 'Account per category', + 'create_new_object' => 'Create', + 'empty' => '(empty)', + 'all_other_budgets' => '(all other budgets)', + 'all_other_accounts' => '(all other accounts)', + 'expense_per_source_account' => 'Expenses per source account', + 'expense_per_destination_account' => 'Expenses per destination account', + 'income_per_destination_account' => 'Income per destination account', + 'spent_in_specific_category' => 'Spent in category ":category"', + 'earned_in_specific_category' => 'Earned in category ":category"', + 'spent_in_specific_tag' => 'Spent in tag ":tag"', + 'earned_in_specific_tag' => 'Earned in tag ":tag"', + 'income_per_source_account' => 'Income per source account', + 'average_spending_per_destination' => 'Average expense per destination account', + 'average_spending_per_source' => 'Average expense per source account', + 'average_earning_per_source' => 'Average earning per source account', + 'average_earning_per_destination' => 'Average earning per destination account', + 'account_per_tag' => 'Account per tag', + 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', + 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', + 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', + 'tag' => 'Tag', + 'no_budget_squared' => '(no budget)', + 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', + 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', + 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', + 'opt_group_' => '(no account type)', + 'opt_group_no_account_type' => '(no account type)', + 'opt_group_defaultAsset' => 'Default asset accounts', + 'opt_group_savingAsset' => 'Savings accounts', + 'opt_group_sharedAsset' => 'Shared asset accounts', + 'opt_group_ccAsset' => 'Credit cards', + 'opt_group_cashWalletAsset' => 'Cash wallets', + 'opt_group_expense_account' => 'Expense accounts', + 'opt_group_revenue_account' => 'Revenue accounts', + 'opt_group_l_Loan' => 'Liability: Loan', + 'opt_group_cash_account' => 'Cash account', + 'opt_group_l_Debt' => 'Liability: Debt', + 'opt_group_l_Mortgage' => 'Liability: Mortgage', + 'opt_group_l_Credit card' => 'Liability: Credit card', + 'notes' => 'Notes', + 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.', + 'attachment_not_found' => 'This attachment could not be found.', + 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', + 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', + 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => 'Welcome to Firefly III!', - 'submit' => 'Submit', - 'submission' => 'Submission', - 'submit_yes_really' => 'Submit (I know what I\'m doing)', - 'getting_started' => 'Getting started', - 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main checking account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', - 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', - 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', - 'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.', - 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', - 'language' => 'Language', - 'new_savings_account' => ':bank_name savings account', - 'cash_wallet' => 'Cash wallet', - 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', + 'welcome' => 'Welcome to Firefly III!', + 'submit' => 'Submit', + 'submission' => 'Submission', + 'submit_yes_really' => 'Submit (I know what I\'m doing)', + 'getting_started' => 'Getting started', + 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main checking account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', + 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', + 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', + 'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.', + 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', + 'language' => 'Language', + 'new_savings_account' => ':bank_name savings account', + 'cash_wallet' => 'Cash wallet', + 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', // home page: - 'transaction_table_description' => 'A table containing your transactions', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => 'Your accounts', - 'your_accounts' => 'Your account overview', - 'category_overview' => 'Category overview', - 'expense_overview' => 'Expense account overview', - 'revenue_overview' => 'Revenue account overview', - 'budgetsAndSpending' => 'Budgets and spending', - 'budgets_and_spending' => 'Budgets and spending', - 'go_to_budget' => 'Go to budget "{budget}"', - 'go_to_deposits' => 'Go to deposits', - 'go_to_expenses' => 'Go to expenses', - 'savings' => 'Savings', - 'newWithdrawal' => 'New expense', - 'newDeposit' => 'New deposit', - 'newTransfer' => 'New transfer', - 'bills_to_pay' => 'Bills to pay', - 'per_day' => 'Per day', - 'left_to_spend_per_day' => 'Left to spend per day', - 'bills_paid' => 'Bills paid', - 'custom_period' => 'Custom period', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Select a period', + 'transaction_table_description' => 'A table containing your transactions', + 'opposing_account' => 'Opposing account', + 'yourAccounts' => 'Your accounts', + 'your_accounts' => 'Your account overview', + 'category_overview' => 'Category overview', + 'expense_overview' => 'Expense account overview', + 'revenue_overview' => 'Revenue account overview', + 'budgetsAndSpending' => 'Budgets and spending', + 'budgets_and_spending' => 'Budgets and spending', + 'go_to_budget' => 'Go to budget "{budget}"', + 'go_to_deposits' => 'Go to deposits', + 'go_to_expenses' => 'Go to expenses', + 'savings' => 'Savings', + 'newWithdrawal' => 'New expense', + 'newDeposit' => 'New deposit', + 'newTransfer' => 'New transfer', + 'bills_to_pay' => 'Bills to pay', + 'per_day' => 'Per day', + 'left_to_spend_per_day' => 'Left to spend per day', + 'bills_paid' => 'Bills paid', + 'custom_period' => 'Custom period', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Select a period', // menu and titles, should be recycled as often as possible: - 'currency' => 'Currency', - 'preferences' => 'Preferences', - 'logout' => 'Logout', - 'logout_other_sessions' => 'Logout all other sessions', - 'toggleNavigation' => 'Toggle navigation', - 'searchPlaceholder' => 'Search...', - 'version' => 'Version', - 'dashboard' => 'Dashboard', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Available budget ({currency})', - 'currencies' => 'Currencies', - 'activity' => 'Activity', - 'usage' => 'Usage', - 'accounts' => 'Accounts', - 'Asset account' => 'Asset account', - 'Default account' => 'Asset account', - 'Expense account' => 'Expense account', - 'Revenue account' => 'Revenue account', - 'Initial balance account' => 'Initial balance account', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Debt', - 'account_type_Loan' => 'Loan', - 'account_type_Mortgage' => 'Mortgage', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Credit card', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Budgets', - 'tags' => 'Tags', - 'reports' => 'Reports', - 'transactions' => 'Transactions', - 'expenses' => 'Expenses', - 'income' => 'Revenue / income', - 'transfers' => 'Transfers', - 'moneyManagement' => 'Money management', - 'money_management' => 'Money management', - 'tools' => 'Tools', - 'piggyBanks' => 'Piggy banks', - 'piggy_banks' => 'Piggy banks', - 'amount_x_of_y' => '{current} of {total}', - 'bills' => 'Bills', - 'withdrawal' => 'Withdrawal', - 'opening_balance' => 'Opening balance', - 'deposit' => 'Deposit', - 'account' => 'Account', - 'transfer' => 'Transfer', - 'Withdrawal' => 'Withdrawal', - 'Deposit' => 'Deposit', - 'Transfer' => 'Transfer', - 'bill' => 'Bill', - 'yes' => 'Yes', - 'no' => 'No', - 'amount' => 'Amount', - 'overview' => 'Overview', - 'saveOnAccount' => 'Save on account', - 'unknown' => 'Unknown', - 'monthly' => 'Monthly', - 'profile' => 'Profile', - 'errors' => 'Errors', - 'debt_start_date' => 'Start date of debt', - 'debt_start_amount' => 'Start amount of debt', - 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', - 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', - 'store_new_liabilities_account' => 'Store new liability', - 'edit_liabilities_account' => 'Edit liability ":name"', - 'financial_control' => 'Financial control', - 'accounting' => 'Accounting', - 'automation' => 'Automation', - 'others' => 'Others', - 'classification' => 'Classification', - 'store_transaction' => 'Store transaction', + 'currency' => 'Currency', + 'preferences' => 'Preferences', + 'logout' => 'Logout', + 'logout_other_sessions' => 'Logout all other sessions', + 'toggleNavigation' => 'Toggle navigation', + 'searchPlaceholder' => 'Search...', + 'version' => 'Version', + 'dashboard' => 'Dashboard', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Available budget ({currency})', + 'currencies' => 'Currencies', + 'activity' => 'Activity', + 'usage' => 'Usage', + 'accounts' => 'Accounts', + 'Asset account' => 'Asset account', + 'Default account' => 'Asset account', + 'Expense account' => 'Expense account', + 'Revenue account' => 'Revenue account', + 'Initial balance account' => 'Initial balance account', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Debt', + 'account_type_Loan' => 'Loan', + 'account_type_Mortgage' => 'Mortgage', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Credit card', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'I am owed this debt', + 'liability_direction_debit' => 'I owe this debt to somebody else', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Budgets', + 'tags' => 'Tags', + 'reports' => 'Reports', + 'transactions' => 'Transactions', + 'expenses' => 'Expenses', + 'income' => 'Revenue / income', + 'transfers' => 'Transfers', + 'moneyManagement' => 'Money management', + 'money_management' => 'Money management', + 'tools' => 'Tools', + 'piggyBanks' => 'Piggy banks', + 'piggy_banks' => 'Piggy banks', + 'amount_x_of_y' => '{current} of {total}', + 'bills' => 'Bills', + 'withdrawal' => 'Withdrawal', + 'opening_balance' => 'Opening balance', + 'deposit' => 'Deposit', + 'account' => 'Account', + 'transfer' => 'Transfer', + 'Withdrawal' => 'Withdrawal', + 'Deposit' => 'Deposit', + 'Transfer' => 'Transfer', + 'bill' => 'Bill', + 'yes' => 'Yes', + 'no' => 'No', + 'amount' => 'Amount', + 'overview' => 'Overview', + 'saveOnAccount' => 'Save on account', + 'unknown' => 'Unknown', + 'monthly' => 'Monthly', + 'profile' => 'Profile', + 'errors' => 'Errors', + 'debt_start_date' => 'Start date of debt', + 'debt_start_amount' => 'Start amount of debt', + 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', + 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', + 'store_new_liabilities_account' => 'Store new liability', + 'edit_liabilities_account' => 'Edit liability ":name"', + 'financial_control' => 'Financial control', + 'accounting' => 'Accounting', + 'automation' => 'Automation', + 'others' => 'Others', + 'classification' => 'Classification', + 'store_transaction' => 'Store transaction', // Ignore this comment // reports: - 'report_default' => 'Default financial report between :start and :end', - 'report_audit' => 'Transaction history overview between :start and :end', - 'report_category' => 'Category report between :start and :end', - 'report_double' => 'Expense/revenue account report between :start and :end', - 'report_budget' => 'Budget report between :start and :end', - 'report_tag' => 'Tag report between :start and :end', - 'quick_link_reports' => 'Quick links', - 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', - 'quick_link_default_report' => 'Default financial report', - 'quick_link_audit_report' => 'Transaction history overview', - 'report_this_month_quick' => 'Current month, all accounts', - 'report_last_month_quick' => 'Last month, all accounts', - 'report_this_year_quick' => 'Current year, all accounts', - 'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts', - 'report_all_time_quick' => 'All-time, all accounts', - 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', - 'incomeVsExpenses' => 'Income vs. expenses', - 'accountBalances' => 'Account balances', - 'balanceStart' => 'Balance at start of period', - 'balanceEnd' => 'Balance at end of period', - 'splitByAccount' => 'Split by account', - 'coveredWithTags' => 'Covered with tags', - 'leftInBudget' => 'Left in budget', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Sum of sums', - 'noCategory' => '(no category)', - 'notCharged' => 'Not charged (yet)', - 'inactive' => 'Inactive', - 'active' => 'Active', - 'difference' => 'Difference', - 'money_flowing_in' => 'In', - 'money_flowing_out' => 'Out', - 'topX' => 'top :number', - 'show_full_list' => 'Show entire list', - 'show_only_top' => 'Show only top :number', - 'report_type' => 'Report type', - 'report_type_default' => 'Default financial report', - 'report_type_audit' => 'Transaction history overview (audit)', - 'report_type_category' => 'Category report', - 'report_type_budget' => 'Budget report', - 'report_type_tag' => 'Tag report', - 'report_type_double' => 'Expense/revenue account report', - 'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.', - 'report_included_accounts' => 'Included accounts', - 'report_date_range' => 'Date range', - 'report_preset_ranges' => 'Pre-set ranges', - 'shared' => 'Shared', - 'fiscal_year' => 'Fiscal year', - 'income_entry' => 'Income from account ":name" between :start and :end', - 'expense_entry' => 'Expenses to account ":name" between :start and :end', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => 'Expenses in budget ":budget" between :start and :end', - 'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end', - 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', - 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', - 'reports_extra_options' => 'Extra options', - 'report_has_no_extra_options' => 'This report has no extra options', - 'reports_submit' => 'View report', - 'end_after_start_date' => 'End date of report must be after start date.', - 'select_category' => 'Select category(ies)', - 'select_budget' => 'Select budget(s).', - 'select_tag' => 'Select tag(s).', - 'income_per_category' => 'Income per category', - 'expense_per_category' => 'Expense per category', - 'expense_per_budget' => 'Expense per budget', - 'income_per_account' => 'Income per account', - 'expense_per_account' => 'Expense per account', - 'expense_per_tag' => 'Expense per tag', - 'income_per_tag' => 'Income per tag', - 'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)', - 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', - 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', - 'include_income_not_in_category' => 'Included income not in the selected category(ies)', - 'include_income_not_in_account' => 'Included income not in the selected account(s)', - 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', - 'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)', - 'everything_else' => 'Everything else', - 'income_and_expenses' => 'Income and expenses', - 'spent_average' => 'Spent (average)', - 'income_average' => 'Income (average)', - 'transaction_count' => 'Transaction count', - 'average_spending_per_account' => 'Average spending per account', - 'average_income_per_account' => 'Average income per account', - 'total' => 'Total', - 'description' => 'Description', - 'sum_of_period' => 'Sum of period', - 'average_in_period' => 'Average in period', - 'account_role_defaultAsset' => 'Default asset account', - 'account_role_sharedAsset' => 'Shared asset account', - 'account_role_savingAsset' => 'Savings account', - 'account_role_ccAsset' => 'Credit card', - 'account_role_cashWalletAsset' => 'Cash wallet', - 'budget_chart_click' => 'Please click on a budget name in the table above to see a chart.', - 'category_chart_click' => 'Please click on a category name in the table above to see a chart.', - 'in_out_accounts' => 'Earned and spent per combination', - 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', - 'in_out_per_category' => 'Earned and spent per category', - 'out_per_budget' => 'Spent per budget', - 'select_expense_revenue' => 'Select expense/revenue account', - 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', - 'sum_in_default_currency' => 'The sum will always be in your default currency.', - 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', + 'report_default' => 'Default financial report between :start and :end', + 'report_audit' => 'Transaction history overview between :start and :end', + 'report_category' => 'Category report between :start and :end', + 'report_double' => 'Expense/revenue account report between :start and :end', + 'report_budget' => 'Budget report between :start and :end', + 'report_tag' => 'Tag report between :start and :end', + 'quick_link_reports' => 'Quick links', + 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', + 'quick_link_default_report' => 'Default financial report', + 'quick_link_audit_report' => 'Transaction history overview', + 'report_this_month_quick' => 'Current month, all accounts', + 'report_last_month_quick' => 'Last month, all accounts', + 'report_this_year_quick' => 'Current year, all accounts', + 'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts', + 'report_all_time_quick' => 'All-time, all accounts', + 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', + 'incomeVsExpenses' => 'Income vs. expenses', + 'accountBalances' => 'Account balances', + 'balanceStart' => 'Balance at start of period', + 'balanceEnd' => 'Balance at end of period', + 'splitByAccount' => 'Split by account', + 'coveredWithTags' => 'Covered with tags', + 'leftInBudget' => 'Left in budget', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Sum of sums', + 'noCategory' => '(no category)', + 'notCharged' => 'Not charged (yet)', + 'inactive' => 'Inactive', + 'active' => 'Active', + 'difference' => 'Difference', + 'money_flowing_in' => 'In', + 'money_flowing_out' => 'Out', + 'topX' => 'top :number', + 'show_full_list' => 'Show entire list', + 'show_only_top' => 'Show only top :number', + 'report_type' => 'Report type', + 'report_type_default' => 'Default financial report', + 'report_type_audit' => 'Transaction history overview (audit)', + 'report_type_category' => 'Category report', + 'report_type_budget' => 'Budget report', + 'report_type_tag' => 'Tag report', + 'report_type_double' => 'Expense/revenue account report', + 'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.', + 'report_included_accounts' => 'Included accounts', + 'report_date_range' => 'Date range', + 'report_preset_ranges' => 'Pre-set ranges', + 'shared' => 'Shared', + 'fiscal_year' => 'Fiscal year', + 'income_entry' => 'Income from account ":name" between :start and :end', + 'expense_entry' => 'Expenses to account ":name" between :start and :end', + 'category_entry' => 'Expenses and income in category ":name" between :start and :end', + 'budget_spent_amount' => 'Expenses in budget ":budget" between :start and :end', + 'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end', + 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', + 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', + 'reports_extra_options' => 'Extra options', + 'report_has_no_extra_options' => 'This report has no extra options', + 'reports_submit' => 'View report', + 'end_after_start_date' => 'End date of report must be after start date.', + 'select_category' => 'Select category(ies)', + 'select_budget' => 'Select budget(s).', + 'select_tag' => 'Select tag(s).', + 'income_per_category' => 'Income per category', + 'expense_per_category' => 'Expense per category', + 'expense_per_budget' => 'Expense per budget', + 'income_per_account' => 'Income per account', + 'expense_per_account' => 'Expense per account', + 'expense_per_tag' => 'Expense per tag', + 'income_per_tag' => 'Income per tag', + 'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)', + 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', + 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', + 'include_income_not_in_category' => 'Included income not in the selected category(ies)', + 'include_income_not_in_account' => 'Included income not in the selected account(s)', + 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', + 'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)', + 'everything_else' => 'Everything else', + 'income_and_expenses' => 'Income and expenses', + 'spent_average' => 'Spent (average)', + 'income_average' => 'Income (average)', + 'transaction_count' => 'Transaction count', + 'average_spending_per_account' => 'Average spending per account', + 'average_income_per_account' => 'Average income per account', + 'total' => 'Total', + 'description' => 'Description', + 'sum_of_period' => 'Sum of period', + 'average_in_period' => 'Average in period', + 'account_role_defaultAsset' => 'Default asset account', + 'account_role_sharedAsset' => 'Shared asset account', + 'account_role_savingAsset' => 'Savings account', + 'account_role_ccAsset' => 'Credit card', + 'account_role_cashWalletAsset' => 'Cash wallet', + 'budget_chart_click' => 'Please click on a budget name in the table above to see a chart.', + 'category_chart_click' => 'Please click on a category name in the table above to see a chart.', + 'in_out_accounts' => 'Earned and spent per combination', + 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', + 'in_out_per_category' => 'Earned and spent per category', + 'out_per_budget' => 'Spent per budget', + 'select_expense_revenue' => 'Select expense/revenue account', + 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', + 'sum_in_default_currency' => 'The sum will always be in your default currency.', + 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', // Ignore this comment // charts: - 'chart' => 'Chart', - 'month' => 'Month', - 'budget' => 'Budget', - 'spent' => 'Spent', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => 'Spent in budget', - 'left_to_spend' => 'Left to spend', - 'earned' => 'Earned', - 'overspent' => 'Overspent', - 'left' => 'Left', - 'max-amount' => 'Maximum amount', - 'min-amount' => 'Minimum amount', - 'journal-amount' => 'Current bill entry', - 'name' => 'Name', - 'date' => 'Date', - 'date_and_time' => 'Date and time', - 'time' => 'Time', - 'paid' => 'Paid', - 'unpaid' => 'Unpaid', - 'day' => 'Day', - 'budgeted' => 'Budgeted', - 'period' => 'Period', - 'balance' => 'Balance', - 'in_out_period' => 'In + out this period', - 'sum' => 'Sum', - 'summary' => 'Summary', - 'average' => 'Average', - 'balanceFor' => 'Balance for :name', - 'no_tags' => '(no tags)', + 'chart' => 'Chart', + 'month' => 'Month', + 'budget' => 'Budget', + 'spent' => 'Spent', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => 'Spent in budget', + 'left_to_spend' => 'Left to spend', + 'earned' => 'Earned', + 'overspent' => 'Overspent', + 'left' => 'Left', + 'max-amount' => 'Maximum amount', + 'min-amount' => 'Minimum amount', + 'journal-amount' => 'Current bill entry', + 'name' => 'Name', + 'date' => 'Date', + 'date_and_time' => 'Date and time', + 'time' => 'Time', + 'paid' => 'Paid', + 'unpaid' => 'Unpaid', + 'day' => 'Day', + 'budgeted' => 'Budgeted', + 'period' => 'Period', + 'balance' => 'Balance', + 'in_out_period' => 'In + out this period', + 'sum' => 'Sum', + 'summary' => 'Summary', + 'average' => 'Average', + 'balanceFor' => 'Balance for :name', + 'no_tags' => '(no tags)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Add money to piggy bank ":name"', - 'piggy_bank' => 'Piggy bank', - 'new_piggy_bank' => 'New piggy bank', - 'store_piggy_bank' => 'Store new piggy bank', - 'stored_piggy_bank' => 'Store new piggy bank ":name"', - 'account_status' => 'Account status', - 'left_for_piggy_banks' => 'Left for piggy banks', - 'sum_of_piggy_banks' => 'Sum of piggy banks', - 'saved_so_far' => 'Saved so far', - 'left_to_save' => 'Left to save', - 'suggested_amount' => 'Suggested monthly amount to save', - 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', - 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', - 'add' => 'Add', - 'no_money_for_piggy' => 'You have no money to put in this piggy bank.', - 'suggested_savings_per_month' => 'Suggested per month', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Add money to piggy bank ":name"', + 'piggy_bank' => 'Piggy bank', + 'new_piggy_bank' => 'New piggy bank', + 'store_piggy_bank' => 'Store new piggy bank', + 'stored_piggy_bank' => 'Store new piggy bank ":name"', + 'account_status' => 'Account status', + 'left_for_piggy_banks' => 'Left for piggy banks', + 'sum_of_piggy_banks' => 'Sum of piggy banks', + 'saved_so_far' => 'Saved so far', + 'left_to_save' => 'Left to save', + 'suggested_amount' => 'Suggested monthly amount to save', + 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', + 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', + 'add' => 'Add', + 'no_money_for_piggy' => 'You have no money to put in this piggy bank.', + 'suggested_savings_per_month' => 'Suggested per month', - 'remove' => 'Remove', - 'max_amount_add' => 'The maximum amount you can add is', - 'max_amount_remove' => 'The maximum amount you can remove is', - 'update_piggy_button' => 'Update piggy bank', - 'update_piggy_title' => 'Update piggy bank ":name"', - 'updated_piggy_bank' => 'Updated piggy bank ":name"', - 'details' => 'Details', - 'events' => 'Events', - 'target_amount' => 'Target amount', - 'start_date' => 'Start date', - 'no_start_date' => 'No start date', - 'target_date' => 'Target date', - 'no_target_date' => 'No target date', - 'table' => 'Table', - 'delete_piggy_bank' => 'Delete piggy bank ":name"', - 'cannot_add_amount_piggy' => 'Could not add :amount to ":name".', - 'cannot_remove_from_piggy' => 'Could not remove :amount from ":name".', - 'deleted_piggy_bank' => 'Deleted piggy bank ":name"', - 'added_amount_to_piggy' => 'Added :amount to ":name"', - 'removed_amount_from_piggy' => 'Removed :amount from ":name"', - 'piggy_events' => 'Related piggy banks', + 'remove' => 'Remove', + 'max_amount_add' => 'The maximum amount you can add is', + 'max_amount_remove' => 'The maximum amount you can remove is', + 'update_piggy_button' => 'Update piggy bank', + 'update_piggy_title' => 'Update piggy bank ":name"', + 'updated_piggy_bank' => 'Updated piggy bank ":name"', + 'details' => 'Details', + 'events' => 'Events', + 'target_amount' => 'Target amount', + 'start_date' => 'Start date', + 'no_start_date' => 'No start date', + 'target_date' => 'Target date', + 'no_target_date' => 'No target date', + 'table' => 'Table', + 'delete_piggy_bank' => 'Delete piggy bank ":name"', + 'cannot_add_amount_piggy' => 'Could not add :amount to ":name".', + 'cannot_remove_from_piggy' => 'Could not remove :amount from ":name".', + 'deleted_piggy_bank' => 'Deleted piggy bank ":name"', + 'added_amount_to_piggy' => 'Added :amount to ":name"', + 'removed_amount_from_piggy' => 'Removed :amount from ":name"', + 'piggy_events' => 'Related piggy banks', // tags - 'delete_tag' => 'Delete tag ":tag"', - 'deleted_tag' => 'Deleted tag ":tag"', - 'new_tag' => 'Make new tag', - 'edit_tag' => 'Edit tag ":tag"', - 'updated_tag' => 'Updated tag ":tag"', - 'created_tag' => 'Tag ":tag" has been created!', + 'delete_tag' => 'Delete tag ":tag"', + 'deleted_tag' => 'Deleted tag ":tag"', + 'new_tag' => 'Make new tag', + 'edit_tag' => 'Edit tag ":tag"', + 'updated_tag' => 'Updated tag ":tag"', + 'created_tag' => 'Tag ":tag" has been created!', - 'transaction_journal_information' => 'Transaction information', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta information', - 'transaction_journal_more' => 'More information', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Stored under ":journal"', - 'total_amount' => 'Total amount', - 'number_of_decimals' => 'Number of decimals', + 'transaction_journal_information' => 'Transaction information', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Meta information', + 'transaction_journal_more' => 'More information', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => 'Stored under ":journal"', + 'total_amount' => 'Total amount', + 'number_of_decimals' => 'Number of decimals', // Ignore this comment // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Administration', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'User administration', - 'list_all_users' => 'All users', - 'all_users' => 'All users', - 'instance_configuration' => 'Configuration', - 'firefly_instance_configuration' => 'Configuration options for Firefly III', - 'setting_single_user_mode' => 'Single user mode', - 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', - 'store_configuration' => 'Store configuration', - 'single_user_administration' => 'User administration for :email', - 'edit_user' => 'Edit user :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'User data', - 'user_information' => 'User information', - 'total_size' => 'total size', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'The configuration has been updated', - 'setting_is_demo_site' => 'Demo site', - 'setting_is_demo_site_explain' => 'If you check this box, this installation will behave as if it is the demo site, which can have weird side effects.', - 'block_code_bounced' => 'Email message(s) bounced', - 'block_code_expired' => 'Demo account expired', - 'no_block_code' => 'No reason for block or user not blocked', - 'block_code_email_changed' => 'User has not yet confirmed new email address', - 'admin_update_email' => 'Contrary to the profile page, the user will NOT be notified their email address has changed!', - 'update_user' => 'Update user', - 'updated_user' => 'User data has been changed.', - 'delete_user' => 'Delete user :email', - 'user_deleted' => 'The user has been deleted', - 'send_test_email' => 'Send test email message', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Send message', - 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', - 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', - 'admin_maintanance_title' => 'Maintenance', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Clear cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Description of the split transaction', - 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'you_create_transfer' => 'You\'re creating a transfer.', - 'you_create_withdrawal' => 'You\'re creating a withdrawal.', - 'you_create_deposit' => 'You\'re creating a deposit.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Administration', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'User administration', + 'list_all_users' => 'All users', + 'all_users' => 'All users', + 'instance_configuration' => 'Configuration', + 'firefly_instance_configuration' => 'Configuration options for Firefly III', + 'setting_single_user_mode' => 'Single user mode', + 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', + 'store_configuration' => 'Store configuration', + 'single_user_administration' => 'User administration for :email', + 'edit_user' => 'Edit user :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'User data', + 'user_information' => 'User information', + 'total_size' => 'total size', + 'budget_or_budgets' => ':count budget|:count budgets', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'The configuration has been updated', + 'setting_is_demo_site' => 'Demo site', + 'setting_is_demo_site_explain' => 'If you check this box, this installation will behave as if it is the demo site, which can have weird side effects.', + 'block_code_bounced' => 'Email message(s) bounced', + 'block_code_expired' => 'Demo account expired', + 'no_block_code' => 'No reason for block or user not blocked', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'User has not yet confirmed new email address', + 'admin_update_email' => 'Contrary to the profile page, the user will NOT be notified their email address has changed!', + 'update_user' => 'Update user', + 'updated_user' => 'User data has been changed.', + 'delete_user' => 'Delete user :email', + 'user_deleted' => 'The user has been deleted', + 'send_test_email' => 'Send test email message', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Send message', + 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', + 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', + 'admin_maintanance_title' => 'Maintenance', + 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', + 'admin_maintenance_clear_cache' => 'Clear cache', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Description of the split transaction', + 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'you_create_transfer' => 'You\'re creating a transfer.', + 'you_create_withdrawal' => 'You\'re creating a withdrawal.', + 'you_create_deposit' => 'You\'re creating a deposit.', // links - 'journal_link_configuration' => 'Transaction links configuration', - 'create_new_link_type' => 'Create new link type', - 'store_new_link_type' => 'Store new link type', - 'update_link_type' => 'Update link type', - 'edit_link_type' => 'Edit link type ":name"', - 'updated_link_type' => 'Updated link type ":name"', - 'delete_link_type' => 'Delete link type ":name"', - 'deleted_link_type' => 'Deleted link type ":name"', - 'stored_new_link_type' => 'Store new link type ":name"', - 'cannot_edit_link_type' => 'Cannot edit link type ":name"', - 'link_type_help_name' => 'Ie. "Duplicates"', - 'link_type_help_inward' => 'Ie. "duplicates"', - 'link_type_help_outward' => 'Ie. "is duplicated by"', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(do not save connection)', - 'link_transaction' => 'Link transaction', - 'link_to_other_transaction' => 'Link this transaction to another transaction', - 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', - 'this_transaction' => 'This transaction', - 'transaction' => 'Transaction', - 'comments' => 'Comments', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Cannot link these transactions', - 'selected_transaction' => 'Selected transaction', - 'journals_linked' => 'Transactions are linked.', - 'journals_error_linked' => 'These transactions are already linked.', - 'journals_link_to_self' => 'You cannot link a transaction to itself', - 'journal_links' => 'Transaction links', - 'this_withdrawal' => 'This withdrawal', - 'this_deposit' => 'This deposit', - 'this_transfer' => 'This transfer', - 'overview_for_link' => 'Overview for link type ":name"', - 'source_transaction' => 'Source transaction', - 'link_description' => 'Link description', - 'destination_transaction' => 'Destination transaction', - 'delete_journal_link' => 'Delete the link between :source and :destination', - 'deleted_link' => 'Deleted link', + 'journal_link_configuration' => 'Transaction links configuration', + 'create_new_link_type' => 'Create new link type', + 'store_new_link_type' => 'Store new link type', + 'update_link_type' => 'Update link type', + 'edit_link_type' => 'Edit link type ":name"', + 'updated_link_type' => 'Updated link type ":name"', + 'delete_link_type' => 'Delete link type ":name"', + 'deleted_link_type' => 'Deleted link type ":name"', + 'stored_new_link_type' => 'Store new link type ":name"', + 'cannot_edit_link_type' => 'Cannot edit link type ":name"', + 'link_type_help_name' => 'Ie. "Duplicates"', + 'link_type_help_inward' => 'Ie. "duplicates"', + 'link_type_help_outward' => 'Ie. "is duplicated by"', + 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', + 'do_not_save_connection' => '(do not save connection)', + 'link_transaction' => 'Link transaction', + 'link_to_other_transaction' => 'Link this transaction to another transaction', + 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', + 'this_transaction' => 'This transaction', + 'transaction' => 'Transaction', + 'comments' => 'Comments', + 'link_notes' => 'Any notes you wish to store with the link.', + 'invalid_link_selection' => 'Cannot link these transactions', + 'selected_transaction' => 'Selected transaction', + 'journals_linked' => 'Transactions are linked.', + 'journals_error_linked' => 'These transactions are already linked.', + 'journals_link_to_self' => 'You cannot link a transaction to itself', + 'journal_links' => 'Transaction links', + 'this_withdrawal' => 'This withdrawal', + 'this_deposit' => 'This deposit', + 'this_transfer' => 'This transfer', + 'overview_for_link' => 'Overview for link type ":name"', + 'source_transaction' => 'Source transaction', + 'link_description' => 'Link description', + 'destination_transaction' => 'Destination transaction', + 'delete_journal_link' => 'Delete the link between :source and :destination', + 'deleted_link' => 'Deleted link', // link translations: - 'Paid_name' => 'Paid', - 'Refund_name' => 'Refund', - 'Reimbursement_name' => 'Reimbursement', - 'Related_name' => 'Related', - 'relates to_inward' => 'relates to', - 'is (partially) refunded by_inward' => 'is (partially) refunded by', - 'is (partially) paid for by_inward' => 'is (partially) paid for by', - 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', - 'inward_transaction' => 'Inward transaction', - 'outward_transaction' => 'Outward transaction', - 'relates to_outward' => 'relates to', - '(partially) refunds_outward' => '(partially) refunds', - '(partially) pays for_outward' => '(partially) pays for', - '(partially) reimburses_outward' => '(partially) reimburses', - 'is (partially) refunded by' => 'is (partially) refunded by', - 'is (partially) paid for by' => 'is (partially) paid for by', - 'is (partially) reimbursed by' => 'is (partially) reimbursed by', - 'relates to' => 'relates to', - '(partially) refunds' => '(partially) refunds', - '(partially) pays for' => '(partially) pays for', - '(partially) reimburses' => '(partially) reimburses', + 'Paid_name' => 'Paid', + 'Refund_name' => 'Refund', + 'Reimbursement_name' => 'Reimbursement', + 'Related_name' => 'Related', + 'relates to_inward' => 'relates to', + 'is (partially) refunded by_inward' => 'is (partially) refunded by', + 'is (partially) paid for by_inward' => 'is (partially) paid for by', + 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', + 'inward_transaction' => 'Inward transaction', + 'outward_transaction' => 'Outward transaction', + 'relates to_outward' => 'relates to', + '(partially) refunds_outward' => '(partially) refunds', + '(partially) pays for_outward' => '(partially) pays for', + '(partially) reimburses_outward' => '(partially) reimburses', + 'is (partially) refunded by' => 'is (partially) refunded by', + 'is (partially) paid for by' => 'is (partially) paid for by', + 'is (partially) reimbursed by' => 'is (partially) reimbursed by', + 'relates to' => 'relates to', + '(partially) refunds' => '(partially) refunds', + '(partially) pays for' => '(partially) pays for', + '(partially) reimburses' => '(partially) reimburses', // split a transaction: - 'splits' => 'Splits', - 'add_another_split' => 'Add another split', - 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', - 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', - 'breadcrumb_convert_group' => 'Convert transaction', - 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', - 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', - 'create_another' => 'After storing, return here to create another one.', - 'after_update_create_another' => 'After updating, return here to continue editing.', - 'store_as_new' => 'Store as a new transaction instead of updating.', - 'reset_after' => 'Reset form after submission', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Splits', + 'add_another_split' => 'Add another split', + 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', + 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', + 'breadcrumb_convert_group' => 'Convert transaction', + 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', + 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', + 'create_another' => 'After storing, return here to create another one.', + 'after_update_create_another' => 'After updating, return here to continue editing.', + 'store_as_new' => 'Store as a new transaction instead of updating.', + 'reset_after' => 'Reset form after submission', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(ungrouped)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ungrouped)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Let\'s create an asset account!', - 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.', - 'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:', - 'no_accounts_create_asset' => 'Create an asset account', - 'no_accounts_title_expense' => 'Let\'s create an expense account!', - 'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.', - 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_expense' => 'Create an expense account', - 'no_accounts_title_revenue' => 'Let\'s create a revenue account!', - 'no_accounts_intro_revenue' => 'You have no revenue accounts yet. Revenue accounts are the places where you receive money from, such as your employer.', - 'no_accounts_imperative_revenue' => 'Revenue accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_revenue' => 'Create a revenue account', - 'no_accounts_title_liabilities' => 'Let\'s create a liability!', - 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', - 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', - 'no_accounts_create_liabilities' => 'Create a liability', - 'no_budgets_title_default' => 'Let\'s create a budget', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Budgets are the basic tools of financial management. Let\'s create one now:', - 'no_budgets_create_default' => 'Create a budget', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Let\'s create a category!', - 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', - 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_categories_create_default' => 'Create a category', - 'no_tags_title_default' => 'Let\'s create a tag!', - 'no_tags_intro_default' => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.', - 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_tags_create_default' => 'Create a tag', - 'no_transactions_title_withdrawal' => 'Let\'s create an expense!', - 'no_transactions_intro_withdrawal' => 'You have no expenses yet. You should create expenses to start managing your finances.', - 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', - 'no_transactions_create_withdrawal' => 'Create an expense', - 'no_transactions_title_deposit' => 'Let\'s create some income!', - 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', - 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', - 'no_transactions_create_deposit' => 'Create a deposit', - 'no_transactions_title_transfers' => 'Let\'s create a transfer!', - 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', - 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', - 'no_transactions_create_transfers' => 'Create a transfer', - 'no_piggies_title_default' => 'Let\'s create a piggy bank!', - 'no_piggies_intro_default' => 'You have no piggy banks yet. You can create piggy banks to divide your savings and keep track of what you\'re saving up for.', - 'no_piggies_imperative_default' => 'Do you have things you\'re saving money for? Create a piggy bank and keep track:', - 'no_piggies_create_default' => 'Create a new piggy bank', - 'no_bills_title_default' => 'Let\'s create a bill!', - 'no_bills_intro_default' => 'You have no bills yet. You can create bills to keep track of regular expenses, like your rent or insurance.', - 'no_bills_imperative_default' => 'Do you have such regular bills? Create a bill and keep track of your payments:', - 'no_bills_create_default' => 'Create a bill', + 'no_accounts_title_asset' => 'Let\'s create an asset account!', + 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.', + 'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:', + 'no_accounts_create_asset' => 'Create an asset account', + 'no_accounts_title_expense' => 'Let\'s create an expense account!', + 'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.', + 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_expense' => 'Create an expense account', + 'no_accounts_title_revenue' => 'Let\'s create a revenue account!', + 'no_accounts_intro_revenue' => 'You have no revenue accounts yet. Revenue accounts are the places where you receive money from, such as your employer.', + 'no_accounts_imperative_revenue' => 'Revenue accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_revenue' => 'Create a revenue account', + 'no_accounts_title_liabilities' => 'Let\'s create a liability!', + 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', + 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', + 'no_accounts_create_liabilities' => 'Create a liability', + 'no_budgets_title_default' => 'Let\'s create a budget', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Budgets are the basic tools of financial management. Let\'s create one now:', + 'no_budgets_create_default' => 'Create a budget', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Let\'s create a category!', + 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', + 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_categories_create_default' => 'Create a category', + 'no_tags_title_default' => 'Let\'s create a tag!', + 'no_tags_intro_default' => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.', + 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_tags_create_default' => 'Create a tag', + 'no_transactions_title_withdrawal' => 'Let\'s create an expense!', + 'no_transactions_intro_withdrawal' => 'You have no expenses yet. You should create expenses to start managing your finances.', + 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', + 'no_transactions_create_withdrawal' => 'Create an expense', + 'no_transactions_title_deposit' => 'Let\'s create some income!', + 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', + 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', + 'no_transactions_create_deposit' => 'Create a deposit', + 'no_transactions_title_transfers' => 'Let\'s create a transfer!', + 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', + 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', + 'no_transactions_create_transfers' => 'Create a transfer', + 'no_piggies_title_default' => 'Let\'s create a piggy bank!', + 'no_piggies_intro_default' => 'You have no piggy banks yet. You can create piggy banks to divide your savings and keep track of what you\'re saving up for.', + 'no_piggies_imperative_default' => 'Do you have things you\'re saving money for? Create a piggy bank and keep track:', + 'no_piggies_create_default' => 'Create a new piggy bank', + 'no_bills_title_default' => 'Let\'s create a bill!', + 'no_bills_intro_default' => 'You have no bills yet. You can create bills to keep track of regular expenses, like your rent or insurance.', + 'no_bills_imperative_default' => 'Do you have such regular bills? Create a bill and keep track of your payments:', + 'no_bills_create_default' => 'Create a bill', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Recurring transactions', - 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', - 'recurring_calendar_view' => 'Calendar', - 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', - 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', - 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', - 'no_recurring_create_default' => 'Create a recurring transaction', - 'make_new_recurring' => 'Create a recurring transaction', - 'recurring_daily' => 'Every day', - 'recurring_weekly' => 'Every week on :weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => 'Every year on :date', - 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', - 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', - 'created_transactions' => 'Related transactions', - 'expected_withdrawals' => 'Expected withdrawals', - 'expected_deposits' => 'Expected deposits', - 'expected_transfers' => 'Expected transfers', - 'created_withdrawals' => 'Created withdrawals', - 'created_deposits' => 'Created deposits', - 'created_transfers' => 'Created transfers', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', - 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Recurring transactions', + 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', + 'recurring_calendar_view' => 'Calendar', + 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', + 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', + 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', + 'no_recurring_create_default' => 'Create a recurring transaction', + 'make_new_recurring' => 'Create a recurring transaction', + 'recurring_daily' => 'Every day', + 'recurring_weekly' => 'Every week on :weekday', + 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', + 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => 'Every year on :date', + 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', + 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', + 'created_transactions' => 'Related transactions', + 'expected_withdrawals' => 'Expected withdrawals', + 'expected_deposits' => 'Expected deposits', + 'expected_transfers' => 'Expected transfers', + 'created_withdrawals' => 'Created withdrawals', + 'created_deposits' => 'Created deposits', + 'created_transfers' => 'Created transfers', + 'recurring_info' => 'Recurring transaction :count / :total', + 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', + 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'create_new_recurrence' => 'Create new recurring transaction', - 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', - 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', - 'no_currency' => '(no currency)', - 'mandatory_for_recurring' => 'Mandatory recurrence information', - 'mandatory_for_transaction' => 'Mandatory transaction information', - 'optional_for_recurring' => 'Optional recurrence information', - 'optional_for_transaction' => 'Optional transaction information', - 'change_date_other_options' => 'Change the "first date" to see more options.', - 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', - 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', - 'repeat_forever' => 'Repeat forever', - 'repeat_until_date' => 'Repeat until date', - 'repeat_times' => 'Repeat a number of times', - 'recurring_skips_one' => 'Every other', - 'recurring_skips_more' => 'Skips :count occurrences', - 'store_new_recurrence' => 'Store recurring transaction', - 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', - 'edit_recurrence' => 'Edit recurring transaction ":title"', - 'recurring_repeats_until' => 'Repeats until :date', - 'recurring_repeats_forever' => 'Repeats forever', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Update recurring transaction', - 'updated_recurrence' => 'Updated recurring transaction ":title"', - 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', - 'delete_recurring' => 'Delete recurring transaction ":title"', - 'new_recurring_transaction' => 'New recurring transaction', - 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', - 'do_nothing' => 'Just create the transaction', - 'skip_transaction' => 'Skip the occurrence', - 'jump_to_friday' => 'Create the transaction on the previous Friday instead', - 'jump_to_monday' => 'Create the transaction on the next Monday instead', - 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', - 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', - 'except_weekends' => 'Except weekends', - 'recurrence_deleted' => 'Recurring transaction ":title" deleted', + 'create_new_recurrence' => 'Create new recurring transaction', + 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', + 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', + 'no_currency' => '(no currency)', + 'mandatory_for_recurring' => 'Mandatory recurrence information', + 'mandatory_for_transaction' => 'Mandatory transaction information', + 'optional_for_recurring' => 'Optional recurrence information', + 'optional_for_transaction' => 'Optional transaction information', + 'change_date_other_options' => 'Change the "first date" to see more options.', + 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', + 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', + 'repeat_forever' => 'Repeat forever', + 'repeat_until_date' => 'Repeat until date', + 'repeat_times' => 'Repeat a number of times', + 'recurring_skips_one' => 'Every other', + 'recurring_skips_more' => 'Skips :count occurrences', + 'store_new_recurrence' => 'Store recurring transaction', + 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', + 'edit_recurrence' => 'Edit recurring transaction ":title"', + 'recurring_repeats_until' => 'Repeats until :date', + 'recurring_repeats_forever' => 'Repeats forever', + 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', + 'update_recurrence' => 'Update recurring transaction', + 'updated_recurrence' => 'Updated recurring transaction ":title"', + 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', + 'delete_recurring' => 'Delete recurring transaction ":title"', + 'new_recurring_transaction' => 'New recurring transaction', + 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', + 'do_nothing' => 'Just create the transaction', + 'skip_transaction' => 'Skip the occurrence', + 'jump_to_friday' => 'Create the transaction on the previous Friday instead', + 'jump_to_monday' => 'Create the transaction on the next Monday instead', + 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', + 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', + 'except_weekends' => 'Except weekends', + 'recurrence_deleted' => 'Recurring transaction ":title" deleted', // Ignore this comment // new lines for summary controller. - 'box_balance_in_currency' => 'Balance (:currency)', - 'box_spent_in_currency' => 'Spent (:currency)', - 'box_earned_in_currency' => 'Earned (:currency)', - 'box_budgeted_in_currency' => 'Budgeted (:currency)', - 'box_bill_paid_in_currency' => 'Bills paid (:currency)', - 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', - 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', - 'box_net_worth_in_currency' => 'Net worth (:currency)', - 'box_spend_per_day' => 'Left to spend per day: :amount', + 'box_balance_in_currency' => 'Balance (:currency)', + 'box_spent_in_currency' => 'Spent (:currency)', + 'box_earned_in_currency' => 'Earned (:currency)', + 'box_budgeted_in_currency' => 'Budgeted (:currency)', + 'box_bill_paid_in_currency' => 'Bills paid (:currency)', + 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', + 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', + 'box_net_worth_in_currency' => 'Net worth (:currency)', + 'box_spend_per_day' => 'Left to spend per day: :amount', // debug page - 'debug_page' => 'Debug page', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Debug page', + 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', + 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', + 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', // object groups - 'object_groups_menu_bar' => 'Groups', - 'object_groups_page_title' => 'Groups', - 'object_groups_breadcrumb' => 'Groups', - 'object_groups_index' => 'Overview', - 'object_groups' => 'Groups', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Title', - 'edit_object_group' => 'Edit group ":title"', - 'delete_object_group' => 'Delete group ":title"', - 'update_object_group' => 'Update group', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Group', + 'object_groups_menu_bar' => 'Groups', + 'object_groups_page_title' => 'Groups', + 'object_groups_breadcrumb' => 'Groups', + 'object_groups_index' => 'Overview', + 'object_groups' => 'Groups', + 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', + 'object_group_title' => 'Title', + 'edit_object_group' => 'Edit group ":title"', + 'delete_object_group' => 'Delete group ":title"', + 'update_object_group' => 'Update group', + 'updated_object_group' => 'Successfully updated group ":title"', + 'deleted_object_group' => 'Successfully deleted group ":title"', + 'object_group' => 'Group', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; // Ignore this comment diff --git a/resources/lang/en_US/form.php b/resources/lang/en_US/form.php index aba89c31b7..6fd9115e2d 100644 --- a/resources/lang/en_US/form.php +++ b/resources/lang/en_US/form.php @@ -26,44 +26,44 @@ declare(strict_types=1); return [ // new user: - 'bank_name' => 'Bank name', - 'bank_balance' => 'Balance', - 'savings_balance' => 'Savings balance', - 'credit_card_limit' => 'Credit card limit', - 'automatch' => 'Match automatically', - 'skip' => 'Skip', - 'enabled' => 'Enabled', - 'name' => 'Name', - 'active' => 'Active', - 'amount_min' => 'Minimum amount', - 'amount_max' => 'Maximum amount', - 'match' => 'Matches on', - 'strict' => 'Strict mode', - 'repeat_freq' => 'Repeats', - 'object_group' => 'Group', - 'location' => 'Location', - 'update_channel' => 'Update channel', - 'currency_id' => 'Currency', - 'transaction_currency_id' => 'Currency', - 'auto_budget_currency_id' => 'Currency', - 'external_ip' => 'Your server\'s external IP', - 'attachments' => 'Attachments', - 'BIC' => 'BIC', - 'verify_password' => 'Verify password security', - 'source_account' => 'Source account', - 'destination_account' => 'Destination account', - 'asset_destination_account' => 'Destination account', - 'include_net_worth' => 'Include in net worth', - 'asset_source_account' => 'Source account', - 'journal_description' => 'Description', - 'note' => 'Notes', - 'currency' => 'Currency', - 'account_id' => 'Asset account', - 'budget_id' => 'Budget', - 'bill_id' => 'Bill', - 'opening_balance' => 'Opening balance', - 'tagMode' => 'Tag mode', - 'virtual_balance' => 'Virtual balance', + 'bank_name' => 'Bank name', + 'bank_balance' => 'Balance', + 'savings_balance' => 'Savings balance', + 'credit_card_limit' => 'Credit card limit', + 'automatch' => 'Match automatically', + 'skip' => 'Skip', + 'enabled' => 'Enabled', + 'name' => 'Name', + 'active' => 'Active', + 'amount_min' => 'Minimum amount', + 'amount_max' => 'Maximum amount', + 'match' => 'Matches on', + 'strict' => 'Strict mode', + 'repeat_freq' => 'Repeats', + 'object_group' => 'Group', + 'location' => 'Location', + 'update_channel' => 'Update channel', + 'currency_id' => 'Currency', + 'transaction_currency_id' => 'Currency', + 'auto_budget_currency_id' => 'Currency', + 'external_ip' => 'Your server\'s external IP', + 'attachments' => 'Attachments', + 'BIC' => 'BIC', + 'verify_password' => 'Verify password security', + 'source_account' => 'Source account', + 'destination_account' => 'Destination account', + 'asset_destination_account' => 'Destination account', + 'include_net_worth' => 'Include in net worth', + 'asset_source_account' => 'Source account', + 'journal_description' => 'Description', + 'note' => 'Notes', + 'currency' => 'Currency', + 'account_id' => 'Asset account', + 'budget_id' => 'Budget', + 'bill_id' => 'Bill', + 'opening_balance' => 'Opening balance', + 'tagMode' => 'Tag mode', + 'virtual_balance' => 'Virtual balance', // Ignore this comment @@ -200,7 +200,6 @@ return [ 'album' => 'Album', 'song' => 'Song', - // admin 'domain' => 'Domain', 'single_user_mode' => 'Disable user registration', @@ -228,40 +227,40 @@ return [ // Ignore this comment - 'from_date' => 'Date from', - 'to_date' => 'Date to', - 'due_date' => 'Due date', - 'payment_date' => 'Payment date', - 'invoice_date' => 'Invoice date', - 'internal_reference' => 'Internal reference', - 'inward' => 'Inward description', - 'outward' => 'Outward description', - 'rule_group_id' => 'Rule group', - 'transaction_description' => 'Transaction description', - 'first_date' => 'First date', - 'transaction_type' => 'Transaction type', - 'repeat_until' => 'Repeat until', - 'recurring_description' => 'Recurring transaction description', - 'repetition_type' => 'Type of repetition', - 'foreign_currency_id' => 'Foreign currency', - 'repetition_end' => 'Repetition ends', - 'repetitions' => 'Repetitions', - 'calendar' => 'Calendar', - 'weekend' => 'Weekend', - 'client_secret' => 'Client secret', - 'withdrawal_destination_id' => 'Destination account', - 'deposit_source_id' => 'Source account', - 'expected_on' => 'Expected on', - 'paid' => 'Paid', - 'auto_budget_type' => 'Auto-budget', - 'auto_budget_amount' => 'Auto-budget amount', - 'auto_budget_period' => 'Auto-budget period', - 'collected' => 'Collected', - 'submitted' => 'Submitted', - 'key' => 'Key', - 'value' => 'Content of record', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Date from', + 'to_date' => 'Date to', + 'due_date' => 'Due date', + 'payment_date' => 'Payment date', + 'invoice_date' => 'Invoice date', + 'internal_reference' => 'Internal reference', + 'inward' => 'Inward description', + 'outward' => 'Outward description', + 'rule_group_id' => 'Rule group', + 'transaction_description' => 'Transaction description', + 'first_date' => 'First date', + 'transaction_type' => 'Transaction type', + 'repeat_until' => 'Repeat until', + 'recurring_description' => 'Recurring transaction description', + 'repetition_type' => 'Type of repetition', + 'foreign_currency_id' => 'Foreign currency', + 'repetition_end' => 'Repetition ends', + 'repetitions' => 'Repetitions', + 'calendar' => 'Calendar', + 'weekend' => 'Weekend', + 'client_secret' => 'Client secret', + 'withdrawal_destination_id' => 'Destination account', + 'deposit_source_id' => 'Source account', + 'expected_on' => 'Expected on', + 'paid' => 'Paid', + 'auto_budget_type' => 'Auto-budget', + 'auto_budget_amount' => 'Auto-budget amount', + 'auto_budget_period' => 'Auto-budget period', + 'collected' => 'Collected', + 'submitted' => 'Submitted', + 'key' => 'Key', + 'value' => 'Content of record', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; // Ignore this comment diff --git a/resources/lang/en_US/intro.php b/resources/lang/en_US/intro.php index 963bac9b98..0f0d60abde 100644 --- a/resources/lang/en_US/intro.php +++ b/resources/lang/en_US/intro.php @@ -26,56 +26,55 @@ declare(strict_types=1); return [ // index - 'index_intro' => 'Welcome to the index page of Firefly III. Please take the time to walk through this intro to get a feeling of how Firefly III works.', - 'index_accounts-chart' => 'This chart shows the current balance of your asset accounts. You can select the accounts visible here in your preferences.', - 'index_box_out_holder' => 'This little box and the boxes next to this one will give you a quick overview of your financial situation.', - 'index_help' => 'If you ever need help with a page or a form, press this button.', - 'index_outro' => 'Most pages of Firefly III will start with a little tour like this one. Please contact me when you have questions or comments. Enjoy!', - 'index_sidebar-toggle' => 'To create new transactions, accounts or other things, use the menu under this icon.', - 'index_cash_account' => 'These are the accounts created so far. You can use the cash account to track cash expenses but it\'s not mandatory of course.', + 'index_intro' => 'Welcome to the index page of Firefly III. Please take the time to walk through this intro to get a feeling of how Firefly III works.', + 'index_accounts-chart' => 'This chart shows the current balance of your asset accounts. You can select the accounts visible here in your preferences.', + 'index_box_out_holder' => 'This little box and the boxes next to this one will give you a quick overview of your financial situation.', + 'index_help' => 'If you ever need help with a page or a form, press this button.', + 'index_outro' => 'Most pages of Firefly III will start with a little tour like this one. Please contact me when you have questions or comments. Enjoy!', + 'index_sidebar-toggle' => 'To create new transactions, accounts or other things, use the menu under this icon.', + 'index_cash_account' => 'These are the accounts created so far. You can use the cash account to track cash expenses but it\'s not mandatory of course.', // transactions - 'transactions_create_basic_info' => 'Enter the basic information of your transaction. Source, destination, date and description.', - 'transactions_create_amount_info' => 'Enter the amount of the transaction. If necessary the fields will auto-update for foreign amount info.', - 'transactions_create_optional_info' => 'All of these fields are optional. Adding meta-data here will make your transactions better organised.', - 'transactions_create_split' => 'If you want to split a transaction, add more splits with this button', + 'transactions_create_basic_info' => 'Enter the basic information of your transaction. Source, destination, date and description.', + 'transactions_create_amount_info' => 'Enter the amount of the transaction. If necessary the fields will auto-update for foreign amount info.', + 'transactions_create_optional_info' => 'All of these fields are optional. Adding meta-data here will make your transactions better organised.', + 'transactions_create_split' => 'If you want to split a transaction, add more splits with this button', // create account: - 'accounts_create_iban' => 'Give your accounts a valid IBAN. This could make a data import very easy in the future.', - 'accounts_create_asset_opening_balance' => 'Assets accounts may have an "opening balance", indicating the start of this account\'s history in Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III supports multiple currencies. Asset accounts have one main currency, which you must set here.', - 'accounts_create_asset_virtual' => 'It can sometimes help to give your account a virtual balance: an extra amount always added to or removed from the actual balance.', + 'accounts_create_iban' => 'Give your accounts a valid IBAN. This could make a data import very easy in the future.', + 'accounts_create_asset_opening_balance' => 'Assets accounts may have an "opening balance", indicating the start of this account\'s history in Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III supports multiple currencies. Asset accounts have one main currency, which you must set here.', + 'accounts_create_asset_virtual' => 'It can sometimes help to give your account a virtual balance: an extra amount always added to or removed from the actual balance.', // budgets index - 'budgets_index_intro' => 'Budgets are used to manage your finances and form one of the core functions of Firefly III.', - 'budgets_index_set_budget' => 'Set your total budget for every period so Firefly III can tell you if you have budgeted all available money.', - 'budgets_index_see_expenses_bar' => 'Spending money will slowly fill this bar.', - 'budgets_index_navigate_periods' => 'Navigate through periods to easily set budgets ahead of time.', - 'budgets_index_new_budget' => 'Create new budgets as you see fit.', - 'budgets_index_list_of_budgets' => 'Use this table to set the amounts for each budget and see how you are doing.', - 'budgets_index_outro' => 'To learn more about budgeting, checkout the help icon in the top right corner.', + 'budgets_index_intro' => 'Budgets are used to manage your finances and form one of the core functions of Firefly III.', + 'budgets_index_see_expenses_bar' => 'Spending money will slowly fill this bar.', + 'budgets_index_navigate_periods' => 'Navigate through periods to easily set budgets ahead of time.', + 'budgets_index_new_budget' => 'Create new budgets as you see fit.', + 'budgets_index_list_of_budgets' => 'Use this table to set the amounts for each budget and see how you are doing.', + 'budgets_index_outro' => 'To learn more about budgeting, checkout the help icon in the top right corner.', // Ignore this comment // reports (index) - 'reports_index_intro' => 'Use these reports to get detailed insights in your finances.', - 'reports_index_inputReportType' => 'Pick a report type. Check out the help pages to see what each report shows you.', - 'reports_index_inputAccountsSelect' => 'You can exclude or include asset accounts as you see fit.', - 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years.', - 'reports_index_extra-options-box' => 'Depending on the report you have selected, you can select extra filters and options here. Watch this box when you change report types.', + 'reports_index_intro' => 'Use these reports to get detailed insights in your finances.', + 'reports_index_inputReportType' => 'Pick a report type. Check out the help pages to see what each report shows you.', + 'reports_index_inputAccountsSelect' => 'You can exclude or include asset accounts as you see fit.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Depending on the report you have selected, you can select extra filters and options here. Watch this box when you change report types.', // reports (reports) - 'reports_report_default_intro' => 'This report will give you a quick and comprehensive overview of your finances. If you wish to see anything else, please don\'t hestitate to contact me!', - 'reports_report_audit_intro' => 'This report will give you detailed insights in your asset accounts.', - 'reports_report_audit_optionsBox' => 'Use these check boxes to show or hide the columns you are interested in.', + 'reports_report_default_intro' => 'This report will give you a quick and comprehensive overview of your finances. If you wish to see anything else, please don\'t hestitate to contact me!', + 'reports_report_audit_intro' => 'This report will give you detailed insights in your asset accounts.', + 'reports_report_audit_optionsBox' => 'Use these check boxes to show or hide the columns you are interested in.', - 'reports_report_category_intro' => 'This report will give you insight in one or multiple categories.', - 'reports_report_category_pieCharts' => 'These charts will give you insight in expenses and income per category or per account.', - 'reports_report_category_incomeAndExpensesChart' => 'This chart shows your expenses and income per category.', + 'reports_report_category_intro' => 'This report will give you insight in one or multiple categories.', + 'reports_report_category_pieCharts' => 'These charts will give you insight in expenses and income per category or per account.', + 'reports_report_category_incomeAndExpensesChart' => 'This chart shows your expenses and income per category.', - 'reports_report_tag_intro' => 'This report will give you insight in one or multiple tags.', - 'reports_report_tag_pieCharts' => 'These charts will give you insight in expenses and income per tag, account, category or budget.', - 'reports_report_tag_incomeAndExpensesChart' => 'This chart shows your expenses and income per tag.', + 'reports_report_tag_intro' => 'This report will give you insight in one or multiple tags.', + 'reports_report_tag_pieCharts' => 'These charts will give you insight in expenses and income per tag, account, category or budget.', + 'reports_report_tag_incomeAndExpensesChart' => 'This chart shows your expenses and income per tag.', 'reports_report_budget_intro' => 'This report will give you insight in one or multiple budgets.', 'reports_report_budget_pieCharts' => 'These charts will give you insight in expenses per budget or per account.', @@ -118,7 +117,7 @@ return [ // create bill 'bills_create_intro' => 'Use bills to track the amount of money you\'re due every period. Think about expenses like rent, insurance or mortgage payments.', 'bills_create_name' => 'Use a descriptive name such as "Rent" or "Health insurance".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Select a minimum and maximum amount for this bill.', 'bills_create_repeat_freq_holder' => 'Most bills repeat monthly, but you can set another frequency here.', 'bills_create_skip_holder' => 'If a bill repeats every 2 weeks, the "skip"-field should be set to "1" to skip every other week.', diff --git a/resources/lang/en_US/list.php b/resources/lang/en_US/list.php index 9d65f19b39..b6e37179c3 100644 --- a/resources/lang/en_US/list.php +++ b/resources/lang/en_US/list.php @@ -25,39 +25,39 @@ declare(strict_types=1); return [ - 'buttons' => 'Buttons', - 'icon' => 'Icon', - 'id' => 'ID', - 'create_date' => 'Created at', - 'update_date' => 'Updated at', - 'updated_at' => 'Updated at', - 'balance_before' => 'Balance before', - 'balance_after' => 'Balance after', - 'name' => 'Name', - 'role' => 'Role', - 'currentBalance' => 'Current balance', - 'linked_to_rules' => 'Relevant rules', - 'active' => 'Is active?', - 'percentage' => 'pct.', - 'recurring_transaction' => 'Recurring transaction', - 'next_due' => 'Next due', - 'transaction_type' => 'Type', - 'lastActivity' => 'Last activity', - 'balanceDiff' => 'Balance difference', - 'other_meta_data' => 'Other meta data', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Account type', - 'created_at' => 'Created at', - 'account' => 'Account', - 'external_url' => 'External URL', - 'matchingAmount' => 'Amount', - 'destination' => 'Destination', - 'source' => 'Source', - 'next_expected_match' => 'Next expected match', - 'automatch' => 'Auto match?', + 'buttons' => 'Buttons', + 'icon' => 'Icon', + 'id' => 'ID', + 'create_date' => 'Created at', + 'update_date' => 'Updated at', + 'updated_at' => 'Updated at', + 'balance_before' => 'Balance before', + 'balance_after' => 'Balance after', + 'name' => 'Name', + 'role' => 'Role', + 'currentBalance' => 'Current balance', + 'linked_to_rules' => 'Relevant rules', + 'active' => 'Is active?', + 'percentage' => 'pct.', + 'recurring_transaction' => 'Recurring transaction', + 'next_due' => 'Next due', + 'transaction_type' => 'Type', + 'lastActivity' => 'Last activity', + 'balanceDiff' => 'Balance difference', + 'other_meta_data' => 'Other meta data', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => 'Account type', + 'created_at' => 'Created at', + 'account' => 'Account', + 'external_url' => 'External URL', + 'matchingAmount' => 'Amount', + 'destination' => 'Destination', + 'source' => 'Source', + 'next_expected_match' => 'Next expected match', + 'automatch' => 'Auto match?', // Ignore this comment @@ -129,32 +129,31 @@ return [ // Ignore this comment - 'file_size' => 'File size', - 'file_type' => 'File type', - 'attached_to' => 'Attached to', - 'file_exists' => 'File exists', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Last login', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'bunq payment ID', - 'repetitions' => 'Repetitions', - 'title' => 'Title', - 'transaction_s' => 'Transaction(s)', - 'field' => 'Field', - 'value' => 'Value', - 'interest' => 'Interest', - 'interest_period' => 'Interest period', - 'liability_type' => 'Type of liability', - 'liability_direction' => 'Liability in/out', - 'end_date' => 'End date', - 'payment_info' => 'Payment information', - 'expected_info' => 'Next expected transaction', - 'start_date' => 'Start date', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'File size', + 'file_type' => 'File type', + 'attached_to' => 'Attached to', + 'file_exists' => 'File exists', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Last login', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'bunq payment ID', + 'repetitions' => 'Repetitions', + 'title' => 'Title', + 'transaction_s' => 'Transaction(s)', + 'field' => 'Field', + 'value' => 'Value', + 'interest' => 'Interest', + 'interest_period' => 'Interest period', + 'liability_type' => 'Type of liability', + 'liability_direction' => 'Liability in/out', + 'end_date' => 'End date', + 'payment_info' => 'Payment information', + 'expected_info' => 'Next expected transaction', + 'start_date' => 'Start date', + 'trigger' => 'Trigger', + 'response' => 'Response', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; // Ignore this comment diff --git a/resources/lang/en_US/rules.php b/resources/lang/en_US/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/en_US/rules.php +++ b/resources/lang/en_US/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/en_US/validation.php b/resources/lang/en_US/validation.php index f5314ca0f4..cf6e6fde38 100644 --- a/resources/lang/en_US/validation.php +++ b/resources/lang/en_US/validation.php @@ -25,147 +25,154 @@ declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'This is not a valid IBAN.', - 'zero_or_more' => 'The value cannot be negative.', - 'date_or_time' => 'The value must be a valid date or time value (ISO 8601).', - 'source_equals_destination' => 'The source account equals the destination account.', - 'unique_account_number_for_user' => 'It looks like this account number is already in use.', - 'unique_iban_for_user' => 'It looks like this IBAN is already in use.', - 'deleted_user' => 'Due to security constraints, you cannot register using this email address.', - 'rule_trigger_value' => 'This value is invalid for the selected trigger.', - 'rule_action_value' => 'This value is invalid for the selected action.', - 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', - 'file_attached' => 'Successfully uploaded file ":name".', - 'must_exist' => 'The ID in field :attribute does not exist in the database.', - 'all_accounts_equal' => 'All accounts in this field must be equal.', - 'group_title_mandatory' => 'A group title is mandatory when there is more than one transaction.', - 'transaction_types_equal' => 'All splits must be of the same type.', - 'invalid_transaction_type' => 'Invalid transaction type.', - 'invalid_selection' => 'Your selection is invalid.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Need at least one transaction.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Need at least one repetition.', - 'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.', - 'require_currency_info' => 'The content of this field is invalid without currency information.', - 'not_transfer_account' => 'This account is not an account that can be used for transfers.', - 'require_currency_amount' => 'The content of this field is invalid without foreign amount information.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Transaction description should not equal global description.', - 'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.', - 'file_too_large' => 'File ":name" is too large.', - 'belongs_to_user' => 'The value of :attribute is unknown.', - 'accepted' => 'The :attribute must be accepted.', - 'bic' => 'This is not a valid BIC.', - 'at_least_one_trigger' => 'Rule must have at least one trigger.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'Rule must have at least one action.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'This is not valid base64 encoded data.', - 'model_id_invalid' => 'The given ID seems invalid for this model.', - 'less' => ':attribute must be less than 10,000,000', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'date_after' => 'The start date must be before the end date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'unique_for_user' => 'There already is an entry with this :attribute.', - 'before' => 'The :attribute must be a date before :date.', - 'unique_object_for_user' => 'This name is already in use.', - 'unique_account_for_user' => 'This account name is already in use.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => 'This is not a valid IBAN.', + 'zero_or_more' => 'The value cannot be negative.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'The value must be a valid date or time value (ISO 8601).', + 'source_equals_destination' => 'The source account equals the destination account.', + 'unique_account_number_for_user' => 'It looks like this account number is already in use.', + 'unique_iban_for_user' => 'It looks like this IBAN is already in use.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Due to security constraints, you cannot register using this email address.', + 'rule_trigger_value' => 'This value is invalid for the selected trigger.', + 'rule_action_value' => 'This value is invalid for the selected action.', + 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', + 'file_attached' => 'Successfully uploaded file ":name".', + 'must_exist' => 'The ID in field :attribute does not exist in the database.', + 'all_accounts_equal' => 'All accounts in this field must be equal.', + 'group_title_mandatory' => 'A group title is mandatory when there is more than one transaction.', + 'transaction_types_equal' => 'All splits must be of the same type.', + 'invalid_transaction_type' => 'Invalid transaction type.', + 'invalid_selection' => 'Your selection is invalid.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Need at least one transaction.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Need at least one repetition.', + 'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.', + 'require_currency_info' => 'The content of this field is invalid without currency information.', + 'not_transfer_account' => 'This account is not an account that can be used for transfers.', + 'require_currency_amount' => 'The content of this field is invalid without foreign amount information.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'Transaction description should not equal global description.', + 'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.', + 'file_too_large' => 'File ":name" is too large.', + 'belongs_to_user' => 'The value of :attribute is unknown.', + 'accepted' => 'The :attribute must be accepted.', + 'bic' => 'This is not a valid BIC.', + 'at_least_one_trigger' => 'Rule must have at least one trigger.', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => 'Rule must have at least one action.', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => 'This is not valid base64 encoded data.', + 'model_id_invalid' => 'The given ID seems invalid for this model.', + 'less' => ':attribute must be less than 10,000,000', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'date_after' => 'The start date must be before the end date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'unique_for_user' => 'There already is an entry with this :attribute.', + 'before' => 'The :attribute must be a date before :date.', + 'unique_object_for_user' => 'This name is already in use.', + 'unique_account_for_user' => 'This account name is already in use.', // Ignore this comment - 'between.numeric' => 'The :attribute must be between :min and :max.', - 'between.file' => 'The :attribute must be between :min and :max kilobytes.', - 'between.string' => 'The :attribute must be between :min and :max characters.', - 'between.array' => 'The :attribute must have between :min and :max items.', - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'email' => 'The :attribute must be a valid email address.', - 'filled' => 'The :attribute field is required.', - 'exists' => 'The selected :attribute is invalid.', - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'json' => 'The :attribute must be a valid JSON string.', - 'max.numeric' => 'The :attribute may not be greater than :max.', - 'max.file' => 'The :attribute may not be greater than :max kilobytes.', - 'max.string' => 'The :attribute may not be greater than :max characters.', - 'max.array' => 'The :attribute may not have more than :max items.', - 'mimes' => 'The :attribute must be a file of type: :values.', - 'min.numeric' => 'The :attribute must be at least :min.', - 'lte.numeric' => 'The :attribute must be less than or equal :value.', - 'min.file' => 'The :attribute must be at least :min kilobytes.', - 'min.string' => 'The :attribute must be at least :min characters.', - 'min.array' => 'The :attribute must have at least :min items.', - 'not_in' => 'The selected :attribute is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'numeric_native' => 'The native amount must be a number.', - 'numeric_destination' => 'The destination amount must be a number.', - 'numeric_source' => 'The source amount must be a number.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values is present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'size.numeric' => 'The :attribute must be :size.', - 'amount_min_over_max' => 'The minimum amount cannot be larger than the maximum amount.', - 'size.file' => 'The :attribute must be :size kilobytes.', - 'size.string' => 'The :attribute must be :size characters.', - 'size.array' => 'The :attribute must contain :size items.', - 'unique' => 'The :attribute has already been taken.', - 'string' => 'The :attribute must be a string.', - 'url' => 'The :attribute format is invalid.', - 'timezone' => 'The :attribute must be a valid zone.', - '2fa_code' => 'The :attribute field is invalid.', - 'dimensions' => 'The :attribute has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'file' => 'The :attribute must be a file.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'present' => 'The :attribute field must be present.', - 'amount_zero' => 'The total amount cannot be zero.', - 'current_target_amount' => 'The current amount must be less than the target amount.', - 'unique_piggy_bank_for_user' => 'The name of the piggy bank must be unique.', - 'unique_object_group' => 'The group name must be unique', - 'starts_with' => 'The value must start with :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Both accounts must be of the same account type', - 'same_account_currency' => 'Both accounts must have the same currency setting', + 'between.numeric' => 'The :attribute must be between :min and :max.', + 'between.file' => 'The :attribute must be between :min and :max kilobytes.', + 'between.string' => 'The :attribute must be between :min and :max characters.', + 'between.array' => 'The :attribute must have between :min and :max items.', + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'filled' => 'The :attribute field is required.', + 'exists' => 'The selected :attribute is invalid.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max.numeric' => 'The :attribute may not be greater than :max.', + 'max.file' => 'The :attribute may not be greater than :max kilobytes.', + 'max.string' => 'The :attribute may not be greater than :max characters.', + 'max.array' => 'The :attribute may not have more than :max items.', + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min.numeric' => 'The :attribute must be at least :min.', + 'lte.numeric' => 'The :attribute must be less than or equal :value.', + 'min.file' => 'The :attribute must be at least :min kilobytes.', + 'min.string' => 'The :attribute must be at least :min characters.', + 'min.array' => 'The :attribute must have at least :min items.', + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'The native amount must be a number.', + 'numeric_destination' => 'The destination amount must be a number.', + 'numeric_source' => 'The source amount must be a number.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size.numeric' => 'The :attribute must be :size.', + 'amount_min_over_max' => 'The minimum amount cannot be larger than the maximum amount.', + 'size.file' => 'The :attribute must be :size kilobytes.', + 'size.string' => 'The :attribute must be :size characters.', + 'size.array' => 'The :attribute must contain :size items.', + 'unique' => 'The :attribute has already been taken.', + 'string' => 'The :attribute must be a string.', + 'url' => 'The :attribute format is invalid.', + 'timezone' => 'The :attribute must be a valid zone.', + '2fa_code' => 'The :attribute field is invalid.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'file' => 'The :attribute must be a file.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'present' => 'The :attribute field must be present.', + 'amount_zero' => 'The total amount cannot be zero.', + 'current_target_amount' => 'The current amount must be less than the target amount.', + 'unique_piggy_bank_for_user' => 'The name of the piggy bank must be unique.', + 'unique_object_group' => 'The group name must be unique', + 'starts_with' => 'The value must start with :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Both accounts must be of the same account type', + 'same_account_currency' => 'Both accounts must have the same currency setting', // Ignore this comment - 'secure_password' => 'This is not a secure password. Please try again. For more information, visit https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.', - 'valid_recurrence_rep_moment' => 'Invalid repetition moment for this type of repetition.', - 'invalid_account_info' => 'Invalid account information.', - 'attributes' => [ + 'secure_password' => 'This is not a secure password. Please try again. For more information, visit https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.', + 'valid_recurrence_rep_moment' => 'Invalid repetition moment for this type of repetition.', + 'invalid_account_info' => 'Invalid account information.', + 'attributes' => [ 'email' => 'email address', 'description' => 'description', 'amount' => 'amount', @@ -204,52 +211,53 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'withdrawal_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', + 'deposit_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', // Ignore this comment - 'transfer_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'need_id_in_edit' => 'Each split must have transaction_journal_id (either valid ID or 0).', + 'transfer_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'need_id_in_edit' => 'Each split must have transaction_journal_id (either valid ID or 0).', - 'ob_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'ob_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'generic_invalid_source' => 'You can\'t use this account as the source account.', - 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', + 'generic_invalid_source' => 'You can\'t use this account as the source account.', + 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', - 'gt.numeric' => 'The :attribute must be greater than :value.', - 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', - 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', - 'gte.array' => 'The :attribute must have :value items or more.', + 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', + 'gt.numeric' => 'The :attribute must be greater than :value.', + 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', + 'gte.array' => 'The :attribute must have :value items or more.', 'amount_required_for_auto_budget' => 'The amount is required.', 'auto_budget_amount_positive' => 'The amount must be more than zero.', + 'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.', // no access to administration: diff --git a/resources/lang/es_ES/api.php b/resources/lang/es_ES/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/es_ES/api.php +++ b/resources/lang/es_ES/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/es_ES/auth.php b/resources/lang/es_ES/auth.php index d2cb4964bc..350b3f9d9a 100644 --- a/resources/lang/es_ES/auth.php +++ b/resources/lang/es_ES/auth.php @@ -31,11 +31,9 @@ * */ - declare(strict_types=1); - return [ - 'failed' => 'Las credenciales no coinciden con los registros.', - 'throttle' => 'Demasiados intentos de inicio de sesión. Por favor reintente en :seconds segundos.', + 'failed' => 'Estas credenciales no coinciden con nuestros registros.', + 'throttle' => 'Demasiados intentos de inicio de sesión. Inténtalo de nuevo en :seconds segundos.', ]; diff --git a/resources/lang/es_ES/breadcrumbs.php b/resources/lang/es_ES/breadcrumbs.php index 288d88ce0e..02b4b2ac60 100644 --- a/resources/lang/es_ES/breadcrumbs.php +++ b/resources/lang/es_ES/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Inicio', - 'budgets' => 'Presupuestos', - 'subscriptions' => 'Suscripciones', - 'transactions' => 'Transacciones', - 'title_expenses' => 'Gastos', - 'title_withdrawal' => 'Gastos', - 'title_revenue' => 'Ingresos / salario', - 'title_deposit' => 'Ingresos / salario', - 'title_transfer' => 'Transferencias', - 'title_transfers' => 'Transferencias', - 'edit_currency' => 'Editar moneda ":name"', - 'delete_currency' => 'Eliminar moneda ":name"', - 'newPiggyBank' => 'Crear nueva hucha', - 'edit_piggyBank' => 'Editar hucha ":name"', - 'preferences' => 'Preferencias', - 'profile' => 'Perfil', - 'accounts' => 'Cuentas', - 'changePassword' => 'Cambiar contraseña', - 'change_email' => 'Cambiar su dirección de correo electrónico', - 'bills' => 'Facturas', - 'newBill' => 'Nueva factura', - 'edit_bill' => 'Editar factura ":name"', - 'delete_bill' => 'Eliminar factura ":name"', - 'reports' => 'Informes', - 'search_result' => 'Resultados de la búsqueda para ":query"', - 'withdrawal_list' => 'Gastos', - 'Withdrawal_list' => 'Gastos', - 'deposit_list' => 'Ganancia, ingresos y depósitos', - 'transfer_list' => 'Transferencias', - 'transfers_list' => 'Transferencias', + 'home' => 'Inicio', + 'budgets' => 'Presupuestos', + 'subscriptions' => 'Suscripciones', + 'transactions' => 'Transacciones', + 'title_expenses' => 'Gastos', + 'title_withdrawal' => 'Gastos', + 'title_revenue' => 'Ingresos / salario', + 'title_deposit' => 'Ingresos / salario', + 'title_transfer' => 'Transferencias', + 'title_transfers' => 'Transferencias', + 'edit_currency' => 'Editar moneda ":name"', + 'delete_currency' => 'Eliminar moneda ":name"', + 'newPiggyBank' => 'Crear nueva hucha', + 'edit_piggyBank' => 'Editar hucha ":name"', + 'preferences' => 'Preferencias', + 'profile' => 'Perfil', + 'accounts' => 'Cuentas', + 'changePassword' => 'Cambiar contraseña', + 'change_email' => 'Cambiar su dirección de correo electrónico', + 'bills' => 'Facturas', + 'newBill' => 'Nueva factura', + 'edit_bill' => 'Editar factura ":name"', + 'delete_bill' => 'Eliminar factura ":name"', + 'reports' => 'Informes', + 'search_result' => 'Resultados de la búsqueda para ":query"', + 'withdrawal_list' => 'Gastos', + 'Withdrawal_list' => 'Gastos', + 'deposit_list' => 'Ganancia, ingresos y depósitos', + 'transfer_list' => 'Transferencias', + 'transfers_list' => 'Transferencias', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,10 +76,9 @@ return [ * */ - 'reconciliation_list' => 'Reconciliaciones', 'create_withdrawal' => 'Crear nuevo retiro', - 'create_deposit' => 'Crear nuevo ingreso', + 'create_deposit' => 'Crear nuevo depósito', 'create_transfer' => 'Crear nueva transferencia', 'create_new_transaction' => 'Crear una nueva transacción', 'edit_journal' => 'Editar transacción ":description"', diff --git a/resources/lang/es_ES/components.php b/resources/lang/es_ES/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/es_ES/components.php +++ b/resources/lang/es_ES/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/es_ES/config.php b/resources/lang/es_ES/config.php index 8535988615..eeee6239ac 100644 --- a/resources/lang/es_ES/config.php +++ b/resources/lang/es_ES/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'es', - 'locale' => 'es, Spanish, es_ES.utf8, es_ES.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'es', + 'locale' => 'es, Spanish, es_ES.utf8, es_ES.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'D MMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'D MMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd, D [de] MMMM [de] YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd, D [de] MMMM [de] YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'D [de] MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'D [de] MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'D MMMM YYYY, HH:mm:ss', + 'date_time_fns' => 'El MMMM hacer, yyyy a las HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'D MMMM YYYY, HH:mm:ss', - 'date_time_fns' => 'El MMMM hacer, yyyy a las HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGG', + 'week_in_year_fns' => "'Semana' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGG', - 'week_in_year_fns' => "'Semana' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Trimestre' Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Lunes', - 'dow_2' => 'Martes', - 'dow_3' => 'Miércoles', - 'dow_4' => 'Jueves', - 'dow_5' => 'Viernes', - 'dow_6' => 'Sábado', - 'dow_7' => 'Domingo', + 'quarter_fns' => "'Trimestre' Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Lunes', + 'dow_2' => 'Martes', + 'dow_3' => 'Miércoles', + 'dow_4' => 'Jueves', + 'dow_5' => 'Viernes', + 'dow_6' => 'Sábado', + 'dow_7' => 'Domingo', ]; /* diff --git a/resources/lang/es_ES/demo.php b/resources/lang/es_ES/demo.php index 5bbfdb1951..b5a2a1b41a 100644 --- a/resources/lang/es_ES/demo.php +++ b/resources/lang/es_ES/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/es_ES/email.php b/resources/lang/es_ES/email.php index 4bce13693c..9e60e53549 100644 --- a/resources/lang/es_ES/email.php +++ b/resources/lang/es_ES/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Un mensaje de prueba de su instalación de Firefly III', 'admin_test_body' => 'Este es un mensaje de prueba de tu instancia de Firefly III. Fue enviado a :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Se ha creado una invitación', 'invitation_created_body' => 'El usuario administrador ":email" creó una invitación de usuario que puede ser utilizada por quien esté detrás de la dirección de correo electrónico ":invitee". La invitación será válida durante 48 horas.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Restablecer contraseña:', 'registered_doc_link' => 'Documentación:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Una nueva versión de Firefly III está disponible', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Si prefiere, también puedes abrir un nuevo problema en https://github.com/firefly-iiii/firefly-iiii/issues.', 'error_stacktrace_below' => 'El stacktrace completo está a continuación:', 'error_headers' => 'Los siguientes encabezados también pueden ser relevantes:', + 'error_post' => 'Esto fue enviado por el usuario:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III ha creado una nueva transacción|Firefly III ha creado :count nuevas transacciones', 'new_journals_header' => 'Firefly III ha creado una transacción para usted. La puede encontrar en su instalación de Firefly III:|Firefly III ha creado :count transacciones para usted. Las puede encontrar en su instalación de Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Tu factura **":name"** debe terminar el :date. Esto sucederá **¡HOY!**', 'bill_warning_extension_date_zero' => 'Tu factura **":name"** debe ser extendida o cancelada el :date. Esto sucederá **¡HOY!**', 'bill_warning_please_action' => 'Por favor, tomen las medidas adecuadas.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/es_ES/errors.php b/resources/lang/es_ES/errors.php index 7439d7c392..9053dfecd1 100644 --- a/resources/lang/es_ES/errors.php +++ b/resources/lang/es_ES/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Seguimiento de la pila', 'more_info' => 'Más información', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Por favor, recopile más información en el directorio storage/logs donde encontrará los archivos de registro. Si está ejecutando Docker, use registros docker -f [container].', - 'collect_info_more' => 'Puede leer más sobre la recolección de información de errores en las Preguntas Frecuentes.', - 'github_help' => 'Obtener ayuda en GitHub', - 'github_instructions' => 'Es bienvenido a abrir un nuevo issue en GitHub.', - 'use_search' => '¡Use la búsqueda!', - 'include_info' => 'Incluya la información de esta página de depuración.', - 'tell_more' => 'Cuéntenos más que "Dice: Ups"', - 'include_logs' => 'Incluye registros de errores (ver arriba).', - 'what_did_you_do' => 'Cuéntenos lo que estaba haciendo.', - 'offline_header' => 'Estás desconectado', - 'offline_unreachable' => 'Firefly III es inaccesible. Tu dispositivo está desconectado o el servidor no está funcionando.', - 'offline_github' => 'Si estás seguro de que tu dispositivo y el servidor están conectados, por favor abre un ticket en GitHub.', - + 'collect_info' => 'Por favor, recopile más información en el directorio storage/logs donde encontrará los archivos de registro. Si está ejecutando Docker, use registros docker -f [container].', + 'collect_info_more' => 'Puede leer más acerca de la recolección de información de errores en la FAQ.', + 'github_help' => 'Obtener ayuda en GitHub', + 'github_instructions' => 'Es bienvenido a abrir un nuevo issue en GitHub.', + 'use_search' => '¡Use la búsqueda!', + 'include_info' => 'Incluya la información de esta página de depuración.', + 'tell_more' => 'Cuéntenos más que "Dice: Ups"', + 'include_logs' => 'Incluye registros de errores (ver arriba).', + 'what_did_you_do' => 'Cuéntenos lo que estaba haciendo.', + 'offline_header' => 'Estás desconectado', + 'offline_unreachable' => 'Firefly III es inaccesible. Tu dispositivo está desconectado o el servidor no está funcionando.', + 'offline_github' => 'Si estás seguro de que tu dispositivo y el servidor están conectados, por favor abre un ticket en GitHub.', ]; diff --git a/resources/lang/es_ES/firefly.php b/resources/lang/es_ES/firefly.php index 9b1e8c9d46..93001dadcc 100644 --- a/resources/lang/es_ES/firefly.php +++ b/resources/lang/es_ES/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Cerrar', - 'actions' => 'Acciones', - 'edit' => 'Editar', - 'delete' => 'Eliminar', - 'split' => 'Separar', - 'single_split' => 'División', - 'clone' => 'Duplicar', - 'confirm_action' => 'Confirmar acción', - 'last_seven_days' => 'Últimos siete días', - 'last_thirty_days' => 'Últimos treinta días', - 'last_180_days' => 'Últimos 180 días', - 'month_to_date' => 'Mes hasta la fecha', - 'year_to_date' => 'Año a la fecha', - 'YTD' => 'Año en curso', - 'welcome_back' => '¿Qué está pasando?', - 'everything' => 'Todo', - 'today' => 'hoy', - 'customRange' => 'Rango personalizado', - 'date_range' => 'Rango de fechas', - 'apply' => 'Aplicar', - 'select_date' => 'Seleccionar fecha...', - 'cancel' => 'Cancelar', - 'from' => 'Desde', - 'to' => 'Hasta', - 'structure' => 'Estructura', - 'help_translating' => 'Este texto de ayuda no está disponible en tu idioma. ¿Nos ayudaría a traducir?', - 'showEverything' => 'Mostrar todo', - 'never' => 'Nunca', - 'no_results_for_empty_search' => 'Su búsqueda estaba vacía, por lo que no se encontró nada.', - 'removed_amount' => 'Eliminado :amount', - 'added_amount' => 'Añadido :amount', - 'asset_account_role_help' => 'Las opciones extras como resultado de su elección se pueden establecer más tarde.', - 'Opening balance' => 'Balance inicial', - 'create_new_stuff' => 'Crear nueva etiqueta', - 'new_withdrawal' => 'Nuevo gasto', - 'create_new_transaction' => 'Crear una nueva transacción', - 'sidebar_frontpage_create' => 'Crear', - 'new_transaction' => 'Nueva transacción', - 'no_rules_for_bill' => 'Esta factura no tiene reglas asociadas a ella.', - 'go_to_asset_accounts' => 'Ver tus cuentas de activos', - 'go_to_budgets' => 'Ir a tus presupuestos', - 'go_to_withdrawals' => 'Ir a tus gastos', - 'clones_journal_x' => 'Esta transacción es una copia de ":description" (#:id)', - 'go_to_categories' => 'Ir a tus categorías', - 'go_to_bills' => 'Ir a tus cuentas', - 'go_to_expense_accounts' => 'Ver tus cuentas de gastos', - 'go_to_revenue_accounts' => 'Ver tus cuentas de ingresos', - 'go_to_piggies' => 'Ir a tu hucha', - 'new_deposit' => 'Nuevo ingreso', - 'new_transfer' => 'Nueva transferencia', - 'new_transfers' => 'Nueva transferencia', - 'new_asset_account' => 'Nueva cuenta de activo', - 'new_expense_account' => 'Nueva cuenta de gastos', - 'new_revenue_account' => 'Nueva cuenta de ingresos', - 'new_liabilities_account' => 'Nuevo pasivo', - 'new_budget' => 'Nuevo presupuesto', - 'new_bill' => 'Nueva factura', - 'block_account_logout' => 'Tu sesión ha sido cerrada. Las cuentas bloqueadas no pueden utilizar este sitio. ¿Registrarte con una dirección válida de correo electrónico?', - 'flash_success' => '¡Operación correcta!', - 'flash_info' => 'Mensaje', - 'flash_warning' => '¡Atención!', - 'flash_error' => '¡Error!', - 'flash_danger' => '¡Peligro!', - 'flash_info_multiple' => 'Hay un mensaje | Hay :count mensajes', - 'flash_error_multiple' => 'Hay un error|Hay :count errores', - 'net_worth' => 'Valor Neto', - 'help_for_this_page' => 'Ayuda para esta página', - 'help_for_this_page_body' => 'Puedes encontrar más información sobre esta página en la documentación.', - 'two_factor_welcome' => '¡Hola!', - 'two_factor_enter_code' => 'Para continuar, introduce tu código de autenticación de dos pasos. La aplicación puede generarlo para usted.', - 'two_factor_code_here' => 'Ingresar código aquí', - 'two_factor_title' => 'Autenticación en dos pasos', - 'authenticate' => 'Autentificar', - 'two_factor_forgot_title' => 'Autenticación en dos pasos perdida', - 'two_factor_forgot' => 'Olvidé mi cosa de dos factores.', - 'two_factor_lost_header' => '¿Perdiste tu autenticación de doble factor?', - 'two_factor_lost_intro' => 'Si también perdiste tus códigos de copia de seguridad, tienes mala suerte. Esto no es algo que puedas arreglar desde la interfaz web. Tienes dos opciones.', - 'two_factor_lost_fix_self' => 'Si ejecutas tu propia instancia de Firefly III, lee esta entrada en el FAQ para obtener instrucciones.', - 'two_factor_lost_fix_owner' => 'De lo contrario, comunícate por mail con el dueño del sitio, :site_owner y pídele que restablezca tu autenticación de dos pasos.', - 'mfa_backup_code' => 'Has usado un código de respaldo para iniciar sesión en Firefly III. No se puede usar de nuevo, así que táchalo de tu lista.', - 'pref_two_factor_new_backup_codes' => 'Obtener nuevos códigos de copia de seguridad', - 'pref_two_factor_backup_code_count' => 'Tienes un código de seguridad válido. |Tienes :count códigos de seguridad válidos.', - '2fa_i_have_them' => '¡Los he guardado!', - 'warning_much_data' => ':days días de datos pueden tardar en cargarse.', - 'registered' => '¡Te has registrado con éxito!', - 'Default asset account' => 'Cuenta de activos por defecto', - 'no_budget_pointer' => 'Parece que aún no tienes presupuestos. Debes crear algunos en la página presupuestos. Los presupuestos pueden ayudarle a realizar un seguimiento de los gastos.', - 'no_bill_pointer' => 'Parece que aún no tienes facturas. Deberías crear algunas en la página de facturas. Las facturas pueden ayudarte a llevar un seguimiento de los gastos.', - 'Savings account' => 'Cuenta de ahorros', - 'Credit card' => 'Tarjeta de crédito', - 'source_accounts' => 'Cuenta origen|Cuentas de origen', - 'destination_accounts' => 'Cuenta de destino|Cuentas de destino', - 'user_id_is' => 'Tu id de usuario es :user', - 'field_supports_markdown' => 'Este campo admite Markdown.', - 'need_more_help' => 'Si necesita más ayuda con Firefly III, por favor abre un ticket en Github.', - 'reenable_intro_text' => 'También puedes reactivar la guía de introducción.', - 'intro_boxes_after_refresh' => 'Los cuadros de introducción volverán a aparecer cuando actualices la página.', - 'show_all_no_filter' => 'Mostrar todas las transacciones sin agruparlas por fecha.', - 'expenses_by_category' => 'Gastos por categoría', - 'expenses_by_budget' => 'Gastos por presupuesto', - 'income_by_category' => 'Ingresos por categoría', - 'expenses_by_asset_account' => 'Gastos por cuenta de activos', - 'expenses_by_expense_account' => 'Gastos por cuenta de gastos', - 'cannot_redirect_to_account' => 'Firefly III no puede redirigirlo a la página correcta. Disculpas.', - 'sum_of_expenses' => 'Total gastos', - 'sum_of_income' => 'Total ingresos', - 'liabilities' => 'Pasivos', - 'spent_in_specific_budget' => 'Gastado en el presupuesto ":budget"', - 'spent_in_specific_double' => 'Gastado en cuenta ":account"', - 'earned_in_specific_double' => 'Ganado en cuenta ":account"', - 'source_account' => 'Cuenta origen', - 'source_account_reconciliation' => 'No puedes editar la cuenta de origen de una transacción de reconciliación.', - 'destination_account' => 'Cuenta destino', - 'destination_account_reconciliation' => 'No puedes editar la cuenta de destino de una transacción de reconciliación.', - 'sum_of_expenses_in_budget' => 'Total gastado en el presupuesto ":budget"', - 'left_in_budget_limit' => 'Disponible para gasto según presupuesto', - 'current_period' => 'Período actual', - 'show_the_current_period_and_overview' => 'Mostrar el período actual y el resumen', - 'pref_languages_locale' => 'Para que un idioma distinto al inglés funcione correctamente, su sistema operativo debe disponer de la información regional correcta. Si no está disponible, los datos de divisas, fechas y cantidades pueden tener un formato incorrecto.', - 'budget_in_period' => 'Todas las transacciones del presupuesto ":name" entre :start y :end en :currency', - 'chart_budget_in_period' => 'Gráfico para todas las transacciones del presupuesto ":name" entre :start y :end en :currency', - 'chart_budget_in_period_only_currency' => 'La cantidad que presupuestaste fue en :currency, por lo que este gráfico sólo mostrará transacciones en :currency.', - 'chart_account_in_period' => 'Gráfico para las transacciones de la cuenta ":name" (:balance) entre :start y :end', - 'chart_category_in_period' => 'Gráfico para las transacciones de la categoría ":name" entre :start y :end', - 'chart_category_all' => 'Gráfico para las transacciones de la categoría ":name"', - 'clone_withdrawal' => 'Duplicar este gasto', - 'clone_deposit' => 'Duplicar este ingreso', - 'clone_transfer' => 'Duplicar esta transferencia', - 'multi_select_no_selection' => 'Ninguno seleccionado', - 'multi_select_select_all' => 'Seleccionar todo', - 'multi_select_n_selected' => 'seleccionado', - 'multi_select_all_selected' => 'Todos seleccionados', - 'multi_select_filter_placeholder' => 'Buscar...', - 'intro_next_label' => 'Siguiente', - 'intro_prev_label' => 'Anterior', - 'intro_skip_label' => 'Saltar', - 'intro_done_label' => 'Hecho', - 'between_dates_breadcrumb' => 'Entre :start y :end', - 'all_journals_without_budget' => 'Todas las transacciones sin presupuesto', - 'journals_without_budget' => 'Transacciones sin presupuesto', - 'all_journals_without_category' => 'Todas las transacciones sin categoría', - 'journals_without_category' => 'Transacciones sin categoría', - 'all_journals_for_account' => 'Todas las transacciones de la cuenta :name', - 'chart_all_journals_for_account' => 'Gráfico de todas las transacciones de la cuenta :name', - 'journals_in_period_for_account' => 'Todas las transacciones por cuenta :name entre :start y :end', - 'journals_in_period_for_account_js' => 'Todas las transacciones de la cuenta {title} entre {start} y {end}', - 'transferred' => 'Transferido', - 'all_withdrawal' => 'Todos los gastos', - 'all_transactions' => 'Todas las transacciones', - 'title_withdrawal_between' => 'Todos los gastos entre :start y :end', - 'all_deposit' => 'Todos los ingresos', - 'title_deposit_between' => 'Todos los ingresos entre :start y :end', - 'all_transfers' => 'Todas las transferencias', - 'title_transfers_between' => 'Todas las transferencias entre :start y :end', - 'all_transfer' => 'Todas las transferencias', - 'all_journals_for_tag' => 'Todas las transacciones etiquetadas como ":tag"', - 'title_transfer_between' => 'Todas las transferencias entre :start y :end', - 'all_journals_for_category' => 'Todas las transacciones para la categoría :name', - 'all_journals_for_budget' => 'Todas las transacciones para el presupuesto :name', - 'chart_all_journals_for_budget' => 'Gráfico de todas las transacciones para presupuesto :name', - 'journals_in_period_for_category' => 'Todas las transacciones para la categoría :name entre :start y :end', - 'journals_in_period_for_tag' => 'Todas las transacciones para etiqueta :tag entre :start y :end', - 'not_available_demo_user' => 'La característica a la que tratas de acceder no está disponible para usuarios de la demo.', - 'exchange_rate_instructions' => 'La cuenta de activos "@name" sólo acepta transacciones en @native_currency. Si deseas usar @foreign_currency, asegúrate que la cantidad en @native_currency sea conocida también:', - 'transfer_exchange_rate_instructions' => 'La cuenta de activos "@source_name" solo acepta transacciones en "@source_currency". cuenta de activos de destino "@dest_name" solo acepta transacciones en @dest_currency. Debes indicar la cantidad correcta transferida en ambas monedas.', - 'transaction_data' => 'Datos de transacción', - 'invalid_server_configuration' => 'Configuración de servidor no válida', - 'invalid_locale_settings' => 'Firefly III no puede formatear cantidades monetarias porque a su servidor le faltan los paquetes requeridos. Hay instrucciones de cómo hacer esto.', - 'quickswitch' => 'Cambio rápido', - 'sign_in_to_start' => 'Iniciar sesión para comenzar', - 'sign_in' => 'Iniciar sesión', - 'register_new_account' => 'Registrar una nueva cuenta', - 'forgot_my_password' => 'He olvidado mi contraseña', - 'problems_with_input' => 'Hubo algunos problemas con su entrada.', - 'reset_password' => 'Restablecer su contraseña', - 'button_reset_password' => 'Restablecer contraseña', - 'reset_button' => 'Restablecer', - 'want_to_login' => 'Quiero iniciar sesión', - 'login_page_title' => 'Iniciar sesión en Firefly III', - 'register_page_title' => 'Registrarse en Firefly III', - 'forgot_pw_page_title' => 'Olvidaste tu contraseña para Firefly III', - 'reset_pw_page_title' => 'Restablecer contraseña para Firefly III', - 'cannot_reset_demo_user' => 'No puedes restablecer la contraseña del usuario demo.', - 'no_att_demo_user' => 'El usuario de demostración no puede subir archivos adjuntos.', - 'button_register' => 'Registrarse', - 'authorization' => 'Autorización', - 'active_bills_only' => 'solo facturas activas', - 'active_bills_only_total' => 'todas las facturas activas', - 'active_exp_bills_only' => 'solo facturas activas y esperadas', - 'active_exp_bills_only_total' => 'solo las facturas activas esperadas', - 'per_period_sum_1D' => 'Costes diarios esperados', - 'per_period_sum_1W' => 'Costes semanales esperados', - 'per_period_sum_1M' => 'Costes mensuales esperados', - 'per_period_sum_3M' => 'Costes trimestrales esperados', - 'per_period_sum_6M' => 'Costes semestrales esperados', - 'per_period_sum_1Y' => 'Costes anuales esperados', - 'average_per_bill' => 'media por factura', - 'expected_total' => 'total esperado', - 'reconciliation_account_name' => ':name reconciliación (:currency)', - 'saved' => 'Guardado', - 'advanced_options' => 'Opciones avanzadas', - 'advanced_options_explain' => 'Algunas páginas de Firefly III tienen opciones avanzadas ocultas detrás de este botón. Esta página no tiene nada elegante, ¡pero echa un vistazo a las demás!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Cerrar', + 'actions' => 'Acciones', + 'edit' => 'Editar', + 'delete' => 'Eliminar', + 'split' => 'Separar', + 'single_split' => 'División', + 'clone' => 'Duplicar', + 'clone_and_edit' => 'Clonar y editar', + 'confirm_action' => 'Confirmar acción', + 'last_seven_days' => 'Últimos siete días', + 'last_thirty_days' => 'Últimos treinta días', + 'last_180_days' => 'Últimos 180 días', + 'month_to_date' => 'Mes hasta la fecha', + 'year_to_date' => 'Año a la fecha', + 'YTD' => 'Año en curso', + 'welcome_back' => '¿Qué está pasando?', + 'everything' => 'Todo', + 'today' => 'hoy', + 'customRange' => 'Rango personalizado', + 'date_range' => 'Rango de fechas', + 'apply' => 'Aplicar', + 'select_date' => 'Seleccionar fecha...', + 'cancel' => 'Cancelar', + 'from' => 'Desde', + 'to' => 'Hasta', + 'structure' => 'Estructura', + 'help_translating' => 'Este texto de ayuda no está disponible en tu idioma. ¿Nos ayudaría a traducir?', + 'showEverything' => 'Mostrar todo', + 'never' => 'Nunca', + 'no_results_for_empty_search' => 'Su búsqueda estaba vacía, por lo que no se encontró nada.', + 'removed_amount' => 'Eliminado :amount', + 'added_amount' => 'Añadido :amount', + 'asset_account_role_help' => 'Las opciones extras como resultado de su elección se pueden establecer más tarde.', + 'Opening balance' => 'Balance inicial', + 'create_new_stuff' => 'Crear nueva etiqueta', + 'new_withdrawal' => 'Nuevo gasto', + 'create_new_transaction' => 'Crear una nueva transacción', + 'sidebar_frontpage_create' => 'Crear', + 'new_transaction' => 'Nueva transacción', + 'no_rules_for_bill' => 'Esta factura no tiene reglas asociadas a ella.', + 'go_to_asset_accounts' => 'Ver tus cuentas de activos', + 'go_to_budgets' => 'Ir a tus presupuestos', + 'go_to_withdrawals' => 'Ir a tus gastos', + 'clones_journal_x' => 'Esta transacción es una copia de ":description" (#:id)', + 'go_to_categories' => 'Ir a tus categorías', + 'go_to_bills' => 'Ir a tus cuentas', + 'go_to_expense_accounts' => 'Ver tus cuentas de gastos', + 'go_to_revenue_accounts' => 'Ver tus cuentas de ingresos', + 'go_to_piggies' => 'Ir a tu hucha', + 'new_deposit' => 'Nuevo ingreso', + 'new_transfer' => 'Nueva transferencia', + 'new_transfers' => 'Nueva transferencia', + 'new_asset_account' => 'Nueva cuenta de activo', + 'new_expense_account' => 'Nueva cuenta de gastos', + 'new_revenue_account' => 'Nueva cuenta de ingresos', + 'new_liabilities_account' => 'Nuevo pasivo', + 'new_budget' => 'Nuevo presupuesto', + 'new_bill' => 'Nueva factura', + 'block_account_logout' => 'Tu sesión ha sido cerrada. Las cuentas bloqueadas no pueden utilizar este sitio. ¿Registrarte con una dirección válida de correo electrónico?', + 'flash_success' => '¡Operación correcta!', + 'flash_info' => 'Mensaje', + 'flash_warning' => '¡Advertencia!', + 'flash_error' => '¡Error!', + 'flash_danger' => '¡Peligro!', + 'flash_info_multiple' => 'Hay un mensaje | Hay :count mensajes', + 'flash_error_multiple' => 'Hay un error|Hay :count errores', + 'net_worth' => 'Valor Neto', + 'help_for_this_page' => 'Ayuda para esta página', + 'help_for_this_page_body' => 'Puedes encontrar más información sobre esta página en la documentación.', + 'two_factor_welcome' => '¡Hola!', + 'two_factor_enter_code' => 'Para continuar, introduce tu código de autenticación de dos pasos. La aplicación puede generarlo para usted.', + 'two_factor_code_here' => 'Introducir el código aquí', + 'two_factor_title' => 'Autenticación en dos pasos', + 'authenticate' => 'Autentificar', + 'two_factor_forgot_title' => 'Autenticación en dos pasos perdida', + 'two_factor_forgot' => 'Olvidé mi cosa de dos factores.', + 'two_factor_lost_header' => '¿Perdiste tu autenticación de doble factor?', + 'two_factor_lost_intro' => 'Si también perdiste tus códigos de copia de seguridad, tienes mala suerte. Esto no es algo que puedas arreglar desde la interfaz web. Tienes dos opciones.', + 'two_factor_lost_fix_self' => 'Si ejecutas tu propia instancia de Firefly III, lee :site_owner y pídele que restablezca tu autenticación de dos pasos.', + 'mfa_backup_code' => 'Has usado un código de respaldo para iniciar sesión en Firefly III. No se puede usar de nuevo, así que táchalo de tu lista.', + 'pref_two_factor_new_backup_codes' => 'Obtener nuevos códigos de copia de seguridad', + 'pref_two_factor_backup_code_count' => 'Tienes un código de seguridad válido. |Tienes :count códigos de seguridad válidos.', + '2fa_i_have_them' => '¡Los he guardado!', + 'warning_much_data' => ':days días de datos pueden tardar en cargarse.', + 'registered' => '¡Te has registrado con éxito!', + 'Default asset account' => 'Cuenta de activos por defecto', + 'no_budget_pointer' => 'Parece que aún no tienes presupuestos. Debes crear algunos en la página presupuestos. Los presupuestos pueden ayudarle a realizar un seguimiento de los gastos.', + 'no_bill_pointer' => 'Parece que aún no tienes facturas. Deberías crear algunas en la página de facturas. Las facturas pueden ayudarte a llevar un seguimiento de los gastos.', + 'Savings account' => 'Cuenta de ahorros', + 'Credit card' => 'Tarjeta de crédito', + 'source_accounts' => 'Cuenta origen|Cuentas de origen', + 'destination_accounts' => 'Cuenta de destino|Cuentas de destino', + 'user_id_is' => 'Tu id de usuario es :user', + 'field_supports_markdown' => 'Este campo admite Markdown.', + 'need_more_help' => 'Si necesita más ayuda con Firefly III, por favor abre un ticket en Github.', + 'reenable_intro_text' => 'También puedes reactivar la guía de introducción.', + 'intro_boxes_after_refresh' => 'Los cuadros de introducción volverán a aparecer cuando actualices la página.', + 'show_all_no_filter' => 'Mostrar todas las transacciones sin agruparlas por fecha.', + 'expenses_by_category' => 'Gastos por categoría', + 'expenses_by_budget' => 'Gastos por presupuesto', + 'income_by_category' => 'Ingresos por categoría', + 'expenses_by_asset_account' => 'Gastos por cuenta de activos', + 'expenses_by_expense_account' => 'Gastos por cuenta de gastos', + 'cannot_redirect_to_account' => 'Firefly III no puede redirigirlo a la página correcta. Disculpas.', + 'sum_of_expenses' => 'Total gastos', + 'sum_of_income' => 'Total ingresos', + 'liabilities' => 'Pasivos', + 'spent_in_specific_budget' => 'Gastado en el presupuesto ":budget"', + 'spent_in_specific_double' => 'Gastado en cuenta ":account"', + 'earned_in_specific_double' => 'Ganado en cuenta ":account"', + 'source_account' => 'Cuenta origen', + 'source_account_reconciliation' => 'No puedes editar la cuenta de origen de una transacción de reconciliación.', + 'destination_account' => 'Cuenta destino', + 'destination_account_reconciliation' => 'No puedes editar la cuenta de destino de una transacción de reconciliación.', + 'sum_of_expenses_in_budget' => 'Total gastado en el presupuesto ":budget"', + 'left_in_budget_limit' => 'Disponible para gasto según presupuesto', + 'current_period' => 'Período actual', + 'show_the_current_period_and_overview' => 'Mostrar el período actual y el resumen', + 'pref_languages_locale' => 'Para que un idioma distinto al inglés funcione correctamente, su sistema operativo debe disponer de la información regional correcta. Si no está disponible, los datos de divisas, fechas y cantidades pueden tener un formato incorrecto.', + 'budget_in_period' => 'Todas las transacciones del presupuesto ":name" entre :start y :end en :currency', + 'chart_budget_in_period' => 'Gráfico para todas las transacciones del presupuesto ":name" entre :start y :end en :currency', + 'chart_budget_in_period_only_currency' => 'La cantidad que presupuestaste fue en :currency, por lo que este gráfico sólo mostrará transacciones en :currency.', + 'chart_account_in_period' => 'Gráfico para las transacciones de la cuenta ":name" (:balance) entre :start y :end', + 'chart_category_in_period' => 'Gráfico para las transacciones de la categoría ":name" entre :start y :end', + 'chart_category_all' => 'Gráfico para las transacciones de la categoría ":name"', + 'clone_withdrawal' => 'Duplicar este gasto', + 'clone_deposit' => 'Duplicar este ingreso', + 'clone_transfer' => 'Duplicar esta transferencia', + 'multi_select_no_selection' => 'Ninguno seleccionado', + 'multi_select_select_all' => 'Seleccionar todo', + 'multi_select_n_selected' => 'seleccionado', + 'multi_select_all_selected' => 'Todos seleccionados', + 'multi_select_filter_placeholder' => 'Buscar...', + 'intro_next_label' => 'Siguiente', + 'intro_prev_label' => 'Anterior', + 'intro_skip_label' => 'Saltar', + 'intro_done_label' => 'Hecho', + 'between_dates_breadcrumb' => 'Entre :start y :end', + 'all_journals_without_budget' => 'Todas las transacciones sin presupuesto', + 'journals_without_budget' => 'Transacciones sin presupuesto', + 'all_journals_without_category' => 'Todas las transacciones sin categoría', + 'journals_without_category' => 'Transacciones sin categoría', + 'all_journals_for_account' => 'Todas las transacciones de la cuenta :name', + 'chart_all_journals_for_account' => 'Gráfico de todas las transacciones de la cuenta :name', + 'journals_in_period_for_account' => 'Todas las transacciones por cuenta :name entre :start y :end', + 'journals_in_period_for_account_js' => 'Todas las transacciones de la cuenta {title} entre {start} y {end}', + 'transferred' => 'Transferido', + 'all_withdrawal' => 'Todos los gastos', + 'all_transactions' => 'Todas las transacciones', + 'title_withdrawal_between' => 'Todos los gastos entre :start y :end', + 'all_deposit' => 'Todos los ingresos', + 'title_deposit_between' => 'Todos los ingresos entre :start y :end', + 'all_transfers' => 'Todas las transferencias', + 'title_transfers_between' => 'Todas las transferencias entre :start y :end', + 'all_transfer' => 'Todas las transferencias', + 'all_journals_for_tag' => 'Todas las transacciones etiquetadas como ":tag"', + 'title_transfer_between' => 'Todas las transferencias entre :start y :end', + 'all_journals_for_category' => 'Todas las transacciones para la categoría :name', + 'all_journals_for_budget' => 'Todas las transacciones para el presupuesto :name', + 'chart_all_journals_for_budget' => 'Gráfico de todas las transacciones para presupuesto :name', + 'journals_in_period_for_category' => 'Todas las transacciones para la categoría :name entre :start y :end', + 'journals_in_period_for_tag' => 'Todas las transacciones para etiqueta :tag entre :start y :end', + 'not_available_demo_user' => 'La característica a la que tratas de acceder no está disponible para usuarios de la demo.', + 'exchange_rate_instructions' => 'La cuenta de activos "@name" sólo acepta transacciones en @native_currency. Si deseas usar @foreign_currency, asegúrate que la cantidad en @native_currency sea conocida también:', + 'transfer_exchange_rate_instructions' => 'La cuenta de activos "@source_name" solo acepta transacciones en "@source_currency". cuenta de activos de destino "@dest_name" solo acepta transacciones en @dest_currency. Debes indicar la cantidad correcta transferida en ambas monedas.', + 'transaction_data' => 'Datos de transacción', + 'invalid_server_configuration' => 'Configuración de servidor no válida', + 'invalid_locale_settings' => 'Firefly III no puede dar formato a las cantidades monetarias porque a tu servidor le faltan los paquetes necesarios. Hay instrucciones de cómo hacerlo.', + 'quickswitch' => 'Cambio rápido', + 'sign_in_to_start' => 'Iniciar sesión para comenzar', + 'sign_in' => 'Iniciar sesión', + 'register_new_account' => 'Registrar una nueva cuenta', + 'forgot_my_password' => 'He olvidado mi contraseña', + 'problems_with_input' => 'Hubo algunos problemas con su entrada.', + 'reset_password' => 'Restablecer su contraseña', + 'button_reset_password' => 'Restablecer contraseña', + 'reset_button' => 'Restablecer', + 'want_to_login' => 'Quiero iniciar sesión', + 'login_page_title' => 'Iniciar sesión en Firefly III', + 'register_page_title' => 'Registrarse en Firefly III', + 'forgot_pw_page_title' => 'Olvidaste tu contraseña para Firefly III', + 'reset_pw_page_title' => 'Restablecer contraseña para Firefly III', + 'cannot_reset_demo_user' => 'No puedes restablecer la contraseña del usuario demo.', + 'no_att_demo_user' => 'El usuario de demostración no puede subir archivos adjuntos.', + 'button_register' => 'Registrarse', + 'authorization' => 'Autorización', + 'active_bills_only' => 'solo facturas activas', + 'active_bills_only_total' => 'todas las facturas activas', + 'active_exp_bills_only' => 'solo facturas activas y esperadas', + 'active_exp_bills_only_total' => 'solo las facturas activas esperadas', + 'per_period_sum_1D' => 'Costes diarios esperados', + 'per_period_sum_1W' => 'Costes semanales esperados', + 'per_period_sum_1M' => 'Costes mensuales esperados', + 'per_period_sum_3M' => 'Costes trimestrales esperados', + 'per_period_sum_6M' => 'Costes semestrales esperados', + 'per_period_sum_1Y' => 'Costes anuales esperados', + 'average_per_bill' => 'media por factura', + 'expected_total' => 'total esperado', + 'reconciliation_account_name' => ':name reconciliación (:currency)', + 'saved' => 'Guardado', + 'advanced_options' => 'Opciones avanzadas', + 'advanced_options_explain' => 'Algunas páginas de Firefly III tienen opciones avanzadas ocultas detrás de este botón. Esta página no tiene nada elegante, ¡pero echa un vistazo a las demás!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'No hay mensajes webhook', - 'webhook_trigger_STORE_TRANSACTION' => 'Después de crear la transacción', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Después de actualizar la transacción', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Después de eliminar la transacción', - 'webhook_response_TRANSACTIONS' => 'Detalles de la transacción', - 'webhook_response_ACCOUNTS' => 'Detalles de la cuenta', - 'webhook_response_none_NONE' => 'Sin detalles', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspeccionar', - 'create_new_webhook' => 'Crear un nuevo webhook', - 'webhooks_create_breadcrumb' => 'Crear un nuevo Webhook', - 'webhook_trigger_form_help' => 'Indica en qué evento se activará el webhook', - 'webhook_response_form_help' => 'Indique lo que el webhook debe enviar a la URL.', - 'webhook_delivery_form_help' => 'En qué formato debe entregar los datos el webhook.', - 'webhook_active_form_help' => 'El webhook debe estar activo o no será llamado.', - 'stored_new_webhook' => 'Nuevo webhook almacenado ":title"', - 'delete_webhook' => 'Eliminar webhook', - 'deleted_webhook' => 'Webhook eliminado ":title"', - 'edit_webhook' => 'Editar webhook ":title " "', - 'updated_webhook' => 'Webhook actualizado ":title"', - 'edit_webhook_js' => 'Editar webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'El disparador se activó en la transacción indicada. Por favor, espere a que aparezcan los resultados.', - 'webhook_messages' => 'Mensaje de Webhook', - 'view_message' => 'Ver mensaje', - 'view_attempts' => 'Ver intentos fallidos', - 'message_content_title' => 'Contenido del mensaje del webhook', - 'message_content_help' => 'Este es el contenido del mensaje que se envió (o se intentó) usando este webhook.', - 'attempt_content_title' => 'Intentos de webhook', - 'attempt_content_help' => 'Estos son todos los intentos fallidos de enviar este mensaje de webhook a la URL configurada. Después de algún tiempo, Firefly III dejará de intentarlo.', - 'no_attempts' => 'No hay intentos fallidos. ¡Eso es bueno!', - 'webhook_attempt_at' => 'Intento a las {moment}', - 'logs' => 'Registros', - 'response' => 'Respuesta', - 'visit_webhook_url' => 'Visita la URL del webhook', - 'reset_webhook_secret' => 'Restablecer secreto del webhook', - 'webhook_stored_link' => 'El webhook #{ID} ("{title}") ha sido almacenado.', - 'webhook_updated_link' => 'El webhook #{ID} ("{title}") ha sido actualizado.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'deshabilitado', + 'no_webhook_messages' => 'No hay mensajes webhook', + 'webhook_trigger_STORE_TRANSACTION' => 'Después de crear la transacción', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Después de actualizar la transacción', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Después de eliminar la transacción', + 'webhook_response_TRANSACTIONS' => 'Detalles de la transacción', + 'webhook_response_ACCOUNTS' => 'Detalles de la cuenta', + 'webhook_response_none_NONE' => 'Sin detalles', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspeccionar', + 'create_new_webhook' => 'Crear un nuevo webhook', + 'webhooks_create_breadcrumb' => 'Crear un nuevo Webhook', + 'webhook_trigger_form_help' => 'Indica en qué evento se activará el webhook', + 'webhook_response_form_help' => 'Indique lo que el webhook debe enviar a la URL.', + 'webhook_delivery_form_help' => 'En qué formato debe entregar los datos el webhook.', + 'webhook_active_form_help' => 'El webhook debe estar activo o no será llamado.', + 'stored_new_webhook' => 'Nuevo webhook almacenado ":title"', + 'delete_webhook' => 'Eliminar webhook', + 'deleted_webhook' => 'Webhook eliminado ":title"', + 'edit_webhook' => 'Editar webhook ":title " "', + 'updated_webhook' => 'Webhook actualizado ":title"', + 'edit_webhook_js' => 'Editar webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'El disparador se activó en la transacción indicada. Por favor, espere a que aparezcan los resultados.', + 'webhook_messages' => 'Mensaje de Webhook', + 'view_message' => 'Ver mensaje', + 'view_attempts' => 'Ver intentos fallidos', + 'message_content_title' => 'Contenido del mensaje del webhook', + 'message_content_help' => 'Este es el contenido del mensaje que se envió (o se intentó) usando este webhook.', + 'attempt_content_title' => 'Intentos de webhook', + 'attempt_content_help' => 'Estos son todos los intentos fallidos de enviar este mensaje de webhook a la URL configurada. Después de algún tiempo, Firefly III dejará de intentarlo.', + 'no_attempts' => 'No hay intentos fallidos. ¡Eso es bueno!', + 'webhook_attempt_at' => 'Intento a las {moment}', + 'logs' => 'Registros', + 'response' => 'Respuesta', + 'visit_webhook_url' => 'Visita la URL del webhook', + 'reset_webhook_secret' => 'Restablecer secreto del webhook', + 'webhook_stored_link' => 'El webhook #{ID} ("{title}") ha sido almacenado.', + 'webhook_updated_link' => 'El webhook #{ID} ("{title}") ha sido actualizado.', // API access - 'authorization_request' => 'Firefly III v:version Solicitud de autorización', - 'authorization_request_intro' => ':client está pidiendo permiso para acceder a la administración de tus finanzas. ¿Deseas autorizar a :client a acceder a estos datos?', - 'authorization_request_site' => 'Serás redirigido a :url, que podrá acceder a tus datos de Firefly III.', - 'authorization_request_invalid' => 'Esta solicitud de acceso no es válida. Por favor, no vuelva a abrir este enlace.', - 'scopes_will_be_able' => 'Esta aplicación podrá:', - 'button_authorize' => 'Autorizar', - 'none_in_select_list' => '(ninguno)', - 'no_piggy_bank' => '(sin hucha)', - 'name_in_currency' => ':name en :currency', - 'paid_in_currency' => 'Pagado en :currency', - 'unpaid_in_currency' => 'Impagado en :currency', - 'is_alpha_warning' => 'Estás ejecutando una versión ALPHA. Ten cuidado con los errores y problemas.', - 'is_beta_warning' => 'Estás ejecutando una versión BETA. Ten cuidado con los errores y problemas.', - 'all_destination_accounts' => 'Cuentas destino', - 'all_source_accounts' => 'Cuentas origen', - 'back_to_index' => 'Volver al Índice', - 'cant_logout_guard' => 'Firefly III no puede cerrar sesión.', - 'internal_reference' => 'Referencia interna', + 'authorization_request' => 'Firefly III v:version Solicitud de autorización', + 'authorization_request_intro' => ':client está pidiendo permiso para acceder a la administración de tus finanzas. ¿Deseas autorizar a :client a acceder a estos datos?', + 'authorization_request_site' => 'Serás redirigido a :url, que podrá acceder a tus datos de Firefly III.', + 'authorization_request_invalid' => 'Esta solicitud de acceso no es válida. Por favor, no vuelva a abrir este enlace.', + 'scopes_will_be_able' => 'Esta aplicación podrá:', + 'button_authorize' => 'Autorizar', + 'none_in_select_list' => '(ninguno)', + 'no_piggy_bank' => '(sin hucha)', + 'name_in_currency' => ':name en :currency', + 'paid_in_currency' => 'Pagado en :currency', + 'unpaid_in_currency' => 'Impagado en :currency', + 'is_alpha_warning' => 'Estás ejecutando una versión ALPHA. Ten cuidado con los errores y problemas.', + 'is_beta_warning' => 'Estás ejecutando una versión BETA. Ten cuidado con los errores y problemas.', + 'all_destination_accounts' => 'Cuentas destino', + 'all_source_accounts' => 'Cuentas origen', + 'back_to_index' => 'Volver al Índice', + 'cant_logout_guard' => 'Firefly III no puede cerrar sesión.', + 'internal_reference' => 'Referencia interna', // check for updates: - 'update_check_title' => 'Buscar actualizaciones', - 'admin_update_check_title' => 'Buscar actualizaciones automáticamente', - 'admin_update_check_explain' => 'Firefly III puede buscar actualizaciones automáticamente. Cuando habilitas esta configuración, Firefly III contactará con el servidor de actualizaciones para comprobar si hay disponible una nueva versión. Cuando sea así, te llegará una notificación. Puedes probar esta notificación usando el botón de la derecha. Por favor, indica abajo si quieres que Firefly III busque actualizaciones.', - 'check_for_updates_permission' => 'Firefly III puede buscar actualizaciones, pero necesita tu permiso para hacerlo. Por favor, ve a administracionpara indicar si deseas que esta característica sea habilitada.', - 'updates_ask_me_later' => 'Preguntarme mas tarde', - 'updates_do_not_check' => 'No buscar actualizaciones', - 'updates_enable_check' => 'Habilitar el buscar actualizaciones', - 'admin_update_check_now_title' => 'Buscar actualizaciones ahora', - 'admin_update_check_now_explain' => 'SI pulsas el botón, Firefly III comprobará si tu actual versión es la última.', - 'check_for_updates_button' => '¡Comprobar ahora!', - 'update_new_version_alert' => 'Una nueva versión de Firefly III esta disponible. Estás usando :your_version, la ultima versión es :new_version que se lanzó en :date.', - 'update_version_beta' => 'Esta versión es una versión BETA. Puede tener problemas.', - 'update_version_alpha' => 'Esta versión es una versión de ALPHA. Puede tener problemas.', - 'update_current_version_alert' => 'Estás usando :version, que es la última versión disponible.', - 'update_newer_version_alert' => 'Estás usando :your_version, que es más reciente que la última versión, :new_version.', - 'update_check_error' => 'Se ha producido un error al buscar actualizaciones: :error', - 'unknown_error' => 'Error desconocido. Lo sentimos.', - 'just_new_release' => '¡Una nueva versión está disponible! La versión :version ha sido liberada :date. Esta versión es muy fresca. Espera unos días a que la nueva versión se estabilice.', - 'disabled_but_check' => 'Has desactivado la comprobación de actualizaciones. Así que no olvides comprobar las actualizaciones tú mismo de vez en cuando. ¡Gracias!', - 'admin_update_channel_title' => 'Canal de actualizaciones', - 'admin_update_channel_explain' => 'Firefly III tiene tres "canales" de actualización que determinan cuán por delante está en términos de características, mejoras y errores. Usa el canal "beta" si eres aventurero y el "alfa" cuando quieras vivir la vida peligrosamente.', - 'update_channel_stable' => 'Estable. Todo debería funcionar como se espera.', - 'update_channel_beta' => 'Beta. Nuevas funcionalidades, pero las cosas pueden romperse.', - 'update_channel_alpha' => 'Alpha. Tiramos cosas y usamos lo que sea que se pegue.', + 'update_check_title' => 'Buscar actualizaciones', + 'admin_update_check_title' => 'Buscar actualizaciones automáticamente', + 'admin_update_check_explain' => 'Firefly III puede buscar actualizaciones automáticamente. Cuando habilitas esta configuración, Firefly III contactará con el servidor de actualizaciones para comprobar si hay disponible una nueva versión. Cuando sea así, te llegará una notificación. Puedes probar esta notificación usando el botón de la derecha. Por favor, indica abajo si quieres que Firefly III busque actualizaciones.', + 'check_for_updates_permission' => 'Firefly III puede buscar actualizaciones, pero necesita tu permiso para hacerlo. Por favor, ve a administracionpara indicar si deseas que esta característica sea habilitada.', + 'updates_ask_me_later' => 'Preguntarme mas tarde', + 'updates_do_not_check' => 'No buscar actualizaciones', + 'updates_enable_check' => 'Habilitar el buscar actualizaciones', + 'admin_update_check_now_title' => 'Buscar actualizaciones ahora', + 'admin_update_check_now_explain' => 'SI pulsas el botón, Firefly III comprobará si tu actual versión es la última.', + 'check_for_updates_button' => '¡Comprobar ahora!', + 'update_new_version_alert' => 'Una nueva versión de Firefly III esta disponible. Estás usando :your_version, la ultima versión es :new_version que se lanzó en :date.', + 'update_version_beta' => 'Esta versión es una versión BETA. Puede tener problemas.', + 'update_version_alpha' => 'Esta versión es una versión de ALPHA. Puede tener problemas.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Estás usando :version, que es la última versión disponible.', + 'update_newer_version_alert' => 'Estás usando :your_version, que es más reciente que la última versión, :new_version.', + 'update_check_error' => 'Se ha producido un error al buscar actualizaciones: :error', + 'unknown_error' => 'Error desconocido. Lo sentimos.', + 'disabled_but_check' => 'Has desactivado la comprobación de actualizaciones. Así que no olvides comprobar las actualizaciones tú mismo de vez en cuando. ¡Gracias!', + 'admin_update_channel_title' => 'Canal de actualizaciones', + 'admin_update_channel_explain' => 'Firefly III tiene tres "canales" de actualización que determinan cuán por delante está en términos de características, mejoras y errores. Usa el canal "beta" si eres aventurero y el "alfa" cuando quieras vivir la vida peligrosamente.', + 'update_channel_stable' => 'Estable. Todo debería funcionar como se espera.', + 'update_channel_beta' => 'Beta. Nuevas funcionalidades, pero las cosas pueden romperse.', + 'update_channel_alpha' => 'Alpha. Tiramos cosas y usamos lo que sea que se pegue.', // search - 'search' => 'Buscar', - 'search_query' => 'Consulta', - 'search_found_transactions' => 'Firefly III encontrada :count transacción en :time segundos.|Firefly III encontradas :count transacciones en :time segundos.', - 'search_found_more_transactions' => 'Firefly III encontró más de :count transacciones en :time segundos.', - 'search_for_query' => 'Firefly III está buscando transacciones que contengan todas estas palabras: :query', - 'invalid_operators_list' => 'Estos parámetros de búsqueda no son válidos y han sido ignorados.', + 'search' => 'Buscar', + 'search_query' => 'Consulta', + 'search_found_transactions' => 'Firefly III encontrada :count transacción en :time segundos.|Firefly III encontradas :count transacciones en :time segundos.', + 'search_found_more_transactions' => 'Firefly III encontró más de :count transacciones en :time segundos.', + 'search_for_query' => 'Firefly III está buscando transacciones que contengan todas estas palabras: :query', + 'invalid_operators_list' => 'Estos parámetros de búsqueda no son válidos y han sido ignorados.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'La fecha de la transacción es ":value"', 'search_modifier_not_date_on' => 'La fecha de la transacción no es ":value"', 'search_modifier_reconciled' => 'La transacción está conciliada', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'El tipo de transacción es ":value"', 'search_modifier_not_transaction_type' => 'El tipo de transacción no es ":value"', 'search_modifier_tag_is' => 'La etiqueta es ":value"', + 'search_modifier_tag_contains' => 'La etiqueta contiene ":value"', + 'search_modifier_not_tag_contains' => 'La etiqueta no contiene ":value"', + 'search_modifier_tag_ends' => 'La etiqueta termina con ":value"', + 'search_modifier_tag_starts' => 'La etiqueta comienza con ":value"', 'search_modifier_not_tag_is' => 'Ninguna etiqueta es ":value"', 'search_modifier_date_on_year' => 'El año de la transacción es ":value"', 'search_modifier_not_date_on_year' => 'El año de la transacción no es ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'La etiqueta no es ":value"', 'search_modifier_not_tag_is_not' => 'La etiqueta es ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Los siguientes modificadores también se aplican a la búsqueda:', 'general_search_error' => 'Se ha producido un error durante la búsqueda. Por favor, compruebe los archivos de registro para obtener más información.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'No', 'cannot_fire_inactive_rules' => 'No puedes ejecutar reglas inactivas.', + 'show_triggers' => 'Mostrar disparadores', + 'show_actions' => 'Mostrar acciones', 'rules' => 'Reglas', 'rule_name' => 'Nombre de la regla', 'rule_triggers' => 'La regla se activa cuando', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Cuando la transacción es actualizada', 'rule_trigger_user_action' => 'La acción del usuario es ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'El nombre de la cuenta de origen comienza con..', 'rule_trigger_source_account_starts' => 'El nombre de la cuenta de origen comienza con ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Presupuesto es ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Cualquier etiqueta es..', 'rule_trigger_tag_is' => 'Cualquier etiqueta es ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'La moneda de la transacción es..', 'rule_trigger_currency_is' => 'La moneda de la transacción es ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'La transacción en moneda extranjera es..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'La transacción no existe', 'rule_trigger_not_has_attachments' => 'La transacción no tiene adjuntos', 'rule_trigger_not_has_any_category' => 'La transacción no tiene categoría', - 'rule_trigger_not_has_any_budget' => 'La transacción no tiene categoría', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'La transacción no tiene factura', 'rule_trigger_not_has_any_tag' => 'La transacción no tiene etiquetas', 'rule_trigger_not_any_notes' => 'La transacción no tiene notas', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'La cuenta de destino no es una cuenta de efectivo', 'rule_trigger_not_account_is_cash' => 'Ninguna de las cuentas es una cuenta de efectivo', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'ELIMINAR transacción(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Añadir las notas a la descripción', 'rule_action_move_descr_to_notes' => 'Reemplazar las notas con la descripción', 'rule_action_move_notes_to_descr' => 'Reemplazar la descripción con notas', + 'rule_action_set_destination_to_cash_choice' => 'Establecer cuenta de destino a (cash)', + 'rule_action_set_source_to_cash_choice' => 'Establecer cuenta de origen a (cash)', 'rulegroup_for_bills_title' => 'Regla de grupo para facturas', 'rulegroup_for_bills_description' => 'Un grupo de reglas especiales para todas las reglas que involucren facturas.', 'rule_for_bill_title' => 'Regla autogenerada para la factura ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Regla para la factura ":name"', 'new_rule_for_bill_description' => 'Esta regla marca las transacciones para la cuenta ":name".', - 'new_rule_for_journal_title' => 'Regla basada en la transacción ":description"', - 'new_rule_for_journal_description' => 'Esta regla se basa en la transacción ":description". Coincidirá con las transacciones que son exactamente iguales.', + 'new_rule_for_journal_title' => 'Regla basada en la transacción ":description"', + 'new_rule_for_journal_description' => 'Esta regla se basa en la transacción ":description". Coincidirá con las transacciones que son exactamente iguales.', // tags - 'store_new_tag' => 'Crear etiqueta', - 'update_tag' => 'Actualizar etiqueta', - 'no_location_set' => 'Ubicación no establecida.', - 'meta_data' => 'Meta Datos', - 'location' => 'Ubicación', - 'without_date' => 'Sin fecha', - 'result' => 'Resultado', - 'sums_apply_to_range' => 'Todas las sumas aplican al rango seleccionado', - 'mapbox_api_key' => 'Para usar el mapa, obtenga una clave API de MapboxAbra su.env y introduzca este código después de MAPBOX_API_KEY=.', - 'press_object_location' => 'Haga clic o pulse de forma prolongada para definir la ubicación del objeto.', - 'clear_location' => 'Eliminar ubicación', - 'delete_all_selected_tags' => 'Eliminar todas las etiquetas seleccionadas', - 'select_tags_to_delete' => 'No olvide seleccionar algunas etiquetas.', - 'deleted_x_tags' => 'Eliminado :count etiqueta.|Eliminado :count etiquetas.', - 'create_rule_from_transaction' => 'Crear regla basada en la transacción', - 'create_recurring_from_transaction' => 'Crear una transacción recurrente basada en la transacción', - + 'store_new_tag' => 'Crear etiqueta', + 'update_tag' => 'Actualizar etiqueta', + 'no_location_set' => 'Ubicación no establecida.', + 'meta_data' => 'Meta Datos', + 'location' => 'Ubicación', + 'location_first_split' => 'La ubicación de esta transacción puede establecerse en la primera división de esta transacción.', + 'without_date' => 'Sin fecha', + 'result' => 'Resultado', + 'sums_apply_to_range' => 'Todas las sumas aplican al rango seleccionado', + 'mapbox_api_key' => 'Para usar el mapa, obtenga una clave API de MapboxAbra su.env y introduzca este código después de MAPBOX_API_KEY=.', + 'press_object_location' => 'Haga clic o pulse de forma prolongada para definir la ubicación del objeto.', + 'click_tap_location' => 'Haga clic o toque el mapa para agregar una ubicación', + 'clear_location' => 'Eliminar ubicación', + 'delete_all_selected_tags' => 'Eliminar todas las etiquetas seleccionadas', + 'select_tags_to_delete' => 'No olvide seleccionar algunas etiquetas.', + 'deleted_x_tags' => 'Eliminado :count etiqueta.|Eliminado :count etiquetas.', + 'create_rule_from_transaction' => 'Crear regla basada en la transacción', + 'create_recurring_from_transaction' => 'Crear una transacción recurrente basada en la transacción', // preferences - 'dark_mode_option_browser' => 'Deja que tu navegador decida', - 'dark_mode_option_light' => 'Siempre claro', - 'dark_mode_option_dark' => 'Siempre oscuro', - 'equal_to_language' => '(igual al idioma)', - 'dark_mode_preference' => 'Modo oscuro', - 'dark_mode_preference_help' => 'Dígale a Firefly III cuándo usar el modo oscuro.', - 'pref_home_screen_accounts' => 'Cuentas de la pantalla de inicio', - 'pref_home_screen_accounts_help' => '¿Qué cuentas se deben mostrar en la página de inicio?', - 'pref_view_range' => 'Rango de vision', - 'pref_view_range_help' => 'Algunas gráficas se agrupan automáticamente en periodos. Sus presupuestos se agruparán también en períodos. ¿Qué período prefieres?', - 'pref_1D' => 'Un dia', - 'pref_1W' => 'Una semana', - 'pref_1M' => 'Un mes', - 'pref_3M' => 'Tres meses (trimestre)', - 'pref_6M' => 'Seis meses', - 'pref_1Y' => 'Un año', - 'pref_last365' => 'Año pasado', - 'pref_last90' => 'Últimos 90 días', - 'pref_last30' => 'Últimos 30 días', - 'pref_last7' => 'Últimos 7 días', - 'pref_YTD' => 'Año hasta hoy', - 'pref_QTD' => 'Trimestre hasta hoy', - 'pref_MTD' => 'Mes hasta hoy', - 'pref_languages' => 'Idiomas', - 'pref_locale' => 'Configuración del idioma', - 'pref_languages_help' => 'Firefly III soporta varios idiomas. ¿Cuál prefieres?', - 'pref_locale_help' => 'Firefly III le permite configurar otros ajustes locales, como cómo se da formato a las monedas, números y fechas. Las entradas en esta lista pueden no ser soportadas por su sistema. Firefly III no tiene los ajustes de fecha correctos para cada local; póngase en contacto conmigo para obtener mejoras.', - 'pref_locale_no_demo' => 'Esta característica no funcionará para el usuario demo.', - 'pref_custom_fiscal_year' => 'Configuraciónes del año fiscal', - 'pref_custom_fiscal_year_label' => 'Habilitado', - 'pref_custom_fiscal_year_help' => 'En países que utilizan año fiscal diferente del 1 al 31 de diciembre, usted puede cambiarlo y especificar los días de inicio / y termino del año fiscal', - 'pref_fiscal_year_start_label' => 'Fecha de inicio del año fiscal', - 'pref_two_factor_auth' => 'Verificación en 2 pasos', - 'pref_two_factor_auth_help' => 'Cuando usted habilita la verificación en 2 pasos ( también conocida como autenticacion de dos factores) usted agrega una capa adicional de seguridad a su cuenta. usted inicia la sesión que conoce (código de verificación). los códigos de generación son generados por una aplicación de su teléfono, tales como Authy o Google Authenticador.', - 'pref_enable_two_factor_auth' => 'Permita la verificación de 2 pasos', - 'pref_two_factor_auth_disabled' => 'Codigo de verificacion en 2 pasos removido y inabilitado', - 'pref_two_factor_auth_remove_it' => 'No olvide eliminar la cuenta de su aplicación de autenticacion!', - 'pref_two_factor_auth_code' => 'Verificar código', - 'pref_two_factor_auth_code_help' => 'Escanee el código QR con una aplicación en su teléfono como Authy o Google autenticator y ingrese el código generado.', - 'pref_two_factor_auth_reset_code' => 'Reiniciar código de verificación', - 'pref_two_factor_auth_disable_2fa' => 'Deshabilitar 2FA', - '2fa_use_secret_instead' => 'Si no puede escanear el código QR, no dude en utilizar en su lugar el código secreto: :secret.', - '2fa_backup_codes' => 'Almacena estos códigos de copia de seguridad para acceder en caso de que pierda su dispositivo.', - '2fa_already_enabled' => 'La verificación de dos pasos ya está activada.', - 'wrong_mfa_code' => 'Este código MFA no es válido.', - 'pref_save_settings' => 'Guardar la configuración', - 'saved_preferences' => '¡Preferencias guardadas!', - 'preferences_general' => 'General', - 'preferences_frontpage' => 'Pantalla de inicio', - 'preferences_security' => 'Seguridad', - 'preferences_layout' => 'Diseño', - 'preferences_notifications' => 'Notificaciones', - 'pref_home_show_deposits' => 'Mostrar ingresos en la pantalla de inicio', - 'pref_home_show_deposits_info' => 'La pantalla de inicio ya muestra sus cuentas de gastos. ¿debería mostrar también su cuenta de ingresos?', - 'pref_home_do_show_deposits' => 'Sí, mostrarlos', - 'successful_count' => 'de cual :count exitoso', - 'list_page_size_title' => 'Tamaño de pagina', - 'list_page_size_help' => 'Cualquier lista de cosas (cuentas, transacciones, etc) muestra como mucho esta cantidad por pagina.', - 'list_page_size_label' => 'Tamaño de pagina', - 'between_dates' => '(:start y :end)', - 'pref_optional_fields_transaction' => 'Campos opcionales para transacciones', - 'pref_optional_fields_transaction_help' => 'Por defecto no todos los campos se habilitan al crear una nueva transacción (debido al desorden). Aquí puedes habilitar estos campos si crees que pueden ser útiles. Aunque los campos estén desactivados, si los has rellenado serán visibles.', - 'optional_tj_date_fields' => 'Campos de fecha', - 'optional_tj_other_fields' => 'Otros campos', - 'optional_tj_attachment_fields' => 'Campos de datos adjuntos', - 'pref_optional_tj_interest_date' => 'Fecha de intereses', - 'pref_optional_tj_book_date' => 'Fecha del libro de registro', - 'pref_optional_tj_process_date' => 'Fecha de procesamiento', - 'pref_optional_tj_due_date' => 'Fecha de caducidad', - 'pref_optional_tj_payment_date' => 'Fecha de pago', - 'pref_optional_tj_invoice_date' => 'Fecha de la factura', - 'pref_optional_tj_internal_reference' => 'Referencia interna', - 'pref_optional_tj_notes' => 'Notas', - 'pref_optional_tj_attachments' => 'Adjuntos', - 'pref_optional_tj_external_url' => 'URL externa', - 'pref_optional_tj_location' => 'Ubicación', - 'pref_optional_tj_links' => 'Enlaces de transacciones', - 'optional_field_meta_dates' => 'Fechas', - 'optional_field_meta_business' => 'Negocios', - 'optional_field_attachments' => 'Adjuntos', - 'optional_field_meta_data' => 'Opcional meta datos', - 'external_url' => 'URL externa', - 'pref_notification_bill_reminder' => 'Recordatorio sobre facturas que caducan pronto', - 'pref_notification_new_access_token' => 'Alerta cuando se crea un nuevo token de acceso API', - 'pref_notification_transaction_creation' => 'Alerta cuando una transacción se crea automáticamente', - 'pref_notification_user_login' => 'Alertar cuando se inicie sesión desde una nueva ubicación', - 'pref_notification_rule_action_failures' => 'Alerta cuando las acciones de regla fallan al ejecutar (Slack o Discord solamente)', - 'pref_notifications' => 'Notificaciones', - 'pref_notifications_help' => 'Indique si desea recibir estas notificaciones. Algunas notificaciones pueden contener información financiera sensible.', - 'slack_webhook_url' => 'URL del Webhook de Slack', - 'slack_webhook_url_help' => 'Si desea recibir notificaciones de Firefly III a través de Slack, introduzca la URL del webhook aquí. De lo contrario, deje el campo en blanco. Si usted es un administrador, también necesitará establecer esta URL en la administración.', - 'slack_url_label' => 'URL del webhook entrante de Slack', + 'dark_mode_option_browser' => 'Deja que tu navegador decida', + 'dark_mode_option_light' => 'Siempre claro', + 'dark_mode_option_dark' => 'Siempre oscuro', + 'equal_to_language' => '(igual al idioma)', + 'dark_mode_preference' => 'Modo oscuro', + 'dark_mode_preference_help' => 'Dígale a Firefly III cuándo usar el modo oscuro.', + 'pref_home_screen_accounts' => 'Cuentas de la pantalla de inicio', + 'pref_home_screen_accounts_help' => '¿Qué cuentas se deben mostrar en la página de inicio?', + 'pref_view_range' => 'Rango de vision', + 'pref_view_range_help' => 'Algunas gráficas se agrupan automáticamente en periodos. Sus presupuestos se agruparán también en períodos. ¿Qué período prefieres?', + 'pref_1D' => 'Un dia', + 'pref_1W' => 'Una semana', + 'pref_1M' => 'Un mes', + 'pref_3M' => 'Tres meses (trimestre)', + 'pref_6M' => 'Seis meses', + 'pref_1Y' => 'Un año', + 'pref_last365' => 'Año pasado', + 'pref_last90' => 'Últimos 90 días', + 'pref_last30' => 'Últimos 30 días', + 'pref_last7' => 'Últimos 7 días', + 'pref_YTD' => 'Año hasta hoy', + 'pref_QTD' => 'Trimestre hasta hoy', + 'pref_MTD' => 'Mes hasta hoy', + 'pref_languages' => 'Idiomas', + 'pref_locale' => 'Configuración del idioma', + 'pref_languages_help' => 'Firefly III soporta varios idiomas. ¿Cuál prefieres?', + 'pref_locale_help' => 'Firefly III le permite configurar otros ajustes locales, como cómo se da formato a las monedas, números y fechas. Las entradas en esta lista pueden no ser soportadas por su sistema. Firefly III no tiene los ajustes de fecha correctos para cada local; póngase en contacto conmigo para obtener mejoras.', + 'pref_locale_no_demo' => 'Esta característica no funcionará para el usuario demo.', + 'pref_custom_fiscal_year' => 'Configuraciónes del año fiscal', + 'pref_custom_fiscal_year_label' => 'Habilitado', + 'pref_custom_fiscal_year_help' => 'En países que utilizan año fiscal diferente del 1 al 31 de diciembre, usted puede cambiarlo y especificar los días de inicio / y termino del año fiscal', + 'pref_fiscal_year_start_label' => 'Fecha de inicio del año fiscal', + 'pref_two_factor_auth' => 'Verificación en 2 pasos', + 'pref_two_factor_auth_help' => 'Cuando usted habilita la verificación en 2 pasos ( también conocida como autenticacion de dos factores) usted agrega una capa adicional de seguridad a su cuenta. usted inicia la sesión que conoce (código de verificación). los códigos de generación son generados por una aplicación de su teléfono, tales como Authy o Google Authenticador.', + 'pref_enable_two_factor_auth' => 'Permita la verificación de 2 pasos', + 'pref_two_factor_auth_disabled' => 'Codigo de verificacion en 2 pasos removido y inabilitado', + 'pref_two_factor_auth_remove_it' => 'No olvide eliminar la cuenta de su aplicación de autenticacion!', + 'pref_two_factor_auth_code' => 'Verificar código', + 'pref_two_factor_auth_code_help' => 'Escanee el código QR con una aplicación en su teléfono como Authy o Google autenticator y ingrese el código generado.', + 'pref_two_factor_auth_reset_code' => 'Reiniciar código de verificación', + 'pref_two_factor_auth_disable_2fa' => 'Deshabilitar 2FA', + '2fa_use_secret_instead' => 'Si no puede escanear el código QR, no dude en utilizar en su lugar el código secreto: :secret.', + '2fa_backup_codes' => 'Almacena estos códigos de copia de seguridad para acceder en caso de que pierda su dispositivo.', + '2fa_already_enabled' => 'La verificación de dos pasos ya está activada.', + 'wrong_mfa_code' => 'Este código MFA no es válido.', + 'pref_save_settings' => 'Guardar la configuración', + 'saved_preferences' => '¡Preferencias guardadas!', + 'preferences_general' => 'General', + 'preferences_frontpage' => 'Pantalla de inicio', + 'preferences_security' => 'Seguridad', + 'preferences_layout' => 'Diseño', + 'preferences_notifications' => 'Notificaciones', + 'pref_home_show_deposits' => 'Mostrar ingresos en la pantalla de inicio', + 'pref_home_show_deposits_info' => 'La pantalla de inicio ya muestra sus cuentas de gastos. ¿debería mostrar también su cuenta de ingresos?', + 'pref_home_do_show_deposits' => 'Sí, mostrarlos', + 'successful_count' => 'de cual :count exitoso', + 'list_page_size_title' => 'Tamaño de pagina', + 'list_page_size_help' => 'Cualquier lista de cosas (cuentas, transacciones, etc) muestra como mucho esta cantidad por pagina.', + 'list_page_size_label' => 'Tamaño de pagina', + 'between_dates' => '(:start y :end)', + 'pref_optional_fields_transaction' => 'Campos opcionales para transacciones', + 'pref_optional_fields_transaction_help' => 'Por defecto no todos los campos se habilitan al crear una nueva transacción (debido al desorden). Aquí puedes habilitar estos campos si crees que pueden ser útiles. Aunque los campos estén desactivados, si los has rellenado serán visibles.', + 'optional_tj_date_fields' => 'Campos de fecha', + 'optional_tj_other_fields' => 'Otros campos', + 'optional_tj_attachment_fields' => 'Campos de datos adjuntos', + 'pref_optional_tj_interest_date' => 'Fecha de intereses', + 'pref_optional_tj_book_date' => 'Fecha del libro de registro', + 'pref_optional_tj_process_date' => 'Fecha de procesamiento', + 'pref_optional_tj_due_date' => 'Fecha de caducidad', + 'pref_optional_tj_payment_date' => 'Fecha de pago', + 'pref_optional_tj_invoice_date' => 'Fecha de la factura', + 'pref_optional_tj_internal_reference' => 'Referencia interna', + 'pref_optional_tj_notes' => 'Notas', + 'pref_optional_tj_attachments' => 'Adjuntos', + 'pref_optional_tj_external_url' => 'URL externa', + 'pref_optional_tj_location' => 'Ubicación', + 'pref_optional_tj_links' => 'Enlaces de transacciones', + 'optional_field_meta_dates' => 'Fechas', + 'optional_field_meta_business' => 'Negocios', + 'optional_field_attachments' => 'Adjuntos', + 'optional_field_meta_data' => 'Opcional meta datos', + 'external_url' => 'URL externa', + 'pref_notification_bill_reminder' => 'Recordatorio sobre facturas que caducan pronto', + 'pref_notification_new_access_token' => 'Alerta cuando se crea un nuevo token de acceso API', + 'pref_notification_transaction_creation' => 'Alerta cuando una transacción se crea automáticamente', + 'pref_notification_user_login' => 'Alertar cuando se inicie sesión desde una nueva ubicación', + 'pref_notification_rule_action_failures' => 'Alerta cuando las acciones de regla fallan al ejecutar (Slack o Discord solamente)', + 'pref_notifications' => 'Notificaciones', + 'pref_notifications_help' => 'Indique si desea recibir estas notificaciones. Algunas notificaciones pueden contener información financiera sensible.', + 'slack_webhook_url' => 'URL del Webhook de Slack', + 'slack_webhook_url_help' => 'Si desea recibir notificaciones de Firefly III a través de Slack, introduzca la URL del webhook aquí. De lo contrario, deje el campo en blanco. Si usted es un administrador, también necesitará establecer esta URL en la administración.', + 'slack_url_label' => 'URL del webhook entrante de Slack', // Financial administrations - 'administration_index' => 'Administración financiera', - 'administrations_index_menu' => 'Administración(es) financiera(s)', + 'administration_index' => 'Administración financiera', + 'administrations_index_menu' => 'Administración(es) financiera(s)', // profile: - 'purge_data_title' => 'Purgar datos de Firefly III', - 'purge_data_expl' => '"Purgar" significa "eliminar lo que ya está eliminado". En circunstancias normales, Firefly III no elimina nada permanentemente. Sólo lo oculta. El botón de abajo borra todos estos registros previamente "eliminados" PARA SIEMPRE.', - 'delete_stuff_header' => 'Borrar y purgar datos', - 'purge_all_data' => 'Purgar todos los registros borrados', - 'purge_data' => 'Purgar datos', - 'purged_all_records' => 'Se han limpiado todos los registros borrados.', - 'delete_data_title' => 'Eliminar datos de Firefly III', - 'permanent_delete_stuff' => 'Puedes eliminar cosas de Firefly III. Usar los botones de abajo significa que tus objetos serán ocultados. No hay ningún botón de deshacer para esto, pero los elementos pueden permanecer en la base de datos y ser recuperados si es necesario.', - 'other_sessions_logged_out' => 'Todas las demás sesiones han sido desconectadas.', - 'delete_unused_accounts' => 'Eliminar cuentas sin usar limpiará sus listas de autocompletado.', - 'delete_all_unused_accounts' => 'Eliminar cuentas no utilizadas', - 'deleted_all_unused_accounts' => 'Todas las cuentas no utilizadas han sido eliminadas', - 'delete_all_budgets' => 'Eliminar todos sus presupuestos', - 'delete_all_categories' => 'Eliminar todas sus categorías', - 'delete_all_tags' => 'Eliminar todas sus etiquetas', - 'delete_all_bills' => 'Borrar TODAS sus facturas', - 'delete_all_piggy_banks' => 'Borrar TODAS sus huchas', - 'delete_all_rules' => 'Borrar TODAS sus reglas', - 'delete_all_recurring' => 'Borrar TODAS sus transacciones recurrentes', - 'delete_all_object_groups' => 'Borrar TODOS sus grupos de objetos', - 'delete_all_accounts' => 'Borrar TODAS sus cuentas', - 'delete_all_asset_accounts' => 'Borrar TODAS sus cuentas de activos', - 'delete_all_expense_accounts' => 'Borrar TODAS sus cuentas de gastos', - 'delete_all_revenue_accounts' => 'Borrar TODAS sus cuentas de ingresos', - 'delete_all_liabilities' => 'Borrar TODOS sus pasivos', - 'delete_all_transactions' => 'Borrar TODAS sus transacciones', - 'delete_all_withdrawals' => 'Borrar TODOS sus gastos', - 'delete_all_deposits' => 'Borrar TODOS sus ingresos', - 'delete_all_transfers' => 'Borrar TODAS sus transferencias', - 'also_delete_transactions' => '¡Eliminar cuentas también eliminará TODAS los gastos, ingresos y transferencias asociados!', - 'deleted_all_budgets' => 'Todos los presupuestos han sido eliminados', - 'deleted_all_categories' => 'Todas las categorías han sido eliminadas', - 'deleted_all_tags' => 'Todas las etiquetas han sido eliminadas', - 'deleted_all_bills' => 'Todas las facturas han sido eliminadas', - 'deleted_all_piggy_banks' => 'Todas las huchas han sido eliminadas', - 'deleted_all_rules' => 'Todas las reglas y grupos de reglas se han eliminado', - 'deleted_all_object_groups' => 'Todos los grupos han sido eliminados', - 'deleted_all_accounts' => 'Todas las cuentas han sido eliminadas', - 'deleted_all_asset_accounts' => 'Todas las cuentas de activos han sido eliminadas', - 'deleted_all_expense_accounts' => 'Todas las cuentas de gastos han sido eliminadas', - 'deleted_all_revenue_accounts' => 'Todas las cuentas de ingresos han sido eliminadas', - 'deleted_all_liabilities' => 'Todos los pasivos se han eliminado', - 'deleted_all_transactions' => 'Todas las transacciones han sido eliminadas', - 'deleted_all_withdrawals' => 'Todos los gastos se han eliminado', - 'deleted_all_deposits' => 'Todos los ingresos han sido eliminados', - 'deleted_all_transfers' => 'Todas las transferencias han sido eliminadas', - 'deleted_all_recurring' => 'Todas las transacciones recurrentes han sido eliminadas', - 'change_your_password' => 'Cambie su contraseña', - 'delete_account' => 'Eliminar cuenta', - 'current_password' => 'Contraseña actual', - 'new_password' => 'Nueva contraseña', - 'new_password_again' => 'Nueva contraseña (de nuevo)', - 'delete_your_account' => 'Borre su cuenta', - 'delete_your_account_help' => 'Eliminando su cuenta también eliminara cualquier otra cuenta, transacciones,cualquierque podría haber salvado en Firefly III. se habrá IDO.', - 'delete_your_account_password' => 'Introduzca su contraseña para continuar.', - 'password' => 'Contraseña', - 'are_you_sure' => '¿Esta usted seguro? usted no puede deshacer esto.', - 'delete_account_button' => 'Borre su cuenta', - 'invalid_current_password' => 'Contraseña actual invalida!', - 'password_changed' => 'Contraseña cambiada!', - 'should_change' => 'La idea es cambiar su contraseña.', - 'invalid_password' => 'Contraseña invalida!', - 'what_is_pw_security' => '¿Que es "verificar la seguridad de contraseña?', - 'secure_pw_title' => 'Como escoger una contraseña segura', - 'forgot_password_response' => 'Gracias. Si existe una cuenta con esta dirección de correo electrónico, encontrarás instrucciones en tu bandeja de entrada.', - 'secure_pw_history' => 'Cada semana leemos en las noticias sobre un sitio que pierde las contraseñas de sus usuarios. Hackers y ladrones utilizan estas contraseñas para intentar robar tu información privada. Esta información es valiosa.', - 'secure_pw_ff' => '¿Utiliza la misma contraseña a través de Internet? Si un sitio pierde su contraseña, los hackers tienen acceso a todos sus datos. Firefly III depende de usted para elegir una contraseña fuerte y única para proteger sus registros financieros.', - 'secure_pw_check_box' => 'Para ayudarte a hacer eso Firefly III puede comprobar si la contraseña que quieres usar ha sido robada en el pasado. Si este es el caso, Firefly III te aconseja NO usar esa contraseña.', - 'secure_pw_working_title' => '¿Cómo funciona?', - 'secure_pw_working' => 'Marcando la casilla, Firefly III enviará los cinco primeros caracteres del hash SHA1 de su contraseña al sitio web de Troy Hunt para ver si esta en la lista. Esto le impedirá a usted usar contraseñas inseguras como se recomienda en la última Publicación Especial de NISH sobre este tema.', - 'secure_pw_should' => '¿Debo chequear la casilla?', - 'secure_pw_long_password' => 'Sí. Verificar siempre que su contraseña es segura.', - 'command_line_token' => 'Token de linea de comando', - 'explain_command_line_token' => 'Necesita este token para realizar opciones de línea de comandos, como exportar datos. Sin él, ese comando sensible no funcionará. No comparta el token de línea de comandos. Nadie le pedirá este token, ni siquiera yo. Si teme que lo haya perdido, o si es paranoico, vuelva a generar este token usando el botón.', - 'regenerate_command_line_token' => 'Regenerar token de línea de comando', - 'token_regenerated' => 'Se generó un nuevo token de línea de comandos', - 'change_your_email' => 'Cambie su dirección de correo', - 'email_verification' => 'Un mensaje de correo electrónico sera enviado a su nueva dirección de correo viejas y nuevas. por motivos de seguridad, usted no podrá iniciar sesión hasta que verifique su nueva dirección de correo electrónico. Si no esta seguro de si su instalación Firefly III puede enviar correos electrónicos, por favor no use esta función. Si usted es administrador, usted puede probar esto en la administracion.', - 'email_changed_logout' => 'Hasta que usted verifique su dirección de correo electrónico, usted no puede iniciar sesión.', - 'login_with_new_email' => 'Usted puede ahora iniciar sesión con su nueva dirección de correo electrónico.', - 'login_with_old_email' => 'Usted puede ahora iniciar sesión con su vieja dirección de correo electrónico otra vez.', - 'login_provider_local_only' => 'Esta acción no está disponible cuando se identifica a través de ":login_provider".', - 'external_user_mgt_disabled' => 'Esta acción no está disponible cuando Firefly III no es responsable de la gestión de usuarios o de la autenticación.', - 'external_auth_disabled' => 'Esta acción no está disponible cuando Firefly III no es responsable del manejo de la autenticación.', - 'delete_local_info_only' => "Debido a que Firefly III no es responsable de la gestión de usuarios o de la autenticación, esta función sólo eliminará la información local de Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Clientes de OAuth', - 'profile_oauth_no_clients' => 'No ha creado ningún cliente OAuth.', - 'profile_oauth_clients_external_auth' => 'Si está utilizando un proveedor de autenticación externo como Authelia, los clientes OAuth no funcionarán. Sólo puede utilizar tokens de acceso personal.', - 'profile_oauth_clients_header' => 'Clientes', - 'profile_oauth_client_id' => 'ID del cliente', - 'profile_oauth_client_name' => 'Nombre', - 'profile_oauth_client_secret' => 'Secreto', - 'profile_oauth_create_new_client' => 'Crear un Nuevo Cliente', - 'profile_oauth_create_client' => 'Crear Cliente', - 'profile_oauth_edit_client' => 'Editar Cliente', - 'profile_oauth_name_help' => 'Algo que sus usuarios reconocerán y confiarán.', - 'profile_oauth_redirect_url' => 'Redirigir URL', - 'profile_oauth_redirect_url_help' => 'La URL de devolución de autorización de su aplicación.', - 'profile_authorized_apps' => 'Aplicaciones autorizadas', - 'profile_authorized_clients' => 'Clientes autorizados', - 'profile_scopes' => 'Ámbitos', - 'profile_revoke' => 'Revocar', - 'profile_oauth_client_secret_title' => 'Secreto del Cliente', - 'profile_oauth_client_secret_expl' => 'Aquí está su nuevo secreto de cliente. Esta es la única vez que se mostrará así que no lo pierda! Ahora puede usar este secreto para hacer solicitudes de API.', - 'profile_personal_access_tokens' => 'Tokens de acceso personal', - 'profile_personal_access_token' => 'Token de acceso personal', - 'profile_oauth_confidential' => 'Confidencial', - 'profile_oauth_confidential_help' => 'Requerir que el cliente se autentifique con un secreto. Los clientes confidenciales pueden mantener las credenciales de forma segura sin exponerlas a partes no autorizadas. Las aplicaciones públicas, como aplicaciones de escritorio nativo o SPA de JavaScript, no pueden guardar secretos de forma segura.', - 'profile_personal_access_token_explanation' => 'Aquí está su nuevo token de acceso personal. Esta es la única vez que se mostrará así que ¡no lo pierda! Ahora puede usar este token para hacer solicitudes de la API.', - 'profile_no_personal_access_token' => 'No ha creado ningún token de acceso personal.', - 'profile_create_new_token' => 'Crear nuevo token', - 'profile_create_token' => 'Crear token', - 'profile_create' => 'Crear', - 'profile_save_changes' => 'Guardar cambios', - 'profile_whoops' => '¡Ups!', - 'profile_something_wrong' => '¡Algo salió mal!', - 'profile_try_again' => 'Algo salió mal. Por favor, vuelva a intentarlo.', - 'amounts' => 'Importes', - 'multi_account_warning_unknown' => 'Dependiendo del tipo de transacción que cree, la cuenta de origen y/o destino de divisiones posteriores puede ser anulada por lo que se define en la primera división de la transacción.', - 'multi_account_warning_withdrawal' => 'Tenga en cuenta que la cuenta de origen de las divisiones posteriores será anulada por lo que se defina en la primera división del gasto.', - 'multi_account_warning_deposit' => 'Tenga en cuenta que la cuenta de destino de las divisiones posteriores será anulada por lo que se defina en la primera división del retiro.', - 'multi_account_warning_transfer' => 'Tenga en cuenta que la cuenta de origen + destino de divisiones posteriores será anulada por lo que se defina en la primera división de la transferencia.', + 'purge_data_title' => 'Purgar datos de Firefly III', + 'purge_data_expl' => '"Purgar" significa "eliminar lo que ya está eliminado". En circunstancias normales, Firefly III no elimina nada permanentemente. Sólo lo oculta. El botón de abajo borra todos estos registros previamente "eliminados" PARA SIEMPRE.', + 'delete_stuff_header' => 'Borrar y purgar datos', + 'purge_all_data' => 'Purgar todos los registros borrados', + 'purge_data' => 'Purgar datos', + 'purged_all_records' => 'Se han limpiado todos los registros borrados.', + 'delete_data_title' => 'Eliminar datos de Firefly III', + 'permanent_delete_stuff' => 'Puedes eliminar cosas de Firefly III. Usar los botones de abajo significa que tus objetos serán ocultados. No hay ningún botón de deshacer para esto, pero los elementos pueden permanecer en la base de datos y ser recuperados si es necesario.', + 'other_sessions_logged_out' => 'Todas las demás sesiones han sido desconectadas.', + 'delete_unused_accounts' => 'Eliminar cuentas sin usar limpiará sus listas de autocompletado.', + 'delete_all_unused_accounts' => 'Eliminar cuentas no utilizadas', + 'deleted_all_unused_accounts' => 'Todas las cuentas no utilizadas han sido eliminadas', + 'delete_all_budgets' => 'Eliminar todos sus presupuestos', + 'delete_all_categories' => 'Eliminar todas sus categorías', + 'delete_all_tags' => 'Eliminar todas sus etiquetas', + 'delete_all_bills' => 'Borrar TODAS sus facturas', + 'delete_all_piggy_banks' => 'Borrar TODAS sus huchas', + 'delete_all_rules' => 'Borrar TODAS sus reglas', + 'delete_all_recurring' => 'Borrar TODAS sus transacciones recurrentes', + 'delete_all_object_groups' => 'Borrar TODOS sus grupos de objetos', + 'delete_all_accounts' => 'Borrar TODAS sus cuentas', + 'delete_all_asset_accounts' => 'Borrar TODAS sus cuentas de activos', + 'delete_all_expense_accounts' => 'Borrar TODAS sus cuentas de gastos', + 'delete_all_revenue_accounts' => 'Borrar TODAS sus cuentas de ingresos', + 'delete_all_liabilities' => 'Borrar TODOS sus pasivos', + 'delete_all_transactions' => 'Borrar TODAS sus transacciones', + 'delete_all_withdrawals' => 'Borrar TODOS sus gastos', + 'delete_all_deposits' => 'Borrar TODOS sus ingresos', + 'delete_all_transfers' => 'Borrar TODAS sus transferencias', + 'also_delete_transactions' => '¡Eliminar cuentas también eliminará TODAS los gastos, ingresos y transferencias asociados!', + 'deleted_all_budgets' => 'Todos los presupuestos han sido eliminados', + 'deleted_all_categories' => 'Todas las categorías han sido eliminadas', + 'deleted_all_tags' => 'Todas las etiquetas han sido eliminadas', + 'deleted_all_bills' => 'Todas las facturas han sido eliminadas', + 'deleted_all_piggy_banks' => 'Todas las huchas han sido eliminadas', + 'deleted_all_rules' => 'Todas las reglas y grupos de reglas se han eliminado', + 'deleted_all_object_groups' => 'Todos los grupos han sido eliminados', + 'deleted_all_accounts' => 'Todas las cuentas han sido eliminadas', + 'deleted_all_asset_accounts' => 'Todas las cuentas de activos han sido eliminadas', + 'deleted_all_expense_accounts' => 'Todas las cuentas de gastos han sido eliminadas', + 'deleted_all_revenue_accounts' => 'Todas las cuentas de ingresos han sido eliminadas', + 'deleted_all_liabilities' => 'Todos los pasivos se han eliminado', + 'deleted_all_transactions' => 'Todas las transacciones han sido eliminadas', + 'deleted_all_withdrawals' => 'Todos los gastos se han eliminado', + 'deleted_all_deposits' => 'Todos los ingresos han sido eliminados', + 'deleted_all_transfers' => 'Todas las transferencias han sido eliminadas', + 'deleted_all_recurring' => 'Todas las transacciones recurrentes han sido eliminadas', + 'change_your_password' => 'Cambie su contraseña', + 'delete_account' => 'Eliminar cuenta', + 'current_password' => 'Contraseña actual', + 'new_password' => 'Nueva contraseña', + 'new_password_again' => 'Nueva contraseña (de nuevo)', + 'delete_your_account' => 'Borre su cuenta', + 'delete_your_account_help' => 'Eliminando su cuenta también eliminara cualquier otra cuenta, transacciones,cualquierque podría haber salvado en Firefly III. se habrá IDO.', + 'delete_your_account_password' => 'Introduzca su contraseña para continuar.', + 'password' => 'Contraseña', + 'are_you_sure' => '¿Esta usted seguro? usted no puede deshacer esto.', + 'delete_account_button' => 'Borre su cuenta', + 'invalid_current_password' => 'Contraseña actual invalida!', + 'password_changed' => 'Contraseña cambiada!', + 'should_change' => 'La idea es cambiar su contraseña.', + 'invalid_password' => 'Contraseña invalida!', + 'what_is_pw_security' => '¿Que es "verificar la seguridad de contraseña?', + 'secure_pw_title' => 'Como escoger una contraseña segura', + 'forgot_password_response' => 'Gracias. Si existe una cuenta con esta dirección de correo electrónico, encontrarás instrucciones en tu bandeja de entrada.', + 'secure_pw_history' => 'Cada semana leemos en las noticias sobre un sitio que pierde las contraseñas de sus usuarios. Hackers y ladrones utilizan estas contraseñas para intentar robar tu información privada. Esta información es valiosa.', + 'secure_pw_ff' => '¿Utiliza la misma contraseña a través de Internet? Si un sitio pierde su contraseña, los hackers tienen acceso a todos sus datos. Firefly III depende de usted para elegir una contraseña fuerte y única para proteger sus registros financieros.', + 'secure_pw_check_box' => 'Para ayudarte a hacer eso Firefly III puede comprobar si la contraseña que quieres usar ha sido robada en el pasado. Si este es el caso, Firefly III te aconseja NO usar esa contraseña.', + 'secure_pw_working_title' => '¿Cómo funciona?', + 'secure_pw_working' => 'Marcando la casilla, Firefly III enviará los cinco primeros caracteres del hash SHA1 de su contraseña al sitio web de Troy Hunt para ver si esta en la lista. Esto le impedirá a usted usar contraseñas inseguras como se recomienda en la última Publicación Especial de NISH sobre este tema.', + 'secure_pw_should' => '¿Debo chequear la casilla?', + 'secure_pw_long_password' => 'Sí. Verificar siempre que su contraseña es segura.', + 'command_line_token' => 'Token de linea de comando', + 'explain_command_line_token' => 'Necesita este token para realizar opciones de línea de comandos, como exportar datos. Sin él, ese comando sensible no funcionará. No comparta el token de línea de comandos. Nadie le pedirá este token, ni siquiera yo. Si teme que lo haya perdido, o si es paranoico, vuelva a generar este token usando el botón.', + 'regenerate_command_line_token' => 'Regenerar token de línea de comando', + 'token_regenerated' => 'Se generó un nuevo token de línea de comandos', + 'change_your_email' => 'Cambie su dirección de correo', + 'email_verification' => 'Un mensaje de correo electrónico sera enviado a su nueva dirección de correo viejas y nuevas. por motivos de seguridad, usted no podrá iniciar sesión hasta que verifique su nueva dirección de correo electrónico. Si no esta seguro de si su instalación Firefly III puede enviar correos electrónicos, por favor no use esta función. Si usted es administrador, usted puede probar esto en la administracion.', + 'email_changed_logout' => 'Hasta que usted verifique su dirección de correo electrónico, usted no puede iniciar sesión.', + 'login_with_new_email' => 'Usted puede ahora iniciar sesión con su nueva dirección de correo electrónico.', + 'login_with_old_email' => 'Usted puede ahora iniciar sesión con su vieja dirección de correo electrónico otra vez.', + 'login_provider_local_only' => 'Esta acción no está disponible cuando se identifica a través de ":login_provider".', + 'external_user_mgt_disabled' => 'Esta acción no está disponible cuando Firefly III no es responsable de la gestión de usuarios o de la autenticación.', + 'external_auth_disabled' => 'Esta acción no está disponible cuando Firefly III no es responsable del manejo de la autenticación.', + 'delete_local_info_only' => 'Debido a que Firefly III no es responsable de la gestión de usuarios o de la autenticación, esta función sólo eliminará la información local de Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Clientes de OAuth', + 'profile_oauth_no_clients' => 'No ha creado ningún cliente OAuth.', + 'profile_oauth_clients_external_auth' => 'Si está utilizando un proveedor de autenticación externo como Authelia, los clientes OAuth no funcionarán. Sólo puede utilizar tokens de acceso personal.', + 'profile_oauth_clients_header' => 'Clientes', + 'profile_oauth_client_id' => 'ID del cliente', + 'profile_oauth_client_name' => 'Nombre', + 'profile_oauth_client_secret' => 'Secreto', + 'profile_oauth_create_new_client' => 'Crear un Nuevo Cliente', + 'profile_oauth_create_client' => 'Crear Cliente', + 'profile_oauth_edit_client' => 'Editar Cliente', + 'profile_oauth_name_help' => 'Algo que sus usuarios reconocerán y confiarán.', + 'profile_oauth_redirect_url' => 'Redirigir URL', + 'profile_oauth_redirect_url_help' => 'La URL de devolución de autorización de su aplicación.', + 'profile_authorized_apps' => 'Aplicaciones autorizadas', + 'profile_authorized_clients' => 'Clientes autorizados', + 'profile_scopes' => 'Ámbitos', + 'profile_revoke' => 'Revocar', + 'profile_oauth_client_secret_title' => 'Secreto del Cliente', + 'profile_oauth_client_secret_expl' => 'Aquí está su nuevo secreto de cliente. Esta es la única vez que se mostrará así que no lo pierda! Ahora puede usar este secreto para hacer solicitudes de API.', + 'profile_personal_access_tokens' => 'Tokens de acceso personal', + 'profile_personal_access_token' => 'Token de acceso personal', + 'profile_oauth_confidential' => 'Confidencial', + 'profile_oauth_confidential_help' => 'Requerir que el cliente se autentifique con un secreto. Los clientes confidenciales pueden mantener las credenciales de forma segura sin exponerlas a partes no autorizadas. Las aplicaciones públicas, como aplicaciones de escritorio nativo o SPA de JavaScript, no pueden guardar secretos de forma segura.', + 'profile_personal_access_token_explanation' => 'Aquí está su nuevo token de acceso personal. Esta es la única vez que se mostrará así que ¡no lo pierda! Ahora puede usar este token para hacer solicitudes de la API.', + 'profile_no_personal_access_token' => 'No ha creado ningún token de acceso personal.', + 'profile_create_new_token' => 'Crear nuevo token', + 'profile_create_token' => 'Crear token', + 'profile_create' => 'Crear', + 'profile_save_changes' => 'Guardar cambios', + 'profile_whoops' => '¡Ups!', + 'profile_something_wrong' => '¡Algo salió mal!', + 'profile_try_again' => 'Algo salió mal. Por favor, vuelva a intentarlo.', + 'amounts' => 'Importes', + 'multi_account_warning_unknown' => 'Dependiendo del tipo de transacción que cree, la cuenta de origen y/o destino de divisiones posteriores puede ser anulada por lo que se define en la primera división de la transacción.', + 'multi_account_warning_withdrawal' => 'Tenga en cuenta que la cuenta de origen de las divisiones posteriores será anulada por lo que se defina en la primera división del gasto.', + 'multi_account_warning_deposit' => 'Tenga en cuenta que la cuenta de destino de las divisiones posteriores será anulada por lo que se defina en la primera división del retiro.', + 'multi_account_warning_transfer' => 'Tenga en cuenta que la cuenta de origen + destino de divisiones posteriores será anulada por lo que se defina en la primera división de la transferencia.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Exportar datos de Firefly III', - 'export_data_menu' => 'Exportar datos', - 'export_data_bc' => 'Exportar datos de Firefly III', - 'export_data_main_title' => 'Exportar datos de Firefly III', - 'export_data_expl' => 'Este enlace le permite exportar todas las transacciones + metadatos de Firefly III. Por favor, consulte la ayuda (icono (?) superior derecho) para obtener más información sobre el proceso.', - 'export_data_all_transactions' => 'Exportar todas las transacciones', - 'export_data_advanced_expl' => 'Si necesita un tipo de exportación más avanzado o específico, lea la ayuda sobre cómo usar el comando de consola php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Exportar datos de Firefly III', + 'export_data_menu' => 'Exportar datos', + 'export_data_bc' => 'Exportar datos de Firefly III', + 'export_data_main_title' => 'Exportar datos de Firefly III', + 'export_data_expl' => 'Este enlace le permite exportar todas las transacciones + metadatos de Firefly III. Por favor, consulte la ayuda (icono (?) superior derecho) para obtener más información sobre el proceso.', + 'export_data_all_transactions' => 'Exportar todas las transacciones', + 'export_data_advanced_expl' => 'Si necesita un tipo de exportación más avanzado o específico, lea la ayuda sobre cómo usar el comando de consola php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Un archivo adjunto:count archivos adjuntos', - 'attachments' => 'Archivos adjuntos', - 'edit_attachment' => 'Editar cuenta de archivos ":name"', - 'update_attachment' => 'Actualizar archivo adjunto', - 'delete_attachment' => 'Eliminar archivo adjunto ":name"', - 'attachment_deleted' => 'Eliminar archivo adjunto ":name"', - 'liabilities_deleted' => 'Pasivo eliminado ":name"', - 'attachment_updated' => 'Actualizar archivo adjunto ":name"', - 'upload_max_file_size' => 'Tamaño máximo de archivo::size', - 'list_all_attachments' => 'Listado de documentos adjuntos', + 'nr_of_attachments' => 'Un archivo adjunto:count archivos adjuntos', + 'attachments' => 'Archivos adjuntos', + 'edit_attachment' => 'Editar cuenta de archivos ":name"', + 'update_attachment' => 'Actualizar archivo adjunto', + 'delete_attachment' => 'Eliminar archivo adjunto ":name"', + 'attachment_deleted' => 'Eliminar archivo adjunto ":name"', + 'liabilities_deleted' => 'Pasivo eliminado ":name"', + 'attachment_updated' => 'Actualizar archivo adjunto ":name"', + 'upload_max_file_size' => 'Tamaño máximo de archivo::size', + 'list_all_attachments' => 'Listado de documentos adjuntos', // transaction index - 'title_expenses' => 'Gastos', - 'title_withdrawal' => 'Gastos', - 'title_revenue' => 'Ingresos / salarios', - 'title_deposit' => 'Ingresos / salarios', - 'title_transfer' => 'Transferencias', - 'title_transfers' => 'Transferencias', - 'submission_options' => 'Opciones de envío', - 'apply_rules_checkbox' => 'Aplicar reglas', - 'fire_webhooks_checkbox' => 'Disparar webhooks', + 'is_reconciled_fields_dropped' => 'Debido a que esta transacción está reconciliada, no podrá actualizar las cuentas, ni las cantidades.', + 'title_expenses' => 'Gastos', + 'title_withdrawal' => 'Gastos', + 'title_revenue' => 'Ingresos / salarios', + 'title_deposit' => 'Ingresos / salarios', + 'title_transfer' => 'Transferencias', + 'title_transfers' => 'Transferencias', + 'submission_options' => 'Opciones de envío', + 'apply_rules_checkbox' => 'Aplicar reglas', + 'fire_webhooks_checkbox' => 'Disparar webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Esta transferencia ya es un gasto', - 'convert_is_already_type_Deposit' => 'Esta transacción ya es un deposito', - 'convert_is_already_type_Transfer' => 'Esta transacción ya es una transferencia', - 'convert_to_Withdrawal' => 'Convierta ":description" a un gasto', - 'convert_to_Deposit' => 'Convierta ":description" en un ingreso', - 'convert_to_Transfer' => 'Convierta ":description" en una transferencia', - 'convert_options_WithdrawalDeposit' => 'Convertir un gasto de efectivo en un ingreso', - 'convert_options_WithdrawalTransfer' => 'Convertir una retirada de efectivo en una transferencia', - 'convert_options_DepositTransfer' => 'Convertir un ingreso en una transferencia', - 'convert_options_DepositWithdrawal' => 'Convertir un depósito en una retirada de efectivo', - 'convert_options_TransferWithdrawal' => 'Convertir una transferencia en una retirada de efectivo', - 'convert_options_TransferDeposit' => 'Convertir una transferencia en un ingreso', - 'convert_Withdrawal_to_deposit' => 'Convierta este gasto en un ingreso', - 'convert_Withdrawal_to_transfer' => 'Convierta este gasto en una transferencia', - 'convert_Deposit_to_withdrawal' => 'Convierta este ingreso en un gasto', - 'convert_Deposit_to_transfer' => 'Convierta este ingreso en una transferencia', - 'convert_Transfer_to_deposit' => 'Convierta esta transferencia en un deposito', - 'convert_Transfer_to_withdrawal' => 'Convierta esta transferencia en un gasto', - 'convert_please_set_revenue_source' => 'Por favor elija la cuenta de ingresos de donde vendrá el dinero.', - 'convert_please_set_asset_destination' => 'Por favor elija la cuenta de activos a donde el dinero se destinara.', - 'convert_please_set_expense_destination' => 'Por favor elija la cuenta de gastos a la que ira el dinero.', - 'convert_please_set_asset_source' => 'Por favor elija la cuenta de activos de donde vendrá el dinero.', - 'convert_expl_w_d' => 'Al convertir de un gasto a un ingreso, el dinero será depositado en la cuenta de destino indicada en lugar de ser retirado de la misma.| Cuando se convierte de un gasto a un ingreso, el dinero será depositado en las cuentas de destino indicadas en lugar de ser retirado de las mismas.', - 'convert_expl_w_t' => 'Al convertir un gasto en una transferencia, el dinero se transferirá fuera de la cuenta de origen a otra cuenta de activos o pasivos en lugar de ser gastado en la cuenta de gastos originales. |Al convertir un gasto en una transferencia, el dinero se transferirá fuera de las cuentas de origen a otras cuentas de activos o pasivos en lugar de gastarse en las cuentas de gastos originales.', - 'convert_expl_d_w' => 'Al convertir un ingreso en gasto, el dinero será retirado de la cuenta de origen mostrada en lugar de ser depositado en ella. |Al convertir un ingreso en un gasto, el dinero se retirará de las cuentas de origen mostradas en lugar de depositarse en ellas.', - 'convert_expl_d_t' => 'Cuando convierte un depósito en una transferencia, el dinero será depositado en la cuenta de destino listada desde cualquiera de sus cuentas de activos o pasivos. Cuando usted convierte un depósito en una transferencia, el dinero será depositado en las cuentas de destino listadas desde cualquiera de sus cuentas de activos o de responsabilidad.', - 'convert_expl_t_w' => 'Cuando usted convierte una transferencia en un gasto, el dinero se gastará en la cuenta de destino que haya establecido aquí, en lugar de ser transferido.|Cuando usted convierte una transferencia en un gasto, el dinero se gastará en las cuentas de destino que haya establecido aquí, en lugar de ser transferido.', - 'convert_expl_t_d' => 'Cuando usted convierte una transferencia en un depósito, el dinero será depositado en la cuenta de destino que usted ve aquí, en lugar de ser transferido a ella. |Cuando usted convierte una transferencia en un depósito, el dinero será depositado en las cuentas de destino que usted ve aquí, en lugar de ser transferido a ellas.', - 'convert_select_sources' => 'Para completar la conversión, por favor establezca la nueva cuenta de origen a continuación.|Para completar la conversión, por favor configure las nuevas cuentas de origen a continuación.', - 'convert_select_destinations' => 'Para completar la conversión, por favor establezca la nueva cuenta de origen a continuación.|Para completar la conversión, por favor configure las nuevas cuentas de origen a continuación.', - 'converted_to_Withdrawal' => 'La transacción se convirtió en un gasto', - 'converted_to_Deposit' => 'La transacción se ha convertido en un ingreso', - 'converted_to_Transfer' => 'La transacción se convirtió en transferencia', - 'invalid_convert_selection' => 'L a cuenta que usted ha selecionado ya esta en uso o no existe.', - 'source_or_dest_invalid' => 'No pude encontrar los detalles correctos de la transacción. La conversión no es posible.', - 'convert_to_withdrawal' => 'Convertir a gasto', - 'convert_to_deposit' => 'Convertir a ingreso', - 'convert_to_transfer' => 'Convertir a transferencia', + 'convert_is_already_type_Withdrawal' => 'Esta transferencia ya es un gasto', + 'convert_is_already_type_Deposit' => 'Esta transacción ya es un deposito', + 'convert_is_already_type_Transfer' => 'Esta transacción ya es una transferencia', + 'convert_to_Withdrawal' => 'Convierta ":description" a un gasto', + 'convert_to_Deposit' => 'Convierta ":description" en un ingreso', + 'convert_to_Transfer' => 'Convierta ":description" en una transferencia', + 'convert_options_WithdrawalDeposit' => 'Convertir un gasto de efectivo en un ingreso', + 'convert_options_WithdrawalTransfer' => 'Convertir una retirada de efectivo en una transferencia', + 'convert_options_DepositTransfer' => 'Convertir un ingreso en una transferencia', + 'convert_options_DepositWithdrawal' => 'Convertir un depósito en una retirada de efectivo', + 'convert_options_TransferWithdrawal' => 'Convertir una transferencia en una retirada de efectivo', + 'convert_options_TransferDeposit' => 'Convertir una transferencia en un ingreso', + 'convert_Withdrawal_to_deposit' => 'Convierta este gasto en un ingreso', + 'convert_Withdrawal_to_transfer' => 'Convierta este gasto en una transferencia', + 'convert_Deposit_to_withdrawal' => 'Convierta este ingreso en un gasto', + 'convert_Deposit_to_transfer' => 'Convierta este ingreso en una transferencia', + 'convert_Transfer_to_deposit' => 'Convierta esta transferencia en un deposito', + 'convert_Transfer_to_withdrawal' => 'Convierta esta transferencia en un gasto', + 'convert_please_set_revenue_source' => 'Por favor elija la cuenta de ingresos de donde vendrá el dinero.', + 'convert_please_set_asset_destination' => 'Por favor elija la cuenta de activos a donde el dinero se destinara.', + 'convert_please_set_expense_destination' => 'Por favor elija la cuenta de gastos a la que ira el dinero.', + 'convert_please_set_asset_source' => 'Por favor elija la cuenta de activos de donde vendrá el dinero.', + 'convert_expl_w_d' => 'Al convertir de un gasto a un ingreso, el dinero será depositado en la cuenta de destino indicada en lugar de ser retirado de la misma.| Cuando se convierte de un gasto a un ingreso, el dinero será depositado en las cuentas de destino indicadas en lugar de ser retirado de las mismas.', + 'convert_expl_w_t' => 'Al convertir un gasto en una transferencia, el dinero se transferirá fuera de la cuenta de origen a otra cuenta de activos o pasivos en lugar de ser gastado en la cuenta de gastos originales. |Al convertir un gasto en una transferencia, el dinero se transferirá fuera de las cuentas de origen a otras cuentas de activos o pasivos en lugar de gastarse en las cuentas de gastos originales.', + 'convert_expl_d_w' => 'Al convertir un ingreso en gasto, el dinero será retirado de la cuenta de origen mostrada en lugar de ser depositado en ella. |Al convertir un ingreso en un gasto, el dinero se retirará de las cuentas de origen mostradas en lugar de depositarse en ellas.', + 'convert_expl_d_t' => 'Cuando convierte un depósito en una transferencia, el dinero será depositado en la cuenta de destino listada desde cualquiera de sus cuentas de activos o pasivos. Cuando usted convierte un depósito en una transferencia, el dinero será depositado en las cuentas de destino listadas desde cualquiera de sus cuentas de activos o de responsabilidad.', + 'convert_expl_t_w' => 'Cuando usted convierte una transferencia en un gasto, el dinero se gastará en la cuenta de destino que haya establecido aquí, en lugar de ser transferido.|Cuando usted convierte una transferencia en un gasto, el dinero se gastará en las cuentas de destino que haya establecido aquí, en lugar de ser transferido.', + 'convert_expl_t_d' => 'Cuando usted convierte una transferencia en un depósito, el dinero será depositado en la cuenta de destino que usted ve aquí, en lugar de ser transferido a ella. |Cuando usted convierte una transferencia en un depósito, el dinero será depositado en las cuentas de destino que usted ve aquí, en lugar de ser transferido a ellas.', + 'convert_select_sources' => 'Para completar la conversión, por favor establezca la nueva cuenta de origen a continuación.|Para completar la conversión, por favor configure las nuevas cuentas de origen a continuación.', + 'convert_select_destinations' => 'Para completar la conversión, por favor establezca la nueva cuenta de origen a continuación.|Para completar la conversión, por favor configure las nuevas cuentas de origen a continuación.', + 'converted_to_Withdrawal' => 'La transacción se convirtió en un gasto', + 'converted_to_Deposit' => 'La transacción se ha convertido en un ingreso', + 'converted_to_Transfer' => 'La transacción se convirtió en transferencia', + 'invalid_convert_selection' => 'L a cuenta que usted ha selecionado ya esta en uso o no existe.', + 'source_or_dest_invalid' => 'No pude encontrar los detalles correctos de la transacción. La conversión no es posible.', + 'convert_to_withdrawal' => 'Convertir a gasto', + 'convert_to_deposit' => 'Convertir a ingreso', + 'convert_to_transfer' => 'Convertir a transferencia', // create new stuff: - 'create_new_withdrawal' => 'Crear nuevo gasto', - 'create_new_deposit' => 'Crear nuevo ingreso', - 'create_new_transfer' => 'Crear nueva transferencia', - 'create_new_asset' => 'Crear nueva cuenta de activos', - 'create_new_liabilities' => 'Crear nuevo pasivo', - 'create_new_expense' => 'Crear nueva cuenta de gastos', - 'create_new_revenue' => 'Crear nueva cuenta de ingresos', - 'create_new_piggy_bank' => 'Crear nueva hucha', - 'create_new_bill' => 'Crear nueva factura', - 'create_new_subscription' => 'Crear nueva suscripción', - 'create_new_rule' => 'Crear nueva regla', + 'create_new_withdrawal' => 'Crear nuevo gasto', + 'create_new_deposit' => 'Crear nuevo ingreso', + 'create_new_transfer' => 'Crear nueva transferencia', + 'create_new_asset' => 'Crear nueva cuenta de activos', + 'create_new_liabilities' => 'Crear nuevo pasivo', + 'create_new_expense' => 'Crear nueva cuenta de gastos', + 'create_new_revenue' => 'Crear nueva cuenta de ingresos', + 'create_new_piggy_bank' => 'Crear nueva hucha', + 'create_new_bill' => 'Crear nueva factura', + 'create_new_subscription' => 'Crear nueva suscripción', + 'create_new_rule' => 'Crear nueva regla', // currencies: - 'create_currency' => 'Crear nueva moneda', - 'store_currency' => 'Crear moneda', - 'update_currency' => 'Actualizar moneda', - 'new_default_currency' => ':name es ahora moneda por defecto.', - 'cannot_delete_currency' => 'No puede eliminar :name porque todavía esta en uso.', - 'cannot_delete_fallback_currency' => ':name es la moneda de reserva del sistema y no se puede eliminar.', - 'cannot_disable_currency_journals' => 'No se puede desactivar :name porque las transacciones siguen utilizándola.', - 'cannot_disable_currency_last_left' => 'No se puede desactivar :name porque es la última moneda habilitada.', - 'cannot_disable_currency_account_meta' => 'No se puede desactivar :name porque se utiliza en cuentas de activos.', - 'cannot_disable_currency_bills' => 'No se puede desactivar :name porque se utiliza en facturas.', - 'cannot_disable_currency_recurring' => 'No se puede desactivar :name porque se utiliza en transacciones recurrentes.', - 'cannot_disable_currency_available_budgets' => 'No se puede desactivar :name porque se utiliza en presupuestos disponibles.', - 'cannot_disable_currency_budget_limits' => 'No se puede desactivar :name porque se utiliza en límites presupuestarios.', - 'cannot_disable_currency_current_default' => 'No se puede desactivar :name porque es la moneda por defecto actual.', - 'cannot_disable_currency_system_fallback' => 'No se puede desactivar :name porque es la moneda por defecto del sistema.', - 'disable_EUR_side_effects' => 'El Euro es la moneda de emergencia del sistema. Desactivarla puede tener efectos secundarios no deseados y puede anular su garantía.', - 'deleted_currency' => 'Moneda :name eliminada', - 'created_currency' => 'Moneda :name creada', - 'could_not_store_currency' => 'No se puede crear la nueva moneda.', - 'updated_currency' => 'Moneda :name actualizada', - 'ask_site_owner' => 'Por favor pregunte :owner por agregar,elimine o edite monedas.', - 'currencies_intro' => 'Firefly III respalda varias monedas que usted puede establecer y habilitar aquí.', - 'make_default_currency' => 'Establecer por defecto', - 'default_currency' => 'por defecto', - 'currency_is_disabled' => 'Deshabilitado', - 'enable_currency' => 'Activar', - 'disable_currency' => 'Desactivar', - 'currencies_default_disabled' => 'La mayoría de estas monedas están desactivadas por defecto. Para usarlas, debes activarlas primero.', - 'currency_is_now_enabled' => 'Moneda ":name" ha sido activada', - 'currency_is_now_disabled' => 'Moneda ":name" ha sido desactivada', + 'create_currency' => 'Crear nueva moneda', + 'store_currency' => 'Crear moneda', + 'update_currency' => 'Actualizar moneda', + 'new_default_currency' => '":name" es ahora la moneda predeterminada.', + 'default_currency_failed' => 'No se pudo establecer ":name" como moneda predeterminada. Por favor, compruebe los registros.', + 'cannot_delete_currency' => 'No puede eliminar :name porque todavía esta en uso.', + 'cannot_delete_fallback_currency' => ':name es la moneda de reserva del sistema y no se puede eliminar.', + 'cannot_disable_currency_journals' => 'No se puede desactivar :name porque las transacciones siguen utilizándola.', + 'cannot_disable_currency_last_left' => 'No se puede desactivar :name porque es la última moneda habilitada.', + 'cannot_disable_currency_account_meta' => 'No se puede desactivar :name porque se utiliza en cuentas de activos.', + 'cannot_disable_currency_bills' => 'No se puede desactivar :name porque se utiliza en facturas.', + 'cannot_disable_currency_recurring' => 'No se puede desactivar :name porque se utiliza en transacciones recurrentes.', + 'cannot_disable_currency_available_budgets' => 'No se puede desactivar :name porque se utiliza en presupuestos disponibles.', + 'cannot_disable_currency_budget_limits' => 'No se puede desactivar :name porque se utiliza en límites presupuestarios.', + 'cannot_disable_currency_current_default' => 'No se puede desactivar :name porque es la moneda por defecto actual.', + 'cannot_disable_currency_system_fallback' => 'No se puede desactivar :name porque es la moneda por defecto del sistema.', + 'disable_EUR_side_effects' => 'El Euro es la moneda de emergencia del sistema. Desactivarla puede tener efectos secundarios no deseados y puede anular su garantía.', + 'deleted_currency' => 'Moneda :name eliminada', + 'created_currency' => 'Moneda :name creada', + 'could_not_store_currency' => 'No se puede crear la nueva moneda.', + 'updated_currency' => 'Moneda :name actualizada', + 'ask_site_owner' => 'Por favor pregunte :owner por agregar,elimine o edite monedas.', + 'currencies_intro' => 'Firefly III respalda varias monedas que usted puede establecer y habilitar aquí.', + 'make_default_currency' => 'Establecer por defecto', + 'default_currency' => 'por defecto', + 'currency_is_disabled' => 'Deshabilitado', + 'enable_currency' => 'Activar', + 'disable_currency' => 'Desactivar', + 'currencies_default_disabled' => 'La mayoría de estas monedas están desactivadas por defecto. Para usarlas, debes activarlas primero.', + 'currency_is_now_enabled' => 'Moneda ":name" ha sido activada', + 'could_not_enable_currency' => 'No se pudo habilitar la moneda ":name". Por favor, revise los registros.', + 'currency_is_now_disabled' => 'Moneda ":name" ha sido desactivada', + 'could_not_disable_currency' => 'No se pudo deshabilitar la moneda ":name". ¿Tal vez todavía esté en uso?', // forms: - 'mandatoryFields' => 'Campos obligatorios', - 'optionalFields' => 'Campos opcionales', - 'options' => 'Opciones', + 'mandatoryFields' => 'Campos obligatorios', + 'optionalFields' => 'Campos opcionales', + 'options' => 'Opciones', // budgets: - 'daily_budgets' => 'Presupuestos diarios', - 'weekly_budgets' => 'Presupuestos semanales', - 'monthly_budgets' => 'Presupuestos mensuales', - 'quarterly_budgets' => 'Presupuestos trimestrales', - 'half_year_budgets' => 'Presupuestos semestrales', - 'yearly_budgets' => 'Presupuestos anuales', - 'other_budgets' => 'Presupuestos de tiempo personalizado', - 'budget_limit_not_in_range' => 'Esta cantidad se aplica desde :start hasta :end:', - 'total_available_budget' => 'Presupuesto total disponible (entre :start y :end)', - 'total_available_budget_in_currency' => 'Presupuesto total disponible en :currency', - 'see_below' => 'ver abajo', - 'create_new_budget' => 'Crear un nuevo presupuesto', - 'store_new_budget' => 'Almacene el nuevo presupuesto', - 'stored_new_budget' => 'Presupuesto ":name" creado', - 'available_between' => 'Disponible entre :start y :end', - 'transactionsWithoutBudget' => 'Gastos sin presupuesto', - 'transactions_no_budget' => 'Gastos sin presupuesto entre :start y :end', - 'spent_between' => 'Gastado entre :start y :end', - 'set_available_amount' => 'Fijar cantidad disponible', - 'update_available_amount' => 'Actualizar cantidad disponible', - 'ab_basic_modal_explain' => 'Utilice este formulario para indicar cuánto espera poder presupuestar (en total, en :currency) en el período indicado.', - 'createBudget' => 'Nuevo presupuesto', - 'invalid_currency' => 'Esta es una divisa no válida', - 'invalid_amount' => 'Por favor, introduzca una cantidad', - 'set_ab' => 'Se ha establecido el presupuesto disponible', - 'updated_ab' => 'El presupuesto disponible ha sido actualizado', - 'deleted_ab' => 'El presupuesto disponible ha sido eliminado', - 'deleted_bl' => 'La cantidad presupuestada ha sido eliminada', - 'alt_currency_ab_create' => 'Establecer el presupuesto disponible en otra divisa', - 'bl_create_btn' => 'Establecer presupuesto en otra divisa', - 'inactiveBudgets' => 'Presupuestos inactivos', - 'without_budget_between' => 'Transacciones sin presupuesto entre :start y :end', - 'delete_budget' => 'Eliminar presupuesto ":name"', - 'deleted_budget' => 'Presupuesto eliminado ":name"', - 'edit_budget' => 'Editar presupuesto ":name"', - 'updated_budget' => 'Presupuesto actualizado ":name"', - 'update_amount' => 'Actualizar cantidad', - 'update_budget' => 'Actualizar presupuesto', - 'update_budget_amount_range' => 'Cantidad disponible (esperada) actualizada entre :start y :end', - 'set_budget_limit_title' => 'Establecer el importe para el presupuesto :budget entre :start y :end', - 'set_budget_limit' => 'Establecer cantidad presupuestada', - 'budget_period_navigator' => 'Periodo navegador', - 'info_on_available_amount' => '¿ que tengo disponible?', - 'available_amount_indication' => 'Utilice estas cantidades para obtener una indicación de lo que podría ser su presupuesto total.', - 'suggested' => 'Sugerido', - 'average_between' => 'Promedio entre :start y :end', - 'transferred_in' => 'Transferido (dentro)', - 'transferred_away' => 'Transferido (fuera)', - 'auto_budget_none' => 'Sin autopresupuesto', - 'auto_budget_reset' => 'Establecer una cantidad fija cada periodo', - 'auto_budget_rollover' => 'Añadir una cantidad cada período', - 'auto_budget_adjusted' => 'Añadir una cantidad cada periodo y corregir el sobregasto', - 'auto_budget_period_daily' => 'Diario', - 'auto_budget_period_weekly' => 'Semanal', - 'auto_budget_period_monthly' => 'Mensual', - 'auto_budget_period_quarterly' => 'Trimestral', - 'auto_budget_period_half_year' => 'Cada medio año', - 'auto_budget_period_yearly' => 'Anual', - 'auto_budget_help' => 'Puedes leer más sobre esta función en la ayuda. Haz clic en el icono de la parte superior derecha (?).', - 'auto_budget_reset_icon' => 'Este presupuesto se establecerá periódicamente', - 'auto_budget_rollover_icon' => 'La cantidad del presupuesto aumentará periódicamente', - 'auto_budget_adjusted_icon' => 'La cantidad del presupuesto aumentará de forma periódica y se corregirá el sobregasto', - 'remove_budgeted_amount' => 'Eliminar la cantidad presupuestada en :currency', + 'daily_budgets' => 'Presupuestos diarios', + 'weekly_budgets' => 'Presupuestos semanales', + 'monthly_budgets' => 'Presupuestos mensuales', + 'quarterly_budgets' => 'Presupuestos trimestrales', + 'half_year_budgets' => 'Presupuestos semestrales', + 'yearly_budgets' => 'Presupuestos anuales', + 'other_budgets' => 'Presupuestos de tiempo personalizado', + 'budget_limit_not_in_range' => 'Esta cantidad se aplica desde :start hasta :end:', + 'total_available_budget' => 'Presupuesto total disponible (entre :start y :end)', + 'total_available_budget_in_currency' => 'Presupuesto total disponible en :currency', + 'see_below' => 'ver abajo', + 'create_new_budget' => 'Crear un nuevo presupuesto', + 'store_new_budget' => 'Almacene el nuevo presupuesto', + 'stored_new_budget' => 'Presupuesto ":name" creado', + 'available_between' => 'Disponible entre :start y :end', + 'transactionsWithoutBudget' => 'Gastos sin presupuesto', + 'transactions_no_budget' => 'Gastos sin presupuesto entre :start y :end', + 'spent_between' => 'Gastado entre :start y :end', + 'spent_between_left' => 'Gastado :spent entre :start y :end, dejando :left.', + 'set_available_amount' => 'Fijar cantidad disponible', + 'update_available_amount' => 'Actualizar cantidad disponible', + 'ab_basic_modal_explain' => 'Utilice este formulario para indicar cuánto espera poder presupuestar (en total, en :currency) en el período indicado.', + 'createBudget' => 'Nuevo presupuesto', + 'invalid_currency' => 'Esta es una divisa no válida', + 'invalid_amount' => 'Por favor, introduzca una cantidad', + 'set_ab' => 'Se ha establecido el presupuesto disponible', + 'updated_ab' => 'El presupuesto disponible ha sido actualizado', + 'deleted_ab' => 'El presupuesto disponible ha sido eliminado', + 'deleted_bl' => 'La cantidad presupuestada ha sido eliminada', + 'alt_currency_ab_create' => 'Establecer el presupuesto disponible en otra divisa', + 'bl_create_btn' => 'Establecer presupuesto en otra divisa', + 'inactiveBudgets' => 'Presupuestos inactivos', + 'without_budget_between' => 'Transacciones sin presupuesto entre :start y :end', + 'delete_budget' => 'Eliminar presupuesto ":name"', + 'deleted_budget' => 'Presupuesto eliminado ":name"', + 'edit_budget' => 'Editar presupuesto ":name"', + 'updated_budget' => 'Presupuesto actualizado ":name"', + 'update_amount' => 'Actualizar cantidad', + 'update_budget' => 'Actualizar presupuesto', + 'update_budget_amount_range' => 'Cantidad disponible (esperada) actualizada entre :start y :end', + 'set_budget_limit_title' => 'Establecer el importe para el presupuesto :budget entre :start y :end', + 'set_budget_limit' => 'Establecer cantidad presupuestada', + 'budget_period_navigator' => 'Periodo navegador', + 'info_on_available_amount' => '¿ que tengo disponible?', + 'available_amount_indication' => 'Utilice estas cantidades para obtener una indicación de lo que podría ser su presupuesto total.', + 'suggested' => 'Sugerido', + 'average_between' => 'Promedio entre :start y :end', + 'transferred_in' => 'Transferido (dentro)', + 'transferred_away' => 'Transferido (fuera)', + 'auto_budget_none' => 'Sin autopresupuesto', + 'auto_budget_reset' => 'Establecer una cantidad fija cada periodo', + 'auto_budget_rollover' => 'Añadir una cantidad cada período', + 'auto_budget_adjusted' => 'Añadir una cantidad cada periodo y corregir el sobregasto', + 'auto_budget_period_daily' => 'Diario', + 'auto_budget_period_weekly' => 'Semanal', + 'auto_budget_period_monthly' => 'Mensual', + 'auto_budget_period_quarterly' => 'Trimestral', + 'auto_budget_period_half_year' => 'Cada medio año', + 'auto_budget_period_yearly' => 'Anual', + 'auto_budget_help' => 'Puedes leer más sobre esta función en la ayuda. Haz clic en el icono de la parte superior derecha (?).', + 'auto_budget_reset_icon' => 'Este presupuesto se establecerá periódicamente', + 'auto_budget_rollover_icon' => 'La cantidad del presupuesto aumentará periódicamente', + 'auto_budget_adjusted_icon' => 'La cantidad del presupuesto aumentará de forma periódica y se corregirá el sobregasto', + 'remove_budgeted_amount' => 'Eliminar la cantidad presupuestada en :currency', // bills: - 'subscription' => 'Subscripción', - 'not_expected_period' => 'No se espera en este período', - 'subscriptions_in_group' => 'Suscripciones en el grupo "%{title}"', - 'subscr_expected_x_times' => 'Se espera pagar %{amount} %{times} veces este periodo', - 'not_or_not_yet' => 'No (todavía)', - 'visit_bill' => 'Ver factura ":name" en Firefly III', - 'match_between_amounts' => 'La cuenta iguala transacciones entre :low y :high.', - 'running_again_loss' => 'Las transacciones previamente vinculadas a esta factura pueden perder su conexión, si (ya) no coinciden con la(s) regla(s).', - 'bill_related_rules' => 'Reglas relacionadas con esta cuenta', - 'repeats' => 'Repeticiones', - 'bill_end_date_help' => 'Campo opcional. Se espera que la factura venza en esta fecha.', - 'bill_extension_date_help' => 'Campo opcional. La factura debe ser prorrogada (o cancelada) en o antes de esta fecha.', - 'bill_end_index_line' => 'Esta factura termina el :date', - 'bill_extension_index_line' => 'Esta factura debe ser extendida o cancelada el :date', - 'connected_journals' => 'Transacciones conectadas', - 'auto_match_on' => 'Automáticamente igualado por Firefly III', - 'auto_match_off' => 'No igualado automaticamente por Firefly III', - 'next_expected_match' => 'Siguiente partido esperado', - 'delete_bill' => 'Eliminar factura ":name"', - 'deleted_bill' => 'Eliminar factura ":name"', - 'edit_bill' => 'Editar factura ":name"', - 'more' => 'Mas', - 'rescan_old' => 'Ejecutar las reglas de nuevo, en todas las transacciones', - 'update_bill' => 'Actualizar factura', - 'updated_bill' => 'Actualizar factura ":name"', - 'store_new_bill' => 'Crear factura', - 'stored_new_bill' => 'Factura ":name" creada', - 'cannot_scan_inactive_bill' => 'Las facturas inactivas no pueden ser escaneadas.', - 'rescanned_bill' => 'Se volvió a escanear todo, y vinculó :count transacción a la factura. | Se volvió a escanear todo, y vinculó :count transacciones a la factura.', - 'average_bill_amount_year' => 'Cantidad media de la factura (:year)', - 'average_bill_amount_overall' => 'Cantidad media de las facturas (total)', - 'bill_is_active' => 'Bill esta activo', - 'bill_expected_between' => 'Esperado entre :start y :end', - 'bill_will_automatch' => 'Bill se vinculara automáticamente a transacciones coincidentes', - 'skips_over' => 'salta sobre', - 'bill_store_error' => 'Se ha producido un error inesperado mientras se almacenaba su nueva factura. Por favor, compruebe los archivos de registro', - 'list_inactive_rule' => 'regla inactiva', - 'bill_edit_rules' => 'Firefly III también intentará editar la regla relacionada con esta factura. Sin embargo, si ha editado esta regla usted mismo, Firefly III no cambiará nada.|Firefly III intentará editar también las :count reglas relacionadas con esta factura. Sin embargo, si ha editado estas reglas usted mismo, Firefly III no cambiará nada.', - 'bill_expected_date' => 'Se espera :date', - 'bill_expected_date_js' => 'Fecha prevista {date}', - 'expected_amount' => 'Cantidad (esperada)', - 'bill_paid_on' => 'Pagado el {date}', - 'bill_repeats_weekly' => 'Repetir semanalmente', - 'bill_repeats_monthly' => 'Repetir mensualmente', - 'bill_repeats_quarterly' => 'Repite trimestralmente', - 'bill_repeats_half-year' => 'Repetir cada 6 meses', - 'bill_repeats_yearly' => 'Repetir anualmente', - 'bill_repeats_weekly_other' => 'Repetir cada dos semanas', - 'bill_repeats_monthly_other' => 'Repetir cada dos meses', - 'bill_repeats_quarterly_other' => 'Repetir cada dos trimestres', - 'bill_repeats_half-year_other' => 'Repetir anualmente', - 'bill_repeats_yearly_other' => 'Repetir cada dos años', - 'bill_repeats_weekly_skip' => 'Repetir cada {skip} semanas', - 'bill_repeats_monthly_skip' => 'Repetir cada {skip} meses', - 'bill_repeats_quarterly_skip' => 'Repetir cada {skip} trimestres', - 'bill_repeats_half-year_skip' => 'Repetir cada {skip} medios años', - 'bill_repeats_yearly_skip' => 'Repetir cada {skip} años', - 'subscriptions' => 'Suscripciones', - 'go_to_subscriptions' => 'Ir a tus suscripciones', - 'forever' => 'Siempre', - 'extension_date_is' => 'Fecha de extensión es {date}', + 'subscription' => 'Subscripción', + 'not_expected_period' => 'No se espera en este período', + 'subscriptions_in_group' => 'Suscripciones en el grupo "%{title}"', + 'subscr_expected_x_times' => 'Se espera pagar %{amount} %{times} veces este periodo', + 'not_or_not_yet' => 'No (todavía)', + 'visit_bill' => 'Ver factura ":name" en Firefly III', + 'match_between_amounts' => 'La factura iguala transacciones entre :low y :high.', + 'running_again_loss' => 'Las transacciones previamente vinculadas a esta factura pueden perder su conexión, si (ya) no coinciden con la(s) regla(s).', + 'bill_related_rules' => 'Reglas relacionadas con esta cuenta', + 'repeats' => 'Repeticiones', + 'bill_end_date_help' => 'Campo opcional. Se espera que la factura venza en esta fecha.', + 'bill_extension_date_help' => 'Campo opcional. La factura debe ser prorrogada (o cancelada) en o antes de esta fecha.', + 'bill_end_index_line' => 'Esta factura termina el :date', + 'bill_extension_index_line' => 'Esta factura debe ser extendida o cancelada el :date', + 'connected_journals' => 'Transacciones conectadas', + 'auto_match_on' => 'Automáticamente igualado por Firefly III', + 'auto_match_off' => 'No igualado automaticamente por Firefly III', + 'next_expected_match' => 'Próxima coincidencia esperada', + 'delete_bill' => 'Eliminar factura ":name"', + 'deleted_bill' => 'Eliminar factura ":name"', + 'edit_bill' => 'Editar factura ":name"', + 'more' => 'Mas', + 'rescan_old' => 'Ejecutar las reglas de nuevo, en todas las transacciones', + 'update_bill' => 'Actualizar factura', + 'updated_bill' => 'Actualizar factura ":name"', + 'store_new_bill' => 'Crear factura', + 'stored_new_bill' => 'Factura ":name" creada', + 'cannot_scan_inactive_bill' => 'Las facturas inactivas no pueden ser escaneadas.', + 'rescanned_bill' => 'Se volvió a escanear todo, y vinculó :count transacción a la factura. | Se volvió a escanear todo, y vinculó :count transacciones a la factura.', + 'average_bill_amount_year' => 'Cantidad media de la factura (:year)', + 'average_bill_amount_overall' => 'Cantidad media de las facturas (total)', + 'bill_is_active' => 'La factura esta activa', + 'bill_expected_between' => 'Esperado entre :start y :end', + 'bill_will_automatch' => 'La factura se vinculará automáticamente a las transacciones coincidentes', + 'skips_over' => 'salta sobre', + 'bill_store_error' => 'Se ha producido un error inesperado mientras se almacenaba su nueva factura. Por favor, compruebe los archivos de registro', + 'list_inactive_rule' => 'regla inactiva', + 'bill_edit_rules' => 'Firefly III también intentará editar la regla relacionada con esta factura. Sin embargo, si ha editado esta regla usted mismo, Firefly III no cambiará nada.|Firefly III intentará editar también las :count reglas relacionadas con esta factura. Sin embargo, si ha editado estas reglas usted mismo, Firefly III no cambiará nada.', + 'bill_expected_date' => 'Se espera :date', + 'bill_expected_date_js' => 'Fecha prevista {date}', + 'expected_amount' => 'Cantidad (esperada)', + 'bill_paid_on' => 'Pagado el {date}', + 'bill_repeats_weekly' => 'Repetir semanalmente', + 'bill_repeats_monthly' => 'Repetir mensualmente', + 'bill_repeats_quarterly' => 'Repite trimestralmente', + 'bill_repeats_half-year' => 'Repetir cada 6 meses', + 'bill_repeats_yearly' => 'Repetir anualmente', + 'bill_repeats_weekly_other' => 'Repetir cada dos semanas', + 'bill_repeats_monthly_other' => 'Repetir cada dos meses', + 'bill_repeats_quarterly_other' => 'Repetir cada dos trimestres', + 'bill_repeats_half-year_other' => 'Repetir anualmente', + 'bill_repeats_yearly_other' => 'Repetir cada dos años', + 'bill_repeats_weekly_skip' => 'Repetir cada {skip} semanas', + 'bill_repeats_monthly_skip' => 'Repetir cada {skip} meses', + 'bill_repeats_quarterly_skip' => 'Repetir cada {skip} trimestres', + 'bill_repeats_half-year_skip' => 'Repetir cada {skip} medios años', + 'bill_repeats_yearly_skip' => 'Repetir cada {skip} años', + 'subscriptions' => 'Suscripciones', + 'go_to_subscriptions' => 'Ir a tus suscripciones', + 'forever' => 'Siempre', + 'extension_date_is' => 'Fecha de extensión es {date}', // accounts: - 'i_am_owed_amount' => 'Se me debe una cantidad', - 'i_owe_amount' => 'Debo una cantidad', - 'inactive_account_link' => 'Tiene :count cuenta inactiva (archivada), que puedes ver en esta página separada.|Tienes cuentas :count inactivas (archivadas), que puedes ver en esta página separada.', - 'all_accounts_inactive' => 'Estas son sus cuentas inactivas.', - 'active_account_link' => 'Este enlace se regresa a sus cuentas activas.', - 'account_missing_transaction' => 'Cuenta #:id (":name") no puede ser vista directamente, Firefly perdió información de redirección.', - 'cc_monthly_payment_date_help' => 'Seleccione cualquier año y mes, será ignorado de todos modos. Sólo el día del mes es relevante.', - 'details_for_asset' => 'Detalles para la cuenta de activos ":name"', - 'details_for_expense' => 'Detalles para la cuenta de gastos ":name"', - 'details_for_revenue' => 'Detalles para la cuenta de ingresos ":name"', - 'details_for_cash' => 'Detalle para la cuenta de efectivo ":name"', - 'store_new_asset_account' => 'Crear cuenta de activos', - 'store_new_expense_account' => 'Crear cuenta de gastos', - 'store_new_revenue_account' => 'Crear cuenta de ingresos', - 'edit_asset_account' => 'Editar cuenta de activos ":name"', - 'edit_expense_account' => 'Editar cuenta de gastos ":name"', - 'edit_revenue_account' => 'Editar cuenta de ganancias ":name"', - 'delete_asset_account' => 'Eliminar cuenta de activo ":name"', - 'delete_expense_account' => 'Eliminar cuenta de gastos ":name"', - 'delete_revenue_account' => 'Eliminar cuenta de ganancias ":name"', - 'delete_liabilities_account' => 'Eliminar pasivo ":name"', - 'asset_deleted' => 'Se ha eliminado exitosamente la cuenta de activos ":name"', - 'account_deleted' => 'Cuenta "::name" eliminada con éxito', - 'expense_deleted' => 'Exitosamente eliminado la cuenta de gastos ":name"', - 'revenue_deleted' => 'Exitosamente eliminado cuenta de ganacias ":name"', - 'update_asset_account' => 'Actualizar cuenta de activos', - 'update_undefined_account' => 'Actualizar cuenta', - 'update_liabilities_account' => 'Actualizar pasivo', - 'update_expense_account' => 'Actualizar cuenta de gastos', - 'update_revenue_account' => 'Actualizar cuenta de ingresos', - 'make_new_asset_account' => 'Crear nueva cuenta de activo', - 'make_new_expense_account' => 'Crear nueva cuenta de gastos', - 'make_new_revenue_account' => 'Crear nueva cuenta de ingresos', - 'make_new_liabilities_account' => 'Crear un nuevo pasivo', - 'asset_accounts' => 'Cuenta de activos', - 'undefined_accounts' => 'Cuentas', - 'asset_accounts_inactive' => 'Cuentas de activos (inactivas)', - 'expense_account' => 'Cuenta de gastos', - 'expense_accounts' => 'Cuentas de gastos', - 'expense_accounts_inactive' => 'Cuentas de gastos (inactivas)', - 'revenue_account' => 'Cuenta de ingresos', - 'revenue_accounts' => 'Cuentas de ingresos', - 'revenue_accounts_inactive' => 'Cuentas de ingresos (inactivas)', - 'cash_accounts' => 'Cuentas de efectivo', - 'Cash account' => 'Cuenta de efectivo', - 'liabilities_accounts' => 'Pasivos', - 'liabilities_accounts_inactive' => 'Pasivos (inactivos)', - 'reconcile_account' => 'Reconciliar cuenta ":account"', - 'overview_of_reconcile_modal' => 'Resumen de reconciliación', - 'delete_reconciliation' => 'Eliminar reconciliacion', - 'update_reconciliation' => 'Actualizar reconciliacion', - 'amount_cannot_be_zero' => 'La cantidad no puede ser cero', - 'end_of_reconcile_period' => 'Fin del periodo de reconciliacion::period', - 'start_of_reconcile_period' => 'Inicio de periodo de reconciliación::period', - 'start_balance' => 'Balance inicial', - 'end_balance' => 'Balance final', - 'update_balance_dates_instruction' => 'Coinciden con las cantidades y fechas sobre su estado de cuenta, y presione "comenzar reconciliación"', - 'select_transactions_instruction' => 'Seleccione las transacciones que aparecen en su estado bancario.', - 'select_range_and_balance' => 'Primero verifique el rango de las fechas y los saldos. luego presione "comenzar reconciliación"', - 'date_change_instruction' => 'Si usted cambia el rango de las fechas ahora, se perderá cualquier progreso.', - 'update_selection' => 'Selección de actualización', - 'store_reconcile' => 'Guardar reconciliación', - 'reconciliation_transaction' => 'Transacción de reconciliación', - 'Reconciliation' => 'Reconciliacion', - 'reconciliation' => 'Reconciliacion', - 'reconcile_options' => 'Opciones de reconciliacion', - 'reconcile_range' => 'Rango de reconciliacion', - 'start_reconcile' => 'Comienzo de reconciliación', - 'cash_account_type' => 'Efectivo', - 'cash' => 'efectivo', - 'cant_find_redirect_account' => 'Firefly III le intentó redirigir pero no pudo. Lo sentimos. Volver al índice.', - 'account_type' => 'Tipo de cuenta', - 'save_transactions_by_moving' => 'Guardar esta transacción moviéndola a otra cuenta:|Guardar estas transacciones moviéndolas a otra cuenta:', - 'save_transactions_by_moving_js' => 'Ninguna transacción|Guardar esta transacción moviéndola a otra cuenta. |Guardar estas transacciones moviéndolas a otra cuenta.', - 'stored_new_account' => 'Nueva cuenta ":name" almacenada!', - 'stored_new_account_js' => 'Nueva cuenta "{name}" guardada!', - 'updated_account' => 'Cuenta actualizada ":name"', - 'updated_account_js' => 'Cuenta actualizada "{title}".', - 'credit_card_options' => 'Opciones de tarjeta de crédito', - 'no_transactions_account' => 'No hay transacciones ( en este periodo) para cuenta de activos ":name".', - 'no_transactions_period' => 'No hay transacciones (en este período).', - 'no_data_for_chart' => 'No hay suficiente información (todavía) para generar este gráfico.', - 'select_at_least_one_account' => 'Por favor, seleccione al menos una cuenta', - 'select_at_least_one_category' => 'Por favor, seleccione al menos una categoría', - 'select_at_least_one_budget' => 'Por favor, seleccione al menos un presupuesto', - 'select_at_least_one_tag' => 'Por favor, seleccione al menos una etiqueta', - 'select_at_least_one_expense' => 'Por favor, seleccione al menos una combinación de cuentas de gastos/ingresos. Si no tiene ninguna (la lista está vacía) este informe no está disponible.', - 'account_default_currency' => 'Esta será la moneda por defecto asociada a esta cuenta.', - 'reconcile_has_more' => 'Su libro principal de Firefly III tiene mas dinero de lo que su banco afirma debería tener, Hay varias opciones. por favor elija que hacer. luego, presione "confirmar reconciliación".', - 'reconcile_has_less' => 'Su libro principal de Firefly III tiene menos dinero de el que su banco dice que usted debería tener. hay varias opciones. Por favor elija que hacer, luego presione " Confirmar reconciliación".', - 'reconcile_is_equal' => 'Su libro principal de Firefly III y sus estados de cuenta coinciden. No hay nada que hacer. por favor presione "Confirmar reconciliación" para confirmar su entrada.', - 'create_pos_reconcile_transaction' => 'Borre las transacciones seleccionadas, y cree una corrección agregando :amount a esta cuenta de activo.', - 'create_neg_reconcile_transaction' => 'Borre las transacciones seleccionadas, y cree una corrección eliminando :amount de esta cuenta de activo.', - 'reconcile_do_nothing' => 'Borre la transacciones seleccionadas, pero no las corrija.', - 'reconcile_go_back' => 'Usted puede siempre editar o eliminar una corrección mas tarde.', - 'must_be_asset_account' => 'Usted solo puede reconciliar cuentas de activos', - 'reconciliation_stored' => 'Reconciliación almacenada', - 'reconciliation_error' => 'Debido a un error, las transacciones fueron marcadas como reconciliadas, pero la corrección no se ha guardado: :error.', - 'reconciliation_transaction_title' => 'Reconciliación (:from a :to)', - 'sum_of_reconciliation' => 'Suma de reconciliación', - 'reconcile_this_account' => 'Reconciliar esta cuenta', - 'reconcile' => 'Reconciliar', - 'show' => 'Mostrar', - 'confirm_reconciliation' => 'Confirmar la reconciliacion', - 'submitted_start_balance' => 'Balance final enviado', - 'selected_transactions' => 'Transacciones seleccionadas (:count)', - 'already_cleared_transactions' => 'Transacciones ya despejadas (:count)', - 'submitted_end_balance' => 'Balance final enviado', - 'initial_balance_description' => 'Balance inicial para ":account"', - 'liability_credit_description' => 'Crédito pasivo para ":account"', - 'interest_calc_' => 'desconocido', - 'interest_calc_daily' => 'Por dia', - 'interest_calc_monthly' => 'Por mes', - 'interest_calc_yearly' => 'Por año', - 'interest_calc_weekly' => 'Por semana', - 'interest_calc_half-year' => 'Por semestre', - 'interest_calc_quarterly' => 'Por trimestre', - 'initial_balance_account' => 'Balance inicial de la cuenta :account', - 'list_options' => 'Opciones de lista', + 'i_am_owed_amount' => 'Se me debe una cantidad', + 'i_owe_amount' => 'Debo una cantidad', + 'inactive_account_link' => 'Tiene :count cuenta inactiva (archivada), que puedes ver en esta página separada.|Tienes cuentas :count inactivas (archivadas), que puedes ver en esta página separada.', + 'all_accounts_inactive' => 'Estas son sus cuentas inactivas.', + 'active_account_link' => 'Este enlace se regresa a sus cuentas activas.', + 'account_missing_transaction' => 'Cuenta #:id (":name") no puede ser vista directamente, Firefly perdió información de redirección.', + 'cc_monthly_payment_date_help' => 'Seleccione cualquier año y mes, será ignorado de todos modos. Sólo el día del mes es relevante.', + 'details_for_asset' => 'Detalles para la cuenta de activos ":name"', + 'details_for_expense' => 'Detalles para la cuenta de gastos ":name"', + 'details_for_revenue' => 'Detalles para la cuenta de ingresos ":name"', + 'details_for_cash' => 'Detalle para la cuenta de efectivo ":name"', + 'store_new_asset_account' => 'Crear cuenta de activos', + 'store_new_expense_account' => 'Crear cuenta de gastos', + 'store_new_revenue_account' => 'Crear cuenta de ingresos', + 'edit_asset_account' => 'Editar cuenta de activos ":name"', + 'edit_expense_account' => 'Editar cuenta de gastos ":name"', + 'edit_revenue_account' => 'Editar cuenta de ganancias ":name"', + 'delete_asset_account' => 'Eliminar cuenta de activo ":name"', + 'delete_expense_account' => 'Eliminar cuenta de gastos ":name"', + 'delete_revenue_account' => 'Eliminar cuenta de ganancias ":name"', + 'delete_liabilities_account' => 'Eliminar pasivo ":name"', + 'asset_deleted' => 'Se ha eliminado exitosamente la cuenta de activos ":name"', + 'account_deleted' => 'Cuenta "::name" eliminada con éxito', + 'expense_deleted' => 'Exitosamente eliminado la cuenta de gastos ":name"', + 'revenue_deleted' => 'Exitosamente eliminado cuenta de ganacias ":name"', + 'update_asset_account' => 'Actualizar cuenta de activos', + 'update_undefined_account' => 'Actualizar cuenta', + 'update_liabilities_account' => 'Actualizar pasivo', + 'update_expense_account' => 'Actualizar cuenta de gastos', + 'update_revenue_account' => 'Actualizar cuenta de ingresos', + 'make_new_asset_account' => 'Crear nueva cuenta de activo', + 'make_new_expense_account' => 'Crear nueva cuenta de gastos', + 'make_new_revenue_account' => 'Crear nueva cuenta de ingresos', + 'make_new_liabilities_account' => 'Crear un nuevo pasivo', + 'asset_accounts' => 'Cuenta de activos', + 'undefined_accounts' => 'Cuentas', + 'asset_accounts_inactive' => 'Cuentas de activos (inactivas)', + 'expense_account' => 'Cuenta de gastos', + 'expense_accounts' => 'Cuentas de gastos', + 'expense_accounts_inactive' => 'Cuentas de gastos (inactivas)', + 'revenue_account' => 'Cuenta de ingresos', + 'revenue_accounts' => 'Cuentas de ingresos', + 'revenue_accounts_inactive' => 'Cuentas de ingresos (inactivas)', + 'cash_accounts' => 'Cuentas de efectivo', + 'Cash account' => 'Cuenta de efectivo', + 'liabilities_accounts' => 'Pasivos', + 'liabilities_accounts_inactive' => 'Pasivos (inactivos)', + 'reconcile_account' => 'Reconciliar cuenta ":account"', + 'overview_of_reconcile_modal' => 'Resumen de reconciliación', + 'delete_reconciliation' => 'Eliminar reconciliacion', + 'update_reconciliation' => 'Actualizar reconciliacion', + 'amount_cannot_be_zero' => 'La cantidad no puede ser cero', + 'end_of_reconcile_period' => 'Fin del periodo de reconciliacion::period', + 'start_of_reconcile_period' => 'Inicio de periodo de reconciliación::period', + 'start_balance' => 'Balance inicial', + 'end_balance' => 'Balance final', + 'update_balance_dates_instruction' => 'Coinciden con las cantidades y fechas sobre su estado de cuenta, y presione "comenzar reconciliación"', + 'select_transactions_instruction' => 'Seleccione las transacciones que aparecen en su estado bancario.', + 'select_range_and_balance' => 'Primero verifique el rango de las fechas y los saldos. luego presione "comenzar reconciliación"', + 'date_change_instruction' => 'Si usted cambia el rango de las fechas ahora, se perderá cualquier progreso.', + 'update_selection' => 'Selección de actualización', + 'store_reconcile' => 'Guardar reconciliación', + 'reconciliation_transaction' => 'Transacción de reconciliación', + 'Reconciliation' => 'Reconciliacion', + 'reconciliation' => 'Reconciliacion', + 'reconcile_options' => 'Opciones de reconciliacion', + 'reconcile_range' => 'Rango de reconciliacion', + 'start_reconcile' => 'Comienzo de reconciliación', + 'cash_account_type' => 'Efectivo', + 'cash' => 'efectivo', + 'cant_find_redirect_account' => 'Firefly III le intentó redirigir pero no pudo. Lo sentimos. Volver al índice.', + 'account_type' => 'Tipo de cuenta', + 'save_transactions_by_moving' => 'Guardar esta transacción moviéndola a otra cuenta:|Guardar estas transacciones moviéndolas a otra cuenta:', + 'save_transactions_by_moving_js' => 'Ninguna transacción|Guardar esta transacción moviéndola a otra cuenta. |Guardar estas transacciones moviéndolas a otra cuenta.', + 'stored_new_account' => 'Nueva cuenta ":name" almacenada!', + 'stored_new_account_js' => 'Nueva cuenta "{name}" guardada!', + 'updated_account' => 'Cuenta actualizada ":name"', + 'updated_account_js' => 'Cuenta actualizada "{title}".', + 'credit_card_options' => 'Opciones de tarjeta de crédito', + 'no_transactions_account' => 'No hay transacciones ( en este periodo) para cuenta de activos ":name".', + 'no_transactions_period' => 'No hay transacciones (en este período).', + 'no_data_for_chart' => 'No hay suficiente información (todavía) para generar este gráfico.', + 'select_at_least_one_account' => 'Por favor, seleccione al menos una cuenta', + 'select_at_least_one_category' => 'Por favor, seleccione al menos una categoría', + 'select_at_least_one_budget' => 'Por favor, seleccione al menos un presupuesto', + 'select_at_least_one_tag' => 'Por favor, seleccione al menos una etiqueta', + 'select_at_least_one_expense' => 'Por favor, seleccione al menos una combinación de cuentas de gastos/ingresos. Si no tiene ninguna (la lista está vacía) este informe no está disponible.', + 'account_default_currency' => 'Esta será la moneda por defecto asociada a esta cuenta.', + 'reconcile_has_more' => 'Su libro principal de Firefly III tiene mas dinero de lo que su banco afirma debería tener, Hay varias opciones. por favor elija que hacer. luego, presione "confirmar reconciliación".', + 'reconcile_has_less' => 'Su libro principal de Firefly III tiene menos dinero de el que su banco dice que usted debería tener. hay varias opciones. Por favor elija que hacer, luego presione " Confirmar reconciliación".', + 'reconcile_is_equal' => 'Su libro principal de Firefly III y sus estados de cuenta coinciden. No hay nada que hacer. por favor presione "Confirmar reconciliación" para confirmar su entrada.', + 'create_pos_reconcile_transaction' => 'Borre las transacciones seleccionadas, y cree una corrección agregando :amount a esta cuenta de activo.', + 'create_neg_reconcile_transaction' => 'Borre las transacciones seleccionadas, y cree una corrección eliminando :amount de esta cuenta de activo.', + 'reconcile_do_nothing' => 'Borre la transacciones seleccionadas, pero no las corrija.', + 'reconcile_go_back' => 'Usted puede siempre editar o eliminar una corrección mas tarde.', + 'must_be_asset_account' => 'Usted solo puede reconciliar cuentas de activos', + 'reconciliation_stored' => 'Reconciliación almacenada', + 'reconciliation_error' => 'Debido a un error, las transacciones fueron marcadas como reconciliadas, pero la corrección no se ha guardado: :error.', + 'reconciliation_transaction_title' => 'Reconciliación (:from a :to)', + 'sum_of_reconciliation' => 'Suma de reconciliación', + 'reconcile_this_account' => 'Reconciliar esta cuenta', + 'reconcile' => 'Reconciliar', + 'show' => 'Mostrar', + 'confirm_reconciliation' => 'Confirmar la reconciliacion', + 'submitted_start_balance' => 'Balance final enviado', + 'selected_transactions' => 'Transacciones seleccionadas (:count)', + 'already_cleared_transactions' => 'Transacciones ya despejadas (:count)', + 'submitted_end_balance' => 'Balance final enviado', + 'initial_balance_description' => 'Balance inicial para ":account"', + 'liability_credit_description' => 'Crédito pasivo para ":account"', + 'interest_calc_' => 'desconocido', + 'interest_calc_daily' => 'Por dia', + 'interest_calc_monthly' => 'Por mes', + 'interest_calc_yearly' => 'Por año', + 'interest_calc_weekly' => 'Por semana', + 'interest_calc_half-year' => 'Por semestre', + 'interest_calc_quarterly' => 'Por trimestre', + 'initial_balance_account' => 'Balance inicial de la cuenta :account', + 'list_options' => 'Opciones de lista', // categories: - 'new_category' => 'Nueva categoría', - 'create_new_category' => 'Crear una nueva categoria', - 'without_category' => 'Sin categoría', - 'update_category' => 'Actualizar categoría', - 'updated_category' => 'Actualizar categoría ":name"', - 'categories' => 'Categorías', - 'edit_category' => 'Editar categoría ":name"', - 'no_category' => '(sin categoría)', - 'unknown_category_plain' => 'Sin categoría', - 'category' => 'Categoria', - 'delete_category' => 'Eliminar categoría ":name"', - 'deleted_category' => 'Categoría eliminada ":name"', - 'store_category' => 'Guardar nueva categoria', - 'stored_category' => 'Nueva categoría guardada ":name"', - 'without_category_between' => 'Sin categoría entre :start y:end', + 'new_category' => 'Nueva categoría', + 'create_new_category' => 'Crear una nueva categoria', + 'without_category' => 'Sin categoría', + 'update_category' => 'Actualizar categoría', + 'updated_category' => 'Actualizar categoría ":name"', + 'categories' => 'Categorías', + 'edit_category' => 'Editar categoría ":name"', + 'no_category' => '(sin categoría)', + 'unknown_category_plain' => 'Sin categoría', + 'category' => 'Categoria', + 'delete_category' => 'Eliminar categoría ":name"', + 'deleted_category' => 'Categoría eliminada ":name"', + 'store_category' => 'Guardar nueva categoria', + 'stored_category' => 'Nueva categoría guardada ":name"', + 'without_category_between' => 'Sin categoría entre :start y:end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Actualización de gasto', - 'update_deposit' => 'Actualizar ingreso', - 'update_transaction' => 'Actualizar transacción', - 'update_transfer' => 'Actualización de transferencia', - 'updated_withdrawal' => 'Gasto actualizado', - 'updated_deposit' => 'Actualizado ingreso ":description"', - 'updated_transfer' => 'Transferencia actualizada ":description"', - 'no_changes_withdrawal' => 'El gasto ":description" no se cambió.', - 'no_changes_deposit' => 'El ingreso ":description" no se cambió.', - 'no_changes_transfer' => 'Transferencia ":description" no se cambió.', - 'delete_withdrawal' => 'Eliminar gasto ":description"', - 'delete_deposit' => 'Eliminar ingreso ":description"', - 'delete_transfer' => 'Eliminar transferencia ":description"', - 'deleted_withdrawal' => 'Eliminado correctamente', - 'deleted_deposit' => 'Ingreso eliminado correctamente ":description"', - 'deleted_transfer' => 'Transferencia eliminada exitosamente ":description"', - 'deleted_reconciliation' => 'Transacción de conciliación eliminada con éxito "::description"', - 'stored_journal' => 'Nueva transacción creada exitosamente ":description"', - 'stored_journal_no_descr' => 'Se ha creado tu nueva transacción con éxito', - 'updated_journal_no_descr' => 'Se ha actualizado tu transacción con éxito', - 'select_transactions' => 'Seleccionar transacciones', - 'rule_group_select_transactions' => 'Aplicar ":title" a las transacciones', - 'rule_select_transactions' => 'Aplicar ":title" a las transacciones', - 'stop_selection' => 'Pare de seleccionas transacciones', - 'reconcile_selected' => 'Reconciliar', - 'mass_delete_journals' => 'Eliminar un numero de transacciones', - 'mass_edit_journals' => 'Editar un numero de transacciones', - 'mass_bulk_journals' => 'Editar múltiples transacciones', - 'mass_bulk_journals_explain' => 'Este formulario le permite cambiar las propiedades de las transacciones que aparecen a continuación en una actualización de barrido. Todas las transacciones en la tabla se actualizarán cuando cambie los parámetros que vea aquí.', - 'part_of_split' => 'Esta transacción es parte de una transacción dividida. Si no ha seleccionado todas las partes, puede terminar con cambiar sólo la mitad de la transacción.', - 'bulk_set_new_values' => 'Use las entradas abajo para establecer nuevos valores. Si usted los deja vacíos, serán vacíos para todos. también, tenga en cuenta que solo los gastos tendrán un presupuesto.', - 'no_bulk_category' => 'No actualizar la categoria', - 'no_bulk_budget' => 'No actualizar el presupuesto', - 'no_bulk_tags' => 'No actualizar etiqueta(s)', - 'replace_with_these_tags' => 'Reemplazar con estas etiquetas', - 'append_these_tags' => 'Añadir esas etiquetas', - 'mass_edit' => 'Editar seleccionado individualmente', - 'bulk_edit' => 'Editar seleccionados en masa', - 'mass_delete' => 'Eliminar seleccionados', - 'cannot_edit_other_fields' => 'Usted no puede editar en masa otros campos ademas de los que están aquí, porque no hay espacio para mostrarlos. siga el enlace y editelo uno a uno, si usted necesita editar estos campos.', - 'cannot_change_amount_reconciled' => 'No puede cambiar la cantidad de transacciones conciliadas.', - 'no_budget' => '(sin presupuesto)', - 'no_bill' => '(sin factura)', - 'account_per_budget' => 'Cuenta por presupuesto', - 'account_per_category' => 'Cuenta por categoría', - 'create_new_object' => 'Crear', - 'empty' => '(vacío)', - 'all_other_budgets' => '(todos los demás presupuestos)', - 'all_other_accounts' => '(todas las demás cuentas)', - 'expense_per_source_account' => 'Gastos por cuenta de origen', - 'expense_per_destination_account' => 'Gastos por cuenta destino', - 'income_per_destination_account' => 'Ingresos por cuenta de destino', - 'spent_in_specific_category' => 'Gastado en categoría ":category"', - 'earned_in_specific_category' => 'Ganado en la categoría ":category"', - 'spent_in_specific_tag' => 'Gastado en etiqueta ":tag"', - 'earned_in_specific_tag' => 'Ganado en etiqueta ":tag"', - 'income_per_source_account' => 'Ingresos por cuenta fuente', - 'average_spending_per_destination' => 'Gasto promedio por cuenta de destino', - 'average_spending_per_source' => 'Gasto promedio por cuenta de origen', - 'average_earning_per_source' => 'Ingreso promedio por cuenta de origen', - 'average_earning_per_destination' => 'Ingreso promedio por cuenta de destino', - 'account_per_tag' => 'Cuenta por etiqueta', - 'tag_report_expenses_listed_once' => 'Los gastos y los ingresos nunca se enumeran dos veces. Si una transacción tiene múltiples etiquetas, sólo puede aparecer bajo una de sus etiquetas. Esta lista puede parecer que faltan datos, pero las cantidades serán correctas.', - 'double_report_expenses_charted_once' => 'Los gastos y los ingresos nunca se muestran dos veces. Si una transacción tiene múltiples etiquetas, sólo puede aparecer bajo una de sus etiquetas. Este gráfico puede parecer que faltan datos, pero las cantidades serán correctas.', - 'tag_report_chart_single_tag' => 'Este gráfico se aplica a una sola etiqueta. Si una transacción tiene múltiples etiquetas, lo que ve aquí puede reflejarse también en los gráficos de otras etiquetas.', - 'tag' => 'Etiqueta', - 'no_budget_squared' => '(sin presupuesto)', - 'perm-delete-many' => 'Eliminar muchos elementos en una sola vez puede ser muy perturbador. Por favor, tenga cuidado. Puede eliminar parte de una transacción dividida de esta página, así que tenga cuidado.', - 'mass_deleted_transactions_success' => 'Eliminado :count transacción.|Eliminado :count transacciones.', - 'mass_edited_transactions_success' => 'Actualizado :count transaction.|Actualizado :count transacciones.', - 'opt_group_' => '(Sin tipo de cuenta)', - 'opt_group_no_account_type' => '(Sin tipo de cuenta)', - 'opt_group_defaultAsset' => 'Cuentas de activos por defecto', - 'opt_group_savingAsset' => 'Cuenta de ahorros', - 'opt_group_sharedAsset' => 'Cuenta de activos compartidas', - 'opt_group_ccAsset' => 'Tarjetas de credito', - 'opt_group_cashWalletAsset' => 'Billeteras de efectivo', - 'opt_group_expense_account' => 'Cuentas de gastos', - 'opt_group_revenue_account' => 'Cuentas de ingresos', - 'opt_group_l_Loan' => 'Pasivo: Préstamo', - 'opt_group_cash_account' => 'Cuenta de efectivo', - 'opt_group_l_Debt' => 'Pasivo: Deuda', - 'opt_group_l_Mortgage' => 'Pasivo: Hipoteca', - 'opt_group_l_Credit card' => 'Pasivo: Tarjeta de crédito', - 'notes' => 'Notas', - 'unknown_journal_error' => 'No se pudo guardar la transacción. Por favor, revise los archivos de registro.', - 'attachment_not_found' => 'No se pudo encontrar este adjunto.', - 'journal_link_bill' => 'Esta transacción está vinculada a la factura :name. Para eliminar la conexión, desmarca la casilla de verificación. Usa reglas para conectarla a otra factura.', - 'transaction_stored_link' => 'La transacción #{ID} ("{title}") ha sido almacenada.', - 'transaction_new_stored_link' => 'La transacción #{ID} ha sido guardada.', - 'transaction_updated_link' => 'La transacción #{ID} ("{title}") ha sido actualizada.', - 'transaction_updated_no_changes' => 'La transacción #{ID} ("{title}") no recibió ningún cambio.', - 'first_split_decides' => 'La primera división determina el valor de este campo', - 'first_split_overrules_source' => 'La primera división puede anular la cuenta de origen', - 'first_split_overrules_destination' => 'La primera división puede anular la cuenta de destino', - 'spent_x_of_y' => '{amount} gastado de {total}', + 'wait_loading_transaction' => 'Por favor, espere a que se cargue el formulario', + 'wait_loading_data' => 'Por favor, espere a que su información se cargue...', + 'wait_attachments' => 'Por favor, espere a que se carguen los archivos adjuntos.', + 'errors_upload' => 'La carga ha fallado. Por favor, comprueba el error en la consola de tu navegador.', + 'amount_foreign_if' => 'Importe en moneda extranjera, si existe', + 'amount_destination_account' => 'Importe en la moneda de la cuenta de destino', + 'edit_transaction_title' => 'Editar transacción ":description"', + 'unreconcile' => 'Deshacer reconciliación', + 'update_withdrawal' => 'Actualización de gasto', + 'update_deposit' => 'Actualizar ingreso', + 'update_transaction' => 'Actualizar transacción', + 'update_transfer' => 'Actualización de transferencia', + 'updated_withdrawal' => 'Gasto actualizado', + 'updated_deposit' => 'Actualizado ingreso ":description"', + 'updated_transfer' => 'Transferencia actualizada ":description"', + 'no_changes_withdrawal' => 'El gasto ":description" no se cambió.', + 'no_changes_deposit' => 'El ingreso ":description" no se cambió.', + 'no_changes_transfer' => 'Transferencia ":description" no se cambió.', + 'delete_withdrawal' => 'Eliminar gasto ":description"', + 'delete_deposit' => 'Eliminar ingreso ":description"', + 'delete_transfer' => 'Eliminar transferencia ":description"', + 'deleted_withdrawal' => 'Eliminado correctamente', + 'deleted_deposit' => 'Ingreso eliminado correctamente ":description"', + 'deleted_transfer' => 'Transferencia eliminada exitosamente ":description"', + 'deleted_reconciliation' => 'Transacción de conciliación eliminada con éxito "::description"', + 'stored_journal' => 'Nueva transacción creada exitosamente ":description"', + 'stored_journal_js' => 'Nueva transacción creada con éxito "%{description}"', + 'stored_journal_no_descr' => 'Se ha creado tu nueva transacción con éxito', + 'updated_journal_no_descr' => 'Se ha actualizado tu transacción con éxito', + 'select_transactions' => 'Seleccionar transacciones', + 'rule_group_select_transactions' => 'Aplicar ":title" a las transacciones', + 'rule_select_transactions' => 'Aplicar ":title" a las transacciones', + 'stop_selection' => 'Pare de seleccionas transacciones', + 'reconcile_selected' => 'Reconciliar', + 'mass_delete_journals' => 'Eliminar un numero de transacciones', + 'mass_edit_journals' => 'Editar un numero de transacciones', + 'mass_bulk_journals' => 'Editar múltiples transacciones', + 'mass_bulk_journals_explain' => 'Este formulario le permite cambiar las propiedades de las transacciones que aparecen a continuación en una actualización de barrido. Todas las transacciones en la tabla se actualizarán cuando cambie los parámetros que vea aquí.', + 'part_of_split' => 'Esta transacción es parte de una transacción dividida. Si no ha seleccionado todas las partes, puede terminar con cambiar sólo la mitad de la transacción.', + 'bulk_set_new_values' => 'Use las entradas abajo para establecer nuevos valores. Si usted los deja vacíos, serán vacíos para todos. también, tenga en cuenta que solo los gastos tendrán un presupuesto.', + 'no_bulk_category' => 'No actualizar la categoria', + 'no_bulk_budget' => 'No actualizar el presupuesto', + 'no_bulk_tags' => 'No actualizar etiqueta(s)', + 'replace_with_these_tags' => 'Reemplazar con estas etiquetas', + 'append_these_tags' => 'Añadir esas etiquetas', + 'mass_edit' => 'Editar seleccionado individualmente', + 'bulk_edit' => 'Editar seleccionados en masa', + 'mass_delete' => 'Eliminar seleccionados', + 'cannot_edit_other_fields' => 'Usted no puede editar en masa otros campos ademas de los que están aquí, porque no hay espacio para mostrarlos. siga el enlace y editelo uno a uno, si usted necesita editar estos campos.', + 'cannot_change_amount_reconciled' => 'No puede cambiar la cantidad de transacciones conciliadas.', + 'no_budget' => '(sin presupuesto)', + 'no_bill' => '(sin factura)', + 'account_per_budget' => 'Cuenta por presupuesto', + 'account_per_category' => 'Cuenta por categoría', + 'create_new_object' => 'Crear', + 'empty' => '(vacío)', + 'all_other_budgets' => '(todos los demás presupuestos)', + 'all_other_accounts' => '(todas las demás cuentas)', + 'expense_per_source_account' => 'Gastos por cuenta de origen', + 'expense_per_destination_account' => 'Gastos por cuenta destino', + 'income_per_destination_account' => 'Ingresos por cuenta de destino', + 'spent_in_specific_category' => 'Gastado en categoría ":category"', + 'earned_in_specific_category' => 'Ganado en la categoría ":category"', + 'spent_in_specific_tag' => 'Gastado en etiqueta ":tag"', + 'earned_in_specific_tag' => 'Ganado en etiqueta ":tag"', + 'income_per_source_account' => 'Ingresos por cuenta fuente', + 'average_spending_per_destination' => 'Gasto promedio por cuenta de destino', + 'average_spending_per_source' => 'Gasto promedio por cuenta de origen', + 'average_earning_per_source' => 'Ingreso promedio por cuenta de origen', + 'average_earning_per_destination' => 'Ingreso promedio por cuenta de destino', + 'account_per_tag' => 'Cuenta por etiqueta', + 'tag_report_expenses_listed_once' => 'Los gastos y los ingresos nunca se enumeran dos veces. Si una transacción tiene múltiples etiquetas, sólo puede aparecer bajo una de sus etiquetas. Esta lista puede parecer que faltan datos, pero las cantidades serán correctas.', + 'double_report_expenses_charted_once' => 'Los gastos y los ingresos nunca se muestran dos veces. Si una transacción tiene múltiples etiquetas, sólo puede aparecer bajo una de sus etiquetas. Este gráfico puede parecer que faltan datos, pero las cantidades serán correctas.', + 'tag_report_chart_single_tag' => 'Este gráfico se aplica a una sola etiqueta. Si una transacción tiene múltiples etiquetas, lo que ve aquí puede reflejarse también en los gráficos de otras etiquetas.', + 'tag' => 'Etiqueta', + 'no_budget_squared' => '(sin presupuesto)', + 'perm-delete-many' => 'Eliminar muchos elementos en una sola vez puede ser muy perturbador. Por favor, tenga cuidado. Puede eliminar parte de una transacción dividida de esta página, así que tenga cuidado.', + 'mass_deleted_transactions_success' => 'Eliminado :count transacción.|Eliminado :count transacciones.', + 'mass_edited_transactions_success' => 'Actualizado :count transaction.|Actualizado :count transacciones.', + 'opt_group_' => '(Sin tipo de cuenta)', + 'opt_group_no_account_type' => '(Sin tipo de cuenta)', + 'opt_group_defaultAsset' => 'Cuentas de activos por defecto', + 'opt_group_savingAsset' => 'Cuenta de ahorros', + 'opt_group_sharedAsset' => 'Cuenta de activos compartidas', + 'opt_group_ccAsset' => 'Tarjetas de credito', + 'opt_group_cashWalletAsset' => 'Billeteras de efectivo', + 'opt_group_expense_account' => 'Cuentas de gastos', + 'opt_group_revenue_account' => 'Cuentas de ingresos', + 'opt_group_l_Loan' => 'Pasivo: Préstamo', + 'opt_group_cash_account' => 'Cuenta de efectivo', + 'opt_group_l_Debt' => 'Pasivo: Deuda', + 'opt_group_l_Mortgage' => 'Pasivo: Hipoteca', + 'opt_group_l_Credit card' => 'Pasivo: Tarjeta de crédito', + 'notes' => 'Notas', + 'unknown_journal_error' => 'No se pudo guardar la transacción. Por favor, revise los archivos de registro.', + 'attachment_not_found' => 'No se pudo encontrar este adjunto.', + 'journal_link_bill' => 'Esta transacción está vinculada a la factura :name. Para eliminar la conexión, desmarca la casilla de verificación. Usa reglas para conectarla a otra factura.', + 'transaction_stored_link' => 'La transacción #{ID} ("{title}") ha sido almacenada.', + 'transaction_new_stored_link' => 'La transacción #{ID} ha sido guardada.', + 'transaction_updated_link' => 'La transacción #{ID} ("{title}") ha sido actualizada.', + 'transaction_updated_no_changes' => 'La transacción #{ID} ("{title}") no recibió ningún cambio.', + 'first_split_decides' => 'La primera división determina el valor de este campo', + 'first_split_overrules_source' => 'La primera división puede anular la cuenta de origen', + 'first_split_overrules_destination' => 'La primera división puede anular la cuenta de destino', + 'spent_x_of_y' => '{amount} gastado de {total}', // new user: - 'welcome' => 'Bienvenido a Firefly III!', - 'submit' => 'Enviar', - 'submission' => 'Envío', - 'submit_yes_really' => 'Enviar (Se lo que estoy haciendo)', - 'getting_started' => 'Comenzando', - 'to_get_started' => 'Felicidades, has instalado con éxito Firefly III. Para empezar en esta herramienta, por favor escribe el nombre de tu banco y el saldo de su cuenta principal. Si tienes más de una cuenta, podrás agregarla más tarde. Firefly III necesita algo por lo que empezar.', - 'savings_balance_text' => 'Firefly III creará automáticamente una cuenta de ahorros. Por defecto, no habrá dinero en su cuenta de ahorros, pero si le dice a Firefly III el saldo se almacenará como tal.', - 'finish_up_new_user' => '¡Todo listo! Puedes continuar pulsando Enviar. Serás redirigido al inicio de Firefly III.', - 'stored_new_accounts_new_user' => '¡Bien! Tus nuevas cuentas han sido almacenadas.', - 'set_preferred_language' => 'Si prefiere usar Firefly III en otro lenguaje, por favor indíquelo aquí.', - 'language' => 'Idioma', - 'new_savings_account' => ':bank_name Cuenta de ahorros', - 'cash_wallet' => 'Billetera de efectivo', - 'currency_not_present' => 'Si la moneda que normalmente utiliza no se encuentra listada, no se preocupe. Puede crear su propia moneda desde Opciones>Monedas.', + 'welcome' => 'Bienvenido a Firefly III!', + 'submit' => 'Enviar', + 'submission' => 'Envío', + 'submit_yes_really' => 'Enviar (Se lo que estoy haciendo)', + 'getting_started' => 'Comenzando', + 'to_get_started' => 'Felicidades, has instalado con éxito Firefly III. Para empezar en esta herramienta, por favor escribe el nombre de tu banco y el saldo de su cuenta principal. Si tienes más de una cuenta, podrás agregarla más tarde. Firefly III necesita algo por lo que empezar.', + 'savings_balance_text' => 'Firefly III creará automáticamente una cuenta de ahorros. Por defecto, no habrá dinero en su cuenta de ahorros, pero si le dice a Firefly III el saldo se almacenará como tal.', + 'finish_up_new_user' => '¡Todo listo! Puedes continuar pulsando Enviar. Serás redirigido al inicio de Firefly III.', + 'stored_new_accounts_new_user' => '¡Bien! Tus nuevas cuentas han sido almacenadas.', + 'set_preferred_language' => 'Si prefiere usar Firefly III en otro lenguaje, por favor indíquelo aquí.', + 'language' => 'Idioma', + 'new_savings_account' => ':bank_name Cuenta de ahorros', + 'cash_wallet' => 'Billetera de efectivo', + 'currency_not_present' => 'Si la moneda que normalmente utiliza no se encuentra listada, no se preocupe. Puede crear su propia moneda desde Opciones>Monedas.', // home page: - 'transaction_table_description' => 'Una tabla que contiene sus transacciones', - 'opposing_account' => 'Cuenta opuesta', - 'yourAccounts' => 'Tus cuentas', - 'your_accounts' => 'Resumen de su cuenta', - 'category_overview' => 'Resumen de categorías', - 'expense_overview' => 'Resumen de la cuenta de gastos', - 'revenue_overview' => 'Resumen de la cuenta de ingresos', - 'budgetsAndSpending' => 'Presupuestos y gastos', - 'budgets_and_spending' => 'Presupuestos y gastos', - 'go_to_budget' => 'Ir al presupuesto "{budget}"', - 'go_to_deposits' => 'Ir a ingresos', - 'go_to_expenses' => 'Ir a gastos', - 'savings' => 'Ahorros', - 'newWithdrawal' => 'Nuevo gasto', - 'newDeposit' => 'Nuevo ingreso', - 'newTransfer' => 'Nueva transferencia', - 'bills_to_pay' => 'Facturas por pagar', - 'per_day' => 'Por dia', - 'left_to_spend_per_day' => 'Disponible para gasto diario', - 'bills_paid' => 'Facturas pagadas', - 'custom_period' => 'Período personalizado', - 'reset_to_current' => 'Restablecer al período actual', - 'select_period' => 'Seleccione un período', + 'transaction_table_description' => 'Una tabla que contiene sus transacciones', + 'opposing_account' => 'Cuenta opuesta', + 'yourAccounts' => 'Tus cuentas', + 'your_accounts' => 'Resumen de su cuenta', + 'category_overview' => 'Resumen de categorías', + 'expense_overview' => 'Resumen de la cuenta de gastos', + 'revenue_overview' => 'Resumen de la cuenta de ingresos', + 'budgetsAndSpending' => 'Presupuestos y gastos', + 'budgets_and_spending' => 'Presupuestos y gastos', + 'go_to_budget' => 'Ir al presupuesto "{budget}"', + 'go_to_deposits' => 'Ir a ingresos', + 'go_to_expenses' => 'Ir a gastos', + 'savings' => 'Ahorros', + 'newWithdrawal' => 'Nuevo gasto', + 'newDeposit' => 'Nuevo ingreso', + 'newTransfer' => 'Nueva transferencia', + 'bills_to_pay' => 'Facturas por pagar', + 'per_day' => 'Por dia', + 'left_to_spend_per_day' => 'Disponible para gasto diario', + 'bills_paid' => 'Facturas pagadas', + 'custom_period' => 'Período personalizado', + 'reset_to_current' => 'Restablecer al período actual', + 'select_period' => 'Seleccione un período', // menu and titles, should be recycled as often as possible: - 'currency' => 'Moneda', - 'preferences' => 'Preferencias', - 'logout' => 'Cerrar sesión', - 'logout_other_sessions' => 'Desconectar todas las demás sesiones', - 'toggleNavigation' => 'Activar navegación', - 'searchPlaceholder' => 'Buscar...', - 'version' => 'Versión', - 'dashboard' => 'Panel de control', - 'income_and_expense' => 'Ingresos y gastos', - 'all_money' => 'Todo tu dinero', - 'unknown_source_plain' => 'Cuenta origen desconocida', - 'unknown_dest_plain' => 'Dirección de destino desconocida', - 'unknown_any_plain' => 'Cuenta desconocida', - 'unknown_budget_plain' => 'Sin presupuesto', - 'available_budget' => 'Presupuesto disponible ({currency})', - 'currencies' => 'Divisas', - 'activity' => 'Actividad', - 'usage' => 'Uso', - 'accounts' => 'Cuentas', - 'Asset account' => 'Cuenta de activos', - 'Default account' => 'Cuenta de activos', - 'Expense account' => 'Cuenta de gastos', - 'Revenue account' => 'Cuenta de ganancia', - 'Initial balance account' => 'Cuenta de balance inicial', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Deuda', - 'account_type_Loan' => 'Préstamo', - 'account_type_Mortgage' => 'Hipoteca', - 'account_type_debt' => 'Deuda', - 'account_type_loan' => 'Préstamo', - 'account_type_mortgage' => 'Hipoteca', - 'account_type_Credit card' => 'Tarjeta de crédito', - 'credit_card_type_monthlyFull' => 'Pago completo cada mes', - 'liability_direction_credit' => 'Se me debe esta deuda', - 'liability_direction_debit' => 'Le debo esta deuda a otra persona', - 'liability_direction_credit_short' => 'Tenía esta deuda', - 'liability_direction_debit_short' => 'Tiene esta deuda', - 'liability_direction__short' => 'Desconocido', - 'liability_direction_null_short' => 'Desconocido', - 'Liability credit' => 'Crédito pasivo', - 'budgets' => 'Presupuestos', - 'tags' => 'Etiquetas', - 'reports' => 'Informes', - 'transactions' => 'Transacciones', - 'expenses' => 'Gastos', - 'income' => 'Ingresos / salarios', - 'transfers' => 'Transferencias', - 'moneyManagement' => 'Gestión del dinero', - 'money_management' => 'Gestión del dinero', - 'tools' => 'Herramientas', - 'piggyBanks' => 'Huchas', - 'piggy_banks' => 'Huchas', - 'amount_x_of_y' => '{current} de {total}', - 'bills' => 'Facturas', - 'withdrawal' => 'gasto', - 'opening_balance' => 'Saldo inicial', - 'deposit' => 'Ingreso', - 'account' => 'Cuenta', - 'transfer' => 'Transferencia', - 'Withdrawal' => 'Gasto', - 'Deposit' => 'Ingreso', - 'Transfer' => 'Transferencia', - 'bill' => 'Factura', - 'yes' => 'Si', - 'no' => 'No', - 'amount' => 'Cantidad', - 'overview' => 'Resumen', - 'saveOnAccount' => 'Guardar en cuenta', - 'unknown' => 'Desconocido', - 'monthly' => 'Mensual', - 'profile' => 'Perfil', - 'errors' => 'Errores', - 'debt_start_date' => 'Fecha de inicio de deuda', - 'debt_start_amount' => 'Cantidad inicial de la deuda', - 'debt_start_amount_help' => 'Siempre es mejor establecer este valor a una cantidad negativa. Lea las páginas de ayuda (arriba a la derecha (icono-?)) para más información.', - 'interest_period_help' => 'Este campo es meramente cosmético y no se calculará para usted. Como resulta que los bancos son muy estrepitosos, por lo que Firefly III nunca lo hace bien.', - 'store_new_liabilities_account' => 'Crear nuevo pasivo', - 'edit_liabilities_account' => 'Editar pasivo ":name"', - 'financial_control' => 'Control financiero', - 'accounting' => 'Contabilidad', - 'automation' => 'Automatización', - 'others' => 'Otros', - 'classification' => 'Clasificación', - 'store_transaction' => 'Guardar transacción', + 'currency' => 'Moneda', + 'preferences' => 'Preferencias', + 'logout' => 'Cerrar sesión', + 'logout_other_sessions' => 'Desconectar todas las demás sesiones', + 'toggleNavigation' => 'Activar navegación', + 'searchPlaceholder' => 'Buscar...', + 'version' => 'Versión', + 'dashboard' => 'Panel de control', + 'income_and_expense' => 'Ingresos y gastos', + 'all_money' => 'Todo tu dinero', + 'unknown_source_plain' => 'Cuenta origen desconocida', + 'unknown_dest_plain' => 'Dirección de destino desconocida', + 'unknown_any_plain' => 'Cuenta desconocida', + 'unknown_budget_plain' => 'Sin presupuesto', + 'available_budget' => 'Presupuesto disponible ({currency})', + 'currencies' => 'Divisas', + 'activity' => 'Actividad', + 'usage' => 'Uso', + 'accounts' => 'Cuentas', + 'Asset account' => 'Cuenta de activos', + 'Default account' => 'Cuenta de activos', + 'Expense account' => 'Cuenta de gastos', + 'Revenue account' => 'Cuenta de ganancia', + 'Initial balance account' => 'Cuenta de balance inicial', + 'account_type_Asset account' => 'Cuenta de activos', + 'account_type_Expense account' => 'Cuenta de gastos', + 'account_type_Revenue account' => 'Cuenta de ingresos', + 'account_type_Debt' => 'Deuda', + 'account_type_Loan' => 'Préstamo', + 'account_type_Mortgage' => 'Hipoteca', + 'account_type_debt' => 'Deuda', + 'account_type_loan' => 'Préstamo', + 'account_type_mortgage' => 'Hipoteca', + 'account_type_Credit card' => 'Tarjeta de crédito', + 'credit_card_type_monthlyFull' => 'Pago completo cada mes', + 'liability_direction_credit' => 'Se me debe esta deuda', + 'liability_direction_debit' => 'Le debo esta deuda a otra persona', + 'liability_direction_credit_short' => 'Tenía esta deuda', + 'liability_direction_debit_short' => 'Tiene esta deuda', + 'liability_direction__short' => 'Desconocido', + 'liability_direction_null_short' => 'Desconocido', + 'Liability credit' => 'Crédito pasivo', + 'budgets' => 'Presupuestos', + 'tags' => 'Etiquetas', + 'reports' => 'Informes', + 'transactions' => 'Transacciones', + 'expenses' => 'Gastos', + 'income' => 'Ingresos / salarios', + 'transfers' => 'Transferencias', + 'moneyManagement' => 'Gestión del dinero', + 'money_management' => 'Gestión del dinero', + 'tools' => 'Herramientas', + 'piggyBanks' => 'Huchas', + 'piggy_banks' => 'Huchas', + 'amount_x_of_y' => '{current} de {total}', + 'bills' => 'Facturas', + 'withdrawal' => 'gasto', + 'opening_balance' => 'Saldo inicial', + 'deposit' => 'Ingreso', + 'account' => 'Cuenta', + 'transfer' => 'Transferencia', + 'Withdrawal' => 'Gasto', + 'Deposit' => 'Ingreso', + 'Transfer' => 'Transferencia', + 'bill' => 'Factura', + 'yes' => 'Si', + 'no' => 'No', + 'amount' => 'Cantidad', + 'overview' => 'Resumen', + 'saveOnAccount' => 'Guardar en cuenta', + 'unknown' => 'Desconocido', + 'monthly' => 'Mensual', + 'profile' => 'Perfil', + 'errors' => 'Errores', + 'debt_start_date' => 'Fecha de inicio de deuda', + 'debt_start_amount' => 'Cantidad inicial de la deuda', + 'debt_start_amount_help' => 'Siempre es mejor establecer este valor a una cantidad negativa. Lea las páginas de ayuda (arriba a la derecha (icono-?)) para más información.', + 'interest_period_help' => 'Este campo es meramente cosmético y no se calculará para usted. Como resulta que los bancos son muy estrepitosos, por lo que Firefly III nunca lo hace bien.', + 'store_new_liabilities_account' => 'Crear nuevo pasivo', + 'edit_liabilities_account' => 'Editar pasivo ":name"', + 'financial_control' => 'Control financiero', + 'accounting' => 'Contabilidad', + 'automation' => 'Automatización', + 'others' => 'Otros', + 'classification' => 'Clasificación', + 'store_transaction' => 'Guardar transacción', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Reporte financiero por defecto entre :start y :end', - 'report_audit' => 'Transacción general del historial entre :start y :end', - 'report_category' => 'Reporte de categoría entre :start y :end', - 'report_double' => 'Informe de cuenta de gastos/ingresos entre :start y :end', - 'report_budget' => 'Reporte de presupuesto entre :start y :end', - 'report_tag' => 'Reporte de etiqueta entre :start y :end', - 'quick_link_reports' => 'Enlaces rápidos', - 'quick_link_examples' => 'Estos son sólo algunos enlaces de ejemplo para empezar. Echa un vistazo a las páginas de ayuda bajo el botón (?)-para obtener información sobre todos los informes y las palabras mágicas que puedes usar.', - 'quick_link_default_report' => 'Reporte financiero por defecto', - 'quick_link_audit_report' => 'Resumen del historial de transacciones', - 'report_this_month_quick' => 'Mes en curso, todas las cuentas', - 'report_last_month_quick' => 'Último mes, todas las cuentas', - 'report_this_year_quick' => 'Año en curso, todas las cuentas', - 'report_this_fiscal_year_quick' => 'Año fiscal en curso, todas las cuentas', - 'report_all_time_quick' => 'Todo el tiempo, todas las cuentas', - 'reports_can_bookmark' => 'Recuerda que los informes pueden ser marcados como favoritos.', - 'incomeVsExpenses' => 'Ingresos vs. gastos', - 'accountBalances' => 'Balances de cuentas', - 'balanceStart' => 'Balance al inicio de un periodo', - 'balanceEnd' => 'Balance al final de un periodo', - 'splitByAccount' => 'Separada por cuenta', - 'coveredWithTags' => 'Cubierta con etiquetas', - 'leftInBudget' => 'Disponible en presupuesto', - 'left_in_debt' => 'Importe debido', - 'sumOfSums' => 'Suma de sumas', - 'noCategory' => '(sin categoría)', - 'notCharged' => 'No cargado (todavía)', - 'inactive' => 'Inactivo', - 'active' => 'Activo', - 'difference' => 'Diferente', - 'money_flowing_in' => 'Entrada', - 'money_flowing_out' => 'Salida', - 'topX' => 'tope :number', - 'show_full_list' => 'Mostrar lista entera', - 'show_only_top' => 'Mostrar solo tope :number', - 'report_type' => 'Tipo de reporte', - 'report_type_default' => 'Informe financiero predeterminado', - 'report_type_audit' => 'Resumen del historial de transacciones (auditar)', - 'report_type_category' => 'Reporte de categoría', - 'report_type_budget' => 'Reporte de presupuesto', - 'report_type_tag' => 'Reporte de etiqueta', - 'report_type_double' => 'Informe de cuenta de gastos/ingresos', - 'more_info_help' => 'Puedes encontrar más información sobre estos tipos de informes en las páginas de ayuda. Pulsa el icono (?) En la esquina superior derecha.', - 'report_included_accounts' => 'Cuentas incluidas', - 'report_date_range' => 'Rango de fechas', - 'report_preset_ranges' => 'Rangos preestablecidos', - 'shared' => 'Compartido', - 'fiscal_year' => 'Año fiscal', - 'income_entry' => 'Ingresos de la cuenta ":name" entre :start y :end', - 'expense_entry' => 'Gastos a cuenta ":name" entre :start y :end', - 'category_entry' => 'Gastos e ingresos en la categoría ":name" entre :start y :end', - 'budget_spent_amount' => 'Gastos en presupuesto ":budget" entre :start y :end', - 'balance_amount' => 'Gastos en presupuesto ":budget" pago desde la cuenta ":account" entre :start y :end', - 'no_audit_activity' => 'Ninguna actividad fue registrada en la cuenta :account_name entre :start y :end.', - 'audit_end_balance' => 'Saldo de cuenta de :account_name en el final de :end fue :balance', - 'reports_extra_options' => 'Opciones adicionales', - 'report_has_no_extra_options' => 'Este informe no tiene opciones adicionales', - 'reports_submit' => 'Ver informe', - 'end_after_start_date' => 'Fecha final de reporte debe ser después de la fecha de inicio.', - 'select_category' => 'Seleccionar categoría (as)', - 'select_budget' => 'Seleccionar presupuesto (s).', - 'select_tag' => 'Seleccionar etiqueta (s).', - 'income_per_category' => 'Ingresos por categoria', - 'expense_per_category' => 'Gastos por categoria', - 'expense_per_budget' => 'Gastos por presupuestos', - 'income_per_account' => 'Ingresos por cuenta', - 'expense_per_account' => 'Gastos por cuenta', - 'expense_per_tag' => 'Gastos por etiqueta', - 'income_per_tag' => 'Ingreso por etiqueta', - 'include_expense_not_in_budget' => 'Gastos incluidos que no están en el presupuesto (s) seleccionado', - 'include_expense_not_in_account' => 'Gastos incluidos que no están en la cuenta (s) seleccionada', - 'include_expense_not_in_category' => 'Gastos incluidos que no están en la categoría (s) seleccionada', - 'include_income_not_in_category' => 'Ingresos incluidos que no estan en la categoria (s) seleccionada', - 'include_income_not_in_account' => 'Ingresos incluidos que no están en la cuenta (s) seleccionada', - 'include_income_not_in_tags' => 'Ingresos incluidos no en la etiqueta (s) seleccionadas', - 'include_expense_not_in_tags' => 'Gastos incluidos no seleccionados con etiqueta', - 'everything_else' => 'Todo lo demas', - 'income_and_expenses' => 'Ingresos y gastos', - 'spent_average' => 'Gastado (promedio)', - 'income_average' => 'Ingresos (promedio)', - 'transaction_count' => 'Cuenta de transacciones', - 'average_spending_per_account' => 'Promedio de gasto por cuenta', - 'average_income_per_account' => 'Promedio de ingreso por cuenta', - 'total' => 'Total', - 'description' => 'Descripción', - 'sum_of_period' => 'Suma de período', - 'average_in_period' => 'Promedio en el período', - 'account_role_defaultAsset' => 'Cuentas de ingresos por defecto', - 'account_role_sharedAsset' => 'Cuenta de ingresos compartida', - 'account_role_savingAsset' => 'Cuentas de ahorros', - 'account_role_ccAsset' => 'Tarjeta de Crédito', - 'account_role_cashWalletAsset' => 'Billetera de efectivo', - 'budget_chart_click' => 'Por favor de click el nombre del presupuesto en la tabla de arriba para ver el cuadro.', - 'category_chart_click' => 'Por favor de click en el nombre de categoría en la tabla de arriba para ver el cuadro.', - 'in_out_accounts' => 'Ganado y gastado por combinación', - 'in_out_accounts_per_asset' => 'Ganado y gastado (por cuenta de activos)', - 'in_out_per_category' => 'Ganado y gastado por categoría', - 'out_per_budget' => 'Gasto por presupuesto', - 'select_expense_revenue' => 'Seleccione cuenta de gastos/ingresos', - 'multi_currency_report_sum' => 'Como esta lista contiene cuentas con múltiples monedas, la(s) suma(s) que veas puede no tener sentido. El reporte siempre figurará en tu moneda predeterminada.', - 'sum_in_default_currency' => 'La suma siempre estará en tu moneda predeterminada.', - 'net_filtered_prefs' => 'Este gráfico nunca incluirá cuentas que tengan la opción "Incluir en el valor neto" no marcada.', + 'report_default' => 'Reporte financiero por defecto entre :start y :end', + 'report_audit' => 'Transacción general del historial entre :start y :end', + 'report_category' => 'Reporte de categoría entre :start y :end', + 'report_double' => 'Informe de cuenta de gastos/ingresos entre :start y :end', + 'report_budget' => 'Reporte de presupuesto entre :start y :end', + 'report_tag' => 'Reporte de etiqueta entre :start y :end', + 'quick_link_reports' => 'Enlaces rápidos', + 'quick_link_examples' => 'Estos son sólo algunos enlaces de ejemplo para empezar. Echa un vistazo a las páginas de ayuda bajo el botón (?)-para obtener información sobre todos los informes y las palabras mágicas que puedes usar.', + 'quick_link_default_report' => 'Reporte financiero por defecto', + 'quick_link_audit_report' => 'Resumen del historial de transacciones', + 'report_this_month_quick' => 'Mes en curso, todas las cuentas', + 'report_last_month_quick' => 'Último mes, todas las cuentas', + 'report_this_year_quick' => 'Año en curso, todas las cuentas', + 'report_this_fiscal_year_quick' => 'Año fiscal en curso, todas las cuentas', + 'report_all_time_quick' => 'Todo el tiempo, todas las cuentas', + 'reports_can_bookmark' => 'Recuerda que los informes pueden ser marcados como favoritos.', + 'incomeVsExpenses' => 'Ingresos vs. gastos', + 'accountBalances' => 'Balances de cuentas', + 'balanceStart' => 'Balance al inicio de un periodo', + 'balanceEnd' => 'Balance al final de un periodo', + 'splitByAccount' => 'Separada por cuenta', + 'coveredWithTags' => 'Cubierta con etiquetas', + 'leftInBudget' => 'Disponible en presupuesto', + 'left_in_debt' => 'Importe debido', + 'sumOfSums' => 'Suma de sumas', + 'noCategory' => '(sin categoría)', + 'notCharged' => 'No cargado (todavía)', + 'inactive' => 'Inactivo', + 'active' => 'Activo', + 'difference' => 'Diferente', + 'money_flowing_in' => 'Entrada', + 'money_flowing_out' => 'Salida', + 'topX' => 'tope :number', + 'show_full_list' => 'Mostrar lista entera', + 'show_only_top' => 'Mostrar solo tope :number', + 'report_type' => 'Tipo de reporte', + 'report_type_default' => 'Informe financiero predeterminado', + 'report_type_audit' => 'Resumen del historial de transacciones (auditar)', + 'report_type_category' => 'Reporte de categoría', + 'report_type_budget' => 'Reporte de presupuesto', + 'report_type_tag' => 'Reporte de etiqueta', + 'report_type_double' => 'Informe de cuenta de gastos/ingresos', + 'more_info_help' => 'Puedes encontrar más información sobre estos tipos de informes en las páginas de ayuda. Pulsa el icono (?) En la esquina superior derecha.', + 'report_included_accounts' => 'Cuentas incluidas', + 'report_date_range' => 'Rango de fechas', + 'report_preset_ranges' => 'Rangos preestablecidos', + 'shared' => 'Compartido', + 'fiscal_year' => 'Año fiscal', + 'income_entry' => 'Ingresos de la cuenta ":name" entre :start y :end', + 'expense_entry' => 'Gastos a cuenta ":name" entre :start y :end', + 'category_entry' => 'Gastos e ingresos en la categoría ":name" entre :start y :end', + 'budget_spent_amount' => 'Gastos en presupuesto ":budget" entre :start y :end', + 'balance_amount' => 'Gastos en presupuesto ":budget" pago desde la cuenta ":account" entre :start y :end', + 'no_audit_activity' => 'Ninguna actividad fue registrada en la cuenta :account_name entre :start y :end.', + 'audit_end_balance' => 'Saldo de cuenta de :account_name en el final de :end fue :balance', + 'reports_extra_options' => 'Opciones adicionales', + 'report_has_no_extra_options' => 'Este informe no tiene opciones adicionales', + 'reports_submit' => 'Ver informe', + 'end_after_start_date' => 'Fecha final de reporte debe ser después de la fecha de inicio.', + 'select_category' => 'Seleccionar categoría (as)', + 'select_budget' => 'Seleccionar presupuesto (s).', + 'select_tag' => 'Seleccionar etiqueta (s).', + 'income_per_category' => 'Ingresos por categoria', + 'expense_per_category' => 'Gastos por categoria', + 'expense_per_budget' => 'Gastos por presupuestos', + 'income_per_account' => 'Ingresos por cuenta', + 'expense_per_account' => 'Gastos por cuenta', + 'expense_per_tag' => 'Gastos por etiqueta', + 'income_per_tag' => 'Ingreso por etiqueta', + 'include_expense_not_in_budget' => 'Gastos incluidos que no están en el presupuesto (s) seleccionado', + 'include_expense_not_in_account' => 'Gastos incluidos que no están en la cuenta (s) seleccionada', + 'include_expense_not_in_category' => 'Gastos incluidos que no están en la categoría (s) seleccionada', + 'include_income_not_in_category' => 'Ingresos incluidos que no estan en la categoria (s) seleccionada', + 'include_income_not_in_account' => 'Ingresos incluidos que no están en la cuenta (s) seleccionada', + 'include_income_not_in_tags' => 'Ingresos incluidos no en la etiqueta (s) seleccionadas', + 'include_expense_not_in_tags' => 'Gastos incluidos no seleccionados con etiqueta', + 'everything_else' => 'Todo lo demas', + 'income_and_expenses' => 'Ingresos y gastos', + 'spent_average' => 'Gastado (promedio)', + 'income_average' => 'Ingresos (promedio)', + 'transaction_count' => 'Cuenta de transacciones', + 'average_spending_per_account' => 'Promedio de gasto por cuenta', + 'average_income_per_account' => 'Promedio de ingreso por cuenta', + 'total' => 'Total', + 'description' => 'Descripción', + 'sum_of_period' => 'Suma de período', + 'average_in_period' => 'Promedio en el período', + 'account_role_defaultAsset' => 'Cuentas de ingresos por defecto', + 'account_role_sharedAsset' => 'Cuenta de ingresos compartida', + 'account_role_savingAsset' => 'Cuentas de ahorros', + 'account_role_ccAsset' => 'Tarjeta de Crédito', + 'account_role_cashWalletAsset' => 'Billetera de efectivo', + 'budget_chart_click' => 'Por favor de click el nombre del presupuesto en la tabla de arriba para ver el cuadro.', + 'category_chart_click' => 'Por favor de click en el nombre de categoría en la tabla de arriba para ver el cuadro.', + 'in_out_accounts' => 'Ganado y gastado por combinación', + 'in_out_accounts_per_asset' => 'Ganado y gastado (por cuenta de activos)', + 'in_out_per_category' => 'Ganado y gastado por categoría', + 'out_per_budget' => 'Gasto por presupuesto', + 'select_expense_revenue' => 'Seleccione cuenta de gastos/ingresos', + 'multi_currency_report_sum' => 'Como esta lista contiene cuentas con múltiples monedas, la(s) suma(s) que veas puede no tener sentido. El reporte siempre figurará en tu moneda predeterminada.', + 'sum_in_default_currency' => 'La suma siempre estará en tu moneda predeterminada.', + 'net_filtered_prefs' => 'Este gráfico nunca incluirá cuentas que tengan la opción "Incluir en el valor neto" no marcada.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Grafico', - 'month' => 'Mes', - 'budget' => 'Presupuesto', - 'spent' => 'Gastado', - 'spent_capped' => 'Gastado (tope)', - 'spent_in_budget' => 'Gastado en presupuesto', - 'left_to_spend' => 'Disponible para gastar', - 'earned' => 'Ganado', - 'overspent' => 'Sobrepasadas', - 'left' => 'Disponible', - 'max-amount' => 'Cantidad máxima', - 'min-amount' => 'Monto mínimo', - 'journal-amount' => 'Entrada actual de factura', - 'name' => 'Nombre', - 'date' => 'Fecha', - 'date_and_time' => 'Fecha y hora', - 'time' => 'Hora', - 'paid' => 'Pagado', - 'unpaid' => 'No pagado', - 'day' => 'Día', - 'budgeted' => 'Presupuestado', - 'period' => 'Período', - 'balance' => 'Balance', - 'in_out_period' => 'Entrada y salida este periodo', - 'sum' => 'Suma', - 'summary' => 'Resumen', - 'average' => 'Promedio', - 'balanceFor' => 'Saldo por :name', - 'no_tags' => '(sin etiquetas)', + 'chart' => 'Grafico', + 'month' => 'Mes', + 'budget' => 'Presupuesto', + 'spent' => 'Gastado', + 'spent_capped' => 'Gastado (tope)', + 'spent_in_budget' => 'Gastado en presupuesto', + 'left_to_spend' => 'Disponible para gastar', + 'earned' => 'Ganado', + 'overspent' => 'Sobrepasadas', + 'left' => 'Disponible', + 'max-amount' => 'Cantidad máxima', + 'min-amount' => 'Monto mínimo', + 'journal-amount' => 'Entrada actual de factura', + 'name' => 'Nombre', + 'date' => 'Fecha', + 'date_and_time' => 'Fecha y hora', + 'time' => 'Hora', + 'paid' => 'Pagado', + 'unpaid' => 'No pagado', + 'day' => 'Día', + 'budgeted' => 'Presupuestado', + 'period' => 'Período', + 'balance' => 'Balance', + 'in_out_period' => 'Entrada y salida este periodo', + 'sum' => 'Suma', + 'summary' => 'Resumen', + 'average' => 'Promedio', + 'balanceFor' => 'Saldo por :name', + 'no_tags' => '(sin etiquetas)', + 'nothing_found' => '(no se encontró nada)', // piggy banks: - 'event_history' => 'Historial de eventos', - 'add_money_to_piggy' => 'Añadir dinero a la hucha ":name"', - 'piggy_bank' => 'Hucha', - 'new_piggy_bank' => 'Nueva hucha', - 'store_piggy_bank' => 'Crear hucha', - 'stored_piggy_bank' => 'Crear hucha ":name"', - 'account_status' => 'Estado de cuenta', - 'left_for_piggy_banks' => 'Apartado para las huchas', - 'sum_of_piggy_banks' => 'Total de las huchas', - 'saved_so_far' => 'Guardado hasta el momento', - 'left_to_save' => 'Disponible para ahorro', - 'suggested_amount' => 'Cantidad mensual sugerida para ahorrar', - 'add_money_to_piggy_title' => 'Añadir dinero a la hucha ":name"', - 'remove_money_from_piggy_title' => 'Quitar dinero de la hucha ":name"', - 'add' => 'Añadir', - 'no_money_for_piggy' => 'Usted no tiene dinero para añadir a esta hucha.', - 'suggested_savings_per_month' => 'Sugerido por mes', + 'event_history' => 'Historial de eventos', + 'add_money_to_piggy' => 'Añadir dinero a la hucha ":name"', + 'piggy_bank' => 'Hucha', + 'new_piggy_bank' => 'Nueva hucha', + 'store_piggy_bank' => 'Crear hucha', + 'stored_piggy_bank' => 'Crear hucha ":name"', + 'account_status' => 'Estado de cuenta', + 'left_for_piggy_banks' => 'Apartado para las huchas', + 'sum_of_piggy_banks' => 'Total de las huchas', + 'saved_so_far' => 'Guardado hasta el momento', + 'left_to_save' => 'Disponible para ahorro', + 'suggested_amount' => 'Cantidad mensual sugerida para ahorrar', + 'add_money_to_piggy_title' => 'Añadir dinero a la hucha ":name"', + 'remove_money_from_piggy_title' => 'Quitar dinero de la hucha ":name"', + 'add' => 'Añadir', + 'no_money_for_piggy' => 'Usted no tiene dinero para añadir a esta hucha.', + 'suggested_savings_per_month' => 'Sugerido por mes', - 'remove' => 'Eliminar', - 'max_amount_add' => 'La cantidad máxima que usted puede agregar es', - 'max_amount_remove' => 'La cantidad máxima que usted puede retirar es', - 'update_piggy_button' => 'Actualizar hucha', - 'update_piggy_title' => 'Actualizar hucha ":name"', - 'updated_piggy_bank' => 'Hucha ":name" actualizada', - 'details' => 'Detalles', - 'events' => 'Eventos', - 'target_amount' => 'Cantidad objetivo', - 'start_date' => 'Fecha de inicio', - 'no_start_date' => 'Sin fecha de inicio', - 'target_date' => 'Fecha objetivo', - 'no_target_date' => 'Sin fecha de objetivo', - 'table' => 'Mesa', - 'delete_piggy_bank' => 'Eliminar hucha ":name"', - 'cannot_add_amount_piggy' => 'No se pudo agregar :amount a ":name.".', - 'cannot_remove_from_piggy' => 'No se pudo eliminar :amount de :name.', - 'deleted_piggy_bank' => 'Hucha ":name" eliminada', - 'added_amount_to_piggy' => 'Agregado :amount a ":name"', - 'removed_amount_from_piggy' => 'Eliminado :amount de :name', - 'piggy_events' => 'Huchas relacionadas', + 'remove' => 'Eliminar', + 'max_amount_add' => 'La cantidad máxima que usted puede agregar es', + 'max_amount_remove' => 'La cantidad máxima que usted puede retirar es', + 'update_piggy_button' => 'Actualizar hucha', + 'update_piggy_title' => 'Actualizar hucha ":name"', + 'updated_piggy_bank' => 'Hucha ":name" actualizada', + 'details' => 'Detalles', + 'events' => 'Eventos', + 'target_amount' => 'Cantidad objetivo', + 'start_date' => 'Fecha de inicio', + 'no_start_date' => 'Sin fecha de inicio', + 'target_date' => 'Fecha objetivo', + 'no_target_date' => 'Sin fecha de objetivo', + 'table' => 'Mesa', + 'delete_piggy_bank' => 'Eliminar hucha ":name"', + 'cannot_add_amount_piggy' => 'No se pudo agregar :amount a ":name.".', + 'cannot_remove_from_piggy' => 'No se pudo eliminar :amount de :name.', + 'deleted_piggy_bank' => 'Hucha ":name" eliminada', + 'added_amount_to_piggy' => 'Agregado :amount a ":name"', + 'removed_amount_from_piggy' => 'Eliminado :amount de :name', + 'piggy_events' => 'Huchas relacionadas', // tags - 'delete_tag' => 'Eliminar etiqueta ":tag"', - 'deleted_tag' => 'Eliminar etiqueta ":tag"', - 'new_tag' => 'Hacer nueva etiqueta', - 'edit_tag' => 'Editar etiqueta ":tag"', - 'updated_tag' => 'Actualizar etiqueta ":tag"', - 'created_tag' => 'Etiqueta ":tag" ha sido creado!', + 'delete_tag' => 'Eliminar etiqueta ":tag"', + 'deleted_tag' => 'Eliminar etiqueta ":tag"', + 'new_tag' => 'Hacer nueva etiqueta', + 'edit_tag' => 'Editar etiqueta ":tag"', + 'updated_tag' => 'Actualizar etiqueta ":tag"', + 'created_tag' => 'Etiqueta ":tag" ha sido creado!', - 'transaction_journal_information' => 'Información de transacción', - 'transaction_journal_amount' => 'Información de cantidad', - 'transaction_journal_meta' => 'Información Meta', - 'transaction_journal_more' => 'Más información', - 'basic_journal_information' => 'Información básica de transacción', - 'transaction_journal_extra' => 'Información adicional', - 'att_part_of_journal' => 'Guardado en ":journal"', - 'total_amount' => 'Cantidad total', - 'number_of_decimals' => 'Número de decimales', + 'transaction_journal_information' => 'Información de transacción', + 'transaction_journal_amount' => 'Información de cantidad', + 'transaction_journal_meta' => 'Información Meta', + 'transaction_journal_more' => 'Más información', + 'basic_journal_information' => 'Información básica de transacción', + 'transaction_journal_extra' => 'Información adicional', + 'att_part_of_journal' => 'Guardado en ":journal"', + 'total_amount' => 'Cantidad total', + 'number_of_decimals' => 'Número de decimales', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'La invitación a ":address" ya ha sido canjeada.', - 'invite_is_deleted' => 'La invitación a ":address" ha sido eliminada.', - 'invite_new_user_title' => 'Invitar a un nuevo usuario', - 'invite_new_user_text' => 'Como administrador, puede invitar a los usuarios a registrarse en su instancia de Firefly III. Usando el enlace directo que puede compartir con ellos, podrán registrar una cuenta. El usuario invitado y su enlace de invitación aparecerán en la tabla de abajo. Es libre de compartir el enlace de invitación con ellos.', - 'invited_user_mail' => 'Dirección de correo electrónico', - 'invite_user' => 'Invitar a un usuario', - 'user_is_invited' => 'La dirección de correo electrónico ":address" ha sido invitada a Firefly III', - 'administration' => 'Administración', - 'system_settings' => 'Ajustes del sistema', - 'code_already_used' => 'Se ha utilizado el código de invitación', - 'user_administration' => 'Administración de usuarios', - 'list_all_users' => 'Todos los usuarios', - 'all_users' => 'Todo usuario', - 'instance_configuration' => 'Configuracion', - 'firefly_instance_configuration' => 'Opciones de configuración de Firefly III', - 'setting_single_user_mode' => 'Modo de usuario único', - 'setting_single_user_mode_explain' => 'Por defecto, Firefly III solo acepta un único usuario: tú. Esto es una medida de seguridad para impedir que otros utilicen su instancia a menos que lo permitas. Si desmarcas esta casilla, otros podrán registrarse en esta instancia si tienen acceso a ella.', - 'store_configuration' => 'Guardar configuración', - 'single_user_administration' => 'Administración de usuarios para :email', - 'edit_user' => 'Editar usuario :email', - 'hidden_fields_preferences' => 'Puede habilitar más opciones de transacción en sus ajustes .', - 'user_data_information' => 'Datos del usuario', - 'user_information' => 'Información del usuario', - 'total_size' => 'tamaño total', - 'budget_or_budgets' => ':count presupuesto|:count presupuestos', - 'budgets_with_limits' => ':count presupuesto con cantidad configurada|:count presupuestos con cantidad configurada', - 'nr_of_rules_in_total_groups' => ':count_rules reglas en :count_groups grupo de reglas', - 'tag_or_tags' => ':count etiqueta|:count etiquetas', - 'configuration_updated' => 'La configuración ha sido actualizada', - 'setting_is_demo_site' => 'Sitio de demostracion', - 'setting_is_demo_site_explain' => 'Si usted chequea esta casilla, esta instalación se comportara como si fuera el sitio de demostración, que puede tener efectos secundarios extraños.', - 'block_code_bounced' => 'Mensaje (s) de correo rebotados', - 'block_code_expired' => 'Cuenta de demostración vencida', - 'no_block_code' => 'No hay razón para el bloqueo o usuario bloqueado', - 'block_code_email_changed' => 'El usuario no ha confirmado aun una nueva dirección de correo', - 'admin_update_email' => 'Contrario a la pagina de perfil, El usuario NO se notificara que su dirección de correo ha cambiado!', - 'update_user' => 'Actualizar usuario', - 'updated_user' => 'Los datos del usuario han sido cambiados.', - 'delete_user' => 'Eliminar usuario :email', - 'user_deleted' => 'El usuario ha sido eliminado', - 'send_test_email' => 'Enviar mensaje de correo electrónico de prueba', - 'send_test_email_text' => 'Para comprobar si su instalación es capaz de enviar correos o enviar mensajes en Slack, presione este botón. No verá un error aquí (si existiera), los registros mostrarán cualquier error. Puede usar este botón todas las veces que desee. No existe control de spam. El mensaje será enviado a :email y debería llegar en breve.', - 'send_message' => 'Enviar mensaje', - 'send_test_triggered' => 'La prueba fue disparada. Chequee su bandeja de entrada y archivos de registro.', - 'give_admin_careful' => 'Los usuarios a los que se les conceden derechos de administrador pueden quitarte el tuyo. Ten cuidado.', - 'admin_maintanance_title' => 'Mantenimiento', - 'admin_maintanance_expl' => 'Algunos botones útiles para mantenimiento de Firefly III', - 'admin_maintenance_clear_cache' => 'Limpiar cache', - 'admin_notifications' => 'Notificaciones del administrador', - 'admin_notifications_expl' => 'Las siguientes notificaciones pueden ser activadas o desactivadas por el administrador. Si quiere recibir estos mensajes a través de Slack también, establezca la URL de "webhook entrante".', - 'admin_notification_check_user_new_reg' => 'El usuario recibe un mensaje de bienvenida tras el registro', - 'admin_notification_check_admin_new_reg' => 'Administrador(es) reciben una notificación de registro de un nuevo usuario', - 'admin_notification_check_new_version' => 'Una nueva versión está disponible', - 'admin_notification_check_invite_created' => 'Un usuario ha sido invitado a Firefly III', - 'admin_notification_check_invite_redeemed' => 'Una invitación de usuario ha sido canjeada', - 'all_invited_users' => 'Todos los usuarios invitados', - 'save_notification_settings' => 'Guardar ajustes', - 'notification_settings_saved' => 'Se han guardado los ajustes de notificación', - - - 'split_transaction_title' => 'Descripción de la transacción dividida', - 'split_transaction_title_help' => 'Si crea una transacción dividida, debe existir una descripción global para todas las divisiones de la transacción.', - 'split_title_help' => 'Si crea una transacción dividida, debe haber una descripción global para todos los fragmentos de la transacción.', - 'you_create_transfer' => 'Está creando una transferencia.', - 'you_create_withdrawal' => 'Está creando un gasto.', - 'you_create_deposit' => 'Está creando un ingreso.', + 'invite_is_already_redeemed' => 'La invitación a ":address" ya ha sido canjeada.', + 'invite_is_deleted' => 'La invitación a ":address" ha sido eliminada.', + 'invite_new_user_title' => 'Invitar a un nuevo usuario', + 'invite_new_user_text' => 'Como administrador, puede invitar a los usuarios a registrarse en su instancia de Firefly III. Usando el enlace directo que puede compartir con ellos, podrán registrar una cuenta. El usuario invitado y su enlace de invitación aparecerán en la tabla de abajo. Es libre de compartir el enlace de invitación con ellos.', + 'invited_user_mail' => 'Dirección de correo electrónico', + 'invite_user' => 'Invitar a un usuario', + 'user_is_invited' => 'La dirección de correo electrónico ":address" ha sido invitada a Firefly III', + 'administration' => 'Administración', + 'system_settings' => 'Ajustes del sistema', + 'code_already_used' => 'Se ha utilizado el código de invitación', + 'user_administration' => 'Administración de usuarios', + 'list_all_users' => 'Todos los usuarios', + 'all_users' => 'Todo usuario', + 'instance_configuration' => 'Configuracion', + 'firefly_instance_configuration' => 'Opciones de configuración de Firefly III', + 'setting_single_user_mode' => 'Modo de usuario único', + 'setting_single_user_mode_explain' => 'Por defecto, Firefly III solo acepta un único usuario: tú. Esto es una medida de seguridad para impedir que otros utilicen su instancia a menos que lo permitas. Si desmarcas esta casilla, otros podrán registrarse en esta instancia si tienen acceso a ella.', + 'store_configuration' => 'Guardar configuración', + 'single_user_administration' => 'Administración de usuarios para :email', + 'edit_user' => 'Editar usuario :email', + 'hidden_fields_preferences' => 'Puede habilitar más opciones de transacción en sus ajustes .', + 'user_data_information' => 'Datos del usuario', + 'user_information' => 'Información del usuario', + 'total_size' => 'tamaño total', + 'budget_or_budgets' => ':count presupuesto|:count presupuestos', + 'budgets_with_limits' => ':count presupuesto con cantidad configurada|:count presupuestos con cantidad configurada', + 'nr_of_rules_in_total_groups' => ':count_rules reglas en :count_groups grupo de reglas', + 'tag_or_tags' => ':count etiqueta|:count etiquetas', + 'configuration_updated' => 'La configuración ha sido actualizada', + 'setting_is_demo_site' => 'Sitio de demostracion', + 'setting_is_demo_site_explain' => 'Si usted chequea esta casilla, esta instalación se comportara como si fuera el sitio de demostración, que puede tener efectos secundarios extraños.', + 'block_code_bounced' => 'Mensaje (s) de correo rebotados', + 'block_code_expired' => 'Cuenta de demostración vencida', + 'no_block_code' => 'No hay razón para el bloqueo o usuario bloqueado', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'El usuario no ha confirmado aun una nueva dirección de correo', + 'admin_update_email' => 'Contrario a la pagina de perfil, El usuario NO se notificara que su dirección de correo ha cambiado!', + 'update_user' => 'Actualizar usuario', + 'updated_user' => 'Los datos del usuario han sido cambiados.', + 'delete_user' => 'Eliminar usuario :email', + 'user_deleted' => 'El usuario ha sido eliminado', + 'send_test_email' => 'Enviar mensaje de correo electrónico de prueba', + 'send_test_email_text' => 'Para comprobar si su instalación es capaz de enviar correos o enviar mensajes en Slack, presione este botón. No verá un error aquí (si existiera), los registros mostrarán cualquier error. Puede usar este botón todas las veces que desee. No existe control de spam. El mensaje será enviado a :email y debería llegar en breve.', + 'send_message' => 'Enviar mensaje', + 'send_test_triggered' => 'La prueba fue disparada. Chequee su bandeja de entrada y archivos de registro.', + 'give_admin_careful' => 'Los usuarios a los que se les conceden derechos de administrador pueden quitarte el tuyo. Ten cuidado.', + 'admin_maintanance_title' => 'Mantenimiento', + 'admin_maintanance_expl' => 'Algunos botones útiles para mantenimiento de Firefly III', + 'admin_maintenance_clear_cache' => 'Limpiar cache', + 'admin_notifications' => 'Notificaciones del administrador', + 'admin_notifications_expl' => 'Las siguientes notificaciones pueden ser activadas o desactivadas por el administrador. Si quiere recibir estos mensajes a través de Slack también, establezca la URL de "webhook entrante".', + 'admin_notification_check_user_new_reg' => 'El usuario recibe un mensaje de bienvenida tras el registro', + 'admin_notification_check_admin_new_reg' => 'Administrador(es) reciben una notificación de registro de un nuevo usuario', + 'admin_notification_check_new_version' => 'Una nueva versión está disponible', + 'admin_notification_check_invite_created' => 'Un usuario ha sido invitado a Firefly III', + 'admin_notification_check_invite_redeemed' => 'Una invitación de usuario ha sido canjeada', + 'all_invited_users' => 'Todos los usuarios invitados', + 'save_notification_settings' => 'Guardar ajustes', + 'notification_settings_saved' => 'Se han guardado los ajustes de notificación', + 'split_transaction_title' => 'Descripción de la transacción dividida', + 'split_transaction_title_help' => 'Si crea una transacción dividida, debe existir una descripción global para todas las divisiones de la transacción.', + 'split_title_help' => 'Si crea una transacción dividida, debe haber una descripción global para todos los fragmentos de la transacción.', + 'you_create_transfer' => 'Está creando una transferencia.', + 'you_create_withdrawal' => 'Está creando un gasto.', + 'you_create_deposit' => 'Está creando un ingreso.', // links - 'journal_link_configuration' => 'Configuración de enlaces de transacción', - 'create_new_link_type' => 'Crear un nuevo tipo de enlace', - 'store_new_link_type' => 'Crear tipo de enlace', - 'update_link_type' => 'Actualizar tipo de enlace', - 'edit_link_type' => 'Editar tipo de enlace ":name"', - 'updated_link_type' => 'Actualizar tipo de enlace ":name"', - 'delete_link_type' => 'Eliminar tipo de enlace ":name"', - 'deleted_link_type' => 'Eliminar tipo de enlace ":name"', - 'stored_new_link_type' => 'Guardar nuevo tipo de enlace ":name"', - 'cannot_edit_link_type' => 'No puede editar el tipo de enlace ":name"', - 'link_type_help_name' => 'Ie "Duplicados"', - 'link_type_help_inward' => 'Ie."duplicados"', - 'link_type_help_outward' => 'Ie."esta duplicado por"', - 'save_connections_by_moving' => 'Guarde el enlace entre estas transacciones moviéndolas a otro tipo de enlace:', - 'do_not_save_connection' => '(no guarde la conexión)', - 'link_transaction' => 'Enlazar transacción', - 'link_to_other_transaction' => 'Enlazar esta transacción con otra', - 'select_transaction_to_link' => 'Seleccione una transacción para enlazar esta transacción. Los enlaces no están siendo utilizados actualmente en Firefly III (aparte de ser mostrados), esto cambiará en el futuro. Utilice la casilla de búsqueda para seleccionar una transacción por título o por ID. Si desea agregar tipos de enlace personalizados, compruebe la sección de administración.', - 'this_transaction' => 'Esta transacción', - 'transaction' => 'Transaccion', - 'comments' => 'Comentarios', - 'link_notes' => 'Cualquier nota que desee almacenar con el enlace.', - 'invalid_link_selection' => 'No se puede vincular esta transacción', - 'selected_transaction' => 'Transacción seleccionada', - 'journals_linked' => 'Las transacciones están vinculadas.', - 'journals_error_linked' => 'Estas transacciones ya están vinculadas.', - 'journals_link_to_self' => 'No puede relacionar una transacción consigo misma', - 'journal_links' => 'Enlaces de transacciones', - 'this_withdrawal' => 'Este gasto', - 'this_deposit' => 'Este ingreso', - 'this_transfer' => 'Esta transferencia', - 'overview_for_link' => 'Visión en conjunto para el tipo de enlace ":name"', - 'source_transaction' => 'Transacción fuente', - 'link_description' => 'Descripción de enlace', - 'destination_transaction' => 'Transacción de destino', - 'delete_journal_link' => 'Elimine el link entre :source y :destination', - 'deleted_link' => 'Enlace borrado', + 'journal_link_configuration' => 'Configuración de enlaces de transacción', + 'create_new_link_type' => 'Crear un nuevo tipo de enlace', + 'store_new_link_type' => 'Crear tipo de enlace', + 'update_link_type' => 'Actualizar tipo de enlace', + 'edit_link_type' => 'Editar tipo de enlace ":name"', + 'updated_link_type' => 'Actualizar tipo de enlace ":name"', + 'delete_link_type' => 'Eliminar tipo de enlace ":name"', + 'deleted_link_type' => 'Eliminar tipo de enlace ":name"', + 'stored_new_link_type' => 'Guardar nuevo tipo de enlace ":name"', + 'cannot_edit_link_type' => 'No puede editar el tipo de enlace ":name"', + 'link_type_help_name' => 'Ie "Duplicados"', + 'link_type_help_inward' => 'Ie."duplicados"', + 'link_type_help_outward' => 'Ie."esta duplicado por"', + 'save_connections_by_moving' => 'Guarde el enlace entre estas transacciones moviéndolas a otro tipo de enlace:', + 'do_not_save_connection' => '(no guarde la conexión)', + 'link_transaction' => 'Enlazar transacción', + 'link_to_other_transaction' => 'Enlazar esta transacción con otra', + 'select_transaction_to_link' => 'Seleccione una transacción para enlazar esta transacción. Los enlaces no están siendo utilizados actualmente en Firefly III (aparte de ser mostrados), esto cambiará en el futuro. Utilice la casilla de búsqueda para seleccionar una transacción por título o por ID. Si desea agregar tipos de enlace personalizados, compruebe la sección de administración.', + 'this_transaction' => 'Esta transacción', + 'transaction' => 'Transaccion', + 'comments' => 'Comentarios', + 'link_notes' => 'Cualquier nota que desee almacenar con el enlace.', + 'invalid_link_selection' => 'No se puede vincular esta transacción', + 'selected_transaction' => 'Transacción seleccionada', + 'journals_linked' => 'Las transacciones están vinculadas.', + 'journals_error_linked' => 'Estas transacciones ya están vinculadas.', + 'journals_link_to_self' => 'No puede relacionar una transacción consigo misma', + 'journal_links' => 'Enlaces de transacciones', + 'this_withdrawal' => 'Este gasto', + 'this_deposit' => 'Este ingreso', + 'this_transfer' => 'Esta transferencia', + 'overview_for_link' => 'Visión en conjunto para el tipo de enlace ":name"', + 'source_transaction' => 'Transacción fuente', + 'link_description' => 'Descripción de enlace', + 'destination_transaction' => 'Transacción de destino', + 'delete_journal_link' => 'Elimine el link entre :source y :destination', + 'deleted_link' => 'Enlace borrado', // link translations: - 'Paid_name' => 'Pagado', - 'Refund_name' => 'Reembolso', - 'Reimbursement_name' => 'Reembolso', - 'Related_name' => 'Relacionado', - 'relates to_inward' => 'relacionado con', - 'is (partially) refunded by_inward' => 'es (parcialmente) devuelto por', - 'is (partially) paid for by_inward' => 'es(parcialmente) pagado por', - 'is (partially) reimbursed by_inward' => 'es(parcialmente) reembolsado por', - 'inward_transaction' => 'Transacción interna', - 'outward_transaction' => 'Transacción externa', - 'relates to_outward' => 'relacionado con', - '(partially) refunds_outward' => '(parcialmente) reembolso', - '(partially) pays for_outward' => '(parcialmente) paga por', - '(partially) reimburses_outward' => '(parcialmente) reembolsa', - 'is (partially) refunded by' => 'es (parcialmente) devuelto por', - 'is (partially) paid for by' => 'es(parcialmente) pagado por', - 'is (partially) reimbursed by' => 'es(parcialmente) reembolsado por', - 'relates to' => 'relacionado con', - '(partially) refunds' => '(parcialmente) reembolsado', - '(partially) pays for' => 'paga (parcialmente) por', - '(partially) reimburses' => 'reembolsa (parcialmente)', + 'Paid_name' => 'Pagado', + 'Refund_name' => 'Reembolso', + 'Reimbursement_name' => 'Reembolso', + 'Related_name' => 'Relacionado', + 'relates to_inward' => 'relacionado con', + 'is (partially) refunded by_inward' => 'es (parcialmente) devuelto por', + 'is (partially) paid for by_inward' => 'es(parcialmente) pagado por', + 'is (partially) reimbursed by_inward' => 'es(parcialmente) reembolsado por', + 'inward_transaction' => 'Transacción interna', + 'outward_transaction' => 'Transacción externa', + 'relates to_outward' => 'relacionado con', + '(partially) refunds_outward' => '(parcialmente) reembolso', + '(partially) pays for_outward' => '(parcialmente) paga por', + '(partially) reimburses_outward' => '(parcialmente) reembolsa', + 'is (partially) refunded by' => 'es (parcialmente) devuelto por', + 'is (partially) paid for by' => 'es(parcialmente) pagado por', + 'is (partially) reimbursed by' => 'es(parcialmente) reembolsado por', + 'relates to' => 'relacionado con', + '(partially) refunds' => '(parcialmente) reembolsado', + '(partially) pays for' => 'paga (parcialmente) por', + '(partially) reimburses' => 'reembolsa (parcialmente)', // split a transaction: - 'splits' => 'Divisiones', - 'add_another_split' => 'Añadir otra división', - 'cannot_edit_opening_balance' => 'Usted no puede editar el balance de apertura de una cuenta.', - 'no_edit_multiple_left' => 'Usted no ha seleccionado transacciones válidas para editar.', - 'breadcrumb_convert_group' => 'Convertir transacción', - 'convert_invalid_source' => 'La información de origen no es válida para la transacción #%d.', - 'convert_invalid_destination' => 'La información de destino no es válida para la transacción #%d.', - 'create_another' => 'Después de guardar, vuelve aquí para crear otro.', - 'after_update_create_another' => 'Después de actualizar, vuelve aquí para continuar editando.', - 'store_as_new' => 'Almacenar como una nueva transacción en lugar de actualizar.', - 'reset_after' => 'Restablecer formulario después del envío', - 'errors_submission' => 'Hubo un problema con su envío. Por favor, compruebe los errores.', - 'transaction_expand_split' => 'Expandir división', - 'transaction_collapse_split' => 'Colapsar división', + 'splits' => 'Divisiones', + 'add_another_split' => 'Añadir otra división', + 'cannot_edit_opening_balance' => 'Usted no puede editar el balance de apertura de una cuenta.', + 'no_edit_multiple_left' => 'Usted no ha seleccionado transacciones válidas para editar.', + 'breadcrumb_convert_group' => 'Convertir transacción', + 'convert_invalid_source' => 'La información de origen no es válida para la transacción #%d.', + 'convert_invalid_destination' => 'La información de destino no es válida para la transacción #%d.', + 'create_another' => 'Después de guardar, vuelve aquí para crear otro.', + 'after_update_create_another' => 'Después de actualizar, vuelve aquí para continuar editando.', + 'store_as_new' => 'Almacenar como una nueva transacción en lugar de actualizar.', + 'reset_after' => 'Restablecer formulario después del envío', + 'errors_submission' => 'Hubo un problema con su envío. Por favor, compruebe los siguientes errores.', + 'errors_submission_v2' => 'Hubo un problema con su envío. Por favor, compruebe los siguientes errores: %{errorMessage}', + 'transaction_expand_split' => 'Expandir división', + 'transaction_collapse_split' => 'Colapsar división', // object groups - 'default_group_title_name' => '(sin agrupación)', - 'default_group_title_name_plain' => 'sin agrupar', + 'default_group_title_name' => '(sin agrupación)', + 'default_group_title_name_plain' => 'sin agrupar', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => '¡Vamos a crear una cuenta de activos!', - 'no_accounts_intro_asset' => 'Usted aun no tiene cuenta de activos. las cuentas de activos son sus cuentas principales: sus cuentas de cheques, cuenta de ahorros, cuenta compartida o incluso su tarjeta de crédito.', - 'no_accounts_imperative_asset' => 'Para comenzar a utilizar Firefly III Usted debe crear al menos una cuenta de activo. Vamos a hacerlo ahora:', - 'no_accounts_create_asset' => 'Crear una cuenta de activos', - 'no_accounts_title_expense' => '¡Vamos a crear una cuenta de gastos!', - 'no_accounts_intro_expense' => 'Usted aun no tiene cuentas de gastos. Las cuentas de gastos son los lugares donde se gasta dinero, tales como tiendas y supermercados.', - 'no_accounts_imperative_expense' => 'Las cuentas de gastos se crean automáticamente cuando crea transacciones, pero usted puede crear una manualmente también. si usted quiere. vamos a crear una ahora:', - 'no_accounts_create_expense' => 'Crear una cuenta de gastos', - 'no_accounts_title_revenue' => '¡Vamos a crear una cuenta de ingresos!', - 'no_accounts_intro_revenue' => 'Usted no tiene cuentas de ingresos aun. Cuentas de ingresos son los lugares donde usted recibe dinero, como su empleador.', - 'no_accounts_imperative_revenue' => 'Las cuentas de ganancias se crean automáticamente cuando usted crea transacciones, pero usted puede crear una manualmente también, si usted quiere. vamos a crear una ahora:', - 'no_accounts_create_revenue' => 'Crear una cuenta de ingresos', - 'no_accounts_title_liabilities' => '¡Vamos a crear un pasivo!', - 'no_accounts_intro_liabilities' => 'Todavía no tienes pasivos. Los pasivos son las cuentas que registran sus préstamos y otras deudas.', - 'no_accounts_imperative_liabilities' => 'No necesita usar esta función pero, puede ser muy útil si desea hacer un seguimiento de estas cosas.', - 'no_accounts_create_liabilities' => 'Crear un pasivo', - 'no_budgets_title_default' => 'Vamos a crear un presupuesto', - 'no_rules_title_default' => 'Vamos a crear una regla', - 'no_budgets_intro_default' => 'Todavía no tienes presupuestos. Los presupuestos se usan para organizar tus gastos en grupos, a los que puedes asignar un tope para limitarlos.', - 'no_rules_intro_default' => 'Aún no tiene reglas. Las reglas son potentes automatizaciones que pueden manejar transacciones por usted.', - 'no_rules_imperative_default' => 'Las reglas pueden ser muy útiles cuando está gestionando transacciones. Vamos a crear una ahora:', - 'no_budgets_imperative_default' => 'Los presupuestos son las herramientas básicas de la gestión financiera. Vamos a crear uno ahora:', - 'no_budgets_create_default' => 'Crear un presupuesto', - 'no_rules_create_default' => 'Crear regla', - 'no_categories_title_default' => '¡Vamos a crear una categoría!', - 'no_categories_intro_default' => 'Todavía no tienes categorías. Las categorías se utilizan para ajustar sus transacciones y etiquetarlas con su categoría designada.', - 'no_categories_imperative_default' => 'Las categorías se crean automáticamente al crear transacciones, pero también puedes crearlas manualmente. Vamos a crear una:', - 'no_categories_create_default' => 'Crear una categoría', - 'no_tags_title_default' => '¡Vamos a crear una etiqueta!', - 'no_tags_intro_default' => 'Todavía no tienes etiquetas. Las etiquetas se utilizan para ajustar tus transacciones y etiquetarlas con palabras clave específicas.', - 'no_tags_imperative_default' => 'Las etiquetas se crean automáticamente al crear transacciones, pero también puedes crearlas manualmente. Vamos a crear una:', - 'no_tags_create_default' => 'Crear etiqueta', - 'no_transactions_title_withdrawal' => '¡Vamos a crear un gasto!', - 'no_transactions_intro_withdrawal' => 'Usted no tiene gastos todavía. Usted debe crear gastos paran comenzar a administrar sus finanzas.', - 'no_transactions_imperative_withdrawal' => '¿Has gastado algo de dinero? Entonces usted debería escribirlo:', - 'no_transactions_create_withdrawal' => 'Crear un gasto', - 'no_transactions_title_deposit' => '¡Vamos a crear algún ingreso!', - 'no_transactions_intro_deposit' => 'Usted no tiene gastos grabados todavía. Usted debe crear entradas de ingresos para comenzar a gerenciar sus finanzas.', - 'no_transactions_imperative_deposit' => '¿ A recibido usted algún dinero? Entonces usted debería escribirlo:', - 'no_transactions_create_deposit' => 'Cree un ingreso', - 'no_transactions_title_transfers' => '¡Vamos a crear una tranferencia!', - 'no_transactions_intro_transfers' => 'Usted no tiene transferencias aun. Cuando usted mueve dinero entre cuentas de activos, se registra como una transferencia.', - 'no_transactions_imperative_transfers' => '¿Has movido algo de dinero? Entonces usted debería escribirlo:', - 'no_transactions_create_transfers' => 'Crear una transferencia', - 'no_piggies_title_default' => '¡Vamos a crear una hucha!', - 'no_piggies_intro_default' => 'Aún no tienes huchas. Puedes crear huchas para dividir tus ahorros y hacer un seguimiento de lo que estés ahorrando.', - 'no_piggies_imperative_default' => '¿Tiene cosas para las cuales está ahorrando dinero? Cree una hucha y haga su seguimiento:', - 'no_piggies_create_default' => 'Crear una nueva hucha', - 'no_bills_title_default' => '¡Vamos a crear una factura!', - 'no_bills_intro_default' => 'Usted no tiene facturas aun. Usted puede crear facturas para hacer un seguimiento de los gastos regulares, como su alquiler o el seguro.', - 'no_bills_imperative_default' => '¿Tienes facturas periódicas? Crea una factura y haz un seguimiento de tus pagos:', - 'no_bills_create_default' => 'Crear una factura', + 'no_accounts_title_asset' => '¡Vamos a crear una cuenta de activos!', + 'no_accounts_intro_asset' => 'Usted aun no tiene cuenta de activos. las cuentas de activos son sus cuentas principales: sus cuentas de cheques, cuenta de ahorros, cuenta compartida o incluso su tarjeta de crédito.', + 'no_accounts_imperative_asset' => 'Para comenzar a utilizar Firefly III Usted debe crear al menos una cuenta de activo. Vamos a hacerlo ahora:', + 'no_accounts_create_asset' => 'Crear una cuenta de activos', + 'no_accounts_title_expense' => '¡Vamos a crear una cuenta de gastos!', + 'no_accounts_intro_expense' => 'Usted aun no tiene cuentas de gastos. Las cuentas de gastos son los lugares donde se gasta dinero, tales como tiendas y supermercados.', + 'no_accounts_imperative_expense' => 'Las cuentas de gastos se crean automáticamente cuando crea transacciones, pero usted puede crear una manualmente también. si usted quiere. vamos a crear una ahora:', + 'no_accounts_create_expense' => 'Crear una cuenta de gastos', + 'no_accounts_title_revenue' => '¡Vamos a crear una cuenta de ingresos!', + 'no_accounts_intro_revenue' => 'Usted no tiene cuentas de ingresos aun. Cuentas de ingresos son los lugares donde usted recibe dinero, como su empleador.', + 'no_accounts_imperative_revenue' => 'Las cuentas de ganancias se crean automáticamente cuando usted crea transacciones, pero usted puede crear una manualmente también, si usted quiere. vamos a crear una ahora:', + 'no_accounts_create_revenue' => 'Crear una cuenta de ingresos', + 'no_accounts_title_liabilities' => '¡Vamos a crear un pasivo!', + 'no_accounts_intro_liabilities' => 'Todavía no tienes pasivos. Los pasivos son las cuentas que registran sus préstamos y otras deudas.', + 'no_accounts_imperative_liabilities' => 'No necesita usar esta función pero, puede ser muy útil si desea hacer un seguimiento de estas cosas.', + 'no_accounts_create_liabilities' => 'Crear un pasivo', + 'no_budgets_title_default' => 'Vamos a crear un presupuesto', + 'no_rules_title_default' => 'Vamos a crear una regla', + 'no_budgets_intro_default' => 'Todavía no tienes presupuestos. Los presupuestos se usan para organizar tus gastos en grupos, a los que puedes asignar un tope para limitarlos.', + 'no_rules_intro_default' => 'Aún no tiene reglas. Las reglas son potentes automatizaciones que pueden manejar transacciones por usted.', + 'no_rules_imperative_default' => 'Las reglas pueden ser muy útiles cuando está gestionando transacciones. Vamos a crear una ahora:', + 'no_budgets_imperative_default' => 'Los presupuestos son las herramientas básicas de la gestión financiera. Vamos a crear uno ahora:', + 'no_budgets_create_default' => 'Crear un presupuesto', + 'no_rules_create_default' => 'Crear regla', + 'no_categories_title_default' => '¡Vamos a crear una categoría!', + 'no_categories_intro_default' => 'Todavía no tienes categorías. Las categorías se utilizan para ajustar sus transacciones y etiquetarlas con su categoría designada.', + 'no_categories_imperative_default' => 'Las categorías se crean automáticamente al crear transacciones, pero también puedes crearlas manualmente. Vamos a crear una:', + 'no_categories_create_default' => 'Crear una categoría', + 'no_tags_title_default' => '¡Vamos a crear una etiqueta!', + 'no_tags_intro_default' => 'Todavía no tienes etiquetas. Las etiquetas se utilizan para ajustar tus transacciones y etiquetarlas con palabras clave específicas.', + 'no_tags_imperative_default' => 'Las etiquetas se crean automáticamente al crear transacciones, pero también puedes crearlas manualmente. Vamos a crear una:', + 'no_tags_create_default' => 'Crear etiqueta', + 'no_transactions_title_withdrawal' => '¡Vamos a crear un gasto!', + 'no_transactions_intro_withdrawal' => 'Usted no tiene gastos todavía. Usted debe crear gastos paran comenzar a administrar sus finanzas.', + 'no_transactions_imperative_withdrawal' => '¿Has gastado algo de dinero? Entonces usted debería escribirlo:', + 'no_transactions_create_withdrawal' => 'Crear un gasto', + 'no_transactions_title_deposit' => '¡Vamos a crear algún ingreso!', + 'no_transactions_intro_deposit' => 'Usted no tiene gastos grabados todavía. Usted debe crear entradas de ingresos para comenzar a gerenciar sus finanzas.', + 'no_transactions_imperative_deposit' => '¿ A recibido usted algún dinero? Entonces usted debería escribirlo:', + 'no_transactions_create_deposit' => 'Cree un ingreso', + 'no_transactions_title_transfers' => '¡Vamos a crear una tranferencia!', + 'no_transactions_intro_transfers' => 'Usted no tiene transferencias aun. Cuando usted mueve dinero entre cuentas de activos, se registra como una transferencia.', + 'no_transactions_imperative_transfers' => '¿Has movido algo de dinero? Entonces usted debería escribirlo:', + 'no_transactions_create_transfers' => 'Crear una transferencia', + 'no_piggies_title_default' => '¡Vamos a crear una hucha!', + 'no_piggies_intro_default' => 'Aún no tienes huchas. Puedes crear huchas para dividir tus ahorros y hacer un seguimiento de lo que estés ahorrando.', + 'no_piggies_imperative_default' => '¿Tiene cosas para las cuales está ahorrando dinero? Cree una hucha y haga su seguimiento:', + 'no_piggies_create_default' => 'Crear una nueva hucha', + 'no_bills_title_default' => '¡Vamos a crear una factura!', + 'no_bills_intro_default' => 'Usted no tiene facturas aun. Usted puede crear facturas para hacer un seguimiento de los gastos regulares, como su alquiler o el seguro.', + 'no_bills_imperative_default' => '¿Tienes facturas periódicas? Crea una factura y haz un seguimiento de tus pagos:', + 'no_bills_create_default' => 'Crear una factura', // recurring transactions - 'create_right_now' => 'Crear ahora mismo', - 'no_new_transaction_in_recurrence' => 'No se ha creado ninguna nueva transacción. ¿Tal vez ya ha sido lanzada para esta fecha?', - 'recurrences' => 'Transacciones Recurrentes', - 'repeat_until_in_past' => 'Esta transacción recurrente dejó de repetirse el :date.', - 'recurring_calendar_view' => 'Calendario', - 'no_recurring_title_default' => 'Vamos a crear una transacción recurrente!', - 'no_recurring_intro_default' => 'Usted no tiene transacciones recurrentes aún. Puede usar esto para hacer que Firefly III cree transacciones por usted.', - 'no_recurring_imperative_default' => 'Esta es una característica bastante avanzada pero, puede ser extremadamente útil. Asegúrese de haber leído la documentación (?- Icono en la esquina derecha) antes de continuar.', - 'no_recurring_create_default' => 'Crear una transacción recurrente', - 'make_new_recurring' => 'Crear una transacción recurrente', - 'recurring_daily' => 'Diario', - 'recurring_weekly' => 'Cada semana los :weekday', - 'recurring_weekly_skip' => 'Cada :skip(er/a) semana en :weekday', - 'recurring_monthly' => 'Todos los meses, el :dayOfMonthº día', - 'recurring_monthly_skip' => 'Cada :skip(er/o) mes en el :dayOfMonth(er/o) día', - 'recurring_ndom' => 'Todos los meses, el :dayOfMonthº :weekday', - 'recurring_yearly' => 'Cada año en :date', - 'overview_for_recurrence' => 'Resumen de transacción recurrente ":title"', - 'warning_duplicates_repetitions' => 'En algunas ocasiones, las fechas aparecen duplicadas en esta lista. Esto puede ocurrir porque múltiples repeticiones chocan. Firefly III siempre generará una transacción por día.', - 'created_transactions' => 'Transacciones relacionadas', - 'expected_withdrawals' => 'Gastos previstos', - 'expected_deposits' => 'Ingresos previstos', - 'expected_transfers' => 'Transferencias previstas', - 'created_withdrawals' => 'Gastos creados', - 'created_deposits' => 'Ingresos creados', - 'created_transfers' => 'Transferencias creadas', - 'recurring_info' => 'Transacción recurrente :count / :total', - 'created_from_recurrence' => 'Creado a partir de transacción recurrente ":title" (#:id)', - 'recurring_never_cron' => 'Al parecer, el cron job necesario para realizar las transacciones recurrentes nunca se ejecutó. Esto es normal por supuesto, cuando acabas de instalar Firefly III pero, es algo que deberías configurar lo antes posible. Por favor, revisa las páginas de ayuda usando el ícono-(?) en la esquina derecha de la página.', - 'recurring_cron_long_ago' => 'Aparentemente han pasado mas de 36 horas desde que el cron job para dar soporte a las transacciones recurrentes se ha disparado por última vez. Está usted seguro que lo ha configurado correctamente? Por favor, revise las páginas de ayuda usando el ícono-(?) en la esquina derecha de la página.', + 'create_right_now' => 'Crear ahora mismo', + 'no_new_transaction_in_recurrence' => 'No se ha creado ninguna nueva transacción. ¿Tal vez ya ha sido lanzada para esta fecha?', + 'recurrences' => 'Transacciones Recurrentes', + 'repeat_until_in_past' => 'Esta transacción recurrente dejó de repetirse el :date.', + 'recurring_calendar_view' => 'Calendario', + 'no_recurring_title_default' => 'Vamos a crear una transacción recurrente!', + 'no_recurring_intro_default' => 'Usted no tiene transacciones recurrentes aún. Puede usar esto para hacer que Firefly III cree transacciones por usted.', + 'no_recurring_imperative_default' => 'Esta es una característica bastante avanzada pero, puede ser extremadamente útil. Asegúrese de haber leído la documentación (?- Icono en la esquina derecha) antes de continuar.', + 'no_recurring_create_default' => 'Crear una transacción recurrente', + 'make_new_recurring' => 'Crear una transacción recurrente', + 'recurring_daily' => 'Diario', + 'recurring_weekly' => 'Cada semana los :weekday', + 'recurring_weekly_skip' => 'Cada :skip(er/a) semana en :weekday', + 'recurring_monthly' => 'Todos los meses, el :dayOfMonthº día', + 'recurring_monthly_skip' => 'Cada :skip(er/o) mes en el :dayOfMonth(er/o) día', + 'recurring_ndom' => 'Todos los meses, el :dayOfMonthº :weekday', + 'recurring_yearly' => 'Cada año en :date', + 'overview_for_recurrence' => 'Resumen de transacción recurrente ":title"', + 'warning_duplicates_repetitions' => 'En algunas ocasiones, las fechas aparecen duplicadas en esta lista. Esto puede ocurrir porque múltiples repeticiones chocan. Firefly III siempre generará una transacción por día.', + 'created_transactions' => 'Transacciones relacionadas', + 'expected_withdrawals' => 'Gastos previstos', + 'expected_deposits' => 'Ingresos previstos', + 'expected_transfers' => 'Transferencias previstas', + 'created_withdrawals' => 'Gastos creados', + 'created_deposits' => 'Ingresos creados', + 'created_transfers' => 'Transferencias creadas', + 'recurring_info' => 'Transacción recurrente :count / :total', + 'created_from_recurrence' => 'Creado a partir de transacción recurrente ":title" (#:id)', + 'recurring_never_cron' => 'Al parecer, el cron job necesario para realizar las transacciones recurrentes nunca se ejecutó. Esto es normal por supuesto, cuando acabas de instalar Firefly III pero, es algo que deberías configurar lo antes posible. Por favor, revisa las páginas de ayuda usando el ícono-(?) en la esquina derecha de la página.', + 'recurring_cron_long_ago' => 'Aparentemente han pasado mas de 36 horas desde que el cron job para dar soporte a las transacciones recurrentes se ha disparado por última vez. Está usted seguro que lo ha configurado correctamente? Por favor, revise las páginas de ayuda usando el ícono-(?) en la esquina derecha de la página.', - 'create_new_recurrence' => 'Crear transacción recurrente', - 'help_first_date' => 'Indique la primera recurrencia esperada. Esto debe ser en un tiempo futuro.', - 'help_first_date_no_past' => 'Indique la primera recurrencia esperada. Firefly III no creará transacciones en el pasado.', - 'no_currency' => '(sin moneda)', - 'mandatory_for_recurring' => 'Información de recurrencia obligatorio', - 'mandatory_for_transaction' => 'Información obligatoria de transacción', - 'optional_for_recurring' => 'Información de recurrencia opcional', - 'optional_for_transaction' => 'Información de transacción opcional', - 'change_date_other_options' => 'Cambie la "primera fecha" para ver más opciones.', - 'mandatory_fields_for_tranaction' => 'Los valores de aquí van a terminar en las transaccion(es) que se están creando', - 'click_for_calendar' => 'Haga clic aquí para ver un calendario que le muestra cuando se repetirá la transacción.', - 'repeat_forever' => 'Repetir por siempre', - 'repeat_until_date' => 'Repetir hasta', - 'repeat_times' => 'Repetir un número de veces', - 'recurring_skips_one' => 'Intercalado', - 'recurring_skips_more' => 'Saltea :count ocurrencias', - 'store_new_recurrence' => 'Crear transacción recurrente', - 'stored_new_recurrence' => 'Transacción recurrente ":title" almacenada con éxito.', - 'edit_recurrence' => 'Editar transacción recurrente ":title"', - 'recurring_repeats_until' => 'Repetir hasta :date', - 'recurring_repeats_forever' => 'Repetir por siempre', - 'recurring_repeats_x_times' => 'Repetir :count vez|Repetir :count veces', - 'update_recurrence' => 'Actualizar transacción recurrente', - 'updated_recurrence' => 'Transacción recurrente ":title" actualizada', - 'recurrence_is_inactive' => 'Esta transacción recurrente no está activa y no generará nuevas transacciones.', - 'delete_recurring' => 'Borrar Transacción Recurrente ":title"', - 'new_recurring_transaction' => 'Nueva Transacción Recurrente', - 'help_weekend' => '¿Qué debe hacer Firefly III cuando la transacción recurrente cae el sábado o el domingo?', - 'do_nothing' => 'Sólo crear la transacción', - 'skip_transaction' => 'Saltar la ocurrencia', - 'jump_to_friday' => 'Crear la transacción el viernes anterior en su lugar', - 'jump_to_monday' => 'Crear la transacción el lunes próximo en su lugar', - 'will_jump_friday' => 'Se creará el viernes en lugar de los fines de semana.', - 'will_jump_monday' => 'Se creará el lunes en lugar de los fines de semana.', - 'except_weekends' => 'Excluir los fines de semana', - 'recurrence_deleted' => 'Transacción recurrente ":title" eliminada', + 'create_new_recurrence' => 'Crear transacción recurrente', + 'help_first_date' => 'Indique la primera recurrencia esperada. Esto debe ser en un tiempo futuro.', + 'help_first_date_no_past' => 'Indique la primera recurrencia esperada. Firefly III no creará transacciones en el pasado.', + 'no_currency' => '(sin moneda)', + 'mandatory_for_recurring' => 'Información de recurrencia obligatorio', + 'mandatory_for_transaction' => 'Información obligatoria de transacción', + 'optional_for_recurring' => 'Información de recurrencia opcional', + 'optional_for_transaction' => 'Información de transacción opcional', + 'change_date_other_options' => 'Cambie la "primera fecha" para ver más opciones.', + 'mandatory_fields_for_tranaction' => 'Los valores de aquí van a terminar en las transaccion(es) que se están creando', + 'click_for_calendar' => 'Haga clic aquí para ver un calendario que le muestra cuando se repetirá la transacción.', + 'repeat_forever' => 'Repetir por siempre', + 'repeat_until_date' => 'Repetir hasta', + 'repeat_times' => 'Repetir un número de veces', + 'recurring_skips_one' => 'Intercalado', + 'recurring_skips_more' => 'Saltea :count ocurrencias', + 'store_new_recurrence' => 'Crear transacción recurrente', + 'stored_new_recurrence' => 'Transacción recurrente ":title" almacenada con éxito.', + 'edit_recurrence' => 'Editar transacción recurrente ":title"', + 'recurring_repeats_until' => 'Repetir hasta :date', + 'recurring_repeats_forever' => 'Repetir por siempre', + 'recurring_repeats_x_times' => 'Repetir :count vez|Repetir :count veces', + 'update_recurrence' => 'Actualizar transacción recurrente', + 'updated_recurrence' => 'Transacción recurrente ":title" actualizada', + 'recurrence_is_inactive' => 'Esta transacción recurrente no está activa y no generará nuevas transacciones.', + 'delete_recurring' => 'Borrar Transacción Recurrente ":title"', + 'new_recurring_transaction' => 'Nueva Transacción Recurrente', + 'help_weekend' => '¿Qué debe hacer Firefly III cuando la transacción recurrente cae el sábado o el domingo?', + 'do_nothing' => 'Sólo crear la transacción', + 'skip_transaction' => 'Saltar la ocurrencia', + 'jump_to_friday' => 'Crear la transacción el viernes anterior en su lugar', + 'jump_to_monday' => 'Crear la transacción el lunes próximo en su lugar', + 'will_jump_friday' => 'Se creará el viernes en lugar de los fines de semana.', + 'will_jump_monday' => 'Se creará el lunes en lugar de los fines de semana.', + 'except_weekends' => 'Excluir los fines de semana', + 'recurrence_deleted' => 'Transacción recurrente ":title" eliminada', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Saldo (:currency)', - 'box_spent_in_currency' => 'Gasto (:currency)', - 'box_earned_in_currency' => 'Ganado (:currency)', - 'box_budgeted_in_currency' => 'Presupuestado (:currency)', - 'box_bill_paid_in_currency' => 'Facturas pagadas (:currency)', - 'box_bill_unpaid_in_currency' => 'Facturas sin pagar (:currency)', - 'box_left_to_spend_in_currency' => 'Disponible para gasto (:currency)', - 'box_net_worth_in_currency' => 'Valor neto (:currency)', - 'box_spend_per_day' => 'Disponible para gasto diario: :amount', + 'box_balance_in_currency' => 'Saldo (:currency)', + 'box_spent_in_currency' => 'Gasto (:currency)', + 'box_earned_in_currency' => 'Ganado (:currency)', + 'box_budgeted_in_currency' => 'Presupuestado (:currency)', + 'box_bill_paid_in_currency' => 'Facturas pagadas (:currency)', + 'box_bill_unpaid_in_currency' => 'Facturas sin pagar (:currency)', + 'box_left_to_spend_in_currency' => 'Disponible para gasto (:currency)', + 'box_net_worth_in_currency' => 'Valor neto (:currency)', + 'box_spend_per_day' => 'Disponible para gasto diario: :amount', // debug page - 'debug_page' => 'Pagina de depuración', - 'debug_submit_instructions' => 'Si está teniendo problemas, puede usar la información en este cuadro como información de depuración. Por favor, copie y pegue en un nuevo o existente GitHub issue. Generará una hermosa tabla que se puede utilizar para diagnosticar rápidamente su problema.', - 'debug_pretty_table' => 'Si copia/pega la casilla de abajo en un problema de GitHub, generará una tabla. Por favor, no envuelva este texto con comillas.', - 'debug_additional_data' => 'También puede compartir el contenido del cuadro de abajo. También puede copiar y pegar esto en un GitHub issue nuevo o existente. Sin embargo, el contenido de este cuadro puede contener información privada como nombres de cuenta, detalles de transacción o direcciones de correo electrónico.', + 'debug_page' => 'Pagina de depuración', + 'debug_submit_instructions' => 'Si está teniendo problemas, puede usar la información en este cuadro como información de depuración. Por favor, copie y pegue en un nuevo o existente GitHub issue. Generará una hermosa tabla que se puede utilizar para diagnosticar rápidamente su problema.', + 'debug_pretty_table' => 'Si copia/pega la casilla de abajo en un problema de GitHub, generará una tabla. Por favor, no envuelva este texto con comillas.', + 'debug_additional_data' => 'También puede compartir el contenido del cuadro de abajo. También puede copiar y pegar esto en un GitHub issue nuevo o existente. Sin embargo, el contenido de este cuadro puede contener información privada como nombres de cuenta, detalles de transacción o direcciones de correo electrónico.', // object groups - 'object_groups_menu_bar' => 'Grupos', - 'object_groups_page_title' => 'Grupos', - 'object_groups_breadcrumb' => 'Grupos', - 'object_groups_index' => 'Resumen', - 'object_groups' => 'Grupos', - 'object_groups_empty_explain' => 'Algunas cosas en Firefly III se pueden dividir en grupos. Las huchas, por ejemplo, incluyen un campo "Grupo" en las pantallas de edición y creación. Cuando establece este campo, puede editar los nombres y el orden de los grupos en esta página. Para obtener más información, consulte las páginas de ayuda en la esquina superior derecha, debajo del icono (?).', - 'object_group_title' => 'Título', - 'edit_object_group' => 'Editar grupo ":title"', - 'delete_object_group' => 'Eliminar grupo ":title"', - 'update_object_group' => 'Actualizar grupo', - 'updated_object_group' => 'Grupo ":title" actualizado con éxito', - 'deleted_object_group' => 'Grupo ":title" eliminado con éxito', - 'object_group' => 'Grupo', + 'object_groups_menu_bar' => 'Grupos', + 'object_groups_page_title' => 'Grupos', + 'object_groups_breadcrumb' => 'Grupos', + 'object_groups_index' => 'Resumen', + 'object_groups' => 'Grupos', + 'object_groups_empty_explain' => 'Algunas cosas en Firefly III se pueden dividir en grupos. Las huchas, por ejemplo, incluyen un campo "Grupo" en las pantallas de edición y creación. Cuando establece este campo, puede editar los nombres y el orden de los grupos en esta página. Para obtener más información, consulte las páginas de ayuda en la esquina superior derecha, debajo del icono (?).', + 'object_group_title' => 'Título', + 'edit_object_group' => 'Editar grupo ":title"', + 'delete_object_group' => 'Eliminar grupo ":title"', + 'update_object_group' => 'Actualizar grupo', + 'updated_object_group' => 'Grupo ":title" actualizado con éxito', + 'deleted_object_group' => 'Grupo ":title" eliminado con éxito', + 'object_group' => 'Grupo', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Auditoría de entradas de registro', - 'ale_action_log_add' => 'Añadido :amount a la hucha ":name"', - 'ale_action_log_remove' => 'Eliminado :amount de la hucha ":name"', - 'ale_action_clear_budget' => 'Eliminado del presupuesto', - 'ale_action_update_group_title' => 'Título del grupo de transacciones actualizado', - 'ale_action_update_date' => 'Fecha de transacción actualizada', - 'ale_action_update_order' => 'Orden de transacción actualizado', - 'ale_action_clear_category' => 'Eliminado de la categoría', - 'ale_action_clear_notes' => 'Notas eliminadas', - 'ale_action_clear_tag' => 'Etiqueta limpiada', - 'ale_action_clear_all_tags' => 'Limpiar todas las etiquetas', - 'ale_action_set_bill' => 'Vinculado a la factura', - 'ale_action_switch_accounts' => 'Cuentas de origen y destino cambiadas', - 'ale_action_set_budget' => 'Establecer presupuesto', - 'ale_action_set_category' => 'Establecer categoría', - 'ale_action_set_source' => 'Establecer cuenta de origen', - 'ale_action_set_destination' => 'Establecer cuenta de destino', - 'ale_action_update_transaction_type' => 'Tipo de transacción cambiado', - 'ale_action_update_notes' => 'Notas cambiadas', - 'ale_action_update_description' => 'Descripción cambiada', - 'ale_action_add_to_piggy' => 'Hucha', - 'ale_action_remove_from_piggy' => 'Hucha', - 'ale_action_add_tag' => 'Etiqueta añadida', + 'audit_log_entries' => 'Auditoría de entradas de registro', + 'ale_action_log_add' => 'Añadido :amount a la hucha ":name"', + 'ale_action_log_remove' => 'Eliminado :amount de la hucha ":name"', + 'ale_action_clear_budget' => 'Eliminado del presupuesto', + 'ale_action_update_group_title' => 'Título del grupo de transacciones actualizado', + 'ale_action_update_date' => 'Fecha de transacción actualizada', + 'ale_action_update_order' => 'Orden de transacción actualizado', + 'ale_action_clear_category' => 'Eliminado de la categoría', + 'ale_action_clear_notes' => 'Notas eliminadas', + 'ale_action_clear_tag' => 'Etiqueta limpiada', + 'ale_action_clear_all_tags' => 'Limpiar todas las etiquetas', + 'ale_action_set_bill' => 'Vinculado a la factura', + 'ale_action_switch_accounts' => 'Cuentas de origen y destino cambiadas', + 'ale_action_set_budget' => 'Establecer presupuesto', + 'ale_action_set_category' => 'Establecer categoría', + 'ale_action_set_source' => 'Establecer cuenta de origen', + 'ale_action_set_destination' => 'Establecer cuenta de destino', + 'ale_action_update_transaction_type' => 'Tipo de transacción cambiado', + 'ale_action_update_notes' => 'Notas cambiadas', + 'ale_action_update_description' => 'Descripción cambiada', + 'ale_action_add_to_piggy' => 'Hucha', + 'ale_action_remove_from_piggy' => 'Hucha', + 'ale_action_add_tag' => 'Etiqueta añadida', // dashboard - 'enable_auto_convert' => 'Habilitar conversión de moneda', - 'disable_auto_convert' => 'Deshabilitar conversión de moneda', - + 'enable_auto_convert' => 'Habilitar conversión de moneda', + 'disable_auto_convert' => 'Deshabilitar conversión de moneda', ]; /* diff --git a/resources/lang/es_ES/form.php b/resources/lang/es_ES/form.php index dff55a8a41..2d9bcf03ca 100644 --- a/resources/lang/es_ES/form.php +++ b/resources/lang/es_ES/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Banco', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Saldo de ahorro', - 'credit_card_limit' => 'Límite de la tarjeta de crédito', - 'automatch' => 'Coinciden automáticamente', - 'skip' => 'Saltar', - 'enabled' => 'Habilitado', - 'name' => 'Nombre', - 'active' => 'Activo', - 'amount_min' => 'Importe mínimo', - 'amount_max' => 'Importe máximo', - 'match' => 'Encontrado en', - 'strict' => 'Modo estricto', - 'repeat_freq' => 'Repetición', - 'object_group' => 'Grupo', - 'location' => 'Ubicación', - 'update_channel' => 'Canal de actualizaciones', - 'currency_id' => 'Divisa', - 'transaction_currency_id' => 'Moneda', - 'auto_budget_currency_id' => 'Moneda', - 'external_ip' => 'IP externa de su servidor', - 'attachments' => 'Adjuntos', - 'BIC' => 'BIC', - 'verify_password' => 'Verificar la seguridad de contraseña', - 'source_account' => 'Cuenta origen', - 'destination_account' => 'Cuenta destino', - 'asset_destination_account' => 'Cuenta de destino', - 'include_net_worth' => 'Incluir en valor neto', - 'asset_source_account' => 'Cuenta de origen', - 'journal_description' => 'Descripción', - 'note' => 'Notas', - 'currency' => 'Divisa', - 'account_id' => 'Cuenta', - 'budget_id' => 'Presupuesto', - 'bill_id' => 'Factura', - 'opening_balance' => 'Saldo inicial', - 'tagMode' => 'Modo de etiqueta', - 'virtual_balance' => 'Saldo virtual', + 'bank_name' => 'Banco', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Saldo de ahorro', + 'credit_card_limit' => 'Límite de la tarjeta de crédito', + 'automatch' => 'Coinciden automáticamente', + 'skip' => 'Saltar', + 'enabled' => 'Habilitado', + 'name' => 'Nombre', + 'active' => 'Activo', + 'amount_min' => 'Importe mínimo', + 'amount_max' => 'Importe máximo', + 'match' => 'Encontrado en', + 'strict' => 'Modo estricto', + 'repeat_freq' => 'Repetición', + 'object_group' => 'Grupo', + 'location' => 'Ubicación', + 'update_channel' => 'Canal de actualizaciones', + 'currency_id' => 'Divisa', + 'transaction_currency_id' => 'Moneda', + 'auto_budget_currency_id' => 'Moneda', + 'external_ip' => 'IP externa de su servidor', + 'attachments' => 'Adjuntos', + 'BIC' => 'BIC', + 'verify_password' => 'Verificar la seguridad de contraseña', + 'source_account' => 'Cuenta origen', + 'destination_account' => 'Cuenta destino', + 'asset_destination_account' => 'Cuenta de destino', + 'include_net_worth' => 'Incluir en valor neto', + 'asset_source_account' => 'Cuenta de origen', + 'journal_description' => 'Descripción', + 'note' => 'Notas', + 'currency' => 'Divisa', + 'account_id' => 'Cuenta', + 'budget_id' => 'Presupuesto', + 'bill_id' => 'Factura', + 'opening_balance' => 'Saldo inicial', + 'tagMode' => 'Modo de etiqueta', + 'virtual_balance' => 'Saldo virtual', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Cantidad objetivo', 'account_role' => 'Rol de cuenta', 'opening_balance_date' => 'Fecha del saldo inicial', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => '¿Estás seguro de que deseas eliminar la transacción descrita ":description"?', 'mass_journal_are_you_sure' => '¿Usted esta seguro de querer eliminar estas transacciones?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => '¿Seguro que quieres eliminar la etiqueta ":tag"?', 'journal_link_areYouSure' => '¿Seguro que quieres eliminar el vínculo entre :source y :destination?', 'linkType_areYouSure' => '¿Estás seguro de que deseas eliminar el tipo de vínculo ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Álbum', 'song' => 'Canción', - // admin 'domain' => 'Dominio', 'single_user_mode' => 'Deshabilitar registro de usuario', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Cuenta FinTS', 'local_account' => 'Cuenta Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Fecha desde', - 'to_date' => 'Fecha hasta', - 'due_date' => 'Fecha de vencimiento', - 'payment_date' => 'Fecha de pago', - 'invoice_date' => 'Fecha de la factura', - 'internal_reference' => 'Referencia interna', - 'inward' => 'Descripción interna', - 'outward' => 'Descripción externa', - 'rule_group_id' => 'Grupo de reglas', - 'transaction_description' => 'Descripción de la transacción', - 'first_date' => 'Primera fecha', - 'transaction_type' => 'Tipo de transacción', - 'repeat_until' => 'Repetir hasta', - 'recurring_description' => 'Descripción de transacción recurrente', - 'repetition_type' => 'Tipo de repetición', - 'foreign_currency_id' => 'Moneda extranjera', - 'repetition_end' => 'Termina la repetición', - 'repetitions' => 'Repeticiones', - 'calendar' => 'Calendario', - 'weekend' => 'Fin de semana', - 'client_secret' => 'Secreto del cliente', - 'withdrawal_destination_id' => 'Cuenta de destino', - 'deposit_source_id' => 'Cuenta de origen', - 'expected_on' => 'Esperado para', - 'paid' => 'Pagado', - 'auto_budget_type' => 'Autopresupuesto', - 'auto_budget_amount' => 'Importe del autopresupuesto', - 'auto_budget_period' => 'Período del autopresupuesto', - 'collected' => 'Cobrado', - 'submitted' => 'Enviado', - 'key' => 'Clave', - 'value' => 'Contenido del registro', - 'webhook_delivery' => 'Entrega', - 'webhook_response' => 'Respuesta', - 'webhook_trigger' => 'Disparador', + 'from_date' => 'Fecha desde', + 'to_date' => 'Fecha hasta', + 'due_date' => 'Fecha de vencimiento', + 'payment_date' => 'Fecha de pago', + 'invoice_date' => 'Fecha de la factura', + 'internal_reference' => 'Referencia interna', + 'inward' => 'Descripción interna', + 'outward' => 'Descripción externa', + 'rule_group_id' => 'Grupo de reglas', + 'transaction_description' => 'Descripción de la transacción', + 'first_date' => 'Primera fecha', + 'transaction_type' => 'Tipo de transacción', + 'repeat_until' => 'Repetir hasta', + 'recurring_description' => 'Descripción de transacción recurrente', + 'repetition_type' => 'Tipo de repetición', + 'foreign_currency_id' => 'Moneda extranjera', + 'repetition_end' => 'Termina la repetición', + 'repetitions' => 'Repeticiones', + 'calendar' => 'Calendario', + 'weekend' => 'Fin de semana', + 'client_secret' => 'Secreto del cliente', + 'withdrawal_destination_id' => 'Cuenta de destino', + 'deposit_source_id' => 'Cuenta de origen', + 'expected_on' => 'Esperado para', + 'paid' => 'Pagado', + 'auto_budget_type' => 'Autopresupuesto', + 'auto_budget_amount' => 'Importe del autopresupuesto', + 'auto_budget_period' => 'Período del autopresupuesto', + 'collected' => 'Cobrado', + 'submitted' => 'Enviado', + 'key' => 'Clave', + 'value' => 'Contenido del registro', + 'webhook_delivery' => 'Entrega', + 'webhook_response' => 'Respuesta', + 'webhook_trigger' => 'Disparador', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/es_ES/intro.php b/resources/lang/es_ES/intro.php index b2074edd55..5013ff3f74 100644 --- a/resources/lang/es_ES/intro.php +++ b/resources/lang/es_ES/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Bienvenido a la página de índice de Firefly III. Por favor tómate tu tiempo para revisar esta guía y que puedas hacerte una idea de cómo funciona Firefly III.', - 'index_accounts-chart' => 'Este gráfico muestra el saldo actual de tus cuentas. Puedes seleccionar las cuentas que se muestran en él desde tus preferencias.', - 'index_box_out_holder' => 'Esta pequeña caja y las cajas a continuación te darán una visión rápida de tu situación financiera.', - 'index_help' => 'Si alguna vez necesitas ayuda en una página o formulario, pulsa este botón.', - 'index_outro' => 'La mayoría de las páginas de Firefly III comenzarán con una pequeña introducción como ésta. Por favor, ponte en contacto conmigo si tienes preguntas o comentarios. ¡Disfruta!', - 'index_sidebar-toggle' => 'Para crear nuevas transacciones, cuentas u otros elementos, utiliza el menú bajo este icono.', - 'index_cash_account' => 'Estas son las cuentas creadas hasta ahora. Puede usar la cuenta de efectivo para vigilar los gastos de efectivo pero, por supuesto, no es obligatorio.', + 'index_intro' => 'Bienvenido a la página de índice de Firefly III. Por favor tómate tu tiempo para revisar esta guía y que puedas hacerte una idea de cómo funciona Firefly III.', + 'index_accounts-chart' => 'Este gráfico muestra el saldo actual de tus cuentas. Puedes seleccionar las cuentas que se muestran en él desde tus preferencias.', + 'index_box_out_holder' => 'Esta pequeña caja y las cajas a continuación te darán una visión rápida de tu situación financiera.', + 'index_help' => 'Si alguna vez necesitas ayuda en una página o formulario, pulsa este botón.', + 'index_outro' => 'La mayoría de las páginas de Firefly III comenzarán con una pequeña introducción como ésta. Por favor, ponte en contacto conmigo si tienes preguntas o comentarios. ¡Disfruta!', + 'index_sidebar-toggle' => 'Para crear nuevas transacciones, cuentas u otros elementos, utiliza el menú bajo este icono.', + 'index_cash_account' => 'Estas son las cuentas creadas hasta ahora. Puede usar la cuenta de efectivo para vigilar los gastos de efectivo pero, por supuesto, no es obligatorio.', // transactions - 'transactions_create_basic_info' => 'Introduzca la información básica de su transacción. Fuente, destino, fecha y descripción.', - 'transactions_create_amount_info' => 'Introduzca la cantidad de la transacción. Si es necesario, los campos se actualizarán automáticamente para la información de la cantidad extranjera.', - 'transactions_create_optional_info' => 'Todos estos campos son opcionales. Añadir meta-datos aquí hará que sus transacciones estén mejor organizadas.', - 'transactions_create_split' => 'Si quiere dividir una transacción, añada más divisiones con este botón', + 'transactions_create_basic_info' => 'Introduzca la información básica de su transacción. Fuente, destino, fecha y descripción.', + 'transactions_create_amount_info' => 'Introduzca la cantidad de la transacción. Si es necesario, los campos se actualizarán automáticamente para la información de la cantidad extranjera.', + 'transactions_create_optional_info' => 'Todos estos campos son opcionales. Añadir meta-datos aquí hará que sus transacciones estén mejor organizadas.', + 'transactions_create_split' => 'Si quiere dividir una transacción, añada más divisiones con este botón', // create account: - 'accounts_create_iban' => 'Indica un IBAN válido en tus cuentas. Esto facilitará la importación de datos en el futuro.', - 'accounts_create_asset_opening_balance' => 'Cuentas de ingreso deben tener un "saldo de apertura", indicando el inicio del historial de la cuenta en Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III admite múltiples divisas. Las cuentas tienen una divisa principal, que debes indicar aquí.', - 'accounts_create_asset_virtual' => 'A veces puede ayudar el darle a tu cuenta un balance virtual: una cantidad extra que se añade o resta siempre del balance real.', + 'accounts_create_iban' => 'Indica un IBAN válido en tus cuentas. Esto facilitará la importación de datos en el futuro.', + 'accounts_create_asset_opening_balance' => 'Cuentas de ingreso deben tener un "saldo de apertura", indicando el inicio del historial de la cuenta en Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III admite múltiples divisas. Las cuentas tienen una divisa principal, que debes indicar aquí.', + 'accounts_create_asset_virtual' => 'A veces puede ayudar el darle a tu cuenta un balance virtual: una cantidad extra que se añade o resta siempre del balance real.', // budgets index - 'budgets_index_intro' => 'Los presupuestos se utilizan para administrar sus finanzas y son una de las funciones básicas de Firefly III.', - 'budgets_index_set_budget' => 'Configure su presupuesto total para cada período de manera que Firefly III pueda decirle si ha presupuestado todo el dinero disponible.', - 'budgets_index_see_expenses_bar' => 'Gastar dinero irá llenando poco a poco esta barra.', - 'budgets_index_navigate_periods' => 'Navega a través de períodos para configurar fácilmente presupuestos con anticipación.', - 'budgets_index_new_budget' => 'Crea nuevos presupuestos como mejor te parezca.', - 'budgets_index_list_of_budgets' => 'Use esta tabla para establecer las cantidades para cada presupuesto y ver cómo lo está haciendo.', - 'budgets_index_outro' => 'Para aprender mas acerca de los presupuestos, revise el icono de ayuda en la esquina superior derecha.', + 'budgets_index_intro' => 'Los presupuestos se utilizan para administrar sus finanzas y son una de las funciones básicas de Firefly III.', + 'budgets_index_see_expenses_bar' => 'Gastar dinero irá llenando poco a poco esta barra.', + 'budgets_index_navigate_periods' => 'Navega a través de períodos para configurar fácilmente presupuestos con anticipación.', + 'budgets_index_new_budget' => 'Crea nuevos presupuestos como mejor te parezca.', + 'budgets_index_list_of_budgets' => 'Use esta tabla para establecer las cantidades para cada presupuesto y ver cómo lo está haciendo.', + 'budgets_index_outro' => 'Para aprender mas acerca de los presupuestos, revise el icono de ayuda en la esquina superior derecha.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Utilice estos informes para tener información detallada de sus finanzas.', - 'reports_index_inputReportType' => 'Escoja un tipo de informe. Revise las páginas de ayuda para ver lo que le muestra cada informe.', - 'reports_index_inputAccountsSelect' => 'Puede incluir o excluir cuentas de activos como mejor le convenga.', - 'reports_index_inputDateRange' => 'El rango de fecha seleccionada depende completamente de usted: desde un día hasta 10 años.', - 'reports_index_extra-options-box' => 'Dependiendo del informe que usted haya seleccionado, puede seleccionar filtros y opciones extras aquí. Mire este recuadro cuando cambie los tipos de informes.', + 'reports_index_intro' => 'Utilice estos informes para tener información detallada de sus finanzas.', + 'reports_index_inputReportType' => 'Escoja un tipo de informe. Revise las páginas de ayuda para ver lo que le muestra cada informe.', + 'reports_index_inputAccountsSelect' => 'Puede incluir o excluir cuentas de activos como mejor le convenga.', + 'reports_index_inputDateRange' => 'El rango de fecha seleccionada depende de usted: desde un día hasta 10 años.', + 'reports_index_extra-options-box' => 'Dependiendo del informe que usted haya seleccionado, puede seleccionar filtros y opciones extras aquí. Mire este recuadro cuando cambie los tipos de informes.', // reports (reports) - 'reports_report_default_intro' => 'Este informe le dará un rápido y completo resumen de sus finanzas. Si desea ver algo mas, ¡por favor no dude en ponerse en contacto conmigo!', - 'reports_report_audit_intro' => 'Este informe le dará información detallada de sus cuentas de activos.', - 'reports_report_audit_optionsBox' => 'Use estos recuadros de verificación para ver u ocultar las columnas que a usted le interesan.', + 'reports_report_default_intro' => 'Este informe le dará un rápido y completo resumen de sus finanzas. Si desea ver algo mas, ¡por favor no dude en ponerse en contacto conmigo!', + 'reports_report_audit_intro' => 'Este informe le dará información detallada de sus cuentas de activos.', + 'reports_report_audit_optionsBox' => 'Use estos recuadros de verificación para ver u ocultar las columnas que a usted le interesan.', - 'reports_report_category_intro' => 'Este informe le dará una idea de una o múltiples categorías.', - 'reports_report_category_pieCharts' => 'Estos gráficos le darán una idea de sus gastos e ingresos por categoría o por cuenta.', - 'reports_report_category_incomeAndExpensesChart' => 'Estos gráficos muestran sus gastos e ingresos por categoría.', + 'reports_report_category_intro' => 'Este informe le dará una idea de una o múltiples categorías.', + 'reports_report_category_pieCharts' => 'Estos gráficos le darán una idea de sus gastos e ingresos por categoría o por cuenta.', + 'reports_report_category_incomeAndExpensesChart' => 'Estos gráficos muestran sus gastos e ingresos por categoría.', - 'reports_report_tag_intro' => 'Este informe le dará una idea de una o múltiples etiquetas.', - 'reports_report_tag_pieCharts' => 'Estos gráficos le darán una idea de gastos e ingresos por etiqueta, cuenta, categoría o presupuesto.', - 'reports_report_tag_incomeAndExpensesChart' => 'Este gráfico le muestra gastos e ingresos por etiqueta.', + 'reports_report_tag_intro' => 'Este informe le dará una idea de una o múltiples etiquetas.', + 'reports_report_tag_pieCharts' => 'Estos gráficos le darán una idea de gastos e ingresos por etiqueta, cuenta, categoría o presupuesto.', + 'reports_report_tag_incomeAndExpensesChart' => 'Este gráfico le muestra gastos e ingresos por etiqueta.', 'reports_report_budget_intro' => 'Este informe le dará una idea de uno o múltiples presupuestos.', 'reports_report_budget_pieCharts' => 'Estos gráficos le darán a usted una idea de los gastos por presupuesto o por cuenta.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Junto con esta barra de progreso hay dos botones (+ y -) para añadir o quitar dinero de cada hucha.', 'piggy-banks_index_accountStatus' => 'Para cada cuenta de activos con al menos una hucha, el estado está listado en esta tabla.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => '¿Cuál es tu meta? ¿Un nuevo sofá, una cámara, dinero para emergencias?', 'piggy-banks_create_date' => 'Puede establecer una fecha objetivo o una fecha limite para su hucha.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Use facturas para rastrear la cantidad de dinero correspondiente a cada período. Piense en gastos como renta, seguro o pagos de hipoteca.', 'bills_create_name' => 'Use un nombre descriptivo como "alquiler" o "seguro de salud".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Seleccione un importe mínimo y máximo para esta factura.', 'bills_create_repeat_freq_holder' => 'La mayoría de facturas se repiten mensualmente, pero usted puede establecer otra frecuencia aquí.', 'bills_create_skip_holder' => 'Si una cuenta se repite cada 2 semanas, el campo "saltar" debe estar marcado como "1" para saltar una semana y generar el gasto cada 2.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Use este botón para ver cuáles transacciones coincidirán con su regla.', 'rules_create_actions' => 'Establezca tantas acciones como quiera.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Mas opciones están disponibles detrás de estas pestañas.', diff --git a/resources/lang/es_ES/list.php b/resources/lang/es_ES/list.php index bc94e85392..6fd2b252ea 100644 --- a/resources/lang/es_ES/list.php +++ b/resources/lang/es_ES/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Botones', - 'icon' => 'Icono', - 'id' => 'ID', - 'create_date' => 'Fecha de creación', - 'update_date' => 'Fecha de modificación', - 'updated_at' => 'Actualizado el', - 'balance_before' => 'Balance antes de ', - 'balance_after' => 'Balance después de la', - 'name' => 'Nombre', - 'role' => 'Rol', - 'currentBalance' => 'Balance actual', - 'linked_to_rules' => 'Reglas asociadas', - 'active' => '¿Está Activo?', - 'percentage' => 'pct.', - 'recurring_transaction' => 'Transacción Recurrente', - 'next_due' => 'Próxima vez', - 'transaction_type' => 'Tipo', - 'lastActivity' => 'Actividad más reciente', - 'balanceDiff' => 'Diferencia de saldo', - 'other_meta_data' => 'Otros metadatos', - 'invited_at' => 'Invitada el', - 'expires' => 'La invitación caduca', - 'invited_by' => 'Invitado por', - 'invite_link' => 'Enlace de invitación', - 'account_type' => 'Tipo de cuenta', - 'created_at' => 'Fecha de creación', - 'account' => 'Cuenta', - 'external_url' => 'URL externa', - 'matchingAmount' => 'Cantidad', - 'destination' => 'Destino', - 'source' => 'Origen', - 'next_expected_match' => 'Próxima coincidencia esperada', - 'automatch' => '¿Buscar coincidencia automaticamente?', + 'buttons' => 'Botones', + 'icon' => 'Icono', + 'id' => 'ID', + 'create_date' => 'Fecha de creación', + 'update_date' => 'Fecha de modificación', + 'updated_at' => 'Actualizado el', + 'balance_before' => 'Balance antes de ', + 'balance_after' => 'Balance después de la', + 'name' => 'Nombre', + 'role' => 'Rol', + 'currentBalance' => 'Balance actual', + 'linked_to_rules' => 'Reglas asociadas', + 'active' => '¿Está Activo?', + 'percentage' => 'pct.', + 'recurring_transaction' => 'Transacción Recurrente', + 'next_due' => 'Próxima vez', + 'transaction_type' => 'Tipo', + 'lastActivity' => 'Última actividad', + 'balanceDiff' => 'Diferencia de saldo', + 'other_meta_data' => 'Otros metadatos', + 'invited_at' => 'Invitada el', + 'expires' => 'La invitación caduca', + 'invited_by' => 'Invitado por', + 'invite_link' => 'Enlace de invitación', + 'account_type' => 'Tipo de cuenta', + 'created_at' => 'Fecha de creación', + 'account' => 'Cuenta', + 'external_url' => 'URL externa', + 'matchingAmount' => 'Cantidad', + 'destination' => 'Destino', + 'source' => 'Origen', + 'next_expected_match' => 'Próxima coincidencia esperada', + 'automatch' => '¿Buscar coincidencia automáticamente?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,17 +79,16 @@ return [ * */ - 'repeat_freq' => 'Repetición:', 'description' => 'Descripción', - 'amount' => 'Monto', + 'amount' => 'Cantidad', 'date' => 'Fecha', 'interest_date' => 'Tasa de interés', - 'book_date' => 'Libro fecha', + 'book_date' => 'Fecha del libro de registro', 'process_date' => 'Fecha de procesamiento', 'due_date' => 'Fecha de vencimiento', 'payment_date' => 'Fecha de pago', - 'invoice_date' => 'Fecha de facturación', + 'invoice_date' => 'Fecha de la factura', 'internal_reference' => 'Referencia interna', 'notes' => 'Notas', 'from' => 'Desde', @@ -108,9 +106,9 @@ return [ 'account_number' => 'Número de cuenta', 'paid_current_period' => 'Pagado este período', 'email' => 'Correo electrónico', - 'registered_at' => 'Registrado el', - 'is_blocked' => 'Está bloqueado', - 'is_admin' => '¿Es el administrador?', + 'registered_at' => 'Registrado', + 'is_blocked' => 'Bloqueado', + 'is_admin' => '¿Es administrador?', 'has_two_factor' => 'Tiene 2FA', 'blocked_code' => 'Código de bloqueo', 'source_account' => 'Cuenta origen', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Cuenta con bunq', 'file_name' => 'Nombre de fichero', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Tamaño de fichero', - 'file_type' => 'Tipo de fichero', - 'attached_to' => 'Adjunto a', - 'file_exists' => 'El fichero existe', - 'spectre_bank' => 'Banco', - 'spectre_last_use' => 'Último acceso', - 'spectre_status' => 'Estado', - 'bunq_payment_id' => 'ID de pago bunq', - 'repetitions' => 'Repeticiones', - 'title' => 'Título', - 'transaction_s' => 'Transacción(es)', - 'field' => 'Campo', - 'value' => 'Valor', - 'interest' => 'Interés', - 'interest_period' => 'Período de interés', - 'liability_type' => 'Tipo de pasivo', - 'liability_direction' => 'Pasivo entrada/salida', - 'end_date' => 'Fecha fin', - 'payment_info' => 'Información del pago', - 'expected_info' => 'Siguiente transacción esperada', - 'start_date' => 'Fecha de inicio', - 'trigger' => 'Disparador', - 'response' => 'Respuesta', - 'delivery' => 'Entrega', - 'url' => 'URL', - 'secret' => 'Secreto', - + 'file_size' => 'Tamaño de fichero', + 'file_type' => 'Tipo de fichero', + 'attached_to' => 'Adjunto a', + 'file_exists' => 'El fichero existe', + 'spectre_bank' => 'Banco', + 'spectre_last_use' => 'Último acceso', + 'spectre_status' => 'Estado', + 'bunq_payment_id' => 'ID de pago bunq', + 'repetitions' => 'Repeticiones', + 'title' => 'Título', + 'transaction_s' => 'Transacción(es)', + 'field' => 'Campo', + 'value' => 'Valor', + 'interest' => 'Interés', + 'interest_period' => 'Período de interés', + 'liability_type' => 'Tipo de pasivo', + 'liability_direction' => 'Pasivo entrada/salida', + 'end_date' => 'Fecha fin', + 'payment_info' => 'Información del pago', + 'expected_info' => 'Siguiente transacción esperada', + 'start_date' => 'Fecha de inicio', + 'trigger' => 'Disparador', + 'response' => 'Respuesta', + 'delivery' => 'Entrega', + 'url' => 'URL', + 'secret' => 'Secreto', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/es_ES/pagination.php b/resources/lang/es_ES/pagination.php index d4c0545f87..43dc8f5d8b 100644 --- a/resources/lang/es_ES/pagination.php +++ b/resources/lang/es_ES/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/es_ES/passwords.php b/resources/lang/es_ES/passwords.php index e2d90679b7..252a43f6ad 100644 --- a/resources/lang/es_ES/passwords.php +++ b/resources/lang/es_ES/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -39,6 +38,6 @@ return [ 'user' => 'No podemos encontrar un usuario con esa dirección de correo electrónico.', 'token' => 'Este token para restablecer la contraseña no es válido.', 'sent' => '¡Te hemos enviado un correo con el enlace para restablecer tu contraseña!', - 'reset' => 'Tu contraseña fue reestablecida!', + 'reset' => '¡Tu contraseña ha sido restablecida!', 'blocked' => 'Buen intento.', ]; diff --git a/resources/lang/es_ES/rules.php b/resources/lang/es_ES/rules.php index 0ca84b9674..43e03b72f6 100644 --- a/resources/lang/es_ES/rules.php +++ b/resources/lang/es_ES/rules.php @@ -1,6 +1,5 @@ 'Firefly III no puede encontrar la suscripción ":name"', 'no_notes_to_move' => 'La transacción no tiene notas para mover al campo de descripción', 'no_tags_to_remove' => 'La transacción no tiene etiquetas que eliminar', + 'not_withdrawal' => 'La transacción no es una retirada', + 'not_deposit' => 'La transacción no es un depósito', 'cannot_find_tag' => 'Firefly III no puede encontrar la etiqueta ":tag"', 'cannot_find_asset' => 'Firefly III no puede encontrar la cuenta de activo ":name"', 'cannot_find_accounts' => 'Firefly III no puede encontrar la cuenta de origen o destino', diff --git a/resources/lang/es_ES/validation.php b/resources/lang/es_ES/validation.php index 5c66deb1cd..e8c21aff5e 100644 --- a/resources/lang/es_ES/validation.php +++ b/resources/lang/es_ES/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'El array esperaba la cláusula "where"', - 'missing_update' => 'El array esperaba la cláusula "update"', - 'invalid_where_key' => 'El JSON contiene una clave no válida para la cláusula "where"', - 'invalid_update_key' => 'El JSON contiene una clave no válida para la cláusula "update"', - 'invalid_query_data' => 'Hay datos no válidos en el campo %s:%s de su consulta.', - 'invalid_query_account_type' => 'Su consulta contiene cuentas de diferentes tipos, lo que no está permitido.', - 'invalid_query_currency' => 'Su consulta contiene cuentas que tienen diferentes ajustes de divisa, lo que no está permitido.', - 'iban' => 'Este no es un IBAN válido.', - 'zero_or_more' => 'El valor no puede ser negativo.', - 'date_or_time' => 'El valor debe ser una fecha u hora válido (ISO 8601).', - 'source_equals_destination' => 'La cuenta origen es igual que la cuenta destino.', - 'unique_account_number_for_user' => 'Parece que este número de cuenta ya está en uso.', - 'unique_iban_for_user' => 'Parece que este IBAN ya está en uso.', - 'deleted_user' => 'Debido a restricciones de seguridad, no se puede registrar utilizando esta dirección de correo electrónico.', - 'rule_trigger_value' => 'Este valor es incorrecto para el disparador seleccionado.', - 'rule_action_value' => 'Este valor es incorrecto para la acción seleccionada.', - 'file_already_attached' => 'El archivo ":name" ya ha sido añadido a este objeto.', - 'file_attached' => 'Archivo ":name" subido con éxito.', - 'must_exist' => 'El ID introducido en :attribute no existe en la base de datos.', - 'all_accounts_equal' => 'Todas las cuentas en este campo deben ser iguales.', - 'group_title_mandatory' => 'Un título de grupo es obligatorio cuando hay más de una transacción.', - 'transaction_types_equal' => 'Todas las divisiones deben ser del mismo tipo.', - 'invalid_transaction_type' => 'Tipo de transacción inválido.', - 'invalid_selection' => 'Tu selección no es válida.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Se necesita al menos una transacción.', - 'recurring_transaction_id' => 'Se necesita al menos una transacción.', - 'need_id_to_match' => 'Necesitas registrar esta entrada con un ID para que la API pueda hacerla coincidir.', - 'too_many_unmatched' => 'Demasiadas transacciones enviadas no pueden emparejarse con sus respectivas entradas en la base de datos. Asegúrese de que las entradas existentes tienen un ID válido.', - 'id_does_not_match' => 'El ID #:id enviado no coincide con el ID esperado. Asegúrese de que coincide u omita el campo.', - 'at_least_one_repetition' => 'Se necesita al menos una repetición.', - 'require_repeat_until' => 'Se precisa un número de repeticiones o una fecha de finalización (repeat_until). No ambas.', - 'require_currency_info' => 'El contenido de este campo no es válido sin la información montearia.', - 'not_transfer_account' => 'Esta cuenta no es una cuenta que se pueda utilizar para transferencias.', - 'require_currency_amount' => 'El contenido de este campo no es válido sin información de cantidad extranjera.', - 'require_foreign_currency' => 'Este campo requiere un número', - 'require_foreign_dest' => 'El valor de este campo debe coincidir con la moneda de la cuenta de destino.', - 'require_foreign_src' => 'El valor de este campo debe coincidir con la moneda de la cuenta de origen.', - 'equal_description' => 'La descripción de la transacción no debería ser igual a la descripción global.', - 'file_invalid_mime' => 'El archivo ":name" es de tipo ":mime", el cual no se acepta.', - 'file_too_large' => 'El archivo ":name" es demasiado grande.', - 'belongs_to_user' => 'El valor de :attribute es desconocido.', - 'accepted' => 'El :attribute debe ser aceptado.', - 'bic' => 'Esto no es un BIC válido.', - 'at_least_one_trigger' => 'La regla debe tener al menos un desencadenante.', - 'at_least_one_active_trigger' => 'La regla debe tener al menos un desencadenante activo.', - 'at_least_one_action' => 'La regla debe tener al menos una acción.', - 'at_least_one_active_action' => 'La regla debe tener al menos una acción activa.', - 'base64' => 'Esto no es un dato codificado en base64 válido.', - 'model_id_invalid' => 'El ID dado no parece válido para este modelo.', - 'less' => ':attribute debe ser menor que 10.000.000', - 'active_url' => 'El campo :attribute no es una URL válida.', - 'after' => 'El campo :attribute debe ser una fecha posterior a :date.', - 'date_after' => 'La fecha de inicio debe ser anterior a la fecha de finalización.', - 'alpha' => 'El campo :attribute sólo puede contener letras.', - 'alpha_dash' => 'El campo :attribute sólo puede contener letras, números y guiones.', - 'alpha_num' => 'El campo :attribute sólo puede contener letras y números.', - 'array' => 'El campo :attribute debe ser un arreglo.', - 'unique_for_user' => 'Ya hay una entrada con esto :attribute.', - 'before' => 'El campo :attribute debe contener una fecha anterior a :date.', - 'unique_object_for_user' => 'Este nombre ya está en uso.', - 'unique_account_for_user' => 'Este nombre de cuenta ya está en uso.', + 'bad_type_source' => 'Firefly III no puede determinar el tipo de transacción basado en esta cuenta de origen.', + 'bad_type_destination' => 'Firefly III no puede determinar el tipo de transacción basado en esta cuenta de destino.', + 'missing_where' => 'El array esperaba la cláusula "where"', + 'missing_update' => 'El array esperaba la cláusula "update"', + 'invalid_where_key' => 'El JSON contiene una clave no válida para la cláusula "where"', + 'invalid_update_key' => 'El JSON contiene una clave no válida para la cláusula "update"', + 'invalid_query_data' => 'Hay datos no válidos en el campo %s:%s de su consulta.', + 'invalid_query_account_type' => 'Su consulta contiene cuentas de diferentes tipos, lo que no está permitido.', + 'invalid_query_currency' => 'Su consulta contiene cuentas que tienen diferentes ajustes de divisa, lo que no está permitido.', + 'iban' => 'Este no es un IBAN válido.', + 'zero_or_more' => 'El valor no puede ser negativo.', + 'more_than_zero' => 'El valor debe ser mayor que cero.', + 'more_than_zero_correct' => 'El valor debe ser cero o más.', + 'no_asset_account' => 'Esta no es una cuenta de activos.', + 'date_or_time' => 'El valor debe ser una fecha u hora válido (ISO 8601).', + 'source_equals_destination' => 'La cuenta origen es igual que la cuenta destino.', + 'unique_account_number_for_user' => 'Parece que este número de cuenta ya está en uso.', + 'unique_iban_for_user' => 'Parece que este IBAN ya está en uso.', + 'reconciled_forbidden_field' => 'Esta transacción ya está reconciliada, no puede cambiar ":field"', + 'deleted_user' => 'Debido a restricciones de seguridad, no se puede registrar utilizando esta dirección de correo electrónico.', + 'rule_trigger_value' => 'Este valor es incorrecto para el disparador seleccionado.', + 'rule_action_value' => 'Este valor es incorrecto para la acción seleccionada.', + 'file_already_attached' => 'El archivo ":name" ya ha sido añadido a este objeto.', + 'file_attached' => 'Archivo ":name" subido con éxito.', + 'must_exist' => 'El ID introducido en :attribute no existe en la base de datos.', + 'all_accounts_equal' => 'Todas las cuentas en este campo deben ser iguales.', + 'group_title_mandatory' => 'Un título de grupo es obligatorio cuando hay más de una transacción.', + 'transaction_types_equal' => 'Todas las divisiones deben ser del mismo tipo.', + 'invalid_transaction_type' => 'Tipo de transacción inválido.', + 'invalid_selection' => 'Tu selección no es válida.', + 'belongs_user' => 'Este valor está vinculado a un objeto que parece no existir.', + 'belongs_user_or_user_group' => 'Este valor está vinculado a un objeto que no parece existir en su administración financiera actual.', + 'at_least_one_transaction' => 'Se necesita al menos una transacción.', + 'recurring_transaction_id' => 'Se necesita al menos una transacción.', + 'need_id_to_match' => 'Necesitas registrar esta entrada con un ID para que la API pueda hacerla coincidir.', + 'too_many_unmatched' => 'Demasiadas transacciones enviadas no pueden emparejarse con sus respectivas entradas en la base de datos. Asegúrese de que las entradas existentes tienen un ID válido.', + 'id_does_not_match' => 'El ID #:id enviado no coincide con el ID esperado. Asegúrese de que coincide u omita el campo.', + 'at_least_one_repetition' => 'Se necesita al menos una repetición.', + 'require_repeat_until' => 'Se precisa un número de repeticiones o una fecha de finalización (repeat_until). No ambas.', + 'require_currency_info' => 'El contenido de este campo no es válido sin la información montearia.', + 'not_transfer_account' => 'Esta cuenta no es una cuenta que se pueda utilizar para transferencias.', + 'require_currency_amount' => 'El contenido de este campo no es válido sin información de cantidad extranjera.', + 'require_foreign_currency' => 'Este campo requiere un número', + 'require_foreign_dest' => 'El valor de este campo debe coincidir con la moneda de la cuenta de destino.', + 'require_foreign_src' => 'El valor de este campo debe coincidir con la moneda de la cuenta de origen.', + 'equal_description' => 'La descripción de la transacción no debería ser igual a la descripción global.', + 'file_invalid_mime' => 'El archivo ":name" es de tipo ":mime", el cual no se acepta.', + 'file_too_large' => 'El archivo ":name" es demasiado grande.', + 'belongs_to_user' => 'El valor de :attribute es desconocido.', + 'accepted' => 'El :attribute debe ser aceptado.', + 'bic' => 'Esto no es un BIC válido.', + 'at_least_one_trigger' => 'La regla debe tener al menos un desencadenante.', + 'at_least_one_active_trigger' => 'La regla debe tener al menos un desencadenante activo.', + 'at_least_one_action' => 'La regla debe tener al menos una acción.', + 'at_least_one_active_action' => 'La regla debe tener al menos una acción activa.', + 'base64' => 'Esto no es un dato codificado en base64 válido.', + 'model_id_invalid' => 'El ID dado no parece válido para este modelo.', + 'less' => ':attribute debe ser menor que 10.000.000', + 'active_url' => 'El campo :attribute no es una URL válida.', + 'after' => 'El campo :attribute debe ser una fecha posterior a :date.', + 'date_after' => 'La fecha de inicio debe ser anterior a la fecha de finalización.', + 'alpha' => 'El campo :attribute sólo puede contener letras.', + 'alpha_dash' => 'El campo :attribute sólo puede contener letras, números y guiones.', + 'alpha_num' => 'El campo :attribute sólo puede contener letras y números.', + 'array' => 'El campo :attribute debe ser un arreglo.', + 'unique_for_user' => 'Ya hay una entrada con esto :attribute.', + 'before' => 'El campo :attribute debe contener una fecha anterior a :date.', + 'unique_object_for_user' => 'Este nombre ya está en uso.', + 'unique_account_for_user' => 'Este nombre de cuenta ya está en uso.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => 'El atributo :attribute debe estar entre :min y :max.', + 'between.file' => 'El atributo :attribute debe estar entre :min y :max kilobytes.', + 'between.string' => 'El atributo :attribute debe estar entre :min y :max caracteres.', + 'between.array' => 'El atributo :attribute debe estar entre :min y :max items.', + 'boolean' => 'El campo :attribute debe ser verdadero o falso.', + 'confirmed' => 'La confirmación de :attribute no coincide.', + 'date' => 'El campo :attribute no es una fecha válida.', + 'date_format' => 'El campo :attribute no corresponde con el formato :format.', + 'different' => 'Los campos :attribute y :other han de ser diferentes.', + 'digits' => 'El campo :attribute debe contener un número de :digits dígitos.', + 'digits_between' => 'El campo :attribute debe contener entre :min y :max dígitos.', + 'email' => 'El campo :attribute no corresponde con una dirección de e-mail válida.', + 'filled' => 'El campo :attribute es obligatorio.', + 'exists' => 'El campo :attribute seleccionado no es correcto.', + 'image' => 'El campo :attribute debe ser una imagen.', + 'in' => 'El campo :attribute seleccionado no es válido.', + 'integer' => 'El campo :attribute debe ser un entero.', + 'ip' => 'El campo :attribute debe contener una dirección IP válida.', + 'json' => 'El campo :attribute debe ser una cadena JSON válida.', + 'max.numeric' => 'El campo :attribute no puede ser mayor que :max.', + 'max.file' => 'El campo :attribute no puede ser mayor :max de kilobytes.', + 'max.string' => 'El campo :attribute debe contener menos de :max caracteres.', + 'max.array' => 'El campo :attribute debe contener al menos :max elementos.', + 'mimes' => 'El campo :attribute debe ser un archivo de tipo :values.', + 'min.numeric' => 'El campo :attribute debe ser al menos :min.', + 'lte.numeric' => 'El :attribute debe ser menor o igual :value.', + 'min.file' => 'El campo :attribute debe ser al menos :min kilobytes.', + 'min.string' => 'El campo :attribute debe contener al menos :min caracteres.', + 'min.array' => 'El campo :attribute debe tener al menos :min elementos.', + 'not_in' => 'El campo :attribute seleccionado es incorrecto.', + 'numeric' => 'El campo :attribute debe ser un número.', + 'scientific_notation' => 'El :attribute no puede usar la notación científica.', + 'numeric_native' => 'La cantidad nativa debe ser un número.', + 'numeric_destination' => 'La cantidad destino debe ser un número.', + 'numeric_source' => 'La cantidad origen debe ser un número.', + 'regex' => 'El formato del campo :attribute no es válido.', + 'required' => 'El campo :attribute es obligatorio.', + 'required_if' => 'El campo :attribute es obligatorio cuando el campo :other es :value.', + 'required_unless' => 'El campo :attribute es obligatorio a menos que :other se encuentre en :values.', + 'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.', + 'required_with_all' => 'El campo :attribute es obligatorio cuando :values está presente.', + 'required_without' => 'El campo :attribute es obligatorio cuando :values no está presente.', + 'required_without_all' => 'El campo :attribute es obligatorio cuando ningún campo :values está presente.', + 'same' => 'El campo atributo :attribute y :other deben coincidir.', + 'size.numeric' => 'El tamaño de :attribute debe ser :size.', + 'amount_min_over_max' => 'La cantidad mínima no puede ser mayor que la cantidad máxima.', + 'size.file' => 'El tamaño de :attribute debe ser :size kilobytes.', + 'size.string' => 'El campo :attribute debe tener :size caracteres.', + 'size.array' => 'El campo :attribute debe contener :size elementos.', + 'unique' => 'El elemento :attribute ya está en uso.', + 'string' => 'El :attribute debería ser una cadena de caracteres.', + 'url' => 'El formato del campo :attribute no es válido.', + 'timezone' => 'El campo :attribute debe contener una zona válida.', + '2fa_code' => 'El campo :attribute no es válido.', + 'dimensions' => 'Las dimensiones de la imagen :attribute son incorrectas.', + 'distinct' => 'El campo :attribute tiene un valor duplicado.', + 'file' => 'El campo :attribute debe ser un fichero.', + 'in_array' => 'El campo :attribute no existe en :other.', + 'present' => 'El campo :attribute debe estar presente.', + 'amount_zero' => 'La cantidad total no puede ser cero.', + 'current_target_amount' => 'La cantidad actual debe ser menor que la cantidad de destino.', + 'unique_piggy_bank_for_user' => 'En nombre de la hucha debe ser único.', + 'unique_object_group' => 'El nombre del grupo debe ser único', + 'starts_with' => 'El valor debe comenzar con :values.', + 'unique_webhook' => 'Ya tiene un webhook con esta combinación de URL, activador, respuesta y entrega.', + 'unique_existing_webhook' => 'Ya tiene otro webhook con esta combinación de URL, activador, respuesta y entrega.', + 'same_account_type' => 'Ambas cuentas deben ser del mismo tipo de cuenta', + 'same_account_currency' => 'Ambas cuentas deben tener la misma configuración de moneda', - 'between.numeric' => 'El atributo :attribute debe estar entre :min y :max.', - 'between.file' => 'El atributo :attribute debe estar entre :min y :max kilobytes.', - 'between.string' => 'El atributo :attribute debe estar entre :min y :max caracteres.', - 'between.array' => 'El atributo :attribute debe estar entre :min y :max items.', - 'boolean' => 'El campo :attribute debe ser verdadero o falso.', - 'confirmed' => 'La confirmación de :attribute no coincide.', - 'date' => 'El campo :attribute no es una fecha válida.', - 'date_format' => 'El campo :attribute no corresponde con el formato :format.', - 'different' => 'Los campos :attribute y :other han de ser diferentes.', - 'digits' => 'El campo :attribute debe contener un número de :digits dígitos.', - 'digits_between' => 'El campo :attribute debe contener entre :min y :max dígitos.', - 'email' => 'El campo :attribute no corresponde con una dirección de e-mail válida.', - 'filled' => 'El campo :attribute es requerido.', - 'exists' => 'El campo :attribute seleccionado no es correcto.', - 'image' => 'El campo :attribute debe ser una imagen.', - 'in' => 'El campo :attribute seleccionado es inválido.', - 'integer' => 'El campo :attribute debe ser un entero.', - 'ip' => 'El campo :attribute debe contener una dirección IP válida.', - 'json' => 'El campo :attribute debe ser una cadena JSON válida.', - 'max.numeric' => 'El campo :attribute no puede ser mayor que :max.', - 'max.file' => 'El campo :attribute no puede ser mayor :max de kilobytes.', - 'max.string' => 'El campo :attribute debe contener menos de :max caracteres.', - 'max.array' => 'El campo :attribute debe contener al menos :max elementos.', - 'mimes' => 'El campo :attribute debe ser un archivo de tipo :values.', - 'min.numeric' => 'El campo :attribute debe ser al menos :min.', - 'lte.numeric' => 'El :attribute debe ser menor o igual :value.', - 'min.file' => 'El campo :attribute debe ser al menos :min kilobytes.', - 'min.string' => 'El campo :attribute debe contener al menos :min caracteres.', - 'min.array' => 'El campo :attribute debe tener al menos :min elementos.', - 'not_in' => 'El campo :attribute seleccionado es incorrecto.', - 'numeric' => 'El campo :attribute debe ser un número.', - 'numeric_native' => 'La cantidad nativa debe ser un número.', - 'numeric_destination' => 'La cantidad destino debe ser un número.', - 'numeric_source' => 'La cantidad origen debe ser un número.', - 'regex' => 'El formato del campo :attribute no es válido.', - 'required' => 'El campo :attribute es obligatorio.', - 'required_if' => 'El campo :attribute es obligatorio cuando el campo :other es :value.', - 'required_unless' => 'El campo :attribute es obligatorio a menos que :other se encuentre en :values.', - 'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.', - 'required_with_all' => 'El campo :attribute es obligatorio cuando :values está presente.', - 'required_without' => 'El campo :attribute es obligatorio cuando :values no está presente.', - 'required_without_all' => 'El campo :attribute es obligatorio cuando ningún campo :values está presente.', - 'same' => 'El campo atributo :attribute y :other deben coincidir.', - 'size.numeric' => 'El tamaño de :attribute debe ser :size.', - 'amount_min_over_max' => 'La cantidad mínima no puede ser mayor que la cantidad máxima.', - 'size.file' => 'El tamaño de :attribute debe ser :size kilobytes.', - 'size.string' => 'El campo :attribute debe tener :size caracteres.', - 'size.array' => 'El campo :attribute debe contener :size elementos.', - 'unique' => 'El elemento :attribute ya está en uso.', - 'string' => 'El :attribute debería ser una cadena de caracteres.', - 'url' => 'El formato del campo :attribute no es válido.', - 'timezone' => 'El campo :attribute debe contener una zona válida.', - '2fa_code' => 'El campo :attribute no es válido.', - 'dimensions' => 'Las dimensiones de la imagen :attribute son incorrectas.', - 'distinct' => 'El campo :attribute tiene un valor duplicado.', - 'file' => 'El campo :attribute debe ser un fichero.', - 'in_array' => 'El campo :attribute no existe en :other.', - 'present' => 'El campo :attribute debe estar presente.', - 'amount_zero' => 'La cantidad total no puede ser cero.', - 'current_target_amount' => 'La cantidad actual debe ser menor que la cantidad de destino.', - 'unique_piggy_bank_for_user' => 'En nombre de la hucha debe ser único.', - 'unique_object_group' => 'El nombre del grupo debe ser único', - 'starts_with' => 'El valor debe comenzar con :values.', - 'unique_webhook' => 'Ya tiene un webhook con esta combinación de URL, activador, respuesta y entrega.', - 'unique_existing_webhook' => 'Ya tiene otro webhook con esta combinación de URL, activador, respuesta y entrega.', - 'same_account_type' => 'Ambas cuentas deben ser del mismo tipo de cuenta', - 'same_account_currency' => 'Ambas cuentas deben tener la misma configuración de moneda', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Esta contraseña no es segura. Por favor inténtalo de nuevo. Para más información, visita https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Tipo de repetición no válido para transacciones recurrentes.', - 'valid_recurrence_rep_moment' => 'Momento de repetición no válido para este tipo de repetición.', - 'invalid_account_info' => 'Información de cuenta no válida.', - 'attributes' => [ + 'secure_password' => 'Esta contraseña no es segura. Por favor inténtalo de nuevo. Para más información, visita https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Tipo de repetición no válido para transacciones recurrentes.', + 'valid_recurrence_rep_moment' => 'Momento de repetición no válido para este tipo de repetición.', + 'invalid_account_info' => 'Información de cuenta no válida.', + 'attributes' => [ 'email' => 'dirección de correo electrónico', 'description' => 'descripcion', 'amount' => 'cantidad', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido y/o nombre de cuenta de origen válido para continuar.', - 'withdrawal_source_bad_data' => '[a] No se pudo encontrar una cuenta de origen válida al buscar por ID ":id" o nombre ":name".', - 'withdrawal_dest_need_data' => '[a] Necesita obtener un ID de cuenta de destino válido y/o un nombre de cuenta de destino válido para continuar.', - 'withdrawal_dest_bad_data' => 'No se pudo encontrar una cuenta de destino válida buscando ID ":id" o nombre ":name".', + 'withdrawal_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido y/o nombre de cuenta de origen válido para continuar.', + 'withdrawal_source_bad_data' => '[a] No se pudo encontrar una cuenta de origen válida al buscar por ID ":id" o nombre ":name".', + 'withdrawal_dest_need_data' => '[a] Necesita obtener un ID de cuenta de destino válido y/o un nombre de cuenta de destino válido para continuar.', + 'withdrawal_dest_bad_data' => 'No se pudo encontrar una cuenta de destino válida buscando ID ":id" o nombre ":name".', - 'withdrawal_dest_iban_exists' => 'Este IBAN de cuenta de destino ya está siendo utilizada por una cuenta de activos o pasivos y no se puede utilizar como destino de retirada.', - 'deposit_src_iban_exists' => 'Este IBAN de cuenta de origen ya está siendo utilizado por una cuenta de activos o pasivos y no puede utilizarse como fuente de depósito.', + 'withdrawal_dest_iban_exists' => 'Este IBAN de cuenta de destino ya está siendo utilizada por una cuenta de activos o pasivos y no se puede utilizar como destino de retirada.', + 'deposit_src_iban_exists' => 'Este IBAN de cuenta de origen ya está siendo utilizado por una cuenta de activos o pasivos y no puede utilizarse como fuente de depósito.', - 'reconciliation_source_bad_data' => 'No se ha podido encontrar una cuenta de reconciliación válida al buscar por ID ":id" o nombre ":name".', + 'reconciliation_source_bad_data' => 'No se ha podido encontrar una cuenta de reconciliación válida al buscar por ID ":id" o nombre ":name".', - 'generic_source_bad_data' => '[e] No se pudo encontrar una cuenta de origen válida al buscar por ID ":id" o nombre ":name".', + 'generic_source_bad_data' => '[e] No se pudo encontrar una cuenta de origen válida al buscar por ID ":id" o nombre ":name".', - 'deposit_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido y/o nombre de cuenta de origen válido para continuar.', - 'deposit_source_bad_data' => '[b] No se pudo encontrar una cuenta de origen válida al buscar por ID ":id" o nombre ":name".', - 'deposit_dest_need_data' => '[b] Necesita obtener un ID de cuenta de destino válido y/o un nombre de cuenta de destino válido para continuar.', - 'deposit_dest_bad_data' => 'No se pudo encontrar una cuenta de destino válida buscando ID ":id" o nombre ":name".', - 'deposit_dest_wrong_type' => 'La cuenta de destino enviada no es del tipo correcto.', + 'deposit_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido y/o nombre de cuenta de origen válido para continuar.', + 'deposit_source_bad_data' => '[b] No se pudo encontrar una cuenta de origen válida al buscar por ID ":id" o nombre ":name".', + 'deposit_dest_need_data' => '[b] Necesita obtener un ID de cuenta de destino válido y/o un nombre de cuenta de destino válido para continuar.', + 'deposit_dest_bad_data' => 'No se pudo encontrar una cuenta de destino válida buscando ID ":id" o nombre ":name".', + 'deposit_dest_wrong_type' => 'La cuenta de destino enviada no es del tipo correcto.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido y/o nombre de cuenta de origen válido para continuar.', + 'transfer_source_bad_data' => '[c] No se pudo encontrar una cuenta de origen válida al buscar por ID ":id" o nombre ":name".', + 'transfer_dest_need_data' => '[c] Necesita obtener un ID de cuenta de destino válido y/o un nombre de cuenta de destino válido para continuar.', + 'transfer_dest_bad_data' => 'No se pudo encontrar una cuenta de destino válida buscando ID ":id" o nombre ":name".', + 'need_id_in_edit' => 'Cada división debe tener transaction_journal_id (ID válido o 0).', - 'transfer_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido y/o nombre de cuenta de origen válido para continuar.', - 'transfer_source_bad_data' => '[c] No se pudo encontrar una cuenta de origen válida al buscar por ID ":id" o nombre ":name".', - 'transfer_dest_need_data' => '[c] Necesita obtener un ID de cuenta de destino válido y/o un nombre de cuenta de destino válido para continuar.', - 'transfer_dest_bad_data' => 'No se pudo encontrar una cuenta de destino válida buscando ID ":id" o nombre ":name".', - 'need_id_in_edit' => 'Cada división debe tener transaction_journal_id (ID válido o 0).', + 'ob_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido y/o nombre de cuenta de origen válido para continuar.', + 'lc_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido para continuar.', + 'ob_dest_need_data' => '[d] Necesita obtener un ID de cuenta de destino válido y/o un nombre de cuenta de destino válido para continuar.', + 'ob_dest_bad_data' => 'No se pudo encontrar una cuenta de destino válida buscando ID ":id" o nombre ":name".', + 'reconciliation_either_account' => 'Para enviar una reconciliación, debe enviar una cuenta de origen o de destino. Ni ambas ni ninguna de las dos.', - 'ob_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido y/o nombre de cuenta de origen válido para continuar.', - 'lc_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido para continuar.', - 'ob_dest_need_data' => '[d] Necesita obtener un ID de cuenta de destino válido y/o un nombre de cuenta de destino válido para continuar.', - 'ob_dest_bad_data' => 'No se pudo encontrar una cuenta de destino válida buscando ID ":id" o nombre ":name".', - 'reconciliation_either_account' => 'Para enviar una reconciliación, debe enviar una cuenta de origen o de destino. Ni ambas ni ninguna de las dos.', + 'generic_invalid_source' => 'No puedes usar esta cuenta como cuenta de origen.', + 'generic_invalid_destination' => 'No puede usar esta cuenta como cuenta de destino.', - 'generic_invalid_source' => 'No puedes usar esta cuenta como cuenta de origen.', - 'generic_invalid_destination' => 'No puede usar esta cuenta como cuenta de destino.', + 'generic_no_source' => 'Debe indicar la información de la cuenta de origen o un número de registro de transacción.', + 'generic_no_destination' => 'Debe indicar la información de la cuenta de destino o un número de registro de transacción.', - 'generic_no_source' => 'Debe indicar la información de la cuenta de origen o un número de registro de transacción.', - 'generic_no_destination' => 'Debe indicar la información de la cuenta de destino o un número de registro de transacción.', - - 'gte.numeric' => ':attribute debe ser mayor o igual que :value.', - 'gt.numeric' => 'El :attribute debe ser mayor que :value.', - 'gte.file' => 'El :attribute debe ser mayor o igual a :value kilobytes.', - 'gte.string' => ':attribute debe tener :value caracteres o más.', - 'gte.array' => ':attribute debe tener :value objetos o más.', + 'gte.numeric' => ':attribute debe ser mayor o igual que :value.', + 'gt.numeric' => 'El :attribute debe ser mayor que :value.', + 'gte.file' => 'El :attribute debe ser mayor o igual a :value kilobytes.', + 'gte.string' => ':attribute debe tener :value caracteres o más.', + 'gte.array' => ':attribute debe tener :value objetos o más.', 'amount_required_for_auto_budget' => 'Se requiere la cantidad.', 'auto_budget_amount_positive' => 'La cantidad debe ser mayor a cero.', + 'auto_budget_period_mandatory' => 'El período del autopresupuesto es un campo obligatorio.', // no access to administration: diff --git a/resources/lang/fi_FI/api.php b/resources/lang/fi_FI/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/fi_FI/api.php +++ b/resources/lang/fi_FI/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/fi_FI/auth.php b/resources/lang/fi_FI/auth.php index 595e42f09b..c7069139fe 100644 --- a/resources/lang/fi_FI/auth.php +++ b/resources/lang/fi_FI/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Näitä tunnuksia ei löydy järjestelmästä.', 'throttle' => 'Liian monta epäonnistunutta kirjautumisyritystä. Yritä uudestaan :seconds sekunnin kuluttua.', diff --git a/resources/lang/fi_FI/breadcrumbs.php b/resources/lang/fi_FI/breadcrumbs.php index ff909679d8..61b08389c7 100644 --- a/resources/lang/fi_FI/breadcrumbs.php +++ b/resources/lang/fi_FI/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Etusivu', - 'budgets' => 'Budjetit', - 'subscriptions' => 'Tilaukset', - 'transactions' => 'Tapahtumat', - 'title_expenses' => 'Kustannukset', - 'title_withdrawal' => 'Kustannukset', - 'title_revenue' => 'Tuotto / ansio', - 'title_deposit' => 'Tuotto / ansio', - 'title_transfer' => 'Tilisiirrot', - 'title_transfers' => 'Tilisiirrot', - 'edit_currency' => 'Muokkaa valuuttaa ":name"', - 'delete_currency' => 'Poista valuutta ":name"', - 'newPiggyBank' => 'Luo uusi säästöpossu', - 'edit_piggyBank' => 'Muokkaa säästöpossua ":name"', - 'preferences' => 'Asetukset', - 'profile' => 'Käyttäjäprofiili', - 'accounts' => 'Tilit', - 'changePassword' => 'Vaihda salasanasi', - 'change_email' => 'Muuta sähköpostiosoitetta', - 'bills' => 'Laskut', - 'newBill' => 'Uusi lasku', - 'edit_bill' => 'Muokkaa laskua ":name"', - 'delete_bill' => 'Poista lasku ":name"', - 'reports' => 'Raportit', - 'search_result' => 'Hakutulokset kyselylle ":query"', - 'withdrawal_list' => 'Kustannukset', - 'Withdrawal_list' => 'Kustannukset', - 'deposit_list' => 'Tuotto, ansio ja talletukset', - 'transfer_list' => 'Tilisiirrot', - 'transfers_list' => 'Tilisiirrot', + 'home' => 'Etusivu', + 'budgets' => 'Budjetit', + 'subscriptions' => 'Tilaukset', + 'transactions' => 'Tapahtumat', + 'title_expenses' => 'Kustannukset', + 'title_withdrawal' => 'Kustannukset', + 'title_revenue' => 'Tuotto / ansio', + 'title_deposit' => 'Tuotto / ansio', + 'title_transfer' => 'Tilisiirrot', + 'title_transfers' => 'Tilisiirrot', + 'edit_currency' => 'Muokkaa valuuttaa ":name"', + 'delete_currency' => 'Poista valuutta ":name"', + 'newPiggyBank' => 'Luo uusi säästöpossu', + 'edit_piggyBank' => 'Muokkaa säästöpossua ":name"', + 'preferences' => 'Asetukset', + 'profile' => 'Käyttäjäprofiili', + 'accounts' => 'Tilit', + 'changePassword' => 'Vaihda salasanasi', + 'change_email' => 'Muuta sähköpostiosoitetta', + 'bills' => 'Laskut', + 'newBill' => 'Uusi lasku', + 'edit_bill' => 'Muokkaa laskua ":name"', + 'delete_bill' => 'Poista lasku ":name"', + 'reports' => 'Raportit', + 'search_result' => 'Hakutulokset kyselylle ":query"', + 'withdrawal_list' => 'Kustannukset', + 'Withdrawal_list' => 'Kustannukset', + 'deposit_list' => 'Tuotto, ansio ja talletukset', + 'transfer_list' => 'Tilisiirrot', + 'transfers_list' => 'Tilisiirrot', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Täsmäytykset', 'create_withdrawal' => 'Luo uusi nosto', 'create_deposit' => 'Luo uusi talletus', diff --git a/resources/lang/fi_FI/components.php b/resources/lang/fi_FI/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/fi_FI/components.php +++ b/resources/lang/fi_FI/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/fi_FI/config.php b/resources/lang/fi_FI/config.php index 42e760cfe1..9520542434 100644 --- a/resources/lang/fi_FI/config.php +++ b/resources/lang/fi_FI/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'fi', - 'locale' => 'fi, Finnish, fi_FI.utf8, fi_FI.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'fi', + 'locale' => 'fi, Finnish, fi_FI.utf8, fi_FI.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMM, YYYY', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D MMM, YYYY', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'MMMM Do, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Viikko' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Viikko' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Maanantai', - 'dow_2' => 'Tiistai', - 'dow_3' => 'Keskiviikko', - 'dow_4' => 'Torstai', - 'dow_5' => 'Perjantai', - 'dow_6' => 'Lauantai', - 'dow_7' => 'Sunnuntai', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Maanantai', + 'dow_2' => 'Tiistai', + 'dow_3' => 'Keskiviikko', + 'dow_4' => 'Torstai', + 'dow_5' => 'Perjantai', + 'dow_6' => 'Lauantai', + 'dow_7' => 'Sunnuntai', ]; /* diff --git a/resources/lang/fi_FI/demo.php b/resources/lang/fi_FI/demo.php index 0481ba053e..341ca8e070 100644 --- a/resources/lang/fi_FI/demo.php +++ b/resources/lang/fi_FI/demo.php @@ -31,14 +31,13 @@ * */ - declare(strict_types=1); return [ 'no_demo_text' => 'Tälle sivulle ei valitettavasti ole esittelytekstiä.', 'see_help_icon' => 'Oikeassa yläkulmassa oleva -kuvake saattaa kuitenkin kertoa sinulle lisää.', 'index' => 'Tervetuloa Firefly III:een! Tällä sivulla näet nopean yleiskatsauksen taloudestasi. Lisätietoja tileistä löydät sivuilta → Omaisuustilit, ja tietysti Budjetit sekä Raportit. Tai vain katsele ympärillesi ja katso mihin päädyt.', - 'accounts-index' => 'Omaisuustilit ovat henkilökohtaisia ​​pankkitilejäsi. Kulutustilit ovat niitä tilejä joihin kulutat rahaa, kuten kaupat sekä kaverit. Tuottotilit ovat tilejä joille saat rahaa jostain tulonlähteestä, kuten esimerkiksi työpaikaltasi tai valtiolta. Lainat ovat velkojasi ja lainojasi, kuten vanhoja luottokortti- tai opintolainoja. Tällä sivulla voit muokata tai poistaa niitä.', + 'accounts-index' => "Omaisuustilit ovat henkilökohtaisia \u{200b}\u{200b}pankkitilejäsi. Kulutustilit ovat niitä tilejä joihin kulutat rahaa, kuten kaupat sekä kaverit. Tuottotilit ovat tilejä joille saat rahaa jostain tulonlähteestä, kuten esimerkiksi työpaikaltasi tai valtiolta. Lainat ovat velkojasi ja lainojasi, kuten vanhoja luottokortti- tai opintolainoja. Tällä sivulla voit muokata tai poistaa niitä.", 'budgets-index' => 'Tällä sivullä on budjettiesi yleiskatsaus. Yläpalkki näyttää summan, joka sinulla on käytettävissä budjetoitavaksi. Tätä voidaan mukauttaa mihin tahansa ajanjaksoon napsauttamalla oikealla olevaa summaa. Oikeasti käyttämäsi summa näkyy alla olevassa palkissa. Alla ovat kustannukset budjettikohtaisesti ja niihin budjetoidut summat.', 'reports-index-start' => 'Firefly III tukee monentyyppisiä raportteja. Lue niistä napsauttamalla -kuvaketta oikeassa yläkulmassa.', 'reports-index-examples' => 'Muista tutustua näihin esimerkkeihin: kuukausittainen taloudellinen katsaus, vuosittainen taloudellinen katsaus ja budjetin yleiskatsaus.', diff --git a/resources/lang/fi_FI/email.php b/resources/lang/fi_FI/email.php index 32e975fa73..f992c48b2b 100644 --- a/resources/lang/fi_FI/email.php +++ b/resources/lang/fi_FI/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Testiviesti Firefly III applikaatioltasi', 'admin_test_body' => 'Tämä on testiviesti Firefly III instanssiltasi. Se lähetettiin osoitteeseen :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'An invitation has been created', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Salasanan nollaus:', 'registered_doc_link' => 'Dokumentaatio:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Uusi Firefly III versio on saatavilla', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Jos haluat, voit myös avata uuden tiketin osoitteessa https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Täydellinen stack trace:', 'error_headers' => 'Seuraavat otsikot voivat myös olla merkityksellisiä:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III on luonut uuden tapahtuman|Firefly III on luonut :count uutta tapahtumaa', 'new_journals_header' => 'Firefly III on luonut tapahtuman sinulle. Löydät sen Firefly III -asennuksestasi:|Firefly III on luonut sinulle :count tapahtumaa. Löydät ne Firefly III -asennuksestasi:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Laskusi **":name"** on määrä päättyä :date, eli **TÄNÄÄN!**', 'bill_warning_extension_date_zero' => 'Laskusi **":name"** toistokertoja on määrä joko jatkaa tai peruuttaa :date. Eli **TÄNÄÄN!**', 'bill_warning_please_action' => 'Suorita asianmukaiset toimet, ole hyvä.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/fi_FI/errors.php b/resources/lang/fi_FI/errors.php index 2242c03adf..2d86fc12a6 100644 --- a/resources/lang/fi_FI/errors.php +++ b/resources/lang/fi_FI/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Pinojäljitys', 'more_info' => 'Lisää tietoja', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Kerää lisätietoja storage/logs hakemistosta, josta löydät lokitiedostoja. Jos käytät Dockeria, käytä komentoa docker logs -f [container].', - 'collect_info_more' => 'Voit lukea lisää virhetietojen keräämisestä FAQ:sta.', - 'github_help' => 'Hanki apua GitHubista', - 'github_instructions' => 'Olet enemmän kuin tervetullut avaamaan uuden tiketin GitHubissa.', - 'use_search' => 'Käytä hakua!', - 'include_info' => 'Sisällytä tiedot tältä vianjäljityssivulta.', - 'tell_more' => 'Kerro meille enemmän kuin "se sanoo Whoops!"', - 'include_logs' => 'Sisällytä virhelokit (katso yllä).', - 'what_did_you_do' => 'Kerro meille mitä olit tekemässä.', - 'offline_header' => 'Olet luultavasti offline-tilassa', - 'offline_unreachable' => 'Firefly III ei ole tavoitettavissa. Laitteesi ei ole tällä hetkellä verkossa tai palvelin ei toimi.', - 'offline_github' => 'Jos olet varma, että sekä laitteesi että palvelin ovat verkossa, avaa tiketti GitHub:issa.', - + 'collect_info' => 'Kerää lisätietoja storage/logs hakemistosta, josta löydät lokitiedostoja. Jos käytät Dockeria, käytä komentoa docker logs -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Hanki apua GitHubista', + 'github_instructions' => 'Olet enemmän kuin tervetullut avaamaan uuden tiketin GitHubissa.', + 'use_search' => 'Käytä hakua!', + 'include_info' => 'Sisällytä tiedot tältä vianjäljityssivulta.', + 'tell_more' => 'Kerro meille enemmän kuin "se sanoo Whoops!"', + 'include_logs' => 'Sisällytä virhelokit (katso yllä).', + 'what_did_you_do' => 'Kerro meille mitä olit tekemässä.', + 'offline_header' => 'Olet luultavasti offline-tilassa', + 'offline_unreachable' => 'Firefly III ei ole tavoitettavissa. Laitteesi ei ole tällä hetkellä verkossa tai palvelin ei toimi.', + 'offline_github' => 'Jos olet varma, että sekä laitteesi että palvelin ovat verkossa, avaa tiketti GitHub:issa.', ]; diff --git a/resources/lang/fi_FI/firefly.php b/resources/lang/fi_FI/firefly.php index 42245483d9..2ffb5de7f2 100644 --- a/resources/lang/fi_FI/firefly.php +++ b/resources/lang/fi_FI/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Sulje', - 'actions' => 'Toiminnot', - 'edit' => 'Muokkaa', - 'delete' => 'Poista', - 'split' => 'Jaa', - 'single_split' => 'Jako', - 'clone' => 'Kopioi', - 'confirm_action' => 'Vahvista toiminto', - 'last_seven_days' => 'Viimeiset 7 päivää', - 'last_thirty_days' => 'Viimeiset 30 päivää', - 'last_180_days' => 'Viimeiset 180 päivää', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'Vuoden alusta', - 'welcome_back' => 'Mitä kuuluu?', - 'everything' => 'Kaikki', - 'today' => 'tänään', - 'customRange' => 'Muokattu jakso', - 'date_range' => 'Ajanjakso', - 'apply' => 'Käytä', - 'select_date' => 'Valitse päivämäärä ...', - 'cancel' => 'Peruuta', - 'from' => 'Lähettäjä', - 'to' => 'Saaja', - 'structure' => 'Rakenne', - 'help_translating' => 'Tämä opasteteksti ei ole vielä saatavilla Suomeksi. Haluatko auttaa käännöstyössä?', - 'showEverything' => 'Näytä kaikki', - 'never' => 'Ei koskaan', - 'no_results_for_empty_search' => 'Hakusi oli tyhjä, joten mitään ei löytynyt.', - 'removed_amount' => 'Poistettiin :amount', - 'added_amount' => 'Lisättiin :amount', - 'asset_account_role_help' => 'Kaikki valinnoistasi seuraavat lisäoptiot voidaan asettaa myöhemmin.', - 'Opening balance' => 'Alkusaldo', - 'create_new_stuff' => 'Luo uusia juttuja', - 'new_withdrawal' => 'Uusi nosto', - 'create_new_transaction' => 'Luo uusi tapahtuma', - 'sidebar_frontpage_create' => 'Luo', - 'new_transaction' => 'Uusi tapahtuma', - 'no_rules_for_bill' => 'Tälle laskulle ei ole lisätty yhtään sääntöä.', - 'go_to_asset_accounts' => 'Tarkastele omaisuustilejäsi', - 'go_to_budgets' => 'Avaa omat budjetit', - 'go_to_withdrawals' => 'Siirry sinun nostoihisi', - 'clones_journal_x' => 'Tämä on kopio tapahtumasta ":description" (#:id)', - 'go_to_categories' => 'Avaa omat kategoriat', - 'go_to_bills' => 'Avaa omat laskut', - 'go_to_expense_accounts' => 'Tarkastele kulutustilejäsi', - 'go_to_revenue_accounts' => 'Tarkastele tuottotilejäsi', - 'go_to_piggies' => 'Tarkastele säästöpossujasi', - 'new_deposit' => 'Uusi talletus', - 'new_transfer' => 'Uusi siirto', - 'new_transfers' => 'Uusi siirto', - 'new_asset_account' => 'Uusi omaisuustili', - 'new_expense_account' => 'Uusi kulutustili', - 'new_revenue_account' => 'Uusi tuottotili', - 'new_liabilities_account' => 'Uusi laina', - 'new_budget' => 'Uusi budjetti', - 'new_bill' => 'Uusi lasku', - 'block_account_logout' => 'Sinut on kirjattu ulos. Estetyt käyttäjät eivät pysty käyttämään tätä sivustoa. Rekisteröidyitkö oikealla sähköpostiosoitteella?', - 'flash_success' => 'Valmista tuli!', - 'flash_info' => 'Viesti', - 'flash_warning' => 'Varoitus!', - 'flash_error' => 'Virhe!', - 'flash_danger' => 'Vaara!', - 'flash_info_multiple' => 'Sinulle on yksi viesti|Sinulle on :count viestiä', - 'flash_error_multiple' => 'On tapahtunut virhe|On tapahtunut :count virhettä', - 'net_worth' => 'Varallisuus', - 'help_for_this_page' => 'Opastus tälle sivulle', - 'help_for_this_page_body' => 'Löydät lisätietoja tästä sivusta dokumentaatiosta.', - 'two_factor_welcome' => 'Tervehdys!', - 'two_factor_enter_code' => 'Jatkaaksesi, anna kaksivaiheisen tunnistautumisen koodi. Tunnistautumisohjelmasi voi luoda sen sinulle.', - 'two_factor_code_here' => 'Kirjoita koodi tähän', - 'two_factor_title' => 'Kaksivaiheinen tunnistautuminen', - 'authenticate' => 'Tunnistaudu', - 'two_factor_forgot_title' => 'Kaksivaiheisen tunnistuksen tiedot ovat hävinneet', - 'two_factor_forgot' => 'Unohdin kaksivaiheisen tunnistusjuttuni.', - 'two_factor_lost_header' => 'Unohdit kaksivaiheisen tunnistuksen koodisi?', - 'two_factor_lost_intro' => 'Jos olet hävittänyt myös varakoodisi, onnesi on kääntynyt. Tätä et ikävä kyllä pysty korjaamaan selaimella. Sinulla on nyt kaksi vaihtoehtoa.', - 'two_factor_lost_fix_self' => 'Jos ajat omaa Firefly III-instanssiasi, lue tämä merkintä UKK:ssa.', - 'two_factor_lost_fix_owner' => 'Muussa tapauksessa, ota yhteyttä ylläpitäjään, :site_owner ja pyydä että kaksivaiheinen tunnistautumisesi nollataan.', - 'mfa_backup_code' => 'Olet käyttänyt varakoodin kirjautuessasi Firefly III:een. Varakoodi on kertakäyttöinen, joten muista merkitä se käytetyksi.', - 'pref_two_factor_new_backup_codes' => 'Luo uudet varmistuskoodit', - 'pref_two_factor_backup_code_count' => 'Sinulla on :count voimassa oleva varmuuskopiokoodi.|Sinulla on :count voimassa olevaa varmuuskopiokoodia.', - '2fa_i_have_them' => 'Tallensin ne!', - 'warning_much_data' => ':days päivän tietojen lataus saattaa kestää jonkin aikaa.', - 'registered' => 'Rekisteröitymisesi onnistui!', - 'Default asset account' => 'Oletusomaisuustili', - 'no_budget_pointer' => 'Sinulla ei näytä olevan vielä budjetteja. Sinun pitäisi luoda joitakin budjetit-sivulla. Budjetit auttavat sinua pitämään kirjaa kuluista.', - 'no_bill_pointer' => 'Sinulla ei näytä olevan vielä laskuja. Sinun pitäisi luoda joitakin laskut-sivulla. Laskut auttavat sinua pitämään kirjaa kuluista.', - 'Savings account' => 'Säästötili', - 'Credit card' => 'Luottokortti', - 'source_accounts' => 'Lähdetili|Lähdetilit', - 'destination_accounts' => 'Kohdetili|Kohdetilit', - 'user_id_is' => 'Käyttäjätunnuksesi on :user', - 'field_supports_markdown' => 'Tämä kenttä tukee Markdownia.', - 'need_more_help' => 'Jos tarvitset lisäopastusta Firefly III:n käyttöön, avaa tiketti Githubissa (englanniksi).', - 'reenable_intro_text' => 'Täältä voit kytkeä esittelytoiminnon uudelleen päälle.', - 'intro_boxes_after_refresh' => 'Esittelytekstit ilmestyvät jälleen kun päivität tämän sivun.', - 'show_all_no_filter' => 'Näytä kaikki tapahtumat ryhmittelemättä niitä päivämäärittäin.', - 'expenses_by_category' => 'Kustannukset kategorioittain', - 'expenses_by_budget' => 'Kustannukset budjeteittain', - 'income_by_category' => 'Tulot kategorioittain', - 'expenses_by_asset_account' => 'Kulut omaisuustileittäin', - 'expenses_by_expense_account' => 'Kulut kulutileittäin', - 'cannot_redirect_to_account' => 'Firefly III ei pysty ohjaamaan sinua oikealle sivulle. Pahoittelut.', - 'sum_of_expenses' => 'Kulut yhteensä', - 'sum_of_income' => 'Tulot yhteensä', - 'liabilities' => 'Lainat', - 'spent_in_specific_budget' => 'Kulutettu budjetista ":budget"', - 'spent_in_specific_double' => 'Kulutettu tililtä ":account"', - 'earned_in_specific_double' => 'Tulot tilillä ":account"', - 'source_account' => 'Lähdetili', - 'source_account_reconciliation' => 'Et voi muokata täsmäytystapahtuman lähdetiliä.', - 'destination_account' => 'Kohdetili', - 'destination_account_reconciliation' => 'Et voi muokata täsmäytystapahtuman kohdetiliä.', - 'sum_of_expenses_in_budget' => 'Kulutettu yhteensä budjetista ":budget"', - 'left_in_budget_limit' => 'Budjetissa jäljellä', - 'current_period' => 'Nykyinen jakso', - 'show_the_current_period_and_overview' => 'Näytä nykyinen jakso sekä yhteenveto', - 'pref_languages_locale' => 'Jotta muut kielet kuin Englanti toimisivat oikein, käyttöjärjestelmässäsi täytyy olla myös vastaavat kieliasetukset. Jos näitä ei ole, valuuttatiedot, päivämäärät ja summat voivat näkyä väärin.', - 'budget_in_period' => 'Kaikki tapahtumat budjetissa ":name" välillä :start ja :end valuutassa :currency', - 'chart_budget_in_period' => 'Kuvaaja kaikista tapahtumista budjetissa ":name" välillä :start ja :end valuutassa :currency', - 'chart_budget_in_period_only_currency' => 'Budjetoitu summa oli merkitty valuutassa :currency, joten tämä kuvaaja näyttää tapahtumat ainoastaan samassa valuutassa :currency.', - 'chart_account_in_period' => 'Kuvaaja kaikista tapahtumista tilillä ":name" (:balance) välillä :start ja :end', - 'chart_category_in_period' => 'Kuvaaja kaikista tapahtumista kategoriassa ":name" välillä :start ja :end', - 'chart_category_all' => 'Kuvaaja kaikista tapahtumista kategoriassa ":name"', - 'clone_withdrawal' => 'Kopioi tämä nosto', - 'clone_deposit' => 'Kopioi tämä talletus', - 'clone_transfer' => 'Kopioi tämä siirto', - 'multi_select_no_selection' => 'Ei valintaa', - 'multi_select_select_all' => 'Valitse kaikki', - 'multi_select_n_selected' => 'valittu', - 'multi_select_all_selected' => 'Kaikki valitut', - 'multi_select_filter_placeholder' => 'Etsi ...', - 'intro_next_label' => 'Seuraava', - 'intro_prev_label' => 'Edellinen', - 'intro_skip_label' => 'Ohita', - 'intro_done_label' => 'Valmis', - 'between_dates_breadcrumb' => 'Välillä :start ja :end', - 'all_journals_without_budget' => 'Kaikki budjetoimattomat tapahtumat', - 'journals_without_budget' => 'Budjetoimattomat tapahtumat', - 'all_journals_without_category' => 'Kaikki tapahtumat ilman kategoriaa', - 'journals_without_category' => 'Tapahtumat ilman kategoriaa', - 'all_journals_for_account' => 'Kaikki tapahtumat tilillä :name', - 'chart_all_journals_for_account' => 'Kuvaaja kaikista tapahtumista tilillä :name', - 'journals_in_period_for_account' => 'Kaikki tapahtumat tilillä :name välillä :start ja :end', - 'journals_in_period_for_account_js' => 'Kaikki tapahtumat tilillä {title} välillä {start} ja {end}', - 'transferred' => 'Siirretty', - 'all_withdrawal' => 'Kaikki kustannukset', - 'all_transactions' => 'Kaikki tapahtumat', - 'title_withdrawal_between' => 'Kaikki kustannukset välillä :start ja :end', - 'all_deposit' => 'Kaikki tuotot', - 'title_deposit_between' => 'Kaikki tuotot välillä :start ja :end', - 'all_transfers' => 'Kaikki siirrot', - 'title_transfers_between' => 'Kaikki siirrot välillä :start ja :end', - 'all_transfer' => 'Kaikki siirrot', - 'all_journals_for_tag' => 'Kaikki tapahtumat tägillä ":tag"', - 'title_transfer_between' => 'Kaikki siirrot välillä :start ja :end', - 'all_journals_for_category' => 'Kaikki tapahtumat kategoriassa :name', - 'all_journals_for_budget' => 'Kaikki tapahtumat budjetissa :name', - 'chart_all_journals_for_budget' => 'Kuvaaja kaikista tapahtumista budjetissa :name', - 'journals_in_period_for_category' => 'Kaikki tapahtumat kategoriassa :name välillä :start ja :end', - 'journals_in_period_for_tag' => 'Kaikki tapahtumat tägillä :tag välillä :start ja :end', - 'not_available_demo_user' => 'Tämä toiminto ei ole käytössä esittelytilassa.', - 'exchange_rate_instructions' => 'Voit lisätä tapahtumia tilille "@name" ainoastaan valuutassa @native_currency. Jos haluat käyttää valuuttaa @foreign_currency, täytä myös summa valuutassa @native_currency:', - 'transfer_exchange_rate_instructions' => 'Lähdetili "@source_name" hyväksyy tapahtumia ainoastaan valuutassa @source_currency. Kohdetili "@dest_name" hyväksyy tapahtumia ainoastaan valuutassa @dest_currency. Siirretty summa täytyy syöttää oikein - molemmilla valuutoilla.', - 'transaction_data' => 'Tapahtuman tiedot', - 'invalid_server_configuration' => 'Serverin asetukset eivät ole kunnossa', - 'invalid_locale_settings' => 'Firefly III ei pysty näyttämään rahasummia oikein koska tarvittavat tiedostot puuttuvat serveriltä. Täältä löydät ohjeet asian korjaamiseksi.', - 'quickswitch' => 'Pikakytkin', - 'sign_in_to_start' => 'Aloita istunto kirjautumalla sisään', - 'sign_in' => 'Kirjaudu sisään', - 'register_new_account' => 'Rekisteröi uusi käyttäjätili', - 'forgot_my_password' => 'Unohdin salasanani', - 'problems_with_input' => 'Antamiesi tietojen kanssa oli ongelmia.', - 'reset_password' => 'Nollaa salasanasi', - 'button_reset_password' => 'Nollaa salasana', - 'reset_button' => 'Nollaa', - 'want_to_login' => 'Haluan kirjautua', - 'login_page_title' => 'Kirjaudu Firefly III:een', - 'register_page_title' => 'Rekisteröidy Firefly III:een', - 'forgot_pw_page_title' => 'Unohdit salasanasi Firefly III:een', - 'reset_pw_page_title' => 'Nollaa salasanasi Firefly III:een', - 'cannot_reset_demo_user' => 'Demokäyttäjän salasanaa ei voi nollata.', - 'no_att_demo_user' => 'Demokäyttäjä ei voi lähettää liitteitä.', - 'button_register' => 'Rekisteröidy', - 'authorization' => 'Valtuutus', - 'active_bills_only' => 'vain aktiiviset laskut', - 'active_bills_only_total' => 'kaikki aktiiviset laskut', - 'active_exp_bills_only' => 'vain aktiiviset ja odotettavissa olevat laskut', - 'active_exp_bills_only_total' => 'kaikki aktiiviset odotettavissa olevat laskut', - 'per_period_sum_1D' => 'Odotettavissa olevat päivittäiset kulut', - 'per_period_sum_1W' => 'Odotettavissa olevat viikottaiset kulut', - 'per_period_sum_1M' => 'Odotettavissa olevat kuukausittaiset kulut', - 'per_period_sum_3M' => 'Odotettavissa olevat neljännesvuosittaiset kustannukset', - 'per_period_sum_6M' => 'Odotettavissa olevat puolivuotiskulut', - 'per_period_sum_1Y' => 'Odotettavissa olevat vuotuiset kulut', - 'average_per_bill' => 'keskiarvo laskuittain', - 'expected_total' => 'odotettavissa yhteensä', - 'reconciliation_account_name' => ':name täsmäytys (:currency)', - 'saved' => 'Tallennettu', - 'advanced_options' => 'Lisävalinnat', - 'advanced_options_explain' => 'Joillakin Firefly III:n sivuilla on lisäasetukset piilossa tämän painikkeen takana. Tällä sivulla täällä ei ole mitään hienoa, mutta tutustu muihin!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Sulje', + 'actions' => 'Toiminnot', + 'edit' => 'Muokkaa', + 'delete' => 'Poista', + 'split' => 'Jaa', + 'single_split' => 'Jako', + 'clone' => 'Kopioi', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Vahvista toiminto', + 'last_seven_days' => 'Viimeiset 7 päivää', + 'last_thirty_days' => 'Viimeiset 30 päivää', + 'last_180_days' => 'Viimeiset 180 päivää', + 'month_to_date' => 'Month to date', + 'year_to_date' => 'Year to date', + 'YTD' => 'Vuoden alusta', + 'welcome_back' => 'Mitä kuuluu?', + 'everything' => 'Kaikki', + 'today' => 'tänään', + 'customRange' => 'Muokattu jakso', + 'date_range' => 'Ajanjakso', + 'apply' => 'Käytä', + 'select_date' => 'Valitse päivämäärä ...', + 'cancel' => 'Peruuta', + 'from' => 'Lähettäjä', + 'to' => 'Saaja', + 'structure' => 'Rakenne', + 'help_translating' => 'Tämä opasteteksti ei ole vielä saatavilla Suomeksi. Haluatko auttaa käännöstyössä?', + 'showEverything' => 'Näytä kaikki', + 'never' => 'Ei koskaan', + 'no_results_for_empty_search' => 'Hakusi oli tyhjä, joten mitään ei löytynyt.', + 'removed_amount' => 'Poistettiin :amount', + 'added_amount' => 'Lisättiin :amount', + 'asset_account_role_help' => 'Kaikki valinnoistasi seuraavat lisäoptiot voidaan asettaa myöhemmin.', + 'Opening balance' => 'Alkusaldo', + 'create_new_stuff' => 'Luo uusia juttuja', + 'new_withdrawal' => 'Uusi nosto', + 'create_new_transaction' => 'Luo uusi tapahtuma', + 'sidebar_frontpage_create' => 'Luo', + 'new_transaction' => 'Uusi tapahtuma', + 'no_rules_for_bill' => 'Tälle laskulle ei ole lisätty yhtään sääntöä.', + 'go_to_asset_accounts' => 'Tarkastele omaisuustilejäsi', + 'go_to_budgets' => 'Avaa omat budjetit', + 'go_to_withdrawals' => 'Siirry sinun nostoihisi', + 'clones_journal_x' => 'Tämä on kopio tapahtumasta ":description" (#:id)', + 'go_to_categories' => 'Avaa omat kategoriat', + 'go_to_bills' => 'Avaa omat laskut', + 'go_to_expense_accounts' => 'Tarkastele kulutustilejäsi', + 'go_to_revenue_accounts' => 'Tarkastele tuottotilejäsi', + 'go_to_piggies' => 'Tarkastele säästöpossujasi', + 'new_deposit' => 'Uusi talletus', + 'new_transfer' => 'Uusi siirto', + 'new_transfers' => 'Uusi siirto', + 'new_asset_account' => 'Uusi omaisuustili', + 'new_expense_account' => 'Uusi kulutustili', + 'new_revenue_account' => 'Uusi tuottotili', + 'new_liabilities_account' => 'Uusi laina', + 'new_budget' => 'Uusi budjetti', + 'new_bill' => 'Uusi lasku', + 'block_account_logout' => 'Sinut on kirjattu ulos. Estetyt käyttäjät eivät pysty käyttämään tätä sivustoa. Rekisteröidyitkö oikealla sähköpostiosoitteella?', + 'flash_success' => 'Valmista tuli!', + 'flash_info' => 'Viesti', + 'flash_warning' => 'Varoitus!', + 'flash_error' => 'Virhe!', + 'flash_danger' => 'Vaara!', + 'flash_info_multiple' => 'Sinulle on yksi viesti|Sinulle on :count viestiä', + 'flash_error_multiple' => 'On tapahtunut virhe|On tapahtunut :count virhettä', + 'net_worth' => 'Varallisuus', + 'help_for_this_page' => 'Opastus tälle sivulle', + 'help_for_this_page_body' => 'Löydät lisätietoja tästä sivusta dokumentaatiosta.', + 'two_factor_welcome' => 'Tervehdys!', + 'two_factor_enter_code' => 'Jatkaaksesi, anna kaksivaiheisen tunnistautumisen koodi. Tunnistautumisohjelmasi voi luoda sen sinulle.', + 'two_factor_code_here' => 'Kirjoita koodi tähän', + 'two_factor_title' => 'Kaksivaiheinen tunnistautuminen', + 'authenticate' => 'Tunnistaudu', + 'two_factor_forgot_title' => 'Kaksivaiheisen tunnistuksen tiedot ovat hävinneet', + 'two_factor_forgot' => 'Unohdin kaksivaiheisen tunnistusjuttuni.', + 'two_factor_lost_header' => 'Unohdit kaksivaiheisen tunnistuksen koodisi?', + 'two_factor_lost_intro' => 'Jos olet hävittänyt myös varakoodisi, onnesi on kääntynyt. Tätä et ikävä kyllä pysty korjaamaan selaimella. Sinulla on nyt kaksi vaihtoehtoa.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner ja pyydä että kaksivaiheinen tunnistautumisesi nollataan.', + 'mfa_backup_code' => 'Olet käyttänyt varakoodin kirjautuessasi Firefly III:een. Varakoodi on kertakäyttöinen, joten muista merkitä se käytetyksi.', + 'pref_two_factor_new_backup_codes' => 'Luo uudet varmistuskoodit', + 'pref_two_factor_backup_code_count' => 'Sinulla on :count voimassa oleva varmuuskopiokoodi.|Sinulla on :count voimassa olevaa varmuuskopiokoodia.', + '2fa_i_have_them' => 'Tallensin ne!', + 'warning_much_data' => ':days päivän tietojen lataus saattaa kestää jonkin aikaa.', + 'registered' => 'Rekisteröitymisesi onnistui!', + 'Default asset account' => 'Oletusomaisuustili', + 'no_budget_pointer' => 'Sinulla ei näytä olevan vielä budjetteja. Sinun pitäisi luoda joitakin budjetit-sivulla. Budjetit auttavat sinua pitämään kirjaa kuluista.', + 'no_bill_pointer' => 'Sinulla ei näytä olevan vielä laskuja. Sinun pitäisi luoda joitakin laskut-sivulla. Laskut auttavat sinua pitämään kirjaa kuluista.', + 'Savings account' => 'Säästötili', + 'Credit card' => 'Luottokortti', + 'source_accounts' => 'Lähdetili|Lähdetilit', + 'destination_accounts' => 'Kohdetili|Kohdetilit', + 'user_id_is' => 'Käyttäjätunnuksesi on :user', + 'field_supports_markdown' => 'Tämä kenttä tukee Markdownia.', + 'need_more_help' => 'Jos tarvitset lisäopastusta Firefly III:n käyttöön, avaa tiketti Githubissa (englanniksi).', + 'reenable_intro_text' => 'Täältä voit kytkeä esittelytoiminnon uudelleen päälle.', + 'intro_boxes_after_refresh' => 'Esittelytekstit ilmestyvät jälleen kun päivität tämän sivun.', + 'show_all_no_filter' => 'Näytä kaikki tapahtumat ryhmittelemättä niitä päivämäärittäin.', + 'expenses_by_category' => 'Kustannukset kategorioittain', + 'expenses_by_budget' => 'Kustannukset budjeteittain', + 'income_by_category' => 'Tulot kategorioittain', + 'expenses_by_asset_account' => 'Kulut omaisuustileittäin', + 'expenses_by_expense_account' => 'Kulut kulutileittäin', + 'cannot_redirect_to_account' => 'Firefly III ei pysty ohjaamaan sinua oikealle sivulle. Pahoittelut.', + 'sum_of_expenses' => 'Kulut yhteensä', + 'sum_of_income' => 'Tulot yhteensä', + 'liabilities' => 'Lainat', + 'spent_in_specific_budget' => 'Kulutettu budjetista ":budget"', + 'spent_in_specific_double' => 'Kulutettu tililtä ":account"', + 'earned_in_specific_double' => 'Tulot tilillä ":account"', + 'source_account' => 'Lähdetili', + 'source_account_reconciliation' => 'Et voi muokata täsmäytystapahtuman lähdetiliä.', + 'destination_account' => 'Kohdetili', + 'destination_account_reconciliation' => 'Et voi muokata täsmäytystapahtuman kohdetiliä.', + 'sum_of_expenses_in_budget' => 'Kulutettu yhteensä budjetista ":budget"', + 'left_in_budget_limit' => 'Budjetissa jäljellä', + 'current_period' => 'Nykyinen jakso', + 'show_the_current_period_and_overview' => 'Näytä nykyinen jakso sekä yhteenveto', + 'pref_languages_locale' => 'Jotta muut kielet kuin Englanti toimisivat oikein, käyttöjärjestelmässäsi täytyy olla myös vastaavat kieliasetukset. Jos näitä ei ole, valuuttatiedot, päivämäärät ja summat voivat näkyä väärin.', + 'budget_in_period' => 'Kaikki tapahtumat budjetissa ":name" välillä :start ja :end valuutassa :currency', + 'chart_budget_in_period' => 'Kuvaaja kaikista tapahtumista budjetissa ":name" välillä :start ja :end valuutassa :currency', + 'chart_budget_in_period_only_currency' => 'Budjetoitu summa oli merkitty valuutassa :currency, joten tämä kuvaaja näyttää tapahtumat ainoastaan samassa valuutassa :currency.', + 'chart_account_in_period' => 'Kuvaaja kaikista tapahtumista tilillä ":name" (:balance) välillä :start ja :end', + 'chart_category_in_period' => 'Kuvaaja kaikista tapahtumista kategoriassa ":name" välillä :start ja :end', + 'chart_category_all' => 'Kuvaaja kaikista tapahtumista kategoriassa ":name"', + 'clone_withdrawal' => 'Kopioi tämä nosto', + 'clone_deposit' => 'Kopioi tämä talletus', + 'clone_transfer' => 'Kopioi tämä siirto', + 'multi_select_no_selection' => 'Ei valintaa', + 'multi_select_select_all' => 'Valitse kaikki', + 'multi_select_n_selected' => 'valittu', + 'multi_select_all_selected' => 'Kaikki valitut', + 'multi_select_filter_placeholder' => 'Etsi ...', + 'intro_next_label' => 'Seuraava', + 'intro_prev_label' => 'Edellinen', + 'intro_skip_label' => 'Ohita', + 'intro_done_label' => 'Valmis', + 'between_dates_breadcrumb' => 'Välillä :start ja :end', + 'all_journals_without_budget' => 'Kaikki budjetoimattomat tapahtumat', + 'journals_without_budget' => 'Budjetoimattomat tapahtumat', + 'all_journals_without_category' => 'Kaikki tapahtumat ilman kategoriaa', + 'journals_without_category' => 'Tapahtumat ilman kategoriaa', + 'all_journals_for_account' => 'Kaikki tapahtumat tilillä :name', + 'chart_all_journals_for_account' => 'Kuvaaja kaikista tapahtumista tilillä :name', + 'journals_in_period_for_account' => 'Kaikki tapahtumat tilillä :name välillä :start ja :end', + 'journals_in_period_for_account_js' => 'Kaikki tapahtumat tilillä {title} välillä {start} ja {end}', + 'transferred' => 'Siirretty', + 'all_withdrawal' => 'Kaikki kustannukset', + 'all_transactions' => 'Kaikki tapahtumat', + 'title_withdrawal_between' => 'Kaikki kustannukset välillä :start ja :end', + 'all_deposit' => 'Kaikki tuotot', + 'title_deposit_between' => 'Kaikki tuotot välillä :start ja :end', + 'all_transfers' => 'Kaikki siirrot', + 'title_transfers_between' => 'Kaikki siirrot välillä :start ja :end', + 'all_transfer' => 'Kaikki siirrot', + 'all_journals_for_tag' => 'Kaikki tapahtumat tägillä ":tag"', + 'title_transfer_between' => 'Kaikki siirrot välillä :start ja :end', + 'all_journals_for_category' => 'Kaikki tapahtumat kategoriassa :name', + 'all_journals_for_budget' => 'Kaikki tapahtumat budjetissa :name', + 'chart_all_journals_for_budget' => 'Kuvaaja kaikista tapahtumista budjetissa :name', + 'journals_in_period_for_category' => 'Kaikki tapahtumat kategoriassa :name välillä :start ja :end', + 'journals_in_period_for_tag' => 'Kaikki tapahtumat tägillä :tag välillä :start ja :end', + 'not_available_demo_user' => 'Tämä toiminto ei ole käytössä esittelytilassa.', + 'exchange_rate_instructions' => 'Voit lisätä tapahtumia tilille "@name" ainoastaan valuutassa @native_currency. Jos haluat käyttää valuuttaa @foreign_currency, täytä myös summa valuutassa @native_currency:', + 'transfer_exchange_rate_instructions' => 'Lähdetili "@source_name" hyväksyy tapahtumia ainoastaan valuutassa @source_currency. Kohdetili "@dest_name" hyväksyy tapahtumia ainoastaan valuutassa @dest_currency. Siirretty summa täytyy syöttää oikein - molemmilla valuutoilla.', + 'transaction_data' => 'Tapahtuman tiedot', + 'invalid_server_configuration' => 'Serverin asetukset eivät ole kunnossa', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Pikakytkin', + 'sign_in_to_start' => 'Aloita istunto kirjautumalla sisään', + 'sign_in' => 'Kirjaudu sisään', + 'register_new_account' => 'Rekisteröi uusi käyttäjätili', + 'forgot_my_password' => 'Unohdin salasanani', + 'problems_with_input' => 'Antamiesi tietojen kanssa oli ongelmia.', + 'reset_password' => 'Nollaa salasanasi', + 'button_reset_password' => 'Nollaa salasana', + 'reset_button' => 'Nollaa', + 'want_to_login' => 'Haluan kirjautua', + 'login_page_title' => 'Kirjaudu Firefly III:een', + 'register_page_title' => 'Rekisteröidy Firefly III:een', + 'forgot_pw_page_title' => 'Unohdit salasanasi Firefly III:een', + 'reset_pw_page_title' => 'Nollaa salasanasi Firefly III:een', + 'cannot_reset_demo_user' => 'Demokäyttäjän salasanaa ei voi nollata.', + 'no_att_demo_user' => 'Demokäyttäjä ei voi lähettää liitteitä.', + 'button_register' => 'Rekisteröidy', + 'authorization' => 'Valtuutus', + 'active_bills_only' => 'vain aktiiviset laskut', + 'active_bills_only_total' => 'kaikki aktiiviset laskut', + 'active_exp_bills_only' => 'vain aktiiviset ja odotettavissa olevat laskut', + 'active_exp_bills_only_total' => 'kaikki aktiiviset odotettavissa olevat laskut', + 'per_period_sum_1D' => 'Odotettavissa olevat päivittäiset kulut', + 'per_period_sum_1W' => 'Odotettavissa olevat viikottaiset kulut', + 'per_period_sum_1M' => 'Odotettavissa olevat kuukausittaiset kulut', + 'per_period_sum_3M' => 'Odotettavissa olevat neljännesvuosittaiset kustannukset', + 'per_period_sum_6M' => 'Odotettavissa olevat puolivuotiskulut', + 'per_period_sum_1Y' => 'Odotettavissa olevat vuotuiset kulut', + 'average_per_bill' => 'keskiarvo laskuittain', + 'expected_total' => 'odotettavissa yhteensä', + 'reconciliation_account_name' => ':name täsmäytys (:currency)', + 'saved' => 'Tallennettu', + 'advanced_options' => 'Lisävalinnat', + 'advanced_options_explain' => 'Joillakin Firefly III:n sivuilla on lisäasetukset piilossa tämän painikkeen takana. Tällä sivulla täällä ei ole mitään hienoa, mutta tutustu muihin!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhookit', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhookit', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', + 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', + 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', + 'webhook_response_TRANSACTIONS' => 'Transaction details', + 'webhook_response_ACCOUNTS' => 'Account details', + 'webhook_response_none_NONE' => 'No details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspect', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => 'View message', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logs', + 'response' => 'Response', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Firefly III v:version Valtuutus Pyyntö', - 'authorization_request_intro' => 'Sovellus ":client" pyytää lupaa saada pääsy taloushallintoosi. Haluatko sallia :client pääsyn näihin tietoihin?', - 'authorization_request_site' => 'Sinut ohjataan uudelleen osoitteeseen :url joka sitten voi käyttää Firefly III -tietoja.', - 'authorization_request_invalid' => 'Tämä käyttöoikeuspyyntö on virheellinen. Ole hyvä äläkä koskaan enää seuraa tätä linkkiä.', - 'scopes_will_be_able' => 'Tämä sovellus voi:', - 'button_authorize' => 'Valtuuta', - 'none_in_select_list' => '(ei mitään)', - 'no_piggy_bank' => '(ei säästöpossu)', - 'name_in_currency' => ':name valuutassa :currency', - 'paid_in_currency' => 'Maksettu valuutassa :currency', - 'unpaid_in_currency' => 'Maksamatta valuutassa :currency', - 'is_alpha_warning' => 'Käytät ALPHA-versiota. Varaudu virheisiin ja ongelmiin.', - 'is_beta_warning' => 'Käytät BETA-versiota. Varaudu virheisiin ja ongelmiin.', - 'all_destination_accounts' => 'Kohdetilit', - 'all_source_accounts' => 'Lähdetilit', - 'back_to_index' => 'Takaisin valikkoon', - 'cant_logout_guard' => 'Firefly III ei voi kirjata sinua ulos.', - 'internal_reference' => 'Sisäinen viite', + 'authorization_request' => 'Firefly III v:version Valtuutus Pyyntö', + 'authorization_request_intro' => 'Sovellus ":client" pyytää lupaa saada pääsy taloushallintoosi. Haluatko sallia :client pääsyn näihin tietoihin?', + 'authorization_request_site' => 'Sinut ohjataan uudelleen osoitteeseen :url joka sitten voi käyttää Firefly III -tietoja.', + 'authorization_request_invalid' => 'Tämä käyttöoikeuspyyntö on virheellinen. Ole hyvä äläkä koskaan enää seuraa tätä linkkiä.', + 'scopes_will_be_able' => 'Tämä sovellus voi:', + 'button_authorize' => 'Valtuuta', + 'none_in_select_list' => '(ei mitään)', + 'no_piggy_bank' => '(ei säästöpossu)', + 'name_in_currency' => ':name valuutassa :currency', + 'paid_in_currency' => 'Maksettu valuutassa :currency', + 'unpaid_in_currency' => 'Maksamatta valuutassa :currency', + 'is_alpha_warning' => 'Käytät ALPHA-versiota. Varaudu virheisiin ja ongelmiin.', + 'is_beta_warning' => 'Käytät BETA-versiota. Varaudu virheisiin ja ongelmiin.', + 'all_destination_accounts' => 'Kohdetilit', + 'all_source_accounts' => 'Lähdetilit', + 'back_to_index' => 'Takaisin valikkoon', + 'cant_logout_guard' => 'Firefly III ei voi kirjata sinua ulos.', + 'internal_reference' => 'Sisäinen viite', // check for updates: - 'update_check_title' => 'Tarkista päivitykset', - 'admin_update_check_title' => 'Tarkista päivitykset automaattisesti', - 'admin_update_check_explain' => 'Firefly III voi tarkistaa päivitykset puolestasi automaattisesti. Kun tämä asetus otetaan käyttöön, järjestelmä ottaa yhteyden Firefly III päivityspalvelimeen tarkistaakseen onko uusi versio julkaistu. Saat näytölle viestin kun ohjelmaan on tarjolla päivitys. Voit testata tätä viestiä käyttämällä oikeanpuoleista nappia. Valitse alla haluatko Firefly III:n tarkistavan päivitykset puolestasi.', - 'check_for_updates_permission' => 'Firefly III voi tarkistaa päivitykset puolestasi, mutta se tarvitsee luvan tehdäkseen niin. Käy ylläpito-sivulla jos haluat ottaa automaattisen tarkistuksen käyttöön.', - 'updates_ask_me_later' => 'Kysy myöhemmin', - 'updates_do_not_check' => 'Älä tarkista päivityksiä', - 'updates_enable_check' => 'Ota käyttöön päivityksen automaattinen tarkistus', - 'admin_update_check_now_title' => 'Tarkista päivitykset nyt', - 'admin_update_check_now_explain' => 'Jos painat tätä, Firefly III käy tarkistamassa onko nykyiseen versioosi tullut päivityksiä.', - 'check_for_updates_button' => 'Tarkista nyt!', - 'update_new_version_alert' => 'Firefly III:sta on julkaistu uusi versio. Käytät versiota :your_version, viimeisin versio :new_version on julkaistu :date.', - 'update_version_beta' => 'Tämä on BETA versio. Saatat törmätä hankaluuksiin.', - 'update_version_alpha' => 'Tämä on ALPHA versio. Saatat törmätä hankaluuksiin.', - 'update_current_version_alert' => 'Käytät versiota :version, se on viimeisin julkaistu versio.', - 'update_newer_version_alert' => 'Käytät versiota :your_version, joka on uudempi kuin viimeisin julkaistu versio, :new_version.', - 'update_check_error' => 'Päivityksiä tarkistettaessa tapahtui virhe: :error', - 'unknown_error' => 'Tuntematon virhe. Pahoittelut siitä.', - 'just_new_release' => 'Uusi versio on saatavilla! Versio :version on julkaistu :date. Tämä julkaisu on aivan tuore, kannattaa vielä odottaa muutama päivä julkaisun vakiintumista.', - 'disabled_but_check' => 'Poistit päivityksen tarkistuksen käytöstä. Älä unohda tarkistaa päivityksiä aina silloin tällöin. Kiitos!', - 'admin_update_channel_title' => 'Päivityskanava', - 'admin_update_channel_explain' => 'Firefly III:lla on kolme päivitys-"kanavaa" jotka määrittävät kuinka kehityksen huipulla olet ominaisuuksissa, parannuksissa ja ohjelmavirheissä. Käytä "beta"-kanavaa jos olet seikkailija ja "alpha"-kanavaa jos haluat elää vaarallisesti.', - 'update_channel_stable' => 'Vakaa. Kaiken pitäisi toimia kuten oletat.', - 'update_channel_beta' => 'Beta. Uusia ominaisuuksia mutta kaikki ei välttämättä toimi kunnolla.', - 'update_channel_alpha' => 'Alpha. Heitämme uusia ominaisuuksia pinon päällimmäiseksi ja käytämme kaikkea mikä ei tipu tai irtoile.', + 'update_check_title' => 'Tarkista päivitykset', + 'admin_update_check_title' => 'Tarkista päivitykset automaattisesti', + 'admin_update_check_explain' => 'Firefly III voi tarkistaa päivitykset puolestasi automaattisesti. Kun tämä asetus otetaan käyttöön, järjestelmä ottaa yhteyden Firefly III päivityspalvelimeen tarkistaakseen onko uusi versio julkaistu. Saat näytölle viestin kun ohjelmaan on tarjolla päivitys. Voit testata tätä viestiä käyttämällä oikeanpuoleista nappia. Valitse alla haluatko Firefly III:n tarkistavan päivitykset puolestasi.', + 'check_for_updates_permission' => 'Firefly III voi tarkistaa päivitykset puolestasi, mutta se tarvitsee luvan tehdäkseen niin. Käy ylläpito-sivulla jos haluat ottaa automaattisen tarkistuksen käyttöön.', + 'updates_ask_me_later' => 'Kysy myöhemmin', + 'updates_do_not_check' => 'Älä tarkista päivityksiä', + 'updates_enable_check' => 'Ota käyttöön päivityksen automaattinen tarkistus', + 'admin_update_check_now_title' => 'Tarkista päivitykset nyt', + 'admin_update_check_now_explain' => 'Jos painat tätä, Firefly III käy tarkistamassa onko nykyiseen versioosi tullut päivityksiä.', + 'check_for_updates_button' => 'Tarkista nyt!', + 'update_new_version_alert' => 'Firefly III:sta on julkaistu uusi versio. Käytät versiota :your_version, viimeisin versio :new_version on julkaistu :date.', + 'update_version_beta' => 'Tämä on BETA versio. Saatat törmätä hankaluuksiin.', + 'update_version_alpha' => 'Tämä on ALPHA versio. Saatat törmätä hankaluuksiin.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Käytät versiota :version, se on viimeisin julkaistu versio.', + 'update_newer_version_alert' => 'Käytät versiota :your_version, joka on uudempi kuin viimeisin julkaistu versio, :new_version.', + 'update_check_error' => 'Päivityksiä tarkistettaessa tapahtui virhe: :error', + 'unknown_error' => 'Tuntematon virhe. Pahoittelut siitä.', + 'disabled_but_check' => 'Poistit päivityksen tarkistuksen käytöstä. Älä unohda tarkistaa päivityksiä aina silloin tällöin. Kiitos!', + 'admin_update_channel_title' => 'Päivityskanava', + 'admin_update_channel_explain' => 'Firefly III:lla on kolme päivitys-"kanavaa" jotka määrittävät kuinka kehityksen huipulla olet ominaisuuksissa, parannuksissa ja ohjelmavirheissä. Käytä "beta"-kanavaa jos olet seikkailija ja "alpha"-kanavaa jos haluat elää vaarallisesti.', + 'update_channel_stable' => 'Vakaa. Kaiken pitäisi toimia kuten oletat.', + 'update_channel_beta' => 'Beta. Uusia ominaisuuksia mutta kaikki ei välttämättä toimi kunnolla.', + 'update_channel_alpha' => 'Alpha. Heitämme uusia ominaisuuksia pinon päällimmäiseksi ja käytämme kaikkea mikä ei tipu tai irtoile.', // search - 'search' => 'Hae', - 'search_query' => 'Kysely', - 'search_found_transactions' => 'Firefly III löysi :count tapahtuman :time sekunnissa.| Firefly III löysi :count tapahtumaa :time sekunnissa.', - 'search_found_more_transactions' => 'Firefly III löysi enemmän kuin :count tapahtumaa :time sekunnissa.', - 'search_for_query' => 'Firefly III hakee tapahtumia kaikilla näillä hakusanoilla: :query', - 'invalid_operators_list' => 'Nämä hakuparametrit eivät ole kelvollisia ja ne on ohitettu.', + 'search' => 'Hae', + 'search_query' => 'Kysely', + 'search_found_transactions' => 'Firefly III löysi :count tapahtuman :time sekunnissa.| Firefly III löysi :count tapahtumaa :time sekunnissa.', + 'search_found_more_transactions' => 'Firefly III löysi enemmän kuin :count tapahtumaa :time sekunnissa.', + 'search_for_query' => 'Firefly III hakee tapahtumia kaikilla näillä hakusanoilla: :query', + 'invalid_operators_list' => 'Nämä hakuparametrit eivät ole kelvollisia ja ne on ohitettu.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Tapahtumapäivä on ":value"', 'search_modifier_not_date_on' => 'Transaction date is not ":value"', 'search_modifier_reconciled' => 'Transaction is reconciled', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Tapahtuman tyyppi on ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Tägi on ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Tapahtuma on vuonna ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Tapahtuman kuukausi on joko ":value" tai sen jälkeen', 'search_modifier_date_after_day' => 'Tapahtuman kuukauden päivä on joko ":value" tai sen jälkeen', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => 'Luo uusi sääntö hausta', 'rule_from_search_words' => 'Sääntömoottorilla on vaikeuksia käsitellä ":string". Ehdotettu sääntö, joka sopii hakuusi, voi antaa erilaisia tuloksia. Tarkista säännön ehdot huolellisesti.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Seuraavat muokkaukset vaikuttavat myös hakuun:', 'general_search_error' => 'Haussa tapahtui virhe. Virhe tallennettiin lokitiedostoon.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'Et voi suorittaa aktivoimattomia sääntöjä.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Säännöt', 'rule_name' => 'Säännön nimi', 'rule_triggers' => 'Sääntö toteutuu kun', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Kun tapahtuma päivitetään', 'rule_trigger_user_action' => 'Käyttäjän toiminto on ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Lähdetilin nimi alkaa ...', 'rule_trigger_source_account_starts' => 'Lähdetilin nimi alkaa tekstillä ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Budjetti on ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Tapahtuman valuutta on ...', 'rule_trigger_currency_is' => 'Tapahtuman valuutta on ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Tapahtuman valuutta on..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Sääntöryhmä laskuille', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Sääntö laskulle ":name"', 'new_rule_for_bill_description' => 'Tämä sääntö merkitsee tapahtumia laskulle ":name".', - 'new_rule_for_journal_title' => 'Tapahtumaan ":description" perustuva sääntö', - 'new_rule_for_journal_description' => 'Tämä sääntö perustuu tapahtumaan ":description". Se täsmää tapahtumiin jotka ovat tarkalleen samanlaisia.', + 'new_rule_for_journal_title' => 'Tapahtumaan ":description" perustuva sääntö', + 'new_rule_for_journal_description' => 'Tämä sääntö perustuu tapahtumaan ":description". Se täsmää tapahtumiin jotka ovat tarkalleen samanlaisia.', // tags - 'store_new_tag' => 'Tallenna uusi tägi', - 'update_tag' => 'Päivitä tägi', - 'no_location_set' => 'Sijaintia ei ole asetettu.', - 'meta_data' => 'Metatieto', - 'location' => 'Sijainti', - 'without_date' => 'Ilman päiväystä', - 'result' => 'Tulos', - 'sums_apply_to_range' => 'Kaikki summat sisältyvät valittuun jaksoon', - 'mapbox_api_key' => 'Käyttääksesi karttaa, hanki API-avain Mapboxilta. Avaa .env tiedostosi ja lisää koodi MAPBOX_API_KEY= perään.', - 'press_object_location' => 'Oikealla hiiren napilla (tai pitkä painallus) voit asettaa paikkatiedon.', - 'clear_location' => 'Tyhjennä sijainti', - 'delete_all_selected_tags' => 'Poista kaikki valitut tägit', - 'select_tags_to_delete' => 'Älä unohda valita tägejä.', - 'deleted_x_tags' => 'Poistettu :count tagi.|Poistettu :count tagia.', - 'create_rule_from_transaction' => 'Luo tapahtumaan perustuva sääntö', - 'create_recurring_from_transaction' => 'Luo toistuva tapahtuma tämän tapahtuman perusteella', - + 'store_new_tag' => 'Tallenna uusi tägi', + 'update_tag' => 'Päivitä tägi', + 'no_location_set' => 'Sijaintia ei ole asetettu.', + 'meta_data' => 'Metatieto', + 'location' => 'Sijainti', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Ilman päiväystä', + 'result' => 'Tulos', + 'sums_apply_to_range' => 'Kaikki summat sisältyvät valittuun jaksoon', + 'mapbox_api_key' => 'Käyttääksesi karttaa, hanki API-avain Mapboxilta. Avaa .env tiedostosi ja lisää koodi MAPBOX_API_KEY= perään.', + 'press_object_location' => 'Oikealla hiiren napilla (tai pitkä painallus) voit asettaa paikkatiedon.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Tyhjennä sijainti', + 'delete_all_selected_tags' => 'Poista kaikki valitut tägit', + 'select_tags_to_delete' => 'Älä unohda valita tägejä.', + 'deleted_x_tags' => 'Poistettu :count tagi.|Poistettu :count tagia.', + 'create_rule_from_transaction' => 'Luo tapahtumaan perustuva sääntö', + 'create_recurring_from_transaction' => 'Luo toistuva tapahtuma tämän tapahtuman perusteella', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(sama kuin kieli)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Etusivun tilit', - 'pref_home_screen_accounts_help' => 'Mitkä tilit näytetään etusivulla?', - 'pref_view_range' => 'Tarkasteltava jakso', - 'pref_view_range_help' => 'Osa kuvaajista ryhmitellään automaattisesti jaksoihin. Budjettisi ryhmitellään myös jaksoihin. Minkälaista jaksoa haluat käyttää?', - 'pref_1D' => 'Yksi päivä', - 'pref_1W' => 'Yksi viikko', - 'pref_1M' => 'Yksi kuukausi', - 'pref_3M' => 'Kolme kuukautta (vuosineljännes)', - 'pref_6M' => 'Kuusi kuukautta', - 'pref_1Y' => 'Yksi vuosi', - 'pref_last365' => 'Edellinen vuosi', - 'pref_last90' => 'Viimeiset 90 päivää', - 'pref_last30' => 'Viimeiset 30 päivää', - 'pref_last7' => 'Viimeiset 7 päivää', - 'pref_YTD' => 'Vuoden alusta', - 'pref_QTD' => 'Neljännesvuoden alusta', - 'pref_MTD' => 'Kuukauden alusta', - 'pref_languages' => 'Kielet', - 'pref_locale' => 'Alueasetukset', - 'pref_languages_help' => 'Firefly III tukee useita kieliä. Mitä niistä haluat käyttää?', - 'pref_locale_help' => 'Firefly III antaa sinun asettaa erikseen paikallisia asetuksia, kuten valuuttojen, numeroiden ja päivämäärien muotoilun. Järjestelmäsi ei ehkä tue kaikkia tämän luettelon alueasetuksia. Firefly III:lla ei ole oikeita päivämääräasetuksia jokaiselle alueelle; ota minuun yhteyttä saadaksesi parannuksia.', - 'pref_locale_no_demo' => 'Tämä ominaisuus ei toimi demokäyttäjälle.', - 'pref_custom_fiscal_year' => 'Tilikauden asetukset', - 'pref_custom_fiscal_year_label' => 'Käytössä', - 'pref_custom_fiscal_year_help' => 'Maissa joiden tilikausi on jokin muu kuin Tammikuun 1:stä Joulukuun 31:seen päivään, voit valita tämän ja määrittää tilikauden aloitus- ja lopetuspäivän', - 'pref_fiscal_year_start_label' => 'Tilikauden aloituspäivä', - 'pref_two_factor_auth' => '2-vaiheinen tunnistus', - 'pref_two_factor_auth_help' => 'Kun aktivoit kaksivaiheisen tunnistuksen (tunnetaan myös kaksivaiheisena kirjautumisena), lisäät uuden turvallisuuskerroksen tilillesi. Kirjaudut sisään jollain minkä tiedät (salasanasi) ja jollain mitä sinulla on (vahvistuskoodi). Vahvistuskoodi luodaan puhelimesi tunnistusohjelmalla, vaihtoehtoina esimerkiksi Authy tai Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Ota kaksivaiheinen tunnistus käyttöön', - 'pref_two_factor_auth_disabled' => 'Kaksivaiheisen tunnistuksen vahvistuskoodi mitätöity ja poistettu käytöstä', - 'pref_two_factor_auth_remove_it' => 'Älä unohda poistaa tiliä tunnistusohjelmastasi!', - 'pref_two_factor_auth_code' => 'Tarkista koodi', - 'pref_two_factor_auth_code_help' => 'Skannaa QR koodi puhelimesi tunnistusohjelmalla (Authy tai Google Authenticator) ja anna tähän saamasi koodi.', - 'pref_two_factor_auth_reset_code' => 'Nollaa vahvistuskoodi', - 'pref_two_factor_auth_disable_2fa' => 'Poista kaksivaiheinen tunnistautuminen käytöstä', - '2fa_use_secret_instead' => 'Jos et voi skannata QR koodia, voit sen sijaan käyttää koodia: :secret.', - '2fa_backup_codes' => 'Tallenna nämä varakoodit, jotta et menetä pääsyä Firefly III:een jos vaikka puhelimesi pääsee häviämään.', - '2fa_already_enabled' => 'Kaksivaiheinen tunnistus on jo otettu käyttöön.', - 'wrong_mfa_code' => 'Tämä MFA-koodi ei ole voimassa.', - 'pref_save_settings' => 'Tallenna asetukset', - 'saved_preferences' => 'Asetukset tallennettu!', - 'preferences_general' => 'Yleiset', - 'preferences_frontpage' => 'Etusivu', - 'preferences_security' => 'Turvallisuus', - 'preferences_layout' => 'Asettelu', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Näytä talletukset etusivulla', - 'pref_home_show_deposits_info' => 'Kulutustilisi näkyvät jo etusivulla. Pitäisikö tuottotilisi myös näkyä siellä?', - 'pref_home_do_show_deposits' => 'Kyllä, näytä ne', - 'successful_count' => 'joista :count onnistui', - 'list_page_size_title' => 'Sivun koko', - 'list_page_size_help' => 'Listojen pituus - koskee mitä tahansa listaa asioista (tilit, tapahtumat, jne).', - 'list_page_size_label' => 'Sivun koko', - 'between_dates' => '(:start ja :end)', - 'pref_optional_fields_transaction' => 'Tapahtumien valinnaiset kentät', - 'pref_optional_fields_transaction_help' => 'Yksinkertaisuuden nimissä kaikki kentät eivät alkuun ole näkyvissä luodessasi uusia tapahtumia. Alla voit ottaa käyttöön sinulle hyödyllisiä kenttiä. Asetuksesta huolimatta kaikki kentät joissa jo on sisältöä näytetään - tietenkin.', - 'optional_tj_date_fields' => 'Päivämääräkentät', - 'optional_tj_other_fields' => 'Muut kentät', - 'optional_tj_attachment_fields' => 'Liitekentät', - 'pref_optional_tj_interest_date' => 'Korkopäivä', - 'pref_optional_tj_book_date' => 'Kirjauspäivä', - 'pref_optional_tj_process_date' => 'Käsittelypäivä', - 'pref_optional_tj_due_date' => 'Eräpäivä', - 'pref_optional_tj_payment_date' => 'Maksupäivä', - 'pref_optional_tj_invoice_date' => 'Laskun päivämäärä', - 'pref_optional_tj_internal_reference' => 'Sisäinen viite', - 'pref_optional_tj_notes' => 'Muistiinpanot', - 'pref_optional_tj_attachments' => 'Liitteet', - 'pref_optional_tj_external_url' => 'Ulkoinen URL', - 'pref_optional_tj_location' => 'Sijainti', - 'pref_optional_tj_links' => 'Tapahtuman linkit', - 'optional_field_meta_dates' => 'Päivämäärät', - 'optional_field_meta_business' => 'Yritys', - 'optional_field_attachments' => 'Liitteet', - 'optional_field_meta_data' => 'Valinnainen metatieto', - 'external_url' => 'Ulkoinen URL', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(sama kuin kieli)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Etusivun tilit', + 'pref_home_screen_accounts_help' => 'Mitkä tilit näytetään etusivulla?', + 'pref_view_range' => 'Tarkasteltava jakso', + 'pref_view_range_help' => 'Osa kuvaajista ryhmitellään automaattisesti jaksoihin. Budjettisi ryhmitellään myös jaksoihin. Minkälaista jaksoa haluat käyttää?', + 'pref_1D' => 'Yksi päivä', + 'pref_1W' => 'Yksi viikko', + 'pref_1M' => 'Yksi kuukausi', + 'pref_3M' => 'Kolme kuukautta (vuosineljännes)', + 'pref_6M' => 'Kuusi kuukautta', + 'pref_1Y' => 'Yksi vuosi', + 'pref_last365' => 'Edellinen vuosi', + 'pref_last90' => 'Viimeiset 90 päivää', + 'pref_last30' => 'Viimeiset 30 päivää', + 'pref_last7' => 'Viimeiset 7 päivää', + 'pref_YTD' => 'Vuoden alusta', + 'pref_QTD' => 'Neljännesvuoden alusta', + 'pref_MTD' => 'Kuukauden alusta', + 'pref_languages' => 'Kielet', + 'pref_locale' => 'Alueasetukset', + 'pref_languages_help' => 'Firefly III tukee useita kieliä. Mitä niistä haluat käyttää?', + 'pref_locale_help' => 'Firefly III antaa sinun asettaa erikseen paikallisia asetuksia, kuten valuuttojen, numeroiden ja päivämäärien muotoilun. Järjestelmäsi ei ehkä tue kaikkia tämän luettelon alueasetuksia. Firefly III:lla ei ole oikeita päivämääräasetuksia jokaiselle alueelle; ota minuun yhteyttä saadaksesi parannuksia.', + 'pref_locale_no_demo' => 'Tämä ominaisuus ei toimi demokäyttäjälle.', + 'pref_custom_fiscal_year' => 'Tilikauden asetukset', + 'pref_custom_fiscal_year_label' => 'Käytössä', + 'pref_custom_fiscal_year_help' => 'Maissa joiden tilikausi on jokin muu kuin Tammikuun 1:stä Joulukuun 31:seen päivään, voit valita tämän ja määrittää tilikauden aloitus- ja lopetuspäivän', + 'pref_fiscal_year_start_label' => 'Tilikauden aloituspäivä', + 'pref_two_factor_auth' => '2-vaiheinen tunnistus', + 'pref_two_factor_auth_help' => 'Kun aktivoit kaksivaiheisen tunnistuksen (tunnetaan myös kaksivaiheisena kirjautumisena), lisäät uuden turvallisuuskerroksen tilillesi. Kirjaudut sisään jollain minkä tiedät (salasanasi) ja jollain mitä sinulla on (vahvistuskoodi). Vahvistuskoodi luodaan puhelimesi tunnistusohjelmalla, vaihtoehtoina esimerkiksi Authy tai Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Ota kaksivaiheinen tunnistus käyttöön', + 'pref_two_factor_auth_disabled' => 'Kaksivaiheisen tunnistuksen vahvistuskoodi mitätöity ja poistettu käytöstä', + 'pref_two_factor_auth_remove_it' => 'Älä unohda poistaa tiliä tunnistusohjelmastasi!', + 'pref_two_factor_auth_code' => 'Tarkista koodi', + 'pref_two_factor_auth_code_help' => 'Skannaa QR koodi puhelimesi tunnistusohjelmalla (Authy tai Google Authenticator) ja anna tähän saamasi koodi.', + 'pref_two_factor_auth_reset_code' => 'Nollaa vahvistuskoodi', + 'pref_two_factor_auth_disable_2fa' => 'Poista kaksivaiheinen tunnistautuminen käytöstä', + '2fa_use_secret_instead' => 'Jos et voi skannata QR koodia, voit sen sijaan käyttää koodia: :secret.', + '2fa_backup_codes' => 'Tallenna nämä varakoodit, jotta et menetä pääsyä Firefly III:een jos vaikka puhelimesi pääsee häviämään.', + '2fa_already_enabled' => 'Kaksivaiheinen tunnistus on jo otettu käyttöön.', + 'wrong_mfa_code' => 'Tämä MFA-koodi ei ole voimassa.', + 'pref_save_settings' => 'Tallenna asetukset', + 'saved_preferences' => 'Asetukset tallennettu!', + 'preferences_general' => 'Yleiset', + 'preferences_frontpage' => 'Etusivu', + 'preferences_security' => 'Turvallisuus', + 'preferences_layout' => 'Asettelu', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Näytä talletukset etusivulla', + 'pref_home_show_deposits_info' => 'Kulutustilisi näkyvät jo etusivulla. Pitäisikö tuottotilisi myös näkyä siellä?', + 'pref_home_do_show_deposits' => 'Kyllä, näytä ne', + 'successful_count' => 'joista :count onnistui', + 'list_page_size_title' => 'Sivun koko', + 'list_page_size_help' => 'Listojen pituus - koskee mitä tahansa listaa asioista (tilit, tapahtumat, jne).', + 'list_page_size_label' => 'Sivun koko', + 'between_dates' => '(:start ja :end)', + 'pref_optional_fields_transaction' => 'Tapahtumien valinnaiset kentät', + 'pref_optional_fields_transaction_help' => 'Yksinkertaisuuden nimissä kaikki kentät eivät alkuun ole näkyvissä luodessasi uusia tapahtumia. Alla voit ottaa käyttöön sinulle hyödyllisiä kenttiä. Asetuksesta huolimatta kaikki kentät joissa jo on sisältöä näytetään - tietenkin.', + 'optional_tj_date_fields' => 'Päivämääräkentät', + 'optional_tj_other_fields' => 'Muut kentät', + 'optional_tj_attachment_fields' => 'Liitekentät', + 'pref_optional_tj_interest_date' => 'Korkopäivä', + 'pref_optional_tj_book_date' => 'Kirjauspäivä', + 'pref_optional_tj_process_date' => 'Käsittelypäivä', + 'pref_optional_tj_due_date' => 'Eräpäivä', + 'pref_optional_tj_payment_date' => 'Maksupäivä', + 'pref_optional_tj_invoice_date' => 'Laskun päivämäärä', + 'pref_optional_tj_internal_reference' => 'Sisäinen viite', + 'pref_optional_tj_notes' => 'Muistiinpanot', + 'pref_optional_tj_attachments' => 'Liitteet', + 'pref_optional_tj_external_url' => 'Ulkoinen URL', + 'pref_optional_tj_location' => 'Sijainti', + 'pref_optional_tj_links' => 'Tapahtuman linkit', + 'optional_field_meta_dates' => 'Päivämäärät', + 'optional_field_meta_business' => 'Yritys', + 'optional_field_attachments' => 'Liitteet', + 'optional_field_meta_data' => 'Valinnainen metatieto', + 'external_url' => 'Ulkoinen URL', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'Kaikki muut istuntosi on kirjattu ulos.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Poista KAIKKI budjettisi', - 'delete_all_categories' => 'Poista KAIKKI kategoriasi', - 'delete_all_tags' => 'Poista KAIKKI tägit', - 'delete_all_bills' => 'Poista KAIKKI laskusi', - 'delete_all_piggy_banks' => 'Poista KAIKKI säästöpossusi', - 'delete_all_rules' => 'Poista KAIKKI sääntösi', - 'delete_all_recurring' => 'Poista KAIKKI toistuvat tapahtumasi', - 'delete_all_object_groups' => 'Poista KAIKKI objektiryhmät', - 'delete_all_accounts' => 'Poista KAIKKI tilisi', - 'delete_all_asset_accounts' => 'Poista KAIKKI tulotilisi', - 'delete_all_expense_accounts' => 'Poista KAIKKI kulutilisi', - 'delete_all_revenue_accounts' => 'Poista kaikki tulotilisi', - 'delete_all_liabilities' => 'Poista KAIKKI lainasi', - 'delete_all_transactions' => 'Poista KAIKKI tapahtumasi', - 'delete_all_withdrawals' => 'Poista KAIKKI nostosi', - 'delete_all_deposits' => 'Poista KAIKKI talletuksesi', - 'delete_all_transfers' => 'Poista KAIKKI siirtosi', - 'also_delete_transactions' => 'Tilien poistaminen poistaa myös KAIKKI niille tehdyt nostot, talletukset ja siirrot!', - 'deleted_all_budgets' => 'Kaikki budjetit on poistettu', - 'deleted_all_categories' => 'Kaikki kategoriat on poistettu', - 'deleted_all_tags' => 'Kaikki tägit on poistettu', - 'deleted_all_bills' => 'Kaikki laskut on poistettu', - 'deleted_all_piggy_banks' => 'Kaikki säästöpossut on poistettu', - 'deleted_all_rules' => 'Kaikki säännöt ja sääntöryhmät on poistettu', - 'deleted_all_object_groups' => 'Kaikki ryhmät on poistettu', - 'deleted_all_accounts' => 'Kaikki tilit on poistettu', - 'deleted_all_asset_accounts' => 'Kaikki omaisuustilit on poistettu', - 'deleted_all_expense_accounts' => 'Kaikki kulutilit on poistettu', - 'deleted_all_revenue_accounts' => 'Kaikki tulotilit on poistettu', - 'deleted_all_liabilities' => 'Kaikki lainat on poistettu', - 'deleted_all_transactions' => 'Kaikki tapahtumat on poistettu', - 'deleted_all_withdrawals' => 'Kaikki nostot on poistettu', - 'deleted_all_deposits' => 'Kaikki talletukset on poistettu', - 'deleted_all_transfers' => 'Kaikki siirrot on poistettu', - 'deleted_all_recurring' => 'Kaikki toistuvat tapahtumat on poistettu', - 'change_your_password' => 'Vaihda salasana', - 'delete_account' => 'Poista käyttäjätili', - 'current_password' => 'Nykyinen salasana', - 'new_password' => 'Uusi salasana', - 'new_password_again' => 'Salasana (uudestaan)', - 'delete_your_account' => 'Poista käyttäjätunnuksesi', - 'delete_your_account_help' => 'Poistamalla käyttäjätilisi poistat myös kaikki tilisi, tapahtumasi, kaikki mitä olet tallentanut Firefly III:een. Nämä kaikki POISTETAAN LOPULLISESTI.', - 'delete_your_account_password' => 'Syötä salasanasi jatkaaksesi.', - 'password' => 'Salasana', - 'are_you_sure' => 'Oletko varma? Et pysty perumaan tätä.', - 'delete_account_button' => 'POISTA käyttäjätilisi', - 'invalid_current_password' => 'Virheellinen nykyinen salasana!', - 'password_changed' => 'Salasana vaihdettu!', - 'should_change' => 'Tarkoituksena olisi vaihtaa salasanasi.', - 'invalid_password' => 'Virheellinen salasana!', - 'what_is_pw_security' => 'Mikä on "varmista salasanan turvallisuus"?', - 'secure_pw_title' => 'Turvallisen salasanan valitseminen', - 'forgot_password_response' => 'Kiitos. Jos sinulla on tili tällä sähköpostiosoitteella, löydät ohjeet saapuneet-kansiostasi.', - 'secure_pw_history' => 'Yhtään viikkoa ei kulu ilman uutisia verkkosivustojen vuotaneista käyttäjien kirjautumistiedoista. Hakkerit ja varkaat käyttävät näitä salasanoja yrittäessään varastaa sinun yksityisiä tietoja. Tämä tieto on arvokasta.', - 'secure_pw_ff' => 'Käytätkö samaa salasanaa kaikkialla internetissä? Jos yksi sivusto vuotaa sinun salasanasi, hakkereilla on pääsy kaikkiin sinun tietoihin. Firefly III luottaa, että sinä valitset vahvan ja yksilöllisen salasanan suojellaksesi taloudellisia tietojasi.', - 'secure_pw_check_box' => 'Auttaaksesi sinua tässä Firefly III voi tarkistaa onko ehdottamasi ja/tai käyttämäsi salasana jo aikaisemmin vuotaneiden joukossa. Jos näin on päässyt tapahtumaan, Firefly III neuvoo sinua olemaan käyttämättä valittua salasanaa.', - 'secure_pw_working_title' => 'Kuinka se toimii?', - 'secure_pw_working' => 'Kun valitset tämän valintaruudun, Firefly III lähettää ensimmäiset 5 kirjainta salasanasi SHA1 tarkisteesta Troy Huntin verkkosivulle vertailua varten. Jos listalta löytyy osumia, salasanasi saattaa olla vaarantunut. Tämä (toivottavasti) estää sinua käyttämästä vaarantuneita salasanoja kuten viimeisin NIST Erikoisjulkaisukin suosittelee.', - 'secure_pw_should' => 'Pitäisikö minun valita tämä?', - 'secure_pw_long_password' => 'Kyllä. Varmista aina, että salasanasi on turvallinen.', - 'command_line_token' => 'Komentorivin tunnus', - 'explain_command_line_token' => 'Tarvitset tämän tunnuksen käyttääksesi komentorivikomentoja kuten tietojen vienti. Ilman sitä, nämä komennot eivät toimi. Älä koskaan kerro kenellekään sinun komentorivitunnustasi. Kukaan ei kysy sinulta sitä, en edes minä. Jos pelkäät kadottaneesi tunnuksen tai olet vähän edes epävarma, voit aina luoda uuden tunnuksen tällä napilla.', - 'regenerate_command_line_token' => 'Luo uusi komentorivitunnus', - 'token_regenerated' => 'Uusi komentorivitunnus luotiin', - 'change_your_email' => 'Muuta sähköpostiosoitetta', - 'email_verification' => 'Sähköpostiviesti lähetetään sekä vanhaan ETTÄ uuteen osoitteeseesi. Turvallisuussyistä et pysty kirjautumaan tilillesi ennen kuin vahvistat uuden sähköpostiosoitteesi. Jos et tiedä pystyykö tämä Firefly III instanssi lähettämään sähköpostia, älä käytä tätä toimintoa. Jos olet ylläpitäjä, voit testata sähköpostin lähetystä Ylläpito-sivulla.', - 'email_changed_logout' => 'Et voi kirjautua sisään, ennen kuin olet vahvistanut sähköpostiosoitteesi.', - 'login_with_new_email' => 'Voit nyt kirjautua uudella sähköpostiosoitteella.', - 'login_with_old_email' => 'Voit kirjautua jälleen vanhalla sähköpostiosoitteellasi.', - 'login_provider_local_only' => 'Tämä toiminto ei ole käytettävissä käytettäessä palveluntarjoajaa ":login_provider" tunnistautumiseen.', - 'external_user_mgt_disabled' => 'Tämä toiminto ei ole käytettävissä, kun Firefly III ei vastaa käyttäjän hallinnasta tai todennuksen käsittelystä.', - 'external_auth_disabled' => 'Tämä toiminto ei ole käytettävissä, kun Firefly III ei vastaa todennuksen käsittelystä.', - 'delete_local_info_only' => "Koska Firefly III ei ole vastuussa käyttäjän hallinnasta tai todentamisen käsittelystä, tämä toiminto poistaa vain paikalliset Firefly III tiedot.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Asiakkaat', - 'profile_oauth_no_clients' => 'Et ole luonut yhtään OAuth-asiakasta.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Asiakasohjelmat', - 'profile_oauth_client_id' => 'Asiakastunnus', - 'profile_oauth_client_name' => 'Nimi', - 'profile_oauth_client_secret' => 'Salaisuus', - 'profile_oauth_create_new_client' => 'Luo Uusi Asiakas', - 'profile_oauth_create_client' => 'Luo Asiakas', - 'profile_oauth_edit_client' => 'Muokkaa asiakasta', - 'profile_oauth_name_help' => 'Jotain käyttäjillesi tuttua ja luotettavaa.', - 'profile_oauth_redirect_url' => 'URL:n uudelleenohjaus', - 'profile_oauth_redirect_url_help' => 'Sovelluksesi valtuutuksen callback URL.', - 'profile_authorized_apps' => 'Valtuutetut sovellukset', - 'profile_authorized_clients' => 'Valtuutetut asiakkaat', - 'profile_scopes' => 'Aihepiirit', - 'profile_revoke' => 'Peruuta', - 'profile_oauth_client_secret_title' => 'Asiakkaan salausavain (Client secret)', - 'profile_oauth_client_secret_expl' => 'Tässä on uusi asiakkaan salausavaimesi. Tämä on ainoa kerta kun se näytetään, joten älä hukkaa sitä! Voit nyt käyttää tätä avainta tehdäksesi API komentoja.', - 'profile_personal_access_tokens' => 'Henkilökohtaiset Käyttöoikeuskoodit', - 'profile_personal_access_token' => 'Henkilökohtainen Käyttöoikeuskoodi', - 'profile_oauth_confidential' => 'Luottamuksellinen', - 'profile_oauth_confidential_help' => 'Vaadi asiakasta tunnistautumaan salausavaimella. Luotettavat asiakkaat pystyvät ylläpitämään käyttäjätunnuksia turvallisella tavalla paljastamatta niitä luvattomille osapuolille. Julkiset sovellukset, kuten natiivi työpöytä tai JavaScript SPA sovellukset, eivät pysty pitämään salausavaimia tietoturvallisesti.', - 'profile_personal_access_token_explanation' => 'Tässä on uusi henkilökohtainen pääsytunnuksesi. Tämä on ainoa kerta, kun se näytetään, joten älä hävitä sitä! Voit nyt käyttää tätä tunnusta tehdäksesi API-pyyntöjä.', - 'profile_no_personal_access_token' => 'Et ole luonut henkilökohtaisia käyttöoikeustunnuksia.', - 'profile_create_new_token' => 'Luo uusi tunnus', - 'profile_create_token' => 'Luo tunnus', - 'profile_create' => 'Luo', - 'profile_save_changes' => 'Tallenna muutokset', - 'profile_whoops' => 'Hupsis!', - 'profile_something_wrong' => 'Jokin meni vikaan!', - 'profile_try_again' => 'Jokin meni vikaan. Yritä uudelleen.', - 'amounts' => 'Summat', - 'multi_account_warning_unknown' => 'Riippuen luomasi tapahtuman tyypistä, myöhempien jaotteluiden lähde- ja/tai kohdetilin tyyppi voidaan kumota sen mukaan, mitä on määritelty tapahtuman ensimmäisessä jaossa.', - 'multi_account_warning_withdrawal' => 'Muista, että myöhempien jakojen lähdetili määräytyy noston ensimmäisen jaon määritysten mukaan.', - 'multi_account_warning_deposit' => 'Muista, että myöhempien jakojen kohdetili määräytyy talletuksen ensimmäisen jaon määritysten mukaan.', - 'multi_account_warning_transfer' => 'Muista, että myöhempien jakojen lähde- ja kohdetili määräytyvät ensimmäisen jaon määritysten mukaan.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'Kaikki muut istuntosi on kirjattu ulos.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Poista KAIKKI budjettisi', + 'delete_all_categories' => 'Poista KAIKKI kategoriasi', + 'delete_all_tags' => 'Poista KAIKKI tägit', + 'delete_all_bills' => 'Poista KAIKKI laskusi', + 'delete_all_piggy_banks' => 'Poista KAIKKI säästöpossusi', + 'delete_all_rules' => 'Poista KAIKKI sääntösi', + 'delete_all_recurring' => 'Poista KAIKKI toistuvat tapahtumasi', + 'delete_all_object_groups' => 'Poista KAIKKI objektiryhmät', + 'delete_all_accounts' => 'Poista KAIKKI tilisi', + 'delete_all_asset_accounts' => 'Poista KAIKKI tulotilisi', + 'delete_all_expense_accounts' => 'Poista KAIKKI kulutilisi', + 'delete_all_revenue_accounts' => 'Poista kaikki tulotilisi', + 'delete_all_liabilities' => 'Poista KAIKKI lainasi', + 'delete_all_transactions' => 'Poista KAIKKI tapahtumasi', + 'delete_all_withdrawals' => 'Poista KAIKKI nostosi', + 'delete_all_deposits' => 'Poista KAIKKI talletuksesi', + 'delete_all_transfers' => 'Poista KAIKKI siirtosi', + 'also_delete_transactions' => 'Tilien poistaminen poistaa myös KAIKKI niille tehdyt nostot, talletukset ja siirrot!', + 'deleted_all_budgets' => 'Kaikki budjetit on poistettu', + 'deleted_all_categories' => 'Kaikki kategoriat on poistettu', + 'deleted_all_tags' => 'Kaikki tägit on poistettu', + 'deleted_all_bills' => 'Kaikki laskut on poistettu', + 'deleted_all_piggy_banks' => 'Kaikki säästöpossut on poistettu', + 'deleted_all_rules' => 'Kaikki säännöt ja sääntöryhmät on poistettu', + 'deleted_all_object_groups' => 'Kaikki ryhmät on poistettu', + 'deleted_all_accounts' => 'Kaikki tilit on poistettu', + 'deleted_all_asset_accounts' => 'Kaikki omaisuustilit on poistettu', + 'deleted_all_expense_accounts' => 'Kaikki kulutilit on poistettu', + 'deleted_all_revenue_accounts' => 'Kaikki tulotilit on poistettu', + 'deleted_all_liabilities' => 'Kaikki lainat on poistettu', + 'deleted_all_transactions' => 'Kaikki tapahtumat on poistettu', + 'deleted_all_withdrawals' => 'Kaikki nostot on poistettu', + 'deleted_all_deposits' => 'Kaikki talletukset on poistettu', + 'deleted_all_transfers' => 'Kaikki siirrot on poistettu', + 'deleted_all_recurring' => 'Kaikki toistuvat tapahtumat on poistettu', + 'change_your_password' => 'Vaihda salasana', + 'delete_account' => 'Poista käyttäjätili', + 'current_password' => 'Nykyinen salasana', + 'new_password' => 'Uusi salasana', + 'new_password_again' => 'Salasana (uudestaan)', + 'delete_your_account' => 'Poista käyttäjätunnuksesi', + 'delete_your_account_help' => 'Poistamalla käyttäjätilisi poistat myös kaikki tilisi, tapahtumasi, kaikki mitä olet tallentanut Firefly III:een. Nämä kaikki POISTETAAN LOPULLISESTI.', + 'delete_your_account_password' => 'Syötä salasanasi jatkaaksesi.', + 'password' => 'Salasana', + 'are_you_sure' => 'Oletko varma? Et pysty perumaan tätä.', + 'delete_account_button' => 'POISTA käyttäjätilisi', + 'invalid_current_password' => 'Virheellinen nykyinen salasana!', + 'password_changed' => 'Salasana vaihdettu!', + 'should_change' => 'Tarkoituksena olisi vaihtaa salasanasi.', + 'invalid_password' => 'Virheellinen salasana!', + 'what_is_pw_security' => 'Mikä on "varmista salasanan turvallisuus"?', + 'secure_pw_title' => 'Turvallisen salasanan valitseminen', + 'forgot_password_response' => 'Kiitos. Jos sinulla on tili tällä sähköpostiosoitteella, löydät ohjeet saapuneet-kansiostasi.', + 'secure_pw_history' => 'Yhtään viikkoa ei kulu ilman uutisia verkkosivustojen vuotaneista käyttäjien kirjautumistiedoista. Hakkerit ja varkaat käyttävät näitä salasanoja yrittäessään varastaa sinun yksityisiä tietoja. Tämä tieto on arvokasta.', + 'secure_pw_ff' => 'Käytätkö samaa salasanaa kaikkialla internetissä? Jos yksi sivusto vuotaa sinun salasanasi, hakkereilla on pääsy kaikkiin sinun tietoihin. Firefly III luottaa, että sinä valitset vahvan ja yksilöllisen salasanan suojellaksesi taloudellisia tietojasi.', + 'secure_pw_check_box' => 'Auttaaksesi sinua tässä Firefly III voi tarkistaa onko ehdottamasi ja/tai käyttämäsi salasana jo aikaisemmin vuotaneiden joukossa. Jos näin on päässyt tapahtumaan, Firefly III neuvoo sinua olemaan käyttämättä valittua salasanaa.', + 'secure_pw_working_title' => 'Kuinka se toimii?', + 'secure_pw_working' => 'Kun valitset tämän valintaruudun, Firefly III lähettää ensimmäiset 5 kirjainta salasanasi SHA1 tarkisteesta Troy Huntin verkkosivulle vertailua varten. Jos listalta löytyy osumia, salasanasi saattaa olla vaarantunut. Tämä (toivottavasti) estää sinua käyttämästä vaarantuneita salasanoja kuten viimeisin NIST Erikoisjulkaisukin suosittelee.', + 'secure_pw_should' => 'Pitäisikö minun valita tämä?', + 'secure_pw_long_password' => 'Kyllä. Varmista aina, että salasanasi on turvallinen.', + 'command_line_token' => 'Komentorivin tunnus', + 'explain_command_line_token' => 'Tarvitset tämän tunnuksen käyttääksesi komentorivikomentoja kuten tietojen vienti. Ilman sitä, nämä komennot eivät toimi. Älä koskaan kerro kenellekään sinun komentorivitunnustasi. Kukaan ei kysy sinulta sitä, en edes minä. Jos pelkäät kadottaneesi tunnuksen tai olet vähän edes epävarma, voit aina luoda uuden tunnuksen tällä napilla.', + 'regenerate_command_line_token' => 'Luo uusi komentorivitunnus', + 'token_regenerated' => 'Uusi komentorivitunnus luotiin', + 'change_your_email' => 'Muuta sähköpostiosoitetta', + 'email_verification' => 'Sähköpostiviesti lähetetään sekä vanhaan ETTÄ uuteen osoitteeseesi. Turvallisuussyistä et pysty kirjautumaan tilillesi ennen kuin vahvistat uuden sähköpostiosoitteesi. Jos et tiedä pystyykö tämä Firefly III instanssi lähettämään sähköpostia, älä käytä tätä toimintoa. Jos olet ylläpitäjä, voit testata sähköpostin lähetystä Ylläpito-sivulla.', + 'email_changed_logout' => 'Et voi kirjautua sisään, ennen kuin olet vahvistanut sähköpostiosoitteesi.', + 'login_with_new_email' => 'Voit nyt kirjautua uudella sähköpostiosoitteella.', + 'login_with_old_email' => 'Voit kirjautua jälleen vanhalla sähköpostiosoitteellasi.', + 'login_provider_local_only' => 'Tämä toiminto ei ole käytettävissä käytettäessä palveluntarjoajaa ":login_provider" tunnistautumiseen.', + 'external_user_mgt_disabled' => 'Tämä toiminto ei ole käytettävissä, kun Firefly III ei vastaa käyttäjän hallinnasta tai todennuksen käsittelystä.', + 'external_auth_disabled' => 'Tämä toiminto ei ole käytettävissä, kun Firefly III ei vastaa todennuksen käsittelystä.', + 'delete_local_info_only' => 'Koska Firefly III ei ole vastuussa käyttäjän hallinnasta tai todentamisen käsittelystä, tämä toiminto poistaa vain paikalliset Firefly III tiedot.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Asiakkaat', + 'profile_oauth_no_clients' => 'Et ole luonut yhtään OAuth-asiakasta.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Asiakasohjelmat', + 'profile_oauth_client_id' => 'Asiakastunnus', + 'profile_oauth_client_name' => 'Nimi', + 'profile_oauth_client_secret' => 'Salaisuus', + 'profile_oauth_create_new_client' => 'Luo Uusi Asiakas', + 'profile_oauth_create_client' => 'Luo Asiakas', + 'profile_oauth_edit_client' => 'Muokkaa asiakasta', + 'profile_oauth_name_help' => 'Jotain käyttäjillesi tuttua ja luotettavaa.', + 'profile_oauth_redirect_url' => 'URL:n uudelleenohjaus', + 'profile_oauth_redirect_url_help' => 'Sovelluksesi valtuutuksen callback URL.', + 'profile_authorized_apps' => 'Valtuutetut sovellukset', + 'profile_authorized_clients' => 'Valtuutetut asiakkaat', + 'profile_scopes' => 'Aihepiirit', + 'profile_revoke' => 'Peruuta', + 'profile_oauth_client_secret_title' => 'Asiakkaan salausavain (Client secret)', + 'profile_oauth_client_secret_expl' => 'Tässä on uusi asiakkaan salausavaimesi. Tämä on ainoa kerta kun se näytetään, joten älä hukkaa sitä! Voit nyt käyttää tätä avainta tehdäksesi API komentoja.', + 'profile_personal_access_tokens' => 'Henkilökohtaiset Käyttöoikeuskoodit', + 'profile_personal_access_token' => 'Henkilökohtainen Käyttöoikeuskoodi', + 'profile_oauth_confidential' => 'Luottamuksellinen', + 'profile_oauth_confidential_help' => 'Vaadi asiakasta tunnistautumaan salausavaimella. Luotettavat asiakkaat pystyvät ylläpitämään käyttäjätunnuksia turvallisella tavalla paljastamatta niitä luvattomille osapuolille. Julkiset sovellukset, kuten natiivi työpöytä tai JavaScript SPA sovellukset, eivät pysty pitämään salausavaimia tietoturvallisesti.', + 'profile_personal_access_token_explanation' => 'Tässä on uusi henkilökohtainen pääsytunnuksesi. Tämä on ainoa kerta, kun se näytetään, joten älä hävitä sitä! Voit nyt käyttää tätä tunnusta tehdäksesi API-pyyntöjä.', + 'profile_no_personal_access_token' => 'Et ole luonut henkilökohtaisia käyttöoikeustunnuksia.', + 'profile_create_new_token' => 'Luo uusi tunnus', + 'profile_create_token' => 'Luo tunnus', + 'profile_create' => 'Luo', + 'profile_save_changes' => 'Tallenna muutokset', + 'profile_whoops' => 'Hupsis!', + 'profile_something_wrong' => 'Jokin meni vikaan!', + 'profile_try_again' => 'Jokin meni vikaan. Yritä uudelleen.', + 'amounts' => 'Summat', + 'multi_account_warning_unknown' => 'Riippuen luomasi tapahtuman tyypistä, myöhempien jaotteluiden lähde- ja/tai kohdetilin tyyppi voidaan kumota sen mukaan, mitä on määritelty tapahtuman ensimmäisessä jaossa.', + 'multi_account_warning_withdrawal' => 'Muista, että myöhempien jakojen lähdetili määräytyy noston ensimmäisen jaon määritysten mukaan.', + 'multi_account_warning_deposit' => 'Muista, että myöhempien jakojen kohdetili määräytyy talletuksen ensimmäisen jaon määritysten mukaan.', + 'multi_account_warning_transfer' => 'Muista, että myöhempien jakojen lähde- ja kohdetili määräytyvät ensimmäisen jaon määritysten mukaan.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Vie tietoja Firefly III:sta', - 'export_data_menu' => 'Vie tietoja', - 'export_data_bc' => 'Vie tietoja Firefly III:sta', - 'export_data_main_title' => 'Vie tietoja Firefly III:sta', - 'export_data_expl' => 'Tämän linkin avulla voit viedä kaikki tapahtumat ja metatiedot Firefly III:sta. Katso ohjeista (oikeassa yläkulmassa (?) - kuvake) saadaksesi lisätietoja prosessista.', - 'export_data_all_transactions' => 'Vie kaikki tapahtumat', - 'export_data_advanced_expl' => 'Jos tarvitset edistyneempää tai tietyn tyyppistä vientiä, lue ohjeet konsolikomennon käytöstä php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Vie tietoja Firefly III:sta', + 'export_data_menu' => 'Vie tietoja', + 'export_data_bc' => 'Vie tietoja Firefly III:sta', + 'export_data_main_title' => 'Vie tietoja Firefly III:sta', + 'export_data_expl' => 'Tämän linkin avulla voit viedä kaikki tapahtumat ja metatiedot Firefly III:sta. Katso ohjeista (oikeassa yläkulmassa (?) - kuvake) saadaksesi lisätietoja prosessista.', + 'export_data_all_transactions' => 'Vie kaikki tapahtumat', + 'export_data_advanced_expl' => 'Jos tarvitset edistyneempää tai tietyn tyyppistä vientiä, lue ohjeet konsolikomennon käytöstä php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Yksi liite|:count liitettä', - 'attachments' => 'Liitteet', - 'edit_attachment' => 'Muokkaa liitettä ":name"', - 'update_attachment' => 'Päivitä liite', - 'delete_attachment' => 'Poista liite ":name"', - 'attachment_deleted' => 'Liite ":name" poistettu', - 'liabilities_deleted' => 'Laina ":name" poistettu', - 'attachment_updated' => 'Liite ":name" päivitetty', - 'upload_max_file_size' => 'Tiedoston enimmäiskoko: :size', - 'list_all_attachments' => 'Lista kaikista liitteistä', + 'nr_of_attachments' => 'Yksi liite|:count liitettä', + 'attachments' => 'Liitteet', + 'edit_attachment' => 'Muokkaa liitettä ":name"', + 'update_attachment' => 'Päivitä liite', + 'delete_attachment' => 'Poista liite ":name"', + 'attachment_deleted' => 'Liite ":name" poistettu', + 'liabilities_deleted' => 'Laina ":name" poistettu', + 'attachment_updated' => 'Liite ":name" päivitetty', + 'upload_max_file_size' => 'Tiedoston enimmäiskoko: :size', + 'list_all_attachments' => 'Lista kaikista liitteistä', // transaction index - 'title_expenses' => 'Kustannukset', - 'title_withdrawal' => 'Kustannukset', - 'title_revenue' => 'Tuotto / ansio', - 'title_deposit' => 'Tuotto / ansio', - 'title_transfer' => 'Tilisiirrot', - 'title_transfers' => 'Tilisiirrot', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Kustannukset', + 'title_withdrawal' => 'Kustannukset', + 'title_revenue' => 'Tuotto / ansio', + 'title_deposit' => 'Tuotto / ansio', + 'title_transfer' => 'Tilisiirrot', + 'title_transfers' => 'Tilisiirrot', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Tämä tapahtuma on jo nosto', - 'convert_is_already_type_Deposit' => 'Tämä tapahtuma on jo talletus', - 'convert_is_already_type_Transfer' => 'Tämä tapahtuma on jo siirto', - 'convert_to_Withdrawal' => 'Muuta ":description" nostoksi', - 'convert_to_Deposit' => 'Muuta ":description" talletukseksi', - 'convert_to_Transfer' => 'Muuta ":description" siirroksi', - 'convert_options_WithdrawalDeposit' => 'Muuta nosto talletukseksi', - 'convert_options_WithdrawalTransfer' => 'Muuta nosto siirroksi', - 'convert_options_DepositTransfer' => 'Muuta talletus siirroksi', - 'convert_options_DepositWithdrawal' => 'Muuta talletus nostoksi', - 'convert_options_TransferWithdrawal' => 'Muuta siirto nostoksi', - 'convert_options_TransferDeposit' => 'Muuta siirto talletukseksi', - 'convert_Withdrawal_to_deposit' => 'Muuta tämä nosto talletukseksi', - 'convert_Withdrawal_to_transfer' => 'Muuta tämä nosto siirroksi', - 'convert_Deposit_to_withdrawal' => 'Muuta tämä talletus nostoksi', - 'convert_Deposit_to_transfer' => 'Muuta tämä talletus siirroksi', - 'convert_Transfer_to_deposit' => 'Muuta tämä siirto talletukseksi', - 'convert_Transfer_to_withdrawal' => 'Muuta tämä siirto nostoksi', - 'convert_please_set_revenue_source' => 'Valitse tuottotili jolta raha tulee.', - 'convert_please_set_asset_destination' => 'Valitse omaisuustili jonne raha menee.', - 'convert_please_set_expense_destination' => 'Valitse kulutustili jonne raha menee.', - 'convert_please_set_asset_source' => 'Valitse omaisuustili jolta raha tulee.', - 'convert_expl_w_d' => 'Kun nosto muunnetaan talletukseksi, summa talletetaan näytettävälle kohdetilille sen sijaan, että ne poistettaisiin siltä.|Kun nosto muunnetaan talletukseksi, summa talletetaan näytettäville määrätileille sen sijaan, että se poistettaisiin niiltä.', - 'convert_expl_w_t' => 'Kun nosto muutetaan siirroksi, raha siirretään pois lähdetililtä muuhun omaisuus- tai lainatilille sen sijaan, että se käytettäisiin alkuperäiseen kulutiliin.|Kun nosto muutetaan siirroksi, raha siirretään pois lähdetileiltä muihin omaisuus- tai lainatileille sen sijaan, että se käytettäisiin alkuperäisiin kulutileihin.', - 'convert_expl_d_w' => 'Kun talletus muunnetaan nostoksi, rahat poistetaan näytetyltä lähdetililtä sen sijaan, että ne talletettaisiin sille.|Kun talletus muunnetaan nostoksi, rahat poistetaan näytetyiltä lähdetileiltä sen sijaan, että ne talletettaisiin niille.', - 'convert_expl_d_t' => 'Kun muutat talletuksen siirroksi, rahat talletetaan listan kohdetilille miltä tahansa omaisuus- tai lainatililtäsi.|Kun muutat talletuksen siirroksi, rahat talletetaan listan kohdetileille miltä tahansa omaisuus- tai lainatileiltäsi.', - 'convert_expl_t_w' => 'Kun muunnat siirron nostoksi, rahat talletetaan kohdetilille, jonka olet määrittänyt täällä, sen sijaan, että ne siirrettäisiin pois.|Kun muunnat siirron nostoksi, rahat talletetaan kohdetileille, jotka olet määrittänyt täällä, sen sijaan, että ne siirrettäisiin pois.', - 'convert_expl_t_d' => 'Kun muunnat siirron talletukseksi, summa talletetaan kohdetilille, jonka näet täällä, sen sijaan että se siirrettäisiin sille.|Kun muunnat siirron talletukseksi, summa talletetaan kohdetileille, jotka näet täällä, sen sijaan että se siirrettäisiin niille.', - 'convert_select_sources' => 'Viimeistelläksesi muuntamisen, aseta alla uusi lähdetili.|Viimeistelläksesi muuntamisen, aseta alla uudet lähdetilit.', - 'convert_select_destinations' => 'Viimeistelläksesi muuntamisen, valitse alta uusi kohdetili.|Viimeistelläksesi muuntamisen, valitse alta uudet kohdetilit.', - 'converted_to_Withdrawal' => 'Tapahtuma on muutettu nostoksi', - 'converted_to_Deposit' => 'Tapahtuma on muutettu talletukseksi', - 'converted_to_Transfer' => 'Tapahtuma on muutettu siirroksi', - 'invalid_convert_selection' => 'Valitsemaasi tiliä on joko jo käytetty tässä tapahtumassa tai sitä ei ole olemassa.', - 'source_or_dest_invalid' => 'Tapahtuman tiedot eivät joko riitä tai kelpaa muunnoksen tekemiseen. Muunnos ei ole mahdollinen.', - 'convert_to_withdrawal' => 'Muuta nostoksi', - 'convert_to_deposit' => 'Muuta talletukseksi', - 'convert_to_transfer' => 'Muuta siirroksi', + 'convert_is_already_type_Withdrawal' => 'Tämä tapahtuma on jo nosto', + 'convert_is_already_type_Deposit' => 'Tämä tapahtuma on jo talletus', + 'convert_is_already_type_Transfer' => 'Tämä tapahtuma on jo siirto', + 'convert_to_Withdrawal' => 'Muuta ":description" nostoksi', + 'convert_to_Deposit' => 'Muuta ":description" talletukseksi', + 'convert_to_Transfer' => 'Muuta ":description" siirroksi', + 'convert_options_WithdrawalDeposit' => 'Muuta nosto talletukseksi', + 'convert_options_WithdrawalTransfer' => 'Muuta nosto siirroksi', + 'convert_options_DepositTransfer' => 'Muuta talletus siirroksi', + 'convert_options_DepositWithdrawal' => 'Muuta talletus nostoksi', + 'convert_options_TransferWithdrawal' => 'Muuta siirto nostoksi', + 'convert_options_TransferDeposit' => 'Muuta siirto talletukseksi', + 'convert_Withdrawal_to_deposit' => 'Muuta tämä nosto talletukseksi', + 'convert_Withdrawal_to_transfer' => 'Muuta tämä nosto siirroksi', + 'convert_Deposit_to_withdrawal' => 'Muuta tämä talletus nostoksi', + 'convert_Deposit_to_transfer' => 'Muuta tämä talletus siirroksi', + 'convert_Transfer_to_deposit' => 'Muuta tämä siirto talletukseksi', + 'convert_Transfer_to_withdrawal' => 'Muuta tämä siirto nostoksi', + 'convert_please_set_revenue_source' => 'Valitse tuottotili jolta raha tulee.', + 'convert_please_set_asset_destination' => 'Valitse omaisuustili jonne raha menee.', + 'convert_please_set_expense_destination' => 'Valitse kulutustili jonne raha menee.', + 'convert_please_set_asset_source' => 'Valitse omaisuustili jolta raha tulee.', + 'convert_expl_w_d' => 'Kun nosto muunnetaan talletukseksi, summa talletetaan näytettävälle kohdetilille sen sijaan, että ne poistettaisiin siltä.|Kun nosto muunnetaan talletukseksi, summa talletetaan näytettäville määrätileille sen sijaan, että se poistettaisiin niiltä.', + 'convert_expl_w_t' => 'Kun nosto muutetaan siirroksi, raha siirretään pois lähdetililtä muuhun omaisuus- tai lainatilille sen sijaan, että se käytettäisiin alkuperäiseen kulutiliin.|Kun nosto muutetaan siirroksi, raha siirretään pois lähdetileiltä muihin omaisuus- tai lainatileille sen sijaan, että se käytettäisiin alkuperäisiin kulutileihin.', + 'convert_expl_d_w' => 'Kun talletus muunnetaan nostoksi, rahat poistetaan näytetyltä lähdetililtä sen sijaan, että ne talletettaisiin sille.|Kun talletus muunnetaan nostoksi, rahat poistetaan näytetyiltä lähdetileiltä sen sijaan, että ne talletettaisiin niille.', + 'convert_expl_d_t' => 'Kun muutat talletuksen siirroksi, rahat talletetaan listan kohdetilille miltä tahansa omaisuus- tai lainatililtäsi.|Kun muutat talletuksen siirroksi, rahat talletetaan listan kohdetileille miltä tahansa omaisuus- tai lainatileiltäsi.', + 'convert_expl_t_w' => 'Kun muunnat siirron nostoksi, rahat talletetaan kohdetilille, jonka olet määrittänyt täällä, sen sijaan, että ne siirrettäisiin pois.|Kun muunnat siirron nostoksi, rahat talletetaan kohdetileille, jotka olet määrittänyt täällä, sen sijaan, että ne siirrettäisiin pois.', + 'convert_expl_t_d' => 'Kun muunnat siirron talletukseksi, summa talletetaan kohdetilille, jonka näet täällä, sen sijaan että se siirrettäisiin sille.|Kun muunnat siirron talletukseksi, summa talletetaan kohdetileille, jotka näet täällä, sen sijaan että se siirrettäisiin niille.', + 'convert_select_sources' => 'Viimeistelläksesi muuntamisen, aseta alla uusi lähdetili.|Viimeistelläksesi muuntamisen, aseta alla uudet lähdetilit.', + 'convert_select_destinations' => 'Viimeistelläksesi muuntamisen, valitse alta uusi kohdetili.|Viimeistelläksesi muuntamisen, valitse alta uudet kohdetilit.', + 'converted_to_Withdrawal' => 'Tapahtuma on muutettu nostoksi', + 'converted_to_Deposit' => 'Tapahtuma on muutettu talletukseksi', + 'converted_to_Transfer' => 'Tapahtuma on muutettu siirroksi', + 'invalid_convert_selection' => 'Valitsemaasi tiliä on joko jo käytetty tässä tapahtumassa tai sitä ei ole olemassa.', + 'source_or_dest_invalid' => 'Tapahtuman tiedot eivät joko riitä tai kelpaa muunnoksen tekemiseen. Muunnos ei ole mahdollinen.', + 'convert_to_withdrawal' => 'Muuta nostoksi', + 'convert_to_deposit' => 'Muuta talletukseksi', + 'convert_to_transfer' => 'Muuta siirroksi', // create new stuff: - 'create_new_withdrawal' => 'Luo uusi nosto', - 'create_new_deposit' => 'Luo uusi talletus', - 'create_new_transfer' => 'Luo uusi siirto', - 'create_new_asset' => 'Luo uusi omaisuustili', - 'create_new_liabilities' => 'Luo uusi laina', - 'create_new_expense' => 'Luo uusi maksutili', - 'create_new_revenue' => 'Luo uusi tuottotili', - 'create_new_piggy_bank' => 'Luo uusi säästöpossu', - 'create_new_bill' => 'Luo uusi lasku', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Luo uusi nosto', + 'create_new_deposit' => 'Luo uusi talletus', + 'create_new_transfer' => 'Luo uusi siirto', + 'create_new_asset' => 'Luo uusi omaisuustili', + 'create_new_liabilities' => 'Luo uusi laina', + 'create_new_expense' => 'Luo uusi maksutili', + 'create_new_revenue' => 'Luo uusi tuottotili', + 'create_new_piggy_bank' => 'Luo uusi säästöpossu', + 'create_new_bill' => 'Luo uusi lasku', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Luo uusi valuutta', - 'store_currency' => 'Tallenna uusi valuutta', - 'update_currency' => 'Päivitä valuutta', - 'new_default_currency' => ':name on nyt oletusvaluutta.', - 'cannot_delete_currency' => 'Valuuttaa :name ei voida poistaa koska se on yhä käytössä.', - 'cannot_delete_fallback_currency' => ':name on järjestelmän varavaluutta eikä sitä voi poistaa.', - 'cannot_disable_currency_journals' => 'Valuuttaa :name ei voi poistaa käytöstä koska tapahtumat käyttävät sitä yhä.', - 'cannot_disable_currency_last_left' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on viimeinen käytössä oleva valuutta.', - 'cannot_disable_currency_account_meta' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on käytössä omaisuustileissä.', - 'cannot_disable_currency_bills' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on käytössä laskuissa.', - 'cannot_disable_currency_recurring' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on käytössä toistuvissa tapahtumissa.', - 'cannot_disable_currency_available_budgets' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on käytössä budjeteissa.', - 'cannot_disable_currency_budget_limits' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on käytössä budjettirajoissa.', - 'cannot_disable_currency_current_default' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on tämän hetkinen oletusvaluutta.', - 'cannot_disable_currency_system_fallback' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on Firefly III:n oletusvaluutta.', - 'disable_EUR_side_effects' => 'Euro on Firefly III:n hätävaraoletusvaluutta. Sen poistaminen käytöstä voi aiheuttaa epätoivottuja ja yllättäviä oireita ja ainakin mitätöi tuotetakuun.', - 'deleted_currency' => 'Valuutta :name poistettu', - 'created_currency' => 'Valuutta :name luotu', - 'could_not_store_currency' => 'Uutta valuuttaa ei voitu tallentaa.', - 'updated_currency' => 'Valuutta :name päivitetty', - 'ask_site_owner' => 'Pyydä että :owner lisää, poistaa tai muokkaa valuuttoja.', - 'currencies_intro' => 'Firefly III tukee useita valuuttoja joita voit luoda ja ottaa käyttöön täällä.', - 'make_default_currency' => 'Aseta oletukseksi', - 'default_currency' => 'oletus', - 'currency_is_disabled' => 'Ei käytössä', - 'enable_currency' => 'Ota käyttöön', - 'disable_currency' => 'Poista käytöstä', - 'currencies_default_disabled' => 'Suurin osa näistä valuutoista on alkuun poistettu käytöstä. Ne pitää erikseen kytkeä päälle jos haluat käyttää niitä.', - 'currency_is_now_enabled' => 'Valuutta ":name" on otettu käyttöön', - 'currency_is_now_disabled' => 'Valuutta ":name" poistettiin käytöstä', + 'create_currency' => 'Luo uusi valuutta', + 'store_currency' => 'Tallenna uusi valuutta', + 'update_currency' => 'Päivitä valuutta', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Valuuttaa :name ei voida poistaa koska se on yhä käytössä.', + 'cannot_delete_fallback_currency' => ':name on järjestelmän varavaluutta eikä sitä voi poistaa.', + 'cannot_disable_currency_journals' => 'Valuuttaa :name ei voi poistaa käytöstä koska tapahtumat käyttävät sitä yhä.', + 'cannot_disable_currency_last_left' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on viimeinen käytössä oleva valuutta.', + 'cannot_disable_currency_account_meta' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on käytössä omaisuustileissä.', + 'cannot_disable_currency_bills' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on käytössä laskuissa.', + 'cannot_disable_currency_recurring' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on käytössä toistuvissa tapahtumissa.', + 'cannot_disable_currency_available_budgets' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on käytössä budjeteissa.', + 'cannot_disable_currency_budget_limits' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on käytössä budjettirajoissa.', + 'cannot_disable_currency_current_default' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on tämän hetkinen oletusvaluutta.', + 'cannot_disable_currency_system_fallback' => 'Valuuttaa :name ei voi poistaa käytöstä koska se on Firefly III:n oletusvaluutta.', + 'disable_EUR_side_effects' => 'Euro on Firefly III:n hätävaraoletusvaluutta. Sen poistaminen käytöstä voi aiheuttaa epätoivottuja ja yllättäviä oireita ja ainakin mitätöi tuotetakuun.', + 'deleted_currency' => 'Valuutta :name poistettu', + 'created_currency' => 'Valuutta :name luotu', + 'could_not_store_currency' => 'Uutta valuuttaa ei voitu tallentaa.', + 'updated_currency' => 'Valuutta :name päivitetty', + 'ask_site_owner' => 'Pyydä että :owner lisää, poistaa tai muokkaa valuuttoja.', + 'currencies_intro' => 'Firefly III tukee useita valuuttoja joita voit luoda ja ottaa käyttöön täällä.', + 'make_default_currency' => 'Aseta oletukseksi', + 'default_currency' => 'oletus', + 'currency_is_disabled' => 'Ei käytössä', + 'enable_currency' => 'Ota käyttöön', + 'disable_currency' => 'Poista käytöstä', + 'currencies_default_disabled' => 'Suurin osa näistä valuutoista on alkuun poistettu käytöstä. Ne pitää erikseen kytkeä päälle jos haluat käyttää niitä.', + 'currency_is_now_enabled' => 'Valuutta ":name" on otettu käyttöön', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Valuutta ":name" poistettiin käytöstä', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Pakolliset kentät', - 'optionalFields' => 'Valinnaiset kentät', - 'options' => 'Valinnat', + 'mandatoryFields' => 'Pakolliset kentät', + 'optionalFields' => 'Valinnaiset kentät', + 'options' => 'Valinnat', // budgets: - 'daily_budgets' => 'Päivittäiset budjetit', - 'weekly_budgets' => 'Viikoittaiset budjetit', - 'monthly_budgets' => 'Kuukausittaiset budjetit', - 'quarterly_budgets' => 'Neljännesvuosittaiset budjetit', - 'half_year_budgets' => 'Puolivuosittaiset budjetit', - 'yearly_budgets' => 'Vuosittaiset budjetit', - 'other_budgets' => 'Mukautetun ajan budjetit', - 'budget_limit_not_in_range' => 'Tämä summa on voimassa välillä :start - :end:', - 'total_available_budget' => 'Budjetissa jäljellä (välillä :start ja :end)', - 'total_available_budget_in_currency' => 'Budjetissa jäljellä valuutassa :currency', - 'see_below' => 'katso alla', - 'create_new_budget' => 'Luo uusi budjetti', - 'store_new_budget' => 'Tallenna uusi budjetti', - 'stored_new_budget' => 'Tallennettiin uusi budjetti ":name"', - 'available_between' => 'Rahaa jäljellä välillä :start ja :end', - 'transactionsWithoutBudget' => 'Kulut ilman budjettia', - 'transactions_no_budget' => 'Kulut ilman budjettia välillä :start ja :end', - 'spent_between' => 'Jo kulutettu välillä :start ja :end', - 'set_available_amount' => 'Aseta käytettävissä oleva summa', - 'update_available_amount' => 'Päivitä käytettävissä oleva summa', - 'ab_basic_modal_explain' => 'Käytä tätä lomaketta arvioidessasi kuinka paljon uskot pystyväsi budjetoimaan (kokonaisuudessaan, valuutassa :currency) valitulla jaksolla.', - 'createBudget' => 'Uusi budjetti', - 'invalid_currency' => 'Tämä ei kelpaa valuutaksi', - 'invalid_amount' => 'Anna summa', - 'set_ab' => 'Käytettävissä oleva budjetti on asetettu', - 'updated_ab' => 'Käytettävissä oleva budjetti on päivitetty', - 'deleted_ab' => 'Käytettävissä oleva budjetti on poistettu', - 'deleted_bl' => 'Budjetoitu summa on poistettu', - 'alt_currency_ab_create' => 'Aseta käytettävissä oleva budjetti toisessa valuutassa', - 'bl_create_btn' => 'Aseta budjetti toisessa valuutassa', - 'inactiveBudgets' => 'Ei käytössä olevat budjetit', - 'without_budget_between' => 'Siirrot ilman budjettia välillä :start ja :end', - 'delete_budget' => 'Poista budjetti ":name"', - 'deleted_budget' => 'Poistettiin budjetti ":name"', - 'edit_budget' => 'Muokkaa budjettia ":name"', - 'updated_budget' => 'Päivitettiin budjetti ":name"', - 'update_amount' => 'Päivitä summa', - 'update_budget' => 'Päivitä budjetti', - 'update_budget_amount_range' => 'Päivitä (odotettavissa oleva) jäljellä oleva summa välillä :start ja :end', - 'set_budget_limit_title' => 'Aseta budjetoitu summa budjetille :budget välillä :start ja :end', - 'set_budget_limit' => 'Aseta budjetoitu summa', - 'budget_period_navigator' => 'Jakson valitsin', - 'info_on_available_amount' => 'Paljonko rahaa minulla on jäljellä?', - 'available_amount_indication' => 'Käytä näitä arvoja arvioidaksesi kokonaisbudjettiasi.', - 'suggested' => 'Ehdotus', - 'average_between' => 'Keskiarvo välillä :start ja :end', - 'transferred_in' => 'Siirretty (sisään)', - 'transferred_away' => 'Siirretty (ulos)', - 'auto_budget_none' => 'Ei automaattibudjettia', - 'auto_budget_reset' => 'Aseta sama kiinteä summa kaikille jaksoille', - 'auto_budget_rollover' => 'Kasvata summaa joka jaksossa', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Päivittäin', - 'auto_budget_period_weekly' => 'Viikoittain', - 'auto_budget_period_monthly' => 'Kuukausittain', - 'auto_budget_period_quarterly' => 'Neljännesvuosittain', - 'auto_budget_period_half_year' => 'Puoli-vuosittain', - 'auto_budget_period_yearly' => 'Vuosittain', - 'auto_budget_help' => 'Voit lukea lisää tästä ominaisuudesta ohjeesta. Napsauta oikean yläkulman (?)-kuvaketta.', - 'auto_budget_reset_icon' => 'Tämä budjetti asetetaan määräajoin', - 'auto_budget_rollover_icon' => 'Budjetin summa kasvaa säännöllisesti', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Poista budjetoitu summa :currency', + 'daily_budgets' => 'Päivittäiset budjetit', + 'weekly_budgets' => 'Viikoittaiset budjetit', + 'monthly_budgets' => 'Kuukausittaiset budjetit', + 'quarterly_budgets' => 'Neljännesvuosittaiset budjetit', + 'half_year_budgets' => 'Puolivuosittaiset budjetit', + 'yearly_budgets' => 'Vuosittaiset budjetit', + 'other_budgets' => 'Mukautetun ajan budjetit', + 'budget_limit_not_in_range' => 'Tämä summa on voimassa välillä :start - :end:', + 'total_available_budget' => 'Budjetissa jäljellä (välillä :start ja :end)', + 'total_available_budget_in_currency' => 'Budjetissa jäljellä valuutassa :currency', + 'see_below' => 'katso alla', + 'create_new_budget' => 'Luo uusi budjetti', + 'store_new_budget' => 'Tallenna uusi budjetti', + 'stored_new_budget' => 'Tallennettiin uusi budjetti ":name"', + 'available_between' => 'Rahaa jäljellä välillä :start ja :end', + 'transactionsWithoutBudget' => 'Kulut ilman budjettia', + 'transactions_no_budget' => 'Kulut ilman budjettia välillä :start ja :end', + 'spent_between' => 'Jo kulutettu välillä :start ja :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Aseta käytettävissä oleva summa', + 'update_available_amount' => 'Päivitä käytettävissä oleva summa', + 'ab_basic_modal_explain' => 'Käytä tätä lomaketta arvioidessasi kuinka paljon uskot pystyväsi budjetoimaan (kokonaisuudessaan, valuutassa :currency) valitulla jaksolla.', + 'createBudget' => 'Uusi budjetti', + 'invalid_currency' => 'Tämä ei kelpaa valuutaksi', + 'invalid_amount' => 'Anna summa', + 'set_ab' => 'Käytettävissä oleva budjetti on asetettu', + 'updated_ab' => 'Käytettävissä oleva budjetti on päivitetty', + 'deleted_ab' => 'Käytettävissä oleva budjetti on poistettu', + 'deleted_bl' => 'Budjetoitu summa on poistettu', + 'alt_currency_ab_create' => 'Aseta käytettävissä oleva budjetti toisessa valuutassa', + 'bl_create_btn' => 'Aseta budjetti toisessa valuutassa', + 'inactiveBudgets' => 'Ei käytössä olevat budjetit', + 'without_budget_between' => 'Siirrot ilman budjettia välillä :start ja :end', + 'delete_budget' => 'Poista budjetti ":name"', + 'deleted_budget' => 'Poistettiin budjetti ":name"', + 'edit_budget' => 'Muokkaa budjettia ":name"', + 'updated_budget' => 'Päivitettiin budjetti ":name"', + 'update_amount' => 'Päivitä summa', + 'update_budget' => 'Päivitä budjetti', + 'update_budget_amount_range' => 'Päivitä (odotettavissa oleva) jäljellä oleva summa välillä :start ja :end', + 'set_budget_limit_title' => 'Aseta budjetoitu summa budjetille :budget välillä :start ja :end', + 'set_budget_limit' => 'Aseta budjetoitu summa', + 'budget_period_navigator' => 'Jakson valitsin', + 'info_on_available_amount' => 'Paljonko rahaa minulla on jäljellä?', + 'available_amount_indication' => 'Käytä näitä arvoja arvioidaksesi kokonaisbudjettiasi.', + 'suggested' => 'Ehdotus', + 'average_between' => 'Keskiarvo välillä :start ja :end', + 'transferred_in' => 'Siirretty (sisään)', + 'transferred_away' => 'Siirretty (ulos)', + 'auto_budget_none' => 'Ei automaattibudjettia', + 'auto_budget_reset' => 'Aseta sama kiinteä summa kaikille jaksoille', + 'auto_budget_rollover' => 'Kasvata summaa joka jaksossa', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Päivittäin', + 'auto_budget_period_weekly' => 'Viikoittain', + 'auto_budget_period_monthly' => 'Kuukausittain', + 'auto_budget_period_quarterly' => 'Neljännesvuosittain', + 'auto_budget_period_half_year' => 'Puoli-vuosittain', + 'auto_budget_period_yearly' => 'Vuosittain', + 'auto_budget_help' => 'Voit lukea lisää tästä ominaisuudesta ohjeesta. Napsauta oikean yläkulman (?)-kuvaketta.', + 'auto_budget_reset_icon' => 'Tämä budjetti asetetaan määräajoin', + 'auto_budget_rollover_icon' => 'Budjetin summa kasvaa säännöllisesti', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Poista budjetoitu summa :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Ei odotettavissa tässä jaksossa', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Ei (vielä)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Lasku täsmää tapahtumiin välillä :low ja :high.', - 'running_again_loss' => 'Aikaisemmin tälle laskulle yhdistetyt tapahtumat saattavat menettää yhteytensä, jos ne eivät (enää) täytä säännön ehtoja.', - 'bill_related_rules' => 'Tähän laskuun liittyvät säännöt', - 'repeats' => 'Toistot', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Linkitetyt tapahtumat', - 'auto_match_on' => 'Firefly III:n automaattisesti yhdistämät', - 'auto_match_off' => 'Näitä Firefly III ei ole automaattisesti yhdistänyt', - 'next_expected_match' => 'Seuraava lasku odotettavissa', - 'delete_bill' => 'Poista lasku ":name"', - 'deleted_bill' => 'Poistettiin lasku ":name"', - 'edit_bill' => 'Muokkaa laskua ":name"', - 'more' => 'Lisää', - 'rescan_old' => 'Aja säännöt uudestaan, kaikille tapahtumille', - 'update_bill' => 'Päivitä lasku', - 'updated_bill' => 'Päivitettiin lasku ":name"', - 'store_new_bill' => 'Tallenna uusi lasku', - 'stored_new_bill' => 'Tallennettiin uusi lasku ":name"', - 'cannot_scan_inactive_bill' => 'Käytöstä poistetuille laskuille ei tehdä sääntövertailua.', - 'rescanned_bill' => 'Kaikki skannattiin uudelleen ja linkitettiin :count tapahtuma laskuun.|Kaikki skannattiin uudelleen ja linkitettiin :count tapahtumaa laskuun.', - 'average_bill_amount_year' => 'Laskun summa keskimäärin (:year)', - 'average_bill_amount_overall' => 'Laskun summa keskimäärin (kaikenkaikkiaan)', - 'bill_is_active' => 'Lasku on aktiivinen', - 'bill_expected_between' => 'Odotettavissa välillä :start ja :end', - 'bill_will_automatch' => 'Lasku yhdistetään automaattisesti ehdot täyttäviin tapahtumiin', - 'skips_over' => 'ohittaa', - 'bill_store_error' => 'Uuden laskusi tallentamisessa tapahtui odottamaton virhe. Virhe kirjattiin lokitiedostoon.', - 'list_inactive_rule' => 'käytöstä poistettu sääntö', - 'bill_edit_rules' => 'Firefly III yrittää muokata myös tähän laskuun liittyvää sääntöä. Jos kuitenkin olet muokannut tätä sääntöä itse, Firefly III ei muuta mitään. Firefly III yrittää muokata myös tähän laskuun liittyviä :count sääntöä. Jos kuitenkin olet muokannut näitä sääntöjä itse, Firefly III ei muuta mitään.', - 'bill_expected_date' => 'Odotettavissa :date', - 'bill_expected_date_js' => 'Odotettavissa {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Maksettu {date}', - 'bill_repeats_weekly' => 'Toistuu viikoittain', - 'bill_repeats_monthly' => 'Toistuu kuukausittain', - 'bill_repeats_quarterly' => 'Toistuu neljännesvuosittain', - 'bill_repeats_half-year' => 'Toistuu puolen vuoden välein', - 'bill_repeats_yearly' => 'Toistuu vuosittain', - 'bill_repeats_weekly_other' => 'Toistuu joka toinen viikko', - 'bill_repeats_monthly_other' => 'Toistuu joka toinen kuukausi', - 'bill_repeats_quarterly_other' => 'Toistuu joka toinen neljännes', - 'bill_repeats_half-year_other' => 'Toistuu vuosittain', - 'bill_repeats_yearly_other' => 'Toistuu joka toinen vuosi', - 'bill_repeats_weekly_skip' => 'Toistuu {skip} viikon välein', - 'bill_repeats_monthly_skip' => 'Toistuu {skip} kuukauden välein', - 'bill_repeats_quarterly_skip' => 'Toista {skip} vuosineljänneksen välein', - 'bill_repeats_half-year_skip' => 'Toistuu {skip} puolen vuoden välein', - 'bill_repeats_yearly_skip' => 'Toistuu {skip} vuoden välein', - 'subscriptions' => 'Tilaukset', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Ikuisesti', - 'extension_date_is' => 'Laajennuksen päivämäärä on {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Ei odotettavissa tässä jaksossa', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Ei (vielä)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Lasku täsmää tapahtumiin välillä :low ja :high.', + 'running_again_loss' => 'Aikaisemmin tälle laskulle yhdistetyt tapahtumat saattavat menettää yhteytensä, jos ne eivät (enää) täytä säännön ehtoja.', + 'bill_related_rules' => 'Tähän laskuun liittyvät säännöt', + 'repeats' => 'Toistot', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Linkitetyt tapahtumat', + 'auto_match_on' => 'Firefly III:n automaattisesti yhdistämät', + 'auto_match_off' => 'Näitä Firefly III ei ole automaattisesti yhdistänyt', + 'next_expected_match' => 'Seuraava lasku odotettavissa', + 'delete_bill' => 'Poista lasku ":name"', + 'deleted_bill' => 'Poistettiin lasku ":name"', + 'edit_bill' => 'Muokkaa laskua ":name"', + 'more' => 'Lisää', + 'rescan_old' => 'Aja säännöt uudestaan, kaikille tapahtumille', + 'update_bill' => 'Päivitä lasku', + 'updated_bill' => 'Päivitettiin lasku ":name"', + 'store_new_bill' => 'Tallenna uusi lasku', + 'stored_new_bill' => 'Tallennettiin uusi lasku ":name"', + 'cannot_scan_inactive_bill' => 'Käytöstä poistetuille laskuille ei tehdä sääntövertailua.', + 'rescanned_bill' => 'Kaikki skannattiin uudelleen ja linkitettiin :count tapahtuma laskuun.|Kaikki skannattiin uudelleen ja linkitettiin :count tapahtumaa laskuun.', + 'average_bill_amount_year' => 'Laskun summa keskimäärin (:year)', + 'average_bill_amount_overall' => 'Laskun summa keskimäärin (kaikenkaikkiaan)', + 'bill_is_active' => 'Lasku on aktiivinen', + 'bill_expected_between' => 'Odotettavissa välillä :start ja :end', + 'bill_will_automatch' => 'Lasku yhdistetään automaattisesti ehdot täyttäviin tapahtumiin', + 'skips_over' => 'ohittaa', + 'bill_store_error' => 'Uuden laskusi tallentamisessa tapahtui odottamaton virhe. Virhe kirjattiin lokitiedostoon.', + 'list_inactive_rule' => 'käytöstä poistettu sääntö', + 'bill_edit_rules' => 'Firefly III yrittää muokata myös tähän laskuun liittyvää sääntöä. Jos kuitenkin olet muokannut tätä sääntöä itse, Firefly III ei muuta mitään. Firefly III yrittää muokata myös tähän laskuun liittyviä :count sääntöä. Jos kuitenkin olet muokannut näitä sääntöjä itse, Firefly III ei muuta mitään.', + 'bill_expected_date' => 'Odotettavissa :date', + 'bill_expected_date_js' => 'Odotettavissa {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Maksettu {date}', + 'bill_repeats_weekly' => 'Toistuu viikoittain', + 'bill_repeats_monthly' => 'Toistuu kuukausittain', + 'bill_repeats_quarterly' => 'Toistuu neljännesvuosittain', + 'bill_repeats_half-year' => 'Toistuu puolen vuoden välein', + 'bill_repeats_yearly' => 'Toistuu vuosittain', + 'bill_repeats_weekly_other' => 'Toistuu joka toinen viikko', + 'bill_repeats_monthly_other' => 'Toistuu joka toinen kuukausi', + 'bill_repeats_quarterly_other' => 'Toistuu joka toinen neljännes', + 'bill_repeats_half-year_other' => 'Toistuu vuosittain', + 'bill_repeats_yearly_other' => 'Toistuu joka toinen vuosi', + 'bill_repeats_weekly_skip' => 'Toistuu {skip} viikon välein', + 'bill_repeats_monthly_skip' => 'Toistuu {skip} kuukauden välein', + 'bill_repeats_quarterly_skip' => 'Toista {skip} vuosineljänneksen välein', + 'bill_repeats_half-year_skip' => 'Toistuu {skip} puolen vuoden välein', + 'bill_repeats_yearly_skip' => 'Toistuu {skip} vuoden välein', + 'subscriptions' => 'Tilaukset', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Ikuisesti', + 'extension_date_is' => 'Laajennuksen päivämäärä on {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'Sinulla on :count passiivinen (arkistoitu) tili, jota voit tarkastella tällä erillisellä sivulla.|Sinulla on :count passiivista (arkistoitua) tiliä, joita voit tarkastella tällä erillisellä sivulla.', - 'all_accounts_inactive' => 'Nämä ovat käytöstä poistettuja tilejä.', - 'active_account_link' => 'Tämä linkki vie sinut takaisin aktiivisiin tileihisi.', - 'account_missing_transaction' => 'Tiliä #:id (":name") ei voi tarkastella suoraan, mutta Firefly:lta puuttuvat uudelleenohjaustiedot.', - 'cc_monthly_payment_date_help' => 'Valitse mikä tahansa vuosi ja mikä tahansa kuukausi, ne jätetään kuitenkin huomiotta. Vain kuukauden päivä on merkityksellinen.', - 'details_for_asset' => 'Yksityiskohdat omaisuustilille ":name"', - 'details_for_expense' => 'Yksityiskohdat kulutustilille ":name"', - 'details_for_revenue' => 'Yksityiskohdat tuottotilille ":name"', - 'details_for_cash' => 'Yksityiskohdat käteistilille ":name"', - 'store_new_asset_account' => 'Tallenna uusi omaisuustili', - 'store_new_expense_account' => 'Tallenna uusi kulutustili', - 'store_new_revenue_account' => 'Tallenna uusi tuottotili', - 'edit_asset_account' => 'Muokkaa omaisuustiliä ":name"', - 'edit_expense_account' => 'Muokkaa kulutustiliä ":name"', - 'edit_revenue_account' => 'Muokkaa tuottotiliä ":name"', - 'delete_asset_account' => 'Poista omaisuustili ":name"', - 'delete_expense_account' => 'Poista kulutustili ":name"', - 'delete_revenue_account' => 'Poista tuottotili ":name"', - 'delete_liabilities_account' => 'Poista laina ":name"', - 'asset_deleted' => 'Poistettiin onnistuneesti omaisuustili ":name"', - 'account_deleted' => 'Tilin ":name" poistaminen onnistui', - 'expense_deleted' => 'Poistettiin onnistuneesti kulutustili ":name"', - 'revenue_deleted' => 'Poistettiin onnistuneesti tuottotili ":name"', - 'update_asset_account' => 'Päivitä omaisuustili', - 'update_undefined_account' => 'Päivitä tili', - 'update_liabilities_account' => 'Päivitä laina', - 'update_expense_account' => 'Päivitä kulutustili', - 'update_revenue_account' => 'Päivitä tuottotili', - 'make_new_asset_account' => 'Luo uusi omaisuustili', - 'make_new_expense_account' => 'Luo uusi kulutustili', - 'make_new_revenue_account' => 'Luo uusi tuottotili', - 'make_new_liabilities_account' => 'Luo uusi laina', - 'asset_accounts' => 'Käyttötilit', - 'undefined_accounts' => 'Tilit', - 'asset_accounts_inactive' => 'Käyttötilit (ei käytössä)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Kulutustilit', - 'expense_accounts_inactive' => 'Kulutustilit (ei käytössä)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Tuottotilit', - 'revenue_accounts_inactive' => 'Tuottotilit (ei käytössä)', - 'cash_accounts' => 'Käteistilit', - 'Cash account' => 'Käteistili', - 'liabilities_accounts' => 'Lainat', - 'liabilities_accounts_inactive' => 'Lainat (Ei aktiiviset)', - 'reconcile_account' => 'Täsmäytä tili ":account"', - 'overview_of_reconcile_modal' => 'Täsmäytyksen yleiskatsaus', - 'delete_reconciliation' => 'Poista täsmäytys', - 'update_reconciliation' => 'Päivitä täsmäytys', - 'amount_cannot_be_zero' => 'Summa yhteensä ei voi olla nolla', - 'end_of_reconcile_period' => 'Täsmäytysjakson loppu: :period', - 'start_of_reconcile_period' => 'Täsmäytysjakson alku: :period', - 'start_balance' => 'Alkusaldo', - 'end_balance' => 'Loppusaldo', - 'update_balance_dates_instruction' => 'Täsmää yllä olevat summat ja päivämäärät tiliotteesi kanssa ja paina "Aloita täsmäytys"', - 'select_transactions_instruction' => 'Valitse tapahtumat jotka löytyvät pankkisi tiliotteesta.', - 'select_range_and_balance' => 'Varmista ensin päivämäärärajat sekä saldot. Valitse sitten "Aloita täsmäytys"', - 'date_change_instruction' => 'Jos muutat päivämäärärajoja nyt, kaikki muutokset menetetään.', - 'update_selection' => 'Päivitä valinta', - 'store_reconcile' => 'Tallenna täsmäytys', - 'reconciliation_transaction' => 'Täsmäytystapahtuma', - 'Reconciliation' => 'Täsmäytys', - 'reconciliation' => 'Täsmäytys', - 'reconcile_options' => 'Täsmäytysvalinnat', - 'reconcile_range' => 'Täsmäytyksen aikarajat', - 'start_reconcile' => 'Aloita täsmäytys', - 'cash_account_type' => 'Käteinen', - 'cash' => 'käteinen', - 'cant_find_redirect_account' => 'Firefly III yritti tehdä pyytämääsi uudelleenohjausta mutta epäonnistui. Pahoittelut siitä. Takaisin valikkoon.', - 'account_type' => 'Tilin tyyppi', - 'save_transactions_by_moving' => 'Tallenna tämä tapahtuma siirtämällä se toiselle tilille:|Tallenna nämä tapahtumat siirtämällä ne toiselle tilille:', - 'save_transactions_by_moving_js' => 'Ei tapahtumia|Tallenna tämä tapahtuma siirtämällä se toiselle tilille. |Tallenna nämä tapahtumat siirtämällä ne toiselle tilille.', - 'stored_new_account' => 'Uusi tili ":name" tallennettiin!', - 'stored_new_account_js' => 'Uusi tili "{name}" tallennettu!', - 'updated_account' => 'Tiliä ":name" päivitettiin', - 'updated_account_js' => 'Päivitetty tili "{title}".', - 'credit_card_options' => 'Luottokorttivalinnat', - 'no_transactions_account' => 'Tilillä ":name" ei ole yhtään tapahtumaa (tässä jaksossa).', - 'no_transactions_period' => 'Ei tapahtumia (tässä jaksossa).', - 'no_data_for_chart' => 'Tämän kuvaajan luomiseen ei ole (vielä) riittävästi tietoja.', - 'select_at_least_one_account' => 'Valitse vähintään yksi omaisuustili', - 'select_at_least_one_category' => 'Valitse vähintään yksi kategoria', - 'select_at_least_one_budget' => 'Valitse vähintään yksi budjetti', - 'select_at_least_one_tag' => 'Valitse vähintään yksi tägi', - 'select_at_least_one_expense' => 'Valitse vähintään yksi meno- ja tulotilien kombinaatio. Jos sinulla ei ole yhtään (lista on tyhjä) tämä raportti ei ole saatavilla.', - 'account_default_currency' => 'Valitsit tälle tilille juuri oletusvaluutan.', - 'reconcile_has_more' => 'Firefly III:n pääkirjassa on enemmän rahaa kuin mitä sinun pankkisi sanoo sinulla olevan. Sinulla on useita valintoja - valitse mitä haluat tehdä. Kun olet valmis valitse "Vahvista täsmäytys".', - 'reconcile_has_less' => 'Firefly III:n pääkirjassa on vähemmän rahaa kuin mitä sinun pankkisi sanoo sinulla olevan. Sinulla on useita valintoja - valitse mitä haluat tehdä. Kun olet valmis valitse "Vahvista täsmäytys".', - 'reconcile_is_equal' => 'Firefly III:n pääkirja ja sinun pankkisi lausunnot täsmäävät. Mitään ei tarvitse tehdä. Valitse "Vahvista täsmäytys" vahvistaaksesi antamasi tiedot.', - 'create_pos_reconcile_transaction' => 'Merkitse valitut tapahtumat selvitetyksi ja luo korjaus lisäämällä :amount tälle omaisuustilille.', - 'create_neg_reconcile_transaction' => 'Merkitse valitut tapahtumat selvitetyksi ja luo korjaus poistamalla :amount tältä omaisuustililtä.', - 'reconcile_do_nothing' => 'Merkitse valitut tapahtumat selvitetyksi, mutta älä korjaa.', - 'reconcile_go_back' => 'Voit aina muokata tai poistaa korjauksia myöhemmin.', - 'must_be_asset_account' => 'Voit täsmäyttää ainoastaan omaisuustilejä', - 'reconciliation_stored' => 'Täsmäytys tallennettu', - 'reconciliation_error' => 'Tapahtuneen virheen vuoksi tapahtumat merkittiin tarkistetuiksi mutta korjausta ei tallennettu: :error.', - 'reconciliation_transaction_title' => 'Täsmäytys (:from - :to)', - 'sum_of_reconciliation' => 'Täsmäytykset yhteensä', - 'reconcile_this_account' => 'Täsmäytä tämä tili', - 'reconcile' => 'Täsmäytä', - 'show' => 'Näytä', - 'confirm_reconciliation' => 'Vahvista täsmäytys', - 'submitted_start_balance' => 'Annettu avaussaldo', - 'selected_transactions' => 'Valitut tapahtumat (:count)', - 'already_cleared_transactions' => 'Jo selvitetyt tapahtumat (:count)', - 'submitted_end_balance' => 'Annettu loppusaldo', - 'initial_balance_description' => 'Avaussaldo tilille ":account"', - 'liability_credit_description' => 'Lainan luotto tilille ":account"', - 'interest_calc_' => 'tuntematon', - 'interest_calc_daily' => 'Päivässä', - 'interest_calc_monthly' => 'Kuukaudessa', - 'interest_calc_yearly' => 'Vuodessa', - 'interest_calc_weekly' => 'Viikossa', - 'interest_calc_half-year' => 'Puolessa vuodessa', - 'interest_calc_quarterly' => 'Neljännestä kohden', - 'initial_balance_account' => 'Alkutasetili :account', - 'list_options' => 'Listan valinnat', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'Sinulla on :count passiivinen (arkistoitu) tili, jota voit tarkastella tällä erillisellä sivulla.|Sinulla on :count passiivista (arkistoitua) tiliä, joita voit tarkastella tällä erillisellä sivulla.', + 'all_accounts_inactive' => 'Nämä ovat käytöstä poistettuja tilejä.', + 'active_account_link' => 'Tämä linkki vie sinut takaisin aktiivisiin tileihisi.', + 'account_missing_transaction' => 'Tiliä #:id (":name") ei voi tarkastella suoraan, mutta Firefly:lta puuttuvat uudelleenohjaustiedot.', + 'cc_monthly_payment_date_help' => 'Valitse mikä tahansa vuosi ja mikä tahansa kuukausi, ne jätetään kuitenkin huomiotta. Vain kuukauden päivä on merkityksellinen.', + 'details_for_asset' => 'Yksityiskohdat omaisuustilille ":name"', + 'details_for_expense' => 'Yksityiskohdat kulutustilille ":name"', + 'details_for_revenue' => 'Yksityiskohdat tuottotilille ":name"', + 'details_for_cash' => 'Yksityiskohdat käteistilille ":name"', + 'store_new_asset_account' => 'Tallenna uusi omaisuustili', + 'store_new_expense_account' => 'Tallenna uusi kulutustili', + 'store_new_revenue_account' => 'Tallenna uusi tuottotili', + 'edit_asset_account' => 'Muokkaa omaisuustiliä ":name"', + 'edit_expense_account' => 'Muokkaa kulutustiliä ":name"', + 'edit_revenue_account' => 'Muokkaa tuottotiliä ":name"', + 'delete_asset_account' => 'Poista omaisuustili ":name"', + 'delete_expense_account' => 'Poista kulutustili ":name"', + 'delete_revenue_account' => 'Poista tuottotili ":name"', + 'delete_liabilities_account' => 'Poista laina ":name"', + 'asset_deleted' => 'Poistettiin onnistuneesti omaisuustili ":name"', + 'account_deleted' => 'Tilin ":name" poistaminen onnistui', + 'expense_deleted' => 'Poistettiin onnistuneesti kulutustili ":name"', + 'revenue_deleted' => 'Poistettiin onnistuneesti tuottotili ":name"', + 'update_asset_account' => 'Päivitä omaisuustili', + 'update_undefined_account' => 'Päivitä tili', + 'update_liabilities_account' => 'Päivitä laina', + 'update_expense_account' => 'Päivitä kulutustili', + 'update_revenue_account' => 'Päivitä tuottotili', + 'make_new_asset_account' => 'Luo uusi omaisuustili', + 'make_new_expense_account' => 'Luo uusi kulutustili', + 'make_new_revenue_account' => 'Luo uusi tuottotili', + 'make_new_liabilities_account' => 'Luo uusi laina', + 'asset_accounts' => 'Käyttötilit', + 'undefined_accounts' => 'Tilit', + 'asset_accounts_inactive' => 'Käyttötilit (ei käytössä)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Kulutustilit', + 'expense_accounts_inactive' => 'Kulutustilit (ei käytössä)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Tuottotilit', + 'revenue_accounts_inactive' => 'Tuottotilit (ei käytössä)', + 'cash_accounts' => 'Käteistilit', + 'Cash account' => 'Käteistili', + 'liabilities_accounts' => 'Lainat', + 'liabilities_accounts_inactive' => 'Lainat (Ei aktiiviset)', + 'reconcile_account' => 'Täsmäytä tili ":account"', + 'overview_of_reconcile_modal' => 'Täsmäytyksen yleiskatsaus', + 'delete_reconciliation' => 'Poista täsmäytys', + 'update_reconciliation' => 'Päivitä täsmäytys', + 'amount_cannot_be_zero' => 'Summa yhteensä ei voi olla nolla', + 'end_of_reconcile_period' => 'Täsmäytysjakson loppu: :period', + 'start_of_reconcile_period' => 'Täsmäytysjakson alku: :period', + 'start_balance' => 'Alkusaldo', + 'end_balance' => 'Loppusaldo', + 'update_balance_dates_instruction' => 'Täsmää yllä olevat summat ja päivämäärät tiliotteesi kanssa ja paina "Aloita täsmäytys"', + 'select_transactions_instruction' => 'Valitse tapahtumat jotka löytyvät pankkisi tiliotteesta.', + 'select_range_and_balance' => 'Varmista ensin päivämäärärajat sekä saldot. Valitse sitten "Aloita täsmäytys"', + 'date_change_instruction' => 'Jos muutat päivämäärärajoja nyt, kaikki muutokset menetetään.', + 'update_selection' => 'Päivitä valinta', + 'store_reconcile' => 'Tallenna täsmäytys', + 'reconciliation_transaction' => 'Täsmäytystapahtuma', + 'Reconciliation' => 'Täsmäytys', + 'reconciliation' => 'Täsmäytys', + 'reconcile_options' => 'Täsmäytysvalinnat', + 'reconcile_range' => 'Täsmäytyksen aikarajat', + 'start_reconcile' => 'Aloita täsmäytys', + 'cash_account_type' => 'Käteinen', + 'cash' => 'käteinen', + 'cant_find_redirect_account' => 'Firefly III yritti tehdä pyytämääsi uudelleenohjausta mutta epäonnistui. Pahoittelut siitä. Takaisin valikkoon.', + 'account_type' => 'Tilin tyyppi', + 'save_transactions_by_moving' => 'Tallenna tämä tapahtuma siirtämällä se toiselle tilille:|Tallenna nämä tapahtumat siirtämällä ne toiselle tilille:', + 'save_transactions_by_moving_js' => 'Ei tapahtumia|Tallenna tämä tapahtuma siirtämällä se toiselle tilille. |Tallenna nämä tapahtumat siirtämällä ne toiselle tilille.', + 'stored_new_account' => 'Uusi tili ":name" tallennettiin!', + 'stored_new_account_js' => 'Uusi tili "{name}" tallennettu!', + 'updated_account' => 'Tiliä ":name" päivitettiin', + 'updated_account_js' => 'Päivitetty tili "{title}".', + 'credit_card_options' => 'Luottokorttivalinnat', + 'no_transactions_account' => 'Tilillä ":name" ei ole yhtään tapahtumaa (tässä jaksossa).', + 'no_transactions_period' => 'Ei tapahtumia (tässä jaksossa).', + 'no_data_for_chart' => 'Tämän kuvaajan luomiseen ei ole (vielä) riittävästi tietoja.', + 'select_at_least_one_account' => 'Valitse vähintään yksi omaisuustili', + 'select_at_least_one_category' => 'Valitse vähintään yksi kategoria', + 'select_at_least_one_budget' => 'Valitse vähintään yksi budjetti', + 'select_at_least_one_tag' => 'Valitse vähintään yksi tägi', + 'select_at_least_one_expense' => 'Valitse vähintään yksi meno- ja tulotilien kombinaatio. Jos sinulla ei ole yhtään (lista on tyhjä) tämä raportti ei ole saatavilla.', + 'account_default_currency' => 'Valitsit tälle tilille juuri oletusvaluutan.', + 'reconcile_has_more' => 'Firefly III:n pääkirjassa on enemmän rahaa kuin mitä sinun pankkisi sanoo sinulla olevan. Sinulla on useita valintoja - valitse mitä haluat tehdä. Kun olet valmis valitse "Vahvista täsmäytys".', + 'reconcile_has_less' => 'Firefly III:n pääkirjassa on vähemmän rahaa kuin mitä sinun pankkisi sanoo sinulla olevan. Sinulla on useita valintoja - valitse mitä haluat tehdä. Kun olet valmis valitse "Vahvista täsmäytys".', + 'reconcile_is_equal' => 'Firefly III:n pääkirja ja sinun pankkisi lausunnot täsmäävät. Mitään ei tarvitse tehdä. Valitse "Vahvista täsmäytys" vahvistaaksesi antamasi tiedot.', + 'create_pos_reconcile_transaction' => 'Merkitse valitut tapahtumat selvitetyksi ja luo korjaus lisäämällä :amount tälle omaisuustilille.', + 'create_neg_reconcile_transaction' => 'Merkitse valitut tapahtumat selvitetyksi ja luo korjaus poistamalla :amount tältä omaisuustililtä.', + 'reconcile_do_nothing' => 'Merkitse valitut tapahtumat selvitetyksi, mutta älä korjaa.', + 'reconcile_go_back' => 'Voit aina muokata tai poistaa korjauksia myöhemmin.', + 'must_be_asset_account' => 'Voit täsmäyttää ainoastaan omaisuustilejä', + 'reconciliation_stored' => 'Täsmäytys tallennettu', + 'reconciliation_error' => 'Tapahtuneen virheen vuoksi tapahtumat merkittiin tarkistetuiksi mutta korjausta ei tallennettu: :error.', + 'reconciliation_transaction_title' => 'Täsmäytys (:from - :to)', + 'sum_of_reconciliation' => 'Täsmäytykset yhteensä', + 'reconcile_this_account' => 'Täsmäytä tämä tili', + 'reconcile' => 'Täsmäytä', + 'show' => 'Näytä', + 'confirm_reconciliation' => 'Vahvista täsmäytys', + 'submitted_start_balance' => 'Annettu avaussaldo', + 'selected_transactions' => 'Valitut tapahtumat (:count)', + 'already_cleared_transactions' => 'Jo selvitetyt tapahtumat (:count)', + 'submitted_end_balance' => 'Annettu loppusaldo', + 'initial_balance_description' => 'Avaussaldo tilille ":account"', + 'liability_credit_description' => 'Lainan luotto tilille ":account"', + 'interest_calc_' => 'tuntematon', + 'interest_calc_daily' => 'Päivässä', + 'interest_calc_monthly' => 'Kuukaudessa', + 'interest_calc_yearly' => 'Vuodessa', + 'interest_calc_weekly' => 'Viikossa', + 'interest_calc_half-year' => 'Puolessa vuodessa', + 'interest_calc_quarterly' => 'Neljännestä kohden', + 'initial_balance_account' => 'Alkutasetili :account', + 'list_options' => 'Listan valinnat', // categories: - 'new_category' => 'Uusi kategoria', - 'create_new_category' => 'Luo uusi kategoria', - 'without_category' => 'Ilman kategoriaa', - 'update_category' => 'Päivitä kategoria', - 'updated_category' => 'Päivitettiin kategoria ":name"', - 'categories' => 'Kategoriat', - 'edit_category' => 'Muokkaa kategoriaa ":name"', - 'no_category' => '(ei kategoriaa)', - 'unknown_category_plain' => 'No category', - 'category' => 'Kategoria', - 'delete_category' => 'Poista kategoria ":name"', - 'deleted_category' => 'Poistettiin kategoria ":name"', - 'store_category' => 'Tallenna uusi kategoria', - 'stored_category' => 'Tallennettiin uusi kategoria ":name"', - 'without_category_between' => 'Ilman kategoriaa välillä :start ja :end', + 'new_category' => 'Uusi kategoria', + 'create_new_category' => 'Luo uusi kategoria', + 'without_category' => 'Ilman kategoriaa', + 'update_category' => 'Päivitä kategoria', + 'updated_category' => 'Päivitettiin kategoria ":name"', + 'categories' => 'Kategoriat', + 'edit_category' => 'Muokkaa kategoriaa ":name"', + 'no_category' => '(ei kategoriaa)', + 'unknown_category_plain' => 'No category', + 'category' => 'Kategoria', + 'delete_category' => 'Poista kategoria ":name"', + 'deleted_category' => 'Poistettiin kategoria ":name"', + 'store_category' => 'Tallenna uusi kategoria', + 'stored_category' => 'Tallennettiin uusi kategoria ":name"', + 'without_category_between' => 'Ilman kategoriaa välillä :start ja :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Päivitä nosto', - 'update_deposit' => 'Päivitä talletus', - 'update_transaction' => 'Päivitä tapahtuma', - 'update_transfer' => 'Päivitä siirto', - 'updated_withdrawal' => 'Päivitettiin nosto ":description"', - 'updated_deposit' => 'Päivitettiin talletus ":description"', - 'updated_transfer' => 'Päivitettiin siirto ":description"', - 'no_changes_withdrawal' => 'Nosto ":description" ei muuttunut.', - 'no_changes_deposit' => 'Talletus ":description" ei muuttunut.', - 'no_changes_transfer' => 'Tilisiirto ":description" ei muuttunut.', - 'delete_withdrawal' => 'Poista nosto ":description"', - 'delete_deposit' => 'Poista talletus ":description"', - 'delete_transfer' => 'Poista siirto ":description"', - 'deleted_withdrawal' => 'Noston ":description" poisto onnistui', - 'deleted_deposit' => 'Talletuksen ":description" poisto onnistui', - 'deleted_transfer' => 'Siirron ":description" poisto onnistui', - 'deleted_reconciliation' => 'Täsmäytystapahtuma ":description" poistettiin onnistuneesti', - 'stored_journal' => 'Loit onnistuneesti uuden tapahtuman ":description"', - 'stored_journal_no_descr' => 'Loit onnistuneesti uuden tapahtumasi', - 'updated_journal_no_descr' => 'Päivitit tapahtumaasi onnistuneesti', - 'select_transactions' => 'Valitse tapahtumat', - 'rule_group_select_transactions' => 'Aja tapahtumille sääntöryhmä ":title"', - 'rule_select_transactions' => 'Aja tapahtumille sääntö ":title"', - 'stop_selection' => 'Lopeta tapahtumien valinta', - 'reconcile_selected' => 'Täsmäytä', - 'mass_delete_journals' => 'Poista tapahtumia', - 'mass_edit_journals' => 'Muokkaa tapahtumia', - 'mass_bulk_journals' => 'Muokkaa valittuja tapahtumia yhdessä', - 'mass_bulk_journals_explain' => 'Tällä lomakkeella voit muuttaa alla listattujen tapahtumien ominaisuuksia yhdellä päivityksellä. Kaikki taulukon tapahtumat päivitetään kun muutat tässä näkyviä ominaisuuksia.', - 'part_of_split' => 'Tämä tapahtuma on osa jaettua tapahtumaa. Jos et ole valinnut kaikkia tapahtuman osia, saatat tehdä muutoksen ainoastaan osaan tapahtumasta.', - 'bulk_set_new_values' => 'Käytä alla olevia kenttiä uusien arvojen antamiseen. Jos jätät ne tyhjiksi, ne tyhjennetään kaikilta. Huomaa lisäksi, että ainoastaan nostoille asetetaan budjetti.', - 'no_bulk_category' => 'Älä päivitä kategoriaa', - 'no_bulk_budget' => 'Älä päivitä budjettia', - 'no_bulk_tags' => 'Älä päivitä tägejä', - 'replace_with_these_tags' => 'Korvaa näillä tageilla', - 'append_these_tags' => 'Lisää nämä tagit', - 'mass_edit' => 'Muokkaa valittuja yksitellen', - 'bulk_edit' => 'Muokkaa kaikkia valittuja yhtäaikaa', - 'mass_delete' => 'Poista valitut', - 'cannot_edit_other_fields' => 'Et voi massamuuttaa tapahtumien muita kuin tässä näkyviä kenttiä, koska ne eivät mahdu ruudulle. Jos niitä täytyy kuitenkin muokata, seuraa linkkiä ja muokkaa niitä yksitellen.', - 'cannot_change_amount_reconciled' => 'Et voi muuttaa täsmäytettyjen tapahtumien summia.', - 'no_budget' => '(ei budjettia)', - 'no_bill' => '(ei laskua)', - 'account_per_budget' => 'Tili per budjetti', - 'account_per_category' => 'Tili per kategoria', - 'create_new_object' => 'Luo', - 'empty' => '(tyhjä)', - 'all_other_budgets' => '(kaikki muut budjetit)', - 'all_other_accounts' => '(kaikki muut tilit)', - 'expense_per_source_account' => 'Menot lähdetileittäin', - 'expense_per_destination_account' => 'Menot kohdetileittäin', - 'income_per_destination_account' => 'Tuotot kohdetileittäin', - 'spent_in_specific_category' => 'Kulutettu kategoriassa ":category"', - 'earned_in_specific_category' => 'Ansaittu kategoriassa ":category"', - 'spent_in_specific_tag' => 'Kulutettu tägillä ":tag"', - 'earned_in_specific_tag' => 'Ansaittu tägillä ":tag"', - 'income_per_source_account' => 'Tulot lähdetileittäin', - 'average_spending_per_destination' => 'Keskimääräinen kulu kohdetileittäin', - 'average_spending_per_source' => 'Keskimääräinen kulu lähdetileittäin', - 'average_earning_per_source' => 'Keskimääräinen tulo lähdetileittäin', - 'average_earning_per_destination' => 'Keskimääräinen tulo kohdetileittäin', - 'account_per_tag' => 'Tilit tägeittäin', - 'tag_report_expenses_listed_once' => 'Kuluja ja ansioita ei koskaan listata kahdesti. Jos tapahtumalla on useita tägejä, se näkyy ainoastaan yhden tägin alla. Tämä lista saattaa näyttää, että siitä puuttuu tietoja, mutta summat ovat silti oikein.', - 'double_report_expenses_charted_once' => 'Kuluja ja ansioita ei koskaan näytetä kahdesti. Jos tapahtumalla on useita tägejä, se näkyy ainoastaan yhden tägin alla. Tämä kuvaaja saattaa näyttää, että siitä puuttuu tietoja, mutta summat ovat silti oikein.', - 'tag_report_chart_single_tag' => 'Tämä kuvaaja kuvaa yhden tägin alta löytyvät tapahtumat. Jos tapahtumalla on useita tägejä, täällä näkyvät asiat saattavat näkyä myös muiden tägien kuvaajissa.', - 'tag' => 'Tägi', - 'no_budget_squared' => '(ei budjettia)', - 'perm-delete-many' => 'Suuren tapahtumamäärän poistaminen kerralla on hyvin riskialtista. Olethan varovainen. Täällä saatat tuhota esimerkiksi osia jaetuista tapahtumista, joten ole tarkkana.', - 'mass_deleted_transactions_success' => 'Poistettiin :count tapahtuma.|Poistettiin :count tapahtumaa.', - 'mass_edited_transactions_success' => 'Päivitettiin :count tapahtuma.|Päivitettiin :count tapahtumaa.', - 'opt_group_' => '(ei tilityyppiä)', - 'opt_group_no_account_type' => '(ei tilityyppiä)', - 'opt_group_defaultAsset' => 'Oletuskäyttötilit', - 'opt_group_savingAsset' => 'Säästötilit', - 'opt_group_sharedAsset' => 'Jaetut käyttötilit', - 'opt_group_ccAsset' => 'Luottokortit', - 'opt_group_cashWalletAsset' => 'Käteinen', - 'opt_group_expense_account' => 'Kulutustilit', - 'opt_group_revenue_account' => 'Tuottotilit', - 'opt_group_l_Loan' => 'Laina: Laina', - 'opt_group_cash_account' => 'Käteistili', - 'opt_group_l_Debt' => 'Laina: Velka', - 'opt_group_l_Mortgage' => 'Laina: Kiinnelaina', - 'opt_group_l_Credit card' => 'Laina: Luottokortti', - 'notes' => 'Muistiinpanot', - 'unknown_journal_error' => 'Tapahtuman tallennus epäonnistui. Syy tallentui lokitiedostoon.', - 'attachment_not_found' => 'Tätä liitettä ei löydy.', - 'journal_link_bill' => 'Tämä tapahtuma liittyy laskuun :name. Jos haluat poistaa yhteyden, poista valinta liitos-valintaruudusta. Käytä sääntöjä yhdistääksesi tapahtuma toiseen laskuun.', - 'transaction_stored_link' => 'Tapahtuma #{ID} ("{title}") on tallennettu.', - 'transaction_new_stored_link' => 'Tapahtuma #{ID} on tallennettu.', - 'transaction_updated_link' => 'Tapahtuma #{ID} ("{title}") on päivitetty.', - 'transaction_updated_no_changes' => 'Tapahtuma #{ID} ("{title}") ei muuttunut.', - 'first_split_decides' => 'Ensimmäinen jako määrittää tämän kentän arvon', - 'first_split_overrules_source' => 'Ensimmäinen jako voi kumota lähdetilin', - 'first_split_overrules_destination' => 'Ensimmäinen jako voi kumota kohdetilin', - 'spent_x_of_y' => 'Käytetty {amount} / {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Päivitä nosto', + 'update_deposit' => 'Päivitä talletus', + 'update_transaction' => 'Päivitä tapahtuma', + 'update_transfer' => 'Päivitä siirto', + 'updated_withdrawal' => 'Päivitettiin nosto ":description"', + 'updated_deposit' => 'Päivitettiin talletus ":description"', + 'updated_transfer' => 'Päivitettiin siirto ":description"', + 'no_changes_withdrawal' => 'Nosto ":description" ei muuttunut.', + 'no_changes_deposit' => 'Talletus ":description" ei muuttunut.', + 'no_changes_transfer' => 'Tilisiirto ":description" ei muuttunut.', + 'delete_withdrawal' => 'Poista nosto ":description"', + 'delete_deposit' => 'Poista talletus ":description"', + 'delete_transfer' => 'Poista siirto ":description"', + 'deleted_withdrawal' => 'Noston ":description" poisto onnistui', + 'deleted_deposit' => 'Talletuksen ":description" poisto onnistui', + 'deleted_transfer' => 'Siirron ":description" poisto onnistui', + 'deleted_reconciliation' => 'Täsmäytystapahtuma ":description" poistettiin onnistuneesti', + 'stored_journal' => 'Loit onnistuneesti uuden tapahtuman ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Loit onnistuneesti uuden tapahtumasi', + 'updated_journal_no_descr' => 'Päivitit tapahtumaasi onnistuneesti', + 'select_transactions' => 'Valitse tapahtumat', + 'rule_group_select_transactions' => 'Aja tapahtumille sääntöryhmä ":title"', + 'rule_select_transactions' => 'Aja tapahtumille sääntö ":title"', + 'stop_selection' => 'Lopeta tapahtumien valinta', + 'reconcile_selected' => 'Täsmäytä', + 'mass_delete_journals' => 'Poista tapahtumia', + 'mass_edit_journals' => 'Muokkaa tapahtumia', + 'mass_bulk_journals' => 'Muokkaa valittuja tapahtumia yhdessä', + 'mass_bulk_journals_explain' => 'Tällä lomakkeella voit muuttaa alla listattujen tapahtumien ominaisuuksia yhdellä päivityksellä. Kaikki taulukon tapahtumat päivitetään kun muutat tässä näkyviä ominaisuuksia.', + 'part_of_split' => 'Tämä tapahtuma on osa jaettua tapahtumaa. Jos et ole valinnut kaikkia tapahtuman osia, saatat tehdä muutoksen ainoastaan osaan tapahtumasta.', + 'bulk_set_new_values' => 'Käytä alla olevia kenttiä uusien arvojen antamiseen. Jos jätät ne tyhjiksi, ne tyhjennetään kaikilta. Huomaa lisäksi, että ainoastaan nostoille asetetaan budjetti.', + 'no_bulk_category' => 'Älä päivitä kategoriaa', + 'no_bulk_budget' => 'Älä päivitä budjettia', + 'no_bulk_tags' => 'Älä päivitä tägejä', + 'replace_with_these_tags' => 'Korvaa näillä tageilla', + 'append_these_tags' => 'Lisää nämä tagit', + 'mass_edit' => 'Muokkaa valittuja yksitellen', + 'bulk_edit' => 'Muokkaa kaikkia valittuja yhtäaikaa', + 'mass_delete' => 'Poista valitut', + 'cannot_edit_other_fields' => 'Et voi massamuuttaa tapahtumien muita kuin tässä näkyviä kenttiä, koska ne eivät mahdu ruudulle. Jos niitä täytyy kuitenkin muokata, seuraa linkkiä ja muokkaa niitä yksitellen.', + 'cannot_change_amount_reconciled' => 'Et voi muuttaa täsmäytettyjen tapahtumien summia.', + 'no_budget' => '(ei budjettia)', + 'no_bill' => '(ei laskua)', + 'account_per_budget' => 'Tili per budjetti', + 'account_per_category' => 'Tili per kategoria', + 'create_new_object' => 'Luo', + 'empty' => '(tyhjä)', + 'all_other_budgets' => '(kaikki muut budjetit)', + 'all_other_accounts' => '(kaikki muut tilit)', + 'expense_per_source_account' => 'Menot lähdetileittäin', + 'expense_per_destination_account' => 'Menot kohdetileittäin', + 'income_per_destination_account' => 'Tuotot kohdetileittäin', + 'spent_in_specific_category' => 'Kulutettu kategoriassa ":category"', + 'earned_in_specific_category' => 'Ansaittu kategoriassa ":category"', + 'spent_in_specific_tag' => 'Kulutettu tägillä ":tag"', + 'earned_in_specific_tag' => 'Ansaittu tägillä ":tag"', + 'income_per_source_account' => 'Tulot lähdetileittäin', + 'average_spending_per_destination' => 'Keskimääräinen kulu kohdetileittäin', + 'average_spending_per_source' => 'Keskimääräinen kulu lähdetileittäin', + 'average_earning_per_source' => 'Keskimääräinen tulo lähdetileittäin', + 'average_earning_per_destination' => 'Keskimääräinen tulo kohdetileittäin', + 'account_per_tag' => 'Tilit tägeittäin', + 'tag_report_expenses_listed_once' => 'Kuluja ja ansioita ei koskaan listata kahdesti. Jos tapahtumalla on useita tägejä, se näkyy ainoastaan yhden tägin alla. Tämä lista saattaa näyttää, että siitä puuttuu tietoja, mutta summat ovat silti oikein.', + 'double_report_expenses_charted_once' => 'Kuluja ja ansioita ei koskaan näytetä kahdesti. Jos tapahtumalla on useita tägejä, se näkyy ainoastaan yhden tägin alla. Tämä kuvaaja saattaa näyttää, että siitä puuttuu tietoja, mutta summat ovat silti oikein.', + 'tag_report_chart_single_tag' => 'Tämä kuvaaja kuvaa yhden tägin alta löytyvät tapahtumat. Jos tapahtumalla on useita tägejä, täällä näkyvät asiat saattavat näkyä myös muiden tägien kuvaajissa.', + 'tag' => 'Tägi', + 'no_budget_squared' => '(ei budjettia)', + 'perm-delete-many' => 'Suuren tapahtumamäärän poistaminen kerralla on hyvin riskialtista. Olethan varovainen. Täällä saatat tuhota esimerkiksi osia jaetuista tapahtumista, joten ole tarkkana.', + 'mass_deleted_transactions_success' => 'Poistettiin :count tapahtuma.|Poistettiin :count tapahtumaa.', + 'mass_edited_transactions_success' => 'Päivitettiin :count tapahtuma.|Päivitettiin :count tapahtumaa.', + 'opt_group_' => '(ei tilityyppiä)', + 'opt_group_no_account_type' => '(ei tilityyppiä)', + 'opt_group_defaultAsset' => 'Oletuskäyttötilit', + 'opt_group_savingAsset' => 'Säästötilit', + 'opt_group_sharedAsset' => 'Jaetut käyttötilit', + 'opt_group_ccAsset' => 'Luottokortit', + 'opt_group_cashWalletAsset' => 'Käteinen', + 'opt_group_expense_account' => 'Kulutustilit', + 'opt_group_revenue_account' => 'Tuottotilit', + 'opt_group_l_Loan' => 'Laina: Laina', + 'opt_group_cash_account' => 'Käteistili', + 'opt_group_l_Debt' => 'Laina: Velka', + 'opt_group_l_Mortgage' => 'Laina: Kiinnelaina', + 'opt_group_l_Credit card' => 'Laina: Luottokortti', + 'notes' => 'Muistiinpanot', + 'unknown_journal_error' => 'Tapahtuman tallennus epäonnistui. Syy tallentui lokitiedostoon.', + 'attachment_not_found' => 'Tätä liitettä ei löydy.', + 'journal_link_bill' => 'Tämä tapahtuma liittyy laskuun :name. Jos haluat poistaa yhteyden, poista valinta liitos-valintaruudusta. Käytä sääntöjä yhdistääksesi tapahtuma toiseen laskuun.', + 'transaction_stored_link' => 'Tapahtuma #{ID} ("{title}") on tallennettu.', + 'transaction_new_stored_link' => 'Tapahtuma #{ID} on tallennettu.', + 'transaction_updated_link' => 'Tapahtuma #{ID} ("{title}") on päivitetty.', + 'transaction_updated_no_changes' => 'Tapahtuma #{ID} ("{title}") ei muuttunut.', + 'first_split_decides' => 'Ensimmäinen jako määrittää tämän kentän arvon', + 'first_split_overrules_source' => 'Ensimmäinen jako voi kumota lähdetilin', + 'first_split_overrules_destination' => 'Ensimmäinen jako voi kumota kohdetilin', + 'spent_x_of_y' => 'Käytetty {amount} / {total}', // new user: - 'welcome' => 'Tervetuloa Firefly III:een!', - 'submit' => 'Vahvista', - 'submission' => 'Vahvistus', - 'submit_yes_really' => 'Vahvista (Tiedän mitä olen tekemässä)', - 'getting_started' => 'Käytön aloittaminen', - 'to_get_started' => 'Hienoa, olet onnistuneesti asentanut Firefly III:en. Alkuun päästäksesi anna käyttötilisi saldo sekä pankin nimi. Älä vielä tässä vaiheessa välitä vaikka tilejä olisi useita, voit lisätä loput myöhemmin. Firefly III tarvitsee alkutietoja näyttääkseen pääkäyttöliittymässä jotain.', - 'savings_balance_text' => 'Firefly III luo sinulle tarvittessa automaattisesti tilin. Alkuun tilillä ei ole yhtään rahaa, mutta voit kertoa Firefly III:lle saldon jolloin se tallennetaan.', - 'finish_up_new_user' => 'Valmista tuli! Voit jatkaa painamalla Vahvista. Sinut viedään Firefly III:en valikkoon.', - 'stored_new_accounts_new_user' => 'No niin! Uudet tilisi on tallennettu.', - 'set_preferred_language' => 'Jos haluat käyttää Firefly III:a jollain toisella kielellä, valitse se tässä.', - 'language' => 'Kieli', - 'new_savings_account' => ':bank_name säästötili', - 'cash_wallet' => 'Käteinen', - 'currency_not_present' => 'Älä välitä vaikka normaalisti käyttämäsi valuutta ei olisi listalla. Voit luoda omia valuuttoja Optiot > Valuutat valikossa.', + 'welcome' => 'Tervetuloa Firefly III:een!', + 'submit' => 'Vahvista', + 'submission' => 'Vahvistus', + 'submit_yes_really' => 'Vahvista (Tiedän mitä olen tekemässä)', + 'getting_started' => 'Käytön aloittaminen', + 'to_get_started' => 'Hienoa, olet onnistuneesti asentanut Firefly III:en. Alkuun päästäksesi anna käyttötilisi saldo sekä pankin nimi. Älä vielä tässä vaiheessa välitä vaikka tilejä olisi useita, voit lisätä loput myöhemmin. Firefly III tarvitsee alkutietoja näyttääkseen pääkäyttöliittymässä jotain.', + 'savings_balance_text' => 'Firefly III luo sinulle tarvittessa automaattisesti tilin. Alkuun tilillä ei ole yhtään rahaa, mutta voit kertoa Firefly III:lle saldon jolloin se tallennetaan.', + 'finish_up_new_user' => 'Valmista tuli! Voit jatkaa painamalla Vahvista. Sinut viedään Firefly III:en valikkoon.', + 'stored_new_accounts_new_user' => 'No niin! Uudet tilisi on tallennettu.', + 'set_preferred_language' => 'Jos haluat käyttää Firefly III:a jollain toisella kielellä, valitse se tässä.', + 'language' => 'Kieli', + 'new_savings_account' => ':bank_name säästötili', + 'cash_wallet' => 'Käteinen', + 'currency_not_present' => 'Älä välitä vaikka normaalisti käyttämäsi valuutta ei olisi listalla. Voit luoda omia valuuttoja Optiot > Valuutat valikossa.', // home page: - 'transaction_table_description' => 'Taulu, joka sisältää tapahtumasi', - 'opposing_account' => 'Vastatili', - 'yourAccounts' => 'Omat tilisi', - 'your_accounts' => 'Tiliesi yleiskuva', - 'category_overview' => 'Kategorioiden tarkastelu', - 'expense_overview' => 'Kulutustilien tarkastelu', - 'revenue_overview' => 'Tuottotilien tarkastelu', - 'budgetsAndSpending' => 'Budjetit ja kulutus', - 'budgets_and_spending' => 'Budjetit ja kulutus', - 'go_to_budget' => 'Avaa budjetti "{budget}"', - 'go_to_deposits' => 'Siirry talletuksiin', - 'go_to_expenses' => 'Siirry kuluihin', - 'savings' => 'Säästöt', - 'newWithdrawal' => 'Uusi kustannus', - 'newDeposit' => 'Uusi talletus', - 'newTransfer' => 'Uusi siirto', - 'bills_to_pay' => 'Laskuja maksettavana', - 'per_day' => 'Päivässä', - 'left_to_spend_per_day' => 'Käytettävissä per päivä', - 'bills_paid' => 'Maksetut laskut', - 'custom_period' => 'Mukautettu jakso', - 'reset_to_current' => 'Palauta nykyiselle kaudelle', - 'select_period' => 'Valitse kausi', + 'transaction_table_description' => 'Taulu, joka sisältää tapahtumasi', + 'opposing_account' => 'Vastatili', + 'yourAccounts' => 'Omat tilisi', + 'your_accounts' => 'Tiliesi yleiskuva', + 'category_overview' => 'Kategorioiden tarkastelu', + 'expense_overview' => 'Kulutustilien tarkastelu', + 'revenue_overview' => 'Tuottotilien tarkastelu', + 'budgetsAndSpending' => 'Budjetit ja kulutus', + 'budgets_and_spending' => 'Budjetit ja kulutus', + 'go_to_budget' => 'Avaa budjetti "{budget}"', + 'go_to_deposits' => 'Siirry talletuksiin', + 'go_to_expenses' => 'Siirry kuluihin', + 'savings' => 'Säästöt', + 'newWithdrawal' => 'Uusi kustannus', + 'newDeposit' => 'Uusi talletus', + 'newTransfer' => 'Uusi siirto', + 'bills_to_pay' => 'Laskuja maksettavana', + 'per_day' => 'Päivässä', + 'left_to_spend_per_day' => 'Käytettävissä per päivä', + 'bills_paid' => 'Maksetut laskut', + 'custom_period' => 'Mukautettu jakso', + 'reset_to_current' => 'Palauta nykyiselle kaudelle', + 'select_period' => 'Valitse kausi', // menu and titles, should be recycled as often as possible: - 'currency' => 'Valuutta', - 'preferences' => 'Asetukset', - 'logout' => 'Kirjaudu ulos', - 'logout_other_sessions' => 'Kirjaudu ulos kaikista muista istunnoista', - 'toggleNavigation' => 'Vaihda navigointia', - 'searchPlaceholder' => 'Hae ...', - 'version' => 'Versio', - 'dashboard' => 'Etusivu', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Budjetista jäljellä ({currency})', - 'currencies' => 'Valuutat', - 'activity' => 'Toiminta', - 'usage' => 'Käyttö', - 'accounts' => 'Tilit', - 'Asset account' => 'Käyttötili', - 'Default account' => 'Käyttötili', - 'Expense account' => 'Kulutustili', - 'Revenue account' => 'Tuottotili', - 'Initial balance account' => 'Alkutasetili', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Velka', - 'account_type_Loan' => 'Laina', - 'account_type_Mortgage' => 'Kiinnelaina', - 'account_type_debt' => 'Velka', - 'account_type_loan' => 'Laina', - 'account_type_mortgage' => 'Kiinnelaina', - 'account_type_Credit card' => 'Luottokortti', - 'credit_card_type_monthlyFull' => 'Täysi maksu joka kuukausi', - 'liability_direction_credit' => 'Minulle ollaan velkaa tämä', - 'liability_direction_debit' => 'Olen tämän velkaa jollekin muulle', - 'liability_direction_credit_short' => 'Minulle ollaan velkaa', - 'liability_direction_debit_short' => 'Olen velkaa', - 'liability_direction__short' => 'Tuntematon', - 'liability_direction_null_short' => 'Tuntematon', - 'Liability credit' => 'Lainan luotto', - 'budgets' => 'Budjetit', - 'tags' => 'Tägit', - 'reports' => 'Raportit', - 'transactions' => 'Tapahtumat', - 'expenses' => 'Kustannukset', - 'income' => 'Tuotto / ansio', - 'transfers' => 'Tilisiirrot', - 'moneyManagement' => 'Talouden hallinta', - 'money_management' => 'Talouden hallinta', - 'tools' => 'Työkalut', - 'piggyBanks' => 'Säästöpossut', - 'piggy_banks' => 'Säästöpossut', - 'amount_x_of_y' => '{current} / {total}', - 'bills' => 'Laskut', - 'withdrawal' => 'Nosto', - 'opening_balance' => 'Alkusaldo', - 'deposit' => 'Talletus', - 'account' => 'Tili', - 'transfer' => 'Siirto', - 'Withdrawal' => 'Nosto', - 'Deposit' => 'Talletus', - 'Transfer' => 'Siirto', - 'bill' => 'Lasku', - 'yes' => 'Kyllä', - 'no' => 'Ei', - 'amount' => 'Summa', - 'overview' => 'Yleiskatsaus', - 'saveOnAccount' => 'Tallenna tilille', - 'unknown' => 'Tuntematon', - 'monthly' => 'Kuukausittain', - 'profile' => 'Profiili', - 'errors' => 'Virheet', - 'debt_start_date' => 'Velan aloituspäivä', - 'debt_start_amount' => 'Velan aloitussaldo', - 'debt_start_amount_help' => 'Tämä arvo on aina paras asettaa negatiiviseksi. Lue lisätietoja ohjesivuilta ((?) - kuvake oikeassa yläkulmassa).', - 'interest_period_help' => 'Tämä kenttä on puhtaasti kosmeettinen, eikä sitä lasketa sinulle. Kuten huomaat, pankit ovat erittäin salaperäisiä, joten Firefly III ei koskaan osaa tehdä näitä oikein.', - 'store_new_liabilities_account' => 'Tallenna uusi laina', - 'edit_liabilities_account' => 'Muokkaa lainaa ":name"', - 'financial_control' => 'Talouden hallinta', - 'accounting' => 'Kirjanpito', - 'automation' => 'Automaatio', - 'others' => 'Muut', - 'classification' => 'Luokitus', - 'store_transaction' => 'Tallenna tapahtuma', + 'currency' => 'Valuutta', + 'preferences' => 'Asetukset', + 'logout' => 'Kirjaudu ulos', + 'logout_other_sessions' => 'Kirjaudu ulos kaikista muista istunnoista', + 'toggleNavigation' => 'Vaihda navigointia', + 'searchPlaceholder' => 'Hae ...', + 'version' => 'Versio', + 'dashboard' => 'Etusivu', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Budjetista jäljellä ({currency})', + 'currencies' => 'Valuutat', + 'activity' => 'Toiminta', + 'usage' => 'Käyttö', + 'accounts' => 'Tilit', + 'Asset account' => 'Käyttötili', + 'Default account' => 'Käyttötili', + 'Expense account' => 'Kulutustili', + 'Revenue account' => 'Tuottotili', + 'Initial balance account' => 'Alkutasetili', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Velka', + 'account_type_Loan' => 'Laina', + 'account_type_Mortgage' => 'Kiinnelaina', + 'account_type_debt' => 'Velka', + 'account_type_loan' => 'Laina', + 'account_type_mortgage' => 'Kiinnelaina', + 'account_type_Credit card' => 'Luottokortti', + 'credit_card_type_monthlyFull' => 'Täysi maksu joka kuukausi', + 'liability_direction_credit' => 'Minulle ollaan velkaa tämä', + 'liability_direction_debit' => 'Olen tämän velkaa jollekin muulle', + 'liability_direction_credit_short' => 'Minulle ollaan velkaa', + 'liability_direction_debit_short' => 'Olen velkaa', + 'liability_direction__short' => 'Tuntematon', + 'liability_direction_null_short' => 'Tuntematon', + 'Liability credit' => 'Lainan luotto', + 'budgets' => 'Budjetit', + 'tags' => 'Tägit', + 'reports' => 'Raportit', + 'transactions' => 'Tapahtumat', + 'expenses' => 'Kustannukset', + 'income' => 'Tuotto / ansio', + 'transfers' => 'Tilisiirrot', + 'moneyManagement' => 'Talouden hallinta', + 'money_management' => 'Talouden hallinta', + 'tools' => 'Työkalut', + 'piggyBanks' => 'Säästöpossut', + 'piggy_banks' => 'Säästöpossut', + 'amount_x_of_y' => '{current} / {total}', + 'bills' => 'Laskut', + 'withdrawal' => 'Nosto', + 'opening_balance' => 'Alkusaldo', + 'deposit' => 'Talletus', + 'account' => 'Tili', + 'transfer' => 'Siirto', + 'Withdrawal' => 'Nosto', + 'Deposit' => 'Talletus', + 'Transfer' => 'Siirto', + 'bill' => 'Lasku', + 'yes' => 'Kyllä', + 'no' => 'Ei', + 'amount' => 'Summa', + 'overview' => 'Yleiskatsaus', + 'saveOnAccount' => 'Tallenna tilille', + 'unknown' => 'Tuntematon', + 'monthly' => 'Kuukausittain', + 'profile' => 'Profiili', + 'errors' => 'Virheet', + 'debt_start_date' => 'Velan aloituspäivä', + 'debt_start_amount' => 'Velan aloitussaldo', + 'debt_start_amount_help' => 'Tämä arvo on aina paras asettaa negatiiviseksi. Lue lisätietoja ohjesivuilta ((?) - kuvake oikeassa yläkulmassa).', + 'interest_period_help' => 'Tämä kenttä on puhtaasti kosmeettinen, eikä sitä lasketa sinulle. Kuten huomaat, pankit ovat erittäin salaperäisiä, joten Firefly III ei koskaan osaa tehdä näitä oikein.', + 'store_new_liabilities_account' => 'Tallenna uusi laina', + 'edit_liabilities_account' => 'Muokkaa lainaa ":name"', + 'financial_control' => 'Talouden hallinta', + 'accounting' => 'Kirjanpito', + 'automation' => 'Automaatio', + 'others' => 'Muut', + 'classification' => 'Luokitus', + 'store_transaction' => 'Tallenna tapahtuma', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Talousraportti välillä :start ja :end', - 'report_audit' => 'Tapahtumahistorian yleiskatsaus välillä :start ja :end', - 'report_category' => 'Kategoriaraportti välillä :start ja :end', - 'report_double' => 'Kulutus- ja ansiotilien raportti välillä :start ja :end', - 'report_budget' => 'Budjettiraportti välillä :start ja :end', - 'report_tag' => 'Tägiraportti välillä :start ja :end', - 'quick_link_reports' => 'Pikalinkit', - 'quick_link_examples' => 'Nämä ovat vain esimerkkilinkkejä helpottamaan alkuun pääsyä. Lue opassivut (?)-painikkeen alta löytääksesi tietoa kaikista raporteista ja taikasanoista joita voit käyttää.', - 'quick_link_default_report' => 'Talousraportti', - 'quick_link_audit_report' => 'Tapahtumahistorian yleiskatsaus', - 'report_this_month_quick' => 'Kuluva kuukausi, kaikki tilit', - 'report_last_month_quick' => 'Viime kuu, kaikki tilit', - 'report_this_year_quick' => 'Kuluva vuosi, kaikki tilit', - 'report_this_fiscal_year_quick' => 'Kuluva tilivuosi, kaikki tilit', - 'report_all_time_quick' => 'Kaikki tiedot, kaikki tilit', - 'reports_can_bookmark' => 'Muista: pystyt tekemään kirjanmerkin raporttiin.', - 'incomeVsExpenses' => 'Tulot ja menot', - 'accountBalances' => 'Tilien saldot', - 'balanceStart' => 'Saldo jakson alussa', - 'balanceEnd' => 'Saldo jakson lopussa', - 'splitByAccount' => 'Tileittäin', - 'coveredWithTags' => 'Tägitetty', - 'leftInBudget' => 'Budjetissa jäljellä', - 'left_in_debt' => 'Maksettavaa', - 'sumOfSums' => 'Summat yhteensä', - 'noCategory' => '(ei kategoriaa)', - 'notCharged' => 'Ei veloitettu (vielä)', - 'inactive' => 'Ei aktiivinen', - 'active' => 'Aktiivinen', - 'difference' => 'Ero', - 'money_flowing_in' => 'Sisään', - 'money_flowing_out' => 'Ulos', - 'topX' => 'ensimmäiset :number', - 'show_full_list' => 'Näytä koko lista', - 'show_only_top' => 'Näytä vain ensimmäiset :number', - 'report_type' => 'Raportin tyyppi', - 'report_type_default' => 'Talousraportti', - 'report_type_audit' => 'Tapahtumahistorian yleisnäkymä (tilintarkastus)', - 'report_type_category' => 'Kategoriaraportti', - 'report_type_budget' => 'Budjettiraportti', - 'report_type_tag' => 'Tägiraportti', - 'report_type_double' => 'Kulutus- ja tuottotilien raportti', - 'more_info_help' => 'Lisätietoja tämän tyyppisistä raporteista löydät opastesivuilta. Valitse (?) ikoni oikeassa yläkulmassa.', - 'report_included_accounts' => 'Sisältää tilit', - 'report_date_range' => 'Aikaväli', - 'report_preset_ranges' => 'Esiasetetut jaksot', - 'shared' => 'Yhteiset', - 'fiscal_year' => 'Tilikausi', - 'income_entry' => 'Tulot tililtä ":name" välillä :start ja :end', - 'expense_entry' => 'Kulut tilillä ":name" välillä :start ja :end', - 'category_entry' => 'Kulut ja ansiot kategoriassa ":name" välillä :start ja :end', - 'budget_spent_amount' => 'Kulut budjetissa ":budget" välillä :start ja :end', - 'balance_amount' => 'Kulut budjetissa ":budget" tililtä ":account" välillä :start ja :end', - 'no_audit_activity' => 'Tilillä :account_name ei ole kirjattuja tapahtumia välillä :start ja :end.', - 'audit_end_balance' => 'Tilin :account_name saldo jakson :end lopussa: :balance', - 'reports_extra_options' => 'Lisävalinnat', - 'report_has_no_extra_options' => 'Tällä raportilla ei ole lisävalintoja', - 'reports_submit' => 'Näytä raportti', - 'end_after_start_date' => 'Raportin aloituspäivän täytyy olla ennen loppupäivää.', - 'select_category' => 'Valitse kategoria(t)', - 'select_budget' => 'Valitse budjetti/budjetit.', - 'select_tag' => 'Valitse tägi(t).', - 'income_per_category' => 'Tulot kategorioittain', - 'expense_per_category' => 'Kulut kategorioittain', - 'expense_per_budget' => 'Kulut budjeteittain', - 'income_per_account' => 'Tulot tileittäin', - 'expense_per_account' => 'Menot tileittäin', - 'expense_per_tag' => 'Kulut tägeittäin', - 'income_per_tag' => 'Tulot tägeittäin', - 'include_expense_not_in_budget' => 'Sisällytetyt kulut eivät kuulu valittuihin budjetteihin', - 'include_expense_not_in_account' => 'Sisällytetyt kulut eivät kuulu valittuihin tileihin', - 'include_expense_not_in_category' => 'Sisällytetyt kulut eivät kuulu valittuihin kategorioihin', - 'include_income_not_in_category' => 'Sisällytetyt tulot eivät kuulu valittuihin kategorioihin', - 'include_income_not_in_account' => 'Sisällytetyt tulot eivät kuulu valittuihin tileihin', - 'include_income_not_in_tags' => 'Sisällytetyt tulot eivät kuulu valittuihin tägeihin', - 'include_expense_not_in_tags' => 'Sisällytetyt kulut eivät kuulu valittuihin tägeihin', - 'everything_else' => 'Kaikki muu', - 'income_and_expenses' => 'Tulot ja menot', - 'spent_average' => 'Kulutettu (keskiarvo)', - 'income_average' => 'Tulot (keskiarvo)', - 'transaction_count' => 'Tapahtumien lukumäärä', - 'average_spending_per_account' => 'Keskimääräinen meno tileittäin', - 'average_income_per_account' => 'Keskimääräinen tulo tileittäin', - 'total' => 'Yhteensä', - 'description' => 'Kuvaus', - 'sum_of_period' => 'Jakson loppusumma', - 'average_in_period' => 'Keskiarvo tässä jaksossa', - 'account_role_defaultAsset' => 'Oletuskäyttötili', - 'account_role_sharedAsset' => 'Jaettu käyttötili', - 'account_role_savingAsset' => 'Säästötili', - 'account_role_ccAsset' => 'Luottokortti', - 'account_role_cashWalletAsset' => 'Käteinen', - 'budget_chart_click' => 'Valitse yllä olevasta taulukosta budjetin nimi nähdäksesi tämän kuvaajan.', - 'category_chart_click' => 'Valitse yllä olevasta taulukosta kategorian nimi nähdäksesi tämän kuvaajan.', - 'in_out_accounts' => 'Tulot ja menot kombinaatioittain', - 'in_out_accounts_per_asset' => 'Tulot ja menot (käyttötileittäin)', - 'in_out_per_category' => 'Tulot ja menot kategorioittain', - 'out_per_budget' => 'Kulut budjeteittain', - 'select_expense_revenue' => 'Valitse kulutus- tai tuottotili', - 'multi_currency_report_sum' => 'Koska tämä listä sisältää tilejä useammalla valuutalla, summat eivät välttämättä pidä paikkaansa. Raportti käyttää aina oletusvaluuttaasi.', - 'sum_in_default_currency' => 'Summa on aina oletusvaluutassasi.', - 'net_filtered_prefs' => 'Tässä kuvaajassa ei koskaan ole tilejä joissa on "Sisällytä varallisuuteen"-optio valitsematta.', + 'report_default' => 'Talousraportti välillä :start ja :end', + 'report_audit' => 'Tapahtumahistorian yleiskatsaus välillä :start ja :end', + 'report_category' => 'Kategoriaraportti välillä :start ja :end', + 'report_double' => 'Kulutus- ja ansiotilien raportti välillä :start ja :end', + 'report_budget' => 'Budjettiraportti välillä :start ja :end', + 'report_tag' => 'Tägiraportti välillä :start ja :end', + 'quick_link_reports' => 'Pikalinkit', + 'quick_link_examples' => 'Nämä ovat vain esimerkkilinkkejä helpottamaan alkuun pääsyä. Lue opassivut (?)-painikkeen alta löytääksesi tietoa kaikista raporteista ja taikasanoista joita voit käyttää.', + 'quick_link_default_report' => 'Talousraportti', + 'quick_link_audit_report' => 'Tapahtumahistorian yleiskatsaus', + 'report_this_month_quick' => 'Kuluva kuukausi, kaikki tilit', + 'report_last_month_quick' => 'Viime kuu, kaikki tilit', + 'report_this_year_quick' => 'Kuluva vuosi, kaikki tilit', + 'report_this_fiscal_year_quick' => 'Kuluva tilivuosi, kaikki tilit', + 'report_all_time_quick' => 'Kaikki tiedot, kaikki tilit', + 'reports_can_bookmark' => 'Muista: pystyt tekemään kirjanmerkin raporttiin.', + 'incomeVsExpenses' => 'Tulot ja menot', + 'accountBalances' => 'Tilien saldot', + 'balanceStart' => 'Saldo jakson alussa', + 'balanceEnd' => 'Saldo jakson lopussa', + 'splitByAccount' => 'Tileittäin', + 'coveredWithTags' => 'Tägitetty', + 'leftInBudget' => 'Budjetissa jäljellä', + 'left_in_debt' => 'Maksettavaa', + 'sumOfSums' => 'Summat yhteensä', + 'noCategory' => '(ei kategoriaa)', + 'notCharged' => 'Ei veloitettu (vielä)', + 'inactive' => 'Ei aktiivinen', + 'active' => 'Aktiivinen', + 'difference' => 'Ero', + 'money_flowing_in' => 'Sisään', + 'money_flowing_out' => 'Ulos', + 'topX' => 'ensimmäiset :number', + 'show_full_list' => 'Näytä koko lista', + 'show_only_top' => 'Näytä vain ensimmäiset :number', + 'report_type' => 'Raportin tyyppi', + 'report_type_default' => 'Talousraportti', + 'report_type_audit' => 'Tapahtumahistorian yleisnäkymä (tilintarkastus)', + 'report_type_category' => 'Kategoriaraportti', + 'report_type_budget' => 'Budjettiraportti', + 'report_type_tag' => 'Tägiraportti', + 'report_type_double' => 'Kulutus- ja tuottotilien raportti', + 'more_info_help' => 'Lisätietoja tämän tyyppisistä raporteista löydät opastesivuilta. Valitse (?) ikoni oikeassa yläkulmassa.', + 'report_included_accounts' => 'Sisältää tilit', + 'report_date_range' => 'Aikaväli', + 'report_preset_ranges' => 'Esiasetetut jaksot', + 'shared' => 'Yhteiset', + 'fiscal_year' => 'Tilikausi', + 'income_entry' => 'Tulot tililtä ":name" välillä :start ja :end', + 'expense_entry' => 'Kulut tilillä ":name" välillä :start ja :end', + 'category_entry' => 'Kulut ja ansiot kategoriassa ":name" välillä :start ja :end', + 'budget_spent_amount' => 'Kulut budjetissa ":budget" välillä :start ja :end', + 'balance_amount' => 'Kulut budjetissa ":budget" tililtä ":account" välillä :start ja :end', + 'no_audit_activity' => 'Tilillä :account_name ei ole kirjattuja tapahtumia välillä :start ja :end.', + 'audit_end_balance' => 'Tilin :account_name saldo jakson :end lopussa: :balance', + 'reports_extra_options' => 'Lisävalinnat', + 'report_has_no_extra_options' => 'Tällä raportilla ei ole lisävalintoja', + 'reports_submit' => 'Näytä raportti', + 'end_after_start_date' => 'Raportin aloituspäivän täytyy olla ennen loppupäivää.', + 'select_category' => 'Valitse kategoria(t)', + 'select_budget' => 'Valitse budjetti/budjetit.', + 'select_tag' => 'Valitse tägi(t).', + 'income_per_category' => 'Tulot kategorioittain', + 'expense_per_category' => 'Kulut kategorioittain', + 'expense_per_budget' => 'Kulut budjeteittain', + 'income_per_account' => 'Tulot tileittäin', + 'expense_per_account' => 'Menot tileittäin', + 'expense_per_tag' => 'Kulut tägeittäin', + 'income_per_tag' => 'Tulot tägeittäin', + 'include_expense_not_in_budget' => 'Sisällytetyt kulut eivät kuulu valittuihin budjetteihin', + 'include_expense_not_in_account' => 'Sisällytetyt kulut eivät kuulu valittuihin tileihin', + 'include_expense_not_in_category' => 'Sisällytetyt kulut eivät kuulu valittuihin kategorioihin', + 'include_income_not_in_category' => 'Sisällytetyt tulot eivät kuulu valittuihin kategorioihin', + 'include_income_not_in_account' => 'Sisällytetyt tulot eivät kuulu valittuihin tileihin', + 'include_income_not_in_tags' => 'Sisällytetyt tulot eivät kuulu valittuihin tägeihin', + 'include_expense_not_in_tags' => 'Sisällytetyt kulut eivät kuulu valittuihin tägeihin', + 'everything_else' => 'Kaikki muu', + 'income_and_expenses' => 'Tulot ja menot', + 'spent_average' => 'Kulutettu (keskiarvo)', + 'income_average' => 'Tulot (keskiarvo)', + 'transaction_count' => 'Tapahtumien lukumäärä', + 'average_spending_per_account' => 'Keskimääräinen meno tileittäin', + 'average_income_per_account' => 'Keskimääräinen tulo tileittäin', + 'total' => 'Yhteensä', + 'description' => 'Kuvaus', + 'sum_of_period' => 'Jakson loppusumma', + 'average_in_period' => 'Keskiarvo tässä jaksossa', + 'account_role_defaultAsset' => 'Oletuskäyttötili', + 'account_role_sharedAsset' => 'Jaettu käyttötili', + 'account_role_savingAsset' => 'Säästötili', + 'account_role_ccAsset' => 'Luottokortti', + 'account_role_cashWalletAsset' => 'Käteinen', + 'budget_chart_click' => 'Valitse yllä olevasta taulukosta budjetin nimi nähdäksesi tämän kuvaajan.', + 'category_chart_click' => 'Valitse yllä olevasta taulukosta kategorian nimi nähdäksesi tämän kuvaajan.', + 'in_out_accounts' => 'Tulot ja menot kombinaatioittain', + 'in_out_accounts_per_asset' => 'Tulot ja menot (käyttötileittäin)', + 'in_out_per_category' => 'Tulot ja menot kategorioittain', + 'out_per_budget' => 'Kulut budjeteittain', + 'select_expense_revenue' => 'Valitse kulutus- tai tuottotili', + 'multi_currency_report_sum' => 'Koska tämä listä sisältää tilejä useammalla valuutalla, summat eivät välttämättä pidä paikkaansa. Raportti käyttää aina oletusvaluuttaasi.', + 'sum_in_default_currency' => 'Summa on aina oletusvaluutassasi.', + 'net_filtered_prefs' => 'Tässä kuvaajassa ei koskaan ole tilejä joissa on "Sisällytä varallisuuteen"-optio valitsematta.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Kuvaaja', - 'month' => 'Kuukausi', - 'budget' => 'Budjetti', - 'spent' => 'Käytetty', - 'spent_capped' => 'Käytetty (rajattu)', - 'spent_in_budget' => 'Budjetista käytetty', - 'left_to_spend' => 'Käytettävissä', - 'earned' => 'Ansaittu', - 'overspent' => 'Varojen ylitys', - 'left' => 'Jäljellä', - 'max-amount' => 'Enimmäissumma', - 'min-amount' => 'Vähimmäissumma', - 'journal-amount' => 'Nykyisen laskun summa', - 'name' => 'Nimi', - 'date' => 'Päivämäärä', - 'date_and_time' => 'Päivämäärä ja aika', - 'time' => 'Aika', - 'paid' => 'Maksettu', - 'unpaid' => 'Maksamatta', - 'day' => 'Päivä', - 'budgeted' => 'Budjetoitu', - 'period' => 'Jakso', - 'balance' => 'Saldo', - 'in_out_period' => 'In + out this period', - 'sum' => 'Yhteensä', - 'summary' => 'Yhteenveto', - 'average' => 'Keskiarvo', - 'balanceFor' => 'Tilin :name saldo', - 'no_tags' => '(ei tägejä)', + 'chart' => 'Kuvaaja', + 'month' => 'Kuukausi', + 'budget' => 'Budjetti', + 'spent' => 'Käytetty', + 'spent_capped' => 'Käytetty (rajattu)', + 'spent_in_budget' => 'Budjetista käytetty', + 'left_to_spend' => 'Käytettävissä', + 'earned' => 'Ansaittu', + 'overspent' => 'Varojen ylitys', + 'left' => 'Jäljellä', + 'max-amount' => 'Enimmäissumma', + 'min-amount' => 'Vähimmäissumma', + 'journal-amount' => 'Nykyisen laskun summa', + 'name' => 'Nimi', + 'date' => 'Päivämäärä', + 'date_and_time' => 'Päivämäärä ja aika', + 'time' => 'Aika', + 'paid' => 'Maksettu', + 'unpaid' => 'Maksamatta', + 'day' => 'Päivä', + 'budgeted' => 'Budjetoitu', + 'period' => 'Jakso', + 'balance' => 'Saldo', + 'in_out_period' => 'In + out this period', + 'sum' => 'Yhteensä', + 'summary' => 'Yhteenveto', + 'average' => 'Keskiarvo', + 'balanceFor' => 'Tilin :name saldo', + 'no_tags' => '(ei tägejä)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Lisää rahaa säästöpossuun ":name"', - 'piggy_bank' => 'Säästöpossu', - 'new_piggy_bank' => 'Uusi säästöpossu', - 'store_piggy_bank' => 'Tallenna uusi säästöpossu', - 'stored_piggy_bank' => 'Tallenna uusi säästöpossu ":name"', - 'account_status' => 'Tilin tilanne', - 'left_for_piggy_banks' => 'Jäljellä säästöpossuihin', - 'sum_of_piggy_banks' => 'Säästöpossut yhteensä', - 'saved_so_far' => 'Tähän mennessä säästetty', - 'left_to_save' => 'Säästettävää jäljellä', - 'suggested_amount' => 'Ehdotettu kuukausittainen säästösumma', - 'add_money_to_piggy_title' => 'Lisää rahaa säästöpossuun ":name"', - 'remove_money_from_piggy_title' => 'Poista rahaa säästöpossusta ":name"', - 'add' => 'Lisää', - 'no_money_for_piggy' => 'Sinulla ei ole rahaa pistää tähän säästöpossuun.', - 'suggested_savings_per_month' => 'Ehdotus per kuukausi', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Lisää rahaa säästöpossuun ":name"', + 'piggy_bank' => 'Säästöpossu', + 'new_piggy_bank' => 'Uusi säästöpossu', + 'store_piggy_bank' => 'Tallenna uusi säästöpossu', + 'stored_piggy_bank' => 'Tallenna uusi säästöpossu ":name"', + 'account_status' => 'Tilin tilanne', + 'left_for_piggy_banks' => 'Jäljellä säästöpossuihin', + 'sum_of_piggy_banks' => 'Säästöpossut yhteensä', + 'saved_so_far' => 'Tähän mennessä säästetty', + 'left_to_save' => 'Säästettävää jäljellä', + 'suggested_amount' => 'Ehdotettu kuukausittainen säästösumma', + 'add_money_to_piggy_title' => 'Lisää rahaa säästöpossuun ":name"', + 'remove_money_from_piggy_title' => 'Poista rahaa säästöpossusta ":name"', + 'add' => 'Lisää', + 'no_money_for_piggy' => 'Sinulla ei ole rahaa pistää tähän säästöpossuun.', + 'suggested_savings_per_month' => 'Ehdotus per kuukausi', - 'remove' => 'Poista', - 'max_amount_add' => 'Maksimisumma jonka voit lisätä', - 'max_amount_remove' => 'Maksimisumma jonka voit poistaa', - 'update_piggy_button' => 'Päivitä säästöpossu', - 'update_piggy_title' => 'Päivitä säästöpossu ":name"', - 'updated_piggy_bank' => 'Päivitettiin säästöpossu ":name"', - 'details' => 'Yksityiskohdat', - 'events' => 'Tapahtumat', - 'target_amount' => 'Tavoitesumma', - 'start_date' => 'Aloituspäivä', - 'no_start_date' => 'Ei aloituspäivää', - 'target_date' => 'Tavoitepäivä', - 'no_target_date' => 'Ei tavoitepäivää', - 'table' => 'Taulukko', - 'delete_piggy_bank' => 'Poista säästöpossu ":name"', - 'cannot_add_amount_piggy' => 'Summan :amount lisääminen possuun ":name" epäonnistui.', - 'cannot_remove_from_piggy' => 'Summan :amount poistaminen possusta ":name" epäonnistui.', - 'deleted_piggy_bank' => 'Poistettiin säästöpossu ":name"', - 'added_amount_to_piggy' => 'Lisättiin :amount possuun ":name"', - 'removed_amount_from_piggy' => 'Poistettiin :amount possusta ":name"', - 'piggy_events' => 'Tähän liittyvät säästöporsaat', + 'remove' => 'Poista', + 'max_amount_add' => 'Maksimisumma jonka voit lisätä', + 'max_amount_remove' => 'Maksimisumma jonka voit poistaa', + 'update_piggy_button' => 'Päivitä säästöpossu', + 'update_piggy_title' => 'Päivitä säästöpossu ":name"', + 'updated_piggy_bank' => 'Päivitettiin säästöpossu ":name"', + 'details' => 'Yksityiskohdat', + 'events' => 'Tapahtumat', + 'target_amount' => 'Tavoitesumma', + 'start_date' => 'Aloituspäivä', + 'no_start_date' => 'Ei aloituspäivää', + 'target_date' => 'Tavoitepäivä', + 'no_target_date' => 'Ei tavoitepäivää', + 'table' => 'Taulukko', + 'delete_piggy_bank' => 'Poista säästöpossu ":name"', + 'cannot_add_amount_piggy' => 'Summan :amount lisääminen possuun ":name" epäonnistui.', + 'cannot_remove_from_piggy' => 'Summan :amount poistaminen possusta ":name" epäonnistui.', + 'deleted_piggy_bank' => 'Poistettiin säästöpossu ":name"', + 'added_amount_to_piggy' => 'Lisättiin :amount possuun ":name"', + 'removed_amount_from_piggy' => 'Poistettiin :amount possusta ":name"', + 'piggy_events' => 'Tähän liittyvät säästöporsaat', // tags - 'delete_tag' => 'Poista tägi ":tag"', - 'deleted_tag' => 'Poistettiin tägi ":tag"', - 'new_tag' => 'Luo uusi tägi', - 'edit_tag' => 'Muokkaa tägiä ":tag"', - 'updated_tag' => 'Päivitettiin tägi ":tag"', - 'created_tag' => 'Luotiin ":tag"-tägi!', + 'delete_tag' => 'Poista tägi ":tag"', + 'deleted_tag' => 'Poistettiin tägi ":tag"', + 'new_tag' => 'Luo uusi tägi', + 'edit_tag' => 'Muokkaa tägiä ":tag"', + 'updated_tag' => 'Päivitettiin tägi ":tag"', + 'created_tag' => 'Luotiin ":tag"-tägi!', - 'transaction_journal_information' => 'Tapahtumatiedot', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Metatiedot', - 'transaction_journal_more' => 'Lisätietoja', - 'basic_journal_information' => 'Tapahtuman perustiedot', - 'transaction_journal_extra' => 'Lisätiedot', - 'att_part_of_journal' => 'Tallennettu tietueeseen ":journal"', - 'total_amount' => 'Kokonaissumma', - 'number_of_decimals' => 'Desimaalien määrä', + 'transaction_journal_information' => 'Tapahtumatiedot', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Metatiedot', + 'transaction_journal_more' => 'Lisätietoja', + 'basic_journal_information' => 'Tapahtuman perustiedot', + 'transaction_journal_extra' => 'Lisätiedot', + 'att_part_of_journal' => 'Tallennettu tietueeseen ":journal"', + 'total_amount' => 'Kokonaissumma', + 'number_of_decimals' => 'Desimaalien määrä', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Ylläpito', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Käyttäjähallinta', - 'list_all_users' => 'Kaikki käyttäjät', - 'all_users' => 'Kaikki käyttäjät', - 'instance_configuration' => 'Asetukset', - 'firefly_instance_configuration' => 'Firefly III asetukset', - 'setting_single_user_mode' => 'Yhden käyttäjän tila', - 'setting_single_user_mode_explain' => 'Normaalisti Firefly III hyväksyy vain yhden käyttäjän rekisteröitymisen - Sinut. Tämä on tehty turvallisuutesi takia, estämään muita käyttämästä ohjelmaa ilman sinun lupaasi. Seuraavat rekisteröitymiset on estetty. Jos poistat valinnan tästä valintaruudusta, muut pystyvät myös kirjautumaan. Verkon yli kirjautuminen vaatii, että ohjelman internet-yhteysasetukset ovat myös oikein määritelty.', - 'store_configuration' => 'Tallenna asetukset', - 'single_user_administration' => 'Käyttäjän :email ylläpito', - 'edit_user' => 'Muokkaa käyttäjää :email', - 'hidden_fields_preferences' => 'Voit ottaa käyttöön lisää tapahtumavalintoja asetuksissa.', - 'user_data_information' => 'Käyttäjätiedot', - 'user_information' => 'Käyttäjätiedot', - 'total_size' => 'koko yhteensä', - 'budget_or_budgets' => ':count budjetti|:count budjettia', - 'budgets_with_limits' => ':count budjetti määritetyllä summalla|:count budjettia määritetyllä summalla', - 'nr_of_rules_in_total_groups' => ':count_rules sääntöä :count_groups sääntöryhmässä', - 'tag_or_tags' => ':count tagi|:count tagia', - 'configuration_updated' => 'Asetukset on päivitetty', - 'setting_is_demo_site' => 'Esittelytila', - 'setting_is_demo_site_explain' => 'Tämä valintaruutu aktivoi esittelytilan - valinnalla saattaa olla outoja sivuvaikutuksia.', - 'block_code_bounced' => 'Sähköpostiviesti palautui', - 'block_code_expired' => 'Demokäyttäjän tili on vanhentunut', - 'no_block_code' => 'Ei syytä estoon tai käyttäjää ei ole estetty', - 'block_code_email_changed' => 'Käyttäjä ei ole vielä vahvistanut uutta sähköpostiosoitetta', - 'admin_update_email' => 'Profiilisivun tiedoista poiketen käyttäjää ei informoida sähköpostiosoitteen muutoksesta!', - 'update_user' => 'Päivitä käyttäjä', - 'updated_user' => 'Käyttäjän tiedot on muutettu.', - 'delete_user' => 'Poista käyttäjätili ":email"', - 'user_deleted' => 'Käyttäjä on poistettu', - 'send_test_email' => 'Testaa sähköpostin lähetystä', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Lähetä viesti', - 'send_test_triggered' => 'Testiviesti lähetettiin. Tarkista sähköpostisi sekä lokitiedostot.', - 'give_admin_careful' => 'Käyttäjät, joille on annettu järjestelmänvalvojan oikeudet, voivat poistaa oikeudet sinulta. Ole varovainen.', - 'admin_maintanance_title' => 'Huolto', - 'admin_maintanance_expl' => 'Joitakin käteviä nappeja Firefly III -huoltoon', - 'admin_maintenance_clear_cache' => 'Tyhjennä välimuisti', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Jaetun tapahtuman kuvaus', - 'split_transaction_title_help' => 'Jos luot jaetun tapahtuman, kokonaisuudelle tarvitaan nimi.', - 'split_title_help' => 'Jos luot jaetun tapahtuman, kokonaisuudelle tarvitaan nimi.', - 'you_create_transfer' => 'Olet luomassa siirtoa.', - 'you_create_withdrawal' => 'Olet luomassa nostoa.', - 'you_create_deposit' => 'Olet luomassa talletusta.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Ylläpito', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'Käyttäjähallinta', + 'list_all_users' => 'Kaikki käyttäjät', + 'all_users' => 'Kaikki käyttäjät', + 'instance_configuration' => 'Asetukset', + 'firefly_instance_configuration' => 'Firefly III asetukset', + 'setting_single_user_mode' => 'Yhden käyttäjän tila', + 'setting_single_user_mode_explain' => 'Normaalisti Firefly III hyväksyy vain yhden käyttäjän rekisteröitymisen - Sinut. Tämä on tehty turvallisuutesi takia, estämään muita käyttämästä ohjelmaa ilman sinun lupaasi. Seuraavat rekisteröitymiset on estetty. Jos poistat valinnan tästä valintaruudusta, muut pystyvät myös kirjautumaan. Verkon yli kirjautuminen vaatii, että ohjelman internet-yhteysasetukset ovat myös oikein määritelty.', + 'store_configuration' => 'Tallenna asetukset', + 'single_user_administration' => 'Käyttäjän :email ylläpito', + 'edit_user' => 'Muokkaa käyttäjää :email', + 'hidden_fields_preferences' => 'Voit ottaa käyttöön lisää tapahtumavalintoja asetuksissa.', + 'user_data_information' => 'Käyttäjätiedot', + 'user_information' => 'Käyttäjätiedot', + 'total_size' => 'koko yhteensä', + 'budget_or_budgets' => ':count budjetti|:count budjettia', + 'budgets_with_limits' => ':count budjetti määritetyllä summalla|:count budjettia määritetyllä summalla', + 'nr_of_rules_in_total_groups' => ':count_rules sääntöä :count_groups sääntöryhmässä', + 'tag_or_tags' => ':count tagi|:count tagia', + 'configuration_updated' => 'Asetukset on päivitetty', + 'setting_is_demo_site' => 'Esittelytila', + 'setting_is_demo_site_explain' => 'Tämä valintaruutu aktivoi esittelytilan - valinnalla saattaa olla outoja sivuvaikutuksia.', + 'block_code_bounced' => 'Sähköpostiviesti palautui', + 'block_code_expired' => 'Demokäyttäjän tili on vanhentunut', + 'no_block_code' => 'Ei syytä estoon tai käyttäjää ei ole estetty', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Käyttäjä ei ole vielä vahvistanut uutta sähköpostiosoitetta', + 'admin_update_email' => 'Profiilisivun tiedoista poiketen käyttäjää ei informoida sähköpostiosoitteen muutoksesta!', + 'update_user' => 'Päivitä käyttäjä', + 'updated_user' => 'Käyttäjän tiedot on muutettu.', + 'delete_user' => 'Poista käyttäjätili ":email"', + 'user_deleted' => 'Käyttäjä on poistettu', + 'send_test_email' => 'Testaa sähköpostin lähetystä', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Lähetä viesti', + 'send_test_triggered' => 'Testiviesti lähetettiin. Tarkista sähköpostisi sekä lokitiedostot.', + 'give_admin_careful' => 'Käyttäjät, joille on annettu järjestelmänvalvojan oikeudet, voivat poistaa oikeudet sinulta. Ole varovainen.', + 'admin_maintanance_title' => 'Huolto', + 'admin_maintanance_expl' => 'Joitakin käteviä nappeja Firefly III -huoltoon', + 'admin_maintenance_clear_cache' => 'Tyhjennä välimuisti', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Jaetun tapahtuman kuvaus', + 'split_transaction_title_help' => 'Jos luot jaetun tapahtuman, kokonaisuudelle tarvitaan nimi.', + 'split_title_help' => 'Jos luot jaetun tapahtuman, kokonaisuudelle tarvitaan nimi.', + 'you_create_transfer' => 'Olet luomassa siirtoa.', + 'you_create_withdrawal' => 'Olet luomassa nostoa.', + 'you_create_deposit' => 'Olet luomassa talletusta.', // links - 'journal_link_configuration' => 'Tapahtumien linkitysasetukset', - 'create_new_link_type' => 'Luo uusi linkkityyppi', - 'store_new_link_type' => 'Tallenna uusi linkkityyppi', - 'update_link_type' => 'Päivitä linkkityyppi', - 'edit_link_type' => 'Muokkaa linkkityyppiä ":name"', - 'updated_link_type' => 'Päivitettiin linkkityyppi ":name"', - 'delete_link_type' => 'Poista linkkityyppi ":name"', - 'deleted_link_type' => 'Poistettiin linkkityyppi ":name"', - 'stored_new_link_type' => 'Tallenna uusi linkkityyppi ":name"', - 'cannot_edit_link_type' => 'Linkkityyppiä ":name" ei voi muokata', - 'link_type_help_name' => 'Ts. "Kopioi"', - 'link_type_help_inward' => 'Ts. "kopioi"', - 'link_type_help_outward' => 'Ts. "on kopioitu"', - 'save_connections_by_moving' => 'Tallenna linkki näiden tapahtumien välillä siirtämällä ne toiseen linkkityyppiin:', - 'do_not_save_connection' => '(älä tallenna linkkiä)', - 'link_transaction' => 'Linkitä tapahtuma', - 'link_to_other_transaction' => 'Linkitä tämä tapahtuma toiseen tapahtumaan', - 'select_transaction_to_link' => 'Valitse tapahtuma johon tämä tapahtuma yhdistetään. Linkkejä ei tällä hetkellä käytetä Firefly III:ssa (muuten kuin että ne näytetään), mutta suunnittelen muuttavani tämän tulevaisuudessa. Voit käyttää hakua otsikon tai ID:n perusteella löytääksesi tapahtuman. Jos haluat lisätä valinnaisen yhteystyypin, lue lisää Ylläpito sivulta.', - 'this_transaction' => 'Tämä tapahtuma', - 'transaction' => 'Tapahtuma', - 'comments' => 'Kommentit', - 'link_notes' => 'Haluatko tallentaa linkille muistiinpanoja.', - 'invalid_link_selection' => 'Näitä tapahtumia ei voi linkittää', - 'selected_transaction' => 'Valittu tapahtuma', - 'journals_linked' => 'Tapahtumat on linkitetty.', - 'journals_error_linked' => 'Tapahtumilla on jo linkki.', - 'journals_link_to_self' => 'Et voi linkittää tapahtumaa itseensä', - 'journal_links' => 'Tapahtuman linkit', - 'this_withdrawal' => 'Tämä nosto', - 'this_deposit' => 'Tämä talletus', - 'this_transfer' => 'Tämä siirto', - 'overview_for_link' => 'Yleisnäkymä linkkityypille ":name"', - 'source_transaction' => 'Lähdetapahtuma', - 'link_description' => 'Linkin kuvaus', - 'destination_transaction' => 'Kohdetapahtuma', - 'delete_journal_link' => 'Poista tapahtumien :source ja :destination linkki', - 'deleted_link' => 'Linkki poistettiin', + 'journal_link_configuration' => 'Tapahtumien linkitysasetukset', + 'create_new_link_type' => 'Luo uusi linkkityyppi', + 'store_new_link_type' => 'Tallenna uusi linkkityyppi', + 'update_link_type' => 'Päivitä linkkityyppi', + 'edit_link_type' => 'Muokkaa linkkityyppiä ":name"', + 'updated_link_type' => 'Päivitettiin linkkityyppi ":name"', + 'delete_link_type' => 'Poista linkkityyppi ":name"', + 'deleted_link_type' => 'Poistettiin linkkityyppi ":name"', + 'stored_new_link_type' => 'Tallenna uusi linkkityyppi ":name"', + 'cannot_edit_link_type' => 'Linkkityyppiä ":name" ei voi muokata', + 'link_type_help_name' => 'Ts. "Kopioi"', + 'link_type_help_inward' => 'Ts. "kopioi"', + 'link_type_help_outward' => 'Ts. "on kopioitu"', + 'save_connections_by_moving' => 'Tallenna linkki näiden tapahtumien välillä siirtämällä ne toiseen linkkityyppiin:', + 'do_not_save_connection' => '(älä tallenna linkkiä)', + 'link_transaction' => 'Linkitä tapahtuma', + 'link_to_other_transaction' => 'Linkitä tämä tapahtuma toiseen tapahtumaan', + 'select_transaction_to_link' => 'Valitse tapahtuma johon tämä tapahtuma yhdistetään. Linkkejä ei tällä hetkellä käytetä Firefly III:ssa (muuten kuin että ne näytetään), mutta suunnittelen muuttavani tämän tulevaisuudessa. Voit käyttää hakua otsikon tai ID:n perusteella löytääksesi tapahtuman. Jos haluat lisätä valinnaisen yhteystyypin, lue lisää Ylläpito sivulta.', + 'this_transaction' => 'Tämä tapahtuma', + 'transaction' => 'Tapahtuma', + 'comments' => 'Kommentit', + 'link_notes' => 'Haluatko tallentaa linkille muistiinpanoja.', + 'invalid_link_selection' => 'Näitä tapahtumia ei voi linkittää', + 'selected_transaction' => 'Valittu tapahtuma', + 'journals_linked' => 'Tapahtumat on linkitetty.', + 'journals_error_linked' => 'Tapahtumilla on jo linkki.', + 'journals_link_to_self' => 'Et voi linkittää tapahtumaa itseensä', + 'journal_links' => 'Tapahtuman linkit', + 'this_withdrawal' => 'Tämä nosto', + 'this_deposit' => 'Tämä talletus', + 'this_transfer' => 'Tämä siirto', + 'overview_for_link' => 'Yleisnäkymä linkkityypille ":name"', + 'source_transaction' => 'Lähdetapahtuma', + 'link_description' => 'Linkin kuvaus', + 'destination_transaction' => 'Kohdetapahtuma', + 'delete_journal_link' => 'Poista tapahtumien :source ja :destination linkki', + 'deleted_link' => 'Linkki poistettiin', // link translations: - 'Paid_name' => 'Maksettu', - 'Refund_name' => 'Hyvitys', - 'Reimbursement_name' => 'Korvaus', - 'Related_name' => 'Liittyvä', - 'relates to_inward' => 'liittyy', - 'is (partially) refunded by_inward' => 'on (osittain) palauttanut', - 'is (partially) paid for by_inward' => 'on (osittain) maksanut', - 'is (partially) reimbursed by_inward' => 'on (osittain) korvannut', - 'inward_transaction' => 'Tapahtuma sisäänpäin', - 'outward_transaction' => 'Tapahtuma ulospäin', - 'relates to_outward' => 'liittyy', - '(partially) refunds_outward' => '(osittainen) palautus', - '(partially) pays for_outward' => '(osittainen) maksu', - '(partially) reimburses_outward' => '(osittainen) korvaus', - 'is (partially) refunded by' => 'on (osittain) palauttanut', - 'is (partially) paid for by' => 'on (osittain) maksanut', - 'is (partially) reimbursed by' => 'on (osittain) korvannut', - 'relates to' => 'liittyy', - '(partially) refunds' => '(osittainen) palautus', - '(partially) pays for' => '(osittainen) maksu', - '(partially) reimburses' => '(osittainen) korvaus', + 'Paid_name' => 'Maksettu', + 'Refund_name' => 'Hyvitys', + 'Reimbursement_name' => 'Korvaus', + 'Related_name' => 'Liittyvä', + 'relates to_inward' => 'liittyy', + 'is (partially) refunded by_inward' => 'on (osittain) palauttanut', + 'is (partially) paid for by_inward' => 'on (osittain) maksanut', + 'is (partially) reimbursed by_inward' => 'on (osittain) korvannut', + 'inward_transaction' => 'Tapahtuma sisäänpäin', + 'outward_transaction' => 'Tapahtuma ulospäin', + 'relates to_outward' => 'liittyy', + '(partially) refunds_outward' => '(osittainen) palautus', + '(partially) pays for_outward' => '(osittainen) maksu', + '(partially) reimburses_outward' => '(osittainen) korvaus', + 'is (partially) refunded by' => 'on (osittain) palauttanut', + 'is (partially) paid for by' => 'on (osittain) maksanut', + 'is (partially) reimbursed by' => 'on (osittain) korvannut', + 'relates to' => 'liittyy', + '(partially) refunds' => '(osittainen) palautus', + '(partially) pays for' => '(osittainen) maksu', + '(partially) reimburses' => '(osittainen) korvaus', // split a transaction: - 'splits' => 'Tapahtuman osat', - 'add_another_split' => 'Lisää tapahtumaan uusi osa', - 'cannot_edit_opening_balance' => 'Et voi muokata tilin alkusaldoa.', - 'no_edit_multiple_left' => 'Yhtään kelvollista tapahtumaa ei ole valittu.', - 'breadcrumb_convert_group' => 'Muuta tapahtumaa', - 'convert_invalid_source' => 'Lähtötilin tiedot eivät kelpaa tapahtumalle #%d.', - 'convert_invalid_destination' => 'Kohdetilin tiedot eivät kelpaa tapahtumalle #%d.', - 'create_another' => 'Tallennuksen jälkeen, palaa takaisin luomaan uusi tapahtuma.', - 'after_update_create_another' => 'Päivityksen jälkeen, palaa takaisin jatkamaan muokkausta.', - 'store_as_new' => 'Tallenna uutena tapahtumana päivityksen sijaan.', - 'reset_after' => 'Tyhjennä lomake lähetyksen jälkeen', - 'errors_submission' => 'Lomakkeen tiedoissa oli jotain vikaa. Ole hyvä ja tarkista virheet.', - 'transaction_expand_split' => 'Laajenna jako', - 'transaction_collapse_split' => 'Yhdistä jako', + 'splits' => 'Tapahtuman osat', + 'add_another_split' => 'Lisää tapahtumaan uusi osa', + 'cannot_edit_opening_balance' => 'Et voi muokata tilin alkusaldoa.', + 'no_edit_multiple_left' => 'Yhtään kelvollista tapahtumaa ei ole valittu.', + 'breadcrumb_convert_group' => 'Muuta tapahtumaa', + 'convert_invalid_source' => 'Lähtötilin tiedot eivät kelpaa tapahtumalle #%d.', + 'convert_invalid_destination' => 'Kohdetilin tiedot eivät kelpaa tapahtumalle #%d.', + 'create_another' => 'Tallennuksen jälkeen, palaa takaisin luomaan uusi tapahtuma.', + 'after_update_create_another' => 'Päivityksen jälkeen, palaa takaisin jatkamaan muokkausta.', + 'store_as_new' => 'Tallenna uutena tapahtumana päivityksen sijaan.', + 'reset_after' => 'Tyhjennä lomake lähetyksen jälkeen', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Laajenna jako', + 'transaction_collapse_split' => 'Yhdistä jako', // object groups - 'default_group_title_name' => '(ryhmittelemättömät)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ryhmittelemättömät)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Luodaan käyttötili!', - 'no_accounts_intro_asset' => 'Sinulla ei ole vielä yhtään käyttötiliä. Käyttötilit ovat päätilejäsi: palkkatili, säästötili, pankkikortti, jaetut tilit ja jopa luottokorttisi.', - 'no_accounts_imperative_asset' => 'Aloittaaksesi käyttämään Firefly III:sta joudut luomaan ainakin yhden käyttötilin. Luodaan se nyt:', - 'no_accounts_create_asset' => 'Luo käyttötili', - 'no_accounts_title_expense' => 'Luodaan kulutustili!', - 'no_accounts_intro_expense' => 'Sinulla ei ole vielä yhtään kulutustiliä. Kulutustilit ovat paikkoja tai henkilöitä joille maksat rahaa, esimerkiksi kaupat ja supermarketit.', - 'no_accounts_imperative_expense' => 'Käyttötili luodaan tarvittaessa automaattisesti kun luot tapahtumia, mutta voit halutessasi luoda niitä myös tässä. Luodaan yksi nyt:', - 'no_accounts_create_expense' => 'Luo kulutustili', - 'no_accounts_title_revenue' => 'Luodaan tuottotili!', - 'no_accounts_intro_revenue' => 'Sinulla ei ole vielä yhtään tuottotiliä. Tuottotilit ovat tilejä, joille saat rahaa jostain - esimerkiksi palkkana työnantajaltasi.', - 'no_accounts_imperative_revenue' => 'Tuottotili luodaan tarvittaessa automaattisesti kun luot tapahtumia, mutta voit halutessasi luoda niitä myös tässä. Luodaan yksi nyt:', - 'no_accounts_create_revenue' => 'Luo tuottotili', - 'no_accounts_title_liabilities' => 'Luodaan laina!', - 'no_accounts_intro_liabilities' => 'Sinulla ei ole vielä yhtään lainatilejä. Lainat ovat tilejä joille merkitset lainat ja velat. Esimerkkeinä opinto- tai asuntolaina.', - 'no_accounts_imperative_liabilities' => 'Tätä ominaisuutta ei tarvitse käyttää, mutta se on käytännöllinen jos sinun täytyy seurata tällaisia asioita.', - 'no_accounts_create_liabilities' => 'Luo laina', - 'no_budgets_title_default' => 'Luodaan budjetti', - 'no_rules_title_default' => 'Luodaan sääntö', - 'no_budgets_intro_default' => 'Sinulla ei ole vielä yhtään budjettia. Budjetteja käytetään organisoimaan kustannuksiasi loogisiin ryhmiin, joissa voit asettaa arvioita menoillesi.', - 'no_rules_intro_default' => 'Sinulla ei ole vielä sääntöjä. Säännöt ovat tehokkaita automaatioita, jotka voivat käsitellä tapahtumia sinulle.', - 'no_rules_imperative_default' => 'Säännöt voivat olla erittäin hyödyllisiä, kun hallinnoit maksutapahtumia. Luodaan sellainen nyt:', - 'no_budgets_imperative_default' => 'Budjetit ovat rahojen hallinnan perustyökaluja. Luodaan sellainen nyt:', - 'no_budgets_create_default' => 'Luo budjetti', - 'no_rules_create_default' => 'Luo sääntö', - 'no_categories_title_default' => 'Luodaan kategoria!', - 'no_categories_intro_default' => 'Sinulla ei ole vielä yhtään kategoriaa. Kategorioita käytetään tapahtumien hienosäätämiseen - kategorioimaan niitä.', - 'no_categories_imperative_default' => 'Kategorioita luodaan tarvittaessa automaattisesti samalla kun luot tapahtumia, mutta voit luoda niitä myös tässä. Luodaanpa sellainen nyt:', - 'no_categories_create_default' => 'Luo kategoria', - 'no_tags_title_default' => 'Luodaan tägi!', - 'no_tags_intro_default' => 'Sinulla ei ole vielä yhtään tägiä. Tägejä käytetään hienosäätämään tapahtumiasi ja merkitsemään niitä valituilla avainsanoilla.', - 'no_tags_imperative_default' => 'Tägit luodaan tarvittaessa automaattisesti kun luot tapahtumia, mutta voit luoda sellaisen tässä. Luotaisiinko yksi tägi nyt:', - 'no_tags_create_default' => 'Luo tägi', - 'no_transactions_title_withdrawal' => 'Luodaan kustannus!', - 'no_transactions_intro_withdrawal' => 'Sinulla ei ole vielä kustannuksia. Talouden hallintaa varten tänne kirjataan kustannukset.', - 'no_transactions_imperative_withdrawal' => 'Oletko kuluttanut rahaa? Se pitää kirjata tänne:', - 'no_transactions_create_withdrawal' => 'Luo kustannus', - 'no_transactions_title_deposit' => 'Luodaanpa sitten hieman ansioita!', - 'no_transactions_intro_deposit' => 'Sinulla ei ole vielä ansioita. Talouden hallintaa varten tänne kirjataan ansiot.', - 'no_transactions_imperative_deposit' => 'Oletko vastaanottanut rahaa? Se kirjataan tänne:', - 'no_transactions_create_deposit' => 'Luo talletus', - 'no_transactions_title_transfers' => 'Luodaan siirto!', - 'no_transactions_intro_transfers' => 'Sinulla ei ole vielä yhtään siirtoa. Kun siirrät rahaa omaisuustilien välillä, se tallennetaan siirtona.', - 'no_transactions_imperative_transfers' => 'Oletko siirtänyt rahaa tiliesi välillä, eli tehnyt siirtoja? Ne kirjataan tänne:', - 'no_transactions_create_transfers' => 'Luo siirto', - 'no_piggies_title_default' => 'Luodaan säästöpossu!', - 'no_piggies_intro_default' => 'Sinulla ei ole vielä yhtään säästöpossua. Voit luoda säästöpossuja jaotellaksesi säästöjäsi ja pitääksesi kirjaa asioista joihin olet säästämässä rahaa.', - 'no_piggies_imperative_default' => 'Säästätkö rahaa johonkin tarkoitukseen? Luo säästöpossu ja seuraa edistymistäsi:', - 'no_piggies_create_default' => 'Luo uusi säästöpossu', - 'no_bills_title_default' => 'Luodaan lasku!', - 'no_bills_intro_default' => 'Sinulla ei ole vielä yhtään laskua. Voit luoda laskuja pitääksesi kirjaa säännöllisistä menoistasi. Esimerkiksi vuokra ja vakuutus.', - 'no_bills_imperative_default' => 'Tuleeko sinulle säännöllisesti jotain laskuja? Luo lasku ja pidä kirjaa maksuistasi:', - 'no_bills_create_default' => 'Luo lasku', + 'no_accounts_title_asset' => 'Luodaan käyttötili!', + 'no_accounts_intro_asset' => 'Sinulla ei ole vielä yhtään käyttötiliä. Käyttötilit ovat päätilejäsi: palkkatili, säästötili, pankkikortti, jaetut tilit ja jopa luottokorttisi.', + 'no_accounts_imperative_asset' => 'Aloittaaksesi käyttämään Firefly III:sta joudut luomaan ainakin yhden käyttötilin. Luodaan se nyt:', + 'no_accounts_create_asset' => 'Luo käyttötili', + 'no_accounts_title_expense' => 'Luodaan kulutustili!', + 'no_accounts_intro_expense' => 'Sinulla ei ole vielä yhtään kulutustiliä. Kulutustilit ovat paikkoja tai henkilöitä joille maksat rahaa, esimerkiksi kaupat ja supermarketit.', + 'no_accounts_imperative_expense' => 'Käyttötili luodaan tarvittaessa automaattisesti kun luot tapahtumia, mutta voit halutessasi luoda niitä myös tässä. Luodaan yksi nyt:', + 'no_accounts_create_expense' => 'Luo kulutustili', + 'no_accounts_title_revenue' => 'Luodaan tuottotili!', + 'no_accounts_intro_revenue' => 'Sinulla ei ole vielä yhtään tuottotiliä. Tuottotilit ovat tilejä, joille saat rahaa jostain - esimerkiksi palkkana työnantajaltasi.', + 'no_accounts_imperative_revenue' => 'Tuottotili luodaan tarvittaessa automaattisesti kun luot tapahtumia, mutta voit halutessasi luoda niitä myös tässä. Luodaan yksi nyt:', + 'no_accounts_create_revenue' => 'Luo tuottotili', + 'no_accounts_title_liabilities' => 'Luodaan laina!', + 'no_accounts_intro_liabilities' => 'Sinulla ei ole vielä yhtään lainatilejä. Lainat ovat tilejä joille merkitset lainat ja velat. Esimerkkeinä opinto- tai asuntolaina.', + 'no_accounts_imperative_liabilities' => 'Tätä ominaisuutta ei tarvitse käyttää, mutta se on käytännöllinen jos sinun täytyy seurata tällaisia asioita.', + 'no_accounts_create_liabilities' => 'Luo laina', + 'no_budgets_title_default' => 'Luodaan budjetti', + 'no_rules_title_default' => 'Luodaan sääntö', + 'no_budgets_intro_default' => 'Sinulla ei ole vielä yhtään budjettia. Budjetteja käytetään organisoimaan kustannuksiasi loogisiin ryhmiin, joissa voit asettaa arvioita menoillesi.', + 'no_rules_intro_default' => 'Sinulla ei ole vielä sääntöjä. Säännöt ovat tehokkaita automaatioita, jotka voivat käsitellä tapahtumia sinulle.', + 'no_rules_imperative_default' => 'Säännöt voivat olla erittäin hyödyllisiä, kun hallinnoit maksutapahtumia. Luodaan sellainen nyt:', + 'no_budgets_imperative_default' => 'Budjetit ovat rahojen hallinnan perustyökaluja. Luodaan sellainen nyt:', + 'no_budgets_create_default' => 'Luo budjetti', + 'no_rules_create_default' => 'Luo sääntö', + 'no_categories_title_default' => 'Luodaan kategoria!', + 'no_categories_intro_default' => 'Sinulla ei ole vielä yhtään kategoriaa. Kategorioita käytetään tapahtumien hienosäätämiseen - kategorioimaan niitä.', + 'no_categories_imperative_default' => 'Kategorioita luodaan tarvittaessa automaattisesti samalla kun luot tapahtumia, mutta voit luoda niitä myös tässä. Luodaanpa sellainen nyt:', + 'no_categories_create_default' => 'Luo kategoria', + 'no_tags_title_default' => 'Luodaan tägi!', + 'no_tags_intro_default' => 'Sinulla ei ole vielä yhtään tägiä. Tägejä käytetään hienosäätämään tapahtumiasi ja merkitsemään niitä valituilla avainsanoilla.', + 'no_tags_imperative_default' => 'Tägit luodaan tarvittaessa automaattisesti kun luot tapahtumia, mutta voit luoda sellaisen tässä. Luotaisiinko yksi tägi nyt:', + 'no_tags_create_default' => 'Luo tägi', + 'no_transactions_title_withdrawal' => 'Luodaan kustannus!', + 'no_transactions_intro_withdrawal' => 'Sinulla ei ole vielä kustannuksia. Talouden hallintaa varten tänne kirjataan kustannukset.', + 'no_transactions_imperative_withdrawal' => 'Oletko kuluttanut rahaa? Se pitää kirjata tänne:', + 'no_transactions_create_withdrawal' => 'Luo kustannus', + 'no_transactions_title_deposit' => 'Luodaanpa sitten hieman ansioita!', + 'no_transactions_intro_deposit' => 'Sinulla ei ole vielä ansioita. Talouden hallintaa varten tänne kirjataan ansiot.', + 'no_transactions_imperative_deposit' => 'Oletko vastaanottanut rahaa? Se kirjataan tänne:', + 'no_transactions_create_deposit' => 'Luo talletus', + 'no_transactions_title_transfers' => 'Luodaan siirto!', + 'no_transactions_intro_transfers' => 'Sinulla ei ole vielä yhtään siirtoa. Kun siirrät rahaa omaisuustilien välillä, se tallennetaan siirtona.', + 'no_transactions_imperative_transfers' => 'Oletko siirtänyt rahaa tiliesi välillä, eli tehnyt siirtoja? Ne kirjataan tänne:', + 'no_transactions_create_transfers' => 'Luo siirto', + 'no_piggies_title_default' => 'Luodaan säästöpossu!', + 'no_piggies_intro_default' => 'Sinulla ei ole vielä yhtään säästöpossua. Voit luoda säästöpossuja jaotellaksesi säästöjäsi ja pitääksesi kirjaa asioista joihin olet säästämässä rahaa.', + 'no_piggies_imperative_default' => 'Säästätkö rahaa johonkin tarkoitukseen? Luo säästöpossu ja seuraa edistymistäsi:', + 'no_piggies_create_default' => 'Luo uusi säästöpossu', + 'no_bills_title_default' => 'Luodaan lasku!', + 'no_bills_intro_default' => 'Sinulla ei ole vielä yhtään laskua. Voit luoda laskuja pitääksesi kirjaa säännöllisistä menoistasi. Esimerkiksi vuokra ja vakuutus.', + 'no_bills_imperative_default' => 'Tuleeko sinulle säännöllisesti jotain laskuja? Luo lasku ja pidä kirjaa maksuistasi:', + 'no_bills_create_default' => 'Luo lasku', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Toistuvat tapahtumat', - 'repeat_until_in_past' => 'Tämä toistuva tapahtuma lakkasi toistumasta :date.', - 'recurring_calendar_view' => 'Kalenteri', - 'no_recurring_title_default' => 'Luodaan toistuva tapahtuma!', - 'no_recurring_intro_default' => 'Sinulla ei ole vielä yhtään toistuvaa tapahtumaa. Niiden avulla Firefly III osaa luoda automaattisesti tapahtumia sinulle.', - 'no_recurring_imperative_default' => 'Tämä on aika edistynyt toiminto, mutta siitä voi olla paljon hyötyä. Lue käyttöohje (?)-ikonin alta oikeasta ylänurkasta ennen jatkamista.', - 'no_recurring_create_default' => 'Luo toistuva tapahtuma', - 'make_new_recurring' => 'Luo toistuva tapahtuma', - 'recurring_daily' => 'Joka päivä', - 'recurring_weekly' => 'Joka viikon :weekday', - 'recurring_weekly_skip' => ':weekday joka :skip. viikko', - 'recurring_monthly' => 'Joka kuun :dayOfMonth. päivä', - 'recurring_monthly_skip' => 'Joka :skip. kuun :dayOfMonth. päivä', - 'recurring_ndom' => 'Joka kuun :dayOfMonth. :weekday', - 'recurring_yearly' => ':date vuosittain', - 'overview_for_recurrence' => 'Toistuvan tapahtuman ":title" yleisnäkymä', - 'warning_duplicates_repetitions' => 'Joissain harvoissa tapauksissa päivämäärät näkyvät kahdesti tällä listalla. Näin saattaa tapahtua kun toistuvissa tapahtumissa tapahtuu törmäyksiä. Firefly III luo vain yhden tapahtuman päivässä.', - 'created_transactions' => 'Liittyy tapahtumiin', - 'expected_withdrawals' => 'Odotettavissa olevat nostot', - 'expected_deposits' => 'Odotettavissa olevat talletukset', - 'expected_transfers' => 'Odotettavissa olevat siirrot', - 'created_withdrawals' => 'Luodut nostot', - 'created_deposits' => 'Luodut talletukset', - 'created_transfers' => 'Luodut siirrot', - 'recurring_info' => 'Toistuva tapahtuma :count / :total', - 'created_from_recurrence' => 'Luotu toistuvasta tapahtumasta ":title" (#:id)', - 'recurring_never_cron' => '"Cron" ajoitustapahtuma jota käytetään toistuvien tapahtumien suoritukseen ei ole kertaakaan käynnistynyt. Tämä on normaalia kun Firefly III:n asennus on uusi, mutta tämä kannattaisi korjata niin pian kuin suinkin. Lue opastus Cronin määrittämisestä (?)-ikonista sivun oikeasta yläkulmasta.', - 'recurring_cron_long_ago' => 'Näyttää siltä että toistuvia tapahtumia tukevan "Cron" prosessin edellisestä ajosta on kulunut yli 36 tuntia. Oletko varma että se on määritelty oikein? Lue ohjeet ohjesivuilta, löydät ne tämän sivun oikean yläkulman (?)-ikonin alta.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Toistuvat tapahtumat', + 'repeat_until_in_past' => 'Tämä toistuva tapahtuma lakkasi toistumasta :date.', + 'recurring_calendar_view' => 'Kalenteri', + 'no_recurring_title_default' => 'Luodaan toistuva tapahtuma!', + 'no_recurring_intro_default' => 'Sinulla ei ole vielä yhtään toistuvaa tapahtumaa. Niiden avulla Firefly III osaa luoda automaattisesti tapahtumia sinulle.', + 'no_recurring_imperative_default' => 'Tämä on aika edistynyt toiminto, mutta siitä voi olla paljon hyötyä. Lue käyttöohje (?)-ikonin alta oikeasta ylänurkasta ennen jatkamista.', + 'no_recurring_create_default' => 'Luo toistuva tapahtuma', + 'make_new_recurring' => 'Luo toistuva tapahtuma', + 'recurring_daily' => 'Joka päivä', + 'recurring_weekly' => 'Joka viikon :weekday', + 'recurring_weekly_skip' => ':weekday joka :skip. viikko', + 'recurring_monthly' => 'Joka kuun :dayOfMonth. päivä', + 'recurring_monthly_skip' => 'Joka :skip. kuun :dayOfMonth. päivä', + 'recurring_ndom' => 'Joka kuun :dayOfMonth. :weekday', + 'recurring_yearly' => ':date vuosittain', + 'overview_for_recurrence' => 'Toistuvan tapahtuman ":title" yleisnäkymä', + 'warning_duplicates_repetitions' => 'Joissain harvoissa tapauksissa päivämäärät näkyvät kahdesti tällä listalla. Näin saattaa tapahtua kun toistuvissa tapahtumissa tapahtuu törmäyksiä. Firefly III luo vain yhden tapahtuman päivässä.', + 'created_transactions' => 'Liittyy tapahtumiin', + 'expected_withdrawals' => 'Odotettavissa olevat nostot', + 'expected_deposits' => 'Odotettavissa olevat talletukset', + 'expected_transfers' => 'Odotettavissa olevat siirrot', + 'created_withdrawals' => 'Luodut nostot', + 'created_deposits' => 'Luodut talletukset', + 'created_transfers' => 'Luodut siirrot', + 'recurring_info' => 'Toistuva tapahtuma :count / :total', + 'created_from_recurrence' => 'Luotu toistuvasta tapahtumasta ":title" (#:id)', + 'recurring_never_cron' => '"Cron" ajoitustapahtuma jota käytetään toistuvien tapahtumien suoritukseen ei ole kertaakaan käynnistynyt. Tämä on normaalia kun Firefly III:n asennus on uusi, mutta tämä kannattaisi korjata niin pian kuin suinkin. Lue opastus Cronin määrittämisestä (?)-ikonista sivun oikeasta yläkulmasta.', + 'recurring_cron_long_ago' => 'Näyttää siltä että toistuvia tapahtumia tukevan "Cron" prosessin edellisestä ajosta on kulunut yli 36 tuntia. Oletko varma että se on määritelty oikein? Lue ohjeet ohjesivuilta, löydät ne tämän sivun oikean yläkulman (?)-ikonin alta.', - 'create_new_recurrence' => 'Luo uusi toistuva tapahtuma', - 'help_first_date' => 'Milloin tapahtuma tapahtuu ensimmäisen kerran? Valitun päivämäärän täytyy olla tulevaisuudessa. Päivän voi korjata myöhemmin.', - 'help_first_date_no_past' => 'Milloin tapahtuma toistuu ensimmäisen kerran? Firefly III ei luo näitä tapahtumia menneisyyteen.', - 'no_currency' => '(ei valuuttaa)', - 'mandatory_for_recurring' => 'Pakolliset toistuvan tapahtuman tiedot', - 'mandatory_for_transaction' => 'Pakollinen tapahtuman tieto', - 'optional_for_recurring' => 'Valinnainen toistuvan tapahtuman tieto', - 'optional_for_transaction' => 'Valinnainen tapahtuman tieto', - 'change_date_other_options' => 'Muuta "Aloituspäivämäärä" nähdäksesi lisää valintoja.', - 'mandatory_fields_for_tranaction' => 'Nämä arvot päätyvät tapahtumiin joita olet luomassa', - 'click_for_calendar' => 'Tästä saat avattua kalenterinäytön nähdäksesi tapahtuman toistot.', - 'repeat_forever' => 'Toista tästä eteenpäin', - 'repeat_until_date' => 'Toisto päättyy päivämäärään', - 'repeat_times' => 'Lisää toistojen lukumäärä', - 'recurring_skips_one' => 'Joka toinen', - 'recurring_skips_more' => 'Ohitetaan :count tapahtumaa', - 'store_new_recurrence' => 'Tallenna toistuva tapahtuma', - 'stored_new_recurrence' => 'Toistuva tapahtuma ":title" tallennettu onnistuneesti.', - 'edit_recurrence' => 'Muokkaa toistuvaa tapahtumaa ":title"', - 'recurring_repeats_until' => 'Toistuu :date asti', - 'recurring_repeats_forever' => 'Toistuu loputtomiin', - 'recurring_repeats_x_times' => 'Toistuu :count kerran|Toistuu :count kertaa', - 'update_recurrence' => 'Päivitä toistuva tapahtuma', - 'updated_recurrence' => 'Päivitettiin toistuva tapahtuma ":title"', - 'recurrence_is_inactive' => 'Tämä toistuva tapahtuma ei ole aktiivinen, eikä tule luomaan uusi tapahtumia.', - 'delete_recurring' => 'Poista toistuva tapahtuma ":title"', - 'new_recurring_transaction' => 'Uusi toistuva tapahtuma', - 'help_weekend' => 'Mitä Firefly III:n pitäisi tehdä kun toistuva tapahtuma osuu Lauantaille tai Sunnuntaille?', - 'do_nothing' => 'Luo vain tämä tapahtuma', - 'skip_transaction' => 'Ohita tämä tapahtuma', - 'jump_to_friday' => 'Luo tapahtuma jo edellisenä Perjantaina', - 'jump_to_monday' => 'Luo tapahtuma vasta seuraavana Maanantaina', - 'will_jump_friday' => 'Luodaan perjantaina osuttaessa viikonloppuun.', - 'will_jump_monday' => 'Siirtyy maanantaille osuttaessa viikonloppuun.', - 'except_weekends' => 'Paitsi viikonloppuisin', - 'recurrence_deleted' => 'Toistuva tapahtuma ":title" poistettu', + 'create_new_recurrence' => 'Luo uusi toistuva tapahtuma', + 'help_first_date' => 'Milloin tapahtuma tapahtuu ensimmäisen kerran? Valitun päivämäärän täytyy olla tulevaisuudessa. Päivän voi korjata myöhemmin.', + 'help_first_date_no_past' => 'Milloin tapahtuma toistuu ensimmäisen kerran? Firefly III ei luo näitä tapahtumia menneisyyteen.', + 'no_currency' => '(ei valuuttaa)', + 'mandatory_for_recurring' => 'Pakolliset toistuvan tapahtuman tiedot', + 'mandatory_for_transaction' => 'Pakollinen tapahtuman tieto', + 'optional_for_recurring' => 'Valinnainen toistuvan tapahtuman tieto', + 'optional_for_transaction' => 'Valinnainen tapahtuman tieto', + 'change_date_other_options' => 'Muuta "Aloituspäivämäärä" nähdäksesi lisää valintoja.', + 'mandatory_fields_for_tranaction' => 'Nämä arvot päätyvät tapahtumiin joita olet luomassa', + 'click_for_calendar' => 'Tästä saat avattua kalenterinäytön nähdäksesi tapahtuman toistot.', + 'repeat_forever' => 'Toista tästä eteenpäin', + 'repeat_until_date' => 'Toisto päättyy päivämäärään', + 'repeat_times' => 'Lisää toistojen lukumäärä', + 'recurring_skips_one' => 'Joka toinen', + 'recurring_skips_more' => 'Ohitetaan :count tapahtumaa', + 'store_new_recurrence' => 'Tallenna toistuva tapahtuma', + 'stored_new_recurrence' => 'Toistuva tapahtuma ":title" tallennettu onnistuneesti.', + 'edit_recurrence' => 'Muokkaa toistuvaa tapahtumaa ":title"', + 'recurring_repeats_until' => 'Toistuu :date asti', + 'recurring_repeats_forever' => 'Toistuu loputtomiin', + 'recurring_repeats_x_times' => 'Toistuu :count kerran|Toistuu :count kertaa', + 'update_recurrence' => 'Päivitä toistuva tapahtuma', + 'updated_recurrence' => 'Päivitettiin toistuva tapahtuma ":title"', + 'recurrence_is_inactive' => 'Tämä toistuva tapahtuma ei ole aktiivinen, eikä tule luomaan uusi tapahtumia.', + 'delete_recurring' => 'Poista toistuva tapahtuma ":title"', + 'new_recurring_transaction' => 'Uusi toistuva tapahtuma', + 'help_weekend' => 'Mitä Firefly III:n pitäisi tehdä kun toistuva tapahtuma osuu Lauantaille tai Sunnuntaille?', + 'do_nothing' => 'Luo vain tämä tapahtuma', + 'skip_transaction' => 'Ohita tämä tapahtuma', + 'jump_to_friday' => 'Luo tapahtuma jo edellisenä Perjantaina', + 'jump_to_monday' => 'Luo tapahtuma vasta seuraavana Maanantaina', + 'will_jump_friday' => 'Luodaan perjantaina osuttaessa viikonloppuun.', + 'will_jump_monday' => 'Siirtyy maanantaille osuttaessa viikonloppuun.', + 'except_weekends' => 'Paitsi viikonloppuisin', + 'recurrence_deleted' => 'Toistuva tapahtuma ":title" poistettu', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Saldo (:currency)', - 'box_spent_in_currency' => 'Kulutettu (:currency)', - 'box_earned_in_currency' => 'Tienattu (:currency)', - 'box_budgeted_in_currency' => 'Budjetoitu (:currency)', - 'box_bill_paid_in_currency' => 'Maksetut laskut (:currency)', - 'box_bill_unpaid_in_currency' => 'Maksamattomat laskut (:currency)', - 'box_left_to_spend_in_currency' => 'Kulutettavaa (:currency)', - 'box_net_worth_in_currency' => 'Varallisuus (:currency)', - 'box_spend_per_day' => 'Käytettävissä per päivä: :amount', + 'box_balance_in_currency' => 'Saldo (:currency)', + 'box_spent_in_currency' => 'Kulutettu (:currency)', + 'box_earned_in_currency' => 'Tienattu (:currency)', + 'box_budgeted_in_currency' => 'Budjetoitu (:currency)', + 'box_bill_paid_in_currency' => 'Maksetut laskut (:currency)', + 'box_bill_unpaid_in_currency' => 'Maksamattomat laskut (:currency)', + 'box_left_to_spend_in_currency' => 'Kulutettavaa (:currency)', + 'box_net_worth_in_currency' => 'Varallisuus (:currency)', + 'box_spend_per_day' => 'Käytettävissä per päivä: :amount', // debug page - 'debug_page' => 'Virheenkorjaussivu', - 'debug_submit_instructions' => 'Jos sinulla on ongelmia, voit käyttää tässä ruudussa olevia tietoja virheenjäljitystietoina. Kopioi ja liitä uuteen tai olemassa olevaan GitHub ongelmaan. Se luo kauniin taulukon, jolla voidaan nopeasti diagnosoida ongelmia.', - 'debug_pretty_table' => 'Jos kopioit/liität alla olevan ruudun GitHub-tikettiin, se luo taulukon. Älä lisää tähän tekstiin lainausmerkkejä.', - 'debug_additional_data' => 'Voit myös jakaa alla olevan laatikon sisällön. Voit myös kopioida ja liittää tämän uuteen tai olemassa olevaan GitHub tikettiin. Tämän kentän sisältö voi kuitenkin sisältää yksityisiä tietoja, kuten tilien nimiä, tapahtumatietoja tai sähköpostiosoitteita.', + 'debug_page' => 'Virheenkorjaussivu', + 'debug_submit_instructions' => 'Jos sinulla on ongelmia, voit käyttää tässä ruudussa olevia tietoja virheenjäljitystietoina. Kopioi ja liitä uuteen tai olemassa olevaan GitHub ongelmaan. Se luo kauniin taulukon, jolla voidaan nopeasti diagnosoida ongelmia.', + 'debug_pretty_table' => 'Jos kopioit/liität alla olevan ruudun GitHub-tikettiin, se luo taulukon. Älä lisää tähän tekstiin lainausmerkkejä.', + 'debug_additional_data' => 'Voit myös jakaa alla olevan laatikon sisällön. Voit myös kopioida ja liittää tämän uuteen tai olemassa olevaan GitHub tikettiin. Tämän kentän sisältö voi kuitenkin sisältää yksityisiä tietoja, kuten tilien nimiä, tapahtumatietoja tai sähköpostiosoitteita.', // object groups - 'object_groups_menu_bar' => 'Ryhmät', - 'object_groups_page_title' => 'Ryhmät', - 'object_groups_breadcrumb' => 'Ryhmät', - 'object_groups_index' => 'Yleiskatsaus', - 'object_groups' => 'Ryhmät', - 'object_groups_empty_explain' => 'Joitakin asioita Firefly III:ssa voidaan jakaa ryhmiin. Esimerkiksi Säästöpossuilla on kenttä nimeltä "Ryhmä" muokkaa ja luo sivuilla. Kun asetat tälle kentälle arvon, voit muokata ryhmien nimiä ja järjestystä tällä sivulla. Lisätietoja saat tutustumalla ohjeisiin oikean yläkulman (?)-kuvakkeen alla.', - 'object_group_title' => 'Otsikko', - 'edit_object_group' => 'Muokkaa ryhmää ":title"', - 'delete_object_group' => 'Poista ryhmä ":title"', - 'update_object_group' => 'Päivitä ryhmä', - 'updated_object_group' => 'Ryhmän ":title" päivitys onnistui', - 'deleted_object_group' => 'Ryhmän ":title" poistaminen onnistui', - 'object_group' => 'Ryhmä', + 'object_groups_menu_bar' => 'Ryhmät', + 'object_groups_page_title' => 'Ryhmät', + 'object_groups_breadcrumb' => 'Ryhmät', + 'object_groups_index' => 'Yleiskatsaus', + 'object_groups' => 'Ryhmät', + 'object_groups_empty_explain' => 'Joitakin asioita Firefly III:ssa voidaan jakaa ryhmiin. Esimerkiksi Säästöpossuilla on kenttä nimeltä "Ryhmä" muokkaa ja luo sivuilla. Kun asetat tälle kentälle arvon, voit muokata ryhmien nimiä ja järjestystä tällä sivulla. Lisätietoja saat tutustumalla ohjeisiin oikean yläkulman (?)-kuvakkeen alla.', + 'object_group_title' => 'Otsikko', + 'edit_object_group' => 'Muokkaa ryhmää ":title"', + 'delete_object_group' => 'Poista ryhmä ":title"', + 'update_object_group' => 'Päivitä ryhmä', + 'updated_object_group' => 'Ryhmän ":title" päivitys onnistui', + 'deleted_object_group' => 'Ryhmän ":title" poistaminen onnistui', + 'object_group' => 'Ryhmä', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/fi_FI/form.php b/resources/lang/fi_FI/form.php index 43bf59d2c7..914914b845 100644 --- a/resources/lang/fi_FI/form.php +++ b/resources/lang/fi_FI/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Pankin nimi', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Säästötilien saldo', - 'credit_card_limit' => 'Luottoraja', - 'automatch' => 'Vertaile automaattisesti', - 'skip' => 'Ohita', - 'enabled' => 'Käytössä', - 'name' => 'Nimi', - 'active' => 'Aktiivinen', - 'amount_min' => 'Vähimmäissumma', - 'amount_max' => 'Enimmäissumma', - 'match' => 'Täsmää', - 'strict' => 'Tarkka vertailu', - 'repeat_freq' => 'Toistot', - 'object_group' => 'Ryhmä', - 'location' => 'Sijainti', - 'update_channel' => 'Päivityskanava', - 'currency_id' => 'Valuutta', - 'transaction_currency_id' => 'Valuutta', - 'auto_budget_currency_id' => 'Valuutta', - 'external_ip' => 'Serverin ulkoinen verkko-osoite (IP)', - 'attachments' => 'Liitteet', - 'BIC' => 'BIC', - 'verify_password' => 'Vahvista salasanan turvallisuus', - 'source_account' => 'Lähdetili', - 'destination_account' => 'Kohdetili', - 'asset_destination_account' => 'Kohdetili', - 'include_net_worth' => 'Sisällytä varallisuuteen', - 'asset_source_account' => 'Lähdetili', - 'journal_description' => 'Kuvaus', - 'note' => 'Muistiinpanot', - 'currency' => 'Valuutta', - 'account_id' => 'Käyttötili', - 'budget_id' => 'Budjetti', - 'bill_id' => 'Lasku', - 'opening_balance' => 'Alkusaldo', - 'tagMode' => 'Tägimoodi', - 'virtual_balance' => 'Virtuaalinen saldo', + 'bank_name' => 'Pankin nimi', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Säästötilien saldo', + 'credit_card_limit' => 'Luottoraja', + 'automatch' => 'Vertaile automaattisesti', + 'skip' => 'Ohita', + 'enabled' => 'Käytössä', + 'name' => 'Nimi', + 'active' => 'Aktiivinen', + 'amount_min' => 'Vähimmäissumma', + 'amount_max' => 'Enimmäissumma', + 'match' => 'Täsmää', + 'strict' => 'Tarkka vertailu', + 'repeat_freq' => 'Toistot', + 'object_group' => 'Ryhmä', + 'location' => 'Sijainti', + 'update_channel' => 'Päivityskanava', + 'currency_id' => 'Valuutta', + 'transaction_currency_id' => 'Valuutta', + 'auto_budget_currency_id' => 'Valuutta', + 'external_ip' => 'Serverin ulkoinen verkko-osoite (IP)', + 'attachments' => 'Liitteet', + 'BIC' => 'BIC', + 'verify_password' => 'Vahvista salasanan turvallisuus', + 'source_account' => 'Lähdetili', + 'destination_account' => 'Kohdetili', + 'asset_destination_account' => 'Kohdetili', + 'include_net_worth' => 'Sisällytä varallisuuteen', + 'asset_source_account' => 'Lähdetili', + 'journal_description' => 'Kuvaus', + 'note' => 'Muistiinpanot', + 'currency' => 'Valuutta', + 'account_id' => 'Käyttötili', + 'budget_id' => 'Budjetti', + 'bill_id' => 'Lasku', + 'opening_balance' => 'Alkusaldo', + 'tagMode' => 'Tägimoodi', + 'virtual_balance' => 'Virtuaalinen saldo', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Tavoitesumma', 'account_role' => 'Tilin tyyppi', 'opening_balance_date' => 'Alkusaldon päivämäärä', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Haluatko varmasti poistaa tapahtuman kuvauksella ":description"?', 'mass_journal_are_you_sure' => 'Haluatko varmasti poistaa nämä tapahtumat?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Haluatko varmasti poistaa tägin ":tag"?', 'journal_link_areYouSure' => 'Haluatko varmasti poistaa linkin välillä :source ja :destination?', 'linkType_areYouSure' => 'Haluatko varmasti poistaa linkkityypin ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Albumi', 'song' => 'Kappale', - // admin 'domain' => 'Verkkotunnus', 'single_user_mode' => 'Estä lisäkäyttäjien rekisteröityminen', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS käyttäjätili', 'local_account' => 'Firefly III käyttäjätili', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Aloituspäivämäärä', - 'to_date' => 'Päättymispäivämäärä', - 'due_date' => 'Eräpäivä', - 'payment_date' => 'Maksupäivä', - 'invoice_date' => 'Laskun päivämäärä', - 'internal_reference' => 'Sisäinen viite', - 'inward' => 'Sisäinen kuvaus', - 'outward' => 'Ulkoinen kuvaus', - 'rule_group_id' => 'Sääntöryhmä', - 'transaction_description' => 'Tapahtuman kuvaus', - 'first_date' => 'Aloituspäivä', - 'transaction_type' => 'Tapahtuman tyyppi', - 'repeat_until' => 'Toista kunnes', - 'recurring_description' => 'Toistuvan tapahtuman kuvaus', - 'repetition_type' => 'Toiston tyyppi', - 'foreign_currency_id' => 'Ulkomaan valuutta', - 'repetition_end' => 'Toisto päättyy', - 'repetitions' => 'Toistot', - 'calendar' => 'Kalenteri', - 'weekend' => 'Viikonloppu', - 'client_secret' => 'Asiakkaan salausavain (Client secret)', - 'withdrawal_destination_id' => 'Kohdetili', - 'deposit_source_id' => 'Lähdetili', - 'expected_on' => 'Odotettavissa', - 'paid' => 'Maksettu', - 'auto_budget_type' => 'Automaattibudjetti', - 'auto_budget_amount' => 'Automaattisen budjetin summa', - 'auto_budget_period' => 'Automaattisen budjetin jakso', - 'collected' => 'Koottu', - 'submitted' => 'Lähetetty', - 'key' => 'Avain', - 'value' => 'Tietueen sisältö', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Aloituspäivämäärä', + 'to_date' => 'Päättymispäivämäärä', + 'due_date' => 'Eräpäivä', + 'payment_date' => 'Maksupäivä', + 'invoice_date' => 'Laskun päivämäärä', + 'internal_reference' => 'Sisäinen viite', + 'inward' => 'Sisäinen kuvaus', + 'outward' => 'Ulkoinen kuvaus', + 'rule_group_id' => 'Sääntöryhmä', + 'transaction_description' => 'Tapahtuman kuvaus', + 'first_date' => 'Aloituspäivä', + 'transaction_type' => 'Tapahtuman tyyppi', + 'repeat_until' => 'Toista kunnes', + 'recurring_description' => 'Toistuvan tapahtuman kuvaus', + 'repetition_type' => 'Toiston tyyppi', + 'foreign_currency_id' => 'Ulkomaan valuutta', + 'repetition_end' => 'Toisto päättyy', + 'repetitions' => 'Toistot', + 'calendar' => 'Kalenteri', + 'weekend' => 'Viikonloppu', + 'client_secret' => 'Asiakkaan salausavain (Client secret)', + 'withdrawal_destination_id' => 'Kohdetili', + 'deposit_source_id' => 'Lähdetili', + 'expected_on' => 'Odotettavissa', + 'paid' => 'Maksettu', + 'auto_budget_type' => 'Automaattibudjetti', + 'auto_budget_amount' => 'Automaattisen budjetin summa', + 'auto_budget_period' => 'Automaattisen budjetin jakso', + 'collected' => 'Koottu', + 'submitted' => 'Lähetetty', + 'key' => 'Avain', + 'value' => 'Tietueen sisältö', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/fi_FI/intro.php b/resources/lang/fi_FI/intro.php index c44620ee46..3eb16e0588 100644 --- a/resources/lang/fi_FI/intro.php +++ b/resources/lang/fi_FI/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Tervetuloa Firefly III:n hakemistosivulle. Käytä hetki aikaa käydäksesi läpi tämän esittelyn ja saadaksesi kuvan siitä, kuinka Firefly III toimii.', - 'index_accounts-chart' => 'Tämä kaavio näyttää omaisuustiliesi tämänhetkisen saldon. Voit valita täällä näkyvät tilit asetuksista.', - 'index_box_out_holder' => 'Tämä pieni laatikko ja tämän vieressä olevat laatikot antavat sinulle nopean yleiskuvan taloudellisesta tilanteestasi.', - 'index_help' => 'Jos koskaan tarvitset apua sivun tai lomakkeen kanssa, paina tätä painiketta.', - 'index_outro' => 'Useimmat Firefly III -sivut alkavat tällaisella pienellä opastuksella. Ota minuun yhteyttä, kun sinulla on kysyttävää tai kommentteja. Nauti!', - 'index_sidebar-toggle' => 'Luo uusia tapahtumia, tilejä tai muita juttuja käyttämällä tämän kuvakkeen alla olevaa valikkoa.', - 'index_cash_account' => 'Tässä ovat tähän mennessä luodut tilit. Käteistilillä voit seurata käteiskuluja, mutta se ei tietenkään ole pakollista.', + 'index_intro' => 'Tervetuloa Firefly III:n hakemistosivulle. Käytä hetki aikaa käydäksesi läpi tämän esittelyn ja saadaksesi kuvan siitä, kuinka Firefly III toimii.', + 'index_accounts-chart' => 'Tämä kaavio näyttää omaisuustiliesi tämänhetkisen saldon. Voit valita täällä näkyvät tilit asetuksista.', + 'index_box_out_holder' => 'Tämä pieni laatikko ja tämän vieressä olevat laatikot antavat sinulle nopean yleiskuvan taloudellisesta tilanteestasi.', + 'index_help' => 'Jos koskaan tarvitset apua sivun tai lomakkeen kanssa, paina tätä painiketta.', + 'index_outro' => 'Useimmat Firefly III -sivut alkavat tällaisella pienellä opastuksella. Ota minuun yhteyttä, kun sinulla on kysyttävää tai kommentteja. Nauti!', + 'index_sidebar-toggle' => 'Luo uusia tapahtumia, tilejä tai muita juttuja käyttämällä tämän kuvakkeen alla olevaa valikkoa.', + 'index_cash_account' => 'Tässä ovat tähän mennessä luodut tilit. Käteistilillä voit seurata käteiskuluja, mutta se ei tietenkään ole pakollista.', // transactions - 'transactions_create_basic_info' => 'Anna tapahtuman perustiedot. Lähde, kohde, päivämäärä ja kuvaus.', - 'transactions_create_amount_info' => 'Syötä tapahtuman summa. Tarvittaessa kentät päivittyvät automaattisesti ulkomaisen valuutan tietoihin.', - 'transactions_create_optional_info' => 'Kaikki nämä kentät ovat vapaaehtoisia. Metatietojen lisääminen tässä tekee tapahtumista paremmin organisoituja.', - 'transactions_create_split' => 'Jos haluat jakaa tapahtuman useampaan osaan, lisää osia tällä painikkeella', + 'transactions_create_basic_info' => 'Anna tapahtuman perustiedot. Lähde, kohde, päivämäärä ja kuvaus.', + 'transactions_create_amount_info' => 'Syötä tapahtuman summa. Tarvittaessa kentät päivittyvät automaattisesti ulkomaisen valuutan tietoihin.', + 'transactions_create_optional_info' => 'Kaikki nämä kentät ovat vapaaehtoisia. Metatietojen lisääminen tässä tekee tapahtumista paremmin organisoituja.', + 'transactions_create_split' => 'Jos haluat jakaa tapahtuman useampaan osaan, lisää osia tällä painikkeella', // create account: - 'accounts_create_iban' => 'Anna tilillesi kelvollinen IBAN-tunnus. Tämä voi tehdä tietojen automaattisesta tuonnista jatkossa tosi helppoa.', - 'accounts_create_asset_opening_balance' => 'Omaisuustilillä voi olla "alkusaldo", joka ilmaisee tilin historian alkamisen Firefly III:ssa.', - 'accounts_create_asset_currency' => 'Firefly III tukee useita valuuttoja. Omaisuustilillä on yksi päävaluutta, joka täytyy asettaa tässä.', - 'accounts_create_asset_virtual' => 'Joskus voi olla hyödyllistä antaa tilille virtuaalinen saldo: lisäsumma joka aina lisätään tai vähennetään todellisesta saldosta.', + 'accounts_create_iban' => 'Anna tilillesi kelvollinen IBAN-tunnus. Tämä voi tehdä tietojen automaattisesta tuonnista jatkossa tosi helppoa.', + 'accounts_create_asset_opening_balance' => 'Omaisuustilillä voi olla "alkusaldo", joka ilmaisee tilin historian alkamisen Firefly III:ssa.', + 'accounts_create_asset_currency' => 'Firefly III tukee useita valuuttoja. Omaisuustilillä on yksi päävaluutta, joka täytyy asettaa tässä.', + 'accounts_create_asset_virtual' => 'Joskus voi olla hyödyllistä antaa tilille virtuaalinen saldo: lisäsumma joka aina lisätään tai vähennetään todellisesta saldosta.', // budgets index - 'budgets_index_intro' => 'Budjetteja käytetään talouden hallintaan ja ne muodostavat yhden Firefly III:n ydintoiminnoista.', - 'budgets_index_set_budget' => 'Aseta kokonaisbudjettisi jokaiselle jaksolle, jotta Firefly III voi kertoa, oletko budjetoinut kaikki käytettävissä olevat rahat.', - 'budgets_index_see_expenses_bar' => 'Rahan kulutus täyttää hitaasti tämän palkin.', - 'budgets_index_navigate_periods' => 'Selaa ajanjaksoja ja määritä helposti budjetteja etukäteen.', - 'budgets_index_new_budget' => 'Luo uusia budjetteja mielesi mukaan.', - 'budgets_index_list_of_budgets' => 'Tämän taulukon avulla voit asettaa summat jokaiselle budjetille ja nähdä miten sinulla menee.', - 'budgets_index_outro' => 'Lisätietoja budjetoinnista saat tutustumalla oikeassa yläkulmassa olevaan ohjekuvakkeeseen.', + 'budgets_index_intro' => 'Budjetteja käytetään talouden hallintaan ja ne muodostavat yhden Firefly III:n ydintoiminnoista.', + 'budgets_index_see_expenses_bar' => 'Rahan kulutus täyttää hitaasti tämän palkin.', + 'budgets_index_navigate_periods' => 'Selaa ajanjaksoja ja määritä helposti budjetteja etukäteen.', + 'budgets_index_new_budget' => 'Luo uusia budjetteja mielesi mukaan.', + 'budgets_index_list_of_budgets' => 'Tämän taulukon avulla voit asettaa summat jokaiselle budjetille ja nähdä miten sinulla menee.', + 'budgets_index_outro' => 'Lisätietoja budjetoinnista saat tutustumalla oikeassa yläkulmassa olevaan ohjekuvakkeeseen.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Näiden raporttien avulla saat yksityiskohtaista tietoa taloudestasi.', - 'reports_index_inputReportType' => 'Valitse raporttityyppi. Katso ohjesivuilta, mitä kukin raportti näyttää sinulle.', - 'reports_index_inputAccountsSelect' => 'Voit sisällyttää tai olla näyttämättä tilejä mielesi mukaan.', - 'reports_index_inputDateRange' => 'Valittu ajanjakso on täysin sinun hallinnassasi: yhdestä päivästä 10 vuoteen.', - 'reports_index_extra-options-box' => 'Valitsemastasi raportista riippuen voit valita täältä lisäsuodattimia ja -vaihtoehtoja. Katso tätä ruutua, kun muutat raporttityyppejä.', + 'reports_index_intro' => 'Näiden raporttien avulla saat yksityiskohtaista tietoa taloudestasi.', + 'reports_index_inputReportType' => 'Valitse raporttityyppi. Katso ohjesivuilta, mitä kukin raportti näyttää sinulle.', + 'reports_index_inputAccountsSelect' => 'Voit sisällyttää tai olla näyttämättä tilejä mielesi mukaan.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Valitsemastasi raportista riippuen voit valita täältä lisäsuodattimia ja -vaihtoehtoja. Katso tätä ruutua, kun muutat raporttityyppejä.', // reports (reports) - 'reports_report_default_intro' => 'Tämä raportti antaa sinulle nopean ja kattavan yleiskatsauksen taloudestasi. Jos haluat nähdä jotain muuta, älä epäröi ottaa minuun yhteyttä!', - 'reports_report_audit_intro' => 'Tämä raportti antaa sinulle yksityiskohtaisen kuvan omaisuustileistäsi.', - 'reports_report_audit_optionsBox' => 'Näiden valintaruutujen avulla voit näyttää kiinnostavat tai piilottaa vähemmän kiinnostavat sarakkeet.', + 'reports_report_default_intro' => 'Tämä raportti antaa sinulle nopean ja kattavan yleiskatsauksen taloudestasi. Jos haluat nähdä jotain muuta, älä epäröi ottaa minuun yhteyttä!', + 'reports_report_audit_intro' => 'Tämä raportti antaa sinulle yksityiskohtaisen kuvan omaisuustileistäsi.', + 'reports_report_audit_optionsBox' => 'Näiden valintaruutujen avulla voit näyttää kiinnostavat tai piilottaa vähemmän kiinnostavat sarakkeet.', - 'reports_report_category_intro' => 'Tällä raportilla pääset tarkastelemaan talouttasi yhden tai useamman kategorian kannalta.', - 'reports_report_category_pieCharts' => 'Nämä kaaviot antavat sinulle tietoa kustannuksista ja tuloista kategorioittain tai tileittäin.', - 'reports_report_category_incomeAndExpensesChart' => 'Tämä taulukko näyttää kulut ja tulot kategorioittain.', + 'reports_report_category_intro' => 'Tällä raportilla pääset tarkastelemaan talouttasi yhden tai useamman kategorian kannalta.', + 'reports_report_category_pieCharts' => 'Nämä kaaviot antavat sinulle tietoa kustannuksista ja tuloista kategorioittain tai tileittäin.', + 'reports_report_category_incomeAndExpensesChart' => 'Tämä taulukko näyttää kulut ja tulot kategorioittain.', - 'reports_report_tag_intro' => 'Tämä raportti antaa sinulle tietoa yhdestä tai useammasta tägistä.', - 'reports_report_tag_pieCharts' => 'Nämä kaaviot antavat sinulle tietoa kustannuksista ja tuloista tägeittäin, tileittäin, kategorioittain tai budjeteittain.', - 'reports_report_tag_incomeAndExpensesChart' => 'Tämä taulukko näyttää kulusi ja tulosi tägeittäin.', + 'reports_report_tag_intro' => 'Tämä raportti antaa sinulle tietoa yhdestä tai useammasta tägistä.', + 'reports_report_tag_pieCharts' => 'Nämä kaaviot antavat sinulle tietoa kustannuksista ja tuloista tägeittäin, tileittäin, kategorioittain tai budjeteittain.', + 'reports_report_tag_incomeAndExpensesChart' => 'Tämä taulukko näyttää kulusi ja tulosi tägeittäin.', 'reports_report_budget_intro' => 'Tämä raportti antaa sinulle tietoa yhdestä tai useammasta budjetista.', 'reports_report_budget_pieCharts' => 'Nämä kaaviot antavat sinulle kuvan kustannuksista budjettia tai tiliä kohden.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Tämän edistymispalkin vieressä on kaksi painiketta (+ ja -) lisäämään tai poistamaan rahaa kustakin säästöpossusta.', 'piggy-banks_index_accountStatus' => 'Tässä taulukossa listataan kaikkien niiden omaisuustilien tila, joilla on vähintään yksi säästöpossu.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Mikä on tavoitteesi? Uusi sohva, kamera, rahaa hätätilanteisiin?', 'piggy-banks_create_date' => 'Voit asettaa tavoitepäivän tai takarajan säästöpossullesi.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Käytä laskuja seurataksesi rahan määrää, jonka joudut maksamaan jokaisella jaksolla. Ajattele kuluja, kuten vuokria, vakuutuksia tai asuntolainan maksuja.', 'bills_create_name' => 'Käytä kuvaavaa nimeä, kuten "Vuokra" tai "Sairausvakuutus".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Aseta laskun vähimmäis- ja enimmäissumma.', 'bills_create_repeat_freq_holder' => 'Useimmat laskut toistuvat kuukausittain, mutta voit asettaa täällä niille myös erilaisia jaksoja.', 'bills_create_skip_holder' => 'Jos lasku toistuu kahden viikon välein, "ohita"-kenttään tulee asettaa arvoksi "1", jolloin joka toinen viikko ohitetaan.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Käytä tätä painiketta nähdäksesi, mitkä tapahtumat vastaisivat sääntöäsi.', 'rules_create_actions' => 'Aseta niin monta toimintoa kuin haluat.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Lisää vaihtoehtoja on saatavana näiden välilehtien takana.', diff --git a/resources/lang/fi_FI/list.php b/resources/lang/fi_FI/list.php index 56b91cd88b..3ed6807150 100644 --- a/resources/lang/fi_FI/list.php +++ b/resources/lang/fi_FI/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Painikkeet', - 'icon' => 'Kuvake', - 'id' => 'Tunniste', - 'create_date' => 'Luotu', - 'update_date' => 'Päivitetty', - 'updated_at' => 'Päivitetty', - 'balance_before' => 'Saldo ennen', - 'balance_after' => 'Saldo jälkeen', - 'name' => 'Nimi', - 'role' => 'Rooli', - 'currentBalance' => 'Tämänhetkinen saldo', - 'linked_to_rules' => 'Linkitetty sääntöihin', - 'active' => 'Aktiivinen?', - 'percentage' => 'pros.', - 'recurring_transaction' => 'Toistuva tapahtuma', - 'next_due' => 'Seuraava eräpäivä', - 'transaction_type' => 'Tyyppi', - 'lastActivity' => 'Viimeisin tapahtuma', - 'balanceDiff' => 'Saldomuutos', - 'other_meta_data' => 'Muut metatiedot', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Tilin tyyppi', - 'created_at' => 'Luotu', - 'account' => 'Tili', - 'external_url' => 'Ulkoinen URL', - 'matchingAmount' => 'Summa', - 'destination' => 'Kohde', - 'source' => 'Lähde', - 'next_expected_match' => 'Seuraava lasku odotettavissa', - 'automatch' => 'Automaattinen vertailu?', + 'buttons' => 'Painikkeet', + 'icon' => 'Kuvake', + 'id' => 'Tunniste', + 'create_date' => 'Luotu', + 'update_date' => 'Päivitetty', + 'updated_at' => 'Päivitetty', + 'balance_before' => 'Saldo ennen', + 'balance_after' => 'Saldo jälkeen', + 'name' => 'Nimi', + 'role' => 'Rooli', + 'currentBalance' => 'Tämänhetkinen saldo', + 'linked_to_rules' => 'Linkitetty sääntöihin', + 'active' => 'Aktiivinen?', + 'percentage' => 'pros.', + 'recurring_transaction' => 'Toistuva tapahtuma', + 'next_due' => 'Seuraava eräpäivä', + 'transaction_type' => 'Tyyppi', + 'lastActivity' => 'Viimeisin tapahtuma', + 'balanceDiff' => 'Saldomuutos', + 'other_meta_data' => 'Muut metatiedot', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => 'Tilin tyyppi', + 'created_at' => 'Luotu', + 'account' => 'Tili', + 'external_url' => 'Ulkoinen URL', + 'matchingAmount' => 'Summa', + 'destination' => 'Kohde', + 'source' => 'Lähde', + 'next_expected_match' => 'Seuraava lasku odotettavissa', + 'automatch' => 'Automaattinen vertailu?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Toistot', 'description' => 'Kuvaus', 'amount' => 'Summa', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Bung käyttäjätili', 'file_name' => 'Tiedoston nimi', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Tiedoston koko', - 'file_type' => 'Tiedoston tyyppi', - 'attached_to' => 'Liitteenä', - 'file_exists' => 'Tiedosto on jo olemassa', - 'spectre_bank' => 'Pankki', - 'spectre_last_use' => 'Viimeisin kirjautuminen', - 'spectre_status' => 'Tila', - 'bunq_payment_id' => 'bunq maksutunniste', - 'repetitions' => 'Toistot', - 'title' => 'Otsikko', - 'transaction_s' => 'Tapahtuma(t)', - 'field' => 'Kenttä', - 'value' => 'Arvo', - 'interest' => 'Korko', - 'interest_period' => 'Korkojakso', - 'liability_type' => 'Lainatyyppi', - 'liability_direction' => 'Laina sisään/ulospäin', - 'end_date' => 'Loppupäivä', - 'payment_info' => 'Maksutiedot', - 'expected_info' => 'Seuraava odotettu tapahtuma', - 'start_date' => 'Aloituspäivä', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Tiedoston koko', + 'file_type' => 'Tiedoston tyyppi', + 'attached_to' => 'Liitteenä', + 'file_exists' => 'Tiedosto on jo olemassa', + 'spectre_bank' => 'Pankki', + 'spectre_last_use' => 'Viimeisin kirjautuminen', + 'spectre_status' => 'Tila', + 'bunq_payment_id' => 'bunq maksutunniste', + 'repetitions' => 'Toistot', + 'title' => 'Otsikko', + 'transaction_s' => 'Tapahtuma(t)', + 'field' => 'Kenttä', + 'value' => 'Arvo', + 'interest' => 'Korko', + 'interest_period' => 'Korkojakso', + 'liability_type' => 'Lainatyyppi', + 'liability_direction' => 'Laina sisään/ulospäin', + 'end_date' => 'Loppupäivä', + 'payment_info' => 'Maksutiedot', + 'expected_info' => 'Seuraava odotettu tapahtuma', + 'start_date' => 'Aloituspäivä', + 'trigger' => 'Trigger', + 'response' => 'Response', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/fi_FI/pagination.php b/resources/lang/fi_FI/pagination.php index f7bd8b0498..f184db3459 100644 --- a/resources/lang/fi_FI/pagination.php +++ b/resources/lang/fi_FI/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/fi_FI/passwords.php b/resources/lang/fi_FI/passwords.php index 722e2d406b..c9ecb88374 100644 --- a/resources/lang/fi_FI/passwords.php +++ b/resources/lang/fi_FI/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/fi_FI/rules.php b/resources/lang/fi_FI/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/fi_FI/rules.php +++ b/resources/lang/fi_FI/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/fi_FI/validation.php b/resources/lang/fi_FI/validation.php index 4c0b3d84d3..7e2632c161 100644 --- a/resources/lang/fi_FI/validation.php +++ b/resources/lang/fi_FI/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Taulukosta puuttuu "where"-komento', - 'missing_update' => 'Taulukosta puuttuu "update"-komento', - 'invalid_where_key' => 'JSON sisältää virheellisen avaimen "where"-komentoa varten', - 'invalid_update_key' => 'JSON sisältää virheellisen avaimen "update"-komentoa varten', - 'invalid_query_data' => 'Kyselysi kentässä %s:%s on virheellisiä tietoja.', - 'invalid_query_account_type' => 'Kyselysi sisältää eri tyyppisiä tilejä, joka ei ole sallittua.', - 'invalid_query_currency' => 'Kyselysi sisältää tilejä, joilla on erilaiset valuutta-asetukset, joka ei ole sallittua.', - 'iban' => 'IBAN ei ole oikeassa muodossa.', - 'zero_or_more' => 'Arvo ei voi olla negatiivinen.', - 'date_or_time' => 'Arvon täytyy olla päivämäärä tai aika-arvo (ISO 8601).', - 'source_equals_destination' => 'Lähdetili on sama kuin kohdetili - ja sehän ei käy.', - 'unique_account_number_for_user' => 'Tämä tilinumero näyttäisi olevan jo käytössä.', - 'unique_iban_for_user' => 'Tämä IBAN näyttäisi olevan jo käytössä.', - 'deleted_user' => 'Turvallisuussyistä et pysty käyttämään tätä sähköpostiosoitetta rekisteröitymiseen.', - 'rule_trigger_value' => 'Arvo ei kelpaa valitulle ehdolle.', - 'rule_action_value' => 'Arvo ei kelpaa valitulle toiminnolle.', - 'file_already_attached' => 'Kohteella on jo liite nimeltä ":name".', - 'file_attached' => 'Liitteen ":name" lataus onnistui.', - 'must_exist' => 'Tunnistetta kentässä :attribute ei löydy tietokannasta.', - 'all_accounts_equal' => 'Kaikkien tässä kentässä olevien tilien täytyy olla samoja.', - 'group_title_mandatory' => 'Kun tapahtumia on enemmän kuin yksi, kokonaisuudelle tarvitaan oma otsikko.', - 'transaction_types_equal' => 'Kaikkien jaettujen osien täytyy olla samaa tyyppiä.', - 'invalid_transaction_type' => 'Virheellinen tapahtuman tyyppi.', - 'invalid_selection' => 'Valintasi on virheellinen.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Tarvitaan vähintään yksi tapahtuma.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Tarvitaan vähintään yksi toisto.', - 'require_repeat_until' => 'Tarvitaan joko toistojen lukumäärä tai viimeisen toiston päivämäärä (toista kunnes). Ei molempia.', - 'require_currency_info' => 'Ilman valuuttatietoa tämän kentän sisältö on virheellinen.', - 'not_transfer_account' => 'Tätä tiliä ei voi käyttää siirroissa.', - 'require_currency_amount' => 'Tämän kentän sisältö on virheellinen ilman ulkomaanvaluuttatietoa.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Tapahtuman kuvaus ei saisi olla sama kuin yleiskuvaus.', - 'file_invalid_mime' => 'Lähetettävän tiedoston ":name" tyyppi ei voi olla ":mime".', - 'file_too_large' => 'Tiedoston ":name" koko on liian suuri.', - 'belongs_to_user' => 'Arvoa :attribute ei tunnisteta.', - 'accepted' => 'Määritteen :attribute täytyy olla hyväksytty.', - 'bic' => 'Tämä ei ole kelvollinen BIC.', - 'at_least_one_trigger' => 'Säännöllä täytyy olla ainakin yksi ehto.', - 'at_least_one_active_trigger' => 'Säännöllä on oltava vähintään yksi aktiivinen ehto.', - 'at_least_one_action' => 'Säännöllä täytyy olla vähintään yksi tapahtuma.', - 'at_least_one_active_action' => 'Säännöllä on oltava vähintään yksi aktiivinen toimenpide.', - 'base64' => 'Tämä ei ole kelvollinen base64-koodattu data.', - 'model_id_invalid' => 'Annettu tunniste ei kelpaa tämän mallin kanssa.', - 'less' => 'Määritteen :attribute täytyy olla pienempi kuin 10,000,000', - 'active_url' => ':attribute ei ole verkko-osoite.', - 'after' => 'Määritteen :attribute täytyy olla :date jälkeen oleva päivämäärä.', - 'date_after' => 'Aloituspäivän on oltava ennen päättymispäivää.', - 'alpha' => ':attribute saa sisältää ainoastaan kirjaimia.', - 'alpha_dash' => ':attribute saa sisältää ainoastaan kirjaimia, numeroita ja viivoja.', - 'alpha_num' => ':attribute saa sisältää ainoastaan kirjaimia ja numeroita.', - 'array' => ':attribute täytyy olla taulukko.', - 'unique_for_user' => 'Määritteelle :attribute on jo annettu arvo.', - 'before' => 'Määritteen :attribute täytyy olla päivämäärä ennen päivää :date.', - 'unique_object_for_user' => 'Tämä nimi on jo käytössä.', - 'unique_account_for_user' => 'Tämän niminen tili on jo käytössä.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Taulukosta puuttuu "where"-komento', + 'missing_update' => 'Taulukosta puuttuu "update"-komento', + 'invalid_where_key' => 'JSON sisältää virheellisen avaimen "where"-komentoa varten', + 'invalid_update_key' => 'JSON sisältää virheellisen avaimen "update"-komentoa varten', + 'invalid_query_data' => 'Kyselysi kentässä %s:%s on virheellisiä tietoja.', + 'invalid_query_account_type' => 'Kyselysi sisältää eri tyyppisiä tilejä, joka ei ole sallittua.', + 'invalid_query_currency' => 'Kyselysi sisältää tilejä, joilla on erilaiset valuutta-asetukset, joka ei ole sallittua.', + 'iban' => 'IBAN ei ole oikeassa muodossa.', + 'zero_or_more' => 'Arvo ei voi olla negatiivinen.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Arvon täytyy olla päivämäärä tai aika-arvo (ISO 8601).', + 'source_equals_destination' => 'Lähdetili on sama kuin kohdetili - ja sehän ei käy.', + 'unique_account_number_for_user' => 'Tämä tilinumero näyttäisi olevan jo käytössä.', + 'unique_iban_for_user' => 'Tämä IBAN näyttäisi olevan jo käytössä.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Turvallisuussyistä et pysty käyttämään tätä sähköpostiosoitetta rekisteröitymiseen.', + 'rule_trigger_value' => 'Arvo ei kelpaa valitulle ehdolle.', + 'rule_action_value' => 'Arvo ei kelpaa valitulle toiminnolle.', + 'file_already_attached' => 'Kohteella on jo liite nimeltä ":name".', + 'file_attached' => 'Liitteen ":name" lataus onnistui.', + 'must_exist' => 'Tunnistetta kentässä :attribute ei löydy tietokannasta.', + 'all_accounts_equal' => 'Kaikkien tässä kentässä olevien tilien täytyy olla samoja.', + 'group_title_mandatory' => 'Kun tapahtumia on enemmän kuin yksi, kokonaisuudelle tarvitaan oma otsikko.', + 'transaction_types_equal' => 'Kaikkien jaettujen osien täytyy olla samaa tyyppiä.', + 'invalid_transaction_type' => 'Virheellinen tapahtuman tyyppi.', + 'invalid_selection' => 'Valintasi on virheellinen.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Tarvitaan vähintään yksi tapahtuma.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Tarvitaan vähintään yksi toisto.', + 'require_repeat_until' => 'Tarvitaan joko toistojen lukumäärä tai viimeisen toiston päivämäärä (toista kunnes). Ei molempia.', + 'require_currency_info' => 'Ilman valuuttatietoa tämän kentän sisältö on virheellinen.', + 'not_transfer_account' => 'Tätä tiliä ei voi käyttää siirroissa.', + 'require_currency_amount' => 'Tämän kentän sisältö on virheellinen ilman ulkomaanvaluuttatietoa.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'Tapahtuman kuvaus ei saisi olla sama kuin yleiskuvaus.', + 'file_invalid_mime' => 'Lähetettävän tiedoston ":name" tyyppi ei voi olla ":mime".', + 'file_too_large' => 'Tiedoston ":name" koko on liian suuri.', + 'belongs_to_user' => 'Arvoa :attribute ei tunnisteta.', + 'accepted' => 'Määritteen :attribute täytyy olla hyväksytty.', + 'bic' => 'Tämä ei ole kelvollinen BIC.', + 'at_least_one_trigger' => 'Säännöllä täytyy olla ainakin yksi ehto.', + 'at_least_one_active_trigger' => 'Säännöllä on oltava vähintään yksi aktiivinen ehto.', + 'at_least_one_action' => 'Säännöllä täytyy olla vähintään yksi tapahtuma.', + 'at_least_one_active_action' => 'Säännöllä on oltava vähintään yksi aktiivinen toimenpide.', + 'base64' => 'Tämä ei ole kelvollinen base64-koodattu data.', + 'model_id_invalid' => 'Annettu tunniste ei kelpaa tämän mallin kanssa.', + 'less' => 'Määritteen :attribute täytyy olla pienempi kuin 10,000,000', + 'active_url' => ':attribute ei ole verkko-osoite.', + 'after' => 'Määritteen :attribute täytyy olla :date jälkeen oleva päivämäärä.', + 'date_after' => 'Aloituspäivän on oltava ennen päättymispäivää.', + 'alpha' => ':attribute saa sisältää ainoastaan kirjaimia.', + 'alpha_dash' => ':attribute saa sisältää ainoastaan kirjaimia, numeroita ja viivoja.', + 'alpha_num' => ':attribute saa sisältää ainoastaan kirjaimia ja numeroita.', + 'array' => ':attribute täytyy olla taulukko.', + 'unique_for_user' => 'Määritteelle :attribute on jo annettu arvo.', + 'before' => 'Määritteen :attribute täytyy olla päivämäärä ennen päivää :date.', + 'unique_object_for_user' => 'Tämä nimi on jo käytössä.', + 'unique_account_for_user' => 'Tämän niminen tili on jo käytössä.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => 'Kentän :attribute arvon täytyy olla välillä :min ja :max.', + 'between.file' => 'Tiedoston :attribute koon täytyy olla välillä :min ja :max kilotavua.', + 'between.string' => 'Määritteen :attribute merkkijonon pituuden täytyy olla välillä :min ja :max merkkiä.', + 'between.array' => 'Taulukon :attribute alkioiden lukumäärän täytyy olla välillä :min ja :max.', + 'boolean' => 'Kentän :attribute arvon tulee olla tosi tai epätosi.', + 'confirmed' => 'Kentän :attribute vahvistus ei täsmää.', + 'date' => 'Määrite :attribute ei ole kelvollinen päivämäärä.', + 'date_format' => 'Kentän :attribute arvo ei vastaa muotoa :format.', + 'different' => ':attribute ja :other tulee olla erilaisia.', + 'digits' => ':attribute tulee olla :digits numeroa pitkä.', + 'digits_between' => 'Kentän :attribute pituuden tulee olla :min - :max numeroa.', + 'email' => ':attribute on oltava kelvollinen sähköpostiosoite.', + 'filled' => 'Määritekenttä :attribute on pakollinen.', + 'exists' => 'Valittu :attribute on virheellinen.', + 'image' => ':attribute on oltava kuva.', + 'in' => 'Valittu :attribute on virheellinen.', + 'integer' => 'Kentän :attribute arvon tulee olla numero.', + 'ip' => ':attribute on oltava kelvollinen IP-osoite.', + 'json' => 'Määritteen :attribute arvon on oltava kelvollinen JSON merkkijono.', + 'max.numeric' => ':attribute ei saa olla suurempi kuin :max.', + 'max.file' => ':attribute ei saa olla suurempi kuin :max kilotavua.', + 'max.string' => ':attribute ei saa olla suurempi kuin :max merkkiä.', + 'max.array' => 'Määritteellä :attribute saa olla enintään :max alkiota.', + 'mimes' => ':attribute tulee olla tiedosto jonka tyyppi on: :values.', + 'min.numeric' => 'Kentän :attribute arvon tulee olla vähintään :min.', + 'lte.numeric' => 'Määritteen :attribute arvo saa olla enintään :value.', + 'min.file' => 'Määritteen :attribute koon täytyy olla vähintään :min kilotavua.', + 'min.string' => 'Määritteen :attribute on oltava vähintään :min merkkiä.', + 'min.array' => 'Kentän :attribute tulee sisältää vähintään :min arvoa.', + 'not_in' => 'Valittu :attribute on virheellinen.', + 'numeric' => 'Kentän :attribute arvon tulee olla numero.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Alkuperäisen summan täytyy olla numeerinen.', + 'numeric_destination' => 'Kohdesumman täytyy olla numeerinen.', + 'numeric_source' => 'Lähdesumman täytyy olla numeerinen.', + 'regex' => 'Määritteen :attribute muoto on virheellinen.', + 'required' => 'Kenttä :attribute on pakollinen.', + 'required_if' => 'Kenttä :attribute on pakollinen kun :other on :value.', + 'required_unless' => 'Kenttä :attribute vaaditaan jos :other ei sisälly arvoihin :values.', + 'required_with' => 'Kenttä :attribute vaaditaan kun arvo :values on annettu.', + 'required_with_all' => 'Kenttä :attribute vaaditaan kun arvo :values on annettu.', + 'required_without' => 'Kenttä :attribute on pakollinen jos arvoa :values ei ole annettu.', + 'required_without_all' => 'Kenttä :attribute on pakollinen jos mitään arvoista :values ei ole annettu.', + 'same' => 'Kenttien :attribute ja :other on täsmättävä.', + 'size.numeric' => 'Määritteen :attribute koon on oltava :size.', + 'amount_min_over_max' => 'Vähimmäissumma ei voi olla suurempi kuin enimmäissumma.', + 'size.file' => ':attribute koon tulee olla :size kilotavua.', + 'size.string' => ':attribute pituuden tulee olla :size merkkiä.', + 'size.array' => 'Kentän :attribute tulee sisältää :size arvoa.', + 'unique' => 'Kentän :attribute arvo ei ole uniikki.', + 'string' => 'Määritteen :attribute on oltava merkkijono.', + 'url' => 'Kentän :attribute muotoilu on virheellinen.', + 'timezone' => 'Kentän :attribute täytyy olla aikavyöhyke.', + '2fa_code' => ':attribute-kenttä on virheellinen.', + 'dimensions' => 'Kentän :attribute kuvalla on virheelliset mitat.', + 'distinct' => 'Kentän :attribute arvo ei ole uniikki.', + 'file' => 'Kentän :attribute arvon tulee olla tiedosto.', + 'in_array' => 'Kentän :attribute arvo ei sisälly kentän :other arvoon.', + 'present' => 'Kenttä :attribute vaaditaan.', + 'amount_zero' => 'Summa yhteensä ei voi olla nolla.', + 'current_target_amount' => 'Nykyisen summan täytyy olla tavoitesummaa pienempi.', + 'unique_piggy_bank_for_user' => 'Säästöpossu tarvitsee yksilöllisen nimen.', + 'unique_object_group' => 'Ryhmän nimen täytyy olla yksilöllinen', + 'starts_with' => 'Arvon on alettava :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Molempien tilien on oltava samaa tyyppiä', + 'same_account_currency' => 'Molemmilla tileillä on oltava sama valuuttaasetus', - 'between.numeric' => 'Kentän :attribute arvon täytyy olla välillä :min ja :max.', - 'between.file' => 'Tiedoston :attribute koon täytyy olla välillä :min ja :max kilotavua.', - 'between.string' => 'Määritteen :attribute merkkijonon pituuden täytyy olla välillä :min ja :max merkkiä.', - 'between.array' => 'Taulukon :attribute alkioiden lukumäärän täytyy olla välillä :min ja :max.', - 'boolean' => 'Kentän :attribute arvon tulee olla tosi tai epätosi.', - 'confirmed' => 'Kentän :attribute vahvistus ei täsmää.', - 'date' => 'Määrite :attribute ei ole kelvollinen päivämäärä.', - 'date_format' => 'Kentän :attribute arvo ei vastaa muotoa :format.', - 'different' => ':attribute ja :other tulee olla erilaisia.', - 'digits' => ':attribute tulee olla :digits numeroa pitkä.', - 'digits_between' => 'Kentän :attribute pituuden tulee olla :min - :max numeroa.', - 'email' => ':attribute on oltava kelvollinen sähköpostiosoite.', - 'filled' => 'Määritekenttä :attribute on pakollinen.', - 'exists' => 'Valittu :attribute on virheellinen.', - 'image' => ':attribute on oltava kuva.', - 'in' => 'Valittu :attribute on virheellinen.', - 'integer' => 'Kentän :attribute arvon tulee olla numero.', - 'ip' => ':attribute on oltava kelvollinen IP-osoite.', - 'json' => 'Määritteen :attribute arvon on oltava kelvollinen JSON merkkijono.', - 'max.numeric' => ':attribute ei saa olla suurempi kuin :max.', - 'max.file' => ':attribute ei saa olla suurempi kuin :max kilotavua.', - 'max.string' => ':attribute ei saa olla suurempi kuin :max merkkiä.', - 'max.array' => 'Määritteellä :attribute saa olla enintään :max alkiota.', - 'mimes' => ':attribute tulee olla tiedosto jonka tyyppi on: :values.', - 'min.numeric' => 'Kentän :attribute arvon tulee olla vähintään :min.', - 'lte.numeric' => 'Määritteen :attribute arvo saa olla enintään :value.', - 'min.file' => 'Määritteen :attribute koon täytyy olla vähintään :min kilotavua.', - 'min.string' => 'Määritteen :attribute on oltava vähintään :min merkkiä.', - 'min.array' => 'Kentän :attribute tulee sisältää vähintään :min arvoa.', - 'not_in' => 'Valittu :attribute on virheellinen.', - 'numeric' => 'Kentän :attribute arvon tulee olla numero.', - 'numeric_native' => 'Alkuperäisen summan täytyy olla numeerinen.', - 'numeric_destination' => 'Kohdesumman täytyy olla numeerinen.', - 'numeric_source' => 'Lähdesumman täytyy olla numeerinen.', - 'regex' => 'Määritteen :attribute muoto on virheellinen.', - 'required' => 'Kenttä :attribute on pakollinen.', - 'required_if' => 'Kenttä :attribute on pakollinen kun :other on :value.', - 'required_unless' => 'Kenttä :attribute vaaditaan jos :other ei sisälly arvoihin :values.', - 'required_with' => 'Kenttä :attribute vaaditaan kun arvo :values on annettu.', - 'required_with_all' => 'Kenttä :attribute vaaditaan kun arvo :values on annettu.', - 'required_without' => 'Kenttä :attribute on pakollinen jos arvoa :values ei ole annettu.', - 'required_without_all' => 'Kenttä :attribute on pakollinen jos mitään arvoista :values ei ole annettu.', - 'same' => 'Kenttien :attribute ja :other on täsmättävä.', - 'size.numeric' => 'Määritteen :attribute koon on oltava :size.', - 'amount_min_over_max' => 'Vähimmäissumma ei voi olla suurempi kuin enimmäissumma.', - 'size.file' => ':attribute koon tulee olla :size kilotavua.', - 'size.string' => ':attribute pituuden tulee olla :size merkkiä.', - 'size.array' => 'Kentän :attribute tulee sisältää :size arvoa.', - 'unique' => 'Kentän :attribute arvo ei ole uniikki.', - 'string' => 'Määritteen :attribute on oltava merkkijono.', - 'url' => 'Kentän :attribute muotoilu on virheellinen.', - 'timezone' => 'Kentän :attribute täytyy olla aikavyöhyke.', - '2fa_code' => ':attribute-kenttä on virheellinen.', - 'dimensions' => 'Kentän :attribute kuvalla on virheelliset mitat.', - 'distinct' => 'Kentän :attribute arvo ei ole uniikki.', - 'file' => 'Kentän :attribute arvon tulee olla tiedosto.', - 'in_array' => 'Kentän :attribute arvo ei sisälly kentän :other arvoon.', - 'present' => 'Kenttä :attribute vaaditaan.', - 'amount_zero' => 'Summa yhteensä ei voi olla nolla.', - 'current_target_amount' => 'Nykyisen summan täytyy olla tavoitesummaa pienempi.', - 'unique_piggy_bank_for_user' => 'Säästöpossu tarvitsee yksilöllisen nimen.', - 'unique_object_group' => 'Ryhmän nimen täytyy olla yksilöllinen', - 'starts_with' => 'Arvon on alettava :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Molempien tilien on oltava samaa tyyppiä', - 'same_account_currency' => 'Molemmilla tileillä on oltava sama valuuttaasetus', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Tämä ei ole turvallinen salasana. Yritäpä uudestaan. Lisätietoja löydät osoitteesta https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Virheellinen toiston tyyppi toistuville tapahtumille.', - 'valid_recurrence_rep_moment' => 'Virheellinen arvo tämän tyyppiselle toistolle.', - 'invalid_account_info' => 'Virheellinen tilitieto.', - 'attributes' => [ + 'secure_password' => 'Tämä ei ole turvallinen salasana. Yritäpä uudestaan. Lisätietoja löydät osoitteesta https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Virheellinen toiston tyyppi toistuville tapahtumille.', + 'valid_recurrence_rep_moment' => 'Virheellinen arvo tämän tyyppiselle toistolle.', + 'invalid_account_info' => 'Virheellinen tilitieto.', + 'attributes' => [ 'email' => 'sähköpostiosoite', 'description' => 'kuvaus', 'amount' => 'summa', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Tarvitset kelvollisen lähdetilin tunnuksen ja/tai kelvollisen lähdetilin nimen jatkaaksesi.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Kelvollista kohdetiliä ei löytynyt tunnuksella ":id" tai nimellä ":name".', + 'withdrawal_source_need_data' => 'Tarvitset kelvollisen lähdetilin tunnuksen ja/tai kelvollisen lähdetilin nimen jatkaaksesi.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Kelvollista kohdetiliä ei löytynyt tunnuksella ":id" tai nimellä ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Tarvitset kelvollisen lähdetilin tunnuksen ja/tai kelvollisen lähdetilin nimen jatkaaksesi.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Kelvollista kohdetiliä ei löytynyt tunnuksella ":id" tai nimellä ":name".', - 'deposit_dest_wrong_type' => 'Syötetty kohdetili ei ole oikean tyyppinen.', + 'deposit_source_need_data' => 'Tarvitset kelvollisen lähdetilin tunnuksen ja/tai kelvollisen lähdetilin nimen jatkaaksesi.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Kelvollista kohdetiliä ei löytynyt tunnuksella ":id" tai nimellä ":name".', + 'deposit_dest_wrong_type' => 'Syötetty kohdetili ei ole oikean tyyppinen.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Tarvitset kelvollisen lähdetilin tunnuksen ja/tai kelvollisen lähdetilin nimen jatkaaksesi.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Kelvollista kohdetiliä ei löytynyt tunnuksella ":id" tai nimellä ":name".', + 'need_id_in_edit' => 'Kaikilla jaetuilla tapahtumilla täytyy olla transaction_journal_id (joko voimassaoleva tunniste tai 0).', - 'transfer_source_need_data' => 'Tarvitset kelvollisen lähdetilin tunnuksen ja/tai kelvollisen lähdetilin nimen jatkaaksesi.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Kelvollista kohdetiliä ei löytynyt tunnuksella ":id" tai nimellä ":name".', - 'need_id_in_edit' => 'Kaikilla jaetuilla tapahtumilla täytyy olla transaction_journal_id (joko voimassaoleva tunniste tai 0).', + 'ob_source_need_data' => 'Tarvitset kelvollisen lähdetilin tunnuksen ja/tai kelvollisen lähdetilin nimen jatkaaksesi.', + 'lc_source_need_data' => 'Tarvitaan kelvollinen lähdetilin tunniste.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Kelvollista kohdetiliä ei löytynyt tunnuksella ":id" tai nimellä ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Tarvitset kelvollisen lähdetilin tunnuksen ja/tai kelvollisen lähdetilin nimen jatkaaksesi.', - 'lc_source_need_data' => 'Tarvitaan kelvollinen lähdetilin tunniste.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Kelvollista kohdetiliä ei löytynyt tunnuksella ":id" tai nimellä ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Et voi käyttää tätä tiliä lähdetilinä.', + 'generic_invalid_destination' => 'Et voi käyttää tätä tiliä kohdetilinä.', - 'generic_invalid_source' => 'Et voi käyttää tätä tiliä lähdetilinä.', - 'generic_invalid_destination' => 'Et voi käyttää tätä tiliä kohdetilinä.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'Määritteen :attribute arvon täytyy olla vähintään :value.', - 'gt.numeric' => ':attribute tulee olla suurempi kuin :value.', - 'gte.file' => 'Määritteen :attribute koon täytyy olla vähintään :value kilotavua.', - 'gte.string' => 'Määritteen :attribute pituus täytyy olla vähintään :value merkkiä.', - 'gte.array' => 'Määritteellä :attribute tulee olla vähintään :value alkiota.', + 'gte.numeric' => 'Määritteen :attribute arvon täytyy olla vähintään :value.', + 'gt.numeric' => ':attribute tulee olla suurempi kuin :value.', + 'gte.file' => 'Määritteen :attribute koon täytyy olla vähintään :value kilotavua.', + 'gte.string' => 'Määritteen :attribute pituus täytyy olla vähintään :value merkkiä.', + 'gte.array' => 'Määritteellä :attribute tulee olla vähintään :value alkiota.', 'amount_required_for_auto_budget' => 'Summa on pakollinen.', 'auto_budget_amount_positive' => 'Summan on oltava enemmän nollaa suurempi.', + 'auto_budget_period_mandatory' => 'Automaattisen budjetin jakso on pakollinen kenttä.', // no access to administration: diff --git a/resources/lang/fr_FR/api.php b/resources/lang/fr_FR/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/fr_FR/api.php +++ b/resources/lang/fr_FR/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/fr_FR/auth.php b/resources/lang/fr_FR/auth.php index 1ffbd2fb7b..5f409e4628 100644 --- a/resources/lang/fr_FR/auth.php +++ b/resources/lang/fr_FR/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Aucun compte ne correspond à ces identifiants.', 'throttle' => 'Trop de tentatives de connexion. Veuillez réessayer dans :seconds secondes.', diff --git a/resources/lang/fr_FR/breadcrumbs.php b/resources/lang/fr_FR/breadcrumbs.php index 159470cfbf..609adc890c 100644 --- a/resources/lang/fr_FR/breadcrumbs.php +++ b/resources/lang/fr_FR/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Accueil', - 'budgets' => 'Budgets', - 'subscriptions' => 'Abonnements', - 'transactions' => 'Opérations', - 'title_expenses' => 'Dépenses', - 'title_withdrawal' => 'Dépenses', - 'title_revenue' => 'Recette / revenu', - 'title_deposit' => 'Recette / revenu', - 'title_transfer' => 'Transferts', - 'title_transfers' => 'Transferts', - 'edit_currency' => 'Modifier la devise ":name"', - 'delete_currency' => 'Supprimer la devise ":name"', - 'newPiggyBank' => 'Créer une nouvelle tirelire', - 'edit_piggyBank' => 'Modifier la tirelire ":name"', - 'preferences' => 'Préférences', - 'profile' => 'Profil', - 'accounts' => 'Comptes', - 'changePassword' => 'Modifier le mot de passe', - 'change_email' => 'Changer votre adresse e-mail', - 'bills' => 'Factures', - 'newBill' => 'Nouvelle facture', - 'edit_bill' => 'Modifier la facture ":name"', - 'delete_bill' => 'Supprimer la facture ":name"', - 'reports' => 'Rapports', - 'search_result' => 'Résultats de recherche pour ":query"', - 'withdrawal_list' => 'Dépenses', - 'Withdrawal_list' => 'Dépenses', - 'deposit_list' => 'Revenus, salaires et versements', - 'transfer_list' => 'Virements', - 'transfers_list' => 'Virements', + 'home' => 'Accueil', + 'budgets' => 'Budgets', + 'subscriptions' => 'Abonnements', + 'transactions' => 'Opérations', + 'title_expenses' => 'Dépenses', + 'title_withdrawal' => 'Dépenses', + 'title_revenue' => 'Recette / revenu', + 'title_deposit' => 'Recette / revenu', + 'title_transfer' => 'Transferts', + 'title_transfers' => 'Transferts', + 'edit_currency' => 'Modifier la devise ":name"', + 'delete_currency' => 'Supprimer la devise ":name"', + 'newPiggyBank' => 'Créer une nouvelle tirelire', + 'edit_piggyBank' => 'Modifier la tirelire ":name"', + 'preferences' => 'Préférences', + 'profile' => 'Profil', + 'accounts' => 'Comptes', + 'changePassword' => 'Modifier le mot de passe', + 'change_email' => 'Changer votre adresse e-mail', + 'bills' => 'Factures', + 'newBill' => 'Nouvelle facture', + 'edit_bill' => 'Modifier la facture ":name"', + 'delete_bill' => 'Supprimer la facture ":name"', + 'reports' => 'Rapports', + 'search_result' => 'Résultats de recherche pour ":query"', + 'withdrawal_list' => 'Dépenses', + 'Withdrawal_list' => 'Dépenses', + 'deposit_list' => 'Revenus, salaires et versements', + 'transfer_list' => 'Virements', + 'transfers_list' => 'Virements', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Rapprochements', 'create_withdrawal' => 'Créer une nouvelle dépense', 'create_deposit' => 'Créer un nouveau versement', @@ -88,7 +86,7 @@ return [ 'delete_journal' => 'Supprimer l\'opération ":description"', 'delete_group' => 'Supprimer l\'opération ":description"', 'tags' => 'Tags', - 'createTag' => 'Créer un nouveau mot-clé', + 'createTag' => 'Créer un nouveau tag', 'edit_tag' => 'Modifier le tag ":tag"', 'delete_tag' => 'Supprimer le tag ":tag"', 'delete_journal_link' => 'Supprimer le lien entre les opérations', diff --git a/resources/lang/fr_FR/components.php b/resources/lang/fr_FR/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/fr_FR/components.php +++ b/resources/lang/fr_FR/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/fr_FR/config.php b/resources/lang/fr_FR/config.php index 83f573c0d5..517e4d2d43 100644 --- a/resources/lang/fr_FR/config.php +++ b/resources/lang/fr_FR/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'fr', - 'locale' => 'fr, French, fr_FR.utf8, fr_FR.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'fr', + 'locale' => 'fr, French, fr_FR.utf8, fr_FR.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMMM YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'Do MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D MMMM YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'Do MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd D MMMM AAAA', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd D MMMM AAAA', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'D MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'D MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'Do MMMM YYYY, à HH:mm:ss', + 'date_time_fns' => 'do MMMM, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'Do MMMM YYYY, à HH:mm:ss', - 'date_time_fns' => 'do MMMM, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Semaine' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Semaine' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Lundi', - 'dow_2' => 'Mardi', - 'dow_3' => 'Mercredi', - 'dow_4' => 'Jeudi', - 'dow_5' => 'Vendredi', - 'dow_6' => 'Samedi', - 'dow_7' => 'Dimanche', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Lundi', + 'dow_2' => 'Mardi', + 'dow_3' => 'Mercredi', + 'dow_4' => 'Jeudi', + 'dow_5' => 'Vendredi', + 'dow_6' => 'Samedi', + 'dow_7' => 'Dimanche', ]; /* diff --git a/resources/lang/fr_FR/demo.php b/resources/lang/fr_FR/demo.php index bff647d9ed..6a80408b1c 100644 --- a/resources/lang/fr_FR/demo.php +++ b/resources/lang/fr_FR/demo.php @@ -31,17 +31,16 @@ * */ - declare(strict_types=1); return [ 'no_demo_text' => 'Désolé, il n’y a aucune explication supplémentaire propre à la démonstration pour cette page.', 'see_help_icon' => 'Cependant, l\'icône située dans le coin supérieur droit peut vous en dire plus.', - 'index' => 'Bienvenue chez Firefly III ! Vous avez sur cette page un aperçu rapide de vos finances. Pour plus d’informations, consultez vos → Comptes d’actifs et, bien sûr, les pages des budgets et des rapports. Ou jetez simplement un coup d’œil et voyez où vous en êtes.', + 'index' => "Bienvenue chez Firefly III\u{a0}! Vous avez sur cette page un aperçu rapide de vos finances. Pour plus d’informations, consultez vos → Comptes d’actifs et, bien sûr, les pages des budgets et des rapports. Ou jetez simplement un coup d’œil et voyez où vous en êtes.", 'accounts-index' => 'Les comptes d’actifs sont vos comptes bancaires personnels. Les comptes de dépenses sont des comptes où vous dépensez de l’argent, comme les magasins et les amis. Les comptes de recettes sont des comptes où vous recevez de l’argent, comme votre travail, le gouvernement ou d’autres sources de revenu. Les passifs sont vos dettes et crédits tel que vos crédits à la consommation ou vos prêts étudiant. Sur cette page, vous pouvez les modifier ou les supprimer.', 'budgets-index' => 'Cette page vous présente un aperçu de vos budgets. La barre du haut affiche le montant disponible à budgétiser. Il est possible de le personnaliser pour n\'importe quelle période en cliquant sur le montant sur la droite. Le montant que vous avez réellement dépensé s’affiche dans la barre en dessous. Plus bas se trouve les dépenses par budget et le prévisionnel de chacun de ces budgets.', 'reports-index-start' => 'Firefly III prend en charge un certain nombre de types de rapports. Lisez-les en cliquant sur l\'icône dans le coin supérieur droit.', - 'reports-index-examples' => 'N’oubliez pas de consultez ces exemples : un aperçu financier mensuel, une vue d’ensemble financière annuelle ainsi qu’une présentation du budget.', + 'reports-index-examples' => "N’oubliez pas de consultez ces exemples\u{a0}: un aperçu financier mensuel, une vue d’ensemble financière annuelle ainsi qu’une présentation du budget.", 'currencies-index' => 'Firefly III supporte de multiples devises. Bien que l\'Euro soit la devise par défaut, il est possible d\'utiliser le Dollar américain et de nombreuses autres devises. Comme vous pouvez le voir, une petite sélection de devises existe déjà mais vous pouvez ajouter vos propres devises si vous le souhaitez. Gardez à l\'esprit que la modification de la devise par défaut ne modifie pas la devise des transactions existantes : Firefly III prend en charge l’utilisation de plusieurs devises en même temps.', 'transactions-index' => 'Ces dépenses, dépôts et transferts ne sont pas particulièrement imaginatifs. Ils ont été générés automatiquement.', 'piggy-banks-index' => 'Comme vous pouvez le voir, il y a trois tirelires. Utilisez les boutons plus et moins pour influer sur le montant d’argent dans chaque tirelire. Cliquez sur le nom de la tirelire pour voir l’administration pour chaque tirelire.', diff --git a/resources/lang/fr_FR/email.php b/resources/lang/fr_FR/email.php index e692d44d39..3480fc9c5f 100644 --- a/resources/lang/fr_FR/email.php +++ b/resources/lang/fr_FR/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Un message de test de votre installation de Firefly III', 'admin_test_body' => 'Ceci est un message de test de votre instance Firefly III. Il a été envoyé à :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Une invitation a été créée', 'invitation_created_body' => 'L\'utilisateur admin ":email" a créé une invitation d\'utilisateur qui peut être utilisée par quiconque est derrière l\'adresse e-mail ":invitee". L\'invitation sera valide pendant 48 heures.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Réinitialisation du mot de passe :', 'registered_doc_link' => 'Documentation :', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Une nouvelle version de Firefly III est disponible', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Si vous le préférez, vous pouvez également ouvrir un nouveau ticket sur https://github.com/firefly-ii/firefly-iii/issues (en anglais).', 'error_stacktrace_below' => 'La stacktrace complète se trouve ci-dessous :', 'error_headers' => 'Les en-têtes suivants peuvent également être pertinents :', + 'error_post' => 'Ceci a été soumis par l\'utilisateur :', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III a créé une nouvelle opération|Firefly III a créé :count nouvelles opérations', 'new_journals_header' => 'Firefly III a créé une opération pour vous. Vous pouvez la trouver dans votre installation de Firefly III :|Firefly III a créé :count opérations pour vous. Vous pouvez les trouver dans votre installation de Firefly III :', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Votre facture **":name"** doit se terminer le :date, soit **AUJOURD\'HUI !**', 'bill_warning_extension_date_zero' => 'Votre facture **":name"** doit être prolongée ou annulée le :date, soit **AUJOURD\'HUI !**', 'bill_warning_please_action' => 'Merci de prendre les mesures appropriées.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/fr_FR/errors.php b/resources/lang/fr_FR/errors.php index 6f19bea5b7..ce0e7cf2bb 100644 --- a/resources/lang/fr_FR/errors.php +++ b/resources/lang/fr_FR/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack trace', 'more_info' => 'Plus d\'informations', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Vous pouvez obtenir plus d\'informations dans le répertoire stockage/logs où vous trouverez des fichiers journaux. Si vous utilisez Docker, utilisez docker logs -f [container].', - 'collect_info_more' => 'Vous pouvez en savoir plus sur la récupération des informations d\'erreur dans la FAQ.', - 'github_help' => 'Obtenir de l\'aide sur GitHub', - 'github_instructions' => 'Vous êtes encouragé à ouvrir un nouveau ticket sur GitHub (en anglais).', - 'use_search' => 'Utilisez la recherche !', - 'include_info' => 'Incluez les informations de cette page de débogage.', - 'tell_more' => 'Dites-nous plus que "ça dit Oups !"', - 'include_logs' => 'Incluez les logs d\'erreur (voir plus bas).', - 'what_did_you_do' => 'Dites-nous ce que vous faisiez.', - 'offline_header' => 'Vous êtes probablement déconnecté', - 'offline_unreachable' => 'Firefly III est inaccessible. Votre appareil est actuellement déconnecté ou le serveur ne fonctionne pas.', - 'offline_github' => 'Si vous êtes sûr que votre appareil et le serveur sont en ligne, veuillez ouvrir un ticket sur GitHub.', - + 'collect_info' => 'Vous pouvez obtenir plus d\'informations dans le répertoire stockage/logs où vous trouverez des fichiers journaux. Si vous utilisez Docker, utilisez docker logs -f [container].', + 'collect_info_more' => 'Vous pouvez en savoir plus sur la collecte des informations d\'erreur dans la FAQ.', + 'github_help' => 'Obtenir de l\'aide sur GitHub', + 'github_instructions' => 'Vous êtes encouragé à ouvrir un nouveau ticket sur GitHub (en anglais).', + 'use_search' => 'Utilisez la recherche !', + 'include_info' => 'Incluez les informations de cette page de débogage.', + 'tell_more' => 'Dites-nous plus que "ça dit Oups !"', + 'include_logs' => 'Incluez les logs d\'erreur (voir plus bas).', + 'what_did_you_do' => 'Dites-nous ce que vous faisiez.', + 'offline_header' => 'Vous êtes probablement déconnecté', + 'offline_unreachable' => 'Firefly III est inaccessible. Votre appareil est actuellement déconnecté ou le serveur ne fonctionne pas.', + 'offline_github' => 'Si vous êtes sûr que votre appareil et le serveur sont en ligne, veuillez ouvrir un ticket sur GitHub.', ]; diff --git a/resources/lang/fr_FR/firefly.php b/resources/lang/fr_FR/firefly.php index a17608bee1..255d69a1b7 100644 --- a/resources/lang/fr_FR/firefly.php +++ b/resources/lang/fr_FR/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Fermer', - 'actions' => 'Actions', - 'edit' => 'Modifier', - 'delete' => 'Supprimer', - 'split' => 'Ventiler', - 'single_split' => 'Ventilation', - 'clone' => 'Cloner', - 'confirm_action' => 'Confirmer l\'action', - 'last_seven_days' => '7 Derniers Jours', - 'last_thirty_days' => 'Trente derniers jours', - 'last_180_days' => '180 derniers jours', - 'month_to_date' => 'Ce mois-ci', - 'year_to_date' => 'Année en cours', - 'YTD' => 'Année en cours', - 'welcome_back' => 'Quoi de neuf ?', - 'everything' => 'Tout', - 'today' => 'aujourd\'hui', - 'customRange' => 'Intervalle personnalisé', - 'date_range' => 'Intervalle de dates', - 'apply' => 'Appliquer', - 'select_date' => 'Sélectionner une date...', - 'cancel' => 'Annuler', - 'from' => 'Depuis', - 'to' => 'A', - 'structure' => 'Structure', - 'help_translating' => 'Ce texte d\'aide n\'est pas encore disponible en français. Voulez-vous aider à le traduire ?', - 'showEverything' => 'Tout Afficher', - 'never' => 'Jamais', - 'no_results_for_empty_search' => 'Votre recherche était vide, rien n’a été trouvé.', - 'removed_amount' => 'Supprimé :amount', - 'added_amount' => 'Ajouté :amount', - 'asset_account_role_help' => 'Toutes options supplémentaires résultant de votre choix peuvent être réglées plus tard.', - 'Opening balance' => 'Solde initial', - 'create_new_stuff' => 'Créer de nouvelles choses', - 'new_withdrawal' => 'Nouvelle dépense', - 'create_new_transaction' => 'Créer une nouvelle opération', - 'sidebar_frontpage_create' => 'Créer', - 'new_transaction' => 'Nouvelle opération', - 'no_rules_for_bill' => 'Cette facture n\'a aucune règle associée.', - 'go_to_asset_accounts' => 'Afficher vos comptes d\'actifs', - 'go_to_budgets' => 'Gérer vos budgets', - 'go_to_withdrawals' => 'Accéder à vos retraits', - 'clones_journal_x' => 'Cette opération est un clone de ":description" (#:id)', - 'go_to_categories' => 'Gérer vos catégories', - 'go_to_bills' => 'Gérer vos factures', - 'go_to_expense_accounts' => 'Voir vos comptes de dépenses', - 'go_to_revenue_accounts' => 'Voir vos comptes de revenus', - 'go_to_piggies' => 'Gérer vos tirelires', - 'new_deposit' => 'Nouveau dépôt', - 'new_transfer' => 'Nouveau transfert', - 'new_transfers' => 'Nouveau transfert', - 'new_asset_account' => 'Nouveau compte d’actif', - 'new_expense_account' => 'Nouveau compte de dépenses', - 'new_revenue_account' => 'Nouveau compte de recettes', - 'new_liabilities_account' => 'Nouveau passif', - 'new_budget' => 'Nouveau budget', - 'new_bill' => 'Nouvelle facture', - 'block_account_logout' => 'Vous avez été déconnecté. Les comptes bloqués ne peuvent pas utiliser ce site. Vous êtes-vous enregistré avec une adresse e-mail valide ?', - 'flash_success' => 'Super !', - 'flash_info' => 'Message', - 'flash_warning' => 'Attention !', - 'flash_error' => 'Erreur !', - 'flash_danger' => 'Danger !', - 'flash_info_multiple' => 'Il y a un message| Il y a :count messages', - 'flash_error_multiple' => 'Il y a une erreur|Il y a :count erreurs', - 'net_worth' => 'Avoir net', - 'help_for_this_page' => 'Aide pour cette page', - 'help_for_this_page_body' => 'Vous pouvez trouver plus d\'informations sur cette page dans la documentation.', - 'two_factor_welcome' => 'Bonjour !', - 'two_factor_enter_code' => 'Pour continuer, veuillez entrer votre code d’authentification à deux facteurs. Votre application peut la générer pour vous.', - 'two_factor_code_here' => 'Entrez votre code ici', - 'two_factor_title' => 'Authentification à deux facteurs', - 'authenticate' => 'S\'authentifier', - 'two_factor_forgot_title' => 'Perte de l’authentification à deux facteurs', - 'two_factor_forgot' => 'J’ai oublié mon code d\'identification à deux facteurs.', - 'two_factor_lost_header' => 'Perdu votre authentification à deux facteurs ?', - 'two_factor_lost_intro' => 'Si vous avez aussi perdu vos codes de récupération, vous n\'avez pas de chance. Ce n\'est pas quelque chose que vous pouvez corriger depuis l\'interface web. Vous avez deux choix.', - 'two_factor_lost_fix_self' => 'Si vous exécutez votre propre instance de Firefly III, lisez cette entrée dans la FAQ pour obtenir des instructions.', - 'two_factor_lost_fix_owner' => 'Dans le cas contraire, contactez le propriétaire du site par courriel :site_owner et demandez-lui de réinitialiser votre authentification à deux facteurs.', - 'mfa_backup_code' => 'Vous avez utilisé un code de récupération pour vous connecter à Firefly III. Il ne peut être réutilisé, donc rayez-le de votre liste.', - 'pref_two_factor_new_backup_codes' => 'Obtenir de nouveaux codes de récupération', - 'pref_two_factor_backup_code_count' => 'Vous avez :count code de récupération valide.|Vous avez :count codes de récupération valides.', - '2fa_i_have_them' => 'Je les ai enregistrés !', - 'warning_much_data' => ':days jours de données peuvent prendre un certain temps à charger.', - 'registered' => 'Vous avez été enregistré avec succès !', - 'Default asset account' => 'Compte d’actif par défaut', - 'no_budget_pointer' => 'Vous semblez n’avoir encore aucun budget. Vous devriez en créer un sur la page des budgets. Les budgets peuvent vous aider à garder une trace des dépenses.', - 'no_bill_pointer' => 'Vous semblez n\'avoir encore aucune facture. Vous devriez en créer une sur la page factures-. Les factures peuvent vous aider à garder une trace des dépenses.', - 'Savings account' => 'Compte d’épargne', - 'Credit card' => 'Carte de Crédit', - 'source_accounts' => 'Compte source|Comptes source', - 'destination_accounts' => 'Compte de destination|Comptes de destination', - 'user_id_is' => 'Votre identifiant d’utilisateur est :user', - 'field_supports_markdown' => 'Ce champ prend en charge la syntaxe Markdown.', - 'need_more_help' => 'Si vous désirez plus de renseignements sur l\'utilisation de Firefly III, merci d\'ouvrir un ticket sur Github.', - 'reenable_intro_text' => 'Vous pouvez également réactiver le guide d\'introduction.', - 'intro_boxes_after_refresh' => 'Les boîtes d\'introduction réapparaîtront lorsque vous actualiserez la page.', - 'show_all_no_filter' => 'Montrer toutes les opérations sans les classer par date.', - 'expenses_by_category' => 'Dépenses par catégorie', - 'expenses_by_budget' => 'Dépenses par budget', - 'income_by_category' => 'Revenu par catégorie', - 'expenses_by_asset_account' => 'Dépenses par compte d’actif', - 'expenses_by_expense_account' => 'Dépenses par compte de dépenses', - 'cannot_redirect_to_account' => 'Firefly III n\'est pas en mesure de vous rediriger vers la bonne page. Veuillez nous en excuser.', - 'sum_of_expenses' => 'Montant des dépenses', - 'sum_of_income' => 'Montant des revenus', - 'liabilities' => 'Passifs', - 'spent_in_specific_budget' => 'Dépensé dans le budget ":budget"', - 'spent_in_specific_double' => 'Dépensé dans le compte ":account"', - 'earned_in_specific_double' => 'Gagné dans le compte ":account"', - 'source_account' => 'Compte source', - 'source_account_reconciliation' => 'Vous ne pouvez pas modifier le compte source d\'une opération de rapprochement.', - 'destination_account' => 'Compte de destination', - 'destination_account_reconciliation' => 'Vous ne pouvez pas modifier le compte de destination d\'une opération de rapprochement.', - 'sum_of_expenses_in_budget' => 'Total dépensé dans le budget ":budget"', - 'left_in_budget_limit' => 'Reste à dépenser selon budget', - 'current_period' => 'Période en cours', - 'show_the_current_period_and_overview' => 'Afficher l’exercice en cours et sa vue d’ensemble', - 'pref_languages_locale' => 'Pour une langue autre que l’anglais et pour fonctionner correctement, votre système d’exploitation doit être équipé avec les paramètres régionaux corrects. S\'ils ne sont pas présents, les données de devises, les dates et les montants peuvent être mal formatés.', - 'budget_in_period' => 'Toutes les opérations pour le budget ":name" entre :start et :end dans la monnaie :currency', - 'chart_budget_in_period' => 'Graphique pour toutes les opérations pour le budget ":name" entre :start et :end dans :currency', - 'chart_budget_in_period_only_currency' => 'Le montant que vous avez budgété était en :currency, ce graphique ne montrera donc que les opérations en :currency.', - 'chart_account_in_period' => 'Graphique pour toutes les opérations pour le compte ":name" (:balance) entre :start et :end', - 'chart_category_in_period' => 'Graphique pour toutes les opérations pour la catégorie ":name" entre :start et :end', - 'chart_category_all' => 'Graphique pour toutes les opérations pour la catégorie ":name"', - 'clone_withdrawal' => 'Cloner cette dépense', - 'clone_deposit' => 'Cloner ce dépôt', - 'clone_transfer' => 'Cloner ce transfert', - 'multi_select_no_selection' => 'Aucun sélectionné', - 'multi_select_select_all' => 'Tout sélectionner', - 'multi_select_n_selected' => 'sélectionné', - 'multi_select_all_selected' => 'Tous sélectionnés', - 'multi_select_filter_placeholder' => 'Rechercher..', - 'intro_next_label' => 'Suivant', - 'intro_prev_label' => 'Précédent', - 'intro_skip_label' => 'Ignorer', - 'intro_done_label' => 'Terminé', - 'between_dates_breadcrumb' => 'Entre :start et :end', - 'all_journals_without_budget' => 'Toutes les opérations sans budget', - 'journals_without_budget' => 'Opérations sans budget', - 'all_journals_without_category' => 'Toutes les opérations sans catégorie', - 'journals_without_category' => 'Opérations sans catégorie', - 'all_journals_for_account' => 'Toutes les opérations pour le compte :name', - 'chart_all_journals_for_account' => 'Tableau de toutes les opérations pour le compte :name', - 'journals_in_period_for_account' => 'Toutes les opérations pour le compte :name entre :start et :end', - 'journals_in_period_for_account_js' => 'Toutes les opérations pour le compte {title} entre {start} et {end}', - 'transferred' => 'Transféré', - 'all_withdrawal' => 'Toutes les dépenses', - 'all_transactions' => 'Toutes les opérations', - 'title_withdrawal_between' => 'Toutes les dépenses entre :start et :end', - 'all_deposit' => 'Toutes les recettes', - 'title_deposit_between' => 'Toutes les recettes entre :start et :end', - 'all_transfers' => 'Tous les transferts', - 'title_transfers_between' => 'Tous les transferts entre :start et :end', - 'all_transfer' => 'Tous les transferts', - 'all_journals_for_tag' => 'Toutes les opérations pour le tag ":tag"', - 'title_transfer_between' => 'Tous les transferts entre :start et :end', - 'all_journals_for_category' => 'Toutes les opérations pour la catégorie :name', - 'all_journals_for_budget' => 'Toutes les opérations pour le budget :name', - 'chart_all_journals_for_budget' => 'Graphique pour toutes les opérations pour le budget :name', - 'journals_in_period_for_category' => 'Toutes les opérations pour la catégorie :name entre :start et :end', - 'journals_in_period_for_tag' => 'Toutes les opérations de tag :tag entre :start et :end', - 'not_available_demo_user' => 'La fonctionnalité à laquelle vous essayez d’accéder n’est pas disponible pour les utilisateurs de la démo.', - 'exchange_rate_instructions' => 'Le compte d’actif "@name" n’accepte que les opérations en @native_currency. Si vous souhaitez utiliser @foreign_currency à la place, assurez-vous que le montant en @native_currency est aussi bien connu :', - 'transfer_exchange_rate_instructions' => 'Compte d’actif source "@source_name" n’accepte que les opérations en @source_currency. Compte d’actif "@dest_name" de destination n’accepte que les opérations en @dest_currency. Vous devez fournir le montant transféré correctement dans les deux devises.', - 'transaction_data' => 'Données d\'opération', - 'invalid_server_configuration' => 'Configuration de serveur invalide', - 'invalid_locale_settings' => 'Firefly III ne parvient pas à formater les montants monétaires car il manque des paquets logiciels sur votre serveur. Voici des instructions sur comment procéder.', - 'quickswitch' => 'Changement rapide', - 'sign_in_to_start' => 'Identifiez-vous pour commencer votre session', - 'sign_in' => 'S\'identifier', - 'register_new_account' => 'Créer un nouveau compte', - 'forgot_my_password' => 'J\'ai oublié mon mot de passe', - 'problems_with_input' => 'Il y a eu quelques problèmes avec votre saisie.', - 'reset_password' => 'Réinitialisez votre mot de passe', - 'button_reset_password' => 'Réinitialiser le mot de passe', - 'reset_button' => 'Réinitialiser', - 'want_to_login' => 'Je veux me connecter', - 'login_page_title' => 'Connectez-vous à Firefly III', - 'register_page_title' => 'Enregistrez-vous à Firefly III', - 'forgot_pw_page_title' => 'Mot de passe Firefly III oublié', - 'reset_pw_page_title' => 'Réinitialiser votre mot de passe Firefly III', - 'cannot_reset_demo_user' => 'Vous ne pouvez pas réinitialiser le mot de passe de l\'utilisateur de démonstration.', - 'no_att_demo_user' => 'L\'utilisateur de la démo ne peut pas envoyer de pièces jointes.', - 'button_register' => 'S\'inscrire', - 'authorization' => 'Autorisation', - 'active_bills_only' => 'factures actives seulement', - 'active_bills_only_total' => 'toutes les factures actives', - 'active_exp_bills_only' => 'uniquement les factures actives et attendues', - 'active_exp_bills_only_total' => 'uniquement les factures actives et attendues', - 'per_period_sum_1D' => 'Coûts journaliers attendus', - 'per_period_sum_1W' => 'Coûts hebdomadaires attendus', - 'per_period_sum_1M' => 'Coûts mensuels attendus', - 'per_period_sum_3M' => 'Coûts trimestriels attendus', - 'per_period_sum_6M' => 'Coûts semestriels attendus', - 'per_period_sum_1Y' => 'Coûts annuels attendus', - 'average_per_bill' => 'moyenne par facture', - 'expected_total' => 'total prévu', - 'reconciliation_account_name' => 'Régularisation de :name (:currency)', - 'saved' => 'Sauvegardé', - 'advanced_options' => 'Options avancées', - 'advanced_options_explain' => 'Certaines pages de Firefly III ont des options avancées cachées derrière ce bouton. Cette page n\'a rien de bien utile ici, mais regardez les autres !', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Fermer', + 'actions' => 'Actions', + 'edit' => 'Modifier', + 'delete' => 'Supprimer', + 'split' => 'Séparation', + 'single_split' => 'Séparation unique', + 'clone' => 'Cloner', + 'clone_and_edit' => 'Cloner et modifier', + 'confirm_action' => 'Confirmer l\'action', + 'last_seven_days' => '7 Derniers Jours', + 'last_thirty_days' => 'Trente derniers jours', + 'last_180_days' => '180 derniers jours', + 'month_to_date' => 'Ce mois-ci', + 'year_to_date' => 'Année en cours', + 'YTD' => 'Année en cours', + 'welcome_back' => 'Quoi de neuf ?', + 'everything' => 'Tout', + 'today' => 'aujourd\'hui', + 'customRange' => 'Intervalle personnalisé', + 'date_range' => 'Intervalle de dates', + 'apply' => 'Appliquer', + 'select_date' => 'Sélectionner une date...', + 'cancel' => 'Annuler', + 'from' => 'Depuis', + 'to' => 'A', + 'structure' => 'Structure', + 'help_translating' => 'Ce texte d\'aide n\'est pas encore disponible en français. Voulez-vous aider à le traduire ?', + 'showEverything' => 'Tout Afficher', + 'never' => 'Jamais', + 'no_results_for_empty_search' => 'Votre recherche était vide, rien n’a été trouvé.', + 'removed_amount' => 'Supprimé :amount', + 'added_amount' => 'Ajouté :amount', + 'asset_account_role_help' => 'Toutes options supplémentaires résultant de votre choix peuvent être réglées plus tard.', + 'Opening balance' => 'Solde initial', + 'create_new_stuff' => 'Créer de nouvelles choses', + 'new_withdrawal' => 'Nouvelle dépense', + 'create_new_transaction' => 'Créer une nouvelle opération', + 'sidebar_frontpage_create' => 'Créer', + 'new_transaction' => 'Nouvelle opération', + 'no_rules_for_bill' => 'Cette facture n\'a aucune règle associée.', + 'go_to_asset_accounts' => 'Afficher vos comptes d\'actifs', + 'go_to_budgets' => 'Gérer vos budgets', + 'go_to_withdrawals' => 'Accéder à vos retraits', + 'clones_journal_x' => 'Cette opération est un clone de ":description" (#:id)', + 'go_to_categories' => 'Gérer vos catégories', + 'go_to_bills' => 'Gérer vos factures', + 'go_to_expense_accounts' => 'Voir vos comptes de dépenses', + 'go_to_revenue_accounts' => 'Voir vos comptes de revenus', + 'go_to_piggies' => 'Gérer vos tirelires', + 'new_deposit' => 'Nouveau dépôt', + 'new_transfer' => 'Nouveau transfert', + 'new_transfers' => 'Nouveau transfert', + 'new_asset_account' => 'Nouveau compte d’actif', + 'new_expense_account' => 'Nouveau compte de dépenses', + 'new_revenue_account' => 'Nouveau compte de recettes', + 'new_liabilities_account' => 'Nouveau passif', + 'new_budget' => 'Nouveau budget', + 'new_bill' => 'Nouvelle facture', + 'block_account_logout' => 'Vous avez été déconnecté. Les comptes bloqués ne peuvent pas utiliser ce site. Vous êtes-vous enregistré avec une adresse e-mail valide ?', + 'flash_success' => 'Super !', + 'flash_info' => 'Message', + 'flash_warning' => 'Attention !', + 'flash_error' => 'Erreur !', + 'flash_danger' => 'Danger !', + 'flash_info_multiple' => 'Il y a un message| Il y a :count messages', + 'flash_error_multiple' => 'Il y a une erreur|Il y a :count erreurs', + 'net_worth' => 'Avoir net', + 'help_for_this_page' => 'Aide pour cette page', + 'help_for_this_page_body' => 'Vous pouvez trouver plus d\'informations sur cette page dans la documentation.', + 'two_factor_welcome' => 'Bonjour !', + 'two_factor_enter_code' => 'Pour continuer, veuillez entrer votre code d’authentification à deux facteurs. Votre application peut la générer pour vous.', + 'two_factor_code_here' => 'Entrez votre code ici', + 'two_factor_title' => 'Authentification à deux facteurs', + 'authenticate' => 'S\'authentifier', + 'two_factor_forgot_title' => 'Perte de l’authentification à deux facteurs', + 'two_factor_forgot' => 'J’ai oublié mon code d\'identification à deux facteurs.', + 'two_factor_lost_header' => 'Perdu votre authentification à deux facteurs ?', + 'two_factor_lost_intro' => 'Si vous avez aussi perdu vos codes de récupération, vous n\'avez pas de chance. Ce n\'est pas quelque chose que vous pouvez corriger depuis l\'interface web. Vous avez deux choix.', + 'two_factor_lost_fix_self' => 'Si vous exécutez votre propre instance de Firefly III, lisez :site_owner et demandez-lui de réinitialiser votre authentification à deux facteurs.', + 'mfa_backup_code' => 'Vous avez utilisé un code de récupération pour vous connecter à Firefly III. Il ne peut être réutilisé, donc rayez-le de votre liste.', + 'pref_two_factor_new_backup_codes' => 'Obtenir de nouveaux codes de récupération', + 'pref_two_factor_backup_code_count' => 'Vous avez :count code de récupération valide.|Vous avez :count codes de récupération valides.', + '2fa_i_have_them' => 'Je les ai enregistrés !', + 'warning_much_data' => ':days jours de données peuvent prendre un certain temps à charger.', + 'registered' => 'Vous avez été enregistré avec succès !', + 'Default asset account' => 'Compte d’actif par défaut', + 'no_budget_pointer' => 'Vous semblez n’avoir encore aucun budget. Vous devriez en créer un sur la page des budgets. Les budgets peuvent vous aider à garder une trace des dépenses.', + 'no_bill_pointer' => 'Vous semblez n\'avoir encore aucune facture. Vous devriez en créer une sur la page factures-. Les factures peuvent vous aider à garder une trace des dépenses.', + 'Savings account' => 'Compte d’épargne', + 'Credit card' => 'Carte de Crédit', + 'source_accounts' => 'Compte source|Comptes source', + 'destination_accounts' => 'Compte de destination|Comptes de destination', + 'user_id_is' => 'Votre identifiant d’utilisateur est :user', + 'field_supports_markdown' => 'Ce champ prend en charge la syntaxe Markdown.', + 'need_more_help' => 'Si vous désirez plus de renseignements sur l\'utilisation de Firefly III, merci d\'ouvrir un ticket sur Github.', + 'reenable_intro_text' => 'Vous pouvez également réactiver le guide d\'introduction.', + 'intro_boxes_after_refresh' => 'Les boîtes d\'introduction réapparaîtront lorsque vous actualiserez la page.', + 'show_all_no_filter' => 'Montrer toutes les opérations sans les classer par date.', + 'expenses_by_category' => 'Dépenses par catégorie', + 'expenses_by_budget' => 'Dépenses par budget', + 'income_by_category' => 'Revenu par catégorie', + 'expenses_by_asset_account' => 'Dépenses par compte d’actif', + 'expenses_by_expense_account' => 'Dépenses par compte de dépenses', + 'cannot_redirect_to_account' => 'Firefly III n\'est pas en mesure de vous rediriger vers la bonne page. Veuillez nous en excuser.', + 'sum_of_expenses' => 'Montant des dépenses', + 'sum_of_income' => 'Montant des revenus', + 'liabilities' => 'Passifs', + 'spent_in_specific_budget' => 'Dépensé dans le budget ":budget"', + 'spent_in_specific_double' => 'Dépensé dans le compte ":account"', + 'earned_in_specific_double' => 'Gagné dans le compte ":account"', + 'source_account' => 'Compte source', + 'source_account_reconciliation' => 'Vous ne pouvez pas modifier le compte source d\'une opération de rapprochement.', + 'destination_account' => 'Compte de destination', + 'destination_account_reconciliation' => 'Vous ne pouvez pas modifier le compte de destination d\'une opération de rapprochement.', + 'sum_of_expenses_in_budget' => 'Total dépensé dans le budget ":budget"', + 'left_in_budget_limit' => 'Reste à dépenser selon budget', + 'current_period' => 'Période en cours', + 'show_the_current_period_and_overview' => 'Afficher l’exercice en cours et sa vue d’ensemble', + 'pref_languages_locale' => 'Pour une langue autre que l’anglais et pour fonctionner correctement, votre système d’exploitation doit être équipé avec les paramètres régionaux corrects. S\'ils ne sont pas présents, les données de devises, les dates et les montants peuvent être mal formatés.', + 'budget_in_period' => "Toutes les opérations pour le budget\u{a0}\":name\" entre\u{a0}:start et\u{a0}:end dans la monnaie :currency", + 'chart_budget_in_period' => 'Graphique pour toutes les opérations pour le budget ":name" entre :start et :end dans :currency', + 'chart_budget_in_period_only_currency' => 'Le montant que vous avez budgété était en :currency, ce graphique ne montrera donc que les opérations en :currency.', + 'chart_account_in_period' => "Graphique pour toutes les opérations pour le compte \":name\" (:balance) entre\u{a0}:start et :end", + 'chart_category_in_period' => "Graphique pour toutes les opérations pour la catégorie \":name\" entre\u{a0}:start et :end", + 'chart_category_all' => 'Graphique pour toutes les opérations pour la catégorie ":name"', + 'clone_withdrawal' => 'Cloner cette dépense', + 'clone_deposit' => 'Cloner ce dépôt', + 'clone_transfer' => 'Cloner ce transfert', + 'multi_select_no_selection' => 'Aucun sélectionné', + 'multi_select_select_all' => 'Tout sélectionner', + 'multi_select_n_selected' => 'sélectionné', + 'multi_select_all_selected' => 'Tous sélectionnés', + 'multi_select_filter_placeholder' => 'Rechercher..', + 'intro_next_label' => 'Suivant', + 'intro_prev_label' => 'Précédent', + 'intro_skip_label' => 'Ignorer', + 'intro_done_label' => 'Terminé', + 'between_dates_breadcrumb' => "Entre\u{a0}:start et\u{a0}:end", + 'all_journals_without_budget' => 'Toutes les opérations sans budget', + 'journals_without_budget' => 'Opérations sans budget', + 'all_journals_without_category' => 'Toutes les opérations sans catégorie', + 'journals_without_category' => 'Opérations sans catégorie', + 'all_journals_for_account' => "Toutes les opérations pour le compte\u{a0}:name", + 'chart_all_journals_for_account' => "Tableau de toutes les opérations pour le compte\u{a0}:name", + 'journals_in_period_for_account' => "Toutes les opérations pour le compte\u{a0}:name entre\u{a0}:start et\u{a0}:end", + 'journals_in_period_for_account_js' => 'Toutes les opérations pour le compte {title} entre {start} et {end}', + 'transferred' => 'Transféré', + 'all_withdrawal' => 'Toutes les dépenses', + 'all_transactions' => 'Toutes les opérations', + 'title_withdrawal_between' => "Toutes les dépenses entre\u{a0}:start et\u{a0}:end", + 'all_deposit' => 'Toutes les recettes', + 'title_deposit_between' => "Toutes les recettes entre\u{a0}:start et\u{a0}:end", + 'all_transfers' => 'Tous les transferts', + 'title_transfers_between' => "Tous les transferts entre\u{a0}:start et\u{a0}:end", + 'all_transfer' => 'Tous les transferts', + 'all_journals_for_tag' => 'Toutes les opérations pour le tag ":tag"', + 'title_transfer_between' => "Tous les transferts entre\u{a0}:start et\u{a0}:end", + 'all_journals_for_category' => "Toutes les opérations pour la catégorie\u{a0}:name", + 'all_journals_for_budget' => "Toutes les opérations pour le budget\u{a0}:name", + 'chart_all_journals_for_budget' => 'Graphique pour toutes les opérations pour le budget :name', + 'journals_in_period_for_category' => "Toutes les opérations pour la catégorie\u{a0}:name entre\u{a0}:start et\u{a0}:end", + 'journals_in_period_for_tag' => "Toutes les opérations de tag\u{a0}:tag entre\u{a0}:start et\u{a0}:end", + 'not_available_demo_user' => 'La fonctionnalité à laquelle vous essayez d’accéder n’est pas disponible pour les utilisateurs de la démo.', + 'exchange_rate_instructions' => "Le compte d’actif \"@name\" n’accepte que les opérations en @native_currency. Si vous souhaitez utiliser @foreign_currency à la place, assurez-vous que le montant en @native_currency est aussi bien connu\u{a0}:", + 'transfer_exchange_rate_instructions' => 'Compte d’actif source "@source_name" n’accepte que les opérations en @source_currency. Compte d’actif "@dest_name" de destination n’accepte que les opérations en @dest_currency. Vous devez fournir le montant transféré correctement dans les deux devises.', + 'transaction_data' => 'Données d\'opération', + 'invalid_server_configuration' => 'Configuration de serveur invalide', + 'invalid_locale_settings' => 'Firefly III ne parvient pas à formater les montants monétaires car il manque des paquets logiciels sur votre serveur. Voici des instructions sur comment procéder.', + 'quickswitch' => 'Changement rapide', + 'sign_in_to_start' => 'Identifiez-vous pour commencer votre session', + 'sign_in' => 'S\'identifier', + 'register_new_account' => 'Créer un nouveau compte', + 'forgot_my_password' => 'J\'ai oublié mon mot de passe', + 'problems_with_input' => 'Il y a eu quelques problèmes avec votre saisie.', + 'reset_password' => 'Réinitialisez votre mot de passe', + 'button_reset_password' => 'Réinitialiser le mot de passe', + 'reset_button' => 'Réinitialiser', + 'want_to_login' => 'Je veux me connecter', + 'login_page_title' => 'Connectez-vous à Firefly III', + 'register_page_title' => 'Enregistrez-vous à Firefly III', + 'forgot_pw_page_title' => 'Mot de passe Firefly III oublié', + 'reset_pw_page_title' => 'Réinitialiser votre mot de passe Firefly III', + 'cannot_reset_demo_user' => 'Vous ne pouvez pas réinitialiser le mot de passe de l\'utilisateur de démonstration.', + 'no_att_demo_user' => 'L\'utilisateur de la démo ne peut pas envoyer de pièces jointes.', + 'button_register' => 'S\'inscrire', + 'authorization' => 'Autorisation', + 'active_bills_only' => 'factures actives seulement', + 'active_bills_only_total' => 'toutes les factures actives', + 'active_exp_bills_only' => 'uniquement les factures actives et attendues', + 'active_exp_bills_only_total' => 'uniquement les factures actives et attendues', + 'per_period_sum_1D' => 'Coûts journaliers attendus', + 'per_period_sum_1W' => 'Coûts hebdomadaires attendus', + 'per_period_sum_1M' => 'Coûts mensuels attendus', + 'per_period_sum_3M' => 'Coûts trimestriels attendus', + 'per_period_sum_6M' => 'Coûts semestriels attendus', + 'per_period_sum_1Y' => 'Coûts annuels attendus', + 'average_per_bill' => 'moyenne par facture', + 'expected_total' => 'total prévu', + 'reconciliation_account_name' => 'Régularisation de :name (:currency)', + 'saved' => 'Sauvegardé', + 'advanced_options' => 'Options avancées', + 'advanced_options_explain' => 'Certaines pages de Firefly III ont des options avancées cachées derrière ce bouton. Cette page n\'a rien de bien utile ici, mais regardez les autres !', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'Il n\'y a pas de messages webhook', - 'webhook_trigger_STORE_TRANSACTION' => 'Après la création de l\'opération', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Après la mise à jour de l\'opération', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Après la suppression de l\'opération', - 'webhook_response_TRANSACTIONS' => 'Détails de l\'opération', - 'webhook_response_ACCOUNTS' => 'Détails du compte', - 'webhook_response_none_NONE' => 'Aucun détail', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspecter', - 'create_new_webhook' => 'Créer un nouveau webhook', - 'webhooks_create_breadcrumb' => 'Créer un nouveau webhook', - 'webhook_trigger_form_help' => 'Indique sur quel événement le webhook va se déclencher', - 'webhook_response_form_help' => 'Indiquer ce que le webhook doit envoyer à l\'URL.', - 'webhook_delivery_form_help' => 'Le format dans lequel le webhook doit fournir des données.', - 'webhook_active_form_help' => 'Le webhook doit être actif, sinon il ne sera pas appelé.', - 'stored_new_webhook' => 'Nouveau webhook ":title " sauvegardé', - 'delete_webhook' => 'Supprimer le webhook', - 'deleted_webhook' => 'Webhook ":title" supprimé', - 'edit_webhook' => 'Modifier le webhook ":title"', - 'updated_webhook' => 'Webhook ":title" mis à jour', - 'edit_webhook_js' => 'Modifier le webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'Le webhook a été déclenché sur l\'opération indiquée. Veuillez attendre que les résultats apparaissent.', - 'webhook_messages' => 'Message webhook', - 'view_message' => 'Afficher le message', - 'view_attempts' => 'Voir les tentatives échouées', - 'message_content_title' => 'Contenu du message webhook', - 'message_content_help' => 'Il s\'agit du contenu du message qui a été envoyé (ou essayé) avec ce webhook.', - 'attempt_content_title' => 'Tentatives de webhook', - 'attempt_content_help' => 'Ce sont toutes les tentatives infructueuses de ce message webhook à envoyer à l\'URL configurée. Après un certain temps, Firefly III cessera d\'essayer.', - 'no_attempts' => 'Il n\'y a pas de tentatives infructueuses. C\'est une bonne chose !', - 'webhook_attempt_at' => 'Tentative à {moment}', - 'logs' => 'Journaux', - 'response' => 'Réponse', - 'visit_webhook_url' => 'Visiter l\'URL du webhook', - 'reset_webhook_secret' => 'Réinitialiser le secret du webhook', - 'webhook_stored_link' => 'Le Webhook #{ID} ("{title}") a été enregistré.', - 'webhook_updated_link' => 'Le webhook #{ID} ("{title}") a été mis à jour.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'désactivé', + 'no_webhook_messages' => 'Il n\'y a pas de messages webhook', + 'webhook_trigger_STORE_TRANSACTION' => 'Après la création de l\'opération', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Après la mise à jour de l\'opération', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Après la suppression de l\'opération', + 'webhook_response_TRANSACTIONS' => 'Détails de l\'opération', + 'webhook_response_ACCOUNTS' => 'Détails du compte', + 'webhook_response_none_NONE' => 'Aucun détail', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspecter', + 'create_new_webhook' => 'Créer un nouveau webhook', + 'webhooks_create_breadcrumb' => 'Créer un nouveau webhook', + 'webhook_trigger_form_help' => 'Indique sur quel événement le webhook va se déclencher', + 'webhook_response_form_help' => 'Indiquer ce que le webhook doit envoyer à l\'URL.', + 'webhook_delivery_form_help' => 'Le format dans lequel le webhook doit fournir des données.', + 'webhook_active_form_help' => 'Le webhook doit être actif, sinon il ne sera pas appelé.', + 'stored_new_webhook' => 'Nouveau webhook ":title " sauvegardé', + 'delete_webhook' => 'Supprimer le webhook', + 'deleted_webhook' => 'Webhook ":title" supprimé', + 'edit_webhook' => 'Modifier le webhook ":title"', + 'updated_webhook' => 'Webhook ":title" mis à jour', + 'edit_webhook_js' => 'Modifier le webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'Le webhook a été déclenché sur l\'opération indiquée. Veuillez attendre que les résultats apparaissent.', + 'webhook_messages' => 'Message webhook', + 'view_message' => 'Afficher le message', + 'view_attempts' => 'Voir les tentatives échouées', + 'message_content_title' => 'Contenu du message webhook', + 'message_content_help' => 'Il s\'agit du contenu du message qui a été envoyé (ou essayé) avec ce webhook.', + 'attempt_content_title' => 'Tentatives de webhook', + 'attempt_content_help' => 'Ce sont toutes les tentatives infructueuses de ce message webhook à envoyer à l\'URL configurée. Après un certain temps, Firefly III cessera d\'essayer.', + 'no_attempts' => 'Il n\'y a pas de tentatives infructueuses. C\'est une bonne chose !', + 'webhook_attempt_at' => 'Tentative à {moment}', + 'logs' => 'Journaux', + 'response' => 'Réponse', + 'visit_webhook_url' => 'Visiter l\'URL du webhook', + 'reset_webhook_secret' => 'Réinitialiser le secret du webhook', + 'webhook_stored_link' => 'Le Webhook #{ID} ("{title}") a été enregistré.', + 'webhook_updated_link' => 'Le webhook #{ID} ("{title}") a été mis à jour.', // API access - 'authorization_request' => 'Firefly III v:version demande d\'autorisation', - 'authorization_request_intro' => 'L\'application ":client" demande l\'autorisation d\'accéder à votre administration financière. Voulez-vous autoriser :client à accéder à ces enregistrements ?', - 'authorization_request_site' => 'Vous allez être redirigé vers :url qui pourra ensuite accéder à vos données Firefly III.', - 'authorization_request_invalid' => 'Cette demande d\'accès n\'est pas valide. Veuillez ne plus suivre ce lien.', - 'scopes_will_be_able' => 'Cette application pourra :', - 'button_authorize' => 'Autoriser', - 'none_in_select_list' => '(aucun)', - 'no_piggy_bank' => '(aucune tirelire)', - 'name_in_currency' => ':name en :currency', - 'paid_in_currency' => 'Payé en :currency', - 'unpaid_in_currency' => 'Non payé en :currency', - 'is_alpha_warning' => 'Vous utilisez une version ALPHA. Méfiez-vous des bogues et des problèmes.', - 'is_beta_warning' => 'Vous utilisez une version BETA. Méfiez-vous des bogues et des problèmes.', - 'all_destination_accounts' => 'Comptes de destination', - 'all_source_accounts' => 'Comptes source', - 'back_to_index' => 'Retour à l\'accueil', - 'cant_logout_guard' => 'Firefly III ne peut pas vous déconnecter.', - 'internal_reference' => 'Référence interne', + 'authorization_request' => 'Firefly III v:version demande d\'autorisation', + 'authorization_request_intro' => 'L\'application ":client" demande l\'autorisation d\'accéder à votre administration financière. Voulez-vous autoriser :client à accéder à ces enregistrements ?', + 'authorization_request_site' => 'Vous allez être redirigé vers :url qui pourra ensuite accéder à vos données Firefly III.', + 'authorization_request_invalid' => 'Cette demande d\'accès n\'est pas valide. Veuillez ne plus suivre ce lien.', + 'scopes_will_be_able' => 'Cette application pourra :', + 'button_authorize' => 'Autoriser', + 'none_in_select_list' => '(aucun)', + 'no_piggy_bank' => '(aucune tirelire)', + 'name_in_currency' => ':name en :currency', + 'paid_in_currency' => 'Payé en :currency', + 'unpaid_in_currency' => 'Non payé en :currency', + 'is_alpha_warning' => 'Vous utilisez une version ALPHA. Méfiez-vous des bogues et des problèmes.', + 'is_beta_warning' => 'Vous utilisez une version BETA. Méfiez-vous des bogues et des problèmes.', + 'all_destination_accounts' => 'Comptes de destination', + 'all_source_accounts' => 'Comptes source', + 'back_to_index' => 'Retour à l\'accueil', + 'cant_logout_guard' => 'Firefly III ne peut pas vous déconnecter.', + 'internal_reference' => 'Référence interne', // check for updates: - 'update_check_title' => 'Vérifier les mises à jour', - 'admin_update_check_title' => 'Rechercher automatiquement les mises à jour', - 'admin_update_check_explain' => 'Firefly III peut vérifier les mises à jour automatiquement. Lorsque vous activez ce paramètre, il contacte le serveur de mise à jour de Firefly III pour voir si une nouvelle version de Firefly III est disponible. Quand c\'est le cas, vous recevrez une notification. Vous pouvez tester cette notification en utilisant le bouton sur la droite. Veuillez indiquer ci-dessous si vous voulez que Firefly III vérifie les mises à jour.', - 'check_for_updates_permission' => 'Firefly III peut vérifier les mises à jour, mais il a besoin de votre permission pour le faire. Veuillez vous rendre à l\'adresse administration pour indiquer si vous souhaitez que cette fonctionnalité soit activée.', - 'updates_ask_me_later' => 'Me demander plus tard', - 'updates_do_not_check' => 'Ne pas vérifier les mises à jour', - 'updates_enable_check' => 'Activer la vérification des mises à jour', - 'admin_update_check_now_title' => 'Vérifier les mises à jour maintenant', - 'admin_update_check_now_explain' => 'Si vous appuyez sur le bouton, Firefly III verra si votre version actuelle est la dernière.', - 'check_for_updates_button' => 'Vérifier maintenant !', - 'update_new_version_alert' => 'Une nouvelle version de Firefly III est disponible. Vous utilisez v:your_version. La dernière version v:new_version a été publiée le :date.', - 'update_version_beta' => 'Cette version est une version BETA. Vous pouvez rencontrer des problèmes.', - 'update_version_alpha' => 'Cette version est une version ALPHA. Vous pourriez rencontrer des problèmes.', - 'update_current_version_alert' => 'Vous utilisez v:version, la dernière version disponible.', - 'update_newer_version_alert' => 'Vous utilisez v:your_version, qui est plus récente que la dernière version, v:new_version.', - 'update_check_error' => 'Une erreur est survenue lors de la vérification d\'une mise à jour : :error', - 'unknown_error' => 'Erreur inconnue. Désolé.', - 'just_new_release' => 'Une nouvelle version est disponible ! La version :version a été publiée :date. Cette version est très récente. Attendez quelques jours pour que la nouvelle version se stabilise.', - 'disabled_but_check' => 'Vous avez désactivé la vérification des mises à jour. N\'oubliez donc pas de vérifier vous-même les mises à jour de temps en temps. Merci !', - 'admin_update_channel_title' => 'Canal de mise à jour', - 'admin_update_channel_explain' => 'Firefly III dispose de trois canaux de mise à jour qui déterminent ce que vous êtes prêt à accepter en termes de fonctionnalités, d\'améliorations et de bogues. Utilisez le canal « bêta » si vous êtes aventurier et le « alpha » lorsque vous aimez vivre dangereusement.', - 'update_channel_stable' => 'Stable. Tout devrait fonctionner comme prévu.', - 'update_channel_beta' => 'Bêta. De nouvelles fonctionnalités sont présentes, mais il peut exister des régressions.', - 'update_channel_alpha' => 'Alpha. Nous essayons des choses et gardons ce qui fonctionne.', + 'update_check_title' => 'Vérifier les mises à jour', + 'admin_update_check_title' => 'Rechercher automatiquement les mises à jour', + 'admin_update_check_explain' => 'Firefly III peut vérifier les mises à jour automatiquement. Lorsque vous activez ce paramètre, il contacte le serveur de mise à jour de Firefly III pour voir si une nouvelle version de Firefly III est disponible. Quand c\'est le cas, vous recevrez une notification. Vous pouvez tester cette notification en utilisant le bouton sur la droite. Veuillez indiquer ci-dessous si vous voulez que Firefly III vérifie les mises à jour.', + 'check_for_updates_permission' => 'Firefly III peut vérifier les mises à jour, mais il a besoin de votre permission pour le faire. Veuillez vous rendre à l\'adresse administration pour indiquer si vous souhaitez que cette fonctionnalité soit activée.', + 'updates_ask_me_later' => 'Me demander plus tard', + 'updates_do_not_check' => 'Ne pas vérifier les mises à jour', + 'updates_enable_check' => 'Activer la vérification des mises à jour', + 'admin_update_check_now_title' => 'Vérifier les mises à jour maintenant', + 'admin_update_check_now_explain' => 'Si vous appuyez sur le bouton, Firefly III verra si votre version actuelle est la dernière.', + 'check_for_updates_button' => 'Vérifier maintenant !', + 'update_new_version_alert' => 'Une nouvelle version de Firefly III est disponible. Vous utilisez v:your_version. La dernière version v:new_version a été publiée le :date.', + 'update_version_beta' => 'Cette version est une version BETA. Vous pouvez rencontrer des problèmes.', + 'update_version_alpha' => 'Cette version est une version ALPHA. Vous pourriez rencontrer des problèmes.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Vous utilisez v:version, la dernière version disponible.', + 'update_newer_version_alert' => 'Vous utilisez v:your_version, qui est plus récente que la dernière version, v:new_version.', + 'update_check_error' => 'Une erreur est survenue lors de la vérification d\'une mise à jour : :error', + 'unknown_error' => 'Erreur inconnue. Désolé.', + 'disabled_but_check' => 'Vous avez désactivé la vérification des mises à jour. N\'oubliez donc pas de vérifier vous-même les mises à jour de temps en temps. Merci !', + 'admin_update_channel_title' => 'Canal de mise à jour', + 'admin_update_channel_explain' => 'Firefly III dispose de trois canaux de mise à jour qui déterminent ce que vous êtes prêt à accepter en termes de fonctionnalités, d\'améliorations et de bogues. Utilisez le canal « bêta » si vous êtes aventurier et le « alpha » lorsque vous aimez vivre dangereusement.', + 'update_channel_stable' => 'Stable. Tout devrait fonctionner comme prévu.', + 'update_channel_beta' => 'Bêta. De nouvelles fonctionnalités sont présentes, mais il peut exister des régressions.', + 'update_channel_alpha' => 'Alpha. Nous essayons des choses et gardons ce qui fonctionne.', // search - 'search' => 'Rechercher', - 'search_query' => 'Requête', - 'search_found_transactions' => 'Firefly III a trouvé :count opération en :time secondes.|Firefly III a trouvé :count opérations en :time secondes.', - 'search_found_more_transactions' => 'Firefly III a trouvé plus de :count transactions en :time secondes.', - 'search_for_query' => 'Firefly III recherche des opérations contenant tous ces mots : :query', - 'invalid_operators_list' => 'Ces paramètres de recherche ne sont pas valides et ont été ignorés.', + 'search' => 'Rechercher', + 'search_query' => 'Requête', + 'search_found_transactions' => 'Firefly III a trouvé :count opération en :time secondes.|Firefly III a trouvé :count opérations en :time secondes.', + 'search_found_more_transactions' => 'Firefly III a trouvé plus de :count transactions en :time secondes.', + 'search_for_query' => 'Firefly III recherche des opérations contenant tous ces mots : :query', + 'invalid_operators_list' => 'Ces paramètres de recherche ne sont pas valides et ont été ignorés.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'La date de l\'opération est ":value"', 'search_modifier_not_date_on' => 'La date de l\'opération n\'est pas ":value"', 'search_modifier_reconciled' => 'L\'opération est rapprochée', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Le type de transaction est ":value"', 'search_modifier_not_transaction_type' => 'Le type de l\'opération n\'est pas :value', 'search_modifier_tag_is' => 'Le tag est ":value"', + 'search_modifier_tag_contains' => 'Le tag contient ":value"', + 'search_modifier_not_tag_contains' => 'Le tag ne contient pas «:value»', + 'search_modifier_tag_ends' => 'Le tag se termine par «:value»', + 'search_modifier_tag_starts' => 'Le tag commence par «:value»', 'search_modifier_not_tag_is' => 'Aucun tag n\'est ":value"', 'search_modifier_date_on_year' => 'L\'opération est dans l\'année ":value"', 'search_modifier_not_date_on_year' => 'L\'opération n\'est pas dans l\'année ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'Aucun tag n\'est ":value"', 'search_modifier_not_tag_is_not' => 'Le tag est ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Les modificateurs suivants sont aussi appliqués à la recherche :', 'general_search_error' => 'Une erreur s\'est produite lors de la recherche. Veuillez vérifier les fichiers journaux pour plus d\'informations.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Pas', 'cannot_fire_inactive_rules' => 'Vous ne pouvez pas exécuter des règles inactives.', + 'show_triggers' => 'Afficher les déclencheurs', + 'show_actions' => 'Afficher les actions', 'rules' => 'Règles', 'rule_name' => 'Nom de la règle', 'rule_triggers' => 'La règle se déclenchera lorsque', @@ -772,7 +777,7 @@ return [ 'save_rules_by_moving' => 'Enregistrer cette règle en la déplaçant dans un autre groupe de règles :|Enregistrer ces règles en les déplaçant dans un autre groupe de règles :', 'make_new_rule' => 'Créer une nouvelle règle dans le groupe de règles ":title"', 'make_new_rule_no_group' => 'Créer une nouvelle règle', - 'instructions_rule_from_bill' => 'Afin d’associer des opérations à votre nouvelle facture « :name », Firefly III peut créer une règle qui sera automatiquement appliquée sur toutes les opérations déjà enregistrées. Veuillez vérifier les détails ci-après et enregistrer la règle pour que Firefly III associe automatiquement des opérations à votre nouvelle facture.', + 'instructions_rule_from_bill' => "Afin d’associer des opérations à votre nouvelle facture «\u{a0}:name\u{a0}», Firefly III peut créer une règle qui sera automatiquement appliquée sur toutes les opérations déjà enregistrées. Veuillez vérifier les détails ci-après et enregistrer la règle pour que Firefly III associe automatiquement des opérations à votre nouvelle facture.", 'instructions_rule_from_journal' => 'Créez une règle basée sur une de vos opérations. Complétez ou soumettez le formulaire ci-dessous.', 'rule_is_strict' => 'règle stricte', 'rule_is_not_strict' => 'règle non stricte', @@ -780,7 +785,7 @@ return [ 'rule_help_strict' => 'En mode strict, TOUS les déclencheurs doivent être activés pour que les actions s\'exécutent. Si décoché, N\'IMPORTE QUEL déclencheur est suffisant pour que les actions soit exécutées.', 'rule_help_active' => 'Les règles inactives ne se déclencheront jamais.', 'stored_new_rule' => 'Nouvelle règle créée avec le titre ":title"', - 'deleted_rule' => 'Règle supprimée avec le titre ":title"', + 'deleted_rule' => 'Règle avec le titre ":title" supprimée', 'store_new_rule' => 'Créer une nouvelle règle', 'updated_rule' => 'Règle avec le titre ":title" mise à jour', 'default_rule_group_name' => 'Règles par défaut', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Lorsqu’une opération est mise à jour', 'rule_trigger_user_action' => 'L\'action de l’utilisateur est ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Le nom du compte source commence par..', 'rule_trigger_source_account_starts' => 'Le nom du compte source commence par ":trigger_value"', @@ -892,25 +896,31 @@ return [ 'rule_trigger_budget_is' => 'Le budget est ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Un tag est..', 'rule_trigger_tag_is' => 'Un tag est ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'La devise de l\'opération est..', 'rule_trigger_currency_is' => 'La devise de l\'opération est ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'La devise étrangère de l\'opération est..', 'rule_trigger_foreign_currency_is' => 'La devise étrangère de l\'opération est ":trigger_value"', 'rule_trigger_has_attachments_choice' => 'A au moins autant de pièces jointes', - 'rule_trigger_has_attachments' => 'A au moins :trigger_value pièce(s) jointe(s)', + 'rule_trigger_has_attachments' => "A au moins\u{a0}:trigger_value pièce(s) jointe(s)", 'rule_trigger_has_no_category_choice' => 'N\'a pas de catégorie', 'rule_trigger_has_no_category' => 'L\'opération n\'a pas de catégorie', 'rule_trigger_has_any_category_choice' => 'A une catégorie', 'rule_trigger_has_any_category' => 'L\'opération comporte une catégorie', 'rule_trigger_has_no_budget_choice' => 'N\'a pas de budget', 'rule_trigger_has_no_budget' => 'L\'opération n\'a pas de budget', - 'rule_trigger_has_any_budget_choice' => 'A un (des) budget', + 'rule_trigger_has_any_budget_choice' => 'A un budget', 'rule_trigger_has_any_budget' => 'L\'opération a un(des) budget(s)', 'rule_trigger_has_no_bill_choice' => 'N\'a pas de facture', 'rule_trigger_has_no_bill' => 'L\'opération n\'a pas de facture', 'rule_trigger_has_any_bill_choice' => 'A (au moins) une facture', 'rule_trigger_has_any_bill' => 'L\'opération transaction a (au moins) une facture', - 'rule_trigger_has_no_tag_choice' => 'N\'a pas de tag(s)', + 'rule_trigger_has_no_tag_choice' => 'N\'a pas de tag·s', 'rule_trigger_has_no_tag' => 'L\'opération n\'a pas de tag·s', 'rule_trigger_has_any_tag_choice' => 'Dispose d\'un ou de plusieurs tags', 'rule_trigger_has_any_tag' => 'L\'opération comporte un ou plusieurs tags', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'L\'opération n\'existe pas', 'rule_trigger_not_has_attachments' => 'L\'opération n\'a pas de pièce jointe', 'rule_trigger_not_has_any_category' => 'L\'opération n\'a pas de catégorie', - 'rule_trigger_not_has_any_budget' => 'L\'opération n\'a pas de catégorie', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'L\'opération n\'a pas de facture', 'rule_trigger_not_has_any_tag' => 'L\'opération n\'a pas de tag', 'rule_trigger_not_any_notes' => 'L\'opération n\'a pas de note', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Le compte de destination n\'est pas un compte en espèces', 'rule_trigger_not_account_is_cash' => 'Aucun compte n\'est un compte en espèces', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'SUPPRIMER l\'opération(!)', @@ -1248,7 +1257,7 @@ return [ 'rule_action_append_description_choice' => 'Suffixer la description avec..', 'rule_action_prepend_description_choice' => 'Préfixer la description avec..', 'rule_action_set_source_account_choice' => 'Définir le compte source à..', - 'rule_action_set_source_account' => 'Définir le compte source à :action_value', + 'rule_action_set_source_account' => "Définir le compte source à\u{a0}:action_value", 'rule_action_set_destination_account_choice' => 'Définir le compte de destination à..', 'rule_action_set_destination_account' => 'Définir le compte de destination à :action_value', 'rule_action_append_notes_choice' => 'Ajouter aux notes ..', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Ajouter les notes à la description', 'rule_action_move_descr_to_notes' => 'Remplacer les notes par la description', 'rule_action_move_notes_to_descr' => 'Remplacer la description par les notes', + 'rule_action_set_destination_to_cash_choice' => 'Définir le compte de destination à (espèces)', + 'rule_action_set_source_to_cash_choice' => 'Définir le compte source à (espèces)', 'rulegroup_for_bills_title' => 'Groupe de règles pour les factures', 'rulegroup_for_bills_description' => 'Un groupe de règles spécial pour toutes les règles impliquant des factures.', 'rule_for_bill_title' => 'Règle générée automatiquement pour la facture ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Règle pour la facture ":name"', 'new_rule_for_bill_description' => 'Cette règle marque les opérations pour la facture ":name".', - 'new_rule_for_journal_title' => 'Règle basée sur l\'opération ":description"', - 'new_rule_for_journal_description' => 'Cette règle est basée sur l\'opération ":description". Elle générera une correspondance sur les opérations strictement identiques.', + 'new_rule_for_journal_title' => 'Règle basée sur l\'opération ":description"', + 'new_rule_for_journal_description' => 'Cette règle est basée sur l\'opération ":description". Elle générera une correspondance sur les opérations strictement identiques.', // tags - 'store_new_tag' => 'Créer un nouveau tag', - 'update_tag' => 'Mettre à jour le tag', - 'no_location_set' => 'Aucun emplacement défini.', - 'meta_data' => 'Métadonnées', - 'location' => 'Emplacement', - 'without_date' => 'Sans date', - 'result' => 'Résultat', - 'sums_apply_to_range' => 'Toutes les sommes s\'appliquent à l\'ensemble sélectionné', - 'mapbox_api_key' => 'Pour utiliser la carte, obtenez une clé d\'API auprès de Mapbox. Ouvrez votre fichier .env et saisissez le code après MAPBOX_API_KEY=.', - 'press_object_location' => 'Faites un clic droit ou appuyez longuement pour définir l\'emplacement de l\'objet.', - 'clear_location' => 'Effacer la localisation', - 'delete_all_selected_tags' => 'Supprimer tous les tags sélectionnés', - 'select_tags_to_delete' => 'N\'oubliez pas de sélectionner des tags.', - 'deleted_x_tags' => ':count tag supprimé.|:count tags supprimés.', - 'create_rule_from_transaction' => 'Créer une règle basée sur une opération', - 'create_recurring_from_transaction' => 'Créer une opération récurrente sur base d\'une opération', - + 'store_new_tag' => 'Créer un nouveau tag', + 'update_tag' => 'Mettre à jour le tag', + 'no_location_set' => 'Aucun emplacement défini.', + 'meta_data' => 'Métadonnées', + 'location' => 'Emplacement', + 'location_first_split' => 'La localisation de cette opération peut être définie lors du premier fractionnement de cette opération.', + 'without_date' => 'Sans date', + 'result' => 'Résultat', + 'sums_apply_to_range' => 'Toutes les sommes s\'appliquent à l\'ensemble sélectionné', + 'mapbox_api_key' => 'Pour utiliser la carte, obtenez une clé d\'API auprès de Mapbox. Ouvrez votre fichier .env et saisissez le code après MAPBOX_API_KEY=.', + 'press_object_location' => 'Faites un clic droit ou appuyez longuement pour définir l\'emplacement de l\'objet.', + 'click_tap_location' => 'Cliquez ou appuyez sur la carte pour ajouter un emplacement', + 'clear_location' => 'Effacer la localisation', + 'delete_all_selected_tags' => 'Supprimer tous les tags sélectionnés', + 'select_tags_to_delete' => 'N\'oubliez pas de sélectionner des tags.', + 'deleted_x_tags' => ':count tag supprimé.|:count tags supprimés.', + 'create_rule_from_transaction' => 'Créer une règle basée sur une opération', + 'create_recurring_from_transaction' => 'Créer une opération récurrente sur base d\'une opération', // preferences - 'dark_mode_option_browser' => 'Laisser le navigateur décider', - 'dark_mode_option_light' => 'Toujours clair', - 'dark_mode_option_dark' => 'Toujours sombre', - 'equal_to_language' => '(égal à la langue)', - 'dark_mode_preference' => 'Mode sombre', - 'dark_mode_preference_help' => 'Dire à Firefly III quand utiliser le mode sombre.', - 'pref_home_screen_accounts' => 'Comptes de l’écran d’accueil', - 'pref_home_screen_accounts_help' => 'Quels sont les comptes à afficher sur la page d’accueil ?', - 'pref_view_range' => 'Intervalle d\'affichage', - 'pref_view_range_help' => 'Certains graphiques sont automatiquement regroupés par périodes. Vos budgets seront aussi organisés par périodes. Quelle période préférez-vous ?', - 'pref_1D' => 'Un jour', - 'pref_1W' => 'Une semaine', - 'pref_1M' => 'Un mois', - 'pref_3M' => 'Trois mois (trimestre)', - 'pref_6M' => 'Six mois', - 'pref_1Y' => 'Un an', - 'pref_last365' => 'L\'année dernière', - 'pref_last90' => 'Les 90 derniers jours', - 'pref_last30' => 'Les 30 derniers jours', - 'pref_last7' => 'Les 7 derniers jours', - 'pref_YTD' => 'Année en cours', - 'pref_QTD' => 'Ce trimestre', - 'pref_MTD' => 'Depuis le début du mois', - 'pref_languages' => 'Langues', - 'pref_locale' => 'Paramètres régionaux', - 'pref_languages_help' => 'Firefly III prend en charge plusieurs langues. Laquelle préférez-vous ?', - 'pref_locale_help' => 'Firefly III vous permet de définir d\'autres paramètres locaux, comme la façon dont les devises, les nombres et les dates sont formatées. Les entrées dans cette liste peuvent ne pas être prises en charge par votre système. Firefly III n\'est pas paramétré correctement pour toutes les langues ; contactez-moi pour les améliorer.', - 'pref_locale_no_demo' => 'Cette fonctionnalité ne fonctionnera pas pour l\'utilisateur de démonstration.', - 'pref_custom_fiscal_year' => 'Paramètres fiscaux de l\'année', - 'pref_custom_fiscal_year_label' => 'Activé', - 'pref_custom_fiscal_year_help' => 'Dans les pays qui utilisent une année financière autre que du 1er janvier au 31 décembre, vous pouvez la changer en spécifiant le jour de début et de fin de l\'année fiscale', - 'pref_fiscal_year_start_label' => 'Date du début de l\'année fiscale', - 'pref_two_factor_auth' => 'Validation en 2 étapes', - 'pref_two_factor_auth_help' => 'Lorsque vous activez la validation en 2 étapes (également connu sous le nom de deux facteurs d’authentification), vous ajoutez une couche de sécurité supplémentaire à votre compte. Vous vous connectez avec quelque chose que vous connaissez (votre mot de passe) et quelque chose que vous avez (un code de vérification). Les codes de vérification sont générés par une application sur votre téléphone, comme par exemple Authy ou Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Activez la validation en 2 étapes', - 'pref_two_factor_auth_disabled' => 'Le code de vérification en deux étapes a été enlevé et désactivé', - 'pref_two_factor_auth_remove_it' => 'N’oubliez pas de supprimer ce compte de votre application d’authentification !', - 'pref_two_factor_auth_code' => 'Vérifier le code', - 'pref_two_factor_auth_code_help' => 'Scanner le code QR avec une application sur votre téléphone comme Authy ou Google Authenticator et entrez le code généré.', - 'pref_two_factor_auth_reset_code' => 'Réinitialiser le code de vérification', - 'pref_two_factor_auth_disable_2fa' => 'Désactiver l\'authentification en deux étapes', - '2fa_use_secret_instead' => 'Si vous ne pouvez pas scanner le code QR, vous pouvez utiliser le code suivant à la place : :secret.', - '2fa_backup_codes' => 'Stockez ces codes de récupération pour vous connecter au cas où vous perdez votre appareil.', - '2fa_already_enabled' => 'La vérification à deux étapes est déjà activée.', - 'wrong_mfa_code' => 'Le code MFA n\'est pas valide.', - 'pref_save_settings' => 'Enregistrer les paramètres', - 'saved_preferences' => 'Préférences enregistrées !', - 'preferences_general' => 'Général', - 'preferences_frontpage' => 'Écran d\'accueil', - 'preferences_security' => 'Sécurité', - 'preferences_layout' => 'Mise en Page', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Afficher les dépôts sur l\'écran d\'accueil', - 'pref_home_show_deposits_info' => 'L\'écran d\'accueil affiche déjà vos comptes de dépenses. Devrait-il aussi afficher vos comptes de revenus ?', - 'pref_home_do_show_deposits' => 'Oui, montrez-les', - 'successful_count' => 'dont :count avec succès', - 'list_page_size_title' => 'Taille de la page', - 'list_page_size_help' => 'Les listes d\'éléments (comptes, opérations, etc) affichent un nombre maximum d\'élément par page.', - 'list_page_size_label' => 'Nombre d\'élément par page', - 'between_dates' => '(:start et :end)', - 'pref_optional_fields_transaction' => 'Champs optionnels pour les opérations', - 'pref_optional_fields_transaction_help' => 'Par défaut, tous les champs ne sont pas disponibles lors de la création d\'une nouvelle opération (pour éviter de surcharger la page). Vous pouvez activer les champs suivants si vous pensez qu\'ils peuvent vous être utiles. Bien sûr, tout champ désactivé mais précédemment rempli restera visible quel que soit son paramétrage.', - 'optional_tj_date_fields' => 'Champ date', - 'optional_tj_other_fields' => 'Autres champs', - 'optional_tj_attachment_fields' => 'Champs de pièces jointes', - 'pref_optional_tj_interest_date' => 'Date de valeur (intérêts)', - 'pref_optional_tj_book_date' => 'Date d\'enregistrement', - 'pref_optional_tj_process_date' => 'Date de traitement', - 'pref_optional_tj_due_date' => 'Échéance', - 'pref_optional_tj_payment_date' => 'Date de paiement', - 'pref_optional_tj_invoice_date' => 'Date de facturation', - 'pref_optional_tj_internal_reference' => 'Référence interne', - 'pref_optional_tj_notes' => 'Notes', - 'pref_optional_tj_attachments' => 'Pièces jointes', - 'pref_optional_tj_external_url' => 'URL externe', - 'pref_optional_tj_location' => 'Emplacement', - 'pref_optional_tj_links' => 'Liens d\'opération', - 'optional_field_meta_dates' => 'Dates', - 'optional_field_meta_business' => 'Commerce', - 'optional_field_attachments' => 'Pièces jointes', - 'optional_field_meta_data' => 'Métadonnées facultatives', - 'external_url' => 'URL externe', - 'pref_notification_bill_reminder' => 'Rappel à l\'expiration des factures', - 'pref_notification_new_access_token' => 'Alerte à la création d\'un nouveau jeton d\'accès API', - 'pref_notification_transaction_creation' => 'Alerte à la création automatique d\'une opération', - 'pref_notification_user_login' => 'Alerte à la connexion depuis un nouvel emplacement', - 'pref_notification_rule_action_failures' => 'Alerte lorsque les actions des règles ne s\'exécutent pas (Slack ou Discord uniquement)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Sélectionnez les notifications que vous souhaitez recevoir. Certaines notifications peuvent contenir des informations financières sensibles.', - 'slack_webhook_url' => 'Webhook URL de Slack', - 'slack_webhook_url_help' => 'Si vous voulez que Firefly III vous avertisse en utilisant Slack, entrez l\'URL du webhook ici. Sinon, laissez le champ vide. Si vous êtes un administrateur, vous devez également définir cette URL dans l\'administration.', - 'slack_url_label' => 'URL du webhook entrant de Slack', + 'dark_mode_option_browser' => 'Laisser le navigateur décider', + 'dark_mode_option_light' => 'Toujours clair', + 'dark_mode_option_dark' => 'Toujours sombre', + 'equal_to_language' => '(égal à la langue)', + 'dark_mode_preference' => 'Mode sombre', + 'dark_mode_preference_help' => 'Dire à Firefly III quand utiliser le mode sombre.', + 'pref_home_screen_accounts' => 'Comptes de l’écran d’accueil', + 'pref_home_screen_accounts_help' => 'Quels sont les comptes à afficher sur la page d’accueil ?', + 'pref_view_range' => 'Intervalle d\'affichage', + 'pref_view_range_help' => "Certains graphiques sont automatiquement regroupés par périodes. Vos budgets seront aussi organisés par périodes. Quelle période préférez-vous\u{a0}?", + 'pref_1D' => 'Un jour', + 'pref_1W' => 'Une semaine', + 'pref_1M' => 'Un mois', + 'pref_3M' => 'Trois mois (trimestre)', + 'pref_6M' => 'Six mois', + 'pref_1Y' => 'Un an', + 'pref_last365' => 'L\'année dernière', + 'pref_last90' => 'Les 90 derniers jours', + 'pref_last30' => 'Les 30 derniers jours', + 'pref_last7' => 'Les 7 derniers jours', + 'pref_YTD' => 'Année en cours', + 'pref_QTD' => 'Ce trimestre', + 'pref_MTD' => 'Depuis le début du mois', + 'pref_languages' => 'Langues', + 'pref_locale' => 'Paramètres régionaux', + 'pref_languages_help' => 'Firefly III prend en charge plusieurs langues. Laquelle préférez-vous ?', + 'pref_locale_help' => 'Firefly III vous permet de définir d\'autres paramètres locaux, comme la façon dont les devises, les nombres et les dates sont formatées. Les entrées dans cette liste peuvent ne pas être prises en charge par votre système. Firefly III n\'est pas paramétré correctement pour toutes les langues ; contactez-moi pour les améliorer.', + 'pref_locale_no_demo' => 'Cette fonctionnalité ne fonctionnera pas pour l\'utilisateur de démonstration.', + 'pref_custom_fiscal_year' => 'Paramètres fiscaux de l\'année', + 'pref_custom_fiscal_year_label' => 'Activé', + 'pref_custom_fiscal_year_help' => 'Dans les pays qui utilisent une année financière autre que du 1er janvier au 31 décembre, vous pouvez la changer en spécifiant le jour de début et de fin de l\'année fiscale', + 'pref_fiscal_year_start_label' => 'Date du début de l\'année fiscale', + 'pref_two_factor_auth' => 'Validation en 2 étapes', + 'pref_two_factor_auth_help' => 'Lorsque vous activez la validation en 2 étapes (également connu sous le nom de deux facteurs d’authentification), vous ajoutez une couche de sécurité supplémentaire à votre compte. Vous vous connectez avec quelque chose que vous connaissez (votre mot de passe) et quelque chose que vous avez (un code de vérification). Les codes de vérification sont générés par une application sur votre téléphone, comme par exemple Authy ou Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Activez la validation en 2 étapes', + 'pref_two_factor_auth_disabled' => 'Le code de vérification en deux étapes a été enlevé et désactivé', + 'pref_two_factor_auth_remove_it' => 'N’oubliez pas de supprimer ce compte de votre application d’authentification !', + 'pref_two_factor_auth_code' => 'Vérifier le code', + 'pref_two_factor_auth_code_help' => 'Scanner le code QR avec une application sur votre téléphone comme Authy ou Google Authenticator et entrez le code généré.', + 'pref_two_factor_auth_reset_code' => 'Réinitialiser le code de vérification', + 'pref_two_factor_auth_disable_2fa' => 'Désactiver l\'authentification en deux étapes', + '2fa_use_secret_instead' => "Si vous ne pouvez pas scanner le code QR, vous pouvez utiliser le code suivant à\u{a0}la place :\u{a0}:secret.", + '2fa_backup_codes' => 'Stockez ces codes de récupération pour vous connecter au cas où vous perdez votre appareil.', + '2fa_already_enabled' => 'La vérification à deux étapes est déjà activée.', + 'wrong_mfa_code' => 'Le code MFA n\'est pas valide.', + 'pref_save_settings' => 'Enregistrer les paramètres', + 'saved_preferences' => 'Préférences enregistrées !', + 'preferences_general' => 'Général', + 'preferences_frontpage' => 'Écran d\'accueil', + 'preferences_security' => 'Sécurité', + 'preferences_layout' => 'Mise en Page', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Afficher les dépôts sur l\'écran d\'accueil', + 'pref_home_show_deposits_info' => 'L\'écran d\'accueil affiche déjà vos comptes de dépenses. Devrait-il aussi afficher vos comptes de revenus ?', + 'pref_home_do_show_deposits' => 'Oui, montrez-les', + 'successful_count' => 'dont :count avec succès', + 'list_page_size_title' => 'Taille de la page', + 'list_page_size_help' => 'Les listes d\'éléments (comptes, opérations, etc) affichent un nombre maximum d\'élément par page.', + 'list_page_size_label' => 'Nombre d\'élément par page', + 'between_dates' => '(:start et :end)', + 'pref_optional_fields_transaction' => 'Champs optionnels pour les opérations', + 'pref_optional_fields_transaction_help' => 'Par défaut, tous les champs ne sont pas disponibles lors de la création d\'une nouvelle opération (pour éviter de surcharger la page). Vous pouvez activer les champs suivants si vous pensez qu\'ils peuvent vous être utiles. Bien sûr, tout champ désactivé mais précédemment rempli restera visible quel que soit son paramétrage.', + 'optional_tj_date_fields' => 'Champ date', + 'optional_tj_other_fields' => 'Autres champs', + 'optional_tj_attachment_fields' => 'Champs de pièces jointes', + 'pref_optional_tj_interest_date' => 'Date de valeur (intérêts)', + 'pref_optional_tj_book_date' => 'Date d\'enregistrement', + 'pref_optional_tj_process_date' => 'Date de traitement', + 'pref_optional_tj_due_date' => 'Échéance', + 'pref_optional_tj_payment_date' => 'Date de paiement', + 'pref_optional_tj_invoice_date' => 'Date de facturation', + 'pref_optional_tj_internal_reference' => 'Référence interne', + 'pref_optional_tj_notes' => 'Notes', + 'pref_optional_tj_attachments' => 'Pièces jointes', + 'pref_optional_tj_external_url' => 'URL externe', + 'pref_optional_tj_location' => 'Emplacement', + 'pref_optional_tj_links' => 'Liens d\'opération', + 'optional_field_meta_dates' => 'Dates', + 'optional_field_meta_business' => 'Commerce', + 'optional_field_attachments' => 'Pièces jointes', + 'optional_field_meta_data' => 'Métadonnées facultatives', + 'external_url' => 'URL externe', + 'pref_notification_bill_reminder' => 'Rappel à l\'expiration des factures', + 'pref_notification_new_access_token' => 'Alerte à la création d\'un nouveau jeton d\'accès API', + 'pref_notification_transaction_creation' => 'Alerte à la création automatique d\'une opération', + 'pref_notification_user_login' => 'Alerte à la connexion depuis un nouvel emplacement', + 'pref_notification_rule_action_failures' => 'Alerte lorsque les actions des règles ne s\'exécutent pas (Slack ou Discord uniquement)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Sélectionnez les notifications que vous souhaitez recevoir. Certaines notifications peuvent contenir des informations financières sensibles.', + 'slack_webhook_url' => 'Webhook URL de Slack', + 'slack_webhook_url_help' => 'Si vous voulez que Firefly III vous avertisse en utilisant Slack, entrez l\'URL du webhook ici. Sinon, laissez le champ vide. Si vous êtes un administrateur, vous devez également définir cette URL dans l\'administration.', + 'slack_url_label' => 'URL du webhook entrant de Slack', // Financial administrations - 'administration_index' => 'Administration financière', - 'administrations_index_menu' => 'Administration(s) financière(s)', + 'administration_index' => 'Administration financière', + 'administrations_index_menu' => 'Administration(s) financière(s)', // profile: - 'purge_data_title' => 'Purger des données de Firefly III', - 'purge_data_expl' => '« Purger » signifie « supprimer ce qui est déjà supprimé ». En temps normal, Firefly III ne supprime rien définitivement. Il ne fait que le cacher. Le bouton ci-dessous supprime tous ces enregistrements précédemment "supprimés".', - 'delete_stuff_header' => 'Supprimer et purger les données', - 'purge_all_data' => 'Purger tous les enregistrements supprimés', - 'purge_data' => 'Purger les données', - 'purged_all_records' => 'Tous les enregistrements supprimés ont été purgés.', - 'delete_data_title' => 'Supprimer des données de Firefly III', - 'permanent_delete_stuff' => 'Vous pouvez supprimer des éléments de Firefly III. En utilisant les boutons ci-dessous, vos éléments seront cachés. Il n\'y a pas de bouton d\'annulation pour cela, mais les éléments peuvent rester dans la base de données où vous pouvez les restaurer si nécessaire.', - 'other_sessions_logged_out' => 'Toutes vos autres sessions ont été déconnectées.', - 'delete_unused_accounts' => 'La suppression des comptes inutilisés effacera vos listes de remplissage automatique.', - 'delete_all_unused_accounts' => 'Supprimer les comptes inutilisés', - 'deleted_all_unused_accounts' => 'Tous les comptes inutilisés sont supprimés', - 'delete_all_budgets' => 'Supprimer TOUS vos budgets', - 'delete_all_categories' => 'Supprimer TOUTES vos catégories', - 'delete_all_tags' => 'Supprimer TOUS vos tags', - 'delete_all_bills' => 'Supprimer TOUTES vos factures', - 'delete_all_piggy_banks' => 'Supprimer TOUTES vos tirelires', - 'delete_all_rules' => 'Supprimer TOUTES vos règles', - 'delete_all_recurring' => 'Supprimer TOUTES vos opérations récurrentes', - 'delete_all_object_groups' => 'Supprimer TOUS vos groupes d\'objets', - 'delete_all_accounts' => 'Supprimer TOUS vos comptes', - 'delete_all_asset_accounts' => 'Supprimer TOUS vos comptes d\'actifs', - 'delete_all_expense_accounts' => 'Supprimer TOUS vos comptes de dépenses', - 'delete_all_revenue_accounts' => 'Supprimer TOUS vos comptes de revenus', - 'delete_all_liabilities' => 'Supprimer TOUS vos passifs', - 'delete_all_transactions' => 'Supprimer TOUTES vos opérations', - 'delete_all_withdrawals' => 'Supprimer TOUTES vos dépenses', - 'delete_all_deposits' => 'Supprimer TOUS vos dépôts', - 'delete_all_transfers' => 'Supprimer TOUS vos transferts', - 'also_delete_transactions' => 'La suppression des comptes supprimera également TOU(TE)S les dépenses, dépôts et transferts associé(e)s !', - 'deleted_all_budgets' => 'Tous les budgets ont été supprimés', - 'deleted_all_categories' => 'Toutes les catégories ont été supprimées', - 'deleted_all_tags' => 'Tous les étiquettes ont été supprimés', - 'deleted_all_bills' => 'Toutes les factures ont été supprimées', - 'deleted_all_piggy_banks' => 'Toutes les tirelires ont été supprimées', - 'deleted_all_rules' => 'Toutes les règles et les groupes de règles ont été supprimés', - 'deleted_all_object_groups' => 'Tous les groupes ont été supprimés', - 'deleted_all_accounts' => 'Tous les comptes ont été supprimés', - 'deleted_all_asset_accounts' => 'Tous les comptes d\'actifs ont été supprimés', - 'deleted_all_expense_accounts' => 'Tous les comptes de dépenses ont été supprimés', - 'deleted_all_revenue_accounts' => 'Tous les comptes de revenus ont été supprimés', - 'deleted_all_liabilities' => 'Tous les passifs ont été supprimés', - 'deleted_all_transactions' => 'Toutes les opérations ont été supprimées', - 'deleted_all_withdrawals' => 'Toutes les dépenses ont été supprimés', - 'deleted_all_deposits' => 'Tous les dépôts ont été supprimés', - 'deleted_all_transfers' => 'Tous les transferts ont été supprimés', - 'deleted_all_recurring' => 'Toutes les opérations récurrentes ont été supprimées', - 'change_your_password' => 'Modifier votre mot de passe', - 'delete_account' => 'Supprimer le compte', - 'current_password' => 'Mot de passe actuel', - 'new_password' => 'Nouveau mot de passe ', - 'new_password_again' => 'Nouveau mot de passe (confirmation)', - 'delete_your_account' => 'Supprimer votre compte', - 'delete_your_account_help' => 'La suppression de votre compte supprimera également les comptes, les opérations, tout ce que vous pourriez avoir enregistré dans Firefly III. Tout sera SUPPRIMÉ.', - 'delete_your_account_password' => 'Entrez votre mot de passe pour continuer.', - 'password' => 'Mot de passe', - 'are_you_sure' => 'Êtes-vous sûr ? Vous ne pourrez pas annuler cette action.', - 'delete_account_button' => 'SUPPRIMER votre compte', - 'invalid_current_password' => 'Mot de passe actuel non valide !', - 'password_changed' => 'Mot de passe modifié !', - 'should_change' => 'L’idée est de changer votre mot de passe.', - 'invalid_password' => 'Mot de passe incorrect !', - 'what_is_pw_security' => 'Qu\'est-ce que "vérifier la sécurité du mot de passe" ?', - 'secure_pw_title' => 'Comment choisir un mot de passe sécurisé', - 'forgot_password_response' => 'Merci. Si un compte existe avec cette adresse e-mail, vous trouverez des instructions dans votre boîte de réception.', - 'secure_pw_history' => 'Pas une semaine ne se passe sans que vous lisiez dans la presse qu\'un site s\'est fait dérober les mots de passe de ses utilisateurs. Les pirates et les voleurs utilisent ces mots de passe pour tenter de voler vos informations personnelles. Cette information est précieuse.', - 'secure_pw_ff' => 'Vous utilisez le même mot de passe partout sur Internet ? Si un seul site se fait dérober ce mot de passe, c\'est l\'ensemble de vos comptes et données qui sont exposées aux pirates. Firefly III compte sur vous pour choisir un mot de passe unique et fort pour protéger vos informations financières.', - 'secure_pw_check_box' => 'Pour vous y aider Firefly III peut vérifier que le mot de passe que vous souhaitez utiliser n\'a jamais été dérobé auparavant. Si c\'est le cas, Firefly III vous conseille de NE PAS utiliser ce mot de passe.', - 'secure_pw_working_title' => 'Comment est-ce que cela fonctionne ?', - 'secure_pw_working' => 'Si vous cochez l\'option, Firefly III enverra les 5 premiers caractères de l\'empreinte SHA1 de votre mot de passe au site Web de Troy Hunt pour contrôler si elle y apparait. Cela vous empêchera d\'utiliser des mots de passe non sûrs tel que recommandé par la dernière publication spéciale NIST sur le sujet.', - 'secure_pw_should' => 'Dois-je cocher la case ?', - 'secure_pw_long_password' => 'Oui. Toujours vérifier que votre mot de passe est sûr.', - 'command_line_token' => 'Jeton de ligne de commande', - 'explain_command_line_token' => 'Vous avez besoin de ce jeton pour exécuter des lignes de commande telles qu\'exporter des données. Sans celui-ci, une telle commande ne fonctionnera pas. Ne partagez jamais votre jeton. Personne ne vous le demandera, pas même moi. Si vous craignez de le perdre, ou si vous êtes parano, régénérez ce jeton à l\'aide du bouton.', - 'regenerate_command_line_token' => 'Régénérer le jeton de ligne de commande', - 'token_regenerated' => 'Un nouveau jeton en ligne de commande a été généré', - 'change_your_email' => 'Changer votre adresse e-mail', - 'email_verification' => 'Un e-mail sera envoyé à votre ancienne ET votre nouvelle adresse. Pour des raisons de sécurité, vous ne pourrez pas vous connecter jusqu\'à ce que vous ayez vérifié votre nouvelle adresse. Si vous n\'êtes pas certain que votre installation de Firefly III soit capable d\'envoyer un e-mail, n\'utilisez pas cette fonctionnalité. Si vous êtes un administrateur, vous pouvez tester l\'envoi des e-mails en allant dans le menu Administration.', - 'email_changed_logout' => 'Vous ne pouvez pas vous connecter tant que vous n\'aurez pas vérifié votre adresse e-mail.', - 'login_with_new_email' => 'Vous pouvez désormais vous connecter avec votre nouvelle adresse e-mail.', - 'login_with_old_email' => 'Vous pouvez à nouveau vous connecter à l\'aide de votre ancienne adresse e-mail.', - 'login_provider_local_only' => 'Cette action n’est pas disponible lors de l’authentification par ":login_provider".', - 'external_user_mgt_disabled' => 'Cette action n\'est pas disponible lorsque Firefly III n\'est pas responsable de la gestion des utilisateurs ou de l\'authentification.', - 'external_auth_disabled' => 'Cette action n\'est pas disponible lorsque Firefly III n\'est pas responsable de la gestion de l\'authentification.', - 'delete_local_info_only' => "Comme Firefly III n'est pas responsable de la gestion des utilisateurs ou de l'authentification, cette fonction ne supprimera que les informations locales de Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Clients OAuth', - 'profile_oauth_no_clients' => 'Vous n’avez pas encore créé de client OAuth.', - 'profile_oauth_clients_external_auth' => 'Si vous utilisez un fournisseur d\'authentification externe comme Authelia, les clients OAuth ne fonctionneront pas. Vous ne pouvez utiliser que des jetons d\'accès personnel.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Identifiant', - 'profile_oauth_client_name' => 'Nom', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Créer un nouveau client', - 'profile_oauth_create_client' => 'Créer un client', - 'profile_oauth_edit_client' => 'Modifier le client', - 'profile_oauth_name_help' => 'Quelque chose que vos utilisateurs reconnaîtront et qui inspirera confiance.', - 'profile_oauth_redirect_url' => 'URL de redirection', - 'profile_oauth_redirect_url_help' => 'URL de callback de votre application.', - 'profile_authorized_apps' => 'Applications autorisées', - 'profile_authorized_clients' => 'Clients autorisés', - 'profile_scopes' => 'Permissions', - 'profile_revoke' => 'Révoquer', - 'profile_oauth_client_secret_title' => 'Secret du client', - 'profile_oauth_client_secret_expl' => 'Voici votre nouveau secret de client. C\'est la seule fois qu\'il sera affiché, donc ne le perdez pas ! Vous pouvez maintenant utiliser ce secret pour faire des requêtes d\'API.', - 'profile_personal_access_tokens' => 'Jetons d\'accès personnels', - 'profile_personal_access_token' => 'Jeton d\'accès personnel', - 'profile_oauth_confidential' => 'Confidentiel', - 'profile_oauth_confidential_help' => 'Exiger que le client s\'authentifie avec un secret. Les clients confidentiels peuvent détenir des informations d\'identification de manière sécurisée sans les exposer à des tiers non autorisés. Les applications publiques, telles que les applications de bureau natif ou les SPA JavaScript, ne peuvent pas tenir des secrets en toute sécurité.', - 'profile_personal_access_token_explanation' => 'Voici votre nouveau jeton d’accès personnel. Ceci est la seule fois où vous pourrez le voir, ne le perdez pas ! Vous pouvez dès à présent utiliser ce jeton pour lancer des requêtes avec l’API.', - 'profile_no_personal_access_token' => 'Vous n’avez pas encore créé de jeton d’accès personnel.', - 'profile_create_new_token' => 'Créer un nouveau jeton', - 'profile_create_token' => 'Créer un jeton', - 'profile_create' => 'Créer', - 'profile_save_changes' => 'Enregistrer les modifications', - 'profile_whoops' => 'Oups !', - 'profile_something_wrong' => 'Une erreur s\'est produite !', - 'profile_try_again' => 'Une erreur s’est produite. Merci d’essayer à nouveau.', - 'amounts' => 'Montants', - 'multi_account_warning_unknown' => 'Selon le type d\'opération que vous créez, le(s) compte(s) source et/ou de destination des ventilations suivantes peuvent être remplacés par celui de la première ventilation de l\'opération.', - 'multi_account_warning_withdrawal' => 'Gardez en tête que le compte source des ventilations suivantes peut être remplacé par celui de la première ventilation de la dépense.', - 'multi_account_warning_deposit' => 'Gardez en tête que le compte de destination des ventilations suivantes peut être remplacé par celui de la première ventilation du dépôt.', - 'multi_account_warning_transfer' => 'Gardez en tête que les comptes source et de destination des ventilations suivantes peuvent être remplacés par ceux de la première ventilation du transfert.', + 'purge_data_title' => 'Purger des données de Firefly III', + 'purge_data_expl' => '« Purger » signifie « supprimer ce qui est déjà supprimé ». En temps normal, Firefly III ne supprime rien définitivement. Il ne fait que le cacher. Le bouton ci-dessous supprime tous ces enregistrements précédemment "supprimés".', + 'delete_stuff_header' => 'Supprimer et purger les données', + 'purge_all_data' => 'Purger tous les enregistrements supprimés', + 'purge_data' => 'Purger les données', + 'purged_all_records' => 'Tous les enregistrements supprimés ont été purgés.', + 'delete_data_title' => 'Supprimer des données de Firefly III', + 'permanent_delete_stuff' => 'Vous pouvez supprimer des éléments de Firefly III. En utilisant les boutons ci-dessous, vos éléments seront cachés. Il n\'y a pas de bouton d\'annulation pour cela, mais les éléments peuvent rester dans la base de données où vous pouvez les restaurer si nécessaire.', + 'other_sessions_logged_out' => 'Toutes vos autres sessions ont été déconnectées.', + 'delete_unused_accounts' => 'La suppression des comptes inutilisés effacera vos listes de remplissage automatique.', + 'delete_all_unused_accounts' => 'Supprimer les comptes inutilisés', + 'deleted_all_unused_accounts' => 'Tous les comptes inutilisés sont supprimés', + 'delete_all_budgets' => 'Supprimer TOUS vos budgets', + 'delete_all_categories' => 'Supprimer TOUTES vos catégories', + 'delete_all_tags' => 'Supprimer TOUS vos tags', + 'delete_all_bills' => 'Supprimer TOUTES vos factures', + 'delete_all_piggy_banks' => 'Supprimer TOUTES vos tirelires', + 'delete_all_rules' => 'Supprimer TOUTES vos règles', + 'delete_all_recurring' => 'Supprimer TOUTES vos opérations récurrentes', + 'delete_all_object_groups' => 'Supprimer TOUS vos groupes d\'objets', + 'delete_all_accounts' => 'Supprimer TOUS vos comptes', + 'delete_all_asset_accounts' => 'Supprimer TOUS vos comptes d\'actifs', + 'delete_all_expense_accounts' => 'Supprimer TOUS vos comptes de dépenses', + 'delete_all_revenue_accounts' => 'Supprimer TOUS vos comptes de revenus', + 'delete_all_liabilities' => 'Supprimer TOUS vos passifs', + 'delete_all_transactions' => 'Supprimer TOUTES vos opérations', + 'delete_all_withdrawals' => 'Supprimer TOUTES vos dépenses', + 'delete_all_deposits' => 'Supprimer TOUS vos dépôts', + 'delete_all_transfers' => 'Supprimer TOUS vos transferts', + 'also_delete_transactions' => 'La suppression des comptes supprimera également TOU(TE)S les dépenses, dépôts et transferts associé(e)s !', + 'deleted_all_budgets' => 'Tous les budgets ont été supprimés', + 'deleted_all_categories' => 'Toutes les catégories ont été supprimées', + 'deleted_all_tags' => 'Tous les étiquettes ont été supprimés', + 'deleted_all_bills' => 'Toutes les factures ont été supprimées', + 'deleted_all_piggy_banks' => 'Toutes les tirelires ont été supprimées', + 'deleted_all_rules' => 'Toutes les règles et les groupes de règles ont été supprimés', + 'deleted_all_object_groups' => 'Tous les groupes ont été supprimés', + 'deleted_all_accounts' => 'Tous les comptes ont été supprimés', + 'deleted_all_asset_accounts' => 'Tous les comptes d\'actifs ont été supprimés', + 'deleted_all_expense_accounts' => 'Tous les comptes de dépenses ont été supprimés', + 'deleted_all_revenue_accounts' => 'Tous les comptes de revenus ont été supprimés', + 'deleted_all_liabilities' => 'Tous les passifs ont été supprimés', + 'deleted_all_transactions' => 'Toutes les opérations ont été supprimées', + 'deleted_all_withdrawals' => 'Toutes les dépenses ont été supprimés', + 'deleted_all_deposits' => 'Tous les dépôts ont été supprimés', + 'deleted_all_transfers' => 'Tous les transferts ont été supprimés', + 'deleted_all_recurring' => 'Toutes les opérations récurrentes ont été supprimées', + 'change_your_password' => 'Modifier votre mot de passe', + 'delete_account' => 'Supprimer le compte', + 'current_password' => 'Mot de passe actuel', + 'new_password' => "Nouveau mot de passe\u{a0}", + 'new_password_again' => "Nouveau mot de passe\u{a0}(confirmation)", + 'delete_your_account' => 'Supprimer votre compte', + 'delete_your_account_help' => 'La suppression de votre compte supprimera également les comptes, les opérations, tout ce que vous pourriez avoir enregistré dans Firefly III. Tout sera SUPPRIMÉ.', + 'delete_your_account_password' => 'Entrez votre mot de passe pour continuer.', + 'password' => 'Mot de passe', + 'are_you_sure' => 'Êtes-vous sûr ? Vous ne pourrez pas annuler cette action.', + 'delete_account_button' => 'SUPPRIMER votre compte', + 'invalid_current_password' => 'Mot de passe actuel non valide !', + 'password_changed' => 'Mot de passe modifié !', + 'should_change' => 'L’idée est de changer votre mot de passe.', + 'invalid_password' => 'Mot de passe incorrect !', + 'what_is_pw_security' => 'Qu\'est-ce que "vérifier la sécurité du mot de passe" ?', + 'secure_pw_title' => 'Comment choisir un mot de passe sécurisé', + 'forgot_password_response' => 'Merci. Si un compte existe avec cette adresse e-mail, vous trouverez des instructions dans votre boîte de réception.', + 'secure_pw_history' => 'Pas une semaine ne se passe sans que vous lisiez dans la presse qu\'un site s\'est fait dérober les mots de passe de ses utilisateurs. Les pirates et les voleurs utilisent ces mots de passe pour tenter de voler vos informations personnelles. Cette information est précieuse.', + 'secure_pw_ff' => 'Vous utilisez le même mot de passe partout sur Internet ? Si un seul site se fait dérober ce mot de passe, c\'est l\'ensemble de vos comptes et données qui sont exposées aux pirates. Firefly III compte sur vous pour choisir un mot de passe unique et fort pour protéger vos informations financières.', + 'secure_pw_check_box' => 'Pour vous y aider Firefly III peut vérifier que le mot de passe que vous souhaitez utiliser n\'a jamais été dérobé auparavant. Si c\'est le cas, Firefly III vous conseille de NE PAS utiliser ce mot de passe.', + 'secure_pw_working_title' => "Comment est-ce que cela fonctionne\u{a0}?", + 'secure_pw_working' => 'Si vous cochez l\'option, Firefly III enverra les 5 premiers caractères de l\'empreinte SHA1 de votre mot de passe au site Web de Troy Hunt pour contrôler si elle y apparait. Cela vous empêchera d\'utiliser des mots de passe non sûrs tel que recommandé par la dernière publication spéciale NIST sur le sujet.', + 'secure_pw_should' => 'Dois-je cocher la case ?', + 'secure_pw_long_password' => 'Oui. Toujours vérifier que votre mot de passe est sûr.', + 'command_line_token' => 'Jeton de ligne de commande', + 'explain_command_line_token' => 'Vous avez besoin de ce jeton pour exécuter des lignes de commande telles qu\'exporter des données. Sans celui-ci, une telle commande ne fonctionnera pas. Ne partagez jamais votre jeton. Personne ne vous le demandera, pas même moi. Si vous craignez de le perdre, ou si vous êtes parano, régénérez ce jeton à l\'aide du bouton.', + 'regenerate_command_line_token' => 'Régénérer le jeton de ligne de commande', + 'token_regenerated' => 'Un nouveau jeton en ligne de commande a été généré', + 'change_your_email' => 'Changer votre adresse e-mail', + 'email_verification' => 'Un e-mail sera envoyé à votre ancienne ET votre nouvelle adresse. Pour des raisons de sécurité, vous ne pourrez pas vous connecter jusqu\'à ce que vous ayez vérifié votre nouvelle adresse. Si vous n\'êtes pas certain que votre installation de Firefly III soit capable d\'envoyer un e-mail, n\'utilisez pas cette fonctionnalité. Si vous êtes un administrateur, vous pouvez tester l\'envoi des e-mails en allant dans le menu Administration.', + 'email_changed_logout' => 'Vous ne pouvez pas vous connecter tant que vous n\'aurez pas vérifié votre adresse e-mail.', + 'login_with_new_email' => 'Vous pouvez désormais vous connecter avec votre nouvelle adresse e-mail.', + 'login_with_old_email' => 'Vous pouvez à nouveau vous connecter à l\'aide de votre ancienne adresse e-mail.', + 'login_provider_local_only' => 'Cette action n’est pas disponible lors de l’authentification par ":login_provider".', + 'external_user_mgt_disabled' => 'Cette action n\'est pas disponible lorsque Firefly III n\'est pas responsable de la gestion des utilisateurs ou de l\'authentification.', + 'external_auth_disabled' => 'Cette action n\'est pas disponible lorsque Firefly III n\'est pas responsable de la gestion de l\'authentification.', + 'delete_local_info_only' => "Comme Firefly III n'est pas responsable de la gestion des utilisateurs ou de l'authentification, cette fonction ne supprimera que les informations locales de Firefly III.", + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Clients OAuth', + 'profile_oauth_no_clients' => 'Vous n’avez pas encore créé de client OAuth.', + 'profile_oauth_clients_external_auth' => 'Si vous utilisez un fournisseur d\'authentification externe comme Authelia, les clients OAuth ne fonctionneront pas. Vous ne pouvez utiliser que des jetons d\'accès personnel.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'Identifiant', + 'profile_oauth_client_name' => 'Nom', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Créer un nouveau client', + 'profile_oauth_create_client' => 'Créer un client', + 'profile_oauth_edit_client' => 'Modifier le client', + 'profile_oauth_name_help' => 'Quelque chose que vos utilisateurs reconnaîtront et qui inspirera confiance.', + 'profile_oauth_redirect_url' => 'URL de redirection', + 'profile_oauth_redirect_url_help' => 'URL de callback de votre application.', + 'profile_authorized_apps' => 'Applications autorisées', + 'profile_authorized_clients' => 'Clients autorisés', + 'profile_scopes' => 'Permissions', + 'profile_revoke' => 'Révoquer', + 'profile_oauth_client_secret_title' => 'Secret du client', + 'profile_oauth_client_secret_expl' => 'Voici votre nouveau secret de client. C\'est la seule fois qu\'il sera affiché, donc ne le perdez pas ! Vous pouvez maintenant utiliser ce secret pour faire des requêtes d\'API.', + 'profile_personal_access_tokens' => 'Jetons d\'accès personnels', + 'profile_personal_access_token' => 'Jeton d\'accès personnel', + 'profile_oauth_confidential' => 'Confidentiel', + 'profile_oauth_confidential_help' => 'Exiger que le client s\'authentifie avec un secret. Les clients confidentiels peuvent détenir des informations d\'identification de manière sécurisée sans les exposer à des tiers non autorisés. Les applications publiques, telles que les applications de bureau natif ou les SPA JavaScript, ne peuvent pas tenir des secrets en toute sécurité.', + 'profile_personal_access_token_explanation' => 'Voici votre nouveau jeton d’accès personnel. Ceci est la seule fois où vous pourrez le voir, ne le perdez pas ! Vous pouvez dès à présent utiliser ce jeton pour lancer des requêtes avec l’API.', + 'profile_no_personal_access_token' => 'Vous n’avez pas encore créé de jeton d’accès personnel.', + 'profile_create_new_token' => 'Créer un nouveau jeton', + 'profile_create_token' => 'Créer un jeton', + 'profile_create' => 'Créer', + 'profile_save_changes' => 'Enregistrer les modifications', + 'profile_whoops' => 'Oups !', + 'profile_something_wrong' => 'Une erreur s\'est produite !', + 'profile_try_again' => 'Une erreur s’est produite. Merci d’essayer à nouveau.', + 'amounts' => 'Montants', + 'multi_account_warning_unknown' => 'Selon le type d\'opération que vous créez, le(s) compte(s) source et/ou de destination des séparations suivantes peuvent être remplacés par celui de la première séparation de l\'opération.', + 'multi_account_warning_withdrawal' => 'Gardez en tête que le compte source des séparations suivantes peut être remplacé par celui de la première séparation de la dépense.', + 'multi_account_warning_deposit' => 'Gardez en tête que le compte de destination des séparations suivantes peut être remplacé par celui de la première séparation du dépôt.', + 'multi_account_warning_transfer' => 'Gardez en tête que les comptes source et de destination des séparations suivantes peuvent être remplacés par ceux de la première séparation du transfert.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Exporter des données depuis Firefly III', - 'export_data_menu' => 'Exporter des données', - 'export_data_bc' => 'Exporter des données depuis Firefly III', - 'export_data_main_title' => 'Exporter des données depuis Firefly III', - 'export_data_expl' => 'Ce lien vous permet d\'exporter toutes les opérations et métadonnées de Firefly III. Plus d\'informations dans l\'aide (icône (?) en haut à droite).', - 'export_data_all_transactions' => 'Exporter toutes les opérations', - 'export_data_advanced_expl' => 'Si vous avez besoin d\'un type d\'exportation plus avancé ou plus spécifique, lisez l\'aide sur comment utiliser la commande php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Exporter des données depuis Firefly III', + 'export_data_menu' => 'Exporter des données', + 'export_data_bc' => 'Exporter des données depuis Firefly III', + 'export_data_main_title' => 'Exporter des données depuis Firefly III', + 'export_data_expl' => 'Ce lien vous permet d\'exporter toutes les opérations et métadonnées de Firefly III. Plus d\'informations dans l\'aide (icône (?) en haut à droite).', + 'export_data_all_transactions' => 'Exporter toutes les opérations', + 'export_data_advanced_expl' => 'Si vous avez besoin d\'un type d\'exportation plus avancé ou plus spécifique, lisez l\'aide sur comment utiliser la commande php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Une pièce jointe|:count pièces jointes', - 'attachments' => 'Pièces jointes', - 'edit_attachment' => 'Modifier la pièce jointe ":name"', - 'update_attachment' => 'Mettre à jour la pièce jointe', - 'delete_attachment' => 'Supprimer la pièce jointe ":name"', - 'attachment_deleted' => 'Pièce jointe ":name" supprimée', - 'liabilities_deleted' => 'Passif ":name" supprimé', - 'attachment_updated' => 'Pièce jointe ":name" mise à jour', - 'upload_max_file_size' => 'Taille maximum du fichier : :size', - 'list_all_attachments' => 'Liste de toutes les pièces jointes', + 'nr_of_attachments' => 'Une pièce jointe|:count pièces jointes', + 'attachments' => 'Pièces jointes', + 'edit_attachment' => 'Modifier la pièce jointe ":name"', + 'update_attachment' => 'Mettre à jour la pièce jointe', + 'delete_attachment' => 'Supprimer la pièce jointe ":name"', + 'attachment_deleted' => 'Pièce jointe ":name" supprimée', + 'liabilities_deleted' => 'Passif ":name" supprimé', + 'attachment_updated' => 'Pièce jointe ":name" mise à jour', + 'upload_max_file_size' => 'Taille maximum du fichier : :size', + 'list_all_attachments' => 'Liste de toutes les pièces jointes', // transaction index - 'title_expenses' => 'Dépenses', - 'title_withdrawal' => 'Dépenses', - 'title_revenue' => 'Recette / revenu', - 'title_deposit' => 'Recette / revenu', - 'title_transfer' => 'Transferts', - 'title_transfers' => 'Transferts', - 'submission_options' => 'Options de soumission', - 'apply_rules_checkbox' => 'Appliquer les règles', - 'fire_webhooks_checkbox' => 'Lancer les webhooks', + 'is_reconciled_fields_dropped' => 'Comme cette opération est rapprochée, vous ne pourrez pas modifier les comptes, ni le(s) montant(s).', + 'title_expenses' => 'Dépenses', + 'title_withdrawal' => 'Dépenses', + 'title_revenue' => 'Recette / revenu', + 'title_deposit' => 'Recette / revenu', + 'title_transfer' => 'Transferts', + 'title_transfers' => 'Transferts', + 'submission_options' => 'Options de soumission', + 'apply_rules_checkbox' => 'Appliquer les règles', + 'fire_webhooks_checkbox' => 'Lancer les webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Cette opération est déjà une dépense', - 'convert_is_already_type_Deposit' => 'Cette opération est déjà un dépôt', - 'convert_is_already_type_Transfer' => 'Cette opération est déjà un transfert', - 'convert_to_Withdrawal' => 'Convertir ":description" en dépense', - 'convert_to_Deposit' => 'Convertir ":description" en dépôt', - 'convert_to_Transfer' => 'Convertir ":description" en transfert', - 'convert_options_WithdrawalDeposit' => 'Convertir un retrait en dépôt', - 'convert_options_WithdrawalTransfer' => 'Convertir une dépense en transfert', - 'convert_options_DepositTransfer' => 'Convertir un dépôt en transfert', - 'convert_options_DepositWithdrawal' => 'Convertir un dépôt en dépense', - 'convert_options_TransferWithdrawal' => 'Convertir un transfert en dépense', - 'convert_options_TransferDeposit' => 'Convertir un transfert en dépôt', - 'convert_Withdrawal_to_deposit' => 'Convertir cette dépense en dépôt', - 'convert_Withdrawal_to_transfer' => 'Convertir cette dépense en transfert', - 'convert_Deposit_to_withdrawal' => 'Convertir ce dépôt en dépense', - 'convert_Deposit_to_transfer' => 'Convertir ce dépôt en transfert', - 'convert_Transfer_to_deposit' => 'Convertir ce transfert en dépôt', - 'convert_Transfer_to_withdrawal' => 'Convertir ce transfert en dépense', - 'convert_please_set_revenue_source' => 'Veuillez choisir le compte de recettes d\'où proviendra l’argent.', - 'convert_please_set_asset_destination' => 'Veuillez choisir le compte d\'actifs sur lequel l\'argent sera versé.', - 'convert_please_set_expense_destination' => 'Veuillez choisir le compte de dépenses sur lequel l\'argent sera versé.', - 'convert_please_set_asset_source' => 'Veuillez choisir le compte d’actifs d\'où proviendra l’argent.', - 'convert_expl_w_d' => 'Lors de la conversion d\'une dépense en dépôt, l\'argent sera déposé dans le compte de destination affiché, au lieu d\'en être retiré.|Lors de la conversion d\'une dépense en dépôt, l\'argent sera déposé dans les comptes de destination affichés, au lieu de leur être retiré.', - 'convert_expl_w_t' => 'Lors de la conversion d\'une dépense en transfert, l\'argent sera transféré du compte source vers un autre compte d\'actif ou de passif au lieu d\'être dépensé sur le comptes de dépenses originaux.|Lors de la conversion d\'une dépense en transfert, l\'argent sera transféré des comptes source vers d\'autres comptes d\'actif ou de passif au lieu d\'être dépensé sur les comptes de dépenses originaux.', - 'convert_expl_d_w' => 'Lors de la conversion d\'un dépôt en dépense, l\'argent sera retiré du compte source affiché, au lieu d\'y être déposé.|Lors de la conversion d\'un dépôt en dépense, l\'argent sera retiré des comptes source affichés, au lieu d\'y être déposé.', - 'convert_expl_d_t' => 'Lorsque vous convertissez un dépôt en transfert, l\'argent sera déposé dans le compte de destination affiché à partir de l\'un de vos comptes d\'actif ou passif.|Lorsque vous convertissez un dépôt en transfert, l\'argent sera déposé dans les comptes de destination affichés à partir de l\'un de vos comptes d\'actif ou passif.', - 'convert_expl_t_w' => 'Lorsque vous convertissez un transfert en dépense, l\'argent sera dépensé sur le compte de destination que vous avez défini ici, au lieu d\'être transféré.|Lorsque vous convertissez un transfert en dépense, l\'argent sera dépensé sur les comptes de destination que vous avez définis ici, au lieu d\'être transféré.', - 'convert_expl_t_d' => 'Lorsque vous convertissez un transfert en dépôt, l\'argent sera déposé dans le compte de destination que vous voyez ici, au lieu de lui être transféré.|Lorsque vous convertissez un transfert en dépôt, l\'argent sera déposé dans les comptes de destination que vous voyez ici, au lieu de leur être transféré.', - 'convert_select_sources' => 'Veuillez sélectionner le nouveau compte source pour terminer la conversion.| Veuillez sélectionner les nouveaux comptes source pour terminer la conversion.', - 'convert_select_destinations' => 'Veuillez sélectionner le nouveau compte de destination pour terminer la conversion.|Veuillez sélectionner les nouveaux comptes de destination pour terminer la conversion.', - 'converted_to_Withdrawal' => 'L\'opération a été convertie en dépense', - 'converted_to_Deposit' => 'L\'opération a été convertie en dépôt', - 'converted_to_Transfer' => 'L\'opération a été convertie en transfert', - 'invalid_convert_selection' => 'Le compte que vous avez sélectionné est déjà utilisé dans cette opération ou n\'existe pas.', - 'source_or_dest_invalid' => 'Impossible de trouver les détails d\'opération corrects. La conversion n\'est pas possible.', - 'convert_to_withdrawal' => 'Convertir en dépense', - 'convert_to_deposit' => 'Convertir en dépôt', - 'convert_to_transfer' => 'Convertir en transfert', + 'convert_is_already_type_Withdrawal' => 'Cette opération est déjà une dépense', + 'convert_is_already_type_Deposit' => 'Cette opération est déjà un dépôt', + 'convert_is_already_type_Transfer' => 'Cette opération est déjà un transfert', + 'convert_to_Withdrawal' => 'Convertir ":description" en dépense', + 'convert_to_Deposit' => 'Convertir ":description" en dépôt', + 'convert_to_Transfer' => 'Convertir ":description" en transfert', + 'convert_options_WithdrawalDeposit' => 'Convertir un retrait en dépôt', + 'convert_options_WithdrawalTransfer' => 'Convertir une dépense en transfert', + 'convert_options_DepositTransfer' => 'Convertir un dépôt en transfert', + 'convert_options_DepositWithdrawal' => 'Convertir un dépôt en dépense', + 'convert_options_TransferWithdrawal' => 'Convertir un transfert en dépense', + 'convert_options_TransferDeposit' => 'Convertir un transfert en dépôt', + 'convert_Withdrawal_to_deposit' => 'Convertir cette dépense en dépôt', + 'convert_Withdrawal_to_transfer' => 'Convertir cette dépense en transfert', + 'convert_Deposit_to_withdrawal' => 'Convertir ce dépôt en dépense', + 'convert_Deposit_to_transfer' => 'Convertir ce dépôt en transfert', + 'convert_Transfer_to_deposit' => 'Convertir ce transfert en dépôt', + 'convert_Transfer_to_withdrawal' => 'Convertir ce transfert en dépense', + 'convert_please_set_revenue_source' => 'Veuillez choisir le compte de recettes d\'où proviendra l’argent.', + 'convert_please_set_asset_destination' => 'Veuillez choisir le compte d\'actifs sur lequel l\'argent sera versé.', + 'convert_please_set_expense_destination' => 'Veuillez choisir le compte de dépenses sur lequel l\'argent sera versé.', + 'convert_please_set_asset_source' => 'Veuillez choisir le compte d’actifs d\'où proviendra l’argent.', + 'convert_expl_w_d' => 'Lors de la conversion d\'une dépense en dépôt, l\'argent sera déposé dans le compte de destination affiché, au lieu d\'en être retiré.|Lors de la conversion d\'une dépense en dépôt, l\'argent sera déposé dans les comptes de destination affichés, au lieu de leur être retiré.', + 'convert_expl_w_t' => 'Lors de la conversion d\'une dépense en transfert, l\'argent sera transféré du compte source vers un autre compte d\'actif ou de passif au lieu d\'être dépensé sur le comptes de dépenses originaux.|Lors de la conversion d\'une dépense en transfert, l\'argent sera transféré des comptes source vers d\'autres comptes d\'actif ou de passif au lieu d\'être dépensé sur les comptes de dépenses originaux.', + 'convert_expl_d_w' => 'Lors de la conversion d\'un dépôt en dépense, l\'argent sera retiré du compte source affiché, au lieu d\'y être déposé.|Lors de la conversion d\'un dépôt en dépense, l\'argent sera retiré des comptes source affichés, au lieu d\'y être déposé.', + 'convert_expl_d_t' => 'Lorsque vous convertissez un dépôt en transfert, l\'argent sera déposé dans le compte de destination affiché à partir de l\'un de vos comptes d\'actif ou passif.|Lorsque vous convertissez un dépôt en transfert, l\'argent sera déposé dans les comptes de destination affichés à partir de l\'un de vos comptes d\'actif ou passif.', + 'convert_expl_t_w' => 'Lorsque vous convertissez un transfert en dépense, l\'argent sera dépensé sur le compte de destination que vous avez défini ici, au lieu d\'être transféré.|Lorsque vous convertissez un transfert en dépense, l\'argent sera dépensé sur les comptes de destination que vous avez définis ici, au lieu d\'être transféré.', + 'convert_expl_t_d' => 'Lorsque vous convertissez un transfert en dépôt, l\'argent sera déposé dans le compte de destination que vous voyez ici, au lieu de lui être transféré.|Lorsque vous convertissez un transfert en dépôt, l\'argent sera déposé dans les comptes de destination que vous voyez ici, au lieu de leur être transféré.', + 'convert_select_sources' => 'Veuillez sélectionner le nouveau compte source pour terminer la conversion.| Veuillez sélectionner les nouveaux comptes source pour terminer la conversion.', + 'convert_select_destinations' => 'Veuillez sélectionner le nouveau compte de destination pour terminer la conversion.|Veuillez sélectionner les nouveaux comptes de destination pour terminer la conversion.', + 'converted_to_Withdrawal' => 'L\'opération a été convertie en dépense', + 'converted_to_Deposit' => 'L\'opération a été convertie en dépôt', + 'converted_to_Transfer' => 'L\'opération a été convertie en transfert', + 'invalid_convert_selection' => 'Le compte que vous avez sélectionné est déjà utilisé dans cette opération ou n\'existe pas.', + 'source_or_dest_invalid' => 'Impossible de trouver les détails d\'opération corrects. La conversion n\'est pas possible.', + 'convert_to_withdrawal' => 'Convertir en dépense', + 'convert_to_deposit' => 'Convertir en dépôt', + 'convert_to_transfer' => 'Convertir en transfert', // create new stuff: - 'create_new_withdrawal' => 'Créer une nouvelle dépense', - 'create_new_deposit' => 'Créer un nouveau dépôt', - 'create_new_transfer' => 'Créer un nouveau transfert', - 'create_new_asset' => 'Créer un nouveau compte d’actif', - 'create_new_liabilities' => 'Créer un nouveau passif', - 'create_new_expense' => 'Créer nouveau compte de dépenses', - 'create_new_revenue' => 'Créer nouveau compte de recettes', - 'create_new_piggy_bank' => 'Créer une nouvelle tirelire', - 'create_new_bill' => 'Créer une nouvelle facture', - 'create_new_subscription' => 'Créer un nouvel abonnement', - 'create_new_rule' => 'Créer une nouvelle règle', + 'create_new_withdrawal' => 'Créer une nouvelle dépense', + 'create_new_deposit' => 'Créer un nouveau dépôt', + 'create_new_transfer' => 'Créer un nouveau transfert', + 'create_new_asset' => 'Créer un nouveau compte d’actif', + 'create_new_liabilities' => 'Créer un nouveau passif', + 'create_new_expense' => 'Créer nouveau compte de dépenses', + 'create_new_revenue' => 'Créer nouveau compte de recettes', + 'create_new_piggy_bank' => 'Créer une nouvelle tirelire', + 'create_new_bill' => 'Créer une nouvelle facture', + 'create_new_subscription' => 'Créer un nouvel abonnement', + 'create_new_rule' => 'Créer une nouvelle règle', // currencies: - 'create_currency' => 'Créer une nouvelle devise', - 'store_currency' => 'Créer une nouvelle devise', - 'update_currency' => 'Mise à jour de la devise', - 'new_default_currency' => ':name est maintenant la devise par défaut.', - 'cannot_delete_currency' => 'Impossible de supprimer :name car il est encore utilisé.', - 'cannot_delete_fallback_currency' => ':name est la devise par défaut du système et ne peut pas être supprimée.', - 'cannot_disable_currency_journals' => 'Impossible de désactiver la devise :name car les opérations l\'utilisent toujours.', - 'cannot_disable_currency_last_left' => 'Impossible de désactiver la devise :name car c\'est la dernière activée.', - 'cannot_disable_currency_account_meta' => 'Impossible de désactiver la devise :name car elle est utilisée dans les comptes d\'actifs.', - 'cannot_disable_currency_bills' => 'Impossible de désactiver la devise :name car elle est utilisée dans les factures.', - 'cannot_disable_currency_recurring' => 'Impossible de désactiver la devise :name car elle est utilisée dans les opérations périodiques.', - 'cannot_disable_currency_available_budgets' => 'Impossible de désactiver la devise :name car elle est utilisée dans les budgets existants.', - 'cannot_disable_currency_budget_limits' => 'Impossible de désactiver la devise :name car elle est utilisée dans les limites des budgets.', - 'cannot_disable_currency_current_default' => 'Impossible de désactiver la devise :name car elle est définie comme devise par défaut.', - 'cannot_disable_currency_system_fallback' => 'Impossible de désactiver la devise :name car elle est définie comme devise par défaut du système.', - 'disable_EUR_side_effects' => 'L\'Euro est la devise de secours utilisée par le système. La désactiver peut provoquer des effets indésirables et peut annuler votre garantie.', - 'deleted_currency' => 'Devise ":name" supprimée', - 'created_currency' => 'Devise ":name" créée', - 'could_not_store_currency' => 'Impossible d\'enregistrer la nouvelle devise.', - 'updated_currency' => 'Devise ":name" mise à jour', - 'ask_site_owner' => 'Merci de demander à :owner pour ajouter, modifier ou supprimer des devises.', - 'currencies_intro' => 'Firefly III prend en charge diverses devises que vous pouvez configurer et activer ici.', - 'make_default_currency' => 'Utiliser par défaut', - 'default_currency' => 'par défaut', - 'currency_is_disabled' => 'Désactivé', - 'enable_currency' => 'Activer', - 'disable_currency' => 'Désactiver', - 'currencies_default_disabled' => 'La plupart de ces devises sont désactivées par défaut. Vous devez d\'abord les activer pour pouvoir les utiliser.', - 'currency_is_now_enabled' => 'La devise ":name" a été activée', - 'currency_is_now_disabled' => 'La devise ":name" a été désactivée', + 'create_currency' => 'Créer une nouvelle devise', + 'store_currency' => 'Créer une nouvelle devise', + 'update_currency' => 'Mise à jour de la devise', + 'new_default_currency' => '«:name» est maintenant la devise par défaut.', + 'default_currency_failed' => 'Impossible de faire de modifier la devise par défaut à «:name». Veuillez vérifier les logs.', + 'cannot_delete_currency' => 'Impossible de supprimer :name car il est encore utilisé.', + 'cannot_delete_fallback_currency' => ':name est la devise par défaut du système et ne peut pas être supprimée.', + 'cannot_disable_currency_journals' => 'Impossible de désactiver la devise :name car les opérations l\'utilisent toujours.', + 'cannot_disable_currency_last_left' => 'Impossible de désactiver la devise :name car c\'est la dernière activée.', + 'cannot_disable_currency_account_meta' => 'Impossible de désactiver la devise :name car elle est utilisée dans les comptes d\'actifs.', + 'cannot_disable_currency_bills' => 'Impossible de désactiver la devise :name car elle est utilisée dans les factures.', + 'cannot_disable_currency_recurring' => 'Impossible de désactiver la devise :name car elle est utilisée dans les opérations périodiques.', + 'cannot_disable_currency_available_budgets' => 'Impossible de désactiver la devise :name car elle est utilisée dans les budgets existants.', + 'cannot_disable_currency_budget_limits' => 'Impossible de désactiver la devise :name car elle est utilisée dans les limites des budgets.', + 'cannot_disable_currency_current_default' => 'Impossible de désactiver la devise :name car elle est définie comme devise par défaut.', + 'cannot_disable_currency_system_fallback' => 'Impossible de désactiver la devise :name car elle est définie comme devise par défaut du système.', + 'disable_EUR_side_effects' => 'L\'Euro est la devise de secours utilisée par le système. La désactiver peut provoquer des effets indésirables et peut annuler votre garantie.', + 'deleted_currency' => 'Devise ":name" supprimée', + 'created_currency' => 'Devise ":name" créée', + 'could_not_store_currency' => 'Impossible d\'enregistrer la nouvelle devise.', + 'updated_currency' => 'Devise ":name" mise à jour', + 'ask_site_owner' => 'Merci de demander à :owner pour ajouter, modifier ou supprimer des devises.', + 'currencies_intro' => 'Firefly III prend en charge diverses devises que vous pouvez configurer et activer ici.', + 'make_default_currency' => 'Utiliser par défaut', + 'default_currency' => 'par défaut', + 'currency_is_disabled' => 'Désactivé', + 'enable_currency' => 'Activer', + 'disable_currency' => 'Désactiver', + 'currencies_default_disabled' => 'La plupart de ces devises sont désactivées par défaut. Vous devez d\'abord les activer pour pouvoir les utiliser.', + 'currency_is_now_enabled' => 'La devise ":name" a été activée', + 'could_not_enable_currency' => 'Impossible d\'activer la devise ":name". Veuillez consulter les logs.', + 'currency_is_now_disabled' => 'La devise ":name" a été désactivée', + 'could_not_disable_currency' => 'Impossible de désactiver la devise «:name». Peut-être est-elle encore utilisée ?', // forms: - 'mandatoryFields' => 'Champs obligatoires', - 'optionalFields' => 'Champs optionnels', - 'options' => 'Options', + 'mandatoryFields' => 'Champs obligatoires', + 'optionalFields' => 'Champs optionnels', + 'options' => 'Options', // budgets: - 'daily_budgets' => 'Budgets quotidiens', - 'weekly_budgets' => 'Budgets hebdomadaires', - 'monthly_budgets' => 'Budgets mensuels', - 'quarterly_budgets' => 'Budgets trimestriels', - 'half_year_budgets' => 'Budgets semestriels', - 'yearly_budgets' => 'Budgets annuels', - 'other_budgets' => 'Budgets à période personnalisée', - 'budget_limit_not_in_range' => 'Ce montant s\'applique du :start au :end :', - 'total_available_budget' => 'Budget total disponible (entre :start et :end)', - 'total_available_budget_in_currency' => 'Budget total disponible en :currency', - 'see_below' => 'voir ci-dessous', - 'create_new_budget' => 'Créer un nouveau budget', - 'store_new_budget' => 'Créer un nouveau budget', - 'stored_new_budget' => 'Nouveau budget ":name" créé', - 'available_between' => 'Disponible entre le :start et le :end', - 'transactionsWithoutBudget' => 'Dépenses non budgétisées', - 'transactions_no_budget' => 'Dépenses non budgétisées entre le :start et le :end', - 'spent_between' => 'Déjà dépensé entre le :start et le :end', - 'set_available_amount' => 'Définir le montant disponible', - 'update_available_amount' => 'Mettre à jour le montant disponible', - 'ab_basic_modal_explain' => 'Utilisez ce formulaire pour indiquer combien vous vous attendez à pouvoir budgéter (au total, en :currency) dans la période indiquée.', - 'createBudget' => 'Nouveau budget', - 'invalid_currency' => 'Ceci est une devise invalide', - 'invalid_amount' => 'Veuillez saisir un montant', - 'set_ab' => 'Le montant du budget disponible a été fixé', - 'updated_ab' => 'Le montant du budget disponible a été mis à jour', - 'deleted_ab' => 'Le montant du budget disponible a été supprimé', - 'deleted_bl' => 'Le montant budgétisé a été supprimé', - 'alt_currency_ab_create' => 'Définir le budget disponible dans une autre devise', - 'bl_create_btn' => 'Définir le budget dans une autre devise', - 'inactiveBudgets' => 'Budgets inactifs', - 'without_budget_between' => 'Opérations non budgétisées entre le :start et le :end', - 'delete_budget' => 'Supprimer le budget ":name"', - 'deleted_budget' => 'Budget ":name" supprimé', - 'edit_budget' => 'Modifier le budget ":name"', - 'updated_budget' => 'Budget ":name" mis à jour', - 'update_amount' => 'Mettre à jour le montant', - 'update_budget' => 'Mettre à jour le budget', - 'update_budget_amount_range' => 'Mettre à jour le montant disponible (prévu) entre le :start et le :end', - 'set_budget_limit_title' => 'Définir le montant budgétisé pour le budget :budget entre le :start et le :end', - 'set_budget_limit' => 'Définir le montant budgétisé', - 'budget_period_navigator' => 'Navigateur de période', - 'info_on_available_amount' => 'Qu\'est-ce que j\'ai de disponible ?', - 'available_amount_indication' => 'Utilisez ces montants pour avoir une indication de ce que pourrait être votre budget total.', - 'suggested' => 'Suggéré', - 'average_between' => 'Moyenne entre :start et :end', - 'transferred_in' => 'Transféré (entrant)', - 'transferred_away' => 'Transféré (sortant)', - 'auto_budget_none' => 'Pas de budget automatique', - 'auto_budget_reset' => 'Définir un montant fixe à chaque période', - 'auto_budget_rollover' => 'Ajouter un montant à chaque période', - 'auto_budget_adjusted' => 'Ajouter un montant à chaque période et rectifier en fonction des dépenses excessives', - 'auto_budget_period_daily' => 'Quotidien', - 'auto_budget_period_weekly' => 'Hebdomadaire', - 'auto_budget_period_monthly' => 'Mensuel', - 'auto_budget_period_quarterly' => 'Trimestriel', - 'auto_budget_period_half_year' => 'Semestriel', - 'auto_budget_period_yearly' => 'Annuel', - 'auto_budget_help' => 'Vous pouvez en savoir plus sur cette fonctionnalité dans l\'aide. Cliquez sur l\'icône (?) en haut à droite.', - 'auto_budget_reset_icon' => 'Ce budget sera défini périodiquement', - 'auto_budget_rollover_icon' => 'Le montant du budget augmentera périodiquement', - 'auto_budget_adjusted_icon' => 'Le montant du budget augmentera périodiquement et corrigera les dépassements de budget', - 'remove_budgeted_amount' => 'Supprimer le montant budgétisé en :currency', + 'daily_budgets' => 'Budgets quotidiens', + 'weekly_budgets' => 'Budgets hebdomadaires', + 'monthly_budgets' => 'Budgets mensuels', + 'quarterly_budgets' => 'Budgets trimestriels', + 'half_year_budgets' => 'Budgets semestriels', + 'yearly_budgets' => 'Budgets annuels', + 'other_budgets' => 'Budgets à période personnalisée', + 'budget_limit_not_in_range' => 'Ce montant s\'applique du :start au :end :', + 'total_available_budget' => 'Budget total disponible (entre :start et :end)', + 'total_available_budget_in_currency' => 'Budget total disponible en :currency', + 'see_below' => 'voir ci-dessous', + 'create_new_budget' => 'Créer un nouveau budget', + 'store_new_budget' => 'Créer un nouveau budget', + 'stored_new_budget' => 'Nouveau budget ":name" créé', + 'available_between' => 'Disponible entre le :start et le :end', + 'transactionsWithoutBudget' => 'Dépenses non budgétisées', + 'transactions_no_budget' => 'Dépenses non budgétisées entre le :start et le :end', + 'spent_between' => 'Déjà dépensé entre le :start et le :end', + 'spent_between_left' => ':spent dépensé du :start au :end, :left restant.', + 'set_available_amount' => 'Définir le montant disponible', + 'update_available_amount' => 'Mettre à jour le montant disponible', + 'ab_basic_modal_explain' => 'Utilisez ce formulaire pour indiquer combien vous vous attendez à pouvoir budgéter (au total, en :currency) dans la période indiquée.', + 'createBudget' => 'Nouveau budget', + 'invalid_currency' => 'Ceci est une devise invalide', + 'invalid_amount' => 'Veuillez saisir un montant', + 'set_ab' => 'Le montant du budget disponible a été fixé', + 'updated_ab' => 'Le montant du budget disponible a été mis à jour', + 'deleted_ab' => 'Le montant du budget disponible a été supprimé', + 'deleted_bl' => 'Le montant budgétisé a été supprimé', + 'alt_currency_ab_create' => 'Définir le budget disponible dans une autre devise', + 'bl_create_btn' => 'Définir le budget dans une autre devise', + 'inactiveBudgets' => 'Budgets inactifs', + 'without_budget_between' => 'Opérations non budgétisées entre le :start et le :end', + 'delete_budget' => 'Supprimer le budget ":name"', + 'deleted_budget' => 'Budget ":name" supprimé', + 'edit_budget' => 'Modifier le budget ":name"', + 'updated_budget' => 'Budget ":name" mis à jour', + 'update_amount' => 'Mettre à jour le montant', + 'update_budget' => 'Mettre à jour le budget', + 'update_budget_amount_range' => 'Mettre à jour le montant disponible (prévu) entre le :start et le :end', + 'set_budget_limit_title' => 'Définir le montant budgétisé pour le budget :budget entre le :start et le :end', + 'set_budget_limit' => 'Définir le montant budgétisé', + 'budget_period_navigator' => 'Navigateur de période', + 'info_on_available_amount' => 'Qu\'est-ce que j\'ai de disponible ?', + 'available_amount_indication' => 'Utilisez ces montants pour avoir une indication de ce que pourrait être votre budget total.', + 'suggested' => 'Suggéré', + 'average_between' => 'Moyenne entre :start et :end', + 'transferred_in' => 'Transféré (entrant)', + 'transferred_away' => 'Transféré (sortant)', + 'auto_budget_none' => 'Pas de budget automatique', + 'auto_budget_reset' => 'Définir un montant fixe à chaque période', + 'auto_budget_rollover' => 'Ajouter un montant à chaque période', + 'auto_budget_adjusted' => 'Ajouter un montant à chaque période et rectifier en fonction des dépenses excessives', + 'auto_budget_period_daily' => 'Quotidien', + 'auto_budget_period_weekly' => 'Hebdomadaire', + 'auto_budget_period_monthly' => 'Mensuel', + 'auto_budget_period_quarterly' => 'Trimestriel', + 'auto_budget_period_half_year' => 'Semestriel', + 'auto_budget_period_yearly' => 'Annuel', + 'auto_budget_help' => 'Vous pouvez en savoir plus sur cette fonctionnalité dans l\'aide. Cliquez sur l\'icône (?) en haut à droite.', + 'auto_budget_reset_icon' => 'Ce budget sera défini périodiquement', + 'auto_budget_rollover_icon' => 'Le montant du budget augmentera périodiquement', + 'auto_budget_adjusted_icon' => 'Le montant du budget augmentera périodiquement et corrigera les dépassements de budget', + 'remove_budgeted_amount' => 'Supprimer le montant budgétisé en :currency', // bills: - 'subscription' => 'Abonnement', - 'not_expected_period' => 'Pas attendu cette période', - 'subscriptions_in_group' => 'Abonnements dans le groupe "%{title}"', - 'subscr_expected_x_times' => '%{amount} à payer %{times} fois cette période', - 'not_or_not_yet' => 'Non (pas encore)', - 'visit_bill' => 'Consultez la facture ":name" sur Firefly III', - 'match_between_amounts' => 'La facture correspond à des opérations entre :low et :high.', - 'running_again_loss' => 'Les opérations précédemment liées à cette facture peuvent perdre leur connexion, si elles ne correspondent plus à la ou les règles.', - 'bill_related_rules' => 'Règles reliées à cette facture', - 'repeats' => 'Répétitions', - 'bill_end_date_help' => 'Champ facultatif. La facture devrait se terminer à cette date.', - 'bill_extension_date_help' => 'Champ facultatif. La facture doit être prolongée (ou annulée) à cette date au plus tard.', - 'bill_end_index_line' => 'Cette facture se termine le :date', - 'bill_extension_index_line' => 'Cette facture doit être prolongée ou annulée le :date', - 'connected_journals' => 'Opérations liées', - 'auto_match_on' => 'Automatiquement mis en correspondance par Firefly III', - 'auto_match_off' => 'Pas mis automatiquement en correspondance par Firefly III', - 'next_expected_match' => 'Prochain montant attendu', - 'delete_bill' => 'Supprimer la facture ":name"', - 'deleted_bill' => 'Facture ":name" supprimée', - 'edit_bill' => 'Modifier la facture : ":name"', - 'more' => 'Plus', - 'rescan_old' => 'Exécuter les règles à nouveau, sur toutes les opérations', - 'update_bill' => 'Mettre à jour la facture', - 'updated_bill' => 'Facture ":name" mise à jour', - 'store_new_bill' => 'Créer une nouvelle facture', - 'stored_new_bill' => 'Nouvelle facture ":name" créée', - 'cannot_scan_inactive_bill' => 'Les factures inactives ne peuvent pas être analysées.', - 'rescanned_bill' => 'Tout a été à nouveau scanné. :count opération a été liée à la facture.|Tout a été à nouveau scanné. :count opérations ont été liées à la facture.', - 'average_bill_amount_year' => 'Montant moyen des factures ( :year)', - 'average_bill_amount_overall' => 'Montant moyen des factures (global)', - 'bill_is_active' => 'Facture en cours', - 'bill_expected_between' => 'Attendu entre le :start et le :end', - 'bill_will_automatch' => 'La facture sera automatiquement liée aux opérations correspondantes', - 'skips_over' => 'saute', - 'bill_store_error' => 'Une erreur inattendue s\'est produite lors du stockage de votre nouvelle facture. Veuillez vérifier les fichiers journaux', - 'list_inactive_rule' => 'règle inactive', - 'bill_edit_rules' => 'Firefly III tentera également de modifier la règle relative à cette facture. Si vous avez modifié cette règle vous-même, Firefly III ne changera rien. Firefly III tentera également de modifier les :count règles relatives à cette facture. Si vous avez modifié ces règles vous-même, Firefly III ne changera rien.', - 'bill_expected_date' => 'Prévu :date', - 'bill_expected_date_js' => 'Attendu le {date}', - 'expected_amount' => 'Montant (attendu)', - 'bill_paid_on' => 'Payé le {date}', - 'bill_repeats_weekly' => 'Se répète toutes les semaines', - 'bill_repeats_monthly' => 'Se répète tous les mois', - 'bill_repeats_quarterly' => 'Se répète tous les trimestres', - 'bill_repeats_half-year' => 'Se répète tous les semestres', - 'bill_repeats_yearly' => 'Se répète tous les ans', - 'bill_repeats_weekly_other' => 'Se répète toutes les deux semaines', - 'bill_repeats_monthly_other' => 'Se répète tous les deux mois', - 'bill_repeats_quarterly_other' => 'Se répète tous les deux trimestres', - 'bill_repeats_half-year_other' => 'Se répète tous les ans', - 'bill_repeats_yearly_other' => 'Se répète tous les deux ans', - 'bill_repeats_weekly_skip' => 'Se répète toutes les {skip} semaines', - 'bill_repeats_monthly_skip' => 'Se répète tous les {skip} mois', - 'bill_repeats_quarterly_skip' => 'Se répète tous les {skip} trimestres', - 'bill_repeats_half-year_skip' => 'Se répète tous les {skip} semestres', - 'bill_repeats_yearly_skip' => 'Se répète tous les {skip} ans', - 'subscriptions' => 'Abonnements', - 'go_to_subscriptions' => 'Accédez à vos abonnements', - 'forever' => 'Pour toujours', - 'extension_date_is' => 'La date de l\'extension est {date}', + 'subscription' => 'Abonnement', + 'not_expected_period' => 'Pas attendu cette période', + 'subscriptions_in_group' => 'Abonnements dans le groupe "%{title}"', + 'subscr_expected_x_times' => '%{amount} à payer %{times} fois cette période', + 'not_or_not_yet' => 'Non (pas encore)', + 'visit_bill' => 'Consultez la facture ":name" sur Firefly III', + 'match_between_amounts' => 'La facture correspond à des opérations entre :low et :high.', + 'running_again_loss' => 'Les opérations précédemment liées à cette facture peuvent perdre leur connexion, si elles ne correspondent plus à la ou les règles.', + 'bill_related_rules' => 'Règles reliées à cette facture', + 'repeats' => 'Répétitions', + 'bill_end_date_help' => 'Champ facultatif. La facture devrait se terminer à cette date.', + 'bill_extension_date_help' => 'Champ facultatif. La facture doit être prolongée (ou annulée) à cette date au plus tard.', + 'bill_end_index_line' => 'Cette facture se termine le :date', + 'bill_extension_index_line' => 'Cette facture doit être prolongée ou annulée le :date', + 'connected_journals' => 'Opérations liées', + 'auto_match_on' => 'Automatiquement mis en correspondance par Firefly III', + 'auto_match_off' => 'Pas mis automatiquement en correspondance par Firefly III', + 'next_expected_match' => 'Prochain montant attendu', + 'delete_bill' => 'Supprimer la facture ":name"', + 'deleted_bill' => 'Facture ":name" supprimée', + 'edit_bill' => 'Modifier la facture : ":name"', + 'more' => 'Plus', + 'rescan_old' => 'Exécuter les règles à nouveau, sur toutes les opérations', + 'update_bill' => 'Mettre à jour la facture', + 'updated_bill' => 'Facture ":name" mise à jour', + 'store_new_bill' => 'Créer une nouvelle facture', + 'stored_new_bill' => 'Nouvelle facture ":name" créée', + 'cannot_scan_inactive_bill' => 'Les factures inactives ne peuvent pas être analysées.', + 'rescanned_bill' => 'Tout a été à nouveau scanné. :count opération a été liée à la facture.|Tout a été à nouveau scanné. :count opérations ont été liées à la facture.', + 'average_bill_amount_year' => "Montant moyen des factures (\u{a0}:year)", + 'average_bill_amount_overall' => 'Montant moyen des factures (global)', + 'bill_is_active' => 'Facture en cours', + 'bill_expected_between' => 'Attendu entre le :start et le :end', + 'bill_will_automatch' => 'La facture sera automatiquement liée aux opérations correspondantes', + 'skips_over' => 'saute', + 'bill_store_error' => 'Une erreur inattendue s\'est produite lors du stockage de votre nouvelle facture. Veuillez vérifier les fichiers journaux', + 'list_inactive_rule' => 'règle inactive', + 'bill_edit_rules' => 'Firefly III tentera également de modifier la règle relative à cette facture. Si vous avez modifié cette règle vous-même, Firefly III ne changera rien. Firefly III tentera également de modifier les :count règles relatives à cette facture. Si vous avez modifié ces règles vous-même, Firefly III ne changera rien.', + 'bill_expected_date' => 'Prévu :date', + 'bill_expected_date_js' => 'Attendu le {date}', + 'expected_amount' => 'Montant (attendu)', + 'bill_paid_on' => 'Payé le {date}', + 'bill_repeats_weekly' => 'Se répète toutes les semaines', + 'bill_repeats_monthly' => 'Se répète tous les mois', + 'bill_repeats_quarterly' => 'Se répète tous les trimestres', + 'bill_repeats_half-year' => 'Se répète tous les semestres', + 'bill_repeats_yearly' => 'Se répète tous les ans', + 'bill_repeats_weekly_other' => 'Se répète toutes les deux semaines', + 'bill_repeats_monthly_other' => 'Se répète tous les deux mois', + 'bill_repeats_quarterly_other' => 'Se répète tous les deux trimestres', + 'bill_repeats_half-year_other' => 'Se répète tous les ans', + 'bill_repeats_yearly_other' => 'Se répète tous les deux ans', + 'bill_repeats_weekly_skip' => 'Se répète toutes les {skip} semaines', + 'bill_repeats_monthly_skip' => 'Se répète tous les {skip} mois', + 'bill_repeats_quarterly_skip' => 'Se répète tous les {skip} trimestres', + 'bill_repeats_half-year_skip' => 'Se répète tous les {skip} semestres', + 'bill_repeats_yearly_skip' => 'Se répète tous les {skip} ans', + 'subscriptions' => 'Abonnements', + 'go_to_subscriptions' => 'Accédez à vos abonnements', + 'forever' => 'Pour toujours', + 'extension_date_is' => 'La date de l\'extension est {date}', // accounts: - 'i_am_owed_amount' => 'On me doit le montant', - 'i_owe_amount' => 'Je dois le montant', - 'inactive_account_link' => 'Vous avez :count compte inactif (archivé) que vous pouvez consulter sur cette page dédiée.| Vous avez :count comptes inactifs (archivés) que vous pouvez consulter sur cette page dédiée.', - 'all_accounts_inactive' => 'Voici vos comptes inactifs.', - 'active_account_link' => 'Ce lien renvoie à vos comptes actifs.', - 'account_missing_transaction' => 'Le compte #:id (":name") ne peut pas être consulté directement et Firefly ne dispose d\'aucune information pour vous rediriger.', - 'cc_monthly_payment_date_help' => 'Sélectionnez n\'importe quelle année et n\'importe quel mois, il sera ignoré de toute façon. Seul le jour du mois est pertinent.', - 'details_for_asset' => 'Détails pour le compte d’actif ":name"', - 'details_for_expense' => 'Détails du compte de dépenses ":name"', - 'details_for_revenue' => 'Détails du comptes de recettes ":name"', - 'details_for_cash' => 'Détails pour le compte de trésorerie ":name"', - 'store_new_asset_account' => 'Créer un nouveau compte d’actif', - 'store_new_expense_account' => 'Créer un nouveau compte de dépenses', - 'store_new_revenue_account' => 'Créer un compte de recettes', - 'edit_asset_account' => 'Modifier le compte d’actif ":name"', - 'edit_expense_account' => 'Modifier le compte de dépenses ";name"', - 'edit_revenue_account' => 'Modifier le compte de recettes ":name"', - 'delete_asset_account' => 'Supprimer le compte d’actif ":name"', - 'delete_expense_account' => 'Supprimer le compte de dépenses ":name"', - 'delete_revenue_account' => 'Supprimer le compte de recettes ":name"', - 'delete_liabilities_account' => 'Supprimer le passif ":name"', - 'asset_deleted' => 'Compte d’actif ":name" correctement supprimé', - 'account_deleted' => 'Compte ":name" supprimé avec succès', - 'expense_deleted' => 'Compte de dépenses ":name" correctement supprimé', - 'revenue_deleted' => 'Compte de recettes ":name" correctement supprimé', - 'update_asset_account' => 'Mettre à jour le compte d’actif', - 'update_undefined_account' => 'Mettre à jour le compte', - 'update_liabilities_account' => 'Mettre à jour le passif', - 'update_expense_account' => 'Mettre à jour le compte de dépenses', - 'update_revenue_account' => 'Mettre à jour le compte de recettes', - 'make_new_asset_account' => 'Créer un nouveau compte d’actif', - 'make_new_expense_account' => 'Créer un nouveau compte de dépenses', - 'make_new_revenue_account' => 'Créer un nouveau compte de recettes', - 'make_new_liabilities_account' => 'Créer un nouveau passif', - 'asset_accounts' => 'Comptes d’actif', - 'undefined_accounts' => 'Comptes', - 'asset_accounts_inactive' => 'Comptes d\'actifs (inactif)', - 'expense_account' => 'Compte de dépenses', - 'expense_accounts' => 'Comptes de dépenses', - 'expense_accounts_inactive' => 'Comptes de dépenses (inactif)', - 'revenue_account' => 'Compte de recettes', - 'revenue_accounts' => 'Comptes de recettes', - 'revenue_accounts_inactive' => 'Comptes de recette (inactifs)', - 'cash_accounts' => 'Comptes de trésorerie', - 'Cash account' => 'Compte de trésorerie', - 'liabilities_accounts' => 'Passifs', - 'liabilities_accounts_inactive' => 'Passifs (inactifs)', - 'reconcile_account' => 'Rapprocher le compte ":account"', - 'overview_of_reconcile_modal' => 'Vue d’ensemble du rapprochement', - 'delete_reconciliation' => 'Supprimer le rapprochement', - 'update_reconciliation' => 'Mettre à jour le rapprochement', - 'amount_cannot_be_zero' => 'Le montant ne peut pas être zéro', - 'end_of_reconcile_period' => 'Fin de la période de rapprochement: :period', - 'start_of_reconcile_period' => 'Début de la période de rapprochement : :period', - 'start_balance' => 'Solde initial', - 'end_balance' => 'Solde de clôture', - 'update_balance_dates_instruction' => 'Faites correspondre les montants et les dates ci-dessus à votre relevé bancaire et appuyez sur "Commencer le rapprochement"', - 'select_transactions_instruction' => 'Sélectionnez les opérations qui apparaissent sur votre relevé bancaire.', - 'select_range_and_balance' => 'Vérifiez d\'abord l\'intervalle de dates et les soldes. Puis appuyez sur "Commencer le rapprochement"', - 'date_change_instruction' => 'Si vous modifiez l\'intervalle de dates maintenant, toute progression sera perdue.', - 'update_selection' => 'Mettre à jour la sélection', - 'store_reconcile' => 'Stocker le rapprochement', - 'reconciliation_transaction' => 'Opération de régularisation', - 'Reconciliation' => 'Rapprochement', - 'reconciliation' => 'Rapprochement', - 'reconcile_options' => 'Options de rapprochement', - 'reconcile_range' => 'Intervalle de rapprochement', - 'start_reconcile' => 'Commencer le rapprochement', - 'cash_account_type' => 'Espèces', - 'cash' => 'espèces', - 'cant_find_redirect_account' => 'Firefly III a essayé de vous rediriger mais n\'a pas pu. Désolé. Retour à l\'index.', - 'account_type' => 'Type de compte', - 'save_transactions_by_moving' => 'Conserver cette opération en la déplaçant vers un autre compte :|Conserver ces opération sen les déplaçant vers un autre compte :', - 'save_transactions_by_moving_js' => 'Aucune opération|Conserver cette opération en la déplaçant vers un autre compte. |Conserver ces opérations en les déplaçant vers un autre compte.', - 'stored_new_account' => 'Nouveau compte ":name" créé !', - 'stored_new_account_js' => 'Nouveau compte "{name}" enregistré !', - 'updated_account' => 'Compte ":name" mis à jour', - 'updated_account_js' => 'Compte "{title}" mis à jour.', - 'credit_card_options' => 'Cartes de crédit', - 'no_transactions_account' => 'Il n\'y a pas d\'opération (sur cette période) pour le compte d\'actif ":name".', - 'no_transactions_period' => 'Il n\'y a aucune opération (sur cette période).', - 'no_data_for_chart' => 'Il n\'y a pas assez d\'informations (pour le moment) pour générer ce graphique.', - 'select_at_least_one_account' => 'Merci de sélectionner au moins un compte d\'actif', - 'select_at_least_one_category' => 'Merci de sélectionner au moins une catégorie', - 'select_at_least_one_budget' => 'Merci de sélectionner au moins un budget', - 'select_at_least_one_tag' => 'Merci de sélectionner au moins un tag', - 'select_at_least_one_expense' => 'Merci de sélectionner au moins une combinaison de comptes de dépense/revenu. Si vous n\'en avez aucun (la liste est vide) ce rapport n\'est pas utilisable.', - 'account_default_currency' => 'Ce sera la devise par défaut associée à ce compte.', - 'reconcile_has_more' => 'Votre registre Firefly III a plus d\'argent que ce que votre banque prétend que vous devriez avoir. Veuillez choisir comment gérer la situation parmi les différentes possibilités offertes. Ensuite, appuyez sur "Confirmer le rapprochement".', - 'reconcile_has_less' => 'Votre registre Firefly III a moins d\'argent que ce que votre banque prétend que vous devriez avoir. Veuillez choisir comment gérer la situation parmi les différentes possibilités offertes. Ensuite, appuyez sur "Confirmer le rapprochement".', - 'reconcile_is_equal' => 'Votre registre Firefly III et vos relevés bancaires correspondent. Il n\'y a rien à faire. Appuyez sur "Confirmer le rapprochement" pour confirmer votre entrée.', - 'create_pos_reconcile_transaction' => 'Pointer les opérations sélectionnées et créer une correction en ajoutant :amount à ce compte d\'actif.', - 'create_neg_reconcile_transaction' => 'Pointer les opérations sélectionnées et créer une correction en enlevant :amount à ce compte d\'actif.', - 'reconcile_do_nothing' => 'Pointer les opérations sélectionnées, sans effectuer de correction.', - 'reconcile_go_back' => 'Vous pouvez toujours modifier ou supprimer une correction ultérieurement.', - 'must_be_asset_account' => 'Vous pouvez uniquement rapprocher les comptes d\'actifs', - 'reconciliation_stored' => 'Rapprochement enregistré', - 'reconciliation_error' => 'En raison d\'une erreur, les opérations ont été marquées comme rapprochées, mais la correction n\'a pas été enregistrée : :error.', - 'reconciliation_transaction_title' => 'Régularisation (du :from au :to)', - 'sum_of_reconciliation' => 'Total des rapprochements', - 'reconcile_this_account' => 'Rapprocher ce compte', - 'reconcile' => 'Rapprocher', - 'show' => 'Afficher', - 'confirm_reconciliation' => 'Confirmer le rapprochement', - 'submitted_start_balance' => 'Solde initial soumis', - 'selected_transactions' => 'Opérations sélectionnées ( :count)', - 'already_cleared_transactions' => 'Opérations déjà pointées ( :count)', - 'submitted_end_balance' => 'Solde final soumis', - 'initial_balance_description' => 'Balance initiale pour ":account"', - 'liability_credit_description' => 'Passif de crédit pour ":account"', - 'interest_calc_' => 'inconnu', - 'interest_calc_daily' => 'Par jour', - 'interest_calc_monthly' => 'Par mois', - 'interest_calc_yearly' => 'Par an', - 'interest_calc_weekly' => 'Par semaine', - 'interest_calc_half-year' => 'Par semestre', - 'interest_calc_quarterly' => 'Par trimestre', - 'initial_balance_account' => 'Solde initial du compte :account', - 'list_options' => 'Lister les options', + 'i_am_owed_amount' => 'On me doit le montant', + 'i_owe_amount' => 'Je dois le montant', + 'inactive_account_link' => 'Vous avez :count compte inactif (archivé) que vous pouvez consulter sur cette page dédiée.| Vous avez :count comptes inactifs (archivés) que vous pouvez consulter sur cette page dédiée.', + 'all_accounts_inactive' => 'Voici vos comptes inactifs.', + 'active_account_link' => 'Ce lien renvoie à vos comptes actifs.', + 'account_missing_transaction' => 'Le compte #:id (":name") ne peut pas être consulté directement et Firefly ne dispose d\'aucune information pour vous rediriger.', + 'cc_monthly_payment_date_help' => 'Sélectionnez n\'importe quelle année et n\'importe quel mois, il sera ignoré de toute façon. Seul le jour du mois est pertinent.', + 'details_for_asset' => 'Détails pour le compte d’actif ":name"', + 'details_for_expense' => 'Détails du compte de dépenses ":name"', + 'details_for_revenue' => 'Détails du comptes de recettes ":name"', + 'details_for_cash' => 'Détails pour le compte de trésorerie ":name"', + 'store_new_asset_account' => 'Créer un nouveau compte d’actif', + 'store_new_expense_account' => 'Créer un nouveau compte de dépenses', + 'store_new_revenue_account' => 'Créer un compte de recettes', + 'edit_asset_account' => 'Modifier le compte d’actif ":name"', + 'edit_expense_account' => 'Modifier le compte de dépenses ";name"', + 'edit_revenue_account' => 'Modifier le compte de recettes ":name"', + 'delete_asset_account' => 'Supprimer le compte d’actif ":name"', + 'delete_expense_account' => 'Supprimer le compte de dépenses ":name"', + 'delete_revenue_account' => 'Supprimer le compte de recettes ":name"', + 'delete_liabilities_account' => 'Supprimer le passif ":name"', + 'asset_deleted' => 'Compte d’actif ":name" correctement supprimé', + 'account_deleted' => 'Compte ":name" supprimé avec succès', + 'expense_deleted' => 'Compte de dépenses ":name" correctement supprimé', + 'revenue_deleted' => 'Compte de recettes ":name" correctement supprimé', + 'update_asset_account' => 'Mettre à jour le compte d’actif', + 'update_undefined_account' => 'Mettre à jour le compte', + 'update_liabilities_account' => 'Mettre à jour le passif', + 'update_expense_account' => 'Mettre à jour le compte de dépenses', + 'update_revenue_account' => 'Mettre à jour le compte de recettes', + 'make_new_asset_account' => 'Créer un nouveau compte d’actif', + 'make_new_expense_account' => 'Créer un nouveau compte de dépenses', + 'make_new_revenue_account' => 'Créer un nouveau compte de recettes', + 'make_new_liabilities_account' => 'Créer un nouveau passif', + 'asset_accounts' => 'Comptes d’actif', + 'undefined_accounts' => 'Comptes', + 'asset_accounts_inactive' => 'Comptes d\'actifs (inactif)', + 'expense_account' => 'Compte de dépenses', + 'expense_accounts' => 'Comptes de dépenses', + 'expense_accounts_inactive' => 'Comptes de dépenses (inactif)', + 'revenue_account' => 'Compte de recettes', + 'revenue_accounts' => 'Comptes de recettes', + 'revenue_accounts_inactive' => 'Comptes de recette (inactifs)', + 'cash_accounts' => 'Comptes de trésorerie', + 'Cash account' => 'Compte de trésorerie', + 'liabilities_accounts' => 'Passifs', + 'liabilities_accounts_inactive' => 'Passifs (inactifs)', + 'reconcile_account' => 'Rapprocher le compte ":account"', + 'overview_of_reconcile_modal' => 'Vue d’ensemble du rapprochement', + 'delete_reconciliation' => 'Supprimer le rapprochement', + 'update_reconciliation' => 'Mettre à jour le rapprochement', + 'amount_cannot_be_zero' => 'Le montant ne peut pas être zéro', + 'end_of_reconcile_period' => 'Fin de la période de rapptrochement : :period', + 'start_of_reconcile_period' => 'Début de la période de rapprochement : :period', + 'start_balance' => 'Solde initial', + 'end_balance' => 'Solde de clôture', + 'update_balance_dates_instruction' => 'Faites correspondre les montants et les dates ci-dessus à votre relevé bancaire et appuyez sur "Commencer le rapprochement"', + 'select_transactions_instruction' => 'Sélectionnez les opérations qui apparaissent sur votre relevé bancaire.', + 'select_range_and_balance' => 'Vérifiez d\'abord l\'intervalle de dates et les soldes. Puis appuyez sur "Commencer le rapprochement"', + 'date_change_instruction' => 'Si vous modifiez l\'intervalle de dates maintenant, toute progression sera perdue.', + 'update_selection' => 'Mettre à jour la sélection', + 'store_reconcile' => 'Stocker le rapprochement', + 'reconciliation_transaction' => 'Opération de régularisation', + 'Reconciliation' => 'Rapprochement', + 'reconciliation' => 'Rapprochement', + 'reconcile_options' => 'Options de rapprochement', + 'reconcile_range' => 'Intervalle de rapprochement', + 'start_reconcile' => 'Commencer le rapprochement', + 'cash_account_type' => 'Espèces', + 'cash' => 'espèces', + 'cant_find_redirect_account' => 'Firefly III a essayé de vous rediriger mais n\'a pas pu. Désolé. Retour à l\'index.', + 'account_type' => 'Type de compte', + 'save_transactions_by_moving' => 'Conserver cette opération en la déplaçant vers un autre compte :|Conserver ces opération sen les déplaçant vers un autre compte :', + 'save_transactions_by_moving_js' => 'Aucune opération|Conserver cette opération en la déplaçant vers un autre compte. |Conserver ces opérations en les déplaçant vers un autre compte.', + 'stored_new_account' => 'Nouveau compte ":name" créé !', + 'stored_new_account_js' => 'Nouveau compte "{name}" enregistré !', + 'updated_account' => 'Compte ":name" mis à jour', + 'updated_account_js' => 'Compte "{title}" mis à jour.', + 'credit_card_options' => 'Cartes de crédit', + 'no_transactions_account' => 'Il n\'y a pas d\'opération (sur cette période) pour le compte d\'actif ":name".', + 'no_transactions_period' => 'Il n\'y a aucune opération (sur cette période).', + 'no_data_for_chart' => 'Il n\'y a pas assez d\'informations (pour le moment) pour générer ce graphique.', + 'select_at_least_one_account' => 'Merci de sélectionner au moins un compte d\'actif', + 'select_at_least_one_category' => 'Merci de sélectionner au moins une catégorie', + 'select_at_least_one_budget' => 'Merci de sélectionner au moins un budget', + 'select_at_least_one_tag' => 'Merci de sélectionner au moins un tag', + 'select_at_least_one_expense' => 'Merci de sélectionner au moins une combinaison de comptes de dépense/revenu. Si vous n\'en avez aucun (la liste est vide) ce rapport n\'est pas utilisable.', + 'account_default_currency' => 'Ce sera la devise par défaut associée à ce compte.', + 'reconcile_has_more' => 'Votre registre Firefly III a plus d\'argent que ce que votre banque prétend que vous devriez avoir. Veuillez choisir comment gérer la situation parmi les différentes possibilités offertes. Ensuite, appuyez sur "Confirmer le rapprochement".', + 'reconcile_has_less' => 'Votre registre Firefly III a moins d\'argent que ce que votre banque prétend que vous devriez avoir. Veuillez choisir comment gérer la situation parmi les différentes possibilités offertes. Ensuite, appuyez sur "Confirmer le rapprochement".', + 'reconcile_is_equal' => 'Votre registre Firefly III et vos relevés bancaires correspondent. Il n\'y a rien à faire. Appuyez sur "Confirmer le rapprochement" pour confirmer votre entrée.', + 'create_pos_reconcile_transaction' => 'Pointer les opérations sélectionnées et créer une correction en ajoutant :amount à ce compte d\'actif.', + 'create_neg_reconcile_transaction' => 'Pointer les opérations sélectionnées et créer une correction en enlevant :amount à ce compte d\'actif.', + 'reconcile_do_nothing' => 'Pointer les opérations sélectionnées, sans effectuer de correction.', + 'reconcile_go_back' => 'Vous pouvez toujours modifier ou supprimer une correction ultérieurement.', + 'must_be_asset_account' => 'Vous pouvez uniquement rapprocher les comptes d\'actifs', + 'reconciliation_stored' => 'Rapprochement enregistré', + 'reconciliation_error' => 'En raison d\'une erreur, les opérations ont été marquées comme rapprochées, mais la correction n\'a pas été enregistrée : :error.', + 'reconciliation_transaction_title' => 'Régularisation (du :from au :to)', + 'sum_of_reconciliation' => 'Total des rapprochements', + 'reconcile_this_account' => 'Rapprocher ce compte', + 'reconcile' => 'Rapprocher', + 'show' => 'Afficher', + 'confirm_reconciliation' => 'Confirmer le rapprochement', + 'submitted_start_balance' => 'Solde initial soumis', + 'selected_transactions' => 'Opérations sélectionnées ( :count)', + 'already_cleared_transactions' => 'Opérations déjà pointées ( :count)', + 'submitted_end_balance' => 'Solde final soumis', + 'initial_balance_description' => 'Balance initiale pour ":account"', + 'liability_credit_description' => 'Passif de crédit pour ":account"', + 'interest_calc_' => 'inconnu', + 'interest_calc_daily' => 'Par jour', + 'interest_calc_monthly' => 'Par mois', + 'interest_calc_yearly' => 'Par an', + 'interest_calc_weekly' => 'Par semaine', + 'interest_calc_half-year' => 'Par semestre', + 'interest_calc_quarterly' => 'Par trimestre', + 'initial_balance_account' => 'Solde initial du compte :account', + 'list_options' => 'Lister les options', // categories: - 'new_category' => 'Nouvelle catégorie', - 'create_new_category' => 'Créer une nouvelle catégorie', - 'without_category' => 'Sans catégorie', - 'update_category' => 'Modifier la catégorie', - 'updated_category' => 'Catégorie ":name" mise à jour', - 'categories' => 'Catégories', - 'edit_category' => 'Modifier la catégorie ":name"', - 'no_category' => '(aucune catégorie)', - 'unknown_category_plain' => 'Sans catégorie', - 'category' => 'Catégorie', - 'delete_category' => 'Supprimer la catégorie ":name"', - 'deleted_category' => 'Catégorie ":name" supprimée', - 'store_category' => 'Créer une nouvelle catégorie', - 'stored_category' => 'Nouvelle catégorie stockée ":name"', - 'without_category_between' => 'Sans catégorie entre :start et :end', + 'new_category' => 'Nouvelle catégorie', + 'create_new_category' => 'Créer une nouvelle catégorie', + 'without_category' => 'Sans catégorie', + 'update_category' => 'Modifier la catégorie', + 'updated_category' => 'Catégorie ":name" mise à jour', + 'categories' => 'Catégories', + 'edit_category' => 'Modifier la catégorie ":name"', + 'no_category' => '(aucune catégorie)', + 'unknown_category_plain' => 'Sans catégorie', + 'category' => 'Catégorie', + 'delete_category' => 'Supprimer la catégorie ":name"', + 'deleted_category' => 'Catégorie ":name" supprimée', + 'store_category' => 'Créer une nouvelle catégorie', + 'stored_category' => 'Nouvelle catégorie stockée ":name"', + 'without_category_between' => 'Sans catégorie entre :start et :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Mettre à jour une dépense', - 'update_deposit' => 'Mettre à jour un dépôt', - 'update_transaction' => 'Mettre à jour l\'opération', - 'update_transfer' => 'Mettre à jour un transfert', - 'updated_withdrawal' => 'Dépense ":description" mise à jour', - 'updated_deposit' => 'Dépôt ":description" mis à jour', - 'updated_transfer' => 'Transfert ":description" mis à jour', - 'no_changes_withdrawal' => 'Le retrait ":description" n\'a pas été modifié.', - 'no_changes_deposit' => 'Le dépôt ":description" n\'a pas été modifié.', - 'no_changes_transfer' => 'Le transfert ":description" n\'a pas été changé.', - 'delete_withdrawal' => 'Supprimer la dépense ":description"', - 'delete_deposit' => 'Supprimer le dépôt ":description"', - 'delete_transfer' => 'Supprimer le transfert ":description"', - 'deleted_withdrawal' => 'Dépense ":description" correctement supprimée', - 'deleted_deposit' => 'Dépôt ":description" correctement supprimé', - 'deleted_transfer' => 'Opération ":description" correctement supprimée', - 'deleted_reconciliation' => 'Opération ":description" supprimée avec succès', - 'stored_journal' => 'Opération ":description" créée avec succès', - 'stored_journal_no_descr' => 'Nouvelle opération créée avec succès', - 'updated_journal_no_descr' => 'Votre opération a été mise à jour avec succès', - 'select_transactions' => 'Sélectionner des opérations', - 'rule_group_select_transactions' => 'Appliquer le groupe de règles ":title" sur les opérations', - 'rule_select_transactions' => 'Appliquer la règle ":title" sur les opérations', - 'stop_selection' => 'Arrêter de sélectionner les opérations', - 'reconcile_selected' => 'Rapprocher', - 'mass_delete_journals' => 'Supprimer un certain nombre de opérations', - 'mass_edit_journals' => 'Modifier un certain nombre d’opérations', - 'mass_bulk_journals' => 'Modifier un certain nombre d’opérations en masse', - 'mass_bulk_journals_explain' => 'Ce formulaire vous permet de modifier les propriétés des opérations listées ci-dessous d\'un coup. Toutes les opérations dans le tableau seront mises à jour lorsque vous changerez les paramètres que vous voyez ici.', - 'part_of_split' => 'Cette opération fait partie d\'une opération scindée. Si vous n\'avez pas sélectionné toutes les parties, vous risquez de n\'impacter que la moitié de l\'opération.', - 'bulk_set_new_values' => 'Utilisez les entrées ci-dessous pour définir de nouvelles valeurs. Si vous les laissez vides, ils seront vides pour tous. Notez également que seuls les dépenses recevront un budget.', - 'no_bulk_category' => 'Ne pas mettre à jour la catégorie', - 'no_bulk_budget' => 'Ne pas mettre à jour le budget', - 'no_bulk_tags' => 'Ne pas mettre à jour le·s tag·s', - 'replace_with_these_tags' => 'Remplacer par ces tags', - 'append_these_tags' => 'Ajouter ces tags', - 'mass_edit' => 'Modifier la sélection individuellement', - 'bulk_edit' => 'Modifier la sélection en masse', - 'mass_delete' => 'Supprimer la sélection', - 'cannot_edit_other_fields' => 'Vous ne pouvez pas modifier en masse d\'autres champs que ceux-ci, car il n’y a pas de place pour tous les afficher. S’il vous plaît suivez le lien et modifiez les un par un si vous devez modifier ces champs.', - 'cannot_change_amount_reconciled' => 'Vous ne pouvez pas modifier le montant d\'opérations réconciliées.', - 'no_budget' => '(pas de budget)', - 'no_bill' => '(aucune facture)', - 'account_per_budget' => 'Compte par budget', - 'account_per_category' => 'Compte par catégorie', - 'create_new_object' => 'Créer', - 'empty' => '(vide)', - 'all_other_budgets' => '(tous les autres budgets)', - 'all_other_accounts' => '(tous les autres comptes)', - 'expense_per_source_account' => 'Dépenses par compte source', - 'expense_per_destination_account' => 'Dépenses par compte de destination', - 'income_per_destination_account' => 'Revenu par compte de destination', - 'spent_in_specific_category' => 'Dépense dans la catégorie ":category"', - 'earned_in_specific_category' => 'Gagné dans la catégorie ":category"', - 'spent_in_specific_tag' => 'Dépenser dans le mot-clé ":tag"', - 'earned_in_specific_tag' => 'Gagné dans le mot-clé ":tag"', - 'income_per_source_account' => 'Revenu par compte source', - 'average_spending_per_destination' => 'Dépense moyenne par compte de destination', - 'average_spending_per_source' => 'Dépense moyenne par compte source', - 'average_earning_per_source' => 'Revenu moyen par compte source', - 'average_earning_per_destination' => 'Revenu moyen par compte de destination', - 'account_per_tag' => 'Compte par mot-clé', - 'tag_report_expenses_listed_once' => 'Les dépenses et les revenus ne sont jamais listés deux fois. Si une opération a plusieurs mots-clés, elle ne peut apparaître que sous l\'un de ses mots-clés. Cette liste peut sembler manquer de données, mais les montants seront corrects.', - 'double_report_expenses_charted_once' => 'Les dépenses et les revenus ne sont jamais affichés deux fois. Si une opération a plusieurs mots-clés, elle ne peut apparaître que sous l\'un de ses mots-clés. Ce graphique peut sembler manquer de données, mais les montants seront corrects.', - 'tag_report_chart_single_tag' => 'Ce graphique s\'applique à un seul mot-clé. Si une opération a plusieurs mots-clés, ce que vous voyez ici peut également être reflété dans les graphiques d\'autres mots-clés.', - 'tag' => 'Mot-clé', - 'no_budget_squared' => '(pas de budget)', - 'perm-delete-many' => 'Supprimer beaucoup d\'éléments d\'un coup peut être très perturbateur. Soyez prudent. Vous pouvez supprimer une partie d\'une opération scindée à partir de cette page, alors faites attention.', - 'mass_deleted_transactions_success' => ':count opération supprimée.|:count opérations supprimées.', - 'mass_edited_transactions_success' => ':count opération mise à jour.|:count opérations mises à jour.', - 'opt_group_' => '(aucun type de compte)', - 'opt_group_no_account_type' => '(aucun type de compte)', - 'opt_group_defaultAsset' => 'Comptes d\'actifs par défaut', - 'opt_group_savingAsset' => 'Comptes d\'épargne', - 'opt_group_sharedAsset' => 'Comptes d\'actifs partagés', - 'opt_group_ccAsset' => 'Cartes de crédit', - 'opt_group_cashWalletAsset' => 'Porte-monnaie', - 'opt_group_expense_account' => 'Comptes de dépenses', - 'opt_group_revenue_account' => 'Comptes de recettes', - 'opt_group_l_Loan' => 'Passif: Prêt', - 'opt_group_cash_account' => 'Compte de trésorerie', - 'opt_group_l_Debt' => 'Passif: Dette', - 'opt_group_l_Mortgage' => 'Passif: Prêt hypothécaire', - 'opt_group_l_Credit card' => 'Passif: Carte de crédit', - 'notes' => 'Notes', - 'unknown_journal_error' => 'Impossible de stocker l\'opération. Veuillez vérifier les fichiers journaux.', - 'attachment_not_found' => 'Cette pièce jointe est introuvable.', - 'journal_link_bill' => 'Cette opération est liée à la facture :name. Pour supprimer l\'association, décocher la case. Utilisez les règles pour la connecter à une autre facture.', - 'transaction_stored_link' => 'L\'opération n°{ID} ("{title}") a été enregistrée.', - 'transaction_new_stored_link' => 'L\'opération n°{ID} a été enregistrée.', - 'transaction_updated_link' => 'L\'opération n°{ID} ("{title}") a été mise à jour.', - 'transaction_updated_no_changes' => 'L\'opération n°{ID} ("{title}") n\'a pas été modifiée.', - 'first_split_decides' => 'La première ventilation détermine la valeur de ce champ', - 'first_split_overrules_source' => 'La première ventilation peut remplacer le compte source', - 'first_split_overrules_destination' => 'La première ventilation peut remplacer le compte de destination', - 'spent_x_of_y' => 'Dépensé {amount} sur {total}', + 'wait_loading_transaction' => 'Veuillez patienter pendant le chargement du formulaire', + 'wait_loading_data' => 'Veuillez attendre que vos informations soient chargées...', + 'wait_attachments' => 'Veuillez patienter pendant le chargement des pièces jointes.', + 'errors_upload' => 'L\'envoi a échoué. Veuillez consulter l\'erreur dans votre console de navigateur.', + 'amount_foreign_if' => 'Montant en devise étrangère, le cas échéant', + 'amount_destination_account' => 'Montant dans la devise du compte de destination', + 'edit_transaction_title' => 'Modifier l\'opération ":description"', + 'unreconcile' => 'Annuler le rapprochement', + 'update_withdrawal' => 'Mettre à jour une dépense', + 'update_deposit' => 'Mettre à jour un dépôt', + 'update_transaction' => 'Mettre à jour l\'opération', + 'update_transfer' => 'Mettre à jour un transfert', + 'updated_withdrawal' => 'Dépense ":description" mise à jour', + 'updated_deposit' => 'Dépôt ":description" mis à jour', + 'updated_transfer' => 'Transfert ":description" mis à jour', + 'no_changes_withdrawal' => 'Le retrait ":description" n\'a pas été modifié.', + 'no_changes_deposit' => 'Le dépôt ":description" n\'a pas été modifié.', + 'no_changes_transfer' => 'Le transfert ":description" n\'a pas été changé.', + 'delete_withdrawal' => 'Supprimer la dépense ":description"', + 'delete_deposit' => 'Supprimer le dépôt ":description"', + 'delete_transfer' => 'Supprimer le transfert ":description"', + 'deleted_withdrawal' => 'Dépense ":description" correctement supprimée', + 'deleted_deposit' => 'Dépôt ":description" correctement supprimé', + 'deleted_transfer' => 'Opération ":description" correctement supprimée', + 'deleted_reconciliation' => 'Opération ":description" supprimée avec succès', + 'stored_journal' => 'Opération ":description" créée avec succès', + 'stored_journal_js' => 'Opération "%{description}" créée avec succès', + 'stored_journal_no_descr' => 'Nouvelle opération créée avec succès', + 'updated_journal_no_descr' => 'Votre opération a été mise à jour avec succès', + 'select_transactions' => 'Sélectionner des opérations', + 'rule_group_select_transactions' => 'Appliquer le groupe de règles ":title" sur les opérations', + 'rule_select_transactions' => 'Appliquer la règle ":title" sur les opérations', + 'stop_selection' => 'Arrêter de sélectionner les opérations', + 'reconcile_selected' => 'Rapprocher', + 'mass_delete_journals' => 'Supprimer un certain nombre de opérations', + 'mass_edit_journals' => 'Modifier un certain nombre d’opérations', + 'mass_bulk_journals' => 'Modifier un certain nombre d’opérations en masse', + 'mass_bulk_journals_explain' => 'Ce formulaire vous permet de modifier les propriétés des opérations listées ci-dessous d\'un coup. Toutes les opérations dans le tableau seront mises à jour lorsque vous changerez les paramètres que vous voyez ici.', + 'part_of_split' => 'Cette opération fait partie d\'une opération scindée. Si vous n\'avez pas sélectionné toutes les parties, vous risquez de n\'impacter que la moitié de l\'opération.', + 'bulk_set_new_values' => 'Utilisez les entrées ci-dessous pour définir de nouvelles valeurs. Si vous les laissez vides, ils seront vides pour tous. Notez également que seuls les dépenses recevront un budget.', + 'no_bulk_category' => 'Ne pas mettre à jour la catégorie', + 'no_bulk_budget' => 'Ne pas mettre à jour le budget', + 'no_bulk_tags' => 'Ne pas mettre à jour le·s tag·s', + 'replace_with_these_tags' => 'Remplacer par ces tags', + 'append_these_tags' => 'Ajouter ces tags', + 'mass_edit' => 'Modifier la sélection individuellement', + 'bulk_edit' => 'Modifier la sélection en masse', + 'mass_delete' => 'Supprimer la sélection', + 'cannot_edit_other_fields' => 'Vous ne pouvez pas modifier en masse d\'autres champs que ceux-ci, car il n’y a pas de place pour tous les afficher. S’il vous plaît suivez le lien et modifiez les un par un si vous devez modifier ces champs.', + 'cannot_change_amount_reconciled' => 'Vous ne pouvez pas modifier le montant d\'opérations réconciliées.', + 'no_budget' => '(pas de budget)', + 'no_bill' => '(aucune facture)', + 'account_per_budget' => 'Compte par budget', + 'account_per_category' => 'Compte par catégorie', + 'create_new_object' => 'Créer', + 'empty' => '(vide)', + 'all_other_budgets' => '(tous les autres budgets)', + 'all_other_accounts' => '(tous les autres comptes)', + 'expense_per_source_account' => 'Dépenses par compte source', + 'expense_per_destination_account' => 'Dépenses par compte de destination', + 'income_per_destination_account' => 'Revenu par compte de destination', + 'spent_in_specific_category' => 'Dépense dans la catégorie ":category"', + 'earned_in_specific_category' => 'Gagné dans la catégorie ":category"', + 'spent_in_specific_tag' => 'Dépenser dans le mot-clé ":tag"', + 'earned_in_specific_tag' => 'Gagné dans le mot-clé ":tag"', + 'income_per_source_account' => 'Revenu par compte source', + 'average_spending_per_destination' => 'Dépense moyenne par compte de destination', + 'average_spending_per_source' => 'Dépense moyenne par compte source', + 'average_earning_per_source' => 'Revenu moyen par compte source', + 'average_earning_per_destination' => 'Revenu moyen par compte de destination', + 'account_per_tag' => 'Compte par mot-clé', + 'tag_report_expenses_listed_once' => 'Les dépenses et les revenus ne sont jamais listés deux fois. Si une opération a plusieurs mots-clés, elle ne peut apparaître que sous l\'un de ses mots-clés. Cette liste peut sembler manquer de données, mais les montants seront corrects.', + 'double_report_expenses_charted_once' => 'Les dépenses et les revenus ne sont jamais affichés deux fois. Si une opération a plusieurs mots-clés, elle ne peut apparaître que sous l\'un de ses mots-clés. Ce graphique peut sembler manquer de données, mais les montants seront corrects.', + 'tag_report_chart_single_tag' => 'Ce graphique s\'applique à un seul mot-clé. Si une opération a plusieurs mots-clés, ce que vous voyez ici peut également être reflété dans les graphiques d\'autres mots-clés.', + 'tag' => 'Mot-clé', + 'no_budget_squared' => '(pas de budget)', + 'perm-delete-many' => 'Supprimer beaucoup d\'éléments d\'un coup peut être très perturbateur. Soyez prudent. Vous pouvez supprimer une partie d\'une opération scindée à partir de cette page, alors faites attention.', + 'mass_deleted_transactions_success' => ':count opération supprimée.|:count opérations supprimées.', + 'mass_edited_transactions_success' => ':count opération mise à jour.|:count opérations mises à jour.', + 'opt_group_' => '(aucun type de compte)', + 'opt_group_no_account_type' => '(aucun type de compte)', + 'opt_group_defaultAsset' => 'Comptes d\'actifs par défaut', + 'opt_group_savingAsset' => 'Comptes d\'épargne', + 'opt_group_sharedAsset' => 'Comptes d\'actifs partagés', + 'opt_group_ccAsset' => 'Cartes de crédit', + 'opt_group_cashWalletAsset' => 'Porte-monnaie', + 'opt_group_expense_account' => 'Comptes de dépenses', + 'opt_group_revenue_account' => 'Comptes de recettes', + 'opt_group_l_Loan' => 'Passif: Prêt', + 'opt_group_cash_account' => 'Compte de trésorerie', + 'opt_group_l_Debt' => 'Passif: Dette', + 'opt_group_l_Mortgage' => 'Passif: Prêt hypothécaire', + 'opt_group_l_Credit card' => 'Passif: Carte de crédit', + 'notes' => 'Notes', + 'unknown_journal_error' => 'Impossible de stocker l\'opération. Veuillez vérifier les fichiers journaux.', + 'attachment_not_found' => 'Cette pièce jointe est introuvable.', + 'journal_link_bill' => 'Cette opération est liée à la facture :name. Pour supprimer l\'association, décocher la case. Utilisez les règles pour la connecter à une autre facture.', + 'transaction_stored_link' => 'L\'opération n°{ID} ("{title}") a été enregistrée.', + 'transaction_new_stored_link' => 'L\'opération n°{ID} a été enregistrée.', + 'transaction_updated_link' => 'L\'opération n°{ID} ("{title}") a été mise à jour.', + 'transaction_updated_no_changes' => 'L\'opération n°{ID} ("{title}") n\'a pas été modifiée.', + 'first_split_decides' => 'La première séparation détermine la valeur de ce champ', + 'first_split_overrules_source' => 'La première séparation peut remplacer le compte source', + 'first_split_overrules_destination' => 'La première séparation peut remplacer le compte de destination', + 'spent_x_of_y' => 'Dépensé {amount} sur {total}', // new user: - 'welcome' => 'Bienvenue sur Firefly III !', - 'submit' => 'Soumettre', - 'submission' => 'Soumission', - 'submit_yes_really' => 'Soumettre (je sais ce que je fais)', - 'getting_started' => 'Mise en route', - 'to_get_started' => 'Vous venez d\'installer Firefly III avec succès. Pour commencer avec cet outil, entrez le nom de votre banque et le solde de votre compte courant principal. Ne vous inquiétez pas si vous avez plusieurs comptes. Vous pourrez les ajouter plus tard. Firefly III a simplement besoin de quelque chose pour commencer.', - 'savings_balance_text' => 'Firefly III créera automatiquement un compte d\'épargne pour vous. Par défaut, il n\'y aura pas d\'argent sur ce compte d\'épargne, mais si vous indiquez un montant à Firefly III, il l\'enregistrera en tant que solde.', - 'finish_up_new_user' => 'C\'est tout ! Vous pouvez continuer en appuyant sur Envoyer. Vous passerez à l\'index de Firefly III.', - 'stored_new_accounts_new_user' => 'Super ! Vos nouveaux comptes ont été créés.', - 'set_preferred_language' => 'Si vous préférez utiliser Firefly III dans une autre langue, veuillez l\'indiquer ici.', - 'language' => 'Langue', - 'new_savings_account' => ':bank_name compte d\'épargne', - 'cash_wallet' => 'Porte-monnaie', - 'currency_not_present' => 'Si la devise que vous utilisez habituellement n\'est pas répertoriée, ne vous inquiétez pas. Vous pouvez créer vos propres devises dans Options > Devises.', + 'welcome' => 'Bienvenue sur Firefly III !', + 'submit' => 'Soumettre', + 'submission' => 'Soumission', + 'submit_yes_really' => 'Soumettre (je sais ce que je fais)', + 'getting_started' => 'Mise en route', + 'to_get_started' => 'Vous venez d\'installer Firefly III avec succès. Pour commencer avec cet outil, entrez le nom de votre banque et le solde de votre compte courant principal. Ne vous inquiétez pas si vous avez plusieurs comptes. Vous pourrez les ajouter plus tard. Firefly III a simplement besoin de quelque chose pour commencer.', + 'savings_balance_text' => 'Firefly III créera automatiquement un compte d\'épargne pour vous. Par défaut, il n\'y aura pas d\'argent sur ce compte d\'épargne, mais si vous indiquez un montant à Firefly III, il l\'enregistrera en tant que solde.', + 'finish_up_new_user' => 'C\'est tout ! Vous pouvez continuer en appuyant sur Envoyer. Vous passerez à l\'index de Firefly III.', + 'stored_new_accounts_new_user' => 'Super ! Vos nouveaux comptes ont été créés.', + 'set_preferred_language' => 'Si vous préférez utiliser Firefly III dans une autre langue, veuillez l\'indiquer ici.', + 'language' => 'Langue', + 'new_savings_account' => ':bank_name compte d\'épargne', + 'cash_wallet' => 'Porte-monnaie', + 'currency_not_present' => 'Si la devise que vous utilisez habituellement n\'est pas répertoriée, ne vous inquiétez pas. Vous pouvez créer vos propres devises dans Options > Devises.', // home page: - 'transaction_table_description' => 'Une table contenant vos opérations', - 'opposing_account' => 'Compte opposé', - 'yourAccounts' => 'Vos comptes', - 'your_accounts' => 'Aperçu de votre compte', - 'category_overview' => 'Aperçu des catégories', - 'expense_overview' => 'Aperçu des comptes de dépense', - 'revenue_overview' => 'Aperçu des comptes de revenu', - 'budgetsAndSpending' => 'Budgets et dépenses', - 'budgets_and_spending' => 'Budgets et dépenses', - 'go_to_budget' => 'Aller au budget "{budget}"', - 'go_to_deposits' => 'Aller aux dépôts', - 'go_to_expenses' => 'Aller aux dépenses', - 'savings' => 'Épargne', - 'newWithdrawal' => 'Nouvelle dépense', - 'newDeposit' => 'Nouveau dépôt', - 'newTransfer' => 'Nouveau transfert', - 'bills_to_pay' => 'Factures à payer', - 'per_day' => 'Par jour', - 'left_to_spend_per_day' => 'Reste à dépenser par jour', - 'bills_paid' => 'Factures payées', - 'custom_period' => 'Période personnalisée', - 'reset_to_current' => 'Réinitialiser à la période en cours', - 'select_period' => 'Sélectionnez une période', + 'transaction_table_description' => 'Une table contenant vos opérations', + 'opposing_account' => 'Compte opposé', + 'yourAccounts' => 'Vos comptes', + 'your_accounts' => 'Aperçu de votre compte', + 'category_overview' => 'Aperçu des catégories', + 'expense_overview' => 'Aperçu des comptes de dépense', + 'revenue_overview' => 'Aperçu des comptes de revenu', + 'budgetsAndSpending' => 'Budgets et dépenses', + 'budgets_and_spending' => 'Budgets et dépenses', + 'go_to_budget' => 'Aller au budget "{budget}"', + 'go_to_deposits' => 'Aller aux dépôts', + 'go_to_expenses' => 'Aller aux dépenses', + 'savings' => 'Épargne', + 'newWithdrawal' => 'Nouvelle dépense', + 'newDeposit' => 'Nouveau dépôt', + 'newTransfer' => 'Nouveau transfert', + 'bills_to_pay' => 'Factures à payer', + 'per_day' => 'Par jour', + 'left_to_spend_per_day' => 'Reste à dépenser par jour', + 'bills_paid' => 'Factures payées', + 'custom_period' => 'Période personnalisée', + 'reset_to_current' => 'Réinitialiser à la période en cours', + 'select_period' => 'Sélectionnez une période', // menu and titles, should be recycled as often as possible: - 'currency' => 'Devise', - 'preferences' => 'Préférences', - 'logout' => 'Se déconnecter', - 'logout_other_sessions' => 'Déconnecter toutes les autres sessions', - 'toggleNavigation' => 'Activer navigation', - 'searchPlaceholder' => 'Rechercher...', - 'version' => 'Version', - 'dashboard' => 'Tableau de bord', - 'income_and_expense' => 'Revenus et dépenses', - 'all_money' => 'Tout votre argent', - 'unknown_source_plain' => 'Compte source inconnu', - 'unknown_dest_plain' => 'Compte de destination inconnu', - 'unknown_any_plain' => 'Compte inconnu', - 'unknown_budget_plain' => 'Pas de budget', - 'available_budget' => 'Budget disponible ({currency})', - 'currencies' => 'Devises', - 'activity' => 'Activité', - 'usage' => 'Utilisation', - 'accounts' => 'Comptes', - 'Asset account' => 'Compte d’actif', - 'Default account' => 'Compte d’actif', - 'Expense account' => 'Compte de dépenses', - 'Revenue account' => 'Compte de recettes', - 'Initial balance account' => 'Balance initiale', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Dette', - 'account_type_Loan' => 'Prêt', - 'account_type_Mortgage' => 'Prêt hypothécaire', - 'account_type_debt' => 'Dette', - 'account_type_loan' => 'Emprunt', - 'account_type_mortgage' => 'Prêt immobilier', - 'account_type_Credit card' => 'Carte de crédit', - 'credit_card_type_monthlyFull' => 'Paiement complet tous les mois', - 'liability_direction_credit' => 'On me doit cette dette', - 'liability_direction_debit' => 'Je dois cette dette à quelqu\'un d\'autre', - 'liability_direction_credit_short' => 'Emprunteur', - 'liability_direction_debit_short' => 'Prêteur', - 'liability_direction__short' => 'Inconnu', - 'liability_direction_null_short' => 'Inconnu', - 'Liability credit' => 'Passif de crédit', - 'budgets' => 'Budgets', - 'tags' => 'Tags', - 'reports' => 'Rapports', - 'transactions' => 'Opérations', - 'expenses' => 'Dépenses', - 'income' => 'Recette / revenu', - 'transfers' => 'Transferts', - 'moneyManagement' => 'Gestion financière', - 'money_management' => 'Gestion financière', - 'tools' => 'Outils', - 'piggyBanks' => 'Tirelires', - 'piggy_banks' => 'Tirelires', - 'amount_x_of_y' => '{current} sur {total}', - 'bills' => 'Factures', - 'withdrawal' => 'Dépense', - 'opening_balance' => 'Solde d\'ouverture', - 'deposit' => 'Dépôt', - 'account' => 'Compte', - 'transfer' => 'Transfert', - 'Withdrawal' => 'Dépense', - 'Deposit' => 'Dépôt', - 'Transfer' => 'Transfert', - 'bill' => 'Facture', - 'yes' => 'Oui', - 'no' => 'Non', - 'amount' => 'Montant', - 'overview' => 'Vue globale', - 'saveOnAccount' => 'Mis de côté sur le compte', - 'unknown' => 'Inconnu', - 'monthly' => 'Mensuel', - 'profile' => 'Profil', - 'errors' => 'Erreurs', - 'debt_start_date' => 'Date de début de la dette', - 'debt_start_amount' => 'Montant initial de la dette', - 'debt_start_amount_help' => 'Il est toujours préférable de définir cette valeur à un montant négatif. Lisez les pages d\'aide (icône (?) en haut à droite) pour plus d\'informations.', - 'interest_period_help' => 'Ce champ est purement cosmétique et ne sera pas calculé pour vous. Il se trouve que les banques ont chacune leur façon de faire et Firefly III ne fournira pas de bonne solution.', - 'store_new_liabilities_account' => 'Enregistrer un nouveau passif', - 'edit_liabilities_account' => 'Modifier le passif ":name"', - 'financial_control' => 'Gestion des finances', - 'accounting' => 'Comptabilité', - 'automation' => 'Automatisation', - 'others' => 'Autres', - 'classification' => 'Classification', - 'store_transaction' => 'Enregistrer l\'opération', + 'currency' => 'Devise', + 'preferences' => 'Préférences', + 'logout' => 'Se déconnecter', + 'logout_other_sessions' => 'Déconnecter toutes les autres sessions', + 'toggleNavigation' => 'Activer navigation', + 'searchPlaceholder' => 'Rechercher...', + 'version' => 'Version', + 'dashboard' => 'Tableau de bord', + 'income_and_expense' => 'Revenus et dépenses', + 'all_money' => 'Tout votre argent', + 'unknown_source_plain' => 'Compte source inconnu', + 'unknown_dest_plain' => 'Compte de destination inconnu', + 'unknown_any_plain' => 'Compte inconnu', + 'unknown_budget_plain' => 'Pas de budget', + 'available_budget' => 'Budget disponible ({currency})', + 'currencies' => 'Devises', + 'activity' => 'Activité', + 'usage' => 'Utilisation', + 'accounts' => 'Comptes', + 'Asset account' => 'Compte d’actif', + 'Default account' => 'Compte d’actif', + 'Expense account' => 'Compte de dépenses', + 'Revenue account' => 'Compte de recettes', + 'Initial balance account' => 'Balance initiale', + 'account_type_Asset account' => 'Compte d’actif', + 'account_type_Expense account' => 'Compte de dépenses', + 'account_type_Revenue account' => 'Compte de recettes', + 'account_type_Debt' => 'Dette', + 'account_type_Loan' => 'Prêt', + 'account_type_Mortgage' => 'Prêt hypothécaire', + 'account_type_debt' => 'Dette', + 'account_type_loan' => 'Emprunt', + 'account_type_mortgage' => 'Prêt immobilier', + 'account_type_Credit card' => 'Carte de crédit', + 'credit_card_type_monthlyFull' => 'Paiement complet tous les mois', + 'liability_direction_credit' => 'On me doit cette dette', + 'liability_direction_debit' => 'Je dois cette dette à quelqu\'un d\'autre', + 'liability_direction_credit_short' => 'Emprunteur', + 'liability_direction_debit_short' => 'Prêteur', + 'liability_direction__short' => 'Inconnu', + 'liability_direction_null_short' => 'Inconnu', + 'Liability credit' => 'Passif de crédit', + 'budgets' => 'Budgets', + 'tags' => 'Tags', + 'reports' => 'Rapports', + 'transactions' => 'Opérations', + 'expenses' => 'Dépenses', + 'income' => 'Recette / revenu', + 'transfers' => 'Transferts', + 'moneyManagement' => 'Gestion financière', + 'money_management' => 'Gestion financière', + 'tools' => 'Outils', + 'piggyBanks' => 'Tirelires', + 'piggy_banks' => 'Tirelires', + 'amount_x_of_y' => '{current} sur {total}', + 'bills' => 'Factures', + 'withdrawal' => 'Dépense', + 'opening_balance' => 'Solde d\'ouverture', + 'deposit' => 'Dépôt', + 'account' => 'Compte', + 'transfer' => 'Transfert', + 'Withdrawal' => 'Dépense', + 'Deposit' => 'Dépôt', + 'Transfer' => 'Transfert', + 'bill' => 'Facture', + 'yes' => 'Oui', + 'no' => 'Non', + 'amount' => 'Montant', + 'overview' => 'Vue globale', + 'saveOnAccount' => 'Mis de côté sur le compte', + 'unknown' => 'Inconnu', + 'monthly' => 'Mensuel', + 'profile' => 'Profil', + 'errors' => 'Erreurs', + 'debt_start_date' => 'Date de début de la dette', + 'debt_start_amount' => 'Montant initial de la dette', + 'debt_start_amount_help' => 'Il est toujours préférable de définir cette valeur à un montant négatif. Lisez les pages d\'aide (icône (?) en haut à droite) pour plus d\'informations.', + 'interest_period_help' => 'Ce champ est purement cosmétique et ne sera pas calculé pour vous. Il se trouve que les banques ont chacune leur façon de faire et Firefly III ne fournira pas de bonne solution.', + 'store_new_liabilities_account' => 'Enregistrer un nouveau passif', + 'edit_liabilities_account' => 'Modifier le passif ":name"', + 'financial_control' => 'Gestion des finances', + 'accounting' => 'Comptabilité', + 'automation' => 'Automatisation', + 'others' => 'Autres', + 'classification' => 'Classification', + 'store_transaction' => 'Enregistrer l\'opération', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Rapport financier par défaut entre le :start et le :end', - 'report_audit' => 'Aperçu de l\'historique des opérations entre le :start et le :end', - 'report_category' => 'Rapport de catégorie entre :start et :end', - 'report_double' => 'Rapport de compte de dépenses / recettes entre le :start et le :end', - 'report_budget' => 'Rapport du budget entre le :start et le :end', - 'report_tag' => 'Rapport de tag entre le :start et le :end', - 'quick_link_reports' => 'Liens rapides', - 'quick_link_examples' => 'Voici quelques exemples de liens pour vous aider à démarrer. Consultez les pages d\'aide en cliquant le bouton (?) pour plus d\'informations sur les rapports et les mots magiques que vous pouvez utiliser.', - 'quick_link_default_report' => 'Rapport financier par défaut', - 'quick_link_audit_report' => 'Historique des opérations', - 'report_this_month_quick' => 'Mois en cours, tous les comptes', - 'report_last_month_quick' => 'Mois dernier, tous les comptes', - 'report_this_year_quick' => 'Année en cours, tous les comptes', - 'report_this_fiscal_year_quick' => 'Année fiscale en cours, tous les comptes', - 'report_all_time_quick' => 'Tous les temps, tous les comptes', - 'reports_can_bookmark' => 'N’oubliez pas que les rapports peuvent être mis en favori.', - 'incomeVsExpenses' => 'Revenus vs dépenses', - 'accountBalances' => 'Soldes du compte', - 'balanceStart' => 'Solde au début de la période', - 'balanceEnd' => 'Solde à la fin de la période', - 'splitByAccount' => 'Ventilé par compte', - 'coveredWithTags' => 'Recouvert de tags', - 'leftInBudget' => 'Budget restant', - 'left_in_debt' => 'Montant dû', - 'sumOfSums' => 'Somme des montants', - 'noCategory' => '(aucune catégorie)', - 'notCharged' => 'Pas (encore) facturé', - 'inactive' => 'Inactif', - 'active' => 'Actif', - 'difference' => 'Différence', - 'money_flowing_in' => 'Entrée', - 'money_flowing_out' => 'Sortie', - 'topX' => ':number premiers', - 'show_full_list' => 'Afficher la liste complète', - 'show_only_top' => 'Afficher uniquement :number premiers', - 'report_type' => 'Type de rapport', - 'report_type_default' => 'Rapport financier par défaut', - 'report_type_audit' => 'Historique des opérations', - 'report_type_category' => 'Rapport par catégories', - 'report_type_budget' => 'Rapport du budget', - 'report_type_tag' => 'Rapport de tag', - 'report_type_double' => 'Rapport de compte de dépenses/recettes', - 'more_info_help' => 'Vous trouverez plus d’informations sur ces différents types de rapports dans les pages d’aide. Appuyez sur l’icône (?) dans le coin supérieur droit.', - 'report_included_accounts' => 'Comptes inclus', - 'report_date_range' => 'Intervalle de dates', - 'report_preset_ranges' => 'Intervalles pré-configurés', - 'shared' => 'Partagé', - 'fiscal_year' => 'Année fiscale', - 'income_entry' => 'Revenus du compte ":name" entre le :start et le :end', - 'expense_entry' => 'Dépenses du compte ":name" entre le :start et le :end', - 'category_entry' => 'Dépenses et revenus dans la catégorie ":name" entre le :start et le :end', - 'budget_spent_amount' => 'Dépenses dans le budget ":budget" entre le :start et le :end', - 'balance_amount' => 'Dépenses dans le budget ":budget" payé depuis le compte ":account" entre le :start et le :end', - 'no_audit_activity' => 'Aucune activité n\'a été enregistrée sur le compte :account_name entre le :start et le :end.', - 'audit_end_balance' => 'Solde du compte de :account_name à la fin de :end était: :balance', - 'reports_extra_options' => 'Options supplémentaires', - 'report_has_no_extra_options' => 'Ce rapport n\'a pas d\'options supplémentaires', - 'reports_submit' => 'Afficher le rapport', - 'end_after_start_date' => 'La date de fin du rapport doit être postérieure à la date de début.', - 'select_category' => 'Sélectionner la(les) catégorie(s)', - 'select_budget' => 'Sélectionnez le(s) budget(s).', - 'select_tag' => 'Sélectionnez le·s tag·s.', - 'income_per_category' => 'Revenus par catégorie', - 'expense_per_category' => 'Dépenses par catégorie', - 'expense_per_budget' => 'Dépenses par budget', - 'income_per_account' => 'Revenus par compte', - 'expense_per_account' => 'Dépenses par compte', - 'expense_per_tag' => 'Dépenses par tag', - 'income_per_tag' => 'Revenus par tag', - 'include_expense_not_in_budget' => 'Les dépenses incluses ne sont pas dans le(s) budget(s) sélectionné(s)', - 'include_expense_not_in_account' => 'Les dépenses incluses ne sont pas dans le(s) compte(s) sélectionné(s)', - 'include_expense_not_in_category' => 'Les dépenses incluses ne sont pas dans la(les) catégorie(s) sélectionnée(s)', - 'include_income_not_in_category' => 'Les revenus inclus ne sont pas dans la(les) catégorie(s) sélectionnée(s)', - 'include_income_not_in_account' => 'Revenus inclus non compris dans le(s) compte(s) sélectionné(s)', - 'include_income_not_in_tags' => 'Les revenus inclus ne sont pas dans la (les) catégorie·s sélectionnée·s', - 'include_expense_not_in_tags' => 'Les dépenses incluses ne sont pas dans le·s tag·s sélectionnée·s', - 'everything_else' => 'Tout le reste', - 'income_and_expenses' => 'Recettes et dépenses', - 'spent_average' => 'Dépenses (moyenne)', - 'income_average' => 'Revenus (moyenne)', - 'transaction_count' => 'Nombre d\'opérations', - 'average_spending_per_account' => 'Dépenses moyennes par compte', - 'average_income_per_account' => 'Revenus moyens par compte', - 'total' => 'Total', - 'description' => 'Description', - 'sum_of_period' => 'Somme pour la période', - 'average_in_period' => 'Moyenne pour la période', - 'account_role_defaultAsset' => 'Compte d\'actif par défaut', - 'account_role_sharedAsset' => 'Compte d\'actif partagé', - 'account_role_savingAsset' => 'Compte d’épargne', - 'account_role_ccAsset' => 'Carte de crédit', - 'account_role_cashWalletAsset' => 'Porte-monnaie', - 'budget_chart_click' => 'Cliquez sur le nom du budget dans le tableau ci-dessus pour voir un graphique.', - 'category_chart_click' => 'Cliquez sur un nom de catégorie dans le tableau ci-dessus pour voir un graphique.', - 'in_out_accounts' => 'Gagné et dépensé par compte', - 'in_out_accounts_per_asset' => 'Gagné et dépensé (par compte d\'actif)', - 'in_out_per_category' => 'Gagné et dépensé par catégorie', - 'out_per_budget' => 'Dépensé par budget', - 'select_expense_revenue' => 'Sélectionner le compte de dépenses / recettes', - 'multi_currency_report_sum' => 'Cette liste contenant des comptes dans des devises différentes, les sommes que vous voyez peuvent ne pas faire sens. Le rapport sera lui toujours généré dans votre devise par défaut.', - 'sum_in_default_currency' => 'La somme sera toujours dans votre devise par défaut.', - 'net_filtered_prefs' => 'Ce graphique n’inclura jamais les comptes dont l\'option « inclure dans l\'avoir net » n\'est pas cochée.', + 'report_default' => 'Rapport financier par défaut entre le :start et le :end', + 'report_audit' => 'Aperçu de l\'historique des opérations entre le :start et le :end', + 'report_category' => 'Rapport de catégorie entre :start et :end', + 'report_double' => 'Rapport de compte de dépenses / recettes entre le :start et le :end', + 'report_budget' => 'Rapport du budget entre le :start et le :end', + 'report_tag' => "Rapport de tag entre le\u{a0}:start et le :end", + 'quick_link_reports' => 'Liens rapides', + 'quick_link_examples' => 'Voici quelques exemples de liens pour vous aider à démarrer. Consultez les pages d\'aide en cliquant le bouton (?) pour plus d\'informations sur les rapports et les mots magiques que vous pouvez utiliser.', + 'quick_link_default_report' => 'Rapport financier par défaut', + 'quick_link_audit_report' => 'Historique des opérations', + 'report_this_month_quick' => 'Mois en cours, tous les comptes', + 'report_last_month_quick' => 'Mois dernier, tous les comptes', + 'report_this_year_quick' => 'Année en cours, tous les comptes', + 'report_this_fiscal_year_quick' => 'Année fiscale en cours, tous les comptes', + 'report_all_time_quick' => 'Tous les temps, tous les comptes', + 'reports_can_bookmark' => 'N’oubliez pas que les rapports peuvent être mis en favori.', + 'incomeVsExpenses' => 'Revenus vs dépenses', + 'accountBalances' => 'Soldes du compte', + 'balanceStart' => 'Solde au début de la période', + 'balanceEnd' => 'Solde à la fin de la période', + 'splitByAccount' => 'Séparation par compte', + 'coveredWithTags' => 'Couvert par des tags', + 'leftInBudget' => 'Budget restant', + 'left_in_debt' => 'Montant dû', + 'sumOfSums' => 'Somme des montants', + 'noCategory' => '(aucune catégorie)', + 'notCharged' => 'Pas (encore) facturé', + 'inactive' => 'Inactif', + 'active' => 'Actif', + 'difference' => 'Différence', + 'money_flowing_in' => 'Entrée', + 'money_flowing_out' => 'Sortie', + 'topX' => ':number premiers', + 'show_full_list' => 'Afficher la liste complète', + 'show_only_top' => 'Afficher uniquement :number premiers', + 'report_type' => 'Type de rapport', + 'report_type_default' => 'Rapport financier par défaut', + 'report_type_audit' => 'Historique des opérations', + 'report_type_category' => 'Rapport par catégories', + 'report_type_budget' => 'Rapport du budget', + 'report_type_tag' => 'Rapport de tag', + 'report_type_double' => 'Rapport de compte de dépenses/recettes', + 'more_info_help' => 'Vous trouverez plus d’informations sur ces différents types de rapports dans les pages d’aide. Appuyez sur l’icône (?) dans le coin supérieur droit.', + 'report_included_accounts' => 'Comptes inclus', + 'report_date_range' => 'Intervalle de dates', + 'report_preset_ranges' => 'Intervalles pré-configurés', + 'shared' => 'Partagé', + 'fiscal_year' => 'Année fiscale', + 'income_entry' => 'Revenus du compte ":name" entre le :start et le :end', + 'expense_entry' => 'Dépenses du compte ":name" entre le :start et le :end', + 'category_entry' => 'Dépenses et revenus dans la catégorie ":name" entre le :start et le :end', + 'budget_spent_amount' => 'Dépenses dans le budget ":budget" entre le :start et le :end', + 'balance_amount' => 'Dépenses dans le budget ":budget" payé depuis le compte ":account" entre le :start et le :end', + 'no_audit_activity' => 'Aucune activité n\'a été enregistrée sur le compte :account_name entre le :start et le :end.', + 'audit_end_balance' => 'Le solde du compte :account_name à la fin du :end était de : :balance', + 'reports_extra_options' => 'Options supplémentaires', + 'report_has_no_extra_options' => 'Ce rapport n\'a pas d\'options supplémentaires', + 'reports_submit' => 'Afficher le rapport', + 'end_after_start_date' => 'La date de fin du rapport doit être postérieure à la date de début.', + 'select_category' => 'Sélectionner la(les) catégorie(s)', + 'select_budget' => 'Sélectionnez le(s) budget(s).', + 'select_tag' => 'Sélectionnez le·s tag·s.', + 'income_per_category' => 'Revenus par catégorie', + 'expense_per_category' => 'Dépenses par catégorie', + 'expense_per_budget' => 'Dépenses par budget', + 'income_per_account' => 'Revenus par compte', + 'expense_per_account' => 'Dépenses par compte', + 'expense_per_tag' => 'Dépenses par tag', + 'income_per_tag' => 'Revenus par tag', + 'include_expense_not_in_budget' => 'Les dépenses incluses ne sont pas dans le(s) budget(s) sélectionné(s)', + 'include_expense_not_in_account' => 'Les dépenses incluses ne sont pas dans le(s) compte(s) sélectionné(s)', + 'include_expense_not_in_category' => 'Les dépenses incluses ne sont pas dans la(les) catégorie(s) sélectionnée(s)', + 'include_income_not_in_category' => 'Les revenus inclus ne sont pas dans la(les) catégorie(s) sélectionnée(s)', + 'include_income_not_in_account' => 'Revenus inclus non compris dans le(s) compte(s) sélectionné(s)', + 'include_income_not_in_tags' => 'Les revenus inclus ne sont pas dans la (les) catégorie·s sélectionnée·s', + 'include_expense_not_in_tags' => 'Les dépenses incluses ne sont pas dans le·s tag·s sélectionnée·s', + 'everything_else' => 'Tout le reste', + 'income_and_expenses' => 'Recettes et dépenses', + 'spent_average' => 'Dépenses (moyenne)', + 'income_average' => 'Revenus (moyenne)', + 'transaction_count' => 'Nombre d\'opérations', + 'average_spending_per_account' => 'Dépenses moyennes par compte', + 'average_income_per_account' => 'Revenus moyens par compte', + 'total' => 'Total', + 'description' => 'Description', + 'sum_of_period' => 'Somme pour la période', + 'average_in_period' => 'Moyenne pour la période', + 'account_role_defaultAsset' => 'Compte d\'actif par défaut', + 'account_role_sharedAsset' => 'Compte d\'actif partagé', + 'account_role_savingAsset' => 'Compte d’épargne', + 'account_role_ccAsset' => 'Carte de crédit', + 'account_role_cashWalletAsset' => 'Porte-monnaie', + 'budget_chart_click' => 'Cliquez sur le nom du budget dans le tableau ci-dessus pour voir un graphique.', + 'category_chart_click' => 'Cliquez sur un nom de catégorie dans le tableau ci-dessus pour voir un graphique.', + 'in_out_accounts' => 'Gagné et dépensé par compte', + 'in_out_accounts_per_asset' => 'Gagné et dépensé (par compte d\'actif)', + 'in_out_per_category' => 'Gagné et dépensé par catégorie', + 'out_per_budget' => 'Dépensé par budget', + 'select_expense_revenue' => 'Sélectionner le compte de dépenses / recettes', + 'multi_currency_report_sum' => 'Cette liste contenant des comptes dans des devises différentes, les sommes que vous voyez peuvent ne pas faire sens. Le rapport sera lui toujours généré dans votre devise par défaut.', + 'sum_in_default_currency' => 'La somme sera toujours dans votre devise par défaut.', + 'net_filtered_prefs' => "Ce graphique n’inclura jamais les comptes dont l'option «\u{a0}inclure dans l'avoir net » n'est pas cochée.", -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Graphique', - 'month' => 'Mois', - 'budget' => 'Budget', - 'spent' => 'Dépensé', - 'spent_capped' => 'Dépensé (plafonné)', - 'spent_in_budget' => 'Dépensé dans le budget', - 'left_to_spend' => 'Reste à dépenser', - 'earned' => 'Gagné', - 'overspent' => 'Trop dépensé', - 'left' => 'Reste', - 'max-amount' => 'Montant maximum', - 'min-amount' => 'Montant minimum', - 'journal-amount' => 'Entrée de la facture courante', - 'name' => 'Nom', - 'date' => 'Date', - 'date_and_time' => 'Date et heure', - 'time' => 'Heure', - 'paid' => 'Payé', - 'unpaid' => 'Impayé', - 'day' => 'Jour', - 'budgeted' => 'Budgétisé', - 'period' => 'Période', - 'balance' => 'Solde', - 'in_out_period' => 'Entrée + sortie de la période', - 'sum' => 'Somme', - 'summary' => 'Résumé', - 'average' => 'Moyenne', - 'balanceFor' => 'Solde pour :name', - 'no_tags' => '(pas de mot-clé)', + 'chart' => 'Graphique', + 'month' => 'Mois', + 'budget' => 'Budget', + 'spent' => 'Dépensé', + 'spent_capped' => 'Dépensé (plafonné)', + 'spent_in_budget' => 'Dépensé dans le budget', + 'left_to_spend' => 'Reste à dépenser', + 'earned' => 'Gagné', + 'overspent' => 'Trop dépensé', + 'left' => 'Reste', + 'max-amount' => 'Montant maximum', + 'min-amount' => 'Montant minimum', + 'journal-amount' => 'Entrée de la facture courante', + 'name' => 'Nom', + 'date' => 'Date', + 'date_and_time' => 'Date et heure', + 'time' => 'Heure', + 'paid' => 'Payé', + 'unpaid' => 'Impayé', + 'day' => 'Jour', + 'budgeted' => 'Budgétisé', + 'period' => 'Période', + 'balance' => 'Solde', + 'in_out_period' => 'Entrée + sortie de la période', + 'sum' => 'Somme', + 'summary' => 'Résumé', + 'average' => 'Moyenne', + 'balanceFor' => 'Solde pour :name', + 'no_tags' => '(pas de mot-clé)', + 'nothing_found' => '(aucun résultat)', // piggy banks: - 'event_history' => 'Historique des événements', - 'add_money_to_piggy' => 'Ajouter de l’argent à la tirelire ":name"', - 'piggy_bank' => 'Tirelire', - 'new_piggy_bank' => 'Nouvelle tirelire', - 'store_piggy_bank' => 'Créer une nouvelle tirelire', - 'stored_piggy_bank' => 'Créer une nouvelle tirelire ":name"', - 'account_status' => 'État du compte', - 'left_for_piggy_banks' => 'Reste pour les tirelires', - 'sum_of_piggy_banks' => 'Somme des tirelires', - 'saved_so_far' => 'Mis de côté jusqu\'à présent', - 'left_to_save' => 'Reste à mettre de côté', - 'suggested_amount' => 'Montant mensuel suggéré à économiser', - 'add_money_to_piggy_title' => 'Ajouter de l’argent à la tirelire ":name"', - 'remove_money_from_piggy_title' => 'Retirer l’argent de la tirelire ":name"', - 'add' => 'Ajouter', - 'no_money_for_piggy' => 'Vous n\'avez pas d\'argent à placer dans cette tirelire.', - 'suggested_savings_per_month' => 'Suggéré par mois', + 'event_history' => 'Historique des événements', + 'add_money_to_piggy' => 'Ajouter de l’argent à la tirelire ":name"', + 'piggy_bank' => 'Tirelire', + 'new_piggy_bank' => 'Nouvelle tirelire', + 'store_piggy_bank' => 'Créer une nouvelle tirelire', + 'stored_piggy_bank' => 'Créer une nouvelle tirelire ":name"', + 'account_status' => 'État du compte', + 'left_for_piggy_banks' => 'Reste pour les tirelires', + 'sum_of_piggy_banks' => 'Somme des tirelires', + 'saved_so_far' => 'Mis de côté jusqu\'à présent', + 'left_to_save' => 'Reste à mettre de côté', + 'suggested_amount' => 'Montant mensuel suggéré à économiser', + 'add_money_to_piggy_title' => 'Ajouter de l’argent à la tirelire ":name"', + 'remove_money_from_piggy_title' => 'Retirer l’argent de la tirelire ":name"', + 'add' => 'Ajouter', + 'no_money_for_piggy' => 'Vous n\'avez pas d\'argent à placer dans cette tirelire.', + 'suggested_savings_per_month' => 'Suggéré par mois', - 'remove' => 'Enlever', - 'max_amount_add' => 'Le montant maximum que vous pouvez ajouter est', - 'max_amount_remove' => 'Le montant maximum que vous pouvez supprimer est', - 'update_piggy_button' => 'Mise à jour de la tirelire', - 'update_piggy_title' => 'Mise à jour de tirelire ":name"', - 'updated_piggy_bank' => 'Mise à jour de la tirelire ":name"', - 'details' => 'Détails', - 'events' => 'Evènements', - 'target_amount' => 'Montant cible', - 'start_date' => 'Date de début', - 'no_start_date' => 'Pas de date de début', - 'target_date' => 'Date cible', - 'no_target_date' => 'Aucune date butoir', - 'table' => 'Tableau', - 'delete_piggy_bank' => 'Supprimer la tirelire ":name"', - 'cannot_add_amount_piggy' => 'Impossible d\'ajouter :amount à ":name".', - 'cannot_remove_from_piggy' => 'Impossible de supprimer :amount à ":name".', - 'deleted_piggy_bank' => 'Tirelire ":name" supprimée', - 'added_amount_to_piggy' => 'Ajouté :amount à ":name"', - 'removed_amount_from_piggy' => ':amount retiré de ":name"', - 'piggy_events' => 'Tirelires associées', + 'remove' => 'Enlever', + 'max_amount_add' => 'Le montant maximum que vous pouvez ajouter est', + 'max_amount_remove' => 'Le montant maximum que vous pouvez supprimer est', + 'update_piggy_button' => 'Mise à jour de la tirelire', + 'update_piggy_title' => 'Mise à jour de la tirelire ":name"', + 'updated_piggy_bank' => 'Tirelire ":name" mise à jour', + 'details' => 'Détails', + 'events' => 'Evènements', + 'target_amount' => 'Montant cible', + 'start_date' => 'Date de début', + 'no_start_date' => 'Pas de date de début', + 'target_date' => 'Date cible', + 'no_target_date' => 'Aucune date butoir', + 'table' => 'Tableau', + 'delete_piggy_bank' => 'Supprimer la tirelire ":name"', + 'cannot_add_amount_piggy' => "Impossible d'ajouter\u{a0}:amount à \":name\".", + 'cannot_remove_from_piggy' => "Impossible de supprimer\u{a0}:amount à \":name\".", + 'deleted_piggy_bank' => 'Tirelire ":name" supprimée', + 'added_amount_to_piggy' => "Ajouté\u{a0}:amount à \":name\"", + 'removed_amount_from_piggy' => ':amount retiré de ":name"', + 'piggy_events' => 'Tirelires associées', // tags - 'delete_tag' => 'Supprimer le tag ":tag"', - 'deleted_tag' => 'Tag ":tag" supprimé', - 'new_tag' => 'Créer un nouveau tag', - 'edit_tag' => 'Modifier le tag ":tag"', - 'updated_tag' => 'Mise à jour de la balise ":tag"', - 'created_tag' => 'Tag ":tag" a été créé !', + 'delete_tag' => 'Supprimer le tag ":tag"', + 'deleted_tag' => 'Tag ":tag" supprimé', + 'new_tag' => 'Créer un nouveau tag', + 'edit_tag' => 'Modifier le tag ":tag"', + 'updated_tag' => 'Mise à jour du tag ":tag"', + 'created_tag' => "Tag \" : tag\" a été créé\u{a0}!", - 'transaction_journal_information' => 'Informations sur l\'opération', - 'transaction_journal_amount' => 'Informations sur les montants', - 'transaction_journal_meta' => 'Méta informations', - 'transaction_journal_more' => 'Plus d\'informations', - 'basic_journal_information' => 'Informations de base sur l\'opération', - 'transaction_journal_extra' => 'Informations supplémentaires', - 'att_part_of_journal' => 'Stocké dans ":journal"', - 'total_amount' => 'Montant total', - 'number_of_decimals' => 'Nombre de décimales', + 'transaction_journal_information' => 'Informations sur l\'opération', + 'transaction_journal_amount' => 'Informations sur les montants', + 'transaction_journal_meta' => 'Méta informations', + 'transaction_journal_more' => 'Plus d\'informations', + 'basic_journal_information' => 'Informations de base sur l\'opération', + 'transaction_journal_extra' => 'Informations supplémentaires', + 'att_part_of_journal' => 'Stocké dans ":journal"', + 'total_amount' => 'Montant total', + 'number_of_decimals' => 'Nombre de décimales', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'L\'invitation à ":address" a déjà été utilisée.', - 'invite_is_deleted' => 'L\'invitation à ":address" a été supprimée.', - 'invite_new_user_title' => 'Inviter un nouvel utilisateur', - 'invite_new_user_text' => 'En tant qu\'administrateur, vous pouvez inviter des utilisateurs à s\'inscrire sur votre administration Firefly III. En partageant avec eux le lien direct, ils seront en mesure de créer un compte. L\'utilisateur invité et son lien d\'invitation apparaîtront dans le tableau ci-dessous. Vous êtes libre de partager le lien d\'invitation avec eux.', - 'invited_user_mail' => 'Adresse e-mail', - 'invite_user' => 'Inviter l’utilisateur', - 'user_is_invited' => 'L\'adresse e-mail ":address" a été invitée à rejoindre Firefly III', - 'administration' => 'Administration', - 'system_settings' => 'Paramètres du système', - 'code_already_used' => 'Le code d\'invitation a été utilisé', - 'user_administration' => 'Gestion des utilisateurs', - 'list_all_users' => 'Tous les utilisateurs', - 'all_users' => 'Tous les utilisateurs', - 'instance_configuration' => 'Configuration', - 'firefly_instance_configuration' => 'Options de configuration pour Firefly III', - 'setting_single_user_mode' => 'Mode utilisateur unique', - 'setting_single_user_mode_explain' => 'Par défaut, Firefly III accepte uniquement une (1) inscription : vous. Il s\'agit d\'une mesure de sécurité qui empêche les inconnus d\'utiliser votre instance, à moins que vous ne les y autorisiez. Les inscriptions futures sont bloquées. Lorsque vous désactivez cette case, d\'autres personnes peuvent utiliser votre instance, en supposant qu\'elles puissent l\'atteindre (quand elle est connectée à Internet).', - 'store_configuration' => 'Sauvegarder la configuration', - 'single_user_administration' => 'Gestion de l\'utilisateur pour :email', - 'edit_user' => 'Modifier l\'utilisateur :email', - 'hidden_fields_preferences' => 'Vous pouvez activer plus d\'options d\'opérations dans vos paramètres.', - 'user_data_information' => 'Données utilisateur', - 'user_information' => 'Informations utilisateur', - 'total_size' => 'taille totale', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget avec un montant configuré|:count budgets avec un montant configuré', - 'nr_of_rules_in_total_groups' => ':count_rules règle(s) dans :count_groups groupe(s) de règles', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'La configuration a été mise à jour', - 'setting_is_demo_site' => 'Site de démonstration', - 'setting_is_demo_site_explain' => 'Si vous cochez cette case, cette installation se comportera comme si c\'était le site de démonstration, ce qui comporte certaines limitations.', - 'block_code_bounced' => 'Rebond des emails', - 'block_code_expired' => 'Compte démo expiré', - 'no_block_code' => 'Aucune raison pour le blocage ou utilisateur non bloqué', - 'block_code_email_changed' => 'L\'utilisateur n\'a pas encore confirmé sa nouvelle adresse e-mail', - 'admin_update_email' => 'Contrairement à la page de profil, l\'utilisateur NE SERA PAS informé que son adresse email a changé !', - 'update_user' => 'Utilisateur mis à jour', - 'updated_user' => 'Les données utilisateur ont bien été modifiées.', - 'delete_user' => 'Supprimer l\'utilisateur :email', - 'user_deleted' => 'L\'utilisateur a été supprimé', - 'send_test_email' => 'Envoyer un message de test', - 'send_test_email_text' => 'Pour vérifier que votre installation est capable d\'envoyer des emails ou de poster des messages Slack, utilisez ce bouton. Vous ne verrez pas d\'erreur ici (s\'il y en a), elles seront enregistrées dans les logs. Utilisez ce bouton autant de fois que vous le voulez, il n\'y a pas de contrôle de spam. Le message sera envoyé à :email et devrait arriver sous peu.', - 'send_message' => 'Envoyer le message', - 'send_test_triggered' => 'Le test a été initié. Vérifiez votre boîte de réception (et les logs si nécessaire).', - 'give_admin_careful' => 'Les utilisateurs disposant de droits d\'administration peuvent révoquer les vôtres. Soyez prudent.', - 'admin_maintanance_title' => 'Maintenance', - 'admin_maintanance_expl' => 'Quelques boutons intéressants pour la maintenance de Firefly III', - 'admin_maintenance_clear_cache' => 'Vider le cache', - 'admin_notifications' => 'Notifications administrateur', - 'admin_notifications_expl' => 'Les notifications suivantes peuvent être activées ou désactivées par l\'administrateur. Si vous voulez également obtenir ces messages sur Slack, définissez l\'URL "webhook entrant".', - 'admin_notification_check_user_new_reg' => 'L\'utilisateur reçoit un message de bienvenue après inscription', - 'admin_notification_check_admin_new_reg' => 'Les administrateurs reçoivent une notification à l\'inscription de nouveaux utilisateurs', - 'admin_notification_check_new_version' => 'Une nouvelle version est disponible', - 'admin_notification_check_invite_created' => 'Un utilisateur est invité à rejoindre Firefly III', - 'admin_notification_check_invite_redeemed' => 'Une invitation d\'utilisateur a été utilisée', - 'all_invited_users' => 'Tous les utilisateurs invités', - 'save_notification_settings' => 'Enregistrer les paramètres', - 'notification_settings_saved' => 'Les paramètres de notification ont été enregistrés', - - - 'split_transaction_title' => 'Description de l\'opération ventilée', - 'split_transaction_title_help' => 'Si vous créez une opération ventilée, il doit y avoir une description globale pour chaque fraction de l\'opération.', - 'split_title_help' => 'Si vous créez une opération ventilée, il doit y avoir une description globale pour chaque fractions de l\'opération.', - 'you_create_transfer' => 'Vous saisissez un transfert.', - 'you_create_withdrawal' => 'Vous saisissez une dépense.', - 'you_create_deposit' => 'Vous saisissez un dépôt.', + 'invite_is_already_redeemed' => 'L\'invitation à ":address" a déjà été utilisée.', + 'invite_is_deleted' => 'L\'invitation à ":address" a été supprimée.', + 'invite_new_user_title' => 'Inviter un nouvel utilisateur', + 'invite_new_user_text' => 'En tant qu\'administrateur, vous pouvez inviter des utilisateurs à s\'inscrire sur votre administration Firefly III. En partageant avec eux le lien direct, ils seront en mesure de créer un compte. L\'utilisateur invité et son lien d\'invitation apparaîtront dans le tableau ci-dessous. Vous êtes libre de partager le lien d\'invitation avec eux.', + 'invited_user_mail' => 'Adresse e-mail', + 'invite_user' => 'Inviter l’utilisateur', + 'user_is_invited' => 'L\'adresse e-mail ":address" a été invitée à rejoindre Firefly III', + 'administration' => 'Administration', + 'system_settings' => 'Paramètres du système', + 'code_already_used' => 'Le code d\'invitation a été utilisé', + 'user_administration' => 'Gestion des utilisateurs', + 'list_all_users' => 'Tous les utilisateurs', + 'all_users' => 'Tous les utilisateurs', + 'instance_configuration' => 'Configuration', + 'firefly_instance_configuration' => 'Options de configuration pour Firefly III', + 'setting_single_user_mode' => 'Mode utilisateur unique', + 'setting_single_user_mode_explain' => 'Par défaut, Firefly III accepte uniquement une (1) inscription : vous. Il s\'agit d\'une mesure de sécurité qui empêche les inconnus d\'utiliser votre instance, à moins que vous ne les y autorisiez. Les inscriptions futures sont bloquées. Lorsque vous désactivez cette case, d\'autres personnes peuvent utiliser votre instance, en supposant qu\'elles puissent l\'atteindre (quand elle est connectée à Internet).', + 'store_configuration' => 'Sauvegarder la configuration', + 'single_user_administration' => "Gestion de l'utilisateur pour\u{a0}:email", + 'edit_user' => "Modifier l'utilisateur\u{a0}:email", + 'hidden_fields_preferences' => 'Vous pouvez activer plus d\'options d\'opérations dans vos paramètres.', + 'user_data_information' => 'Données utilisateur', + 'user_information' => 'Informations utilisateur', + 'total_size' => 'taille totale', + 'budget_or_budgets' => ':count budget|:count budgets', + 'budgets_with_limits' => ':count budget avec un montant configuré|:count budgets avec un montant configuré', + 'nr_of_rules_in_total_groups' => ':count_rules règle(s) dans :count_groups groupe(s) de règles', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'La configuration a été mise à jour', + 'setting_is_demo_site' => 'Site de démonstration', + 'setting_is_demo_site_explain' => 'Si vous cochez cette case, cette installation se comportera comme si c\'était le site de démonstration, ce qui comporte certaines limitations.', + 'block_code_bounced' => 'Rebond des emails', + 'block_code_expired' => 'Compte démo expiré', + 'no_block_code' => 'Aucune raison pour le blocage ou utilisateur non bloqué', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'L\'utilisateur n\'a pas encore confirmé sa nouvelle adresse e-mail', + 'admin_update_email' => 'Contrairement à la page de profil, l\'utilisateur NE SERA PAS informé que son adresse email a changé !', + 'update_user' => 'Utilisateur mis à jour', + 'updated_user' => 'Les données utilisateur ont bien été modifiées.', + 'delete_user' => 'Supprimer l\'utilisateur :email', + 'user_deleted' => 'L\'utilisateur a été supprimé', + 'send_test_email' => 'Envoyer un message de test', + 'send_test_email_text' => 'Pour vérifier que votre installation est capable d\'envoyer des emails ou de poster des messages Slack, utilisez ce bouton. Vous ne verrez pas d\'erreur ici (s\'il y en a), elles seront enregistrées dans les logs. Utilisez ce bouton autant de fois que vous le voulez, il n\'y a pas de contrôle de spam. Le message sera envoyé à :email et devrait arriver sous peu.', + 'send_message' => 'Envoyer le message', + 'send_test_triggered' => 'Le test a été initié. Vérifiez votre boîte de réception (et les logs si nécessaire).', + 'give_admin_careful' => 'Les utilisateurs disposant de droits d\'administration peuvent révoquer les vôtres. Soyez prudent.', + 'admin_maintanance_title' => 'Maintenance', + 'admin_maintanance_expl' => 'Quelques boutons intéressants pour la maintenance de Firefly III', + 'admin_maintenance_clear_cache' => 'Vider le cache', + 'admin_notifications' => 'Notifications administrateur', + 'admin_notifications_expl' => 'Les notifications suivantes peuvent être activées ou désactivées par l\'administrateur. Si vous voulez également obtenir ces messages sur Slack, définissez l\'URL "webhook entrant".', + 'admin_notification_check_user_new_reg' => 'L\'utilisateur reçoit un message de bienvenue après inscription', + 'admin_notification_check_admin_new_reg' => 'Les administrateurs reçoivent une notification à l\'inscription de nouveaux utilisateurs', + 'admin_notification_check_new_version' => 'Une nouvelle version est disponible', + 'admin_notification_check_invite_created' => 'Un utilisateur est invité à rejoindre Firefly III', + 'admin_notification_check_invite_redeemed' => 'Une invitation d\'utilisateur a été utilisée', + 'all_invited_users' => 'Tous les utilisateurs invités', + 'save_notification_settings' => 'Enregistrer les paramètres', + 'notification_settings_saved' => 'Les paramètres de notification ont été enregistrés', + 'split_transaction_title' => 'Description de l\'opération séparée', + 'split_transaction_title_help' => 'Si vous créez une opération séparée, il doit y avoir une description globale pour chaque fraction de l\'opération.', + 'split_title_help' => 'Si vous créez une opération séparée, il doit y avoir une description globale pour chaque fraction de l\'opération.', + 'you_create_transfer' => 'Vous saisissez un transfert.', + 'you_create_withdrawal' => 'Vous saisissez une dépense.', + 'you_create_deposit' => 'Vous saisissez un dépôt.', // links - 'journal_link_configuration' => 'Configuration des liens d\'opération', - 'create_new_link_type' => 'Créer un nouveau type de lien', - 'store_new_link_type' => 'Enregistrer un nouveau type de lien', - 'update_link_type' => 'Mettre à jour le type de lien', - 'edit_link_type' => 'Modifier le type de lien ":name"', - 'updated_link_type' => 'Type de lien mis à jour ":name"', - 'delete_link_type' => 'Supprimer le type de lien ":name"', - 'deleted_link_type' => 'Type de lien supprimé ":name"', - 'stored_new_link_type' => 'Enregistrer le nouveau type de lien ":name"', - 'cannot_edit_link_type' => 'Impossible d\'éditer le type de lien ":name"', - 'link_type_help_name' => 'Par exemple "Duplique"', - 'link_type_help_inward' => 'Par exemple "duplique"', - 'link_type_help_outward' => 'Par exemple "est dupliqué par"', - 'save_connections_by_moving' => 'Enregistrer le lien entre ces opérations en les déplaçant vers un autre type de lien :', - 'do_not_save_connection' => '(ne pas enregistrer la connexion)', - 'link_transaction' => 'Lier l\'opération', - 'link_to_other_transaction' => 'Lier cette opération à une autre opération', - 'select_transaction_to_link' => 'Sélectionnez une autre opération à laquelle lier cette opération. Les liens sont actuellement inutilisés dans Firefly III (ils sont juste montrés), mais je compte changer cela dans le futur. Utilisez le champ de recherche pour sélectionner une opération soit par titre ou par ID. Si vous voulez ajouter des types de liens personnalisés, consultez la section administration.', - 'this_transaction' => 'Cette opération', - 'transaction' => 'Opération', - 'comments' => 'Commentaires', - 'link_notes' => 'Toutes les notes que vous souhaitez enregistrer avec le lien.', - 'invalid_link_selection' => 'Impossible de lier ces opérations', - 'selected_transaction' => 'Opération sélectionnée', - 'journals_linked' => 'Ces opérations sont liées.', - 'journals_error_linked' => 'Ces opérations sont déjà liées.', - 'journals_link_to_self' => 'Vous ne pouvez pas lier une opération à elle-même', - 'journal_links' => 'Liens d\'opération', - 'this_withdrawal' => 'Cette dépense', - 'this_deposit' => 'Ce dépôt', - 'this_transfer' => 'Ce transfert', - 'overview_for_link' => 'Aperçu pour le type de lien ":name"', - 'source_transaction' => 'Source de l\'opération', - 'link_description' => 'Description du lien', - 'destination_transaction' => 'Destination de l\'opération', - 'delete_journal_link' => 'Supprimez le lien entre :source et :destination', - 'deleted_link' => 'Lien supprimé', + 'journal_link_configuration' => 'Configuration des liens d\'opération', + 'create_new_link_type' => 'Créer un nouveau type de lien', + 'store_new_link_type' => 'Enregistrer un nouveau type de lien', + 'update_link_type' => 'Mettre à jour le type de lien', + 'edit_link_type' => 'Modifier le type de lien ":name"', + 'updated_link_type' => 'Type de lien mis à jour ":name"', + 'delete_link_type' => 'Supprimer le type de lien ":name"', + 'deleted_link_type' => 'Type de lien supprimé ":name"', + 'stored_new_link_type' => 'Enregistrer le nouveau type de lien ":name"', + 'cannot_edit_link_type' => 'Impossible d\'éditer le type de lien ":name"', + 'link_type_help_name' => 'Par exemple "Duplique"', + 'link_type_help_inward' => 'Par exemple "duplique"', + 'link_type_help_outward' => 'Par exemple "est dupliqué par"', + 'save_connections_by_moving' => 'Enregistrer le lien entre ces opérations en les déplaçant vers un autre type de lien :', + 'do_not_save_connection' => '(ne pas enregistrer la connexion)', + 'link_transaction' => 'Lier l\'opération', + 'link_to_other_transaction' => 'Lier cette opération à une autre opération', + 'select_transaction_to_link' => 'Sélectionnez une autre opération à laquelle lier cette opération. Les liens sont actuellement inutilisés dans Firefly III (ils sont juste montrés), mais je compte changer cela dans le futur. Utilisez le champ de recherche pour sélectionner une opération soit par titre ou par ID. Si vous voulez ajouter des types de liens personnalisés, consultez la section administration.', + 'this_transaction' => 'Cette opération', + 'transaction' => 'Opération', + 'comments' => 'Commentaires', + 'link_notes' => 'Toutes les notes que vous souhaitez enregistrer avec le lien.', + 'invalid_link_selection' => 'Impossible de lier ces opérations', + 'selected_transaction' => 'Opération sélectionnée', + 'journals_linked' => 'Ces opérations sont liées.', + 'journals_error_linked' => 'Ces opérations sont déjà liées.', + 'journals_link_to_self' => 'Vous ne pouvez pas lier une opération à elle-même', + 'journal_links' => 'Liens d\'opération', + 'this_withdrawal' => 'Cette dépense', + 'this_deposit' => 'Ce dépôt', + 'this_transfer' => 'Ce transfert', + 'overview_for_link' => 'Aperçu pour le type de lien ":name"', + 'source_transaction' => 'Source de l\'opération', + 'link_description' => 'Description du lien', + 'destination_transaction' => 'Destination de l\'opération', + 'delete_journal_link' => 'Supprimez le lien entre :source et :destination', + 'deleted_link' => 'Lien supprimé', // link translations: - 'Paid_name' => 'Payé', - 'Refund_name' => 'Remboursement', - 'Reimbursement_name' => 'Remboursement', - 'Related_name' => 'Associé', - 'relates to_inward' => 'se rapporte à', - 'is (partially) refunded by_inward' => 'est (partiellement) remboursé par', - 'is (partially) paid for by_inward' => 'est (partiellement) payé par', - 'is (partially) reimbursed by_inward' => 'est (partiellement) remboursé par', - 'inward_transaction' => 'Opération entrante', - 'outward_transaction' => 'Opération sortante', - 'relates to_outward' => 'se rapporte à', - '(partially) refunds_outward' => 'rembourse (partiellement)', - '(partially) pays for_outward' => 'paye (partiellement) pour', - '(partially) reimburses_outward' => 'rembourse (partiellement)', - 'is (partially) refunded by' => 'est (partiellement) remboursé par', - 'is (partially) paid for by' => 'est (partiellement) payé par', - 'is (partially) reimbursed by' => 'est (partiellement) remboursé par', - 'relates to' => 'se rapporte à', - '(partially) refunds' => 'rembourse (partiellement)', - '(partially) pays for' => 'paye (partiellement) pour', - '(partially) reimburses' => 'rembourse (partiellement)', + 'Paid_name' => 'Payé', + 'Refund_name' => 'Remboursement', + 'Reimbursement_name' => 'Remboursement', + 'Related_name' => 'Associé', + 'relates to_inward' => 'se rapporte à', + 'is (partially) refunded by_inward' => 'est (partiellement) remboursé par', + 'is (partially) paid for by_inward' => 'est (partiellement) payé par', + 'is (partially) reimbursed by_inward' => 'est (partiellement) remboursé par', + 'inward_transaction' => 'Opération entrante', + 'outward_transaction' => 'Opération sortante', + 'relates to_outward' => 'se rapporte à', + '(partially) refunds_outward' => 'rembourse (partiellement)', + '(partially) pays for_outward' => 'paye (partiellement) pour', + '(partially) reimburses_outward' => 'rembourse (partiellement)', + 'is (partially) refunded by' => 'est (partiellement) remboursé par', + 'is (partially) paid for by' => 'est (partiellement) payé par', + 'is (partially) reimbursed by' => 'est (partiellement) remboursé par', + 'relates to' => 'se rapporte à', + '(partially) refunds' => 'rembourse (partiellement)', + '(partially) pays for' => 'paye (partiellement) pour', + '(partially) reimburses' => 'rembourse (partiellement)', // split a transaction: - 'splits' => 'Ventilations', - 'add_another_split' => 'Ajouter une autre fraction', - 'cannot_edit_opening_balance' => 'Vous ne pouvez pas modifier le solde d\'ouverture d\'un compte.', - 'no_edit_multiple_left' => 'Vous n\'avez sélectionné aucune opération valide à éditer.', - 'breadcrumb_convert_group' => 'Convertir l\'opération', - 'convert_invalid_source' => 'La source est invalide pour l\'opération n°%d.', - 'convert_invalid_destination' => 'Le compte de destination est invalide pour l\'opération n°%d.', - 'create_another' => 'Après enregistrement, revenir ici pour en créer un nouveau.', - 'after_update_create_another' => 'Après la mise à jour, revenir ici pour continuer l\'édition.', - 'store_as_new' => 'Enregistrer comme une nouvelle opération au lieu de mettre à jour.', - 'reset_after' => 'Réinitialiser le formulaire après soumission', - 'errors_submission' => 'Certaines informations ne sont pas correctes dans votre formulaire. Veuillez vérifier les erreurs.', - 'transaction_expand_split' => 'Développer la ventilation', - 'transaction_collapse_split' => 'Réduire la ventilation', + 'splits' => 'Séparations', + 'add_another_split' => 'Ajouter une autre fraction', + 'cannot_edit_opening_balance' => 'Vous ne pouvez pas modifier le solde d\'ouverture d\'un compte.', + 'no_edit_multiple_left' => 'Vous n\'avez sélectionné aucune opération valide à éditer.', + 'breadcrumb_convert_group' => 'Convertir l\'opération', + 'convert_invalid_source' => 'La source est invalide pour l\'opération n°%d.', + 'convert_invalid_destination' => 'Le compte de destination est invalide pour l\'opération n°%d.', + 'create_another' => 'Après enregistrement, revenir ici pour en créer un nouveau.', + 'after_update_create_another' => 'Après la mise à jour, revenir ici pour continuer l\'édition.', + 'store_as_new' => 'Enregistrer comme une nouvelle opération au lieu de mettre à jour.', + 'reset_after' => 'Réinitialiser le formulaire après soumission', + 'errors_submission' => 'Certaines informations ne sont pas correctes dans votre formulaire. Veuillez vérifier les erreurs ci-dessous.', + 'errors_submission_v2' => 'Certaines informations ne sont pas correctes dans votre formulaire. Veuillez vérifier les erreurs ci-dessous : %{errorMessage}', + 'transaction_expand_split' => 'Développer la séparation', + 'transaction_collapse_split' => 'Réduire la séparation', // object groups - 'default_group_title_name' => '(Sans groupement)', - 'default_group_title_name_plain' => 'non groupé', + 'default_group_title_name' => '(Sans groupement)', + 'default_group_title_name_plain' => 'non groupé', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Nous allons créer un compte d’actif !', - 'no_accounts_intro_asset' => 'Vous n\'avez pas encore de compte d\'actif. Les comptes d\'actifs sont vos comptes principaux : votre compte courant, votre compte d\'épargne, votre compte partagé ou même votre carte de crédit.', - 'no_accounts_imperative_asset' => 'Pour commencer à utiliser Firefly III, vous devez créer au moins un compte d\'actif. Faisons-le maintenant :', - 'no_accounts_create_asset' => 'Créer un compte d\'actif', - 'no_accounts_title_expense' => 'Nous allons créer un compte de dépenses !', - 'no_accounts_intro_expense' => 'Vous n\'avez pas encore de compte de dépenses. Les comptes de dépenses sont les endroits où vous dépensez, comme les magasins et les supermarchés.', - 'no_accounts_imperative_expense' => 'Les comptes de dépenses sont créés automatiquement lorsque vous créez des opérations, mais vous pouvez en créer manuellement, si vous le souhaitez. Nous allons en créer un maintenant :', - 'no_accounts_create_expense' => 'Créer un compte de dépenses', - 'no_accounts_title_revenue' => 'Nous allons créer un compte de revenus !', - 'no_accounts_intro_revenue' => 'Vous n\'avez pas encore de compte de revenus. Les comptes de revenus sont les endroits où vous recevez de l\'argent, comme votre employeur.', - 'no_accounts_imperative_revenue' => 'Les comptes de revenus sont créés automatiquement lorsque vous créez des opérations, mais vous pouvez en créer manuellement, si vous le souhaitez. Nous allons en créer un maintenant :', - 'no_accounts_create_revenue' => 'Créer un compte de revenus', - 'no_accounts_title_liabilities' => 'Nous allons créer un passif !', - 'no_accounts_intro_liabilities' => 'Vous n’avez encore aucun passif. Les passifs sont des comptes qui inscrivent vos emprunts et autres dettes.', - 'no_accounts_imperative_liabilities' => 'Vous n’êtes pas obligé d\'utiliser cette fonctionnalité, mais elle peut être utile si vous souhaitez garder une trace de ces éléments.', - 'no_accounts_create_liabilities' => 'Créer un passif', - 'no_budgets_title_default' => 'Nous allons créer un budget', - 'no_rules_title_default' => 'Nous allons créer une règle', - 'no_budgets_intro_default' => 'Vous n\'avez pas encore de budget. Les budgets sont utilisés pour organiser vos dépenses en groupes logiques, ce que vous permet d\'établir des seuils pour limiter ces dépenses.', - 'no_rules_intro_default' => 'Vous n\'avez pas encore de règles. Les règles sont des automatisations puissantes qui peuvent gérer les opérations pour vous.', - 'no_rules_imperative_default' => 'Les règles peuvent être très utiles lorsque vous gérez des opérations. Créons-en une maintenant :', - 'no_budgets_imperative_default' => 'Les budgets sont les outils de base de la gestion financière. Nous allons en créer un maintenant :', - 'no_budgets_create_default' => 'Créer un budget', - 'no_rules_create_default' => 'Créer une règle', - 'no_categories_title_default' => 'Nous allons créer une catégorie !', - 'no_categories_intro_default' => 'Vous n\'avez pas encore de catégories. Les catégories sont utilisées pour affiner vos opérations et les étiqueter avec leur catégorie désignée.', - 'no_categories_imperative_default' => 'Les catégories sont créées automatiquement lorsque vous créez des opérations, mais vous pouvez en créer manuellement. Nous allons en créer une maintenant :', - 'no_categories_create_default' => 'Créer une catégorie', - 'no_tags_title_default' => 'Nous allons créer un tag !', - 'no_tags_intro_default' => 'Vous n\'avez pas encore de tags. Les tags sont utilisés pour affiner vos opérations en les associant avec des mots-clés spécifiques.', - 'no_tags_imperative_default' => 'Les tags sont créés automatiquement lorsque vous créez des opérations, mais vous pouvez en créer manuellement. Nous allons en créer un maintenant :', - 'no_tags_create_default' => 'Créer un tag', - 'no_transactions_title_withdrawal' => 'Nous allons créer une dépense !', - 'no_transactions_intro_withdrawal' => 'Vous n\'avez pas encore de dépenses. Vous devriez créer des dépenses pour commencer à gérer vos finances.', - 'no_transactions_imperative_withdrawal' => 'Avez-vous dépensé de l’argent ? Alors vous devriez l’écrire :', - 'no_transactions_create_withdrawal' => 'Créer une dépense', - 'no_transactions_title_deposit' => 'Nous allons créer un revenu !', - 'no_transactions_intro_deposit' => 'Vous n\'avez pas encore enregistré de revenus. Vous devriez créer des entrées de revenus pour commencer à gérer vos finances.', - 'no_transactions_imperative_deposit' => 'Est-ce que vous avez reçu de l’argent ? Alors vous devriez l’écrire :', - 'no_transactions_create_deposit' => 'Créer un dépôt', - 'no_transactions_title_transfers' => 'Nous allons créer un transfert !', - 'no_transactions_intro_transfers' => 'Vous n\'avez pas encore de transferts. Lorsque vous transférez de l\'argent entre les comptes d\'actifs, c\'est enregistré comme un transfert.', - 'no_transactions_imperative_transfers' => 'Avez vous déplacé de l’argent ? Alors vous devriez l’écrire :', - 'no_transactions_create_transfers' => 'Créer un transfert', - 'no_piggies_title_default' => 'Nous allons créer une tirelire !', - 'no_piggies_intro_default' => 'Vous n\'avez encore pas de tirelire. Vous pouvez créer des tirelires pour diviser vos économies et garder une trace de ce que vous économisez.', - 'no_piggies_imperative_default' => 'Avez-vous des choses pour lesquelles vous économisez de l\'argent ? Créer une tirelire et suivez-là :', - 'no_piggies_create_default' => 'Créer une nouvelle tirelire', - 'no_bills_title_default' => 'Nous allons créer une facture !', - 'no_bills_intro_default' => 'Vous n\'avez pas encore de factures. Vous pouvez créer des factures pour suivre les dépenses ordinaires, comme votre loyer ou l\'assurance.', - 'no_bills_imperative_default' => 'Avez-vous des factures régulières ? Créez une facture et suivez vos paiements :', - 'no_bills_create_default' => 'Créer une facture', + 'no_accounts_title_asset' => "Nous allons créer un compte d’actif\u{a0}!", + 'no_accounts_intro_asset' => 'Vous n\'avez pas encore de compte d\'actif. Les comptes d\'actifs sont vos comptes principaux : votre compte courant, votre compte d\'épargne, votre compte partagé ou même votre carte de crédit.', + 'no_accounts_imperative_asset' => 'Pour commencer à utiliser Firefly III, vous devez créer au moins un compte d\'actif. Faisons-le maintenant :', + 'no_accounts_create_asset' => 'Créer un compte d\'actif', + 'no_accounts_title_expense' => "Nous allons créer un compte de dépenses\u{a0}!", + 'no_accounts_intro_expense' => 'Vous n\'avez pas encore de compte de dépenses. Les comptes de dépenses sont les endroits où vous dépensez, comme les magasins et les supermarchés.', + 'no_accounts_imperative_expense' => 'Les comptes de dépenses sont créés automatiquement lorsque vous créez des opérations, mais vous pouvez en créer manuellement, si vous le souhaitez. Nous allons en créer un maintenant :', + 'no_accounts_create_expense' => 'Créer un compte de dépenses', + 'no_accounts_title_revenue' => 'Nous allons créer un compte de revenus !', + 'no_accounts_intro_revenue' => 'Vous n\'avez pas encore de compte de revenus. Les comptes de revenus sont les endroits où vous recevez de l\'argent, comme votre employeur.', + 'no_accounts_imperative_revenue' => 'Les comptes de revenus sont créés automatiquement lorsque vous créez des opérations, mais vous pouvez en créer manuellement, si vous le souhaitez. Nous allons en créer un maintenant :', + 'no_accounts_create_revenue' => 'Créer un compte de revenus', + 'no_accounts_title_liabilities' => "Nous allons créer un passif\u{a0}!", + 'no_accounts_intro_liabilities' => 'Vous n’avez encore aucun passif. Les passifs sont des comptes qui inscrivent vos emprunts et autres dettes.', + 'no_accounts_imperative_liabilities' => 'Vous n’êtes pas obligé d\'utiliser cette fonctionnalité, mais elle peut être utile si vous souhaitez garder une trace de ces éléments.', + 'no_accounts_create_liabilities' => 'Créer un passif', + 'no_budgets_title_default' => 'Nous allons créer un budget', + 'no_rules_title_default' => 'Nous allons créer une règle', + 'no_budgets_intro_default' => 'Vous n\'avez pas encore de budget. Les budgets sont utilisés pour organiser vos dépenses en groupes logiques, ce que vous permet d\'établir des seuils pour limiter ces dépenses.', + 'no_rules_intro_default' => 'Vous n\'avez pas encore de règles. Les règles sont des automatisations puissantes qui peuvent gérer les opérations pour vous.', + 'no_rules_imperative_default' => 'Les règles peuvent être très utiles lorsque vous gérez des opérations. Créons-en une maintenant :', + 'no_budgets_imperative_default' => "Les budgets sont les outils de base de la gestion financière. Nous allons en créer un maintenant\u{a0}:", + 'no_budgets_create_default' => 'Créer un budget', + 'no_rules_create_default' => 'Créer une règle', + 'no_categories_title_default' => "Nous allons créer une catégorie\u{a0}!", + 'no_categories_intro_default' => 'Vous n\'avez pas encore de catégories. Les catégories sont utilisées pour affiner vos opérations et les étiqueter avec leur catégorie désignée.', + 'no_categories_imperative_default' => 'Les catégories sont créées automatiquement lorsque vous créez des opérations, mais vous pouvez en créer manuellement. Nous allons en créer une maintenant :', + 'no_categories_create_default' => 'Créer une catégorie', + 'no_tags_title_default' => "Nous allons créer un tag\u{a0}!", + 'no_tags_intro_default' => 'Vous n\'avez pas encore de tags. Les tags sont utilisés pour affiner vos opérations en les associant avec des mots-clés spécifiques.', + 'no_tags_imperative_default' => "Les tags sont créés automatiquement lorsque vous créez des opérations, mais vous pouvez en créer manuellement. Nous allons en créer un maintenant\u{a0}:", + 'no_tags_create_default' => 'Créer un tag', + 'no_transactions_title_withdrawal' => "Nous allons créer une dépense\u{a0}!", + 'no_transactions_intro_withdrawal' => 'Vous n\'avez pas encore de dépenses. Vous devriez créer des dépenses pour commencer à gérer vos finances.', + 'no_transactions_imperative_withdrawal' => "Avez-vous dépensé de l’argent\u{a0}? Alors vous devriez l’écrire\u{a0}:", + 'no_transactions_create_withdrawal' => 'Créer une dépense', + 'no_transactions_title_deposit' => "Nous allons créer un revenu\u{a0}!", + 'no_transactions_intro_deposit' => 'Vous n\'avez pas encore enregistré de revenus. Vous devriez créer des entrées de revenus pour commencer à gérer vos finances.', + 'no_transactions_imperative_deposit' => "Est-ce que vous avez reçu de l’argent\u{a0}? Alors vous devriez l’écrire\u{a0}:", + 'no_transactions_create_deposit' => 'Créer un dépôt', + 'no_transactions_title_transfers' => "Nous allons créer un transfert\u{a0}!", + 'no_transactions_intro_transfers' => 'Vous n\'avez pas encore de transferts. Lorsque vous transférez de l\'argent entre les comptes d\'actifs, c\'est enregistré comme un transfert.', + 'no_transactions_imperative_transfers' => "Avez vous déplacé de l’argent\u{a0}? Alors vous devriez l’écrire\u{a0}:", + 'no_transactions_create_transfers' => 'Créer un transfert', + 'no_piggies_title_default' => "Nous allons créer une tirelire\u{a0}!", + 'no_piggies_intro_default' => 'Vous n\'avez encore pas de tirelire. Vous pouvez créer des tirelires pour diviser vos économies et garder une trace de ce que vous économisez.', + 'no_piggies_imperative_default' => 'Avez-vous des choses pour lesquelles vous économisez de l\'argent ? Créer une tirelire et suivez-là :', + 'no_piggies_create_default' => 'Créer une nouvelle tirelire', + 'no_bills_title_default' => "Nous allons créer une facture\u{a0}!", + 'no_bills_intro_default' => 'Vous n\'avez pas encore de factures. Vous pouvez créer des factures pour suivre les dépenses ordinaires, comme votre loyer ou l\'assurance.', + 'no_bills_imperative_default' => 'Avez-vous des factures régulières ? Créez une facture et suivez vos paiements :', + 'no_bills_create_default' => 'Créer une facture', // recurring transactions - 'create_right_now' => 'Créer maintenant', - 'no_new_transaction_in_recurrence' => 'Aucune nouvelle opération n\'a été créée. Peut-être a-t-elle déjà été déclenchée pour cette date ?', - 'recurrences' => 'Opérations périodiques', - 'repeat_until_in_past' => 'Cette opération récurrente a cessé de se répéter le :date.', - 'recurring_calendar_view' => 'Calendrier', - 'no_recurring_title_default' => 'Créons une opération périodique !', - 'no_recurring_intro_default' => 'Vous n’avez pas encore d\'opérations périodiques. Vous pouvez en utiliser pour que Firefly III crée automatiquement des opérations pour vous.', - 'no_recurring_imperative_default' => 'Il s’agit d’une fonctionnalité plutôt poussée, mais elle peut être très utile. Assurez-vous de lire la documentation ( icône ? en haut à droite) avant de continuer.', - 'no_recurring_create_default' => 'Créer une opération périodique', - 'make_new_recurring' => 'Créer une opération périodique', - 'recurring_daily' => 'Tous les jours', - 'recurring_weekly' => 'Chaque semaine le :weekday', - 'recurring_weekly_skip' => 'Chaque :skip(ière/ième) semaine le :weekday', - 'recurring_monthly' => 'Le :dayOfMonth de chaque mois', - 'recurring_monthly_skip' => 'Chaque :skip(ier/ième) mois le :dayOfMonth(ier,ième) jour', - 'recurring_ndom' => 'Le :dayOfMonth(er/ème) :weekday de chaque mois', - 'recurring_yearly' => 'Chaque année le :date', - 'overview_for_recurrence' => 'Aperçu de l’opération périodique ":title"', - 'warning_duplicates_repetitions' => 'Dans de rares cas, des dates apparaissent en double dans cette liste. Cela peut arriver lorsque plusieurs répétitions se superposent. Firefly III générera toujours une seule opération par jour.', - 'created_transactions' => 'Opérations associées', - 'expected_withdrawals' => 'Dépenses attendues', - 'expected_deposits' => 'Dépôts attendus', - 'expected_transfers' => 'Transferts attendus', - 'created_withdrawals' => 'Dépenses créées', - 'created_deposits' => 'Dépôts créés', - 'created_transfers' => 'Transferts créés', - 'recurring_info' => 'Opération périodique :count / :total', - 'created_from_recurrence' => 'Créé à partir de l\'opération périodique ":title" (#:id)', - 'recurring_never_cron' => 'Il semble que la tâche cron qui supporte les opérations périodiques n\'a jamais été exécutée. Ceci est normal si vous venez juste d\'installer Firefly III, mais pensez à la configurer dès que possible. Veuillez consulter la page d\'aide associée en cliquant sur l\'icône (?) en haut à droite de la page.', - 'recurring_cron_long_ago' => 'Il semble que la dernière exécution de la tâche cron supportant les opérations périodiques date de plus de 36 heures. Êtes-vous surs qu\'elle est configurée correctement ? Veuillez consulter la page d\'aide associée en cliquant sur l\'icône (?) en haut à droite de la page.', + 'create_right_now' => 'Créer maintenant', + 'no_new_transaction_in_recurrence' => 'Aucune nouvelle opération n\'a été créée. Peut-être a-t-elle déjà été déclenchée pour cette date ?', + 'recurrences' => 'Opérations périodiques', + 'repeat_until_in_past' => 'Cette opération récurrente a cessé de se répéter le :date.', + 'recurring_calendar_view' => 'Calendrier', + 'no_recurring_title_default' => "Créons une opération périodique\u{a0}!", + 'no_recurring_intro_default' => 'Vous n’avez pas encore d\'opérations périodiques. Vous pouvez en utiliser pour que Firefly III crée automatiquement des opérations pour vous.', + 'no_recurring_imperative_default' => 'Il s’agit d’une fonctionnalité plutôt poussée, mais elle peut être très utile. Assurez-vous de lire la documentation ( icône ? en haut à droite) avant de continuer.', + 'no_recurring_create_default' => 'Créer une opération périodique', + 'make_new_recurring' => 'Créer une opération périodique', + 'recurring_daily' => 'Tous les jours', + 'recurring_weekly' => 'Chaque semaine le :weekday', + 'recurring_weekly_skip' => 'Chaque :skip(ière/ième) semaine le :weekday', + 'recurring_monthly' => 'Le :dayOfMonth de chaque mois', + 'recurring_monthly_skip' => 'Chaque :skip(ier/ième) mois le :dayOfMonth(ier,ième) jour', + 'recurring_ndom' => 'Le :dayOfMonth(er/ème) :weekday de chaque mois', + 'recurring_yearly' => 'Chaque année le :date', + 'overview_for_recurrence' => 'Aperçu de l’opération périodique ":title"', + 'warning_duplicates_repetitions' => 'Dans de rares cas, des dates apparaissent en double dans cette liste. Cela peut arriver lorsque plusieurs répétitions se superposent. Firefly III générera toujours une seule opération par jour.', + 'created_transactions' => 'Opérations associées', + 'expected_withdrawals' => 'Dépenses attendues', + 'expected_deposits' => 'Dépôts attendus', + 'expected_transfers' => 'Transferts attendus', + 'created_withdrawals' => 'Dépenses créées', + 'created_deposits' => 'Dépôts créés', + 'created_transfers' => 'Transferts créés', + 'recurring_info' => 'Opération périodique :count / :total', + 'created_from_recurrence' => 'Créé à partir de l\'opération périodique ":title" (#:id)', + 'recurring_never_cron' => 'Il semble que la tâche cron qui supporte les opérations périodiques n\'a jamais été exécutée. Ceci est normal si vous venez juste d\'installer Firefly III, mais pensez à la configurer dès que possible. Veuillez consulter la page d\'aide associée en cliquant sur l\'icône (?) en haut à droite de la page.', + 'recurring_cron_long_ago' => 'Il semble que la dernière exécution de la tâche cron supportant les opérations périodiques date de plus de 36 heures. Êtes-vous surs qu\'elle est configurée correctement ? Veuillez consulter la page d\'aide associée en cliquant sur l\'icône (?) en haut à droite de la page.', - 'create_new_recurrence' => 'Créer une nouvelle opération périodique', - 'help_first_date' => 'Indiquer la première occurrence attendue. Doit être dans le futur.', - 'help_first_date_no_past' => 'Indiquer la première occurrence attendue. Firefly III ne créera pas d\'opérations dans le passé.', - 'no_currency' => '(pas de devise)', - 'mandatory_for_recurring' => 'Informations de répétition obligatoires', - 'mandatory_for_transaction' => 'Informations d\'opération obligatoires', - 'optional_for_recurring' => 'Informations de répétition optionnelles', - 'optional_for_transaction' => 'Informations d\'opération optionnelles', - 'change_date_other_options' => 'Modifiez la date de début pour voir plus d\'options.', - 'mandatory_fields_for_tranaction' => 'Les valeurs ci-dessous seront enregistrées dans les opérations créées', - 'click_for_calendar' => 'Cliquez ici pour voir les répétitions des opérations sur un calendrier.', - 'repeat_forever' => 'Répéter pour toujours', - 'repeat_until_date' => 'Répéter jusqu\'à une date', - 'repeat_times' => 'Répéter un nombre de fois', - 'recurring_skips_one' => 'Tous les', - 'recurring_skips_more' => 'Omettre :count répétitions', - 'store_new_recurrence' => 'Enregistrer l\'opération périodique', - 'stored_new_recurrence' => 'Opération périodique ":title" enregistrée avec succès.', - 'edit_recurrence' => 'Modifier l\'opération périodique ":title"', - 'recurring_repeats_until' => 'Se répète jusqu\'à :date', - 'recurring_repeats_forever' => 'Se répète pour toujours', - 'recurring_repeats_x_times' => 'Répéter :count fois', - 'update_recurrence' => 'Mettre à jour l\'opération périodique', - 'updated_recurrence' => 'Opération périodique ":title" mise à jour', - 'recurrence_is_inactive' => 'Cette opération périodique n’est pas active et ne génère pas de nouvelles opérations.', - 'delete_recurring' => 'Supprimer l\'opération périodique ":title"', - 'new_recurring_transaction' => 'Nouvelle opération périodique', - 'help_weekend' => 'Que doit faire Firefly III lorsque l’opération périodique tombe un samedi ou un dimanche ?', - 'do_nothing' => 'Créer l\'opération tout de même', - 'skip_transaction' => 'Ignorer l\'occurrence', - 'jump_to_friday' => 'Créer l\'opération le vendredi précédent', - 'jump_to_monday' => 'Créer l\'opération le lundi suivant', - 'will_jump_friday' => 'Sera créée le vendredi plutôt que les week-ends.', - 'will_jump_monday' => 'Sera créée le lundi plutôt que les week-ends.', - 'except_weekends' => 'Sauf les week-ends', - 'recurrence_deleted' => 'Opération périodique ":title" supprimée', + 'create_new_recurrence' => 'Créer une nouvelle opération périodique', + 'help_first_date' => 'Indiquer la première occurrence attendue. Doit être dans le futur.', + 'help_first_date_no_past' => 'Indiquer la première occurrence attendue. Firefly III ne créera pas d\'opérations dans le passé.', + 'no_currency' => '(pas de devise)', + 'mandatory_for_recurring' => 'Informations de répétition obligatoires', + 'mandatory_for_transaction' => 'Informations d\'opération obligatoires', + 'optional_for_recurring' => 'Informations de répétition optionnelles', + 'optional_for_transaction' => 'Informations d\'opération optionnelles', + 'change_date_other_options' => 'Modifiez la date de début pour voir plus d\'options.', + 'mandatory_fields_for_tranaction' => 'Les valeurs ci-dessous seront enregistrées dans les opérations créées', + 'click_for_calendar' => 'Cliquez ici pour voir les répétitions des opérations sur un calendrier.', + 'repeat_forever' => 'Répéter pour toujours', + 'repeat_until_date' => 'Répéter jusqu\'à une date', + 'repeat_times' => 'Répéter un nombre de fois', + 'recurring_skips_one' => 'Tous les', + 'recurring_skips_more' => 'Omettre :count répétitions', + 'store_new_recurrence' => 'Enregistrer l\'opération périodique', + 'stored_new_recurrence' => 'Opération périodique ":title" enregistrée avec succès.', + 'edit_recurrence' => 'Modifier l\'opération périodique ":title"', + 'recurring_repeats_until' => 'Se répète jusqu\'à :date', + 'recurring_repeats_forever' => 'Se répète pour toujours', + 'recurring_repeats_x_times' => 'Répéter :count fois', + 'update_recurrence' => 'Mettre à jour l\'opération périodique', + 'updated_recurrence' => 'Opération périodique ":title" mise à jour', + 'recurrence_is_inactive' => 'Cette opération périodique n’est pas active et ne génère pas de nouvelles opérations.', + 'delete_recurring' => 'Supprimer l\'opération périodique ":title"', + 'new_recurring_transaction' => 'Nouvelle opération périodique', + 'help_weekend' => "Que doit faire Firefly III lorsque l’opération périodique tombe un samedi ou un dimanche\u{a0}?", + 'do_nothing' => 'Créer l\'opération tout de même', + 'skip_transaction' => 'Ignorer l\'occurrence', + 'jump_to_friday' => 'Créer l\'opération le vendredi précédent', + 'jump_to_monday' => 'Créer l\'opération le lundi suivant', + 'will_jump_friday' => 'Sera créée le vendredi plutôt que les week-ends.', + 'will_jump_monday' => 'Sera créée le lundi plutôt que les week-ends.', + 'except_weekends' => 'Sauf les week-ends', + 'recurrence_deleted' => 'Opération périodique ":title" supprimée', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Solde (:currency)', - 'box_spent_in_currency' => 'Dépensé (:currency)', - 'box_earned_in_currency' => 'Gagné (:currency)', - 'box_budgeted_in_currency' => 'Budgétisé (:currency)', - 'box_bill_paid_in_currency' => 'Factures payées (:currency)', - 'box_bill_unpaid_in_currency' => 'Factures impayées (:currency)', - 'box_left_to_spend_in_currency' => 'Reste à dépenser (:currency)', - 'box_net_worth_in_currency' => 'Avoir net (:currency)', - 'box_spend_per_day' => 'Reste à dépenser par jour: :amount', + 'box_balance_in_currency' => 'Solde (:currency)', + 'box_spent_in_currency' => 'Dépensé (:currency)', + 'box_earned_in_currency' => 'Gagné (:currency)', + 'box_budgeted_in_currency' => 'Budgétisé (:currency)', + 'box_bill_paid_in_currency' => 'Factures payées (:currency)', + 'box_bill_unpaid_in_currency' => 'Factures impayées (:currency)', + 'box_left_to_spend_in_currency' => 'Reste à dépenser (:currency)', + 'box_net_worth_in_currency' => 'Avoir net (:currency)', + 'box_spend_per_day' => 'Reste à dépenser par jour: :amount', // debug page - 'debug_page' => 'Page de débogage', - 'debug_submit_instructions' => 'Si vous rencontrez des problèmes, vous pouvez utiliser les informations contenues dans ce cadre comme informations de débogage. Veuillez copier-coller dans une nouvelle "issue" GitHub (en anglais). Cela générera une belle table qui peut être utilisée pour diagnostiquer rapidement votre problème.', - 'debug_pretty_table' => 'Si vous copiez/collez le cadre ci-dessous dans une "issue" GitHub, cela générera un tableau. Veuillez ne pas entourer ce texte avec des apostrophes ou des guillemets.', - 'debug_additional_data' => 'Vous pouvez également partager le contenu du cadre ci-dessous. Vous pouvez également copier/coller cela dans une "issue" GitHub déjà existante ou nouvellement créée. Cependant, le contenu de ce cadre peut contenir des informations privées telles que les noms de compte, les détails de transaction ou les adresses électroniques.', + 'debug_page' => 'Page de débogage', + 'debug_submit_instructions' => 'Si vous rencontrez des problèmes, vous pouvez utiliser les informations contenues dans ce cadre comme informations de débogage. Veuillez copier-coller dans une nouvelle "issue" GitHub (en anglais). Cela générera une belle table qui peut être utilisée pour diagnostiquer rapidement votre problème.', + 'debug_pretty_table' => 'Si vous copiez/collez le cadre ci-dessous dans une "issue" GitHub, cela générera un tableau. Veuillez ne pas entourer ce texte avec des apostrophes ou des guillemets.', + 'debug_additional_data' => 'Vous pouvez également partager le contenu du cadre ci-dessous. Vous pouvez également copier/coller cela dans une "issue" GitHub déjà existante ou nouvellement créée. Cependant, le contenu de ce cadre peut contenir des informations privées telles que les noms de compte, les détails de transaction ou les adresses électroniques.', // object groups - 'object_groups_menu_bar' => 'Groupes', - 'object_groups_page_title' => 'Groupes', - 'object_groups_breadcrumb' => 'Groupes', - 'object_groups_index' => 'Vue d\'ensemble', - 'object_groups' => 'Groupes', - 'object_groups_empty_explain' => 'Certaines choses dans Firefly III peuvent être divisées en groupes. Les tirelires, par exemple, présentent un champ "Groupe" dans les écrans d\'édition et de création. Lorsque vous définissez ce champ, vous pouvez modifier les noms et l\'ordre des groupes sur cette page. Pour plus d\'informations, consultez les pages d\'aide dans le coin supérieur droit, sous l\'icône (?).', - 'object_group_title' => 'Titre', - 'edit_object_group' => 'Modifier le groupe ":title"', - 'delete_object_group' => 'Supprimer le groupe ":title"', - 'update_object_group' => 'Mettre à jour le groupe', - 'updated_object_group' => 'Groupe ":title" mis à jour avec succès', - 'deleted_object_group' => 'Groupe ":title" supprimé avec succès', - 'object_group' => 'Groupe', + 'object_groups_menu_bar' => 'Groupes', + 'object_groups_page_title' => 'Groupes', + 'object_groups_breadcrumb' => 'Groupes', + 'object_groups_index' => 'Vue d\'ensemble', + 'object_groups' => 'Groupes', + 'object_groups_empty_explain' => 'Certaines choses dans Firefly III peuvent être divisées en groupes. Les tirelires, par exemple, présentent un champ "Groupe" dans les écrans d\'édition et de création. Lorsque vous définissez ce champ, vous pouvez modifier les noms et l\'ordre des groupes sur cette page. Pour plus d\'informations, consultez les pages d\'aide dans le coin supérieur droit, sous l\'icône (?).', + 'object_group_title' => 'Titre', + 'edit_object_group' => 'Modifier le groupe ":title"', + 'delete_object_group' => 'Supprimer le groupe ":title"', + 'update_object_group' => 'Mettre à jour le groupe', + 'updated_object_group' => 'Groupe ":title" mis à jour avec succès', + 'deleted_object_group' => 'Groupe ":title" supprimé avec succès', + 'object_group' => 'Groupe', // other stuff - 'placeholder' => '[Réservé]', + 'placeholder' => '[Réservé]', // audit log entries - 'audit_log_entries' => 'Auditer les entrées du journal', - 'ale_action_log_add' => ':amount ajouté à la tirelire ":name"', - 'ale_action_log_remove' => ':amount retiré de la tirelire ":name"', - 'ale_action_clear_budget' => 'Supprimé du budget', - 'ale_action_update_group_title' => 'Titre du groupe d\'opérations mis à jour', - 'ale_action_update_date' => 'Date de l\'opération mise à jour', - 'ale_action_update_order' => 'Ordre de l\'opération mis à jour', - 'ale_action_clear_category' => 'Supprimé de la catégorie', - 'ale_action_clear_notes' => 'Notes supprimées', - 'ale_action_clear_tag' => 'Tag retiré', - 'ale_action_clear_all_tags' => 'Tous les tags ont été retirés', - 'ale_action_set_bill' => 'Lié à la facture', - 'ale_action_switch_accounts' => 'Comptes source et destination inversés', - 'ale_action_set_budget' => 'Budget défini', - 'ale_action_set_category' => 'Catégorie définie', - 'ale_action_set_source' => 'Compte source défini', - 'ale_action_set_destination' => 'Compte de destination défini', - 'ale_action_update_transaction_type' => 'Type d\'opération modifié', - 'ale_action_update_notes' => 'Notes modifiées', - 'ale_action_update_description' => 'Decription modifiée', - 'ale_action_add_to_piggy' => 'Tirelire', - 'ale_action_remove_from_piggy' => 'Tirelire', - 'ale_action_add_tag' => 'Tag ajouté', + 'audit_log_entries' => 'Auditer les entrées du journal', + 'ale_action_log_add' => ':amount ajouté à la tirelire ":name"', + 'ale_action_log_remove' => ':amount retiré de la tirelire ":name"', + 'ale_action_clear_budget' => 'Supprimé du budget', + 'ale_action_update_group_title' => 'Titre du groupe d\'opérations mis à jour', + 'ale_action_update_date' => 'Date de l\'opération mise à jour', + 'ale_action_update_order' => 'Ordre de l\'opération mis à jour', + 'ale_action_clear_category' => 'Supprimé de la catégorie', + 'ale_action_clear_notes' => 'Notes supprimées', + 'ale_action_clear_tag' => 'Tag retiré', + 'ale_action_clear_all_tags' => 'Tous les tags ont été retirés', + 'ale_action_set_bill' => 'Lié à la facture', + 'ale_action_switch_accounts' => 'Comptes source et destination inversés', + 'ale_action_set_budget' => 'Budget défini', + 'ale_action_set_category' => 'Catégorie définie', + 'ale_action_set_source' => 'Compte source défini', + 'ale_action_set_destination' => 'Compte de destination défini', + 'ale_action_update_transaction_type' => 'Type d\'opération modifié', + 'ale_action_update_notes' => 'Notes modifiées', + 'ale_action_update_description' => 'Decription modifiée', + 'ale_action_add_to_piggy' => 'Tirelire', + 'ale_action_remove_from_piggy' => 'Tirelire', + 'ale_action_add_tag' => 'Tag ajouté', // dashboard - 'enable_auto_convert' => 'Activer la conversion des devises', - 'disable_auto_convert' => 'Désactiver la conversion des devises', - + 'enable_auto_convert' => 'Activer la conversion des devises', + 'disable_auto_convert' => 'Désactiver la conversion des devises', ]; /* diff --git a/resources/lang/fr_FR/form.php b/resources/lang/fr_FR/form.php index ba62204513..a857188608 100644 --- a/resources/lang/fr_FR/form.php +++ b/resources/lang/fr_FR/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Nom de la banque', - 'bank_balance' => 'Solde', - 'savings_balance' => 'Solde de l\'épargne', - 'credit_card_limit' => 'Limite de carte de crédit', - 'automatch' => 'Correspondre automatiquement', - 'skip' => 'Ignorer', - 'enabled' => 'Activé', - 'name' => 'Nom', - 'active' => 'Actif', - 'amount_min' => 'Montant minimum', - 'amount_max' => 'Montant maximum', - 'match' => 'Correspondre à', - 'strict' => 'Mode strict', - 'repeat_freq' => 'Répétitions', - 'object_group' => 'Groupe', - 'location' => 'Emplacement', - 'update_channel' => 'Canal de mise à jour', - 'currency_id' => 'Devise', - 'transaction_currency_id' => 'Devise', - 'auto_budget_currency_id' => 'Devise', - 'external_ip' => 'L\'adresse IP externe de votre serveur', - 'attachments' => 'Documents joints', - 'BIC' => 'Code BIC', - 'verify_password' => 'Vérifiez la sécurité du mot de passe', - 'source_account' => 'Compte source', - 'destination_account' => 'Compte destinataire', - 'asset_destination_account' => 'Compte destinataire', - 'include_net_worth' => 'Inclure dans l\'avoir net', - 'asset_source_account' => 'Compte source', - 'journal_description' => 'Description', - 'note' => 'Notes', - 'currency' => 'Devise', - 'account_id' => 'Compte d’actif', - 'budget_id' => 'Budget', - 'bill_id' => 'Facture', - 'opening_balance' => 'Solde initial', - 'tagMode' => 'Mode du tag', - 'virtual_balance' => 'Solde virtuel', + 'bank_name' => 'Nom de la banque', + 'bank_balance' => 'Solde', + 'savings_balance' => 'Solde de l\'épargne', + 'credit_card_limit' => 'Limite de carte de crédit', + 'automatch' => 'Correspondre automatiquement', + 'skip' => 'Ignorer', + 'enabled' => 'Activé', + 'name' => 'Nom', + 'active' => 'Actif', + 'amount_min' => 'Montant minimum', + 'amount_max' => 'Montant maximum', + 'match' => 'Correspond à', + 'strict' => 'Mode strict', + 'repeat_freq' => 'Répétitions', + 'object_group' => 'Groupe', + 'location' => 'Emplacement', + 'update_channel' => 'Canal de mise à jour', + 'currency_id' => 'Devise', + 'transaction_currency_id' => 'Devise', + 'auto_budget_currency_id' => 'Devise', + 'external_ip' => 'L\'adresse IP externe de votre serveur', + 'attachments' => 'Documents joints', + 'BIC' => 'Code BIC', + 'verify_password' => 'Vérifiez la sécurité du mot de passe', + 'source_account' => 'Compte source', + 'destination_account' => 'Compte destinataire', + 'asset_destination_account' => 'Compte destinataire', + 'include_net_worth' => 'Inclure dans l\'avoir net', + 'asset_source_account' => 'Compte source', + 'journal_description' => 'Description', + 'note' => 'Notes', + 'currency' => 'Devise', + 'account_id' => 'Compte d’actif', + 'budget_id' => 'Budget', + 'bill_id' => 'Facture', + 'opening_balance' => 'Solde initial', + 'tagMode' => 'Mode du tag', + 'virtual_balance' => 'Solde virtuel', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Montant cible', 'account_role' => 'Rôle du compte', 'opening_balance_date' => 'Date du solde initial', @@ -133,7 +131,7 @@ return [ 'iban' => 'Numéro IBAN', 'account_number' => 'Numéro de compte', 'creditCardNumber' => 'Numéro de carte de crédit', - 'has_headers' => 'Entêtes ', + 'has_headers' => "Entêtes\u{a0}", 'date_format' => 'Format de la date', 'specifix' => 'Banque - ou déposer des corrections spécifiques', 'attachments[]' => 'Pièces jointes', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Êtes-vous sûr de vouloir supprimer la description de l\'opération ":description" ?', 'mass_journal_are_you_sure' => 'Êtes-vous sûr de que vouloir supprimer ces opérations ?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Êtes-vous sûr de vouloir supprimer le tag ":tag" ?', 'journal_link_areYouSure' => 'Êtes-vous sûr de vouloir supprimer le lien entre :source et :destination?', 'linkType_areYouSure' => 'Êtes-vous sûr de vouloir supprimer le type de lien ":name" (":inward" / ":outward") ?', @@ -202,7 +199,7 @@ return [ 'also_delete_transactions' => 'La seule opération liée à ce compte sera aussi supprimée.|Les :count opérations liées à ce compte seront aussi supprimées.', 'also_delete_transactions_js' => 'Aucune opération|La seule opération liée à ce compte sera aussi supprimée.|Les {count} opérations liées à ce compte seront aussi supprimées.', 'also_delete_connections' => 'La seule opération liée à ce type de lien perdra cette connexion. | Toutes les opérations :count liées à ce type de lien perdront leur connexion.', - 'also_delete_rules' => 'La seule règle liée à ce groupe de règles sera aussi supprimée.|Les :count règles liées à ce groupe de règles seront aussi supprimées.', + 'also_delete_rules' => 'La règle liée à ce groupe de règles sera aussi supprimée.|Les :count règles liées à ce groupe de règles seront aussi supprimées.', 'also_delete_piggyBanks' => 'La seule tirelire liée à ce compte sera aussi supprimée.|Les :count tirelires liées à ce compte seront aussi supprimées.', 'also_delete_piggyBanks_js' => 'Aucune tirelire|La seule tirelire liée à ce compte sera aussi supprimée.|Les {count} tirelires liées à ce compte seront aussi supprimées.', 'not_delete_piggy_banks' => 'La tirelire associée à ce groupe ne sera pas supprimée.|Les :count tirelires associées à ce groupe ne seront pas supprimées.', @@ -214,7 +211,7 @@ return [ 'check_for_updates' => 'Vérifier les mises à jour', 'liability_direction' => 'Sens du passif', 'delete_object_group' => 'Supprimer le groupe ":title"', - 'email' => 'Adresse Email', + 'email' => 'Adresse e-mail', 'password' => 'Mot de passe', 'password_confirmation' => 'Entrer à nouveau le mot de passe', 'blocked' => 'Est bloqué ?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Titre', - // admin 'domain' => 'Domaine', 'single_user_mode' => 'Désactiver le formulaire d\'inscription', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Compte FinTS', 'local_account' => 'Compte Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'À partir du', - 'to_date' => 'Jusqu\'au', - 'due_date' => 'Échéance', - 'payment_date' => 'Date de paiement', - 'invoice_date' => 'Date de facturation', - 'internal_reference' => 'Référence interne', - 'inward' => 'Description vers l\'opération', - 'outward' => 'Description depuis l\'opération', - 'rule_group_id' => 'Groupe de règles', - 'transaction_description' => 'Description de l\'opération', - 'first_date' => 'Date de début', - 'transaction_type' => 'Type d\'opération', - 'repeat_until' => 'Répéter jusqu\'à', - 'recurring_description' => 'Description de l\'opération périodique', - 'repetition_type' => 'Type de répétition', - 'foreign_currency_id' => 'Devise étrangère', - 'repetition_end' => 'Fin de répétition', - 'repetitions' => 'Répétitions', - 'calendar' => 'Calendrier', - 'weekend' => 'Week-end', - 'client_secret' => 'Clé secrète', - 'withdrawal_destination_id' => 'Compte de destination', - 'deposit_source_id' => 'Compte source', - 'expected_on' => 'Prévu le', - 'paid' => 'Payé', - 'auto_budget_type' => 'Budget automatique', - 'auto_budget_amount' => 'Montant du budget automatique', - 'auto_budget_period' => 'Période du budget automatique', - 'collected' => 'Collecté', - 'submitted' => 'Envoyé', - 'key' => 'Clé', - 'value' => 'Contenu de l\'enregistrement', - 'webhook_delivery' => 'Distribution', - 'webhook_response' => 'Réponse', - 'webhook_trigger' => 'Déclencheur', + 'from_date' => 'À partir du', + 'to_date' => 'Jusqu\'au', + 'due_date' => 'Échéance', + 'payment_date' => 'Date de paiement', + 'invoice_date' => 'Date de facturation', + 'internal_reference' => 'Référence interne', + 'inward' => 'Description vers l\'opération', + 'outward' => 'Description depuis l\'opération', + 'rule_group_id' => 'Groupe de règles', + 'transaction_description' => 'Description de l\'opération', + 'first_date' => 'Date de début', + 'transaction_type' => 'Type d\'opération', + 'repeat_until' => 'Répéter jusqu\'à', + 'recurring_description' => 'Description de l\'opération périodique', + 'repetition_type' => 'Type de répétition', + 'foreign_currency_id' => 'Devise étrangère', + 'repetition_end' => 'Fin de répétition', + 'repetitions' => 'Répétitions', + 'calendar' => 'Calendrier', + 'weekend' => 'Week-end', + 'client_secret' => 'Clé secrète', + 'withdrawal_destination_id' => 'Compte de destination', + 'deposit_source_id' => 'Compte source', + 'expected_on' => 'Prévu le', + 'paid' => 'Payé', + 'auto_budget_type' => 'Budget automatique', + 'auto_budget_amount' => 'Montant du budget automatique', + 'auto_budget_period' => 'Période du budget automatique', + 'collected' => 'Collecté', + 'submitted' => 'Envoyé', + 'key' => 'Clé', + 'value' => 'Contenu de l\'enregistrement', + 'webhook_delivery' => 'Distribution', + 'webhook_response' => 'Réponse', + 'webhook_trigger' => 'Déclencheur', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/fr_FR/intro.php b/resources/lang/fr_FR/intro.php index 6d679f0c84..ae24956b4a 100644 --- a/resources/lang/fr_FR/intro.php +++ b/resources/lang/fr_FR/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Bienvenue sur la page d\'accueil de Firefly III. Veuillez prendre le temps de parcourir l\'introduction pour comprendre comment Firefly III fonctionne.', - 'index_accounts-chart' => 'Ce tableau montre le solde actuel de vos comptes d\'actifs. Vous pouvez sélectionner les comptes visibles ici dans vos préférences.', - 'index_box_out_holder' => 'Cette petite boîte et les cases à côté de celle-ci vous donneront un rapide aperçu de votre situation financière.', - 'index_help' => 'Si vous avez besoin d’aide avec une page ou un formulaire, appuyez sur ce bouton.', - 'index_outro' => 'La plupart des pages de Firefly III vont commencer avec un petit tour comme celui-ci. Merci de me contacter si vous avez des questions ou des commentaires. Profitez-en !', - 'index_sidebar-toggle' => 'Pour créer de nouvelles opérations, comptes ou autres choses, utilisez le menu sous cette icône.', - 'index_cash_account' => 'Voici les comptes créés jusqu\'ici. Vous pouvez utiliser le compte de trésorerie pour faire le suivi de vos dépenses en espèces, mais ce n\'est pas obligatoire, bien sûr.', + 'index_intro' => 'Bienvenue sur la page d\'accueil de Firefly III. Veuillez prendre le temps de parcourir l\'introduction pour comprendre comment Firefly III fonctionne.', + 'index_accounts-chart' => 'Ce tableau montre le solde actuel de vos comptes d\'actifs. Vous pouvez sélectionner les comptes visibles ici dans vos préférences.', + 'index_box_out_holder' => 'Cette petite boîte et les cases à côté de celle-ci vous donneront un rapide aperçu de votre situation financière.', + 'index_help' => 'Si vous avez besoin d’aide avec une page ou un formulaire, appuyez sur ce bouton.', + 'index_outro' => "La plupart des pages de Firefly III vont commencer avec un petit tour comme celui-ci. Merci de me contacter si vous avez des questions ou des commentaires. Profitez-en\u{a0}!", + 'index_sidebar-toggle' => 'Pour créer de nouvelles opérations, comptes ou autres choses, utilisez le menu sous cette icône.', + 'index_cash_account' => 'Voici les comptes créés jusqu\'ici. Vous pouvez utiliser le compte de trésorerie pour faire le suivi de vos dépenses en espèces, mais ce n\'est pas obligatoire, bien sûr.', // transactions - 'transactions_create_basic_info' => 'Saisissez les informations de base de votre opération. Source, destination, date et description.', - 'transactions_create_amount_info' => 'Saisissez le montant de l\'opération. Si nécessaire, les champs seront automatiquement mis à jour pour les informations sur la devise étrangère.', - 'transactions_create_optional_info' => 'Tous ces champs sont facultatifs. L\'ajout de méta-données ici rendra vos opérations mieux organisées.', - 'transactions_create_split' => 'Si vous voulez ventiler une opération, fractionnez-la avec ce bouton', + 'transactions_create_basic_info' => 'Saisissez les informations de base de votre opération. Source, destination, date et description.', + 'transactions_create_amount_info' => 'Saisissez le montant de l\'opération. Si nécessaire, les champs seront automatiquement mis à jour pour les informations sur la devise étrangère.', + 'transactions_create_optional_info' => 'Tous ces champs sont facultatifs. L\'ajout de méta-données ici rendra vos opérations mieux organisées.', + 'transactions_create_split' => 'Si vous voulez ventiler une opération, fractionnez-la avec ce bouton', // create account: - 'accounts_create_iban' => 'Donnez à vos comptes un IBAN valide. Cela pourrait rendre une importation de données très facile à l\'avenir.', - 'accounts_create_asset_opening_balance' => 'Les comptes d\'actifs peuvent avoir un «solde d\'ouverture», indiquant le début de l\'historique de ce compte dans Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III prend en charge plusieurs devises. Les comptes d\'actifs ont une devise principale, que vous devez définir ici.', - 'accounts_create_asset_virtual' => 'Il peut parfois être utile de donner à votre compte un solde virtuel : un montant supplémentaire toujours ajouté ou soustrait du solde réel.', + 'accounts_create_iban' => 'Donnez à vos comptes un IBAN valide. Cela pourrait rendre une importation de données très facile à l\'avenir.', + 'accounts_create_asset_opening_balance' => 'Les comptes d\'actifs peuvent avoir un «solde d\'ouverture», indiquant le début de l\'historique de ce compte dans Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III prend en charge plusieurs devises. Les comptes d\'actifs ont une devise principale, que vous devez définir ici.', + 'accounts_create_asset_virtual' => "Il peut parfois être utile de donner à votre compte un solde virtuel\u{a0}: un montant supplémentaire toujours ajouté ou soustrait du solde réel.", // budgets index - 'budgets_index_intro' => 'Les budgets sont utilisés pour gérer vos finances et forment l\'une des principales fonctions de Firefly III.', - 'budgets_index_set_budget' => 'Définissez votre budget total pour chaque période afin que Firefly III puisse vous dire si vous avez budgétisé tout l\'argent disponible.', - 'budgets_index_see_expenses_bar' => 'Dépenser de l\'argent va lentement remplir cette barre.', - 'budgets_index_navigate_periods' => 'Parcourez des périodes pour régler facilement les budgets à l\'avance.', - 'budgets_index_new_budget' => 'Créez de nouveaux budgets comme bon vous semble.', - 'budgets_index_list_of_budgets' => 'Utilisez ce tableau pour définir les montants pour chaque budget et voir comment vous vous en sortez.', - 'budgets_index_outro' => 'Pour en savoir plus sur la budgétisation, utilisez l\'icône d\'aide en haut à droite.', + 'budgets_index_intro' => 'Les budgets sont utilisés pour gérer vos finances et forment l\'une des principales fonctions de Firefly III.', + 'budgets_index_see_expenses_bar' => 'Dépenser de l\'argent va lentement remplir cette barre.', + 'budgets_index_navigate_periods' => 'Parcourez des périodes pour régler facilement les budgets à l\'avance.', + 'budgets_index_new_budget' => 'Créez de nouveaux budgets comme bon vous semble.', + 'budgets_index_list_of_budgets' => 'Utilisez ce tableau pour définir les montants pour chaque budget et voir comment vous vous en sortez.', + 'budgets_index_outro' => 'Pour en savoir plus sur la budgétisation, utilisez l\'icône d\'aide en haut à droite.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Utilisez ces rapports pour obtenir des informations détaillées sur vos finances.', - 'reports_index_inputReportType' => 'Choisissez un type de rapport. Consultez les pages d\'aide pour voir ce que vous présente chaque rapport.', - 'reports_index_inputAccountsSelect' => 'Vous pouvez exclure ou inclure les comptes d\'actifs comme bon vous semble.', - 'reports_index_inputDateRange' => 'L\'intervalle de dates sélectionné est entièrement libre : de un jour à 10 ans.', - 'reports_index_extra-options-box' => 'Selon le rapport que vous avez sélectionné, vous pouvez sélectionner des filtres et options supplémentaires ici. Regardez cette case lorsque vous modifiez les types de rapport.', + 'reports_index_intro' => 'Utilisez ces rapports pour obtenir des informations détaillées sur vos finances.', + 'reports_index_inputReportType' => 'Choisissez un type de rapport. Consultez les pages d\'aide pour voir ce que vous présente chaque rapport.', + 'reports_index_inputAccountsSelect' => 'Vous pouvez exclure ou inclure les comptes d\'actifs comme bon vous semble.', + 'reports_index_inputDateRange' => "L'intervalle de dates sélectionné est entièrement libre\u{a0}: de un jour à 10 ans ou plus.", + 'reports_index_extra-options-box' => 'Selon le rapport que vous avez sélectionné, vous pouvez sélectionner des filtres et options supplémentaires ici. Regardez cette case lorsque vous modifiez les types de rapport.', // reports (reports) - 'reports_report_default_intro' => 'Ce rapport vous donnera un aperçu rapide et complet de vos finances. Si vous souhaitez y voir autre chose, n\'hésitez pas à me contacter !', - 'reports_report_audit_intro' => 'Ce rapport vous donnera des informations détaillées sur vos comptes d\'actifs.', - 'reports_report_audit_optionsBox' => 'Utilisez ces cases à cocher pour afficher ou masquer les colonnes qui vous intéressent.', + 'reports_report_default_intro' => 'Ce rapport vous donnera un aperçu rapide et complet de vos finances. Si vous souhaitez y voir autre chose, n\'hésitez pas à me contacter !', + 'reports_report_audit_intro' => 'Ce rapport vous donnera des informations détaillées sur vos comptes d\'actifs.', + 'reports_report_audit_optionsBox' => 'Utilisez ces cases à cocher pour afficher ou masquer les colonnes qui vous intéressent.', - 'reports_report_category_intro' => 'Ce rapport vous donnera un aperçu d\'une ou de plusieurs catégories.', - 'reports_report_category_pieCharts' => 'Ces tableaux vous donneront un aperçu des dépenses et du revenu par catégorie ou par compte.', - 'reports_report_category_incomeAndExpensesChart' => 'Ce tableau montre vos dépenses et votre revenu par catégorie.', + 'reports_report_category_intro' => 'Ce rapport vous donnera un aperçu d\'une ou de plusieurs catégories.', + 'reports_report_category_pieCharts' => 'Ces tableaux vous donneront un aperçu des dépenses et du revenu par catégorie ou par compte.', + 'reports_report_category_incomeAndExpensesChart' => 'Ce tableau montre vos dépenses et votre revenu par catégorie.', - 'reports_report_tag_intro' => 'Ce rapport vous donnera un aperçu d\'un ou plusieurs mots-clés.', - 'reports_report_tag_pieCharts' => 'Ces tableaux vous donneront un aperçu des dépenses et du revenu par tag, catégorie, ou budget.', - 'reports_report_tag_incomeAndExpensesChart' => 'Ce tableau montre vos dépenses et votre revenu par tag.', + 'reports_report_tag_intro' => 'Ce rapport vous donnera un aperçu d\'un ou plusieurs mots-clés.', + 'reports_report_tag_pieCharts' => 'Ces tableaux vous donneront un aperçu des dépenses et du revenu par tag, catégorie, ou budget.', + 'reports_report_tag_incomeAndExpensesChart' => 'Ce tableau montre vos dépenses et votre revenu par tag.', 'reports_report_budget_intro' => 'Ce rapport vous donnera un aperçu d\'un ou plusieurs budgets.', 'reports_report_budget_pieCharts' => 'Ces tableaux vous donneront un aperçu des dépenses par budget ou par compte.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'À côté de cette barre de progression sont deux boutons (+ et -) pour ajouter ou retirer de l’argent de chaque tirelire.', 'piggy-banks_index_accountStatus' => 'Pour chaque compte d\'actif avec au moins une tirelire, le statut est indiqué dans ce tableau.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Quel est votre objectif ? Un nouveau divan, une caméra, de l\'argent pour les urgences ?', 'piggy-banks_create_date' => 'Vous pouvez définir une date butoir ou une date limite pour votre tirelire.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Utilisez des factures pour suivre les sommes que vous avez à payer à chaque période. Pensez aux dépenses comme le loyer, l\'assurance ou les remboursements d\'emprunts.', 'bills_create_name' => 'Utilisez un nom parlant tel que "Loyer" ou "Assurance maladie".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Sélectionnez un montant minimum et maximum pour cette facture.', 'bills_create_repeat_freq_holder' => 'La plupart des factures sont mensuelles, mais vous pouvez définir une autre fréquence ici.', 'bills_create_skip_holder' => 'Si une facture se répète toutes les 2 semaines, le champ "sauter" doit être réglé sur "1" pour sauter une semaine sur deux.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Utilisez ce bouton pour voir quelles opérations correspondent à votre règle.', 'rules_create_actions' => 'Définissez autant d\'actions que vous le souhaitez.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Plus d\'options sont disponibles derrière ces onglets.', diff --git a/resources/lang/fr_FR/list.php b/resources/lang/fr_FR/list.php index 90ea9b98c9..c6cac90e12 100644 --- a/resources/lang/fr_FR/list.php +++ b/resources/lang/fr_FR/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Boutons', - 'icon' => 'Icône', - 'id' => 'Identifiant', - 'create_date' => 'Créé le', - 'update_date' => 'Mis à jour le', - 'updated_at' => 'Mis à jour le', - 'balance_before' => 'Solde avant', - 'balance_after' => 'Solde après', - 'name' => 'Nom', - 'role' => 'Rôle', - 'currentBalance' => 'Solde courant', - 'linked_to_rules' => 'Règles applicables', - 'active' => 'Actif ?', - 'percentage' => 'pct.', - 'recurring_transaction' => 'Opération périodique', - 'next_due' => 'Prochaine échéance', - 'transaction_type' => 'Type', - 'lastActivity' => 'Activité récente', - 'balanceDiff' => 'Différence de solde', - 'other_meta_data' => 'Autres métadonnées', - 'invited_at' => 'Invité le', - 'expires' => 'L\'invitation expire', - 'invited_by' => 'Invité par', - 'invite_link' => 'Lien d\'invitation', - 'account_type' => 'Type de compte', - 'created_at' => 'Créé le', - 'account' => 'Compte', - 'external_url' => 'URL externe', - 'matchingAmount' => 'Montant', - 'destination' => 'Destination', - 'source' => 'Source', - 'next_expected_match' => 'Prochaine association attendue', - 'automatch' => 'Correspondance automatique ?', + 'buttons' => 'Boutons', + 'icon' => 'Icône', + 'id' => 'Identifiant', + 'create_date' => 'Créé le', + 'update_date' => 'Mis à jour le', + 'updated_at' => 'Mis à jour le', + 'balance_before' => 'Solde avant', + 'balance_after' => 'Solde après', + 'name' => 'Nom', + 'role' => 'Rôle', + 'currentBalance' => 'Solde courant', + 'linked_to_rules' => 'Règles applicables', + 'active' => 'Actif ?', + 'percentage' => 'pct.', + 'recurring_transaction' => 'Opération périodique', + 'next_due' => 'Prochaine échéance', + 'transaction_type' => 'Type', + 'lastActivity' => 'Activité récente', + 'balanceDiff' => 'Différence de solde', + 'other_meta_data' => 'Autres métadonnées', + 'invited_at' => 'Invité le', + 'expires' => 'L\'invitation expire', + 'invited_by' => 'Invité par', + 'invite_link' => 'Lien d\'invitation', + 'account_type' => 'Type de compte', + 'created_at' => 'Créé le', + 'account' => 'Compte', + 'external_url' => 'URL externe', + 'matchingAmount' => 'Montant', + 'destination' => 'Destination', + 'source' => 'Source', + 'next_expected_match' => 'Prochaine association attendue', + 'automatch' => 'Correspondance automatique ?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Répétitions', 'description' => 'Description', 'amount' => 'Montant', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Compte avec bunq', 'file_name' => 'Nom du fichier', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Taille du fichier', - 'file_type' => 'Type de fichier', - 'attached_to' => 'Attaché à', - 'file_exists' => 'Le fichier existe', - 'spectre_bank' => 'Banque', - 'spectre_last_use' => 'Dernière connexion', - 'spectre_status' => 'Statut', - 'bunq_payment_id' => 'ID de paiement bunq', - 'repetitions' => 'Répétitions', - 'title' => 'Titre', - 'transaction_s' => 'Opération(s)', - 'field' => 'Champ', - 'value' => 'Valeur', - 'interest' => 'Intérêt', - 'interest_period' => 'Période d’intérêt', - 'liability_type' => 'Type de passif', - 'liability_direction' => 'Sens du passif', - 'end_date' => 'Date de fin', - 'payment_info' => 'Informations sur le paiement', - 'expected_info' => 'Prochaine opération attendue', - 'start_date' => 'Date de début', - 'trigger' => 'Déclencheur', - 'response' => 'Réponse', - 'delivery' => 'Distribution', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Taille du fichier', + 'file_type' => 'Type de fichier', + 'attached_to' => 'Attaché à', + 'file_exists' => 'Le fichier existe', + 'spectre_bank' => 'Banque', + 'spectre_last_use' => 'Dernière connexion', + 'spectre_status' => 'Statut', + 'bunq_payment_id' => 'ID de paiement bunq', + 'repetitions' => 'Répétitions', + 'title' => 'Titre', + 'transaction_s' => 'Opération(s)', + 'field' => 'Champ', + 'value' => 'Valeur', + 'interest' => 'Intérêt', + 'interest_period' => 'Période d’intérêt', + 'liability_type' => 'Type de passif', + 'liability_direction' => 'Sens du passif', + 'end_date' => 'Date de fin', + 'payment_info' => 'Informations sur le paiement', + 'expected_info' => 'Prochaine opération attendue', + 'start_date' => 'Date de début', + 'trigger' => 'Déclencheur', + 'response' => 'Réponse', + 'delivery' => 'Distribution', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/fr_FR/pagination.php b/resources/lang/fr_FR/pagination.php index e0a4020ee3..6f145de61f 100644 --- a/resources/lang/fr_FR/pagination.php +++ b/resources/lang/fr_FR/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/fr_FR/passwords.php b/resources/lang/fr_FR/passwords.php index 6d723efa9d..88e0b99879 100644 --- a/resources/lang/fr_FR/passwords.php +++ b/resources/lang/fr_FR/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/fr_FR/rules.php b/resources/lang/fr_FR/rules.php index 57c733eee1..1df31eb904 100644 --- a/resources/lang/fr_FR/rules.php +++ b/resources/lang/fr_FR/rules.php @@ -1,6 +1,5 @@ 'Firefly III ne trouve pas l\'abonnement ":name"', 'no_notes_to_move' => 'L\'opération n\'a pas de notes à déplacer dans le champ description', 'no_tags_to_remove' => 'L\'opération n\'a pas de tags à supprimer', + 'not_withdrawal' => 'L\'opération n\'est pas une dépense', + 'not_deposit' => 'L\'opération n\'est pas un dépôt', 'cannot_find_tag' => 'Firefly III ne trouve pas le tag ":tag"', 'cannot_find_asset' => 'Firefly III ne trouve pas le compte d\'actif ":name"', 'cannot_find_accounts' => 'Firefly III ne trouve pas le compte source ou le compte de destination', diff --git a/resources/lang/fr_FR/validation.php b/resources/lang/fr_FR/validation.php index 6feb038bc6..4a4dab522e 100644 --- a/resources/lang/fr_FR/validation.php +++ b/resources/lang/fr_FR/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'La requête ne contient pas de clause "where"', - 'missing_update' => 'La requête ne contient pas de clause "update"', - 'invalid_where_key' => 'Le JSON contient une clé invalide pour la clause "where"', - 'invalid_update_key' => 'Le JSON contient une clé invalide pour la clause "update"', - 'invalid_query_data' => 'Il y a des données invalides dans le champ %s:%s de votre requête.', - 'invalid_query_account_type' => 'Votre requête contient des comptes de différents types, ce qui n\'est pas autorisé.', - 'invalid_query_currency' => 'Votre requête contient des comptes qui ont des paramètres de devise différents, ce qui n\'est pas autorisé.', - 'iban' => 'Il ne s\'agit pas d\'un IBAN valide.', - 'zero_or_more' => 'Le montant ne peut pas être négatif.', - 'date_or_time' => 'La valeur doit être une date ou une heure valide (ISO 8601).', - 'source_equals_destination' => 'Le compte source est identique au compte de destination.', - 'unique_account_number_for_user' => 'Il semble que ce numéro de compte est déjà utilisé.', - 'unique_iban_for_user' => 'Il semble que cet IBAN soit déjà utilisé.', - 'deleted_user' => 'Compte tenu des contraintes de sécurité, vous ne pouvez pas vous inscrire en utilisant cette adresse e-mail.', - 'rule_trigger_value' => 'Cette valeur n’est pas valide pour le déclencheur sélectionné.', - 'rule_action_value' => 'Cette valeur n’est pas valide pour l’action sélectionnée.', - 'file_already_attached' => 'Le fichier téléchargé ":name" est déjà attaché à cet objet.', - 'file_attached' => 'Fichier ":name" téléchargé avec succès.', - 'must_exist' => 'L\'ID dans le champ :attribute n\'existe pas dans la base de données.', - 'all_accounts_equal' => 'Tous les comptes dans ce champ doivent être égaux.', - 'group_title_mandatory' => 'Un titre de groupe est obligatoire lorsqu\'il y a plus d\'une opération.', - 'transaction_types_equal' => 'Toutes les ventilations doivent être de même type.', - 'invalid_transaction_type' => 'Type d\'opération non valide.', - 'invalid_selection' => 'Votre sélection est invalide.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Besoin d\'au moins une opération.', - 'recurring_transaction_id' => 'Au moins une opération est nécessaire.', - 'need_id_to_match' => 'Vous devez saisir cette entrée avec un identifiant pour que l\'API puisse la faire correspondre.', - 'too_many_unmatched' => 'Trop d\'opérations saisies ne peuvent être associées à leurs entrées respectives dans la base de données. Assurez-vous que les entrées existantes ont un identifiant valide.', - 'id_does_not_match' => 'L\'identifiant #:id saisi ne correspond pas à l\'identifiant attendu. Assurez-vous qu\'il correspond ou omettez le champ.', - 'at_least_one_repetition' => 'Besoin d\'au moins une répétition.', - 'require_repeat_until' => 'Besoin d’un certain nombre de répétitions ou d\'une date de fin (repeat_until). Pas les deux.', - 'require_currency_info' => 'Le contenu de ce champ n\'est pas valide sans informations sur la devise.', - 'not_transfer_account' => 'Ce compte n\'est pas un compte qui peut être utilisé pour les transferts.', - 'require_currency_amount' => 'Le contenu de ce champ est invalide sans informations sur le montant en devise étrangère.', - 'require_foreign_currency' => 'Ce champ doit être un nombre', - 'require_foreign_dest' => 'Ce champ doit correspondre à la devise du compte de destination.', - 'require_foreign_src' => 'Ce champ doit correspondre à la devise du compte source.', - 'equal_description' => 'La description de l\'opération ne doit pas être identique à la description globale.', - 'file_invalid_mime' => 'Le fichier ":name" est du type ":mime" ce qui n\'est pas accepté pour un nouvel envoi.', - 'file_too_large' => 'Le fichier ":name" est trop grand.', - 'belongs_to_user' => 'La valeur de :attribute est inconnue.', - 'accepted' => 'Le champ :attribute doit être accepté.', - 'bic' => 'Ce n’est pas un code BIC valide.', - 'at_least_one_trigger' => 'Une règle doit avoir au moins un déclencheur.', - 'at_least_one_active_trigger' => 'Une règle doit avoir au moins un déclencheur.', - 'at_least_one_action' => 'Une règle doit avoir au moins une action.', - 'at_least_one_active_action' => 'La règle doit avoir au moins une action active.', - 'base64' => 'Il ne s\'agit pas de données base64 valides.', - 'model_id_invalid' => 'L’ID fournit ne semble pas valide pour ce modèle.', - 'less' => ':attribute doit être inférieur à 10 000 000', - 'active_url' => 'Le champ :attribute n\'est pas une URL valide.', - 'after' => 'Le champ :attribute doit être une date postérieure à :date.', - 'date_after' => 'La date de début doit être antérieure à la date de fin.', - 'alpha' => 'Le champ :attribute doit seulement contenir des lettres.', - 'alpha_dash' => 'Le champ :attribute peut seulement contenir des lettres, des chiffres et des tirets.', - 'alpha_num' => 'Le champ :attribute peut seulement contenir des chiffres et des lettres.', - 'array' => 'Le champ :attribute doit être un tableau.', - 'unique_for_user' => 'Il existe déjà une entrée avec ceci :attribute.', - 'before' => 'Le champ :attribute doit être une date antérieure à :date.', - 'unique_object_for_user' => 'Ce nom est déjà utilisé.', - 'unique_account_for_user' => 'Ce nom de compte est déjà utilisé.', + 'bad_type_source' => 'Firefly III ne peut pas déterminer le type de transaction basé sur ce compte source.', + 'bad_type_destination' => 'Firefly III ne peut pas déterminer le type de transaction basé sur ce compte de destination.', + 'missing_where' => 'La requête ne contient pas de clause "where"', + 'missing_update' => 'La requête ne contient pas de clause "update"', + 'invalid_where_key' => 'Le JSON contient une clé invalide pour la clause "where"', + 'invalid_update_key' => 'Le JSON contient une clé invalide pour la clause "update"', + 'invalid_query_data' => 'Il y a des données invalides dans le champ %s:%s de votre requête.', + 'invalid_query_account_type' => 'Votre requête contient des comptes de différents types, ce qui n\'est pas autorisé.', + 'invalid_query_currency' => 'Votre requête contient des comptes qui ont des paramètres de devise différents, ce qui n\'est pas autorisé.', + 'iban' => 'Il ne s\'agit pas d\'un IBAN valide.', + 'zero_or_more' => 'Le montant ne peut pas être négatif.', + 'more_than_zero' => 'La valeur doit être supérieure à zéro.', + 'more_than_zero_correct' => 'La valeur doit être supérieure ou égale à zéro.', + 'no_asset_account' => 'Ce n\'est pas un compte d\'actif.', + 'date_or_time' => 'La valeur doit être une date ou une heure valide (ISO 8601).', + 'source_equals_destination' => 'Le compte source est identique au compte de destination.', + 'unique_account_number_for_user' => 'Il semble que ce numéro de compte soit déjà utilisé.', + 'unique_iban_for_user' => 'Il semble que cet IBAN soit déjà utilisé.', + 'reconciled_forbidden_field' => 'Cette opération est déjà rappochée, vous ne pouvez pas modifier «:field»', + 'deleted_user' => 'Compte tenu des contraintes de sécurité, vous ne pouvez pas vous inscrire en utilisant cette adresse e-mail.', + 'rule_trigger_value' => 'Cette valeur n’est pas valide pour le déclencheur sélectionné.', + 'rule_action_value' => 'Cette valeur n’est pas valide pour l’action sélectionnée.', + 'file_already_attached' => 'Le fichier téléchargé ":name" est déjà attaché à cet objet.', + 'file_attached' => 'Fichier ":name" téléchargé avec succès.', + 'must_exist' => 'L\'ID dans le champ :attribute n\'existe pas dans la base de données.', + 'all_accounts_equal' => 'Tous les comptes dans ce champ doivent être égaux.', + 'group_title_mandatory' => 'Un titre de groupe est obligatoire lorsqu\'il y a plus d\'une opération.', + 'transaction_types_equal' => 'Toutes les ventilations doivent être de même type.', + 'invalid_transaction_type' => 'Type d\'opération non valide.', + 'invalid_selection' => 'Votre sélection est invalide.', + 'belongs_user' => 'Cette valeur est liée à un objet qui ne semble pas exister.', + 'belongs_user_or_user_group' => 'Cette valeur est liée à un objet qui ne semble pas exister dans votre administration financière actuelle.', + 'at_least_one_transaction' => 'Besoin d\'au moins une opération.', + 'recurring_transaction_id' => 'Au moins une opération est nécessaire.', + 'need_id_to_match' => 'Vous devez saisir cette entrée avec un identifiant pour que l\'API puisse la faire correspondre.', + 'too_many_unmatched' => 'Trop d\'opérations saisies ne peuvent être associées à leurs entrées respectives dans la base de données. Assurez-vous que les entrées existantes ont un identifiant valide.', + 'id_does_not_match' => 'L\'identifiant #:id saisi ne correspond pas à l\'identifiant attendu. Assurez-vous qu\'il correspond ou omettez le champ.', + 'at_least_one_repetition' => 'Besoin d\'au moins une répétition.', + 'require_repeat_until' => 'Besoin d’un certain nombre de répétitions ou d\'une date de fin (repeat_until). Pas les deux.', + 'require_currency_info' => 'Le contenu de ce champ n\'est pas valide sans informations sur la devise.', + 'not_transfer_account' => 'Ce compte n\'est pas un compte qui peut être utilisé pour les transferts.', + 'require_currency_amount' => 'Le contenu de ce champ est invalide sans informations sur le montant en devise étrangère.', + 'require_foreign_currency' => 'Ce champ doit être un nombre', + 'require_foreign_dest' => 'Ce champ doit correspondre à la devise du compte de destination.', + 'require_foreign_src' => 'Ce champ doit correspondre à la devise du compte source.', + 'equal_description' => 'La description de l\'opération ne doit pas être identique à la description globale.', + 'file_invalid_mime' => 'Le fichier ":name" est du type ":mime" ce qui n\'est pas accepté pour un nouvel envoi.', + 'file_too_large' => 'Le fichier ":name" est trop grand.', + 'belongs_to_user' => 'La valeur de :attribute est inconnue.', + 'accepted' => 'Le champ :attribute doit être accepté.', + 'bic' => 'Ce n’est pas un code BIC valide.', + 'at_least_one_trigger' => 'Une règle doit avoir au moins un déclencheur.', + 'at_least_one_active_trigger' => 'Une règle doit avoir au moins un déclencheur.', + 'at_least_one_action' => 'Une règle doit avoir au moins une action.', + 'at_least_one_active_action' => 'La règle doit avoir au moins une action active.', + 'base64' => 'Il ne s\'agit pas de données base64 valides.', + 'model_id_invalid' => 'L’ID fournit ne semble pas valide pour ce modèle.', + 'less' => ':attribute doit être inférieur à 10 000 000', + 'active_url' => 'Le champ :attribute n\'est pas une URL valide.', + 'after' => 'Le champ :attribute doit être une date postérieure à :date.', + 'date_after' => 'La date de début doit être antérieure à la date de fin.', + 'alpha' => 'Le champ :attribute doit seulement contenir des lettres.', + 'alpha_dash' => 'Le champ :attribute peut seulement contenir des lettres, des chiffres et des tirets.', + 'alpha_num' => 'Le champ :attribute peut seulement contenir des chiffres et des lettres.', + 'array' => 'Le champ :attribute doit être un tableau.', + 'unique_for_user' => 'Il existe déjà une entrée avec ceci :attribute.', + 'before' => 'Le champ :attribute doit être une date antérieure à :date.', + 'unique_object_for_user' => 'Ce nom est déjà utilisé.', + 'unique_account_for_user' => 'Ce nom de compte est déjà utilisé.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.', + 'between.file' => 'Le fichier :attribute doit avoir une taille entre :min et :max kilo-octets.', + 'between.string' => 'Le texte :attribute doit avoir entre :min et :max caractères.', + 'between.array' => 'Le tableau :attribute doit avoir entre :min et :max éléments.', + 'boolean' => 'Le champ :attribute doit être vrai ou faux.', + 'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.', + 'date' => 'Le champ :attribute n\'est pas une date valide.', + 'date_format' => 'Le champ :attribute ne correspond pas au format :format.', + 'different' => 'Les champs :attribute et :other doivent être différents.', + 'digits' => 'Le champ :attribute doit avoir :digits chiffres.', + 'digits_between' => 'Le champ :attribute doit avoir entre :min et :max chiffres.', + 'email' => 'Le champ :attribute doit être une adresse email valide.', + 'filled' => 'Le champ :attribute est obligatoire.', + 'exists' => 'Le champ :attribute sélectionné est invalide.', + 'image' => 'Le champ :attribute doit être une image.', + 'in' => 'Le champ :attribute est invalide.', + 'integer' => 'Le champ :attribute doit être un entier.', + 'ip' => 'Le champ :attribute doit être une adresse IP valide.', + 'json' => 'Le champ :attribute doit être un document JSON valide.', + 'max.numeric' => 'La valeur de :attribute ne peut être supérieure à :max.', + 'max.file' => 'Le fichier :attribute ne peut être plus gros que :max kilo-octets.', + 'max.string' => 'Le texte de :attribute ne peut contenir plus de :max caractères.', + 'max.array' => 'Le tableau :attribute ne peut avoir plus de :max éléments.', + 'mimes' => 'Le champ :attribute doit être un fichier de type : :values.', + 'min.numeric' => 'La valeur de :attribute doit être supérieure à :min.', + 'lte.numeric' => ':attribute doit être inférieur ou égal à :value.', + 'min.file' => 'Le fichier :attribute doit être plus gros que :min kilo-octets.', + 'min.string' => 'Le texte :attribute doit contenir au moins :min caractères.', + 'min.array' => 'Le tableau :attribute doit avoir au moins :min éléments.', + 'not_in' => 'Le champ :attribute sélectionné n\'est pas valide.', + 'numeric' => 'Le champ :attribute doit contenir un nombre.', + 'scientific_notation' => 'Le champ :attribute ne peut pas utiliser la notation scientifique.', + 'numeric_native' => 'Le montant natif doit être un nombre.', + 'numeric_destination' => 'Le montant de destination doit être un nombre.', + 'numeric_source' => 'Le montant source doit être un nombre.', + 'regex' => 'Le format du champ :attribute est invalide.', + 'required' => 'Le champ :attribute est obligatoire.', + 'required_if' => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.', + 'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est :values.', + 'required_with' => 'Le champ :attribute est obligatoire quand :values est présent.', + 'required_with_all' => 'Le champ :attribute est obligatoire quand :values est présent.', + 'required_without' => 'Le champ :attribute est obligatoire quand :values n\'est pas présent.', + 'required_without_all' => 'Le champ :attribute est requis quand aucun de :values n\'est présent.', + 'same' => 'Les champs :attribute et :other doivent être identiques.', + 'size.numeric' => 'La valeur de :attribute doit être :size.', + 'amount_min_over_max' => 'Le montant minimum ne peut pas être supérieur au montant maximum.', + 'size.file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.', + 'size.string' => 'Le texte de :attribute doit contenir :size caractères.', + 'size.array' => 'Le tableau :attribute doit contenir :size éléments.', + 'unique' => 'La valeur du champ :attribute est déjà utilisée.', + 'string' => 'Le champ :attribute doit être une chaîne de caractères.', + 'url' => 'Le format de l\'URL de :attribute n\'est pas valide.', + 'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.', + '2fa_code' => 'Le champ :attribute est invalide.', + 'dimensions' => "Le\u{a0}:attribute possède des dimensions d’image non valides.", + 'distinct' => ':attribute possède une valeur en double.', + 'file' => "Le\u{a0}:attribute doit être un fichier.", + 'in_array' => 'Le champ :attribute n\'existe pas dans :other.', + 'present' => 'Le champs :attribute doit être rempli.', + 'amount_zero' => 'Le montant total ne peut pas être zéro.', + 'current_target_amount' => 'Le montant actuel doit être inférieur au montant cible.', + 'unique_piggy_bank_for_user' => 'Le nom de la tirelire doit être unique.', + 'unique_object_group' => 'Le nom du groupe doit être unique', + 'starts_with' => 'La valeur doit commencer par :values.', + 'unique_webhook' => 'Vous avez déjà un webhook avec cette combinaison d\'URL, de déclencheur, de réponse et de livraison.', + 'unique_existing_webhook' => 'Vous avez déjà un autre webhook avec cette combinaison d\'URL, de déclencheur, de réponse et de livraison.', + 'same_account_type' => 'Les deux comptes doivent être du même type', + 'same_account_currency' => 'Les deux comptes doivent avoir la même devise', - 'between.numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.', - 'between.file' => 'Le fichier :attribute doit avoir une taille entre :min et :max kilo-octets.', - 'between.string' => 'Le texte :attribute doit avoir entre :min et :max caractères.', - 'between.array' => 'Le tableau :attribute doit avoir entre :min et :max éléments.', - 'boolean' => 'Le champ :attribute doit être vrai ou faux.', - 'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.', - 'date' => 'Le champ :attribute n\'est pas une date valide.', - 'date_format' => 'Le champ :attribute ne correspond pas au format :format.', - 'different' => 'Les champs :attribute et :other doivent être différents.', - 'digits' => 'Le champ :attribute doit avoir :digits chiffres.', - 'digits_between' => 'Le champ :attribute doit avoir entre :min et :max chiffres.', - 'email' => 'Le champ :attribute doit être une adresse email valide.', - 'filled' => 'Le champ :attribute est obligatoire.', - 'exists' => 'Le champ :attribute sélectionné est invalide.', - 'image' => 'Le champ :attribute doit être une image.', - 'in' => 'Le champ :attribute est invalide.', - 'integer' => 'Le champ :attribute doit être un entier.', - 'ip' => 'Le champ :attribute doit être une adresse IP valide.', - 'json' => 'Le champ :attribute doit être un document JSON valide.', - 'max.numeric' => 'La valeur de :attribute ne peut être supérieure à :max.', - 'max.file' => 'Le fichier :attribute ne peut être plus gros que :max kilo-octets.', - 'max.string' => 'Le texte de :attribute ne peut contenir plus de :max caractères.', - 'max.array' => 'Le tableau :attribute ne peut avoir plus de :max éléments.', - 'mimes' => 'Le champ :attribute doit être un fichier de type : :values.', - 'min.numeric' => 'La valeur de :attribute doit être supérieure à :min.', - 'lte.numeric' => ':attribute doit être inférieur ou égal à :value.', - 'min.file' => 'Le fichier :attribute doit être plus gros que :min kilo-octets.', - 'min.string' => 'Le texte :attribute doit contenir au moins :min caractères.', - 'min.array' => 'Le tableau :attribute doit avoir au moins :min éléments.', - 'not_in' => 'Le champ :attribute sélectionné n\'est pas valide.', - 'numeric' => 'Le champ :attribute doit contenir un nombre.', - 'numeric_native' => 'Le montant natif doit être un nombre.', - 'numeric_destination' => 'Le montant de destination doit être un nombre.', - 'numeric_source' => 'Le montant source doit être un nombre.', - 'regex' => 'Le format du champ :attribute est invalide.', - 'required' => 'Le champ :attribute est obligatoire.', - 'required_if' => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.', - 'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est :values.', - 'required_with' => 'Le champ :attribute est obligatoire quand :values est présent.', - 'required_with_all' => 'Le champ :attribute est obligatoire quand :values est présent.', - 'required_without' => 'Le champ :attribute est obligatoire quand :values n\'est pas présent.', - 'required_without_all' => 'Le champ :attribute est requis quand aucun de :values n\'est présent.', - 'same' => 'Les champs :attribute et :other doivent être identiques.', - 'size.numeric' => 'La valeur de :attribute doit être :size.', - 'amount_min_over_max' => 'Le montant minimum ne peut pas être supérieur au montant maximum.', - 'size.file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.', - 'size.string' => 'Le texte de :attribute doit contenir :size caractères.', - 'size.array' => 'Le tableau :attribute doit contenir :size éléments.', - 'unique' => 'La valeur du champ :attribute est déjà utilisée.', - 'string' => 'Le champ :attribute doit être une chaîne de caractères.', - 'url' => 'Le format de l\'URL de :attribute n\'est pas valide.', - 'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.', - '2fa_code' => 'Le champ :attribute est invalide.', - 'dimensions' => 'Le :attribute possède des dimensions d’image non valides.', - 'distinct' => ':attribute possède une valeur en double.', - 'file' => 'Le :attribute doit être un fichier.', - 'in_array' => 'Le champ :attribute n\'existe pas dans :other.', - 'present' => 'Le champs :attribute doit être rempli.', - 'amount_zero' => 'Le montant total ne peut pas être zéro.', - 'current_target_amount' => 'Le montant actuel doit être inférieur au montant cible.', - 'unique_piggy_bank_for_user' => 'Le nom de la tirelire doit être unique.', - 'unique_object_group' => 'Le nom du groupe doit être unique', - 'starts_with' => 'La valeur doit commencer par :values.', - 'unique_webhook' => 'Vous avez déjà un webhook avec cette combinaison d\'URL, de déclencheur, de réponse et de livraison.', - 'unique_existing_webhook' => 'Vous avez déjà un autre webhook avec cette combinaison d\'URL, de déclencheur, de réponse et de livraison.', - 'same_account_type' => 'Les deux comptes doivent être du même type', - 'same_account_currency' => 'Les deux comptes doivent avoir la même devise', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Ce n\'est pas un mot de passe sécurisé. Veuillez essayez à nouveau. Pour plus d\'informations, visitez https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Type de répétition non valide pour des opérations périodiques.', - 'valid_recurrence_rep_moment' => 'Période de répétition non valide pour ce type de répétition.', - 'invalid_account_info' => 'Informations de compte non valides.', - 'attributes' => [ + 'secure_password' => 'Ce n\'est pas un mot de passe sécurisé. Veuillez essayez à nouveau. Pour plus d\'informations, visitez https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Type de répétition non valide pour des opérations périodiques.', + 'valid_recurrence_rep_moment' => 'Période de répétition non valide pour ce type de répétition.', + 'invalid_account_info' => 'Informations de compte non valides.', + 'attributes' => [ 'email' => 'adresse email', 'description' => 'description', 'amount' => 'montant', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Vous devez obtenir un ID de compte source valide et/ou un nom de compte source valide pour continuer.', - 'withdrawal_source_bad_data' => '[a] Impossible de trouver un compte source valide lors de la recherche de l\'ID ":id" ou du nom ":name".', - 'withdrawal_dest_need_data' => '[a] Vous devez obtenir un ID de compte de destination valide et/ou un nom de compte de destination valide pour continuer.', - 'withdrawal_dest_bad_data' => 'Impossible de trouver un compte de destination valide lors de la recherche de l\'ID ":id" ou du nom ":name".', + 'withdrawal_source_need_data' => 'Vous devez obtenir un ID de compte source valide et/ou un nom de compte source valide pour continuer.', + 'withdrawal_source_bad_data' => '[a] Impossible de trouver un compte source valide lors de la recherche de l\'ID ":id" ou du nom ":name".', + 'withdrawal_dest_need_data' => '[a] Vous devez obtenir un ID de compte de destination valide et/ou un nom de compte de destination valide pour continuer.', + 'withdrawal_dest_bad_data' => 'Impossible de trouver un compte de destination valide lors de la recherche de l\'ID ":id" ou du nom ":name".', - 'withdrawal_dest_iban_exists' => 'Cet IBAN de compte de destination est déjà utilisé par un compte d\'actif ou un passif et ne peut pas être utilisé comme destination de dépense.', - 'deposit_src_iban_exists' => 'Cet IBAN de compte source est déjà utilisé par un compte d\'actif ou un passif et ne peut pas être utilisé comme source de dépôt.', + 'withdrawal_dest_iban_exists' => 'Cet IBAN de compte de destination est déjà utilisé par un compte d\'actif ou un passif et ne peut pas être utilisé comme destination de dépense.', + 'deposit_src_iban_exists' => 'Cet IBAN de compte source est déjà utilisé par un compte d\'actif ou un passif et ne peut pas être utilisé comme source de dépôt.', - 'reconciliation_source_bad_data' => 'Impossible de trouver un compte de rapprochement valide lors de la recherche de l\'ID ":id" ou du nom ":name".', + 'reconciliation_source_bad_data' => 'Impossible de trouver un compte de rapprochement valide lors de la recherche de l\'ID ":id" ou du nom ":name".', - 'generic_source_bad_data' => '[e] Impossible de trouver un compte source valide lors de la recherche de l\'ID ":id" ou du nom ":name".', + 'generic_source_bad_data' => '[e] Impossible de trouver un compte source valide lors de la recherche de l\'ID ":id" ou du nom ":name".', - 'deposit_source_need_data' => 'Vous devez obtenir un ID de compte source valide et/ou un nom de compte source valide pour continuer.', - 'deposit_source_bad_data' => '[b] Impossible de trouver un compte source valide lors de la recherche de l\'ID ":id" ou du nom ":name".', - 'deposit_dest_need_data' => '[b] Vous devez obtenir un ID de compte de destination valide et/ou un nom de compte de destination valide pour continuer.', - 'deposit_dest_bad_data' => 'Impossible de trouver un compte de destination valide lors de la recherche de l\'ID ":id" ou du nom ":name".', - 'deposit_dest_wrong_type' => 'Le compte de destination saisi n\'est pas du bon type.', + 'deposit_source_need_data' => 'Vous devez obtenir un ID de compte source valide et/ou un nom de compte source valide pour continuer.', + 'deposit_source_bad_data' => '[b] Impossible de trouver un compte source valide lors de la recherche de l\'ID ":id" ou du nom ":name".', + 'deposit_dest_need_data' => '[b] Vous devez obtenir un ID de compte de destination valide et/ou un nom de compte de destination valide pour continuer.', + 'deposit_dest_bad_data' => 'Impossible de trouver un compte de destination valide lors de la recherche de l\'ID ":id" ou du nom ":name".', + 'deposit_dest_wrong_type' => 'Le compte de destination saisi n\'est pas du bon type.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Vous devez obtenir un ID de compte source valide et/ou un nom de compte source valide pour continuer.', + 'transfer_source_bad_data' => '[c] Impossible de trouver un compte source valide lors de la recherche de l\'ID ":id" ou du nom ":name".', + 'transfer_dest_need_data' => '[c] Vous devez obtenir un ID de compte de destination valide et/ou un nom de compte de destination valide pour continuer.', + 'transfer_dest_bad_data' => 'Impossible de trouver un compte de destination valide lors de la recherche de l\'ID ":id" ou du nom ":name".', + 'need_id_in_edit' => 'Chaque ventilation doit avoir transaction_journal_id (ID valide ou 0).', - 'transfer_source_need_data' => 'Vous devez obtenir un ID de compte source valide et/ou un nom de compte source valide pour continuer.', - 'transfer_source_bad_data' => '[c] Impossible de trouver un compte source valide lors de la recherche de l\'ID ":id" ou du nom ":name".', - 'transfer_dest_need_data' => '[c] Vous devez obtenir un ID de compte de destination valide et/ou un nom de compte de destination valide pour continuer.', - 'transfer_dest_bad_data' => 'Impossible de trouver un compte de destination valide lors de la recherche de l\'ID ":id" ou du nom ":name".', - 'need_id_in_edit' => 'Chaque ventilation doit avoir transaction_journal_id (ID valide ou 0).', + 'ob_source_need_data' => 'Vous devez obtenir un ID de compte source valide et/ou un nom de compte source valide pour continuer.', + 'lc_source_need_data' => 'Besoin d\'un identifiant de compte source valide pour continuer.', + 'ob_dest_need_data' => '[d] Vous devez obtenir un ID de compte de destination valide et/ou un nom de compte de destination valide pour continuer.', + 'ob_dest_bad_data' => 'Impossible de trouver un compte de destination valide lors de la recherche de l\'ID ":id" ou du nom ":name".', + 'reconciliation_either_account' => 'Pour soumettre un rapprochement, vous devez soumettre soit une source soit un compte de destination. Ni les deux, ni aucun.', - 'ob_source_need_data' => 'Vous devez obtenir un ID de compte source valide et/ou un nom de compte source valide pour continuer.', - 'lc_source_need_data' => 'Besoin d\'un identifiant de compte source valide pour continuer.', - 'ob_dest_need_data' => '[d] Vous devez obtenir un ID de compte de destination valide et/ou un nom de compte de destination valide pour continuer.', - 'ob_dest_bad_data' => 'Impossible de trouver un compte de destination valide lors de la recherche de l\'ID ":id" ou du nom ":name".', - 'reconciliation_either_account' => 'Pour soumettre un rapprochement, vous devez soumettre soit une source soit un compte de destination. Ni les deux, ni aucun.', + 'generic_invalid_source' => 'Vous ne pouvez pas utiliser ce compte comme compte source.', + 'generic_invalid_destination' => 'Vous ne pouvez pas utiliser ce compte comme compte de destination.', - 'generic_invalid_source' => 'Vous ne pouvez pas utiliser ce compte comme compte source.', - 'generic_invalid_destination' => 'Vous ne pouvez pas utiliser ce compte comme compte de destination.', + 'generic_no_source' => 'Vous devez saisir les informations du compte source ou saisir un ID de journal d\'opération.', + 'generic_no_destination' => 'Vous devez saisir les informations du compte destination ou saisir un ID de journal d\'opération.', - 'generic_no_source' => 'Vous devez saisir les informations du compte source ou saisir un ID de journal d\'opération.', - 'generic_no_destination' => 'Vous devez saisir les informations du compte destination ou saisir un ID de journal d\'opération.', - - 'gte.numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.', - 'gt.numeric' => 'Le champ :attribute doit être plus grand que :value.', - 'gte.file' => 'L\'attribut :attribute doit contenir au moins :value kilo-octets.', - 'gte.string' => 'Le texte :attribute doit contenir au moins :value caractères.', - 'gte.array' => 'L\'attribut :attribute doit avoir :value éléments ou plus.', + 'gte.numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.', + 'gt.numeric' => 'Le champ :attribute doit être plus grand que :value.', + 'gte.file' => 'L\'attribut :attribute doit contenir au moins :value kilo-octets.', + 'gte.string' => 'Le texte :attribute doit contenir au moins :value caractères.', + 'gte.array' => 'L\'attribut :attribute doit avoir :value éléments ou plus.', 'amount_required_for_auto_budget' => 'Le montant est requis.', 'auto_budget_amount_positive' => 'Le montant doit être supérieur à zéro.', + 'auto_budget_period_mandatory' => 'La période du budget automatique est un champ obligatoire.', // no access to administration: diff --git a/resources/lang/hu_HU/api.php b/resources/lang/hu_HU/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/hu_HU/api.php +++ b/resources/lang/hu_HU/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/hu_HU/auth.php b/resources/lang/hu_HU/auth.php index 3dc31fe342..1c6790a7c8 100644 --- a/resources/lang/hu_HU/auth.php +++ b/resources/lang/hu_HU/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Ezek a hitelesítő adatok nem egyeznek meg a tárolt adatokkal.', 'throttle' => 'Túl sok belépési próbálkozás. :seconds másodperc múlva újra meg lehet próbálni.', diff --git a/resources/lang/hu_HU/breadcrumbs.php b/resources/lang/hu_HU/breadcrumbs.php index 13e8722af8..ba07597b88 100644 --- a/resources/lang/hu_HU/breadcrumbs.php +++ b/resources/lang/hu_HU/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Főoldal', - 'budgets' => 'Budgets', - 'subscriptions' => 'Subscriptions', - 'transactions' => 'Transactions', - 'title_expenses' => 'Expenses', - 'title_withdrawal' => 'Expenses', - 'title_revenue' => 'Revenue / income', - 'title_deposit' => 'Revenue / income', - 'title_transfer' => 'Transfers', - 'title_transfers' => 'Transfers', - 'edit_currency' => '":name" pénznem szerkesztése', - 'delete_currency' => '":name" pénznem törlése', - 'newPiggyBank' => 'Új malacpersely létrehozása', - 'edit_piggyBank' => '":name" malacpersely szerkesztése', - 'preferences' => 'Beállítások', - 'profile' => 'Profil', - 'accounts' => 'Számlák', - 'changePassword' => 'Jelszó módosítása', - 'change_email' => 'Email cím módosítása', - 'bills' => 'Számlák', - 'newBill' => 'Új számla', - 'edit_bill' => '":name" számla szerkesztése', - 'delete_bill' => '":name" számla törlése', - 'reports' => 'Jelentések', - 'search_result' => '":query" keresési eredményei', - 'withdrawal_list' => 'Kiadások', - 'Withdrawal_list' => 'Költségek', - 'deposit_list' => 'Bevételek, jövedelem és betétek', - 'transfer_list' => 'Átvezetések', - 'transfers_list' => 'Átvezetések', + 'home' => 'Főoldal', + 'budgets' => 'Költségkeretek', + 'subscriptions' => 'Előfizetések', + 'transactions' => 'Tranzakciók', + 'title_expenses' => 'Költségek', + 'title_withdrawal' => 'Költségek', + 'title_revenue' => 'Jövedelem / bevétel', + 'title_deposit' => 'Jövedelem / bevétel', + 'title_transfer' => 'Átvezetések', + 'title_transfers' => 'Átvezetések', + 'edit_currency' => '":name" pénznem szerkesztése', + 'delete_currency' => '":name" pénznem törlése', + 'newPiggyBank' => 'Új malacpersely létrehozása', + 'edit_piggyBank' => '":name" malacpersely szerkesztése', + 'preferences' => 'Beállítások', + 'profile' => 'Profil', + 'accounts' => 'Számlák', + 'changePassword' => 'Jelszó módosítása', + 'change_email' => 'Email cím módosítása', + 'bills' => 'Fizetendő számlák', + 'newBill' => 'Új számla', + 'edit_bill' => '":name" számla szerkesztése', + 'delete_bill' => '":name" számla törlése', + 'reports' => 'Jelentések', + 'search_result' => '":query" keresési eredményei', + 'withdrawal_list' => 'Kiadások', + 'Withdrawal_list' => 'Költségek', + 'deposit_list' => 'Bevételek, jövedelem és betétek', + 'transfer_list' => 'Átvezetések', + 'transfers_list' => 'Átvezetések', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Egyeztetések', 'create_withdrawal' => 'Új költség létrehozása', 'create_deposit' => 'Új bevétel létrehozása', @@ -95,9 +93,9 @@ return [ 'edit_object_group' => '":title" csoport szerkesztése', 'delete_object_group' => '":title" csoport törlése', 'logout_others' => 'Minden más munkamenet kijelentkeztetése', - 'asset_accounts' => 'Asset accounts', - 'expense_accounts' => 'Expense accounts', - 'revenue_accounts' => 'Revenue accounts', - 'liabilities_accounts' => 'Liabilities', + 'asset_accounts' => 'Eszközszámlák', + 'expense_accounts' => 'Költségszámlák', + 'revenue_accounts' => 'Jövedelemszámlák', + 'liabilities_accounts' => 'Kötelezettségek', 'placeholder' => '[Placeholder]', ]; diff --git a/resources/lang/hu_HU/components.php b/resources/lang/hu_HU/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/hu_HU/components.php +++ b/resources/lang/hu_HU/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/hu_HU/config.php b/resources/lang/hu_HU/config.php index db27a15220..15fec8e93d 100644 --- a/resources/lang/hu_HU/config.php +++ b/resources/lang/hu_HU/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'hu', - 'locale' => 'hu, Hungarian, hu_HU.utf8, hu_HU.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'YYYY. MMMM', + 'html_language' => 'hu', + 'locale' => 'hu, Hungarian, hu_HU.utf8, hu_HU.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'YYYY. MMMM', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'YYYY. MMM. D.', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'YYYY. MMMM DD.', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'YYYY. MMM. D.', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'YYYY. MMMM DD.', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'YYYY. MMMM DD. HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'YYYY. MMMM DD. HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'YYYY. MMMM DD.', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'YYYY. MMMM DD.', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Week' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Week' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Hétfő', - 'dow_2' => 'Kedd', - 'dow_3' => 'Szerda', - 'dow_4' => 'Csütörtök', - 'dow_5' => 'Péntek', - 'dow_6' => 'Szombat', - 'dow_7' => 'Vasárnap', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Hétfő', + 'dow_2' => 'Kedd', + 'dow_3' => 'Szerda', + 'dow_4' => 'Csütörtök', + 'dow_5' => 'Péntek', + 'dow_6' => 'Szombat', + 'dow_7' => 'Vasárnap', ]; /* diff --git a/resources/lang/hu_HU/demo.php b/resources/lang/hu_HU/demo.php index 78dc7b1e13..4b9e30ec26 100644 --- a/resources/lang/hu_HU/demo.php +++ b/resources/lang/hu_HU/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/hu_HU/email.php b/resources/lang/hu_HU/email.php index 4f732e23d5..41d681c3b7 100644 --- a/resources/lang/hu_HU/email.php +++ b/resources/lang/hu_HU/email.php @@ -31,21 +31,20 @@ * */ - declare(strict_types=1); return [ // common items - 'greeting' => 'Hi there,', - 'closing' => 'Beep boop,', - 'signature' => 'The Firefly III Mail Robot', - 'footer_ps' => 'PS: This message was sent because a request from IP :ipAddress triggered it.', + 'greeting' => 'Üdv!', + 'closing' => 'Leállás...', + 'signature' => 'Firefly III levelző robot', + 'footer_ps' => 'UI: Ezt az üzenet azért küldtük, mert kérés érkezett rá a :ipAddress IP címről.', // admin test - 'admin_test_subject' => 'A test message from your Firefly III installation', - 'admin_test_body' => 'This is a test message from your Firefly III instance. It was sent to :email.', + 'admin_test_subject' => 'Egy teszt üzenet az Ön Firefly III telepítéséből', + 'admin_test_body' => 'Ez egy tesztüzenet a Firefly III példányából. Erre a címre küldtük: :email', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,9 +55,8 @@ return [ * */ - // invite - 'invitation_created_subject' => 'An invitation has been created', + 'invitation_created_subject' => 'Meghívó elkészült', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', 'invite_user_subject' => 'You\'ve been invited to create a Firefly III account.', 'invitation_introduction' => 'You\'ve been invited to create a Firefly III account on **:host**. Firefly III is a personal, self-hosted, private personal finance manager. All the cool kids are using it.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Password reset:', 'registered_doc_link' => 'Documentation:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'A new Firefly III version is available', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'If you prefer, you can also open a new issue on https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'The full stacktrace is below:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'Ezt küldte be a felhasználó:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III has created a new transaction|Firefly III has created :count new transactions', 'new_journals_header' => 'Firefly III has created a transaction for you. You can find it in your Firefly III installation:|Firefly III has created :count transactions for you. You can find them in your Firefly III installation:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/hu_HU/errors.php b/resources/lang/hu_HU/errors.php index 2d668c27b3..c4055169c5 100644 --- a/resources/lang/hu_HU/errors.php +++ b/resources/lang/hu_HU/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,14 +44,14 @@ return [ 'be_right_back' => 'Rögtön jövök!', 'check_back' => 'FireFly III jelenleg karbantartás alatt. Kérem látogasson vissza később.', 'error_occurred' => 'Hoppá! Hiba történt.', - 'db_error_occurred' => 'Whoops! A database error occurred.', + 'db_error_occurred' => 'Hoppá! Adatbázis hiba történt.', 'error_not_recoverable' => 'Sajnos a hiba után nem sikerült visszaállni :(. A futás megszakadt. A hiba:', 'error' => 'Hiba', 'error_location' => 'Hiba a :file fájl :line sorában a :code kódnál.', 'stacktrace' => 'Stack trace', 'more_info' => 'További információ', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'További információk gyűjthetők a storage/logs könyvtárban lévő napló fájlokból. Vagy ha Dockert használ, akkor a docker logs -f [container] paranccsal.', - 'collect_info_more' => 'Hiba információk gyűjtéséről tovább olvashatsz az FAQ-ban.', - 'github_help' => 'Segítség kérése GitHub-on', - 'github_instructions' => 'Örömmel fogadjuk ha GitHub-on hibajegyet nyitsz.', - 'use_search' => 'Használd a keresőt!', - 'include_info' => 'Add hozzá a debug oldalon található információkat.', - 'tell_more' => 'Részletesebben írd le, mint hogy "azt írja hoppá, hiba történt!"', - 'include_logs' => 'Hiba naplók hozzáadása (lásd fentebb).', - 'what_did_you_do' => 'Meséld el mit csináltál.', - 'offline_header' => 'You are probably offline', - 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', - 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', - + 'collect_info' => 'További információk gyűjthetők a storage/logs könyvtárban lévő napló fájlokból. Vagy ha Dockert használ, akkor a docker logs -f [container] paranccsal.', + 'collect_info_more' => 'Tovább olvashat a hibainformációk gyűjtéséről a GYIK-ben.', + 'github_help' => 'Segítség kérése GitHub-on', + 'github_instructions' => 'Örömmel fogadjuk ha GitHub-on hibajegyet nyitsz.', + 'use_search' => 'Használd a keresőt!', + 'include_info' => 'Add hozzá a debug oldalon található információkat.', + 'tell_more' => 'Részletesebben írd le, mint hogy "azt írja hoppá, hiba történt!"', + 'include_logs' => 'Hiba naplók hozzáadása (lásd fentebb).', + 'what_did_you_do' => 'Meséld el mit csináltál.', + 'offline_header' => 'Az eszköz valószínűleg offline állapotban van', + 'offline_unreachable' => 'A Firefly III elérhetetlen. Az eszköz nem kapcsolódik az internethez, vagy a szerver nem elérhető.', + 'offline_github' => 'Ha biztos benne, hogy az eszköz és a szerver is online állapotban van, kérem nyisson egy jegyet a GitHub-on.', ]; diff --git a/resources/lang/hu_HU/firefly.php b/resources/lang/hu_HU/firefly.php index b96a0db474..5e54d7178e 100644 --- a/resources/lang/hu_HU/firefly.php +++ b/resources/lang/hu_HU/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Bezárás', - 'actions' => 'Műveletek', - 'edit' => 'Szerkesztés', - 'delete' => 'Törlés', - 'split' => 'Felosztás', - 'single_split' => 'Felosztás', - 'clone' => 'Másolás', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => 'Utolsó hét nap', - 'last_thirty_days' => 'Elmúlt harminc nap', - 'last_180_days' => 'Last 180 days', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'YTD', - 'welcome_back' => 'Mi a helyzet?', - 'everything' => 'Minden', - 'today' => 'ma', - 'customRange' => 'Egyéni tartomány', - 'date_range' => 'Date range', - 'apply' => 'Alkalmaz', - 'select_date' => 'Dátum kiválasztása..', - 'cancel' => 'Mégse', - 'from' => 'Honnan', - 'to' => 'Hova', - 'structure' => 'Struktúra', - 'help_translating' => 'Ez a súgószöveg még nem elérhető az oldal nyelvén. Itt lehet segíteni a fordításban.', - 'showEverything' => 'Összes megjelenítése', - 'never' => 'Soha', - 'no_results_for_empty_search' => 'A keresés üres volt, így nincs találat.', - 'removed_amount' => ':amount eltávolítva', - 'added_amount' => ':amount hozzáadva', - 'asset_account_role_help' => 'A választásoktól függő további lehetőségeket később lehet beállítani.', - 'Opening balance' => 'Nyitó egyenleg', - 'create_new_stuff' => 'Új dolog létrehozása', - 'new_withdrawal' => 'Új költség', - 'create_new_transaction' => 'Create a new transaction', - 'sidebar_frontpage_create' => 'Létrehozás', - 'new_transaction' => 'Új tranzakció', - 'no_rules_for_bill' => 'Ehhez a számlához nincsenek szabályok kapcsolva.', - 'go_to_asset_accounts' => 'Eszközszámlák megtekintése', - 'go_to_budgets' => 'Ugrás a költségkeretekhez', - 'go_to_withdrawals' => 'Ugrás a költségekhez', - 'clones_journal_x' => 'Ez a tranzakció ":description" (#:id) klónja', - 'go_to_categories' => 'Ugrás a kategóriákhoz', - 'go_to_bills' => 'Ugrás a számlákhoz', - 'go_to_expense_accounts' => 'Költségszámlák megtekintése', - 'go_to_revenue_accounts' => 'Jövedelemszámlák megtekintése', - 'go_to_piggies' => 'Ugrás a malacperselyekhez', - 'new_deposit' => 'Új bevétel', - 'new_transfer' => 'Új átvezetés', - 'new_transfers' => 'Új átvezetés', - 'new_asset_account' => 'Új eszközszámla', - 'new_expense_account' => 'Új költségszámla', - 'new_revenue_account' => 'Új jövedelemszámla', - 'new_liabilities_account' => 'Új kötelezettség', - 'new_budget' => 'Új költségkeret', - 'new_bill' => 'Új számla', - 'block_account_logout' => 'Ön kijelentkezett. A blokkolt fiókok nem használhatják ezt a webhelyet. Érvényes e-mail címmel regisztrált?', - 'flash_success' => 'Siker!', - 'flash_info' => 'Üzenet', - 'flash_warning' => 'Figyelmeztetés!', - 'flash_error' => 'Hiba!', - 'flash_danger' => 'Danger!', - 'flash_info_multiple' => 'Egy üzenet érkezett | :count üzenet érkezett', - 'flash_error_multiple' => 'Egy hiba történt|:count hiba történt', - 'net_worth' => 'Nettó érték', - 'help_for_this_page' => 'Az oldal súgója', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => 'Helló!', - 'two_factor_enter_code' => 'A folytatáshoz meg kell adni a kétlépcsős azonosítás kódját. Az alkalmazás létre tudja hozni ezt a kódot.', - 'two_factor_code_here' => 'Kód beírása', - 'two_factor_title' => 'Kétlépcsős hitelesítés', - 'authenticate' => 'Hitelesítés', - 'two_factor_forgot_title' => 'Elvesztett kétlépcsős hitelesítés', - 'two_factor_forgot' => 'Elfelejtett kétlépcsős azonosítás.', - 'two_factor_lost_header' => 'Elvesztett kétlépcsős hitelesítés?', - 'two_factor_lost_intro' => 'Ha a biztonsági kódok is elvesztek, akkor bajban vagy. Ezt nem lehet a webes felületről megjavítani, így két lehetőséged van.', - 'two_factor_lost_fix_self' => 'Ha a Firefly III saját példányként fut javasolt elolvasni ezt a FAQ bejegyzést további instrukciókért.', - 'two_factor_lost_fix_owner' => 'Ellenkező esetben emailt kell küldeni a webhely tulajdonosának a :site_owner címre, és meg kell kérni, hogy állítsa vissza a kétfaktoros hitelesítést.', - 'mfa_backup_code' => 'A biztonsági kód fel lett használva a Firefly III-hoz. Ezt többé nem használhatod fel, így a listáról ez kihúzható.', - 'pref_two_factor_new_backup_codes' => 'Új biztonsági kódok igénylése', - 'pref_two_factor_backup_code_count' => 'You have :count valid backup code.|You have :count valid backup codes.', - '2fa_i_have_them' => 'Eltároltam!', - 'warning_much_data' => ':days napi adat betöltése eltarthat egy ideig.', - 'registered' => 'A regisztráció sikeres!', - 'Default asset account' => 'Alapértelmezett eszközszámla', - 'no_budget_pointer' => 'Úgy tűnik, még nincsenek költségkeretek. Költségkereteket a költségkeretek oldalon lehet létrehozni. A költségkeretek segítenek nyomon követni a költségeket.', - 'no_bill_pointer' => 'Úgy tűnik, még nincsenek költségkeretek. Költségkereteket a költségkeretek oldalon lehet létrehozni. A költségkeretek segítenek nyomon követni a költségeket.', - 'Savings account' => 'Megtakarítási számla', - 'Credit card' => 'Hitelkártya', - 'source_accounts' => 'Forrásszámla|Forrásszámlák', - 'destination_accounts' => 'Célszámla|Célszámlák', - 'user_id_is' => 'A felhasználói azonosító :user', - 'field_supports_markdown' => 'Ez a mező támogatja a Markdown használatát.', - 'need_more_help' => 'A Firefly III használatához további segítség kérhető a a Githubon egy hibajegy nyitásával.', - 'reenable_intro_text' => 'A bevezető útmutatót újra lehet engedélyezni.', - 'intro_boxes_after_refresh' => 'A bevezető dobozok újra megjelennek az oldal frissítésekor.', - 'show_all_no_filter' => 'Az összes tranzakció megjelenítése dátum szerinti csoportosítás nélkül.', - 'expenses_by_category' => 'Költségek kategóriák szerint', - 'expenses_by_budget' => 'Költségek költségkeretek szerint', - 'income_by_category' => 'Jövedelem kategória szerint', - 'expenses_by_asset_account' => 'Költségek eszközszámla szerint', - 'expenses_by_expense_account' => 'Költségek költségszámla szerint', - 'cannot_redirect_to_account' => 'A Firefly III nem tud átirányítani a megfelelő oldalra. Elnézést.', - 'sum_of_expenses' => 'A költségek összege', - 'sum_of_income' => 'Jövedelem összege', - 'liabilities' => 'Kötelezettségek', - 'spent_in_specific_budget' => 'Költés ":budget" költségkeretben', - 'spent_in_specific_double' => 'A(z) ":account" fiókon elköltött', - 'earned_in_specific_double' => 'A(z) ":account" fiókon megkeresett', - 'source_account' => 'Forrás számla', - 'source_account_reconciliation' => 'Nem lehet szerkeszteni egy egyeztetett tranzakció forrásszámláját.', - 'destination_account' => 'Célszámla', - 'destination_account_reconciliation' => 'Nem lehet szerkeszteni egy egyeztetett tranzakció célszámláját.', - 'sum_of_expenses_in_budget' => 'Összes költés ":budget" költségkeretben', - 'left_in_budget_limit' => 'A költségvetés szerinti elkölthető összeg', - 'current_period' => 'Jelenlegi időszak', - 'show_the_current_period_and_overview' => 'Az aktuális időszak és az áttekintés megjelenítése', - 'pref_languages_locale' => 'Ahhoz, hogy egy angoltól eltérő nyelv megfelelően működjön, az operációs rendszernek a helyes helyspecifikus információkkal kell rendelkeznie. Ha ezek nincsenek jelen, akkor a pénznem adat, a dátumok és az összegek formázása hibás lehet.', - 'budget_in_period' => '":name" költségkeret összes tranzakciója :start és :end között :currency pénznemben', - 'chart_budget_in_period' => 'Diagram ":name" költségkeret minden tranzakciójáról :start és :end között :currency pénznemben', - 'chart_budget_in_period_only_currency' => 'A költségkeretben előirányzott összeg pénzneme :currency, Így ez a diagram csak azokat a tranzakciókat mutatja amiknek a pénznem :currency.', - 'chart_account_in_period' => 'Diagram ":name" (:balance) bankszámla minden tranzakciójáról :start és :end között', - 'chart_category_in_period' => 'Diagram ":name" kategória minden tranzakciójáról :start és :end között', - 'chart_category_all' => 'Diagram ":name" kategória minden tranzakciójáról', - 'clone_withdrawal' => 'Költség klónozása', - 'clone_deposit' => 'Bevétel klónozása', - 'clone_transfer' => 'Átvezetés klónozása', - 'multi_select_no_selection' => 'Egy sincs kiválasztva', - 'multi_select_select_all' => 'Összes kijelölése', - 'multi_select_n_selected' => 'kijelölt', - 'multi_select_all_selected' => 'Minden kiválasztott', - 'multi_select_filter_placeholder' => 'Keresés..', - 'intro_next_label' => 'Következő', - 'intro_prev_label' => 'Előző', - 'intro_skip_label' => 'Kihagyás', - 'intro_done_label' => 'Kész', - 'between_dates_breadcrumb' => ':start és :end között', - 'all_journals_without_budget' => 'Minden költségkeret nélküli tranzakció', - 'journals_without_budget' => 'Költségkeret nélküli tranzakciók', - 'all_journals_without_category' => 'Minden kategória nélküli tranzakció', - 'journals_without_category' => 'Kategória nélküli tranzakciók', - 'all_journals_for_account' => ':name bankszámla összes tranzakciója', - 'chart_all_journals_for_account' => 'Diagram :name bankszámla minden tranzakciójáról', - 'journals_in_period_for_account' => '":name" bankszámla összes tranzakciója :start és :end között', - 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', - 'transferred' => 'Átvezetett', - 'all_withdrawal' => 'Minden költség', - 'all_transactions' => 'Minden tranzakció', - 'title_withdrawal_between' => 'Minden költség :start és :end között', - 'all_deposit' => 'Összes jövedelem', - 'title_deposit_between' => 'Összes jövedelem :start és :end között', - 'all_transfers' => 'Minden átvezetés', - 'title_transfers_between' => 'Minden átvezetés :start és :end között', - 'all_transfer' => 'Minden átvezetés', - 'all_journals_for_tag' => '":tag" címke összes tranzakciója', - 'title_transfer_between' => 'Minden átvezetés :start és :end között', - 'all_journals_for_category' => ':name kategória összes tranzakciója', - 'all_journals_for_budget' => ':name költségkeret összes tranzakciója', - 'chart_all_journals_for_budget' => 'Diagram :name költségkeret minden tranzakciójáról', - 'journals_in_period_for_category' => ':name kategória összes tranzakciója :start és :end között', - 'journals_in_period_for_tag' => ':tag címke összes tranzakciója :start és :end között', - 'not_available_demo_user' => 'A használni kívánt szolgáltatás nem érhető el a bemutató felhasználók számára.', - 'exchange_rate_instructions' => 'A "@name" vagyonszámla csak a @native_currency tranzakciókat fogadja el. Ha inkább @foreign_currency pénznemet szeretne használni, győződjön meg róla, hogy a @native_currency összege is ismert:', - 'transfer_exchange_rate_instructions' => 'A "@source_name" forrás vagyonszámla csak a @source_currency tranzakciókat fogadja el. A "@dest_name" cél vagyonszámla csak a @dest_currency tranzakciókat fogadja el. Mindkét pénznemben helyesen kell megadnia az átutalt összeget.', - 'transaction_data' => 'Tranzakciós adatok', - 'invalid_server_configuration' => 'Érvénytelen kiszolgálóbeállítás', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Gyorsváltó', - 'sign_in_to_start' => 'A munkamenet megkezdéséhez be kell jelentkezni', - 'sign_in' => 'Bejelentkezés', - 'register_new_account' => 'Új fiók regisztrációja', - 'forgot_my_password' => 'Elfelejtett jelszó', - 'problems_with_input' => 'Volt néhány probléma a bevitt adatokkal.', - 'reset_password' => 'Jelszó visszaállítása', - 'button_reset_password' => 'Jelszó visszaállítása', - 'reset_button' => 'Visszaállítás', - 'want_to_login' => 'Bejelentkezés', - 'login_page_title' => 'Bejelentkezés a Firefly III-ba', - 'register_page_title' => 'Regisztrálás a Firefly III-ba', - 'forgot_pw_page_title' => 'Elfelejtette a jelszavát a Firefly III-hoz', - 'reset_pw_page_title' => 'Firefly III jelszó visszaállítása', - 'cannot_reset_demo_user' => 'A bemutató felhasználónak nem nem lehet visszaállítani a jelszavát.', - 'no_att_demo_user' => 'Demo felhasználó nem tölthet fel csatolmányokat.', - 'button_register' => 'Regisztráció', - 'authorization' => 'Hitelesítés', - 'active_bills_only' => 'csak az aktív számlák', - 'active_bills_only_total' => 'all active bills', - 'active_exp_bills_only' => 'csak az aktív és a várható számlák', - 'active_exp_bills_only_total' => 'all active expected bills only', - 'per_period_sum_1D' => 'Várható napi költségek', - 'per_period_sum_1W' => 'Várható heti költségek', - 'per_period_sum_1M' => 'Várható havi költségek', - 'per_period_sum_3M' => 'Várható negyedéves költségek', - 'per_period_sum_6M' => 'Várható féléves költségek', - 'per_period_sum_1Y' => 'Várható éves költségek', - 'average_per_bill' => 'számlánkénti átlag', - 'expected_total' => 'várható teljes összeg', - 'reconciliation_account_name' => ':name egyeztetés (:currency)', - 'saved' => 'Mentve', - 'advanced_options' => 'Advanced options', - 'advanced_options_explain' => 'Some pages in Firefly III have advanced options hidden behind this button. This page doesn\'t have anything fancy here, but do check out the others!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Bezárás', + 'actions' => 'Műveletek', + 'edit' => 'Szerkesztés', + 'delete' => 'Törlés', + 'split' => 'Felosztás', + 'single_split' => 'Felosztás', + 'clone' => 'Másolás', + 'clone_and_edit' => 'Másol és szerkeszt', + 'confirm_action' => 'Művelet megerősítése', + 'last_seven_days' => 'Utolsó hét nap', + 'last_thirty_days' => 'Elmúlt harminc nap', + 'last_180_days' => 'Az utóbbi 180 nap', + 'month_to_date' => 'Hónap a mai napig', + 'year_to_date' => 'Év elejétől', + 'YTD' => 'Folyó év', + 'welcome_back' => 'Mi a helyzet?', + 'everything' => 'Minden', + 'today' => 'ma', + 'customRange' => 'Egyéni tartomány', + 'date_range' => 'Dátum intervallum', + 'apply' => 'Alkalmaz', + 'select_date' => 'Dátum kiválasztása..', + 'cancel' => 'Mégse', + 'from' => 'Honnan', + 'to' => 'Hova', + 'structure' => 'Struktúra', + 'help_translating' => 'Ez a súgószöveg még nem elérhető az oldal nyelvén. Itt lehet segíteni a fordításban.', + 'showEverything' => 'Összes megjelenítése', + 'never' => 'Soha', + 'no_results_for_empty_search' => 'A keresés üres volt, így nincs találat.', + 'removed_amount' => ':amount eltávolítva', + 'added_amount' => ':amount hozzáadva', + 'asset_account_role_help' => 'A választásoktól függő további lehetőségeket később lehet beállítani.', + 'Opening balance' => 'Nyitó egyenleg', + 'create_new_stuff' => 'Új dolog létrehozása', + 'new_withdrawal' => 'Új költség', + 'create_new_transaction' => 'Új tranzakció létrehozása', + 'sidebar_frontpage_create' => 'Létrehozás', + 'new_transaction' => 'Új tranzakció', + 'no_rules_for_bill' => 'Ehhez a számlához nincsenek szabályok kapcsolva.', + 'go_to_asset_accounts' => 'Eszközszámlák megtekintése', + 'go_to_budgets' => 'Ugrás a költségkeretekhez', + 'go_to_withdrawals' => 'Ugrás a költségekhez', + 'clones_journal_x' => 'Ez a tranzakció ":description" (#:id) klónja', + 'go_to_categories' => 'Ugrás a kategóriákhoz', + 'go_to_bills' => 'Ugrás a számlákhoz', + 'go_to_expense_accounts' => 'Költségszámlák megtekintése', + 'go_to_revenue_accounts' => 'Jövedelemszámlák megtekintése', + 'go_to_piggies' => 'Ugrás a malacperselyekhez', + 'new_deposit' => 'Új bevétel', + 'new_transfer' => 'Új átvezetés', + 'new_transfers' => 'Új átvezetés', + 'new_asset_account' => 'Új eszközszámla', + 'new_expense_account' => 'Új költségszámla', + 'new_revenue_account' => 'Új jövedelemszámla', + 'new_liabilities_account' => 'Új kötelezettség', + 'new_budget' => 'Új költségkeret', + 'new_bill' => 'Új számla', + 'block_account_logout' => 'Ön kijelentkezett. A blokkolt fiókok nem használhatják ezt a webhelyet. Érvényes e-mail címmel regisztrált?', + 'flash_success' => 'Siker!', + 'flash_info' => 'Üzenet', + 'flash_warning' => 'Figyelmeztetés!', + 'flash_error' => 'Hiba!', + 'flash_danger' => 'Vigyázat!', + 'flash_info_multiple' => 'Egy üzenet érkezett | :count üzenet érkezett', + 'flash_error_multiple' => 'Egy hiba történt|:count hiba történt', + 'net_worth' => 'Nettó érték', + 'help_for_this_page' => 'Az oldal súgója', + 'help_for_this_page_body' => 'További információkat találhat erről a lapról a dokumentációban.', + 'two_factor_welcome' => 'Helló!', + 'two_factor_enter_code' => 'A folytatáshoz meg kell adni a kétlépcsős azonosítás kódját. Az alkalmazás létre tudja hozni ezt a kódot.', + 'two_factor_code_here' => 'Kód beírása', + 'two_factor_title' => 'Kétlépcsős hitelesítés', + 'authenticate' => 'Hitelesítés', + 'two_factor_forgot_title' => 'Elvesztett kétlépcsős hitelesítés', + 'two_factor_forgot' => 'Elfelejtett kétlépcsős azonosítás.', + 'two_factor_lost_header' => 'Elvesztett kétlépcsős hitelesítés?', + 'two_factor_lost_intro' => 'Ha a biztonsági kódok is elvesztek, akkor bajban vagy. Ezt nem lehet a webes felületről megjavítani, így két lehetőséged van.', + 'two_factor_lost_fix_self' => 'Ha saját példányt futtat a Firefly II-ból, akkor olvassa el a :site_owner címre, és meg kell kérni, hogy állítsa vissza a kétfaktoros hitelesítést.', + 'mfa_backup_code' => 'A biztonsági kód fel lett használva a Firefly III-hoz. Ezt többé nem használhatod fel, így a listáról ez kihúzható.', + 'pref_two_factor_new_backup_codes' => 'Új biztonsági kódok igénylése', + 'pref_two_factor_backup_code_count' => 'Még :count érvényes visszaállítási kódod van.|Még :count érvényes visszaállítási kódod van.', + '2fa_i_have_them' => 'Eltároltam!', + 'warning_much_data' => ':days napi adat betöltése eltarthat egy ideig.', + 'registered' => 'A regisztráció sikeres!', + 'Default asset account' => 'Alapértelmezett eszközszámla', + 'no_budget_pointer' => 'Úgy tűnik, még nincsenek költségkeretek. Költségkereteket a költségkeretek oldalon lehet létrehozni. A költségkeretek segítenek nyomon követni a költségeket.', + 'no_bill_pointer' => 'Úgy tűnik, még nincsenek költségkeretek. Költségkereteket a költségkeretek oldalon lehet létrehozni. A költségkeretek segítenek nyomon követni a költségeket.', + 'Savings account' => 'Megtakarítási számla', + 'Credit card' => 'Hitelkártya', + 'source_accounts' => 'Forrásszámla|Forrásszámlák', + 'destination_accounts' => 'Célszámla|Célszámlák', + 'user_id_is' => 'A felhasználói azonosító :user', + 'field_supports_markdown' => 'Ez a mező támogatja a Markdown használatát.', + 'need_more_help' => 'A Firefly III használatához további segítség kérhető a a Githubon egy hibajegy nyitásával.', + 'reenable_intro_text' => 'A bevezető útmutatót újra lehet engedélyezni.', + 'intro_boxes_after_refresh' => 'A bevezető dobozok újra megjelennek az oldal frissítésekor.', + 'show_all_no_filter' => 'Az összes tranzakció megjelenítése dátum szerinti csoportosítás nélkül.', + 'expenses_by_category' => 'Költségek kategóriák szerint', + 'expenses_by_budget' => 'Költségek költségkeretek szerint', + 'income_by_category' => 'Jövedelem kategória szerint', + 'expenses_by_asset_account' => 'Költségek eszközszámla szerint', + 'expenses_by_expense_account' => 'Költségek költségszámla szerint', + 'cannot_redirect_to_account' => 'A Firefly III nem tud átirányítani a megfelelő oldalra. Elnézést.', + 'sum_of_expenses' => 'A költségek összege', + 'sum_of_income' => 'Jövedelem összege', + 'liabilities' => 'Kötelezettségek', + 'spent_in_specific_budget' => 'Költés ":budget" költségkeretben', + 'spent_in_specific_double' => 'A(z) ":account" fiókon elköltött', + 'earned_in_specific_double' => 'A(z) ":account" fiókon megkeresett', + 'source_account' => 'Forrás számla', + 'source_account_reconciliation' => 'Nem lehet szerkeszteni egy egyeztetett tranzakció forrásszámláját.', + 'destination_account' => 'Célszámla', + 'destination_account_reconciliation' => 'Nem lehet szerkeszteni egy egyeztetett tranzakció célszámláját.', + 'sum_of_expenses_in_budget' => 'Összes költés ":budget" költségkeretben', + 'left_in_budget_limit' => 'A költségvetés szerinti elkölthető összeg', + 'current_period' => 'Jelenlegi időszak', + 'show_the_current_period_and_overview' => 'Az aktuális időszak és az áttekintés megjelenítése', + 'pref_languages_locale' => 'Ahhoz, hogy egy angoltól eltérő nyelv megfelelően működjön, az operációs rendszernek a helyes helyspecifikus információkkal kell rendelkeznie. Ha ezek nincsenek jelen, akkor a pénznem adat, a dátumok és az összegek formázása hibás lehet.', + 'budget_in_period' => '":name" költségkeret összes tranzakciója :start és :end között :currency pénznemben', + 'chart_budget_in_period' => 'Diagram ":name" költségkeret minden tranzakciójáról :start és :end között :currency pénznemben', + 'chart_budget_in_period_only_currency' => 'A költségkeretben előirányzott összeg pénzneme :currency, Így ez a diagram csak azokat a tranzakciókat mutatja amiknek a pénznem :currency.', + 'chart_account_in_period' => 'Diagram ":name" (:balance) bankszámla minden tranzakciójáról :start és :end között', + 'chart_category_in_period' => 'Diagram ":name" kategória minden tranzakciójáról :start és :end között', + 'chart_category_all' => 'Diagram ":name" kategória minden tranzakciójáról', + 'clone_withdrawal' => 'Költség klónozása', + 'clone_deposit' => 'Bevétel klónozása', + 'clone_transfer' => 'Átvezetés klónozása', + 'multi_select_no_selection' => 'Egy sincs kiválasztva', + 'multi_select_select_all' => 'Összes kijelölése', + 'multi_select_n_selected' => 'kijelölt', + 'multi_select_all_selected' => 'Minden kiválasztott', + 'multi_select_filter_placeholder' => 'Keresés..', + 'intro_next_label' => 'Következő', + 'intro_prev_label' => 'Előző', + 'intro_skip_label' => 'Kihagyás', + 'intro_done_label' => 'Kész', + 'between_dates_breadcrumb' => ':start és :end között', + 'all_journals_without_budget' => 'Minden költségkeret nélküli tranzakció', + 'journals_without_budget' => 'Költségkeret nélküli tranzakciók', + 'all_journals_without_category' => 'Minden kategória nélküli tranzakció', + 'journals_without_category' => 'Kategória nélküli tranzakciók', + 'all_journals_for_account' => ':name bankszámla összes tranzakciója', + 'chart_all_journals_for_account' => 'Diagram :name bankszámla minden tranzakciójáról', + 'journals_in_period_for_account' => '":name" bankszámla összes tranzakciója :start és :end között', + 'journals_in_period_for_account_js' => 'Minden tranzakció a(z) {title} számlán {start} és {end} között', + 'transferred' => 'Átvezetett', + 'all_withdrawal' => 'Minden költség', + 'all_transactions' => 'Minden tranzakció', + 'title_withdrawal_between' => 'Minden költség :start és :end között', + 'all_deposit' => 'Összes jövedelem', + 'title_deposit_between' => 'Összes jövedelem :start és :end között', + 'all_transfers' => 'Minden átvezetés', + 'title_transfers_between' => 'Minden átvezetés :start és :end között', + 'all_transfer' => 'Minden átvezetés', + 'all_journals_for_tag' => '":tag" címke összes tranzakciója', + 'title_transfer_between' => 'Minden átvezetés :start és :end között', + 'all_journals_for_category' => ':name kategória összes tranzakciója', + 'all_journals_for_budget' => ':name költségkeret összes tranzakciója', + 'chart_all_journals_for_budget' => 'Diagram :name költségkeret minden tranzakciójáról', + 'journals_in_period_for_category' => ':name kategória összes tranzakciója :start és :end között', + 'journals_in_period_for_tag' => ':tag címke összes tranzakciója :start és :end között', + 'not_available_demo_user' => 'A használni kívánt szolgáltatás nem érhető el a bemutató felhasználók számára.', + 'exchange_rate_instructions' => 'A "@name" vagyonszámla csak a @native_currency tranzakciókat fogadja el. Ha inkább @foreign_currency pénznemet szeretne használni, győződjön meg róla, hogy a @native_currency összege is ismert:', + 'transfer_exchange_rate_instructions' => 'A "@source_name" forrás vagyonszámla csak a @source_currency tranzakciókat fogadja el. A "@dest_name" cél vagyonszámla csak a @dest_currency tranzakciókat fogadja el. Mindkét pénznemben helyesen kell megadnia az átutalt összeget.', + 'transaction_data' => 'Tranzakciós adatok', + 'invalid_server_configuration' => 'Érvénytelen kiszolgálóbeállítás', + 'invalid_locale_settings' => 'Firefly II nem tudja megfelelően formázni a pénznemeket, mert a szerverről hiányoznak a szükséges csomagok. Itt talál iránymutatást a javításra.', + 'quickswitch' => 'Gyorsváltó', + 'sign_in_to_start' => 'A munkamenet megkezdéséhez be kell jelentkezni', + 'sign_in' => 'Bejelentkezés', + 'register_new_account' => 'Új fiók regisztrációja', + 'forgot_my_password' => 'Elfelejtett jelszó', + 'problems_with_input' => 'Volt néhány probléma a bevitt adatokkal.', + 'reset_password' => 'Jelszó visszaállítása', + 'button_reset_password' => 'Jelszó visszaállítása', + 'reset_button' => 'Visszaállítás', + 'want_to_login' => 'Bejelentkezés', + 'login_page_title' => 'Bejelentkezés a Firefly III-ba', + 'register_page_title' => 'Regisztrálás a Firefly III-ba', + 'forgot_pw_page_title' => 'Elfelejtette a jelszavát a Firefly III-hoz', + 'reset_pw_page_title' => 'Firefly III jelszó visszaállítása', + 'cannot_reset_demo_user' => 'A bemutató felhasználónak nem nem lehet visszaállítani a jelszavát.', + 'no_att_demo_user' => 'Demo felhasználó nem tölthet fel csatolmányokat.', + 'button_register' => 'Regisztráció', + 'authorization' => 'Hitelesítés', + 'active_bills_only' => 'csak az aktív számlák', + 'active_bills_only_total' => 'összes aktív fizetendő számla', + 'active_exp_bills_only' => 'csak az aktív és a várható számlák', + 'active_exp_bills_only_total' => 'az összes aktív, várható számla', + 'per_period_sum_1D' => 'Várható napi költségek', + 'per_period_sum_1W' => 'Várható heti költségek', + 'per_period_sum_1M' => 'Várható havi költségek', + 'per_period_sum_3M' => 'Várható negyedéves költségek', + 'per_period_sum_6M' => 'Várható féléves költségek', + 'per_period_sum_1Y' => 'Várható éves költségek', + 'average_per_bill' => 'számlánkénti átlag', + 'expected_total' => 'várható teljes összeg', + 'reconciliation_account_name' => ':name egyeztetés (:currency)', + 'saved' => 'Mentve', + 'advanced_options' => 'Haladó beállítások', + 'advanced_options_explain' => 'A Firefly III egyes oldalakon spceiális beálításokat rejt emögött a gomb mögött. Ezen az oldalon nincs itt semmi érdekes, de érdemes megnézni a többit!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhook-ok', + 'webhooks_breadcrumb' => 'Webhook-ok', + 'webhooks_menu_disabled' => 'letiltva', + 'no_webhook_messages' => 'Nincsenek webhook üzenetek', + 'webhook_trigger_STORE_TRANSACTION' => 'Tranzakció létrehozása után', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Tranzakció frissítése után', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Tranzakció törlése után', + 'webhook_response_TRANSACTIONS' => 'Tranzakció részletei', + 'webhook_response_ACCOUNTS' => 'Számlaadatok', + 'webhook_response_none_NONE' => 'Nincsenek részletek', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Vizsgálat', + 'create_new_webhook' => 'Új webhook létrehozása', + 'webhooks_create_breadcrumb' => 'Új webhook létrehozása', + 'webhook_trigger_form_help' => 'Adja meg, hogy a webhook-ot milyen eseményre indítja el', + 'webhook_response_form_help' => 'Adja meg, hogy a webhook mit küldjön az URL-re.', + 'webhook_delivery_form_help' => 'Milyen formátumban kézbesítse a webhook az adatokat.', + 'webhook_active_form_help' => 'A webhook-nak aktívnak kell lennie, különben nem fogják meghívni.', + 'stored_new_webhook' => 'Új webhook ":title" tárolva', + 'delete_webhook' => 'Webhook törlése', + 'deleted_webhook' => 'Webhook ":title" törölve', + 'edit_webhook' => 'Webhook ":title" módosítása', + 'updated_webhook' => 'Webhook ":title" frissítve', + 'edit_webhook_js' => 'Webhook "{title}" módosítása', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'A webhook a jelzett tranzakciónál aktiválódott. Kérem, várjon az eredmények megjelítésére.', + 'webhook_messages' => 'Webhook üzenet', + 'view_message' => 'Üzenet megtekintése', + 'view_attempts' => 'Sikertelen kísérletek megjelenítése', + 'message_content_title' => 'Webhook üzenet tartalma', + 'message_content_help' => 'Az üzenet tartalma amit a webhook küldött (vagy kísérelt meg küldeni).', + 'attempt_content_title' => 'Webhook kísérletek', + 'attempt_content_help' => 'Az összes sikertelenül küldött webhook üzenet a beállított URL-re. Idővel a Firefly III felhagy a próbálkozással.', + 'no_attempts' => 'Nincsenek sikertelen kísérletek. Nagyon jó!', + 'webhook_attempt_at' => 'Kísérlet {moment}-kor', + 'logs' => 'Naplók', + 'response' => 'Válasz', + 'visit_webhook_url' => 'Webhook URL meglátogatása', + 'reset_webhook_secret' => 'Webhook titok visszaállítása', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") eltárolva.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") frissítve.', // API access - 'authorization_request' => 'Firefly III v:version engedély kérelem', - 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', - 'scopes_will_be_able' => 'Ez az alkalmazás képes lesz arra, hogy:', - 'button_authorize' => 'Engedélyezés', - 'none_in_select_list' => '(nincs)', - 'no_piggy_bank' => '(nincs malacpersely)', - 'name_in_currency' => ':name - :currency', - 'paid_in_currency' => 'Fizetve :currency -ban', - 'unpaid_in_currency' => 'Be nem fizetett :currency -ban', - 'is_alpha_warning' => 'Jelenleg egy ALPHA verzió fut. Felléphetnek programhibák és problémák.', - 'is_beta_warning' => 'Jelenleg egy BETA verzió fut. Felléphetnek programhibák és problémák.', - 'all_destination_accounts' => 'Célszámlák', - 'all_source_accounts' => 'Forrásszámlák', - 'back_to_index' => 'Vissza a kezdőoldalra', - 'cant_logout_guard' => 'Firefly III can\'t log you out.', - 'internal_reference' => 'Internal reference', + 'authorization_request' => 'Firefly III v:version engedély kérelem', + 'authorization_request_intro' => 'A(z) ":client" alkalmazás hozzáférést kér a pénzügyi nyilvántartásához. Szeretné megadni a hozzáférést ezekhez az adatokhoz a(z) ":client" részére?', + 'authorization_request_site' => 'Átirányítjuk a :url címre, ami aztán képes lesz hozzáférni az Ön Firefly III adataihoz.', + 'authorization_request_invalid' => 'Ez a hozzáférési kérelem érvénytelen. Kérjük, soha többé ne kövesse ezt a linket.', + 'scopes_will_be_able' => 'Ez az alkalmazás képes lesz arra, hogy:', + 'button_authorize' => 'Engedélyezés', + 'none_in_select_list' => '(nincs)', + 'no_piggy_bank' => '(nincs malacpersely)', + 'name_in_currency' => ':name - :currency', + 'paid_in_currency' => 'Fizetve :currency -ban', + 'unpaid_in_currency' => 'Be nem fizetett :currency -ban', + 'is_alpha_warning' => 'Jelenleg egy ALPHA verzió fut. Felléphetnek programhibák és problémák.', + 'is_beta_warning' => 'Jelenleg egy BETA verzió fut. Felléphetnek programhibák és problémák.', + 'all_destination_accounts' => 'Célszámlák', + 'all_source_accounts' => 'Forrásszámlák', + 'back_to_index' => 'Vissza a kezdőoldalra', + 'cant_logout_guard' => 'Firefly III nem tudja kijelentkeztetni.', + 'internal_reference' => 'Belső hivatkozás', // check for updates: - 'update_check_title' => 'Frissítések ellenőrzése', - 'admin_update_check_title' => 'Frissítés automatikus ellenőrzése', - 'admin_update_check_explain' => 'A Firefly III képes automatikusan ellenőrizni a frissítéseket. Ha engedélyezi ezt a beállítást, akkor a Firefly III frissítési kiszolgálóval kommunikálva ellenőrzésre kerül, hogy rendelkezésre áll-e a Firefly III új verziója. Ha igen, értesítést kap. Ezt az értesítést a jobb oldalon található gombra kattintva tesztelheti. Kérjük jelezze alább, ha szeretné, hogy a Firefly III ellenőrizze a frissítéseket.', - 'check_for_updates_permission' => 'A Firefly III automatikusan ellenőrizheti a frissítéseket, ha Ön ezt engedélyezi. Kérjük, keresse meg a adminisztráció menüpontot, ha engedélyezni szeretné ezt a funkciót.', - 'updates_ask_me_later' => 'Kérdezze később', - 'updates_do_not_check' => 'Ne ellenőrizze a frissítéseket', - 'updates_enable_check' => 'Frissítések ellenőrzésének engedélyezése', - 'admin_update_check_now_title' => 'Frissítések keresése most', - 'admin_update_check_now_explain' => 'Ha megnyomja a gombot, a Firefly III ellenőrinzi fogja, hogy a legfrissebb változatot használja -e.', - 'check_for_updates_button' => 'Ellenőrzés most!', - 'update_new_version_alert' => 'A Firefly III új verziója elérhető. A jelenleg használt verzió :your_version, a legújabb verzió pedig :new_version, amely ekkor jelent meg: :date.', - 'update_version_beta' => 'Ez egy BETA verzió. Előfordulhatnak problémák.', - 'update_version_alpha' => 'Ez egy ALPHA verzió. Előfordulhatnak problémák.', - 'update_current_version_alert' => 'A jelenlegi verzió :version, ez egyben a legfrissebb elérhető verzió is.', - 'update_newer_version_alert' => 'A jelenlegi verzió :your_version, amely újabb, mint a legfrissebb kiadott verzió, ami a :new_version.', - 'update_check_error' => 'Hiba történt a frissítések ellenőrzése közben: :error', - 'unknown_error' => 'Ismeretlen hiba. Elnézést kérünk.', - 'just_new_release' => 'Új verzió érhető el! :version verzió ekkor került kiadásra: :date. Ez a verzió nagyon friss. Érdemes néhány napot várni amíg az új kiadás stabilizálódik.', - 'disabled_but_check' => 'Kikapcsolta a frissítések automata keresését. Ne feledje az elérhető verziók rendszeres ellenőrzését. Köszönjük!', - 'admin_update_channel_title' => 'Frissítési csatorna', - 'admin_update_channel_explain' => 'A Firefly III-hoz három frissítési csatorna létezik, melyek meghatározzák, hogy a felhasználók mennyivel járnak előbbre a funkciók, fejlesztések és hibák szempontjából. A kalandvágyók használhatják a "beta" csatornát, míg azok akik szeretnek veszélyesen élni az "alpha"-t.', - 'update_channel_stable' => 'Stabil. Mindennek az elvártnak megfelelően kell működnie.', - 'update_channel_beta' => 'Beta. Új funkciók, de elromolhatnak dolgok.', - 'update_channel_alpha' => 'Alpha. Bedobálunk dolgokat, és azt használjuk, ami hasznosnak ígérkezik.', + 'update_check_title' => 'Frissítések ellenőrzése', + 'admin_update_check_title' => 'Frissítés automatikus ellenőrzése', + 'admin_update_check_explain' => 'A Firefly III képes automatikusan ellenőrizni a frissítéseket. Ha engedélyezi ezt a beállítást, akkor a Firefly III frissítési kiszolgálóval kommunikálva ellenőrzésre kerül, hogy rendelkezésre áll-e a Firefly III új verziója. Ha igen, értesítést kap. Ezt az értesítést a jobb oldalon található gombra kattintva tesztelheti. Kérjük jelezze alább, ha szeretné, hogy a Firefly III ellenőrizze a frissítéseket.', + 'check_for_updates_permission' => 'A Firefly III automatikusan ellenőrizheti a frissítéseket, ha Ön ezt engedélyezi. Kérjük, keresse meg a adminisztráció menüpontot, ha engedélyezni szeretné ezt a funkciót.', + 'updates_ask_me_later' => 'Kérdezze később', + 'updates_do_not_check' => 'Ne ellenőrizze a frissítéseket', + 'updates_enable_check' => 'Frissítések ellenőrzésének engedélyezése', + 'admin_update_check_now_title' => 'Frissítések keresése most', + 'admin_update_check_now_explain' => 'Ha megnyomja a gombot, a Firefly III ellenőrinzi fogja, hogy a legfrissebb változatot használja -e.', + 'check_for_updates_button' => 'Ellenőrzés most!', + 'update_new_version_alert' => 'A Firefly III új verziója elérhető. A jelenleg használt verzió :your_version, a legújabb verzió pedig :new_version, amely ekkor jelent meg: :date.', + 'update_version_beta' => 'Ez egy BETA verzió. Előfordulhatnak problémák.', + 'update_version_alpha' => 'Ez egy ALPHA verzió. Előfordulhatnak problémák.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'A jelenlegi verzió :version, ez egyben a legfrissebb elérhető verzió is.', + 'update_newer_version_alert' => 'A jelenlegi verzió :your_version, amely újabb, mint a legfrissebb kiadott verzió, ami a :new_version.', + 'update_check_error' => 'Hiba történt a frissítések ellenőrzése közben: :error', + 'unknown_error' => 'Ismeretlen hiba. Elnézést kérünk.', + 'disabled_but_check' => 'Kikapcsolta a frissítések automata keresését. Ne feledje az elérhető verziók rendszeres ellenőrzését. Köszönjük!', + 'admin_update_channel_title' => 'Frissítési csatorna', + 'admin_update_channel_explain' => 'A Firefly III-hoz három frissítési csatorna létezik, melyek meghatározzák, hogy a felhasználók mennyivel járnak előbbre a funkciók, fejlesztések és hibák szempontjából. A kalandvágyók használhatják a "beta" csatornát, míg azok akik szeretnek veszélyesen élni az "alpha"-t.', + 'update_channel_stable' => 'Stabil. Mindennek az elvártnak megfelelően kell működnie.', + 'update_channel_beta' => 'Beta. Új funkciók, de elromolhatnak dolgok.', + 'update_channel_alpha' => 'Alpha. Bedobálunk dolgokat, és azt használjuk, ami hasznosnak ígérkezik.', // search - 'search' => 'Keresés', - 'search_query' => 'Lekérdezés', - 'search_found_transactions' => 'Firefly III :count tranzakciót talált :time másodperc alatt.|Firefly III :count tranzakciót talált :time másodperc alatt.', - 'search_found_more_transactions' => 'A Firefly III :count tranzakciót talált :time másodperc alatt.', - 'search_for_query' => 'A Firefly III tranzakciókat keres amelyben ez a kifejezés található: :query', - 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', + 'search' => 'Keresés', + 'search_query' => 'Lekérdezés', + 'search_found_transactions' => 'Firefly III :count tranzakciót talált :time másodperc alatt.|Firefly III :count tranzakciót talált :time másodperc alatt.', + 'search_found_more_transactions' => 'A Firefly III :count tranzakciót talált :time másodperc alatt.', + 'search_for_query' => 'A Firefly III tranzakciókat keres amelyben ez a kifejezés található: :query', + 'invalid_operators_list' => 'Ezek a keresési paraméterek érvénytelenek, és figyelmen kívül hagytuk őket.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,94 +351,93 @@ return [ * */ - - 'search_modifier_date_on' => 'Transaction date is ":value"', - 'search_modifier_not_date_on' => 'Transaction date is not ":value"', - 'search_modifier_reconciled' => 'Transaction is reconciled', - 'search_modifier_not_reconciled' => 'Transaction is not reconciled', - 'search_modifier_id' => 'Transaction ID is ":value"', - 'search_modifier_not_id' => 'Transaction ID is not ":value"', + 'search_modifier_date_on' => 'Tranzakció dátuma ":value"', + 'search_modifier_not_date_on' => 'Tranzakció dátuma nem ":value"', + 'search_modifier_reconciled' => 'Tranzakció kiegyenlítve', + 'search_modifier_not_reconciled' => 'Tranzakció nincs kiegyenlítve', + 'search_modifier_id' => 'Tranzakció azonosító ":value"', + 'search_modifier_not_id' => 'Tranzakció azonosító nem ":value"', 'search_modifier_date_before' => 'Tranzakció dátuma :value előtt van', 'search_modifier_date_after' => 'Tranzakció dátuma :value után van', - 'search_modifier_external_id_is' => 'External ID is ":value"', - 'search_modifier_not_external_id_is' => 'External ID is not ":value"', - 'search_modifier_no_external_url' => 'The transaction has no external URL', - 'search_modifier_no_external_id' => 'The transaction has no external ID', - 'search_modifier_not_any_external_url' => 'The transaction has no external URL', - 'search_modifier_not_any_external_id' => 'The transaction has no external ID', - 'search_modifier_any_external_url' => 'The transaction must have a (any) external URL', - 'search_modifier_any_external_id' => 'The transaction must have a (any) external ID', - 'search_modifier_not_no_external_url' => 'The transaction must have a (any) external URL', - 'search_modifier_not_no_external_id' => 'The transaction must have a (any) external ID', - 'search_modifier_internal_reference_is' => 'Internal reference is ":value"', - 'search_modifier_not_internal_reference_is' => 'Internal reference is not ":value"', - 'search_modifier_description_starts' => 'Description starts with ":value"', - 'search_modifier_not_description_starts' => 'Description does not start with ":value"', - 'search_modifier_description_ends' => 'Description ends on ":value"', - 'search_modifier_not_description_ends' => 'Description does not end on ":value"', + 'search_modifier_external_id_is' => 'Külső azonosító ":value"', + 'search_modifier_not_external_id_is' => 'Külső azonosító nem ":value"', + 'search_modifier_no_external_url' => 'A tranzakciónak nincs külső URL-je', + 'search_modifier_no_external_id' => 'A tranzakciónak nincs külső azonosítója', + 'search_modifier_not_any_external_url' => 'A tranzakciónak nincs külső URL-je', + 'search_modifier_not_any_external_id' => 'A tranzakciónak nincs külső azonosítója', + 'search_modifier_any_external_url' => 'A tranzakciónak rendelkeznie kell egy (bármilyen) külső URL-el', + 'search_modifier_any_external_id' => 'A tranzakciónak rendelkeznie kell egy (bármilyen) külső azonosítóval', + 'search_modifier_not_no_external_url' => 'A tranzakciónak rendelkeznie kell egy (bármilyen) külső URL-el', + 'search_modifier_not_no_external_id' => 'A tranzakciónak rendelkeznie kell egy (bármilyen) külső azonosítóval', + 'search_modifier_internal_reference_is' => 'Belső hivatkozás: :value', + 'search_modifier_not_internal_reference_is' => 'Belső hivatkozás nem ":value"', + 'search_modifier_description_starts' => 'Leírás eleje: ":value"', + 'search_modifier_not_description_starts' => 'Leírás eleje nem: ":value"', + 'search_modifier_description_ends' => 'Leírás vége: ":value"', + 'search_modifier_not_description_ends' => 'Leírás vége nem: ":value"', 'search_modifier_description_contains' => 'Leírás tartalmazza: ":value"', - 'search_modifier_not_description_contains' => 'Description does not contain ":value"', + 'search_modifier_not_description_contains' => 'Leírás nem tartalmazza: ":value"', 'search_modifier_description_is' => 'Leírás: ":value"', - 'search_modifier_not_description_is' => 'Description is exactly not ":value"', - 'search_modifier_currency_is' => 'Transaction (foreign) currency is ":value"', - 'search_modifier_not_currency_is' => 'Transaction (foreign) currency is not ":value"', - 'search_modifier_foreign_currency_is' => 'Transaction foreign currency is ":value"', - 'search_modifier_not_foreign_currency_is' => 'Transaction foreign currency is not ":value"', + 'search_modifier_not_description_is' => 'Leírás pontosan nem ":value"', + 'search_modifier_currency_is' => 'Tranzakció valutája ":value"', + 'search_modifier_not_currency_is' => 'Tranzakció valutája nem ":value"', + 'search_modifier_foreign_currency_is' => 'Tranzakció valutája ":value"', + 'search_modifier_not_foreign_currency_is' => 'Tranzakció valutája nem ":value"', 'search_modifier_has_attachments' => 'Tranzakcióhoz kell legyen melléklet', 'search_modifier_has_no_category' => 'A tranzakcióhoz nincs kategória', - 'search_modifier_not_has_no_category' => 'The transaction must have a (any) category', - 'search_modifier_not_has_any_category' => 'The transaction must have no category', + 'search_modifier_not_has_no_category' => 'A tranzakciónak rendelkeznie kell egy (bármilyen) kategóriával', + 'search_modifier_not_has_any_category' => 'A tranzakciónak nem lehet kategóriája', 'search_modifier_has_any_category' => 'A tranzakciónak van kategóriája', 'search_modifier_has_no_budget' => 'A tranzakcióhoz nincs költségkeret', - 'search_modifier_not_has_any_budget' => 'The transaction must have no budget', + 'search_modifier_not_has_any_budget' => 'A tranzakciónak nem lehet kültségkerete', 'search_modifier_has_any_budget' => 'A tranzakciónak van költségkerete', - 'search_modifier_not_has_no_budget' => 'The transaction must have a (any) budget', - 'search_modifier_has_no_bill' => 'The transaction must have no bill', - 'search_modifier_not_has_no_bill' => 'The transaction must have a (any) bill', - 'search_modifier_has_any_bill' => 'The transaction must have a (any) bill', - 'search_modifier_not_has_any_bill' => 'The transaction must have no bill', + 'search_modifier_not_has_no_budget' => 'A tranzakciónak rendelkeznie kell egy (bármilyen) költségkerettel', + 'search_modifier_has_no_bill' => 'A tranzakciónak nem lehet fizetendő számlája', + 'search_modifier_not_has_no_bill' => 'A tranzakciónak rendelkeznie kell egy (bármilyen) fizetendő számlával', + 'search_modifier_has_any_bill' => 'A tranzakciónak rendelkeznie kell egy (bármilyen) fizetendő számlával', + 'search_modifier_not_has_any_bill' => 'A tranzakciónak nem lehet fizetendő számlája', 'search_modifier_has_no_tag' => 'A tranzakcióhoz nincs címke', - 'search_modifier_not_has_any_tag' => 'The transaction must have no tags', - 'search_modifier_not_has_no_tag' => 'The transaction must have a (any) tag', + 'search_modifier_not_has_any_tag' => 'A tranzakciónak nem lehet cimkéje', + 'search_modifier_not_has_no_tag' => 'A tranzakciónak rendelkeznie kell egy (bármilyen) cimkével', 'search_modifier_has_any_tag' => 'A tranzakciónak van címkéje', - 'search_modifier_notes_contains' => 'The transaction notes contain ":value"', - 'search_modifier_not_notes_contains' => 'The transaction notes do not contain ":value"', - 'search_modifier_notes_starts' => 'The transaction notes start with ":value"', - 'search_modifier_not_notes_starts' => 'The transaction notes do not start with ":value"', - 'search_modifier_notes_ends' => 'The transaction notes end with ":value"', - 'search_modifier_not_notes_ends' => 'The transaction notes do not end with ":value"', - 'search_modifier_notes_is' => 'The transaction notes are exactly ":value"', - 'search_modifier_not_notes_is' => 'The transaction notes are exactly not ":value"', + 'search_modifier_notes_contains' => 'Tranzakció megjegyzése tartalmazza ":value"', + 'search_modifier_not_notes_contains' => 'Tranzakció megjegyzése nem tartalmazza ":value"', + 'search_modifier_notes_starts' => 'Tranzakció megjegyzésének kezdete ":value"', + 'search_modifier_not_notes_starts' => 'Tranzakció megjegyzésének kezdete nem ":value"', + 'search_modifier_notes_ends' => 'Tranzakció megjegyzésének vége ":value"', + 'search_modifier_not_notes_ends' => 'Tranzakció megjegyzésének vége nem ":value"', + 'search_modifier_notes_is' => 'Tranzakció megjegyzése pontosan ":value"', + 'search_modifier_not_notes_is' => 'Tranzakció megjegyzése pontosan nem ":value"', 'search_modifier_no_notes' => 'Tranzakciónak nincs megjegyzése', - 'search_modifier_not_no_notes' => 'The transaction must have notes', + 'search_modifier_not_no_notes' => 'Tranzakciónak rendelkeznie kell megjegyzéssel', 'search_modifier_any_notes' => 'Tranzakciónak van megjegyzése', - 'search_modifier_not_any_notes' => 'The transaction has no notes', - 'search_modifier_amount_is' => 'Amount is exactly :value', - 'search_modifier_not_amount_is' => 'Amount is not :value', + 'search_modifier_not_any_notes' => 'Tranzakciónak nincs megjegyzése', + 'search_modifier_amount_is' => 'Összeg pontosan :value', + 'search_modifier_not_amount_is' => 'Összeg nem :value', 'search_modifier_amount_less' => 'Összeg legfeljebb :value', - 'search_modifier_not_amount_more' => 'Amount is less than or equal to :value', + 'search_modifier_not_amount_more' => 'Összeg legfeljebb :value', 'search_modifier_amount_more' => 'Összeg legalább :value', - 'search_modifier_not_amount_less' => 'Amount is more than or equal to :value', + 'search_modifier_not_amount_less' => 'Összeg legalább :value', 'search_modifier_source_account_is' => 'Forrásszámla neve pontosan ":value"', - 'search_modifier_not_source_account_is' => 'Source account name is not ":value"', + 'search_modifier_not_source_account_is' => 'Forrásszámla vége nem ":value"', 'search_modifier_source_account_contains' => 'Forrásszámla neve tartalmazza ":value"', - 'search_modifier_not_source_account_contains' => 'Source account name does not contain ":value"', + 'search_modifier_not_source_account_contains' => 'Forrásszámla neve nem tartalmazza ":value"', 'search_modifier_source_account_starts' => 'Forrásszámla nevének eleje":value"', - 'search_modifier_not_source_account_starts' => 'Source account name does not start with ":value"', + 'search_modifier_not_source_account_starts' => 'Forrásszámla nevének eleje nem ":value"', 'search_modifier_source_account_ends' => 'Forrásszámla vége ":value"', - 'search_modifier_not_source_account_ends' => 'Source account name does not end with ":value"', + 'search_modifier_not_source_account_ends' => 'Forrásszámla nevének vége nem ":value"', 'search_modifier_source_account_id' => 'Forrásszámla ID pontosan :value', - 'search_modifier_not_source_account_id' => 'Source account ID is not :value', + 'search_modifier_not_source_account_id' => 'Forrásszámla ID nem :value', 'search_modifier_source_account_nr_is' => 'Forrásszámla számlaszáma (IBAN) pontosan ":value"', - 'search_modifier_not_source_account_nr_is' => 'Source account number (IBAN) is not ":value"', + 'search_modifier_not_source_account_nr_is' => 'Forrásszámla számlaszáma (IBAN) nem ":value"', 'search_modifier_source_account_nr_contains' => 'Forrásszámla számlaszáma (IBAN) tartalmazza ":value"', - 'search_modifier_not_source_account_nr_contains' => 'Source account number (IBAN) does not contain ":value"', + 'search_modifier_not_source_account_nr_contains' => 'Forrásszámla számlaszáma (IBAN) nem tartalmazza ":value"', 'search_modifier_source_account_nr_starts' => 'Forrásszámla számlaszáma (IBAN) kezdete ":value"', - 'search_modifier_not_source_account_nr_starts' => 'Source account number (IBAN) does not start with ":value"', - 'search_modifier_source_account_nr_ends' => 'Source account number (IBAN) ends on ":value"', - 'search_modifier_not_source_account_nr_ends' => 'Source account number (IBAN) does not end on ":value"', + 'search_modifier_not_source_account_nr_starts' => 'Forrásszámla számlaszám (IBAN) kezdete nem ":value"', + 'search_modifier_source_account_nr_ends' => 'Forrásszámla számlaszáma (IBAN) vége ":value"', + 'search_modifier_not_source_account_nr_ends' => 'Forrásszámla számlaszáma (IBAN) nem így végződik ":value"', 'search_modifier_destination_account_is' => 'Célszámla neve pontosan ":value"', - 'search_modifier_not_destination_account_is' => 'Destination account name is not ":value"', + 'search_modifier_not_destination_account_is' => 'Célszámla neve nem ":value"', 'search_modifier_destination_account_contains' => 'Célszámla neve tartalmazza ":value"', 'search_modifier_not_destination_account_contains' => 'Destination account name does not contain ":value"', 'search_modifier_destination_account_starts' => 'Célszámla nevének eleje: ":value"', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Tranzakció típusa: :value', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'A címke ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'A következő módosítókat a keresésre is alkalmaztuk:', 'general_search_error' => 'Hiba történt keresés közben. További információ a naplófájlokban található.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'Inaktív szabályokat nem lehet futtatni.', + 'show_triggers' => 'Mutasd az eseményindítókat', + 'show_actions' => 'Műveletek mutatása', 'rules' => 'Szabályok', 'rule_name' => 'Szabály neve', 'rule_triggers' => 'A szabály életbe lép amikor', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Tranzakció frissítésekor', 'rule_trigger_user_action' => 'A felhasználói művelet ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Forrásszámla nevének eleje..', 'rule_trigger_source_account_starts' => 'Forrásszámla nevének eleje: ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Költségkeret: ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'A tranzakció pénzneme..', 'rule_trigger_currency_is' => 'A tranzakció pénzneme: ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Transaction foreign currency is..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Szabálycsoport a számlákhoz', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Szabály a számlához: ":name"', 'new_rule_for_bill_description' => 'Ez a szabály megjelöli a tranzakciókat ":name" számla számára.', - 'new_rule_for_journal_title' => '":description" tranzakción alapuló szabály', - 'new_rule_for_journal_description' => 'Ez a szabály ":description" tranzakción alapul. A pontosan azonos tranzakciókkal fog egyezni.', + 'new_rule_for_journal_title' => '":description" tranzakción alapuló szabály', + 'new_rule_for_journal_description' => 'Ez a szabály ":description" tranzakción alapul. A pontosan azonos tranzakciókkal fog egyezni.', // tags - 'store_new_tag' => 'Új címke tárolása', - 'update_tag' => 'Címke frissítése', - 'no_location_set' => 'Nincs hely beállítása.', - 'meta_data' => 'Metaadat', - 'location' => 'Hely', - 'without_date' => 'Dátum nélkül', - 'result' => 'Eredmény', - 'sums_apply_to_range' => 'Minden összeg alkalmazása a kiválasztott tartományra', - 'mapbox_api_key' => 'A térkép használatához be kell szerezni egy API kulcsot a Mapbox oldalról. A kódot a .env fájlba, a MAPBOX_API_KEY = után kell beírni.', - 'press_object_location' => 'Jobb kattintással vagy az egérgomb hosszan nyomva tartásával lehet beállítani az objektum helyét.', - 'clear_location' => 'Hely törlése', - 'delete_all_selected_tags' => 'Minden kiválasztott címke törlése', - 'select_tags_to_delete' => 'Ki kell választani néhány címkét.', - 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', - 'create_rule_from_transaction' => 'Szabály létrehozása tranzakció alapján', - 'create_recurring_from_transaction' => 'Ismétlődő tranzakció létrehozása a tranzakció alapján', - + 'store_new_tag' => 'Új címke tárolása', + 'update_tag' => 'Címke frissítése', + 'no_location_set' => 'Nincs hely beállítása.', + 'meta_data' => 'Metaadat', + 'location' => 'Hely', + 'location_first_split' => 'A tranzakció helyszíne a tranzakció első bontásánál állítható be.', + 'without_date' => 'Dátum nélkül', + 'result' => 'Eredmény', + 'sums_apply_to_range' => 'Minden összeg alkalmazása a kiválasztott tartományra', + 'mapbox_api_key' => 'A térkép használatához be kell szerezni egy API kulcsot a Mapbox oldalról. A kódot a .env fájlba, a MAPBOX_API_KEY = után kell beírni.', + 'press_object_location' => 'Jobb kattintással vagy az egérgomb hosszan nyomva tartásával lehet beállítani az objektum helyét.', + 'click_tap_location' => 'Kattints, vagy érintsd meg a térképet helyszín hozzáadásához', + 'clear_location' => 'Hely törlése', + 'delete_all_selected_tags' => 'Minden kiválasztott címke törlése', + 'select_tags_to_delete' => 'Ki kell választani néhány címkét.', + 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', + 'create_rule_from_transaction' => 'Szabály létrehozása tranzakció alapján', + 'create_recurring_from_transaction' => 'Ismétlődő tranzakció létrehozása a tranzakció alapján', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(nyelvvel megegyező)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Kezdőoldali számlák', - 'pref_home_screen_accounts_help' => 'Melyik számlák legyenek megjelenítve a kezdőoldalon?', - 'pref_view_range' => 'Tartomány mutatása', - 'pref_view_range_help' => 'Néhány diagram automatikusan időszakokba lesz csoportosítva. A költségkeretek szintén időszakokba lesznek csoportosítva. Milyen időszakot részesít előnyben?', - 'pref_1D' => 'Egy nap', - 'pref_1W' => 'Egy hét', - 'pref_1M' => 'Egy hónap', - 'pref_3M' => 'Három hónap (negyedév)', - 'pref_6M' => 'Hat hónap', - 'pref_1Y' => 'Egy év', - 'pref_last365' => 'Last year', - 'pref_last90' => 'Last 90 days', - 'pref_last30' => 'Last 30 days', - 'pref_last7' => 'Last 7 days', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Nyelvek', - 'pref_locale' => 'Területi beállítások', - 'pref_languages_help' => 'A Firefly III több nyelven is elérhető. Melyiket szeretné használni?', - 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', - 'pref_locale_no_demo' => 'Ez a funkció nem működik a demo felhasználónak.', - 'pref_custom_fiscal_year' => 'Költségvetési év beállításai', - 'pref_custom_fiscal_year_label' => 'Engedélyezett', - 'pref_custom_fiscal_year_help' => 'Azokban az országokban ahol a pénzügyi év nem Január 1 és December 31 közé esik, be lehet ezt kapcsolni és meg lehet adni a pénzügyi év kezdő- és végdátumát', - 'pref_fiscal_year_start_label' => 'Üzleti év kezdődátuma', - 'pref_two_factor_auth' => 'Kétlépcsős azonosítás', - 'pref_two_factor_auth_help' => 'Ha a kétlépéses igazolás (más néven kétfaktoros hitelesítés) engedélyezett, egy extra réteg lesz hozzáadva a fiók biztonságához. A bejelentkezéshez kell valami ismert (a jelszó) és valami meglévő (egy ellenőrző kód). Az ellenőrző kódokat olyan telefonos alkalmazások generálják, mint az Authy vagy a Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Kétlépcsős azonosítás engedélyezése', - 'pref_two_factor_auth_disabled' => '2 lépcsős azonosítási kód eltávolítva és letilva', - 'pref_two_factor_auth_remove_it' => 'Ne felejtse el törölni a fiókot a hitelesítő alkalmazásából!', - 'pref_two_factor_auth_code' => 'Kód megerősítése', - 'pref_two_factor_auth_code_help' => 'Be kell olvasni a QR kódot a telefonon található Authy, Google Authenticator vagy egy ezekhez hasonló alkalmazással, majd be kell írni a létrehozott kódot.', - 'pref_two_factor_auth_reset_code' => 'Ellenőrző kód visszaállítása', - 'pref_two_factor_auth_disable_2fa' => '2FA kikapcsolása', - '2fa_use_secret_instead' => 'Ha nincs lehetőség a QR kód beolvasására, akkor helyette a titkos kulcs is hasznáható: :secret.', - '2fa_backup_codes' => 'Mentsd el a biztonsági kódokat, arra az esetre, ha elveszted az eszközödet.', - '2fa_already_enabled' => 'A kétlépéses ellenőrzés már engedélyezve van.', - 'wrong_mfa_code' => 'Ez az MFA kód nem érvényes.', - 'pref_save_settings' => 'Beállítások mentése', - 'saved_preferences' => 'Beállítások elmentve!', - 'preferences_general' => 'Általános', - 'preferences_frontpage' => 'Kezdőoldal', - 'preferences_security' => 'Biztonság', - 'preferences_layout' => 'Elrendezés', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Bevételek mutatása a kezdőoldalon', - 'pref_home_show_deposits_info' => 'A kezdőoldalon már látszanak a költségszámlák. Szeretné a jövedelemszámlákat is megjeleníteni?', - 'pref_home_do_show_deposits' => 'Igen, mutasd', - 'successful_count' => 'ebből :count sikeres', - 'list_page_size_title' => 'Oldal mérete', - 'list_page_size_help' => 'Minden dologból (számlák, tranzakciók, stb) legfeljebb ennyi lesz megjelenítve oldalanként.', - 'list_page_size_label' => 'Oldal mérete', - 'between_dates' => '(:start és :end)', - 'pref_optional_fields_transaction' => 'Tranzakciók választható mezői', - 'pref_optional_fields_transaction_help' => 'Alapértelmezés szerint új tranzakció létrehozásakor nem minden mező engedélyezett (hogy elkerüljük a túlzsúfoltságot). Ezeket a mezőket lent lehet engedélyezni ha valamelyikre szükség van. Természetesen azok a letiltott mezők amelyek már ki vannak töltve, a beállítástól függetlenül láthatóak lesznek.', - 'optional_tj_date_fields' => 'Dátummezők', - 'optional_tj_other_fields' => 'Other fields', - 'optional_tj_attachment_fields' => 'Melléklet mezők', - 'pref_optional_tj_interest_date' => 'Kamatfizetési időpont', - 'pref_optional_tj_book_date' => 'Könyvelés dátuma', - 'pref_optional_tj_process_date' => 'Feldolgozás dátuma', - 'pref_optional_tj_due_date' => 'Esedékesség dátuma', - 'pref_optional_tj_payment_date' => 'Kifizetés dátuma', - 'pref_optional_tj_invoice_date' => 'Számla dátuma', - 'pref_optional_tj_internal_reference' => 'Belső hivatkozás', - 'pref_optional_tj_notes' => 'Megjegyzések', - 'pref_optional_tj_attachments' => 'Mellékletek', - 'pref_optional_tj_external_url' => 'External URL', - 'pref_optional_tj_location' => 'Location', - 'pref_optional_tj_links' => 'Transaction links', - 'optional_field_meta_dates' => 'Dátumok', - 'optional_field_meta_business' => 'Üzleti', - 'optional_field_attachments' => 'Mellékletek', - 'optional_field_meta_data' => 'Opcionális metaadat', - 'external_url' => 'External URL', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(nyelvvel megegyező)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Kezdőoldali számlák', + 'pref_home_screen_accounts_help' => 'Melyik számlák legyenek megjelenítve a kezdőoldalon?', + 'pref_view_range' => 'Tartomány mutatása', + 'pref_view_range_help' => 'Néhány diagram automatikusan időszakokba lesz csoportosítva. A költségkeretek szintén időszakokba lesznek csoportosítva. Milyen időszakot részesít előnyben?', + 'pref_1D' => 'Egy nap', + 'pref_1W' => 'Egy hét', + 'pref_1M' => 'Egy hónap', + 'pref_3M' => 'Három hónap (negyedév)', + 'pref_6M' => 'Hat hónap', + 'pref_1Y' => 'Egy év', + 'pref_last365' => 'Last year', + 'pref_last90' => 'Last 90 days', + 'pref_last30' => 'Last 30 days', + 'pref_last7' => 'Last 7 days', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => 'Nyelvek', + 'pref_locale' => 'Területi beállítások', + 'pref_languages_help' => 'A Firefly III több nyelven is elérhető. Melyiket szeretné használni?', + 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', + 'pref_locale_no_demo' => 'Ez a funkció nem működik a demo felhasználónak.', + 'pref_custom_fiscal_year' => 'Költségvetési év beállításai', + 'pref_custom_fiscal_year_label' => 'Engedélyezett', + 'pref_custom_fiscal_year_help' => 'Azokban az országokban ahol a pénzügyi év nem Január 1 és December 31 közé esik, be lehet ezt kapcsolni és meg lehet adni a pénzügyi év kezdő- és végdátumát', + 'pref_fiscal_year_start_label' => 'Üzleti év kezdődátuma', + 'pref_two_factor_auth' => 'Kétlépcsős azonosítás', + 'pref_two_factor_auth_help' => 'Ha a kétlépéses igazolás (más néven kétfaktoros hitelesítés) engedélyezett, egy extra réteg lesz hozzáadva a fiók biztonságához. A bejelentkezéshez kell valami ismert (a jelszó) és valami meglévő (egy ellenőrző kód). Az ellenőrző kódokat olyan telefonos alkalmazások generálják, mint az Authy vagy a Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Kétlépcsős azonosítás engedélyezése', + 'pref_two_factor_auth_disabled' => '2 lépcsős azonosítási kód eltávolítva és letilva', + 'pref_two_factor_auth_remove_it' => 'Ne felejtse el törölni a fiókot a hitelesítő alkalmazásából!', + 'pref_two_factor_auth_code' => 'Kód megerősítése', + 'pref_two_factor_auth_code_help' => 'Be kell olvasni a QR kódot a telefonon található Authy, Google Authenticator vagy egy ezekhez hasonló alkalmazással, majd be kell írni a létrehozott kódot.', + 'pref_two_factor_auth_reset_code' => 'Ellenőrző kód visszaállítása', + 'pref_two_factor_auth_disable_2fa' => '2FA kikapcsolása', + '2fa_use_secret_instead' => 'Ha nincs lehetőség a QR kód beolvasására, akkor helyette a titkos kulcs is hasznáható: :secret.', + '2fa_backup_codes' => 'Mentsd el a biztonsági kódokat, arra az esetre, ha elveszted az eszközödet.', + '2fa_already_enabled' => 'A kétlépéses ellenőrzés már engedélyezve van.', + 'wrong_mfa_code' => 'Ez az MFA kód nem érvényes.', + 'pref_save_settings' => 'Beállítások mentése', + 'saved_preferences' => 'Beállítások elmentve!', + 'preferences_general' => 'Általános', + 'preferences_frontpage' => 'Kezdőoldal', + 'preferences_security' => 'Biztonság', + 'preferences_layout' => 'Elrendezés', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Bevételek mutatása a kezdőoldalon', + 'pref_home_show_deposits_info' => 'A kezdőoldalon már látszanak a költségszámlák. Szeretné a jövedelemszámlákat is megjeleníteni?', + 'pref_home_do_show_deposits' => 'Igen, mutasd', + 'successful_count' => 'ebből :count sikeres', + 'list_page_size_title' => 'Oldal mérete', + 'list_page_size_help' => 'Minden dologból (számlák, tranzakciók, stb) legfeljebb ennyi lesz megjelenítve oldalanként.', + 'list_page_size_label' => 'Oldal mérete', + 'between_dates' => '(:start és :end)', + 'pref_optional_fields_transaction' => 'Tranzakciók választható mezői', + 'pref_optional_fields_transaction_help' => 'Alapértelmezés szerint új tranzakció létrehozásakor nem minden mező engedélyezett (hogy elkerüljük a túlzsúfoltságot). Ezeket a mezőket lent lehet engedélyezni ha valamelyikre szükség van. Természetesen azok a letiltott mezők amelyek már ki vannak töltve, a beállítástól függetlenül láthatóak lesznek.', + 'optional_tj_date_fields' => 'Dátummezők', + 'optional_tj_other_fields' => 'Other fields', + 'optional_tj_attachment_fields' => 'Melléklet mezők', + 'pref_optional_tj_interest_date' => 'Kamatfizetési időpont', + 'pref_optional_tj_book_date' => 'Könyvelés dátuma', + 'pref_optional_tj_process_date' => 'Feldolgozás dátuma', + 'pref_optional_tj_due_date' => 'Esedékesség dátuma', + 'pref_optional_tj_payment_date' => 'Kifizetés dátuma', + 'pref_optional_tj_invoice_date' => 'Számla dátuma', + 'pref_optional_tj_internal_reference' => 'Belső hivatkozás', + 'pref_optional_tj_notes' => 'Megjegyzések', + 'pref_optional_tj_attachments' => 'Mellékletek', + 'pref_optional_tj_external_url' => 'External URL', + 'pref_optional_tj_location' => 'Location', + 'pref_optional_tj_links' => 'Transaction links', + 'optional_field_meta_dates' => 'Dátumok', + 'optional_field_meta_business' => 'Üzleti', + 'optional_field_attachments' => 'Mellékletek', + 'optional_field_meta_data' => 'Opcionális metaadat', + 'external_url' => 'External URL', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'Minden másik bejelentkezésed ki lett léptetve.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'MINDEN költségkeret törlése', - 'delete_all_categories' => 'MINDEN kategória törlése', - 'delete_all_tags' => 'MINDEN címke törlése', - 'delete_all_bills' => 'MINDEN számla törlése', - 'delete_all_piggy_banks' => 'MINDEN malacpersely törlése', - 'delete_all_rules' => 'MINDEN szabály törlése', - 'delete_all_recurring' => 'MINDEN ismétlődő tranzakció törlése', - 'delete_all_object_groups' => 'MINDEN csoport törlése', - 'delete_all_accounts' => 'MINDEN költségszámla törlése', - 'delete_all_asset_accounts' => 'MINDEN eszközszámla törlése', - 'delete_all_expense_accounts' => 'MINDEN költségszámla törlése', - 'delete_all_revenue_accounts' => 'MINDEN jövedelemszámla törlése', - 'delete_all_liabilities' => 'MINDEN kötelezettség törlése', - 'delete_all_transactions' => 'MINDEN tranzakció törlése', - 'delete_all_withdrawals' => 'MINDEN költség törlése', - 'delete_all_deposits' => 'MINDEN bevétel törlése', - 'delete_all_transfers' => 'MINDEN átvezetés törlése', - 'also_delete_transactions' => 'Számlák törlése során MINDEN hozzá kapcsolódó költség, bevétel és átvezetés is törlődik!', - 'deleted_all_budgets' => 'Minden költségkeret törölve', - 'deleted_all_categories' => 'Minden kategória törölve', - 'deleted_all_tags' => 'Minden címke törölve', - 'deleted_all_bills' => 'Minden számla törölve lett', - 'deleted_all_piggy_banks' => 'Minden malacpersely törölve lett', - 'deleted_all_rules' => 'Minden szabály és szabálycsoport törölve lett', - 'deleted_all_object_groups' => 'Minden csoport törölve lett', - 'deleted_all_accounts' => 'Minden számla törölve lett', - 'deleted_all_asset_accounts' => 'Minden eszközszámla törölve lett', - 'deleted_all_expense_accounts' => 'Minden költségszámla törölve lett', - 'deleted_all_revenue_accounts' => 'Minden jövedelemszámla törölve lett', - 'deleted_all_liabilities' => 'Minden kötelezettség törölve lett', - 'deleted_all_transactions' => 'Minden tranzakció törölve lett', - 'deleted_all_withdrawals' => 'Minden költség törölve lett', - 'deleted_all_deposits' => 'Minden bevétel törölve lett', - 'deleted_all_transfers' => 'Minden átvezetés törölve lett', - 'deleted_all_recurring' => 'Minden ismétlődő tranzakció törölve lett', - 'change_your_password' => 'Jelszó módosítása', - 'delete_account' => 'Fiók törlése', - 'current_password' => 'Jelenlegi jelszó', - 'new_password' => 'Új jelszó', - 'new_password_again' => 'Új jelszó megismétlése', - 'delete_your_account' => 'Saját fiók törlése', - 'delete_your_account_help' => 'A fiók törlése minden a Firefly III-ba elmentett számlát, tranzakciót, MINDENT törölni fog. Ezek EL FOGNAK TŰNNI.', - 'delete_your_account_password' => 'Meg kell adni a jelszót a folytatáshoz.', - 'password' => 'Jelszó', - 'are_you_sure' => 'Biztos? Nem vonható vissza.', - 'delete_account_button' => 'Saját fiók TÖRLÉSE', - 'invalid_current_password' => 'Érvénytelen jelenlegi jelszó!', - 'password_changed' => 'Jelszó módosítva!', - 'should_change' => 'Az ötlet az, hogy megváltoztasd a jelszavad.', - 'invalid_password' => 'Érvénytelen jelszó!', - 'what_is_pw_security' => 'Mit jelent a "jelszóbiztonság ellenőrzése"?', - 'secure_pw_title' => 'Hogyan válasszon biztonságos jelszót', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => 'Nincs olyan hét, hogy a hírekben ne lehetne arról olvasni, hogy egy weboldal elvesztette a felhasználói jelszavait. A hekkerek és a tolvajok a privát információk ellopására használják ezeket az jelszavakat. Ezek az információk értékesek.', - 'secure_pw_ff' => 'Ugyanazt a jelszót használod az egész interneten? Ha egy weboldal elveszti a jelszavadat a hekkerek minden adatodhoz hozzá fognak férni. A Firefly III rád bízza, hogy erős és egyedi jelszót válassz a pénzügyi adataid védelméhez.', - 'secure_pw_check_box' => 'A Firefly III úgy segít ebben, hogy ellenőrzi nem lopták-e el a múltban a megadott jelszót. Ha ez történt a Firefly III javasolni fogja, hogy NE használd ezt a jelszót.', - 'secure_pw_working_title' => 'Hogyan működik?', - 'secure_pw_working' => 'Bejelölve, a Firefly III elküldi a jelszó az SHA1 hashének első őt karakterét Troy Hunt weboldalának, hogy ellenőrizze szerepel-e a listában. Ez megakadályozza, hogy nem biztonságos jelszavakat használj ahogy az a legutolsó NIST Special Publication-ban javasolják.', - 'secure_pw_should' => 'Kipipáljam a négyzetet?', - 'secure_pw_long_password' => 'Igen. Mindig ellenőrizze, hogy a jelszavam biztonságos-e.', - 'command_line_token' => 'Parancssori token', - 'explain_command_line_token' => 'Erre a tokenre parancssori lehetőségek végrehajtásához van szükség, mint például adatok exportálása. Enélkül néhány érzékeny parancs nem fog működni. Ezt a tokent senki nem fogja kérni tőled, még a fejlesztő sem. A lenti gombbal újragenerálhatod, ha félsz hogy illetéktelenek kezébe került.', - 'regenerate_command_line_token' => 'Parancssori token újragenerálása', - 'token_regenerated' => 'Az új parancssori token generálódott', - 'change_your_email' => 'Email cím módosítása', - 'email_verification' => 'Egy email üzenet lesz elküldve a régi ÉS az új email címre. Biztonsági okokból, nem lehet majd bejelentkezni amíg az új email cím nincs ellenőrizve. Ha nem biztos, hogy a Firefly III telepítés képes emaileket küldeni, nem szabad használni ezt a funkciót. Az adminisztrátor ellenőrizheti ezt az Adminisztráció oldalon.', - 'email_changed_logout' => 'Amíg nem ellenőrizted az email címed addig nem tudsz bejelentkezni.', - 'login_with_new_email' => 'Most már bejelentkezhet az új email címével.', - 'login_with_old_email' => 'Most már bejelentkezhet újra a régi email címével.', - 'login_provider_local_only' => 'Ez a művelet nem érhető el ":login_provider" általi hitelesítésekor.', - 'external_user_mgt_disabled' => 'Ez a művelet nem elérhető, amikor a felhasználó kezelést és bejelentkeztetést nem a Firely III végzi.', - 'external_auth_disabled' => 'Ez a művelet nem elérhető, amikor a bejelentkeztetést nem a Firefly III végzi.', - 'delete_local_info_only' => "Mivel nem a Firefly III végzi a felhasználók kezelését és a bejelentkeztetést, ez a funkció csak a lokális Firefly III információkat törli.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth kliensek', - 'profile_oauth_no_clients' => 'Nincs létrehozva egyetlen OAuth kliens sem.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Kliensek', - 'profile_oauth_client_id' => 'Kliens ID', - 'profile_oauth_client_name' => 'Megnevezés', - 'profile_oauth_client_secret' => 'Titkos kód', - 'profile_oauth_create_new_client' => 'Új kliens létrehozása', - 'profile_oauth_create_client' => 'Kliens létrehozása', - 'profile_oauth_edit_client' => 'Kliens szerkesztése', - 'profile_oauth_name_help' => 'Segítség, hogy a felhasználók tudják mihez kapcsolódik.', - 'profile_oauth_redirect_url' => 'Átirányítási URL', - 'profile_oauth_redirect_url_help' => 'Az alkalmazásban használt autentikációs URL.', - 'profile_authorized_apps' => 'Engedélyezett alkalmazások', - 'profile_authorized_clients' => 'Engedélyezett kliensek', - 'profile_scopes' => 'Hatáskörök', - 'profile_revoke' => 'Visszavonás', - 'profile_oauth_client_secret_title' => 'Kliens titkos kódja', - 'profile_oauth_client_secret_expl' => 'Ez a kliens titkos kódja. Ez az egyetlen alkalom, amikor meg van jelenítve, ne hagyd el! Ezzel a kóddal végezhetsz API hívásokat.', - 'profile_personal_access_tokens' => 'Személyes hozzáférési tokenek', - 'profile_personal_access_token' => 'Személyes hozzáférési token', - 'profile_oauth_confidential' => 'Bizalmas', - 'profile_oauth_confidential_help' => 'Titkos kód használata a kliens bejelentkezéséhez. Bizonyos kliensek biztonságosan tudnak hitelesítő adatokat tárolni, anélkül hogy jogosulatlan fél hozzáférhetne. Nyilvános kliensek, például mint asztali vagy JavaScript SPA alkalmazások nem tudnak biztonságosan titkos kódot tárolni.', - 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', - 'profile_no_personal_access_token' => 'Nincs létrehozva egyetlen személyes hozzáférési token sem.', - 'profile_create_new_token' => 'Új token létrehozása', - 'profile_create_token' => 'Token létrehozása', - 'profile_create' => 'Létrehozás', - 'profile_save_changes' => 'Módosítások mentése', - 'profile_whoops' => 'Hoppá!', - 'profile_something_wrong' => 'Hiba történt!', - 'profile_try_again' => 'Hiba történt. Kérjük, próbálja meg újra.', - 'amounts' => 'Mennyiségek', - 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', - 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', - 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', - 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'Minden másik bejelentkezésed ki lett léptetve.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'MINDEN költségkeret törlése', + 'delete_all_categories' => 'MINDEN kategória törlése', + 'delete_all_tags' => 'MINDEN címke törlése', + 'delete_all_bills' => 'MINDEN számla törlése', + 'delete_all_piggy_banks' => 'MINDEN malacpersely törlése', + 'delete_all_rules' => 'MINDEN szabály törlése', + 'delete_all_recurring' => 'MINDEN ismétlődő tranzakció törlése', + 'delete_all_object_groups' => 'MINDEN csoport törlése', + 'delete_all_accounts' => 'MINDEN költségszámla törlése', + 'delete_all_asset_accounts' => 'MINDEN eszközszámla törlése', + 'delete_all_expense_accounts' => 'MINDEN költségszámla törlése', + 'delete_all_revenue_accounts' => 'MINDEN jövedelemszámla törlése', + 'delete_all_liabilities' => 'MINDEN kötelezettség törlése', + 'delete_all_transactions' => 'MINDEN tranzakció törlése', + 'delete_all_withdrawals' => 'MINDEN költség törlése', + 'delete_all_deposits' => 'MINDEN bevétel törlése', + 'delete_all_transfers' => 'MINDEN átvezetés törlése', + 'also_delete_transactions' => 'Számlák törlése során MINDEN hozzá kapcsolódó költség, bevétel és átvezetés is törlődik!', + 'deleted_all_budgets' => 'Minden költségkeret törölve', + 'deleted_all_categories' => 'Minden kategória törölve', + 'deleted_all_tags' => 'Minden címke törölve', + 'deleted_all_bills' => 'Minden számla törölve lett', + 'deleted_all_piggy_banks' => 'Minden malacpersely törölve lett', + 'deleted_all_rules' => 'Minden szabály és szabálycsoport törölve lett', + 'deleted_all_object_groups' => 'Minden csoport törölve lett', + 'deleted_all_accounts' => 'Minden számla törölve lett', + 'deleted_all_asset_accounts' => 'Minden eszközszámla törölve lett', + 'deleted_all_expense_accounts' => 'Minden költségszámla törölve lett', + 'deleted_all_revenue_accounts' => 'Minden jövedelemszámla törölve lett', + 'deleted_all_liabilities' => 'Minden kötelezettség törölve lett', + 'deleted_all_transactions' => 'Minden tranzakció törölve lett', + 'deleted_all_withdrawals' => 'Minden költség törölve lett', + 'deleted_all_deposits' => 'Minden bevétel törölve lett', + 'deleted_all_transfers' => 'Minden átvezetés törölve lett', + 'deleted_all_recurring' => 'Minden ismétlődő tranzakció törölve lett', + 'change_your_password' => 'Jelszó módosítása', + 'delete_account' => 'Fiók törlése', + 'current_password' => 'Jelenlegi jelszó', + 'new_password' => 'Új jelszó', + 'new_password_again' => 'Új jelszó megismétlése', + 'delete_your_account' => 'Saját fiók törlése', + 'delete_your_account_help' => 'A fiók törlése minden a Firefly III-ba elmentett számlát, tranzakciót, MINDENT törölni fog. Ezek EL FOGNAK TŰNNI.', + 'delete_your_account_password' => 'Meg kell adni a jelszót a folytatáshoz.', + 'password' => 'Jelszó', + 'are_you_sure' => 'Biztos? Nem vonható vissza.', + 'delete_account_button' => 'Saját fiók TÖRLÉSE', + 'invalid_current_password' => 'Érvénytelen jelenlegi jelszó!', + 'password_changed' => 'Jelszó módosítva!', + 'should_change' => 'Az ötlet az, hogy megváltoztasd a jelszavad.', + 'invalid_password' => 'Érvénytelen jelszó!', + 'what_is_pw_security' => 'Mit jelent a "jelszóbiztonság ellenőrzése"?', + 'secure_pw_title' => 'Hogyan válasszon biztonságos jelszót', + 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', + 'secure_pw_history' => 'Nincs olyan hét, hogy a hírekben ne lehetne arról olvasni, hogy egy weboldal elvesztette a felhasználói jelszavait. A hekkerek és a tolvajok a privát információk ellopására használják ezeket az jelszavakat. Ezek az információk értékesek.', + 'secure_pw_ff' => 'Ugyanazt a jelszót használod az egész interneten? Ha egy weboldal elveszti a jelszavadat a hekkerek minden adatodhoz hozzá fognak férni. A Firefly III rád bízza, hogy erős és egyedi jelszót válassz a pénzügyi adataid védelméhez.', + 'secure_pw_check_box' => 'A Firefly III úgy segít ebben, hogy ellenőrzi nem lopták-e el a múltban a megadott jelszót. Ha ez történt a Firefly III javasolni fogja, hogy NE használd ezt a jelszót.', + 'secure_pw_working_title' => 'Hogyan működik?', + 'secure_pw_working' => 'Bejelölve, a Firefly III elküldi a jelszó az SHA1 hashének első őt karakterét Troy Hunt weboldalának, hogy ellenőrizze szerepel-e a listában. Ez megakadályozza, hogy nem biztonságos jelszavakat használj ahogy az a legutolsó NIST Special Publication-ban javasolják.', + 'secure_pw_should' => 'Kipipáljam a négyzetet?', + 'secure_pw_long_password' => 'Igen. Mindig ellenőrizze, hogy a jelszavam biztonságos-e.', + 'command_line_token' => 'Parancssori token', + 'explain_command_line_token' => 'Erre a tokenre parancssori lehetőségek végrehajtásához van szükség, mint például adatok exportálása. Enélkül néhány érzékeny parancs nem fog működni. Ezt a tokent senki nem fogja kérni tőled, még a fejlesztő sem. A lenti gombbal újragenerálhatod, ha félsz hogy illetéktelenek kezébe került.', + 'regenerate_command_line_token' => 'Parancssori token újragenerálása', + 'token_regenerated' => 'Az új parancssori token generálódott', + 'change_your_email' => 'Email cím módosítása', + 'email_verification' => 'Egy email üzenet lesz elküldve a régi ÉS az új email címre. Biztonsági okokból, nem lehet majd bejelentkezni amíg az új email cím nincs ellenőrizve. Ha nem biztos, hogy a Firefly III telepítés képes emaileket küldeni, nem szabad használni ezt a funkciót. Az adminisztrátor ellenőrizheti ezt az Adminisztráció oldalon.', + 'email_changed_logout' => 'Amíg nem ellenőrizted az email címed addig nem tudsz bejelentkezni.', + 'login_with_new_email' => 'Most már bejelentkezhet az új email címével.', + 'login_with_old_email' => 'Most már bejelentkezhet újra a régi email címével.', + 'login_provider_local_only' => 'Ez a művelet nem érhető el ":login_provider" általi hitelesítésekor.', + 'external_user_mgt_disabled' => 'Ez a művelet nem elérhető, amikor a felhasználó kezelést és bejelentkeztetést nem a Firely III végzi.', + 'external_auth_disabled' => 'Ez a művelet nem elérhető, amikor a bejelentkeztetést nem a Firefly III végzi.', + 'delete_local_info_only' => 'Mivel nem a Firefly III végzi a felhasználók kezelését és a bejelentkeztetést, ez a funkció csak a lokális Firefly III információkat törli.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth kliensek', + 'profile_oauth_no_clients' => 'Nincs létrehozva egyetlen OAuth kliens sem.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Kliensek', + 'profile_oauth_client_id' => 'Kliens ID', + 'profile_oauth_client_name' => 'Megnevezés', + 'profile_oauth_client_secret' => 'Titkos kód', + 'profile_oauth_create_new_client' => 'Új kliens létrehozása', + 'profile_oauth_create_client' => 'Kliens létrehozása', + 'profile_oauth_edit_client' => 'Kliens szerkesztése', + 'profile_oauth_name_help' => 'Segítség, hogy a felhasználók tudják mihez kapcsolódik.', + 'profile_oauth_redirect_url' => 'Átirányítási URL', + 'profile_oauth_redirect_url_help' => 'Az alkalmazásban használt autentikációs URL.', + 'profile_authorized_apps' => 'Engedélyezett alkalmazások', + 'profile_authorized_clients' => 'Engedélyezett kliensek', + 'profile_scopes' => 'Hatáskörök', + 'profile_revoke' => 'Visszavonás', + 'profile_oauth_client_secret_title' => 'Kliens titkos kódja', + 'profile_oauth_client_secret_expl' => 'Ez a kliens titkos kódja. Ez az egyetlen alkalom, amikor meg van jelenítve, ne hagyd el! Ezzel a kóddal végezhetsz API hívásokat.', + 'profile_personal_access_tokens' => 'Személyes hozzáférési tokenek', + 'profile_personal_access_token' => 'Személyes hozzáférési token', + 'profile_oauth_confidential' => 'Bizalmas', + 'profile_oauth_confidential_help' => 'Titkos kód használata a kliens bejelentkezéséhez. Bizonyos kliensek biztonságosan tudnak hitelesítő adatokat tárolni, anélkül hogy jogosulatlan fél hozzáférhetne. Nyilvános kliensek, például mint asztali vagy JavaScript SPA alkalmazások nem tudnak biztonságosan titkos kódot tárolni.', + 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', + 'profile_no_personal_access_token' => 'Nincs létrehozva egyetlen személyes hozzáférési token sem.', + 'profile_create_new_token' => 'Új token létrehozása', + 'profile_create_token' => 'Token létrehozása', + 'profile_create' => 'Létrehozás', + 'profile_save_changes' => 'Módosítások mentése', + 'profile_whoops' => 'Hoppá!', + 'profile_something_wrong' => 'Hiba történt!', + 'profile_try_again' => 'Hiba történt. Kérjük, próbálja meg újra.', + 'amounts' => 'Mennyiségek', + 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', + 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', + 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', + 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Adatok exportálása a Firefly III-ból', - 'export_data_menu' => 'Adat exportálása', - 'export_data_bc' => 'Adatok exportálása a Firefly III-ból', - 'export_data_main_title' => 'Adatok exportálása a Firefly III-ból', - 'export_data_expl' => 'Ezek a hivatkozások lehetővé teszik az összes tranzakció + a metaadatok exportálását a Firefly III-ból. A folyamatról további információ a súgóban ((?) ikon a jobb felső sarokban) található.', - 'export_data_all_transactions' => 'Összes tranzakció exportálása', - 'export_data_advanced_expl' => 'Ha szükséged van speciális exportálásra, akkor olvass utána a következő parancssori parancsnak: php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Adatok exportálása a Firefly III-ból', + 'export_data_menu' => 'Adat exportálása', + 'export_data_bc' => 'Adatok exportálása a Firefly III-ból', + 'export_data_main_title' => 'Adatok exportálása a Firefly III-ból', + 'export_data_expl' => 'Ezek a hivatkozások lehetővé teszik az összes tranzakció + a metaadatok exportálását a Firefly III-ból. A folyamatról további információ a súgóban ((?) ikon a jobb felső sarokban) található.', + 'export_data_all_transactions' => 'Összes tranzakció exportálása', + 'export_data_advanced_expl' => 'Ha szükséged van speciális exportálásra, akkor olvass utána a következő parancssori parancsnak: php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Egy melléklet|:count melléklet', - 'attachments' => 'Mellékletek', - 'edit_attachment' => 'Melléklet szerkesztése ":name"', - 'update_attachment' => 'Melléklet frissítése', - 'delete_attachment' => '":name" melléklet törlése', - 'attachment_deleted' => 'Törölt melléklet ":name"', - 'liabilities_deleted' => '":name" kötelezettség törölve', - 'attachment_updated' => 'Melléklet frissítve ":name"', - 'upload_max_file_size' => 'Maximális fájlméret: :size', - 'list_all_attachments' => 'Mellékletek listája', + 'nr_of_attachments' => 'Egy melléklet|:count melléklet', + 'attachments' => 'Mellékletek', + 'edit_attachment' => 'Melléklet szerkesztése ":name"', + 'update_attachment' => 'Melléklet frissítése', + 'delete_attachment' => '":name" melléklet törlése', + 'attachment_deleted' => 'Törölt melléklet ":name"', + 'liabilities_deleted' => '":name" kötelezettség törölve', + 'attachment_updated' => 'Melléklet frissítve ":name"', + 'upload_max_file_size' => 'Maximális fájlméret: :size', + 'list_all_attachments' => 'Mellékletek listája', // transaction index - 'title_expenses' => 'Költségek', - 'title_withdrawal' => 'Költségek', - 'title_revenue' => 'Jövedelem / bevétel', - 'title_deposit' => 'Jövedelem / bevétel', - 'title_transfer' => 'Átvezetések', - 'title_transfers' => 'Átvezetések', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Költségek', + 'title_withdrawal' => 'Költségek', + 'title_revenue' => 'Jövedelem / bevétel', + 'title_deposit' => 'Jövedelem / bevétel', + 'title_transfer' => 'Átvezetések', + 'title_transfers' => 'Átvezetések', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Ez a tranzakció már egy költség', - 'convert_is_already_type_Deposit' => 'Ez a tranzakció már egy bevétel', - 'convert_is_already_type_Transfer' => 'Ez a tranzakció már egy utalás', - 'convert_to_Withdrawal' => '":description" költséggé konvertálása', - 'convert_to_Deposit' => '":description" bevétellé alakítása', - 'convert_to_Transfer' => 'Átutalássá alakítás ":description"', - 'convert_options_WithdrawalDeposit' => 'Egy költség bevétellé alakítása', - 'convert_options_WithdrawalTransfer' => 'Egy költség átvezetéssé konvertálása', - 'convert_options_DepositTransfer' => 'Egy bevétel átvezetéssé alakítása', - 'convert_options_DepositWithdrawal' => 'Egy bevétel költséggé konvertálása', - 'convert_options_TransferWithdrawal' => 'Utalás kiadássá alakítása', - 'convert_options_TransferDeposit' => 'Egy átvezetés bevétellé alakítása', - 'convert_Withdrawal_to_deposit' => 'Költség bevétellé konvertálása', - 'convert_Withdrawal_to_transfer' => 'Költség átvezetéssé alakítása', - 'convert_Deposit_to_withdrawal' => 'Bevétel költséggé alakítása', - 'convert_Deposit_to_transfer' => 'Bevétel átvezetéssé alakítása', - 'convert_Transfer_to_deposit' => 'Átvezetés bevétellé alakítása', - 'convert_Transfer_to_withdrawal' => 'Átvezetés költséggé konvertálása', - 'convert_please_set_revenue_source' => 'Kérem válasszon ki egy bevételiszámlát, ahonnan a pénz fog érkezni.', - 'convert_please_set_asset_destination' => 'Kérem válasszon ki egy eszközszámlát, ahova a pénz fog menni.', - 'convert_please_set_expense_destination' => 'Ki kell választani egy költségszámlát, ahova a pénz fog menni.', - 'convert_please_set_asset_source' => 'Kérem válasszon ki egy eszközszámlát, ahonnan a pénz fog érkezni.', - 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', - 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', - 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'A konverzió befejezéséhez be kell állítani az új forrásszámlát.|A konverzió befejezéséhez be kell állítani az új forrásszámlákat.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => 'Tranzakció költséggé konvertálva', - 'converted_to_Deposit' => 'A tranzakció bevétellé konvertálva', - 'converted_to_Transfer' => 'Tranzakció átvezetéssé konvertálva', - 'invalid_convert_selection' => 'A kiválasztott számla már használatban van ebben a tranzakcióban vagy nem létezik.', - 'source_or_dest_invalid' => 'Nem találhatóak a megfelelő tranzakció részletek. A konverzió nem lehetséges.', - 'convert_to_withdrawal' => 'Konvertálás költséggé', - 'convert_to_deposit' => 'Konvertálás egy bevétellé', - 'convert_to_transfer' => 'Konvertálás átvezetéssé', + 'convert_is_already_type_Withdrawal' => 'Ez a tranzakció már egy költség', + 'convert_is_already_type_Deposit' => 'Ez a tranzakció már egy bevétel', + 'convert_is_already_type_Transfer' => 'Ez a tranzakció már egy utalás', + 'convert_to_Withdrawal' => '":description" költséggé konvertálása', + 'convert_to_Deposit' => '":description" bevétellé alakítása', + 'convert_to_Transfer' => 'Átutalássá alakítás ":description"', + 'convert_options_WithdrawalDeposit' => 'Egy költség bevétellé alakítása', + 'convert_options_WithdrawalTransfer' => 'Egy költség átvezetéssé konvertálása', + 'convert_options_DepositTransfer' => 'Egy bevétel átvezetéssé alakítása', + 'convert_options_DepositWithdrawal' => 'Egy bevétel költséggé konvertálása', + 'convert_options_TransferWithdrawal' => 'Utalás kiadássá alakítása', + 'convert_options_TransferDeposit' => 'Egy átvezetés bevétellé alakítása', + 'convert_Withdrawal_to_deposit' => 'Költség bevétellé konvertálása', + 'convert_Withdrawal_to_transfer' => 'Költség átvezetéssé alakítása', + 'convert_Deposit_to_withdrawal' => 'Bevétel költséggé alakítása', + 'convert_Deposit_to_transfer' => 'Bevétel átvezetéssé alakítása', + 'convert_Transfer_to_deposit' => 'Átvezetés bevétellé alakítása', + 'convert_Transfer_to_withdrawal' => 'Átvezetés költséggé konvertálása', + 'convert_please_set_revenue_source' => 'Kérem válasszon ki egy bevételiszámlát, ahonnan a pénz fog érkezni.', + 'convert_please_set_asset_destination' => 'Kérem válasszon ki egy eszközszámlát, ahova a pénz fog menni.', + 'convert_please_set_expense_destination' => 'Ki kell választani egy költségszámlát, ahova a pénz fog menni.', + 'convert_please_set_asset_source' => 'Kérem válasszon ki egy eszközszámlát, ahonnan a pénz fog érkezni.', + 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', + 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', + 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', + 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', + 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'A konverzió befejezéséhez be kell állítani az új forrásszámlát.|A konverzió befejezéséhez be kell állítani az új forrásszámlákat.', + 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', + 'converted_to_Withdrawal' => 'Tranzakció költséggé konvertálva', + 'converted_to_Deposit' => 'A tranzakció bevétellé konvertálva', + 'converted_to_Transfer' => 'Tranzakció átvezetéssé konvertálva', + 'invalid_convert_selection' => 'A kiválasztott számla már használatban van ebben a tranzakcióban vagy nem létezik.', + 'source_or_dest_invalid' => 'Nem találhatóak a megfelelő tranzakció részletek. A konverzió nem lehetséges.', + 'convert_to_withdrawal' => 'Konvertálás költséggé', + 'convert_to_deposit' => 'Konvertálás egy bevétellé', + 'convert_to_transfer' => 'Konvertálás átvezetéssé', // create new stuff: - 'create_new_withdrawal' => 'Új költség létrehozása', - 'create_new_deposit' => 'Új bevétel létrehozása', - 'create_new_transfer' => 'Új átvezetés létrehozása', - 'create_new_asset' => 'Új eszközszámla létrehozása', - 'create_new_liabilities' => 'Create new liability', - 'create_new_expense' => 'Új költségszámla létrehozása', - 'create_new_revenue' => 'Új jövedelemszámla létrehozása', - 'create_new_piggy_bank' => 'Új malacpersely létrehozása', - 'create_new_bill' => 'Új számla létrehozása', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Új költség létrehozása', + 'create_new_deposit' => 'Új bevétel létrehozása', + 'create_new_transfer' => 'Új átvezetés létrehozása', + 'create_new_asset' => 'Új eszközszámla létrehozása', + 'create_new_liabilities' => 'Create new liability', + 'create_new_expense' => 'Új költségszámla létrehozása', + 'create_new_revenue' => 'Új jövedelemszámla létrehozása', + 'create_new_piggy_bank' => 'Új malacpersely létrehozása', + 'create_new_bill' => 'Új számla létrehozása', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Új pénznem létrehozása', - 'store_currency' => 'Új pénznem tárolása', - 'update_currency' => 'Pénznem frissítése', - 'new_default_currency' => ':name lett az alapértelmezett pénznem.', - 'cannot_delete_currency' => ':name nem törölhető mert még használatban van.', - 'cannot_delete_fallback_currency' => ':name a rendszer biztonsági pénzneme és nem törölhető.', - 'cannot_disable_currency_journals' => ':name nem tiltható le mert még használják tranzakciók.', - 'cannot_disable_currency_last_left' => ':name nem tiltható le mert ez az utolsó engedélyezett pénznem.', - 'cannot_disable_currency_account_meta' => ':name nem tiltható le, mert eszközszámlákban használatban van.', - 'cannot_disable_currency_bills' => ':name nem tiltható le, mert számlákban használatban van.', - 'cannot_disable_currency_recurring' => ':name nem tiltható le, mert rendszeres tranzakciókban használva van.', - 'cannot_disable_currency_available_budgets' => ':name nem tiltható le, mert rendelkezésre álló költségkeretekben használatban van.', - 'cannot_disable_currency_budget_limits' => ':name nem tiltható le, mert költségvetési limitekben használatban van.', - 'cannot_disable_currency_current_default' => ':name nem tiltható le, mert ez az aktuális alapértelmezett pénznem.', - 'cannot_disable_currency_system_fallback' => ':name nem tiltható le, mert ez a rendszer alapértelmezett pénzneme.', - 'disable_EUR_side_effects' => 'Az euró a rendszer alapértelmezett vészhelyzeti devizaneme. Inaktiválás esetén nem várt mellékhatások lehetnek.', - 'deleted_currency' => 'A pénznem :name törölve lett', - 'created_currency' => 'Pénznem :name létrehozva', - 'could_not_store_currency' => 'Az új pénznem nem tárolható.', - 'updated_currency' => 'Pénznem :name frissítve', - 'ask_site_owner' => ':owner tud pénznemeket hozzáadni, törölni vagy szerkeszteni.', - 'currencies_intro' => 'A Firefly III különböző pénznemeket támogat amelyeket itt lehet beállítani, és engedélyezni.', - 'make_default_currency' => 'Legyen alapértelmezett', - 'default_currency' => 'alapértelmezett', - 'currency_is_disabled' => 'Letiltva', - 'enable_currency' => 'Engedélyezés', - 'disable_currency' => 'Tiltás', - 'currencies_default_disabled' => 'A pénznemek többsége alapértelmezés szerint tiltva van. A használathoz először engedélyezni kell azokat.', - 'currency_is_now_enabled' => 'Pénznem ":name" engedélyezve', - 'currency_is_now_disabled' => 'Pénznem ":name" letiltva', + 'create_currency' => 'Új pénznem létrehozása', + 'store_currency' => 'Új pénznem tárolása', + 'update_currency' => 'Pénznem frissítése', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => ':name nem törölhető mert még használatban van.', + 'cannot_delete_fallback_currency' => ':name a rendszer biztonsági pénzneme és nem törölhető.', + 'cannot_disable_currency_journals' => ':name nem tiltható le mert még használják tranzakciók.', + 'cannot_disable_currency_last_left' => ':name nem tiltható le mert ez az utolsó engedélyezett pénznem.', + 'cannot_disable_currency_account_meta' => ':name nem tiltható le, mert eszközszámlákban használatban van.', + 'cannot_disable_currency_bills' => ':name nem tiltható le, mert számlákban használatban van.', + 'cannot_disable_currency_recurring' => ':name nem tiltható le, mert rendszeres tranzakciókban használva van.', + 'cannot_disable_currency_available_budgets' => ':name nem tiltható le, mert rendelkezésre álló költségkeretekben használatban van.', + 'cannot_disable_currency_budget_limits' => ':name nem tiltható le, mert költségvetési limitekben használatban van.', + 'cannot_disable_currency_current_default' => ':name nem tiltható le, mert ez az aktuális alapértelmezett pénznem.', + 'cannot_disable_currency_system_fallback' => ':name nem tiltható le, mert ez a rendszer alapértelmezett pénzneme.', + 'disable_EUR_side_effects' => 'Az euró a rendszer alapértelmezett vészhelyzeti devizaneme. Inaktiválás esetén nem várt mellékhatások lehetnek.', + 'deleted_currency' => 'A pénznem :name törölve lett', + 'created_currency' => 'Pénznem :name létrehozva', + 'could_not_store_currency' => 'Az új pénznem nem tárolható.', + 'updated_currency' => 'Pénznem :name frissítve', + 'ask_site_owner' => ':owner tud pénznemeket hozzáadni, törölni vagy szerkeszteni.', + 'currencies_intro' => 'A Firefly III különböző pénznemeket támogat amelyeket itt lehet beállítani, és engedélyezni.', + 'make_default_currency' => 'Legyen alapértelmezett', + 'default_currency' => 'alapértelmezett', + 'currency_is_disabled' => 'Letiltva', + 'enable_currency' => 'Engedélyezés', + 'disable_currency' => 'Tiltás', + 'currencies_default_disabled' => 'A pénznemek többsége alapértelmezés szerint tiltva van. A használathoz először engedélyezni kell azokat.', + 'currency_is_now_enabled' => 'Pénznem ":name" engedélyezve', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Pénznem ":name" letiltva', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Kötelező mezők', - 'optionalFields' => 'Nem kötelező mezők', - 'options' => 'Beállítások', + 'mandatoryFields' => 'Kötelező mezők', + 'optionalFields' => 'Nem kötelező mezők', + 'options' => 'Beállítások', // budgets: - 'daily_budgets' => 'Daily budgets', - 'weekly_budgets' => 'Weekly budgets', - 'monthly_budgets' => 'Monthly budgets', - 'quarterly_budgets' => 'Quarterly budgets', - 'half_year_budgets' => 'Half-yearly budgets', - 'yearly_budgets' => 'Yearly budgets', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', - 'total_available_budget' => 'Teljes elérhető költségkeret (:start és :end között)', - 'total_available_budget_in_currency' => 'Teljes elérhető költségkeret :currency pénznemben', - 'see_below' => 'lásd lentebb', - 'create_new_budget' => 'Új költségkeret létrehozása', - 'store_new_budget' => 'Új költségkeret létrehozása', - 'stored_new_budget' => 'Új költségkeret létrehozva ":name"', - 'available_between' => ':start és :end között rendelkezésre áll', - 'transactionsWithoutBudget' => 'Költségkeret nélküli költségek', - 'transactions_no_budget' => 'Költségkeret nélküli költségek :start és :end között', - 'spent_between' => 'Már elköltött :start és :end között', - 'set_available_amount' => 'Rendelkezésre álló összeg beállítása', - 'update_available_amount' => 'Rendelkezésre álló összeg frissítése', - 'ab_basic_modal_explain' => 'Használja ezt az űrlapot a költségvetés beállításához (összesen, :currency devizában) a feltüntetett időszakban.', - 'createBudget' => 'Új költségkeret', - 'invalid_currency' => 'Ez egy érvénytelen pénznem', - 'invalid_amount' => 'Kérlek, írj be egy összeget', - 'set_ab' => 'A rendelkezésre álló költségkeret összeg beéllítva', - 'updated_ab' => 'A rendelkezésre álló költségkeret összeg frissítve', - 'deleted_ab' => 'A rendelkezésre álló költségkeret összeg törölve', - 'deleted_bl' => 'A költségvetésbe felvett összeg el lett távolítva', - 'alt_currency_ab_create' => 'A rendelkezésre álló költségkeret beállítása más pénznemben', - 'bl_create_btn' => 'Költségkeret beállítása más pénznemben', - 'inactiveBudgets' => 'Inaktív költségkeretek', - 'without_budget_between' => 'Költségkeret nélküli tranzakció :start és :end között', - 'delete_budget' => '":name" költségkeret törlése', - 'deleted_budget' => 'Költségkeret törölve ":name"', - 'edit_budget' => '":name" költségkeret szerkesztése', - 'updated_budget' => 'Költségkeret frissítve ":name"', - 'update_amount' => 'Összeg frissítése', - 'update_budget' => 'Költségvetés frissítése', - 'update_budget_amount_range' => 'A (várt) rendelkezésre álló összeg frissítése :start és :end között', - 'set_budget_limit_title' => 'Tervezett költégvetés :start és :end időszakra a(z) :budget költségvetéshez', - 'set_budget_limit' => 'Tervezett költségvetési összeg', - 'budget_period_navigator' => 'Időszak navigátor', - 'info_on_available_amount' => 'Mivel rendelkezem?', - 'available_amount_indication' => 'Ezeket az összeget felhasználva lehet megtudni, hogy mekkorának kéne lennie a teljes költségkeretnek.', - 'suggested' => 'Javasolt', - 'average_between' => 'Átlag :start és :end között', - 'transferred_in' => 'Átvezetett (be)', - 'transferred_away' => '(Máshova) átvezetett', - 'auto_budget_none' => 'Nincs auto-költségkeret', - 'auto_budget_reset' => 'Fix összeg beállítása minden időszakra', - 'auto_budget_rollover' => 'Összeg hozzáadása minden időszakhoz', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Napi', - 'auto_budget_period_weekly' => 'Heti', - 'auto_budget_period_monthly' => 'Havi', - 'auto_budget_period_quarterly' => 'Negyedéves', - 'auto_budget_period_half_year' => 'Félévente', - 'auto_budget_period_yearly' => 'Éves', - 'auto_budget_help' => 'Erről a funkcióról további információ a súgóban található. A súgó a jobb felső (?) ikonra kattintva érhető el.', - 'auto_budget_reset_icon' => 'A költségvetés periodikusan újraszámlálódik', - 'auto_budget_rollover_icon' => 'A költségvetési összeg periodikusan növekszik', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', + 'daily_budgets' => 'Daily budgets', + 'weekly_budgets' => 'Weekly budgets', + 'monthly_budgets' => 'Monthly budgets', + 'quarterly_budgets' => 'Quarterly budgets', + 'half_year_budgets' => 'Half-yearly budgets', + 'yearly_budgets' => 'Yearly budgets', + 'other_budgets' => 'Custom timed budgets', + 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', + 'total_available_budget' => 'Teljes elérhető költségkeret (:start és :end között)', + 'total_available_budget_in_currency' => 'Teljes elérhető költségkeret :currency pénznemben', + 'see_below' => 'lásd lentebb', + 'create_new_budget' => 'Új költségkeret létrehozása', + 'store_new_budget' => 'Új költségkeret létrehozása', + 'stored_new_budget' => 'Új költségkeret létrehozva ":name"', + 'available_between' => ':start és :end között rendelkezésre áll', + 'transactionsWithoutBudget' => 'Költségkeret nélküli költségek', + 'transactions_no_budget' => 'Költségkeret nélküli költségek :start és :end között', + 'spent_between' => 'Már elköltött :start és :end között', + 'spent_between_left' => ':start és :end között :spent költöttél, így maradt :left.', + 'set_available_amount' => 'Rendelkezésre álló összeg beállítása', + 'update_available_amount' => 'Rendelkezésre álló összeg frissítése', + 'ab_basic_modal_explain' => 'Használja ezt az űrlapot a költségvetés beállításához (összesen, :currency devizában) a feltüntetett időszakban.', + 'createBudget' => 'Új költségkeret', + 'invalid_currency' => 'Ez egy érvénytelen pénznem', + 'invalid_amount' => 'Kérlek, írj be egy összeget', + 'set_ab' => 'A rendelkezésre álló költségkeret összeg beéllítva', + 'updated_ab' => 'A rendelkezésre álló költségkeret összeg frissítve', + 'deleted_ab' => 'A rendelkezésre álló költségkeret összeg törölve', + 'deleted_bl' => 'A költségvetésbe felvett összeg el lett távolítva', + 'alt_currency_ab_create' => 'A rendelkezésre álló költségkeret beállítása más pénznemben', + 'bl_create_btn' => 'Költségkeret beállítása más pénznemben', + 'inactiveBudgets' => 'Inaktív költségkeretek', + 'without_budget_between' => 'Költségkeret nélküli tranzakció :start és :end között', + 'delete_budget' => '":name" költségkeret törlése', + 'deleted_budget' => 'Költségkeret törölve ":name"', + 'edit_budget' => '":name" költségkeret szerkesztése', + 'updated_budget' => 'Költségkeret frissítve ":name"', + 'update_amount' => 'Összeg frissítése', + 'update_budget' => 'Költségvetés frissítése', + 'update_budget_amount_range' => 'A (várt) rendelkezésre álló összeg frissítése :start és :end között', + 'set_budget_limit_title' => 'Tervezett költégvetés :start és :end időszakra a(z) :budget költségvetéshez', + 'set_budget_limit' => 'Tervezett költségvetési összeg', + 'budget_period_navigator' => 'Időszak navigátor', + 'info_on_available_amount' => 'Mivel rendelkezem?', + 'available_amount_indication' => 'Ezeket az összeget felhasználva lehet megtudni, hogy mekkorának kéne lennie a teljes költségkeretnek.', + 'suggested' => 'Javasolt', + 'average_between' => 'Átlag :start és :end között', + 'transferred_in' => 'Átvezetett (be)', + 'transferred_away' => '(Máshova) átvezetett', + 'auto_budget_none' => 'Nincs auto-költségkeret', + 'auto_budget_reset' => 'Fix összeg beállítása minden időszakra', + 'auto_budget_rollover' => 'Összeg hozzáadása minden időszakhoz', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Napi', + 'auto_budget_period_weekly' => 'Heti', + 'auto_budget_period_monthly' => 'Havi', + 'auto_budget_period_quarterly' => 'Negyedéves', + 'auto_budget_period_half_year' => 'Félévente', + 'auto_budget_period_yearly' => 'Éves', + 'auto_budget_help' => 'Erről a funkcióról további információ a súgóban található. A súgó a jobb felső (?) ikonra kattintva érhető el.', + 'auto_budget_reset_icon' => 'A költségvetés periodikusan újraszámlálódik', + 'auto_budget_rollover_icon' => 'A költségvetési összeg periodikusan növekszik', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Nem várható ebben az időszakban', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Nincs (még)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Tranzakciókkal egyező számlák :low és :high között.', - 'running_again_loss' => 'A számlával korábban összekötött tranzakciók összeköttetése törlődhet, ha többé nem felelnek meg egyetlen szabálynak sem.', - 'bill_related_rules' => 'Erre a számlára vonatkozó szabályok', - 'repeats' => 'Ismétlődések', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Kapcsolódó tranzakciók', - 'auto_match_on' => 'A Firefly III által automatikusan egyeztetett', - 'auto_match_off' => 'A Firefly III által nem automatikusan egyeztetett', - 'next_expected_match' => 'Következő várható egyezés', - 'delete_bill' => '":name" számla törlése', - 'deleted_bill' => '":name" számla törölve', - 'edit_bill' => '":name" számla szerkesztése', - 'more' => 'Több', - 'rescan_old' => 'Szabályok újrafuttatása az összes tranzakción', - 'update_bill' => 'Számla frissítése', - 'updated_bill' => '":name" számla frissítve', - 'store_new_bill' => 'Új számla tárolása', - 'stored_new_bill' => 'Új ":name" számla eltárolva', - 'cannot_scan_inactive_bill' => 'Inaktív számlákat nem lehet vizsgálni.', - 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', - 'average_bill_amount_year' => 'Átlagos számlaösszeg (:year)', - 'average_bill_amount_overall' => 'Átlagos számlaösszeg (összes)', - 'bill_is_active' => 'A számla aktív', - 'bill_expected_between' => 'Várható :start és :end között', - 'bill_will_automatch' => 'A számla automatikusan hozzá lesz csatolva az egyező tranzakciókhoz', - 'skips_over' => 'kihagy', - 'bill_store_error' => 'Nem várt hiba történt az új számla tárolása közben. Ellenőrizd a naplófájlokat', - 'list_inactive_rule' => 'inaktív szabály', - 'bill_edit_rules' => 'A Firefly III megpróbálja szerkeszteni a a számlához kapcsolódó szabályt is. Ha ön már szerkesztette a szabályt, a Firefly III nem fogja módosítani.|A Firefly III megpróbálja szerkeszteni a a számlához kapcsolódó :count szabályt is. Ha ön már szerkesztette a szabályt, a Firefly III nem fogja módosítani.', - 'bill_expected_date' => 'Várható dátum :date', - 'bill_expected_date_js' => 'Expected {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Paid on {date}', - 'bill_repeats_weekly' => 'Repeats weekly', - 'bill_repeats_monthly' => 'Repeats monthly', - 'bill_repeats_quarterly' => 'Repeats quarterly', - 'bill_repeats_half-year' => 'Repeats every half year', - 'bill_repeats_yearly' => 'Repeats yearly', - 'bill_repeats_weekly_other' => 'Repeats every other week', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Repeats yearly', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Subscriptions', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Forever', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Nem várható ebben az időszakban', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Nincs (még)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Tranzakciókkal egyező számlák :low és :high között.', + 'running_again_loss' => 'A számlával korábban összekötött tranzakciók összeköttetése törlődhet, ha többé nem felelnek meg egyetlen szabálynak sem.', + 'bill_related_rules' => 'Erre a számlára vonatkozó szabályok', + 'repeats' => 'Ismétlődések', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Kapcsolódó tranzakciók', + 'auto_match_on' => 'A Firefly III által automatikusan egyeztetett', + 'auto_match_off' => 'A Firefly III által nem automatikusan egyeztetett', + 'next_expected_match' => 'Következő várható egyezés', + 'delete_bill' => '":name" számla törlése', + 'deleted_bill' => '":name" számla törölve', + 'edit_bill' => '":name" számla szerkesztése', + 'more' => 'Több', + 'rescan_old' => 'Szabályok újrafuttatása az összes tranzakción', + 'update_bill' => 'Számla frissítése', + 'updated_bill' => '":name" számla frissítve', + 'store_new_bill' => 'Új számla tárolása', + 'stored_new_bill' => 'Új ":name" számla eltárolva', + 'cannot_scan_inactive_bill' => 'Inaktív számlákat nem lehet vizsgálni.', + 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', + 'average_bill_amount_year' => 'Átlagos számlaösszeg (:year)', + 'average_bill_amount_overall' => 'Átlagos számlaösszeg (összes)', + 'bill_is_active' => 'A számla aktív', + 'bill_expected_between' => 'Várható :start és :end között', + 'bill_will_automatch' => 'A számla automatikusan hozzá lesz csatolva az egyező tranzakciókhoz', + 'skips_over' => 'kihagy', + 'bill_store_error' => 'Nem várt hiba történt az új számla tárolása közben. Ellenőrizd a naplófájlokat', + 'list_inactive_rule' => 'inaktív szabály', + 'bill_edit_rules' => 'A Firefly III megpróbálja szerkeszteni a a számlához kapcsolódó szabályt is. Ha ön már szerkesztette a szabályt, a Firefly III nem fogja módosítani.|A Firefly III megpróbálja szerkeszteni a a számlához kapcsolódó :count szabályt is. Ha ön már szerkesztette a szabályt, a Firefly III nem fogja módosítani.', + 'bill_expected_date' => 'Várható dátum :date', + 'bill_expected_date_js' => 'Expected {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Paid on {date}', + 'bill_repeats_weekly' => 'Repeats weekly', + 'bill_repeats_monthly' => 'Repeats monthly', + 'bill_repeats_quarterly' => 'Repeats quarterly', + 'bill_repeats_half-year' => 'Repeats every half year', + 'bill_repeats_yearly' => 'Repeats yearly', + 'bill_repeats_weekly_other' => 'Repeats every other week', + 'bill_repeats_monthly_other' => 'Repeats every other month', + 'bill_repeats_quarterly_other' => 'Repeats every other quarter', + 'bill_repeats_half-year_other' => 'Repeats yearly', + 'bill_repeats_yearly_other' => 'Repeats every other year', + 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', + 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', + 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', + 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', + 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', + 'subscriptions' => 'Subscriptions', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Forever', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', - 'all_accounts_inactive' => 'Ezek az inaktív számlák.', - 'active_account_link' => 'Ez a hivatkozás visszavisz az aktív számlákhoz.', - 'account_missing_transaction' => ':id (":name") számla nem tekinthető meg közvetlenül, de a Fireflyból hiányzik az átirányítási információ.', - 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', - 'details_for_asset' => '":name" eszközszámla részletei', - 'details_for_expense' => '":name" költségszámla részletei', - 'details_for_revenue' => '":name" jövedelemszámla részletei', - 'details_for_cash' => '":name" készpénzszámla részletei', - 'store_new_asset_account' => 'Új eszközszámla tárolása', - 'store_new_expense_account' => 'Új költségszámla tárolása', - 'store_new_revenue_account' => 'Új jövedelemszámla létrehozása', - 'edit_asset_account' => '":name" eszközszámla szerkesztése', - 'edit_expense_account' => '":name" költségszámla szerkesztése', - 'edit_revenue_account' => '":name" jövedelemszámla szerkesztése', - 'delete_asset_account' => '":name" eszközszámla törlése', - 'delete_expense_account' => '":name" költségszámla törlése', - 'delete_revenue_account' => '":name" jövedelemszámla törlése', - 'delete_liabilities_account' => '":name" kötelezettség törlése', - 'asset_deleted' => '":name" eszközszámla sikeresen törölve', - 'account_deleted' => 'Successfully deleted account ":name"', - 'expense_deleted' => '":name" költségszámla sikeresen törölve', - 'revenue_deleted' => '":name" jövedelemszámla sikeresen törölve', - 'update_asset_account' => 'Eszközszámla frissítése', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => 'Kötelezettség frissítése', - 'update_expense_account' => 'Költségszámla frissítése', - 'update_revenue_account' => 'Jövedelemszámla frissítése', - 'make_new_asset_account' => 'Új eszközszámla létrehozása', - 'make_new_expense_account' => 'Új költségszámla létrehozása', - 'make_new_revenue_account' => 'Új jövedelemszámla létrehozása', - 'make_new_liabilities_account' => 'Új kötelezettség létrehozása', - 'asset_accounts' => 'Eszközszámlák', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Eszközszámlák (inaktív)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Költségszámlák', - 'expense_accounts_inactive' => 'Költségszámlák (inaktív)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Jövedelemszámlák', - 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', - 'cash_accounts' => 'Készpénzszámlák', - 'Cash account' => 'Készpénzszámla', - 'liabilities_accounts' => 'Kötelezettségek', - 'liabilities_accounts_inactive' => 'Liabilities (inactive)', - 'reconcile_account' => '":account" számla egyeztetése', - 'overview_of_reconcile_modal' => 'Egyeztetés áttekintése', - 'delete_reconciliation' => 'Egyeztetés törlése', - 'update_reconciliation' => 'Egyeztetés frissítése', - 'amount_cannot_be_zero' => 'Az összeg nem lehet nulla', - 'end_of_reconcile_period' => 'Egyeztetési időszak vége: :period', - 'start_of_reconcile_period' => 'Egyeztetési időszak kezdete: :period', - 'start_balance' => 'Kezdő egyenleg', - 'end_balance' => 'Záró egyenleg', - 'update_balance_dates_instruction' => 'Ha a fenti összegek és dátumok összevetése a bankszámlakivonattal megtörtént, az "Egyeztetés indítása" gombra kell kattintani', - 'select_transactions_instruction' => 'A bankszámlakivonaton szereplő tranzakciók kiválasztása.', - 'select_range_and_balance' => 'Először ellenőrizd a dátum időszakot és az egyenlegeket. Utána nyomd meg az "Egyeztetés indítása" gombot', - 'date_change_instruction' => 'Az időintervallum megváltoztatásával minden előrehaladás el fog veszni.', - 'update_selection' => 'Kiválasztás frissítése', - 'store_reconcile' => 'Egyeztetés letárolása', - 'reconciliation_transaction' => 'Tranzakció egyeztetése', - 'Reconciliation' => 'Egyeztetés', - 'reconciliation' => 'Egyeztetés', - 'reconcile_options' => 'Egyeztetés beállításai', - 'reconcile_range' => 'Egyeztetés időszaka', - 'start_reconcile' => 'Egyeztetés indítása', - 'cash_account_type' => 'Készpénz', - 'cash' => 'készpénz', - 'cant_find_redirect_account' => 'A Firefly III megpróbálkozott az átirányítással de az nem sikerült. Elnézést kérünk. Vissza a kezdőlapra.', - 'account_type' => 'Bankszámla típusa', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => '":name" új számla letárolva!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => '":name" számla frissítve', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Hitelkártya opciók', - 'no_transactions_account' => 'Nincsenek tranzakciók (ebben az időszakban) az eszközszámlához: ":name".', - 'no_transactions_period' => 'Nincsenek tranzakció ebben az időszakban.', - 'no_data_for_chart' => 'Nincs elegendő információ (még) a diagram létrehozásához.', - 'select_at_least_one_account' => 'Kérem, jelöljön ki legalább egy eszközszámlát', - 'select_at_least_one_category' => 'Legalább egy kategóriát ki kell választani', - 'select_at_least_one_budget' => 'Legalább egy költségkeretet ki kell választani', - 'select_at_least_one_tag' => 'Legalább egy címkét ki kell választani', - 'select_at_least_one_expense' => 'Legalább egy költség- jövedelemszámla kombinációt ki kell választani. Ha nincs egy sem (a lista üres), ez a jelenés nem érhető el.', - 'account_default_currency' => 'Ez az ehhez a számlához társított alapértelmezett pénznem.', - 'reconcile_has_more' => 'A Firefly III főkönyvben több pénz van mint amennyinek a bank szerint lennie kellene. Több lehetőség van. Ki kell választani mi történjen. Ezután az "Egyeztetés megerősítése" gombra kell kattintani.', - 'reconcile_has_less' => 'A Firefly III főkönyvben kevesebb pénz van mint amennyinek a bank szerint lennie kellene. Több lehetőség van. Ki kell választani mi történjen. Ezután az "Egyeztetés megerősítése" gombra kell kattintani.', - 'reconcile_is_equal' => 'A Firefly III főkönyv és a bankszámlakivonatok egyeznek. Nem kell semmit sem tenni. Az importálás megerősítéséhez az "Egyeztetés megerősítése" gombra kell kattintani.', - 'create_pos_reconcile_transaction' => 'A kiválasztott tranzakciók törlése és egy korrekció létrehozása :amount hozzáadásával ehhez az eszközszámlához.', - 'create_neg_reconcile_transaction' => 'A kiválasztott tranzakciók törlése, és egy korrekció létrehozása :amount eltávolításával az eszközszámláról.', - 'reconcile_do_nothing' => 'Kijelölt tranzakciók ürítése, javítás nélkül.', - 'reconcile_go_back' => 'Egy korrekció később bármikor szerkeszthető vagy törölhető.', - 'must_be_asset_account' => 'Csak eszközszámlákat lehet egyeztetni', - 'reconciliation_stored' => 'Egyeztetés letárolva', - 'reconciliation_error' => 'Hiba miatt a tranzakciók meg lettek jelölve egyeztetésre, de az egyeztetés nem lett eltárolva: :error.', - 'reconciliation_transaction_title' => 'Egyeztetés (:from - :to)', - 'sum_of_reconciliation' => 'Egyeztetés összege', - 'reconcile_this_account' => 'Számla egyeztetése', - 'reconcile' => 'Egyeztetés', - 'show' => 'Mutat', - 'confirm_reconciliation' => 'Számla megerősítése', - 'submitted_start_balance' => 'Beküldött kezdő egyenleg', - 'selected_transactions' => 'Kiválasztott tranzakciók (:count)', - 'already_cleared_transactions' => 'Már törölt tranzakciók (:count)', - 'submitted_end_balance' => 'Beküldött záró egyenleg', - 'initial_balance_description' => '":account" kezdeti egyenlege', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'ismeretlen', - 'interest_calc_daily' => 'Naponta', - 'interest_calc_monthly' => 'Havonta', - 'interest_calc_yearly' => 'Évente', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half year', - 'interest_calc_quarterly' => 'Per quarter', - 'initial_balance_account' => ':account kezdeti egyenlegfiókja', - 'list_options' => 'List options', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', + 'all_accounts_inactive' => 'Ezek az inaktív számlák.', + 'active_account_link' => 'Ez a hivatkozás visszavisz az aktív számlákhoz.', + 'account_missing_transaction' => ':id (":name") számla nem tekinthető meg közvetlenül, de a Fireflyból hiányzik az átirányítási információ.', + 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', + 'details_for_asset' => '":name" eszközszámla részletei', + 'details_for_expense' => '":name" költségszámla részletei', + 'details_for_revenue' => '":name" jövedelemszámla részletei', + 'details_for_cash' => '":name" készpénzszámla részletei', + 'store_new_asset_account' => 'Új eszközszámla tárolása', + 'store_new_expense_account' => 'Új költségszámla tárolása', + 'store_new_revenue_account' => 'Új jövedelemszámla létrehozása', + 'edit_asset_account' => '":name" eszközszámla szerkesztése', + 'edit_expense_account' => '":name" költségszámla szerkesztése', + 'edit_revenue_account' => '":name" jövedelemszámla szerkesztése', + 'delete_asset_account' => '":name" eszközszámla törlése', + 'delete_expense_account' => '":name" költségszámla törlése', + 'delete_revenue_account' => '":name" jövedelemszámla törlése', + 'delete_liabilities_account' => '":name" kötelezettség törlése', + 'asset_deleted' => '":name" eszközszámla sikeresen törölve', + 'account_deleted' => 'Successfully deleted account ":name"', + 'expense_deleted' => '":name" költségszámla sikeresen törölve', + 'revenue_deleted' => '":name" jövedelemszámla sikeresen törölve', + 'update_asset_account' => 'Eszközszámla frissítése', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => 'Kötelezettség frissítése', + 'update_expense_account' => 'Költségszámla frissítése', + 'update_revenue_account' => 'Jövedelemszámla frissítése', + 'make_new_asset_account' => 'Új eszközszámla létrehozása', + 'make_new_expense_account' => 'Új költségszámla létrehozása', + 'make_new_revenue_account' => 'Új jövedelemszámla létrehozása', + 'make_new_liabilities_account' => 'Új kötelezettség létrehozása', + 'asset_accounts' => 'Eszközszámlák', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Eszközszámlák (inaktív)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Költségszámlák', + 'expense_accounts_inactive' => 'Költségszámlák (inaktív)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Jövedelemszámlák', + 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', + 'cash_accounts' => 'Készpénzszámlák', + 'Cash account' => 'Készpénzszámla', + 'liabilities_accounts' => 'Kötelezettségek', + 'liabilities_accounts_inactive' => 'Liabilities (inactive)', + 'reconcile_account' => '":account" számla egyeztetése', + 'overview_of_reconcile_modal' => 'Egyeztetés áttekintése', + 'delete_reconciliation' => 'Egyeztetés törlése', + 'update_reconciliation' => 'Egyeztetés frissítése', + 'amount_cannot_be_zero' => 'Az összeg nem lehet nulla', + 'end_of_reconcile_period' => 'Egyeztetési időszak vége: :period', + 'start_of_reconcile_period' => 'Egyeztetési időszak kezdete: :period', + 'start_balance' => 'Kezdő egyenleg', + 'end_balance' => 'Záró egyenleg', + 'update_balance_dates_instruction' => 'Ha a fenti összegek és dátumok összevetése a bankszámlakivonattal megtörtént, az "Egyeztetés indítása" gombra kell kattintani', + 'select_transactions_instruction' => 'A bankszámlakivonaton szereplő tranzakciók kiválasztása.', + 'select_range_and_balance' => 'Először ellenőrizd a dátum időszakot és az egyenlegeket. Utána nyomd meg az "Egyeztetés indítása" gombot', + 'date_change_instruction' => 'Az időintervallum megváltoztatásával minden előrehaladás el fog veszni.', + 'update_selection' => 'Kiválasztás frissítése', + 'store_reconcile' => 'Egyeztetés letárolása', + 'reconciliation_transaction' => 'Tranzakció egyeztetése', + 'Reconciliation' => 'Egyeztetés', + 'reconciliation' => 'Egyeztetés', + 'reconcile_options' => 'Egyeztetés beállításai', + 'reconcile_range' => 'Egyeztetés időszaka', + 'start_reconcile' => 'Egyeztetés indítása', + 'cash_account_type' => 'Készpénz', + 'cash' => 'készpénz', + 'cant_find_redirect_account' => 'A Firefly III megpróbálkozott az átirányítással de az nem sikerült. Elnézést kérünk. Vissza a kezdőlapra.', + 'account_type' => 'Bankszámla típusa', + 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => '":name" új számla letárolva!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => '":name" számla frissítve', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Hitelkártya opciók', + 'no_transactions_account' => 'Nincsenek tranzakciók (ebben az időszakban) az eszközszámlához: ":name".', + 'no_transactions_period' => 'Nincsenek tranzakció ebben az időszakban.', + 'no_data_for_chart' => 'Nincs elegendő információ (még) a diagram létrehozásához.', + 'select_at_least_one_account' => 'Kérem, jelöljön ki legalább egy eszközszámlát', + 'select_at_least_one_category' => 'Legalább egy kategóriát ki kell választani', + 'select_at_least_one_budget' => 'Legalább egy költségkeretet ki kell választani', + 'select_at_least_one_tag' => 'Legalább egy címkét ki kell választani', + 'select_at_least_one_expense' => 'Legalább egy költség- jövedelemszámla kombinációt ki kell választani. Ha nincs egy sem (a lista üres), ez a jelenés nem érhető el.', + 'account_default_currency' => 'Ez az ehhez a számlához társított alapértelmezett pénznem.', + 'reconcile_has_more' => 'A Firefly III főkönyvben több pénz van mint amennyinek a bank szerint lennie kellene. Több lehetőség van. Ki kell választani mi történjen. Ezután az "Egyeztetés megerősítése" gombra kell kattintani.', + 'reconcile_has_less' => 'A Firefly III főkönyvben kevesebb pénz van mint amennyinek a bank szerint lennie kellene. Több lehetőség van. Ki kell választani mi történjen. Ezután az "Egyeztetés megerősítése" gombra kell kattintani.', + 'reconcile_is_equal' => 'A Firefly III főkönyv és a bankszámlakivonatok egyeznek. Nem kell semmit sem tenni. Az importálás megerősítéséhez az "Egyeztetés megerősítése" gombra kell kattintani.', + 'create_pos_reconcile_transaction' => 'A kiválasztott tranzakciók törlése és egy korrekció létrehozása :amount hozzáadásával ehhez az eszközszámlához.', + 'create_neg_reconcile_transaction' => 'A kiválasztott tranzakciók törlése, és egy korrekció létrehozása :amount eltávolításával az eszközszámláról.', + 'reconcile_do_nothing' => 'Kijelölt tranzakciók ürítése, javítás nélkül.', + 'reconcile_go_back' => 'Egy korrekció később bármikor szerkeszthető vagy törölhető.', + 'must_be_asset_account' => 'Csak eszközszámlákat lehet egyeztetni', + 'reconciliation_stored' => 'Egyeztetés letárolva', + 'reconciliation_error' => 'Hiba miatt a tranzakciók meg lettek jelölve egyeztetésre, de az egyeztetés nem lett eltárolva: :error.', + 'reconciliation_transaction_title' => 'Egyeztetés (:from - :to)', + 'sum_of_reconciliation' => 'Egyeztetés összege', + 'reconcile_this_account' => 'Számla egyeztetése', + 'reconcile' => 'Egyeztetés', + 'show' => 'Mutat', + 'confirm_reconciliation' => 'Számla megerősítése', + 'submitted_start_balance' => 'Beküldött kezdő egyenleg', + 'selected_transactions' => 'Kiválasztott tranzakciók (:count)', + 'already_cleared_transactions' => 'Már törölt tranzakciók (:count)', + 'submitted_end_balance' => 'Beküldött záró egyenleg', + 'initial_balance_description' => '":account" kezdeti egyenlege', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'ismeretlen', + 'interest_calc_daily' => 'Naponta', + 'interest_calc_monthly' => 'Havonta', + 'interest_calc_yearly' => 'Évente', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half year', + 'interest_calc_quarterly' => 'Per quarter', + 'initial_balance_account' => ':account kezdeti egyenlegfiókja', + 'list_options' => 'List options', // categories: - 'new_category' => 'Új kategória', - 'create_new_category' => 'Új kategória létrehozása', - 'without_category' => 'Kategória nélkül', - 'update_category' => 'Kategória frissítése', - 'updated_category' => '":name" kategória frissítve', - 'categories' => 'Kategóriák', - 'edit_category' => '":name" kategória szerkesztése', - 'no_category' => '(nincs kategória)', - 'unknown_category_plain' => 'No category', - 'category' => 'Kategória', - 'delete_category' => '":name" kategória törlése', - 'deleted_category' => '":name" kategória törlése', - 'store_category' => 'Új kategória tárolása', - 'stored_category' => 'Új kategória létrehozva ":name"', - 'without_category_between' => 'Kategória nélkül :start és :end között', + 'new_category' => 'Új kategória', + 'create_new_category' => 'Új kategória létrehozása', + 'without_category' => 'Kategória nélkül', + 'update_category' => 'Kategória frissítése', + 'updated_category' => '":name" kategória frissítve', + 'categories' => 'Kategóriák', + 'edit_category' => '":name" kategória szerkesztése', + 'no_category' => '(nincs kategória)', + 'unknown_category_plain' => 'No category', + 'category' => 'Kategória', + 'delete_category' => '":name" kategória törlése', + 'deleted_category' => '":name" kategória törlése', + 'store_category' => 'Új kategória tárolása', + 'stored_category' => 'Új kategória létrehozva ":name"', + 'without_category_between' => 'Kategória nélkül :start és :end között', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Költség frissítése', - 'update_deposit' => 'Bevétel szerkesztése', - 'update_transaction' => 'Tranzakció frissítése', - 'update_transfer' => 'Utalás szerkesztése', - 'updated_withdrawal' => 'Költség frissítve ":description"', - 'updated_deposit' => '":description" bevétel frissítve', - 'updated_transfer' => 'Átvezetés frissítve ":description"', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => 'Költség törölve ":description"', - 'delete_deposit' => '":description" bevétel törlése', - 'delete_transfer' => 'Átvezetés törlése ":description"', - 'deleted_withdrawal' => 'A költség sikeresen törölve ":description"', - 'deleted_deposit' => '":description" bevétel sikeresen törölve', - 'deleted_transfer' => '":description" átvezetés sikeresen törölve', - 'deleted_reconciliation' => '":description" egyeztető tranzakció sikeresen törölve', - 'stored_journal' => '":description" új tranzakció sikeresen létrehozva', - 'stored_journal_no_descr' => 'Új tranzakció sikeresen létrehozva', - 'updated_journal_no_descr' => 'Tranzakció sikeresen frissítve', - 'select_transactions' => 'Tranzakciók kiválasztása', - 'rule_group_select_transactions' => '":title" alkalmazása tranzakciókon', - 'rule_select_transactions' => '":title" alkalmazása tranzakciókon', - 'stop_selection' => 'Tranzakciók kiválasztásának leállítása', - 'reconcile_selected' => 'Egyeztetés', - 'mass_delete_journals' => 'Több tranzakció törlése', - 'mass_edit_journals' => 'Több tranzakció szerkesztése', - 'mass_bulk_journals' => 'Több tranzakció tömeges szerkesztése', - 'mass_bulk_journals_explain' => 'Az űrlap segítségévle egyszerre lehet több tranzakció tulajdonságát is módosítani. Az űrlapon szereplő minden egyes tranzakció frissítve lesz azokkal a tulajdonságokkal, amelyek a táblázatban megtalálhatóak.', - 'part_of_split' => 'Ez a tranzakció egy része egy felosztott tranzakciónak. Ha nincs a tranzakcióhoz tartozó összes rész kiválasztva, úgy csak a résztranzakció fog módosulni.', - 'bulk_set_new_values' => 'Új értékeket a lenti mezőkben lehet megadni. Üresen hagyva mindig üresek lesznek. Fontos tudni, hogy csak a költségekhez lesz költségkeret rendelve.', - 'no_bulk_category' => 'Ne frissítse a kategóriát', - 'no_bulk_budget' => 'Ne frissítse a költségkeretet', - 'no_bulk_tags' => 'Ne frissítse a cimké(ke)t', - 'replace_with_these_tags' => 'Címkék cseréje', - 'append_these_tags' => 'Címkék hozzáadása', - 'mass_edit' => 'Kijelöltek szerkesztése egyesével', - 'bulk_edit' => 'Kijelöltek tömeges szerkesztése', - 'mass_delete' => 'Kijelöltek törlése', - 'cannot_edit_other_fields' => 'Ezeken kívül nem lehet más mezőket tömegesen szerkeszteni, mert nincs elég hely a megjelenítésükhöz. Ha szerkeszteni kell ezeket a mezőket, a hivatkozás használatával lehet megtenni egyesével.', - 'cannot_change_amount_reconciled' => 'Egyeztetett tranzakciók összegét nem lehet módosítani.', - 'no_budget' => '(nincs költségkeret)', - 'no_bill' => '(no bill)', - 'account_per_budget' => 'Számla költségkeret szerint', - 'account_per_category' => 'Számal kategória szerint', - 'create_new_object' => 'Létrehozás', - 'empty' => '(üres)', - 'all_other_budgets' => '(minden más költségkeret)', - 'all_other_accounts' => '(minden más számla)', - 'expense_per_source_account' => 'Költségek forrásszámla szerint', - 'expense_per_destination_account' => 'Költségek célszámla szerint', - 'income_per_destination_account' => 'Bevétel célszámla szerint', - 'spent_in_specific_category' => '":category" kategóriában elköltve', - 'earned_in_specific_category' => '":category" kategóriában megkeresve', - 'spent_in_specific_tag' => '":tag" címkében elköltve', - 'earned_in_specific_tag' => '":tag" címkében megkeresve', - 'income_per_source_account' => 'Bevétel forrásszámla szerint', - 'average_spending_per_destination' => 'Átlagos költség célszámla szerint', - 'average_spending_per_source' => 'Átlagos költség forrásszámla alapján', - 'average_earning_per_source' => 'Átlagos bevétel forrásszámlánként', - 'average_earning_per_destination' => 'Átlagos bevétel célszámlánként', - 'account_per_tag' => 'Számla címke alapján', - 'tag_report_expenses_listed_once' => 'Bevételek és kiadások sosem kerülnek egyszerre kilistázásra. Ha a tranzakciónak több címkéje is van, akkor csak egyetlen címke alatt lesz megtalálható. A lista lehet, hogy nem tartalmaz minden egyes elemet, de a végösszeg helyes.', - 'double_report_expenses_charted_once' => 'Bevételek és kiadások sosem kerülnek egyszerre kilistázásra. Ha a tranzakciónak több címkéje is van, akkor csak egyetlen címke alatt lesz megtalálható. A lista lehet, hogy nem tartalmaz minden egyes elemet, de a végösszeg helyes.', - 'tag_report_chart_single_tag' => 'A táblázat egyetlen címkére értendő. Ha a tranzakciónak több címkéje is van, akkor más címkékhez tartozó táblázatokban is meg fog jelenni.', - 'tag' => 'Címke', - 'no_budget_squared' => '(nincs költségkeret)', - 'perm-delete-many' => 'Egyszerre több elem törlése zavaró lehet. Legyen elővigyázatos. Felosztott tranzakciók egyes elemei is törölhetőek erről a lapról.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(nincs számlatípus)', - 'opt_group_no_account_type' => '(nincs számlatípus)', - 'opt_group_defaultAsset' => 'Alapértelmezett eszközszámlák', - 'opt_group_savingAsset' => 'Megtakarítási számlák', - 'opt_group_sharedAsset' => 'Megosztott eszközszámlák', - 'opt_group_ccAsset' => 'Hitelkártyák', - 'opt_group_cashWalletAsset' => 'Készpénz', - 'opt_group_expense_account' => 'Költségszámlák', - 'opt_group_revenue_account' => 'Jövedelemszámlák', - 'opt_group_l_Loan' => 'Kötelezettség: hitel', - 'opt_group_cash_account' => 'Készpénzszámla', - 'opt_group_l_Debt' => 'Kötelezettség: adósság', - 'opt_group_l_Mortgage' => 'Kötelezettség: jelzálog', - 'opt_group_l_Credit card' => 'Kötelezettség: hitelkártya', - 'notes' => 'Megjegyzések', - 'unknown_journal_error' => 'Nem lehet letárolni a tranzakciót. Ellenőrizni kell a naplófájlokat.', - 'attachment_not_found' => 'Ez a melléklet nem található.', - 'journal_link_bill' => 'Ez a tranzakció :name számlához van csatolva. A kapcsolat eltávolításához ki kell venni a jelölést a jelölőnégyzetből. Szabályok használatával másik számlához lehet csatolni.', - 'transaction_stored_link' => 'Transaction #{ID} ("{title}") mentve.', - 'transaction_new_stored_link' => 'Transaction #{ID} mentve.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Kérlek várj az űrlap betöltéséig', + 'wait_loading_data' => 'Kérlek várj amíg betöltjük az adatokat...', + 'wait_attachments' => 'Kérlek várj a mellékletek feltöltésére.', + 'errors_upload' => 'A feltöltés sikertelen. A hibáért kérlek, ellenőrizd a böngésző konzolt.', + 'amount_foreign_if' => 'Összeg devizában, ha van ilyen', + 'amount_destination_account' => 'Összeg a célszámla pénznemében', + 'edit_transaction_title' => 'Tranzakció módosítása ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Költség frissítése', + 'update_deposit' => 'Bevétel szerkesztése', + 'update_transaction' => 'Tranzakció frissítése', + 'update_transfer' => 'Utalás szerkesztése', + 'updated_withdrawal' => 'Költség frissítve ":description"', + 'updated_deposit' => '":description" bevétel frissítve', + 'updated_transfer' => 'Átvezetés frissítve ":description"', + 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', + 'no_changes_deposit' => 'Deposit ":description" was not changed.', + 'no_changes_transfer' => 'Transfer ":description" was not changed.', + 'delete_withdrawal' => 'Költség törölve ":description"', + 'delete_deposit' => '":description" bevétel törlése', + 'delete_transfer' => 'Átvezetés törlése ":description"', + 'deleted_withdrawal' => 'A költség sikeresen törölve ":description"', + 'deleted_deposit' => '":description" bevétel sikeresen törölve', + 'deleted_transfer' => '":description" átvezetés sikeresen törölve', + 'deleted_reconciliation' => '":description" egyeztető tranzakció sikeresen törölve', + 'stored_journal' => '":description" új tranzakció sikeresen létrehozva', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Új tranzakció sikeresen létrehozva', + 'updated_journal_no_descr' => 'Tranzakció sikeresen frissítve', + 'select_transactions' => 'Tranzakciók kiválasztása', + 'rule_group_select_transactions' => '":title" alkalmazása tranzakciókon', + 'rule_select_transactions' => '":title" alkalmazása tranzakciókon', + 'stop_selection' => 'Tranzakciók kiválasztásának leállítása', + 'reconcile_selected' => 'Egyeztetés', + 'mass_delete_journals' => 'Több tranzakció törlése', + 'mass_edit_journals' => 'Több tranzakció szerkesztése', + 'mass_bulk_journals' => 'Több tranzakció tömeges szerkesztése', + 'mass_bulk_journals_explain' => 'Az űrlap segítségévle egyszerre lehet több tranzakció tulajdonságát is módosítani. Az űrlapon szereplő minden egyes tranzakció frissítve lesz azokkal a tulajdonságokkal, amelyek a táblázatban megtalálhatóak.', + 'part_of_split' => 'Ez a tranzakció egy része egy felosztott tranzakciónak. Ha nincs a tranzakcióhoz tartozó összes rész kiválasztva, úgy csak a résztranzakció fog módosulni.', + 'bulk_set_new_values' => 'Új értékeket a lenti mezőkben lehet megadni. Üresen hagyva mindig üresek lesznek. Fontos tudni, hogy csak a költségekhez lesz költségkeret rendelve.', + 'no_bulk_category' => 'Ne frissítse a kategóriát', + 'no_bulk_budget' => 'Ne frissítse a költségkeretet', + 'no_bulk_tags' => 'Ne frissítse a cimké(ke)t', + 'replace_with_these_tags' => 'Címkék cseréje', + 'append_these_tags' => 'Címkék hozzáadása', + 'mass_edit' => 'Kijelöltek szerkesztése egyesével', + 'bulk_edit' => 'Kijelöltek tömeges szerkesztése', + 'mass_delete' => 'Kijelöltek törlése', + 'cannot_edit_other_fields' => 'Ezeken kívül nem lehet más mezőket tömegesen szerkeszteni, mert nincs elég hely a megjelenítésükhöz. Ha szerkeszteni kell ezeket a mezőket, a hivatkozás használatával lehet megtenni egyesével.', + 'cannot_change_amount_reconciled' => 'Egyeztetett tranzakciók összegét nem lehet módosítani.', + 'no_budget' => '(nincs költségkeret)', + 'no_bill' => '(no bill)', + 'account_per_budget' => 'Számla költségkeret szerint', + 'account_per_category' => 'Számal kategória szerint', + 'create_new_object' => 'Létrehozás', + 'empty' => '(üres)', + 'all_other_budgets' => '(minden más költségkeret)', + 'all_other_accounts' => '(minden más számla)', + 'expense_per_source_account' => 'Költségek forrásszámla szerint', + 'expense_per_destination_account' => 'Költségek célszámla szerint', + 'income_per_destination_account' => 'Bevétel célszámla szerint', + 'spent_in_specific_category' => '":category" kategóriában elköltve', + 'earned_in_specific_category' => '":category" kategóriában megkeresve', + 'spent_in_specific_tag' => '":tag" címkében elköltve', + 'earned_in_specific_tag' => '":tag" címkében megkeresve', + 'income_per_source_account' => 'Bevétel forrásszámla szerint', + 'average_spending_per_destination' => 'Átlagos költség célszámla szerint', + 'average_spending_per_source' => 'Átlagos költség forrásszámla alapján', + 'average_earning_per_source' => 'Átlagos bevétel forrásszámlánként', + 'average_earning_per_destination' => 'Átlagos bevétel célszámlánként', + 'account_per_tag' => 'Számla címke alapján', + 'tag_report_expenses_listed_once' => 'Bevételek és kiadások sosem kerülnek egyszerre kilistázásra. Ha a tranzakciónak több címkéje is van, akkor csak egyetlen címke alatt lesz megtalálható. A lista lehet, hogy nem tartalmaz minden egyes elemet, de a végösszeg helyes.', + 'double_report_expenses_charted_once' => 'Bevételek és kiadások sosem kerülnek egyszerre kilistázásra. Ha a tranzakciónak több címkéje is van, akkor csak egyetlen címke alatt lesz megtalálható. A lista lehet, hogy nem tartalmaz minden egyes elemet, de a végösszeg helyes.', + 'tag_report_chart_single_tag' => 'A táblázat egyetlen címkére értendő. Ha a tranzakciónak több címkéje is van, akkor más címkékhez tartozó táblázatokban is meg fog jelenni.', + 'tag' => 'Címke', + 'no_budget_squared' => '(nincs költségkeret)', + 'perm-delete-many' => 'Egyszerre több elem törlése zavaró lehet. Legyen elővigyázatos. Felosztott tranzakciók egyes elemei is törölhetőek erről a lapról.', + 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', + 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', + 'opt_group_' => '(nincs számlatípus)', + 'opt_group_no_account_type' => '(nincs számlatípus)', + 'opt_group_defaultAsset' => 'Alapértelmezett eszközszámlák', + 'opt_group_savingAsset' => 'Megtakarítási számlák', + 'opt_group_sharedAsset' => 'Megosztott eszközszámlák', + 'opt_group_ccAsset' => 'Hitelkártyák', + 'opt_group_cashWalletAsset' => 'Készpénz', + 'opt_group_expense_account' => 'Költségszámlák', + 'opt_group_revenue_account' => 'Jövedelemszámlák', + 'opt_group_l_Loan' => 'Kötelezettség: hitel', + 'opt_group_cash_account' => 'Készpénzszámla', + 'opt_group_l_Debt' => 'Kötelezettség: adósság', + 'opt_group_l_Mortgage' => 'Kötelezettség: jelzálog', + 'opt_group_l_Credit card' => 'Kötelezettség: hitelkártya', + 'notes' => 'Megjegyzések', + 'unknown_journal_error' => 'Nem lehet letárolni a tranzakciót. Ellenőrizni kell a naplófájlokat.', + 'attachment_not_found' => 'Ez a melléklet nem található.', + 'journal_link_bill' => 'Ez a tranzakció :name számlához van csatolva. A kapcsolat eltávolításához ki kell venni a jelölést a jelölőnégyzetből. Szabályok használatával másik számlához lehet csatolni.', + 'transaction_stored_link' => 'Transaction #{ID} ("{title}") mentve.', + 'transaction_new_stored_link' => 'Transaction #{ID} mentve.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => 'Üdvözöli a Firefly III!', - 'submit' => 'Beküldés', - 'submission' => 'Feliratkozás', - 'submit_yes_really' => 'Beküldés (tudom mit csinálok)', - 'getting_started' => 'Első lépések', - 'to_get_started' => 'Gratulálunk a Firefly III sikeres telepítéséhez. A használat megkezdéséhez meg kell adni a bank nevét és a főszámla egyenlegét. Semmi probléma ha több bankszámlát is kezelni kell, ezeket később hozzá lehet adni. Most csak a Firefly III használatának elkezdéséhez szükséges néhány adatot kell megadni.', - 'savings_balance_text' => 'A Firefly III automatikusan létrehoz egy megtakarítási számlát. Alapértelmezés szerint pénz nem lesz a megtakarítási számlán, de megadható a Firefly III-nak egy mérleg, ami el lesz tárolva.', - 'finish_up_new_user' => 'Kész is! A továbblépéshez a Beküldés gombra kell kattintani. A gombra kattintás után megnyílik a Firefly III kezdőlapja.', - 'stored_new_accounts_new_user' => 'Hurrá! Az új bankszámlák tárolva lettek.', - 'set_preferred_language' => 'Ha más nyelven szeretnéd használni a Firefly III-at, kérjük jelezd itt.', - 'language' => 'Nyelv', - 'new_savings_account' => ':bank_name megtakarítási számla', - 'cash_wallet' => 'Készpénz', - 'currency_not_present' => 'Ne aggódj ha az általad normál esetben használt pénznem nincs a listában. Létrehozhatod a saját pénznemedet a Beállítások -> Pénznemek alatt.', + 'welcome' => 'Üdvözöli a Firefly III!', + 'submit' => 'Beküldés', + 'submission' => 'Feliratkozás', + 'submit_yes_really' => 'Beküldés (tudom mit csinálok)', + 'getting_started' => 'Első lépések', + 'to_get_started' => 'Gratulálunk a Firefly III sikeres telepítéséhez. A használat megkezdéséhez meg kell adni a bank nevét és a főszámla egyenlegét. Semmi probléma ha több bankszámlát is kezelni kell, ezeket később hozzá lehet adni. Most csak a Firefly III használatának elkezdéséhez szükséges néhány adatot kell megadni.', + 'savings_balance_text' => 'A Firefly III automatikusan létrehoz egy megtakarítási számlát. Alapértelmezés szerint pénz nem lesz a megtakarítási számlán, de megadható a Firefly III-nak egy mérleg, ami el lesz tárolva.', + 'finish_up_new_user' => 'Kész is! A továbblépéshez a Beküldés gombra kell kattintani. A gombra kattintás után megnyílik a Firefly III kezdőlapja.', + 'stored_new_accounts_new_user' => 'Hurrá! Az új bankszámlák tárolva lettek.', + 'set_preferred_language' => 'Ha más nyelven szeretnéd használni a Firefly III-at, kérjük jelezd itt.', + 'language' => 'Nyelv', + 'new_savings_account' => ':bank_name megtakarítási számla', + 'cash_wallet' => 'Készpénz', + 'currency_not_present' => 'Ne aggódj ha az általad normál esetben használt pénznem nincs a listában. Létrehozhatod a saját pénznemedet a Beállítások -> Pénznemek alatt.', // home page: - 'transaction_table_description' => 'Tranzakciókat tartalmazó táblázat', - 'opposing_account' => 'Ellenoldali számla', - 'yourAccounts' => 'Bankszámlák', - 'your_accounts' => 'Számla áttekintése', - 'category_overview' => 'Kategória áttekintés', - 'expense_overview' => 'Költségszámla áttekintése', - 'revenue_overview' => 'Jövedelemszámla áttekintése', - 'budgetsAndSpending' => 'Költségkeretek és kiadások', - 'budgets_and_spending' => 'Költségkeretek és kiadások', - 'go_to_budget' => 'Ugrás költségkerethez "{budget}"', - 'go_to_deposits' => 'Ugrás a bevételekre', - 'go_to_expenses' => 'Ugrás a kiadásokra', - 'savings' => 'Magtakarítások', - 'newWithdrawal' => 'Új költség', - 'newDeposit' => 'Új bevétel', - 'newTransfer' => 'Új átvezetés', - 'bills_to_pay' => 'Fizetendő számlák', - 'per_day' => 'Naponta', - 'left_to_spend_per_day' => 'Naponta elkölthető', - 'bills_paid' => 'Befizetett számlák', - 'custom_period' => 'Custom period', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Select a period', + 'transaction_table_description' => 'Tranzakciókat tartalmazó táblázat', + 'opposing_account' => 'Ellenoldali számla', + 'yourAccounts' => 'Bankszámlák', + 'your_accounts' => 'Számla áttekintése', + 'category_overview' => 'Kategória áttekintés', + 'expense_overview' => 'Költségszámla áttekintése', + 'revenue_overview' => 'Jövedelemszámla áttekintése', + 'budgetsAndSpending' => 'Költségkeretek és kiadások', + 'budgets_and_spending' => 'Költségkeretek és kiadások', + 'go_to_budget' => 'Ugrás költségkerethez "{budget}"', + 'go_to_deposits' => 'Ugrás a bevételekre', + 'go_to_expenses' => 'Ugrás a kiadásokra', + 'savings' => 'Magtakarítások', + 'newWithdrawal' => 'Új költség', + 'newDeposit' => 'Új bevétel', + 'newTransfer' => 'Új átvezetés', + 'bills_to_pay' => 'Fizetendő számlák', + 'per_day' => 'Naponta', + 'left_to_spend_per_day' => 'Naponta elkölthető', + 'bills_paid' => 'Befizetett számlák', + 'custom_period' => 'Custom period', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Select a period', // menu and titles, should be recycled as often as possible: - 'currency' => 'Pénznem', - 'preferences' => 'Beállítások', - 'logout' => 'Kijelentkezés', - 'logout_other_sessions' => 'Minden más munkamenet kijelentkeztetése', - 'toggleNavigation' => 'Navigációs mód átkapcsolása', - 'searchPlaceholder' => 'Keresés...', - 'version' => 'Verzió', - 'dashboard' => 'Műszerfal', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Rendelkezésre álló költségkeret ({currency})', - 'currencies' => 'Pénznemek', - 'activity' => 'Tevékenység', - 'usage' => 'Használat', - 'accounts' => 'Számlák', - 'Asset account' => 'Eszközszámla', - 'Default account' => 'Eszközszámla', - 'Expense account' => 'Költségszámla', - 'Revenue account' => 'Jövedelemszámla', - 'Initial balance account' => 'Számla kezdeti egyenlege', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Adósság', - 'account_type_Loan' => 'Hitel', - 'account_type_Mortgage' => 'Jelzálog', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Hitelkártya', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Költségkeretek', - 'tags' => 'Címkék', - 'reports' => 'Jelentések', - 'transactions' => 'Tranzakciók', - 'expenses' => 'Költségek', - 'income' => 'Jövedelem / bevétel', - 'transfers' => 'Átvezetések', - 'moneyManagement' => 'Pénzkezelés', - 'money_management' => 'Pénzkezelés', - 'tools' => 'Eszközök', - 'piggyBanks' => 'Malacperselyek', - 'piggy_banks' => 'Malacperselyek', - 'amount_x_of_y' => '{current} / {total}', - 'bills' => 'Számlák', - 'withdrawal' => 'Költség', - 'opening_balance' => 'Nyitó egyenleg', - 'deposit' => 'Bevétel', - 'account' => 'Bankszámla', - 'transfer' => 'Átvezetés', - 'Withdrawal' => 'Költség', - 'Deposit' => 'Bevétel', - 'Transfer' => 'Átvezetés', - 'bill' => 'Számla', - 'yes' => 'Igen', - 'no' => 'Nem', - 'amount' => 'Összeg', - 'overview' => 'Áttekintés', - 'saveOnAccount' => 'Megtakarítás a számlán:', - 'unknown' => 'Ismeretlen', - 'monthly' => 'Havi', - 'profile' => 'Profil', - 'errors' => 'Hibák', - 'debt_start_date' => 'Adósság kezdete', - 'debt_start_amount' => 'Adósság kezdeti összege', - 'debt_start_amount_help' => 'A legjobb ezt az összeget negatívra állítani. Olvassa el a súgót (a kérdőjel-ikon a jobb felső sarokban) további információkért.', - 'interest_period_help' => 'Ez kizárólag kozmetikázásra használt mező, nem fog a számláláshoz hozzáadódni. Mint kiderült, a bankok néha sunyik és a Firefly III tévedhet.', - 'store_new_liabilities_account' => 'Új kötelezettség eltárolása', - 'edit_liabilities_account' => '":name" kötelezettség szerkesztése', - 'financial_control' => 'Pénzügyi felügyelet', - 'accounting' => 'Számlázás', - 'automation' => 'Automatizálás', - 'others' => 'Egyebek', - 'classification' => 'Besorolás', - 'store_transaction' => 'Store transaction', + 'currency' => 'Pénznem', + 'preferences' => 'Beállítások', + 'logout' => 'Kijelentkezés', + 'logout_other_sessions' => 'Minden más munkamenet kijelentkeztetése', + 'toggleNavigation' => 'Navigációs mód átkapcsolása', + 'searchPlaceholder' => 'Keresés...', + 'version' => 'Verzió', + 'dashboard' => 'Műszerfal', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Rendelkezésre álló költségkeret ({currency})', + 'currencies' => 'Pénznemek', + 'activity' => 'Tevékenység', + 'usage' => 'Használat', + 'accounts' => 'Számlák', + 'Asset account' => 'Eszközszámla', + 'Default account' => 'Eszközszámla', + 'Expense account' => 'Költségszámla', + 'Revenue account' => 'Jövedelemszámla', + 'Initial balance account' => 'Számla kezdeti egyenlege', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Adósság', + 'account_type_Loan' => 'Hitel', + 'account_type_Mortgage' => 'Jelzálog', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Hitelkártya', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'I am owed this debt', + 'liability_direction_debit' => 'I owe this debt to somebody else', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Költségkeretek', + 'tags' => 'Címkék', + 'reports' => 'Jelentések', + 'transactions' => 'Tranzakciók', + 'expenses' => 'Költségek', + 'income' => 'Jövedelem / bevétel', + 'transfers' => 'Átvezetések', + 'moneyManagement' => 'Pénzkezelés', + 'money_management' => 'Pénzkezelés', + 'tools' => 'Eszközök', + 'piggyBanks' => 'Malacperselyek', + 'piggy_banks' => 'Malacperselyek', + 'amount_x_of_y' => '{current} / {total}', + 'bills' => 'Számlák', + 'withdrawal' => 'Költség', + 'opening_balance' => 'Nyitó egyenleg', + 'deposit' => 'Bevétel', + 'account' => 'Bankszámla', + 'transfer' => 'Átvezetés', + 'Withdrawal' => 'Költség', + 'Deposit' => 'Bevétel', + 'Transfer' => 'Átvezetés', + 'bill' => 'Számla', + 'yes' => 'Igen', + 'no' => 'Nem', + 'amount' => 'Összeg', + 'overview' => 'Áttekintés', + 'saveOnAccount' => 'Megtakarítás a számlán:', + 'unknown' => 'Ismeretlen', + 'monthly' => 'Havi', + 'profile' => 'Profil', + 'errors' => 'Hibák', + 'debt_start_date' => 'Adósság kezdete', + 'debt_start_amount' => 'Adósság kezdeti összege', + 'debt_start_amount_help' => 'A legjobb ezt az összeget negatívra állítani. Olvassa el a súgót (a kérdőjel-ikon a jobb felső sarokban) további információkért.', + 'interest_period_help' => 'Ez kizárólag kozmetikázásra használt mező, nem fog a számláláshoz hozzáadódni. Mint kiderült, a bankok néha sunyik és a Firefly III tévedhet.', + 'store_new_liabilities_account' => 'Új kötelezettség eltárolása', + 'edit_liabilities_account' => '":name" kötelezettség szerkesztése', + 'financial_control' => 'Pénzügyi felügyelet', + 'accounting' => 'Számlázás', + 'automation' => 'Automatizálás', + 'others' => 'Egyebek', + 'classification' => 'Besorolás', + 'store_transaction' => 'Store transaction', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Alapértelmezett pénzügyi jelentés :start és :end között', - 'report_audit' => 'Tranzakciótörténet áttekintése :start és :end között', - 'report_category' => 'Kategória jelentés :start és :end között', - 'report_double' => 'Költség- jövedelemszámla jelentés :start és :end között', - 'report_budget' => 'Költségkeret jelentés :start és :end között', - 'report_tag' => 'Címke jelentés :start és :end között', - 'quick_link_reports' => 'Gyorshivatkozások', - 'quick_link_examples' => 'Itt csak az indulást segítő néhány példa hivatkozás található. A súgó oldalakon, a (?) ikon alatt, további információ található a jelentésekről és a használható mágikus szavakról.', - 'quick_link_default_report' => 'Alapértelmezett pénzügyi jelentés', - 'quick_link_audit_report' => 'Tranzakciótörténeti áttekintés', - 'report_this_month_quick' => 'Aktuális hónap, minden bankszámla', - 'report_last_month_quick' => 'Utolsó hónap, minden számla', - 'report_this_year_quick' => 'Folyó év, minden bankszámla', - 'report_this_fiscal_year_quick' => 'Jelenlegi pénzügyi év, minden bankszámla', - 'report_all_time_quick' => 'Mindig, minden számla', - 'reports_can_bookmark' => 'A jelentéseket meg lehet jelölni könyvjelzővel.', - 'incomeVsExpenses' => 'Bevételek - Költségek', - 'accountBalances' => 'Számla egyenlegek', - 'balanceStart' => 'Egyenleg az időszak kezdetén', - 'balanceEnd' => 'Egyenleg az időszak végén', - 'splitByAccount' => 'Bankszámlákra osztva', - 'coveredWithTags' => 'Címkékkel fedezve', - 'leftInBudget' => 'Költségkeretből maradt', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Összegek összege', - 'noCategory' => '(nincs kategória)', - 'notCharged' => 'Nem változott (még)', - 'inactive' => 'Inaktív', - 'active' => 'Aktív', - 'difference' => 'Különbség', - 'money_flowing_in' => 'Be', - 'money_flowing_out' => 'Ki', - 'topX' => 'top :number', - 'show_full_list' => 'Teljes lista megjelenítése', - 'show_only_top' => 'Csak a top mutatása: :number', - 'report_type' => 'Jelentés típusa', - 'report_type_default' => 'Alapértelmezett pénzügyi jelentés', - 'report_type_audit' => 'Tranzakciótörténeti áttekintés (auditálás)', - 'report_type_category' => 'Kategória jelentés', - 'report_type_budget' => 'Költségkeret jelentés', - 'report_type_tag' => 'Címke jelentés', - 'report_type_double' => 'Költség- jövedelemszámla jelentés', - 'more_info_help' => 'Ezekkel a jelentéstípusokkal kapcsolatban további információ található a súgóoldalakon. A súgó a jobb felső sarokban található (?) ikonra kattintva érhető el.', - 'report_included_accounts' => 'Befoglalt számlák', - 'report_date_range' => 'Dátum intervallum', - 'report_preset_ranges' => 'Előre beállított intervallumok', - 'shared' => 'Megosztott', - 'fiscal_year' => 'Pénzügyi év', - 'income_entry' => '":name" bevételei :start és :end között', - 'expense_entry' => '":name" számla kiadásai :start és :end között', - 'category_entry' => '":name" kategória kiadásai és bevételei :start és :end között', - 'budget_spent_amount' => '":budget" költségkeret kiadásai :start és :end között', - 'balance_amount' => '":budget" költségkeret ":account" számláról fizetett kiadásai :start és :end között', - 'no_audit_activity' => ':account_name számlán nem volt aktivitás :start és :end között.', - 'audit_end_balance' => ':account_name számlaegyenlege :end végén :balance volt', - 'reports_extra_options' => 'További beállítások', - 'report_has_no_extra_options' => 'Ennek a jelentésnek nincsenek további beállításai', - 'reports_submit' => 'Jelentés megtekintése', - 'end_after_start_date' => 'A jelentés végdátumának a kezdődátum után kell lennie.', - 'select_category' => 'Kategóriák kiválasztása', - 'select_budget' => 'Költségkeretek kiválasztása.', - 'select_tag' => 'Címkék kiválasztása.', - 'income_per_category' => 'Bevétel kategória szerint', - 'expense_per_category' => 'Költség kategória szerint', - 'expense_per_budget' => 'Költség költségkeret szerint', - 'income_per_account' => 'Bevétel bankszámla szerint', - 'expense_per_account' => 'Költség bankszámlák szerint', - 'expense_per_tag' => 'Költség címke szerint', - 'income_per_tag' => 'Bevétel címke szerint', - 'include_expense_not_in_budget' => 'A kiválasztott költségkeretekben nem szereplő költségeket is beleértve', - 'include_expense_not_in_account' => 'A kiválasztott számlákban nem szereplő költségeket is beleértve', - 'include_expense_not_in_category' => 'A kiválasztott kategóriákban nem szereplő költségeket is beleértve', - 'include_income_not_in_category' => 'A kiválasztott kategóriákban nem szereplő bevételeket is beleértve', - 'include_income_not_in_account' => 'A kiválasztott számlákban nem szereplő bevételeket is beleértve', - 'include_income_not_in_tags' => 'A kiválasztott címkékben nem szereplő bevételeket is beleértve', - 'include_expense_not_in_tags' => 'A kiválasztott címkékben nem szereplő költségeket is beleértve', - 'everything_else' => 'Minden más', - 'income_and_expenses' => 'Bevételek és költségek', - 'spent_average' => 'Költés (átlag)', - 'income_average' => 'Bevétel (átlag)', - 'transaction_count' => 'Tranzakciók száma', - 'average_spending_per_account' => 'Átlagos kiadások bankszámlák szerint', - 'average_income_per_account' => 'Átlagos bevétel címke szerint', - 'total' => 'Össszesen', - 'description' => 'Leírás', - 'sum_of_period' => 'Időszak összege', - 'average_in_period' => 'Átlag az időszakban', - 'account_role_defaultAsset' => 'Alapértelmezett eszközszámla', - 'account_role_sharedAsset' => 'Megosztott eszközszámla', - 'account_role_savingAsset' => 'Megtakarítási számla', - 'account_role_ccAsset' => 'Hitelkártya', - 'account_role_cashWalletAsset' => 'Készpénz', - 'budget_chart_click' => 'A diagram megjelenítéséhez egy költségkeret nevére kell kattintani a fenti táblázatban.', - 'category_chart_click' => 'A diagram megjelenítéséhez egy kategória nevére kell kattintani a fenti táblázatban.', - 'in_out_accounts' => 'Megkeresett és költött kombinációként', - 'in_out_accounts_per_asset' => 'Bevételek és kiadások (számlánként)', - 'in_out_per_category' => 'Megkeresett és költött kategóriaként', - 'out_per_budget' => 'Kiadás költségkeret szerint', - 'select_expense_revenue' => 'Költség- jövedelemszámla kiválasztása', - 'multi_currency_report_sum' => 'Mivel a lista több eltérő pénznemet használó számlát tartalmaz, az összegeknek nem lesz értelme. A jelentés mindig az alapértelmezés szerinti pénznemet fogja használni.', - 'sum_in_default_currency' => 'Az összeg mindig az alapértelmezett pénznemben lesz.', - 'net_filtered_prefs' => 'Ezen a diagramon sose fognak szerepelni azok a számlák melyeknél a "Befoglalva a nettó értékbe" beállítás nincs bekapcsolva.', + 'report_default' => 'Alapértelmezett pénzügyi jelentés :start és :end között', + 'report_audit' => 'Tranzakciótörténet áttekintése :start és :end között', + 'report_category' => 'Kategória jelentés :start és :end között', + 'report_double' => 'Költség- jövedelemszámla jelentés :start és :end között', + 'report_budget' => 'Költségkeret jelentés :start és :end között', + 'report_tag' => 'Címke jelentés :start és :end között', + 'quick_link_reports' => 'Gyorshivatkozások', + 'quick_link_examples' => 'Itt csak az indulást segítő néhány példa hivatkozás található. A súgó oldalakon, a (?) ikon alatt, további információ található a jelentésekről és a használható mágikus szavakról.', + 'quick_link_default_report' => 'Alapértelmezett pénzügyi jelentés', + 'quick_link_audit_report' => 'Tranzakciótörténeti áttekintés', + 'report_this_month_quick' => 'Aktuális hónap, minden bankszámla', + 'report_last_month_quick' => 'Utolsó hónap, minden számla', + 'report_this_year_quick' => 'Folyó év, minden bankszámla', + 'report_this_fiscal_year_quick' => 'Jelenlegi pénzügyi év, minden bankszámla', + 'report_all_time_quick' => 'Mindig, minden számla', + 'reports_can_bookmark' => 'A jelentéseket meg lehet jelölni könyvjelzővel.', + 'incomeVsExpenses' => 'Bevételek - Költségek', + 'accountBalances' => 'Számla egyenlegek', + 'balanceStart' => 'Egyenleg az időszak kezdetén', + 'balanceEnd' => 'Egyenleg az időszak végén', + 'splitByAccount' => 'Bankszámlákra osztva', + 'coveredWithTags' => 'Címkékkel fedezve', + 'leftInBudget' => 'Költségkeretből maradt', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Összegek összege', + 'noCategory' => '(nincs kategória)', + 'notCharged' => 'Nem változott (még)', + 'inactive' => 'Inaktív', + 'active' => 'Aktív', + 'difference' => 'Különbség', + 'money_flowing_in' => 'Be', + 'money_flowing_out' => 'Ki', + 'topX' => 'top :number', + 'show_full_list' => 'Teljes lista megjelenítése', + 'show_only_top' => 'Csak a top mutatása: :number', + 'report_type' => 'Jelentés típusa', + 'report_type_default' => 'Alapértelmezett pénzügyi jelentés', + 'report_type_audit' => 'Tranzakciótörténeti áttekintés (auditálás)', + 'report_type_category' => 'Kategória jelentés', + 'report_type_budget' => 'Költségkeret jelentés', + 'report_type_tag' => 'Címke jelentés', + 'report_type_double' => 'Költség- jövedelemszámla jelentés', + 'more_info_help' => 'Ezekkel a jelentéstípusokkal kapcsolatban további információ található a súgóoldalakon. A súgó a jobb felső sarokban található (?) ikonra kattintva érhető el.', + 'report_included_accounts' => 'Befoglalt számlák', + 'report_date_range' => 'Dátum intervallum', + 'report_preset_ranges' => 'Előre beállított intervallumok', + 'shared' => 'Megosztott', + 'fiscal_year' => 'Pénzügyi év', + 'income_entry' => '":name" bevételei :start és :end között', + 'expense_entry' => '":name" számla kiadásai :start és :end között', + 'category_entry' => '":name" kategória kiadásai és bevételei :start és :end között', + 'budget_spent_amount' => '":budget" költségkeret kiadásai :start és :end között', + 'balance_amount' => '":budget" költségkeret ":account" számláról fizetett kiadásai :start és :end között', + 'no_audit_activity' => ':account_name számlán nem volt aktivitás :start és :end között.', + 'audit_end_balance' => ':account_name számlaegyenlege :end végén :balance volt', + 'reports_extra_options' => 'További beállítások', + 'report_has_no_extra_options' => 'Ennek a jelentésnek nincsenek további beállításai', + 'reports_submit' => 'Jelentés megtekintése', + 'end_after_start_date' => 'A jelentés végdátumának a kezdődátum után kell lennie.', + 'select_category' => 'Kategóriák kiválasztása', + 'select_budget' => 'Költségkeretek kiválasztása.', + 'select_tag' => 'Címkék kiválasztása.', + 'income_per_category' => 'Bevétel kategória szerint', + 'expense_per_category' => 'Költség kategória szerint', + 'expense_per_budget' => 'Költség költségkeret szerint', + 'income_per_account' => 'Bevétel bankszámla szerint', + 'expense_per_account' => 'Költség bankszámlák szerint', + 'expense_per_tag' => 'Költség címke szerint', + 'income_per_tag' => 'Bevétel címke szerint', + 'include_expense_not_in_budget' => 'A kiválasztott költségkeretekben nem szereplő költségeket is beleértve', + 'include_expense_not_in_account' => 'A kiválasztott számlákban nem szereplő költségeket is beleértve', + 'include_expense_not_in_category' => 'A kiválasztott kategóriákban nem szereplő költségeket is beleértve', + 'include_income_not_in_category' => 'A kiválasztott kategóriákban nem szereplő bevételeket is beleértve', + 'include_income_not_in_account' => 'A kiválasztott számlákban nem szereplő bevételeket is beleértve', + 'include_income_not_in_tags' => 'A kiválasztott címkékben nem szereplő bevételeket is beleértve', + 'include_expense_not_in_tags' => 'A kiválasztott címkékben nem szereplő költségeket is beleértve', + 'everything_else' => 'Minden más', + 'income_and_expenses' => 'Bevételek és költségek', + 'spent_average' => 'Költés (átlag)', + 'income_average' => 'Bevétel (átlag)', + 'transaction_count' => 'Tranzakciók száma', + 'average_spending_per_account' => 'Átlagos kiadások bankszámlák szerint', + 'average_income_per_account' => 'Átlagos bevétel címke szerint', + 'total' => 'Össszesen', + 'description' => 'Leírás', + 'sum_of_period' => 'Időszak összege', + 'average_in_period' => 'Átlag az időszakban', + 'account_role_defaultAsset' => 'Alapértelmezett eszközszámla', + 'account_role_sharedAsset' => 'Megosztott eszközszámla', + 'account_role_savingAsset' => 'Megtakarítási számla', + 'account_role_ccAsset' => 'Hitelkártya', + 'account_role_cashWalletAsset' => 'Készpénz', + 'budget_chart_click' => 'A diagram megjelenítéséhez egy költségkeret nevére kell kattintani a fenti táblázatban.', + 'category_chart_click' => 'A diagram megjelenítéséhez egy kategória nevére kell kattintani a fenti táblázatban.', + 'in_out_accounts' => 'Megkeresett és költött kombinációként', + 'in_out_accounts_per_asset' => 'Bevételek és kiadások (számlánként)', + 'in_out_per_category' => 'Megkeresett és költött kategóriaként', + 'out_per_budget' => 'Kiadás költségkeret szerint', + 'select_expense_revenue' => 'Költség- jövedelemszámla kiválasztása', + 'multi_currency_report_sum' => 'Mivel a lista több eltérő pénznemet használó számlát tartalmaz, az összegeknek nem lesz értelme. A jelentés mindig az alapértelmezés szerinti pénznemet fogja használni.', + 'sum_in_default_currency' => 'Az összeg mindig az alapértelmezett pénznemben lesz.', + 'net_filtered_prefs' => 'Ezen a diagramon sose fognak szerepelni azok a számlák melyeknél a "Befoglalva a nettó értékbe" beállítás nincs bekapcsolva.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Diagram', - 'month' => 'Hónap', - 'budget' => 'Költségkeret', - 'spent' => 'Elköltött', - 'spent_capped' => 'Elköltve (korlátozva)', - 'spent_in_budget' => 'Költségkeretből elköltve', - 'left_to_spend' => 'Elkölthető', - 'earned' => 'Megkeresett', - 'overspent' => 'Túlköltött', - 'left' => 'Maradvány', - 'max-amount' => 'Maximális összeg', - 'min-amount' => 'Minimális összeg', - 'journal-amount' => 'Jelenlegi számla bejegyzés', - 'name' => 'Név', - 'date' => 'Dátum', - 'date_and_time' => 'Date and time', - 'time' => 'Time', - 'paid' => 'Kifizetve', - 'unpaid' => 'Nincs fizetve', - 'day' => 'Nap', - 'budgeted' => 'Betervezett', - 'period' => 'Időszak', - 'balance' => 'Egyenleg', - 'in_out_period' => 'In + out this period', - 'sum' => 'Összesen', - 'summary' => 'Összefoglaló', - 'average' => 'Átlag', - 'balanceFor' => 'Egyenleg: :name', - 'no_tags' => '(nincsenek címkék)', + 'chart' => 'Diagram', + 'month' => 'Hónap', + 'budget' => 'Költségkeret', + 'spent' => 'Elköltött', + 'spent_capped' => 'Elköltve (korlátozva)', + 'spent_in_budget' => 'Költségkeretből elköltve', + 'left_to_spend' => 'Elkölthető', + 'earned' => 'Megkeresett', + 'overspent' => 'Túlköltött', + 'left' => 'Maradvány', + 'max-amount' => 'Maximális összeg', + 'min-amount' => 'Minimális összeg', + 'journal-amount' => 'Jelenlegi számla bejegyzés', + 'name' => 'Név', + 'date' => 'Dátum', + 'date_and_time' => 'Date and time', + 'time' => 'Time', + 'paid' => 'Kifizetve', + 'unpaid' => 'Nincs fizetve', + 'day' => 'Nap', + 'budgeted' => 'Betervezett', + 'period' => 'Időszak', + 'balance' => 'Egyenleg', + 'in_out_period' => 'In + out this period', + 'sum' => 'Összesen', + 'summary' => 'Összefoglaló', + 'average' => 'Átlag', + 'balanceFor' => 'Egyenleg: :name', + 'no_tags' => '(nincsenek címkék)', + 'nothing_found' => '(nincs találat)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Pénz hozzáadása ":name" malacperselyhez', - 'piggy_bank' => 'Malacpersely', - 'new_piggy_bank' => 'Új malacpersely', - 'store_piggy_bank' => 'Új malacpersely tárolása', - 'stored_piggy_bank' => 'Új ":name" malacpersely eltárolva', - 'account_status' => 'Számla állapota', - 'left_for_piggy_banks' => 'Maradt a malacperselyeknek', - 'sum_of_piggy_banks' => 'Malacperselyek összesen', - 'saved_so_far' => 'Megtakarítás eddig', - 'left_to_save' => 'Megtakarítható', - 'suggested_amount' => 'Javasolt havi megtakarítási összeg', - 'add_money_to_piggy_title' => 'Pénz elhelyezése ":name" malacperselyben', - 'remove_money_from_piggy_title' => 'Pénz kivétele ":name" malacperselyből', - 'add' => 'Hozzáadás', - 'no_money_for_piggy' => 'Nincs pénz amit be lehetne tenni ebbe a malacperselybe.', - 'suggested_savings_per_month' => 'Havonként javasolt', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Pénz hozzáadása ":name" malacperselyhez', + 'piggy_bank' => 'Malacpersely', + 'new_piggy_bank' => 'Új malacpersely', + 'store_piggy_bank' => 'Új malacpersely tárolása', + 'stored_piggy_bank' => 'Új ":name" malacpersely eltárolva', + 'account_status' => 'Számla állapota', + 'left_for_piggy_banks' => 'Maradt a malacperselyeknek', + 'sum_of_piggy_banks' => 'Malacperselyek összesen', + 'saved_so_far' => 'Megtakarítás eddig', + 'left_to_save' => 'Megtakarítható', + 'suggested_amount' => 'Javasolt havi megtakarítási összeg', + 'add_money_to_piggy_title' => 'Pénz elhelyezése ":name" malacperselyben', + 'remove_money_from_piggy_title' => 'Pénz kivétele ":name" malacperselyből', + 'add' => 'Hozzáadás', + 'no_money_for_piggy' => 'Nincs pénz amit be lehetne tenni ebbe a malacperselybe.', + 'suggested_savings_per_month' => 'Havonként javasolt', - 'remove' => 'Eltávolítás', - 'max_amount_add' => 'A maximálisan hozzáadható összeg', - 'max_amount_remove' => 'A maximálisan kivehető összeg', - 'update_piggy_button' => 'Malacpersely frissítése', - 'update_piggy_title' => '":name" malacpersely frissítése', - 'updated_piggy_bank' => '":name" malacpersely frissítve', - 'details' => 'Részletek', - 'events' => 'Események', - 'target_amount' => 'Cél összeg', - 'start_date' => 'Kezdő dátum', - 'no_start_date' => 'Nincs kezdő dátum', - 'target_date' => 'Cél dátum', - 'no_target_date' => 'Nincs kezdő dátuma', - 'table' => 'Táblázat', - 'delete_piggy_bank' => '":name" malacpersely törlése', - 'cannot_add_amount_piggy' => ':amount nem adható hozzá ehhez: ":name".', - 'cannot_remove_from_piggy' => ':amount nem távolítható el innen: ":name".', - 'deleted_piggy_bank' => '":name" malacpersely törölve', - 'added_amount_to_piggy' => ':amount hozzáadva ehhez: ":name"', - 'removed_amount_from_piggy' => ':amount eltávolítva innen: ":name"', - 'piggy_events' => 'Kapcsolódó Malacperselyek', + 'remove' => 'Eltávolítás', + 'max_amount_add' => 'A maximálisan hozzáadható összeg', + 'max_amount_remove' => 'A maximálisan kivehető összeg', + 'update_piggy_button' => 'Malacpersely frissítése', + 'update_piggy_title' => '":name" malacpersely frissítése', + 'updated_piggy_bank' => '":name" malacpersely frissítve', + 'details' => 'Részletek', + 'events' => 'Események', + 'target_amount' => 'Cél összeg', + 'start_date' => 'Kezdő dátum', + 'no_start_date' => 'Nincs kezdő dátum', + 'target_date' => 'Cél dátum', + 'no_target_date' => 'Nincs kezdő dátuma', + 'table' => 'Táblázat', + 'delete_piggy_bank' => '":name" malacpersely törlése', + 'cannot_add_amount_piggy' => ':amount nem adható hozzá ehhez: ":name".', + 'cannot_remove_from_piggy' => ':amount nem távolítható el innen: ":name".', + 'deleted_piggy_bank' => '":name" malacpersely törölve', + 'added_amount_to_piggy' => ':amount hozzáadva ehhez: ":name"', + 'removed_amount_from_piggy' => ':amount eltávolítva innen: ":name"', + 'piggy_events' => 'Kapcsolódó Malacperselyek', // tags - 'delete_tag' => '":tag" címke törlése', - 'deleted_tag' => '":tag" címke törölve', - 'new_tag' => 'Új címke készítése', - 'edit_tag' => '":tag" címke szerkesztése', - 'updated_tag' => '":tag" címke frissítve', - 'created_tag' => '":tag" címke létrehozva!', + 'delete_tag' => '":tag" címke törlése', + 'deleted_tag' => '":tag" címke törölve', + 'new_tag' => 'Új címke készítése', + 'edit_tag' => '":tag" címke szerkesztése', + 'updated_tag' => '":tag" címke frissítve', + 'created_tag' => '":tag" címke létrehozva!', - 'transaction_journal_information' => 'Tranzakciós információk', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta-információ', - 'transaction_journal_more' => 'További információ', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Eltárolva ":journal" alatt', - 'total_amount' => 'Teljes összeg', - 'number_of_decimals' => 'Tizedesjegyek száma', + 'transaction_journal_information' => 'Tranzakciós információk', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Meta-információ', + 'transaction_journal_more' => 'További információ', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => 'Eltárolva ":journal" alatt', + 'total_amount' => 'Teljes összeg', + 'number_of_decimals' => 'Tizedesjegyek száma', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Adminisztráció', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Felhasználók adminisztrálása', - 'list_all_users' => 'Összes felhasználó', - 'all_users' => 'Összes felhasználó', - 'instance_configuration' => 'Beállítás', - 'firefly_instance_configuration' => 'A Firefly III beállítási lehetőségei', - 'setting_single_user_mode' => 'Egyfelhasználós mód', - 'setting_single_user_mode_explain' => 'Alapértelmezetten Firefly III kizárólag egy felhasználót enged regisztrálni. Ez egy szándékos biztonsági lépés, megakadályozva azt, hogy esetleg más is hozzáférjen a privát adataihoz. További regisztrációk ezen az eszközön tiltottak. Amikor ezt a jelölőt kikattintja, úgy mások is hozzáférhetnek az eszköz adataihoz (ha van internetkapcsolat).', - 'store_configuration' => 'Beállítás tárolása', - 'single_user_administration' => ':email felhasználó adminisztrációja', - 'edit_user' => ':email felhasználó szerkesztése', - 'hidden_fields_preferences' => 'A beállításokban több mező is engedélyezhető.', - 'user_data_information' => 'Felhasználói adatok', - 'user_information' => 'Felhasználó információk', - 'total_size' => 'teljes méret', - 'budget_or_budgets' => ':count költségkeret|:count költségkeret', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_rules szabály :count_groups szabálycsoportban', - 'tag_or_tags' => ':count címke|:count címke', - 'configuration_updated' => 'A konfiguráció frissítése megtörtént', - 'setting_is_demo_site' => 'Bemutató oldal', - 'setting_is_demo_site_explain' => 'Ha bejelölt, a telepítés bemutató oldalként fog viselkedni, aminek furcsa mellékhatásai lehetnek.', - 'block_code_bounced' => 'Visszapattant email üzenetek', - 'block_code_expired' => 'A Demo számla lejárt', - 'no_block_code' => 'Nincs oka a zárolásnak, vagy a felhasználó nincs zárolva', - 'block_code_email_changed' => 'A felhasználó még nem erősítette meg az új email címét', - 'admin_update_email' => 'A profil oldallal ellentétben a felhasználó NEM kap értesítést az email címe megváltozásáról!', - 'update_user' => 'Felhasználó frissítése', - 'updated_user' => 'Felhasználói adatok módosítva.', - 'delete_user' => 'Felhasználó törlése ":email"', - 'user_deleted' => 'A felhasználó törölve lett', - 'send_test_email' => 'Teszt email küldése', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Üzenet küldése', - 'send_test_triggered' => 'Teszt elindítva. Ellenőrizd a bejövő üzeneteidet és a naplófájlokat.', - 'give_admin_careful' => 'Adminisztrátornak kinevezett felhasználók visszavonhatják akár a te adminisztrátori felhatalmazásodat. Légy óvatos.', - 'admin_maintanance_title' => 'Karbantartás', - 'admin_maintanance_expl' => 'Firefly III karbantartását kezelő gombok', - 'admin_maintenance_clear_cache' => 'Gyorsítótár ürítése', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Felosztott tranzakció leírása', - 'split_transaction_title_help' => 'Felosztott tranzakció létrehozásakor meg kell adni egy globális leírást a tranzakció összes felosztása részére.', - 'split_title_help' => 'Felosztott tranzakció létrehozásakor meg kell adni egy globális leírást a tranzakció összes felosztása részére.', - 'you_create_transfer' => 'Egy átutalás létrehozása.', - 'you_create_withdrawal' => 'Egy költség létrehozása.', - 'you_create_deposit' => 'Egy bevétel létrehozása.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Adminisztráció', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'Felhasználók adminisztrálása', + 'list_all_users' => 'Összes felhasználó', + 'all_users' => 'Összes felhasználó', + 'instance_configuration' => 'Beállítás', + 'firefly_instance_configuration' => 'A Firefly III beállítási lehetőségei', + 'setting_single_user_mode' => 'Egyfelhasználós mód', + 'setting_single_user_mode_explain' => 'Alapértelmezetten Firefly III kizárólag egy felhasználót enged regisztrálni. Ez egy szándékos biztonsági lépés, megakadályozva azt, hogy esetleg más is hozzáférjen a privát adataihoz. További regisztrációk ezen az eszközön tiltottak. Amikor ezt a jelölőt kikattintja, úgy mások is hozzáférhetnek az eszköz adataihoz (ha van internetkapcsolat).', + 'store_configuration' => 'Beállítás tárolása', + 'single_user_administration' => ':email felhasználó adminisztrációja', + 'edit_user' => ':email felhasználó szerkesztése', + 'hidden_fields_preferences' => 'A beállításokban több mező is engedélyezhető.', + 'user_data_information' => 'Felhasználói adatok', + 'user_information' => 'Felhasználó információk', + 'total_size' => 'teljes méret', + 'budget_or_budgets' => ':count költségkeret|:count költségkeret', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_rules szabály :count_groups szabálycsoportban', + 'tag_or_tags' => ':count címke|:count címke', + 'configuration_updated' => 'A konfiguráció frissítése megtörtént', + 'setting_is_demo_site' => 'Bemutató oldal', + 'setting_is_demo_site_explain' => 'Ha bejelölt, a telepítés bemutató oldalként fog viselkedni, aminek furcsa mellékhatásai lehetnek.', + 'block_code_bounced' => 'Visszapattant email üzenetek', + 'block_code_expired' => 'A Demo számla lejárt', + 'no_block_code' => 'Nincs oka a zárolásnak, vagy a felhasználó nincs zárolva', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'A felhasználó még nem erősítette meg az új email címét', + 'admin_update_email' => 'A profil oldallal ellentétben a felhasználó NEM kap értesítést az email címe megváltozásáról!', + 'update_user' => 'Felhasználó frissítése', + 'updated_user' => 'Felhasználói adatok módosítva.', + 'delete_user' => 'Felhasználó törlése ":email"', + 'user_deleted' => 'A felhasználó törölve lett', + 'send_test_email' => 'Teszt email küldése', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Üzenet küldése', + 'send_test_triggered' => 'Teszt elindítva. Ellenőrizd a bejövő üzeneteidet és a naplófájlokat.', + 'give_admin_careful' => 'Adminisztrátornak kinevezett felhasználók visszavonhatják akár a te adminisztrátori felhatalmazásodat. Légy óvatos.', + 'admin_maintanance_title' => 'Karbantartás', + 'admin_maintanance_expl' => 'Firefly III karbantartását kezelő gombok', + 'admin_maintenance_clear_cache' => 'Gyorsítótár ürítése', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Felosztott tranzakció leírása', + 'split_transaction_title_help' => 'Felosztott tranzakció létrehozásakor meg kell adni egy globális leírást a tranzakció összes felosztása részére.', + 'split_title_help' => 'Felosztott tranzakció létrehozásakor meg kell adni egy globális leírást a tranzakció összes felosztása részére.', + 'you_create_transfer' => 'Egy átutalás létrehozása.', + 'you_create_withdrawal' => 'Egy költség létrehozása.', + 'you_create_deposit' => 'Egy bevétel létrehozása.', // links - 'journal_link_configuration' => 'Tranzakciós kapcsolatok beállítása', - 'create_new_link_type' => 'Új kapcsolattípus létrehozása', - 'store_new_link_type' => 'Új kapcsolattípus tárolása', - 'update_link_type' => 'Kapcsolattípus frissítése', - 'edit_link_type' => '":name" kapcsolattípus szerkesztése', - 'updated_link_type' => '":name" kapcsolattípus frissítve', - 'delete_link_type' => '":name" kapcsolattípus törlése', - 'deleted_link_type' => '":name" kapcsolattípus törölve', - 'stored_new_link_type' => '":name" új kapcsolattípus tárolása', - 'cannot_edit_link_type' => '":name" kapcsolattípus nem szerkeszthető', - 'link_type_help_name' => 'Pl. "Duplikátumok"', - 'link_type_help_inward' => 'Pl. "duplikátumok"', - 'link_type_help_outward' => 'Pl. "duplikálta"', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(ne mentse a kapcsolatot)', - 'link_transaction' => 'Tranzakció kapcsolása', - 'link_to_other_transaction' => 'Tranzakció hozzákapcsolása egy másik tranzakcióhoz', - 'select_transaction_to_link' => 'Válassza ki, hogy a tranzakció melyik tranzakcióval van viszonyban. Jelenleg ezek a viszonyok nincsenek aktívan használva a Firefly III-ban (azon kívül, hogy jelezve vannak), de ez a későbbiekben változhat. Tranzakciók kereséséhez a keresőmezőt ahsználhatja, azonosító vagy név alapján. Ha saját viszonytípust szeretne használni, úgy azt a felügyeleti részben teheti meg.', - 'this_transaction' => 'Ez a tranzakció', - 'transaction' => 'Tranzakció', - 'comments' => 'Megjegyzések', - 'link_notes' => 'Bármilyen megjegyzés, amit a hivatkozáshoz tárolni szeretne.', - 'invalid_link_selection' => 'Ezeket a tranzakciókat nem lehet összekapcsolni', - 'selected_transaction' => 'Kiválasztott tranzakció', - 'journals_linked' => 'Tranzakciók összekapcsolva.', - 'journals_error_linked' => 'Ezek a tranzakciók már össze vannak kapcsolva.', - 'journals_link_to_self' => 'Tranzakciót nem lehet saját magához csatolni', - 'journal_links' => 'Tranzakció összekapcsolások', - 'this_withdrawal' => 'Ez a költség', - 'this_deposit' => 'Ez a bevétel', - 'this_transfer' => 'Ez az átvezetés', - 'overview_for_link' => '":name" kapcsolattípus áttekintése', - 'source_transaction' => 'Forrás tranzakció', - 'link_description' => 'Kapcsolat leírása', - 'destination_transaction' => 'Cél tranzakció', - 'delete_journal_link' => ':source és :destination közötti kapcsolat törlése', - 'deleted_link' => 'Törölt kapcsolat', + 'journal_link_configuration' => 'Tranzakciós kapcsolatok beállítása', + 'create_new_link_type' => 'Új kapcsolattípus létrehozása', + 'store_new_link_type' => 'Új kapcsolattípus tárolása', + 'update_link_type' => 'Kapcsolattípus frissítése', + 'edit_link_type' => '":name" kapcsolattípus szerkesztése', + 'updated_link_type' => '":name" kapcsolattípus frissítve', + 'delete_link_type' => '":name" kapcsolattípus törlése', + 'deleted_link_type' => '":name" kapcsolattípus törölve', + 'stored_new_link_type' => '":name" új kapcsolattípus tárolása', + 'cannot_edit_link_type' => '":name" kapcsolattípus nem szerkeszthető', + 'link_type_help_name' => 'Pl. "Duplikátumok"', + 'link_type_help_inward' => 'Pl. "duplikátumok"', + 'link_type_help_outward' => 'Pl. "duplikálta"', + 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', + 'do_not_save_connection' => '(ne mentse a kapcsolatot)', + 'link_transaction' => 'Tranzakció kapcsolása', + 'link_to_other_transaction' => 'Tranzakció hozzákapcsolása egy másik tranzakcióhoz', + 'select_transaction_to_link' => 'Válassza ki, hogy a tranzakció melyik tranzakcióval van viszonyban. Jelenleg ezek a viszonyok nincsenek aktívan használva a Firefly III-ban (azon kívül, hogy jelezve vannak), de ez a későbbiekben változhat. Tranzakciók kereséséhez a keresőmezőt ahsználhatja, azonosító vagy név alapján. Ha saját viszonytípust szeretne használni, úgy azt a felügyeleti részben teheti meg.', + 'this_transaction' => 'Ez a tranzakció', + 'transaction' => 'Tranzakció', + 'comments' => 'Megjegyzések', + 'link_notes' => 'Bármilyen megjegyzés, amit a hivatkozáshoz tárolni szeretne.', + 'invalid_link_selection' => 'Ezeket a tranzakciókat nem lehet összekapcsolni', + 'selected_transaction' => 'Kiválasztott tranzakció', + 'journals_linked' => 'Tranzakciók összekapcsolva.', + 'journals_error_linked' => 'Ezek a tranzakciók már össze vannak kapcsolva.', + 'journals_link_to_self' => 'Tranzakciót nem lehet saját magához csatolni', + 'journal_links' => 'Tranzakció összekapcsolások', + 'this_withdrawal' => 'Ez a költség', + 'this_deposit' => 'Ez a bevétel', + 'this_transfer' => 'Ez az átvezetés', + 'overview_for_link' => '":name" kapcsolattípus áttekintése', + 'source_transaction' => 'Forrás tranzakció', + 'link_description' => 'Kapcsolat leírása', + 'destination_transaction' => 'Cél tranzakció', + 'delete_journal_link' => ':source és :destination közötti kapcsolat törlése', + 'deleted_link' => 'Törölt kapcsolat', // link translations: - 'Paid_name' => 'Fizetve', - 'Refund_name' => 'Visszatérítés', - 'Reimbursement_name' => 'Visszafizetés', - 'Related_name' => 'Kapcsolódó', - 'relates to_inward' => 'kapcsolódó', - 'is (partially) refunded by_inward' => '(részben) visszatérítette', - 'is (partially) paid for by_inward' => '(részben) kifizette', - 'is (partially) reimbursed by_inward' => '(részben) visszafizette', - 'inward_transaction' => 'Bejövő tranzakciók', - 'outward_transaction' => 'Kimenő tranzakciók', - 'relates to_outward' => 'kapcsolódik', - '(partially) refunds_outward' => '(részben) visszatérítve', - '(partially) pays for_outward' => '(részben) fizet', - '(partially) reimburses_outward' => '(részben) visszafizetve', - 'is (partially) refunded by' => '(részben) visszatérítette', - 'is (partially) paid for by' => '(részben) kifizette', - 'is (partially) reimbursed by' => '(részben) visszafizette', - 'relates to' => 'kapcsolódó', - '(partially) refunds' => '(részben) visszatérítve', - '(partially) pays for' => '(részben) fizet', - '(partially) reimburses' => '(részben) visszafizetve', + 'Paid_name' => 'Fizetve', + 'Refund_name' => 'Visszatérítés', + 'Reimbursement_name' => 'Visszafizetés', + 'Related_name' => 'Kapcsolódó', + 'relates to_inward' => 'kapcsolódó', + 'is (partially) refunded by_inward' => '(részben) visszatérítette', + 'is (partially) paid for by_inward' => '(részben) kifizette', + 'is (partially) reimbursed by_inward' => '(részben) visszafizette', + 'inward_transaction' => 'Bejövő tranzakciók', + 'outward_transaction' => 'Kimenő tranzakciók', + 'relates to_outward' => 'kapcsolódik', + '(partially) refunds_outward' => '(részben) visszatérítve', + '(partially) pays for_outward' => '(részben) fizet', + '(partially) reimburses_outward' => '(részben) visszafizetve', + 'is (partially) refunded by' => '(részben) visszatérítette', + 'is (partially) paid for by' => '(részben) kifizette', + 'is (partially) reimbursed by' => '(részben) visszafizette', + 'relates to' => 'kapcsolódó', + '(partially) refunds' => '(részben) visszatérítve', + '(partially) pays for' => '(részben) fizet', + '(partially) reimburses' => '(részben) visszafizetve', // split a transaction: - 'splits' => 'Felosztások', - 'add_another_split' => 'Másik felosztás hozzáadása', - 'cannot_edit_opening_balance' => 'Nem lehet szerkeszteni egy bankszámla nyitóegyenlegét.', - 'no_edit_multiple_left' => 'Nincs kiválasztva érvényes tranzakció a szerkesztéshez.', - 'breadcrumb_convert_group' => 'Tranzakció konvertálása', - 'convert_invalid_source' => 'A forrás információ érvénytelen #%d tranzakció számára.', - 'convert_invalid_destination' => 'A cél információ érvénytelen #%d tranzakció számára.', - 'create_another' => 'A tárolás után térjen vissza ide új létrehozásához.', - 'after_update_create_another' => 'A frissítés után térjen vissza ide a szerkesztés folytatásához.', - 'store_as_new' => 'Tárolás új tranzakcióként frissítés helyett.', - 'reset_after' => 'Űrlap törlése a beküldés után', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Felosztások', + 'add_another_split' => 'Másik felosztás hozzáadása', + 'cannot_edit_opening_balance' => 'Nem lehet szerkeszteni egy bankszámla nyitóegyenlegét.', + 'no_edit_multiple_left' => 'Nincs kiválasztva érvényes tranzakció a szerkesztéshez.', + 'breadcrumb_convert_group' => 'Tranzakció konvertálása', + 'convert_invalid_source' => 'A forrás információ érvénytelen #%d tranzakció számára.', + 'convert_invalid_destination' => 'A cél információ érvénytelen #%d tranzakció számára.', + 'create_another' => 'A tárolás után térjen vissza ide új létrehozásához.', + 'after_update_create_another' => 'A frissítés után térjen vissza ide a szerkesztés folytatásához.', + 'store_as_new' => 'Tárolás új tranzakcióként frissítés helyett.', + 'reset_after' => 'Űrlap törlése a beküldés után', + 'errors_submission' => 'Hiba történt a beküldés során. Kérlek javítsd az alábbi hibákat.', + 'errors_submission_v2' => 'Hiba történt a beküldés során. Kérlek javítsd az alábbi hibákat: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(nem csoportosított)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(nem csoportosított)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Ideje létrehozni egy eszközszámlát!', - 'no_accounts_intro_asset' => 'Még nincsenek eszközszámlák. Az eszközszámlák a fő számlák: folyószámla, megtakarítási számlák, megosztott számlák vagy akár hitelkártya.', - 'no_accounts_imperative_asset' => 'A Firefly III használatának megkezdéséhez létre kell hozni legalább egy eszközszámlát. Csináljuk meg most:', - 'no_accounts_create_asset' => 'Egy eszközszámla létrehozása', - 'no_accounts_title_expense' => 'Ideje létrehozni egy költségszámlát!', - 'no_accounts_intro_expense' => 'Még nincs költségszámlád. A költségszámlák azok a helyek, ahol pénzköltés történik, például üzletek és szupermarketek.', - 'no_accounts_imperative_expense' => 'A költségszámlák automatikusan jönnek létre tranzakciók létrehozásakor, de kézzel is létre lehet hozni. Hozzunk létre egyet most:', - 'no_accounts_create_expense' => 'Költségszámla létrehozása', - 'no_accounts_title_revenue' => 'Ideje létrehozni egy jövedelemszámlát!', - 'no_accounts_intro_revenue' => 'Még nincsenek jövedelemszámlák. A jövedelemszámlák azok a helyek, ahonnan pénz jön, ilyen például a munkáltató.', - 'no_accounts_imperative_revenue' => 'A jövedelemszámlák automatikusan létrejönnek tranzakciók létrehozásakor, de ha szükséges, létre lehet hozni manuálisan is. Létrehozás most:', - 'no_accounts_create_revenue' => 'Új jövedelemszámla létrehozása', - 'no_accounts_title_liabilities' => 'Ideje létrehozni egy kötelezettséget!', - 'no_accounts_intro_liabilities' => 'Még nincsenek kötelezettségek. A kötelezettségek azok a számlák amik a (diák)hiteleket és egyéb adósságokat regisztrálják.', - 'no_accounts_imperative_liabilities' => 'Nem kötelező használni ezt a funkciót, de hasznos lehet ha szükséges követni ezeket a dolgokat.', - 'no_accounts_create_liabilities' => 'Új kötelezettség létrehozása', - 'no_budgets_title_default' => 'Ideje létrehozni egy költségkeretet', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'Még nincsenek költségkeretek. A költségkeretek arra szolgálnak, hogy a költségeket logikai csoportokba szervezhessük, amelyekhez a költségek csökkentéséhez megadható egy átléphető felső határ.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'A költségkeretek a pénzügyi menedzsment alapvető eszközei. Létrehozás most:', - 'no_budgets_create_default' => 'Költségkeret létrehozása', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Ideje létrehozni egy kategóriát!', - 'no_categories_intro_default' => 'Még nincsenek kategóriák. A kategóriákat a tranzakciók finomhangolására, kijelölt kategóriákkal történő megjelölésére használják.', - 'no_categories_imperative_default' => 'A kategóriák automatikusan létrejönnek tranzakciók létrehozásakor, de ha szükséges, létre lehet hozni manuálisan is. Létrehozás most:', - 'no_categories_create_default' => 'Kategória létrehozása', - 'no_tags_title_default' => 'Ideje létrehozni egy címkét!', - 'no_tags_intro_default' => 'Még nincsenek címkék. A címkéket a tranzakciók finomhangolására, speciális kulcsszavakkal történő megjelölésére használják.', - 'no_tags_imperative_default' => 'A címkék automatikusan létrejönnek tranzakciók létrehozásakor, de ha szükséges, létre lehet hozni manuálisan is. Létrehozás most:', - 'no_tags_create_default' => 'Címke létrehozása', - 'no_transactions_title_withdrawal' => 'Ideje létrehozni egy költséget!', - 'no_transactions_intro_withdrawal' => 'Még nincsenek költségek. A pénzügyek kezeléséhez létre kell hozni költségeket.', - 'no_transactions_imperative_withdrawal' => 'Pénzt költöttél? Akkor le kellene írni:', - 'no_transactions_create_withdrawal' => 'Költség létrehozása', - 'no_transactions_title_deposit' => 'Hozzunk létre bevételt!', - 'no_transactions_intro_deposit' => 'Még nincs rögzített bevétel. A pénzügyek kezeléséhez létre kell hozni bevételi bejegyzéseket.', - 'no_transactions_imperative_deposit' => 'Pénzhez jutottál? Akkor le kellene írni:', - 'no_transactions_create_deposit' => 'Új bevétel létrehozása', - 'no_transactions_title_transfers' => 'Ideje létrehozni egy átvezetést!', - 'no_transactions_intro_transfers' => 'Még nincsenek átvezetések. Eszközszámlák közötti pénzmozgás átvezetésként lesz rögzítve.', - 'no_transactions_imperative_transfers' => 'Pénzt költöttél? Akkor le kellene írni:', - 'no_transactions_create_transfers' => 'Átvezetés létrehozása', - 'no_piggies_title_default' => 'Ideje létrehozni egy malacperselyt!', - 'no_piggies_intro_default' => 'Még nincsenek malacperselyek. Létre lehet hozni malacperselyeket a megtakarítások felosztásához és a megtakarítások nyomon követéséhez.', - 'no_piggies_imperative_default' => 'Van valami, amire pénzt kellene megtakarítani? Hozz létre egy malacperselyt és kövesd nyomon:', - 'no_piggies_create_default' => 'Új malacpersely létrehozása', - 'no_bills_title_default' => 'Ideje létrehozni egy számlát!', - 'no_bills_intro_default' => 'Még nincsenek számlák. Létre lehet hozni számlákat az olyan rendszeres kiadások nyomon követéséhez mint például a bérleti vagy biztosítási díjak.', - 'no_bills_imperative_default' => 'Vannak rendszeres számlák? Létre lehet hozni egy számlát és nyomon követni a kifizetéseket:', - 'no_bills_create_default' => 'Számla létrehozása', + 'no_accounts_title_asset' => 'Ideje létrehozni egy eszközszámlát!', + 'no_accounts_intro_asset' => 'Még nincsenek eszközszámlák. Az eszközszámlák a fő számlák: folyószámla, megtakarítási számlák, megosztott számlák vagy akár hitelkártya.', + 'no_accounts_imperative_asset' => 'A Firefly III használatának megkezdéséhez létre kell hozni legalább egy eszközszámlát. Csináljuk meg most:', + 'no_accounts_create_asset' => 'Egy eszközszámla létrehozása', + 'no_accounts_title_expense' => 'Ideje létrehozni egy költségszámlát!', + 'no_accounts_intro_expense' => 'Még nincs költségszámlád. A költségszámlák azok a helyek, ahol pénzköltés történik, például üzletek és szupermarketek.', + 'no_accounts_imperative_expense' => 'A költségszámlák automatikusan jönnek létre tranzakciók létrehozásakor, de kézzel is létre lehet hozni. Hozzunk létre egyet most:', + 'no_accounts_create_expense' => 'Költségszámla létrehozása', + 'no_accounts_title_revenue' => 'Ideje létrehozni egy jövedelemszámlát!', + 'no_accounts_intro_revenue' => 'Még nincsenek jövedelemszámlák. A jövedelemszámlák azok a helyek, ahonnan pénz jön, ilyen például a munkáltató.', + 'no_accounts_imperative_revenue' => 'A jövedelemszámlák automatikusan létrejönnek tranzakciók létrehozásakor, de ha szükséges, létre lehet hozni manuálisan is. Létrehozás most:', + 'no_accounts_create_revenue' => 'Új jövedelemszámla létrehozása', + 'no_accounts_title_liabilities' => 'Ideje létrehozni egy kötelezettséget!', + 'no_accounts_intro_liabilities' => 'Még nincsenek kötelezettségek. A kötelezettségek azok a számlák amik a (diák)hiteleket és egyéb adósságokat regisztrálják.', + 'no_accounts_imperative_liabilities' => 'Nem kötelező használni ezt a funkciót, de hasznos lehet ha szükséges követni ezeket a dolgokat.', + 'no_accounts_create_liabilities' => 'Új kötelezettség létrehozása', + 'no_budgets_title_default' => 'Ideje létrehozni egy költségkeretet', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'Még nincsenek költségkeretek. A költségkeretek arra szolgálnak, hogy a költségeket logikai csoportokba szervezhessük, amelyekhez a költségek csökkentéséhez megadható egy átléphető felső határ.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'A költségkeretek a pénzügyi menedzsment alapvető eszközei. Létrehozás most:', + 'no_budgets_create_default' => 'Költségkeret létrehozása', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Ideje létrehozni egy kategóriát!', + 'no_categories_intro_default' => 'Még nincsenek kategóriák. A kategóriákat a tranzakciók finomhangolására, kijelölt kategóriákkal történő megjelölésére használják.', + 'no_categories_imperative_default' => 'A kategóriák automatikusan létrejönnek tranzakciók létrehozásakor, de ha szükséges, létre lehet hozni manuálisan is. Létrehozás most:', + 'no_categories_create_default' => 'Kategória létrehozása', + 'no_tags_title_default' => 'Ideje létrehozni egy címkét!', + 'no_tags_intro_default' => 'Még nincsenek címkék. A címkéket a tranzakciók finomhangolására, speciális kulcsszavakkal történő megjelölésére használják.', + 'no_tags_imperative_default' => 'A címkék automatikusan létrejönnek tranzakciók létrehozásakor, de ha szükséges, létre lehet hozni manuálisan is. Létrehozás most:', + 'no_tags_create_default' => 'Címke létrehozása', + 'no_transactions_title_withdrawal' => 'Ideje létrehozni egy költséget!', + 'no_transactions_intro_withdrawal' => 'Még nincsenek költségek. A pénzügyek kezeléséhez létre kell hozni költségeket.', + 'no_transactions_imperative_withdrawal' => 'Pénzt költöttél? Akkor le kellene írni:', + 'no_transactions_create_withdrawal' => 'Költség létrehozása', + 'no_transactions_title_deposit' => 'Hozzunk létre bevételt!', + 'no_transactions_intro_deposit' => 'Még nincs rögzített bevétel. A pénzügyek kezeléséhez létre kell hozni bevételi bejegyzéseket.', + 'no_transactions_imperative_deposit' => 'Pénzhez jutottál? Akkor le kellene írni:', + 'no_transactions_create_deposit' => 'Új bevétel létrehozása', + 'no_transactions_title_transfers' => 'Ideje létrehozni egy átvezetést!', + 'no_transactions_intro_transfers' => 'Még nincsenek átvezetések. Eszközszámlák közötti pénzmozgás átvezetésként lesz rögzítve.', + 'no_transactions_imperative_transfers' => 'Pénzt költöttél? Akkor le kellene írni:', + 'no_transactions_create_transfers' => 'Átvezetés létrehozása', + 'no_piggies_title_default' => 'Ideje létrehozni egy malacperselyt!', + 'no_piggies_intro_default' => 'Még nincsenek malacperselyek. Létre lehet hozni malacperselyeket a megtakarítások felosztásához és a megtakarítások nyomon követéséhez.', + 'no_piggies_imperative_default' => 'Van valami, amire pénzt kellene megtakarítani? Hozz létre egy malacperselyt és kövesd nyomon:', + 'no_piggies_create_default' => 'Új malacpersely létrehozása', + 'no_bills_title_default' => 'Ideje létrehozni egy számlát!', + 'no_bills_intro_default' => 'Még nincsenek számlák. Létre lehet hozni számlákat az olyan rendszeres kiadások nyomon követéséhez mint például a bérleti vagy biztosítási díjak.', + 'no_bills_imperative_default' => 'Vannak rendszeres számlák? Létre lehet hozni egy számlát és nyomon követni a kifizetéseket:', + 'no_bills_create_default' => 'Számla létrehozása', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Ismétlődő tranzakciók', - 'repeat_until_in_past' => 'Ez a rendszeres tranzakció leállt ekkor: :date.', - 'recurring_calendar_view' => 'Naptár', - 'no_recurring_title_default' => 'Hozzunk létre egy ismétlődő tranzakciót!', - 'no_recurring_intro_default' => 'Még nincsenek ismétlődő tranzakciók. Ezek használatával a Firefly III automatikusan létrehozza a tranzakciókat.', - 'no_recurring_imperative_default' => 'Ez egy elég fejlett funkció ami rendkívül hasznos tud lenni. Erősen ajánlott elolvasni a dokumentációt (?) ikon a jobb felső sarokban) a folytatás előtt.', - 'no_recurring_create_default' => 'Ismétlődő tranzakció létrehozása', - 'make_new_recurring' => 'Ismétlődő tranzakció létrehozása', - 'recurring_daily' => 'Mindennap', - 'recurring_weekly' => 'Minden héten ekkor: :weekday', - 'recurring_weekly_skip' => 'Minden :skip. héten, hétköznap', - 'recurring_monthly' => 'Minden hónap ezen napján: :dayOfMonth', - 'recurring_monthly_skip' => 'Minden :skip. hónapon, a(z) :dayOfMonth. napon', - 'recurring_ndom' => 'Minden hónapban ekkor: :dayOfMonth :weekday', - 'recurring_yearly' => 'Minden évben ekkor: :date', - 'overview_for_recurrence' => '":title" ismétlődő tranzakció áttekintése', - 'warning_duplicates_repetitions' => 'Ritka esetben a dátumok kétszer jelennek meg a listában. Ez akkor fordulhat elő amikor több ismétlődés ütközik egymással. A Firefly III minden esetben csak egy tranzakciót hoz létre naponta.', - 'created_transactions' => 'Kapcsolódó tranzakciók', - 'expected_withdrawals' => 'Várható költségek', - 'expected_deposits' => 'Várható bevételek', - 'expected_transfers' => 'Várható átvezetések', - 'created_withdrawals' => 'Létrehozott költségek', - 'created_deposits' => 'Létrehozott bevételek', - 'created_transfers' => 'Átvezetések létrehozva', - 'recurring_info' => 'Ismétlődő tranzakciók :count / :total', - 'created_from_recurrence' => 'Létrehozva ":title" (#:id) ismétlődő tranzakcióból', - 'recurring_never_cron' => 'Az ismétlődő tranzakció funkcióhoz tartozó ütemezett feladat sosem futott még le. Ez normális jelenség, ha most Firefly III frissen lett telepítve, de ennek rövid időn belül változnia kellene. Ellenőrizd a súgóban a hibaelháítási lehetőségeket, a (?) gombra kattintva a jobb felső sarokban.', - 'recurring_cron_long_ago' => 'Úgy látszik, hogy több, mint 36 óra telt el a legutolsó ismétlődő tranzakciókat végrehajtó ütemezett feladat elindítása óta. Biztos vagy abban, hogy helyesen lett beállítva minden? Ellenőrizd a súgóban a hibaelháítási lehetőségeket, a (?) gombra kattintva a jobb felső sarokban.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Ismétlődő tranzakciók', + 'repeat_until_in_past' => 'Ez a rendszeres tranzakció leállt ekkor: :date.', + 'recurring_calendar_view' => 'Naptár', + 'no_recurring_title_default' => 'Hozzunk létre egy ismétlődő tranzakciót!', + 'no_recurring_intro_default' => 'Még nincsenek ismétlődő tranzakciók. Ezek használatával a Firefly III automatikusan létrehozza a tranzakciókat.', + 'no_recurring_imperative_default' => 'Ez egy elég fejlett funkció ami rendkívül hasznos tud lenni. Erősen ajánlott elolvasni a dokumentációt (?) ikon a jobb felső sarokban) a folytatás előtt.', + 'no_recurring_create_default' => 'Ismétlődő tranzakció létrehozása', + 'make_new_recurring' => 'Ismétlődő tranzakció létrehozása', + 'recurring_daily' => 'Mindennap', + 'recurring_weekly' => 'Minden héten ekkor: :weekday', + 'recurring_weekly_skip' => 'Minden :skip. héten, hétköznap', + 'recurring_monthly' => 'Minden hónap ezen napján: :dayOfMonth', + 'recurring_monthly_skip' => 'Minden :skip. hónapon, a(z) :dayOfMonth. napon', + 'recurring_ndom' => 'Minden hónapban ekkor: :dayOfMonth :weekday', + 'recurring_yearly' => 'Minden évben ekkor: :date', + 'overview_for_recurrence' => '":title" ismétlődő tranzakció áttekintése', + 'warning_duplicates_repetitions' => 'Ritka esetben a dátumok kétszer jelennek meg a listában. Ez akkor fordulhat elő amikor több ismétlődés ütközik egymással. A Firefly III minden esetben csak egy tranzakciót hoz létre naponta.', + 'created_transactions' => 'Kapcsolódó tranzakciók', + 'expected_withdrawals' => 'Várható költségek', + 'expected_deposits' => 'Várható bevételek', + 'expected_transfers' => 'Várható átvezetések', + 'created_withdrawals' => 'Létrehozott költségek', + 'created_deposits' => 'Létrehozott bevételek', + 'created_transfers' => 'Átvezetések létrehozva', + 'recurring_info' => 'Ismétlődő tranzakciók :count / :total', + 'created_from_recurrence' => 'Létrehozva ":title" (#:id) ismétlődő tranzakcióból', + 'recurring_never_cron' => 'Az ismétlődő tranzakció funkcióhoz tartozó ütemezett feladat sosem futott még le. Ez normális jelenség, ha most Firefly III frissen lett telepítve, de ennek rövid időn belül változnia kellene. Ellenőrizd a súgóban a hibaelháítási lehetőségeket, a (?) gombra kattintva a jobb felső sarokban.', + 'recurring_cron_long_ago' => 'Úgy látszik, hogy több, mint 36 óra telt el a legutolsó ismétlődő tranzakciókat végrehajtó ütemezett feladat elindítása óta. Biztos vagy abban, hogy helyesen lett beállítva minden? Ellenőrizd a súgóban a hibaelháítási lehetőségeket, a (?) gombra kattintva a jobb felső sarokban.', - 'create_new_recurrence' => 'Új ismétlődő tranzakció létrehozása', - 'help_first_date' => 'Az első várható ismétlést jelöli. A jövőben kell lennie.', - 'help_first_date_no_past' => 'Az első várható ismétlést jelöli. A Firefly III nem fog tranzakciókat létrehozni a múltban.', - 'no_currency' => '(nincs pénznem)', - 'mandatory_for_recurring' => 'Kötelező ismétlődési információ', - 'mandatory_for_transaction' => 'Kötelező tranzakció információ', - 'optional_for_recurring' => 'Nem kötelező ismétlődési információ', - 'optional_for_transaction' => 'Nem kötelező tranzakció információ', - 'change_date_other_options' => 'További lehetőségek megtekintéséhez módosítani kell az "első dátum"-ot.', - 'mandatory_fields_for_tranaction' => 'Az itteni értékek a létrehozott tranzakciókba kerülnek', - 'click_for_calendar' => 'Ide kattintva egy naptár jelenik meg ami megmutatja, hogy a tranzakció mikor lesz megismételve.', - 'repeat_forever' => 'Folyamatos ismétlés', - 'repeat_until_date' => 'Ismétlés egy időpontig', - 'repeat_times' => 'Ismétlés többször', - 'recurring_skips_one' => 'Minden más', - 'recurring_skips_more' => ':count előfordulás kihagyása', - 'store_new_recurrence' => 'Ismétlődő tranzakció letárolása', - 'stored_new_recurrence' => '":title" ismétlődő tranzakció sikeresen letárolva.', - 'edit_recurrence' => '":title" ismétlődő tranzakció szerkesztése', - 'recurring_repeats_until' => 'Ismétlés :date-ig', - 'recurring_repeats_forever' => 'Folyamatos ismétlés', - 'recurring_repeats_x_times' => ':count alkalommal ismétlődik|:count alkalommal ismétlődik', - 'update_recurrence' => 'Ismétlődő tranzakció frissítése', - 'updated_recurrence' => '":title" ismétlődő tranzakció frissítve', - 'recurrence_is_inactive' => 'Ez az ismétlődő tranzakció nem aktív, nem fog új tranzakciókat létrehozni.', - 'delete_recurring' => '":title" ismétlődő tranzakció törlése', - 'new_recurring_transaction' => 'Új ismétlődő tranzakció', - 'help_weekend' => 'Mit tegyen a Firefly III ha az ismétlődő tranzakció szombatra vagy vasárnapra esik?', - 'do_nothing' => 'Hozza létre a tranzakciót', - 'skip_transaction' => 'Előfordulás kihagyása', - 'jump_to_friday' => 'A tranzakció inkább az előző pénteken jöjjön létre', - 'jump_to_monday' => 'A tranzakció inkább az következő hétfőn jöjjön létre', - 'will_jump_friday' => 'Pénteken lesz létrehozva hétvége helyett.', - 'will_jump_monday' => 'Hétfőn lesz létrehozva hétvége helyett.', - 'except_weekends' => 'Kivéve hétvégék', - 'recurrence_deleted' => '":title" ismétlődő tranzakció törölve', + 'create_new_recurrence' => 'Új ismétlődő tranzakció létrehozása', + 'help_first_date' => 'Az első várható ismétlést jelöli. A jövőben kell lennie.', + 'help_first_date_no_past' => 'Az első várható ismétlést jelöli. A Firefly III nem fog tranzakciókat létrehozni a múltban.', + 'no_currency' => '(nincs pénznem)', + 'mandatory_for_recurring' => 'Kötelező ismétlődési információ', + 'mandatory_for_transaction' => 'Kötelező tranzakció információ', + 'optional_for_recurring' => 'Nem kötelező ismétlődési információ', + 'optional_for_transaction' => 'Nem kötelező tranzakció információ', + 'change_date_other_options' => 'További lehetőségek megtekintéséhez módosítani kell az "első dátum"-ot.', + 'mandatory_fields_for_tranaction' => 'Az itteni értékek a létrehozott tranzakciókba kerülnek', + 'click_for_calendar' => 'Ide kattintva egy naptár jelenik meg ami megmutatja, hogy a tranzakció mikor lesz megismételve.', + 'repeat_forever' => 'Folyamatos ismétlés', + 'repeat_until_date' => 'Ismétlés egy időpontig', + 'repeat_times' => 'Ismétlés többször', + 'recurring_skips_one' => 'Minden más', + 'recurring_skips_more' => ':count előfordulás kihagyása', + 'store_new_recurrence' => 'Ismétlődő tranzakció letárolása', + 'stored_new_recurrence' => '":title" ismétlődő tranzakció sikeresen letárolva.', + 'edit_recurrence' => '":title" ismétlődő tranzakció szerkesztése', + 'recurring_repeats_until' => 'Ismétlés :date-ig', + 'recurring_repeats_forever' => 'Folyamatos ismétlés', + 'recurring_repeats_x_times' => ':count alkalommal ismétlődik|:count alkalommal ismétlődik', + 'update_recurrence' => 'Ismétlődő tranzakció frissítése', + 'updated_recurrence' => '":title" ismétlődő tranzakció frissítve', + 'recurrence_is_inactive' => 'Ez az ismétlődő tranzakció nem aktív, nem fog új tranzakciókat létrehozni.', + 'delete_recurring' => '":title" ismétlődő tranzakció törlése', + 'new_recurring_transaction' => 'Új ismétlődő tranzakció', + 'help_weekend' => 'Mit tegyen a Firefly III ha az ismétlődő tranzakció szombatra vagy vasárnapra esik?', + 'do_nothing' => 'Hozza létre a tranzakciót', + 'skip_transaction' => 'Előfordulás kihagyása', + 'jump_to_friday' => 'A tranzakció inkább az előző pénteken jöjjön létre', + 'jump_to_monday' => 'A tranzakció inkább az következő hétfőn jöjjön létre', + 'will_jump_friday' => 'Pénteken lesz létrehozva hétvége helyett.', + 'will_jump_monday' => 'Hétfőn lesz létrehozva hétvége helyett.', + 'except_weekends' => 'Kivéve hétvégék', + 'recurrence_deleted' => '":title" ismétlődő tranzakció törölve', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Egyenleg (:currency)', - 'box_spent_in_currency' => 'Költés (:currency)', - 'box_earned_in_currency' => 'Megkeresett (:currency)', - 'box_budgeted_in_currency' => 'Megkeresett (:currency)', - 'box_bill_paid_in_currency' => 'Fizetett számlák (:currency)', - 'box_bill_unpaid_in_currency' => 'Fizetetlen számlák (:currency)', - 'box_left_to_spend_in_currency' => 'Elkölthető (:currency)', - 'box_net_worth_in_currency' => 'Nettó érték (:currency)', - 'box_spend_per_day' => 'Naponta elkölthető: :amount', + 'box_balance_in_currency' => 'Egyenleg (:currency)', + 'box_spent_in_currency' => 'Költés (:currency)', + 'box_earned_in_currency' => 'Megkeresett (:currency)', + 'box_budgeted_in_currency' => 'Megkeresett (:currency)', + 'box_bill_paid_in_currency' => 'Fizetett számlák (:currency)', + 'box_bill_unpaid_in_currency' => 'Fizetetlen számlák (:currency)', + 'box_left_to_spend_in_currency' => 'Elkölthető (:currency)', + 'box_net_worth_in_currency' => 'Nettó érték (:currency)', + 'box_spend_per_day' => 'Naponta elkölthető: :amount', // debug page - 'debug_page' => 'Debug információk', - 'debug_submit_instructions' => 'Ha hibába ütköznél, a lenti információk használhatóak a vizsgálatához. Kérlek küld el egy új vagy már létező, hasonló témájú GitHub hibajegybe. Ez így egy átlátható táblázatot fog generálni, ami segíteni fog a hiba okának keresésében.', - 'debug_pretty_table' => 'Ha bemásolod a lenti adatokat egy GitHub hibajegy megjegyzésébe, egy átlátható táblázatot fog generálni. Kérlek ne használj idézőjeleket körülötte.', - 'debug_additional_data' => 'A lenti információkat is megoszthatod. Kimásolható a GitHub hibajegybe. Viszont tartalmazhat szenzitív információkat, mint számla és tranzakció adatok vagy e-mail címek.', + 'debug_page' => 'Debug információk', + 'debug_submit_instructions' => 'Ha hibába ütköznél, a lenti információk használhatóak a vizsgálatához. Kérlek küld el egy új vagy már létező, hasonló témájú GitHub hibajegybe. Ez így egy átlátható táblázatot fog generálni, ami segíteni fog a hiba okának keresésében.', + 'debug_pretty_table' => 'Ha bemásolod a lenti adatokat egy GitHub hibajegy megjegyzésébe, egy átlátható táblázatot fog generálni. Kérlek ne használj idézőjeleket körülötte.', + 'debug_additional_data' => 'A lenti információkat is megoszthatod. Kimásolható a GitHub hibajegybe. Viszont tartalmazhat szenzitív információkat, mint számla és tranzakció adatok vagy e-mail címek.', // object groups - 'object_groups_menu_bar' => 'Csoportok', - 'object_groups_page_title' => 'Csoportok', - 'object_groups_breadcrumb' => 'Csoportok', - 'object_groups_index' => 'Áttekintés', - 'object_groups' => 'Csoportok', - 'object_groups_empty_explain' => 'Sok elem csoportosítható Firefly III-ban. Például malacperselyeknek beállítható a "Csoport" mezője. Szerkeszthető a csoportok megnevezése és sorrendje. További információkért nézd meg a súgót a jobb felső sarokban lévő (?) ikonra kattintva.', - 'object_group_title' => 'Cím', - 'edit_object_group' => '":title" csoport szerkesztése', - 'delete_object_group' => '":title" csoport törlése', - 'update_object_group' => 'Csoport frissítése', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Csoport', + 'object_groups_menu_bar' => 'Csoportok', + 'object_groups_page_title' => 'Csoportok', + 'object_groups_breadcrumb' => 'Csoportok', + 'object_groups_index' => 'Áttekintés', + 'object_groups' => 'Csoportok', + 'object_groups_empty_explain' => 'Sok elem csoportosítható Firefly III-ban. Például malacperselyeknek beállítható a "Csoport" mezője. Szerkeszthető a csoportok megnevezése és sorrendje. További információkért nézd meg a súgót a jobb felső sarokban lévő (?) ikonra kattintva.', + 'object_group_title' => 'Cím', + 'edit_object_group' => '":title" csoport szerkesztése', + 'delete_object_group' => '":title" csoport törlése', + 'update_object_group' => 'Csoport frissítése', + 'updated_object_group' => 'Successfully updated group ":title"', + 'deleted_object_group' => 'Successfully deleted group ":title"', + 'object_group' => 'Csoport', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/hu_HU/form.php b/resources/lang/hu_HU/form.php index c5bbbb5a0b..c0d5e78d87 100644 --- a/resources/lang/hu_HU/form.php +++ b/resources/lang/hu_HU/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Bank neve', - 'bank_balance' => 'Egyenleg', - 'savings_balance' => 'Megtakarítási egyenleg', - 'credit_card_limit' => 'Hitelkártya limit', - 'automatch' => 'Automatikus egyezés', - 'skip' => 'Kihagyás', - 'enabled' => 'Engedélyezett', - 'name' => 'Név', - 'active' => 'Aktív', - 'amount_min' => 'Minimális összeg', - 'amount_max' => 'Maximális összeg', - 'match' => 'Találatok', - 'strict' => 'Szigorú mód', - 'repeat_freq' => 'Ismétlődések', - 'object_group' => 'Csoport', - 'location' => 'Hely', - 'update_channel' => 'Frissítési csatorna', - 'currency_id' => 'Pénznem', - 'transaction_currency_id' => 'Pénznem', - 'auto_budget_currency_id' => 'Pénznem', - 'external_ip' => 'A szervered külső IP címe', - 'attachments' => 'Mellékletek', - 'BIC' => 'BIC', - 'verify_password' => 'Jelszóbiztonság ellenőrzése', - 'source_account' => 'Forrás bankszámla', - 'destination_account' => 'Cél bankszámla', - 'asset_destination_account' => 'Célszámla', - 'include_net_worth' => 'Befoglalva a nettó értékbe', - 'asset_source_account' => 'Forrás számla', - 'journal_description' => 'Leírás', - 'note' => 'Megjegyzések', - 'currency' => 'Pénznem', - 'account_id' => 'Eszközszámla', - 'budget_id' => 'Költségkeret', - 'bill_id' => 'Bill', - 'opening_balance' => 'Nyitó egyenleg', - 'tagMode' => 'Címke mód', - 'virtual_balance' => 'Virtuális egyenleg', + 'bank_name' => 'Bank neve', + 'bank_balance' => 'Egyenleg', + 'savings_balance' => 'Megtakarítási egyenleg', + 'credit_card_limit' => 'Hitelkártya limit', + 'automatch' => 'Automatikus egyezés', + 'skip' => 'Kihagyás', + 'enabled' => 'Engedélyezett', + 'name' => 'Név', + 'active' => 'Aktív', + 'amount_min' => 'Minimális összeg', + 'amount_max' => 'Maximális összeg', + 'match' => 'Találatok', + 'strict' => 'Szigorú mód', + 'repeat_freq' => 'Ismétlődések', + 'object_group' => 'Csoport', + 'location' => 'Hely', + 'update_channel' => 'Frissítési csatorna', + 'currency_id' => 'Pénznem', + 'transaction_currency_id' => 'Pénznem', + 'auto_budget_currency_id' => 'Pénznem', + 'external_ip' => 'A szervered külső IP címe', + 'attachments' => 'Mellékletek', + 'BIC' => 'BIC', + 'verify_password' => 'Jelszóbiztonság ellenőrzése', + 'source_account' => 'Forrás bankszámla', + 'destination_account' => 'Cél bankszámla', + 'asset_destination_account' => 'Célszámla', + 'include_net_worth' => 'Befoglalva a nettó értékbe', + 'asset_source_account' => 'Forrás számla', + 'journal_description' => 'Leírás', + 'note' => 'Megjegyzések', + 'currency' => 'Pénznem', + 'account_id' => 'Eszközszámla', + 'budget_id' => 'Költségkeret', + 'bill_id' => 'Bill', + 'opening_balance' => 'Nyitó egyenleg', + 'tagMode' => 'Címke mód', + 'virtual_balance' => 'Virtuális egyenleg', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Cél összeg', 'account_role' => 'Bankszámla szerepköre', 'opening_balance_date' => 'Nyitó egyenleg dátuma', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => '":description" tranzakció biztosan törölhető?', 'mass_journal_are_you_sure' => 'Ezek a tranzakciók biztosan törölhetőek?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => '":tag" címke biztosan törölhető?', 'journal_link_areYouSure' => ':source és :destination közötti kapcsolat biztosan törölhető?', 'linkType_areYouSure' => '":name" (":inward" / ":outward") kapcsolattípus biztosan törölhető?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Dal', - // admin 'domain' => 'Tartomány', 'single_user_mode' => 'Regisztráció tiltása', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS fiók', 'local_account' => 'Firefly III fiók', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Dátumtól', - 'to_date' => 'Dátumig', - 'due_date' => 'Lejárati időpont', - 'payment_date' => 'Fizetés dátuma', - 'invoice_date' => 'Számla dátuma', - 'internal_reference' => 'Belső hivatkozás', - 'inward' => 'Belső leírás', - 'outward' => 'Külső leírás', - 'rule_group_id' => 'Szabálycsoport', - 'transaction_description' => 'Tranzakció leírása', - 'first_date' => 'Első dátum', - 'transaction_type' => 'Tranzakció típusa', - 'repeat_until' => 'Ismétlés eddig:', - 'recurring_description' => 'Ismétlődő tranzakció leírása', - 'repetition_type' => 'Ismétlődés típusa', - 'foreign_currency_id' => 'Külföldi pénznem', - 'repetition_end' => 'Ismétlés vége', - 'repetitions' => 'Ismétlések', - 'calendar' => 'Naptár', - 'weekend' => 'Hétvége', - 'client_secret' => 'Ügyfél titkos kódja', - 'withdrawal_destination_id' => 'Célszámla', - 'deposit_source_id' => 'Forrásszámla', - 'expected_on' => 'Várható dátum:', - 'paid' => 'Fizetve', - 'auto_budget_type' => 'Auto-költségkeret', - 'auto_budget_amount' => 'Auto-költségkeret összege', - 'auto_budget_period' => 'Auto-költségkeret időszaka', - 'collected' => 'Begyűjtött', - 'submitted' => 'Elküldött', - 'key' => 'Kulcs', - 'value' => 'Bejegyzés tartalma', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Dátumtól', + 'to_date' => 'Dátumig', + 'due_date' => 'Lejárati időpont', + 'payment_date' => 'Fizetés dátuma', + 'invoice_date' => 'Számla dátuma', + 'internal_reference' => 'Belső hivatkozás', + 'inward' => 'Belső leírás', + 'outward' => 'Külső leírás', + 'rule_group_id' => 'Szabálycsoport', + 'transaction_description' => 'Tranzakció leírása', + 'first_date' => 'Első dátum', + 'transaction_type' => 'Tranzakció típusa', + 'repeat_until' => 'Ismétlés eddig:', + 'recurring_description' => 'Ismétlődő tranzakció leírása', + 'repetition_type' => 'Ismétlődés típusa', + 'foreign_currency_id' => 'Külföldi pénznem', + 'repetition_end' => 'Ismétlés vége', + 'repetitions' => 'Ismétlések', + 'calendar' => 'Naptár', + 'weekend' => 'Hétvége', + 'client_secret' => 'Ügyfél titkos kódja', + 'withdrawal_destination_id' => 'Célszámla', + 'deposit_source_id' => 'Forrásszámla', + 'expected_on' => 'Várható dátum:', + 'paid' => 'Fizetve', + 'auto_budget_type' => 'Auto-költségkeret', + 'auto_budget_amount' => 'Auto-költségkeret összege', + 'auto_budget_period' => 'Auto-költségkeret időszaka', + 'collected' => 'Begyűjtött', + 'submitted' => 'Elküldött', + 'key' => 'Kulcs', + 'value' => 'Bejegyzés tartalma', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/hu_HU/intro.php b/resources/lang/hu_HU/intro.php index 7159aa181f..98b0072592 100644 --- a/resources/lang/hu_HU/intro.php +++ b/resources/lang/hu_HU/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Ez a Firefly III kezdőoldala. Érdemes némi időt szánni ennek a bemutatónak a megtekintésére a Firefly III alapjainak megismeréséhez.', - 'index_accounts-chart' => 'Ezen a grafikon az eszközszámlák aktuális egyenlege látható. A grafikonon megjelenő bankszámlákat a beállításokban lehet kiválasztani.', - 'index_box_out_holder' => 'Ez a kis doboz és a mellette láthatóak gyors áttekintést nyújtanak a pénzügyi helyzetről.', - 'index_help' => 'Ezt a gombot megnyomva lehet segítséget kérni egy oldal vagy egy űrlap használatához.', - 'index_outro' => 'A Firefly III legtöbb oldala egy ilyen rövid bemutatóval kezdődik. Kérdés vagy észrevét esetén szívesen állok rendelkezésre. Kellemes használatot!', - 'index_sidebar-toggle' => 'Az ez alatt az ikon alatt megnyíló menü használható új tranzakciók, bankszámlák vagy egyéb dolgok létrehozásához.', - 'index_cash_account' => 'Ezek az eddig létrehozott számlák. A készpénzszámla használható a készpénzes költések követésére, de ez természetesen nem kötelező.', + 'index_intro' => 'Ez a Firefly III kezdőoldala. Érdemes némi időt szánni ennek a bemutatónak a megtekintésére a Firefly III alapjainak megismeréséhez.', + 'index_accounts-chart' => 'Ezen a grafikon az eszközszámlák aktuális egyenlege látható. A grafikonon megjelenő bankszámlákat a beállításokban lehet kiválasztani.', + 'index_box_out_holder' => 'Ez a kis doboz és a mellette láthatóak gyors áttekintést nyújtanak a pénzügyi helyzetről.', + 'index_help' => 'Ezt a gombot megnyomva lehet segítséget kérni egy oldal vagy egy űrlap használatához.', + 'index_outro' => 'A Firefly III legtöbb oldala egy ilyen rövid bemutatóval kezdődik. Kérdés vagy észrevét esetén szívesen állok rendelkezésre. Kellemes használatot!', + 'index_sidebar-toggle' => 'Az ez alatt az ikon alatt megnyíló menü használható új tranzakciók, bankszámlák vagy egyéb dolgok létrehozásához.', + 'index_cash_account' => 'Ezek az eddig létrehozott számlák. A készpénzszámla használható a készpénzes költések követésére, de ez természetesen nem kötelező.', // transactions - 'transactions_create_basic_info' => 'A tranzakció alap adatait töltheted ki. Forrás- és célszámla, dátum és leírás.', - 'transactions_create_amount_info' => 'Adja meg a tranzakció összegét. Szükség esetén a mezők automatikusan frissülnek a külföldi összeggel.', - 'transactions_create_optional_info' => 'Ezek a mezők opcionálisak. Kitöltésük a tranzakciók rendszerezését segíti.', - 'transactions_create_split' => 'A tranzakció további szétválasztásához használja ezt a gombot', + 'transactions_create_basic_info' => 'A tranzakció alap adatait töltheted ki. Forrás- és célszámla, dátum és leírás.', + 'transactions_create_amount_info' => 'Adja meg a tranzakció összegét. Szükség esetén a mezők automatikusan frissülnek a külföldi összeggel.', + 'transactions_create_optional_info' => 'Ezek a mezők opcionálisak. Kitöltésük a tranzakciók rendszerezését segíti.', + 'transactions_create_split' => 'A tranzakció további szétválasztásához használja ezt a gombot', // create account: - 'accounts_create_iban' => 'Érvényes IBAN hozzáadása a számlához. Ez a jövőben nagyon egyszerűvé teheti az adatok importálását.', - 'accounts_create_asset_opening_balance' => 'Az eszközszámlák rendelkezhetnek egy „nyitó egyenleggel” ami a számla történetének kezdetét jelzi a Firefly III-ban.', - 'accounts_create_asset_currency' => 'A Firefly III több pénznemet támogat. Az eszközszámláknak van egy fő pénzneme, amelyet itt kell beállítani.', - 'accounts_create_asset_virtual' => 'Időnként segíthet egy virtuális egyenleget adni a bankszámlához: ez egy további összeg ami az aktuális egyenleghez mindig hozzáadódik vagy kivonásra kerül.', + 'accounts_create_iban' => 'Érvényes IBAN hozzáadása a számlához. Ez a jövőben nagyon egyszerűvé teheti az adatok importálását.', + 'accounts_create_asset_opening_balance' => 'Az eszközszámlák rendelkezhetnek egy „nyitó egyenleggel” ami a számla történetének kezdetét jelzi a Firefly III-ban.', + 'accounts_create_asset_currency' => 'A Firefly III több pénznemet támogat. Az eszközszámláknak van egy fő pénzneme, amelyet itt kell beállítani.', + 'accounts_create_asset_virtual' => 'Időnként segíthet egy virtuális egyenleget adni a bankszámlához: ez egy további összeg ami az aktuális egyenleghez mindig hozzáadódik vagy kivonásra kerül.', // budgets index - 'budgets_index_intro' => 'A költségkeretek a pénzügyek kezelésére szolgálnak, és a Firefly III egyik alapvető funkcióját képezik.', - 'budgets_index_set_budget' => 'Ha a teljes költségkeret minden időszakra be van állítva, a Firefly III megmondhatja, ha az összes rendelkezésre álló pénz fel lett használva.', - 'budgets_index_see_expenses_bar' => 'A pénzköltés lassan fel fogja tölteni ezt a sávot.', - 'budgets_index_navigate_periods' => 'Az időszakokon átnavigálva könnyedén, még idő előtt be lehet állítani a költségkereteket.', - 'budgets_index_new_budget' => 'Új költségkeretet létrehozása.', - 'budgets_index_list_of_budgets' => 'Ezen a táblán lehet beállítani a költségkeretek összegeit és áttekinteni, hogy hogyan állnak.', - 'budgets_index_outro' => 'A költségkeretek használatáról további információk a jobb felső sarokban található súgó ikon alatt találhatóak.', + 'budgets_index_intro' => 'A költségkeretek a pénzügyek kezelésére szolgálnak, és a Firefly III egyik alapvető funkcióját képezik.', + 'budgets_index_see_expenses_bar' => 'A pénzköltés lassan fel fogja tölteni ezt a sávot.', + 'budgets_index_navigate_periods' => 'Az időszakokon átnavigálva könnyedén, még idő előtt be lehet állítani a költségkereteket.', + 'budgets_index_new_budget' => 'Új költségkeretet létrehozása.', + 'budgets_index_list_of_budgets' => 'Ezen a táblán lehet beállítani a költségkeretek összegeit és áttekinteni, hogy hogyan állnak.', + 'budgets_index_outro' => 'A költségkeretek használatáról további információk a jobb felső sarokban található súgó ikon alatt találhatóak.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Ezek a jelentések részletes betekintést biztosítanak a pénzügyekbe.', - 'reports_index_inputReportType' => 'Jelentéstípus kiválasztása. A súgóoldalakon megtalálható, hogy az egyes jelentések mit mutatnak meg.', - 'reports_index_inputAccountsSelect' => 'Szükség szerint lehet kizárni vagy hozzáadni eszközfiókokat.', - 'reports_index_inputDateRange' => 'Tetszőleges dátumtartományt lehet választani, egy naptól 10 évig.', - 'reports_index_extra-options-box' => 'A kiválasztott jelentéstől függően további szűrők és beállítások választhatóak. Ezek ebben a dobozban fognak megjelenni.', + 'reports_index_intro' => 'Ezek a jelentések részletes betekintést biztosítanak a pénzügyekbe.', + 'reports_index_inputReportType' => 'Jelentéstípus kiválasztása. A súgóoldalakon megtalálható, hogy az egyes jelentések mit mutatnak meg.', + 'reports_index_inputAccountsSelect' => 'Szükség szerint lehet kizárni vagy hozzáadni eszközfiókokat.', + 'reports_index_inputDateRange' => 'Tetszőleges dátumtartomány választható, egy naptól 10 évig vagy akár tovább.', + 'reports_index_extra-options-box' => 'A kiválasztott jelentéstől függően további szűrők és beállítások választhatóak. Ezek ebben a dobozban fognak megjelenni.', // reports (reports) - 'reports_report_default_intro' => 'Ez a jelentés egy gyors és átfogó képet ad a pénzügyekről. Ha bármi másnak szerepelni kéne rajta vedd fel velem a kapcsolatot!', - 'reports_report_audit_intro' => 'Ez a jelentés részletes betekintést nyújt az eszközszámlákba.', - 'reports_report_audit_optionsBox' => 'A jelölőnégyzetek használatával lehet megjeleníteni vagy elrejteni az egyes oszlopokat.', + 'reports_report_default_intro' => 'Ez a jelentés egy gyors és átfogó képet ad a pénzügyekről. Ha bármi másnak szerepelni kéne rajta vedd fel velem a kapcsolatot!', + 'reports_report_audit_intro' => 'Ez a jelentés részletes betekintést nyújt az eszközszámlákba.', + 'reports_report_audit_optionsBox' => 'A jelölőnégyzetek használatával lehet megjeleníteni vagy elrejteni az egyes oszlopokat.', - 'reports_report_category_intro' => 'Ez a jelentés egy vagy több kategóriában nyújt betekintést.', - 'reports_report_category_pieCharts' => 'Ezek a diagramok áttekintést nyújtanak a költségekről és a bevételekről, kategóriánként vagy bankszámlákként.', - 'reports_report_category_incomeAndExpensesChart' => 'Ez a diagram a kategóriákon belüli költségeket és jövedelmeket mutatja.', + 'reports_report_category_intro' => 'Ez a jelentés egy vagy több kategóriában nyújt betekintést.', + 'reports_report_category_pieCharts' => 'Ezek a diagramok áttekintést nyújtanak a költségekről és a bevételekről, kategóriánként vagy bankszámlákként.', + 'reports_report_category_incomeAndExpensesChart' => 'Ez a diagram a kategóriákon belüli költségeket és jövedelmeket mutatja.', - 'reports_report_tag_intro' => 'Ez a jelentés egy vagy több címkébe nyújt betekintést.', - 'reports_report_tag_pieCharts' => 'Ezek a diagramok áttekintést nyújtanak a költségekről és a bevételekről, címkékként, bankszámlákként, kategóriákként vagy költségkeretenként.', - 'reports_report_tag_incomeAndExpensesChart' => 'Ez a diagram a kiadásokat és a bevételeket mutatja címkék szerint.', + 'reports_report_tag_intro' => 'Ez a jelentés egy vagy több címkébe nyújt betekintést.', + 'reports_report_tag_pieCharts' => 'Ezek a diagramok áttekintést nyújtanak a költségekről és a bevételekről, címkékként, bankszámlákként, kategóriákként vagy költségkeretenként.', + 'reports_report_tag_incomeAndExpensesChart' => 'Ez a diagram a kiadásokat és a bevételeket mutatja címkék szerint.', 'reports_report_budget_intro' => 'Ez a jelentés betekintést nyújt egy vagy több költségkeretbe.', 'reports_report_budget_pieCharts' => 'Ezek a diagramok betekintést nyújtanak a költségekbe költségkeretenként vagy számlánként.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'A folyamatsáv mellett két gomb található (+ és -) melyekkel pénzt lehet a malacperselyekbe betenni vagy kivenni onnan.', 'piggy-banks_index_accountStatus' => 'A legalább egy malacpersellyel rendelkező eszközszámlák állapota ebben a listában jelenik meg.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Mi a cél? Egy új kanapé, egy kamera, pénz a vészhelyzetekre?', 'piggy-banks_create_date' => 'A malacperselyhez meg kell adni egy céldátumot vagy egy határidőt.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'A számlákkal lehet nyomon követni az egyes időszakokban fizetendő pénzösszegeket. Ezek lehetnek bérleti, biztosítási vagy jelzálog díjak.', 'bills_create_name' => 'Érdemes leíró nevet használni, mint például a „Bérleti díj” vagy "Egészségbiztosítás".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Ki kell választani egy minimális és egy maximális összeget ehhez a számlához.', 'bills_create_repeat_freq_holder' => 'A legtöbb számla havonta ismétlődik, de más rendszeresség is beállítható.', 'bills_create_skip_holder' => 'Ha egy számla 2 hetente ismétlődik, akkor a „kihagyás” mezőt „1”-re kell állítani, hogy minden második hetet kihagyja.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Ezzel a gombbal meg lehet nézni, hogy mely tranzakciók felelnek meg a szabálynak.', 'rules_create_actions' => 'Bármennyi műveletet be lehet állítani.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'A fülek mögött több beállítása lehetőség áll rendelkezésre.', diff --git a/resources/lang/hu_HU/list.php b/resources/lang/hu_HU/list.php index 4a2cb551d5..9849f673f1 100644 --- a/resources/lang/hu_HU/list.php +++ b/resources/lang/hu_HU/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Gombok', - 'icon' => 'Ikon', - 'id' => 'Azonosító', - 'create_date' => 'Létrehozva:', - 'update_date' => 'Frissítve:', - 'updated_at' => 'Frissítve:', - 'balance_before' => 'Egyenleg előtte', - 'balance_after' => 'Egyenleg utána', - 'name' => 'Név', - 'role' => 'Szerepkör', - 'currentBalance' => 'Aktuális egyenleg', - 'linked_to_rules' => 'Vonatkozó szabályok', - 'active' => 'Aktív?', - 'percentage' => '%', - 'recurring_transaction' => 'Ismétlődő tranzakció', - 'next_due' => 'Következő esedékesség', - 'transaction_type' => 'Típus', - 'lastActivity' => 'Utolsó aktivitás', - 'balanceDiff' => 'Egyenleg különbség', - 'other_meta_data' => 'Egyéb metaadat', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Bankszámla típusa', - 'created_at' => 'Létrehozva', - 'account' => 'Bankszámla', - 'external_url' => 'External URL', - 'matchingAmount' => 'Összeg', - 'destination' => 'Cél', - 'source' => 'Forrás', - 'next_expected_match' => 'Következő várható egyezés', - 'automatch' => 'Automatikus egyezés?', + 'buttons' => 'Gombok', + 'icon' => 'Ikon', + 'id' => 'Azonosító', + 'create_date' => 'Létrehozva:', + 'update_date' => 'Frissítve:', + 'updated_at' => 'Frissítve:', + 'balance_before' => 'Egyenleg előtte', + 'balance_after' => 'Egyenleg utána', + 'name' => 'Név', + 'role' => 'Szerepkör', + 'currentBalance' => 'Aktuális egyenleg', + 'linked_to_rules' => 'Vonatkozó szabályok', + 'active' => 'Aktív?', + 'percentage' => '%', + 'recurring_transaction' => 'Ismétlődő tranzakció', + 'next_due' => 'Következő esedékesség', + 'transaction_type' => 'Típus', + 'lastActivity' => 'Utolsó aktivitás', + 'balanceDiff' => 'Egyenleg különbség', + 'other_meta_data' => 'Egyéb metaadat', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => 'Bankszámla típusa', + 'created_at' => 'Létrehozva', + 'account' => 'Bankszámla', + 'external_url' => 'External URL', + 'matchingAmount' => 'Összeg', + 'destination' => 'Cél', + 'source' => 'Forrás', + 'next_expected_match' => 'Következő várható egyezés', + 'automatch' => 'Automatikus egyezés?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Ismétlődések', 'description' => 'Leírás', 'amount' => 'Összeg', @@ -98,7 +96,7 @@ return [ 'to' => 'Hova', 'budget' => 'Költségkeret', 'category' => 'Kategória', - 'bill' => 'Számla', + 'bill' => 'Fizetendő számla', 'withdrawal' => 'Költség', 'deposit' => 'Bevétel', 'transfer' => 'Átvezetés', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Bunq fiók', 'file_name' => 'Fájlnév', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Fájl méret', - 'file_type' => 'Fájltípus', - 'attached_to' => 'Csatolva', - 'file_exists' => 'Létező fájl', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Legutóbbi bejelentkezés', - 'spectre_status' => 'Állapot', - 'bunq_payment_id' => 'bunq fizetési azonosító', - 'repetitions' => 'Ismétlődések', - 'title' => 'Cím', - 'transaction_s' => 'Tranzakciók', - 'field' => 'Mező', - 'value' => 'Érték', - 'interest' => 'Kamat', - 'interest_period' => 'Interest period', - 'liability_type' => 'A kötelezettség típusa', - 'liability_direction' => 'Liability in/out', - 'end_date' => 'End date', - 'payment_info' => 'Payment information', - 'expected_info' => 'Next expected transaction', - 'start_date' => 'Start date', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Fájl méret', + 'file_type' => 'Fájltípus', + 'attached_to' => 'Csatolva', + 'file_exists' => 'Létező fájl', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Legutóbbi bejelentkezés', + 'spectre_status' => 'Állapot', + 'bunq_payment_id' => 'bunq fizetési azonosító', + 'repetitions' => 'Ismétlődések', + 'title' => 'Cím', + 'transaction_s' => 'Tranzakciók', + 'field' => 'Mező', + 'value' => 'Érték', + 'interest' => 'Kamat', + 'interest_period' => 'Interest period', + 'liability_type' => 'A kötelezettség típusa', + 'liability_direction' => 'Liability in/out', + 'end_date' => 'End date', + 'payment_info' => 'Payment information', + 'expected_info' => 'Next expected transaction', + 'start_date' => 'Start date', + 'trigger' => 'Trigger', + 'response' => 'Response', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/hu_HU/pagination.php b/resources/lang/hu_HU/pagination.php index c553b662ee..c9124a393e 100644 --- a/resources/lang/hu_HU/pagination.php +++ b/resources/lang/hu_HU/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/hu_HU/passwords.php b/resources/lang/hu_HU/passwords.php index 75c9b75716..b67aac68f8 100644 --- a/resources/lang/hu_HU/passwords.php +++ b/resources/lang/hu_HU/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/hu_HU/rules.php b/resources/lang/hu_HU/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/hu_HU/rules.php +++ b/resources/lang/hu_HU/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/hu_HU/validation.php b/resources/lang/hu_HU/validation.php index 05f97e33c0..4b18951a06 100644 --- a/resources/lang/hu_HU/validation.php +++ b/resources/lang/hu_HU/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'Ez nem egy érvényes IBAN számlaszám.', - 'zero_or_more' => 'Az érték nem lehet negatív.', - 'date_or_time' => 'Az értéknek érvényes dátum vagy időformátumúnak kell lennie (ISO 8601).', - 'source_equals_destination' => 'A forrásszámla egyenlő a célszámlával.', - 'unique_account_number_for_user' => 'Úgy tűnik, hogy ez a számlaszám már használatban van.', - 'unique_iban_for_user' => 'Úgy tűnik, hogy ez a számlaszám már használatban van.', - 'deleted_user' => 'Biztonsági megkötések miatt ezzel az email címmel nem lehet regisztrálni.', - 'rule_trigger_value' => 'Ez az érték érvénytelen a kiválasztott eseményindítóhoz.', - 'rule_action_value' => 'Ez az érték érvénytelen a kiválasztott művelethez.', - 'file_already_attached' => 'A feltöltött ":name" fájl már csatolva van ehhez az objektumhoz.', - 'file_attached' => '":name" fájl sikeresen feltöltve.', - 'must_exist' => 'Az ID mező :attribute nem létezik az adatbázisban.', - 'all_accounts_equal' => 'Ebben a mezőben minden számlának meg kell egyeznie.', - 'group_title_mandatory' => 'A csoportcím kötelező ha egynél több tranzakció van.', - 'transaction_types_equal' => 'Minden felosztásnak ugyanolyan típusúnak kell lennie.', - 'invalid_transaction_type' => 'Érvénytelen tranzakciótípus.', - 'invalid_selection' => 'Érvénytelen kiválasztás.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Legalább egy tranzakció szükséges.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Legalább egy ismétlés szükséges.', - 'require_repeat_until' => 'Legalább egy ismétlésszám vagy egy végdátum (repeat_until) kötelező. Csak az egyik.', - 'require_currency_info' => 'Ennek a mezőnek a tartalma érvénytelen pénznem információ nélkül.', - 'not_transfer_account' => 'Ez a fiók nem használható fel tranzakciókhoz.', - 'require_currency_amount' => 'Ennek a mezőnek a tartalma érvénytelen devizanem információ nélkül.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'A tranzakció leírása nem egyezhet meg a globális leírással.', - 'file_invalid_mime' => '":name" fájl ":mime" típusú ami nem lehet új feltöltés.', - 'file_too_large' => '":name" fájl túl nagy.', - 'belongs_to_user' => ':attribute értéke ismeretlen.', - 'accepted' => ':attribute attribútumot el kell fogadni.', - 'bic' => 'Ez nem egy érvényes BIC.', - 'at_least_one_trigger' => 'A szabályban legalább egy eseményindítónak lennie kell.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'A szabályban legalább egy műveletnek lennie kell.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'Ez nem érvényes base64 kódolású adat.', - 'model_id_invalid' => 'A megadott azonosító érvénytelennek tűnik ehhez a modellhez.', - 'less' => ':attribute kisebbnek kell lennie 10,000,000-nél', - 'active_url' => ':attribute nem egy érvényes URL.', - 'after' => ':attribute egy :date utáni dátum kell legyen.', - 'date_after' => 'The start date must be before the end date.', - 'alpha' => ':attribute csak betűket tartalmazhat.', - 'alpha_dash' => ':attribute csak számokat, betűket és kötőjeleket tartalmazhat.', - 'alpha_num' => ':attribute csak betűket és számokat tartalmazhat.', - 'array' => ':attribute egy tömb kell legyen.', - 'unique_for_user' => ':attribute attribútumhoz már van bejegyzés.', - 'before' => ':attribute csak :date előtti dátum lehet.', - 'unique_object_for_user' => 'A név már használatban van.', - 'unique_account_for_user' => 'Ez a fióknév már használatban van.', + 'bad_type_source' => 'A Firefly III nem tudja eldönteni a tranzakció típusát a forrásszámla alapján.', + 'bad_type_destination' => 'A Firefly III nem tudja eldönteni a tranzakció típusát a célszámla alapján.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => 'Ez nem egy érvényes IBAN számlaszám.', + 'zero_or_more' => 'Az érték nem lehet negatív.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'Az érték nulla vagy nagyobb lehet.', + 'no_asset_account' => 'Ez nem egy eszközszámla.', + 'date_or_time' => 'Az értéknek érvényes dátum vagy időformátumúnak kell lennie (ISO 8601).', + 'source_equals_destination' => 'A forrásszámla egyenlő a célszámlával.', + 'unique_account_number_for_user' => 'Úgy tűnik, hogy ez a számlaszám már használatban van.', + 'unique_iban_for_user' => 'Úgy tűnik, hogy ez a számlaszám már használatban van.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Biztonsági megkötések miatt ezzel az email címmel nem lehet regisztrálni.', + 'rule_trigger_value' => 'Ez az érték érvénytelen a kiválasztott eseményindítóhoz.', + 'rule_action_value' => 'Ez az érték érvénytelen a kiválasztott művelethez.', + 'file_already_attached' => 'A feltöltött ":name" fájl már csatolva van ehhez az objektumhoz.', + 'file_attached' => '":name" fájl sikeresen feltöltve.', + 'must_exist' => 'Az ID mező :attribute nem létezik az adatbázisban.', + 'all_accounts_equal' => 'Ebben a mezőben minden számlának meg kell egyeznie.', + 'group_title_mandatory' => 'A csoportcím kötelező ha egynél több tranzakció van.', + 'transaction_types_equal' => 'Minden felosztásnak ugyanolyan típusúnak kell lennie.', + 'invalid_transaction_type' => 'Érvénytelen tranzakciótípus.', + 'invalid_selection' => 'Érvénytelen kiválasztás.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Legalább egy tranzakció szükséges.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Legalább egy ismétlés szükséges.', + 'require_repeat_until' => 'Legalább egy ismétlésszám vagy egy végdátum (repeat_until) kötelező. Csak az egyik.', + 'require_currency_info' => 'Ennek a mezőnek a tartalma érvénytelen pénznem információ nélkül.', + 'not_transfer_account' => 'Ez a fiók nem használható fel tranzakciókhoz.', + 'require_currency_amount' => 'Ennek a mezőnek a tartalma érvénytelen devizanem információ nélkül.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'A tranzakció leírása nem egyezhet meg a globális leírással.', + 'file_invalid_mime' => '":name" fájl ":mime" típusú ami nem lehet új feltöltés.', + 'file_too_large' => '":name" fájl túl nagy.', + 'belongs_to_user' => ':attribute értéke ismeretlen.', + 'accepted' => ':attribute attribútumot el kell fogadni.', + 'bic' => 'Ez nem egy érvényes BIC.', + 'at_least_one_trigger' => 'A szabályban legalább egy eseményindítónak lennie kell.', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => 'A szabályban legalább egy műveletnek lennie kell.', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => 'Ez nem érvényes base64 kódolású adat.', + 'model_id_invalid' => 'A megadott azonosító érvénytelennek tűnik ehhez a modellhez.', + 'less' => ':attribute kisebbnek kell lennie 10,000,000-nél', + 'active_url' => ':attribute nem egy érvényes URL.', + 'after' => ':attribute egy :date utáni dátum kell legyen.', + 'date_after' => 'The start date must be before the end date.', + 'alpha' => ':attribute csak betűket tartalmazhat.', + 'alpha_dash' => ':attribute csak számokat, betűket és kötőjeleket tartalmazhat.', + 'alpha_num' => ':attribute csak betűket és számokat tartalmazhat.', + 'array' => ':attribute egy tömb kell legyen.', + 'unique_for_user' => ':attribute attribútumhoz már van bejegyzés.', + 'before' => ':attribute csak :date előtti dátum lehet.', + 'unique_object_for_user' => 'A név már használatban van.', + 'unique_account_for_user' => 'Ez a fióknév már használatban van.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute :min és :max között kell legyen.', + 'between.file' => ':attribute :min és :max kilobájt között kell legyen.', + 'between.string' => ':attribute :min és :max karakter között kell legyen.', + 'between.array' => ':attribute :min és :max elem között kell legyen.', + 'boolean' => ':attribute mező csak igaz vagy hamis lehet.', + 'confirmed' => 'A :attribute ellenörzés nem egyezik.', + 'date' => ':attribute nem egy érvényes dátum.', + 'date_format' => ':attribute nem egyezik :format formátummal.', + 'different' => ':attribute és :other különböző kell legyen.', + 'digits' => ':attribute :digits számjegy kell legyen.', + 'digits_between' => ':attribute :min és :max számjegy között kell legyen.', + 'email' => ':attribute érvényes email cím kell legyen.', + 'filled' => ':attribute mező kötelező.', + 'exists' => 'A kiválasztott :attribute étvénytelen.', + 'image' => ':attribute kép kell legyen.', + 'in' => 'A kiválasztott :attribute étvénytelen.', + 'integer' => ':attribute csak egész szám lehet.', + 'ip' => ':attribute érvényes IP cím kell legyen.', + 'json' => ':attribute érvényes JSON karakterlánc kell legyen.', + 'max.numeric' => ':attribute nem lehet nagyobb, mint :max.', + 'max.file' => ':attribute nem lehet nagyobb, mint :max kilobájt.', + 'max.string' => ':attribute nem lehet nagyobb, mint :max karakter.', + 'max.array' => ':attribute nem lehet több, mint :max elem.', + 'mimes' => 'A :attribute ilyen fájl típusnak kell lennie: :values.', + 'min.numeric' => 'A :attribute legalább :min kell lenni.', + 'lte.numeric' => ':attribute attribútumnak :value értéknél kevesebbnek vagy vele egyenlőnek kell lennie.', + 'min.file' => ':attribute legalább :min kilobájt kell legyen.', + 'min.string' => ':attribute legalább :min karakter kell legyen.', + 'min.array' => ':attribute legalább :min elem kell legyen.', + 'not_in' => 'A kiválasztott :attribute étvénytelen.', + 'numeric' => ':attribute szám kell legyen.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'A natív értéknek számnak kell lennie.', + 'numeric_destination' => 'A cél mennyiségnek számnak kell lennie.', + 'numeric_source' => 'A forrás mennyiségnek számnak kell lennie.', + 'regex' => ':attribute attribútum formátuma érvénytelen.', + 'required' => ':attribute mező kötelező.', + 'required_if' => ':attribute mező kötelező, ha :other :value.', + 'required_unless' => ':attribute mező kötelező, kivéve ha :other szerepel itt: :values.', + 'required_with' => ':attribute attribútum mező kötelező ha jelen van :values.', + 'required_with_all' => ':attribute attribútum mező kötelező ha jelen van :values.', + 'required_without' => ':attribute mező kötelező, ha :values nincs jelen.', + 'required_without_all' => ':attribute mező kötelező, ha :values közül egy sincs jelen.', + 'same' => ':attribute és :other meg kell egyezzenek.', + 'size.numeric' => ':attribute attribútumnak :size méretűnek kell lennie.', + 'amount_min_over_max' => 'A minimum mennyiség nem lehet nagyobb mint a maximális mennyiség.', + 'size.file' => ':attribute :size kilobájt kell legyen.', + 'size.string' => ':attribute :size karakter kell legyen.', + 'size.array' => ':attribute :size elemet kell, hogy tartalmazzon.', + 'unique' => ':attribute már foglalt.', + 'string' => ':attribute egy karakterlánc kell legyen.', + 'url' => ':attribute attribútum formátuma érvénytelen.', + 'timezone' => ':attribute érvényes zóna kell legyen.', + '2fa_code' => ':attribute mező érvénytelen.', + 'dimensions' => ':attribute attribútum képfelbontása érvénytelen.', + 'distinct' => ':attribute mezőben duplikált érték van.', + 'file' => ':attribute egy fájl kell legyen.', + 'in_array' => ':attribute nem létezik itt: :other.', + 'present' => ':attribute mezőnek jelen kell lennie.', + 'amount_zero' => 'A teljes mennyiség nem lehet nulla.', + 'current_target_amount' => 'A megadott értéknek kevesebbnek kell lennie, mint a célérték.', + 'unique_piggy_bank_for_user' => 'A malacpersely nevének egyedinek kell lennie.', + 'unique_object_group' => 'Csoport neve már foglalt', + 'starts_with' => 'The value must start with :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Both accounts must be of the same account type', + 'same_account_currency' => 'Both accounts must have the same currency setting', - 'between.numeric' => ':attribute :min és :max között kell legyen.', - 'between.file' => ':attribute :min és :max kilobájt között kell legyen.', - 'between.string' => ':attribute :min és :max karakter között kell legyen.', - 'between.array' => ':attribute :min és :max elem között kell legyen.', - 'boolean' => ':attribute mező csak igaz vagy hamis lehet.', - 'confirmed' => 'A :attribute ellenörzés nem egyezik.', - 'date' => ':attribute nem egy érvényes dátum.', - 'date_format' => ':attribute nem egyezik :format formátummal.', - 'different' => ':attribute és :other különböző kell legyen.', - 'digits' => ':attribute :digits számjegy kell legyen.', - 'digits_between' => ':attribute :min és :max számjegy között kell legyen.', - 'email' => ':attribute érvényes email cím kell legyen.', - 'filled' => ':attribute mező kötelező.', - 'exists' => 'A kiválasztott :attribute étvénytelen.', - 'image' => ':attribute kép kell legyen.', - 'in' => 'A kiválasztott :attribute étvénytelen.', - 'integer' => ':attribute csak egész szám lehet.', - 'ip' => ':attribute érvényes IP cím kell legyen.', - 'json' => ':attribute érvényes JSON karakterlánc kell legyen.', - 'max.numeric' => ':attribute nem lehet nagyobb, mint :max.', - 'max.file' => ':attribute nem lehet nagyobb, mint :max kilobájt.', - 'max.string' => ':attribute nem lehet nagyobb, mint :max karakter.', - 'max.array' => ':attribute nem lehet több, mint :max elem.', - 'mimes' => 'A :attribute ilyen fájl típusnak kell lennie: :values.', - 'min.numeric' => 'A :attribute legalább :min kell lenni.', - 'lte.numeric' => ':attribute attribútumnak :value értéknél kevesebbnek vagy vele egyenlőnek kell lennie.', - 'min.file' => ':attribute legalább :min kilobájt kell legyen.', - 'min.string' => ':attribute legalább :min karakter kell legyen.', - 'min.array' => ':attribute legalább :min elem kell legyen.', - 'not_in' => 'A kiválasztott :attribute étvénytelen.', - 'numeric' => ':attribute szám kell legyen.', - 'numeric_native' => 'A natív értéknek számnak kell lennie.', - 'numeric_destination' => 'A cél mennyiségnek számnak kell lennie.', - 'numeric_source' => 'A forrás mennyiségnek számnak kell lennie.', - 'regex' => ':attribute attribútum formátuma érvénytelen.', - 'required' => ':attribute mező kötelező.', - 'required_if' => ':attribute mező kötelező, ha :other :value.', - 'required_unless' => ':attribute mező kötelező, kivéve ha :other szerepel itt: :values.', - 'required_with' => ':attribute attribútum mező kötelező ha jelen van :values.', - 'required_with_all' => ':attribute attribútum mező kötelező ha jelen van :values.', - 'required_without' => ':attribute mező kötelező, ha :values nincs jelen.', - 'required_without_all' => ':attribute mező kötelező, ha :values közül egy sincs jelen.', - 'same' => ':attribute és :other meg kell egyezzenek.', - 'size.numeric' => ':attribute attribútumnak :size méretűnek kell lennie.', - 'amount_min_over_max' => 'A minimum mennyiség nem lehet nagyobb mint a maximális mennyiség.', - 'size.file' => ':attribute :size kilobájt kell legyen.', - 'size.string' => ':attribute :size karakter kell legyen.', - 'size.array' => ':attribute :size elemet kell, hogy tartalmazzon.', - 'unique' => ':attribute már foglalt.', - 'string' => ':attribute egy karakterlánc kell legyen.', - 'url' => ':attribute attribútum formátuma érvénytelen.', - 'timezone' => ':attribute érvényes zóna kell legyen.', - '2fa_code' => ':attribute mező érvénytelen.', - 'dimensions' => ':attribute attribútum képfelbontása érvénytelen.', - 'distinct' => ':attribute mezőben duplikált érték van.', - 'file' => ':attribute egy fájl kell legyen.', - 'in_array' => ':attribute nem létezik itt: :other.', - 'present' => ':attribute mezőnek jelen kell lennie.', - 'amount_zero' => 'A teljes mennyiség nem lehet nulla.', - 'current_target_amount' => 'A megadott értéknek kevesebbnek kell lennie, mint a célérték.', - 'unique_piggy_bank_for_user' => 'A malacpersely nevének egyedinek kell lennie.', - 'unique_object_group' => 'Csoport neve már foglalt', - 'starts_with' => 'The value must start with :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Both accounts must be of the same account type', - 'same_account_currency' => 'Both accounts must have the same currency setting', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Ez nem biztonságos jelszó. Kérlek próbáld meg újra. További információért lásd: https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Érvénytelen ismétléstípus az ismétlődő tranzakciókhoz.', - 'valid_recurrence_rep_moment' => 'Érvénytelen ismétlési időpont ehhez az ismétléstípushoz.', - 'invalid_account_info' => 'Érvénytelen számlainformáció.', - 'attributes' => [ + 'secure_password' => 'Ez nem biztonságos jelszó. Kérlek próbáld meg újra. További információért lásd: https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Érvénytelen ismétléstípus az ismétlődő tranzakciókhoz.', + 'valid_recurrence_rep_moment' => 'Érvénytelen ismétlési időpont ehhez az ismétléstípushoz.', + 'invalid_account_info' => 'Érvénytelen számlainformáció.', + 'attributes' => [ 'email' => 'email cím', 'description' => 'leírás', 'amount' => 'összeg', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Egy érvényes forrásszámla azonosító és/vagy egy érvényes forrásszámla név kell a folytatáshoz.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Nem található érvényes célszámla ":id" azonosító vagy ":name" név keresésekor.', + 'withdrawal_source_need_data' => 'Egy érvényes forrásszámla azonosító és/vagy egy érvényes forrásszámla név kell a folytatáshoz.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Nem található érvényes célszámla ":id" azonosító vagy ":name" név keresésekor.', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Egy érvényes forrásszámla azonosító és/vagy egy érvényes forrásszámla név kell a folytatáshoz.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Nem található érvényes célszámla ":id" azonosító vagy ":name" név keresésekor.', - 'deposit_dest_wrong_type' => 'A beküldött célfiók nem megfelelő típusú.', + 'deposit_source_need_data' => 'Egy érvényes forrásszámla azonosító és/vagy egy érvényes forrásszámla név kell a folytatáshoz.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Nem található érvényes célszámla ":id" azonosító vagy ":name" név keresésekor.', + 'deposit_dest_wrong_type' => 'A beküldött célfiók nem megfelelő típusú.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Egy érvényes forrásszámla azonosító és/vagy egy érvényes forrásszámla név kell a folytatáshoz.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Nem található érvényes célszámla ":id" azonosító vagy ":name" név keresésekor.', + 'need_id_in_edit' => 'Minden felosztásnak rendelkeznie kell "transaction_journal_id"-val (lehet érvényes érték vagy 0).', - 'transfer_source_need_data' => 'Egy érvényes forrásszámla azonosító és/vagy egy érvényes forrásszámla név kell a folytatáshoz.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Nem található érvényes célszámla ":id" azonosító vagy ":name" név keresésekor.', - 'need_id_in_edit' => 'Minden felosztásnak rendelkeznie kell "transaction_journal_id"-val (lehet érvényes érték vagy 0).', + 'ob_source_need_data' => 'Egy érvényes forrásszámla azonosító és/vagy egy érvényes forrásszámla név kell a folytatáshoz.', + 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Nem található érvényes célszámla ":id" azonosító vagy ":name" név keresésekor.', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Egy érvényes forrásszámla azonosító és/vagy egy érvényes forrásszámla név kell a folytatáshoz.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Nem található érvényes célszámla ":id" azonosító vagy ":name" név keresésekor.', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Nem használhatod ezt a fiókot forrásfiókként.', + 'generic_invalid_destination' => 'Nem használhatod ezt a fiókot célfiókként.', - 'generic_invalid_source' => 'Nem használhatod ezt a fiókot forrásfiókként.', - 'generic_invalid_destination' => 'Nem használhatod ezt a fiókot célfiókként.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => ':attribute attribútumnak :value értéknél nagyobbnak vagy vele egyenlőnek kell lennie.', - 'gt.numeric' => 'A(z) :attribute nagyobb kell, hogy legyen, mint :value.', - 'gte.file' => ':attribute attribútumnak :value kilobájtnál nagyobb vagy egyenlőnek kell lennie.', - 'gte.string' => ':attribute attribútumnak :value karakternél nagyobb vagy egyenlőnek kell lennie.', - 'gte.array' => 'A(z) :attribute legalább :value elemet kell, hogy tartalmazzon.', + 'gte.numeric' => ':attribute attribútumnak :value értéknél nagyobbnak vagy vele egyenlőnek kell lennie.', + 'gt.numeric' => 'A(z) :attribute nagyobb kell, hogy legyen, mint :value.', + 'gte.file' => ':attribute attribútumnak :value kilobájtnál nagyobb vagy egyenlőnek kell lennie.', + 'gte.string' => ':attribute attribútumnak :value karakternél nagyobb vagy egyenlőnek kell lennie.', + 'gte.array' => 'A(z) :attribute legalább :value elemet kell, hogy tartalmazzon.', 'amount_required_for_auto_budget' => 'Az összeg kötelező.', 'auto_budget_amount_positive' => 'Az értéknek nagyobbnak kell lennie nullánál.', + 'auto_budget_period_mandatory' => 'Az auto költségvetési periódus kötelező mező.', // no access to administration: diff --git a/resources/lang/id_ID/api.php b/resources/lang/id_ID/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/id_ID/api.php +++ b/resources/lang/id_ID/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/id_ID/auth.php b/resources/lang/id_ID/auth.php index 17569e7297..51192e78e3 100644 --- a/resources/lang/id_ID/auth.php +++ b/resources/lang/id_ID/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Kredensial ini tidak sesuai dengan catatan kami.', 'throttle' => 'Terlalu banyak upaya login. Silakan coba lagi dalam :seconds detik.', diff --git a/resources/lang/id_ID/breadcrumbs.php b/resources/lang/id_ID/breadcrumbs.php index 7f09fd8ca5..0fec5f4899 100644 --- a/resources/lang/id_ID/breadcrumbs.php +++ b/resources/lang/id_ID/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Beranda', - 'budgets' => 'Anggaran', - 'subscriptions' => 'Langganan', - 'transactions' => 'Transaksi', - 'title_expenses' => 'Pengeluaran', - 'title_withdrawal' => 'Pengeluaran', - 'title_revenue' => 'Penghasilan / pendapatan', - 'title_deposit' => 'Penghasilan / pendapatan', - 'title_transfer' => 'Transfer', - 'title_transfers' => 'Transfer', - 'edit_currency' => 'Edit mata uang ":name"', - 'delete_currency' => 'Hapus mata uang ":name"', - 'newPiggyBank' => 'Buat celengan baru', - 'edit_piggyBank' => 'Edit celengan ":name"', - 'preferences' => 'Preferensi', - 'profile' => 'Profil', - 'accounts' => 'Rekening', - 'changePassword' => 'Ubah kata sandi Anda', - 'change_email' => 'Ubah alamat email anda', - 'bills' => 'Tagihan', - 'newBill' => 'Tagihan baru', - 'edit_bill' => 'Edit tagihan ":name"', - 'delete_bill' => 'Hapus tagihan ":name"', - 'reports' => 'Laporan', - 'search_result' => 'Hasil pencarian untuk ":query"', - 'withdrawal_list' => 'Pengeluaran', - 'Withdrawal_list' => 'Pengeluaran', - 'deposit_list' => 'Pendapatan, pemasukan, dan deposit', - 'transfer_list' => 'Transfer', - 'transfers_list' => 'Transfer', + 'home' => 'Beranda', + 'budgets' => 'Anggaran', + 'subscriptions' => 'Langganan', + 'transactions' => 'Transaksi', + 'title_expenses' => 'Pengeluaran', + 'title_withdrawal' => 'Pengeluaran', + 'title_revenue' => 'Penghasilan / pendapatan', + 'title_deposit' => 'Penghasilan / pendapatan', + 'title_transfer' => 'Transfer', + 'title_transfers' => 'Transfer', + 'edit_currency' => 'Edit mata uang ":name"', + 'delete_currency' => 'Hapus mata uang ":name"', + 'newPiggyBank' => 'Buat celengan baru', + 'edit_piggyBank' => 'Edit celengan ":name"', + 'preferences' => 'Preferensi', + 'profile' => 'Profil', + 'accounts' => 'Rekening', + 'changePassword' => 'Ubah kata sandi Anda', + 'change_email' => 'Ubah alamat email anda', + 'bills' => 'Tagihan', + 'newBill' => 'Tagihan baru', + 'edit_bill' => 'Edit tagihan ":name"', + 'delete_bill' => 'Hapus tagihan ":name"', + 'reports' => 'Laporan', + 'search_result' => 'Hasil pencarian untuk ":query"', + 'withdrawal_list' => 'Pengeluaran', + 'Withdrawal_list' => 'Pengeluaran', + 'deposit_list' => 'Pendapatan, pemasukan, dan deposit', + 'transfer_list' => 'Transfer', + 'transfers_list' => 'Transfer', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Penyesuaian', 'create_withdrawal' => 'Buat penarikan baru', 'create_deposit' => 'Buat deposit baru', diff --git a/resources/lang/id_ID/components.php b/resources/lang/id_ID/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/id_ID/components.php +++ b/resources/lang/id_ID/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/id_ID/config.php b/resources/lang/id_ID/config.php index e9f458c928..25f6ba4a7f 100644 --- a/resources/lang/id_ID/config.php +++ b/resources/lang/id_ID/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'id', - 'locale' => 'id, Bahasa Indonesia, id_ID.utf8, id_ID.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'id', + 'locale' => 'id, Bahasa Indonesia, id_ID.utf8, id_ID.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, YYYY', - 'month_and_day_fns' => 'd MMMM, y', - 'month_and_day_js' => 'DD MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, YYYY', + 'month_and_day_fns' => 'd MMMM, y', + 'month_and_day_js' => 'DD MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd, Do MMMM YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd, Do MMMM YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'Do MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'Do MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'DD MMMM YYYY, @ HH:mm:ss', + 'date_time_fns' => 'do MMMM yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'DD MMMM YYYY, @ HH:mm:ss', - 'date_time_fns' => 'do MMMM yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Mingguan' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Mingguan' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Senin', - 'dow_2' => 'Selasa', - 'dow_3' => 'Rabu', - 'dow_4' => 'Kamis', - 'dow_5' => 'Jumat', - 'dow_6' => 'Sabtu', - 'dow_7' => 'Minggu', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Senin', + 'dow_2' => 'Selasa', + 'dow_3' => 'Rabu', + 'dow_4' => 'Kamis', + 'dow_5' => 'Jumat', + 'dow_6' => 'Sabtu', + 'dow_7' => 'Minggu', ]; /* diff --git a/resources/lang/id_ID/demo.php b/resources/lang/id_ID/demo.php index 5fddc4ba1e..e336c41518 100644 --- a/resources/lang/id_ID/demo.php +++ b/resources/lang/id_ID/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/id_ID/email.php b/resources/lang/id_ID/email.php index daff51fc74..bfb847ab24 100644 --- a/resources/lang/id_ID/email.php +++ b/resources/lang/id_ID/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Sebuah pesan tes dari instalasi Firefly III Anda', 'admin_test_body' => 'Ini adalah sebuah pesan tes dari instans Firefly III Anda. Pesan ini dikirim ke :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Undangan telah terkirim', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Atur ulang kata sandi:', 'registered_doc_link' => 'Dokumentasi:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'A new Firefly III version is available', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Jika Anda mau, Anda juga dapat membuka isu baru di https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Jejak tumpukan lengkap ada di bawah:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III telah membuat transaksi baru|Firefly III telah membuat :count transaksi baru', 'new_journals_header' => 'Firefly III telah membuat transaksi untuk Anda. Anda dapat menemukannya di instalasi Firefly III Anda:|Firefly telah membuat :count transaksi untuk Anda. Anda dapat menemukannya di instalasi Firefly III Anda:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/id_ID/errors.php b/resources/lang/id_ID/errors.php index e0bca916ac..da0d0c5f98 100644 --- a/resources/lang/id_ID/errors.php +++ b/resources/lang/id_ID/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Tumpukan jejak', 'more_info' => 'Informasi lebih lanjut', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Silakan ambil informasi lebih lanjut di direktoristorage/logs di mana Anda dapat menemukan file log. Jika Anda menggunakan Docker, gunakan docker logs -f [container].', - 'collect_info_more' => 'Anda dapat membaca lebih lanjut dalam mengumpulkan informasi kesalahan di Pertanyaan yang sering diajukan.', - 'github_help' => 'Dapatkan bantuan di GitHub', - 'github_instructions' => 'Anda sangat diperbolehkan untuk membuka isu baru di GitHub.', - 'use_search' => 'Gunakan pencarian!', - 'include_info' => 'Sertakan informasi dari halaman debug ini.', - 'tell_more' => 'Beri tahu kami selain "kata Whoops!"', - 'include_logs' => 'Sertakan log kesalahan (lihat di atas).', - 'what_did_you_do' => 'Beritahu kami apa yang anda lakukan.', - 'offline_header' => 'Anda sedang luring', - 'offline_unreachable' => 'Firefly III tidak dapat dijangkau. Perangkat anda kemungkinan luring atau server sedang tidak bekerja.', - 'offline_github' => 'Jika anda yakin perangkat anda dan server dalam keadaan daring, mohon buat tiket isu di GitHub.', - + 'collect_info' => 'Silakan ambil informasi lebih lanjut di direktoristorage/logs di mana Anda dapat menemukan file log. Jika Anda menggunakan Docker, gunakan docker logs -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Dapatkan bantuan di GitHub', + 'github_instructions' => 'Anda sangat diperbolehkan untuk membuka isu baru di GitHub.', + 'use_search' => 'Gunakan pencarian!', + 'include_info' => 'Sertakan informasi dari halaman debug ini.', + 'tell_more' => 'Beri tahu kami selain "kata Whoops!"', + 'include_logs' => 'Sertakan log kesalahan (lihat di atas).', + 'what_did_you_do' => 'Beritahu kami apa yang anda lakukan.', + 'offline_header' => 'Anda sedang luring', + 'offline_unreachable' => 'Firefly III tidak dapat dijangkau. Perangkat anda kemungkinan luring atau server sedang tidak bekerja.', + 'offline_github' => 'Jika anda yakin perangkat anda dan server dalam keadaan daring, mohon buat tiket isu di GitHub.', ]; diff --git a/resources/lang/id_ID/firefly.php b/resources/lang/id_ID/firefly.php index ba28363728..a56783d4c9 100644 --- a/resources/lang/id_ID/firefly.php +++ b/resources/lang/id_ID/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Dekat', - 'actions' => 'Tindakan', - 'edit' => 'Edit', - 'delete' => 'Menghapus', - 'split' => 'Pisah', - 'single_split' => 'Pisah', - 'clone' => 'Duplikasi', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => '7 hari terakhir', - 'last_thirty_days' => '30 hari terakhir', - 'last_180_days' => '180 hari terakhir', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'YTD', - 'welcome_back' => 'Apa yang sedang dimainkan?', - 'everything' => 'Segala sesuatu', - 'today' => 'hari ini', - 'customRange' => 'Rentang khusus', - 'date_range' => 'Rentang tanggal', - 'apply' => 'Menerapkan', - 'select_date' => 'Pilih tanggal..', - 'cancel' => 'Membatalkan', - 'from' => 'Dari', - 'to' => 'Untuk', - 'structure' => 'Struktur', - 'help_translating' => 'Bantuan ini belum tersedia di bahasa Anda. Maukah Anda membantu menerjemahkan?', - 'showEverything' => 'Tunjukkan semuanya', - 'never' => 'Tak pernah', - 'no_results_for_empty_search' => 'Pencarian Anda kosong, jadi tidak ada yang ditemukan.', - 'removed_amount' => 'Dihapus :amount', - 'added_amount' => 'Ditambahkan :amount', - 'asset_account_role_help' => 'Setiap pilihan tambahan yang dihasilkan dari pilihan Anda dapat diatur nanti.', - 'Opening balance' => 'Saldo awal', - 'create_new_stuff' => 'Buat barang baru', - 'new_withdrawal' => 'Pengambilan baru', - 'create_new_transaction' => 'Buat transaksi baru', - 'sidebar_frontpage_create' => 'Buat', - 'new_transaction' => 'Transaksi baru', - 'no_rules_for_bill' => 'Bill ini tidak terkait dengan aturan yang telah ada.', - 'go_to_asset_accounts' => 'Menampilkan rekening aset', - 'go_to_budgets' => 'Pergi ke anggaran mu', - 'go_to_withdrawals' => 'Pergi ke penarikan', - 'clones_journal_x' => 'Transaksi ini adalah salinan dari ":description" (#:id)', - 'go_to_categories' => 'Menuju ke kategori yang anda miliki', - 'go_to_bills' => 'Menuju ke bill yang anda miliki', - 'go_to_expense_accounts' => 'Melihat akun pengeluaran anda', - 'go_to_revenue_accounts' => 'Lihat rekening pendapatan Anda', - 'go_to_piggies' => 'Pergi ke celengan', - 'new_deposit' => 'Deposit baru', - 'new_transfer' => 'Transfer baru', - 'new_transfers' => 'Transfer baru', - 'new_asset_account' => 'Akun aset baru', - 'new_expense_account' => 'Akun pengeluaran baru', - 'new_revenue_account' => 'Akun pendapatan baru', - 'new_liabilities_account' => 'Liabilitas baru', - 'new_budget' => 'Anggaran baru', - 'new_bill' => 'Bill baru', - 'block_account_logout' => 'Kamu telah keluar Akun yang ditangguhkan tidak dapat menggunakan situs ini. Apakah Anda mendaftar dengan alamat email yang benar?', - 'flash_success' => 'Keberhasilan!', - 'flash_info' => 'Pesan', - 'flash_warning' => 'PERINGATAN!', - 'flash_error' => 'Kesalahan!', - 'flash_danger' => 'Bahaya!', - 'flash_info_multiple' => 'Ada satu pesan|Ada :count pesan', - 'flash_error_multiple' => 'Ada satu kesalahan|Ada :count kesalahan', - 'net_worth' => 'Nilai bersih', - 'help_for_this_page' => 'Bantuan untuk halaman ini', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => 'Halo!', - 'two_factor_enter_code' => 'Untuk melanjutkan, masukkan kode Pengecekan keamanan dua faktor Anda. Aplikasi Anda bisa menghasilkannya untuk Anda.', - 'two_factor_code_here' => 'Masukkan kode di sini', - 'two_factor_title' => 'Pengecekan keamanan Dua faktor', - 'authenticate' => 'Pengecekan keamanan', - 'two_factor_forgot_title' => 'Kehilangan Pengecekan keamanan dua faktor', - 'two_factor_forgot' => 'Saya lupa dua faktor saya.', - 'two_factor_lost_header' => 'Kehilangan Pengecekan keamanan dua faktor Anda?', - 'two_factor_lost_intro' => 'Jika Anda kehilangan kode cadangan Anda pula, keberuntungan Anda buruk sudah. Ini bukanlah sesuatu yang Anda dapat perbaiki dari antarmuka web. Anda mempunyai dua pilihan.', - 'two_factor_lost_fix_self' => 'Jika Anda menjalankan contoh Firefly III Anda sendiri, baca entri ini dalam FAQ untuk intruksi.', - 'two_factor_lost_fix_owner' => 'Jika tidak, kirimkan email ke pemilik situs, :site_owner dan mintalah mereka untuk menyetel ulang Pengecekan keamanan dua faktor Anda.', - 'mfa_backup_code' => 'Anda telah menggunakan sebuah kode cadangan untuk masuk ke Firefly III. Kode ini tidak dapat digunakan lagi, jadi coret itu dari daftar Anda.', - 'pref_two_factor_new_backup_codes' => 'Hasilkan kode cadangan baru', - 'pref_two_factor_backup_code_count' => 'Anda memiliki :count kode cadangan yang valid.|Anda memiliki :count kode cadangan yang valid.', - '2fa_i_have_them' => 'Saya telah menyimpannya!', - 'warning_much_data' => ':days hari data mungkin perlu beberapa saat untuk memuat.', - 'registered' => 'Anda telah berhasil mendaftar!', - 'Default asset account' => 'Akun aset standar', - 'no_budget_pointer' => 'Anda tampaknya belum memiliki anggaran. Anda harus membuat beberapa di halaman-anggaran. Anggaran dapat membantu anda melacak pengeluaran.', - 'no_bill_pointer' => 'Anda tampaknya belum memiliki tagihan. Anda harus membuat beberapa di halaman-tagihan. Tagihan dapat membantu anda melacak pengeluaran.', - 'Savings account' => 'Rekening tabungan', - 'Credit card' => 'Kartu kredit', - 'source_accounts' => 'Akun Sumber|Akun Sumber', - 'destination_accounts' => 'Akun tujuan|Akun tujuan', - 'user_id_is' => 'Id pengguna Anda adalah :user', - 'field_supports_markdown' => 'Bidang ini mendukung Markdown.', - 'need_more_help' => 'Jika Anda memerlukan bantuan lebih banyak menggunakan Firefly III, silakan opsi tiket di Github.', - 'reenable_intro_text' => 'Anda juga dapat mengaktifkan kembali panduan pengenalan.', - 'intro_boxes_after_refresh' => 'Kotak pengantar akan muncul kembali saat Anda menyegarkan halaman.', - 'show_all_no_filter' => 'Tampilkan semua transaksi tanpa mengelompokkan mereka menurut tanggal.', - 'expenses_by_category' => 'Biaya berdasarkan kategori', - 'expenses_by_budget' => 'Biaya menurut anggaran', - 'income_by_category' => 'Penghasilan menurut kategori', - 'expenses_by_asset_account' => 'Beban menurut akun aset', - 'expenses_by_expense_account' => 'Beban menurut akun beban', - 'cannot_redirect_to_account' => 'Firefly III tidak bisa mengalihkan Anda ke halaman yang benar. Permintaan maaf.', - 'sum_of_expenses' => 'Jumlah pengeluaran', - 'sum_of_income' => 'Jumlah pendapatan', - 'liabilities' => 'Kewajiban', - 'spent_in_specific_budget' => 'Menghabiskan anggaran ":budget"', - 'spent_in_specific_double' => 'Spent in account ":account"', - 'earned_in_specific_double' => 'Earned in account ":account"', - 'source_account' => 'Akun sumber', - 'source_account_reconciliation' => 'Anda tidak dapat mengedit akun sumber dari transaksi rekonsiliasi.', - 'destination_account' => 'Akun tujuan', - 'destination_account_reconciliation' => 'You can\'t edit the destination account of a reconciliation transaction.', - 'sum_of_expenses_in_budget' => 'Menghabiskan total dalam anggaran ":budget"', - 'left_in_budget_limit' => 'Kiri untuk dibelanjakan sesuai budget', - 'current_period' => 'Periode sekarang', - 'show_the_current_period_and_overview' => 'Tunjukkan periode dan ikhtisar saat ini', - 'pref_languages_locale' => 'Agar bahasa selain bahasa Inggris berfungsi dengan benar, sistem operasi Anda harus dilengkapi dengan informasi lokal yang benar. Jika ini tidak ada, data mata uang, tanggal dan jumlah mungkin salah diformat.', - 'budget_in_period' => 'All transactions for budget ":name" between :start and :end in :currency', - 'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency', - 'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.', - 'chart_account_in_period' => 'Chart for all transactions for account ":name" (:balance) between :start and :end', - 'chart_category_in_period' => 'Bagan untuk semua transaksi untuk kategori ":name" antara :start dan :end', - 'chart_category_all' => 'Bagan untuk semua transaksi untuk kategori ":name"', - 'clone_withdrawal' => 'Kloning penarikan ini', - 'clone_deposit' => 'Kloning deposit ini', - 'clone_transfer' => 'Kloning transfer ini', - 'multi_select_no_selection' => 'Tidak ada yang di pilih', - 'multi_select_select_all' => 'Pilih Semua', - 'multi_select_n_selected' => 'dipilih', - 'multi_select_all_selected' => 'Semua dipilih', - 'multi_select_filter_placeholder' => 'Menemukan..', - 'intro_next_label' => 'Selanjutnya', - 'intro_prev_label' => 'Sebelumnya', - 'intro_skip_label' => 'Lewati', - 'intro_done_label' => 'Selesai', - 'between_dates_breadcrumb' => 'Antara :start dan :end', - 'all_journals_without_budget' => 'Semua transaksi tanpa anggaran', - 'journals_without_budget' => 'Transaksi tanpa anggaran', - 'all_journals_without_category' => 'Semua transaksi tanpa kategori', - 'journals_without_category' => 'Transaksi tanpa kategori', - 'all_journals_for_account' => 'Semua transaksi untuk akun :name', - 'chart_all_journals_for_account' => 'Bagan semua transaksi untuk akun :name', - 'journals_in_period_for_account' => 'Semua transaksi untuk akun :name antara :start dan :end', - 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', - 'transferred' => 'Ditransfer', - 'all_withdrawal' => 'Semua biaya', - 'all_transactions' => 'Semua Transaksi', - 'title_withdrawal_between' => 'Semua biaya antara :start dan :end', - 'all_deposit' => 'Semua pendapatan', - 'title_deposit_between' => 'Semua pendapatan antara :start dan :end', - 'all_transfers' => 'Semua transfer', - 'title_transfers_between' => 'Semua transfer antara :start dan :end', - 'all_transfer' => 'Semua transfer', - 'all_journals_for_tag' => 'Semua transaksi untuk tag ":tag"', - 'title_transfer_between' => 'Semua transfer antara :start dan :end', - 'all_journals_for_category' => 'Semua transaksi untuk kategori :name', - 'all_journals_for_budget' => 'Semua transaksi untuk anggaran :name', - 'chart_all_journals_for_budget' => 'Bagan semua transaksi untuk anggaran :name', - 'journals_in_period_for_category' => 'Semua transaksi untuk kategori :name antara :start dan :end', - 'journals_in_period_for_tag' => 'Semua transaksi untuk tag :tag antara :start and :end', - 'not_available_demo_user' => 'Fitur yang Anda coba akses tidak tersedia untuk pengguna demo.', - 'exchange_rate_instructions' => 'Akun aset "@name" hanya menerima transaksi di @native_currency. Jika Anda ingin menggunakan @foreign_currency sebagai gantinya, pastikan jumlahnya di @native_currency juga diketahui:', - 'transfer_exchange_rate_instructions' => 'Akun aset sumber "@source_name" hanya menerima transaksi di @source_currency. Akun aset tujuan "@dest_name" hanya menerima transaksi di @dest_currency. Anda harus memberikan jumlah yang ditransfer dengan benar pada kedua mata uang tersebut.', - 'transaction_data' => 'Data transaksi', - 'invalid_server_configuration' => 'Konfigurasi server tidak valid', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Quickswitch', - 'sign_in_to_start' => 'Masuk untuk memulai sesi', - 'sign_in' => 'Masuk', - 'register_new_account' => 'Daftar akun baru', - 'forgot_my_password' => 'Lupa password', - 'problems_with_input' => 'Terdapat masalah dengan masukan anda.', - 'reset_password' => 'Atur ulang kata sandi Anda', - 'button_reset_password' => 'Atur ulang kata sandi', - 'reset_button' => 'Atur ulang', - 'want_to_login' => 'Saya ingin masuk', - 'login_page_title' => 'Masuk ke Firefly III', - 'register_page_title' => 'Daftar di Firefly III', - 'forgot_pw_page_title' => 'Lupa kata sandi Anda untuk Firefly III', - 'reset_pw_page_title' => 'Atur ulang kata sandi Anda untuk Firefly III', - 'cannot_reset_demo_user' => 'You cannot reset the password of the demo user.', - 'no_att_demo_user' => 'The demo user can\'t upload attachments.', - 'button_register' => 'Daftar', - 'authorization' => 'Otorisasi', - 'active_bills_only' => 'hanya tagihan aktif', - 'active_bills_only_total' => 'semua tagihan aktif', - 'active_exp_bills_only' => 'active and expected bills only', - 'active_exp_bills_only_total' => 'all active expected bills only', - 'per_period_sum_1D' => 'Expected daily costs', - 'per_period_sum_1W' => 'Expected weekly costs', - 'per_period_sum_1M' => 'Expected monthly costs', - 'per_period_sum_3M' => 'Expected quarterly costs', - 'per_period_sum_6M' => 'Expected half-yearly costs', - 'per_period_sum_1Y' => 'Expected yearly costs', - 'average_per_bill' => 'rata-rata per tagihan', - 'expected_total' => 'total perkiraan', - 'reconciliation_account_name' => ':name rekonsiliasi (:currency)', - 'saved' => 'Tersimpan', - 'advanced_options' => 'Pilihan lanjutan', - 'advanced_options_explain' => 'Beberapa halaman di Firefly III memiliki pilihan lanjutan tersembunyi di belakang tombol ini. Halaman ini tidak memiliki hal yang menarik, tetapi cobalah cek yang lain!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Dekat', + 'actions' => 'Tindakan', + 'edit' => 'Edit', + 'delete' => 'Menghapus', + 'split' => 'Pisah', + 'single_split' => 'Pisah', + 'clone' => 'Duplikasi', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Confirm action', + 'last_seven_days' => '7 hari terakhir', + 'last_thirty_days' => '30 hari terakhir', + 'last_180_days' => '180 hari terakhir', + 'month_to_date' => 'Month to date', + 'year_to_date' => 'Year to date', + 'YTD' => 'YTD', + 'welcome_back' => 'Apa yang sedang dimainkan?', + 'everything' => 'Segala sesuatu', + 'today' => 'hari ini', + 'customRange' => 'Rentang khusus', + 'date_range' => 'Rentang tanggal', + 'apply' => 'Menerapkan', + 'select_date' => 'Pilih tanggal..', + 'cancel' => 'Membatalkan', + 'from' => 'Dari', + 'to' => 'Untuk', + 'structure' => 'Struktur', + 'help_translating' => 'Bantuan ini belum tersedia di bahasa Anda. Maukah Anda membantu menerjemahkan?', + 'showEverything' => 'Tunjukkan semuanya', + 'never' => 'Tak pernah', + 'no_results_for_empty_search' => 'Pencarian Anda kosong, jadi tidak ada yang ditemukan.', + 'removed_amount' => 'Dihapus :amount', + 'added_amount' => 'Ditambahkan :amount', + 'asset_account_role_help' => 'Setiap pilihan tambahan yang dihasilkan dari pilihan Anda dapat diatur nanti.', + 'Opening balance' => 'Saldo awal', + 'create_new_stuff' => 'Buat barang baru', + 'new_withdrawal' => 'Pengambilan baru', + 'create_new_transaction' => 'Buat transaksi baru', + 'sidebar_frontpage_create' => 'Buat', + 'new_transaction' => 'Transaksi baru', + 'no_rules_for_bill' => 'Bill ini tidak terkait dengan aturan yang telah ada.', + 'go_to_asset_accounts' => 'Menampilkan rekening aset', + 'go_to_budgets' => 'Pergi ke anggaran mu', + 'go_to_withdrawals' => 'Pergi ke penarikan', + 'clones_journal_x' => 'Transaksi ini adalah salinan dari ":description" (#:id)', + 'go_to_categories' => 'Menuju ke kategori yang anda miliki', + 'go_to_bills' => 'Menuju ke bill yang anda miliki', + 'go_to_expense_accounts' => 'Melihat akun pengeluaran anda', + 'go_to_revenue_accounts' => 'Lihat rekening pendapatan Anda', + 'go_to_piggies' => 'Pergi ke celengan', + 'new_deposit' => 'Deposit baru', + 'new_transfer' => 'Transfer baru', + 'new_transfers' => 'Transfer baru', + 'new_asset_account' => 'Akun aset baru', + 'new_expense_account' => 'Akun pengeluaran baru', + 'new_revenue_account' => 'Akun pendapatan baru', + 'new_liabilities_account' => 'Liabilitas baru', + 'new_budget' => 'Anggaran baru', + 'new_bill' => 'Bill baru', + 'block_account_logout' => 'Kamu telah keluar Akun yang ditangguhkan tidak dapat menggunakan situs ini. Apakah Anda mendaftar dengan alamat email yang benar?', + 'flash_success' => 'Keberhasilan!', + 'flash_info' => 'Pesan', + 'flash_warning' => 'PERINGATAN!', + 'flash_error' => 'Kesalahan!', + 'flash_danger' => 'Bahaya!', + 'flash_info_multiple' => 'Ada satu pesan|Ada :count pesan', + 'flash_error_multiple' => 'Ada satu kesalahan|Ada :count kesalahan', + 'net_worth' => 'Nilai bersih', + 'help_for_this_page' => 'Bantuan untuk halaman ini', + 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', + 'two_factor_welcome' => 'Halo!', + 'two_factor_enter_code' => 'Untuk melanjutkan, masukkan kode Pengecekan keamanan dua faktor Anda. Aplikasi Anda bisa menghasilkannya untuk Anda.', + 'two_factor_code_here' => 'Masukkan kode di sini', + 'two_factor_title' => 'Pengecekan keamanan Dua faktor', + 'authenticate' => 'Pengecekan keamanan', + 'two_factor_forgot_title' => 'Kehilangan Pengecekan keamanan dua faktor', + 'two_factor_forgot' => 'Saya lupa dua faktor saya.', + 'two_factor_lost_header' => 'Kehilangan Pengecekan keamanan dua faktor Anda?', + 'two_factor_lost_intro' => 'Jika Anda kehilangan kode cadangan Anda pula, keberuntungan Anda buruk sudah. Ini bukanlah sesuatu yang Anda dapat perbaiki dari antarmuka web. Anda mempunyai dua pilihan.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner dan mintalah mereka untuk menyetel ulang Pengecekan keamanan dua faktor Anda.', + 'mfa_backup_code' => 'Anda telah menggunakan sebuah kode cadangan untuk masuk ke Firefly III. Kode ini tidak dapat digunakan lagi, jadi coret itu dari daftar Anda.', + 'pref_two_factor_new_backup_codes' => 'Hasilkan kode cadangan baru', + 'pref_two_factor_backup_code_count' => 'Anda memiliki :count kode cadangan yang valid.|Anda memiliki :count kode cadangan yang valid.', + '2fa_i_have_them' => 'Saya telah menyimpannya!', + 'warning_much_data' => ':days hari data mungkin perlu beberapa saat untuk memuat.', + 'registered' => 'Anda telah berhasil mendaftar!', + 'Default asset account' => 'Akun aset standar', + 'no_budget_pointer' => 'Anda tampaknya belum memiliki anggaran. Anda harus membuat beberapa di halaman-anggaran. Anggaran dapat membantu anda melacak pengeluaran.', + 'no_bill_pointer' => 'Anda tampaknya belum memiliki tagihan. Anda harus membuat beberapa di halaman-tagihan. Tagihan dapat membantu anda melacak pengeluaran.', + 'Savings account' => 'Rekening tabungan', + 'Credit card' => 'Kartu kredit', + 'source_accounts' => 'Akun Sumber|Akun Sumber', + 'destination_accounts' => 'Akun tujuan|Akun tujuan', + 'user_id_is' => 'Id pengguna Anda adalah :user', + 'field_supports_markdown' => 'Bidang ini mendukung Markdown.', + 'need_more_help' => 'Jika Anda memerlukan bantuan lebih banyak menggunakan Firefly III, silakan opsi tiket di Github.', + 'reenable_intro_text' => 'Anda juga dapat mengaktifkan kembali panduan pengenalan.', + 'intro_boxes_after_refresh' => 'Kotak pengantar akan muncul kembali saat Anda menyegarkan halaman.', + 'show_all_no_filter' => 'Tampilkan semua transaksi tanpa mengelompokkan mereka menurut tanggal.', + 'expenses_by_category' => 'Biaya berdasarkan kategori', + 'expenses_by_budget' => 'Biaya menurut anggaran', + 'income_by_category' => 'Penghasilan menurut kategori', + 'expenses_by_asset_account' => 'Beban menurut akun aset', + 'expenses_by_expense_account' => 'Beban menurut akun beban', + 'cannot_redirect_to_account' => 'Firefly III tidak bisa mengalihkan Anda ke halaman yang benar. Permintaan maaf.', + 'sum_of_expenses' => 'Jumlah pengeluaran', + 'sum_of_income' => 'Jumlah pendapatan', + 'liabilities' => 'Kewajiban', + 'spent_in_specific_budget' => 'Menghabiskan anggaran ":budget"', + 'spent_in_specific_double' => 'Spent in account ":account"', + 'earned_in_specific_double' => 'Earned in account ":account"', + 'source_account' => 'Akun sumber', + 'source_account_reconciliation' => 'Anda tidak dapat mengedit akun sumber dari transaksi rekonsiliasi.', + 'destination_account' => 'Akun tujuan', + 'destination_account_reconciliation' => 'You can\'t edit the destination account of a reconciliation transaction.', + 'sum_of_expenses_in_budget' => 'Menghabiskan total dalam anggaran ":budget"', + 'left_in_budget_limit' => 'Kiri untuk dibelanjakan sesuai budget', + 'current_period' => 'Periode sekarang', + 'show_the_current_period_and_overview' => 'Tunjukkan periode dan ikhtisar saat ini', + 'pref_languages_locale' => 'Agar bahasa selain bahasa Inggris berfungsi dengan benar, sistem operasi Anda harus dilengkapi dengan informasi lokal yang benar. Jika ini tidak ada, data mata uang, tanggal dan jumlah mungkin salah diformat.', + 'budget_in_period' => 'All transactions for budget ":name" between :start and :end in :currency', + 'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency', + 'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.', + 'chart_account_in_period' => 'Chart for all transactions for account ":name" (:balance) between :start and :end', + 'chart_category_in_period' => 'Bagan untuk semua transaksi untuk kategori ":name" antara :start dan :end', + 'chart_category_all' => 'Bagan untuk semua transaksi untuk kategori ":name"', + 'clone_withdrawal' => 'Kloning penarikan ini', + 'clone_deposit' => 'Kloning deposit ini', + 'clone_transfer' => 'Kloning transfer ini', + 'multi_select_no_selection' => 'Tidak ada yang di pilih', + 'multi_select_select_all' => 'Pilih Semua', + 'multi_select_n_selected' => 'dipilih', + 'multi_select_all_selected' => 'Semua dipilih', + 'multi_select_filter_placeholder' => 'Menemukan..', + 'intro_next_label' => 'Selanjutnya', + 'intro_prev_label' => 'Sebelumnya', + 'intro_skip_label' => 'Lewati', + 'intro_done_label' => 'Selesai', + 'between_dates_breadcrumb' => 'Antara :start dan :end', + 'all_journals_without_budget' => 'Semua transaksi tanpa anggaran', + 'journals_without_budget' => 'Transaksi tanpa anggaran', + 'all_journals_without_category' => 'Semua transaksi tanpa kategori', + 'journals_without_category' => 'Transaksi tanpa kategori', + 'all_journals_for_account' => 'Semua transaksi untuk akun :name', + 'chart_all_journals_for_account' => 'Bagan semua transaksi untuk akun :name', + 'journals_in_period_for_account' => 'Semua transaksi untuk akun :name antara :start dan :end', + 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', + 'transferred' => 'Ditransfer', + 'all_withdrawal' => 'Semua biaya', + 'all_transactions' => 'Semua Transaksi', + 'title_withdrawal_between' => 'Semua biaya antara :start dan :end', + 'all_deposit' => 'Semua pendapatan', + 'title_deposit_between' => 'Semua pendapatan antara :start dan :end', + 'all_transfers' => 'Semua transfer', + 'title_transfers_between' => 'Semua transfer antara :start dan :end', + 'all_transfer' => 'Semua transfer', + 'all_journals_for_tag' => 'Semua transaksi untuk tag ":tag"', + 'title_transfer_between' => 'Semua transfer antara :start dan :end', + 'all_journals_for_category' => 'Semua transaksi untuk kategori :name', + 'all_journals_for_budget' => 'Semua transaksi untuk anggaran :name', + 'chart_all_journals_for_budget' => 'Bagan semua transaksi untuk anggaran :name', + 'journals_in_period_for_category' => 'Semua transaksi untuk kategori :name antara :start dan :end', + 'journals_in_period_for_tag' => 'Semua transaksi untuk tag :tag antara :start and :end', + 'not_available_demo_user' => 'Fitur yang Anda coba akses tidak tersedia untuk pengguna demo.', + 'exchange_rate_instructions' => 'Akun aset "@name" hanya menerima transaksi di @native_currency. Jika Anda ingin menggunakan @foreign_currency sebagai gantinya, pastikan jumlahnya di @native_currency juga diketahui:', + 'transfer_exchange_rate_instructions' => 'Akun aset sumber "@source_name" hanya menerima transaksi di @source_currency. Akun aset tujuan "@dest_name" hanya menerima transaksi di @dest_currency. Anda harus memberikan jumlah yang ditransfer dengan benar pada kedua mata uang tersebut.', + 'transaction_data' => 'Data transaksi', + 'invalid_server_configuration' => 'Konfigurasi server tidak valid', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Quickswitch', + 'sign_in_to_start' => 'Masuk untuk memulai sesi', + 'sign_in' => 'Masuk', + 'register_new_account' => 'Daftar akun baru', + 'forgot_my_password' => 'Lupa password', + 'problems_with_input' => 'Terdapat masalah dengan masukan anda.', + 'reset_password' => 'Atur ulang kata sandi Anda', + 'button_reset_password' => 'Atur ulang kata sandi', + 'reset_button' => 'Atur ulang', + 'want_to_login' => 'Saya ingin masuk', + 'login_page_title' => 'Masuk ke Firefly III', + 'register_page_title' => 'Daftar di Firefly III', + 'forgot_pw_page_title' => 'Lupa kata sandi Anda untuk Firefly III', + 'reset_pw_page_title' => 'Atur ulang kata sandi Anda untuk Firefly III', + 'cannot_reset_demo_user' => 'You cannot reset the password of the demo user.', + 'no_att_demo_user' => 'The demo user can\'t upload attachments.', + 'button_register' => 'Daftar', + 'authorization' => 'Otorisasi', + 'active_bills_only' => 'hanya tagihan aktif', + 'active_bills_only_total' => 'semua tagihan aktif', + 'active_exp_bills_only' => 'active and expected bills only', + 'active_exp_bills_only_total' => 'all active expected bills only', + 'per_period_sum_1D' => 'Expected daily costs', + 'per_period_sum_1W' => 'Expected weekly costs', + 'per_period_sum_1M' => 'Expected monthly costs', + 'per_period_sum_3M' => 'Expected quarterly costs', + 'per_period_sum_6M' => 'Expected half-yearly costs', + 'per_period_sum_1Y' => 'Expected yearly costs', + 'average_per_bill' => 'rata-rata per tagihan', + 'expected_total' => 'total perkiraan', + 'reconciliation_account_name' => ':name rekonsiliasi (:currency)', + 'saved' => 'Tersimpan', + 'advanced_options' => 'Pilihan lanjutan', + 'advanced_options_explain' => 'Beberapa halaman di Firefly III memiliki pilihan lanjutan tersembunyi di belakang tombol ini. Halaman ini tidak memiliki hal yang menarik, tetapi cobalah cek yang lain!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', + 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', + 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', + 'webhook_response_TRANSACTIONS' => 'Transaction details', + 'webhook_response_ACCOUNTS' => 'Account details', + 'webhook_response_none_NONE' => 'No details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspect', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => 'View message', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logs', + 'response' => 'Response', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Firefly III v:version Permintaan Otorisasi', - 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'Permintaan akses tidak valid. Mohon untuk tidak mengikuti tautan ini lagi.', - 'scopes_will_be_able' => 'Aplikasi ini akan mampu untuk:', - 'button_authorize' => 'Izinkan', - 'none_in_select_list' => '(tidak ada)', - 'no_piggy_bank' => '(tidak ada celengan)', - 'name_in_currency' => ':name di :currency', - 'paid_in_currency' => 'Dibayarkan dengan :currency', - 'unpaid_in_currency' => 'Belum dibayarkan dengan :currency', - 'is_alpha_warning' => 'Anda menggunakan versi ALPHA. Hati-hati dengan kutu dan isu.', - 'is_beta_warning' => 'Anda menggunakan versi BETA. Hati-hati dengan kutu dan isu.', - 'all_destination_accounts' => 'Rekening tujuan', - 'all_source_accounts' => 'Rekening asal', - 'back_to_index' => 'Kembali ke indeks', - 'cant_logout_guard' => 'Firefly III tidak dapat mengeluarkan Anda.', - 'internal_reference' => 'Referensi internal', + 'authorization_request' => 'Firefly III v:version Permintaan Otorisasi', + 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', + 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', + 'authorization_request_invalid' => 'Permintaan akses tidak valid. Mohon untuk tidak mengikuti tautan ini lagi.', + 'scopes_will_be_able' => 'Aplikasi ini akan mampu untuk:', + 'button_authorize' => 'Izinkan', + 'none_in_select_list' => '(tidak ada)', + 'no_piggy_bank' => '(tidak ada celengan)', + 'name_in_currency' => ':name di :currency', + 'paid_in_currency' => 'Dibayarkan dengan :currency', + 'unpaid_in_currency' => 'Belum dibayarkan dengan :currency', + 'is_alpha_warning' => 'Anda menggunakan versi ALPHA. Hati-hati dengan kutu dan isu.', + 'is_beta_warning' => 'Anda menggunakan versi BETA. Hati-hati dengan kutu dan isu.', + 'all_destination_accounts' => 'Rekening tujuan', + 'all_source_accounts' => 'Rekening asal', + 'back_to_index' => 'Kembali ke indeks', + 'cant_logout_guard' => 'Firefly III tidak dapat mengeluarkan Anda.', + 'internal_reference' => 'Referensi internal', // check for updates: - 'update_check_title' => 'Periksa pembaruan', - 'admin_update_check_title' => 'Secara otomatis memeriksa pembaruan', - 'admin_update_check_explain' => 'Firefly III can check for updates automatically. When you enable this setting, it will contact the Firefly III update server to see if a new version of Firefly III is available. When it is, you will get a notification. You can test this notification using the button on the right. Please indicate below if you want Firefly III to check for updates.', - 'check_for_updates_permission' => 'Firefly III can check for updates, but it needs your permission to do so. Please go to the administration to indicate if you would like this feature to be enabled.', - 'updates_ask_me_later' => 'Tanya lagi nanti', - 'updates_do_not_check' => 'Jangan cek pembaharuan', - 'updates_enable_check' => 'Nyalakan cek pembaharuan', - 'admin_update_check_now_title' => 'Periksa pembaruan', - 'admin_update_check_now_explain' => 'If you press the button, Firefly III will see if your current version is the latest.', - 'check_for_updates_button' => 'Periksa sekarang!', - 'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.', - 'update_version_beta' => 'This version is a BETA version. You may run into issues.', - 'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.', - 'update_current_version_alert' => 'You are running :version, which is the latest available release.', - 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', - 'update_check_error' => 'An error occurred while checking for updates: :error', - 'unknown_error' => 'Unknown error. Sorry about that.', - 'just_new_release' => 'A new version is available! Version :version was released :date. This release is very fresh. Wait a few days for the new release to stabilize.', - 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', - 'admin_update_channel_title' => 'Kanal pembaharuan', - 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.', - 'update_channel_stable' => 'Stable. Everything should work as expected.', - 'update_channel_beta' => 'Beta. New features but things may be broken.', - 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', + 'update_check_title' => 'Periksa pembaruan', + 'admin_update_check_title' => 'Secara otomatis memeriksa pembaruan', + 'admin_update_check_explain' => 'Firefly III can check for updates automatically. When you enable this setting, it will contact the Firefly III update server to see if a new version of Firefly III is available. When it is, you will get a notification. You can test this notification using the button on the right. Please indicate below if you want Firefly III to check for updates.', + 'check_for_updates_permission' => 'Firefly III can check for updates, but it needs your permission to do so. Please go to the administration to indicate if you would like this feature to be enabled.', + 'updates_ask_me_later' => 'Tanya lagi nanti', + 'updates_do_not_check' => 'Jangan cek pembaharuan', + 'updates_enable_check' => 'Nyalakan cek pembaharuan', + 'admin_update_check_now_title' => 'Periksa pembaruan', + 'admin_update_check_now_explain' => 'If you press the button, Firefly III will see if your current version is the latest.', + 'check_for_updates_button' => 'Periksa sekarang!', + 'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.', + 'update_version_beta' => 'This version is a BETA version. You may run into issues.', + 'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'You are running :version, which is the latest available release.', + 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', + 'update_check_error' => 'An error occurred while checking for updates: :error', + 'unknown_error' => 'Unknown error. Sorry about that.', + 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', + 'admin_update_channel_title' => 'Kanal pembaharuan', + 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.', + 'update_channel_stable' => 'Stable. Everything should work as expected.', + 'update_channel_beta' => 'Beta. New features but things may be broken.', + 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', // search - 'search' => 'Pencarian', - 'search_query' => 'Pertanyaan', - 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', - 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', - 'search_for_query' => 'Firefly III is searching for transactions with all of these words in them: :query', - 'invalid_operators_list' => 'Parameter pencarian ini tidak valdi dan telah diabaikan.', + 'search' => 'Pencarian', + 'search_query' => 'Pertanyaan', + 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', + 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', + 'search_for_query' => 'Firefly III is searching for transactions with all of these words in them: :query', + 'invalid_operators_list' => 'Parameter pencarian ini tidak valdi dan telah diabaikan.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaction date is ":value"', 'search_modifier_not_date_on' => 'Transaction date is not ":value"', 'search_modifier_reconciled' => 'Transaction is reconciled', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Tipe transaksi adalah ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Tag is ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'The following modifiers are applied to the search as well:', 'general_search_error' => 'An error occurred while searching. Please check the log files for more information.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'You cannot execute inactive rules.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Aturan', 'rule_name' => 'Nama aturan', 'rule_triggers' => 'Aturan pemicu kapan', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Saat transaksi diperbarui', 'rule_trigger_user_action' => 'Tindakan pengguna adalah ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Source account name starts with..', 'rule_trigger_source_account_starts' => 'Source account name starts with ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Anggaran adalah ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Transaction currency is..', 'rule_trigger_currency_is' => 'Transaction currency is ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Transaction foreign currency is..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Rule group for bills', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Rule for bill ":name"', 'new_rule_for_bill_description' => 'This rule marks transactions for bill ":name".', - 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', - 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', + 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', + 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', // tags - 'store_new_tag' => 'Simpan tag baru', - 'update_tag' => 'Perbarui tag', - 'no_location_set' => 'Tidak ada lokasi yang ditetapkan', - 'meta_data' => 'Data meta', - 'location' => 'Lokasi', - 'without_date' => 'Tanpa tanggal', - 'result' => 'Hasil', - 'sums_apply_to_range' => 'Semua jumlah berlaku untuk rentang yang dipilih', - 'mapbox_api_key' => 'To use map, get an API key from Mapbox. Open your .env file and enter this code after MAPBOX_API_KEY=.', - 'press_object_location' => 'Right click or long press to set the object\'s location.', - 'clear_location' => 'Lokasi yang jelas', - 'delete_all_selected_tags' => 'Delete all selected tags', - 'select_tags_to_delete' => 'Don\'t forget to select some tags.', - 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', - 'create_rule_from_transaction' => 'Create rule based on transaction', - 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', - + 'store_new_tag' => 'Simpan tag baru', + 'update_tag' => 'Perbarui tag', + 'no_location_set' => 'Tidak ada lokasi yang ditetapkan', + 'meta_data' => 'Data meta', + 'location' => 'Lokasi', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Tanpa tanggal', + 'result' => 'Hasil', + 'sums_apply_to_range' => 'Semua jumlah berlaku untuk rentang yang dipilih', + 'mapbox_api_key' => 'To use map, get an API key from Mapbox. Open your .env file and enter this code after MAPBOX_API_KEY=.', + 'press_object_location' => 'Right click or long press to set the object\'s location.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Lokasi yang jelas', + 'delete_all_selected_tags' => 'Delete all selected tags', + 'select_tags_to_delete' => 'Don\'t forget to select some tags.', + 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', + 'create_rule_from_transaction' => 'Create rule based on transaction', + 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(equal to language)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Akun layar utama', - 'pref_home_screen_accounts_help' => 'Akun mana yang harus ditampilkan di beranda?', - 'pref_view_range' => 'Rentang tampilan', - 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', - 'pref_1D' => 'Suatu hari', - 'pref_1W' => 'Satu minggu', - 'pref_1M' => 'Satu bulan', - 'pref_3M' => 'Tiga bulan (seperempat)', - 'pref_6M' => 'Enam bulan', - 'pref_1Y' => 'Satu tahun', - 'pref_last365' => 'Last year', - 'pref_last90' => 'Last 90 days', - 'pref_last30' => 'Last 30 days', - 'pref_last7' => 'Last 7 days', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Bahasa', - 'pref_locale' => 'Locale settings', - 'pref_languages_help' => 'Firefly III mendukung beberapa bahasa. Mana yang kamu suka?', - 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', - 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', - 'pref_custom_fiscal_year' => 'Pengaturan tahun fiskal', - 'pref_custom_fiscal_year_label' => 'Diaktifkan', - 'pref_custom_fiscal_year_help' => 'Di negara-negara yang menggunakan tahun keuangan selain 1 Januari sampai 31 Desember, Anda dapat mengaktifkannya dan menentukan hari-hari awal / akhir dari tahun fiskal', - 'pref_fiscal_year_start_label' => 'Tahun anggaran mulai tanggal', - 'pref_two_factor_auth' => 'Verifikasi 2 langkah', - 'pref_two_factor_auth_help' => 'Bila Anda mengaktifkan verifikasi 2 langkah (juga dikenal sebagai autentikasi dua faktor), Anda menambahkan lapisan keamanan ekstra ke akun Anda. Anda masuk dengan sesuatu yang Anda tahu (kata sandi Anda) dan sesuatu yang Anda miliki (kode verifikasi). Kode verifikasi dihasilkan oleh aplikasi di ponsel Anda, seperti Authy atau Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Aktifkan verifikasi 2 langkah', - 'pref_two_factor_auth_disabled' => 'Kode verifikasi 2 langkah dihapus dan dinonaktifkan', - 'pref_two_factor_auth_remove_it' => 'Jangan lupa menghapus akun dari aplikasi autentikasi Anda!', - 'pref_two_factor_auth_code' => 'Kode verifikasi', - 'pref_two_factor_auth_code_help' => 'Scan the QR code with an application on your phone such as Authy or Google Authenticator and enter the generated code.', - 'pref_two_factor_auth_reset_code' => 'Setel ulang kode verifikasi', - 'pref_two_factor_auth_disable_2fa' => 'Disable 2FA', - '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', - '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', - '2fa_already_enabled' => '2-step verification is already enabled.', - 'wrong_mfa_code' => 'This MFA code is not valid.', - 'pref_save_settings' => 'Simpan Pengaturan', - 'saved_preferences' => 'Preferensi disimpan!', - 'preferences_general' => 'Umum', - 'preferences_frontpage' => 'Tampilan depan', - 'preferences_security' => 'Keamanan', - 'preferences_layout' => 'Tata ruang', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Tampilkan deposito pada layar awal', - 'pref_home_show_deposits_info' => 'Layar awal sudah menunjukkan rekening pengeluaran Anda. Harus itu juga menunjukkan akun pendapatan Anda?', - 'pref_home_do_show_deposits' => 'Ya, menunjukkan kepada mereka', - 'successful_count' => ':count menghitung sukses', - 'list_page_size_title' => 'Ukuran halaman', - 'list_page_size_help' => 'Setiap daftar hal-hal (rekening, transaksi, dll) menunjukkan paling ini banyak per halaman.', - 'list_page_size_label' => 'Ukuran halaman', - 'between_dates' => '(:start dan :end)', - 'pref_optional_fields_transaction' => 'Bidang opsional untuk transaksi', - 'pref_optional_fields_transaction_help' => 'Secara default tidak semua bidang diaktifkan saat membuat transaksi baru (karena kekacauan). Di bawah, Anda dapat mengaktifkan bidang ini jika Anda berpikir mereka bisa berguna bagi Anda. Tentu saja, setiap bidang yang dinonaktifkan, tapi sudah diisi, akan terlihat terlepas dari pengaturan.', - 'optional_tj_date_fields' => 'Bidang tanggal', - 'optional_tj_other_fields' => 'Other fields', - 'optional_tj_attachment_fields' => 'Bidang lampiran', - 'pref_optional_tj_interest_date' => 'Tanggal bunga', - 'pref_optional_tj_book_date' => 'Buku tanggal', - 'pref_optional_tj_process_date' => 'Tanggal pengolahan', - 'pref_optional_tj_due_date' => 'Batas tanggal terakhir', - 'pref_optional_tj_payment_date' => 'Tanggal pembayaran', - 'pref_optional_tj_invoice_date' => 'Tanggal faktur', - 'pref_optional_tj_internal_reference' => 'Referensi internal', - 'pref_optional_tj_notes' => 'Catatan', - 'pref_optional_tj_attachments' => 'Lampiran', - 'pref_optional_tj_external_url' => 'External URL', - 'pref_optional_tj_location' => 'Location', - 'pref_optional_tj_links' => 'Transaction links', - 'optional_field_meta_dates' => 'Tanggal', - 'optional_field_meta_business' => 'Bisnis', - 'optional_field_attachments' => 'Lampiran', - 'optional_field_meta_data' => 'Data meta opsional', - 'external_url' => 'URL luar', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(equal to language)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Akun layar utama', + 'pref_home_screen_accounts_help' => 'Akun mana yang harus ditampilkan di beranda?', + 'pref_view_range' => 'Rentang tampilan', + 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', + 'pref_1D' => 'Suatu hari', + 'pref_1W' => 'Satu minggu', + 'pref_1M' => 'Satu bulan', + 'pref_3M' => 'Tiga bulan (seperempat)', + 'pref_6M' => 'Enam bulan', + 'pref_1Y' => 'Satu tahun', + 'pref_last365' => 'Last year', + 'pref_last90' => 'Last 90 days', + 'pref_last30' => 'Last 30 days', + 'pref_last7' => 'Last 7 days', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => 'Bahasa', + 'pref_locale' => 'Locale settings', + 'pref_languages_help' => 'Firefly III mendukung beberapa bahasa. Mana yang kamu suka?', + 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', + 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', + 'pref_custom_fiscal_year' => 'Pengaturan tahun fiskal', + 'pref_custom_fiscal_year_label' => 'Diaktifkan', + 'pref_custom_fiscal_year_help' => 'Di negara-negara yang menggunakan tahun keuangan selain 1 Januari sampai 31 Desember, Anda dapat mengaktifkannya dan menentukan hari-hari awal / akhir dari tahun fiskal', + 'pref_fiscal_year_start_label' => 'Tahun anggaran mulai tanggal', + 'pref_two_factor_auth' => 'Verifikasi 2 langkah', + 'pref_two_factor_auth_help' => 'Bila Anda mengaktifkan verifikasi 2 langkah (juga dikenal sebagai autentikasi dua faktor), Anda menambahkan lapisan keamanan ekstra ke akun Anda. Anda masuk dengan sesuatu yang Anda tahu (kata sandi Anda) dan sesuatu yang Anda miliki (kode verifikasi). Kode verifikasi dihasilkan oleh aplikasi di ponsel Anda, seperti Authy atau Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Aktifkan verifikasi 2 langkah', + 'pref_two_factor_auth_disabled' => 'Kode verifikasi 2 langkah dihapus dan dinonaktifkan', + 'pref_two_factor_auth_remove_it' => 'Jangan lupa menghapus akun dari aplikasi autentikasi Anda!', + 'pref_two_factor_auth_code' => 'Kode verifikasi', + 'pref_two_factor_auth_code_help' => 'Scan the QR code with an application on your phone such as Authy or Google Authenticator and enter the generated code.', + 'pref_two_factor_auth_reset_code' => 'Setel ulang kode verifikasi', + 'pref_two_factor_auth_disable_2fa' => 'Disable 2FA', + '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', + '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', + '2fa_already_enabled' => '2-step verification is already enabled.', + 'wrong_mfa_code' => 'This MFA code is not valid.', + 'pref_save_settings' => 'Simpan Pengaturan', + 'saved_preferences' => 'Preferensi disimpan!', + 'preferences_general' => 'Umum', + 'preferences_frontpage' => 'Tampilan depan', + 'preferences_security' => 'Keamanan', + 'preferences_layout' => 'Tata ruang', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Tampilkan deposito pada layar awal', + 'pref_home_show_deposits_info' => 'Layar awal sudah menunjukkan rekening pengeluaran Anda. Harus itu juga menunjukkan akun pendapatan Anda?', + 'pref_home_do_show_deposits' => 'Ya, menunjukkan kepada mereka', + 'successful_count' => ':count menghitung sukses', + 'list_page_size_title' => 'Ukuran halaman', + 'list_page_size_help' => 'Setiap daftar hal-hal (rekening, transaksi, dll) menunjukkan paling ini banyak per halaman.', + 'list_page_size_label' => 'Ukuran halaman', + 'between_dates' => '(:start dan :end)', + 'pref_optional_fields_transaction' => 'Bidang opsional untuk transaksi', + 'pref_optional_fields_transaction_help' => 'Secara default tidak semua bidang diaktifkan saat membuat transaksi baru (karena kekacauan). Di bawah, Anda dapat mengaktifkan bidang ini jika Anda berpikir mereka bisa berguna bagi Anda. Tentu saja, setiap bidang yang dinonaktifkan, tapi sudah diisi, akan terlihat terlepas dari pengaturan.', + 'optional_tj_date_fields' => 'Bidang tanggal', + 'optional_tj_other_fields' => 'Other fields', + 'optional_tj_attachment_fields' => 'Bidang lampiran', + 'pref_optional_tj_interest_date' => 'Tanggal bunga', + 'pref_optional_tj_book_date' => 'Buku tanggal', + 'pref_optional_tj_process_date' => 'Tanggal pengolahan', + 'pref_optional_tj_due_date' => 'Batas tanggal terakhir', + 'pref_optional_tj_payment_date' => 'Tanggal pembayaran', + 'pref_optional_tj_invoice_date' => 'Tanggal faktur', + 'pref_optional_tj_internal_reference' => 'Referensi internal', + 'pref_optional_tj_notes' => 'Catatan', + 'pref_optional_tj_attachments' => 'Lampiran', + 'pref_optional_tj_external_url' => 'External URL', + 'pref_optional_tj_location' => 'Location', + 'pref_optional_tj_links' => 'Transaction links', + 'optional_field_meta_dates' => 'Tanggal', + 'optional_field_meta_business' => 'Bisnis', + 'optional_field_attachments' => 'Lampiran', + 'optional_field_meta_data' => 'Data meta opsional', + 'external_url' => 'URL luar', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'All your other sessions have been logged out.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Delete ALL your budgets', - 'delete_all_categories' => 'Delete ALL your categories', - 'delete_all_tags' => 'Delete ALL your tags', - 'delete_all_bills' => 'Delete ALL your bills', - 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', - 'delete_all_rules' => 'Delete ALL your rules', - 'delete_all_recurring' => 'Delete ALL your recurring transactions', - 'delete_all_object_groups' => 'Delete ALL your object groups', - 'delete_all_accounts' => 'Delete ALL your accounts', - 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', - 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', - 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', - 'delete_all_liabilities' => 'Delete ALL your liabilities', - 'delete_all_transactions' => 'Delete ALL your transactions', - 'delete_all_withdrawals' => 'Delete ALL your withdrawals', - 'delete_all_deposits' => 'Delete ALL your deposits', - 'delete_all_transfers' => 'Delete ALL your transfers', - 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', - 'deleted_all_budgets' => 'All budgets have been deleted', - 'deleted_all_categories' => 'All categories have been deleted', - 'deleted_all_tags' => 'All tags have been deleted', - 'deleted_all_bills' => 'All bills have been deleted', - 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', - 'deleted_all_rules' => 'All rules and rule groups have been deleted', - 'deleted_all_object_groups' => 'All groups have been deleted', - 'deleted_all_accounts' => 'All accounts have been deleted', - 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', - 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', - 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', - 'deleted_all_liabilities' => 'All liabilities have been deleted', - 'deleted_all_transactions' => 'All transactions have been deleted', - 'deleted_all_withdrawals' => 'All withdrawals have been deleted', - 'deleted_all_deposits' => 'All deposits have been deleted', - 'deleted_all_transfers' => 'All transfers have been deleted', - 'deleted_all_recurring' => 'All recurring transactions have been deleted', - 'change_your_password' => 'Ubah password Anda', - 'delete_account' => 'Hapus akun', - 'current_password' => 'Kata sandi saat ini', - 'new_password' => 'Kata sandi baru', - 'new_password_again' => 'Password Baru Lagi)', - 'delete_your_account' => 'Hapus akun anda', - 'delete_your_account_help' => 'Menghapus akun juga akan menghapus akun, transaksi, semua Anda mungkin telah disimpan ke Firefly III. Ini akan HILANG.', - 'delete_your_account_password' => 'Masukkan kata sandi Anda untuk melanjutkan.', - 'password' => 'Kata sandi', - 'are_you_sure' => 'Apakah Anda yakin? Anda tidak dapat membatalkan ini.', - 'delete_account_button' => 'Hapus akun anda', - 'invalid_current_password' => 'Kata sandi tidak valid saat ini!', - 'password_changed' => 'Sandi berubah!', - 'should_change' => 'Idenya adalah untuk mengubah password Anda.', - 'invalid_password' => 'Kata sandi salah!', - 'what_is_pw_security' => 'Apa itu "memverifikasi keamanan password"?', - 'secure_pw_title' => 'Bagaimana memilih sebuah password yang aman', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => 'Not a week goes by that you read in the news about a site losing the passwords of its users. Hackers and thieves use these passwords to try to steal your private information. This information is valuable.', - 'secure_pw_ff' => 'Do you use the same password all over the internet? If one site loses your password, hackers have access to all your data. Firefly III relies on you to choose a strong and unique password to protect your financial records.', - 'secure_pw_check_box' => 'To help you do that Firefly III can check if the password you want to use has been stolen in the past. If this is the case, Firefly III advises you NOT to use that password.', - 'secure_pw_working_title' => 'How does it work?', - 'secure_pw_working' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', - 'secure_pw_should' => 'Haruskah saya mencentang kotaknya?', - 'secure_pw_long_password' => 'Yes. Always verify your password is safe.', - 'command_line_token' => 'Command line token', - 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', - 'regenerate_command_line_token' => 'Regenerate command line token', - 'token_regenerated' => 'A new command line token was generated', - 'change_your_email' => 'Ubah alamat email anda', - 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', - 'email_changed_logout' => 'Sampai Anda memverifikasi alamat email Anda, Anda tidak dapat login.', - 'login_with_new_email' => 'Anda sekarang bisa masuk dengan alamat email baru Anda.', - 'login_with_old_email' => 'Anda sekarang dapat login dengan alamat email lama Anda lagi.', - 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', - 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', - 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', - 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Clients', - 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Client ID', - 'profile_oauth_client_name' => 'Name', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Create New Client', - 'profile_oauth_create_client' => 'Create Client', - 'profile_oauth_edit_client' => 'Edit Client', - 'profile_oauth_name_help' => 'Something your users will recognize and trust.', - 'profile_oauth_redirect_url' => 'Redirect URL', - 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', - 'profile_authorized_apps' => 'Authorized applications', - 'profile_authorized_clients' => 'Authorized clients', - 'profile_scopes' => 'Scopes', - 'profile_revoke' => 'Revoke', - 'profile_oauth_client_secret_title' => 'Client Secret', - 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', - 'profile_personal_access_tokens' => 'Personal Access Tokens', - 'profile_personal_access_token' => 'Personal Access Token', - 'profile_oauth_confidential' => 'Confidential', - 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', - 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', - 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', - 'profile_create_new_token' => 'Create new token', - 'profile_create_token' => 'Create token', - 'profile_create' => 'Create', - 'profile_save_changes' => 'Save changes', - 'profile_whoops' => 'Whoops!', - 'profile_something_wrong' => 'Something went wrong!', - 'profile_try_again' => 'Something went wrong. Please try again.', - 'amounts' => 'Amounts', - 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', - 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', - 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', - 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'All your other sessions have been logged out.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Delete ALL your budgets', + 'delete_all_categories' => 'Delete ALL your categories', + 'delete_all_tags' => 'Delete ALL your tags', + 'delete_all_bills' => 'Delete ALL your bills', + 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', + 'delete_all_rules' => 'Delete ALL your rules', + 'delete_all_recurring' => 'Delete ALL your recurring transactions', + 'delete_all_object_groups' => 'Delete ALL your object groups', + 'delete_all_accounts' => 'Delete ALL your accounts', + 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', + 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', + 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', + 'delete_all_liabilities' => 'Delete ALL your liabilities', + 'delete_all_transactions' => 'Delete ALL your transactions', + 'delete_all_withdrawals' => 'Delete ALL your withdrawals', + 'delete_all_deposits' => 'Delete ALL your deposits', + 'delete_all_transfers' => 'Delete ALL your transfers', + 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', + 'deleted_all_budgets' => 'All budgets have been deleted', + 'deleted_all_categories' => 'All categories have been deleted', + 'deleted_all_tags' => 'All tags have been deleted', + 'deleted_all_bills' => 'All bills have been deleted', + 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', + 'deleted_all_rules' => 'All rules and rule groups have been deleted', + 'deleted_all_object_groups' => 'All groups have been deleted', + 'deleted_all_accounts' => 'All accounts have been deleted', + 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', + 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', + 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', + 'deleted_all_liabilities' => 'All liabilities have been deleted', + 'deleted_all_transactions' => 'All transactions have been deleted', + 'deleted_all_withdrawals' => 'All withdrawals have been deleted', + 'deleted_all_deposits' => 'All deposits have been deleted', + 'deleted_all_transfers' => 'All transfers have been deleted', + 'deleted_all_recurring' => 'All recurring transactions have been deleted', + 'change_your_password' => 'Ubah password Anda', + 'delete_account' => 'Hapus akun', + 'current_password' => 'Kata sandi saat ini', + 'new_password' => 'Kata sandi baru', + 'new_password_again' => 'Password Baru Lagi)', + 'delete_your_account' => 'Hapus akun anda', + 'delete_your_account_help' => 'Menghapus akun juga akan menghapus akun, transaksi, semua Anda mungkin telah disimpan ke Firefly III. Ini akan HILANG.', + 'delete_your_account_password' => 'Masukkan kata sandi Anda untuk melanjutkan.', + 'password' => 'Kata sandi', + 'are_you_sure' => 'Apakah Anda yakin? Anda tidak dapat membatalkan ini.', + 'delete_account_button' => 'Hapus akun anda', + 'invalid_current_password' => 'Kata sandi tidak valid saat ini!', + 'password_changed' => 'Sandi berubah!', + 'should_change' => 'Idenya adalah untuk mengubah password Anda.', + 'invalid_password' => 'Kata sandi salah!', + 'what_is_pw_security' => 'Apa itu "memverifikasi keamanan password"?', + 'secure_pw_title' => 'Bagaimana memilih sebuah password yang aman', + 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', + 'secure_pw_history' => 'Not a week goes by that you read in the news about a site losing the passwords of its users. Hackers and thieves use these passwords to try to steal your private information. This information is valuable.', + 'secure_pw_ff' => 'Do you use the same password all over the internet? If one site loses your password, hackers have access to all your data. Firefly III relies on you to choose a strong and unique password to protect your financial records.', + 'secure_pw_check_box' => 'To help you do that Firefly III can check if the password you want to use has been stolen in the past. If this is the case, Firefly III advises you NOT to use that password.', + 'secure_pw_working_title' => 'How does it work?', + 'secure_pw_working' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', + 'secure_pw_should' => 'Haruskah saya mencentang kotaknya?', + 'secure_pw_long_password' => 'Yes. Always verify your password is safe.', + 'command_line_token' => 'Command line token', + 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', + 'regenerate_command_line_token' => 'Regenerate command line token', + 'token_regenerated' => 'A new command line token was generated', + 'change_your_email' => 'Ubah alamat email anda', + 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', + 'email_changed_logout' => 'Sampai Anda memverifikasi alamat email Anda, Anda tidak dapat login.', + 'login_with_new_email' => 'Anda sekarang bisa masuk dengan alamat email baru Anda.', + 'login_with_old_email' => 'Anda sekarang dapat login dengan alamat email lama Anda lagi.', + 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', + 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', + 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', + 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Clients', + 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'Client ID', + 'profile_oauth_client_name' => 'Name', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Create New Client', + 'profile_oauth_create_client' => 'Create Client', + 'profile_oauth_edit_client' => 'Edit Client', + 'profile_oauth_name_help' => 'Something your users will recognize and trust.', + 'profile_oauth_redirect_url' => 'Redirect URL', + 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', + 'profile_authorized_apps' => 'Authorized applications', + 'profile_authorized_clients' => 'Authorized clients', + 'profile_scopes' => 'Scopes', + 'profile_revoke' => 'Revoke', + 'profile_oauth_client_secret_title' => 'Client Secret', + 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', + 'profile_personal_access_tokens' => 'Personal Access Tokens', + 'profile_personal_access_token' => 'Personal Access Token', + 'profile_oauth_confidential' => 'Confidential', + 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', + 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', + 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', + 'profile_create_new_token' => 'Create new token', + 'profile_create_token' => 'Create token', + 'profile_create' => 'Create', + 'profile_save_changes' => 'Save changes', + 'profile_whoops' => 'Whoops!', + 'profile_something_wrong' => 'Something went wrong!', + 'profile_try_again' => 'Something went wrong. Please try again.', + 'amounts' => 'Amounts', + 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', + 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', + 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', + 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Export data from Firefly III', - 'export_data_menu' => 'Export data', - 'export_data_bc' => 'Export data from Firefly III', - 'export_data_main_title' => 'Export data from Firefly III', - 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', - 'export_data_all_transactions' => 'Export all transactions', - 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Export data from Firefly III', + 'export_data_menu' => 'Export data', + 'export_data_bc' => 'Export data from Firefly III', + 'export_data_main_title' => 'Export data from Firefly III', + 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', + 'export_data_all_transactions' => 'Export all transactions', + 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Satu lampiran |:count lampiran', - 'attachments' => 'Lampiran', - 'edit_attachment' => 'Edit lampiran ":name"', - 'update_attachment' => 'Perbarui lampiran', - 'delete_attachment' => 'Hapus lampiran ":name"', - 'attachment_deleted' => 'Lampiran yang dihapus ":name"', - 'liabilities_deleted' => 'Deleted liability ":name"', - 'attachment_updated' => 'Lampiran yang diperbarui ":name"', - 'upload_max_file_size' => 'Ukuran file maksimum: :size', - 'list_all_attachments' => 'List of all attachments', + 'nr_of_attachments' => 'Satu lampiran |:count lampiran', + 'attachments' => 'Lampiran', + 'edit_attachment' => 'Edit lampiran ":name"', + 'update_attachment' => 'Perbarui lampiran', + 'delete_attachment' => 'Hapus lampiran ":name"', + 'attachment_deleted' => 'Lampiran yang dihapus ":name"', + 'liabilities_deleted' => 'Deleted liability ":name"', + 'attachment_updated' => 'Lampiran yang diperbarui ":name"', + 'upload_max_file_size' => 'Ukuran file maksimum: :size', + 'list_all_attachments' => 'List of all attachments', // transaction index - 'title_expenses' => 'Beban', - 'title_withdrawal' => 'Beban', - 'title_revenue' => 'Pendapatan / penghasilan', - 'title_deposit' => 'Pendapatan / penghasilan', - 'title_transfer' => 'Transfer', - 'title_transfers' => 'Transfer', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Beban', + 'title_withdrawal' => 'Beban', + 'title_revenue' => 'Pendapatan / penghasilan', + 'title_deposit' => 'Pendapatan / penghasilan', + 'title_transfer' => 'Transfer', + 'title_transfers' => 'Transfer', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Transaksi ini sudah menjadi penarikan', - 'convert_is_already_type_Deposit' => 'Transaksi ini sudah menjadi deposit', - 'convert_is_already_type_Transfer' => 'Transaksi ini sudah di transfer', - 'convert_to_Withdrawal' => 'Convert ":description" ke penarikan', - 'convert_to_Deposit' => 'Convert ":description" ke deposit', - 'convert_to_Transfer' => 'Convert ":description" ke sebuah transfer', - 'convert_options_WithdrawalDeposit' => 'Mengkonversi penarikan menjadi deposit', - 'convert_options_WithdrawalTransfer' => 'Mengkonversi penarikan ke dalam transfer', - 'convert_options_DepositTransfer' => 'Mengkonversi deposit ke transfer', - 'convert_options_DepositWithdrawal' => 'Mengkonversi deposit menjadi penarikan', - 'convert_options_TransferWithdrawal' => 'Mengkonversi transfer menjadi penarikan', - 'convert_options_TransferDeposit' => 'Mengkonversi transfer menjadi deposit', - 'convert_Withdrawal_to_deposit' => 'Mengkonversi penarikan ini ke deposit', - 'convert_Withdrawal_to_transfer' => 'Mengkonversi penarikan ini ke transfer', - 'convert_Deposit_to_withdrawal' => 'Convert this deposit to a withdrawal', - 'convert_Deposit_to_transfer' => 'Konversikan deposit ini ke transfer', - 'convert_Transfer_to_deposit' => 'Mengkonversi transfer ini ke deposit', - 'convert_Transfer_to_withdrawal' => 'Mengkonversi transfer ini ke penarikan', - 'convert_please_set_revenue_source' => 'Silakan pilih akun pendapatan dari mana uang itu berasal.', - 'convert_please_set_asset_destination' => 'Silakan pilih akun aset dimana uangnya akan digunakan.', - 'convert_please_set_expense_destination' => 'Tolong pilih rekening pengeluaran yang akan digunakan untuk uang.', - 'convert_please_set_asset_source' => 'Silakan pilih akun aset dari mana uang itu berasal.', - 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', - 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', - 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => 'Transaksi telah dikonversi menjadi penarikan', - 'converted_to_Deposit' => 'Transaksi telah dikonversi menjadi deposit', - 'converted_to_Transfer' => 'Transaksi telah dikonversi menjadi transfer', - 'invalid_convert_selection' => 'Akun yang telah Anda pilih sudah digunakan dalam transaksi ini atau tidak ada.', - 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', - 'convert_to_withdrawal' => 'Convert to a withdrawal', - 'convert_to_deposit' => 'Convert to a deposit', - 'convert_to_transfer' => 'Convert to a transfer', + 'convert_is_already_type_Withdrawal' => 'Transaksi ini sudah menjadi penarikan', + 'convert_is_already_type_Deposit' => 'Transaksi ini sudah menjadi deposit', + 'convert_is_already_type_Transfer' => 'Transaksi ini sudah di transfer', + 'convert_to_Withdrawal' => 'Convert ":description" ke penarikan', + 'convert_to_Deposit' => 'Convert ":description" ke deposit', + 'convert_to_Transfer' => 'Convert ":description" ke sebuah transfer', + 'convert_options_WithdrawalDeposit' => 'Mengkonversi penarikan menjadi deposit', + 'convert_options_WithdrawalTransfer' => 'Mengkonversi penarikan ke dalam transfer', + 'convert_options_DepositTransfer' => 'Mengkonversi deposit ke transfer', + 'convert_options_DepositWithdrawal' => 'Mengkonversi deposit menjadi penarikan', + 'convert_options_TransferWithdrawal' => 'Mengkonversi transfer menjadi penarikan', + 'convert_options_TransferDeposit' => 'Mengkonversi transfer menjadi deposit', + 'convert_Withdrawal_to_deposit' => 'Mengkonversi penarikan ini ke deposit', + 'convert_Withdrawal_to_transfer' => 'Mengkonversi penarikan ini ke transfer', + 'convert_Deposit_to_withdrawal' => 'Convert this deposit to a withdrawal', + 'convert_Deposit_to_transfer' => 'Konversikan deposit ini ke transfer', + 'convert_Transfer_to_deposit' => 'Mengkonversi transfer ini ke deposit', + 'convert_Transfer_to_withdrawal' => 'Mengkonversi transfer ini ke penarikan', + 'convert_please_set_revenue_source' => 'Silakan pilih akun pendapatan dari mana uang itu berasal.', + 'convert_please_set_asset_destination' => 'Silakan pilih akun aset dimana uangnya akan digunakan.', + 'convert_please_set_expense_destination' => 'Tolong pilih rekening pengeluaran yang akan digunakan untuk uang.', + 'convert_please_set_asset_source' => 'Silakan pilih akun aset dari mana uang itu berasal.', + 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', + 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', + 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', + 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', + 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', + 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', + 'converted_to_Withdrawal' => 'Transaksi telah dikonversi menjadi penarikan', + 'converted_to_Deposit' => 'Transaksi telah dikonversi menjadi deposit', + 'converted_to_Transfer' => 'Transaksi telah dikonversi menjadi transfer', + 'invalid_convert_selection' => 'Akun yang telah Anda pilih sudah digunakan dalam transaksi ini atau tidak ada.', + 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', + 'convert_to_withdrawal' => 'Convert to a withdrawal', + 'convert_to_deposit' => 'Convert to a deposit', + 'convert_to_transfer' => 'Convert to a transfer', // create new stuff: - 'create_new_withdrawal' => 'Buat penarikan baru', - 'create_new_deposit' => 'Buat deposit baru', - 'create_new_transfer' => 'Buat transfer baru', - 'create_new_asset' => 'Buat akun aset baru', - 'create_new_liabilities' => 'Buat tagihan baru', - 'create_new_expense' => 'Buat akun biaya baru', - 'create_new_revenue' => 'Buat akun pendapatan baru', - 'create_new_piggy_bank' => 'Buat celengan baru', - 'create_new_bill' => 'Buat tagihan baru', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Buat penarikan baru', + 'create_new_deposit' => 'Buat deposit baru', + 'create_new_transfer' => 'Buat transfer baru', + 'create_new_asset' => 'Buat akun aset baru', + 'create_new_liabilities' => 'Buat tagihan baru', + 'create_new_expense' => 'Buat akun biaya baru', + 'create_new_revenue' => 'Buat akun pendapatan baru', + 'create_new_piggy_bank' => 'Buat celengan baru', + 'create_new_bill' => 'Buat tagihan baru', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Buat mata uang baru', - 'store_currency' => 'Simpan mata uang baru', - 'update_currency' => 'Perbarui mata uang', - 'new_default_currency' => ' :name sekarang adalah mata uang default.', - 'cannot_delete_currency' => 'Tidak dapat menghapus :name karena masih digunakan.', - 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', - 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', - 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', - 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', - 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', - 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', - 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', - 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', - 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', - 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', - 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', - 'deleted_currency' => 'Mata uang :name dihapus', - 'created_currency' => 'Mata uang :name dibuat', - 'could_not_store_currency' => 'Could not store the new currency.', - 'updated_currency' => 'Mata uang :name diperbarui', - 'ask_site_owner' => 'Harap bertanya :owner untuk menambahkan, menghapus atau mengedit mata uang.', - 'currencies_intro' => 'Firefly III mendukung berbagai mata uang yang dapat Anda atur dan aktifkan di sini.', - 'make_default_currency' => 'Make default', - 'default_currency' => 'default', - 'currency_is_disabled' => 'Disabled', - 'enable_currency' => 'Enable', - 'disable_currency' => 'Disable', - 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', - 'currency_is_now_enabled' => 'Currency ":name" has been enabled', - 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'create_currency' => 'Buat mata uang baru', + 'store_currency' => 'Simpan mata uang baru', + 'update_currency' => 'Perbarui mata uang', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Tidak dapat menghapus :name karena masih digunakan.', + 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', + 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', + 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', + 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', + 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', + 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', + 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', + 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', + 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', + 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', + 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', + 'deleted_currency' => 'Mata uang :name dihapus', + 'created_currency' => 'Mata uang :name dibuat', + 'could_not_store_currency' => 'Could not store the new currency.', + 'updated_currency' => 'Mata uang :name diperbarui', + 'ask_site_owner' => 'Harap bertanya :owner untuk menambahkan, menghapus atau mengedit mata uang.', + 'currencies_intro' => 'Firefly III mendukung berbagai mata uang yang dapat Anda atur dan aktifkan di sini.', + 'make_default_currency' => 'Make default', + 'default_currency' => 'default', + 'currency_is_disabled' => 'Disabled', + 'enable_currency' => 'Enable', + 'disable_currency' => 'Disable', + 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', + 'currency_is_now_enabled' => 'Currency ":name" has been enabled', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Bidang wajib', - 'optionalFields' => 'Bidang pilihan', - 'options' => 'Pilihan', + 'mandatoryFields' => 'Bidang wajib', + 'optionalFields' => 'Bidang pilihan', + 'options' => 'Pilihan', // budgets: - 'daily_budgets' => 'Daily budgets', - 'weekly_budgets' => 'Weekly budgets', - 'monthly_budgets' => 'Monthly budgets', - 'quarterly_budgets' => 'Quarterly budgets', - 'half_year_budgets' => 'Half-yearly budgets', - 'yearly_budgets' => 'Yearly budgets', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', - 'total_available_budget' => 'Total available budget (between :start and :end)', - 'total_available_budget_in_currency' => 'Total available budget in :currency', - 'see_below' => 'see below', - 'create_new_budget' => 'Buat anggaran baru', - 'store_new_budget' => 'Simpan anggaran baru', - 'stored_new_budget' => 'Anggaran baru tersimpan ":name"', - 'available_between' => 'Tersedia antara :start dan :end', - 'transactionsWithoutBudget' => 'Biaya tanpa anggaran', - 'transactions_no_budget' => 'Biaya tanpa anggaran antara :start dan :end', - 'spent_between' => 'Already spent between :start and :end', - 'set_available_amount' => 'Set available amount', - 'update_available_amount' => 'Update available amount', - 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', - 'createBudget' => 'Anggaran baru', - 'invalid_currency' => 'This is an invalid currency', - 'invalid_amount' => 'Please enter an amount', - 'set_ab' => 'The available budget amount has been set', - 'updated_ab' => 'The available budget amount has been updated', - 'deleted_ab' => 'The available budget amount has been deleted', - 'deleted_bl' => 'The budgeted amount has been removed', - 'alt_currency_ab_create' => 'Set the available budget in another currency', - 'bl_create_btn' => 'Set budget in another currency', - 'inactiveBudgets' => 'Anggaran tidak aktif', - 'without_budget_between' => 'Transaksi tanpa anggaran antara :start dan :end', - 'delete_budget' => 'Hapus anggaran ":name"', - 'deleted_budget' => 'Anggaran yang telah dihapus ":name"', - 'edit_budget' => 'Edit anggaran ":name"', - 'updated_budget' => 'Anggaran yang diperbarui ":name"', - 'update_amount' => 'Perbarui jumlah', - 'update_budget' => 'Perbarui anggaran', - 'update_budget_amount_range' => 'Update (expected) jumlah yang tersedia antara :start and :end', - 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', - 'set_budget_limit' => 'Set budgeted amount', - 'budget_period_navigator' => 'Navigator periode', - 'info_on_available_amount' => 'Apa yang telah tersedia?', - 'available_amount_indication' => 'Gunakan jumlah ini untuk mendapatkan indikasi berapa total anggaran Anda.', - 'suggested' => 'Disarankan', - 'average_between' => 'Rata-rata antara :start dan :end', - 'transferred_in' => 'Transferred (in)', - 'transferred_away' => 'Transferred (away)', - 'auto_budget_none' => 'No auto-budget', - 'auto_budget_reset' => 'Set a fixed amount every period', - 'auto_budget_rollover' => 'Add an amount every period', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Daily', - 'auto_budget_period_weekly' => 'Weekly', - 'auto_budget_period_monthly' => 'Monthly', - 'auto_budget_period_quarterly' => 'Quarterly', - 'auto_budget_period_half_year' => 'Every half year', - 'auto_budget_period_yearly' => 'Yearly', - 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', - 'auto_budget_reset_icon' => 'This budget will be set periodically', - 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', + 'daily_budgets' => 'Daily budgets', + 'weekly_budgets' => 'Weekly budgets', + 'monthly_budgets' => 'Monthly budgets', + 'quarterly_budgets' => 'Quarterly budgets', + 'half_year_budgets' => 'Half-yearly budgets', + 'yearly_budgets' => 'Yearly budgets', + 'other_budgets' => 'Custom timed budgets', + 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', + 'total_available_budget' => 'Total available budget (between :start and :end)', + 'total_available_budget_in_currency' => 'Total available budget in :currency', + 'see_below' => 'see below', + 'create_new_budget' => 'Buat anggaran baru', + 'store_new_budget' => 'Simpan anggaran baru', + 'stored_new_budget' => 'Anggaran baru tersimpan ":name"', + 'available_between' => 'Tersedia antara :start dan :end', + 'transactionsWithoutBudget' => 'Biaya tanpa anggaran', + 'transactions_no_budget' => 'Biaya tanpa anggaran antara :start dan :end', + 'spent_between' => 'Already spent between :start and :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Set available amount', + 'update_available_amount' => 'Update available amount', + 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', + 'createBudget' => 'Anggaran baru', + 'invalid_currency' => 'This is an invalid currency', + 'invalid_amount' => 'Please enter an amount', + 'set_ab' => 'The available budget amount has been set', + 'updated_ab' => 'The available budget amount has been updated', + 'deleted_ab' => 'The available budget amount has been deleted', + 'deleted_bl' => 'The budgeted amount has been removed', + 'alt_currency_ab_create' => 'Set the available budget in another currency', + 'bl_create_btn' => 'Set budget in another currency', + 'inactiveBudgets' => 'Anggaran tidak aktif', + 'without_budget_between' => 'Transaksi tanpa anggaran antara :start dan :end', + 'delete_budget' => 'Hapus anggaran ":name"', + 'deleted_budget' => 'Anggaran yang telah dihapus ":name"', + 'edit_budget' => 'Edit anggaran ":name"', + 'updated_budget' => 'Anggaran yang diperbarui ":name"', + 'update_amount' => 'Perbarui jumlah', + 'update_budget' => 'Perbarui anggaran', + 'update_budget_amount_range' => 'Update (expected) jumlah yang tersedia antara :start and :end', + 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', + 'set_budget_limit' => 'Set budgeted amount', + 'budget_period_navigator' => 'Navigator periode', + 'info_on_available_amount' => 'Apa yang telah tersedia?', + 'available_amount_indication' => 'Gunakan jumlah ini untuk mendapatkan indikasi berapa total anggaran Anda.', + 'suggested' => 'Disarankan', + 'average_between' => 'Rata-rata antara :start dan :end', + 'transferred_in' => 'Transferred (in)', + 'transferred_away' => 'Transferred (away)', + 'auto_budget_none' => 'No auto-budget', + 'auto_budget_reset' => 'Set a fixed amount every period', + 'auto_budget_rollover' => 'Add an amount every period', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Daily', + 'auto_budget_period_weekly' => 'Weekly', + 'auto_budget_period_monthly' => 'Monthly', + 'auto_budget_period_quarterly' => 'Quarterly', + 'auto_budget_period_half_year' => 'Every half year', + 'auto_budget_period_yearly' => 'Yearly', + 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', + 'auto_budget_reset_icon' => 'This budget will be set periodically', + 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Not expected this period', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Not (yet)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Bill matches transactions between :low and :high.', - 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', - 'bill_related_rules' => 'Rules related to this bill', - 'repeats' => 'Berulang', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Transaksi yang terhubung', - 'auto_match_on' => 'Automatically matched by Firefly III', - 'auto_match_off' => 'Not automatically matched by Firefly III', - 'next_expected_match' => 'Pertandingan yang diharapkan berikutnya', - 'delete_bill' => 'Hapus tagihan ":name"', - 'deleted_bill' => 'Tagihan yang dihapus ":name"', - 'edit_bill' => 'Edit tagihan ":name"', - 'more' => 'Lebih', - 'rescan_old' => 'Run rules again, on all transactions', - 'update_bill' => 'Perbarui tagihan', - 'updated_bill' => 'Diperbarui tagihan ":name"', - 'store_new_bill' => 'Simpan tagihan baru', - 'stored_new_bill' => 'Stored tagihan baru ":name"', - 'cannot_scan_inactive_bill' => 'Tagihan tidak aktif tidak dapat dipindai.', - 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', - 'average_bill_amount_year' => 'Jumlah tagihan rata-rata (:year)', - 'average_bill_amount_overall' => 'Jumlah tagihan rata-rata (keseluruhan)', - 'bill_is_active' => 'Tagihan aktif', - 'bill_expected_between' => 'Diharapkan antara :start dan :end', - 'bill_will_automatch' => 'Tagihan akan secara otomatis terhubung ke transaksi yang sesuai', - 'skips_over' => 'melompati', - 'bill_store_error' => 'An unexpected error occurred while storing your new bill. Please check the log files', - 'list_inactive_rule' => 'inactive rule', - 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', - 'bill_expected_date' => 'Expected :date', - 'bill_expected_date_js' => 'Expected {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Paid on {date}', - 'bill_repeats_weekly' => 'Repeats weekly', - 'bill_repeats_monthly' => 'Repeats monthly', - 'bill_repeats_quarterly' => 'Repeats quarterly', - 'bill_repeats_half-year' => 'Repeats every half year', - 'bill_repeats_yearly' => 'Repeats yearly', - 'bill_repeats_weekly_other' => 'Repeats every other week', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Repeats yearly', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Subscriptions', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Forever', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Not expected this period', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Not (yet)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Bill matches transactions between :low and :high.', + 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', + 'bill_related_rules' => 'Rules related to this bill', + 'repeats' => 'Berulang', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Transaksi yang terhubung', + 'auto_match_on' => 'Automatically matched by Firefly III', + 'auto_match_off' => 'Not automatically matched by Firefly III', + 'next_expected_match' => 'Pertandingan yang diharapkan berikutnya', + 'delete_bill' => 'Hapus tagihan ":name"', + 'deleted_bill' => 'Tagihan yang dihapus ":name"', + 'edit_bill' => 'Edit tagihan ":name"', + 'more' => 'Lebih', + 'rescan_old' => 'Run rules again, on all transactions', + 'update_bill' => 'Perbarui tagihan', + 'updated_bill' => 'Diperbarui tagihan ":name"', + 'store_new_bill' => 'Simpan tagihan baru', + 'stored_new_bill' => 'Stored tagihan baru ":name"', + 'cannot_scan_inactive_bill' => 'Tagihan tidak aktif tidak dapat dipindai.', + 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', + 'average_bill_amount_year' => 'Jumlah tagihan rata-rata (:year)', + 'average_bill_amount_overall' => 'Jumlah tagihan rata-rata (keseluruhan)', + 'bill_is_active' => 'Tagihan aktif', + 'bill_expected_between' => 'Diharapkan antara :start dan :end', + 'bill_will_automatch' => 'Tagihan akan secara otomatis terhubung ke transaksi yang sesuai', + 'skips_over' => 'melompati', + 'bill_store_error' => 'An unexpected error occurred while storing your new bill. Please check the log files', + 'list_inactive_rule' => 'inactive rule', + 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', + 'bill_expected_date' => 'Expected :date', + 'bill_expected_date_js' => 'Expected {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Paid on {date}', + 'bill_repeats_weekly' => 'Repeats weekly', + 'bill_repeats_monthly' => 'Repeats monthly', + 'bill_repeats_quarterly' => 'Repeats quarterly', + 'bill_repeats_half-year' => 'Repeats every half year', + 'bill_repeats_yearly' => 'Repeats yearly', + 'bill_repeats_weekly_other' => 'Repeats every other week', + 'bill_repeats_monthly_other' => 'Repeats every other month', + 'bill_repeats_quarterly_other' => 'Repeats every other quarter', + 'bill_repeats_half-year_other' => 'Repeats yearly', + 'bill_repeats_yearly_other' => 'Repeats every other year', + 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', + 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', + 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', + 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', + 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', + 'subscriptions' => 'Subscriptions', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Forever', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', - 'all_accounts_inactive' => 'These are your inactive accounts.', - 'active_account_link' => 'This link goes back to your active accounts.', - 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', - 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', - 'details_for_asset' => 'Rincian akun aset ":name"', - 'details_for_expense' => 'Rincian untuk akun biaya ":name"', - 'details_for_revenue' => 'Rincian untuk akun pendapatan ":name"', - 'details_for_cash' => 'Rincian untuk rekening kas ":name"', - 'store_new_asset_account' => 'Simpan akun aset baru', - 'store_new_expense_account' => 'Simpan akun pengeluaran baru', - 'store_new_revenue_account' => 'Simpan akun pendapatan baru', - 'edit_asset_account' => 'Edit akun aset ":name"', - 'edit_expense_account' => 'Edit akun biaya ":name"', - 'edit_revenue_account' => 'Edit akun pendapatan ":name"', - 'delete_asset_account' => 'Hapus akun aset ":name"', - 'delete_expense_account' => 'Hapus akun pengeluaran ":name"', - 'delete_revenue_account' => 'Hapus akun pendapatan ":name"', - 'delete_liabilities_account' => 'Delete liability ":name"', - 'asset_deleted' => 'Berhasil menghapus akun aset ":name"', - 'account_deleted' => 'Successfully deleted account ":name"', - 'expense_deleted' => 'Akun pengeluaran yang berhasil dihapus ":name"', - 'revenue_deleted' => 'Berhasil menghapus akun pendapatan ":name"', - 'update_asset_account' => 'Perbarui akun aset', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => 'Update liability', - 'update_expense_account' => 'Rekening pengeluaran pembaruan', - 'update_revenue_account' => 'Perbarui akun pendapatan', - 'make_new_asset_account' => 'Buat akun aset baru', - 'make_new_expense_account' => 'Buat akun pengeluaran baru', - 'make_new_revenue_account' => 'Buat akun pendapatan baru', - 'make_new_liabilities_account' => 'Create a new liability', - 'asset_accounts' => 'Akun aset', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Asset accounts (inactive)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Rekening pengeluaran', - 'expense_accounts_inactive' => 'Expense accounts (inactive)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Akun pendapatan', - 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', - 'cash_accounts' => 'Akun kas', - 'Cash account' => 'Akun kas', - 'liabilities_accounts' => 'Liabilities', - 'liabilities_accounts_inactive' => 'Liabilities (inactive)', - 'reconcile_account' => 'Rekonsiliasi akun ":account"', - 'overview_of_reconcile_modal' => 'Overview of reconciliation', - 'delete_reconciliation' => 'Hapus rekonsiliasi', - 'update_reconciliation' => 'Rekonsiliasi pembaruan', - 'amount_cannot_be_zero' => 'Jumlah tersebut tidak dapat menjadi nol', - 'end_of_reconcile_period' => 'Akhir periode rekonsiliasi: :period', - 'start_of_reconcile_period' => 'Mulai dari periode rekonsiliasi: :period', - 'start_balance' => 'Saldo awal', - 'end_balance' => 'Saldo akhir', - 'update_balance_dates_instruction' => 'Sesuai jumlah dan tanggal di atas pernyataan bank Anda, dan tekan "Mulai rekonsiliasi"', - 'select_transactions_instruction' => 'Pilih transaksi yang muncul di laporan bank Anda.', - 'select_range_and_balance' => 'Pertama memverifikasi rentang tanggal dan saldo. Kemudian tekan "Mulai rekonsiliasi"', - 'date_change_instruction' => 'Jika Anda mengubah rentang tanggal sekarang, kemajuan akan hilang.', - 'update_selection' => 'Memperbarui pilihan', - 'store_reconcile' => 'Rekonsiliasi toko', - 'reconciliation_transaction' => 'Transaksi rekonsiliasi', - 'Reconciliation' => 'Rekonsiliasi', - 'reconciliation' => 'Rekonsiliasi', - 'reconcile_options' => 'Pilihan rekonsiliasi', - 'reconcile_range' => 'Jangkauan rekonsiliasi', - 'start_reconcile' => 'Mulai rekonsiliasi', - 'cash_account_type' => 'Cash', - 'cash' => 'tunai', - 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', - 'account_type' => 'Jenis akun', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'Akun baru ":name" disimpan!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => 'Memperbarui akun ":name"', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Pilihan kartu kredit', - 'no_transactions_account' => 'Tidak ada transaksi (dalam periode ini) untuk akun aset ":name".', - 'no_transactions_period' => 'There are no transactions (in this period).', - 'no_data_for_chart' => 'Tidak ada informasi yang cukup (belum) untuk menghasilkan grafik ini.', - 'select_at_least_one_account' => 'Please select at least one asset account', - 'select_at_least_one_category' => 'Please select at least one category', - 'select_at_least_one_budget' => 'Please select at least one budget', - 'select_at_least_one_tag' => 'Please select at least one tag', - 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', - 'account_default_currency' => 'This will be the default currency associated with this account.', - 'reconcile_has_more' => 'Buku Firefly III Anda memiliki lebih banyak uang di dalamnya dari bank Anda klaim Anda harus. Ada beberapa pilihan. Silahkan memilih apa yang harus dilakukan. Kemudian, tekan "Konfirmasi rekonsiliasi".', - 'reconcile_has_less' => 'Buku Firefly III Anda memiliki sedikit uang di dalamnya daripada bank Anda klaim Anda harus. Ada beberapa pilihan. Silahkan memilih apa yang harus dilakukan. Kemudian, tekan "Konfirmasi rekonsiliasi".', - 'reconcile_is_equal' => 'Buku Firefly III Anda dan pernyataan bank Anda cocok. Tidak ada hubungannya. Silahkan tekan "Konfirmasi rekonsiliasi" untuk mengkonfirmasi masukan Anda.', - 'create_pos_reconcile_transaction' => 'Menghapus transaksi yang dipilih, dan membuat koreksi menambahkan :amount ke akun aset ini.', - 'create_neg_reconcile_transaction' => 'Menghapus transaksi yang dipilih, dan membuat koreksi menghapus:amount dari akun aset ini.', - 'reconcile_do_nothing' => 'Menghapus transaksi yang dipilih, tetapi tidak benar.', - 'reconcile_go_back' => 'Anda selalu dapat mengedit atau menghapus koreksi kemudian.', - 'must_be_asset_account' => 'Anda hanya bisa mendamaikan akun aset', - 'reconciliation_stored' => 'Rekonsiliasi disimpan', - 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', - 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', - 'sum_of_reconciliation' => 'Sum of reconciliation', - 'reconcile_this_account' => 'Rekonsiliasi akun ini', - 'reconcile' => 'Reconcile', - 'show' => 'Show', - 'confirm_reconciliation' => 'Konfirmasikan rekonsiliasi', - 'submitted_start_balance' => 'Saldo awal yang dikirim', - 'selected_transactions' => 'Transaksi yang dipilih (:count)', - 'already_cleared_transactions' => 'Sudah dibersihkan transaksi (:count)', - 'submitted_end_balance' => 'Saldo akhir yang dikirim', - 'initial_balance_description' => 'Initial balance for ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'unknown', - 'interest_calc_daily' => 'Per day', - 'interest_calc_monthly' => 'Per month', - 'interest_calc_yearly' => 'Per year', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half year', - 'interest_calc_quarterly' => 'Per quarter', - 'initial_balance_account' => 'Initial balance account of :account', - 'list_options' => 'Pilihan daftar', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', + 'all_accounts_inactive' => 'These are your inactive accounts.', + 'active_account_link' => 'This link goes back to your active accounts.', + 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', + 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', + 'details_for_asset' => 'Rincian akun aset ":name"', + 'details_for_expense' => 'Rincian untuk akun biaya ":name"', + 'details_for_revenue' => 'Rincian untuk akun pendapatan ":name"', + 'details_for_cash' => 'Rincian untuk rekening kas ":name"', + 'store_new_asset_account' => 'Simpan akun aset baru', + 'store_new_expense_account' => 'Simpan akun pengeluaran baru', + 'store_new_revenue_account' => 'Simpan akun pendapatan baru', + 'edit_asset_account' => 'Edit akun aset ":name"', + 'edit_expense_account' => 'Edit akun biaya ":name"', + 'edit_revenue_account' => 'Edit akun pendapatan ":name"', + 'delete_asset_account' => 'Hapus akun aset ":name"', + 'delete_expense_account' => 'Hapus akun pengeluaran ":name"', + 'delete_revenue_account' => 'Hapus akun pendapatan ":name"', + 'delete_liabilities_account' => 'Delete liability ":name"', + 'asset_deleted' => 'Berhasil menghapus akun aset ":name"', + 'account_deleted' => 'Successfully deleted account ":name"', + 'expense_deleted' => 'Akun pengeluaran yang berhasil dihapus ":name"', + 'revenue_deleted' => 'Berhasil menghapus akun pendapatan ":name"', + 'update_asset_account' => 'Perbarui akun aset', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => 'Update liability', + 'update_expense_account' => 'Rekening pengeluaran pembaruan', + 'update_revenue_account' => 'Perbarui akun pendapatan', + 'make_new_asset_account' => 'Buat akun aset baru', + 'make_new_expense_account' => 'Buat akun pengeluaran baru', + 'make_new_revenue_account' => 'Buat akun pendapatan baru', + 'make_new_liabilities_account' => 'Create a new liability', + 'asset_accounts' => 'Akun aset', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Asset accounts (inactive)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Rekening pengeluaran', + 'expense_accounts_inactive' => 'Expense accounts (inactive)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Akun pendapatan', + 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', + 'cash_accounts' => 'Akun kas', + 'Cash account' => 'Akun kas', + 'liabilities_accounts' => 'Liabilities', + 'liabilities_accounts_inactive' => 'Liabilities (inactive)', + 'reconcile_account' => 'Rekonsiliasi akun ":account"', + 'overview_of_reconcile_modal' => 'Overview of reconciliation', + 'delete_reconciliation' => 'Hapus rekonsiliasi', + 'update_reconciliation' => 'Rekonsiliasi pembaruan', + 'amount_cannot_be_zero' => 'Jumlah tersebut tidak dapat menjadi nol', + 'end_of_reconcile_period' => 'Akhir periode rekonsiliasi: :period', + 'start_of_reconcile_period' => 'Mulai dari periode rekonsiliasi: :period', + 'start_balance' => 'Saldo awal', + 'end_balance' => 'Saldo akhir', + 'update_balance_dates_instruction' => 'Sesuai jumlah dan tanggal di atas pernyataan bank Anda, dan tekan "Mulai rekonsiliasi"', + 'select_transactions_instruction' => 'Pilih transaksi yang muncul di laporan bank Anda.', + 'select_range_and_balance' => 'Pertama memverifikasi rentang tanggal dan saldo. Kemudian tekan "Mulai rekonsiliasi"', + 'date_change_instruction' => 'Jika Anda mengubah rentang tanggal sekarang, kemajuan akan hilang.', + 'update_selection' => 'Memperbarui pilihan', + 'store_reconcile' => 'Rekonsiliasi toko', + 'reconciliation_transaction' => 'Transaksi rekonsiliasi', + 'Reconciliation' => 'Rekonsiliasi', + 'reconciliation' => 'Rekonsiliasi', + 'reconcile_options' => 'Pilihan rekonsiliasi', + 'reconcile_range' => 'Jangkauan rekonsiliasi', + 'start_reconcile' => 'Mulai rekonsiliasi', + 'cash_account_type' => 'Cash', + 'cash' => 'tunai', + 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', + 'account_type' => 'Jenis akun', + 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => 'Akun baru ":name" disimpan!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => 'Memperbarui akun ":name"', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Pilihan kartu kredit', + 'no_transactions_account' => 'Tidak ada transaksi (dalam periode ini) untuk akun aset ":name".', + 'no_transactions_period' => 'There are no transactions (in this period).', + 'no_data_for_chart' => 'Tidak ada informasi yang cukup (belum) untuk menghasilkan grafik ini.', + 'select_at_least_one_account' => 'Please select at least one asset account', + 'select_at_least_one_category' => 'Please select at least one category', + 'select_at_least_one_budget' => 'Please select at least one budget', + 'select_at_least_one_tag' => 'Please select at least one tag', + 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', + 'account_default_currency' => 'This will be the default currency associated with this account.', + 'reconcile_has_more' => 'Buku Firefly III Anda memiliki lebih banyak uang di dalamnya dari bank Anda klaim Anda harus. Ada beberapa pilihan. Silahkan memilih apa yang harus dilakukan. Kemudian, tekan "Konfirmasi rekonsiliasi".', + 'reconcile_has_less' => 'Buku Firefly III Anda memiliki sedikit uang di dalamnya daripada bank Anda klaim Anda harus. Ada beberapa pilihan. Silahkan memilih apa yang harus dilakukan. Kemudian, tekan "Konfirmasi rekonsiliasi".', + 'reconcile_is_equal' => 'Buku Firefly III Anda dan pernyataan bank Anda cocok. Tidak ada hubungannya. Silahkan tekan "Konfirmasi rekonsiliasi" untuk mengkonfirmasi masukan Anda.', + 'create_pos_reconcile_transaction' => 'Menghapus transaksi yang dipilih, dan membuat koreksi menambahkan :amount ke akun aset ini.', + 'create_neg_reconcile_transaction' => 'Menghapus transaksi yang dipilih, dan membuat koreksi menghapus:amount dari akun aset ini.', + 'reconcile_do_nothing' => 'Menghapus transaksi yang dipilih, tetapi tidak benar.', + 'reconcile_go_back' => 'Anda selalu dapat mengedit atau menghapus koreksi kemudian.', + 'must_be_asset_account' => 'Anda hanya bisa mendamaikan akun aset', + 'reconciliation_stored' => 'Rekonsiliasi disimpan', + 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', + 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', + 'sum_of_reconciliation' => 'Sum of reconciliation', + 'reconcile_this_account' => 'Rekonsiliasi akun ini', + 'reconcile' => 'Reconcile', + 'show' => 'Show', + 'confirm_reconciliation' => 'Konfirmasikan rekonsiliasi', + 'submitted_start_balance' => 'Saldo awal yang dikirim', + 'selected_transactions' => 'Transaksi yang dipilih (:count)', + 'already_cleared_transactions' => 'Sudah dibersihkan transaksi (:count)', + 'submitted_end_balance' => 'Saldo akhir yang dikirim', + 'initial_balance_description' => 'Initial balance for ":account"', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'unknown', + 'interest_calc_daily' => 'Per day', + 'interest_calc_monthly' => 'Per month', + 'interest_calc_yearly' => 'Per year', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half year', + 'interest_calc_quarterly' => 'Per quarter', + 'initial_balance_account' => 'Initial balance account of :account', + 'list_options' => 'Pilihan daftar', // categories: - 'new_category' => 'Kategori baru', - 'create_new_category' => 'Buat kategori baru', - 'without_category' => 'Tanpa kategori', - 'update_category' => 'Perbarui kategori', - 'updated_category' => 'Kategori yang Diperbarui ":name"', - 'categories' => 'Kategori', - 'edit_category' => 'Edit kategori ":name"', - 'no_category' => '(tidak ada kategori)', - 'unknown_category_plain' => 'No category', - 'category' => 'Kategori', - 'delete_category' => 'Hapus kategori ":name"', - 'deleted_category' => 'Kategori yang dihapus ":name"', - 'store_category' => 'Simpan kategori baru', - 'stored_category' => 'Stored new category ":name"', - 'without_category_between' => 'Tanpa kategori antara :start dan :end', + 'new_category' => 'Kategori baru', + 'create_new_category' => 'Buat kategori baru', + 'without_category' => 'Tanpa kategori', + 'update_category' => 'Perbarui kategori', + 'updated_category' => 'Kategori yang Diperbarui ":name"', + 'categories' => 'Kategori', + 'edit_category' => 'Edit kategori ":name"', + 'no_category' => '(tidak ada kategori)', + 'unknown_category_plain' => 'No category', + 'category' => 'Kategori', + 'delete_category' => 'Hapus kategori ":name"', + 'deleted_category' => 'Kategori yang dihapus ":name"', + 'store_category' => 'Simpan kategori baru', + 'stored_category' => 'Stored new category ":name"', + 'without_category_between' => 'Tanpa kategori antara :start dan :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Perbarui penarikan', - 'update_deposit' => 'Perbarui setoran', - 'update_transaction' => 'Update transaction', - 'update_transfer' => 'Perbarui transfer', - 'updated_withdrawal' => 'Penarikan yang telah diupdate ":description"', - 'updated_deposit' => 'Deposit Diperbarui ":description"', - 'updated_transfer' => 'Transfer yang diperbarui ":description"', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => 'Hapus penarikan ":description"', - 'delete_deposit' => 'Hapus deposit ":description"', - 'delete_transfer' => 'Hapus transfer ":description"', - 'deleted_withdrawal' => 'Penarikan yang berhasil dihapus ":description"', - 'deleted_deposit' => 'Berhasil menghapus deposit ":description"', - 'deleted_transfer' => 'Berhasil menghapus transfer ":description"', - 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', - 'stored_journal' => 'Berhasil membuat transaksi baru ":description"', - 'stored_journal_no_descr' => 'Successfully created your new transaction', - 'updated_journal_no_descr' => 'Successfully updated your transaction', - 'select_transactions' => 'Pilih transaksi', - 'rule_group_select_transactions' => 'Terapkan ":title" untuk transaksi', - 'rule_select_transactions' => 'Terapkan ":title" untuk transaksi', - 'stop_selection' => 'Berhentilah memilih transaksi', - 'reconcile_selected' => 'Mendamaikan', - 'mass_delete_journals' => 'Hapus sejumlah transaksi', - 'mass_edit_journals' => 'Edit sejumlah transaksi', - 'mass_bulk_journals' => 'Bulk edit a number of transactions', - 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', - 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', - 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', - 'no_bulk_category' => 'Don\'t update category', - 'no_bulk_budget' => 'Don\'t update budget', - 'no_bulk_tags' => 'Don\'t update tag(s)', - 'replace_with_these_tags' => 'Replace with these tags', - 'append_these_tags' => 'Add these tags', - 'mass_edit' => 'Edit selected individually', - 'bulk_edit' => 'Edit selected in bulk', - 'mass_delete' => 'Delete selected', - 'cannot_edit_other_fields' => 'Anda tidak bisa menyunting bidang lain dari yang lain di sini, karena tidak ada ruang untuk ditunjukkan kepada mereka. Ikuti tautan dan edit dengan satu per satu, jika Anda perlu mengedit bidang ini.', - 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', - 'no_budget' => '(no budget)', - 'no_bill' => '(no bill)', - 'account_per_budget' => 'Account per budget', - 'account_per_category' => 'Account per category', - 'create_new_object' => 'Create', - 'empty' => '(empty)', - 'all_other_budgets' => '(all other budgets)', - 'all_other_accounts' => '(all other accounts)', - 'expense_per_source_account' => 'Expenses per source account', - 'expense_per_destination_account' => 'Expenses per destination account', - 'income_per_destination_account' => 'Income per destination account', - 'spent_in_specific_category' => 'Spent in category ":category"', - 'earned_in_specific_category' => 'Earned in category ":category"', - 'spent_in_specific_tag' => 'Spent in tag ":tag"', - 'earned_in_specific_tag' => 'Earned in tag ":tag"', - 'income_per_source_account' => 'Income per source account', - 'average_spending_per_destination' => 'Average expense per destination account', - 'average_spending_per_source' => 'Average expense per source account', - 'average_earning_per_source' => 'Average earning per source account', - 'average_earning_per_destination' => 'Average earning per destination account', - 'account_per_tag' => 'Account per tag', - 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', - 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', - 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', - 'tag' => 'Tag', - 'no_budget_squared' => '(tidak ada anggaran)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(no account type)', - 'opt_group_no_account_type' => '(tidak ada jenis akun)', - 'opt_group_defaultAsset' => 'Akun aset standar', - 'opt_group_savingAsset' => 'Menyimpan akun', - 'opt_group_sharedAsset' => 'Akun aset bersama', - 'opt_group_ccAsset' => 'Kartu kredit', - 'opt_group_cashWalletAsset' => 'Cash wallets', - 'opt_group_expense_account' => 'Expense accounts', - 'opt_group_revenue_account' => 'Revenue accounts', - 'opt_group_l_Loan' => 'Liability: Loan', - 'opt_group_cash_account' => 'Cash account', - 'opt_group_l_Debt' => 'Liability: Debt', - 'opt_group_l_Mortgage' => 'Liability: Mortgage', - 'opt_group_l_Credit card' => 'Liability: Credit card', - 'notes' => 'Notes', - 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.', - 'attachment_not_found' => 'This attachment could not be found.', - 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', - 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', - 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Perbarui penarikan', + 'update_deposit' => 'Perbarui setoran', + 'update_transaction' => 'Update transaction', + 'update_transfer' => 'Perbarui transfer', + 'updated_withdrawal' => 'Penarikan yang telah diupdate ":description"', + 'updated_deposit' => 'Deposit Diperbarui ":description"', + 'updated_transfer' => 'Transfer yang diperbarui ":description"', + 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', + 'no_changes_deposit' => 'Deposit ":description" was not changed.', + 'no_changes_transfer' => 'Transfer ":description" was not changed.', + 'delete_withdrawal' => 'Hapus penarikan ":description"', + 'delete_deposit' => 'Hapus deposit ":description"', + 'delete_transfer' => 'Hapus transfer ":description"', + 'deleted_withdrawal' => 'Penarikan yang berhasil dihapus ":description"', + 'deleted_deposit' => 'Berhasil menghapus deposit ":description"', + 'deleted_transfer' => 'Berhasil menghapus transfer ":description"', + 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', + 'stored_journal' => 'Berhasil membuat transaksi baru ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Successfully created your new transaction', + 'updated_journal_no_descr' => 'Successfully updated your transaction', + 'select_transactions' => 'Pilih transaksi', + 'rule_group_select_transactions' => 'Terapkan ":title" untuk transaksi', + 'rule_select_transactions' => 'Terapkan ":title" untuk transaksi', + 'stop_selection' => 'Berhentilah memilih transaksi', + 'reconcile_selected' => 'Mendamaikan', + 'mass_delete_journals' => 'Hapus sejumlah transaksi', + 'mass_edit_journals' => 'Edit sejumlah transaksi', + 'mass_bulk_journals' => 'Bulk edit a number of transactions', + 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', + 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', + 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', + 'no_bulk_category' => 'Don\'t update category', + 'no_bulk_budget' => 'Don\'t update budget', + 'no_bulk_tags' => 'Don\'t update tag(s)', + 'replace_with_these_tags' => 'Replace with these tags', + 'append_these_tags' => 'Add these tags', + 'mass_edit' => 'Edit selected individually', + 'bulk_edit' => 'Edit selected in bulk', + 'mass_delete' => 'Delete selected', + 'cannot_edit_other_fields' => 'Anda tidak bisa menyunting bidang lain dari yang lain di sini, karena tidak ada ruang untuk ditunjukkan kepada mereka. Ikuti tautan dan edit dengan satu per satu, jika Anda perlu mengedit bidang ini.', + 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', + 'no_budget' => '(no budget)', + 'no_bill' => '(no bill)', + 'account_per_budget' => 'Account per budget', + 'account_per_category' => 'Account per category', + 'create_new_object' => 'Create', + 'empty' => '(empty)', + 'all_other_budgets' => '(all other budgets)', + 'all_other_accounts' => '(all other accounts)', + 'expense_per_source_account' => 'Expenses per source account', + 'expense_per_destination_account' => 'Expenses per destination account', + 'income_per_destination_account' => 'Income per destination account', + 'spent_in_specific_category' => 'Spent in category ":category"', + 'earned_in_specific_category' => 'Earned in category ":category"', + 'spent_in_specific_tag' => 'Spent in tag ":tag"', + 'earned_in_specific_tag' => 'Earned in tag ":tag"', + 'income_per_source_account' => 'Income per source account', + 'average_spending_per_destination' => 'Average expense per destination account', + 'average_spending_per_source' => 'Average expense per source account', + 'average_earning_per_source' => 'Average earning per source account', + 'average_earning_per_destination' => 'Average earning per destination account', + 'account_per_tag' => 'Account per tag', + 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', + 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', + 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', + 'tag' => 'Tag', + 'no_budget_squared' => '(tidak ada anggaran)', + 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', + 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', + 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', + 'opt_group_' => '(no account type)', + 'opt_group_no_account_type' => '(tidak ada jenis akun)', + 'opt_group_defaultAsset' => 'Akun aset standar', + 'opt_group_savingAsset' => 'Menyimpan akun', + 'opt_group_sharedAsset' => 'Akun aset bersama', + 'opt_group_ccAsset' => 'Kartu kredit', + 'opt_group_cashWalletAsset' => 'Cash wallets', + 'opt_group_expense_account' => 'Expense accounts', + 'opt_group_revenue_account' => 'Revenue accounts', + 'opt_group_l_Loan' => 'Liability: Loan', + 'opt_group_cash_account' => 'Cash account', + 'opt_group_l_Debt' => 'Liability: Debt', + 'opt_group_l_Mortgage' => 'Liability: Mortgage', + 'opt_group_l_Credit card' => 'Liability: Credit card', + 'notes' => 'Notes', + 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.', + 'attachment_not_found' => 'This attachment could not be found.', + 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', + 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', + 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => 'Welcome to Firefly III!', - 'submit' => 'Menyerahkan', - 'submission' => 'Submission', - 'submit_yes_really' => 'Submit (I know what I\'m doing)', - 'getting_started' => 'Mulai', - 'to_get_started' => 'Senang melihat Anda berhasil memasang Firefly III. Untuk memulai dengan alat ini, harap masukkan nama bank dan saldo rekening giro utama Anda. Jangan khawatir jika Anda memiliki banyak akun. Anda bisa menambahkannya nanti. Hanya saja Firefly III butuh sesuatu untuk memulai.', - 'savings_balance_text' => 'Firefly III secara otomatis akan membuat rekening tabungan untuk Anda. Secara default, tidak akan ada uang di rekening tabungan Anda, tapi jika Anda memberi tahu Firefly III, saldo itu akan disimpan seperti itu.', - 'finish_up_new_user' => 'Itu dia! Anda dapat melanjutkan dengan menekan Kirim. Anda akan dibawa ke indeks Firefly III.', - 'stored_new_accounts_new_user' => 'Yay! Akun baru Anda telah disimpan.', - 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', - 'language' => 'Language', - 'new_savings_account' => ':bank_name savings account', - 'cash_wallet' => 'Cash wallet', - 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', + 'welcome' => 'Welcome to Firefly III!', + 'submit' => 'Menyerahkan', + 'submission' => 'Submission', + 'submit_yes_really' => 'Submit (I know what I\'m doing)', + 'getting_started' => 'Mulai', + 'to_get_started' => 'Senang melihat Anda berhasil memasang Firefly III. Untuk memulai dengan alat ini, harap masukkan nama bank dan saldo rekening giro utama Anda. Jangan khawatir jika Anda memiliki banyak akun. Anda bisa menambahkannya nanti. Hanya saja Firefly III butuh sesuatu untuk memulai.', + 'savings_balance_text' => 'Firefly III secara otomatis akan membuat rekening tabungan untuk Anda. Secara default, tidak akan ada uang di rekening tabungan Anda, tapi jika Anda memberi tahu Firefly III, saldo itu akan disimpan seperti itu.', + 'finish_up_new_user' => 'Itu dia! Anda dapat melanjutkan dengan menekan Kirim. Anda akan dibawa ke indeks Firefly III.', + 'stored_new_accounts_new_user' => 'Yay! Akun baru Anda telah disimpan.', + 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', + 'language' => 'Language', + 'new_savings_account' => ':bank_name savings account', + 'cash_wallet' => 'Cash wallet', + 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', // home page: - 'transaction_table_description' => 'A table containing your transactions', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => 'Akun anda', - 'your_accounts' => 'Your account overview', - 'category_overview' => 'Category overview', - 'expense_overview' => 'Expense account overview', - 'revenue_overview' => 'Revenue account overview', - 'budgetsAndSpending' => 'Anggaran dan belanja', - 'budgets_and_spending' => 'Budgets and spending', - 'go_to_budget' => 'Go to budget "{budget}"', - 'go_to_deposits' => 'Go to deposits', - 'go_to_expenses' => 'Go to expenses', - 'savings' => 'Tabungan', - 'newWithdrawal' => 'Biaya baru', - 'newDeposit' => 'Deposit baru', - 'newTransfer' => 'Transfer baru', - 'bills_to_pay' => 'Bills untuk membayar', - 'per_day' => 'Per hari', - 'left_to_spend_per_day' => 'Kiri untuk dibelanjakan per hari', - 'bills_paid' => 'Tagihan dibayar', - 'custom_period' => 'Custom period', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Select a period', + 'transaction_table_description' => 'A table containing your transactions', + 'opposing_account' => 'Opposing account', + 'yourAccounts' => 'Akun anda', + 'your_accounts' => 'Your account overview', + 'category_overview' => 'Category overview', + 'expense_overview' => 'Expense account overview', + 'revenue_overview' => 'Revenue account overview', + 'budgetsAndSpending' => 'Anggaran dan belanja', + 'budgets_and_spending' => 'Budgets and spending', + 'go_to_budget' => 'Go to budget "{budget}"', + 'go_to_deposits' => 'Go to deposits', + 'go_to_expenses' => 'Go to expenses', + 'savings' => 'Tabungan', + 'newWithdrawal' => 'Biaya baru', + 'newDeposit' => 'Deposit baru', + 'newTransfer' => 'Transfer baru', + 'bills_to_pay' => 'Bills untuk membayar', + 'per_day' => 'Per hari', + 'left_to_spend_per_day' => 'Kiri untuk dibelanjakan per hari', + 'bills_paid' => 'Tagihan dibayar', + 'custom_period' => 'Custom period', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Select a period', // menu and titles, should be recycled as often as possible: - 'currency' => 'Mata uang', - 'preferences' => 'Preferensi', - 'logout' => 'Keluar', - 'logout_other_sessions' => 'Logout all other sessions', - 'toggleNavigation' => 'Toggle navigation', - 'searchPlaceholder' => 'Pencarian...', - 'version' => 'Versi', - 'dashboard' => 'Dasbor', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Available budget ({currency})', - 'currencies' => 'Mata uang', - 'activity' => 'Activity', - 'usage' => 'Usage', - 'accounts' => 'Akun', - 'Asset account' => 'Akun aset', - 'Default account' => 'Akun aset', - 'Expense account' => 'Rekening pengeluaran', - 'Revenue account' => 'Akun pendapatan', - 'Initial balance account' => 'Akun saldo awal', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Debt', - 'account_type_Loan' => 'Loan', - 'account_type_Mortgage' => 'Mortgage', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Credit card', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Anggaran', - 'tags' => 'Tag', - 'reports' => 'Laporan', - 'transactions' => 'Transaksi', - 'expenses' => 'Beban', - 'income' => 'Pendapatan / penghasilan', - 'transfers' => 'Transfer', - 'moneyManagement' => 'Manajemen keuangan', - 'money_management' => 'Money management', - 'tools' => 'Tools', - 'piggyBanks' => 'Celengan babi', - 'piggy_banks' => 'Piggy banks', - 'amount_x_of_y' => '{current} of {total}', - 'bills' => 'Tagihan', - 'withdrawal' => 'Penarikan', - 'opening_balance' => 'Saldo awal', - 'deposit' => 'Deposito', - 'account' => 'Rekening', - 'transfer' => 'Transfer', - 'Withdrawal' => 'Penarikan', - 'Deposit' => 'Deposit', - 'Transfer' => 'Transfer', - 'bill' => 'Tagihan', - 'yes' => 'Iya', - 'no' => 'Tidak', - 'amount' => 'Jumlah', - 'overview' => 'Ikhtisar', - 'saveOnAccount' => 'Simpan di rekening', - 'unknown' => 'Tidak diketahui', - 'monthly' => 'Bulanan', - 'profile' => 'Profil', - 'errors' => 'Kesalahan', - 'debt_start_date' => 'Start date of debt', - 'debt_start_amount' => 'Start amount of debt', - 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', - 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', - 'store_new_liabilities_account' => 'Store new liability', - 'edit_liabilities_account' => 'Edit liability ":name"', - 'financial_control' => 'Financial control', - 'accounting' => 'Accounting', - 'automation' => 'Automation', - 'others' => 'Others', - 'classification' => 'Classification', - 'store_transaction' => 'Store transaction', + 'currency' => 'Mata uang', + 'preferences' => 'Preferensi', + 'logout' => 'Keluar', + 'logout_other_sessions' => 'Logout all other sessions', + 'toggleNavigation' => 'Toggle navigation', + 'searchPlaceholder' => 'Pencarian...', + 'version' => 'Versi', + 'dashboard' => 'Dasbor', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Available budget ({currency})', + 'currencies' => 'Mata uang', + 'activity' => 'Activity', + 'usage' => 'Usage', + 'accounts' => 'Akun', + 'Asset account' => 'Akun aset', + 'Default account' => 'Akun aset', + 'Expense account' => 'Rekening pengeluaran', + 'Revenue account' => 'Akun pendapatan', + 'Initial balance account' => 'Akun saldo awal', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Debt', + 'account_type_Loan' => 'Loan', + 'account_type_Mortgage' => 'Mortgage', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Credit card', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'I am owed this debt', + 'liability_direction_debit' => 'I owe this debt to somebody else', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Anggaran', + 'tags' => 'Tag', + 'reports' => 'Laporan', + 'transactions' => 'Transaksi', + 'expenses' => 'Beban', + 'income' => 'Pendapatan / penghasilan', + 'transfers' => 'Transfer', + 'moneyManagement' => 'Manajemen keuangan', + 'money_management' => 'Money management', + 'tools' => 'Tools', + 'piggyBanks' => 'Celengan babi', + 'piggy_banks' => 'Piggy banks', + 'amount_x_of_y' => '{current} of {total}', + 'bills' => 'Tagihan', + 'withdrawal' => 'Penarikan', + 'opening_balance' => 'Saldo awal', + 'deposit' => 'Deposito', + 'account' => 'Rekening', + 'transfer' => 'Transfer', + 'Withdrawal' => 'Penarikan', + 'Deposit' => 'Deposit', + 'Transfer' => 'Transfer', + 'bill' => 'Tagihan', + 'yes' => 'Iya', + 'no' => 'Tidak', + 'amount' => 'Jumlah', + 'overview' => 'Ikhtisar', + 'saveOnAccount' => 'Simpan di rekening', + 'unknown' => 'Tidak diketahui', + 'monthly' => 'Bulanan', + 'profile' => 'Profil', + 'errors' => 'Kesalahan', + 'debt_start_date' => 'Start date of debt', + 'debt_start_amount' => 'Start amount of debt', + 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', + 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', + 'store_new_liabilities_account' => 'Store new liability', + 'edit_liabilities_account' => 'Edit liability ":name"', + 'financial_control' => 'Financial control', + 'accounting' => 'Accounting', + 'automation' => 'Automation', + 'others' => 'Others', + 'classification' => 'Classification', + 'store_transaction' => 'Store transaction', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Laporan keuangan standar antara :start dan :end', - 'report_audit' => 'Ikhtisar riwayat transaksi antara :start dan :end', - 'report_category' => 'Kategori laporan antara :start dan :end', - 'report_double' => 'Expense/revenue account report between :start and :end', - 'report_budget' => 'Laporan anggaran antara :start dan :end', - 'report_tag' => 'Tag laporan antara :start dan :end', - 'quick_link_reports' => 'Tautan langsung', - 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', - 'quick_link_default_report' => 'Laporan keuangan standar', - 'quick_link_audit_report' => 'Ikhtisar sejarah transaksi', - 'report_this_month_quick' => 'Bulan ini, semua akun', - 'report_last_month_quick' => 'Last month, all accounts', - 'report_this_year_quick' => 'Tahun berjalan, semua akun', - 'report_this_fiscal_year_quick' => 'Tahun fiskal berjalan, semua akun', - 'report_all_time_quick' => 'Semua waktu, semua akun', - 'reports_can_bookmark' => 'Ingat bahwa laporan bisa di bookmark.', - 'incomeVsExpenses' => 'Penghasilan vs beban', - 'accountBalances' => 'Saldo akun', - 'balanceStart' => 'Saldo awal periode', - 'balanceEnd' => 'Saldo akhir periode', - 'splitByAccount' => 'Dibagi oleh akun', - 'coveredWithTags' => 'Ditutupi dengan tag', - 'leftInBudget' => 'Yang tersisa di anggaran', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Jumlah dari jumlah', - 'noCategory' => '(Tidak ada kategori)', - 'notCharged' => 'Tidak dikenakan biaya (belum)', - 'inactive' => 'Tidak-aktif', - 'active' => 'Aktif', - 'difference' => 'Perbedaan', - 'money_flowing_in' => 'Dalam', - 'money_flowing_out' => 'Keluar', - 'topX' => 'atas :number', - 'show_full_list' => 'Tampilkan seluruh daftar', - 'show_only_top' => 'Tampilkan hanya atas :number', - 'report_type' => 'Tipe laporan', - 'report_type_default' => 'Laporan keuangan standar', - 'report_type_audit' => 'Gambaran riwayat transaksi (audit)', - 'report_type_category' => 'Laporan Kategori', - 'report_type_budget' => 'Laporan anggaran', - 'report_type_tag' => 'Tag laporan', - 'report_type_double' => 'Expense/revenue account report', - 'more_info_help' => 'Informasi lebih lanjut tentang jenis laporan dapat ditemukan di halaman bantuan. Tekan ikon (?) Di sudut kanan atas.', - 'report_included_accounts' => 'Termasuk akun', - 'report_date_range' => 'Rentang tanggal', - 'report_preset_ranges' => 'Rentang pre-set', - 'shared' => 'Bagikan', - 'fiscal_year' => 'Tahun fiskal', - 'income_entry' => 'Penghasilan dari akun ":name" antara :start dan :end', - 'expense_entry' => 'Biaya untuk akun ":name" antara :start dan :end', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => 'Biaya anggaran ":budget" antara :start dan :end', - 'balance_amount' => 'Biaya dalam anggaran ":budget" dibayar dari rekening ":account" antara :start dan :end', - 'no_audit_activity' => 'Tidak ada aktivitas yang tercatat dalam akun :account_name antara :start and :end.', - 'audit_end_balance' => 'Saldo akun :account_name di akhir :end adalah :balance', - 'reports_extra_options' => 'Pilihan ekstra', - 'report_has_no_extra_options' => 'Laporan ini tidak memiliki pilihan tambahan', - 'reports_submit' => 'Melihat laporan', - 'end_after_start_date' => 'Tanggal akhir laporan harus setelah tanggal mulai.', - 'select_category' => 'Pilih kategori (ies)', - 'select_budget' => 'Pilih anggaran.', - 'select_tag' => 'Pilih tag.', - 'income_per_category' => 'Pendapatan per kategori', - 'expense_per_category' => 'Biaya per kategori', - 'expense_per_budget' => 'Biaya per anggaran', - 'income_per_account' => 'Pendapatan per rekening', - 'expense_per_account' => 'Biaya per akun', - 'expense_per_tag' => 'Biaya per tag', - 'income_per_tag' => 'Penghasilan per tag', - 'include_expense_not_in_budget' => 'Termasuk biaya tidak dalam anggaran yang dipilih', - 'include_expense_not_in_account' => 'Termasuk biaya yang tidak termasuk dalam akun yang dipilih', - 'include_expense_not_in_category' => 'Termasuk biaya yang tidak termasuk dalam kategori yang dipilih', - 'include_income_not_in_category' => 'Termasuk pendapatan tidak dalam kategori yang dipilih (ies)', - 'include_income_not_in_account' => 'Termasuk pendapatan tidak dalam akun yang dipilih(s)', - 'include_income_not_in_tags' => 'Termasuk pendapatan tidak dalam tag yang dipilih', - 'include_expense_not_in_tags' => 'Termasuk biaya yang tidak termasuk dalam tag yang dipilih', - 'everything_else' => 'Yang lainnya', - 'income_and_expenses' => 'Penghasilan dan beban', - 'spent_average' => 'Menghabiskan (rata-rata)', - 'income_average' => 'Penghasilan (rata-rata)', - 'transaction_count' => 'Jumlah transaksi', - 'average_spending_per_account' => 'Rata-rata pengeluaran per akun', - 'average_income_per_account' => 'Pendapatan rata-rata per rekening', - 'total' => 'Total', - 'description' => 'Deskripsi', - 'sum_of_period' => 'Jumlah periode', - 'average_in_period' => 'Rata-rata dalam periode', - 'account_role_defaultAsset' => 'Akun aset standar', - 'account_role_sharedAsset' => 'Akun aset bersama', - 'account_role_savingAsset' => 'Rekening tabungan', - 'account_role_ccAsset' => 'Kartu kredit', - 'account_role_cashWalletAsset' => 'Cash wallet', - 'budget_chart_click' => 'Silahkan klik nama anggaran pada tabel di atas untuk melihat grafik.', - 'category_chart_click' => 'Silahkan klik pada nama kategori pada tabel di atas untuk melihat grafik.', - 'in_out_accounts' => 'Diperoleh dan dihabiskan per kombinasi', - 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', - 'in_out_per_category' => 'Diperoleh dan dibelanjakan per kategori', - 'out_per_budget' => 'Menghabiskan per anggaran', - 'select_expense_revenue' => 'Pilih akun biaya / pendapatan', - 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', - 'sum_in_default_currency' => 'The sum will always be in your default currency.', - 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', + 'report_default' => 'Laporan keuangan standar antara :start dan :end', + 'report_audit' => 'Ikhtisar riwayat transaksi antara :start dan :end', + 'report_category' => 'Kategori laporan antara :start dan :end', + 'report_double' => 'Expense/revenue account report between :start and :end', + 'report_budget' => 'Laporan anggaran antara :start dan :end', + 'report_tag' => 'Tag laporan antara :start dan :end', + 'quick_link_reports' => 'Tautan langsung', + 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', + 'quick_link_default_report' => 'Laporan keuangan standar', + 'quick_link_audit_report' => 'Ikhtisar sejarah transaksi', + 'report_this_month_quick' => 'Bulan ini, semua akun', + 'report_last_month_quick' => 'Last month, all accounts', + 'report_this_year_quick' => 'Tahun berjalan, semua akun', + 'report_this_fiscal_year_quick' => 'Tahun fiskal berjalan, semua akun', + 'report_all_time_quick' => 'Semua waktu, semua akun', + 'reports_can_bookmark' => 'Ingat bahwa laporan bisa di bookmark.', + 'incomeVsExpenses' => 'Penghasilan vs beban', + 'accountBalances' => 'Saldo akun', + 'balanceStart' => 'Saldo awal periode', + 'balanceEnd' => 'Saldo akhir periode', + 'splitByAccount' => 'Dibagi oleh akun', + 'coveredWithTags' => 'Ditutupi dengan tag', + 'leftInBudget' => 'Yang tersisa di anggaran', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Jumlah dari jumlah', + 'noCategory' => '(Tidak ada kategori)', + 'notCharged' => 'Tidak dikenakan biaya (belum)', + 'inactive' => 'Tidak-aktif', + 'active' => 'Aktif', + 'difference' => 'Perbedaan', + 'money_flowing_in' => 'Dalam', + 'money_flowing_out' => 'Keluar', + 'topX' => 'atas :number', + 'show_full_list' => 'Tampilkan seluruh daftar', + 'show_only_top' => 'Tampilkan hanya atas :number', + 'report_type' => 'Tipe laporan', + 'report_type_default' => 'Laporan keuangan standar', + 'report_type_audit' => 'Gambaran riwayat transaksi (audit)', + 'report_type_category' => 'Laporan Kategori', + 'report_type_budget' => 'Laporan anggaran', + 'report_type_tag' => 'Tag laporan', + 'report_type_double' => 'Expense/revenue account report', + 'more_info_help' => 'Informasi lebih lanjut tentang jenis laporan dapat ditemukan di halaman bantuan. Tekan ikon (?) Di sudut kanan atas.', + 'report_included_accounts' => 'Termasuk akun', + 'report_date_range' => 'Rentang tanggal', + 'report_preset_ranges' => 'Rentang pre-set', + 'shared' => 'Bagikan', + 'fiscal_year' => 'Tahun fiskal', + 'income_entry' => 'Penghasilan dari akun ":name" antara :start dan :end', + 'expense_entry' => 'Biaya untuk akun ":name" antara :start dan :end', + 'category_entry' => 'Expenses and income in category ":name" between :start and :end', + 'budget_spent_amount' => 'Biaya anggaran ":budget" antara :start dan :end', + 'balance_amount' => 'Biaya dalam anggaran ":budget" dibayar dari rekening ":account" antara :start dan :end', + 'no_audit_activity' => 'Tidak ada aktivitas yang tercatat dalam akun :account_name antara :start and :end.', + 'audit_end_balance' => 'Saldo akun :account_name di akhir :end adalah :balance', + 'reports_extra_options' => 'Pilihan ekstra', + 'report_has_no_extra_options' => 'Laporan ini tidak memiliki pilihan tambahan', + 'reports_submit' => 'Melihat laporan', + 'end_after_start_date' => 'Tanggal akhir laporan harus setelah tanggal mulai.', + 'select_category' => 'Pilih kategori (ies)', + 'select_budget' => 'Pilih anggaran.', + 'select_tag' => 'Pilih tag.', + 'income_per_category' => 'Pendapatan per kategori', + 'expense_per_category' => 'Biaya per kategori', + 'expense_per_budget' => 'Biaya per anggaran', + 'income_per_account' => 'Pendapatan per rekening', + 'expense_per_account' => 'Biaya per akun', + 'expense_per_tag' => 'Biaya per tag', + 'income_per_tag' => 'Penghasilan per tag', + 'include_expense_not_in_budget' => 'Termasuk biaya tidak dalam anggaran yang dipilih', + 'include_expense_not_in_account' => 'Termasuk biaya yang tidak termasuk dalam akun yang dipilih', + 'include_expense_not_in_category' => 'Termasuk biaya yang tidak termasuk dalam kategori yang dipilih', + 'include_income_not_in_category' => 'Termasuk pendapatan tidak dalam kategori yang dipilih (ies)', + 'include_income_not_in_account' => 'Termasuk pendapatan tidak dalam akun yang dipilih(s)', + 'include_income_not_in_tags' => 'Termasuk pendapatan tidak dalam tag yang dipilih', + 'include_expense_not_in_tags' => 'Termasuk biaya yang tidak termasuk dalam tag yang dipilih', + 'everything_else' => 'Yang lainnya', + 'income_and_expenses' => 'Penghasilan dan beban', + 'spent_average' => 'Menghabiskan (rata-rata)', + 'income_average' => 'Penghasilan (rata-rata)', + 'transaction_count' => 'Jumlah transaksi', + 'average_spending_per_account' => 'Rata-rata pengeluaran per akun', + 'average_income_per_account' => 'Pendapatan rata-rata per rekening', + 'total' => 'Total', + 'description' => 'Deskripsi', + 'sum_of_period' => 'Jumlah periode', + 'average_in_period' => 'Rata-rata dalam periode', + 'account_role_defaultAsset' => 'Akun aset standar', + 'account_role_sharedAsset' => 'Akun aset bersama', + 'account_role_savingAsset' => 'Rekening tabungan', + 'account_role_ccAsset' => 'Kartu kredit', + 'account_role_cashWalletAsset' => 'Cash wallet', + 'budget_chart_click' => 'Silahkan klik nama anggaran pada tabel di atas untuk melihat grafik.', + 'category_chart_click' => 'Silahkan klik pada nama kategori pada tabel di atas untuk melihat grafik.', + 'in_out_accounts' => 'Diperoleh dan dihabiskan per kombinasi', + 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', + 'in_out_per_category' => 'Diperoleh dan dibelanjakan per kategori', + 'out_per_budget' => 'Menghabiskan per anggaran', + 'select_expense_revenue' => 'Pilih akun biaya / pendapatan', + 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', + 'sum_in_default_currency' => 'The sum will always be in your default currency.', + 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Grafik', - 'month' => 'Bulan', - 'budget' => 'Anggaran', - 'spent' => 'Menghabiskan', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => 'Menghabiskan anggaran', - 'left_to_spend' => 'Kiri untuk dibelanjakan', - 'earned' => 'Diperoleh', - 'overspent' => 'Overspent', - 'left' => 'Kiri', - 'max-amount' => 'Jumlah maksimum', - 'min-amount' => 'Minimum amount', - 'journal-amount' => 'Entri tagihan saat ini', - 'name' => 'Nama', - 'date' => 'Tanggal', - 'date_and_time' => 'Date and time', - 'time' => 'Time', - 'paid' => 'Dibayar', - 'unpaid' => 'Tidak dibayar', - 'day' => 'Hari', - 'budgeted' => 'Dianggarkan', - 'period' => 'Periode', - 'balance' => 'Keseimbangan', - 'in_out_period' => 'In + out this period', - 'sum' => 'Jumlah', - 'summary' => 'Summary', - 'average' => 'Rata-rata', - 'balanceFor' => 'Saldo untuk :name', - 'no_tags' => '(no tags)', + 'chart' => 'Grafik', + 'month' => 'Bulan', + 'budget' => 'Anggaran', + 'spent' => 'Menghabiskan', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => 'Menghabiskan anggaran', + 'left_to_spend' => 'Kiri untuk dibelanjakan', + 'earned' => 'Diperoleh', + 'overspent' => 'Overspent', + 'left' => 'Kiri', + 'max-amount' => 'Jumlah maksimum', + 'min-amount' => 'Minimum amount', + 'journal-amount' => 'Entri tagihan saat ini', + 'name' => 'Nama', + 'date' => 'Tanggal', + 'date_and_time' => 'Date and time', + 'time' => 'Time', + 'paid' => 'Dibayar', + 'unpaid' => 'Tidak dibayar', + 'day' => 'Hari', + 'budgeted' => 'Dianggarkan', + 'period' => 'Periode', + 'balance' => 'Keseimbangan', + 'in_out_period' => 'In + out this period', + 'sum' => 'Jumlah', + 'summary' => 'Summary', + 'average' => 'Rata-rata', + 'balanceFor' => 'Saldo untuk :name', + 'no_tags' => '(no tags)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Tambahkan uang ke celengan ":name"', - 'piggy_bank' => 'Celengan', - 'new_piggy_bank' => 'Celengan baru', - 'store_piggy_bank' => 'Simpan celengan baru', - 'stored_piggy_bank' => 'Simpan celengan baru ":name"', - 'account_status' => 'Status akun', - 'left_for_piggy_banks' => 'Kiri untuk celengan', - 'sum_of_piggy_banks' => 'Jumlah celengan', - 'saved_so_far' => 'Disimpan sejauh ini', - 'left_to_save' => 'Kiri untuk menyimpan', - 'suggested_amount' => 'Jumlah bulanan yang disarankan untuk disimpan', - 'add_money_to_piggy_title' => 'Tambahkan uang ke celengan ":name"', - 'remove_money_from_piggy_title' => 'Hapus uang dari celengan ":name"', - 'add' => 'Menambahkan', - 'no_money_for_piggy' => 'Anda tidak punya uang untuk dimasukkan ke dalam celengan ini.', - 'suggested_savings_per_month' => 'Suggested per month', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Tambahkan uang ke celengan ":name"', + 'piggy_bank' => 'Celengan', + 'new_piggy_bank' => 'Celengan baru', + 'store_piggy_bank' => 'Simpan celengan baru', + 'stored_piggy_bank' => 'Simpan celengan baru ":name"', + 'account_status' => 'Status akun', + 'left_for_piggy_banks' => 'Kiri untuk celengan', + 'sum_of_piggy_banks' => 'Jumlah celengan', + 'saved_so_far' => 'Disimpan sejauh ini', + 'left_to_save' => 'Kiri untuk menyimpan', + 'suggested_amount' => 'Jumlah bulanan yang disarankan untuk disimpan', + 'add_money_to_piggy_title' => 'Tambahkan uang ke celengan ":name"', + 'remove_money_from_piggy_title' => 'Hapus uang dari celengan ":name"', + 'add' => 'Menambahkan', + 'no_money_for_piggy' => 'Anda tidak punya uang untuk dimasukkan ke dalam celengan ini.', + 'suggested_savings_per_month' => 'Suggested per month', - 'remove' => 'Menghapus', - 'max_amount_add' => 'Jumlah maksimum yang bisa Anda tambahkan adalah', - 'max_amount_remove' => 'Jumlah maksimal yang bisa Anda hapus adalah', - 'update_piggy_button' => 'Update celengan', - 'update_piggy_title' => 'Update piggy bank ":name"', - 'updated_piggy_bank' => 'Diperbarui piggy bank ":name"', - 'details' => 'Rincian', - 'events' => 'Acara', - 'target_amount' => 'Jumlah target', - 'start_date' => 'Mulai tanggal', - 'no_start_date' => 'No start date', - 'target_date' => 'Tanggal target', - 'no_target_date' => 'Tidak ada tanggal target', - 'table' => 'Meja', - 'delete_piggy_bank' => 'Hapus celengan ":name"', - 'cannot_add_amount_piggy' => 'Tidak dapat menambahkan:amount ke ":name".', - 'cannot_remove_from_piggy' => 'Tidak dapat menghapus:amount dari ":name".', - 'deleted_piggy_bank' => 'Dihapus celengan ":name"', - 'added_amount_to_piggy' => 'Ditambahkan:amount ke ":name"', - 'removed_amount_from_piggy' => 'Dihapus:amount dari ":name"', - 'piggy_events' => 'Related piggy banks', + 'remove' => 'Menghapus', + 'max_amount_add' => 'Jumlah maksimum yang bisa Anda tambahkan adalah', + 'max_amount_remove' => 'Jumlah maksimal yang bisa Anda hapus adalah', + 'update_piggy_button' => 'Update celengan', + 'update_piggy_title' => 'Update piggy bank ":name"', + 'updated_piggy_bank' => 'Diperbarui piggy bank ":name"', + 'details' => 'Rincian', + 'events' => 'Acara', + 'target_amount' => 'Jumlah target', + 'start_date' => 'Mulai tanggal', + 'no_start_date' => 'No start date', + 'target_date' => 'Tanggal target', + 'no_target_date' => 'Tidak ada tanggal target', + 'table' => 'Meja', + 'delete_piggy_bank' => 'Hapus celengan ":name"', + 'cannot_add_amount_piggy' => 'Tidak dapat menambahkan:amount ke ":name".', + 'cannot_remove_from_piggy' => 'Tidak dapat menghapus:amount dari ":name".', + 'deleted_piggy_bank' => 'Dihapus celengan ":name"', + 'added_amount_to_piggy' => 'Ditambahkan:amount ke ":name"', + 'removed_amount_from_piggy' => 'Dihapus:amount dari ":name"', + 'piggy_events' => 'Related piggy banks', // tags - 'delete_tag' => 'Hapus tag " :tag"', - 'deleted_tag' => 'Tag dihapus " :tag"', - 'new_tag' => 'Buat tag baru', - 'edit_tag' => 'Edit tag " :tag"', - 'updated_tag' => 'Diperbarui tag " :tag"', - 'created_tag' => 'Tag " :tag" telah dibuat!', + 'delete_tag' => 'Hapus tag " :tag"', + 'deleted_tag' => 'Tag dihapus " :tag"', + 'new_tag' => 'Buat tag baru', + 'edit_tag' => 'Edit tag " :tag"', + 'updated_tag' => 'Diperbarui tag " :tag"', + 'created_tag' => 'Tag " :tag" telah dibuat!', - 'transaction_journal_information' => 'Informasi transaksi', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Informasi meta', - 'transaction_journal_more' => 'More information', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Stored under ":journal"', - 'total_amount' => 'Jumlah total', - 'number_of_decimals' => 'Jumlah desimal', + 'transaction_journal_information' => 'Informasi transaksi', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Informasi meta', + 'transaction_journal_more' => 'More information', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => 'Stored under ":journal"', + 'total_amount' => 'Jumlah total', + 'number_of_decimals' => 'Jumlah desimal', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Administrasi', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Administrasi pengguna', - 'list_all_users' => 'Semua pengguna', - 'all_users' => 'Semua pengguna', - 'instance_configuration' => 'Konfigurasi', - 'firefly_instance_configuration' => 'Pilihan konfigurasi untuk Firefly III', - 'setting_single_user_mode' => 'Mode pengguna tunggal', - 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', - 'store_configuration' => 'Konfigurasi toko', - 'single_user_administration' => 'Administrasi pengguna untuk :email', - 'edit_user' => 'Edit pengguna :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'Data pengguna', - 'user_information' => 'Informasi pengguna', - 'total_size' => 'ukuran total', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_rules aturan di:count_groups rule group (s)', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'Konfigurasi telah diperbarui', - 'setting_is_demo_site' => 'Situs demo', - 'setting_is_demo_site_explain' => 'Jika Anda mencentang kotak ini, instalasi ini akan berperilaku seolah-olah itu adalah situs demo, yang dapat memiliki efek samping yang aneh.', - 'block_code_bounced' => 'Pesan email terpental', - 'block_code_expired' => 'Akun demo kadaluarsa', - 'no_block_code' => 'Tidak ada alasan untuk memblokir atau pengguna tidak diblokir', - 'block_code_email_changed' => 'Pengguna belum mengkonfirmasi alamat email baru', - 'admin_update_email' => 'Bertentangan dengan halaman profil, pengguna TIDAK akan diberitahu alamat email mereka telah berubah!', - 'update_user' => 'Perbarui pengguna', - 'updated_user' => 'Data pengguna telah diubah.', - 'delete_user' => 'Hapus pengguna :email', - 'user_deleted' => 'Pengguna telah dihapus', - 'send_test_email' => 'Kirim pesan email percobaan', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Mengirim pesan', - 'send_test_triggered' => 'Uji dipicu. Periksa kotak masuk dan file log Anda.', - 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', - 'admin_maintanance_title' => 'Maintenance', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Clear cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Description of the split transaction', - 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'you_create_transfer' => 'You\'re creating a transfer.', - 'you_create_withdrawal' => 'You\'re creating a withdrawal.', - 'you_create_deposit' => 'You\'re creating a deposit.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Administrasi', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'Administrasi pengguna', + 'list_all_users' => 'Semua pengguna', + 'all_users' => 'Semua pengguna', + 'instance_configuration' => 'Konfigurasi', + 'firefly_instance_configuration' => 'Pilihan konfigurasi untuk Firefly III', + 'setting_single_user_mode' => 'Mode pengguna tunggal', + 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', + 'store_configuration' => 'Konfigurasi toko', + 'single_user_administration' => 'Administrasi pengguna untuk :email', + 'edit_user' => 'Edit pengguna :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'Data pengguna', + 'user_information' => 'Informasi pengguna', + 'total_size' => 'ukuran total', + 'budget_or_budgets' => ':count budget|:count budgets', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_rules aturan di:count_groups rule group (s)', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'Konfigurasi telah diperbarui', + 'setting_is_demo_site' => 'Situs demo', + 'setting_is_demo_site_explain' => 'Jika Anda mencentang kotak ini, instalasi ini akan berperilaku seolah-olah itu adalah situs demo, yang dapat memiliki efek samping yang aneh.', + 'block_code_bounced' => 'Pesan email terpental', + 'block_code_expired' => 'Akun demo kadaluarsa', + 'no_block_code' => 'Tidak ada alasan untuk memblokir atau pengguna tidak diblokir', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Pengguna belum mengkonfirmasi alamat email baru', + 'admin_update_email' => 'Bertentangan dengan halaman profil, pengguna TIDAK akan diberitahu alamat email mereka telah berubah!', + 'update_user' => 'Perbarui pengguna', + 'updated_user' => 'Data pengguna telah diubah.', + 'delete_user' => 'Hapus pengguna :email', + 'user_deleted' => 'Pengguna telah dihapus', + 'send_test_email' => 'Kirim pesan email percobaan', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Mengirim pesan', + 'send_test_triggered' => 'Uji dipicu. Periksa kotak masuk dan file log Anda.', + 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', + 'admin_maintanance_title' => 'Maintenance', + 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', + 'admin_maintenance_clear_cache' => 'Clear cache', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Description of the split transaction', + 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'you_create_transfer' => 'You\'re creating a transfer.', + 'you_create_withdrawal' => 'You\'re creating a withdrawal.', + 'you_create_deposit' => 'You\'re creating a deposit.', // links - 'journal_link_configuration' => 'Konfigurasi link transaksi', - 'create_new_link_type' => 'Buat jenis tautan baru', - 'store_new_link_type' => 'Simpan jenis tautan baru', - 'update_link_type' => 'Perbarui jenis tautan', - 'edit_link_type' => 'Edit jenis tautan ":name"', - 'updated_link_type' => 'Jenis tautan yang diperbarui ":name"', - 'delete_link_type' => 'Hapus jenis tautan ":name"', - 'deleted_link_type' => 'Jenis tautan yang dihapus ":name"', - 'stored_new_link_type' => 'Simpan jenis tautan baru ":name"', - 'cannot_edit_link_type' => 'Tidak dapat mengedit jenis tautan ":name"', - 'link_type_help_name' => 'Yaitu. "Duplikat"', - 'link_type_help_inward' => 'Yaitu. "duplikat"', - 'link_type_help_outward' => 'Yaitu. "diduplikasi oleh"', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(jangan simpan koneksi)', - 'link_transaction' => 'Transaksi link', - 'link_to_other_transaction' => 'Tautkan transaksi ini ke transaksi lain', - 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', - 'this_transaction' => 'Transaksi ini', - 'transaction' => 'Transaksi', - 'comments' => 'Komentar', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Tidak dapat menautkan transaksi ini', - 'selected_transaction' => 'Selected transaction', - 'journals_linked' => 'Transaksi terkait.', - 'journals_error_linked' => 'Transaksi ini sudah tertaut.', - 'journals_link_to_self' => 'You cannot link a transaction to itself', - 'journal_links' => 'Link transaksi', - 'this_withdrawal' => 'Penarikan ini', - 'this_deposit' => 'Deposit ini', - 'this_transfer' => 'Transfer ini', - 'overview_for_link' => 'Ikhtisar untuk jenis tautan ":name"', - 'source_transaction' => 'Transaksi sumber', - 'link_description' => 'Deskripsi tautan', - 'destination_transaction' => 'Transaksi tujuan', - 'delete_journal_link' => 'Delete the link between :source and :destination', - 'deleted_link' => 'Tautan dihapus', + 'journal_link_configuration' => 'Konfigurasi link transaksi', + 'create_new_link_type' => 'Buat jenis tautan baru', + 'store_new_link_type' => 'Simpan jenis tautan baru', + 'update_link_type' => 'Perbarui jenis tautan', + 'edit_link_type' => 'Edit jenis tautan ":name"', + 'updated_link_type' => 'Jenis tautan yang diperbarui ":name"', + 'delete_link_type' => 'Hapus jenis tautan ":name"', + 'deleted_link_type' => 'Jenis tautan yang dihapus ":name"', + 'stored_new_link_type' => 'Simpan jenis tautan baru ":name"', + 'cannot_edit_link_type' => 'Tidak dapat mengedit jenis tautan ":name"', + 'link_type_help_name' => 'Yaitu. "Duplikat"', + 'link_type_help_inward' => 'Yaitu. "duplikat"', + 'link_type_help_outward' => 'Yaitu. "diduplikasi oleh"', + 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', + 'do_not_save_connection' => '(jangan simpan koneksi)', + 'link_transaction' => 'Transaksi link', + 'link_to_other_transaction' => 'Tautkan transaksi ini ke transaksi lain', + 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', + 'this_transaction' => 'Transaksi ini', + 'transaction' => 'Transaksi', + 'comments' => 'Komentar', + 'link_notes' => 'Any notes you wish to store with the link.', + 'invalid_link_selection' => 'Tidak dapat menautkan transaksi ini', + 'selected_transaction' => 'Selected transaction', + 'journals_linked' => 'Transaksi terkait.', + 'journals_error_linked' => 'Transaksi ini sudah tertaut.', + 'journals_link_to_self' => 'You cannot link a transaction to itself', + 'journal_links' => 'Link transaksi', + 'this_withdrawal' => 'Penarikan ini', + 'this_deposit' => 'Deposit ini', + 'this_transfer' => 'Transfer ini', + 'overview_for_link' => 'Ikhtisar untuk jenis tautan ":name"', + 'source_transaction' => 'Transaksi sumber', + 'link_description' => 'Deskripsi tautan', + 'destination_transaction' => 'Transaksi tujuan', + 'delete_journal_link' => 'Delete the link between :source and :destination', + 'deleted_link' => 'Tautan dihapus', // link translations: - 'Paid_name' => 'Paid', - 'Refund_name' => 'Refund', - 'Reimbursement_name' => 'Reimbursement', - 'Related_name' => 'Related', - 'relates to_inward' => 'berhubungan dengan', - 'is (partially) refunded by_inward' => '(sebagian) dikembalikan oleh', - 'is (partially) paid for by_inward' => 'adalah (sebagian) dibayar oleh', - 'is (partially) reimbursed by_inward' => '(sebagian) diganti oleh', - 'inward_transaction' => 'Inward transaction', - 'outward_transaction' => 'Outward transaction', - 'relates to_outward' => 'berhubungan dengan', - '(partially) refunds_outward' => '(sebagian) pengembalian uang', - '(partially) pays for_outward' => '(sebagian) membayar', - '(partially) reimburses_outward' => '(sebagian) penggantian', - 'is (partially) refunded by' => 'is (partially) refunded by', - 'is (partially) paid for by' => 'is (partially) paid for by', - 'is (partially) reimbursed by' => 'is (partially) reimbursed by', - 'relates to' => 'relates to', - '(partially) refunds' => '(partially) refunds', - '(partially) pays for' => '(partially) pays for', - '(partially) reimburses' => '(partially) reimburses', + 'Paid_name' => 'Paid', + 'Refund_name' => 'Refund', + 'Reimbursement_name' => 'Reimbursement', + 'Related_name' => 'Related', + 'relates to_inward' => 'berhubungan dengan', + 'is (partially) refunded by_inward' => '(sebagian) dikembalikan oleh', + 'is (partially) paid for by_inward' => 'adalah (sebagian) dibayar oleh', + 'is (partially) reimbursed by_inward' => '(sebagian) diganti oleh', + 'inward_transaction' => 'Inward transaction', + 'outward_transaction' => 'Outward transaction', + 'relates to_outward' => 'berhubungan dengan', + '(partially) refunds_outward' => '(sebagian) pengembalian uang', + '(partially) pays for_outward' => '(sebagian) membayar', + '(partially) reimburses_outward' => '(sebagian) penggantian', + 'is (partially) refunded by' => 'is (partially) refunded by', + 'is (partially) paid for by' => 'is (partially) paid for by', + 'is (partially) reimbursed by' => 'is (partially) reimbursed by', + 'relates to' => 'relates to', + '(partially) refunds' => '(partially) refunds', + '(partially) pays for' => '(partially) pays for', + '(partially) reimburses' => '(partially) reimburses', // split a transaction: - 'splits' => 'Perpecahan', - 'add_another_split' => 'Tambahkan perpecahan lagi', - 'cannot_edit_opening_balance' => 'Anda tidak dapat mengedit saldo awal akun.', - 'no_edit_multiple_left' => 'Anda tidak memilih transaksi yang sah untuk diedit.', - 'breadcrumb_convert_group' => 'Convert transaction', - 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', - 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', - 'create_another' => 'After storing, return here to create another one.', - 'after_update_create_another' => 'After updating, return here to continue editing.', - 'store_as_new' => 'Store as a new transaction instead of updating.', - 'reset_after' => 'Reset form after submission', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Kembangkan pemisahan', - 'transaction_collapse_split' => 'Kempiskan pemisahan', + 'splits' => 'Perpecahan', + 'add_another_split' => 'Tambahkan perpecahan lagi', + 'cannot_edit_opening_balance' => 'Anda tidak dapat mengedit saldo awal akun.', + 'no_edit_multiple_left' => 'Anda tidak memilih transaksi yang sah untuk diedit.', + 'breadcrumb_convert_group' => 'Convert transaction', + 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', + 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', + 'create_another' => 'After storing, return here to create another one.', + 'after_update_create_another' => 'After updating, return here to continue editing.', + 'store_as_new' => 'Store as a new transaction instead of updating.', + 'reset_after' => 'Reset form after submission', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Kembangkan pemisahan', + 'transaction_collapse_split' => 'Kempiskan pemisahan', // object groups - 'default_group_title_name' => '(ungrouped)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ungrouped)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Mari buat akun aset!', - 'no_accounts_intro_asset' => 'Anda belum memiliki akun aset. Akun aset adalah akun utama Anda: rekening giro, rekening tabungan, rekening bersama atau bahkan kartu kredit Anda.', - 'no_accounts_imperative_asset' => 'Untuk mulai menggunakan Firefly III Anda harus membuat setidaknya satu akun aset. Mari kita lakukan sekarang:', - 'no_accounts_create_asset' => 'Buat akun aset', - 'no_accounts_title_expense' => 'Mari buat akun pengeluaran!', - 'no_accounts_intro_expense' => 'Anda belum memiliki rekening pengeluaran. Akun pengeluaran adalah tempat Anda menghabiskan uang, seperti toko dan supermarket.', - 'no_accounts_imperative_expense' => 'Akun pengeluaran dibuat secara otomatis saat Anda membuat transaksi, namun Anda dapat membuatnya secara manual juga, jika Anda mau. Mari kita ciptakan sekarang:', - 'no_accounts_create_expense' => 'Buat akun pengeluaran', - 'no_accounts_title_revenue' => 'Mari buat akun pendapatan!', - 'no_accounts_intro_revenue' => 'Anda belum memiliki akun pendapatan. Akun pendapatan adalah tempat di mana Anda menerima uang dari, seperti atasan Anda.', - 'no_accounts_imperative_revenue' => 'Akun pendapatan dibuat secara otomatis saat Anda membuat transaksi, namun Anda dapat membuatnya secara manual juga, jika Anda mau. Mari kita ciptakan sekarang:', - 'no_accounts_create_revenue' => 'Buat akun pendapatan', - 'no_accounts_title_liabilities' => 'Let\'s create a liability!', - 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', - 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', - 'no_accounts_create_liabilities' => 'Create a liability', - 'no_budgets_title_default' => 'Mari buat anggaran', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Anggaran adalah alat dasar pengelolaan keuangan. Mari kita ciptakan sekarang:', - 'no_budgets_create_default' => 'Buat anggaran', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Mari buat kategori!', - 'no_categories_intro_default' => 'Anda belum memiliki kategori. Kategori digunakan untuk menyesuaikan transaksi Anda dan memberi label mereka dengan kategori yang ditentukan.', - 'no_categories_imperative_default' => 'Kategori dibuat secara otomatis saat Anda membuat transaksi, namun Anda juga bisa membuatnya secara manual. Mari kita ciptakan sekarang:', - 'no_categories_create_default' => 'Buat sebuah kategori', - 'no_tags_title_default' => 'Mari buat tag!', - 'no_tags_intro_default' => 'Kamu belum punya tag Tag digunakan untuk menyempurnakan transaksi Anda dan memberi label pada kata kunci tertentu.', - 'no_tags_imperative_default' => 'Tag dibuat secara otomatis saat Anda membuat transaksi, namun Anda bisa membuatnya secara manual juga. Mari kita ciptakan sekarang:', - 'no_tags_create_default' => 'Buat tag', - 'no_transactions_title_withdrawal' => 'Mari buat biaya!', - 'no_transactions_intro_withdrawal' => 'Anda belum memiliki biaya. Anda harus menciptakan biaya untuk mulai mengelola keuangan Anda.', - 'no_transactions_imperative_withdrawal' => 'Sudahkah anda mengeluarkan uang? Maka Anda harus menuliskannya:', - 'no_transactions_create_withdrawal' => 'Buat biaya', - 'no_transactions_title_deposit' => 'Mari buat penghasilan!', - 'no_transactions_intro_deposit' => 'Anda belum memiliki penghasilan yang tercatat. Anda harus membuat entri pendapatan untuk mulai mengelola keuangan Anda.', - 'no_transactions_imperative_deposit' => 'Sudahkah kamu menerima sejumlah uang? Maka Anda harus menuliskannya:', - 'no_transactions_create_deposit' => 'Buat deposit', - 'no_transactions_title_transfers' => 'Mari buat transfer!', - 'no_transactions_intro_transfers' => 'Anda belum memiliki transfer. Bila Anda memindahkan uang antar rekening aset, itu tercatat sebagai transfer.', - 'no_transactions_imperative_transfers' => 'Sudahkah kamu memindahkan sejumlah uang? Maka Anda harus menuliskannya:', - 'no_transactions_create_transfers' => 'Buat transfer', - 'no_piggies_title_default' => 'Ayo buat celengan!', - 'no_piggies_intro_default' => 'Anda belum memiliki piggy bank. Anda dapat membuat bank-bank piggy untuk membagi tabungan Anda dan melacak apa yang Anda menabung.', - 'no_piggies_imperative_default' => 'Apakah Anda memiliki barang-barang yang Anda simpan untuk uang? Buat piggy bank dan tetap track:', - 'no_piggies_create_default' => 'Buat celengan baru', - 'no_bills_title_default' => 'Mari buat tagihan!', - 'no_bills_intro_default' => 'Anda belum memiliki tagihan. Anda bisa membuat tagihan untuk mencatat pengeluaran rutin, seperti sewa atau asuransi Anda.', - 'no_bills_imperative_default' => 'Apakah Anda memiliki tagihan reguler seperti itu? Buat tagihan dan lacak pembayaran Anda:', - 'no_bills_create_default' => 'Buat tagihan', + 'no_accounts_title_asset' => 'Mari buat akun aset!', + 'no_accounts_intro_asset' => 'Anda belum memiliki akun aset. Akun aset adalah akun utama Anda: rekening giro, rekening tabungan, rekening bersama atau bahkan kartu kredit Anda.', + 'no_accounts_imperative_asset' => 'Untuk mulai menggunakan Firefly III Anda harus membuat setidaknya satu akun aset. Mari kita lakukan sekarang:', + 'no_accounts_create_asset' => 'Buat akun aset', + 'no_accounts_title_expense' => 'Mari buat akun pengeluaran!', + 'no_accounts_intro_expense' => 'Anda belum memiliki rekening pengeluaran. Akun pengeluaran adalah tempat Anda menghabiskan uang, seperti toko dan supermarket.', + 'no_accounts_imperative_expense' => 'Akun pengeluaran dibuat secara otomatis saat Anda membuat transaksi, namun Anda dapat membuatnya secara manual juga, jika Anda mau. Mari kita ciptakan sekarang:', + 'no_accounts_create_expense' => 'Buat akun pengeluaran', + 'no_accounts_title_revenue' => 'Mari buat akun pendapatan!', + 'no_accounts_intro_revenue' => 'Anda belum memiliki akun pendapatan. Akun pendapatan adalah tempat di mana Anda menerima uang dari, seperti atasan Anda.', + 'no_accounts_imperative_revenue' => 'Akun pendapatan dibuat secara otomatis saat Anda membuat transaksi, namun Anda dapat membuatnya secara manual juga, jika Anda mau. Mari kita ciptakan sekarang:', + 'no_accounts_create_revenue' => 'Buat akun pendapatan', + 'no_accounts_title_liabilities' => 'Let\'s create a liability!', + 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', + 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', + 'no_accounts_create_liabilities' => 'Create a liability', + 'no_budgets_title_default' => 'Mari buat anggaran', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Anggaran adalah alat dasar pengelolaan keuangan. Mari kita ciptakan sekarang:', + 'no_budgets_create_default' => 'Buat anggaran', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Mari buat kategori!', + 'no_categories_intro_default' => 'Anda belum memiliki kategori. Kategori digunakan untuk menyesuaikan transaksi Anda dan memberi label mereka dengan kategori yang ditentukan.', + 'no_categories_imperative_default' => 'Kategori dibuat secara otomatis saat Anda membuat transaksi, namun Anda juga bisa membuatnya secara manual. Mari kita ciptakan sekarang:', + 'no_categories_create_default' => 'Buat sebuah kategori', + 'no_tags_title_default' => 'Mari buat tag!', + 'no_tags_intro_default' => 'Kamu belum punya tag Tag digunakan untuk menyempurnakan transaksi Anda dan memberi label pada kata kunci tertentu.', + 'no_tags_imperative_default' => 'Tag dibuat secara otomatis saat Anda membuat transaksi, namun Anda bisa membuatnya secara manual juga. Mari kita ciptakan sekarang:', + 'no_tags_create_default' => 'Buat tag', + 'no_transactions_title_withdrawal' => 'Mari buat biaya!', + 'no_transactions_intro_withdrawal' => 'Anda belum memiliki biaya. Anda harus menciptakan biaya untuk mulai mengelola keuangan Anda.', + 'no_transactions_imperative_withdrawal' => 'Sudahkah anda mengeluarkan uang? Maka Anda harus menuliskannya:', + 'no_transactions_create_withdrawal' => 'Buat biaya', + 'no_transactions_title_deposit' => 'Mari buat penghasilan!', + 'no_transactions_intro_deposit' => 'Anda belum memiliki penghasilan yang tercatat. Anda harus membuat entri pendapatan untuk mulai mengelola keuangan Anda.', + 'no_transactions_imperative_deposit' => 'Sudahkah kamu menerima sejumlah uang? Maka Anda harus menuliskannya:', + 'no_transactions_create_deposit' => 'Buat deposit', + 'no_transactions_title_transfers' => 'Mari buat transfer!', + 'no_transactions_intro_transfers' => 'Anda belum memiliki transfer. Bila Anda memindahkan uang antar rekening aset, itu tercatat sebagai transfer.', + 'no_transactions_imperative_transfers' => 'Sudahkah kamu memindahkan sejumlah uang? Maka Anda harus menuliskannya:', + 'no_transactions_create_transfers' => 'Buat transfer', + 'no_piggies_title_default' => 'Ayo buat celengan!', + 'no_piggies_intro_default' => 'Anda belum memiliki piggy bank. Anda dapat membuat bank-bank piggy untuk membagi tabungan Anda dan melacak apa yang Anda menabung.', + 'no_piggies_imperative_default' => 'Apakah Anda memiliki barang-barang yang Anda simpan untuk uang? Buat piggy bank dan tetap track:', + 'no_piggies_create_default' => 'Buat celengan baru', + 'no_bills_title_default' => 'Mari buat tagihan!', + 'no_bills_intro_default' => 'Anda belum memiliki tagihan. Anda bisa membuat tagihan untuk mencatat pengeluaran rutin, seperti sewa atau asuransi Anda.', + 'no_bills_imperative_default' => 'Apakah Anda memiliki tagihan reguler seperti itu? Buat tagihan dan lacak pembayaran Anda:', + 'no_bills_create_default' => 'Buat tagihan', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Recurring transactions', - 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', - 'recurring_calendar_view' => 'Calendar', - 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', - 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', - 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', - 'no_recurring_create_default' => 'Create a recurring transaction', - 'make_new_recurring' => 'Create a recurring transaction', - 'recurring_daily' => 'Every day', - 'recurring_weekly' => 'Every week on :weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => 'Every year on :date', - 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', - 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', - 'created_transactions' => 'Related transactions', - 'expected_withdrawals' => 'Expected withdrawals', - 'expected_deposits' => 'Expected deposits', - 'expected_transfers' => 'Expected transfers', - 'created_withdrawals' => 'Created withdrawals', - 'created_deposits' => 'Created deposits', - 'created_transfers' => 'Created transfers', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', - 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Recurring transactions', + 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', + 'recurring_calendar_view' => 'Calendar', + 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', + 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', + 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', + 'no_recurring_create_default' => 'Create a recurring transaction', + 'make_new_recurring' => 'Create a recurring transaction', + 'recurring_daily' => 'Every day', + 'recurring_weekly' => 'Every week on :weekday', + 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', + 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => 'Every year on :date', + 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', + 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', + 'created_transactions' => 'Related transactions', + 'expected_withdrawals' => 'Expected withdrawals', + 'expected_deposits' => 'Expected deposits', + 'expected_transfers' => 'Expected transfers', + 'created_withdrawals' => 'Created withdrawals', + 'created_deposits' => 'Created deposits', + 'created_transfers' => 'Created transfers', + 'recurring_info' => 'Recurring transaction :count / :total', + 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', + 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'create_new_recurrence' => 'Create new recurring transaction', - 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', - 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', - 'no_currency' => '(no currency)', - 'mandatory_for_recurring' => 'Mandatory recurrence information', - 'mandatory_for_transaction' => 'Mandatory transaction information', - 'optional_for_recurring' => 'Optional recurrence information', - 'optional_for_transaction' => 'Optional transaction information', - 'change_date_other_options' => 'Change the "first date" to see more options.', - 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', - 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', - 'repeat_forever' => 'Repeat forever', - 'repeat_until_date' => 'Repeat until date', - 'repeat_times' => 'Repeat a number of times', - 'recurring_skips_one' => 'Every other', - 'recurring_skips_more' => 'Skips :count occurrences', - 'store_new_recurrence' => 'Store recurring transaction', - 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', - 'edit_recurrence' => 'Edit recurring transaction ":title"', - 'recurring_repeats_until' => 'Repeats until :date', - 'recurring_repeats_forever' => 'Repeats forever', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Update recurring transaction', - 'updated_recurrence' => 'Updated recurring transaction ":title"', - 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', - 'delete_recurring' => 'Delete recurring transaction ":title"', - 'new_recurring_transaction' => 'New recurring transaction', - 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', - 'do_nothing' => 'Just create the transaction', - 'skip_transaction' => 'Skip the occurrence', - 'jump_to_friday' => 'Create the transaction on the previous Friday instead', - 'jump_to_monday' => 'Create the transaction on the next Monday instead', - 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', - 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', - 'except_weekends' => 'Except weekends', - 'recurrence_deleted' => 'Recurring transaction ":title" deleted', + 'create_new_recurrence' => 'Create new recurring transaction', + 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', + 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', + 'no_currency' => '(no currency)', + 'mandatory_for_recurring' => 'Mandatory recurrence information', + 'mandatory_for_transaction' => 'Mandatory transaction information', + 'optional_for_recurring' => 'Optional recurrence information', + 'optional_for_transaction' => 'Optional transaction information', + 'change_date_other_options' => 'Change the "first date" to see more options.', + 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', + 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', + 'repeat_forever' => 'Repeat forever', + 'repeat_until_date' => 'Repeat until date', + 'repeat_times' => 'Repeat a number of times', + 'recurring_skips_one' => 'Every other', + 'recurring_skips_more' => 'Skips :count occurrences', + 'store_new_recurrence' => 'Store recurring transaction', + 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', + 'edit_recurrence' => 'Edit recurring transaction ":title"', + 'recurring_repeats_until' => 'Repeats until :date', + 'recurring_repeats_forever' => 'Repeats forever', + 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', + 'update_recurrence' => 'Update recurring transaction', + 'updated_recurrence' => 'Updated recurring transaction ":title"', + 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', + 'delete_recurring' => 'Delete recurring transaction ":title"', + 'new_recurring_transaction' => 'New recurring transaction', + 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', + 'do_nothing' => 'Just create the transaction', + 'skip_transaction' => 'Skip the occurrence', + 'jump_to_friday' => 'Create the transaction on the previous Friday instead', + 'jump_to_monday' => 'Create the transaction on the next Monday instead', + 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', + 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', + 'except_weekends' => 'Except weekends', + 'recurrence_deleted' => 'Recurring transaction ":title" deleted', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balance (:currency)', - 'box_spent_in_currency' => 'Spent (:currency)', - 'box_earned_in_currency' => 'Earned (:currency)', - 'box_budgeted_in_currency' => 'Budgeted (:currency)', - 'box_bill_paid_in_currency' => 'Bills paid (:currency)', - 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', - 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', - 'box_net_worth_in_currency' => 'Net worth (:currency)', - 'box_spend_per_day' => 'Left to spend per day: :amount', + 'box_balance_in_currency' => 'Balance (:currency)', + 'box_spent_in_currency' => 'Spent (:currency)', + 'box_earned_in_currency' => 'Earned (:currency)', + 'box_budgeted_in_currency' => 'Budgeted (:currency)', + 'box_bill_paid_in_currency' => 'Bills paid (:currency)', + 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', + 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', + 'box_net_worth_in_currency' => 'Net worth (:currency)', + 'box_spend_per_day' => 'Left to spend per day: :amount', // debug page - 'debug_page' => 'Debug page', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Debug page', + 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', + 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', + 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', // object groups - 'object_groups_menu_bar' => 'Groups', - 'object_groups_page_title' => 'Groups', - 'object_groups_breadcrumb' => 'Groups', - 'object_groups_index' => 'Overview', - 'object_groups' => 'Groups', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Title', - 'edit_object_group' => 'Edit group ":title"', - 'delete_object_group' => 'Delete group ":title"', - 'update_object_group' => 'Update group', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Group', + 'object_groups_menu_bar' => 'Groups', + 'object_groups_page_title' => 'Groups', + 'object_groups_breadcrumb' => 'Groups', + 'object_groups_index' => 'Overview', + 'object_groups' => 'Groups', + 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', + 'object_group_title' => 'Title', + 'edit_object_group' => 'Edit group ":title"', + 'delete_object_group' => 'Delete group ":title"', + 'update_object_group' => 'Update group', + 'updated_object_group' => 'Successfully updated group ":title"', + 'deleted_object_group' => 'Successfully deleted group ":title"', + 'object_group' => 'Group', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/id_ID/form.php b/resources/lang/id_ID/form.php index b84224792a..53d7da80bc 100644 --- a/resources/lang/id_ID/form.php +++ b/resources/lang/id_ID/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Nama Bank', - 'bank_balance' => 'Keseimbangan', - 'savings_balance' => 'Saldo tabungan', - 'credit_card_limit' => 'Batas kartu kredit', - 'automatch' => 'Cocokkan secara otomatis', - 'skip' => 'Melewatkan', - 'enabled' => 'Diaktifkan', - 'name' => 'Nama', - 'active' => 'Aktif', - 'amount_min' => 'Jumlah minimal', - 'amount_max' => 'Jumlah maksimum', - 'match' => 'Cocok di', - 'strict' => 'Mode ketat', - 'repeat_freq' => 'Berulang', - 'object_group' => 'Grup', - 'location' => 'Lokasi', - 'update_channel' => 'Perbaharui saluran', - 'currency_id' => 'Mata uang', - 'transaction_currency_id' => 'Mata uang', - 'auto_budget_currency_id' => 'Mata uang', - 'external_ip' => 'IP eksternal server anda', - 'attachments' => 'Lampiran', - 'BIC' => 'BIC', - 'verify_password' => 'Verifikasi keamanan kata sandi', - 'source_account' => 'Akun sumber', - 'destination_account' => 'Akun tujuan', - 'asset_destination_account' => 'Akun tujuan', - 'include_net_worth' => 'Termasuk dalam kekayaan bersih', - 'asset_source_account' => 'Akun sumber', - 'journal_description' => 'Deskripsi', - 'note' => 'Catatan', - 'currency' => 'Mata uang', - 'account_id' => 'Akun aset', - 'budget_id' => 'Anggaran', - 'bill_id' => 'Tagihan', - 'opening_balance' => 'Saldo awal', - 'tagMode' => 'Mode Tag', - 'virtual_balance' => 'Saldo virtual', + 'bank_name' => 'Nama Bank', + 'bank_balance' => 'Keseimbangan', + 'savings_balance' => 'Saldo tabungan', + 'credit_card_limit' => 'Batas kartu kredit', + 'automatch' => 'Cocokkan secara otomatis', + 'skip' => 'Melewatkan', + 'enabled' => 'Diaktifkan', + 'name' => 'Nama', + 'active' => 'Aktif', + 'amount_min' => 'Jumlah minimal', + 'amount_max' => 'Jumlah maksimum', + 'match' => 'Cocok di', + 'strict' => 'Mode ketat', + 'repeat_freq' => 'Berulang', + 'object_group' => 'Grup', + 'location' => 'Lokasi', + 'update_channel' => 'Perbaharui saluran', + 'currency_id' => 'Mata uang', + 'transaction_currency_id' => 'Mata uang', + 'auto_budget_currency_id' => 'Mata uang', + 'external_ip' => 'IP eksternal server anda', + 'attachments' => 'Lampiran', + 'BIC' => 'BIC', + 'verify_password' => 'Verifikasi keamanan kata sandi', + 'source_account' => 'Akun sumber', + 'destination_account' => 'Akun tujuan', + 'asset_destination_account' => 'Akun tujuan', + 'include_net_worth' => 'Termasuk dalam kekayaan bersih', + 'asset_source_account' => 'Akun sumber', + 'journal_description' => 'Deskripsi', + 'note' => 'Catatan', + 'currency' => 'Mata uang', + 'account_id' => 'Akun aset', + 'budget_id' => 'Anggaran', + 'bill_id' => 'Tagihan', + 'opening_balance' => 'Saldo awal', + 'tagMode' => 'Mode Tag', + 'virtual_balance' => 'Saldo virtual', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Jumlah target', 'account_role' => 'Peran akun', 'opening_balance_date' => 'Tanggal pembukaan saldo', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Yakin ingin menghapus transaksi yang dijelaskan ":description"?', 'mass_journal_are_you_sure' => 'Yakin ingin menghapus transaksi ini?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Yakin ingin menghapus tag ":tag"?', 'journal_link_areYouSure' => 'Yakin ingin menghapus tautan antara :source and :destination?', 'linkType_areYouSure' => 'Yakin ingin menghapus jenis tautan ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Lagu', - // admin 'domain' => 'Domain', 'single_user_mode' => 'Nonaktifkan pendaftaran pengguna', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Akun FinTS', 'local_account' => 'Akun Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Tanggal dari', - 'to_date' => 'Tanggal ke', - 'due_date' => 'Batas tanggal terakhir', - 'payment_date' => 'Tanggal pembayaran', - 'invoice_date' => 'Tanggal faktur', - 'internal_reference' => 'Referensi internal', - 'inward' => 'Deskripsi dalam', - 'outward' => 'Deskripsi luar', - 'rule_group_id' => 'Kelompok aturan', - 'transaction_description' => 'Deskripsi transaksi', - 'first_date' => 'Tanggal pertama', - 'transaction_type' => 'Jenis transaksi', - 'repeat_until' => 'Ulangi sampai', - 'recurring_description' => 'Deskripsi transaksi berulang', - 'repetition_type' => 'Jenis pengulangan', - 'foreign_currency_id' => 'Mata uang asing', - 'repetition_end' => 'Pengulangan berakhir', - 'repetitions' => 'Pengulangan', - 'calendar' => 'Kalender', - 'weekend' => 'Akhir pekan', - 'client_secret' => 'Rahasia klien', - 'withdrawal_destination_id' => 'Akun tujuan', - 'deposit_source_id' => 'Akun sumber', - 'expected_on' => 'Diharapkan pada', - 'paid' => 'Sudah dibayar', - 'auto_budget_type' => 'Anggaran-otomatis', - 'auto_budget_amount' => 'Jumlah anggaran-otomatis', - 'auto_budget_period' => 'Periode anggaran-otomatis', - 'collected' => 'Telah dikumpulkan', - 'submitted' => 'Sudah disimpan', - 'key' => 'Kunci', - 'value' => 'Isi konten', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Tanggal dari', + 'to_date' => 'Tanggal ke', + 'due_date' => 'Batas tanggal terakhir', + 'payment_date' => 'Tanggal pembayaran', + 'invoice_date' => 'Tanggal faktur', + 'internal_reference' => 'Referensi internal', + 'inward' => 'Deskripsi dalam', + 'outward' => 'Deskripsi luar', + 'rule_group_id' => 'Kelompok aturan', + 'transaction_description' => 'Deskripsi transaksi', + 'first_date' => 'Tanggal pertama', + 'transaction_type' => 'Jenis transaksi', + 'repeat_until' => 'Ulangi sampai', + 'recurring_description' => 'Deskripsi transaksi berulang', + 'repetition_type' => 'Jenis pengulangan', + 'foreign_currency_id' => 'Mata uang asing', + 'repetition_end' => 'Pengulangan berakhir', + 'repetitions' => 'Pengulangan', + 'calendar' => 'Kalender', + 'weekend' => 'Akhir pekan', + 'client_secret' => 'Rahasia klien', + 'withdrawal_destination_id' => 'Akun tujuan', + 'deposit_source_id' => 'Akun sumber', + 'expected_on' => 'Diharapkan pada', + 'paid' => 'Sudah dibayar', + 'auto_budget_type' => 'Anggaran-otomatis', + 'auto_budget_amount' => 'Jumlah anggaran-otomatis', + 'auto_budget_period' => 'Periode anggaran-otomatis', + 'collected' => 'Telah dikumpulkan', + 'submitted' => 'Sudah disimpan', + 'key' => 'Kunci', + 'value' => 'Isi konten', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/id_ID/intro.php b/resources/lang/id_ID/intro.php index 6af38a22e2..febb0430f8 100644 --- a/resources/lang/id_ID/intro.php +++ b/resources/lang/id_ID/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Selamat datang di halaman indeks Firefly III. Mohon luangkan waktu untuk menelusuri pengantar ini melihat bagaimana Firefly III bekerja.', - 'index_accounts-chart' => 'Bagan ini menunjukkan saldo akun aset anda saat ini, Anda dapat memilih akun yang terlihat di sini dalam preferensi anda.', - 'index_box_out_holder' => 'Kotak kecil dan kotak di samping kotak ini akan memberi anda gambaran singkat tentang situasi keuangan anda.', - 'index_help' => 'Jika anda memerlukan bantuan dengan halaman atau formulir, tekan tombol ini.', - 'index_outro' => 'Sebagian besar halaman Firefly III akan dimulai dengan petunjuk kecil seperti ini. Silahkan hubungi saya bila ada pertanyaan atau komentar. Selamat mencoba!', - 'index_sidebar-toggle' => 'Untuk membuat transakisi baru, akun atau hal lainnya, gunakan menu di bawah gambar ini.', - 'index_cash_account' => 'Ini adalah akun yang telah dibuat sejauh ini. Anda dapat menggunakan rekening kas untuk mengetahui pengeluaran kas tetapi tentu saja itu tidak diwajibkan.', + 'index_intro' => 'Selamat datang di halaman indeks Firefly III. Mohon luangkan waktu untuk menelusuri pengantar ini melihat bagaimana Firefly III bekerja.', + 'index_accounts-chart' => 'Bagan ini menunjukkan saldo akun aset anda saat ini, Anda dapat memilih akun yang terlihat di sini dalam preferensi anda.', + 'index_box_out_holder' => 'Kotak kecil dan kotak di samping kotak ini akan memberi anda gambaran singkat tentang situasi keuangan anda.', + 'index_help' => 'Jika anda memerlukan bantuan dengan halaman atau formulir, tekan tombol ini.', + 'index_outro' => 'Sebagian besar halaman Firefly III akan dimulai dengan petunjuk kecil seperti ini. Silahkan hubungi saya bila ada pertanyaan atau komentar. Selamat mencoba!', + 'index_sidebar-toggle' => 'Untuk membuat transakisi baru, akun atau hal lainnya, gunakan menu di bawah gambar ini.', + 'index_cash_account' => 'Ini adalah akun yang telah dibuat sejauh ini. Anda dapat menggunakan rekening kas untuk mengetahui pengeluaran kas tetapi tentu saja itu tidak diwajibkan.', // transactions - 'transactions_create_basic_info' => 'Masukkan informasi dasar mengenai transaksi anda. Sumber, tujuan, tanggal dan deskripsi.', - 'transactions_create_amount_info' => 'Masukkan jumlah transaksi. Jika diperlukan kolom akan memperbarui secar otomatis untuk informasi transaksi uang asing.', - 'transactions_create_optional_info' => 'Semua kolom ini adalah opsional. Menambahkan metadata akan membuat transaksi anda lebih rapi.', - 'transactions_create_split' => 'Jika anda ingin membagi sebuah transaksi, anda dapat melakukannya dengan tombol ini', + 'transactions_create_basic_info' => 'Masukkan informasi dasar mengenai transaksi anda. Sumber, tujuan, tanggal dan deskripsi.', + 'transactions_create_amount_info' => 'Masukkan jumlah transaksi. Jika diperlukan kolom akan memperbarui secar otomatis untuk informasi transaksi uang asing.', + 'transactions_create_optional_info' => 'Semua kolom ini adalah opsional. Menambahkan metadata akan membuat transaksi anda lebih rapi.', + 'transactions_create_split' => 'Jika anda ingin membagi sebuah transaksi, anda dapat melakukannya dengan tombol ini', // create account: - 'accounts_create_iban' => 'Berikan akun anda IBAN yang benar. Hal ini bisa membuat data impor sangat mudah di masa yang akan datang.', - 'accounts_create_asset_opening_balance' => 'Rekening aset boleh memiliki "saldo awal", yang menandakan dimulainya riwayat rekening ini di Firefly III.', - 'accounts_create_asset_currency' => 'Firelfly III mendukung berbagai mata uang. Akun aset memiliki satu mata uang utama, yang yang harus anda tetapkan.', - 'accounts_create_asset_virtual' => 'Kadang-kadang itu dapat membantu memberi akun anda saldo virtual: jumlah tambahan yang selalu ditambahkan atau dihapus dari saldo sebenarnya.', + 'accounts_create_iban' => 'Berikan akun anda IBAN yang benar. Hal ini bisa membuat data impor sangat mudah di masa yang akan datang.', + 'accounts_create_asset_opening_balance' => 'Rekening aset boleh memiliki "saldo awal", yang menandakan dimulainya riwayat rekening ini di Firefly III.', + 'accounts_create_asset_currency' => 'Firelfly III mendukung berbagai mata uang. Akun aset memiliki satu mata uang utama, yang yang harus anda tetapkan.', + 'accounts_create_asset_virtual' => 'Kadang-kadang itu dapat membantu memberi akun anda saldo virtual: jumlah tambahan yang selalu ditambahkan atau dihapus dari saldo sebenarnya.', // budgets index - 'budgets_index_intro' => 'Anggaran yang digunakan untuk mengelola keuangan anda dan membentuk salah satu fungsi inti dari Firefly III.', - 'budgets_index_set_budget' => 'Tetapkan total anggaran Anda untuk setiap periode sehingga Firefly III dapat menginformasikan apakah semua uang Anda sudah dianggarkan atau belum.', - 'budgets_index_see_expenses_bar' => 'Menghabiskan uang secara perlahan dengan mengisi di bar ini.', - 'budgets_index_navigate_periods' => 'Menavigasi melalui periode dengan mudah menetapkan anggaraan sebelumnya.', - 'budgets_index_new_budget' => 'Buat anggaran baru sesuai keinginan anda.', - 'budgets_index_list_of_budgets' => 'Gunakan tabel ini untuk menetapkan jumlah setiap anggaran daan melihat bagaimana keadaan anda.', - 'budgets_index_outro' => 'Untuk mempelajari lebih lanjut tentang anggaran, periksa ikon bantuan di pojok kanan atas.', + 'budgets_index_intro' => 'Anggaran yang digunakan untuk mengelola keuangan anda dan membentuk salah satu fungsi inti dari Firefly III.', + 'budgets_index_see_expenses_bar' => 'Menghabiskan uang secara perlahan dengan mengisi di bar ini.', + 'budgets_index_navigate_periods' => 'Menavigasi melalui periode dengan mudah menetapkan anggaraan sebelumnya.', + 'budgets_index_new_budget' => 'Buat anggaran baru sesuai keinginan anda.', + 'budgets_index_list_of_budgets' => 'Gunakan tabel ini untuk menetapkan jumlah setiap anggaran daan melihat bagaimana keadaan anda.', + 'budgets_index_outro' => 'Untuk mempelajari lebih lanjut tentang anggaran, periksa ikon bantuan di pojok kanan atas.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Gunakan laporan ini untuk mendapatkan wawasan terperinci dalam keuangan anda.', - 'reports_index_inputReportType' => 'Pilih sebuah jenis laporan. Periksa bantuan halaman untuk melihat apa yang ditunjukkan pada laporan anda.', - 'reports_index_inputAccountsSelect' => 'Anda dapat mengecualikan atau menyertakan akun aset sesuai keinginan anda.', - 'reports_index_inputDateRange' => 'Rentang tanggal yang dipilih sepenuhnya terserah anda: dari satu hari sampai 10 tahun.', - 'reports_index_extra-options-box' => 'Bergantung pada laporan yang anda pilih, anda dapat memilih filter dan opsi tambahan di sini. Lihat kotak ini saat anda mengubah jenis laporan.', + 'reports_index_intro' => 'Gunakan laporan ini untuk mendapatkan wawasan terperinci dalam keuangan anda.', + 'reports_index_inputReportType' => 'Pilih sebuah jenis laporan. Periksa bantuan halaman untuk melihat apa yang ditunjukkan pada laporan anda.', + 'reports_index_inputAccountsSelect' => 'Anda dapat mengecualikan atau menyertakan akun aset sesuai keinginan anda.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Bergantung pada laporan yang anda pilih, anda dapat memilih filter dan opsi tambahan di sini. Lihat kotak ini saat anda mengubah jenis laporan.', // reports (reports) - 'reports_report_default_intro' => 'Laporan ini akan memberi gambaran singkat tentang keuanggan anda secara cepat dan menyeluruh. Jika anda ingin melihat yang lain, jangan ragu untuk menghubungi saya!', - 'reports_report_audit_intro' => 'Laporan ini memberikan anda pengetahuan rnci dalam akun aset anda.', - 'reports_report_audit_optionsBox' => 'Gunakan kotak centang ini untuk menampilkan atau menyembunyikan kolom yang anda suka.', + 'reports_report_default_intro' => 'Laporan ini akan memberi gambaran singkat tentang keuanggan anda secara cepat dan menyeluruh. Jika anda ingin melihat yang lain, jangan ragu untuk menghubungi saya!', + 'reports_report_audit_intro' => 'Laporan ini memberikan anda pengetahuan rnci dalam akun aset anda.', + 'reports_report_audit_optionsBox' => 'Gunakan kotak centang ini untuk menampilkan atau menyembunyikan kolom yang anda suka.', - 'reports_report_category_intro' => 'Laporan ini akan memberi anda pengetahuan pada satu atau beberapa kategori.', - 'reports_report_category_pieCharts' => 'Bagan ini memberi anda pengetahuan tentang biaya dan pendapatan per kategori atau per akun.', - 'reports_report_category_incomeAndExpensesChart' => 'Bagan ini menunjukkan pengeluaran dan pendapatan anda per kategori.', + 'reports_report_category_intro' => 'Laporan ini akan memberi anda pengetahuan pada satu atau beberapa kategori.', + 'reports_report_category_pieCharts' => 'Bagan ini memberi anda pengetahuan tentang biaya dan pendapatan per kategori atau per akun.', + 'reports_report_category_incomeAndExpensesChart' => 'Bagan ini menunjukkan pengeluaran dan pendapatan anda per kategori.', - 'reports_report_tag_intro' => 'Laporan ini memberi anda pengetahuan dalam satu atau beberapa label.', - 'reports_report_tag_pieCharts' => 'Bagan ini memberikan anda pengetahuan tentang biaya dan pendapatan per label, akun, kategori atau anggaran.', - 'reports_report_tag_incomeAndExpensesChart' => 'Bagan ini menunjukkan pengeluaran dan pendapatan anda per label.', + 'reports_report_tag_intro' => 'Laporan ini memberi anda pengetahuan dalam satu atau beberapa label.', + 'reports_report_tag_pieCharts' => 'Bagan ini memberikan anda pengetahuan tentang biaya dan pendapatan per label, akun, kategori atau anggaran.', + 'reports_report_tag_incomeAndExpensesChart' => 'Bagan ini menunjukkan pengeluaran dan pendapatan anda per label.', 'reports_report_budget_intro' => 'Laporan ini memberikan anda pengetahuan tentang satu atau beberapa anggaran.', 'reports_report_budget_pieCharts' => 'Bagan ini memberikan anda pengetahuan tentang biaya per anggaran atau per akun.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Di samping bilah kemajuan ini ada dua tombol (+ dan -) untuk menanmbahkan atau menghapus uang dari masing-masing celengan.', 'piggy-banks_index_accountStatus' => 'Untuk setiap akun aset dengan sedikitnya satu celenggan, statusnya terdaftar dalam tabel ini.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Apa tujuanmu? Sofa baru, kamera baru, uang untuk keadaan darurat?', 'piggy-banks_create_date' => 'Anda dapat menetapkan tanggal target atau tenggat waktu untuk celengan anda.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Gunakan tagihan untuk melacak berapa jumlah uang yang jatuh tempo setiap periode nya. Pikirkan tentang semua biaya seperti sewa, asuransi, gadai, atau cicilan lainnya.', 'bills_create_name' => 'Gunakan nama yang deskriptif seperti "Rent" atau "Health insurance".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Pilih jumlah minimum dan maksimum untuk tagihan ini.', 'bills_create_repeat_freq_holder' => 'Sebagian besar tagihan diulang setiap bulannya, tapi anda bisa mengatur frekuensi lain di sini.', 'bills_create_skip_holder' => 'Jika tagihan berulang setiap 2 minggu, bagian "lewati" harus diatur ke "1" untuk melewati setiap minggu lainnya.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Gunakan tombol ini untuk melihat transaksi mana yang sesuai dengan peraturan anda.', 'rules_create_actions' => 'Tentukan sebanyak mungkin tindakan yang anda inginkan.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Pilihan lainnya tersedia di balik tab ini.', diff --git a/resources/lang/id_ID/list.php b/resources/lang/id_ID/list.php index d16cb70fd2..ecff6b538a 100644 --- a/resources/lang/id_ID/list.php +++ b/resources/lang/id_ID/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Tombol', - 'icon' => 'Ikon', - 'id' => 'ID', - 'create_date' => 'Dibuat pada', - 'update_date' => 'Diperbarui pada', - 'updated_at' => 'Diperbarui pada', - 'balance_before' => 'Saldo Sebelumnya', - 'balance_after' => 'Saldo setelahnya', - 'name' => 'Nama', - 'role' => 'Peran', - 'currentBalance' => 'Saldo saat ini', - 'linked_to_rules' => 'Aturan yang relevan', - 'active' => 'Aktif?', - 'percentage' => 'pct.', - 'recurring_transaction' => 'Transaksi berulang', - 'next_due' => 'Jatuh tempo selanjutnya', - 'transaction_type' => 'Tipe', - 'lastActivity' => 'Aktifitas terakhir', - 'balanceDiff' => 'Perbedaan saldo', - 'other_meta_data' => 'Meta data lain', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Jenis akun', - 'created_at' => 'Dibuat di', - 'account' => 'Akun', - 'external_url' => 'External URL', - 'matchingAmount' => 'Jumlah', - 'destination' => 'Tujuan', - 'source' => 'Sumber', - 'next_expected_match' => 'Transaksi yang diharapkan berikutnya', - 'automatch' => 'Pencocokan otomatis?', + 'buttons' => 'Tombol', + 'icon' => 'Ikon', + 'id' => 'ID', + 'create_date' => 'Dibuat pada', + 'update_date' => 'Diperbarui pada', + 'updated_at' => 'Diperbarui pada', + 'balance_before' => 'Saldo Sebelumnya', + 'balance_after' => 'Saldo setelahnya', + 'name' => 'Nama', + 'role' => 'Peran', + 'currentBalance' => 'Saldo saat ini', + 'linked_to_rules' => 'Aturan yang relevan', + 'active' => 'Aktif?', + 'percentage' => 'pct.', + 'recurring_transaction' => 'Transaksi berulang', + 'next_due' => 'Jatuh tempo selanjutnya', + 'transaction_type' => 'Tipe', + 'lastActivity' => 'Aktifitas terakhir', + 'balanceDiff' => 'Perbedaan saldo', + 'other_meta_data' => 'Meta data lain', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => 'Jenis akun', + 'created_at' => 'Dibuat di', + 'account' => 'Akun', + 'external_url' => 'External URL', + 'matchingAmount' => 'Jumlah', + 'destination' => 'Tujuan', + 'source' => 'Sumber', + 'next_expected_match' => 'Transaksi yang diharapkan berikutnya', + 'automatch' => 'Pencocokan otomatis?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Berulang', 'description' => 'Deskripsi', 'amount' => 'Jumlah', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Rekening dengan bunq', 'file_name' => 'Nama file', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Ukuran file', - 'file_type' => 'Jenis file', - 'attached_to' => 'Melekat pada', - 'file_exists' => 'File ada', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Login terakhir', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'bunq payment ID', - 'repetitions' => 'Pengulangan', - 'title' => 'Judul', - 'transaction_s' => 'Transaksi', - 'field' => 'Bidang', - 'value' => 'Nilai', - 'interest' => 'Bunga', - 'interest_period' => 'Periode bunga', - 'liability_type' => 'Jenis kewajiban', - 'liability_direction' => 'Kewajiban masuk/keluar', - 'end_date' => 'Tanggal Selesai', - 'payment_info' => 'Informasi Pembayaran', - 'expected_info' => 'Perkiraan transaksi berikutnya', - 'start_date' => 'Tanggal mulai', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Ukuran file', + 'file_type' => 'Jenis file', + 'attached_to' => 'Melekat pada', + 'file_exists' => 'File ada', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Login terakhir', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'bunq payment ID', + 'repetitions' => 'Pengulangan', + 'title' => 'Judul', + 'transaction_s' => 'Transaksi', + 'field' => 'Bidang', + 'value' => 'Nilai', + 'interest' => 'Bunga', + 'interest_period' => 'Periode bunga', + 'liability_type' => 'Jenis kewajiban', + 'liability_direction' => 'Kewajiban masuk/keluar', + 'end_date' => 'Tanggal Selesai', + 'payment_info' => 'Informasi Pembayaran', + 'expected_info' => 'Perkiraan transaksi berikutnya', + 'start_date' => 'Tanggal mulai', + 'trigger' => 'Trigger', + 'response' => 'Response', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/id_ID/pagination.php b/resources/lang/id_ID/pagination.php index 737009254f..247d67b533 100644 --- a/resources/lang/id_ID/pagination.php +++ b/resources/lang/id_ID/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/id_ID/passwords.php b/resources/lang/id_ID/passwords.php index dace6bd775..8863bbf355 100644 --- a/resources/lang/id_ID/passwords.php +++ b/resources/lang/id_ID/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/id_ID/rules.php b/resources/lang/id_ID/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/id_ID/rules.php +++ b/resources/lang/id_ID/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/id_ID/validation.php b/resources/lang/id_ID/validation.php index 855f3042bb..3cbcf7ac4f 100644 --- a/resources/lang/id_ID/validation.php +++ b/resources/lang/id_ID/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'Ini bukan IBAN yang valid.', - 'zero_or_more' => 'Nilai tidak bisa negatif.', - 'date_or_time' => 'Nilainya harus berupa nilai tanggal atau waktu yang valid (ISO 8601).', - 'source_equals_destination' => 'Akun sumber sama dengan akun tujuan.', - 'unique_account_number_for_user' => 'Sepertinya nomor rekening ini sudah digunakan.', - 'unique_iban_for_user' => 'Sepertinya nomor rekening ini sudah digunakan.', - 'deleted_user' => 'Kerena kendala keamanan, anda tidak bisa mendaftar menggunkan alamat email ini.', - 'rule_trigger_value' => 'Nilai ini tidak validi untuk trigger yang dipilih.', - 'rule_action_value' => 'Nilai ini tidak valid untuk tindakan yang dipilih.', - 'file_already_attached' => 'Upload file ";name" sudah terpasang pada objek ini.', - 'file_attached' => 'Berhasil mengunggah file ": name".', - 'must_exist' => 'ID di bidang :attribute tidak ada di database.', - 'all_accounts_equal' => 'Semua akun di bidang ini harus sama.', - 'group_title_mandatory' => 'Sebuah judul grup wajib diisi bila terdapat lebih dari satu transaksi.', - 'transaction_types_equal' => 'Semua pisahan harus mempunyai jenis yang sama.', - 'invalid_transaction_type' => 'Jenis transaksi tidak valid.', - 'invalid_selection' => 'Pilihan Anda tidak valid.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Minimal harus ada satu transaksi.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Minimal harus ada satu pengulangan.', - 'require_repeat_until' => 'Dibutuhkan hanya sebuah angka pengulangan, atau tanggal akhir (repeat_until). Bukan keduanya.', - 'require_currency_info' => 'Isi dalam bidang ini tidak valid jika tidak disertai informasi mata uang.', - 'not_transfer_account' => 'Akun ini bukan sebuah akun yang dapat digunakan untuk transfer.', - 'require_currency_amount' => 'Isi dalam bidang ini tidak valid jika tidak disertai informasi jumlah mata uang asing.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Deskripsi transaksi harus berbeda dari deskripsi umum.', - 'file_invalid_mime' => 'File ":name" adalah tipe ":mime" yang tidak diterima sebagai upload baru.', - 'file_too_large' => 'File "; name" terlalu besar.', - 'belongs_to_user' => 'Nilai dari :attribute tidak diketahui.', - 'accepted' => ':attribute harus diterima.', - 'bic' => 'Ini bukan BIC yang valid.', - 'at_least_one_trigger' => 'Aturan harus memiliki setidaknya satu pemicu.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'Aturan harus memiliki setidaknya satu tindakan.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'Ini bukanlah data base64 encoded yang valid.', - 'model_id_invalid' => 'ID yang diberikan tidaklah valid untuk model ini.', - 'less' => ':attribute harus kurang dari 10,000,000', - 'active_url' => ':attribute bukan URL yang valid.', - 'after' => ':attribute harus tanggal setelah :date.', - 'date_after' => 'Tanggal awal harus sebelum tanggal akhir.', - 'alpha' => ':attribute hanya boleh berisi huruf.', - 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka dan tanda hubung.', - 'alpha_num' => ':attribute hanya boleh berisi huruf dan angka.', - 'array' => ':attribute harus berupa array.', - 'unique_for_user' => 'Sudah ada entri dengan :attribute ini.', - 'before' => ':attribute harus tanggal sebelum :date.', - 'unique_object_for_user' => 'Nama ini sudah digunakan.', - 'unique_account_for_user' => 'Nama akun ini sudah digunakan.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => 'Ini bukan IBAN yang valid.', + 'zero_or_more' => 'Nilai tidak bisa negatif.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Nilainya harus berupa nilai tanggal atau waktu yang valid (ISO 8601).', + 'source_equals_destination' => 'Akun sumber sama dengan akun tujuan.', + 'unique_account_number_for_user' => 'Sepertinya nomor rekening ini sudah digunakan.', + 'unique_iban_for_user' => 'Sepertinya nomor rekening ini sudah digunakan.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Kerena kendala keamanan, anda tidak bisa mendaftar menggunkan alamat email ini.', + 'rule_trigger_value' => 'Nilai ini tidak validi untuk trigger yang dipilih.', + 'rule_action_value' => 'Nilai ini tidak valid untuk tindakan yang dipilih.', + 'file_already_attached' => 'Upload file ";name" sudah terpasang pada objek ini.', + 'file_attached' => 'Berhasil mengunggah file ": name".', + 'must_exist' => 'ID di bidang :attribute tidak ada di database.', + 'all_accounts_equal' => 'Semua akun di bidang ini harus sama.', + 'group_title_mandatory' => 'Sebuah judul grup wajib diisi bila terdapat lebih dari satu transaksi.', + 'transaction_types_equal' => 'Semua pisahan harus mempunyai jenis yang sama.', + 'invalid_transaction_type' => 'Jenis transaksi tidak valid.', + 'invalid_selection' => 'Pilihan Anda tidak valid.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Minimal harus ada satu transaksi.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Minimal harus ada satu pengulangan.', + 'require_repeat_until' => 'Dibutuhkan hanya sebuah angka pengulangan, atau tanggal akhir (repeat_until). Bukan keduanya.', + 'require_currency_info' => 'Isi dalam bidang ini tidak valid jika tidak disertai informasi mata uang.', + 'not_transfer_account' => 'Akun ini bukan sebuah akun yang dapat digunakan untuk transfer.', + 'require_currency_amount' => 'Isi dalam bidang ini tidak valid jika tidak disertai informasi jumlah mata uang asing.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'Deskripsi transaksi harus berbeda dari deskripsi umum.', + 'file_invalid_mime' => 'File ":name" adalah tipe ":mime" yang tidak diterima sebagai upload baru.', + 'file_too_large' => 'File "; name" terlalu besar.', + 'belongs_to_user' => 'Nilai dari :attribute tidak diketahui.', + 'accepted' => ':attribute harus diterima.', + 'bic' => 'Ini bukan BIC yang valid.', + 'at_least_one_trigger' => 'Aturan harus memiliki setidaknya satu pemicu.', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => 'Aturan harus memiliki setidaknya satu tindakan.', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => 'Ini bukanlah data base64 encoded yang valid.', + 'model_id_invalid' => 'ID yang diberikan tidaklah valid untuk model ini.', + 'less' => ':attribute harus kurang dari 10,000,000', + 'active_url' => ':attribute bukan URL yang valid.', + 'after' => ':attribute harus tanggal setelah :date.', + 'date_after' => 'Tanggal awal harus sebelum tanggal akhir.', + 'alpha' => ':attribute hanya boleh berisi huruf.', + 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka dan tanda hubung.', + 'alpha_num' => ':attribute hanya boleh berisi huruf dan angka.', + 'array' => ':attribute harus berupa array.', + 'unique_for_user' => 'Sudah ada entri dengan :attribute ini.', + 'before' => ':attribute harus tanggal sebelum :date.', + 'unique_object_for_user' => 'Nama ini sudah digunakan.', + 'unique_account_for_user' => 'Nama akun ini sudah digunakan.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute harus antara :min dan :max.', + 'between.file' => ':attribute harus antara :min dan :max kilobyte.', + 'between.string' => ':attribute harus antara :min dan :max karakter.', + 'between.array' => ':attribute harus antara :min dan :max item.', + 'boolean' => 'Bidang :attribute harus benar atau salah.', + 'confirmed' => 'Konfirmasi :attribute tidak cocok.', + 'date' => ':attribute bukan tanggal yang valid.', + 'date_format' => ':attribute tidak cocok dengan the format :format.', + 'different' => ':attribute dan :other harus berbeda.', + 'digits' => ':attribute harus angka :digits.', + 'digits_between' => ':attribute harus antara :min dan :max angka.', + 'email' => ':attribute harus alamat email yang valid.', + 'filled' => 'Bidang :attribute diperlukan.', + 'exists' => ':attribute yang dipilih tidak valid.', + 'image' => ':attribute harus gambar.', + 'in' => ':attribute yang dipilih tidak valid.', + 'integer' => ':attribute harus bilangan bulat.', + 'ip' => ':attribute harus alamat IP yang valid.', + 'json' => ':attribute harus string JSON yang valid.', + 'max.numeric' => ':attribute tidak boleh lebih besar dari :max.', + 'max.file' => ':attribute tidak boleh lebih besar dari kilobyte :max.', + 'max.string' => ':attribute tidak boleh lebih besar dari karakter :max.', + 'max.array' => ':attribute tidak boleh memiliki lebih dari item :max.', + 'mimes' => ':attribute harus jenis file: :values.', + 'min.numeric' => ':attribute harus sedikitnya :min.', + 'lte.numeric' => ':attribute harus kurang dari atau sama dengan :value.', + 'min.file' => 'Atribut harus minimal kilobyte :min.', + 'min.string' => ':attribute harus minimal karakter :min.', + 'min.array' => ':attribute harus minimal item :min.', + 'not_in' => ':attribute yang dipilih tidak valid.', + 'numeric' => ':attribute harus angka.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Nilai asli haruslah berupa angka.', + 'numeric_destination' => 'Nilai tujuan haruslah berupa angka.', + 'numeric_source' => 'Nilai asal haruslah berupa angka.', + 'regex' => 'Format :attribute tidak valid.', + 'required' => 'Bidang :attribute diperlukan.', + 'required_if' => 'Bidang :attribute diperlukan ketika :other adalah :value.', + 'required_unless' => 'Bidang :attribute diperlukan minimal :other adalah dalam :values.', + 'required_with' => 'Bidang :attribute diperlukan ketika :values terdapat nilai.', + 'required_with_all' => 'Bidang :attribute diperlukan ketika :values ada.', + 'required_without' => 'Bidang :attribute diperlukan ketika :values tidak ada.', + 'required_without_all' => 'Bidang :attribute diperlukan ketika tidak ada satupun :values ada.', + 'same' => ':attribute dan :other harus cocok.', + 'size.numeric' => ':attribute harus :size.', + 'amount_min_over_max' => 'Jumlah minimum tidak boleh lebih besar dari jumlah maksimum.', + 'size.file' => ':attribute harus kilobyte :size.', + 'size.string' => ':attribute harus karakter :size.', + 'size.array' => ':attribute harus berisi item :size.', + 'unique' => ':attribute sudah diambil.', + 'string' => ':attribute harus sebuah string.', + 'url' => 'Format atribut tidak valid.', + 'timezone' => ':attribute harus zona yang valid.', + '2fa_code' => 'Bidang :attribute tidak valid.', + 'dimensions' => ':attribute memiliki dimensi gambar yang tidak valid.', + 'distinct' => 'Bidang :attribute memiliki nilai duplikat.', + 'file' => ':attribute harus berupa file.', + 'in_array' => 'Bidang :attribute tidak ada in :other.', + 'present' => 'Bidang :attribute harus ada.', + 'amount_zero' => 'Jumlah total tidak boleh nol.', + 'current_target_amount' => 'Jumlah saat ini harus kurang dari jumlah target.', + 'unique_piggy_bank_for_user' => 'Nama celengan harus unik.', + 'unique_object_group' => 'Nama grup harus unik', + 'starts_with' => 'Nilai harus di mulai dengan :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Kedua akun harus dari jenis akun yang sama', + 'same_account_currency' => 'Kedua akun harus memiliki pengaturan mata uang yang sama', - 'between.numeric' => ':attribute harus antara :min dan :max.', - 'between.file' => ':attribute harus antara :min dan :max kilobyte.', - 'between.string' => ':attribute harus antara :min dan :max karakter.', - 'between.array' => ':attribute harus antara :min dan :max item.', - 'boolean' => 'Bidang :attribute harus benar atau salah.', - 'confirmed' => 'Konfirmasi :attribute tidak cocok.', - 'date' => ':attribute bukan tanggal yang valid.', - 'date_format' => ':attribute tidak cocok dengan the format :format.', - 'different' => ':attribute dan :other harus berbeda.', - 'digits' => ':attribute harus angka :digits.', - 'digits_between' => ':attribute harus antara :min dan :max angka.', - 'email' => ':attribute harus alamat email yang valid.', - 'filled' => 'Bidang :attribute diperlukan.', - 'exists' => ':attribute yang dipilih tidak valid.', - 'image' => ':attribute harus gambar.', - 'in' => ':attribute yang dipilih tidak valid.', - 'integer' => ':attribute harus bilangan bulat.', - 'ip' => ':attribute harus alamat IP yang valid.', - 'json' => ':attribute harus string JSON yang valid.', - 'max.numeric' => ':attribute tidak boleh lebih besar dari :max.', - 'max.file' => ':attribute tidak boleh lebih besar dari kilobyte :max.', - 'max.string' => ':attribute tidak boleh lebih besar dari karakter :max.', - 'max.array' => ':attribute tidak boleh memiliki lebih dari item :max.', - 'mimes' => ':attribute harus jenis file: :values.', - 'min.numeric' => ':attribute harus sedikitnya :min.', - 'lte.numeric' => ':attribute harus kurang dari atau sama dengan :value.', - 'min.file' => 'Atribut harus minimal kilobyte :min.', - 'min.string' => ':attribute harus minimal karakter :min.', - 'min.array' => ':attribute harus minimal item :min.', - 'not_in' => ':attribute yang dipilih tidak valid.', - 'numeric' => ':attribute harus angka.', - 'numeric_native' => 'Nilai asli haruslah berupa angka.', - 'numeric_destination' => 'Nilai tujuan haruslah berupa angka.', - 'numeric_source' => 'Nilai asal haruslah berupa angka.', - 'regex' => 'Format :attribute tidak valid.', - 'required' => 'Bidang :attribute diperlukan.', - 'required_if' => 'Bidang :attribute diperlukan ketika :other adalah :value.', - 'required_unless' => 'Bidang :attribute diperlukan minimal :other adalah dalam :values.', - 'required_with' => 'Bidang :attribute diperlukan ketika :values terdapat nilai.', - 'required_with_all' => 'Bidang :attribute diperlukan ketika :values ada.', - 'required_without' => 'Bidang :attribute diperlukan ketika :values tidak ada.', - 'required_without_all' => 'Bidang :attribute diperlukan ketika tidak ada satupun :values ada.', - 'same' => ':attribute dan :other harus cocok.', - 'size.numeric' => ':attribute harus :size.', - 'amount_min_over_max' => 'Jumlah minimum tidak boleh lebih besar dari jumlah maksimum.', - 'size.file' => ':attribute harus kilobyte :size.', - 'size.string' => ':attribute harus karakter :size.', - 'size.array' => ':attribute harus berisi item :size.', - 'unique' => ':attribute sudah diambil.', - 'string' => ':attribute harus sebuah string.', - 'url' => 'Format atribut tidak valid.', - 'timezone' => ':attribute harus zona yang valid.', - '2fa_code' => 'Bidang :attribute tidak valid.', - 'dimensions' => ':attribute memiliki dimensi gambar yang tidak valid.', - 'distinct' => 'Bidang :attribute memiliki nilai duplikat.', - 'file' => ':attribute harus berupa file.', - 'in_array' => 'Bidang :attribute tidak ada in :other.', - 'present' => 'Bidang :attribute harus ada.', - 'amount_zero' => 'Jumlah total tidak boleh nol.', - 'current_target_amount' => 'Jumlah saat ini harus kurang dari jumlah target.', - 'unique_piggy_bank_for_user' => 'Nama celengan harus unik.', - 'unique_object_group' => 'Nama grup harus unik', - 'starts_with' => 'Nilai harus di mulai dengan :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Kedua akun harus dari jenis akun yang sama', - 'same_account_currency' => 'Kedua akun harus memiliki pengaturan mata uang yang sama', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Ini bukan sebuah kata sandi yang aman. Silahkan coba lagi. Untuk informasi lebih lanjut, kunjungi https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Tipe pengulangan yang tidak valid untuk transaksi berkala.', - 'valid_recurrence_rep_moment' => 'Waktu pengulangan tidaklah valid untuk tipe pengulangan ini.', - 'invalid_account_info' => 'Informasi akun tidak valid.', - 'attributes' => [ + 'secure_password' => 'Ini bukan sebuah kata sandi yang aman. Silahkan coba lagi. Untuk informasi lebih lanjut, kunjungi https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Tipe pengulangan yang tidak valid untuk transaksi berkala.', + 'valid_recurrence_rep_moment' => 'Waktu pengulangan tidaklah valid untuk tipe pengulangan ini.', + 'invalid_account_info' => 'Informasi akun tidak valid.', + 'attributes' => [ 'email' => 'alamat email', 'description' => 'keterangan', 'amount' => 'jumlah', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Perlu untuk mendapatkan sebuah ID akun sumber yang valid dan/atau nama akun sumber yang valid untuk melanjutkan.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Tidak dapat menemukan sebuah akun tujuan yang valid saat mencari ID ":id" atau nama ":name".', + 'withdrawal_source_need_data' => 'Perlu untuk mendapatkan sebuah ID akun sumber yang valid dan/atau nama akun sumber yang valid untuk melanjutkan.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Tidak dapat menemukan sebuah akun tujuan yang valid saat mencari ID ":id" atau nama ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Perlu untuk mendapatkan sebuah ID akun sumber yang valid dan/atau nama akun sumber yang valid untuk melanjutkan.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Tidak dapat menemukan sebuah akun tujuan yang valid saat mencari ID ":id" atau nama ":name".', - 'deposit_dest_wrong_type' => 'Akun tujuan yang dikirimkan bukan dari jenis yang benar.', + 'deposit_source_need_data' => 'Perlu untuk mendapatkan sebuah ID akun sumber yang valid dan/atau nama akun sumber yang valid untuk melanjutkan.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Tidak dapat menemukan sebuah akun tujuan yang valid saat mencari ID ":id" atau nama ":name".', + 'deposit_dest_wrong_type' => 'Akun tujuan yang dikirimkan bukan dari jenis yang benar.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Perlu untuk mendapatkan sebuah ID akun sumber yang valid dan/atau nama akun sumber yang valid untuk melanjutkan.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Tidak dapat menemukan sebuah akun tujuan yang valid saat mencari ID ":id" atau nama ":name".', + 'need_id_in_edit' => 'Setiap pisahan harus memiliki transaction_journal_id (ID yang valid atau 0).', - 'transfer_source_need_data' => 'Perlu untuk mendapatkan sebuah ID akun sumber yang valid dan/atau nama akun sumber yang valid untuk melanjutkan.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Tidak dapat menemukan sebuah akun tujuan yang valid saat mencari ID ":id" atau nama ":name".', - 'need_id_in_edit' => 'Setiap pisahan harus memiliki transaction_journal_id (ID yang valid atau 0).', + 'ob_source_need_data' => 'Perlu untuk mendapatkan sebuah ID akun sumber yang valid dan/atau nama akun sumber yang valid untuk melanjutkan.', + 'lc_source_need_data' => 'Perlu untuk mendapatkan sebuah ID akun sumber yang valid untuk melanjutkan.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Tidak dapat menemukan sebuah akun tujuan yang valid saat mencari ID ":id" atau nama ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Perlu untuk mendapatkan sebuah ID akun sumber yang valid dan/atau nama akun sumber yang valid untuk melanjutkan.', - 'lc_source_need_data' => 'Perlu untuk mendapatkan sebuah ID akun sumber yang valid untuk melanjutkan.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Tidak dapat menemukan sebuah akun tujuan yang valid saat mencari ID ":id" atau nama ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Anda tidak dapat menggunakan akun ini sebagai akun sumber.', + 'generic_invalid_destination' => 'Anda tidak dapat menggunakan akun ini sebagai akun tujuan.', - 'generic_invalid_source' => 'Anda tidak dapat menggunakan akun ini sebagai akun sumber.', - 'generic_invalid_destination' => 'Anda tidak dapat menggunakan akun ini sebagai akun tujuan.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => ':attribute harus lebih besar dari atau sama dengan :value.', - 'gt.numeric' => ':attribute harus lebih besar dari :value.', - 'gte.file' => ':attribute harus lebih besar dari atau sama dengan :value kilobytes.', - 'gte.string' => ':attribute harus lebih besar dari atau sama dengan :value karakter.', - 'gte.array' => ':attribute harus memiliki :value item atau lebih.', + 'gte.numeric' => ':attribute harus lebih besar dari atau sama dengan :value.', + 'gt.numeric' => ':attribute harus lebih besar dari :value.', + 'gte.file' => ':attribute harus lebih besar dari atau sama dengan :value kilobytes.', + 'gte.string' => ':attribute harus lebih besar dari atau sama dengan :value karakter.', + 'gte.array' => ':attribute harus memiliki :value item atau lebih.', 'amount_required_for_auto_budget' => 'Jumlah wajib diisi.', 'auto_budget_amount_positive' => 'Jumlah harus lebih dari kosong.', + 'auto_budget_period_mandatory' => 'Periode anggaran otomatis adalah bidang yang wajib.', // no access to administration: diff --git a/resources/lang/it_IT/api.php b/resources/lang/it_IT/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/it_IT/api.php +++ b/resources/lang/it_IT/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/it_IT/auth.php b/resources/lang/it_IT/auth.php index b817083574..892231e6a3 100644 --- a/resources/lang/it_IT/auth.php +++ b/resources/lang/it_IT/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Queste credenziali non corrispondono ai nostri record.', 'throttle' => 'Troppi tentativi di accesso. Per favore riprova tra :seconds secondi.', diff --git a/resources/lang/it_IT/breadcrumbs.php b/resources/lang/it_IT/breadcrumbs.php index 42f9744a97..9b33cdefbe 100644 --- a/resources/lang/it_IT/breadcrumbs.php +++ b/resources/lang/it_IT/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Pagina principale', - 'budgets' => 'Budget', - 'subscriptions' => 'Abbonamenti', - 'transactions' => 'Transazioni', - 'title_expenses' => 'Uscite', - 'title_withdrawal' => 'Prelievi', - 'title_revenue' => 'Redditi / entrate', - 'title_deposit' => 'Versamenti', - 'title_transfer' => 'Trasferimenti', - 'title_transfers' => 'Trasferimenti', - 'edit_currency' => 'Modifica valuta ":name"', - 'delete_currency' => 'Elimina valuta ":name"', - 'newPiggyBank' => 'Crea un nuovo salvadanaio', - 'edit_piggyBank' => 'Modifica salvadanaio ":name"', - 'preferences' => 'Preferenze', - 'profile' => 'Profilo', - 'accounts' => 'Conti', - 'changePassword' => 'Cambia la tua password', - 'change_email' => 'Cambia il tuo indirizzo email', - 'bills' => 'Bollette', - 'newBill' => 'Nuova bolletta', - 'edit_bill' => 'Modifica bolletta ":name"', - 'delete_bill' => 'Elimina bolletta ":name"', - 'reports' => 'Resoconti', - 'search_result' => 'Risultati di ricerca per ":query"', - 'withdrawal_list' => 'Spese, uscite e prelievi', - 'Withdrawal_list' => 'Uscite', - 'deposit_list' => 'Redditi, entrate e depositi', - 'transfer_list' => 'Trasferimenti', - 'transfers_list' => 'Trasferimenti', + 'home' => 'Pagina principale', + 'budgets' => 'Budget', + 'subscriptions' => 'Abbonamenti', + 'transactions' => 'Transazioni', + 'title_expenses' => 'Uscite', + 'title_withdrawal' => 'Prelievi', + 'title_revenue' => 'Redditi / entrate', + 'title_deposit' => 'Versamenti', + 'title_transfer' => 'Trasferimenti', + 'title_transfers' => 'Trasferimenti', + 'edit_currency' => 'Modifica valuta ":name"', + 'delete_currency' => 'Elimina valuta ":name"', + 'newPiggyBank' => 'Crea un nuovo salvadanaio', + 'edit_piggyBank' => 'Modifica salvadanaio ":name"', + 'preferences' => 'Preferenze', + 'profile' => 'Profilo', + 'accounts' => 'Conti', + 'changePassword' => 'Cambia la tua password', + 'change_email' => 'Cambia il tuo indirizzo email', + 'bills' => 'Bollette', + 'newBill' => 'Nuova bolletta', + 'edit_bill' => 'Modifica bolletta ":name"', + 'delete_bill' => 'Elimina bolletta ":name"', + 'reports' => 'Resoconti', + 'search_result' => 'Risultati di ricerca per ":query"', + 'withdrawal_list' => 'Spese, uscite e prelievi', + 'Withdrawal_list' => 'Uscite', + 'deposit_list' => 'Redditi, entrate e depositi', + 'transfer_list' => 'Trasferimenti', + 'transfers_list' => 'Trasferimenti', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Riconciliazioni', 'create_withdrawal' => 'Crea nuova uscita', 'create_deposit' => 'Crea nuova entrata', diff --git a/resources/lang/it_IT/components.php b/resources/lang/it_IT/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/it_IT/components.php +++ b/resources/lang/it_IT/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/it_IT/config.php b/resources/lang/it_IT/config.php index 213c0ff6a8..8130046058 100644 --- a/resources/lang/it_IT/config.php +++ b/resources/lang/it_IT/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'it', - 'locale' => 'it, Italiano, it_IT.utf8, it_IT.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'it', + 'locale' => 'it, Italiano, it_IT.utf8, it_IT.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMM YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'D MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D MMM YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'D MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd D MMMM YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd D MMMM YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'D MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'D MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'D MMMM YYYY, HH:mm:ss', + 'date_time_fns' => 'do MMMM yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'D MMMM YYYY, HH:mm:ss', - 'date_time_fns' => 'do MMMM yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Settimana' w yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Settimana' w yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\TQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\TQ YYYY', - - 'quarter_fns' => "'T'Q yyyy", - 'half_year_fns' => "'S{half}' yyyy", - 'dow_1' => 'Lunedì', - 'dow_2' => 'Martedì', - 'dow_3' => 'Mercoledì', - 'dow_4' => 'Giovedì', - 'dow_5' => 'Venerdì', - 'dow_6' => 'Sabato', - 'dow_7' => 'Domenica', + 'quarter_fns' => "'T'Q yyyy", + 'half_year_fns' => "'S{half}' yyyy", + 'dow_1' => 'Lunedì', + 'dow_2' => 'Martedì', + 'dow_3' => 'Mercoledì', + 'dow_4' => 'Giovedì', + 'dow_5' => 'Venerdì', + 'dow_6' => 'Sabato', + 'dow_7' => 'Domenica', ]; /* diff --git a/resources/lang/it_IT/demo.php b/resources/lang/it_IT/demo.php index 7705237617..3bc68ec7f7 100644 --- a/resources/lang/it_IT/demo.php +++ b/resources/lang/it_IT/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/it_IT/email.php b/resources/lang/it_IT/email.php index a26e8fbfc6..6adcd399dc 100644 --- a/resources/lang/it_IT/email.php +++ b/resources/lang/it_IT/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Un messaggio di prova dalla tua installazione di Firefly III', 'admin_test_body' => 'Questo è un messaggio di prova dalla tua istanza Firefly III. È stato inviato a :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'È stato creato un invito', 'invitation_created_body' => 'L\'utente amministratore ":email" ha creato l\'invito utente per chiunque sia associato all\'indirizzo email ":invitee". L\'invito sarò valido per 48 ore.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Reimposta la password:', 'registered_doc_link' => 'Documentazione:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'È disponibile una nuova versione di Firefly III', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Se preferisci puoi anche aprire una nuova issue su https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Lo stacktrace completo è qui sotto:', 'error_headers' => 'Anche le seguenti intestazioni potrebbero esser rilevanti:', + 'error_post' => 'Questo è stato inviato dall\'utente:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III ha creato una nuova transazione|Firefly III ha creato :count nuove transazioni', 'new_journals_header' => 'Firefly III ha creato una transazione per te. Puoi trovarla nella tua installazione di Firefly III:|Firefly III ha creato :count transazioni per te. Puoi trovarle nella tua installazione di Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'La tua bolletta **":name"** terminerà il :date, ovvero **OGGI!**', 'bill_warning_extension_date_zero' => 'La tua bolletta **":name"** dovrebbe essere estesa o annullata il :date, ovvero **OGGI!**', 'bill_warning_please_action' => 'Si prega di adottare le misure appropriate.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/it_IT/errors.php b/resources/lang/it_IT/errors.php index 0d31e4e344..ecc8493f06 100644 --- a/resources/lang/it_IT/errors.php +++ b/resources/lang/it_IT/errors.php @@ -31,20 +31,19 @@ * */ - declare(strict_types=1); return [ - '404_header' => 'Firefly III non riesce a trovare questa pagina.', + '404_header' => 'Firefly III non riesce a trovare l\'etichetta ":tag"', '404_page_does_not_exist' => 'La pagina che hai richiesto non esiste. Controlla di non aver inserito l\'URL sbagliato. Hai fatto un errore di battitura?', - '404_send_error' => 'Se sei stato reindirizzato a questa pagina automaticamente, accetta le mie scuse. Nei tuoi file di log puoi trovare questo errore e ti sarei grato se me lo inviassi.', + '404_send_error' => 'Se sei stato reindirizzato a questa pagina automaticamente, accetta le mie scuse. Nei tuoi file di Los puoi trovare questo errore e ti sarei grato se me lo inviassi.', '404_github_link' => 'Se sei sicuro che questa pagina dovrebbe esistere, apri un ticket su GitHub.', - 'whoops' => 'Oops!', - 'fatal_error' => 'Si è verificato un errore fatale. Controlla i file di log in "storage/logs" o usa "docker logs -f [container]" per vedere cosa sta succedendo.', - 'maintenance_mode' => 'Firefly III è in modalità di manutenzione.', + 'whoops' => 'Oops', + 'fatal_error' => 'Si è verificato un errore fatale. Controlla i file di login "storage/Los" o usa "Docker Los f [container]" per vedere cosa sta succedendo.', + 'maintenance_mode' => 'Firefox III è in modalità di manutenzione.', 'be_right_back' => 'Torno subito!', 'check_back' => 'Firefly III non è in funzione per una manutenzione necessaria. Ricontrolla tra qualche secondo.', - 'error_occurred' => 'Ops! Si è verificato un errore.', + 'error_occurred' => 'Oops! Si è verificato un errore.', 'db_error_occurred' => 'Oops! Si è verificato un errore del database.', 'error_not_recoverable' => 'Sfortunatamente questo errore non è riparabile :(. Firefly III è rotto. L\'errore è:', 'error' => 'Errore', @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack trace', 'more_info' => 'Ulterioni informazioni', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Raccogli ulteriori informazioni nella cartella storage/log dove troverai i file di log. Se stai eseguendo Docker, usa docker logs -f [container].', - 'collect_info_more' => 'Puoi leggere maggiori informazioni sulla raccolta delle informazioni di errore in FAQ.', - 'github_help' => 'Ottieni aiuto su GitHub', - 'github_instructions' => 'Sei più che benvenuto ad aprire una nuova issue su GitHub.', - 'use_search' => 'Usa la ricerca!', - 'include_info' => 'Includi le informazioni da questa pagina di debug.', - 'tell_more' => 'Dicci di più di "dice Oops!"', - 'include_logs' => 'Includi i log degli errori (vedi sopra).', - 'what_did_you_do' => 'Dicci cosa stavi facendo.', - 'offline_header' => 'Probabilmente sei offline', - 'offline_unreachable' => 'Firefly III non è raggiungibile. Il tuo dispositivo non è attualmente in rete o il server non funziona.', - 'offline_github' => 'Se sei sicuro che sia il tuo dispositivo che il server sono online, apri un ticket su GitHub.', - + 'collect_info' => 'Raccogli ulteriori informazioni nella cartella storage/log dove troverai i file di log. Se stai eseguendo Docker, usa docker logs -f [container].', + 'collect_info_more' => 'Puoi leggere di più sulla raccolta di informazioni di errore in FAQ.', + 'github_help' => 'Ottieni aiuto su GitHub', + 'github_instructions' => 'Sei più che benvenuto ad aprire una nuova issue su GitHub.', + 'use_search' => 'Usa la ricerca!', + 'include_info' => 'Includi le informazioni da questa pagina di debug.', + 'tell_more' => 'Dicci di più di "dice Oops!"', + 'include_logs' => 'Includi i log degli errori (vedi sopra).', + 'what_did_you_do' => 'Dicci cosa stavi facendo.', + 'offline_header' => 'Probabilmente sei offline', + 'offline_unreachable' => 'Firefly III non è raggiungibile. Il tuo dispositivo non è attualmente in rete o il server non funziona.', + 'offline_github' => 'Se sei sicuro che sia il tuo dispositivo che il server sono online, apri un ticket su GitHub.', ]; diff --git a/resources/lang/it_IT/firefly.php b/resources/lang/it_IT/firefly.php index 7f8a97c77c..ac75844866 100644 --- a/resources/lang/it_IT/firefly.php +++ b/resources/lang/it_IT/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Chiudi', - 'actions' => 'Azioni', - 'edit' => 'Modifica', - 'delete' => 'Elimina', - 'split' => 'Dividi', - 'single_split' => 'Divisione', - 'clone' => 'Clona', - 'confirm_action' => 'Conferma azione', - 'last_seven_days' => 'Ultimi sette giorni', - 'last_thirty_days' => 'Ultimi trenta giorni', - 'last_180_days' => 'Ultimi 180 giorni', - 'month_to_date' => 'Ultimo mese', - 'year_to_date' => 'Ultimo anno', - 'YTD' => 'Anno corrente', - 'welcome_back' => 'La tua situazione finanziaria', - 'everything' => 'Tutto', - 'today' => 'oggi', - 'customRange' => 'Intervallo personalizzato', - 'date_range' => 'Intervallo di date', - 'apply' => 'Applica', - 'select_date' => 'Seleziona data...', - 'cancel' => 'Annulla', - 'from' => 'Da', - 'to' => 'A', - 'structure' => 'Struttura', - 'help_translating' => 'Questo testo di aiuto non è ancora disponibile in italiano. Vuoi aiutare con la traduzione?', - 'showEverything' => 'Mostra tutto', - 'never' => 'Mai', - 'no_results_for_empty_search' => 'Chiave di ricerca vuota, quindi non è stato trovato nulla.', - 'removed_amount' => 'Rimosso :amount', - 'added_amount' => 'Aggiunto :amount', - 'asset_account_role_help' => 'Qualsiasi opzione aggiuntiva risultante dalla tua scelta può essere impostata in seguito.', - 'Opening balance' => 'Saldo di apertura', - 'create_new_stuff' => 'Crea nuove cose', - 'new_withdrawal' => 'Nuova uscita', - 'create_new_transaction' => 'Crea una nuova transazione', - 'sidebar_frontpage_create' => 'Crea', - 'new_transaction' => 'Nuova transazione', - 'no_rules_for_bill' => 'Questa bolletta non ha regole ad essa associate.', - 'go_to_asset_accounts' => 'Visualizza i tuoi conti attività', - 'go_to_budgets' => 'Vai ai tuoi budget', - 'go_to_withdrawals' => 'Vai ai tuoi prelievi', - 'clones_journal_x' => 'Questa transazione è un clone di ":description" (#:id)', - 'go_to_categories' => 'Vai alle tue categorie', - 'go_to_bills' => 'Vai alle tue bollette', - 'go_to_expense_accounts' => 'Vedi i tuoi conti spese', - 'go_to_revenue_accounts' => 'Vedi i tuoi conti entrate', - 'go_to_piggies' => 'Vai ai tuoi salvadanai', - 'new_deposit' => 'Nuova entrata', - 'new_transfer' => 'Nuovo trasferimento', - 'new_transfers' => 'Nuovo trasferimento', - 'new_asset_account' => 'Nuovo conto attività', - 'new_expense_account' => 'Nuovo conto spese', - 'new_revenue_account' => 'Nuovo conto entrate', - 'new_liabilities_account' => 'Nuova passività', - 'new_budget' => 'Nuovo budget', - 'new_bill' => 'Nuova bolletta', - 'block_account_logout' => 'Sei stato disconnesso. Gli account bloccati non possono utilizzare questo sito. Ti sei registrato con un indirizzo email valido?', - 'flash_success' => 'Successo!', - 'flash_info' => 'Messaggio', - 'flash_warning' => 'Avviso!', - 'flash_error' => 'Errore!', - 'flash_danger' => 'Attenzione!', - 'flash_info_multiple' => 'C\'è un messaggio | Ci sono :count messaggi', - 'flash_error_multiple' => 'C\'è un errore | Ci sono :count errors', - 'net_worth' => 'Patrimonio', - 'help_for_this_page' => 'Aiuto per questa pagina', - 'help_for_this_page_body' => 'Trovi maggiori informazioni su questa pagina nella documentazione.', - 'two_factor_welcome' => 'Ciao!', - 'two_factor_enter_code' => 'Per continuare inserisci il tuo codice di autenticazione a due fattori. La tua applicazione può generarlo per te.', - 'two_factor_code_here' => 'Inserisci qui il codice', - 'two_factor_title' => 'Autenticazione a due fattori', - 'authenticate' => 'Autenticati', - 'two_factor_forgot_title' => 'Autenticazione a due fattori persa', - 'two_factor_forgot' => 'Ho dimenticato la mia chiave a due fattori.', - 'two_factor_lost_header' => 'Hai perso l\'autenticazione a due fattori?', - 'two_factor_lost_intro' => 'Se hai perso anche i codici di recupero, sei sfortunato. Questo non è qualcosa che puoi risolvere tramite l\'interfaccia web. Hai due scelte.', - 'two_factor_lost_fix_self' => 'Se esegui la tua istanza di Firefly III, leggi questa voce nelle FAQ per le istruzioni.', - 'two_factor_lost_fix_owner' => 'In caso contrario, invia un mail al proprietario del sito, :site_owner, e chiedi loro di resettare l\'autenticazione a due fattori.', - 'mfa_backup_code' => 'Hai usato un codice di recupero per accedere a Firefly III. Questo codice non potrà essere utilizzato di nuovo, quindi cancellalo dalla lista.', - 'pref_two_factor_new_backup_codes' => 'Ottieni nuovi codici di recupero', - 'pref_two_factor_backup_code_count' => 'Hai :count codice di backup valido!Hai :count codici di backup validi.', - '2fa_i_have_them' => 'Li ho salvati!', - 'warning_much_data' => ':days di caricamento dei dati potrebbero richiedere un pò di tempo.', - 'registered' => 'Ti sei registrato con successo!', - 'Default asset account' => 'Conto attività predefinito', - 'no_budget_pointer' => 'Sembra che tu non abbia ancora dei budget. Dovresti crearne alcuni nella pagina dei budget. I budget possono aiutarti a tenere traccia delle spese.', - 'no_bill_pointer' => 'Sembra che tu non abbia ancora delle bollette. Dovresti crearne alcune nella pagina delle bollette. Le bollette possono aiutarti a tenere traccia delle spese.', - 'Savings account' => 'Conti risparmio', - 'Credit card' => 'Carta di credito', - 'source_accounts' => 'Conto origine|Conti origine', - 'destination_accounts' => 'Conto destinazione|Conti destinazione', - 'user_id_is' => 'Il tuo ID utente è :user', - 'field_supports_markdown' => 'Questo campo supporta Markdown.', - 'need_more_help' => 'Se hai bisogno di ulteriore aiuto con Firefly III, ti preghiamo di aprire un ticket su Github.', - 'reenable_intro_text' => 'Puoi anche riattivare la guida introduttiva.', - 'intro_boxes_after_refresh' => 'Le caselle di introduzione riappariranno quando si aggiorna la pagina.', - 'show_all_no_filter' => 'Mostra tutte le transazioni senza raggrupparle per data.', - 'expenses_by_category' => 'Spese per categorie', - 'expenses_by_budget' => 'Spese per budget', - 'income_by_category' => 'Entrate per categoria', - 'expenses_by_asset_account' => 'Spese per conto attività', - 'expenses_by_expense_account' => 'Spese per conto spese', - 'cannot_redirect_to_account' => 'Spiacente ma Firefly III non può reindirizzarti alla pagina corretta.', - 'sum_of_expenses' => 'Totale spese', - 'sum_of_income' => 'Somma delle entrate', - 'liabilities' => 'Passività', - 'spent_in_specific_budget' => 'Speso nel budget ":budget"', - 'spent_in_specific_double' => 'Spesi nel conto ":account"', - 'earned_in_specific_double' => 'Entrati nel conto ":account"', - 'source_account' => 'Conto di origine', - 'source_account_reconciliation' => 'Non puoi modificare il conto di origine di una transazione di riconciliazione.', - 'destination_account' => 'Conto destinazione', - 'destination_account_reconciliation' => 'Non è possibile modificare il conto di destinazione di una transazione di riconciliazione.', - 'sum_of_expenses_in_budget' => 'Spesa totale nel budget ":budget"', - 'left_in_budget_limit' => 'Disponibile per spese in base ai budget', - 'current_period' => 'Periodo corrente', - 'show_the_current_period_and_overview' => 'Mostra il periodo e la panoramica correnti', - 'pref_languages_locale' => 'Affinché una lingua diversa dall\'inglese funzioni correttamente, il sistema operativo deve essere dotato delle corrette informazioni locali. Se queste non sono presenti, i dati di valuta, le date e gli importi potrebbero essere formattati in modo errato.', - 'budget_in_period' => 'Tutte le transazioni per il budget ":name" fra :start e :end in :currency', - 'chart_budget_in_period' => 'Grafico di tutte le transazioni per il budget ":name" fra :start e :end in :currency', - 'chart_budget_in_period_only_currency' => 'L\'importo che hai inserito è in :currency, quindi questo grafico mostrerà solo le transazioni in :currency.', - 'chart_account_in_period' => 'Grafico di tutte le transazioni per il conto ":name" (:balance) fra :start e :end', - 'chart_category_in_period' => 'Grafico di tutte le transazioni per la categoria ":name" fra :start e :end', - 'chart_category_all' => 'Grafico di tutte le transazioni per la categoria ":name"', - 'clone_withdrawal' => 'Duplica questo prelievo', - 'clone_deposit' => 'Duplica questa entrata', - 'clone_transfer' => 'Duplica questo trasferimento', - 'multi_select_no_selection' => 'Nessuno selezionato', - 'multi_select_select_all' => 'Seleziona tutto', - 'multi_select_n_selected' => 'selezionato', - 'multi_select_all_selected' => 'Seleziona tutto', - 'multi_select_filter_placeholder' => 'Cerca...', - 'intro_next_label' => 'Avanti', - 'intro_prev_label' => 'Indietro', - 'intro_skip_label' => 'Salta ogni', - 'intro_done_label' => 'Fatto', - 'between_dates_breadcrumb' => 'Fra :start e :end', - 'all_journals_without_budget' => 'Tutte le transazioni senza un budget', - 'journals_without_budget' => 'Transazioni senza budget', - 'all_journals_without_category' => 'Tutte le transazioni senza una categoria', - 'journals_without_category' => 'Transazioni senza categoria', - 'all_journals_for_account' => 'Tutte le transazioni per il conto :name', - 'chart_all_journals_for_account' => 'Grafico di tutte le transazioni per il conto :name', - 'journals_in_period_for_account' => 'Tutte le transazioni per il conto :name fra :start e :end', - 'journals_in_period_for_account_js' => 'Tutte le transazioni per il conto {title} fra {start} e {end}', - 'transferred' => 'Trasferito', - 'all_withdrawal' => 'Tutte le spese', - 'all_transactions' => 'Tutte le Transazioni', - 'title_withdrawal_between' => 'Tutte le spese tra :start e :end', - 'all_deposit' => 'Tutte le entrate', - 'title_deposit_between' => 'Tutte le entrate fra :start e :end', - 'all_transfers' => 'Tutti i trasferimenti', - 'title_transfers_between' => 'Tutti i trasferimenti fra :start e :end', - 'all_transfer' => 'Tutti i trasferimenti', - 'all_journals_for_tag' => 'Tutte le transazioni per l\'etichetta ":tag"', - 'title_transfer_between' => 'Tutti i trasferimenti fra :start e :end', - 'all_journals_for_category' => 'Tutte le transazioni per la categoria :name', - 'all_journals_for_budget' => 'Tutte le transazione per budget :name', - 'chart_all_journals_for_budget' => 'Grafico di tutte le transazioni per il budget :name', - 'journals_in_period_for_category' => 'Tutte le transazioni per Categoria :name fra :start e :end', - 'journals_in_period_for_tag' => 'Tutte le transazioni per l\'etichetta :tag fra :start e :end', - 'not_available_demo_user' => 'La funzione a cui tenti di accedere non è disponibile per gli utenti demo.', - 'exchange_rate_instructions' => 'Il conto attività "@name" accetta solo transazioni in @native_currency. Se invece desideri utilizzare @foreign_currency, assicurati che anche l\'importo in @native_currency sia noto:', - 'transfer_exchange_rate_instructions' => 'Il conto attività di origine "@source_name" accetta solo transazioni in @source_currency. Il conto attività di destinazione "@dest_name" accetta solo transazioni in @dest_currency. È necessario fornire l\'importo trasferito correttamente in entrambe le valute.', - 'transaction_data' => 'Informazioni transazione', - 'invalid_server_configuration' => 'Configurazione del server non corretta', - 'invalid_locale_settings' => 'Firefly III non è in grado di formattare gli importi monetari perché al server mancano i pacchetti richiesti. Ci sono istruzioni su come eseguire questa operazione.', - 'quickswitch' => 'Interruttore veloce', - 'sign_in_to_start' => 'Accedi per iniziare la sessione', - 'sign_in' => 'Accedi', - 'register_new_account' => 'Registra nuovo conto', - 'forgot_my_password' => 'Ho dimenticato la mia password', - 'problems_with_input' => 'Ci sono stati alcuni problemi con il tuo inserimento.', - 'reset_password' => 'reimposta la tua password', - 'button_reset_password' => 'Resetta password', - 'reset_button' => 'Resetta', - 'want_to_login' => 'Voglio accedere', - 'login_page_title' => 'Accedi a Firefly III', - 'register_page_title' => 'Registrati a Firefly III', - 'forgot_pw_page_title' => 'Hai dimenticato la password per Firefly III', - 'reset_pw_page_title' => 'Reimposta la password per Firefly III', - 'cannot_reset_demo_user' => 'Non puoi reimpostare la password dell\'utente demo.', - 'no_att_demo_user' => 'L\'utente demo non può caricare allegati.', - 'button_register' => 'Registrare', - 'authorization' => 'Autorizzazione', - 'active_bills_only' => 'solo bollette attive', - 'active_bills_only_total' => 'tutte le bollette attive', - 'active_exp_bills_only' => 'solo bollette attive e previste', - 'active_exp_bills_only_total' => 'solo bollette attive previste', - 'per_period_sum_1D' => 'Costi giornalieri previsti', - 'per_period_sum_1W' => 'Costi settimanali previsti', - 'per_period_sum_1M' => 'Costi mensili previsti', - 'per_period_sum_3M' => 'Costi trimestrali previsti', - 'per_period_sum_6M' => 'Costi semestrali previsti', - 'per_period_sum_1Y' => 'Costi annui previsti', - 'average_per_bill' => 'media per bolletta', - 'expected_total' => 'totale previsto', - 'reconciliation_account_name' => ':name riconciliazione (:currency)', - 'saved' => 'Salvata', - 'advanced_options' => 'Opzioni avanzate', - 'advanced_options_explain' => 'Alcune pagine in Firefly III hanno opzioni avanzate nascoste dietro questo pulsante. Questa pagina non ha nulla di interessante, ma controlla le altre!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Chiudi', + 'actions' => 'Azioni', + 'edit' => 'Modifica', + 'delete' => 'Elimina', + 'split' => 'Dividi', + 'single_split' => 'Divisione', + 'clone' => 'Clona', + 'clone_and_edit' => 'Clona e modifica', + 'confirm_action' => 'Conferma azione', + 'last_seven_days' => 'Ultimi sette giorni', + 'last_thirty_days' => 'Ultimi trenta giorni', + 'last_180_days' => 'Ultimi 180 giorni', + 'month_to_date' => 'Ultimo mese', + 'year_to_date' => 'Ultimo anno', + 'YTD' => 'Anno corrente', + 'welcome_back' => 'La tua situazione finanziaria', + 'everything' => 'Tutto', + 'today' => 'oggi', + 'customRange' => 'Intervallo personalizzato', + 'date_range' => 'Intervallo di date', + 'apply' => 'Applica', + 'select_date' => 'Seleziona data...', + 'cancel' => 'Annulla', + 'from' => 'Da', + 'to' => 'A', + 'structure' => 'Struttura', + 'help_translating' => 'Questo testo di aiuto non è ancora disponibile in italiano. Vuoi aiutare con la traduzione?', + 'showEverything' => 'Mostra tutto', + 'never' => 'Mai', + 'no_results_for_empty_search' => 'Chiave di ricerca vuota, quindi non è stato trovato nulla.', + 'removed_amount' => 'Rimosso :amount', + 'added_amount' => 'Aggiunto :amount', + 'asset_account_role_help' => 'Qualsiasi opzione aggiuntiva risultante dalla tua scelta può essere impostata in seguito.', + 'Opening balance' => 'Saldo di apertura', + 'create_new_stuff' => 'Crea nuove cose', + 'new_withdrawal' => 'Nuova uscita', + 'create_new_transaction' => 'Crea una nuova transazione', + 'sidebar_frontpage_create' => 'Crea', + 'new_transaction' => 'Nuova transazione', + 'no_rules_for_bill' => 'Questa bolletta non ha regole ad essa associate.', + 'go_to_asset_accounts' => 'Visualizza i tuoi conti attività', + 'go_to_budgets' => 'Vai ai tuoi budget', + 'go_to_withdrawals' => 'Vai ai tuoi prelievi', + 'clones_journal_x' => 'Questa transazione è un clone di ":description" (#:id)', + 'go_to_categories' => 'Vai alle tue categorie', + 'go_to_bills' => 'Vai alle tue bollette', + 'go_to_expense_accounts' => 'Vedi i tuoi conti spese', + 'go_to_revenue_accounts' => 'Vedi i tuoi conti entrate', + 'go_to_piggies' => 'Vai ai tuoi salvadanai', + 'new_deposit' => 'Nuova entrata', + 'new_transfer' => 'Nuovo trasferimento', + 'new_transfers' => 'Nuovo trasferimento', + 'new_asset_account' => 'Nuovo conto attività', + 'new_expense_account' => 'Nuovo conto spese', + 'new_revenue_account' => 'Nuovo conto entrate', + 'new_liabilities_account' => 'Nuova passività', + 'new_budget' => 'Nuovo budget', + 'new_bill' => 'Nuova bolletta', + 'block_account_logout' => 'Sei stato disconnesso. Gli account bloccati non possono utilizzare questo sito. Ti sei registrato con un indirizzo email valido?', + 'flash_success' => 'Successo!', + 'flash_info' => 'Messaggio', + 'flash_warning' => 'Avviso!', + 'flash_error' => 'Errore!', + 'flash_danger' => 'Attenzione!', + 'flash_info_multiple' => 'C\'è un messaggio | Ci sono :count messaggi', + 'flash_error_multiple' => 'C\'è un errore | Ci sono :count errors', + 'net_worth' => 'Patrimonio', + 'help_for_this_page' => 'Aiuto per questa pagina', + 'help_for_this_page_body' => 'Trovi maggiori informazioni su questa pagina nella documentazione.', + 'two_factor_welcome' => 'Ciao!', + 'two_factor_enter_code' => 'Per continuare inserisci il tuo codice di autenticazione a due fattori. La tua applicazione può generarlo per te.', + 'two_factor_code_here' => 'Inserisci qui il codice', + 'two_factor_title' => 'Autenticazione a due fattori', + 'authenticate' => 'Autenticati', + 'two_factor_forgot_title' => 'Autenticazione a due fattori persa', + 'two_factor_forgot' => 'Ho dimenticato la mia chiave a due fattori.', + 'two_factor_lost_header' => 'Hai perso l\'autenticazione a due fattori?', + 'two_factor_lost_intro' => 'Se hai perso anche i codici di recupero, sei sfortunato. Questo non è qualcosa che puoi risolvere tramite l\'interfaccia web. Hai due scelte.', + 'two_factor_lost_fix_self' => 'Se esegui la tua istanza di Firefly III, leggi :site_owner, e chiedi loro di resettare l\'autenticazione a due fattori.', + 'mfa_backup_code' => 'Hai usato un codice di recupero per accedere a Firefly III. Questo codice non potrà essere utilizzato di nuovo, quindi cancellalo dalla lista.', + 'pref_two_factor_new_backup_codes' => 'Ottieni nuovi codici di recupero', + 'pref_two_factor_backup_code_count' => 'Hai :count codice di backup valido!Hai :count codici di backup validi.', + '2fa_i_have_them' => 'Li ho salvati!', + 'warning_much_data' => ':days di caricamento dei dati potrebbero richiedere un pò di tempo.', + 'registered' => 'Ti sei registrato con successo!', + 'Default asset account' => 'Conto attività predefinito', + 'no_budget_pointer' => 'Sembra che tu non abbia ancora dei budget. Dovresti crearne alcuni nella pagina dei budget. I budget possono aiutarti a tenere traccia delle spese.', + 'no_bill_pointer' => 'Sembra che tu non abbia ancora delle bollette. Dovresti crearne alcune nella pagina delle bollette. Le bollette possono aiutarti a tenere traccia delle spese.', + 'Savings account' => 'Conti risparmio', + 'Credit card' => 'Carta di credito', + 'source_accounts' => 'Conto origine|Conti origine', + 'destination_accounts' => 'Conto destinazione|Conti destinazione', + 'user_id_is' => 'Il tuo ID utente è :user', + 'field_supports_markdown' => 'Questo campo supporta Markdown.', + 'need_more_help' => 'Se hai bisogno di ulteriore aiuto con Firefly III, ti preghiamo di aprire un ticket su Github.', + 'reenable_intro_text' => 'Puoi anche riattivare la guida introduttiva.', + 'intro_boxes_after_refresh' => 'Le caselle di introduzione riappariranno quando si aggiorna la pagina.', + 'show_all_no_filter' => 'Mostra tutte le transazioni senza raggrupparle per data.', + 'expenses_by_category' => 'Spese per categorie', + 'expenses_by_budget' => 'Spese per budget', + 'income_by_category' => 'Entrate per categoria', + 'expenses_by_asset_account' => 'Spese per conto attività', + 'expenses_by_expense_account' => 'Spese per conto spese', + 'cannot_redirect_to_account' => 'Spiacente ma Firefly III non può reindirizzarti alla pagina corretta.', + 'sum_of_expenses' => 'Totale spese', + 'sum_of_income' => 'Somma delle entrate', + 'liabilities' => 'Passività', + 'spent_in_specific_budget' => 'Speso nel budget ":budget"', + 'spent_in_specific_double' => 'Spesi nel conto ":account"', + 'earned_in_specific_double' => 'Entrati nel conto ":account"', + 'source_account' => 'Conto di origine', + 'source_account_reconciliation' => 'Non puoi modificare il conto di origine di una transazione di riconciliazione.', + 'destination_account' => 'Conto destinazione', + 'destination_account_reconciliation' => 'Non è possibile modificare il conto di destinazione di una transazione di riconciliazione.', + 'sum_of_expenses_in_budget' => 'Spesa totale nel budget ":budget"', + 'left_in_budget_limit' => 'Disponibile per spese in base ai budget', + 'current_period' => 'Periodo corrente', + 'show_the_current_period_and_overview' => 'Mostra il periodo e la panoramica correnti', + 'pref_languages_locale' => 'Affinché una lingua diversa dall\'inglese funzioni correttamente, il sistema operativo deve essere dotato delle corrette informazioni locali. Se queste non sono presenti, i dati di valuta, le date e gli importi potrebbero essere formattati in modo errato.', + 'budget_in_period' => 'Tutte le transazioni per il budget ":name" fra :start e :end in :currency', + 'chart_budget_in_period' => 'Grafico di tutte le transazioni per il budget ":name" fra :start e :end in :currency', + 'chart_budget_in_period_only_currency' => 'L\'importo che hai inserito è in :currency, quindi questo grafico mostrerà solo le transazioni in :currency.', + 'chart_account_in_period' => 'Grafico di tutte le transazioni per il conto ":name" (:balance) fra :start e :end', + 'chart_category_in_period' => 'Grafico di tutte le transazioni per la categoria ":name" fra :start e :end', + 'chart_category_all' => 'Grafico di tutte le transazioni per la categoria ":name"', + 'clone_withdrawal' => 'Duplica questo prelievo', + 'clone_deposit' => 'Duplica questa entrata', + 'clone_transfer' => 'Duplica questo trasferimento', + 'multi_select_no_selection' => 'Nessuno selezionato', + 'multi_select_select_all' => 'Seleziona tutto', + 'multi_select_n_selected' => 'selezionato', + 'multi_select_all_selected' => 'Seleziona tutto', + 'multi_select_filter_placeholder' => 'Cerca...', + 'intro_next_label' => 'Avanti', + 'intro_prev_label' => 'Indietro', + 'intro_skip_label' => 'Salta ogni', + 'intro_done_label' => 'Fatto', + 'between_dates_breadcrumb' => 'Fra :start e :end', + 'all_journals_without_budget' => 'Tutte le transazioni senza un budget', + 'journals_without_budget' => 'Transazioni senza budget', + 'all_journals_without_category' => 'Tutte le transazioni senza una categoria', + 'journals_without_category' => 'Transazioni senza categoria', + 'all_journals_for_account' => 'Tutte le transazioni per il conto :name', + 'chart_all_journals_for_account' => 'Grafico di tutte le transazioni per il conto :name', + 'journals_in_period_for_account' => 'Tutte le transazioni per il conto :name fra :start e :end', + 'journals_in_period_for_account_js' => 'Tutte le transazioni per il conto {title} fra {start} e {end}', + 'transferred' => 'Trasferito', + 'all_withdrawal' => 'Tutte le spese', + 'all_transactions' => 'Tutte le Transazioni', + 'title_withdrawal_between' => 'Tutte le spese tra :start e :end', + 'all_deposit' => 'Tutte le entrate', + 'title_deposit_between' => 'Tutte le entrate fra :start e :end', + 'all_transfers' => 'Tutti i trasferimenti', + 'title_transfers_between' => 'Tutti i trasferimenti fra :start e :end', + 'all_transfer' => 'Tutti i trasferimenti', + 'all_journals_for_tag' => 'Tutte le transazioni per l\'etichetta ":tag"', + 'title_transfer_between' => 'Tutti i trasferimenti fra :start e :end', + 'all_journals_for_category' => 'Tutte le transazioni per la categoria :name', + 'all_journals_for_budget' => 'Tutte le transazione per budget :name', + 'chart_all_journals_for_budget' => 'Grafico di tutte le transazioni per il budget :name', + 'journals_in_period_for_category' => 'Tutte le transazioni per Categoria :name fra :start e :end', + 'journals_in_period_for_tag' => 'Tutte le transazioni per l\'etichetta :tag fra :start e :end', + 'not_available_demo_user' => 'La funzione a cui tenti di accedere non è disponibile per gli utenti demo.', + 'exchange_rate_instructions' => 'Il conto attività "@name" accetta solo transazioni in @native_currency. Se invece desideri utilizzare @foreign_currency, assicurati che anche l\'importo in @native_currency sia noto:', + 'transfer_exchange_rate_instructions' => 'Il conto attività di origine "@source_name" accetta solo transazioni in @source_currency. Il conto attività di destinazione "@dest_name" accetta solo transazioni in @dest_currency. È necessario fornire l\'importo trasferito correttamente in entrambe le valute.', + 'transaction_data' => 'Informazioni transazione', + 'invalid_server_configuration' => 'Configurazione del server non corretta', + 'invalid_locale_settings' => 'Firefly III non è in grado di formattare gli importi monetari, poiché il tuo server è privo dei pacchetti necessari. Esistono delle istruzioni su come farlo.', + 'quickswitch' => 'Interruttore veloce', + 'sign_in_to_start' => 'Accedi per iniziare la sessione', + 'sign_in' => 'Accedi', + 'register_new_account' => 'Registra nuovo conto', + 'forgot_my_password' => 'Ho dimenticato la mia password', + 'problems_with_input' => 'Ci sono stati alcuni problemi con il tuo inserimento.', + 'reset_password' => 'reimposta la tua password', + 'button_reset_password' => 'Resetta password', + 'reset_button' => 'Resetta', + 'want_to_login' => 'Voglio accedere', + 'login_page_title' => 'Accedi a Firefly III', + 'register_page_title' => 'Registrati a Firefly III', + 'forgot_pw_page_title' => 'Hai dimenticato la password per Firefly III', + 'reset_pw_page_title' => 'Reimposta la password per Firefly III', + 'cannot_reset_demo_user' => 'Non puoi reimpostare la password dell\'utente demo.', + 'no_att_demo_user' => 'L\'utente demo non può caricare allegati.', + 'button_register' => 'Registrare', + 'authorization' => 'Autorizzazione', + 'active_bills_only' => 'solo bollette attive', + 'active_bills_only_total' => 'tutte le bollette attive', + 'active_exp_bills_only' => 'solo bollette attive e previste', + 'active_exp_bills_only_total' => 'solo bollette attive previste', + 'per_period_sum_1D' => 'Costi giornalieri previsti', + 'per_period_sum_1W' => 'Costi settimanali previsti', + 'per_period_sum_1M' => 'Costi mensili previsti', + 'per_period_sum_3M' => 'Costi trimestrali previsti', + 'per_period_sum_6M' => 'Costi semestrali previsti', + 'per_period_sum_1Y' => 'Costi annui previsti', + 'average_per_bill' => 'media per bolletta', + 'expected_total' => 'totale previsto', + 'reconciliation_account_name' => ':name riconciliazione (:currency)', + 'saved' => 'Salvata', + 'advanced_options' => 'Opzioni avanzate', + 'advanced_options_explain' => 'Alcune pagine in Firefly III hanno opzioni avanzate nascoste dietro questo pulsante. Questa pagina non ha nulla di interessante, ma controlla le altre!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhook', - 'webhooks_breadcrumb' => 'Webhook', - 'no_webhook_messages' => 'Non ci sono messaggi webhook', - 'webhook_trigger_STORE_TRANSACTION' => 'Dopo aver creato la transazione', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Dopo aver aggiornato la transazione', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Dopo aver eliminato la transazione', - 'webhook_response_TRANSACTIONS' => 'Dettagli transazione', - 'webhook_response_ACCOUNTS' => 'Dettagli conto', - 'webhook_response_none_NONE' => 'Nessun dettaglio', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Ispeziona', - 'create_new_webhook' => 'Crea nuovo webhook', - 'webhooks_create_breadcrumb' => 'Crea nuovo webhook', - 'webhook_trigger_form_help' => 'Indica quale evento attiverà il webhook', - 'webhook_response_form_help' => 'Indica cosa il webhook deve inviare all\'URL.', - 'webhook_delivery_form_help' => 'In quale formato il webhook deve fornire i dati.', - 'webhook_active_form_help' => 'Il webhook deve essere attivo o non verrà chiamato.', - 'stored_new_webhook' => 'Nuovo webhook ":title" salvato', - 'delete_webhook' => 'Elimina Webhook', - 'deleted_webhook' => 'Webhook ":title" eliminato', - 'edit_webhook' => 'Modifica webhook ":title"', - 'updated_webhook' => 'Webhook ":title" aggiornato', - 'edit_webhook_js' => 'Modifica webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'Il webhook è stato attivato sulla transazione indicata. Si prega di attendere che i risultati appaiano.', - 'webhook_messages' => 'Messaggio Webhook', - 'view_message' => 'Visualizza messaggio', - 'view_attempts' => 'Visualizza tentativi falliti', - 'message_content_title' => 'Contenuto del messaggio Webhook', - 'message_content_help' => 'Questo è il contenuto del messaggio che è stato inviato (o ha tentato) utilizzando questo webhook.', - 'attempt_content_title' => 'Tentativi del Webhook', - 'attempt_content_help' => 'Questi sono tutti i tentativi falliti di questo messaggio webhook da inviare all\'URL configurato. Dopo qualche tempo, Firefly III smetterà di provare.', - 'no_attempts' => 'Non ci sono tentativi falliti. È una buona cosa!', - 'webhook_attempt_at' => 'Tentativo a {moment}', - 'logs' => 'Log', - 'response' => 'Risposta', - 'visit_webhook_url' => 'Visita URL webhook', - 'reset_webhook_secret' => 'Reimposta il segreto del webhook', - 'webhook_stored_link' => 'Il webhook #{ID} ("{title}") è stato archiviato.', - 'webhook_updated_link' => 'Il webhook #{ID} ("{title}") è stato aggiornato.', + 'webhooks' => 'Webhook', + 'webhooks_breadcrumb' => 'Webhook', + 'webhooks_menu_disabled' => 'disabilitato', + 'no_webhook_messages' => 'Non ci sono messaggi webhook', + 'webhook_trigger_STORE_TRANSACTION' => 'Dopo aver creato la transazione', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Dopo aver aggiornato la transazione', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Dopo aver eliminato la transazione', + 'webhook_response_TRANSACTIONS' => 'Dettagli transazione', + 'webhook_response_ACCOUNTS' => 'Dettagli conto', + 'webhook_response_none_NONE' => 'Nessun dettaglio', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Ispeziona', + 'create_new_webhook' => 'Crea nuovo webhook', + 'webhooks_create_breadcrumb' => 'Crea nuovo webhook', + 'webhook_trigger_form_help' => 'Indica quale evento attiverà il webhook', + 'webhook_response_form_help' => 'Indica cosa il webhook deve inviare all\'URL.', + 'webhook_delivery_form_help' => 'In quale formato il webhook deve fornire i dati.', + 'webhook_active_form_help' => 'Il webhook deve essere attivo o non verrà chiamato.', + 'stored_new_webhook' => 'Nuovo webhook ":title" salvato', + 'delete_webhook' => 'Elimina Webhook', + 'deleted_webhook' => 'Webhook ":title" eliminato', + 'edit_webhook' => 'Modifica webhook ":title"', + 'updated_webhook' => 'Webhook ":title" aggiornato', + 'edit_webhook_js' => 'Modifica webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'Il webhook è stato attivato sulla transazione indicata. Si prega di attendere che i risultati appaiano.', + 'webhook_messages' => 'Messaggio Webhook', + 'view_message' => 'Visualizza messaggio', + 'view_attempts' => 'Visualizza tentativi falliti', + 'message_content_title' => 'Contenuto del messaggio Webhook', + 'message_content_help' => 'Questo è il contenuto del messaggio che è stato inviato (o ha tentato) utilizzando questo webhook.', + 'attempt_content_title' => 'Tentativi del Webhook', + 'attempt_content_help' => 'Questi sono tutti i tentativi falliti di questo messaggio webhook da inviare all\'URL configurato. Dopo qualche tempo, Firefly III smetterà di provare.', + 'no_attempts' => 'Non ci sono tentativi falliti. È una buona cosa!', + 'webhook_attempt_at' => 'Tentativo a {moment}', + 'logs' => 'Log', + 'response' => 'Risposta', + 'visit_webhook_url' => 'Visita URL webhook', + 'reset_webhook_secret' => 'Reimposta il segreto del webhook', + 'webhook_stored_link' => 'Il webhook #{ID} ("{title}") è stato archiviato.', + 'webhook_updated_link' => 'Il webhook #{ID} ("{title}") è stato aggiornato.', // API access - 'authorization_request' => 'Firefly III v:version Richiesta Autorizzazione', - 'authorization_request_intro' => ':client sta richiedendo l\'autorizzazione per accedere alla tua amministrazione finanziaria. Desideri autorizzare :client ad accedere a questi record?', - 'authorization_request_site' => 'Sarai reindirizzato a :url che sarà quindi in grado di accedere ai tuoi dati di Firefly III.', - 'authorization_request_invalid' => 'Questa richiesta di accesso non è valida. Non seguire più questo link.', - 'scopes_will_be_able' => 'Questa applicazione sarà in grado di:', - 'button_authorize' => 'Autorizza', - 'none_in_select_list' => '(nessuna)', - 'no_piggy_bank' => '(nessun salvadanaio)', - 'name_in_currency' => ':name in :currency', - 'paid_in_currency' => 'Pagata in :currency', - 'unpaid_in_currency' => 'Non pagata in :currency', - 'is_alpha_warning' => 'Stai eseguendo una versione ALHPA. Fai attenzione a bug e problemi.', - 'is_beta_warning' => 'Stai eseguendo una versione BETA. Fai attenzione a bug e problemi.', - 'all_destination_accounts' => 'Conti di destinazione', - 'all_source_accounts' => 'Conti di origine', - 'back_to_index' => 'Torna all\'indice', - 'cant_logout_guard' => 'Firefly III non può disconnetterti.', - 'internal_reference' => 'Riferimento interno', + 'authorization_request' => 'Firefly III v:version Richiesta Autorizzazione', + 'authorization_request_intro' => ':client sta richiedendo l\'autorizzazione per accedere alla tua amministrazione finanziaria. Desideri autorizzare :client ad accedere a questi record?', + 'authorization_request_site' => 'Sarai reindirizzato a :url che sarà quindi in grado di accedere ai tuoi dati di Firefly III.', + 'authorization_request_invalid' => 'Questa richiesta di accesso non è valida. Non seguire più questo link.', + 'scopes_will_be_able' => 'Questa applicazione sarà in grado di:', + 'button_authorize' => 'Autorizza', + 'none_in_select_list' => '(nessuna)', + 'no_piggy_bank' => '(nessun salvadanaio)', + 'name_in_currency' => ':name in :currency', + 'paid_in_currency' => 'Pagata in :currency', + 'unpaid_in_currency' => 'Non pagata in :currency', + 'is_alpha_warning' => 'Stai eseguendo una versione ALHPA. Fai attenzione a bug e problemi.', + 'is_beta_warning' => 'Stai eseguendo una versione BETA. Fai attenzione a bug e problemi.', + 'all_destination_accounts' => 'Conti di destinazione', + 'all_source_accounts' => 'Conti di origine', + 'back_to_index' => 'Torna all\'indice', + 'cant_logout_guard' => 'Firefly III non può disconnetterti.', + 'internal_reference' => 'Riferimento interno', // check for updates: - 'update_check_title' => 'Controlla aggiornamenti', - 'admin_update_check_title' => 'Controlla automaticamente aggiornamento', - 'admin_update_check_explain' => 'Firefly III può verificare automaticamente gli aggiornamenti. Quando attivi questa impostazione, contatterà il server di aggiornamento per verificare se è disponibile una nuova versione di Firefly III. Quando questo è il caso, riceverai una notifica. Puoi testare questa notifica utilizzando il pulsante a destra. Indicare di seguito se si desidera che Firefly III controlli gli aggiornamenti.', - 'check_for_updates_permission' => 'Firefly III può controllare gli aggiornamenti, ma è necessario il tuo permesso per farlo. Vai nell\'amministrazione per indicare se desideri che questa funzione sia abilitata.', - 'updates_ask_me_later' => 'Chiedimelo più tardi', - 'updates_do_not_check' => 'Non controllare gli aggiornamenti', - 'updates_enable_check' => 'Abilita il controllo degli aggiornamenti', - 'admin_update_check_now_title' => 'Controlla gli aggiornamenti ora', - 'admin_update_check_now_explain' => 'Se si preme il pulsante, Firefly III controllerà se la versione corrente è la più recente.', - 'check_for_updates_button' => 'Controlla ora!', - 'update_new_version_alert' => 'È disponibile una nuova versione di Firefly III. Stai utilizzando :your_version, l\'ultima versione è :new_version che è stata rilasciata il :date.', - 'update_version_beta' => 'Questa versione è una versione BETA. Puoi avere problemi.', - 'update_version_alpha' => 'Questa versione è una versione ALPHA. Puoi avere problemi.', - 'update_current_version_alert' => 'Stai utilizzando :version, che è l\'ultima versione disponibile.', - 'update_newer_version_alert' => 'Stai utilizzando :your_version, che è più recente dell\'ultima versione, :new_version.', - 'update_check_error' => 'Si è verificato un errore durante il controllo degli aggiornamenti: :error', - 'unknown_error' => 'Errore sconosciuto. Siamo spiacenti.', - 'just_new_release' => 'Una nuova versione è disponibile! La versione :version è stata rilasciata :date. Questa versione è molto recente. Attendi qualche giorno affinché la nuova versione venga considerata stabile.', - 'disabled_but_check' => 'Hai disabilitato il controllo degli aggiornamenti. Quindi non dimenticarti di controllare gli aggiornamenti di tanto in tanto. Grazie!', - 'admin_update_channel_title' => 'Canale di aggiornamento', - 'admin_update_channel_explain' => 'Firefly III dispone di tre "canali" di aggiornamento che indicano quanto avanti ti trovi in termini di funzionalità, miglioramenti e bug. Usa il canale "beta" se sei avventuroso e quello "alpha" se vuoi vivere pericolosamente.', - 'update_channel_stable' => 'Stabile. Tutto dovrebbe funzionare come previsto.', - 'update_channel_beta' => 'Beta. Nuove funzionalità ma qualcosa potrebbe rompersi.', - 'update_channel_alpha' => 'Alpha. Inseriamo qualsiasi cosa e vediamo cosa funziona.', + 'update_check_title' => 'Controlla aggiornamenti', + 'admin_update_check_title' => 'Controlla automaticamente aggiornamento', + 'admin_update_check_explain' => 'Firefly III può verificare automaticamente gli aggiornamenti. Quando attivi questa impostazione, contatterà il server di aggiornamento per verificare se è disponibile una nuova versione di Firefly III. Quando questo è il caso, riceverai una notifica. Puoi testare questa notifica utilizzando il pulsante a destra. Indicare di seguito se si desidera che Firefly III controlli gli aggiornamenti.', + 'check_for_updates_permission' => 'Firefly III può controllare gli aggiornamenti, ma è necessario il tuo permesso per farlo. Vai nell\'amministrazione per indicare se desideri che questa funzione sia abilitata.', + 'updates_ask_me_later' => 'Chiedimelo più tardi', + 'updates_do_not_check' => 'Non controllare gli aggiornamenti', + 'updates_enable_check' => 'Abilita il controllo degli aggiornamenti', + 'admin_update_check_now_title' => 'Controlla gli aggiornamenti ora', + 'admin_update_check_now_explain' => 'Se si preme il pulsante, Firefly III controllerà se la versione corrente è la più recente.', + 'check_for_updates_button' => 'Controlla ora!', + 'update_new_version_alert' => 'È disponibile una nuova versione di Firefly III. Stai utilizzando :your_version, l\'ultima versione è :new_version che è stata rilasciata il :date.', + 'update_version_beta' => 'Questa versione è una versione BETA. Puoi avere problemi.', + 'update_version_alpha' => 'Questa versione è una versione ALPHA. Puoi avere problemi.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Stai utilizzando :version, che è l\'ultima versione disponibile.', + 'update_newer_version_alert' => 'Stai utilizzando :your_version, che è più recente dell\'ultima versione, :new_version.', + 'update_check_error' => 'Si è verificato un errore durante il controllo degli aggiornamenti: :error', + 'unknown_error' => 'Errore sconosciuto. Siamo spiacenti.', + 'disabled_but_check' => 'Hai disabilitato il controllo degli aggiornamenti. Quindi non dimenticarti di controllare gli aggiornamenti di tanto in tanto. Grazie!', + 'admin_update_channel_title' => 'Canale di aggiornamento', + 'admin_update_channel_explain' => 'Firefly III dispone di tre "canali" di aggiornamento che indicano quanto avanti ti trovi in termini di funzionalità, miglioramenti e bug. Usa il canale "beta" se sei avventuroso e quello "alpha" se vuoi vivere pericolosamente.', + 'update_channel_stable' => 'Stabile. Tutto dovrebbe funzionare come previsto.', + 'update_channel_beta' => 'Beta. Nuove funzionalità ma qualcosa potrebbe rompersi.', + 'update_channel_alpha' => 'Alpha. Inseriamo qualsiasi cosa e vediamo cosa funziona.', // search - 'search' => 'Cerca', - 'search_query' => 'Domanda', - 'search_found_transactions' => 'Firefly III ha trovato :count transazione in :time secondi.|Firefly III ha trovato :count transazioni in :time secondi.', - 'search_found_more_transactions' => 'Firefly III ha trovato più di :count transazioni in :time secondi.', - 'search_for_query' => 'Firefly III sta cercando le transazioni contenenti tutte queste parole: :query', - 'invalid_operators_list' => 'Questi parametri di ricerca non sono validi e sono stati ignorati.', + 'search' => 'Cerca', + 'search_query' => 'Domanda', + 'search_found_transactions' => 'Firefly III ha trovato :count transazione in :time secondi.|Firefly III ha trovato :count transazioni in :time secondi.', + 'search_found_more_transactions' => 'Firefly III ha trovato più di :count transazioni in :time secondi.', + 'search_for_query' => 'Firefly III sta cercando le transazioni contenenti tutte queste parole: :query', + 'invalid_operators_list' => 'Questi parametri di ricerca non sono validi e sono stati ignorati.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'La data della transazione è ":value"', 'search_modifier_not_date_on' => 'La data della transazione non è ":value"', 'search_modifier_reconciled' => 'La transazione è riconciliata', @@ -396,8 +397,8 @@ return [ 'search_modifier_has_any_bill' => 'La transazione deve avere una (qualsiasi) bolletta', 'search_modifier_not_has_any_bill' => 'La transazione non deve avere alcuna bolletta', 'search_modifier_has_no_tag' => 'La transazione non deve avere etichette', - 'search_modifier_not_has_any_tag' => 'La transazione non deve avere tag', - 'search_modifier_not_has_no_tag' => 'La transazione deve avere un (qualsiasi) tag', + 'search_modifier_not_has_any_tag' => 'La transazione non deve avere etichette', + 'search_modifier_not_has_no_tag' => 'La transazione deve avere una (qualsiasi) etichetta', 'search_modifier_has_any_tag' => 'La transazione deve avere una (qualsiasi) etichetta', 'search_modifier_notes_contains' => 'Le note della transazione contengono ":value"', 'search_modifier_not_notes_contains' => 'Le note della transazione non contengono ":value"', @@ -468,7 +469,11 @@ return [ 'search_modifier_transaction_type' => 'Il tipo di transazione è ":value"', 'search_modifier_not_transaction_type' => 'Il tipo della transizione non è ":value"', 'search_modifier_tag_is' => 'L\'etichetta è ":value"', - 'search_modifier_not_tag_is' => 'Nessun tag è ":value"', + 'search_modifier_tag_contains' => 'La bolletta contiene ":value"', + 'search_modifier_not_tag_contains' => 'Il tag non contiene ":value"', + 'search_modifier_tag_ends' => 'Il tag termina per ":value"', + 'search_modifier_tag_starts' => 'Il tag inizia per ":value"', + 'search_modifier_not_tag_is' => 'Nessuna etichetta è ":value"', 'search_modifier_date_on_year' => 'La transazione è dell\'anno ":value"', 'search_modifier_not_date_on_year' => 'La transazione non è dell\'anno ":value"', 'search_modifier_date_on_month' => 'La transazione è del mese di ":value"', @@ -482,10 +487,9 @@ return [ '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"', - // new - 'search_modifier_tag_is_not' => 'Nessun tag è ":value"', - 'search_modifier_not_tag_is_not' => 'Il tag è ":value"', + 'search_modifier_tag_is_not' => 'Nessun etichetta è ":value"', + 'search_modifier_not_tag_is_not' => 'L\'etichetta è ":value"', 'search_modifier_account_is' => 'Entrambi i profili sono ":value"', 'search_modifier_not_account_is' => 'Nessuno conto è ":value"', 'search_modifier_account_contains' => 'Entrambi i profili contengono ":value"', @@ -629,88 +633,88 @@ return [ 'search_modifier_not_invoice_date_on_day' => 'La data di fatturazione della transazione non è nel giorno del mese ":value"', 'search_modifier_invoice_date_before_year' => 'La data di fatturazione della transazione è precedente o nell\'anno ":value"', 'search_modifier_invoice_date_before_month' => 'La data di fatturazione della transazione è precedente o nel mese ":value"', - 'search_modifier_invoice_date_before_day' => 'La data di pagamento della transazione è precedente o il giorno ":value" del mese', - 'search_modifier_invoice_date_after_year' => 'La data di pagamento della transazione è nell\'anno ":value" o successivi', - 'search_modifier_invoice_date_after_month' => 'La data di pagamento della transazione nel mese di ":value" o successivi', - 'search_modifier_invoice_date_after_day' => 'Transaction invoice date is after or on day of month ":value"', + 'search_modifier_invoice_date_before_day' => 'La data di fatturazione della transazione è precedente o il giorno ":value" del mese', + 'search_modifier_invoice_date_after_year' => 'La data di fatturazione della transazione è nell\'anno ":value" o successivi', + 'search_modifier_invoice_date_after_month' => 'La data di fatturazione della transazione nel mese di ":value" o successivi', + 'search_modifier_invoice_date_after_day' => 'La data di fatturazione della transazione è successiva o uguale al giorno ":value" del mese', // other dates 'search_modifier_updated_at_on_year' => 'La transazione è stata aggiornata l\'ultima volta nell\'anno ":value"', 'search_modifier_updated_at_on_month' => 'La transazione è stata aggiornata l\'ultima volta nel mese ":value"', - 'search_modifier_updated_at_on_day' => 'Transaction was last updated on day of month ":value"', + 'search_modifier_updated_at_on_day' => 'La transazione è stata aggiornata l\'ultima volta nel giorno ":value" del mese', 'search_modifier_not_updated_at_on_year' => 'La transazione non è stata aggiornata l\'ultima volta nell\'anno ":value"', - 'search_modifier_not_updated_at_on_month' => 'Transaction was not last updated in month ":value"', - 'search_modifier_not_updated_at_on_day' => 'Transaction was not last updated on day of month ":value"', - 'search_modifier_updated_at_before_year' => 'Transaction was last updated in or before year ":value"', - 'search_modifier_updated_at_before_month' => 'Transaction was last updated in or before month ":value"', - 'search_modifier_updated_at_before_day' => 'Transaction was last updated on or before day of month ":value"', - 'search_modifier_updated_at_after_year' => 'Transaction was last updated in or after year ":value"', - 'search_modifier_updated_at_after_month' => 'Transaction was last updated in or after month ":value"', - 'search_modifier_updated_at_after_day' => 'Transaction was last updated on or after day of month ":value"', - 'search_modifier_created_at_on_year' => 'Transaction was created in year ":value"', - 'search_modifier_created_at_on_month' => 'Transaction was created in month ":value"', - 'search_modifier_created_at_on_day' => 'Transaction was created on day of month ":value"', + 'search_modifier_not_updated_at_on_month' => 'La transazione non è stata aggiornata l\'ultima volta nel mese ":value"', + 'search_modifier_not_updated_at_on_day' => 'La transazione non è stata aggiornata il giorno del mese ":value"', + 'search_modifier_updated_at_before_year' => 'La transazione è stata aggiornata l\'ultima volta durante o prima dell\'anno ":value"', + 'search_modifier_updated_at_before_month' => 'La transazione è stata aggiornata l\'ultima volta durante o prima del mese ":value"', + 'search_modifier_updated_at_before_day' => 'La transazione è stata aggiornata l\'ultima volta durante o prima del giorno del mese ":value"', + 'search_modifier_updated_at_after_year' => 'La transazione è stata aggiornata l\'ultima volta durante o dopo l\'anno ":value"', + 'search_modifier_updated_at_after_month' => 'La transazione è stata aggiornata l\'ultima volta durante o dopo il mese ":value"', + 'search_modifier_updated_at_after_day' => 'La transazione è stata aggiornata l\'ultima volta durante o dopo il giorno del mese ":value"', + 'search_modifier_created_at_on_year' => 'La transazione è stata creata nell\'anno ":value"', + 'search_modifier_created_at_on_month' => 'La transazione è stata creata nel mese ":value"', + 'search_modifier_created_at_on_day' => 'La transazione è stata create nel giorno del mese ":value"', 'search_modifier_not_created_at_on_year' => 'La transazione non è stata creata nell\'anno ":value"', - 'search_modifier_not_created_at_on_month' => 'Transaction was not created in month ":value"', - 'search_modifier_not_created_at_on_day' => 'Transaction was not created on day of month ":value"', - 'search_modifier_created_at_before_year' => 'Transaction was created in or before year ":value"', - 'search_modifier_created_at_before_month' => 'Transaction was created in or before month ":value"', - 'search_modifier_created_at_before_day' => 'Transaction was created on or before day of month ":value"', - 'search_modifier_created_at_after_year' => 'Transaction was created in or after year ":value"', - 'search_modifier_created_at_after_month' => 'Transaction was created in or after month ":value"', - 'search_modifier_created_at_after_day' => 'Transaction was created on or after day of month ":value"', - 'search_modifier_interest_date_before' => 'Transaction interest date is on or before ":value"', - 'search_modifier_interest_date_after' => 'Transaction interest date is on or after ":value"', - 'search_modifier_book_date_on' => 'Transaction book date is on ":value"', - 'search_modifier_not_book_date_on' => 'Transaction book date is not on ":value"', - 'search_modifier_book_date_before' => 'Transaction book date is on or before ":value"', - 'search_modifier_book_date_after' => 'Transaction book date is on or after ":value"', - 'search_modifier_process_date_on' => 'Transaction process date is on ":value"', - 'search_modifier_not_process_date_on' => 'Transaction process date is not on ":value"', - 'search_modifier_process_date_before' => 'Transaction process date is on or before ":value"', - 'search_modifier_process_date_after' => 'Transaction process date is on or after ":value"', - 'search_modifier_due_date_on' => 'Transaction due date is on ":value"', - 'search_modifier_not_due_date_on' => 'Transaction due date is not on ":value"', - 'search_modifier_due_date_before' => 'Transaction due date is on or before ":value"', - 'search_modifier_due_date_after' => 'Transaction due date is on or after ":value"', - 'search_modifier_payment_date_on' => 'Transaction payment date is on ":value"', - 'search_modifier_not_payment_date_on' => 'Transaction payment date is not on ":value"', - 'search_modifier_payment_date_before' => 'Transaction payment date is on or before ":value"', - 'search_modifier_payment_date_after' => 'Transaction payment date is on or after ":value"', - 'search_modifier_invoice_date_on' => 'Transaction invoice date is on ":value"', - 'search_modifier_not_invoice_date_on' => 'Transaction invoice date is not on ":value"', - 'search_modifier_invoice_date_before' => 'Transaction invoice date is on or before ":value"', - 'search_modifier_invoice_date_after' => 'Transaction invoice date is on or after ":value"', - 'search_modifier_created_at_on' => 'Transaction was created on ":value"', - 'search_modifier_not_created_at_on' => 'Transaction was not created on ":value"', - 'search_modifier_created_at_before' => 'Transaction was created on or before ":value"', - 'search_modifier_created_at_after' => 'Transaction was created on or after ":value"', - 'search_modifier_updated_at_on' => 'Transaction was updated on ":value"', - 'search_modifier_not_updated_at_on' => 'Transaction was not updated on ":value"', - 'search_modifier_updated_at_before' => 'Transaction was updated on or before ":value"', - 'search_modifier_updated_at_after' => 'Transaction was updated on or after ":value"', + 'search_modifier_not_created_at_on_month' => 'La transazione non è stata creata nel mese ":value"', + 'search_modifier_not_created_at_on_day' => 'La transazione non è stata creata il giorno del mese ":value"', + 'search_modifier_created_at_before_year' => 'La transazione è stata creata durante o prima dell\'anno ":value"', + 'search_modifier_created_at_before_month' => 'La transazione è stata creata durante o prima del mese ":value"', + 'search_modifier_created_at_before_day' => 'La transazione è stata creata durante o prima del giorno del mese ":value"', + 'search_modifier_created_at_after_year' => 'La transazione è stata creata durante o dopo l\'anno ":value"', + 'search_modifier_created_at_after_month' => 'La transazione è stata creata durante o dopo il mese ":value"', + 'search_modifier_created_at_after_day' => 'La transazione è stata creata durante o dopo il giorno del mese ":value"', + 'search_modifier_interest_date_before' => 'La data d\'interesse della transazione è il o prima del ":value"', + 'search_modifier_interest_date_after' => 'La data d\'interesse della transazione è il o dopo il ":value"', + 'search_modifier_book_date_on' => 'La data di prenotazione della transazione è il ":value"', + 'search_modifier_not_book_date_on' => 'La data di prenotazione della transazione non è il ":value"', + 'search_modifier_book_date_before' => 'La data di prenotazione della transazione è il o prima del ":value"', + 'search_modifier_book_date_after' => 'La data di prenotazione della transazione è il o dopo il ":value"', + 'search_modifier_process_date_on' => 'La data di elaborazione della transazione è il ":value"', + 'search_modifier_not_process_date_on' => 'La data di elaborazione della transazione non è il ":value"', + 'search_modifier_process_date_before' => 'La data di elaborazione della transazione è il o prima del ":value"', + 'search_modifier_process_date_after' => 'La data di elaborazione della transazione è il o dopo il ":value"', + 'search_modifier_due_date_on' => 'La data di scadenza della transazione è il ":value"', + 'search_modifier_not_due_date_on' => 'La data di scadenza della transazione non è il ":value"', + 'search_modifier_due_date_before' => 'La data di scadenza della transazione è il o prima del ":value"', + 'search_modifier_due_date_after' => 'La data di scadenza della transazione è il o dopo il ":value"', + 'search_modifier_payment_date_on' => 'La data di pagamento della transazione è il ":value"', + 'search_modifier_not_payment_date_on' => 'La data di pagamento della transazione non è il ":value"', + 'search_modifier_payment_date_before' => 'La data di pagamento della transazione è il o prima del ":value"', + 'search_modifier_payment_date_after' => 'La data di pagamento della transazione è il o dopo il ":value"', + 'search_modifier_invoice_date_on' => 'La data di fatturazione della transazione è il ":value"', + 'search_modifier_not_invoice_date_on' => 'La data di fatturazione della transazione non è il ":value"', + 'search_modifier_invoice_date_before' => 'La data di fatturazione della transazione è il o prima del ":value"', + 'search_modifier_invoice_date_after' => 'La data di fatturazione della transazione è il o dopo il ":value"', + 'search_modifier_created_at_on' => 'La transazione è stata creata il giorno ":value"', + 'search_modifier_not_created_at_on' => 'La transazione non è stata creata il giorno ":value"', + 'search_modifier_created_at_before' => 'La transazione è stata creata il o prima del ":value"', + 'search_modifier_created_at_after' => 'La transazione è stata creata il o dopo il ":value"', + 'search_modifier_updated_at_on' => 'La transazione è stata aggiornata il ":value"', + 'search_modifier_not_updated_at_on' => 'La transazione non è stata aggiornata il ":value"', + 'search_modifier_updated_at_before' => 'La transazione è stata aggiornata il o prima del ":value"', + 'search_modifier_updated_at_after' => 'La transazione è stata aggiornata il o dopo il ":value"', - 'search_modifier_attachment_name_is' => 'Any attachment\'s name is ":value"', - 'search_modifier_attachment_name_contains' => 'Any attachment\'s name contains ":value"', - 'search_modifier_attachment_name_starts' => 'Any attachment\'s name starts with ":value"', - 'search_modifier_attachment_name_ends' => 'Any attachment\'s name ends with ":value"', - 'search_modifier_attachment_notes_are' => 'Any attachment\'s notes are ":value"', - 'search_modifier_attachment_notes_contains' => 'Any attachment\'s notes contain ":value"', - 'search_modifier_attachment_notes_starts' => 'Any attachment\'s notes start with ":value"', - 'search_modifier_attachment_notes_ends' => 'Any attachment\'s notes end with ":value"', - 'search_modifier_not_attachment_name_is' => 'Any attachment\'s name is not ":value"', - 'search_modifier_not_attachment_name_contains' => 'Any attachment\'s name does not contain ":value"', - 'search_modifier_not_attachment_name_starts' => 'Any attachment\'s name does not start with ":value"', - 'search_modifier_not_attachment_name_ends' => 'Any attachment\'s name does not end with ":value"', - 'search_modifier_not_attachment_notes_are' => 'Any attachment\'s notes are not ":value"', - 'search_modifier_not_attachment_notes_contains' => 'Any attachment\'s notes do not contain ":value"', - 'search_modifier_not_attachment_notes_starts' => 'Any attachment\'s notes start with ":value"', - 'search_modifier_not_attachment_notes_ends' => 'Any attachment\'s notes do not end with ":value"', + 'search_modifier_attachment_name_is' => 'Il nome di qualsiasi allegato è ":value"', + 'search_modifier_attachment_name_contains' => 'Il nome di qualsiasi allegato contiene ":value"', + 'search_modifier_attachment_name_starts' => 'Il nome di qualsiasi allegato inizia con ":value"', + 'search_modifier_attachment_name_ends' => 'Il nome di qualsiasi allegato finisce con ":value"', + 'search_modifier_attachment_notes_are' => 'Qualsiasi nota dell\'allegato è ":value"', + 'search_modifier_attachment_notes_contains' => 'Qualsiasi nota dell\'allegato contiene ":value"', + 'search_modifier_attachment_notes_starts' => 'Le note di qualsiasi allegato iniziano con ":value"', + 'search_modifier_attachment_notes_ends' => 'Le note di qualsiasi allegato terminano con ":value"', + 'search_modifier_not_attachment_name_is' => 'Nessun nome degli allegati ":value"', + 'search_modifier_not_attachment_name_contains' => 'Nessun nome degli allegati contiene ":value"', + 'search_modifier_not_attachment_name_starts' => 'Nessun nome degli allegati inizia con ":value"', + 'search_modifier_not_attachment_name_ends' => 'Nessun nome degli allegati termina con ":value"', + 'search_modifier_not_attachment_notes_are' => 'Nessuna nota degli allegati è ":value"', + 'search_modifier_not_attachment_notes_contains' => 'Nessuna nota degli allegati contiene ":value"', + 'search_modifier_not_attachment_notes_starts' => 'Nessuna nota degli allegati inizia con ":value"', + 'search_modifier_not_attachment_notes_ends' => 'Nessuna nota degli allegati termina con ":value"', 'search_modifier_sepa_ct_is' => 'SEPA CT è ":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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Alla ricerca vengono applicati anche questi modificatori:', 'general_search_error' => 'Si è verificato un errore durante la ricerca. Si prega di controllare i file di registro per ulteriori informazioni.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Non', 'cannot_fire_inactive_rules' => 'Non puoi eseguire regole inattive.', + 'show_triggers' => 'Mostra inneschi', + 'show_actions' => 'Mostra azioni', 'rules' => 'Regole', 'rule_name' => 'Nome regola', 'rule_triggers' => 'La regola si innesca quando', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Quando una transazione viene aggiornata', 'rule_trigger_user_action' => 'L\'azione dell\'utente è ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Il nome del conto di origine inizia con..', 'rule_trigger_source_account_starts' => 'Il nome del conto di origine inizia con ":trigger_value"', @@ -864,12 +868,12 @@ return [ 'rule_trigger_transaction_type' => 'La transazione è di tipo ":trigger_value"', 'rule_trigger_category_is_choice' => 'La categoria è...', 'rule_trigger_category_is' => 'La categoria è ":trigger_value"', - 'rule_trigger_amount_less_choice' => 'Amount is less than or equal to ..', - 'rule_trigger_amount_less' => 'Amount is less than or equal to :trigger_value', + 'rule_trigger_amount_less_choice' => 'L\'importo è inferiore o uguale a ..', + 'rule_trigger_amount_less' => 'L\'importo è inferiore o uguale a :trigger_value', 'rule_trigger_amount_is_choice' => 'L\'importo è..', 'rule_trigger_amount_is' => 'L\'importo è :trigger_value', - 'rule_trigger_amount_more_choice' => 'Amount is more than or equal to..', - 'rule_trigger_amount_more' => 'Amount is more than or equal to :trigger_value', + 'rule_trigger_amount_more_choice' => 'L\'importo è superiore o uguale a..', + 'rule_trigger_amount_more' => 'L\'importo è superiore o uguale a :trigger_value', 'rule_trigger_description_starts_choice' => 'La descrizione inizia con...', 'rule_trigger_description_starts' => 'La descrizione inizia con ":trigger_value"', 'rule_trigger_description_ends_choice' => 'La descrizione termina con...', @@ -884,14 +888,20 @@ return [ 'rule_trigger_date_before' => 'La data della transazione è antecedente al ":trigger_value"', 'rule_trigger_date_after_choice' => 'La data della transazione è successiva al...', 'rule_trigger_date_after' => 'La data della transazione è successiva al ":trigger_value"', - 'rule_trigger_created_at_on_choice' => 'Transaction was made on..', - 'rule_trigger_created_at_on' => 'Transaction was made on ":trigger_value"', - 'rule_trigger_updated_at_on_choice' => 'Transaction was last edited on..', - 'rule_trigger_updated_at_on' => 'Transaction was last edited on ":trigger_value"', + 'rule_trigger_created_at_on_choice' => 'La transazione è avvenuta il..', + 'rule_trigger_created_at_on' => 'La transazione è avvenuta il ":trigger_value"', + 'rule_trigger_updated_at_on_choice' => 'La transazione è stata modificata l\'ultima volta il..', + 'rule_trigger_updated_at_on' => 'Transazione modificata l\'ultima volta il ":trigger_value"', 'rule_trigger_budget_is_choice' => 'Il budget è...', 'rule_trigger_budget_is' => 'Il budget è ":trigger_value"', - 'rule_trigger_tag_is_choice' => 'Any tag is..', - 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_is_choice' => 'Qualsiasi tag è..', + 'rule_trigger_tag_is' => 'Qualsiasi tag è ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'La valuta della transazione è...', 'rule_trigger_currency_is' => 'La valuta della transazione è ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'La valuta estera della transazione è...', @@ -918,298 +928,298 @@ return [ 'rule_trigger_any_notes' => 'La transazione ha una (qualsiasi) nota', 'rule_trigger_no_notes_choice' => 'Non ha note', 'rule_trigger_no_notes' => 'La transazione non ha note', - 'rule_trigger_notes_is_choice' => 'Notes are..', - 'rule_trigger_notes_is' => 'Notes are ":trigger_value"', - 'rule_trigger_notes_contains_choice' => 'Notes contain..', - 'rule_trigger_notes_contains' => 'Notes contain ":trigger_value"', - 'rule_trigger_notes_starts_choice' => 'Notes start with..', - 'rule_trigger_notes_starts' => 'Notes start with ":trigger_value"', - 'rule_trigger_notes_ends_choice' => 'Notes end with..', - 'rule_trigger_notes_ends' => 'Notes end with ":trigger_value"', + 'rule_trigger_notes_is_choice' => 'Le note sono..', + 'rule_trigger_notes_is' => 'Le note sono ":trigger_value"', + 'rule_trigger_notes_contains_choice' => 'Le note contengono..', + 'rule_trigger_notes_contains' => 'Le note contengono ":trigger_value"', + 'rule_trigger_notes_starts_choice' => 'Le note iniziano per..', + 'rule_trigger_notes_starts' => 'Le note iniziano per ":trigger_value"', + 'rule_trigger_notes_ends_choice' => 'Le note terminano per..', + 'rule_trigger_notes_ends' => 'Le note terminano per ":trigger_value"', 'rule_trigger_bill_is_choice' => 'La bollettà è...', 'rule_trigger_bill_is' => 'La bolletta è ":trigger_value"', - 'rule_trigger_external_id_is_choice' => 'External ID is..', - 'rule_trigger_external_id_is' => 'External ID is ":trigger_value"', - 'rule_trigger_internal_reference_is_choice' => 'Internal reference is..', - 'rule_trigger_internal_reference_is' => 'Internal reference is ":trigger_value"', + 'rule_trigger_external_id_is_choice' => 'L\'ID esterno è..', + 'rule_trigger_external_id_is' => 'L\'ID esterno è ":trigger_value"', + 'rule_trigger_internal_reference_is_choice' => 'Il riferimento interno è..', + 'rule_trigger_internal_reference_is' => 'Il riferimento interno è ":trigger_value"', 'rule_trigger_journal_id_choice' => 'L\'ID journal della transazione è...', 'rule_trigger_journal_id' => 'L\'ID journal della transazione è ":trigger_value"', - 'rule_trigger_any_external_url' => 'Transaction has an (any) external URL', - 'rule_trigger_any_external_url_choice' => 'Transaction has an (any) external URL', - 'rule_trigger_any_external_id' => 'Transaction has an (any) external ID', - 'rule_trigger_any_external_id_choice' => 'Transaction has an (any) external ID', + 'rule_trigger_any_external_url' => 'La transazione contiene un URL esterno (qualsiasi)', + 'rule_trigger_any_external_url_choice' => 'La transazione contiene un URL esterno (qualsiasi)', + 'rule_trigger_any_external_id' => 'La transazione contiene un ID esterno (qualsiasi)', + 'rule_trigger_any_external_id_choice' => 'La transazione contiene un ID esterno (qualsiasi)', 'rule_trigger_no_external_url_choice' => 'La transazione non ha URL esterno', 'rule_trigger_no_external_url' => 'La transazione non ha URL esterno', - 'rule_trigger_no_external_id_choice' => 'Transaction has no external ID', - 'rule_trigger_no_external_id' => 'Transaction has no external ID', + 'rule_trigger_no_external_id_choice' => 'La transazione non ha ID esterno', + 'rule_trigger_no_external_id' => 'La transazione non ha ID esterno', 'rule_trigger_id_choice' => 'L\'ID della transazione è...', 'rule_trigger_id' => 'L\'ID della transazione è ":trigger_value"', - 'rule_trigger_sepa_ct_is_choice' => 'SEPA CT is..', - 'rule_trigger_sepa_ct_is' => 'SEPA CT is ":trigger_value"', + 'rule_trigger_sepa_ct_is_choice' => 'SEPA CT è..', + 'rule_trigger_sepa_ct_is' => 'SEPA CT è ":trigger_value"', // new values: - 'rule_trigger_user_action_choice' => 'User action is ":trigger_value"', - 'rule_trigger_tag_is_not_choice' => 'No tag is..', - 'rule_trigger_tag_is_not' => 'No tag is ":trigger_value"', - 'rule_trigger_account_is_choice' => 'Either account is exactly..', - 'rule_trigger_account_is' => 'Either account is exactly ":trigger_value"', - 'rule_trigger_account_contains_choice' => 'Either account contains..', - 'rule_trigger_account_contains' => 'Either account contains ":trigger_value"', - 'rule_trigger_account_ends_choice' => 'Either account ends with..', - 'rule_trigger_account_ends' => 'Either account ends with ":trigger_value"', - 'rule_trigger_account_starts_choice' => 'Either account starts with..', - 'rule_trigger_account_starts' => 'Either account starts with ":trigger_value"', - 'rule_trigger_account_nr_is_choice' => 'Either account number / IBAN is..', - 'rule_trigger_account_nr_is' => 'Either account number / IBAN is ":trigger_value"', - 'rule_trigger_account_nr_contains_choice' => 'Either account number / IBAN contains..', - 'rule_trigger_account_nr_contains' => 'Either account number / IBAN contains ":trigger_value"', - 'rule_trigger_account_nr_ends_choice' => 'Either account number / IBAN ends with..', - 'rule_trigger_account_nr_ends' => 'Either account number / IBAN ends with ":trigger_value"', - 'rule_trigger_account_nr_starts_choice' => 'Either account number / IBAN starts with..', - 'rule_trigger_account_nr_starts' => 'Either account number / IBAN starts with ":trigger_value"', - 'rule_trigger_category_contains_choice' => 'Category contains..', - 'rule_trigger_category_contains' => 'Category contains ":trigger_value"', - 'rule_trigger_category_ends_choice' => 'Category ends with..', - 'rule_trigger_category_ends' => 'Category ends with ":trigger_value"', - 'rule_trigger_category_starts_choice' => 'Category starts with..', - 'rule_trigger_category_starts' => 'Category starts with ":trigger_value"', - 'rule_trigger_budget_contains_choice' => 'Budget contains..', - 'rule_trigger_budget_contains' => 'Budget contains ":trigger_value"', - 'rule_trigger_budget_ends_choice' => 'Budget ends with..', - 'rule_trigger_budget_ends' => 'Budget ends with ":trigger_value"', - 'rule_trigger_budget_starts_choice' => 'Budget starts with..', - 'rule_trigger_budget_starts' => 'Budget starts with ":trigger_value"', + 'rule_trigger_user_action_choice' => 'L\'azione dell\'utente è ":trigger_value"', + 'rule_trigger_tag_is_not_choice' => 'Nessun tag è..', + 'rule_trigger_tag_is_not' => 'Nessun tag è ":trigger_value"', + 'rule_trigger_account_is_choice' => 'Entrambi i conti sono esattamente..', + 'rule_trigger_account_is' => 'Entrambi i conti sono esattamente ":trigger_value"', + 'rule_trigger_account_contains_choice' => 'Entrambi i conti contengono..', + 'rule_trigger_account_contains' => 'Entrambi i conti contengono ":trigger_value"', + 'rule_trigger_account_ends_choice' => 'Entrambi i conti terminano per..', + 'rule_trigger_account_ends' => 'Entrambi i conti terminano per ":trigger_value"', + 'rule_trigger_account_starts_choice' => 'Entrambi i conti iniziano per..', + 'rule_trigger_account_starts' => 'Entrambi i conti terminano per ":trigger_value"', + 'rule_trigger_account_nr_is_choice' => 'Entrambi i numeri di conto / IBAN sono..', + 'rule_trigger_account_nr_is' => 'Entrambi i numeri di conto / IBAN sono ":trigger_value"', + 'rule_trigger_account_nr_contains_choice' => 'Entrambi i numeri di conto / IBAN contengono..', + 'rule_trigger_account_nr_contains' => 'Entrambi i numeri di conto / IBAN contengono ":trigger_value"', + 'rule_trigger_account_nr_ends_choice' => 'Entrambi i numeri di conto / IBAN terminano per..', + 'rule_trigger_account_nr_ends' => 'Entrambi i numeri di conto / IBAN terminano per ":trigger_value"', + 'rule_trigger_account_nr_starts_choice' => 'Entrambi i numeri di conto / IBAN iniziano per..', + 'rule_trigger_account_nr_starts' => 'Entrambi i numeri di conto / IBAN iniziano per ":trigger_value"', + 'rule_trigger_category_contains_choice' => 'La categoria contiene..', + 'rule_trigger_category_contains' => 'La categoria contiene ":trigger_value"', + 'rule_trigger_category_ends_choice' => 'La categoria termina per..', + 'rule_trigger_category_ends' => 'La categoria termina per ":trigger_value"', + 'rule_trigger_category_starts_choice' => 'La categoria inizia per..', + 'rule_trigger_category_starts' => 'La categoria inizia per ":trigger_value"', + 'rule_trigger_budget_contains_choice' => 'Il budget contiene..', + 'rule_trigger_budget_contains' => 'Il budget contiene ":trigger_value"', + 'rule_trigger_budget_ends_choice' => 'Il budget termina per..', + 'rule_trigger_budget_ends' => 'Il budget termina per ":trigger_value"', + 'rule_trigger_budget_starts_choice' => 'Il budget inizia per..', + 'rule_trigger_budget_starts' => 'Il budget inizia per ":trigger_value"', 'rule_trigger_bill_contains_choice' => 'La bolletta contiene..', 'rule_trigger_bill_contains' => 'La bolletta contiene ":trigger_value"', 'rule_trigger_bill_ends_choice' => 'La bolletta termina con..', 'rule_trigger_bill_ends' => 'La bolletta termina con ":trigger_value"', 'rule_trigger_bill_starts_choice' => 'La bolletta inizia con..', 'rule_trigger_bill_starts' => 'La bolletta inizia con ":trigger_value"', - 'rule_trigger_external_id_contains_choice' => 'External ID contains..', - 'rule_trigger_external_id_contains' => 'External ID contains ":trigger_value"', - 'rule_trigger_external_id_ends_choice' => 'External ID ends with..', - 'rule_trigger_external_id_ends' => 'External ID ends with ":trigger_value"', - 'rule_trigger_external_id_starts_choice' => 'External ID starts with..', - 'rule_trigger_external_id_starts' => 'External ID starts with ":trigger_value"', - 'rule_trigger_internal_reference_contains_choice' => 'Internal reference contains..', - 'rule_trigger_internal_reference_contains' => 'Internal reference contains ":trigger_value"', - 'rule_trigger_internal_reference_ends_choice' => 'Internal reference ends with..', - 'rule_trigger_internal_reference_ends' => 'Internal reference ends with ":trigger_value"', - 'rule_trigger_internal_reference_starts_choice' => 'Internal reference starts with..', - 'rule_trigger_internal_reference_starts' => 'Internal reference starts with ":trigger_value"', - 'rule_trigger_external_url_is_choice' => 'External URL is..', - 'rule_trigger_external_url_is' => 'External URL is ":trigger_value"', - 'rule_trigger_external_url_contains_choice' => 'External URL contains..', - 'rule_trigger_external_url_contains' => 'External URL contains ":trigger_value"', - 'rule_trigger_external_url_ends_choice' => 'External URL ends with..', - 'rule_trigger_external_url_ends' => 'External URL ends with ":trigger_value"', - 'rule_trigger_external_url_starts_choice' => 'External URL starts with..', - 'rule_trigger_external_url_starts' => 'External URL starts with ":trigger_value"', + 'rule_trigger_external_id_contains_choice' => 'L\'ID esterno contiene..', + 'rule_trigger_external_id_contains' => 'L\'ID esterno contiene ":trigger_value"', + 'rule_trigger_external_id_ends_choice' => 'L\'ID esterno termina per..', + 'rule_trigger_external_id_ends' => 'L\'ID esterno termina per ":trigger_value"', + 'rule_trigger_external_id_starts_choice' => 'L\'ID esterno inizia per..', + 'rule_trigger_external_id_starts' => 'L\'ID esterno inizia per ":trigger_value"', + 'rule_trigger_internal_reference_contains_choice' => 'Il riferimento interno contiene..', + 'rule_trigger_internal_reference_contains' => 'Il riferimento interno contiene ":trigger_value"', + 'rule_trigger_internal_reference_ends_choice' => 'Il riferimento interno termina per..', + 'rule_trigger_internal_reference_ends' => 'Il riferimento interno termina per ":trigger_value"', + 'rule_trigger_internal_reference_starts_choice' => 'Il riferimento interno inizia per..', + 'rule_trigger_internal_reference_starts' => 'Il riferimento interno inizia per ":trigger_value"', + 'rule_trigger_external_url_is_choice' => 'L\'URL esterno è..', + 'rule_trigger_external_url_is' => 'L\'URL esterno è ":trigger_value"', + 'rule_trigger_external_url_contains_choice' => 'L\'URL esterno contiene..', + 'rule_trigger_external_url_contains' => 'L\'URL esterno contiene ":trigger_value"', + 'rule_trigger_external_url_ends_choice' => 'L\'URL esterno termina per..', + 'rule_trigger_external_url_ends' => 'L\'URL esterno termina per ":trigger_value"', + 'rule_trigger_external_url_starts_choice' => 'L\'URL esterno inizia per..', + 'rule_trigger_external_url_starts' => 'L\'URL esterno inizia per ":trigger_value"', 'rule_trigger_has_no_attachments_choice' => 'Non contiene allegati', 'rule_trigger_has_no_attachments' => 'La transazione non contiene alcun allegato', 'rule_trigger_recurrence_id_choice' => 'L\'ID della transazione ricorrente è..', 'rule_trigger_recurrence_id' => 'L\'ID della transazione ricorrente è ":trigger_value"', - 'rule_trigger_interest_date_on_choice' => 'Interest date is on..', - 'rule_trigger_interest_date_on' => 'Interest date is on ":trigger_value"', - 'rule_trigger_interest_date_before_choice' => 'Interest date is before..', - 'rule_trigger_interest_date_before' => 'Interest date is before ":trigger_value"', - 'rule_trigger_interest_date_after_choice' => 'Interest date is after..', - 'rule_trigger_interest_date_after' => 'Interest date is after ":trigger_value"', - 'rule_trigger_book_date_on_choice' => 'Book date is on..', - 'rule_trigger_book_date_on' => 'Book date is on ":trigger_value"', - 'rule_trigger_book_date_before_choice' => 'Book date is before..', - 'rule_trigger_book_date_before' => 'Book date is before ":trigger_value"', - 'rule_trigger_book_date_after_choice' => 'Book date is after..', - 'rule_trigger_book_date_after' => 'Book date is after ":trigger_value"', - 'rule_trigger_process_date_on_choice' => 'Process date is on..', - 'rule_trigger_process_date_on' => 'Process date is ":trigger_value"', - 'rule_trigger_process_date_before_choice' => 'Process date is before..', - 'rule_trigger_process_date_before' => 'Process date is before ":trigger_value"', - 'rule_trigger_process_date_after_choice' => 'Process date is after..', - 'rule_trigger_process_date_after' => 'Process date is after ":trigger_value"', - 'rule_trigger_due_date_on_choice' => 'Due date is on..', - 'rule_trigger_due_date_on' => 'Due date is on ":trigger_value"', - 'rule_trigger_due_date_before_choice' => 'Due date is before..', - 'rule_trigger_due_date_before' => 'Due date is before ":trigger_value"', - 'rule_trigger_due_date_after_choice' => 'Due date is after..', - 'rule_trigger_due_date_after' => 'Due date is after ":trigger_value"', - 'rule_trigger_payment_date_on_choice' => 'Payment date is on..', - 'rule_trigger_payment_date_on' => 'Payment date is on ":trigger_value"', - 'rule_trigger_payment_date_before_choice' => 'Payment date is before..', - 'rule_trigger_payment_date_before' => 'Payment date is before ":trigger_value"', - 'rule_trigger_payment_date_after_choice' => 'Payment date is after..', - 'rule_trigger_payment_date_after' => 'Payment date is after ":trigger_value"', - 'rule_trigger_invoice_date_on_choice' => 'Invoice date is on..', - 'rule_trigger_invoice_date_on' => 'Invoice date is on ":trigger_value"', - 'rule_trigger_invoice_date_before_choice' => 'Invoice date is before..', - 'rule_trigger_invoice_date_before' => 'Invoice date is before ":trigger_value"', - 'rule_trigger_invoice_date_after_choice' => 'Invoice date is after..', - 'rule_trigger_invoice_date_after' => 'Invoice date is after ":trigger_value"', - 'rule_trigger_created_at_before_choice' => 'Transaction was created before..', - 'rule_trigger_created_at_before' => 'Transaction was created before ":trigger_value"', - 'rule_trigger_created_at_after_choice' => 'Transaction was created after..', - 'rule_trigger_created_at_after' => 'Transaction was created after ":trigger_value"', - 'rule_trigger_updated_at_before_choice' => 'Transaction was last updated before..', - 'rule_trigger_updated_at_before' => 'Transaction was last updated before ":trigger_value"', - 'rule_trigger_updated_at_after_choice' => 'Transaction was last updated after..', - 'rule_trigger_updated_at_after' => 'Transaction was last updated after ":trigger_value"', - 'rule_trigger_foreign_amount_is_choice' => 'Foreign amount is exactly..', - 'rule_trigger_foreign_amount_is' => 'Foreign amount is exactly ":trigger_value"', - 'rule_trigger_foreign_amount_less_choice' => 'Foreign amount is less than..', - 'rule_trigger_foreign_amount_less' => 'Foreign amount is less than ":trigger_value"', - 'rule_trigger_foreign_amount_more_choice' => 'Foreign amount is more than..', - 'rule_trigger_foreign_amount_more' => 'Foreign amount is more than ":trigger_value"', - 'rule_trigger_attachment_name_is_choice' => 'Any attachment\'s name is..', - 'rule_trigger_attachment_name_is' => 'Any attachment\'s name is ":trigger_value"', - 'rule_trigger_attachment_name_contains_choice' => 'Any attachment\'s name contains..', - 'rule_trigger_attachment_name_contains' => 'Any attachment\'s name contains ":trigger_value"', - 'rule_trigger_attachment_name_starts_choice' => 'Any attachment\'s name starts with..', - 'rule_trigger_attachment_name_starts' => 'Any attachment\'s name starts with ":trigger_value"', - 'rule_trigger_attachment_name_ends_choice' => 'Any attachment\'s name ends with..', - 'rule_trigger_attachment_name_ends' => 'Any attachment\'s name ends with ":trigger_value"', - 'rule_trigger_attachment_notes_are_choice' => 'Any attachment\'s notes are..', - 'rule_trigger_attachment_notes_are' => 'Any attachment\'s notes are ":trigger_value"', - 'rule_trigger_attachment_notes_contains_choice' => 'Any attachment\'s notes contain..', - 'rule_trigger_attachment_notes_contains' => 'Any attachment\'s notes contain ":trigger_value"', - 'rule_trigger_attachment_notes_starts_choice' => 'Any attachment\'s notes start with..', - 'rule_trigger_attachment_notes_starts' => 'Any attachment\'s notes start with ":trigger_value"', - 'rule_trigger_attachment_notes_ends_choice' => 'Any attachment\'s notes end with..', - 'rule_trigger_attachment_notes_ends' => 'Any attachment\'s notes end with ":trigger_value"', - 'rule_trigger_reconciled_choice' => 'Transaction is reconciled', - 'rule_trigger_reconciled' => 'Transaction is reconciled', - 'rule_trigger_exists_choice' => 'Any transaction matches(!)', - 'rule_trigger_exists' => 'Any transaction matches', + 'rule_trigger_interest_date_on_choice' => 'La data di interesse è il..', + 'rule_trigger_interest_date_on' => 'La data di interesse è il ":trigger_value"', + 'rule_trigger_interest_date_before_choice' => 'La data di interesse è prima del..', + 'rule_trigger_interest_date_before' => 'La data di interesse è prima del ":trigger_value"', + 'rule_trigger_interest_date_after_choice' => 'La data di interesse è dopo il..', + 'rule_trigger_interest_date_after' => 'La data di interesse è dopo il ":trigger_value"', + 'rule_trigger_book_date_on_choice' => 'La data di prenotazione è il..', + 'rule_trigger_book_date_on' => 'La data di prenotazione è il ":trigger_value"', + 'rule_trigger_book_date_before_choice' => 'La data di prenotazione è prima del..', + 'rule_trigger_book_date_before' => 'La data di prenotazione è prima del ":trigger_value"', + 'rule_trigger_book_date_after_choice' => 'La data di prenotazione è dopo il..', + 'rule_trigger_book_date_after' => 'La data di prenotazione è dopo il ":trigger_value"', + 'rule_trigger_process_date_on_choice' => 'La data di elaborazione è il..', + 'rule_trigger_process_date_on' => 'La data di elaborazione è il ":trigger_value"', + 'rule_trigger_process_date_before_choice' => 'La data di elaborazione è prima del..', + 'rule_trigger_process_date_before' => 'La data di elaborazione è prima del ":trigger_value"', + 'rule_trigger_process_date_after_choice' => 'La data di elaborazione è dopo il..', + 'rule_trigger_process_date_after' => 'La data di elaborazione è dopo il ":trigger_value"', + 'rule_trigger_due_date_on_choice' => 'La data di scadenza è il..', + 'rule_trigger_due_date_on' => 'La data di scadenza è il ":trigger_value"', + 'rule_trigger_due_date_before_choice' => 'La data di scadenza è prima del..', + 'rule_trigger_due_date_before' => 'La data di scadenza è prima del ":trigger_value"', + 'rule_trigger_due_date_after_choice' => 'La data di scadenza è dopo il..', + 'rule_trigger_due_date_after' => 'La data di scadenza è dopo il ":trigger_value"', + 'rule_trigger_payment_date_on_choice' => 'La data di pagamento è il..', + 'rule_trigger_payment_date_on' => 'La data di pagamento è il ":trigger_value"', + 'rule_trigger_payment_date_before_choice' => 'La data di pagamento è prima del..', + 'rule_trigger_payment_date_before' => 'La data di pagamento è prima del ":trigger_value"', + 'rule_trigger_payment_date_after_choice' => 'La data di pagamento è dopo il..', + 'rule_trigger_payment_date_after' => 'La data di pagamento è dopo il ":trigger_value"', + 'rule_trigger_invoice_date_on_choice' => 'La data di fatturazione è il..', + 'rule_trigger_invoice_date_on' => 'La data di fatturazione è il ":trigger_value"', + 'rule_trigger_invoice_date_before_choice' => 'La data di fatturazione è prima del..', + 'rule_trigger_invoice_date_before' => 'La data di fatturazione è prima del ":trigger_value"', + 'rule_trigger_invoice_date_after_choice' => 'La data di fatturazione è dopo il..', + 'rule_trigger_invoice_date_after' => 'La data di fatturazione è dopo il ":trigger_value"', + 'rule_trigger_created_at_before_choice' => 'La transazione è stata creata prima del..', + 'rule_trigger_created_at_before' => 'La transazione è stata creata prima del ":trigger_value"', + 'rule_trigger_created_at_after_choice' => 'La transazione è stata creata dopo il..', + 'rule_trigger_created_at_after' => 'La transazione è stata creata dopo il ":trigger_value"', + 'rule_trigger_updated_at_before_choice' => 'La transazione è stata aggiornata prima del..', + 'rule_trigger_updated_at_before' => 'La transazione è stata aggiornata prima del ":trigger_value"', + 'rule_trigger_updated_at_after_choice' => 'La transazione è stata aggiornata dopo il..', + 'rule_trigger_updated_at_after' => 'La transazione è stata aggiornata dopo ":trigger_value"', + 'rule_trigger_foreign_amount_is_choice' => 'L\'importo straniero è esattamente di..', + 'rule_trigger_foreign_amount_is' => 'L\'importo straniero è esattamente di ":trigger_value"', + 'rule_trigger_foreign_amount_less_choice' => 'L\'importo straniero è inferiore a..', + 'rule_trigger_foreign_amount_less' => 'L\'importo straniero è inferiore a ":trigger_value"', + 'rule_trigger_foreign_amount_more_choice' => 'L\'importo straniero è maggiore di..', + 'rule_trigger_foreign_amount_more' => 'L\'importo straniero è maggiore di ":trigger_value"', + 'rule_trigger_attachment_name_is_choice' => 'Il nome di qualsiasi allegato è..', + 'rule_trigger_attachment_name_is' => 'Il nome di qualsiasi allegato è ":trigger_value"', + 'rule_trigger_attachment_name_contains_choice' => 'Il nome di qualsiasi allegato contiene..', + 'rule_trigger_attachment_name_contains' => 'Il nome di qualsiasi allegato contiene ":trigger_value"', + 'rule_trigger_attachment_name_starts_choice' => 'Il nome di qualsiasi allegato inizia per..', + 'rule_trigger_attachment_name_starts' => 'Il nome di qualsiasi allegato inizia per ":trigger_value"', + 'rule_trigger_attachment_name_ends_choice' => 'Il nome di qualsiasi allegato termina per..', + 'rule_trigger_attachment_name_ends' => 'Il nome di qualsiasi allegato termina per ":trigger_value"', + 'rule_trigger_attachment_notes_are_choice' => 'Le note di qualsiasi allegato sono..', + 'rule_trigger_attachment_notes_are' => 'Le note di qualsiasi allegato sono ":trigger_value"', + 'rule_trigger_attachment_notes_contains_choice' => 'Le note di qualsiasi allegato contengono..', + 'rule_trigger_attachment_notes_contains' => 'Le note di qualsiasi allegato contengono ":trigger_value"', + 'rule_trigger_attachment_notes_starts_choice' => 'Le note di qualsiasi allegato iniziano per..', + 'rule_trigger_attachment_notes_starts' => 'Le note di qualsiasi allegato iniziano per ":trigger_value"', + 'rule_trigger_attachment_notes_ends_choice' => 'Le note di qualsiasi allegato terminano per..', + 'rule_trigger_attachment_notes_ends' => 'Le note di qualsiasi allegato terminano per ":trigger_value"', + 'rule_trigger_reconciled_choice' => 'La transazione è riconciliata', + 'rule_trigger_reconciled' => 'La transazione è riconciliata', + 'rule_trigger_exists_choice' => 'Qualsiasi transazione corrisponde(!)', + 'rule_trigger_exists' => 'Qualsiasi transazione corrisponde', // more values for new types: - 'rule_trigger_not_account_id' => 'Account ID is not ":trigger_value"', - 'rule_trigger_not_source_account_id' => 'Source account ID is not ":trigger_value"', - 'rule_trigger_not_destination_account_id' => 'Destination account ID is not ":trigger_value"', - 'rule_trigger_not_transaction_type' => 'Transaction type is not ":trigger_value"', - 'rule_trigger_not_tag_is' => 'Tag is not ":trigger_value"', - 'rule_trigger_not_tag_is_not' => 'Tag is ":trigger_value"', - 'rule_trigger_not_description_is' => 'Description is not ":trigger_value"', - 'rule_trigger_not_description_contains' => 'Description does not contain', - 'rule_trigger_not_description_ends' => 'Description does not end with ":trigger_value"', - 'rule_trigger_not_description_starts' => 'Description does not start with ":trigger_value"', - 'rule_trigger_not_notes_is' => 'Notes are not ":trigger_value"', - 'rule_trigger_not_notes_contains' => 'Notes do not contain ":trigger_value"', - 'rule_trigger_not_notes_ends' => 'Notes do not end on ":trigger_value"', - 'rule_trigger_not_notes_starts' => 'Notes do not start with ":trigger_value"', - 'rule_trigger_not_source_account_is' => 'Source account is not ":trigger_value"', - 'rule_trigger_not_source_account_contains' => 'Source account does not contain ":trigger_value"', - 'rule_trigger_not_source_account_ends' => 'Source account does not end on ":trigger_value"', - 'rule_trigger_not_source_account_starts' => 'Source account does not start with ":trigger_value"', - 'rule_trigger_not_source_account_nr_is' => 'Source account number / IBAN is not ":trigger_value"', - 'rule_trigger_not_source_account_nr_contains' => 'Source account number / IBAN does not contain ":trigger_value"', - 'rule_trigger_not_source_account_nr_ends' => 'Source account number / IBAN does not end on ":trigger_value"', - 'rule_trigger_not_source_account_nr_starts' => 'Source account number / IBAN does not start with ":trigger_value"', - 'rule_trigger_not_destination_account_is' => 'Destination account is not ":trigger_value"', - 'rule_trigger_not_destination_account_contains' => 'Destination account does not contain ":trigger_value"', - 'rule_trigger_not_destination_account_ends' => 'Destination account does not end on ":trigger_value"', - 'rule_trigger_not_destination_account_starts' => 'Destination account does not start with ":trigger_value"', - 'rule_trigger_not_destination_account_nr_is' => 'Destination account number / IBAN is not ":trigger_value"', - 'rule_trigger_not_destination_account_nr_contains' => 'Destination account number / IBAN does not contain ":trigger_value"', - 'rule_trigger_not_destination_account_nr_ends' => 'Destination account number / IBAN does not end on ":trigger_value"', - 'rule_trigger_not_destination_account_nr_starts' => 'Destination account number / IBAN does not start with ":trigger_value"', - 'rule_trigger_not_account_is' => 'Neither account is ":trigger_value"', - 'rule_trigger_not_account_contains' => 'Neither account contains ":trigger_value"', - 'rule_trigger_not_account_ends' => 'Neither account ends on ":trigger_value"', - 'rule_trigger_not_account_starts' => 'Neither account starts with ":trigger_value"', - 'rule_trigger_not_account_nr_is' => 'Neither account number / IBAN is ":trigger_value"', - 'rule_trigger_not_account_nr_contains' => 'Neither account number / IBAN contains ":trigger_value"', - 'rule_trigger_not_account_nr_ends' => 'Neither account number / IBAN ends on ":trigger_value"', - 'rule_trigger_not_account_nr_starts' => 'Neither account number / IBAN starts with ":trigger_value"', - 'rule_trigger_not_category_is' => 'Category is not ":trigger_value"', - 'rule_trigger_not_category_contains' => 'Category does not contain ":trigger_value"', - 'rule_trigger_not_category_ends' => 'Category does not end on ":trigger_value"', - 'rule_trigger_not_category_starts' => 'Category does not start with ":trigger_value"', - 'rule_trigger_not_budget_is' => 'Budget is not ":trigger_value"', - 'rule_trigger_not_budget_contains' => 'Budget does not contain ":trigger_value"', - 'rule_trigger_not_budget_ends' => 'Budget does not end on ":trigger_value"', - 'rule_trigger_not_budget_starts' => 'Budget does not start with ":trigger_value"', - 'rule_trigger_not_bill_is' => 'Bill is not is ":trigger_value"', - 'rule_trigger_not_bill_contains' => 'Bill does not contain ":trigger_value"', - 'rule_trigger_not_bill_ends' => 'Bill does not end on ":trigger_value"', - 'rule_trigger_not_bill_starts' => 'Bill does not end with ":trigger_value"', - 'rule_trigger_not_external_id_is' => 'External ID is not ":trigger_value"', - 'rule_trigger_not_external_id_contains' => 'External ID does not contain ":trigger_value"', - 'rule_trigger_not_external_id_ends' => 'External ID does not end on ":trigger_value"', - 'rule_trigger_not_external_id_starts' => 'External ID does not start with ":trigger_value"', - 'rule_trigger_not_internal_reference_is' => 'Internal reference is not ":trigger_value"', - 'rule_trigger_not_internal_reference_contains' => 'Internal reference does not contain ":trigger_value"', - 'rule_trigger_not_internal_reference_ends' => 'Internal reference does not end on ":trigger_value"', - 'rule_trigger_not_internal_reference_starts' => 'Internal reference does not start with ":trigger_value"', - 'rule_trigger_not_external_url_is' => 'External URL is not ":trigger_value"', - 'rule_trigger_not_external_url_contains' => 'External URL does not contain ":trigger_value"', - 'rule_trigger_not_external_url_ends' => 'External URL does not end on ":trigger_value"', - 'rule_trigger_not_external_url_starts' => 'External URL does not start with ":trigger_value"', - 'rule_trigger_not_currency_is' => 'Currency is not ":trigger_value"', - 'rule_trigger_not_foreign_currency_is' => 'Foreign currency is not ":trigger_value"', - 'rule_trigger_not_id' => 'Transaction ID is not ":trigger_value"', - 'rule_trigger_not_journal_id' => 'Transaction journal ID is not ":trigger_value"', - 'rule_trigger_not_recurrence_id' => 'Recurrence ID is not ":trigger_value"', - 'rule_trigger_not_date_on' => 'Date is not on ":trigger_value"', - 'rule_trigger_not_date_before' => 'Date is not before ":trigger_value"', - 'rule_trigger_not_date_after' => 'Date is not after ":trigger_value"', - 'rule_trigger_not_interest_date_on' => 'Interest date is not on ":trigger_value"', - 'rule_trigger_not_interest_date_before' => 'Interest date is not before ":trigger_value"', - 'rule_trigger_not_interest_date_after' => 'Interest date is not after ":trigger_value"', - 'rule_trigger_not_book_date_on' => 'Book date is not on ":trigger_value"', - 'rule_trigger_not_book_date_before' => 'Book date is not before ":trigger_value"', - 'rule_trigger_not_book_date_after' => 'Book date is not after ":trigger_value"', - 'rule_trigger_not_process_date_on' => 'Process date is not on ":trigger_value"', - 'rule_trigger_not_process_date_before' => 'Process date is not before ":trigger_value"', - 'rule_trigger_not_process_date_after' => 'Process date is not after ":trigger_value"', - 'rule_trigger_not_due_date_on' => 'Due date is not on ":trigger_value"', - 'rule_trigger_not_due_date_before' => 'Due date is not before ":trigger_value"', - 'rule_trigger_not_due_date_after' => 'Due date is not after ":trigger_value"', - 'rule_trigger_not_payment_date_on' => 'Payment date is not on ":trigger_value"', - 'rule_trigger_not_payment_date_before' => 'Payment date is not before ":trigger_value"', - 'rule_trigger_not_payment_date_after' => 'Payment date is not after ":trigger_value"', - 'rule_trigger_not_invoice_date_on' => 'Invoice date is not on ":trigger_value"', - 'rule_trigger_not_invoice_date_before' => 'Invoice date is not before ":trigger_value"', - 'rule_trigger_not_invoice_date_after' => 'Invoice date is not after ":trigger_value"', - 'rule_trigger_not_created_at_on' => 'Transaction is not created on ":trigger_value"', - 'rule_trigger_not_created_at_before' => 'Transaction is not created before ":trigger_value"', - 'rule_trigger_not_created_at_after' => 'Transaction is not created after ":trigger_value"', - 'rule_trigger_not_updated_at_on' => 'Transaction is not updated on ":trigger_value"', - 'rule_trigger_not_updated_at_before' => 'Transaction is not updated before ":trigger_value"', - 'rule_trigger_not_updated_at_after' => 'Transaction is not updated after ":trigger_value"', - 'rule_trigger_not_amount_is' => 'Transaction amount is not ":trigger_value"', - 'rule_trigger_not_amount_less' => 'Transaction amount is more than ":trigger_value"', - 'rule_trigger_not_amount_more' => 'Transaction amount is less than ":trigger_value"', - 'rule_trigger_not_foreign_amount_is' => 'Foreign transaction amount is not ":trigger_value"', - 'rule_trigger_not_foreign_amount_less' => 'Foreign transaction amount is more than ":trigger_value"', - 'rule_trigger_not_foreign_amount_more' => 'Foreign transaction amount is less than ":trigger_value"', - 'rule_trigger_not_attachment_name_is' => 'No attachment is named ":trigger_value"', - 'rule_trigger_not_attachment_name_contains' => 'No attachment name contains ":trigger_value"', - 'rule_trigger_not_attachment_name_starts' => 'No attachment name starts with ":trigger_value"', - 'rule_trigger_not_attachment_name_ends' => 'No attachment name ends on ":trigger_value"', - 'rule_trigger_not_attachment_notes_are' => 'No attachment notes are ":trigger_value"', - 'rule_trigger_not_attachment_notes_contains' => 'No attachment notes contain ":trigger_value"', - 'rule_trigger_not_attachment_notes_starts' => 'No attachment notes start with ":trigger_value"', - 'rule_trigger_not_attachment_notes_ends' => 'No attachment notes end on ":trigger_value"', - 'rule_trigger_not_reconciled' => 'Transaction is not reconciled', - 'rule_trigger_not_exists' => 'Transaction does not exist', - 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', - 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', - 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', - 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', - 'rule_trigger_not_any_notes' => 'Transaction has no notes', - 'rule_trigger_not_any_external_url' => 'Transaction has no external URL', - 'rule_trigger_not_has_no_attachments' => 'Transaction has a (any) attachment(s)', - 'rule_trigger_not_has_no_category' => 'Transaction has a (any) category', - 'rule_trigger_not_has_no_budget' => 'Transaction has a (any) budget', - 'rule_trigger_not_has_no_bill' => 'Transaction has a (any) bill', - 'rule_trigger_not_has_no_tag' => 'Transaction has a (any) tag', - 'rule_trigger_not_no_notes' => 'Transaction has any notes', - 'rule_trigger_not_no_external_url' => 'Transaction has an external URL', - 'rule_trigger_not_source_is_cash' => 'Source account is not a cash account', - 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', - 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', + 'rule_trigger_not_account_id' => 'L\'ID del conto non è ":trigger_value"', + 'rule_trigger_not_source_account_id' => 'L\'ID del conto di origine non è ":trigger_value"', + 'rule_trigger_not_destination_account_id' => 'L\'ID del conto di destinazione non è ":trigger_value"', + 'rule_trigger_not_transaction_type' => 'Il tipo di transazione non è ":trigger_value"', + 'rule_trigger_not_tag_is' => 'Il tag non è ":trigger_value"', + 'rule_trigger_not_tag_is_not' => 'Il tag è ":trigger_value"', + 'rule_trigger_not_description_is' => 'La descrizione non è ":trigger_value"', + 'rule_trigger_not_description_contains' => 'La descrizione non contiene', + 'rule_trigger_not_description_ends' => 'La descrizione non termina per ":trigger_value"', + 'rule_trigger_not_description_starts' => 'La descrizione non inizia per ":trigger_value"', + 'rule_trigger_not_notes_is' => 'Le note non sono ":trigger_value"', + 'rule_trigger_not_notes_contains' => 'Le note non contengono ":trigger_value"', + 'rule_trigger_not_notes_ends' => 'Le note non terminano per ":trigger_value"', + 'rule_trigger_not_notes_starts' => 'Le note non iniziano per ":trigger_value"', + 'rule_trigger_not_source_account_is' => 'Il conto di origine non è ":trigger_value"', + 'rule_trigger_not_source_account_contains' => 'Il conto di origine non contiene ":trigger_value"', + 'rule_trigger_not_source_account_ends' => 'Il conto di origine non termina per ":trigger_value"', + 'rule_trigger_not_source_account_starts' => 'Il conto di origine non inizia per ":trigger_value"', + 'rule_trigger_not_source_account_nr_is' => 'Il numero del conto di origine / IBAN non è ":trigger_value"', + 'rule_trigger_not_source_account_nr_contains' => 'Il numero del conto di origine / IBAN non contiene ":trigger_value"', + 'rule_trigger_not_source_account_nr_ends' => 'Il numero del conto di origine / IBAN non termina per ":trigger_value"', + 'rule_trigger_not_source_account_nr_starts' => 'Il numero del conto di origine / IBAN non inizia per ":trigger_value"', + 'rule_trigger_not_destination_account_is' => 'Il conto di destinazione non è ":trigger_value"', + 'rule_trigger_not_destination_account_contains' => 'Il conto di destinazione non contiene ":trigger_value"', + 'rule_trigger_not_destination_account_ends' => 'Il conto di destinazione non termina per ":trigger_value"', + 'rule_trigger_not_destination_account_starts' => 'Il conto di destinazione non inizia per ":trigger_value"', + 'rule_trigger_not_destination_account_nr_is' => 'Il numero del conto / IBAN di destinazione non è ":trigger_value"', + 'rule_trigger_not_destination_account_nr_contains' => 'Il numero del conto / IBAN di destinazione non contiene ":trigger_value"', + 'rule_trigger_not_destination_account_nr_ends' => 'Il numero del conto / IBAN di destinazione non termina per ":trigger_value"', + 'rule_trigger_not_destination_account_nr_starts' => 'Il numero del conto / IBAN di destinazione non inizia per ":trigger_value"', + 'rule_trigger_not_account_is' => 'Nessun conto è ":trigger_value"', + 'rule_trigger_not_account_contains' => 'Nessun conto contiene ":trigger_value"', + 'rule_trigger_not_account_ends' => 'Nessun conto termina per ":trigger_value"', + 'rule_trigger_not_account_starts' => 'Nessun conto inizia per ":trigger_value"', + 'rule_trigger_not_account_nr_is' => 'Nessun numero di conto / IBAN è ":trigger_value"', + 'rule_trigger_not_account_nr_contains' => 'Nessun numero di conto / IBAN contiene ":trigger_value"', + 'rule_trigger_not_account_nr_ends' => 'Nessun numero di conto / IBAN termina per ":trigger_value"', + 'rule_trigger_not_account_nr_starts' => 'Nessun numero di conto / IBAN inizia per ":trigger_value"', + 'rule_trigger_not_category_is' => 'La categoria non è ":trigger_value"', + 'rule_trigger_not_category_contains' => 'La categoria non contiene ":trigger_value"', + 'rule_trigger_not_category_ends' => 'La categoria non termina per ":trigger_value"', + 'rule_trigger_not_category_starts' => 'La categoria non inizia per ":trigger_value"', + 'rule_trigger_not_budget_is' => 'Il budget non è ":trigger_value"', + 'rule_trigger_not_budget_contains' => 'Il budget non contiene ":trigger_value"', + 'rule_trigger_not_budget_ends' => 'Il budget non termina il ":trigger_value"', + 'rule_trigger_not_budget_starts' => 'Il budget non inizia per ":trigger_value"', + 'rule_trigger_not_bill_is' => 'La fattura non è ":trigger_value"', + 'rule_trigger_not_bill_contains' => 'La fattura non contiene ":trigger_value"', + 'rule_trigger_not_bill_ends' => 'La fattura non termina il ":trigger_value"', + 'rule_trigger_not_bill_starts' => 'La fattura non termina per ":trigger_value"', + 'rule_trigger_not_external_id_is' => 'L\'ID esterno non è ":trigger_value"', + 'rule_trigger_not_external_id_contains' => 'L\'ID esterno non contiene ":trigger_value"', + 'rule_trigger_not_external_id_ends' => 'L\'ID esterno non termina il ":trigger_value"', + 'rule_trigger_not_external_id_starts' => 'L\'ID esterno non inizia per ":trigger_value"', + 'rule_trigger_not_internal_reference_is' => 'Il riferimento interno non è ":trigger_value"', + 'rule_trigger_not_internal_reference_contains' => 'Il riferimento interno non contiene ":trigger_value"', + 'rule_trigger_not_internal_reference_ends' => 'Il riferimento interno non termina il ":trigger_value"', + 'rule_trigger_not_internal_reference_starts' => 'Il riferimento interno non inizia per ":trigger_value"', + 'rule_trigger_not_external_url_is' => 'L\'URL esterno non è ":trigger_value"', + 'rule_trigger_not_external_url_contains' => 'L\'URL esterno non contiene ":trigger_value"', + 'rule_trigger_not_external_url_ends' => 'L\'URL esterno non termina il ":trigger_value"', + 'rule_trigger_not_external_url_starts' => 'L\'URL esterno non inizia per ":trigger_value"', + 'rule_trigger_not_currency_is' => 'La valuta non è ":trigger_value"', + 'rule_trigger_not_foreign_currency_is' => 'La valuta straniera non è ":trigger_value"', + 'rule_trigger_not_id' => 'L\'ID della transazione non è ":trigger_value"', + 'rule_trigger_not_journal_id' => 'L\'ID del diario della transazione non è ":trigger_value"', + 'rule_trigger_not_recurrence_id' => 'L\'ID della ricorrenza non è ":trigger_value"', + 'rule_trigger_not_date_on' => 'La data non è ":trigger_value"', + 'rule_trigger_not_date_before' => 'La data non è prima del ":trigger_value"', + 'rule_trigger_not_date_after' => 'La data non è dopo il ":trigger_value"', + 'rule_trigger_not_interest_date_on' => 'La data d\'interesse non è il ":trigger_value"', + 'rule_trigger_not_interest_date_before' => 'La data d\'interesse non è prima del ":trigger_value"', + 'rule_trigger_not_interest_date_after' => 'La data d\'interesse non è dopo il ":trigger_value"', + 'rule_trigger_not_book_date_on' => 'La data di prenotazione non è il ":trigger_value"', + 'rule_trigger_not_book_date_before' => 'La data di prenotazione non è prima del ":trigger_value"', + 'rule_trigger_not_book_date_after' => 'La data di prenotazione non è dopo il ":trigger_value"', + 'rule_trigger_not_process_date_on' => 'La data di elaborazione non è il ":trigger_value"', + 'rule_trigger_not_process_date_before' => 'La data di elaborazione non è prima del ":trigger_value"', + 'rule_trigger_not_process_date_after' => 'La data di elaborazione non è dopo il ":trigger_value"', + 'rule_trigger_not_due_date_on' => 'La data di scadenza non è il ":trigger_value"', + 'rule_trigger_not_due_date_before' => 'La data di scadenza non è prima del ":trigger_value"', + 'rule_trigger_not_due_date_after' => 'La data di scadenza non è dopo il ":trigger_value"', + 'rule_trigger_not_payment_date_on' => 'La data di pagamento non è il ":trigger_value"', + 'rule_trigger_not_payment_date_before' => 'La data di pagamento non è prima del ":trigger_value"', + 'rule_trigger_not_payment_date_after' => 'La data di pagamento non è dopo il ":trigger_value"', + 'rule_trigger_not_invoice_date_on' => 'La data della fattura non è il ":trigger_value"', + 'rule_trigger_not_invoice_date_before' => 'La data della fattura non è prima del ":trigger_value"', + 'rule_trigger_not_invoice_date_after' => 'La data della fattura non è dopo il ":trigger_value"', + 'rule_trigger_not_created_at_on' => 'La transazione non è stata creata il ":trigger_value"', + 'rule_trigger_not_created_at_before' => 'La transazione non è stata creata prima del ":trigger_value"', + 'rule_trigger_not_created_at_after' => 'La transazione non è stata creata dopo il ":trigger_value"', + 'rule_trigger_not_updated_at_on' => 'La transazione non è stata aggiornata il ":trigger_value"', + 'rule_trigger_not_updated_at_before' => 'La transazione non è stata aggiornata prima del ":trigger_value"', + 'rule_trigger_not_updated_at_after' => 'La transazione non è stata aggiornata dopo il ":trigger_value"', + 'rule_trigger_not_amount_is' => 'L\'importo della transazione non è ":trigger_value"', + 'rule_trigger_not_amount_less' => 'L\'importo della transazione è maggiore di ":trigger_value"', + 'rule_trigger_not_amount_more' => 'L\'importo della transazione è inferiore a ":trigger_value"', + 'rule_trigger_not_foreign_amount_is' => 'L\'importo della transazione straniera non è ":trigger_value"', + 'rule_trigger_not_foreign_amount_less' => 'L\'importo della transazione straniera è maggiore di ":trigger_value"', + 'rule_trigger_not_foreign_amount_more' => 'L\'importo della transazione straniera è inferiore a ":trigger_value"', + 'rule_trigger_not_attachment_name_is' => 'Nessun allegato denominato ":trigger_value"', + 'rule_trigger_not_attachment_name_contains' => 'Nessun nome dell\'allegato contiene ":trigger_value"', + 'rule_trigger_not_attachment_name_starts' => 'Nessun nome dell\'allegato inizia per ":trigger_value"', + 'rule_trigger_not_attachment_name_ends' => 'Nessun nome dell\'allegato termina in ":trigger_value"', + 'rule_trigger_not_attachment_notes_are' => 'Nessuna nota dell\'allegato è ":trigger_value"', + 'rule_trigger_not_attachment_notes_contains' => 'Nessuna nota dell\'allegato contiene ":trigger_value"', + 'rule_trigger_not_attachment_notes_starts' => 'Nessuna nota dell\'allegato inizia per ":trigger_value"', + 'rule_trigger_not_attachment_notes_ends' => 'Nessuna nota dell\'allegato termina per ":trigger_value"', + 'rule_trigger_not_reconciled' => 'La transazione non è riconciliata', + 'rule_trigger_not_exists' => 'La transazione non esiste', + 'rule_trigger_not_has_attachments' => 'La transazione non ha allegati', + 'rule_trigger_not_has_any_category' => 'La transazione non ha alcuna categoria', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', + 'rule_trigger_not_has_any_bill' => 'La transazione non ha alcuna fattura', + 'rule_trigger_not_has_any_tag' => 'La transazione non ha alcun tag', + 'rule_trigger_not_any_notes' => 'La transazione non ha alcuna nota', + 'rule_trigger_not_any_external_url' => 'La transazione non ha alcun URL esterno', + 'rule_trigger_not_has_no_attachments' => 'La transazione ha uno o più allegati', + 'rule_trigger_not_has_no_category' => 'La transazione non ha una o più categorie', + 'rule_trigger_not_has_no_budget' => 'La transazione ha uno o più budget', + 'rule_trigger_not_has_no_bill' => 'La transazione ha una o più fatture', + 'rule_trigger_not_has_no_tag' => 'La transazione ha uno o più tag', + 'rule_trigger_not_no_notes' => 'La transazione contiene qualsiasi nota', + 'rule_trigger_not_no_external_url' => 'La transazione ha un URL esterno', + 'rule_trigger_not_source_is_cash' => 'Il conto di origine non è un conto corrente', + 'rule_trigger_not_destination_is_cash' => 'Il conto di destinazione non è un conto corrente', + 'rule_trigger_not_account_is_cash' => 'Nessun conto è un conto corrente', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,11 +1230,10 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend - 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', - 'rule_action_delete_transaction' => 'DELETE transaction(!)', + 'rule_action_delete_transaction_choice' => 'ELIMINA transazione(!)', + 'rule_action_delete_transaction' => 'ELIMINA transazione(!)', 'rule_action_set_category' => 'Imposta categoria a ":action_value"', 'rule_action_clear_category' => 'Rimuovi dalla categoria', 'rule_action_set_budget' => 'Imposta il budget su ":action_value"', @@ -1235,33 +1244,33 @@ return [ 'rule_action_set_description' => 'Imposta la descrizione a ":action_value"', 'rule_action_append_description' => 'Aggiungi alla descrizione ":action_value"', 'rule_action_prepend_description' => 'Anteponi alla descrizione ":action_value"', - 'rule_action_set_category_choice' => 'Set category to ..', + 'rule_action_set_category_choice' => 'Imposta la categoria a..', 'rule_action_clear_category_choice' => 'Rimuovi da tutte le categorie', - 'rule_action_set_budget_choice' => 'Set budget to ..', + 'rule_action_set_budget_choice' => 'Imposta il budget a..', 'rule_action_clear_budget_choice' => 'Rimuovi da tutti i budget', - 'rule_action_add_tag_choice' => 'Add tag ..', - 'rule_action_remove_tag_choice' => 'Remove tag ..', + 'rule_action_add_tag_choice' => 'Aggiungi tag..', + 'rule_action_remove_tag_choice' => 'Rimuovi tag..', 'rule_action_remove_all_tags_choice' => 'Rimuovi tutte le etichette', - 'rule_action_set_description_choice' => 'Set description to ..', - 'rule_action_update_piggy_choice' => 'Add / remove transaction amount in piggy bank ..', - 'rule_action_update_piggy' => 'Add / remove transaction amount in piggy bank ":action_value"', - 'rule_action_append_description_choice' => 'Append description with ..', - 'rule_action_prepend_description_choice' => 'Prepend description with ..', - 'rule_action_set_source_account_choice' => 'Set source account to ..', + 'rule_action_set_description_choice' => 'Imposta la descrizione a..', + 'rule_action_update_piggy_choice' => 'Aggiungi / rimuovi l\'importo di transazione nel salvadanaio..', + 'rule_action_update_piggy' => 'Aggiungi / rimuovi l\'importo di transazione nel salvadanaio.. ":action_value"', + 'rule_action_append_description_choice' => 'Aggiungi descrizione con..', + 'rule_action_prepend_description_choice' => 'Anteponi alla descrizione con..', + 'rule_action_set_source_account_choice' => 'Imposta il conto d\'origine a..', 'rule_action_set_source_account' => 'Imposta come conto di origine :action_value', - 'rule_action_set_destination_account_choice' => 'Set destination account to ..', + 'rule_action_set_destination_account_choice' => 'Imposta il conto di destinazione a..', 'rule_action_set_destination_account' => 'Imposta come conto di destinazione :action_value', - 'rule_action_append_notes_choice' => 'Append notes with ..', + 'rule_action_append_notes_choice' => 'Aggiungi alle note con..', 'rule_action_append_notes' => 'Aggiungi alle note ":action_value"', - 'rule_action_prepend_notes_choice' => 'Prepend notes with ..', + 'rule_action_prepend_notes_choice' => 'Anteponi alle note con..', 'rule_action_prepend_notes' => 'Anteponi alle note ":action_value"', 'rule_action_clear_notes_choice' => 'Rimuovi tutte le note', 'rule_action_clear_notes' => 'Rimuovi tutte le note', - 'rule_action_set_notes_choice' => 'Set notes to ..', - 'rule_action_link_to_bill_choice' => 'Link to a bill ..', + 'rule_action_set_notes_choice' => 'Imposta le note a..', + 'rule_action_link_to_bill_choice' => 'Collega a una fattura..', 'rule_action_link_to_bill' => 'Collegamento alla bolletta ":action_value"', - 'rule_action_switch_accounts_choice' => 'Switch source and destination accounts (transfers only!)', - 'rule_action_switch_accounts' => 'Switch source and destination', + 'rule_action_switch_accounts_choice' => 'Cambia conti di origine e destinazione (solo trasferimenti)', + 'rule_action_switch_accounts' => 'Cambia origine e destinazione', 'rule_action_set_notes' => 'Imposta le note su ":action_value"', 'rule_action_convert_deposit_choice' => 'Converti la transazione in un deposito', 'rule_action_convert_deposit' => 'Converti la transazione in un deposito da ":action_value"', @@ -1269,269 +1278,272 @@ return [ 'rule_action_convert_withdrawal' => 'Converti la transazione in un prelievo da ":action_value"', 'rule_action_convert_transfer_choice' => 'Converti la transazione in un trasferimento', 'rule_action_convert_transfer' => 'Converti la transazione in un trasferimento con ":action_value"', - 'rule_action_append_descr_to_notes_choice' => 'Append the description to the transaction notes', - 'rule_action_append_notes_to_descr_choice' => 'Append the transaction notes to the description', - 'rule_action_move_descr_to_notes_choice' => 'Replace the current transaction notes with the description', - 'rule_action_move_notes_to_descr_choice' => 'Replace the current description with the transaction notes', - 'rule_action_append_descr_to_notes' => 'Append description to notes', - 'rule_action_append_notes_to_descr' => 'Append notes to description', - 'rule_action_move_descr_to_notes' => 'Replace notes with description', - 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_append_descr_to_notes_choice' => 'Aggiungi la descrizione alle note di transazione', + 'rule_action_append_notes_to_descr_choice' => 'Aggiungi le note di transazione alla descrizione', + 'rule_action_move_descr_to_notes_choice' => 'Sostituisci le note della transazione corrente con la descrizione', + 'rule_action_move_notes_to_descr_choice' => 'Sostituisci la descrizione corrente con le note di transazione', + 'rule_action_append_descr_to_notes' => 'Aggiungi una descrizione alle note', + 'rule_action_append_notes_to_descr' => 'Aggiungi le note alla descrizione', + 'rule_action_move_descr_to_notes' => 'Sostituisci le note con la descrizione', + 'rule_action_move_notes_to_descr' => 'Sostituisci la descrizione con le note', + 'rule_action_set_destination_to_cash_choice' => 'Imposta il conto di destinazione a (corrente)', + 'rule_action_set_source_to_cash_choice' => 'Imposta il conto di origine a (corrente)', 'rulegroup_for_bills_title' => 'Gruppo di regole per le bollette', - 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', - 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', - 'rule_for_bill_description' => 'This rule is auto-generated to try to match bill ":name".', + 'rulegroup_for_bills_description' => 'Un gruppo di regole speciale per tutte le regole relative alle fatture.', + 'rule_for_bill_title' => 'Regola generata automaticamente per la fattura ":name"', + 'rule_for_bill_description' => 'Questa regola è generata automaticamente per corrispondere alla fattura ":name".', 'create_rule_for_bill' => 'Crea una nuova regola per la bolletta ":name"', - 'create_rule_for_bill_txt' => 'You have just created a new bill called ":name", congratulations!Firefly III can automagically match new withdrawals to this bill. For example, whenever you pay your rent, the bill "rent" will be linked to the expense. This way, Firefly III can accurately show you which bills are due and which ones aren\'t. In order to do so, a new rule must be created. Firefly III has filled in some sensible defaults for you. Please make sure these are correct. If these values are correct, Firefly III will automatically link the correct withdrawal to the correct bill. Please check out the triggers to see if they are correct, and add some if they\'re wrong.', + 'create_rule_for_bill_txt' => 'Hai appena creato una nuova fattura denominata ":name", congratulazioni! Firefly III può abbinare automagicamente i nuovi prelievi a questa fattura. Ad esempio, quando paghi l\'affitto, la fattura "affitto" sarà collegata alla spesa. Così, Firefly III può mostrarti accuratamente quali fatture sono in scadenza e quali no. Per poterlo fare, dev\'essere creata una nuova regola. Firefly III ha compilato alcuni valori predefiniti sensibili per te. Ti preghiamo di assicurarti che siano corretti. Se questi valori sono corretti, Firefly III collegherà automaticamente il prelievo corretto alla fattura corretta. Ti preghiamo di controllare gli inneschi per verificare che siano corretti e di aggiungerne alcuni se sono errati.', 'new_rule_for_bill_title' => 'Regola per la bolletta ":name"', 'new_rule_for_bill_description' => 'Questa regola contrassegna le transazioni per la bolletta ":name".', - 'new_rule_for_journal_title' => 'Regola basata sulla transazione ":description"', - 'new_rule_for_journal_description' => 'Questa regola è basata sulla transazione ":description". Verrà applicata a transazioni uguali.', + 'new_rule_for_journal_title' => 'Regola basata sulla transazione ":description"', + 'new_rule_for_journal_description' => 'Questa regola è basata sulla transazione ":description". Verrà applicata a transazioni uguali.', // tags - 'store_new_tag' => 'Salva la nuova etichetta', - 'update_tag' => 'Aggiorna etichetta', - 'no_location_set' => 'Nessuna posizione impostata.', - 'meta_data' => 'Meta dati', - 'location' => 'Posizione', - 'without_date' => 'Senza data', - 'result' => 'Risultato', - 'sums_apply_to_range' => 'Tutte le somme si applicano all\'intervallo selezionato', - 'mapbox_api_key' => 'Per utilizzare la mappa, ottieni una chiave API da Mapbox. Apri il tuo file .env e inserisci questo codice dopo MAPBOX_API_KEY=.', - 'press_object_location' => 'Clicca con il tasto destro o premi a lungo per impostare la posizione dell\'oggetto.', - 'clear_location' => 'Rimuovi dalla posizione', - 'delete_all_selected_tags' => 'Elimina tutte le etichette selezionate', - 'select_tags_to_delete' => 'Non dimenticare di selezionare qualche etichetta.', - 'deleted_x_tags' => 'Eliminata l\'etichetta :count.Eliminate le etichette :count.', - 'create_rule_from_transaction' => 'Crea una regola basata sulla transazione', - 'create_recurring_from_transaction' => 'Crea una transazione ricorrente basandosi su una transazione', - + 'store_new_tag' => 'Salva la nuova etichetta', + 'update_tag' => 'Aggiorna etichetta', + 'no_location_set' => 'Nessuna posizione impostata.', + 'meta_data' => 'Meta dati', + 'location' => 'Posizione', + 'location_first_split' => 'La posizione di questa transazione può essere impostata sulla prima suddivisione di questa transazione.', + 'without_date' => 'Senza data', + 'result' => 'Risultato', + 'sums_apply_to_range' => 'Tutte le somme si applicano all\'intervallo selezionato', + 'mapbox_api_key' => 'Per utilizzare la mappa, ottieni una chiave API da Mapbox. Apri il tuo file .env e inserisci questo codice dopo MAPBOX_API_KEY=.', + 'press_object_location' => 'Clicca con il tasto destro o premi a lungo per impostare la posizione dell\'oggetto.', + 'click_tap_location' => 'Fare clic o toccare la mappa per aggiungere una posizione', + 'clear_location' => 'Rimuovi dalla posizione', + 'delete_all_selected_tags' => 'Elimina tutte le etichette selezionate', + 'select_tags_to_delete' => 'Non dimenticare di selezionare qualche etichetta.', + 'deleted_x_tags' => 'Eliminata l\'etichetta :count.Eliminate le etichette :count.', + 'create_rule_from_transaction' => 'Crea una regola basata sulla transazione', + 'create_recurring_from_transaction' => 'Crea una transazione ricorrente basandosi su una transazione', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(uguale alla lingua)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Conti nella pagina iniziale', - 'pref_home_screen_accounts_help' => 'Quali conti vuoi che vengano visualizzati nella pagina iniziale?', - 'pref_view_range' => 'Intervallo di visualizzazione', - 'pref_view_range_help' => 'Alcuni grafici vengono raggruppati automaticamente in periodi. Anche i tuoi budget saranno raggruppati in periodi. Quale periodo preferisci?', - 'pref_1D' => 'Un giorno', - 'pref_1W' => 'Una settimana', - 'pref_1M' => 'Un mese', - 'pref_3M' => 'Tre mesi (trimestre)', - 'pref_6M' => 'Sei mesi', - 'pref_1Y' => 'Un anno', - 'pref_last365' => 'Anno scorso', - 'pref_last90' => 'Ultimi 90 giorni', - 'pref_last30' => 'Ultimi 30 giorni', - 'pref_last7' => 'Ultimi 7 giorni', - 'pref_YTD' => 'Ultimo anno', - 'pref_QTD' => 'Ultimo trimestre', - 'pref_MTD' => 'Ultimo mese', - 'pref_languages' => 'Lingue', - 'pref_locale' => 'Impostazioni regionali', - 'pref_languages_help' => 'Firefly III supporta diverse lingue. Quale di queste preferisci?', - 'pref_locale_help' => 'Firefly III ti permette di impostare altre impostazioni regionali, come la formattazione delle valute, dei numeri e delle date. Le voci in questa lista potrebbero non essere supportate dal tuo sistema. Firefly III non ha le corrette impostazioni di data per ogni regione; contattami per ulteriori miglioramenti.', - 'pref_locale_no_demo' => 'Questa funzionalità non è disponibile per l\'utente demo.', - 'pref_custom_fiscal_year' => 'Impostazioni anno fiscale', - 'pref_custom_fiscal_year_label' => 'Abilita', - 'pref_custom_fiscal_year_help' => 'Nei paesi che utilizzano un anno finanziario che non va dal 1 gennaio al 31 dicembre, è possibile attivare questa opzione e specificare i giorni di inizio / fine dell\'anno fiscale', - 'pref_fiscal_year_start_label' => 'Data di inizio anno fiscale', - 'pref_two_factor_auth' => 'Verifica in due passaggi', - 'pref_two_factor_auth_help' => 'Quando abiliti la verifica a due passaggi (nota anche come autenticazione a due fattori), aggiungi un ulteriore livello di sicurezza al tuo account. Accedi con qualcosa che conosci (la tua password) e qualcosa che hai (un codice di verifica). I codici di verifica sono generati da un\'applicazione sul telefono, come Authy o Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Abilita la verifica in due passaggi', - 'pref_two_factor_auth_disabled' => 'Codice di verifica in due passaggi rimosso e disabilitato', - 'pref_two_factor_auth_remove_it' => 'Non dimenticare di rimuovere l\'account dalla tua app di autenticazione!', - 'pref_two_factor_auth_code' => 'Verificare il codice', - 'pref_two_factor_auth_code_help' => 'Esegui la scansione del codice QR con un\'applicazione sul tuo telefono come Authy o Google Authenticator e inserisci il codice generato.', - 'pref_two_factor_auth_reset_code' => 'Reimposta il codice di verifica', - 'pref_two_factor_auth_disable_2fa' => 'Disattiva 2FA', - '2fa_use_secret_instead' => 'Se non puoi scansionare il codice QR, sentiti libero di utilizzare al suo posto il segreto: :secret.', - '2fa_backup_codes' => 'Salva questi codici di recupero per accedere nel caso perdessi il tuo dispositivo.', - '2fa_already_enabled' => 'La verifica in due passaggi è già attiva.', - 'wrong_mfa_code' => 'Questo codice MFA non è valido.', - 'pref_save_settings' => 'Salva le impostazioni', - 'saved_preferences' => 'Preferenze salvate!', - 'preferences_general' => 'Generale', - 'preferences_frontpage' => 'Pagina iniziale', - 'preferences_security' => 'Sicurezza', - 'preferences_layout' => 'Impaginazione', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Mostra i depositi nella pagina iniziale', - 'pref_home_show_deposits_info' => 'La pagina iniziale mostra già i tuoi conti spese. Vuoi che mostri anche i tuoi conti entrate?', - 'pref_home_do_show_deposits' => 'Sì, mostrali', - 'successful_count' => 'di cui :count con successo', - 'list_page_size_title' => 'Dimensioni pagina', - 'list_page_size_help' => 'Ogni elenco (di conti, di transazioni, ecc) mostra al massimo questo numero di elementi per pagina.', - 'list_page_size_label' => 'Dimensioni pagina', - 'between_dates' => '(:start e :end)', - 'pref_optional_fields_transaction' => 'Campi opzionali per le transazioni', - 'pref_optional_fields_transaction_help' => 'Come impostazione predefinita, non tutti i campi sono abilitati quando si crea una nuova transazione (per evitare confusione). Di seguito, puoi abilitare questi campi se ritieni che possano esserti utili. Ovviamente, qualsiasi campo che è disabilitato, ma già compilato, sarà visibile indipendentemente dall\'impostazione.', - 'optional_tj_date_fields' => 'Campi data', - 'optional_tj_other_fields' => 'Altri campi', - 'optional_tj_attachment_fields' => 'Campi allegati', - 'pref_optional_tj_interest_date' => 'Data di valuta', - 'pref_optional_tj_book_date' => 'Data contabile', - 'pref_optional_tj_process_date' => 'Data elaborazione', - 'pref_optional_tj_due_date' => 'Data scadenza', - 'pref_optional_tj_payment_date' => 'Data pagamento', - 'pref_optional_tj_invoice_date' => 'Data fatturazione', - 'pref_optional_tj_internal_reference' => 'Riferimento interno', - 'pref_optional_tj_notes' => 'Note', - 'pref_optional_tj_attachments' => 'Allegati', - 'pref_optional_tj_external_url' => 'URL esterno', - 'pref_optional_tj_location' => 'Posizione', - 'pref_optional_tj_links' => 'Collegamenti della transazione', - 'optional_field_meta_dates' => 'Dati', - 'optional_field_meta_business' => 'Attività commerciale', - 'optional_field_attachments' => 'Allegati', - 'optional_field_meta_data' => 'Metadati opzionali', - 'external_url' => 'URL esterno', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Fai decidere al tuo browser', + 'dark_mode_option_light' => 'Sempre chiaro', + 'dark_mode_option_dark' => 'Sempre scuro', + 'equal_to_language' => '(uguale alla lingua)', + 'dark_mode_preference' => 'Modalità scura', + 'dark_mode_preference_help' => 'Indica a Firefly III quando utilizzare la modalità scura.', + 'pref_home_screen_accounts' => 'Conti nella pagina iniziale', + 'pref_home_screen_accounts_help' => 'Quali conti vuoi che vengano visualizzati nella pagina iniziale?', + 'pref_view_range' => 'Intervallo di visualizzazione', + 'pref_view_range_help' => 'Alcuni grafici vengono raggruppati automaticamente in periodi. Anche i tuoi budget saranno raggruppati in periodi. Quale periodo preferisci?', + 'pref_1D' => 'Un giorno', + 'pref_1W' => 'Una settimana', + 'pref_1M' => 'Un mese', + 'pref_3M' => 'Tre mesi (trimestre)', + 'pref_6M' => 'Sei mesi', + 'pref_1Y' => 'Un anno', + 'pref_last365' => 'Anno scorso', + 'pref_last90' => 'Ultimi 90 giorni', + 'pref_last30' => 'Ultimi 30 giorni', + 'pref_last7' => 'Ultimi 7 giorni', + 'pref_YTD' => 'Ultimo anno', + 'pref_QTD' => 'Ultimo trimestre', + 'pref_MTD' => 'Ultimo mese', + 'pref_languages' => 'Lingue', + 'pref_locale' => 'Impostazioni regionali', + 'pref_languages_help' => 'Firefly III supporta diverse lingue. Quale di queste preferisci?', + 'pref_locale_help' => 'Firefly III ti permette di impostare altre impostazioni regionali, come la formattazione delle valute, dei numeri e delle date. Le voci in questa lista potrebbero non essere supportate dal tuo sistema. Firefly III non ha le corrette impostazioni di data per ogni regione; contattami per ulteriori miglioramenti.', + 'pref_locale_no_demo' => 'Questa funzionalità non è disponibile per l\'utente demo.', + 'pref_custom_fiscal_year' => 'Impostazioni anno fiscale', + 'pref_custom_fiscal_year_label' => 'Abilita', + 'pref_custom_fiscal_year_help' => 'Nei paesi che utilizzano un anno finanziario che non va dal 1 gennaio al 31 dicembre, è possibile attivare questa opzione e specificare i giorni di inizio / fine dell\'anno fiscale', + 'pref_fiscal_year_start_label' => 'Data di inizio anno fiscale', + 'pref_two_factor_auth' => 'Verifica in due passaggi', + 'pref_two_factor_auth_help' => 'Quando abiliti la verifica a due passaggi (nota anche come autenticazione a due fattori), aggiungi un ulteriore livello di sicurezza al tuo account. Accedi con qualcosa che conosci (la tua password) e qualcosa che hai (un codice di verifica). I codici di verifica sono generati da un\'applicazione sul telefono, come Authy o Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Abilita la verifica in due passaggi', + 'pref_two_factor_auth_disabled' => 'Codice di verifica in due passaggi rimosso e disabilitato', + 'pref_two_factor_auth_remove_it' => 'Non dimenticare di rimuovere l\'account dalla tua app di autenticazione!', + 'pref_two_factor_auth_code' => 'Verificare il codice', + 'pref_two_factor_auth_code_help' => 'Esegui la scansione del codice QR con un\'applicazione sul tuo telefono come Authy o Google Authenticator e inserisci il codice generato.', + 'pref_two_factor_auth_reset_code' => 'Reimposta il codice di verifica', + 'pref_two_factor_auth_disable_2fa' => 'Disattiva 2FA', + '2fa_use_secret_instead' => 'Se non puoi scansionare il codice QR, sentiti libero di utilizzare al suo posto il segreto: :secret.', + '2fa_backup_codes' => 'Salva questi codici di recupero per accedere nel caso perdessi il tuo dispositivo.', + '2fa_already_enabled' => 'La verifica in due passaggi è già attiva.', + 'wrong_mfa_code' => 'Questo codice MFA non è valido.', + 'pref_save_settings' => 'Salva le impostazioni', + 'saved_preferences' => 'Preferenze salvate!', + 'preferences_general' => 'Generale', + 'preferences_frontpage' => 'Pagina iniziale', + 'preferences_security' => 'Sicurezza', + 'preferences_layout' => 'Impaginazione', + 'preferences_notifications' => 'Notifiche', + 'pref_home_show_deposits' => 'Mostra i depositi nella pagina iniziale', + 'pref_home_show_deposits_info' => 'La pagina iniziale mostra già i tuoi conti spese. Vuoi che mostri anche i tuoi conti entrate?', + 'pref_home_do_show_deposits' => 'Sì, mostrali', + 'successful_count' => 'di cui :count con successo', + 'list_page_size_title' => 'Dimensioni pagina', + 'list_page_size_help' => 'Ogni elenco (di conti, di transazioni, ecc) mostra al massimo questo numero di elementi per pagina.', + 'list_page_size_label' => 'Dimensioni pagina', + 'between_dates' => '(:start e :end)', + 'pref_optional_fields_transaction' => 'Campi opzionali per le transazioni', + 'pref_optional_fields_transaction_help' => 'Come impostazione predefinita, non tutti i campi sono abilitati quando si crea una nuova transazione (per evitare confusione). Di seguito, puoi abilitare questi campi se ritieni che possano esserti utili. Ovviamente, qualsiasi campo che è disabilitato, ma già compilato, sarà visibile indipendentemente dall\'impostazione.', + 'optional_tj_date_fields' => 'Campi data', + 'optional_tj_other_fields' => 'Altri campi', + 'optional_tj_attachment_fields' => 'Campi allegati', + 'pref_optional_tj_interest_date' => 'Data di valuta', + 'pref_optional_tj_book_date' => 'Data contabile', + 'pref_optional_tj_process_date' => 'Data elaborazione', + 'pref_optional_tj_due_date' => 'Data scadenza', + 'pref_optional_tj_payment_date' => 'Data pagamento', + 'pref_optional_tj_invoice_date' => 'Data fatturazione', + 'pref_optional_tj_internal_reference' => 'Riferimento interno', + 'pref_optional_tj_notes' => 'Note', + 'pref_optional_tj_attachments' => 'Allegati', + 'pref_optional_tj_external_url' => 'URL esterno', + 'pref_optional_tj_location' => 'Posizione', + 'pref_optional_tj_links' => 'Collegamenti della transazione', + 'optional_field_meta_dates' => 'Dati', + 'optional_field_meta_business' => 'Attività commerciale', + 'optional_field_attachments' => 'Allegati', + 'optional_field_meta_data' => 'Metadati opzionali', + 'external_url' => 'URL esterno', + 'pref_notification_bill_reminder' => 'Promemoria sulle fatture in scadenza', + 'pref_notification_new_access_token' => 'Avvisa quando viene creato un nuovo token d\'accesso dell\'API', + 'pref_notification_transaction_creation' => 'Avvisa quando viene creata automaticamente una transazione', + 'pref_notification_user_login' => 'Avvisa quando accedi da una nuova posizione', + 'pref_notification_rule_action_failures' => 'Avvisa quando le azioni della regola non riescono a essere eseguite (solo Slack o Discord)', + 'pref_notifications' => 'Notifiche', + 'pref_notifications_help' => 'Indica se queste sono delle notifiche che vorresti ricevere. Alcune notifiche potrebbero contenere informazioni finanziarie sensibili.', + 'slack_webhook_url' => 'URL del Webhook di Slack', + 'slack_webhook_url_help' => 'Se desideri che Firefly III notifichi che stai usando Slack, inserisci qui l\'URL del webhook. Altrimenti, lascia vuoto il campo. Se sei un admin, devi impostare questo URL anche nell\'amministrazione.', + 'slack_url_label' => 'URL del "webhook in entrata" di Slack', // Financial administrations - 'administration_index' => 'Amministrazione finanziaria', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Amministrazione finanziaria', + 'administrations_index_menu' => 'Amministratori finanziari', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'Sei stato disconnesso da tutte le altre sessioni.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Elimina TUTTI i budget', - 'delete_all_categories' => 'Elimina TUTTE le categorie', - 'delete_all_tags' => 'Elimina TUTTE le etichette', - 'delete_all_bills' => 'Elimina TUTTE le bollette', - 'delete_all_piggy_banks' => 'Elimina TUTTI i salvadanai', - 'delete_all_rules' => 'Elimina TUTTE le regole', - 'delete_all_recurring' => 'Elimina TUTTE le transazioni ricorrenti', - 'delete_all_object_groups' => 'Elimina TUTTI i gruppi di oggetti', - 'delete_all_accounts' => 'Elimina TUTTI gli account', - 'delete_all_asset_accounts' => 'Elimina TUTTI i conti attività', - 'delete_all_expense_accounts' => 'Elimina TUTTI i conti spese', - 'delete_all_revenue_accounts' => 'Elimina TUTTI i conti entrate', - 'delete_all_liabilities' => 'Elimina TUTTE le passività', - 'delete_all_transactions' => 'Elimina TUTTE le transazioni', - 'delete_all_withdrawals' => 'Elimina TUTTI i prelievi', - 'delete_all_deposits' => 'Elimina TUTTI i depositi', - 'delete_all_transfers' => 'Elimina TUTTI i trasferimenti', - 'also_delete_transactions' => 'L\'eliminazione dei conti cancellerà anche TUTTI i prelievi, i depositi e i trasferimenti associati!', - 'deleted_all_budgets' => 'Tutti i budget sono stati eliminati', - 'deleted_all_categories' => 'Tutte le categorie sono state eliminate', - 'deleted_all_tags' => 'Tutte le etichette sono state eliminate', - 'deleted_all_bills' => 'Tutte le bollette sono state eliminate', - 'deleted_all_piggy_banks' => 'Tutti i salvadanai sono stati eliminati', - 'deleted_all_rules' => 'Tutte le regole e i gruppi di regole sono stati eliminati', - 'deleted_all_object_groups' => 'Tutti i gruppi sono stati eliminati', - 'deleted_all_accounts' => 'Tutti i conti sono stati eliminati', - 'deleted_all_asset_accounts' => 'Tutti i conti attività sono stati eliminati', - 'deleted_all_expense_accounts' => 'Tutti i conti spese sono stati eliminati', - 'deleted_all_revenue_accounts' => 'Tutti i conti entrate sono stati eliminati', - 'deleted_all_liabilities' => 'Tutte le passività sono state eliminate', - 'deleted_all_transactions' => 'Tutte le transazioni sono state eliminate', - 'deleted_all_withdrawals' => 'Tutti i prelievi sono stati eliminati', - 'deleted_all_deposits' => 'Tutti i depositi sono stati eliminati', - 'deleted_all_transfers' => 'Tutti i trasferimenti sono stati eliminati', - 'deleted_all_recurring' => 'Tutte le transazioni ricorrenti sono state eliminate', - 'change_your_password' => 'Cambia la tua password', - 'delete_account' => 'Elimina account', - 'current_password' => 'Password corrente', - 'new_password' => 'Nuova password', - 'new_password_again' => 'Nuova password (ripeti)', - 'delete_your_account' => 'Elimina il tuo account', - 'delete_your_account_help' => 'L\'eliminazione del tuo account eliminerà anche conti, transazioni, qualsiasi cosa che potresti aver salvato in Firefly III. Sarà tutto PERDUTO.', - 'delete_your_account_password' => 'Inserisci la tua password per continuare.', - 'password' => 'Password', - 'are_you_sure' => 'Sei sicuro? Non puoi annullare questo.', - 'delete_account_button' => 'ELIMINA il tuo account', - 'invalid_current_password' => 'Password attuale non valida!', - 'password_changed' => 'Password cambiata!', - 'should_change' => 'L\'idea è di cambiare la tua password.', - 'invalid_password' => 'Password non valida!', - 'what_is_pw_security' => 'Che cos\'è "verifica la sicurezza della password"?', - 'secure_pw_title' => 'Come scegliere una password sicura', - 'forgot_password_response' => 'Grazie. Se esiste un account con questo indirizzo email, troverai le istruzioni nella tua casella di posta.', - 'secure_pw_history' => 'Non passa una settimana senza leggere una notizia di un sito che perde le password dei suoi utenti. Gli hacker e i ladri usano queste password per cercare di rubare le tue informazioni personali. Queste informazioni sono preziose.', - 'secure_pw_ff' => 'Utilizzi la stessa password ovunque in Internet? Se un sito perde la tua password, gli hacker hanno accesso a tutti i tuoi dati. Firefly III si affida a te nello scegliere una password robusta e unica per proteggere le tue informazioni finanziarie.', - 'secure_pw_check_box' => 'Per aiutarti a fare ciò, Firefly III può controllare se la password che vuoi utilizzare è stata rubata in passato. In un caso del genere, Firefly III ti consiglia di NON utilizzare quella password.', - 'secure_pw_working_title' => 'Come funziona?', - 'secure_pw_working' => 'Selezionando la casella, Firefly III invierà i primi cinque caratteri dell\'hash SHA1 della tua password alsito web di Troy Hunt per vedere se è presente nell\'elenco. Questo ti impedirà di usare password non sicure come raccomandato nell\'ultima pubblicazione speciale NIST su questo argomento.', - 'secure_pw_should' => 'Devo controllare la scatola?', - 'secure_pw_long_password' => 'Sì. Verifica sempre che la tua password sia sicura.', - 'command_line_token' => 'Token della riga di comando', - 'explain_command_line_token' => 'È necessario questo token per eseguire le opzioni dalla riga di comando, come l\'esportazione di dati. Senza di esso tale comando sensibile non funzionerà. Non condividere il token della riga di comando. Nessuno ti chiederà questo token, nemmeno io. Se temi di averlo perso, o se sei paranoico, rigenera questo token usando il pulsante.', - 'regenerate_command_line_token' => 'Rigenera il token della riga di comando', - 'token_regenerated' => 'È stato generato un nuovo token della riga di comando', - 'change_your_email' => 'Cambia il tuo indirizzo email', - 'email_verification' => 'Un messaggio di posta elettronica verrà inviato al vecchio E al nuovo indirizzo email. Per motivi di sicurezza, non potrai accedere fino a quando non avrai verificato il tuo nuovo indirizzo email. Se non si è sicuri che l\'installazione di Firefly III sia in grado di inviare e-mail, si prega di non utilizzare questa funzionalità. Se sei un amministratore, puoi verificarlo in Amministrazione.', - 'email_changed_logout' => 'Fino a quando non verifichi il tuo indirizzo email, non puoi effettuare il login.', - 'login_with_new_email' => 'Ora puoi accedere con il tuo nuovo indirizzo email.', - 'login_with_old_email' => 'Ora puoi accedere nuovamente con il tuo vecchio indirizzo email.', - 'login_provider_local_only' => 'Questa azione non è disponibile quando ci si è autenticati con ":login_provider".', - 'external_user_mgt_disabled' => 'Questa azione non è disponibile quando Firefly III non è responsabile della gestione utente o dell\'autenticazione.', - 'external_auth_disabled' => 'Questa azione non è disponibile quando Firefly III non è responsabile dell\'autenticazione.', - 'delete_local_info_only' => "Poiché Firefly III non è responsabile della gestione utente o dell'autenticazione, questa funzione eliminerà solo le informazioni locali di Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Client OAuth', - 'profile_oauth_no_clients' => 'Non hai creato nessun client OAuth.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Client', - 'profile_oauth_client_id' => 'ID client', - 'profile_oauth_client_name' => 'Nome', - 'profile_oauth_client_secret' => 'Segreto', - 'profile_oauth_create_new_client' => 'Crea nuovo client', - 'profile_oauth_create_client' => 'Crea client', - 'profile_oauth_edit_client' => 'Modifica client', - 'profile_oauth_name_help' => 'Qualcosa di cui i tuoi utenti potranno riconoscere e fidarsi.', - 'profile_oauth_redirect_url' => 'URL di reindirizzamento', - 'profile_oauth_redirect_url_help' => 'L\'URL di callback dell\'autorizzazione della tua applicazione.', - 'profile_authorized_apps' => 'Applicazioni autorizzate', - 'profile_authorized_clients' => 'Client autorizzati', - 'profile_scopes' => 'Ambiti', - 'profile_revoke' => 'Revoca', - 'profile_oauth_client_secret_title' => 'Segreto del client', - 'profile_oauth_client_secret_expl' => 'Ecco il segreto del nuovo client. Questa è l\'unica occasione in cui viene mostrato pertanto non perderlo! Ora puoi usare questo segreto per effettuare delle richieste alle API.', - 'profile_personal_access_tokens' => 'Token di acceso personale', - 'profile_personal_access_token' => 'Token di acceso personale', - 'profile_oauth_confidential' => 'Riservato', - 'profile_oauth_confidential_help' => 'Richiede al client di autenticarsi con un segreto. I client riservati possono conservare le credenziali in modo sicuro senza esporle a soggetti non autorizzati. Le applicazioni pubbliche, come le applicazioni desktop native o JavaScript SPA, non sono in grado di conservare i segreti in modo sicuro.', - 'profile_personal_access_token_explanation' => 'Ecco il tuo nuovo token di accesso personale. Questa è l\'unica volta che ti viene mostrato per cui non perderlo! Da adesso puoi utilizzare questo token per effettuare delle richieste API.', - 'profile_no_personal_access_token' => 'Non hai creato alcun token di accesso personale.', - 'profile_create_new_token' => 'Crea nuovo token', - 'profile_create_token' => 'Crea token', - 'profile_create' => 'Crea', - 'profile_save_changes' => 'Salva modifiche', - 'profile_whoops' => 'Oops!', - 'profile_something_wrong' => 'Qualcosa non ha funzionato!', - 'profile_try_again' => 'Qualcosa non ha funzionato. Riprova.', - 'amounts' => 'Importi', - 'multi_account_warning_unknown' => 'A seconda del tipo di transazione che hai creato, il conto di origine e/o destinazione delle successive suddivisioni può essere sovrascritto da qualsiasi cosa sia definita nella prima suddivisione della transazione.', - 'multi_account_warning_withdrawal' => 'Ricorda che il conto di origine delle successive suddivisioni verrà sovrascritto da quello definito nella prima suddivisione del prelievo.', - 'multi_account_warning_deposit' => 'Ricorda che il conto di destinazione delle successive suddivisioni verrà sovrascritto da quello definito nella prima suddivisione del deposito.', - 'multi_account_warning_transfer' => 'Ricorda che il conto di origine e il conto di destinazione delle successive suddivisioni verranno sovrascritti da quelli definiti nella prima suddivisione del trasferimento.', + 'purge_data_title' => 'Elimina i dati da Firefly III', + 'purge_data_expl' => '"Purge" significa "eliminare ciò che è già stato eliminato". In normali circostanze, Firefly III non elimina nulla permanentemente. Semplicemente, lo nasconde. Il seguente pulsante elimina tutti i registri "eliminati" in precedenza, PER SEMPRE.', + 'delete_stuff_header' => 'Elimina definitivamente i dati', + 'purge_all_data' => 'Elimina tutti i registri eliminati', + 'purge_data' => 'Elimina dati', + 'purged_all_records' => 'Tutti i registri eliminati sono stati eliminati del tutto.', + 'delete_data_title' => 'Elimina i dati da Firefly III', + 'permanent_delete_stuff' => 'Puoi eliminare cose da Firefly III. Utilizzare i seguenti pulsanti preclude che tutti i tuoi elementi saranno rimossi dalla vista e nascosti. Non esiste alcun pulsante di annullamento, ma gli elementi resteranno visibili nel database, da cui potrai recuperarli, se necessario.', + 'other_sessions_logged_out' => 'Sei stato disconnesso da tutte le altre sessioni.', + 'delete_unused_accounts' => 'Eliminare i conti inutilizzati, pulirà i tuoi elenchi di completamento automatico.', + 'delete_all_unused_accounts' => 'Elimina i conti inutilizzati', + 'deleted_all_unused_accounts' => 'Tutti i conti inutilizzati sono eliminati', + 'delete_all_budgets' => 'Elimina TUTTI i budget', + 'delete_all_categories' => 'Elimina TUTTE le categorie', + 'delete_all_tags' => 'Elimina TUTTE le etichette', + 'delete_all_bills' => 'Elimina TUTTE le bollette', + 'delete_all_piggy_banks' => 'Elimina TUTTI i salvadanai', + 'delete_all_rules' => 'Elimina TUTTE le regole', + 'delete_all_recurring' => 'Elimina TUTTE le transazioni ricorrenti', + 'delete_all_object_groups' => 'Elimina TUTTI i gruppi di oggetti', + 'delete_all_accounts' => 'Elimina TUTTI gli account', + 'delete_all_asset_accounts' => 'Elimina TUTTI i conti attività', + 'delete_all_expense_accounts' => 'Elimina TUTTI i conti spese', + 'delete_all_revenue_accounts' => 'Elimina TUTTI i conti entrate', + 'delete_all_liabilities' => 'Elimina TUTTE le passività', + 'delete_all_transactions' => 'Elimina TUTTE le transazioni', + 'delete_all_withdrawals' => 'Elimina TUTTI i prelievi', + 'delete_all_deposits' => 'Elimina TUTTI i depositi', + 'delete_all_transfers' => 'Elimina TUTTI i trasferimenti', + 'also_delete_transactions' => 'L\'eliminazione dei conti cancellerà anche TUTTI i prelievi, i depositi e i trasferimenti associati!', + 'deleted_all_budgets' => 'Tutti i budget sono stati eliminati', + 'deleted_all_categories' => 'Tutte le categorie sono state eliminate', + 'deleted_all_tags' => 'Tutte le etichette sono state eliminate', + 'deleted_all_bills' => 'Tutte le bollette sono state eliminate', + 'deleted_all_piggy_banks' => 'Tutti i salvadanai sono stati eliminati', + 'deleted_all_rules' => 'Tutte le regole e i gruppi di regole sono stati eliminati', + 'deleted_all_object_groups' => 'Tutti i gruppi sono stati eliminati', + 'deleted_all_accounts' => 'Tutti i conti sono stati eliminati', + 'deleted_all_asset_accounts' => 'Tutti i conti attività sono stati eliminati', + 'deleted_all_expense_accounts' => 'Tutti i conti spese sono stati eliminati', + 'deleted_all_revenue_accounts' => 'Tutti i conti entrate sono stati eliminati', + 'deleted_all_liabilities' => 'Tutte le passività sono state eliminate', + 'deleted_all_transactions' => 'Tutte le transazioni sono state eliminate', + 'deleted_all_withdrawals' => 'Tutti i prelievi sono stati eliminati', + 'deleted_all_deposits' => 'Tutti i depositi sono stati eliminati', + 'deleted_all_transfers' => 'Tutti i trasferimenti sono stati eliminati', + 'deleted_all_recurring' => 'Tutte le transazioni ricorrenti sono state eliminate', + 'change_your_password' => 'Cambia la tua password', + 'delete_account' => 'Elimina account', + 'current_password' => 'Password corrente', + 'new_password' => 'Nuova password', + 'new_password_again' => 'Nuova password (ripeti)', + 'delete_your_account' => 'Elimina il tuo account', + 'delete_your_account_help' => 'L\'eliminazione del tuo account eliminerà anche conti, transazioni, qualsiasi cosa che potresti aver salvato in Firefly III. Sarà tutto PERDUTO.', + 'delete_your_account_password' => 'Inserisci la tua password per continuare.', + 'password' => 'Password', + 'are_you_sure' => 'Sei sicuro? Non puoi annullare questo.', + 'delete_account_button' => 'ELIMINA il tuo account', + 'invalid_current_password' => 'Password attuale non valida!', + 'password_changed' => 'Password cambiata!', + 'should_change' => 'L\'idea è di cambiare la tua password.', + 'invalid_password' => 'Password non valida!', + 'what_is_pw_security' => 'Che cos\'è "verifica la sicurezza della password"?', + 'secure_pw_title' => 'Come scegliere una password sicura', + 'forgot_password_response' => 'Grazie. Se esiste un account con questo indirizzo email, troverai le istruzioni nella tua casella di posta.', + 'secure_pw_history' => 'Non passa una settimana senza leggere una notizia di un sito che perde le password dei suoi utenti. Gli hacker e i ladri usano queste password per cercare di rubare le tue informazioni personali. Queste informazioni sono preziose.', + 'secure_pw_ff' => 'Utilizzi la stessa password ovunque in Internet? Se un sito perde la tua password, gli hacker hanno accesso a tutti i tuoi dati. Firefly III si affida a te nello scegliere una password robusta e unica per proteggere le tue informazioni finanziarie.', + 'secure_pw_check_box' => 'Per aiutarti a fare ciò, Firefly III può controllare se la password che vuoi utilizzare è stata rubata in passato. In un caso del genere, Firefly III ti consiglia di NON utilizzare quella password.', + 'secure_pw_working_title' => 'Come funziona?', + 'secure_pw_working' => 'Selezionando la casella, Firefly III invierà i primi cinque caratteri dell\'hash SHA1 della tua password alsito web di Troy Hunt per vedere se è presente nell\'elenco. Questo ti impedirà di usare password non sicure come raccomandato nell\'ultima pubblicazione speciale NIST su questo argomento.', + 'secure_pw_should' => 'Devo controllare la scatola?', + 'secure_pw_long_password' => 'Sì. Verifica sempre che la tua password sia sicura.', + 'command_line_token' => 'Token della riga di comando', + 'explain_command_line_token' => 'È necessario questo token per eseguire le opzioni dalla riga di comando, come l\'esportazione di dati. Senza di esso tale comando sensibile non funzionerà. Non condividere il token della riga di comando. Nessuno ti chiederà questo token, nemmeno io. Se temi di averlo perso, o se sei paranoico, rigenera questo token usando il pulsante.', + 'regenerate_command_line_token' => 'Rigenera il token della riga di comando', + 'token_regenerated' => 'È stato generato un nuovo token della riga di comando', + 'change_your_email' => 'Cambia il tuo indirizzo email', + 'email_verification' => 'Un messaggio di posta elettronica verrà inviato al vecchio E al nuovo indirizzo email. Per motivi di sicurezza, non potrai accedere fino a quando non avrai verificato il tuo nuovo indirizzo email. Se non si è sicuri che l\'installazione di Firefly III sia in grado di inviare e-mail, si prega di non utilizzare questa funzionalità. Se sei un amministratore, puoi verificarlo in Amministrazione.', + 'email_changed_logout' => 'Fino a quando non verifichi il tuo indirizzo email, non puoi effettuare il login.', + 'login_with_new_email' => 'Ora puoi accedere con il tuo nuovo indirizzo email.', + 'login_with_old_email' => 'Ora puoi accedere nuovamente con il tuo vecchio indirizzo email.', + 'login_provider_local_only' => 'Questa azione non è disponibile quando ci si è autenticati con ":login_provider".', + 'external_user_mgt_disabled' => 'Questa azione non è disponibile quando Firefly III non è responsabile della gestione utente o dell\'autenticazione.', + 'external_auth_disabled' => 'Questa azione non è disponibile quando Firefly III non è responsabile dell\'autenticazione.', + 'delete_local_info_only' => "Poiché Firefly III non è responsabile della gestione utente o dell'autenticazione, questa funzione eliminerà solo le informazioni locali di Firefly III.", + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Client OAuth', + 'profile_oauth_no_clients' => 'Non hai creato nessun client OAuth.', + 'profile_oauth_clients_external_auth' => 'Se stai utilizzando un fornitore di autenticazione esterno come Authelia, i client di OAuth non funzioneranno. Puoi utilizzare soltanto i Token d\'Accesso Personale.', + 'profile_oauth_clients_header' => 'Client', + 'profile_oauth_client_id' => 'ID client', + 'profile_oauth_client_name' => 'Nome', + 'profile_oauth_client_secret' => 'Segreto', + 'profile_oauth_create_new_client' => 'Crea nuovo client', + 'profile_oauth_create_client' => 'Crea client', + 'profile_oauth_edit_client' => 'Modifica client', + 'profile_oauth_name_help' => 'Qualcosa di cui i tuoi utenti potranno riconoscere e fidarsi.', + 'profile_oauth_redirect_url' => 'URL di reindirizzamento', + 'profile_oauth_redirect_url_help' => 'L\'URL di callback dell\'autorizzazione della tua applicazione.', + 'profile_authorized_apps' => 'Applicazioni autorizzate', + 'profile_authorized_clients' => 'Client autorizzati', + 'profile_scopes' => 'Ambiti', + 'profile_revoke' => 'Revoca', + 'profile_oauth_client_secret_title' => 'Segreto del client', + 'profile_oauth_client_secret_expl' => 'Ecco il segreto del nuovo client. Questa è l\'unica occasione in cui viene mostrato pertanto non perderlo! Ora puoi usare questo segreto per effettuare delle richieste alle API.', + 'profile_personal_access_tokens' => 'Token di acceso personale', + 'profile_personal_access_token' => 'Token di acceso personale', + 'profile_oauth_confidential' => 'Riservato', + 'profile_oauth_confidential_help' => 'Richiede al client di autenticarsi con un segreto. I client riservati possono conservare le credenziali in modo sicuro senza esporle a soggetti non autorizzati. Le applicazioni pubbliche, come le applicazioni desktop native o JavaScript SPA, non sono in grado di conservare i segreti in modo sicuro.', + 'profile_personal_access_token_explanation' => 'Ecco il tuo nuovo token di accesso personale. Questa è l\'unica volta che ti viene mostrato per cui non perderlo! Da adesso puoi utilizzare questo token per effettuare delle richieste API.', + 'profile_no_personal_access_token' => 'Non hai creato alcun token di accesso personale.', + 'profile_create_new_token' => 'Crea nuovo token', + 'profile_create_token' => 'Crea token', + 'profile_create' => 'Crea', + 'profile_save_changes' => 'Salva modifiche', + 'profile_whoops' => 'Oops!', + 'profile_something_wrong' => 'Qualcosa non ha funzionato!', + 'profile_try_again' => 'Qualcosa non ha funzionato. Riprova.', + 'amounts' => 'Importi', + 'multi_account_warning_unknown' => 'A seconda del tipo di transazione che hai creato, il conto di origine e/o destinazione delle successive suddivisioni può essere sovrascritto da qualsiasi cosa sia definita nella prima suddivisione della transazione.', + 'multi_account_warning_withdrawal' => 'Ricorda che il conto di origine delle successive suddivisioni verrà sovrascritto da quello definito nella prima suddivisione del prelievo.', + 'multi_account_warning_deposit' => 'Ricorda che il conto di destinazione delle successive suddivisioni verrà sovrascritto da quello definito nella prima suddivisione del deposito.', + 'multi_account_warning_transfer' => 'Ricorda che il conto di origine e il conto di destinazione delle successive suddivisioni verranno sovrascritti da quelli definiti nella prima suddivisione del trasferimento.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Esporta dati da Firefly III', - 'export_data_menu' => 'Esporta dati', - 'export_data_bc' => 'Esporta dati da Firefly III', - 'export_data_main_title' => 'Esporta dati da Firefly III', - 'export_data_expl' => 'Questo link ti consente di esportare tutte le transazioni e i meta dati da Firefly III. Fai riferimento alla guida (icona (?) in alto a destra) per ulteriori informazioni sul processo.', - 'export_data_all_transactions' => 'Esporta tutte le transazioni', - 'export_data_advanced_expl' => 'Se hai bisogno di un tipo più avanzato o specifico di esportazione, leggi la guida su come usare il comando da terminale php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Esporta dati da Firefly III', + 'export_data_menu' => 'Esporta dati', + 'export_data_bc' => 'Esporta dati da Firefly III', + 'export_data_main_title' => 'Esporta dati da Firefly III', + 'export_data_expl' => 'Questo link ti consente di esportare tutte le transazioni e i meta dati da Firefly III. Fai riferimento alla guida (icona (?) in alto a destra) per ulteriori informazioni sul processo.', + 'export_data_all_transactions' => 'Esporta tutte le transazioni', + 'export_data_advanced_expl' => 'Se hai bisogno di un tipo più avanzato o specifico di esportazione, leggi la guida su come usare il comando da terminale php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Un allegato|:count allegati', - 'attachments' => 'Allegati', - 'edit_attachment' => 'Modifica allegato ":name"', - 'update_attachment' => 'Aggiorna allegati', - 'delete_attachment' => 'Elimina allegato ":name"', - 'attachment_deleted' => 'Allegato eliminato ":name"', - 'liabilities_deleted' => 'Passività ":name" eliminata', - 'attachment_updated' => 'Allegato ":name" aggiornato', - 'upload_max_file_size' => 'Dimensione massima del file: :size', - 'list_all_attachments' => 'Lista di tutti gli allegati', + 'nr_of_attachments' => 'Un allegato|:count allegati', + 'attachments' => 'Allegati', + 'edit_attachment' => 'Modifica allegato ":name"', + 'update_attachment' => 'Aggiorna allegati', + 'delete_attachment' => 'Elimina allegato ":name"', + 'attachment_deleted' => 'Allegato eliminato ":name"', + 'liabilities_deleted' => 'Passività ":name" eliminata', + 'attachment_updated' => 'Allegato ":name" aggiornato', + 'upload_max_file_size' => 'Dimensione massima del file: :size', + 'list_all_attachments' => 'Lista di tutti gli allegati', // transaction index - 'title_expenses' => 'Spese', - 'title_withdrawal' => 'Spese', - 'title_revenue' => 'Entrate', - 'title_deposit' => 'Redditi / entrate', - 'title_transfer' => 'Trasferimenti', - 'title_transfers' => 'Trasferimenti', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Poiché questa transazione è riconciliata, non potrai aggiornare i conti, né gli importi.', + 'title_expenses' => 'Spese', + 'title_withdrawal' => 'Spese', + 'title_revenue' => 'Entrate', + 'title_deposit' => 'Redditi / entrate', + 'title_transfer' => 'Trasferimenti', + 'title_transfers' => 'Trasferimenti', + 'submission_options' => 'Opzioni di invio', + 'apply_rules_checkbox' => 'Applica le regole', + 'fire_webhooks_checkbox' => 'Esegui webhook', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Questa transazione è già un\'uscita', - 'convert_is_already_type_Deposit' => 'Questa transazione è già un\'entrata', - 'convert_is_already_type_Transfer' => 'Questa transazione è già un trasferimento', - 'convert_to_Withdrawal' => 'Converti ":description" in un\'uscita', - 'convert_to_Deposit' => 'Converti ":description" in un\'entrata', - 'convert_to_Transfer' => 'Converti ":description" in un trasferimento', - 'convert_options_WithdrawalDeposit' => 'Converti un\'uscita in un\'entrata', - 'convert_options_WithdrawalTransfer' => 'Converti un\'uscita in un trasferimento', - 'convert_options_DepositTransfer' => 'Converti un\'entrata in un trasferimento', - 'convert_options_DepositWithdrawal' => 'Converti un\'entrata in un\'uscita', - 'convert_options_TransferWithdrawal' => 'Converti un trasferimento in un\'uscita', - 'convert_options_TransferDeposit' => 'Converti un trasferimento in un\'entrata', - 'convert_Withdrawal_to_deposit' => 'Converti questa uscita in un\'entrata', - 'convert_Withdrawal_to_transfer' => 'Converti questa uscita in un trasferimento', - 'convert_Deposit_to_withdrawal' => 'Converti questa entrata in un\'uscita', - 'convert_Deposit_to_transfer' => 'Converti questa entrata in un trasferimento', - 'convert_Transfer_to_deposit' => 'Converti questo trasferimento in un\'entrata', - 'convert_Transfer_to_withdrawal' => 'Converti questo trasferimento in un\'uscita', - 'convert_please_set_revenue_source' => 'Si prega di scegliere il conto delle entrate da dove verranno i soldi.', - 'convert_please_set_asset_destination' => 'Scegli il conto attività in cui andranno i soldi.', - 'convert_please_set_expense_destination' => 'Si prega di scegliere il conto spese dove andranno i soldi.', - 'convert_please_set_asset_source' => 'Scegli il conto attività da cui verranno i soldi.', - 'convert_expl_w_d' => 'Quando si converte da un prelievo a un deposito, il denaro verrà depositato nel conto di destinazione visualizzato, invece di essere ritirato da esso.|Quando si converte da un prelievo a un deposito, il denaro verrà depositato nei conti di destinazione visualizzati, invece di essere ritirato da essi.', - 'convert_expl_w_t' => 'Quando si converte un prelievo in un trasferimento, il denaro sarà trasferito dal conto di origine in un altro conto attività o passività invece di essere speso sul conto di spesa originale.|Quando si converte un prelievo in un trasferimento, il denaro sarà trasferito dai conti di origine in altri conti attività o passività invece di essere speso nei conti di spesa originali.', - 'convert_expl_d_w' => 'Quando si converte un deposito in un prelievo, il denaro sarà prelevato dal conto di origine visualizzato, invece di essere depositato in esso.|Quando si converte un deposito in un prelievo, il denaro sarà prelevato dai conti di origine visualizzati, invece di essere depositato in essi. Per completare la conversione, selezionare i nuovi conti di destinazione. Per completare la conversione, selezionare i nuovi conti destinazione.', - 'convert_expl_d_t' => 'Quando si converte un deposito in un trasferimento, il denaro verrà depositato sul conto di destinazione elencato da uno qualsiasi del tuo conto attività o passività.|Quando si converte un deposito in un trasferimento, il denaro verrà depositato nei conti di destinazione elencati da uno qualsiasi dei tuoi conti attività o passività.', - 'convert_expl_t_w' => 'Quando si converte un trasferimento in un prelievo, il denaro sarà speso sul conto di destinazione impostato qui, invece di essere trasferito da esso.|Quando si converte un trasferimento in un prelievo, il denaro sarà speso per i conti di destinazione che si imposta qui, invece di essere trasferito da essi.', - 'convert_expl_t_d' => 'Quando si converte un trasferimento in un deposito, il denaro verrà depositato nel conto di destinazione che vedi qui, invece di essere trasferito in esso.|Quando si converte un trasferimento in un deposito, il denaro verrà depositato nei conti di destinazione che vedi qui, invece di essere trasferito in loro.', - 'convert_select_sources' => 'Per completare la conversione, imposta il nuovo conto di origine qui sotto.|Per completare la conversione, imposta i nuovi conti di origine qui sotto.', - 'convert_select_destinations' => 'Per completare la conversione, selezionare il nuovo conto di destinazione qui sotto.|Per completare la conversione, selezionare i nuovi conti di destinazione qui sotto.', - 'converted_to_Withdrawal' => 'La transazione è stata convertita in un\'uscita', - 'converted_to_Deposit' => 'La transazione è stata convertita in un\'entrata', - 'converted_to_Transfer' => 'La transazione è stata convertita in un trasferimento', - 'invalid_convert_selection' => 'Il conto che hai selezionato è già utilizzato in questa transazione o non esiste.', - 'source_or_dest_invalid' => 'Impossibile trovare i dettagli corretti della transazione. Non è possibile effettuare la conversione.', - 'convert_to_withdrawal' => 'Converti in prelievo', - 'convert_to_deposit' => 'Converti in entrata', - 'convert_to_transfer' => 'Converti in trasferimento', + 'convert_is_already_type_Withdrawal' => 'Questa transazione è già un\'uscita', + 'convert_is_already_type_Deposit' => 'Questa transazione è già un\'entrata', + 'convert_is_already_type_Transfer' => 'Questa transazione è già un trasferimento', + 'convert_to_Withdrawal' => 'Converti ":description" in un\'uscita', + 'convert_to_Deposit' => 'Converti ":description" in un\'entrata', + 'convert_to_Transfer' => 'Converti ":description" in un trasferimento', + 'convert_options_WithdrawalDeposit' => 'Converti un\'uscita in un\'entrata', + 'convert_options_WithdrawalTransfer' => 'Converti un\'uscita in un trasferimento', + 'convert_options_DepositTransfer' => 'Converti un\'entrata in un trasferimento', + 'convert_options_DepositWithdrawal' => 'Converti un\'entrata in un\'uscita', + 'convert_options_TransferWithdrawal' => 'Converti un trasferimento in un\'uscita', + 'convert_options_TransferDeposit' => 'Converti un trasferimento in un\'entrata', + 'convert_Withdrawal_to_deposit' => 'Converti questa uscita in un\'entrata', + 'convert_Withdrawal_to_transfer' => 'Converti questa uscita in un trasferimento', + 'convert_Deposit_to_withdrawal' => 'Converti questa entrata in un\'uscita', + 'convert_Deposit_to_transfer' => 'Converti questa entrata in un trasferimento', + 'convert_Transfer_to_deposit' => 'Converti questo trasferimento in un\'entrata', + 'convert_Transfer_to_withdrawal' => 'Converti questo trasferimento in un\'uscita', + 'convert_please_set_revenue_source' => 'Si prega di scegliere il conto delle entrate da dove verranno i soldi.', + 'convert_please_set_asset_destination' => 'Scegli il conto attività in cui andranno i soldi.', + 'convert_please_set_expense_destination' => 'Si prega di scegliere il conto spese dove andranno i soldi.', + 'convert_please_set_asset_source' => 'Scegli il conto attività da cui verranno i soldi.', + 'convert_expl_w_d' => 'Quando si converte da un prelievo a un deposito, il denaro verrà depositato nel conto di destinazione visualizzato, invece di essere ritirato da esso.|Quando si converte da un prelievo a un deposito, il denaro verrà depositato nei conti di destinazione visualizzati, invece di essere ritirato da essi.', + 'convert_expl_w_t' => 'Quando si converte un prelievo in un trasferimento, il denaro sarà trasferito dal conto di origine in un altro conto attività o passività invece di essere speso sul conto di spesa originale.|Quando si converte un prelievo in un trasferimento, il denaro sarà trasferito dai conti di origine in altri conti attività o passività invece di essere speso nei conti di spesa originali.', + 'convert_expl_d_w' => 'Quando si converte un deposito in un prelievo, il denaro sarà prelevato dal conto di origine visualizzato, invece di essere depositato in esso.|Quando si converte un deposito in un prelievo, il denaro sarà prelevato dai conti di origine visualizzati, invece di essere depositato in essi. Per completare la conversione, selezionare i nuovi conti di destinazione. Per completare la conversione, selezionare i nuovi conti destinazione.', + 'convert_expl_d_t' => 'Quando si converte un deposito in un trasferimento, il denaro verrà depositato sul conto di destinazione elencato da uno qualsiasi del tuo conto attività o passività.|Quando si converte un deposito in un trasferimento, il denaro verrà depositato nei conti di destinazione elencati da uno qualsiasi dei tuoi conti attività o passività.', + 'convert_expl_t_w' => 'Quando si converte un trasferimento in un prelievo, il denaro sarà speso sul conto di destinazione impostato qui, invece di essere trasferito da esso.|Quando si converte un trasferimento in un prelievo, il denaro sarà speso per i conti di destinazione che si imposta qui, invece di essere trasferito da essi.', + 'convert_expl_t_d' => 'Quando si converte un trasferimento in un deposito, il denaro verrà depositato nel conto di destinazione che vedi qui, invece di essere trasferito in esso.|Quando si converte un trasferimento in un deposito, il denaro verrà depositato nei conti di destinazione che vedi qui, invece di essere trasferito in loro.', + 'convert_select_sources' => 'Per completare la conversione, imposta il nuovo conto di origine qui sotto.|Per completare la conversione, imposta i nuovi conti di origine qui sotto.', + 'convert_select_destinations' => 'Per completare la conversione, selezionare il nuovo conto di destinazione qui sotto.|Per completare la conversione, selezionare i nuovi conti di destinazione qui sotto.', + 'converted_to_Withdrawal' => 'La transazione è stata convertita in un\'uscita', + 'converted_to_Deposit' => 'La transazione è stata convertita in un\'entrata', + 'converted_to_Transfer' => 'La transazione è stata convertita in un trasferimento', + 'invalid_convert_selection' => 'Il conto che hai selezionato è già utilizzato in questa transazione o non esiste.', + 'source_or_dest_invalid' => 'Impossibile trovare i dettagli corretti della transazione. Non è possibile effettuare la conversione.', + 'convert_to_withdrawal' => 'Converti in prelievo', + 'convert_to_deposit' => 'Converti in entrata', + 'convert_to_transfer' => 'Converti in trasferimento', // create new stuff: - 'create_new_withdrawal' => 'Crea una nuova uscita', - 'create_new_deposit' => 'Crea una nuova entrata', - 'create_new_transfer' => 'Crea un nuovo trasferimento', - 'create_new_asset' => 'Crea un nuovo conto attività', - 'create_new_liabilities' => 'Crea nuova passività', - 'create_new_expense' => 'Crea un nuovo conto di spesa', - 'create_new_revenue' => 'Crea un nuovo conto entrate', - 'create_new_piggy_bank' => 'Crea un nuovo salvadanaio', - 'create_new_bill' => 'Crea una nuova bolletta', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Crea una nuova uscita', + 'create_new_deposit' => 'Crea una nuova entrata', + 'create_new_transfer' => 'Crea un nuovo trasferimento', + 'create_new_asset' => 'Crea un nuovo conto attività', + 'create_new_liabilities' => 'Crea nuova passività', + 'create_new_expense' => 'Crea un nuovo conto di spesa', + 'create_new_revenue' => 'Crea un nuovo conto entrate', + 'create_new_piggy_bank' => 'Crea un nuovo salvadanaio', + 'create_new_bill' => 'Crea una nuova bolletta', + 'create_new_subscription' => 'Crea un nuovo abbonamento', + 'create_new_rule' => 'Crea nuova regola', // currencies: - 'create_currency' => 'Crea una nuova valuta', - 'store_currency' => 'Salva nuova valuta', - 'update_currency' => 'Aggiorna valuta', - 'new_default_currency' => ':name ora è la valuta predefinita.', - 'cannot_delete_currency' => 'Impossibile eliminare :name perché è ancora in uso.', - 'cannot_delete_fallback_currency' => ':name è la valuta di default del sistema e non può essere eliminata.', - 'cannot_disable_currency_journals' => 'Non è possibile disabilitare :name perché ci sono ancora transazioni che la utilizzano.', - 'cannot_disable_currency_last_left' => 'Non è possibile disabilitare :name perché è l\'ultima valuta abilitata.', - 'cannot_disable_currency_account_meta' => 'Non è possibile disabilitare :name perché è utilizzata in conti attività.', - 'cannot_disable_currency_bills' => 'Non è possibile disabilitare :name perché è utilizzata in bollette.', - 'cannot_disable_currency_recurring' => 'Non è possibile disabilitare :name perché è utilizzata in transazioni ricorrenti.', - 'cannot_disable_currency_available_budgets' => 'Non è possibile disabilitare :name perché è disponibile nei budget disponibili.', - 'cannot_disable_currency_budget_limits' => 'Non è possibile disabilitare :name perché è utilizzata nei limiti dei budget.', - 'cannot_disable_currency_current_default' => 'Non è possibile disabilitare :name perché è la valuta predefinita corrente.', - 'cannot_disable_currency_system_fallback' => 'Non è possibile disabilitare :name perché è la valuta predefinita di sistema.', - 'disable_EUR_side_effects' => 'L\'Euro è la valuta predefinita di sistema in caso di emergenza. Disabilitarla potrebbe provocare effetti collaterali non previsti e potrebbe annullare la garanzia.', - 'deleted_currency' => 'Valuta :name elimina', - 'created_currency' => 'Valuta :name creata', - 'could_not_store_currency' => 'Impossibile memorizzare la nuova valuta.', - 'updated_currency' => 'Valuta :name aggiornata', - 'ask_site_owner' => 'Chiedi a :owner di aggiungere, rimuovere o modificare valute.', - 'currencies_intro' => 'Firefly III supporta varie valute che è possibile impostare e abilitare qui.', - 'make_default_currency' => 'Rendila predefinita', - 'default_currency' => 'predefinita', - 'currency_is_disabled' => 'Disabilitata', - 'enable_currency' => 'Abilita', - 'disable_currency' => 'Disabilita', - 'currencies_default_disabled' => 'Come impostazione predefinita la maggior parte di queste valute sono disabilitate. Per usarle devi prima abilitarle.', - 'currency_is_now_enabled' => 'La valuta ":name" è stata abilitata', - 'currency_is_now_disabled' => 'La valuta ":name" è stata disabilitata', + 'create_currency' => 'Crea una nuova valuta', + 'store_currency' => 'Salva nuova valuta', + 'update_currency' => 'Aggiorna valuta', + 'new_default_currency' => '":name" è ora la valuta predefinita.', + 'default_currency_failed' => 'Impossibile rendere ":name" la valuta predefinita. Ti preghiamo di consultare i registri.', + 'cannot_delete_currency' => 'Impossibile eliminare :name perché è ancora in uso.', + 'cannot_delete_fallback_currency' => ':name è la valuta di default del sistema e non può essere eliminata.', + 'cannot_disable_currency_journals' => 'Non è possibile disabilitare :name perché ci sono ancora transazioni che la utilizzano.', + 'cannot_disable_currency_last_left' => 'Non è possibile disabilitare :name perché è l\'ultima valuta abilitata.', + 'cannot_disable_currency_account_meta' => 'Non è possibile disabilitare :name perché è utilizzata in conti attività.', + 'cannot_disable_currency_bills' => 'Non è possibile disabilitare :name perché è utilizzata in bollette.', + 'cannot_disable_currency_recurring' => 'Non è possibile disabilitare :name perché è utilizzata in transazioni ricorrenti.', + 'cannot_disable_currency_available_budgets' => 'Non è possibile disabilitare :name perché è disponibile nei budget disponibili.', + 'cannot_disable_currency_budget_limits' => 'Non è possibile disabilitare :name perché è utilizzata nei limiti dei budget.', + 'cannot_disable_currency_current_default' => 'Non è possibile disabilitare :name perché è la valuta predefinita corrente.', + 'cannot_disable_currency_system_fallback' => 'Non è possibile disabilitare :name perché è la valuta predefinita di sistema.', + 'disable_EUR_side_effects' => 'L\'Euro è la valuta predefinita di sistema in caso di emergenza. Disabilitarla potrebbe provocare effetti collaterali non previsti e potrebbe annullare la garanzia.', + 'deleted_currency' => 'Valuta :name elimina', + 'created_currency' => 'Valuta :name creata', + 'could_not_store_currency' => 'Impossibile memorizzare la nuova valuta.', + 'updated_currency' => 'Valuta :name aggiornata', + 'ask_site_owner' => 'Chiedi a :owner di aggiungere, rimuovere o modificare valute.', + 'currencies_intro' => 'Firefly III supporta varie valute che è possibile impostare e abilitare qui.', + 'make_default_currency' => 'Rendila predefinita', + 'default_currency' => 'predefinita', + 'currency_is_disabled' => 'Disabilitata', + 'enable_currency' => 'Abilita', + 'disable_currency' => 'Disabilita', + 'currencies_default_disabled' => 'Come impostazione predefinita la maggior parte di queste valute sono disabilitate. Per usarle devi prima abilitarle.', + 'currency_is_now_enabled' => 'La valuta ":name" è stata abilitata', + 'could_not_enable_currency' => 'Impossibile abilitare la valuta ":name". Ti preghiamo di revisionare i registri.', + 'currency_is_now_disabled' => 'La valuta ":name" è stata disabilitata', + 'could_not_disable_currency' => 'Impossibile disabilitare la valuta ":name". Forse è ancora in uso?', // forms: - 'mandatoryFields' => 'Campi obbligatori', - 'optionalFields' => 'Campi opzionali', - 'options' => 'Opzioni', + 'mandatoryFields' => 'Campi obbligatori', + 'optionalFields' => 'Campi opzionali', + 'options' => 'Opzioni', // budgets: - 'daily_budgets' => 'Budget giornalieri', - 'weekly_budgets' => 'Budget settimanali', - 'monthly_budgets' => 'Budget mensili', - 'quarterly_budgets' => 'Bilanci trimestrali', - 'half_year_budgets' => 'Bilanci semestrali', - 'yearly_budgets' => 'Budget annuali', - 'other_budgets' => 'Budget a periodi personalizzati', - 'budget_limit_not_in_range' => 'Questo importo si applica dal :start al :end:', - 'total_available_budget' => 'Budget totale disponibile (tra :start e :end)', - 'total_available_budget_in_currency' => 'Budget totale disponibile in :currency', - 'see_below' => 'vedi sotto', - 'create_new_budget' => 'Crea nuovo budget', - 'store_new_budget' => 'Salva il nuovo budget', - 'stored_new_budget' => 'Nuovo budget salvato ":name"', - 'available_between' => 'Disponibile tra :start e :end', - 'transactionsWithoutBudget' => 'Spese senza budget', - 'transactions_no_budget' => 'Spese senza budget tra :start e :end', - 'spent_between' => 'Già spesi tra :start e :end', - 'set_available_amount' => 'Imposta importo disponibile', - 'update_available_amount' => 'Aggiorna importo disponibile', - 'ab_basic_modal_explain' => 'Usa questo modulo per indicare quanto ti aspetti di mettere a budget (in totale, in :currency) nel periodo indicato.', - 'createBudget' => 'Nuovo budget', - 'invalid_currency' => 'Questa non è una valuta valida', - 'invalid_amount' => 'Inserisci un importo', - 'set_ab' => 'L\'importo del budget disponibile è stato impostato', - 'updated_ab' => 'L\'importo del budget disponibile è stato aggiornato', - 'deleted_ab' => 'L\'importo del budget disponibile è stato eliminato', - 'deleted_bl' => 'L\'importo del budget è stato eliminato', - 'alt_currency_ab_create' => 'Imposta il budget disponibile in un\'altra valuta', - 'bl_create_btn' => 'Imposta il budget in un\'altra valuta', - 'inactiveBudgets' => 'Budget disattivati', - 'without_budget_between' => 'Transazioni senza un budget tra :start e :end', - 'delete_budget' => 'Elimina budget ":name"', - 'deleted_budget' => 'Budget eliminato ":name"', - 'edit_budget' => 'Modifica budget ":name"', - 'updated_budget' => 'Budget ":name" aggiornato', - 'update_amount' => 'Aggiorna importo', - 'update_budget' => 'Budget aggiornato', - 'update_budget_amount_range' => 'Aggiorna l\'importo disponibile (previsto) tra il :start e il :end', - 'set_budget_limit_title' => 'Imposta l\'importo del budget per il budget :budget tra :start e :end', - 'set_budget_limit' => 'Importo del budget impostato', - 'budget_period_navigator' => 'Navigatore dei periodi', - 'info_on_available_amount' => 'Cosa ho a disposizione?', - 'available_amount_indication' => 'Utilizza questi importi per ottenere un\'indicazione di quale potrebbe essere il tuo budget totale.', - 'suggested' => 'Consigliato', - 'average_between' => 'Media tra :start e :end', - 'transferred_in' => 'Trasferito (ingresso)', - 'transferred_away' => 'Trasferito (uscita)', - 'auto_budget_none' => 'Nessun budget automatico', - 'auto_budget_reset' => 'Imposta un importo fisso per ogni periodo', - 'auto_budget_rollover' => 'Aggiungi un importo per ogni periodo', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Giornaliero', - 'auto_budget_period_weekly' => 'Settimanale', - 'auto_budget_period_monthly' => 'Mensile', - 'auto_budget_period_quarterly' => 'Trimestrale', - 'auto_budget_period_half_year' => 'Semestrale', - 'auto_budget_period_yearly' => 'Annuale', - 'auto_budget_help' => 'Puoi leggere di più su questa funzione nella guida. Clicca sull\'icona (?) in alto a destra.', - 'auto_budget_reset_icon' => 'Questo budget sarà impostato periodicamente', - 'auto_budget_rollover_icon' => 'L\'importo del budget aumenterà periodicamente', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Rimuovi l\'import a budget in :currency', + 'daily_budgets' => 'Budget giornalieri', + 'weekly_budgets' => 'Budget settimanali', + 'monthly_budgets' => 'Budget mensili', + 'quarterly_budgets' => 'Bilanci trimestrali', + 'half_year_budgets' => 'Bilanci semestrali', + 'yearly_budgets' => 'Budget annuali', + 'other_budgets' => 'Budget a periodi personalizzati', + 'budget_limit_not_in_range' => 'Questo importo si applica dal :start al :end:', + 'total_available_budget' => 'Budget totale disponibile (tra :start e :end)', + 'total_available_budget_in_currency' => 'Budget totale disponibile in :currency', + 'see_below' => 'vedi sotto', + 'create_new_budget' => 'Crea nuovo budget', + 'store_new_budget' => 'Salva il nuovo budget', + 'stored_new_budget' => 'Nuovo budget salvato ":name"', + 'available_between' => 'Disponibile tra :start e :end', + 'transactionsWithoutBudget' => 'Spese senza budget', + 'transactions_no_budget' => 'Spese senza budget tra :start e :end', + 'spent_between' => 'Già spesi tra :start e :end', + 'spent_between_left' => 'Spesi :spent tra :start e :end, rimasti :left.', + 'set_available_amount' => 'Imposta importo disponibile', + 'update_available_amount' => 'Aggiorna importo disponibile', + 'ab_basic_modal_explain' => 'Usa questo modulo per indicare quanto ti aspetti di mettere a budget (in totale, in :currency) nel periodo indicato.', + 'createBudget' => 'Nuovo budget', + 'invalid_currency' => 'Questa non è una valuta valida', + 'invalid_amount' => 'Inserisci un importo', + 'set_ab' => 'L\'importo del budget disponibile è stato impostato', + 'updated_ab' => 'L\'importo del budget disponibile è stato aggiornato', + 'deleted_ab' => 'L\'importo del budget disponibile è stato eliminato', + 'deleted_bl' => 'L\'importo del budget è stato eliminato', + 'alt_currency_ab_create' => 'Imposta il budget disponibile in un\'altra valuta', + 'bl_create_btn' => 'Imposta il budget in un\'altra valuta', + 'inactiveBudgets' => 'Budget disattivati', + 'without_budget_between' => 'Transazioni senza un budget tra :start e :end', + 'delete_budget' => 'Elimina budget ":name"', + 'deleted_budget' => 'Budget eliminato ":name"', + 'edit_budget' => 'Modifica budget ":name"', + 'updated_budget' => 'Budget ":name" aggiornato', + 'update_amount' => 'Aggiorna importo', + 'update_budget' => 'Budget aggiornato', + 'update_budget_amount_range' => 'Aggiorna l\'importo disponibile (previsto) tra il :start e il :end', + 'set_budget_limit_title' => 'Imposta l\'importo del budget per il budget :budget tra :start e :end', + 'set_budget_limit' => 'Importo del budget impostato', + 'budget_period_navigator' => 'Navigatore dei periodi', + 'info_on_available_amount' => 'Cosa ho a disposizione?', + 'available_amount_indication' => 'Utilizza questi importi per ottenere un\'indicazione di quale potrebbe essere il tuo budget totale.', + 'suggested' => 'Consigliato', + 'average_between' => 'Media tra :start e :end', + 'transferred_in' => 'Trasferito (ingresso)', + 'transferred_away' => 'Trasferito (uscita)', + 'auto_budget_none' => 'Nessun budget automatico', + 'auto_budget_reset' => 'Imposta un importo fisso per ogni periodo', + 'auto_budget_rollover' => 'Aggiungi un importo per ogni periodo', + 'auto_budget_adjusted' => 'Aggiungi un importo ogni periodo e correggi la spesa eccessiva', + 'auto_budget_period_daily' => 'Giornaliero', + 'auto_budget_period_weekly' => 'Settimanale', + 'auto_budget_period_monthly' => 'Mensile', + 'auto_budget_period_quarterly' => 'Trimestrale', + 'auto_budget_period_half_year' => 'Semestrale', + 'auto_budget_period_yearly' => 'Annuale', + 'auto_budget_help' => 'Puoi leggere di più su questa funzione nella guida. Clicca sull\'icona (?) in alto a destra.', + 'auto_budget_reset_icon' => 'Questo budget sarà impostato periodicamente', + 'auto_budget_rollover_icon' => 'L\'importo del budget aumenterà periodicamente', + 'auto_budget_adjusted_icon' => 'L\'importo del budget aumenterà periodicamente e correggerà la spesa eccessiva', + 'remove_budgeted_amount' => 'Rimuovi l\'import a budget in :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Non prevista per questo periodo', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'No (per ora)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'La bolletta abbina le transazioni tra :low e :high.', - 'running_again_loss' => 'Le transazioni precedentemente collegate a questa bolletta potrebbero perdere la loro connessione se (non) corrispondono (più) alla regola.', - 'bill_related_rules' => 'Regole relative a questa bolletta', - 'repeats' => 'Si ripete', - 'bill_end_date_help' => 'Campo opzionale. La bolletta dovrebbe terminare in questa data.', - 'bill_extension_date_help' => 'Campo opzionale. La bolletta deve essere estesa (o annullata) in questa data o prima.', - 'bill_end_index_line' => 'Questa bolletta termina il :date', - 'bill_extension_index_line' => 'Questa bolletta deve essere estesa o annullata il :date', - 'connected_journals' => 'Transazioni connesse', - 'auto_match_on' => 'Abbinato automaticamente da Firefly III', - 'auto_match_off' => 'Non abbinato automaticamente a Firefly III', - 'next_expected_match' => 'Prossimo abbinamento previsto', - 'delete_bill' => 'Elimina bolletta ":name"', - 'deleted_bill' => 'Bolletta eliminata ":name"', - 'edit_bill' => 'Modifica bolletta ":name"', - 'more' => 'Altro', - 'rescan_old' => 'Esegui nuovamente le regole su tutte le transazioni', - 'update_bill' => 'Aggiorna bolletta', - 'updated_bill' => 'Bolletta aggiornata ":name"', - 'store_new_bill' => 'Salva la nuova bolletta', - 'stored_new_bill' => 'Nuova bolletta memorizzata ":name"', - 'cannot_scan_inactive_bill' => 'Le bollette non attive non possono essere scansionate.', - 'rescanned_bill' => 'Riscansionato tutto, e collegato :count transazione alla bolletta.|Risanato tutto, e collegate :count transazioni alla bolletta.', - 'average_bill_amount_year' => 'Importo medio della bolletta (:year)', - 'average_bill_amount_overall' => 'Importo medio della bolletta (totale)', - 'bill_is_active' => 'Bolletta attiva', - 'bill_expected_between' => 'Previsto tra :start e :end', - 'bill_will_automatch' => 'La bolletta verrà automaticamente collegata alle transazioni corrispondenti', - 'skips_over' => 'ogni', - 'bill_store_error' => 'Si è verificato un errore imprevisto durante la memorizzazione della nuova bolletta. Controlla i file di log', - 'list_inactive_rule' => 'regola inattiva', - 'bill_edit_rules' => 'Firefly III tenterà anche di modificare la regola relativa a questa bolletta. Se hai modificato questa regola da solo, Firefly III non cambierà nulla.|Firefly III tenterà anche di modificare le :count regole relative a questa bolletta. Se hai modificato queste regole, Firefly III non cambierà nulla.', - 'bill_expected_date' => 'Attesa :date', - 'bill_expected_date_js' => 'Attesa per {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Pagata il {date}', - 'bill_repeats_weekly' => 'Ripeti ogni settimana', - 'bill_repeats_monthly' => 'Ripeti ogni mese', - 'bill_repeats_quarterly' => 'Ripeti ogni tre mesi', - 'bill_repeats_half-year' => 'Ripeti ogni sei mesi', - 'bill_repeats_yearly' => 'Ripeti ogni anno', - 'bill_repeats_weekly_other' => 'Ripeti a settimane alterne', - 'bill_repeats_monthly_other' => 'Ripeti a mesi alterni', - 'bill_repeats_quarterly_other' => 'Ripeti ogni altro trimestre', - 'bill_repeats_half-year_other' => 'Ripeti ogni anno', - 'bill_repeats_yearly_other' => 'Ripeti ad anni alterni', - 'bill_repeats_weekly_skip' => 'Ripeti ogni {skip} settimane', - 'bill_repeats_monthly_skip' => 'Ripeti ogni {skip} mesi', - 'bill_repeats_quarterly_skip' => 'Ripeti ogni {skip} trimestri', - 'bill_repeats_half-year_skip' => 'Ripeti ogni {skip} mezzi anni', - 'bill_repeats_yearly_skip' => 'Ripeti ogni {skip} anni', - 'subscriptions' => 'Abbonamenti', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Per sempre', - 'extension_date_is' => 'La data di estensione è {date}', + 'subscription' => 'Abbonamento', + 'not_expected_period' => 'Non prevista per questo periodo', + 'subscriptions_in_group' => 'Abbonamenti nel gruppo "%{title}"', + 'subscr_expected_x_times' => 'Prevedi di pagare %{amount} %{times} volte in questo periodo', + 'not_or_not_yet' => 'No (per ora)', + 'visit_bill' => 'Visita la fattura ":name" su Firefly III', + 'match_between_amounts' => 'La bolletta abbina le transazioni tra :low e :high.', + 'running_again_loss' => 'Le transazioni precedentemente collegate a questa bolletta potrebbero perdere la loro connessione se (non) corrispondono (più) alla regola.', + 'bill_related_rules' => 'Regole relative a questa bolletta', + 'repeats' => 'Si ripete', + 'bill_end_date_help' => 'Campo opzionale. La bolletta dovrebbe terminare in questa data.', + 'bill_extension_date_help' => 'Campo opzionale. La bolletta deve essere estesa (o annullata) in questa data o prima.', + 'bill_end_index_line' => 'Questa bolletta termina il :date', + 'bill_extension_index_line' => 'Questa bolletta deve essere estesa o annullata il :date', + 'connected_journals' => 'Transazioni connesse', + 'auto_match_on' => 'Abbinato automaticamente da Firefly III', + 'auto_match_off' => 'Non abbinato automaticamente a Firefly III', + 'next_expected_match' => 'Prossimo abbinamento previsto', + 'delete_bill' => 'Elimina bolletta ":name"', + 'deleted_bill' => 'Bolletta eliminata ":name"', + 'edit_bill' => 'Modifica bolletta ":name"', + 'more' => 'Altro', + 'rescan_old' => 'Esegui nuovamente le regole su tutte le transazioni', + 'update_bill' => 'Aggiorna bolletta', + 'updated_bill' => 'Bolletta aggiornata ":name"', + 'store_new_bill' => 'Salva la nuova bolletta', + 'stored_new_bill' => 'Nuova bolletta memorizzata ":name"', + 'cannot_scan_inactive_bill' => 'Le bollette non attive non possono essere scansionate.', + 'rescanned_bill' => 'Riscansionato tutto, e collegato :count transazione alla bolletta.|Risanato tutto, e collegate :count transazioni alla bolletta.', + 'average_bill_amount_year' => 'Importo medio della bolletta (:year)', + 'average_bill_amount_overall' => 'Importo medio della bolletta (totale)', + 'bill_is_active' => 'Bolletta attiva', + 'bill_expected_between' => 'Previsto tra :start e :end', + 'bill_will_automatch' => 'La bolletta verrà automaticamente collegata alle transazioni corrispondenti', + 'skips_over' => 'ogni', + 'bill_store_error' => 'Si è verificato un errore imprevisto durante la memorizzazione della nuova bolletta. Controlla i file di log', + 'list_inactive_rule' => 'regola inattiva', + 'bill_edit_rules' => 'Firefly III tenterà anche di modificare la regola relativa a questa bolletta. Se hai modificato questa regola da solo, Firefly III non cambierà nulla.|Firefly III tenterà anche di modificare le :count regole relative a questa bolletta. Se hai modificato queste regole, Firefly III non cambierà nulla.', + 'bill_expected_date' => 'Attesa :date', + 'bill_expected_date_js' => 'Attesa per {date}', + 'expected_amount' => 'Importo (previsto)', + 'bill_paid_on' => 'Pagata il {date}', + 'bill_repeats_weekly' => 'Ripeti ogni settimana', + 'bill_repeats_monthly' => 'Ripeti ogni mese', + 'bill_repeats_quarterly' => 'Ripeti ogni tre mesi', + 'bill_repeats_half-year' => 'Ripeti ogni sei mesi', + 'bill_repeats_yearly' => 'Ripeti ogni anno', + 'bill_repeats_weekly_other' => 'Ripeti a settimane alterne', + 'bill_repeats_monthly_other' => 'Ripeti a mesi alterni', + 'bill_repeats_quarterly_other' => 'Ripeti ogni altro trimestre', + 'bill_repeats_half-year_other' => 'Ripeti ogni anno', + 'bill_repeats_yearly_other' => 'Ripeti ad anni alterni', + 'bill_repeats_weekly_skip' => 'Ripeti ogni {skip} settimane', + 'bill_repeats_monthly_skip' => 'Ripeti ogni {skip} mesi', + 'bill_repeats_quarterly_skip' => 'Ripeti ogni {skip} trimestri', + 'bill_repeats_half-year_skip' => 'Ripeti ogni {skip} mezzi anni', + 'bill_repeats_yearly_skip' => 'Ripeti ogni {skip} anni', + 'subscriptions' => 'Abbonamenti', + 'go_to_subscriptions' => 'Vai ai tuoi abbonamenti', + 'forever' => 'Per sempre', + 'extension_date_is' => 'La data di estensione è {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'Hai :count conto inattivo (archiviato), che puoi visualizzare in questa pagina separata.|Hai :count conti inattivi (archiviati), che puoi visualizzare in questa pagina separata.', - 'all_accounts_inactive' => 'Questi sono i tuoi conti inattivi.', - 'active_account_link' => 'Questo collegamento ti riporta ai conti attivi.', - 'account_missing_transaction' => 'Non è possibile visualizzare il conto #:id (":name") direttamente, a Firefly mancano le informazioni per il reindirizzamento.', - 'cc_monthly_payment_date_help' => 'Seleziona qualsiasi anno e mese, verrà comunque ignorato. Solo il giorno del mese è rilevante.', - 'details_for_asset' => 'Dettagli per conto attività ":name"', - 'details_for_expense' => 'Dettagli per conto uscite ":name"', - 'details_for_revenue' => 'Dettagli per conto entrate ":name"', - 'details_for_cash' => 'Dettagli per il conto contanti ":name"', - 'store_new_asset_account' => 'Salva nuovo conto attività', - 'store_new_expense_account' => 'Salva il nuovo conto uscite', - 'store_new_revenue_account' => 'Salva il nuovo conto entrate', - 'edit_asset_account' => 'Modifica conto attività ":name"', - 'edit_expense_account' => 'Modifica conto uscite ":name"', - 'edit_revenue_account' => 'Modifica conto entrate ":name"', - 'delete_asset_account' => 'Elimina conto attività ":name"', - 'delete_expense_account' => 'Elimina conto uscite ":name"', - 'delete_revenue_account' => 'Elimina conto entrate ":name"', - 'delete_liabilities_account' => 'Elimina passività ":name"', - 'asset_deleted' => 'Conto attività ":name" eliminato correttamente', - 'account_deleted' => 'Il conto ":name" è stato eliminato con successo', - 'expense_deleted' => 'Conto uscite ":name" eliminato correttamente', - 'revenue_deleted' => 'Conto entrate ":name" eliminato correttamente', - 'update_asset_account' => 'Aggiorna conto attività', - 'update_undefined_account' => 'Aggiorna conto', - 'update_liabilities_account' => 'Aggiorna passività', - 'update_expense_account' => 'Aggiorna conto uscite', - 'update_revenue_account' => 'Aggiorna conto entrate', - 'make_new_asset_account' => 'Crea un nuovo conto attività', - 'make_new_expense_account' => 'Crea un nuovo conto uscite', - 'make_new_revenue_account' => 'Crea nuovo conto entrate', - 'make_new_liabilities_account' => 'Crea una nuova passività', - 'asset_accounts' => 'Conti attività', - 'undefined_accounts' => 'Conti', - 'asset_accounts_inactive' => 'Conti attività (inattivi)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Conti uscite', - 'expense_accounts_inactive' => 'Conti spese (inattivi)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Conti entrate', - 'revenue_accounts_inactive' => 'Conti entrate (inattivi)', - 'cash_accounts' => 'Conti contanti', - 'Cash account' => 'Conto contanti', - 'liabilities_accounts' => 'Passività', - 'liabilities_accounts_inactive' => 'Passività (inattive)', - 'reconcile_account' => 'Riconciliazione conto ":account"', - 'overview_of_reconcile_modal' => 'Panoramica della riconciliazione', - 'delete_reconciliation' => 'Elimina riconciliazione', - 'update_reconciliation' => 'Aggiorna riconciliazione', - 'amount_cannot_be_zero' => 'L\'importo non può essere zero', - 'end_of_reconcile_period' => 'Fine periodo riconciliazione: :period', - 'start_of_reconcile_period' => 'Inizio periodo riconciliazione: :period', - 'start_balance' => 'Saldo iniziale', - 'end_balance' => 'Saldo finale', - 'update_balance_dates_instruction' => 'Abbina gli importi e le date qui sopra al tuo estratto conto e premi "Inizia la riconciliazione"', - 'select_transactions_instruction' => 'Seleziona le transazioni che appaiono sul tuo estratto conto.', - 'select_range_and_balance' => 'Innanzitutto verifica l\'intervallo delle date e i saldi. Quindi premi "Inizia la riconciliazione"', - 'date_change_instruction' => 'Se cambi ora l\'intervallo di date, qualsiasi progresso andrà perso.', - 'update_selection' => 'Aggiorna selezione', - 'store_reconcile' => 'Memorizza la riconciliazione', - 'reconciliation_transaction' => 'Transazione di riconciliazione', - 'Reconciliation' => 'Riconciliazione', - 'reconciliation' => 'Riconciliazione', - 'reconcile_options' => 'Opzioni di riconciliazione', - 'reconcile_range' => 'Intervallo di riconciliazione', - 'start_reconcile' => 'Inizia la riconciliazione', - 'cash_account_type' => 'Contante', - 'cash' => 'contanti', - 'cant_find_redirect_account' => 'Firefly III ha provato a reindirizzare ma non è riuscito. Ci dispiace. Torna all\'indice.', - 'account_type' => 'Tipo conto', - 'save_transactions_by_moving' => 'Salva questa transazione spostandola in un altro conto:|Salva queste transazioni spostandole in un altro conto:', - 'save_transactions_by_moving_js' => 'Nessuna transazione|Salva questa transazione spostandola in un altro conto.|Salva queste transazioni spostandole in un altro conto.', - 'stored_new_account' => 'Nuovo conto ":name" stored!', - 'stored_new_account_js' => 'Nuovo conto "{name}" salvato!', - 'updated_account' => 'Aggiorna conto ":name"', - 'updated_account_js' => 'Conto "{title}" aggiornato.', - 'credit_card_options' => 'Opzioni carta di credito', - 'no_transactions_account' => 'Non ci sono transazioni (in questo periodo) per il conto attività ":name".', - 'no_transactions_period' => 'Non ci sono transazioni (in questo periodo).', - 'no_data_for_chart' => 'Non ci sono (ancora) abbastanza informazioni per generare questo grafico.', - 'select_at_least_one_account' => 'Seleziona almeno un conto attività', - 'select_at_least_one_category' => 'Seleziona almeno una categoria', - 'select_at_least_one_budget' => 'Seleziona almeno un budget', - 'select_at_least_one_tag' => 'Seleziona almeno un\'etichetta', - 'select_at_least_one_expense' => 'Seleziona almeno una combinazione di conti spese/entrate. Se non ne hai nessuno (la lista è vuota) questo resoconto non è disponibile.', - 'account_default_currency' => 'Questa sarà la valuta predefinita associata a questo conto.', - 'reconcile_has_more' => 'Il libro mastro di Firefly III ha più denaro rispetto a quanto afferma la tua banca. Ci sono diverse opzioni. Scegli cosa fare. In seguito, premi "Conferma riconciliazione".', - 'reconcile_has_less' => 'Il tuo conto Firefly III ha meno denaro rispetto a quanto afferma la tua banca. Ci sono diverse opzioni Si prega di scegliere cosa fare. Quindi, premi "Conferma riconciliazione".', - 'reconcile_is_equal' => 'Il libro mastro di Firefly III e i tuoi estratti conto bancari corrispondono. Non c\'è niente da fare. Premi "Conferma riconciliazione" per confermare l\'inserimento.', - 'create_pos_reconcile_transaction' => 'Concilia le transazioni selezionate e crea una correzione aggiungendo :amount a questo conto attività.', - 'create_neg_reconcile_transaction' => 'Concilia le transazioni selezionate e crea una correzione rimuovendo :amount da questo conto attività.', - 'reconcile_do_nothing' => 'Concilia le transazioni selezionate, ma non correggere.', - 'reconcile_go_back' => 'Puoi sempre modificare o eliminare una correzione in un secondo momento.', - 'must_be_asset_account' => 'È possibile riconciliare solo i conti attività', - 'reconciliation_stored' => 'Riconciliazione memorizzata', - 'reconciliation_error' => 'A causa di un errore le transazioni sono state contrassegnate come riconciliate ma la correzione non è stata memorizzata: :error.', - 'reconciliation_transaction_title' => 'Riconciliazione (:from - :to)', - 'sum_of_reconciliation' => 'Somma riconciliazione', - 'reconcile_this_account' => 'Riconcilia questo conto', - 'reconcile' => 'Riconcilia', - 'show' => 'Mostra', - 'confirm_reconciliation' => 'Conferma riconciliazione', - 'submitted_start_balance' => 'Saldo iniziale inserito', - 'selected_transactions' => 'Transazioni selezionate (:count)', - 'already_cleared_transactions' => 'Transazioni già conciliate (:count)', - 'submitted_end_balance' => 'Saldo finale inserito', - 'initial_balance_description' => 'Saldo iniziale per ":account"', - 'liability_credit_description' => 'Credito passività per ":account"', - 'interest_calc_' => 'sconosciuto', - 'interest_calc_daily' => 'Al giorno', - 'interest_calc_monthly' => 'Al mese', - 'interest_calc_yearly' => 'All\'anno', - 'interest_calc_weekly' => 'Settimanale', - 'interest_calc_half-year' => 'Semestrale', - 'interest_calc_quarterly' => 'Trimestrale', - 'initial_balance_account' => 'Saldo iniziale del conto :account', - 'list_options' => 'Lista opzioni', + 'i_am_owed_amount' => 'Mi è dovuto l\'importo', + 'i_owe_amount' => 'Devo l\'importo', + 'inactive_account_link' => 'Hai :count conto inattivo (archiviato), che puoi visualizzare in questa pagina separata.|Hai :count conti inattivi (archiviati), che puoi visualizzare in questa pagina separata.', + 'all_accounts_inactive' => 'Questi sono i tuoi conti inattivi.', + 'active_account_link' => 'Questo collegamento ti riporta ai conti attivi.', + 'account_missing_transaction' => 'Non è possibile visualizzare il conto #:id (":name") direttamente, a Firefly mancano le informazioni per il reindirizzamento.', + 'cc_monthly_payment_date_help' => 'Seleziona qualsiasi anno e mese, verrà comunque ignorato. Solo il giorno del mese è rilevante.', + 'details_for_asset' => 'Dettagli per conto attività ":name"', + 'details_for_expense' => 'Dettagli per conto uscite ":name"', + 'details_for_revenue' => 'Dettagli per conto entrate ":name"', + 'details_for_cash' => 'Dettagli per il conto contanti ":name"', + 'store_new_asset_account' => 'Salva nuovo conto attività', + 'store_new_expense_account' => 'Salva il nuovo conto uscite', + 'store_new_revenue_account' => 'Salva il nuovo conto entrate', + 'edit_asset_account' => 'Modifica conto attività ":name"', + 'edit_expense_account' => 'Modifica conto uscite ":name"', + 'edit_revenue_account' => 'Modifica conto entrate ":name"', + 'delete_asset_account' => 'Elimina conto attività ":name"', + 'delete_expense_account' => 'Elimina conto uscite ":name"', + 'delete_revenue_account' => 'Elimina conto entrate ":name"', + 'delete_liabilities_account' => 'Elimina passività ":name"', + 'asset_deleted' => 'Conto attività ":name" eliminato correttamente', + 'account_deleted' => 'Il conto ":name" è stato eliminato con successo', + 'expense_deleted' => 'Conto uscite ":name" eliminato correttamente', + 'revenue_deleted' => 'Conto entrate ":name" eliminato correttamente', + 'update_asset_account' => 'Aggiorna conto attività', + 'update_undefined_account' => 'Aggiorna conto', + 'update_liabilities_account' => 'Aggiorna passività', + 'update_expense_account' => 'Aggiorna conto uscite', + 'update_revenue_account' => 'Aggiorna conto entrate', + 'make_new_asset_account' => 'Crea un nuovo conto attività', + 'make_new_expense_account' => 'Crea un nuovo conto uscite', + 'make_new_revenue_account' => 'Crea nuovo conto entrate', + 'make_new_liabilities_account' => 'Crea una nuova passività', + 'asset_accounts' => 'Conti attività', + 'undefined_accounts' => 'Conti', + 'asset_accounts_inactive' => 'Conti attività (inattivi)', + 'expense_account' => 'Conto di spese', + 'expense_accounts' => 'Conti uscite', + 'expense_accounts_inactive' => 'Conti spese (inattivi)', + 'revenue_account' => 'Conto di entrate', + 'revenue_accounts' => 'Conti entrate', + 'revenue_accounts_inactive' => 'Conti entrate (inattivi)', + 'cash_accounts' => 'Conti contanti', + 'Cash account' => 'Conto contanti', + 'liabilities_accounts' => 'Passività', + 'liabilities_accounts_inactive' => 'Passività (inattive)', + 'reconcile_account' => 'Riconciliazione conto ":account"', + 'overview_of_reconcile_modal' => 'Panoramica della riconciliazione', + 'delete_reconciliation' => 'Elimina riconciliazione', + 'update_reconciliation' => 'Aggiorna riconciliazione', + 'amount_cannot_be_zero' => 'L\'importo non può essere zero', + 'end_of_reconcile_period' => 'Fine periodo riconciliazione: :period', + 'start_of_reconcile_period' => 'Inizio periodo riconciliazione: :period', + 'start_balance' => 'Saldo iniziale', + 'end_balance' => 'Saldo finale', + 'update_balance_dates_instruction' => 'Abbina gli importi e le date qui sopra al tuo estratto conto e premi "Inizia la riconciliazione"', + 'select_transactions_instruction' => 'Seleziona le transazioni che appaiono sul tuo estratto conto.', + 'select_range_and_balance' => 'Innanzitutto verifica l\'intervallo delle date e i saldi. Quindi premi "Inizia la riconciliazione"', + 'date_change_instruction' => 'Se cambi ora l\'intervallo di date, qualsiasi progresso andrà perso.', + 'update_selection' => 'Aggiorna selezione', + 'store_reconcile' => 'Memorizza la riconciliazione', + 'reconciliation_transaction' => 'Transazione di riconciliazione', + 'Reconciliation' => 'Riconciliazione', + 'reconciliation' => 'Riconciliazione', + 'reconcile_options' => 'Opzioni di riconciliazione', + 'reconcile_range' => 'Intervallo di riconciliazione', + 'start_reconcile' => 'Inizia la riconciliazione', + 'cash_account_type' => 'Contante', + 'cash' => 'contanti', + 'cant_find_redirect_account' => 'Firefly III ha provato a reindirizzare ma non è riuscito. Ci dispiace. Torna all\'indice.', + 'account_type' => 'Tipo conto', + 'save_transactions_by_moving' => 'Salva questa transazione spostandola in un altro conto:|Salva queste transazioni spostandole in un altro conto:', + 'save_transactions_by_moving_js' => 'Nessuna transazione|Salva questa transazione spostandola in un altro conto.|Salva queste transazioni spostandole in un altro conto.', + 'stored_new_account' => 'Nuovo conto ":name" stored!', + 'stored_new_account_js' => 'Nuovo conto "{name}" salvato!', + 'updated_account' => 'Aggiorna conto ":name"', + 'updated_account_js' => 'Conto "{title}" aggiornato.', + 'credit_card_options' => 'Opzioni carta di credito', + 'no_transactions_account' => 'Non ci sono transazioni (in questo periodo) per il conto attività ":name".', + 'no_transactions_period' => 'Non ci sono transazioni (in questo periodo).', + 'no_data_for_chart' => 'Non ci sono (ancora) abbastanza informazioni per generare questo grafico.', + 'select_at_least_one_account' => 'Seleziona almeno un conto attività', + 'select_at_least_one_category' => 'Seleziona almeno una categoria', + 'select_at_least_one_budget' => 'Seleziona almeno un budget', + 'select_at_least_one_tag' => 'Seleziona almeno un\'etichetta', + 'select_at_least_one_expense' => 'Seleziona almeno una combinazione di conti spese/entrate. Se non ne hai nessuno (la lista è vuota) questo resoconto non è disponibile.', + 'account_default_currency' => 'Questa sarà la valuta predefinita associata a questo conto.', + 'reconcile_has_more' => 'Il libro mastro di Firefly III ha più denaro rispetto a quanto afferma la tua banca. Ci sono diverse opzioni. Scegli cosa fare. In seguito, premi "Conferma riconciliazione".', + 'reconcile_has_less' => 'Il tuo conto Firefly III ha meno denaro rispetto a quanto afferma la tua banca. Ci sono diverse opzioni Si prega di scegliere cosa fare. Quindi, premi "Conferma riconciliazione".', + 'reconcile_is_equal' => 'Il libro mastro di Firefly III e i tuoi estratti conto bancari corrispondono. Non c\'è niente da fare. Premi "Conferma riconciliazione" per confermare l\'inserimento.', + 'create_pos_reconcile_transaction' => 'Concilia le transazioni selezionate e crea una correzione aggiungendo :amount a questo conto attività.', + 'create_neg_reconcile_transaction' => 'Concilia le transazioni selezionate e crea una correzione rimuovendo :amount da questo conto attività.', + 'reconcile_do_nothing' => 'Concilia le transazioni selezionate, ma non correggere.', + 'reconcile_go_back' => 'Puoi sempre modificare o eliminare una correzione in un secondo momento.', + 'must_be_asset_account' => 'È possibile riconciliare solo i conti attività', + 'reconciliation_stored' => 'Riconciliazione memorizzata', + 'reconciliation_error' => 'A causa di un errore le transazioni sono state contrassegnate come riconciliate ma la correzione non è stata memorizzata: :error.', + 'reconciliation_transaction_title' => 'Riconciliazione (:from - :to)', + 'sum_of_reconciliation' => 'Somma riconciliazione', + 'reconcile_this_account' => 'Riconcilia questo conto', + 'reconcile' => 'Riconcilia', + 'show' => 'Mostra', + 'confirm_reconciliation' => 'Conferma riconciliazione', + 'submitted_start_balance' => 'Saldo iniziale inserito', + 'selected_transactions' => 'Transazioni selezionate (:count)', + 'already_cleared_transactions' => 'Transazioni già conciliate (:count)', + 'submitted_end_balance' => 'Saldo finale inserito', + 'initial_balance_description' => 'Saldo iniziale per ":account"', + 'liability_credit_description' => 'Credito passività per ":account"', + 'interest_calc_' => 'sconosciuto', + 'interest_calc_daily' => 'Al giorno', + 'interest_calc_monthly' => 'Al mese', + 'interest_calc_yearly' => 'All\'anno', + 'interest_calc_weekly' => 'Settimanale', + 'interest_calc_half-year' => 'Semestrale', + 'interest_calc_quarterly' => 'Trimestrale', + 'initial_balance_account' => 'Saldo iniziale del conto :account', + 'list_options' => 'Lista opzioni', // categories: - 'new_category' => 'Nuova categoria', - 'create_new_category' => 'Crea nuova categoria', - 'without_category' => 'Senza categoria', - 'update_category' => 'Aggiorna categoria', - 'updated_category' => 'Aggiorna categoria ":name"', - 'categories' => 'Categorie', - 'edit_category' => 'Modifica categoria ":name"', - 'no_category' => '(nessuna categoria)', - 'unknown_category_plain' => 'No category', - 'category' => 'Categoria', - 'delete_category' => 'Elimina categoria ":name"', - 'deleted_category' => 'Categoria eliminata ":name"', - 'store_category' => 'Salva nuova categoria', - 'stored_category' => 'Salva nuova categoria ":name"', - 'without_category_between' => 'Senza categoria tra :start e :end', + 'new_category' => 'Nuova categoria', + 'create_new_category' => 'Crea nuova categoria', + 'without_category' => 'Senza categoria', + 'update_category' => 'Aggiorna categoria', + 'updated_category' => 'Aggiorna categoria ":name"', + 'categories' => 'Categorie', + 'edit_category' => 'Modifica categoria ":name"', + 'no_category' => '(nessuna categoria)', + 'unknown_category_plain' => 'Nessuna categoria', + 'category' => 'Categoria', + 'delete_category' => 'Elimina categoria ":name"', + 'deleted_category' => 'Categoria eliminata ":name"', + 'store_category' => 'Salva nuova categoria', + 'stored_category' => 'Salva nuova categoria ":name"', + 'without_category_between' => 'Senza categoria tra :start e :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Aggiorna prelievo', - 'update_deposit' => 'Aggiorna entrata', - 'update_transaction' => 'Aggiorna transazione', - 'update_transfer' => 'Aggiorna trasferimento', - 'updated_withdrawal' => 'Prelievo ":description" aggiornato', - 'updated_deposit' => 'Entrata aggiornata ":description"', - 'updated_transfer' => 'Trasferimento ":description" aggiornato', - 'no_changes_withdrawal' => 'La ":description" del prelievo non è stata modificata.', - 'no_changes_deposit' => 'La ":description" del deposito non è stata modificata.', - 'no_changes_transfer' => 'La ":description" del trasferimento non è stata modificata.', - 'delete_withdrawal' => 'Elimina prelievo ":description"', - 'delete_deposit' => 'Elimina entrata ":description"', - 'delete_transfer' => 'Elimina trasferimento ":description"', - 'deleted_withdrawal' => 'Prelievo ":description" eliminato correttamente', - 'deleted_deposit' => 'Entrata ":description" eliminata correttamente', - 'deleted_transfer' => 'Trasferimento ":description" eliminato correttamente', - 'deleted_reconciliation' => 'Transazione di riconciliazione ":description" elimina con successo', - 'stored_journal' => 'Nuova transazione ":description" creata correttamente', - 'stored_journal_no_descr' => 'Hai creato con successo la nuova transazione', - 'updated_journal_no_descr' => 'Transazione aggiornata con successo', - 'select_transactions' => 'Seleziona transazioni', - 'rule_group_select_transactions' => 'Applica ":title" a transazioni', - 'rule_select_transactions' => 'Applica ":title" a transazioni', - 'stop_selection' => 'Smetti di selezionare le transazioni', - 'reconcile_selected' => 'Riconcilia', - 'mass_delete_journals' => 'Elimina un certo numero di transazioni', - 'mass_edit_journals' => 'Modifica un certo numero di transazioni', - 'mass_bulk_journals' => 'Modifica in blocco un certo numero di transazioni', - 'mass_bulk_journals_explain' => 'Questo modulo di consente di cambiare le proprietà delle transazioni elencate di seguito in un unico aggiornamento. Tutte le transazioni nella tabella verranno aggiornate quando cambi i parametri che vedi.', - 'part_of_split' => 'Questa transazione fa parte di una transazione suddivisa. Se non hai selezionato tutte le suddivisioni, potresti finire con il modificare solo metà della transazione.', - 'bulk_set_new_values' => 'Usa gli inserimenti qui sotto per impostare nuovi valori. Se li lasci vuoti, saranno resi vuoti per tutti. Inoltre, si noti che solo i prelievi avranno un budget.', - 'no_bulk_category' => 'Non aggiornare la categoria', - 'no_bulk_budget' => 'Non aggiornare il budget', - 'no_bulk_tags' => 'Non aggiornare le etichette', - 'replace_with_these_tags' => 'Sostituisci con queste etichette', - 'append_these_tags' => 'Aggiungi queste etichette', - 'mass_edit' => 'Modifica singolarmente le selezionate', - 'bulk_edit' => 'Modifica in gruppo le selezionate', - 'mass_delete' => 'Elimina selezionate', - 'cannot_edit_other_fields' => 'Non puoi modificare in blocco altri campi oltre a quelli presenti perché non c\'è spazio per mostrarli. Segui il link e modificali uno per uno se è necessario modificare questi campi.', - 'cannot_change_amount_reconciled' => 'Non puoi cambiare l\'importo delle transazioni riconciliate.', - 'no_budget' => '(nessun budget)', - 'no_bill' => '(nessuna bolletta)', - 'account_per_budget' => 'Conto per budget', - 'account_per_category' => 'Conto per categoria', - 'create_new_object' => 'Crea', - 'empty' => '(vuoto)', - 'all_other_budgets' => '(tutti gli altri budget)', - 'all_other_accounts' => '(tutti gli altri conti)', - 'expense_per_source_account' => 'Spese per conto di origine', - 'expense_per_destination_account' => 'Spese per conto di destinazione', - 'income_per_destination_account' => 'Entrate per conto di destinazione', - 'spent_in_specific_category' => 'Spesi nella categoria ":category"', - 'earned_in_specific_category' => 'Guadagnati nella categoria ":category"', - 'spent_in_specific_tag' => 'Spesi per l\'etichetta ":tag"', - 'earned_in_specific_tag' => 'Guadagnati per l\'etichetta ":tag"', - 'income_per_source_account' => 'Reddito per conto di origine', - 'average_spending_per_destination' => 'Spesa media per conto di destinazione', - 'average_spending_per_source' => 'Spesa media per conto di origine', - 'average_earning_per_source' => 'Guadagno medio per conto di origine', - 'average_earning_per_destination' => 'Guadagno medio per conto di destinazione', - 'account_per_tag' => 'Conto per etichetta', - 'tag_report_expenses_listed_once' => 'Spese e entrate non sono mai elencate due volte. Se una transazione ha più di un\'etichetta, potrebbe apparire sotto solo uno delle sue etichette. Può sembrare che questa lista manchi di alcuni dati ma gli importi saranno corretti.', - 'double_report_expenses_charted_once' => 'Spese e entrate non sono mai visualizzate due volte. Se una transazione ha più di un\'etichetta, potrebbe apparire sotto solo uno delle sue etichette. Può sembrare che questo grafico manchi di alcuni dati ma gli importi saranno corretti.', - 'tag_report_chart_single_tag' => 'Questo grafico è valido per una singola etichetta. Se una transazione ha più di una etichetta, quello che tu vedi qui potrebbe vedersi anche nei grafici delle altre etichette.', - 'tag' => 'Etichetta', - 'no_budget_squared' => '(nessun budget)', - 'perm-delete-many' => 'Eliminare molti elementi in una sola volta può essere molto pericoloso. Sii cauto. Da questa pagina puoi eliminare parte di una transazione suddivisa, quindi fallo con attenzione.', - 'mass_deleted_transactions_success' => ':count transazione eliminata.|:count transazioni eliminate.', - 'mass_edited_transactions_success' => ':count transazione aggiornata.|:count transazioni aggiornate.', - 'opt_group_' => '(nessun tipo di conto)', - 'opt_group_no_account_type' => '(nessun tipo di conto)', - 'opt_group_defaultAsset' => 'Conti attività predefiniti', - 'opt_group_savingAsset' => 'Conti risparmio', - 'opt_group_sharedAsset' => 'Conti attività condivisi', - 'opt_group_ccAsset' => 'Carte di credito', - 'opt_group_cashWalletAsset' => 'Portafogli', - 'opt_group_expense_account' => 'Conti uscite', - 'opt_group_revenue_account' => 'Conti entrate', - 'opt_group_l_Loan' => 'Passività: Prestito', - 'opt_group_cash_account' => 'Conto contanti', - 'opt_group_l_Debt' => 'Passività: Debito', - 'opt_group_l_Mortgage' => 'Passività: Mutuo', - 'opt_group_l_Credit card' => 'Passività: Carta di credito', - 'notes' => 'Note', - 'unknown_journal_error' => 'Impossibile memorizzare la transazione. Controllare i file di log.', - 'attachment_not_found' => 'Impossibile trovare questo allegato.', - 'journal_link_bill' => 'Questa transazione è collegata alla bolletta :name. Per rimuovere il collegamento, deseleziona la casella di controllo. Usa le regole per collegarla ad un\'altra bolletta.', - 'transaction_stored_link' => 'La transazione #{ID} ("{title}") è stata salvata.', - 'transaction_new_stored_link' => 'La transazione #{ID} è stata salvata.', - 'transaction_updated_link' => 'La transazione #{ID} ("{title}") è stata aggiornata.', - 'transaction_updated_no_changes' => 'La transazione #{ID} ("{title}") non ha avuto cambiamenti.', - 'first_split_decides' => 'La prima suddivisione determina il valore di questo campo', - 'first_split_overrules_source' => 'La prima suddivisione potrebbe sovrascrivere l\'account di origine', - 'first_split_overrules_destination' => 'La prima suddivisione potrebbe sovrascrivere l\'account di destinazione', - 'spent_x_of_y' => 'Spesi {amount} di {total}', + 'wait_loading_transaction' => 'Attendi il caricamento del modello', + 'wait_loading_data' => 'Ti preghiamo di attendere il caricamento delle tue informazioni...', + 'wait_attachments' => 'Attendere che gli allegati vengano caricati.', + 'errors_upload' => 'Caricamento fallito. Controlla la console del tuo browser per l\'errore.', + 'amount_foreign_if' => 'Importo in valuta estera, nel caso', + 'amount_destination_account' => 'Importo nella valuta del conto di destinazione', + 'edit_transaction_title' => 'Modifica transazione ":description"', + 'unreconcile' => 'Annulla riconciliazione', + 'update_withdrawal' => 'Aggiorna prelievo', + 'update_deposit' => 'Aggiorna entrata', + 'update_transaction' => 'Aggiorna transazione', + 'update_transfer' => 'Aggiorna trasferimento', + 'updated_withdrawal' => 'Prelievo ":description" aggiornato', + 'updated_deposit' => 'Entrata aggiornata ":description"', + 'updated_transfer' => 'Trasferimento ":description" aggiornato', + 'no_changes_withdrawal' => 'La ":description" del prelievo non è stata modificata.', + 'no_changes_deposit' => 'La ":description" del deposito non è stata modificata.', + 'no_changes_transfer' => 'La ":description" del trasferimento non è stata modificata.', + 'delete_withdrawal' => 'Elimina prelievo ":description"', + 'delete_deposit' => 'Elimina entrata ":description"', + 'delete_transfer' => 'Elimina trasferimento ":description"', + 'deleted_withdrawal' => 'Prelievo ":description" eliminato correttamente', + 'deleted_deposit' => 'Entrata ":description" eliminata correttamente', + 'deleted_transfer' => 'Trasferimento ":description" eliminato correttamente', + 'deleted_reconciliation' => 'Transazione di riconciliazione ":description" elimina con successo', + 'stored_journal' => 'Nuova transazione ":description" creata correttamente', + 'stored_journal_js' => 'Nuova transazione "%{description}" creata correttamente', + 'stored_journal_no_descr' => 'Hai creato con successo la nuova transazione', + 'updated_journal_no_descr' => 'Transazione aggiornata con successo', + 'select_transactions' => 'Seleziona transazioni', + 'rule_group_select_transactions' => 'Applica ":title" a transazioni', + 'rule_select_transactions' => 'Applica ":title" a transazioni', + 'stop_selection' => 'Smetti di selezionare le transazioni', + 'reconcile_selected' => 'Riconcilia', + 'mass_delete_journals' => 'Elimina un certo numero di transazioni', + 'mass_edit_journals' => 'Modifica un certo numero di transazioni', + 'mass_bulk_journals' => 'Modifica in blocco un certo numero di transazioni', + 'mass_bulk_journals_explain' => 'Questo modulo di consente di cambiare le proprietà delle transazioni elencate di seguito in un unico aggiornamento. Tutte le transazioni nella tabella verranno aggiornate quando cambi i parametri che vedi.', + 'part_of_split' => 'Questa transazione fa parte di una transazione suddivisa. Se non hai selezionato tutte le suddivisioni, potresti finire con il modificare solo metà della transazione.', + 'bulk_set_new_values' => 'Usa gli inserimenti qui sotto per impostare nuovi valori. Se li lasci vuoti, saranno resi vuoti per tutti. Inoltre, si noti che solo i prelievi avranno un budget.', + 'no_bulk_category' => 'Non aggiornare la categoria', + 'no_bulk_budget' => 'Non aggiornare il budget', + 'no_bulk_tags' => 'Non aggiornare le etichette', + 'replace_with_these_tags' => 'Sostituisci con queste etichette', + 'append_these_tags' => 'Aggiungi queste etichette', + 'mass_edit' => 'Modifica singolarmente le selezionate', + 'bulk_edit' => 'Modifica in gruppo le selezionate', + 'mass_delete' => 'Elimina selezionate', + 'cannot_edit_other_fields' => 'Non puoi modificare in blocco altri campi oltre a quelli presenti perché non c\'è spazio per mostrarli. Segui il link e modificali uno per uno se è necessario modificare questi campi.', + 'cannot_change_amount_reconciled' => 'Non puoi cambiare l\'importo delle transazioni riconciliate.', + 'no_budget' => '(nessun budget)', + 'no_bill' => '(nessuna bolletta)', + 'account_per_budget' => 'Conto per budget', + 'account_per_category' => 'Conto per categoria', + 'create_new_object' => 'Crea', + 'empty' => '(vuoto)', + 'all_other_budgets' => '(tutti gli altri budget)', + 'all_other_accounts' => '(tutti gli altri conti)', + 'expense_per_source_account' => 'Spese per conto di origine', + 'expense_per_destination_account' => 'Spese per conto di destinazione', + 'income_per_destination_account' => 'Entrate per conto di destinazione', + 'spent_in_specific_category' => 'Spesi nella categoria ":category"', + 'earned_in_specific_category' => 'Guadagnati nella categoria ":category"', + 'spent_in_specific_tag' => 'Spesi per l\'etichetta ":tag"', + 'earned_in_specific_tag' => 'Guadagnati per l\'etichetta ":tag"', + 'income_per_source_account' => 'Reddito per conto di origine', + 'average_spending_per_destination' => 'Spesa media per conto di destinazione', + 'average_spending_per_source' => 'Spesa media per conto di origine', + 'average_earning_per_source' => 'Guadagno medio per conto di origine', + 'average_earning_per_destination' => 'Guadagno medio per conto di destinazione', + 'account_per_tag' => 'Conto per etichetta', + 'tag_report_expenses_listed_once' => 'Spese e entrate non sono mai elencate due volte. Se una transazione ha più di un\'etichetta, potrebbe apparire sotto solo uno delle sue etichette. Può sembrare che questa lista manchi di alcuni dati ma gli importi saranno corretti.', + 'double_report_expenses_charted_once' => 'Spese e entrate non sono mai visualizzate due volte. Se una transazione ha più di un\'etichetta, potrebbe apparire sotto solo uno delle sue etichette. Può sembrare che questo grafico manchi di alcuni dati ma gli importi saranno corretti.', + 'tag_report_chart_single_tag' => 'Questo grafico è valido per una singola etichetta. Se una transazione ha più di una etichetta, quello che tu vedi qui potrebbe vedersi anche nei grafici delle altre etichette.', + 'tag' => 'Etichetta', + 'no_budget_squared' => '(nessun budget)', + 'perm-delete-many' => 'Eliminare molti elementi in una sola volta può essere molto pericoloso. Sii cauto. Da questa pagina puoi eliminare parte di una transazione suddivisa, quindi fallo con attenzione.', + 'mass_deleted_transactions_success' => ':count transazione eliminata.|:count transazioni eliminate.', + 'mass_edited_transactions_success' => ':count transazione aggiornata.|:count transazioni aggiornate.', + 'opt_group_' => '(nessun tipo di conto)', + 'opt_group_no_account_type' => '(nessun tipo di conto)', + 'opt_group_defaultAsset' => 'Conti attività predefiniti', + 'opt_group_savingAsset' => 'Conti risparmio', + 'opt_group_sharedAsset' => 'Conti attività condivisi', + 'opt_group_ccAsset' => 'Carte di credito', + 'opt_group_cashWalletAsset' => 'Portafogli', + 'opt_group_expense_account' => 'Conti uscite', + 'opt_group_revenue_account' => 'Conti entrate', + 'opt_group_l_Loan' => 'Passività: Prestito', + 'opt_group_cash_account' => 'Conto contanti', + 'opt_group_l_Debt' => 'Passività: Debito', + 'opt_group_l_Mortgage' => 'Passività: Mutuo', + 'opt_group_l_Credit card' => 'Passività: Carta di credito', + 'notes' => 'Note', + 'unknown_journal_error' => 'Impossibile memorizzare la transazione. Controllare i file di log.', + 'attachment_not_found' => 'Impossibile trovare questo allegato.', + 'journal_link_bill' => 'Questa transazione è collegata alla bolletta :name. Per rimuovere il collegamento, deseleziona la casella di controllo. Usa le regole per collegarla ad un\'altra bolletta.', + 'transaction_stored_link' => 'La transazione #{ID} ("{title}") è stata salvata.', + 'transaction_new_stored_link' => 'La transazione #{ID} è stata salvata.', + 'transaction_updated_link' => 'La transazione #{ID} ("{title}") è stata aggiornata.', + 'transaction_updated_no_changes' => 'La transazione #{ID} ("{title}") non ha avuto cambiamenti.', + 'first_split_decides' => 'La prima suddivisione determina il valore di questo campo', + 'first_split_overrules_source' => 'La prima suddivisione potrebbe sovrascrivere l\'account di origine', + 'first_split_overrules_destination' => 'La prima suddivisione potrebbe sovrascrivere l\'account di destinazione', + 'spent_x_of_y' => 'Spesi {amount} di {total}', // new user: - 'welcome' => 'Benvenuto in Firefly III!', - 'submit' => 'Invia', - 'submission' => 'Invio', - 'submit_yes_really' => 'Invia (sì, so quello che sto facendo)', - 'getting_started' => 'Inizia', - 'to_get_started' => 'È bello vedere che hai installato Firefly III con successo. Per iniziare con questo strumento, inserisci il nome della tua banca e il saldo del tuo conto corrente principale. Non preoccuparti se hai più conti. È possibile aggiungere quelli più tardi. Firefly III ha bisogno di qualcosa per iniziare.', - 'savings_balance_text' => 'Firefly III creerà automaticamente un conto di risparmio per te. Per impostazione predefinita, non ci saranno soldi nel tuo conto di risparmio, ma se comunichi a Firefly III il saldo verrà salvato come tale.', - 'finish_up_new_user' => 'Questo è tutto! Puoi continuare premendo Invia. Verrai indirizzato all\'indice di Firefly III.', - 'stored_new_accounts_new_user' => 'I tuoi nuovi conti sono stati salvati.', - 'set_preferred_language' => 'Se preferisci usare Firefly III in un\'altra lingua, impostala qui.', - 'language' => 'Lingua', - 'new_savings_account' => 'Conto di risparmio :bank_name', - 'cash_wallet' => 'Portafoglio', - 'currency_not_present' => 'Se la valuta che usi normalmente non è elencata, non preoccuparti. Puoi creare le tue valute in Opzioni > Valute.', + 'welcome' => 'Benvenuto in Firefly III!', + 'submit' => 'Invia', + 'submission' => 'Invio', + 'submit_yes_really' => 'Invia (sì, so quello che sto facendo)', + 'getting_started' => 'Inizia', + 'to_get_started' => 'È bello vedere che hai installato Firefly III con successo. Per iniziare con questo strumento, inserisci il nome della tua banca e il saldo del tuo conto corrente principale. Non preoccuparti se hai più conti. È possibile aggiungere quelli più tardi. Firefly III ha bisogno di qualcosa per iniziare.', + 'savings_balance_text' => 'Firefly III creerà automaticamente un conto di risparmio per te. Per impostazione predefinita, non ci saranno soldi nel tuo conto di risparmio, ma se comunichi a Firefly III il saldo verrà salvato come tale.', + 'finish_up_new_user' => 'Questo è tutto! Puoi continuare premendo Invia. Verrai indirizzato all\'indice di Firefly III.', + 'stored_new_accounts_new_user' => 'I tuoi nuovi conti sono stati salvati.', + 'set_preferred_language' => 'Se preferisci usare Firefly III in un\'altra lingua, impostala qui.', + 'language' => 'Lingua', + 'new_savings_account' => 'Conto di risparmio :bank_name', + 'cash_wallet' => 'Portafoglio', + 'currency_not_present' => 'Se la valuta che usi normalmente non è elencata, non preoccuparti. Puoi creare le tue valute in Opzioni > Valute.', // home page: - 'transaction_table_description' => 'Una tabella contenente le tue transazioni', - 'opposing_account' => 'Conto beneficiario', - 'yourAccounts' => 'I tuoi conti', - 'your_accounts' => 'Panoramica del tuo account', - 'category_overview' => 'Panoramica della categoria', - 'expense_overview' => 'Panoramica del conto spese', - 'revenue_overview' => 'Panoramica del conto entrate', - 'budgetsAndSpending' => 'Budget e spese', - 'budgets_and_spending' => 'Budget e spese', - 'go_to_budget' => 'Vai al budget "{budget}"', - 'go_to_deposits' => 'Vai ai depositi', - 'go_to_expenses' => 'Vai alle spese', - 'savings' => 'Risparmi', - 'newWithdrawal' => 'Nuova uscita', - 'newDeposit' => 'Nuova entrata', - 'newTransfer' => 'Nuovo trasferimento', - 'bills_to_pay' => 'Bollette da pagare', - 'per_day' => 'Al giorno', - 'left_to_spend_per_day' => 'Spese al giorno', - 'bills_paid' => 'Bollette pagate', - 'custom_period' => 'Periodo personalizzato', - 'reset_to_current' => 'Ripristina il periodo corrente', - 'select_period' => 'Seleziona il periodo', + 'transaction_table_description' => 'Una tabella contenente le tue transazioni', + 'opposing_account' => 'Conto beneficiario', + 'yourAccounts' => 'I tuoi conti', + 'your_accounts' => 'Panoramica del tuo account', + 'category_overview' => 'Panoramica della categoria', + 'expense_overview' => 'Panoramica del conto spese', + 'revenue_overview' => 'Panoramica del conto entrate', + 'budgetsAndSpending' => 'Budget e spese', + 'budgets_and_spending' => 'Budget e spese', + 'go_to_budget' => 'Vai al budget "{budget}"', + 'go_to_deposits' => 'Vai ai depositi', + 'go_to_expenses' => 'Vai alle spese', + 'savings' => 'Risparmi', + 'newWithdrawal' => 'Nuova uscita', + 'newDeposit' => 'Nuova entrata', + 'newTransfer' => 'Nuovo trasferimento', + 'bills_to_pay' => 'Bollette da pagare', + 'per_day' => 'Al giorno', + 'left_to_spend_per_day' => 'Spese al giorno', + 'bills_paid' => 'Bollette pagate', + 'custom_period' => 'Periodo personalizzato', + 'reset_to_current' => 'Ripristina il periodo corrente', + 'select_period' => 'Seleziona il periodo', // menu and titles, should be recycled as often as possible: - 'currency' => 'Valuta', - 'preferences' => 'Preferenze', - 'logout' => 'Esci', - 'logout_other_sessions' => 'Esci da tutte le altre sessioni', - 'toggleNavigation' => 'Attiva / disattiva la navigazione', - 'searchPlaceholder' => 'Cerca...', - 'version' => 'Versione', - 'dashboard' => 'Cruscotto', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Budget disponibile ({currency})', - 'currencies' => 'Valute', - 'activity' => 'Attività', - 'usage' => 'Uso', - 'accounts' => 'Conti', - 'Asset account' => 'Conto attività', - 'Default account' => 'Conto attività', - 'Expense account' => 'Conto spese', - 'Revenue account' => 'Conto entrate', - 'Initial balance account' => 'Saldo iniziale conto', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Debito', - 'account_type_Loan' => 'Prestito', - 'account_type_Mortgage' => 'Mutuo', - 'account_type_debt' => 'Debito', - 'account_type_loan' => 'Prestito', - 'account_type_mortgage' => 'Mutuo', - 'account_type_Credit card' => 'Carta di credito', - 'credit_card_type_monthlyFull' => 'Pagamento intero ogni mese', - 'liability_direction_credit' => 'Questo debito mi è dovuto', - 'liability_direction_debit' => 'Devo questo debito a qualcun altro', - 'liability_direction_credit_short' => 'Mi devono questo debito', - 'liability_direction_debit_short' => 'Devo questo debito', - 'liability_direction__short' => 'Sconosciuta', - 'liability_direction_null_short' => 'Sconosciuta', - 'Liability credit' => 'Credito passività', - 'budgets' => 'Budget', - 'tags' => 'Etichette', - 'reports' => 'Resoconti', - 'transactions' => 'Transazioni', - 'expenses' => 'Spese / uscite', - 'income' => 'Redditi / entrate', - 'transfers' => 'Trasferimenti', - 'moneyManagement' => 'Gestione denaro', - 'money_management' => 'Gestione del denaro', - 'tools' => 'Strumenti', - 'piggyBanks' => 'Salvadanai', - 'piggy_banks' => 'Salvadanai', - 'amount_x_of_y' => '{current} di {total}', - 'bills' => 'Bollette', - 'withdrawal' => 'Uscita', - 'opening_balance' => 'Saldo di apertura', - 'deposit' => 'Entrata', - 'account' => 'Conto', - 'transfer' => 'Trasferimento', - 'Withdrawal' => 'Prelievo', - 'Deposit' => 'Entrata', - 'Transfer' => 'Trasferimento', - 'bill' => 'Bolletta', - 'yes' => 'Si', - 'no' => 'No', - 'amount' => 'Importo', - 'overview' => 'Panoramica', - 'saveOnAccount' => 'Risparmio sul conto', - 'unknown' => 'Sconosciuto', - 'monthly' => 'Mensile', - 'profile' => 'Profilo', - 'errors' => 'Errori', - 'debt_start_date' => 'Data di inizio del debito', - 'debt_start_amount' => 'Importo iniziale del debito', - 'debt_start_amount_help' => 'È sempre meglio impostare questo valore su un importo negativo. Leggi le pagine di aiuto (icona (?) in alto a destra) per ulteriori informazioni.', - 'interest_period_help' => 'Questo campo è puramente estetico e non ti viene calcolato. Sembra che le banche siano molto subdole, pertanto Firefly III non lo calcola mai correttamente.', - 'store_new_liabilities_account' => 'Memorizza nuova passività', - 'edit_liabilities_account' => 'Modica passività ":name"', - 'financial_control' => 'Controllo finanziario', - 'accounting' => 'Contabilità', - 'automation' => 'Automazione', - 'others' => 'Altro', - 'classification' => 'Classificazione', - 'store_transaction' => 'Salva transazione', + 'currency' => 'Valuta', + 'preferences' => 'Preferenze', + 'logout' => 'Esci', + 'logout_other_sessions' => 'Esci da tutte le altre sessioni', + 'toggleNavigation' => 'Attiva / disattiva la navigazione', + 'searchPlaceholder' => 'Cerca...', + 'version' => 'Versione', + 'dashboard' => 'Cruscotto', + 'income_and_expense' => 'Entrate e spese', + 'all_money' => 'Tutto il tuo denaro', + 'unknown_source_plain' => 'Conto d\'origine sconosciuto', + 'unknown_dest_plain' => 'Conto di destinazione sconosciuto', + 'unknown_any_plain' => 'Conto sconosciuto', + 'unknown_budget_plain' => 'Nessun budget', + 'available_budget' => 'Budget disponibile ({currency})', + 'currencies' => 'Valute', + 'activity' => 'Attività', + 'usage' => 'Uso', + 'accounts' => 'Conti', + 'Asset account' => 'Conto attività', + 'Default account' => 'Conto attività', + 'Expense account' => 'Conto spese', + 'Revenue account' => 'Conto entrate', + 'Initial balance account' => 'Saldo iniziale conto', + 'account_type_Asset account' => 'Conto di risorse', + 'account_type_Expense account' => 'Conto di spesa', + 'account_type_Revenue account' => 'Conto di entrate', + 'account_type_Debt' => 'Debito', + 'account_type_Loan' => 'Prestito', + 'account_type_Mortgage' => 'Mutuo', + 'account_type_debt' => 'Debito', + 'account_type_loan' => 'Prestito', + 'account_type_mortgage' => 'Mutuo', + 'account_type_Credit card' => 'Carta di credito', + 'credit_card_type_monthlyFull' => 'Pagamento intero ogni mese', + 'liability_direction_credit' => 'Questo debito mi è dovuto', + 'liability_direction_debit' => 'Devo questo debito a qualcun altro', + 'liability_direction_credit_short' => 'Mi devono questo debito', + 'liability_direction_debit_short' => 'Devo questo debito', + 'liability_direction__short' => 'Sconosciuta', + 'liability_direction_null_short' => 'Sconosciuta', + 'Liability credit' => 'Credito passività', + 'budgets' => 'Budget', + 'tags' => 'Etichette', + 'reports' => 'Resoconti', + 'transactions' => 'Transazioni', + 'expenses' => 'Spese / uscite', + 'income' => 'Redditi / entrate', + 'transfers' => 'Trasferimenti', + 'moneyManagement' => 'Gestione denaro', + 'money_management' => 'Gestione del denaro', + 'tools' => 'Strumenti', + 'piggyBanks' => 'Salvadanai', + 'piggy_banks' => 'Salvadanai', + 'amount_x_of_y' => '{current} di {total}', + 'bills' => 'Bollette', + 'withdrawal' => 'Uscita', + 'opening_balance' => 'Saldo di apertura', + 'deposit' => 'Entrata', + 'account' => 'Conto', + 'transfer' => 'Trasferimento', + 'Withdrawal' => 'Prelievo', + 'Deposit' => 'Entrata', + 'Transfer' => 'Trasferimento', + 'bill' => 'Bolletta', + 'yes' => 'Si', + 'no' => 'No', + 'amount' => 'Importo', + 'overview' => 'Panoramica', + 'saveOnAccount' => 'Risparmio sul conto', + 'unknown' => 'Sconosciuto', + 'monthly' => 'Mensile', + 'profile' => 'Profilo', + 'errors' => 'Errori', + 'debt_start_date' => 'Data di inizio del debito', + 'debt_start_amount' => 'Importo iniziale del debito', + 'debt_start_amount_help' => 'È sempre meglio impostare questo valore su un importo negativo. Leggi le pagine di aiuto (icona (?) in alto a destra) per ulteriori informazioni.', + 'interest_period_help' => 'Questo campo è puramente estetico e non ti viene calcolato. Sembra che le banche siano molto subdole, pertanto Firefly III non lo calcola mai correttamente.', + 'store_new_liabilities_account' => 'Memorizza nuova passività', + 'edit_liabilities_account' => 'Modica passività ":name"', + 'financial_control' => 'Controllo finanziario', + 'accounting' => 'Contabilità', + 'automation' => 'Automazione', + 'others' => 'Altro', + 'classification' => 'Classificazione', + 'store_transaction' => 'Salva transazione', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Resoconto predefinito delle tue finanze tra :start e :end', - 'report_audit' => 'Panoramica cronologica delle transazioni tra :start e :end', - 'report_category' => 'Resoconto categoria tra :start e :end', - 'report_double' => 'Resoconto conto spese/entrate tra :start e :end', - 'report_budget' => 'Resoconto budget tra :start e :end', - 'report_tag' => 'Resoconto etichetta tra :start e :end', - 'quick_link_reports' => 'Collegamenti veloci', - 'quick_link_examples' => 'Questi sono alcuni link di esempio con i quali puoi cominciare. Leggi le pagine d\'aiuto tramite il pulsante (?) per avere informazioni su tutti i rapporti e le parole magiche che puoi usare.', - 'quick_link_default_report' => 'Resoconto finanziario predefinito', - 'quick_link_audit_report' => 'Panoramica cronologica delle transazioni', - 'report_this_month_quick' => 'Mese corrente, tutti i conti', - 'report_last_month_quick' => 'Mese scorso, tutti i conti', - 'report_this_year_quick' => 'Anno corrente - tutti i conti', - 'report_this_fiscal_year_quick' => 'Anno fiscale corrente - tutti i conti', - 'report_all_time_quick' => 'Sempre tutti i conti', - 'reports_can_bookmark' => 'Ricorda che i resoconti possono essere aggiunti ai segnalibri.', - 'incomeVsExpenses' => 'Entrate vs spese', - 'accountBalances' => 'Saldo dei conti', - 'balanceStart' => 'Saldo all\'inizio del periodo', - 'balanceEnd' => 'Saldo alla fine del periodo', - 'splitByAccount' => 'Dividi per conto', - 'coveredWithTags' => 'Coperto con etichetta', - 'leftInBudget' => 'Rimanenza nel budget', - 'left_in_debt' => 'Importo da pagare', - 'sumOfSums' => 'Somma dei conti', - 'noCategory' => '(nessuna categoria)', - 'notCharged' => 'Non (ancora) addebitato', - 'inactive' => 'Disattivo', - 'active' => 'Attivo', - 'difference' => 'Differenza', - 'money_flowing_in' => 'Entrate', - 'money_flowing_out' => 'Uscite', - 'topX' => 'Superiore :number', - 'show_full_list' => 'Mostra elenco completo', - 'show_only_top' => 'Mostra solo in alto :number', - 'report_type' => 'Tipo resoconto', - 'report_type_default' => 'Resoconto finanziario predefinito', - 'report_type_audit' => 'Panoramica cronologica delle transazioni (verifica)', - 'report_type_category' => 'Resoconto categoria', - 'report_type_budget' => 'Resoconto budget', - 'report_type_tag' => 'Resoconto etichetta', - 'report_type_double' => 'Resoconto conto spese/entrate', - 'more_info_help' => 'Ulteriori informazioni su questi tipi di resoconti sono disponibili nelle pagine della guida. Premi l\'icona (?) nell\'angolo in alto a destra.', - 'report_included_accounts' => 'Inclusi i conti', - 'report_date_range' => 'Intervallo di date', - 'report_preset_ranges' => 'Intervalli preimpostati', - 'shared' => 'Condiviso', - 'fiscal_year' => 'Anno fiscale', - 'income_entry' => 'Entrate del conto ":name" tra :start e :end', - 'expense_entry' => 'Spese per il conto ":name" tra :start e :end', - 'category_entry' => 'Spese e entrate nella categoria ":name" tra il :start e il :end', - 'budget_spent_amount' => 'Spese nel budget ":budget" tra :start e :end', - 'balance_amount' => 'Spese nel budget ":budget" pagate dal conto ":account" tra il :start e il :end', - 'no_audit_activity' => 'Nessuna attività è stata registrata nel conto :account_name tra il :start e il :end.', - 'audit_end_balance' => 'Il saldo del conto :account_name alla fine di :end era: :balance', - 'reports_extra_options' => 'Opzioni extra', - 'report_has_no_extra_options' => 'Questo resoconto non ha opzioni extra', - 'reports_submit' => 'Mostra resoconto', - 'end_after_start_date' => 'La data della fine del resoconto deve essere successiva alla data di inizio.', - 'select_category' => 'Seleziona le categorie', - 'select_budget' => 'Seleziona i budget.', - 'select_tag' => 'Seleziona etichette.', - 'income_per_category' => 'Entrate per categoria', - 'expense_per_category' => 'Spesa per categoria', - 'expense_per_budget' => 'Spese per budget', - 'income_per_account' => 'Entrate per conto', - 'expense_per_account' => 'Spese per conto', - 'expense_per_tag' => 'Spese per etichetta', - 'income_per_tag' => 'Entrate per etichetta', - 'include_expense_not_in_budget' => 'Incluse le spese non appartenenti ai budget selezionati', - 'include_expense_not_in_account' => 'Incluse le spese non appartenenti ai conti selezionati', - 'include_expense_not_in_category' => 'Incluse le spese non appartenenti alle categorie selezionate', - 'include_income_not_in_category' => 'Incluse le entrate non appartenenti alle categorie selezionate', - 'include_income_not_in_account' => 'Incluse le entrate non appartenenti ai conti selezionati', - 'include_income_not_in_tags' => 'Incluse le entrate non appartenenti alle etichette selezionate', - 'include_expense_not_in_tags' => 'Incluse le spese non appartenenti alle etichette selezionate', - 'everything_else' => 'Tutto il resto', - 'income_and_expenses' => 'Entrate e spese', - 'spent_average' => 'Spesi (media)', - 'income_average' => 'Entrate (media)', - 'transaction_count' => 'Conteggio transazioni', - 'average_spending_per_account' => 'Spesa media per conto', - 'average_income_per_account' => 'Media entrate per conto', - 'total' => 'Totale', - 'description' => 'Descrizione', - 'sum_of_period' => 'Somma del periodo', - 'average_in_period' => 'Media nel periodo', - 'account_role_defaultAsset' => 'Conto attività predefinito', - 'account_role_sharedAsset' => 'Conto attività condiviso', - 'account_role_savingAsset' => 'Conto risparmio', - 'account_role_ccAsset' => 'Carta di credito', - 'account_role_cashWalletAsset' => 'Portafoglio', - 'budget_chart_click' => 'Fai clic su un nome di un budget nella tabella sopra per vedere un grafico.', - 'category_chart_click' => 'Fare clic sul nome di una categoria nella tabella sopra per vedere un grafico.', - 'in_out_accounts' => 'Guadagnati e spesi per combinazione', - 'in_out_accounts_per_asset' => 'Guadagnato e speso (per conto attività)', - 'in_out_per_category' => 'Guadagnati e spesi per categoria', - 'out_per_budget' => 'Speso per budget', - 'select_expense_revenue' => 'Seleziona conto spese/entrate', - 'multi_currency_report_sum' => 'Poiché questo elenco contiene conti con più valute, le somme potrebbero non avere senso. Il rapporto ripiegherà sempre sulla valuta predefinita.', - 'sum_in_default_currency' => 'La somma sarà sempre nella tua valuta predefinita.', - 'net_filtered_prefs' => 'Questo grafico non includerà mai i conti che hanno l\'opzione "Includi nel patrimonio" non selezionata.', + 'report_default' => 'Resoconto predefinito delle tue finanze tra :start e :end', + 'report_audit' => 'Panoramica cronologica delle transazioni tra :start e :end', + 'report_category' => 'Resoconto categoria tra :start e :end', + 'report_double' => 'Resoconto conto spese/entrate tra :start e :end', + 'report_budget' => 'Resoconto budget tra :start e :end', + 'report_tag' => 'Resoconto etichetta tra :start e :end', + 'quick_link_reports' => 'Collegamenti veloci', + 'quick_link_examples' => 'Questi sono alcuni link di esempio con i quali puoi cominciare. Leggi le pagine d\'aiuto tramite il pulsante (?) per avere informazioni su tutti i rapporti e le parole magiche che puoi usare.', + 'quick_link_default_report' => 'Resoconto finanziario predefinito', + 'quick_link_audit_report' => 'Panoramica cronologica delle transazioni', + 'report_this_month_quick' => 'Mese corrente, tutti i conti', + 'report_last_month_quick' => 'Mese scorso, tutti i conti', + 'report_this_year_quick' => 'Anno corrente - tutti i conti', + 'report_this_fiscal_year_quick' => 'Anno fiscale corrente - tutti i conti', + 'report_all_time_quick' => 'Sempre tutti i conti', + 'reports_can_bookmark' => 'Ricorda che i resoconti possono essere aggiunti ai segnalibri.', + 'incomeVsExpenses' => 'Entrate vs spese', + 'accountBalances' => 'Saldo dei conti', + 'balanceStart' => 'Saldo all\'inizio del periodo', + 'balanceEnd' => 'Saldo alla fine del periodo', + 'splitByAccount' => 'Dividi per conto', + 'coveredWithTags' => 'Coperto con etichetta', + 'leftInBudget' => 'Rimanenza nel budget', + 'left_in_debt' => 'Importo da pagare', + 'sumOfSums' => 'Somma dei conti', + 'noCategory' => '(nessuna categoria)', + 'notCharged' => 'Non (ancora) addebitato', + 'inactive' => 'Disattivo', + 'active' => 'Attivo', + 'difference' => 'Differenza', + 'money_flowing_in' => 'Entrate', + 'money_flowing_out' => 'Uscite', + 'topX' => 'Superiore :number', + 'show_full_list' => 'Mostra elenco completo', + 'show_only_top' => 'Mostra solo in alto :number', + 'report_type' => 'Tipo resoconto', + 'report_type_default' => 'Resoconto finanziario predefinito', + 'report_type_audit' => 'Panoramica cronologica delle transazioni (verifica)', + 'report_type_category' => 'Resoconto categoria', + 'report_type_budget' => 'Resoconto budget', + 'report_type_tag' => 'Resoconto etichetta', + 'report_type_double' => 'Resoconto conto spese/entrate', + 'more_info_help' => 'Ulteriori informazioni su questi tipi di resoconti sono disponibili nelle pagine della guida. Premi l\'icona (?) nell\'angolo in alto a destra.', + 'report_included_accounts' => 'Inclusi i conti', + 'report_date_range' => 'Intervallo di date', + 'report_preset_ranges' => 'Intervalli preimpostati', + 'shared' => 'Condiviso', + 'fiscal_year' => 'Anno fiscale', + 'income_entry' => 'Entrate del conto ":name" tra :start e :end', + 'expense_entry' => 'Spese per il conto ":name" tra :start e :end', + 'category_entry' => 'Spese e entrate nella categoria ":name" tra il :start e il :end', + 'budget_spent_amount' => 'Spese nel budget ":budget" tra :start e :end', + 'balance_amount' => 'Spese nel budget ":budget" pagate dal conto ":account" tra il :start e il :end', + 'no_audit_activity' => 'Nessuna attività è stata registrata nel conto :account_name tra il :start e il :end.', + 'audit_end_balance' => 'Il saldo del conto :account_name alla fine di :end era: :balance', + 'reports_extra_options' => 'Opzioni extra', + 'report_has_no_extra_options' => 'Questo resoconto non ha opzioni extra', + 'reports_submit' => 'Mostra resoconto', + 'end_after_start_date' => 'La data della fine del resoconto deve essere successiva alla data di inizio.', + 'select_category' => 'Seleziona le categorie', + 'select_budget' => 'Seleziona i budget.', + 'select_tag' => 'Seleziona etichette.', + 'income_per_category' => 'Entrate per categoria', + 'expense_per_category' => 'Spesa per categoria', + 'expense_per_budget' => 'Spese per budget', + 'income_per_account' => 'Entrate per conto', + 'expense_per_account' => 'Spese per conto', + 'expense_per_tag' => 'Spese per etichetta', + 'income_per_tag' => 'Entrate per etichetta', + 'include_expense_not_in_budget' => 'Incluse le spese non appartenenti ai budget selezionati', + 'include_expense_not_in_account' => 'Incluse le spese non appartenenti ai conti selezionati', + 'include_expense_not_in_category' => 'Incluse le spese non appartenenti alle categorie selezionate', + 'include_income_not_in_category' => 'Incluse le entrate non appartenenti alle categorie selezionate', + 'include_income_not_in_account' => 'Incluse le entrate non appartenenti ai conti selezionati', + 'include_income_not_in_tags' => 'Incluse le entrate non appartenenti alle etichette selezionate', + 'include_expense_not_in_tags' => 'Incluse le spese non appartenenti alle etichette selezionate', + 'everything_else' => 'Tutto il resto', + 'income_and_expenses' => 'Entrate e spese', + 'spent_average' => 'Spesi (media)', + 'income_average' => 'Entrate (media)', + 'transaction_count' => 'Conteggio transazioni', + 'average_spending_per_account' => 'Spesa media per conto', + 'average_income_per_account' => 'Media entrate per conto', + 'total' => 'Totale', + 'description' => 'Descrizione', + 'sum_of_period' => 'Somma del periodo', + 'average_in_period' => 'Media nel periodo', + 'account_role_defaultAsset' => 'Conto attività predefinito', + 'account_role_sharedAsset' => 'Conto attività condiviso', + 'account_role_savingAsset' => 'Conto risparmio', + 'account_role_ccAsset' => 'Carta di credito', + 'account_role_cashWalletAsset' => 'Portafoglio', + 'budget_chart_click' => 'Fai clic su un nome di un budget nella tabella sopra per vedere un grafico.', + 'category_chart_click' => 'Fare clic sul nome di una categoria nella tabella sopra per vedere un grafico.', + 'in_out_accounts' => 'Guadagnati e spesi per combinazione', + 'in_out_accounts_per_asset' => 'Guadagnato e speso (per conto attività)', + 'in_out_per_category' => 'Guadagnati e spesi per categoria', + 'out_per_budget' => 'Speso per budget', + 'select_expense_revenue' => 'Seleziona conto spese/entrate', + 'multi_currency_report_sum' => 'Poiché questo elenco contiene conti con più valute, le somme potrebbero non avere senso. Il rapporto ripiegherà sempre sulla valuta predefinita.', + 'sum_in_default_currency' => 'La somma sarà sempre nella tua valuta predefinita.', + 'net_filtered_prefs' => 'Questo grafico non includerà mai i conti che hanno l\'opzione "Includi nel patrimonio" non selezionata.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Grafico', - 'month' => 'Mese', - 'budget' => 'Budget', - 'spent' => 'Speso', - 'spent_capped' => 'Speso (massimo)', - 'spent_in_budget' => 'Speso nel budget', - 'left_to_spend' => 'Altro da spendere', - 'earned' => 'Guadagnato', - 'overspent' => 'Speso troppo', - 'left' => 'Resto', - 'max-amount' => 'Importo massimo', - 'min-amount' => 'Importo minimo', - 'journal-amount' => 'Entrata fattura corrente', - 'name' => 'Nome', - 'date' => 'Data', - 'date_and_time' => 'Data e ora', - 'time' => 'Ora', - 'paid' => 'Pagati', - 'unpaid' => 'Da pagare', - 'day' => 'Giorno', - 'budgeted' => 'Preventivato', - 'period' => 'Periodo', - 'balance' => 'Saldo', - 'in_out_period' => 'In + out this period', - 'sum' => 'Somma', - 'summary' => 'Riepilogo', - 'average' => 'Media', - 'balanceFor' => 'Saldo per :name', - 'no_tags' => '(nessuna etichetta)', + 'chart' => 'Grafico', + 'month' => 'Mese', + 'budget' => 'Budget', + 'spent' => 'Speso', + 'spent_capped' => 'Speso (massimo)', + 'spent_in_budget' => 'Speso nel budget', + 'left_to_spend' => 'Altro da spendere', + 'earned' => 'Guadagnato', + 'overspent' => 'Speso troppo', + 'left' => 'Resto', + 'max-amount' => 'Importo massimo', + 'min-amount' => 'Importo minimo', + 'journal-amount' => 'Entrata fattura corrente', + 'name' => 'Nome', + 'date' => 'Data', + 'date_and_time' => 'Data e ora', + 'time' => 'Ora', + 'paid' => 'Pagati', + 'unpaid' => 'Da pagare', + 'day' => 'Giorno', + 'budgeted' => 'Preventivato', + 'period' => 'Periodo', + 'balance' => 'Saldo', + 'in_out_period' => 'Bilancio di questo periodo', + 'sum' => 'Somma', + 'summary' => 'Riepilogo', + 'average' => 'Media', + 'balanceFor' => 'Saldo per :name', + 'no_tags' => '(nessuna etichetta)', + 'nothing_found' => '(nessun risultato)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Aggiungi denaro al salvadanaio":name"', - 'piggy_bank' => 'Salvadanaio', - 'new_piggy_bank' => 'Nuovo salvadanaio', - 'store_piggy_bank' => 'Salva il nuovo salvadanaio', - 'stored_piggy_bank' => 'Salva il nuovo salvadanaio ":name"', - 'account_status' => 'Stato conto', - 'left_for_piggy_banks' => 'Rimanente per i salvadanai', - 'sum_of_piggy_banks' => 'Somma dei salvadanai', - 'saved_so_far' => 'Risparmiato finora', - 'left_to_save' => 'Rimanente da risparmiare', - 'suggested_amount' => 'Quantità mensile consigliata da salvare', - 'add_money_to_piggy_title' => 'Aggiungi denaro al salvadanaio ":name"', - 'remove_money_from_piggy_title' => 'Rimuovi i soldi dal salvadanaio ":name"', - 'add' => 'Aggiungi', - 'no_money_for_piggy' => 'non hai soldi da mettere in questo salvadanaio.', - 'suggested_savings_per_month' => 'Suggerimento per mese', + 'event_history' => 'Storico eventi', + 'add_money_to_piggy' => 'Aggiungi denaro al salvadanaio":name"', + 'piggy_bank' => 'Salvadanaio', + 'new_piggy_bank' => 'Nuovo salvadanaio', + 'store_piggy_bank' => 'Salva il nuovo salvadanaio', + 'stored_piggy_bank' => 'Salva il nuovo salvadanaio ":name"', + 'account_status' => 'Stato conto', + 'left_for_piggy_banks' => 'Rimanente per i salvadanai', + 'sum_of_piggy_banks' => 'Somma dei salvadanai', + 'saved_so_far' => 'Risparmiato finora', + 'left_to_save' => 'Rimanente da risparmiare', + 'suggested_amount' => 'Quantità mensile consigliata da salvare', + 'add_money_to_piggy_title' => 'Aggiungi denaro al salvadanaio ":name"', + 'remove_money_from_piggy_title' => 'Rimuovi i soldi dal salvadanaio ":name"', + 'add' => 'Aggiungi', + 'no_money_for_piggy' => 'non hai soldi da mettere in questo salvadanaio.', + 'suggested_savings_per_month' => 'Suggerimento per mese', - 'remove' => 'Rimuovi', - 'max_amount_add' => 'L\'importo massimo che puoi aggiungere è', - 'max_amount_remove' => 'L\'importo massimo che puoi rimuovere è', - 'update_piggy_button' => 'Aggiorna salvadanaio', - 'update_piggy_title' => 'Aggiorna salvadanaio ":name"', - 'updated_piggy_bank' => 'Aggiorna salvadanaio ":name"', - 'details' => 'Dettagli', - 'events' => 'Eventi', - 'target_amount' => 'Importo obiettivo', - 'start_date' => 'Data inizio', - 'no_start_date' => 'Nessuna data di inizio', - 'target_date' => 'Data fine', - 'no_target_date' => 'Nessuna data fine', - 'table' => 'Tabella', - 'delete_piggy_bank' => 'Elimina salvadanaio ":name"', - 'cannot_add_amount_piggy' => 'Impossibile aggiungere :amount a ":name".', - 'cannot_remove_from_piggy' => 'Impossibile rimuovere :amount a ":name".', - 'deleted_piggy_bank' => 'Salvadanaio eliminato ":name"', - 'added_amount_to_piggy' => 'Aggiunto :amount a ":name"', - 'removed_amount_from_piggy' => 'Rimosso :amount a ":name"', - 'piggy_events' => 'Salvadanai correlati', + 'remove' => 'Rimuovi', + 'max_amount_add' => 'L\'importo massimo che puoi aggiungere è', + 'max_amount_remove' => 'L\'importo massimo che puoi rimuovere è', + 'update_piggy_button' => 'Aggiorna salvadanaio', + 'update_piggy_title' => 'Aggiorna salvadanaio ":name"', + 'updated_piggy_bank' => 'Aggiorna salvadanaio ":name"', + 'details' => 'Dettagli', + 'events' => 'Eventi', + 'target_amount' => 'Importo obiettivo', + 'start_date' => 'Data inizio', + 'no_start_date' => 'Nessuna data di inizio', + 'target_date' => 'Data fine', + 'no_target_date' => 'Nessuna data fine', + 'table' => 'Tabella', + 'delete_piggy_bank' => 'Elimina salvadanaio ":name"', + 'cannot_add_amount_piggy' => 'Impossibile aggiungere :amount a ":name".', + 'cannot_remove_from_piggy' => 'Impossibile rimuovere :amount a ":name".', + 'deleted_piggy_bank' => 'Salvadanaio eliminato ":name"', + 'added_amount_to_piggy' => 'Aggiunto :amount a ":name"', + 'removed_amount_from_piggy' => 'Rimosso :amount a ":name"', + 'piggy_events' => 'Salvadanai correlati', // tags - 'delete_tag' => 'Elimina etichetta ":tag"', - 'deleted_tag' => 'Etichetta ":tag" eliminata', - 'new_tag' => 'Crea nuova etichetta', - 'edit_tag' => 'Modifica etichetta ":tag"', - 'updated_tag' => 'Etichetta ":tag" aggiornata', - 'created_tag' => 'Etichetta ":tag" creata correttamente', + 'delete_tag' => 'Elimina etichetta ":tag"', + 'deleted_tag' => 'Etichetta ":tag" eliminata', + 'new_tag' => 'Crea nuova etichetta', + 'edit_tag' => 'Modifica etichetta ":tag"', + 'updated_tag' => 'Etichetta ":tag" aggiornata', + 'created_tag' => 'Etichetta ":tag" creata correttamente', - 'transaction_journal_information' => 'Informazioni transazione', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta informazioni', - 'transaction_journal_more' => 'Altre informazioni', - 'basic_journal_information' => 'Informazioni di base sulla transazione', - 'transaction_journal_extra' => 'Informazioni aggiuntive', - 'att_part_of_journal' => 'Memorizzato sotto ":journal"', - 'total_amount' => 'Importo totale', - 'number_of_decimals' => 'Cifre decimali', + 'transaction_journal_information' => 'Informazioni transazione', + 'transaction_journal_amount' => 'Informazioni sull\'importo', + 'transaction_journal_meta' => 'Meta informazioni', + 'transaction_journal_more' => 'Altre informazioni', + 'basic_journal_information' => 'Informazioni di base sulla transazione', + 'transaction_journal_extra' => 'Informazioni aggiuntive', + 'att_part_of_journal' => 'Memorizzato sotto ":journal"', + 'total_amount' => 'Importo totale', + 'number_of_decimals' => 'Cifre decimali', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Amministrazione', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Amministrazione utenti', - 'list_all_users' => 'Tutti gli utenti', - 'all_users' => 'Tutti gli utenti', - 'instance_configuration' => 'Configurazione', - 'firefly_instance_configuration' => 'Opzioni di configurazione di Firefly III', - 'setting_single_user_mode' => 'Modo utente singolo', - 'setting_single_user_mode_explain' => 'Per impostazione predefinita, Firefly III accetta solo una (1) registrazione: tu. Questa è una misura di sicurezza, che impedisce ad altri di usare la tua istanza a meno che tu non le autorizzi. Le future registrazioni sono bloccate. Bene! quando deselezioni questa casella, gli altri possono usare la tua istanza, supponendo che possano raggiungerla (quando è connessa a Internet).', - 'store_configuration' => 'Salva configurazione', - 'single_user_administration' => 'Amministrazione utenti per :email', - 'edit_user' => 'Modifica utente :email', - 'hidden_fields_preferences' => 'Puoi abilitare maggiori opzioni per le transazioni nelle tue impostazioni.', - 'user_data_information' => 'Dati utente', - 'user_information' => 'Informazioni Utente', - 'total_size' => 'dimensione totale', - 'budget_or_budgets' => ':count budget|:count budget', - 'budgets_with_limits' => ':count budget con un importo impostato|:count budget con importi impostati', - 'nr_of_rules_in_total_groups' => ':count_rules regole in :count_groups gruppi di regole', - 'tag_or_tags' => ':count etichetta|:count etichette', - 'configuration_updated' => 'La configurazione è stata aggiornata', - 'setting_is_demo_site' => 'Sito Demo', - 'setting_is_demo_site_explain' => 'Se si seleziona questa casella, questa installazione si comporterà come se fosse il sito demo, che può avere strani effetti collaterali.', - 'block_code_bounced' => 'Messaggi email respinti', - 'block_code_expired' => 'Conto demo scaduto', - 'no_block_code' => 'Nessun motivo per bloccare o non bloccare un utente', - 'block_code_email_changed' => 'L\'utente non ha ancora confermato il nuovo indirizzo emails', - 'admin_update_email' => 'Contrariamente alla pagina del profilo, l\'utente NON riceverà alcuna notifica al proprio indirizzo email!', - 'update_user' => 'Aggiorna utente', - 'updated_user' => 'I dati dell\'utente sono stati modificati.', - 'delete_user' => 'Elimina utente :email', - 'user_deleted' => 'L\'utente è stato eliminato', - 'send_test_email' => 'Invia un messaggio di posta elettronica di prova', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Invia messaggio', - 'send_test_triggered' => 'Il test è stato attivato. Controlla la tua casella di posta e i file di log.', - 'give_admin_careful' => 'Gli utenti con privilegi di amministratore posso rimuovere i tuoi privilegi. Fai attenzione.', - 'admin_maintanance_title' => 'Manutenzione', - 'admin_maintanance_expl' => 'Qualche pulsante per la manutenzione di Firefly III', - 'admin_maintenance_clear_cache' => 'Svuota cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'Un utente è stato invitato in Firefly III', - 'admin_notification_check_invite_redeemed' => 'Un invito utente è stato accettato', - 'all_invited_users' => 'Utenti invitati', - 'save_notification_settings' => 'Salva le impostazioni', - 'notification_settings_saved' => 'Le impostazioni sulle notifiche sono state salvate', - - - 'split_transaction_title' => 'Descrizione della transazione suddivisa', - 'split_transaction_title_help' => 'Se crei una transazione suddivisa, è necessario che ci sia una descrizione globale per tutte le suddivisioni della transazione.', - 'split_title_help' => 'Se crei una transazione suddivisa è necessario che ci sia una descrizione globale per tutte le suddivisioni della transazione.', - 'you_create_transfer' => 'Stai creando un trasferimento.', - 'you_create_withdrawal' => 'Stai creando un prelievo.', - 'you_create_deposit' => 'Stai creando un deposito.', + 'invite_is_already_redeemed' => 'L\'invito a ":address" è già stato revocato.', + 'invite_is_deleted' => 'L\'invito a ":address" è stato eliminato.', + 'invite_new_user_title' => 'Invita nuovo utente', + 'invite_new_user_text' => 'Come amministratore, puoi invitare gli utenti a registrarsi alla tua amministrazione di Firefly III. Utilizzando il link diretto, puoi condividerlo con loro, così che potranno registrare un conto. L\'utente invitato e il suo link d\'invito appariranno nella seguente tabella. Sei libero di condividere il link d\'invito con chi desideri.', + 'invited_user_mail' => 'Indirizzo email', + 'invite_user' => 'Invita l\'utente', + 'user_is_invited' => 'L\'indirizzo email ":address" è stato invitato a Firefly III', + 'administration' => 'Amministrazione', + 'system_settings' => 'Impostazioni di sistema', + 'code_already_used' => 'Il codice d\'invito è stato utilizzato', + 'user_administration' => 'Amministrazione utenti', + 'list_all_users' => 'Tutti gli utenti', + 'all_users' => 'Tutti gli utenti', + 'instance_configuration' => 'Configurazione', + 'firefly_instance_configuration' => 'Opzioni di configurazione di Firefly III', + 'setting_single_user_mode' => 'Modo utente singolo', + 'setting_single_user_mode_explain' => 'Per impostazione predefinita, Firefly III accetta solo una (1) registrazione: tu. Questa è una misura di sicurezza, che impedisce ad altri di usare la tua istanza a meno che tu non le autorizzi. Le future registrazioni sono bloccate. Bene! quando deselezioni questa casella, gli altri possono usare la tua istanza, supponendo che possano raggiungerla (quando è connessa a Internet).', + 'store_configuration' => 'Salva configurazione', + 'single_user_administration' => 'Amministrazione utenti per :email', + 'edit_user' => 'Modifica utente :email', + 'hidden_fields_preferences' => 'Puoi abilitare maggiori opzioni per le transazioni nelle tue impostazioni.', + 'user_data_information' => 'Dati utente', + 'user_information' => 'Informazioni Utente', + 'total_size' => 'dimensione totale', + 'budget_or_budgets' => ':count budget|:count budget', + 'budgets_with_limits' => ':count budget con un importo impostato|:count budget con importi impostati', + 'nr_of_rules_in_total_groups' => ':count_rules regole in :count_groups gruppi di regole', + 'tag_or_tags' => ':count etichetta|:count etichette', + 'configuration_updated' => 'La configurazione è stata aggiornata', + 'setting_is_demo_site' => 'Sito Demo', + 'setting_is_demo_site_explain' => 'Se si seleziona questa casella, questa installazione si comporterà come se fosse il sito demo, che può avere strani effetti collaterali.', + 'block_code_bounced' => 'Messaggi email respinti', + 'block_code_expired' => 'Conto demo scaduto', + 'no_block_code' => 'Nessun motivo per bloccare o non bloccare un utente', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'L\'utente non ha ancora confermato il nuovo indirizzo emails', + 'admin_update_email' => 'Contrariamente alla pagina del profilo, l\'utente NON riceverà alcuna notifica al proprio indirizzo email!', + 'update_user' => 'Aggiorna utente', + 'updated_user' => 'I dati dell\'utente sono stati modificati.', + 'delete_user' => 'Elimina utente :email', + 'user_deleted' => 'L\'utente è stato eliminato', + 'send_test_email' => 'Invia un messaggio di posta elettronica di prova', + 'send_test_email_text' => 'Per scoprire se la tua installazione può inviare email o pubblicare messaggi su Slack, ti preghiamo di premere questo pulsante. Non visualizzerai un errore (se presente) qui, i file di registro rifletteranno qualsiasi errore. Puoi premere questo pulsante quante volte desideri. Non esiste alcun controllo dello spam. Il messaggio sarà inviato a :email e dovrebbe arrivare a breve.', + 'send_message' => 'Invia messaggio', + 'send_test_triggered' => 'Il test è stato attivato. Controlla la tua casella di posta e i file di log.', + 'give_admin_careful' => 'Gli utenti con privilegi di amministratore posso rimuovere i tuoi privilegi. Fai attenzione.', + 'admin_maintanance_title' => 'Manutenzione', + 'admin_maintanance_expl' => 'Qualche pulsante per la manutenzione di Firefly III', + 'admin_maintenance_clear_cache' => 'Svuota cache', + 'admin_notifications' => 'Notifiche dell\'admin', + 'admin_notifications_expl' => 'Le seguenti notifiche sono abilitabili o disabilitabili dall\'amministratore. Se desideri ricevere questi messaggi anche su Slack, imposta l\'URL del "webhook in entrata".', + 'admin_notification_check_user_new_reg' => 'L\'utente riceve il messaggio di benvenuto post-registrazione', + 'admin_notification_check_admin_new_reg' => 'Gli amministratori ricevono le notifiche di registrazione dei nuovi utenti', + 'admin_notification_check_new_version' => 'È disponibile una nuova versione', + 'admin_notification_check_invite_created' => 'Un utente è stato invitato in Firefly III', + 'admin_notification_check_invite_redeemed' => 'Un invito utente è stato accettato', + 'all_invited_users' => 'Utenti invitati', + 'save_notification_settings' => 'Salva le impostazioni', + 'notification_settings_saved' => 'Le impostazioni sulle notifiche sono state salvate', + 'split_transaction_title' => 'Descrizione della transazione suddivisa', + 'split_transaction_title_help' => 'Se crei una transazione suddivisa, è necessario che ci sia una descrizione globale per tutte le suddivisioni della transazione.', + 'split_title_help' => 'Se crei una transazione suddivisa è necessario che ci sia una descrizione globale per tutte le suddivisioni della transazione.', + 'you_create_transfer' => 'Stai creando un trasferimento.', + 'you_create_withdrawal' => 'Stai creando un prelievo.', + 'you_create_deposit' => 'Stai creando un deposito.', // links - 'journal_link_configuration' => 'Configurazione collegamenti della transazione', - 'create_new_link_type' => 'Crea un nuovo tipo di collegamento', - 'store_new_link_type' => 'Memorizza nuovo tipo di collegamento', - 'update_link_type' => 'Aggiorna il tipo di collegamento', - 'edit_link_type' => 'Modifica il tipo di collegamento ":name"', - 'updated_link_type' => 'Tipo del collegamento ":name" aggiornato', - 'delete_link_type' => 'Elimina il tipo di collegamento ":name"', - 'deleted_link_type' => 'Tipo di collegamento eliminato ":name"', - 'stored_new_link_type' => 'Memorizza nuovo tipo di collegamento ":name"', - 'cannot_edit_link_type' => 'Impossibile modificare il tipo di collegamento ":name"', - 'link_type_help_name' => 'Es.: "Duplicati"', - 'link_type_help_inward' => 'Es.: "duplicati"', - 'link_type_help_outward' => 'Es.: "è duplicata da"', - 'save_connections_by_moving' => 'Salva il collegamento tra queste transazioni spostandole in un altro tipo di collegamento:', - 'do_not_save_connection' => '(non salvare la connessione)', - 'link_transaction' => 'Collega transazione', - 'link_to_other_transaction' => 'Collega questa transazione a un\'altra transazione', - 'select_transaction_to_link' => 'Seleziona una transazione da collegare a questa. I collegamenti non sono al momento utilizzati in Firefly III (a parte la visualizzazione), ma prevedo di cambiare la cosa in futuro. Usa il box di ricerca per selezionare una transazione per titolo o per ID. Se vuoi aggiungere tipi di collegamento personalizzati, controlla la sezione amministrazione.', - 'this_transaction' => 'Questa transazione', - 'transaction' => 'Transazione', - 'comments' => 'Commenti', - 'link_notes' => 'Qualsiasi nota che tu voglia salvare con il collegamento.', - 'invalid_link_selection' => 'Impossibile collegare queste transazioni', - 'selected_transaction' => 'Transazione selezionata', - 'journals_linked' => 'Le transazioni sono collegate.', - 'journals_error_linked' => 'Queste transazioni sono già collegate.', - 'journals_link_to_self' => 'Non puoi collegare una transazione con se stessa', - 'journal_links' => 'Collegamenti della transazione', - 'this_withdrawal' => 'Questo prelievo', - 'this_deposit' => 'Questa entrata', - 'this_transfer' => 'Questo trasferimento', - 'overview_for_link' => 'Panoramica per tipo di collegamento ":name"', - 'source_transaction' => 'Transazione di origine', - 'link_description' => 'Descrizione del collegamento', - 'destination_transaction' => 'Transazione di destinazione', - 'delete_journal_link' => 'Elimina il collegamento tra :source e :destination', - 'deleted_link' => 'Elimina collegamento', + 'journal_link_configuration' => 'Configurazione collegamenti della transazione', + 'create_new_link_type' => 'Crea un nuovo tipo di collegamento', + 'store_new_link_type' => 'Memorizza nuovo tipo di collegamento', + 'update_link_type' => 'Aggiorna il tipo di collegamento', + 'edit_link_type' => 'Modifica il tipo di collegamento ":name"', + 'updated_link_type' => 'Tipo del collegamento ":name" aggiornato', + 'delete_link_type' => 'Elimina il tipo di collegamento ":name"', + 'deleted_link_type' => 'Tipo di collegamento eliminato ":name"', + 'stored_new_link_type' => 'Memorizza nuovo tipo di collegamento ":name"', + 'cannot_edit_link_type' => 'Impossibile modificare il tipo di collegamento ":name"', + 'link_type_help_name' => 'Es.: "Duplicati"', + 'link_type_help_inward' => 'Es.: "duplicati"', + 'link_type_help_outward' => 'Es.: "è duplicata da"', + 'save_connections_by_moving' => 'Salva il collegamento tra queste transazioni spostandole in un altro tipo di collegamento:', + 'do_not_save_connection' => '(non salvare la connessione)', + 'link_transaction' => 'Collega transazione', + 'link_to_other_transaction' => 'Collega questa transazione a un\'altra transazione', + 'select_transaction_to_link' => 'Seleziona una transazione da collegare a questa. I collegamenti non sono al momento utilizzati in Firefly III (a parte la visualizzazione), ma prevedo di cambiare la cosa in futuro. Usa il box di ricerca per selezionare una transazione per titolo o per ID. Se vuoi aggiungere tipi di collegamento personalizzati, controlla la sezione amministrazione.', + 'this_transaction' => 'Questa transazione', + 'transaction' => 'Transazione', + 'comments' => 'Commenti', + 'link_notes' => 'Qualsiasi nota che tu voglia salvare con il collegamento.', + 'invalid_link_selection' => 'Impossibile collegare queste transazioni', + 'selected_transaction' => 'Transazione selezionata', + 'journals_linked' => 'Le transazioni sono collegate.', + 'journals_error_linked' => 'Queste transazioni sono già collegate.', + 'journals_link_to_self' => 'Non puoi collegare una transazione con se stessa', + 'journal_links' => 'Collegamenti della transazione', + 'this_withdrawal' => 'Questo prelievo', + 'this_deposit' => 'Questa entrata', + 'this_transfer' => 'Questo trasferimento', + 'overview_for_link' => 'Panoramica per tipo di collegamento ":name"', + 'source_transaction' => 'Transazione di origine', + 'link_description' => 'Descrizione del collegamento', + 'destination_transaction' => 'Transazione di destinazione', + 'delete_journal_link' => 'Elimina il collegamento tra :source e :destination', + 'deleted_link' => 'Elimina collegamento', // link translations: - 'Paid_name' => 'Pagata', - 'Refund_name' => 'Rimborso', - 'Reimbursement_name' => 'Rimborso spese', - 'Related_name' => 'Inerenti', - 'relates to_inward' => 'correlata a', - 'is (partially) refunded by_inward' => 'è (parzialmente) rimborsata da', - 'is (partially) paid for by_inward' => 'è (parzialmente) pagata da', - 'is (partially) reimbursed by_inward' => 'è (parzialmente) rimborsata da', - 'inward_transaction' => 'Transazione in ingresso', - 'outward_transaction' => 'Transazione in uscita', - 'relates to_outward' => 'inerente a', - '(partially) refunds_outward' => 'rimborsa (parzialmente)', - '(partially) pays for_outward' => '(parzialmente) paga per', - '(partially) reimburses_outward' => '(parzialmente) rimborsa', - 'is (partially) refunded by' => 'è (parzialmente) rimborsata da', - 'is (partially) paid for by' => 'è (parzialmente) pagata da', - 'is (partially) reimbursed by' => 'è (parzialmente) rimborsata da', - 'relates to' => 'inerente a', - '(partially) refunds' => 'rimborsa (parzialmente)', - '(partially) pays for' => '(parzialmente) paga per', - '(partially) reimburses' => '(parzialmente) rimborsa', + 'Paid_name' => 'Pagata', + 'Refund_name' => 'Rimborso', + 'Reimbursement_name' => 'Rimborso spese', + 'Related_name' => 'Inerenti', + 'relates to_inward' => 'correlata a', + 'is (partially) refunded by_inward' => 'è (parzialmente) rimborsata da', + 'is (partially) paid for by_inward' => 'è (parzialmente) pagata da', + 'is (partially) reimbursed by_inward' => 'è (parzialmente) rimborsata da', + 'inward_transaction' => 'Transazione in ingresso', + 'outward_transaction' => 'Transazione in uscita', + 'relates to_outward' => 'inerente a', + '(partially) refunds_outward' => 'rimborsa (parzialmente)', + '(partially) pays for_outward' => '(parzialmente) paga per', + '(partially) reimburses_outward' => '(parzialmente) rimborsa', + 'is (partially) refunded by' => 'è (parzialmente) rimborsata da', + 'is (partially) paid for by' => 'è (parzialmente) pagata da', + 'is (partially) reimbursed by' => 'è (parzialmente) rimborsata da', + 'relates to' => 'inerente a', + '(partially) refunds' => 'rimborsa (parzialmente)', + '(partially) pays for' => '(parzialmente) paga per', + '(partially) reimburses' => '(parzialmente) rimborsa', // split a transaction: - 'splits' => 'Suddivisioni', - 'add_another_split' => 'Aggiungi un\'altra divisione', - 'cannot_edit_opening_balance' => 'Non è possibile modificare il saldo di apertura di un conto.', - 'no_edit_multiple_left' => 'Non hai selezionato transazioni valide da modificare.', - 'breadcrumb_convert_group' => 'Converti transazione', - 'convert_invalid_source' => 'L\'informazione di origine non è valida per la transazione #%d.', - 'convert_invalid_destination' => 'L\'informazione di destinazione non è valida per la transazione #%d.', - 'create_another' => 'Dopo il salvataggio, torna qui per crearne un\'altra.', - 'after_update_create_another' => 'Dopo l\'aggiornamento, torna qui per continuare la modifica.', - 'store_as_new' => 'Salva come nuova transazione invece di aggiornarla.', - 'reset_after' => 'Resetta il modulo dopo l\'invio', - 'errors_submission' => 'Errore durante l\'invio. Controlla gli errori segnalati qui sotto.', - 'transaction_expand_split' => 'Espandi suddivisione', - 'transaction_collapse_split' => 'Comprimi suddivisione', + 'splits' => 'Suddivisioni', + 'add_another_split' => 'Aggiungi un\'altra divisione', + 'cannot_edit_opening_balance' => 'Non è possibile modificare il saldo di apertura di un conto.', + 'no_edit_multiple_left' => 'Non hai selezionato transazioni valide da modificare.', + 'breadcrumb_convert_group' => 'Converti transazione', + 'convert_invalid_source' => 'L\'informazione di origine non è valida per la transazione #%d.', + 'convert_invalid_destination' => 'L\'informazione di destinazione non è valida per la transazione #%d.', + 'create_another' => 'Dopo il salvataggio, torna qui per crearne un\'altra.', + 'after_update_create_another' => 'Dopo l\'aggiornamento, torna qui per continuare la modifica.', + 'store_as_new' => 'Salva come nuova transazione invece di aggiornarla.', + 'reset_after' => 'Resetta il modulo dopo l\'invio', + 'errors_submission' => 'Errore durante l\'invio. Controlla gli errori segnalati qui sotto.', + 'errors_submission_v2' => 'Errore durante l\'invio. Controlla gli errori segnalati qui sotto: %{errorMessage}', + 'transaction_expand_split' => 'Espandi suddivisione', + 'transaction_collapse_split' => 'Comprimi suddivisione', // object groups - 'default_group_title_name' => '(non in un gruppo)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(non in un gruppo)', + 'default_group_title_name_plain' => 'non raggruppato', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Creiamo un conto attività!', - 'no_accounts_intro_asset' => 'Non hai ancora un conto attività. I conti attività sono i tuoi conti principali: il tuo conto corrente, il tuo conto di risparmio, il conto condiviso o persino la tua carta di credito.', - 'no_accounts_imperative_asset' => 'Per iniziare a utilizzare Firefly III è necessario creare almeno un conto attività. Facciamolo ora:', - 'no_accounts_create_asset' => 'Crea un conto attività', - 'no_accounts_title_expense' => 'Creiamo un conto spese!', - 'no_accounts_intro_expense' => 'Non hai ancora un conto spesa. I conti spese sono i luoghi in cui si spendono soldi, come negozi e supermercati.', - 'no_accounts_imperative_expense' => 'I conti spesa vengono creati automaticamente quando si creano le transazioni, ma è possibile crearne anche manualmente, se lo si desidera. Ne creiamo uno ora:', - 'no_accounts_create_expense' => 'Crea conto spesa', - 'no_accounts_title_revenue' => 'Creiamo un conto entrate!', - 'no_accounts_intro_revenue' => 'Non hai ancora un conto entrate. I conti delle entrate sono i luoghi da cui ricevi denaro, come il tuo datore di lavoro.', - 'no_accounts_imperative_revenue' => 'I conti entrate vengono creati automaticamente quando si creano le transazioni, ma è possibile crearne anche manualmente, se lo si desidera. Creiamone uno ora:', - 'no_accounts_create_revenue' => 'Crea conto entrate', - 'no_accounts_title_liabilities' => 'Creiamo una passività!', - 'no_accounts_intro_liabilities' => 'Non hai ancora delle passività. Le passività sono conti che registrano i prestiti (studenteschi) e altri debiti.', - 'no_accounts_imperative_liabilities' => 'Non è necessario che usi questa funzionalità ma può essere utile se vuoi tenere traccia di queste cose.', - 'no_accounts_create_liabilities' => 'Crea una passività', - 'no_budgets_title_default' => 'Creiamo un budget', - 'no_rules_title_default' => 'Creiamo una regola', - 'no_budgets_intro_default' => 'Non hai ancora budget. I budget sono usati per organizzare le tue spese in gruppi logici, ai quali puoi dare un tetto indicativo per limitare le tue spese.', - 'no_rules_intro_default' => 'Non hai ancora regole. Le regole sono potenti automazioni in grado di gestire le transazioni per te.', - 'no_rules_imperative_default' => 'Le regole possono essere molto utili quando gestisci le transazioni. Creiamone una:', - 'no_budgets_imperative_default' => 'I budget sono gli strumenti di base della gestione finanziaria. Creiamone uno ora:', - 'no_budgets_create_default' => 'Crea budget', - 'no_rules_create_default' => 'Crea regola', - 'no_categories_title_default' => 'Creaiamo una categoria!', - 'no_categories_intro_default' => 'Non hai ancora categorie. Le categorie vengono utilizzate per mettere a punto le transazioni e etichettarle con la categoria designata.', - 'no_categories_imperative_default' => 'Le categorie vengono create automaticamente quando si creano le transazioni, ma è possibile crearne anche manualmente. Ne creiamo una ora:', - 'no_categories_create_default' => 'Crea categoria', - 'no_tags_title_default' => 'Creiamo una etichetta!', - 'no_tags_intro_default' => 'Non hai ancora un etichetta. Le etichette vengono utilizzate per mettere a punto le transazioni e etichettarle con parole chiave specifiche.', - 'no_tags_imperative_default' => 'Le etichette vengono create automaticamente quando si creano le transazioni, ma è possibile crearne anche manualmente. Creiamo una ora:', - 'no_tags_create_default' => 'Crea etichetta', - 'no_transactions_title_withdrawal' => 'Creiamo una spesa!', - 'no_transactions_intro_withdrawal' => 'Non hai ancora spese. Dovresti creare delle spese per iniziare a gestire le tue finanze.', - 'no_transactions_imperative_withdrawal' => 'Hai effettuato delle spese? Dovresti registrarle:', - 'no_transactions_create_withdrawal' => 'Crea spese', - 'no_transactions_title_deposit' => 'Creiamo delle entrate!', - 'no_transactions_intro_deposit' => 'Non hai ancora delle entrate registrate. Dovresti creare delle voci di entrata per iniziare a gestire le tue finanze.', - 'no_transactions_imperative_deposit' => 'Hai ricevuto dei soldi? Dovresti scriverlo:', - 'no_transactions_create_deposit' => 'Crea una entrata', - 'no_transactions_title_transfers' => 'Creiamo un trasferimento!', - 'no_transactions_intro_transfers' => 'Non hai ancora trasferimenti. Quando sposti denaro tra i conti attività, viene registrato come trasferimento.', - 'no_transactions_imperative_transfers' => 'Hai spostato dei soldi in giro? Dovresti scriverlo:', - 'no_transactions_create_transfers' => 'Crea un trasferimento', - 'no_piggies_title_default' => 'Creiamo un salvadanaio!', - 'no_piggies_intro_default' => 'Non hai ancora salvadanai. Puoi creare salvadanai per dividere i tuoi risparmi e tenere traccia di ciò per cui stai risparmiando.', - 'no_piggies_imperative_default' => 'Hai cose per le quali stai risparmiando? Crea un salvadanaio e tieni traccia:', - 'no_piggies_create_default' => 'Crea un nuovo salvadanaio', - 'no_bills_title_default' => 'Creiamo una bolletta!', - 'no_bills_intro_default' => 'Non hai ancora nessuna bolletta. Puoi creare bollette per tenere traccia delle spese regolari, come il tuo affitto o l\'assicurazione.', - 'no_bills_imperative_default' => 'Hai delle bollette regolari? Crea una bolletta e tieni traccia dei tuoi pagamenti:', - 'no_bills_create_default' => 'Crea bolletta', + 'no_accounts_title_asset' => 'Creiamo un conto attività!', + 'no_accounts_intro_asset' => 'Non hai ancora un conto attività. I conti attività sono i tuoi conti principali: il tuo conto corrente, il tuo conto di risparmio, il conto condiviso o persino la tua carta di credito.', + 'no_accounts_imperative_asset' => 'Per iniziare a utilizzare Firefly III è necessario creare almeno un conto attività. Facciamolo ora:', + 'no_accounts_create_asset' => 'Crea un conto attività', + 'no_accounts_title_expense' => 'Creiamo un conto spese!', + 'no_accounts_intro_expense' => 'Non hai ancora un conto spesa. I conti spese sono i luoghi in cui si spendono soldi, come negozi e supermercati.', + 'no_accounts_imperative_expense' => 'I conti spesa vengono creati automaticamente quando si creano le transazioni, ma è possibile crearne anche manualmente, se lo si desidera. Ne creiamo uno ora:', + 'no_accounts_create_expense' => 'Crea conto spesa', + 'no_accounts_title_revenue' => 'Creiamo un conto entrate!', + 'no_accounts_intro_revenue' => 'Non hai ancora un conto entrate. I conti delle entrate sono i luoghi da cui ricevi denaro, come il tuo datore di lavoro.', + 'no_accounts_imperative_revenue' => 'I conti entrate vengono creati automaticamente quando si creano le transazioni, ma è possibile crearne anche manualmente, se lo si desidera. Creiamone uno ora:', + 'no_accounts_create_revenue' => 'Crea conto entrate', + 'no_accounts_title_liabilities' => 'Creiamo una passività!', + 'no_accounts_intro_liabilities' => 'Non hai ancora delle passività. Le passività sono conti che registrano i prestiti (studenteschi) e altri debiti.', + 'no_accounts_imperative_liabilities' => 'Non è necessario che usi questa funzionalità ma può essere utile se vuoi tenere traccia di queste cose.', + 'no_accounts_create_liabilities' => 'Crea una passività', + 'no_budgets_title_default' => 'Creiamo un budget', + 'no_rules_title_default' => 'Creiamo una regola', + 'no_budgets_intro_default' => 'Non hai ancora budget. I budget sono usati per organizzare le tue spese in gruppi logici, ai quali puoi dare un tetto indicativo per limitare le tue spese.', + 'no_rules_intro_default' => 'Non hai ancora regole. Le regole sono potenti automazioni in grado di gestire le transazioni per te.', + 'no_rules_imperative_default' => 'Le regole possono essere molto utili quando gestisci le transazioni. Creiamone una:', + 'no_budgets_imperative_default' => 'I budget sono gli strumenti di base della gestione finanziaria. Creiamone uno ora:', + 'no_budgets_create_default' => 'Crea budget', + 'no_rules_create_default' => 'Crea regola', + 'no_categories_title_default' => 'Creaiamo una categoria!', + 'no_categories_intro_default' => 'Non hai ancora categorie. Le categorie vengono utilizzate per mettere a punto le transazioni e etichettarle con la categoria designata.', + 'no_categories_imperative_default' => 'Le categorie vengono create automaticamente quando si creano le transazioni, ma è possibile crearne anche manualmente. Ne creiamo una ora:', + 'no_categories_create_default' => 'Crea categoria', + 'no_tags_title_default' => 'Creiamo una etichetta!', + 'no_tags_intro_default' => 'Non hai ancora un etichetta. Le etichette vengono utilizzate per mettere a punto le transazioni e etichettarle con parole chiave specifiche.', + 'no_tags_imperative_default' => 'Le etichette vengono create automaticamente quando si creano le transazioni, ma è possibile crearne anche manualmente. Creiamo una ora:', + 'no_tags_create_default' => 'Crea etichetta', + 'no_transactions_title_withdrawal' => 'Creiamo una spesa!', + 'no_transactions_intro_withdrawal' => 'Non hai ancora spese. Dovresti creare delle spese per iniziare a gestire le tue finanze.', + 'no_transactions_imperative_withdrawal' => 'Hai effettuato delle spese? Dovresti registrarle:', + 'no_transactions_create_withdrawal' => 'Crea spese', + 'no_transactions_title_deposit' => 'Creiamo delle entrate!', + 'no_transactions_intro_deposit' => 'Non hai ancora delle entrate registrate. Dovresti creare delle voci di entrata per iniziare a gestire le tue finanze.', + 'no_transactions_imperative_deposit' => 'Hai ricevuto dei soldi? Dovresti scriverlo:', + 'no_transactions_create_deposit' => 'Crea una entrata', + 'no_transactions_title_transfers' => 'Creiamo un trasferimento!', + 'no_transactions_intro_transfers' => 'Non hai ancora trasferimenti. Quando sposti denaro tra i conti attività, viene registrato come trasferimento.', + 'no_transactions_imperative_transfers' => 'Hai spostato dei soldi in giro? Dovresti scriverlo:', + 'no_transactions_create_transfers' => 'Crea un trasferimento', + 'no_piggies_title_default' => 'Creiamo un salvadanaio!', + 'no_piggies_intro_default' => 'Non hai ancora salvadanai. Puoi creare salvadanai per dividere i tuoi risparmi e tenere traccia di ciò per cui stai risparmiando.', + 'no_piggies_imperative_default' => 'Hai cose per le quali stai risparmiando? Crea un salvadanaio e tieni traccia:', + 'no_piggies_create_default' => 'Crea un nuovo salvadanaio', + 'no_bills_title_default' => 'Creiamo una bolletta!', + 'no_bills_intro_default' => 'Non hai ancora nessuna bolletta. Puoi creare bollette per tenere traccia delle spese regolari, come il tuo affitto o l\'assicurazione.', + 'no_bills_imperative_default' => 'Hai delle bollette regolari? Crea una bolletta e tieni traccia dei tuoi pagamenti:', + 'no_bills_create_default' => 'Crea bolletta', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Transazioni ricorrenti', - 'repeat_until_in_past' => 'Questa transazione ricorrente ha smesso di ripetersi il :date.', - 'recurring_calendar_view' => 'Calendario', - 'no_recurring_title_default' => 'Creiamo una transazione ricorrente!', - 'no_recurring_intro_default' => 'Non hai ancora una transazione ricorrente. Puoi utilizzare queste per lasciare che Firefly III crei automaticamente le transazioni per te.', - 'no_recurring_imperative_default' => 'Questa è una caratteristica piuttosto avanzata che può essere estremamente utile. Assicurati di leggere la documentazione (l\'icona (?) nell\'angolo in alto a destra) prima di continuare.', - 'no_recurring_create_default' => 'Crea una transazione ricorrente', - 'make_new_recurring' => 'Crea una transazione ricorrente', - 'recurring_daily' => 'Ogni giorno', - 'recurring_weekly' => 'Ogni settimana di :weekday', - 'recurring_weekly_skip' => 'Ogni :skip° settimana il :weekday', - 'recurring_monthly' => 'Ogni mese il giorno :dayOfMonth', - 'recurring_monthly_skip' => 'Il giorno :dayOfMonth di ogni :skip° mese', - 'recurring_ndom' => 'Ogni :dayOfMonth° :weekday del mese', - 'recurring_yearly' => 'Ogni anno il :date', - 'overview_for_recurrence' => 'Panoramica per la transazione ricorrente ":title"', - 'warning_duplicates_repetitions' => 'In alcuni casi rari è possibile che delle date appaiano due volte in questa lista. Questo può succedere quando ripetizioni multiple collidono. Firefly III si assicurerà sempre di generare una sola transazione per giorno.', - 'created_transactions' => 'Transazioni collegate', - 'expected_withdrawals' => 'Prelievi previsti', - 'expected_deposits' => 'Depositi previsti', - 'expected_transfers' => 'Trasferimenti previsti', - 'created_withdrawals' => 'Prelievi creati', - 'created_deposits' => 'Depositi creati', - 'created_transfers' => 'Trasferimenti creati', - 'recurring_info' => 'Transazione ricorrente :count / :total', - 'created_from_recurrence' => 'Creata dalla transazione ricorrente ":title" (#:id)', - 'recurring_never_cron' => 'Sembra che il job cron necessario per le transazioni ricorrenti non sia mai stato eseguito. Questo è ovviamente normale quando hai appena installato Firefly III, tuttavia dovrebbe essere impostato il prima possibile. Consulta le pagine di aiuto usando l\'icona (?) nell\'angolo in alto a destra della pagina.', - 'recurring_cron_long_ago' => 'Sembra che siano passate più di 36 ore dall\'ultima volta che il job cron per le transazioni ricorrenti sia stato lanciato. Sei sicuro che sia stato impostato correttamente? Consulta le pagine di aiuto usando l\'icona (?) nell\'angolo in alto a destra della pagina.', + 'create_right_now' => 'Crea adesso', + 'no_new_transaction_in_recurrence' => 'Nessuna nuova transazione creata. Forse è già sta effettuata per questa data?', + 'recurrences' => 'Transazioni ricorrenti', + 'repeat_until_in_past' => 'Questa transazione ricorrente ha smesso di ripetersi il :date.', + 'recurring_calendar_view' => 'Calendario', + 'no_recurring_title_default' => 'Creiamo una transazione ricorrente!', + 'no_recurring_intro_default' => 'Non hai ancora una transazione ricorrente. Puoi utilizzare queste per lasciare che Firefly III crei automaticamente le transazioni per te.', + 'no_recurring_imperative_default' => 'Questa è una caratteristica piuttosto avanzata che può essere estremamente utile. Assicurati di leggere la documentazione (l\'icona (?) nell\'angolo in alto a destra) prima di continuare.', + 'no_recurring_create_default' => 'Crea una transazione ricorrente', + 'make_new_recurring' => 'Crea una transazione ricorrente', + 'recurring_daily' => 'Ogni giorno', + 'recurring_weekly' => 'Ogni settimana di :weekday', + 'recurring_weekly_skip' => 'Ogni :skip° settimana il :weekday', + 'recurring_monthly' => 'Ogni mese il giorno :dayOfMonth', + 'recurring_monthly_skip' => 'Il giorno :dayOfMonth di ogni :skip° mese', + 'recurring_ndom' => 'Ogni :dayOfMonth° :weekday del mese', + 'recurring_yearly' => 'Ogni anno il :date', + 'overview_for_recurrence' => 'Panoramica per la transazione ricorrente ":title"', + 'warning_duplicates_repetitions' => 'In alcuni casi rari è possibile che delle date appaiano due volte in questa lista. Questo può succedere quando ripetizioni multiple collidono. Firefly III si assicurerà sempre di generare una sola transazione per giorno.', + 'created_transactions' => 'Transazioni collegate', + 'expected_withdrawals' => 'Prelievi previsti', + 'expected_deposits' => 'Depositi previsti', + 'expected_transfers' => 'Trasferimenti previsti', + 'created_withdrawals' => 'Prelievi creati', + 'created_deposits' => 'Depositi creati', + 'created_transfers' => 'Trasferimenti creati', + 'recurring_info' => 'Transazione ricorrente :count / :total', + 'created_from_recurrence' => 'Creata dalla transazione ricorrente ":title" (#:id)', + 'recurring_never_cron' => 'Sembra che il job cron necessario per le transazioni ricorrenti non sia mai stato eseguito. Questo è ovviamente normale quando hai appena installato Firefly III, tuttavia dovrebbe essere impostato il prima possibile. Consulta le pagine di aiuto usando l\'icona (?) nell\'angolo in alto a destra della pagina.', + 'recurring_cron_long_ago' => 'Sembra che siano passate più di 36 ore dall\'ultima volta che il job cron per le transazioni ricorrenti sia stato lanciato. Sei sicuro che sia stato impostato correttamente? Consulta le pagine di aiuto usando l\'icona (?) nell\'angolo in alto a destra della pagina.', - 'create_new_recurrence' => 'Crea una nuova transazione ricorrente', - 'help_first_date' => 'Indica quando la ricorrenza dovrebbe avvenire per la prima volta. Questo deve essere nel futuro.', - 'help_first_date_no_past' => 'Indica quando la ricorrenza dovrebbe avvenire per la prima volta. Firefly III non creerà transazioni nel passato.', - 'no_currency' => '(nessuna valuta)', - 'mandatory_for_recurring' => 'Informazioni obbligatorie sulla ricorrenza', - 'mandatory_for_transaction' => 'Informazioni obbligatorie sulla transazione', - 'optional_for_recurring' => 'Informazioni facoltative sulla ricorrenza', - 'optional_for_transaction' => 'Informazioni facoltative sulla transazione', - 'change_date_other_options' => 'Cambia la "prima volta" per visualizzare maggiori opzioni.', - 'mandatory_fields_for_tranaction' => 'Il valore qui presente finirà nella transazione che verrà creata', - 'click_for_calendar' => 'Clicca qui per visualizzare in un calendario quando la transazione si ripete.', - 'repeat_forever' => 'Ripeti per sempre', - 'repeat_until_date' => 'Ripeti fino alla data', - 'repeat_times' => 'Ripeti per un certo numero di volte', - 'recurring_skips_one' => 'Una volta sì e una volta no', - 'recurring_skips_more' => 'Salta per :count volte', - 'store_new_recurrence' => 'Salva transazione ricorrente', - 'stored_new_recurrence' => 'La transazione ricorrente ":title" è stata salvata con successo.', - 'edit_recurrence' => 'Modifica transazione ricorrente ":title"', - 'recurring_repeats_until' => 'Si ripete fino al :date', - 'recurring_repeats_forever' => 'Si ripete per sempre', - 'recurring_repeats_x_times' => 'Si ripete per :count volta|Si ripete per :count volte', - 'update_recurrence' => 'Aggiorna transazione ricorrente', - 'updated_recurrence' => 'Transazione ricorrente ":title" aggiornata', - 'recurrence_is_inactive' => 'Questa transazione ricorrente non è attiva e non genererà nuove transazioni.', - 'delete_recurring' => 'Elimina transazione ricorrente ":title"', - 'new_recurring_transaction' => 'Nuova transazione ricorrente', - 'help_weekend' => 'Cosa vuoi che Firefly III faccia quando la transazione ricorrente cade di sabato o domenica?', - 'do_nothing' => 'Crea la transazione', - 'skip_transaction' => 'Salta l\'occorrenza', - 'jump_to_friday' => 'Crea la transazione il venerdì precedente', - 'jump_to_monday' => 'Crea la transazione il lunedì successivo', - 'will_jump_friday' => 'Verrà creata il venerdì anziché nel fine settimana.', - 'will_jump_monday' => 'Verrà creata il lunedì anziché il fine settimana.', - 'except_weekends' => 'Tranne il fine settimana', - 'recurrence_deleted' => 'La transazione ricorrente ":title" è stata eliminata', + 'create_new_recurrence' => 'Crea una nuova transazione ricorrente', + 'help_first_date' => 'Indica quando la ricorrenza dovrebbe avvenire per la prima volta. Questo deve essere nel futuro.', + 'help_first_date_no_past' => 'Indica quando la ricorrenza dovrebbe avvenire per la prima volta. Firefly III non creerà transazioni nel passato.', + 'no_currency' => '(nessuna valuta)', + 'mandatory_for_recurring' => 'Informazioni obbligatorie sulla ricorrenza', + 'mandatory_for_transaction' => 'Informazioni obbligatorie sulla transazione', + 'optional_for_recurring' => 'Informazioni facoltative sulla ricorrenza', + 'optional_for_transaction' => 'Informazioni facoltative sulla transazione', + 'change_date_other_options' => 'Cambia la "prima volta" per visualizzare maggiori opzioni.', + 'mandatory_fields_for_tranaction' => 'Il valore qui presente finirà nella transazione che verrà creata', + 'click_for_calendar' => 'Clicca qui per visualizzare in un calendario quando la transazione si ripete.', + 'repeat_forever' => 'Ripeti per sempre', + 'repeat_until_date' => 'Ripeti fino alla data', + 'repeat_times' => 'Ripeti per un certo numero di volte', + 'recurring_skips_one' => 'Una volta sì e una volta no', + 'recurring_skips_more' => 'Salta per :count volte', + 'store_new_recurrence' => 'Salva transazione ricorrente', + 'stored_new_recurrence' => 'La transazione ricorrente ":title" è stata salvata con successo.', + 'edit_recurrence' => 'Modifica transazione ricorrente ":title"', + 'recurring_repeats_until' => 'Si ripete fino al :date', + 'recurring_repeats_forever' => 'Si ripete per sempre', + 'recurring_repeats_x_times' => 'Si ripete per :count volta|Si ripete per :count volte', + 'update_recurrence' => 'Aggiorna transazione ricorrente', + 'updated_recurrence' => 'Transazione ricorrente ":title" aggiornata', + 'recurrence_is_inactive' => 'Questa transazione ricorrente non è attiva e non genererà nuove transazioni.', + 'delete_recurring' => 'Elimina transazione ricorrente ":title"', + 'new_recurring_transaction' => 'Nuova transazione ricorrente', + 'help_weekend' => 'Cosa vuoi che Firefly III faccia quando la transazione ricorrente cade di sabato o domenica?', + 'do_nothing' => 'Crea la transazione', + 'skip_transaction' => 'Salta l\'occorrenza', + 'jump_to_friday' => 'Crea la transazione il venerdì precedente', + 'jump_to_monday' => 'Crea la transazione il lunedì successivo', + 'will_jump_friday' => 'Verrà creata il venerdì anziché nel fine settimana.', + 'will_jump_monday' => 'Verrà creata il lunedì anziché il fine settimana.', + 'except_weekends' => 'Tranne il fine settimana', + 'recurrence_deleted' => 'La transazione ricorrente ":title" è stata eliminata', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Saldo (:currency)', - 'box_spent_in_currency' => 'Spesi (:currency)', - 'box_earned_in_currency' => 'Guadagnati (:currency)', - 'box_budgeted_in_currency' => 'A budget (:currency)', - 'box_bill_paid_in_currency' => 'Bollette pagate (:currency)', - 'box_bill_unpaid_in_currency' => 'Bollette non pagate (:currency)', - 'box_left_to_spend_in_currency' => 'Disponibile da spendere (:currency)', - 'box_net_worth_in_currency' => 'Patrimonio netto (:currency)', - 'box_spend_per_day' => 'Disponibile da spendere per giorno: :amount', + 'box_balance_in_currency' => 'Saldo (:currency)', + 'box_spent_in_currency' => 'Spesi (:currency)', + 'box_earned_in_currency' => 'Guadagnati (:currency)', + 'box_budgeted_in_currency' => 'A budget (:currency)', + 'box_bill_paid_in_currency' => 'Bollette pagate (:currency)', + 'box_bill_unpaid_in_currency' => 'Bollette non pagate (:currency)', + 'box_left_to_spend_in_currency' => 'Disponibile da spendere (:currency)', + 'box_net_worth_in_currency' => 'Patrimonio netto (:currency)', + 'box_spend_per_day' => 'Disponibile da spendere per giorno: :amount', // debug page - 'debug_page' => 'Pagina di debug', - 'debug_submit_instructions' => 'Se incontri problemi, puoi usare le informazioni in questo riquadro come informazioni di debug. Copia-incollale in una nuova o esistente issue di Github. Creerà una bellissima tabella che potrà essere utilizzata per diagnosticare rapidamente il tuo problema.', - 'debug_pretty_table' => 'Copia-incollando il riquadro sottostante in una issue di Github verrà creata una tabella. Non circondare questo testo con accenti gravi o virgolette.', - 'debug_additional_data' => 'Puoi anche condividere il contenuto del riquadro sottostante. È anche possibile copiare e incollare questo in una nuova o esistente issue di GitHub. Tuttavia, il contenuto di questo riquadro può contenere informazioni private come i nomi dei conti, i dettagli delle transazioni o indirizzi e-mail.', + 'debug_page' => 'Pagina di debug', + 'debug_submit_instructions' => 'Se incontri problemi, puoi usare le informazioni in questo riquadro come informazioni di debug. Copia-incollale in una nuova o esistente issue di Github. Creerà una bellissima tabella che potrà essere utilizzata per diagnosticare rapidamente il tuo problema.', + 'debug_pretty_table' => 'Copia-incollando il riquadro sottostante in una issue di Github verrà creata una tabella. Non circondare questo testo con accenti gravi o virgolette.', + 'debug_additional_data' => 'Puoi anche condividere il contenuto del riquadro sottostante. È anche possibile copiare e incollare questo in una nuova o esistente issue di GitHub. Tuttavia, il contenuto di questo riquadro può contenere informazioni private come i nomi dei conti, i dettagli delle transazioni o indirizzi e-mail.', // object groups - 'object_groups_menu_bar' => 'Gruppi', - 'object_groups_page_title' => 'Gruppi', - 'object_groups_breadcrumb' => 'Gruppi', - 'object_groups_index' => 'Panoramica', - 'object_groups' => 'Gruppi', - 'object_groups_empty_explain' => 'Alcune cose in Firefly III possono essere divise in gruppi. I salvadanai, per esempio, dispongono di un campo "Gruppo" nelle schermate di modifica e creazione. Quando si imposta questo campo, è possibile modificare i nomi e l\'ordine dei gruppi in questa pagina. Per ulteriori informazioni, consulta le pagine di aiuto nell\'angolo in alto a destra, con l\'icona (?).', - 'object_group_title' => 'Titolo', - 'edit_object_group' => 'Modifica gruppo ":title"', - 'delete_object_group' => 'Elimina gruppo ":title"', - 'update_object_group' => 'Aggiorna gruppo', - 'updated_object_group' => 'Il gruppo ":title" è stato aggiornato con successo', - 'deleted_object_group' => 'Il gruppo ":title" è stato eliminato con successo', - 'object_group' => 'Gruppo', + 'object_groups_menu_bar' => 'Gruppi', + 'object_groups_page_title' => 'Gruppi', + 'object_groups_breadcrumb' => 'Gruppi', + 'object_groups_index' => 'Panoramica', + 'object_groups' => 'Gruppi', + 'object_groups_empty_explain' => 'Alcune cose in Firefly III possono essere divise in gruppi. I salvadanai, per esempio, dispongono di un campo "Gruppo" nelle schermate di modifica e creazione. Quando si imposta questo campo, è possibile modificare i nomi e l\'ordine dei gruppi in questa pagina. Per ulteriori informazioni, consulta le pagine di aiuto nell\'angolo in alto a destra, con l\'icona (?).', + 'object_group_title' => 'Titolo', + 'edit_object_group' => 'Modifica gruppo ":title"', + 'delete_object_group' => 'Elimina gruppo ":title"', + 'update_object_group' => 'Aggiorna gruppo', + 'updated_object_group' => 'Il gruppo ":title" è stato aggiornato con successo', + 'deleted_object_group' => 'Il gruppo ":title" è stato eliminato con successo', + 'object_group' => 'Gruppo', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Etichette cancellate', - 'ale_action_clear_all_tags' => 'Tutte le etichette sono state cancellate', - 'ale_action_set_bill' => 'Collegato alla fattura', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Imposta un budget', - 'ale_action_set_category' => 'Imposta una categoria', - 'ale_action_set_source' => 'Imposta un conto di origine', - 'ale_action_set_destination' => 'Imposta un beneficiario', - 'ale_action_update_transaction_type' => 'Tipo di transazione modificato', - 'ale_action_update_notes' => 'Note cambiate', - 'ale_action_update_description' => 'Modifica descrizione', - 'ale_action_add_to_piggy' => 'Salvadanaio', - 'ale_action_remove_from_piggy' => 'Salvadanaio', - 'ale_action_add_tag' => 'Etichette aggiunte', + 'audit_log_entries' => 'Voci del registro di controllo', + 'ale_action_log_add' => 'Aggiunto :amount al salvadanaio ":name"', + 'ale_action_log_remove' => 'Rimosso :amount dal salvadanaio ":name"', + 'ale_action_clear_budget' => 'Rimosso dal budget', + 'ale_action_update_group_title' => 'Titolo del gruppo di transazioni aggiornato', + 'ale_action_update_date' => 'Data della transazione aggiornata', + 'ale_action_update_order' => 'Ordine di transazione aggiornato', + 'ale_action_clear_category' => 'Rimossa dalla categoria', + 'ale_action_clear_notes' => 'Note rimosse', + 'ale_action_clear_tag' => 'Etichette cancellate', + 'ale_action_clear_all_tags' => 'Tutte le etichette sono state cancellate', + 'ale_action_set_bill' => 'Collegato alla fattura', + 'ale_action_switch_accounts' => 'Conto di origine e di destinazione scambiato', + 'ale_action_set_budget' => 'Imposta un budget', + 'ale_action_set_category' => 'Imposta una categoria', + 'ale_action_set_source' => 'Imposta un conto di origine', + 'ale_action_set_destination' => 'Imposta un beneficiario', + 'ale_action_update_transaction_type' => 'Tipo di transazione modificato', + 'ale_action_update_notes' => 'Note cambiate', + 'ale_action_update_description' => 'Modifica descrizione', + 'ale_action_add_to_piggy' => 'Salvadanaio', + 'ale_action_remove_from_piggy' => 'Salvadanaio', + 'ale_action_add_tag' => 'Etichette aggiunte', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Abilita la conversione della valuta', + 'disable_auto_convert' => 'Disabilita la conversione della valuta', ]; /* diff --git a/resources/lang/it_IT/form.php b/resources/lang/it_IT/form.php index b98148eb5c..92bf67158b 100644 --- a/resources/lang/it_IT/form.php +++ b/resources/lang/it_IT/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Nome banca', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Saldo risparmi', - 'credit_card_limit' => 'Limite carta di credito', - 'automatch' => 'Abbina automaticamente', - 'skip' => 'Salta ogni', - 'enabled' => 'Abilitata', - 'name' => 'Nome', - 'active' => 'Attivo', - 'amount_min' => 'Importo minimo', - 'amount_max' => 'Importo massimo', - 'match' => 'Abbina con', - 'strict' => 'Modalità severa', - 'repeat_freq' => 'Si ripete', - 'object_group' => 'Gruppo', - 'location' => 'Posizione', - 'update_channel' => 'Canale di aggiornamento', - 'currency_id' => 'Valuta', - 'transaction_currency_id' => 'Valuta', - 'auto_budget_currency_id' => 'Valuta', - 'external_ip' => 'L\'IP esterno del tuo server', - 'attachments' => 'Allegati', - 'BIC' => 'BIC', - 'verify_password' => 'Verifica password di sicurezza', - 'source_account' => 'Conto di origine', - 'destination_account' => 'Conto destinazione', - 'asset_destination_account' => 'Conto di destinazione', - 'include_net_worth' => 'Includi nel patrimonio', - 'asset_source_account' => 'Conto di origine', - 'journal_description' => 'Descrizione', - 'note' => 'Note', - 'currency' => 'Valuta', - 'account_id' => 'Conto attività', - 'budget_id' => 'Budget', - 'bill_id' => 'Bolletta', - 'opening_balance' => 'Saldo di apertura', - 'tagMode' => 'Modalità etichetta', - 'virtual_balance' => 'Saldo virtuale', + 'bank_name' => 'Nome banca', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Saldo risparmi', + 'credit_card_limit' => 'Limite carta di credito', + 'automatch' => 'Abbina automaticamente', + 'skip' => 'Salta ogni', + 'enabled' => 'Abilitata', + 'name' => 'Nome', + 'active' => 'Attivo', + 'amount_min' => 'Importo minimo', + 'amount_max' => 'Importo massimo', + 'match' => 'Abbina con', + 'strict' => 'Modalità severa', + 'repeat_freq' => 'Si ripete', + 'object_group' => 'Gruppo', + 'location' => 'Posizione', + 'update_channel' => 'Canale di aggiornamento', + 'currency_id' => 'Valuta', + 'transaction_currency_id' => 'Valuta', + 'auto_budget_currency_id' => 'Valuta', + 'external_ip' => 'L\'IP esterno del tuo server', + 'attachments' => 'Allegati', + 'BIC' => 'BIC', + 'verify_password' => 'Verifica password di sicurezza', + 'source_account' => 'Conto di origine', + 'destination_account' => 'Conto destinazione', + 'asset_destination_account' => 'Conto di destinazione', + 'include_net_worth' => 'Includi nel patrimonio', + 'asset_source_account' => 'Conto di origine', + 'journal_description' => 'Descrizione', + 'note' => 'Note', + 'currency' => 'Valuta', + 'account_id' => 'Conto attività', + 'budget_id' => 'Budget', + 'bill_id' => 'Bolletta', + 'opening_balance' => 'Saldo di apertura', + 'tagMode' => 'Modalità etichetta', + 'virtual_balance' => 'Saldo virtuale', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Importo obiettivo', 'account_role' => 'Ruolo del conto', 'opening_balance_date' => 'Data saldo di apertura', @@ -147,7 +145,7 @@ return [ 'start_date' => 'Inizio intervallo', 'end_date' => 'Fine intervallo', 'enddate' => 'Data di scadenza', - 'move_rules_before_delete' => 'Rule group', + 'move_rules_before_delete' => 'Gruppo regole', 'start' => 'Inizio intervallo', 'end' => 'Fine intervallo', 'delete_account' => 'Elimina conto ":name"', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Sei sicuro di voler eliminare la transazione ":description"?', 'mass_journal_are_you_sure' => 'Sei sicuro di voler eliminare queste transazioni?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Sei sicuro di voler eliminare l\'etichetta ":tag"?', 'journal_link_areYouSure' => 'Sei sicuro di voler eliminare il collegamento tra :source e :destination?', 'linkType_areYouSure' => 'Sei sicuro di voler eliminare il tipo di collegamento ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Brano', - // admin 'domain' => 'Dominio', 'single_user_mode' => 'Disabilita registrazione utente', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Conto FinTS', 'local_account' => 'Conto Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Data inizio', - 'to_date' => 'Alla data', - 'due_date' => 'Data scadenza', - 'payment_date' => 'Data pagamento', - 'invoice_date' => 'Data fatturazione', - 'internal_reference' => 'Riferimento interno', - 'inward' => 'Descrizione in ingresso', - 'outward' => 'Descrizione in uscita', - 'rule_group_id' => 'Gruppo regole', - 'transaction_description' => 'Descrizione transazione', - 'first_date' => 'Prima volta', - 'transaction_type' => 'Tipo transazione', - 'repeat_until' => 'Ripeti fino a', - 'recurring_description' => 'Descrizione transazione ricorrente', - 'repetition_type' => 'Tipo ripetizione', - 'foreign_currency_id' => 'Valuta estera', - 'repetition_end' => 'La ripetizione termina il', - 'repetitions' => 'Ripetizioni', - 'calendar' => 'Calendario', - 'weekend' => 'Fine settimana', - 'client_secret' => 'Segreto del client', - 'withdrawal_destination_id' => 'Conto di destinazione', - 'deposit_source_id' => 'Conto di origine', - 'expected_on' => 'Prevista il', - 'paid' => 'Pagata', - 'auto_budget_type' => 'Budget automatico', - 'auto_budget_amount' => 'Importo budget automatico', - 'auto_budget_period' => 'Periodo budget automatico', - 'collected' => 'Raccolti', - 'submitted' => 'Inviati', - 'key' => 'Chiave', - 'value' => 'Contenuto dei dati', - 'webhook_delivery' => 'Consegna', - 'webhook_response' => 'Risposta', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Data inizio', + 'to_date' => 'Alla data', + 'due_date' => 'Data scadenza', + 'payment_date' => 'Data pagamento', + 'invoice_date' => 'Data fatturazione', + 'internal_reference' => 'Riferimento interno', + 'inward' => 'Descrizione in ingresso', + 'outward' => 'Descrizione in uscita', + 'rule_group_id' => 'Gruppo regole', + 'transaction_description' => 'Descrizione transazione', + 'first_date' => 'Prima volta', + 'transaction_type' => 'Tipo transazione', + 'repeat_until' => 'Ripeti fino a', + 'recurring_description' => 'Descrizione transazione ricorrente', + 'repetition_type' => 'Tipo ripetizione', + 'foreign_currency_id' => 'Valuta estera', + 'repetition_end' => 'La ripetizione termina il', + 'repetitions' => 'Ripetizioni', + 'calendar' => 'Calendario', + 'weekend' => 'Fine settimana', + 'client_secret' => 'Segreto del client', + 'withdrawal_destination_id' => 'Conto di destinazione', + 'deposit_source_id' => 'Conto di origine', + 'expected_on' => 'Prevista il', + 'paid' => 'Pagata', + 'auto_budget_type' => 'Budget automatico', + 'auto_budget_amount' => 'Importo budget automatico', + 'auto_budget_period' => 'Periodo budget automatico', + 'collected' => 'Raccolti', + 'submitted' => 'Inviati', + 'key' => 'Chiave', + 'value' => 'Contenuto dei dati', + 'webhook_delivery' => 'Consegna', + 'webhook_response' => 'Risposta', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/it_IT/intro.php b/resources/lang/it_IT/intro.php index 269504ebb9..3fe3730509 100644 --- a/resources/lang/it_IT/intro.php +++ b/resources/lang/it_IT/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Benvenuti nella pagina indice di Firefly III. Si prega di prendersi il tempo necessario per questa introduzione per avere un\'idea di come funziona Firefly III.', - 'index_accounts-chart' => 'Questo grafico mostra il saldo attuale dei conti attività. Puoi selezionare i conti visibili qui nelle tue preferenze.', - 'index_box_out_holder' => 'Questa piccola casella e le caselle accanto a questa ti daranno una rapida panoramica della tua situazione finanziaria.', - 'index_help' => 'Se hai bisogno di aiuto per una pagina o un modulo, premi questo pulsante.', - 'index_outro' => 'La maggior parte delle pagine di Firefly III inizieranno con un piccolo tour come questo. Vi prego di contattarci quando avete domande o commenti. Grazie!', - 'index_sidebar-toggle' => 'Per creare nuove transazioni, conto o altre cose, usa il menu sotto questa icona.', - 'index_cash_account' => 'Questi sono i conti finora creati. Puoi utilizzare il conto contanti per tracciare le spese in contanti ma ovviamente non è obbligatorio.', + 'index_intro' => 'Benvenuti nella pagina indice di Firefly III. Si prega di prendersi il tempo necessario per questa introduzione per avere un\'idea di come funziona Firefly III.', + 'index_accounts-chart' => 'Questo grafico mostra il saldo attuale dei conti attività. Puoi selezionare i conti visibili qui nelle tue preferenze.', + 'index_box_out_holder' => 'Questa piccola casella e le caselle accanto a questa ti daranno una rapida panoramica della tua situazione finanziaria.', + 'index_help' => 'Se hai bisogno di aiuto per una pagina o un modulo, premi questo pulsante.', + 'index_outro' => 'La maggior parte delle pagine di Firefly III inizieranno con un piccolo tour come questo. Vi prego di contattarci quando avete domande o commenti. Grazie!', + 'index_sidebar-toggle' => 'Per creare nuove transazioni, conto o altre cose, usa il menu sotto questa icona.', + 'index_cash_account' => 'Questi sono i conti finora creati. Puoi utilizzare il conto contanti per tracciare le spese in contanti ma ovviamente non è obbligatorio.', // transactions - 'transactions_create_basic_info' => 'Inserisci le informazioni di base della transazione. Sorgente, destinazione, data e descrizione.', - 'transactions_create_amount_info' => 'Inserisci l\'importo della transazione. Se necessario, i campi si aggiorneranno automaticamente per informazioni sull\'importo estero.', - 'transactions_create_optional_info' => 'Tutti questi campi sono facoltativi. Aggiungendo questi metadati le tue transazioni saranno meglio organizzate.', - 'transactions_create_split' => 'Se vuoi suddividere una transazione, aggiungi ulteriori suddivisioni con questo pulsante', + 'transactions_create_basic_info' => 'Inserisci le informazioni di base della transazione. Sorgente, destinazione, data e descrizione.', + 'transactions_create_amount_info' => 'Inserisci l\'importo della transazione. Se necessario, i campi si aggiorneranno automaticamente per informazioni sull\'importo estero.', + 'transactions_create_optional_info' => 'Tutti questi campi sono facoltativi. Aggiungendo questi metadati le tue transazioni saranno meglio organizzate.', + 'transactions_create_split' => 'Se vuoi suddividere una transazione, aggiungi ulteriori suddivisioni con questo pulsante', // create account: - 'accounts_create_iban' => 'Dai ai tuoi conti un IBAN valido. Ciò potrebbe rendere molto facile l\'importazione dei dati in futuro.', - 'accounts_create_asset_opening_balance' => 'I conti attività possono avere un "saldo di apertura", che indica l\'inizio della cronologia di questo conto in Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III supporta più valute. I conti attività hanno una valuta principale, che devi impostare qui.', - 'accounts_create_asset_virtual' => 'A volte può aiutare a fornire al tuo conto un saldo virtuale: un ulteriore importo sempre aggiunto o rimosso dal saldo effettivo.', + 'accounts_create_iban' => 'Dai ai tuoi conti un IBAN valido. Ciò potrebbe rendere molto facile l\'importazione dei dati in futuro.', + 'accounts_create_asset_opening_balance' => 'I conti attività possono avere un "saldo di apertura", che indica l\'inizio della cronologia di questo conto in Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III supporta più valute. I conti attività hanno una valuta principale, che devi impostare qui.', + 'accounts_create_asset_virtual' => 'A volte può aiutare a fornire al tuo conto un saldo virtuale: un ulteriore importo sempre aggiunto o rimosso dal saldo effettivo.', // budgets index - 'budgets_index_intro' => 'I budget sono usati per gestire le tue finanze e formano una delle funzioni principali di Firefly III.', - 'budgets_index_set_budget' => 'Imposta il tuo budget totale per ogni periodo in modo che Firefly III possa dirti se hai messo a bilancio tutti i soldi disponibili.', - 'budgets_index_see_expenses_bar' => 'Le spese effettuate riempiranno lentamente questa barra.', - 'budgets_index_navigate_periods' => 'Naviga attraverso i periodi per impostare facilmente i budget in anticipo.', - 'budgets_index_new_budget' => 'Crea nuovi budget come meglio credi.', - 'budgets_index_list_of_budgets' => 'Usa questa tabella per impostare gli importi per ciascun budget e vedere l\'andamento.', - 'budgets_index_outro' => 'Per saperne di più sui budget, controlla l\'icona della guida nell\'angolo in alto a destra.', + 'budgets_index_intro' => 'I budget sono usati per gestire le tue finanze e formano una delle funzioni principali di Firefly III.', + 'budgets_index_see_expenses_bar' => 'Le spese effettuate riempiranno lentamente questa barra.', + 'budgets_index_navigate_periods' => 'Naviga attraverso i periodi per impostare facilmente i budget in anticipo.', + 'budgets_index_new_budget' => 'Crea nuovi budget come meglio credi.', + 'budgets_index_list_of_budgets' => 'Usa questa tabella per impostare gli importi per ciascun budget e vedere l\'andamento.', + 'budgets_index_outro' => 'Per saperne di più sui budget, controlla l\'icona della guida nell\'angolo in alto a destra.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Utilizza questi resoconti per ottenere informazioni dettagliate sulle tue finanze.', - 'reports_index_inputReportType' => 'Scegli un tipo di resoconto. Consulta le pagine della guida per vedere cosa ti mostra ciascuna resoconto.', - 'reports_index_inputAccountsSelect' => 'Puoi escludere o includere i conti attività come ritieni opportuno.', - 'reports_index_inputDateRange' => 'L\'intervallo di date selezionato dipende interamente da te: da un giorno a 10 anni.', - 'reports_index_extra-options-box' => 'A seconda del resoconto che hai selezionato, puoi selezionare filtri e opzioni aggiuntive qui. Guarda questa casella quando cambi i tipi di resoconto.', + 'reports_index_intro' => 'Utilizza questi resoconti per ottenere informazioni dettagliate sulle tue finanze.', + 'reports_index_inputReportType' => 'Scegli un tipo di resoconto. Consulta le pagine della guida per vedere cosa ti mostra ciascuna resoconto.', + 'reports_index_inputAccountsSelect' => 'Puoi escludere o includere i conti attività come ritieni opportuno.', + 'reports_index_inputDateRange' => 'L\'intervallo di date selezionato dipende interamente da te: da un giorno a 10 anni o più.', + 'reports_index_extra-options-box' => 'A seconda del resoconto che hai selezionato, puoi selezionare filtri e opzioni aggiuntive qui. Guarda questa casella quando cambi i tipi di resoconto.', // reports (reports) - 'reports_report_default_intro' => 'Questo resoconto ti fornirà una panoramica rapida e completa delle tue finanze. Se desideri vedere qualcos\'altro, per favore non esitare a contattarmi!', - 'reports_report_audit_intro' => 'Questo resoconto ti fornirà approfondimenti dettagliati sui tuoi conti attività.', - 'reports_report_audit_optionsBox' => 'Utilizza queste caselle di controllo per mostrare o nascondere le colonne che ti interessano.', + 'reports_report_default_intro' => 'Questo resoconto ti fornirà una panoramica rapida e completa delle tue finanze. Se desideri vedere qualcos\'altro, per favore non esitare a contattarmi!', + 'reports_report_audit_intro' => 'Questo resoconto ti fornirà approfondimenti dettagliati sui tuoi conti attività.', + 'reports_report_audit_optionsBox' => 'Utilizza queste caselle di controllo per mostrare o nascondere le colonne che ti interessano.', - 'reports_report_category_intro' => 'Questo resoconto ti fornirà informazioni su una o più categorie.', - 'reports_report_category_pieCharts' => 'Questi grafici ti daranno un\'idea delle spese e delle entrate per categoria o per conto.', - 'reports_report_category_incomeAndExpensesChart' => 'Questo grafico mostra le tue spese e le tue entrate per categoria.', + 'reports_report_category_intro' => 'Questo resoconto ti fornirà informazioni su una o più categorie.', + 'reports_report_category_pieCharts' => 'Questi grafici ti daranno un\'idea delle spese e delle entrate per categoria o per conto.', + 'reports_report_category_incomeAndExpensesChart' => 'Questo grafico mostra le tue spese e le tue entrate per categoria.', - 'reports_report_tag_intro' => 'Questo resoconto ti fornirà informazioni su uno o più etichette.', - 'reports_report_tag_pieCharts' => 'Questi grafici ti daranno un\'idea delle spese e delle entrate per etichetta, conto, categoria o budget.', - 'reports_report_tag_incomeAndExpensesChart' => 'Questo grafico mostra le tue spese e entrate per etichetta.', + 'reports_report_tag_intro' => 'Questo resoconto ti fornirà informazioni su uno o più etichette.', + 'reports_report_tag_pieCharts' => 'Questi grafici ti daranno un\'idea delle spese e delle entrate per etichetta, conto, categoria o budget.', + 'reports_report_tag_incomeAndExpensesChart' => 'Questo grafico mostra le tue spese e entrate per etichetta.', 'reports_report_budget_intro' => 'Questo resoconto ti fornirà informazioni su uno o più budget.', 'reports_report_budget_pieCharts' => 'Questi grafici ti daranno un\'idea delle spese per budget o per conto.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Accanto a questa barra di avanzamento ci sono due pulsanti (+ e -) per aggiungere o rimuovere denaro da ogni salvadanaio.', 'piggy-banks_index_accountStatus' => 'Per ogni conto attività con almeno un salvadanaio lo stato è elencato in questa tabella.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Qual è il tuo obiettivo? Un nuovo divano, una macchina fotografica, soldi per le emergenze?', 'piggy-banks_create_date' => 'È possibile impostare una data come obiettivo o una scadenza per il salvadanaio.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Usa le bollette per tenere traccia della quantità di denaro che devi pagare ogni periodo. Pensa alle spese come l\'affitto, l\'assicurazione o le rate del muto.', 'bills_create_name' => 'Utilizzare un nome descrittivo come "Affitto" o "Assicurazione sanitaria".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Seleziona un importo minimo e massimo per questo conto.', 'bills_create_repeat_freq_holder' => 'La maggior parte dei pagamenti si ripetono mensilmente, ma qui puoi impostare un\'altra frequenza.', 'bills_create_skip_holder' => 'Se una bolletta si ripete ogni 2 settimane, il campo "salta" deve essere impostato a "1" per saltare una settimana.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Usa questo pulsante per vedere quali transazioni corrispondono alla tua regola.', 'rules_create_actions' => 'Imposta tutte le azioni che vuoi.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Altre opzioni sono disponibili dietro queste schede.', diff --git a/resources/lang/it_IT/list.php b/resources/lang/it_IT/list.php index 4b9f929e32..e7d2ed2baf 100644 --- a/resources/lang/it_IT/list.php +++ b/resources/lang/it_IT/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Pulsanti', - 'icon' => 'Icona', - 'id' => 'ID', - 'create_date' => 'Creato il', - 'update_date' => 'Aggiornato il', - 'updated_at' => 'Aggiornato il', - 'balance_before' => 'Saldo precedente', - 'balance_after' => 'Saldo successivo', - 'name' => 'Nome', - 'role' => 'Ruolo', - 'currentBalance' => 'Saldo corrente', - 'linked_to_rules' => 'Regole rilevanti', - 'active' => 'Attivo', - 'percentage' => 'perc.', - 'recurring_transaction' => 'Transazione ricorrente', - 'next_due' => 'Prossimo scadenza', - 'transaction_type' => 'Tipo', - 'lastActivity' => 'Ultima attività', - 'balanceDiff' => 'Differenze saldi', - 'other_meta_data' => 'Altri meta dati', - 'invited_at' => 'Invitato il', - 'expires' => 'L\'invito scade', - 'invited_by' => 'Invitato da', - 'invite_link' => 'Link invito', - 'account_type' => 'Tipo conto', - 'created_at' => 'Creato il', - 'account' => 'Conto', - 'external_url' => 'URL esterno', - 'matchingAmount' => 'Importo', - 'destination' => 'Destinazione', - 'source' => 'Origine', - 'next_expected_match' => 'Prossimo abbinamento previsto', - 'automatch' => 'Abbinamento automatico?', + 'buttons' => 'Pulsanti', + 'icon' => 'Icona', + 'id' => 'ID', + 'create_date' => 'Creato il', + 'update_date' => 'Aggiornato il', + 'updated_at' => 'Aggiornato il', + 'balance_before' => 'Saldo precedente', + 'balance_after' => 'Saldo successivo', + 'name' => 'Nome', + 'role' => 'Ruolo', + 'currentBalance' => 'Saldo corrente', + 'linked_to_rules' => 'Regole rilevanti', + 'active' => 'Attivo', + 'percentage' => 'perc.', + 'recurring_transaction' => 'Transazione ricorrente', + 'next_due' => 'Prossimo scadenza', + 'transaction_type' => 'Tipo', + 'lastActivity' => 'Ultima attività', + 'balanceDiff' => 'Differenze saldi', + 'other_meta_data' => 'Altri meta dati', + 'invited_at' => 'Invitato il', + 'expires' => 'L\'invito scade', + 'invited_by' => 'Invitato da', + 'invite_link' => 'Link invito', + 'account_type' => 'Tipo conto', + 'created_at' => 'Creato il', + 'account' => 'Conto', + 'external_url' => 'URL esterno', + 'matchingAmount' => 'Importo', + 'destination' => 'Destinazione', + 'source' => 'Origine', + 'next_expected_match' => 'Prossimo abbinamento previsto', + 'automatch' => 'Abbinamento automatico?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Si ripete', 'description' => 'Descrizione', 'amount' => 'Importo', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Conto con Bunq', 'file_name' => 'Nome del file', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Dimensione del file', - 'file_type' => 'Tipo del file', - 'attached_to' => 'Allegato a', - 'file_exists' => 'Il file esiste', - 'spectre_bank' => 'Banca', - 'spectre_last_use' => 'Ultimo accesso', - 'spectre_status' => 'Stato', - 'bunq_payment_id' => 'ID pagamento bunq', - 'repetitions' => 'Ripetizioni', - 'title' => 'Titolo', - 'transaction_s' => 'Transazioni', - 'field' => 'Campo', - 'value' => 'Valore', - 'interest' => 'Interesse', - 'interest_period' => 'Periodo interessi', - 'liability_type' => 'Tipo di passività', - 'liability_direction' => 'Passività in entrata/uscita', - 'end_date' => 'Data fine', - 'payment_info' => 'Informazioni di pagamento', - 'expected_info' => 'Prossima transazione attesa', - 'start_date' => 'Data inizio', - 'trigger' => 'Trigger', - 'response' => 'Risposta', - 'delivery' => 'Consegna', - 'url' => 'URL', - 'secret' => 'Segreto', - + 'file_size' => 'Dimensione del file', + 'file_type' => 'Tipo del file', + 'attached_to' => 'Allegato a', + 'file_exists' => 'Il file esiste', + 'spectre_bank' => 'Banca', + 'spectre_last_use' => 'Ultimo accesso', + 'spectre_status' => 'Stato', + 'bunq_payment_id' => 'ID pagamento bunq', + 'repetitions' => 'Ripetizioni', + 'title' => 'Titolo', + 'transaction_s' => 'Transazioni', + 'field' => 'Campo', + 'value' => 'Valore', + 'interest' => 'Interesse', + 'interest_period' => 'Periodo interessi', + 'liability_type' => 'Tipo di passività', + 'liability_direction' => 'Passività in entrata/uscita', + 'end_date' => 'Data fine', + 'payment_info' => 'Informazioni di pagamento', + 'expected_info' => 'Prossima transazione attesa', + 'start_date' => 'Data inizio', + 'trigger' => 'Trigger', + 'response' => 'Risposta', + 'delivery' => 'Consegna', + 'url' => 'URL', + 'secret' => 'Segreto', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/it_IT/pagination.php b/resources/lang/it_IT/pagination.php index aed3c3d767..ec867114b0 100644 --- a/resources/lang/it_IT/pagination.php +++ b/resources/lang/it_IT/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/it_IT/passwords.php b/resources/lang/it_IT/passwords.php index 5eb40e6e04..ec8ec6cdbd 100644 --- a/resources/lang/it_IT/passwords.php +++ b/resources/lang/it_IT/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/it_IT/rules.php b/resources/lang/it_IT/rules.php index df35f4458d..ce31dea2c3 100644 --- a/resources/lang/it_IT/rules.php +++ b/resources/lang/it_IT/rules.php @@ -1,6 +1,5 @@ 'L\'azione ":action", presente nella regola ":rule", non può essere applicata alla transazione #:group: :error', 'find_or_create_tag_failed' => 'Impossibile trovare o creare il tag ":tag"', - 'tag_already_added' => 'Tag ":tag" è già collegato a questa transazione', + 'tag_already_added' => 'L\'etichetta ":tag" è già collegata a questa transazione', 'inspect_transaction' => 'Ispeziona la transazione ":title" @ Firefly III', - 'inspect_rule' => 'Inspect rule ":title" @ Firefly III', - 'journal_other_user' => 'This transaction doesn\'t belong to the user', - 'no_such_journal' => 'This transaction doesn\'t exist', - 'journal_already_no_budget' => 'This transaction has no budget, so it cannot be removed', - 'journal_already_no_category' => 'This transaction had no category, so it cannot be removed', - 'journal_already_no_notes' => 'This transaction had no notes, so they cannot be removed', - 'journal_not_found' => 'Firefly III can\'t find the requested transaction', - 'split_group' => 'Firefly III cannot execute this action on a transaction with multiple splits', - 'is_already_withdrawal' => 'This transaction is already a withdrawal', - 'is_already_deposit' => 'This transaction is already a deposit', - 'is_already_transfer' => 'This transaction is already a transfer', - 'is_not_transfer' => 'This transaction is not a transfer', - 'complex_error' => 'Something complicated went wrong. Sorry about that. Please inspect the logs of Firefly III', - 'no_valid_opposing' => 'Conversion failed because there is no valid account named ":account"', - 'new_notes_empty' => 'The notes to be set are empty', - 'unsupported_transaction_type_withdrawal' => 'Firefly III cannot convert a ":type" to a withdrawal', - 'unsupported_transaction_type_deposit' => 'Firefly III cannot convert a ":type" to a deposit', - 'unsupported_transaction_type_transfer' => 'Firefly III cannot convert a ":type" to a transfer', - 'already_has_source_asset' => 'This transaction already has ":name" as the source asset account', - 'already_has_destination_asset' => 'This transaction already has ":name" as the destination asset account', - 'already_has_destination' => 'This transaction already has ":name" as the destination account', - 'already_has_source' => 'This transaction already has ":name" as the source account', - 'already_linked_to_subscription' => 'The transaction is already linked to subscription ":name"', - 'already_linked_to_category' => 'The transaction is already linked to category ":name"', - 'already_linked_to_budget' => 'The transaction is already linked to budget ":name"', - 'cannot_find_subscription' => 'Firefly III can\'t find subscription ":name"', - 'no_notes_to_move' => 'The transaction has no notes to move to the description field', - 'no_tags_to_remove' => 'The transaction has no tags to remove', - 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', - 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', - 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', - 'cannot_find_source_transaction' => 'Firefly III can\'t find the source transaction', - 'cannot_find_destination_transaction' => 'Firefly III can\'t find the destination transaction', - 'cannot_find_source_transaction_account' => 'Firefly III can\'t find the source transaction account', - 'cannot_find_destination_transaction_account' => 'Firefly III can\'t find the destination transaction account', - 'cannot_find_piggy' => 'Firefly III can\'t find a piggy bank named ":name"', - 'no_link_piggy' => 'This transaction\'s accounts are not linked to the piggy bank, so no action will be taken', - 'cannot_unlink_tag' => 'Tag ":tag" isn\'t linked to this transaction', - 'cannot_find_budget' => 'Firefly III can\'t find budget ":name"', - 'cannot_find_category' => 'Firefly III can\'t find category ":name"', - 'cannot_set_budget' => 'Firefly III can\'t set budget ":name" to a transaction of type ":type"', + 'inspect_rule' => 'Ispeziona la regola ":title" @ Firefly III', + 'journal_other_user' => 'Questa transazione non appartiene all\'utente', + 'no_such_journal' => 'Questa transazione non esiste', + 'journal_already_no_budget' => 'Questa transazione non ha un budget, quindi non può essere rimossa', + 'journal_already_no_category' => 'Questa transazione non ha una categoria, quindi non può essere rimossa', + 'journal_already_no_notes' => 'Questa transazione non ha note, quindi non può essere rimossa', + 'journal_not_found' => 'Firefly III non riesce a trovare la transazione richiesta', + 'split_group' => 'Firefly III non può eseguire questa azione su una transazione con più divisioni', + 'is_already_withdrawal' => 'Questa transazione è già un prelievo', + 'is_already_deposit' => 'Questa transazione è già un deposito', + 'is_already_transfer' => 'Questa transazione è già un trasferimento', + 'is_not_transfer' => 'Questa transazione non è un trasferimento', + 'complex_error' => 'Qualcosa di complicato è andato storto. Scusateci. Controlla i log di Firefly III', + 'no_valid_opposing' => 'Conversione non riuscita perché non c\'è un conto valido denominato ":account"', + 'new_notes_empty' => 'Le note da impostare sono vuote', + 'unsupported_transaction_type_withdrawal' => 'Firefly III non può convertire un ":type" in un prelievo', + 'unsupported_transaction_type_deposit' => 'Firefly III non può convertire un ":type" in un deposito', + 'unsupported_transaction_type_transfer' => 'Firefly III non può convertire un ":type" in un trasferimento', + 'already_has_source_asset' => 'Questa transazione ha già ":name" come conto di origine', + 'already_has_destination_asset' => 'Questa transazione ha già ":name" come conto di destinazione', + 'already_has_destination' => 'Questa transazione ha già ":name" come conto di destinazione', + 'already_has_source' => 'Questa transazione ha già ":name" come conto di origine', + 'already_linked_to_subscription' => 'La transazione è già collegata all\'abbonamento ":name"', + 'already_linked_to_category' => 'La transazione è già collegata alla categoria ":name"', + 'already_linked_to_budget' => 'La transazione è già collegata al budget ":name"', + 'cannot_find_subscription' => 'Firefly III non riesce a trovare l\'abbonamento ":name"', + 'no_notes_to_move' => 'La transazione non ha note da spostare nel campo descrizione', + 'no_tags_to_remove' => 'La transazione non ha etichette da rimuovere', + 'not_withdrawal' => 'La transazione non è un prelievo', + 'not_deposit' => 'La transazione non è un deposito', + 'cannot_find_tag' => 'Firefly III non riesce a trovare l\'etichetta ":tag"', + 'cannot_find_asset' => 'Firefly III non riesce a trovare il conto attività ":name"', + 'cannot_find_accounts' => 'Firefly III non riesce a trovare il conto di origine o destinazione', + 'cannot_find_source_transaction' => 'Firefly III non riesce a trovare la transazione di origine', + 'cannot_find_destination_transaction' => 'Firefly III non riesce a trovare la transazione di destinazione', + 'cannot_find_source_transaction_account' => 'Firefly III non riesce a trovare il conto di origine della transazione', + 'cannot_find_destination_transaction_account' => 'Firefly III non riesce a trovare il conto di destinazione della transazione', + 'cannot_find_piggy' => 'Firefly III non riesce a trovare un salvadanaio ":name"', + 'no_link_piggy' => 'I conti di questa transazione non sono collegati alla salvadanaio, quindi non verrà intrapresa alcuna azione', + 'cannot_unlink_tag' => 'L\'etichetta ":tag" non è collegata a questa transazione', + 'cannot_find_budget' => 'Firefly III non riesce a trovare il budget ":name"', + 'cannot_find_category' => 'Firefly III non riesce a trovare la categoria ":name"', + 'cannot_set_budget' => 'Firefly III non può impostare il budget ":name" a una transazione di tipo ":type"', ]; diff --git a/resources/lang/it_IT/validation.php b/resources/lang/it_IT/validation.php index 7108bf58c5..c58d9322bd 100644 --- a/resources/lang/it_IT/validation.php +++ b/resources/lang/it_IT/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Clausola "where" assente nell\'array', - 'missing_update' => 'Clausola "update" assente nell\'array', - 'invalid_where_key' => 'Il JSON contiene una chiave non valida per la clausola "where"', - 'invalid_update_key' => 'Il JSON contiene una chiave non valida per la clausola "update"', - 'invalid_query_data' => 'Data non valida nel campo %s:%s della query.', - 'invalid_query_account_type' => 'La tua interrogazione contiene account di diversi tipi, cosa che non è consentita.', - 'invalid_query_currency' => 'La tua interrogazione contiene conti con valute diverse, che non è consentito.', - 'iban' => 'Questo non è un IBAN valido.', - 'zero_or_more' => 'Il valore non può essere negativo.', - 'date_or_time' => 'Il valore deve essere un valore valido per una data o per un orario (ISO 8601).', - 'source_equals_destination' => 'Il conto di origine è uguale al conto di destinazione.', - 'unique_account_number_for_user' => 'Sembra che questo numero di conto sia già in uso.', - 'unique_iban_for_user' => 'Sembra che questo IBAN sia già in uso.', - 'deleted_user' => 'A causa dei vincoli di sicurezza, non è possibile registrarsi utilizzando questo indirizzo email.', - 'rule_trigger_value' => 'Questo valore non è valido per il trigger selezionato.', - 'rule_action_value' => 'Questo valore non è valido per l\'azione selezionata.', - 'file_already_attached' => 'Il file caricato ":name" è già associato a questo oggetto.', - 'file_attached' => 'File caricato con successo ":name".', - 'must_exist' => 'L\'ID nel campo :attribute non esiste nel database.', - 'all_accounts_equal' => 'Tutti i conti in questo campo devono essere uguali.', - 'group_title_mandatory' => 'Il titolo del gruppo è obbligatorio quando ci sono più di una transazione.', - 'transaction_types_equal' => 'Tutte le suddivisioni devono essere dello stesso tipo.', - 'invalid_transaction_type' => 'Tipo della transazione non valido.', - 'invalid_selection' => 'La tua selezione non è valida.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Hai bisogno di almeno una transazione.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'È necessaria almeno una ripetizione.', - 'require_repeat_until' => 'Richiede un numero di ripetizioni o una data di fine (ripeti fino al), non entrambi.', - 'require_currency_info' => 'Il contenuto di questo campo non è valido senza informazioni sulla valuta.', - 'not_transfer_account' => 'Questo conto non è un conto che può essere usato per i trasferimenti.', - 'require_currency_amount' => 'Il contenuto di questo campo non è valido senza le informazioni sull\'importo estero.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'La descrizione della transazione non deve essere uguale alla descrizione globale.', - 'file_invalid_mime' => 'Il file ":name" è di tipo ":mime" che non è accettato come nuovo caricamento.', - 'file_too_large' => 'Il file ":name" è troppo grande.', - 'belongs_to_user' => 'Il valore di :attribute è sconosciuto.', - 'accepted' => 'L\' :attribute deve essere accettato.', - 'bic' => 'Questo non è un BIC valido.', - 'at_least_one_trigger' => 'Una regola deve avere almeno un trigger.', - 'at_least_one_active_trigger' => 'La regola deve avere almeno un trigger attivo.', - 'at_least_one_action' => 'Una regola deve avere almeno una azione.', - 'at_least_one_active_action' => 'La regola deve avere almeno un\'azione attiva.', - 'base64' => 'Questi non sono dati codificati in base64 validi.', - 'model_id_invalid' => 'L\'ID fornito sembra non essere valido per questo modello.', - 'less' => ':attribute deve essere minore di 10.000.000', - 'active_url' => ':attribute non è un URL valido.', - 'after' => ':attribute deve essere una data dopo :date.', - 'date_after' => 'La data iniziale deve essere precedente a quella finale.', - 'alpha' => ':attribute può contenere solo lettere.', - 'alpha_dash' => ':attribute può contenere solo lettere, numeri e trattini.', - 'alpha_num' => ':attribute può contenere solo lettere e numeri.', - 'array' => ':attribute deve essere una matrice.', - 'unique_for_user' => 'C\'è già una voce con questo :attribute.', - 'before' => ':attribute deve essere una data prima :date.', - 'unique_object_for_user' => 'Questo nome è già in uso.', - 'unique_account_for_user' => 'Il nome del conto è già in uso.', + 'bad_type_source' => 'Firefly III non può determinare il tipo di transazione in base a questo account sorgente.', + 'bad_type_destination' => 'Firefly III non può determinare il tipo di transazione in base a questo account di destinazione.', + 'missing_where' => 'Clausola "where" assente nell\'array', + 'missing_update' => 'Clausola "update" assente nell\'array', + 'invalid_where_key' => 'Il JSON contiene una chiave non valida per la clausola "where"', + 'invalid_update_key' => 'Il JSON contiene una chiave non valida per la clausola "update"', + 'invalid_query_data' => 'Data non valida nel campo %s:%s della query.', + 'invalid_query_account_type' => 'La tua interrogazione contiene account di diversi tipi, cosa che non è consentita.', + 'invalid_query_currency' => 'La tua interrogazione contiene conti con valute diverse, che non è consentito.', + 'iban' => 'Questo non è un IBAN valido.', + 'zero_or_more' => 'Il valore non può essere negativo.', + 'more_than_zero' => 'Il valore deve essere superiore a zero.', + 'more_than_zero_correct' => 'Il valore deve essere zero o superiore.', + 'no_asset_account' => 'Questo non è un conto di risorse.', + 'date_or_time' => 'Il valore deve essere un valore valido per una data o per un orario (ISO 8601).', + 'source_equals_destination' => 'Il conto di origine è uguale al conto di destinazione.', + 'unique_account_number_for_user' => 'Sembra che questo numero di conto sia già in uso.', + 'unique_iban_for_user' => 'Sembra che questo IBAN sia già in uso.', + 'reconciled_forbidden_field' => 'Questa transazione è già riconciliata, non è possibile modificare il campo ":field"', + 'deleted_user' => 'A causa dei vincoli di sicurezza, non è possibile registrarsi utilizzando questo indirizzo email.', + 'rule_trigger_value' => 'Questo valore non è valido per il trigger selezionato.', + 'rule_action_value' => 'Questo valore non è valido per l\'azione selezionata.', + 'file_already_attached' => 'Il file caricato ":name" è già associato a questo oggetto.', + 'file_attached' => 'File caricato con successo ":name".', + 'must_exist' => 'L\'ID nel campo :attribute non esiste nel database.', + 'all_accounts_equal' => 'Tutti i conti in questo campo devono essere uguali.', + 'group_title_mandatory' => 'Il titolo del gruppo è obbligatorio quando ci sono più di una transazione.', + 'transaction_types_equal' => 'Tutte le suddivisioni devono essere dello stesso tipo.', + 'invalid_transaction_type' => 'Tipo della transazione non valido.', + 'invalid_selection' => 'La tua selezione non è valida.', + 'belongs_user' => 'Questo valore è collegato a un oggetto che non sembra esistere.', + 'belongs_user_or_user_group' => 'Questo valore è collegato a un oggetto che non sembra esistere nella tua attuale amministrazione finanziaria.', + 'at_least_one_transaction' => 'Hai bisogno di almeno una transazione.', + 'recurring_transaction_id' => 'Hai bisogno di almeno una transazione.', + 'need_id_to_match' => 'È necessario inviare questa voce con un ID affinché l\'API sia in grado di abbinarla.', + 'too_many_unmatched' => 'Troppe transazioni inviate non possono essere abbinate alle rispettive voci del database. Assicurarsi che le voci esistenti abbiano un ID valido.', + 'id_does_not_match' => 'L\'ID inviato #:id non corrisponde all\'ID previsto. Assicurati che corrisponda non inviare il campo.', + 'at_least_one_repetition' => 'È necessaria almeno una ripetizione.', + 'require_repeat_until' => 'Richiede un numero di ripetizioni o una data di fine (ripeti fino al), non entrambi.', + 'require_currency_info' => 'Il contenuto di questo campo non è valido senza informazioni sulla valuta.', + 'not_transfer_account' => 'Questo conto non è un conto che può essere usato per i trasferimenti.', + 'require_currency_amount' => 'Il contenuto di questo campo non è valido senza le informazioni sull\'importo estero.', + 'require_foreign_currency' => 'Questo campo deve essere un numero', + 'require_foreign_dest' => 'Il valore di questo campo deve corrispondere alla valuta del conto di destinazione.', + 'require_foreign_src' => 'Il valore di questo campo deve corrispondere alla valuta del conto origine.', + 'equal_description' => 'La descrizione della transazione non deve essere uguale alla descrizione globale.', + 'file_invalid_mime' => 'Il file ":name" è di tipo ":mime" che non è accettato come nuovo caricamento.', + 'file_too_large' => 'Il file ":name" è troppo grande.', + 'belongs_to_user' => 'Il valore di :attribute è sconosciuto.', + 'accepted' => 'L\' :attribute deve essere accettato.', + 'bic' => 'Questo non è un BIC valido.', + 'at_least_one_trigger' => 'Una regola deve avere almeno un trigger.', + 'at_least_one_active_trigger' => 'La regola deve avere almeno un trigger attivo.', + 'at_least_one_action' => 'Una regola deve avere almeno una azione.', + 'at_least_one_active_action' => 'La regola deve avere almeno un\'azione attiva.', + 'base64' => 'Questi non sono dati codificati in base64 validi.', + 'model_id_invalid' => 'L\'ID fornito sembra non essere valido per questo modello.', + 'less' => ':attribute deve essere minore di 10.000.000', + 'active_url' => ':attribute non è un URL valido.', + 'after' => ':attribute deve essere una data dopo :date.', + 'date_after' => 'La data iniziale deve essere precedente a quella finale.', + 'alpha' => ':attribute può contenere solo lettere.', + 'alpha_dash' => ':attribute può contenere solo lettere, numeri e trattini.', + 'alpha_num' => ':attribute può contenere solo lettere e numeri.', + 'array' => ':attribute deve essere una matrice.', + 'unique_for_user' => 'C\'è già una voce con questo :attribute.', + 'before' => ':attribute deve essere una data prima :date.', + 'unique_object_for_user' => 'Questo nome è già in uso.', + 'unique_account_for_user' => 'Il nome del conto è già in uso.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute con questo nome conto è già in uso :min e :max.', + 'between.file' => ':attribute deve essere :min e :max kilobyte.', + 'between.string' => ':attribute deve essere tra :min e :max caratteri.', + 'between.array' => ':attribute deve essere tra :min e :max voci.', + 'boolean' => ':attribute deve essere vero o falso.', + 'confirmed' => ':attribute la conferma non corrisponde.', + 'date' => ':attribute non è una data valida', + 'date_format' => ':attribute non corrisponde al formato :format.', + 'different' => 'I campi :attribute e :other devono essere diversi.', + 'digits' => ':attribute deve essere :digits cifre.', + 'digits_between' => ':attribute deve essere :min e :max cifre.', + 'email' => ':attribute deve essere un indirizzo email valido.', + 'filled' => 'Il campo :attribute è obbligatorio.', + 'exists' => ':attribute selezionato non è valido.', + 'image' => ':attribute deve essere un\'immagine.', + 'in' => ':attribute selezionato non è valido.', + 'integer' => ':attribute deve essere un numero intero.', + 'ip' => ':attribute deve essere un indirizzo IP valido.', + 'json' => ':attribute deve essere una stringa JSON.', + 'max.numeric' => ':attribute non può essere maggiore di :max.', + 'max.file' => ':attribute non può essere maggiore di :max kilobytes.', + 'max.string' => ':attribute non può essere maggiore di :max caratteri.', + 'max.array' => ':attribute potrebbe non avere più di :max voce.', + 'mimes' => ':attribute deve essere un file di tipo: :values.', + 'min.numeric' => ':attribute deve essere almeno :min.', + 'lte.numeric' => 'Il campo :attribute deve essere minore o uguale a :value.', + 'min.file' => ':attribute deve essere almeno :min kilobytes.', + 'min.string' => ':attribute deve essere almeno :min caratteri.', + 'min.array' => ':attribute deve avere almeno :min voci.', + 'not_in' => ':attribute selezionato è invalido.', + 'numeric' => ':attribute deve essere un numero.', + 'scientific_notation' => 'L\' :attribute non può utilizzare la notazione scientifica.', + 'numeric_native' => 'L\'importo nativo deve essere un numero.', + 'numeric_destination' => 'L\'importo di destinazione deve essere un numero.', + 'numeric_source' => 'L\'importo di origine deve essere un numero.', + 'regex' => ':attribute formato non valido', + 'required' => 'Il campo :attribute è obbligatorio.', + 'required_if' => 'Il campo :attribute è obbligatorio quando :other è :value.', + 'required_unless' => 'Il campo :attribute è obbligatorio a meno che :other è in :values.', + 'required_with' => 'Il campo :attribute è obbligatorio quando :values è presente.', + 'required_with_all' => 'Il campo :attribute è obbligatorio quando :values è presente.', + 'required_without' => 'Il campo :attribute è obbligatorio quando :values non è presente.', + 'required_without_all' => 'Il campo :attribute è obbligatorio quando nessuno di :values è presente.', + 'same' => ':attribute e :other deve combaciare.', + 'size.numeric' => ':attribute deve essere :size.', + 'amount_min_over_max' => 'L\'importo minimo non può essere maggiore dell\'importo massimo.', + 'size.file' => ':attribute deve essere :size kilobytes.', + 'size.string' => ':attribute deve essere :size caratteri.', + 'size.array' => ':attribute deve contenere :size voci.', + 'unique' => ':attribute è già stato preso.', + 'string' => ':attribute deve essere una stringa.', + 'url' => ':attribute il formato non è valido.', + 'timezone' => ':attribute deve essere una zona valida.', + '2fa_code' => 'Il campo :attribute non è valido.', + 'dimensions' => ':attribute ha dimensioni di immagine non valide.', + 'distinct' => ':attribute il campo ha un valore doppio.', + 'file' => ':attribute deve essere un file.', + 'in_array' => ':attribute il campo non esiste in :other.', + 'present' => ':attribute il campo deve essere presente.', + 'amount_zero' => 'L\'importo totale non può essere zero.', + 'current_target_amount' => 'L\'importo corrente deve essere minore dell\'importo obiettivo.', + 'unique_piggy_bank_for_user' => 'Il nome del salvadanaio deve essere unico.', + 'unique_object_group' => 'Il nome del gruppo deve essere unico', + 'starts_with' => 'Il valore deve iniziare con :values.', + 'unique_webhook' => 'Hai già un altro webhook con questa combinazione di URL, trigger, risposta e consegna.', + 'unique_existing_webhook' => 'Hai già un altro webhook con questa combinazione di URL, trigger, risposta e consegna.', + 'same_account_type' => 'Entrambi i conti devono essere dello stesso tipo', + 'same_account_currency' => 'Entrambi i conti devono essere impostati sulla stessa valuta', - 'between.numeric' => ':attribute con questo nome conto è già in uso :min e :max.', - 'between.file' => ':attribute deve essere :min e :max kilobyte.', - 'between.string' => ':attribute deve essere tra :min e :max caratteri.', - 'between.array' => ':attribute deve essere tra :min e :max voci.', - 'boolean' => ':attribute deve essere vero o falso.', - 'confirmed' => ':attribute la conferma non corrisponde.', - 'date' => ':attribute non è una data valida', - 'date_format' => ':attribute non corrisponde al formato :format.', - 'different' => 'I campi :attribute e :other devono essere diversi.', - 'digits' => ':attribute deve essere :digits cifre.', - 'digits_between' => ':attribute deve essere :min e :max cifre.', - 'email' => ':attribute deve essere un indirizzo email valido.', - 'filled' => 'Il campo :attribute è obbligatorio.', - 'exists' => ':attribute selezionato non è valido.', - 'image' => ':attribute deve essere un\'immagine.', - 'in' => ':attribute selezionato non è valido.', - 'integer' => ':attribute deve essere un numero intero.', - 'ip' => ':attribute deve essere un indirizzo IP valido.', - 'json' => ':attribute deve essere una stringa JSON.', - 'max.numeric' => ':attribute non può essere maggiore di :max.', - 'max.file' => ':attribute non può essere maggiore di :max kilobytes.', - 'max.string' => ':attribute non può essere maggiore di :max caratteri.', - 'max.array' => ':attribute potrebbe non avere più di :max voce.', - 'mimes' => ':attribute deve essere un file di tipo: :values.', - 'min.numeric' => ':attribute deve essere almeno :min.', - 'lte.numeric' => 'Il campo :attribute deve essere minore o uguale a :value.', - 'min.file' => ':attribute deve essere almeno :min kilobytes.', - 'min.string' => ':attribute deve essere almeno :min caratteri.', - 'min.array' => ':attribute deve avere almeno :min voci.', - 'not_in' => ':attribute selezionato è invalido.', - 'numeric' => ':attribute deve essere un numero.', - 'numeric_native' => 'L\'importo nativo deve essere un numero.', - 'numeric_destination' => 'L\'importo di destinazione deve essere un numero.', - 'numeric_source' => 'L\'importo di origine deve essere un numero.', - 'regex' => ':attribute formato non valido', - 'required' => 'Il campo :attribute è obbligatorio.', - 'required_if' => 'Il campo :attribute è obbligatorio quando :other è :value.', - 'required_unless' => 'Il campo :attribute è obbligatorio a meno che :other è in :values.', - 'required_with' => 'Il campo :attribute è obbligatorio quando :values è presente.', - 'required_with_all' => 'Il campo :attribute è obbligatorio quando :values è presente.', - 'required_without' => 'Il campo :attribute è obbligatorio quando :values non è presente.', - 'required_without_all' => 'Il campo :attribute è obbligatorio quando nessuno di :values è presente.', - 'same' => ':attribute e :other deve combaciare.', - 'size.numeric' => ':attribute deve essere :size.', - 'amount_min_over_max' => 'L\'importo minimo non può essere maggiore dell\'importo massimo.', - 'size.file' => ':attribute deve essere :size kilobytes.', - 'size.string' => ':attribute deve essere :size caratteri.', - 'size.array' => ':attribute deve contenere :size voci.', - 'unique' => ':attribute è già stato preso.', - 'string' => ':attribute deve essere una stringa.', - 'url' => ':attribute il formato non è valido.', - 'timezone' => ':attribute deve essere una zona valida.', - '2fa_code' => 'Il campo :attribute non è valido.', - 'dimensions' => ':attribute ha dimensioni di immagine non valide.', - 'distinct' => ':attribute il campo ha un valore doppio.', - 'file' => ':attribute deve essere un file.', - 'in_array' => ':attribute il campo non esiste in :other.', - 'present' => ':attribute il campo deve essere presente.', - 'amount_zero' => 'L\'importo totale non può essere zero.', - 'current_target_amount' => 'L\'importo corrente deve essere minore dell\'importo obiettivo.', - 'unique_piggy_bank_for_user' => 'Il nome del salvadanaio deve essere unico.', - 'unique_object_group' => 'Il nome del gruppo deve essere unico', - 'starts_with' => 'Il valore deve iniziare con :values.', - 'unique_webhook' => 'Hai già un altro webhook con questa combinazione di URL, trigger, risposta e consegna.', - 'unique_existing_webhook' => 'Hai già un altro webhook con questa combinazione di URL, trigger, risposta e consegna.', - 'same_account_type' => 'Entrambi i conti devono essere dello stesso tipo', - 'same_account_currency' => 'Entrambi i conti devono essere impostati sulla stessa valuta', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Questa non è una password sicura. Riprova. Per maggiori informazioni visita https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Il tipo di ripetizione della transazione ricorrente non è valido.', - 'valid_recurrence_rep_moment' => 'Il momento di ripetizione per questo tipo di ripetizione non è valido.', - 'invalid_account_info' => 'Informazione sul conto non valida.', - 'attributes' => [ + 'secure_password' => 'Questa non è una password sicura. Riprova. Per maggiori informazioni visita https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Il tipo di ripetizione della transazione ricorrente non è valido.', + 'valid_recurrence_rep_moment' => 'Il momento di ripetizione per questo tipo di ripetizione non è valido.', + 'invalid_account_info' => 'Informazione sul conto non valida.', + 'attributes' => [ 'email' => 'indirizzo email', 'description' => 'descrizione', 'amount' => 'importo', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'È necessario ottenere un ID e/o un nome del conto di origine validi per continuare.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Non è stato possibile trovare un conto di destinazione valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', + 'withdrawal_source_need_data' => 'È necessario ottenere un ID e/o un nome del conto di origine validi per continuare.', + 'withdrawal_source_bad_data' => '[a] Non è stato possibile trovare un conto d\'origine valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', + 'withdrawal_dest_need_data' => '[a] È necessario ottenere un ID e/o un nome del conto di destinazione validi per continuare.', + 'withdrawal_dest_bad_data' => 'Non è stato possibile trovare un conto di destinazione valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'Questo IBAN del conto di destinazione è già in uso da un conto di attività o passività e non può essere utilizzato come destinazione di un prelievo.', + 'deposit_src_iban_exists' => 'Questo IBAN del conto di origine è già in uso da un conto di attività o passività e non può essere utilizzato come origine di un deposito.', - 'reconciliation_source_bad_data' => 'Non è stato possibile trovare un conto valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', + 'reconciliation_source_bad_data' => 'Non è stato possibile trovare un conto valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Non è stato possibile trovare un conto d\'origine valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', - 'deposit_source_need_data' => 'È necessario ottenere un ID e/o un nome del conto di origine validi per continuare.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Non è stato possibile trovare un conto di destinazione valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', - 'deposit_dest_wrong_type' => 'Il conto di destinazione inviato non è di tipo corretto.', + 'deposit_source_need_data' => 'È necessario ottenere un ID e/o un nome del conto di origine validi per continuare.', + 'deposit_source_bad_data' => '[b] Non è stato possibile trovare un conto d\'origine valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', + 'deposit_dest_need_data' => '[b] È necessario ottenere un ID e/o un nome del conto di destinazione validi per continuare.', + 'deposit_dest_bad_data' => 'Non è stato possibile trovare un conto di destinazione valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', + 'deposit_dest_wrong_type' => 'Il conto di destinazione inviato non è di tipo corretto.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'È necessario ottenere un ID e/o un nome del conto di origine validi per continuare.', + 'transfer_source_bad_data' => '[c] Non è stato possibile trovare un conto d\'origine valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', + 'transfer_dest_need_data' => '[c] È necessario ottenere un ID e/o un nome del conto di destinazione validi per continuare.', + 'transfer_dest_bad_data' => 'Non è stato possibile trovare un conto di destinazione valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', + 'need_id_in_edit' => 'Ogni suddivisione deve avere un "transaction_journal_id" (un ID valido oppure 0).', - 'transfer_source_need_data' => 'È necessario ottenere un ID e/o un nome del conto di origine validi per continuare.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Non è stato possibile trovare un conto di destinazione valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', - 'need_id_in_edit' => 'Ogni suddivisione deve avere un "transaction_journal_id" (un ID valido oppure 0).', + 'ob_source_need_data' => 'È necessario ottenere un ID e/o un nome del conto di origine validi per continuare.', + 'lc_source_need_data' => 'È necessario ottenere un ID del conto sorgente valido per continuare.', + 'ob_dest_need_data' => '[d] È necessario ottenere un ID e/o un nome del conto di destinazione validi per continuare.', + 'ob_dest_bad_data' => 'Non è stato possibile trovare un conto di destinazione valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', + 'reconciliation_either_account' => 'Per inviare una riconciliazione devi inserire un conto sorgente o di destinazione, non entrambi o nessuno dei due.', - 'ob_source_need_data' => 'È necessario ottenere un ID e/o un nome del conto di origine validi per continuare.', - 'lc_source_need_data' => 'È necessario ottenere un ID del conto sorgente valido per continuare.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Non è stato possibile trovare un conto di destinazione valido effettuando la ricerca con l\'ID ":id" o il nome ":name".', - 'reconciliation_either_account' => 'Per inviare una riconciliazione devi inserire un conto sorgente o di destinazione, non entrambi o nessuno dei due.', + 'generic_invalid_source' => 'Non puoi utilizzare questo conto come conto di origine.', + 'generic_invalid_destination' => 'Non puoi utilizzare questo conto come conto di destinazione.', - 'generic_invalid_source' => 'Non puoi utilizzare questo conto come conto di origine.', - 'generic_invalid_destination' => 'Non puoi utilizzare questo conto come conto di destinazione.', + 'generic_no_source' => 'Devi inviare informazioni sul conto di origine o inviare un ID diario transazioni.', + 'generic_no_destination' => 'Devi inviare informazioni sul conto di destinazione o inviare un ID diario transazioni.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'Il campo :attribute deve essere maggiore o uguale a :value.', - 'gt.numeric' => 'Il campo :attribute deve essere maggiore di :value.', - 'gte.file' => 'Il campo :attribute deve essere maggiore o uguale a :value kilobyte.', - 'gte.string' => 'Il campo :attribute deve essere maggiore o uguale a :value caratteri.', - 'gte.array' => 'Il campo :attribute deve avere :value o più elementi.', + 'gte.numeric' => 'Il campo :attribute deve essere maggiore o uguale a :value.', + 'gt.numeric' => 'Il campo :attribute deve essere maggiore di :value.', + 'gte.file' => 'Il campo :attribute deve essere maggiore o uguale a :value kilobyte.', + 'gte.string' => 'Il campo :attribute deve essere maggiore o uguale a :value caratteri.', + 'gte.array' => 'Il campo :attribute deve avere :value o più elementi.', 'amount_required_for_auto_budget' => 'L\'importo è obbligatorio.', 'auto_budget_amount_positive' => 'L\'importo deve essere maggiore di zero.', + 'auto_budget_period_mandatory' => 'Il periodo per il budget automatico è un campo obbligatorio.', // no access to administration: diff --git a/resources/lang/ja_JP/api.php b/resources/lang/ja_JP/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/ja_JP/api.php +++ b/resources/lang/ja_JP/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/ja_JP/auth.php b/resources/lang/ja_JP/auth.php index 830fc8f578..9446b4952c 100644 --- a/resources/lang/ja_JP/auth.php +++ b/resources/lang/ja_JP/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => '資格情報が一致しません。', 'throttle' => 'ログインの試行回数が多すぎます。:seconds 秒後にお試しください。', diff --git a/resources/lang/ja_JP/breadcrumbs.php b/resources/lang/ja_JP/breadcrumbs.php index 012e4883b7..70538cd098 100644 --- a/resources/lang/ja_JP/breadcrumbs.php +++ b/resources/lang/ja_JP/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'ホーム', - 'budgets' => '予算', - 'subscriptions' => '講読', - 'transactions' => '取引', - 'title_expenses' => '支出', - 'title_withdrawal' => '支出', - 'title_revenue' => '収益 / 収入', - 'title_deposit' => '収益 / 収入', - 'title_transfer' => '送金', - 'title_transfers' => '送金', - 'edit_currency' => '通貨「:name」を編集する', - 'delete_currency' => '通貨「:name」を削除する', - 'newPiggyBank' => '新しい貯金箱を作成', - 'edit_piggyBank' => '貯金箱 ":name" を編集する', - 'preferences' => '設定', - 'profile' => 'プロフィール', - 'accounts' => '口座', - 'changePassword' => 'パスワードを変更する', - 'change_email' => 'メールアドレスを変更する', - 'bills' => '請求', - 'newBill' => '新しい請求', - 'edit_bill' => '請求「:name」を編集する', - 'delete_bill' => '請求「:name」を削除する', - 'reports' => 'レポート', - 'search_result' => '":query" の検索結果', - 'withdrawal_list' => '支出', - 'Withdrawal_list' => '支出', - 'deposit_list' => '収入、所得、入金', - 'transfer_list' => '送金', - 'transfers_list' => '送金', + 'home' => 'ホーム', + 'budgets' => '予算', + 'subscriptions' => '講読', + 'transactions' => '取引', + 'title_expenses' => '支出', + 'title_withdrawal' => '支出', + 'title_revenue' => '収益 / 収入', + 'title_deposit' => '収益 / 収入', + 'title_transfer' => '送金', + 'title_transfers' => '送金', + 'edit_currency' => '通貨「:name」を編集する', + 'delete_currency' => '通貨「:name」を削除する', + 'newPiggyBank' => '新しい貯金箱を作成', + 'edit_piggyBank' => '貯金箱 ":name" を編集する', + 'preferences' => '設定', + 'profile' => 'プロフィール', + 'accounts' => '口座', + 'changePassword' => 'パスワードを変更する', + 'change_email' => 'メールアドレスを変更する', + 'bills' => '請求', + 'newBill' => '新しい請求', + 'edit_bill' => '請求「:name」を編集する', + 'delete_bill' => '請求「:name」を削除する', + 'reports' => 'レポート', + 'search_result' => '":query" の検索結果', + 'withdrawal_list' => '支出', + 'Withdrawal_list' => '支出', + 'deposit_list' => '収入、所得、入金', + 'transfer_list' => '送金', + 'transfers_list' => '送金', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => '調整', 'create_withdrawal' => '新規出金を作成', 'create_deposit' => '新しい入金を作成する', diff --git a/resources/lang/ja_JP/components.php b/resources/lang/ja_JP/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/ja_JP/components.php +++ b/resources/lang/ja_JP/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ja_JP/config.php b/resources/lang/ja_JP/config.php index 083c627d4e..1801ba36c3 100644 --- a/resources/lang/ja_JP/config.php +++ b/resources/lang/ja_JP/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'ja', - 'locale' => 'ja, Japanese, ja_JP.utf8, ja_JP.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'YYYY年MM月', + 'html_language' => 'ja', + 'locale' => 'ja, Japanese, ja_JP.utf8, ja_JP.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'YYYY年MM月', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'YYYY年MM月D日', - 'month_and_day_fns' => 'y年 MMMM d日', - 'month_and_day_js' => 'YYYY年MM月DD日', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'YYYY年MM月D日', + 'month_and_day_fns' => 'y年 MMMM d日', + 'month_and_day_js' => 'YYYY年MM月DD日', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'YYYY年M月D日 dddd', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'YYYY年M月D日 dddd', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'M月D日', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'M月D日', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'YYYY年MM月DD日 HH:mm:ss', + 'date_time_fns' => 'yyyy年MMMM月do日 HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'YYYY年MM月DD日 HH:mm:ss', - 'date_time_fns' => 'yyyy年MMMM月do日 HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'YYYY年MM月D日', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'YYYY年MM月D日', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => 'GGGG年W週', + 'week_in_year_fns' => 'yyyy年w週', - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => 'GGGG年W週', - 'week_in_year_fns' => "yyyy年w週", + // 'year' => '%Y', + 'year_js' => 'YYYY年', - //'year' => '%Y', - 'year_js' => 'YYYY年', + // 'half_year' => '%B %Y', + 'half_year_js' => 'YYYY年第Q四半期', - //'half_year' => '%B %Y', - 'half_year_js' => 'YYYY年第Q四半期', - - 'quarter_fns' => "yyyy年第Q四半期", - 'half_year_fns' => "yyyy年H半期", - 'dow_1' => '月曜日', - 'dow_2' => '火曜日', - 'dow_3' => '水曜日', - 'dow_4' => '木曜日', - 'dow_5' => '金曜日', - 'dow_6' => '土曜日', - 'dow_7' => '日曜日', + 'quarter_fns' => 'yyyy年第Q四半期', + 'half_year_fns' => 'yyyy年H半期', + 'dow_1' => '月曜日', + 'dow_2' => '火曜日', + 'dow_3' => '水曜日', + 'dow_4' => '木曜日', + 'dow_5' => '金曜日', + 'dow_6' => '土曜日', + 'dow_7' => '日曜日', ]; /* diff --git a/resources/lang/ja_JP/demo.php b/resources/lang/ja_JP/demo.php index e5b90d1071..434df4fe35 100644 --- a/resources/lang/ja_JP/demo.php +++ b/resources/lang/ja_JP/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ja_JP/email.php b/resources/lang/ja_JP/email.php index af06472e24..75d388bc31 100644 --- a/resources/lang/ja_JP/email.php +++ b/resources/lang/ja_JP/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'あなたの Firefly III からのテストメッセージ', 'admin_test_body' => 'これはあなたの Firefly III からのテストメッセージです。:email 宛に送信しました。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => '招待が作成されました', 'invitation_created_body' => '管理者ユーザー「:email」はメールアドレス「:invitee」に関連する人が使える招待を作成しました。 招待は48時間有効です。', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'パスワードのリセット:', 'registered_doc_link' => 'ドキュメント:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Firefly IIIの新しいバージョンが利用可能です', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'ご希望の場合は、https://github.com/fofoflifly-iii/firelify-ii/issuesで新しいissueを作ることもできます。', 'error_stacktrace_below' => '完全なスタックトレースは以下の通りです:', 'error_headers' => '「headers」は技術用語「HTTP headers」を参照します', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III が取引を作成しました|Firefly III が:count件の取引を作成しました', 'new_journals_header' => 'Firefly III が取引を作成しました。Firefly III で参照できます:|Firefly III が:count件の取引を作成しました。 Firefly III でそれらを参照できます。', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'あなたの請求「**":name"**」は :date に終了します。 本日がその時です。', 'bill_warning_extension_date_zero' => 'あなたの請求「**":name"**」が :date に延長またはキャンセルされます。 本日がその時です。', 'bill_warning_please_action' => '適切に対処してください。', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ja_JP/errors.php b/resources/lang/ja_JP/errors.php index 67542cb657..8816df25c5 100644 --- a/resources/lang/ja_JP/errors.php +++ b/resources/lang/ja_JP/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'スタックトレース', 'more_info' => '詳細情報', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'ログファイルがある storage/logs ディレクトリにて、より詳細な情報を集めてください。Docker を使っている場合は docker logs -f [container] を使用してください。', - 'collect_info_more' => 'エラー情報の収集については、 FAQ をご覧ください。', - 'github_help' => 'GitHubでヘルプを見る', - 'github_instructions' => 'GitHub にて新しい issue を作ることは大歓迎です。', - 'use_search' => '検索してください!', - 'include_info' => 'このデバッグページからの情報を含めます。', - 'tell_more' => '「おっと!」以上のことを教えてください。', - 'include_logs' => 'エラーログを含めます (上記参照)。', - 'what_did_you_do' => '何をしていたか教えてください。', - 'offline_header' => 'おそらくオフラインです', - 'offline_unreachable' => 'Firefly III に到達できません。現在デバイスがオフラインかサーバーが動作していません。', - 'offline_github' => 'あなたのデバイス、サーバーが共にオンラインであることを確認している場合は、 GitHub でチケットを開いてください。', - + 'collect_info' => 'ログファイルがある storage/logs ディレクトリにて、より詳細な情報を集めてください。Docker を使っている場合は docker logs -f [container] を使用してください。', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'GitHubでヘルプを見る', + 'github_instructions' => 'GitHub にて新しい issue を作ることは大歓迎です。', + 'use_search' => '検索してください!', + 'include_info' => 'このデバッグページからの情報を含めます。', + 'tell_more' => '「おっと!」以上のことを教えてください。', + 'include_logs' => 'エラーログを含めます (上記参照)。', + 'what_did_you_do' => '何をしていたか教えてください。', + 'offline_header' => 'おそらくオフラインです', + 'offline_unreachable' => 'Firefly III に到達できません。現在デバイスがオフラインかサーバーが動作していません。', + 'offline_github' => 'あなたのデバイス、サーバーが共にオンラインであることを確認している場合は、 GitHub でチケットを開いてください。', ]; diff --git a/resources/lang/ja_JP/firefly.php b/resources/lang/ja_JP/firefly.php index ed575e8428..f4c632b78b 100644 --- a/resources/lang/ja_JP/firefly.php +++ b/resources/lang/ja_JP/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => '閉じる', - 'actions' => '操作', - 'edit' => '編集', - 'delete' => '削除', - 'split' => '分割', - 'single_split' => '分割', - 'clone' => '複製', - 'confirm_action' => '操作を確認', - 'last_seven_days' => '過去7日間', - 'last_thirty_days' => '過去30日間', - 'last_180_days' => '過去180日間', - 'month_to_date' => '過去1ヶ月', - 'year_to_date' => '過去1年間', - 'YTD' => 'YTD', - 'welcome_back' => '概要', - 'everything' => '全て', - 'today' => '今日', - 'customRange' => '期間を指定', - 'date_range' => '対象期間', - 'apply' => '適用', - 'select_date' => '日付を選択...', - 'cancel' => 'キャンセル', - 'from' => '引き出し元', - 'to' => 'へ', - 'structure' => '構成', - 'help_translating' => 'このヘルプ文章はまだあなたの言語で利用可能ではありません。翻訳を手伝っていただけますか?', - 'showEverything' => 'すべてを表示', - 'never' => 'なし', - 'no_results_for_empty_search' => '検索条件が空なので、何も見つかりませんでした。', - 'removed_amount' => ':amount 削除しました', - 'added_amount' => ':amount 追加しました', - 'asset_account_role_help' => '追加設定は後で設定することができます。', - 'Opening balance' => '開始残高', - 'create_new_stuff' => '新しく作成する', - 'new_withdrawal' => '新しい出金', - 'create_new_transaction' => '新しい取引を作成', - 'sidebar_frontpage_create' => '作成', - 'new_transaction' => '新しい取引', - 'no_rules_for_bill' => 'この請求はどのルールにも関連付けられていません。', - 'go_to_asset_accounts' => '資産口座を見る', - 'go_to_budgets' => '予算へ移動', - 'go_to_withdrawals' => '出金に移動', - 'clones_journal_x' => 'この取引は「:description」 (#:id) の複製です。', - 'go_to_categories' => 'カテゴリへ移動', - 'go_to_bills' => '請求へ移動', - 'go_to_expense_accounts' => '支出口座を見る', - 'go_to_revenue_accounts' => '収入口座を見る', - 'go_to_piggies' => '貯金箱へ移動', - 'new_deposit' => '新しい入金', - 'new_transfer' => '新しい送金', - 'new_transfers' => '新しい送金', - 'new_asset_account' => '新しい資産口座', - 'new_expense_account' => '新しい支出口座', - 'new_revenue_account' => '新しい収入口座', - 'new_liabilities_account' => '新しい債務', - 'new_budget' => '新しい予算', - 'new_bill' => '新しい請求', - 'block_account_logout' => 'あなたはログアウトしました。ブロックされたアカウントはこのサイトを使うことが出来ません。有効なメールアドレスで登録しましたか?', - 'flash_success' => '成功しました!', - 'flash_info' => 'メッセージ', - 'flash_warning' => '警告!', - 'flash_error' => 'エラー!', - 'flash_danger' => '危険!', - 'flash_info_multiple' => '1件のメッセージがあります|:count 件のメッセージがあります', - 'flash_error_multiple' => '1件のエラーがあります|:count 件のエラーがあります', - 'net_worth' => '純資産', - 'help_for_this_page' => 'このページのヘルプ', - 'help_for_this_page_body' => 'こちらのページの詳細はドキュメントをご覧ください。', - 'two_factor_welcome' => 'こんにちは!', - 'two_factor_enter_code' => '続行するには、2要素認証コードを入力してください。あなたのアプリケーションが生成してくれます。', - 'two_factor_code_here' => 'コードを入力', - 'two_factor_title' => '2要素認証', - 'authenticate' => '認証', - 'two_factor_forgot_title' => '2要素認証を紛失', - 'two_factor_forgot' => '2要素認証端末を忘れてしまいました。', - 'two_factor_lost_header' => '2要素認証を紛失しましたか?', - 'two_factor_lost_intro' => 'バックアップコードも紛失してしまった場合、Webから修正する方法はありません。2つから選ぶことができます。', - 'two_factor_lost_fix_self' => 'Firefly IIIインスタンスを自分で運営する場合、説明書としてFAQ内のこの項目をお読みください。', - 'two_factor_lost_fix_owner' => 'または、サイト管理者 :site_owner に連絡して2要素認証をリセットしてもらうよう頼んでください。', - 'mfa_backup_code' => 'あなたはバックアップコードを利用してログインしました。もし再び使用することが出来ないなら、リストから削除してください。', - 'pref_two_factor_new_backup_codes' => '新しいバックアップコードを取得', - 'pref_two_factor_backup_code_count' => ':count 個の有効なバックアップコードがあります。|:count 個の有効なバックアップコードがあります。', - '2fa_i_have_them' => '保存しました!', - 'warning_much_data' => ':days日間のデータは読み込みに時間を要す場合があります。', - 'registered' => '登録に成功しました!', - 'Default asset account' => '既定の資産口座', - 'no_budget_pointer' => 'まだ予算を立てていないようです。予算ページで作成してください。予算は支出の把握に役立ちます。', - 'no_bill_pointer' => 'まだ請求がないようです。請求ページで作成してください。請求は支出の把握に役立ちます。', - 'Savings account' => '貯蓄口座', - 'Credit card' => 'クレジットカード', - 'source_accounts' => '引き出し元口座|引き出し元口座', - 'destination_accounts' => '預け入れ先口座|預け入れ先口座', - 'user_id_is' => 'あなたのユーザーIDは :user です', - 'field_supports_markdown' => 'この欄はマークダウンをサポートしています。', - 'need_more_help' => 'もしFirefly IIIの使用に当たってヘルプが必要なら、Githubでチケットを開いてください。', - 'reenable_intro_text' => '導入ガイダンスを再度有効にすることもできます。', - 'intro_boxes_after_refresh' => '説明は再読込後に再び表示されます。', - 'show_all_no_filter' => 'すべての取引を日付でまとめずに表示します。', - 'expenses_by_category' => 'カテゴリ別支出', - 'expenses_by_budget' => '予算別支出', - 'income_by_category' => 'カテゴリ別収入', - 'expenses_by_asset_account' => '資産口座ごとの支出', - 'expenses_by_expense_account' => '支出口座ごとの支出', - 'cannot_redirect_to_account' => 'Firefly IIIはあなたを正しいページにリダイレクトすることができませんでした。申し訳ありません。', - 'sum_of_expenses' => '合計支出', - 'sum_of_income' => '合計収入', - 'liabilities' => '負債', - 'spent_in_specific_budget' => '予算":budget"の支出', - 'spent_in_specific_double' => '口座「:account」での支出', - 'earned_in_specific_double' => '口座「:account」での収入', - 'source_account' => '引き出し口座', - 'source_account_reconciliation' => '引き出し口座の取引照合を編集することはできません。', - 'destination_account' => '預け入れ口座', - 'destination_account_reconciliation' => '預け入れ口座の取引照合を編集することはできません。', - 'sum_of_expenses_in_budget' => '予算":budget"の合計支出', - 'left_in_budget_limit' => '予算による支出残高', - 'current_period' => '現在の期間', - 'show_the_current_period_and_overview' => '現在の期間と概要を見る', - 'pref_languages_locale' => '英語以外の言語で正しく動作させるには、あなたのOSが正しいロケール情報を持っている必要があります。利用できない場合は、通貨データ、日付、金額が正しく表示されない可能性があります。', - 'budget_in_period' => '予算「:name」の :start から :end までのすべての取引の通貨 :currency のチャート', - 'chart_budget_in_period' => '予算「:name」の :start から :end までのすべての取引の通貨 :currency のチャート', - 'chart_budget_in_period_only_currency' => ':currency で予算計上されたため、このチャートは :currency での取引のみ表示されます。', - 'chart_account_in_period' => '口座「:name」(:balance) における :start から :end までのすべての取引のチャート', - 'chart_category_in_period' => '「:name」カテゴリの :start から :end までのすべての取引のチャート', - 'chart_category_all' => 'カテゴリ「:name」のすべての取引のチャート', - 'clone_withdrawal' => '出金を複製', - 'clone_deposit' => '入金を複製', - 'clone_transfer' => '送金を複製', - 'multi_select_no_selection' => '選択されていません', - 'multi_select_select_all' => 'すべてを選択', - 'multi_select_n_selected' => '選択済み', - 'multi_select_all_selected' => 'すべて選択済み', - 'multi_select_filter_placeholder' => '検索…', - 'intro_next_label' => '次へ', - 'intro_prev_label' => '前へ', - 'intro_skip_label' => 'スキップ', - 'intro_done_label' => '完了', - 'between_dates_breadcrumb' => ':start から :end まで', - 'all_journals_without_budget' => '予算外のすべての取引', - 'journals_without_budget' => '予算外のすべての取引', - 'all_journals_without_category' => 'カテゴリを除いたすべての取引', - 'journals_without_category' => 'カテゴリを除いた取引', - 'all_journals_for_account' => '口座「:name」のすべての取引', - 'chart_all_journals_for_account' => '口座「:name」のすべての取引のチャート', - 'journals_in_period_for_account' => '口座「:name」の :start から :end までのすべての取引', - 'journals_in_period_for_account_js' => '{start} から {end} までの口座 {title} のすべての取引', - 'transferred' => '送金済み', - 'all_withdrawal' => 'すべての支出', - 'all_transactions' => 'すべての取引', - 'title_withdrawal_between' => ':startから:endまでのすべての支出', - 'all_deposit' => 'すべての収入', - 'title_deposit_between' => ':start から :end までのすべての収入', - 'all_transfers' => 'すべての送金', - 'title_transfers_between' => ':start から :end までのすべての送金', - 'all_transfer' => 'すべての送金', - 'all_journals_for_tag' => '":tag"タグのついたすべての取引', - 'title_transfer_between' => ':start から :end までのすべての送金', - 'all_journals_for_category' => 'カテゴリ「:name」のすべての取引', - 'all_journals_for_budget' => '":name"予算のすべての取引', - 'chart_all_journals_for_budget' => '":name"予算のすべての取引のチャート', - 'journals_in_period_for_category' => 'カテゴリ「:name」の :start から :end までのすべての取引', - 'journals_in_period_for_tag' => 'タグ「:tag」のある :start から :end までのすべての取引', - 'not_available_demo_user' => 'あなたがアクセスしようとした機能はデモユーザーではご利用になれません。', - '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' => '無効なサーバー構成', - 'invalid_locale_settings' => 'Firefly IIIに必要なパッケージがサーバに不足しているため、金額を整形できません。 解決するための説明はここにあります。', - 'quickswitch' => 'クイックスイッチ', - 'sign_in_to_start' => 'サインインしてセッションを開始', - 'sign_in' => 'サインイン', - 'register_new_account' => '新しいアカウントを登録', - 'forgot_my_password' => 'パスワードを忘れました', - 'problems_with_input' => '入力に問題が発生しました。', - 'reset_password' => 'パスワードをリセット', - 'button_reset_password' => 'パスワードをリセット', - 'reset_button' => 'リセット', - 'want_to_login' => 'ログインする', - 'login_page_title' => 'Firefly III にログイン', - 'register_page_title' => 'Firefly IIIに登録する', - 'forgot_pw_page_title' => 'Firefly III のパスワードを忘れました', - 'reset_pw_page_title' => 'Firefly III のパスワードをリセットする', - 'cannot_reset_demo_user' => 'デモユーザーのパスワードはリセットできません。', - 'no_att_demo_user' => 'デモユーザーは添付ファイルをアップロードできません。', - 'button_register' => '登録', - 'authorization' => '認証', - 'active_bills_only' => '有効な請求のみ', - 'active_bills_only_total' => 'すべての有効な請求', - 'active_exp_bills_only' => '有効な請求見込みのみ', - 'active_exp_bills_only_total' => 'すべての有効な請求見込みのみ', - 'per_period_sum_1D' => '一日当たりの予想費用', - 'per_period_sum_1W' => '週当たりの予想費用', - 'per_period_sum_1M' => '月当たりの予想費用', - 'per_period_sum_3M' => '四半期当たりの予想費用', - 'per_period_sum_6M' => '半期当たりの予想費用', - 'per_period_sum_1Y' => '年あたりの予想費用', - 'average_per_bill' => '請求あたりの平均', - 'expected_total' => '予想合計', - 'reconciliation_account_name' => ':name 照合 (:currency)', - 'saved' => '保存しました。', - 'advanced_options' => '高度な設定', - 'advanced_options_explain' => 'Firefly III のいくつかのページにはこのボタンの後ろに高度なオプションがあります。このページには何もありませんが、他のページをチェックしてください!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => '閉じる', + 'actions' => '操作', + 'edit' => '編集', + 'delete' => '削除', + 'split' => '分割', + 'single_split' => '分割', + 'clone' => '複製', + 'clone_and_edit' => '複製と編集', + 'confirm_action' => '操作を確認', + 'last_seven_days' => '過去7日間', + 'last_thirty_days' => '過去30日間', + 'last_180_days' => '過去180日間', + 'month_to_date' => '過去1ヶ月', + 'year_to_date' => '過去1年間', + 'YTD' => 'YTD', + 'welcome_back' => '概要', + 'everything' => '全て', + 'today' => '今日', + 'customRange' => '期間を指定', + 'date_range' => '対象期間', + 'apply' => '適用', + 'select_date' => '日付を選択...', + 'cancel' => 'キャンセル', + 'from' => '引き出し元', + 'to' => 'へ', + 'structure' => '構成', + 'help_translating' => 'このヘルプ文章はまだあなたの言語で利用可能ではありません。翻訳を手伝っていただけますか?', + 'showEverything' => 'すべてを表示', + 'never' => 'なし', + 'no_results_for_empty_search' => '検索条件が空なので、何も見つかりませんでした。', + 'removed_amount' => ':amount 削除しました', + 'added_amount' => ':amount 追加しました', + 'asset_account_role_help' => '追加設定は後で設定することができます。', + 'Opening balance' => '開始残高', + 'create_new_stuff' => '新しく作成する', + 'new_withdrawal' => '新しい出金', + 'create_new_transaction' => '新しい取引を作成', + 'sidebar_frontpage_create' => '作成', + 'new_transaction' => '新しい取引', + 'no_rules_for_bill' => 'この請求はどのルールにも関連付けられていません。', + 'go_to_asset_accounts' => '資産口座を見る', + 'go_to_budgets' => '予算へ移動', + 'go_to_withdrawals' => '出金に移動', + 'clones_journal_x' => 'この取引は「:description」 (#:id) の複製です。', + 'go_to_categories' => 'カテゴリへ移動', + 'go_to_bills' => '請求へ移動', + 'go_to_expense_accounts' => '支出口座を見る', + 'go_to_revenue_accounts' => '収入口座を見る', + 'go_to_piggies' => '貯金箱へ移動', + 'new_deposit' => '新しい入金', + 'new_transfer' => '新しい送金', + 'new_transfers' => '新しい送金', + 'new_asset_account' => '新しい資産口座', + 'new_expense_account' => '新しい支出口座', + 'new_revenue_account' => '新しい収入口座', + 'new_liabilities_account' => '新しい債務', + 'new_budget' => '新しい予算', + 'new_bill' => '新しい請求', + 'block_account_logout' => 'あなたはログアウトしました。ブロックされたアカウントはこのサイトを使うことが出来ません。有効なメールアドレスで登録しましたか?', + 'flash_success' => '成功しました!', + 'flash_info' => 'メッセージ', + 'flash_warning' => '警告!', + 'flash_error' => 'エラー!', + 'flash_danger' => '危険!', + 'flash_info_multiple' => '1件のメッセージがあります|:count 件のメッセージがあります', + 'flash_error_multiple' => '1件のエラーがあります|:count 件のエラーがあります', + 'net_worth' => '純資産', + 'help_for_this_page' => 'このページのヘルプ', + 'help_for_this_page_body' => 'こちらのページの詳細はドキュメントをご覧ください。', + 'two_factor_welcome' => 'こんにちは!', + 'two_factor_enter_code' => '続行するには、2要素認証コードを入力してください。あなたのアプリケーションが生成してくれます。', + 'two_factor_code_here' => 'コードを入力', + 'two_factor_title' => '2要素認証', + 'authenticate' => '認証', + 'two_factor_forgot_title' => '2要素認証を紛失', + 'two_factor_forgot' => '2要素認証端末を忘れてしまいました。', + 'two_factor_lost_header' => '2要素認証を紛失しましたか?', + 'two_factor_lost_intro' => 'バックアップコードも紛失してしまった場合、Webから修正する方法はありません。2つから選ぶことができます。', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner に連絡して2要素認証をリセットしてもらうよう頼んでください。', + 'mfa_backup_code' => 'あなたはバックアップコードを利用してログインしました。もし再び使用することが出来ないなら、リストから削除してください。', + 'pref_two_factor_new_backup_codes' => '新しいバックアップコードを取得', + 'pref_two_factor_backup_code_count' => ':count 個の有効なバックアップコードがあります。|:count 個の有効なバックアップコードがあります。', + '2fa_i_have_them' => '保存しました!', + 'warning_much_data' => ':days日間のデータは読み込みに時間を要す場合があります。', + 'registered' => '登録に成功しました!', + 'Default asset account' => '既定の資産口座', + 'no_budget_pointer' => 'まだ予算を立てていないようです。予算ページで作成してください。予算は支出の把握に役立ちます。', + 'no_bill_pointer' => 'まだ請求がないようです。請求ページで作成してください。請求は支出の把握に役立ちます。', + 'Savings account' => '貯蓄口座', + 'Credit card' => 'クレジットカード', + 'source_accounts' => '引き出し元口座|引き出し元口座', + 'destination_accounts' => '預け入れ先口座|預け入れ先口座', + 'user_id_is' => 'あなたのユーザーIDは :user です', + 'field_supports_markdown' => 'この欄はマークダウンをサポートしています。', + 'need_more_help' => 'もしFirefly IIIの使用に当たってヘルプが必要なら、Githubでチケットを開いてください。', + 'reenable_intro_text' => '導入ガイダンスを再度有効にすることもできます。', + 'intro_boxes_after_refresh' => '説明は再読込後に再び表示されます。', + 'show_all_no_filter' => 'すべての取引を日付でまとめずに表示します。', + 'expenses_by_category' => 'カテゴリ別支出', + 'expenses_by_budget' => '予算別支出', + 'income_by_category' => 'カテゴリ別収入', + 'expenses_by_asset_account' => '資産口座ごとの支出', + 'expenses_by_expense_account' => '支出口座ごとの支出', + 'cannot_redirect_to_account' => 'Firefly IIIはあなたを正しいページにリダイレクトすることができませんでした。申し訳ありません。', + 'sum_of_expenses' => '合計支出', + 'sum_of_income' => '合計収入', + 'liabilities' => '負債', + 'spent_in_specific_budget' => '予算":budget"の支出', + 'spent_in_specific_double' => '口座「:account」での支出', + 'earned_in_specific_double' => '口座「:account」での収入', + 'source_account' => '引き出し口座', + 'source_account_reconciliation' => '引き出し口座の取引照合を編集することはできません。', + 'destination_account' => '預け入れ口座', + 'destination_account_reconciliation' => '預け入れ口座の取引照合を編集することはできません。', + 'sum_of_expenses_in_budget' => '予算":budget"の合計支出', + 'left_in_budget_limit' => '予算による支出残高', + 'current_period' => '現在の期間', + 'show_the_current_period_and_overview' => '現在の期間と概要を見る', + 'pref_languages_locale' => '英語以外の言語で正しく動作させるには、あなたのOSが正しいロケール情報を持っている必要があります。利用できない場合は、通貨データ、日付、金額が正しく表示されない可能性があります。', + 'budget_in_period' => '予算「:name」の :start から :end までのすべての取引の通貨 :currency のチャート', + 'chart_budget_in_period' => '予算「:name」の :start から :end までのすべての取引の通貨 :currency のチャート', + 'chart_budget_in_period_only_currency' => ':currency で予算計上されたため、このチャートは :currency での取引のみ表示されます。', + 'chart_account_in_period' => '口座「:name」(:balance) における :start から :end までのすべての取引のチャート', + 'chart_category_in_period' => '「:name」カテゴリの :start から :end までのすべての取引のチャート', + 'chart_category_all' => 'カテゴリ「:name」のすべての取引のチャート', + 'clone_withdrawal' => '出金を複製', + 'clone_deposit' => '入金を複製', + 'clone_transfer' => '送金を複製', + 'multi_select_no_selection' => '選択されていません', + 'multi_select_select_all' => 'すべてを選択', + 'multi_select_n_selected' => '選択済み', + 'multi_select_all_selected' => 'すべて選択済み', + 'multi_select_filter_placeholder' => '検索…', + 'intro_next_label' => '次へ', + 'intro_prev_label' => '前へ', + 'intro_skip_label' => 'スキップ', + 'intro_done_label' => '完了', + 'between_dates_breadcrumb' => ':start から :end まで', + 'all_journals_without_budget' => '予算外のすべての取引', + 'journals_without_budget' => '予算外のすべての取引', + 'all_journals_without_category' => 'カテゴリを除いたすべての取引', + 'journals_without_category' => 'カテゴリを除いた取引', + 'all_journals_for_account' => '口座「:name」のすべての取引', + 'chart_all_journals_for_account' => '口座「:name」のすべての取引のチャート', + 'journals_in_period_for_account' => '口座「:name」の :start から :end までのすべての取引', + 'journals_in_period_for_account_js' => '{start} から {end} までの口座 {title} のすべての取引', + 'transferred' => '送金済み', + 'all_withdrawal' => 'すべての支出', + 'all_transactions' => 'すべての取引', + 'title_withdrawal_between' => ':startから:endまでのすべての支出', + 'all_deposit' => 'すべての収入', + 'title_deposit_between' => ':start から :end までのすべての収入', + 'all_transfers' => 'すべての送金', + 'title_transfers_between' => ':start から :end までのすべての送金', + 'all_transfer' => 'すべての送金', + 'all_journals_for_tag' => '":tag"タグのついたすべての取引', + 'title_transfer_between' => ':start から :end までのすべての送金', + 'all_journals_for_category' => 'カテゴリ「:name」のすべての取引', + 'all_journals_for_budget' => '":name"予算のすべての取引', + 'chart_all_journals_for_budget' => '":name"予算のすべての取引のチャート', + 'journals_in_period_for_category' => 'カテゴリ「:name」の :start から :end までのすべての取引', + 'journals_in_period_for_tag' => 'タグ「:tag」のある :start から :end までのすべての取引', + 'not_available_demo_user' => 'あなたがアクセスしようとした機能はデモユーザーではご利用になれません。', + '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' => '無効なサーバー構成', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'クイックスイッチ', + 'sign_in_to_start' => 'サインインしてセッションを開始', + 'sign_in' => 'サインイン', + 'register_new_account' => '新しいアカウントを登録', + 'forgot_my_password' => 'パスワードを忘れました', + 'problems_with_input' => '入力に問題が発生しました。', + 'reset_password' => 'パスワードをリセット', + 'button_reset_password' => 'パスワードをリセット', + 'reset_button' => 'リセット', + 'want_to_login' => 'ログインする', + 'login_page_title' => 'Firefly III にログイン', + 'register_page_title' => 'Firefly IIIに登録する', + 'forgot_pw_page_title' => 'Firefly III のパスワードを忘れました', + 'reset_pw_page_title' => 'Firefly III のパスワードをリセットする', + 'cannot_reset_demo_user' => 'デモユーザーのパスワードはリセットできません。', + 'no_att_demo_user' => 'デモユーザーは添付ファイルをアップロードできません。', + 'button_register' => '登録', + 'authorization' => '認証', + 'active_bills_only' => '有効な請求のみ', + 'active_bills_only_total' => 'すべての有効な請求', + 'active_exp_bills_only' => '有効な請求見込みのみ', + 'active_exp_bills_only_total' => 'すべての有効な請求見込みのみ', + 'per_period_sum_1D' => '一日当たりの予想費用', + 'per_period_sum_1W' => '週当たりの予想費用', + 'per_period_sum_1M' => '月当たりの予想費用', + 'per_period_sum_3M' => '四半期当たりの予想費用', + 'per_period_sum_6M' => '半期当たりの予想費用', + 'per_period_sum_1Y' => '年あたりの予想費用', + 'average_per_bill' => '請求あたりの平均', + 'expected_total' => '予想合計', + 'reconciliation_account_name' => ':name 照合 (:currency)', + 'saved' => '保存しました。', + 'advanced_options' => '高度な設定', + 'advanced_options_explain' => 'Firefly III のいくつかのページにはこのボタンの後ろに高度なオプションがあります。このページには何もありませんが、他のページをチェックしてください!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhook', - 'webhooks_breadcrumb' => 'Webhook', - 'no_webhook_messages' => 'Webhookメッセージはありません', - 'webhook_trigger_STORE_TRANSACTION' => '取引作成後', - 'webhook_trigger_UPDATE_TRANSACTION' => '取引更新後', - 'webhook_trigger_DESTROY_TRANSACTION' => '取引削除後', - 'webhook_response_TRANSACTIONS' => '取引詳細', - 'webhook_response_ACCOUNTS' => '口座詳細', - 'webhook_response_none_NONE' => '詳細なし', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => '詳細確認', - 'create_new_webhook' => 'Webhookを作成', - 'webhooks_create_breadcrumb' => 'Webhookを作成', - 'webhook_trigger_form_help' => 'Webhookがトリガーするイベントです', - 'webhook_response_form_help' => 'WebhookがURLに送信するものです。', - 'webhook_delivery_form_help' => 'Webhookがデータを配信するフォーマットです。', - 'webhook_active_form_help' => 'Webhookは有効である必要があります。でなければ呼び出されません。', - 'stored_new_webhook' => 'Webhook「:title」が保存されました', - 'delete_webhook' => 'Webhookを削除する', - 'deleted_webhook' => 'Webhook「:title」が削除されました', - 'edit_webhook' => 'Webhook「:title」を編集', - 'updated_webhook' => 'Webhook「:title」が更新されました', - 'edit_webhook_js' => 'Webhook「{title}」を編集', - 'show_webhook' => 'Webhook「:title」', - 'webhook_was_triggered' => '指定された取引でWebhookがトリガーされました。結果が表示されるまでお待ちください。', - 'webhook_messages' => 'Webhookメッセージ', - 'view_message' => 'メッセージを見る', - 'view_attempts' => '失敗した試行の表示', - 'message_content_title' => 'Webhookメッセージの内容', - 'message_content_help' => 'このWebhookを使用して送信(または送信試行)されたメッセージの内容です。', - 'attempt_content_title' => 'Webhookの試行', - 'attempt_content_help' => '設定されたURLに送信するWebhookメッセージの試みはすべて失敗しました。しばらくするとFirefly IIIは試行を停止します。', - 'no_attempts' => '失敗した試行はありません。これは良いことです!', - 'webhook_attempt_at' => '{moment} に試行', - 'logs' => 'ログ', - 'response' => 'レスポンス', - 'visit_webhook_url' => 'WebhookのURLを開く', - 'reset_webhook_secret' => 'Webhookのシークレットをリセット', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") が保存されました。', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") が更新されました。', + 'webhooks' => 'Webhook', + 'webhooks_breadcrumb' => 'Webhook', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'Webhookメッセージはありません', + 'webhook_trigger_STORE_TRANSACTION' => '取引作成後', + 'webhook_trigger_UPDATE_TRANSACTION' => '取引更新後', + 'webhook_trigger_DESTROY_TRANSACTION' => '取引削除後', + 'webhook_response_TRANSACTIONS' => '取引詳細', + 'webhook_response_ACCOUNTS' => '口座詳細', + 'webhook_response_none_NONE' => '詳細なし', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => '詳細確認', + 'create_new_webhook' => 'Webhookを作成', + 'webhooks_create_breadcrumb' => 'Webhookを作成', + 'webhook_trigger_form_help' => 'Webhookがトリガーするイベントです', + 'webhook_response_form_help' => 'WebhookがURLに送信するものです。', + 'webhook_delivery_form_help' => 'Webhookがデータを配信するフォーマットです。', + 'webhook_active_form_help' => 'Webhookは有効である必要があります。でなければ呼び出されません。', + 'stored_new_webhook' => 'Webhook「:title」が保存されました', + 'delete_webhook' => 'Webhookを削除する', + 'deleted_webhook' => 'Webhook「:title」が削除されました', + 'edit_webhook' => 'Webhook「:title」を編集', + 'updated_webhook' => 'Webhook「:title」が更新されました', + 'edit_webhook_js' => 'Webhook「{title}」を編集', + 'show_webhook' => 'Webhook「:title」', + 'webhook_was_triggered' => '指定された取引でWebhookがトリガーされました。結果が表示されるまでお待ちください。', + 'webhook_messages' => 'Webhookメッセージ', + 'view_message' => 'メッセージを見る', + 'view_attempts' => '失敗した試行の表示', + 'message_content_title' => 'Webhookメッセージの内容', + 'message_content_help' => 'このWebhookを使用して送信(または送信試行)されたメッセージの内容です。', + 'attempt_content_title' => 'Webhookの試行', + 'attempt_content_help' => '設定されたURLに送信するWebhookメッセージの試みはすべて失敗しました。しばらくするとFirefly IIIは試行を停止します。', + 'no_attempts' => '失敗した試行はありません。これは良いことです!', + 'webhook_attempt_at' => '{moment} に試行', + 'logs' => 'ログ', + 'response' => 'レスポンス', + 'visit_webhook_url' => 'WebhookのURLを開く', + 'reset_webhook_secret' => 'Webhookのシークレットをリセット', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") が保存されました。', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") が更新されました。', // API access - 'authorization_request' => 'Firefly III v:version 認証要求', - 'authorization_request_intro' => ':clientはあなたの資産情報管理の権限を要求しています。:clientに情報へのアクセスを許可しますか?', - 'authorization_request_site' => ':url にリダイレクトされ、Firefly III データにアクセスできます。', - 'authorization_request_invalid' => 'このアクセスリクエストは無効です。今後はこのリンクを利用しないでください。', - 'scopes_will_be_able' => 'このアプリケーションは次のことができます:', - 'button_authorize' => '許可する', - 'none_in_select_list' => '(なし)', - 'no_piggy_bank' => '(貯金箱がありません)', - 'name_in_currency' => '通貨 ":name" を編集する', - 'paid_in_currency' => ':currency で支払い済み', - 'unpaid_in_currency' => ':currency で未払い', - 'is_alpha_warning' => 'あなたはアルファバージョンを使用しています。バグや問題に注意してください。', - 'is_beta_warning' => 'あなたはベータバージョンを使用しています。バグや問題に注意してください。', - 'all_destination_accounts' => '預け入れ口座', - 'all_source_accounts' => '引き出し口座', - 'back_to_index' => 'インデックスに戻る', - 'cant_logout_guard' => 'Firefly III からログアウトできません。', - 'internal_reference' => '内部参照', + 'authorization_request' => 'Firefly III v:version 認証要求', + 'authorization_request_intro' => ':clientはあなたの資産情報管理の権限を要求しています。:clientに情報へのアクセスを許可しますか?', + 'authorization_request_site' => ':url にリダイレクトされ、Firefly III データにアクセスできます。', + 'authorization_request_invalid' => 'このアクセスリクエストは無効です。今後はこのリンクを利用しないでください。', + 'scopes_will_be_able' => 'このアプリケーションは次のことができます:', + 'button_authorize' => '許可する', + 'none_in_select_list' => '(なし)', + 'no_piggy_bank' => '(貯金箱がありません)', + 'name_in_currency' => '通貨 ":name" を編集する', + 'paid_in_currency' => ':currency で支払い済み', + 'unpaid_in_currency' => ':currency で未払い', + 'is_alpha_warning' => 'あなたはアルファバージョンを使用しています。バグや問題に注意してください。', + 'is_beta_warning' => 'あなたはベータバージョンを使用しています。バグや問題に注意してください。', + 'all_destination_accounts' => '預け入れ口座', + 'all_source_accounts' => '引き出し口座', + 'back_to_index' => 'インデックスに戻る', + 'cant_logout_guard' => 'Firefly III からログアウトできません。', + 'internal_reference' => '内部参照', // check for updates: - 'update_check_title' => 'アップデートを確認', - 'admin_update_check_title' => 'アップデートを自動的に確認', - 'admin_update_check_explain' => 'Firefly III は自動的にアップデートを確認できます。 この設定を有効にすると、Firefly III アップデートサーバーに問い合わせ、新しいバージョンの Firefly III が利用可能かどうかを確認し、もしあれば通知が届きます。右のボタンでこの通知をテストできます。 Firefly III でアップデートを確認したい場合は、以下を指定してください。', - 'check_for_updates_permission' => 'Firefly III はアップデートを確認できますが、あなたの許可が必要です。 この機能を有効にしたい場合は、 管理 にて設定してください。', - 'updates_ask_me_later' => '後で確認する', - 'updates_do_not_check' => 'アップデートを確認しない', - 'updates_enable_check' => 'アップデートの確認を有効にする', - 'admin_update_check_now_title' => '今すぐアップデートを確認', - 'admin_update_check_now_explain' => 'ボタンを押すと、Firefly III が最新バージョンかどうかを確認します。', - 'check_for_updates_button' => '今すぐ確認', - 'update_new_version_alert' => 'Firefly III の新しいバージョンが利用可能です。あなたは現在 :your_version を実行していますが、最新バージョンは :date にリリースされた :new_version です。', - 'update_version_beta' => 'このバージョンはベータ版です。問題が発生する可能性があります。', - 'update_version_alpha' => 'このバージョンはアルファ版です。問題が発生する可能性があります。', - 'update_current_version_alert' => '最新のリリースである :version を利用しています。', - 'update_newer_version_alert' => '最新の :new_version よりも新しい :your_version を利用しています。', - 'update_check_error' => 'アップデートの確認中にエラーが発生しました: :error', - 'unknown_error' => '不明なエラーです。申し訳ありません。', - 'just_new_release' => '新しいバージョンが利用可能です!バージョン :version が :date にリリースされました。このリリースはできたてです。安定するまで数日待ってください。', - 'disabled_but_check' => 'アップデートのチェックを無効にしました。時々自分で更新を確認することを忘れないでください。よろしくおねがいします。', - 'admin_update_channel_title' => 'アップデートチャンネル', - 'admin_update_channel_explain' => 'Firefly III には、機能追加、機能改善、不具合をどれくらい先取りするかを決める3つのアップデートチャンネルがあります。 あなたが冒険好きならば、「ベータ」チャンネルを使用してください。危うい生活をしたいときは、「アルファ」を使用してください。', - 'update_channel_stable' => '安定。すべてが期待通りに動作するはずです。', - 'update_channel_beta' => 'ベータ。新しい機能がありますが、不安定かもしれません。', - 'update_channel_alpha' => 'アルファ。私たちは何でも投入し、使います。', + 'update_check_title' => 'アップデートを確認', + 'admin_update_check_title' => 'アップデートを自動的に確認', + 'admin_update_check_explain' => 'Firefly III は自動的にアップデートを確認できます。 この設定を有効にすると、Firefly III アップデートサーバーに問い合わせ、新しいバージョンの Firefly III が利用可能かどうかを確認し、もしあれば通知が届きます。右のボタンでこの通知をテストできます。 Firefly III でアップデートを確認したい場合は、以下を指定してください。', + 'check_for_updates_permission' => 'Firefly III はアップデートを確認できますが、あなたの許可が必要です。 この機能を有効にしたい場合は、 管理 にて設定してください。', + 'updates_ask_me_later' => '後で確認する', + 'updates_do_not_check' => 'アップデートを確認しない', + 'updates_enable_check' => 'アップデートの確認を有効にする', + 'admin_update_check_now_title' => '今すぐアップデートを確認', + 'admin_update_check_now_explain' => 'ボタンを押すと、Firefly III が最新バージョンかどうかを確認します。', + 'check_for_updates_button' => '今すぐ確認', + 'update_new_version_alert' => 'Firefly III の新しいバージョンが利用可能です。あなたは現在 :your_version を実行していますが、最新バージョンは :date にリリースされた :new_version です。', + 'update_version_beta' => 'このバージョンはベータ版です。問題が発生する可能性があります。', + 'update_version_alpha' => 'このバージョンはアルファ版です。問題が発生する可能性があります。', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => '最新のリリースである :version を利用しています。', + 'update_newer_version_alert' => '最新の :new_version よりも新しい :your_version を利用しています。', + 'update_check_error' => 'アップデートの確認中にエラーが発生しました: :error', + 'unknown_error' => '不明なエラーです。申し訳ありません。', + 'disabled_but_check' => 'アップデートのチェックを無効にしました。時々自分で更新を確認することを忘れないでください。よろしくおねがいします。', + 'admin_update_channel_title' => 'アップデートチャンネル', + 'admin_update_channel_explain' => 'Firefly III には、機能追加、機能改善、不具合をどれくらい先取りするかを決める3つのアップデートチャンネルがあります。 あなたが冒険好きならば、「ベータ」チャンネルを使用してください。危うい生活をしたいときは、「アルファ」を使用してください。', + 'update_channel_stable' => '安定。すべてが期待通りに動作するはずです。', + 'update_channel_beta' => 'ベータ。新しい機能がありますが、不安定かもしれません。', + 'update_channel_alpha' => 'アルファ。私たちは何でも投入し、使います。', // search - 'search' => '検索', - 'search_query' => 'クエリ', - 'search_found_transactions' => 'Firefly III は :count 件の取引を :time 秒で見つけました。|Firefly III は :count 件の取引を :time 秒で見つけました。', - 'search_found_more_transactions' => 'Firefly III は :count 件以上の取引を :time 秒で見つけました。', - 'search_for_query' => 'Firefly III はこれらすべての単語を含む取引を検索しています: :query', - 'invalid_operators_list' => 'これらの検索条件は無効であり、無視されています。', + 'search' => '検索', + 'search_query' => 'クエリ', + 'search_found_transactions' => 'Firefly III は :count 件の取引を :time 秒で見つけました。|Firefly III は :count 件の取引を :time 秒で見つけました。', + 'search_found_more_transactions' => 'Firefly III は :count 件以上の取引を :time 秒で見つけました。', + 'search_for_query' => 'Firefly III はこれらすべての単語を含む取引を検索しています: :query', + 'invalid_operators_list' => 'これらの検索条件は無効であり、無視されています。', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => '取引日が「:value」', 'search_modifier_not_date_on' => '取引日が「:value」ではない', 'search_modifier_reconciled' => '照合済みの取引', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => '取引種別が「:value」', 'search_modifier_not_transaction_type' => '取引種別が「:value」ではない', 'search_modifier_tag_is' => 'タグが「:value」', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'タグ「:value」がない', 'search_modifier_date_on_year' => '「:value」年の取引', 'search_modifier_not_date_on_year' => '「:value」年の取引ではない', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => '「:value」中またはそれ以降の取引', 'search_modifier_date_after_day' => '「:value」日以降の取引', - // new 'search_modifier_tag_is_not' => 'タグ「:value」がない', 'search_modifier_not_tag_is_not' => 'タグが「:value」', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => '検索クエリから新しいルールを作成', 'rule_from_search_words' => 'ルールエンジンは「:string」をうまく扱えません。 検索クエリに提案されたルールは、異なる結果をもたらす可能性があります。ルールのトリガーは慎重に検証してください。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => '次の修飾子も検索に適用されます:', 'general_search_error' => '検索中にエラーが発生しました。詳細はログファイルを確認してください。', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => '否定', 'cannot_fire_inactive_rules' => '無効なルールは実行できません。', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'ルール', 'rule_name' => 'ルールの名前', 'rule_triggers' => 'ルールがいつ発動するか', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => '取引が更新されたとき', 'rule_trigger_user_action' => 'ユーザーアクションは ":trigger_value"です。', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => '引き出し口座名が...で始まる', 'rule_trigger_source_account_starts' => '引き出し口座名が「:trigger_value」で始まる', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => '予算が「:trigger_value」', 'rule_trigger_tag_is_choice' => 'タグが...', 'rule_trigger_tag_is' => 'タグが「:trigger_value」', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => '取引通貨が…', 'rule_trigger_currency_is' => '取引通貨が「:trigger_value」', 'rule_trigger_foreign_currency_is_choice' => '取引外国通貨が…', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => '存在しない取引', 'rule_trigger_not_has_attachments' => '添付ファイルがない取引', 'rule_trigger_not_has_any_category' => 'カテゴリのない取引', - 'rule_trigger_not_has_any_budget' => 'カテゴリのない取引', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => '請求がない取引', 'rule_trigger_not_has_any_tag' => 'タグがない取引', 'rule_trigger_not_any_notes' => '備考がない取引', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => '預け入れ口座が現金口座ではない', 'rule_trigger_not_account_is_cash' => 'どちらの口座も現金口座ではない', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => '取引を削除 (!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => '概要の終わりにメモを追加', 'rule_action_move_descr_to_notes' => 'メモを概要で置き換え', 'rule_action_move_notes_to_descr' => '概要をメモで置き換え', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => '請求のルールグループ', 'rulegroup_for_bills_description' => '請求に関するすべてのルールのための特別なグループです。', 'rule_for_bill_title' => '請求「:name」用に自動作成されたルール', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => '請求「:name」のルール', 'new_rule_for_bill_description' => 'このルールは請求「:name」の取引をマークします。', - 'new_rule_for_journal_title' => '取引「:description」をもとにしたルール', - 'new_rule_for_journal_description' => 'このルールは取引「:description」に基づいています。全く同じ取引に適合します。', + 'new_rule_for_journal_title' => '取引「:description」をもとにしたルール', + 'new_rule_for_journal_description' => 'このルールは取引「:description」に基づいています。全く同じ取引に適合します。', // tags - 'store_new_tag' => '新しいタグを保存', - 'update_tag' => 'タグを更新', - 'no_location_set' => '場所が設定されていません。', - 'meta_data' => 'メタデータ', - 'location' => '場所', - 'without_date' => '日付なし', - 'result' => '結果', - 'sums_apply_to_range' => '選択した範囲にすべての合計が適用されます', - 'mapbox_api_key' => '地図を使うには Mapbox のAPIキーを取得してください。.envファイルを開き、MAPBOX_API_KEY=のうしろにAPIキーを入力してください。', - 'press_object_location' => '対象の位置を設定するには、右クリックまたは長押しします。', - 'clear_location' => '場所をクリア', - 'delete_all_selected_tags' => '選択したすべてのタグを削除', - 'select_tags_to_delete' => '忘れずにタグを選択してください。', - 'deleted_x_tags' => ':count 個のタグを削除しました。|:count 個のタグを削除しました。', - 'create_rule_from_transaction' => '取引に基づいてルールを作成', - 'create_recurring_from_transaction' => '取引に基づいて定期的な取引を作成する', - + 'store_new_tag' => '新しいタグを保存', + 'update_tag' => 'タグを更新', + 'no_location_set' => '場所が設定されていません。', + 'meta_data' => 'メタデータ', + 'location' => '場所', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => '日付なし', + 'result' => '結果', + 'sums_apply_to_range' => '選択した範囲にすべての合計が適用されます', + 'mapbox_api_key' => '地図を使うには Mapbox のAPIキーを取得してください。.envファイルを開き、MAPBOX_API_KEY=のうしろにAPIキーを入力してください。', + 'press_object_location' => '対象の位置を設定するには、右クリックまたは長押しします。', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => '場所をクリア', + 'delete_all_selected_tags' => '選択したすべてのタグを削除', + 'select_tags_to_delete' => '忘れずにタグを選択してください。', + 'deleted_x_tags' => ':count 個のタグを削除しました。|:count 個のタグを削除しました。', + 'create_rule_from_transaction' => '取引に基づいてルールを作成', + 'create_recurring_from_transaction' => '取引に基づいて定期的な取引を作成する', // preferences - 'dark_mode_option_browser' => 'ブラウザに判断させる', - 'dark_mode_option_light' => '常にライト', - 'dark_mode_option_dark' => '常にダーク', - 'equal_to_language' => '(言語と同一)', - 'dark_mode_preference' => 'ダークモード', - 'dark_mode_preference_help' => 'Firefly III にいつダークモードを使用するか伝えましょう。', - 'pref_home_screen_accounts' => 'ホーム画面の口座', - 'pref_home_screen_accounts_help' => 'ホームページにどの口座を表示しますか?', - 'pref_view_range' => '閲覧範囲', - 'pref_view_range_help' => 'いくつかのチャートは自動的に期間でグループ化されます。予算も期間にグループ化されます。どの期間を設定しますか?', - 'pref_1D' => '1日', - 'pref_1W' => '1週', - 'pref_1M' => '1ヵ月', - 'pref_3M' => '3ヶ月 (四半期)', - 'pref_6M' => '6ヶ月', - 'pref_1Y' => '1年', - 'pref_last365' => '昨年', - 'pref_last90' => '過去 90 日間', - 'pref_last30' => '過去 30 日間', - 'pref_last7' => '過去 7 日間', - 'pref_YTD' => '年始から今日まで', - 'pref_QTD' => '今四半期', - 'pref_MTD' => '今月', - 'pref_languages' => '言語', - 'pref_locale' => 'ロケール設定', - 'pref_languages_help' => 'Firefly III は多言語に対応しています。どれがお好みですか?', - 'pref_locale_help' => 'Firefly III では、通貨、数字、日付のフォーマットなど、他のローカル設定に変更できます。 このリストにあるエントリは、あなたのシステムでサポートされていない可能性があります。 Firefly III にはすべてのロケールの正しい日付設定がありません。改善のために私に連絡してください。', - 'pref_locale_no_demo' => 'この機能はデモユーザーでは動作しません。', - 'pref_custom_fiscal_year' => '会計年度設定', - 'pref_custom_fiscal_year_label' => '有効', - 'pref_custom_fiscal_year_help' => '1月1日から12月31日まで以外の会計年度を使用する国では、 これを有効にして、会計年度の開始日/終了日を指定します。', - 'pref_fiscal_year_start_label' => '会計年度開始日', - 'pref_two_factor_auth' => '2段階認証', - 'pref_two_factor_auth_help' => '2段階認証 (2要素認証) を有効にすると、アカウントにセキュリティ層を追加できます。 あなたは何か知っていること (パスワード) と、何かを持っていること (確認コード) でサインインします。 認証コードは Authy や Google Authenticator のようなスマートフォンアプリケーションによって生成されます。', - 'pref_enable_two_factor_auth' => '2段階認証を有効にする', - 'pref_two_factor_auth_disabled' => '2段階認証コードが削除されて無効になっています', - 'pref_two_factor_auth_remove_it' => '認証アプリからアカウントを削除することを忘れないでください!', - 'pref_two_factor_auth_code' => 'コードを確認', - 'pref_two_factor_auth_code_help' => 'Authy や Google Authenticator などの携帯電話のアプリケーションでQRコードをスキャンし、生成されたコードを入力します。', - 'pref_two_factor_auth_reset_code' => '確認コードをリセット', - 'pref_two_factor_auth_disable_2fa' => '2段階認証を無効にする', - '2fa_use_secret_instead' => 'QR コードをスキャンできない場合は、代わりにシークレットを使用してください: :secret', - '2fa_backup_codes' => 'デバイスを失くした場合に備えて、これらのバックアップコードを保存してください。', - '2fa_already_enabled' => '2段階認証はすでに有効です。', - 'wrong_mfa_code' => 'この多要素認証コードは無効です。', - 'pref_save_settings' => '設定を保存', - 'saved_preferences' => '設定が保存されました!', - 'preferences_general' => '一般設定', - 'preferences_frontpage' => 'ホーム画面', - 'preferences_security' => 'セキュリティ', - 'preferences_layout' => 'レイアウト', - 'preferences_notifications' => '通知', - 'pref_home_show_deposits' => 'ホーム画面に入金を表示する', - 'pref_home_show_deposits_info' => 'ホーム画面にはすでに支出口座が表示されています。収入口座も表示しますか?', - 'pref_home_do_show_deposits' => 'はい、表示します', - 'successful_count' => ':count 通のエラーがあります', - 'list_page_size_title' => 'ページの表示件数', - 'list_page_size_help' => 'あらゆるリスト (アカウント、取引など) のページあたりの最大表示数です。', - 'list_page_size_label' => 'ページの表示件数', - 'between_dates' => '(:start と :end)', - 'pref_optional_fields_transaction' => '取引のオプション項目', - 'pref_optional_fields_transaction_help' => 'デフォルトでは、新しい取引を作成するとき、すべての項目が有効ではありません (乱雑になるため)。 以下からあなたが便利と思う項目を有効にできます。すでに入力されている項目は、無効としても設定に関係なく表示されます。', - 'optional_tj_date_fields' => '日付フィールド', - 'optional_tj_other_fields' => 'その他の項目', - 'optional_tj_attachment_fields' => '添付ファイル項目', - 'pref_optional_tj_interest_date' => '利息日', - 'pref_optional_tj_book_date' => '記帳日', - 'pref_optional_tj_process_date' => '処理日', - 'pref_optional_tj_due_date' => '期限', - 'pref_optional_tj_payment_date' => '引き落とし日', - 'pref_optional_tj_invoice_date' => '領収書発行日', - 'pref_optional_tj_internal_reference' => '内部参照', - 'pref_optional_tj_notes' => '備考', - 'pref_optional_tj_attachments' => '添付ファイル', - 'pref_optional_tj_external_url' => '外部 URL', - 'pref_optional_tj_location' => '場所', - 'pref_optional_tj_links' => '取引リンク', - 'optional_field_meta_dates' => '日付', - 'optional_field_meta_business' => 'ビジネス', - 'optional_field_attachments' => '添付ファイル', - 'optional_field_meta_data' => '任意のメタデータ', - 'external_url' => '外部 URL', - 'pref_notification_bill_reminder' => '期限切れの請求について通知する', - 'pref_notification_new_access_token' => '新しい API アクセストークンが作成されたときに警告する', - 'pref_notification_transaction_creation' => '取引が自動的に作成されたとき警告する', - 'pref_notification_user_login' => '新しい場所からログインしたときに警告する', - 'pref_notification_rule_action_failures' => 'ルールアクションの実行に失敗したときに警告する (SlackまたはDiscordのみ)', - 'pref_notifications' => '通知', - 'pref_notifications_help' => 'これらは受け取る通知であるかどうかを示します。いくつかの通知には機密情報が含まれている場合があります。', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'Firefly IIIにSlackで通知させたい場合は、WebhookのURLをここに入力します。そうでなければ、フィールドを空白のままにします。 管理者の場合は、管理画面にもこのURLを設定する必要があります。', - 'slack_url_label' => 'Slack Incoming Webhook URL', + 'dark_mode_option_browser' => 'ブラウザに判断させる', + 'dark_mode_option_light' => '常にライト', + 'dark_mode_option_dark' => '常にダーク', + 'equal_to_language' => '(言語と同一)', + 'dark_mode_preference' => 'ダークモード', + 'dark_mode_preference_help' => 'Firefly III にいつダークモードを使用するか伝えましょう。', + 'pref_home_screen_accounts' => 'ホーム画面の口座', + 'pref_home_screen_accounts_help' => 'ホームページにどの口座を表示しますか?', + 'pref_view_range' => '閲覧範囲', + 'pref_view_range_help' => 'いくつかのチャートは自動的に期間でグループ化されます。予算も期間にグループ化されます。どの期間を設定しますか?', + 'pref_1D' => '1日', + 'pref_1W' => '1週', + 'pref_1M' => '1ヵ月', + 'pref_3M' => '3ヶ月 (四半期)', + 'pref_6M' => '6ヶ月', + 'pref_1Y' => '1年', + 'pref_last365' => '昨年', + 'pref_last90' => '過去 90 日間', + 'pref_last30' => '過去 30 日間', + 'pref_last7' => '過去 7 日間', + 'pref_YTD' => '年始から今日まで', + 'pref_QTD' => '今四半期', + 'pref_MTD' => '今月', + 'pref_languages' => '言語', + 'pref_locale' => 'ロケール設定', + 'pref_languages_help' => 'Firefly III は多言語に対応しています。どれがお好みですか?', + 'pref_locale_help' => 'Firefly III では、通貨、数字、日付のフォーマットなど、他のローカル設定に変更できます。 このリストにあるエントリは、あなたのシステムでサポートされていない可能性があります。 Firefly III にはすべてのロケールの正しい日付設定がありません。改善のために私に連絡してください。', + 'pref_locale_no_demo' => 'この機能はデモユーザーでは動作しません。', + 'pref_custom_fiscal_year' => '会計年度設定', + 'pref_custom_fiscal_year_label' => '有効', + 'pref_custom_fiscal_year_help' => '1月1日から12月31日まで以外の会計年度を使用する国では、 これを有効にして、会計年度の開始日/終了日を指定します。', + 'pref_fiscal_year_start_label' => '会計年度開始日', + 'pref_two_factor_auth' => '2段階認証', + 'pref_two_factor_auth_help' => '2段階認証 (2要素認証) を有効にすると、アカウントにセキュリティ層を追加できます。 あなたは何か知っていること (パスワード) と、何かを持っていること (確認コード) でサインインします。 認証コードは Authy や Google Authenticator のようなスマートフォンアプリケーションによって生成されます。', + 'pref_enable_two_factor_auth' => '2段階認証を有効にする', + 'pref_two_factor_auth_disabled' => '2段階認証コードが削除されて無効になっています', + 'pref_two_factor_auth_remove_it' => '認証アプリからアカウントを削除することを忘れないでください!', + 'pref_two_factor_auth_code' => 'コードを確認', + 'pref_two_factor_auth_code_help' => 'Authy や Google Authenticator などの携帯電話のアプリケーションでQRコードをスキャンし、生成されたコードを入力します。', + 'pref_two_factor_auth_reset_code' => '確認コードをリセット', + 'pref_two_factor_auth_disable_2fa' => '2段階認証を無効にする', + '2fa_use_secret_instead' => 'QR コードをスキャンできない場合は、代わりにシークレットを使用してください: :secret', + '2fa_backup_codes' => 'デバイスを失くした場合に備えて、これらのバックアップコードを保存してください。', + '2fa_already_enabled' => '2段階認証はすでに有効です。', + 'wrong_mfa_code' => 'この多要素認証コードは無効です。', + 'pref_save_settings' => '設定を保存', + 'saved_preferences' => '設定が保存されました!', + 'preferences_general' => '一般設定', + 'preferences_frontpage' => 'ホーム画面', + 'preferences_security' => 'セキュリティ', + 'preferences_layout' => 'レイアウト', + 'preferences_notifications' => '通知', + 'pref_home_show_deposits' => 'ホーム画面に入金を表示する', + 'pref_home_show_deposits_info' => 'ホーム画面にはすでに支出口座が表示されています。収入口座も表示しますか?', + 'pref_home_do_show_deposits' => 'はい、表示します', + 'successful_count' => ':count 通のエラーがあります', + 'list_page_size_title' => 'ページの表示件数', + 'list_page_size_help' => 'あらゆるリスト (アカウント、取引など) のページあたりの最大表示数です。', + 'list_page_size_label' => 'ページの表示件数', + 'between_dates' => '(:start と :end)', + 'pref_optional_fields_transaction' => '取引のオプション項目', + 'pref_optional_fields_transaction_help' => 'デフォルトでは、新しい取引を作成するとき、すべての項目が有効ではありません (乱雑になるため)。 以下からあなたが便利と思う項目を有効にできます。すでに入力されている項目は、無効としても設定に関係なく表示されます。', + 'optional_tj_date_fields' => '日付フィールド', + 'optional_tj_other_fields' => 'その他の項目', + 'optional_tj_attachment_fields' => '添付ファイル項目', + 'pref_optional_tj_interest_date' => '利息日', + 'pref_optional_tj_book_date' => '記帳日', + 'pref_optional_tj_process_date' => '処理日', + 'pref_optional_tj_due_date' => '期限', + 'pref_optional_tj_payment_date' => '引き落とし日', + 'pref_optional_tj_invoice_date' => '領収書発行日', + 'pref_optional_tj_internal_reference' => '内部参照', + 'pref_optional_tj_notes' => '備考', + 'pref_optional_tj_attachments' => '添付ファイル', + 'pref_optional_tj_external_url' => '外部 URL', + 'pref_optional_tj_location' => '場所', + 'pref_optional_tj_links' => '取引リンク', + 'optional_field_meta_dates' => '日付', + 'optional_field_meta_business' => 'ビジネス', + 'optional_field_attachments' => '添付ファイル', + 'optional_field_meta_data' => '任意のメタデータ', + 'external_url' => '外部 URL', + 'pref_notification_bill_reminder' => '期限切れの請求について通知する', + 'pref_notification_new_access_token' => '新しい API アクセストークンが作成されたときに警告する', + 'pref_notification_transaction_creation' => '取引が自動的に作成されたとき警告する', + 'pref_notification_user_login' => '新しい場所からログインしたときに警告する', + 'pref_notification_rule_action_failures' => 'ルールアクションの実行に失敗したときに警告する (SlackまたはDiscordのみ)', + 'pref_notifications' => '通知', + 'pref_notifications_help' => 'これらは受け取る通知であるかどうかを示します。いくつかの通知には機密情報が含まれている場合があります。', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'Firefly IIIにSlackで通知させたい場合は、WebhookのURLをここに入力します。そうでなければ、フィールドを空白のままにします。 管理者の場合は、管理画面にもこのURLを設定する必要があります。', + 'slack_url_label' => 'Slack Incoming Webhook URL', // Financial administrations - 'administration_index' => '財務管理', - 'administrations_index_menu' => '財務管理', + 'administration_index' => '財務管理', + 'administrations_index_menu' => '財務管理', // profile: - 'purge_data_title' => 'Firefly III からデータを消去', - 'purge_data_expl' => '「パージ」とは、「削除済みのものを削除する」ことを意味します。通常、Firefly IIIは何も永久には削除せず非表示にします。下のボタンはこれまでに削除されたレコードのすべてを削除します。', - 'delete_stuff_header' => '削除とパージ', - 'purge_all_data' => '削除済の全レコードをパージ', - 'purge_data' => 'データを消去', - 'purged_all_records' => '削除済の全レコードがパージされました。', - 'delete_data_title' => 'Firefly IIIからデータを削除', - 'permanent_delete_stuff' => 'あなたはFirefly IIIからデータを削除することができます。以下のボタンで、表示されているものと非表示のものが削除されます。 取り消しボタンはありませんが、必要な場合はサルベージできる項目がデータベースに残っている可能性があります。', - 'other_sessions_logged_out' => 'すべてのセッションでログアウトしました。', - 'delete_unused_accounts' => '未使用の口座を削除すると、オートコンプリートの一覧がきれいになります。', - 'delete_all_unused_accounts' => '未使用の口座を削除', - 'deleted_all_unused_accounts' => 'すべての未使用の口座は削除されました', - 'delete_all_budgets' => 'すべての予算を削除', - 'delete_all_categories' => 'すべてのカテゴリを削除', - 'delete_all_tags' => 'すべてのタグを削除', - 'delete_all_bills' => 'すべての請求を削除', - 'delete_all_piggy_banks' => 'すべての貯金箱を削除', - 'delete_all_rules' => 'すべてのルールを削除', - 'delete_all_recurring' => 'すべての定期的な取引を削除', - 'delete_all_object_groups' => 'すべてのグループを削除', - 'delete_all_accounts' => 'すべての口座を削除', - 'delete_all_asset_accounts' => 'すべての資産口座を削除', - 'delete_all_expense_accounts' => 'すべての支出口座を削除', - 'delete_all_revenue_accounts' => 'すべての収入口座を削除', - 'delete_all_liabilities' => 'すべての負債を削除', - 'delete_all_transactions' => 'すべての取引を削除', - 'delete_all_withdrawals' => 'すべての引き出しを削除', - 'delete_all_deposits' => 'すべての入金を削除', - 'delete_all_transfers' => 'すべての送金を削除', - 'also_delete_transactions' => '口座を削除すると、関連するすべての出金、入金、送金も削除されます!', - 'deleted_all_budgets' => 'すべての予算が削除されました', - 'deleted_all_categories' => 'すべてのカテゴリが削除されました', - 'deleted_all_tags' => 'すべてのタグが削除されました', - 'deleted_all_bills' => 'すべての請求が削除されました', - 'deleted_all_piggy_banks' => 'すべての貯金箱が削除されました', - 'deleted_all_rules' => 'すべてのルールとルールグループが削除されました', - 'deleted_all_object_groups' => 'すべてのグループが削除されました', - 'deleted_all_accounts' => 'すべてのアカウントが削除されました', - 'deleted_all_asset_accounts' => 'すべての資産口座が削除されました', - 'deleted_all_expense_accounts' => 'すべての支出口座が削除されました', - 'deleted_all_revenue_accounts' => 'すべての収入口座が削除されました', - 'deleted_all_liabilities' => 'すべての負債が削除されました', - 'deleted_all_transactions' => 'すべての取引が削除されました', - 'deleted_all_withdrawals' => 'すべての引き出しが削除されました', - 'deleted_all_deposits' => 'すべての入金が削除されました', - 'deleted_all_transfers' => 'すべての送金が削除されました', - 'deleted_all_recurring' => 'すべての定期的な取引が削除されました', - 'change_your_password' => 'パスワードを変更する', - 'delete_account' => 'アカウントを削除', - 'current_password' => '現在のパスワード', - 'new_password' => '新しいパスワード', - 'new_password_again' => '新しいパスワード(確認)', - 'delete_your_account' => 'アカウントを削除', - 'delete_your_account_help' => '口座を削除すると、口座や取引など Firefly III に保存したすべてのもの が削除されます。', - 'delete_your_account_password' => '続行するにはパスワードを入力してください', - 'password' => 'パスワード', - 'are_you_sure' => '本当によろしいですか?これを元に戻すことはできません。', - 'delete_account_button' => 'アカウントを削除', - 'invalid_current_password' => '現在のパスワードが正しくありません!', - 'password_changed' => 'パスワードが変更されました!', - 'should_change' => 'アイデアはパスワードを変更することです。', - 'invalid_password' => 'パスワードが正しくありません!', - 'what_is_pw_security' => '「パスワードの安全性確認」とは?', - 'secure_pw_title' => '安全なパスワードを選択する方法', - 'forgot_password_response' => 'ありがとうございます。このメールアドレスのアカウントが存在する場合は、受信トレイで手順を見つけられるでしょう。', - 'secure_pw_history' => '数日に一回は、どこかのサイトのユーザーパスワード漏洩のニュースを目にします。 ハッカーと泥棒は、あなたの個人情報を盗むために、これらのパスワードを使用するでしょう。この情報は大切です。', - 'secure_pw_ff' => 'インターネット上のあらゆるところで、同じパスワードを使用していますか?その場合、ひとつのサイトがパスワードを漏洩すると、ハッカーはあなたのすべてのデータにアクセスできてしまいます。 Firefly III があなたの財務記録を保護するためには、あなたが強力でユニークなパスワードを使用することが必要です。', - 'secure_pw_check_box' => 'Firefly III で使用するパスワードが過去に盗まれているかどうかを確認できます。 該当する場合、Firefly III はそのパスワードを使用しないことをお勧めします。', - 'secure_pw_working_title' => 'どのような仕組みですか?', - 'secure_pw_working' => 'チェックすると、Firefly III はあなたのパスワードの SHA1 ハッシュの最初の5文字をTroy Huntのウェブサイトに送信し、リストにあるか確認します。これにより、最新の NIST Special Publication で推奨されている通り、あなたが安全ではないパスワードを使用するのを防ぎます。', - 'secure_pw_should' => 'チェックを入れるべき?', - 'secure_pw_long_password' => 'はい。常にパスワードが安全であることを確認してください。', - 'command_line_token' => 'コマンドライントークン', - 'explain_command_line_token' => 'データのエクスポートなどのコマンドラインオプションを実行するには、このトークンが必要です。 それら慎重に扱うべきコマンドはトークンがなければ動作しません。私を含め、誰にもコマンドライントークンを共有しないでください。 もし紛失したり、疑心暗鬼に陥っている場合は、ボタンでトークンを再生成してください。', - 'regenerate_command_line_token' => 'コマンドライントークンを再生成', - 'token_regenerated' => '新しいコマンドライントークンが生成されました', - 'change_your_email' => 'メールアドレスを変更する', - 'email_verification' => '新旧のメールアドレスにメールが送信されます。 セキュリティのため、新しいメールアドレスを確認するまでログインできません。 Firefly III 環境がメール送信可能かどうか分からない場合は、この機能を使用しないでください。 管理者であれば、 管理 でテストできます。', - 'email_changed_logout' => 'メールアドレスを確認するまでログインできません。', - 'login_with_new_email' => '新しいメールアドレスでログインできるようになりました。', - 'login_with_old_email' => '古いメールアドレスで再度ログインできるようになりました。', - 'login_provider_local_only' => 'この操作は「:login_provider」による認証では使用できません。', - 'external_user_mgt_disabled' => 'この操作は Firefly III がユーザ管理や認証処理を担わない場合には使用できません。', - 'external_auth_disabled' => 'この操作は Firefly III が認証処理を担わない場合には使用できません。', - 'delete_local_info_only' => "Firefly III がユーザー管理や認証処理に担わないため、この機能はローカルの Firefly III の情報のみを削除します。", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuthクライアント', - 'profile_oauth_no_clients' => 'OAuthクライアントを作成していません。', - 'profile_oauth_clients_external_auth' => 'Autheliaのような外部認証プロバイダを使用している場合、OAuth クライアントは動作しません。パーソナルアクセストークンのみを使用できます。', - 'profile_oauth_clients_header' => 'クライアント', - 'profile_oauth_client_id' => 'クライアント ID', - 'profile_oauth_client_name' => '名前', - 'profile_oauth_client_secret' => 'シークレット', - 'profile_oauth_create_new_client' => '新しいクライアントを作成', - 'profile_oauth_create_client' => 'クライアントを作成', - 'profile_oauth_edit_client' => 'クライアントの編集', - 'profile_oauth_name_help' => 'ユーザーが認識、信頼するものです。', - 'profile_oauth_redirect_url' => 'リダイレクト URL', - 'profile_oauth_redirect_url_help' => 'アプリケーションの認証コールバック URL です。', - 'profile_authorized_apps' => '認証済みアプリケーション', - 'profile_authorized_clients' => '認証済みクライアント', - 'profile_scopes' => 'スコープ', - 'profile_revoke' => '無効にする', - 'profile_oauth_client_secret_title' => 'クライアントシークレット', - 'profile_oauth_client_secret_expl' => '新しいクライアントシークレットです。 これは一度しか表示されないので、失くさないでください!このシークレットにより API リクエストを実行できます。', - 'profile_personal_access_tokens' => 'パーソナルアクセストークン', - 'profile_personal_access_token' => '個人アクセストークン', - 'profile_oauth_confidential' => '機密', - 'profile_oauth_confidential_help' => 'クライアントにシークレットを使って認証することを要求します。内々のクライアントは、許可されていない者に公開することなく、認証情報を安全な方法で保持できます。 ネイティブデスクトップや JavaScript SPAアプリケーションなどのパブリックアプリケーションは、シークレットを安全に保持することはできません。', - 'profile_personal_access_token_explanation' => '新しいパーソナルアクセストークンです。 これは一度しか表示されないので、失くさないでください!このシークレットにより API リクエストを実行できます。', - 'profile_no_personal_access_token' => 'パーソナルアクセストークンは作成されていません。', - 'profile_create_new_token' => '新しいトークンを作成', - 'profile_create_token' => 'トークンを作成', - 'profile_create' => '作成', - 'profile_save_changes' => '変更を保存', - 'profile_whoops' => 'おっと!', - 'profile_something_wrong' => '何か問題が発生しました!', - 'profile_try_again' => '問題が発生しました。もう一度やり直してください。', - 'amounts' => '金額', - 'multi_account_warning_unknown' => '作成する取引の種類に応じて、続く分割の引き出し口座や預け入れ口座は、取引の最初の分割で定義されているものによって覆される可能性があります。', - 'multi_account_warning_withdrawal' => '続く分割の引き出し口座は、出金の最初の分割の定義によって覆されることに注意してください。', - 'multi_account_warning_deposit' => '続く分割の預け入れ口座は、送金の最初の分割の定義によって覆されることに注意してください。', - 'multi_account_warning_transfer' => '続く分割の預け入れ口座と引き出し口座は、送金の最初の分割の定義によって覆されることに注意してください。', + 'purge_data_title' => 'Firefly III からデータを消去', + 'purge_data_expl' => '「パージ」とは、「削除済みのものを削除する」ことを意味します。通常、Firefly IIIは何も永久には削除せず非表示にします。下のボタンはこれまでに削除されたレコードのすべてを削除します。', + 'delete_stuff_header' => '削除とパージ', + 'purge_all_data' => '削除済の全レコードをパージ', + 'purge_data' => 'データを消去', + 'purged_all_records' => '削除済の全レコードがパージされました。', + 'delete_data_title' => 'Firefly IIIからデータを削除', + 'permanent_delete_stuff' => 'あなたはFirefly IIIからデータを削除することができます。以下のボタンで、表示されているものと非表示のものが削除されます。 取り消しボタンはありませんが、必要な場合はサルベージできる項目がデータベースに残っている可能性があります。', + 'other_sessions_logged_out' => 'すべてのセッションでログアウトしました。', + 'delete_unused_accounts' => '未使用の口座を削除すると、オートコンプリートの一覧がきれいになります。', + 'delete_all_unused_accounts' => '未使用の口座を削除', + 'deleted_all_unused_accounts' => 'すべての未使用の口座は削除されました', + 'delete_all_budgets' => 'すべての予算を削除', + 'delete_all_categories' => 'すべてのカテゴリを削除', + 'delete_all_tags' => 'すべてのタグを削除', + 'delete_all_bills' => 'すべての請求を削除', + 'delete_all_piggy_banks' => 'すべての貯金箱を削除', + 'delete_all_rules' => 'すべてのルールを削除', + 'delete_all_recurring' => 'すべての定期的な取引を削除', + 'delete_all_object_groups' => 'すべてのグループを削除', + 'delete_all_accounts' => 'すべての口座を削除', + 'delete_all_asset_accounts' => 'すべての資産口座を削除', + 'delete_all_expense_accounts' => 'すべての支出口座を削除', + 'delete_all_revenue_accounts' => 'すべての収入口座を削除', + 'delete_all_liabilities' => 'すべての負債を削除', + 'delete_all_transactions' => 'すべての取引を削除', + 'delete_all_withdrawals' => 'すべての引き出しを削除', + 'delete_all_deposits' => 'すべての入金を削除', + 'delete_all_transfers' => 'すべての送金を削除', + 'also_delete_transactions' => '口座を削除すると、関連するすべての出金、入金、送金も削除されます!', + 'deleted_all_budgets' => 'すべての予算が削除されました', + 'deleted_all_categories' => 'すべてのカテゴリが削除されました', + 'deleted_all_tags' => 'すべてのタグが削除されました', + 'deleted_all_bills' => 'すべての請求が削除されました', + 'deleted_all_piggy_banks' => 'すべての貯金箱が削除されました', + 'deleted_all_rules' => 'すべてのルールとルールグループが削除されました', + 'deleted_all_object_groups' => 'すべてのグループが削除されました', + 'deleted_all_accounts' => 'すべてのアカウントが削除されました', + 'deleted_all_asset_accounts' => 'すべての資産口座が削除されました', + 'deleted_all_expense_accounts' => 'すべての支出口座が削除されました', + 'deleted_all_revenue_accounts' => 'すべての収入口座が削除されました', + 'deleted_all_liabilities' => 'すべての負債が削除されました', + 'deleted_all_transactions' => 'すべての取引が削除されました', + 'deleted_all_withdrawals' => 'すべての引き出しが削除されました', + 'deleted_all_deposits' => 'すべての入金が削除されました', + 'deleted_all_transfers' => 'すべての送金が削除されました', + 'deleted_all_recurring' => 'すべての定期的な取引が削除されました', + 'change_your_password' => 'パスワードを変更する', + 'delete_account' => 'アカウントを削除', + 'current_password' => '現在のパスワード', + 'new_password' => '新しいパスワード', + 'new_password_again' => '新しいパスワード(確認)', + 'delete_your_account' => 'アカウントを削除', + 'delete_your_account_help' => '口座を削除すると、口座や取引など Firefly III に保存したすべてのもの が削除されます。', + 'delete_your_account_password' => '続行するにはパスワードを入力してください', + 'password' => 'パスワード', + 'are_you_sure' => '本当によろしいですか?これを元に戻すことはできません。', + 'delete_account_button' => 'アカウントを削除', + 'invalid_current_password' => '現在のパスワードが正しくありません!', + 'password_changed' => 'パスワードが変更されました!', + 'should_change' => 'アイデアはパスワードを変更することです。', + 'invalid_password' => 'パスワードが正しくありません!', + 'what_is_pw_security' => '「パスワードの安全性確認」とは?', + 'secure_pw_title' => '安全なパスワードを選択する方法', + 'forgot_password_response' => 'ありがとうございます。このメールアドレスのアカウントが存在する場合は、受信トレイで手順を見つけられるでしょう。', + 'secure_pw_history' => '数日に一回は、どこかのサイトのユーザーパスワード漏洩のニュースを目にします。 ハッカーと泥棒は、あなたの個人情報を盗むために、これらのパスワードを使用するでしょう。この情報は大切です。', + 'secure_pw_ff' => 'インターネット上のあらゆるところで、同じパスワードを使用していますか?その場合、ひとつのサイトがパスワードを漏洩すると、ハッカーはあなたのすべてのデータにアクセスできてしまいます。 Firefly III があなたの財務記録を保護するためには、あなたが強力でユニークなパスワードを使用することが必要です。', + 'secure_pw_check_box' => 'Firefly III で使用するパスワードが過去に盗まれているかどうかを確認できます。 該当する場合、Firefly III はそのパスワードを使用しないことをお勧めします。', + 'secure_pw_working_title' => 'どのような仕組みですか?', + 'secure_pw_working' => 'チェックすると、Firefly III はあなたのパスワードの SHA1 ハッシュの最初の5文字をTroy Huntのウェブサイトに送信し、リストにあるか確認します。これにより、最新の NIST Special Publication で推奨されている通り、あなたが安全ではないパスワードを使用するのを防ぎます。', + 'secure_pw_should' => 'チェックを入れるべき?', + 'secure_pw_long_password' => 'はい。常にパスワードが安全であることを確認してください。', + 'command_line_token' => 'コマンドライントークン', + 'explain_command_line_token' => 'データのエクスポートなどのコマンドラインオプションを実行するには、このトークンが必要です。 それら慎重に扱うべきコマンドはトークンがなければ動作しません。私を含め、誰にもコマンドライントークンを共有しないでください。 もし紛失したり、疑心暗鬼に陥っている場合は、ボタンでトークンを再生成してください。', + 'regenerate_command_line_token' => 'コマンドライントークンを再生成', + 'token_regenerated' => '新しいコマンドライントークンが生成されました', + 'change_your_email' => 'メールアドレスを変更する', + 'email_verification' => '新旧のメールアドレスにメールが送信されます。 セキュリティのため、新しいメールアドレスを確認するまでログインできません。 Firefly III 環境がメール送信可能かどうか分からない場合は、この機能を使用しないでください。 管理者であれば、 管理 でテストできます。', + 'email_changed_logout' => 'メールアドレスを確認するまでログインできません。', + 'login_with_new_email' => '新しいメールアドレスでログインできるようになりました。', + 'login_with_old_email' => '古いメールアドレスで再度ログインできるようになりました。', + 'login_provider_local_only' => 'この操作は「:login_provider」による認証では使用できません。', + 'external_user_mgt_disabled' => 'この操作は Firefly III がユーザ管理や認証処理を担わない場合には使用できません。', + 'external_auth_disabled' => 'この操作は Firefly III が認証処理を担わない場合には使用できません。', + 'delete_local_info_only' => 'Firefly III がユーザー管理や認証処理に担わないため、この機能はローカルの Firefly III の情報のみを削除します。', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuthクライアント', + 'profile_oauth_no_clients' => 'OAuthクライアントを作成していません。', + 'profile_oauth_clients_external_auth' => 'Autheliaのような外部認証プロバイダを使用している場合、OAuth クライアントは動作しません。パーソナルアクセストークンのみを使用できます。', + 'profile_oauth_clients_header' => 'クライアント', + 'profile_oauth_client_id' => 'クライアント ID', + 'profile_oauth_client_name' => '名前', + 'profile_oauth_client_secret' => 'シークレット', + 'profile_oauth_create_new_client' => '新しいクライアントを作成', + 'profile_oauth_create_client' => 'クライアントを作成', + 'profile_oauth_edit_client' => 'クライアントの編集', + 'profile_oauth_name_help' => 'ユーザーが認識、信頼するものです。', + 'profile_oauth_redirect_url' => 'リダイレクト URL', + 'profile_oauth_redirect_url_help' => 'アプリケーションの認証コールバック URL です。', + 'profile_authorized_apps' => '認証済みアプリケーション', + 'profile_authorized_clients' => '認証済みクライアント', + 'profile_scopes' => 'スコープ', + 'profile_revoke' => '無効にする', + 'profile_oauth_client_secret_title' => 'クライアントシークレット', + 'profile_oauth_client_secret_expl' => '新しいクライアントシークレットです。 これは一度しか表示されないので、失くさないでください!このシークレットにより API リクエストを実行できます。', + 'profile_personal_access_tokens' => 'パーソナルアクセストークン', + 'profile_personal_access_token' => '個人アクセストークン', + 'profile_oauth_confidential' => '機密', + 'profile_oauth_confidential_help' => 'クライアントにシークレットを使って認証することを要求します。内々のクライアントは、許可されていない者に公開することなく、認証情報を安全な方法で保持できます。 ネイティブデスクトップや JavaScript SPAアプリケーションなどのパブリックアプリケーションは、シークレットを安全に保持することはできません。', + 'profile_personal_access_token_explanation' => '新しいパーソナルアクセストークンです。 これは一度しか表示されないので、失くさないでください!このシークレットにより API リクエストを実行できます。', + 'profile_no_personal_access_token' => 'パーソナルアクセストークンは作成されていません。', + 'profile_create_new_token' => '新しいトークンを作成', + 'profile_create_token' => 'トークンを作成', + 'profile_create' => '作成', + 'profile_save_changes' => '変更を保存', + 'profile_whoops' => 'おっと!', + 'profile_something_wrong' => '何か問題が発生しました!', + 'profile_try_again' => '問題が発生しました。もう一度やり直してください。', + 'amounts' => '金額', + 'multi_account_warning_unknown' => '作成する取引の種類に応じて、続く分割の引き出し口座や預け入れ口座は、取引の最初の分割で定義されているものによって覆される可能性があります。', + 'multi_account_warning_withdrawal' => '続く分割の引き出し口座は、出金の最初の分割の定義によって覆されることに注意してください。', + 'multi_account_warning_deposit' => '続く分割の預け入れ口座は、送金の最初の分割の定義によって覆されることに注意してください。', + 'multi_account_warning_transfer' => '続く分割の預け入れ口座と引き出し口座は、送金の最初の分割の定義によって覆されることに注意してください。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Firefly III からデータをエクスポート', - 'export_data_menu' => 'データのエクスポート', - 'export_data_bc' => 'Firefly III からデータをエクスポート', - 'export_data_main_title' => 'Firefly III からデータをエクスポート', - 'export_data_expl' => 'このリンクで Firefly IIIからすべての取引とメタデータをエクスポートできます。処理の詳細についてはヘルプ (右上の(?)アイコン) を参照してください。', - 'export_data_all_transactions' => 'すべての取引をエクスポート', - 'export_data_advanced_expl' => 'より高度、または特定のエクスポートが必要な場合、コンソールコマンド php artisan help foreflily-ii:export-data の使用方法のヘルプを参照してください。', + 'export_data_title' => 'Firefly III からデータをエクスポート', + 'export_data_menu' => 'データのエクスポート', + 'export_data_bc' => 'Firefly III からデータをエクスポート', + 'export_data_main_title' => 'Firefly III からデータをエクスポート', + 'export_data_expl' => 'このリンクで Firefly IIIからすべての取引とメタデータをエクスポートできます。処理の詳細についてはヘルプ (右上の(?)アイコン) を参照してください。', + 'export_data_all_transactions' => 'すべての取引をエクスポート', + 'export_data_advanced_expl' => 'より高度、または特定のエクスポートが必要な場合、コンソールコマンド php artisan help foreflily-ii:export-data の使用方法のヘルプを参照してください。', // attachments - 'nr_of_attachments' => '1個の添付ファイル|:count 個の添付ファイル', - 'attachments' => '添付ファイル', - 'edit_attachment' => '添付ファイル「:name」の編集', - 'update_attachment' => '添付ファイルを更新', - 'delete_attachment' => '添付ファイル「:name」の削除', - 'attachment_deleted' => '添付ファイル「:name」を削除しました', - 'liabilities_deleted' => '債務「:name」を削除しました', - 'attachment_updated' => '添付ファイル「:name」を更新しました', - 'upload_max_file_size' => '最大ファイルサイズ: :size', - 'list_all_attachments' => 'すべての添付ファイルのリスト', + 'nr_of_attachments' => '1個の添付ファイル|:count 個の添付ファイル', + 'attachments' => '添付ファイル', + 'edit_attachment' => '添付ファイル「:name」の編集', + 'update_attachment' => '添付ファイルを更新', + 'delete_attachment' => '添付ファイル「:name」の削除', + 'attachment_deleted' => '添付ファイル「:name」を削除しました', + 'liabilities_deleted' => '債務「:name」を削除しました', + 'attachment_updated' => '添付ファイル「:name」を更新しました', + 'upload_max_file_size' => '最大ファイルサイズ: :size', + 'list_all_attachments' => 'すべての添付ファイルのリスト', // transaction index - 'title_expenses' => '支出', - 'title_withdrawal' => '支出', - 'title_revenue' => '収益 / 収入', - 'title_deposit' => '収益 / 収入', - 'title_transfer' => '送金', - 'title_transfers' => '送金', - 'submission_options' => '送信オプション', - 'apply_rules_checkbox' => 'ルールを適用', - 'fire_webhooks_checkbox' => 'Webhookを実行', + 'is_reconciled_fields_dropped' => 'この取引は照合済みのため、口座や金額を更新することはできません。', + 'title_expenses' => '支出', + 'title_withdrawal' => '支出', + 'title_revenue' => '収益 / 収入', + 'title_deposit' => '収益 / 収入', + 'title_transfer' => '送金', + 'title_transfers' => '送金', + 'submission_options' => '送信オプション', + 'apply_rules_checkbox' => 'ルールを適用', + 'fire_webhooks_checkbox' => 'Webhookを実行', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'この取引はすでに出金です', - 'convert_is_already_type_Deposit' => 'この取引はすでに入金です', - 'convert_is_already_type_Transfer' => 'この取引はすでに送金です', - 'convert_to_Withdrawal' => '「:description」を出金に変換', - 'convert_to_Deposit' => '「:description」を入金に変換', - 'convert_to_Transfer' => '「:description」を送金に変換', - 'convert_options_WithdrawalDeposit' => '出金を入金に変換', - 'convert_options_WithdrawalTransfer' => '出金を送金に変換', - 'convert_options_DepositTransfer' => '入金を送金に変換', - 'convert_options_DepositWithdrawal' => '入金を出金に変換', - 'convert_options_TransferWithdrawal' => '送金を出金に変換', - 'convert_options_TransferDeposit' => '送金を入金に変換', - 'convert_Withdrawal_to_deposit' => 'この出金を入金に変換', - 'convert_Withdrawal_to_transfer' => 'この出金を送金に変換', - 'convert_Deposit_to_withdrawal' => 'この入金を出金に変換', - 'convert_Deposit_to_transfer' => 'この入金を送金に変換', - 'convert_Transfer_to_deposit' => 'この送金を入金に変換', - 'convert_Transfer_to_withdrawal' => 'この送金を出金に変換', - 'convert_please_set_revenue_source' => 'お金が入ってくる収入口座を選んでください。', - 'convert_please_set_asset_destination' => 'お金が入る資産口座を選んでください。', - 'convert_please_set_expense_destination' => 'お金が出ていく支出口座を選んでください。', - 'convert_please_set_asset_source' => 'お金が入ってくる資産口座を選んでください。', - 'convert_expl_w_d' => '出金を入金に変換すると、お金は出金ではなく表示された預け入れ口座への入金となります。 |出金を入金に変換すると、お金は出金ではなく表示された預け入れ口座への入金となります。', - 'convert_expl_w_t' => '出金を送金に変換すると、お金は元の支出口座での支出ではなく、引き出し口座から他の資産口座または債務口座への送金となります。|出金を送金に変換すると、お金は元の支出口座での支出ではなく、引き出し口座から他の資産口座または債務口座への送金となります。', - 'convert_expl_d_w' => '入金を出金に変換すると、お金は入金ではなく、表示された引き出し口座からの出金となります。 |入金を出金に変換すると、お金は入金ではなく、表示された引き出し口座からの出金となります。', - 'convert_expl_d_t' => '入金を送金に変換すると、お金は資産口座や債務口座から、一覧にある預け入れ口座への入金となります。|入金を送金に変換すると、お金は資産口座や債務口座から、一覧にある預け入れ口座への入金となります。', - 'convert_expl_t_w' => '送金を出金に変換すると、預け入れ口座への送金ではなく、ここで設定した預け入れ口座での支出となります。|送金を出金に変換すると、預け入れ口座への送金ではなく、ここで設定した相手先口座での支出となります。', - 'convert_expl_t_d' => '送金を入金に変換すると、預け入れ口座への送金ではなく、ここで設定した預け入れ口座への入金となります。|送金を入金に変換すると、預け入れ口座への送金ではなく、ここで設定した預け入れ口座への入金となります。', - 'convert_select_sources' => '変換を完了するには、以下で新しい引き出し口座を設定してください。 |変換を完了するには、以下で新しい引き出し口座を設定してください。', - 'convert_select_destinations' => '変換を完了するには、以下で新しい預け入れ口座を設定してください。 |変換を完了するには、以下で新しい預け入れ口座を設定してください。', - 'converted_to_Withdrawal' => '取引は引き出しに変換されました', - 'converted_to_Deposit' => '取引は入金に変換されました', - 'converted_to_Transfer' => '取引は送金に変換されました', - 'invalid_convert_selection' => '選択した口座は既にこの取引で使用されているか、存在しません。', - 'source_or_dest_invalid' => '正しい取引詳細が見つかりません。変換はできません。', - 'convert_to_withdrawal' => '出金に変換', - 'convert_to_deposit' => '入金に変換', - 'convert_to_transfer' => '送金に変換', + 'convert_is_already_type_Withdrawal' => 'この取引はすでに出金です', + 'convert_is_already_type_Deposit' => 'この取引はすでに入金です', + 'convert_is_already_type_Transfer' => 'この取引はすでに送金です', + 'convert_to_Withdrawal' => '「:description」を出金に変換', + 'convert_to_Deposit' => '「:description」を入金に変換', + 'convert_to_Transfer' => '「:description」を送金に変換', + 'convert_options_WithdrawalDeposit' => '出金を入金に変換', + 'convert_options_WithdrawalTransfer' => '出金を送金に変換', + 'convert_options_DepositTransfer' => '入金を送金に変換', + 'convert_options_DepositWithdrawal' => '入金を出金に変換', + 'convert_options_TransferWithdrawal' => '送金を出金に変換', + 'convert_options_TransferDeposit' => '送金を入金に変換', + 'convert_Withdrawal_to_deposit' => 'この出金を入金に変換', + 'convert_Withdrawal_to_transfer' => 'この出金を送金に変換', + 'convert_Deposit_to_withdrawal' => 'この入金を出金に変換', + 'convert_Deposit_to_transfer' => 'この入金を送金に変換', + 'convert_Transfer_to_deposit' => 'この送金を入金に変換', + 'convert_Transfer_to_withdrawal' => 'この送金を出金に変換', + 'convert_please_set_revenue_source' => 'お金が入ってくる収入口座を選んでください。', + 'convert_please_set_asset_destination' => 'お金が入る資産口座を選んでください。', + 'convert_please_set_expense_destination' => 'お金が出ていく支出口座を選んでください。', + 'convert_please_set_asset_source' => 'お金が入ってくる資産口座を選んでください。', + 'convert_expl_w_d' => '出金を入金に変換すると、お金は出金ではなく表示された預け入れ口座への入金となります。 |出金を入金に変換すると、お金は出金ではなく表示された預け入れ口座への入金となります。', + 'convert_expl_w_t' => '出金を送金に変換すると、お金は元の支出口座での支出ではなく、引き出し口座から他の資産口座または債務口座への送金となります。|出金を送金に変換すると、お金は元の支出口座での支出ではなく、引き出し口座から他の資産口座または債務口座への送金となります。', + 'convert_expl_d_w' => '入金を出金に変換すると、お金は入金ではなく、表示された引き出し口座からの出金となります。 |入金を出金に変換すると、お金は入金ではなく、表示された引き出し口座からの出金となります。', + 'convert_expl_d_t' => '入金を送金に変換すると、お金は資産口座や債務口座から、一覧にある預け入れ口座への入金となります。|入金を送金に変換すると、お金は資産口座や債務口座から、一覧にある預け入れ口座への入金となります。', + 'convert_expl_t_w' => '送金を出金に変換すると、預け入れ口座への送金ではなく、ここで設定した預け入れ口座での支出となります。|送金を出金に変換すると、預け入れ口座への送金ではなく、ここで設定した相手先口座での支出となります。', + 'convert_expl_t_d' => '送金を入金に変換すると、預け入れ口座への送金ではなく、ここで設定した預け入れ口座への入金となります。|送金を入金に変換すると、預け入れ口座への送金ではなく、ここで設定した預け入れ口座への入金となります。', + 'convert_select_sources' => '変換を完了するには、以下で新しい引き出し口座を設定してください。 |変換を完了するには、以下で新しい引き出し口座を設定してください。', + 'convert_select_destinations' => '変換を完了するには、以下で新しい預け入れ口座を設定してください。 |変換を完了するには、以下で新しい預け入れ口座を設定してください。', + 'converted_to_Withdrawal' => '取引は引き出しに変換されました', + 'converted_to_Deposit' => '取引は入金に変換されました', + 'converted_to_Transfer' => '取引は送金に変換されました', + 'invalid_convert_selection' => '選択した口座は既にこの取引で使用されているか、存在しません。', + 'source_or_dest_invalid' => '正しい取引詳細が見つかりません。変換はできません。', + 'convert_to_withdrawal' => '出金に変換', + 'convert_to_deposit' => '入金に変換', + 'convert_to_transfer' => '送金に変換', // create new stuff: - 'create_new_withdrawal' => '新規出金を作成', - 'create_new_deposit' => '新規入金を作成', - 'create_new_transfer' => '新規送金を作成', - 'create_new_asset' => '新しい資産口座を作成', - 'create_new_liabilities' => '新しい責任を作成', - 'create_new_expense' => '新しい支出口座を作成', - 'create_new_revenue' => '新しい収入口座を作成', - 'create_new_piggy_bank' => '新規貯金箱の作成', - 'create_new_bill' => '新しい請求を作成', - 'create_new_subscription' => '新しいサブスクリプションを作成', - 'create_new_rule' => '新しいルールを作成', + 'create_new_withdrawal' => '新規出金を作成', + 'create_new_deposit' => '新規入金を作成', + 'create_new_transfer' => '新規送金を作成', + 'create_new_asset' => '新しい資産口座を作成', + 'create_new_liabilities' => '新しい責任を作成', + 'create_new_expense' => '新しい支出口座を作成', + 'create_new_revenue' => '新しい収入口座を作成', + 'create_new_piggy_bank' => '新規貯金箱の作成', + 'create_new_bill' => '新しい請求を作成', + 'create_new_subscription' => '新しいサブスクリプションを作成', + 'create_new_rule' => '新しいルールを作成', // currencies: - 'create_currency' => '新しい通貨を作成', - 'store_currency' => '新しい通貨を保存', - 'update_currency' => '通貨を更新', - 'new_default_currency' => ':name はデフォルト通貨です', - 'cannot_delete_currency' => ':nameは使用されているため削除できません。', - 'cannot_delete_fallback_currency' => ':name はシステムのフォールバック通貨であり、削除できません。', - 'cannot_disable_currency_journals' => '取引がまだ使用しているため、:name を無効にできません。', - 'cannot_disable_currency_last_left' => '唯一の有効な通貨であるため、:name を無効にできません。', - 'cannot_disable_currency_account_meta' => '資産口座で使用されているため、:name を無効にできません。', - 'cannot_disable_currency_bills' => '請求で使用されているため、:name を無効にできません。', - 'cannot_disable_currency_recurring' => '定期的な取引で使用されているため、:name を無効にできません。', - 'cannot_disable_currency_available_budgets' => '有効な予算で使用されているため、:name を無効にできません。', - 'cannot_disable_currency_budget_limits' => '予算制限で使用されているため、:name を無効にできません。', - 'cannot_disable_currency_current_default' => '現在のデフォルト通貨であるため、:name を無効にできません。', - 'cannot_disable_currency_system_fallback' => 'システムのデフォルト通貨であるため、:name を無効にできません。', - 'disable_EUR_side_effects' => 'Euro はシステムの緊急フォールバック通貨です。無効にすると意図しない副作用が発生し、保証できません。', - 'deleted_currency' => '通貨「:name」を削除しました', - 'created_currency' => '通貨「:name」が作成されました', - 'could_not_store_currency' => '新しい通貨を保存できませんでした。', - 'updated_currency' => '通貨「:name」が更新されました', - 'ask_site_owner' => '通貨の追加、削除、編集を:ownerに依頼してください。', - 'currencies_intro' => 'Firefly III はさまざまな通貨をサポートしており、ここで設定および有効にできます。', - 'make_default_currency' => 'デフォルトにする', - 'default_currency' => 'デフォルト', - 'currency_is_disabled' => '無効', - 'enable_currency' => '有効', - 'disable_currency' => '無効', - 'currencies_default_disabled' => 'これらの通貨のほとんどはデフォルトで無効になっています。使用するには、まず有効にする必要があります。', - 'currency_is_now_enabled' => '通貨「:name」が有効になりました', - 'currency_is_now_disabled' => '通貨「:name」は無効になりました', + 'create_currency' => '新しい通貨を作成', + 'store_currency' => '新しい通貨を保存', + 'update_currency' => '通貨を更新', + 'new_default_currency' => '「:name」はデフォルト通貨です。', + 'default_currency_failed' => '「:name」をデフォルト通貨にすることができませんでした。ログを確認してください。', + 'cannot_delete_currency' => ':nameは使用されているため削除できません。', + 'cannot_delete_fallback_currency' => ':name はシステムのフォールバック通貨であり、削除できません。', + 'cannot_disable_currency_journals' => '取引がまだ使用しているため、:name を無効にできません。', + 'cannot_disable_currency_last_left' => '唯一の有効な通貨であるため、:name を無効にできません。', + 'cannot_disable_currency_account_meta' => '資産口座で使用されているため、:name を無効にできません。', + 'cannot_disable_currency_bills' => '請求で使用されているため、:name を無効にできません。', + 'cannot_disable_currency_recurring' => '定期的な取引で使用されているため、:name を無効にできません。', + 'cannot_disable_currency_available_budgets' => '有効な予算で使用されているため、:name を無効にできません。', + 'cannot_disable_currency_budget_limits' => '予算制限で使用されているため、:name を無効にできません。', + 'cannot_disable_currency_current_default' => '現在のデフォルト通貨であるため、:name を無効にできません。', + 'cannot_disable_currency_system_fallback' => 'システムのデフォルト通貨であるため、:name を無効にできません。', + 'disable_EUR_side_effects' => 'Euro はシステムの緊急フォールバック通貨です。無効にすると意図しない副作用が発生し、保証できません。', + 'deleted_currency' => '通貨「:name」を削除しました', + 'created_currency' => '通貨「:name」が作成されました', + 'could_not_store_currency' => '新しい通貨を保存できませんでした。', + 'updated_currency' => '通貨「:name」が更新されました', + 'ask_site_owner' => '通貨の追加、削除、編集を:ownerに依頼してください。', + 'currencies_intro' => 'Firefly III はさまざまな通貨をサポートしており、ここで設定および有効にできます。', + 'make_default_currency' => 'デフォルトにする', + 'default_currency' => 'デフォルト', + 'currency_is_disabled' => '無効', + 'enable_currency' => '有効', + 'disable_currency' => '無効', + 'currencies_default_disabled' => 'これらの通貨のほとんどはデフォルトで無効になっています。使用するには、まず有効にする必要があります。', + 'currency_is_now_enabled' => '通貨「:name」が有効になりました', + 'could_not_enable_currency' => '通貨「:name」を有効にできませんでした。ログを確認してください。', + 'currency_is_now_disabled' => '通貨「:name」は無効になりました', + 'could_not_disable_currency' => '通貨「:name」を無効にできませんでした。使用中ではありませんか?', // forms: - 'mandatoryFields' => '必須項目', - 'optionalFields' => '任意項目', - 'options' => 'オプション', + 'mandatoryFields' => '必須項目', + 'optionalFields' => '任意項目', + 'options' => 'オプション', // budgets: - 'daily_budgets' => '毎日の予算', - 'weekly_budgets' => '毎週の予算', - 'monthly_budgets' => '毎月の予算', - 'quarterly_budgets' => '四半期の予算', - 'half_year_budgets' => '半年間の予算', - 'yearly_budgets' => '年間の予算', - 'other_budgets' => '任意の期間の予算', - 'budget_limit_not_in_range' => 'この金額は :start から :end: まで適用されます:', - 'total_available_budget' => '利用可能な予算の合計 (:start から :end まで)', - 'total_available_budget_in_currency' => ':currencyで利用可能な予算の合計', - 'see_below' => '下を参照', - 'create_new_budget' => '新しい予算を作成する', - 'store_new_budget' => '新しい予算を保存', - 'stored_new_budget' => '新しい予算「:name」を保存しました', - 'available_between' => ':start から :end までの利用可能額', - 'transactionsWithoutBudget' => '予算外の支出', - 'transactions_no_budget' => ':start から :end までの予算外の支出', - 'spent_between' => ':start から :end までの支出済み', - 'set_available_amount' => '利用可能な金額を設定', - 'update_available_amount' => '利用可能な金額を更新', - 'ab_basic_modal_explain' => 'このフォームで、指定期間でいくらの予算(総額、:currency)になるかを示します。', - 'createBudget' => '新しい予算', - 'invalid_currency' => 'これは無効な通貨です', - 'invalid_amount' => '金額を入力してください', - 'set_ab' => '利用可能な予算額が設定されました', - 'updated_ab' => '利用可能な予算額が更新されました', - 'deleted_ab' => '利用可能な予算額が削除されました', - 'deleted_bl' => '予算額が削除されました', - 'alt_currency_ab_create' => '別の通貨で利用可能な予算を設定する', - 'bl_create_btn' => '予算を別の通貨で設定', - 'inactiveBudgets' => 'アクティブでない予算', - 'without_budget_between' => ':start から :end までの予算外の取引', - 'delete_budget' => '予算「:name」を削除する', - 'deleted_budget' => '予算「:name」を削除しました', - 'edit_budget' => '予算「:name」を編集', - 'updated_budget' => '予算「:name」を編集しました', - 'update_amount' => '金額を更新', - 'update_budget' => '予算を更新', - 'update_budget_amount_range' => ':start から :end までの利用可能な金額を更新する', - 'set_budget_limit_title' => ':start から :end の間の予算「:budget」の予算額を設定', - 'set_budget_limit' => '予算額を設定', - 'budget_period_navigator' => '期間ナビゲーター', - 'info_on_available_amount' => '利用可能額は?', - 'available_amount_indication' => 'これらの金額から、予算総額がどうなるか見込んでください。', - 'suggested' => '推奨', - 'average_between' => ':start から :end までの平均', - 'transferred_in' => '送金 (入)', - 'transferred_away' => '送金 (出)', - 'auto_budget_none' => '自動予算なし', - 'auto_budget_reset' => '期間ごとに定額を設定する', - 'auto_budget_rollover' => '期間ごとに金額を追加', - 'auto_budget_adjusted' => '期間ごとに金額を追加し過剰な支出のために補正します', - 'auto_budget_period_daily' => '毎日', - 'auto_budget_period_weekly' => '毎週', - 'auto_budget_period_monthly' => '毎月', - 'auto_budget_period_quarterly' => '四半期ごと', - 'auto_budget_period_half_year' => '半年ごと', - 'auto_budget_period_yearly' => '年ごと', - 'auto_budget_help' => 'この機能の詳細については、ヘルプを参照してください。右上の (?) アイコンをクリックします。', - 'auto_budget_reset_icon' => 'この予算は定期的に設定されます', - 'auto_budget_rollover_icon' => '予算額は定期的に増加します', - 'auto_budget_adjusted_icon' => '予算額は定期的に増加し過剰な支出を補正します', - 'remove_budgeted_amount' => ':currency で予算を削除する', + 'daily_budgets' => '毎日の予算', + 'weekly_budgets' => '毎週の予算', + 'monthly_budgets' => '毎月の予算', + 'quarterly_budgets' => '四半期の予算', + 'half_year_budgets' => '半年間の予算', + 'yearly_budgets' => '年間の予算', + 'other_budgets' => '任意の期間の予算', + 'budget_limit_not_in_range' => 'この金額は :start から :end: まで適用されます:', + 'total_available_budget' => '利用可能な予算の合計 (:start から :end まで)', + 'total_available_budget_in_currency' => ':currencyで利用可能な予算の合計', + 'see_below' => '下を参照', + 'create_new_budget' => '新しい予算を作成する', + 'store_new_budget' => '新しい予算を保存', + 'stored_new_budget' => '新しい予算「:name」を保存しました', + 'available_between' => ':start から :end までの利用可能額', + 'transactionsWithoutBudget' => '予算外の支出', + 'transactions_no_budget' => ':start から :end までの予算外の支出', + 'spent_between' => ':start から :end までの支出済み', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => '利用可能な金額を設定', + 'update_available_amount' => '利用可能な金額を更新', + 'ab_basic_modal_explain' => 'このフォームで、指定期間でいくらの予算(総額、:currency)になるかを示します。', + 'createBudget' => '新しい予算', + 'invalid_currency' => 'これは無効な通貨です', + 'invalid_amount' => '金額を入力してください', + 'set_ab' => '利用可能な予算額が設定されました', + 'updated_ab' => '利用可能な予算額が更新されました', + 'deleted_ab' => '利用可能な予算額が削除されました', + 'deleted_bl' => '予算額が削除されました', + 'alt_currency_ab_create' => '別の通貨で利用可能な予算を設定する', + 'bl_create_btn' => '予算を別の通貨で設定', + 'inactiveBudgets' => 'アクティブでない予算', + 'without_budget_between' => ':start から :end までの予算外の取引', + 'delete_budget' => '予算「:name」を削除する', + 'deleted_budget' => '予算「:name」を削除しました', + 'edit_budget' => '予算「:name」を編集', + 'updated_budget' => '予算「:name」を編集しました', + 'update_amount' => '金額を更新', + 'update_budget' => '予算を更新', + 'update_budget_amount_range' => ':start から :end までの利用可能な金額を更新する', + 'set_budget_limit_title' => ':start から :end の間の予算「:budget」の予算額を設定', + 'set_budget_limit' => '予算額を設定', + 'budget_period_navigator' => '期間ナビゲーター', + 'info_on_available_amount' => '利用可能額は?', + 'available_amount_indication' => 'これらの金額から、予算総額がどうなるか見込んでください。', + 'suggested' => '推奨', + 'average_between' => ':start から :end までの平均', + 'transferred_in' => '送金 (入)', + 'transferred_away' => '送金 (出)', + 'auto_budget_none' => '自動予算なし', + 'auto_budget_reset' => '期間ごとに定額を設定する', + 'auto_budget_rollover' => '期間ごとに金額を追加', + 'auto_budget_adjusted' => '期間ごとに金額を追加し過剰な支出のために補正します', + 'auto_budget_period_daily' => '毎日', + 'auto_budget_period_weekly' => '毎週', + 'auto_budget_period_monthly' => '毎月', + 'auto_budget_period_quarterly' => '四半期ごと', + 'auto_budget_period_half_year' => '半年ごと', + 'auto_budget_period_yearly' => '年ごと', + 'auto_budget_help' => 'この機能の詳細については、ヘルプを参照してください。右上の (?) アイコンをクリックします。', + 'auto_budget_reset_icon' => 'この予算は定期的に設定されます', + 'auto_budget_rollover_icon' => '予算額は定期的に増加します', + 'auto_budget_adjusted_icon' => '予算額は定期的に増加し過剰な支出を補正します', + 'remove_budgeted_amount' => ':currency で予算を削除する', // bills: - 'subscription' => 'サブスクリプション', - 'not_expected_period' => 'この期間には予定なし', - 'subscriptions_in_group' => 'グループ「%{title}」のサブスクリプション', - 'subscr_expected_x_times' => 'この期間に %{amount} %{times} 回の支払いを予定', - 'not_or_not_yet' => '(まだ) なし', - 'visit_bill' => 'Firefly IIIの請求「:name」を開く', - 'match_between_amounts' => '請求は :low から :high の間の取引に適合します。', - 'running_again_loss' => '以前にこの請求にリンクされた取引は、ルールに適合しない場合、リンクを失う可能性があります。', - 'bill_related_rules' => 'この請求に関連するルール', - 'repeats' => '繰り返し', - 'bill_end_date_help' => 'オプション項目です。請求はこの日付に終了する予定です。', - 'bill_extension_date_help' => 'オプション項目です。請求はこの日付前に延長(またはキャンセル)する必要があります。', - 'bill_end_index_line' => 'この請求は :date に終わる', - 'bill_extension_index_line' => 'この請求は延長されるか :date にキャンセルされる', - 'connected_journals' => '接続した取引', - 'auto_match_on' => 'Firefly III によって自動的に適合', - 'auto_match_off' => 'Firefly III によって自動的に適合しない', - 'next_expected_match' => '次のマッチ予測', - 'delete_bill' => '請求「:name」を削除', - 'deleted_bill' => '請求「:name」を削除しました', - 'edit_bill' => '請求「:name」を編集', - 'more' => 'もっと見る', - 'rescan_old' => 'すべての取引にルールを再度実行する', - 'update_bill' => '請求を更新', - 'updated_bill' => '請求「:name」を更新しました', - 'store_new_bill' => '新しい請求を保存', - 'stored_new_bill' => '新しい請求「:name」を保存しました', - 'cannot_scan_inactive_bill' => '無効な請求はスキャンされません。', - 'rescanned_bill' => '再スキャンし、:count件の取引を請求にリンクしました。|再スキャンし、:count件の取引を請求にリンクしました。', - 'average_bill_amount_year' => '平均請求額 (:year)', - 'average_bill_amount_overall' => '平均請求額 (全体)', - 'bill_is_active' => '請求は有効', - 'bill_expected_between' => ':start から :end までの予測', - 'bill_will_automatch' => '請求は自動的に一致する取引にリンクされます', - 'skips_over' => 'スキップする', - 'bill_store_error' => '新しい請求の保存中に予期しないエラーが発生しました。ログを確認してください', - 'list_inactive_rule' => '非アクティブなルール', - 'bill_edit_rules' => 'Firefly III は、この請求に関連するルールの編集を試みます。 ただし、このルールをあなたが編集している場合、Firefly III は何も変更しません。 Firefly III は、この請求に関連する :count 件のルールも編集します。 ただし、これらのルールをあなたが編集している場合、Firefly III は何も変更しません。', - 'bill_expected_date' => '予定日 :date', - 'bill_expected_date_js' => '予定日 {date}', - 'expected_amount' => '(予想される) 金額', - 'bill_paid_on' => '{date} に支払い済み', - 'bill_repeats_weekly' => '毎週の繰り返し', - 'bill_repeats_monthly' => '毎月の繰り返し', - 'bill_repeats_quarterly' => '四半期ごとの繰り返し', - 'bill_repeats_half-year' => '半年ごとの繰り返し', - 'bill_repeats_yearly' => '毎年の繰り返し', - 'bill_repeats_weekly_other' => '1週おきの繰り返し', - 'bill_repeats_monthly_other' => '1ヶ月おきの繰り返し', - 'bill_repeats_quarterly_other' => '四半期おきの繰り返し', - 'bill_repeats_half-year_other' => '毎年の繰り返し', - 'bill_repeats_yearly_other' => '一年おきの繰り返し', - 'bill_repeats_weekly_skip' => '{skip} 週おきの繰り返し', - 'bill_repeats_monthly_skip' => '{skip} ヶ月おきの繰り返し', - 'bill_repeats_quarterly_skip' => '{skip} 四半期おきの繰り返し', - 'bill_repeats_half-year_skip' => '{skip} 半期おきの繰り返し', - 'bill_repeats_yearly_skip' => '{skip} 年おきの繰り返し', - 'subscriptions' => '講読', - 'go_to_subscriptions' => 'サブスクリプションに移動', - 'forever' => '無期限', - 'extension_date_is' => '延長日は {date} です', + 'subscription' => 'サブスクリプション', + 'not_expected_period' => 'この期間には予定なし', + 'subscriptions_in_group' => 'グループ「%{title}」のサブスクリプション', + 'subscr_expected_x_times' => 'この期間に %{amount} %{times} 回の支払いを予定', + 'not_or_not_yet' => '(まだ) なし', + 'visit_bill' => 'Firefly IIIの請求「:name」を開く', + 'match_between_amounts' => '請求は :low から :high の間の取引に適合します。', + 'running_again_loss' => '以前にこの請求にリンクされた取引は、ルールに適合しない場合、リンクを失う可能性があります。', + 'bill_related_rules' => 'この請求に関連するルール', + 'repeats' => '繰り返し', + 'bill_end_date_help' => 'オプション項目です。請求はこの日付に終了する予定です。', + 'bill_extension_date_help' => 'オプション項目です。請求はこの日付前に延長(またはキャンセル)する必要があります。', + 'bill_end_index_line' => 'この請求は :date に終わる', + 'bill_extension_index_line' => 'この請求は延長されるか :date にキャンセルされる', + 'connected_journals' => '接続した取引', + 'auto_match_on' => 'Firefly III によって自動的に適合', + 'auto_match_off' => 'Firefly III によって自動的に適合しない', + 'next_expected_match' => '次のマッチ予測', + 'delete_bill' => '請求「:name」を削除', + 'deleted_bill' => '請求「:name」を削除しました', + 'edit_bill' => '請求「:name」を編集', + 'more' => 'もっと見る', + 'rescan_old' => 'すべての取引にルールを再度実行する', + 'update_bill' => '請求を更新', + 'updated_bill' => '請求「:name」を更新しました', + 'store_new_bill' => '新しい請求を保存', + 'stored_new_bill' => '新しい請求「:name」を保存しました', + 'cannot_scan_inactive_bill' => '無効な請求はスキャンされません。', + 'rescanned_bill' => '再スキャンし、:count件の取引を請求にリンクしました。|再スキャンし、:count件の取引を請求にリンクしました。', + 'average_bill_amount_year' => '平均請求額 (:year)', + 'average_bill_amount_overall' => '平均請求額 (全体)', + 'bill_is_active' => '請求は有効', + 'bill_expected_between' => ':start から :end までの予測', + 'bill_will_automatch' => '請求は自動的に一致する取引にリンクされます', + 'skips_over' => 'スキップする', + 'bill_store_error' => '新しい請求の保存中に予期しないエラーが発生しました。ログを確認してください', + 'list_inactive_rule' => '非アクティブなルール', + 'bill_edit_rules' => 'Firefly III は、この請求に関連するルールの編集を試みます。 ただし、このルールをあなたが編集している場合、Firefly III は何も変更しません。 Firefly III は、この請求に関連する :count 件のルールも編集します。 ただし、これらのルールをあなたが編集している場合、Firefly III は何も変更しません。', + 'bill_expected_date' => '予定日 :date', + 'bill_expected_date_js' => '予定日 {date}', + 'expected_amount' => '(予想される) 金額', + 'bill_paid_on' => '{date} に支払い済み', + 'bill_repeats_weekly' => '毎週の繰り返し', + 'bill_repeats_monthly' => '毎月の繰り返し', + 'bill_repeats_quarterly' => '四半期ごとの繰り返し', + 'bill_repeats_half-year' => '半年ごとの繰り返し', + 'bill_repeats_yearly' => '毎年の繰り返し', + 'bill_repeats_weekly_other' => '1週おきの繰り返し', + 'bill_repeats_monthly_other' => '1ヶ月おきの繰り返し', + 'bill_repeats_quarterly_other' => '四半期おきの繰り返し', + 'bill_repeats_half-year_other' => '毎年の繰り返し', + 'bill_repeats_yearly_other' => '一年おきの繰り返し', + 'bill_repeats_weekly_skip' => '{skip} 週おきの繰り返し', + 'bill_repeats_monthly_skip' => '{skip} ヶ月おきの繰り返し', + 'bill_repeats_quarterly_skip' => '{skip} 四半期おきの繰り返し', + 'bill_repeats_half-year_skip' => '{skip} 半期おきの繰り返し', + 'bill_repeats_yearly_skip' => '{skip} 年おきの繰り返し', + 'subscriptions' => '講読', + 'go_to_subscriptions' => 'サブスクリプションに移動', + 'forever' => '無期限', + 'extension_date_is' => '延長日は {date} です', // accounts: - 'i_am_owed_amount' => '債務額', - 'i_owe_amount' => '債務額', - 'inactive_account_link' => ':count 件の非アクティブ (アーカイブ済み) 口座があり、この別々のページで表示できます。|:count 件の非アクティブ (アーカイブ済み) 口座があり、この別々のページで表示できます。', - 'all_accounts_inactive' => 'これらは、アクティブでないアカウントです。', - 'active_account_link' => 'このリンクはアクティブな口座に戻ります。', - 'account_missing_transaction' => '口座 #:id「:name」は直接見ることはできません。Firefly にリダイレクト情報がありません。', - 'cc_monthly_payment_date_help' => '無視されますが、年と月を選択してください。月内の日のみ、意味があります。', - 'details_for_asset' => '資産口座「:name」の詳細', - 'details_for_expense' => '支出口座「:name」の詳細', - 'details_for_revenue' => '収入口座「:name」の詳細', - 'details_for_cash' => '現金口座「:name」の詳細', - 'store_new_asset_account' => '新しい口座を保存', - 'store_new_expense_account' => '新しい支出口座を保存', - 'store_new_revenue_account' => '新しい収入口座を保存', - 'edit_asset_account' => '資産口座「:name」を編集', - 'edit_expense_account' => '支出口座「:name」を編集', - 'edit_revenue_account' => '収入口座「:name」を編集', - 'delete_asset_account' => '資産口座「:name」を削除', - 'delete_expense_account' => '支出口座「:name」を削除', - 'delete_revenue_account' => '収入口座「:name」を削除', - 'delete_liabilities_account' => '債務「:name」を削除', - 'asset_deleted' => '資産口座「:name」を正常に削除しました', - 'account_deleted' => '口座「:name」を正常に削除しました', - 'expense_deleted' => '支出口座「:name」を正常に削除しました', - 'revenue_deleted' => '収入口座「:name」を正常に削除しました', - 'update_asset_account' => '資産口座を更新', - 'update_undefined_account' => '口座情報の更新', - 'update_liabilities_account' => '債務を更新', - 'update_expense_account' => '支出口座を編集する', - 'update_revenue_account' => '収入口座を更新', - 'make_new_asset_account' => '新しい資産口座を作成', - 'make_new_expense_account' => '新しい支出口座を作成', - 'make_new_revenue_account' => '新しい収入口座を作成', - 'make_new_liabilities_account' => '新しい債務を作成', - 'asset_accounts' => '資産口座', - 'undefined_accounts' => '口座', - 'asset_accounts_inactive' => '資産口座 (非アクティブ)', - 'expense_account' => '支出口座', - 'expense_accounts' => '支出口座', - 'expense_accounts_inactive' => '支出口座(非アクティブ)', - 'revenue_account' => '収入口座', - 'revenue_accounts' => '収入口座', - 'revenue_accounts_inactive' => '収入口座 (非アクティブ)', - 'cash_accounts' => '現金口座', - 'Cash account' => '現金口座', - 'liabilities_accounts' => '債務', - 'liabilities_accounts_inactive' => '負債 (非アクティブ)', - 'reconcile_account' => '口座「:account」を照合', - 'overview_of_reconcile_modal' => '照合の概要', - 'delete_reconciliation' => '照合を削除', - 'update_reconciliation' => '照合を更新', - 'amount_cannot_be_zero' => '金額はゼロにできません', - 'end_of_reconcile_period' => '照合期間の終了::period', - 'start_of_reconcile_period' => '照合期間の開始::period', - 'start_balance' => '開始残高', - 'end_balance' => '終了残高', - 'update_balance_dates_instruction' => '上記の金額と日付を銀行明細と一致させ、「照合を開始」を押してください', - 'select_transactions_instruction' => '銀行明細に表示される取引を選択します。', - 'select_range_and_balance' => 'まず、日付範囲と残高を確認します。次に「照合を開始」を押します', - 'date_change_instruction' => 'ここで日付の範囲を変更すると、すべての進行状況が失われます。', - 'update_selection' => '選択を更新', - 'store_reconcile' => '照合を保存', - 'reconciliation_transaction' => '取引の照合', - 'Reconciliation' => '照合', - 'reconciliation' => '照合', - 'reconcile_options' => '照合オプション', - 'reconcile_range' => '照合範囲', - 'start_reconcile' => '照合を開始', - 'cash_account_type' => '現金', - 'cash' => '現金', - 'cant_find_redirect_account' => 'Firefly III はあなたをリダイレクトしようとしましたが、できませんでした。申し訳ありません。インデックスに戻ります。', - 'account_type' => '口座種別', - 'save_transactions_by_moving' => '別の口座に移動してこの取引を保存します:|別の口座に移動してこれら取引を保存します:', - 'save_transactions_by_moving_js' => '取引がありません|この取引を別の口座に移し保存します。|これらの取引を別の口座に移し保存します。', - 'stored_new_account' => '新しい口座「:name」が保存されました!', - 'stored_new_account_js' => '新しい口座「{name}」が保存されました!', - 'updated_account' => '口座「:name」を更新しました', - 'updated_account_js' => '口座「{title}」を更新しました。', - 'credit_card_options' => 'クレジットカードオプション', - 'no_transactions_account' => '資産口座「:name」の取引は(この期間中)ありません。', - 'no_transactions_period' => '(この期間は) 取引がありません。', - 'no_data_for_chart' => 'このチャートを生成するのに十分な情報がまだありません。', - 'select_at_least_one_account' => '少なくとも1つ資産口座を選択してください', - 'select_at_least_one_category' => '少なくとも1つのカテゴリを選択してください', - 'select_at_least_one_budget' => '少なくとも1つの予算を選択してください', - 'select_at_least_one_tag' => '少なくとも 1 つのタグを選択してください', - 'select_at_least_one_expense' => '少なくとも1つの支出 / 収入口座の組み合わせを選択してください。組み合わせがない (リストが空の) 場合はこのレポートは利用できません。', - 'account_default_currency' => 'これはこの口座の既定通貨になります。', - 'reconcile_has_more' => 'Firefly III の元帳には、銀行が示すよりも多くの残高があります。 どう対処すべきかを選択し、「照合の確認」を押します。', - 'reconcile_has_less' => 'Firefly III の元帳には、銀行が示すよりも残高がありません。 どう対処すべきかを選択し、「照合の確認」を押します。', - 'reconcile_is_equal' => 'Firefly III 台帳と銀行取引明細が一致しています。何もする必要はありません。入力内容を確認するには「照合を確認」を押してください。', - 'create_pos_reconcile_transaction' => '選択した取引を消去し、この資産口座に:amount を加算訂正します。', - 'create_neg_reconcile_transaction' => '選択した取引を消去し、この資産口座に:amount を減算訂正します。', - 'reconcile_do_nothing' => '選択した取引を消去しますが、訂正はしません。', - 'reconcile_go_back' => '調整は後でいつでも編集または削除できます。', - 'must_be_asset_account' => '資産口座のみ照合できます', - 'reconciliation_stored' => '照合を保存しました', - 'reconciliation_error' => '取引は照合済みとしてマークされましたが、エラーにより訂正は保存されていません: :error。', - 'reconciliation_transaction_title' => '照合 (:from から :to)', - 'sum_of_reconciliation' => '照合の合計', - 'reconcile_this_account' => 'この口座を照合', - 'reconcile' => '照合', - 'show' => '表示', - 'confirm_reconciliation' => '照合を確認', - 'submitted_start_balance' => '送信された開始残高', - 'selected_transactions' => '選択した取引 (:count)', - 'already_cleared_transactions' => '取引が消去されました (:count)', - 'submitted_end_balance' => '送信された終了残高', - 'initial_balance_description' => '":account" の初期残高', - 'liability_credit_description' => '「:account」の債務信用', - 'interest_calc_' => '不明', - 'interest_calc_daily' => '1日あたり', - 'interest_calc_monthly' => '1ヶ月あたり', - 'interest_calc_yearly' => '1年あたり', - 'interest_calc_weekly' => '1週あたり', - 'interest_calc_half-year' => '半年あたり', - 'interest_calc_quarterly' => '四半期あたり', - 'initial_balance_account' => ':account の初期残高', - 'list_options' => 'リストオプション', + 'i_am_owed_amount' => '債務額', + 'i_owe_amount' => '債務額', + 'inactive_account_link' => ':count 件の非アクティブ (アーカイブ済み) 口座があり、この別々のページで表示できます。|:count 件の非アクティブ (アーカイブ済み) 口座があり、この別々のページで表示できます。', + 'all_accounts_inactive' => 'これらは、アクティブでないアカウントです。', + 'active_account_link' => 'このリンクはアクティブな口座に戻ります。', + 'account_missing_transaction' => '口座 #:id「:name」は直接見ることはできません。Firefly にリダイレクト情報がありません。', + 'cc_monthly_payment_date_help' => '無視されますが、年と月を選択してください。月内の日のみ、意味があります。', + 'details_for_asset' => '資産口座「:name」の詳細', + 'details_for_expense' => '支出口座「:name」の詳細', + 'details_for_revenue' => '収入口座「:name」の詳細', + 'details_for_cash' => '現金口座「:name」の詳細', + 'store_new_asset_account' => '新しい口座を保存', + 'store_new_expense_account' => '新しい支出口座を保存', + 'store_new_revenue_account' => '新しい収入口座を保存', + 'edit_asset_account' => '資産口座「:name」を編集', + 'edit_expense_account' => '支出口座「:name」を編集', + 'edit_revenue_account' => '収入口座「:name」を編集', + 'delete_asset_account' => '資産口座「:name」を削除', + 'delete_expense_account' => '支出口座「:name」を削除', + 'delete_revenue_account' => '収入口座「:name」を削除', + 'delete_liabilities_account' => '債務「:name」を削除', + 'asset_deleted' => '資産口座「:name」を正常に削除しました', + 'account_deleted' => '口座「:name」を正常に削除しました', + 'expense_deleted' => '支出口座「:name」を正常に削除しました', + 'revenue_deleted' => '収入口座「:name」を正常に削除しました', + 'update_asset_account' => '資産口座を更新', + 'update_undefined_account' => '口座情報の更新', + 'update_liabilities_account' => '債務を更新', + 'update_expense_account' => '支出口座を編集する', + 'update_revenue_account' => '収入口座を更新', + 'make_new_asset_account' => '新しい資産口座を作成', + 'make_new_expense_account' => '新しい支出口座を作成', + 'make_new_revenue_account' => '新しい収入口座を作成', + 'make_new_liabilities_account' => '新しい債務を作成', + 'asset_accounts' => '資産口座', + 'undefined_accounts' => '口座', + 'asset_accounts_inactive' => '資産口座 (非アクティブ)', + 'expense_account' => '支出口座', + 'expense_accounts' => '支出口座', + 'expense_accounts_inactive' => '支出口座(非アクティブ)', + 'revenue_account' => '収入口座', + 'revenue_accounts' => '収入口座', + 'revenue_accounts_inactive' => '収入口座 (非アクティブ)', + 'cash_accounts' => '現金口座', + 'Cash account' => '現金口座', + 'liabilities_accounts' => '債務', + 'liabilities_accounts_inactive' => '負債 (非アクティブ)', + 'reconcile_account' => '口座「:account」を照合', + 'overview_of_reconcile_modal' => '照合の概要', + 'delete_reconciliation' => '照合を削除', + 'update_reconciliation' => '照合を更新', + 'amount_cannot_be_zero' => '金額はゼロにできません', + 'end_of_reconcile_period' => '照合期間の終了::period', + 'start_of_reconcile_period' => '照合期間の開始::period', + 'start_balance' => '開始残高', + 'end_balance' => '終了残高', + 'update_balance_dates_instruction' => '上記の金額と日付を銀行明細と一致させ、「照合を開始」を押してください', + 'select_transactions_instruction' => '銀行明細に表示される取引を選択します。', + 'select_range_and_balance' => 'まず、日付範囲と残高を確認します。次に「照合を開始」を押します', + 'date_change_instruction' => 'ここで日付の範囲を変更すると、すべての進行状況が失われます。', + 'update_selection' => '選択を更新', + 'store_reconcile' => '照合を保存', + 'reconciliation_transaction' => '取引の照合', + 'Reconciliation' => '照合', + 'reconciliation' => '照合', + 'reconcile_options' => '照合オプション', + 'reconcile_range' => '照合範囲', + 'start_reconcile' => '照合を開始', + 'cash_account_type' => '現金', + 'cash' => '現金', + 'cant_find_redirect_account' => 'Firefly III はあなたをリダイレクトしようとしましたが、できませんでした。申し訳ありません。インデックスに戻ります。', + 'account_type' => '口座種別', + 'save_transactions_by_moving' => '別の口座に移動してこの取引を保存します:|別の口座に移動してこれら取引を保存します:', + 'save_transactions_by_moving_js' => '取引がありません|この取引を別の口座に移し保存します。|これらの取引を別の口座に移し保存します。', + 'stored_new_account' => '新しい口座「:name」が保存されました!', + 'stored_new_account_js' => '新しい口座「{name}」が保存されました!', + 'updated_account' => '口座「:name」を更新しました', + 'updated_account_js' => '口座「{title}」を更新しました。', + 'credit_card_options' => 'クレジットカードオプション', + 'no_transactions_account' => '資産口座「:name」の取引は(この期間中)ありません。', + 'no_transactions_period' => '(この期間は) 取引がありません。', + 'no_data_for_chart' => 'このチャートを生成するのに十分な情報がまだありません。', + 'select_at_least_one_account' => '少なくとも1つ資産口座を選択してください', + 'select_at_least_one_category' => '少なくとも1つのカテゴリを選択してください', + 'select_at_least_one_budget' => '少なくとも1つの予算を選択してください', + 'select_at_least_one_tag' => '少なくとも 1 つのタグを選択してください', + 'select_at_least_one_expense' => '少なくとも1つの支出 / 収入口座の組み合わせを選択してください。組み合わせがない (リストが空の) 場合はこのレポートは利用できません。', + 'account_default_currency' => 'これはこの口座の既定通貨になります。', + 'reconcile_has_more' => 'Firefly III の元帳には、銀行が示すよりも多くの残高があります。 どう対処すべきかを選択し、「照合の確認」を押します。', + 'reconcile_has_less' => 'Firefly III の元帳には、銀行が示すよりも残高がありません。 どう対処すべきかを選択し、「照合の確認」を押します。', + 'reconcile_is_equal' => 'Firefly III 台帳と銀行取引明細が一致しています。何もする必要はありません。入力内容を確認するには「照合を確認」を押してください。', + 'create_pos_reconcile_transaction' => '選択した取引を消去し、この資産口座に:amount を加算訂正します。', + 'create_neg_reconcile_transaction' => '選択した取引を消去し、この資産口座に:amount を減算訂正します。', + 'reconcile_do_nothing' => '選択した取引を消去しますが、訂正はしません。', + 'reconcile_go_back' => '調整は後でいつでも編集または削除できます。', + 'must_be_asset_account' => '資産口座のみ照合できます', + 'reconciliation_stored' => '照合を保存しました', + 'reconciliation_error' => '取引は照合済みとしてマークされましたが、エラーにより訂正は保存されていません: :error。', + 'reconciliation_transaction_title' => '照合 (:from から :to)', + 'sum_of_reconciliation' => '照合の合計', + 'reconcile_this_account' => 'この口座を照合', + 'reconcile' => '照合', + 'show' => '表示', + 'confirm_reconciliation' => '照合を確認', + 'submitted_start_balance' => '送信された開始残高', + 'selected_transactions' => '選択した取引 (:count)', + 'already_cleared_transactions' => '取引が消去されました (:count)', + 'submitted_end_balance' => '送信された終了残高', + 'initial_balance_description' => '":account" の初期残高', + 'liability_credit_description' => '「:account」の債務信用', + 'interest_calc_' => '不明', + 'interest_calc_daily' => '1日あたり', + 'interest_calc_monthly' => '1ヶ月あたり', + 'interest_calc_yearly' => '1年あたり', + 'interest_calc_weekly' => '1週あたり', + 'interest_calc_half-year' => '半年あたり', + 'interest_calc_quarterly' => '四半期あたり', + 'initial_balance_account' => ':account の初期残高', + 'list_options' => 'リストオプション', // categories: - 'new_category' => '新しいカテゴリ', - 'create_new_category' => '新しい出金を作成する', - 'without_category' => 'カテゴリなし', - 'update_category' => 'カテゴリを更新', - 'updated_category' => 'カテゴリ「:name」を更新しました', - 'categories' => 'カテゴリ', - 'edit_category' => 'カテゴリ「:name」を編集', - 'no_category' => '(カテゴリなし)', - 'unknown_category_plain' => 'カテゴリなし', - 'category' => 'カテゴリ', - 'delete_category' => 'カテゴリ":name" を削除する', - 'deleted_category' => 'カテゴリ「:name」を削除しました', - 'store_category' => '新しいカテゴリを保存', - 'stored_category' => '新しいカテゴリ「:name」を保存しました', - 'without_category_between' => ':start から :end までのカテゴリなし', + 'new_category' => '新しいカテゴリ', + 'create_new_category' => '新しい出金を作成する', + 'without_category' => 'カテゴリなし', + 'update_category' => 'カテゴリを更新', + 'updated_category' => 'カテゴリ「:name」を更新しました', + 'categories' => 'カテゴリ', + 'edit_category' => 'カテゴリ「:name」を編集', + 'no_category' => '(カテゴリなし)', + 'unknown_category_plain' => 'カテゴリなし', + 'category' => 'カテゴリ', + 'delete_category' => 'カテゴリ":name" を削除する', + 'deleted_category' => 'カテゴリ「:name」を削除しました', + 'store_category' => '新しいカテゴリを保存', + 'stored_category' => '新しいカテゴリ「:name」を保存しました', + 'without_category_between' => ':start から :end までのカテゴリなし', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => '出金を更新', - 'update_deposit' => '入金を更新', - 'update_transaction' => '取引を更新', - 'update_transfer' => '送金を更新', - 'updated_withdrawal' => '出金「:description」を更新しました', - 'updated_deposit' => '入金「:description」を更新しました', - 'updated_transfer' => '送金「:description」を更新しました', - 'no_changes_withdrawal' => '出金「:description」は変更されませんでした。', - 'no_changes_deposit' => '入金「:description」は変更されませんでした。', - 'no_changes_transfer' => '送金「:description」は変更されませんでした。', - 'delete_withdrawal' => '出金「:description」を削除', - 'delete_deposit' => '入金「:description」を削除', - 'delete_transfer' => '送金「:description」を削除', - 'deleted_withdrawal' => '出金「:description」を削除しました', - 'deleted_deposit' => '入金「:description」を削除しました', - 'deleted_transfer' => '送金「:description」を削除しました', - 'deleted_reconciliation' => '取引照合":description"を削除しました', - 'stored_journal' => '取引「:description」を作成しました', - 'stored_journal_no_descr' => '新しい取引を作成しました', - 'updated_journal_no_descr' => '取引を更新しました', - 'select_transactions' => '取引を選択', - 'rule_group_select_transactions' => '「:title」を取引に適用', - 'rule_select_transactions' => '「:title」を取引に適用', - 'stop_selection' => '選択した取引を停止', - 'reconcile_selected' => '照合', - 'mass_delete_journals' => '取引の一括削除', - 'mass_edit_journals' => '取引の一括編集', - 'mass_bulk_journals' => '取引を一括編集', - 'mass_bulk_journals_explain' => 'このフォームでは、以下の取引のプロパティを一括で変更できます。 表示されているパラメータを変更すると、表内のすべての取引が更新されます。', - 'part_of_split' => 'この取引は分割取引の一部です。 すべての分割を選択していない場合は、取引の半分だけの変更となってしまいます。', - 'bulk_set_new_values' => '新しい値を設定するには、以下に入力します。空のままにすると、すべての入力が空になります。 また、出金のみが予算を与えられることに注意してください。', - 'no_bulk_category' => 'カテゴリを更新しない', - 'no_bulk_budget' => '予算を更新しない', - 'no_bulk_tags' => 'タグを更新しない', - 'replace_with_these_tags' => 'これらのタグに置換', - 'append_these_tags' => 'これらのタグを追加', - 'mass_edit' => '選択したものを個別に編集', - 'bulk_edit' => '選択したものを一括編集', - 'mass_delete' => '選択したものを削除', - 'cannot_edit_other_fields' => '表示するスペースがないため、ここにある以外のフィールドを一括編集することはできません。 ここにない項目を編集するには、リンクから一つ一つ編集してください。', - 'cannot_change_amount_reconciled' => '照合された取引の金額を変更することはできません。', - 'no_budget' => '(予算なし)', - 'no_bill' => '(請求なし)', - 'account_per_budget' => '予算ごとの口座', - 'account_per_category' => 'カテゴリごとの口座', - 'create_new_object' => '作成', - 'empty' => '(空)', - 'all_other_budgets' => '(その他の予算すべて)', - 'all_other_accounts' => '(その他の口座すべて)', - 'expense_per_source_account' => '引き出し口座ごとの支出', - 'expense_per_destination_account' => '預け入れ口座ごとの支出', - 'income_per_destination_account' => '預け入れ口座ごとの収入', - 'spent_in_specific_category' => 'カテゴリ「:category」の支出', - 'earned_in_specific_category' => 'カテゴリ「:category」の収入', - 'spent_in_specific_tag' => 'タグ「:tag」の支出', - 'earned_in_specific_tag' => 'タグ「:tag」の収入', - 'income_per_source_account' => '引き出し口座ごとの収入', - 'average_spending_per_destination' => '預け入れ口座ごとの平均支出', - 'average_spending_per_source' => '引き出し口座あたりの平均支出', - 'average_earning_per_source' => '引き出し口座あたりの平均収益', - 'average_earning_per_destination' => '預け入れ口座あたりの平均収入', - 'account_per_tag' => 'タグごとの口座', - 'tag_report_expenses_listed_once' => '支出と収入は2重表示されません。取引に複数のタグがある場合は、そのタグの1つにのみ表示される可能性があります。 このリストはデータが欠けているように見えるかもしれませんが、金額は正しいです。', - 'double_report_expenses_charted_once' => '支出と収入は2重表示されません。取引に複数のタグがある場合は、そのタグの1つにのみ表示される可能性があります。 このリストはデータが欠けているように見えるかもしれませんが、金額は正しいです。', - 'tag_report_chart_single_tag' => 'このチャートは単一のタグを表します。 取引に複数のタグがある場合、ここに表示されるものは他のタグのチャートにも反映される可能性があります。', - 'tag' => 'タグ', - 'no_budget_squared' => '(予算なし)', - 'perm-delete-many' => '一度に多くのアイテムを削除すると非常に混乱する可能性があります。注意してください。 このページから分割取引の一部を削除することができますので、ご注意ください。', - 'mass_deleted_transactions_success' => ':count 件の取引を削除しました。|:count 件の取引を削除しました。', - 'mass_edited_transactions_success' => ':count 件の取引を更新しました。|:count 件の取引を更新しました。', - 'opt_group_' => '(口座種別なし)', - 'opt_group_no_account_type' => '(取引種別なし)', - 'opt_group_defaultAsset' => 'デフォルトの資産口座', - 'opt_group_savingAsset' => '貯蓄口座', - 'opt_group_sharedAsset' => '共有資産口座', - 'opt_group_ccAsset' => 'クレジットカード', - 'opt_group_cashWalletAsset' => '現金', - 'opt_group_expense_account' => '支出口座', - 'opt_group_revenue_account' => '収入口座', - 'opt_group_l_Loan' => '債務:ローン', - 'opt_group_cash_account' => '現金口座', - 'opt_group_l_Debt' => '債務:借金', - 'opt_group_l_Mortgage' => '債務:住宅ローン', - 'opt_group_l_Credit card' => '債務:クレジットカード', - 'notes' => '備考', - 'unknown_journal_error' => '取引を保存できませんでした。ログファイルを確認してください。', - 'attachment_not_found' => '添付ファイルが見つかりませんでした。', - 'journal_link_bill' => 'この取引は請求 :nameにリンクされています。関連を削除するには、チェックボックスのチェックを外します。別の請求書に関連付けるにはルールを使ってください。', - 'transaction_stored_link' => '取引 #{ID}「{title}」 が保存されました。', - 'transaction_new_stored_link' => '取引 #{ID} が保存されました。', - 'transaction_updated_link' => '取引 #{ID}「{title}」 が更新されました。', - 'transaction_updated_no_changes' => '取引 #{ID}「{title}」は変更されませんでした。', - 'first_split_decides' => '最初の分割がこの項目の値を決定します。', - 'first_split_overrules_source' => '最初の分割が引き出し口座を覆す可能性があります', - 'first_split_overrules_destination' => '最初の分割が預け入れ口座を覆す可能性があります', - 'spent_x_of_y' => '{amount} / {total} を支出しました', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => '照合を取り消す', + 'update_withdrawal' => '出金を更新', + 'update_deposit' => '入金を更新', + 'update_transaction' => '取引を更新', + 'update_transfer' => '送金を更新', + 'updated_withdrawal' => '出金「:description」を更新しました', + 'updated_deposit' => '入金「:description」を更新しました', + 'updated_transfer' => '送金「:description」を更新しました', + 'no_changes_withdrawal' => '出金「:description」は変更されませんでした。', + 'no_changes_deposit' => '入金「:description」は変更されませんでした。', + 'no_changes_transfer' => '送金「:description」は変更されませんでした。', + 'delete_withdrawal' => '出金「:description」を削除', + 'delete_deposit' => '入金「:description」を削除', + 'delete_transfer' => '送金「:description」を削除', + 'deleted_withdrawal' => '出金「:description」を削除しました', + 'deleted_deposit' => '入金「:description」を削除しました', + 'deleted_transfer' => '送金「:description」を削除しました', + 'deleted_reconciliation' => '取引照合":description"を削除しました', + 'stored_journal' => '取引「:description」を作成しました', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => '新しい取引を作成しました', + 'updated_journal_no_descr' => '取引を更新しました', + 'select_transactions' => '取引を選択', + 'rule_group_select_transactions' => '「:title」を取引に適用', + 'rule_select_transactions' => '「:title」を取引に適用', + 'stop_selection' => '選択した取引を停止', + 'reconcile_selected' => '照合', + 'mass_delete_journals' => '取引の一括削除', + 'mass_edit_journals' => '取引の一括編集', + 'mass_bulk_journals' => '取引を一括編集', + 'mass_bulk_journals_explain' => 'このフォームでは、以下の取引のプロパティを一括で変更できます。 表示されているパラメータを変更すると、表内のすべての取引が更新されます。', + 'part_of_split' => 'この取引は分割取引の一部です。 すべての分割を選択していない場合は、取引の半分だけの変更となってしまいます。', + 'bulk_set_new_values' => '新しい値を設定するには、以下に入力します。空のままにすると、すべての入力が空になります。 また、出金のみが予算を与えられることに注意してください。', + 'no_bulk_category' => 'カテゴリを更新しない', + 'no_bulk_budget' => '予算を更新しない', + 'no_bulk_tags' => 'タグを更新しない', + 'replace_with_these_tags' => 'これらのタグに置換', + 'append_these_tags' => 'これらのタグを追加', + 'mass_edit' => '選択したものを個別に編集', + 'bulk_edit' => '選択したものを一括編集', + 'mass_delete' => '選択したものを削除', + 'cannot_edit_other_fields' => '表示するスペースがないため、ここにある以外のフィールドを一括編集することはできません。 ここにない項目を編集するには、リンクから一つ一つ編集してください。', + 'cannot_change_amount_reconciled' => '照合された取引の金額を変更することはできません。', + 'no_budget' => '(予算なし)', + 'no_bill' => '(請求なし)', + 'account_per_budget' => '予算ごとの口座', + 'account_per_category' => 'カテゴリごとの口座', + 'create_new_object' => '作成', + 'empty' => '(空)', + 'all_other_budgets' => '(その他の予算すべて)', + 'all_other_accounts' => '(その他の口座すべて)', + 'expense_per_source_account' => '引き出し口座ごとの支出', + 'expense_per_destination_account' => '預け入れ口座ごとの支出', + 'income_per_destination_account' => '預け入れ口座ごとの収入', + 'spent_in_specific_category' => 'カテゴリ「:category」の支出', + 'earned_in_specific_category' => 'カテゴリ「:category」の収入', + 'spent_in_specific_tag' => 'タグ「:tag」の支出', + 'earned_in_specific_tag' => 'タグ「:tag」の収入', + 'income_per_source_account' => '引き出し口座ごとの収入', + 'average_spending_per_destination' => '預け入れ口座ごとの平均支出', + 'average_spending_per_source' => '引き出し口座あたりの平均支出', + 'average_earning_per_source' => '引き出し口座あたりの平均収益', + 'average_earning_per_destination' => '預け入れ口座あたりの平均収入', + 'account_per_tag' => 'タグごとの口座', + 'tag_report_expenses_listed_once' => '支出と収入は2重表示されません。取引に複数のタグがある場合は、そのタグの1つにのみ表示される可能性があります。 このリストはデータが欠けているように見えるかもしれませんが、金額は正しいです。', + 'double_report_expenses_charted_once' => '支出と収入は2重表示されません。取引に複数のタグがある場合は、そのタグの1つにのみ表示される可能性があります。 このリストはデータが欠けているように見えるかもしれませんが、金額は正しいです。', + 'tag_report_chart_single_tag' => 'このチャートは単一のタグを表します。 取引に複数のタグがある場合、ここに表示されるものは他のタグのチャートにも反映される可能性があります。', + 'tag' => 'タグ', + 'no_budget_squared' => '(予算なし)', + 'perm-delete-many' => '一度に多くのアイテムを削除すると非常に混乱する可能性があります。注意してください。 このページから分割取引の一部を削除することができますので、ご注意ください。', + 'mass_deleted_transactions_success' => ':count 件の取引を削除しました。|:count 件の取引を削除しました。', + 'mass_edited_transactions_success' => ':count 件の取引を更新しました。|:count 件の取引を更新しました。', + 'opt_group_' => '(口座種別なし)', + 'opt_group_no_account_type' => '(取引種別なし)', + 'opt_group_defaultAsset' => 'デフォルトの資産口座', + 'opt_group_savingAsset' => '貯蓄口座', + 'opt_group_sharedAsset' => '共有資産口座', + 'opt_group_ccAsset' => 'クレジットカード', + 'opt_group_cashWalletAsset' => '現金', + 'opt_group_expense_account' => '支出口座', + 'opt_group_revenue_account' => '収入口座', + 'opt_group_l_Loan' => '債務:ローン', + 'opt_group_cash_account' => '現金口座', + 'opt_group_l_Debt' => '債務:借金', + 'opt_group_l_Mortgage' => '債務:住宅ローン', + 'opt_group_l_Credit card' => '債務:クレジットカード', + 'notes' => '備考', + 'unknown_journal_error' => '取引を保存できませんでした。ログファイルを確認してください。', + 'attachment_not_found' => '添付ファイルが見つかりませんでした。', + 'journal_link_bill' => 'この取引は請求 :nameにリンクされています。関連を削除するには、チェックボックスのチェックを外します。別の請求書に関連付けるにはルールを使ってください。', + 'transaction_stored_link' => '取引 #{ID}「{title}」 が保存されました。', + 'transaction_new_stored_link' => '取引 #{ID} が保存されました。', + 'transaction_updated_link' => '取引 #{ID}「{title}」 が更新されました。', + 'transaction_updated_no_changes' => '取引 #{ID}「{title}」は変更されませんでした。', + 'first_split_decides' => '最初の分割がこの項目の値を決定します。', + 'first_split_overrules_source' => '最初の分割が引き出し口座を覆す可能性があります', + 'first_split_overrules_destination' => '最初の分割が預け入れ口座を覆す可能性があります', + 'spent_x_of_y' => '{amount} / {total} を支出しました', // new user: - 'welcome' => 'Firefly IIIへようこそ!', - 'submit' => '送信', - 'submission' => '送信', - 'submit_yes_really' => '送信 (私は自分が何をしているかわかっています)', - 'getting_started' => 'さあ、はじめよう', - 'to_get_started' => 'Firefly III が正常にインストールされました。 始めるには、銀行名とメイン口座の残高を入力してください。 複数の口座を持っている場合も心配いりません。後で追加することができます。Firefly III は始めるため、ひとつ必要としているだけです。', - 'savings_balance_text' => 'Firefly III は自動的に貯蓄口座を作成します。 初期状態では貯蓄口座にお金はありませんが、Firefly III に残高を入力すれば、それが保存されます。', - 'finish_up_new_user' => '以上です! 送信を押してください。Firefly IIIのホームに移動します。', - 'stored_new_accounts_new_user' => 'やった!新しい口座が保存されました。', - 'set_preferred_language' => 'Firefly III を別の言語で使用する場合は、こちらで設定してください。', - 'language' => '言語', - 'new_savings_account' => ':bank_name 貯蓄口座', - 'cash_wallet' => '現金', - 'currency_not_present' => '普段使用している通貨が表示されていなくても、心配いりません。オプション > 通貨 であなたの通貨を作成できます。', + 'welcome' => 'Firefly IIIへようこそ!', + 'submit' => '送信', + 'submission' => '送信', + 'submit_yes_really' => '送信 (私は自分が何をしているかわかっています)', + 'getting_started' => 'さあ、はじめよう', + 'to_get_started' => 'Firefly III が正常にインストールされました。 始めるには、銀行名とメイン口座の残高を入力してください。 複数の口座を持っている場合も心配いりません。後で追加することができます。Firefly III は始めるため、ひとつ必要としているだけです。', + 'savings_balance_text' => 'Firefly III は自動的に貯蓄口座を作成します。 初期状態では貯蓄口座にお金はありませんが、Firefly III に残高を入力すれば、それが保存されます。', + 'finish_up_new_user' => '以上です! 送信を押してください。Firefly IIIのホームに移動します。', + 'stored_new_accounts_new_user' => 'やった!新しい口座が保存されました。', + 'set_preferred_language' => 'Firefly III を別の言語で使用する場合は、こちらで設定してください。', + 'language' => '言語', + 'new_savings_account' => ':bank_name 貯蓄口座', + 'cash_wallet' => '現金', + 'currency_not_present' => '普段使用している通貨が表示されていなくても、心配いりません。オプション > 通貨 であなたの通貨を作成できます。', // home page: - 'transaction_table_description' => '取引表', - 'opposing_account' => '対する口座', - 'yourAccounts' => 'あなたの口座', - 'your_accounts' => '口座の概要', - 'category_overview' => 'カテゴリ概要', - 'expense_overview' => '支出口座の概要', - 'revenue_overview' => '収入口座の概要', - 'budgetsAndSpending' => '予算と出費', - 'budgets_and_spending' => '予算と出費', - 'go_to_budget' => '予算「{budget}」へ移動', - 'go_to_deposits' => '入金へ移動', - 'go_to_expenses' => '支出へ移動', - 'savings' => '貯蓄', - 'newWithdrawal' => '新しい支出', - 'newDeposit' => '新しい入金', - 'newTransfer' => '新しい送金', - 'bills_to_pay' => '未払いの請求', - 'per_day' => '1日あたり', - 'left_to_spend_per_day' => '1日あたりの残り支出額', - 'bills_paid' => '支払い済み請求', - 'custom_period' => 'カスタム期間', - 'reset_to_current' => '現在の期間にリセット', - 'select_period' => '期間を選択', + 'transaction_table_description' => '取引表', + 'opposing_account' => '対する口座', + 'yourAccounts' => 'あなたの口座', + 'your_accounts' => '口座の概要', + 'category_overview' => 'カテゴリ概要', + 'expense_overview' => '支出口座の概要', + 'revenue_overview' => '収入口座の概要', + 'budgetsAndSpending' => '予算と出費', + 'budgets_and_spending' => '予算と出費', + 'go_to_budget' => '予算「{budget}」へ移動', + 'go_to_deposits' => '入金へ移動', + 'go_to_expenses' => '支出へ移動', + 'savings' => '貯蓄', + 'newWithdrawal' => '新しい支出', + 'newDeposit' => '新しい入金', + 'newTransfer' => '新しい送金', + 'bills_to_pay' => '未払いの請求', + 'per_day' => '1日あたり', + 'left_to_spend_per_day' => '1日あたりの残り支出額', + 'bills_paid' => '支払い済み請求', + 'custom_period' => 'カスタム期間', + 'reset_to_current' => '現在の期間にリセット', + 'select_period' => '期間を選択', // menu and titles, should be recycled as often as possible: - 'currency' => '通貨', - 'preferences' => '設定', - 'logout' => 'ログアウト', - 'logout_other_sessions' => 'すべてのセッションからログアウト', - 'toggleNavigation' => 'ナビゲーションを切り替え', - 'searchPlaceholder' => '検索...', - 'version' => 'バージョン', - 'dashboard' => 'ダッシュボード', - 'income_and_expense' => '収入と支出', - 'all_money' => 'すべてのお金', - 'unknown_source_plain' => '不明な引き出し口座', - 'unknown_dest_plain' => '不明な預け入れ口座', - 'unknown_any_plain' => '不明な口座', - 'unknown_budget_plain' => '予算なし', - 'available_budget' => '有効な予算 ({currency})', - 'currencies' => '通貨', - 'activity' => '活動', - 'usage' => '使用状況', - 'accounts' => '口座', - 'Asset account' => '資産口座', - 'Default account' => '資産口座', - 'Expense account' => '支出口座', - 'Revenue account' => '収入口座', - 'Initial balance account' => '初期口座残高', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => '借金', - 'account_type_Loan' => 'ローン', - 'account_type_Mortgage' => '住宅ローン', - 'account_type_debt' => '借金', - 'account_type_loan' => 'ローン', - 'account_type_mortgage' => '住宅ローン', - 'account_type_Credit card' => 'クレジットカード', - 'credit_card_type_monthlyFull' => '全額毎月支払い', - 'liability_direction_credit' => 'この借金を負っている', - 'liability_direction_debit' => 'この借金を他の誰かに借りている', - 'liability_direction_credit_short' => 'この負債を負っている', - 'liability_direction_debit_short' => 'この負債を負う', - 'liability_direction__short' => '不明', - 'liability_direction_null_short' => '不明', - 'Liability credit' => '債務信用', - 'budgets' => '予算', - 'tags' => 'タグ', - 'reports' => 'レポート', - 'transactions' => '取引', - 'expenses' => '支出', - 'income' => '収益 / 収入', - 'transfers' => '送金', - 'moneyManagement' => '資金管理', - 'money_management' => '財テク', - 'tools' => 'ツール', - 'piggyBanks' => '貯金箱', - 'piggy_banks' => '貯金箱', - 'amount_x_of_y' => '{current} / {total}', - 'bills' => '請求', - 'withdrawal' => '出金', - 'opening_balance' => '開始残高', - 'deposit' => '入金', - 'account' => '口座', - 'transfer' => '送金', - 'Withdrawal' => '出金', - 'Deposit' => '預金', - 'Transfer' => '送金', - 'bill' => '請求', - 'yes' => 'はい', - 'no' => 'いいえ', - 'amount' => '金額', - 'overview' => '概要', - 'saveOnAccount' => '貯蓄口座', - 'unknown' => '不明', - 'monthly' => '毎月', - 'profile' => 'プロフィール', - 'errors' => 'エラー', - 'debt_start_date' => '借金の開始日', - 'debt_start_amount' => '借金の開始金額', - 'debt_start_amount_help' => 'この値は負の値に設定すべきです。詳細については、ヘルプページ (右上?アイコン) をご覧ください。', - 'interest_period_help' => 'この項目は表面的であり計算はされません。 銀行はとてもずるいので、Firefly III は正しく理解できません。', - 'store_new_liabilities_account' => '債務を保存', - 'edit_liabilities_account' => '貯金箱「:name」を編集', - 'financial_control' => '財務管理', - 'accounting' => '会計', - 'automation' => '自動化', - 'others' => 'その他', - 'classification' => '分類', - 'store_transaction' => '取引を保存', + 'currency' => '通貨', + 'preferences' => '設定', + 'logout' => 'ログアウト', + 'logout_other_sessions' => 'すべてのセッションからログアウト', + 'toggleNavigation' => 'ナビゲーションを切り替え', + 'searchPlaceholder' => '検索...', + 'version' => 'バージョン', + 'dashboard' => 'ダッシュボード', + 'income_and_expense' => '収入と支出', + 'all_money' => 'すべてのお金', + 'unknown_source_plain' => '不明な引き出し口座', + 'unknown_dest_plain' => '不明な預け入れ口座', + 'unknown_any_plain' => '不明な口座', + 'unknown_budget_plain' => '予算なし', + 'available_budget' => '有効な予算 ({currency})', + 'currencies' => '通貨', + 'activity' => '活動', + 'usage' => '使用状況', + 'accounts' => '口座', + 'Asset account' => '資産口座', + 'Default account' => '資産口座', + 'Expense account' => '支出口座', + 'Revenue account' => '収入口座', + 'Initial balance account' => '初期口座残高', + 'account_type_Asset account' => '資産口座', + 'account_type_Expense account' => '支出口座', + 'account_type_Revenue account' => '収入口座', + 'account_type_Debt' => '借金', + 'account_type_Loan' => 'ローン', + 'account_type_Mortgage' => '住宅ローン', + 'account_type_debt' => '借金', + 'account_type_loan' => 'ローン', + 'account_type_mortgage' => '住宅ローン', + 'account_type_Credit card' => 'クレジットカード', + 'credit_card_type_monthlyFull' => '全額毎月支払い', + 'liability_direction_credit' => 'この借金を負っている', + 'liability_direction_debit' => 'この借金を他の誰かに借りている', + 'liability_direction_credit_short' => 'この負債を負っている', + 'liability_direction_debit_short' => 'この負債を負う', + 'liability_direction__short' => '不明', + 'liability_direction_null_short' => '不明', + 'Liability credit' => '債務信用', + 'budgets' => '予算', + 'tags' => 'タグ', + 'reports' => 'レポート', + 'transactions' => '取引', + 'expenses' => '支出', + 'income' => '収益 / 収入', + 'transfers' => '送金', + 'moneyManagement' => '資金管理', + 'money_management' => '財テク', + 'tools' => 'ツール', + 'piggyBanks' => '貯金箱', + 'piggy_banks' => '貯金箱', + 'amount_x_of_y' => '{current} / {total}', + 'bills' => '請求', + 'withdrawal' => '出金', + 'opening_balance' => '開始残高', + 'deposit' => '入金', + 'account' => '口座', + 'transfer' => '送金', + 'Withdrawal' => '出金', + 'Deposit' => '預金', + 'Transfer' => '送金', + 'bill' => '請求', + 'yes' => 'はい', + 'no' => 'いいえ', + 'amount' => '金額', + 'overview' => '概要', + 'saveOnAccount' => '貯蓄口座', + 'unknown' => '不明', + 'monthly' => '毎月', + 'profile' => 'プロフィール', + 'errors' => 'エラー', + 'debt_start_date' => '借金の開始日', + 'debt_start_amount' => '借金の開始金額', + 'debt_start_amount_help' => 'この値は負の値に設定すべきです。詳細については、ヘルプページ (右上?アイコン) をご覧ください。', + 'interest_period_help' => 'この項目は表面的であり計算はされません。 銀行はとてもずるいので、Firefly III は正しく理解できません。', + 'store_new_liabilities_account' => '債務を保存', + 'edit_liabilities_account' => '貯金箱「:name」を編集', + 'financial_control' => '財務管理', + 'accounting' => '会計', + 'automation' => '自動化', + 'others' => 'その他', + 'classification' => '分類', + 'store_transaction' => '取引を保存', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => ':start から :end までのデフォルトの財務レポート', - 'report_audit' => ':start から :end までの取引履歴概要', - 'report_category' => ':start から :end までのカテゴリレポート', - 'report_double' => ':start から :end までの支出/収入口座のレポート', - 'report_budget' => ':start から :end までの予算報告', - 'report_tag' => ':start から :end までのタグレポート', - 'quick_link_reports' => 'クイックリンク', - 'quick_link_examples' => 'これらは手始めにちょうどよい例へのリンクです。 (?) ボタンからのヘルプページで、すべてのレポートと使用できるマジックワードについて確認してください。', - 'quick_link_default_report' => 'デフォルトの財務レポート', - 'quick_link_audit_report' => '取引履歴の概要', - 'report_this_month_quick' => '今月のすべての口座', - 'report_last_month_quick' => '先月のすべての口座', - 'report_this_year_quick' => '今年のすべての口座', - 'report_this_fiscal_year_quick' => '現在の会計年度のすべての口座', - 'report_all_time_quick' => '全期間のすべての口座', - 'reports_can_bookmark' => 'レポートはブックマークできることを忘れないでください。', - 'incomeVsExpenses' => '収入 vs 支出', - 'accountBalances' => '口座残高', - 'balanceStart' => '期間開始時の残高', - 'balanceEnd' => '期間終了時の残高', - 'splitByAccount' => '口座で分割', - 'coveredWithTags' => 'タグ', - 'leftInBudget' => '残り予算', - 'left_in_debt' => '負債額', - 'sumOfSums' => '合計', - 'noCategory' => '(カテゴリなし)', - 'notCharged' => 'まだ', - 'inactive' => '非アクティブ', - 'active' => '有効', - 'difference' => '差異', - 'money_flowing_in' => '入', - 'money_flowing_out' => '出', - 'topX' => '上位 :number 件', - 'show_full_list' => 'リスト全体を表示', - 'show_only_top' => '上位 :number 件のみ', - 'report_type' => 'レポート種別', - 'report_type_default' => 'デフォルトの財務レポート', - 'report_type_audit' => '取引履歴の概要 (監査)', - 'report_type_category' => 'カテゴリレポート', - 'report_type_budget' => '予算レポート', - 'report_type_tag' => 'タグレポート', - 'report_type_double' => '支出 / 収入口座レポート', - 'more_info_help' => 'レポート種別の詳細については、ヘルプページを参照してください。右上隅の (?) アイコンを押します。', - 'report_included_accounts' => '含める口座', - 'report_date_range' => '日付範囲', - 'report_preset_ranges' => '既定の範囲', - 'shared' => '共有中', - 'fiscal_year' => '会計年度', - 'income_entry' => ':start から :end までの口座「:name」からの収入', - 'expense_entry' => '口座「:name」への :start から :end までの支出', - 'category_entry' => 'カテゴリ「:name」の :start から :end までの支出と収入', - 'budget_spent_amount' => '予算「:budget」の :start から :end までの支出', - 'balance_amount' => ':start から :end までの口座「:account」から支払われる予算「:budget」の支出', - 'no_audit_activity' => ':start から :end までに、口座「:account_name」のアクティビティの記録はありません。', - 'audit_end_balance' => ':end 末での :account_name の口座残高: :balance', - 'reports_extra_options' => '追加オプション', - 'report_has_no_extra_options' => 'このレポートには追加オプションはありません', - 'reports_submit' => 'レポートを表示', - 'end_after_start_date' => 'レポートの終了日は開始日より後でなければいけません。', - 'select_category' => 'カテゴリを選択', - 'select_budget' => '予算を選択', - 'select_tag' => 'タグを選択', - 'income_per_category' => 'カテゴリ別収入', - 'expense_per_category' => 'カテゴリ別支出', - 'expense_per_budget' => '予算ごとの支出', - 'income_per_account' => '口座ごとの収入', - 'expense_per_account' => '口座ごとの支出', - 'expense_per_tag' => 'タグごとの支出', - 'income_per_tag' => 'タグごとの収入', - 'include_expense_not_in_budget' => '選択された予算に含まれない支出', - 'include_expense_not_in_account' => '選択された口座に含まれない支出', - 'include_expense_not_in_category' => '選択されたカテゴリに含まれない支出', - 'include_income_not_in_category' => '選択されたカテゴリに含まれない収入', - 'include_income_not_in_account' => '選択された口座に含まれない収入', - 'include_income_not_in_tags' => '選択されたタグに含まれない収入', - 'include_expense_not_in_tags' => '選択されたタグに含まれない支出', - 'everything_else' => 'その他すべて', - 'income_and_expenses' => '収入と支出', - 'spent_average' => '支出 (平均)', - 'income_average' => '収入 (平均)', - 'transaction_count' => '取引件数', - 'average_spending_per_account' => '口座ごとの平均支出', - 'average_income_per_account' => '口座ごとの平均収入', - 'total' => '合計', - 'description' => '概要', - 'sum_of_period' => '期間の合計', - 'average_in_period' => '期間の平均', - 'account_role_defaultAsset' => 'デフォルトの資産口座', - 'account_role_sharedAsset' => '共有資産口座', - 'account_role_savingAsset' => '貯蓄口座', - 'account_role_ccAsset' => 'クレジットカード', - 'account_role_cashWalletAsset' => '現金', - 'budget_chart_click' => 'チャートを見たい予算名をクリックしてください。', - 'category_chart_click' => 'チャートを見たいカテゴリ名をクリックしてください。', - 'in_out_accounts' => '組み合わせごとの収入と支出', - 'in_out_accounts_per_asset' => '(資産口座ごとの) 収入と支出', - 'in_out_per_category' => 'カテゴリごとの収入と支出', - 'out_per_budget' => '予算ごとの支出', - 'select_expense_revenue' => '支出 / 収益口座を選択', - 'multi_currency_report_sum' => 'このリストには複数の通貨をもつ口座が含まれているため、表示される合計は意味をなさないかもしれません。 レポートは常にデフォルトの通貨になります。', - 'sum_in_default_currency' => '合計は常にデフォルト通貨になります。', - 'net_filtered_prefs' => 'このチャートには「純資産に含める」オプションがチェックされていない口座が含まれることはありません。', + 'report_default' => ':start から :end までのデフォルトの財務レポート', + 'report_audit' => ':start から :end までの取引履歴概要', + 'report_category' => ':start から :end までのカテゴリレポート', + 'report_double' => ':start から :end までの支出/収入口座のレポート', + 'report_budget' => ':start から :end までの予算報告', + 'report_tag' => ':start から :end までのタグレポート', + 'quick_link_reports' => 'クイックリンク', + 'quick_link_examples' => 'これらは手始めにちょうどよい例へのリンクです。 (?) ボタンからのヘルプページで、すべてのレポートと使用できるマジックワードについて確認してください。', + 'quick_link_default_report' => 'デフォルトの財務レポート', + 'quick_link_audit_report' => '取引履歴の概要', + 'report_this_month_quick' => '今月のすべての口座', + 'report_last_month_quick' => '先月のすべての口座', + 'report_this_year_quick' => '今年のすべての口座', + 'report_this_fiscal_year_quick' => '現在の会計年度のすべての口座', + 'report_all_time_quick' => '全期間のすべての口座', + 'reports_can_bookmark' => 'レポートはブックマークできることを忘れないでください。', + 'incomeVsExpenses' => '収入 vs 支出', + 'accountBalances' => '口座残高', + 'balanceStart' => '期間開始時の残高', + 'balanceEnd' => '期間終了時の残高', + 'splitByAccount' => '口座で分割', + 'coveredWithTags' => 'タグ', + 'leftInBudget' => '残り予算', + 'left_in_debt' => '負債額', + 'sumOfSums' => '合計', + 'noCategory' => '(カテゴリなし)', + 'notCharged' => 'まだ', + 'inactive' => '非アクティブ', + 'active' => '有効', + 'difference' => '差異', + 'money_flowing_in' => '入', + 'money_flowing_out' => '出', + 'topX' => '上位 :number 件', + 'show_full_list' => 'リスト全体を表示', + 'show_only_top' => '上位 :number 件のみ', + 'report_type' => 'レポート種別', + 'report_type_default' => 'デフォルトの財務レポート', + 'report_type_audit' => '取引履歴の概要 (監査)', + 'report_type_category' => 'カテゴリレポート', + 'report_type_budget' => '予算レポート', + 'report_type_tag' => 'タグレポート', + 'report_type_double' => '支出 / 収入口座レポート', + 'more_info_help' => 'レポート種別の詳細については、ヘルプページを参照してください。右上隅の (?) アイコンを押します。', + 'report_included_accounts' => '含める口座', + 'report_date_range' => '日付範囲', + 'report_preset_ranges' => '既定の範囲', + 'shared' => '共有中', + 'fiscal_year' => '会計年度', + 'income_entry' => ':start から :end までの口座「:name」からの収入', + 'expense_entry' => '口座「:name」への :start から :end までの支出', + 'category_entry' => 'カテゴリ「:name」の :start から :end までの支出と収入', + 'budget_spent_amount' => '予算「:budget」の :start から :end までの支出', + 'balance_amount' => ':start から :end までの口座「:account」から支払われる予算「:budget」の支出', + 'no_audit_activity' => ':start から :end までに、口座「:account_name」のアクティビティの記録はありません。', + 'audit_end_balance' => ':end 末での :account_name の口座残高: :balance', + 'reports_extra_options' => '追加オプション', + 'report_has_no_extra_options' => 'このレポートには追加オプションはありません', + 'reports_submit' => 'レポートを表示', + 'end_after_start_date' => 'レポートの終了日は開始日より後でなければいけません。', + 'select_category' => 'カテゴリを選択', + 'select_budget' => '予算を選択', + 'select_tag' => 'タグを選択', + 'income_per_category' => 'カテゴリ別収入', + 'expense_per_category' => 'カテゴリ別支出', + 'expense_per_budget' => '予算ごとの支出', + 'income_per_account' => '口座ごとの収入', + 'expense_per_account' => '口座ごとの支出', + 'expense_per_tag' => 'タグごとの支出', + 'income_per_tag' => 'タグごとの収入', + 'include_expense_not_in_budget' => '選択された予算に含まれない支出', + 'include_expense_not_in_account' => '選択された口座に含まれない支出', + 'include_expense_not_in_category' => '選択されたカテゴリに含まれない支出', + 'include_income_not_in_category' => '選択されたカテゴリに含まれない収入', + 'include_income_not_in_account' => '選択された口座に含まれない収入', + 'include_income_not_in_tags' => '選択されたタグに含まれない収入', + 'include_expense_not_in_tags' => '選択されたタグに含まれない支出', + 'everything_else' => 'その他すべて', + 'income_and_expenses' => '収入と支出', + 'spent_average' => '支出 (平均)', + 'income_average' => '収入 (平均)', + 'transaction_count' => '取引件数', + 'average_spending_per_account' => '口座ごとの平均支出', + 'average_income_per_account' => '口座ごとの平均収入', + 'total' => '合計', + 'description' => '概要', + 'sum_of_period' => '期間の合計', + 'average_in_period' => '期間の平均', + 'account_role_defaultAsset' => 'デフォルトの資産口座', + 'account_role_sharedAsset' => '共有資産口座', + 'account_role_savingAsset' => '貯蓄口座', + 'account_role_ccAsset' => 'クレジットカード', + 'account_role_cashWalletAsset' => '現金', + 'budget_chart_click' => 'チャートを見たい予算名をクリックしてください。', + 'category_chart_click' => 'チャートを見たいカテゴリ名をクリックしてください。', + 'in_out_accounts' => '組み合わせごとの収入と支出', + 'in_out_accounts_per_asset' => '(資産口座ごとの) 収入と支出', + 'in_out_per_category' => 'カテゴリごとの収入と支出', + 'out_per_budget' => '予算ごとの支出', + 'select_expense_revenue' => '支出 / 収益口座を選択', + 'multi_currency_report_sum' => 'このリストには複数の通貨をもつ口座が含まれているため、表示される合計は意味をなさないかもしれません。 レポートは常にデフォルトの通貨になります。', + 'sum_in_default_currency' => '合計は常にデフォルト通貨になります。', + 'net_filtered_prefs' => 'このチャートには「純資産に含める」オプションがチェックされていない口座が含まれることはありません。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'チャート', - 'month' => '月', - 'budget' => '予算', - 'spent' => '支出', - 'spent_capped' => '支出 (上限あり)', - 'spent_in_budget' => '予算', - 'left_to_spend' => '支出できる残り', - 'earned' => '収益', - 'overspent' => '使いすぎ', - 'left' => '残り', - 'max-amount' => '上限額', - 'min-amount' => '最低額', - 'journal-amount' => '現在の請求エントリ', - 'name' => '名称', - 'date' => '日付', - 'date_and_time' => '日付と時刻', - 'time' => '時刻', - 'paid' => '支払い済み', - 'unpaid' => '未払い', - 'day' => '日', - 'budgeted' => '予算設定', - 'period' => '期間', - 'balance' => '収支', - 'in_out_period' => 'この期間の収支', - 'sum' => '合計', - 'summary' => '要約', - 'average' => '平均', - 'balanceFor' => ':name の残高', - 'no_tags' => '(タグなし)', + 'chart' => 'チャート', + 'month' => '月', + 'budget' => '予算', + 'spent' => '支出', + 'spent_capped' => '支出 (上限あり)', + 'spent_in_budget' => '予算', + 'left_to_spend' => '支出できる残り', + 'earned' => '収益', + 'overspent' => '使いすぎ', + 'left' => '残り', + 'max-amount' => '上限額', + 'min-amount' => '最低額', + 'journal-amount' => '現在の請求エントリ', + 'name' => '名称', + 'date' => '日付', + 'date_and_time' => '日付と時刻', + 'time' => '時刻', + 'paid' => '支払い済み', + 'unpaid' => '未払い', + 'day' => '日', + 'budgeted' => '予算設定', + 'period' => '期間', + 'balance' => '収支', + 'in_out_period' => 'この期間の収支', + 'sum' => '合計', + 'summary' => '要約', + 'average' => '平均', + 'balanceFor' => ':name の残高', + 'no_tags' => '(タグなし)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'イベント履歴', - 'add_money_to_piggy' => '貯金箱「:name」にお金を追加', - 'piggy_bank' => '貯金箱', - 'new_piggy_bank' => '新しい貯金箱', - 'store_piggy_bank' => '新しい貯金箱を保存', - 'stored_piggy_bank' => '新しい貯金箱「:name」を保存', - 'account_status' => '口座状態', - 'left_for_piggy_banks' => '貯金箱の残額', - 'sum_of_piggy_banks' => '貯金箱の合計', - 'saved_so_far' => 'これまでの貯金額', - 'left_to_save' => '残り貯金額', - 'suggested_amount' => '月ごとの推奨貯蓄額', - 'add_money_to_piggy_title' => '貯金箱「:name」を追加', - 'remove_money_from_piggy_title' => '貯金箱「:name」からお金を取り去る', - 'add' => '追加', - 'no_money_for_piggy' => 'この貯金箱に入れるお金がありません。', - 'suggested_savings_per_month' => '1ヶ月あたりの推奨', + 'event_history' => 'イベント履歴', + 'add_money_to_piggy' => '貯金箱「:name」にお金を追加', + 'piggy_bank' => '貯金箱', + 'new_piggy_bank' => '新しい貯金箱', + 'store_piggy_bank' => '新しい貯金箱を保存', + 'stored_piggy_bank' => '新しい貯金箱「:name」を保存', + 'account_status' => '口座状態', + 'left_for_piggy_banks' => '貯金箱の残額', + 'sum_of_piggy_banks' => '貯金箱の合計', + 'saved_so_far' => 'これまでの貯金額', + 'left_to_save' => '残り貯金額', + 'suggested_amount' => '月ごとの推奨貯蓄額', + 'add_money_to_piggy_title' => '貯金箱「:name」を追加', + 'remove_money_from_piggy_title' => '貯金箱「:name」からお金を取り去る', + 'add' => '追加', + 'no_money_for_piggy' => 'この貯金箱に入れるお金がありません。', + 'suggested_savings_per_month' => '1ヶ月あたりの推奨', - 'remove' => '削除', - 'max_amount_add' => '追加できる最大金額は', - 'max_amount_remove' => '削除できる最大金額は', - 'update_piggy_button' => '貯金箱を更新する', - 'update_piggy_title' => '貯金箱「:name」を更新', - 'updated_piggy_bank' => '貯金箱「:name」を更新しました', - 'details' => '詳細', - 'events' => 'イベント', - 'target_amount' => '目標金額', - 'start_date' => '開始日', - 'no_start_date' => '開始日なし', - 'target_date' => '目標日付', - 'no_target_date' => '目標日付なし', - 'table' => '表', - 'delete_piggy_bank' => '貯金箱「:name」を削除', - 'cannot_add_amount_piggy' => ':amount を「:name」に追加できませんでした。', - 'cannot_remove_from_piggy' => ':amount を「:name」から削除できませんでした。', - 'deleted_piggy_bank' => '貯金箱「:name」を削除しました', - 'added_amount_to_piggy' => ':amount を「:name」に追加しました', - 'removed_amount_from_piggy' => '「:name」から :amount を削除しました', - 'piggy_events' => '関連する貯金箱', + 'remove' => '削除', + 'max_amount_add' => '追加できる最大金額は', + 'max_amount_remove' => '削除できる最大金額は', + 'update_piggy_button' => '貯金箱を更新する', + 'update_piggy_title' => '貯金箱「:name」を更新', + 'updated_piggy_bank' => '貯金箱「:name」を更新しました', + 'details' => '詳細', + 'events' => 'イベント', + 'target_amount' => '目標金額', + 'start_date' => '開始日', + 'no_start_date' => '開始日なし', + 'target_date' => '目標日付', + 'no_target_date' => '目標日付なし', + 'table' => '表', + 'delete_piggy_bank' => '貯金箱「:name」を削除', + 'cannot_add_amount_piggy' => ':amount を「:name」に追加できませんでした。', + 'cannot_remove_from_piggy' => ':amount を「:name」から削除できませんでした。', + 'deleted_piggy_bank' => '貯金箱「:name」を削除しました', + 'added_amount_to_piggy' => ':amount を「:name」に追加しました', + 'removed_amount_from_piggy' => '「:name」から :amount を削除しました', + 'piggy_events' => '関連する貯金箱', // tags - 'delete_tag' => 'タグ「:tag」を削除する', - 'deleted_tag' => 'タグ「:tag」を削除しました', - 'new_tag' => '新しいタグを作成する', - 'edit_tag' => 'タグ「:tag」を編集する', - 'updated_tag' => 'タグ「:tag」を更新しました', - 'created_tag' => 'タグ「:tag」が作成されました!', + 'delete_tag' => 'タグ「:tag」を削除する', + 'deleted_tag' => 'タグ「:tag」を削除しました', + 'new_tag' => '新しいタグを作成する', + 'edit_tag' => 'タグ「:tag」を編集する', + 'updated_tag' => 'タグ「:tag」を更新しました', + 'created_tag' => 'タグ「:tag」が作成されました!', - 'transaction_journal_information' => '取引情報', - 'transaction_journal_amount' => '金額情報', - 'transaction_journal_meta' => 'メタ情報', - 'transaction_journal_more' => '詳細情報', - 'basic_journal_information' => '取引基本情報', - 'transaction_journal_extra' => '追加情報', - 'att_part_of_journal' => '「:journal」に保存しました', - 'total_amount' => '合計金額', - 'number_of_decimals' => '小数点以下の桁数', + 'transaction_journal_information' => '取引情報', + 'transaction_journal_amount' => '金額情報', + 'transaction_journal_meta' => 'メタ情報', + 'transaction_journal_more' => '詳細情報', + 'basic_journal_information' => '取引基本情報', + 'transaction_journal_extra' => '追加情報', + 'att_part_of_journal' => '「:journal」に保存しました', + 'total_amount' => '合計金額', + 'number_of_decimals' => '小数点以下の桁数', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => '「:address」 への招待はすでに利用されました。', - 'invite_is_deleted' => '「:address」 への招待が削除されました。', - 'invite_new_user_title' => 'ユーザーを招待する', - 'invite_new_user_text' => '管理者として、Firefly III管理にユーザーを登録するように招待できます。共有できる直接リンクを使用して、招待されたユーザーはアカウントを登録することができます。 招待されたユーザーと招待リンクが下の表に表示されます。招待リンクを自由に共有できます。', - 'invited_user_mail' => 'メールアドレス', - 'invite_user' => 'ユーザーを招待', - 'user_is_invited' => 'メールアドレス「:address」がFirefly IIIに招待されました。', - 'administration' => '管理', - 'system_settings' => 'システム設定', - 'code_already_used' => '招待コードが使用されました', - 'user_administration' => 'ユーザー管理', - 'list_all_users' => '全ユーザー', - 'all_users' => '全ユーザー', - 'instance_configuration' => '設定', - 'firefly_instance_configuration' => 'Firefly III の設定オプション', - 'setting_single_user_mode' => 'シングルユーザーモード', - 'setting_single_user_mode_explain' => 'デフォルトでは Firefly III はあなた一人の登録しか受け付けません。これはセキュリティ対策であり、許可しない限り他の人がインスタンスを使用することを防ぎます。 今後の登録はブロックされています。このチェックを外すと、(インターネットに接続されている場合) アクセスできる他の人も利用できるようになります。', - 'store_configuration' => '設定を保存', - 'single_user_administration' => ':email のユーザー管理', - 'edit_user' => 'ユーザー :email を編集', - 'hidden_fields_preferences' => '設定 で追加の取引オプションを有効にできます。', - 'user_data_information' => 'ユーザーデータ', - 'user_information' => 'ユーザー情報', - 'total_size' => '合計サイズ', - 'budget_or_budgets' => ':count件の予算|:count件の予算', - 'budgets_with_limits' => ':count 件の金額設定済み予算|:count 件の金額設定済み予算', - 'nr_of_rules_in_total_groups' => ':count_groups 個のルールグループに :count_rules 個のルール', - 'tag_or_tags' => ':count 個のタグ|:count 個のタグ', - 'configuration_updated' => '設定が更新されました', - 'setting_is_demo_site' => 'デモサイト', - 'setting_is_demo_site_explain' => 'チェックすると、この Firefly III はデモサイトとして動作します。これには奇妙な副作用がありえます。', - 'block_code_bounced' => 'メールを配信できませんでした', - 'block_code_expired' => 'デモアカウントの期限切れ', - 'no_block_code' => 'ブロック理由がないかブロックされてません', - 'block_code_email_changed' => 'ユーザーはまだ新しいメールアドレスを確認していません', - 'admin_update_email' => 'プロフィールページとは違い、ユーザーにメールアドレスが変更されたことは通知されません。', - 'update_user' => 'ユーザーを更新', - 'updated_user' => 'ユーザーデータが変更されました。', - 'delete_user' => 'ユーザー :email を削除', - 'user_deleted' => 'ユーザーが削除されました。', - 'send_test_email' => 'テストメールメッセージを送信', - 'send_test_email_text' => 'あなたの環境がメールを送信できるか確認するため、このボタンを押してください。エラーがあってもここには表示されず、ログファイルに記載されます。ボタンは好きなだけ何度も押すことができます。スパム制御はされていません。メールは :email に送信され、すぐに届きます。', - 'send_message' => 'メッセージを送信', - 'send_test_triggered' => 'テストが実行されました。受信トレイとログファイルを確認してください。', - 'give_admin_careful' => '管理者権限を与えられたユーザーは、あなたの特権を奪うことができます。注意してください。', - 'admin_maintanance_title' => 'メンテナンス', - 'admin_maintanance_expl' => 'Firefly III メンテナンス用の素敵なボタン', - 'admin_maintenance_clear_cache' => 'キャッシュをクリア', - 'admin_notifications' => '通知管理', - 'admin_notifications_expl' => 'これらの通知は管理者によって有効/無効にできます。 Slack でもこれらのメッセージを取得したい場合は、"incoming webhook" URL を設定します。', - 'admin_notification_check_user_new_reg' => 'ユーザーが登録後のウェルカムメッセージを受け取ります', - 'admin_notification_check_admin_new_reg' => '管理者は新しいユーザー登録通知を受け取ります', - 'admin_notification_check_new_version' => '新しいバージョンが利用可能です', - 'admin_notification_check_invite_created' => 'Firefly IIIにユーザー招待されました', - 'admin_notification_check_invite_redeemed' => 'ユーザー招待が利用されました', - 'all_invited_users' => '招待されたすべてのユーザー', - 'save_notification_settings' => '設定を保存', - 'notification_settings_saved' => '通知設定が保存されました。', - - - 'split_transaction_title' => '分割取引の概要', - 'split_transaction_title_help' => '分割取引を作成する場合、取引のすべての分割の包括的な概要が必要です。', - 'split_title_help' => '分割取引を作成する場合、取引のすべての分割の包括的な概要が必要です。', - 'you_create_transfer' => '送金を作成しています。', - 'you_create_withdrawal' => '出金を作成しています。', - 'you_create_deposit' => '入金を作成しています。', + 'invite_is_already_redeemed' => '「:address」 への招待はすでに利用されました。', + 'invite_is_deleted' => '「:address」 への招待が削除されました。', + 'invite_new_user_title' => 'ユーザーを招待する', + 'invite_new_user_text' => '管理者として、Firefly III管理にユーザーを登録するように招待できます。共有できる直接リンクを使用して、招待されたユーザーはアカウントを登録することができます。 招待されたユーザーと招待リンクが下の表に表示されます。招待リンクを自由に共有できます。', + 'invited_user_mail' => 'メールアドレス', + 'invite_user' => 'ユーザーを招待', + 'user_is_invited' => 'メールアドレス「:address」がFirefly IIIに招待されました。', + 'administration' => '管理', + 'system_settings' => 'システム設定', + 'code_already_used' => '招待コードが使用されました', + 'user_administration' => 'ユーザー管理', + 'list_all_users' => '全ユーザー', + 'all_users' => '全ユーザー', + 'instance_configuration' => '設定', + 'firefly_instance_configuration' => 'Firefly III の設定オプション', + 'setting_single_user_mode' => 'シングルユーザーモード', + 'setting_single_user_mode_explain' => 'デフォルトでは Firefly III はあなた一人の登録しか受け付けません。これはセキュリティ対策であり、許可しない限り他の人がインスタンスを使用することを防ぎます。 今後の登録はブロックされています。このチェックを外すと、(インターネットに接続されている場合) アクセスできる他の人も利用できるようになります。', + 'store_configuration' => '設定を保存', + 'single_user_administration' => ':email のユーザー管理', + 'edit_user' => 'ユーザー :email を編集', + 'hidden_fields_preferences' => '設定 で追加の取引オプションを有効にできます。', + 'user_data_information' => 'ユーザーデータ', + 'user_information' => 'ユーザー情報', + 'total_size' => '合計サイズ', + 'budget_or_budgets' => ':count件の予算|:count件の予算', + 'budgets_with_limits' => ':count 件の金額設定済み予算|:count 件の金額設定済み予算', + 'nr_of_rules_in_total_groups' => ':count_groups 個のルールグループに :count_rules 個のルール', + 'tag_or_tags' => ':count 個のタグ|:count 個のタグ', + 'configuration_updated' => '設定が更新されました', + 'setting_is_demo_site' => 'デモサイト', + 'setting_is_demo_site_explain' => 'チェックすると、この Firefly III はデモサイトとして動作します。これには奇妙な副作用がありえます。', + 'block_code_bounced' => 'メールを配信できませんでした', + 'block_code_expired' => 'デモアカウントの期限切れ', + 'no_block_code' => 'ブロック理由がないかブロックされてません', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'ユーザーはまだ新しいメールアドレスを確認していません', + 'admin_update_email' => 'プロフィールページとは違い、ユーザーにメールアドレスが変更されたことは通知されません。', + 'update_user' => 'ユーザーを更新', + 'updated_user' => 'ユーザーデータが変更されました。', + 'delete_user' => 'ユーザー :email を削除', + 'user_deleted' => 'ユーザーが削除されました。', + 'send_test_email' => 'テストメールメッセージを送信', + 'send_test_email_text' => 'あなたの環境がメールを送信できるか確認するため、このボタンを押してください。エラーがあってもここには表示されず、ログファイルに記載されます。ボタンは好きなだけ何度も押すことができます。スパム制御はされていません。メールは :email に送信され、すぐに届きます。', + 'send_message' => 'メッセージを送信', + 'send_test_triggered' => 'テストが実行されました。受信トレイとログファイルを確認してください。', + 'give_admin_careful' => '管理者権限を与えられたユーザーは、あなたの特権を奪うことができます。注意してください。', + 'admin_maintanance_title' => 'メンテナンス', + 'admin_maintanance_expl' => 'Firefly III メンテナンス用の素敵なボタン', + 'admin_maintenance_clear_cache' => 'キャッシュをクリア', + 'admin_notifications' => '通知管理', + 'admin_notifications_expl' => 'これらの通知は管理者によって有効/無効にできます。 Slack でもこれらのメッセージを取得したい場合は、"incoming webhook" URL を設定します。', + 'admin_notification_check_user_new_reg' => 'ユーザーが登録後のウェルカムメッセージを受け取ります', + 'admin_notification_check_admin_new_reg' => '管理者は新しいユーザー登録通知を受け取ります', + 'admin_notification_check_new_version' => '新しいバージョンが利用可能です', + 'admin_notification_check_invite_created' => 'Firefly IIIにユーザー招待されました', + 'admin_notification_check_invite_redeemed' => 'ユーザー招待が利用されました', + 'all_invited_users' => '招待されたすべてのユーザー', + 'save_notification_settings' => '設定を保存', + 'notification_settings_saved' => '通知設定が保存されました。', + 'split_transaction_title' => '分割取引の概要', + 'split_transaction_title_help' => '分割取引を作成する場合、取引のすべての分割の包括的な概要が必要です。', + 'split_title_help' => '分割取引を作成する場合、取引のすべての分割の包括的な概要が必要です。', + 'you_create_transfer' => '送金を作成しています。', + 'you_create_withdrawal' => '出金を作成しています。', + 'you_create_deposit' => '入金を作成しています。', // links - 'journal_link_configuration' => '取引リンクの設定', - 'create_new_link_type' => '新しいリンクタイプを作成', - 'store_new_link_type' => '新しいリンクタイプを保存', - 'update_link_type' => 'リンクタイプを更新', - 'edit_link_type' => 'リンクタイプ「:name」を更新', - 'updated_link_type' => 'リンクタイプ「:name」を更新しました', - 'delete_link_type' => 'リンクタイプ「:name」を削除', - 'deleted_link_type' => 'リンクタイプ「:name」を削除しました', - 'stored_new_link_type' => '新しいリンクタイプ「:name」を保存しました', - 'cannot_edit_link_type' => 'リンクタイプ「:name」を編集できません', - 'link_type_help_name' => '例「重複」', - 'link_type_help_inward' => '例「重複」', - 'link_type_help_outward' => '例「次と重複」', - 'save_connections_by_moving' => 'これらの取引間のリンクを、別のリンクタイプに変更して保存します:', - 'do_not_save_connection' => '(接続を保存しない)', - 'link_transaction' => '取引をリンク', - 'link_to_other_transaction' => 'この取引を別の取引にリンク', - 'select_transaction_to_link' => 'この取引をリンクする取引を選択します。 Firefly III では現在リンクは(表示はされているものの)使用されていませんが、今後変更する予定です。 検索ボックスを使用して、タイトルまたはIDで取引を選択します。 カスタムリンクタイプを追加する場合は、管理セクションを確認してください。', - 'this_transaction' => 'この取引', - 'transaction' => '取引', - 'comments' => 'コメント', - 'link_notes' => 'リンクに保存したい備考。', - 'invalid_link_selection' => 'これらの取引はリンクできません', - 'selected_transaction' => '選択した取引', - 'journals_linked' => '取引がリンクされました。', - 'journals_error_linked' => 'これらの取引はすでにリンクされています。', - 'journals_link_to_self' => '取引を同じ取引にリンクすることはできません', - 'journal_links' => '取引リンク', - 'this_withdrawal' => 'この出金', - 'this_deposit' => 'この入金', - 'this_transfer' => 'この送金', - 'overview_for_link' => 'リンクタイプ「:name」の概要', - 'source_transaction' => '元の取引', - 'link_description' => 'リンクの概要', - 'destination_transaction' => '取引先', - 'delete_journal_link' => ':source:destination の間のリンクを削除する', - 'deleted_link' => 'リンクを削除しました', + 'journal_link_configuration' => '取引リンクの設定', + 'create_new_link_type' => '新しいリンクタイプを作成', + 'store_new_link_type' => '新しいリンクタイプを保存', + 'update_link_type' => 'リンクタイプを更新', + 'edit_link_type' => 'リンクタイプ「:name」を更新', + 'updated_link_type' => 'リンクタイプ「:name」を更新しました', + 'delete_link_type' => 'リンクタイプ「:name」を削除', + 'deleted_link_type' => 'リンクタイプ「:name」を削除しました', + 'stored_new_link_type' => '新しいリンクタイプ「:name」を保存しました', + 'cannot_edit_link_type' => 'リンクタイプ「:name」を編集できません', + 'link_type_help_name' => '例「重複」', + 'link_type_help_inward' => '例「重複」', + 'link_type_help_outward' => '例「次と重複」', + 'save_connections_by_moving' => 'これらの取引間のリンクを、別のリンクタイプに変更して保存します:', + 'do_not_save_connection' => '(接続を保存しない)', + 'link_transaction' => '取引をリンク', + 'link_to_other_transaction' => 'この取引を別の取引にリンク', + 'select_transaction_to_link' => 'この取引をリンクする取引を選択します。 Firefly III では現在リンクは(表示はされているものの)使用されていませんが、今後変更する予定です。 検索ボックスを使用して、タイトルまたはIDで取引を選択します。 カスタムリンクタイプを追加する場合は、管理セクションを確認してください。', + 'this_transaction' => 'この取引', + 'transaction' => '取引', + 'comments' => 'コメント', + 'link_notes' => 'リンクに保存したい備考。', + 'invalid_link_selection' => 'これらの取引はリンクできません', + 'selected_transaction' => '選択した取引', + 'journals_linked' => '取引がリンクされました。', + 'journals_error_linked' => 'これらの取引はすでにリンクされています。', + 'journals_link_to_self' => '取引を同じ取引にリンクすることはできません', + 'journal_links' => '取引リンク', + 'this_withdrawal' => 'この出金', + 'this_deposit' => 'この入金', + 'this_transfer' => 'この送金', + 'overview_for_link' => 'リンクタイプ「:name」の概要', + 'source_transaction' => '元の取引', + 'link_description' => 'リンクの概要', + 'destination_transaction' => '取引先', + 'delete_journal_link' => ':source:destination の間のリンクを削除する', + 'deleted_link' => 'リンクを削除しました', // link translations: - 'Paid_name' => '支払い済み', - 'Refund_name' => '返済', - 'Reimbursement_name' => '払い戻し', - 'Related_name' => '関連', - 'relates to_inward' => '関連する', - 'is (partially) refunded by_inward' => '次のユーザーによって (部分的に) 返済されます', - 'is (partially) paid for by_inward' => '次のユーザーによって (部分的に) 支払われます', - 'is (partially) reimbursed by_inward' => '次のユーザーによって (部分的に) 払い戻されます', - 'inward_transaction' => '内部取引', - 'outward_transaction' => '外部取引', - 'relates to_outward' => '関連する', - '(partially) refunds_outward' => '(部分的な) 返済', - '(partially) pays for_outward' => '(部分的な) 支払い', - '(partially) reimburses_outward' => '(部分的な) 払い戻し', - 'is (partially) refunded by' => '次のユーザーによって (部分的に) 返済されます', - 'is (partially) paid for by' => '次のユーザーによって (部分的に) 支払われます', - 'is (partially) reimbursed by' => '次のユーザーによって (部分的に) 払い戻されます', - 'relates to' => '関連する', - '(partially) refunds' => '(部分的な) 返済', - '(partially) pays for' => '(部分的な) 支払い', - '(partially) reimburses' => '(部分的な) 払い戻し', + 'Paid_name' => '支払い済み', + 'Refund_name' => '返済', + 'Reimbursement_name' => '払い戻し', + 'Related_name' => '関連', + 'relates to_inward' => '関連する', + 'is (partially) refunded by_inward' => '次のユーザーによって (部分的に) 返済されます', + 'is (partially) paid for by_inward' => '次のユーザーによって (部分的に) 支払われます', + 'is (partially) reimbursed by_inward' => '次のユーザーによって (部分的に) 払い戻されます', + 'inward_transaction' => '内部取引', + 'outward_transaction' => '外部取引', + 'relates to_outward' => '関連する', + '(partially) refunds_outward' => '(部分的な) 返済', + '(partially) pays for_outward' => '(部分的な) 支払い', + '(partially) reimburses_outward' => '(部分的な) 払い戻し', + 'is (partially) refunded by' => '次のユーザーによって (部分的に) 返済されます', + 'is (partially) paid for by' => '次のユーザーによって (部分的に) 支払われます', + 'is (partially) reimbursed by' => '次のユーザーによって (部分的に) 払い戻されます', + 'relates to' => '関連する', + '(partially) refunds' => '(部分的な) 返済', + '(partially) pays for' => '(部分的な) 支払い', + '(partially) reimburses' => '(部分的な) 払い戻し', // split a transaction: - 'splits' => '分割', - 'add_another_split' => '別の分割を追加', - 'cannot_edit_opening_balance' => '口座の開始残高は編集できません。', - 'no_edit_multiple_left' => '編集する有効な取引が選択されていません。', - 'breadcrumb_convert_group' => '取引を変換', - 'convert_invalid_source' => '取引 #%d の引き出し元情報が無効です。', - 'convert_invalid_destination' => '取引 #%d の宛先情報が無効です。', - 'create_another' => '保存後に戻り作成を続ける。', - 'after_update_create_another' => '保存後に戻って編集を続ける。', - 'store_as_new' => '更新せず新しい取引として保存する。', - 'reset_after' => '送信後にフォームをリセット', - 'errors_submission' => '送信内容に問題がありました。エラーを確認してください。', - 'transaction_expand_split' => '分割を展開', - 'transaction_collapse_split' => '分割をたたむ', + 'splits' => '分割', + 'add_another_split' => '別の分割を追加', + 'cannot_edit_opening_balance' => '口座の開始残高は編集できません。', + 'no_edit_multiple_left' => '編集する有効な取引が選択されていません。', + 'breadcrumb_convert_group' => '取引を変換', + 'convert_invalid_source' => '取引 #%d の引き出し元情報が無効です。', + 'convert_invalid_destination' => '取引 #%d の宛先情報が無効です。', + 'create_another' => '保存後に戻り作成を続ける。', + 'after_update_create_another' => '保存後に戻って編集を続ける。', + 'store_as_new' => '更新せず新しい取引として保存する。', + 'reset_after' => '送信後にフォームをリセット', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => '分割を展開', + 'transaction_collapse_split' => '分割をたたむ', // object groups - 'default_group_title_name' => '(グループなし)', - 'default_group_title_name_plain' => 'グループ解除', + 'default_group_title_name' => '(グループなし)', + 'default_group_title_name_plain' => 'グループ解除', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => '資産口座を作成しましょう!', - 'no_accounts_intro_asset' => '資産口座がまだありません。資産口座は当座預金口座、貯蓄口座、共有口座、さらにはクレジットカードといった、あなたの主要口座です。', - 'no_accounts_imperative_asset' => 'Firefly III を始めるには、少なくとも1つの資産口座が必要です。今すぐ作成しましょう:', - 'no_accounts_create_asset' => '資産口座の作成', - 'no_accounts_title_expense' => '支出口座を作成しましょう!', - 'no_accounts_intro_expense' => '支出口座がまだありません。支出口座は、お店やスーパーマーケットなどのお金を支出する先です。', - 'no_accounts_imperative_expense' => '支出口座は取引を作成するときに自動的に作成されますが、必要に応じて手動で作成することもできます。今すぐ作成しましょう:', - 'no_accounts_create_expense' => '支出口座を作成する', - 'no_accounts_title_revenue' => '収入口座を作成しましょう!', - 'no_accounts_intro_revenue' => '収入口座がまだありません。収入口座は雇用主などからお金を受け取るところです。', - 'no_accounts_imperative_revenue' => '収入口座は取引を作成するときに自動的に作成されますが、必要に応じて手動で作成することもできます。今すぐ作成しましょう:', - 'no_accounts_create_revenue' => '収入口座を作成', - 'no_accounts_title_liabilities' => '債務を作成しましょう!', - 'no_accounts_intro_liabilities' => 'まだ債務がありません。債務は (学生) ローンやその他の借金を登録する口座です。', - 'no_accounts_imperative_liabilities' => 'この機能を使用する必要はありませんが、これらを把握したい場合に便利です。', - 'no_accounts_create_liabilities' => '債務を作成', - 'no_budgets_title_default' => '予算を作成しましょう', - 'no_rules_title_default' => 'ルールを作ってみましょう!', - 'no_budgets_intro_default' => '予算はまだありません。予算は支出をグループに分類し、制限するための目安になります。', - 'no_rules_intro_default' => 'ルールはまだありません。ルールは取引を処理できる強力な自動化機能です。', - 'no_rules_imperative_default' => 'ルールは取引を管理するときに非常に便利です。今すぐ作成してみましょう:', - 'no_budgets_imperative_default' => '予算は資産管理の基本的なツールです。今すぐ作成しましょう:', - 'no_budgets_create_default' => '予算を作成', - 'no_rules_create_default' => 'ルールを作成', - 'no_categories_title_default' => 'カテゴリを作成しましょう!', - 'no_categories_intro_default' => 'カテゴリはまだありません。カテゴリは取引を微調整し、指定されたカテゴリでラベル付けするために使用されます。', - 'no_categories_imperative_default' => 'カテゴリは取引を作成するときに自動的に作成されますが、手動で作成することもできます。今すぐ作成しましょう:', - 'no_categories_create_default' => 'カテゴリを作成', - 'no_tags_title_default' => 'タグを作成しましょう!', - 'no_tags_intro_default' => 'タグはまだありません。タグは取引を微調整し、特定のキーワードでラベル付けするために使用されます。', - 'no_tags_imperative_default' => 'タグは取引を作成すると自動的に作成されますが、手動で作成することもできます。今すぐ作成しましょう:', - 'no_tags_create_default' => 'タグを作成', - 'no_transactions_title_withdrawal' => '支出を作成しましょう!', - 'no_transactions_intro_withdrawal' => '支出はまだありません。資産の管理をはじめるため、経費を作成しましょう。', - 'no_transactions_imperative_withdrawal' => 'お金を使ったことがありますか?それらを記録しましょう:', - 'no_transactions_create_withdrawal' => '支出を作成する', - 'no_transactions_title_deposit' => '収入を作ってみよう!', - 'no_transactions_intro_deposit' => '収入記録はまだありません。資産の管理を開始するための収入エントリを作成する必要があります。', - 'no_transactions_imperative_deposit' => 'お金を受け取ったことがありますか?それらを記録しましょう:', - 'no_transactions_create_deposit' => '新しい入金を作成する', - 'no_transactions_title_transfers' => '送金を作成しましょう!', - 'no_transactions_intro_transfers' => '送金はまだありません。資産口座間でお金を移動すると、送金として記録されます。', - 'no_transactions_imperative_transfers' => 'お金を移動しましたか?それらは記録すべきです:', - 'no_transactions_create_transfers' => '送金を作成', - 'no_piggies_title_default' => '貯金箱を作成しましょう!', - 'no_piggies_intro_default' => 'まだ貯金箱がありません。貯金を分割し、把握するために貯金箱を作ることができます。', - 'no_piggies_imperative_default' => '何かのためにお金を貯めていますか?貯金箱を作って把握しましょう:', - 'no_piggies_create_default' => '新規貯金箱の作成', - 'no_bills_title_default' => '請求を作成しましょう!', - 'no_bills_intro_default' => 'まだ請求がありません。家賃や保険のような定期的な支出の把握のために、請求をつくることができます。', - 'no_bills_imperative_default' => '定期的な請求がありますか?請求を作成し支払いを把握しましょう:', - 'no_bills_create_default' => '請求を作成', + 'no_accounts_title_asset' => '資産口座を作成しましょう!', + 'no_accounts_intro_asset' => '資産口座がまだありません。資産口座は当座預金口座、貯蓄口座、共有口座、さらにはクレジットカードといった、あなたの主要口座です。', + 'no_accounts_imperative_asset' => 'Firefly III を始めるには、少なくとも1つの資産口座が必要です。今すぐ作成しましょう:', + 'no_accounts_create_asset' => '資産口座の作成', + 'no_accounts_title_expense' => '支出口座を作成しましょう!', + 'no_accounts_intro_expense' => '支出口座がまだありません。支出口座は、お店やスーパーマーケットなどのお金を支出する先です。', + 'no_accounts_imperative_expense' => '支出口座は取引を作成するときに自動的に作成されますが、必要に応じて手動で作成することもできます。今すぐ作成しましょう:', + 'no_accounts_create_expense' => '支出口座を作成する', + 'no_accounts_title_revenue' => '収入口座を作成しましょう!', + 'no_accounts_intro_revenue' => '収入口座がまだありません。収入口座は雇用主などからお金を受け取るところです。', + 'no_accounts_imperative_revenue' => '収入口座は取引を作成するときに自動的に作成されますが、必要に応じて手動で作成することもできます。今すぐ作成しましょう:', + 'no_accounts_create_revenue' => '収入口座を作成', + 'no_accounts_title_liabilities' => '債務を作成しましょう!', + 'no_accounts_intro_liabilities' => 'まだ債務がありません。債務は (学生) ローンやその他の借金を登録する口座です。', + 'no_accounts_imperative_liabilities' => 'この機能を使用する必要はありませんが、これらを把握したい場合に便利です。', + 'no_accounts_create_liabilities' => '債務を作成', + 'no_budgets_title_default' => '予算を作成しましょう', + 'no_rules_title_default' => 'ルールを作ってみましょう!', + 'no_budgets_intro_default' => '予算はまだありません。予算は支出をグループに分類し、制限するための目安になります。', + 'no_rules_intro_default' => 'ルールはまだありません。ルールは取引を処理できる強力な自動化機能です。', + 'no_rules_imperative_default' => 'ルールは取引を管理するときに非常に便利です。今すぐ作成してみましょう:', + 'no_budgets_imperative_default' => '予算は資産管理の基本的なツールです。今すぐ作成しましょう:', + 'no_budgets_create_default' => '予算を作成', + 'no_rules_create_default' => 'ルールを作成', + 'no_categories_title_default' => 'カテゴリを作成しましょう!', + 'no_categories_intro_default' => 'カテゴリはまだありません。カテゴリは取引を微調整し、指定されたカテゴリでラベル付けするために使用されます。', + 'no_categories_imperative_default' => 'カテゴリは取引を作成するときに自動的に作成されますが、手動で作成することもできます。今すぐ作成しましょう:', + 'no_categories_create_default' => 'カテゴリを作成', + 'no_tags_title_default' => 'タグを作成しましょう!', + 'no_tags_intro_default' => 'タグはまだありません。タグは取引を微調整し、特定のキーワードでラベル付けするために使用されます。', + 'no_tags_imperative_default' => 'タグは取引を作成すると自動的に作成されますが、手動で作成することもできます。今すぐ作成しましょう:', + 'no_tags_create_default' => 'タグを作成', + 'no_transactions_title_withdrawal' => '支出を作成しましょう!', + 'no_transactions_intro_withdrawal' => '支出はまだありません。資産の管理をはじめるため、経費を作成しましょう。', + 'no_transactions_imperative_withdrawal' => 'お金を使ったことがありますか?それらを記録しましょう:', + 'no_transactions_create_withdrawal' => '支出を作成する', + 'no_transactions_title_deposit' => '収入を作ってみよう!', + 'no_transactions_intro_deposit' => '収入記録はまだありません。資産の管理を開始するための収入エントリを作成する必要があります。', + 'no_transactions_imperative_deposit' => 'お金を受け取ったことがありますか?それらを記録しましょう:', + 'no_transactions_create_deposit' => '新しい入金を作成する', + 'no_transactions_title_transfers' => '送金を作成しましょう!', + 'no_transactions_intro_transfers' => '送金はまだありません。資産口座間でお金を移動すると、送金として記録されます。', + 'no_transactions_imperative_transfers' => 'お金を移動しましたか?それらは記録すべきです:', + 'no_transactions_create_transfers' => '送金を作成', + 'no_piggies_title_default' => '貯金箱を作成しましょう!', + 'no_piggies_intro_default' => 'まだ貯金箱がありません。貯金を分割し、把握するために貯金箱を作ることができます。', + 'no_piggies_imperative_default' => '何かのためにお金を貯めていますか?貯金箱を作って把握しましょう:', + 'no_piggies_create_default' => '新規貯金箱の作成', + 'no_bills_title_default' => '請求を作成しましょう!', + 'no_bills_intro_default' => 'まだ請求がありません。家賃や保険のような定期的な支出の把握のために、請求をつくることができます。', + 'no_bills_imperative_default' => '定期的な請求がありますか?請求を作成し支払いを把握しましょう:', + 'no_bills_create_default' => '請求を作成', // recurring transactions - 'create_right_now' => '今すぐ作成', - 'no_new_transaction_in_recurrence' => '新しい取引は作成されませんでした。この日付で既に発行されている可能性があります。', - 'recurrences' => '定期的な取引', - 'repeat_until_in_past' => 'この繰り返し取引は :date で繰り返し処理を停止しました。', - 'recurring_calendar_view' => 'カレンダー', - 'no_recurring_title_default' => '定期的な取引を作成しましょう!', - 'no_recurring_intro_default' => '定期的な取引はまだありません。定期的な取引で Firefly III に自動的に取引を作成させることができます。', - 'no_recurring_imperative_default' => 'これはかなり高度な機能ですが、非常に便利です。 続行する前に、ドキュメント(?)アイコンを必ず読んでください。', - 'no_recurring_create_default' => '定期的な取引を作成', - 'make_new_recurring' => '定期的な取引を作成', - 'recurring_daily' => '毎日', - 'recurring_weekly' => '毎週 :weekday', - 'recurring_weekly_skip' => '毎月第 :skip :weekday', - 'recurring_monthly' => '毎月 :dayOfMonth 日', - 'recurring_monthly_skip' => ':skipヶ月ごとの :dayOfMonth 日', - 'recurring_ndom' => '毎月第 :dayOfMonth :weekday', - 'recurring_yearly' => '毎年 :date', - 'overview_for_recurrence' => '定期的な取引「:title」の概要', - 'warning_duplicates_repetitions' => 'まれに日付が2回、このリストに表示されます。これは複数の繰り返しが衝突したときに発生する可能性があります。Firefly III は常に1日につき1つの取引を生成します。', - 'created_transactions' => '関連する取引', - 'expected_withdrawals' => '出金予測', - 'expected_deposits' => '入金予測', - 'expected_transfers' => '送金予測', - 'created_withdrawals' => '出金を作成しました', - 'created_deposits' => '入金を作成しました', - 'created_transfers' => '送金を作成しました', - 'recurring_info' => '定期的な取引 :count / :total', - 'created_from_recurrence' => '定期的な取引「:title」(#:id) から作成されました', - 'recurring_never_cron' => '定期的な取引をサポートするために必要なcronジョブは、一度も実行されていないようです。Firefly III をインストールしたばかりの場合は、これは普通のことですが、できるだけ早く設定する必要があります。 ページの右上隅にある (?) アイコンを使用してヘルプページを確認してください。', - 'recurring_cron_long_ago' => '定期的な取引をサポートするための cron ジョブが前回実行されてから36時間以上が経過しているようです。 正しく設定されていますか?ページの右上隅にある(?)アイコンから、ヘルプページを確認してください。', + 'create_right_now' => '今すぐ作成', + 'no_new_transaction_in_recurrence' => '新しい取引は作成されませんでした。この日付で既に発行されている可能性があります。', + 'recurrences' => '定期的な取引', + 'repeat_until_in_past' => 'この繰り返し取引は :date で繰り返し処理を停止しました。', + 'recurring_calendar_view' => 'カレンダー', + 'no_recurring_title_default' => '定期的な取引を作成しましょう!', + 'no_recurring_intro_default' => '定期的な取引はまだありません。定期的な取引で Firefly III に自動的に取引を作成させることができます。', + 'no_recurring_imperative_default' => 'これはかなり高度な機能ですが、非常に便利です。 続行する前に、ドキュメント(?)アイコンを必ず読んでください。', + 'no_recurring_create_default' => '定期的な取引を作成', + 'make_new_recurring' => '定期的な取引を作成', + 'recurring_daily' => '毎日', + 'recurring_weekly' => '毎週 :weekday', + 'recurring_weekly_skip' => '毎月第 :skip :weekday', + 'recurring_monthly' => '毎月 :dayOfMonth 日', + 'recurring_monthly_skip' => ':skipヶ月ごとの :dayOfMonth 日', + 'recurring_ndom' => '毎月第 :dayOfMonth :weekday', + 'recurring_yearly' => '毎年 :date', + 'overview_for_recurrence' => '定期的な取引「:title」の概要', + 'warning_duplicates_repetitions' => 'まれに日付が2回、このリストに表示されます。これは複数の繰り返しが衝突したときに発生する可能性があります。Firefly III は常に1日につき1つの取引を生成します。', + 'created_transactions' => '関連する取引', + 'expected_withdrawals' => '出金予測', + 'expected_deposits' => '入金予測', + 'expected_transfers' => '送金予測', + 'created_withdrawals' => '出金を作成しました', + 'created_deposits' => '入金を作成しました', + 'created_transfers' => '送金を作成しました', + 'recurring_info' => '定期的な取引 :count / :total', + 'created_from_recurrence' => '定期的な取引「:title」(#:id) から作成されました', + 'recurring_never_cron' => '定期的な取引をサポートするために必要なcronジョブは、一度も実行されていないようです。Firefly III をインストールしたばかりの場合は、これは普通のことですが、できるだけ早く設定する必要があります。 ページの右上隅にある (?) アイコンを使用してヘルプページを確認してください。', + 'recurring_cron_long_ago' => '定期的な取引をサポートするための cron ジョブが前回実行されてから36時間以上が経過しているようです。 正しく設定されていますか?ページの右上隅にある(?)アイコンから、ヘルプページを確認してください。', - 'create_new_recurrence' => '定期的な取引を作成', - 'help_first_date' => '初回の繰り返し予定を示します。これは未来の日付でなければなりません。', - 'help_first_date_no_past' => '繰り返し取引の初回を示します。Firefly III は過去に取引を作成しません。', - 'no_currency' => '(通貨なし)', - 'mandatory_for_recurring' => '繰り返しの必須情報', - 'mandatory_for_transaction' => '必須の取引情報', - 'optional_for_recurring' => '繰り返しのオプション情報', - 'optional_for_transaction' => 'オプションの取引情報', - 'change_date_other_options' => '「最初の日付」を変更して、他のオプションを表示します。', - 'mandatory_fields_for_tranaction' => 'この値で取引が作成されます。', - 'click_for_calendar' => '取引が繰り返されるときに表示されるカレンダーはここをクリックしてください。', - 'repeat_forever' => '無期限に繰り返す', - 'repeat_until_date' => '終了日まで繰り返す', - 'repeat_times' => '指定回数繰り返す', - 'recurring_skips_one' => '他すべて', - 'recurring_skips_more' => ':count 回の発生をスキップ', - 'store_new_recurrence' => '定期的な取引を保存', - 'stored_new_recurrence' => '定期的な取引「:title」が正常に保存されました。', - 'edit_recurrence' => '定期的な取引 ":title"を編集', - 'recurring_repeats_until' => ':date まで繰り返し', - 'recurring_repeats_forever' => '無期限に繰り返し', - 'recurring_repeats_x_times' => '繰り返し :count 回|繰り返し :count 回', - 'update_recurrence' => '定期的な取引を更新', - 'updated_recurrence' => '定期的な取引「:title」を更新しました', - 'recurrence_is_inactive' => 'この定期的な取引は有効ではないため、新しい取引は生成されません。', - 'delete_recurring' => '定期的な取引「:title」を削除', - 'new_recurring_transaction' => '新しい定期的な取引', - 'help_weekend' => '定期的な取引が土曜日または日曜日になる場合、Firefly III は何をすべきですか?', - 'do_nothing' => '新規取引を作成', - 'skip_transaction' => '発生をスキップ', - 'jump_to_friday' => '代わりに前の金曜日に取引を作成します', - 'jump_to_monday' => '代わりに次の月曜日に取引を作成します', - 'will_jump_friday' => '週末の代わりに金曜日に作成されます。', - 'will_jump_monday' => '週末の代わりに月曜日に作成されます。', - 'except_weekends' => '週末を除外する', - 'recurrence_deleted' => '定期的な取引「:title」を削除しました', + 'create_new_recurrence' => '定期的な取引を作成', + 'help_first_date' => '初回の繰り返し予定を示します。これは未来の日付でなければなりません。', + 'help_first_date_no_past' => '繰り返し取引の初回を示します。Firefly III は過去に取引を作成しません。', + 'no_currency' => '(通貨なし)', + 'mandatory_for_recurring' => '繰り返しの必須情報', + 'mandatory_for_transaction' => '必須の取引情報', + 'optional_for_recurring' => '繰り返しのオプション情報', + 'optional_for_transaction' => 'オプションの取引情報', + 'change_date_other_options' => '「最初の日付」を変更して、他のオプションを表示します。', + 'mandatory_fields_for_tranaction' => 'この値で取引が作成されます。', + 'click_for_calendar' => '取引が繰り返されるときに表示されるカレンダーはここをクリックしてください。', + 'repeat_forever' => '無期限に繰り返す', + 'repeat_until_date' => '終了日まで繰り返す', + 'repeat_times' => '指定回数繰り返す', + 'recurring_skips_one' => '他すべて', + 'recurring_skips_more' => ':count 回の発生をスキップ', + 'store_new_recurrence' => '定期的な取引を保存', + 'stored_new_recurrence' => '定期的な取引「:title」が正常に保存されました。', + 'edit_recurrence' => '定期的な取引 ":title"を編集', + 'recurring_repeats_until' => ':date まで繰り返し', + 'recurring_repeats_forever' => '無期限に繰り返し', + 'recurring_repeats_x_times' => '繰り返し :count 回|繰り返し :count 回', + 'update_recurrence' => '定期的な取引を更新', + 'updated_recurrence' => '定期的な取引「:title」を更新しました', + 'recurrence_is_inactive' => 'この定期的な取引は有効ではないため、新しい取引は生成されません。', + 'delete_recurring' => '定期的な取引「:title」を削除', + 'new_recurring_transaction' => '新しい定期的な取引', + 'help_weekend' => '定期的な取引が土曜日または日曜日になる場合、Firefly III は何をすべきですか?', + 'do_nothing' => '新規取引を作成', + 'skip_transaction' => '発生をスキップ', + 'jump_to_friday' => '代わりに前の金曜日に取引を作成します', + 'jump_to_monday' => '代わりに次の月曜日に取引を作成します', + 'will_jump_friday' => '週末の代わりに金曜日に作成されます。', + 'will_jump_monday' => '週末の代わりに月曜日に作成されます。', + 'except_weekends' => '週末を除外する', + 'recurrence_deleted' => '定期的な取引「:title」を削除しました', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => '残高 (:currency)', - 'box_spent_in_currency' => '支出 (:currency)', - 'box_earned_in_currency' => '収益 (:currency)', - 'box_budgeted_in_currency' => '予算確保 (:currency)', - 'box_bill_paid_in_currency' => '支払い済み請求 (:currency)', - 'box_bill_unpaid_in_currency' => '未払いの請求 (:currency)', - 'box_left_to_spend_in_currency' => '残り支出 (:currency)', - 'box_net_worth_in_currency' => '純資産 (:currency)', - 'box_spend_per_day' => '1日あたりの支出残り: :amount', + 'box_balance_in_currency' => '残高 (:currency)', + 'box_spent_in_currency' => '支出 (:currency)', + 'box_earned_in_currency' => '収益 (:currency)', + 'box_budgeted_in_currency' => '予算確保 (:currency)', + 'box_bill_paid_in_currency' => '支払い済み請求 (:currency)', + 'box_bill_unpaid_in_currency' => '未払いの請求 (:currency)', + 'box_left_to_spend_in_currency' => '残り支出 (:currency)', + 'box_net_worth_in_currency' => '純資産 (:currency)', + 'box_spend_per_day' => '1日あたりの支出残り: :amount', // debug page - 'debug_page' => 'デバッグページ', - 'debug_submit_instructions' => '問題が発生している場合は、この情報をデバッグ情報として使用できます。 新規または既存の GitHub issueにコピー&ペーストしてください。 それは問題を迅速に診断するための、すばらしいテーブルを生成します。', - 'debug_pretty_table' => '以下の内容を GitHub issue にコピー&ペーストするとテーブルが生成されます。バックティック (`) や引用符で囲まないでください。', - 'debug_additional_data' => '以下の内容を共有することもできます。 新規または既存の GitHub issueにこれをコピー&ペーストすることもできます。 ただし、この以下の内容には、口座名、取引の詳細、または電子メールアドレスなどの個人情報が含まれている場合があります。', + 'debug_page' => 'デバッグページ', + 'debug_submit_instructions' => '問題が発生している場合は、この情報をデバッグ情報として使用できます。 新規または既存の GitHub issueにコピー&ペーストしてください。 それは問題を迅速に診断するための、すばらしいテーブルを生成します。', + 'debug_pretty_table' => '以下の内容を GitHub issue にコピー&ペーストするとテーブルが生成されます。バックティック (`) や引用符で囲まないでください。', + 'debug_additional_data' => '以下の内容を共有することもできます。 新規または既存の GitHub issueにこれをコピー&ペーストすることもできます。 ただし、この以下の内容には、口座名、取引の詳細、または電子メールアドレスなどの個人情報が含まれている場合があります。', // object groups - 'object_groups_menu_bar' => 'グループ', - 'object_groups_page_title' => 'グループ', - 'object_groups_breadcrumb' => 'グループ', - 'object_groups_index' => '概要', - 'object_groups' => 'グループ', - 'object_groups_empty_explain' => 'Firefly III のいくつかのものはグループに分けることができます。貯金箱を例に挙げると、編集/作成画面に「グループ」項目があります。 この項目を設定すると、グループの名前とページ内でのグループ表示順を編集できます。 詳細については、右上の(?) アイコンの下にあるヘルプページをご覧ください。', - 'object_group_title' => 'タイトル', - 'edit_object_group' => 'グループ「:title」を編集', - 'delete_object_group' => 'グループ「:title」を削除', - 'update_object_group' => 'グループの更新', - 'updated_object_group' => 'グループ「:title」を更新しました', - 'deleted_object_group' => 'グループ「:title」を削除しました', - 'object_group' => 'グループ', + 'object_groups_menu_bar' => 'グループ', + 'object_groups_page_title' => 'グループ', + 'object_groups_breadcrumb' => 'グループ', + 'object_groups_index' => '概要', + 'object_groups' => 'グループ', + 'object_groups_empty_explain' => 'Firefly III のいくつかのものはグループに分けることができます。貯金箱を例に挙げると、編集/作成画面に「グループ」項目があります。 この項目を設定すると、グループの名前とページ内でのグループ表示順を編集できます。 詳細については、右上の(?) アイコンの下にあるヘルプページをご覧ください。', + 'object_group_title' => 'タイトル', + 'edit_object_group' => 'グループ「:title」を編集', + 'delete_object_group' => 'グループ「:title」を削除', + 'update_object_group' => 'グループの更新', + 'updated_object_group' => 'グループ「:title」を更新しました', + 'deleted_object_group' => 'グループ「:title」を削除しました', + 'object_group' => 'グループ', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => '監査ログのエントリ', - 'ale_action_log_add' => '貯金箱「:name」に「:amount」を追加', - 'ale_action_log_remove' => '貯金箱「:name」から:amountを減算', - 'ale_action_clear_budget' => '予算から削除されました', - 'ale_action_update_group_title' => '更新された取引グループタイトル', - 'ale_action_update_date' => '更新された取引日', - 'ale_action_update_order' => '更新された取引並び順', - 'ale_action_clear_category' => 'カテゴリから削除されました', - 'ale_action_clear_notes' => '削除された備考', - 'ale_action_clear_tag' => '削除されたタグ', - 'ale_action_clear_all_tags' => '削除されたすべてのタグ', - 'ale_action_set_bill' => '請求にリンクされました', - 'ale_action_switch_accounts' => '引き出し口座と預け入れ口座を切り替えました', - 'ale_action_set_budget' => '予算を設定する', - 'ale_action_set_category' => 'カテゴリを設定する', - 'ale_action_set_source' => '引き出し口座を設定', - 'ale_action_set_destination' => '預け入れ口座を設定', - 'ale_action_update_transaction_type' => '変更された取引種別', - 'ale_action_update_notes' => '変更された備考', - 'ale_action_update_description' => '変更された概要', - 'ale_action_add_to_piggy' => '貯金箱', - 'ale_action_remove_from_piggy' => '貯金箱', - 'ale_action_add_tag' => '追加したタグ', + 'audit_log_entries' => '監査ログのエントリ', + 'ale_action_log_add' => '貯金箱「:name」に「:amount」を追加', + 'ale_action_log_remove' => '貯金箱「:name」から:amountを減算', + 'ale_action_clear_budget' => '予算から削除されました', + 'ale_action_update_group_title' => '更新された取引グループタイトル', + 'ale_action_update_date' => '更新された取引日', + 'ale_action_update_order' => '更新された取引並び順', + 'ale_action_clear_category' => 'カテゴリから削除されました', + 'ale_action_clear_notes' => '削除された備考', + 'ale_action_clear_tag' => '削除されたタグ', + 'ale_action_clear_all_tags' => '削除されたすべてのタグ', + 'ale_action_set_bill' => '請求にリンクされました', + 'ale_action_switch_accounts' => '引き出し口座と預け入れ口座を切り替えました', + 'ale_action_set_budget' => '予算を設定する', + 'ale_action_set_category' => 'カテゴリを設定する', + 'ale_action_set_source' => '引き出し口座を設定', + 'ale_action_set_destination' => '預け入れ口座を設定', + 'ale_action_update_transaction_type' => '変更された取引種別', + 'ale_action_update_notes' => '変更された備考', + 'ale_action_update_description' => '変更された概要', + 'ale_action_add_to_piggy' => '貯金箱', + 'ale_action_remove_from_piggy' => '貯金箱', + 'ale_action_add_tag' => '追加したタグ', // dashboard - 'enable_auto_convert' => '通貨の変換を有効にする', - 'disable_auto_convert' => '通貨の変換を無効にする', - + 'enable_auto_convert' => '通貨の変換を有効にする', + 'disable_auto_convert' => '通貨の変換を無効にする', ]; /* diff --git a/resources/lang/ja_JP/form.php b/resources/lang/ja_JP/form.php index 364edae2c1..f3ec3605b0 100644 --- a/resources/lang/ja_JP/form.php +++ b/resources/lang/ja_JP/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => '銀行名', - 'bank_balance' => '残高', - 'savings_balance' => '貯金残高', - 'credit_card_limit' => 'クレジットカード上限額', - 'automatch' => '自動的に一致', - 'skip' => 'スキップ', - 'enabled' => '有効', - 'name' => '名称', - 'active' => '有効', - 'amount_min' => '最低額', - 'amount_max' => '上限額', - 'match' => '一致', - 'strict' => '厳密モード', - 'repeat_freq' => '繰り返し', - 'object_group' => 'グループ', - 'location' => '場所', - 'update_channel' => 'チャンネルを更新', - 'currency_id' => '通貨', - 'transaction_currency_id' => '通貨', - 'auto_budget_currency_id' => '通貨', - 'external_ip' => 'サーバーの外部IPアドレス', - 'attachments' => '添付ファイル', - 'BIC' => 'BIC', - 'verify_password' => 'パスワードの安全性確認', - 'source_account' => '引き出し口座', - 'destination_account' => '預け入れ口座', - 'asset_destination_account' => '預け入れ口座', - 'include_net_worth' => '純資産に含める', - 'asset_source_account' => '引き出し口座', - 'journal_description' => '説明', - 'note' => '備考', - 'currency' => '通貨', - 'account_id' => '資産口座', - 'budget_id' => '予算', - 'bill_id' => '請求', - 'opening_balance' => '開始残高', - 'tagMode' => 'タグモード', - 'virtual_balance' => '仮想残高', + 'bank_name' => '銀行名', + 'bank_balance' => '残高', + 'savings_balance' => '貯金残高', + 'credit_card_limit' => 'クレジットカード上限額', + 'automatch' => '自動的に一致', + 'skip' => 'スキップ', + 'enabled' => '有効', + 'name' => '名称', + 'active' => '有効', + 'amount_min' => '最低額', + 'amount_max' => '上限額', + 'match' => '一致', + 'strict' => '厳密モード', + 'repeat_freq' => '繰り返し', + 'object_group' => 'グループ', + 'location' => '場所', + 'update_channel' => 'チャンネルを更新', + 'currency_id' => '通貨', + 'transaction_currency_id' => '通貨', + 'auto_budget_currency_id' => '通貨', + 'external_ip' => 'サーバーの外部IPアドレス', + 'attachments' => '添付ファイル', + 'BIC' => 'BIC', + 'verify_password' => 'パスワードの安全性確認', + 'source_account' => '引き出し口座', + 'destination_account' => '預け入れ口座', + 'asset_destination_account' => '預け入れ口座', + 'include_net_worth' => '純資産に含める', + 'asset_source_account' => '引き出し口座', + 'journal_description' => '説明', + 'note' => '備考', + 'currency' => '通貨', + 'account_id' => '資産口座', + 'budget_id' => '予算', + 'bill_id' => '請求', + 'opening_balance' => '開始残高', + 'tagMode' => 'タグモード', + 'virtual_balance' => '仮想残高', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => '目標金額', 'account_role' => '口座の役割', 'opening_balance_date' => '残高開始日', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => '「:description」という説明の取引を削除してもよろしいですか?', 'mass_journal_are_you_sure' => 'これらの取引を削除してもよろしいですか?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'タグ「:tag」を削除してもよろしいですか?', 'journal_link_areYouSure' => ':source:destination の間のリンクを削除してもよろしいですか?', 'linkType_areYouSure' => 'リンクタイプ「:name (:inward/:outward)」を削除してもよろしいですか?', @@ -230,7 +227,6 @@ return [ 'album' => 'アルバム', 'song' => '曲', - // admin 'domain' => 'ドメイン', 'single_user_mode' => 'ユーザー登録を無効にする', @@ -256,7 +252,7 @@ return [ 'fints_account' => '資産形成口座', 'local_account' => 'Firefly III アカウント', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => '開始日', - 'to_date' => '終了日', - 'due_date' => '期日', - 'payment_date' => '引き落とし日', - 'invoice_date' => '領収書発行日', - 'internal_reference' => '内部参照', - 'inward' => '内向きの説明', - 'outward' => '外向きの概要', - 'rule_group_id' => 'ルールグループ', - 'transaction_description' => '取引の概要', - 'first_date' => '最初の日付', - 'transaction_type' => '取引種別', - 'repeat_until' => '繰り返し期限', - 'recurring_description' => '定期的な取引の概要', - 'repetition_type' => '繰り返しの種類', - 'foreign_currency_id' => '外貨', - 'repetition_end' => 'リピート終了', - 'repetitions' => 'リピート', - 'calendar' => 'カレンダー', - 'weekend' => '週末', - 'client_secret' => 'クライアントシークレット', - 'withdrawal_destination_id' => '送信先の口座', - 'deposit_source_id' => '引き出し口座', - 'expected_on' => '予定日時', - 'paid' => '支払い済み', - 'auto_budget_type' => '自動予算', - 'auto_budget_amount' => '自動予算額', - 'auto_budget_period' => '自動予算期間', - 'collected' => '受領済み', - 'submitted' => '送信済み', - 'key' => '鍵', - 'value' => '記録の内容', - 'webhook_delivery' => '配信', - 'webhook_response' => 'レスポンス', - 'webhook_trigger' => 'トリガー', + 'from_date' => '開始日', + 'to_date' => '終了日', + 'due_date' => '期日', + 'payment_date' => '引き落とし日', + 'invoice_date' => '領収書発行日', + 'internal_reference' => '内部参照', + 'inward' => '内向きの説明', + 'outward' => '外向きの概要', + 'rule_group_id' => 'ルールグループ', + 'transaction_description' => '取引の概要', + 'first_date' => '最初の日付', + 'transaction_type' => '取引種別', + 'repeat_until' => '繰り返し期限', + 'recurring_description' => '定期的な取引の概要', + 'repetition_type' => '繰り返しの種類', + 'foreign_currency_id' => '外貨', + 'repetition_end' => 'リピート終了', + 'repetitions' => 'リピート', + 'calendar' => 'カレンダー', + 'weekend' => '週末', + 'client_secret' => 'クライアントシークレット', + 'withdrawal_destination_id' => '送信先の口座', + 'deposit_source_id' => '引き出し口座', + 'expected_on' => '予定日時', + 'paid' => '支払い済み', + 'auto_budget_type' => '自動予算', + 'auto_budget_amount' => '自動予算額', + 'auto_budget_period' => '自動予算期間', + 'collected' => '受領済み', + 'submitted' => '送信済み', + 'key' => '鍵', + 'value' => '記録の内容', + 'webhook_delivery' => '配信', + 'webhook_response' => 'レスポンス', + 'webhook_trigger' => 'トリガー', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ja_JP/intro.php b/resources/lang/ja_JP/intro.php index 4fce58a5a7..4c419af838 100644 --- a/resources/lang/ja_JP/intro.php +++ b/resources/lang/ja_JP/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Firefly IIIのホームへようこそ。このイントロダクションでは、Firefly IIIがどのように機能するのかをご紹介します。', - 'index_accounts-chart' => 'このチャートは、あなたの資産口座の現在の残高を表示しています。設定でここに表示するかどうか選択できます。', - 'index_box_out_holder' => 'この小さなボックスと横にあるボックスは、財務状況の概要を表示しています。', - 'index_help' => 'ページや入力欄についてヘルプが必要なら、このボタンを押して下さい。', - 'index_outro' => 'Firefly IIIの多くのページはこのような小さなツアーから始まります。もし質問やコメントがある場合は、私に連絡して下さい。楽しんで!', - 'index_sidebar-toggle' => '新しい取引や口座などを作成するには、このアイコン下のメニューを使用してください。', - 'index_cash_account' => 'これらは今までに作られた口座です。現金支出を管理するため現金口座を使うこともできますが、もちろん強制ではありません。', + 'index_intro' => 'Firefly IIIのホームへようこそ。このイントロダクションでは、Firefly IIIがどのように機能するのかをご紹介します。', + 'index_accounts-chart' => 'このチャートは、あなたの資産口座の現在の残高を表示しています。設定でここに表示するかどうか選択できます。', + 'index_box_out_holder' => 'この小さなボックスと横にあるボックスは、財務状況の概要を表示しています。', + 'index_help' => 'ページや入力欄についてヘルプが必要なら、このボタンを押して下さい。', + 'index_outro' => 'Firefly IIIの多くのページはこのような小さなツアーから始まります。もし質問やコメントがある場合は、私に連絡して下さい。楽しんで!', + 'index_sidebar-toggle' => '新しい取引や口座などを作成するには、このアイコン下のメニューを使用してください。', + 'index_cash_account' => 'これらは今までに作られた口座です。現金支出を管理するため現金口座を使うこともできますが、もちろん強制ではありません。', // transactions - 'transactions_create_basic_info' => '引き出し口座、預け入れ口座、日付、概要など、取引の基本情報を入力します。', - 'transactions_create_amount_info' => '取引の金額を入力します。必要に応じて、フィールドは自動的に更新されます。', - 'transactions_create_optional_info' => 'これらのフィールドはすべて任意です。ここにメタデータを追加すると、取引をより整理できます。', - 'transactions_create_split' => '取引を分割する場合は、このボタンでさらに分割を追加します', + 'transactions_create_basic_info' => '引き出し口座、預け入れ口座、日付、概要など、取引の基本情報を入力します。', + 'transactions_create_amount_info' => '取引の金額を入力します。必要に応じて、フィールドは自動的に更新されます。', + 'transactions_create_optional_info' => 'これらのフィールドはすべて任意です。ここにメタデータを追加すると、取引をより整理できます。', + 'transactions_create_split' => '取引を分割する場合は、このボタンでさらに分割を追加します', // create account: - 'accounts_create_iban' => '口座の有効な IBAN を設定してください。これは将来のデータインポートをとても簡単にします。', - 'accounts_create_asset_opening_balance' => '資産口座には Firefly III の口座履歴の開始を示す「開始残高」を持たせることができます。', - 'accounts_create_asset_currency' => 'Firefly IIIは複数の通貨をサポートしています。資産口座は一つのメイン通貨を持っており、ここで選択する必要があります。', - 'accounts_create_asset_virtual' => '口座に仮想の残高を設定すると便利かもしれません。余剰残高は常に実際の残高から差し引かれます。', + 'accounts_create_iban' => '口座の有効な IBAN を設定してください。これは将来のデータインポートをとても簡単にします。', + 'accounts_create_asset_opening_balance' => '資産口座には Firefly III の口座履歴の開始を示す「開始残高」を持たせることができます。', + 'accounts_create_asset_currency' => 'Firefly IIIは複数の通貨をサポートしています。資産口座は一つのメイン通貨を持っており、ここで選択する必要があります。', + 'accounts_create_asset_virtual' => '口座に仮想の残高を設定すると便利かもしれません。余剰残高は常に実際の残高から差し引かれます。', // budgets index - 'budgets_index_intro' => '予算はあなたの財務を管理するために使用され、Firefly III の一つの主要機能を構成します。', - 'budgets_index_set_budget' => 'Firefly IIIがあなたが割り当て可能なすべての金額を予算計上したかどうか伝えられるように。あなたの毎期間の合計予算を設定してください。', - 'budgets_index_see_expenses_bar' => '支出金額が少しずつこのバーを満たします。', - 'budgets_index_navigate_periods' => '期間を操作することで、予算を事前に簡単に設定できます。', - 'budgets_index_new_budget' => 'あなたが妥当だと考える新しい予算を設定してください。', - 'budgets_index_list_of_budgets' => '各予算の金額を設定したり、状況を確認するにはこの表を使ってください。', - 'budgets_index_outro' => '予算計上についてもっと知るには、右上のヘルプアイコンを確認してください。', + 'budgets_index_intro' => '予算はあなたの財務を管理するために使用され、Firefly III の一つの主要機能を構成します。', + 'budgets_index_see_expenses_bar' => '支出金額が少しずつこのバーを満たします。', + 'budgets_index_navigate_periods' => '期間を操作することで、予算を事前に簡単に設定できます。', + 'budgets_index_new_budget' => 'あなたが妥当だと考える新しい予算を設定してください。', + 'budgets_index_list_of_budgets' => '各予算の金額を設定したり、状況を確認するにはこの表を使ってください。', + 'budgets_index_outro' => '予算計上についてもっと知るには、右上のヘルプアイコンを確認してください。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'あなたの財務状況の詳細を見るにはこれらのレポートを使用してください。', - 'reports_index_inputReportType' => 'レポートの種類を選択してください。それぞれのレポートが何を表示するかを見るにはヘルプページを確認してください。', - 'reports_index_inputAccountsSelect' => '経費勘定の除外や追加は自由に行えます。', - 'reports_index_inputDateRange' => '選択した日付の範囲は、1日から10年まで自由に設定できます。', - 'reports_index_extra-options-box' => 'あなたが選んだレポートに応じて、追加のフィルターやオプションを選択できます。', + 'reports_index_intro' => 'あなたの財務状況の詳細を見るにはこれらのレポートを使用してください。', + 'reports_index_inputReportType' => 'レポートの種類を選択してください。それぞれのレポートが何を表示するかを見るにはヘルプページを確認してください。', + 'reports_index_inputAccountsSelect' => '経費勘定の除外や追加は自由に行えます。', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'あなたが選んだレポートに応じて、追加のフィルターやオプションを選択できます。', // reports (reports) - 'reports_report_default_intro' => 'このレポートはあなたの財務状況の素早く包括的な概要を表示します。他の何かを表示したい場合、私に連絡することをためらわないでください!', - 'reports_report_audit_intro' => 'このレポートはあなたの経費勘定の詳細を表示します。', - 'reports_report_audit_optionsBox' => 'あなたが興味のある列を表示したり隠したりするにはこれらのチェックボックスを使用してください。', + 'reports_report_default_intro' => 'このレポートはあなたの財務状況の素早く包括的な概要を表示します。他の何かを表示したい場合、私に連絡することをためらわないでください!', + 'reports_report_audit_intro' => 'このレポートはあなたの経費勘定の詳細を表示します。', + 'reports_report_audit_optionsBox' => 'あなたが興味のある列を表示したり隠したりするにはこれらのチェックボックスを使用してください。', - 'reports_report_category_intro' => 'このレポートはカテゴリの見通しを表示します。', - 'reports_report_category_pieCharts' => 'これらの図表は支出の見通しやカテゴリ、勘定ごとの収入を表示します。', - 'reports_report_category_incomeAndExpensesChart' => 'このチャートはカテゴリごとのあなたの支出と収入を表示します。', + 'reports_report_category_intro' => 'このレポートはカテゴリの見通しを表示します。', + 'reports_report_category_pieCharts' => 'これらの図表は支出の見通しやカテゴリ、勘定ごとの収入を表示します。', + 'reports_report_category_incomeAndExpensesChart' => 'このチャートはカテゴリごとのあなたの支出と収入を表示します。', - 'reports_report_tag_intro' => 'このレポートはあなたの一つまたは複数のタグの見通しを表示します。', - 'reports_report_tag_pieCharts' => 'これらのチャートはタグ、勘定、カテゴリ、予算ごとのあなたの支出と収入を表示しています。', - 'reports_report_tag_incomeAndExpensesChart' => 'このチャートはタグごとのあなたの支出と収入を表示しています。', + 'reports_report_tag_intro' => 'このレポートはあなたの一つまたは複数のタグの見通しを表示します。', + 'reports_report_tag_pieCharts' => 'これらのチャートはタグ、勘定、カテゴリ、予算ごとのあなたの支出と収入を表示しています。', + 'reports_report_tag_incomeAndExpensesChart' => 'このチャートはタグごとのあなたの支出と収入を表示しています。', 'reports_report_budget_intro' => 'このレポートは、1つまたは複数の予算の見通しを示します。', 'reports_report_budget_pieCharts' => 'これらのチャートは、予算ごとまたは口座ごとの支出に関する見通しを示します。', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'このプログレスバーの隣には、それぞれの貯金箱からお金を追加または削除する、2つのボタン(+と-) があります。', 'piggy-banks_index_accountStatus' => 'この表には、1つ以上の貯金箱をもつ資産口座の状況が表示されています。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'あなたの目標は何ですか? 新しいソファ、カメラ、もしもの時のお金ですか?', 'piggy-banks_create_date' => '貯金箱の目標日や期限を設定できます。', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => '請求を使って期間ごとに支払うべき金額を追跡します。家賃や保険、住宅ローンのような支出です。', 'bills_create_name' => '「家賃」や「健康保険」などのわかりやすい名称を使用してください。', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'この請求の最低額と最大額を選択してください。', 'bills_create_repeat_freq_holder' => 'ほとんどの請求は毎月の繰り返しですが、別の周期を設定することができます。', 'bills_create_skip_holder' => '請求が2週ごとに繰り返される場合は、1週ごとに1週スキップするために、「スキップ」項目を「1」に設定してください。', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'ルールに一致する取引を確認するには、このボタンを使用します。', 'rules_create_actions' => '好きなだけアクションを設定します。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'これらのタブには、より多くのオプションがあります。', diff --git a/resources/lang/ja_JP/list.php b/resources/lang/ja_JP/list.php index a69cc468ca..f37dd12647 100644 --- a/resources/lang/ja_JP/list.php +++ b/resources/lang/ja_JP/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'ボタン', - 'icon' => 'アイコン', - 'id' => 'ID', - 'create_date' => '作成日時', - 'update_date' => '更新日時', - 'updated_at' => '更新日時', - 'balance_before' => '前の残高', - 'balance_after' => '後の残高', - 'name' => '名称', - 'role' => '役割', - 'currentBalance' => '現在の残高', - 'linked_to_rules' => '関連ルール', - 'active' => '有効', - 'percentage' => '割合', - 'recurring_transaction' => '繰り返しの収支', - 'next_due' => '次の期限', - 'transaction_type' => '種別', - 'lastActivity' => '最終アクティビティ', - 'balanceDiff' => '残高差', - 'other_meta_data' => 'その他のメタデータ', - 'invited_at' => '招待日時', - 'expires' => '招待の有効期限', - 'invited_by' => '招待者:', - 'invite_link' => '招待リンク', - 'account_type' => '口座種別', - 'created_at' => '作成日時', - 'account' => '口座', - 'external_url' => '外部 URL', - 'matchingAmount' => '金額', - 'destination' => '宛先', - 'source' => '引き出し', - 'next_expected_match' => '次の一致予測', - 'automatch' => '自動一致', + 'buttons' => 'ボタン', + 'icon' => 'アイコン', + 'id' => 'ID', + 'create_date' => '作成日時', + 'update_date' => '更新日時', + 'updated_at' => '更新日時', + 'balance_before' => '前の残高', + 'balance_after' => '後の残高', + 'name' => '名称', + 'role' => '役割', + 'currentBalance' => '現在の残高', + 'linked_to_rules' => '関連ルール', + 'active' => '有効', + 'percentage' => '割合', + 'recurring_transaction' => '繰り返しの収支', + 'next_due' => '次の期限', + 'transaction_type' => '種別', + 'lastActivity' => '最終アクティビティ', + 'balanceDiff' => '残高差', + 'other_meta_data' => 'その他のメタデータ', + 'invited_at' => '招待日時', + 'expires' => '招待の有効期限', + 'invited_by' => '招待者:', + 'invite_link' => '招待リンク', + 'account_type' => '口座種別', + 'created_at' => '作成日時', + 'account' => '口座', + 'external_url' => '外部 URL', + 'matchingAmount' => '金額', + 'destination' => '宛先', + 'source' => '引き出し', + 'next_expected_match' => '次の一致予測', + 'automatch' => '自動一致', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => '繰り返し', 'description' => '概要', 'amount' => '金額', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'bunq口座', 'file_name' => 'ファイル名', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'ファイルサイズ', - 'file_type' => 'ファイルの種類', - 'attached_to' => '添付先', - 'file_exists' => 'ファイルがすでに存在しています', - 'spectre_bank' => '銀行', - 'spectre_last_use' => '最終ログイン', - 'spectre_status' => '状態', - 'bunq_payment_id' => 'bunq 支払いID', - 'repetitions' => '繰り返し', - 'title' => 'タイトル', - 'transaction_s' => '取引', - 'field' => '項目', - 'value' => '数値', - 'interest' => '利息', - 'interest_period' => '利息期間', - 'liability_type' => '債務種別', - 'liability_direction' => '債務の出入', - 'end_date' => '終了日', - 'payment_info' => '支払情報', - 'expected_info' => '次の予想される取引', - 'start_date' => '開始日', - 'trigger' => 'トリガー', - 'response' => 'レスポンス', - 'delivery' => '配信', - 'url' => 'URL', - 'secret' => 'シークレット', - + 'file_size' => 'ファイルサイズ', + 'file_type' => 'ファイルの種類', + 'attached_to' => '添付先', + 'file_exists' => 'ファイルがすでに存在しています', + 'spectre_bank' => '銀行', + 'spectre_last_use' => '最終ログイン', + 'spectre_status' => '状態', + 'bunq_payment_id' => 'bunq 支払いID', + 'repetitions' => '繰り返し', + 'title' => 'タイトル', + 'transaction_s' => '取引', + 'field' => '項目', + 'value' => '数値', + 'interest' => '利息', + 'interest_period' => '利息期間', + 'liability_type' => '債務種別', + 'liability_direction' => '債務の出入', + 'end_date' => '終了日', + 'payment_info' => '支払情報', + 'expected_info' => '次の予想される取引', + 'start_date' => '開始日', + 'trigger' => 'トリガー', + 'response' => 'レスポンス', + 'delivery' => '配信', + 'url' => 'URL', + 'secret' => 'シークレット', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ja_JP/pagination.php b/resources/lang/ja_JP/pagination.php index 13cce4e4a6..e440fe4ad3 100644 --- a/resources/lang/ja_JP/pagination.php +++ b/resources/lang/ja_JP/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ja_JP/passwords.php b/resources/lang/ja_JP/passwords.php index 255119e717..1ec6541cd0 100644 --- a/resources/lang/ja_JP/passwords.php +++ b/resources/lang/ja_JP/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ja_JP/rules.php b/resources/lang/ja_JP/rules.php index dc9c060f96..c2850cbbe5 100644 --- a/resources/lang/ja_JP/rules.php +++ b/resources/lang/ja_JP/rules.php @@ -1,6 +1,5 @@ 'Firefly IIIはサブスクリプション「":name"」を見つけられませんでした', 'no_notes_to_move' => '取引には概要に設定できるメモがありません', 'no_tags_to_remove' => '取引には削除できるタグがありません', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly IIIはタグ「:tag」を見つけられませんでした', 'cannot_find_asset' => 'Firefly IIIは資産口座「:name」を見つけられませんでした', 'cannot_find_accounts' => 'Firefly IIIは引き出し元または預け入れ先口座を見つけられませんでした', diff --git a/resources/lang/ja_JP/validation.php b/resources/lang/ja_JP/validation.php index 6ecbf70682..2d9e2afbf1 100644 --- a/resources/lang/ja_JP/validation.php +++ b/resources/lang/ja_JP/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => '配列に"where"節がありません', - 'missing_update' => '配列に"update"節がありません', - 'invalid_where_key' => 'JSON の"where"節に無効なキーが含まれています', - 'invalid_update_key' => 'JSON の"update"節に無効なキーが含まれています', - 'invalid_query_data' => 'クエリの %s:%s 項目に無効なデータがあります。', - 'invalid_query_account_type' => 'クエリには異なるタイプの口座を含めることはできません。', - 'invalid_query_currency' => 'クエリには異なる通貨設定の口座を含めることはできません。', - 'iban' => '無効なIBANです。', - 'zero_or_more' => '数値はマイナスにできません。', - 'date_or_time' => '数値はISO 8601 準拠の有効な日付や時刻である必要があります。', - 'source_equals_destination' => '引き出し口座と預け入れ口座が同じです。', - 'unique_account_number_for_user' => 'この口座番号は既に使われているようです。', - 'unique_iban_for_user' => 'このIBANは既に使われているようです。', - 'deleted_user' => 'セキュリティ上の制約から、このメールアドレスでは登録できません。', - 'rule_trigger_value' => 'この値は選択されたトリガーには無効です。', - 'rule_action_value' => 'この値は選択された操作には無効です。', - 'file_already_attached' => 'アップロードされたファイル ":name"は既に対象に割り当てられています。', - 'file_attached' => 'ファイル ":name" のアップロードに成功しました。', - 'must_exist' => ':attribute のIDはデータベースに存在しません。', - 'all_accounts_equal' => 'この欄のすべての口座は一致している必要があります。', - 'group_title_mandatory' => '一つ以上の取引がある場合、グループ名は必須です。', - 'transaction_types_equal' => 'すべての分割は同じ種別である必要があります。', - 'invalid_transaction_type' => '無効な取引種別です。', - 'invalid_selection' => 'あなたの選択は無効です。', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => '最低でも一つの取引が必要です。', - 'recurring_transaction_id' => '少なくとも 1 つの取引が必要です。', - 'need_id_to_match' => 'APIを一致させるためにこのエントリをIDで送信する必要があります。', - 'too_many_unmatched' => '送信された取引がそれぞれのデータベースエントリと一致しません。既存のエントリに有効なIDがあることを確認してください。', - 'id_does_not_match' => '送信されたID #:id は期待されたIDと一致しません。一致させるか、フィールドを省略してください。', - 'at_least_one_repetition' => '最低でも一回の繰り返しが必要です。', - 'require_repeat_until' => '繰り返し回数か、終了日 (繰り返し期限) が必要です。両方は使えません。', - 'require_currency_info' => 'この項目の内容は通貨情報がなければ無効です。', - 'not_transfer_account' => 'このアカウントは送金に使用できるアカウントではありません。', - 'require_currency_amount' => 'この項目の内容は、外部金額情報がなければ無効です。', - 'require_foreign_currency' => 'このフィールドには数字が必要です', - 'require_foreign_dest' => 'この項目の値は預け入れ口座の通貨と一致する必要があります。', - 'require_foreign_src' => 'この項目の値は、引き出し口座の通貨と一致する必要があります。', - 'equal_description' => '取引の概要は包括的な概要と同じであってはいけません。', - 'file_invalid_mime' => '「:mime」タイプのファイル ":name" は新しいアップロードとして受け付けられません。', - 'file_too_large' => 'ファイル ":name"は大きすぎます。', - 'belongs_to_user' => ':attribute の数値が不明です。', - 'accepted' => ':attributeを承認してください。', - 'bic' => 'これは有効な BIC ではありません。', - 'at_least_one_trigger' => 'ルールには少なくとも1つのトリガーが必要です。', - 'at_least_one_active_trigger' => 'ルールには少なくとも1つの有効なトリガーが必要です。', - 'at_least_one_action' => 'ルールには少なくとも1つのアクションが必要です。', - 'at_least_one_active_action' => 'ルールには少なくとも1つの有効なアクションが必要です。', - 'base64' => 'これは有効な base64 エンコードデータではありません。', - 'model_id_invalid' => '指定されたIDはこのモデルでは無効です。', - 'less' => ':attributeは10,000,000未満にしてください', - 'active_url' => ':attributeは、有効なURLではありません。', - 'after' => ':attributeには、:dateより後の日付を指定してください。', - 'date_after' => '開始日は終了日より前でなければなりません。', - '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' => 'この :attribute のエントリがすでにあります。', - 'before' => ':attributeには、:dateより前の日付を指定してください。', - 'unique_object_for_user' => 'この名称はすでに使われています。', - 'unique_account_for_user' => 'この口座番号は既に使われているようです。', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => '配列に"where"節がありません', + 'missing_update' => '配列に"update"節がありません', + 'invalid_where_key' => 'JSON の"where"節に無効なキーが含まれています', + 'invalid_update_key' => 'JSON の"update"節に無効なキーが含まれています', + 'invalid_query_data' => 'クエリの %s:%s 項目に無効なデータがあります。', + 'invalid_query_account_type' => 'クエリには異なるタイプの口座を含めることはできません。', + 'invalid_query_currency' => 'クエリには異なる通貨設定の口座を含めることはできません。', + 'iban' => '無効なIBANです。', + 'zero_or_more' => '数値はマイナスにできません。', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'これは資産口座ではありません。', + 'date_or_time' => '数値はISO 8601 準拠の有効な日付や時刻である必要があります。', + 'source_equals_destination' => '引き出し口座と預け入れ口座が同じです。', + 'unique_account_number_for_user' => 'この口座番号は既に使われているようです。', + 'unique_iban_for_user' => 'このIBANは既に使われているようです。', + 'reconciled_forbidden_field' => 'この取引は照合済みです。「:field」は変更できません。', + 'deleted_user' => 'セキュリティ上の制約から、このメールアドレスでは登録できません。', + 'rule_trigger_value' => 'この値は選択されたトリガーには無効です。', + 'rule_action_value' => 'この値は選択された操作には無効です。', + 'file_already_attached' => 'アップロードされたファイル ":name"は既に対象に割り当てられています。', + 'file_attached' => 'ファイル ":name" のアップロードに成功しました。', + 'must_exist' => ':attribute のIDはデータベースに存在しません。', + 'all_accounts_equal' => 'この欄のすべての口座は一致している必要があります。', + 'group_title_mandatory' => '一つ以上の取引がある場合、グループ名は必須です。', + 'transaction_types_equal' => 'すべての分割は同じ種別である必要があります。', + 'invalid_transaction_type' => '無効な取引種別です。', + 'invalid_selection' => 'あなたの選択は無効です。', + 'belongs_user' => 'この値は存在しないオブジェクトにリンクされています。', + 'belongs_user_or_user_group' => 'この値は現在の財務管理に属していないオブジェクトにリンクされています。', + 'at_least_one_transaction' => '最低でも一つの取引が必要です。', + 'recurring_transaction_id' => '少なくとも 1 つの取引が必要です。', + 'need_id_to_match' => 'APIを一致させるためにこのエントリをIDで送信する必要があります。', + 'too_many_unmatched' => '送信された取引がそれぞれのデータベースエントリと一致しません。既存のエントリに有効なIDがあることを確認してください。', + 'id_does_not_match' => '送信されたID #:id は期待されたIDと一致しません。一致させるか、フィールドを省略してください。', + 'at_least_one_repetition' => '最低でも一回の繰り返しが必要です。', + 'require_repeat_until' => '繰り返し回数か、終了日 (繰り返し期限) が必要です。両方は使えません。', + 'require_currency_info' => 'この項目の内容は通貨情報がなければ無効です。', + 'not_transfer_account' => 'このアカウントは送金に使用できるアカウントではありません。', + 'require_currency_amount' => 'この項目の内容は、外部金額情報がなければ無効です。', + 'require_foreign_currency' => 'このフィールドには数字が必要です', + 'require_foreign_dest' => 'この項目の値は預け入れ口座の通貨と一致する必要があります。', + 'require_foreign_src' => 'この項目の値は、引き出し口座の通貨と一致する必要があります。', + 'equal_description' => '取引の概要は包括的な概要と同じであってはいけません。', + 'file_invalid_mime' => '「:mime」タイプのファイル ":name" は新しいアップロードとして受け付けられません。', + 'file_too_large' => 'ファイル ":name"は大きすぎます。', + 'belongs_to_user' => ':attribute の数値が不明です。', + 'accepted' => ':attributeを承認してください。', + 'bic' => 'これは有効な BIC ではありません。', + 'at_least_one_trigger' => 'ルールには少なくとも1つのトリガーが必要です。', + 'at_least_one_active_trigger' => 'ルールには少なくとも1つの有効なトリガーが必要です。', + 'at_least_one_action' => 'ルールには少なくとも1つのアクションが必要です。', + 'at_least_one_active_action' => 'ルールには少なくとも1つの有効なアクションが必要です。', + 'base64' => 'これは有効な base64 エンコードデータではありません。', + 'model_id_invalid' => '指定されたIDはこのモデルでは無効です。', + 'less' => ':attributeは10,000,000未満にしてください', + 'active_url' => ':attributeは、有効なURLではありません。', + 'after' => ':attributeには、:dateより後の日付を指定してください。', + 'date_after' => '開始日は終了日より前でなければなりません。', + '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' => 'この :attribute のエントリがすでにあります。', + 'before' => ':attributeには、:dateより前の日付を指定してください。', + 'unique_object_for_user' => 'この名称はすでに使われています。', + 'unique_account_for_user' => 'この口座番号は既に使われているようです。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + '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には、異なるものを指定してください。', + 'digits' => ':attribute は :digits 桁にして下さい。', + 'digits_between' => ':attribute は :min から :max 桁にして下さい。', + 'email' => ':attributeは、有効なメールアドレス形式で指定してください。', + 'filled' => ':attribute は必須です。', + 'exists' => '選択された:attributeは有効ではありません。', + 'image' => ':attributeには、画像を指定してください。', + 'in' => '選択された:attributeは有効ではありません。', + 'integer' => ':attributeには、整数を指定してください。', + 'ip' => ':attribute は有効なIPアドレスにして下さい。', + 'json' => ':attribute は有効なJSON文字列にして下さい。', + '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' => '選択された:attributeは有効ではありません。', + 'numeric' => ':attributeには、数字を指定してください。', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => '国内通貨', + 'numeric_destination' => '送金先の金額は数値である必要があります。', + 'numeric_source' => '送金元の金額は数値である必要があります。', + 'regex' => ':attributeには、有効な正規表現を指定してください。', + 'required' => ':attribute 項目は必須です。', + 'required_if' => ':otherが:valueの場合、:attributeを指定してください。', + 'required_unless' => ':other が :values 以外の場合、:attribute フィールドは必須です。', + 'required_with' => ':values が存在する場合、:attribute フィールドは必須です。', + 'required_with_all' => ':attribute 項目は :values が存在する場合は必須です。', + 'required_without' => ':values が存在しな場合、:attribute は必須です。', + 'required_without_all' => ':values が一つも存在しない場合、:attribute は必須です。', + 'same' => ':attribute は :other 一致する必要があります。', + 'size.numeric' => ':attributeには、:sizeを指定してください。', + 'amount_min_over_max' => '最小金額は最大金額より大きくすることはできません。', + 'size.file' => ':attribute は :size キロバイトにして下さい。', + 'size.string' => ':attribute は :size 文字にしてください。', + 'size.array' => ':attribute は :size 個である必要があります。', + 'unique' => ':attributeは既に使用されています。', + 'string' => ':attributeには、文字を指定してください。', + 'url' => ':attributeは、有効なURL形式で指定してください。', + 'timezone' => ':attribute は有効なゾーンにしてください。', + '2fa_code' => 'この欄ではその数値は無効です。', + 'dimensions' => ':attribute は無効な画像サイズです。', + 'distinct' => ':attribute は重複しています。', + 'file' => ':attributeはファイルでなければいけません。', + 'in_array' => ':attributeが:otherに存在しません。', + 'present' => ':attributeが存在している必要があります。', + 'amount_zero' => '合計金額はゼロにすることはできません。', + 'current_target_amount' => '現在の金額は目標金額より少なくなければなりません。', + 'unique_piggy_bank_for_user' => '貯金箱の名前は一意である必要があります。', + 'unique_object_group' => 'グループ名は一意でなければなりません', + 'starts_with' => '値は :values で始まる必要があります。', + 'unique_webhook' => 'このURL、トリガー、レスポンス、配信の組み合わせのWebhookがすでにあります。', + 'unique_existing_webhook' => 'このURL、トリガー、レスポンス、配信の組み合わせを持つ別のWebhookがすでにあります。', + 'same_account_type' => 'これらの口座は同じ口座種別でなければなりません', + 'same_account_currency' => 'これらの口座には同じ通貨設定でなければいけません', - '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には、異なるものを指定してください。', - 'digits' => ':attribute は :digits 桁にして下さい。', - 'digits_between' => ':attribute は :min から :max 桁にして下さい。', - 'email' => ':attributeは、有効なメールアドレス形式で指定してください。', - 'filled' => ':attribute は必須です。', - 'exists' => '選択された:attributeは有効ではありません。', - 'image' => ':attributeには、画像を指定してください。', - 'in' => '選択された:attributeは有効ではありません。', - 'integer' => ':attributeには、整数を指定してください。', - 'ip' => ':attribute は有効なIPアドレスにして下さい。', - 'json' => ':attribute は有効なJSON文字列にして下さい。', - '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' => '選択された:attributeは有効ではありません。', - 'numeric' => ':attributeには、数字を指定してください。', - 'numeric_native' => '国内通貨', - 'numeric_destination' => '送金先の金額は数値である必要があります。', - 'numeric_source' => '送金元の金額は数値である必要があります。', - 'regex' => ':attributeには、有効な正規表現を指定してください。', - 'required' => ':attribute 項目は必須です。', - 'required_if' => ':otherが:valueの場合、:attributeを指定してください。', - 'required_unless' => ':other が :values 以外の場合、:attribute フィールドは必須です。', - 'required_with' => ':values が存在する場合、:attribute フィールドは必須です。', - 'required_with_all' => ':attribute 項目は :values が存在する場合は必須です。', - 'required_without' => ':values が存在しな場合、:attribute は必須です。', - 'required_without_all' => ':values が一つも存在しない場合、:attribute は必須です。', - 'same' => ':attribute は :other 一致する必要があります。', - 'size.numeric' => ':attributeには、:sizeを指定してください。', - 'amount_min_over_max' => '最小金額は最大金額より大きくすることはできません。', - 'size.file' => ':attribute は :size キロバイトにして下さい。', - 'size.string' => ':attribute は :size 文字にしてください。', - 'size.array' => ':attribute は :size 個である必要があります。', - 'unique' => ':attributeは既に使用されています。', - 'string' => ':attributeには、文字を指定してください。', - 'url' => ':attributeは、有効なURL形式で指定してください。', - 'timezone' => ':attribute は有効なゾーンにしてください。', - '2fa_code' => 'この欄ではその数値は無効です。', - 'dimensions' => ':attribute は無効な画像サイズです。', - 'distinct' => ':attribute は重複しています。', - 'file' => ':attributeはファイルでなければいけません。', - 'in_array' => ':attributeが:otherに存在しません。', - 'present' => ':attributeが存在している必要があります。', - 'amount_zero' => '合計金額はゼロにすることはできません。', - 'current_target_amount' => '現在の金額は目標金額より少なくなければなりません。', - 'unique_piggy_bank_for_user' => '貯金箱の名前は一意である必要があります。', - 'unique_object_group' => 'グループ名は一意でなければなりません', - 'starts_with' => '値は :values で始まる必要があります。', - 'unique_webhook' => 'このURL、トリガー、レスポンス、配信の組み合わせのWebhookがすでにあります。', - 'unique_existing_webhook' => 'このURL、トリガー、レスポンス、配信の組み合わせを持つ別のWebhookがすでにあります。', - 'same_account_type' => 'これらの口座は同じ口座種別でなければなりません', - 'same_account_currency' => 'これらの口座には同じ通貨設定でなければいけません', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'これは安全なパスワードではありません。もう一度やり直してください。詳細については、https://bit.ly/FF3-password-security を参照してください。', - 'valid_recurrence_rep_type' => '繰り返し取引のタイプが無効です。', - 'valid_recurrence_rep_moment' => '無効な繰り返し設定があります。', - 'invalid_account_info' => 'アカウント情報が正しくありません。', - 'attributes' => [ + 'secure_password' => 'これは安全なパスワードではありません。もう一度やり直してください。詳細については、https://bit.ly/FF3-password-security を参照してください。', + 'valid_recurrence_rep_type' => '繰り返し取引のタイプが無効です。', + 'valid_recurrence_rep_moment' => '無効な繰り返し設定があります。', + 'invalid_account_info' => 'アカウント情報が正しくありません。', + 'attributes' => [ 'email' => 'メールアドレス', 'description' => '概要', 'amount' => '金額', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => '続行するには有効な引き出し元口座 ID および(または)有効な引き出し元口座名を取得する必要があります。', - 'withdrawal_source_bad_data' => '[a] ID「:id」、名称「:name」で検索しましたが、有効な引き出し口座が見つかりませんでした。', - 'withdrawal_dest_need_data' => '[a] 続けるには有効な預け入れ口座IDおよび(または)有効な預け入れ口座名が必要があります。', - 'withdrawal_dest_bad_data' => 'ID「:id」、名称「:name」で検索した結果、有効な預け入れ口座が見つかりませんでした。', + 'withdrawal_source_need_data' => '続行するには有効な引き出し元口座 ID および(または)有効な引き出し元口座名を取得する必要があります。', + 'withdrawal_source_bad_data' => '[a] ID「:id」、名称「:name」で検索しましたが、有効な引き出し口座が見つかりませんでした。', + 'withdrawal_dest_need_data' => '[a] 続けるには有効な預け入れ口座IDおよび(または)有効な預け入れ口座名が必要があります。', + 'withdrawal_dest_bad_data' => 'ID「:id」、名称「:name」で検索した結果、有効な預け入れ口座が見つかりませんでした。', - 'withdrawal_dest_iban_exists' => 'この預け入れ口座IBANはすでに資産口座または負債で使用されており、引き出し先として使用することはできません。', - 'deposit_src_iban_exists' => 'この引き出し口座IBANはすでに資産口座または負債で使用されており、引き出し元として使用することはできません。', + 'withdrawal_dest_iban_exists' => 'この預け入れ口座IBANはすでに資産口座または負債で使用されており、引き出し先として使用することはできません。', + 'deposit_src_iban_exists' => 'この引き出し口座IBANはすでに資産口座または負債で使用されており、引き出し元として使用することはできません。', - 'reconciliation_source_bad_data' => 'ID「:id」または名称「:name」で検索しましたが、有効な照合口座が見つかりませんでした。', + 'reconciliation_source_bad_data' => 'ID「:id」または名称「:name」で検索しましたが、有効な照合口座が見つかりませんでした。', - 'generic_source_bad_data' => '[e] ID「:id」、名称「:name」で検索しましたが、有効な引き出し口座が見つかりませんでした。', + 'generic_source_bad_data' => '[e] ID「:id」、名称「:name」で検索しましたが、有効な引き出し口座が見つかりませんでした。', - 'deposit_source_need_data' => '続行するには、有効な引き出し元口座 ID および(または)有効な引き出し元口座名を取得する必要があります。', - 'deposit_source_bad_data' => '[b] ID「:id」、名称「:name」で検索しましたが、有効な引き出し口座が見つかりませんでした。', - 'deposit_dest_need_data' => '[b] 続けるには有効な預け入れ口座IDおよび(または)有効な預け入れ口座名が必要があります。', - 'deposit_dest_bad_data' => 'ID「:id」、名称「:name」で検索した結果、有効な預け入れ先口座が見つかりませんでした。', - 'deposit_dest_wrong_type' => '預け入れ先口座が適切なタイプではありません。', + 'deposit_source_need_data' => '続行するには、有効な引き出し元口座 ID および(または)有効な引き出し元口座名を取得する必要があります。', + 'deposit_source_bad_data' => '[b] ID「:id」、名称「:name」で検索しましたが、有効な引き出し口座が見つかりませんでした。', + 'deposit_dest_need_data' => '[b] 続けるには有効な預け入れ口座IDおよび(または)有効な預け入れ口座名が必要があります。', + 'deposit_dest_bad_data' => 'ID「:id」、名称「:name」で検索した結果、有効な預け入れ先口座が見つかりませんでした。', + 'deposit_dest_wrong_type' => '預け入れ先口座が適切なタイプではありません。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => '続行するには、有効な引き出し元口座 ID および(または)有効な引き出し元口座名を取得する必要があります。', + 'transfer_source_bad_data' => '[c] ID「:id」、名称「:name」で検索しましたが、有効な引き出し口座が見つかりませんでした。', + 'transfer_dest_need_data' => '[c] 続けるには有効な預け入れ口座IDおよび(または)有効な預け入れ口座名が必要があります。', + 'transfer_dest_bad_data' => 'ID「:id」、名称「:name」で検索した結果、有効な預け入れ先口座が見つかりませんでした。', + 'need_id_in_edit' => '各分割は transaction_journal_id (有効な ID または 0 のいずれか) でなければなりません。', - 'transfer_source_need_data' => '続行するには、有効な引き出し元口座 ID および(または)有効な引き出し元口座名を取得する必要があります。', - 'transfer_source_bad_data' => '[c] ID「:id」、名称「:name」で検索しましたが、有効な引き出し口座が見つかりませんでした。', - 'transfer_dest_need_data' => '[c] 続けるには有効な預け入れ口座IDおよび(または)有効な預け入れ口座名が必要があります。', - 'transfer_dest_bad_data' => 'ID「:id」、名称「:name」で検索した結果、有効な預け入れ先口座が見つかりませんでした。', - 'need_id_in_edit' => '各分割は transaction_journal_id (有効な ID または 0 のいずれか) でなければなりません。', + 'ob_source_need_data' => '続行するには、有効な引き出し元口座 ID および(または)有効な引き出し元口座名を取得する必要があります。', + 'lc_source_need_data' => '続行するには有効な引き出し元口座 ID が必要です。', + 'ob_dest_need_data' => '[d] 続行するには、有効な預け入れ口座IDおよび(または)有効な預け入れ口座名を得る必要があります。', + 'ob_dest_bad_data' => 'ID「:id」、名称「:name」で検索した結果、有効な預け入れ先口座が見つかりませんでした。', + 'reconciliation_either_account' => '照合を送信するには、引き出し口座または預け入れ口座を送信する必要があります。両方ではありません。', - 'ob_source_need_data' => '続行するには、有効な引き出し元口座 ID および(または)有効な引き出し元口座名を取得する必要があります。', - 'lc_source_need_data' => '続行するには有効な引き出し元口座 ID が必要です。', - 'ob_dest_need_data' => '[d] 続行するには、有効な預け入れ口座IDおよび(または)有効な預け入れ口座名を得る必要があります。', - 'ob_dest_bad_data' => 'ID「:id」、名称「:name」で検索した結果、有効な預け入れ先口座が見つかりませんでした。', - 'reconciliation_either_account' => '照合を送信するには、引き出し口座または預け入れ口座を送信する必要があります。両方ではありません。', + 'generic_invalid_source' => 'この口座を引き出し元口座として使用することはできません。', + 'generic_invalid_destination' => 'この口座を預け入れ先口座として使用することはできません。', - 'generic_invalid_source' => 'この口座を引き出し元口座として使用することはできません。', - 'generic_invalid_destination' => 'この口座を預け入れ先口座として使用することはできません。', + 'generic_no_source' => '引き出し口座の情報か取引ジャーナルIDを送信する必要があります。', + 'generic_no_destination' => '預け入れ口座の情報か取引ジャーナルIDを送信する必要があります。', - 'generic_no_source' => '引き出し口座の情報か取引ジャーナルIDを送信する必要があります。', - 'generic_no_destination' => '預け入れ口座の情報か取引ジャーナルIDを送信する必要があります。', - - 'gte.numeric' => ':attribute は :value 以上でなければなりません。', - 'gt.numeric' => ':attribute は :value より大きな値でなければいけません。', - 'gte.file' => ':attribute は :value キロバイト以上でなければなりません。', - 'gte.string' => ':attribute は :value 文字以上でなければなりません。', - 'gte.array' => ':attribute は :value 個以上でなければいけません。', + 'gte.numeric' => ':attribute は :value 以上でなければなりません。', + 'gt.numeric' => ':attribute は :value より大きな値でなければいけません。', + 'gte.file' => ':attribute は :value キロバイト以上でなければなりません。', + 'gte.string' => ':attribute は :value 文字以上でなければなりません。', + 'gte.array' => ':attribute は :value 個以上でなければいけません。', 'amount_required_for_auto_budget' => '金額は必須です。', 'auto_budget_amount_positive' => '金額はゼロ以上でなければなりません。', + 'auto_budget_period_mandatory' => '自動予算期間は必須項目です。', // no access to administration: diff --git a/resources/lang/ko_KR/api.php b/resources/lang/ko_KR/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/ko_KR/api.php +++ b/resources/lang/ko_KR/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/ko_KR/auth.php b/resources/lang/ko_KR/auth.php index e05b646a96..bece324bbd 100644 --- a/resources/lang/ko_KR/auth.php +++ b/resources/lang/ko_KR/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => '로그인 정보가 일치하지 않습니다.', 'throttle' => '로그인 시도가 너무 많습니다. :seconds초 후에 다시 시도하십시오.', diff --git a/resources/lang/ko_KR/breadcrumbs.php b/resources/lang/ko_KR/breadcrumbs.php index 5520cd9028..1072d83e94 100644 --- a/resources/lang/ko_KR/breadcrumbs.php +++ b/resources/lang/ko_KR/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => '홈', - 'budgets' => '예산', - 'subscriptions' => '구독', - 'transactions' => '거래', - 'title_expenses' => '지출', - 'title_withdrawal' => '지출', - 'title_revenue' => '수익 / 수입', - 'title_deposit' => '수익 / 수입', - 'title_transfer' => '이체', - 'title_transfers' => '이체', - 'edit_currency' => '통화 ":name" 수정하기', - 'delete_currency' => '통화 ":name" 삭제하기', - 'newPiggyBank' => '새 저금통 만들기', - 'edit_piggyBank' => '":name" 저금통 수정하기', - 'preferences' => '환경 설정', - 'profile' => '프로필', - 'accounts' => '계정', - 'changePassword' => '비밀번호 변경', - 'change_email' => '이메일 주소 변경', - 'bills' => '청구서', - 'newBill' => '새 청구서', - 'edit_bill' => '청구서 ":name" 수정하기', - 'delete_bill' => '청구서 ":name" 삭제하기', - 'reports' => '보고서', - 'search_result' => '":query"의 검색결과', - 'withdrawal_list' => '지출', - 'Withdrawal_list' => '지출', - 'deposit_list' => '수익, 소득 및 예금', - 'transfer_list' => '송금', - 'transfers_list' => '송금', + 'home' => '홈', + 'budgets' => '예산', + 'subscriptions' => '구독', + 'transactions' => '거래', + 'title_expenses' => '지출', + 'title_withdrawal' => '지출', + 'title_revenue' => '수익 / 수입', + 'title_deposit' => '수익 / 수입', + 'title_transfer' => '이체', + 'title_transfers' => '이체', + 'edit_currency' => '통화 ":name" 수정하기', + 'delete_currency' => '통화 ":name" 삭제하기', + 'newPiggyBank' => '새 저금통 만들기', + 'edit_piggyBank' => '":name" 저금통 수정하기', + 'preferences' => '환경 설정', + 'profile' => '프로필', + 'accounts' => '계정', + 'changePassword' => '비밀번호 변경', + 'change_email' => '이메일 주소 변경', + 'bills' => '청구서', + 'newBill' => '새 청구서', + 'edit_bill' => '청구서 ":name" 수정하기', + 'delete_bill' => '청구서 ":name" 삭제하기', + 'reports' => '보고서', + 'search_result' => '":query"의 검색결과', + 'withdrawal_list' => '지출', + 'Withdrawal_list' => '지출', + 'deposit_list' => '수익, 소득 및 예금', + 'transfer_list' => '송금', + 'transfers_list' => '송금', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => '조정', 'create_withdrawal' => '새로운 환불 만들기', 'create_deposit' => '새로운 예금 만들기', diff --git a/resources/lang/ko_KR/components.php b/resources/lang/ko_KR/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/ko_KR/components.php +++ b/resources/lang/ko_KR/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ko_KR/config.php b/resources/lang/ko_KR/config.php index a5f5dfb1bc..241d3ca965 100644 --- a/resources/lang/ko_KR/config.php +++ b/resources/lang/ko_KR/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'ko', - 'locale' => 'ko, Korean, ko_KR.utf8, ko_KR.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'YYYY년 M월', + 'html_language' => 'ko', + 'locale' => 'ko, Korean, ko_KR.utf8, ko_KR.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'YYYY년 M월', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'YYYY년 M월 D일', - 'month_and_day_fns' => 'y년 MMMM d일', - 'month_and_day_js' => 'YYYY년 MM월 DD일', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'YYYY년 M월 D일', + 'month_and_day_fns' => 'y년 MMMM d일', + 'month_and_day_js' => 'YYYY년 MM월 DD일', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'YYYY년 M월 D일 ddd', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'YYYY년 M월 D일 ddd', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'M월 D일', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'M월 D일', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'YYYY년 M월 D일 HH:mm:ss', + 'date_time_fns' => 'YYYY년 M월 D일 HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'YYYY년 M월 D일 HH:mm:ss', - 'date_time_fns' => 'YYYY년 M월 D일 HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'YYYY년 MM월 D일', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'YYYY년 MM월 D일', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => 'YYYY년 w주', - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "YYYY년 w주", + // 'year' => '%Y', + 'year_js' => 'YYYY년', - //'year' => '%Y', - 'year_js' => 'YYYY년', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "yyyy년 Q사분기", - 'half_year_fns' => "yyyy년 H[반기]", - 'dow_1' => '월요일', - 'dow_2' => '화요일', - 'dow_3' => '수요일', - 'dow_4' => '목요일', - 'dow_5' => '금요일', - 'dow_6' => '토요일', - 'dow_7' => '일요일', + 'quarter_fns' => 'yyyy년 Q사분기', + 'half_year_fns' => 'yyyy년 H[반기]', + 'dow_1' => '월요일', + 'dow_2' => '화요일', + 'dow_3' => '수요일', + 'dow_4' => '목요일', + 'dow_5' => '금요일', + 'dow_6' => '토요일', + 'dow_7' => '일요일', ]; /* diff --git a/resources/lang/ko_KR/demo.php b/resources/lang/ko_KR/demo.php index 180cfc8cdf..f977990f4f 100644 --- a/resources/lang/ko_KR/demo.php +++ b/resources/lang/ko_KR/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ko_KR/email.php b/resources/lang/ko_KR/email.php index 1d735c5bf8..ee6ab833ae 100644 --- a/resources/lang/ko_KR/email.php +++ b/resources/lang/ko_KR/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Firefly III 설치 테스트 메시지', 'admin_test_body' => '이것은 Firefly III 인스턴스의 테스트 메시지 입니다. :email로 보냈습니다.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => '초대장이 생성되었습니다', 'invitation_created_body' => '관리자:email 가 이메일 주소 ":invitee"에 대한 초대장을 생성하였습니다. 초대는 48시간동안 유효합니다.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => '비밀번호 초기화:', 'registered_doc_link' => '문서:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => '새로운 Firefly III 버전을 사용할 수 있습니다', @@ -146,8 +143,9 @@ return [ 'error_github_text' => '원한다면 https://github.com/firefly-iii/firefly-iii/issues 에 새로운 이슈를 오픈할 수도 있습니다.', 'error_stacktrace_below' => '전체 스택 추적은 다음과 같습니다:', 'error_headers' => '다음 헤더도 관련이 있을 수 있습니다:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III가 새로운 거래를 생성하였습니다|Firefly III가 :count개의 새로운 거래를 생성하였습니다', 'new_journals_header' => 'Firefly III가 새로운 거래를 생성하였습니다. Firefly III 설치에서 찾을 수 있습니다:|Firefly III가 :count개의 새로운 거래를 생성하였습니다. Firefly III 설치에서 찾을 수 있습니다:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => '**":name"** 청구서는 :date에 만료됩니다. **오늘**까지 입니다!', 'bill_warning_extension_date_zero' => '**":name"** 청구서는 :date에 연장되거나 취소될 예정입니다. **오늘**까지 입니다!', 'bill_warning_please_action' => '적절한 조치를 취하시기 바랍니다.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ko_KR/errors.php b/resources/lang/ko_KR/errors.php index d7f51d3256..4022bc65ef 100644 --- a/resources/lang/ko_KR/errors.php +++ b/resources/lang/ko_KR/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack trace', 'more_info' => '추가 정보', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'storage/logs 디렉토리의 로그 파일에서 추가정보를 수집하세요. 도커를 실행중이라면 docker logs -f [container]를 사용하세요.', - 'collect_info_more' => 'FAQ에서 오류 정보 수집에 대한 더 자세한 정보를 읽을 수 있습니다.', - 'github_help' => 'GitHub에서 도움 얻기', - 'github_instructions' => 'GitHub에서 새로운 이슈를 여는 것을 환영합니다.', - 'use_search' => '검색을 이용하세요!', - 'include_info' => '이 디버그 페이지의 정보를 포함합니다.', - 'tell_more' => '우리에게 "이런! 이라고 쓰여있네요" 보다 더 자세히 알려주세요.', - 'include_logs' => '에러 로그를 포함합니다 (상단 참조).', - 'what_did_you_do' => '무엇을 하고 있었는지 알려주세요.', - 'offline_header' => '오프라인 상태일 수 있습니다.', - 'offline_unreachable' => 'Firefly III에 접근할 수 없습니다. 장치가 현재 오프라인이거나 서버가 동작하지 않습니다.', - 'offline_github' => '장치와 서버가 온라인인 것이 확실하다면 GitHub에서 티켓을 만들어주세요.', - + 'collect_info' => 'storage/logs 디렉토리의 로그 파일에서 추가정보를 수집하세요. 도커를 실행중이라면 docker logs -f [container]를 사용하세요.', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'GitHub에서 도움 얻기', + 'github_instructions' => 'GitHub에서 새로운 이슈를 여는 것을 환영합니다.', + 'use_search' => '검색을 이용하세요!', + 'include_info' => '이 디버그 페이지의 정보를 포함합니다.', + 'tell_more' => '우리에게 "이런! 이라고 쓰여있네요" 보다 더 자세히 알려주세요.', + 'include_logs' => '에러 로그를 포함합니다 (상단 참조).', + 'what_did_you_do' => '무엇을 하고 있었는지 알려주세요.', + 'offline_header' => '오프라인 상태일 수 있습니다.', + 'offline_unreachable' => 'Firefly III에 접근할 수 없습니다. 장치가 현재 오프라인이거나 서버가 동작하지 않습니다.', + 'offline_github' => '장치와 서버가 온라인인 것이 확실하다면 GitHub에서 티켓을 만들어주세요.', ]; diff --git a/resources/lang/ko_KR/firefly.php b/resources/lang/ko_KR/firefly.php index 47da4f55ef..427402a3b7 100644 --- a/resources/lang/ko_KR/firefly.php +++ b/resources/lang/ko_KR/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => '닫기', - 'actions' => '액션', - 'edit' => '수정', - 'delete' => '삭제', - 'split' => '나누기', - 'single_split' => '나누기', - 'clone' => '복사', - 'confirm_action' => '액션 확인', - 'last_seven_days' => '최근 7일', - 'last_thirty_days' => '최근 30일', - 'last_180_days' => '최근 180일', - 'month_to_date' => '월간 누계', - 'year_to_date' => '연간 누계', - 'YTD' => 'YTD', - 'welcome_back' => '무슨 일이죠?', - 'everything' => '모든 것', - 'today' => '오늘', - 'customRange' => '맞춤 범위', - 'date_range' => '날짜 범위', - 'apply' => '적용', - 'select_date' => '날짜 선택', - 'cancel' => '취소', - 'from' => '에서', - 'to' => '에게', - 'structure' => '구조', - 'help_translating' => '이 도움말 텍스트는 아직 귀하의 언어를 지원하지 않습니다. 번역을 도와 주시겠습니까?', - 'showEverything' => '모두 보기', - 'never' => '절대', - 'no_results_for_empty_search' => '검색 조건이 비어서 아무것도 찾을 수 없습니다.', - 'removed_amount' => ':amount 삭제됨', - 'added_amount' => ':amount 추가됨', - 'asset_account_role_help' => '선택에 따른 추가 옵션은 나중에 설정할 수 있습니다.', - 'Opening balance' => '초기 잔고', - 'create_new_stuff' => '새로 만들기', - 'new_withdrawal' => '신규 출금', - 'create_new_transaction' => '새로운 거래 만들기', - 'sidebar_frontpage_create' => '생성', - 'new_transaction' => '새 거래', - 'no_rules_for_bill' => '이 청구서는 관련된 규칙이 없습니다.', - 'go_to_asset_accounts' => '자산 계정 보기', - 'go_to_budgets' => '예산으로 이동', - 'go_to_withdrawals' => '출금으로 이동', - 'clones_journal_x' => '이 거래는 ":description" (#:id)의 복제본입니다.', - 'go_to_categories' => '카테고리로 이동', - 'go_to_bills' => '청구서로 이동', - 'go_to_expense_accounts' => '지출 계정 보기', - 'go_to_revenue_accounts' => '수익 계정 보기', - 'go_to_piggies' => '저금통으로 이동', - 'new_deposit' => '신규 입금', - 'new_transfer' => '신규 이체', - 'new_transfers' => '신규 이체', - 'new_asset_account' => '새 자산 계정', - 'new_expense_account' => '새 지출 계정', - 'new_revenue_account' => '새 수익 계정', - 'new_liabilities_account' => '새 부채', - 'new_budget' => '새 예산', - 'new_bill' => '새 청구서', - 'block_account_logout' => '로그아웃되었습니다. 차단된 계정은 이 사이트를 사용할 수 없습니다. 유효한 이메일 주소로 등록하셨습니까?', - 'flash_success' => '성공!', - 'flash_info' => '메시지', - 'flash_warning' => '경고!', - 'flash_error' => '오류!', - 'flash_danger' => '위험!', - 'flash_info_multiple' => '메시지가 하나 있습니다|매시지가 :count개 있습니다', - 'flash_error_multiple' => '오류가 하나 있습니다|오류가 :count개 있습니다', - 'net_worth' => '순자산', - 'help_for_this_page' => '이 페이지에 대한 도움말', - 'help_for_this_page_body' => '이 페이지에 대한 자세한 정보는 문서에서 확인할 수 있습니다.', - 'two_factor_welcome' => '안녕하세요!', - 'two_factor_enter_code' => '계속하려면 2단계 인증 코드를 입력하세요. 애플리케이션에서 자동으로 생성할 수 있습니다.', - 'two_factor_code_here' => '여기에 코드 입력', - 'two_factor_title' => '2단계 인증', - 'authenticate' => '인증', - 'two_factor_forgot_title' => '2단계 인증 분실', - 'two_factor_forgot' => '2단계 인증을 잊었습니다.', - 'two_factor_lost_header' => '2단계 인증을 분실하셨나요?', - 'two_factor_lost_intro' => '백업 코드도 분실하셨다면 운이 나쁘신 것입니다. 이 문제는 웹 인터페이스에서 해결할 수 있는 문제가 아닙니다. 두 가지 선택지가 있습니다.', - 'two_factor_lost_fix_self' => 'Firefly III 인스턴스를 직접 실행하는 경우 자주 묻는 질문(FAQ)의 이 항목을 읽고 지침을 확인하세요.', - 'two_factor_lost_fix_owner' => '그렇지 않은 경우 사이트 소유자 :site_owner에게 이메일을 보내 2단계 인증을 재설정해 달라고 요청하세요.', - 'mfa_backup_code' => '백업 코드를 사용하여 Firefly III에 로그인했습니다. 코드는 다시 사용할 수 없으므로 목록에서 삭제하세요.', - 'pref_two_factor_new_backup_codes' => '새 백업 코드 얻기', - 'pref_two_factor_backup_code_count' => ':count개의 유효한 백업코드가 있습니다.|:count개의 유효한 백업코드가 있습니다.', - '2fa_i_have_them' => '저장했습니다!', - 'warning_much_data' => ':days일의 데이터를 로드하는데 시간이 걸릴 수 있습니다.', - 'registered' => '성공적으로 등록되었습니다!', - 'Default asset account' => '기본 자산 계정', - 'no_budget_pointer' => '예산이 아직 없는 것 같습니다. 예산 페이지에서 예산을 만들어야 합니다. 예산은 지출을 추적하는데 도움이 됩니다.', - 'no_bill_pointer' => '청구서가 아직 없는 것 같습니다. 청구서 페이지에서 청구서를 만들어야 합니다. 청구서는 비용을 추적하는 데 도움이 됩니다.', - 'Savings account' => '예금 계좌', - 'Credit card' => '신용카드', - 'source_accounts' => '소스 계정|소스 계정', - 'destination_accounts' => '대상 계정|대상 계정', - 'user_id_is' => '사용자 Id는 :user입니다', - 'field_supports_markdown' => '이 필드는 마크다운을 지원합니다.', - 'need_more_help' => 'Firefly III를 사용하는데 도움이 필요하다면 Github에서 티켓을 열어주세요.', - 'reenable_intro_text' => '소개 안내를 다시 활성화할 수도 있습니다.', - 'intro_boxes_after_refresh' => '페이지를 새로고침하면 소개 상자가 다시 나타납니다.', - 'show_all_no_filter' => '날짜별로 그룹화하지 않고 모든 거래를 표시합니다.', - 'expenses_by_category' => '카테고리별 지출', - 'expenses_by_budget' => '예산별 지출', - 'income_by_category' => '카테고리별 수입', - 'expenses_by_asset_account' => '자산 계정별 지출', - 'expenses_by_expense_account' => '지출 계정별 지출', - 'cannot_redirect_to_account' => 'Firefly III가 올바른 페이지로 리디렉션할 수 없습니다. 죄송합니다.', - 'sum_of_expenses' => '지출 합계', - 'sum_of_income' => '수입 합계', - 'liabilities' => '부채', - 'spent_in_specific_budget' => '":budget" 예산에서 지출', - 'spent_in_specific_double' => '":account" 계정에서 지출', - 'earned_in_specific_double' => '":account" 계정에서 소득', - 'source_account' => '소스 계정', - 'source_account_reconciliation' => '조정 거래의 소스 계정은 편집할 수 없습니다.', - 'destination_account' => '대상 계정', - 'destination_account_reconciliation' => '조정 거래의 대상 계정은 편집할 수 없습니다.', - 'sum_of_expenses_in_budget' => '":budget" 예산에서 총 지출', - 'left_in_budget_limit' => '예산 책정에 따른 남은 지출', - 'current_period' => '현재 기간', - 'show_the_current_period_and_overview' => '현재 기간 및 걔요 표시', - 'pref_languages_locale' => '영어 외의 언어가 제대로 동작하려면 운영 체제에 올바른 로케일 정보가 있어야 합니다. 그렇지 않은 경우 통화 데이터, 날짜 및 금액의 형식이 잘못 지정될 수 있습니다.', - 'budget_in_period' => ':currency에서 :start와 :end 사이의 예산 ":name"에 대한 모든 거래', - 'chart_budget_in_period' => ':currency에서 :start와 :end 사이의 예산 ":name"에 대한 모든 거래에 대한 차트', - 'chart_budget_in_period_only_currency' => '예산을 책정한 금액은 :currency이므로 이 차트에는 :currency의 거래만 표시됩니다.', - 'chart_account_in_period' => ':start와 :end 동안 ":name" (:balance) 계정의 모든 거래에 대한 차트', - 'chart_category_in_period' => ':start와 :end 동안 ":name" 카테고리의 모든 거래에 대한 차트', - 'chart_category_all' => '":name" 카테고리의 모든 거래에 대한 차트', - 'clone_withdrawal' => '이 출금을 복제합니다', - 'clone_deposit' => '이 입금을 복제합니다', - 'clone_transfer' => '이 이체를 복제합니다', - 'multi_select_no_selection' => '선택하지 않음', - 'multi_select_select_all' => '전체 선택', - 'multi_select_n_selected' => '선택됨', - 'multi_select_all_selected' => '모두 선택됨', - 'multi_select_filter_placeholder' => '찾기..', - 'intro_next_label' => '다음', - 'intro_prev_label' => '이전', - 'intro_skip_label' => '건너뛰기', - 'intro_done_label' => '완료', - 'between_dates_breadcrumb' => ':start와 :end 사이', - 'all_journals_without_budget' => '예산이 없는 모든 거래', - 'journals_without_budget' => '예산이 없는 거래', - 'all_journals_without_category' => '카테고리가 없는 모든 거래', - 'journals_without_category' => '카테고리가 없는 거래', - 'all_journals_for_account' => ':name 계정에 대한 모든 거래', - 'chart_all_journals_for_account' => ':name 계정에 대한 모든 거래 차트', - 'journals_in_period_for_account' => ':start와 :end 동안 ":name" 계정의 모든 거래', - 'journals_in_period_for_account_js' => '{start} 와 {end} 동안 {title} 계정의 모든 거래', - 'transferred' => '이체', - 'all_withdrawal' => '모든 지출', - 'all_transactions' => '모든 거래', - 'title_withdrawal_between' => ':start와 :end 사이의 모든 지출', - 'all_deposit' => '모든 수익', - 'title_deposit_between' => ':start와 :end 사이의 모든 수익', - 'all_transfers' => '모든 이체', - 'title_transfers_between' => ':start와 :end 사이의 모든 이체', - 'all_transfer' => '모든 이체', - 'all_journals_for_tag' => '":tag" 태그에 대한 모든 거래', - 'title_transfer_between' => ':start와 :end 사이의 모든 이체', - 'all_journals_for_category' => ':name 카테고리에 대한 모든 거래', - 'all_journals_for_budget' => ':name 예산에 대한 모든 거래', - 'chart_all_journals_for_budget' => ':name 예산에 대한 모든 거래 차트', - 'journals_in_period_for_category' => ':start와 :end 동안 ":name" 카테고리의 모든 거래', - 'journals_in_period_for_tag' => ':start와 :end 동안 :tag 태그의 모든 거래', - 'not_available_demo_user' => '액세스하려는 기능은 데모 사용자가 사용할 수 없습니다.', - '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' => '유효하지 않은 서버 설정', - 'invalid_locale_settings' => '서버에 필요한 패키지가 없기 때문에 Firefly III에서 금액을 형식화할 수 없습니다. 이 작업을 수행하는 방법에 대한 지침이 있습니다.', - 'quickswitch' => '퀵스위치', - 'sign_in_to_start' => '세션을 시작하려면 로그인하세요.', - 'sign_in' => '로그인', - 'register_new_account' => '새로운 계정 등록', - 'forgot_my_password' => '비밀번호를 잊어버렸습니다', - 'problems_with_input' => '입력에 오류가 있습니다.', - 'reset_password' => '비밀번호 초기화', - 'button_reset_password' => '비밀번호 초기화', - 'reset_button' => '초기화', - 'want_to_login' => '로그인하고 싶습니다', - 'login_page_title' => 'Firefly III 로그인', - 'register_page_title' => 'Firefly III 등록하기', - 'forgot_pw_page_title' => 'Firefly III 비밀번호를 잊어버렸습니다', - 'reset_pw_page_title' => 'Firefly III의 비밀번호 재설정', - 'cannot_reset_demo_user' => '데모 사용자의 비밀번호는 재설정할 수 없습니다.', - 'no_att_demo_user' => '데모 유저는 첨부 파일을 업로드할 수 없습니다.', - 'button_register' => '등록', - 'authorization' => '인증', - 'active_bills_only' => '활성화된 청구서만 포함', - 'active_bills_only_total' => '모든 활성화된 청구서', - 'active_exp_bills_only' => '활성화 및 예상 청구서만 포함', - 'active_exp_bills_only_total' => '모든 활성화 및 예상 청구서만 포함', - 'per_period_sum_1D' => '일간 예상 비용', - 'per_period_sum_1W' => '주간 예상 비용', - 'per_period_sum_1M' => '월간 예상 비용', - 'per_period_sum_3M' => '분기 예상 비용', - 'per_period_sum_6M' => '반기 예상 비용', - 'per_period_sum_1Y' => '년간 예상 비용', - 'average_per_bill' => '청구서당 평균', - 'expected_total' => '예상 합계', - 'reconciliation_account_name' => ':name 조정 (:currency)', - 'saved' => '저장 완료', - 'advanced_options' => '고급 옵션', - 'advanced_options_explain' => 'Firefly III의 일부 페이지에는 이 버튼 뒤에 고급 옵션이 숨겨져 있습니다. 이 페이지에는 멋진 옵션이 없지만 다른 페이지도 확인해 보세요!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => '닫기', + 'actions' => '액션', + 'edit' => '수정', + 'delete' => '삭제', + 'split' => '나누기', + 'single_split' => '나누기', + 'clone' => '복사', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => '액션 확인', + 'last_seven_days' => '최근 7일', + 'last_thirty_days' => '최근 30일', + 'last_180_days' => '최근 180일', + 'month_to_date' => '월간 누계', + 'year_to_date' => '연간 누계', + 'YTD' => 'YTD', + 'welcome_back' => '무슨 일이죠?', + 'everything' => '모든 것', + 'today' => '오늘', + 'customRange' => '맞춤 범위', + 'date_range' => '날짜 범위', + 'apply' => '적용', + 'select_date' => '날짜 선택', + 'cancel' => '취소', + 'from' => '에서', + 'to' => '에게', + 'structure' => '구조', + 'help_translating' => '이 도움말 텍스트는 아직 귀하의 언어를 지원하지 않습니다. 번역을 도와 주시겠습니까?', + 'showEverything' => '모두 보기', + 'never' => '절대', + 'no_results_for_empty_search' => '검색 조건이 비어서 아무것도 찾을 수 없습니다.', + 'removed_amount' => ':amount 삭제됨', + 'added_amount' => ':amount 추가됨', + 'asset_account_role_help' => '선택에 따른 추가 옵션은 나중에 설정할 수 있습니다.', + 'Opening balance' => '초기 잔고', + 'create_new_stuff' => '새로 만들기', + 'new_withdrawal' => '신규 출금', + 'create_new_transaction' => '새로운 거래 만들기', + 'sidebar_frontpage_create' => '생성', + 'new_transaction' => '새 거래', + 'no_rules_for_bill' => '이 청구서는 관련된 규칙이 없습니다.', + 'go_to_asset_accounts' => '자산 계정 보기', + 'go_to_budgets' => '예산으로 이동', + 'go_to_withdrawals' => '출금으로 이동', + 'clones_journal_x' => '이 거래는 ":description" (#:id)의 복제본입니다.', + 'go_to_categories' => '카테고리로 이동', + 'go_to_bills' => '청구서로 이동', + 'go_to_expense_accounts' => '지출 계정 보기', + 'go_to_revenue_accounts' => '수익 계정 보기', + 'go_to_piggies' => '저금통으로 이동', + 'new_deposit' => '신규 입금', + 'new_transfer' => '신규 이체', + 'new_transfers' => '신규 이체', + 'new_asset_account' => '새 자산 계정', + 'new_expense_account' => '새 지출 계정', + 'new_revenue_account' => '새 수익 계정', + 'new_liabilities_account' => '새 부채', + 'new_budget' => '새 예산', + 'new_bill' => '새 청구서', + 'block_account_logout' => '로그아웃되었습니다. 차단된 계정은 이 사이트를 사용할 수 없습니다. 유효한 이메일 주소로 등록하셨습니까?', + 'flash_success' => '성공!', + 'flash_info' => '메시지', + 'flash_warning' => '경고!', + 'flash_error' => '오류!', + 'flash_danger' => '위험!', + 'flash_info_multiple' => '메시지가 하나 있습니다|매시지가 :count개 있습니다', + 'flash_error_multiple' => '오류가 하나 있습니다|오류가 :count개 있습니다', + 'net_worth' => '순자산', + 'help_for_this_page' => '이 페이지에 대한 도움말', + 'help_for_this_page_body' => '이 페이지에 대한 자세한 정보는 문서에서 확인할 수 있습니다.', + 'two_factor_welcome' => '안녕하세요!', + 'two_factor_enter_code' => '계속하려면 2단계 인증 코드를 입력하세요. 애플리케이션에서 자동으로 생성할 수 있습니다.', + 'two_factor_code_here' => '여기에 코드 입력', + 'two_factor_title' => '2단계 인증', + 'authenticate' => '인증', + 'two_factor_forgot_title' => '2단계 인증 분실', + 'two_factor_forgot' => '2단계 인증을 잊었습니다.', + 'two_factor_lost_header' => '2단계 인증을 분실하셨나요?', + 'two_factor_lost_intro' => '백업 코드도 분실하셨다면 운이 나쁘신 것입니다. 이 문제는 웹 인터페이스에서 해결할 수 있는 문제가 아닙니다. 두 가지 선택지가 있습니다.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner에게 이메일을 보내 2단계 인증을 재설정해 달라고 요청하세요.', + 'mfa_backup_code' => '백업 코드를 사용하여 Firefly III에 로그인했습니다. 코드는 다시 사용할 수 없으므로 목록에서 삭제하세요.', + 'pref_two_factor_new_backup_codes' => '새 백업 코드 얻기', + 'pref_two_factor_backup_code_count' => ':count개의 유효한 백업코드가 있습니다.|:count개의 유효한 백업코드가 있습니다.', + '2fa_i_have_them' => '저장했습니다!', + 'warning_much_data' => ':days일의 데이터를 로드하는데 시간이 걸릴 수 있습니다.', + 'registered' => '성공적으로 등록되었습니다!', + 'Default asset account' => '기본 자산 계정', + 'no_budget_pointer' => '예산이 아직 없는 것 같습니다. 예산 페이지에서 예산을 만들어야 합니다. 예산은 지출을 추적하는데 도움이 됩니다.', + 'no_bill_pointer' => '청구서가 아직 없는 것 같습니다. 청구서 페이지에서 청구서를 만들어야 합니다. 청구서는 비용을 추적하는 데 도움이 됩니다.', + 'Savings account' => '예금 계좌', + 'Credit card' => '신용카드', + 'source_accounts' => '소스 계정|소스 계정', + 'destination_accounts' => '대상 계정|대상 계정', + 'user_id_is' => '사용자 Id는 :user입니다', + 'field_supports_markdown' => '이 필드는 마크다운을 지원합니다.', + 'need_more_help' => 'Firefly III를 사용하는데 도움이 필요하다면 Github에서 티켓을 열어주세요.', + 'reenable_intro_text' => '소개 안내를 다시 활성화할 수도 있습니다.', + 'intro_boxes_after_refresh' => '페이지를 새로고침하면 소개 상자가 다시 나타납니다.', + 'show_all_no_filter' => '날짜별로 그룹화하지 않고 모든 거래를 표시합니다.', + 'expenses_by_category' => '카테고리별 지출', + 'expenses_by_budget' => '예산별 지출', + 'income_by_category' => '카테고리별 수입', + 'expenses_by_asset_account' => '자산 계정별 지출', + 'expenses_by_expense_account' => '지출 계정별 지출', + 'cannot_redirect_to_account' => 'Firefly III가 올바른 페이지로 리디렉션할 수 없습니다. 죄송합니다.', + 'sum_of_expenses' => '지출 합계', + 'sum_of_income' => '수입 합계', + 'liabilities' => '부채', + 'spent_in_specific_budget' => '":budget" 예산에서 지출', + 'spent_in_specific_double' => '":account" 계정에서 지출', + 'earned_in_specific_double' => '":account" 계정에서 소득', + 'source_account' => '소스 계정', + 'source_account_reconciliation' => '조정 거래의 소스 계정은 편집할 수 없습니다.', + 'destination_account' => '대상 계정', + 'destination_account_reconciliation' => '조정 거래의 대상 계정은 편집할 수 없습니다.', + 'sum_of_expenses_in_budget' => '":budget" 예산에서 총 지출', + 'left_in_budget_limit' => '예산 책정에 따른 남은 지출', + 'current_period' => '현재 기간', + 'show_the_current_period_and_overview' => '현재 기간 및 걔요 표시', + 'pref_languages_locale' => '영어 외의 언어가 제대로 동작하려면 운영 체제에 올바른 로케일 정보가 있어야 합니다. 그렇지 않은 경우 통화 데이터, 날짜 및 금액의 형식이 잘못 지정될 수 있습니다.', + 'budget_in_period' => ':currency에서 :start와 :end 사이의 예산 ":name"에 대한 모든 거래', + 'chart_budget_in_period' => ':currency에서 :start와 :end 사이의 예산 ":name"에 대한 모든 거래에 대한 차트', + 'chart_budget_in_period_only_currency' => '예산을 책정한 금액은 :currency이므로 이 차트에는 :currency의 거래만 표시됩니다.', + 'chart_account_in_period' => ':start와 :end 동안 ":name" (:balance) 계정의 모든 거래에 대한 차트', + 'chart_category_in_period' => ':start와 :end 동안 ":name" 카테고리의 모든 거래에 대한 차트', + 'chart_category_all' => '":name" 카테고리의 모든 거래에 대한 차트', + 'clone_withdrawal' => '이 출금을 복제합니다', + 'clone_deposit' => '이 입금을 복제합니다', + 'clone_transfer' => '이 이체를 복제합니다', + 'multi_select_no_selection' => '선택하지 않음', + 'multi_select_select_all' => '전체 선택', + 'multi_select_n_selected' => '선택됨', + 'multi_select_all_selected' => '모두 선택됨', + 'multi_select_filter_placeholder' => '찾기..', + 'intro_next_label' => '다음', + 'intro_prev_label' => '이전', + 'intro_skip_label' => '건너뛰기', + 'intro_done_label' => '완료', + 'between_dates_breadcrumb' => ':start와 :end 사이', + 'all_journals_without_budget' => '예산이 없는 모든 거래', + 'journals_without_budget' => '예산이 없는 거래', + 'all_journals_without_category' => '카테고리가 없는 모든 거래', + 'journals_without_category' => '카테고리가 없는 거래', + 'all_journals_for_account' => ':name 계정에 대한 모든 거래', + 'chart_all_journals_for_account' => ':name 계정에 대한 모든 거래 차트', + 'journals_in_period_for_account' => ':start와 :end 동안 ":name" 계정의 모든 거래', + 'journals_in_period_for_account_js' => '{start} 와 {end} 동안 {title} 계정의 모든 거래', + 'transferred' => '이체', + 'all_withdrawal' => '모든 지출', + 'all_transactions' => '모든 거래', + 'title_withdrawal_between' => ':start와 :end 사이의 모든 지출', + 'all_deposit' => '모든 수익', + 'title_deposit_between' => ':start와 :end 사이의 모든 수익', + 'all_transfers' => '모든 이체', + 'title_transfers_between' => ':start와 :end 사이의 모든 이체', + 'all_transfer' => '모든 이체', + 'all_journals_for_tag' => '":tag" 태그에 대한 모든 거래', + 'title_transfer_between' => ':start와 :end 사이의 모든 이체', + 'all_journals_for_category' => ':name 카테고리에 대한 모든 거래', + 'all_journals_for_budget' => ':name 예산에 대한 모든 거래', + 'chart_all_journals_for_budget' => ':name 예산에 대한 모든 거래 차트', + 'journals_in_period_for_category' => ':start와 :end 동안 ":name" 카테고리의 모든 거래', + 'journals_in_period_for_tag' => ':start와 :end 동안 :tag 태그의 모든 거래', + 'not_available_demo_user' => '액세스하려는 기능은 데모 사용자가 사용할 수 없습니다.', + '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' => '유효하지 않은 서버 설정', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => '퀵스위치', + 'sign_in_to_start' => '세션을 시작하려면 로그인하세요.', + 'sign_in' => '로그인', + 'register_new_account' => '새로운 계정 등록', + 'forgot_my_password' => '비밀번호를 잊어버렸습니다', + 'problems_with_input' => '입력에 오류가 있습니다.', + 'reset_password' => '비밀번호 초기화', + 'button_reset_password' => '비밀번호 초기화', + 'reset_button' => '초기화', + 'want_to_login' => '로그인하고 싶습니다', + 'login_page_title' => 'Firefly III 로그인', + 'register_page_title' => 'Firefly III 등록하기', + 'forgot_pw_page_title' => 'Firefly III 비밀번호를 잊어버렸습니다', + 'reset_pw_page_title' => 'Firefly III의 비밀번호 재설정', + 'cannot_reset_demo_user' => '데모 사용자의 비밀번호는 재설정할 수 없습니다.', + 'no_att_demo_user' => '데모 유저는 첨부 파일을 업로드할 수 없습니다.', + 'button_register' => '등록', + 'authorization' => '인증', + 'active_bills_only' => '활성화된 청구서만 포함', + 'active_bills_only_total' => '모든 활성화된 청구서', + 'active_exp_bills_only' => '활성화 및 예상 청구서만 포함', + 'active_exp_bills_only_total' => '모든 활성화 및 예상 청구서만 포함', + 'per_period_sum_1D' => '일간 예상 비용', + 'per_period_sum_1W' => '주간 예상 비용', + 'per_period_sum_1M' => '월간 예상 비용', + 'per_period_sum_3M' => '분기 예상 비용', + 'per_period_sum_6M' => '반기 예상 비용', + 'per_period_sum_1Y' => '년간 예상 비용', + 'average_per_bill' => '청구서당 평균', + 'expected_total' => '예상 합계', + 'reconciliation_account_name' => ':name 조정 (:currency)', + 'saved' => '저장 완료', + 'advanced_options' => '고급 옵션', + 'advanced_options_explain' => 'Firefly III의 일부 페이지에는 이 버튼 뒤에 고급 옵션이 숨겨져 있습니다. 이 페이지에는 멋진 옵션이 없지만 다른 페이지도 확인해 보세요!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => '웹훅', - 'webhooks_breadcrumb' => '웹훅', - 'no_webhook_messages' => '웹훅 메시지 없음', - 'webhook_trigger_STORE_TRANSACTION' => '거래 생성 이후', - 'webhook_trigger_UPDATE_TRANSACTION' => '거래 업데이트 이후', - 'webhook_trigger_DESTROY_TRANSACTION' => '거래 삭제 이후', - 'webhook_response_TRANSACTIONS' => '거래 세부 정보', - 'webhook_response_ACCOUNTS' => '계정 정보', - 'webhook_response_none_NONE' => '상세정보 없음', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => '검사', - 'create_new_webhook' => '웹훅 만들기', - 'webhooks_create_breadcrumb' => '웹훅 만들기', - 'webhook_trigger_form_help' => '웹훅이 트리거할 이벤트를 표시합니다', - 'webhook_response_form_help' => '웹훅이 URL에 제출해야 하는 내용을 표시합니다.', - 'webhook_delivery_form_help' => '웹훅이 데이터를 전달해야 하는 형식입니다.', - 'webhook_active_form_help' => '웹훅이 활성화되어 있어야 하며 그렇지 않으면 호출되지 않습니다.', - 'stored_new_webhook' => '새로운 ":title" 웹훅 저장됨', - 'delete_webhook' => '웹훅 삭제', - 'deleted_webhook' => '":title" 웹훅 삭제됨', - 'edit_webhook' => '":title" 웹훅 수정', - 'updated_webhook' => '":title" 웹훅 업데이트됨', - 'edit_webhook_js' => '"{title}" 웹훅 수정', - 'show_webhook' => '":title" 웹훅', - 'webhook_was_triggered' => '표시된 거래에서 웹훅이 트리거되었습니다. 결과가 나타날 때까지 기다려주세요.', - 'webhook_messages' => '웹훅 메시지', - 'view_message' => '메시지 보기', - 'view_attempts' => '실패한 시도 보기', - 'message_content_title' => '웹훅 메시지 내용', - 'message_content_help' => '이 웹훅을 사용하여 전송된(또는 시도한) 메시지의 내용입니다.', - 'attempt_content_title' => '웹훅 시도', - 'attempt_content_help' => '구성된 URL에 제출하려는 이 웹훅 메시지의 모든 실패한 시도입니다. 잠시 후 Firefly III가 시도를 중지합니다.', - 'no_attempts' => '실패한 시도가 없습니다. 좋은 일이네요!', - 'webhook_attempt_at' => '{moment}에 시도', - 'logs' => '로그', - 'response' => '응답', - 'visit_webhook_url' => '웹훅 URL 방문', - 'reset_webhook_secret' => '웹훅 시크릿 재설정', - 'webhook_stored_link' => '웹훅 #{ID} ("{title}")이 저장되었습니다.', - 'webhook_updated_link' => '웹훅 #{ID} ("{title}")이 업데이트 되었습니다.', + 'webhooks' => '웹훅', + 'webhooks_breadcrumb' => '웹훅', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => '웹훅 메시지 없음', + 'webhook_trigger_STORE_TRANSACTION' => '거래 생성 이후', + 'webhook_trigger_UPDATE_TRANSACTION' => '거래 업데이트 이후', + 'webhook_trigger_DESTROY_TRANSACTION' => '거래 삭제 이후', + 'webhook_response_TRANSACTIONS' => '거래 세부 정보', + 'webhook_response_ACCOUNTS' => '계정 정보', + 'webhook_response_none_NONE' => '상세정보 없음', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => '검사', + 'create_new_webhook' => '웹훅 만들기', + 'webhooks_create_breadcrumb' => '웹훅 만들기', + 'webhook_trigger_form_help' => '웹훅이 트리거할 이벤트를 표시합니다', + 'webhook_response_form_help' => '웹훅이 URL에 제출해야 하는 내용을 표시합니다.', + 'webhook_delivery_form_help' => '웹훅이 데이터를 전달해야 하는 형식입니다.', + 'webhook_active_form_help' => '웹훅이 활성화되어 있어야 하며 그렇지 않으면 호출되지 않습니다.', + 'stored_new_webhook' => '새로운 ":title" 웹훅 저장됨', + 'delete_webhook' => '웹훅 삭제', + 'deleted_webhook' => '":title" 웹훅 삭제됨', + 'edit_webhook' => '":title" 웹훅 수정', + 'updated_webhook' => '":title" 웹훅 업데이트됨', + 'edit_webhook_js' => '"{title}" 웹훅 수정', + 'show_webhook' => '":title" 웹훅', + 'webhook_was_triggered' => '표시된 거래에서 웹훅이 트리거되었습니다. 결과가 나타날 때까지 기다려주세요.', + 'webhook_messages' => '웹훅 메시지', + 'view_message' => '메시지 보기', + 'view_attempts' => '실패한 시도 보기', + 'message_content_title' => '웹훅 메시지 내용', + 'message_content_help' => '이 웹훅을 사용하여 전송된(또는 시도한) 메시지의 내용입니다.', + 'attempt_content_title' => '웹훅 시도', + 'attempt_content_help' => '구성된 URL에 제출하려는 이 웹훅 메시지의 모든 실패한 시도입니다. 잠시 후 Firefly III가 시도를 중지합니다.', + 'no_attempts' => '실패한 시도가 없습니다. 좋은 일이네요!', + 'webhook_attempt_at' => '{moment}에 시도', + 'logs' => '로그', + 'response' => '응답', + 'visit_webhook_url' => '웹훅 URL 방문', + 'reset_webhook_secret' => '웹훅 시크릿 재설정', + 'webhook_stored_link' => '웹훅 #{ID} ("{title}")이 저장되었습니다.', + 'webhook_updated_link' => '웹훅 #{ID} ("{title}")이 업데이트 되었습니다.', // API access - 'authorization_request' => 'Firefly III v:version 인증 요청', - 'authorization_request_intro' => '응용 프로그램 ":client"에서 재무 관리에 액세스할 수 있는 권한을 요청하고 있습니다. :client에게 이러한 기록에 액세스할 수 있는 권한을 부여하시겠습니까?', - 'authorization_request_site' => ':url로 리디렉션되며, 이 페이지에서 Firefly III 데이터에 액세스할 수 있습니다.', - 'authorization_request_invalid' => '이 액세스 요청은 유효하지 않습니다. 다시는 이 링크를 클릭하지 마세요.', - 'scopes_will_be_able' => '이 응용 프로그램은 다음을 수행 할 수 있습니다:', - 'button_authorize' => '인증', - 'none_in_select_list' => '(없음)', - 'no_piggy_bank' => '(저금통 없음)', - 'name_in_currency' => ':currency :name', - 'paid_in_currency' => ':currency로 지불됨', - 'unpaid_in_currency' => ':currency로 미지불', - 'is_alpha_warning' => '알파 버전을 실행 중입니다. 버그와 문제에 주의하십시오.', - 'is_beta_warning' => '베타 버전을 실행 중입니다. 버그와 문제에 주의하십시오.', - 'all_destination_accounts' => '대상 계정', - 'all_source_accounts' => '소스 계정', - 'back_to_index' => '목록으로 돌아가기', - 'cant_logout_guard' => 'Firefly III에서 로그아웃할 수 없습니다.', - 'internal_reference' => '내부 참조', + 'authorization_request' => 'Firefly III v:version 인증 요청', + 'authorization_request_intro' => '응용 프로그램 ":client"에서 재무 관리에 액세스할 수 있는 권한을 요청하고 있습니다. :client에게 이러한 기록에 액세스할 수 있는 권한을 부여하시겠습니까?', + 'authorization_request_site' => ':url로 리디렉션되며, 이 페이지에서 Firefly III 데이터에 액세스할 수 있습니다.', + 'authorization_request_invalid' => '이 액세스 요청은 유효하지 않습니다. 다시는 이 링크를 클릭하지 마세요.', + 'scopes_will_be_able' => '이 응용 프로그램은 다음을 수행 할 수 있습니다:', + 'button_authorize' => '인증', + 'none_in_select_list' => '(없음)', + 'no_piggy_bank' => '(저금통 없음)', + 'name_in_currency' => ':currency :name', + 'paid_in_currency' => ':currency로 지불됨', + 'unpaid_in_currency' => ':currency로 미지불', + 'is_alpha_warning' => '알파 버전을 실행 중입니다. 버그와 문제에 주의하십시오.', + 'is_beta_warning' => '베타 버전을 실행 중입니다. 버그와 문제에 주의하십시오.', + 'all_destination_accounts' => '대상 계정', + 'all_source_accounts' => '소스 계정', + 'back_to_index' => '목록으로 돌아가기', + 'cant_logout_guard' => 'Firefly III에서 로그아웃할 수 없습니다.', + 'internal_reference' => '내부 참조', // check for updates: - 'update_check_title' => '업데이트 확인', - 'admin_update_check_title' => '업데이트 자동 확인', - 'admin_update_check_explain' => 'Firefly III가 자동으로 업데이트를 확인할 수 있습니다. 이 설정을 활성화하면 Firefly III 업데이트 서버에 연결하여 Firefly III의 새 버전을 사용할 수 있는지 확인합니다. 업데이트가 완료되면 알림을 받게 됩니다. 오른쪽의 버튼을 사용하여 이 알림을 테스트할 수 있습니다. Firefly III가 업데이트를 확인하도록 하려면 아래에 표시해 주세요.', - 'check_for_updates_permission' => 'Firefly III가 업데이트를 확인하려면 사용자의 권한이 필요합니다. 관리 페이지로 이동하여 이 기능을 사용할지 여부를 선택하세요.', - 'updates_ask_me_later' => '나중에 다시 확인', - 'updates_do_not_check' => '업데이트 확인하지 않기', - 'updates_enable_check' => '업데이트 확인 사용', - 'admin_update_check_now_title' => '지금 업데이트 확인', - 'admin_update_check_now_explain' => '버튼을 누르면 Firefly III의 버전이 최신 버전인지 확인합니다.', - 'check_for_updates_button' => '지금 확인!', - 'update_new_version_alert' => 'Firefly III의 새 버전을 사용할 수 있습니다. 현재 실행 중인 버전은 :your_version이며, 최신 버전은 :date에 릴리스된 :new_version입니다.', - 'update_version_beta' => '이 버전은 베타 버전입니다. 문제가 발생할 수 있습니다.', - 'update_version_alpha' => '이 버전은 알파 버전입니다. 문제가 발생할 수 있습니다.', - 'update_current_version_alert' => '사용 가능한 최신 릴리스인 :version을 실행 중입니다.', - 'update_newer_version_alert' => '최신 릴리스인 :new_version보다 최신 버전인 :your_version을 실행중입니다.', - 'update_check_error' => '업데이트 확인 중 오류가 발생했습니다: :error', - 'unknown_error' => '알 수 없는 오류입니다. 죄송합니다.', - 'just_new_release' => '새 버전이 출시되었습니다! :version 버전이 :date에 출시되었습니다. 이 릴리스는 아주 최신의 버전입니다. 새 릴리스가 안정화될 때까지 며칠 정도 기다려 주세요.', - 'disabled_but_check' => '업데이트 확인을 비활성화했습니다. 가끔씩 업데이트를 직접 확인하는 것을 잊지 마세요. 감사합니다!', - 'admin_update_channel_title' => '업데이트 채널', - 'admin_update_channel_explain' => 'Firefly III에는 세 가지 업데이트 "채널"이 있으며, 기능, 개선 사항 및 버그에 대해 얼마나 앞서 있는지 결정합니다. 모험심이 강하다면 "베타" 채널을, 위험한 삶을 원하신다면 "알파" 채널을 사용하세요.', - 'update_channel_stable' => '안정 버전입니다. 모든 것이 예상대로 작동합니다.', - 'update_channel_beta' => '베타 버전입니다. 새로운 기능이 추가되었지만 일부 기능이 손상될 수 있습니다.', - 'update_channel_alpha' => '알파 버전입니다. 새로운 기능은 무엇이든 추가해 봅니다.', + 'update_check_title' => '업데이트 확인', + 'admin_update_check_title' => '업데이트 자동 확인', + 'admin_update_check_explain' => 'Firefly III가 자동으로 업데이트를 확인할 수 있습니다. 이 설정을 활성화하면 Firefly III 업데이트 서버에 연결하여 Firefly III의 새 버전을 사용할 수 있는지 확인합니다. 업데이트가 완료되면 알림을 받게 됩니다. 오른쪽의 버튼을 사용하여 이 알림을 테스트할 수 있습니다. Firefly III가 업데이트를 확인하도록 하려면 아래에 표시해 주세요.', + 'check_for_updates_permission' => 'Firefly III가 업데이트를 확인하려면 사용자의 권한이 필요합니다. 관리 페이지로 이동하여 이 기능을 사용할지 여부를 선택하세요.', + 'updates_ask_me_later' => '나중에 다시 확인', + 'updates_do_not_check' => '업데이트 확인하지 않기', + 'updates_enable_check' => '업데이트 확인 사용', + 'admin_update_check_now_title' => '지금 업데이트 확인', + 'admin_update_check_now_explain' => '버튼을 누르면 Firefly III의 버전이 최신 버전인지 확인합니다.', + 'check_for_updates_button' => '지금 확인!', + 'update_new_version_alert' => 'Firefly III의 새 버전을 사용할 수 있습니다. 현재 실행 중인 버전은 :your_version이며, 최신 버전은 :date에 릴리스된 :new_version입니다.', + 'update_version_beta' => '이 버전은 베타 버전입니다. 문제가 발생할 수 있습니다.', + 'update_version_alpha' => '이 버전은 알파 버전입니다. 문제가 발생할 수 있습니다.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => '사용 가능한 최신 릴리스인 :version을 실행 중입니다.', + 'update_newer_version_alert' => '최신 릴리스인 :new_version보다 최신 버전인 :your_version을 실행중입니다.', + 'update_check_error' => '업데이트 확인 중 오류가 발생했습니다: :error', + 'unknown_error' => '알 수 없는 오류입니다. 죄송합니다.', + 'disabled_but_check' => '업데이트 확인을 비활성화했습니다. 가끔씩 업데이트를 직접 확인하는 것을 잊지 마세요. 감사합니다!', + 'admin_update_channel_title' => '업데이트 채널', + 'admin_update_channel_explain' => 'Firefly III에는 세 가지 업데이트 "채널"이 있으며, 기능, 개선 사항 및 버그에 대해 얼마나 앞서 있는지 결정합니다. 모험심이 강하다면 "베타" 채널을, 위험한 삶을 원하신다면 "알파" 채널을 사용하세요.', + 'update_channel_stable' => '안정 버전입니다. 모든 것이 예상대로 작동합니다.', + 'update_channel_beta' => '베타 버전입니다. 새로운 기능이 추가되었지만 일부 기능이 손상될 수 있습니다.', + 'update_channel_alpha' => '알파 버전입니다. 새로운 기능은 무엇이든 추가해 봅니다.', // search - 'search' => '검색', - 'search_query' => '쿼리', - 'search_found_transactions' => 'Firefly III가 :time초 동안 :count개의 거래를 찾았습니다.|Firefly III가 :time초 동안 :count개의 거래를 찾았습니다.', - 'search_found_more_transactions' => 'Firefly III는 :time초 동안 :count개 이상의 거래를 찾았습니다.', - 'search_for_query' => 'Firefly III가 이러한 단어가 모두 포함된 거래를 검색하고 있습니다: :query', - 'invalid_operators_list' => '이 검색 매개변수는 유효하지 않으며 무시되었습니다.', + 'search' => '검색', + 'search_query' => '쿼리', + 'search_found_transactions' => 'Firefly III가 :time초 동안 :count개의 거래를 찾았습니다.|Firefly III가 :time초 동안 :count개의 거래를 찾았습니다.', + 'search_found_more_transactions' => 'Firefly III는 :time초 동안 :count개 이상의 거래를 찾았습니다.', + 'search_for_query' => 'Firefly III가 이러한 단어가 모두 포함된 거래를 검색하고 있습니다: :query', + 'invalid_operators_list' => '이 검색 매개변수는 유효하지 않으며 무시되었습니다.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => '거래 날짜는 ":value"입니다', 'search_modifier_not_date_on' => '거래 날짜는 ":value"가 아닙니다.', 'search_modifier_reconciled' => '거래가 조정됨', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => '거래 유형은 ":value" 입니다', 'search_modifier_not_transaction_type' => '거래 유형은 ":value"가 아닙니다', 'search_modifier_tag_is' => '태그는 ":value" 입니다', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => '":value" 태그가 없습니다.', 'search_modifier_date_on_year' => '거래는 ":value" 연도에 있습니다', 'search_modifier_not_date_on_year' => '거래는 ":value" 연도에 있지 않습니다', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => '거래는 ":value"월 이거나 이후입니다', 'search_modifier_date_after_day' => '거래는 ":value"일 이거나 이후입니다', - // new 'search_modifier_tag_is_not' => '":value" 태그가 없습니다', 'search_modifier_not_tag_is_not' => '태그는 ":value" 입니다', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => '검색 쿼리에서 새 규칙 만들기', 'rule_from_search_words' => '규칙 엔진은 ":string"을 처리하는 데 어려움을 겪습니다. 검색 쿼리에 맞는 제안된 규칙이 다른 결과를 제공할 수 있습니다. 규칙 트리거를 주의 깊게 확인하세요.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => '다음 수정자는 검색에도 적용됩니다:', 'general_search_error' => '검색하는 동안 오류가 발생했습니다. 자세한 내용은 로그 파일을 확인해 주세요.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => '제외', 'cannot_fire_inactive_rules' => '비활성 규칙을 실행할 수 없습니다.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => '규칙', 'rule_name' => '규칙 이름', 'rule_triggers' => '규칙이 트리거되는 경우', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => '거래가 업데이트될 때', 'rule_trigger_user_action' => '사용자 액션은 ":trigger_value" 입니다', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => '소스 계정 이름은 ...로 시작합니다.', 'rule_trigger_source_account_starts' => '소스 계정 이름은 ":trigger_value"로 시작합니다', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => '예산은 ":trigger_value"입니다', 'rule_trigger_tag_is_choice' => '모든 태그는...', 'rule_trigger_tag_is' => '모든 태그는 ":trigger_value"입니다', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => '거래 통화는..', 'rule_trigger_currency_is' => '거래 통화는 ":trigger_value"입니다', 'rule_trigger_foreign_currency_is_choice' => '거래 외화 통화는..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => '거래가 존재하지 않습니다', 'rule_trigger_not_has_attachments' => '거래에 첨부 파일이 없음', 'rule_trigger_not_has_any_category' => '거래에 카테고리가 없음', - 'rule_trigger_not_has_any_budget' => '거래에 카테고리가 없음', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => '거레에 청구서가 없음', 'rule_trigger_not_has_any_tag' => '거래에 태그가 없음', 'rule_trigger_not_any_notes' => '거래에 메모가 없음', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => '대상 계정이 현금 계정이 아닙니다', 'rule_trigger_not_account_is_cash' => '두 계정 모두 현금 계정이 아닙니다', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => '거래 삭제(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => '설명에 메모 추가', 'rule_action_move_descr_to_notes' => '노트를 설명으로 바꾸기', 'rule_action_move_notes_to_descr' => '설명을 노트로 바꾸기', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => '청구서에 대한 규칙 그룹', 'rulegroup_for_bills_description' => '청구서와 관련된 모든 규칙을 위한 특별 규칙 그룹입니다.', 'rule_for_bill_title' => '청구서 ":name"에 대한 자동 생성 규칙', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => '청구서 ":name"에 대한 규칙', 'new_rule_for_bill_description' => '이 규칙은 청구서 ":name"에 대한 거래를 표시합니다.', - 'new_rule_for_journal_title' => '거래 ":description" 기반 규칙', - 'new_rule_for_journal_description' => '이 규칙은 거래 ":description"을 기반으로 합니다. 정확히 동일한 거래를 매칭할 것입니다.', + 'new_rule_for_journal_title' => '거래 ":description" 기반 규칙', + 'new_rule_for_journal_description' => '이 규칙은 거래 ":description"을 기반으로 합니다. 정확히 동일한 거래를 매칭할 것입니다.', // tags - 'store_new_tag' => '새 태그 저장', - 'update_tag' => '태그 업데이트', - 'no_location_set' => '설정된 위치가 없습니다.', - 'meta_data' => '메타데이터', - 'location' => '위치', - 'without_date' => '날짜 없음', - 'result' => '결과', - 'sums_apply_to_range' => '모든 합계는 선택한 범위에 적용됩니다', - 'mapbox_api_key' => '지도를 사용하려면 Mapbox에서 API 키를 받습니다. .env 파일을 열고 MAPBOX_API_KEY= 뒤에 이 코드를 입력합니다.', - 'press_object_location' => '마우스 오른쪽 버튼을 클릭이나 롱 클릭으로 개체의 위치를 설정합니다.', - 'clear_location' => '위치 지우기', - 'delete_all_selected_tags' => '선택된 모든 태그를 삭제', - 'select_tags_to_delete' => '태그를 선택하는 것을 잊지 마세요.', - 'deleted_x_tags' => ':count개의 태그가 삭제되었습니다.|:count개의 태그가 삭제되었습니다.', - 'create_rule_from_transaction' => '거래 기반 규칙 생성', - 'create_recurring_from_transaction' => '거래를 기반으로 반복 거래 만들기', - + 'store_new_tag' => '새 태그 저장', + 'update_tag' => '태그 업데이트', + 'no_location_set' => '설정된 위치가 없습니다.', + 'meta_data' => '메타데이터', + 'location' => '위치', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => '날짜 없음', + 'result' => '결과', + 'sums_apply_to_range' => '모든 합계는 선택한 범위에 적용됩니다', + 'mapbox_api_key' => '지도를 사용하려면 Mapbox에서 API 키를 받습니다. .env 파일을 열고 MAPBOX_API_KEY= 뒤에 이 코드를 입력합니다.', + 'press_object_location' => '마우스 오른쪽 버튼을 클릭이나 롱 클릭으로 개체의 위치를 설정합니다.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => '위치 지우기', + 'delete_all_selected_tags' => '선택된 모든 태그를 삭제', + 'select_tags_to_delete' => '태그를 선택하는 것을 잊지 마세요.', + 'deleted_x_tags' => ':count개의 태그가 삭제되었습니다.|:count개의 태그가 삭제되었습니다.', + 'create_rule_from_transaction' => '거래 기반 규칙 생성', + 'create_recurring_from_transaction' => '거래를 기반으로 반복 거래 만들기', // preferences - 'dark_mode_option_browser' => '브라우저에 맡기세요', - 'dark_mode_option_light' => '항상 라이트', - 'dark_mode_option_dark' => '항상 다크', - 'equal_to_language' => '(언어와 동일)', - 'dark_mode_preference' => '다크 모드', - 'dark_mode_preference_help' => 'Firefly III가 언제 다크 모드를 사용할지 알려주세요.', - 'pref_home_screen_accounts' => '홈 화면 계정', - 'pref_home_screen_accounts_help' => '홈 페이지에 어떤 계정을 표시해야 하나요?', - 'pref_view_range' => '보기 범위', - 'pref_view_range_help' => '일부 차트는 자동으로 기간별로 그룹화됩니다. 예산도 기간별로 그룹화됩니다. 어떤 기간을 원하시나요?', - 'pref_1D' => '하루', - 'pref_1W' => '일주일', - 'pref_1M' => '한달', - 'pref_3M' => '3개월 (분기)', - 'pref_6M' => '6개월', - 'pref_1Y' => '1년', - 'pref_last365' => '지난 해', - 'pref_last90' => '최근 90일', - 'pref_last30' => '최근 30일', - 'pref_last7' => '최근 7일', - 'pref_YTD' => '연간 누계', - 'pref_QTD' => '분기 누계', - 'pref_MTD' => '월간 누계', - 'pref_languages' => '언어', - 'pref_locale' => '로케일 설정', - 'pref_languages_help' => 'Firefly III는 여러 언어를 지원합니다. 어떤 언어를 선호하시나요?', - 'pref_locale_help' => 'Firefly III에서는 통화, 숫자, 날짜 서식 지정 방법 등 기타 로컬 설정을 변경할 수 있습니다. 사용 중인 시스템에서 지원하지 않는 항목이 있을 수 있습니다. Firefly III는 모든 로케일에 대해 올바른 날짜 설정을 제공하지 않으므로 개선이 필요한 경우 저에게 문의하세요.', - 'pref_locale_no_demo' => '이 기능은 데모 사용자에게는 동작하지 않습니다.', - 'pref_custom_fiscal_year' => '회계연도 설정', - 'pref_custom_fiscal_year_label' => '활성화', - 'pref_custom_fiscal_year_help' => '1월 1일에서 12월 31일과 다른 회계 연도를 사용하는 나라에서는 해당 설정을 켜고 회계 연도의 시작과 끝을 지정할 수 있습니다', - 'pref_fiscal_year_start_label' => '회계 연도 시작일', - 'pref_two_factor_auth' => '2단계 인증', - 'pref_two_factor_auth_help' => '2단계 인증을 활성화하면 계정에 보안 계층이 하나 더 추가됩니다. 내가 알고 있는 정보(비밀번호)와 내가 가지고 있는 정보(인증 코드)를 사용하여 로그인합니다. 인증 코드는 휴대폰의 애플리케이션(예: Authy 또는 Google OTP)을 통해 생성합니다.', - 'pref_enable_two_factor_auth' => '2단계 인증 활성화', - 'pref_two_factor_auth_disabled' => '2단계 인증 코드 제거 및 비활성화', - 'pref_two_factor_auth_remove_it' => '인증 앱에서 계정을 제거하는 것을 잊지 마세요!', - 'pref_two_factor_auth_code' => '코드 확인', - 'pref_two_factor_auth_code_help' => 'Authy 또는 Google Authenticator와 같은 휴대폰 애플리케이션으로 QR 코드를 스캔하고 생성된 코드를 입력합니다.', - 'pref_two_factor_auth_reset_code' => '인증 코드 재설정', - 'pref_two_factor_auth_disable_2fa' => '2단계 인증 비활성화', - '2fa_use_secret_instead' => 'QR 코드를 스캔할 수 없다면 :secret 시크릿을 대신 사용하세요.', - '2fa_backup_codes' => '장치를 분실한 경우에 액세스할 수 있도록 이 백업 코드를 저장하십시오.', - '2fa_already_enabled' => '2단계 인증이 이미 활성화되어 있습니다.', - 'wrong_mfa_code' => '이 MFA 코드는 유효하지 않습니다.', - 'pref_save_settings' => '설정 저장', - 'saved_preferences' => '설정 저장됨!', - 'preferences_general' => '일반', - 'preferences_frontpage' => '홈 화면', - 'preferences_security' => '보안', - 'preferences_layout' => '레이아웃', - 'preferences_notifications' => '알림', - 'pref_home_show_deposits' => '홈 화면에 입금 표시', - 'pref_home_show_deposits_info' => '홈 화면에는 이미 지출 계정이 표시되고 있습니다. 수익 계정도 표시할까요?', - 'pref_home_do_show_deposits' => '네, 보여주세요', - 'successful_count' => '이 중 :count개 성공', - 'list_page_size_title' => '페이지 크기', - 'list_page_size_help' => '모든 항목(계정, 거래 등) 목록은 페이지당 최대 이 수만큼 표시됩니다.', - 'list_page_size_label' => '페이지 크기', - 'between_dates' => '(:start와 :end)', - 'pref_optional_fields_transaction' => '거래의 옵션 항목', - 'pref_optional_fields_transaction_help' => '기본적으로 새 거래를 만들 때 (복잡하기 때문에) 모든 항목이 활성화되어 있지는 않습니다. 아래에서 유용하다고 생각되는 항목을 활성화할 수 있습니다. 비활성화되어 있지만 이미 입력되어 있는 항목은 설정과 관계없이 모두 표시됩니다.', - 'optional_tj_date_fields' => '날짜 항목', - 'optional_tj_other_fields' => '기타 항목', - 'optional_tj_attachment_fields' => '첨부 파일 항목', - 'pref_optional_tj_interest_date' => '이자 날짜', - 'pref_optional_tj_book_date' => '예약 날짜', - 'pref_optional_tj_process_date' => '처리 날짜', - 'pref_optional_tj_due_date' => '마감 날짜', - 'pref_optional_tj_payment_date' => '결제일', - 'pref_optional_tj_invoice_date' => '청구서 날짜', - 'pref_optional_tj_internal_reference' => '내부 참조', - 'pref_optional_tj_notes' => '노트', - 'pref_optional_tj_attachments' => '첨부 파일', - 'pref_optional_tj_external_url' => '외부 URL', - 'pref_optional_tj_location' => '위치', - 'pref_optional_tj_links' => '거래 링크', - 'optional_field_meta_dates' => '날짜', - 'optional_field_meta_business' => '비즈니스', - 'optional_field_attachments' => '첨부 파일', - 'optional_field_meta_data' => '선택적 메타 데이터', - 'external_url' => '외부 URL', - 'pref_notification_bill_reminder' => '만료되는 청구서에 대한 알림', - 'pref_notification_new_access_token' => '새 API 액세스 토큰이 생성되면 알림 받기', - 'pref_notification_transaction_creation' => '거래가 자동으로 생성될 때 알림', - 'pref_notification_user_login' => '새 위치에서 로그인할 때 알림', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => '알림', - 'pref_notifications_help' => '수신할 알림인지 여부를 표시합니다. 일부 알림에는 민감한 금융 정보가 포함될 수 있습니다.', - 'slack_webhook_url' => 'Slack 웹훅 URL', - 'slack_webhook_url_help' => 'Slack을 사용하여 Firefly III에서 알림을 받으려면 여기에 웹훅 URL을 입력하세요. 원하지 않는다면 이 필드를 비워두세요. 관리자인 경우 관리에서도 이 URL을 설정해야 합니다.', - 'slack_url_label' => 'Slack "수신 웹훅" URL', + 'dark_mode_option_browser' => '브라우저에 맡기세요', + 'dark_mode_option_light' => '항상 라이트', + 'dark_mode_option_dark' => '항상 다크', + 'equal_to_language' => '(언어와 동일)', + 'dark_mode_preference' => '다크 모드', + 'dark_mode_preference_help' => 'Firefly III가 언제 다크 모드를 사용할지 알려주세요.', + 'pref_home_screen_accounts' => '홈 화면 계정', + 'pref_home_screen_accounts_help' => '홈 페이지에 어떤 계정을 표시해야 하나요?', + 'pref_view_range' => '보기 범위', + 'pref_view_range_help' => '일부 차트는 자동으로 기간별로 그룹화됩니다. 예산도 기간별로 그룹화됩니다. 어떤 기간을 원하시나요?', + 'pref_1D' => '하루', + 'pref_1W' => '일주일', + 'pref_1M' => '한달', + 'pref_3M' => '3개월 (분기)', + 'pref_6M' => '6개월', + 'pref_1Y' => '1년', + 'pref_last365' => '지난 해', + 'pref_last90' => '최근 90일', + 'pref_last30' => '최근 30일', + 'pref_last7' => '최근 7일', + 'pref_YTD' => '연간 누계', + 'pref_QTD' => '분기 누계', + 'pref_MTD' => '월간 누계', + 'pref_languages' => '언어', + 'pref_locale' => '로케일 설정', + 'pref_languages_help' => 'Firefly III는 여러 언어를 지원합니다. 어떤 언어를 선호하시나요?', + 'pref_locale_help' => 'Firefly III에서는 통화, 숫자, 날짜 서식 지정 방법 등 기타 로컬 설정을 변경할 수 있습니다. 사용 중인 시스템에서 지원하지 않는 항목이 있을 수 있습니다. Firefly III는 모든 로케일에 대해 올바른 날짜 설정을 제공하지 않으므로 개선이 필요한 경우 저에게 문의하세요.', + 'pref_locale_no_demo' => '이 기능은 데모 사용자에게는 동작하지 않습니다.', + 'pref_custom_fiscal_year' => '회계연도 설정', + 'pref_custom_fiscal_year_label' => '활성화', + 'pref_custom_fiscal_year_help' => '1월 1일에서 12월 31일과 다른 회계 연도를 사용하는 나라에서는 해당 설정을 켜고 회계 연도의 시작과 끝을 지정할 수 있습니다', + 'pref_fiscal_year_start_label' => '회계 연도 시작일', + 'pref_two_factor_auth' => '2단계 인증', + 'pref_two_factor_auth_help' => '2단계 인증을 활성화하면 계정에 보안 계층이 하나 더 추가됩니다. 내가 알고 있는 정보(비밀번호)와 내가 가지고 있는 정보(인증 코드)를 사용하여 로그인합니다. 인증 코드는 휴대폰의 애플리케이션(예: Authy 또는 Google OTP)을 통해 생성합니다.', + 'pref_enable_two_factor_auth' => '2단계 인증 활성화', + 'pref_two_factor_auth_disabled' => '2단계 인증 코드 제거 및 비활성화', + 'pref_two_factor_auth_remove_it' => '인증 앱에서 계정을 제거하는 것을 잊지 마세요!', + 'pref_two_factor_auth_code' => '코드 확인', + 'pref_two_factor_auth_code_help' => 'Authy 또는 Google Authenticator와 같은 휴대폰 애플리케이션으로 QR 코드를 스캔하고 생성된 코드를 입력합니다.', + 'pref_two_factor_auth_reset_code' => '인증 코드 재설정', + 'pref_two_factor_auth_disable_2fa' => '2단계 인증 비활성화', + '2fa_use_secret_instead' => 'QR 코드를 스캔할 수 없다면 :secret 시크릿을 대신 사용하세요.', + '2fa_backup_codes' => '장치를 분실한 경우에 액세스할 수 있도록 이 백업 코드를 저장하십시오.', + '2fa_already_enabled' => '2단계 인증이 이미 활성화되어 있습니다.', + 'wrong_mfa_code' => '이 MFA 코드는 유효하지 않습니다.', + 'pref_save_settings' => '설정 저장', + 'saved_preferences' => '설정 저장됨!', + 'preferences_general' => '일반', + 'preferences_frontpage' => '홈 화면', + 'preferences_security' => '보안', + 'preferences_layout' => '레이아웃', + 'preferences_notifications' => '알림', + 'pref_home_show_deposits' => '홈 화면에 입금 표시', + 'pref_home_show_deposits_info' => '홈 화면에는 이미 지출 계정이 표시되고 있습니다. 수익 계정도 표시할까요?', + 'pref_home_do_show_deposits' => '네, 보여주세요', + 'successful_count' => '이 중 :count개 성공', + 'list_page_size_title' => '페이지 크기', + 'list_page_size_help' => '모든 항목(계정, 거래 등) 목록은 페이지당 최대 이 수만큼 표시됩니다.', + 'list_page_size_label' => '페이지 크기', + 'between_dates' => '(:start와 :end)', + 'pref_optional_fields_transaction' => '거래의 옵션 항목', + 'pref_optional_fields_transaction_help' => '기본적으로 새 거래를 만들 때 (복잡하기 때문에) 모든 항목이 활성화되어 있지는 않습니다. 아래에서 유용하다고 생각되는 항목을 활성화할 수 있습니다. 비활성화되어 있지만 이미 입력되어 있는 항목은 설정과 관계없이 모두 표시됩니다.', + 'optional_tj_date_fields' => '날짜 항목', + 'optional_tj_other_fields' => '기타 항목', + 'optional_tj_attachment_fields' => '첨부 파일 항목', + 'pref_optional_tj_interest_date' => '이자 날짜', + 'pref_optional_tj_book_date' => '예약 날짜', + 'pref_optional_tj_process_date' => '처리 날짜', + 'pref_optional_tj_due_date' => '마감 날짜', + 'pref_optional_tj_payment_date' => '결제일', + 'pref_optional_tj_invoice_date' => '청구서 날짜', + 'pref_optional_tj_internal_reference' => '내부 참조', + 'pref_optional_tj_notes' => '노트', + 'pref_optional_tj_attachments' => '첨부 파일', + 'pref_optional_tj_external_url' => '외부 URL', + 'pref_optional_tj_location' => '위치', + 'pref_optional_tj_links' => '거래 링크', + 'optional_field_meta_dates' => '날짜', + 'optional_field_meta_business' => '비즈니스', + 'optional_field_attachments' => '첨부 파일', + 'optional_field_meta_data' => '선택적 메타 데이터', + 'external_url' => '외부 URL', + 'pref_notification_bill_reminder' => '만료되는 청구서에 대한 알림', + 'pref_notification_new_access_token' => '새 API 액세스 토큰이 생성되면 알림 받기', + 'pref_notification_transaction_creation' => '거래가 자동으로 생성될 때 알림', + 'pref_notification_user_login' => '새 위치에서 로그인할 때 알림', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => '알림', + 'pref_notifications_help' => '수신할 알림인지 여부를 표시합니다. 일부 알림에는 민감한 금융 정보가 포함될 수 있습니다.', + 'slack_webhook_url' => 'Slack 웹훅 URL', + 'slack_webhook_url_help' => 'Slack을 사용하여 Firefly III에서 알림을 받으려면 여기에 웹훅 URL을 입력하세요. 원하지 않는다면 이 필드를 비워두세요. 관리자인 경우 관리에서도 이 URL을 설정해야 합니다.', + 'slack_url_label' => 'Slack "수신 웹훅" URL', // Financial administrations - 'administration_index' => '재정 관리', - 'administrations_index_menu' => '재정 관리자(들)', + 'administration_index' => '재정 관리', + 'administrations_index_menu' => '재정 관리자(들)', // profile: - 'purge_data_title' => 'Firefly III에서 데이터 제거', - 'purge_data_expl' => '"제거"는 "이미 삭제된 것을 삭제하는 것"을 의미합니다. 일반적인 상황에서 Firefly III는 아무것도 영구적으로 삭제하지 않습니다. 단지 숨길 뿐입니다. 아래 버튼을 누르면 이전에 "삭제된" 모든 기록이 영원히 제거됩니다.', - 'delete_stuff_header' => '데이터 삭제 및 제거', - 'purge_all_data' => '삭제된 모든 기록 제거', - 'purge_data' => '데이터 제거', - 'purged_all_records' => '모든 삭제된 항목이 제거 되었습니다.', - 'delete_data_title' => 'Firefly III에서 데이터 삭제', - 'permanent_delete_stuff' => 'Firefly III에서 항목을 삭제할 수 있습니다. 아래 버튼을 사용하면 항목이 보기에서 숨겨집니다. 이 경우 실행 취소 버튼은 없지만 항목은 여전히 데이터베이스에 남아 있기 때문에 필요한 경우 복구할 수 있습니다.', - 'other_sessions_logged_out' => '다른 모든 세션이 로그아웃되었습니다.', - 'delete_unused_accounts' => '사용하지 않는 계정을 삭제하면 자동 완성 목록이 정리됩니다.', - 'delete_all_unused_accounts' => '사용하지 않는 계정 삭제', - 'deleted_all_unused_accounts' => '사용하지 않는 모든 계정이 삭제되었습니다', - 'delete_all_budgets' => '모든 예산 삭제', - 'delete_all_categories' => '모든 카테고리 삭제', - 'delete_all_tags' => '모든 태그 삭제', - 'delete_all_bills' => '모든 청구서 삭제', - 'delete_all_piggy_banks' => '모든 저금통 삭제', - 'delete_all_rules' => '모든 규칙 삭제', - 'delete_all_recurring' => '모든 반복 거래 삭제', - 'delete_all_object_groups' => '모든 객체 그룹 삭제', - 'delete_all_accounts' => '모든 계정 삭제', - 'delete_all_asset_accounts' => '모든 자산 계정 삭제', - 'delete_all_expense_accounts' => '모든 지출 계정 삭제', - 'delete_all_revenue_accounts' => '모든 수익 계정 삭제', - 'delete_all_liabilities' => '모든 부채 삭제', - 'delete_all_transactions' => '모든 거래 삭제', - 'delete_all_withdrawals' => '모든 출금 삭제', - 'delete_all_deposits' => '모든 입금 삭제', - 'delete_all_transfers' => '모든 이체 삭제', - 'also_delete_transactions' => '계정을 삭제하면 관련된 모든 출금, 입금 및 이체도 삭제됩니다!', - 'deleted_all_budgets' => '모든 예산이 삭제되었습니다', - 'deleted_all_categories' => '모든 카테고리가 삭제되었습니다', - 'deleted_all_tags' => '모든 태그가 삭제되었습니다', - 'deleted_all_bills' => '모든 청구서가 삭제되었습니다', - 'deleted_all_piggy_banks' => '모든 저금통이 삭제되었습니다', - 'deleted_all_rules' => '모든 규칙과 규칙 그룹이 삭제되었습니다', - 'deleted_all_object_groups' => '모든 그룹이 삭제되었습니다', - 'deleted_all_accounts' => '모든 계정이 삭제되었습니다', - 'deleted_all_asset_accounts' => '모든 자산 계정이 삭제되었습니다', - 'deleted_all_expense_accounts' => '모든 지출 계정이 삭제되었습니다', - 'deleted_all_revenue_accounts' => '모든 수익 계정이 삭제되었습니다', - 'deleted_all_liabilities' => '모든 부채가 삭제되었습니다', - 'deleted_all_transactions' => '모든 트랜잭션이 삭제되었습니다', - 'deleted_all_withdrawals' => '모든 출금이 삭제되었습니다', - 'deleted_all_deposits' => '모든 입금이 삭제되었습니다', - 'deleted_all_transfers' => '모든 이체가 삭제되었습니다', - 'deleted_all_recurring' => '모든 반복 거래가 삭제되었습니다', - 'change_your_password' => '비밀번호 변경', - 'delete_account' => '계정 삭제', - 'current_password' => '현재 비밀번호', - 'new_password' => '새 비밀번호', - 'new_password_again' => '새 비밀번호 확인', - 'delete_your_account' => '계정 삭제', - 'delete_your_account_help' => '계정을 삭제하면 Firefly III에 저장한 모든 계정, 거래, 모든 항목도 삭제됩니다. 모두 사라집니다.', - 'delete_your_account_password' => '계속하려면 비밀번호를 입력하세요.', - 'password' => '비밀번호', - 'are_you_sure' => '정말로요? 되돌릴 수 없습니다.', - 'delete_account_button' => '계정 삭제하기', - 'invalid_current_password' => '현재 비밀번호가 잘못되었습니다!', - 'password_changed' => '비밀번호가 변경되었습니다!', - 'should_change' => '비밀번호를 변경하는 것이 좋습니다.', - 'invalid_password' => '비밀번호가 잘못되었습니다!', - 'what_is_pw_security' => '"비밀번호 보안 확인"이란 무엇인가요?', - 'secure_pw_title' => '안전한 비밀번호를 선택하는 방법', - 'forgot_password_response' => '감사합니다. 이 이메일 주소를 사용하는 계정이 있는 경우 받은 편지함에서 지침을 찾을 수 있습니다.', - 'secure_pw_history' => '매주 사용자의 암호를 잃어버린 사이트에 대한 뉴스를 접하게 됩니다. 해커와 도둑은 이러한 비밀번호를 사용하여 개인 정보를 훔치려고 시도합니다. 이 정보는 매우 중요합니다.', - 'secure_pw_ff' => '인터넷에서 모두 동일한 비밀번호를 사용하시나요? 한 사이트에서 비밀번호를 분실하면 해커가 모든 데이터에 액세스할 수 있습니다. Firefly III에서는 사용자의 금융 기록을 보호하기 위해 강력하고 고유한 비밀번호를 지정해야 합니다.', - 'secure_pw_check_box' => '이를 위해 Firefly III는 사용하려는 비밀번호가 과거에 도용된 적이 있는지 확인할 수 있습니다. 도용된 적이 있는 경우 Firefly III는 해당 비밀번호를 사용하지 말 것을 권고합니다.', - 'secure_pw_working_title' => '어떻게 작동하나요?', - 'secure_pw_working' => '이 확인란을 선택하면 Firefly III가 비밀번호의 SHA1 해시 중 처음 다섯 문자를 트로이 헌트 웹사이트로 전송하여 목록에 있는지 확인합니다. 이렇게 하면 이 주제에 관한 최신 NIST 특별 간행물에서 권장하는 대로 안전하지 않은 비밀번호를 사용하는 것을 방지할 수 있습니다.', - 'secure_pw_should' => '확인란을 선택해야 하나요?', - 'secure_pw_long_password' => '예. 비밀번호가 안전한지 항상 확인하세요.', - 'command_line_token' => '명령줄 토큰', - 'explain_command_line_token' => '데이터 내보내기와 같은 명령줄 옵션을 수행하려면 이 토큰이 필요합니다. 이 토큰이 없으면 민감한 명령이 작동하지 않습니다. 명령줄 토큰을 공유하지 마세요. 저를 포함해 그 누구도 이 토큰을 요구하지 않습니다. 분실할까 봐 걱정되거나 불안한 경우에는 버튼을 사용하여 토큰을 다시 생성하세요.', - 'regenerate_command_line_token' => '명령줄 토큰 다시 생성', - 'token_regenerated' => '새로운 명령줄 토큰이 생성되었습니다', - 'change_your_email' => '이메일 주소 변경', - 'email_verification' => '기존 이메일 주소와 새 이메일 주소로 이메일 메시지가 전송됩니다. 보안을 위해 새 이메일 주소를 확인할 때까지 로그인할 수 없습니다. Firefly III 설치할 때 이메일 전송이 가능한지 확실하지 않은 경우 이 기능을 사용하지 마세요. 관리자인 경우 관리 페이지에서 이 기능을 테스트할 수 있습니다.', - 'email_changed_logout' => '이메일 주소를 인증할 때까지 로그인할 수 없습니다.', - 'login_with_new_email' => '이제 새 이메일 주소로 로그인할 수 있습니다.', - 'login_with_old_email' => '이제 이전 이메일 주소로 다시 로그인할 수 있습니다.', - 'login_provider_local_only' => '":login_provider"를 통해 인증하는 경우에는 이 작업을 사용할 수 없습니다.', - 'external_user_mgt_disabled' => 'Firefly III가 사용자 관리 또는 인증 처리를 담당하지 않는 경우 이 작업을 사용할 수 없습니다.', - 'external_auth_disabled' => 'Firefly III가 인증 처리를 담당하지 않는 경우 이 작업을 사용할 수 없습니다.', - 'delete_local_info_only' => "Firefly III는 사용자 관리 또는 인증 처리를 담당하지 않기 때문에 이 기능은 로컬 Firefly III 정보만 삭제합니다.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth 클라이언트', - 'profile_oauth_no_clients' => 'OAuth 클라이언트를 만들지 않았습니다.', - 'profile_oauth_clients_external_auth' => 'Authelia와 같은 외부 인증 제공업체를 사용하는 경우 OAuth 클라이언트가 작동하지 않습니다. 개인 액세스 토큰만 사용할 수 있습니다.', - 'profile_oauth_clients_header' => '클라이언트', - 'profile_oauth_client_id' => '클라이언트 ID', - 'profile_oauth_client_name' => '이름', - 'profile_oauth_client_secret' => '시크릿', - 'profile_oauth_create_new_client' => '새로운 클라이언트 만들기', - 'profile_oauth_create_client' => '클라이언트 만들기', - 'profile_oauth_edit_client' => '클라이언트 수정', - 'profile_oauth_name_help' => '사용자가 인지하고 신뢰할 수 있는 것.', - 'profile_oauth_redirect_url' => '리디렉션 URL', - 'profile_oauth_redirect_url_help' => '애플리케이션의 인증 콜백 URL입니다.', - 'profile_authorized_apps' => '인증된 애플리케이션', - 'profile_authorized_clients' => '인증된 클라이언트', - 'profile_scopes' => '범위', - 'profile_revoke' => '취소', - 'profile_oauth_client_secret_title' => '클라이언트 시크릿', - 'profile_oauth_client_secret_expl' => '다음은 새 클라이언트 암호입니다. 이번 한 번만 표시되니 놓치지 마세요! 이제 이 비밀 번호를 사용하여 API 요청을 할 수 있습니다.', - 'profile_personal_access_tokens' => '개인 액세스 토큰', - 'profile_personal_access_token' => '개인 액세스 토큰', - 'profile_oauth_confidential' => '비밀', - 'profile_oauth_confidential_help' => '클라이언트가 시크릿으로 인증하도록 요구합니다. 기밀 클라이언트는 권한이 없는 사람에게 자격 증명을 노출하지 않고 안전한 방식으로 자격 증명을 보관할 수 있습니다. 기본 데스크톱 또는 JavaScript SPA 애플리케이션과 같은 공개 애플리케이션은 시크릿을 안전하게 보관할 수 없습니다.', - 'profile_personal_access_token_explanation' => '다음은 새 개인용 액세스 토큰입니다. 이번 한 번만 표시되니 놓치지 마세요! 이제 이 토큰을 사용하여 API 요청을 할 수 있습니다.', - 'profile_no_personal_access_token' => '개인 액세스 토큰을 생성하지 않았습니다.', - 'profile_create_new_token' => '새로운 토큰 만들기', - 'profile_create_token' => '토큰 생성', - 'profile_create' => '생성', - 'profile_save_changes' => '변경사항 저장', - 'profile_whoops' => '이런!', - 'profile_something_wrong' => '문제가 발생했습니다!', - 'profile_try_again' => '문제가 발생했습니다. 다시 시도해주세요.', - 'amounts' => '금액', - 'multi_account_warning_unknown' => '생성한 거래 유형에 따라 뒤따르는 분할의 소스 및/또는 대상 계정은 대상 계정 거래의 첫 번째 분할에 정의된 내용에 따라 무시될 수 있습니다.', - 'multi_account_warning_withdrawal' => '뒤따르는 분할의 소스 계정은 첫 번째 출금 분할에 정의된 내용에 따라 재정의된다는 점에 유의하시기 바랍니다.', - 'multi_account_warning_deposit' => '뒤따르는 분할의 대상 계정은 첫 번째 입금 분할에 정의된 내용에 따라 재정의된다는 점에 유의하시기 바랍니다.', - 'multi_account_warning_transfer' => '뒤따르는 분할의 소스 + 대상 계정은 첫 번째 이체 분할에 정의된 내용에 따라 재정의된다는 점에 유의하시기 바랍니다.', + 'purge_data_title' => 'Firefly III에서 데이터 제거', + 'purge_data_expl' => '"제거"는 "이미 삭제된 것을 삭제하는 것"을 의미합니다. 일반적인 상황에서 Firefly III는 아무것도 영구적으로 삭제하지 않습니다. 단지 숨길 뿐입니다. 아래 버튼을 누르면 이전에 "삭제된" 모든 기록이 영원히 제거됩니다.', + 'delete_stuff_header' => '데이터 삭제 및 제거', + 'purge_all_data' => '삭제된 모든 기록 제거', + 'purge_data' => '데이터 제거', + 'purged_all_records' => '모든 삭제된 항목이 제거 되었습니다.', + 'delete_data_title' => 'Firefly III에서 데이터 삭제', + 'permanent_delete_stuff' => 'Firefly III에서 항목을 삭제할 수 있습니다. 아래 버튼을 사용하면 항목이 보기에서 숨겨집니다. 이 경우 실행 취소 버튼은 없지만 항목은 여전히 데이터베이스에 남아 있기 때문에 필요한 경우 복구할 수 있습니다.', + 'other_sessions_logged_out' => '다른 모든 세션이 로그아웃되었습니다.', + 'delete_unused_accounts' => '사용하지 않는 계정을 삭제하면 자동 완성 목록이 정리됩니다.', + 'delete_all_unused_accounts' => '사용하지 않는 계정 삭제', + 'deleted_all_unused_accounts' => '사용하지 않는 모든 계정이 삭제되었습니다', + 'delete_all_budgets' => '모든 예산 삭제', + 'delete_all_categories' => '모든 카테고리 삭제', + 'delete_all_tags' => '모든 태그 삭제', + 'delete_all_bills' => '모든 청구서 삭제', + 'delete_all_piggy_banks' => '모든 저금통 삭제', + 'delete_all_rules' => '모든 규칙 삭제', + 'delete_all_recurring' => '모든 반복 거래 삭제', + 'delete_all_object_groups' => '모든 객체 그룹 삭제', + 'delete_all_accounts' => '모든 계정 삭제', + 'delete_all_asset_accounts' => '모든 자산 계정 삭제', + 'delete_all_expense_accounts' => '모든 지출 계정 삭제', + 'delete_all_revenue_accounts' => '모든 수익 계정 삭제', + 'delete_all_liabilities' => '모든 부채 삭제', + 'delete_all_transactions' => '모든 거래 삭제', + 'delete_all_withdrawals' => '모든 출금 삭제', + 'delete_all_deposits' => '모든 입금 삭제', + 'delete_all_transfers' => '모든 이체 삭제', + 'also_delete_transactions' => '계정을 삭제하면 관련된 모든 출금, 입금 및 이체도 삭제됩니다!', + 'deleted_all_budgets' => '모든 예산이 삭제되었습니다', + 'deleted_all_categories' => '모든 카테고리가 삭제되었습니다', + 'deleted_all_tags' => '모든 태그가 삭제되었습니다', + 'deleted_all_bills' => '모든 청구서가 삭제되었습니다', + 'deleted_all_piggy_banks' => '모든 저금통이 삭제되었습니다', + 'deleted_all_rules' => '모든 규칙과 규칙 그룹이 삭제되었습니다', + 'deleted_all_object_groups' => '모든 그룹이 삭제되었습니다', + 'deleted_all_accounts' => '모든 계정이 삭제되었습니다', + 'deleted_all_asset_accounts' => '모든 자산 계정이 삭제되었습니다', + 'deleted_all_expense_accounts' => '모든 지출 계정이 삭제되었습니다', + 'deleted_all_revenue_accounts' => '모든 수익 계정이 삭제되었습니다', + 'deleted_all_liabilities' => '모든 부채가 삭제되었습니다', + 'deleted_all_transactions' => '모든 트랜잭션이 삭제되었습니다', + 'deleted_all_withdrawals' => '모든 출금이 삭제되었습니다', + 'deleted_all_deposits' => '모든 입금이 삭제되었습니다', + 'deleted_all_transfers' => '모든 이체가 삭제되었습니다', + 'deleted_all_recurring' => '모든 반복 거래가 삭제되었습니다', + 'change_your_password' => '비밀번호 변경', + 'delete_account' => '계정 삭제', + 'current_password' => '현재 비밀번호', + 'new_password' => '새 비밀번호', + 'new_password_again' => '새 비밀번호 확인', + 'delete_your_account' => '계정 삭제', + 'delete_your_account_help' => '계정을 삭제하면 Firefly III에 저장한 모든 계정, 거래, 모든 항목도 삭제됩니다. 모두 사라집니다.', + 'delete_your_account_password' => '계속하려면 비밀번호를 입력하세요.', + 'password' => '비밀번호', + 'are_you_sure' => '정말로요? 되돌릴 수 없습니다.', + 'delete_account_button' => '계정 삭제하기', + 'invalid_current_password' => '현재 비밀번호가 잘못되었습니다!', + 'password_changed' => '비밀번호가 변경되었습니다!', + 'should_change' => '비밀번호를 변경하는 것이 좋습니다.', + 'invalid_password' => '비밀번호가 잘못되었습니다!', + 'what_is_pw_security' => '"비밀번호 보안 확인"이란 무엇인가요?', + 'secure_pw_title' => '안전한 비밀번호를 선택하는 방법', + 'forgot_password_response' => '감사합니다. 이 이메일 주소를 사용하는 계정이 있는 경우 받은 편지함에서 지침을 찾을 수 있습니다.', + 'secure_pw_history' => '매주 사용자의 암호를 잃어버린 사이트에 대한 뉴스를 접하게 됩니다. 해커와 도둑은 이러한 비밀번호를 사용하여 개인 정보를 훔치려고 시도합니다. 이 정보는 매우 중요합니다.', + 'secure_pw_ff' => '인터넷에서 모두 동일한 비밀번호를 사용하시나요? 한 사이트에서 비밀번호를 분실하면 해커가 모든 데이터에 액세스할 수 있습니다. Firefly III에서는 사용자의 금융 기록을 보호하기 위해 강력하고 고유한 비밀번호를 지정해야 합니다.', + 'secure_pw_check_box' => '이를 위해 Firefly III는 사용하려는 비밀번호가 과거에 도용된 적이 있는지 확인할 수 있습니다. 도용된 적이 있는 경우 Firefly III는 해당 비밀번호를 사용하지 말 것을 권고합니다.', + 'secure_pw_working_title' => '어떻게 작동하나요?', + 'secure_pw_working' => '이 확인란을 선택하면 Firefly III가 비밀번호의 SHA1 해시 중 처음 다섯 문자를 트로이 헌트 웹사이트로 전송하여 목록에 있는지 확인합니다. 이렇게 하면 이 주제에 관한 최신 NIST 특별 간행물에서 권장하는 대로 안전하지 않은 비밀번호를 사용하는 것을 방지할 수 있습니다.', + 'secure_pw_should' => '확인란을 선택해야 하나요?', + 'secure_pw_long_password' => '예. 비밀번호가 안전한지 항상 확인하세요.', + 'command_line_token' => '명령줄 토큰', + 'explain_command_line_token' => '데이터 내보내기와 같은 명령줄 옵션을 수행하려면 이 토큰이 필요합니다. 이 토큰이 없으면 민감한 명령이 작동하지 않습니다. 명령줄 토큰을 공유하지 마세요. 저를 포함해 그 누구도 이 토큰을 요구하지 않습니다. 분실할까 봐 걱정되거나 불안한 경우에는 버튼을 사용하여 토큰을 다시 생성하세요.', + 'regenerate_command_line_token' => '명령줄 토큰 다시 생성', + 'token_regenerated' => '새로운 명령줄 토큰이 생성되었습니다', + 'change_your_email' => '이메일 주소 변경', + 'email_verification' => '기존 이메일 주소와 새 이메일 주소로 이메일 메시지가 전송됩니다. 보안을 위해 새 이메일 주소를 확인할 때까지 로그인할 수 없습니다. Firefly III 설치할 때 이메일 전송이 가능한지 확실하지 않은 경우 이 기능을 사용하지 마세요. 관리자인 경우 관리 페이지에서 이 기능을 테스트할 수 있습니다.', + 'email_changed_logout' => '이메일 주소를 인증할 때까지 로그인할 수 없습니다.', + 'login_with_new_email' => '이제 새 이메일 주소로 로그인할 수 있습니다.', + 'login_with_old_email' => '이제 이전 이메일 주소로 다시 로그인할 수 있습니다.', + 'login_provider_local_only' => '":login_provider"를 통해 인증하는 경우에는 이 작업을 사용할 수 없습니다.', + 'external_user_mgt_disabled' => 'Firefly III가 사용자 관리 또는 인증 처리를 담당하지 않는 경우 이 작업을 사용할 수 없습니다.', + 'external_auth_disabled' => 'Firefly III가 인증 처리를 담당하지 않는 경우 이 작업을 사용할 수 없습니다.', + 'delete_local_info_only' => 'Firefly III는 사용자 관리 또는 인증 처리를 담당하지 않기 때문에 이 기능은 로컬 Firefly III 정보만 삭제합니다.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth 클라이언트', + 'profile_oauth_no_clients' => 'OAuth 클라이언트를 만들지 않았습니다.', + 'profile_oauth_clients_external_auth' => 'Authelia와 같은 외부 인증 제공업체를 사용하는 경우 OAuth 클라이언트가 작동하지 않습니다. 개인 액세스 토큰만 사용할 수 있습니다.', + 'profile_oauth_clients_header' => '클라이언트', + 'profile_oauth_client_id' => '클라이언트 ID', + 'profile_oauth_client_name' => '이름', + 'profile_oauth_client_secret' => '시크릿', + 'profile_oauth_create_new_client' => '새로운 클라이언트 만들기', + 'profile_oauth_create_client' => '클라이언트 만들기', + 'profile_oauth_edit_client' => '클라이언트 수정', + 'profile_oauth_name_help' => '사용자가 인지하고 신뢰할 수 있는 것.', + 'profile_oauth_redirect_url' => '리디렉션 URL', + 'profile_oauth_redirect_url_help' => '애플리케이션의 인증 콜백 URL입니다.', + 'profile_authorized_apps' => '인증된 애플리케이션', + 'profile_authorized_clients' => '인증된 클라이언트', + 'profile_scopes' => '범위', + 'profile_revoke' => '취소', + 'profile_oauth_client_secret_title' => '클라이언트 시크릿', + 'profile_oauth_client_secret_expl' => '다음은 새 클라이언트 암호입니다. 이번 한 번만 표시되니 놓치지 마세요! 이제 이 비밀 번호를 사용하여 API 요청을 할 수 있습니다.', + 'profile_personal_access_tokens' => '개인 액세스 토큰', + 'profile_personal_access_token' => '개인 액세스 토큰', + 'profile_oauth_confidential' => '비밀', + 'profile_oauth_confidential_help' => '클라이언트가 시크릿으로 인증하도록 요구합니다. 기밀 클라이언트는 권한이 없는 사람에게 자격 증명을 노출하지 않고 안전한 방식으로 자격 증명을 보관할 수 있습니다. 기본 데스크톱 또는 JavaScript SPA 애플리케이션과 같은 공개 애플리케이션은 시크릿을 안전하게 보관할 수 없습니다.', + 'profile_personal_access_token_explanation' => '다음은 새 개인용 액세스 토큰입니다. 이번 한 번만 표시되니 놓치지 마세요! 이제 이 토큰을 사용하여 API 요청을 할 수 있습니다.', + 'profile_no_personal_access_token' => '개인 액세스 토큰을 생성하지 않았습니다.', + 'profile_create_new_token' => '새로운 토큰 만들기', + 'profile_create_token' => '토큰 생성', + 'profile_create' => '생성', + 'profile_save_changes' => '변경사항 저장', + 'profile_whoops' => '이런!', + 'profile_something_wrong' => '문제가 발생했습니다!', + 'profile_try_again' => '문제가 발생했습니다. 다시 시도해주세요.', + 'amounts' => '금액', + 'multi_account_warning_unknown' => '생성한 거래 유형에 따라 뒤따르는 분할의 소스 및/또는 대상 계정은 대상 계정 거래의 첫 번째 분할에 정의된 내용에 따라 무시될 수 있습니다.', + 'multi_account_warning_withdrawal' => '뒤따르는 분할의 소스 계정은 첫 번째 출금 분할에 정의된 내용에 따라 재정의된다는 점에 유의하시기 바랍니다.', + 'multi_account_warning_deposit' => '뒤따르는 분할의 대상 계정은 첫 번째 입금 분할에 정의된 내용에 따라 재정의된다는 점에 유의하시기 바랍니다.', + 'multi_account_warning_transfer' => '뒤따르는 분할의 소스 + 대상 계정은 첫 번째 이체 분할에 정의된 내용에 따라 재정의된다는 점에 유의하시기 바랍니다.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Firefly III에서 데이터 내보내기', - 'export_data_menu' => '데이터 내보내기', - 'export_data_bc' => 'Firefly III에서 데이터 내보내기', - 'export_data_main_title' => 'Firefly III에서 데이터 내보내기', - 'export_data_expl' => '이 링크를 통해 Firefly III에서 모든 거래 + 메타 데이터를 내보낼 수 있습니다. 프로세스에 대한 자세한 내용은 도움말(오른쪽 상단(?)-아이콘)을 참조하세요.', - 'export_data_all_transactions' => '모든 거래 내보내기', - 'export_data_advanced_expl' => '고급 또는 특정 유형의 내보내기가 필요한 경우 콘솔 명령 php artisan help firefly-iii:export-data 으로 사용법에 대한 도움말을 읽으십시오.', + 'export_data_title' => 'Firefly III에서 데이터 내보내기', + 'export_data_menu' => '데이터 내보내기', + 'export_data_bc' => 'Firefly III에서 데이터 내보내기', + 'export_data_main_title' => 'Firefly III에서 데이터 내보내기', + 'export_data_expl' => '이 링크를 통해 Firefly III에서 모든 거래 + 메타 데이터를 내보낼 수 있습니다. 프로세스에 대한 자세한 내용은 도움말(오른쪽 상단(?)-아이콘)을 참조하세요.', + 'export_data_all_transactions' => '모든 거래 내보내기', + 'export_data_advanced_expl' => '고급 또는 특정 유형의 내보내기가 필요한 경우 콘솔 명령 php artisan help firefly-iii:export-data 으로 사용법에 대한 도움말을 읽으십시오.', // attachments - 'nr_of_attachments' => '하나의 첨부 파일|:count개의 첨부 파일', - 'attachments' => '첨부 파일', - 'edit_attachment' => '":name" 첨부파일 수정', - 'update_attachment' => '첨부파일 업데이트', - 'delete_attachment' => '":name" 첨부파일 삭제', - 'attachment_deleted' => '":name" 첨부파일 삭제됨', - 'liabilities_deleted' => '":name" 부채 삭제됨', - 'attachment_updated' => '":name" 첨부파일 업데이트됨', - 'upload_max_file_size' => '최대 파일 크기: :size', - 'list_all_attachments' => '모든 첨부 파일 목록', + 'nr_of_attachments' => '하나의 첨부 파일|:count개의 첨부 파일', + 'attachments' => '첨부 파일', + 'edit_attachment' => '":name" 첨부파일 수정', + 'update_attachment' => '첨부파일 업데이트', + 'delete_attachment' => '":name" 첨부파일 삭제', + 'attachment_deleted' => '":name" 첨부파일 삭제됨', + 'liabilities_deleted' => '":name" 부채 삭제됨', + 'attachment_updated' => '":name" 첨부파일 업데이트됨', + 'upload_max_file_size' => '최대 파일 크기: :size', + 'list_all_attachments' => '모든 첨부 파일 목록', // transaction index - 'title_expenses' => '지출', - 'title_withdrawal' => '지출', - 'title_revenue' => '수익 / 수입', - 'title_deposit' => '수익 / 수입', - 'title_transfer' => '이체', - 'title_transfers' => '이체', - 'submission_options' => '제출 옵션', - 'apply_rules_checkbox' => '규칙 적용', - 'fire_webhooks_checkbox' => '웹훅 실행', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => '지출', + 'title_withdrawal' => '지출', + 'title_revenue' => '수익 / 수입', + 'title_deposit' => '수익 / 수입', + 'title_transfer' => '이체', + 'title_transfers' => '이체', + 'submission_options' => '제출 옵션', + 'apply_rules_checkbox' => '규칙 적용', + 'fire_webhooks_checkbox' => '웹훅 실행', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => '이 거래는 이미 출금되었습니다', - 'convert_is_already_type_Deposit' => '이 거래는 이미 입금되었습니다', - 'convert_is_already_type_Transfer' => '이 거래는 이미 이체되었습니다', - 'convert_to_Withdrawal' => '":description"을 출금으로 전환', - 'convert_to_Deposit' => '":description"을 입금으로 전환', - 'convert_to_Transfer' => '":description"을 이체로 전환', - 'convert_options_WithdrawalDeposit' => '출금을 입금으로 전환', - 'convert_options_WithdrawalTransfer' => '출금을 이체로 전환', - 'convert_options_DepositTransfer' => '입금을 이체로 전환', - 'convert_options_DepositWithdrawal' => '입금을 출금으로 전환', - 'convert_options_TransferWithdrawal' => '이체를 출금으로 전환', - 'convert_options_TransferDeposit' => '이체를 입금으로 전환', - 'convert_Withdrawal_to_deposit' => '이 출금을 입금으로 전환', - 'convert_Withdrawal_to_transfer' => '이 출금을 이체로 전환', - 'convert_Deposit_to_withdrawal' => '이 입금을 출금으로 전환', - 'convert_Deposit_to_transfer' => '이 입금을 이체로 전환', - 'convert_Transfer_to_deposit' => '이 이체를 입금으로 전환', - 'convert_Transfer_to_withdrawal' => '이 이체를 출금으로 전환', - 'convert_please_set_revenue_source' => '돈이 나올 수익 계정을 선택하세요.', - 'convert_please_set_asset_destination' => '돈이 들어갈 자산 계정을 선택하세요.', - 'convert_please_set_expense_destination' => '돈이 들어갈 비용 계정을 선택하세요.', - 'convert_please_set_asset_source' => '돈이 나올 자산 계정을 선택하세요.', - 'convert_expl_w_d' => '출금에서 입금으로 변환할 때는 금액이 인출되지 않고 표시된 대상 계좌로 입금됩니다.|출금에서 입금으로 변환할 때는 금액이 출금되지 않고 표시된 대상 계좌로 입금됩니다.', - 'convert_expl_w_t' => '출금을 이체로 전환하는 경우, 해당 금액은 원래의 비용 계정에서 지출되지 않고 소스 계정에서 다른 자산 또는 부채 계정으로 이체됩니다.|인출을 이체로 전환하는 경우, 해당 금액은 원래의 비용 계정에서 지출되지 않고 소스 계정에서 다른 자산 또는 부채 계정으로 이체됩니다.', - 'convert_expl_d_w' => '입금을 출금으로 전환하는 경우 표시된 소스 계좌에 입금되지 않고 표시된 소스 계좌에서 출금됩니다.|입금을 출금으로 전환하는 경우 표시된 소스 계좌에 입금되지 않고 표시된 소스 계좌에서 출금됩니다.', - 'convert_expl_d_t' => '입금을 이체로 전환하는 경우 자산 또는 부채 계좌에서 나열된 대상 계좌로 금액이 입금됩니다.|입금을 이체로 전환하는 경우 자산 또는 부채 계좌에서 나열된 대상 계좌로 금액이 입금됩니다.', - 'convert_expl_t_w' => '이체를 출금으로 전환하는 경우 이 금액은 다른 계좌로 이체되지 않고 여기에서 설정한 대상 계좌에서 지출됩니다.|이체를 출금으로 전환하는 경우 이 금액은 다른 계좌로 이체되지 않고 여기에서 설정한 대상 계좌에서 지출됩니다.', - 'convert_expl_t_d' => '이체를 입금으로 전환하는 경우 돈이 이체되는 대신 여기에 표시된 대상 계좌로 입금됩니다.|이체를 입금으로 전환하는 경우 돈이 이체되는 대신 여기에 표시된 대상 계좌로 입금됩니다.', - 'convert_select_sources' => '전환을 완료하려면 아래에 새 소스 계정을 설정하세요.|전환을 완료하려면 아래에 새 소스 계정들을 설정하세요.', - 'convert_select_destinations' => '전환을 완료하려면 아래에 새 대상 계정을 설정하세요.|전환을 완료하려면 아래에 새 대상 계정들을 설정하세요.', - 'converted_to_Withdrawal' => '거래가 출금으로 전환되었습니다', - 'converted_to_Deposit' => '거래가 입금으로 전환되었습니다', - 'converted_to_Transfer' => '거래가 이체로 전환되었습니다', - 'invalid_convert_selection' => '선택한 계정이 이 거래에서 이미 사용 중이거나 존재하지 않습니다.', - 'source_or_dest_invalid' => '올바른 거래 세부정보를 찾을 수 없습니다. 변환할 수 없습니다.', - 'convert_to_withdrawal' => '출금으로 전환', - 'convert_to_deposit' => '입금으로 전환', - 'convert_to_transfer' => '이체로 전환', + 'convert_is_already_type_Withdrawal' => '이 거래는 이미 출금되었습니다', + 'convert_is_already_type_Deposit' => '이 거래는 이미 입금되었습니다', + 'convert_is_already_type_Transfer' => '이 거래는 이미 이체되었습니다', + 'convert_to_Withdrawal' => '":description"을 출금으로 전환', + 'convert_to_Deposit' => '":description"을 입금으로 전환', + 'convert_to_Transfer' => '":description"을 이체로 전환', + 'convert_options_WithdrawalDeposit' => '출금을 입금으로 전환', + 'convert_options_WithdrawalTransfer' => '출금을 이체로 전환', + 'convert_options_DepositTransfer' => '입금을 이체로 전환', + 'convert_options_DepositWithdrawal' => '입금을 출금으로 전환', + 'convert_options_TransferWithdrawal' => '이체를 출금으로 전환', + 'convert_options_TransferDeposit' => '이체를 입금으로 전환', + 'convert_Withdrawal_to_deposit' => '이 출금을 입금으로 전환', + 'convert_Withdrawal_to_transfer' => '이 출금을 이체로 전환', + 'convert_Deposit_to_withdrawal' => '이 입금을 출금으로 전환', + 'convert_Deposit_to_transfer' => '이 입금을 이체로 전환', + 'convert_Transfer_to_deposit' => '이 이체를 입금으로 전환', + 'convert_Transfer_to_withdrawal' => '이 이체를 출금으로 전환', + 'convert_please_set_revenue_source' => '돈이 나올 수익 계정을 선택하세요.', + 'convert_please_set_asset_destination' => '돈이 들어갈 자산 계정을 선택하세요.', + 'convert_please_set_expense_destination' => '돈이 들어갈 비용 계정을 선택하세요.', + 'convert_please_set_asset_source' => '돈이 나올 자산 계정을 선택하세요.', + 'convert_expl_w_d' => '출금에서 입금으로 변환할 때는 금액이 인출되지 않고 표시된 대상 계좌로 입금됩니다.|출금에서 입금으로 변환할 때는 금액이 출금되지 않고 표시된 대상 계좌로 입금됩니다.', + 'convert_expl_w_t' => '출금을 이체로 전환하는 경우, 해당 금액은 원래의 비용 계정에서 지출되지 않고 소스 계정에서 다른 자산 또는 부채 계정으로 이체됩니다.|인출을 이체로 전환하는 경우, 해당 금액은 원래의 비용 계정에서 지출되지 않고 소스 계정에서 다른 자산 또는 부채 계정으로 이체됩니다.', + 'convert_expl_d_w' => '입금을 출금으로 전환하는 경우 표시된 소스 계좌에 입금되지 않고 표시된 소스 계좌에서 출금됩니다.|입금을 출금으로 전환하는 경우 표시된 소스 계좌에 입금되지 않고 표시된 소스 계좌에서 출금됩니다.', + 'convert_expl_d_t' => '입금을 이체로 전환하는 경우 자산 또는 부채 계좌에서 나열된 대상 계좌로 금액이 입금됩니다.|입금을 이체로 전환하는 경우 자산 또는 부채 계좌에서 나열된 대상 계좌로 금액이 입금됩니다.', + 'convert_expl_t_w' => '이체를 출금으로 전환하는 경우 이 금액은 다른 계좌로 이체되지 않고 여기에서 설정한 대상 계좌에서 지출됩니다.|이체를 출금으로 전환하는 경우 이 금액은 다른 계좌로 이체되지 않고 여기에서 설정한 대상 계좌에서 지출됩니다.', + 'convert_expl_t_d' => '이체를 입금으로 전환하는 경우 돈이 이체되는 대신 여기에 표시된 대상 계좌로 입금됩니다.|이체를 입금으로 전환하는 경우 돈이 이체되는 대신 여기에 표시된 대상 계좌로 입금됩니다.', + 'convert_select_sources' => '전환을 완료하려면 아래에 새 소스 계정을 설정하세요.|전환을 완료하려면 아래에 새 소스 계정들을 설정하세요.', + 'convert_select_destinations' => '전환을 완료하려면 아래에 새 대상 계정을 설정하세요.|전환을 완료하려면 아래에 새 대상 계정들을 설정하세요.', + 'converted_to_Withdrawal' => '거래가 출금으로 전환되었습니다', + 'converted_to_Deposit' => '거래가 입금으로 전환되었습니다', + 'converted_to_Transfer' => '거래가 이체로 전환되었습니다', + 'invalid_convert_selection' => '선택한 계정이 이 거래에서 이미 사용 중이거나 존재하지 않습니다.', + 'source_or_dest_invalid' => '올바른 거래 세부정보를 찾을 수 없습니다. 변환할 수 없습니다.', + 'convert_to_withdrawal' => '출금으로 전환', + 'convert_to_deposit' => '입금으로 전환', + 'convert_to_transfer' => '이체로 전환', // create new stuff: - 'create_new_withdrawal' => '새로운 출금 생성', - 'create_new_deposit' => '새로운 입금 생성', - 'create_new_transfer' => '새로운 이체 생성', - 'create_new_asset' => '새 자산 계정 생성', - 'create_new_liabilities' => '새 부채 생성', - 'create_new_expense' => '새 지출 계정 생성', - 'create_new_revenue' => '새 수익 계정 생성', - 'create_new_piggy_bank' => '새 저금통 만들기', - 'create_new_bill' => '새 청구서 생성', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => '새로운 출금 생성', + 'create_new_deposit' => '새로운 입금 생성', + 'create_new_transfer' => '새로운 이체 생성', + 'create_new_asset' => '새 자산 계정 생성', + 'create_new_liabilities' => '새 부채 생성', + 'create_new_expense' => '새 지출 계정 생성', + 'create_new_revenue' => '새 수익 계정 생성', + 'create_new_piggy_bank' => '새 저금통 만들기', + 'create_new_bill' => '새 청구서 생성', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => '새로운 통화 생성', - 'store_currency' => '새 통화 저장', - 'update_currency' => '통화 업데이트', - 'new_default_currency' => '기본 통화는 이제 :name 입니다.', - 'cannot_delete_currency' => ':name을(를) 아직 사용 중이므로 삭제할 수 없습니다.', - 'cannot_delete_fallback_currency' => ':name은 시스템 대체 통화이며 삭제할 수 없습니다.', - 'cannot_disable_currency_journals' => '거래가 여전히 :name을 사용하고 있으므로 비활성화할 수 없습니다.', - 'cannot_disable_currency_last_left' => ':name은 마지막으로 활성화한 통화이므로 비활성화할 수 없습니다.', - 'cannot_disable_currency_account_meta' => ':name은 자산 계정에서 사용되므로 비활성화할 수 없습니다.', - 'cannot_disable_currency_bills' => ':name은 청구서에서 사용되므로 비활성화할 수 없습니다.', - 'cannot_disable_currency_recurring' => ':name은 반복 거래에서 사용되므로 비활성화할 수 없습니다.', - 'cannot_disable_currency_available_budgets' => ':name은 사용가능한 예산에서 사용되므로 비활성화할 수 없습니다.', - 'cannot_disable_currency_budget_limits' => '예산 한도에서 사용되므로 :name을 비활성화할 수 없습니다.', - 'cannot_disable_currency_current_default' => ':name은 현재 기본 통화이므로 비활성화 할 수 없습니다.', - 'cannot_disable_currency_system_fallback' => ':name은 시스템 기본 통화이므로 비활성화할 수 없습니다.', - 'disable_EUR_side_effects' => '유로화는 시스템의 비상 대체 통화입니다. 이를 비활성화하면 의도하지 않은 부작용이 발생할 수 있으며 보증이 무효화될 수 있습니다.', - 'deleted_currency' => ':name 통화 삭제됨', - 'created_currency' => ':name 통화 생성됨', - 'could_not_store_currency' => '새 통화를 저장할 수 없습니다.', - 'updated_currency' => ':name 통화 업데이트됨', - 'ask_site_owner' => '통화를 추가, 제거 또는 수정하려면 :owner에게 문의하세요.', - 'currencies_intro' => 'Firefly III는 여기에서 설정하고 활성화할 수 있는 다양한 통화를 지원합니다.', - 'make_default_currency' => '기본값으로 설정', - 'default_currency' => '기본값', - 'currency_is_disabled' => '비활성화됨', - 'enable_currency' => '활성화', - 'disable_currency' => '비활성화', - 'currencies_default_disabled' => '이러한 통화는 대부분 기본적으로 비활성화되어 있습니다. 사용하려면 먼저 활성화해야 합니다.', - 'currency_is_now_enabled' => '":name" 통화가 활성화되었습니다', - 'currency_is_now_disabled' => '":name" 통화가 비활성화되었습니다', + 'create_currency' => '새로운 통화 생성', + 'store_currency' => '새 통화 저장', + 'update_currency' => '통화 업데이트', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => ':name을(를) 아직 사용 중이므로 삭제할 수 없습니다.', + 'cannot_delete_fallback_currency' => ':name은 시스템 대체 통화이며 삭제할 수 없습니다.', + 'cannot_disable_currency_journals' => '거래가 여전히 :name을 사용하고 있으므로 비활성화할 수 없습니다.', + 'cannot_disable_currency_last_left' => ':name은 마지막으로 활성화한 통화이므로 비활성화할 수 없습니다.', + 'cannot_disable_currency_account_meta' => ':name은 자산 계정에서 사용되므로 비활성화할 수 없습니다.', + 'cannot_disable_currency_bills' => ':name은 청구서에서 사용되므로 비활성화할 수 없습니다.', + 'cannot_disable_currency_recurring' => ':name은 반복 거래에서 사용되므로 비활성화할 수 없습니다.', + 'cannot_disable_currency_available_budgets' => ':name은 사용가능한 예산에서 사용되므로 비활성화할 수 없습니다.', + 'cannot_disable_currency_budget_limits' => '예산 한도에서 사용되므로 :name을 비활성화할 수 없습니다.', + 'cannot_disable_currency_current_default' => ':name은 현재 기본 통화이므로 비활성화 할 수 없습니다.', + 'cannot_disable_currency_system_fallback' => ':name은 시스템 기본 통화이므로 비활성화할 수 없습니다.', + 'disable_EUR_side_effects' => '유로화는 시스템의 비상 대체 통화입니다. 이를 비활성화하면 의도하지 않은 부작용이 발생할 수 있으며 보증이 무효화될 수 있습니다.', + 'deleted_currency' => ':name 통화 삭제됨', + 'created_currency' => ':name 통화 생성됨', + 'could_not_store_currency' => '새 통화를 저장할 수 없습니다.', + 'updated_currency' => ':name 통화 업데이트됨', + 'ask_site_owner' => '통화를 추가, 제거 또는 수정하려면 :owner에게 문의하세요.', + 'currencies_intro' => 'Firefly III는 여기에서 설정하고 활성화할 수 있는 다양한 통화를 지원합니다.', + 'make_default_currency' => '기본값으로 설정', + 'default_currency' => '기본값', + 'currency_is_disabled' => '비활성화됨', + 'enable_currency' => '활성화', + 'disable_currency' => '비활성화', + 'currencies_default_disabled' => '이러한 통화는 대부분 기본적으로 비활성화되어 있습니다. 사용하려면 먼저 활성화해야 합니다.', + 'currency_is_now_enabled' => '":name" 통화가 활성화되었습니다', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => '":name" 통화가 비활성화되었습니다', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => '필수 입력 항목', - 'optionalFields' => '선택 입력 항목', - 'options' => '옵션', + 'mandatoryFields' => '필수 입력 항목', + 'optionalFields' => '선택 입력 항목', + 'options' => '옵션', // budgets: - 'daily_budgets' => '일일 예산', - 'weekly_budgets' => '주간 예산', - 'monthly_budgets' => '월간 예산', - 'quarterly_budgets' => '분기별 예산', - 'half_year_budgets' => '반기 예산', - 'yearly_budgets' => '연간 예산', - 'other_budgets' => '사용자 정의 시간 예산', - 'budget_limit_not_in_range' => '이 금액은 :start부터 :end까지 적용됩니다', - 'total_available_budget' => '사용 가능한 총 예산 (:start에서 :end 사이)', - 'total_available_budget_in_currency' => ':currency로 사용 가능한 총 예산', - 'see_below' => '아래를 참조하세요.', - 'create_new_budget' => '새로운 예산 생성', - 'store_new_budget' => '새 예산 저장', - 'stored_new_budget' => '새 예산 ":name" 저장됨', - 'available_between' => ':start와 :end 사이에서 사용 가능', - 'transactionsWithoutBudget' => '예산이 없는 지출', - 'transactions_no_budget' => ':start과 :end 사이에 예산이 없는 지출', - 'spent_between' => ':start와 :end 사이에 이미 사용되었습니다', - 'set_available_amount' => '사용 가능한 금액 설정', - 'update_available_amount' => '사용 가능한 금액 업데이트', - 'ab_basic_modal_explain' => '이 양식을 사용하여 지정한 기간에 예산을 책정할 수 있을 것으로 예상되는 금액(총액, :currency)을 표시하세요.', - 'createBudget' => '새 예산', - 'invalid_currency' => '유효하지 않은 통화입니다', - 'invalid_amount' => '금액을 입력하세요', - 'set_ab' => '사용 가능한 예산 금액이 설정되었습니다', - 'updated_ab' => '사용 가능한 예산 금액이 업데이트되었습니다', - 'deleted_ab' => '사용 가능한 예산 금액이 삭제되었습니다', - 'deleted_bl' => '예산 금액이 제거되었습니다', - 'alt_currency_ab_create' => '사용 가능한 예산을 다른 통화로 설정', - 'bl_create_btn' => '다른 통화로 예산 설정', - 'inactiveBudgets' => '비활성 예산', - 'without_budget_between' => ':start과 :end 사이에 예산이 없는 거래', - 'delete_budget' => '":name" 예산 삭제', - 'deleted_budget' => '":name" 예산 삭제됨', - 'edit_budget' => '":name" 예산 수정', - 'updated_budget' => '":name" 예산 업데이트됨', - 'update_amount' => '금액 업데이트', - 'update_budget' => '예산 업데이트', - 'update_budget_amount_range' => ':start과 :end 사이의 사용 가능한 금액 업데이트 (예상)', - 'set_budget_limit_title' => ':start과 :end 사이에 예산 :budget에 대한 예산 금액 설정', - 'set_budget_limit' => '예산 금액 설정', - 'budget_period_navigator' => '기간 탐색기', - 'info_on_available_amount' => '무엇을 사용할 수 있나요?', - 'available_amount_indication' => '이 금액을 사용하여 총 예산이 얼마인지 파악할 수 있습니다.', - 'suggested' => '추천', - 'average_between' => ':start과 :end 사이의 평균', - 'transferred_in' => '전송됨 (입)', - 'transferred_away' => '전송됨 (출)', - 'auto_budget_none' => '자동 예산 없음', - 'auto_budget_reset' => '매 기간마다 고정 금액 설정', - 'auto_budget_rollover' => '기간마다 금액 추가', - 'auto_budget_adjusted' => '초과 지출을 수정하기 위해 매 기간마다 금액을 추가합니다.', - 'auto_budget_period_daily' => '매일', - 'auto_budget_period_weekly' => '매주', - 'auto_budget_period_monthly' => '월간', - 'auto_budget_period_quarterly' => '분기별', - 'auto_budget_period_half_year' => '반년마다', - 'auto_budget_period_yearly' => '연간', - 'auto_budget_help' => '이 기능에 대한 자세한 내용은 도움말에서 확인할 수 있습니다. 오른쪽 상단의 (?) 아이콘을 클릭합니다.', - 'auto_budget_reset_icon' => '이 예산은 주기적으로 설정됩니다.', - 'auto_budget_rollover_icon' => '예산 금액은 주기적으로 증가합니다.', - 'auto_budget_adjusted_icon' => '예산 금액은 주기적으로 증가하고, 초과지출을 수정합니다.', - 'remove_budgeted_amount' => ':currency에서 예산 금액 제거', + 'daily_budgets' => '일일 예산', + 'weekly_budgets' => '주간 예산', + 'monthly_budgets' => '월간 예산', + 'quarterly_budgets' => '분기별 예산', + 'half_year_budgets' => '반기 예산', + 'yearly_budgets' => '연간 예산', + 'other_budgets' => '사용자 정의 시간 예산', + 'budget_limit_not_in_range' => '이 금액은 :start부터 :end까지 적용됩니다', + 'total_available_budget' => '사용 가능한 총 예산 (:start에서 :end 사이)', + 'total_available_budget_in_currency' => ':currency로 사용 가능한 총 예산', + 'see_below' => '아래를 참조하세요.', + 'create_new_budget' => '새로운 예산 생성', + 'store_new_budget' => '새 예산 저장', + 'stored_new_budget' => '새 예산 ":name" 저장됨', + 'available_between' => ':start와 :end 사이에서 사용 가능', + 'transactionsWithoutBudget' => '예산이 없는 지출', + 'transactions_no_budget' => ':start과 :end 사이에 예산이 없는 지출', + 'spent_between' => ':start와 :end 사이에 이미 사용되었습니다', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => '사용 가능한 금액 설정', + 'update_available_amount' => '사용 가능한 금액 업데이트', + 'ab_basic_modal_explain' => '이 양식을 사용하여 지정한 기간에 예산을 책정할 수 있을 것으로 예상되는 금액(총액, :currency)을 표시하세요.', + 'createBudget' => '새 예산', + 'invalid_currency' => '유효하지 않은 통화입니다', + 'invalid_amount' => '금액을 입력하세요', + 'set_ab' => '사용 가능한 예산 금액이 설정되었습니다', + 'updated_ab' => '사용 가능한 예산 금액이 업데이트되었습니다', + 'deleted_ab' => '사용 가능한 예산 금액이 삭제되었습니다', + 'deleted_bl' => '예산 금액이 제거되었습니다', + 'alt_currency_ab_create' => '사용 가능한 예산을 다른 통화로 설정', + 'bl_create_btn' => '다른 통화로 예산 설정', + 'inactiveBudgets' => '비활성 예산', + 'without_budget_between' => ':start과 :end 사이에 예산이 없는 거래', + 'delete_budget' => '":name" 예산 삭제', + 'deleted_budget' => '":name" 예산 삭제됨', + 'edit_budget' => '":name" 예산 수정', + 'updated_budget' => '":name" 예산 업데이트됨', + 'update_amount' => '금액 업데이트', + 'update_budget' => '예산 업데이트', + 'update_budget_amount_range' => ':start과 :end 사이의 사용 가능한 금액 업데이트 (예상)', + 'set_budget_limit_title' => ':start과 :end 사이에 예산 :budget에 대한 예산 금액 설정', + 'set_budget_limit' => '예산 금액 설정', + 'budget_period_navigator' => '기간 탐색기', + 'info_on_available_amount' => '무엇을 사용할 수 있나요?', + 'available_amount_indication' => '이 금액을 사용하여 총 예산이 얼마인지 파악할 수 있습니다.', + 'suggested' => '추천', + 'average_between' => ':start과 :end 사이의 평균', + 'transferred_in' => '전송됨 (입)', + 'transferred_away' => '전송됨 (출)', + 'auto_budget_none' => '자동 예산 없음', + 'auto_budget_reset' => '매 기간마다 고정 금액 설정', + 'auto_budget_rollover' => '기간마다 금액 추가', + 'auto_budget_adjusted' => '초과 지출을 수정하기 위해 매 기간마다 금액을 추가합니다.', + 'auto_budget_period_daily' => '매일', + 'auto_budget_period_weekly' => '매주', + 'auto_budget_period_monthly' => '월간', + 'auto_budget_period_quarterly' => '분기별', + 'auto_budget_period_half_year' => '반년마다', + 'auto_budget_period_yearly' => '연간', + 'auto_budget_help' => '이 기능에 대한 자세한 내용은 도움말에서 확인할 수 있습니다. 오른쪽 상단의 (?) 아이콘을 클릭합니다.', + 'auto_budget_reset_icon' => '이 예산은 주기적으로 설정됩니다.', + 'auto_budget_rollover_icon' => '예산 금액은 주기적으로 증가합니다.', + 'auto_budget_adjusted_icon' => '예산 금액은 주기적으로 증가하고, 초과지출을 수정합니다.', + 'remove_budgeted_amount' => ':currency에서 예산 금액 제거', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => '이 기간에는 예상되지 않음', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => '아니요 (아직)', - 'visit_bill' => 'Firefly III에서 ":name" 청구서 방문하기', - 'match_between_amounts' => '청구서는 :low와 :high 사이의 거래를 일치시킵니다.', - 'running_again_loss' => '이전에 이 청구서에 연결된 거래가 더 이상 규칙과 일치하지 않는 경우 연결이 끊어질 수 있습니다.', - 'bill_related_rules' => '이 청구서와 관련된 규칙', - 'repeats' => '반복', - 'bill_end_date_help' => '선택 필드입니다. 청구서는 이 날짜에 종료될 예정입니다.', - 'bill_extension_date_help' => '선택 필드입니다. 청구서는 이 날짜 또는 그 이전에 연장(또는 취소)되어야 합니다.', - 'bill_end_index_line' => '이 청구서는 :date에 종료됩니다', - 'bill_extension_index_line' => '이 청구서는 :date에 연장 또는 취소되어야 합니다', - 'connected_journals' => '연결된 거래', - 'auto_match_on' => 'Firefly III에 의해 자동 매칭', - 'auto_match_off' => 'Firefly III에 의해 자동 매칭되지 않음', - 'next_expected_match' => '다음 예상 지불일', - 'delete_bill' => '":name" 청구서 삭제', - 'deleted_bill' => '":name" 청구서 삭제됨', - 'edit_bill' => '":name" 청구서 수정', - 'more' => '더보기', - 'rescan_old' => '모든 거래에서 규칙을 다시 실행합니다', - 'update_bill' => '청구서 업데이트', - 'updated_bill' => '":name" 청구서 업데이트됨', - 'store_new_bill' => '새 청구서 저장', - 'stored_new_bill' => '저장된 새 ":name" 청구서', - 'cannot_scan_inactive_bill' => '비활성 청구서는 스캔할 수 없습니다.', - 'rescanned_bill' => '모두 다시 스캔하고 :count개의 거래를 청구서에 연결했습니다.|모두 다시 스캔하고 :count개의 거래를 청구서에 연결했습니다.', - 'average_bill_amount_year' => '평균 청구서 금액 (:year)', - 'average_bill_amount_overall' => '평균 청구서 금액 (전체)', - 'bill_is_active' => '청구서가 활성 상태입니다', - 'bill_expected_between' => ':start와 :end 사이에 예상됨', - 'bill_will_automatch' => '청구서는 일치하는 거래에 자동으로 연결됩니다', - 'skips_over' => '건너뛰기', - 'bill_store_error' => '새 청구서를 저장하는 동안 예기치 않은 오류가 발생했습니다. 로그 파일을 확인해 주세요.', - 'list_inactive_rule' => '비활성 규칙', - 'bill_edit_rules' => 'Firefly III가 이 청구서와 관련된 규칙도 수정하려고 시도합니다. 그러나 이 규칙을 직접 수정한 경우 Firefly III는 아무 것도 변경하지 않습니다.| Firefly III는 이 청구서와 관련된 :count개의 규칙도 편집하려고 시도합니다. 그러나 이러한 규칙을 직접 편집한 경우 Firefly III는 아무것도 변경하지 않습니다.', - 'bill_expected_date' => ':date 예정', - 'bill_expected_date_js' => '{date} 예정', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => '{date}에 결제', - 'bill_repeats_weekly' => '매주 반복', - 'bill_repeats_monthly' => '매달 반복', - 'bill_repeats_quarterly' => '분기별 반복', - 'bill_repeats_half-year' => '반년마다 반복', - 'bill_repeats_yearly' => '매년 반복', - 'bill_repeats_weekly_other' => '격주 반복', - 'bill_repeats_monthly_other' => '격월 반복', - 'bill_repeats_quarterly_other' => '격분기 반복', - 'bill_repeats_half-year_other' => '매년 반복', - 'bill_repeats_yearly_other' => '격년 반복', - 'bill_repeats_weekly_skip' => '{skip} 주마다 반복', - 'bill_repeats_monthly_skip' => '{skip} 월마다 반복', - 'bill_repeats_quarterly_skip' => '{skip} 분기마다 반복', - 'bill_repeats_half-year_skip' => '{skip} 반년마다 반복', - 'bill_repeats_yearly_skip' => '{skip} 년마다 반복', - 'subscriptions' => '구독', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => '무기한', - 'extension_date_is' => '연장 날짜는 {date}입니다', + 'subscription' => 'Subscription', + 'not_expected_period' => '이 기간에는 예상되지 않음', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => '아니요 (아직)', + 'visit_bill' => 'Firefly III에서 ":name" 청구서 방문하기', + 'match_between_amounts' => '청구서는 :low와 :high 사이의 거래를 일치시킵니다.', + 'running_again_loss' => '이전에 이 청구서에 연결된 거래가 더 이상 규칙과 일치하지 않는 경우 연결이 끊어질 수 있습니다.', + 'bill_related_rules' => '이 청구서와 관련된 규칙', + 'repeats' => '반복', + 'bill_end_date_help' => '선택 필드입니다. 청구서는 이 날짜에 종료될 예정입니다.', + 'bill_extension_date_help' => '선택 필드입니다. 청구서는 이 날짜 또는 그 이전에 연장(또는 취소)되어야 합니다.', + 'bill_end_index_line' => '이 청구서는 :date에 종료됩니다', + 'bill_extension_index_line' => '이 청구서는 :date에 연장 또는 취소되어야 합니다', + 'connected_journals' => '연결된 거래', + 'auto_match_on' => 'Firefly III에 의해 자동 매칭', + 'auto_match_off' => 'Firefly III에 의해 자동 매칭되지 않음', + 'next_expected_match' => '다음 예상 지불일', + 'delete_bill' => '":name" 청구서 삭제', + 'deleted_bill' => '":name" 청구서 삭제됨', + 'edit_bill' => '":name" 청구서 수정', + 'more' => '더보기', + 'rescan_old' => '모든 거래에서 규칙을 다시 실행합니다', + 'update_bill' => '청구서 업데이트', + 'updated_bill' => '":name" 청구서 업데이트됨', + 'store_new_bill' => '새 청구서 저장', + 'stored_new_bill' => '저장된 새 ":name" 청구서', + 'cannot_scan_inactive_bill' => '비활성 청구서는 스캔할 수 없습니다.', + 'rescanned_bill' => '모두 다시 스캔하고 :count개의 거래를 청구서에 연결했습니다.|모두 다시 스캔하고 :count개의 거래를 청구서에 연결했습니다.', + 'average_bill_amount_year' => '평균 청구서 금액 (:year)', + 'average_bill_amount_overall' => '평균 청구서 금액 (전체)', + 'bill_is_active' => '청구서가 활성 상태입니다', + 'bill_expected_between' => ':start와 :end 사이에 예상됨', + 'bill_will_automatch' => '청구서는 일치하는 거래에 자동으로 연결됩니다', + 'skips_over' => '건너뛰기', + 'bill_store_error' => '새 청구서를 저장하는 동안 예기치 않은 오류가 발생했습니다. 로그 파일을 확인해 주세요.', + 'list_inactive_rule' => '비활성 규칙', + 'bill_edit_rules' => 'Firefly III가 이 청구서와 관련된 규칙도 수정하려고 시도합니다. 그러나 이 규칙을 직접 수정한 경우 Firefly III는 아무 것도 변경하지 않습니다.| Firefly III는 이 청구서와 관련된 :count개의 규칙도 편집하려고 시도합니다. 그러나 이러한 규칙을 직접 편집한 경우 Firefly III는 아무것도 변경하지 않습니다.', + 'bill_expected_date' => ':date 예정', + 'bill_expected_date_js' => '{date} 예정', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => '{date}에 결제', + 'bill_repeats_weekly' => '매주 반복', + 'bill_repeats_monthly' => '매달 반복', + 'bill_repeats_quarterly' => '분기별 반복', + 'bill_repeats_half-year' => '반년마다 반복', + 'bill_repeats_yearly' => '매년 반복', + 'bill_repeats_weekly_other' => '격주 반복', + 'bill_repeats_monthly_other' => '격월 반복', + 'bill_repeats_quarterly_other' => '격분기 반복', + 'bill_repeats_half-year_other' => '매년 반복', + 'bill_repeats_yearly_other' => '격년 반복', + 'bill_repeats_weekly_skip' => '{skip} 주마다 반복', + 'bill_repeats_monthly_skip' => '{skip} 월마다 반복', + 'bill_repeats_quarterly_skip' => '{skip} 분기마다 반복', + 'bill_repeats_half-year_skip' => '{skip} 반년마다 반복', + 'bill_repeats_yearly_skip' => '{skip} 년마다 반복', + 'subscriptions' => '구독', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => '무기한', + 'extension_date_is' => '연장 날짜는 {date}입니다', // accounts: - 'i_am_owed_amount' => '미납 금액', - 'i_owe_amount' => '미납 금액', - 'inactive_account_link' => '비활성(보관된) 계정이 :count개가 있으며, 이 별도 페이지에서 확인할 수 있습니다.|비활성(보관된) 계정이 :count개가 있으며, 이 별도 페이지에서 확인할 수 있습니다.', - 'all_accounts_inactive' => '귀하의 비활성 계정입니다.', - 'active_account_link' => '이 링크는 활성 계정으로 돌아갑니다.', - 'account_missing_transaction' => '계정 #:id(":name")를 직접 볼 수 없지만 Firefly에 리디렉션 정보가 누락되어 있습니다.', - 'cc_monthly_payment_date_help' => '연도와 월을 선택해도 무시됩니다. 해당 월의 날짜만 관련이 있습니다.', - 'details_for_asset' => '자산 계정 ":name"에 대한 세부 정보', - 'details_for_expense' => '지출 계정 ":name"에 대한 세부 정보', - 'details_for_revenue' => '수익 계정 ":name"에 대한 세부 정보', - 'details_for_cash' => '현금 계정 ":name"에 대한 세부 정보', - 'store_new_asset_account' => '새 자산 계정 저장', - 'store_new_expense_account' => '새 지출 계정 저장', - 'store_new_revenue_account' => '새 수익 계정 저장', - 'edit_asset_account' => '":name" 자산 계정 수정', - 'edit_expense_account' => '":name" 지출 계정 수정', - 'edit_revenue_account' => '":name" 수익 계정 수정', - 'delete_asset_account' => '":name" 자산 계정 삭제', - 'delete_expense_account' => '":name" 지출 계정 삭제', - 'delete_revenue_account' => '":name" 수익 계정 삭제', - 'delete_liabilities_account' => '":name" 부채 삭제', - 'asset_deleted' => '":name" 자산 계정 삭제 성공', - 'account_deleted' => '":name" 계정 삭제 성공', - 'expense_deleted' => '":name" 지출 계정 삭제 성공', - 'revenue_deleted' => '":name" 수익 계정 삭제 성공', - 'update_asset_account' => '자산 계정 업데이트', - 'update_undefined_account' => '계정 업데이트', - 'update_liabilities_account' => '부채 업데이트', - 'update_expense_account' => '지출 계정 업데이트', - 'update_revenue_account' => '수익 계정 업데이트', - 'make_new_asset_account' => '새 자산 계정 생성', - 'make_new_expense_account' => '새 지출 계정 생성', - 'make_new_revenue_account' => '새 수익 계정 생성', - 'make_new_liabilities_account' => '새 부채 생성', - 'asset_accounts' => '자산 계정', - 'undefined_accounts' => '계정', - 'asset_accounts_inactive' => '자산 계정 (비활성)', - 'expense_account' => '지출 계정', - 'expense_accounts' => '지출 계정', - 'expense_accounts_inactive' => '지출 계정 (비활성)', - 'revenue_account' => '수익 계정', - 'revenue_accounts' => '수익 계정', - 'revenue_accounts_inactive' => '수익 계정 (비활성)', - 'cash_accounts' => '현금 계정', - 'Cash account' => '현금 계정', - 'liabilities_accounts' => '부채', - 'liabilities_accounts_inactive' => '부채 (비활성)', - 'reconcile_account' => '":account" 계정 조정', - 'overview_of_reconcile_modal' => '조정 개요', - 'delete_reconciliation' => '조정 삭제', - 'update_reconciliation' => '조정 업데이트', - 'amount_cannot_be_zero' => '금액은 0이 될 수 없습니다', - 'end_of_reconcile_period' => '조정 기간 종료: :period', - 'start_of_reconcile_period' => '조정 기간 시작: :period', - 'start_balance' => '시작 잔액', - 'end_balance' => '종료 잔액', - 'update_balance_dates_instruction' => '위의 금액과 날짜를 은행 명세서와 일치시키고 \'조정 시작\'을 누릅니다.', - 'select_transactions_instruction' => '은행 명세서에 표시되는 거래를 선택합니다.', - 'select_range_and_balance' => '먼저 날짜 범위와 잔액을 확인합니다. 그런 다음 "조정 시작"을 누릅니다.', - 'date_change_instruction' => '지금 날짜 범위를 변경하면 진행 상황을 모두 잃어버립니다.', - 'update_selection' => '선택 항목 업데이트', - 'store_reconcile' => '조정 저장', - 'reconciliation_transaction' => '조정 거래', - 'Reconciliation' => '조정', - 'reconciliation' => '조정', - 'reconcile_options' => '조정 옵션', - 'reconcile_range' => '조정 범위', - 'start_reconcile' => '조정 시작', - 'cash_account_type' => '현금', - 'cash' => '현금', - 'cant_find_redirect_account' => 'Firefly III가 리디렉션을 시도했지만 실패했습니다. 죄송합니다. 색인으로 돌아갑니다.', - 'account_type' => '계정 유형', - 'save_transactions_by_moving' => '이 거래를 다른 계정으로 이동하여 저장:|이 거래들을 다른 계정으로 이동하여 저장:', - 'save_transactions_by_moving_js' => '거래가 없음|이 거래를 다른 계정으로 이동하여 저장합니다.|이 거래들을 다른 계정으로 이동하여 저장합니다.', - 'stored_new_account' => '새 계정 ":name"이 저장되었습니다!', - 'stored_new_account_js' => '새로운 "{name}" 계정이 저장되었습니다!', - 'updated_account' => '":name" 계정 업데이트됨', - 'updated_account_js' => '"{title}" 계정이 업데이트 되었습니다.', - 'credit_card_options' => '신용 카드 옵션', - 'no_transactions_account' => '자산 계정 ":name"에 대한 거래가 (이 기간 동안) 없습니다.', - 'no_transactions_period' => '(이 기간 동안) 거래가 없습니다.', - 'no_data_for_chart' => '이 차트를 생성하기 위한 정보가 (아직) 충분하지 않습니다.', - 'select_at_least_one_account' => '자산 계정을 하나 이상 선택해 주세요', - 'select_at_least_one_category' => '카테고리를 하나 이상 선택해 주세요', - 'select_at_least_one_budget' => '예산을 하나 이상 선택해 주세요', - 'select_at_least_one_tag' => '태그를 하나 이상 선택해 주세요', - 'select_at_least_one_expense' => '비용/수익 계정 조합을 하나 이상 선택해 주세요. 없는 경우(목록이 비어 있는 경우) 이 보고서를 사용할 수 없습니다.', - 'account_default_currency' => '이것은 이 계정과 연결된 기본 통화가 됩니다.', - 'reconcile_has_more' => 'Firefly III 원장에 은행에서 청구한 금액보다 더 많은 금액이 있습니다. 몇 가지 옵션이 있습니다. 수행할 작업을 선택하십시오. 그런 다음 "조정 확인"을 누릅니다.', - 'reconcile_has_less' => 'Firefly III 원장에 은행에서 청구한 금액보다 더 적은 금액이 있습니다. 몇 가지 옵션이 있습니다. 수행할 작업을 선택하십시오. 그런 다음 "조정 확인"을 누릅니다.', - 'reconcile_is_equal' => 'Firefly III 원장과 은행 명세서가 일치합니다. 추가로 할 일이 없습니다. "조정 확인"을 눌러 입력 내용을 확인하십시오.', - 'create_pos_reconcile_transaction' => '선택한 거래를 지우고 이 자산 계정에 :amount을 추가하는 정정을 생성합니다.', - 'create_neg_reconcile_transaction' => '선택한 거래를 지우고 이 자산 계정에서 :amount을 제거하는 정정을 생성합니다.', - 'reconcile_do_nothing' => '선택한 거래를 지우지만 수정하지는 않습니다.', - 'reconcile_go_back' => '나중에 언제든지 수정 내용을 수정하거나 삭제할 수 있습니다.', - 'must_be_asset_account' => '자산 계정만 조정할 수 있습니다', - 'reconciliation_stored' => '조정이 저장됨', - 'reconciliation_error' => '거래가 조정된 것으로 표시되었지만 오류로 인해 수정 사항이 저장되지 않았습니다: :error', - 'reconciliation_transaction_title' => '조정 (:from에서 :to로)', - 'sum_of_reconciliation' => '조정 합계', - 'reconcile_this_account' => '이 계정 조정하기', - 'reconcile' => '조정', - 'show' => '표시', - 'confirm_reconciliation' => '조정 확인', - 'submitted_start_balance' => '제출된 시작 잔고', - 'selected_transactions' => '선택한 거래 (:count)', - 'already_cleared_transactions' => '이미 지워진 거래 (:count)', - 'submitted_end_balance' => '제출된 최종 잔고', - 'initial_balance_description' => '":account"의 초기 잔고', - 'liability_credit_description' => '":account"에 대한 부채 크레딧', - 'interest_calc_' => '알 수 없음', - 'interest_calc_daily' => '일별', - 'interest_calc_monthly' => '월별', - 'interest_calc_yearly' => '연간', - 'interest_calc_weekly' => '주당', - 'interest_calc_half-year' => '반기당', - 'interest_calc_quarterly' => '분기당', - 'initial_balance_account' => ':account의 초기 잔액 계정', - 'list_options' => '목록 옵션', + 'i_am_owed_amount' => '미납 금액', + 'i_owe_amount' => '미납 금액', + 'inactive_account_link' => '비활성(보관된) 계정이 :count개가 있으며, 이 별도 페이지에서 확인할 수 있습니다.|비활성(보관된) 계정이 :count개가 있으며, 이 별도 페이지에서 확인할 수 있습니다.', + 'all_accounts_inactive' => '귀하의 비활성 계정입니다.', + 'active_account_link' => '이 링크는 활성 계정으로 돌아갑니다.', + 'account_missing_transaction' => '계정 #:id(":name")를 직접 볼 수 없지만 Firefly에 리디렉션 정보가 누락되어 있습니다.', + 'cc_monthly_payment_date_help' => '연도와 월을 선택해도 무시됩니다. 해당 월의 날짜만 관련이 있습니다.', + 'details_for_asset' => '자산 계정 ":name"에 대한 세부 정보', + 'details_for_expense' => '지출 계정 ":name"에 대한 세부 정보', + 'details_for_revenue' => '수익 계정 ":name"에 대한 세부 정보', + 'details_for_cash' => '현금 계정 ":name"에 대한 세부 정보', + 'store_new_asset_account' => '새 자산 계정 저장', + 'store_new_expense_account' => '새 지출 계정 저장', + 'store_new_revenue_account' => '새 수익 계정 저장', + 'edit_asset_account' => '":name" 자산 계정 수정', + 'edit_expense_account' => '":name" 지출 계정 수정', + 'edit_revenue_account' => '":name" 수익 계정 수정', + 'delete_asset_account' => '":name" 자산 계정 삭제', + 'delete_expense_account' => '":name" 지출 계정 삭제', + 'delete_revenue_account' => '":name" 수익 계정 삭제', + 'delete_liabilities_account' => '":name" 부채 삭제', + 'asset_deleted' => '":name" 자산 계정 삭제 성공', + 'account_deleted' => '":name" 계정 삭제 성공', + 'expense_deleted' => '":name" 지출 계정 삭제 성공', + 'revenue_deleted' => '":name" 수익 계정 삭제 성공', + 'update_asset_account' => '자산 계정 업데이트', + 'update_undefined_account' => '계정 업데이트', + 'update_liabilities_account' => '부채 업데이트', + 'update_expense_account' => '지출 계정 업데이트', + 'update_revenue_account' => '수익 계정 업데이트', + 'make_new_asset_account' => '새 자산 계정 생성', + 'make_new_expense_account' => '새 지출 계정 생성', + 'make_new_revenue_account' => '새 수익 계정 생성', + 'make_new_liabilities_account' => '새 부채 생성', + 'asset_accounts' => '자산 계정', + 'undefined_accounts' => '계정', + 'asset_accounts_inactive' => '자산 계정 (비활성)', + 'expense_account' => '지출 계정', + 'expense_accounts' => '지출 계정', + 'expense_accounts_inactive' => '지출 계정 (비활성)', + 'revenue_account' => '수익 계정', + 'revenue_accounts' => '수익 계정', + 'revenue_accounts_inactive' => '수익 계정 (비활성)', + 'cash_accounts' => '현금 계정', + 'Cash account' => '현금 계정', + 'liabilities_accounts' => '부채', + 'liabilities_accounts_inactive' => '부채 (비활성)', + 'reconcile_account' => '":account" 계정 조정', + 'overview_of_reconcile_modal' => '조정 개요', + 'delete_reconciliation' => '조정 삭제', + 'update_reconciliation' => '조정 업데이트', + 'amount_cannot_be_zero' => '금액은 0이 될 수 없습니다', + 'end_of_reconcile_period' => '조정 기간 종료: :period', + 'start_of_reconcile_period' => '조정 기간 시작: :period', + 'start_balance' => '시작 잔액', + 'end_balance' => '종료 잔액', + 'update_balance_dates_instruction' => '위의 금액과 날짜를 은행 명세서와 일치시키고 \'조정 시작\'을 누릅니다.', + 'select_transactions_instruction' => '은행 명세서에 표시되는 거래를 선택합니다.', + 'select_range_and_balance' => '먼저 날짜 범위와 잔액을 확인합니다. 그런 다음 "조정 시작"을 누릅니다.', + 'date_change_instruction' => '지금 날짜 범위를 변경하면 진행 상황을 모두 잃어버립니다.', + 'update_selection' => '선택 항목 업데이트', + 'store_reconcile' => '조정 저장', + 'reconciliation_transaction' => '조정 거래', + 'Reconciliation' => '조정', + 'reconciliation' => '조정', + 'reconcile_options' => '조정 옵션', + 'reconcile_range' => '조정 범위', + 'start_reconcile' => '조정 시작', + 'cash_account_type' => '현금', + 'cash' => '현금', + 'cant_find_redirect_account' => 'Firefly III가 리디렉션을 시도했지만 실패했습니다. 죄송합니다. 색인으로 돌아갑니다.', + 'account_type' => '계정 유형', + 'save_transactions_by_moving' => '이 거래를 다른 계정으로 이동하여 저장:|이 거래들을 다른 계정으로 이동하여 저장:', + 'save_transactions_by_moving_js' => '거래가 없음|이 거래를 다른 계정으로 이동하여 저장합니다.|이 거래들을 다른 계정으로 이동하여 저장합니다.', + 'stored_new_account' => '새 계정 ":name"이 저장되었습니다!', + 'stored_new_account_js' => '새로운 "{name}" 계정이 저장되었습니다!', + 'updated_account' => '":name" 계정 업데이트됨', + 'updated_account_js' => '"{title}" 계정이 업데이트 되었습니다.', + 'credit_card_options' => '신용 카드 옵션', + 'no_transactions_account' => '자산 계정 ":name"에 대한 거래가 (이 기간 동안) 없습니다.', + 'no_transactions_period' => '(이 기간 동안) 거래가 없습니다.', + 'no_data_for_chart' => '이 차트를 생성하기 위한 정보가 (아직) 충분하지 않습니다.', + 'select_at_least_one_account' => '자산 계정을 하나 이상 선택해 주세요', + 'select_at_least_one_category' => '카테고리를 하나 이상 선택해 주세요', + 'select_at_least_one_budget' => '예산을 하나 이상 선택해 주세요', + 'select_at_least_one_tag' => '태그를 하나 이상 선택해 주세요', + 'select_at_least_one_expense' => '비용/수익 계정 조합을 하나 이상 선택해 주세요. 없는 경우(목록이 비어 있는 경우) 이 보고서를 사용할 수 없습니다.', + 'account_default_currency' => '이것은 이 계정과 연결된 기본 통화가 됩니다.', + 'reconcile_has_more' => 'Firefly III 원장에 은행에서 청구한 금액보다 더 많은 금액이 있습니다. 몇 가지 옵션이 있습니다. 수행할 작업을 선택하십시오. 그런 다음 "조정 확인"을 누릅니다.', + 'reconcile_has_less' => 'Firefly III 원장에 은행에서 청구한 금액보다 더 적은 금액이 있습니다. 몇 가지 옵션이 있습니다. 수행할 작업을 선택하십시오. 그런 다음 "조정 확인"을 누릅니다.', + 'reconcile_is_equal' => 'Firefly III 원장과 은행 명세서가 일치합니다. 추가로 할 일이 없습니다. "조정 확인"을 눌러 입력 내용을 확인하십시오.', + 'create_pos_reconcile_transaction' => '선택한 거래를 지우고 이 자산 계정에 :amount을 추가하는 정정을 생성합니다.', + 'create_neg_reconcile_transaction' => '선택한 거래를 지우고 이 자산 계정에서 :amount을 제거하는 정정을 생성합니다.', + 'reconcile_do_nothing' => '선택한 거래를 지우지만 수정하지는 않습니다.', + 'reconcile_go_back' => '나중에 언제든지 수정 내용을 수정하거나 삭제할 수 있습니다.', + 'must_be_asset_account' => '자산 계정만 조정할 수 있습니다', + 'reconciliation_stored' => '조정이 저장됨', + 'reconciliation_error' => '거래가 조정된 것으로 표시되었지만 오류로 인해 수정 사항이 저장되지 않았습니다: :error', + 'reconciliation_transaction_title' => '조정 (:from에서 :to로)', + 'sum_of_reconciliation' => '조정 합계', + 'reconcile_this_account' => '이 계정 조정하기', + 'reconcile' => '조정', + 'show' => '표시', + 'confirm_reconciliation' => '조정 확인', + 'submitted_start_balance' => '제출된 시작 잔고', + 'selected_transactions' => '선택한 거래 (:count)', + 'already_cleared_transactions' => '이미 지워진 거래 (:count)', + 'submitted_end_balance' => '제출된 최종 잔고', + 'initial_balance_description' => '":account"의 초기 잔고', + 'liability_credit_description' => '":account"에 대한 부채 크레딧', + 'interest_calc_' => '알 수 없음', + 'interest_calc_daily' => '일별', + 'interest_calc_monthly' => '월별', + 'interest_calc_yearly' => '연간', + 'interest_calc_weekly' => '주당', + 'interest_calc_half-year' => '반기당', + 'interest_calc_quarterly' => '분기당', + 'initial_balance_account' => ':account의 초기 잔액 계정', + 'list_options' => '목록 옵션', // categories: - 'new_category' => '새 카테고리', - 'create_new_category' => '새 카테고리 생성', - 'without_category' => '카테고리 없음', - 'update_category' => '카테고리 업데이트', - 'updated_category' => '":name" 카테고리 업데이트됨', - 'categories' => '카테고리', - 'edit_category' => '":name" 카테고리 수정', - 'no_category' => '(카테고리 없음)', - 'unknown_category_plain' => '카테고리 없음', - 'category' => '카테고리', - 'delete_category' => '":name" 카테고리 삭제', - 'deleted_category' => '":name" 카테고리 삭제됨', - 'store_category' => '새 카테고리 저장', - 'stored_category' => '새로운":name" 카테고리가 저장되었습니다', - 'without_category_between' => ':start와 :end 사이에 카테고리가 없음', + 'new_category' => '새 카테고리', + 'create_new_category' => '새 카테고리 생성', + 'without_category' => '카테고리 없음', + 'update_category' => '카테고리 업데이트', + 'updated_category' => '":name" 카테고리 업데이트됨', + 'categories' => '카테고리', + 'edit_category' => '":name" 카테고리 수정', + 'no_category' => '(카테고리 없음)', + 'unknown_category_plain' => '카테고리 없음', + 'category' => '카테고리', + 'delete_category' => '":name" 카테고리 삭제', + 'deleted_category' => '":name" 카테고리 삭제됨', + 'store_category' => '새 카테고리 저장', + 'stored_category' => '새로운":name" 카테고리가 저장되었습니다', + 'without_category_between' => ':start와 :end 사이에 카테고리가 없음', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => '출금 업데이트', - 'update_deposit' => '입금 업데이트', - 'update_transaction' => '거래 업데이트', - 'update_transfer' => '이체 업데이트', - 'updated_withdrawal' => '":description" 출금이 업데이트됨', - 'updated_deposit' => '":description" 입금이 업데이트됨', - 'updated_transfer' => '":description" 이체가 업데이트됨', - 'no_changes_withdrawal' => '":description" 출금이 변경되지 않았습니다.', - 'no_changes_deposit' => '":description" 입금이 변경되지 않았습니다.', - 'no_changes_transfer' => '":description" 이체가 변경되지 않았습니다.', - 'delete_withdrawal' => '":description" 출금 삭제', - 'delete_deposit' => '":description" 입금 삭제', - 'delete_transfer' => '":description" 이체 삭제', - 'deleted_withdrawal' => '":description" 출금 삭제 성공', - 'deleted_deposit' => '":description" 입금 삭제 성공', - 'deleted_transfer' => '":description" 이체 삭제 성공', - 'deleted_reconciliation' => '":description" 조정 거래 삭제 성공', - 'stored_journal' => '새로운 ":description" 거래 생성 성공', - 'stored_journal_no_descr' => '새로운 거래 생성 성공', - 'updated_journal_no_descr' => '거래 업데이트 성공', - 'select_transactions' => '거래 선택', - 'rule_group_select_transactions' => '거래에 ":title" 적용', - 'rule_select_transactions' => '거래에 ":title" 적용', - 'stop_selection' => '거래 선택 중지', - 'reconcile_selected' => '조정', - 'mass_delete_journals' => '여러 거래 삭제', - 'mass_edit_journals' => '여러 거래 수정', - 'mass_bulk_journals' => '여러 거래 일괄 수정', - 'mass_bulk_journals_explain' => '이 양식을 사용하면 아래 나열된 거래의 속성을 한 번에 업데이트할 수 있습니다. 여기에 표시되는 매개변수를 변경하면 표에 있는 모든 거래가 업데이트됩니다.', - 'part_of_split' => '이 거래는 분할된 거래 중 일부입니다. 모든 분할을 선택하지 않은 경우 거래의 절반만 변경될 수 있습니다.', - 'bulk_set_new_values' => '아래 입력을 사용하여 새 값을 설정합니다. 입력란을 비워두면 모두에게 비워집니다. 또한 출금에 대해서만 예산이 부여된다는 점에 유의하세요.', - 'no_bulk_category' => '카테고리 업데이트 안 함', - 'no_bulk_budget' => '예산 업데이트 안 함', - 'no_bulk_tags' => '태그 업데이트 안 함', - 'replace_with_these_tags' => '다음 태그로 바꾸기', - 'append_these_tags' => '다음 태그 추가', - 'mass_edit' => '선택한 항목 개별 편집', - 'bulk_edit' => '선택한 항목 일괄 편집', - 'mass_delete' => '선택항목 삭제', - 'cannot_edit_other_fields' => '표시할 공간이 없어서 여기에 표시된 항목 이외의 다른 항목은 대량 편집할 수 없습니다. 이러한 항목을 편집하려면 링크를 따라 하나씩 편집하세요.', - 'cannot_change_amount_reconciled' => '조정된 거래 금액은 변경할 수 없습니다.', - 'no_budget' => '(예산 없음)', - 'no_bill' => '(청구서 없음)', - 'account_per_budget' => '예산당 계정', - 'account_per_category' => '카테고리당 계정', - 'create_new_object' => '생성', - 'empty' => '(비어 있음)', - 'all_other_budgets' => '(다른 모든 예산)', - 'all_other_accounts' => '(다른 모든 계정)', - 'expense_per_source_account' => '소스 계정당 지출', - 'expense_per_destination_account' => '대상 계정당 지출', - 'income_per_destination_account' => '대상 계정당 수입', - 'spent_in_specific_category' => '":category" 카테고리의 지출', - 'earned_in_specific_category' => '":category" 카테고리의 수입', - 'spent_in_specific_tag' => '":tag" 태그의 지출', - 'earned_in_specific_tag' => '":tag" 태그의 수입', - 'income_per_source_account' => '소스 계정당 수입', - 'average_spending_per_destination' => '대상 계정당 평균 지출', - 'average_spending_per_source' => '소스 계정당 평균 지출', - 'average_earning_per_source' => '소스 계정당 평균 수익', - 'average_earning_per_destination' => '대상 계정당 평균 수익', - 'account_per_tag' => '태그당 계정', - 'tag_report_expenses_listed_once' => '지출과 수입은 두 번 표시되지 않습니다. 거래에 여러 개의 태그가 있는 경우 해당 태그 중 하나만 표시될 수 있습니다. 이 목록에는 데이터가 누락된 것처럼 보일 수 있지만 금액은 정확합니다.', - 'double_report_expenses_charted_once' => '지출과 수입은 두 번 표시되지 않습니다. 거래에 여러 개의 태그가 있는 경우 해당 태그 중 하나에만 표시될 수 있습니다. 이 차트에는 데이터가 누락된 것처럼 보일 수 있지만 금액은 정확합니다.', - 'tag_report_chart_single_tag' => '이 차트는 단일 태그에 적용됩니다. 거래에 여러 개의 태그가 있는 경우 여기에 표시되는 내용이 다른 태그의 차트에도 반영될 수 있습니다.', - 'tag' => '태그', - 'no_budget_squared' => '(예산 없음)', - 'perm-delete-many' => '한 번에 많은 항목을 삭제하면 매우 혼란스러울 수 있으니 주의하시기 바랍니다. 이 페이지에서 분할 거래의 일부만 삭제할 수 있으므로 주의하세요.', - 'mass_deleted_transactions_success' => ':count개 거래가 삭제되었습니다.|:count개 거래가 삭제되었습니다.', - 'mass_edited_transactions_success' => ':count개 거래가 업데이트되었습니다.|:count개 거래가 업데이트되었습니다.', - 'opt_group_' => '(계정 유형 없음)', - 'opt_group_no_account_type' => '(계정 유형 없음)', - 'opt_group_defaultAsset' => '기본 자산 계정', - 'opt_group_savingAsset' => '예금 계좌', - 'opt_group_sharedAsset' => '공유 자산 계정', - 'opt_group_ccAsset' => '신용카드', - 'opt_group_cashWalletAsset' => '현금 지갑', - 'opt_group_expense_account' => '지출 계정', - 'opt_group_revenue_account' => '수익 계정', - 'opt_group_l_Loan' => '부채: 대출', - 'opt_group_cash_account' => '현금 계정', - 'opt_group_l_Debt' => '부채: 빚', - 'opt_group_l_Mortgage' => '부채: 모기지', - 'opt_group_l_Credit card' => '부채: 신용카드', - 'notes' => '노트', - 'unknown_journal_error' => '거래를 저장할 수 없습니다. 로그 파일을 확인해 주세요.', - 'attachment_not_found' => '이 첨부 파일을 찾을 수 없습니다.', - 'journal_link_bill' => '이 거래는 :name 청구서에 연결되어 있습니다. 연결을 제거하려면 확인란의 선택을 취소합니다. 규칙을 사용하여 다른 청구서에 연결합니다.', - 'transaction_stored_link' => '거래 #{ID} ("{title}")가 저장되었습니다.', - 'transaction_new_stored_link' => '거래 #{ID}가 저장되었습니다.', - 'transaction_updated_link' => '거래 #{ID} ("{title}") 이 업데이트 되었습니다.', - 'transaction_updated_no_changes' => '거래 #{ID}("{title}")에 변경 사항이 적용되지 않았습니다.', - 'first_split_decides' => '첫 번째 분할은 이 항목의 값을 결정합니다.', - 'first_split_overrules_source' => '첫 번째 분할은 소스 계정을 무시할 수 있습니다.', - 'first_split_overrules_destination' => '첫 번째 분할은 대상 계정을 무시할 수 있습니다.', - 'spent_x_of_y' => '{total} 중 {amount} 지출', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => '출금 업데이트', + 'update_deposit' => '입금 업데이트', + 'update_transaction' => '거래 업데이트', + 'update_transfer' => '이체 업데이트', + 'updated_withdrawal' => '":description" 출금이 업데이트됨', + 'updated_deposit' => '":description" 입금이 업데이트됨', + 'updated_transfer' => '":description" 이체가 업데이트됨', + 'no_changes_withdrawal' => '":description" 출금이 변경되지 않았습니다.', + 'no_changes_deposit' => '":description" 입금이 변경되지 않았습니다.', + 'no_changes_transfer' => '":description" 이체가 변경되지 않았습니다.', + 'delete_withdrawal' => '":description" 출금 삭제', + 'delete_deposit' => '":description" 입금 삭제', + 'delete_transfer' => '":description" 이체 삭제', + 'deleted_withdrawal' => '":description" 출금 삭제 성공', + 'deleted_deposit' => '":description" 입금 삭제 성공', + 'deleted_transfer' => '":description" 이체 삭제 성공', + 'deleted_reconciliation' => '":description" 조정 거래 삭제 성공', + 'stored_journal' => '새로운 ":description" 거래 생성 성공', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => '새로운 거래 생성 성공', + 'updated_journal_no_descr' => '거래 업데이트 성공', + 'select_transactions' => '거래 선택', + 'rule_group_select_transactions' => '거래에 ":title" 적용', + 'rule_select_transactions' => '거래에 ":title" 적용', + 'stop_selection' => '거래 선택 중지', + 'reconcile_selected' => '조정', + 'mass_delete_journals' => '여러 거래 삭제', + 'mass_edit_journals' => '여러 거래 수정', + 'mass_bulk_journals' => '여러 거래 일괄 수정', + 'mass_bulk_journals_explain' => '이 양식을 사용하면 아래 나열된 거래의 속성을 한 번에 업데이트할 수 있습니다. 여기에 표시되는 매개변수를 변경하면 표에 있는 모든 거래가 업데이트됩니다.', + 'part_of_split' => '이 거래는 분할된 거래 중 일부입니다. 모든 분할을 선택하지 않은 경우 거래의 절반만 변경될 수 있습니다.', + 'bulk_set_new_values' => '아래 입력을 사용하여 새 값을 설정합니다. 입력란을 비워두면 모두에게 비워집니다. 또한 출금에 대해서만 예산이 부여된다는 점에 유의하세요.', + 'no_bulk_category' => '카테고리 업데이트 안 함', + 'no_bulk_budget' => '예산 업데이트 안 함', + 'no_bulk_tags' => '태그 업데이트 안 함', + 'replace_with_these_tags' => '다음 태그로 바꾸기', + 'append_these_tags' => '다음 태그 추가', + 'mass_edit' => '선택한 항목 개별 편집', + 'bulk_edit' => '선택한 항목 일괄 편집', + 'mass_delete' => '선택항목 삭제', + 'cannot_edit_other_fields' => '표시할 공간이 없어서 여기에 표시된 항목 이외의 다른 항목은 대량 편집할 수 없습니다. 이러한 항목을 편집하려면 링크를 따라 하나씩 편집하세요.', + 'cannot_change_amount_reconciled' => '조정된 거래 금액은 변경할 수 없습니다.', + 'no_budget' => '(예산 없음)', + 'no_bill' => '(청구서 없음)', + 'account_per_budget' => '예산당 계정', + 'account_per_category' => '카테고리당 계정', + 'create_new_object' => '생성', + 'empty' => '(비어 있음)', + 'all_other_budgets' => '(다른 모든 예산)', + 'all_other_accounts' => '(다른 모든 계정)', + 'expense_per_source_account' => '소스 계정당 지출', + 'expense_per_destination_account' => '대상 계정당 지출', + 'income_per_destination_account' => '대상 계정당 수입', + 'spent_in_specific_category' => '":category" 카테고리의 지출', + 'earned_in_specific_category' => '":category" 카테고리의 수입', + 'spent_in_specific_tag' => '":tag" 태그의 지출', + 'earned_in_specific_tag' => '":tag" 태그의 수입', + 'income_per_source_account' => '소스 계정당 수입', + 'average_spending_per_destination' => '대상 계정당 평균 지출', + 'average_spending_per_source' => '소스 계정당 평균 지출', + 'average_earning_per_source' => '소스 계정당 평균 수익', + 'average_earning_per_destination' => '대상 계정당 평균 수익', + 'account_per_tag' => '태그당 계정', + 'tag_report_expenses_listed_once' => '지출과 수입은 두 번 표시되지 않습니다. 거래에 여러 개의 태그가 있는 경우 해당 태그 중 하나만 표시될 수 있습니다. 이 목록에는 데이터가 누락된 것처럼 보일 수 있지만 금액은 정확합니다.', + 'double_report_expenses_charted_once' => '지출과 수입은 두 번 표시되지 않습니다. 거래에 여러 개의 태그가 있는 경우 해당 태그 중 하나에만 표시될 수 있습니다. 이 차트에는 데이터가 누락된 것처럼 보일 수 있지만 금액은 정확합니다.', + 'tag_report_chart_single_tag' => '이 차트는 단일 태그에 적용됩니다. 거래에 여러 개의 태그가 있는 경우 여기에 표시되는 내용이 다른 태그의 차트에도 반영될 수 있습니다.', + 'tag' => '태그', + 'no_budget_squared' => '(예산 없음)', + 'perm-delete-many' => '한 번에 많은 항목을 삭제하면 매우 혼란스러울 수 있으니 주의하시기 바랍니다. 이 페이지에서 분할 거래의 일부만 삭제할 수 있으므로 주의하세요.', + 'mass_deleted_transactions_success' => ':count개 거래가 삭제되었습니다.|:count개 거래가 삭제되었습니다.', + 'mass_edited_transactions_success' => ':count개 거래가 업데이트되었습니다.|:count개 거래가 업데이트되었습니다.', + 'opt_group_' => '(계정 유형 없음)', + 'opt_group_no_account_type' => '(계정 유형 없음)', + 'opt_group_defaultAsset' => '기본 자산 계정', + 'opt_group_savingAsset' => '예금 계좌', + 'opt_group_sharedAsset' => '공유 자산 계정', + 'opt_group_ccAsset' => '신용카드', + 'opt_group_cashWalletAsset' => '현금 지갑', + 'opt_group_expense_account' => '지출 계정', + 'opt_group_revenue_account' => '수익 계정', + 'opt_group_l_Loan' => '부채: 대출', + 'opt_group_cash_account' => '현금 계정', + 'opt_group_l_Debt' => '부채: 빚', + 'opt_group_l_Mortgage' => '부채: 모기지', + 'opt_group_l_Credit card' => '부채: 신용카드', + 'notes' => '노트', + 'unknown_journal_error' => '거래를 저장할 수 없습니다. 로그 파일을 확인해 주세요.', + 'attachment_not_found' => '이 첨부 파일을 찾을 수 없습니다.', + 'journal_link_bill' => '이 거래는 :name 청구서에 연결되어 있습니다. 연결을 제거하려면 확인란의 선택을 취소합니다. 규칙을 사용하여 다른 청구서에 연결합니다.', + 'transaction_stored_link' => '거래 #{ID} ("{title}")가 저장되었습니다.', + 'transaction_new_stored_link' => '거래 #{ID}가 저장되었습니다.', + 'transaction_updated_link' => '거래 #{ID} ("{title}") 이 업데이트 되었습니다.', + 'transaction_updated_no_changes' => '거래 #{ID}("{title}")에 변경 사항이 적용되지 않았습니다.', + 'first_split_decides' => '첫 번째 분할은 이 항목의 값을 결정합니다.', + 'first_split_overrules_source' => '첫 번째 분할은 소스 계정을 무시할 수 있습니다.', + 'first_split_overrules_destination' => '첫 번째 분할은 대상 계정을 무시할 수 있습니다.', + 'spent_x_of_y' => '{total} 중 {amount} 지출', // new user: - 'welcome' => 'Firefly III에 오신 것을 환영합니다!', - 'submit' => '제출', - 'submission' => '제출', - 'submit_yes_really' => '제출 (내가 무엇을 하는지 알고 있습니다)', - 'getting_started' => '시작하기', - 'to_get_started' => 'Firefly III를 성공적으로 설치하셨다니 다행입니다. 이 도구를 시작하려면 은행 이름과 주 당좌 예금 계좌의 잔액을 입력하세요. 여러 개의 계좌가 있어도 걱정하지 마세요. 나중에 추가할 수 있습니다. Firefly III에는 시작할 무언가가 필요합니다.', - 'savings_balance_text' => 'Firefly III는 자동으로 저축 계좌를 생성합니다. 기본적으로 저축 계좌에는 돈이 없지만, Firefly III에 잔액을 알려주면 잔액이 그대로 저장됩니다.', - 'finish_up_new_user' => '끝났습니다! 제출을 눌러 계속할 수 있습니다. Firefly III의 색인으로 이동합니다.', - 'stored_new_accounts_new_user' => '야호! 새 계정이 저장되었습니다.', - 'set_preferred_language' => '다른 언어로 Firefly III를 사용하시려면 여기에 표시해 주세요.', - 'language' => '언어', - 'new_savings_account' => ':bank_name 저축 계좌', - 'cash_wallet' => '현금 지갑', - 'currency_not_present' => '일반적으로 사용하는 통화가 목록에 없더라도 걱정하지 마세요. 옵션 > 통화에서 직접 통화를 생성할 수 있습니다.', + 'welcome' => 'Firefly III에 오신 것을 환영합니다!', + 'submit' => '제출', + 'submission' => '제출', + 'submit_yes_really' => '제출 (내가 무엇을 하는지 알고 있습니다)', + 'getting_started' => '시작하기', + 'to_get_started' => 'Firefly III를 성공적으로 설치하셨다니 다행입니다. 이 도구를 시작하려면 은행 이름과 주 당좌 예금 계좌의 잔액을 입력하세요. 여러 개의 계좌가 있어도 걱정하지 마세요. 나중에 추가할 수 있습니다. Firefly III에는 시작할 무언가가 필요합니다.', + 'savings_balance_text' => 'Firefly III는 자동으로 저축 계좌를 생성합니다. 기본적으로 저축 계좌에는 돈이 없지만, Firefly III에 잔액을 알려주면 잔액이 그대로 저장됩니다.', + 'finish_up_new_user' => '끝났습니다! 제출을 눌러 계속할 수 있습니다. Firefly III의 색인으로 이동합니다.', + 'stored_new_accounts_new_user' => '야호! 새 계정이 저장되었습니다.', + 'set_preferred_language' => '다른 언어로 Firefly III를 사용하시려면 여기에 표시해 주세요.', + 'language' => '언어', + 'new_savings_account' => ':bank_name 저축 계좌', + 'cash_wallet' => '현금 지갑', + 'currency_not_present' => '일반적으로 사용하는 통화가 목록에 없더라도 걱정하지 마세요. 옵션 > 통화에서 직접 통화를 생성할 수 있습니다.', // home page: - 'transaction_table_description' => '거래가 포함된 테이블', - 'opposing_account' => '반대 계정', - 'yourAccounts' => '계정', - 'your_accounts' => '계정 개요', - 'category_overview' => '카테고리 개요', - 'expense_overview' => '지출 계정 개요', - 'revenue_overview' => '수익 계정 개요', - 'budgetsAndSpending' => '예산 및 지출', - 'budgets_and_spending' => '예산 및 지출', - 'go_to_budget' => '"{budget}" 예산으로 이동', - 'go_to_deposits' => '입금으로 이동', - 'go_to_expenses' => '지출로 이동', - 'savings' => '예금', - 'newWithdrawal' => '신규 비용', - 'newDeposit' => '신규 입금', - 'newTransfer' => '신규 이체', - 'bills_to_pay' => '납부할 청구서', - 'per_day' => '일별', - 'left_to_spend_per_day' => '남은 하루 지출', - 'bills_paid' => '청구서 결제', - 'custom_period' => '사용자 지정 기간', - 'reset_to_current' => '현재 기간으로 재설정', - 'select_period' => '기간 선택', + 'transaction_table_description' => '거래가 포함된 테이블', + 'opposing_account' => '반대 계정', + 'yourAccounts' => '계정', + 'your_accounts' => '계정 개요', + 'category_overview' => '카테고리 개요', + 'expense_overview' => '지출 계정 개요', + 'revenue_overview' => '수익 계정 개요', + 'budgetsAndSpending' => '예산 및 지출', + 'budgets_and_spending' => '예산 및 지출', + 'go_to_budget' => '"{budget}" 예산으로 이동', + 'go_to_deposits' => '입금으로 이동', + 'go_to_expenses' => '지출로 이동', + 'savings' => '예금', + 'newWithdrawal' => '신규 비용', + 'newDeposit' => '신규 입금', + 'newTransfer' => '신규 이체', + 'bills_to_pay' => '납부할 청구서', + 'per_day' => '일별', + 'left_to_spend_per_day' => '남은 하루 지출', + 'bills_paid' => '청구서 결제', + 'custom_period' => '사용자 지정 기간', + 'reset_to_current' => '현재 기간으로 재설정', + 'select_period' => '기간 선택', // menu and titles, should be recycled as often as possible: - 'currency' => '통화', - 'preferences' => '환경 설정', - 'logout' => '로그아웃', - 'logout_other_sessions' => '다른 모든 세션 로그아웃', - 'toggleNavigation' => '토글 내비게이션', - 'searchPlaceholder' => '검색...', - 'version' => '버전', - 'dashboard' => '대시보드', - 'income_and_expense' => '수입과 지출', - 'all_money' => '모든 돈', - 'unknown_source_plain' => '알 수 없는 소스 계정', - 'unknown_dest_plain' => '알 수 없는 대상 계정', - 'unknown_any_plain' => '알 수 없는 계정', - 'unknown_budget_plain' => '예산 없음', - 'available_budget' => '사용 가능한 예산 ({currency})', - 'currencies' => '통화', - 'activity' => '활동', - 'usage' => '사용법', - 'accounts' => '계정', - 'Asset account' => '자산 계정', - 'Default account' => '자산 계정', - 'Expense account' => '지출 계정', - 'Revenue account' => '수익 계정', - 'Initial balance account' => '초기 잔액 계정', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => '대출', - 'account_type_Loan' => '빚', - 'account_type_Mortgage' => '모기지', - 'account_type_debt' => '대출', - 'account_type_loan' => '빚', - 'account_type_mortgage' => '모기지', - 'account_type_Credit card' => '신용카드', - 'credit_card_type_monthlyFull' => '매월 전액 결제', - 'liability_direction_credit' => '나는 이 대출을 가지고 있다', - 'liability_direction_debit' => '나는 이 빚을 다른 사람에게 빚지고 있다', - 'liability_direction_credit_short' => '이 빚을 지고 있습니다', - 'liability_direction_debit_short' => '이 빚을 지고 있습니다', - 'liability_direction__short' => '알 수 없음', - 'liability_direction_null_short' => '알 수 없음', - 'Liability credit' => '부채 신용', - 'budgets' => '예산', - 'tags' => '태그', - 'reports' => '보고서', - 'transactions' => '거래', - 'expenses' => '지출', - 'income' => '수익 / 수입', - 'transfers' => '이체', - 'moneyManagement' => '돈 관리', - 'money_management' => '돈 관리', - 'tools' => '도구', - 'piggyBanks' => '저금통', - 'piggy_banks' => '저금통', - 'amount_x_of_y' => '{total} 중 {current}', - 'bills' => '청구서', - 'withdrawal' => '출금', - 'opening_balance' => '초기 잔고', - 'deposit' => '입금', - 'account' => '계정', - 'transfer' => '이체', - 'Withdrawal' => '출금', - 'Deposit' => '입금', - 'Transfer' => '이체', - 'bill' => '청구서', - 'yes' => '네', - 'no' => '아니오', - 'amount' => '금액', - 'overview' => '개요', - 'saveOnAccount' => '계정 저장', - 'unknown' => '알 수 없음', - 'monthly' => '월간', - 'profile' => '프로필', - 'errors' => '오류', - 'debt_start_date' => '빚 시작일', - 'debt_start_amount' => '빚 금액', - 'debt_start_amount_help' => '이 값은 항상 음수로 설정하는 것이 가장 좋습니다. 자세한 내용은 도움말 페이지(오른쪽 상단(?)-아이콘)를 참조하세요.', - 'interest_period_help' => '이 항목은 순전히 장식용이며 계산되지 않습니다. 은행은 매우 교활하기 때문에 Firefly III는 결코 제대로 계산하지 못합니다.', - 'store_new_liabilities_account' => '새 부채 저장', - 'edit_liabilities_account' => '":name" 부채 수정', - 'financial_control' => '재정 관리', - 'accounting' => '회계', - 'automation' => '자동화', - 'others' => '기타', - 'classification' => '분류', - 'store_transaction' => '거래 저장', + 'currency' => '통화', + 'preferences' => '환경 설정', + 'logout' => '로그아웃', + 'logout_other_sessions' => '다른 모든 세션 로그아웃', + 'toggleNavigation' => '토글 내비게이션', + 'searchPlaceholder' => '검색...', + 'version' => '버전', + 'dashboard' => '대시보드', + 'income_and_expense' => '수입과 지출', + 'all_money' => '모든 돈', + 'unknown_source_plain' => '알 수 없는 소스 계정', + 'unknown_dest_plain' => '알 수 없는 대상 계정', + 'unknown_any_plain' => '알 수 없는 계정', + 'unknown_budget_plain' => '예산 없음', + 'available_budget' => '사용 가능한 예산 ({currency})', + 'currencies' => '통화', + 'activity' => '활동', + 'usage' => '사용법', + 'accounts' => '계정', + 'Asset account' => '자산 계정', + 'Default account' => '자산 계정', + 'Expense account' => '지출 계정', + 'Revenue account' => '수익 계정', + 'Initial balance account' => '초기 잔액 계정', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => '대출', + 'account_type_Loan' => '빚', + 'account_type_Mortgage' => '모기지', + 'account_type_debt' => '대출', + 'account_type_loan' => '빚', + 'account_type_mortgage' => '모기지', + 'account_type_Credit card' => '신용카드', + 'credit_card_type_monthlyFull' => '매월 전액 결제', + 'liability_direction_credit' => '나는 이 대출을 가지고 있다', + 'liability_direction_debit' => '나는 이 빚을 다른 사람에게 빚지고 있다', + 'liability_direction_credit_short' => '이 빚을 지고 있습니다', + 'liability_direction_debit_short' => '이 빚을 지고 있습니다', + 'liability_direction__short' => '알 수 없음', + 'liability_direction_null_short' => '알 수 없음', + 'Liability credit' => '부채 신용', + 'budgets' => '예산', + 'tags' => '태그', + 'reports' => '보고서', + 'transactions' => '거래', + 'expenses' => '지출', + 'income' => '수익 / 수입', + 'transfers' => '이체', + 'moneyManagement' => '돈 관리', + 'money_management' => '돈 관리', + 'tools' => '도구', + 'piggyBanks' => '저금통', + 'piggy_banks' => '저금통', + 'amount_x_of_y' => '{total} 중 {current}', + 'bills' => '청구서', + 'withdrawal' => '출금', + 'opening_balance' => '초기 잔고', + 'deposit' => '입금', + 'account' => '계정', + 'transfer' => '이체', + 'Withdrawal' => '출금', + 'Deposit' => '입금', + 'Transfer' => '이체', + 'bill' => '청구서', + 'yes' => '네', + 'no' => '아니오', + 'amount' => '금액', + 'overview' => '개요', + 'saveOnAccount' => '계정 저장', + 'unknown' => '알 수 없음', + 'monthly' => '월간', + 'profile' => '프로필', + 'errors' => '오류', + 'debt_start_date' => '빚 시작일', + 'debt_start_amount' => '빚 금액', + 'debt_start_amount_help' => '이 값은 항상 음수로 설정하는 것이 가장 좋습니다. 자세한 내용은 도움말 페이지(오른쪽 상단(?)-아이콘)를 참조하세요.', + 'interest_period_help' => '이 항목은 순전히 장식용이며 계산되지 않습니다. 은행은 매우 교활하기 때문에 Firefly III는 결코 제대로 계산하지 못합니다.', + 'store_new_liabilities_account' => '새 부채 저장', + 'edit_liabilities_account' => '":name" 부채 수정', + 'financial_control' => '재정 관리', + 'accounting' => '회계', + 'automation' => '자동화', + 'others' => '기타', + 'classification' => '분류', + 'store_transaction' => '거래 저장', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => ':start와 :end 사이의 기본 재정 보고서', - 'report_audit' => ':start과 :end 사이의 거래 내역 개요', - 'report_category' => ':start과 :end 사이의 카테고리 보고서', - 'report_double' => ':start과 :end 사이의 비용/수익 계정 보고서', - 'report_budget' => ':start과 :end 사이의 예산 보고서', - 'report_tag' => ':start과 :end 사이의 태그 보고서', - 'quick_link_reports' => '빠른 링크', - 'quick_link_examples' => '다음은 시작하는 데 도움이 되는 몇 가지 예시 링크입니다. 모든 보고서에 대한 정보와 사용할 수 있는 마법의 단어는 (?) 버튼 아래의 도움말 페이지를 확인하십시오.', - 'quick_link_default_report' => '기본 재무 보고서', - 'quick_link_audit_report' => '거래 내역 개요', - 'report_this_month_quick' => '이번 달, 모든 계정', - 'report_last_month_quick' => '지난 달, 모든 계정', - 'report_this_year_quick' => '현재 연도, 모든 계정', - 'report_this_fiscal_year_quick' => '현재 회계연도, 모든 계정', - 'report_all_time_quick' => '모든 시간, 모든 계정', - 'reports_can_bookmark' => '보고서를 북마크할 수 있다는 점을 기억하세요.', - 'incomeVsExpenses' => '수입 vs 지출', - 'accountBalances' => '계정 잔액', - 'balanceStart' => '기간 시작 시점의 잔액', - 'balanceEnd' => '기간 종료 시점의 잔액', - 'splitByAccount' => '계정별로 분할', - 'coveredWithTags' => '태그로 덮여 있음', - 'leftInBudget' => '예산에 남음', - 'left_in_debt' => '납부 금액', - 'sumOfSums' => '합계의 합계', - 'noCategory' => '(카테고리 없음)', - 'notCharged' => '(아직) 청구되지 않음', - 'inactive' => '비활성화', - 'active' => '활성화', - 'difference' => '차이', - 'money_flowing_in' => '들어옴', - 'money_flowing_out' => '나감', - 'topX' => '상위 :number', - 'show_full_list' => '전체 목록 표시', - 'show_only_top' => '상위 :number개만 보기', - 'report_type' => '보고서 유형', - 'report_type_default' => '기본 재무 보고서', - 'report_type_audit' => '거래 내역 개요 (감사)', - 'report_type_category' => '카테고리 보고서', - 'report_type_budget' => '예산 보고서', - 'report_type_tag' => '태그 보고서', - 'report_type_double' => '비용/수익 계정 보고서', - 'more_info_help' => '이러한 유형의 보고서에 대한 자세한 내용은 도움말 페이지에서 확인할 수 있습니다. 오른쪽 상단의 (?) 아이콘을 누릅니다.', - 'report_included_accounts' => '포함된 계정', - 'report_date_range' => '날짜 범위', - 'report_preset_ranges' => '사전 설정 범위', - 'shared' => '공유', - 'fiscal_year' => '회계 연도', - 'income_entry' => ':start와 :end 사이의 ":name" 계정의 수입', - 'expense_entry' => ':start와 :end 사이의 ":name" 계정의 지출', - 'category_entry' => ':start과 :end 사이의 ":name" 카테고리의 비용 및 수입', - 'budget_spent_amount' => ':start와 :end 사이의 ":budget" 예산에 포함된 비용', - 'balance_amount' => ':start와 :end 사이에 ":account" 계정에서 지불한 ":budget" 예산 내의 지출', - 'no_audit_activity' => ':start와 :end 사이에 :account_name 계정에 기록된 활동이 없습니다.', - 'audit_end_balance' => ':end 끝에서 :account_name의 계정 잔액: :balance', - 'reports_extra_options' => '추가 옵션', - 'report_has_no_extra_options' => '이 보고서에는 추가 옵션이 없습니다', - 'reports_submit' => '보고서 보기', - 'end_after_start_date' => '보고서 종료일은 시작일 이후여야 합니다.', - 'select_category' => '카테고리 선택', - 'select_budget' => '예산 선택', - 'select_tag' => '태그 선택', - 'income_per_category' => '카테고리별 수입', - 'expense_per_category' => '카테고리별 지출', - 'expense_per_budget' => '예산별 지출', - 'income_per_account' => '계정별 수입', - 'expense_per_account' => '계정별 지출', - 'expense_per_tag' => '태그별 지출', - 'income_per_tag' => '태그별 수입', - 'include_expense_not_in_budget' => '선택한 예산에 포함되지 않은 지출 포함', - 'include_expense_not_in_account' => '선택한 계정에 포함되지 않은 지출 포함', - 'include_expense_not_in_category' => '선택한 카테고리에 포함되지 않은 지출 포함', - 'include_income_not_in_category' => '선택한 카테고리에 포함되지 않은 수입 포함', - 'include_income_not_in_account' => '선택한 계정에 포함되지 않은 수입 포함', - 'include_income_not_in_tags' => '선택한 태그에 포함되지 않은 수입 포함', - 'include_expense_not_in_tags' => '선택한 태그에 포함되지 않은 지출 포함', - 'everything_else' => '기타 모든 것', - 'income_and_expenses' => '수입 및 지출', - 'spent_average' => '지출 (평균)', - 'income_average' => '수입 (평균)', - 'transaction_count' => '거래 횟수', - 'average_spending_per_account' => '계정당 평균 지출', - 'average_income_per_account' => '계정당 평균 수입', - 'total' => '합계', - 'description' => '설명', - 'sum_of_period' => '기간의 합계', - 'average_in_period' => '기간의 평균', - 'account_role_defaultAsset' => '기본 자산 계정', - 'account_role_sharedAsset' => '공유 자산 계정', - 'account_role_savingAsset' => '예금 계좌', - 'account_role_ccAsset' => '신용카드', - 'account_role_cashWalletAsset' => '현금 지갑', - 'budget_chart_click' => '차트를 보려면 위 표에서 예산 이름을 클릭하세요.', - 'category_chart_click' => '차트를 보려면 위 표에서 카테고리 이름을 클릭하세요.', - 'in_out_accounts' => '조합당 수입 및 지출', - 'in_out_accounts_per_asset' => '수입 및 지출 (자산 계정당)', - 'in_out_per_category' => '카테고리당 수입 및 지출', - 'out_per_budget' => '예산당 지출', - 'select_expense_revenue' => '비용/수익 계정 선택', - 'multi_currency_report_sum' => '이 목록에는 여러 통화를 사용하는 계정이 포함되어 있으므로 표시되는 금액이 합리적이지 않을 수 있습니다. 보고서는 항상 기본 통화로 돌아갑니다.', - 'sum_in_default_currency' => '합계는 항상 기본 통화로 표시됩니다.', - 'net_filtered_prefs' => '이 차트에는 \'순자산에 포함\' 옵션이 선택되지 않은 계정은 포함되지 않습니다.', + 'report_default' => ':start와 :end 사이의 기본 재정 보고서', + 'report_audit' => ':start과 :end 사이의 거래 내역 개요', + 'report_category' => ':start과 :end 사이의 카테고리 보고서', + 'report_double' => ':start과 :end 사이의 비용/수익 계정 보고서', + 'report_budget' => ':start과 :end 사이의 예산 보고서', + 'report_tag' => ':start과 :end 사이의 태그 보고서', + 'quick_link_reports' => '빠른 링크', + 'quick_link_examples' => '다음은 시작하는 데 도움이 되는 몇 가지 예시 링크입니다. 모든 보고서에 대한 정보와 사용할 수 있는 마법의 단어는 (?) 버튼 아래의 도움말 페이지를 확인하십시오.', + 'quick_link_default_report' => '기본 재무 보고서', + 'quick_link_audit_report' => '거래 내역 개요', + 'report_this_month_quick' => '이번 달, 모든 계정', + 'report_last_month_quick' => '지난 달, 모든 계정', + 'report_this_year_quick' => '현재 연도, 모든 계정', + 'report_this_fiscal_year_quick' => '현재 회계연도, 모든 계정', + 'report_all_time_quick' => '모든 시간, 모든 계정', + 'reports_can_bookmark' => '보고서를 북마크할 수 있다는 점을 기억하세요.', + 'incomeVsExpenses' => '수입 vs 지출', + 'accountBalances' => '계정 잔액', + 'balanceStart' => '기간 시작 시점의 잔액', + 'balanceEnd' => '기간 종료 시점의 잔액', + 'splitByAccount' => '계정별로 분할', + 'coveredWithTags' => '태그로 덮여 있음', + 'leftInBudget' => '예산에 남음', + 'left_in_debt' => '납부 금액', + 'sumOfSums' => '합계의 합계', + 'noCategory' => '(카테고리 없음)', + 'notCharged' => '(아직) 청구되지 않음', + 'inactive' => '비활성화', + 'active' => '활성화', + 'difference' => '차이', + 'money_flowing_in' => '들어옴', + 'money_flowing_out' => '나감', + 'topX' => '상위 :number', + 'show_full_list' => '전체 목록 표시', + 'show_only_top' => '상위 :number개만 보기', + 'report_type' => '보고서 유형', + 'report_type_default' => '기본 재무 보고서', + 'report_type_audit' => '거래 내역 개요 (감사)', + 'report_type_category' => '카테고리 보고서', + 'report_type_budget' => '예산 보고서', + 'report_type_tag' => '태그 보고서', + 'report_type_double' => '비용/수익 계정 보고서', + 'more_info_help' => '이러한 유형의 보고서에 대한 자세한 내용은 도움말 페이지에서 확인할 수 있습니다. 오른쪽 상단의 (?) 아이콘을 누릅니다.', + 'report_included_accounts' => '포함된 계정', + 'report_date_range' => '날짜 범위', + 'report_preset_ranges' => '사전 설정 범위', + 'shared' => '공유', + 'fiscal_year' => '회계 연도', + 'income_entry' => ':start와 :end 사이의 ":name" 계정의 수입', + 'expense_entry' => ':start와 :end 사이의 ":name" 계정의 지출', + 'category_entry' => ':start과 :end 사이의 ":name" 카테고리의 비용 및 수입', + 'budget_spent_amount' => ':start와 :end 사이의 ":budget" 예산에 포함된 비용', + 'balance_amount' => ':start와 :end 사이에 ":account" 계정에서 지불한 ":budget" 예산 내의 지출', + 'no_audit_activity' => ':start와 :end 사이에 :account_name 계정에 기록된 활동이 없습니다.', + 'audit_end_balance' => ':end 끝에서 :account_name의 계정 잔액: :balance', + 'reports_extra_options' => '추가 옵션', + 'report_has_no_extra_options' => '이 보고서에는 추가 옵션이 없습니다', + 'reports_submit' => '보고서 보기', + 'end_after_start_date' => '보고서 종료일은 시작일 이후여야 합니다.', + 'select_category' => '카테고리 선택', + 'select_budget' => '예산 선택', + 'select_tag' => '태그 선택', + 'income_per_category' => '카테고리별 수입', + 'expense_per_category' => '카테고리별 지출', + 'expense_per_budget' => '예산별 지출', + 'income_per_account' => '계정별 수입', + 'expense_per_account' => '계정별 지출', + 'expense_per_tag' => '태그별 지출', + 'income_per_tag' => '태그별 수입', + 'include_expense_not_in_budget' => '선택한 예산에 포함되지 않은 지출 포함', + 'include_expense_not_in_account' => '선택한 계정에 포함되지 않은 지출 포함', + 'include_expense_not_in_category' => '선택한 카테고리에 포함되지 않은 지출 포함', + 'include_income_not_in_category' => '선택한 카테고리에 포함되지 않은 수입 포함', + 'include_income_not_in_account' => '선택한 계정에 포함되지 않은 수입 포함', + 'include_income_not_in_tags' => '선택한 태그에 포함되지 않은 수입 포함', + 'include_expense_not_in_tags' => '선택한 태그에 포함되지 않은 지출 포함', + 'everything_else' => '기타 모든 것', + 'income_and_expenses' => '수입 및 지출', + 'spent_average' => '지출 (평균)', + 'income_average' => '수입 (평균)', + 'transaction_count' => '거래 횟수', + 'average_spending_per_account' => '계정당 평균 지출', + 'average_income_per_account' => '계정당 평균 수입', + 'total' => '합계', + 'description' => '설명', + 'sum_of_period' => '기간의 합계', + 'average_in_period' => '기간의 평균', + 'account_role_defaultAsset' => '기본 자산 계정', + 'account_role_sharedAsset' => '공유 자산 계정', + 'account_role_savingAsset' => '예금 계좌', + 'account_role_ccAsset' => '신용카드', + 'account_role_cashWalletAsset' => '현금 지갑', + 'budget_chart_click' => '차트를 보려면 위 표에서 예산 이름을 클릭하세요.', + 'category_chart_click' => '차트를 보려면 위 표에서 카테고리 이름을 클릭하세요.', + 'in_out_accounts' => '조합당 수입 및 지출', + 'in_out_accounts_per_asset' => '수입 및 지출 (자산 계정당)', + 'in_out_per_category' => '카테고리당 수입 및 지출', + 'out_per_budget' => '예산당 지출', + 'select_expense_revenue' => '비용/수익 계정 선택', + 'multi_currency_report_sum' => '이 목록에는 여러 통화를 사용하는 계정이 포함되어 있으므로 표시되는 금액이 합리적이지 않을 수 있습니다. 보고서는 항상 기본 통화로 돌아갑니다.', + 'sum_in_default_currency' => '합계는 항상 기본 통화로 표시됩니다.', + 'net_filtered_prefs' => '이 차트에는 \'순자산에 포함\' 옵션이 선택되지 않은 계정은 포함되지 않습니다.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => '차트', - 'month' => '월', - 'budget' => '예산', - 'spent' => '지출', - 'spent_capped' => '지출 (한도)', - 'spent_in_budget' => '예산내 지출', - 'left_to_spend' => '남은 지출', - 'earned' => '수입', - 'overspent' => '초과 지출', - 'left' => '남음', - 'max-amount' => '최대 금액', - 'min-amount' => '최소 금액', - 'journal-amount' => '현재 청구서 항목', - 'name' => '이름', - 'date' => '날짜', - 'date_and_time' => '날짜와 시간', - 'time' => '시간', - 'paid' => '지불됨', - 'unpaid' => '미지불', - 'day' => '일', - 'budgeted' => '예산', - 'period' => '기간', - 'balance' => '잔고', - 'in_out_period' => '이 기간의 수입 지출', - 'sum' => '합계', - 'summary' => '요약', - 'average' => '평균', - 'balanceFor' => ':name 잔고', - 'no_tags' => '(태그 없음)', + 'chart' => '차트', + 'month' => '월', + 'budget' => '예산', + 'spent' => '지출', + 'spent_capped' => '지출 (한도)', + 'spent_in_budget' => '예산내 지출', + 'left_to_spend' => '남은 지출', + 'earned' => '수입', + 'overspent' => '초과 지출', + 'left' => '남음', + 'max-amount' => '최대 금액', + 'min-amount' => '최소 금액', + 'journal-amount' => '현재 청구서 항목', + 'name' => '이름', + 'date' => '날짜', + 'date_and_time' => '날짜와 시간', + 'time' => '시간', + 'paid' => '지불됨', + 'unpaid' => '미지불', + 'day' => '일', + 'budgeted' => '예산', + 'period' => '기간', + 'balance' => '잔고', + 'in_out_period' => '이 기간의 수입 지출', + 'sum' => '합계', + 'summary' => '요약', + 'average' => '평균', + 'balanceFor' => ':name 잔고', + 'no_tags' => '(태그 없음)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => '이벤트 기록', - 'add_money_to_piggy' => '":name" 저금통애 금액 추가', - 'piggy_bank' => '저금통', - 'new_piggy_bank' => '새 저금통', - 'store_piggy_bank' => '새 저금통 저장', - 'stored_piggy_bank' => '새 저금통 ":name" 저장', - 'account_status' => '계정 상태', - 'left_for_piggy_banks' => '저금통 잔액', - 'sum_of_piggy_banks' => '저금통 합계', - 'saved_so_far' => '지금까지 저장됨', - 'left_to_save' => '남은 금액', - 'suggested_amount' => '월별 권장 절약 금액', - 'add_money_to_piggy_title' => '":name" 저금통애 금액 추가', - 'remove_money_from_piggy_title' => '":name" 저금통에서 금액 제거', - 'add' => '추가', - 'no_money_for_piggy' => '이 돼지 저금통에 넣을 돈이 없습니다.', - 'suggested_savings_per_month' => '월별 제안', + 'event_history' => '이벤트 기록', + 'add_money_to_piggy' => '":name" 저금통애 금액 추가', + 'piggy_bank' => '저금통', + 'new_piggy_bank' => '새 저금통', + 'store_piggy_bank' => '새 저금통 저장', + 'stored_piggy_bank' => '새 저금통 ":name" 저장', + 'account_status' => '계정 상태', + 'left_for_piggy_banks' => '저금통 잔액', + 'sum_of_piggy_banks' => '저금통 합계', + 'saved_so_far' => '지금까지 저장됨', + 'left_to_save' => '남은 금액', + 'suggested_amount' => '월별 권장 절약 금액', + 'add_money_to_piggy_title' => '":name" 저금통애 금액 추가', + 'remove_money_from_piggy_title' => '":name" 저금통에서 금액 제거', + 'add' => '추가', + 'no_money_for_piggy' => '이 돼지 저금통에 넣을 돈이 없습니다.', + 'suggested_savings_per_month' => '월별 제안', - 'remove' => '삭제', - 'max_amount_add' => '추가할 수 있는 최대 금액은', - 'max_amount_remove' => '제거할 수 있는 최대 금액은', - 'update_piggy_button' => '저금통 업데이트', - 'update_piggy_title' => '":name" 저금통 업데이트', - 'updated_piggy_bank' => '":name" 저금통 업데이트됨', - 'details' => '세부 정보', - 'events' => '이벤트', - 'target_amount' => '목표 금액', - 'start_date' => '시작일', - 'no_start_date' => '시작일이 지정되지 않음', - 'target_date' => '목표일', - 'no_target_date' => '목표일이 지정되지 않음', - 'table' => '표', - 'delete_piggy_bank' => '":name" 저금통 삭제', - 'cannot_add_amount_piggy' => '":name"에 :amount을 추가할 수 없습니다.', - 'cannot_remove_from_piggy' => '":name"에 :amount을 제거할 수 없습니다.', - 'deleted_piggy_bank' => '":name" 저금통 삭제됨', - 'added_amount_to_piggy' => '":name"에 :amount를 추가함', - 'removed_amount_from_piggy' => '":name"에서 :amount 제거됨', - 'piggy_events' => '관련 저금통', + 'remove' => '삭제', + 'max_amount_add' => '추가할 수 있는 최대 금액은', + 'max_amount_remove' => '제거할 수 있는 최대 금액은', + 'update_piggy_button' => '저금통 업데이트', + 'update_piggy_title' => '":name" 저금통 업데이트', + 'updated_piggy_bank' => '":name" 저금통 업데이트됨', + 'details' => '세부 정보', + 'events' => '이벤트', + 'target_amount' => '목표 금액', + 'start_date' => '시작일', + 'no_start_date' => '시작일이 지정되지 않음', + 'target_date' => '목표일', + 'no_target_date' => '목표일이 지정되지 않음', + 'table' => '표', + 'delete_piggy_bank' => '":name" 저금통 삭제', + 'cannot_add_amount_piggy' => '":name"에 :amount을 추가할 수 없습니다.', + 'cannot_remove_from_piggy' => '":name"에 :amount을 제거할 수 없습니다.', + 'deleted_piggy_bank' => '":name" 저금통 삭제됨', + 'added_amount_to_piggy' => '":name"에 :amount를 추가함', + 'removed_amount_from_piggy' => '":name"에서 :amount 제거됨', + 'piggy_events' => '관련 저금통', // tags - 'delete_tag' => '":tag" 태그 삭제', - 'deleted_tag' => '":tag" 태그 삭제됨', - 'new_tag' => '새 태그 만들기', - 'edit_tag' => '":tag" 태그 수정', - 'updated_tag' => '":tag" 태그 업데이트됨', - 'created_tag' => '":tag" 태그가 생성되었습니다!', + 'delete_tag' => '":tag" 태그 삭제', + 'deleted_tag' => '":tag" 태그 삭제됨', + 'new_tag' => '새 태그 만들기', + 'edit_tag' => '":tag" 태그 수정', + 'updated_tag' => '":tag" 태그 업데이트됨', + 'created_tag' => '":tag" 태그가 생성되었습니다!', - 'transaction_journal_information' => '거래 정보', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => '메타 정보', - 'transaction_journal_more' => '추가 정보', - 'basic_journal_information' => '기본 거래 정보', - 'transaction_journal_extra' => '추가 정보', - 'att_part_of_journal' => '":journal"에 저장됨', - 'total_amount' => '전체 금액', - 'number_of_decimals' => '소수 자릿수', + 'transaction_journal_information' => '거래 정보', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => '메타 정보', + 'transaction_journal_more' => '추가 정보', + 'basic_journal_information' => '기본 거래 정보', + 'transaction_journal_extra' => '추가 정보', + 'att_part_of_journal' => '":journal"에 저장됨', + 'total_amount' => '전체 금액', + 'number_of_decimals' => '소수 자릿수', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => '":address"로의 초대는 이미 사용되었습니다.', - 'invite_is_deleted' => '":address"에 대한 초대가 삭제되었습니다.', - 'invite_new_user_title' => '새 사용자 초대', - 'invite_new_user_text' => '관리자는 Firefly III 관리에서 등록하도록 사용자를 초대할 수 있습니다. 사용자가 공유할 수 있는 직접 링크를 사용하여 계정을 등록할 수 있습니다. 초대된 사용자와 해당 사용자의 초대 링크가 아래 표에 표시됩니다. 초대 링크는 자유롭게 공유할 수 있습니다.', - 'invited_user_mail' => '이메일 주소', - 'invite_user' => '사용자 초대', - 'user_is_invited' => '":address" 이메일 주소가 Firefly III에 초대되었습니다', - 'administration' => '관리', - 'system_settings' => '시스템 설정', - 'code_already_used' => '초대 코드가 사용되었습니다', - 'user_administration' => '사용자 관리', - 'list_all_users' => '모든 사용자', - 'all_users' => '모든 사용자', - 'instance_configuration' => '환경 설정', - 'firefly_instance_configuration' => 'Firefly III의 환경설정 옵션', - 'setting_single_user_mode' => '단일 사용자 모드', - 'setting_single_user_mode_explain' => '기본적으로 Firefly III는 사용자 한 명(1)의 등록만 허용합니다. 이는 보안을 위한 조치로, 사용자가 허용하지 않는 한 다른 사람이 인스턴스를 사용할 수 없도록 합니다. 향후 등록은 차단됩니다. 이 확인란을 선택 해제하면 다른 사람도 인스턴스에 연결할 수 있는 경우(인터넷에 연결되어 있는 경우) 인스턴스를 사용할 수 있습니다.', - 'store_configuration' => '환경설정 저장', - 'single_user_administration' => ':email에 대한 사용자 관리', - 'edit_user' => ':email 사용자 수정', - 'hidden_fields_preferences' => '환경설정에서 더 많은 거래 옵션을 활성화할 수 있습니다.', - 'user_data_information' => '사용자 데이터', - 'user_information' => '사용자 정보', - 'total_size' => '총 크기', - 'budget_or_budgets' => ':count개 예산|:count개 예산', - 'budgets_with_limits' => '구성된 금액이 있는 :count개 예산|구성된 금액이 있는 :count개 예산', - 'nr_of_rules_in_total_groups' => ':count_groups 규칙 그룹의 :count_rules 규칙', - 'tag_or_tags' => ':count 태그|:count 태그', - 'configuration_updated' => '환경설정이 업데이트 되었습니다', - 'setting_is_demo_site' => '데모 사이트', - 'setting_is_demo_site_explain' => '이 확인란을 선택하면 이 설치가 데모 사이트인 것처럼 작동하므로 이상한 부작용이 발생할 수 있습니다.', - 'block_code_bounced' => '이메일 메시지가 반송됨', - 'block_code_expired' => '데모 계정이 만료됨', - 'no_block_code' => '차단 사유가 없거나 차단되지 않은 사용자', - 'block_code_email_changed' => '사용자가 아직 새 이메일 주소를 확인하지 않았습니다', - 'admin_update_email' => '프로필 페이지와 달리 이메일 주소가 변경되었다는 알림은 사용자에게 전송되지 않습니다!', - 'update_user' => '사용자 업데이트', - 'updated_user' => '사용자 데이터가 변경되었습니다.', - 'delete_user' => ':email 사용자 삭제', - 'user_deleted' => '사용자가 삭제되었습니다', - 'send_test_email' => '테스트 이메일 메시지 보내기', - 'send_test_email_text' => '이메일을 보내거나 Slack 메시지를 게시할 수 있는지 확인하려면 이 버튼을 눌러주세요. 여기에는 오류가 표시되지 않으며(있더라도), 로그 파일에 오류가 반영됩니다. 이 버튼을 원하는 만큼 누를 수 있습니다. 스팸 제어 기능은 없습니다. 메시지는 :email로 전송되며 곧 도착할 것입니다.', - 'send_message' => '메시지 보내기', - 'send_test_triggered' => '테스트가 트리거되었습니다. 받은 편지함과 로그 파일을 확인합니다.', - 'give_admin_careful' => '관리자 권한을 부여받은 사용자는 내 관리자 권한을 빼앗을 수 있습니다. 조심하세요.', - 'admin_maintanance_title' => '유지 보수', - 'admin_maintanance_expl' => 'Firefly III 유지 관리를 위한 몇 개의 멋진 버튼', - 'admin_maintenance_clear_cache' => '캐시 지우기', - 'admin_notifications' => '관리자 알림', - 'admin_notifications_expl' => '관리자는 아래의 알림을 사용하거나 사용하지 않도록 설정할 수 있습니다. 이러한 메시지를 Slack을 통해서도 받으려면 "수신 웹훅" URL을 설정하세요.', - 'admin_notification_check_user_new_reg' => '사용자가 등록 후 환영 메시지 수신', - 'admin_notification_check_admin_new_reg' => '관리자가 새 사용자 등록 알림을 받습니다', - 'admin_notification_check_new_version' => '새 버전을 사용할 수 있습니다', - 'admin_notification_check_invite_created' => '사용자가 Firefly III에 초대되었습니다.', - 'admin_notification_check_invite_redeemed' => '사용자 초대가 사용되었습니다', - 'all_invited_users' => '초대된 모든 사용자', - 'save_notification_settings' => '설정 저장', - 'notification_settings_saved' => '알림 설정이 저장되었습니다', - - - 'split_transaction_title' => '분할 거래에 대한 설명', - 'split_transaction_title_help' => '분할 거래를 생성하는 경우 거래의 모든 분할에 대한 전체 설명이 있어야 합니다.', - 'split_title_help' => '분할 거래를 생성하는 경우 거래의 모든 분할에 대한 전체 설명이 있어야 합니다.', - 'you_create_transfer' => '전송을 생성하고 있습니다.', - 'you_create_withdrawal' => '출금을 생성하고 있습니다.', - 'you_create_deposit' => '입금을 생성하고 있습니다.', + 'invite_is_already_redeemed' => '":address"로의 초대는 이미 사용되었습니다.', + 'invite_is_deleted' => '":address"에 대한 초대가 삭제되었습니다.', + 'invite_new_user_title' => '새 사용자 초대', + 'invite_new_user_text' => '관리자는 Firefly III 관리에서 등록하도록 사용자를 초대할 수 있습니다. 사용자가 공유할 수 있는 직접 링크를 사용하여 계정을 등록할 수 있습니다. 초대된 사용자와 해당 사용자의 초대 링크가 아래 표에 표시됩니다. 초대 링크는 자유롭게 공유할 수 있습니다.', + 'invited_user_mail' => '이메일 주소', + 'invite_user' => '사용자 초대', + 'user_is_invited' => '":address" 이메일 주소가 Firefly III에 초대되었습니다', + 'administration' => '관리', + 'system_settings' => '시스템 설정', + 'code_already_used' => '초대 코드가 사용되었습니다', + 'user_administration' => '사용자 관리', + 'list_all_users' => '모든 사용자', + 'all_users' => '모든 사용자', + 'instance_configuration' => '환경 설정', + 'firefly_instance_configuration' => 'Firefly III의 환경설정 옵션', + 'setting_single_user_mode' => '단일 사용자 모드', + 'setting_single_user_mode_explain' => '기본적으로 Firefly III는 사용자 한 명(1)의 등록만 허용합니다. 이는 보안을 위한 조치로, 사용자가 허용하지 않는 한 다른 사람이 인스턴스를 사용할 수 없도록 합니다. 향후 등록은 차단됩니다. 이 확인란을 선택 해제하면 다른 사람도 인스턴스에 연결할 수 있는 경우(인터넷에 연결되어 있는 경우) 인스턴스를 사용할 수 있습니다.', + 'store_configuration' => '환경설정 저장', + 'single_user_administration' => ':email에 대한 사용자 관리', + 'edit_user' => ':email 사용자 수정', + 'hidden_fields_preferences' => '환경설정에서 더 많은 거래 옵션을 활성화할 수 있습니다.', + 'user_data_information' => '사용자 데이터', + 'user_information' => '사용자 정보', + 'total_size' => '총 크기', + 'budget_or_budgets' => ':count개 예산|:count개 예산', + 'budgets_with_limits' => '구성된 금액이 있는 :count개 예산|구성된 금액이 있는 :count개 예산', + 'nr_of_rules_in_total_groups' => ':count_groups 규칙 그룹의 :count_rules 규칙', + 'tag_or_tags' => ':count 태그|:count 태그', + 'configuration_updated' => '환경설정이 업데이트 되었습니다', + 'setting_is_demo_site' => '데모 사이트', + 'setting_is_demo_site_explain' => '이 확인란을 선택하면 이 설치가 데모 사이트인 것처럼 작동하므로 이상한 부작용이 발생할 수 있습니다.', + 'block_code_bounced' => '이메일 메시지가 반송됨', + 'block_code_expired' => '데모 계정이 만료됨', + 'no_block_code' => '차단 사유가 없거나 차단되지 않은 사용자', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => '사용자가 아직 새 이메일 주소를 확인하지 않았습니다', + 'admin_update_email' => '프로필 페이지와 달리 이메일 주소가 변경되었다는 알림은 사용자에게 전송되지 않습니다!', + 'update_user' => '사용자 업데이트', + 'updated_user' => '사용자 데이터가 변경되었습니다.', + 'delete_user' => ':email 사용자 삭제', + 'user_deleted' => '사용자가 삭제되었습니다', + 'send_test_email' => '테스트 이메일 메시지 보내기', + 'send_test_email_text' => '이메일을 보내거나 Slack 메시지를 게시할 수 있는지 확인하려면 이 버튼을 눌러주세요. 여기에는 오류가 표시되지 않으며(있더라도), 로그 파일에 오류가 반영됩니다. 이 버튼을 원하는 만큼 누를 수 있습니다. 스팸 제어 기능은 없습니다. 메시지는 :email로 전송되며 곧 도착할 것입니다.', + 'send_message' => '메시지 보내기', + 'send_test_triggered' => '테스트가 트리거되었습니다. 받은 편지함과 로그 파일을 확인합니다.', + 'give_admin_careful' => '관리자 권한을 부여받은 사용자는 내 관리자 권한을 빼앗을 수 있습니다. 조심하세요.', + 'admin_maintanance_title' => '유지 보수', + 'admin_maintanance_expl' => 'Firefly III 유지 관리를 위한 몇 개의 멋진 버튼', + 'admin_maintenance_clear_cache' => '캐시 지우기', + 'admin_notifications' => '관리자 알림', + 'admin_notifications_expl' => '관리자는 아래의 알림을 사용하거나 사용하지 않도록 설정할 수 있습니다. 이러한 메시지를 Slack을 통해서도 받으려면 "수신 웹훅" URL을 설정하세요.', + 'admin_notification_check_user_new_reg' => '사용자가 등록 후 환영 메시지 수신', + 'admin_notification_check_admin_new_reg' => '관리자가 새 사용자 등록 알림을 받습니다', + 'admin_notification_check_new_version' => '새 버전을 사용할 수 있습니다', + 'admin_notification_check_invite_created' => '사용자가 Firefly III에 초대되었습니다.', + 'admin_notification_check_invite_redeemed' => '사용자 초대가 사용되었습니다', + 'all_invited_users' => '초대된 모든 사용자', + 'save_notification_settings' => '설정 저장', + 'notification_settings_saved' => '알림 설정이 저장되었습니다', + 'split_transaction_title' => '분할 거래에 대한 설명', + 'split_transaction_title_help' => '분할 거래를 생성하는 경우 거래의 모든 분할에 대한 전체 설명이 있어야 합니다.', + 'split_title_help' => '분할 거래를 생성하는 경우 거래의 모든 분할에 대한 전체 설명이 있어야 합니다.', + 'you_create_transfer' => '전송을 생성하고 있습니다.', + 'you_create_withdrawal' => '출금을 생성하고 있습니다.', + 'you_create_deposit' => '입금을 생성하고 있습니다.', // links - 'journal_link_configuration' => '거래 링크 구성', - 'create_new_link_type' => '새 링크 유형 만들기', - 'store_new_link_type' => '새 링크 유형 저장', - 'update_link_type' => '링크 유형 업데이트', - 'edit_link_type' => '":name" 링크 유형 수정', - 'updated_link_type' => '":name" 링크 유형 업데이트됨', - 'delete_link_type' => '":name" 링크 유형 삭제', - 'deleted_link_type' => '":name" 링크 유형 삭제됨', - 'stored_new_link_type' => '새 링크 유형 ":name" 저장', - 'cannot_edit_link_type' => '":name" 링크 유형 수정할 수 없음', - 'link_type_help_name' => '즉. "중복"', - 'link_type_help_inward' => '즉. "중복"', - 'link_type_help_outward' => '즉. "에 의해 중복됨"', - 'save_connections_by_moving' => '이러한 거래 간의 링크를 다른 링크 유형으로 이동하여 저장합니다:', - 'do_not_save_connection' => '(연결 저장하지 않음)', - 'link_transaction' => '거래 연결', - 'link_to_other_transaction' => '이 거래를 다른 거래에 연결', - 'select_transaction_to_link' => '이 거래를 연결할 거래를 선택합니다. 이 링크는 현재 Firefly III에서 표시되는 것 외에는 사용되지 않지만, 앞으로 변경할 계획입니다. 검색 상자를 사용하여 제목이나 ID로 거래를 선택합니다. 사용자 지정 링크 유형을 추가하려면 관리 섹션을 확인하세요.', - 'this_transaction' => '이 거래', - 'transaction' => '거래', - 'comments' => '코멘트', - 'link_notes' => '링크와 함께 저장하고 싶은 모든 노트.', - 'invalid_link_selection' => '이러한 거래를 연결할 수 없습니다', - 'selected_transaction' => '선택한 거래', - 'journals_linked' => '거래가 연결됩니다.', - 'journals_error_linked' => '이러한 거래는 이미 연결되어 있습니다.', - 'journals_link_to_self' => '거래를 자기자신에게 연결할 수 없습니다', - 'journal_links' => '거래 링크', - 'this_withdrawal' => '이 출금', - 'this_deposit' => '이 입금', - 'this_transfer' => '이 이체', - 'overview_for_link' => '":name" 링크 유형에 대한 개요', - 'source_transaction' => '소스 거래', - 'link_description' => '링크 설명', - 'destination_transaction' => '대상 거래', - 'delete_journal_link' => ':source:destination 사이의 링크를 삭제합니다', - 'deleted_link' => '링크 삭제됨', + 'journal_link_configuration' => '거래 링크 구성', + 'create_new_link_type' => '새 링크 유형 만들기', + 'store_new_link_type' => '새 링크 유형 저장', + 'update_link_type' => '링크 유형 업데이트', + 'edit_link_type' => '":name" 링크 유형 수정', + 'updated_link_type' => '":name" 링크 유형 업데이트됨', + 'delete_link_type' => '":name" 링크 유형 삭제', + 'deleted_link_type' => '":name" 링크 유형 삭제됨', + 'stored_new_link_type' => '새 링크 유형 ":name" 저장', + 'cannot_edit_link_type' => '":name" 링크 유형 수정할 수 없음', + 'link_type_help_name' => '즉. "중복"', + 'link_type_help_inward' => '즉. "중복"', + 'link_type_help_outward' => '즉. "에 의해 중복됨"', + 'save_connections_by_moving' => '이러한 거래 간의 링크를 다른 링크 유형으로 이동하여 저장합니다:', + 'do_not_save_connection' => '(연결 저장하지 않음)', + 'link_transaction' => '거래 연결', + 'link_to_other_transaction' => '이 거래를 다른 거래에 연결', + 'select_transaction_to_link' => '이 거래를 연결할 거래를 선택합니다. 이 링크는 현재 Firefly III에서 표시되는 것 외에는 사용되지 않지만, 앞으로 변경할 계획입니다. 검색 상자를 사용하여 제목이나 ID로 거래를 선택합니다. 사용자 지정 링크 유형을 추가하려면 관리 섹션을 확인하세요.', + 'this_transaction' => '이 거래', + 'transaction' => '거래', + 'comments' => '코멘트', + 'link_notes' => '링크와 함께 저장하고 싶은 모든 노트.', + 'invalid_link_selection' => '이러한 거래를 연결할 수 없습니다', + 'selected_transaction' => '선택한 거래', + 'journals_linked' => '거래가 연결됩니다.', + 'journals_error_linked' => '이러한 거래는 이미 연결되어 있습니다.', + 'journals_link_to_self' => '거래를 자기자신에게 연결할 수 없습니다', + 'journal_links' => '거래 링크', + 'this_withdrawal' => '이 출금', + 'this_deposit' => '이 입금', + 'this_transfer' => '이 이체', + 'overview_for_link' => '":name" 링크 유형에 대한 개요', + 'source_transaction' => '소스 거래', + 'link_description' => '링크 설명', + 'destination_transaction' => '대상 거래', + 'delete_journal_link' => ':source:destination 사이의 링크를 삭제합니다', + 'deleted_link' => '링크 삭제됨', // link translations: - 'Paid_name' => '지불됨', - 'Refund_name' => '환불', - 'Reimbursement_name' => '상환', - 'Related_name' => '관련', - 'relates to_inward' => '다음과 관련', - 'is (partially) refunded by_inward' => '에 의해 (부분적으로) 환불됨', - 'is (partially) paid for by_inward' => '에 의해 (부분적으로) 지불됨', - 'is (partially) reimbursed by_inward' => '에 의해 (부분적으로) 환급됨', - 'inward_transaction' => '내부 거래', - 'outward_transaction' => '외부 거래', - 'relates to_outward' => '다음과 관련', - '(partially) refunds_outward' => '(부분) 환불', - '(partially) pays for_outward' => '(부분적으로) 지불', - '(partially) reimburses_outward' => '(부분적으로) 환급', - 'is (partially) refunded by' => '에 의해 (부분적으로) 환불됨', - 'is (partially) paid for by' => '에 의해 (부분적으로) 지불됨', - 'is (partially) reimbursed by' => '에 의해 (부분적으로) 환급됨', - 'relates to' => '다음과 관련', - '(partially) refunds' => '(부분) 환불', - '(partially) pays for' => '(부분적으로) 지불', - '(partially) reimburses' => '(부분적으로) 환급', + 'Paid_name' => '지불됨', + 'Refund_name' => '환불', + 'Reimbursement_name' => '상환', + 'Related_name' => '관련', + 'relates to_inward' => '다음과 관련', + 'is (partially) refunded by_inward' => '에 의해 (부분적으로) 환불됨', + 'is (partially) paid for by_inward' => '에 의해 (부분적으로) 지불됨', + 'is (partially) reimbursed by_inward' => '에 의해 (부분적으로) 환급됨', + 'inward_transaction' => '내부 거래', + 'outward_transaction' => '외부 거래', + 'relates to_outward' => '다음과 관련', + '(partially) refunds_outward' => '(부분) 환불', + '(partially) pays for_outward' => '(부분적으로) 지불', + '(partially) reimburses_outward' => '(부분적으로) 환급', + 'is (partially) refunded by' => '에 의해 (부분적으로) 환불됨', + 'is (partially) paid for by' => '에 의해 (부분적으로) 지불됨', + 'is (partially) reimbursed by' => '에 의해 (부분적으로) 환급됨', + 'relates to' => '다음과 관련', + '(partially) refunds' => '(부분) 환불', + '(partially) pays for' => '(부분적으로) 지불', + '(partially) reimburses' => '(부분적으로) 환급', // split a transaction: - 'splits' => '나누기', - 'add_another_split' => '다른 분할 추가', - 'cannot_edit_opening_balance' => '계정의 개설 잔액은 수정할 수 없습니다.', - 'no_edit_multiple_left' => '수정할 유효한 거래를 선택하지 않았습니다.', - 'breadcrumb_convert_group' => '거래 전환', - 'convert_invalid_source' => '거래 #%d에 대한 소스 정보가 잘못되었습니다.', - 'convert_invalid_destination' => '거래 #%d에 대한 대상 정보가 잘못되었습니다.', - 'create_another' => '저장후 이 페이지로 돌아와 다른 것을 만듭니다.', - 'after_update_create_another' => '업데이트 후 여기로 돌아와서 수정을 계속합니다.', - 'store_as_new' => '업데이트하는 대신 새 거래로 저장합니다.', - 'reset_after' => '제출 후 양식 재설정', - 'errors_submission' => '제출한 내용에 문제가 있습니다. 오류를 확인해 주세요.', - 'transaction_expand_split' => '분할 확장', - 'transaction_collapse_split' => '분할 축소', + 'splits' => '나누기', + 'add_another_split' => '다른 분할 추가', + 'cannot_edit_opening_balance' => '계정의 개설 잔액은 수정할 수 없습니다.', + 'no_edit_multiple_left' => '수정할 유효한 거래를 선택하지 않았습니다.', + 'breadcrumb_convert_group' => '거래 전환', + 'convert_invalid_source' => '거래 #%d에 대한 소스 정보가 잘못되었습니다.', + 'convert_invalid_destination' => '거래 #%d에 대한 대상 정보가 잘못되었습니다.', + 'create_another' => '저장후 이 페이지로 돌아와 다른 것을 만듭니다.', + 'after_update_create_another' => '업데이트 후 여기로 돌아와서 수정을 계속합니다.', + 'store_as_new' => '업데이트하는 대신 새 거래로 저장합니다.', + 'reset_after' => '제출 후 양식 재설정', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => '분할 확장', + 'transaction_collapse_split' => '분할 축소', // object groups - 'default_group_title_name' => '(그룹화 해제)', - 'default_group_title_name_plain' => '그룹 해제됨', + 'default_group_title_name' => '(그룹화 해제)', + 'default_group_title_name_plain' => '그룹 해제됨', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => '자산 계정을 만들어 봅시다!', - 'no_accounts_intro_asset' => '아직 자산 계정이 없습니다. 자산 계정은 당좌 예금 계좌, 저축 계좌, 공유 계좌 또는 신용 카드와 같은 기본 계좌입니다.', - 'no_accounts_imperative_asset' => 'Firefly III를 사용하려면 자산 계정을 하나 이상 만들어야 합니다. 지금 생성해 보겠습니다:', - 'no_accounts_create_asset' => '자산 계정 만들기', - 'no_accounts_title_expense' => '지출 계정을 만들어 봅시다!', - 'no_accounts_intro_expense' => '아직 지출 계정이 없습니다. 지출 계정은 상점이나 슈퍼마켓과 같이 돈을 쓰는 곳입니다.', - 'no_accounts_imperative_expense' => '지출 계정은 거래를 생성할 때 자동으로 생성되지만 원한다면 수동으로도 만들 수 있습니다. 지금 하나 만들어 보겠습니다:', - 'no_accounts_create_expense' => '지출 계정 만들기', - 'no_accounts_title_revenue' => '수익 계정을 만들어 봅시다!', - 'no_accounts_intro_revenue' => '아직 수익 계정이 없습니다. 수익 계정은 고용주 등으로부터 돈을 받는 곳입니다.', - 'no_accounts_imperative_revenue' => '수익 계정은 거래를 생성할 때 자동으로 생성되지만 원한다면 수동으로도 만들 수 있습니다. 지금 하나 만들어 보겠습니다:', - 'no_accounts_create_revenue' => '수익 계정 만들기', - 'no_accounts_title_liabilities' => '부채를 만들어 봅시다!', - 'no_accounts_intro_liabilities' => '아직 부채가 없습니다. 부채는 (학자금) 대출 및 기타 부채를 등록하는 계정입니다.', - 'no_accounts_imperative_liabilities' => '이 기능을 반드시 사용할 필요는 없지만, 이러한 사항을 추적하고 싶을 때 유용하게 사용할 수 있습니다.', - 'no_accounts_create_liabilities' => '부채 만들기', - 'no_budgets_title_default' => '예산을 만들어 봅시다', - 'no_rules_title_default' => '규칙을 만들어 봅시다', - 'no_budgets_intro_default' => '예산이 아직 없습니다. 예산은 소프트캡을 설정하여 지출을 제한할 수 있도록, 지출을 논리적인 그룹으로 정리하는 데 사용됩니다.', - 'no_rules_intro_default' => '아직 규칙이 없습니다. 규칙은 거래를 처리할 수 있는 강력한 자동화 기능입니다.', - 'no_rules_imperative_default' => '규칙은 거래를 관리할 때 매우 유용할 수 있습니다. 지금 규칙을 만들어 보겠습니다:', - 'no_budgets_imperative_default' => '예산은 재무 관리의 기본 도구입니다. 지금 만들어봅시다:', - 'no_budgets_create_default' => '예산 만들기', - 'no_rules_create_default' => '규칙 만들기', - 'no_categories_title_default' => '카테고리를 만들어 봅시다!', - 'no_categories_intro_default' => '아직 카테고리가 없습니다. 카테고리는 거래를 미세 조정하고 지정된 카테고리로 레이블을 지정하는 데 사용됩니다.', - 'no_categories_imperative_default' => '카테고리는 거래를 생성할 때 자동으로 생성되지만 수동으로도 만들 수 있습니다. 지금 하나 만들어 보겠습니다:', - 'no_categories_create_default' => '카테고리 만들기', - 'no_tags_title_default' => '태그를 만들어 봅시다!', - 'no_tags_intro_default' => '태그가 아직 없습니다. 태그는 거래를 미세 조정하고 특정 키워드로 레이블을 지정하는데 사용됩니다.', - 'no_tags_imperative_default' => '태그는 거래를 생성할 때 자동으로 생성되지만 수동으로도 만들 수 있습니다. 지금 하나 만들어 보겠습니다:', - 'no_tags_create_default' => '태그 생성', - 'no_transactions_title_withdrawal' => '지출을 만들어 봅시다!', - 'no_transactions_intro_withdrawal' => '아직 지출이 없습니다. 재정 관리를 시작하려면 지출을 만들어야 합니다.', - 'no_transactions_imperative_withdrawal' => '돈을 좀 사용하셨나요? 그렇다면 적어 두어야 합니다:', - 'no_transactions_create_withdrawal' => '지출 만들기', - 'no_transactions_title_deposit' => '수입을 만들어 봅시다!', - 'no_transactions_intro_deposit' => '아직 기록된 수입이 없습니다. 재정 관리를 시작하려면 수입 항목을 만들어야 합니다.', - 'no_transactions_imperative_deposit' => '돈을 받았나요? 그렇다면 적어 두어야 합니다:', - 'no_transactions_create_deposit' => '입금 만들기', - 'no_transactions_title_transfers' => '이체를 만들어 봅시다!', - 'no_transactions_intro_transfers' => '아직 이체가 없습니다. 자산 계정 간에 돈을 이동하면 이체로 기록됩니다.', - 'no_transactions_imperative_transfers' => '돈을 이리저리 옮기셨나요? 그렇다면 적어 두어야 합니다:', - 'no_transactions_create_transfers' => '이체 만들기', - 'no_piggies_title_default' => '저금통을 만들어 봅시다!', - 'no_piggies_intro_default' => '저금통이 아직 없습니다. 저금통을 만들어 저축을 나누고 무엇을 위해 저축하는지 추적할 수 있습니다.', - 'no_piggies_imperative_default' => '저축하고 있는 항목이 있나요? 저금통을 만들어 추적하세요:', - 'no_piggies_create_default' => '새 저금통 만들기', - 'no_bills_title_default' => '청구서를 만들어 봅시다!', - 'no_bills_intro_default' => '아직 청구서가 없습니다. 청구서를 만들어 집세나 보험료와 같은 정기적인 지출을 추적할 수 있습니다.', - 'no_bills_imperative_default' => '정기적으로 청구서를 받나요? 청구서를 만들어 결제 내역을 추적하세요:', - 'no_bills_create_default' => '청구서 만들기', + 'no_accounts_title_asset' => '자산 계정을 만들어 봅시다!', + 'no_accounts_intro_asset' => '아직 자산 계정이 없습니다. 자산 계정은 당좌 예금 계좌, 저축 계좌, 공유 계좌 또는 신용 카드와 같은 기본 계좌입니다.', + 'no_accounts_imperative_asset' => 'Firefly III를 사용하려면 자산 계정을 하나 이상 만들어야 합니다. 지금 생성해 보겠습니다:', + 'no_accounts_create_asset' => '자산 계정 만들기', + 'no_accounts_title_expense' => '지출 계정을 만들어 봅시다!', + 'no_accounts_intro_expense' => '아직 지출 계정이 없습니다. 지출 계정은 상점이나 슈퍼마켓과 같이 돈을 쓰는 곳입니다.', + 'no_accounts_imperative_expense' => '지출 계정은 거래를 생성할 때 자동으로 생성되지만 원한다면 수동으로도 만들 수 있습니다. 지금 하나 만들어 보겠습니다:', + 'no_accounts_create_expense' => '지출 계정 만들기', + 'no_accounts_title_revenue' => '수익 계정을 만들어 봅시다!', + 'no_accounts_intro_revenue' => '아직 수익 계정이 없습니다. 수익 계정은 고용주 등으로부터 돈을 받는 곳입니다.', + 'no_accounts_imperative_revenue' => '수익 계정은 거래를 생성할 때 자동으로 생성되지만 원한다면 수동으로도 만들 수 있습니다. 지금 하나 만들어 보겠습니다:', + 'no_accounts_create_revenue' => '수익 계정 만들기', + 'no_accounts_title_liabilities' => '부채를 만들어 봅시다!', + 'no_accounts_intro_liabilities' => '아직 부채가 없습니다. 부채는 (학자금) 대출 및 기타 부채를 등록하는 계정입니다.', + 'no_accounts_imperative_liabilities' => '이 기능을 반드시 사용할 필요는 없지만, 이러한 사항을 추적하고 싶을 때 유용하게 사용할 수 있습니다.', + 'no_accounts_create_liabilities' => '부채 만들기', + 'no_budgets_title_default' => '예산을 만들어 봅시다', + 'no_rules_title_default' => '규칙을 만들어 봅시다', + 'no_budgets_intro_default' => '예산이 아직 없습니다. 예산은 소프트캡을 설정하여 지출을 제한할 수 있도록, 지출을 논리적인 그룹으로 정리하는 데 사용됩니다.', + 'no_rules_intro_default' => '아직 규칙이 없습니다. 규칙은 거래를 처리할 수 있는 강력한 자동화 기능입니다.', + 'no_rules_imperative_default' => '규칙은 거래를 관리할 때 매우 유용할 수 있습니다. 지금 규칙을 만들어 보겠습니다:', + 'no_budgets_imperative_default' => '예산은 재무 관리의 기본 도구입니다. 지금 만들어봅시다:', + 'no_budgets_create_default' => '예산 만들기', + 'no_rules_create_default' => '규칙 만들기', + 'no_categories_title_default' => '카테고리를 만들어 봅시다!', + 'no_categories_intro_default' => '아직 카테고리가 없습니다. 카테고리는 거래를 미세 조정하고 지정된 카테고리로 레이블을 지정하는 데 사용됩니다.', + 'no_categories_imperative_default' => '카테고리는 거래를 생성할 때 자동으로 생성되지만 수동으로도 만들 수 있습니다. 지금 하나 만들어 보겠습니다:', + 'no_categories_create_default' => '카테고리 만들기', + 'no_tags_title_default' => '태그를 만들어 봅시다!', + 'no_tags_intro_default' => '태그가 아직 없습니다. 태그는 거래를 미세 조정하고 특정 키워드로 레이블을 지정하는데 사용됩니다.', + 'no_tags_imperative_default' => '태그는 거래를 생성할 때 자동으로 생성되지만 수동으로도 만들 수 있습니다. 지금 하나 만들어 보겠습니다:', + 'no_tags_create_default' => '태그 생성', + 'no_transactions_title_withdrawal' => '지출을 만들어 봅시다!', + 'no_transactions_intro_withdrawal' => '아직 지출이 없습니다. 재정 관리를 시작하려면 지출을 만들어야 합니다.', + 'no_transactions_imperative_withdrawal' => '돈을 좀 사용하셨나요? 그렇다면 적어 두어야 합니다:', + 'no_transactions_create_withdrawal' => '지출 만들기', + 'no_transactions_title_deposit' => '수입을 만들어 봅시다!', + 'no_transactions_intro_deposit' => '아직 기록된 수입이 없습니다. 재정 관리를 시작하려면 수입 항목을 만들어야 합니다.', + 'no_transactions_imperative_deposit' => '돈을 받았나요? 그렇다면 적어 두어야 합니다:', + 'no_transactions_create_deposit' => '입금 만들기', + 'no_transactions_title_transfers' => '이체를 만들어 봅시다!', + 'no_transactions_intro_transfers' => '아직 이체가 없습니다. 자산 계정 간에 돈을 이동하면 이체로 기록됩니다.', + 'no_transactions_imperative_transfers' => '돈을 이리저리 옮기셨나요? 그렇다면 적어 두어야 합니다:', + 'no_transactions_create_transfers' => '이체 만들기', + 'no_piggies_title_default' => '저금통을 만들어 봅시다!', + 'no_piggies_intro_default' => '저금통이 아직 없습니다. 저금통을 만들어 저축을 나누고 무엇을 위해 저축하는지 추적할 수 있습니다.', + 'no_piggies_imperative_default' => '저축하고 있는 항목이 있나요? 저금통을 만들어 추적하세요:', + 'no_piggies_create_default' => '새 저금통 만들기', + 'no_bills_title_default' => '청구서를 만들어 봅시다!', + 'no_bills_intro_default' => '아직 청구서가 없습니다. 청구서를 만들어 집세나 보험료와 같은 정기적인 지출을 추적할 수 있습니다.', + 'no_bills_imperative_default' => '정기적으로 청구서를 받나요? 청구서를 만들어 결제 내역을 추적하세요:', + 'no_bills_create_default' => '청구서 만들기', // recurring transactions - 'create_right_now' => '지금 바로 만들기', - 'no_new_transaction_in_recurrence' => '새 거래가 생성되지 않았습니다. 이 날짜에 이미 해지된 것일까요?', - 'recurrences' => '반복 거래', - 'repeat_until_in_past' => '이 반복 거래는 :date에 반복이 중지되었습니다.', - 'recurring_calendar_view' => '달력', - 'no_recurring_title_default' => '반복 거래를 만들어 봅시다!', - 'no_recurring_intro_default' => '아직 반복 거래가 없습니다. 이를 사용하여 Firefly III가 자동으로 거래를 생성하도록 할 수 있습니다.', - 'no_recurring_imperative_default' => '이 기능은 꽤 고급 기능이지만 매우 유용할 수 있습니다. 계속하기 전에 오른쪽 상단에 있는 문서((?) 아이콘)를 읽어보시기 바랍니다.', - 'no_recurring_create_default' => '반복 거래 만들기', - 'make_new_recurring' => '반복 거래 만들기', - 'recurring_daily' => '매일', - 'recurring_weekly' => '매주 :weekday', - 'recurring_weekly_skip' => '매 :skip(st/nd/rd/th) 주 :weekday', - 'recurring_monthly' => '매월 :dayOfMonth(st/nd/rd/th) 일', - 'recurring_monthly_skip' => ':skip(st/nd/rd/th) 월마다 :dayOfMonth(st/nd/rd/th) 일에', - 'recurring_ndom' => '매월 :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => '매년 :date에', - 'overview_for_recurrence' => '":title" 반복 거래 개요', - 'warning_duplicates_repetitions' => '드물지만 이 목록에 날짜가 두 번 표시되는 경우가 있습니다. 이는 여러 반복이 충돌할 때 발생할 수 있습니다. Firefly III는 항상 하루에 하나의 트랜잭션을 생성합니다.', - 'created_transactions' => '관련 거래', - 'expected_withdrawals' => '예상 출금액', - 'expected_deposits' => '예상 입금', - 'expected_transfers' => '예상 이체', - 'created_withdrawals' => '출금 생성', - 'created_deposits' => '입금 생성', - 'created_transfers' => '이체 생성', - 'recurring_info' => '반복 거래 :count / :total', - 'created_from_recurrence' => '":title" (#:id) 반복 거래에서 생성됨', - 'recurring_never_cron' => '반복 거래를 지원하는 데 필요한 cron 작업이 실행된 적이 없는 것 같습니다. 물론 Firefly III를 방금 설치한 경우라면 정상적인 현상이지만, 가능한 한 빨리 설정해야 합니다. 페이지 오른쪽 상단의 (?) 아이콘을 사용하여 도움말 페이지를 확인하시기 바랍니다.', - 'recurring_cron_long_ago' => '반복 거래를 지원하는 cron 작업이 마지막으로 실행된 후 36시간이 넘은 것 같습니다. 올바르게 설정된 것이 맞나요? 페이지 오른쪽 상단의 (?) 아이콘을 사용하여 도움말 페이지를 확인하세요.', + 'create_right_now' => '지금 바로 만들기', + 'no_new_transaction_in_recurrence' => '새 거래가 생성되지 않았습니다. 이 날짜에 이미 해지된 것일까요?', + 'recurrences' => '반복 거래', + 'repeat_until_in_past' => '이 반복 거래는 :date에 반복이 중지되었습니다.', + 'recurring_calendar_view' => '달력', + 'no_recurring_title_default' => '반복 거래를 만들어 봅시다!', + 'no_recurring_intro_default' => '아직 반복 거래가 없습니다. 이를 사용하여 Firefly III가 자동으로 거래를 생성하도록 할 수 있습니다.', + 'no_recurring_imperative_default' => '이 기능은 꽤 고급 기능이지만 매우 유용할 수 있습니다. 계속하기 전에 오른쪽 상단에 있는 문서((?) 아이콘)를 읽어보시기 바랍니다.', + 'no_recurring_create_default' => '반복 거래 만들기', + 'make_new_recurring' => '반복 거래 만들기', + 'recurring_daily' => '매일', + 'recurring_weekly' => '매주 :weekday', + 'recurring_weekly_skip' => '매 :skip(st/nd/rd/th) 주 :weekday', + 'recurring_monthly' => '매월 :dayOfMonth(st/nd/rd/th) 일', + 'recurring_monthly_skip' => ':skip(st/nd/rd/th) 월마다 :dayOfMonth(st/nd/rd/th) 일에', + 'recurring_ndom' => '매월 :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => '매년 :date에', + 'overview_for_recurrence' => '":title" 반복 거래 개요', + 'warning_duplicates_repetitions' => '드물지만 이 목록에 날짜가 두 번 표시되는 경우가 있습니다. 이는 여러 반복이 충돌할 때 발생할 수 있습니다. Firefly III는 항상 하루에 하나의 트랜잭션을 생성합니다.', + 'created_transactions' => '관련 거래', + 'expected_withdrawals' => '예상 출금액', + 'expected_deposits' => '예상 입금', + 'expected_transfers' => '예상 이체', + 'created_withdrawals' => '출금 생성', + 'created_deposits' => '입금 생성', + 'created_transfers' => '이체 생성', + 'recurring_info' => '반복 거래 :count / :total', + 'created_from_recurrence' => '":title" (#:id) 반복 거래에서 생성됨', + 'recurring_never_cron' => '반복 거래를 지원하는 데 필요한 cron 작업이 실행된 적이 없는 것 같습니다. 물론 Firefly III를 방금 설치한 경우라면 정상적인 현상이지만, 가능한 한 빨리 설정해야 합니다. 페이지 오른쪽 상단의 (?) 아이콘을 사용하여 도움말 페이지를 확인하시기 바랍니다.', + 'recurring_cron_long_ago' => '반복 거래를 지원하는 cron 작업이 마지막으로 실행된 후 36시간이 넘은 것 같습니다. 올바르게 설정된 것이 맞나요? 페이지 오른쪽 상단의 (?) 아이콘을 사용하여 도움말 페이지를 확인하세요.', - 'create_new_recurrence' => '새 반복 거래 만들기', - 'help_first_date' => '첫 번째 예상 반복을 나타냅니다. 이것은 미래에 이루어져야 합니다.', - 'help_first_date_no_past' => '첫 번째 예상 반복을 나타냅니다. Firefly III는 과거의 거래를 생성하지 않습니다.', - 'no_currency' => '(통화 없음)', - 'mandatory_for_recurring' => '필수 반복 정보', - 'mandatory_for_transaction' => '필수 거래 정보', - 'optional_for_recurring' => '선택적 반복 정보', - 'optional_for_transaction' => '선택적 거래 정보', - 'change_date_other_options' => '더 많은 옵션을 보려면 "첫 번째 날짜"를 변경하세요.', - 'mandatory_fields_for_tranaction' => '여기의 값은 생성되는 거래에 최종적으로 반영됩니다', - 'click_for_calendar' => '거래가 반복되는 시기를 보여주는 달력을 보려면 여기를 클릭하세요.', - 'repeat_forever' => '영원히 반복', - 'repeat_until_date' => '날짜까지 반복', - 'repeat_times' => '여러 번 반복', - 'recurring_skips_one' => '다른 모든', - 'recurring_skips_more' => '건너뛰기 :count 발생', - 'store_new_recurrence' => '반복 거래 저장', - 'stored_new_recurrence' => '":title" 반복 거래가 성공적으로 저장되었습니다.', - 'edit_recurrence' => '":title" 반복 거래 수정', - 'recurring_repeats_until' => ':date 까지 반복', - 'recurring_repeats_forever' => '영원히 반복', - 'recurring_repeats_x_times' => ':count 회 반복|:count 회 반복', - 'update_recurrence' => '반복 거래 업데이트', - 'updated_recurrence' => '":title" 반복 거래 업데이트됨', - 'recurrence_is_inactive' => '이 반복 거래는 활성화되어 있지 않으며 새 거래를 생성하지 않습니다.', - 'delete_recurring' => '":title" 반복 거래 삭제', - 'new_recurring_transaction' => '새 반복 거래', - 'help_weekend' => '반복 거래가 토요일이나 일요일에 해당하는 경우 Firefly III는 어떻게 해야 하나요?', - 'do_nothing' => '그냥 트랜잭션을 생성', - 'skip_transaction' => '발생 건너뛰기', - 'jump_to_friday' => '대신 이전 금요일에 거래를 생성합니다', - 'jump_to_monday' => '대신 다음 월요일에 거래를 생성합니다', - 'will_jump_friday' => '주말이 아닌 금요일에 생성됩니다.', - 'will_jump_monday' => '주말이 아닌 월요일에 생성됩니다.', - 'except_weekends' => '주말 제외', - 'recurrence_deleted' => '반복 거래 ":title" 삭제됨', + 'create_new_recurrence' => '새 반복 거래 만들기', + 'help_first_date' => '첫 번째 예상 반복을 나타냅니다. 이것은 미래에 이루어져야 합니다.', + 'help_first_date_no_past' => '첫 번째 예상 반복을 나타냅니다. Firefly III는 과거의 거래를 생성하지 않습니다.', + 'no_currency' => '(통화 없음)', + 'mandatory_for_recurring' => '필수 반복 정보', + 'mandatory_for_transaction' => '필수 거래 정보', + 'optional_for_recurring' => '선택적 반복 정보', + 'optional_for_transaction' => '선택적 거래 정보', + 'change_date_other_options' => '더 많은 옵션을 보려면 "첫 번째 날짜"를 변경하세요.', + 'mandatory_fields_for_tranaction' => '여기의 값은 생성되는 거래에 최종적으로 반영됩니다', + 'click_for_calendar' => '거래가 반복되는 시기를 보여주는 달력을 보려면 여기를 클릭하세요.', + 'repeat_forever' => '영원히 반복', + 'repeat_until_date' => '날짜까지 반복', + 'repeat_times' => '여러 번 반복', + 'recurring_skips_one' => '다른 모든', + 'recurring_skips_more' => '건너뛰기 :count 발생', + 'store_new_recurrence' => '반복 거래 저장', + 'stored_new_recurrence' => '":title" 반복 거래가 성공적으로 저장되었습니다.', + 'edit_recurrence' => '":title" 반복 거래 수정', + 'recurring_repeats_until' => ':date 까지 반복', + 'recurring_repeats_forever' => '영원히 반복', + 'recurring_repeats_x_times' => ':count 회 반복|:count 회 반복', + 'update_recurrence' => '반복 거래 업데이트', + 'updated_recurrence' => '":title" 반복 거래 업데이트됨', + 'recurrence_is_inactive' => '이 반복 거래는 활성화되어 있지 않으며 새 거래를 생성하지 않습니다.', + 'delete_recurring' => '":title" 반복 거래 삭제', + 'new_recurring_transaction' => '새 반복 거래', + 'help_weekend' => '반복 거래가 토요일이나 일요일에 해당하는 경우 Firefly III는 어떻게 해야 하나요?', + 'do_nothing' => '그냥 트랜잭션을 생성', + 'skip_transaction' => '발생 건너뛰기', + 'jump_to_friday' => '대신 이전 금요일에 거래를 생성합니다', + 'jump_to_monday' => '대신 다음 월요일에 거래를 생성합니다', + 'will_jump_friday' => '주말이 아닌 금요일에 생성됩니다.', + 'will_jump_monday' => '주말이 아닌 월요일에 생성됩니다.', + 'except_weekends' => '주말 제외', + 'recurrence_deleted' => '반복 거래 ":title" 삭제됨', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => '잔고 (:currency)', - 'box_spent_in_currency' => '지출 (:currency)', - 'box_earned_in_currency' => '수입 (:currency)', - 'box_budgeted_in_currency' => '예산 (:currency)', - 'box_bill_paid_in_currency' => '결제된 청구서 (:currency)', - 'box_bill_unpaid_in_currency' => '결제되지 않은 청구서 (:currency)', - 'box_left_to_spend_in_currency' => '남은 지출 (:currency)', - 'box_net_worth_in_currency' => '순자산 (:currency)', - 'box_spend_per_day' => '하루 남은 지출: :amount', + 'box_balance_in_currency' => '잔고 (:currency)', + 'box_spent_in_currency' => '지출 (:currency)', + 'box_earned_in_currency' => '수입 (:currency)', + 'box_budgeted_in_currency' => '예산 (:currency)', + 'box_bill_paid_in_currency' => '결제된 청구서 (:currency)', + 'box_bill_unpaid_in_currency' => '결제되지 않은 청구서 (:currency)', + 'box_left_to_spend_in_currency' => '남은 지출 (:currency)', + 'box_net_worth_in_currency' => '순자산 (:currency)', + 'box_spend_per_day' => '하루 남은 지출: :amount', // debug page - 'debug_page' => '디버그 페이지', - 'debug_submit_instructions' => '문제가 발생하면 이 상자의 정보를 디버그 정보로 사용할 수 있습니다. 이 정보를 복사하여 신규 또는 기존 GitHub 이슈에 붙여넣으세요. 문제를 빠르게 진단하는 데 사용할 수 있는 멋진 표가 생성됩니다.', - 'debug_pretty_table' => '아래 상자를 GitHub 이슈에 복사/붙여넣으면 표가 생성됩니다. 이 텍스트를 백틱(`)이나 따옴표(\')로 둘러싸지 마세요.', - 'debug_additional_data' => '아래 상자의 내용을 공유할 수도 있습니다. 이 내용을 복사하여 신규 또는 기존 GitHub 이슈에 붙여넣을 수도 있습니다. 단, 이 상자의 내용에는 계정 이름, 거래 세부 정보 또는 이메일 주소와 같은 개인 정보가 포함될 수 있습니다.', + 'debug_page' => '디버그 페이지', + 'debug_submit_instructions' => '문제가 발생하면 이 상자의 정보를 디버그 정보로 사용할 수 있습니다. 이 정보를 복사하여 신규 또는 기존 GitHub 이슈에 붙여넣으세요. 문제를 빠르게 진단하는 데 사용할 수 있는 멋진 표가 생성됩니다.', + 'debug_pretty_table' => '아래 상자를 GitHub 이슈에 복사/붙여넣으면 표가 생성됩니다. 이 텍스트를 백틱(`)이나 따옴표(\')로 둘러싸지 마세요.', + 'debug_additional_data' => '아래 상자의 내용을 공유할 수도 있습니다. 이 내용을 복사하여 신규 또는 기존 GitHub 이슈에 붙여넣을 수도 있습니다. 단, 이 상자의 내용에는 계정 이름, 거래 세부 정보 또는 이메일 주소와 같은 개인 정보가 포함될 수 있습니다.', // object groups - 'object_groups_menu_bar' => '그룹', - 'object_groups_page_title' => '그룹', - 'object_groups_breadcrumb' => '그룹', - 'object_groups_index' => '개요', - 'object_groups' => '그룹', - 'object_groups_empty_explain' => 'Firefly III의 일부 항목은 그룹으로 나눌 수 있습니다. 예를 들어 저금통은 편집 및 생성 화면에 "그룹" 항목이 있습니다. 이 항목을 설정하면 이 페이지에서 그룹의 이름과 순서를 편집할 수 있습니다. 자세한 내용은 오른쪽 상단 모서리의 (?) 아이콘 아래에 있는 도움말 페이지를 확인하세요.', - 'object_group_title' => '제목', - 'edit_object_group' => '그룹 ":title" 수정', - 'delete_object_group' => '그룹 ":title" 삭제', - 'update_object_group' => '그룹 업데이트', - 'updated_object_group' => '그룹 ":title" 업데이트 성공', - 'deleted_object_group' => '그룹 ":title" 삭제 성공', - 'object_group' => '그룹', + 'object_groups_menu_bar' => '그룹', + 'object_groups_page_title' => '그룹', + 'object_groups_breadcrumb' => '그룹', + 'object_groups_index' => '개요', + 'object_groups' => '그룹', + 'object_groups_empty_explain' => 'Firefly III의 일부 항목은 그룹으로 나눌 수 있습니다. 예를 들어 저금통은 편집 및 생성 화면에 "그룹" 항목이 있습니다. 이 항목을 설정하면 이 페이지에서 그룹의 이름과 순서를 편집할 수 있습니다. 자세한 내용은 오른쪽 상단 모서리의 (?) 아이콘 아래에 있는 도움말 페이지를 확인하세요.', + 'object_group_title' => '제목', + 'edit_object_group' => '그룹 ":title" 수정', + 'delete_object_group' => '그룹 ":title" 삭제', + 'update_object_group' => '그룹 업데이트', + 'updated_object_group' => '그룹 ":title" 업데이트 성공', + 'deleted_object_group' => '그룹 ":title" 삭제 성공', + 'object_group' => '그룹', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => '감사 로그 항목', - 'ale_action_log_add' => '":name" 저금통에 :amount 추가', - 'ale_action_log_remove' => '":name" 저금통에서 :amount 제거', - 'ale_action_clear_budget' => '예산에서 제거됨', - 'ale_action_update_group_title' => '분할거래 설명 변경', - 'ale_action_update_date' => '거래 날짜 변경', - 'ale_action_update_order' => '거래 순서 변경', - 'ale_action_clear_category' => '카테고리에서 제거됨', - 'ale_action_clear_notes' => '제거된 노트', - 'ale_action_clear_tag' => '삭제된 태그', - 'ale_action_clear_all_tags' => '모든 태그 지우기', - 'ale_action_set_bill' => '청구서에 연결됨', - 'ale_action_switch_accounts' => '소스와 대상 계정 전환', - 'ale_action_set_budget' => '예산 설정', - 'ale_action_set_category' => '카테고리 설정', - 'ale_action_set_source' => '소스 계정 설정', - 'ale_action_set_destination' => '대상 계정 설정', - 'ale_action_update_transaction_type' => '변경된 거래 유형', - 'ale_action_update_notes' => '변경된 노트', - 'ale_action_update_description' => '변경된 설명', - 'ale_action_add_to_piggy' => '저금통', - 'ale_action_remove_from_piggy' => '저금통', - 'ale_action_add_tag' => '태그 추가', + 'audit_log_entries' => '감사 로그 항목', + 'ale_action_log_add' => '":name" 저금통에 :amount 추가', + 'ale_action_log_remove' => '":name" 저금통에서 :amount 제거', + 'ale_action_clear_budget' => '예산에서 제거됨', + 'ale_action_update_group_title' => '분할거래 설명 변경', + 'ale_action_update_date' => '거래 날짜 변경', + 'ale_action_update_order' => '거래 순서 변경', + 'ale_action_clear_category' => '카테고리에서 제거됨', + 'ale_action_clear_notes' => '제거된 노트', + 'ale_action_clear_tag' => '삭제된 태그', + 'ale_action_clear_all_tags' => '모든 태그 지우기', + 'ale_action_set_bill' => '청구서에 연결됨', + 'ale_action_switch_accounts' => '소스와 대상 계정 전환', + 'ale_action_set_budget' => '예산 설정', + 'ale_action_set_category' => '카테고리 설정', + 'ale_action_set_source' => '소스 계정 설정', + 'ale_action_set_destination' => '대상 계정 설정', + 'ale_action_update_transaction_type' => '변경된 거래 유형', + 'ale_action_update_notes' => '변경된 노트', + 'ale_action_update_description' => '변경된 설명', + 'ale_action_add_to_piggy' => '저금통', + 'ale_action_remove_from_piggy' => '저금통', + 'ale_action_add_tag' => '태그 추가', // dashboard - 'enable_auto_convert' => '통화 변환 활성화', - 'disable_auto_convert' => '통화 변환 비활성화', - + 'enable_auto_convert' => '통화 변환 활성화', + 'disable_auto_convert' => '통화 변환 비활성화', ]; /* diff --git a/resources/lang/ko_KR/form.php b/resources/lang/ko_KR/form.php index 0352c407b0..0600972d24 100644 --- a/resources/lang/ko_KR/form.php +++ b/resources/lang/ko_KR/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => '은행명', - 'bank_balance' => '잔고', - 'savings_balance' => '저축 잔액', - 'credit_card_limit' => '신용카드 한도', - 'automatch' => '자동으로 일치', - 'skip' => '건너뛰기', - 'enabled' => '활성화', - 'name' => '이름', - 'active' => '활성', - 'amount_min' => '최소 금액', - 'amount_max' => '최대 금액', - 'match' => '일치', - 'strict' => '엄격 모드', - 'repeat_freq' => '반복', - 'object_group' => '그룹', - 'location' => '위치', - 'update_channel' => '업데이트 채널', - 'currency_id' => '통화', - 'transaction_currency_id' => '통화', - 'auto_budget_currency_id' => '통화', - 'external_ip' => '서버 외부 IP', - 'attachments' => '첨부 파일', - 'BIC' => '은행식별코드(BIC)', - 'verify_password' => '비밀번호 보안 확인', - 'source_account' => '자산', - 'destination_account' => '대상 자산', - 'asset_destination_account' => '대상 자산', - 'include_net_worth' => '순자산에 포함', - 'asset_source_account' => '자산', - 'journal_description' => '상세정보', - 'note' => '노트', - 'currency' => '통화', - 'account_id' => '자산 계좌', - 'budget_id' => '예산', - 'bill_id' => '청구서', - 'opening_balance' => '초기 잔고', - 'tagMode' => '태그 모드', - 'virtual_balance' => '가상 잔고', + 'bank_name' => '은행명', + 'bank_balance' => '잔고', + 'savings_balance' => '저축 잔액', + 'credit_card_limit' => '신용카드 한도', + 'automatch' => '자동으로 일치', + 'skip' => '건너뛰기', + 'enabled' => '활성화', + 'name' => '이름', + 'active' => '활성', + 'amount_min' => '최소 금액', + 'amount_max' => '최대 금액', + 'match' => '일치', + 'strict' => '엄격 모드', + 'repeat_freq' => '반복', + 'object_group' => '그룹', + 'location' => '위치', + 'update_channel' => '업데이트 채널', + 'currency_id' => '통화', + 'transaction_currency_id' => '통화', + 'auto_budget_currency_id' => '통화', + 'external_ip' => '서버 외부 IP', + 'attachments' => '첨부 파일', + 'BIC' => '은행식별코드(BIC)', + 'verify_password' => '비밀번호 보안 확인', + 'source_account' => '자산', + 'destination_account' => '대상 자산', + 'asset_destination_account' => '대상 자산', + 'include_net_worth' => '순자산에 포함', + 'asset_source_account' => '자산', + 'journal_description' => '상세정보', + 'note' => '노트', + 'currency' => '통화', + 'account_id' => '자산 계좌', + 'budget_id' => '예산', + 'bill_id' => '청구서', + 'opening_balance' => '초기 잔고', + 'tagMode' => '태그 모드', + 'virtual_balance' => '가상 잔고', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => '목표 금액', 'account_role' => '계좌 역할', 'opening_balance_date' => '개설일', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => '":description"으로 설명된 거래를 정말 삭제하시겠습니까?', 'mass_journal_are_you_sure' => '이 거래를 정말로 삭제할까요?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => '":tag" 태그를 정말 삭제하시겠습니까?', 'journal_link_areYouSure' => ':source:destination 사이의 링크를 정말로 삭제하시겠습니까?', 'linkType_areYouSure' => '":name" (":inward" / ":outward")인 링크 유형을 정말로 삭제하시겠습니까?', @@ -230,7 +227,6 @@ return [ 'album' => '앨범', 'song' => '노래', - // admin 'domain' => '도메인', 'single_user_mode' => '사용자 등록 비활성화', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS 계좌', 'local_account' => 'Firefly III 계정', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => '시작 날짜', - 'to_date' => '종료 날짜', - 'due_date' => '기한', - 'payment_date' => '결제일', - 'invoice_date' => '청구서 날짜', - 'internal_reference' => '내부 참조', - 'inward' => '내부 설명', - 'outward' => '외부 설명', - 'rule_group_id' => '규칙 그룹', - 'transaction_description' => '거래 상세내역', - 'first_date' => '최초 일자', - 'transaction_type' => '거래 유형', - 'repeat_until' => '반복 기한', - 'recurring_description' => '반복 거래 설명', - 'repetition_type' => '반복 유형', - 'foreign_currency_id' => '외화', - 'repetition_end' => '반복 종료', - 'repetitions' => '반복', - 'calendar' => '달력', - 'weekend' => '주말', - 'client_secret' => '클라이언트 시크릿', - 'withdrawal_destination_id' => '대상 자산', - 'deposit_source_id' => '자산', - 'expected_on' => '예상 일자', - 'paid' => '지불됨', - 'auto_budget_type' => '자동 예산', - 'auto_budget_amount' => '자동 예산 금액', - 'auto_budget_period' => '자동 예산 기간', - 'collected' => '획득함', - 'submitted' => '제출됨', - 'key' => '키', - 'value' => '기록 내용', - 'webhook_delivery' => '전달', - 'webhook_response' => '응답', - 'webhook_trigger' => '트리거', + 'from_date' => '시작 날짜', + 'to_date' => '종료 날짜', + 'due_date' => '기한', + 'payment_date' => '결제일', + 'invoice_date' => '청구서 날짜', + 'internal_reference' => '내부 참조', + 'inward' => '내부 설명', + 'outward' => '외부 설명', + 'rule_group_id' => '규칙 그룹', + 'transaction_description' => '거래 상세내역', + 'first_date' => '최초 일자', + 'transaction_type' => '거래 유형', + 'repeat_until' => '반복 기한', + 'recurring_description' => '반복 거래 설명', + 'repetition_type' => '반복 유형', + 'foreign_currency_id' => '외화', + 'repetition_end' => '반복 종료', + 'repetitions' => '반복', + 'calendar' => '달력', + 'weekend' => '주말', + 'client_secret' => '클라이언트 시크릿', + 'withdrawal_destination_id' => '대상 자산', + 'deposit_source_id' => '자산', + 'expected_on' => '예상 일자', + 'paid' => '지불됨', + 'auto_budget_type' => '자동 예산', + 'auto_budget_amount' => '자동 예산 금액', + 'auto_budget_period' => '자동 예산 기간', + 'collected' => '획득함', + 'submitted' => '제출됨', + 'key' => '키', + 'value' => '기록 내용', + 'webhook_delivery' => '전달', + 'webhook_response' => '응답', + 'webhook_trigger' => '트리거', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ko_KR/intro.php b/resources/lang/ko_KR/intro.php index e913d5516f..add909af07 100644 --- a/resources/lang/ko_KR/intro.php +++ b/resources/lang/ko_KR/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Firefly III의 시작 페이지에 오신 것을 환영합니다. Firefly III가 어떻게 작동하는지 알고 싶다면 이 튜토리얼을 따르기 위해 시간을 내어 주세요.', - 'index_accounts-chart' => '이 차트는 현재 자산 계좌의 잔액을 나타냅니다. 설정에서 나타낼 계좌를 선택할 수 있습니다.', - 'index_box_out_holder' => '이 작은 상자와 옆의 상자로 현재 당신의 경제적 상황을 간단하게 볼 수 있습니다.', - 'index_help' => '페이지나 입력란에서 도움이 필요하다면, 언제나 이 버튼을 눌러주세요.', - 'index_outro' => '대부분의 Firefly III 페이지는 이렇게 짧은 튜토리얼로 시작할 것입니다. 질문이나 조언이 있다면 언제나 저에게 문의하세요. 감사합니다!', - 'index_sidebar-toggle' => '새 거래를 만들고 계좌를 만들기 위해서는 이 아이콘 밑의 메뉴를 이용해주세요.', - 'index_cash_account' => '지금까지 생성된 계좌들입니다. 현금 계정을 사용하여 현금 지출을 추적할 수 있지만 물론 필수는 아닙니다.', + 'index_intro' => 'Firefly III의 시작 페이지에 오신 것을 환영합니다. Firefly III가 어떻게 작동하는지 알고 싶다면 이 튜토리얼을 따르기 위해 시간을 내어 주세요.', + 'index_accounts-chart' => '이 차트는 현재 자산 계좌의 잔액을 나타냅니다. 설정에서 나타낼 계좌를 선택할 수 있습니다.', + 'index_box_out_holder' => '이 작은 상자와 옆의 상자로 현재 당신의 경제적 상황을 간단하게 볼 수 있습니다.', + 'index_help' => '페이지나 입력란에서 도움이 필요하다면, 언제나 이 버튼을 눌러주세요.', + 'index_outro' => '대부분의 Firefly III 페이지는 이렇게 짧은 튜토리얼로 시작할 것입니다. 질문이나 조언이 있다면 언제나 저에게 문의하세요. 감사합니다!', + 'index_sidebar-toggle' => '새 거래를 만들고 계좌를 만들기 위해서는 이 아이콘 밑의 메뉴를 이용해주세요.', + 'index_cash_account' => '지금까지 생성된 계좌들입니다. 현금 계정을 사용하여 현금 지출을 추적할 수 있지만 물론 필수는 아닙니다.', // transactions - 'transactions_create_basic_info' => '거래의 기본 정보를 입력합니다. 보내는 이, 받는 이, 날짜 및 설명을 입력합니다.', - 'transactions_create_amount_info' => '거래 금액을 입력합니다. 필요하다면 필드가 해외 금액 정보로 자동 업데이트 됩니다.', - 'transactions_create_optional_info' => '이 모든 필드는 선택 사항입니다. 여기에 메타데이터를 추가하면 트랜잭션을 더 체계적으로 관리할 수 있습니다.', - 'transactions_create_split' => '거래를 분할하려면 이 버튼을 사용하여 분할을 더 추가하세요', + 'transactions_create_basic_info' => '거래의 기본 정보를 입력합니다. 보내는 이, 받는 이, 날짜 및 설명을 입력합니다.', + 'transactions_create_amount_info' => '거래 금액을 입력합니다. 필요하다면 필드가 해외 금액 정보로 자동 업데이트 됩니다.', + 'transactions_create_optional_info' => '이 모든 필드는 선택 사항입니다. 여기에 메타데이터를 추가하면 트랜잭션을 더 체계적으로 관리할 수 있습니다.', + 'transactions_create_split' => '거래를 분할하려면 이 버튼을 사용하여 분할을 더 추가하세요', // create account: - 'accounts_create_iban' => '계정에 유효한 IBAN을 부여하세요. 이렇게 하면 향후 데이터 가져오기가 매우 쉬워질 수 있습니다.', - 'accounts_create_asset_opening_balance' => '자산 계정에 "초기 잔고"가 있을 수 있으며, 이는 Firefly III에서 이 계정의 기록이 시작되었음을 나타냅니다.', - 'accounts_create_asset_currency' => 'Firefly III는 여러 통화를 지원합니다. 자산 계정에는 하나의 기본 통화가 있으며 여기에서 설정해야 합니다.', - 'accounts_create_asset_virtual' => '계정에 가상 잔고를 제공하는 것이 도움이 될 수 있습니다. 즉, 실제 잔액에서 항상 추가되거나 제거되는 추가 금액입니다.', + 'accounts_create_iban' => '계정에 유효한 IBAN을 부여하세요. 이렇게 하면 향후 데이터 가져오기가 매우 쉬워질 수 있습니다.', + 'accounts_create_asset_opening_balance' => '자산 계정에 "초기 잔고"가 있을 수 있으며, 이는 Firefly III에서 이 계정의 기록이 시작되었음을 나타냅니다.', + 'accounts_create_asset_currency' => 'Firefly III는 여러 통화를 지원합니다. 자산 계정에는 하나의 기본 통화가 있으며 여기에서 설정해야 합니다.', + 'accounts_create_asset_virtual' => '계정에 가상 잔고를 제공하는 것이 도움이 될 수 있습니다. 즉, 실제 잔액에서 항상 추가되거나 제거되는 추가 금액입니다.', // budgets index - 'budgets_index_intro' => '예산은 재정을 관리하는 데 사용되며 Firefly III의 핵심 기능 중 하나입니다.', - 'budgets_index_set_budget' => '모든 기간에 대한 총 예산을 설정하면 Firefly III에서 사용 가능한 모든 예산을 책정했는지 여부를 알려줍니다.', - 'budgets_index_see_expenses_bar' => '돈을 쓰면 이 막대가 서서히 채워집니다.', - 'budgets_index_navigate_periods' => '기간을 탐색하여 예산을 미리 쉽게 설정할 수 있습니다.', - 'budgets_index_new_budget' => '필요에 따라 새 예산을 만들 수 있습니다.', - 'budgets_index_list_of_budgets' => '이 표를 사용하여 각 예산의 금액을 설정하고 진행 상황을 확인하세요.', - 'budgets_index_outro' => '예산 책정에 대해 자세히 알아보려면 오른쪽 상단의 도움말 아이콘을 확인하세요.', + 'budgets_index_intro' => '예산은 재정을 관리하는 데 사용되며 Firefly III의 핵심 기능 중 하나입니다.', + 'budgets_index_see_expenses_bar' => '돈을 쓰면 이 막대가 서서히 채워집니다.', + 'budgets_index_navigate_periods' => '기간을 탐색하여 예산을 미리 쉽게 설정할 수 있습니다.', + 'budgets_index_new_budget' => '필요에 따라 새 예산을 만들 수 있습니다.', + 'budgets_index_list_of_budgets' => '이 표를 사용하여 각 예산의 금액을 설정하고 진행 상황을 확인하세요.', + 'budgets_index_outro' => '예산 책정에 대해 자세히 알아보려면 오른쪽 상단의 도움말 아이콘을 확인하세요.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => '이 보고서를 사용하여 재정에 대한 자세한 인사이트를 얻으세요.', - 'reports_index_inputReportType' => '보고서 유형을 선택합니다. 도움말 페이지에서 각 보고서에 표시되는 내용을 확인하세요.', - 'reports_index_inputAccountsSelect' => '원하는 대로 자산 계정을 제외하거나 포함할 수 있습니다.', - 'reports_index_inputDateRange' => '선택한 날짜 범위는 하루에서 10년까지 전적으로 사용자에게 달려 있습니다.', - 'reports_index_extra-options-box' => '선택한 보고서에 따라 여기에서 추가 필터 및 옵션을 선택할 수 있습니다. 보고서 유형을 변경할 때 이 상자를 확인하세요.', + 'reports_index_intro' => '이 보고서를 사용하여 재정에 대한 자세한 인사이트를 얻으세요.', + 'reports_index_inputReportType' => '보고서 유형을 선택합니다. 도움말 페이지에서 각 보고서에 표시되는 내용을 확인하세요.', + 'reports_index_inputAccountsSelect' => '원하는 대로 자산 계정을 제외하거나 포함할 수 있습니다.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => '선택한 보고서에 따라 여기에서 추가 필터 및 옵션을 선택할 수 있습니다. 보고서 유형을 변경할 때 이 상자를 확인하세요.', // reports (reports) - 'reports_report_default_intro' => '이 보고서는 재정에 대한 빠르고 포괄적인 개요를 제공합니다. 다른 것을 보고 싶다면 망설이지 말고 저에게 연락하세요!', - 'reports_report_audit_intro' => '이 보고서는 자산 계정에 대한 자세한 전망을 제공합니다.', - 'reports_report_audit_optionsBox' => '체크박스를 사용하여 관심 있는 열을 표시하거나 숨길 수 있습니다.', + 'reports_report_default_intro' => '이 보고서는 재정에 대한 빠르고 포괄적인 개요를 제공합니다. 다른 것을 보고 싶다면 망설이지 말고 저에게 연락하세요!', + 'reports_report_audit_intro' => '이 보고서는 자산 계정에 대한 자세한 전망을 제공합니다.', + 'reports_report_audit_optionsBox' => '체크박스를 사용하여 관심 있는 열을 표시하거나 숨길 수 있습니다.', - 'reports_report_category_intro' => '이 보고서는 하나 또는 그 이상의 카테고리에 대한 전망을 제공합니다.', - 'reports_report_category_pieCharts' => '이 차트를 통해 카테고리 또는 계정별 지출과 수입에 대한 전망을 얻을 수 있습니다.', - 'reports_report_category_incomeAndExpensesChart' => '이 차트는 카테고리별 지출과 수입을 보여줍니다.', + 'reports_report_category_intro' => '이 보고서는 하나 또는 그 이상의 카테고리에 대한 전망을 제공합니다.', + 'reports_report_category_pieCharts' => '이 차트를 통해 카테고리 또는 계정별 지출과 수입에 대한 전망을 얻을 수 있습니다.', + 'reports_report_category_incomeAndExpensesChart' => '이 차트는 카테고리별 지출과 수입을 보여줍니다.', - 'reports_report_tag_intro' => '이 보고서는 하나 또는 그 이상의 태그에 대한 전망을 제공합니다.', - 'reports_report_tag_pieCharts' => '이 차트를 통해 태그, 계정, 카테고리 또는 예산별로 지출과 수입에 대한 전망을 얻을 수 있습니다.', - 'reports_report_tag_incomeAndExpensesChart' => '이 차트는 태그별 지출과 수입을 보여줍니다.', + 'reports_report_tag_intro' => '이 보고서는 하나 또는 그 이상의 태그에 대한 전망을 제공합니다.', + 'reports_report_tag_pieCharts' => '이 차트를 통해 태그, 계정, 카테고리 또는 예산별로 지출과 수입에 대한 전망을 얻을 수 있습니다.', + 'reports_report_tag_incomeAndExpensesChart' => '이 차트는 태그별 지출과 수입을 보여줍니다.', 'reports_report_budget_intro' => '이 보고서는 하나 또는 그 이상의 예산에 대한 전망을 제공합니다.', 'reports_report_budget_pieCharts' => '이 차트를 통해 예산 또는 계정별 지출에 대한 전망을 얻을 수 있습니다.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => '이 진행률 표시줄 옆에는 각 저금통에서 돈을 추가하거나 제거하는 두 개의 버튼(+ 와 -)이 있습니다.', 'piggy-banks_index_accountStatus' => '저금통이 하나 이상 있는 각 자산 계정의 상태는 이 표에 나열되어 있습니다.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => '목표가 무엇인가요? 새 소파, 카메라, 비상 자금인가요?', 'piggy-banks_create_date' => '저금통의 목표 날짜 또는 마감기한을 설정할 수 있습니다.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => '청구서를 사용하여 매 기간마다 납부해야 할 금액을 추적하세요. 집세, 보험료, 모기지 상환금과 같은 지출에 대해 생각해 보세요.', 'bills_create_name' => '"임대료"나 "건강 보험"과 같이 설명이 포함된 이름을 사용합니다.', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => '이 청구서의 최소 및 최대 금액을 선택합니다.', 'bills_create_repeat_freq_holder' => '대부분의 청구서는 매월 반복되지만 여기에서 다른 주기를 설정할 수 있습니다.', 'bills_create_skip_holder' => '청구서가 2주마다 반복되는 경우, 격주로 건너뛰려면 "건너뛰기" 항목을 "1"로 설정해야 합니다.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => '이 버튼을 사용하여 어떤 거래가 규칙과 일치하는지 확인합니다.', 'rules_create_actions' => '원하는 만큼 작업을 설정하세요.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => '이 탭에는 더 많은 옵션이 있습니다.', diff --git a/resources/lang/ko_KR/list.php b/resources/lang/ko_KR/list.php index 021c6ef4c8..926c90902b 100644 --- a/resources/lang/ko_KR/list.php +++ b/resources/lang/ko_KR/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => '버튼', - 'icon' => '아이콘', - 'id' => '아이디', - 'create_date' => '생성일', - 'update_date' => '수정일', - 'updated_at' => '수정일', - 'balance_before' => '이전 잔고', - 'balance_after' => '이후 잔고', - 'name' => '이름', - 'role' => '역할', - 'currentBalance' => '현재 잔고', - 'linked_to_rules' => '관련 규칙', - 'active' => '활성 상태입니까?', - 'percentage' => '%', - 'recurring_transaction' => '반복 거래', - 'next_due' => '다음 마감일', - 'transaction_type' => '유형', - 'lastActivity' => '마지막 활동', - 'balanceDiff' => '잔고 차이', - 'other_meta_data' => '다른 메타데이터', - 'invited_at' => '초대됨', - 'expires' => '초대 만료됨', - 'invited_by' => '에 의해 초대됨', - 'invite_link' => '초대 링크', - 'account_type' => '계정 유형', - 'created_at' => '생성일', - 'account' => '계정', - 'external_url' => '외부 URL', - 'matchingAmount' => '금액', - 'destination' => '대상', - 'source' => '소스', - 'next_expected_match' => '다음 예상 지불일', - 'automatch' => '자동 매칭?', + 'buttons' => '버튼', + 'icon' => '아이콘', + 'id' => '아이디', + 'create_date' => '생성일', + 'update_date' => '수정일', + 'updated_at' => '수정일', + 'balance_before' => '이전 잔고', + 'balance_after' => '이후 잔고', + 'name' => '이름', + 'role' => '역할', + 'currentBalance' => '현재 잔고', + 'linked_to_rules' => '관련 규칙', + 'active' => '활성 상태입니까?', + 'percentage' => '%', + 'recurring_transaction' => '반복 거래', + 'next_due' => '다음 마감일', + 'transaction_type' => '유형', + 'lastActivity' => '마지막 활동', + 'balanceDiff' => '잔고 차이', + 'other_meta_data' => '다른 메타데이터', + 'invited_at' => '초대됨', + 'expires' => '초대 만료됨', + 'invited_by' => '에 의해 초대됨', + 'invite_link' => '초대 링크', + 'account_type' => '계정 유형', + 'created_at' => '생성일', + 'account' => '계정', + 'external_url' => '외부 URL', + 'matchingAmount' => '금액', + 'destination' => '대상', + 'source' => '소스', + 'next_expected_match' => '다음 예상 지불일', + 'automatch' => '자동 매칭?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => '반복', 'description' => '설명', 'amount' => '금액', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Bunq 계정', 'file_name' => '파일명', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => '파일 크기', - 'file_type' => '파일 형식', - 'attached_to' => '첨부', - 'file_exists' => '파일 존재', - 'spectre_bank' => '은행', - 'spectre_last_use' => '최종 로그인', - 'spectre_status' => '상태', - 'bunq_payment_id' => 'bunq 지불 ID', - 'repetitions' => '반복', - 'title' => '제목', - 'transaction_s' => '거래', - 'field' => '필드', - 'value' => '값', - 'interest' => '이자', - 'interest_period' => '이자 기간', - 'liability_type' => '부채 유형', - 'liability_direction' => '부채 입출금', - 'end_date' => '종료 날짜', - 'payment_info' => '결제 정보', - 'expected_info' => '다음 예상 거래', - 'start_date' => '시작일', - 'trigger' => '트리거', - 'response' => '응답', - 'delivery' => '전달', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => '파일 크기', + 'file_type' => '파일 형식', + 'attached_to' => '첨부', + 'file_exists' => '파일 존재', + 'spectre_bank' => '은행', + 'spectre_last_use' => '최종 로그인', + 'spectre_status' => '상태', + 'bunq_payment_id' => 'bunq 지불 ID', + 'repetitions' => '반복', + 'title' => '제목', + 'transaction_s' => '거래', + 'field' => '필드', + 'value' => '값', + 'interest' => '이자', + 'interest_period' => '이자 기간', + 'liability_type' => '부채 유형', + 'liability_direction' => '부채 입출금', + 'end_date' => '종료 날짜', + 'payment_info' => '결제 정보', + 'expected_info' => '다음 예상 거래', + 'start_date' => '시작일', + 'trigger' => '트리거', + 'response' => '응답', + 'delivery' => '전달', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ko_KR/pagination.php b/resources/lang/ko_KR/pagination.php index 3d7784b910..937a0a0f09 100644 --- a/resources/lang/ko_KR/pagination.php +++ b/resources/lang/ko_KR/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ko_KR/passwords.php b/resources/lang/ko_KR/passwords.php index cec902cf11..e5dc3e1b0a 100644 --- a/resources/lang/ko_KR/passwords.php +++ b/resources/lang/ko_KR/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ko_KR/rules.php b/resources/lang/ko_KR/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/ko_KR/rules.php +++ b/resources/lang/ko_KR/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/ko_KR/validation.php b/resources/lang/ko_KR/validation.php index 739784b6e8..a55ad64fa4 100644 --- a/resources/lang/ko_KR/validation.php +++ b/resources/lang/ko_KR/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => '배열에 "where"절이 없습니다', - 'missing_update' => '배열에 "update"절이 없습니다', - 'invalid_where_key' => 'JSON의 "where" 절에 유효하지 않은 키가 포함되어 있습니다', - 'invalid_update_key' => 'JSON의 "update" 절에 유효하지 않은 키가 포함되어 있습니다', - 'invalid_query_data' => '쿼리의 %s:%s 항목에 잘못된 데이터가 있습니다.', - 'invalid_query_account_type' => '쿼리에 허용되지 않는 다른 유형의 계정이 포함되어 있습니다.', - 'invalid_query_currency' => '쿼리에 허용되지 않는 다른 통화 설정이 있는 계정이 포함되어 있습니다.', - 'iban' => '유효한 IBAN이 아닙니다.', - 'zero_or_more' => '값은 음수가 될 수 없습니다.', - 'date_or_time' => '유효한 날짜 또는 시간 값(ISO 8601) 이어야 합니다.', - 'source_equals_destination' => '소스 계정이 대상 계정과 같습니다.', - 'unique_account_number_for_user' => '이 계좌 번호는 이미 사용 중인 것 같습니다.', - 'unique_iban_for_user' => '이 IBAN은 이미 사용 중인 것 같습니다.', - 'deleted_user' => '보안 제약으로 인해 이 이메일 주소를 사용하여 등록할 수 없습니다.', - 'rule_trigger_value' => '선택한 트리거에 대해 이 값은 유효하지 않습니다.', - 'rule_action_value' => '선택한 액션에 대해 이 값은 유효하지 않습니다.', - 'file_already_attached' => '업로드된 파일 ":name"이 이 개체에 이미 첨부되어 있습니다.', - 'file_attached' => '":name" 파일을 성공적으로 업로드했습니다.', - 'must_exist' => ':attribute 필드의 ID가 데이터베이스에 존재하지 않습니다.', - 'all_accounts_equal' => '이 필드의 모든 계정은 동일해야 합니다.', - 'group_title_mandatory' => '거래가 두 개 이상일 경우 그룹 제목은 필수입니다.', - 'transaction_types_equal' => '모든 분할은 동일한 유형이어야 합니다.', - 'invalid_transaction_type' => '잘못된 거래 유형입니다.', - 'invalid_selection' => '선택이 잘못되었습니다.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => '하나 이상의 거래가 필요합니다.', - 'recurring_transaction_id' => '하나 이상의 거래가 필요합니다.', - 'need_id_to_match' => 'API가 일치시킬수 있도록 이 엔트리를 ID와 함께 제출해야 합니다.', - 'too_many_unmatched' => '제출된 거래가 각각의 데이터베이스 엔트리와 일치하지 않습니다. 기존 엔트리에 유효한 ID가 있는지 확인해 주세요.', - 'id_does_not_match' => '입력된 ID #:id가 예상된 ID와 일치하지 않습니다. 일치시키거나 빈칸을 입력하십시오.', - 'at_least_one_repetition' => '하나 이상의 반복이 필요합니다.', - 'require_repeat_until' => '반복 횟수 또는 종료 날짜(repeat_until) 가 필요합니다. 둘 다 없습니다.', - 'require_currency_info' => '이 필드의 내용은 통화 정보가 없으면 유효하지 않습니다.', - 'not_transfer_account' => '이 계정은 이체에 사용할 수 있는 계정이 아닙니다.', - 'require_currency_amount' => '이 필드의 내용은 외화 수량 정보가 없으면 유효하지 않습니다.', - 'require_foreign_currency' => '이 항목은 숫자가 필요합니다.', - 'require_foreign_dest' => '이 항목 값은 대상 계정의 통화와 일치해야 합니다.', - 'require_foreign_src' => '이 항목 값은 소스 계정의 통화와 일치해야 합니다.', - 'equal_description' => '거래 설명은 전역 설명과 같지 않아야 합니다.', - 'file_invalid_mime' => '":name" 파일은 새로운 업로드를 허용하지 않는 ":mime" 타입입니다.', - 'file_too_large' => '":name" 파일이 너무 큽니다.', - 'belongs_to_user' => '":attribute" 의 값을 알 수 없습니다.', - 'accepted' => '":attribute" 을(를) 수락해야 합니다.', - 'bic' => '유효한 BIC가 아닙니다.', - 'at_least_one_trigger' => '규칙은 적어도 하나의 트리거를 가져야 합니다.', - 'at_least_one_active_trigger' => '규칙은 적어도 하나의 활성화된 트리거를 가져야 합니다.', - 'at_least_one_action' => '규칙은 적어도 하나의 액션을 가져야 합니다.', - 'at_least_one_active_action' => '규칙은 적어도 하나의 활성화된 액션을 가져야 합니다.', - 'base64' => '유효한 base64 인코딩 데이터가 아닙니다.', - 'model_id_invalid' => '제공된 ID가 이 모델에 유효하지 않은 것 같습니다.', - 'less' => ':attribute 은(는) 10,000,000 보다 작아야 합니다.', - 'active_url' => ':attribute 은(는) 유효한 URL이 아닙니다.', - 'after' => ':attribute는 :date 이후의 날짜여야 합니다.', - 'date_after' => '시작 날짜는 종료 날짜 이전이어야 합니다.', - 'alpha' => ':attribute은(는) 문자만 포함할 수 있습니다.', - 'alpha_dash' => ':attribute은(는) 문자, 숫자, 대쉬(-)만 포함할 수 있습니다.', - 'alpha_num' => ':attribute은(는) 문자와 숫자만 포함할 수 있습니다.', - 'array' => ':attribute은(는) 배열이어야 합니다.', - 'unique_for_user' => '이 :attribute은(는) 이미 항목에 있습니다.', - 'before' => ':attribute은(는) :date 이전의 날짜여야 합니다.', - 'unique_object_for_user' => '이 이름은 이미 사용 중입니다.', - 'unique_account_for_user' => '이 계정명은 이미 사용중입니다.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => '배열에 "where"절이 없습니다', + 'missing_update' => '배열에 "update"절이 없습니다', + 'invalid_where_key' => 'JSON의 "where" 절에 유효하지 않은 키가 포함되어 있습니다', + 'invalid_update_key' => 'JSON의 "update" 절에 유효하지 않은 키가 포함되어 있습니다', + 'invalid_query_data' => '쿼리의 %s:%s 항목에 잘못된 데이터가 있습니다.', + 'invalid_query_account_type' => '쿼리에 허용되지 않는 다른 유형의 계정이 포함되어 있습니다.', + 'invalid_query_currency' => '쿼리에 허용되지 않는 다른 통화 설정이 있는 계정이 포함되어 있습니다.', + 'iban' => '유효한 IBAN이 아닙니다.', + 'zero_or_more' => '값은 음수가 될 수 없습니다.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => '유효한 날짜 또는 시간 값(ISO 8601) 이어야 합니다.', + 'source_equals_destination' => '소스 계정이 대상 계정과 같습니다.', + 'unique_account_number_for_user' => '이 계좌 번호는 이미 사용 중인 것 같습니다.', + 'unique_iban_for_user' => '이 IBAN은 이미 사용 중인 것 같습니다.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => '보안 제약으로 인해 이 이메일 주소를 사용하여 등록할 수 없습니다.', + 'rule_trigger_value' => '선택한 트리거에 대해 이 값은 유효하지 않습니다.', + 'rule_action_value' => '선택한 액션에 대해 이 값은 유효하지 않습니다.', + 'file_already_attached' => '업로드된 파일 ":name"이 이 개체에 이미 첨부되어 있습니다.', + 'file_attached' => '":name" 파일을 성공적으로 업로드했습니다.', + 'must_exist' => ':attribute 필드의 ID가 데이터베이스에 존재하지 않습니다.', + 'all_accounts_equal' => '이 필드의 모든 계정은 동일해야 합니다.', + 'group_title_mandatory' => '거래가 두 개 이상일 경우 그룹 제목은 필수입니다.', + 'transaction_types_equal' => '모든 분할은 동일한 유형이어야 합니다.', + 'invalid_transaction_type' => '잘못된 거래 유형입니다.', + 'invalid_selection' => '선택이 잘못되었습니다.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => '하나 이상의 거래가 필요합니다.', + 'recurring_transaction_id' => '하나 이상의 거래가 필요합니다.', + 'need_id_to_match' => 'API가 일치시킬수 있도록 이 엔트리를 ID와 함께 제출해야 합니다.', + 'too_many_unmatched' => '제출된 거래가 각각의 데이터베이스 엔트리와 일치하지 않습니다. 기존 엔트리에 유효한 ID가 있는지 확인해 주세요.', + 'id_does_not_match' => '입력된 ID #:id가 예상된 ID와 일치하지 않습니다. 일치시키거나 빈칸을 입력하십시오.', + 'at_least_one_repetition' => '하나 이상의 반복이 필요합니다.', + 'require_repeat_until' => '반복 횟수 또는 종료 날짜(repeat_until) 가 필요합니다. 둘 다 없습니다.', + 'require_currency_info' => '이 필드의 내용은 통화 정보가 없으면 유효하지 않습니다.', + 'not_transfer_account' => '이 계정은 이체에 사용할 수 있는 계정이 아닙니다.', + 'require_currency_amount' => '이 필드의 내용은 외화 수량 정보가 없으면 유효하지 않습니다.', + 'require_foreign_currency' => '이 항목은 숫자가 필요합니다.', + 'require_foreign_dest' => '이 항목 값은 대상 계정의 통화와 일치해야 합니다.', + 'require_foreign_src' => '이 항목 값은 소스 계정의 통화와 일치해야 합니다.', + 'equal_description' => '거래 설명은 전역 설명과 같지 않아야 합니다.', + 'file_invalid_mime' => '":name" 파일은 새로운 업로드를 허용하지 않는 ":mime" 타입입니다.', + 'file_too_large' => '":name" 파일이 너무 큽니다.', + 'belongs_to_user' => '":attribute" 의 값을 알 수 없습니다.', + 'accepted' => '":attribute" 을(를) 수락해야 합니다.', + 'bic' => '유효한 BIC가 아닙니다.', + 'at_least_one_trigger' => '규칙은 적어도 하나의 트리거를 가져야 합니다.', + 'at_least_one_active_trigger' => '규칙은 적어도 하나의 활성화된 트리거를 가져야 합니다.', + 'at_least_one_action' => '규칙은 적어도 하나의 액션을 가져야 합니다.', + 'at_least_one_active_action' => '규칙은 적어도 하나의 활성화된 액션을 가져야 합니다.', + 'base64' => '유효한 base64 인코딩 데이터가 아닙니다.', + 'model_id_invalid' => '제공된 ID가 이 모델에 유효하지 않은 것 같습니다.', + 'less' => ':attribute 은(는) 10,000,000 보다 작아야 합니다.', + 'active_url' => ':attribute 은(는) 유효한 URL이 아닙니다.', + 'after' => ':attribute는 :date 이후의 날짜여야 합니다.', + 'date_after' => '시작 날짜는 종료 날짜 이전이어야 합니다.', + 'alpha' => ':attribute은(는) 문자만 포함할 수 있습니다.', + 'alpha_dash' => ':attribute은(는) 문자, 숫자, 대쉬(-)만 포함할 수 있습니다.', + 'alpha_num' => ':attribute은(는) 문자와 숫자만 포함할 수 있습니다.', + 'array' => ':attribute은(는) 배열이어야 합니다.', + 'unique_for_user' => '이 :attribute은(는) 이미 항목에 있습니다.', + 'before' => ':attribute은(는) :date 이전의 날짜여야 합니다.', + 'unique_object_for_user' => '이 이름은 이미 사용 중입니다.', + 'unique_account_for_user' => '이 계정명은 이미 사용중입니다.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + '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 확인이 일치하지 않습니다.', + 'date' => ':attribute이(가) 유효한 날짜가 아닙니다.', + 'date_format' => ':attribute이(가) :format 형식과 일치하지 않습니다.', + 'different' => ':attribute와(과) :other을(를) 다르게 구성하세요.', + 'digits' => ':attribute은(는) :digits 자리 숫자여야 합니다.', + 'digits_between' => ':attribute은(는) :min에서 :max 자리 숫자여야 합니다.', + 'email' => ':attribute은(는) 유효한 이메일 주소여야 합니다.', + 'filled' => ':attribute 항목은 필수입니다.', + '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' => ':attribute은(는) :min 자 이상이어야 합니다.', + 'min.array' => ':attribute은(는) :min 개 이상이어야 합니다.', + 'not_in' => '선택한 :attribute이(가) 올바르지 않습니다.', + 'numeric' => ':attribute은(는) 숫자여야 합니다.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => '기본 금액은 숫자여야 합니다.', + 'numeric_destination' => '대상 금액은 숫자여야 합니다.', + 'numeric_source' => '소스 금액은 숫자여야 합니다.', + 'regex' => ':attribute의 형식이 올바르지 않습니다.', + 'required' => ':attribute 항목은 필수입니다.', + 'required_if' => ':other이(가) :value 일때 :attribute 항목은 필수입니다.', + 'required_unless' => ':other이(가) :values가 없는 경우 :attribute 항목은 필수입니다.', + 'required_with' => ':values이(가) 있을 경우 :attribute 항목은 필수입니다.', + 'required_with_all' => ':values이(가) 있을 경우 :attribute 항목은 필수입니다.', + 'required_without' => ':values가 없는 경우 :attribute 필드는 필수입니다.', + 'required_without_all' => ':values(이)가 모두 없을 때 :attribute 항목은 필수입니다.', + 'same' => ':attribute와(과) :other은(는) 일치해야 합니다.', + 'size.numeric' => ':attribute은(는) :size 크기여야 합니다.', + 'amount_min_over_max' => '최소 금액은 최대 금액보다 클 수 없습니다.', + 'size.file' => ':attribute은(는) :size 킬로바이트여야 합니다.', + 'size.string' => ':attribute은(는) :size 자여야 합니다.', + 'size.array' => ':attribute은(는) :size 개의 항목을 포함해야 합니다.', + 'unique' => ':attribute은(는) 이미 사용중 입니다.', + 'string' => ':attribute은(는) 문자열이어야 합니다.', + 'url' => ':attribute의 형식이 올바르지 않습니다.', + 'timezone' => ':attribute은(는) 유효한 시간대이어야 합니다.', + '2fa_code' => ':attribute 항목이 올바르지 않습니다.', + 'dimensions' => ':attribute의 이미지 크기가 올바르지 않습니다.', + 'distinct' => ':attribute 항목이 중복된 값을 갖고있습니다.', + 'file' => ':attribute은(는) 파일이어야 합니다.', + 'in_array' => ':other 에 :attribute 항목이 존재하지 않습니다.', + 'present' => ':attribute 항목은 필수입니다.', + 'amount_zero' => '총합은 0이 될 수 없습니다.', + 'current_target_amount' => '현재 금액은 목표 금액보다 적어야 합니다.', + 'unique_piggy_bank_for_user' => '저금통의 이름은 고유해야 합니다.', + 'unique_object_group' => '그룸명은 고유해야 합니다', + 'starts_with' => '값은 :values로 시작해야 합니다.', + 'unique_webhook' => 'URL, 트리거, 응답 및 전달의 조합으로 구성된 웹훅이 이미 존재합니다.', + 'unique_existing_webhook' => 'URL, 트리거, 응답 및 전달의 조합으로 구성된 다른 웹훅이 이미 존재합니다.', + 'same_account_type' => '두 계정은 동일한 계정 유형이어야 합니다.', + 'same_account_currency' => '두 계정의 통화 설정이 동일해야 합니다.', - '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 확인이 일치하지 않습니다.', - 'date' => ':attribute이(가) 유효한 날짜가 아닙니다.', - 'date_format' => ':attribute이(가) :format 형식과 일치하지 않습니다.', - 'different' => ':attribute와(과) :other을(를) 다르게 구성하세요.', - 'digits' => ':attribute은(는) :digits 자리 숫자여야 합니다.', - 'digits_between' => ':attribute은(는) :min에서 :max 자리 숫자여야 합니다.', - 'email' => ':attribute은(는) 유효한 이메일 주소여야 합니다.', - 'filled' => ':attribute 항목은 필수입니다.', - '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' => ':attribute은(는) :min 자 이상이어야 합니다.', - 'min.array' => ':attribute은(는) :min 개 이상이어야 합니다.', - 'not_in' => '선택한 :attribute이(가) 올바르지 않습니다.', - 'numeric' => ':attribute은(는) 숫자여야 합니다.', - 'numeric_native' => '기본 금액은 숫자여야 합니다.', - 'numeric_destination' => '대상 금액은 숫자여야 합니다.', - 'numeric_source' => '소스 금액은 숫자여야 합니다.', - 'regex' => ':attribute의 형식이 올바르지 않습니다.', - 'required' => ':attribute 항목은 필수입니다.', - 'required_if' => ':other이(가) :value 일때 :attribute 항목은 필수입니다.', - 'required_unless' => ':other이(가) :values가 없는 경우 :attribute 항목은 필수입니다.', - 'required_with' => ':values이(가) 있을 경우 :attribute 항목은 필수입니다.', - 'required_with_all' => ':values이(가) 있을 경우 :attribute 항목은 필수입니다.', - 'required_without' => ':values가 없는 경우 :attribute 필드는 필수입니다.', - 'required_without_all' => ':values(이)가 모두 없을 때 :attribute 항목은 필수입니다.', - 'same' => ':attribute와(과) :other은(는) 일치해야 합니다.', - 'size.numeric' => ':attribute은(는) :size 크기여야 합니다.', - 'amount_min_over_max' => '최소 금액은 최대 금액보다 클 수 없습니다.', - 'size.file' => ':attribute은(는) :size 킬로바이트여야 합니다.', - 'size.string' => ':attribute은(는) :size 자여야 합니다.', - 'size.array' => ':attribute은(는) :size 개의 항목을 포함해야 합니다.', - 'unique' => ':attribute은(는) 이미 사용중 입니다.', - 'string' => ':attribute은(는) 문자열이어야 합니다.', - 'url' => ':attribute의 형식이 올바르지 않습니다.', - 'timezone' => ':attribute은(는) 유효한 시간대이어야 합니다.', - '2fa_code' => ':attribute 항목이 올바르지 않습니다.', - 'dimensions' => ':attribute의 이미지 크기가 올바르지 않습니다.', - 'distinct' => ':attribute 항목이 중복된 값을 갖고있습니다.', - 'file' => ':attribute은(는) 파일이어야 합니다.', - 'in_array' => ':other 에 :attribute 항목이 존재하지 않습니다.', - 'present' => ':attribute 항목은 필수입니다.', - 'amount_zero' => '총합은 0이 될 수 없습니다.', - 'current_target_amount' => '현재 금액은 목표 금액보다 적어야 합니다.', - 'unique_piggy_bank_for_user' => '저금통의 이름은 고유해야 합니다.', - 'unique_object_group' => '그룸명은 고유해야 합니다', - 'starts_with' => '값은 :values로 시작해야 합니다.', - 'unique_webhook' => 'URL, 트리거, 응답 및 전달의 조합으로 구성된 웹훅이 이미 존재합니다.', - 'unique_existing_webhook' => 'URL, 트리거, 응답 및 전달의 조합으로 구성된 다른 웹훅이 이미 존재합니다.', - 'same_account_type' => '두 계정은 동일한 계정 유형이어야 합니다.', - 'same_account_currency' => '두 계정의 통화 설정이 동일해야 합니다.', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => '안전한 비밀번호가 아닙니다. 다시 시도해 주세요. 자세한 내용은 https://bit.ly/FF3-password-security 를 ​​방문하세요.', - 'valid_recurrence_rep_type' => '반복 거래에 대한 반복 유형이 잘못되었습니다.', - 'valid_recurrence_rep_moment' => '이 유형의 반복에 대한 반복 시점이 잘못되었습니다.', - 'invalid_account_info' => '잘못된 계정 정보입니다.', - 'attributes' => [ + 'secure_password' => "안전한 비밀번호가 아닙니다. 다시 시도해 주세요. 자세한 내용은 https://bit.ly/FF3-password-security 를 \u{200b}\u{200b}방문하세요.", + 'valid_recurrence_rep_type' => '반복 거래에 대한 반복 유형이 잘못되었습니다.', + 'valid_recurrence_rep_moment' => '이 유형의 반복에 대한 반복 시점이 잘못되었습니다.', + 'invalid_account_info' => '잘못된 계정 정보입니다.', + 'attributes' => [ 'email' => '이메일 주소', 'description' => '상세정보', 'amount' => '금액', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.', - 'withdrawal_source_bad_data' => '[a] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.', - 'withdrawal_dest_need_data' => '[a] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.', - 'withdrawal_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.', + 'withdrawal_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.', + 'withdrawal_source_bad_data' => '[a] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.', + 'withdrawal_dest_need_data' => '[a] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.', + 'withdrawal_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.', - 'withdrawal_dest_iban_exists' => '대상 계정의 IBAN이 이미 자산 계정에 사용되고 있거나, 부채는 출금 대상으로 사용될 수 없습니다.', - 'deposit_src_iban_exists' => '소스 계정의 IBAN이 이미 자산 계정에 사용되고 있거나, 부채는 입금 소스로 사용될 수 없습니다.', + 'withdrawal_dest_iban_exists' => '대상 계정의 IBAN이 이미 자산 계정에 사용되고 있거나, 부채는 출금 대상으로 사용될 수 없습니다.', + 'deposit_src_iban_exists' => '소스 계정의 IBAN이 이미 자산 계정에 사용되고 있거나, 부채는 입금 소스로 사용될 수 없습니다.', - 'reconciliation_source_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 조정 계정을 찾을 수 없습니다.', + 'reconciliation_source_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 조정 계정을 찾을 수 없습니다.', - 'generic_source_bad_data' => '[e] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.', + 'generic_source_bad_data' => '[e] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.', - 'deposit_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.', - 'deposit_source_bad_data' => '[b] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.', - 'deposit_dest_need_data' => '[b] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.', - 'deposit_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.', - 'deposit_dest_wrong_type' => '제출된 대상 계정이 올바른 유형이 아닙니다.', + 'deposit_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.', + 'deposit_source_bad_data' => '[b] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.', + 'deposit_dest_need_data' => '[b] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.', + 'deposit_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.', + 'deposit_dest_wrong_type' => '제출된 대상 계정이 올바른 유형이 아닙니다.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.', + 'transfer_source_bad_data' => '[c] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.', + 'transfer_dest_need_data' => '[c] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.', + 'transfer_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.', + 'need_id_in_edit' => "각 분할에는 transaction_journal_id(유효한 \u{200b}\u{200b}ID 또는 0) 가 있어야 합니다.", - 'transfer_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.', - 'transfer_source_bad_data' => '[c] ID ":id" 또는 이름 ":name"을 검색할 때 유효한 소스 계정을 찾을 수 없습니다.', - 'transfer_dest_need_data' => '[c] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.', - 'transfer_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.', - 'need_id_in_edit' => '각 분할에는 transaction_journal_id(유효한 ​​ID 또는 0) 가 있어야 합니다.', + 'ob_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.', + 'lc_source_need_data' => '계속하려면 유효한 소스 계정 ID가 필요합니다.', + 'ob_dest_need_data' => '[d] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.', + 'ob_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.', + 'reconciliation_either_account' => '조정을 제출하려면 소스 계정 또는 대상 계정 중 하나를 제출해야 합니다.', - 'ob_source_need_data' => '계속하려면 유효한 소스 계정 ID 및/또는 유효한 소스 계정 이름이 필요합니다.', - 'lc_source_need_data' => '계속하려면 유효한 소스 계정 ID가 필요합니다.', - 'ob_dest_need_data' => '[d] 계속하려면 유효한 대상 계정 ID 및/또는 유효한 대상 계정 이름이 필요합니다.', - 'ob_dest_bad_data' => 'ID ":id" 또는 이름 ":name"을 검색할 때 유효한 대상 계정을 찾을 수 없습니다.', - 'reconciliation_either_account' => '조정을 제출하려면 소스 계정 또는 대상 계정 중 하나를 제출해야 합니다.', + 'generic_invalid_source' => '이 계정을 소스 계정으로 사용할 수 없습니다.', + 'generic_invalid_destination' => '이 계정을 대상 계정으로 사용할 수 없습니다.', - 'generic_invalid_source' => '이 계정을 소스 계정으로 사용할 수 없습니다.', - 'generic_invalid_destination' => '이 계정을 대상 계정으로 사용할 수 없습니다.', + 'generic_no_source' => '소스 계정 정보를 제출하거나 거래 저널 ID를 제출해야 합니다.', + 'generic_no_destination' => '대상 계정 정보를 제출하거나 거래 저널 ID를 제출해야 합니다.', - 'generic_no_source' => '소스 계정 정보를 제출하거나 거래 저널 ID를 제출해야 합니다.', - 'generic_no_destination' => '대상 계정 정보를 제출하거나 거래 저널 ID를 제출해야 합니다.', - - 'gte.numeric' => ':attribute의 값은 :value 이상이어야 합니다.', - 'gt.numeric' => ':attribute의 값은 :value보다 커야 합니다.', - 'gte.file' => ':attribute의 크기는 :value 킬로바이트 이상이어야 합니다.', - 'gte.string' => ':attribute은(는) :value 자 이상이어야 합니다.', - 'gte.array' => ':attribute은(는) :value개 이상이어야합니다.', + 'gte.numeric' => ':attribute의 값은 :value 이상이어야 합니다.', + 'gt.numeric' => ':attribute의 값은 :value보다 커야 합니다.', + 'gte.file' => ':attribute의 크기는 :value 킬로바이트 이상이어야 합니다.', + 'gte.string' => ':attribute은(는) :value 자 이상이어야 합니다.', + 'gte.array' => ':attribute은(는) :value개 이상이어야합니다.', 'amount_required_for_auto_budget' => '금액을 입력하세요.', 'auto_budget_amount_positive' => '금액은 0보다 커야 합니다.', + 'auto_budget_period_mandatory' => '자동 예산 기간은 필수 항목입니다.', // no access to administration: diff --git a/resources/lang/nb_NO/api.php b/resources/lang/nb_NO/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/nb_NO/api.php +++ b/resources/lang/nb_NO/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/nb_NO/auth.php b/resources/lang/nb_NO/auth.php index 3b6a04156b..5eb854eb15 100644 --- a/resources/lang/nb_NO/auth.php +++ b/resources/lang/nb_NO/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Vi kunne ikke finne noen konto som har de oppgitte detaljene.', 'throttle' => 'For mange innloggingsforsøk. Vennligst prøv igjen om :seconds sekunder.', diff --git a/resources/lang/nb_NO/breadcrumbs.php b/resources/lang/nb_NO/breadcrumbs.php index b32dd0e73c..034c920cf3 100644 --- a/resources/lang/nb_NO/breadcrumbs.php +++ b/resources/lang/nb_NO/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Hjem', - 'budgets' => 'Budsjetter', - 'subscriptions' => 'Abonnementer', - 'transactions' => 'Transaksjoner', - 'title_expenses' => 'Utgifter', - 'title_withdrawal' => 'Utgifter', - 'title_revenue' => 'Inntekt', - 'title_deposit' => 'Inntekt', - 'title_transfer' => 'Overføringer', - 'title_transfers' => 'Overføringer', - 'edit_currency' => 'Rediger valuta ":name"', - 'delete_currency' => 'Slett valuta ":name"', - 'newPiggyBank' => 'Lag en ny sparegris', - 'edit_piggyBank' => 'Rediger sparegris ":name"', - 'preferences' => 'Innstillinger', - 'profile' => 'Profil', - 'accounts' => 'Kontoer', - 'changePassword' => 'Endre passord', - 'change_email' => 'Endre din epostadresse', - 'bills' => 'Regninger', - 'newBill' => 'Ny regning', - 'edit_bill' => 'Rediger regning ":name"', - 'delete_bill' => 'Slett regning ":name"', - 'reports' => 'Rapporter', - 'search_result' => 'Søkeresultater for ":query"', - 'withdrawal_list' => 'Utgifter', - 'Withdrawal_list' => 'Utgifter', - 'deposit_list' => 'Inntekter og innskudd', - 'transfer_list' => 'Overføringer', - 'transfers_list' => 'Overføringer', + 'home' => 'Hjem', + 'budgets' => 'Budsjetter', + 'subscriptions' => 'Abonnementer', + 'transactions' => 'Transaksjoner', + 'title_expenses' => 'Utgifter', + 'title_withdrawal' => 'Utgifter', + 'title_revenue' => 'Inntekt', + 'title_deposit' => 'Inntekt', + 'title_transfer' => 'Overføringer', + 'title_transfers' => 'Overføringer', + 'edit_currency' => 'Rediger valuta ":name"', + 'delete_currency' => 'Slett valuta ":name"', + 'newPiggyBank' => 'Lag en ny sparegris', + 'edit_piggyBank' => 'Rediger sparegris ":name"', + 'preferences' => 'Innstillinger', + 'profile' => 'Profil', + 'accounts' => 'Kontoer', + 'changePassword' => 'Endre passord', + 'change_email' => 'Endre din epostadresse', + 'bills' => 'Regninger', + 'newBill' => 'Ny regning', + 'edit_bill' => 'Rediger regning ":name"', + 'delete_bill' => 'Slett regning ":name"', + 'reports' => 'Rapporter', + 'search_result' => 'Søkeresultater for ":query"', + 'withdrawal_list' => 'Utgifter', + 'Withdrawal_list' => 'Utgifter', + 'deposit_list' => 'Inntekter og innskudd', + 'transfer_list' => 'Overføringer', + 'transfers_list' => 'Overføringer', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Avstemminger', 'create_withdrawal' => 'Opprett nytt uttak', 'create_deposit' => 'Opprett nytt innskudd', diff --git a/resources/lang/nb_NO/components.php b/resources/lang/nb_NO/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/nb_NO/components.php +++ b/resources/lang/nb_NO/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nb_NO/config.php b/resources/lang/nb_NO/config.php index f0b7baae40..c92b438025 100644 --- a/resources/lang/nb_NO/config.php +++ b/resources/lang/nb_NO/config.php @@ -31,28 +31,27 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'nb', - 'locale' => 'no, nb, Norsk, nb_NO, nb_NO.utf8, nb_NO.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'nb', + 'locale' => 'no, nb, Norsk, nb_NO, nb_NO.utf8, nb_NO.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, YYYY', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, YYYY', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'MMMM Do, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do CONTEXTREQUEST', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,33 +62,33 @@ CONTEXTREQUEST', * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'do MMMM, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'do MMMM, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Week' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Week' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'kvartal'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Mandag', - 'dow_2' => 'Tirsdag', - 'dow_3' => 'Onsdag', - 'dow_4' => 'Torsdag', - 'dow_5' => 'Fredag', - 'dow_6' => 'Lørdag', - 'dow_7' => 'Søndag', + 'quarter_fns' => "'kvartal'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Mandag', + 'dow_2' => 'Tirsdag', + 'dow_3' => 'Onsdag', + 'dow_4' => 'Torsdag', + 'dow_5' => 'Fredag', + 'dow_6' => 'Lørdag', + 'dow_7' => 'Søndag', ]; /* diff --git a/resources/lang/nb_NO/demo.php b/resources/lang/nb_NO/demo.php index ea7b51948f..a46f2c0f7e 100644 --- a/resources/lang/nb_NO/demo.php +++ b/resources/lang/nb_NO/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nb_NO/email.php b/resources/lang/nb_NO/email.php index b68e1b766f..9e810911f9 100644 --- a/resources/lang/nb_NO/email.php +++ b/resources/lang/nb_NO/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'En testmelding fra Firefly III-installasjonen', 'admin_test_body' => 'Dette er en testmelding fra din Firefly III-instans. Den ble sendt til :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'En invitasjon har blitt opprettet', 'invitation_created_body' => 'Admin bruker ":email" opprettet en brukerinvitasjon til ":invitee. Invitasjonen vil være gyldig i 48 timer.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Tilbakestill passord:', 'registered_doc_link' => 'Dokumentasjon:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'En ny Firefly III versjon er tilgjengelig', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Hvis du foretrekker, kan du også åpne et nytt problem på https://github.com/firefly-ii/firefly-ii/issues.', 'error_stacktrace_below' => 'Hele informasjonen er:', 'error_headers' => 'Følgende headers kan også være relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III har opprettet en ny transaksjon|Firefly III har skapt :count nye transaksjoner', 'new_journals_header' => 'Firefly III har opprettet en transaksjon for deg. Du finner den i din Firefly III installasjon|:Firefly III har laget :count transaksjoner for deg. Du kan finne dem i Firefly III installasjonen:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Regningen din **":name"** avsluttes :date. Dette er **I DAG!**', 'bill_warning_extension_date_zero' => 'Regningen din **":name"** skal forlenges eller annulleres :date. Dette er **I DAG!**', 'bill_warning_please_action' => 'Vennligst gjør de rette tiltakene.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/nb_NO/errors.php b/resources/lang/nb_NO/errors.php index e53e82691d..584d5046dc 100644 --- a/resources/lang/nb_NO/errors.php +++ b/resources/lang/nb_NO/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack Trace', 'more_info' => 'Mer informasjon', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Samle inn mer informasjon i lagring/logger mappen hvor du finner loggfiler. Hvis du kjører Docker, bruk docker logger -f [container].', - 'collect_info_more' => 'Du kan lese mer om innsamling av feilinformasjon i FAQ.', - 'github_help' => 'Få hjelp på GitHub', - 'github_instructions' => 'Du er mer enn velkommen til å åpne et nytt problem på GitHub.', - 'use_search' => 'Bruk søket!', - 'include_info' => 'Inkluder informasjonen fra denne feilsøkingssiden.', - 'tell_more' => 'Si oss mere enn det som sier Whoops!"', - 'include_logs' => 'Inkluder feillogger (se ovenfor).', - 'what_did_you_do' => 'Fortell oss hva du gjorde.', - 'offline_header' => 'Du er sannsynligvis frakoblet', - 'offline_unreachable' => 'Firefly III er ikke tilgjengelig. Enheten er frakoblet eller serveren fungerer ikke.', - 'offline_github' => 'Hvis du er sikker på at både enheten og serveren er online, åpne en sak på GitHub.', - + 'collect_info' => 'Samle inn mer informasjon i lagring/logger mappen hvor du finner loggfiler. Hvis du kjører Docker, bruk docker logger -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Få hjelp på GitHub', + 'github_instructions' => 'Du er mer enn velkommen til å åpne et nytt problem på GitHub.', + 'use_search' => 'Bruk søket!', + 'include_info' => 'Inkluder informasjonen fra denne feilsøkingssiden.', + 'tell_more' => 'Si oss mere enn det som sier Whoops!"', + 'include_logs' => 'Inkluder feillogger (se ovenfor).', + 'what_did_you_do' => 'Fortell oss hva du gjorde.', + 'offline_header' => 'Du er sannsynligvis frakoblet', + 'offline_unreachable' => 'Firefly III er ikke tilgjengelig. Enheten er frakoblet eller serveren fungerer ikke.', + 'offline_github' => 'Hvis du er sikker på at både enheten og serveren er online, åpne en sak på GitHub.', ]; diff --git a/resources/lang/nb_NO/firefly.php b/resources/lang/nb_NO/firefly.php index d04d7f8180..c139f09d63 100644 --- a/resources/lang/nb_NO/firefly.php +++ b/resources/lang/nb_NO/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Lukk', - 'actions' => 'Handlinger', - 'edit' => 'Rediger', - 'delete' => 'Slett', - 'split' => 'Del opp', - 'single_split' => 'Del opp', - 'clone' => 'Klon', - 'confirm_action' => 'Bekreft handling', - 'last_seven_days' => 'Syv siste dager', - 'last_thirty_days' => 'Tredve siste dager', - 'last_180_days' => 'Siste 180 dager', - 'month_to_date' => 'Måned til dato', - 'year_to_date' => 'År til dato', - 'YTD' => 'Hittil i år', - 'welcome_back' => 'Hvordan går det?', - 'everything' => 'Alt', - 'today' => 'i dag', - 'customRange' => 'Egendefinert utvalg', - 'date_range' => 'Datointervall', - 'apply' => 'Bruk', - 'select_date' => 'Velg dato..', - 'cancel' => 'Avbryt', - 'from' => 'Fra', - 'to' => 'Til', - 'structure' => 'Struktur', - 'help_translating' => 'Denne hjelpeteksten er ikke tilgjengelig i ditt språk. Vil du hjelpe å oversette?', - 'showEverything' => 'Vis alt', - 'never' => 'Aldri', - 'no_results_for_empty_search' => 'Søket ditt var tomt, så ingenting ble funnet.', - 'removed_amount' => 'Fjernet :amount', - 'added_amount' => 'La til :amount', - 'asset_account_role_help' => 'Eventuelle ekstra alternativer som følge av ditt valg kan settes senere.', - 'Opening balance' => 'Startsaldo', - 'create_new_stuff' => 'Lag nye ting', - 'new_withdrawal' => 'Nytt uttak', - 'create_new_transaction' => 'Opprett ny transaksjon', - 'sidebar_frontpage_create' => 'Opprett', - 'new_transaction' => 'Ny transaksjon', - 'no_rules_for_bill' => 'Denne regningen har ingen regler knyttet til den.', - 'go_to_asset_accounts' => 'Se aktivakontoene dine', - 'go_to_budgets' => 'Gå til budsjettene dine', - 'go_to_withdrawals' => 'Gå til uttakene dine', - 'clones_journal_x' => 'Denne transaksjonen er en klone av ":description" (#:id)', - 'go_to_categories' => 'Gå til kategoriene dine', - 'go_to_bills' => 'Gå til regningene dine', - 'go_to_expense_accounts' => 'Se utgiftskontoene dine', - 'go_to_revenue_accounts' => 'Se inntektskontoene dine', - 'go_to_piggies' => 'Gå til sparegrisene dine', - 'new_deposit' => 'Nytt innskudd', - 'new_transfer' => 'Ny overføring', - 'new_transfers' => 'Ny overføring', - 'new_asset_account' => 'Ny aktivakonto', - 'new_expense_account' => 'Ny utgiftskonto', - 'new_revenue_account' => 'Ny inntektskonto', - 'new_liabilities_account' => 'Ny gjeld', - 'new_budget' => 'Nytt budsjett', - 'new_bill' => 'Ny regning', - 'block_account_logout' => 'Du har blitt logget ut. Blokkerte kontoer kan ikke bruke dette nettstedet. Har du registrert deg med en gyldig e-postadresse?', - 'flash_success' => 'Suksess!', - 'flash_info' => 'Melding', - 'flash_warning' => 'Advarsel!', - 'flash_error' => 'Feil!', - 'flash_danger' => 'Fare!', - 'flash_info_multiple' => 'Det finnes én melding | Det finnes :count meldinger', - 'flash_error_multiple' => 'Det er én feil | Det er :count feil', - 'net_worth' => 'Formue', - 'help_for_this_page' => 'Hjelp for denne siden', - 'help_for_this_page_body' => 'Du finner mer informasjon om denne siden i dokumentasjonen.', - 'two_factor_welcome' => 'Hallo!', - 'two_factor_enter_code' => 'Vennligst skriv inn tofaktorautentiseringskoden for å fortsette. Appen på telefonen kan generere den for deg.', - 'two_factor_code_here' => 'Skriv koden her', - 'two_factor_title' => 'To-faktor autentisering', - 'authenticate' => 'Autentisere', - 'two_factor_forgot_title' => 'Mistet tofaktorautentisering', - 'two_factor_forgot' => 'Jeg har glemt/mistet min tofaktor-ting.', - 'two_factor_lost_header' => 'Mistet tofaktorautentisering?', - 'two_factor_lost_intro' => 'Hvis du også har mistet sikkerhetskodene din, har du dårlig hell. Noe du ikke kan fikse fra webgrensesnittet. Du har to valg.', - 'two_factor_lost_fix_self' => 'Hvis du kjører din egen instans av Firefly III, les dette innlegget i FAQ for instruksjoner.', - 'two_factor_lost_fix_owner' => 'Ellers sender du e-postadressen eieren, :site_owner og ber vedkommende om å tilbakestille tofaktorautentiseringen din.', - 'mfa_backup_code' => 'Du har brukt en sikkerhetskode for å logge inn i Firefly III. Den kan ikke brukes igjen, så kryss den fra listen din.', - 'pref_two_factor_new_backup_codes' => 'Få nye sikkerhetskoder', - 'pref_two_factor_backup_code_count' => 'Du har :count gyldige backup-koder. You have :count valid backup koder.', - '2fa_i_have_them' => 'Jeg lagret dem!', - 'warning_much_data' => ':days dager med data kan ta litt tid å laste.', - 'registered' => 'Registreringen var vellykket!', - 'Default asset account' => 'Standard aktivakonto', - 'no_budget_pointer' => 'Det ser ikke ut til at du har noen budsjetter ennå. Du bør opprette noen på budsjett-siden. Budsjetter kan hjelpe deg med å holde oversikt over utgifter.', - 'no_bill_pointer' => 'Det ser ut til at du ikke har noen regninger ennå. Du bør opprette noen på regninger-side. Regninger kan hjelpe deg med å holde oversikt over utgifter.', - 'Savings account' => 'Sparekonto', - 'Credit card' => 'Kredittkort', - 'source_accounts' => 'Kilde konto|Kildekontoer', - 'destination_accounts' => 'Destinasjonskonto(utgiftskonto)|Destinasjonskontoer', - 'user_id_is' => 'Din bruker-ID er :user', - 'field_supports_markdown' => 'Dette feltet støtter Markdown.', - 'need_more_help' => 'Hvis du trenger mer hjelp med å bruke Firefly III, vennligst opprett en sak på Github.', - 'reenable_intro_text' => 'Du kan også reaktivere introduksjonsveiledningen.', - 'intro_boxes_after_refresh' => 'Innføringsboksene vil dukke opp igjen når du laster siden på nytt.', - 'show_all_no_filter' => 'Vis alle transaksjoner uten å gruppere dem etter dato.', - 'expenses_by_category' => 'Utgifter etter kategori', - 'expenses_by_budget' => 'Utgifter etter budsjett', - 'income_by_category' => 'Inntekt etter kategori', - 'expenses_by_asset_account' => 'Utgifter etter aktivakonto', - 'expenses_by_expense_account' => 'Utgifter etter utgiftskonto', - 'cannot_redirect_to_account' => 'Firefly III kan ikke videresende deg til riktig side. Beklager.', - 'sum_of_expenses' => 'Sum av utgifter', - 'sum_of_income' => 'Sum av inntekt', - 'liabilities' => 'Gjeld', - 'spent_in_specific_budget' => 'Brukt i budsjett ":budget"', - 'spent_in_specific_double' => 'Brukt i konto ":account', - 'earned_in_specific_double' => 'Opptjent i konto ":account', - 'source_account' => 'Kildekonto', - 'source_account_reconciliation' => 'Du kan ikke redigere kildekontoen for en avstemmingstransaksjon.', - 'destination_account' => 'Destinasjonskonto', - 'destination_account_reconciliation' => 'Du kan ikke redigere kildekontoen for en avstemmingstransaksjon.', - 'sum_of_expenses_in_budget' => 'Brukt totalt i budsjett ":budget"', - 'left_in_budget_limit' => 'Igjen å bruke i følge budsjett', - 'current_period' => 'Nåværende periode', - 'show_the_current_period_and_overview' => 'Vis gjeldende periode og oversikt', - 'pref_languages_locale' => 'For at et annet språk enn engelsk skal fungere skikkelig, må operativsystemet ditt være utstyrt med riktig lokalinformasjon. Hvis dette ikke er på plass, kan valutadata, datoer og beløp bli vist feil.', - 'budget_in_period' => 'Alle transaksjoner for budsjett ":name" mellom :start og :end i :currency', - 'chart_budget_in_period' => 'Diagram for alle transaksjoner for budsjett ":name" mellom :start og :end i :currency', - 'chart_budget_in_period_only_currency' => 'Beløpet du budsjetterte var i :currency, så dette diagrammet vil bare vise transaksjoner i :currency.', - 'chart_account_in_period' => 'Diagram for alle transaksjoner for konto ":name" (:balance) mellom :start og :end', - 'chart_category_in_period' => 'Diagram for alle transaksjoner for kategori ":name" mellom :start og :end', - 'chart_category_all' => 'Graf over alle transaksjoner for kategori ":name"', - 'clone_withdrawal' => 'Klone dette uttaket', - 'clone_deposit' => 'Klone dette innskuddet', - 'clone_transfer' => 'Klone denne overføringen', - 'multi_select_no_selection' => 'Ingen valgt', - 'multi_select_select_all' => 'Velg alle', - 'multi_select_n_selected' => 'valgt', - 'multi_select_all_selected' => 'Alle valgte', - 'multi_select_filter_placeholder' => 'Finn..', - 'intro_next_label' => 'Neste', - 'intro_prev_label' => 'Forrige', - 'intro_skip_label' => 'Hopp over', - 'intro_done_label' => 'Ferdig', - 'between_dates_breadcrumb' => 'Mellom :start og :end', - 'all_journals_without_budget' => 'Alle transaksjoner uten budsjett', - 'journals_without_budget' => 'Transaksjoner uten budsjett', - 'all_journals_without_category' => 'Alle ukategoriserte transaksjoner', - 'journals_without_category' => 'Ukategoriserte transaksjoner', - 'all_journals_for_account' => 'Alle transaksjoner for konto :name', - 'chart_all_journals_for_account' => 'Graf over alle transaksjoner for konto :name', - 'journals_in_period_for_account' => 'Alle transaksjoner for konto :name mellom :start og :end', - 'journals_in_period_for_account_js' => 'Alle transaksjoner for konto {title} mellom {start} og {end}', - 'transferred' => 'Overført', - 'all_withdrawal' => 'Alle utgifter', - 'all_transactions' => 'Alle transaksjoner', - 'title_withdrawal_between' => 'Alle utgifter mellom :start og :end', - 'all_deposit' => 'Alle inntekter', - 'title_deposit_between' => 'Alle inntekter mellom :start og :end', - 'all_transfers' => 'Alle overføringer', - 'title_transfers_between' => 'Alle overføringer mellom :start og :end', - 'all_transfer' => 'Alle overføringer', - 'all_journals_for_tag' => 'Alle transaksjoner for tagg ":tag"', - 'title_transfer_between' => 'Alle overføringer mellom :start og :end', - 'all_journals_for_category' => 'Alle transaksjoner for kategori :name', - 'all_journals_for_budget' => 'Alle transaksjoner for budsjett :name', - 'chart_all_journals_for_budget' => 'Graf over alle transaksjoner for budsjett :name', - 'journals_in_period_for_category' => 'Alle transaksjoner for kategori :name mellom :start og :end', - 'journals_in_period_for_tag' => 'Alle transaksjoner for tagg :tag mellom :start og :end', - 'not_available_demo_user' => 'Funksjonen du prøver å få tilgang til, er ikke tilgjengelig for demobrukere.', - 'exchange_rate_instructions' => 'Aktivakonto "@name" godtar kun transaksjoner i @native_currency. Hvis du ønsker å bruke @foreign_currency i stedet, må du passe på at beløpet i @native_currency også er satt:', - 'transfer_exchange_rate_instructions' => 'Kildekonto "@source_name" godtar kun transaksjoner i @source_currency. Destinasjonskonto "@dest_name" aksepterer bare transaksjoner i @dest_currency. Du må angi overført beløp riktig i begge valutaene.', - 'transaction_data' => 'Transaksjonsdata', - 'invalid_server_configuration' => 'Ugyldig serverkonfigurasjon', - 'invalid_locale_settings' => 'Firefly III kan ikke formatere pengebeløp fordi serveren din mangler de nødvendige pakkene. Se følgende instruksjoner for hvordan du setter opp dette.', - 'quickswitch' => 'Hurtigbryter', - 'sign_in_to_start' => 'Logg inn for å starte økten', - 'sign_in' => 'Logg inn', - 'register_new_account' => 'Registrer en ny konto', - 'forgot_my_password' => 'Jeg har glemt passordet mitt', - 'problems_with_input' => 'Det var noen problemer med utfyllingen din.', - 'reset_password' => 'Tilbakestill passordet ditt', - 'button_reset_password' => 'Tilbakestill passord', - 'reset_button' => 'Tilbakestill', - 'want_to_login' => 'Jeg vil logge inn', - 'login_page_title' => 'Innlogging til Firefly III', - 'register_page_title' => 'Registrer deg på Firefly III', - 'forgot_pw_page_title' => 'Glemt passord for Firefly III', - 'reset_pw_page_title' => 'Nullstill passord for Firefly III', - 'cannot_reset_demo_user' => 'Du kan ikke nustille passordet til demo bruker.', - 'no_att_demo_user' => 'Demo brukeren kan ikke laste opp vedlegg.', - 'button_register' => 'Registrer', - 'authorization' => 'Autorisasjon', - 'active_bills_only' => 'kun aktive regninger', - 'active_bills_only_total' => 'alle aktive regninger', - 'active_exp_bills_only' => 'kun aktive og forventede regninger', - 'active_exp_bills_only_total' => 'kun aktive og forventede regninger', - 'per_period_sum_1D' => 'Forventede daglige kostnader', - 'per_period_sum_1W' => 'Forventede ukentlige kostnader', - 'per_period_sum_1M' => 'Forventede månedlige kostnader', - 'per_period_sum_3M' => 'Forventede kvartalskostnader', - 'per_period_sum_6M' => 'Forventede halvårlige kostnader', - 'per_period_sum_1Y' => 'Forventede årlige kostnader', - 'average_per_bill' => 'gjennomsnitt per regning', - 'expected_total' => 'forventet totalt', - 'reconciliation_account_name' => ':name avstemming (:currency)', - 'saved' => 'Lagret', - 'advanced_options' => 'Avanserte innstillinger', - 'advanced_options_explain' => 'Noen sider i Firefly III har gjemt avanserte alternativer bak denne knappen. Denne siden har ikke noe fancy, men sjekk ut de andre!', - 'here_be_dragons' => 'Her finnes drager', + 'close' => 'Lukk', + 'actions' => 'Handlinger', + 'edit' => 'Rediger', + 'delete' => 'Slett', + 'split' => 'Del opp', + 'single_split' => 'Del opp', + 'clone' => 'Klon', + 'clone_and_edit' => 'Klon og rediger', + 'confirm_action' => 'Bekreft handling', + 'last_seven_days' => 'Syv siste dager', + 'last_thirty_days' => 'Tredve siste dager', + 'last_180_days' => 'Siste 180 dager', + 'month_to_date' => 'Måned til dato', + 'year_to_date' => 'År til dato', + 'YTD' => 'Hittil i år', + 'welcome_back' => 'Hvordan går det?', + 'everything' => 'Alt', + 'today' => 'i dag', + 'customRange' => 'Egendefinert utvalg', + 'date_range' => 'Datointervall', + 'apply' => 'Bruk', + 'select_date' => 'Velg dato..', + 'cancel' => 'Avbryt', + 'from' => 'Fra', + 'to' => 'Til', + 'structure' => 'Struktur', + 'help_translating' => 'Denne hjelpeteksten er ikke tilgjengelig i ditt språk. Vil du hjelpe å oversette?', + 'showEverything' => 'Vis alt', + 'never' => 'Aldri', + 'no_results_for_empty_search' => 'Søket ditt var tomt, så ingenting ble funnet.', + 'removed_amount' => 'Fjernet :amount', + 'added_amount' => 'La til :amount', + 'asset_account_role_help' => 'Eventuelle ekstra alternativer som følge av ditt valg kan settes senere.', + 'Opening balance' => 'Startsaldo', + 'create_new_stuff' => 'Lag nye ting', + 'new_withdrawal' => 'Nytt uttak', + 'create_new_transaction' => 'Opprett ny transaksjon', + 'sidebar_frontpage_create' => 'Opprett', + 'new_transaction' => 'Ny transaksjon', + 'no_rules_for_bill' => 'Denne regningen har ingen regler knyttet til den.', + 'go_to_asset_accounts' => 'Se aktivakontoene dine', + 'go_to_budgets' => 'Gå til budsjettene dine', + 'go_to_withdrawals' => 'Gå til uttakene dine', + 'clones_journal_x' => 'Denne transaksjonen er en klone av ":description" (#:id)', + 'go_to_categories' => 'Gå til kategoriene dine', + 'go_to_bills' => 'Gå til regningene dine', + 'go_to_expense_accounts' => 'Se utgiftskontoene dine', + 'go_to_revenue_accounts' => 'Se inntektskontoene dine', + 'go_to_piggies' => 'Gå til sparegrisene dine', + 'new_deposit' => 'Nytt innskudd', + 'new_transfer' => 'Ny overføring', + 'new_transfers' => 'Ny overføring', + 'new_asset_account' => 'Ny aktivakonto', + 'new_expense_account' => 'Ny utgiftskonto', + 'new_revenue_account' => 'Ny inntektskonto', + 'new_liabilities_account' => 'Ny gjeld', + 'new_budget' => 'Nytt budsjett', + 'new_bill' => 'Ny regning', + 'block_account_logout' => 'Du har blitt logget ut. Blokkerte kontoer kan ikke bruke dette nettstedet. Har du registrert deg med en gyldig e-postadresse?', + 'flash_success' => 'Suksess!', + 'flash_info' => 'Melding', + 'flash_warning' => 'Advarsel!', + 'flash_error' => 'Feil!', + 'flash_danger' => 'Fare!', + 'flash_info_multiple' => 'Det finnes én melding | Det finnes :count meldinger', + 'flash_error_multiple' => 'Det er én feil | Det er :count feil', + 'net_worth' => 'Formue', + 'help_for_this_page' => 'Hjelp for denne siden', + 'help_for_this_page_body' => 'Du finner mer informasjon om denne siden i dokumentasjonen.', + 'two_factor_welcome' => 'Hallo!', + 'two_factor_enter_code' => 'Vennligst skriv inn tofaktorautentiseringskoden for å fortsette. Appen på telefonen kan generere den for deg.', + 'two_factor_code_here' => 'Skriv koden her', + 'two_factor_title' => 'To-faktor autentisering', + 'authenticate' => 'Autentisere', + 'two_factor_forgot_title' => 'Mistet tofaktorautentisering', + 'two_factor_forgot' => 'Jeg har glemt/mistet min tofaktor-ting.', + 'two_factor_lost_header' => 'Mistet tofaktorautentisering?', + 'two_factor_lost_intro' => 'Hvis du også har mistet sikkerhetskodene din, har du dårlig hell. Noe du ikke kan fikse fra webgrensesnittet. Du har to valg.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner og ber vedkommende om å tilbakestille tofaktorautentiseringen din.', + 'mfa_backup_code' => 'Du har brukt en sikkerhetskode for å logge inn i Firefly III. Den kan ikke brukes igjen, så kryss den fra listen din.', + 'pref_two_factor_new_backup_codes' => 'Få nye sikkerhetskoder', + 'pref_two_factor_backup_code_count' => 'Du har :count gyldige backup-koder. You have :count valid backup koder.', + '2fa_i_have_them' => 'Jeg lagret dem!', + 'warning_much_data' => ':days dager med data kan ta litt tid å laste.', + 'registered' => 'Registreringen var vellykket!', + 'Default asset account' => 'Standard aktivakonto', + 'no_budget_pointer' => 'Det ser ikke ut til at du har noen budsjetter ennå. Du bør opprette noen på budsjett-siden. Budsjetter kan hjelpe deg med å holde oversikt over utgifter.', + 'no_bill_pointer' => 'Det ser ut til at du ikke har noen regninger ennå. Du bør opprette noen på regninger-side. Regninger kan hjelpe deg med å holde oversikt over utgifter.', + 'Savings account' => 'Sparekonto', + 'Credit card' => 'Kredittkort', + 'source_accounts' => 'Kilde konto|Kildekontoer', + 'destination_accounts' => 'Destinasjonskonto(utgiftskonto)|Destinasjonskontoer', + 'user_id_is' => 'Din bruker-ID er :user', + 'field_supports_markdown' => 'Dette feltet støtter Markdown.', + 'need_more_help' => 'Hvis du trenger mer hjelp med å bruke Firefly III, vennligst opprett en sak på Github.', + 'reenable_intro_text' => 'Du kan også reaktivere introduksjonsveiledningen.', + 'intro_boxes_after_refresh' => 'Innføringsboksene vil dukke opp igjen når du laster siden på nytt.', + 'show_all_no_filter' => 'Vis alle transaksjoner uten å gruppere dem etter dato.', + 'expenses_by_category' => 'Utgifter etter kategori', + 'expenses_by_budget' => 'Utgifter etter budsjett', + 'income_by_category' => 'Inntekt etter kategori', + 'expenses_by_asset_account' => 'Utgifter etter aktivakonto', + 'expenses_by_expense_account' => 'Utgifter etter utgiftskonto', + 'cannot_redirect_to_account' => 'Firefly III kan ikke videresende deg til riktig side. Beklager.', + 'sum_of_expenses' => 'Sum av utgifter', + 'sum_of_income' => 'Sum av inntekt', + 'liabilities' => 'Gjeld', + 'spent_in_specific_budget' => 'Brukt i budsjett ":budget"', + 'spent_in_specific_double' => 'Brukt i konto ":account', + 'earned_in_specific_double' => 'Opptjent i konto ":account', + 'source_account' => 'Kildekonto', + 'source_account_reconciliation' => 'Du kan ikke redigere kildekontoen for en avstemmingstransaksjon.', + 'destination_account' => 'Destinasjonskonto', + 'destination_account_reconciliation' => 'Du kan ikke redigere kildekontoen for en avstemmingstransaksjon.', + 'sum_of_expenses_in_budget' => 'Brukt totalt i budsjett ":budget"', + 'left_in_budget_limit' => 'Igjen å bruke i følge budsjett', + 'current_period' => 'Nåværende periode', + 'show_the_current_period_and_overview' => 'Vis gjeldende periode og oversikt', + 'pref_languages_locale' => 'For at et annet språk enn engelsk skal fungere skikkelig, må operativsystemet ditt være utstyrt med riktig lokalinformasjon. Hvis dette ikke er på plass, kan valutadata, datoer og beløp bli vist feil.', + 'budget_in_period' => 'Alle transaksjoner for budsjett ":name" mellom :start og :end i :currency', + 'chart_budget_in_period' => 'Diagram for alle transaksjoner for budsjett ":name" mellom :start og :end i :currency', + 'chart_budget_in_period_only_currency' => 'Beløpet du budsjetterte var i :currency, så dette diagrammet vil bare vise transaksjoner i :currency.', + 'chart_account_in_period' => 'Diagram for alle transaksjoner for konto ":name" (:balance) mellom :start og :end', + 'chart_category_in_period' => 'Diagram for alle transaksjoner for kategori ":name" mellom :start og :end', + 'chart_category_all' => 'Graf over alle transaksjoner for kategori ":name"', + 'clone_withdrawal' => 'Klone dette uttaket', + 'clone_deposit' => 'Klone dette innskuddet', + 'clone_transfer' => 'Klone denne overføringen', + 'multi_select_no_selection' => 'Ingen valgt', + 'multi_select_select_all' => 'Velg alle', + 'multi_select_n_selected' => 'valgt', + 'multi_select_all_selected' => 'Alle valgte', + 'multi_select_filter_placeholder' => 'Finn..', + 'intro_next_label' => 'Neste', + 'intro_prev_label' => 'Forrige', + 'intro_skip_label' => 'Hopp over', + 'intro_done_label' => 'Ferdig', + 'between_dates_breadcrumb' => 'Mellom :start og :end', + 'all_journals_without_budget' => 'Alle transaksjoner uten budsjett', + 'journals_without_budget' => 'Transaksjoner uten budsjett', + 'all_journals_without_category' => 'Alle ukategoriserte transaksjoner', + 'journals_without_category' => 'Ukategoriserte transaksjoner', + 'all_journals_for_account' => 'Alle transaksjoner for konto :name', + 'chart_all_journals_for_account' => 'Graf over alle transaksjoner for konto :name', + 'journals_in_period_for_account' => 'Alle transaksjoner for konto :name mellom :start og :end', + 'journals_in_period_for_account_js' => 'Alle transaksjoner for konto {title} mellom {start} og {end}', + 'transferred' => 'Overført', + 'all_withdrawal' => 'Alle utgifter', + 'all_transactions' => 'Alle transaksjoner', + 'title_withdrawal_between' => 'Alle utgifter mellom :start og :end', + 'all_deposit' => 'Alle inntekter', + 'title_deposit_between' => 'Alle inntekter mellom :start og :end', + 'all_transfers' => 'Alle overføringer', + 'title_transfers_between' => 'Alle overføringer mellom :start og :end', + 'all_transfer' => 'Alle overføringer', + 'all_journals_for_tag' => 'Alle transaksjoner for tagg ":tag"', + 'title_transfer_between' => 'Alle overføringer mellom :start og :end', + 'all_journals_for_category' => 'Alle transaksjoner for kategori :name', + 'all_journals_for_budget' => 'Alle transaksjoner for budsjett :name', + 'chart_all_journals_for_budget' => 'Graf over alle transaksjoner for budsjett :name', + 'journals_in_period_for_category' => 'Alle transaksjoner for kategori :name mellom :start og :end', + 'journals_in_period_for_tag' => 'Alle transaksjoner for tagg :tag mellom :start og :end', + 'not_available_demo_user' => 'Funksjonen du prøver å få tilgang til, er ikke tilgjengelig for demobrukere.', + 'exchange_rate_instructions' => 'Aktivakonto "@name" godtar kun transaksjoner i @native_currency. Hvis du ønsker å bruke @foreign_currency i stedet, må du passe på at beløpet i @native_currency også er satt:', + 'transfer_exchange_rate_instructions' => 'Kildekonto "@source_name" godtar kun transaksjoner i @source_currency. Destinasjonskonto "@dest_name" aksepterer bare transaksjoner i @dest_currency. Du må angi overført beløp riktig i begge valutaene.', + 'transaction_data' => 'Transaksjonsdata', + 'invalid_server_configuration' => 'Ugyldig serverkonfigurasjon', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Hurtigbryter', + 'sign_in_to_start' => 'Logg inn for å starte økten', + 'sign_in' => 'Logg inn', + 'register_new_account' => 'Registrer en ny konto', + 'forgot_my_password' => 'Jeg har glemt passordet mitt', + 'problems_with_input' => 'Det var noen problemer med utfyllingen din.', + 'reset_password' => 'Tilbakestill passordet ditt', + 'button_reset_password' => 'Tilbakestill passord', + 'reset_button' => 'Tilbakestill', + 'want_to_login' => 'Jeg vil logge inn', + 'login_page_title' => 'Innlogging til Firefly III', + 'register_page_title' => 'Registrer deg på Firefly III', + 'forgot_pw_page_title' => 'Glemt passord for Firefly III', + 'reset_pw_page_title' => 'Nullstill passord for Firefly III', + 'cannot_reset_demo_user' => 'Du kan ikke nustille passordet til demo bruker.', + 'no_att_demo_user' => 'Demo brukeren kan ikke laste opp vedlegg.', + 'button_register' => 'Registrer', + 'authorization' => 'Autorisasjon', + 'active_bills_only' => 'kun aktive regninger', + 'active_bills_only_total' => 'alle aktive regninger', + 'active_exp_bills_only' => 'kun aktive og forventede regninger', + 'active_exp_bills_only_total' => 'kun aktive og forventede regninger', + 'per_period_sum_1D' => 'Forventede daglige kostnader', + 'per_period_sum_1W' => 'Forventede ukentlige kostnader', + 'per_period_sum_1M' => 'Forventede månedlige kostnader', + 'per_period_sum_3M' => 'Forventede kvartalskostnader', + 'per_period_sum_6M' => 'Forventede halvårlige kostnader', + 'per_period_sum_1Y' => 'Forventede årlige kostnader', + 'average_per_bill' => 'gjennomsnitt per regning', + 'expected_total' => 'forventet totalt', + 'reconciliation_account_name' => ':name avstemming (:currency)', + 'saved' => 'Lagret', + 'advanced_options' => 'Avanserte innstillinger', + 'advanced_options_explain' => 'Noen sider i Firefly III har gjemt avanserte alternativer bak denne knappen. Denne siden har ikke noe fancy, men sjekk ut de andre!', + 'here_be_dragons' => 'Her finnes drager', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'Ingen Webhook meldinger', - 'webhook_trigger_STORE_TRANSACTION' => 'Etter transaksjons opprettelse', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Etter transaksjons oppdatering', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Etter transaksjons sletting', - 'webhook_response_TRANSACTIONS' => 'Transaksjonsdetaljer', - 'webhook_response_ACCOUNTS' => 'Kontodetaljer', - 'webhook_response_none_NONE' => 'Ingen detaljer', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspiser', - 'create_new_webhook' => 'Opprett ny Webhook', - 'webhooks_create_breadcrumb' => 'Opprett ny Webhook', - 'webhook_trigger_form_help' => 'Hvilken hendelse skal Webhook utløse', - 'webhook_response_form_help' => 'Hva skal Webhook sende til URL.', - 'webhook_delivery_form_help' => 'Hvilket format skal Webhook sende data i.', - 'webhook_active_form_help' => 'Webhook må aktiveres for å virke.', - 'stored_new_webhook' => 'Lagret ny webhook ":title"', - 'delete_webhook' => 'Slett Webhook', - 'deleted_webhook' => 'Slettet Webhook ":title"', - 'edit_webhook' => 'Rediger Webhook ":title"', - 'updated_webhook' => 'Oppdatert Webhook ":title"', - 'edit_webhook_js' => 'Rediger Webhook "{title}"', - 'show_webhook' => 'Webhook «:title»', - 'webhook_was_triggered' => 'Webhook ble trigget på den angitte transaksjonen. Vennligst vent på resultatet.', - 'webhook_messages' => 'Webhook melding', - 'view_message' => 'Vis melding', - 'view_attempts' => 'Vis mislykkede forsøk', - 'message_content_title' => 'Webhook meldingsinnhold', - 'message_content_help' => 'Dette er innholdet av meldingen som ble sendt (eller forsøkt sendt) med denne Webhook.', - 'attempt_content_title' => 'Webhook forsøk', - 'attempt_content_help' => 'Dette er alle mislykkede forsøk på denne webhook-meldingen som sendes til den konfigurerte URL-en. Etter en tid vil Firefly III slutte å prøve.', - 'no_attempts' => 'Det er ingen mislykkede forsøk. Det er god ting!', - 'webhook_attempt_at' => 'Forsøk på {moment}', - 'logs' => 'Logger', - 'response' => 'Respons', - 'visit_webhook_url' => 'Besøk URL til webhook', - 'reset_webhook_secret' => 'Tilbakestill Webhook nøkkel', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") er lagret.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") er oppdatert.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'Ingen Webhook meldinger', + 'webhook_trigger_STORE_TRANSACTION' => 'Etter transaksjons opprettelse', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Etter transaksjons oppdatering', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Etter transaksjons sletting', + 'webhook_response_TRANSACTIONS' => 'Transaksjonsdetaljer', + 'webhook_response_ACCOUNTS' => 'Kontodetaljer', + 'webhook_response_none_NONE' => 'Ingen detaljer', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspiser', + 'create_new_webhook' => 'Opprett ny Webhook', + 'webhooks_create_breadcrumb' => 'Opprett ny Webhook', + 'webhook_trigger_form_help' => 'Hvilken hendelse skal Webhook utløse', + 'webhook_response_form_help' => 'Hva skal Webhook sende til URL.', + 'webhook_delivery_form_help' => 'Hvilket format skal Webhook sende data i.', + 'webhook_active_form_help' => 'Webhook må aktiveres for å virke.', + 'stored_new_webhook' => 'Lagret ny webhook ":title"', + 'delete_webhook' => 'Slett Webhook', + 'deleted_webhook' => 'Slettet Webhook ":title"', + 'edit_webhook' => 'Rediger Webhook ":title"', + 'updated_webhook' => 'Oppdatert Webhook ":title"', + 'edit_webhook_js' => 'Rediger Webhook "{title}"', + 'show_webhook' => 'Webhook «:title»', + 'webhook_was_triggered' => 'Webhook ble trigget på den angitte transaksjonen. Vennligst vent på resultatet.', + 'webhook_messages' => 'Webhook melding', + 'view_message' => 'Vis melding', + 'view_attempts' => 'Vis mislykkede forsøk', + 'message_content_title' => 'Webhook meldingsinnhold', + 'message_content_help' => 'Dette er innholdet av meldingen som ble sendt (eller forsøkt sendt) med denne Webhook.', + 'attempt_content_title' => 'Webhook forsøk', + 'attempt_content_help' => 'Dette er alle mislykkede forsøk på denne webhook-meldingen som sendes til den konfigurerte URL-en. Etter en tid vil Firefly III slutte å prøve.', + 'no_attempts' => 'Det er ingen mislykkede forsøk. Det er god ting!', + 'webhook_attempt_at' => 'Forsøk på {moment}', + 'logs' => 'Logger', + 'response' => 'Respons', + 'visit_webhook_url' => 'Besøk URL til webhook', + 'reset_webhook_secret' => 'Tilbakestill Webhook nøkkel', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") er lagret.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") er oppdatert.', // API access - 'authorization_request' => 'Firefly III v:version autorisasjonsforespørsel', - 'authorization_request_intro' => 'Applikasjon ":client" ber om tilgang til din økonomiske administrasjon. Vil du tillate :client slik at den får tilgang til dine data?', - 'authorization_request_site' => 'Du vil bli omdirigert til :url som da vil gi tilgang til dine Firefly III data.', - 'authorization_request_invalid' => 'Ugyldig adgangsforespørsel. Vennligst ikke følg denne linken igjen.', - 'scopes_will_be_able' => 'Denne applikasjonen vil kunne:', - 'button_authorize' => 'Autoriser', - 'none_in_select_list' => '(ingen)', - 'no_piggy_bank' => '(ingen sparegriser)', - 'name_in_currency' => ':name i :currency', - 'paid_in_currency' => 'Betalt i :currency', - 'unpaid_in_currency' => 'Ubetalt i :currency', - 'is_alpha_warning' => 'Du kjører en ALPHA-versjon. Vær varsom for feil og problemer.', - 'is_beta_warning' => 'Du kjører en BETA-versjon. Vær varsom for bugs og problemer.', - 'all_destination_accounts' => 'Destinasjonskonto', - 'all_source_accounts' => 'Kildekontoer', - 'back_to_index' => 'Tilbake til index', - 'cant_logout_guard' => 'Firefly III kan ikke logge deg ut.', - 'internal_reference' => 'Intern referanse', + 'authorization_request' => 'Firefly III v:version autorisasjonsforespørsel', + 'authorization_request_intro' => 'Applikasjon ":client" ber om tilgang til din økonomiske administrasjon. Vil du tillate :client slik at den får tilgang til dine data?', + 'authorization_request_site' => 'Du vil bli omdirigert til :url som da vil gi tilgang til dine Firefly III data.', + 'authorization_request_invalid' => 'Ugyldig adgangsforespørsel. Vennligst ikke følg denne linken igjen.', + 'scopes_will_be_able' => 'Denne applikasjonen vil kunne:', + 'button_authorize' => 'Autoriser', + 'none_in_select_list' => '(ingen)', + 'no_piggy_bank' => '(ingen sparegriser)', + 'name_in_currency' => ':name i :currency', + 'paid_in_currency' => 'Betalt i :currency', + 'unpaid_in_currency' => 'Ubetalt i :currency', + 'is_alpha_warning' => 'Du kjører en ALPHA-versjon. Vær varsom for feil og problemer.', + 'is_beta_warning' => 'Du kjører en BETA-versjon. Vær varsom for bugs og problemer.', + 'all_destination_accounts' => 'Destinasjonskonto', + 'all_source_accounts' => 'Kildekontoer', + 'back_to_index' => 'Tilbake til index', + 'cant_logout_guard' => 'Firefly III kan ikke logge deg ut.', + 'internal_reference' => 'Intern referanse', // check for updates: - 'update_check_title' => 'Se etter oppdateringer', - 'admin_update_check_title' => 'Se etter oppdateringer automatisk', - 'admin_update_check_explain' => 'Firefly III kan sjekke etter oppdateringer automatisk. Når du aktiverer denne innstillingen, vil systemet kontakte Github for å se om en ny versjon av Firefly III er tilgjengelig. Når det er kommet en ny oppdatering, vil du bli varslet. Du kan teste dette varselet ved hjelp av knappen til høyre. Vennligst marker nedenfor hvis du vil at Firefly III skal se etter oppdateringer.', - 'check_for_updates_permission' => 'Firefly III kan se etter oppdateringer, men det trenger din tillatelse til å gjøre det. Gå til -administrasjonen for å velge om denne funksjonen skal aktiveres.', - 'updates_ask_me_later' => 'Spør meg senere', - 'updates_do_not_check' => 'Ikke se etter oppdateringer', - 'updates_enable_check' => 'Aktiver oppdateringssjekk', - 'admin_update_check_now_title' => 'Se etter oppdateringer nå', - 'admin_update_check_now_explain' => 'Hvis du trykker på knappen, vil Firefly III se om din nåværende versjon er den nyeste.', - 'check_for_updates_button' => 'Sjekk nå!', - 'update_new_version_alert' => 'En ny versjon av Firefly III er tilgjengelig. Du kjører :your_version, den nyeste versjonen er :new_version som ble utgitt den :date.', - 'update_version_beta' => 'Dette er en BETA versjon, du kan oppleve problemer.', - 'update_version_alpha' => 'Dette er en ALPHA versjon, du kan oppleve problemer.', - 'update_current_version_alert' => 'Du kjører :version, som er den nyeste tilgjengelige utgivelsen.', - 'update_newer_version_alert' => 'Du kjører :your_version, som er nyere enn den nyeste versjonen, :new_version.', - 'update_check_error' => 'Det oppstod en feil under søk etter oppdatering: :error', - 'unknown_error' => 'Ukjent feil. Beklager det.', - 'just_new_release' => 'En ny versjon er tilgjengelig! Versjon :version ble utgitt :date. Denne utgivelsen er helt ny. Vent gjerne noen dager slik at den nye utgaven er stabil.', - 'disabled_but_check' => 'Du har deaktivert oppdateringssjekk. Ikke glem å oppdatere selv nå og da. Tusen takk!', - 'admin_update_channel_title' => 'Oppdater kanal', - 'admin_update_channel_explain' => 'Firefly III har tre oppdaterings "kanaler" som bestemmer hvor mye du ønsker å ligge foran med hensyn til funksjoner, forbedringer og feil. Bruk beta-kanalen dersom du er eventyrlysten og "alfa" når du liker å leve farlig.', - 'update_channel_stable' => 'Stable. Alt skal fungere som forventet.', - 'update_channel_beta' => 'Beta. Nye funksjoner, men kan ha enkelte programfeil.', - 'update_channel_alpha' => 'Alfa. Vi kaster ting i, og bruker det som fester seg.', + 'update_check_title' => 'Se etter oppdateringer', + 'admin_update_check_title' => 'Se etter oppdateringer automatisk', + 'admin_update_check_explain' => 'Firefly III kan sjekke etter oppdateringer automatisk. Når du aktiverer denne innstillingen, vil systemet kontakte Github for å se om en ny versjon av Firefly III er tilgjengelig. Når det er kommet en ny oppdatering, vil du bli varslet. Du kan teste dette varselet ved hjelp av knappen til høyre. Vennligst marker nedenfor hvis du vil at Firefly III skal se etter oppdateringer.', + 'check_for_updates_permission' => 'Firefly III kan se etter oppdateringer, men det trenger din tillatelse til å gjøre det. Gå til -administrasjonen for å velge om denne funksjonen skal aktiveres.', + 'updates_ask_me_later' => 'Spør meg senere', + 'updates_do_not_check' => 'Ikke se etter oppdateringer', + 'updates_enable_check' => 'Aktiver oppdateringssjekk', + 'admin_update_check_now_title' => 'Se etter oppdateringer nå', + 'admin_update_check_now_explain' => 'Hvis du trykker på knappen, vil Firefly III se om din nåværende versjon er den nyeste.', + 'check_for_updates_button' => 'Sjekk nå!', + 'update_new_version_alert' => 'En ny versjon av Firefly III er tilgjengelig. Du kjører :your_version, den nyeste versjonen er :new_version som ble utgitt den :date.', + 'update_version_beta' => 'Dette er en BETA versjon, du kan oppleve problemer.', + 'update_version_alpha' => 'Dette er en ALPHA versjon, du kan oppleve problemer.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Du kjører :version, som er den nyeste tilgjengelige utgivelsen.', + 'update_newer_version_alert' => 'Du kjører :your_version, som er nyere enn den nyeste versjonen, :new_version.', + 'update_check_error' => 'Det oppstod en feil under søk etter oppdatering: :error', + 'unknown_error' => 'Ukjent feil. Beklager det.', + 'disabled_but_check' => 'Du har deaktivert oppdateringssjekk. Ikke glem å oppdatere selv nå og da. Tusen takk!', + 'admin_update_channel_title' => 'Oppdater kanal', + 'admin_update_channel_explain' => 'Firefly III har tre oppdaterings "kanaler" som bestemmer hvor mye du ønsker å ligge foran med hensyn til funksjoner, forbedringer og feil. Bruk beta-kanalen dersom du er eventyrlysten og "alfa" når du liker å leve farlig.', + 'update_channel_stable' => 'Stable. Alt skal fungere som forventet.', + 'update_channel_beta' => 'Beta. Nye funksjoner, men kan ha enkelte programfeil.', + 'update_channel_alpha' => 'Alfa. Vi kaster ting i, og bruker det som fester seg.', // search - 'search' => 'Søk', - 'search_query' => 'Spørring', - 'search_found_transactions' => 'Firefly III fant :count transaksjon på :time sekunder|Firefly III fant :count transaksjoner på :time sekunder.', - 'search_found_more_transactions' => 'Firefly III fant mer enn :count transaksjoner på :time sekunder.', - 'search_for_query' => 'Firefly III leter etter transaksjoner med disse ordene: :query', - 'invalid_operators_list' => 'Disse søkeparametrene er ikke gyldige og ble ignorert.', + 'search' => 'Søk', + 'search_query' => 'Spørring', + 'search_found_transactions' => 'Firefly III fant :count transaksjon på :time sekunder|Firefly III fant :count transaksjoner på :time sekunder.', + 'search_found_more_transactions' => 'Firefly III fant mer enn :count transaksjoner på :time sekunder.', + 'search_for_query' => 'Firefly III leter etter transaksjoner med disse ordene: :query', + 'invalid_operators_list' => 'Disse søkeparametrene er ikke gyldige og ble ignorert.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaksjons dato er ":value"', 'search_modifier_not_date_on' => 'Transaksjonsdato er ikke ":value"', 'search_modifier_reconciled' => 'Transaksjonen er avstemt', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Transaksjonstype er ":value"', 'search_modifier_not_transaction_type' => 'Transaksjonstype er ikke ":value"', 'search_modifier_tag_is' => 'Taggen er ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'Ingen tagg er ":value"', 'search_modifier_date_on_year' => 'Transaksjonen er i år ":value"', 'search_modifier_not_date_on_year' => 'Transaksjonen er ikke i året ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Transaksjonen er i eller etter måned ":value"', 'search_modifier_date_after_day' => 'Transaksjonen er etter eller på dagen i måned ":value"', - // new 'search_modifier_tag_is_not' => 'Ingen tagg er ":value"', 'search_modifier_not_tag_is_not' => 'Taggen er ":value"', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => 'Lag ny regel fra søk', 'rule_from_search_words' => 'Regelverksmotoren har problemer med søkeparameteren ":string". Den foreslåtte regeln som passer til ditt søk kan gi et annet resultat. Vennligst kontroller reglene nøye.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'De følgende modifikatorer er lagt til søket i tillegg:', 'general_search_error' => 'Det oppstod en feil under søking. Vennligst sjekk loggfilene for mer informasjon.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Ikke', 'cannot_fire_inactive_rules' => 'Du kan ikke kjøre inaktive regler.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Regler', 'rule_name' => 'Navn på regel', 'rule_triggers' => 'Regel utløses når', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Når en transaksjon er oppdatert', 'rule_trigger_user_action' => 'Brukerhandling er ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Kildekonto navn starter med..', 'rule_trigger_source_account_starts' => 'Kildenavnet starter med ":trigger_value"', @@ -864,12 +868,12 @@ return [ 'rule_trigger_transaction_type' => 'Transaksjonen er av typen ":trigger_value"', 'rule_trigger_category_is_choice' => 'Kategori er..', 'rule_trigger_category_is' => 'Kategori er ":trigger_value"', - 'rule_trigger_amount_less_choice' => 'Amount is less than or equal to ..', - 'rule_trigger_amount_less' => 'Amount is less than or equal to :trigger_value', + 'rule_trigger_amount_less_choice' => 'Beløpet er mindre enn eller lik ..', + 'rule_trigger_amount_less' => 'Beløpet er mindre enn eller lik :trigger_value', 'rule_trigger_amount_is_choice' => 'Beløpet er..', 'rule_trigger_amount_is' => 'Beløpet er :trigger_value', - 'rule_trigger_amount_more_choice' => 'Amount is more than or equal to..', - 'rule_trigger_amount_more' => 'Amount is more than or equal to :trigger_value', + 'rule_trigger_amount_more_choice' => 'Beløpet er mer enn eller lik..', + 'rule_trigger_amount_more' => 'Beløpet er mer enn eller lik :trigger_value', 'rule_trigger_description_starts_choice' => 'Beskrivelse starter med..', 'rule_trigger_description_starts' => 'Beskrivelse starter med ":trigger_value"', 'rule_trigger_description_ends_choice' => 'Beskrivelse slutter med..', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Budsjett er ":trigger_value"', 'rule_trigger_tag_is_choice' => '(En) tagg er..', 'rule_trigger_tag_is' => 'Enhver tag er ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Transaksjonsvaluta er..', 'rule_trigger_currency_is' => 'Transaksjonsvaluta er ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Transaksjonens fremmed valuta er..', @@ -934,14 +944,14 @@ return [ 'rule_trigger_internal_reference_is' => 'Ekstern referanse er ":trigger_value"', 'rule_trigger_journal_id_choice' => 'Transaksjonens journal ID er..', 'rule_trigger_journal_id' => 'Transaksjonens journal ID er ":trigger_value"', - 'rule_trigger_any_external_url' => 'Transaction has an (any) external URL', - 'rule_trigger_any_external_url_choice' => 'Transaction has an (any) external URL', - 'rule_trigger_any_external_id' => 'Transaction has an (any) external ID', - 'rule_trigger_any_external_id_choice' => 'Transaction has an (any) external ID', + 'rule_trigger_any_external_url' => 'Transaksjonen har en ekstern URL', + 'rule_trigger_any_external_url_choice' => 'Transaksjonen har en ekstern URL', + 'rule_trigger_any_external_id' => 'Transaksjonen har en ekstern ID', + 'rule_trigger_any_external_id_choice' => 'Transaksjonen har en ekstern ID', 'rule_trigger_no_external_url_choice' => 'Transaksjonen har ingen ekstern URL', 'rule_trigger_no_external_url' => 'Transaksjonen har ingen ekstern URL', - 'rule_trigger_no_external_id_choice' => 'Transaction has no external ID', - 'rule_trigger_no_external_id' => 'Transaction has no external ID', + 'rule_trigger_no_external_id_choice' => 'Transaksjonen har ingen ekstern ID', + 'rule_trigger_no_external_id' => 'Transaksjonen har ingen ekstern ID', 'rule_trigger_id_choice' => 'Transaksjons-ID er', 'rule_trigger_id' => 'Transaksjons ID er ":trigger_value"', 'rule_trigger_sepa_ct_is_choice' => 'SEPA CT er..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaksjonen eksisterer ikke', 'rule_trigger_not_has_attachments' => 'Transaksjonen har ingen vedlegg', 'rule_trigger_not_has_any_category' => 'Transaksjonen har ingen kategori', - 'rule_trigger_not_has_any_budget' => 'Transaksjonen har ingen kategori', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaksjonen har ingen regninger', 'rule_trigger_not_has_any_tag' => 'Transaksjonen har ingen tagger', 'rule_trigger_not_any_notes' => 'Transaksjonen har ingen notater', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Målkonto er ikke en kontantkonto', 'rule_trigger_not_account_is_cash' => 'Ingen konto er en kontantkonto', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'SLETT transaksjon(!)', @@ -1260,8 +1269,8 @@ return [ 'rule_action_set_notes_choice' => 'Sett notater til ..', 'rule_action_link_to_bill_choice' => 'Koble til en regning ..', 'rule_action_link_to_bill' => 'Link til regning ":action_value"', - 'rule_action_switch_accounts_choice' => 'Switch source and destination accounts (transfers only!)', - 'rule_action_switch_accounts' => 'Switch source and destination', + 'rule_action_switch_accounts_choice' => 'Bytt kilde- og destinasjonskontoer (kun for overføringer)', + 'rule_action_switch_accounts' => 'Bytt kilde og destinasjon', 'rule_action_set_notes' => 'Sett notater til ":action_value"', 'rule_action_convert_deposit_choice' => 'Konverter transaksjonen til et innskudd', 'rule_action_convert_deposit' => 'Konverter transaksjonen til et innskudd fra ":action_value"', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Legg notater til beskrivelsen', 'rule_action_move_descr_to_notes' => 'Erstatt notater med beskrivelse', 'rule_action_move_notes_to_descr' => 'Erstatt beskrivelse med notater', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Regelgruppe for regninger', 'rulegroup_for_bills_description' => 'En spesiell regelgruppe for alle reglene som involverer regninger.', 'rule_for_bill_title' => 'Automatisk generert regel for regning ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Regel for regning ":name"', 'new_rule_for_bill_description' => 'Denne regelen markerer transaksjoner for regning ":name".', - 'new_rule_for_journal_title' => 'Regel basert på transaksjon ":description"', - 'new_rule_for_journal_description' => 'Denne regelen er basert på transaksjon ":description. Det vil matche transaksjoner som er nøyaktig de samme.', + 'new_rule_for_journal_title' => 'Regel basert på transaksjon ":description"', + 'new_rule_for_journal_description' => 'Denne regelen er basert på transaksjon ":description. Det vil matche transaksjoner som er nøyaktig de samme.', // tags - 'store_new_tag' => 'Lagre ny tagg', - 'update_tag' => 'Oppdater tagg', - 'no_location_set' => 'Ingen plassering spesifisert.', - 'meta_data' => 'Metadata', - 'location' => 'Sted', - 'without_date' => 'Uten dato', - 'result' => 'Resultat', - 'sums_apply_to_range' => 'Alle beløp gjelder for det valgte området', - 'mapbox_api_key' => 'For å bruke kart, få en API-nøkkel fra Mapbox. Åpne .env filen og angi denne koden etter MAPBOX_API_KEY =.', - 'press_object_location' => 'Høyreklikk eller trykk lenge for å angi objektets plassering.', - 'clear_location' => 'Tøm lokasjon', - 'delete_all_selected_tags' => 'Slett alle valgte tagger', - 'select_tags_to_delete' => 'Ikke glem å velge noen tagger.', - 'deleted_x_tags' => 'Slettet :count tagg.|Slettet :count tagger.', - 'create_rule_from_transaction' => 'Opprett regel basert på transaksjon', - 'create_recurring_from_transaction' => 'Opprett gjentakende transaksjon basert på transaksjon', - + 'store_new_tag' => 'Lagre ny tagg', + 'update_tag' => 'Oppdater tagg', + 'no_location_set' => 'Ingen plassering spesifisert.', + 'meta_data' => 'Metadata', + 'location' => 'Sted', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Uten dato', + 'result' => 'Resultat', + 'sums_apply_to_range' => 'Alle beløp gjelder for det valgte området', + 'mapbox_api_key' => 'For å bruke kart, få en API-nøkkel fra Mapbox. Åpne .env filen og angi denne koden etter MAPBOX_API_KEY =.', + 'press_object_location' => 'Høyreklikk eller trykk lenge for å angi objektets plassering.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Tøm lokasjon', + 'delete_all_selected_tags' => 'Slett alle valgte tagger', + 'select_tags_to_delete' => 'Ikke glem å velge noen tagger.', + 'deleted_x_tags' => 'Slettet :count tagg.|Slettet :count tagger.', + 'create_rule_from_transaction' => 'Opprett regel basert på transaksjon', + 'create_recurring_from_transaction' => 'Opprett gjentakende transaksjon basert på transaksjon', // preferences - 'dark_mode_option_browser' => 'La nettleseren din avgjøre', - 'dark_mode_option_light' => 'Alltid lys', - 'dark_mode_option_dark' => 'Alltid mørk', - 'equal_to_language' => '(likt språk)', - 'dark_mode_preference' => 'Mørk modus', - 'dark_mode_preference_help' => 'Fortell Firefly III når den skal bruke mørk modus.', - 'pref_home_screen_accounts' => 'Startskjermkontoer', - 'pref_home_screen_accounts_help' => 'Hvilke kontoer skal vises på startsiden?', - 'pref_view_range' => 'Visningsgrense', - 'pref_view_range_help' => 'Noen diagrammer er automatisk gruppert i perioder. Budsjettene grupperes også i perioder. Hvilken periode foretrekker du?', - 'pref_1D' => 'Én dag', - 'pref_1W' => 'Én uke', - 'pref_1M' => 'En måned', - 'pref_3M' => 'Tre måneder (kvartal)', - 'pref_6M' => 'Seks måneder', - 'pref_1Y' => 'Ett år', - 'pref_last365' => 'I fjor', - 'pref_last90' => 'Siste 90 dager', - 'pref_last30' => 'Siste 30 dagene', - 'pref_last7' => 'Siste 7 dager', - 'pref_YTD' => 'År til dato', - 'pref_QTD' => 'Kvartal til dato', - 'pref_MTD' => 'Måned til dato', - 'pref_languages' => 'Språk', - 'pref_locale' => 'Instillinger for språk', - 'pref_languages_help' => 'Firefly III støtter flere språk. Hvilket foretrekker du?', - 'pref_locale_help' => 'Firefly III lar deg velge andre lokale innstillinger, som hvordan valutaer, tall og datoer er formatert. Oppføringer i denne listen støttes kanskje ikke av systemet ditt. Firefly III har ikke riktig dato innstillinger for alle steder; kontakt meg gjerne for forbedringer.', - 'pref_locale_no_demo' => 'Denne funksjonen vil ikke fungere for demo-bruker.', - 'pref_custom_fiscal_year' => 'Innstillinger for regnskapsår', - 'pref_custom_fiscal_year_label' => 'Aktivert', - 'pref_custom_fiscal_year_help' => 'I land som bruker et annet regnskapsår enn 1. januar til 31. desember, kan du slå på dette og angi start- og sluttdager for regnskapsåret', - 'pref_fiscal_year_start_label' => 'Regnskapsårets startdato', - 'pref_two_factor_auth' => '2-trinnsverifisering', - 'pref_two_factor_auth_help' => 'Når du aktiverer 2-trinnsverifisering (også kjent som tofaktorautentisering), legger du til et ekstra sikkerhetslag på kontoen din. Du logger deg på med noe du vet (ditt passord) og noe du har (en bekreftelseskode). Bekreftelseskoder genereres av et program på telefonen, for eksempel Authy eller Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Skru på 2-trinnsverifisering', - 'pref_two_factor_auth_disabled' => '2-trinnsverifisering er fjernet og deaktivert', - 'pref_two_factor_auth_remove_it' => 'Ikke glem å fjerne kontoen fra godkjenningsappen din!', - 'pref_two_factor_auth_code' => 'Bekreftelseskode', - 'pref_two_factor_auth_code_help' => 'Skann QR-koden med et program på telefonen, for eksempel Authy eller Google Authenticator, og skriv inn den genererte koden.', - 'pref_two_factor_auth_reset_code' => 'Tilbakestill verifiseringskoden', - 'pref_two_factor_auth_disable_2fa' => 'Deaktiver 2FA', - '2fa_use_secret_instead' => 'Hvis du ikke kan skanne QR- koden, bruk gjerne "secret" i stedet: :secret.', - '2fa_backup_codes' => 'Lagre disse sikkerhetskodene for å få tilgang i tilfelle du mister enheten.', - '2fa_already_enabled' => '2-trinns verifisering er allerede aktivert.', - 'wrong_mfa_code' => 'Denne MFA-koden er ikke gyldig.', - 'pref_save_settings' => 'Lagre innstillinger', - 'saved_preferences' => 'Innstillinger lagret!', - 'preferences_general' => 'Generelt', - 'preferences_frontpage' => 'Startskjermen', - 'preferences_security' => 'Sikkerhet', - 'preferences_layout' => 'Oppsett', - 'preferences_notifications' => 'Varsler', - 'pref_home_show_deposits' => 'Vis innskudd på startskjermen', - 'pref_home_show_deposits_info' => 'Startskjermen viser allerede kostnadskontoene dine. Skal den også vise inntektskontoene dine?', - 'pref_home_do_show_deposits' => 'Ja, vis dem', - 'successful_count' => 'hvorav :count var vellykket', - 'list_page_size_title' => 'Sidestørrelse', - 'list_page_size_help' => 'En liste over ting (kontoer, transaksjoner osv.). Viser maksimalt dette antall elementer per side.', - 'list_page_size_label' => 'Sidestørrelse', - 'between_dates' => '(:start og :end)', - 'pref_optional_fields_transaction' => 'Valgfrie felt for transaksjoner', - 'pref_optional_fields_transaction_help' => 'Som standard er ikke alle felt aktivert når du oppretter en ny transaksjon (for å unngå forvirring). Nedenfor kan du aktivere disse feltene hvis du tror de kan være nyttige for deg. Selvfølgelig vil et felt som er deaktivert, men allerede fylt inn, være synlig, uavhengig av innstillingen.', - 'optional_tj_date_fields' => 'Datofelter', - 'optional_tj_other_fields' => 'Andre felt', - 'optional_tj_attachment_fields' => 'Vedleggsfelter', - 'pref_optional_tj_interest_date' => 'Rentedato', - 'pref_optional_tj_book_date' => 'Bokføringsdato', - 'pref_optional_tj_process_date' => 'Prosesseringsdato', - 'pref_optional_tj_due_date' => 'Forfallsdato', - 'pref_optional_tj_payment_date' => 'Betalingsdato', - 'pref_optional_tj_invoice_date' => 'Fakturadato', - 'pref_optional_tj_internal_reference' => 'Intern referanse', - 'pref_optional_tj_notes' => 'Notater', - 'pref_optional_tj_attachments' => 'Vedlegg', - 'pref_optional_tj_external_url' => 'Ekstern URL', - 'pref_optional_tj_location' => 'Sted', - 'pref_optional_tj_links' => 'Transaksjons linker', - 'optional_field_meta_dates' => 'Datoer', - 'optional_field_meta_business' => 'Bedrift', - 'optional_field_attachments' => 'Vedlegg', - 'optional_field_meta_data' => 'Valgfri metadata', - 'external_url' => 'Ekstern URL', - 'pref_notification_bill_reminder' => 'Påminnelse om forfallende regninger', - 'pref_notification_new_access_token' => 'Varsle når et nytt API tilgangstoken er opprettet', - 'pref_notification_transaction_creation' => 'Varsle når en transaksjon opprettes automatisk', - 'pref_notification_user_login' => 'Varsle når du logger inn fra et nytt sted', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Varslinger', - 'pref_notifications_help' => 'Angi om dette er varsler du ønsker å få. Noen meldinger kan inneholde sensitiv økonomisk informasjon.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'Hvis du vil at Firefly III skal varsle deg ved hjelp av Slack, skriv inn webhook-URLen her. Ellers la feltet stå tomt. Dersom du er en administrator må du også sette denne URL-adressen i administrasjonen.', - 'slack_url_label' => 'Slack "innkommende webhook" URL', + 'dark_mode_option_browser' => 'La nettleseren din avgjøre', + 'dark_mode_option_light' => 'Alltid lys', + 'dark_mode_option_dark' => 'Alltid mørk', + 'equal_to_language' => '(likt språk)', + 'dark_mode_preference' => 'Mørk modus', + 'dark_mode_preference_help' => 'Fortell Firefly III når den skal bruke mørk modus.', + 'pref_home_screen_accounts' => 'Startskjermkontoer', + 'pref_home_screen_accounts_help' => 'Hvilke kontoer skal vises på startsiden?', + 'pref_view_range' => 'Visningsgrense', + 'pref_view_range_help' => 'Noen diagrammer er automatisk gruppert i perioder. Budsjettene grupperes også i perioder. Hvilken periode foretrekker du?', + 'pref_1D' => 'Én dag', + 'pref_1W' => 'Én uke', + 'pref_1M' => 'En måned', + 'pref_3M' => 'Tre måneder (kvartal)', + 'pref_6M' => 'Seks måneder', + 'pref_1Y' => 'Ett år', + 'pref_last365' => 'I fjor', + 'pref_last90' => 'Siste 90 dager', + 'pref_last30' => 'Siste 30 dagene', + 'pref_last7' => 'Siste 7 dager', + 'pref_YTD' => 'År til dato', + 'pref_QTD' => 'Kvartal til dato', + 'pref_MTD' => 'Måned til dato', + 'pref_languages' => 'Språk', + 'pref_locale' => 'Instillinger for språk', + 'pref_languages_help' => 'Firefly III støtter flere språk. Hvilket foretrekker du?', + 'pref_locale_help' => 'Firefly III lar deg velge andre lokale innstillinger, som hvordan valutaer, tall og datoer er formatert. Oppføringer i denne listen støttes kanskje ikke av systemet ditt. Firefly III har ikke riktig dato innstillinger for alle steder; kontakt meg gjerne for forbedringer.', + 'pref_locale_no_demo' => 'Denne funksjonen vil ikke fungere for demo-bruker.', + 'pref_custom_fiscal_year' => 'Innstillinger for regnskapsår', + 'pref_custom_fiscal_year_label' => 'Aktivert', + 'pref_custom_fiscal_year_help' => 'I land som bruker et annet regnskapsår enn 1. januar til 31. desember, kan du slå på dette og angi start- og sluttdager for regnskapsåret', + 'pref_fiscal_year_start_label' => 'Regnskapsårets startdato', + 'pref_two_factor_auth' => '2-trinnsverifisering', + 'pref_two_factor_auth_help' => 'Når du aktiverer 2-trinnsverifisering (også kjent som tofaktorautentisering), legger du til et ekstra sikkerhetslag på kontoen din. Du logger deg på med noe du vet (ditt passord) og noe du har (en bekreftelseskode). Bekreftelseskoder genereres av et program på telefonen, for eksempel Authy eller Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Skru på 2-trinnsverifisering', + 'pref_two_factor_auth_disabled' => '2-trinnsverifisering er fjernet og deaktivert', + 'pref_two_factor_auth_remove_it' => 'Ikke glem å fjerne kontoen fra godkjenningsappen din!', + 'pref_two_factor_auth_code' => 'Bekreftelseskode', + 'pref_two_factor_auth_code_help' => 'Skann QR-koden med et program på telefonen, for eksempel Authy eller Google Authenticator, og skriv inn den genererte koden.', + 'pref_two_factor_auth_reset_code' => 'Tilbakestill verifiseringskoden', + 'pref_two_factor_auth_disable_2fa' => 'Deaktiver 2FA', + '2fa_use_secret_instead' => 'Hvis du ikke kan skanne QR- koden, bruk gjerne "secret" i stedet: :secret.', + '2fa_backup_codes' => 'Lagre disse sikkerhetskodene for å få tilgang i tilfelle du mister enheten.', + '2fa_already_enabled' => '2-trinns verifisering er allerede aktivert.', + 'wrong_mfa_code' => 'Denne MFA-koden er ikke gyldig.', + 'pref_save_settings' => 'Lagre innstillinger', + 'saved_preferences' => 'Innstillinger lagret!', + 'preferences_general' => 'Generelt', + 'preferences_frontpage' => 'Startskjermen', + 'preferences_security' => 'Sikkerhet', + 'preferences_layout' => 'Oppsett', + 'preferences_notifications' => 'Varsler', + 'pref_home_show_deposits' => 'Vis innskudd på startskjermen', + 'pref_home_show_deposits_info' => 'Startskjermen viser allerede kostnadskontoene dine. Skal den også vise inntektskontoene dine?', + 'pref_home_do_show_deposits' => 'Ja, vis dem', + 'successful_count' => 'hvorav :count var vellykket', + 'list_page_size_title' => 'Sidestørrelse', + 'list_page_size_help' => 'En liste over ting (kontoer, transaksjoner osv.). Viser maksimalt dette antall elementer per side.', + 'list_page_size_label' => 'Sidestørrelse', + 'between_dates' => '(:start og :end)', + 'pref_optional_fields_transaction' => 'Valgfrie felt for transaksjoner', + 'pref_optional_fields_transaction_help' => 'Som standard er ikke alle felt aktivert når du oppretter en ny transaksjon (for å unngå forvirring). Nedenfor kan du aktivere disse feltene hvis du tror de kan være nyttige for deg. Selvfølgelig vil et felt som er deaktivert, men allerede fylt inn, være synlig, uavhengig av innstillingen.', + 'optional_tj_date_fields' => 'Datofelter', + 'optional_tj_other_fields' => 'Andre felt', + 'optional_tj_attachment_fields' => 'Vedleggsfelter', + 'pref_optional_tj_interest_date' => 'Rentedato', + 'pref_optional_tj_book_date' => 'Bokføringsdato', + 'pref_optional_tj_process_date' => 'Prosesseringsdato', + 'pref_optional_tj_due_date' => 'Forfallsdato', + 'pref_optional_tj_payment_date' => 'Betalingsdato', + 'pref_optional_tj_invoice_date' => 'Fakturadato', + 'pref_optional_tj_internal_reference' => 'Intern referanse', + 'pref_optional_tj_notes' => 'Notater', + 'pref_optional_tj_attachments' => 'Vedlegg', + 'pref_optional_tj_external_url' => 'Ekstern URL', + 'pref_optional_tj_location' => 'Sted', + 'pref_optional_tj_links' => 'Transaksjons linker', + 'optional_field_meta_dates' => 'Datoer', + 'optional_field_meta_business' => 'Bedrift', + 'optional_field_attachments' => 'Vedlegg', + 'optional_field_meta_data' => 'Valgfri metadata', + 'external_url' => 'Ekstern URL', + 'pref_notification_bill_reminder' => 'Påminnelse om forfallende regninger', + 'pref_notification_new_access_token' => 'Varsle når et nytt API tilgangstoken er opprettet', + 'pref_notification_transaction_creation' => 'Varsle når en transaksjon opprettes automatisk', + 'pref_notification_user_login' => 'Varsle når du logger inn fra et nytt sted', + 'pref_notification_rule_action_failures' => 'Varsel når regelhandlinger feiler (kun Slack eller Discord)', + 'pref_notifications' => 'Varslinger', + 'pref_notifications_help' => 'Angi om dette er varsler du ønsker å få. Noen meldinger kan inneholde sensitiv økonomisk informasjon.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'Hvis du vil at Firefly III skal varsle deg ved hjelp av Slack, skriv inn webhook-URLen her. Ellers la feltet stå tomt. Dersom du er en administrator må du også sette denne URL-adressen i administrasjonen.', + 'slack_url_label' => 'Slack "innkommende webhook" URL', // Financial administrations - 'administration_index' => 'Økonomisk administrasjon', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Økonomisk administrasjon', + 'administrations_index_menu' => 'Økonomisk administrasjon', // profile: - 'purge_data_title' => 'Fjern data fra Firefly III', - 'purge_data_expl' => '"Purging / fjerning" betyr "slett det som allerede er slettet". I normale omstendigheter sletter Firefly III ingenting permanent. Det gjemmer det. Knappen under sletter alle disse tidligere "slettet" oppføringene FOR ALLTID.', - 'delete_stuff_header' => 'Slett og fjern data', - 'purge_all_data' => 'Fjern alle slettede poster', - 'purge_data' => 'Fjern data', - 'purged_all_records' => 'Alle slettede poster har blitt fjernet.', - 'delete_data_title' => 'Slett data fra Firefly III', - 'permanent_delete_stuff' => 'Du kan slette ting fra Firefly III. Ved å bruke knappene under betyr at oppføringene dine vil bli fjernet fra visning og skjult. Det er ikke mulig å angre på dette, men elementene kan forbli i databasen hvor du kan hente dem tilbake om nødvendig.', - 'other_sessions_logged_out' => 'Alle dine andre økter har blitt logget ut.', - 'delete_unused_accounts' => 'Sletting av ubrukte kontoer vil tømme auto-fullfør listene dine.', - 'delete_all_unused_accounts' => 'Slette ubrukte kontoer', - 'deleted_all_unused_accounts' => 'Alle ubrukte kontoer er slettet', - 'delete_all_budgets' => 'Slett ALLE budsjetter', - 'delete_all_categories' => 'Slett ALLE kategoriene dine', - 'delete_all_tags' => 'Slett ALLE taggene dine', - 'delete_all_bills' => 'Slett ALLE regningene dine', - 'delete_all_piggy_banks' => 'Slett ALLE sparegriser', - 'delete_all_rules' => 'Slett ALLE reglene dine', - 'delete_all_recurring' => 'Slett ALLE gjentakende transaksjoner', - 'delete_all_object_groups' => 'Slett ALLE objektgrupper', - 'delete_all_accounts' => 'Slett ALLE kontoene dine', - 'delete_all_asset_accounts' => 'Slett ALLE aktivakontoene dine', - 'delete_all_expense_accounts' => 'Slett ALLE utgiftskontoene dine', - 'delete_all_revenue_accounts' => 'Slett ALLE inntektskontoene dine', - 'delete_all_liabilities' => 'Slett ALLE forpliktelser', - 'delete_all_transactions' => 'Slett ALLE transaksjonene dine', - 'delete_all_withdrawals' => 'Slett ALLE uttakene dine', - 'delete_all_deposits' => 'Slett ALLE innskudd', - 'delete_all_transfers' => 'Slett ALLE overføringer', - 'also_delete_transactions' => 'Å slette kontoer vil også slette ALLE assosierte uttak, innskudd og overføringer!', - 'deleted_all_budgets' => 'Alle budsjetter har blitt slettet', - 'deleted_all_categories' => 'Alle kategorier har blitt slettet', - 'deleted_all_tags' => 'Alle tagger har blitt slettet', - 'deleted_all_bills' => 'Alle regninger har blitt slettet', - 'deleted_all_piggy_banks' => 'Alle sparegriser er slettet', - 'deleted_all_rules' => 'Alle regler og regelgrupper er slettet', - 'deleted_all_object_groups' => 'Alle grupper har blitt slettet', - 'deleted_all_accounts' => 'Alle kontoer er slettet', - 'deleted_all_asset_accounts' => 'Alle aktivakontoer har blitt slettet', - 'deleted_all_expense_accounts' => 'Alle utgiftskontoer er slettet', - 'deleted_all_revenue_accounts' => 'Alle inntektskontoer er slettet', - 'deleted_all_liabilities' => 'Alle forpliktelser har blitt slettet', - 'deleted_all_transactions' => 'Alle transaksjoner har blitt slettet', - 'deleted_all_withdrawals' => 'Alle uttak er slettet', - 'deleted_all_deposits' => 'Alle innskudd er slettet', - 'deleted_all_transfers' => 'Alle overføringer er slettet', - 'deleted_all_recurring' => 'Alle gjentakende transaksjoner har blitt slettet', - 'change_your_password' => 'Endre passord', - 'delete_account' => 'Slett konto', - 'current_password' => 'Nåværende passord', - 'new_password' => 'Nytt passord', - 'new_password_again' => 'Nytt passord (gjenta)', - 'delete_your_account' => 'Slett din konto', - 'delete_your_account_help' => 'Hvis du sletter brukerkontoen din, slettes også alle kontoer, transaksjoner, og alt annet du har lagret i Firefly III. Det blir BORTE.', - 'delete_your_account_password' => 'Skriv inn passordet ditt for å fortsette.', - 'password' => 'Passord', - 'are_you_sure' => 'Er du sikker? Du kan ikke angre på dette.', - 'delete_account_button' => 'SLETT din konto', - 'invalid_current_password' => 'Ugyldig nåværende passord!', - 'password_changed' => 'Passord endret!', - 'should_change' => 'Tanken er å endre passordet ditt.', - 'invalid_password' => 'Ugyldig passord!', - 'what_is_pw_security' => 'Hva er "sjekk passordsikkerhet"?', - 'secure_pw_title' => 'Hvordan velge et sikkert passord', - 'forgot_password_response' => 'Takk skal du ha. Hvis det finnes en konto med denne e-postadressen, finner du instruksjoner i innboksen din.', - 'secure_pw_history' => 'Ikke en uke går uten at du leser i nyhetene om et nettsted som har mistet passord for brukerne sine. Hackere og tyver bruker disse passordene for å prøve å stjele din private informasjon. Denne informasjonen er verdifull.', - 'secure_pw_ff' => 'Bruker du det samme passordet over alt på Internett? Hvis bare ett nettsted mister passordet, har hackere tilgang til alle dataene dine. Firefly III er avhengig av at du velger et sterkt og unikt passord for å beskytte dine finansielle data.', - 'secure_pw_check_box' => 'For å hjelpe deg kan Firefly III sjekke om passordet du vil bruke har blitt stjålet tidligere. Hvis dette er tilfelle, råder Firefly III deg til ikke å bruke dette passordet.', - 'secure_pw_working_title' => 'Hvordan virker det?', - 'secure_pw_working' => 'Ved å huke av denne boksen vil Firefly III sende de fem første tegnene til SHA1-hashen av passordet ditt til nettsiden til Troy Hunt for å se om det er på listen hans. Dette vil stoppe deg fra å bruke usikre passord som anbefalt i den siste spesialpublikasjonen fra NIST om dette emnet.', - 'secure_pw_should' => 'Bør jeg huke av boksen?', - 'secure_pw_long_password' => 'Ja. Alltid bekreft at passordet ditt er trygt.', - 'command_line_token' => 'Kommandolinjenøkkel', - 'explain_command_line_token' => 'Du trenger dette "token" for å utføre kommander på kommandolinje som f. eks. importere eller eksportere. Uten dette tegnet fungerer ikke kommandoene. Ikke del din kommandolinje token. Ingen vil spørre deg om dette spesialtegnet, ikke engang meg. Hvis du frykter at du har mistet dette, eller ved paranoia, trykk på knappen for å generere et nytt "token".', - 'regenerate_command_line_token' => 'Regenerer kommandolinjenøkkel', - 'token_regenerated' => 'En ny kommandolinjenøkkel ble generert', - 'change_your_email' => 'Endre din epostadresse', - 'email_verification' => 'En e-postmelding sendes til din gamle og nye e-postadresse. Av sikkerhetsgrunner, vil du ikke kunne logge inn før du bekrefter din nye epostadresse. Hvis du er usikker på om Firefly III installasjonen er i stand til å sende e-post, ikke bruk denne funksjonen. Hvis du er administrator, kan du teste dette i Administrasjon.', - 'email_changed_logout' => 'Inntil du bekrefter e-postadressen din, kan du ikke logge inn.', - 'login_with_new_email' => 'Du kan nå logge inn med din nye e-postadresse.', - 'login_with_old_email' => 'Du kan nå logge inn med din gamle e-postadresse igjen.', - 'login_provider_local_only' => 'Denne handlingen er ikke tilgjengelig ved godkjenning gjennom ":login_provider".', - 'external_user_mgt_disabled' => 'Denne handlingen er ikke tilgjengelig når Firefly III ikke er ansvarlig for brukerstyring eller autentiseringshåndtering.', - 'external_auth_disabled' => 'Denne handlingen er ikke tilgjengelig når Firefly III ikke er ansvarlig for autentiseringshåndtering.', - 'delete_local_info_only' => "Fordi Firefly III ikke er ansvarlig for brukerstyring eller autentiseringshåndtering, vil denne funksjonen bare slette lokal informasjon om Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth klienter', - 'profile_oauth_no_clients' => 'Du har ikke opprettet noen OAuth klienter.', - 'profile_oauth_clients_external_auth' => 'Hvis du bruker en ekstern autentiseringsleverandør, som Authelia, vil ikke OAuth klienter fungere. Du kan bare bruke personlige tilgangstokener.', - 'profile_oauth_clients_header' => 'Klienter', - 'profile_oauth_client_id' => 'Klient-ID', - 'profile_oauth_client_name' => 'Navn', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Opprett Ny Klient', - 'profile_oauth_create_client' => 'Opprett Klient', - 'profile_oauth_edit_client' => 'Rediger Klient', - 'profile_oauth_name_help' => 'Noe brukerne dine vil gjenkjenne og stole på.', - 'profile_oauth_redirect_url' => 'Videresendings-URL', - 'profile_oauth_redirect_url_help' => 'Programmets tilbakekallingslenke til din adresse.', - 'profile_authorized_apps' => 'Dine autoriserte applikasjoner', - 'profile_authorized_clients' => 'Autoriserte klienter', - 'profile_scopes' => 'Omfang', - 'profile_revoke' => 'Tilbakekall', - 'profile_oauth_client_secret_title' => 'Klient hemmilghet', - 'profile_oauth_client_secret_expl' => 'Her er din nye klient hemmelighet. Dette er den eneste tiden det blir vist så ikke mister den! Du kan nå bruke denne hemmeligheten til å lage API-forespørsler.', - 'profile_personal_access_tokens' => 'Personlig tilgangsnøkkel (Tokens)', - 'profile_personal_access_token' => 'Personlig tilgangsnøkkel (Token)', - 'profile_oauth_confidential' => 'Konfidensiell', - 'profile_oauth_confidential_help' => 'Krev at klienten godkjenner med en "secret". Konfidensielle klienter kan holde legitimasjon på en sikker måte uten å utsette dem for uautoriserte parter. Offentlige programmer, som skrivebord eller JavaScript SPA-programmer, kan ikke holde secret "sikret".', - 'profile_personal_access_token_explanation' => 'Her er din nye klient "secret". Dette er den eneste tiden det blir vist så ikke mister den! Du kan nå bruke denne token til å lage API-forespørsler.', - 'profile_no_personal_access_token' => 'Du har ikke opprettet noen personlig tilgangsnøkkel (tokens).', - 'profile_create_new_token' => 'Opprette nytt token', - 'profile_create_token' => 'Opprett token', - 'profile_create' => 'Opprett', - 'profile_save_changes' => 'Lagre endringer', - 'profile_whoops' => 'Whoops!', - 'profile_something_wrong' => 'Noe gikk galt!', - 'profile_try_again' => 'Noe gikk galt. Prøv på nytt.', - 'amounts' => 'Beløp', - 'multi_account_warning_unknown' => 'Avhengig av hvilken type transaksjon du oppretter, Kilden og/eller destinasjonskonto for etterfølgende delinger kan overstyres av det som er definert i transaksjonens første del.', - 'multi_account_warning_withdrawal' => 'Husk at kildekontoen for etterfølgende oppsplitting skal overlates av hva som defineres i den første delen av uttrekket.', - 'multi_account_warning_deposit' => 'Husk at mottakerkontoen for etterfølgende oppsplitting skal overstyres av det som er definert i den første delen av depositumet.', - 'multi_account_warning_transfer' => 'Husk at kildens pluss destinasjonskonto med etterfølgende oppdeling overstyres av det som er definert i en første del av overføringen.', + 'purge_data_title' => 'Fjern data fra Firefly III', + 'purge_data_expl' => '"Purging / fjerning" betyr "slett det som allerede er slettet". I normale omstendigheter sletter Firefly III ingenting permanent. Det gjemmer det. Knappen under sletter alle disse tidligere "slettet" oppføringene FOR ALLTID.', + 'delete_stuff_header' => 'Slett og fjern data', + 'purge_all_data' => 'Fjern alle slettede poster', + 'purge_data' => 'Fjern data', + 'purged_all_records' => 'Alle slettede poster har blitt fjernet.', + 'delete_data_title' => 'Slett data fra Firefly III', + 'permanent_delete_stuff' => 'Du kan slette ting fra Firefly III. Ved å bruke knappene under betyr at oppføringene dine vil bli fjernet fra visning og skjult. Det er ikke mulig å angre på dette, men elementene kan forbli i databasen hvor du kan hente dem tilbake om nødvendig.', + 'other_sessions_logged_out' => 'Alle dine andre økter har blitt logget ut.', + 'delete_unused_accounts' => 'Sletting av ubrukte kontoer vil tømme auto-fullfør listene dine.', + 'delete_all_unused_accounts' => 'Slette ubrukte kontoer', + 'deleted_all_unused_accounts' => 'Alle ubrukte kontoer er slettet', + 'delete_all_budgets' => 'Slett ALLE budsjetter', + 'delete_all_categories' => 'Slett ALLE kategoriene dine', + 'delete_all_tags' => 'Slett ALLE taggene dine', + 'delete_all_bills' => 'Slett ALLE regningene dine', + 'delete_all_piggy_banks' => 'Slett ALLE sparegriser', + 'delete_all_rules' => 'Slett ALLE reglene dine', + 'delete_all_recurring' => 'Slett ALLE gjentakende transaksjoner', + 'delete_all_object_groups' => 'Slett ALLE objektgrupper', + 'delete_all_accounts' => 'Slett ALLE kontoene dine', + 'delete_all_asset_accounts' => 'Slett ALLE aktivakontoene dine', + 'delete_all_expense_accounts' => 'Slett ALLE utgiftskontoene dine', + 'delete_all_revenue_accounts' => 'Slett ALLE inntektskontoene dine', + 'delete_all_liabilities' => 'Slett ALLE forpliktelser', + 'delete_all_transactions' => 'Slett ALLE transaksjonene dine', + 'delete_all_withdrawals' => 'Slett ALLE uttakene dine', + 'delete_all_deposits' => 'Slett ALLE innskudd', + 'delete_all_transfers' => 'Slett ALLE overføringer', + 'also_delete_transactions' => 'Å slette kontoer vil også slette ALLE assosierte uttak, innskudd og overføringer!', + 'deleted_all_budgets' => 'Alle budsjetter har blitt slettet', + 'deleted_all_categories' => 'Alle kategorier har blitt slettet', + 'deleted_all_tags' => 'Alle tagger har blitt slettet', + 'deleted_all_bills' => 'Alle regninger har blitt slettet', + 'deleted_all_piggy_banks' => 'Alle sparegriser er slettet', + 'deleted_all_rules' => 'Alle regler og regelgrupper er slettet', + 'deleted_all_object_groups' => 'Alle grupper har blitt slettet', + 'deleted_all_accounts' => 'Alle kontoer er slettet', + 'deleted_all_asset_accounts' => 'Alle aktivakontoer har blitt slettet', + 'deleted_all_expense_accounts' => 'Alle utgiftskontoer er slettet', + 'deleted_all_revenue_accounts' => 'Alle inntektskontoer er slettet', + 'deleted_all_liabilities' => 'Alle forpliktelser har blitt slettet', + 'deleted_all_transactions' => 'Alle transaksjoner har blitt slettet', + 'deleted_all_withdrawals' => 'Alle uttak er slettet', + 'deleted_all_deposits' => 'Alle innskudd er slettet', + 'deleted_all_transfers' => 'Alle overføringer er slettet', + 'deleted_all_recurring' => 'Alle gjentakende transaksjoner har blitt slettet', + 'change_your_password' => 'Endre passord', + 'delete_account' => 'Slett konto', + 'current_password' => 'Nåværende passord', + 'new_password' => 'Nytt passord', + 'new_password_again' => 'Nytt passord (gjenta)', + 'delete_your_account' => 'Slett din konto', + 'delete_your_account_help' => 'Hvis du sletter brukerkontoen din, slettes også alle kontoer, transaksjoner, og alt annet du har lagret i Firefly III. Det blir BORTE.', + 'delete_your_account_password' => 'Skriv inn passordet ditt for å fortsette.', + 'password' => 'Passord', + 'are_you_sure' => 'Er du sikker? Du kan ikke angre på dette.', + 'delete_account_button' => 'SLETT din konto', + 'invalid_current_password' => 'Ugyldig nåværende passord!', + 'password_changed' => 'Passord endret!', + 'should_change' => 'Tanken er å endre passordet ditt.', + 'invalid_password' => 'Ugyldig passord!', + 'what_is_pw_security' => 'Hva er "sjekk passordsikkerhet"?', + 'secure_pw_title' => 'Hvordan velge et sikkert passord', + 'forgot_password_response' => 'Takk skal du ha. Hvis det finnes en konto med denne e-postadressen, finner du instruksjoner i innboksen din.', + 'secure_pw_history' => 'Ikke en uke går uten at du leser i nyhetene om et nettsted som har mistet passord for brukerne sine. Hackere og tyver bruker disse passordene for å prøve å stjele din private informasjon. Denne informasjonen er verdifull.', + 'secure_pw_ff' => 'Bruker du det samme passordet over alt på Internett? Hvis bare ett nettsted mister passordet, har hackere tilgang til alle dataene dine. Firefly III er avhengig av at du velger et sterkt og unikt passord for å beskytte dine finansielle data.', + 'secure_pw_check_box' => 'For å hjelpe deg kan Firefly III sjekke om passordet du vil bruke har blitt stjålet tidligere. Hvis dette er tilfelle, råder Firefly III deg til ikke å bruke dette passordet.', + 'secure_pw_working_title' => 'Hvordan virker det?', + 'secure_pw_working' => 'Ved å huke av denne boksen vil Firefly III sende de fem første tegnene til SHA1-hashen av passordet ditt til nettsiden til Troy Hunt for å se om det er på listen hans. Dette vil stoppe deg fra å bruke usikre passord som anbefalt i den siste spesialpublikasjonen fra NIST om dette emnet.', + 'secure_pw_should' => 'Bør jeg huke av boksen?', + 'secure_pw_long_password' => 'Ja. Alltid bekreft at passordet ditt er trygt.', + 'command_line_token' => 'Kommandolinjenøkkel', + 'explain_command_line_token' => 'Du trenger dette "token" for å utføre kommander på kommandolinje som f. eks. importere eller eksportere. Uten dette tegnet fungerer ikke kommandoene. Ikke del din kommandolinje token. Ingen vil spørre deg om dette spesialtegnet, ikke engang meg. Hvis du frykter at du har mistet dette, eller ved paranoia, trykk på knappen for å generere et nytt "token".', + 'regenerate_command_line_token' => 'Regenerer kommandolinjenøkkel', + 'token_regenerated' => 'En ny kommandolinjenøkkel ble generert', + 'change_your_email' => 'Endre din epostadresse', + 'email_verification' => 'En e-postmelding sendes til din gamle og nye e-postadresse. Av sikkerhetsgrunner, vil du ikke kunne logge inn før du bekrefter din nye epostadresse. Hvis du er usikker på om Firefly III installasjonen er i stand til å sende e-post, ikke bruk denne funksjonen. Hvis du er administrator, kan du teste dette i Administrasjon.', + 'email_changed_logout' => 'Inntil du bekrefter e-postadressen din, kan du ikke logge inn.', + 'login_with_new_email' => 'Du kan nå logge inn med din nye e-postadresse.', + 'login_with_old_email' => 'Du kan nå logge inn med din gamle e-postadresse igjen.', + 'login_provider_local_only' => 'Denne handlingen er ikke tilgjengelig ved godkjenning gjennom ":login_provider".', + 'external_user_mgt_disabled' => 'Denne handlingen er ikke tilgjengelig når Firefly III ikke er ansvarlig for brukerstyring eller autentiseringshåndtering.', + 'external_auth_disabled' => 'Denne handlingen er ikke tilgjengelig når Firefly III ikke er ansvarlig for autentiseringshåndtering.', + 'delete_local_info_only' => 'Fordi Firefly III ikke er ansvarlig for brukerstyring eller autentiseringshåndtering, vil denne funksjonen bare slette lokal informasjon om Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth klienter', + 'profile_oauth_no_clients' => 'Du har ikke opprettet noen OAuth klienter.', + 'profile_oauth_clients_external_auth' => 'Hvis du bruker en ekstern autentiseringsleverandør, som Authelia, vil ikke OAuth klienter fungere. Du kan bare bruke personlige tilgangstokener.', + 'profile_oauth_clients_header' => 'Klienter', + 'profile_oauth_client_id' => 'Klient-ID', + 'profile_oauth_client_name' => 'Navn', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Opprett Ny Klient', + 'profile_oauth_create_client' => 'Opprett Klient', + 'profile_oauth_edit_client' => 'Rediger Klient', + 'profile_oauth_name_help' => 'Noe brukerne dine vil gjenkjenne og stole på.', + 'profile_oauth_redirect_url' => 'Videresendings-URL', + 'profile_oauth_redirect_url_help' => 'Programmets tilbakekallingslenke til din adresse.', + 'profile_authorized_apps' => 'Dine autoriserte applikasjoner', + 'profile_authorized_clients' => 'Autoriserte klienter', + 'profile_scopes' => 'Omfang', + 'profile_revoke' => 'Tilbakekall', + 'profile_oauth_client_secret_title' => 'Klient hemmilghet', + 'profile_oauth_client_secret_expl' => 'Her er din nye klient hemmelighet. Dette er den eneste tiden det blir vist så ikke mister den! Du kan nå bruke denne hemmeligheten til å lage API-forespørsler.', + 'profile_personal_access_tokens' => 'Personlig tilgangsnøkkel (Tokens)', + 'profile_personal_access_token' => 'Personlig tilgangsnøkkel (Token)', + 'profile_oauth_confidential' => 'Konfidensiell', + 'profile_oauth_confidential_help' => 'Krev at klienten godkjenner med en "secret". Konfidensielle klienter kan holde legitimasjon på en sikker måte uten å utsette dem for uautoriserte parter. Offentlige programmer, som skrivebord eller JavaScript SPA-programmer, kan ikke holde secret "sikret".', + 'profile_personal_access_token_explanation' => 'Her er din nye klient "secret". Dette er den eneste tiden det blir vist så ikke mister den! Du kan nå bruke denne token til å lage API-forespørsler.', + 'profile_no_personal_access_token' => 'Du har ikke opprettet noen personlig tilgangsnøkkel (tokens).', + 'profile_create_new_token' => 'Opprette nytt token', + 'profile_create_token' => 'Opprett token', + 'profile_create' => 'Opprett', + 'profile_save_changes' => 'Lagre endringer', + 'profile_whoops' => 'Whoops!', + 'profile_something_wrong' => 'Noe gikk galt!', + 'profile_try_again' => 'Noe gikk galt. Prøv på nytt.', + 'amounts' => 'Beløp', + 'multi_account_warning_unknown' => 'Avhengig av hvilken type transaksjon du oppretter, Kilden og/eller destinasjonskonto for etterfølgende delinger kan overstyres av det som er definert i transaksjonens første del.', + 'multi_account_warning_withdrawal' => 'Husk at kildekontoen for etterfølgende oppsplitting skal overlates av hva som defineres i den første delen av uttrekket.', + 'multi_account_warning_deposit' => 'Husk at mottakerkontoen for etterfølgende oppsplitting skal overstyres av det som er definert i den første delen av depositumet.', + 'multi_account_warning_transfer' => 'Husk at kildens pluss destinasjonskonto med etterfølgende oppdeling overstyres av det som er definert i en første del av overføringen.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Eksportere data fra Firefly III', - 'export_data_menu' => 'Eksporter data', - 'export_data_bc' => 'Eksportere data fra Firefly III', - 'export_data_main_title' => 'Importer data til Firefly III', - 'export_data_expl' => 'Denne lenken lar deg eksportere alle transaksjoner + metadata fra Firefly III. Referer til hjelp (øverst til høyre (?)-ikon) for mer informasjon om prosessen.', - 'export_data_all_transactions' => 'Eksportere alle transaksjoner', - 'export_data_advanced_expl' => 'Dersom du trenger en mer avansert eller spesifikk type eksport, les "hjelpen" om hvordan man bruker konsollkommandoen php artisan help firefly-ii:export-data.', + 'export_data_title' => 'Eksportere data fra Firefly III', + 'export_data_menu' => 'Eksporter data', + 'export_data_bc' => 'Eksportere data fra Firefly III', + 'export_data_main_title' => 'Importer data til Firefly III', + 'export_data_expl' => 'Denne lenken lar deg eksportere alle transaksjoner + metadata fra Firefly III. Referer til hjelp (øverst til høyre (?)-ikon) for mer informasjon om prosessen.', + 'export_data_all_transactions' => 'Eksportere alle transaksjoner', + 'export_data_advanced_expl' => 'Dersom du trenger en mer avansert eller spesifikk type eksport, les "hjelpen" om hvordan man bruker konsollkommandoen php artisan help firefly-ii:export-data.', // attachments - 'nr_of_attachments' => 'Ett vedlegg|:count vedlegg', - 'attachments' => 'Vedlegg', - 'edit_attachment' => 'Rediger vedlegg ":name"', - 'update_attachment' => 'Oppdater vedlegget', - 'delete_attachment' => 'Slett vedlegg ":name"', - 'attachment_deleted' => 'Slettet vedlegg ":name"', - 'liabilities_deleted' => 'Slettet gjeld ":name"', - 'attachment_updated' => 'Oppdatert vedlegg ":name"', - 'upload_max_file_size' => 'Maks filstørrelse: :size', - 'list_all_attachments' => 'Liste over alle vedlegg', + 'nr_of_attachments' => 'Ett vedlegg|:count vedlegg', + 'attachments' => 'Vedlegg', + 'edit_attachment' => 'Rediger vedlegg ":name"', + 'update_attachment' => 'Oppdater vedlegget', + 'delete_attachment' => 'Slett vedlegg ":name"', + 'attachment_deleted' => 'Slettet vedlegg ":name"', + 'liabilities_deleted' => 'Slettet gjeld ":name"', + 'attachment_updated' => 'Oppdatert vedlegg ":name"', + 'upload_max_file_size' => 'Maks filstørrelse: :size', + 'list_all_attachments' => 'Liste over alle vedlegg', // transaction index - 'title_expenses' => 'Utgifter', - 'title_withdrawal' => 'Utgifter', - 'title_revenue' => 'Inntekt', - 'title_deposit' => 'Inntekt', - 'title_transfer' => 'Overføringer', - 'title_transfers' => 'Overføringer', - 'submission_options' => 'Alternativer for innsending', - 'apply_rules_checkbox' => 'Bruk regler', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Fordi denne transaksjonen er avstemt, vil du ikke kunne oppdatere kontoene eller beløpene.', + 'title_expenses' => 'Utgifter', + 'title_withdrawal' => 'Utgifter', + 'title_revenue' => 'Inntekt', + 'title_deposit' => 'Inntekt', + 'title_transfer' => 'Overføringer', + 'title_transfers' => 'Overføringer', + 'submission_options' => 'Alternativer for innsending', + 'apply_rules_checkbox' => 'Bruk regler', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Denne transaksjonen er allerede et uttak', - 'convert_is_already_type_Deposit' => 'Denne transaksjonen er allerede et innskudd', - 'convert_is_already_type_Transfer' => 'Denne transaksjonen er allerede en overføring', - 'convert_to_Withdrawal' => 'Konverter ":description" til et uttak', - 'convert_to_Deposit' => 'Konverter ":description" til et innskudd', - 'convert_to_Transfer' => 'Konverter ":description" til en overføring', - 'convert_options_WithdrawalDeposit' => 'Konverter et uttak til et innskudd', - 'convert_options_WithdrawalTransfer' => 'Konverter et uttak til en overføring', - 'convert_options_DepositTransfer' => 'Konverter et innskudd til en overføring', - 'convert_options_DepositWithdrawal' => 'Konverter et innskudd til et uttak', - 'convert_options_TransferWithdrawal' => 'Konverter en overføring til et uttak', - 'convert_options_TransferDeposit' => 'Konverter en overføring til et innskudd', - 'convert_Withdrawal_to_deposit' => 'Konverter dette uttaket til et innskudd', - 'convert_Withdrawal_to_transfer' => 'Konverter dette uttaket til en overføring', - 'convert_Deposit_to_withdrawal' => 'Konverter dette innskuddet til et uttak', - 'convert_Deposit_to_transfer' => 'Konverter dette innskuddet til en overføring', - 'convert_Transfer_to_deposit' => 'Konverter denne overføringen til et innskudd', - 'convert_Transfer_to_withdrawal' => 'Konverter denne overføringen til et uttak', - 'convert_please_set_revenue_source' => 'Vennligst velg inntektskontoen pengene vil komme fra.', - 'convert_please_set_asset_destination' => 'Vennligst velg aktivakontoen pengene skal gå til.', - 'convert_please_set_expense_destination' => 'Vennligst velg utgiftsskontoen pengene skal gå til.', - 'convert_please_set_asset_source' => 'Vennligst velg aktivakontoen pengene kommer fra.', - 'convert_expl_w_d' => 'Når du konverterer fra et uttak til et innskudd, blir pengene deponert på den angitte målkontoen, i stedet for å bli trukket ut av den. |Når du går over fra et uttak til et innskudd, vil pengene bli deponert til målkontoene som er vist, i stedet for å bli trukket fra dem.', - 'convert_expl_w_t' => 'Ved konvertering fra uttak til overføring, vil pengene overføres fra kildekontoen til andre aktiva eller gjeld i stedet for å bli brukt på den opprinnelige utgiftskontoen.|Ved konvertering fra uttak til overføring, vil pengene overføres fra kildekontoene til andre aktiva eller gjeldskontoer i stedet for å bli brukt på den opprinnelige utgiftskontoen.', - 'convert_expl_d_w' => 'Når et innskudd blir konvertert til et uttak, vil pengene tas ut fra den viste kildekontoen i stedet for å bli satt inn på den.|Når et innskudd blir konvertert til et uttak, vil pengene tas ut fra de viste kildekontoene i stedet for å bli satt inn på dem.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => 'Transaksjonen er konvertert til et uttak', - 'converted_to_Deposit' => 'Transaksjonen er konvertert til et innskudd', - 'converted_to_Transfer' => 'Transaksjonen er konvertert til en overføring', - 'invalid_convert_selection' => 'Kontoen du har valgt er allerede brukt i denne transaksjonen eller finnes ikke.', - 'source_or_dest_invalid' => 'Finner ikke riktig transaksjonsdetaljer. Konvertering er ikke mulig.', - 'convert_to_withdrawal' => 'Konverter til et uttak', - 'convert_to_deposit' => 'Konverter til et innskudd', - 'convert_to_transfer' => 'Konverter til en overføring', + 'convert_is_already_type_Withdrawal' => 'Denne transaksjonen er allerede et uttak', + 'convert_is_already_type_Deposit' => 'Denne transaksjonen er allerede et innskudd', + 'convert_is_already_type_Transfer' => 'Denne transaksjonen er allerede en overføring', + 'convert_to_Withdrawal' => 'Konverter ":description" til et uttak', + 'convert_to_Deposit' => 'Konverter ":description" til et innskudd', + 'convert_to_Transfer' => 'Konverter ":description" til en overføring', + 'convert_options_WithdrawalDeposit' => 'Konverter et uttak til et innskudd', + 'convert_options_WithdrawalTransfer' => 'Konverter et uttak til en overføring', + 'convert_options_DepositTransfer' => 'Konverter et innskudd til en overføring', + 'convert_options_DepositWithdrawal' => 'Konverter et innskudd til et uttak', + 'convert_options_TransferWithdrawal' => 'Konverter en overføring til et uttak', + 'convert_options_TransferDeposit' => 'Konverter en overføring til et innskudd', + 'convert_Withdrawal_to_deposit' => 'Konverter dette uttaket til et innskudd', + 'convert_Withdrawal_to_transfer' => 'Konverter dette uttaket til en overføring', + 'convert_Deposit_to_withdrawal' => 'Konverter dette innskuddet til et uttak', + 'convert_Deposit_to_transfer' => 'Konverter dette innskuddet til en overføring', + 'convert_Transfer_to_deposit' => 'Konverter denne overføringen til et innskudd', + 'convert_Transfer_to_withdrawal' => 'Konverter denne overføringen til et uttak', + 'convert_please_set_revenue_source' => 'Vennligst velg inntektskontoen pengene vil komme fra.', + 'convert_please_set_asset_destination' => 'Vennligst velg aktivakontoen pengene skal gå til.', + 'convert_please_set_expense_destination' => 'Vennligst velg utgiftsskontoen pengene skal gå til.', + 'convert_please_set_asset_source' => 'Vennligst velg aktivakontoen pengene kommer fra.', + 'convert_expl_w_d' => 'Når du konverterer fra et uttak til et innskudd, blir pengene deponert på den angitte målkontoen, i stedet for å bli trukket ut av den. |Når du går over fra et uttak til et innskudd, vil pengene bli deponert til målkontoene som er vist, i stedet for å bli trukket fra dem.', + 'convert_expl_w_t' => 'Ved konvertering fra uttak til overføring, vil pengene overføres fra kildekontoen til andre aktiva eller gjeld i stedet for å bli brukt på den opprinnelige utgiftskontoen.|Ved konvertering fra uttak til overføring, vil pengene overføres fra kildekontoene til andre aktiva eller gjeldskontoer i stedet for å bli brukt på den opprinnelige utgiftskontoen.', + 'convert_expl_d_w' => 'Når et innskudd blir konvertert til et uttak, vil pengene tas ut fra den viste kildekontoen i stedet for å bli satt inn på den.|Når et innskudd blir konvertert til et uttak, vil pengene tas ut fra de viste kildekontoene i stedet for å bli satt inn på dem.', + 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', + 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'For å fullføre konverteringen, vennligst angi den nye kildekontoen under. For å fullføre konverteringen, må du angi de nye kildekontoene nedenfor.', + 'convert_select_destinations' => 'For å fullføre konverteringen må du velge den nye destinasjonskontoen under. For å fullføre konverteringen, velg de nye destinasjonskontoene nedenfor.', + 'converted_to_Withdrawal' => 'Transaksjonen er konvertert til et uttak', + 'converted_to_Deposit' => 'Transaksjonen er konvertert til et innskudd', + 'converted_to_Transfer' => 'Transaksjonen er konvertert til en overføring', + 'invalid_convert_selection' => 'Kontoen du har valgt er allerede brukt i denne transaksjonen eller finnes ikke.', + 'source_or_dest_invalid' => 'Finner ikke riktig transaksjonsdetaljer. Konvertering er ikke mulig.', + 'convert_to_withdrawal' => 'Konverter til et uttak', + 'convert_to_deposit' => 'Konverter til et innskudd', + 'convert_to_transfer' => 'Konverter til en overføring', // create new stuff: - 'create_new_withdrawal' => 'Opprett nytt uttak', - 'create_new_deposit' => 'Opprett nytt innskudd', - 'create_new_transfer' => 'Opprett ny overføring', - 'create_new_asset' => 'Opprett ny aktivakonto', - 'create_new_liabilities' => 'Opprett ny gjeld', - 'create_new_expense' => 'Opprett ny utgiftskonto', - 'create_new_revenue' => 'Opprett ny inntektskonto', - 'create_new_piggy_bank' => 'Opprett ny sparegris', - 'create_new_bill' => 'Opprett ny regning', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Opprett nytt uttak', + 'create_new_deposit' => 'Opprett nytt innskudd', + 'create_new_transfer' => 'Opprett ny overføring', + 'create_new_asset' => 'Opprett ny aktivakonto', + 'create_new_liabilities' => 'Opprett ny gjeld', + 'create_new_expense' => 'Opprett ny utgiftskonto', + 'create_new_revenue' => 'Opprett ny inntektskonto', + 'create_new_piggy_bank' => 'Opprett ny sparegris', + 'create_new_bill' => 'Opprett ny regning', + 'create_new_subscription' => 'Opprett nytt abonnement', + 'create_new_rule' => 'Opprett ny regel', // currencies: - 'create_currency' => 'Opprett en ny valuta', - 'store_currency' => 'Lagre ny valuta', - 'update_currency' => 'Oppdater valuta', - 'new_default_currency' => ':name er nå standardvaluta.', - 'cannot_delete_currency' => 'Kan ikke slette :name fordi det er fortsatt i bruk.', - 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', - 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', - 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', - 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', - 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', - 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', - 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', - 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', - 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', - 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', - 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', - 'deleted_currency' => 'Valuta :name slettet', - 'created_currency' => 'Valuta :name opprettet', - 'could_not_store_currency' => 'Kan ikke lagre den nye valutaen.', - 'updated_currency' => 'Valuta :name oppdatert', - 'ask_site_owner' => 'Spør :owner om å legge til, fjerne eller redigere valutaer.', - 'currencies_intro' => 'Firefly III støtter ulike valutaer som du kan definere og aktivere her.', - 'make_default_currency' => 'Sett som standard', - 'default_currency' => 'standard', - 'currency_is_disabled' => 'Deaktivert', - 'enable_currency' => 'Aktiver', - 'disable_currency' => 'Deaktiver', - 'currencies_default_disabled' => 'De fleste valutaene er deaktivert som standard. For å bruke dem, må du aktivere dem først.', - 'currency_is_now_enabled' => 'Valuta ":name" er aktivert', - 'currency_is_now_disabled' => 'Valuta ":name" er deaktivert', + 'create_currency' => 'Opprett en ny valuta', + 'store_currency' => 'Lagre ny valuta', + 'update_currency' => 'Oppdater valuta', + 'new_default_currency' => '":name" er nå standardvaluta.', + 'default_currency_failed' => 'Kunne ikke sette ":name" til standard valuta. Vennligst sjekk loggene.', + 'cannot_delete_currency' => 'Kan ikke slette :name fordi det er fortsatt i bruk.', + 'cannot_delete_fallback_currency' => ':name er systemet standardvaluta og kan ikke slettes.', + 'cannot_disable_currency_journals' => 'Kan ikke deaktivere :name fordi det er transaksjoner som fortsatt bruker den.', + 'cannot_disable_currency_last_left' => 'Kan ikke deaktivere :name fordi det er ingen andre aktiverte valutaer.', + 'cannot_disable_currency_account_meta' => 'Kan ikke deaktivere :name fordi den brukes i aktivakontoer.', + 'cannot_disable_currency_bills' => 'Kan ikke deaktivere :name fordi den brukes i regninger.', + 'cannot_disable_currency_recurring' => 'Kan ikke deaktivere :name fordi den brukes i gjentakende transaksjoner.', + 'cannot_disable_currency_available_budgets' => 'Kan ikke deaktivere :name fordi det brukes i tilgjengelige budsjetter.', + 'cannot_disable_currency_budget_limits' => 'Kan ikke deaktivere :name fordi det brukes i budsjettgrensene.', + 'cannot_disable_currency_current_default' => 'Kan ikke deaktivere :name fordi den er den gjeldende standardvalutaen.', + 'cannot_disable_currency_system_fallback' => 'Kan ikke deaktivere :name fordi den er systemets standardvaluta.', + 'disable_EUR_side_effects' => 'Euro er systemets nødvaluta. Å deaktivere den kan føre til utilsiktede bivirkninger og kan gjøre garantien ugyldig.', + 'deleted_currency' => 'Valuta :name slettet', + 'created_currency' => 'Valuta :name opprettet', + 'could_not_store_currency' => 'Kan ikke lagre den nye valutaen.', + 'updated_currency' => 'Valuta :name oppdatert', + 'ask_site_owner' => 'Spør :owner om å legge til, fjerne eller redigere valutaer.', + 'currencies_intro' => 'Firefly III støtter ulike valutaer som du kan definere og aktivere her.', + 'make_default_currency' => 'Sett som standard', + 'default_currency' => 'standard', + 'currency_is_disabled' => 'Deaktivert', + 'enable_currency' => 'Aktiver', + 'disable_currency' => 'Deaktiver', + 'currencies_default_disabled' => 'De fleste valutaene er deaktivert som standard. For å bruke dem, må du aktivere dem først.', + 'currency_is_now_enabled' => 'Valuta ":name" er aktivert', + 'could_not_enable_currency' => 'Kunne ikke aktivere valuta ":name". Vennligst se gjennom loggene.', + 'currency_is_now_disabled' => 'Valuta ":name" er deaktivert', + 'could_not_disable_currency' => 'Kan ikke deaktivere valuta ":name". Kanskje den fortsatt er i bruk?', // forms: - 'mandatoryFields' => 'Obligatoriske felter', - 'optionalFields' => 'Valgfrie felter', - 'options' => 'Alternativer', + 'mandatoryFields' => 'Obligatoriske felter', + 'optionalFields' => 'Valgfrie felter', + 'options' => 'Alternativer', // budgets: - 'daily_budgets' => 'Daily budgets', - 'weekly_budgets' => 'Weekly budgets', - 'monthly_budgets' => 'Monthly budgets', - 'quarterly_budgets' => 'Quarterly budgets', - 'half_year_budgets' => 'Half-yearly budgets', - 'yearly_budgets' => 'Yearly budgets', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', - 'total_available_budget' => 'Total available budget (between :start and :end)', - 'total_available_budget_in_currency' => 'Total available budget in :currency', - 'see_below' => 'se nedenfor', - 'create_new_budget' => 'Opprett et nytt budsjett', - 'store_new_budget' => 'Lagre nytt budsjett', - 'stored_new_budget' => 'Lagret nytt budsjett ":name"', - 'available_between' => 'Tilgjengelig mellom :start og :end', - 'transactionsWithoutBudget' => 'Utgifter uten budsjett', - 'transactions_no_budget' => 'Utgifter uten budsjett mellom :start og :end', - 'spent_between' => 'Already spent between :start and :end', - 'set_available_amount' => 'Sett tilgjengelig beløp', - 'update_available_amount' => 'Oppdater tilgjengelig beløp', - 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', - 'createBudget' => 'Nytt budsjett', - 'invalid_currency' => 'Dette er en ugyldig valuta', - 'invalid_amount' => 'Vennligst skriv inn et beløp', - 'set_ab' => 'Det tilgjengelige budsjettbeløpet er satt', - 'updated_ab' => 'Det tilgjengelige budsjettbeløpet har blitt oppdatert', - 'deleted_ab' => 'Det tilgjengelige budsjettbeløpet har blitt slettet', - 'deleted_bl' => 'Det budsjetterte beløpet er fjernet', - 'alt_currency_ab_create' => 'Sett tilgjengelig budsjett i annen valuta', - 'bl_create_btn' => 'Angi budsjett i annen valuta', - 'inactiveBudgets' => 'Inaktive budsjetter', - 'without_budget_between' => 'Transaksjoner uten et budsjett mellom :start og :end', - 'delete_budget' => 'Slett budsjett ":name"', - 'deleted_budget' => 'Slett budsjett ":name"', - 'edit_budget' => 'Rediger budsjett ":name"', - 'updated_budget' => 'Oppdater budsjett ":name"', - 'update_amount' => 'Oppdater beløp', - 'update_budget' => 'Oppdater budsjett', - 'update_budget_amount_range' => 'Oppdater (forventet) tilgjengelig beløp mellom :start og :end', - 'set_budget_limit_title' => 'Sett budsjettert beløp for budsjett :budget mellom :start og :end', - 'set_budget_limit' => 'Angi budsjettert beløp', - 'budget_period_navigator' => 'Periodenavigatør', - 'info_on_available_amount' => 'Hva har jeg tilgjengelig?', - 'available_amount_indication' => 'Bruk disse beløpene for å få en indikasjon på hva ditt totale budsjett kan være.', - 'suggested' => 'Foreslått', - 'average_between' => 'Gjennomsnitt mellom :start og :end', - 'transferred_in' => 'Overført (in)', - 'transferred_away' => 'Overført (borte)', - 'auto_budget_none' => 'Ingen automatisk budsjett', - 'auto_budget_reset' => 'Angi et fast beløp hver periode', - 'auto_budget_rollover' => 'Legg til et fast beløp hver periode', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Daglig', - 'auto_budget_period_weekly' => 'Ukentlig', - 'auto_budget_period_monthly' => 'Månedlig', - 'auto_budget_period_quarterly' => 'Kvartalsvis', - 'auto_budget_period_half_year' => 'Hvert halvår', - 'auto_budget_period_yearly' => 'Årlig', - 'auto_budget_help' => 'Du kan lese mer om denne funksjonen under hjelp. Klikk ikonet øverst til høyre (?).', - 'auto_budget_reset_icon' => 'Budsjettet blir fastsatt periodisk', - 'auto_budget_rollover_icon' => 'Budsjettbeløpet vil øke periodisk', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Fjern budsjettert beløp i :currency', + 'daily_budgets' => 'Daglige budsjetter', + 'weekly_budgets' => 'Ukentlige budsjetter', + 'monthly_budgets' => 'Månedlige budsjetter', + 'quarterly_budgets' => 'Kvartalsvise budsjetter', + 'half_year_budgets' => 'Halvårlige budsjetter', + 'yearly_budgets' => 'Årlige budsjetter', + 'other_budgets' => 'Egne tidsinnstilte budsjetter', + 'budget_limit_not_in_range' => 'Dette beløpet gjelder fra :start til :end:', + 'total_available_budget' => 'Totalt tilgjengelig budsjett (mellom :start og :end)', + 'total_available_budget_in_currency' => 'Totalt tilgjengelig budsjett i :currency', + 'see_below' => 'se nedenfor', + 'create_new_budget' => 'Opprett et nytt budsjett', + 'store_new_budget' => 'Lagre nytt budsjett', + 'stored_new_budget' => 'Lagret nytt budsjett ":name"', + 'available_between' => 'Tilgjengelig mellom :start og :end', + 'transactionsWithoutBudget' => 'Utgifter uten budsjett', + 'transactions_no_budget' => 'Utgifter uten budsjett mellom :start og :end', + 'spent_between' => 'Allerede brukt mellom :start og :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Sett tilgjengelig beløp', + 'update_available_amount' => 'Oppdater tilgjengelig beløp', + 'ab_basic_modal_explain' => 'Bruk dette skjemaet til å angi hvor mye du forventer å kunne budsjettere (i :currency) i den angitte perioden.', + 'createBudget' => 'Nytt budsjett', + 'invalid_currency' => 'Dette er en ugyldig valuta', + 'invalid_amount' => 'Vennligst skriv inn et beløp', + 'set_ab' => 'Det tilgjengelige budsjettbeløpet er satt', + 'updated_ab' => 'Det tilgjengelige budsjettbeløpet har blitt oppdatert', + 'deleted_ab' => 'Det tilgjengelige budsjettbeløpet har blitt slettet', + 'deleted_bl' => 'Det budsjetterte beløpet er fjernet', + 'alt_currency_ab_create' => 'Sett tilgjengelig budsjett i annen valuta', + 'bl_create_btn' => 'Angi budsjett i annen valuta', + 'inactiveBudgets' => 'Inaktive budsjetter', + 'without_budget_between' => 'Transaksjoner uten et budsjett mellom :start og :end', + 'delete_budget' => 'Slett budsjett ":name"', + 'deleted_budget' => 'Slett budsjett ":name"', + 'edit_budget' => 'Rediger budsjett ":name"', + 'updated_budget' => 'Oppdater budsjett ":name"', + 'update_amount' => 'Oppdater beløp', + 'update_budget' => 'Oppdater budsjett', + 'update_budget_amount_range' => 'Oppdater (forventet) tilgjengelig beløp mellom :start og :end', + 'set_budget_limit_title' => 'Sett budsjettert beløp for budsjett :budget mellom :start og :end', + 'set_budget_limit' => 'Angi budsjettert beløp', + 'budget_period_navigator' => 'Periodenavigatør', + 'info_on_available_amount' => 'Hva har jeg tilgjengelig?', + 'available_amount_indication' => 'Bruk disse beløpene for å få en indikasjon på hva ditt totale budsjett kan være.', + 'suggested' => 'Foreslått', + 'average_between' => 'Gjennomsnitt mellom :start og :end', + 'transferred_in' => 'Overført (in)', + 'transferred_away' => 'Overført (borte)', + 'auto_budget_none' => 'Ingen automatisk budsjett', + 'auto_budget_reset' => 'Angi et fast beløp hver periode', + 'auto_budget_rollover' => 'Legg til et fast beløp hver periode', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Daglig', + 'auto_budget_period_weekly' => 'Ukentlig', + 'auto_budget_period_monthly' => 'Månedlig', + 'auto_budget_period_quarterly' => 'Kvartalsvis', + 'auto_budget_period_half_year' => 'Hvert halvår', + 'auto_budget_period_yearly' => 'Årlig', + 'auto_budget_help' => 'Du kan lese mer om denne funksjonen under hjelp. Klikk ikonet øverst til høyre (?).', + 'auto_budget_reset_icon' => 'Budsjettet blir fastsatt periodisk', + 'auto_budget_rollover_icon' => 'Budsjettbeløpet vil øke periodisk', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Fjern budsjettert beløp i :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Ikke forventet denne perioden', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Ikke (enda)', - 'visit_bill' => 'Se regningen ":name" på Firefly III', - 'match_between_amounts' => 'Regning matcher transaksjoner mellom :low og :high.', - 'running_again_loss' => 'Tidligere koblede transaksjoner til denne regningen kan miste sin forbindelse, hvis de (ikke lenger) stemmer overens med regel(ene).', - 'bill_related_rules' => 'Regler relatert til denne regningen', - 'repeats' => 'Gjentas', - 'bill_end_date_help' => 'Valgfritt felt. Regningen er ventet å være over på denne datoen.', - 'bill_extension_date_help' => 'Valgfritt felt. Regningen må utvides (eller annulleres) på eller før denne datoen.', - 'bill_end_index_line' => 'Denne regningen avsluttes :date', - 'bill_extension_index_line' => 'Denne regningen må utvides eller kanselleres på :date', - 'connected_journals' => 'Tilknyttede transaksjoner', - 'auto_match_on' => 'Automatisk funnet av Firefly III', - 'auto_match_off' => 'Ikke automatisk funnet av Firefly III', - 'next_expected_match' => 'Neste forventede treff', - 'delete_bill' => 'Slett regning ":name"', - 'deleted_bill' => 'Slettet regning ":name"', - 'edit_bill' => 'Rediger regning ":name"', - 'more' => 'Mer', - 'rescan_old' => 'Kjør regler igjen, på alle transaksjoner', - 'update_bill' => 'Oppdater regning', - 'updated_bill' => 'Oppdatert regning ":name"', - 'store_new_bill' => 'Lagre ny regning', - 'stored_new_bill' => 'Lagret ny regning ":name"', - 'cannot_scan_inactive_bill' => 'Inaktive regninger kan ikke skannes.', - 'rescanned_bill' => 'Skannet alt på nytt, og koblet :count transaksjon til regningen |Reskanned alt, og linket :count transaksjon til regningen.', - 'average_bill_amount_year' => 'Gjennomsnittlig regningsbeløp (:year)', - 'average_bill_amount_overall' => 'Gjennomsnittlig regningsbeløp (alt i alt)', - 'bill_is_active' => 'Regning er aktiv', - 'bill_expected_between' => 'Forventet mellom :start og :end', - 'bill_will_automatch' => 'Regningen vil automatisk knyttes til samsvarende transaksjoner', - 'skips_over' => 'hopper over', - 'bill_store_error' => 'Det oppsto en uventet feil mens du lagret den nye regningen. Vennligst sjekk loggfilene', - 'list_inactive_rule' => 'inaktiv regel', - 'bill_edit_rules' => 'Firefly III vil forsøke å redigere regelen også relatert til denne regningen. Hvis du har endret denne regelen selv, vil Firefly III ikke endre noe. Firefly III vil forsøke å redigere reglene for :count også knyttet til denne regningen. Om du har endret disse reglene selv, vil ikke Firefly III endre noe.', - 'bill_expected_date' => 'Forventet :date', - 'bill_expected_date_js' => 'Forventet {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Betalt den {date}', - 'bill_repeats_weekly' => 'Gjentas ukentlig', - 'bill_repeats_monthly' => 'Gjentas månedlig', - 'bill_repeats_quarterly' => 'Gjentas kvartalsvis', - 'bill_repeats_half-year' => 'Gjentas hvert halvår', - 'bill_repeats_yearly' => 'Gjentas årlig', - 'bill_repeats_weekly_other' => 'Gjentas annenhver uke', - 'bill_repeats_monthly_other' => 'Gjentas annenhver måned', - 'bill_repeats_quarterly_other' => 'Gjentas annenhver kvartal', - 'bill_repeats_half-year_other' => 'Gjentas årlig', - 'bill_repeats_yearly_other' => 'Gjentas annenhver år', - 'bill_repeats_weekly_skip' => 'Gjentas hver {skip} uke', - 'bill_repeats_monthly_skip' => 'Gjentas hver {skip} måned', - 'bill_repeats_quarterly_skip' => 'Gjentas annenhver {skip} kvartal', - 'bill_repeats_half-year_skip' => 'Gjentas hvert {skip} halvår', - 'bill_repeats_yearly_skip' => 'Gjentas hvert {skip} år', - 'subscriptions' => 'Abonnementer', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'For alltid', - 'extension_date_is' => 'Forlengelsesdato er {date}', + 'subscription' => 'Abonnement', + 'not_expected_period' => 'Ikke forventet denne perioden', + 'subscriptions_in_group' => 'Abonnementer i gruppe "%{title}"', + 'subscr_expected_x_times' => 'Forvent å betale %{amount}, %{times} ganger denne perioden', + 'not_or_not_yet' => 'Ikke (enda)', + 'visit_bill' => 'Se regningen ":name" på Firefly III', + 'match_between_amounts' => 'Regning matcher transaksjoner mellom :low og :high.', + 'running_again_loss' => 'Tidligere koblede transaksjoner til denne regningen kan miste sin forbindelse, hvis de (ikke lenger) stemmer overens med regel(ene).', + 'bill_related_rules' => 'Regler relatert til denne regningen', + 'repeats' => 'Gjentas', + 'bill_end_date_help' => 'Valgfritt felt. Regningen er ventet å være over på denne datoen.', + 'bill_extension_date_help' => 'Valgfritt felt. Regningen må utvides (eller annulleres) på eller før denne datoen.', + 'bill_end_index_line' => 'Denne regningen avsluttes :date', + 'bill_extension_index_line' => 'Denne regningen må utvides eller kanselleres på :date', + 'connected_journals' => 'Tilknyttede transaksjoner', + 'auto_match_on' => 'Automatisk funnet av Firefly III', + 'auto_match_off' => 'Ikke automatisk funnet av Firefly III', + 'next_expected_match' => 'Neste forventede treff', + 'delete_bill' => 'Slett regning ":name"', + 'deleted_bill' => 'Slettet regning ":name"', + 'edit_bill' => 'Rediger regning ":name"', + 'more' => 'Mer', + 'rescan_old' => 'Kjør regler igjen, på alle transaksjoner', + 'update_bill' => 'Oppdater regning', + 'updated_bill' => 'Oppdatert regning ":name"', + 'store_new_bill' => 'Lagre ny regning', + 'stored_new_bill' => 'Lagret ny regning ":name"', + 'cannot_scan_inactive_bill' => 'Inaktive regninger kan ikke skannes.', + 'rescanned_bill' => 'Skannet alt på nytt, og koblet :count transaksjon til regningen |Reskanned alt, og linket :count transaksjon til regningen.', + 'average_bill_amount_year' => 'Gjennomsnittlig regningsbeløp (:year)', + 'average_bill_amount_overall' => 'Gjennomsnittlig regningsbeløp (alt i alt)', + 'bill_is_active' => 'Regning er aktiv', + 'bill_expected_between' => 'Forventet mellom :start og :end', + 'bill_will_automatch' => 'Regningen vil automatisk knyttes til samsvarende transaksjoner', + 'skips_over' => 'hopper over', + 'bill_store_error' => 'Det oppsto en uventet feil mens du lagret den nye regningen. Vennligst sjekk loggfilene', + 'list_inactive_rule' => 'inaktiv regel', + 'bill_edit_rules' => 'Firefly III vil forsøke å redigere regelen også relatert til denne regningen. Hvis du har endret denne regelen selv, vil Firefly III ikke endre noe. Firefly III vil forsøke å redigere reglene for :count også knyttet til denne regningen. Om du har endret disse reglene selv, vil ikke Firefly III endre noe.', + 'bill_expected_date' => 'Forventet :date', + 'bill_expected_date_js' => 'Forventet {date}', + 'expected_amount' => '(Forventet) beløp', + 'bill_paid_on' => 'Betalt den {date}', + 'bill_repeats_weekly' => 'Gjentas ukentlig', + 'bill_repeats_monthly' => 'Gjentas månedlig', + 'bill_repeats_quarterly' => 'Gjentas kvartalsvis', + 'bill_repeats_half-year' => 'Gjentas hvert halvår', + 'bill_repeats_yearly' => 'Gjentas årlig', + 'bill_repeats_weekly_other' => 'Gjentas annenhver uke', + 'bill_repeats_monthly_other' => 'Gjentas annenhver måned', + 'bill_repeats_quarterly_other' => 'Gjentas annenhver kvartal', + 'bill_repeats_half-year_other' => 'Gjentas årlig', + 'bill_repeats_yearly_other' => 'Gjentas annenhver år', + 'bill_repeats_weekly_skip' => 'Gjentas hver {skip} uke', + 'bill_repeats_monthly_skip' => 'Gjentas hver {skip} måned', + 'bill_repeats_quarterly_skip' => 'Gjentas annenhver {skip} kvartal', + 'bill_repeats_half-year_skip' => 'Gjentas hvert {skip} halvår', + 'bill_repeats_yearly_skip' => 'Gjentas hvert {skip} år', + 'subscriptions' => 'Abonnementer', + 'go_to_subscriptions' => 'Gå til dine abonnementer', + 'forever' => 'For alltid', + 'extension_date_is' => 'Forlengelsesdato er {date}', // accounts: - 'i_am_owed_amount' => 'Jeg er skyldig beløp', - 'i_owe_amount' => 'Jeg skylder beløp', - 'inactive_account_link' => 'Du har :count inaktiv (arkivert) konto, som du kan se på denne separate siden. Du har :count inaktive (arkiverte) kontoer som du kan se på denne separate siden.', - 'all_accounts_inactive' => 'Dette er dine inaktive kontoer.', - 'active_account_link' => 'Denne lenken går tilbake til de aktive kontoene.', - 'account_missing_transaction' => 'Konto #:id (":name") kan ikke bli vist direkte, Firefly mangler omdirigerings informasjon.', - 'cc_monthly_payment_date_help' => 'Velg et år og en måned, det ignoreres likevel. Bare dagen i måneden er relevant.', - 'details_for_asset' => 'Detaljer for brukskonto ":name"', - 'details_for_expense' => 'Detaljer for utgiftskonto ":name"', - 'details_for_revenue' => 'Detaljer for inntektskonto ":name"', - 'details_for_cash' => 'Detaljer for kontantkonto ":name"', - 'store_new_asset_account' => 'Lagre ny brukskonto', - 'store_new_expense_account' => 'Lagre ny utgiftskonto', - 'store_new_revenue_account' => 'Lagre ny inntektskonto', - 'edit_asset_account' => 'Rediger brukskonto ":name"', - 'edit_expense_account' => 'Rediger utgiftskonto ":name"', - 'edit_revenue_account' => 'Rediger inntektskonto ":name"', - 'delete_asset_account' => 'Slett brukskonto ":name"', - 'delete_expense_account' => 'Slett utgiftskonto ":name"', - 'delete_revenue_account' => 'Slett inntektskonto ":name"', - 'delete_liabilities_account' => 'Slett gjeld ":name"', - 'asset_deleted' => 'Sletting av brukskonto ":name" var vellykket', - 'account_deleted' => 'Sletting av konto ":name" var vellykket', - 'expense_deleted' => 'Sletting av utgiftskonto ":name" var vellykket', - 'revenue_deleted' => 'Sletting av inntekskonto ":name" var vellykket', - 'update_asset_account' => 'Oppdater aktivakonto', - 'update_undefined_account' => 'Oppdater konto', - 'update_liabilities_account' => 'Oppdater gjeld', - 'update_expense_account' => 'Oppdater utgiftskonto', - 'update_revenue_account' => 'Oppdater inntektskonto', - 'make_new_asset_account' => 'Opprett en ny aktivakonto', - 'make_new_expense_account' => 'Opprett en ny utgiftskonto', - 'make_new_revenue_account' => 'Opprett en ny inntektskonto', - 'make_new_liabilities_account' => 'Opprett ny gjeld', - 'asset_accounts' => 'Aktivakontoer', - 'undefined_accounts' => 'Kontoer', - 'asset_accounts_inactive' => 'Eiendelskontoer (inaktive)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Utgiftskontoer', - 'expense_accounts_inactive' => 'Utgiftskontoer (inaktive)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Inntektskontoer', - 'revenue_accounts_inactive' => 'Inntektskontoer (inaktive)', - 'cash_accounts' => 'Kontantkontoer', - 'Cash account' => 'Kontantkonto', - 'liabilities_accounts' => 'Gjeldskonto', - 'liabilities_accounts_inactive' => 'Gjeldskonto (inaktive)', - 'reconcile_account' => 'Avstem konto ":account"', - 'overview_of_reconcile_modal' => 'Balanseoversikt', - 'delete_reconciliation' => 'Slett avstemming', - 'update_reconciliation' => 'Oppdater avstemming', - 'amount_cannot_be_zero' => 'Beløpet kan ikke være null', - 'end_of_reconcile_period' => 'Slutten av balanse perioden :period', - 'start_of_reconcile_period' => 'Starten av balanse perioden :period', - 'start_balance' => 'Startsaldo', - 'end_balance' => 'Sluttsaldo', - 'update_balance_dates_instruction' => 'Koble beløpene og datoene over til kontoutskriften, og trykk på "Start avstemning"', - 'select_transactions_instruction' => 'Velg transaksjonene som vises på kontoutskriften.', - 'select_range_and_balance' => 'Kontroller først datoperiode og saldo. Deretter trykker du på "Start avstemning"', - 'date_change_instruction' => 'Hvis du endrer datointervallet nå, vil du miste all foreløpig framdrift.', - 'update_selection' => 'Oppdater utvalg', - 'store_reconcile' => 'Lagre avstemming', - 'reconciliation_transaction' => 'Avstemmingstransaksjon', - 'Reconciliation' => 'Avstemming', - 'reconciliation' => 'Avstemming', - 'reconcile_options' => 'Avstemmingsalternativer', - 'reconcile_range' => 'Avstemningsområde', - 'start_reconcile' => 'Start avstemming', - 'cash_account_type' => 'Kontanter', - 'cash' => 'kontanter', - 'cant_find_redirect_account' => 'Firefly III prøvde å omdirigere deg, men kan ikke. Beklager det. Tilbake til indeksen.', - 'account_type' => 'Kontotype', - 'save_transactions_by_moving' => 'Lagre denne transaksjonen ved å flytte den til en annen konto:|Lagre disse transaksjonene ved å flytte dem til en annen konto:', - 'save_transactions_by_moving_js' => 'Ingen transaksjoner|Lagre denne transaksjonen ved å flytte den til en annen konto. |Lagre disse transaksjonene ved å flytte dem til en annen konto.', - 'stored_new_account' => 'Ny konto:name: lagret!', - 'stored_new_account_js' => 'Ny konto "{name}" lagret!', - 'updated_account' => 'Oppdatert konto ":name"', - 'updated_account_js' => 'Oppdatert konto "{title}".', - 'credit_card_options' => 'Kredittkortvalg', - 'no_transactions_account' => 'Det finnes ingen transaksjoner (i denne perioden) for brukskonto ":name".', - 'no_transactions_period' => 'Det finnes ingen transaksjoner (i denne perioden).', - 'no_data_for_chart' => 'Det er ikke nok informasjon (ennå) til å generere dette diagrammet.', - 'select_at_least_one_account' => 'Velg minst en brukskonto', - 'select_at_least_one_category' => 'Velg minst én kategori', - 'select_at_least_one_budget' => 'Velg minst ett budsjett', - 'select_at_least_one_tag' => 'Velg minst én tag', - 'select_at_least_one_expense' => 'Velg minst en kombinasjon av utgift/inntekts konto. Hvis du ikke har en (listen er tom) så vil ikke denne rapporten være tilgjengelig.', - 'account_default_currency' => 'Dette blir standard valuta for denne kontoen.', - 'reconcile_has_more' => 'Din Firefly III-hovedbok har mer penger i seg enn banken hevder du burde ha. Det finnes flere alternativer. Vennligst velg hva du skal gjøre. Deretter trykker du på "Bekreft avstemming".', - 'reconcile_has_less' => 'Din Firefly III-hovedbok har mindre penger i seg enn banken hevder du burde ha. Det finnes flere alternativer. Vennligst velg hva du skal gjøre. Deretter trykker du på "Bekreft avstemming".', - 'reconcile_is_equal' => 'Din Firefly III-hovedbok og dine kontoutskrifter samsvarer. Det er ingenting du trenger å gjøre. Vennligst trykk "Bekreft avstemming" for å fortsette.', - 'create_pos_reconcile_transaction' => 'Fjern de valgte transaksjonene, og opprett en korreksjon som legger til :amount til denne aktivakontoen.', - 'create_neg_reconcile_transaction' => 'Fjern de valgte transaksjonene, og opprett en korreksjon som tar bort :amount fra denne aktivakontoen.', - 'reconcile_do_nothing' => 'Fjern de valgte transaksjonene, men ikke korriger.', - 'reconcile_go_back' => 'Du kan alltid redigere eller slette en korreksjon senere.', - 'must_be_asset_account' => 'Du kan bare avstemme aktivakontoer', - 'reconciliation_stored' => 'Avstemming lagret', - 'reconciliation_error' => 'På grunn av en feil ble transaksjonene markert som avstemt, men korrigeringen har ikke blitt lagret: :error.', - 'reconciliation_transaction_title' => 'Avstemming (:from til :to)', - 'sum_of_reconciliation' => 'Sum av avstemming', - 'reconcile_this_account' => 'Avstem denne kontoen', - 'reconcile' => 'Avstem', - 'show' => 'Vis', - 'confirm_reconciliation' => 'Bekreft avstemming', - 'submitted_start_balance' => 'Innsendt startsaldo', - 'selected_transactions' => 'Valgte transaksjoner (:count)', - 'already_cleared_transactions' => 'Tidligere ryddet transaksjoner (:count)', - 'submitted_end_balance' => 'Innsendt sluttsaldo', - 'initial_balance_description' => 'Start saldo for ":account"', - 'liability_credit_description' => 'Gjeld på lån ":account"', - 'interest_calc_' => 'ukjent', - 'interest_calc_daily' => 'Per dag', - 'interest_calc_monthly' => 'Per måned', - 'interest_calc_yearly' => 'Per år', - 'interest_calc_weekly' => 'Per uke', - 'interest_calc_half-year' => 'Per halvår', - 'interest_calc_quarterly' => 'Per kvartal', - 'initial_balance_account' => 'Inngående balanse for :account', - 'list_options' => 'Listealternativer', + 'i_am_owed_amount' => 'Jeg er skyldig beløp', + 'i_owe_amount' => 'Jeg skylder beløp', + 'inactive_account_link' => 'Du har :count inaktiv (arkivert) konto, som du kan se på denne separate siden. Du har :count inaktive (arkiverte) kontoer som du kan se på denne separate siden.', + 'all_accounts_inactive' => 'Dette er dine inaktive kontoer.', + 'active_account_link' => 'Denne lenken går tilbake til de aktive kontoene.', + 'account_missing_transaction' => 'Konto #:id (":name") kan ikke bli vist direkte, Firefly mangler omdirigerings informasjon.', + 'cc_monthly_payment_date_help' => 'Velg et år og en måned, det ignoreres likevel. Bare dagen i måneden er relevant.', + 'details_for_asset' => 'Detaljer for brukskonto ":name"', + 'details_for_expense' => 'Detaljer for utgiftskonto ":name"', + 'details_for_revenue' => 'Detaljer for inntektskonto ":name"', + 'details_for_cash' => 'Detaljer for kontantkonto ":name"', + 'store_new_asset_account' => 'Lagre ny brukskonto', + 'store_new_expense_account' => 'Lagre ny utgiftskonto', + 'store_new_revenue_account' => 'Lagre ny inntektskonto', + 'edit_asset_account' => 'Rediger brukskonto ":name"', + 'edit_expense_account' => 'Rediger utgiftskonto ":name"', + 'edit_revenue_account' => 'Rediger inntektskonto ":name"', + 'delete_asset_account' => 'Slett brukskonto ":name"', + 'delete_expense_account' => 'Slett utgiftskonto ":name"', + 'delete_revenue_account' => 'Slett inntektskonto ":name"', + 'delete_liabilities_account' => 'Slett gjeld ":name"', + 'asset_deleted' => 'Sletting av brukskonto ":name" var vellykket', + 'account_deleted' => 'Sletting av konto ":name" var vellykket', + 'expense_deleted' => 'Sletting av utgiftskonto ":name" var vellykket', + 'revenue_deleted' => 'Sletting av inntekskonto ":name" var vellykket', + 'update_asset_account' => 'Oppdater aktivakonto', + 'update_undefined_account' => 'Oppdater konto', + 'update_liabilities_account' => 'Oppdater gjeld', + 'update_expense_account' => 'Oppdater utgiftskonto', + 'update_revenue_account' => 'Oppdater inntektskonto', + 'make_new_asset_account' => 'Opprett en ny aktivakonto', + 'make_new_expense_account' => 'Opprett en ny utgiftskonto', + 'make_new_revenue_account' => 'Opprett en ny inntektskonto', + 'make_new_liabilities_account' => 'Opprett ny gjeld', + 'asset_accounts' => 'Aktivakontoer', + 'undefined_accounts' => 'Kontoer', + 'asset_accounts_inactive' => 'Eiendelskontoer (inaktive)', + 'expense_account' => 'Utgiftskonto', + 'expense_accounts' => 'Utgiftskontoer', + 'expense_accounts_inactive' => 'Utgiftskontoer (inaktive)', + 'revenue_account' => 'Inntektskonto', + 'revenue_accounts' => 'Inntektskontoer', + 'revenue_accounts_inactive' => 'Inntektskontoer (inaktive)', + 'cash_accounts' => 'Kontantkontoer', + 'Cash account' => 'Kontantkonto', + 'liabilities_accounts' => 'Gjeldskonto', + 'liabilities_accounts_inactive' => 'Gjeldskonto (inaktive)', + 'reconcile_account' => 'Avstem konto ":account"', + 'overview_of_reconcile_modal' => 'Balanseoversikt', + 'delete_reconciliation' => 'Slett avstemming', + 'update_reconciliation' => 'Oppdater avstemming', + 'amount_cannot_be_zero' => 'Beløpet kan ikke være null', + 'end_of_reconcile_period' => 'Slutten av balanse perioden :period', + 'start_of_reconcile_period' => 'Starten av balanse perioden :period', + 'start_balance' => 'Startsaldo', + 'end_balance' => 'Sluttsaldo', + 'update_balance_dates_instruction' => 'Koble beløpene og datoene over til kontoutskriften, og trykk på "Start avstemning"', + 'select_transactions_instruction' => 'Velg transaksjonene som vises på kontoutskriften.', + 'select_range_and_balance' => 'Kontroller først datoperiode og saldo. Deretter trykker du på "Start avstemning"', + 'date_change_instruction' => 'Hvis du endrer datointervallet nå, vil du miste all foreløpig framdrift.', + 'update_selection' => 'Oppdater utvalg', + 'store_reconcile' => 'Lagre avstemming', + 'reconciliation_transaction' => 'Avstemmingstransaksjon', + 'Reconciliation' => 'Avstemming', + 'reconciliation' => 'Avstemming', + 'reconcile_options' => 'Avstemmingsalternativer', + 'reconcile_range' => 'Avstemningsområde', + 'start_reconcile' => 'Start avstemming', + 'cash_account_type' => 'Kontanter', + 'cash' => 'kontanter', + 'cant_find_redirect_account' => 'Firefly III prøvde å omdirigere deg, men kan ikke. Beklager det. Tilbake til indeksen.', + 'account_type' => 'Kontotype', + 'save_transactions_by_moving' => 'Lagre denne transaksjonen ved å flytte den til en annen konto:|Lagre disse transaksjonene ved å flytte dem til en annen konto:', + 'save_transactions_by_moving_js' => 'Ingen transaksjoner|Lagre denne transaksjonen ved å flytte den til en annen konto. |Lagre disse transaksjonene ved å flytte dem til en annen konto.', + 'stored_new_account' => 'Ny konto:name: lagret!', + 'stored_new_account_js' => 'Ny konto "{name}" lagret!', + 'updated_account' => 'Oppdatert konto ":name"', + 'updated_account_js' => 'Oppdatert konto "{title}".', + 'credit_card_options' => 'Kredittkortvalg', + 'no_transactions_account' => 'Det finnes ingen transaksjoner (i denne perioden) for brukskonto ":name".', + 'no_transactions_period' => 'Det finnes ingen transaksjoner (i denne perioden).', + 'no_data_for_chart' => 'Det er ikke nok informasjon (ennå) til å generere dette diagrammet.', + 'select_at_least_one_account' => 'Velg minst en brukskonto', + 'select_at_least_one_category' => 'Velg minst én kategori', + 'select_at_least_one_budget' => 'Velg minst ett budsjett', + 'select_at_least_one_tag' => 'Velg minst én tag', + 'select_at_least_one_expense' => 'Velg minst en kombinasjon av utgift/inntekts konto. Hvis du ikke har en (listen er tom) så vil ikke denne rapporten være tilgjengelig.', + 'account_default_currency' => 'Dette blir standard valuta for denne kontoen.', + 'reconcile_has_more' => 'Din Firefly III-hovedbok har mer penger i seg enn banken hevder du burde ha. Det finnes flere alternativer. Vennligst velg hva du skal gjøre. Deretter trykker du på "Bekreft avstemming".', + 'reconcile_has_less' => 'Din Firefly III-hovedbok har mindre penger i seg enn banken hevder du burde ha. Det finnes flere alternativer. Vennligst velg hva du skal gjøre. Deretter trykker du på "Bekreft avstemming".', + 'reconcile_is_equal' => 'Din Firefly III-hovedbok og dine kontoutskrifter samsvarer. Det er ingenting du trenger å gjøre. Vennligst trykk "Bekreft avstemming" for å fortsette.', + 'create_pos_reconcile_transaction' => 'Fjern de valgte transaksjonene, og opprett en korreksjon som legger til :amount til denne aktivakontoen.', + 'create_neg_reconcile_transaction' => 'Fjern de valgte transaksjonene, og opprett en korreksjon som tar bort :amount fra denne aktivakontoen.', + 'reconcile_do_nothing' => 'Fjern de valgte transaksjonene, men ikke korriger.', + 'reconcile_go_back' => 'Du kan alltid redigere eller slette en korreksjon senere.', + 'must_be_asset_account' => 'Du kan bare avstemme aktivakontoer', + 'reconciliation_stored' => 'Avstemming lagret', + 'reconciliation_error' => 'På grunn av en feil ble transaksjonene markert som avstemt, men korrigeringen har ikke blitt lagret: :error.', + 'reconciliation_transaction_title' => 'Avstemming (:from til :to)', + 'sum_of_reconciliation' => 'Sum av avstemming', + 'reconcile_this_account' => 'Avstem denne kontoen', + 'reconcile' => 'Avstem', + 'show' => 'Vis', + 'confirm_reconciliation' => 'Bekreft avstemming', + 'submitted_start_balance' => 'Innsendt startsaldo', + 'selected_transactions' => 'Valgte transaksjoner (:count)', + 'already_cleared_transactions' => 'Tidligere ryddet transaksjoner (:count)', + 'submitted_end_balance' => 'Innsendt sluttsaldo', + 'initial_balance_description' => 'Start saldo for ":account"', + 'liability_credit_description' => 'Gjeld på lån ":account"', + 'interest_calc_' => 'ukjent', + 'interest_calc_daily' => 'Per dag', + 'interest_calc_monthly' => 'Per måned', + 'interest_calc_yearly' => 'Per år', + 'interest_calc_weekly' => 'Per uke', + 'interest_calc_half-year' => 'Per halvår', + 'interest_calc_quarterly' => 'Per kvartal', + 'initial_balance_account' => 'Inngående balanse for :account', + 'list_options' => 'Listealternativer', // categories: - 'new_category' => 'Ny kategori', - 'create_new_category' => 'Opprett en ny kategori', - 'without_category' => 'Uten kategori', - 'update_category' => 'Oppdater kategori', - 'updated_category' => 'Oppdatert kategori ":name"', - 'categories' => 'Kategorier', - 'edit_category' => 'Rediger kategori ":name"', - 'no_category' => '(ingen kategori)', - 'unknown_category_plain' => 'No category', - 'category' => 'Kategori', - 'delete_category' => 'Slett kategori ":name"', - 'deleted_category' => 'Slettet kategori ":name"', - 'store_category' => 'Lagre ny kategori', - 'stored_category' => 'Lagret ny kategori ":name"', - 'without_category_between' => 'Uten kategori mellom :start og :end', + 'new_category' => 'Ny kategori', + 'create_new_category' => 'Opprett en ny kategori', + 'without_category' => 'Uten kategori', + 'update_category' => 'Oppdater kategori', + 'updated_category' => 'Oppdatert kategori ":name"', + 'categories' => 'Kategorier', + 'edit_category' => 'Rediger kategori ":name"', + 'no_category' => '(ingen kategori)', + 'unknown_category_plain' => 'Ingen kategori', + 'category' => 'Kategori', + 'delete_category' => 'Slett kategori ":name"', + 'deleted_category' => 'Slettet kategori ":name"', + 'store_category' => 'Lagre ny kategori', + 'stored_category' => 'Lagret ny kategori ":name"', + 'without_category_between' => 'Uten kategori mellom :start og :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Oppdater uttak', - 'update_deposit' => 'Oppdater innskudd', - 'update_transaction' => 'Oppdater transaksjonen', - 'update_transfer' => 'Oppdater overføring', - 'updated_withdrawal' => 'Oppdatert uttak ":description"', - 'updated_deposit' => 'Oppdatert innskudd ":description"', - 'updated_transfer' => 'Oppdatert overføring ":description"', - 'no_changes_withdrawal' => 'Uttak ":description" ble ikke endret.', - 'no_changes_deposit' => 'Innskudd ":description" ble ikke endret.', - 'no_changes_transfer' => 'Overføring ":description" ble ikke endret.', - 'delete_withdrawal' => 'Slett uttak ":description"', - 'delete_deposit' => 'Slett innskudd ":description"', - 'delete_transfer' => 'Slett overføring ":description"', - 'deleted_withdrawal' => 'Slettet uttak ":description"', - 'deleted_deposit' => 'Slettet innskudd ":description"', - 'deleted_transfer' => 'Slettet overføring ":description"', - 'deleted_reconciliation' => 'Slettet avstemmingstransaksjon ":description"', - 'stored_journal' => 'Opprettet ny transaksjon ":description"', - 'stored_journal_no_descr' => 'Vellykket! Ny transaksjon er opprettet', - 'updated_journal_no_descr' => 'Transaksjonen din ble oppdatert', - 'select_transactions' => 'Velg transaksjoner', - 'rule_group_select_transactions' => 'Påfør ":title" på transaksjonene', - 'rule_select_transactions' => 'Påfør ":title" på transaksjonene', - 'stop_selection' => 'Stop valg av transaksjoner', - 'reconcile_selected' => 'Avstem', - 'mass_delete_journals' => 'Slett flere transaksjoner', - 'mass_edit_journals' => 'Rediger flere transaksjoner', - 'mass_bulk_journals' => 'Rediger flere transaksjoner samtidig', - 'mass_bulk_journals_explain' => 'Dette skjemaet lar deg endre egenskaper for transaksjonene nedenfor i en oppdatering. Alle transaksjonene i tabellen vil bli oppdatert når du endrer parametrene du ser her.', - 'part_of_split' => 'Denne transaksjonen er en del av en delt transaksjon. Hvis du ikke har valgt alle delene, kan du ende opp med å endre bare halvparten av transaksjonen.', - 'bulk_set_new_values' => 'Bruk innstillingene nedenfor for å angi nye verdier. Hvis du lar dem stå tomme, forblir de tomme. Vær også oppmerksom på at kun uttak vil bli gitt et budsjett.', - 'no_bulk_category' => 'Ikke oppdater kategori', - 'no_bulk_budget' => 'Ikke oppdater budsjett', - 'no_bulk_tags' => 'Ikke oppdater tagg(er)', - 'replace_with_these_tags' => 'Erstatt med disse taggene', - 'append_these_tags' => 'Legg til disse taggene', - 'mass_edit' => 'Rediger individuelt valgte', - 'bulk_edit' => 'Rediger valgte i bulk', - 'mass_delete' => 'Slett valgte', - 'cannot_edit_other_fields' => 'Du kan ikke masseredigere andre felt enn de som er her, fordi det er ikke plass til å vise dem. Vennligst følg linken og rediger disse en om gangen hvis du må redigere disse feltene.', - 'cannot_change_amount_reconciled' => 'Du kan ikke endre antall avstemte transaksjoner.', - 'no_budget' => '(ingen budsjett)', - 'no_bill' => '(ingen regning)', - 'account_per_budget' => 'Konto per budsjett', - 'account_per_category' => 'Konto per kategori', - 'create_new_object' => 'Opprett', - 'empty' => '(tom)', - 'all_other_budgets' => '(alle andre budsjetter)', - 'all_other_accounts' => '(alle andre kontoer)', - 'expense_per_source_account' => 'Expenses per source account', - 'expense_per_destination_account' => 'Expenses per destination account', - 'income_per_destination_account' => 'Income per destination account', - 'spent_in_specific_category' => 'Brukt i kategori ":category"', - 'earned_in_specific_category' => 'Opptjent i kategori ":category"', - 'spent_in_specific_tag' => 'Brukt i taggen ":tag"', - 'earned_in_specific_tag' => 'Opptjent i tag ":tag"', - 'income_per_source_account' => 'Inntekter per kildekonto', - 'average_spending_per_destination' => 'Gjennomsnittlig utgift per målkonto', - 'average_spending_per_source' => 'Gjennomsnittlig utgift per kildekonto', - 'average_earning_per_source' => 'Gjennomsnittlig opptjente per kildekonto', - 'average_earning_per_destination' => 'Gjennomsnittlig opptjente per målkonto', - 'account_per_tag' => 'Konto per tagg', - 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', - 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', - 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', - 'tag' => 'Tagg', - 'no_budget_squared' => '(ingen budsjett)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(ingen kontotype)', - 'opt_group_no_account_type' => '(ingen kontotype)', - 'opt_group_defaultAsset' => 'Standard aktivakontoer', - 'opt_group_savingAsset' => 'Sparekontoer', - 'opt_group_sharedAsset' => 'Delte aktivakontoer', - 'opt_group_ccAsset' => 'Kredittkort', - 'opt_group_cashWalletAsset' => 'Kontant lommebok', - 'opt_group_expense_account' => 'Utgiftskontoer', - 'opt_group_revenue_account' => 'Inntektskontoer', - 'opt_group_l_Loan' => 'Gjeld: Lån', - 'opt_group_cash_account' => 'Kontantkonto', - 'opt_group_l_Debt' => 'Gjeld: Gjeld', - 'opt_group_l_Mortgage' => 'Gjeld: Huslån', - 'opt_group_l_Credit card' => 'Gjeld: Kredittkort', - 'notes' => 'Notater', - 'unknown_journal_error' => 'Kunne ikke lagre transaksjonen. Vennligst sjekk loggfilene.', - 'attachment_not_found' => 'Finner ikke dette vedlegget.', - 'journal_link_bill' => 'Denne transaksjonen er knyttet til regning :name. Hvis du vil fjerne knytningen, fjerner du avmerkingen. Bruke regler for å koble den til en annen regning.', - 'transaction_stored_link' => 'Transaksjon #{ID} ("{title}") har blitt lagret.', - 'transaction_new_stored_link' => 'Transaksjon #{ID} har blitt lagret.', - 'transaction_updated_link' => 'Transaksjon #{ID} ("{title}") har blitt oppdatert.', - 'transaction_updated_no_changes' => 'Transaksjon #{ID} ("{title}") fikk ingen endringer.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Angre avstemming', + 'update_withdrawal' => 'Oppdater uttak', + 'update_deposit' => 'Oppdater innskudd', + 'update_transaction' => 'Oppdater transaksjonen', + 'update_transfer' => 'Oppdater overføring', + 'updated_withdrawal' => 'Oppdatert uttak ":description"', + 'updated_deposit' => 'Oppdatert innskudd ":description"', + 'updated_transfer' => 'Oppdatert overføring ":description"', + 'no_changes_withdrawal' => 'Uttak ":description" ble ikke endret.', + 'no_changes_deposit' => 'Innskudd ":description" ble ikke endret.', + 'no_changes_transfer' => 'Overføring ":description" ble ikke endret.', + 'delete_withdrawal' => 'Slett uttak ":description"', + 'delete_deposit' => 'Slett innskudd ":description"', + 'delete_transfer' => 'Slett overføring ":description"', + 'deleted_withdrawal' => 'Slettet uttak ":description"', + 'deleted_deposit' => 'Slettet innskudd ":description"', + 'deleted_transfer' => 'Slettet overføring ":description"', + 'deleted_reconciliation' => 'Slettet avstemmingstransaksjon ":description"', + 'stored_journal' => 'Opprettet ny transaksjon ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Vellykket! Ny transaksjon er opprettet', + 'updated_journal_no_descr' => 'Transaksjonen din ble oppdatert', + 'select_transactions' => 'Velg transaksjoner', + 'rule_group_select_transactions' => 'Påfør ":title" på transaksjonene', + 'rule_select_transactions' => 'Påfør ":title" på transaksjonene', + 'stop_selection' => 'Stop valg av transaksjoner', + 'reconcile_selected' => 'Avstem', + 'mass_delete_journals' => 'Slett flere transaksjoner', + 'mass_edit_journals' => 'Rediger flere transaksjoner', + 'mass_bulk_journals' => 'Rediger flere transaksjoner samtidig', + 'mass_bulk_journals_explain' => 'Dette skjemaet lar deg endre egenskaper for transaksjonene nedenfor i en oppdatering. Alle transaksjonene i tabellen vil bli oppdatert når du endrer parametrene du ser her.', + 'part_of_split' => 'Denne transaksjonen er en del av en delt transaksjon. Hvis du ikke har valgt alle delene, kan du ende opp med å endre bare halvparten av transaksjonen.', + 'bulk_set_new_values' => 'Bruk innstillingene nedenfor for å angi nye verdier. Hvis du lar dem stå tomme, forblir de tomme. Vær også oppmerksom på at kun uttak vil bli gitt et budsjett.', + 'no_bulk_category' => 'Ikke oppdater kategori', + 'no_bulk_budget' => 'Ikke oppdater budsjett', + 'no_bulk_tags' => 'Ikke oppdater tagg(er)', + 'replace_with_these_tags' => 'Erstatt med disse taggene', + 'append_these_tags' => 'Legg til disse taggene', + 'mass_edit' => 'Rediger individuelt valgte', + 'bulk_edit' => 'Rediger valgte i bulk', + 'mass_delete' => 'Slett valgte', + 'cannot_edit_other_fields' => 'Du kan ikke masseredigere andre felt enn de som er her, fordi det er ikke plass til å vise dem. Vennligst følg linken og rediger disse en om gangen hvis du må redigere disse feltene.', + 'cannot_change_amount_reconciled' => 'Du kan ikke endre antall avstemte transaksjoner.', + 'no_budget' => '(ingen budsjett)', + 'no_bill' => '(ingen regning)', + 'account_per_budget' => 'Konto per budsjett', + 'account_per_category' => 'Konto per kategori', + 'create_new_object' => 'Opprett', + 'empty' => '(tom)', + 'all_other_budgets' => '(alle andre budsjetter)', + 'all_other_accounts' => '(alle andre kontoer)', + 'expense_per_source_account' => 'Utgifter per kildekonto', + 'expense_per_destination_account' => 'Utgifter per målkonto', + 'income_per_destination_account' => 'Inntekter per destinasjonskonto', + 'spent_in_specific_category' => 'Brukt i kategori ":category"', + 'earned_in_specific_category' => 'Opptjent i kategori ":category"', + 'spent_in_specific_tag' => 'Brukt i taggen ":tag"', + 'earned_in_specific_tag' => 'Opptjent i tag ":tag"', + 'income_per_source_account' => 'Inntekter per kildekonto', + 'average_spending_per_destination' => 'Gjennomsnittlig utgift per målkonto', + 'average_spending_per_source' => 'Gjennomsnittlig utgift per kildekonto', + 'average_earning_per_source' => 'Gjennomsnittlig opptjente per kildekonto', + 'average_earning_per_destination' => 'Gjennomsnittlig opptjente per målkonto', + 'account_per_tag' => 'Konto per tagg', + 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', + 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', + 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', + 'tag' => 'Tagg', + 'no_budget_squared' => '(ingen budsjett)', + 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', + 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', + 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', + 'opt_group_' => '(ingen kontotype)', + 'opt_group_no_account_type' => '(ingen kontotype)', + 'opt_group_defaultAsset' => 'Standard aktivakontoer', + 'opt_group_savingAsset' => 'Sparekontoer', + 'opt_group_sharedAsset' => 'Delte aktivakontoer', + 'opt_group_ccAsset' => 'Kredittkort', + 'opt_group_cashWalletAsset' => 'Kontant lommebok', + 'opt_group_expense_account' => 'Utgiftskontoer', + 'opt_group_revenue_account' => 'Inntektskontoer', + 'opt_group_l_Loan' => 'Gjeld: Lån', + 'opt_group_cash_account' => 'Kontantkonto', + 'opt_group_l_Debt' => 'Gjeld: Gjeld', + 'opt_group_l_Mortgage' => 'Gjeld: Huslån', + 'opt_group_l_Credit card' => 'Gjeld: Kredittkort', + 'notes' => 'Notater', + 'unknown_journal_error' => 'Kunne ikke lagre transaksjonen. Vennligst sjekk loggfilene.', + 'attachment_not_found' => 'Finner ikke dette vedlegget.', + 'journal_link_bill' => 'Denne transaksjonen er knyttet til regning :name. Hvis du vil fjerne knytningen, fjerner du avmerkingen. Bruke regler for å koble den til en annen regning.', + 'transaction_stored_link' => 'Transaksjon #{ID} ("{title}") har blitt lagret.', + 'transaction_new_stored_link' => 'Transaksjon #{ID} har blitt lagret.', + 'transaction_updated_link' => 'Transaksjon #{ID} ("{title}") har blitt oppdatert.', + 'transaction_updated_no_changes' => 'Transaksjon #{ID} ("{title}") fikk ingen endringer.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Brukt {amount} av {total}', // new user: - 'welcome' => 'Velkommen til Firefly III!', - 'submit' => 'Send inn', - 'submission' => 'Submission', - 'submit_yes_really' => 'Registrer (Jeg vet hva jeg gjør)', - 'getting_started' => 'Kom igang', - 'to_get_started' => 'Det er godt å se at du har installert Firefly III. Vennligst skriv inn bankens navn og saldo på hovedkontoen din for å komme i gang. Du trenger Ikke bekymre deg hvis du har flere kontoer. Du kan legge dem til senere. Dette er bare for at Firefly III skal få noe data å arbeide med.', - 'savings_balance_text' => 'Firefly III vil automatisk opprette en sparekonto for deg. Som standard vil det ikke være penger på sparekontoen din, men hvis du oppgir saldoen din til Firefly III så blir den lagt inn for deg.', - 'finish_up_new_user' => 'Det var alt! Du kan fortsette ved å trykke Send. Deretter vil du bli tatt til startskjermen til Firefly III.', - 'stored_new_accounts_new_user' => 'Jippi! De nye kontoene dine ble lagret.', - 'set_preferred_language' => 'Hvis du foretrekker å bruke Firefly III med et annet språk, vennligst indiker det her.', - 'language' => 'Språk', - 'new_savings_account' => ':bank_name sparekonto', - 'cash_wallet' => 'Kontanter lommebok', - 'currency_not_present' => 'Hvis valutaen du vanligvis bruker ikke vises, ikke fortvil. Du kan opprette din egen valuta under Alternativer > valuta.', + 'welcome' => 'Velkommen til Firefly III!', + 'submit' => 'Send inn', + 'submission' => 'Innlevering', + 'submit_yes_really' => 'Registrer (Jeg vet hva jeg gjør)', + 'getting_started' => 'Kom igang', + 'to_get_started' => 'Det er godt å se at du har installert Firefly III. Vennligst skriv inn bankens navn og saldo på hovedkontoen din for å komme i gang. Du trenger Ikke bekymre deg hvis du har flere kontoer. Du kan legge dem til senere. Dette er bare for at Firefly III skal få noe data å arbeide med.', + 'savings_balance_text' => 'Firefly III vil automatisk opprette en sparekonto for deg. Som standard vil det ikke være penger på sparekontoen din, men hvis du oppgir saldoen din til Firefly III så blir den lagt inn for deg.', + 'finish_up_new_user' => 'Det var alt! Du kan fortsette ved å trykke Send. Deretter vil du bli tatt til startskjermen til Firefly III.', + 'stored_new_accounts_new_user' => 'Jippi! De nye kontoene dine ble lagret.', + 'set_preferred_language' => 'Hvis du foretrekker å bruke Firefly III med et annet språk, vennligst indiker det her.', + 'language' => 'Språk', + 'new_savings_account' => ':bank_name sparekonto', + 'cash_wallet' => 'Kontanter lommebok', + 'currency_not_present' => 'Hvis valutaen du vanligvis bruker ikke vises, ikke fortvil. Du kan opprette din egen valuta under Alternativer > valuta.', // home page: - 'transaction_table_description' => 'En tabell som inneholder transaksjonene dine', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => 'Dine kontoer', - 'your_accounts' => 'Din konto oversikt', - 'category_overview' => 'Kategori oversikt', - 'expense_overview' => 'Utgiftskonto oversikt', - 'revenue_overview' => 'Inntektskonto oversikt', - 'budgetsAndSpending' => 'Budsjetter og utgifter', - 'budgets_and_spending' => 'Budsjetter og utgifter', - 'go_to_budget' => 'Gå til budsjett "{budget}"', - 'go_to_deposits' => 'Gå til innskudd', - 'go_to_expenses' => 'Gå til utgifter', - 'savings' => 'Oppspart', - 'newWithdrawal' => 'Ny utgift', - 'newDeposit' => 'Nytt innskudd', - 'newTransfer' => 'Ny overføring', - 'bills_to_pay' => 'Regninger å betale', - 'per_day' => 'Per dag', - 'left_to_spend_per_day' => 'Igjen å bruke per dag', - 'bills_paid' => 'Regninger betalt', - 'custom_period' => 'Tilpasset periode', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Velg en periode', + 'transaction_table_description' => 'En tabell som inneholder transaksjonene dine', + 'opposing_account' => 'Opposing account', + 'yourAccounts' => 'Dine kontoer', + 'your_accounts' => 'Din konto oversikt', + 'category_overview' => 'Kategori oversikt', + 'expense_overview' => 'Utgiftskonto oversikt', + 'revenue_overview' => 'Inntektskonto oversikt', + 'budgetsAndSpending' => 'Budsjetter og utgifter', + 'budgets_and_spending' => 'Budsjetter og utgifter', + 'go_to_budget' => 'Gå til budsjett "{budget}"', + 'go_to_deposits' => 'Gå til innskudd', + 'go_to_expenses' => 'Gå til utgifter', + 'savings' => 'Oppspart', + 'newWithdrawal' => 'Ny utgift', + 'newDeposit' => 'Nytt innskudd', + 'newTransfer' => 'Ny overføring', + 'bills_to_pay' => 'Regninger å betale', + 'per_day' => 'Per dag', + 'left_to_spend_per_day' => 'Igjen å bruke per dag', + 'bills_paid' => 'Regninger betalt', + 'custom_period' => 'Tilpasset periode', + 'reset_to_current' => 'Tilbakestill til gjeldende periode', + 'select_period' => 'Velg en periode', // menu and titles, should be recycled as often as possible: - 'currency' => 'Valuta', - 'preferences' => 'Innstillinger', - 'logout' => 'Logg ut', - 'logout_other_sessions' => 'Logg ut alle andre økter', - 'toggleNavigation' => 'Vis/Skjul navigation', - 'searchPlaceholder' => 'Søk...', - 'version' => 'Versjon', - 'dashboard' => 'Startskjerm', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Tilgjengelige budsjett ({currency})', - 'currencies' => 'Valutaer', - 'activity' => 'Aktivitet', - 'usage' => 'Bruk', - 'accounts' => 'Kontoer', - 'Asset account' => 'Aktivakonto', - 'Default account' => 'Aktivakonto', - 'Expense account' => 'Utgiftskonto', - 'Revenue account' => 'Inntektskonto', - 'Initial balance account' => 'Startsaldokonto', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Gjeld', - 'account_type_Loan' => 'Lån', - 'account_type_Mortgage' => 'Boliglån', - 'account_type_debt' => 'Gjeld', - 'account_type_loan' => 'Lån', - 'account_type_mortgage' => 'Boliglån', - 'account_type_Credit card' => 'Kredittkort', - 'credit_card_type_monthlyFull' => 'Full betaling hver måned', - 'liability_direction_credit' => 'Jeg skylder denne gjelden', - 'liability_direction_debit' => 'Jeg skylder denne gjelden til en annen', - 'liability_direction_credit_short' => 'Jeg skuldet denne gjelden', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Ukjent', - 'liability_direction_null_short' => 'Ukjent', - 'Liability credit' => 'Lån kreditt', - 'budgets' => 'Budsjetter', - 'tags' => 'Tagger', - 'reports' => 'Rapporter', - 'transactions' => 'Transaksjoner', - 'expenses' => 'Utgifter', - 'income' => 'Inntekt', - 'transfers' => 'Overføringer', - 'moneyManagement' => 'Pengestyring', - 'money_management' => 'Pengestyring', - 'tools' => 'Verktøy', - 'piggyBanks' => 'Sparegriser', - 'piggy_banks' => 'Sparegriser', - 'amount_x_of_y' => '{current} av {total}', - 'bills' => 'Regninger', - 'withdrawal' => 'Uttak', - 'opening_balance' => 'Startsaldo', - 'deposit' => 'Innskudd', - 'account' => 'Konto', - 'transfer' => 'Overføring', - 'Withdrawal' => 'Uttak', - 'Deposit' => 'Innskudd', - 'Transfer' => 'Overføring', - 'bill' => 'Regning', - 'yes' => 'Ja', - 'no' => 'Nei', - 'amount' => 'Beløp', - 'overview' => 'Oversikt', - 'saveOnAccount' => 'Spar på konto', - 'unknown' => 'Ukjent', - 'monthly' => 'Månedlig', - 'profile' => 'Profil', - 'errors' => 'Feil', - 'debt_start_date' => 'Startdato for gjeld', - 'debt_start_amount' => 'Start beløp for gjeld', - 'debt_start_amount_help' => 'Det er alltid best å sette denne verdien til et negativt beløp. Les hjelpesidene (topp til høyre (?)-ikonet) for mer informasjon.', - 'interest_period_help' => 'Dette feltet er rent kosmetisk og vil ikke bli beregnet for deg. Siden det viser seg at bankene er svært sneaky så Firefly III aldri får det riktig.', - 'store_new_liabilities_account' => 'Lagre ny gjeld', - 'edit_liabilities_account' => 'Rediger gjeld ":name"', - 'financial_control' => 'Financial control', - 'accounting' => 'Regnskap', - 'automation' => 'Automatisering', - 'others' => 'Andre', - 'classification' => 'Klassifisering', - 'store_transaction' => 'Lagre transaksjon', + 'currency' => 'Valuta', + 'preferences' => 'Innstillinger', + 'logout' => 'Logg ut', + 'logout_other_sessions' => 'Logg ut alle andre økter', + 'toggleNavigation' => 'Vis/Skjul navigation', + 'searchPlaceholder' => 'Søk...', + 'version' => 'Versjon', + 'dashboard' => 'Startskjerm', + 'income_and_expense' => 'Inntekter og utgifter', + 'all_money' => 'Alle pengene dine', + 'unknown_source_plain' => 'Ukjent kilde-konto', + 'unknown_dest_plain' => 'Ukjent destinasjonskonto', + 'unknown_any_plain' => 'Ukjent konto', + 'unknown_budget_plain' => 'Mangler budsjett', + 'available_budget' => 'Tilgjengelige budsjett ({currency})', + 'currencies' => 'Valutaer', + 'activity' => 'Aktivitet', + 'usage' => 'Bruk', + 'accounts' => 'Kontoer', + 'Asset account' => 'Aktivakonto', + 'Default account' => 'Aktivakonto', + 'Expense account' => 'Utgiftskonto', + 'Revenue account' => 'Inntektskonto', + 'Initial balance account' => 'Startsaldokonto', + 'account_type_Asset account' => 'Aktivakonto', + 'account_type_Expense account' => 'Utgiftskonto', + 'account_type_Revenue account' => 'Inntektskonto', + 'account_type_Debt' => 'Gjeld', + 'account_type_Loan' => 'Lån', + 'account_type_Mortgage' => 'Boliglån', + 'account_type_debt' => 'Gjeld', + 'account_type_loan' => 'Lån', + 'account_type_mortgage' => 'Boliglån', + 'account_type_Credit card' => 'Kredittkort', + 'credit_card_type_monthlyFull' => 'Full betaling hver måned', + 'liability_direction_credit' => 'Jeg skylder denne gjelden', + 'liability_direction_debit' => 'Jeg skylder denne gjelden til en annen', + 'liability_direction_credit_short' => 'Jeg skuldet denne gjelden', + 'liability_direction_debit_short' => 'Skylder denne gjelden', + 'liability_direction__short' => 'Ukjent', + 'liability_direction_null_short' => 'Ukjent', + 'Liability credit' => 'Lån kreditt', + 'budgets' => 'Budsjetter', + 'tags' => 'Tagger', + 'reports' => 'Rapporter', + 'transactions' => 'Transaksjoner', + 'expenses' => 'Utgifter', + 'income' => 'Inntekt', + 'transfers' => 'Overføringer', + 'moneyManagement' => 'Pengestyring', + 'money_management' => 'Pengestyring', + 'tools' => 'Verktøy', + 'piggyBanks' => 'Sparegriser', + 'piggy_banks' => 'Sparegriser', + 'amount_x_of_y' => '{current} av {total}', + 'bills' => 'Regninger', + 'withdrawal' => 'Uttak', + 'opening_balance' => 'Startsaldo', + 'deposit' => 'Innskudd', + 'account' => 'Konto', + 'transfer' => 'Overføring', + 'Withdrawal' => 'Uttak', + 'Deposit' => 'Innskudd', + 'Transfer' => 'Overføring', + 'bill' => 'Regning', + 'yes' => 'Ja', + 'no' => 'Nei', + 'amount' => 'Beløp', + 'overview' => 'Oversikt', + 'saveOnAccount' => 'Spar på konto', + 'unknown' => 'Ukjent', + 'monthly' => 'Månedlig', + 'profile' => 'Profil', + 'errors' => 'Feil', + 'debt_start_date' => 'Startdato for gjeld', + 'debt_start_amount' => 'Start beløp for gjeld', + 'debt_start_amount_help' => 'Det er alltid best å sette denne verdien til et negativt beløp. Les hjelpesidene (topp til høyre (?)-ikonet) for mer informasjon.', + 'interest_period_help' => 'Dette feltet er rent kosmetisk og vil ikke bli beregnet for deg. Siden det viser seg at bankene er svært sneaky så Firefly III aldri får det riktig.', + 'store_new_liabilities_account' => 'Lagre ny gjeld', + 'edit_liabilities_account' => 'Rediger gjeld ":name"', + 'financial_control' => 'Finansiell kontroll', + 'accounting' => 'Regnskap', + 'automation' => 'Automatisering', + 'others' => 'Andre', + 'classification' => 'Klassifisering', + 'store_transaction' => 'Lagre transaksjon', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Standard finansiell rapport mellom :start og :end', - 'report_audit' => 'Transaksjonshistorikk og oversikt mellom :start og :end', - 'report_category' => 'Kategori rapport mellom :start og :end', - 'report_double' => 'Utgift/Inntekt kontorapport mellom :start og :end', - 'report_budget' => 'Budsjettrapport mellom :start og :end', - 'report_tag' => 'Tag-rapport mellom :start og :end', - 'quick_link_reports' => 'Hurtiglenker', - 'quick_link_examples' => 'Dette er bare noen eksempel linker for å komme i gang. Sjekk ut hjelpesidene under (?) -knappen for informasjon om alle rapporter og de magiske ordene som du kan bruke.', - 'quick_link_default_report' => 'Standard finansiell rapport', - 'quick_link_audit_report' => 'Oversikt over transaksjonshistorikk', - 'report_this_month_quick' => 'Inneværende måned, alle kontoer', - 'report_last_month_quick' => 'Forrige måned, alle kontoer', - 'report_this_year_quick' => 'Inneværende år, alle kontoer', - 'report_this_fiscal_year_quick' => 'Inneværende regnskapsår, alle kontoer', - 'report_all_time_quick' => 'Fra tidenes morgen, alle kontoer', - 'reports_can_bookmark' => 'Husk at rapporter kan bokmerkes.', - 'incomeVsExpenses' => 'Inntekter vs. utgifter', - 'accountBalances' => 'Saldo', - 'balanceStart' => 'Saldo ved starten av periode', - 'balanceEnd' => 'Saldo ved utgangen av perioden', - 'splitByAccount' => 'Del opp på konto', - 'coveredWithTags' => 'Dekket med tagger', - 'leftInBudget' => 'Igjen i budsjett', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Sum av summer', - 'noCategory' => '(ingen kategori)', - 'notCharged' => 'Ikke belastet (ennå)', - 'inactive' => 'Inaktiv', - 'active' => 'Aktiv', - 'difference' => 'Differanse', - 'money_flowing_in' => 'Inn', - 'money_flowing_out' => 'Ut', - 'topX' => 'topp :number', - 'show_full_list' => 'Vis hele listen', - 'show_only_top' => 'Vis bare topp :number', - 'report_type' => 'Rapporttype', - 'report_type_default' => 'Standard finansiell rapport', - 'report_type_audit' => 'Transaksjonshistorikk (revisjon)', - 'report_type_category' => 'Kategorirapport', - 'report_type_budget' => 'Budsjettrapport', - 'report_type_tag' => 'Taggrapport', - 'report_type_double' => 'Rapport for kostnader / inntekter', - 'more_info_help' => 'Mer informasjon om disse rapportene finner du på hjelpesidene. Trykk på (?) -ikonet øverst til høyre.', - 'report_included_accounts' => 'Inkluderte kontoer', - 'report_date_range' => 'Datointervall', - 'report_preset_ranges' => 'Forhåndsinnstilte områder', - 'shared' => 'Delt', - 'fiscal_year' => 'Regnskapsår', - 'income_entry' => 'Inntekter fra konto ":name" mellom :start og :end', - 'expense_entry' => 'Utgifter til konto ":name" mellom :start og :end', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => 'Utgifter i budsjett ":budget" mellom :start og :end', - 'balance_amount' => 'Utgifter i budsjett ":budget" betalt fra konto ":account" mellom :start og :end', - 'no_audit_activity' => 'Ingen aktivitet er registrert på konto :account_name mellom :start og :end.', - 'audit_end_balance' => 'Kontobalanse fra :account_name ved slutten av :end var: :balance', - 'reports_extra_options' => 'Ekstra alternativer', - 'report_has_no_extra_options' => 'Denne rapporten har ingen ekstra alternativer', - 'reports_submit' => 'Vis rapport', - 'end_after_start_date' => 'Sluttdato for rapport må være etter startdato.', - 'select_category' => 'Velg kategori(er)', - 'select_budget' => 'Velg budsjett(er).', - 'select_tag' => 'Velg tagg(er).', - 'income_per_category' => 'Inntekter per kategori', - 'expense_per_category' => 'Utgifter per kategori', - 'expense_per_budget' => 'Utgifter per budsjett', - 'income_per_account' => 'Inntekter per konto', - 'expense_per_account' => 'Utgifter per konto', - 'expense_per_tag' => 'Utgifter per tagg', - 'income_per_tag' => 'Inntekter per tagg', - 'include_expense_not_in_budget' => 'Inkluderte utgifter ikke med i de valgte budsjettene', - 'include_expense_not_in_account' => 'Inkluderte utgifter ikke med i de valgte kontoene', - 'include_expense_not_in_category' => 'Inkluderte utgifter ikke med i de valgte kategoriene', - 'include_income_not_in_category' => 'Inkluderte inntekter ikke med i de valgte kategoriene', - 'include_income_not_in_account' => 'Inkluderte inntekter ikke med i de valgte kontoene', - 'include_income_not_in_tags' => 'Inkludert inntekt ikke i de valgte tag\'ene', - 'include_expense_not_in_tags' => 'Inkluderte utgifter ikke med i de valgte tag\'ene', - 'everything_else' => 'Alt annet', - 'income_and_expenses' => 'Inntekter og utgifter', - 'spent_average' => 'Brukt (gjennomsnittlig)', - 'income_average' => 'Inntekt (gjennomsnittlig)', - 'transaction_count' => 'Transaksjonsantall', - 'average_spending_per_account' => 'Gjennomsnittlig bruk per konto', - 'average_income_per_account' => 'Gjennomsnittlig inntekt per konto', - 'total' => 'Totalt', - 'description' => 'Beskrivelse', - 'sum_of_period' => 'Sum for perioden', - 'average_in_period' => 'Gjennomsnitt for periode', - 'account_role_defaultAsset' => 'Standard aktivakonto', - 'account_role_sharedAsset' => 'Delt aktivakonto', - 'account_role_savingAsset' => 'Sparekonto', - 'account_role_ccAsset' => 'Kredittkort', - 'account_role_cashWalletAsset' => 'Kontant lommebok', - 'budget_chart_click' => 'Vennligst trykk på et budsjettnavn i tabellen ovenfor for å se et diagram.', - 'category_chart_click' => 'Vennligst trykk på et kategorinavn i tabellen ovenfor for å se et diagram.', - 'in_out_accounts' => 'Tjent og brukt pr. kombinasjon', - 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', - 'in_out_per_category' => 'Tjent og brukt pr. kategori', - 'out_per_budget' => 'Brukt per budsjett', - 'select_expense_revenue' => 'Velg utgifts-/inntektskonto', - 'multi_currency_report_sum' => 'Siden denne listen inneholder kontoer med forskjellige valutaer vil summen mest sannsynlig ikke gi noen mening. Rapporten vil alltid falle tilbake på din standarde valuta.', - 'sum_in_default_currency' => 'Summen vil alltid be i din standard valuta.', - 'net_filtered_prefs' => 'Dette diagrammet vil aldri inkludere kontoer som ikke har "Inkluder i nettoverdi"-valget avkrysset.', + 'report_default' => 'Standard finansiell rapport mellom :start og :end', + 'report_audit' => 'Transaksjonshistorikk og oversikt mellom :start og :end', + 'report_category' => 'Kategori rapport mellom :start og :end', + 'report_double' => 'Utgift/Inntekt kontorapport mellom :start og :end', + 'report_budget' => 'Budsjettrapport mellom :start og :end', + 'report_tag' => 'Tag-rapport mellom :start og :end', + 'quick_link_reports' => 'Hurtiglenker', + 'quick_link_examples' => 'Dette er bare noen eksempel linker for å komme i gang. Sjekk ut hjelpesidene under (?) -knappen for informasjon om alle rapporter og de magiske ordene som du kan bruke.', + 'quick_link_default_report' => 'Standard finansiell rapport', + 'quick_link_audit_report' => 'Oversikt over transaksjonshistorikk', + 'report_this_month_quick' => 'Inneværende måned, alle kontoer', + 'report_last_month_quick' => 'Forrige måned, alle kontoer', + 'report_this_year_quick' => 'Inneværende år, alle kontoer', + 'report_this_fiscal_year_quick' => 'Inneværende regnskapsår, alle kontoer', + 'report_all_time_quick' => 'Fra tidenes morgen, alle kontoer', + 'reports_can_bookmark' => 'Husk at rapporter kan bokmerkes.', + 'incomeVsExpenses' => 'Inntekter vs. utgifter', + 'accountBalances' => 'Saldo', + 'balanceStart' => 'Saldo ved starten av periode', + 'balanceEnd' => 'Saldo ved utgangen av perioden', + 'splitByAccount' => 'Del opp på konto', + 'coveredWithTags' => 'Dekket med tagger', + 'leftInBudget' => 'Igjen i budsjett', + 'left_in_debt' => 'Skyldig beløp', + 'sumOfSums' => 'Sum av summer', + 'noCategory' => '(ingen kategori)', + 'notCharged' => 'Ikke belastet (ennå)', + 'inactive' => 'Inaktiv', + 'active' => 'Aktiv', + 'difference' => 'Differanse', + 'money_flowing_in' => 'Inn', + 'money_flowing_out' => 'Ut', + 'topX' => 'topp :number', + 'show_full_list' => 'Vis hele listen', + 'show_only_top' => 'Vis bare topp :number', + 'report_type' => 'Rapporttype', + 'report_type_default' => 'Standard finansiell rapport', + 'report_type_audit' => 'Transaksjonshistorikk (revisjon)', + 'report_type_category' => 'Kategorirapport', + 'report_type_budget' => 'Budsjettrapport', + 'report_type_tag' => 'Taggrapport', + 'report_type_double' => 'Rapport for kostnader / inntekter', + 'more_info_help' => 'Mer informasjon om disse rapportene finner du på hjelpesidene. Trykk på (?) -ikonet øverst til høyre.', + 'report_included_accounts' => 'Inkluderte kontoer', + 'report_date_range' => 'Datointervall', + 'report_preset_ranges' => 'Forhåndsinnstilte områder', + 'shared' => 'Delt', + 'fiscal_year' => 'Regnskapsår', + 'income_entry' => 'Inntekter fra konto ":name" mellom :start og :end', + 'expense_entry' => 'Utgifter til konto ":name" mellom :start og :end', + 'category_entry' => 'Utgifter og inntekter i kategori ":name" mellom :start og :end', + 'budget_spent_amount' => 'Utgifter i budsjett ":budget" mellom :start og :end', + 'balance_amount' => 'Utgifter i budsjett ":budget" betalt fra konto ":account" mellom :start og :end', + 'no_audit_activity' => 'Ingen aktivitet er registrert på konto :account_name mellom :start og :end.', + 'audit_end_balance' => 'Kontobalanse fra :account_name ved slutten av :end var: :balance', + 'reports_extra_options' => 'Ekstra alternativer', + 'report_has_no_extra_options' => 'Denne rapporten har ingen ekstra alternativer', + 'reports_submit' => 'Vis rapport', + 'end_after_start_date' => 'Sluttdato for rapport må være etter startdato.', + 'select_category' => 'Velg kategori(er)', + 'select_budget' => 'Velg budsjett(er).', + 'select_tag' => 'Velg tagg(er).', + 'income_per_category' => 'Inntekter per kategori', + 'expense_per_category' => 'Utgifter per kategori', + 'expense_per_budget' => 'Utgifter per budsjett', + 'income_per_account' => 'Inntekter per konto', + 'expense_per_account' => 'Utgifter per konto', + 'expense_per_tag' => 'Utgifter per tagg', + 'income_per_tag' => 'Inntekter per tagg', + 'include_expense_not_in_budget' => 'Inkluderte utgifter ikke med i de valgte budsjettene', + 'include_expense_not_in_account' => 'Inkluderte utgifter ikke med i de valgte kontoene', + 'include_expense_not_in_category' => 'Inkluderte utgifter ikke med i de valgte kategoriene', + 'include_income_not_in_category' => 'Inkluderte inntekter ikke med i de valgte kategoriene', + 'include_income_not_in_account' => 'Inkluderte inntekter ikke med i de valgte kontoene', + 'include_income_not_in_tags' => 'Inkludert inntekt ikke i de valgte tag\'ene', + 'include_expense_not_in_tags' => 'Inkluderte utgifter ikke med i de valgte tag\'ene', + 'everything_else' => 'Alt annet', + 'income_and_expenses' => 'Inntekter og utgifter', + 'spent_average' => 'Brukt (gjennomsnittlig)', + 'income_average' => 'Inntekt (gjennomsnittlig)', + 'transaction_count' => 'Transaksjonsantall', + 'average_spending_per_account' => 'Gjennomsnittlig bruk per konto', + 'average_income_per_account' => 'Gjennomsnittlig inntekt per konto', + 'total' => 'Totalt', + 'description' => 'Beskrivelse', + 'sum_of_period' => 'Sum for perioden', + 'average_in_period' => 'Gjennomsnitt for periode', + 'account_role_defaultAsset' => 'Standard aktivakonto', + 'account_role_sharedAsset' => 'Delt aktivakonto', + 'account_role_savingAsset' => 'Sparekonto', + 'account_role_ccAsset' => 'Kredittkort', + 'account_role_cashWalletAsset' => 'Kontant lommebok', + 'budget_chart_click' => 'Vennligst trykk på et budsjettnavn i tabellen ovenfor for å se et diagram.', + 'category_chart_click' => 'Vennligst trykk på et kategorinavn i tabellen ovenfor for å se et diagram.', + 'in_out_accounts' => 'Tjent og brukt pr. kombinasjon', + 'in_out_accounts_per_asset' => 'Opptjent og brukt (per aktivakonto)', + 'in_out_per_category' => 'Tjent og brukt pr. kategori', + 'out_per_budget' => 'Brukt per budsjett', + 'select_expense_revenue' => 'Velg utgifts-/inntektskonto', + 'multi_currency_report_sum' => 'Siden denne listen inneholder kontoer med forskjellige valutaer vil summen mest sannsynlig ikke gi noen mening. Rapporten vil alltid falle tilbake på din standarde valuta.', + 'sum_in_default_currency' => 'Summen vil alltid be i din standard valuta.', + 'net_filtered_prefs' => 'Dette diagrammet vil aldri inkludere kontoer som ikke har "Inkluder i nettoverdi"-valget avkrysset.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Diagram', - 'month' => 'Måned', - 'budget' => 'Busjett', - 'spent' => 'Brukt', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => 'Brukt i budsjett', - 'left_to_spend' => 'Igjen å bruke', - 'earned' => 'Opptjent', - 'overspent' => 'Overforbruk', - 'left' => 'Gjenværende', - 'max-amount' => 'Maksimumsbeløp', - 'min-amount' => 'Minimumsbeløp', - 'journal-amount' => 'Gjeldende regningspost', - 'name' => 'Navn', - 'date' => 'Dato', - 'date_and_time' => 'Dato og klokkeslett', - 'time' => 'Tid', - 'paid' => 'Betalt', - 'unpaid' => 'Ikke betalt', - 'day' => 'Dag', - 'budgeted' => 'Budsjettert', - 'period' => 'Periode', - 'balance' => 'Saldo', - 'in_out_period' => 'Inn + ut denne perioden', - 'sum' => 'Sum', - 'summary' => 'Oppsummering', - 'average' => 'Gjennomsnitt', - 'balanceFor' => 'Saldo for :name', - 'no_tags' => '(ingen tagger)', + 'chart' => 'Diagram', + 'month' => 'Måned', + 'budget' => 'Budsjett', + 'spent' => 'Brukt', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => 'Brukt i budsjett', + 'left_to_spend' => 'Igjen å bruke', + 'earned' => 'Opptjent', + 'overspent' => 'Overforbruk', + 'left' => 'Gjenværende', + 'max-amount' => 'Maksimumsbeløp', + 'min-amount' => 'Minimumsbeløp', + 'journal-amount' => 'Gjeldende regningspost', + 'name' => 'Navn', + 'date' => 'Dato', + 'date_and_time' => 'Dato og klokkeslett', + 'time' => 'Tid', + 'paid' => 'Betalt', + 'unpaid' => 'Ikke betalt', + 'day' => 'Dag', + 'budgeted' => 'Budsjettert', + 'period' => 'Periode', + 'balance' => 'Saldo', + 'in_out_period' => 'Inn + ut denne perioden', + 'sum' => 'Sum', + 'summary' => 'Oppsummering', + 'average' => 'Gjennomsnitt', + 'balanceFor' => 'Saldo for :name', + 'no_tags' => '(ingen tagger)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Hendelseshistorikk', - 'add_money_to_piggy' => 'Legg til penger i sparegris ":name"', - 'piggy_bank' => 'Sparegris', - 'new_piggy_bank' => 'Ny sparegris', - 'store_piggy_bank' => 'Opprett ny sparegris', - 'stored_piggy_bank' => 'Lagre ny sparegris ":name"', - 'account_status' => 'Kontostatus', - 'left_for_piggy_banks' => 'Gjenstår i sparegriser', - 'sum_of_piggy_banks' => 'Sum i sparegriser', - 'saved_so_far' => 'Spart til nå', - 'left_to_save' => 'Igjen å spare', - 'suggested_amount' => 'Foreslått månedlig beløp for å spare', - 'add_money_to_piggy_title' => 'Legg til penger i sparegris ":name"', - 'remove_money_from_piggy_title' => 'Fjern penger fra sparegris ":name"', - 'add' => 'Legg til', - 'no_money_for_piggy' => 'Du har ikke flere penger å legge i denne sparegrisen.', - 'suggested_savings_per_month' => 'Foreslått pr. måned', + 'event_history' => 'Hendelseshistorikk', + 'add_money_to_piggy' => 'Legg til penger i sparegris ":name"', + 'piggy_bank' => 'Sparegris', + 'new_piggy_bank' => 'Ny sparegris', + 'store_piggy_bank' => 'Opprett ny sparegris', + 'stored_piggy_bank' => 'Lagre ny sparegris ":name"', + 'account_status' => 'Kontostatus', + 'left_for_piggy_banks' => 'Gjenstår i sparegriser', + 'sum_of_piggy_banks' => 'Sum i sparegriser', + 'saved_so_far' => 'Spart til nå', + 'left_to_save' => 'Igjen å spare', + 'suggested_amount' => 'Foreslått månedlig beløp for å spare', + 'add_money_to_piggy_title' => 'Legg til penger i sparegris ":name"', + 'remove_money_from_piggy_title' => 'Fjern penger fra sparegris ":name"', + 'add' => 'Legg til', + 'no_money_for_piggy' => 'Du har ikke flere penger å legge i denne sparegrisen.', + 'suggested_savings_per_month' => 'Foreslått pr. måned', - 'remove' => 'Fjern', - 'max_amount_add' => 'Maksimumsbeløpet du kan legge til er', - 'max_amount_remove' => 'Maksimumsbeløpet du kan fjerne er', - 'update_piggy_button' => 'Oppdater sparegris', - 'update_piggy_title' => 'Oppdater sparegris ":name"', - 'updated_piggy_bank' => 'Oppdatert sparegris ":name"', - 'details' => 'Detaljer', - 'events' => 'Hendelser', - 'target_amount' => 'Målbeløp', - 'start_date' => 'Startdato', - 'no_start_date' => 'Ingen start dato', - 'target_date' => 'Måldato', - 'no_target_date' => 'Ingen måldato', - 'table' => 'Tabell', - 'delete_piggy_bank' => 'Slett sparegris ":name"', - 'cannot_add_amount_piggy' => 'Kan ikke legge :amount til i ":name".', - 'cannot_remove_from_piggy' => 'Kan ikke fjerne :amount fra ":name".', - 'deleted_piggy_bank' => 'Slettet sparegris ":name"', - 'added_amount_to_piggy' => 'La til :amount i ":name"', - 'removed_amount_from_piggy' => 'Fjernet :amount fra ":name"', - 'piggy_events' => 'Tilhørende sparegriser', + 'remove' => 'Fjern', + 'max_amount_add' => 'Maksimumsbeløpet du kan legge til er', + 'max_amount_remove' => 'Maksimumsbeløpet du kan fjerne er', + 'update_piggy_button' => 'Oppdater sparegris', + 'update_piggy_title' => 'Oppdater sparegris ":name"', + 'updated_piggy_bank' => 'Oppdatert sparegris ":name"', + 'details' => 'Detaljer', + 'events' => 'Hendelser', + 'target_amount' => 'Målbeløp', + 'start_date' => 'Startdato', + 'no_start_date' => 'Ingen start dato', + 'target_date' => 'Måldato', + 'no_target_date' => 'Ingen måldato', + 'table' => 'Tabell', + 'delete_piggy_bank' => 'Slett sparegris ":name"', + 'cannot_add_amount_piggy' => 'Kan ikke legge :amount til i ":name".', + 'cannot_remove_from_piggy' => 'Kan ikke fjerne :amount fra ":name".', + 'deleted_piggy_bank' => 'Slettet sparegris ":name"', + 'added_amount_to_piggy' => 'La til :amount i ":name"', + 'removed_amount_from_piggy' => 'Fjernet :amount fra ":name"', + 'piggy_events' => 'Tilhørende sparegriser', // tags - 'delete_tag' => 'Slett tag ":tag"', - 'deleted_tag' => 'Slettet tag ":tag"', - 'new_tag' => 'Lag ny tag', - 'edit_tag' => 'Rediger tag ":tag"', - 'updated_tag' => 'Oppdatert tag ":tag"', - 'created_tag' => 'Tag ":tag" er opprettet!', + 'delete_tag' => 'Slett tag ":tag"', + 'deleted_tag' => 'Slettet tag ":tag"', + 'new_tag' => 'Lag ny tag', + 'edit_tag' => 'Rediger tag ":tag"', + 'updated_tag' => 'Oppdatert tag ":tag"', + 'created_tag' => 'Tag ":tag" er opprettet!', - 'transaction_journal_information' => 'Transaksjonsinformasjon', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Metainformasjon', - 'transaction_journal_more' => 'Mer informasjon', - 'basic_journal_information' => 'Grunnleggende transaksjonsinformasjon', - 'transaction_journal_extra' => 'Ekstra informasjon', - 'att_part_of_journal' => 'Lagret under «:journal»', - 'total_amount' => 'Totalbeløp', - 'number_of_decimals' => 'Antall desimaler', + 'transaction_journal_information' => 'Transaksjonsinformasjon', + 'transaction_journal_amount' => 'Informasjon om beløp', + 'transaction_journal_meta' => 'Metainformasjon', + 'transaction_journal_more' => 'Mer informasjon', + 'basic_journal_information' => 'Grunnleggende transaksjonsinformasjon', + 'transaction_journal_extra' => 'Ekstra informasjon', + 'att_part_of_journal' => 'Lagret under «:journal»', + 'total_amount' => 'Totalbeløp', + 'number_of_decimals' => 'Antall desimaler', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'Invitasjonen til «:address» har allerede blitt innløst.', - 'invite_is_deleted' => 'Invitasjonen til «:address» har blitt slettet.', - 'invite_new_user_title' => 'Inviter ny bruker', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'E-postadresse', - 'invite_user' => 'Inviter bruker', - 'user_is_invited' => 'E-postadressen «:address» ble invitert til Firefly III', - 'administration' => 'Administrasjon', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invitasjonskoden er allerede brukt', - 'user_administration' => 'Brukeradministrasjon', - 'list_all_users' => 'Alle brukere', - 'all_users' => 'Alle brukere', - 'instance_configuration' => 'Konfigurasjon', - 'firefly_instance_configuration' => 'Konfigurasjonsalternativer for Firefly III', - 'setting_single_user_mode' => 'Enkeltbrukermodus', - 'setting_single_user_mode_explain' => 'Som standard godtar Firefly III bare en (1) registrering: deg. Dette er et sikkerhetstiltak, som hindrer andre i å bruke din instans hvis du ikke tillater dem det. Fremtidige registreringer er blokkert. Når du krysser av denne ruten kan andre bruke din forekomst, forutsatt at de kan nå serveren (når den er koblet til Internett).', - 'store_configuration' => 'Lagre konfigurasjon', - 'single_user_administration' => 'Brukeradministrasjon for :email', - 'edit_user' => 'Rediger bruker :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'Brukerdata', - 'user_information' => 'Brukerinformasjon', - 'total_size' => 'totalstørrelse', - 'budget_or_budgets' => ':count budsjett|:count budsjetter', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_rules regler i :count_groups regel gruppe(r)', - 'tag_or_tags' => ':count tagg|:count tagger', - 'configuration_updated' => 'Konfigurasjonen er oppdatert', - 'setting_is_demo_site' => 'Demo nettsted', - 'setting_is_demo_site_explain' => 'Hvis du avhuker denne boksen, vil installasjonen oppføre seg som om det er en demo site, som kan ha rare bivirkninger.', - 'block_code_bounced' => 'Epostmelding(er) kunne ikke leveres', - 'block_code_expired' => 'Demo-konto utløpt', - 'no_block_code' => 'Ingen grunn for utestengelse eller brukeren er ikke utestengt', - 'block_code_email_changed' => 'Brukeren har ikke bekreftet ny e-postadresse ennå', - 'admin_update_email' => 'I motsetning til profilsiden, vil brukeren IKKE bli varslet om at e-postadressen er endret!', - 'update_user' => 'Oppdater bruker', - 'updated_user' => 'Brukerdata er endret.', - 'delete_user' => 'Slett bruker :email', - 'user_deleted' => 'Brukeren er slettet', - 'send_test_email' => 'Send test-epostmelding', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Send melding', - 'send_test_triggered' => 'Test ble utløst. Sjekk innboksen din og loggfilene.', - 'give_admin_careful' => 'Brukere som får administrative rettigheter kan ta bort din. Vær forsiktig.', - 'admin_maintanance_title' => 'Vedlikehold', - 'admin_maintanance_expl' => 'Noen smarte knapper for Firefly III vedlikehold', - 'admin_maintenance_clear_cache' => 'Tøm hurtigminne', - 'admin_notifications' => 'Admin varsler', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'Bruker får velkomstmelding etter registrering', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'En ny versjon er tilgjengelig', - 'admin_notification_check_invite_created' => 'En bruker er invitert til Firefly III', - 'admin_notification_check_invite_redeemed' => 'En brukerinvitasjon er innløst', - 'all_invited_users' => 'Alle inviterte brukere', - 'save_notification_settings' => 'Lagre innstillinger', - 'notification_settings_saved' => 'Varslingsinnstillingene har blitt lagret', - - - 'split_transaction_title' => 'Beskrivelse av den splittende transaksjon', - 'split_transaction_title_help' => 'Hvis du oppretter en splittet transaksjon, må du ha en hoved beskrivelse for alle deler av transaksjonen.', - 'split_title_help' => 'Hvis du oppretter en splittet transaksjon, må du ha en global beskrivelse for alle deler av transaksjonen.', - 'you_create_transfer' => 'Du lager en overføring.', - 'you_create_withdrawal' => 'Du lager et uttak.', - 'you_create_deposit' => 'Du lager en innskud.', + 'invite_is_already_redeemed' => 'Invitasjonen til «:address» har allerede blitt innløst.', + 'invite_is_deleted' => 'Invitasjonen til «:address» har blitt slettet.', + 'invite_new_user_title' => 'Inviter ny bruker', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'E-postadresse', + 'invite_user' => 'Inviter bruker', + 'user_is_invited' => 'E-postadressen «:address» ble invitert til Firefly III', + 'administration' => 'Administrasjon', + 'system_settings' => 'Systeminnstillinger', + 'code_already_used' => 'Invitasjonskoden er allerede brukt', + 'user_administration' => 'Brukeradministrasjon', + 'list_all_users' => 'Alle brukere', + 'all_users' => 'Alle brukere', + 'instance_configuration' => 'Konfigurasjon', + 'firefly_instance_configuration' => 'Konfigurasjonsalternativer for Firefly III', + 'setting_single_user_mode' => 'Enkeltbrukermodus', + 'setting_single_user_mode_explain' => 'Som standard godtar Firefly III bare en (1) registrering: deg. Dette er et sikkerhetstiltak, som hindrer andre i å bruke din instans hvis du ikke tillater dem det. Fremtidige registreringer er blokkert. Når du krysser av denne ruten kan andre bruke din forekomst, forutsatt at de kan nå serveren (når den er koblet til Internett).', + 'store_configuration' => 'Lagre konfigurasjon', + 'single_user_administration' => 'Brukeradministrasjon for :email', + 'edit_user' => 'Rediger bruker :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'Brukerdata', + 'user_information' => 'Brukerinformasjon', + 'total_size' => 'totalstørrelse', + 'budget_or_budgets' => ':count budsjett|:count budsjetter', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_rules regler i :count_groups regel gruppe(r)', + 'tag_or_tags' => ':count tagg|:count tagger', + 'configuration_updated' => 'Konfigurasjonen er oppdatert', + 'setting_is_demo_site' => 'Demo nettsted', + 'setting_is_demo_site_explain' => 'Hvis du avhuker denne boksen, vil installasjonen oppføre seg som om det er en demo site, som kan ha rare bivirkninger.', + 'block_code_bounced' => 'Epostmelding(er) kunne ikke leveres', + 'block_code_expired' => 'Demo-konto utløpt', + 'no_block_code' => 'Ingen grunn for utestengelse eller brukeren er ikke utestengt', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Brukeren har ikke bekreftet ny e-postadresse ennå', + 'admin_update_email' => 'I motsetning til profilsiden, vil brukeren IKKE bli varslet om at e-postadressen er endret!', + 'update_user' => 'Oppdater bruker', + 'updated_user' => 'Brukerdata er endret.', + 'delete_user' => 'Slett bruker :email', + 'user_deleted' => 'Brukeren er slettet', + 'send_test_email' => 'Send test-epostmelding', + 'send_test_email_text' => 'For å sjekke om installasjonen din er i stand til å sende e-post eller legge ut meldinger på Slack, trykk på denne knappen. Du vil ikke se noen feil her, men loggfilene vil vise eventuelle feil. Du kan trykke på denne knappen så mange ganger du vil. Det er ingen spamkontroll. Meldingen vil bli sendt til :email og bør komme om kort tid.', + 'send_message' => 'Send melding', + 'send_test_triggered' => 'Test ble utløst. Sjekk innboksen din og loggfilene.', + 'give_admin_careful' => 'Brukere som får administrative rettigheter kan ta bort din. Vær forsiktig.', + 'admin_maintanance_title' => 'Vedlikehold', + 'admin_maintanance_expl' => 'Noen smarte knapper for Firefly III vedlikehold', + 'admin_maintenance_clear_cache' => 'Tøm hurtigminne', + 'admin_notifications' => 'Admin varsler', + 'admin_notifications_expl' => 'Følgende varsler kan bli aktivert eller deaktivert av administratoren. Hvis du vil få disse meldingene over Slack også, må du sette "innkommende webhook"-URL.', + 'admin_notification_check_user_new_reg' => 'Bruker får velkomstmelding etter registrering', + 'admin_notification_check_admin_new_reg' => 'Administrator(er) får varsel om ny brukerregistrering', + 'admin_notification_check_new_version' => 'En ny versjon er tilgjengelig', + 'admin_notification_check_invite_created' => 'En bruker er invitert til Firefly III', + 'admin_notification_check_invite_redeemed' => 'En brukerinvitasjon er innløst', + 'all_invited_users' => 'Alle inviterte brukere', + 'save_notification_settings' => 'Lagre innstillinger', + 'notification_settings_saved' => 'Varslingsinnstillingene har blitt lagret', + 'split_transaction_title' => 'Beskrivelse av den splittende transaksjon', + 'split_transaction_title_help' => 'Hvis du oppretter en splittet transaksjon, må du ha en hoved beskrivelse for alle deler av transaksjonen.', + 'split_title_help' => 'Hvis du oppretter en splittet transaksjon, må du ha en global beskrivelse for alle deler av transaksjonen.', + 'you_create_transfer' => 'Du lager en overføring.', + 'you_create_withdrawal' => 'Du lager et uttak.', + 'you_create_deposit' => 'Du lager en innskud.', // links - 'journal_link_configuration' => 'Konfigurasjon av transaksjonslenker', - 'create_new_link_type' => 'Opprett ny lenktype', - 'store_new_link_type' => 'Lagre ny koblingstype', - 'update_link_type' => 'Oppdater koblingstype', - 'edit_link_type' => 'Rediger lenketype ":name"', - 'updated_link_type' => 'Oppdatert lenketype ":name"', - 'delete_link_type' => 'Slett lenketype ":name"', - 'deleted_link_type' => 'Slettet lenketype ":name"', - 'stored_new_link_type' => 'Lagre ny lenketype ":name"', - 'cannot_edit_link_type' => 'Kan ikke redigere lenketype ":name"', - 'link_type_help_name' => 'Dvs. "Duplikater"', - 'link_type_help_inward' => 'Dvs. "duplikater"', - 'link_type_help_outward' => 'Dvs. "dupliseres av"', - 'save_connections_by_moving' => 'Lagre koblingen mellom disse transaksjonene ved å flytte dem til en annen lenktype:', - 'do_not_save_connection' => '(ikke lagre kobling)', - 'link_transaction' => 'Sammenkoble transaksjon', - 'link_to_other_transaction' => 'Koble denne transaksjonen til en annen transaksjon', - 'select_transaction_to_link' => 'Velg en transaksjon å koble til denne transaksjonen. Lenker er for tiden ubrukt i Firefly III (bortsett fra å bli vist), men jeg planlegger å endre dette i fremtiden. Bruk søkeboksen for å velge en transaksjon, enten etter tittel eller etter ID. Hvis du vil legge til egendefinerte lenketyper, sjekk administrasjonsavsnittet.', - 'this_transaction' => 'Denne transaksjonen', - 'transaction' => 'Transaksjon', - 'comments' => 'Kommentarer', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Kan ikke koble disse transaksjonene sammen', - 'selected_transaction' => 'Velg transaksjoner', - 'journals_linked' => 'Transaksjonene er knyttet sammen.', - 'journals_error_linked' => 'Disse transaksjonene er allerede knyttet sammen.', - 'journals_link_to_self' => 'Du kan ikke koble en transaksjon til seg selv', - 'journal_links' => 'Transaksjonskoblinger', - 'this_withdrawal' => 'Dette uttaket', - 'this_deposit' => 'Dette innskuddet', - 'this_transfer' => 'Denne overføringen', - 'overview_for_link' => 'Oversikt for linktype ":name"', - 'source_transaction' => 'Kildetransaksjon', - 'link_description' => 'Lenkebeskrivelse', - 'destination_transaction' => 'Destinasjonstransaksjon', - 'delete_journal_link' => 'Slett koblingen mellom :source og :destination', - 'deleted_link' => 'Slettet kobling', + 'journal_link_configuration' => 'Konfigurasjon av transaksjonslenker', + 'create_new_link_type' => 'Opprett ny lenktype', + 'store_new_link_type' => 'Lagre ny koblingstype', + 'update_link_type' => 'Oppdater koblingstype', + 'edit_link_type' => 'Rediger lenketype ":name"', + 'updated_link_type' => 'Oppdatert lenketype ":name"', + 'delete_link_type' => 'Slett lenketype ":name"', + 'deleted_link_type' => 'Slettet lenketype ":name"', + 'stored_new_link_type' => 'Lagre ny lenketype ":name"', + 'cannot_edit_link_type' => 'Kan ikke redigere lenketype ":name"', + 'link_type_help_name' => 'Dvs. "Duplikater"', + 'link_type_help_inward' => 'Dvs. "duplikater"', + 'link_type_help_outward' => 'Dvs. "dupliseres av"', + 'save_connections_by_moving' => 'Lagre koblingen mellom disse transaksjonene ved å flytte dem til en annen lenktype:', + 'do_not_save_connection' => '(ikke lagre kobling)', + 'link_transaction' => 'Sammenkoble transaksjon', + 'link_to_other_transaction' => 'Koble denne transaksjonen til en annen transaksjon', + 'select_transaction_to_link' => 'Velg en transaksjon å koble til denne transaksjonen. Lenker er for tiden ubrukt i Firefly III (bortsett fra å bli vist), men jeg planlegger å endre dette i fremtiden. Bruk søkeboksen for å velge en transaksjon, enten etter tittel eller etter ID. Hvis du vil legge til egendefinerte lenketyper, sjekk administrasjonsavsnittet.', + 'this_transaction' => 'Denne transaksjonen', + 'transaction' => 'Transaksjon', + 'comments' => 'Kommentarer', + 'link_notes' => 'Eventuelle notater du vil lagre med lenken.', + 'invalid_link_selection' => 'Kan ikke koble disse transaksjonene sammen', + 'selected_transaction' => 'Velg transaksjoner', + 'journals_linked' => 'Transaksjonene er knyttet sammen.', + 'journals_error_linked' => 'Disse transaksjonene er allerede knyttet sammen.', + 'journals_link_to_self' => 'Du kan ikke koble en transaksjon til seg selv', + 'journal_links' => 'Transaksjonskoblinger', + 'this_withdrawal' => 'Dette uttaket', + 'this_deposit' => 'Dette innskuddet', + 'this_transfer' => 'Denne overføringen', + 'overview_for_link' => 'Oversikt for linktype ":name"', + 'source_transaction' => 'Kildetransaksjon', + 'link_description' => 'Lenkebeskrivelse', + 'destination_transaction' => 'Destinasjonstransaksjon', + 'delete_journal_link' => 'Slett koblingen mellom :source og :destination', + 'deleted_link' => 'Slettet kobling', // link translations: - 'Paid_name' => 'Betalt', - 'Refund_name' => 'Refusjon', - 'Reimbursement_name' => 'Tilbakebetaling', - 'Related_name' => 'Relatert', - 'relates to_inward' => 'relatert til', - 'is (partially) refunded by_inward' => 'er (delvis) refundert av', - 'is (partially) paid for by_inward' => 'er (delvis) betalt av', - 'is (partially) reimbursed by_inward' => 'er (delvis) tilbakebetalt av', - 'inward_transaction' => 'Innlands transaksjon', - 'outward_transaction' => 'Utenland transaksjon', - 'relates to_outward' => 'relatert til', - '(partially) refunds_outward' => '(delvise) refusjoner', - '(partially) pays for_outward' => 'betaler (delvis) for', - '(partially) reimburses_outward' => 'tilbakebetaler (delvis)', - 'is (partially) refunded by' => 'er (delvis) refundert av', - 'is (partially) paid for by' => 'er (delvis) betalt av', - 'is (partially) reimbursed by' => 'er (delvis) tilbakebetalt av', - 'relates to' => 'relatert til', - '(partially) refunds' => '(delvise) refusjoner', - '(partially) pays for' => 'betaler (delvis) for', - '(partially) reimburses' => 'tilbakebetaler (delvis)', + 'Paid_name' => 'Betalt', + 'Refund_name' => 'Refusjon', + 'Reimbursement_name' => 'Tilbakebetaling', + 'Related_name' => 'Relatert', + 'relates to_inward' => 'relatert til', + 'is (partially) refunded by_inward' => 'er (delvis) refundert av', + 'is (partially) paid for by_inward' => 'er (delvis) betalt av', + 'is (partially) reimbursed by_inward' => 'er (delvis) tilbakebetalt av', + 'inward_transaction' => 'Innlands transaksjon', + 'outward_transaction' => 'Utenland transaksjon', + 'relates to_outward' => 'relatert til', + '(partially) refunds_outward' => '(delvise) refusjoner', + '(partially) pays for_outward' => 'betaler (delvis) for', + '(partially) reimburses_outward' => 'tilbakebetaler (delvis)', + 'is (partially) refunded by' => 'er (delvis) refundert av', + 'is (partially) paid for by' => 'er (delvis) betalt av', + 'is (partially) reimbursed by' => 'er (delvis) tilbakebetalt av', + 'relates to' => 'relatert til', + '(partially) refunds' => '(delvise) refusjoner', + '(partially) pays for' => 'betaler (delvis) for', + '(partially) reimburses' => 'tilbakebetaler (delvis)', // split a transaction: - 'splits' => 'Deler opp', - 'add_another_split' => 'Legg til en oppdeling til', - 'cannot_edit_opening_balance' => 'Du kan ikke redigere åpningssaldoen til en konto.', - 'no_edit_multiple_left' => 'Du har ikke valgt en tillatt transaksjon for redigering.', - 'breadcrumb_convert_group' => 'Konverter transaksjonen', - 'convert_invalid_source' => 'Kildeinformasjon er ugyldig for transaksjon #%d.', - 'convert_invalid_destination' => 'Målinformasjon er ugyldig for transaksjon #%d.', - 'create_another' => 'Gå tilbake hit etter lagring for å opprette en ny.', - 'after_update_create_another' => 'Gå tilbake hit etter oppdatering, for å fortsette å redigere.', - 'store_as_new' => 'Lagre som en ny transaksjon istedenfor å oppdatere.', - 'reset_after' => 'Nullstill skjema etter innsending', - 'errors_submission' => 'Noe gikk galt med innleveringen. Vennligst sjekk ut feilene.', - 'transaction_expand_split' => 'Utvid splitt', - 'transaction_collapse_split' => 'Kollaps deling', + 'splits' => 'Deler opp', + 'add_another_split' => 'Legg til en oppdeling til', + 'cannot_edit_opening_balance' => 'Du kan ikke redigere åpningssaldoen til en konto.', + 'no_edit_multiple_left' => 'Du har ikke valgt en tillatt transaksjon for redigering.', + 'breadcrumb_convert_group' => 'Konverter transaksjonen', + 'convert_invalid_source' => 'Kildeinformasjon er ugyldig for transaksjon #%d.', + 'convert_invalid_destination' => 'Målinformasjon er ugyldig for transaksjon #%d.', + 'create_another' => 'Gå tilbake hit etter lagring for å opprette en ny.', + 'after_update_create_another' => 'Gå tilbake hit etter oppdatering, for å fortsette å redigere.', + 'store_as_new' => 'Lagre som en ny transaksjon istedenfor å oppdatere.', + 'reset_after' => 'Nullstill skjema etter innsending', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Utvid splitt', + 'transaction_collapse_split' => 'Kollaps deling', // object groups - 'default_group_title_name' => '(ikke gruppert)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ikke gruppert)', + 'default_group_title_name_plain' => 'ikke gruppert', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'La oss opprette en aktivakonto!', - 'no_accounts_intro_asset' => 'Du har ingen aktivakontoer ennå. Aktivakontoer er hovedkontoene dine: brukskonto, sparekonto, delt konto eller til og med kredittkortet ditt.', - 'no_accounts_imperative_asset' => 'For å begynne å bruke Firefly III må du opprette minst én aktivakonto. La oss gjøre det nå:', - 'no_accounts_create_asset' => 'Opprett en aktivakonto', - 'no_accounts_title_expense' => 'La oss lage en utgiftskonto!', - 'no_accounts_intro_expense' => 'Du har ingen utgiftskonto ennå. Utgiftskontoer er de stedene du bruker penger, for eksempel butikker og supermarkeder.', - 'no_accounts_imperative_expense' => 'Utgiftskontoer opprettes automatisk når du oppretter transaksjoner, men du kan også opprette dem manuelt, hvis du vil. La oss lage en nå:', - 'no_accounts_create_expense' => 'Opprett en utgiftskonto', - 'no_accounts_title_revenue' => 'La oss opprette en inntektskonto!', - 'no_accounts_intro_revenue' => 'Du har ingen inntektskonto ennå. Inntektskontoer er de stedene du mottar penger fra, for eksempel arbeidsgiveren din.', - 'no_accounts_imperative_revenue' => 'Inntektsskontoer opprettes automatisk når du oppretter transaksjoner, men du kan også opprette dem manuelt, hvis du vil. La oss lage en nå:', - 'no_accounts_create_revenue' => 'Opprett en inntektskonto', - 'no_accounts_title_liabilities' => 'La oss lage et lån!', - 'no_accounts_intro_liabilities' => 'Du har ingen gjeld ennå. "Gjeldskonto" er kontoer som du registrerer (studie) lån og andre former for gjeld på.', - 'no_accounts_imperative_liabilities' => 'Du behøver ikke bruke denne funksjonen, men den kan være fornuftig å bruke når du vil ha kontroll på disse tingene.', - 'no_accounts_create_liabilities' => 'Opprett gjeld', - 'no_budgets_title_default' => 'La oss lage et budsjett', - 'no_rules_title_default' => 'La oss lage en regel', - 'no_budgets_intro_default' => 'Du har ingen budsjett ennå. Budsjett brukes til å organisere utgiftene i logiske grupper, som du kan sette tak på for å begrense utgiftene dine.', - 'no_rules_intro_default' => 'Du har ingen regler ennå. Regler er kraftfulle automatiseringer som kan håndtere transaksjoner for deg.', - 'no_rules_imperative_default' => 'Regler kan være veldig nyttige når du håndterer transaksjoner. La oss lage en nå:', - 'no_budgets_imperative_default' => 'Budsjett er et basis verktøy for finansiell administrasjon. La oss lage et nå:', - 'no_budgets_create_default' => 'Opprett et budsjett', - 'no_rules_create_default' => 'Opprett en regel', - 'no_categories_title_default' => 'La oss lage en kategori!', - 'no_categories_intro_default' => 'Du har ingen kategorier ennå. Kategorier brukes til å finjustere dine transaksjoner og merke dem med sin egen kategori.', - 'no_categories_imperative_default' => 'Kategorier opprettes automatisk når du oppretter transaksjoner, men du kan opprette en manuelt også. La oss opprette en nå:', - 'no_categories_create_default' => 'Opprett en kategori', - 'no_tags_title_default' => 'La oss lage en tagg!', - 'no_tags_intro_default' => 'Du har ingen tagger enda. Tagger benyttes for å finjustere transaksjonene dine og merke dem med spesifikke nøkkelord.', - 'no_tags_imperative_default' => 'Tags blir opprettet automatisk når du lager transaksjoner, men du kan lage de manuelt også. La oss lage en nå:', - 'no_tags_create_default' => 'Opprett en tagg', - 'no_transactions_title_withdrawal' => 'La oss lage en utgift!', - 'no_transactions_intro_withdrawal' => 'Du har ingen utgifter ennå. Du kan legge inn utgifter for å begynne å administrere din økonomi.', - 'no_transactions_imperative_withdrawal' => 'Har du brukt penger? Da bør du skrive det ned:', - 'no_transactions_create_withdrawal' => 'Opprett en utgift', - 'no_transactions_title_deposit' => 'La oss legge inn noen inntekter!', - 'no_transactions_intro_deposit' => 'Du har ingen registrert inntekt ennå. Du kan legge inn inntekter for å begynne å administrere din økonomi.', - 'no_transactions_imperative_deposit' => 'Har du mottatt penger? Da bør du skrive det ned:', - 'no_transactions_create_deposit' => 'Opprett et innskudd', - 'no_transactions_title_transfers' => 'La oss legge inn en overføring!', - 'no_transactions_intro_transfers' => 'Du har ingen overføringer ennå. Når du flytter penger mellom aktivakontoer, registreres dette som en overføring.', - 'no_transactions_imperative_transfers' => 'Har du flyttet penger rundt? Da bør du skrive det ned:', - 'no_transactions_create_transfers' => 'Opprett en overføring', - 'no_piggies_title_default' => 'La oss lage en sparegris!', - 'no_piggies_intro_default' => 'Du har ingen sparegriser ennå. Du kan opprette sparegriser for å forenkle sparing og holde oversikt over hva du sparer til.', - 'no_piggies_imperative_default' => 'Har du ting du sparer penger til? Lag en sparegris for å få kontroll på sparingen:', - 'no_piggies_create_default' => 'Lag en ny sparegris', - 'no_bills_title_default' => 'La oss legge inn en regning!', - 'no_bills_intro_default' => 'Du har ingen regninger ennå. Du kan opprette regninger for å holde oversikt over vanlige utgifter, som husleie eller forsikringer.', - 'no_bills_imperative_default' => 'Har du regninger som kommer jevnlig? Opprett en regning og for å holde styr på dine betalinger:', - 'no_bills_create_default' => 'Opprett en regning', + 'no_accounts_title_asset' => 'La oss opprette en aktivakonto!', + 'no_accounts_intro_asset' => 'Du har ingen aktivakontoer ennå. Aktivakontoer er hovedkontoene dine: brukskonto, sparekonto, delt konto eller til og med kredittkortet ditt.', + 'no_accounts_imperative_asset' => 'For å begynne å bruke Firefly III må du opprette minst én aktivakonto. La oss gjøre det nå:', + 'no_accounts_create_asset' => 'Opprett en aktivakonto', + 'no_accounts_title_expense' => 'La oss lage en utgiftskonto!', + 'no_accounts_intro_expense' => 'Du har ingen utgiftskonto ennå. Utgiftskontoer er de stedene du bruker penger, for eksempel butikker og supermarkeder.', + 'no_accounts_imperative_expense' => 'Utgiftskontoer opprettes automatisk når du oppretter transaksjoner, men du kan også opprette dem manuelt, hvis du vil. La oss lage en nå:', + 'no_accounts_create_expense' => 'Opprett en utgiftskonto', + 'no_accounts_title_revenue' => 'La oss opprette en inntektskonto!', + 'no_accounts_intro_revenue' => 'Du har ingen inntektskonto ennå. Inntektskontoer er de stedene du mottar penger fra, for eksempel arbeidsgiveren din.', + 'no_accounts_imperative_revenue' => 'Inntektsskontoer opprettes automatisk når du oppretter transaksjoner, men du kan også opprette dem manuelt, hvis du vil. La oss lage en nå:', + 'no_accounts_create_revenue' => 'Opprett en inntektskonto', + 'no_accounts_title_liabilities' => 'La oss lage et lån!', + 'no_accounts_intro_liabilities' => 'Du har ingen gjeld ennå. "Gjeldskonto" er kontoer som du registrerer (studie) lån og andre former for gjeld på.', + 'no_accounts_imperative_liabilities' => 'Du behøver ikke bruke denne funksjonen, men den kan være fornuftig å bruke når du vil ha kontroll på disse tingene.', + 'no_accounts_create_liabilities' => 'Opprett gjeld', + 'no_budgets_title_default' => 'La oss lage et budsjett', + 'no_rules_title_default' => 'La oss lage en regel', + 'no_budgets_intro_default' => 'Du har ingen budsjett ennå. Budsjett brukes til å organisere utgiftene i logiske grupper, som du kan sette tak på for å begrense utgiftene dine.', + 'no_rules_intro_default' => 'Du har ingen regler ennå. Regler er kraftfulle automatiseringer som kan håndtere transaksjoner for deg.', + 'no_rules_imperative_default' => 'Regler kan være veldig nyttige når du håndterer transaksjoner. La oss lage en nå:', + 'no_budgets_imperative_default' => 'Budsjett er et basis verktøy for finansiell administrasjon. La oss lage et nå:', + 'no_budgets_create_default' => 'Opprett et budsjett', + 'no_rules_create_default' => 'Opprett en regel', + 'no_categories_title_default' => 'La oss lage en kategori!', + 'no_categories_intro_default' => 'Du har ingen kategorier ennå. Kategorier brukes til å finjustere dine transaksjoner og merke dem med sin egen kategori.', + 'no_categories_imperative_default' => 'Kategorier opprettes automatisk når du oppretter transaksjoner, men du kan opprette en manuelt også. La oss opprette en nå:', + 'no_categories_create_default' => 'Opprett en kategori', + 'no_tags_title_default' => 'La oss lage en tagg!', + 'no_tags_intro_default' => 'Du har ingen tagger enda. Tagger benyttes for å finjustere transaksjonene dine og merke dem med spesifikke nøkkelord.', + 'no_tags_imperative_default' => 'Tags blir opprettet automatisk når du lager transaksjoner, men du kan lage de manuelt også. La oss lage en nå:', + 'no_tags_create_default' => 'Opprett en tagg', + 'no_transactions_title_withdrawal' => 'La oss lage en utgift!', + 'no_transactions_intro_withdrawal' => 'Du har ingen utgifter ennå. Du kan legge inn utgifter for å begynne å administrere din økonomi.', + 'no_transactions_imperative_withdrawal' => 'Har du brukt penger? Da bør du skrive det ned:', + 'no_transactions_create_withdrawal' => 'Opprett en utgift', + 'no_transactions_title_deposit' => 'La oss legge inn noen inntekter!', + 'no_transactions_intro_deposit' => 'Du har ingen registrert inntekt ennå. Du kan legge inn inntekter for å begynne å administrere din økonomi.', + 'no_transactions_imperative_deposit' => 'Har du mottatt penger? Da bør du skrive det ned:', + 'no_transactions_create_deposit' => 'Opprett et innskudd', + 'no_transactions_title_transfers' => 'La oss legge inn en overføring!', + 'no_transactions_intro_transfers' => 'Du har ingen overføringer ennå. Når du flytter penger mellom aktivakontoer, registreres dette som en overføring.', + 'no_transactions_imperative_transfers' => 'Har du flyttet penger rundt? Da bør du skrive det ned:', + 'no_transactions_create_transfers' => 'Opprett en overføring', + 'no_piggies_title_default' => 'La oss lage en sparegris!', + 'no_piggies_intro_default' => 'Du har ingen sparegriser ennå. Du kan opprette sparegriser for å forenkle sparing og holde oversikt over hva du sparer til.', + 'no_piggies_imperative_default' => 'Har du ting du sparer penger til? Lag en sparegris for å få kontroll på sparingen:', + 'no_piggies_create_default' => 'Lag en ny sparegris', + 'no_bills_title_default' => 'La oss legge inn en regning!', + 'no_bills_intro_default' => 'Du har ingen regninger ennå. Du kan opprette regninger for å holde oversikt over vanlige utgifter, som husleie eller forsikringer.', + 'no_bills_imperative_default' => 'Har du regninger som kommer jevnlig? Opprett en regning og for å holde styr på dine betalinger:', + 'no_bills_create_default' => 'Opprett en regning', // recurring transactions - 'create_right_now' => 'Opprett med en gang', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Gjentakende transaksjoner', - 'repeat_until_in_past' => 'Denne gjentakende transaksjonen sluttet å gjenta :date.', - 'recurring_calendar_view' => 'Kalender', - 'no_recurring_title_default' => 'La oss opprette en gjentakende transaksjon!', - 'no_recurring_intro_default' => 'Du har ingen gjentakende transaksjoner ennå. Du kan bruke disse for å få Firefly III til å automatisk opprette transaksjoner for deg.', - 'no_recurring_imperative_default' => 'Dette er en ganske avansert funksjon, men det kan være svært nyttig. Husk å lese dokumentasjonen ((?)-ikonet øverst til høyre) før du fortsetter.', - 'no_recurring_create_default' => 'Opprett en gjentakende transaksjon', - 'make_new_recurring' => 'Opprett en gjentakende transaksjon', - 'recurring_daily' => 'Daglig', - 'recurring_weekly' => 'Hver uke på :weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => 'Hver måned på :dayOfMonth :weekday', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Hver måned på :dayOfMonth :weekday', - 'recurring_yearly' => 'Hvert år den :date', - 'overview_for_recurrence' => 'Oversikt for gjentakende transaksjon ":title"', - 'warning_duplicates_repetitions' => 'I sjeldne tilfeller vises datoene to ganger i listen. Dette kan skje når flere gjentakelser kolliderer. Firefly III genererer alltid én transaksjon per dag.', - 'created_transactions' => 'Relaterte transaksjoner', - 'expected_withdrawals' => 'Forventede uttak', - 'expected_deposits' => 'Forventede innskudd', - 'expected_transfers' => 'Forventede overføringer', - 'created_withdrawals' => 'Opprettede uttak', - 'created_deposits' => 'Opprettede innskudd', - 'created_transfers' => 'Opprettede overføringer', - 'recurring_info' => 'Gjentagende transaksjon :count / :total', - 'created_from_recurrence' => 'Opprettet fra gjentakende transaksjon ":title" (#:id)', - 'recurring_never_cron' => 'Det synes at cron jobben som er nødvendig for å støtte gjentakende transaksjoner har aldri kjørt. Dette er selvfølgelig normalt når du nettopp har installert Firefly III, men dette bør settes opp så snart som mulig. Sjekk ut hjelp-sidene ved å bruke (?) -ikonet i øverste høyre hjørne på siden.', - 'recurring_cron_long_ago' => 'Det ser ut som det har gått mer enn 36 timer siden cron job\'en for å støtte gjentakende transaksjoner har kjørt. Er du sikker på at den er satt opp riktig? Sjekk ut hjelpe-sidene ved å bruke (?) -ikonet i øverste høyre hjørne på siden.', + 'create_right_now' => 'Opprett med en gang', + 'no_new_transaction_in_recurrence' => 'Ingen ny transaksjon ble opprettet. Kanskje de allerede var utført for denne datoen?', + 'recurrences' => 'Gjentakende transaksjoner', + 'repeat_until_in_past' => 'Denne gjentakende transaksjonen sluttet å gjenta :date.', + 'recurring_calendar_view' => 'Kalender', + 'no_recurring_title_default' => 'La oss opprette en gjentakende transaksjon!', + 'no_recurring_intro_default' => 'Du har ingen gjentakende transaksjoner ennå. Du kan bruke disse for å få Firefly III til å automatisk opprette transaksjoner for deg.', + 'no_recurring_imperative_default' => 'Dette er en ganske avansert funksjon, men det kan være svært nyttig. Husk å lese dokumentasjonen ((?)-ikonet øverst til høyre) før du fortsetter.', + 'no_recurring_create_default' => 'Opprett en gjentakende transaksjon', + 'make_new_recurring' => 'Opprett en gjentakende transaksjon', + 'recurring_daily' => 'Daglig', + 'recurring_weekly' => 'Hver uke på :weekday', + 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', + 'recurring_monthly' => 'Hver måned på :dayOfMonth :weekday', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => 'Hver måned på :dayOfMonth :weekday', + 'recurring_yearly' => 'Hvert år den :date', + 'overview_for_recurrence' => 'Oversikt for gjentakende transaksjon ":title"', + 'warning_duplicates_repetitions' => 'I sjeldne tilfeller vises datoene to ganger i listen. Dette kan skje når flere gjentakelser kolliderer. Firefly III genererer alltid én transaksjon per dag.', + 'created_transactions' => 'Relaterte transaksjoner', + 'expected_withdrawals' => 'Forventede uttak', + 'expected_deposits' => 'Forventede innskudd', + 'expected_transfers' => 'Forventede overføringer', + 'created_withdrawals' => 'Opprettede uttak', + 'created_deposits' => 'Opprettede innskudd', + 'created_transfers' => 'Opprettede overføringer', + 'recurring_info' => 'Gjentagende transaksjon :count / :total', + 'created_from_recurrence' => 'Opprettet fra gjentakende transaksjon ":title" (#:id)', + 'recurring_never_cron' => 'Det synes at cron jobben som er nødvendig for å støtte gjentakende transaksjoner har aldri kjørt. Dette er selvfølgelig normalt når du nettopp har installert Firefly III, men dette bør settes opp så snart som mulig. Sjekk ut hjelp-sidene ved å bruke (?) -ikonet i øverste høyre hjørne på siden.', + 'recurring_cron_long_ago' => 'Det ser ut som det har gått mer enn 36 timer siden cron job\'en for å støtte gjentakende transaksjoner har kjørt. Er du sikker på at den er satt opp riktig? Sjekk ut hjelpe-sidene ved å bruke (?) -ikonet i øverste høyre hjørne på siden.', - 'create_new_recurrence' => 'Lag ny gjentakende transaksjon', - 'help_first_date' => 'Spesifiser den første forventede gjentakelse, det må være i fremtiden.', - 'help_first_date_no_past' => 'Spesifiser den første forventede gjentakelse. Firefly III vil ikke opprette transaksjoner i fortiden.', - 'no_currency' => '(ingen valuta)', - 'mandatory_for_recurring' => 'Pålagt gjentakelses informasjon', - 'mandatory_for_transaction' => 'Pålagt transaksjons informasjon', - 'optional_for_recurring' => 'Valgfritt gjentakelses informasjon', - 'optional_for_transaction' => 'Valgfritt transaksjons informasjon', - 'change_date_other_options' => 'Ved å endre på "første dato" får du flere valg.', - 'mandatory_fields_for_tranaction' => 'Verdiene her vil ende opp i transaksjonene som blir opprettet', - 'click_for_calendar' => 'Trykk her for å få en kalender som viser deg når transaksjonen vil gjenta seg.', - 'repeat_forever' => 'Gjenta for alltid', - 'repeat_until_date' => 'Gjenta til dato', - 'repeat_times' => 'Gjenta antall ganger', - 'recurring_skips_one' => 'Annen hver', - 'recurring_skips_more' => 'Hopper over :count forekomster', - 'store_new_recurrence' => 'Lagre gjentakende transaksjon', - 'stored_new_recurrence' => 'Gjentakende transaksjon ":title" lagret.', - 'edit_recurrence' => 'Rediger gjentakende transaksjon ":title"', - 'recurring_repeats_until' => 'Gjenta til :date', - 'recurring_repeats_forever' => 'Gjenta for alltid', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Oppdater gjentakende transaksjon', - 'updated_recurrence' => 'Oppdatert gjentakende transaksjon ":title"', - 'recurrence_is_inactive' => 'Denne gjentakende transaksjonen er ikke aktiv og vil ikke generere nye transaksjoner.', - 'delete_recurring' => 'Slett gjentakende transaksjon ":title"', - 'new_recurring_transaction' => 'Opprett gjentakende transaksjon', - 'help_weekend' => 'Hva skal Firefly III gjøre når gjentakende transaksjon faller på en Lørdag eller Søndag?', - 'do_nothing' => 'Bare opprett transaksjonen', - 'skip_transaction' => 'Hopp over forekomsten', - 'jump_to_friday' => 'Opprett transaksjonen på foregående Fredag istedet', - 'jump_to_monday' => 'Opprett transaksjonen på neste Mandag istedet', - 'will_jump_friday' => 'Opprettes på Fredag i stedet for i helgene.', - 'will_jump_monday' => 'Opprettes på Mandag i stedet for i helgene.', - 'except_weekends' => 'Unntatt helger', - 'recurrence_deleted' => 'Gjentakende transaksjon ":title" slettet', + 'create_new_recurrence' => 'Lag ny gjentakende transaksjon', + 'help_first_date' => 'Spesifiser den første forventede gjentakelse, det må være i fremtiden.', + 'help_first_date_no_past' => 'Spesifiser den første forventede gjentakelse. Firefly III vil ikke opprette transaksjoner i fortiden.', + 'no_currency' => '(ingen valuta)', + 'mandatory_for_recurring' => 'Pålagt gjentakelses informasjon', + 'mandatory_for_transaction' => 'Pålagt transaksjons informasjon', + 'optional_for_recurring' => 'Valgfritt gjentakelses informasjon', + 'optional_for_transaction' => 'Valgfritt transaksjons informasjon', + 'change_date_other_options' => 'Ved å endre på "første dato" får du flere valg.', + 'mandatory_fields_for_tranaction' => 'Verdiene her vil ende opp i transaksjonene som blir opprettet', + 'click_for_calendar' => 'Trykk her for å få en kalender som viser deg når transaksjonen vil gjenta seg.', + 'repeat_forever' => 'Gjenta for alltid', + 'repeat_until_date' => 'Gjenta til dato', + 'repeat_times' => 'Gjenta antall ganger', + 'recurring_skips_one' => 'Annen hver', + 'recurring_skips_more' => 'Hopper over :count forekomster', + 'store_new_recurrence' => 'Lagre gjentakende transaksjon', + 'stored_new_recurrence' => 'Gjentakende transaksjon ":title" lagret.', + 'edit_recurrence' => 'Rediger gjentakende transaksjon ":title"', + 'recurring_repeats_until' => 'Gjenta til :date', + 'recurring_repeats_forever' => 'Gjenta for alltid', + 'recurring_repeats_x_times' => 'Gjentas om :count|Gjentar seg :count ganger', + 'update_recurrence' => 'Oppdater gjentakende transaksjon', + 'updated_recurrence' => 'Oppdatert gjentakende transaksjon ":title"', + 'recurrence_is_inactive' => 'Denne gjentakende transaksjonen er ikke aktiv og vil ikke generere nye transaksjoner.', + 'delete_recurring' => 'Slett gjentakende transaksjon ":title"', + 'new_recurring_transaction' => 'Opprett gjentakende transaksjon', + 'help_weekend' => 'Hva skal Firefly III gjøre når gjentakende transaksjon faller på en Lørdag eller Søndag?', + 'do_nothing' => 'Bare opprett transaksjonen', + 'skip_transaction' => 'Hopp over forekomsten', + 'jump_to_friday' => 'Opprett transaksjonen på foregående Fredag istedet', + 'jump_to_monday' => 'Opprett transaksjonen på neste Mandag istedet', + 'will_jump_friday' => 'Opprettes på Fredag i stedet for i helgene.', + 'will_jump_monday' => 'Opprettes på Mandag i stedet for i helgene.', + 'except_weekends' => 'Unntatt helger', + 'recurrence_deleted' => 'Gjentakende transaksjon ":title" slettet', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balanse i (:currency)', - 'box_spent_in_currency' => 'Brukt (:currency)', - 'box_earned_in_currency' => 'Opptjent (:currency)', - 'box_budgeted_in_currency' => 'Budsjettert (:currency)', - 'box_bill_paid_in_currency' => 'Betalte faktura (:currency)', - 'box_bill_unpaid_in_currency' => 'Ubetalte faktura (:currency)', - 'box_left_to_spend_in_currency' => 'Igjen å bruke (:currency)', - 'box_net_worth_in_currency' => 'Net worth (:currency)', - 'box_spend_per_day' => 'Left to spend per day: :amount', + 'box_balance_in_currency' => 'Balanse i (:currency)', + 'box_spent_in_currency' => 'Brukt (:currency)', + 'box_earned_in_currency' => 'Opptjent (:currency)', + 'box_budgeted_in_currency' => 'Budsjettert (:currency)', + 'box_bill_paid_in_currency' => 'Betalte faktura (:currency)', + 'box_bill_unpaid_in_currency' => 'Ubetalte faktura (:currency)', + 'box_left_to_spend_in_currency' => 'Igjen å bruke (:currency)', + 'box_net_worth_in_currency' => 'Nettoverdi (:currency)', + 'box_spend_per_day' => 'Igjen å bruke per dag: :amount', // debug page - 'debug_page' => 'Debug page', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Feilsøk side', + 'debug_submit_instructions' => 'Hvis du støter på problemer, kan du bruke informasjonen i denne boksen som feilsøkingsinformasjon. Kopier og lim inn i en ny eller eksisterende GitHub issue. Den vil generere en tabell som kan brukes til å diagnostisere problemet.', + 'debug_pretty_table' => 'Hvis du kopierer/limer inn boksen under i et GitHub issue, vil det generere en tabell. Ikke omgi denne teksten med aksentsymboler eller anførselstegn.', + 'debug_additional_data' => 'Du kan også dele innholdet i boksen nedenfor. Du kan kopiere og lime inn dette i en ny eller eksisterende GitHub-sak. Vær imidlertid oppmerksom på at innholdet i denne boksen kan inneholde privat informasjon som kontonavn, transaksjonsdetaljer og/eller e-postadresser.', // object groups - 'object_groups_menu_bar' => 'Grupper', - 'object_groups_page_title' => 'Grupper', - 'object_groups_breadcrumb' => 'Grupper', - 'object_groups_index' => 'Oversikt', - 'object_groups' => 'Grupper', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Tittel', - 'edit_object_group' => 'Rediger gruppen «:title»', - 'delete_object_group' => 'Slett gruppen «:title»', - 'update_object_group' => 'Oppdater gruppe', - 'updated_object_group' => 'Gruppen «:title» ble oppdatert', - 'deleted_object_group' => 'Gruppen «:title» ble slettet', - 'object_group' => 'Gruppe', + 'object_groups_menu_bar' => 'Grupper', + 'object_groups_page_title' => 'Grupper', + 'object_groups_breadcrumb' => 'Grupper', + 'object_groups_index' => 'Oversikt', + 'object_groups' => 'Grupper', + 'object_groups_empty_explain' => 'Noen elementer i Firefly III kan deles inn i grupper. Sparegriser, for eksempel, har et "Gruppe"-felt på redigerings- og opprettelsesskjermene. Når du angir dette feltet, kan du redigere navnene og rekkefølgen på gruppene på denne siden. For mer informasjon, sjekk hjelpesidene i øverste høyre hjørne, under (?)-ikonet.', + 'object_group_title' => 'Tittel', + 'edit_object_group' => 'Rediger gruppen «:title»', + 'delete_object_group' => 'Slett gruppen «:title»', + 'update_object_group' => 'Oppdater gruppe', + 'updated_object_group' => 'Gruppen «:title» ble oppdatert', + 'deleted_object_group' => 'Gruppen «:title» ble slettet', + 'object_group' => 'Gruppe', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'La til :amount i sparegrisen «:name»', - 'ale_action_log_remove' => 'Fjernet :amount fra sparegrisen «:name»', - 'ale_action_clear_budget' => 'Fjernet fra budsjett', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Fjernet fra kategori', - 'ale_action_clear_notes' => 'Fjernet notater', - 'ale_action_clear_tag' => 'Fjernet tagg', - 'ale_action_clear_all_tags' => 'Fjernet alle tagger', - 'ale_action_set_bill' => 'Koblet til regning', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Sett budsjett', - 'ale_action_set_category' => 'Sett kategori', - 'ale_action_set_source' => 'Sett kildekonto', - 'ale_action_set_destination' => 'Sett målkonto', - 'ale_action_update_transaction_type' => 'Endret transaksjonstype', - 'ale_action_update_notes' => 'Endret notater', - 'ale_action_update_description' => 'Endret beskrivelse', - 'ale_action_add_to_piggy' => 'Sparegris', - 'ale_action_remove_from_piggy' => 'Sparegris', - 'ale_action_add_tag' => 'La til tagg', + 'audit_log_entries' => 'Gjennomgå loggoppføringer', + 'ale_action_log_add' => 'La til :amount i sparegrisen «:name»', + 'ale_action_log_remove' => 'Fjernet :amount fra sparegrisen «:name»', + 'ale_action_clear_budget' => 'Fjernet fra budsjett', + 'ale_action_update_group_title' => 'Oppdatert transaksjonsgruppens tittel', + 'ale_action_update_date' => 'Oppdatert transaksjonsdato', + 'ale_action_update_order' => 'Oppdatert transaksjonsrekkefølge', + 'ale_action_clear_category' => 'Fjernet fra kategori', + 'ale_action_clear_notes' => 'Fjernet notater', + 'ale_action_clear_tag' => 'Fjernet tagg', + 'ale_action_clear_all_tags' => 'Fjernet alle tagger', + 'ale_action_set_bill' => 'Koblet til regning', + 'ale_action_switch_accounts' => 'Byttet kilde og målkonto', + 'ale_action_set_budget' => 'Sett budsjett', + 'ale_action_set_category' => 'Sett kategori', + 'ale_action_set_source' => 'Sett kildekonto', + 'ale_action_set_destination' => 'Sett målkonto', + 'ale_action_update_transaction_type' => 'Endret transaksjonstype', + 'ale_action_update_notes' => 'Endret notater', + 'ale_action_update_description' => 'Endret beskrivelse', + 'ale_action_add_to_piggy' => 'Sparegris', + 'ale_action_remove_from_piggy' => 'Sparegris', + 'ale_action_add_tag' => 'La til tagg', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Aktiver valutakonvertering', + 'disable_auto_convert' => 'Deaktiver valutakonvertering', ]; /* diff --git a/resources/lang/nb_NO/form.php b/resources/lang/nb_NO/form.php index 5b0b611824..81d80608f2 100644 --- a/resources/lang/nb_NO/form.php +++ b/resources/lang/nb_NO/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Bankens navn', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Sparesaldo', - 'credit_card_limit' => 'Kredittkortgrense', - 'automatch' => 'Finn automatisk', - 'skip' => 'Hopp over', - 'enabled' => 'Aktivert', - 'name' => 'Navn', - 'active' => 'Aktiv', - 'amount_min' => 'Minimumsbeløp', - 'amount_max' => 'Maksimumsbeløp', - 'match' => 'Treff på', - 'strict' => 'Streng modus', - 'repeat_freq' => 'Gjentas', - 'object_group' => 'Gruppe', - 'location' => 'Sted', - 'update_channel' => 'Oppdater kanal', - 'currency_id' => 'Valuta', - 'transaction_currency_id' => 'Valuta', - 'auto_budget_currency_id' => 'Valuta', - 'external_ip' => 'Serverens eksterne IP', - 'attachments' => 'Vedlegg', - 'BIC' => 'BIC', - 'verify_password' => 'Bekreft passordsikkerhet', - 'source_account' => 'Kildekonto', - 'destination_account' => 'Målkonto', - 'asset_destination_account' => 'Destinasjonskonto', - 'include_net_worth' => 'Inkluder i formue', - 'asset_source_account' => 'Kildekonto', - 'journal_description' => 'Beskrivelse', - 'note' => 'Notater', - 'currency' => 'Valuta', - 'account_id' => 'Aktivakonto', - 'budget_id' => 'Busjett', - 'bill_id' => 'Regning', - 'opening_balance' => 'Inngående balanse', - 'tagMode' => 'Taggmodus', - 'virtual_balance' => 'Virtuell balanse', + 'bank_name' => 'Bankens navn', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Sparesaldo', + 'credit_card_limit' => 'Kredittkortgrense', + 'automatch' => 'Finn automatisk', + 'skip' => 'Hopp over', + 'enabled' => 'Aktivert', + 'name' => 'Navn', + 'active' => 'Aktiv', + 'amount_min' => 'Minimumsbeløp', + 'amount_max' => 'Maksimumsbeløp', + 'match' => 'Treff på', + 'strict' => 'Streng modus', + 'repeat_freq' => 'Gjentas', + 'object_group' => 'Gruppe', + 'location' => 'Sted', + 'update_channel' => 'Oppdater kanal', + 'currency_id' => 'Valuta', + 'transaction_currency_id' => 'Valuta', + 'auto_budget_currency_id' => 'Valuta', + 'external_ip' => 'Serverens eksterne IP', + 'attachments' => 'Vedlegg', + 'BIC' => 'BIC', + 'verify_password' => 'Bekreft passordsikkerhet', + 'source_account' => 'Kildekonto', + 'destination_account' => 'Målkonto', + 'asset_destination_account' => 'Destinasjonskonto', + 'include_net_worth' => 'Inkluder i formue', + 'asset_source_account' => 'Kildekonto', + 'journal_description' => 'Beskrivelse', + 'note' => 'Notater', + 'currency' => 'Valuta', + 'account_id' => 'Aktivakonto', + 'budget_id' => 'Busjett', + 'bill_id' => 'Regning', + 'opening_balance' => 'Inngående balanse', + 'tagMode' => 'Taggmodus', + 'virtual_balance' => 'Virtuell balanse', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Målbeløp', 'account_role' => 'Konto rolle', 'opening_balance_date' => 'Dato inngående saldo', @@ -147,7 +145,7 @@ return [ 'start_date' => 'Startgrense', 'end_date' => 'Sluttgrense', 'enddate' => 'Sluttdato', - 'move_rules_before_delete' => 'Rule group', + 'move_rules_before_delete' => 'Regelgruppe', 'start' => 'Start område', 'end' => 'Slutt område', 'delete_account' => 'Slett konto ":name"', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Er du sikker på at du vil slette transaksjonen med beskrivelse ":description"?', 'mass_journal_are_you_sure' => 'Er du sikker på at du vil slette disse transaksjonene?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Er du sikker på at du vil slette taggen ":tag"?', 'journal_link_areYouSure' => 'Er du sikker på at du vil slette koblingen mellom :source og :destination?', 'linkType_areYouSure' => 'Er du sikker på at du vil slette koblingstypen ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Sang', - // admin 'domain' => 'Domene', 'single_user_mode' => 'Deaktiver brukerregistrering', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS konto', 'local_account' => 'Firefly III konto', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Dato fra', - 'to_date' => 'Dato til', - 'due_date' => 'Forfallsdato', - 'payment_date' => 'Betalingsdato', - 'invoice_date' => 'Fakturadato', - 'internal_reference' => 'Intern referanse', - 'inward' => 'Innvendig beskrivelse', - 'outward' => 'Utvendig beskrivelse', - 'rule_group_id' => 'Regelgruppe', - 'transaction_description' => 'Transaksjonsbeskrivelse', - 'first_date' => 'Første dato', - 'transaction_type' => 'Transaksjonstype', - 'repeat_until' => 'Gjenta til', - 'recurring_description' => 'Gjentakende transaksjonsbeskrivelse', - 'repetition_type' => 'Type repetisjon', - 'foreign_currency_id' => 'Utenlandsk valuta', - 'repetition_end' => 'Repetisjon slutter', - 'repetitions' => 'Repetisjoner', - 'calendar' => 'Kalender', - 'weekend' => 'Helg', - 'client_secret' => 'Client Secret', - 'withdrawal_destination_id' => 'Målkonto', - 'deposit_source_id' => 'Kildekonto', - 'expected_on' => 'Forventet den', - 'paid' => 'Betalt', - 'auto_budget_type' => 'Auto-budsjett', - 'auto_budget_amount' => 'Auto-budsjett beløp', - 'auto_budget_period' => 'Auto-budsjett periode', - 'collected' => 'Innhentet', - 'submitted' => 'Innsendt', - 'key' => 'Nøkkel', - 'value' => 'Innhold i registeret', - 'webhook_delivery' => 'Levering', - 'webhook_response' => 'Respons', - 'webhook_trigger' => 'Utløser', + 'from_date' => 'Dato fra', + 'to_date' => 'Dato til', + 'due_date' => 'Forfallsdato', + 'payment_date' => 'Betalingsdato', + 'invoice_date' => 'Fakturadato', + 'internal_reference' => 'Intern referanse', + 'inward' => 'Innvendig beskrivelse', + 'outward' => 'Utvendig beskrivelse', + 'rule_group_id' => 'Regelgruppe', + 'transaction_description' => 'Transaksjonsbeskrivelse', + 'first_date' => 'Første dato', + 'transaction_type' => 'Transaksjonstype', + 'repeat_until' => 'Gjenta til', + 'recurring_description' => 'Gjentakende transaksjonsbeskrivelse', + 'repetition_type' => 'Type repetisjon', + 'foreign_currency_id' => 'Utenlandsk valuta', + 'repetition_end' => 'Repetisjon slutter', + 'repetitions' => 'Repetisjoner', + 'calendar' => 'Kalender', + 'weekend' => 'Helg', + 'client_secret' => 'Client Secret', + 'withdrawal_destination_id' => 'Målkonto', + 'deposit_source_id' => 'Kildekonto', + 'expected_on' => 'Forventet den', + 'paid' => 'Betalt', + 'auto_budget_type' => 'Auto-budsjett', + 'auto_budget_amount' => 'Auto-budsjett beløp', + 'auto_budget_period' => 'Auto-budsjett periode', + 'collected' => 'Innhentet', + 'submitted' => 'Innsendt', + 'key' => 'Nøkkel', + 'value' => 'Innhold i registeret', + 'webhook_delivery' => 'Levering', + 'webhook_response' => 'Respons', + 'webhook_trigger' => 'Utløser', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/nb_NO/intro.php b/resources/lang/nb_NO/intro.php index 11a1deba87..ba24ad766c 100644 --- a/resources/lang/nb_NO/intro.php +++ b/resources/lang/nb_NO/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Velkommen til indekssiden i Firefly III. Ta deg tid til å gå gjennom denne introduksjonen for å få en følelse av hvordan Firefly III fungerer.', - 'index_accounts-chart' => 'Dette diagrammet viser gjeldende saldo på aktivakontoene dine. Du kan velge kontoene som er synlige her under innstillinger.', - 'index_box_out_holder' => 'Denne lille boksen og boksene ved siden av gir deg rask oversikt over din økonomiske situasjon.', - 'index_help' => 'Hvis du trenger hjelp til en side eller et skjema, trykker du på denne knappen.', - 'index_outro' => 'De fleste sidene av Firefly III vil starte med en liten gjennomgang slik som denne. Ta kontakt med meg hvis du har spørsmål eller kommentarer. Sett igang!', - 'index_sidebar-toggle' => 'For å opprette nye transaksjoner, kontoer eller andre ting, bruk menyen under dette ikonet.', - 'index_cash_account' => 'Dette er kontoene som er opprettet så langt. Du kan bruke kontantkontoen til å spore kontantutgifter, men det er selvfølgelig ikke obligatorisk.', + 'index_intro' => 'Velkommen til indekssiden i Firefly III. Ta deg tid til å gå gjennom denne introduksjonen for å få en følelse av hvordan Firefly III fungerer.', + 'index_accounts-chart' => 'Dette diagrammet viser gjeldende saldo på aktivakontoene dine. Du kan velge kontoene som er synlige her under innstillinger.', + 'index_box_out_holder' => 'Denne lille boksen og boksene ved siden av gir deg rask oversikt over din økonomiske situasjon.', + 'index_help' => 'Hvis du trenger hjelp til en side eller et skjema, trykker du på denne knappen.', + 'index_outro' => 'De fleste sidene av Firefly III vil starte med en liten gjennomgang slik som denne. Ta kontakt med meg hvis du har spørsmål eller kommentarer. Sett igang!', + 'index_sidebar-toggle' => 'For å opprette nye transaksjoner, kontoer eller andre ting, bruk menyen under dette ikonet.', + 'index_cash_account' => 'Dette er kontoene som er opprettet så langt. Du kan bruke kontantkontoen til å spore kontantutgifter, men det er selvfølgelig ikke obligatorisk.', // transactions - 'transactions_create_basic_info' => 'Skriv inn grunnleggende informasjon om din transaksjon. Kilde, destinasjon, dato og beskrivelse.', - 'transactions_create_amount_info' => 'Angi mengde for transaksjonen. Hvis nødvendig vil feltene auto-oppdatere for utenlansk beløp info.', - 'transactions_create_optional_info' => 'Alle disse feltene er valgfrie. Å legge til meta-data her vil gjøre transaksjonene dine bedre organisert.', - 'transactions_create_split' => 'Hvis du vil dele en transaksjon, kan du legge til flere deler med denne knappen', + 'transactions_create_basic_info' => 'Skriv inn grunnleggende informasjon om din transaksjon. Kilde, destinasjon, dato og beskrivelse.', + 'transactions_create_amount_info' => 'Angi mengde for transaksjonen. Hvis nødvendig vil feltene auto-oppdatere for utenlansk beløp info.', + 'transactions_create_optional_info' => 'Alle disse feltene er valgfrie. Å legge til meta-data her vil gjøre transaksjonene dine bedre organisert.', + 'transactions_create_split' => 'Hvis du vil dele en transaksjon, kan du legge til flere deler med denne knappen', // create account: - 'accounts_create_iban' => 'Gi kontoene dine en gyldig IBAN. Dette gjør dataimport lettere i fremtiden.', - 'accounts_create_asset_opening_balance' => 'Aktivakontoer kan ha en "åpningssaldo" som indikerer starten på denne kontoens historie i Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III støtter flere valutaer. Aktivakontoer har en hovedvaluta, som du må sette her.', - 'accounts_create_asset_virtual' => 'Det kan noen ganger hjelpe å gi kontoen din en virtuell saldo: et ekstra beløp blir alltid lagt til eller fjernet fra den faktiske saldoen.', + 'accounts_create_iban' => 'Gi kontoene dine en gyldig IBAN. Dette gjør dataimport lettere i fremtiden.', + 'accounts_create_asset_opening_balance' => 'Aktivakontoer kan ha en "åpningssaldo" som indikerer starten på denne kontoens historie i Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III støtter flere valutaer. Aktivakontoer har en hovedvaluta, som du må sette her.', + 'accounts_create_asset_virtual' => 'Det kan noen ganger hjelpe å gi kontoen din en virtuell saldo: et ekstra beløp blir alltid lagt til eller fjernet fra den faktiske saldoen.', // budgets index - 'budgets_index_intro' => 'Budsjetter brukes til å styre din økonomi og er en av kjernefunksjonene i Firefly III.', - 'budgets_index_set_budget' => 'Sett ditt totale budsjett for hver periode, så Firefly III kan fortelle deg om du har budsjettert med alle tilgjengelige penger.', - 'budgets_index_see_expenses_bar' => 'Når du bruker penger vil denne linjen fylles opp.', - 'budgets_index_navigate_periods' => 'Naviger gjennom perioder for å enkelt sette budsjetter på forhånd.', - 'budgets_index_new_budget' => 'Opprett nye budsjetter etter behov.', - 'budgets_index_list_of_budgets' => 'Bruk denne tabellen til å angi beløp for hvert budsjett og se hvordan du klarer deg.', - 'budgets_index_outro' => 'Hvis du vil vite mer om budsjettering, trykk på hjelp-ikonet øverst til høyre.', + 'budgets_index_intro' => 'Budsjetter brukes til å styre din økonomi og er en av kjernefunksjonene i Firefly III.', + 'budgets_index_see_expenses_bar' => 'Når du bruker penger vil denne linjen fylles opp.', + 'budgets_index_navigate_periods' => 'Naviger gjennom perioder for å enkelt sette budsjetter på forhånd.', + 'budgets_index_new_budget' => 'Opprett nye budsjetter etter behov.', + 'budgets_index_list_of_budgets' => 'Bruk denne tabellen til å angi beløp for hvert budsjett og se hvordan du klarer deg.', + 'budgets_index_outro' => 'Hvis du vil vite mer om budsjettering, trykk på hjelp-ikonet øverst til høyre.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Bruk disse rapportene for å få detaljert innsikt i din økonomi.', - 'reports_index_inputReportType' => 'Velg en rapporttype. Sjekk ut hjelpesidene for å se hva hver rapport viser deg.', - 'reports_index_inputAccountsSelect' => 'Du kan ekskludere eller inkludere aktivakontoer etter eget ønske.', - 'reports_index_inputDateRange' => 'Den valgte datoperioden er helt opp til deg: fra en dag, og opptil 10 år.', - 'reports_index_extra-options-box' => 'Avhengig av hvilken rapport du har valgt, kan du velge ekstra filtre og alternativer her. Følg med på denne boksen når du endrer rapporttyper.', + 'reports_index_intro' => 'Bruk disse rapportene for å få detaljert innsikt i din økonomi.', + 'reports_index_inputReportType' => 'Velg en rapporttype. Sjekk ut hjelpesidene for å se hva hver rapport viser deg.', + 'reports_index_inputAccountsSelect' => 'Du kan ekskludere eller inkludere aktivakontoer etter eget ønske.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Avhengig av hvilken rapport du har valgt, kan du velge ekstra filtre og alternativer her. Følg med på denne boksen når du endrer rapporttyper.', // reports (reports) - 'reports_report_default_intro' => 'Denne rapporten gir deg en rask og omfattende oversikt over økonomien din. Hvis du ønsker å se noe annet her, ikke nøl med å kontakte meg!', - 'reports_report_audit_intro' => 'Denne rapporten gir deg detaljert innsikt i aktivakontoene dine.', - 'reports_report_audit_optionsBox' => 'Bruk disse avkrysningssboksene for å vise eller skjule kolonnene du er interessert i.', + 'reports_report_default_intro' => 'Denne rapporten gir deg en rask og omfattende oversikt over økonomien din. Hvis du ønsker å se noe annet her, ikke nøl med å kontakte meg!', + 'reports_report_audit_intro' => 'Denne rapporten gir deg detaljert innsikt i aktivakontoene dine.', + 'reports_report_audit_optionsBox' => 'Bruk disse avkrysningssboksene for å vise eller skjule kolonnene du er interessert i.', - 'reports_report_category_intro' => 'Denne rapporten gir deg innblikk i en eller flere kategorier.', - 'reports_report_category_pieCharts' => 'Disse diagrammene gir deg innblikk i utgifter og inntekt per kategori eller per konto.', - 'reports_report_category_incomeAndExpensesChart' => 'Dette diagrammet viser dine utgifter og inntekter per kategori.', + 'reports_report_category_intro' => 'Denne rapporten gir deg innblikk i en eller flere kategorier.', + 'reports_report_category_pieCharts' => 'Disse diagrammene gir deg innblikk i utgifter og inntekt per kategori eller per konto.', + 'reports_report_category_incomeAndExpensesChart' => 'Dette diagrammet viser dine utgifter og inntekter per kategori.', - 'reports_report_tag_intro' => 'Denne rapporten gir deg innblikk i en eller flere tagger.', - 'reports_report_tag_pieCharts' => 'Disse diagrammene gir deg innblikk i utgifter og inntekter per tagg, konto, kategori eller budsjett.', - 'reports_report_tag_incomeAndExpensesChart' => 'Dette diagrammet viser dine utgifter og inntekter per tagg.', + 'reports_report_tag_intro' => 'Denne rapporten gir deg innblikk i en eller flere tagger.', + 'reports_report_tag_pieCharts' => 'Disse diagrammene gir deg innblikk i utgifter og inntekter per tagg, konto, kategori eller budsjett.', + 'reports_report_tag_incomeAndExpensesChart' => 'Dette diagrammet viser dine utgifter og inntekter per tagg.', 'reports_report_budget_intro' => 'Denne rapporten gir deg innblikk i ett eller flere budsjetter.', 'reports_report_budget_pieCharts' => 'Disse diagrammene gir deg innblikk i utgifter og inntekter per budsjett eller per konto.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Ved siden av denne fremdriftslinjen er det to knapper (+ og -) for å legge til eller fjerne penger fra hver sparegris.', 'piggy-banks_index_accountStatus' => 'For hver aktivakonto med minst en sparegris er statusen oppført i denne tabellen.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Hva er ditt mål? En ny sofa, et kamera, penger til uforutsette utgifter?', 'piggy-banks_create_date' => 'Du kan angi en måldato eller en frist for din sparegris.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Bruk regninger for å spore hvor mange penger du skal betale for hver periode. Tenk på utgifter som leie, forsikring eller nedbetaling av boliglån.', 'bills_create_name' => 'Bruk et beskrivende navn som "Leie" eller "Helseforsikring".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Velg minimum og maksimumsbeløp for denne regningen.', 'bills_create_repeat_freq_holder' => 'De fleste regninger gjentas månedlig, men du kan angi en annen frekvens her.', 'bills_create_skip_holder' => 'Hvis en regning gjentas hver andre uke, skal "hopp over" -feltet settes til "1" for å hoppe over annenhver uke.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Bruk denne knappen for å se hvilke eksisterende transaksjoner som samsvarer med regelen din.', 'rules_create_actions' => 'Sett så mange handlinger som du vil.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Flere alternativer er tilgjengelig bak disse fanene.', diff --git a/resources/lang/nb_NO/list.php b/resources/lang/nb_NO/list.php index e50bacecc6..6471696765 100644 --- a/resources/lang/nb_NO/list.php +++ b/resources/lang/nb_NO/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Knapper', - 'icon' => 'Ikon', - 'id' => 'ID', - 'create_date' => 'Opprettet', - 'update_date' => 'Oppdatert', - 'updated_at' => 'Oppdatert', - 'balance_before' => 'Saldo før', - 'balance_after' => 'Saldo etter', - 'name' => 'Navn', - 'role' => 'Rolle', - 'currentBalance' => 'Nåværende saldo', - 'linked_to_rules' => 'Relevante regler', - 'active' => 'Er aktiv?', - 'percentage' => 'pst.', - 'recurring_transaction' => 'Gjentakende transaksjon', - 'next_due' => 'Neste frist', - 'transaction_type' => 'Type', - 'lastActivity' => 'Siste aktivitet', - 'balanceDiff' => 'Saldodifferanse', - 'other_meta_data' => 'Andre meta-data', - 'invited_at' => 'Invitert', - 'expires' => 'Invitasjonen utløper', - 'invited_by' => 'Invitert av', - 'invite_link' => 'Invitasjons lenke', - 'account_type' => 'Kontotype', - 'created_at' => 'Opprettet', - 'account' => 'Konto', - 'external_url' => 'Ekstern URL', - 'matchingAmount' => 'Beløp', - 'destination' => 'Mål', - 'source' => 'Kilde', - 'next_expected_match' => 'Neste forventede treff', - 'automatch' => 'Automatisk treff?', + 'buttons' => 'Knapper', + 'icon' => 'Ikon', + 'id' => 'ID', + 'create_date' => 'Opprettet', + 'update_date' => 'Oppdatert', + 'updated_at' => 'Oppdatert', + 'balance_before' => 'Saldo før', + 'balance_after' => 'Saldo etter', + 'name' => 'Navn', + 'role' => 'Rolle', + 'currentBalance' => 'Nåværende saldo', + 'linked_to_rules' => 'Relevante regler', + 'active' => 'Er aktiv?', + 'percentage' => 'pst.', + 'recurring_transaction' => 'Gjentakende transaksjon', + 'next_due' => 'Neste frist', + 'transaction_type' => 'Type', + 'lastActivity' => 'Siste aktivitet', + 'balanceDiff' => 'Saldodifferanse', + 'other_meta_data' => 'Andre meta-data', + 'invited_at' => 'Invitert', + 'expires' => 'Invitasjonen utløper', + 'invited_by' => 'Invitert av', + 'invite_link' => 'Invitasjons lenke', + 'account_type' => 'Kontotype', + 'created_at' => 'Opprettet', + 'account' => 'Konto', + 'external_url' => 'Ekstern URL', + 'matchingAmount' => 'Beløp', + 'destination' => 'Mål', + 'source' => 'Kilde', + 'next_expected_match' => 'Neste forventede treff', + 'automatch' => 'Automatisk treff?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Gjentas', 'description' => 'Beskrivelse', 'amount' => 'Beløp', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Konto med bunq', 'file_name' => 'Filnavn', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Filstørrelse', - 'file_type' => 'Filtype', - 'attached_to' => 'Knyttet til', - 'file_exists' => 'Filen eksisterer', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Siste innlogging', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'bunq betalings ID', - 'repetitions' => 'Repetisjoner', - 'title' => 'Tittel', - 'transaction_s' => 'Transaksjoner', - 'field' => 'Felt', - 'value' => 'Verdi', - 'interest' => 'Renter', - 'interest_period' => 'Renteperiode', - 'liability_type' => 'Type gjeld', - 'liability_direction' => 'Gjeld inn/ut', - 'end_date' => 'Sluttdato', - 'payment_info' => 'Betalingsinformasjon', - 'expected_info' => 'Neste forventede transaksjon', - 'start_date' => 'Start dato', - 'trigger' => 'Utløser', - 'response' => 'Respons', - 'delivery' => 'Levering', - 'url' => 'Nettadresse', - 'secret' => 'Hemmelighet', - + 'file_size' => 'Filstørrelse', + 'file_type' => 'Filtype', + 'attached_to' => 'Knyttet til', + 'file_exists' => 'Filen eksisterer', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Siste innlogging', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'bunq betalings ID', + 'repetitions' => 'Repetisjoner', + 'title' => 'Tittel', + 'transaction_s' => 'Transaksjoner', + 'field' => 'Felt', + 'value' => 'Verdi', + 'interest' => 'Renter', + 'interest_period' => 'Renteperiode', + 'liability_type' => 'Type gjeld', + 'liability_direction' => 'Gjeld inn/ut', + 'end_date' => 'Sluttdato', + 'payment_info' => 'Betalingsinformasjon', + 'expected_info' => 'Neste forventede transaksjon', + 'start_date' => 'Start dato', + 'trigger' => 'Utløser', + 'response' => 'Respons', + 'delivery' => 'Levering', + 'url' => 'Nettadresse', + 'secret' => 'Hemmelighet', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/nb_NO/pagination.php b/resources/lang/nb_NO/pagination.php index 8635a89058..ca98fe5f7b 100644 --- a/resources/lang/nb_NO/pagination.php +++ b/resources/lang/nb_NO/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nb_NO/passwords.php b/resources/lang/nb_NO/passwords.php index 2756f5304e..29e618f6d9 100644 --- a/resources/lang/nb_NO/passwords.php +++ b/resources/lang/nb_NO/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nb_NO/rules.php b/resources/lang/nb_NO/rules.php index 389fb335ff..89246b55da 100644 --- a/resources/lang/nb_NO/rules.php +++ b/resources/lang/nb_NO/rules.php @@ -1,6 +1,5 @@ 'Action ":action", present in rule ":rule", could not be applied to transaction #:group: :error', - 'find_or_create_tag_failed' => 'Could not find or create tag ":tag"', - 'tag_already_added' => 'Tag ":tag" is already linked to this transaction', - 'inspect_transaction' => 'Inspect transaction ":title" @ Firefly III', - 'inspect_rule' => 'Inspect rule ":title" @ Firefly III', - 'journal_other_user' => 'This transaction doesn\'t belong to the user', - 'no_such_journal' => 'This transaction doesn\'t exist', - 'journal_already_no_budget' => 'This transaction has no budget, so it cannot be removed', - 'journal_already_no_category' => 'This transaction had no category, so it cannot be removed', - 'journal_already_no_notes' => 'This transaction had no notes, so they cannot be removed', - 'journal_not_found' => 'Firefly III can\'t find the requested transaction', - 'split_group' => 'Firefly III cannot execute this action on a transaction with multiple splits', - 'is_already_withdrawal' => 'This transaction is already a withdrawal', - 'is_already_deposit' => 'This transaction is already a deposit', - 'is_already_transfer' => 'This transaction is already a transfer', - 'is_not_transfer' => 'This transaction is not a transfer', - 'complex_error' => 'Something complicated went wrong. Sorry about that. Please inspect the logs of Firefly III', - 'no_valid_opposing' => 'Conversion failed because there is no valid account named ":account"', - 'new_notes_empty' => 'The notes to be set are empty', - 'unsupported_transaction_type_withdrawal' => 'Firefly III cannot convert a ":type" to a withdrawal', - 'unsupported_transaction_type_deposit' => 'Firefly III cannot convert a ":type" to a deposit', - 'unsupported_transaction_type_transfer' => 'Firefly III cannot convert a ":type" to a transfer', - 'already_has_source_asset' => 'This transaction already has ":name" as the source asset account', - 'already_has_destination_asset' => 'This transaction already has ":name" as the destination asset account', - 'already_has_destination' => 'This transaction already has ":name" as the destination account', - 'already_has_source' => 'This transaction already has ":name" as the source account', - 'already_linked_to_subscription' => 'The transaction is already linked to subscription ":name"', - 'already_linked_to_category' => 'The transaction is already linked to category ":name"', - 'already_linked_to_budget' => 'The transaction is already linked to budget ":name"', - 'cannot_find_subscription' => 'Firefly III can\'t find subscription ":name"', - 'no_notes_to_move' => 'The transaction has no notes to move to the description field', - 'no_tags_to_remove' => 'The transaction has no tags to remove', - 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', - 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', - 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', - 'cannot_find_source_transaction' => 'Firefly III can\'t find the source transaction', - 'cannot_find_destination_transaction' => 'Firefly III can\'t find the destination transaction', - 'cannot_find_source_transaction_account' => 'Firefly III can\'t find the source transaction account', - 'cannot_find_destination_transaction_account' => 'Firefly III can\'t find the destination transaction account', - 'cannot_find_piggy' => 'Firefly III can\'t find a piggy bank named ":name"', - 'no_link_piggy' => 'This transaction\'s accounts are not linked to the piggy bank, so no action will be taken', - 'cannot_unlink_tag' => 'Tag ":tag" isn\'t linked to this transaction', - 'cannot_find_budget' => 'Firefly III can\'t find budget ":name"', - 'cannot_find_category' => 'Firefly III can\'t find category ":name"', - 'cannot_set_budget' => 'Firefly III can\'t set budget ":name" to a transaction of type ":type"', + 'main_message' => 'Handling ":action", tilstede i regel ":rule", kunne ikke brukes på transaksjon #:group: :error', + 'find_or_create_tag_failed' => 'Kunne ikke finne eller opprette merke ":tag"', + 'tag_already_added' => 'Merke ":tag" er allerede knyttet til denne transaksjonen', + 'inspect_transaction' => 'Inspeksjon av transaksjon ":title" @ Firefly III', + 'inspect_rule' => 'Inspeksjon av regel ":title" @ Firefly III', + 'journal_other_user' => 'Denne transaksjonen tilhører ikke brukeren', + 'no_such_journal' => 'Denne transaksjonen eksisterer ikke', + 'journal_already_no_budget' => 'Denne transaksjonen har ingen budsjett, så den kan ikke fjernes', + 'journal_already_no_category' => 'Denne transaksjonen hadde ingen kategori, så den kan ikke fjernes', + 'journal_already_no_notes' => 'Denne transaksjonen hadde ingen notater, så de kan ikke fjernes', + 'journal_not_found' => 'Firefly III kan ikke finne den forespurte transaksjonen', + 'split_group' => 'Firefly III kan ikke utføre denne handlingen på en transaksjon med flere splittelser', + 'is_already_withdrawal' => 'Denne transaksjonen er allerede en uttak', + 'is_already_deposit' => 'Denne transaksjonen er allerede en innskudd', + 'is_already_transfer' => 'Denne transaksjonen er allerede en overføring', + 'is_not_transfer' => 'Denne transaksjonen er ikke en overføring', + 'complex_error' => 'Noe komplisert gikk galt. Beklager det. Vennligst inspiser loggene til Firefly III', + 'no_valid_opposing' => 'Konvertering mislyktes fordi det ikke finnes en gyldig konto med navnet ":account"', + 'new_notes_empty' => 'Notatene som skal settes, er tomme', + 'unsupported_transaction_type_withdrawal' => 'Firefly III kan ikke konvertere ":type" til et uttak', + 'unsupported_transaction_type_deposit' => 'Firefly III kan ikke konvertere ":type" til et innskudd', + 'unsupported_transaction_type_transfer' => 'Firefly III kan ikke konvertere ":type" til en overføring', + 'already_has_source_asset' => 'Denne transaksjonen har allerede ":name" som kilde for eiendelskonto', + 'already_has_destination_asset' => 'Denne transaksjonen har allerede ":name" som målkonto for eiendeler', + 'already_has_destination' => 'Denne transaksjonen har allerede ":name" som destinasjonskonto', + 'already_has_source' => 'Denne transaksjonen har allerede ":name" som kildekonto', + 'already_linked_to_subscription' => 'Transaksjonen er allerede knyttet til abonnementet ":name"', + 'already_linked_to_category' => 'Transaksjonen er allerede knyttet til kategorien ":name"', + 'already_linked_to_budget' => 'Transaksjonen er allerede knyttet til budsjettet ":name"', + 'cannot_find_subscription' => 'Firefly III kan ikke finne abonnementet ":name"', + 'no_notes_to_move' => 'Transaksjonen har ingen notater å flytte til beskrivelsesfeltet', + 'no_tags_to_remove' => 'Transaksjonen har ingen merker å fjerne', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', + 'cannot_find_tag' => 'Firefly III kan ikke finne merket ":tag"', + 'cannot_find_asset' => 'Firefly III kan ikke finne eiendelskontoen ":name"', + 'cannot_find_accounts' => 'Firefly III kan ikke finne kilde- eller destinasjonskontoen', + 'cannot_find_source_transaction' => 'Firefly III kan ikke finne kilde transaksjonen', + 'cannot_find_destination_transaction' => 'Firefly III kan ikke finne destinasjonstransaksjonen', + 'cannot_find_source_transaction_account' => 'Firefly III kan ikke finne kilde transaksjonskontoen', + 'cannot_find_destination_transaction_account' => 'Firefly III kan ikke finne destinasjonstransaksjonskontoen', + 'cannot_find_piggy' => 'Firefly III kan ikke finne en sparegris med navnet ":name"', + 'no_link_piggy' => 'Kontoene til denne transaksjonen er ikke knyttet til sparegrisen, så ingen handling vil bli utført', + 'cannot_unlink_tag' => 'Merke ":tag" er ikke knyttet til denne transaksjonen', + 'cannot_find_budget' => 'Firefly III kan ikke finne budsjettet ":name"', + 'cannot_find_category' => 'Firefly III kan ikke finne kategorien ":name"', + 'cannot_set_budget' => 'Firefly III kan ikke sette budsjettet ":name" til en transaksjon av typen ":type"', ]; diff --git a/resources/lang/nb_NO/validation.php b/resources/lang/nb_NO/validation.php index 392b4b4c02..5fd2039d76 100644 --- a/resources/lang/nb_NO/validation.php +++ b/resources/lang/nb_NO/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Matrise mangler "where"-klausul', - 'missing_update' => 'Matrise mangler "update"-klausul', - 'invalid_where_key' => 'JSON inneholder en ugyldig nøkkel for "where"-klausulen', - 'invalid_update_key' => 'JSON inneholder en ugyldig nøkkel for "update"-klausulen', - 'invalid_query_data' => 'Det finnes ugyldig data i %s:%s -feltet for din spørring.', - 'invalid_query_account_type' => 'Spørringen inneholder kontoer av ulike typer, som ikke er tillatt.', - 'invalid_query_currency' => 'Søket inneholder kontoer som har ulike valuta-innstillinger, som ikke er tillatt.', - 'iban' => 'Dette er ikke en gyldig IBAN.', - 'zero_or_more' => 'Verdien kan ikke være negativ.', - 'date_or_time' => 'Verdien må være et gyldig dato- eller klokkeslettformat (ISO 8601).', - 'source_equals_destination' => 'Kildekontoen er lik destinasjonskonto.', - 'unique_account_number_for_user' => 'Det ser ut som dette kontonummeret er allerede i bruk.', - 'unique_iban_for_user' => 'Det ser ut som dette IBAN er allerede i bruk.', - 'deleted_user' => 'På grunn av sikkerhetsbegrensninger kan du ikke registreres med denne e-postadresse.', - 'rule_trigger_value' => 'Denne verdien er ugyldig for den valgte triggeren.', - 'rule_action_value' => 'Denne verdien er ugyldig for den valgte handlingen.', - 'file_already_attached' => 'Opplastede fil ":name" er allerede knyttet til dette objektet.', - 'file_attached' => 'Opplasting av fil ":name" var vellykket.', - 'must_exist' => 'IDen i feltet :attribute finnes ikke i databasen.', - 'all_accounts_equal' => 'Alle kontoer i dette feltet må være like.', - 'group_title_mandatory' => 'En gruppetittel er obligatorisk når det er mer enn én transaksjon.', - 'transaction_types_equal' => 'Alle deler må være av samme type.', - 'invalid_transaction_type' => 'Ugyldig transaksjonstype.', - 'invalid_selection' => 'Dine valg er ugyldig.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Trenger minst én transaksjon.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Trenger minst en gjentagelse.', - 'require_repeat_until' => 'Krever enten et antall repetisjoner eller en slutt dato (gjentas til). Ikke begge.', - 'require_currency_info' => 'Innholdet i dette feltet er ugyldig uten valutainformasjon.', - 'not_transfer_account' => 'Denne kontoen er ikke en konto som kan benyttes for overføringer.', - 'require_currency_amount' => 'Innholdet i dette feltet er ugyldig uten utenlandsk beløpsinformasjon.', - 'require_foreign_currency' => 'Dette feltet krever et tall', - 'require_foreign_dest' => 'Denne feltverdien må samsvare med valutaen til målkontoen.', - 'require_foreign_src' => 'Denne feltverdien må samsvare med valutaen til kildekontoen.', - 'equal_description' => 'Transaksjonsbeskrivelsen bør ikke være lik global beskrivelse.', - 'file_invalid_mime' => 'Kan ikke akseptere fil ":name" av typen ":mime" for opplasting.', - 'file_too_large' => '":name"-filen er for stor.', - 'belongs_to_user' => 'Verdien av :attribute er ukjent.', - 'accepted' => ':attribute må bli godtatt.', - 'bic' => 'Dette er ikke en gyldig BIC.', - 'at_least_one_trigger' => 'Regel må ha minst en trigger.', - 'at_least_one_active_trigger' => 'Regel må ha minst en aktiv trigger.', - 'at_least_one_action' => 'Regel må ha minst en aksjon.', - 'at_least_one_active_action' => 'Regel må ha minst en aktiv handling.', - 'base64' => 'Dette er ikke godkjent base64 kodet data.', - 'model_id_invalid' => 'Den angitte ID er ugyldig for denne modellen.', - 'less' => ':attribute må være mindre enn 10,000,000', - 'active_url' => ':attribute er ikke en gyldig URL.', - 'after' => ':attribute må være en dato etter :date.', - 'date_after' => 'Startdatoen må være før sluttdato.', - 'alpha' => ':attribute kan kun inneholde bokstaver.', - 'alpha_dash' => ':attribute kan bare inneholde bokstaver, tall og bindestreker.', - 'alpha_num' => ':attribute kan bare inneholde bokstaver og tall.', - 'array' => ':attribute må være en liste.', - 'unique_for_user' => 'Det finnes allerede en forekomst med :attribute.', - 'before' => ':attribute må være en dato før :date.', - 'unique_object_for_user' => 'Dette navnet er allerede i bruk.', - 'unique_account_for_user' => 'Dette konto navnet er allerede i bruk.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Matrise mangler "where"-klausul', + 'missing_update' => 'Matrise mangler "update"-klausul', + 'invalid_where_key' => 'JSON inneholder en ugyldig nøkkel for "where"-klausulen', + 'invalid_update_key' => 'JSON inneholder en ugyldig nøkkel for "update"-klausulen', + 'invalid_query_data' => 'Det finnes ugyldig data i %s:%s -feltet for din spørring.', + 'invalid_query_account_type' => 'Spørringen inneholder kontoer av ulike typer, som ikke er tillatt.', + 'invalid_query_currency' => 'Søket inneholder kontoer som har ulike valuta-innstillinger, som ikke er tillatt.', + 'iban' => 'Dette er ikke en gyldig IBAN.', + 'zero_or_more' => 'Verdien kan ikke være negativ.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Verdien må være et gyldig dato- eller klokkeslettformat (ISO 8601).', + 'source_equals_destination' => 'Kildekontoen er lik destinasjonskonto.', + 'unique_account_number_for_user' => 'Det ser ut som dette kontonummeret er allerede i bruk.', + 'unique_iban_for_user' => 'Det ser ut som dette IBAN er allerede i bruk.', + 'reconciled_forbidden_field' => 'Denne transaksjonen er allerede avstemt. Du kan ikke endre ":field"', + 'deleted_user' => 'På grunn av sikkerhetsbegrensninger kan du ikke registreres med denne e-postadresse.', + 'rule_trigger_value' => 'Denne verdien er ugyldig for den valgte triggeren.', + 'rule_action_value' => 'Denne verdien er ugyldig for den valgte handlingen.', + 'file_already_attached' => 'Opplastede fil ":name" er allerede knyttet til dette objektet.', + 'file_attached' => 'Opplasting av fil ":name" var vellykket.', + 'must_exist' => 'IDen i feltet :attribute finnes ikke i databasen.', + 'all_accounts_equal' => 'Alle kontoer i dette feltet må være like.', + 'group_title_mandatory' => 'En gruppetittel er obligatorisk når det er mer enn én transaksjon.', + 'transaction_types_equal' => 'Alle deler må være av samme type.', + 'invalid_transaction_type' => 'Ugyldig transaksjonstype.', + 'invalid_selection' => 'Dine valg er ugyldig.', + 'belongs_user' => 'Denne verdien er knyttet til et objekt som ikke ser ut til å eksistere.', + 'belongs_user_or_user_group' => 'Denne verdien er knyttet til et objekt som ikke ser ut til å eksistere i din nåværende økonomiske administrasjon.', + 'at_least_one_transaction' => 'Trenger minst én transaksjon.', + 'recurring_transaction_id' => 'Trenger minst én transaksjon.', + 'need_id_to_match' => 'Du må sende inn denne oppføringen med en ID for at APIen skal kunne identifisere den.', + 'too_many_unmatched' => 'For mange innsendte transaksjoner kan ikke identifiseres med sine respektive databasoppføringer. Forsikre deg om at eksisterende oppføringer har en gyldig ID.', + 'id_does_not_match' => 'Submitted ID #:id samsvarer ikke med forventet ID. Sørg for at det samsvarer eller utelat feltet.', + 'at_least_one_repetition' => 'Trenger minst en gjentagelse.', + 'require_repeat_until' => 'Krever enten et antall repetisjoner eller en slutt dato (gjentas til). Ikke begge.', + 'require_currency_info' => 'Innholdet i dette feltet er ugyldig uten valutainformasjon.', + 'not_transfer_account' => 'Denne kontoen er ikke en konto som kan benyttes for overføringer.', + 'require_currency_amount' => 'Innholdet i dette feltet er ugyldig uten utenlandsk beløpsinformasjon.', + 'require_foreign_currency' => 'Dette feltet krever et tall', + 'require_foreign_dest' => 'Denne feltverdien må samsvare med valutaen til målkontoen.', + 'require_foreign_src' => 'Denne feltverdien må samsvare med valutaen til kildekontoen.', + 'equal_description' => 'Transaksjonsbeskrivelsen bør ikke være lik global beskrivelse.', + 'file_invalid_mime' => 'Kan ikke akseptere fil ":name" av typen ":mime" for opplasting.', + 'file_too_large' => '":name"-filen er for stor.', + 'belongs_to_user' => 'Verdien av :attribute er ukjent.', + 'accepted' => ':attribute må bli godtatt.', + 'bic' => 'Dette er ikke en gyldig BIC.', + 'at_least_one_trigger' => 'Regel må ha minst en trigger.', + 'at_least_one_active_trigger' => 'Regel må ha minst en aktiv trigger.', + 'at_least_one_action' => 'Regel må ha minst en aksjon.', + 'at_least_one_active_action' => 'Regel må ha minst en aktiv handling.', + 'base64' => 'Dette er ikke godkjent base64 kodet data.', + 'model_id_invalid' => 'Den angitte ID er ugyldig for denne modellen.', + 'less' => ':attribute må være mindre enn 10,000,000', + 'active_url' => ':attribute er ikke en gyldig URL.', + 'after' => ':attribute må være en dato etter :date.', + 'date_after' => 'Startdatoen må være før sluttdato.', + 'alpha' => ':attribute kan kun inneholde bokstaver.', + 'alpha_dash' => ':attribute kan bare inneholde bokstaver, tall og bindestreker.', + 'alpha_num' => ':attribute kan bare inneholde bokstaver og tall.', + 'array' => ':attribute må være en liste.', + 'unique_for_user' => 'Det finnes allerede en forekomst med :attribute.', + 'before' => ':attribute må være en dato før :date.', + 'unique_object_for_user' => 'Dette navnet er allerede i bruk.', + 'unique_account_for_user' => 'Dette konto navnet er allerede i bruk.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute må være en verdi mellom :min og :max.', + 'between.file' => ':attribute må være mellom :min og :max kilobyte.', + 'between.string' => ':attribute må være mellom :min og :max tegn.', + 'between.array' => ':attribute må ha mellom :min og :max elementer.', + 'boolean' => ':attribute må være sann eller usann.', + 'confirmed' => ':attribute bekreftelsen stemmer ikke overens.', + 'date' => ':attribute er ikke en gyldig dato.', + 'date_format' => ':attribute samsvarer ikke med formatet :format.', + 'different' => ':attribute og :other må være forskjellig.', + 'digits' => ':attribute må være :digits sifre.', + 'digits_between' => ':attribute må være mellom :min og :max sifre.', + 'email' => ':attribute må være en gyldig epostaddresse.', + 'filled' => ':attribute må fylles ut.', + 'exists' => 'Den valgte :attribute er ikke gyldig.', + 'image' => ':attribute må være et bilde.', + 'in' => 'Den valgte :attribute er ikke gyldig.', + 'integer' => ':attribute må være et heltall.', + 'ip' => ':attribute må være en gyldig IP-addresse.', + 'json' => ':attribute må være en gyldig JSON streng.', + 'max.numeric' => ':attribute ikke kan være større enn :max.', + 'max.file' => ':attribute ikke kan være større enn :max kilobytes.', + 'max.string' => ':attribute ikke kan være større enn :max tegn.', + 'max.array' => ':attribute kan ikke inneholde mer enn :max elementer.', + 'mimes' => ':attribute må være en fil av type: :values.', + 'min.numeric' => ':attribute må være minst :min.', + 'lte.numeric' => ':attribute må være mindre enn eller lik :value.', + 'min.file' => ':attribute må være minst :min kilobytes.', + 'min.string' => ':attribute må være minst :min tegn.', + 'min.array' => ':attribute må inneholde minst :min elementer.', + 'not_in' => 'Den valgte :attribute er ikke gyldig.', + 'numeric' => ':attribute må være et tall.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Den normale beløpet må være et nummer.', + 'numeric_destination' => 'Destinasjons beløpet må være et nummer.', + 'numeric_source' => 'Kilde beløpet må være et nummer.', + 'regex' => ':attribute formatet er ugyldig.', + 'required' => ':attribute feltet må fylles ut.', + 'required_if' => ':attribute feltet er påkrevd når :other er :value.', + 'required_unless' => ':attribute feltet er påkrevd hvis ikke :other er i :values.', + 'required_with' => ':attribute feltet er nødvendig når :values er tilstede.', + 'required_with_all' => ':attribute feltet er nødvendig når :values er tilstede.', + 'required_without' => ':attribute er påkrevd når :values ikke er definert.', + 'required_without_all' => ':attribute er påkrevd når ingen av :values er definert.', + 'same' => ':attribute og :other må være like.', + 'size.numeric' => ':attribute må være :size.', + 'amount_min_over_max' => 'Minimumsbeløpet kan ikke være større enn maksimumsbeløpet.', + 'size.file' => ':attribute må være :size kilobyte.', + 'size.string' => ':attribute må være :size tegn.', + 'size.array' => ':attribute må inneholde :size elementer.', + 'unique' => ':attribute har allerede blitt tatt.', + 'string' => ':attribute må være en streng.', + 'url' => ':attribute formatet er ugyldig.', + 'timezone' => ':attribute må være en gyldig tidssone.', + '2fa_code' => ':attribute formatet er ugyldig.', + 'dimensions' => ':attribute har ugyldig bilde dimensjoner.', + 'distinct' => ':attribute feltet har en duplikatverdi.', + 'file' => ':attribute må være en fil.', + 'in_array' => 'Feltet :attribute finnes ikke i :other.', + 'present' => ':attribute feltet må være definert.', + 'amount_zero' => 'Totalbeløpet kan ikke være null.', + 'current_target_amount' => 'Det nåværende beløpet må være mindre enn målbeløpet.', + 'unique_piggy_bank_for_user' => 'Navnet på sparegris må være unik.', + 'unique_object_group' => 'Gruppenavnet må være unikt', + 'starts_with' => 'Verdien må starte med :values.', + 'unique_webhook' => 'Du har allerede en webhook med denne kombinasjonen URL, utløser, respons og levering.', + 'unique_existing_webhook' => 'Du har allerede en annen webhook med denne kombinasjonen URL, utløser, respons og levering.', + 'same_account_type' => 'Begge kontoer må være av samme kontotype', + 'same_account_currency' => 'Begge kontoer må ha samme valuta-innstilling', - 'between.numeric' => ':attribute må være en verdi mellom :min og :max.', - 'between.file' => ':attribute må være mellom :min og :max kilobyte.', - 'between.string' => ':attribute må være mellom :min og :max tegn.', - 'between.array' => ':attribute må ha mellom :min og :max elementer.', - 'boolean' => ':attribute må være sann eller usann.', - 'confirmed' => ':attribute bekreftelsen stemmer ikke overens.', - 'date' => ':attribute er ikke en gyldig dato.', - 'date_format' => ':attribute samsvarer ikke med formatet :format.', - 'different' => ':attribute og :other må være forskjellig.', - 'digits' => ':attribute må være :digits sifre.', - 'digits_between' => ':attribute må være mellom :min og :max sifre.', - 'email' => ':attribute må være en gyldig epostaddresse.', - 'filled' => ':attribute må fylles ut.', - 'exists' => 'Den valgte :attribute er ikke gyldig.', - 'image' => ':attribute må være et bilde.', - 'in' => 'Den valgte :attribute er ikke gyldig.', - 'integer' => ':attribute må være et heltall.', - 'ip' => ':attribute må være en gyldig IP-addresse.', - 'json' => ':attribute må være en gyldig JSON streng.', - 'max.numeric' => ':attribute ikke kan være større enn :max.', - 'max.file' => ':attribute ikke kan være større enn :max kilobytes.', - 'max.string' => ':attribute ikke kan være større enn :max tegn.', - 'max.array' => ':attribute kan ikke inneholde mer enn :max elementer.', - 'mimes' => ':attribute må være en fil av type: :values.', - 'min.numeric' => ':attribute må være minst :min.', - 'lte.numeric' => ':attribute må være mindre enn eller lik :value.', - 'min.file' => ':attribute må være minst :min kilobytes.', - 'min.string' => ':attribute må være minst :min tegn.', - 'min.array' => ':attribute må inneholde minst :min elementer.', - 'not_in' => 'Den valgte :attribute er ikke gyldig.', - 'numeric' => ':attribute må være et tall.', - 'numeric_native' => 'Den normale beløpet må være et nummer.', - 'numeric_destination' => 'Destinasjons beløpet må være et nummer.', - 'numeric_source' => 'Kilde beløpet må være et nummer.', - 'regex' => ':attribute formatet er ugyldig.', - 'required' => ':attribute feltet må fylles ut.', - 'required_if' => ':attribute feltet er påkrevd når :other er :value.', - 'required_unless' => ':attribute feltet er påkrevd hvis ikke :other er i :values.', - 'required_with' => ':attribute feltet er nødvendig når :values er tilstede.', - 'required_with_all' => ':attribute feltet er nødvendig når :values er tilstede.', - 'required_without' => ':attribute er påkrevd når :values ikke er definert.', - 'required_without_all' => ':attribute er påkrevd når ingen av :values er definert.', - 'same' => ':attribute og :other må være like.', - 'size.numeric' => ':attribute må være :size.', - 'amount_min_over_max' => 'Minimumsbeløpet kan ikke være større enn maksimumsbeløpet.', - 'size.file' => ':attribute må være :size kilobyte.', - 'size.string' => ':attribute må være :size tegn.', - 'size.array' => ':attribute må inneholde :size elementer.', - 'unique' => ':attribute har allerede blitt tatt.', - 'string' => ':attribute må være en streng.', - 'url' => ':attribute formatet er ugyldig.', - 'timezone' => ':attribute må være en gyldig tidssone.', - '2fa_code' => ':attribute formatet er ugyldig.', - 'dimensions' => ':attribute har ugyldig bilde dimensjoner.', - 'distinct' => ':attribute feltet har en duplikatverdi.', - 'file' => ':attribute må være en fil.', - 'in_array' => 'Feltet :attribute finnes ikke i :other.', - 'present' => ':attribute feltet må være definert.', - 'amount_zero' => 'Totalbeløpet kan ikke være null.', - 'current_target_amount' => 'Det nåværende beløpet må være mindre enn målbeløpet.', - 'unique_piggy_bank_for_user' => 'Navnet på sparegris må være unik.', - 'unique_object_group' => 'Gruppenavnet må være unikt', - 'starts_with' => 'Verdien må starte med :values.', - 'unique_webhook' => 'Du har allerede en webhook med denne kombinasjonen URL, utløser, respons og levering.', - 'unique_existing_webhook' => 'Du har allerede en annen webhook med denne kombinasjonen URL, utløser, respons og levering.', - 'same_account_type' => 'Begge kontoer må være av samme kontotype', - 'same_account_currency' => 'Begge kontoer må ha samme valuta-innstilling', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Dette er ikke et sikkert passord. Vennligst prøv igjen. For mer informasjon, se https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Ugyldig repetisjons type for gjentakende transaksjoner.', - 'valid_recurrence_rep_moment' => 'Ugyldig repetisjons tid for denne type repetisjon.', - 'invalid_account_info' => 'Ugyldig konto informasjon.', - 'attributes' => [ + 'secure_password' => 'Dette er ikke et sikkert passord. Vennligst prøv igjen. For mer informasjon, se https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Ugyldig repetisjons type for gjentakende transaksjoner.', + 'valid_recurrence_rep_moment' => 'Ugyldig repetisjons tid for denne type repetisjon.', + 'invalid_account_info' => 'Ugyldig konto informasjon.', + 'attributes' => [ 'email' => 'epostadresse', 'description' => 'beskrivelse', 'amount' => 'beløp', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Trenger en gyldig kilde konto-ID og/eller gyldig kilde kontonavn for å fortsette.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Kunne ikke finne en gyldig målkonto ved søk etter ID ":id" eller navn ":name".', + 'withdrawal_source_need_data' => 'Trenger en gyldig kildekonto-ID og/eller gyldig kildekonto-navn for å fortsette.', + 'withdrawal_source_bad_data' => '[a] Kunne ikke finne en gyldig kildekonto ved søk etter ID ":id" eller navn ":name".', + 'withdrawal_dest_need_data' => '[a] Trenger gyldig målkonto-ID og/eller gyldig målkonto-navn for å fortsette.', + 'withdrawal_dest_bad_data' => 'Kunne ikke finne en gyldig målkonto ved søk etter ID ":id" eller navn ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'Denne destinasjonskontoens IBAN er allerede i bruk av en eiendomskonto eller en ansvarskonto og kan ikke brukes som en uttaksdestinasjon.', + 'deposit_src_iban_exists' => 'Denne kildekontoens IBAN er allerede i bruk av en eiendomskonto eller en ansvarskonto og kan ikke brukes som innskuddskilde.', - 'reconciliation_source_bad_data' => 'Kunne ikke finne en gyldig avstemmingskonto ved søk etter ID ":id" eller navn ":name".', + 'reconciliation_source_bad_data' => 'Kunne ikke finne en gyldig avstemmingskonto ved søk etter ID ":id" eller navn ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Kunne ikke finne en gyldig kildekonto ved søk etter ID ":id" eller navn ":name".', - 'deposit_source_need_data' => 'Trenger en gyldig kilde konto-ID og/eller gyldig kilde kontonavn for å fortsette.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Kunne ikke finne en gyldig destinasjons konto ved å søke etter ID ":id" eller navn ":name".', - 'deposit_dest_wrong_type' => 'Den oppgitte målkontoen er ikke av riktig type.', + 'deposit_source_need_data' => 'Trenger en gyldig kilde konto-ID og/eller gyldig kilde kontonavn for å fortsette.', + 'deposit_source_bad_data' => '[b] Kunne ikke finne en gyldig kildekonto ved søk etter ID ":id" eller navn ":name".', + 'deposit_dest_need_data' => '[b] Trenger en gyldig destinasjons konto-ID og/eller gyldig destinasjons kontonavn for å fortsette.', + 'deposit_dest_bad_data' => 'Kunne ikke finne en gyldig destinasjonskonto ved søk etter ID ":id" eller navn ":name".', + 'deposit_dest_wrong_type' => 'Den oppgitte målkontoen er ikke av riktig type.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Trenger en gyldig kildekonto ID og/eller gyldig kilde kontonavn for å fortsette.', + 'transfer_source_bad_data' => '[c] Kunne ikke finne en gyldig kildekonto ved søk etter ID ":id" eller navn ":name".', + 'transfer_dest_need_data' => '[c] Trenger en gyldig destinasjons konto-ID og/eller gyldig destinasjons kontonavn for å fortsette.', + 'transfer_dest_bad_data' => 'Kunne ikke finne en gyldig destinasjonskonto ved søk etter ID ":id" eller navn ":name".', + 'need_id_in_edit' => 'Hver del må ha transaction_journal_id (enten gyldig ID eller 0).', - 'transfer_source_need_data' => 'Trenger en gyldig kilde konto-ID og/eller gyldig kilde kontonavn for å fortsette.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Kunne ikke finne en gyldig destinasjons konto ved å søke etter ID ":id" eller navn ":name".', - 'need_id_in_edit' => 'Hver del må ha transaction_journal_id (enten gyldig ID eller 0).', + 'ob_source_need_data' => 'Trenger en gyldig kildekonto ID og/eller gyldig kildekonto navn for å fortsette.', + 'lc_source_need_data' => 'Trenger en gyldig kildekonto ID for å fortsette.', + 'ob_dest_need_data' => '[d] Trenger en gyldig destinasjons konto-ID og/eller gyldig destinasjons kontonavn for å fortsette.', + 'ob_dest_bad_data' => 'Kunne ikke finne en gyldig destinasjonskonto ved søk etter ID ":id" eller navn ":name".', + 'reconciliation_either_account' => 'For å utføre en avstemming, må du enten oppgi en kilde eller en målkonto. Ikke begge eller ingen.', - 'ob_source_need_data' => 'Trenger en gyldig kildekonto ID og/eller gyldig kildekonto navn for å fortsette.', - 'lc_source_need_data' => 'Trenger en gyldig kildekonto ID for å fortsette.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Kunne ikke finne en gyldig destinasjonskonto ved søk etter ID ":id" eller navn ":name".', - 'reconciliation_either_account' => 'For å utføre en avstemming, må du enten oppgi en kilde eller en målkonto. Ikke begge eller ingen.', + 'generic_invalid_source' => 'Du kan ikke bruke denne kontoen som kildekonto.', + 'generic_invalid_destination' => 'Du kan ikke bruke denne kontoen som destinasjonskonto.', - 'generic_invalid_source' => 'Du kan ikke bruke denne kontoen som kildekonto.', - 'generic_invalid_destination' => 'Du kan ikke bruke denne kontoen som destinasjonskonto.', + 'generic_no_source' => 'Du må sende inn kontoinformasjon eller sende inn transaksjons-journal-ID.', + 'generic_no_destination' => 'Du må sende inn kontoinformasjon om mottakerkontoen, eller sende inn en transaksjons-journal-ID.', - 'generic_no_source' => 'Du må sende inn kontoinformasjon eller sende inn transaksjons-journal-ID.', - 'generic_no_destination' => 'Du må sende inn kontoinformasjon om mottakerkontoen, eller sende inn en transaksjons-journal-ID.', - - 'gte.numeric' => ':attribute må være større enn eller lik :value.', - 'gt.numeric' => ':attribute må være større enn :value.', - 'gte.file' => ':attribute må være større enn eller lik :value kilobyte.', - 'gte.string' => ':attribute må være større enn eller lik :value tegn.', - 'gte.array' => ':attribute må ha :value elementer eller mer.', + 'gte.numeric' => ':attribute må være større enn eller lik :value.', + 'gt.numeric' => ':attribute må være større enn :value.', + 'gte.file' => ':attribute må være større enn eller lik :value kilobyte.', + 'gte.string' => ':attribute må være større enn eller lik :value tegn.', + 'gte.array' => ':attribute må ha :value elementer eller mer.', 'amount_required_for_auto_budget' => 'Beløpet er påkrevd.', 'auto_budget_amount_positive' => 'Beløpet må være mer enn null.', + 'auto_budget_period_mandatory' => 'Auto budsjett perioden er et obligatorisk felt.', // no access to administration: diff --git a/resources/lang/nl_NL/api.php b/resources/lang/nl_NL/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/nl_NL/api.php +++ b/resources/lang/nl_NL/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/nl_NL/auth.php b/resources/lang/nl_NL/auth.php index 96e21c4db1..54e5525180 100644 --- a/resources/lang/nl_NL/auth.php +++ b/resources/lang/nl_NL/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'De combinatie van gebruikersnaam of e-mailadres en wachtwoord is onjuist.', 'throttle' => 'Te veel inlogpogingen. Probeer opnieuw in :seconds seconden.', diff --git a/resources/lang/nl_NL/breadcrumbs.php b/resources/lang/nl_NL/breadcrumbs.php index 1b2bb2a817..b3dd13c547 100644 --- a/resources/lang/nl_NL/breadcrumbs.php +++ b/resources/lang/nl_NL/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Home', - 'budgets' => 'Budgetten', - 'subscriptions' => 'Abonnementen', - 'transactions' => 'Transacties', - 'title_expenses' => 'Uitgaven', - 'title_withdrawal' => 'Uitgaven', - 'title_revenue' => 'Inkomsten', - 'title_deposit' => 'Inkomsten', - 'title_transfer' => 'Overschrijvingen', - 'title_transfers' => 'Overschrijvingen', - 'edit_currency' => 'Wijzig valuta ":name"', - 'delete_currency' => 'Verwijder valuta ":name"', - 'newPiggyBank' => 'Nieuw spaarpotje', - 'edit_piggyBank' => 'Wijzig spaarpotje ":name"', - 'preferences' => 'Voorkeuren', - 'profile' => 'Profiel', - 'accounts' => 'Rekeningen', - 'changePassword' => 'Verander je wachtwoord', - 'change_email' => 'Verander je emailadres', - 'bills' => 'Contracten', - 'newBill' => 'Nieuw contract', - 'edit_bill' => 'Wijzig contract ":name"', - 'delete_bill' => 'Verwijder contract ":name"', - 'reports' => 'Overzichten', - 'search_result' => 'Zoekresultaten voor ":query"', - 'withdrawal_list' => 'Uitgaven', - 'Withdrawal_list' => 'Uitgaven', - 'deposit_list' => 'Inkomsten', - 'transfer_list' => 'Overschrijvingen', - 'transfers_list' => 'Overschrijvingen', + 'home' => 'Home', + 'budgets' => 'Budgetten', + 'subscriptions' => 'Abonnementen', + 'transactions' => 'Transacties', + 'title_expenses' => 'Uitgaven', + 'title_withdrawal' => 'Uitgaven', + 'title_revenue' => 'Inkomsten', + 'title_deposit' => 'Inkomsten', + 'title_transfer' => 'Overschrijvingen', + 'title_transfers' => 'Overschrijvingen', + 'edit_currency' => 'Wijzig valuta ":name"', + 'delete_currency' => 'Verwijder valuta ":name"', + 'newPiggyBank' => 'Nieuw spaarpotje', + 'edit_piggyBank' => 'Wijzig spaarpotje ":name"', + 'preferences' => 'Voorkeuren', + 'profile' => 'Profiel', + 'accounts' => 'Rekeningen', + 'changePassword' => 'Verander je wachtwoord', + 'change_email' => 'Verander je emailadres', + 'bills' => 'Contracten', + 'newBill' => 'Nieuw contract', + 'edit_bill' => 'Wijzig contract ":name"', + 'delete_bill' => 'Verwijder contract ":name"', + 'reports' => 'Overzichten', + 'search_result' => 'Zoekresultaten voor ":query"', + 'withdrawal_list' => 'Uitgaven', + 'Withdrawal_list' => 'Uitgaven', + 'deposit_list' => 'Inkomsten', + 'transfer_list' => 'Overschrijvingen', + 'transfers_list' => 'Overschrijvingen', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Afstemmingen', 'create_withdrawal' => 'Sla nieuwe uitgave op', 'create_deposit' => 'Sla nieuwe inkomsten op', diff --git a/resources/lang/nl_NL/components.php b/resources/lang/nl_NL/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/nl_NL/components.php +++ b/resources/lang/nl_NL/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nl_NL/config.php b/resources/lang/nl_NL/config.php index 0d98af918c..4671a67df9 100644 --- a/resources/lang/nl_NL/config.php +++ b/resources/lang/nl_NL/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'nl', - 'locale' => 'nl, Dutch, nl_NL.utf8, nl_NL.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'nl', + 'locale' => 'nl, Dutch, nl_NL.utf8, nl_NL.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMM YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'D MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D MMM YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'D MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd D MMMM, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd D MMMM, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'D MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'D MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'D MMMM YYYY @ HH:mm:ss', + 'date_time_fns' => 'd MMMM yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'D MMMM YYYY @ HH:mm:ss', - 'date_time_fns' => 'D MMMM yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Week' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Week' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Maandag', - 'dow_2' => 'Dinsdag', - 'dow_3' => 'Woensdag', - 'dow_4' => 'Donderdag', - 'dow_5' => 'Vrijdag', - 'dow_6' => 'Zaterdag', - 'dow_7' => 'Zondag', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Maandag', + 'dow_2' => 'Dinsdag', + 'dow_3' => 'Woensdag', + 'dow_4' => 'Donderdag', + 'dow_5' => 'Vrijdag', + 'dow_6' => 'Zaterdag', + 'dow_7' => 'Zondag', ]; /* diff --git a/resources/lang/nl_NL/demo.php b/resources/lang/nl_NL/demo.php index 95cef947ca..628bfa1341 100644 --- a/resources/lang/nl_NL/demo.php +++ b/resources/lang/nl_NL/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nl_NL/email.php b/resources/lang/nl_NL/email.php index 718efef456..958bfb5246 100644 --- a/resources/lang/nl_NL/email.php +++ b/resources/lang/nl_NL/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Een testbericht van je Firefly III-installatie', 'admin_test_body' => 'Dit is een testbericht vanaf jouw Firefly III-installatie. Het is verstuurd naar :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Een uitnodiging is gemaakt', 'invitation_created_body' => 'Admin ":email" heeft een gebruikersuitnodiging gemaakt die kan worden gebruikt door ":invitee". De uitnodiging is 48 uur geldig.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Wachtwoord resetten:', 'registered_doc_link' => 'Documentatie:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Er is een nieuwe Firefly III-versie beschikbaar', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Als je wilt, kun je ook een nieuw issue openen op https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'De volledige stacktrace staat hieronder:', 'error_headers' => 'De volgende headers zijn wellicht ook interessant:', + 'error_post' => 'Dit is gesubmit door de gebruiker:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III heeft een nieuwe transactie aangemaakt|Firefly III heeft :count nieuwe transacties aangemaakt', 'new_journals_header' => 'Firefly III heeft een nieuwe transactie voor je gemaakt. Je kan deze terug vinden in je Firefly III installatie:|Firefly III heeft :count nieuwe transacties voor je gemaakt. Je kan deze terug vinden in je Firefly III installatie:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Je contract **":name"** loopt af op :date. Dat is **VANDAAG!**', 'bill_warning_extension_date_zero' => 'Je contract **":name"** moet op :date verlengd of opgezegd worden. Dat is **VANDAAG!**', 'bill_warning_please_action' => 'Zorg dat je hier iets mee doet.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/nl_NL/errors.php b/resources/lang/nl_NL/errors.php index b2f7c14bca..c078080b76 100644 --- a/resources/lang/nl_NL/errors.php +++ b/resources/lang/nl_NL/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack trace', 'more_info' => 'Meer informatie', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Verzamel meer informatie in de storage/logs-directory waar je de logbestanden kan vinden. Als Docker gebruikt, gebruik dan docker logs -f [container].', - 'collect_info_more' => 'Je kan meer lezen over het verzamelen van foutinformatie in de FAQ.', - 'github_help' => 'Check voor hulp op GitHub', - 'github_instructions' => 'Je bent meer dan welkom om een nieuw issue te openen op GitHub.', - 'use_search' => 'Gebruik de search!', - 'include_info' => 'Voeg de informatie toe van deze debug pagina.', - 'tell_more' => 'Meer info dan "hij is stuk" gaarne', - 'include_logs' => 'Inclusief foutlogs (zie hierboven).', - 'what_did_you_do' => 'Zet er bij wat je deed.', - 'offline_header' => 'Je bent waarschijnlijk offline', - 'offline_unreachable' => 'Firefly III is onbereikbaar. Je apparaat is momenteel offline of de server werkt niet.', - 'offline_github' => 'Als je zeker weet dat zowel je apparaat als de server online zijn, open dan een ticket op GitHub.', - + 'collect_info' => 'Verzamel meer informatie in de storage/logs-directory waar je de logbestanden kan vinden. Als Docker gebruikt, gebruik dan docker logs -f [container].', + 'collect_info_more' => 'Je kan meer lezen over het verzamelen van foutinformatie in de FAQ.', + 'github_help' => 'Check voor hulp op GitHub', + 'github_instructions' => 'Je bent meer dan welkom om een nieuw issue te openen op GitHub.', + 'use_search' => 'Gebruik de search!', + 'include_info' => 'Voeg de informatie toe van deze debug pagina.', + 'tell_more' => 'Meer info dan "hij is stuk" gaarne', + 'include_logs' => 'Inclusief foutlogs (zie hierboven).', + 'what_did_you_do' => 'Zet er bij wat je deed.', + 'offline_header' => 'Je bent waarschijnlijk offline', + 'offline_unreachable' => 'Firefly III is onbereikbaar. Je apparaat is momenteel offline of de server werkt niet.', + 'offline_github' => 'Als je zeker weet dat zowel je apparaat als de server online zijn, open dan een ticket op GitHub.', ]; diff --git a/resources/lang/nl_NL/firefly.php b/resources/lang/nl_NL/firefly.php index dfc904d61b..92130aa8c5 100644 --- a/resources/lang/nl_NL/firefly.php +++ b/resources/lang/nl_NL/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Sluiten', - 'actions' => 'Acties', - 'edit' => 'Wijzig', - 'delete' => 'Verwijder', - 'split' => 'Splitsen', - 'single_split' => 'Split', - 'clone' => 'Dupliceren', - 'confirm_action' => 'Actie bevestigen', - 'last_seven_days' => 'Laatste zeven dagen', - 'last_thirty_days' => 'Laatste dertig dagen', - 'last_180_days' => 'Laatste 180 dagen', - 'month_to_date' => 'Maand tot nu', - 'year_to_date' => 'Jaar tot nu', - 'YTD' => 'YTD', - 'welcome_back' => 'Hoe staat het er voor?', - 'everything' => 'Alles', - 'today' => 'vandaag', - 'customRange' => 'Zelf bereik kiezen', - 'date_range' => 'Datumbereik', - 'apply' => 'Go', - 'select_date' => 'Selecteer periode..', - 'cancel' => 'Annuleren', - 'from' => 'Van', - 'to' => 'Tot', - 'structure' => 'Structuur', - 'help_translating' => 'Deze helptekst is nog niet beschikbaar in het Nederlands. Help je mee vertalen?', - 'showEverything' => 'Laat alles zien', - 'never' => 'Nooit', - 'no_results_for_empty_search' => 'Je zoekopdracht was leeg, dus niets werd gevonden.', - 'removed_amount' => ':amount weggehaald', - 'added_amount' => ':amount toegevoegd', - 'asset_account_role_help' => 'Voorkeuren die voortkomen uit je keuze hier kan je later aangeven.', - 'Opening balance' => 'Startsaldo', - 'create_new_stuff' => 'Nieuw', - 'new_withdrawal' => 'Nieuwe uitgave', - 'create_new_transaction' => 'Maak een nieuwe transactie', - 'sidebar_frontpage_create' => 'Maak', - 'new_transaction' => 'Nieuwe transactie', - 'no_rules_for_bill' => 'Dit contract heeft geen regels.', - 'go_to_asset_accounts' => 'Bekijk je betaalrekeningen', - 'go_to_budgets' => 'Ga naar je budgetten', - 'go_to_withdrawals' => 'Ga naar je uitgaven', - 'clones_journal_x' => 'Deze transactie is een kloon van ":description" (#:id)', - 'go_to_categories' => 'Ga naar je categorieën', - 'go_to_bills' => 'Ga naar je contracten', - 'go_to_expense_accounts' => 'Bekijk je crediteuren', - 'go_to_revenue_accounts' => 'Bekijk je debiteuren', - 'go_to_piggies' => 'Ga naar je spaarpotjes', - 'new_deposit' => 'Nieuwe inkomsten', - 'new_transfer' => 'Nieuwe overschrijving', - 'new_transfers' => 'Nieuwe overschrijving', - 'new_asset_account' => 'Nieuwe betaalrekening', - 'new_expense_account' => 'Nieuwe crediteur', - 'new_revenue_account' => 'Nieuwe debiteur', - 'new_liabilities_account' => 'Nieuwe passiva', - 'new_budget' => 'Nieuw budget', - 'new_bill' => 'Nieuw contract', - 'block_account_logout' => 'Je bent helaas uitgelogd. Geblokkeerde accounts kunnen deze site niet gebruiken. Heb je een geldig e-mailadres gebruikt toen je je registreerde?', - 'flash_success' => 'Gelukt!', - 'flash_info' => 'Melding', - 'flash_warning' => 'Waarschuwing!', - 'flash_error' => 'Fout!', - 'flash_danger' => 'Gevaar!', - 'flash_info_multiple' => 'Er is één melding|Er zijn :count meldingen', - 'flash_error_multiple' => 'Er is één fout|Er zijn :count fouten', - 'net_worth' => 'Kapitaal', - 'help_for_this_page' => 'Hulp bij deze pagina', - 'help_for_this_page_body' => 'Meer informatie over deze pagina vind je in de documentatie.', - 'two_factor_welcome' => 'Hallo!', - 'two_factor_enter_code' => 'Vul je authenticatiecode in. Je authenticatieapplicatie kan deze voor je genereren.', - 'two_factor_code_here' => 'Code', - 'two_factor_title' => 'Authenticatie in twee stappen', - 'authenticate' => 'Inloggen', - 'two_factor_forgot_title' => 'Authenticatie in twee stappen werkt niet meer', - 'two_factor_forgot' => 'Ik kan geen codes meer genereren.', - 'two_factor_lost_header' => 'Kan je geen codes meer genereren?', - 'two_factor_lost_intro' => 'Als je ook je backupcodes kwijt bent heb je pech gehad. Dit kan je niet via de web-interface fixen. Je kan kiezen.', - 'two_factor_lost_fix_self' => 'Als je je eigen installatie van Firefly III draait lees dan dit item in de FAQ voor instructies.', - 'two_factor_lost_fix_owner' => 'Zo niet, stuur dan een e-mail naar :site_owner en vraag of ze je authenticatie in twee stappen willen resetten.', - 'mfa_backup_code' => 'Je hebt een backupcode gebruikt om in te loggen op Firefly III. Deze kan je niet meer gebruiken dus streep hem weg.', - 'pref_two_factor_new_backup_codes' => 'Nieuwe backupcodes genereren', - 'pref_two_factor_backup_code_count' => 'Je hebt :count geldige backupcode.|Je hebt :count geldige backupcodes.', - '2fa_i_have_them' => 'Ik heb ze opgeslagen!', - 'warning_much_data' => 'Het kan even duren voor :days dagen aan gegevens geladen zijn.', - 'registered' => 'Je bent geregistreerd!', - 'Default asset account' => 'Standaard betaalrekening', - 'no_budget_pointer' => 'Je hebt nog geen budgetten. Maak er een aantal op de budgetten-pagina. Met budgetten kan je je uitgaven beter bijhouden.', - 'no_bill_pointer' => 'Je hebt nog geen contracten. Maak er een aantal op de contracten-pagina. Met contracten kan je je uitgaven beter bijhouden.', - 'Savings account' => 'Spaarrekening', - 'Credit card' => 'Credit card', - 'source_accounts' => 'Bronrekening|Bronrekeningen', - 'destination_accounts' => 'Doelrekening|Doelrekeningen', - 'user_id_is' => 'Je gebruikersnummer is :user', - 'field_supports_markdown' => 'Dit veld ondersteunt Markdown.', - 'need_more_help' => 'Als je meer hulp nodig hebt met Firefly III, open dan een ticket op Github.', - 'reenable_intro_text' => 'Je kan de introductie-popupjes ook weer aan zetten.', - 'intro_boxes_after_refresh' => 'De introductie-popupjes komen tevoorschijn als je de pagina opnieuw laadt.', - 'show_all_no_filter' => 'Laat alle transacties zien, zonder te groeperen op datum.', - 'expenses_by_category' => 'Uitgaven per categorie', - 'expenses_by_budget' => 'Uitgaven per budget', - 'income_by_category' => 'Inkomsten per categorie', - 'expenses_by_asset_account' => 'Uitgaven per betaalrekening', - 'expenses_by_expense_account' => 'Uitgaven per crediteur', - 'cannot_redirect_to_account' => 'Firefly III kan je niet naar de goede pagina doorsturen. Sorry!', - 'sum_of_expenses' => 'Som van uitgaven', - 'sum_of_income' => 'Som van inkomsten', - 'liabilities' => 'Passiva', - 'spent_in_specific_budget' => 'Uitgegeven in budget ":budget"', - 'spent_in_specific_double' => 'Uitgegeven van rekening ":account"', - 'earned_in_specific_double' => 'Verdiend op rekening ":account"', - 'source_account' => 'Bronrekening', - 'source_account_reconciliation' => 'Je kan de bronrekening van een afstemming niet wijzigen.', - 'destination_account' => 'Doelrekening', - 'destination_account_reconciliation' => 'Je kan de doelrekening van een afstemming niet wijzigen.', - 'sum_of_expenses_in_budget' => 'Totaal uitgegeven in budget ":budget"', - 'left_in_budget_limit' => 'Nog uit te geven volgens budgettering', - 'current_period' => 'Huidige periode', - 'show_the_current_period_and_overview' => 'Bekijk de huidige periode en overzicht', - 'pref_languages_locale' => 'Als je hier een andere taal dan Engels hebt geselecteerd, zorg er dan voor dat je besturingssysteem ook in staat is om valuta, data en bedragen in die taal weer te geven.', - 'budget_in_period' => 'Alle transacties voor budget ":name" tussen :start en :end in :currency', - 'chart_budget_in_period' => 'Grafiek voor alle transacties voor budget ":name" tussen :start en :end in :currency', - 'chart_budget_in_period_only_currency' => 'Het bedrag dat je het begroot is in :currency, dus deze grafiek laat alleen transacties in :currency zien.', - 'chart_account_in_period' => 'Grafiek voor alle transacties voor rekening ":name" (:balance) tussen :start en :end', - 'chart_category_in_period' => 'Grafiek voor alle transacties voor categorie ":name" tussen :start en :end', - 'chart_category_all' => 'Grafiek voor alle transacties voor categorie ":name"', - 'clone_withdrawal' => 'Kopieer deze uitgave', - 'clone_deposit' => 'Kopieer deze inkomsten', - 'clone_transfer' => 'Kopieer deze overschrijving', - 'multi_select_no_selection' => 'Niets geselecteerd', - 'multi_select_select_all' => 'Selecteer alles', - 'multi_select_n_selected' => 'geselecteerd', - 'multi_select_all_selected' => 'Alles geselecteerd', - 'multi_select_filter_placeholder' => 'Vinden..', - 'intro_next_label' => 'Volgende', - 'intro_prev_label' => 'Vorige', - 'intro_skip_label' => 'Overslaan', - 'intro_done_label' => 'Klaar', - 'between_dates_breadcrumb' => 'Tussen :start en :end', - 'all_journals_without_budget' => 'Alle transacties zonder budget', - 'journals_without_budget' => 'Transacties zonder budget', - 'all_journals_without_category' => 'Alle transacties zonder categorie', - 'journals_without_category' => 'Transacties zonder categorie', - 'all_journals_for_account' => 'Alle transacties voor rekening :name', - 'chart_all_journals_for_account' => 'Grafiek van alle transacties voor rekening :name', - 'journals_in_period_for_account' => 'Alle transacties voor rekening :name tussen :start en :end', - 'journals_in_period_for_account_js' => 'Alle transacties voor rekening {title} tussen {start} en {end}', - 'transferred' => 'Overgeschreven', - 'all_withdrawal' => 'Alle uitgaven', - 'all_transactions' => 'Alle transacties', - 'title_withdrawal_between' => 'Alle uitgaven tussen :start en :end', - 'all_deposit' => 'Alle inkomsten', - 'title_deposit_between' => 'Alle inkomsten tussen :start en :end', - 'all_transfers' => 'Alle overschrijvingen', - 'title_transfers_between' => 'Alle overschrijvingen tussen :start en :end', - 'all_transfer' => 'Alle overschrijvingen', - 'all_journals_for_tag' => 'Alle transacties voor tag ":tag"', - 'title_transfer_between' => 'Alle overschrijvingen tussen :start en :end', - 'all_journals_for_category' => 'Alle transacties in categorie :name', - 'all_journals_for_budget' => 'Alle transacties voor budget :name', - 'chart_all_journals_for_budget' => 'Grafiek van alle transacties voor budget :name', - 'journals_in_period_for_category' => 'Alle transacties in categorie :name tussen :start en :end', - 'journals_in_period_for_tag' => 'Alle transacties voor tag :tag tussen :start en :end', - 'not_available_demo_user' => 'De functie die je probeert te gebruiken is niet beschikbaar voor gebruikers van de demo.', - 'exchange_rate_instructions' => 'Betaalrekening "@name" accepteert alleen boekingen in @native_currency. Als je @foreign_currency wilt gebruiken moet je ook het bedrag in @native_currency opgeven:', - 'transfer_exchange_rate_instructions' => 'Bronbetaalrekening "@source_name" accepteert alleen overschrijvingen in @source_currency. Doelbetaalrekening "@dest_name" accepteert alleen overschrijvingen in @dest_currency. Je moet het juiste bedrag in beide valuta opgeven.', - 'transaction_data' => 'Transactiegegevens', - 'invalid_server_configuration' => 'Ongeldige serverconfiguratie', - 'invalid_locale_settings' => 'Firefly III kan geldbedragen niet goed weergeven omdat je server de vereiste software mist. Er zijn instructies hoe dit te doen.', - 'quickswitch' => 'Quickswitch', - 'sign_in_to_start' => 'Login om te beginnen', - 'sign_in' => 'Inloggen', - 'register_new_account' => 'Registreer een nieuw account', - 'forgot_my_password' => 'Ik ben mijn wachtwoord vergeten', - 'problems_with_input' => 'Er zijn wat problemen met je input.', - 'reset_password' => 'Je wachtwoord resetten', - 'button_reset_password' => 'Reset wachtwoord', - 'reset_button' => 'Reset', - 'want_to_login' => 'Ik wil inloggen', - 'login_page_title' => 'Inloggen bij Firefly III', - 'register_page_title' => 'Registreren bij Firefly III', - 'forgot_pw_page_title' => 'Je wachtwoord voor Firefly III vergeten', - 'reset_pw_page_title' => 'Reset je Firefly III wachtwoord', - 'cannot_reset_demo_user' => 'Je kan het wachtwoord van de demo-gebruiker niet resetten.', - 'no_att_demo_user' => 'De demo user kan niks uploaden.', - 'button_register' => 'Registreren', - 'authorization' => 'Toestemming', - 'active_bills_only' => 'alleen actieve contracten', - 'active_bills_only_total' => 'alle actieve contracten', - 'active_exp_bills_only' => 'alleen actieve en verwachte contracten', - 'active_exp_bills_only_total' => 'alle actieve en verwachte contracten', - 'per_period_sum_1D' => 'Verwachte dagelijkse kosten', - 'per_period_sum_1W' => 'Verwachte wekelijkse kosten', - 'per_period_sum_1M' => 'Verwachte maandelijkse kosten', - 'per_period_sum_3M' => 'Verwachte kwartaalkosten', - 'per_period_sum_6M' => 'Verwachte half-jaarlijkse kosten', - 'per_period_sum_1Y' => 'Verwachte jaarlijkse kosten', - 'average_per_bill' => 'gemiddeld per contract', - 'expected_total' => 'verwacht totaal', - 'reconciliation_account_name' => ':name afstemming (:currency)', - 'saved' => 'Opgeslagen', - 'advanced_options' => 'Geavanceerde opties', - 'advanced_options_explain' => 'Sommige pagina\'s in Firefly III hebben geavanceerde opties verborgen achter deze knop. Voor deze pagina geldt dat niet, maar check zeker de andere pagina\'s!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Sluiten', + 'actions' => 'Acties', + 'edit' => 'Wijzig', + 'delete' => 'Verwijder', + 'split' => 'Splitsen', + 'single_split' => 'Split', + 'clone' => 'Dupliceren', + 'clone_and_edit' => 'Dupliceren en wijzigen', + 'confirm_action' => 'Actie bevestigen', + 'last_seven_days' => 'Laatste zeven dagen', + 'last_thirty_days' => 'Laatste dertig dagen', + 'last_180_days' => 'Laatste 180 dagen', + 'month_to_date' => 'Maand tot nu', + 'year_to_date' => 'Jaar tot nu', + 'YTD' => 'YTD', + 'welcome_back' => 'Hoe staat het er voor?', + 'everything' => 'Alles', + 'today' => 'vandaag', + 'customRange' => 'Zelf bereik kiezen', + 'date_range' => 'Datumbereik', + 'apply' => 'Go', + 'select_date' => 'Selecteer periode..', + 'cancel' => 'Annuleren', + 'from' => 'Van', + 'to' => 'Tot', + 'structure' => 'Structuur', + 'help_translating' => 'Deze helptekst is nog niet beschikbaar in het Nederlands. Help je mee vertalen?', + 'showEverything' => 'Laat alles zien', + 'never' => 'Nooit', + 'no_results_for_empty_search' => 'Je zoekopdracht was leeg, dus niets werd gevonden.', + 'removed_amount' => ':amount weggehaald', + 'added_amount' => ':amount toegevoegd', + 'asset_account_role_help' => 'Voorkeuren die voortkomen uit je keuze hier kan je later aangeven.', + 'Opening balance' => 'Startsaldo', + 'create_new_stuff' => 'Nieuw', + 'new_withdrawal' => 'Nieuwe uitgave', + 'create_new_transaction' => 'Maak een nieuwe transactie', + 'sidebar_frontpage_create' => 'Maak', + 'new_transaction' => 'Nieuwe transactie', + 'no_rules_for_bill' => 'Dit contract heeft geen regels.', + 'go_to_asset_accounts' => 'Bekijk je betaalrekeningen', + 'go_to_budgets' => 'Ga naar je budgetten', + 'go_to_withdrawals' => 'Ga naar je uitgaven', + 'clones_journal_x' => 'Deze transactie is een kloon van ":description" (#:id)', + 'go_to_categories' => 'Ga naar je categorieën', + 'go_to_bills' => 'Ga naar je contracten', + 'go_to_expense_accounts' => 'Bekijk je crediteuren', + 'go_to_revenue_accounts' => 'Bekijk je debiteuren', + 'go_to_piggies' => 'Ga naar je spaarpotjes', + 'new_deposit' => 'Nieuwe inkomsten', + 'new_transfer' => 'Nieuwe overschrijving', + 'new_transfers' => 'Nieuwe overschrijving', + 'new_asset_account' => 'Nieuwe betaalrekening', + 'new_expense_account' => 'Nieuwe crediteur', + 'new_revenue_account' => 'Nieuwe debiteur', + 'new_liabilities_account' => 'Nieuwe passiva', + 'new_budget' => 'Nieuw budget', + 'new_bill' => 'Nieuw contract', + 'block_account_logout' => 'Je bent helaas uitgelogd. Geblokkeerde accounts kunnen deze site niet gebruiken. Heb je een geldig e-mailadres gebruikt toen je je registreerde?', + 'flash_success' => 'Gelukt!', + 'flash_info' => 'Melding', + 'flash_warning' => 'Waarschuwing!', + 'flash_error' => 'Fout!', + 'flash_danger' => 'Gevaar!', + 'flash_info_multiple' => 'Er is één melding|Er zijn :count meldingen', + 'flash_error_multiple' => 'Er is één fout|Er zijn :count fouten', + 'net_worth' => 'Kapitaal', + 'help_for_this_page' => 'Hulp bij deze pagina', + 'help_for_this_page_body' => 'Meer informatie over deze pagina vind je in de documentatie.', + 'two_factor_welcome' => 'Hallo!', + 'two_factor_enter_code' => 'Vul je authenticatiecode in. Je authenticatieapplicatie kan deze voor je genereren.', + 'two_factor_code_here' => 'Code', + 'two_factor_title' => 'Authenticatie in twee stappen', + 'authenticate' => 'Inloggen', + 'two_factor_forgot_title' => 'Authenticatie in twee stappen werkt niet meer', + 'two_factor_forgot' => 'Ik kan geen codes meer genereren.', + 'two_factor_lost_header' => 'Kan je geen codes meer genereren?', + 'two_factor_lost_intro' => 'Als je ook je backupcodes kwijt bent heb je pech gehad. Dit kan je niet via de web-interface fixen. Je kan kiezen.', + 'two_factor_lost_fix_self' => 'Als dit jouw Firefly III-installatie is, lees dan :site_owner en vraag of ze je authenticatie in twee stappen willen resetten.', + 'mfa_backup_code' => 'Je hebt een backupcode gebruikt om in te loggen op Firefly III. Deze kan je niet meer gebruiken dus streep hem weg.', + 'pref_two_factor_new_backup_codes' => 'Nieuwe backupcodes genereren', + 'pref_two_factor_backup_code_count' => 'Je hebt :count geldige backupcode.|Je hebt :count geldige backupcodes.', + '2fa_i_have_them' => 'Ik heb ze opgeslagen!', + 'warning_much_data' => 'Het kan even duren voor :days dagen aan gegevens geladen zijn.', + 'registered' => 'Je bent geregistreerd!', + 'Default asset account' => 'Standaard betaalrekening', + 'no_budget_pointer' => 'Je hebt nog geen budgetten. Maak er een aantal op de budgetten-pagina. Met budgetten kan je je uitgaven beter bijhouden.', + 'no_bill_pointer' => 'Je hebt nog geen contracten. Maak er een aantal op de contracten-pagina. Met contracten kan je je uitgaven beter bijhouden.', + 'Savings account' => 'Spaarrekening', + 'Credit card' => 'Credit card', + 'source_accounts' => 'Bronrekening|Bronrekeningen', + 'destination_accounts' => 'Doelrekening|Doelrekeningen', + 'user_id_is' => 'Je gebruikersnummer is :user', + 'field_supports_markdown' => 'Dit veld ondersteunt Markdown.', + 'need_more_help' => 'Als je meer hulp nodig hebt met Firefly III, open dan een ticket op Github.', + 'reenable_intro_text' => 'Je kan de introductie-popupjes ook weer aan zetten.', + 'intro_boxes_after_refresh' => 'De introductie-popupjes komen tevoorschijn als je de pagina opnieuw laadt.', + 'show_all_no_filter' => 'Laat alle transacties zien, zonder te groeperen op datum.', + 'expenses_by_category' => 'Uitgaven per categorie', + 'expenses_by_budget' => 'Uitgaven per budget', + 'income_by_category' => 'Inkomsten per categorie', + 'expenses_by_asset_account' => 'Uitgaven per betaalrekening', + 'expenses_by_expense_account' => 'Uitgaven per crediteur', + 'cannot_redirect_to_account' => 'Firefly III kan je niet naar de goede pagina doorsturen. Sorry!', + 'sum_of_expenses' => 'Som van uitgaven', + 'sum_of_income' => 'Som van inkomsten', + 'liabilities' => 'Passiva', + 'spent_in_specific_budget' => 'Uitgegeven in budget ":budget"', + 'spent_in_specific_double' => 'Uitgegeven van rekening ":account"', + 'earned_in_specific_double' => 'Verdiend op rekening ":account"', + 'source_account' => 'Bronrekening', + 'source_account_reconciliation' => 'Je kan de bronrekening van een afstemming niet wijzigen.', + 'destination_account' => 'Doelrekening', + 'destination_account_reconciliation' => 'Je kan de doelrekening van een afstemming niet wijzigen.', + 'sum_of_expenses_in_budget' => 'Totaal uitgegeven in budget ":budget"', + 'left_in_budget_limit' => 'Nog uit te geven volgens budgettering', + 'current_period' => 'Huidige periode', + 'show_the_current_period_and_overview' => 'Bekijk de huidige periode en overzicht', + 'pref_languages_locale' => 'Als je hier een andere taal dan Engels hebt geselecteerd, zorg er dan voor dat je besturingssysteem ook in staat is om valuta, data en bedragen in die taal weer te geven.', + 'budget_in_period' => 'Alle transacties voor budget ":name" tussen :start en :end in :currency', + 'chart_budget_in_period' => 'Grafiek voor alle transacties voor budget ":name" tussen :start en :end in :currency', + 'chart_budget_in_period_only_currency' => 'Het bedrag dat je het begroot is in :currency, dus deze grafiek laat alleen transacties in :currency zien.', + 'chart_account_in_period' => 'Grafiek voor alle transacties voor rekening ":name" (:balance) tussen :start en :end', + 'chart_category_in_period' => 'Grafiek voor alle transacties voor categorie ":name" tussen :start en :end', + 'chart_category_all' => 'Grafiek voor alle transacties voor categorie ":name"', + 'clone_withdrawal' => 'Kopieer deze uitgave', + 'clone_deposit' => 'Kopieer deze inkomsten', + 'clone_transfer' => 'Kopieer deze overschrijving', + 'multi_select_no_selection' => 'Niets geselecteerd', + 'multi_select_select_all' => 'Selecteer alles', + 'multi_select_n_selected' => 'geselecteerd', + 'multi_select_all_selected' => 'Alles geselecteerd', + 'multi_select_filter_placeholder' => 'Vinden..', + 'intro_next_label' => 'Volgende', + 'intro_prev_label' => 'Vorige', + 'intro_skip_label' => 'Overslaan', + 'intro_done_label' => 'Klaar', + 'between_dates_breadcrumb' => 'Tussen :start en :end', + 'all_journals_without_budget' => 'Alle transacties zonder budget', + 'journals_without_budget' => 'Transacties zonder budget', + 'all_journals_without_category' => 'Alle transacties zonder categorie', + 'journals_without_category' => 'Transacties zonder categorie', + 'all_journals_for_account' => 'Alle transacties voor rekening :name', + 'chart_all_journals_for_account' => 'Grafiek van alle transacties voor rekening :name', + 'journals_in_period_for_account' => 'Alle transacties voor rekening :name tussen :start en :end', + 'journals_in_period_for_account_js' => 'Alle transacties voor rekening {title} tussen {start} en {end}', + 'transferred' => 'Overgeschreven', + 'all_withdrawal' => 'Alle uitgaven', + 'all_transactions' => 'Alle transacties', + 'title_withdrawal_between' => 'Alle uitgaven tussen :start en :end', + 'all_deposit' => 'Alle inkomsten', + 'title_deposit_between' => 'Alle inkomsten tussen :start en :end', + 'all_transfers' => 'Alle overschrijvingen', + 'title_transfers_between' => 'Alle overschrijvingen tussen :start en :end', + 'all_transfer' => 'Alle overschrijvingen', + 'all_journals_for_tag' => 'Alle transacties voor tag ":tag"', + 'title_transfer_between' => 'Alle overschrijvingen tussen :start en :end', + 'all_journals_for_category' => 'Alle transacties in categorie :name', + 'all_journals_for_budget' => 'Alle transacties voor budget :name', + 'chart_all_journals_for_budget' => 'Grafiek van alle transacties voor budget :name', + 'journals_in_period_for_category' => 'Alle transacties in categorie :name tussen :start en :end', + 'journals_in_period_for_tag' => 'Alle transacties voor tag :tag tussen :start en :end', + 'not_available_demo_user' => 'De functie die je probeert te gebruiken is niet beschikbaar voor gebruikers van de demo.', + 'exchange_rate_instructions' => 'Betaalrekening "@name" accepteert alleen boekingen in @native_currency. Als je @foreign_currency wilt gebruiken moet je ook het bedrag in @native_currency opgeven:', + 'transfer_exchange_rate_instructions' => 'Bronbetaalrekening "@source_name" accepteert alleen overschrijvingen in @source_currency. Doelbetaalrekening "@dest_name" accepteert alleen overschrijvingen in @dest_currency. Je moet het juiste bedrag in beide valuta opgeven.', + 'transaction_data' => 'Transactiegegevens', + 'invalid_server_configuration' => 'Ongeldige serverconfiguratie', + 'invalid_locale_settings' => 'Firefly III kan geldbedragen niet goed weergeven, omdat je server de vereiste software mist. Je kan lezen hoe je die moet installeren.', + 'quickswitch' => 'Quickswitch', + 'sign_in_to_start' => 'Login om te beginnen', + 'sign_in' => 'Inloggen', + 'register_new_account' => 'Registreer een nieuw account', + 'forgot_my_password' => 'Ik ben mijn wachtwoord vergeten', + 'problems_with_input' => 'Er zijn wat problemen met je input.', + 'reset_password' => 'Je wachtwoord resetten', + 'button_reset_password' => 'Reset wachtwoord', + 'reset_button' => 'Reset', + 'want_to_login' => 'Ik wil inloggen', + 'login_page_title' => 'Inloggen bij Firefly III', + 'register_page_title' => 'Registreren bij Firefly III', + 'forgot_pw_page_title' => 'Je wachtwoord voor Firefly III vergeten', + 'reset_pw_page_title' => 'Reset je Firefly III wachtwoord', + 'cannot_reset_demo_user' => 'Je kan het wachtwoord van de demo-gebruiker niet resetten.', + 'no_att_demo_user' => 'De demo user kan niks uploaden.', + 'button_register' => 'Registreren', + 'authorization' => 'Toestemming', + 'active_bills_only' => 'alleen actieve contracten', + 'active_bills_only_total' => 'alle actieve contracten', + 'active_exp_bills_only' => 'alleen actieve en verwachte contracten', + 'active_exp_bills_only_total' => 'alle actieve en verwachte contracten', + 'per_period_sum_1D' => 'Verwachte dagelijkse kosten', + 'per_period_sum_1W' => 'Verwachte wekelijkse kosten', + 'per_period_sum_1M' => 'Verwachte maandelijkse kosten', + 'per_period_sum_3M' => 'Verwachte kwartaalkosten', + 'per_period_sum_6M' => 'Verwachte half-jaarlijkse kosten', + 'per_period_sum_1Y' => 'Verwachte jaarlijkse kosten', + 'average_per_bill' => 'gemiddeld per contract', + 'expected_total' => 'verwacht totaal', + 'reconciliation_account_name' => ':name afstemming (:currency)', + 'saved' => 'Opgeslagen', + 'advanced_options' => 'Geavanceerde opties', + 'advanced_options_explain' => 'Sommige pagina\'s in Firefly III hebben geavanceerde opties verborgen achter deze knop. Voor deze pagina geldt dat niet, maar check zeker de andere pagina\'s!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'Er zijn geen webhook-berichten', - 'webhook_trigger_STORE_TRANSACTION' => 'Na het maken van een transactie', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Na het updaten van een transactie', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Na het verwijderen van een transactie', - 'webhook_response_TRANSACTIONS' => 'Transactiedetails', - 'webhook_response_ACCOUNTS' => 'Rekeningdetails', - 'webhook_response_none_NONE' => 'Geen details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspecteren', - 'create_new_webhook' => 'Maak nieuwe webhook', - 'webhooks_create_breadcrumb' => 'Maak nieuwe webhook', - 'webhook_trigger_form_help' => 'Geef aan bij welke gebeurtenis de webhook afgaat', - 'webhook_response_form_help' => 'Geef aan wat de webhook mee moet sturen.', - 'webhook_delivery_form_help' => 'Geef aan welk dataformaat gebruikt moet worden.', - 'webhook_active_form_help' => 'De webhook moet actief zijn anders doet-ie het niet.', - 'stored_new_webhook' => 'Nieuw webhook ":title" opgeslagen', - 'delete_webhook' => 'Webhook verwijderen', - 'deleted_webhook' => 'Webhook ":title" verwijderd', - 'edit_webhook' => 'Webhook ":title" wijzigen', - 'updated_webhook' => 'Webhook ":title" bijgewerkt', - 'edit_webhook_js' => 'Webhook "{title}" wijzigen', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'De webhook is getriggerd op de aangegeven transactie. Het resultaat zie je zometeen.', - 'webhook_messages' => 'Webhook-bericht', - 'view_message' => 'Bekijk bericht', - 'view_attempts' => 'Bekijk mislukte pogingen', - 'message_content_title' => 'Inhoud van webhook-bericht', - 'message_content_help' => 'Dit is de inhoud van het bericht dat verzonden was (of niet) met behulp van deze webhook.', - 'attempt_content_title' => 'Webhookpogingen', - 'attempt_content_help' => 'Dit zijn alle mislukte pogingen van de webhook om data te versturen. Na een paar keer stopt Firefly III met proberen.', - 'no_attempts' => 'Er zijn geen mislukte pogingen. Lekker toch?', - 'webhook_attempt_at' => 'Poging op {moment}', - 'logs' => 'Logboeken', - 'response' => 'Reactie', - 'visit_webhook_url' => 'Bezoek URL van webhook', - 'reset_webhook_secret' => 'Reset webhook-geheim', - 'webhook_stored_link' => 'Webhook #{ID} ({title}) is opgeslagen.', - 'webhook_updated_link' => 'Webhook #{ID} ({title}) is geüpdatet.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'uitgeschakeld', + 'no_webhook_messages' => 'Er zijn geen webhook-berichten', + 'webhook_trigger_STORE_TRANSACTION' => 'Na het maken van een transactie', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Na het updaten van een transactie', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Na het verwijderen van een transactie', + 'webhook_response_TRANSACTIONS' => 'Transactiedetails', + 'webhook_response_ACCOUNTS' => 'Rekeningdetails', + 'webhook_response_none_NONE' => 'Geen details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspecteren', + 'create_new_webhook' => 'Maak nieuwe webhook', + 'webhooks_create_breadcrumb' => 'Maak nieuwe webhook', + 'webhook_trigger_form_help' => 'Geef aan bij welke gebeurtenis de webhook afgaat', + 'webhook_response_form_help' => 'Geef aan wat de webhook mee moet sturen.', + 'webhook_delivery_form_help' => 'Geef aan welk dataformaat gebruikt moet worden.', + 'webhook_active_form_help' => 'De webhook moet actief zijn anders doet-ie het niet.', + 'stored_new_webhook' => 'Nieuw webhook ":title" opgeslagen', + 'delete_webhook' => 'Webhook verwijderen', + 'deleted_webhook' => 'Webhook ":title" verwijderd', + 'edit_webhook' => 'Webhook ":title" wijzigen', + 'updated_webhook' => 'Webhook ":title" bijgewerkt', + 'edit_webhook_js' => 'Webhook "{title}" wijzigen', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'De webhook is getriggerd op de aangegeven transactie. Het resultaat zie je zometeen.', + 'webhook_messages' => 'Webhook-bericht', + 'view_message' => 'Bekijk bericht', + 'view_attempts' => 'Bekijk mislukte pogingen', + 'message_content_title' => 'Inhoud van webhook-bericht', + 'message_content_help' => 'Dit is de inhoud van het bericht dat verzonden was (of niet) met behulp van deze webhook.', + 'attempt_content_title' => 'Webhookpogingen', + 'attempt_content_help' => 'Dit zijn alle mislukte pogingen van de webhook om data te versturen. Na een paar keer stopt Firefly III met proberen.', + 'no_attempts' => 'Er zijn geen mislukte pogingen. Lekker toch?', + 'webhook_attempt_at' => 'Poging op {moment}', + 'logs' => 'Logboeken', + 'response' => 'Reactie', + 'visit_webhook_url' => 'Bezoek URL van webhook', + 'reset_webhook_secret' => 'Reset webhook-geheim', + 'webhook_stored_link' => 'Webhook #{ID} ({title}) is opgeslagen.', + 'webhook_updated_link' => 'Webhook #{ID} ({title}) is geüpdatet.', // API access - 'authorization_request' => 'Firefly III v:version autorisatieverzoek', - 'authorization_request_intro' => 'Applicatie ":client" vraagt ​​toestemming om toegang te krijgen tot je financiële administratie. Wil je :client autoriseren om toegang te krijgen tot je gegevens?', - 'authorization_request_site' => 'Je wordt doorgestuurd naar :url, die vervolgens toegang heeft tot je Firefly III-gegevens.', - 'authorization_request_invalid' => 'Dit toegangsverzoek is ongeldig. Volg deze link niet meer.', - 'scopes_will_be_able' => 'Deze applicatie krijgt toegang tot:', - 'button_authorize' => 'Toestaan', - 'none_in_select_list' => '(geen)', - 'no_piggy_bank' => '(geen spaarpotje)', - 'name_in_currency' => ':name in :currency', - 'paid_in_currency' => 'Betaald in :currency', - 'unpaid_in_currency' => 'Nog niet betaald in :currency', - 'is_alpha_warning' => 'Je gebruikt een ALPHA versie. Let op bugs en fouten.', - 'is_beta_warning' => 'Je gebruikt een BETA versie. Let op bugs en fouten.', - 'all_destination_accounts' => 'Doelrekeningen', - 'all_source_accounts' => 'Bronrekeningen', - 'back_to_index' => 'Terug naar de index', - 'cant_logout_guard' => 'Firefly III kan je niet uitloggen.', - 'internal_reference' => 'Interne referentie', + 'authorization_request' => 'Firefly III v:version autorisatieverzoek', + 'authorization_request_intro' => "Applicatie \":client\" vraagt \u{200b}\u{200b}toestemming om toegang te krijgen tot je financiële administratie. Wil je :client autoriseren om toegang te krijgen tot je gegevens?", + 'authorization_request_site' => 'Je wordt doorgestuurd naar :url, die vervolgens toegang heeft tot je Firefly III-gegevens.', + 'authorization_request_invalid' => 'Dit toegangsverzoek is ongeldig. Volg deze link niet meer.', + 'scopes_will_be_able' => 'Deze applicatie krijgt toegang tot:', + 'button_authorize' => 'Toestaan', + 'none_in_select_list' => '(geen)', + 'no_piggy_bank' => '(geen spaarpotje)', + 'name_in_currency' => ':name in :currency', + 'paid_in_currency' => 'Betaald in :currency', + 'unpaid_in_currency' => 'Nog niet betaald in :currency', + 'is_alpha_warning' => 'Je gebruikt een ALPHA versie. Let op bugs en fouten.', + 'is_beta_warning' => 'Je gebruikt een BETA versie. Let op bugs en fouten.', + 'all_destination_accounts' => 'Doelrekeningen', + 'all_source_accounts' => 'Bronrekeningen', + 'back_to_index' => 'Terug naar de index', + 'cant_logout_guard' => 'Firefly III kan je niet uitloggen.', + 'internal_reference' => 'Interne referentie', // check for updates: - 'update_check_title' => 'Op updates controleren', - 'admin_update_check_title' => 'Controleer automatisch op updates', - 'admin_update_check_explain' => 'Firefly III kan automatisch op updates controleren. Wanneer je deze instelling inschakelt, neemt Firefly III contact op met de update-server om te kijken of er een nieuwe versie van Firefly III beschikbaar is. Wanneer dit het geval is, ontvang je een melding. Je kan deze melding testen met de knop aan de rechterkant. Geef hieronder aan of je Firefly III wilt laten controleren op updates.', - 'check_for_updates_permission' => 'Firefly III kan controleren op updates, maar heeft hiervoor je toestemming nodig. Ga naar de admin om aan te geven of deze functie moet worden ingeschakeld.', - 'updates_ask_me_later' => 'Later vragen', - 'updates_do_not_check' => 'Niet controleren op nieuwe versies', - 'updates_enable_check' => 'Controleren op nieuwe versies', - 'admin_update_check_now_title' => 'Op updates controleren', - 'admin_update_check_now_explain' => 'Als je op de knop drukt, kijkt Firefly III of je huidige versie de nieuwste is.', - 'check_for_updates_button' => 'Controleer nu!', - 'update_new_version_alert' => 'Er is een nieuwe versie van Firefly III beschikbaar. Je gebruikt :your_version, de nieuwste versie is :new_version die werd uitgebracht op :date.', - 'update_version_beta' => 'Dit is een BETA versie. Er kunnen bugs in zitten.', - 'update_version_alpha' => 'Dit is een ALPHA versie. Er kunnen bugs in zitten.', - 'update_current_version_alert' => 'Je gebruikt :version, de nieuwste beschikbare versie.', - 'update_newer_version_alert' => 'Je gebruikt :your_version, wat nieuwer is dan de nieuwste versie, :new_version.', - 'update_check_error' => 'Er is een fout opgetreden bij het controleren op updates: :error', - 'unknown_error' => 'Onbekende fout. Sorry.', - 'just_new_release' => 'Er is een nieuwe versie beschikbaar! Versie :version werd uitgebracht :date. Deze is pas net uit. Wacht een paar dagen om er zeker van te zijn dat de versie stabiel is.', - 'disabled_but_check' => 'Je hebt de update-controle uitgeschakeld. Vergeet dus niet zo nu en dan zelf te controleren op updates. Bedankt!', - 'admin_update_channel_title' => 'Updatekanaal', - 'admin_update_channel_explain' => 'Firefly III heeft drie "kanalen" die bepalen of en hoever je voorloopt als het gaat om features, wijzigingen en bugs. Gebruik het "beta"-kanaal als je een avontuurlijke bui hebt en gebruik het "alpha" kanaal als je ook graag met krokodillen zwemt.', - 'update_channel_stable' => 'Stabiel. Zou allemaal goed moeten gaan.', - 'update_channel_beta' => 'Beta. Nieuwe dingen, maar die kunnen stuk zijn.', - 'update_channel_alpha' => 'Alpha. We doen maar wat en jij mag testen.', + 'update_check_title' => 'Op updates controleren', + 'admin_update_check_title' => 'Controleer automatisch op updates', + 'admin_update_check_explain' => 'Firefly III kan automatisch op updates controleren. Wanneer je deze instelling inschakelt, neemt Firefly III contact op met de update-server om te kijken of er een nieuwe versie van Firefly III beschikbaar is. Wanneer dit het geval is, ontvang je een melding. Je kan deze melding testen met de knop aan de rechterkant. Geef hieronder aan of je Firefly III wilt laten controleren op updates.', + 'check_for_updates_permission' => 'Firefly III kan controleren op updates, maar heeft hiervoor je toestemming nodig. Ga naar de admin om aan te geven of deze functie moet worden ingeschakeld.', + 'updates_ask_me_later' => 'Later vragen', + 'updates_do_not_check' => 'Niet controleren op nieuwe versies', + 'updates_enable_check' => 'Controleren op nieuwe versies', + 'admin_update_check_now_title' => 'Op updates controleren', + 'admin_update_check_now_explain' => 'Als je op de knop drukt, kijkt Firefly III of je huidige versie de nieuwste is.', + 'check_for_updates_button' => 'Controleer nu!', + 'update_new_version_alert' => 'Er is een nieuwe versie van Firefly III beschikbaar. Je gebruikt :your_version, de nieuwste versie is :new_version die werd uitgebracht op :date.', + 'update_version_beta' => 'Dit is een BETA versie. Er kunnen bugs in zitten.', + 'update_version_alpha' => 'Dit is een ALPHA versie. Er kunnen bugs in zitten.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Je gebruikt :version, de nieuwste beschikbare versie.', + 'update_newer_version_alert' => 'Je gebruikt :your_version, wat nieuwer is dan de nieuwste versie, :new_version.', + 'update_check_error' => 'Er is een fout opgetreden bij het controleren op updates: :error', + 'unknown_error' => 'Onbekende fout. Sorry.', + 'disabled_but_check' => 'Je hebt de update-controle uitgeschakeld. Vergeet dus niet zo nu en dan zelf te controleren op updates. Bedankt!', + 'admin_update_channel_title' => 'Updatekanaal', + 'admin_update_channel_explain' => 'Firefly III heeft drie "kanalen" die bepalen of en hoever je voorloopt als het gaat om features, wijzigingen en bugs. Gebruik het "beta"-kanaal als je een avontuurlijke bui hebt en gebruik het "alpha" kanaal als je ook graag met krokodillen zwemt.', + 'update_channel_stable' => 'Stabiel. Zou allemaal goed moeten gaan.', + 'update_channel_beta' => 'Beta. Nieuwe dingen, maar die kunnen stuk zijn.', + 'update_channel_alpha' => 'Alpha. We doen maar wat en jij mag testen.', // search - 'search' => 'Zoeken', - 'search_query' => 'Zoekopdracht', - 'search_found_transactions' => 'Firefly III vond :count transactie in :time seconden.|Firefly III vond :count transacties in :time seconden.', - 'search_found_more_transactions' => 'Firefly III vond meer dan :count transacties in :time seconden.', - 'search_for_query' => 'Firefly III zoekt transacties met al deze woorden: :query', - 'invalid_operators_list' => 'De volgende zoekparameters zijn niet geldig en worden genegeerd.', + 'search' => 'Zoeken', + 'search_query' => 'Zoekopdracht', + 'search_found_transactions' => 'Firefly III vond :count transactie in :time seconden.|Firefly III vond :count transacties in :time seconden.', + 'search_found_more_transactions' => 'Firefly III vond meer dan :count transacties in :time seconden.', + 'search_for_query' => 'Firefly III zoekt transacties met al deze woorden: :query', + 'invalid_operators_list' => 'De volgende zoekparameters zijn niet geldig en worden genegeerd.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transactiedatum is ":value"', 'search_modifier_not_date_on' => 'Transactiedatum is niet ":value"', 'search_modifier_reconciled' => 'Transactie is afgestemd', @@ -370,14 +371,14 @@ return [ 'search_modifier_not_no_external_id' => 'De transactie heeft een (welke dan ook) extern ID', 'search_modifier_internal_reference_is' => 'Interne referentie is ":value"', 'search_modifier_not_internal_reference_is' => 'Interne referentie is niet ":value"', - 'search_modifier_description_starts' => 'Omschrijving begint met ":value"', - 'search_modifier_not_description_starts' => 'Omschrijving begint niet met ":value"', - 'search_modifier_description_ends' => 'Omschrijving eindigt op ":value"', - 'search_modifier_not_description_ends' => 'Omschrijving eindigt niet met ":value"', - 'search_modifier_description_contains' => 'Omschrijving bevat ":value"', - 'search_modifier_not_description_contains' => 'Omschrijving bevat niet ":value"', - 'search_modifier_description_is' => 'Omschrijving is ":value"', - 'search_modifier_not_description_is' => 'Omschrijving is niet ":value"', + 'search_modifier_description_starts' => 'Beschrijving begint met ":value"', + 'search_modifier_not_description_starts' => 'Beschrijving begint niet met ":value"', + 'search_modifier_description_ends' => 'Beschrijving eindigt op ":value"', + 'search_modifier_not_description_ends' => 'Beschrijving eindigt niet met ":value"', + 'search_modifier_description_contains' => 'Beschrijving bevat ":value"', + 'search_modifier_not_description_contains' => 'Beschrijving bevat niet ":value"', + 'search_modifier_description_is' => 'Beschrijving is ":value"', + 'search_modifier_not_description_is' => 'Beschrijving is niet ":value"', 'search_modifier_currency_is' => 'Transactie (vreemde) valuta is ":value"', 'search_modifier_not_currency_is' => 'Transactie (vreemde) valuta is niet ":value"', 'search_modifier_foreign_currency_is' => 'Transactie vreemde valuta is ":value"', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Transactietype is ":value"', 'search_modifier_not_transaction_type' => 'Transactietype is niet ":value"', 'search_modifier_tag_is' => 'Tag is ":value"', + 'search_modifier_tag_contains' => 'Tag bevat ":value"', + 'search_modifier_not_tag_contains' => 'Tag bevat niet ":value"', + 'search_modifier_tag_ends' => 'Tag eindigt op ":value"', + 'search_modifier_tag_starts' => 'Tag begint met ":value"', 'search_modifier_not_tag_is' => 'Geen tag is ":value"', 'search_modifier_date_on_year' => 'Transactie is in jaar ":value"', 'search_modifier_not_date_on_year' => 'Transactie is niet in jaar ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'Geen tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'De volgende wijzigingen worden ook toegepast op de zoekopdracht:', 'general_search_error' => 'Er is een fout opgetreden tijdens het zoeken. Controleer de log-bestanden voor meer informatie.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Niet', 'cannot_fire_inactive_rules' => 'Inactieve regels doen het niet.', + 'show_triggers' => 'Toon triggers', + 'show_actions' => 'Toon acties', 'rules' => 'Regels', 'rule_name' => 'Regelnaam', 'rule_triggers' => 'Regel reageert op', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Als een transactie wordt bijgewerkt', 'rule_trigger_user_action' => 'Gebruikersactie is ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Bronrekeningnaam begint met..', 'rule_trigger_source_account_starts' => 'Bronrekeningnaam begint met ":trigger_value"', @@ -870,14 +874,14 @@ return [ 'rule_trigger_amount_is' => 'Bedrag is :trigger_value', 'rule_trigger_amount_more_choice' => 'Bedrag is groter dan of gelijk aan..', 'rule_trigger_amount_more' => 'Bedrag is groter dan of gelijk aan :trigger_value', - 'rule_trigger_description_starts_choice' => 'Omschrijving begint met..', - 'rule_trigger_description_starts' => 'Omschrijving begint met ":trigger_value"', - 'rule_trigger_description_ends_choice' => 'Omschrijving eindigt op..', - 'rule_trigger_description_ends' => 'Omschrijving eindigt op ":trigger_value"', - 'rule_trigger_description_contains_choice' => 'Omschrijving bevat..', - 'rule_trigger_description_contains' => 'Omschrijving bevat ":trigger_value"', - 'rule_trigger_description_is_choice' => 'Omschrijving is..', - 'rule_trigger_description_is' => 'Omschrijving is ":trigger_value"', + 'rule_trigger_description_starts_choice' => 'Beschrijving begint met..', + 'rule_trigger_description_starts' => 'Beschrijving begint met ":trigger_value"', + 'rule_trigger_description_ends_choice' => 'Beschrijving eindigt op..', + 'rule_trigger_description_ends' => 'Beschrijving eindigt op ":trigger_value"', + 'rule_trigger_description_contains_choice' => 'Beschrijving bevat..', + 'rule_trigger_description_contains' => 'Beschrijving bevat ":trigger_value"', + 'rule_trigger_description_is_choice' => 'Beschrijving is..', + 'rule_trigger_description_is' => 'Beschrijving is ":trigger_value"', 'rule_trigger_date_on_choice' => 'Transactiedatum is..', 'rule_trigger_date_on' => 'Transactiedatum is ":trigger_value"', 'rule_trigger_date_before_choice' => 'Transactiedatum is vóór..', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Budget is ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Een tag is..', 'rule_trigger_tag_is' => 'Een tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Transactievaluta is..', 'rule_trigger_currency_is' => 'Transactievaluta is ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Transactie vreemde valuta is..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transactie bestaat niet', 'rule_trigger_not_has_attachments' => 'Transactie heeft geen bijlagen', 'rule_trigger_not_has_any_category' => 'Transactie heeft geen categorie', - 'rule_trigger_not_has_any_budget' => 'Transactie heeft geen categorie', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transactie heeft geen contract', 'rule_trigger_not_has_any_tag' => 'Transactie heeft geen tags', 'rule_trigger_not_any_notes' => 'Transactie heeft geen notities', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Doelrekening is geen cash-rekening', 'rule_trigger_not_account_is_cash' => 'Geen van beide rekeningen is een cash-rekening', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'VERWIJDER transactie(!)', @@ -1232,9 +1241,9 @@ return [ 'rule_action_add_tag' => 'Voeg tag ":action_value" toe', 'rule_action_remove_tag' => 'Haal tag ":action_value" weg', 'rule_action_remove_all_tags' => 'Haal alle tags weg', - 'rule_action_set_description' => 'Geef omschrijving ":action_value"', - 'rule_action_append_description' => 'Zet ":action_value" voor de omschrijving', - 'rule_action_prepend_description' => 'Zet ":action_value" voor de omschrijving', + 'rule_action_set_description' => 'Geef beschrijving ":action_value"', + 'rule_action_append_description' => 'Zet ":action_value" voor de beschrijving', + 'rule_action_prepend_description' => 'Zet ":action_value" voor de beschrijving', 'rule_action_set_category_choice' => 'Stel categorie in op ..', 'rule_action_clear_category_choice' => 'Geef geen categorie', 'rule_action_set_budget_choice' => 'Stel budget in op ..', @@ -1242,7 +1251,7 @@ return [ 'rule_action_add_tag_choice' => 'Voeg tag toe ..', 'rule_action_remove_tag_choice' => 'Haal tag weg ..', 'rule_action_remove_all_tags_choice' => 'Haal alle tags weg', - 'rule_action_set_description_choice' => 'Stel beschrijving in op ..', + 'rule_action_set_description_choice' => 'Stel omschrijving in op ..', 'rule_action_update_piggy_choice' => 'Voeg toe / verwijder het transactiebedrag in spaarpotje ..', 'rule_action_update_piggy' => 'Voeg toe / verwijder het transactiebedrag in ":action_value"', 'rule_action_append_description_choice' => 'Zet .. achter de omschrijving', @@ -1260,7 +1269,7 @@ return [ 'rule_action_set_notes_choice' => 'Stel notities in op ..', 'rule_action_link_to_bill_choice' => 'Link naar een contract ..', 'rule_action_link_to_bill' => 'Link naar contract ":action_value"', - 'rule_action_switch_accounts_choice' => 'Wissel bron- en doelrekening (alleen overboekingen!)', + 'rule_action_switch_accounts_choice' => 'Wissel bron- en doelrekening (alleen overschrijvingen!)', 'rule_action_switch_accounts' => 'Wissel bron- en doelrekening', 'rule_action_set_notes' => 'Verander notitie in ":action_value"', 'rule_action_convert_deposit_choice' => 'Verander de transactie in inkomsten', @@ -1269,14 +1278,16 @@ return [ 'rule_action_convert_withdrawal' => 'Verander de transactie in een uitgave bij ":action_value"', 'rule_action_convert_transfer_choice' => 'Verander de transactie in een overschrijving', 'rule_action_convert_transfer' => 'Verander de transactie in een overschrijving met ":action_value"', - 'rule_action_append_descr_to_notes_choice' => 'Voeg de beschrijving toe aan de transactienotities', + 'rule_action_append_descr_to_notes_choice' => 'Voeg de omschrijving toe aan de transactienotities', 'rule_action_append_notes_to_descr_choice' => 'Voeg de transactienotities toe aan de beschrijving', - 'rule_action_move_descr_to_notes_choice' => 'Vervang de huidige transactienotities door de beschrijving', + 'rule_action_move_descr_to_notes_choice' => 'Vervang de huidige transactienotities door de omschrijving', 'rule_action_move_notes_to_descr_choice' => 'Vervang de huidige beschrijving door transactienotities', - 'rule_action_append_descr_to_notes' => 'Voeg beschrijving toe aan notitie', + 'rule_action_append_descr_to_notes' => 'Voeg omschrijving toe aan notitie', 'rule_action_append_notes_to_descr' => 'Voeg notitie toe aan beschrijving', - 'rule_action_move_descr_to_notes' => 'Notitie vervangen door beschrijving', + 'rule_action_move_descr_to_notes' => 'Notitie vervangen door omschrijving', 'rule_action_move_notes_to_descr' => 'Beschrijving vervangen door notitie', + 'rule_action_set_destination_to_cash_choice' => 'Verander doelrekening naar (cash)-rekening', + 'rule_action_set_source_to_cash_choice' => 'Verander bronrekening naar (cash)-rekening', 'rulegroup_for_bills_title' => 'Regelgroep voor contracten', 'rulegroup_for_bills_description' => 'Een speciale regelgroep voor alle regels die betrekking hebben op contracten.', 'rule_for_bill_title' => 'Automatisch gegenereerde regel voor contract ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Regel voor contract ":name"', 'new_rule_for_bill_description' => 'Deze regel markeert uitgaven voor contract ":name".', - 'new_rule_for_journal_title' => 'Regel gebaseerd op transactie ":description"', - 'new_rule_for_journal_description' => 'Deze regel is gebaseerd op transactie ":description". Hij matcht met transacties die precies hetzelfde zijn.', + 'new_rule_for_journal_title' => 'Regel gebaseerd op transactie ":description"', + 'new_rule_for_journal_description' => 'Deze regel is gebaseerd op transactie ":description". Hij matcht met transacties die precies hetzelfde zijn.', // tags - 'store_new_tag' => 'Sla tag op', - 'update_tag' => 'Sla wijzigingen op', - 'no_location_set' => 'Zonder plaats', - 'meta_data' => 'Metagegevens', - 'location' => 'Plaats', - 'without_date' => 'Zonder datum', - 'result' => 'Resultaat', - 'sums_apply_to_range' => 'Alle sommen gelden voor het geselecteerde bereik', - 'mapbox_api_key' => 'Om de kaart te gebruiken regel je een API-key bij Mapbox. Open je .env-bestand en zet deze achter MAPBOX_API_KEY=.', - 'press_object_location' => 'Klik met de rechtermuisknop of druk lang om de locatie van het object in te stellen.', - 'clear_location' => 'Wis locatie', - 'delete_all_selected_tags' => 'Alle geselecteerde tags verwijderen', - 'select_tags_to_delete' => 'Vergeet niet om tags te selecteren.', - 'deleted_x_tags' => ':count tag verwijderd.|:count tags verwijderd.', - 'create_rule_from_transaction' => 'Regel aanmaken op basis van een transactie', - 'create_recurring_from_transaction' => 'Maak periodieke transactie gebaseerd op transactie', - + 'store_new_tag' => 'Sla tag op', + 'update_tag' => 'Sla wijzigingen op', + 'no_location_set' => 'Zonder plaats', + 'meta_data' => 'Metagegevens', + 'location' => 'Plaats', + 'location_first_split' => 'De locatie voor deze transactie kan worden ingesteld bij de eerste splits van deze transactie.', + 'without_date' => 'Zonder datum', + 'result' => 'Resultaat', + 'sums_apply_to_range' => 'Alle sommen gelden voor het geselecteerde bereik', + 'mapbox_api_key' => 'Om de kaart te gebruiken regel je een API-key bij Mapbox. Open je .env-bestand en zet deze achter MAPBOX_API_KEY=.', + 'press_object_location' => 'Klik met de rechtermuisknop of druk lang om de locatie van het object in te stellen.', + 'click_tap_location' => 'Klik of tik op de kaart om een locatie toe te voegen', + 'clear_location' => 'Wis locatie', + 'delete_all_selected_tags' => 'Alle geselecteerde tags verwijderen', + 'select_tags_to_delete' => 'Vergeet niet om tags te selecteren.', + 'deleted_x_tags' => ':count tag verwijderd.|:count tags verwijderd.', + 'create_rule_from_transaction' => 'Regel aanmaken op basis van een transactie', + 'create_recurring_from_transaction' => 'Maak periodieke transactie gebaseerd op transactie', // preferences - 'dark_mode_option_browser' => 'Je browser bepaalt', - 'dark_mode_option_light' => 'Altijd licht', - 'dark_mode_option_dark' => 'Altijd donker', - 'equal_to_language' => '(zelfde als taal)', - 'dark_mode_preference' => 'Nachtmodus', - 'dark_mode_preference_help' => 'Stel nachtmodus in.', - 'pref_home_screen_accounts' => 'Voorpaginarekeningen', - 'pref_home_screen_accounts_help' => 'Welke betaalrekeningen wil je op de voorpagina zien?', - 'pref_view_range' => 'Bereik', - 'pref_view_range_help' => 'Sommige grafieken worden automagisch gegroepeerd in periodes. Ook je budgetten zullen standaard in deze periode verdeeld worden. Welke periode mag het zijn?', - 'pref_1D' => 'Eén dag', - 'pref_1W' => 'Eén week', - 'pref_1M' => 'Eén maand', - 'pref_3M' => 'Drie maanden (kwartaal)', - 'pref_6M' => 'Zes maanden', - 'pref_1Y' => 'Eén jaar', - 'pref_last365' => 'Afgelopen jaar', - 'pref_last90' => 'Afgelopen 90 dagen', - 'pref_last30' => 'Afgelopen 30 dagen', - 'pref_last7' => 'Afgelopen 7 dagen', - 'pref_YTD' => 'Jaar tot nu', - 'pref_QTD' => 'Kwartaal tot nu', - 'pref_MTD' => 'Maand tot nu', - 'pref_languages' => 'Talen', - 'pref_locale' => 'Lokale instellingen', - 'pref_languages_help' => 'Firefly III ondersteunt meerdere talen. Welke heeft jouw voorkeur?', - 'pref_locale_help' => 'Firefly III kan andere lokale instellingen gebruiken, die bepalen hoe valuta, nummers en datums worden weergegeven. De lijst hieronder is compleet maar niet alles wordt ondersteund door jouw systeem. Het kan zijn dat Firefly III bepaalde lokale instellingen niet lekker weergeeft; neem dan contact met me op.', - 'pref_locale_no_demo' => 'Deze functie werkt niet voor de demo-gebruiker.', - 'pref_custom_fiscal_year' => 'Instellingen voor boekjaar', - 'pref_custom_fiscal_year_label' => 'Ingeschakeld', - 'pref_custom_fiscal_year_help' => 'Voor in landen die een boekjaar gebruiken anders dan 1 januari tot 31 december', - 'pref_fiscal_year_start_label' => 'Start van boekjaar', - 'pref_two_factor_auth' => 'Authenticatie in twee stappen', - 'pref_two_factor_auth_help' => 'Als je authenticatie in twee stappen (ook wel twee-factor authenticatie genoemd) inschakelt voeg je een extra beveiligingslaag toe aan je account. Je logt in met iets dat je weet (je wachtwoord) en iets dat je hebt (een verificatiecode). Verificatiecodes worden gegenereerd door apps op je telefoon, zoals Authy en Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Authenticatie in twee stappen inschakelen', - 'pref_two_factor_auth_disabled' => 'Je verificatiecode voor authenticatie in twee stappen is verwijderd, en uitgeschakeld', - 'pref_two_factor_auth_remove_it' => 'Vergeet niet om je Firefly III account uit je authenticatie appje te verwijderen!', - 'pref_two_factor_auth_code' => 'Bevestig de code', - 'pref_two_factor_auth_code_help' => 'Scan deze QR code met een app op je telefoon (zoals Authy of Google Authenticator). Vul de code die je terug krijgt hier in.', - 'pref_two_factor_auth_reset_code' => 'Reset de verificatiecode', - 'pref_two_factor_auth_disable_2fa' => '2FA uitzetten', - '2fa_use_secret_instead' => 'Als je de QR code niet kan scannen gebruik dan de geheime code: :secret.', - '2fa_backup_codes' => 'Sla deze backupcodes op zodat je toegang houdt als je je apparaat verliest.', - '2fa_already_enabled' => 'Tweestapsverificatie is al ingeschakeld.', - 'wrong_mfa_code' => 'Deze code is niet geldig.', - 'pref_save_settings' => 'Instellingen opslaan', - 'saved_preferences' => 'Voorkeuren opgeslagen!', - 'preferences_general' => 'Algemeen', - 'preferences_frontpage' => 'Homepagina', - 'preferences_security' => 'Veiligheid', - 'preferences_layout' => 'Uiterlijk', - 'preferences_notifications' => 'Meldingen', - 'pref_home_show_deposits' => 'Laat inkomsten zien op de homepagina', - 'pref_home_show_deposits_info' => 'De homepagina laat al crediteuren zien. Wil je ook je debiteuren zien?', - 'pref_home_do_show_deposits' => 'Ja, kom maar op', - 'successful_count' => 'waarvan :count met succes', - 'list_page_size_title' => 'Paginalengte', - 'list_page_size_help' => 'Per lijst met dingen (accounts, transacties, enz.) zie je hooguit zoveel items.', - 'list_page_size_label' => 'Paginalengte', - 'between_dates' => '(:start en :end)', - 'pref_optional_fields_transaction' => 'Optionele velden voor transacties', - 'pref_optional_fields_transaction_help' => 'Standaard staan niet alle velden aan (vanwege het overzicht). Hier kan je zulke extra velden alsnog aanzetten, als je denkt dat ze handig zijn. Als je een veld uitzet, maar deze heeft wel degelijk een waarde, dan is-ie altijd zichtbaar, wat je ook doet.', - 'optional_tj_date_fields' => 'Datumvelden', - 'optional_tj_other_fields' => 'Overige velden', - 'optional_tj_attachment_fields' => 'Bijlagen', - 'pref_optional_tj_interest_date' => 'Rentedatum', - 'pref_optional_tj_book_date' => 'Boekdatum', - 'pref_optional_tj_process_date' => 'Verwerkingsdatum', - 'pref_optional_tj_due_date' => 'Vervaldatum', - 'pref_optional_tj_payment_date' => 'Betalingsdatum', - 'pref_optional_tj_invoice_date' => 'Factuurdatum', - 'pref_optional_tj_internal_reference' => 'Interne referentie', - 'pref_optional_tj_notes' => 'Notities', - 'pref_optional_tj_attachments' => 'Bijlagen', - 'pref_optional_tj_external_url' => 'Externe URL', - 'pref_optional_tj_location' => 'Locatie', - 'pref_optional_tj_links' => 'Transactiekoppelingen', - 'optional_field_meta_dates' => 'Data', - 'optional_field_meta_business' => 'Zakelijk', - 'optional_field_attachments' => 'Bijlagen', - 'optional_field_meta_data' => 'Optionele meta-gegevens', - 'external_url' => 'Externe URL', - 'pref_notification_bill_reminder' => 'Herinnering over het verlopen van contracten', - 'pref_notification_new_access_token' => 'Melding wanneer een nieuwe API-toegangstoken wordt aangemaakt', - 'pref_notification_transaction_creation' => 'Melding wanneer een transactie automatisch wordt aangemaakt', - 'pref_notification_user_login' => 'Melding wanneer u inlogt vanaf een nieuwe locatie', - 'pref_notification_rule_action_failures' => 'Waarschuwen wanneer regelacties niet utgevoerd kunnen worden (alleen via Slack of Discord)', - 'pref_notifications' => 'Meldingen', - 'pref_notifications_help' => 'Geef aan of dit meldingen zijn die je zou willen krijgen. Sommige meldingen kunnen gevoelige financiële informatie bevatten.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'Als je wilt dat Firefly III je informeert met Slack, vul dan hier de webhook URL in. Laat anders het veld leeg. Als je een beheerder bent, moet je deze URL ook in de administratie invullen.', - 'slack_url_label' => 'Slack "binnenkomende webhook" URL', + 'dark_mode_option_browser' => 'Je browser bepaalt', + 'dark_mode_option_light' => 'Altijd licht', + 'dark_mode_option_dark' => 'Altijd donker', + 'equal_to_language' => '(zelfde als taal)', + 'dark_mode_preference' => 'Nachtmodus', + 'dark_mode_preference_help' => 'Stel nachtmodus in.', + 'pref_home_screen_accounts' => 'Voorpaginarekeningen', + 'pref_home_screen_accounts_help' => 'Welke betaalrekeningen wil je op de voorpagina zien?', + 'pref_view_range' => 'Bereik', + 'pref_view_range_help' => 'Sommige grafieken worden automagisch gegroepeerd in periodes. Ook je budgetten zullen standaard in deze periode verdeeld worden. Welke periode mag het zijn?', + 'pref_1D' => 'Eén dag', + 'pref_1W' => 'Eén week', + 'pref_1M' => 'Eén maand', + 'pref_3M' => 'Drie maanden (kwartaal)', + 'pref_6M' => 'Zes maanden', + 'pref_1Y' => 'Eén jaar', + 'pref_last365' => 'Afgelopen jaar', + 'pref_last90' => 'Afgelopen 90 dagen', + 'pref_last30' => 'Afgelopen 30 dagen', + 'pref_last7' => 'Afgelopen 7 dagen', + 'pref_YTD' => 'Jaar tot nu', + 'pref_QTD' => 'Kwartaal tot nu', + 'pref_MTD' => 'Maand tot nu', + 'pref_languages' => 'Talen', + 'pref_locale' => 'Lokale instellingen', + 'pref_languages_help' => 'Firefly III ondersteunt meerdere talen. Welke heeft jouw voorkeur?', + 'pref_locale_help' => 'Firefly III kan andere lokale instellingen gebruiken, die bepalen hoe valuta, nummers en datums worden weergegeven. De lijst hieronder is compleet maar niet alles wordt ondersteund door jouw systeem. Het kan zijn dat Firefly III bepaalde lokale instellingen niet lekker weergeeft; neem dan contact met me op.', + 'pref_locale_no_demo' => 'Deze functie werkt niet voor de demo-gebruiker.', + 'pref_custom_fiscal_year' => 'Instellingen voor boekjaar', + 'pref_custom_fiscal_year_label' => 'Ingeschakeld', + 'pref_custom_fiscal_year_help' => 'Voor in landen die een boekjaar gebruiken anders dan 1 januari tot 31 december', + 'pref_fiscal_year_start_label' => 'Start van boekjaar', + 'pref_two_factor_auth' => 'Authenticatie in twee stappen', + 'pref_two_factor_auth_help' => 'Als je authenticatie in twee stappen (ook wel twee-factor authenticatie genoemd) inschakelt voeg je een extra beveiligingslaag toe aan je account. Je logt in met iets dat je weet (je wachtwoord) en iets dat je hebt (een verificatiecode). Verificatiecodes worden gegenereerd door apps op je telefoon, zoals Authy en Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Authenticatie in twee stappen inschakelen', + 'pref_two_factor_auth_disabled' => 'Je verificatiecode voor authenticatie in twee stappen is verwijderd, en uitgeschakeld', + 'pref_two_factor_auth_remove_it' => 'Vergeet niet om je Firefly III account uit je authenticatie appje te verwijderen!', + 'pref_two_factor_auth_code' => 'Bevestig de code', + 'pref_two_factor_auth_code_help' => 'Scan deze QR code met een app op je telefoon (zoals Authy of Google Authenticator). Vul de code die je terug krijgt hier in.', + 'pref_two_factor_auth_reset_code' => 'Reset de verificatiecode', + 'pref_two_factor_auth_disable_2fa' => '2FA uitzetten', + '2fa_use_secret_instead' => 'Als je de QR code niet kan scannen gebruik dan de geheime code: :secret.', + '2fa_backup_codes' => 'Sla deze backupcodes op zodat je toegang houdt als je je apparaat verliest.', + '2fa_already_enabled' => 'Tweestapsverificatie is al ingeschakeld.', + 'wrong_mfa_code' => 'Deze code is niet geldig.', + 'pref_save_settings' => 'Instellingen opslaan', + 'saved_preferences' => 'Voorkeuren opgeslagen!', + 'preferences_general' => 'Algemeen', + 'preferences_frontpage' => 'Homepagina', + 'preferences_security' => 'Veiligheid', + 'preferences_layout' => 'Uiterlijk', + 'preferences_notifications' => 'Meldingen', + 'pref_home_show_deposits' => 'Laat inkomsten zien op de homepagina', + 'pref_home_show_deposits_info' => 'De homepagina laat al crediteuren zien. Wil je ook je debiteuren zien?', + 'pref_home_do_show_deposits' => 'Ja, kom maar op', + 'successful_count' => 'waarvan :count met succes', + 'list_page_size_title' => 'Paginalengte', + 'list_page_size_help' => 'Per lijst met dingen (accounts, transacties, enz.) zie je hooguit zoveel items.', + 'list_page_size_label' => 'Paginalengte', + 'between_dates' => '(:start en :end)', + 'pref_optional_fields_transaction' => 'Optionele velden voor transacties', + 'pref_optional_fields_transaction_help' => 'Standaard staan niet alle velden aan (vanwege het overzicht). Hier kan je zulke extra velden alsnog aanzetten, als je denkt dat ze handig zijn. Als je een veld uitzet, maar deze heeft wel degelijk een waarde, dan is-ie altijd zichtbaar, wat je ook doet.', + 'optional_tj_date_fields' => 'Datumvelden', + 'optional_tj_other_fields' => 'Overige velden', + 'optional_tj_attachment_fields' => 'Bijlagen', + 'pref_optional_tj_interest_date' => 'Rentedatum', + 'pref_optional_tj_book_date' => 'Boekdatum', + 'pref_optional_tj_process_date' => 'Verwerkingsdatum', + 'pref_optional_tj_due_date' => 'Vervaldatum', + 'pref_optional_tj_payment_date' => 'Betalingsdatum', + 'pref_optional_tj_invoice_date' => 'Factuurdatum', + 'pref_optional_tj_internal_reference' => 'Interne referentie', + 'pref_optional_tj_notes' => 'Notities', + 'pref_optional_tj_attachments' => 'Bijlagen', + 'pref_optional_tj_external_url' => 'Externe URL', + 'pref_optional_tj_location' => 'Locatie', + 'pref_optional_tj_links' => 'Transactiekoppelingen', + 'optional_field_meta_dates' => 'Data', + 'optional_field_meta_business' => 'Zakelijk', + 'optional_field_attachments' => 'Bijlagen', + 'optional_field_meta_data' => 'Optionele meta-gegevens', + 'external_url' => 'Externe URL', + 'pref_notification_bill_reminder' => 'Herinnering over het verlopen van contracten', + 'pref_notification_new_access_token' => 'Melding wanneer een nieuwe API-toegangstoken wordt aangemaakt', + 'pref_notification_transaction_creation' => 'Melding wanneer een transactie automatisch wordt aangemaakt', + 'pref_notification_user_login' => 'Melding wanneer je inlogt vanaf een nieuwe locatie', + 'pref_notification_rule_action_failures' => 'Waarschuwen wanneer regelacties niet utgevoerd kunnen worden (alleen via Slack of Discord)', + 'pref_notifications' => 'Meldingen', + 'pref_notifications_help' => 'Geef aan of dit meldingen zijn die je zou willen krijgen. Sommige meldingen kunnen gevoelige financiële informatie bevatten.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'Als je wilt dat Firefly III je informeert met Slack, vul dan hier de webhook URL in. Laat anders het veld leeg. Als je een beheerder bent, moet je deze URL ook in de administratie invullen.', + 'slack_url_label' => 'Slack "binnenkomende webhook" URL', // Financial administrations - 'administration_index' => 'Financiële administratie', - 'administrations_index_menu' => 'Financiële administratie(s)', + 'administration_index' => 'Financiële administratie', + 'administrations_index_menu' => 'Financiële administratie(s)', // profile: - 'purge_data_title' => 'Gegevens wissen uit Firefly III', - 'purge_data_expl' => '"Wissen" betekent "verwijderen wat al is verwijderd". In normale omstandigheden verwijdert Firefly III niets definitief. Het verbergt het. De knop hieronder verwijdert al deze eerder "verwijderd" items VOOR ALTIJD.', - 'delete_stuff_header' => 'Gegevens verwijderen en wissen', - 'purge_all_data' => 'Wis alle verwijderde items', - 'purge_data' => 'Gegevens wissen', - 'purged_all_records' => 'Alle verwijderde records zijn gewist.', - 'delete_data_title' => 'Gegevens verwijderen uit Firefly III', - 'permanent_delete_stuff' => 'Je kan dingen verwijderen uit Firefly III. Met de knoppen hieronder kan je de genoemde items verwijderen en verbergen. Dit kan je niet ongedaan maken, tenzij je in de database gaat grutten naar de originele data.', - 'other_sessions_logged_out' => 'Al je andere sessies zijn uitgelogd.', - 'delete_unused_accounts' => 'Als je ongebruikte accounts verwijdert, worden ze ook uit je autocomplete-lijsten gewist.', - 'delete_all_unused_accounts' => 'Ongebruikte accounts verwijderen', - 'deleted_all_unused_accounts' => 'Alle ongebruikte accounts zijn verwijderd', - 'delete_all_budgets' => 'Verwijder ALLE budgetten', - 'delete_all_categories' => 'Verwijder ALLE categorieën', - 'delete_all_tags' => 'Verwijder ALLE tags', - 'delete_all_bills' => 'Verwijder AL je contracten', - 'delete_all_piggy_banks' => 'Verwijder AL je spaarpotjes', - 'delete_all_rules' => 'Verwijder AL je regels', - 'delete_all_recurring' => 'Verwijder AL je periodieke transacties', - 'delete_all_object_groups' => 'Verwijder AL je objectgroepen', - 'delete_all_accounts' => 'Verwijder AL je rekeningen', - 'delete_all_asset_accounts' => 'Verwijder AL je betaalrekeningen', - 'delete_all_expense_accounts' => 'Verwijder AL je crediteuren', - 'delete_all_revenue_accounts' => 'Verwijder AL je debiteuren', - 'delete_all_liabilities' => 'Verwijder AL je passiva', - 'delete_all_transactions' => 'Verwijder AL je transacties', - 'delete_all_withdrawals' => 'Verwijder AL je uitgaven', - 'delete_all_deposits' => 'Verwijder AL je inkomsten', - 'delete_all_transfers' => 'Verwijder AL je overschrijvingen', - 'also_delete_transactions' => 'Het verwijderen van rekeningen betekent dat ALLE bijbehorende transacties OOK worden verwijderd!', - 'deleted_all_budgets' => 'Alle budgets zijn verwijderd', - 'deleted_all_categories' => 'Alle categorieën zijn verwijderd', - 'deleted_all_tags' => 'Alle tags zijn verwijderd', - 'deleted_all_bills' => 'Al je contracten zijn verwijderd', - 'deleted_all_piggy_banks' => 'Al je spaarpotjes zijn verwijderd', - 'deleted_all_rules' => 'Al je regels en regelgroepen zijn verwijderd', - 'deleted_all_object_groups' => 'Al je groepen zijn verwijderd', - 'deleted_all_accounts' => 'Al je rekeningen zijn verwijderd', - 'deleted_all_asset_accounts' => 'Al je betaalrekeningen zijn verwijderd', - 'deleted_all_expense_accounts' => 'Al je crediteuren zijn verwijderd', - 'deleted_all_revenue_accounts' => 'Al je debiteuren zijn verwijderd', - 'deleted_all_liabilities' => 'Al je passiva zijn verwijderd', - 'deleted_all_transactions' => 'Al je transacties zijn verwijderd', - 'deleted_all_withdrawals' => 'Al je uitgaven zijn verwijderd', - 'deleted_all_deposits' => 'Al je inkomsten zijn verwijderd', - 'deleted_all_transfers' => 'Al je overschrijvingen zijn verwijderd', - 'deleted_all_recurring' => 'Al je periodiek transacties zijn verwijderd', - 'change_your_password' => 'Verander je wachtwoord', - 'delete_account' => 'Verwijder je account', - 'current_password' => 'Huidige wachtwoord', - 'new_password' => 'Nieuw wachtwoord', - 'new_password_again' => 'Nieuw wachtwoord (bevestiging)', - 'delete_your_account' => 'Verwijder je account', - 'delete_your_account_help' => 'Als je je account verwijdert worden ook al je rekeningen, transacties en alle andere zaken verwijderd. Alles is dan WEG.', - 'delete_your_account_password' => 'Voer je wachtwoord in om door te gaan.', - 'password' => 'Wachtwoord', - 'are_you_sure' => 'Zeker weten? Je kan niet meer terug!', - 'delete_account_button' => 'VERWIJDER je account', - 'invalid_current_password' => 'Huidige wachtwoord is niet geldig!', - 'password_changed' => 'Je wachtwoord is veranderd!', - 'should_change' => 'Vul ook echt een ander wachtwoord in.', - 'invalid_password' => 'Ongeldig wachtwoord!', - 'what_is_pw_security' => 'Wat is "Bevestig wachtwoordsterkte"?', - 'secure_pw_title' => 'Hoe kies je een veilig wachtwoord', - 'forgot_password_response' => 'Bedankt. Als er een account bestaat met dit e-mailadres, vind je de instructies in je inbox.', - 'secure_pw_history' => 'Elke week lees je wel hoe sites de wachtwoorden van hun gebruikers verliezen. Hackers en dieven gebruiken deze wachtwoorden om te kijken of ze je persoonsgegevens kunnen buitmaken. Deze gegevens zijn geld waard.', - 'secure_pw_ff' => 'Gebruik je overal hetzelfde wachtwoord? Als één site je wachtwoord kwijt raakt hebben hackers toegang tot al je data. Firefly III rekent er op dat je een sterk en uniek wachtwoord kiest om je financiële gegevens te beschermen.', - 'secure_pw_check_box' => 'Om je daarbij te helpen kan Firefly III checken of het wachtwoord dat je wilt gebruiken is gestolen in het verleden. Als dat zo is, raadt Firefly III je aan om dat wachtwoord NIET te gebruiken.', - 'secure_pw_working_title' => 'Hoe werkt het?', - 'secure_pw_working' => 'Als je het vinkje aanvinkt stuurt Firefly III de eerste vijf karakters van de SHA1-hash van je wachtwoord naar de website van Troy Hunt om te zien of-ie op de lijst staat. Dit voorkomt dat je een onveilig wachtwoord gebruikt, zoals is voorgeschreven in een speciale publicatie van het NIST over dit onderwerp.', - 'secure_pw_should' => 'Vinkje zetten of niet?', - 'secure_pw_long_password' => 'Ja. Controleer altijd of je wachtwoord is veilig.', - 'command_line_token' => 'Opdrachtprompt-token', - 'explain_command_line_token' => 'Je hebt dit token nodig als je commando\'s op de commandline draait, zoals het exporteren van data. Zonder dit token werkt die gevoelige opdracht niet. Deel je opdrachtprompt-token niet. Niemand zal hier naar vragen, zelfs ik niet. Als je bang bent dat-ie op straat ligt, genereer dan een nieuw token.', - 'regenerate_command_line_token' => 'Nieuw opdrachtprompt-token genereren', - 'token_regenerated' => 'Er is een nieuw opdrachtprompt-token gegenereerd', - 'change_your_email' => 'Verander je emailadres', - 'email_verification' => 'Het systeem verstuurt een mailtje naar je oude EN nieuwe emailadres. Uit veiligheidsoverwegingen ben je zometeen uitgelogd en kan je pas weer inloggen als je je emailadres hebt bevestigd. Doe dit niet als je niet zeker weet of je Firefly III installatie wel mail kan versturen. Als je een admin bent, test dit dan eerst in de administratie.', - 'email_changed_logout' => 'Je kan niet inloggen tot je je emailadres bevestigd.', - 'login_with_new_email' => 'Je kan nu inloggen met je nieuwe emailadres.', - 'login_with_old_email' => 'Je kan nu weer inloggen met je oude emailadres.', - 'login_provider_local_only' => 'Je kan dit niet doen als je inlogt via ":login_provider".', - 'external_user_mgt_disabled' => 'Deze actie is niet beschikbaar wanneer Firefly III niet verantwoordelijk is voor gebruikersbeheer of authenticatie.', - 'external_auth_disabled' => 'Deze actie is niet beschikbaar wanneer Firefly III niet verantwoordelijk is voor authenticatie.', - 'delete_local_info_only' => "Omdat Firefly III niet verantwoordelijk is voor gebruikersbeheer of authenticatie zal deze functie alleen de lokale Firefly III informatie verwijderen.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Clients', - 'profile_oauth_no_clients' => 'Je hebt nog geen OAuth-clients aangemaakt.', - 'profile_oauth_clients_external_auth' => 'Als je een externe verificatieprovider zoals Authelia gebruikt, dan zullen OAuth Clients niet werken. Je kan alleen persoonlijke toegangstokens gebruiken.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Client ID', - 'profile_oauth_client_name' => 'Naam', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Nieuwe client aanmaken', - 'profile_oauth_create_client' => 'Client aanmaken', - 'profile_oauth_edit_client' => 'Client bewerken', - 'profile_oauth_name_help' => 'Iets dat je gebruikers herkennen en vertrouwen.', - 'profile_oauth_redirect_url' => 'Redirect-URL', - 'profile_oauth_redirect_url_help' => 'De authorisatie-callback-url van jouw applicatie.', - 'profile_authorized_apps' => 'Geautoriseerde toepassingen', - 'profile_authorized_clients' => 'Geautoriseerde clients', - 'profile_scopes' => 'Scopes', - 'profile_revoke' => 'Intrekken', - 'profile_oauth_client_secret_title' => 'Client secret', - 'profile_oauth_client_secret_expl' => 'Hier is je nieuwe client secret. Dit is de enige keer dat deze getoond wordt dus verlies deze niet! Je kan dit secret gebruiken om API-aanvragen te maken.', - 'profile_personal_access_tokens' => 'Persoonlijke toegangstokens', - 'profile_personal_access_token' => 'Persoonlijk toegangstoken', - 'profile_oauth_confidential' => 'Vertrouwelijk', - 'profile_oauth_confidential_help' => 'Dit vinkje is bedoeld voor applicaties die geheimen kunnen bewaren. Applicaties zoals sommige desktop-apps en Javascript apps kunnen dit niet. In zo\'n geval haal je het vinkje weg.', - 'profile_personal_access_token_explanation' => 'Hier is je nieuwe persoonlijke toegangstoken. Dit is de enige keer dat deze getoond wordt dus verlies deze niet! Je kan deze toegangstoken gebruiken om API-aanvragen te maken.', - 'profile_no_personal_access_token' => 'Je hebt nog geen persoonlijke toegangstokens aangemaakt.', - 'profile_create_new_token' => 'Nieuwe token aanmaken', - 'profile_create_token' => 'Token aanmaken', - 'profile_create' => 'Creër', - 'profile_save_changes' => 'Aanpassingen opslaan', - 'profile_whoops' => 'Oeps!', - 'profile_something_wrong' => 'Er is iets mis gegaan!', - 'profile_try_again' => 'Er is iets misgegaan. Probeer het nogmaals.', - 'amounts' => 'Bedragen', - 'multi_account_warning_unknown' => 'Afhankelijk van het type transactie wordt de bron- en/of doelrekening overschreven door wat er in de eerste split staat.', - 'multi_account_warning_withdrawal' => 'De bronrekening wordt overschreven door wat er in de eerste split staat.', - 'multi_account_warning_deposit' => 'De doelrekening wordt overschreven door wat er in de eerste split staat.', - 'multi_account_warning_transfer' => 'De bron + doelrekening wordt overschreven door wat er in de eerste split staat.', + 'purge_data_title' => 'Gegevens wissen uit Firefly III', + 'purge_data_expl' => '"Wissen" betekent "verwijderen wat al is verwijderd". In normale omstandigheden verwijdert Firefly III niets definitief. Het verbergt het. De knop hieronder verwijdert al deze eerder "verwijderd" items VOOR ALTIJD.', + 'delete_stuff_header' => 'Gegevens verwijderen en wissen', + 'purge_all_data' => 'Wis alle verwijderde items', + 'purge_data' => 'Gegevens wissen', + 'purged_all_records' => 'Alle verwijderde records zijn gewist.', + 'delete_data_title' => 'Gegevens verwijderen uit Firefly III', + 'permanent_delete_stuff' => 'Je kan dingen verwijderen uit Firefly III. Met de knoppen hieronder kan je de genoemde items verwijderen en verbergen. Dit kan je niet ongedaan maken, tenzij je in de database gaat grutten naar de originele data.', + 'other_sessions_logged_out' => 'Al je andere sessies zijn uitgelogd.', + 'delete_unused_accounts' => 'Als je ongebruikte accounts verwijdert, worden ze ook uit je autocomplete-lijsten gewist.', + 'delete_all_unused_accounts' => 'Ongebruikte accounts verwijderen', + 'deleted_all_unused_accounts' => 'Alle ongebruikte accounts zijn verwijderd', + 'delete_all_budgets' => 'Verwijder ALLE budgetten', + 'delete_all_categories' => 'Verwijder ALLE categorieën', + 'delete_all_tags' => 'Verwijder ALLE tags', + 'delete_all_bills' => 'Verwijder AL je contracten', + 'delete_all_piggy_banks' => 'Verwijder AL je spaarpotjes', + 'delete_all_rules' => 'Verwijder AL je regels', + 'delete_all_recurring' => 'Verwijder AL je periodieke transacties', + 'delete_all_object_groups' => 'Verwijder AL je objectgroepen', + 'delete_all_accounts' => 'Verwijder AL je rekeningen', + 'delete_all_asset_accounts' => 'Verwijder AL je betaalrekeningen', + 'delete_all_expense_accounts' => 'Verwijder AL je crediteuren', + 'delete_all_revenue_accounts' => 'Verwijder AL je debiteuren', + 'delete_all_liabilities' => 'Verwijder AL je passiva', + 'delete_all_transactions' => 'Verwijder AL je transacties', + 'delete_all_withdrawals' => 'Verwijder AL je uitgaven', + 'delete_all_deposits' => 'Verwijder AL je inkomsten', + 'delete_all_transfers' => 'Verwijder AL je overschrijvingen', + 'also_delete_transactions' => 'Het verwijderen van rekeningen betekent dat ALLE bijbehorende transacties OOK worden verwijderd!', + 'deleted_all_budgets' => 'Alle budgets zijn verwijderd', + 'deleted_all_categories' => 'Alle categorieën zijn verwijderd', + 'deleted_all_tags' => 'Alle tags zijn verwijderd', + 'deleted_all_bills' => 'Al je contracten zijn verwijderd', + 'deleted_all_piggy_banks' => 'Al je spaarpotjes zijn verwijderd', + 'deleted_all_rules' => 'Al je regels en regelgroepen zijn verwijderd', + 'deleted_all_object_groups' => 'Al je groepen zijn verwijderd', + 'deleted_all_accounts' => 'Al je rekeningen zijn verwijderd', + 'deleted_all_asset_accounts' => 'Al je betaalrekeningen zijn verwijderd', + 'deleted_all_expense_accounts' => 'Al je crediteuren zijn verwijderd', + 'deleted_all_revenue_accounts' => 'Al je debiteuren zijn verwijderd', + 'deleted_all_liabilities' => 'Al je passiva zijn verwijderd', + 'deleted_all_transactions' => 'Al je transacties zijn verwijderd', + 'deleted_all_withdrawals' => 'Al je uitgaven zijn verwijderd', + 'deleted_all_deposits' => 'Al je inkomsten zijn verwijderd', + 'deleted_all_transfers' => 'Al je overschrijvingen zijn verwijderd', + 'deleted_all_recurring' => 'Al je periodiek transacties zijn verwijderd', + 'change_your_password' => 'Verander je wachtwoord', + 'delete_account' => 'Verwijder je account', + 'current_password' => 'Huidige wachtwoord', + 'new_password' => 'Nieuw wachtwoord', + 'new_password_again' => 'Nieuw wachtwoord (bevestiging)', + 'delete_your_account' => 'Verwijder je account', + 'delete_your_account_help' => 'Als je je account verwijdert worden ook al je rekeningen, transacties en alle andere zaken verwijderd. Alles is dan WEG.', + 'delete_your_account_password' => 'Voer je wachtwoord in om door te gaan.', + 'password' => 'Wachtwoord', + 'are_you_sure' => 'Zeker weten? Je kan niet meer terug!', + 'delete_account_button' => 'VERWIJDER je account', + 'invalid_current_password' => 'Huidige wachtwoord is niet geldig!', + 'password_changed' => 'Je wachtwoord is veranderd!', + 'should_change' => 'Vul ook echt een ander wachtwoord in.', + 'invalid_password' => 'Ongeldig wachtwoord!', + 'what_is_pw_security' => 'Wat is "Bevestig wachtwoordsterkte"?', + 'secure_pw_title' => 'Hoe kies je een veilig wachtwoord', + 'forgot_password_response' => 'Bedankt. Als er een account bestaat met dit e-mailadres, vind je de instructies in je inbox.', + 'secure_pw_history' => 'Elke week lees je wel hoe sites de wachtwoorden van hun gebruikers verliezen. Hackers en dieven gebruiken deze wachtwoorden om te kijken of ze je persoonsgegevens kunnen buitmaken. Deze gegevens zijn geld waard.', + 'secure_pw_ff' => 'Gebruik je overal hetzelfde wachtwoord? Als één site je wachtwoord kwijt raakt hebben hackers toegang tot al je data. Firefly III rekent er op dat je een sterk en uniek wachtwoord kiest om je financiële gegevens te beschermen.', + 'secure_pw_check_box' => 'Om je daarbij te helpen kan Firefly III checken of het wachtwoord dat je wilt gebruiken is gestolen in het verleden. Als dat zo is, raadt Firefly III je aan om dat wachtwoord NIET te gebruiken.', + 'secure_pw_working_title' => 'Hoe werkt het?', + 'secure_pw_working' => 'Als je het vinkje aanvinkt stuurt Firefly III de eerste vijf karakters van de SHA1-hash van je wachtwoord naar de website van Troy Hunt om te zien of-ie op de lijst staat. Dit voorkomt dat je een onveilig wachtwoord gebruikt, zoals is voorgeschreven in een speciale publicatie van het NIST over dit onderwerp.', + 'secure_pw_should' => 'Vinkje zetten of niet?', + 'secure_pw_long_password' => 'Ja. Controleer altijd of je wachtwoord is veilig.', + 'command_line_token' => 'Opdrachtprompt-token', + 'explain_command_line_token' => 'Je hebt dit token nodig als je commando\'s op de commandline draait, zoals het exporteren van data. Zonder dit token werkt die gevoelige opdracht niet. Deel je opdrachtprompt-token niet. Niemand zal hier naar vragen, zelfs ik niet. Als je bang bent dat-ie op straat ligt, genereer dan een nieuw token.', + 'regenerate_command_line_token' => 'Nieuw opdrachtprompt-token genereren', + 'token_regenerated' => 'Er is een nieuw opdrachtprompt-token gegenereerd', + 'change_your_email' => 'Verander je emailadres', + 'email_verification' => 'Het systeem verstuurt een mailtje naar je oude EN nieuwe emailadres. Uit veiligheidsoverwegingen ben je zometeen uitgelogd en kan je pas weer inloggen als je je emailadres hebt bevestigd. Doe dit niet als je niet zeker weet of je Firefly III installatie wel mail kan versturen. Als je een admin bent, test dit dan eerst in de administratie.', + 'email_changed_logout' => 'Je kan niet inloggen tot je je emailadres bevestigd.', + 'login_with_new_email' => 'Je kan nu inloggen met je nieuwe emailadres.', + 'login_with_old_email' => 'Je kan nu weer inloggen met je oude emailadres.', + 'login_provider_local_only' => 'Je kan dit niet doen als je inlogt via ":login_provider".', + 'external_user_mgt_disabled' => 'Deze actie is niet beschikbaar wanneer Firefly III niet verantwoordelijk is voor gebruikersbeheer of authenticatie.', + 'external_auth_disabled' => 'Deze actie is niet beschikbaar wanneer Firefly III niet verantwoordelijk is voor authenticatie.', + 'delete_local_info_only' => 'Omdat Firefly III niet verantwoordelijk is voor gebruikersbeheer of authenticatie zal deze functie alleen de lokale Firefly III informatie verwijderen.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Clients', + 'profile_oauth_no_clients' => 'Je hebt nog geen OAuth-clients aangemaakt.', + 'profile_oauth_clients_external_auth' => 'Als je een externe verificatieprovider zoals Authelia gebruikt, dan zullen OAuth Clients niet werken. Je kan alleen persoonlijke toegangstokens gebruiken.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'Client ID', + 'profile_oauth_client_name' => 'Naam', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Nieuwe client aanmaken', + 'profile_oauth_create_client' => 'Client aanmaken', + 'profile_oauth_edit_client' => 'Client bewerken', + 'profile_oauth_name_help' => 'Iets dat je gebruikers herkennen en vertrouwen.', + 'profile_oauth_redirect_url' => 'Redirect-URL', + 'profile_oauth_redirect_url_help' => 'De authorisatie-callback-url van jouw applicatie.', + 'profile_authorized_apps' => 'Geautoriseerde toepassingen', + 'profile_authorized_clients' => 'Geautoriseerde clients', + 'profile_scopes' => 'Scopes', + 'profile_revoke' => 'Intrekken', + 'profile_oauth_client_secret_title' => 'Client secret', + 'profile_oauth_client_secret_expl' => 'Hier is je nieuwe client secret. Dit is de enige keer dat deze getoond wordt dus verlies deze niet! Je kan dit secret gebruiken om API-aanvragen te maken.', + 'profile_personal_access_tokens' => 'Persoonlijke toegangstokens', + 'profile_personal_access_token' => 'Persoonlijk toegangstoken', + 'profile_oauth_confidential' => 'Vertrouwelijk', + 'profile_oauth_confidential_help' => 'Dit vinkje is bedoeld voor applicaties die geheimen kunnen bewaren. Applicaties zoals sommige desktop-apps en Javascript apps kunnen dit niet. In zo\'n geval haal je het vinkje weg.', + 'profile_personal_access_token_explanation' => 'Hier is je nieuwe persoonlijke toegangstoken. Dit is de enige keer dat deze getoond wordt dus verlies deze niet! Je kan deze toegangstoken gebruiken om API-aanvragen te maken.', + 'profile_no_personal_access_token' => 'Je hebt nog geen persoonlijke toegangstokens aangemaakt.', + 'profile_create_new_token' => 'Nieuwe token aanmaken', + 'profile_create_token' => 'Token aanmaken', + 'profile_create' => 'Creër', + 'profile_save_changes' => 'Aanpassingen opslaan', + 'profile_whoops' => 'Oeps!', + 'profile_something_wrong' => 'Er is iets mis gegaan!', + 'profile_try_again' => 'Er is iets misgegaan. Probeer het nogmaals.', + 'amounts' => 'Bedragen', + 'multi_account_warning_unknown' => 'Afhankelijk van het type transactie wordt de bron- en/of doelrekening overschreven door wat er in de eerste split staat.', + 'multi_account_warning_withdrawal' => 'De bronrekening wordt overschreven door wat er in de eerste split staat.', + 'multi_account_warning_deposit' => 'De doelrekening wordt overschreven door wat er in de eerste split staat.', + 'multi_account_warning_transfer' => 'De bron + doelrekening wordt overschreven door wat er in de eerste split staat.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Gegevens exporteren uit Firefly III', - 'export_data_menu' => 'Exporteren', - 'export_data_bc' => 'Gegevens exporteren uit Firefly III', - 'export_data_main_title' => 'Gegevens exporteren uit Firefly III', - 'export_data_expl' => 'Met deze link kan je alle transacties + metadata uit Firefly III exporteren. Raadpleeg de help ((?)-pictogram) voor meer informatie over het proces.', - 'export_data_all_transactions' => 'Exporteer alle transacties', - 'export_data_advanced_expl' => 'Als je een meer geavanceerde opties nodig hebt of specifieke data wilt exporteren, lees dan de hulp over het gebruik van het console commando php artisan help firefly-iii:export -data.', + 'export_data_title' => 'Gegevens exporteren uit Firefly III', + 'export_data_menu' => 'Exporteren', + 'export_data_bc' => 'Gegevens exporteren uit Firefly III', + 'export_data_main_title' => 'Gegevens exporteren uit Firefly III', + 'export_data_expl' => 'Met deze link kan je alle transacties + metadata uit Firefly III exporteren. Raadpleeg de help ((?)-pictogram) voor meer informatie over het proces.', + 'export_data_all_transactions' => 'Exporteer alle transacties', + 'export_data_advanced_expl' => 'Als je een meer geavanceerde opties nodig hebt of specifieke data wilt exporteren, lees dan de hulp over het gebruik van het console commando php artisan help firefly-iii:export -data.', // attachments - 'nr_of_attachments' => 'Eén bijlage|:count bijlagen', - 'attachments' => 'Bijlagen', - 'edit_attachment' => 'Wijzig bijlage ":name"', - 'update_attachment' => 'Update bijlage', - 'delete_attachment' => 'Verwijder bijlage ":name"', - 'attachment_deleted' => 'Bijlage ":name" verwijderd', - 'liabilities_deleted' => 'Passiva ":name" verwijderd', - 'attachment_updated' => 'Attachment ":name" geüpdatet', - 'upload_max_file_size' => 'Maximale grootte: :size', - 'list_all_attachments' => 'Lijst van alle bijlagen', + 'nr_of_attachments' => 'Eén bijlage|:count bijlagen', + 'attachments' => 'Bijlagen', + 'edit_attachment' => 'Wijzig bijlage ":name"', + 'update_attachment' => 'Update bijlage', + 'delete_attachment' => 'Verwijder bijlage ":name"', + 'attachment_deleted' => 'Bijlage ":name" verwijderd', + 'liabilities_deleted' => 'Passiva ":name" verwijderd', + 'attachment_updated' => 'Attachment ":name" geüpdatet', + 'upload_max_file_size' => 'Maximale grootte: :size', + 'list_all_attachments' => 'Lijst van alle bijlagen', // transaction index - 'title_expenses' => 'Uitgaven', - 'title_withdrawal' => 'Uitgaven', - 'title_revenue' => 'Inkomsten', - 'title_deposit' => 'Inkomsten', - 'title_transfer' => 'Overschrijvingen', - 'title_transfers' => 'Overschrijvingen', - 'submission_options' => 'Inzending opties', - 'apply_rules_checkbox' => 'Regels toepassen', - 'fire_webhooks_checkbox' => 'Webhooks starten', + 'is_reconciled_fields_dropped' => 'Omdat deze transactie al is afgestemd, kan je het bedrag noch de rekeningen wijzigen.', + 'title_expenses' => 'Uitgaven', + 'title_withdrawal' => 'Uitgaven', + 'title_revenue' => 'Inkomsten', + 'title_deposit' => 'Inkomsten', + 'title_transfer' => 'Overschrijvingen', + 'title_transfers' => 'Overschrijvingen', + 'submission_options' => 'Inzending opties', + 'apply_rules_checkbox' => 'Regels toepassen', + 'fire_webhooks_checkbox' => 'Webhooks starten', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Deze transactie is al een uitgave', - 'convert_is_already_type_Deposit' => 'Deze transactie is al inkomsten', - 'convert_is_already_type_Transfer' => 'Deze transactie is al een overschrijving', - 'convert_to_Withdrawal' => 'Verander ":description" in een uitgave', - 'convert_to_Deposit' => 'Verander ":description" in inkomsten', - 'convert_to_Transfer' => 'Verander ":description" in een overschrijving', - 'convert_options_WithdrawalDeposit' => 'Verander een uitgave in inkomsten', - 'convert_options_WithdrawalTransfer' => 'Verander een uitgave in een overschrijving', - 'convert_options_DepositTransfer' => 'Verander inkomsten in een overschrijving', - 'convert_options_DepositWithdrawal' => 'Verander inkomsten in een uitgave', - 'convert_options_TransferWithdrawal' => 'Verander een overschrijving in een uitgave', - 'convert_options_TransferDeposit' => 'Verander een overschrijving in inkomsten', - 'convert_Withdrawal_to_deposit' => 'Verander deze uitgave in inkomsten', - 'convert_Withdrawal_to_transfer' => 'Verander deze uitgave in een overschrijving', - 'convert_Deposit_to_withdrawal' => 'Verander deze inkomsten in een uitgave', - 'convert_Deposit_to_transfer' => 'Verander deze inkomsten in een overschrijving', - 'convert_Transfer_to_deposit' => 'Verander deze overschrijving in inkomsten', - 'convert_Transfer_to_withdrawal' => 'Verander deze overschrijving in een uitgave', - 'convert_please_set_revenue_source' => 'Kies de debiteur waar het geld vandaan gaat komen.', - 'convert_please_set_asset_destination' => 'Kies de betaalrekening waar het geld heen zal gaan.', - 'convert_please_set_expense_destination' => 'Kies de crediteur waar het geld heen zal gaan.', - 'convert_please_set_asset_source' => 'Kies de betaalrekening waar het geld vandaan zal komen.', - 'convert_expl_w_d' => 'Als je de transactie converteert van een uitgave naar inkomsten, wordt het geld gestort in de weergegeven doelrekening, in plaats van dat het er uit gehaald wordt. Kies de nieuwe bronrekening om de conversie af te maken.|Als je de transactie converteert van een uitgave naar inkomsten, wordt het geld gestort in de weergegeven doelrekeningen, in plaats van dat het er uit gehaald wordt.', - 'convert_expl_w_t' => 'Als je een uitgave in een overboeking converteert, wordt het geld overgemaakt van de bronrekening naar een andere betaalrekening of passiva in plaats van dat je het uitgeeft.|Als je een uitgave in een overboeking converteert, wordt het geld overgemaakt van de bronrekeningen naar een andere betaalrekening of passiva in plaats van dat je het uitgeeft.', - 'convert_expl_d_w' => 'Als je inkomsten converteert naar een uitgave wordt het geld uitgegeven vanaf de aangegeven bronrekening in plaats van dat het daar wordt gestort.|Als je inkomsten converteert naar een uitgave wordt het geld uitgegeven vanaf de aangegeven bronrekeningen in plaats van dat het daar wordt gestort.', - 'convert_expl_d_t' => 'Als je inkomsten converteert naar een overboeking wordt het geld gestort op de hier genoemde doelrekening vanaf een van je betaalrekeningen of passiva.|Als je inkomsten converteert naar een overboeking wordt het geld gestort op de hier genoemde doelrekeningen vanaf een van je betaalrekeningen of passiva.', - 'convert_expl_t_w' => 'Als je converteert van een overboeking naar een afschrijving wordt het geld uitgegeven bij de hier genoemde doelrekening in plaats van dat het wordt afgeschreven van de originele bronrekening.|Als je converteert van een overboeking naar een afschrijving wordt het geld uitgegeven bij de hier genoemde doelrekeningen in plaats van dat het wordt afgeschreven van de originele bronrekeningen.', - 'convert_expl_t_d' => 'Als je een overboeking converteert naar inkomsten wordt het geld gestort op de doelrekening die je hier ziet, in plaats van dat het als inkomsten binnenkomt. Kies de nieuwe bronrekening om de conversie af te maken.|Als je een overboeking converteert naar inkomsten wordt het geld gestort op de doelrekeningen die je hier ziet, in plaats van dat het als inkomsten binnenkomt.', - 'convert_select_sources' => 'Kies de nieuwe bronrekening om de conversie af te maken.|Kies de nieuwe bronrekeningen om de conversie af te maken.', - 'convert_select_destinations' => 'Kies de nieuwe doelrekening om de conversie af te maken.|Kies de nieuwe doelrekeningen om de conversie af te maken.', - 'converted_to_Withdrawal' => 'De transactie is veranderd in een uitgave', - 'converted_to_Deposit' => 'De transactie is veranderd in inkomsten', - 'converted_to_Transfer' => 'De transactie is veranderd in een overschrijving', - 'invalid_convert_selection' => 'De rekening die je hebt geselecteerd wordt al gebruikt in deze transactie, of bestaat niet.', - 'source_or_dest_invalid' => 'Kan de juiste transactiegegevens niet vinden. Conversie is niet mogelijk.', - 'convert_to_withdrawal' => 'Converteren naar een uitgave', - 'convert_to_deposit' => 'Converteer naar inkomsten', - 'convert_to_transfer' => 'Converteren naar een overschrijving', + 'convert_is_already_type_Withdrawal' => 'Deze transactie is al een uitgave', + 'convert_is_already_type_Deposit' => 'Deze transactie is al inkomsten', + 'convert_is_already_type_Transfer' => 'Deze transactie is al een overschrijving', + 'convert_to_Withdrawal' => 'Verander ":description" in een uitgave', + 'convert_to_Deposit' => 'Verander ":description" in inkomsten', + 'convert_to_Transfer' => 'Verander ":description" in een overschrijving', + 'convert_options_WithdrawalDeposit' => 'Verander een uitgave in inkomsten', + 'convert_options_WithdrawalTransfer' => 'Verander een uitgave in een overschrijving', + 'convert_options_DepositTransfer' => 'Verander inkomsten in een overschrijving', + 'convert_options_DepositWithdrawal' => 'Verander inkomsten in een uitgave', + 'convert_options_TransferWithdrawal' => 'Verander een overschrijving in een uitgave', + 'convert_options_TransferDeposit' => 'Verander een overschrijving in inkomsten', + 'convert_Withdrawal_to_deposit' => 'Verander deze uitgave in inkomsten', + 'convert_Withdrawal_to_transfer' => 'Verander deze uitgave in een overschrijving', + 'convert_Deposit_to_withdrawal' => 'Verander deze inkomsten in een uitgave', + 'convert_Deposit_to_transfer' => 'Verander deze inkomsten in een overschrijving', + 'convert_Transfer_to_deposit' => 'Verander deze overschrijving in inkomsten', + 'convert_Transfer_to_withdrawal' => 'Verander deze overschrijving in een uitgave', + 'convert_please_set_revenue_source' => 'Kies de debiteur waar het geld vandaan gaat komen.', + 'convert_please_set_asset_destination' => 'Kies de betaalrekening waar het geld heen zal gaan.', + 'convert_please_set_expense_destination' => 'Kies de crediteur waar het geld heen zal gaan.', + 'convert_please_set_asset_source' => 'Kies de betaalrekening waar het geld vandaan zal komen.', + 'convert_expl_w_d' => 'Als je de transactie converteert van een uitgave naar inkomsten, wordt het geld gestort in de weergegeven doelrekening, in plaats van dat het er uit gehaald wordt. Kies de nieuwe bronrekening om de conversie af te maken.|Als je de transactie converteert van een uitgave naar inkomsten, wordt het geld gestort in de weergegeven doelrekeningen, in plaats van dat het er uit gehaald wordt.', + 'convert_expl_w_t' => 'Als je een uitgave in een overschrijving converteert, wordt het geld overgemaakt van de bronrekening naar een andere betaalrekening of passiva in plaats van dat je het uitgeeft.|Als je een uitgave in een overschrijving converteert, wordt het geld overgemaakt van de bronrekeningen naar een andere betaalrekening of passiva in plaats van dat je het uitgeeft.', + 'convert_expl_d_w' => 'Als je inkomsten converteert naar een uitgave wordt het geld uitgegeven vanaf de aangegeven bronrekening in plaats van dat het daar wordt gestort.|Als je inkomsten converteert naar een uitgave wordt het geld uitgegeven vanaf de aangegeven bronrekeningen in plaats van dat het daar wordt gestort.', + 'convert_expl_d_t' => 'Wanneer je inkomsten in een overschrijving converteert, wordt het geld overgemaakt van de bronrekening naar een andere betaalrekening of passiva in plaats van dat je het uitgeeft.|Wanneer je inkomsten in een overschrijving converteert, wordt het geld overgemaakt van de bronrekeningen naar een andere betaalrekening of passiva in plaats van dat je het uitgeeft.', + 'convert_expl_t_w' => 'Als je converteert van een overschrijving naar een afschrijving wordt het geld uitgegeven bij de hier genoemde doelrekening in plaats van dat het wordt afgeschreven van de originele bronrekening.|Als je converteert van een overschrijving naar een afschrijving wordt het geld uitgegeven bij de hier genoemde doelrekeningen in plaats van dat het wordt afgeschreven van de originele bronrekeningen.', + 'convert_expl_t_d' => 'Als je een overschrijving converteert naar inkomsten wordt het geld gestort op de doelrekening die je hier ziet, in plaats van dat het als inkomsten binnenkomt. Kies de nieuwe bronrekening om de conversie af te maken.|Als je een overschrijving converteert naar inkomsten wordt het geld gestort op de doelrekeningen die je hier ziet, in plaats van dat het als inkomsten binnenkomt.', + 'convert_select_sources' => 'Kies de nieuwe bronrekening om de conversie af te maken.|Kies de nieuwe bronrekeningen om de conversie af te maken.', + 'convert_select_destinations' => 'Kies de nieuwe doelrekening om de conversie af te maken.|Kies de nieuwe doelrekeningen om de conversie af te maken.', + 'converted_to_Withdrawal' => 'De transactie is veranderd in een uitgave', + 'converted_to_Deposit' => 'De transactie is veranderd in inkomsten', + 'converted_to_Transfer' => 'De transactie is veranderd in een overschrijving', + 'invalid_convert_selection' => 'De rekening die je hebt geselecteerd wordt al gebruikt in deze transactie, of bestaat niet.', + 'source_or_dest_invalid' => 'Kan de juiste transactiegegevens niet vinden. Conversie is niet mogelijk.', + 'convert_to_withdrawal' => 'Converteren naar een uitgave', + 'convert_to_deposit' => 'Converteer naar inkomsten', + 'convert_to_transfer' => 'Converteren naar een overschrijving', // create new stuff: - 'create_new_withdrawal' => 'Nieuwe uitgave', - 'create_new_deposit' => 'Nieuwe inkomsten', - 'create_new_transfer' => 'Nieuwe overschrijving', - 'create_new_asset' => 'Nieuwe betaalrekening', - 'create_new_liabilities' => 'Maak nieuwe passiva', - 'create_new_expense' => 'Nieuwe crediteur', - 'create_new_revenue' => 'Nieuwe debiteur', - 'create_new_piggy_bank' => 'Nieuw spaarpotje', - 'create_new_bill' => 'Nieuw contract', - 'create_new_subscription' => 'Maak een nieuw abonnement', - 'create_new_rule' => 'Maak een nieuwe regel', + 'create_new_withdrawal' => 'Nieuwe uitgave', + 'create_new_deposit' => 'Nieuwe inkomsten', + 'create_new_transfer' => 'Nieuwe overschrijving', + 'create_new_asset' => 'Nieuwe betaalrekening', + 'create_new_liabilities' => 'Maak nieuwe passiva', + 'create_new_expense' => 'Nieuwe crediteur', + 'create_new_revenue' => 'Nieuwe debiteur', + 'create_new_piggy_bank' => 'Nieuw spaarpotje', + 'create_new_bill' => 'Nieuw contract', + 'create_new_subscription' => 'Maak een nieuw abonnement', + 'create_new_rule' => 'Maak een nieuwe regel', // currencies: - 'create_currency' => 'Voeg nieuwe valuta toe', - 'store_currency' => 'Sla nieuwe valuta op', - 'update_currency' => 'Wijzig valuta', - 'new_default_currency' => ':name is nu de standaard valuta.', - 'cannot_delete_currency' => 'Kan ":name" niet verwijderen, want deze is in gebruik.', - 'cannot_delete_fallback_currency' => ':naam is de systeemvaluta en kan niet verwijderd worden.', - 'cannot_disable_currency_journals' => 'Je kan :name niet uitschakelen, er zijn nog transacties die deze valuta gebruiken.', - 'cannot_disable_currency_last_left' => 'Je kan :name niet uitschakelen, het is de laatste beschikbare valuta.', - 'cannot_disable_currency_account_meta' => 'Je kan :name niet uitschakelen, er zijn nog betaalrekeningen die deze valuta gebruiken.', - 'cannot_disable_currency_bills' => 'Je kan :name niet uitschakelen, er zijn nog contracten die deze valuta gebruiken.', - 'cannot_disable_currency_recurring' => 'Je kan :name niet uitschakelen, er zijn nog herhalende transacties die deze valuta gebruiken.', - 'cannot_disable_currency_available_budgets' => 'Je kan :name niet uitschakelen, er zijn nog budgetten die deze valuta gebruiken.', - 'cannot_disable_currency_budget_limits' => 'Je kan :name niet uitschakelen, er zijn nog budgetlimieten die deze valuta gebruiken.', - 'cannot_disable_currency_current_default' => 'Je kan :name niet uitschakelen, het is de standaardvaluta.', - 'cannot_disable_currency_system_fallback' => 'Je kan :name niet uitschakelen, het is de standaardvaluta van Firefly III.', - 'disable_EUR_side_effects' => 'De euro is de standardvaluta van Firefly III. Als je die uitzet kan het zijn dat je dingen sloopt. Doe dit op eigen risico.', - 'deleted_currency' => 'Valuta :name verwijderd', - 'created_currency' => 'Nieuwe valuta :name opgeslagen', - 'could_not_store_currency' => 'Kon nieuwe valuta niet opslaan.', - 'updated_currency' => 'Valuta :name bijgewerkt', - 'ask_site_owner' => 'Vraag :owner of deze valuta wilt toevoegen, verwijderen of wijzigen.', - 'currencies_intro' => 'Firefly III ondersteunt diverse valuta die je hier kan instellen en bewerken.', - 'make_default_currency' => 'Maak standaard', - 'default_currency' => 'standaard', - 'currency_is_disabled' => 'Uitgeschakeld', - 'enable_currency' => 'Inschakelen', - 'disable_currency' => 'Uitschakelen', - 'currencies_default_disabled' => 'De meeste van deze valuta zijn standaard uitgeschakeld. Om ze te gebruiken, moet je ze eerst inschakelen.', - 'currency_is_now_enabled' => 'Valuta ":name" is ingeschakeld', - 'currency_is_now_disabled' => 'Valuta ":name" is uitgeschakeld', + 'create_currency' => 'Voeg nieuwe valuta toe', + 'store_currency' => 'Sla nieuwe valuta op', + 'update_currency' => 'Wijzig valuta', + 'new_default_currency' => '":name" is nu de standaardvaluta.', + 'default_currency_failed' => 'Kan ":name" niet de standaardvaluta maken. Check de logs.', + 'cannot_delete_currency' => 'Kan ":name" niet verwijderen, want deze is in gebruik.', + 'cannot_delete_fallback_currency' => ':naam is de systeemvaluta en kan niet verwijderd worden.', + 'cannot_disable_currency_journals' => 'Je kan :name niet uitschakelen, er zijn nog transacties die deze valuta gebruiken.', + 'cannot_disable_currency_last_left' => 'Je kan :name niet uitschakelen, het is de laatste beschikbare valuta.', + 'cannot_disable_currency_account_meta' => 'Je kan :name niet uitschakelen, er zijn nog betaalrekeningen die deze valuta gebruiken.', + 'cannot_disable_currency_bills' => 'Je kan :name niet uitschakelen, er zijn nog contracten die deze valuta gebruiken.', + 'cannot_disable_currency_recurring' => 'Je kan :name niet uitschakelen, er zijn nog herhalende transacties die deze valuta gebruiken.', + 'cannot_disable_currency_available_budgets' => 'Je kan :name niet uitschakelen, er zijn nog budgetten die deze valuta gebruiken.', + 'cannot_disable_currency_budget_limits' => 'Je kan :name niet uitschakelen, er zijn nog budgetlimieten die deze valuta gebruiken.', + 'cannot_disable_currency_current_default' => 'Je kan :name niet uitschakelen, het is de standaardvaluta.', + 'cannot_disable_currency_system_fallback' => 'Je kan :name niet uitschakelen, het is de standaardvaluta van Firefly III.', + 'disable_EUR_side_effects' => 'De euro is de standardvaluta van Firefly III. Als je die uitzet kan het zijn dat je dingen sloopt. Doe dit op eigen risico.', + 'deleted_currency' => 'Valuta :name verwijderd', + 'created_currency' => 'Nieuwe valuta :name opgeslagen', + 'could_not_store_currency' => 'Kon nieuwe valuta niet opslaan.', + 'updated_currency' => 'Valuta :name bijgewerkt', + 'ask_site_owner' => 'Vraag :owner of deze valuta wilt toevoegen, verwijderen of wijzigen.', + 'currencies_intro' => 'Firefly III ondersteunt diverse valuta die je hier kan instellen en bewerken.', + 'make_default_currency' => 'Maak standaard', + 'default_currency' => 'standaard', + 'currency_is_disabled' => 'Uitgeschakeld', + 'enable_currency' => 'Inschakelen', + 'disable_currency' => 'Uitschakelen', + 'currencies_default_disabled' => 'De meeste van deze valuta zijn standaard uitgeschakeld. Om ze te gebruiken, moet je ze eerst inschakelen.', + 'currency_is_now_enabled' => 'Valuta ":name" is ingeschakeld', + 'could_not_enable_currency' => 'Kon valuta ":name" niet inschakelen. Check de logs', + 'currency_is_now_disabled' => 'Valuta ":name" is uitgeschakeld', + 'could_not_disable_currency' => 'Kon valuta ":name" niet uitschakelen. Misschien is deze nog steeds in gebruik?', // forms: - 'mandatoryFields' => 'Verplichte velden', - 'optionalFields' => 'Optionele velden', - 'options' => 'Opties', + 'mandatoryFields' => 'Verplichte velden', + 'optionalFields' => 'Optionele velden', + 'options' => 'Opties', // budgets: - 'daily_budgets' => 'Dagelijkse budgetten', - 'weekly_budgets' => 'Wekelijkse budgetten', - 'monthly_budgets' => 'Maandelijkse budgetten', - 'quarterly_budgets' => 'Driemaandelijkse budgetten', - 'half_year_budgets' => 'Halfjaarlijkse budgetten', - 'yearly_budgets' => 'Jaarlijkse budgetten', - 'other_budgets' => 'Aangepaste budgetten', - 'budget_limit_not_in_range' => 'Dit bedrag is van toepassing op :start tot :end:', - 'total_available_budget' => 'Totaal beschikbare budget (tussen :start en :end)', - 'total_available_budget_in_currency' => 'Totaal beschikbare budget in :currency', - 'see_below' => 'zie onder', - 'create_new_budget' => 'Maak een nieuw budget', - 'store_new_budget' => 'Sla nieuw budget op', - 'stored_new_budget' => 'Nieuw budget ":name" opgeslagen', - 'available_between' => 'Beschikbaar tussen :start en :end', - 'transactionsWithoutBudget' => 'Uitgaven zonder budget', - 'transactions_no_budget' => 'Uitgaven zonder budget tussen :start en :end', - 'spent_between' => 'Al uitgegeven tussen :start en :end', - 'set_available_amount' => 'Stel beschikbaar bedrag in', - 'update_available_amount' => 'Update beschikbaar bedrag', - 'ab_basic_modal_explain' => 'Gebruik dit formulier om aan te geven hoeveel je verwacht in de aangegeven periode (in totaal, in :currency) te kunnen begroten.', - 'createBudget' => 'Maak nieuw budget', - 'invalid_currency' => 'Dit is een ongeldige valuta', - 'invalid_amount' => 'Vul een bedrag in', - 'set_ab' => 'Het beschikbare budgetbedrag is ingesteld', - 'updated_ab' => 'Het beschikbare budgetbedrag is bijgewerkt', - 'deleted_ab' => 'Het beschikbare budgetbedrag is verwijderd', - 'deleted_bl' => 'Het gebudgetteerde bedrag is verwijderd', - 'alt_currency_ab_create' => 'Stel beschikbare budget in in een andere valuta', - 'bl_create_btn' => 'Stel budget in in een andere valuta', - 'inactiveBudgets' => 'Inactieve budgetten', - 'without_budget_between' => 'Transacties zonder budget tussen :start en :end', - 'delete_budget' => 'Verwijder budget ":name"', - 'deleted_budget' => 'Budget ":name" verwijderd', - 'edit_budget' => 'Wijzig budget ":name"', - 'updated_budget' => 'Budget ":name" geüpdatet', - 'update_amount' => 'Bedrag bijwerken', - 'update_budget' => 'Budget bijwerken', - 'update_budget_amount_range' => 'Update het verwacht beschikbare bedrag tussen :start en :end', - 'set_budget_limit_title' => 'Stel begroot bedrag in voor budget :budget tussen :start en :end', - 'set_budget_limit' => 'Stel begroot bedrag in', - 'budget_period_navigator' => 'Periodenavigator', - 'info_on_available_amount' => 'Wat heb ik beschikbaar?', - 'available_amount_indication' => 'Gebruik deze bedragen om een indruk te krijgen van wat je totale budget zou kunnen zijn.', - 'suggested' => 'Gesuggereerd', - 'average_between' => 'Gemiddelde tussen :start en :end', - 'transferred_in' => 'Overgeboekt (inkomend)', - 'transferred_away' => 'Overgeboekt (uitgaand)', - 'auto_budget_none' => 'Geen auto-budget', - 'auto_budget_reset' => 'Vast bedrag elke periode', - 'auto_budget_rollover' => 'Voeg elke periode een bedrag toe', - 'auto_budget_adjusted' => 'Voeg elke periode een bedrag toe en corrigeer voor overbesteding', - 'auto_budget_period_daily' => 'Dagelijks', - 'auto_budget_period_weekly' => 'Wekelijks', - 'auto_budget_period_monthly' => 'Maandelijks', - 'auto_budget_period_quarterly' => 'Elk kwartaal', - 'auto_budget_period_half_year' => 'Elk half jaar', - 'auto_budget_period_yearly' => 'Jaarlijks', - 'auto_budget_help' => 'Je kan meer lezen over deze functie in de hulppagina\'s. Klik op het (?) icoontje rechtsboven.', - 'auto_budget_reset_icon' => 'Het budget wordt periodiek ingesteld', - 'auto_budget_rollover_icon' => 'Het budget wordt periodiek aangevuld', - 'auto_budget_adjusted_icon' => 'Het bedrag zal periodiek stijgen en corrigeren bij overmatige uitgaven', - 'remove_budgeted_amount' => 'Verwijder gebudgetteerd bedrag in :currency', + 'daily_budgets' => 'Dagelijkse budgetten', + 'weekly_budgets' => 'Wekelijkse budgetten', + 'monthly_budgets' => 'Maandelijkse budgetten', + 'quarterly_budgets' => 'Driemaandelijkse budgetten', + 'half_year_budgets' => 'Halfjaarlijkse budgetten', + 'yearly_budgets' => 'Jaarlijkse budgetten', + 'other_budgets' => 'Aangepaste budgetten', + 'budget_limit_not_in_range' => 'Dit bedrag is van toepassing op :start tot :end:', + 'total_available_budget' => 'Totaal beschikbare budget (tussen :start en :end)', + 'total_available_budget_in_currency' => 'Totaal beschikbare budget in :currency', + 'see_below' => 'zie onder', + 'create_new_budget' => 'Maak een nieuw budget', + 'store_new_budget' => 'Sla nieuw budget op', + 'stored_new_budget' => 'Nieuw budget ":name" opgeslagen', + 'available_between' => 'Beschikbaar tussen :start en :end', + 'transactionsWithoutBudget' => 'Uitgaven zonder budget', + 'transactions_no_budget' => 'Uitgaven zonder budget tussen :start en :end', + 'spent_between' => 'Al uitgegeven tussen :start en :end', + 'spent_between_left' => 'Uitgegeven :spent tussen :start en :end. Over: :left.', + 'set_available_amount' => 'Stel beschikbaar bedrag in', + 'update_available_amount' => 'Update beschikbaar bedrag', + 'ab_basic_modal_explain' => 'Gebruik dit formulier om aan te geven hoeveel je verwacht in de aangegeven periode (in totaal, in :currency) te kunnen begroten.', + 'createBudget' => 'Maak nieuw budget', + 'invalid_currency' => 'Dit is een ongeldige valuta', + 'invalid_amount' => 'Vul een bedrag in', + 'set_ab' => 'Het beschikbare budgetbedrag is ingesteld', + 'updated_ab' => 'Het beschikbare budgetbedrag is bijgewerkt', + 'deleted_ab' => 'Het beschikbare budgetbedrag is verwijderd', + 'deleted_bl' => 'Het gebudgetteerde bedrag is verwijderd', + 'alt_currency_ab_create' => 'Stel beschikbare budget in in een andere valuta', + 'bl_create_btn' => 'Stel budget in in een andere valuta', + 'inactiveBudgets' => 'Inactieve budgetten', + 'without_budget_between' => 'Transacties zonder budget tussen :start en :end', + 'delete_budget' => 'Verwijder budget ":name"', + 'deleted_budget' => 'Budget ":name" verwijderd', + 'edit_budget' => 'Wijzig budget ":name"', + 'updated_budget' => 'Budget ":name" geüpdatet', + 'update_amount' => 'Bedrag bijwerken', + 'update_budget' => 'Budget bijwerken', + 'update_budget_amount_range' => 'Update het verwacht beschikbare bedrag tussen :start en :end', + 'set_budget_limit_title' => 'Stel begroot bedrag in voor budget :budget tussen :start en :end', + 'set_budget_limit' => 'Stel begroot bedrag in', + 'budget_period_navigator' => 'Periodenavigator', + 'info_on_available_amount' => 'Wat heb ik beschikbaar?', + 'available_amount_indication' => 'Gebruik deze bedragen om een indruk te krijgen van wat je totale budget zou kunnen zijn.', + 'suggested' => 'Gesuggereerd', + 'average_between' => 'Gemiddelde tussen :start en :end', + 'transferred_in' => 'Overgeboekt (inkomend)', + 'transferred_away' => 'Overgeboekt (uitgaand)', + 'auto_budget_none' => 'Geen auto-budget', + 'auto_budget_reset' => 'Vast bedrag elke periode', + 'auto_budget_rollover' => 'Voeg elke periode een bedrag toe', + 'auto_budget_adjusted' => 'Voeg elke periode een bedrag toe en corrigeer voor overbesteding', + 'auto_budget_period_daily' => 'Dagelijks', + 'auto_budget_period_weekly' => 'Wekelijks', + 'auto_budget_period_monthly' => 'Maandelijks', + 'auto_budget_period_quarterly' => 'Elk kwartaal', + 'auto_budget_period_half_year' => 'Elk half jaar', + 'auto_budget_period_yearly' => 'Jaarlijks', + 'auto_budget_help' => 'Je kan meer lezen over deze functie in de hulppagina\'s. Klik op het (?) icoontje rechtsboven.', + 'auto_budget_reset_icon' => 'Het budget wordt periodiek ingesteld', + 'auto_budget_rollover_icon' => 'Het budget wordt periodiek aangevuld', + 'auto_budget_adjusted_icon' => 'Het bedrag zal periodiek stijgen en corrigeren bij overmatige uitgaven', + 'remove_budgeted_amount' => 'Verwijder gebudgetteerd bedrag in :currency', // bills: - 'subscription' => 'Abonnement', - 'not_expected_period' => 'Niet verwacht deze periode', - 'subscriptions_in_group' => 'Abonnementen in groep "%{title}"', - 'subscr_expected_x_times' => 'Verwacht %{amount} %{times} keer te betalen in deze periode', - 'not_or_not_yet' => '(nog) niet', - 'visit_bill' => 'Bezoek contract ":name" bij Firefly III', - 'match_between_amounts' => 'Contract past bij transacties tussen :low en :high.', - 'running_again_loss' => 'Eerder gekoppelde transacties met dit contract kunnen hun koppeling verliezen, als ze (niet langer) overeenkomen met de regel(s).', - 'bill_related_rules' => 'Regels gerelateerd aan dit contract', - 'repeats' => 'Herhaalt', - 'bill_end_date_help' => 'Optioneel veld. Het contract eindigt op deze datum.', - 'bill_extension_date_help' => 'Optioneel veld. Het contract moet verlengd of opgezegd worden voor of op deze datum.', - 'bill_end_index_line' => 'Het contract eindigt op :date', - 'bill_extension_index_line' => 'Het contract moet verlengd of opgezegd worden op :date', - 'connected_journals' => 'Verbonden transacties', - 'auto_match_on' => 'Automatisch herkend door Firefly III', - 'auto_match_off' => 'Niet automatisch herkend door Firefly III', - 'next_expected_match' => 'Volgende verwachte transactie', - 'delete_bill' => 'Verwijder contract ":name"', - 'deleted_bill' => 'Contract ":name" verwijderd', - 'edit_bill' => 'Wijzig contract ":name"', - 'more' => 'Meer', - 'rescan_old' => 'Voer regels opnieuw uit op alle transacties', - 'update_bill' => 'Wijzig contract', - 'updated_bill' => 'Contract ":name" geüpdatet', - 'store_new_bill' => 'Sla nieuw contract op', - 'stored_new_bill' => 'Nieuw contract ":name" opgeslagen', - 'cannot_scan_inactive_bill' => 'Inactieve contracten kunnen niet worden gescand.', - 'rescanned_bill' => 'Alles opnieuw gescand, en :count transactie is gekoppeld aan het contract.|Alles opnieuw gescand, en :count transacties zijn gekoppeld aan het contract.', - 'average_bill_amount_year' => 'Gemiddeld contractbedrag (:year)', - 'average_bill_amount_overall' => 'Gemiddeld contractbedrag (gehele periode)', - 'bill_is_active' => 'Contract is actief', - 'bill_expected_between' => 'Verwacht tussen :start en :end', - 'bill_will_automatch' => 'Waar van toepassing wordt dit contract automatisch gekoppeld aan transacties', - 'skips_over' => 'slaat over', - 'bill_store_error' => 'Er ging wat fout bij het opslaan van het contract. Kijk in de logbestanden', - 'list_inactive_rule' => 'inactieve regel', - 'bill_edit_rules' => 'Firefly III gaat proberen de gerelateerde regel ook aan te passen. Als je deze zelf al hebt gewijzigd echter, zal dit niet gebeuren.|Firefly III gaat proberen de :count gerelateerde regels ook aan te passen. Als je deze zelf al hebt gewijzigd echter, zal dit niet gebeuren.', - 'bill_expected_date' => 'Verwacht :date', - 'bill_expected_date_js' => 'Verwacht op {date}', - 'expected_amount' => '(Verwacht) bedrag', - 'bill_paid_on' => 'Betaald op {date}', - 'bill_repeats_weekly' => 'Herhaalt wekelijks', - 'bill_repeats_monthly' => 'Herhaalt maandelijks', - 'bill_repeats_quarterly' => 'Herhaalt elk kwartaal', - 'bill_repeats_half-year' => 'Herhaalt elk half jaar', - 'bill_repeats_yearly' => 'Herhaalt jaarlijks', - 'bill_repeats_weekly_other' => 'Herhaalt om de week', - 'bill_repeats_monthly_other' => 'Herhaalt om de maand', - 'bill_repeats_quarterly_other' => 'Herhaalt om het kwartaal', - 'bill_repeats_half-year_other' => 'Herhaalt jaarlijks', - 'bill_repeats_yearly_other' => 'Herhaalt om het jaar', - 'bill_repeats_weekly_skip' => 'Herhaalt elke {skip} weken', - 'bill_repeats_monthly_skip' => 'Herhaalt elke {skip} maanden', - 'bill_repeats_quarterly_skip' => 'Herhaalt elke {skip} kwartalen', - 'bill_repeats_half-year_skip' => 'Herhaalt elke {skip} halve jaren', - 'bill_repeats_yearly_skip' => 'Herhaalt elke {skip} jaar', - 'subscriptions' => 'Abonnementen', - 'go_to_subscriptions' => 'Ga naar je abonnementen', - 'forever' => 'Voor altijd', - 'extension_date_is' => 'Verlengdatum is {date}', + 'subscription' => 'Abonnement', + 'not_expected_period' => 'Niet verwacht deze periode', + 'subscriptions_in_group' => 'Abonnementen in groep "%{title}"', + 'subscr_expected_x_times' => 'Verwacht %{amount} %{times} keer te betalen in deze periode', + 'not_or_not_yet' => '(nog) niet', + 'visit_bill' => 'Bezoek contract ":name" bij Firefly III', + 'match_between_amounts' => 'Contract past bij transacties tussen :low en :high.', + 'running_again_loss' => 'Eerder gekoppelde transacties met dit contract kunnen hun koppeling verliezen, als ze (niet langer) overeenkomen met de regel(s).', + 'bill_related_rules' => 'Regels gerelateerd aan dit contract', + 'repeats' => 'Herhaalt', + 'bill_end_date_help' => 'Optioneel veld. Het contract eindigt op deze datum.', + 'bill_extension_date_help' => 'Optioneel veld. Het contract moet verlengd of opgezegd worden voor of op deze datum.', + 'bill_end_index_line' => 'Het contract eindigt op :date', + 'bill_extension_index_line' => 'Het contract moet verlengd of opgezegd worden op :date', + 'connected_journals' => 'Verbonden transacties', + 'auto_match_on' => 'Automatisch herkend door Firefly III', + 'auto_match_off' => 'Niet automatisch herkend door Firefly III', + 'next_expected_match' => 'Volgende verwachte transactie', + 'delete_bill' => 'Verwijder contract ":name"', + 'deleted_bill' => 'Contract ":name" verwijderd', + 'edit_bill' => 'Wijzig contract ":name"', + 'more' => 'Meer', + 'rescan_old' => 'Voer regels opnieuw uit op alle transacties', + 'update_bill' => 'Wijzig contract', + 'updated_bill' => 'Contract ":name" geüpdatet', + 'store_new_bill' => 'Sla nieuw contract op', + 'stored_new_bill' => 'Nieuw contract ":name" opgeslagen', + 'cannot_scan_inactive_bill' => 'Inactieve contracten kunnen niet worden gescand.', + 'rescanned_bill' => 'Alles opnieuw gescand, en :count transactie is gekoppeld aan het contract.|Alles opnieuw gescand, en :count transacties zijn gekoppeld aan het contract.', + 'average_bill_amount_year' => 'Gemiddeld contractbedrag (:year)', + 'average_bill_amount_overall' => 'Gemiddeld contractbedrag (gehele periode)', + 'bill_is_active' => 'Contract is actief', + 'bill_expected_between' => 'Verwacht tussen :start en :end', + 'bill_will_automatch' => 'Waar van toepassing wordt dit contract automatisch gekoppeld aan transacties', + 'skips_over' => 'slaat over', + 'bill_store_error' => 'Er ging wat fout bij het opslaan van het contract. Kijk in de logbestanden', + 'list_inactive_rule' => 'inactieve regel', + 'bill_edit_rules' => 'Firefly III gaat proberen de gerelateerde regel ook aan te passen. Als je deze zelf al hebt gewijzigd echter, zal dit niet gebeuren.|Firefly III gaat proberen de :count gerelateerde regels ook aan te passen. Als je deze zelf al hebt gewijzigd echter, zal dit niet gebeuren.', + 'bill_expected_date' => 'Verwacht :date', + 'bill_expected_date_js' => 'Verwacht op {date}', + 'expected_amount' => '(Verwacht) bedrag', + 'bill_paid_on' => 'Betaald op {date}', + 'bill_repeats_weekly' => 'Herhaalt wekelijks', + 'bill_repeats_monthly' => 'Herhaalt maandelijks', + 'bill_repeats_quarterly' => 'Herhaalt elk kwartaal', + 'bill_repeats_half-year' => 'Herhaalt elk half jaar', + 'bill_repeats_yearly' => 'Herhaalt jaarlijks', + 'bill_repeats_weekly_other' => 'Herhaalt om de week', + 'bill_repeats_monthly_other' => 'Herhaalt om de maand', + 'bill_repeats_quarterly_other' => 'Herhaalt om het kwartaal', + 'bill_repeats_half-year_other' => 'Herhaalt jaarlijks', + 'bill_repeats_yearly_other' => 'Herhaalt om het jaar', + 'bill_repeats_weekly_skip' => 'Herhaalt elke {skip} weken', + 'bill_repeats_monthly_skip' => 'Herhaalt elke {skip} maanden', + 'bill_repeats_quarterly_skip' => 'Herhaalt elke {skip} kwartalen', + 'bill_repeats_half-year_skip' => 'Herhaalt elke {skip} halve jaren', + 'bill_repeats_yearly_skip' => 'Herhaalt elke {skip} jaar', + 'subscriptions' => 'Abonnementen', + 'go_to_subscriptions' => 'Ga naar je abonnementen', + 'forever' => 'Voor altijd', + 'extension_date_is' => 'Verlengdatum is {date}', // accounts: - 'i_am_owed_amount' => 'Ik ben het bedrag verschuldigd', - 'i_owe_amount' => 'Het bedrag is mij verschuldigd', - 'inactive_account_link' => 'Je hebt :count inactieve (gearchiveerde) rekening, die je kan bekijken op deze aparte pagina.|Je hebt :count inactieve (gearchiveerde) rekeningen, die je kan bekijken op deze aparte pagina.', - 'all_accounts_inactive' => 'Dit zijn je inactieve rekeningen.', - 'active_account_link' => 'Deze link gaat terug naar je actieve rekeningen.', - 'account_missing_transaction' => 'Rekening #:id (":name") kan je niet bekijken in Firefly III, maar het origineel is kwijt.', - 'cc_monthly_payment_date_help' => 'Maakt niet uit welk jaar of welke maand. Alleen de dag van de maand is relevant.', - 'details_for_asset' => 'Overzicht voor betaalrekening ":name"', - 'details_for_expense' => 'Overzicht voor crediteur ":name"', - 'details_for_revenue' => 'Overzicht voor debiteur ":name"', - 'details_for_cash' => 'Overzicht voor contant geldrekening ":name"', - 'store_new_asset_account' => 'Sla nieuwe betaalrekening op', - 'store_new_expense_account' => 'Sla nieuwe crediteur op', - 'store_new_revenue_account' => 'Sla nieuwe debiteur op', - 'edit_asset_account' => 'Wijzig betaalrekening ":name"', - 'edit_expense_account' => 'Wijzig crediteur ":name"', - 'edit_revenue_account' => 'Wijzig debiteur ":name"', - 'delete_asset_account' => 'Verwijder betaalrekening ":name"', - 'delete_expense_account' => 'Verwijder crediteur ":name"', - 'delete_revenue_account' => 'Verwijder debiteur ":name"', - 'delete_liabilities_account' => 'Verwijder passiva ":name"', - 'asset_deleted' => 'Betaalrekening ":name" is verwijderd.', - 'account_deleted' => 'Rekening ":name" is verwijderd', - 'expense_deleted' => 'Crediteur ":name" is verwijderd.', - 'revenue_deleted' => 'Debiteur ":name" is verwijderd.', - 'update_asset_account' => 'Wijzig betaalrekening', - 'update_undefined_account' => 'Account bijwerken', - 'update_liabilities_account' => 'Update passiva', - 'update_expense_account' => 'Wijzig crediteur', - 'update_revenue_account' => 'Wijzig debiteur', - 'make_new_asset_account' => 'Nieuwe betaalrekening', - 'make_new_expense_account' => 'Nieuwe crediteur', - 'make_new_revenue_account' => 'Nieuwe debiteur', - 'make_new_liabilities_account' => 'Maak nieuwe passiva', - 'asset_accounts' => 'Betaalrekeningen', - 'undefined_accounts' => 'Rekeningen', - 'asset_accounts_inactive' => 'Betaalrekeningen (inactief)', - 'expense_account' => 'Crediteur', - 'expense_accounts' => 'Crediteuren', - 'expense_accounts_inactive' => 'Crediteuren (inactief)', - 'revenue_account' => 'Debiteur', - 'revenue_accounts' => 'Debiteuren', - 'revenue_accounts_inactive' => 'Debiteuren (inactief)', - 'cash_accounts' => 'Contant geldrekeningen', - 'Cash account' => 'Contant geldrekening', - 'liabilities_accounts' => 'Passiva', - 'liabilities_accounts_inactive' => 'Passiva (inactief)', - 'reconcile_account' => 'Afstemmen betaalrekening ":account"', - 'overview_of_reconcile_modal' => 'Overview van afstemming', - 'delete_reconciliation' => 'Verwijder afstemmingstransactie', - 'update_reconciliation' => 'Update afstemmingstransactie', - 'amount_cannot_be_zero' => 'Het bedrag mag niet nul zijn', - 'end_of_reconcile_period' => 'Einde van afstemmingsperiode: :period', - 'start_of_reconcile_period' => 'Begin van afstemmingsperiode: :period', - 'start_balance' => 'Startsaldo', - 'end_balance' => 'Eindsaldo', - 'update_balance_dates_instruction' => 'Vergelijk de bedragen en datums hierboven met je bankafschrift en druk op "Begin met afstemmen"', - 'select_transactions_instruction' => 'Selecteer de transacties die op je bankafschrift staan.', - 'select_range_and_balance' => 'Controleer eerst het datumbereik en de saldo\'s. Druk vervolgens op "Begin met afstemmen"', - 'date_change_instruction' => 'Als je het datumbereik nu wijzigt, gaat je voortgang verloren.', - 'update_selection' => 'Selectie bijwerken', - 'store_reconcile' => 'Afstemming opslaan', - 'reconciliation_transaction' => 'Afstemmingstransactie', - 'Reconciliation' => 'Afstemming', - 'reconciliation' => 'Afstemming', - 'reconcile_options' => 'Afstemmingsopties', - 'reconcile_range' => 'Afstemmingsbereik', - 'start_reconcile' => 'Begin met afstemmen', - 'cash_account_type' => 'Cash', - 'cash' => 'contant', - 'cant_find_redirect_account' => 'Firefly III probeerde je door te sturen maar het ging mis. Sorry. Terug naar de index.', - 'account_type' => 'Rekeningtype', - 'save_transactions_by_moving' => 'Bewaar deze transactie door ze aan een andere rekening te koppelen:|Bewaar deze transacties door ze aan een andere rekening te koppelen:', - 'save_transactions_by_moving_js' => 'Geen transacties|Bewaar deze transactie door ze aan een andere rekening te koppelen.|Bewaar deze transacties door ze aan een andere rekening te koppelen.', - 'stored_new_account' => 'Nieuwe rekening ":name" opgeslagen!', - 'stored_new_account_js' => 'Nieuwe account "{name}" opgeslagen!', - 'updated_account' => 'Rekening ":name" geüpdatet', - 'updated_account_js' => 'Account "{title}" bijgewerkt.', - 'credit_card_options' => 'Opties voor credit cards', - 'no_transactions_account' => 'Betaalrekening ":name" heeft geen transacties (in deze periode).', - 'no_transactions_period' => 'Er zijn geen transacties (in deze periode).', - 'no_data_for_chart' => 'Er is (nog) niet genoeg informatie om deze grafiek te tekenen.', - 'select_at_least_one_account' => 'Selecteer ten minste één betaalrekening', - 'select_at_least_one_category' => 'Selecteer ten minste één categorie', - 'select_at_least_one_budget' => 'Selecteer ten minste één budget', - 'select_at_least_one_tag' => 'Selecteer ten minste één tag', - 'select_at_least_one_expense' => 'Kies minstens één combinatie van crediteuren/debiteuren. Als die die niet hebt (de lijst is leeg) is dit rapport niet beschikbaar voor jou.', - 'account_default_currency' => 'Dit wordt de valuta die standaard gekoppeld wordt met de rekening.', - 'reconcile_has_more' => 'Je Firefly III boekhouding bevat meer geld dan je bank beweert dat er in zou moeten zitten. Je hebt verschillende opties. Kies wat je wilt doen, en klik dan "Bevestig afstemming".', - 'reconcile_has_less' => 'Je Firefly III boekhouding bevat minder geld dan je bank beweert dat er in zou moeten zitten. Je hebt verschillende opties. Kies wat je wilt doen, en klik dan "Bevestig afstemming".', - 'reconcile_is_equal' => 'Je Firefly III boekhouding en je bankafschriften lopen gelijk. Je hoeft niets te doen. Klik op "Bevestig afstemming" om je invoer te bevestigen.', - 'create_pos_reconcile_transaction' => 'Markeer de geselecteerde transacties als afgestemd, en voeg :amount toe aan de betaalrekening.', - 'create_neg_reconcile_transaction' => 'Markeer de geselecteerde transacties als afgestemd, en verwijder :amount van de betaalrekening.', - 'reconcile_do_nothing' => 'Markeer de geselecteerde transacties als afgestemd, maar maak geen afstemmingstransactie (correctie).', - 'reconcile_go_back' => 'Je kan een afstemmingstransactie later altijd wijzigen.', - 'must_be_asset_account' => 'Je kan alleen betaalrekeningen afstemmen', - 'reconciliation_stored' => 'Afstemming opgeslagen', - 'reconciliation_error' => 'De correctie is niet opgeslagen, maar de transacties zijn wel aangemerkt als afgestemd: :error.', - 'reconciliation_transaction_title' => 'Afstemming (:from tot :to)', - 'sum_of_reconciliation' => 'Som van afstemming', - 'reconcile_this_account' => 'Stem deze rekening af', - 'reconcile' => 'Afstemmen', - 'show' => 'Bekijken', - 'confirm_reconciliation' => 'Bevestig afstemming', - 'submitted_start_balance' => 'Ingevoerd startsaldo', - 'selected_transactions' => 'Geselecteerde transacties (:count)', - 'already_cleared_transactions' => 'Al afgestemde transacties (:count)', - 'submitted_end_balance' => 'Ingevoerd eindsaldo', - 'initial_balance_description' => 'Startsaldo voor ":account"', - 'liability_credit_description' => 'Leningkrediet voor ":account"', - 'interest_calc_' => 'onbekend', - 'interest_calc_daily' => 'Per dag', - 'interest_calc_monthly' => 'Per maand', - 'interest_calc_yearly' => 'Per jaar', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half jaar', - 'interest_calc_quarterly' => 'Per kwartaal', - 'initial_balance_account' => 'Startsaldorekening voor :account', - 'list_options' => 'Lijstopties', + 'i_am_owed_amount' => 'Ik ben het bedrag verschuldigd', + 'i_owe_amount' => 'Het bedrag is mij verschuldigd', + 'inactive_account_link' => 'Je hebt :count inactieve (gearchiveerde) rekening, die je kan bekijken op deze aparte pagina.|Je hebt :count inactieve (gearchiveerde) rekeningen, die je kan bekijken op deze aparte pagina.', + 'all_accounts_inactive' => 'Dit zijn je inactieve rekeningen.', + 'active_account_link' => 'Deze link gaat terug naar je actieve rekeningen.', + 'account_missing_transaction' => 'Rekening #:id (":name") kan je niet bekijken in Firefly III, maar het origineel is kwijt.', + 'cc_monthly_payment_date_help' => 'Maakt niet uit welk jaar of welke maand. Alleen de dag van de maand is relevant.', + 'details_for_asset' => 'Overzicht voor betaalrekening ":name"', + 'details_for_expense' => 'Overzicht voor crediteur ":name"', + 'details_for_revenue' => 'Overzicht voor debiteur ":name"', + 'details_for_cash' => 'Overzicht voor contant geldrekening ":name"', + 'store_new_asset_account' => 'Sla nieuwe betaalrekening op', + 'store_new_expense_account' => 'Sla nieuwe crediteur op', + 'store_new_revenue_account' => 'Sla nieuwe debiteur op', + 'edit_asset_account' => 'Wijzig betaalrekening ":name"', + 'edit_expense_account' => 'Wijzig crediteur ":name"', + 'edit_revenue_account' => 'Wijzig debiteur ":name"', + 'delete_asset_account' => 'Verwijder betaalrekening ":name"', + 'delete_expense_account' => 'Verwijder crediteur ":name"', + 'delete_revenue_account' => 'Verwijder debiteur ":name"', + 'delete_liabilities_account' => 'Verwijder passiva ":name"', + 'asset_deleted' => 'Betaalrekening ":name" is verwijderd.', + 'account_deleted' => 'Rekening ":name" is verwijderd', + 'expense_deleted' => 'Crediteur ":name" is verwijderd.', + 'revenue_deleted' => 'Debiteur ":name" is verwijderd.', + 'update_asset_account' => 'Wijzig betaalrekening', + 'update_undefined_account' => 'Account bijwerken', + 'update_liabilities_account' => 'Update passiva', + 'update_expense_account' => 'Wijzig crediteur', + 'update_revenue_account' => 'Wijzig debiteur', + 'make_new_asset_account' => 'Nieuwe betaalrekening', + 'make_new_expense_account' => 'Nieuwe crediteur', + 'make_new_revenue_account' => 'Nieuwe debiteur', + 'make_new_liabilities_account' => 'Maak nieuwe passiva', + 'asset_accounts' => 'Betaalrekeningen', + 'undefined_accounts' => 'Rekeningen', + 'asset_accounts_inactive' => 'Betaalrekeningen (inactief)', + 'expense_account' => 'Crediteur', + 'expense_accounts' => 'Crediteuren', + 'expense_accounts_inactive' => 'Crediteuren (inactief)', + 'revenue_account' => 'Debiteur', + 'revenue_accounts' => 'Debiteuren', + 'revenue_accounts_inactive' => 'Debiteuren (inactief)', + 'cash_accounts' => 'Contant geldrekeningen', + 'Cash account' => 'Contant geldrekening', + 'liabilities_accounts' => 'Passiva', + 'liabilities_accounts_inactive' => 'Passiva (inactief)', + 'reconcile_account' => 'Afstemmen betaalrekening ":account"', + 'overview_of_reconcile_modal' => 'Overview van afstemming', + 'delete_reconciliation' => 'Verwijder afstemmingstransactie', + 'update_reconciliation' => 'Update afstemmingstransactie', + 'amount_cannot_be_zero' => 'Het bedrag mag niet nul zijn', + 'end_of_reconcile_period' => 'Einde van afstemmingsperiode: :period', + 'start_of_reconcile_period' => 'Begin van afstemmingsperiode: :period', + 'start_balance' => 'Startsaldo', + 'end_balance' => 'Eindsaldo', + 'update_balance_dates_instruction' => 'Vergelijk de bedragen en datums hierboven met je bankafschrift en druk op "Begin met afstemmen"', + 'select_transactions_instruction' => 'Selecteer de transacties die op je bankafschrift staan.', + 'select_range_and_balance' => 'Controleer eerst het datumbereik en de saldo\'s. Druk vervolgens op "Begin met afstemmen"', + 'date_change_instruction' => 'Als je het datumbereik nu wijzigt, gaat je voortgang verloren.', + 'update_selection' => 'Selectie bijwerken', + 'store_reconcile' => 'Afstemming opslaan', + 'reconciliation_transaction' => 'Afstemmingstransactie', + 'Reconciliation' => 'Afstemming', + 'reconciliation' => 'Afstemming', + 'reconcile_options' => 'Afstemmingsopties', + 'reconcile_range' => 'Afstemmingsbereik', + 'start_reconcile' => 'Begin met afstemmen', + 'cash_account_type' => 'Cash', + 'cash' => 'contant', + 'cant_find_redirect_account' => 'Firefly III probeerde je door te sturen maar het ging mis. Sorry. Terug naar de index.', + 'account_type' => 'Rekeningtype', + 'save_transactions_by_moving' => 'Bewaar deze transactie door ze aan een andere rekening te koppelen:|Bewaar deze transacties door ze aan een andere rekening te koppelen:', + 'save_transactions_by_moving_js' => 'Geen transacties|Bewaar deze transactie door ze aan een andere rekening te koppelen.|Bewaar deze transacties door ze aan een andere rekening te koppelen.', + 'stored_new_account' => 'Nieuwe rekening ":name" opgeslagen!', + 'stored_new_account_js' => 'Nieuwe account "{name}" opgeslagen!', + 'updated_account' => 'Rekening ":name" geüpdatet', + 'updated_account_js' => 'Account "{title}" bijgewerkt.', + 'credit_card_options' => 'Opties voor credit cards', + 'no_transactions_account' => 'Betaalrekening ":name" heeft geen transacties (in deze periode).', + 'no_transactions_period' => 'Er zijn geen transacties (in deze periode).', + 'no_data_for_chart' => 'Er is (nog) niet genoeg informatie om deze grafiek te tekenen.', + 'select_at_least_one_account' => 'Selecteer ten minste één betaalrekening', + 'select_at_least_one_category' => 'Selecteer ten minste één categorie', + 'select_at_least_one_budget' => 'Selecteer ten minste één budget', + 'select_at_least_one_tag' => 'Selecteer ten minste één tag', + 'select_at_least_one_expense' => 'Kies minstens één combinatie van crediteuren/debiteuren. Als die die niet hebt (de lijst is leeg) is dit rapport niet beschikbaar voor jou.', + 'account_default_currency' => 'Dit wordt de valuta die standaard gekoppeld wordt met de rekening.', + 'reconcile_has_more' => 'Je Firefly III boekhouding bevat meer geld dan je bank beweert dat er in zou moeten zitten. Je hebt verschillende opties. Kies wat je wilt doen, en klik dan "Bevestig afstemming".', + 'reconcile_has_less' => 'Je Firefly III boekhouding bevat minder geld dan je bank beweert dat er in zou moeten zitten. Je hebt verschillende opties. Kies wat je wilt doen, en klik dan "Bevestig afstemming".', + 'reconcile_is_equal' => 'Je Firefly III boekhouding en je bankafschriften lopen gelijk. Je hoeft niets te doen. Klik op "Bevestig afstemming" om je invoer te bevestigen.', + 'create_pos_reconcile_transaction' => 'Markeer de geselecteerde transacties als afgestemd, en voeg :amount toe aan de betaalrekening.', + 'create_neg_reconcile_transaction' => 'Markeer de geselecteerde transacties als afgestemd, en verwijder :amount van de betaalrekening.', + 'reconcile_do_nothing' => 'Markeer de geselecteerde transacties als afgestemd, maar maak geen afstemmingstransactie (correctie).', + 'reconcile_go_back' => 'Je kan een afstemmingstransactie later altijd wijzigen.', + 'must_be_asset_account' => 'Je kan alleen betaalrekeningen afstemmen', + 'reconciliation_stored' => 'Afstemming opgeslagen', + 'reconciliation_error' => 'De correctie is niet opgeslagen, maar de transacties zijn wel aangemerkt als afgestemd: :error.', + 'reconciliation_transaction_title' => 'Afstemming (:from tot :to)', + 'sum_of_reconciliation' => 'Som van afstemming', + 'reconcile_this_account' => 'Stem deze rekening af', + 'reconcile' => 'Afstemmen', + 'show' => 'Bekijken', + 'confirm_reconciliation' => 'Bevestig afstemming', + 'submitted_start_balance' => 'Ingevoerd startsaldo', + 'selected_transactions' => 'Geselecteerde transacties (:count)', + 'already_cleared_transactions' => 'Al afgestemde transacties (:count)', + 'submitted_end_balance' => 'Ingevoerd eindsaldo', + 'initial_balance_description' => 'Startsaldo voor ":account"', + 'liability_credit_description' => 'Leningkrediet voor ":account"', + 'interest_calc_' => 'onbekend', + 'interest_calc_daily' => 'Per dag', + 'interest_calc_monthly' => 'Per maand', + 'interest_calc_yearly' => 'Per jaar', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half jaar', + 'interest_calc_quarterly' => 'Per kwartaal', + 'initial_balance_account' => 'Startsaldorekening voor :account', + 'list_options' => 'Lijstopties', // categories: - 'new_category' => 'Nieuwe categorie', - 'create_new_category' => 'Nieuwe categorie', - 'without_category' => 'Zonder categorie', - 'update_category' => 'Update categorie', - 'updated_category' => 'Categorie ":name" geüpdatet', - 'categories' => 'Categorieën', - 'edit_category' => 'Wijzig categorie ":name"', - 'no_category' => '(geen categorie)', - 'unknown_category_plain' => 'Geen categorie', - 'category' => 'Categorie', - 'delete_category' => 'Verwijder categorie ":name"', - 'deleted_category' => 'Categorie ":name" verwijderd', - 'store_category' => 'Sla nieuwe categorie op', - 'stored_category' => 'Nieuwe categorie ":name" opgeslagen', - 'without_category_between' => 'Zonder categorie tussen :start en :end', + 'new_category' => 'Nieuwe categorie', + 'create_new_category' => 'Nieuwe categorie', + 'without_category' => 'Zonder categorie', + 'update_category' => 'Update categorie', + 'updated_category' => 'Categorie ":name" geüpdatet', + 'categories' => 'Categorieën', + 'edit_category' => 'Wijzig categorie ":name"', + 'no_category' => '(geen categorie)', + 'unknown_category_plain' => 'Geen categorie', + 'category' => 'Categorie', + 'delete_category' => 'Verwijder categorie ":name"', + 'deleted_category' => 'Categorie ":name" verwijderd', + 'store_category' => 'Sla nieuwe categorie op', + 'stored_category' => 'Nieuwe categorie ":name" opgeslagen', + 'without_category_between' => 'Zonder categorie tussen :start en :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Wijzig uitgave', - 'update_deposit' => 'Wijzig inkomsten', - 'update_transaction' => 'Update transactie', - 'update_transfer' => 'Wijzig overschrijving', - 'updated_withdrawal' => 'Uitgave ":description" geüpdatet', - 'updated_deposit' => 'Inkomsten ":description" geüpdatet', - 'updated_transfer' => 'Overschrijving ":description" geüpdatet', - 'no_changes_withdrawal' => 'Uitgave ":description" is niet gewijzigd.', - 'no_changes_deposit' => 'Inkomsten ":description" is niet gewijzigd.', - 'no_changes_transfer' => 'Overschrijving ":description" is niet gewijzigd.', - 'delete_withdrawal' => 'Verwijder uitgave ":description"', - 'delete_deposit' => 'Verwijder inkomsten ":description"', - 'delete_transfer' => 'Verwijder overschrijving ":description"', - 'deleted_withdrawal' => 'Uitgave ":description" verwijderd', - 'deleted_deposit' => 'Inkomsten ":description" verwijderd', - 'deleted_transfer' => 'Overschrijving ":description" verwijderd', - 'deleted_reconciliation' => 'Afstemming ":description" verwijderd', - 'stored_journal' => 'Nieuw transactie ":description" opgeslagen', - 'stored_journal_no_descr' => 'Uw nieuwe transactie is succesvol aangemaakt', - 'updated_journal_no_descr' => 'De transactie is geüpdatet', - 'select_transactions' => 'Selecteer transacties', - 'rule_group_select_transactions' => '":title" op transacties toepassen', - 'rule_select_transactions' => '":title" op transacties toepassen', - 'stop_selection' => 'Stop met selecteren', - 'reconcile_selected' => 'Afstemmen', - 'mass_delete_journals' => 'Verwijder een aantal transacties', - 'mass_edit_journals' => 'Wijzig een aantal transacties', - 'mass_bulk_journals' => 'Wijzig een aantal transacties in bulk', - 'mass_bulk_journals_explain' => 'Gebruik dit formulier om de onderstaande transacties in één keer aan te passen. Alle transacties die je hier ziet worden geüpdated.', - 'part_of_split' => 'Deze transactie is onderdeel van een gesplitste transactie. Als je niet alle splits hebt geselecteerd dan verander je wellicht maar één stuk van een gesplitste transactie.', - 'bulk_set_new_values' => 'Gebruik de velden hieronder voor nieuwe waarden. Als je ze leeg laat, worden ze leeggemaakt voor alle gebruikers. Denk eraan dat alleen uitgaven een budget kunnen krijgen.', - 'no_bulk_category' => 'Update categorie niet', - 'no_bulk_budget' => 'Update budget niet', - 'no_bulk_tags' => 'Update tag(s) niet', - 'replace_with_these_tags' => 'Vervang met deze tags', - 'append_these_tags' => 'Voeg deze tags toe', - 'mass_edit' => 'Wijzig in lijst', - 'bulk_edit' => 'Wijzig in bulk', - 'mass_delete' => 'Verwijder', - 'cannot_edit_other_fields' => 'Je kan andere velden dan de velden die je hier ziet niet groepsgewijs wijzigen. Er is geen ruimte om ze te laten zien. Als je deze velden toch wilt wijzigen, volg dan de link naast de transactie en wijzig ze stuk voor stuk.', - 'cannot_change_amount_reconciled' => 'Je kan het bedrag van een afgestemde transactie niet aanpassen.', - 'no_budget' => '(geen budget)', - 'no_bill' => '(geen contract)', - 'account_per_budget' => 'Rekening per budget', - 'account_per_category' => 'Rekening per categorie', - 'create_new_object' => 'Opslaan', - 'empty' => '(leeg)', - 'all_other_budgets' => '(alle andere budgetten)', - 'all_other_accounts' => '(alle andere rekeningen)', - 'expense_per_source_account' => 'Uitgaven per bronrekening', - 'expense_per_destination_account' => 'Uitgaven per doelrekening', - 'income_per_destination_account' => 'Inkomen per doelrekening', - 'spent_in_specific_category' => 'Uitgegeven in categorie ":category"', - 'earned_in_specific_category' => 'Verdiend in categorie ":category"', - 'spent_in_specific_tag' => 'Uitgegeven in tag ":tag"', - 'earned_in_specific_tag' => 'Verdiend in tag ":tag"', - 'income_per_source_account' => 'Inkomen per bronrekening', - 'average_spending_per_destination' => 'Gemiddelde uitgave per doelrekening', - 'average_spending_per_source' => 'Gemiddelde uitgave per bronrekening', - 'average_earning_per_source' => 'Gemiddelde inkomsten per bronrekening', - 'average_earning_per_destination' => 'Gemiddelde inkomsten per doelrekening', - 'account_per_tag' => 'Rekening per tag', - 'tag_report_expenses_listed_once' => 'Uitgaven en inkomsten worden nooit dubbel vermeld. Als een transactie meerdere tags heeft komt-ie waarschijnlijk maar één keer voorbij, onder één van de tags. De lijst lijkt dus gegevens te missen maar de bedragen zijn correct.', - 'double_report_expenses_charted_once' => 'Uitgaven en inkomsten worden nooit dubbel vermeld. Als een transactie meerdere tags heeft kan het zijn dat-ie maar onder één tag in beeld komt. De grafiek lijkt dus informatie te missen, maar de bedragen zullen kloppen.', - 'tag_report_chart_single_tag' => 'Deze grafiek slaat op een enkele tag. Als een transactie meerdere tags heeft kan het dus zijn dat je dit in andere grafieken terug ziet komen.', - 'tag' => 'Tag', - 'no_budget_squared' => '(geen budget)', - 'perm-delete-many' => 'Als je veel transacties in één keer verwijderd kan dit je boekhouding aardig verstoren. Wees dus voorzichtig. Je hebt hier ook de mogelijkheid om één split van een gesplitste transactie weg te gooien, dus let op.', - 'mass_deleted_transactions_success' => ':count transactie verwijderd.|:count transacties verwijderd.', - 'mass_edited_transactions_success' => ':count transactie geüpdatet.|:count transacties geüpdatet.', - 'opt_group_' => '(geen rekeningtype)', - 'opt_group_no_account_type' => '(geen rekeningtype)', - 'opt_group_defaultAsset' => 'Standaard betaalrekeningen', - 'opt_group_savingAsset' => 'Spaarrekeningen', - 'opt_group_sharedAsset' => 'Gedeelde betaalrekeningen', - 'opt_group_ccAsset' => 'Creditcards', - 'opt_group_cashWalletAsset' => 'Cash portomonees', - 'opt_group_expense_account' => 'Crediteuren', - 'opt_group_revenue_account' => 'Debiteuren', - 'opt_group_l_Loan' => 'Passiva: lening', - 'opt_group_cash_account' => 'Contant geldrekening', - 'opt_group_l_Debt' => 'Passiva: schuld', - 'opt_group_l_Mortgage' => 'Passiva: hypotheek', - 'opt_group_l_Credit card' => 'Passiva: credit card', - 'notes' => 'Notities', - 'unknown_journal_error' => 'Kon de transactie niet opslaan. Kijk in de logbestanden.', - 'attachment_not_found' => 'Deze bijlage kon niet gevonden worden.', - 'journal_link_bill' => 'Deze transactie is gekoppeld aan contract :name. Om de verbinding te verwijderen haal je het vinkje weg. Gebruik regels om een ander contract te koppelen.', - 'transaction_stored_link' => 'Transactie #{ID} ("{title}") is opgeslagen.', - 'transaction_new_stored_link' => 'Transactie #{ID} is opgeslagen.', - 'transaction_updated_link' => 'Transactie #{ID} ("{title}") is geüpdatet.', - 'transaction_updated_no_changes' => 'Transactie #{ID} ("{title}") is niet gewijzigd.', - 'first_split_decides' => 'De eerste split bepaalt wat hier staat', - 'first_split_overrules_source' => 'De eerste split kan de bronrekening overschrijven', - 'first_split_overrules_destination' => 'De eerste split kan de doelrekening overschrijven', - 'spent_x_of_y' => '{amount} van {total} uitgegeven', + 'wait_loading_transaction' => 'Wacht even tot het formulier geladen is', + 'wait_loading_data' => 'Wacht even tot de gegevens er zijn...', + 'wait_attachments' => 'Wacht even tot de bijlagen geüpload zijn.', + 'errors_upload' => 'De upload is mislukt. Check je browserconsole, daar zie je de foutmelding.', + 'amount_foreign_if' => 'Optioneel, bedrag in vreemde valuta', + 'amount_destination_account' => 'Bedrag in de valuta van de doelrekening', + 'edit_transaction_title' => 'Wijzig transactie ":description"', + 'unreconcile' => 'Ongedaan maken van afstemming', + 'update_withdrawal' => 'Wijzig uitgave', + 'update_deposit' => 'Wijzig inkomsten', + 'update_transaction' => 'Update transactie', + 'update_transfer' => 'Wijzig overschrijving', + 'updated_withdrawal' => 'Uitgave ":description" geüpdatet', + 'updated_deposit' => 'Inkomsten ":description" geüpdatet', + 'updated_transfer' => 'Overschrijving ":description" geüpdatet', + 'no_changes_withdrawal' => 'Uitgave ":description" is niet gewijzigd.', + 'no_changes_deposit' => 'Inkomsten ":description" is niet gewijzigd.', + 'no_changes_transfer' => 'Overschrijving ":description" is niet gewijzigd.', + 'delete_withdrawal' => 'Verwijder uitgave ":description"', + 'delete_deposit' => 'Verwijder inkomsten ":description"', + 'delete_transfer' => 'Verwijder overschrijving ":description"', + 'deleted_withdrawal' => 'Uitgave ":description" verwijderd', + 'deleted_deposit' => 'Inkomsten ":description" verwijderd', + 'deleted_transfer' => 'Overschrijving ":description" verwijderd', + 'deleted_reconciliation' => 'Afstemming ":description" verwijderd', + 'stored_journal' => 'Nieuw transactie ":description" opgeslagen', + 'stored_journal_js' => 'Nieuw transactie "%{description}" opgeslagen', + 'stored_journal_no_descr' => 'Je nieuwe transactie is succesvol aangemaakt', + 'updated_journal_no_descr' => 'De transactie is geüpdatet', + 'select_transactions' => 'Selecteer transacties', + 'rule_group_select_transactions' => '":title" op transacties toepassen', + 'rule_select_transactions' => '":title" op transacties toepassen', + 'stop_selection' => 'Stop met selecteren', + 'reconcile_selected' => 'Afstemmen', + 'mass_delete_journals' => 'Verwijder een aantal transacties', + 'mass_edit_journals' => 'Wijzig een aantal transacties', + 'mass_bulk_journals' => 'Wijzig een aantal transacties in bulk', + 'mass_bulk_journals_explain' => 'Gebruik dit formulier om de onderstaande transacties in één keer aan te passen. Alle transacties die je hier ziet worden geüpdated.', + 'part_of_split' => 'Deze transactie is onderdeel van een gesplitste transactie. Als je niet alle splits hebt geselecteerd dan verander je wellicht maar één stuk van een gesplitste transactie.', + 'bulk_set_new_values' => 'Gebruik de velden hieronder voor nieuwe waarden. Als je ze leeg laat, worden ze leeggemaakt voor alle gebruikers. Denk eraan dat alleen uitgaven een budget kunnen krijgen.', + 'no_bulk_category' => 'Update categorie niet', + 'no_bulk_budget' => 'Update budget niet', + 'no_bulk_tags' => 'Update tag(s) niet', + 'replace_with_these_tags' => 'Vervang met deze tags', + 'append_these_tags' => 'Voeg deze tags toe', + 'mass_edit' => 'Wijzig in lijst', + 'bulk_edit' => 'Wijzig in bulk', + 'mass_delete' => 'Verwijder', + 'cannot_edit_other_fields' => 'Je kan andere velden dan de velden die je hier ziet niet groepsgewijs wijzigen. Er is geen ruimte om ze te laten zien. Als je deze velden toch wilt wijzigen, volg dan de link naast de transactie en wijzig ze stuk voor stuk.', + 'cannot_change_amount_reconciled' => 'Je kan het bedrag van een afgestemde transactie niet aanpassen.', + 'no_budget' => '(geen budget)', + 'no_bill' => '(geen contract)', + 'account_per_budget' => 'Rekening per budget', + 'account_per_category' => 'Rekening per categorie', + 'create_new_object' => 'Opslaan', + 'empty' => '(leeg)', + 'all_other_budgets' => '(alle andere budgetten)', + 'all_other_accounts' => '(alle andere rekeningen)', + 'expense_per_source_account' => 'Uitgaven per bronrekening', + 'expense_per_destination_account' => 'Uitgaven per doelrekening', + 'income_per_destination_account' => 'Inkomen per doelrekening', + 'spent_in_specific_category' => 'Uitgegeven in categorie ":category"', + 'earned_in_specific_category' => 'Verdiend in categorie ":category"', + 'spent_in_specific_tag' => 'Uitgegeven in tag ":tag"', + 'earned_in_specific_tag' => 'Verdiend in tag ":tag"', + 'income_per_source_account' => 'Inkomen per bronrekening', + 'average_spending_per_destination' => 'Gemiddelde uitgave per doelrekening', + 'average_spending_per_source' => 'Gemiddelde uitgave per bronrekening', + 'average_earning_per_source' => 'Gemiddelde inkomsten per bronrekening', + 'average_earning_per_destination' => 'Gemiddelde inkomsten per doelrekening', + 'account_per_tag' => 'Rekening per tag', + 'tag_report_expenses_listed_once' => 'Uitgaven en inkomsten worden nooit dubbel vermeld. Als een transactie meerdere tags heeft komt-ie waarschijnlijk maar één keer voorbij, onder één van de tags. De lijst lijkt dus gegevens te missen maar de bedragen zijn correct.', + 'double_report_expenses_charted_once' => 'Uitgaven en inkomsten worden nooit dubbel vermeld. Als een transactie meerdere tags heeft kan het zijn dat-ie maar onder één tag in beeld komt. De grafiek lijkt dus informatie te missen, maar de bedragen zullen kloppen.', + 'tag_report_chart_single_tag' => 'Deze grafiek slaat op een enkele tag. Als een transactie meerdere tags heeft kan het dus zijn dat je dit in andere grafieken terug ziet komen.', + 'tag' => 'Tag', + 'no_budget_squared' => '(geen budget)', + 'perm-delete-many' => 'Als je veel transacties in één keer verwijderd kan dit je boekhouding aardig verstoren. Wees dus voorzichtig. Je hebt hier ook de mogelijkheid om één split van een gesplitste transactie weg te gooien, dus let op.', + 'mass_deleted_transactions_success' => ':count transactie verwijderd.|:count transacties verwijderd.', + 'mass_edited_transactions_success' => ':count transactie geüpdatet.|:count transacties geüpdatet.', + 'opt_group_' => '(geen rekeningtype)', + 'opt_group_no_account_type' => '(geen rekeningtype)', + 'opt_group_defaultAsset' => 'Standaard betaalrekeningen', + 'opt_group_savingAsset' => 'Spaarrekeningen', + 'opt_group_sharedAsset' => 'Gedeelde betaalrekeningen', + 'opt_group_ccAsset' => 'Creditcards', + 'opt_group_cashWalletAsset' => 'Cash portomonees', + 'opt_group_expense_account' => 'Crediteuren', + 'opt_group_revenue_account' => 'Debiteuren', + 'opt_group_l_Loan' => 'Passiva: lening', + 'opt_group_cash_account' => 'Contant geldrekening', + 'opt_group_l_Debt' => 'Passiva: schuld', + 'opt_group_l_Mortgage' => 'Passiva: hypotheek', + 'opt_group_l_Credit card' => 'Passiva: credit card', + 'notes' => 'Notities', + 'unknown_journal_error' => 'Kon de transactie niet opslaan. Kijk in de logbestanden.', + 'attachment_not_found' => 'Deze bijlage kon niet gevonden worden.', + 'journal_link_bill' => 'Deze transactie is gekoppeld aan contract :name. Om de verbinding te verwijderen haal je het vinkje weg. Gebruik regels om een ander contract te koppelen.', + 'transaction_stored_link' => 'Transactie #{ID} ("{title}") is opgeslagen.', + 'transaction_new_stored_link' => 'Transactie #{ID} is opgeslagen.', + 'transaction_updated_link' => 'Transactie #{ID} ("{title}") is geüpdatet.', + 'transaction_updated_no_changes' => 'Transactie #{ID} ("{title}") is niet gewijzigd.', + 'first_split_decides' => 'De eerste split bepaalt wat hier staat', + 'first_split_overrules_source' => 'De eerste split kan de bronrekening overschrijven', + 'first_split_overrules_destination' => 'De eerste split kan de doelrekening overschrijven', + 'spent_x_of_y' => '{amount} van {total} uitgegeven', // new user: - 'welcome' => 'Welkom bij Firefly III!', - 'submit' => 'Invoeren', - 'submission' => 'Indienen', - 'submit_yes_really' => 'Invoeren (ik weet wat ik doe)', - 'getting_started' => 'Aan de start!', - 'to_get_started' => 'Het is goed om te zien dat de installatie van Firefly III gelukt is. Voer de naam van je bank in en het saldo van je belangrijkste betaalrekening. Meerdere rekeningen kan je later toevoegen, maar we moeten ergens beginnen natuurlijk.', - 'savings_balance_text' => 'Firefly III maakt automatisch een spaarrekening voor je. Daar zit normaal geen geld in, maar je kan hier opgeven hoeveel er op staat.', - 'finish_up_new_user' => 'That\'s it! Druk op Opslaan om door te gaan. Je gaat dan naar de homepage van Firefly III.', - 'stored_new_accounts_new_user' => 'Hoera! Je nieuwe accounts zijn opgeslagen.', - 'set_preferred_language' => 'Als je Firefly III liever in een andere taal gebruikt, geef dat dan hier aan.', - 'language' => 'Taal', - 'new_savings_account' => ':bank_name spaarrekening', - 'cash_wallet' => 'Cash-rekening', - 'currency_not_present' => 'Geen zorgen als de valuta die je gewend bent er niet tussen staat. Je kan je eigen valuta maken onder Opties > Valuta.', + 'welcome' => 'Welkom bij Firefly III!', + 'submit' => 'Invoeren', + 'submission' => 'Indienen', + 'submit_yes_really' => 'Invoeren (ik weet wat ik doe)', + 'getting_started' => 'Aan de start!', + 'to_get_started' => 'Het is goed om te zien dat de installatie van Firefly III gelukt is. Voer de naam van je bank in en het saldo van je belangrijkste betaalrekening. Meerdere rekeningen kan je later toevoegen, maar we moeten ergens beginnen natuurlijk.', + 'savings_balance_text' => 'Firefly III maakt automatisch een spaarrekening voor je. Daar zit normaal geen geld in, maar je kan hier opgeven hoeveel er op staat.', + 'finish_up_new_user' => 'That\'s it! Druk op Opslaan om door te gaan. Je gaat dan naar de homepage van Firefly III.', + 'stored_new_accounts_new_user' => 'Hoera! Je nieuwe accounts zijn opgeslagen.', + 'set_preferred_language' => 'Als je Firefly III liever in een andere taal gebruikt, geef dat dan hier aan.', + 'language' => 'Taal', + 'new_savings_account' => ':bank_name spaarrekening', + 'cash_wallet' => 'Cash-rekening', + 'currency_not_present' => 'Geen zorgen als de valuta die je gewend bent er niet tussen staat. Je kan je eigen valuta maken onder Opties > Valuta.', // home page: - 'transaction_table_description' => 'Een tabel met je transacties', - 'opposing_account' => 'Tegenrekening', - 'yourAccounts' => 'Je betaalrekeningen', - 'your_accounts' => 'Je rekeningoverzicht', - 'category_overview' => 'Categorieoverzicht', - 'expense_overview' => 'Crediteurenoverzicht', - 'revenue_overview' => 'Debiteurenoverzicht', - 'budgetsAndSpending' => 'Budgetten en uitgaven', - 'budgets_and_spending' => 'Budgetten en uitgaven', - 'go_to_budget' => 'Ga naar budget "{budget}"', - 'go_to_deposits' => 'Ga naar je inkomsten', - 'go_to_expenses' => 'Ga naar je uitgaven', - 'savings' => 'Sparen', - 'newWithdrawal' => 'Nieuwe uitgave', - 'newDeposit' => 'Nieuwe inkomsten', - 'newTransfer' => 'Nieuwe overschrijving', - 'bills_to_pay' => 'Openstaande contracten', - 'per_day' => 'Per dag', - 'left_to_spend_per_day' => 'Te besteden per dag', - 'bills_paid' => 'Betaalde contracten', - 'custom_period' => 'Aangepaste periode', - 'reset_to_current' => 'Reset naar huidige periode', - 'select_period' => 'Selecteer een periode', + 'transaction_table_description' => 'Een tabel met je transacties', + 'opposing_account' => 'Tegenrekening', + 'yourAccounts' => 'Je betaalrekeningen', + 'your_accounts' => 'Je rekeningoverzicht', + 'category_overview' => 'Categorieoverzicht', + 'expense_overview' => 'Crediteurenoverzicht', + 'revenue_overview' => 'Debiteurenoverzicht', + 'budgetsAndSpending' => 'Budgetten en uitgaven', + 'budgets_and_spending' => 'Budgetten en uitgaven', + 'go_to_budget' => 'Ga naar budget "{budget}"', + 'go_to_deposits' => 'Ga naar je inkomsten', + 'go_to_expenses' => 'Ga naar je uitgaven', + 'savings' => 'Sparen', + 'newWithdrawal' => 'Nieuwe uitgave', + 'newDeposit' => 'Nieuwe inkomsten', + 'newTransfer' => 'Nieuwe overschrijving', + 'bills_to_pay' => 'Openstaande contracten', + 'per_day' => 'Per dag', + 'left_to_spend_per_day' => 'Te besteden per dag', + 'bills_paid' => 'Betaalde contracten', + 'custom_period' => 'Aangepaste periode', + 'reset_to_current' => 'Reset naar huidige periode', + 'select_period' => 'Selecteer een periode', // menu and titles, should be recycled as often as possible: - 'currency' => 'Valuta', - 'preferences' => 'Voorkeuren', - 'logout' => 'Uitloggen', - 'logout_other_sessions' => 'Alle andere sessies afmelden', - 'toggleNavigation' => 'Navigatie aan of uit', - 'searchPlaceholder' => 'Zoeken...', - 'version' => 'Versie', - 'dashboard' => 'Dashboard', - 'income_and_expense' => 'Inkomsten en uitgaven', - 'all_money' => 'Al je geld', - 'unknown_source_plain' => 'Onbekend bronrekening', - 'unknown_dest_plain' => 'Onbekende doelrekening', - 'unknown_any_plain' => 'Onbekende rekening', - 'unknown_budget_plain' => 'Geen budget', - 'available_budget' => 'Beschikbaar budget ({currency})', - 'currencies' => 'Valuta', - 'activity' => 'Activiteit', - 'usage' => 'Gebruik', - 'accounts' => 'Rekeningen', - 'Asset account' => 'Betaalrekening', - 'Default account' => 'Betaalrekening', - 'Expense account' => 'Crediteur', - 'Revenue account' => 'Debiteur', - 'Initial balance account' => 'Startbalansrekening', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Schuld', - 'account_type_Loan' => 'Lening', - 'account_type_Mortgage' => 'Hypotheek', - 'account_type_debt' => 'Schuld', - 'account_type_loan' => 'Lening', - 'account_type_mortgage' => 'Hypotheek', - 'account_type_Credit card' => 'Credit card', - 'credit_card_type_monthlyFull' => 'Volledige betaling elke maand', - 'liability_direction_credit' => 'Ik krijg dit bedrag terug', - 'liability_direction_debit' => 'Ik moet dit bedrag terugbetalen', - 'liability_direction_credit_short' => 'Schuldeiser', - 'liability_direction_debit_short' => 'Schuldenaar', - 'liability_direction__short' => 'Onbekend', - 'liability_direction_null_short' => 'Onbekend', - 'Liability credit' => 'Leningkrediet', - 'budgets' => 'Budgetten', - 'tags' => 'Tags', - 'reports' => 'Overzichten', - 'transactions' => 'Transacties', - 'expenses' => 'Uitgaven', - 'income' => 'Inkomsten', - 'transfers' => 'Overschrijvingen', - 'moneyManagement' => 'Geldbeheer', - 'money_management' => 'Geldbeheer', - 'tools' => 'Extra', - 'piggyBanks' => 'Spaarpotjes', - 'piggy_banks' => 'Spaarpotjes', - 'amount_x_of_y' => '{current} van {total}', - 'bills' => 'Contracten', - 'withdrawal' => 'Uitgave', - 'opening_balance' => 'Startsaldo', - 'deposit' => 'Inkomsten', - 'account' => 'Rekening', - 'transfer' => 'Overschrijving', - 'Withdrawal' => 'Uitgave', - 'Deposit' => 'Inkomsten', - 'Transfer' => 'Overschrijving', - 'bill' => 'Contract', - 'yes' => 'Ja', - 'no' => 'Nee', - 'amount' => 'Bedrag', - 'overview' => 'Overzicht', - 'saveOnAccount' => 'Sparen op rekening', - 'unknown' => 'Onbekend', - 'monthly' => 'Maandelijks', - 'profile' => 'Profiel', - 'errors' => 'Fouten', - 'debt_start_date' => 'Begindatum van schuld', - 'debt_start_amount' => 'Beginbedrag van schuld', - 'debt_start_amount_help' => 'Het is handig om hier een negatief bedrag in te stellen. Lees de help-pagina\'s ((?)-icoontje rechtsboven) voor meer info.', - 'interest_period_help' => 'Dit veld doet verder niks. Firefly III gaat dit niet voor je uitrekenen. Banken pakken dit toch altijd net anders aan.', - 'store_new_liabilities_account' => 'Nieuwe passiva opslaan', - 'edit_liabilities_account' => 'Passiva ":name" wijzigen', - 'financial_control' => 'Financieel overzicht', - 'accounting' => 'Boekhouden', - 'automation' => 'Automatisering', - 'others' => 'Overige', - 'classification' => 'Indeling', - 'store_transaction' => 'Transactie opslaan', + 'currency' => 'Valuta', + 'preferences' => 'Voorkeuren', + 'logout' => 'Uitloggen', + 'logout_other_sessions' => 'Alle andere sessies afmelden', + 'toggleNavigation' => 'Navigatie aan of uit', + 'searchPlaceholder' => 'Zoeken...', + 'version' => 'Versie', + 'dashboard' => 'Dashboard', + 'income_and_expense' => 'Inkomsten en uitgaven', + 'all_money' => 'Al je geld', + 'unknown_source_plain' => 'Onbekend bronrekening', + 'unknown_dest_plain' => 'Onbekende doelrekening', + 'unknown_any_plain' => 'Onbekende rekening', + 'unknown_budget_plain' => 'Geen budget', + 'available_budget' => 'Beschikbaar budget ({currency})', + 'currencies' => 'Valuta', + 'activity' => 'Activiteit', + 'usage' => 'Gebruik', + 'accounts' => 'Rekeningen', + 'Asset account' => 'Betaalrekening', + 'Default account' => 'Betaalrekening', + 'Expense account' => 'Crediteur', + 'Revenue account' => 'Debiteur', + 'Initial balance account' => 'Startbalansrekening', + 'account_type_Asset account' => 'Betaalrekening', + 'account_type_Expense account' => 'Crediteur', + 'account_type_Revenue account' => 'Debiteur', + 'account_type_Debt' => 'Schuld', + 'account_type_Loan' => 'Lening', + 'account_type_Mortgage' => 'Hypotheek', + 'account_type_debt' => 'Schuld', + 'account_type_loan' => 'Lening', + 'account_type_mortgage' => 'Hypotheek', + 'account_type_Credit card' => 'Credit card', + 'credit_card_type_monthlyFull' => 'Volledige betaling elke maand', + 'liability_direction_credit' => 'Ik krijg dit bedrag terug', + 'liability_direction_debit' => 'Ik moet dit bedrag terugbetalen', + 'liability_direction_credit_short' => 'Schuldeiser', + 'liability_direction_debit_short' => 'Schuldenaar', + 'liability_direction__short' => 'Onbekend', + 'liability_direction_null_short' => 'Onbekend', + 'Liability credit' => 'Leningkrediet', + 'budgets' => 'Budgetten', + 'tags' => 'Tags', + 'reports' => 'Overzichten', + 'transactions' => 'Transacties', + 'expenses' => 'Uitgaven', + 'income' => 'Inkomsten', + 'transfers' => 'Overschrijvingen', + 'moneyManagement' => 'Geldbeheer', + 'money_management' => 'Geldbeheer', + 'tools' => 'Extra', + 'piggyBanks' => 'Spaarpotjes', + 'piggy_banks' => 'Spaarpotjes', + 'amount_x_of_y' => '{current} van {total}', + 'bills' => 'Contracten', + 'withdrawal' => 'Uitgave', + 'opening_balance' => 'Startsaldo', + 'deposit' => 'Inkomsten', + 'account' => 'Rekening', + 'transfer' => 'Overschrijving', + 'Withdrawal' => 'Uitgave', + 'Deposit' => 'Inkomsten', + 'Transfer' => 'Overschrijving', + 'bill' => 'Contract', + 'yes' => 'Ja', + 'no' => 'Nee', + 'amount' => 'Bedrag', + 'overview' => 'Overzicht', + 'saveOnAccount' => 'Sparen op rekening', + 'unknown' => 'Onbekend', + 'monthly' => 'Maandelijks', + 'profile' => 'Profiel', + 'errors' => 'Fouten', + 'debt_start_date' => 'Begindatum van schuld', + 'debt_start_amount' => 'Beginbedrag van schuld', + 'debt_start_amount_help' => 'Het is handig om hier een negatief bedrag in te stellen. Lees de help-pagina\'s ((?)-icoontje rechtsboven) voor meer info.', + 'interest_period_help' => 'Dit veld doet verder niks. Firefly III gaat dit niet voor je uitrekenen. Banken pakken dit toch altijd net anders aan.', + 'store_new_liabilities_account' => 'Nieuwe passiva opslaan', + 'edit_liabilities_account' => 'Passiva ":name" wijzigen', + 'financial_control' => 'Financieel overzicht', + 'accounting' => 'Boekhouden', + 'automation' => 'Automatisering', + 'others' => 'Overige', + 'classification' => 'Indeling', + 'store_transaction' => 'Transactie opslaan', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Standaard financieel rapport (:start tot :end)', - 'report_audit' => 'Transactiehistorie-overzicht van :start tot :end', - 'report_category' => 'Categorierapport van :start tot :end', - 'report_double' => 'Debiteuren/crediteurenrapport tussen :start en :end', - 'report_budget' => 'Budgetrapport van :start tot :end', - 'report_tag' => 'Tagrapport van :start tot :end', - 'quick_link_reports' => 'Snelle links', - 'quick_link_examples' => 'Dit zijn wat voorbeelden om mee te beginnnen. Check de help-pagina\'s onder de (?)-knop voor meer info over de overzichten en de "magic words" die je kan gebruiken.', - 'quick_link_default_report' => 'Standaard financieel rapport', - 'quick_link_audit_report' => 'Transactiehistorie-overzicht', - 'report_this_month_quick' => 'Deze maand, alle rekeningen', - 'report_last_month_quick' => 'Afgelopen maand, alle rekeningen', - 'report_this_year_quick' => 'Dit jaar, alle rekeningen', - 'report_this_fiscal_year_quick' => 'Huidig boekjaar, alle rekeningen', - 'report_all_time_quick' => 'Gehele periode, alle rekeningen', - 'reports_can_bookmark' => 'Je kan rapporten aan je favorieten toevoegen.', - 'incomeVsExpenses' => 'Inkomsten tegenover uitgaven', - 'accountBalances' => 'Rekeningsaldi', - 'balanceStart' => 'Saldo aan het begin van de periode', - 'balanceEnd' => 'Saldo aan het einde van de periode', - 'splitByAccount' => 'Per betaalrekening', - 'coveredWithTags' => 'Gecorrigeerd met tags', - 'leftInBudget' => 'Over van budget', - 'left_in_debt' => 'Verschuldigd bedrag', - 'sumOfSums' => 'Alles bij elkaar', - 'noCategory' => '(zonder categorie)', - 'notCharged' => '(Nog) niet betaald', - 'inactive' => 'Niet actief', - 'active' => 'Actief', - 'difference' => 'Verschil', - 'money_flowing_in' => 'In', - 'money_flowing_out' => 'Uit', - 'topX' => 'top :number', - 'show_full_list' => 'Laat hele lijst zien', - 'show_only_top' => 'Alleen top :number', - 'report_type' => 'Rapporttype', - 'report_type_default' => 'Standard financieel rapport', - 'report_type_audit' => 'Transactiehistorie-overzicht (audit)', - 'report_type_category' => 'Categorierapport', - 'report_type_budget' => 'Budgetrapport', - 'report_type_tag' => 'Tagrapport', - 'report_type_double' => 'Debiteuren/crediteurenrapport', - 'more_info_help' => 'Meer informatie over deze rapporten vind je in de hulppagina\'s. Klik daarvoor op het (?) icoontje rechtsboven.', - 'report_included_accounts' => 'Accounts in rapport', - 'report_date_range' => 'Datumbereik', - 'report_preset_ranges' => 'Standaardbereik', - 'shared' => 'Gedeeld', - 'fiscal_year' => 'Boekjaar', - 'income_entry' => 'Inkomsten naar rekening ":name" tussen :start en :end', - 'expense_entry' => 'Uitgaven naar rekening ":name" tussen :start en :end', - 'category_entry' => 'Inkomen en uitgaven in categorie ":name" tussen :start en :end', - 'budget_spent_amount' => 'Uitgaven in budget ":budget" tussen :start en :end', - 'balance_amount' => 'Uitgaven in :budget betaald van rekening ":account" tussen :start en :end', - 'no_audit_activity' => 'Geen activiteit op betaalrekening :account_name tussen :start en :end.', - 'audit_end_balance' => 'Aan het einde van de dag, :end, was het saldo van betaalrekening :account_name :balance', - 'reports_extra_options' => 'Extra opties', - 'report_has_no_extra_options' => 'Er zijn geen extra opties voor dit overzicht', - 'reports_submit' => 'Bekijk overzicht', - 'end_after_start_date' => 'Einddatum moet na begindatum liggen.', - 'select_category' => 'Selecteer categorie(ën)', - 'select_budget' => 'Selecteer budget(ten).', - 'select_tag' => 'Selecteer tag(s).', - 'income_per_category' => 'Inkomen per categorie', - 'expense_per_category' => 'Uitgaven per categorie', - 'expense_per_budget' => 'Uitgaven per budget', - 'income_per_account' => 'Inkomen per rekening', - 'expense_per_account' => 'Uitgaven per rekening', - 'expense_per_tag' => 'Uitgaven per tag', - 'income_per_tag' => 'Inkomsten per tag', - 'include_expense_not_in_budget' => 'Inclusief uitgaven niet in deze budget(ten)', - 'include_expense_not_in_account' => 'Inclusief uitgaven niet vanaf deze rekening(en)', - 'include_expense_not_in_category' => 'Inclusief uitgaven niet in deze categorie(ën)', - 'include_income_not_in_category' => 'Inclusief inkomsten niet in deze categorie(ën)', - 'include_income_not_in_account' => 'Inclusief inkomsten niet op deze rekening(en)', - 'include_income_not_in_tags' => 'Inclusief inkomsten niet getagged met deze tag(s)', - 'include_expense_not_in_tags' => 'Inclusief uitgaven niet getagged met deze tag(s)', - 'everything_else' => 'De rest', - 'income_and_expenses' => 'Inkomsten en uitgaven', - 'spent_average' => 'Uitgegeven (gemiddeld)', - 'income_average' => 'Inkomsten (gemiddeld)', - 'transaction_count' => 'Transacties', - 'average_spending_per_account' => 'Gemiddeld uitgegeven per rekening', - 'average_income_per_account' => 'Gemiddeld verdiend per rekening', - 'total' => 'Totaal', - 'description' => 'Omschrijving', - 'sum_of_period' => 'Som van periode', - 'average_in_period' => 'Gemiddelde in periode', - 'account_role_defaultAsset' => 'Standaard betaalrekening', - 'account_role_sharedAsset' => 'Gedeelde betaalrekening', - 'account_role_savingAsset' => 'Spaarrekening', - 'account_role_ccAsset' => 'Credit card', - 'account_role_cashWalletAsset' => 'Cash', - 'budget_chart_click' => 'Klik op een budgetnaam in de tabel hierboven om een ​​grafiek te zien.', - 'category_chart_click' => 'Klik op een categorienaam in de tabel hierboven om een ​​grafiek te zien.', - 'in_out_accounts' => 'Inkomsten en uitgaven per combinatie', - 'in_out_accounts_per_asset' => 'Inkomsten en uitgaven (per betaalrekening)', - 'in_out_per_category' => 'Verdiend en uitgegeven per categorie', - 'out_per_budget' => 'Uitgaven per budget', - 'select_expense_revenue' => 'Selecteer debiteur+crediteur', - 'multi_currency_report_sum' => 'Omdat deze tabel rekeningen met diverse valuta bevat, kan het zijn dat de optelsommen nergens op slaan. De pagina valt altijd terug op je standaardvaluta.', - 'sum_in_default_currency' => 'Deze lijst is altijd in je standaardvaluta.', - 'net_filtered_prefs' => 'Deze grafiek bevat nooit betaalrekeningen die je niet het vinkje "meetellen in kapitaal" hebt gegeven.', + 'report_default' => 'Standaard financieel rapport (:start tot :end)', + 'report_audit' => 'Transactiehistorie-overzicht van :start tot :end', + 'report_category' => 'Categorierapport van :start tot :end', + 'report_double' => 'Debiteuren/crediteurenrapport tussen :start en :end', + 'report_budget' => 'Budgetrapport van :start tot :end', + 'report_tag' => 'Tagrapport van :start tot :end', + 'quick_link_reports' => 'Snelle links', + 'quick_link_examples' => 'Dit zijn wat voorbeelden om mee te beginnnen. Check de help-pagina\'s onder de (?)-knop voor meer info over de overzichten en de "magic words" die je kan gebruiken.', + 'quick_link_default_report' => 'Standaard financieel rapport', + 'quick_link_audit_report' => 'Transactiehistorie-overzicht', + 'report_this_month_quick' => 'Deze maand, alle rekeningen', + 'report_last_month_quick' => 'Afgelopen maand, alle rekeningen', + 'report_this_year_quick' => 'Dit jaar, alle rekeningen', + 'report_this_fiscal_year_quick' => 'Huidig boekjaar, alle rekeningen', + 'report_all_time_quick' => 'Gehele periode, alle rekeningen', + 'reports_can_bookmark' => 'Je kan rapporten aan je favorieten toevoegen.', + 'incomeVsExpenses' => 'Inkomsten tegenover uitgaven', + 'accountBalances' => 'Rekeningsaldi', + 'balanceStart' => 'Saldo aan het begin van de periode', + 'balanceEnd' => 'Saldo aan het einde van de periode', + 'splitByAccount' => 'Per betaalrekening', + 'coveredWithTags' => 'Gecorrigeerd met tags', + 'leftInBudget' => 'Over van budget', + 'left_in_debt' => 'Verschuldigd bedrag', + 'sumOfSums' => 'Alles bij elkaar', + 'noCategory' => '(zonder categorie)', + 'notCharged' => '(Nog) niet betaald', + 'inactive' => 'Niet actief', + 'active' => 'Actief', + 'difference' => 'Verschil', + 'money_flowing_in' => 'In', + 'money_flowing_out' => 'Uit', + 'topX' => 'top :number', + 'show_full_list' => 'Laat hele lijst zien', + 'show_only_top' => 'Alleen top :number', + 'report_type' => 'Rapporttype', + 'report_type_default' => 'Standard financieel rapport', + 'report_type_audit' => 'Transactiehistorie-overzicht (audit)', + 'report_type_category' => 'Categorierapport', + 'report_type_budget' => 'Budgetrapport', + 'report_type_tag' => 'Tagrapport', + 'report_type_double' => 'Debiteuren/crediteurenrapport', + 'more_info_help' => 'Meer informatie over deze rapporten vind je in de hulppagina\'s. Klik daarvoor op het (?) icoontje rechtsboven.', + 'report_included_accounts' => 'Accounts in rapport', + 'report_date_range' => 'Datumbereik', + 'report_preset_ranges' => 'Standaardbereik', + 'shared' => 'Gedeeld', + 'fiscal_year' => 'Boekjaar', + 'income_entry' => 'Inkomsten naar rekening ":name" tussen :start en :end', + 'expense_entry' => 'Uitgaven naar rekening ":name" tussen :start en :end', + 'category_entry' => 'Inkomen en uitgaven in categorie ":name" tussen :start en :end', + 'budget_spent_amount' => 'Uitgaven in budget ":budget" tussen :start en :end', + 'balance_amount' => 'Uitgaven in :budget betaald van rekening ":account" tussen :start en :end', + 'no_audit_activity' => 'Geen activiteit op betaalrekening :account_name tussen :start en :end.', + 'audit_end_balance' => 'Aan het einde van de dag, :end, was het saldo van betaalrekening :account_name :balance', + 'reports_extra_options' => 'Extra opties', + 'report_has_no_extra_options' => 'Er zijn geen extra opties voor dit overzicht', + 'reports_submit' => 'Bekijk overzicht', + 'end_after_start_date' => 'Einddatum moet na begindatum liggen.', + 'select_category' => 'Selecteer categorie(ën)', + 'select_budget' => 'Selecteer budget(ten).', + 'select_tag' => 'Selecteer tag(s).', + 'income_per_category' => 'Inkomen per categorie', + 'expense_per_category' => 'Uitgaven per categorie', + 'expense_per_budget' => 'Uitgaven per budget', + 'income_per_account' => 'Inkomen per rekening', + 'expense_per_account' => 'Uitgaven per rekening', + 'expense_per_tag' => 'Uitgaven per tag', + 'income_per_tag' => 'Inkomsten per tag', + 'include_expense_not_in_budget' => 'Inclusief uitgaven niet in deze budget(ten)', + 'include_expense_not_in_account' => 'Inclusief uitgaven niet vanaf deze rekening(en)', + 'include_expense_not_in_category' => 'Inclusief uitgaven niet in deze categorie(ën)', + 'include_income_not_in_category' => 'Inclusief inkomsten niet in deze categorie(ën)', + 'include_income_not_in_account' => 'Inclusief inkomsten niet op deze rekening(en)', + 'include_income_not_in_tags' => 'Inclusief inkomsten niet getagged met deze tag(s)', + 'include_expense_not_in_tags' => 'Inclusief uitgaven niet getagged met deze tag(s)', + 'everything_else' => 'De rest', + 'income_and_expenses' => 'Inkomsten en uitgaven', + 'spent_average' => 'Uitgegeven (gemiddeld)', + 'income_average' => 'Inkomsten (gemiddeld)', + 'transaction_count' => 'Transacties', + 'average_spending_per_account' => 'Gemiddeld uitgegeven per rekening', + 'average_income_per_account' => 'Gemiddeld verdiend per rekening', + 'total' => 'Totaal', + 'description' => 'Omschrijving', + 'sum_of_period' => 'Som van periode', + 'average_in_period' => 'Gemiddelde in periode', + 'account_role_defaultAsset' => 'Standaard betaalrekening', + 'account_role_sharedAsset' => 'Gedeelde betaalrekening', + 'account_role_savingAsset' => 'Spaarrekening', + 'account_role_ccAsset' => 'Credit card', + 'account_role_cashWalletAsset' => 'Cash', + 'budget_chart_click' => "Klik op een budgetnaam in de tabel hierboven om een \u{200b}\u{200b}grafiek te zien.", + 'category_chart_click' => "Klik op een categorienaam in de tabel hierboven om een \u{200b}\u{200b}grafiek te zien.", + 'in_out_accounts' => 'Inkomsten en uitgaven per combinatie', + 'in_out_accounts_per_asset' => 'Inkomsten en uitgaven (per betaalrekening)', + 'in_out_per_category' => 'Verdiend en uitgegeven per categorie', + 'out_per_budget' => 'Uitgaven per budget', + 'select_expense_revenue' => 'Selecteer debiteur+crediteur', + 'multi_currency_report_sum' => 'Omdat deze tabel rekeningen met diverse valuta bevat, kan het zijn dat de optelsommen nergens op slaan. De pagina valt altijd terug op je standaardvaluta.', + 'sum_in_default_currency' => 'Deze lijst is altijd in je standaardvaluta.', + 'net_filtered_prefs' => 'Deze grafiek bevat nooit betaalrekeningen die je niet het vinkje "meetellen in kapitaal" hebt gegeven.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Diagram', - 'month' => 'Maand', - 'budget' => 'Budget', - 'spent' => 'Uitgegeven', - 'spent_capped' => 'Uitgegeven (beperkt)', - 'spent_in_budget' => 'Uitgegeven in budget', - 'left_to_spend' => 'Over om uit te geven', - 'earned' => 'Verdiend', - 'overspent' => 'Teveel uitgegeven', - 'left' => 'Over', - 'max-amount' => 'Maximumbedrag', - 'min-amount' => 'Minimumbedrag', - 'journal-amount' => 'Bedrag voor dit contract', - 'name' => 'Naam', - 'date' => 'Datum', - 'date_and_time' => 'Datum en tijd', - 'time' => 'Tijd', - 'paid' => 'Betaald', - 'unpaid' => 'Niet betaald', - 'day' => 'Dag', - 'budgeted' => 'Gebudgetteerd', - 'period' => 'Periode', - 'balance' => 'Saldo', - 'in_out_period' => 'In + uit deze periode', - 'sum' => 'Som', - 'summary' => 'Samenvatting', - 'average' => 'Gemiddeld', - 'balanceFor' => 'Saldo op :name', - 'no_tags' => '(geen tags)', + 'chart' => 'Diagram', + 'month' => 'Maand', + 'budget' => 'Budget', + 'spent' => 'Uitgegeven', + 'spent_capped' => 'Uitgegeven (beperkt)', + 'spent_in_budget' => 'Uitgegeven in budget', + 'left_to_spend' => 'Over om uit te geven', + 'earned' => 'Verdiend', + 'overspent' => 'Teveel uitgegeven', + 'left' => 'Over', + 'max-amount' => 'Maximumbedrag', + 'min-amount' => 'Minimumbedrag', + 'journal-amount' => 'Bedrag voor dit contract', + 'name' => 'Naam', + 'date' => 'Datum', + 'date_and_time' => 'Datum en tijd', + 'time' => 'Tijd', + 'paid' => 'Betaald', + 'unpaid' => 'Niet betaald', + 'day' => 'Dag', + 'budgeted' => 'Gebudgetteerd', + 'period' => 'Periode', + 'balance' => 'Saldo', + 'in_out_period' => 'In + uit deze periode', + 'sum' => 'Som', + 'summary' => 'Samenvatting', + 'average' => 'Gemiddeld', + 'balanceFor' => 'Saldo op :name', + 'no_tags' => '(geen tags)', + 'nothing_found' => '(niets gevonden)', // piggy banks: - 'event_history' => 'Gebeurtenisgeschiedenis', - 'add_money_to_piggy' => 'Stop geld in spaarpotje ":name"', - 'piggy_bank' => 'Spaarpotje', - 'new_piggy_bank' => 'Nieuw spaarpotje', - 'store_piggy_bank' => 'Sla spaarpotje op', - 'stored_piggy_bank' => 'Nieuw spaarpotje ":name" opgeslagen', - 'account_status' => 'Rekeningoverzicht', - 'left_for_piggy_banks' => 'Over voor spaarpotjes', - 'sum_of_piggy_banks' => 'Som van spaarpotjes', - 'saved_so_far' => 'Gespaard', - 'left_to_save' => 'Te sparen', - 'suggested_amount' => 'Voorgesteld spaarbedrag per maand', - 'add_money_to_piggy_title' => 'Stop geld in spaarpotje ":name"', - 'remove_money_from_piggy_title' => 'Haal geld uit spaarpotje ":name"', - 'add' => 'Toevoegen', - 'no_money_for_piggy' => 'Er is geen geld voor dit spaarpotje.', - 'suggested_savings_per_month' => 'Voorgesteld per maand', + 'event_history' => 'Gebeurtenisgeschiedenis', + 'add_money_to_piggy' => 'Stop geld in spaarpotje ":name"', + 'piggy_bank' => 'Spaarpotje', + 'new_piggy_bank' => 'Nieuw spaarpotje', + 'store_piggy_bank' => 'Sla spaarpotje op', + 'stored_piggy_bank' => 'Nieuw spaarpotje ":name" opgeslagen', + 'account_status' => 'Rekeningoverzicht', + 'left_for_piggy_banks' => 'Over voor spaarpotjes', + 'sum_of_piggy_banks' => 'Som van spaarpotjes', + 'saved_so_far' => 'Gespaard', + 'left_to_save' => 'Te sparen', + 'suggested_amount' => 'Voorgesteld spaarbedrag per maand', + 'add_money_to_piggy_title' => 'Stop geld in spaarpotje ":name"', + 'remove_money_from_piggy_title' => 'Haal geld uit spaarpotje ":name"', + 'add' => 'Toevoegen', + 'no_money_for_piggy' => 'Er is geen geld voor dit spaarpotje.', + 'suggested_savings_per_month' => 'Voorgesteld per maand', - 'remove' => 'Verwijderen', - 'max_amount_add' => 'Hooguit toe te voegen', - 'max_amount_remove' => 'Hooguit te verwijderen', - 'update_piggy_button' => 'Wijzig spaarpotje', - 'update_piggy_title' => 'Wijzig spaarpotje ":name"', - 'updated_piggy_bank' => 'Spaarpotje ":name" geüpdatet', - 'details' => 'Details', - 'events' => 'Gebeurtenissen', - 'target_amount' => 'Doelbedrag', - 'start_date' => 'Startdatum', - 'no_start_date' => 'Geen startdatum', - 'target_date' => 'Doeldatum', - 'no_target_date' => 'Geen doeldatum', - 'table' => 'Tabel', - 'delete_piggy_bank' => 'Verwijder spaarpotje ":name"', - 'cannot_add_amount_piggy' => 'Kon bedrag :amount niet aan ":name" toevoegen.', - 'cannot_remove_from_piggy' => 'Kon bedrag :amount niet weghalen uit ":name".', - 'deleted_piggy_bank' => 'Spaarpotje ":name" verwijderd', - 'added_amount_to_piggy' => ':amount aan ":name" toegevoegd', - 'removed_amount_from_piggy' => ':amount uit ":name" gehaald', - 'piggy_events' => 'Gerelateerde spaarpotjes', + 'remove' => 'Verwijderen', + 'max_amount_add' => 'Hooguit toe te voegen', + 'max_amount_remove' => 'Hooguit te verwijderen', + 'update_piggy_button' => 'Wijzig spaarpotje', + 'update_piggy_title' => 'Wijzig spaarpotje ":name"', + 'updated_piggy_bank' => 'Spaarpotje ":name" geüpdatet', + 'details' => 'Details', + 'events' => 'Gebeurtenissen', + 'target_amount' => 'Doelbedrag', + 'start_date' => 'Startdatum', + 'no_start_date' => 'Geen startdatum', + 'target_date' => 'Doeldatum', + 'no_target_date' => 'Geen doeldatum', + 'table' => 'Tabel', + 'delete_piggy_bank' => 'Verwijder spaarpotje ":name"', + 'cannot_add_amount_piggy' => 'Kon bedrag :amount niet aan ":name" toevoegen.', + 'cannot_remove_from_piggy' => 'Kon bedrag :amount niet weghalen uit ":name".', + 'deleted_piggy_bank' => 'Spaarpotje ":name" verwijderd', + 'added_amount_to_piggy' => ':amount aan ":name" toegevoegd', + 'removed_amount_from_piggy' => ':amount uit ":name" gehaald', + 'piggy_events' => 'Gerelateerde spaarpotjes', // tags - 'delete_tag' => 'Verwijder tag ":tag"', - 'deleted_tag' => 'Tag ":tag" verwijderd', - 'new_tag' => 'Maak nieuwe tag', - 'edit_tag' => 'Wijzig tag ":tag"', - 'updated_tag' => 'Tag ":tag" geüpdatet', - 'created_tag' => 'Tag ":tag" opgeslagen!', + 'delete_tag' => 'Verwijder tag ":tag"', + 'deleted_tag' => 'Tag ":tag" verwijderd', + 'new_tag' => 'Maak nieuwe tag', + 'edit_tag' => 'Wijzig tag ":tag"', + 'updated_tag' => 'Tag ":tag" geüpdatet', + 'created_tag' => 'Tag ":tag" opgeslagen!', - 'transaction_journal_information' => 'Transactieinformatie', - 'transaction_journal_amount' => 'Bedraginformatie', - 'transaction_journal_meta' => 'Metainformatie', - 'transaction_journal_more' => 'Meer informatie', - 'basic_journal_information' => 'Standaard transactieinformatie', - 'transaction_journal_extra' => 'Extra informatie', - 'att_part_of_journal' => 'Opgeslagen onder ":journal"', - 'total_amount' => 'Totaalbedrag', - 'number_of_decimals' => 'Aantal decimalen', + 'transaction_journal_information' => 'Transactieinformatie', + 'transaction_journal_amount' => 'Bedraginformatie', + 'transaction_journal_meta' => 'Metainformatie', + 'transaction_journal_more' => 'Meer informatie', + 'basic_journal_information' => 'Standaard transactieinformatie', + 'transaction_journal_extra' => 'Extra informatie', + 'att_part_of_journal' => 'Opgeslagen onder ":journal"', + 'total_amount' => 'Totaalbedrag', + 'number_of_decimals' => 'Aantal decimalen', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'De uitnodiging aan ":address" is al gebruikt.', - 'invite_is_deleted' => 'De uitnodiging aan ":address" is verwijderd.', - 'invite_new_user_title' => 'Nieuwe gebruiker uitnodigen', - 'invite_new_user_text' => 'Als beheerder kun je gebruikers uitnodigen om zich te registreren bij jouw Firefly III-installatie. Je kan een directe link maken en deze vervolgens delen met gebruiker. Hiermee kunnen ze een account maken. De uitgenodigde gebruiker en hun uitnodigingslink verschijnen in de onderstaande tabel. Je kan die link met ze delen.', - 'invited_user_mail' => 'E-mailadres', - 'invite_user' => 'Gebruiker uitnodigen', - 'user_is_invited' => 'E-mailadres ":address" is uitgenodigd voor Firefly III', - 'administration' => 'Administratie', - 'system_settings' => 'Systeeminstellingen', - 'code_already_used' => 'Uitnodigingscode is al gebruikt', - 'user_administration' => 'Gebruikersadministratie', - 'list_all_users' => 'Alle gebruikers', - 'all_users' => 'Alle gebruikers', - 'instance_configuration' => 'Instellingen', - 'firefly_instance_configuration' => 'Instellingen voor Firefly III', - 'setting_single_user_mode' => 'Enkele gebruiker-modus', - 'setting_single_user_mode_explain' => 'Standaard accepteert Firefly III maar één (1) gebruiker: jijzelf. Dit is een veiligheidsmaatregel, zodat anderen niet zomaar jouw installatie kunnen gebruiken, tenzij je dit aanzet. Toekomstige registraties zijn nu geblokkeerd. Als je dit vinkje uitzet kunnen anderen jouw installatie ook gebruiken, gegeven dat ze er bij kunnen (je installatie hangt aan het internet).', - 'store_configuration' => 'Configuratie opslaan', - 'single_user_administration' => 'Gebruikersadministratie voor :email', - 'edit_user' => 'Wijzig gebruiker :email', - 'hidden_fields_preferences' => 'Je kan meer transactieopties inschakelen in je instellingen.', - 'user_data_information' => 'Gebruikersgegevens', - 'user_information' => 'Gebruikersinformatie', - 'total_size' => 'totale grootte', - 'budget_or_budgets' => ':count budget|:count budgetten', - 'budgets_with_limits' => ':count budget met een ingesteld bedrag|:count budgetten met een ingesteld bedrag', - 'nr_of_rules_in_total_groups' => ':count_rules regel(s) in :count_groups regelgroep(en)', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'De configuratie is bijgewerkt', - 'setting_is_demo_site' => 'Demo website', - 'setting_is_demo_site_explain' => 'Als je dit aanzet doet jouw installatie alsof het een demo-site is, en dat kan problemen opleveren.', - 'block_code_bounced' => 'Email kwam niet aan', - 'block_code_expired' => 'Demo-account verlopen', - 'no_block_code' => 'Geen reden of gebruiker niet geblokkeerd', - 'block_code_email_changed' => 'De gebruiker heeft zijn nieuwe emailadres nog niet bevestigd', - 'admin_update_email' => 'Integendeel tot de profielpagina krijgt de gebruiker hier geen notificatie van!', - 'update_user' => 'Gebruiker bijwerken', - 'updated_user' => 'Gebruikersgegevens zijn gewijzigd.', - 'delete_user' => 'Verwijder gebruiker :email', - 'user_deleted' => 'De gebruiker is verwijderd', - 'send_test_email' => 'Stuur testmail', - 'send_test_email_text' => 'Druk op deze knop om te zien of je installatie mail of een Slack-bericht kan versturen. Je ziet hier geen foutmeldingen (als ze er zijn), deze vind je in de logboeken. Je kan deze knop zo vaak indrukken als je wilt. Er is geen optie die spam voorkomt. Het testbericht wordt verstuurd naar :email en zou vrij vlot aan moeten komen.', - 'send_message' => 'Verstuur bericht', - 'send_test_triggered' => 'Testmail verstuurd. Check je inbox en de logboeken.', - 'give_admin_careful' => 'Gebruikers die je beheerdersrechten geeft kunnen die van jou afpakken. Wees voorzichtig.', - 'admin_maintanance_title' => 'Onderhoud', - 'admin_maintanance_expl' => 'Handige knopjes voor Firefly III onderhoud', - 'admin_maintenance_clear_cache' => 'Cache leegmaken', - 'admin_notifications' => 'Admin notificaties', - 'admin_notifications_expl' => 'De volgende meldingen kunnen door de beheerder in- of uitgeschakeld worden. Als je deze berichten ook via Slack wilt ontvangen, stel dan de "binnenkomende webhook" URL in.', - 'admin_notification_check_user_new_reg' => 'Gebruiker krijgt na registratie een welkomstbericht', - 'admin_notification_check_admin_new_reg' => 'Beheerder(s) krijgen een melding voor nieuwe gebruikers', - 'admin_notification_check_new_version' => 'Een nieuwe versie is beschikbaar', - 'admin_notification_check_invite_created' => 'Een gebruiker is uitgenodigd voor Firefly III', - 'admin_notification_check_invite_redeemed' => 'Een gebruikersuitnodiging is gebruikt', - 'all_invited_users' => 'Alle uitgenodigde gebruikers', - 'save_notification_settings' => 'Instellingen opslaan', - 'notification_settings_saved' => 'De instellingen voor meldingen zijn opgeslagen', - - - 'split_transaction_title' => 'Beschrijving van de gesplitste transactie', - 'split_transaction_title_help' => 'Als je een gesplitste transactie maakt, moet er een algemene beschrijving zijn voor alle splitsingen van de transactie.', - 'split_title_help' => 'Als je een gesplitste transactie maakt, moet er een algemene beschrijving zijn voor alle splitsingen van de transactie.', - 'you_create_transfer' => 'Je maakt een overschrijving.', - 'you_create_withdrawal' => 'Je maakt een uitgave.', - 'you_create_deposit' => 'Je maakt inkomsten.', + 'invite_is_already_redeemed' => 'De uitnodiging aan ":address" is al gebruikt.', + 'invite_is_deleted' => 'De uitnodiging aan ":address" is verwijderd.', + 'invite_new_user_title' => 'Nieuwe gebruiker uitnodigen', + 'invite_new_user_text' => 'Als beheerder kun je gebruikers uitnodigen om zich te registreren bij jouw Firefly III-installatie. Je kan een directe link maken en deze vervolgens delen met gebruiker. Hiermee kunnen ze een account maken. De uitgenodigde gebruiker en hun uitnodigingslink verschijnen in de onderstaande tabel. Je kan die link met ze delen.', + 'invited_user_mail' => 'E-mailadres', + 'invite_user' => 'Gebruiker uitnodigen', + 'user_is_invited' => 'E-mailadres ":address" is uitgenodigd voor Firefly III', + 'administration' => 'Administratie', + 'system_settings' => 'Systeeminstellingen', + 'code_already_used' => 'Uitnodigingscode is al gebruikt', + 'user_administration' => 'Gebruikersadministratie', + 'list_all_users' => 'Alle gebruikers', + 'all_users' => 'Alle gebruikers', + 'instance_configuration' => 'Instellingen', + 'firefly_instance_configuration' => 'Instellingen voor Firefly III', + 'setting_single_user_mode' => 'Enkele gebruiker-modus', + 'setting_single_user_mode_explain' => 'Standaard accepteert Firefly III maar één (1) gebruiker: jijzelf. Dit is een veiligheidsmaatregel, zodat anderen niet zomaar jouw installatie kunnen gebruiken, tenzij je dit aanzet. Toekomstige registraties zijn nu geblokkeerd. Als je dit vinkje uitzet kunnen anderen jouw installatie ook gebruiken, gegeven dat ze er bij kunnen (je installatie hangt aan het internet).', + 'store_configuration' => 'Configuratie opslaan', + 'single_user_administration' => 'Gebruikersadministratie voor :email', + 'edit_user' => 'Wijzig gebruiker :email', + 'hidden_fields_preferences' => 'Je kan meer transactieopties inschakelen in je instellingen.', + 'user_data_information' => 'Gebruikersgegevens', + 'user_information' => 'Gebruikersinformatie', + 'total_size' => 'totale grootte', + 'budget_or_budgets' => ':count budget|:count budgetten', + 'budgets_with_limits' => ':count budget met een ingesteld bedrag|:count budgetten met een ingesteld bedrag', + 'nr_of_rules_in_total_groups' => ':count_rules regel(s) in :count_groups regelgroep(en)', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'De configuratie is bijgewerkt', + 'setting_is_demo_site' => 'Demo website', + 'setting_is_demo_site_explain' => 'Als je dit aanzet doet jouw installatie alsof het een demo-site is, en dat kan problemen opleveren.', + 'block_code_bounced' => 'Email kwam niet aan', + 'block_code_expired' => 'Demo-account verlopen', + 'no_block_code' => 'Geen reden of gebruiker niet geblokkeerd', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'De gebruiker heeft zijn nieuwe emailadres nog niet bevestigd', + 'admin_update_email' => 'Integendeel tot de profielpagina krijgt de gebruiker hier geen notificatie van!', + 'update_user' => 'Gebruiker bijwerken', + 'updated_user' => 'Gebruikersgegevens zijn gewijzigd.', + 'delete_user' => 'Verwijder gebruiker :email', + 'user_deleted' => 'De gebruiker is verwijderd', + 'send_test_email' => 'Stuur testmail', + 'send_test_email_text' => 'Druk op deze knop om te zien of je installatie mail of een Slack-bericht kan versturen. Je ziet hier geen foutmeldingen (als ze er zijn), deze vind je in de logboeken. Je kan deze knop zo vaak indrukken als je wilt. Er is geen optie die spam voorkomt. Het testbericht wordt verstuurd naar :email en zou vrij vlot aan moeten komen.', + 'send_message' => 'Verstuur bericht', + 'send_test_triggered' => 'Testmail verstuurd. Check je inbox en de logboeken.', + 'give_admin_careful' => 'Gebruikers die je beheerdersrechten geeft kunnen die van jou afpakken. Wees voorzichtig.', + 'admin_maintanance_title' => 'Onderhoud', + 'admin_maintanance_expl' => 'Handige knopjes voor Firefly III onderhoud', + 'admin_maintenance_clear_cache' => 'Cache leegmaken', + 'admin_notifications' => 'Admin notificaties', + 'admin_notifications_expl' => 'De volgende meldingen kunnen door de beheerder in- of uitgeschakeld worden. Als je deze berichten ook via Slack wilt ontvangen, stel dan de "binnenkomende webhook" URL in.', + 'admin_notification_check_user_new_reg' => 'Gebruiker krijgt na registratie een welkomstbericht', + 'admin_notification_check_admin_new_reg' => 'Beheerder(s) krijgen een melding voor nieuwe gebruikers', + 'admin_notification_check_new_version' => 'Een nieuwe versie is beschikbaar', + 'admin_notification_check_invite_created' => 'Een gebruiker is uitgenodigd voor Firefly III', + 'admin_notification_check_invite_redeemed' => 'Een gebruikersuitnodiging is gebruikt', + 'all_invited_users' => 'Alle uitgenodigde gebruikers', + 'save_notification_settings' => 'Instellingen opslaan', + 'notification_settings_saved' => 'De instellingen voor meldingen zijn opgeslagen', + 'split_transaction_title' => 'Beschrijving van de gesplitste transactie', + 'split_transaction_title_help' => 'Als je een gesplitste transactie maakt, moet er een algemene beschrijving zijn voor alle splitsingen van de transactie.', + 'split_title_help' => 'Als je een gesplitste transactie maakt, moet er een algemene beschrijving zijn voor alle splitsingen van de transactie.', + 'you_create_transfer' => 'Je maakt een overschrijving.', + 'you_create_withdrawal' => 'Je maakt een uitgave.', + 'you_create_deposit' => 'Je maakt inkomsten.', // links - 'journal_link_configuration' => 'Instellingen voor transactiekoppelingen', - 'create_new_link_type' => 'Maak nieuw koppeltype', - 'store_new_link_type' => 'Sla nieuw koppeltype op', - 'update_link_type' => 'Update koppeltype', - 'edit_link_type' => 'Wijzig linktype ":name"', - 'updated_link_type' => 'Koppeltype ":name" gewijzigd', - 'delete_link_type' => 'Koppeltype ":name" verwijderen', - 'deleted_link_type' => 'Koppeltype ":name" verwijderd', - 'stored_new_link_type' => 'Koppeltype ":name" opgeslagen', - 'cannot_edit_link_type' => 'Kan koppeltype ":name" niet wijzigen', - 'link_type_help_name' => 'Bijv. "Dupliceert"', - 'link_type_help_inward' => 'Bijv. "dupliceert"', - 'link_type_help_outward' => 'Bijv. "is duplicaat van"', - 'save_connections_by_moving' => 'Sla de link tussen deze transacties op door ze te op te slaan onder een ander linktype:', - 'do_not_save_connection' => '(gooi ook koppelingen weg)', - 'link_transaction' => 'Koppel transactie', - 'link_to_other_transaction' => 'Koppel deze transactie aan een andere transactie', - 'select_transaction_to_link' => 'Selecteer een transactie om te koppelen. De links worden door Firefly III verder niet gebruikt (behalve voor de show), maar dit gaat nog veranderen. Gebruik de box om een transactie te selecteren op ID of beschrijving. Als je je eigen linktypes wilt toevoegen moet je even in de administratie kijken.', - 'this_transaction' => 'Deze transactie', - 'transaction' => 'Transactie', - 'comments' => 'Opmerkingen', - 'link_notes' => 'Notities voor bij de link.', - 'invalid_link_selection' => 'Deze transacties kunnen niet worden gekoppeld', - 'selected_transaction' => 'Geselecteerde transactie', - 'journals_linked' => 'De transacties zijn gekoppeld.', - 'journals_error_linked' => 'Deze transacties zijn al gekoppeld.', - 'journals_link_to_self' => 'Je kan een transactie niet aan zichzelf koppelen', - 'journal_links' => 'Transactiekoppelingen', - 'this_withdrawal' => 'Deze uitgave', - 'this_deposit' => 'Deze inkomsten', - 'this_transfer' => 'Deze overschrijving', - 'overview_for_link' => 'Overzicht voor koppeltype ":name"', - 'source_transaction' => 'Brontransactie', - 'link_description' => 'Beschrijving van koppeling', - 'destination_transaction' => 'Doeltransactie', - 'delete_journal_link' => 'Verwijder de koppeling tussen :source en :destination', - 'deleted_link' => 'Koppeling verwijderd', + 'journal_link_configuration' => 'Instellingen voor transactiekoppelingen', + 'create_new_link_type' => 'Maak nieuw koppeltype', + 'store_new_link_type' => 'Sla nieuw koppeltype op', + 'update_link_type' => 'Update koppeltype', + 'edit_link_type' => 'Wijzig linktype ":name"', + 'updated_link_type' => 'Koppeltype ":name" gewijzigd', + 'delete_link_type' => 'Koppeltype ":name" verwijderen', + 'deleted_link_type' => 'Koppeltype ":name" verwijderd', + 'stored_new_link_type' => 'Koppeltype ":name" opgeslagen', + 'cannot_edit_link_type' => 'Kan koppeltype ":name" niet wijzigen', + 'link_type_help_name' => 'Bijv. "Dupliceert"', + 'link_type_help_inward' => 'Bijv. "dupliceert"', + 'link_type_help_outward' => 'Bijv. "is duplicaat van"', + 'save_connections_by_moving' => 'Sla de link tussen deze transacties op door ze te op te slaan onder een ander linktype:', + 'do_not_save_connection' => '(gooi ook koppelingen weg)', + 'link_transaction' => 'Koppel transactie', + 'link_to_other_transaction' => 'Koppel deze transactie aan een andere transactie', + 'select_transaction_to_link' => 'Selecteer een transactie om te koppelen. De links worden door Firefly III verder niet gebruikt (behalve voor de show), maar dit gaat nog veranderen. Gebruik de box om een transactie te selecteren op ID of beschrijving. Als je je eigen linktypes wilt toevoegen moet je even in de administratie kijken.', + 'this_transaction' => 'Deze transactie', + 'transaction' => 'Transactie', + 'comments' => 'Opmerkingen', + 'link_notes' => 'Notities voor bij de link.', + 'invalid_link_selection' => 'Deze transacties kunnen niet worden gekoppeld', + 'selected_transaction' => 'Geselecteerde transactie', + 'journals_linked' => 'De transacties zijn gekoppeld.', + 'journals_error_linked' => 'Deze transacties zijn al gekoppeld.', + 'journals_link_to_self' => 'Je kan een transactie niet aan zichzelf koppelen', + 'journal_links' => 'Transactiekoppelingen', + 'this_withdrawal' => 'Deze uitgave', + 'this_deposit' => 'Deze inkomsten', + 'this_transfer' => 'Deze overschrijving', + 'overview_for_link' => 'Overzicht voor koppeltype ":name"', + 'source_transaction' => 'Brontransactie', + 'link_description' => 'Beschrijving van koppeling', + 'destination_transaction' => 'Doeltransactie', + 'delete_journal_link' => 'Verwijder de koppeling tussen :source en :destination', + 'deleted_link' => 'Koppeling verwijderd', // link translations: - 'Paid_name' => 'Betaald', - 'Refund_name' => 'Restitutie', - 'Reimbursement_name' => 'Vergoeding', - 'Related_name' => 'Gerelateerd', - 'relates to_inward' => 'gerelateerd aan', - 'is (partially) refunded by_inward' => 'wordt (deels) terugbetaald door', - 'is (partially) paid for by_inward' => 'wordt (deels) betaald door', - 'is (partially) reimbursed by_inward' => 'wordt (deels) vergoed door', - 'inward_transaction' => 'Actieve transactie', - 'outward_transaction' => 'Passieve transactie', - 'relates to_outward' => 'gerelateerd aan', - '(partially) refunds_outward' => 'is een (gedeeltelijke) terugbetaling voor', - '(partially) pays for_outward' => 'betaalt (deels) voor', - '(partially) reimburses_outward' => 'vergoedt (deels)', - 'is (partially) refunded by' => 'wordt (deels) terugbetaald door', - 'is (partially) paid for by' => 'wordt (deels) betaald door', - 'is (partially) reimbursed by' => 'wordt (deels) vergoed door', - 'relates to' => 'gerelateerd aan', - '(partially) refunds' => 'is een (gedeeltelijke) terugbetaling voor', - '(partially) pays for' => 'betaalt (deels) voor', - '(partially) reimburses' => 'vergoedt (deels)', + 'Paid_name' => 'Betaald', + 'Refund_name' => 'Restitutie', + 'Reimbursement_name' => 'Vergoeding', + 'Related_name' => 'Gerelateerd', + 'relates to_inward' => 'gerelateerd aan', + 'is (partially) refunded by_inward' => 'wordt (deels) terugbetaald door', + 'is (partially) paid for by_inward' => 'wordt (deels) betaald door', + 'is (partially) reimbursed by_inward' => 'wordt (deels) vergoed door', + 'inward_transaction' => 'Actieve transactie', + 'outward_transaction' => 'Passieve transactie', + 'relates to_outward' => 'gerelateerd aan', + '(partially) refunds_outward' => 'is een (gedeeltelijke) terugbetaling voor', + '(partially) pays for_outward' => 'betaalt (deels) voor', + '(partially) reimburses_outward' => 'vergoedt (deels)', + 'is (partially) refunded by' => 'wordt (deels) terugbetaald door', + 'is (partially) paid for by' => 'wordt (deels) betaald door', + 'is (partially) reimbursed by' => 'wordt (deels) vergoed door', + 'relates to' => 'gerelateerd aan', + '(partially) refunds' => 'is een (gedeeltelijke) terugbetaling voor', + '(partially) pays for' => 'betaalt (deels) voor', + '(partially) reimburses' => 'vergoedt (deels)', // split a transaction: - 'splits' => 'Splitten', - 'add_another_split' => 'Voeg een split toe', - 'cannot_edit_opening_balance' => 'Je kan het startsaldo van een rekening niet wijzigen via dit scherm.', - 'no_edit_multiple_left' => 'Je hebt geen geldige transacties geselecteerd.', - 'breadcrumb_convert_group' => 'Verander transactie', - 'convert_invalid_source' => 'Broninformatie is ongeldig voor transactie #%d.', - 'convert_invalid_destination' => 'Doelrekeninginformatie is ongeldig voor transactie #%d.', - 'create_another' => 'Terug naar deze pagina voor een nieuwe transactie.', - 'after_update_create_another' => 'Na het opslaan terug om door te gaan met wijzigen.', - 'store_as_new' => 'Opslaan als nieuwe transactie ipv de huidige bij te werken.', - 'reset_after' => 'Reset formulier na opslaan', - 'errors_submission' => 'Er ging iets mis. Check de errors.', - 'transaction_expand_split' => 'Split uitklappen', - 'transaction_collapse_split' => 'Split inklappen', + 'splits' => 'Splitten', + 'add_another_split' => 'Voeg een split toe', + 'cannot_edit_opening_balance' => 'Je kan het startsaldo van een rekening niet wijzigen via dit scherm.', + 'no_edit_multiple_left' => 'Je hebt geen geldige transacties geselecteerd.', + 'breadcrumb_convert_group' => 'Verander transactie', + 'convert_invalid_source' => 'Broninformatie is ongeldig voor transactie #%d.', + 'convert_invalid_destination' => 'Doelrekeninginformatie is ongeldig voor transactie #%d.', + 'create_another' => 'Terug naar deze pagina voor een nieuwe transactie.', + 'after_update_create_another' => 'Na het opslaan terug om door te gaan met wijzigen.', + 'store_as_new' => 'Opslaan als nieuwe transactie ipv de huidige bij te werken.', + 'reset_after' => 'Reset formulier na opslaan', + 'errors_submission' => 'Er ging iets mis. Check de errors.', + 'errors_submission_v2' => 'Er ging iets mis. Check de errors: %{errorMessage}', + 'transaction_expand_split' => 'Split uitklappen', + 'transaction_collapse_split' => 'Split inklappen', // object groups - 'default_group_title_name' => '(ongegroepeerd)', - 'default_group_title_name_plain' => 'ongegroepeerd', + 'default_group_title_name' => '(ongegroepeerd)', + 'default_group_title_name_plain' => 'ongegroepeerd', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Je hebt een betaalrekening nodig!', - 'no_accounts_intro_asset' => 'Je hebt nog geen betaalrekeningen. Betaalrekeningen zijn je meest belangrijke rekeningen: je bankrekening, spaarrekening, gedeelde rekening of zelfs je creditcard.', - 'no_accounts_imperative_asset' => 'Om Firefly III te gebruiken moet je minstens één betaalrekening hebben. Die kan je nu maken:', - 'no_accounts_create_asset' => 'Maak een betaalrekening', - 'no_accounts_title_expense' => 'Je hebt een crediteur nodig!', - 'no_accounts_intro_expense' => 'Je hebt nog geen crediteuren-rekeningen. Crediteuren zijn de plaatsen waar je geld uitgeeft, zoals winkels en supermarkten.', - 'no_accounts_imperative_expense' => 'Crediteuren worden automatisch gemaakt als je transacties maakt, maar je kan ze ook met de hand maken. Die kan je nu maken:', - 'no_accounts_create_expense' => 'Maak een crediteur', - 'no_accounts_title_revenue' => 'Je hebt een debiteur nodig!', - 'no_accounts_intro_revenue' => 'Je hebt nog geen debiteuren-rekeningen. Debiteuren zijn de plaatsen of mensen waar je geld van ontvangt, zoals je werkgever.', - 'no_accounts_imperative_revenue' => 'Dediteuren worden automatisch aangemaakt als je transacties aanmaakt, maar je kan ze ook met de hand maken. Zoals nu:', - 'no_accounts_create_revenue' => 'Maak een debiteur', - 'no_accounts_title_liabilities' => 'Maak een passiva!', - 'no_accounts_intro_liabilities' => 'Je hebt nog geen passiva. "Passiva" is de technische term voor schulden, leningen, hypotheken en meer van die dingen.', - 'no_accounts_imperative_liabilities' => 'Je hoeft deze functie niet gebruiken maar het is handig als je zulke dingen wilt bijhouden.', - 'no_accounts_create_liabilities' => 'Maak een passiva', - 'no_budgets_title_default' => 'Je hebt een budget nodig', - 'no_rules_title_default' => 'Je hebt een regel nodig', - 'no_budgets_intro_default' => 'Je hebt nog geen budgetten. Budgetten gebruik je om je uitgaven te groeperen. Daarmee kan je je uitgaven beperken.', - 'no_rules_intro_default' => 'Je hebt nog geen regels. Regels zijn handige automaatjes die transacties voor je kunnen verwerken.', - 'no_rules_imperative_default' => 'Regels kunnen erg handig zijn bij het beheren van transacties. Je kan er nu een maken:', - 'no_budgets_imperative_default' => 'Budgetten zijn de basis-gereedschappen van financieel beheer. Je kan nu een budget maken:', - 'no_budgets_create_default' => 'Maak een budget', - 'no_rules_create_default' => 'Maak een regel', - 'no_categories_title_default' => 'Je hebt een categorie nodig!', - 'no_categories_intro_default' => 'Je hebt nog geen categorieën. Categorieën gebruik je om je transacties gedetailleerd in te delen.', - 'no_categories_imperative_default' => 'Categorieën worden automatisch aangemaakt als je transacties maakt, maar dit kan ook met de hand. Zoals nu:', - 'no_categories_create_default' => 'Maak een categorie', - 'no_tags_title_default' => 'Je hebt tags nodig!', - 'no_tags_intro_default' => 'Je hebt nog geen tags. Tags gebruik je om je transacties te voorzien van specifieke keywords.', - 'no_tags_imperative_default' => 'Tags worden automatisch gemaakt als je ze toevoegt aan een transactie, maar dit kan ook met de hand. Zoals nu:', - 'no_tags_create_default' => 'Maak een tag', - 'no_transactions_title_withdrawal' => 'Je hebt uitgaven nodig!', - 'no_transactions_intro_withdrawal' => 'Je hebt nog geen uitgaven opgeslagen. Doe dit om te beginnen met het beheren van je financiën.', - 'no_transactions_imperative_withdrawal' => 'Heb je geld uitgegeven? Schrijf het dan op:', - 'no_transactions_create_withdrawal' => 'Registreer een uitgave', - 'no_transactions_title_deposit' => 'Je hebt inkomsten nodig!', - 'no_transactions_intro_deposit' => 'Je hebt nog geen inkomsten opgeslagen. Doe dit om te beginnen met het beheren van je financiën.', - 'no_transactions_imperative_deposit' => 'Heb je geld ontvangen? Schrijf het dan op:', - 'no_transactions_create_deposit' => 'Registreer inkomsten', - 'no_transactions_title_transfers' => 'Je hebt overschrijvingen nodig!', - 'no_transactions_intro_transfers' => 'Je hebt nog geen overschrijvingen opgeslagen. Doe dit om te beginnen met het beheren van je financiën.', - 'no_transactions_imperative_transfers' => 'Heb je geld heen-en-weer geschoven? Schrijf het dan op:', - 'no_transactions_create_transfers' => 'Registreer een overschrijving', - 'no_piggies_title_default' => 'Je hebt spaarpotjes nodig!', - 'no_piggies_intro_default' => 'Je hebt nog geen spaarpotjes. Maak spaarpotjes om je spaargeld te verdelen over de zaken waar je voor wilt sparen.', - 'no_piggies_imperative_default' => 'Heb je zaken waar je voor wilt sparen? Maak dan een spaarpotje en houd het bij:', - 'no_piggies_create_default' => 'Maak een spaarpotje', - 'no_bills_title_default' => 'Je hebt contracten nodig!', - 'no_bills_intro_default' => 'Je hebt nog geen contracten. Je kan contracten gebruiken om terugkerende uitgaven bij te houden, zoals de huur of verzekeringen.', - 'no_bills_imperative_default' => 'Heb je zulke uitgaven? Maak dan een contract en houd de betalingen bij:', - 'no_bills_create_default' => 'Maak een contract', + 'no_accounts_title_asset' => 'Je hebt een betaalrekening nodig!', + 'no_accounts_intro_asset' => 'Je hebt nog geen betaalrekeningen. Betaalrekeningen zijn je meest belangrijke rekeningen: je bankrekening, spaarrekening, gedeelde rekening of zelfs je creditcard.', + 'no_accounts_imperative_asset' => 'Om Firefly III te gebruiken moet je minstens één betaalrekening hebben. Die kan je nu maken:', + 'no_accounts_create_asset' => 'Maak een betaalrekening', + 'no_accounts_title_expense' => 'Je hebt een crediteur nodig!', + 'no_accounts_intro_expense' => 'Je hebt nog geen crediteuren-rekeningen. Crediteuren zijn de plaatsen waar je geld uitgeeft, zoals winkels en supermarkten.', + 'no_accounts_imperative_expense' => 'Crediteuren worden automatisch gemaakt als je transacties maakt, maar je kan ze ook met de hand maken. Die kan je nu maken:', + 'no_accounts_create_expense' => 'Maak een crediteur', + 'no_accounts_title_revenue' => 'Je hebt een debiteur nodig!', + 'no_accounts_intro_revenue' => 'Je hebt nog geen debiteuren-rekeningen. Debiteuren zijn de plaatsen of mensen waar je geld van ontvangt, zoals je werkgever.', + 'no_accounts_imperative_revenue' => 'Dediteuren worden automatisch aangemaakt als je transacties aanmaakt, maar je kan ze ook met de hand maken. Zoals nu:', + 'no_accounts_create_revenue' => 'Maak een debiteur', + 'no_accounts_title_liabilities' => 'Maak een passiva!', + 'no_accounts_intro_liabilities' => 'Je hebt nog geen passiva. "Passiva" is de technische term voor schulden, leningen, hypotheken en meer van die dingen.', + 'no_accounts_imperative_liabilities' => 'Je hoeft deze functie niet gebruiken maar het is handig als je zulke dingen wilt bijhouden.', + 'no_accounts_create_liabilities' => 'Maak een passiva', + 'no_budgets_title_default' => 'Je hebt een budget nodig', + 'no_rules_title_default' => 'Je hebt een regel nodig', + 'no_budgets_intro_default' => 'Je hebt nog geen budgetten. Budgetten gebruik je om je uitgaven te groeperen. Daarmee kan je je uitgaven beperken.', + 'no_rules_intro_default' => 'Je hebt nog geen regels. Regels zijn handige automaatjes die transacties voor je kunnen verwerken.', + 'no_rules_imperative_default' => 'Regels kunnen erg handig zijn bij het beheren van transacties. Je kan er nu een maken:', + 'no_budgets_imperative_default' => 'Budgetten zijn de basis-gereedschappen van financieel beheer. Je kan nu een budget maken:', + 'no_budgets_create_default' => 'Maak een budget', + 'no_rules_create_default' => 'Maak een regel', + 'no_categories_title_default' => 'Je hebt een categorie nodig!', + 'no_categories_intro_default' => 'Je hebt nog geen categorieën. Categorieën gebruik je om je transacties gedetailleerd in te delen.', + 'no_categories_imperative_default' => 'Categorieën worden automatisch aangemaakt als je transacties maakt, maar dit kan ook met de hand. Zoals nu:', + 'no_categories_create_default' => 'Maak een categorie', + 'no_tags_title_default' => 'Je hebt tags nodig!', + 'no_tags_intro_default' => 'Je hebt nog geen tags. Tags gebruik je om je transacties te voorzien van specifieke keywords.', + 'no_tags_imperative_default' => 'Tags worden automatisch gemaakt als je ze toevoegt aan een transactie, maar dit kan ook met de hand. Zoals nu:', + 'no_tags_create_default' => 'Maak een tag', + 'no_transactions_title_withdrawal' => 'Je hebt uitgaven nodig!', + 'no_transactions_intro_withdrawal' => 'Je hebt nog geen uitgaven opgeslagen. Doe dit om te beginnen met het beheren van je financiën.', + 'no_transactions_imperative_withdrawal' => 'Heb je geld uitgegeven? Schrijf het dan op:', + 'no_transactions_create_withdrawal' => 'Registreer een uitgave', + 'no_transactions_title_deposit' => 'Je hebt inkomsten nodig!', + 'no_transactions_intro_deposit' => 'Je hebt nog geen inkomsten opgeslagen. Doe dit om te beginnen met het beheren van je financiën.', + 'no_transactions_imperative_deposit' => 'Heb je geld ontvangen? Schrijf het dan op:', + 'no_transactions_create_deposit' => 'Registreer inkomsten', + 'no_transactions_title_transfers' => 'Je hebt overschrijvingen nodig!', + 'no_transactions_intro_transfers' => 'Je hebt nog geen overschrijvingen opgeslagen. Doe dit om te beginnen met het beheren van je financiën.', + 'no_transactions_imperative_transfers' => 'Heb je geld heen-en-weer geschoven? Schrijf het dan op:', + 'no_transactions_create_transfers' => 'Registreer een overschrijving', + 'no_piggies_title_default' => 'Je hebt spaarpotjes nodig!', + 'no_piggies_intro_default' => 'Je hebt nog geen spaarpotjes. Maak spaarpotjes om je spaargeld te verdelen over de zaken waar je voor wilt sparen.', + 'no_piggies_imperative_default' => 'Heb je zaken waar je voor wilt sparen? Maak dan een spaarpotje en houd het bij:', + 'no_piggies_create_default' => 'Maak een spaarpotje', + 'no_bills_title_default' => 'Je hebt contracten nodig!', + 'no_bills_intro_default' => 'Je hebt nog geen contracten. Je kan contracten gebruiken om terugkerende uitgaven bij te houden, zoals de huur of verzekeringen.', + 'no_bills_imperative_default' => 'Heb je zulke uitgaven? Maak dan een contract en houd de betalingen bij:', + 'no_bills_create_default' => 'Maak een contract', // recurring transactions - 'create_right_now' => 'Nu maken', - 'no_new_transaction_in_recurrence' => 'Geen nieuwe transactie is aangemaakt. Misschien was deze al uitgevoerd voor deze datum?', - 'recurrences' => 'Periodieke transacties', - 'repeat_until_in_past' => 'Deze periodieke transactie stopte met herhalen op :date.', - 'recurring_calendar_view' => 'Kalender', - 'no_recurring_title_default' => 'Maak een periodieke transactie!', - 'no_recurring_intro_default' => 'Je hebt nog geen periodieke transacties. Je kan deze gebruiken om er voor te zorgen dat Firefly III automatisch nieuwe transacties voor je maakt.', - 'no_recurring_imperative_default' => 'Dit is een behoorlijk geadvanceerde functie maar het kan vreselijk handig zijn. Lees ook zeker de documentatie (?)-icoontje rechtsboven) voor je verder gaat.', - 'no_recurring_create_default' => 'Maak een periodieke transactie', - 'make_new_recurring' => 'Maak een periodieke transactie', - 'recurring_daily' => 'Elke dag', - 'recurring_weekly' => 'Elke week op :weekday', - 'recurring_weekly_skip' => 'Elke :skip(e) week op :weekday', - 'recurring_monthly' => 'Elke maand op de :dayOfMonth(e) dag', - 'recurring_monthly_skip' => 'Elke :skip(e) maand op de :dayOfMonth(e) dag', - 'recurring_ndom' => 'Elke maand op de :dayOfMonth(e) :weekday', - 'recurring_yearly' => 'Elk jaar op :date', - 'overview_for_recurrence' => 'Overzicht voor periodieke transactie ":title"', - 'warning_duplicates_repetitions' => 'Soms zie je hier datums dubbel staan. Dat kan als meerdere herhalingen in elkaars vaarwater zitten. Firefly III maakt altijd maar één transactie per dag.', - 'created_transactions' => 'Gerelateerde transacties', - 'expected_withdrawals' => 'Verwachte uitgaven', - 'expected_deposits' => 'Verwachte inkomsten', - 'expected_transfers' => 'Verwachte overschrijvingen', - 'created_withdrawals' => 'Gemaakte uitgaven', - 'created_deposits' => 'Gemaakte inkomsten', - 'created_transfers' => 'Gemaakte overschrijvingen', - 'recurring_info' => 'Periodieke transactie :count van :total', - 'created_from_recurrence' => 'Gemaakt door periodieke transactie ":title" (#:id)', - 'recurring_never_cron' => 'Het lijkt er op dat je cronjob die nodig is voor periodieke transacties nog nooit gedraaid heeft. Niet zo gek natuurlijk als je Firefly III echt net geïnstalleerd hebt, maar denk eraan dat je dit regelt. Check de helppagina\'s via het (?)-icoontje rechtsboven.', - 'recurring_cron_long_ago' => 'Het lijkt er op dat het meer dan 36 uur geleden is sinds de cronjob heeft gedraaid die je nodig hebt voor het maken van periodieke transacties. Weet je zeker dat deze goed is ingesteld? Check de helppagina\'s onder het (?)-icoontje rechtsboven voor meer informatie.', + 'create_right_now' => 'Nu maken', + 'no_new_transaction_in_recurrence' => 'Geen nieuwe transactie is aangemaakt. Misschien was deze al uitgevoerd voor deze datum?', + 'recurrences' => 'Periodieke transacties', + 'repeat_until_in_past' => 'Deze periodieke transactie stopte met herhalen op :date.', + 'recurring_calendar_view' => 'Kalender', + 'no_recurring_title_default' => 'Maak een periodieke transactie!', + 'no_recurring_intro_default' => 'Je hebt nog geen periodieke transacties. Je kan deze gebruiken om er voor te zorgen dat Firefly III automatisch nieuwe transacties voor je maakt.', + 'no_recurring_imperative_default' => 'Dit is een behoorlijk geadvanceerde functie maar het kan vreselijk handig zijn. Lees ook zeker de documentatie (?)-icoontje rechtsboven) voor je verder gaat.', + 'no_recurring_create_default' => 'Maak een periodieke transactie', + 'make_new_recurring' => 'Maak een periodieke transactie', + 'recurring_daily' => 'Elke dag', + 'recurring_weekly' => 'Elke week op :weekday', + 'recurring_weekly_skip' => 'Elke :skip(e) week op :weekday', + 'recurring_monthly' => 'Elke maand op de :dayOfMonth(e) dag', + 'recurring_monthly_skip' => 'Elke :skip(e) maand op de :dayOfMonth(e) dag', + 'recurring_ndom' => 'Elke maand op de :dayOfMonth(e) :weekday', + 'recurring_yearly' => 'Elk jaar op :date', + 'overview_for_recurrence' => 'Overzicht voor periodieke transactie ":title"', + 'warning_duplicates_repetitions' => 'Soms zie je hier datums dubbel staan. Dat kan als meerdere herhalingen in elkaars vaarwater zitten. Firefly III maakt altijd maar één transactie per dag.', + 'created_transactions' => 'Gerelateerde transacties', + 'expected_withdrawals' => 'Verwachte uitgaven', + 'expected_deposits' => 'Verwachte inkomsten', + 'expected_transfers' => 'Verwachte overschrijvingen', + 'created_withdrawals' => 'Gemaakte uitgaven', + 'created_deposits' => 'Gemaakte inkomsten', + 'created_transfers' => 'Gemaakte overschrijvingen', + 'recurring_info' => 'Periodieke transactie :count van :total', + 'created_from_recurrence' => 'Gemaakt door periodieke transactie ":title" (#:id)', + 'recurring_never_cron' => 'Het lijkt er op dat je cronjob die nodig is voor periodieke transacties nog nooit gedraaid heeft. Niet zo gek natuurlijk als je Firefly III echt net geïnstalleerd hebt, maar denk eraan dat je dit regelt. Check de helppagina\'s via het (?)-icoontje rechtsboven.', + 'recurring_cron_long_ago' => 'Het lijkt er op dat het meer dan 36 uur geleden is sinds de cronjob heeft gedraaid die je nodig hebt voor het maken van periodieke transacties. Weet je zeker dat deze goed is ingesteld? Check de helppagina\'s onder het (?)-icoontje rechtsboven voor meer informatie.', - 'create_new_recurrence' => 'Maak een nieuwe periodieke transactie', - 'help_first_date' => 'Geef aan wanneer je de eerste transactie verwacht. Dit moet in de toekomst zijn.', - 'help_first_date_no_past' => 'Geef aan wanneer je de eerste transactie verwacht. Firefly III zal geen transacties in het verleden maken.', - 'no_currency' => '(geen valuta)', - 'mandatory_for_recurring' => 'Verplichte periodieke informatie', - 'mandatory_for_transaction' => 'Verplichte transactieinformatie', - 'optional_for_recurring' => 'Optionele periodieke informatie', - 'optional_for_transaction' => 'Optionele transactieinformatie', - 'change_date_other_options' => 'Wijzig de "eerste datum" om meer opties te zien.', - 'mandatory_fields_for_tranaction' => 'De waarden die je hier invult worden gebruikt om de transactie(s) te maken', - 'click_for_calendar' => 'Hier vind je een kalender die laat zien wanneer de transactie zal herhalen.', - 'repeat_forever' => 'Voor altijd herhalen', - 'repeat_until_date' => 'Herhalen tot een datum', - 'repeat_times' => 'Een aantal maal herhalen', - 'recurring_skips_one' => 'Elke tweede', - 'recurring_skips_more' => 'Slaat :count keer over', - 'store_new_recurrence' => 'Sla periodieke transactie op', - 'stored_new_recurrence' => 'Periodieke transactie ":title" is opgeslagen.', - 'edit_recurrence' => 'Wijzig periodieke transactie ":title"', - 'recurring_repeats_until' => 'Herhaalt tot :date', - 'recurring_repeats_forever' => 'Blijft herhalen', - 'recurring_repeats_x_times' => 'Herhaalt :count keer|Herhaalt :count keer', - 'update_recurrence' => 'Wijzig periodieke transactie', - 'updated_recurrence' => 'Periodieke transactie ":title" is gewijzigd', - 'recurrence_is_inactive' => 'Deze periodieke transactie is niet actief en maakt geen transacties aan.', - 'delete_recurring' => 'Verwijder periodieke transactie ":title"', - 'new_recurring_transaction' => 'Nieuwe periodieke transactie', - 'help_weekend' => 'Wat moet Firefly III doen als de periodieke transactie in het weekend valt?', - 'do_nothing' => 'Gewoon transactie maken', - 'skip_transaction' => 'Transactie overslaan', - 'jump_to_friday' => 'Transactie maken op de vrijdag ervoor', - 'jump_to_monday' => 'Transactie maken op de maandag erna', - 'will_jump_friday' => 'Wordt op de vrijdag ervoor gemaakt i.p.v. in het weekend.', - 'will_jump_monday' => 'Wordt op de maandag erna gemaakt i. p. v. in het weekend.', - 'except_weekends' => 'Behalve de weekenden', - 'recurrence_deleted' => 'Periodieke transactie ":title" verwijderd', + 'create_new_recurrence' => 'Maak een nieuwe periodieke transactie', + 'help_first_date' => 'Geef aan wanneer je de eerste transactie verwacht. Dit moet in de toekomst zijn.', + 'help_first_date_no_past' => 'Geef aan wanneer je de eerste transactie verwacht. Firefly III zal geen transacties in het verleden maken.', + 'no_currency' => '(geen valuta)', + 'mandatory_for_recurring' => 'Verplichte periodieke informatie', + 'mandatory_for_transaction' => 'Verplichte transactieinformatie', + 'optional_for_recurring' => 'Optionele periodieke informatie', + 'optional_for_transaction' => 'Optionele transactieinformatie', + 'change_date_other_options' => 'Wijzig de "eerste datum" om meer opties te zien.', + 'mandatory_fields_for_tranaction' => 'De waarden die je hier invult worden gebruikt om de transactie(s) te maken', + 'click_for_calendar' => 'Hier vind je een kalender die laat zien wanneer de transactie zal herhalen.', + 'repeat_forever' => 'Voor altijd herhalen', + 'repeat_until_date' => 'Herhalen tot een datum', + 'repeat_times' => 'Een aantal maal herhalen', + 'recurring_skips_one' => 'Elke tweede', + 'recurring_skips_more' => 'Slaat :count keer over', + 'store_new_recurrence' => 'Sla periodieke transactie op', + 'stored_new_recurrence' => 'Periodieke transactie ":title" is opgeslagen.', + 'edit_recurrence' => 'Wijzig periodieke transactie ":title"', + 'recurring_repeats_until' => 'Herhaalt tot :date', + 'recurring_repeats_forever' => 'Blijft herhalen', + 'recurring_repeats_x_times' => 'Herhaalt :count keer|Herhaalt :count keer', + 'update_recurrence' => 'Wijzig periodieke transactie', + 'updated_recurrence' => 'Periodieke transactie ":title" is gewijzigd', + 'recurrence_is_inactive' => 'Deze periodieke transactie is niet actief en maakt geen transacties aan.', + 'delete_recurring' => 'Verwijder periodieke transactie ":title"', + 'new_recurring_transaction' => 'Nieuwe periodieke transactie', + 'help_weekend' => 'Wat moet Firefly III doen als de periodieke transactie in het weekend valt?', + 'do_nothing' => 'Gewoon transactie maken', + 'skip_transaction' => 'Transactie overslaan', + 'jump_to_friday' => 'Transactie maken op de vrijdag ervoor', + 'jump_to_monday' => 'Transactie maken op de maandag erna', + 'will_jump_friday' => 'Wordt op de vrijdag ervoor gemaakt i.p.v. in het weekend.', + 'will_jump_monday' => 'Wordt op de maandag erna gemaakt i. p. v. in het weekend.', + 'except_weekends' => 'Behalve de weekenden', + 'recurrence_deleted' => 'Periodieke transactie ":title" verwijderd', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Saldo (:currency)', - 'box_spent_in_currency' => 'Uitgegeven (:currency)', - 'box_earned_in_currency' => 'Verdiend (:currency)', - 'box_budgeted_in_currency' => 'Gebudgetteerd (:currency)', - 'box_bill_paid_in_currency' => 'Betaalde rekeningen (:currency)', - 'box_bill_unpaid_in_currency' => 'Onbetaalde rekeningen (:currency)', - 'box_left_to_spend_in_currency' => 'Uit te geven (:currency)', - 'box_net_worth_in_currency' => 'Kapitaal (:currency)', - 'box_spend_per_day' => 'Te besteden per dag: :amount', + 'box_balance_in_currency' => 'Saldo (:currency)', + 'box_spent_in_currency' => 'Uitgegeven (:currency)', + 'box_earned_in_currency' => 'Verdiend (:currency)', + 'box_budgeted_in_currency' => 'Gebudgetteerd (:currency)', + 'box_bill_paid_in_currency' => 'Betaalde rekeningen (:currency)', + 'box_bill_unpaid_in_currency' => 'Onbetaalde rekeningen (:currency)', + 'box_left_to_spend_in_currency' => 'Uit te geven (:currency)', + 'box_net_worth_in_currency' => 'Kapitaal (:currency)', + 'box_spend_per_day' => 'Te besteden per dag: :amount', // debug page - 'debug_page' => 'Debugpagina', - 'debug_submit_instructions' => 'Gebruik de inhoud van dit vak als je tegen problemen aanloopt. Copy en paste dit in een nieuw of bestaand GitHub issue. Er wordt een mooie tabel gegenereerd die handig is voor de diagnose.', - 'debug_pretty_table' => 'Als je de content van dit vak in GitHub copypaste komt er een tabel tevoorschijn. Zet hier dus geen haakjes of quotes omheen.', - 'debug_additional_data' => 'Je mag ook de content van deze box delen. Die kan je copy-pasten in een nieuw of bestaand GitHub issue. Dikke kans echter dat hier privégegevens instaan zoals rekeningnamen, transactiedetails of e-mailadressen.', + 'debug_page' => 'Debugpagina', + 'debug_submit_instructions' => 'Gebruik de inhoud van dit vak als je tegen problemen aanloopt. Copy en paste dit in een nieuw of bestaand GitHub issue. Er wordt een mooie tabel gegenereerd die handig is voor de diagnose.', + 'debug_pretty_table' => 'Als je de content van dit vak in GitHub copypaste komt er een tabel tevoorschijn. Zet hier dus geen haakjes of quotes omheen.', + 'debug_additional_data' => 'Je mag ook de content van deze box delen. Die kan je copy-pasten in een nieuw of bestaand GitHub issue. Dikke kans echter dat hier privégegevens instaan zoals rekeningnamen, transactiedetails of e-mailadressen.', // object groups - 'object_groups_menu_bar' => 'Groepen', - 'object_groups_page_title' => 'Groepen', - 'object_groups_breadcrumb' => 'Groepen', - 'object_groups_index' => 'Overzicht', - 'object_groups' => 'Groepen', - 'object_groups_empty_explain' => 'Sommige dingen in Firefly III kan je groeperen. Spaarpotjes bijvoorbeeld hebben een "Groep"-veld als je ze wijzigt of maakt. Als je dit veld gebruikt kan je hier de namen en volgorde van die groepen wijzigen. Check de helppagina\'s, rechtsboven het (?) icoontje, voor meer info.', - 'object_group_title' => 'Titel', - 'edit_object_group' => 'Wijzig groep ":title"', - 'delete_object_group' => 'Verwijder groep ":title"', - 'update_object_group' => 'Groep bijwerken', - 'updated_object_group' => 'Groep ":title" geüpdatet', - 'deleted_object_group' => 'Groep ":title" verwijderd', - 'object_group' => 'Groep', + 'object_groups_menu_bar' => 'Groepen', + 'object_groups_page_title' => 'Groepen', + 'object_groups_breadcrumb' => 'Groepen', + 'object_groups_index' => 'Overzicht', + 'object_groups' => 'Groepen', + 'object_groups_empty_explain' => 'Sommige dingen in Firefly III kan je groeperen. Spaarpotjes bijvoorbeeld hebben een "Groep"-veld als je ze wijzigt of maakt. Als je dit veld gebruikt kan je hier de namen en volgorde van die groepen wijzigen. Check de helppagina\'s, rechtsboven het (?) icoontje, voor meer info.', + 'object_group_title' => 'Titel', + 'edit_object_group' => 'Wijzig groep ":title"', + 'delete_object_group' => 'Verwijder groep ":title"', + 'update_object_group' => 'Groep bijwerken', + 'updated_object_group' => 'Groep ":title" geüpdatet', + 'deleted_object_group' => 'Groep ":title" verwijderd', + 'object_group' => 'Groep', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit logboek items', - 'ale_action_log_add' => ':amount toegevoegd aan spaarpotje ":name"', - 'ale_action_log_remove' => ':amount is verwijderd uit spaarpotje ":name"', - 'ale_action_clear_budget' => 'Verwijderd uit budget', - 'ale_action_update_group_title' => 'Transactietitel bijgewerkt', - 'ale_action_update_date' => 'Transactiedatum bijgewerkt', - 'ale_action_update_order' => 'Transactievolgorde bijgewerkt', - 'ale_action_clear_category' => 'Verwijderd uit categorie', - 'ale_action_clear_notes' => 'Verwijderde notities', - 'ale_action_clear_tag' => 'Tag gewist', - 'ale_action_clear_all_tags' => 'Alle tags gewist', - 'ale_action_set_bill' => 'Gekoppeld aan contract', - 'ale_action_switch_accounts' => 'Bron- en doelrekening gewisseld', - 'ale_action_set_budget' => 'Budget ingesteld', - 'ale_action_set_category' => 'Categorie ingesteld', - 'ale_action_set_source' => 'Bronrekening veranderd', - 'ale_action_set_destination' => 'Doelrekening veranderd', - 'ale_action_update_transaction_type' => 'Transactietype gewijzigd', - 'ale_action_update_notes' => 'Notities veranderd', - 'ale_action_update_description' => 'Omschrijving veranderd', - 'ale_action_add_to_piggy' => 'Spaarpotje', - 'ale_action_remove_from_piggy' => 'Spaarpotje', - 'ale_action_add_tag' => 'Tag toegevoegd', + 'audit_log_entries' => 'Audit logboek items', + 'ale_action_log_add' => ':amount toegevoegd aan spaarpotje ":name"', + 'ale_action_log_remove' => ':amount is verwijderd uit spaarpotje ":name"', + 'ale_action_clear_budget' => 'Verwijderd uit budget', + 'ale_action_update_group_title' => 'Transactietitel bijgewerkt', + 'ale_action_update_date' => 'Transactiedatum bijgewerkt', + 'ale_action_update_order' => 'Transactievolgorde bijgewerkt', + 'ale_action_clear_category' => 'Verwijderd uit categorie', + 'ale_action_clear_notes' => 'Verwijderde notities', + 'ale_action_clear_tag' => 'Tag gewist', + 'ale_action_clear_all_tags' => 'Alle tags gewist', + 'ale_action_set_bill' => 'Gekoppeld aan contract', + 'ale_action_switch_accounts' => 'Bron- en doelrekening gewisseld', + 'ale_action_set_budget' => 'Budget ingesteld', + 'ale_action_set_category' => 'Categorie ingesteld', + 'ale_action_set_source' => 'Bronrekening veranderd', + 'ale_action_set_destination' => 'Doelrekening veranderd', + 'ale_action_update_transaction_type' => 'Transactietype gewijzigd', + 'ale_action_update_notes' => 'Notities veranderd', + 'ale_action_update_description' => 'Omschrijving veranderd', + 'ale_action_add_to_piggy' => 'Spaarpotje', + 'ale_action_remove_from_piggy' => 'Spaarpotje', + 'ale_action_add_tag' => 'Tag toegevoegd', // dashboard - 'enable_auto_convert' => 'Doe valutaconversie', - 'disable_auto_convert' => 'Doe geen valutaconversie', - + 'enable_auto_convert' => 'Doe valutaconversie', + 'disable_auto_convert' => 'Doe geen valutaconversie', ]; /* diff --git a/resources/lang/nl_NL/form.php b/resources/lang/nl_NL/form.php index c37d0957c0..eee4232cda 100644 --- a/resources/lang/nl_NL/form.php +++ b/resources/lang/nl_NL/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Banknaam', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Saldo van spaarrekening', - 'credit_card_limit' => 'Credit card limiet', - 'automatch' => 'Automatisch herkennen', - 'skip' => 'Overslaan', - 'enabled' => 'Ingeschakeld', - 'name' => 'Naam', - 'active' => 'Actief', - 'amount_min' => 'Minimumbedrag', - 'amount_max' => 'Maximumbedrag', - 'match' => 'Reageert op', - 'strict' => 'Strikte modus', - 'repeat_freq' => 'Herhaling', - 'object_group' => 'Groep', - 'location' => 'Locatie', - 'update_channel' => 'Updatekanaal', - 'currency_id' => 'Valuta', - 'transaction_currency_id' => 'Valuta', - 'auto_budget_currency_id' => 'Valuta', - 'external_ip' => 'Het externe IP-adres van je server', - 'attachments' => 'Bijlagen', - 'BIC' => 'BIC', - 'verify_password' => 'Bevestig wachtwoordsterkte', - 'source_account' => 'Bronrekening', - 'destination_account' => 'Doelrekening', - 'asset_destination_account' => 'Doelrekening', - 'include_net_worth' => 'Meetellen in kapitaal', - 'asset_source_account' => 'Bronrekening', - 'journal_description' => 'Omschrijving', - 'note' => 'Notities', - 'currency' => 'Valuta', - 'account_id' => 'Betaalrekening', - 'budget_id' => 'Budget', - 'bill_id' => 'Contract', - 'opening_balance' => 'Startsaldo', - 'tagMode' => 'Tag modus', - 'virtual_balance' => 'Virtueel saldo', + 'bank_name' => 'Banknaam', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Saldo van spaarrekening', + 'credit_card_limit' => 'Credit card limiet', + 'automatch' => 'Automatisch herkennen', + 'skip' => 'Overslaan', + 'enabled' => 'Ingeschakeld', + 'name' => 'Naam', + 'active' => 'Actief', + 'amount_min' => 'Minimumbedrag', + 'amount_max' => 'Maximumbedrag', + 'match' => 'Reageert op', + 'strict' => 'Strikte modus', + 'repeat_freq' => 'Herhaling', + 'object_group' => 'Groep', + 'location' => 'Locatie', + 'update_channel' => 'Updatekanaal', + 'currency_id' => 'Valuta', + 'transaction_currency_id' => 'Valuta', + 'auto_budget_currency_id' => 'Valuta', + 'external_ip' => 'Het externe IP-adres van je server', + 'attachments' => 'Bijlagen', + 'BIC' => 'BIC', + 'verify_password' => 'Bevestig wachtwoordsterkte', + 'source_account' => 'Bronrekening', + 'destination_account' => 'Doelrekening', + 'asset_destination_account' => 'Doelrekening', + 'include_net_worth' => 'Meetellen in kapitaal', + 'asset_source_account' => 'Bronrekening', + 'journal_description' => 'Omschrijving', + 'note' => 'Notities', + 'currency' => 'Valuta', + 'account_id' => 'Betaalrekening', + 'budget_id' => 'Budget', + 'bill_id' => 'Contract', + 'opening_balance' => 'Startsaldo', + 'tagMode' => 'Tag modus', + 'virtual_balance' => 'Virtueel saldo', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Doelbedrag', 'account_role' => 'Rol van rekening', 'opening_balance_date' => 'Startsaldodatum', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Weet je zeker dat je de transactie met naam ":description" wilt verwijderen?', 'mass_journal_are_you_sure' => 'Weet je zeker dat je al deze transacties wilt verwijderen?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Weet je zeker dat je de tag met naam ":tag" wilt verwijderen?', 'journal_link_areYouSure' => 'Weet je zeker dat je de koppeling tussen :source en :destination wilt verwijderen?', 'linkType_areYouSure' => 'Weet je zeker dat je linktype ":name" (":inward" / ":outward") wilt verwijderen?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Nummer', - // admin 'domain' => 'Domein', 'single_user_mode' => 'Registratie uitgeschakelen', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS-rekening', 'local_account' => 'Firefly III rekening', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Datum van', - 'to_date' => 'Datum tot', - 'due_date' => 'Vervaldatum', - 'payment_date' => 'Betalingsdatum', - 'invoice_date' => 'Factuurdatum', - 'internal_reference' => 'Interne verwijzing', - 'inward' => 'Binnenwaartse beschrijving', - 'outward' => 'Buitenwaartse beschrijving', - 'rule_group_id' => 'Regelgroep', - 'transaction_description' => 'Transactiebeschrijving', - 'first_date' => 'Eerste datum', - 'transaction_type' => 'Transactietype', - 'repeat_until' => 'Herhalen tot', - 'recurring_description' => 'Beschrijving van de periodieke transactie', - 'repetition_type' => 'Type herhaling', - 'foreign_currency_id' => 'Vreemde valuta', - 'repetition_end' => 'Stopt met herhalen', - 'repetitions' => 'Herhalingen', - 'calendar' => 'Kalender', - 'weekend' => 'Weekend', - 'client_secret' => 'Client secret', - 'withdrawal_destination_id' => 'Doelrekening', - 'deposit_source_id' => 'Bronrekening', - 'expected_on' => 'Verwacht op', - 'paid' => 'Betaald', - 'auto_budget_type' => 'Auto-budget', - 'auto_budget_amount' => 'Auto-budget bedrag', - 'auto_budget_period' => 'Auto-budget periode', - 'collected' => 'Verzameld', - 'submitted' => 'Verstuurd', - 'key' => 'Key', - 'value' => 'Inhoud', - 'webhook_delivery' => 'Bericht', - 'webhook_response' => 'Reactie', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Datum van', + 'to_date' => 'Datum tot', + 'due_date' => 'Vervaldatum', + 'payment_date' => 'Betalingsdatum', + 'invoice_date' => 'Factuurdatum', + 'internal_reference' => 'Interne verwijzing', + 'inward' => 'Binnenwaartse beschrijving', + 'outward' => 'Buitenwaartse beschrijving', + 'rule_group_id' => 'Regelgroep', + 'transaction_description' => 'Transactiebeschrijving', + 'first_date' => 'Eerste datum', + 'transaction_type' => 'Transactietype', + 'repeat_until' => 'Herhalen tot', + 'recurring_description' => 'Beschrijving van de periodieke transactie', + 'repetition_type' => 'Type herhaling', + 'foreign_currency_id' => 'Vreemde valuta', + 'repetition_end' => 'Stopt met herhalen', + 'repetitions' => 'Herhalingen', + 'calendar' => 'Kalender', + 'weekend' => 'Weekend', + 'client_secret' => 'Client secret', + 'withdrawal_destination_id' => 'Doelrekening', + 'deposit_source_id' => 'Bronrekening', + 'expected_on' => 'Verwacht op', + 'paid' => 'Betaald', + 'auto_budget_type' => 'Auto-budget', + 'auto_budget_amount' => 'Auto-budget bedrag', + 'auto_budget_period' => 'Auto-budget periode', + 'collected' => 'Verzameld', + 'submitted' => 'Verstuurd', + 'key' => 'Key', + 'value' => 'Inhoud', + 'webhook_delivery' => 'Bericht', + 'webhook_response' => 'Reactie', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/nl_NL/intro.php b/resources/lang/nl_NL/intro.php index 28ddcd295f..3555f9c282 100644 --- a/resources/lang/nl_NL/intro.php +++ b/resources/lang/nl_NL/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Welkom op de homepage van Firefly III. Neem even de tijd voor deze introductie zodat je Firefly III leert kennen.', - 'index_accounts-chart' => 'Deze grafiek toont het saldo van je betaalrekening(en). Welke rekeningen zichtbaar zijn kan je aangeven bij de instellingen.', - 'index_box_out_holder' => 'Dit vakje en de vakjes er naast geven een snel overzicht van je financiële situatie.', - 'index_help' => 'Als je ooit hulp nodig hebt, klik dan hier.', - 'index_outro' => 'De meeste pagina\'s in Firefly III beginnen met een kleine rondleiding zoals deze. Zoek me op als je vragen of commentaar hebt. Veel plezier!', - 'index_sidebar-toggle' => 'Nieuwe transacties, rekeningen en andere dingen maak je met het menu onder deze knop.', - 'index_cash_account' => 'Dit zijn de rekeningen die tot nu toe zijn gemaakt. Je kan de cashgeldrekening gebruiken om cash geld te volgen, maar dat hoeft natuurlijk niet.', + 'index_intro' => 'Welkom op de homepage van Firefly III. Neem even de tijd voor deze introductie zodat je Firefly III leert kennen.', + 'index_accounts-chart' => 'Deze grafiek toont het saldo van je betaalrekening(en). Welke rekeningen zichtbaar zijn kan je aangeven bij de instellingen.', + 'index_box_out_holder' => 'Dit vakje en de vakjes er naast geven een snel overzicht van je financiële situatie.', + 'index_help' => 'Als je ooit hulp nodig hebt, klik dan hier.', + 'index_outro' => 'De meeste pagina\'s in Firefly III beginnen met een kleine rondleiding zoals deze. Zoek me op als je vragen of commentaar hebt. Veel plezier!', + 'index_sidebar-toggle' => 'Nieuwe transacties, rekeningen en andere dingen maak je met het menu onder deze knop.', + 'index_cash_account' => 'Dit zijn de rekeningen die tot nu toe zijn gemaakt. Je kan de cashgeldrekening gebruiken om cash geld te volgen, maar dat hoeft natuurlijk niet.', // transactions - 'transactions_create_basic_info' => 'Hier komt de basic info van je transactie. Bron, doel, datum en beschrijving.', - 'transactions_create_amount_info' => 'Hier zet je het bedrag neer. Ook het bedrag in vreemde valuta.', - 'transactions_create_optional_info' => 'Al deze velden zijn optioneel, maar door hier dingen in te vullen ben je beter georganiseerd.', - 'transactions_create_split' => 'Als je een transactie wilt splitsen, druk hier!', + 'transactions_create_basic_info' => 'Hier komt de basic info van je transactie. Bron, doel, datum en beschrijving.', + 'transactions_create_amount_info' => 'Hier zet je het bedrag neer. Ook het bedrag in vreemde valuta.', + 'transactions_create_optional_info' => 'Al deze velden zijn optioneel, maar door hier dingen in te vullen ben je beter georganiseerd.', + 'transactions_create_split' => 'Als je een transactie wilt splitsen, druk hier!', // create account: - 'accounts_create_iban' => 'Geef je rekeningen een geldige IBAN. Dat scheelt met importeren van data.', - 'accounts_create_asset_opening_balance' => 'Betaalrekeningen kunnen een startsaldo hebben, waarmee het begin van deze rekening in Firefly III wordt aangegeven.', - 'accounts_create_asset_currency' => 'Firefly III ondersteunt meerdere valuta. Hier stel je de valuta in van je betaalrekening.', - 'accounts_create_asset_virtual' => 'Soms is het handig om je betaalrekening een virtueel saldo te geven: een extra bedrag dat altijd bij het daadwerkelijke saldo wordt opgeteld.', + 'accounts_create_iban' => 'Geef je rekeningen een geldige IBAN. Dat scheelt met importeren van data.', + 'accounts_create_asset_opening_balance' => 'Betaalrekeningen kunnen een startsaldo hebben, waarmee het begin van deze rekening in Firefly III wordt aangegeven.', + 'accounts_create_asset_currency' => 'Firefly III ondersteunt meerdere valuta. Hier stel je de valuta in van je betaalrekening.', + 'accounts_create_asset_virtual' => 'Soms is het handig om je betaalrekening een virtueel saldo te geven: een extra bedrag dat altijd bij het daadwerkelijke saldo wordt opgeteld.', // budgets index - 'budgets_index_intro' => 'Budgetten worden gebruikt om je financiën te beheren en vormen een van de kernfuncties van Firefly III.', - 'budgets_index_set_budget' => 'Stel je totale budget voor elke periode in, zodat Firefly III je kan vertellen of je alle beschikbare geld hebt gebudgetteerd.', - 'budgets_index_see_expenses_bar' => 'Het besteden van geld zal deze balk langzaam vullen.', - 'budgets_index_navigate_periods' => 'Navigeer door periodes heen om je budget vooraf te bepalen.', - 'budgets_index_new_budget' => 'Maak nieuwe budgetten naar wens.', - 'budgets_index_list_of_budgets' => 'Gebruik deze tabel om de bedragen voor elk budget vast te stellen en te zien hoe je er voor staat.', - 'budgets_index_outro' => 'Om meer te leren over budgetteren, klik dan op het help-icoontje rechtsboven.', + 'budgets_index_intro' => 'Budgetten worden gebruikt om je financiën te beheren en vormen een van de kernfuncties van Firefly III.', + 'budgets_index_see_expenses_bar' => 'Het besteden van geld zal deze balk langzaam vullen.', + 'budgets_index_navigate_periods' => 'Navigeer door periodes heen om je budget vooraf te bepalen.', + 'budgets_index_new_budget' => 'Maak nieuwe budgetten naar wens.', + 'budgets_index_list_of_budgets' => 'Gebruik deze tabel om de bedragen voor elk budget vast te stellen en te zien hoe je er voor staat.', + 'budgets_index_outro' => 'Om meer te leren over budgetteren, klik dan op het help-icoontje rechtsboven.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Gebruik deze rapporten om gedetailleerde inzicht in je financiën te krijgen.', - 'reports_index_inputReportType' => 'Kies een rapporttype. Bekijk de helppagina\'s om te zien wat elk rapport laat zien.', - 'reports_index_inputAccountsSelect' => 'Je kunt naar keuze betaalrekeningen meenemen (of niet).', - 'reports_index_inputDateRange' => 'Kies zelf een datumbereik: van een dag tot tien jaar.', - 'reports_index_extra-options-box' => 'Sommige rapporten bieden extra filters en opties. Kies een rapporttype en kijk of hier iets verandert.', + 'reports_index_intro' => 'Gebruik deze rapporten om gedetailleerde inzicht in je financiën te krijgen.', + 'reports_index_inputReportType' => 'Kies een rapporttype. Bekijk de helppagina\'s om te zien wat elk rapport laat zien.', + 'reports_index_inputAccountsSelect' => 'Je kunt naar keuze betaalrekeningen meenemen (of niet).', + 'reports_index_inputDateRange' => 'Kies zelf een datumbereik: van een dag tot meer dan tien jaar.', + 'reports_index_extra-options-box' => 'Sommige rapporten bieden extra filters en opties. Kies een rapporttype en kijk of hier iets verandert.', // reports (reports) - 'reports_report_default_intro' => 'Dit rapport geeft je een snel en uitgebreid overzicht van je financiën. Laat het me weten als je hier dingen mist!', - 'reports_report_audit_intro' => 'Dit rapport geeft je gedetailleerde inzichten in je betaalrekeningen.', - 'reports_report_audit_optionsBox' => 'Gebruik deze vinkjes om voor jou interessante kolommen te laten zien of te verbergen.', + 'reports_report_default_intro' => 'Dit rapport geeft je een snel en uitgebreid overzicht van je financiën. Laat het me weten als je hier dingen mist!', + 'reports_report_audit_intro' => 'Dit rapport geeft je gedetailleerde inzichten in je betaalrekeningen.', + 'reports_report_audit_optionsBox' => 'Gebruik deze vinkjes om voor jou interessante kolommen te laten zien of te verbergen.', - 'reports_report_category_intro' => 'Dit rapport geeft je inzicht in één of meerdere categorieën.', - 'reports_report_category_pieCharts' => 'Deze grafieken geven je inzicht in de uitgaven en inkomsten per categorie of per rekening.', - 'reports_report_category_incomeAndExpensesChart' => 'Deze grafiek toont je uitgaven en inkomsten per categorie.', + 'reports_report_category_intro' => 'Dit rapport geeft je inzicht in één of meerdere categorieën.', + 'reports_report_category_pieCharts' => 'Deze grafieken geven je inzicht in de uitgaven en inkomsten per categorie of per rekening.', + 'reports_report_category_incomeAndExpensesChart' => 'Deze grafiek toont je uitgaven en inkomsten per categorie.', - 'reports_report_tag_intro' => 'Dit rapport geeft je inzicht in één of meerdere tags.', - 'reports_report_tag_pieCharts' => 'Deze grafieken geven je inzicht in de uitgaven en inkomsten per tag, rekening, categorie of budget.', - 'reports_report_tag_incomeAndExpensesChart' => 'Deze grafiek toont je uitgaven en inkomsten per tag.', + 'reports_report_tag_intro' => 'Dit rapport geeft je inzicht in één of meerdere tags.', + 'reports_report_tag_pieCharts' => 'Deze grafieken geven je inzicht in de uitgaven en inkomsten per tag, rekening, categorie of budget.', + 'reports_report_tag_incomeAndExpensesChart' => 'Deze grafiek toont je uitgaven en inkomsten per tag.', 'reports_report_budget_intro' => 'Dit rapport geeft je inzicht in één of meerdere budgetten.', 'reports_report_budget_pieCharts' => 'Deze grafieken geven je inzicht in de uitgaven en inkomsten per budget of per rekening.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Naast deze balk zitten twee knoppen (+ en -) om geld aan je spaarpotje toe te voegen, of er uit te halen.', 'piggy-banks_index_accountStatus' => 'Voor elke betaalrekening met minstens één spaarpotje zie je hier de status.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Wat is je doel? Een nieuwe zithoek, een camera of geld voor noodgevallen?', 'piggy-banks_create_date' => 'Je kan een doeldatum of een deadline voor je spaarpot instellen.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Gebruik contracten om de hoeveelheid geld te volgen die je elke periode moet betalen. Denk aan uitgaven zoals huur, verzekering of hypotheekbetalingen.', 'bills_create_name' => 'Gebruik een beschrijvende naam zoals "huur" of "zorgverzekering".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Stel ook een minimum- en maximumbedrag in.', 'bills_create_repeat_freq_holder' => 'De meeste contracten herhalen maandelijks, maar dat kan je eventueel veranderen.', 'bills_create_skip_holder' => 'Als een contract elke twee weken herhaalt, zet je het "skip"-veld op 1 om elke andere week over te slaan.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Gebruik deze knop om te zien welke bestaande transacties overeen zouden komen.', 'rules_create_actions' => 'Stel zoveel acties in als je wilt.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Meer opties zijn beschikbaar achter deze tabbladen.', diff --git a/resources/lang/nl_NL/list.php b/resources/lang/nl_NL/list.php index be4af85bf3..f86d7525ff 100644 --- a/resources/lang/nl_NL/list.php +++ b/resources/lang/nl_NL/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Knoppen', - 'icon' => 'Icoon', - 'id' => 'ID', - 'create_date' => 'Aangemaakt op', - 'update_date' => 'Bijgewerkt op', - 'updated_at' => 'Bijgewerkt op', - 'balance_before' => 'Saldo voor', - 'balance_after' => 'Saldo na', - 'name' => 'Naam', - 'role' => 'Rol', - 'currentBalance' => 'Huidig saldo', - 'linked_to_rules' => 'Relevante regels', - 'active' => 'Actief?', - 'percentage' => 'pct', - 'recurring_transaction' => 'Periodieke transactie', - 'next_due' => 'Volgende', - 'transaction_type' => 'Type', - 'lastActivity' => 'Laatste activiteit', - 'balanceDiff' => 'Saldoverschil', - 'other_meta_data' => 'Andere metadata', - 'invited_at' => 'Uitgenodigd op', - 'expires' => 'Uitnodiging verloopt', - 'invited_by' => 'Uitgenodigd door', - 'invite_link' => 'Uitnodigingslink', - 'account_type' => 'Accounttype', - 'created_at' => 'Gemaakt op', - 'account' => 'Rekening', - 'external_url' => 'Externe URL', - 'matchingAmount' => 'Bedrag', - 'destination' => 'Doel', - 'source' => 'Bron', - 'next_expected_match' => 'Volgende verwachte match', - 'automatch' => 'Automatisch herkennen?', + 'buttons' => 'Knoppen', + 'icon' => 'Icoon', + 'id' => 'ID', + 'create_date' => 'Aangemaakt op', + 'update_date' => 'Bijgewerkt op', + 'updated_at' => 'Bijgewerkt op', + 'balance_before' => 'Saldo voor', + 'balance_after' => 'Saldo na', + 'name' => 'Naam', + 'role' => 'Rol', + 'currentBalance' => 'Huidig saldo', + 'linked_to_rules' => 'Relevante regels', + 'active' => 'Actief?', + 'percentage' => 'pct', + 'recurring_transaction' => 'Periodieke transactie', + 'next_due' => 'Volgende', + 'transaction_type' => 'Type', + 'lastActivity' => 'Laatste activiteit', + 'balanceDiff' => 'Saldoverschil', + 'other_meta_data' => 'Andere metadata', + 'invited_at' => 'Uitgenodigd op', + 'expires' => 'Uitnodiging verloopt', + 'invited_by' => 'Uitgenodigd door', + 'invite_link' => 'Uitnodigingslink', + 'account_type' => 'Accounttype', + 'created_at' => 'Gemaakt op', + 'account' => 'Rekening', + 'external_url' => 'Externe URL', + 'matchingAmount' => 'Bedrag', + 'destination' => 'Doel', + 'source' => 'Bron', + 'next_expected_match' => 'Volgende verwachte match', + 'automatch' => 'Automatisch herkennen?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Herhaling', 'description' => 'Omschrijving', 'amount' => 'Bedrag', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Bunq-account', 'file_name' => 'Bestandsnaam', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Bestandsgrootte', - 'file_type' => 'Bestandstype', - 'attached_to' => 'Bijlage van', - 'file_exists' => 'Bestand bestaat', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Laatst ingelogd', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'bunq betalings-ID', - 'repetitions' => 'Herhalingen', - 'title' => 'Titel', - 'transaction_s' => 'Transactie(s)', - 'field' => 'Veld', - 'value' => 'Waarde', - 'interest' => 'Rente', - 'interest_period' => 'Renteperiode', - 'liability_type' => 'Type passiva', - 'liability_direction' => 'Passiva in- of uitgaand', - 'end_date' => 'Einddatum', - 'payment_info' => 'Betalingsinformatie', - 'expected_info' => 'Volgende verwachte transactie', - 'start_date' => 'Startdatum', - 'trigger' => 'Trigger', - 'response' => 'Reactie', - 'delivery' => 'Bericht', - 'url' => 'URL', - 'secret' => 'Geheim', - + 'file_size' => 'Bestandsgrootte', + 'file_type' => 'Bestandstype', + 'attached_to' => 'Bijlage van', + 'file_exists' => 'Bestand bestaat', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Laatst ingelogd', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'bunq betalings-ID', + 'repetitions' => 'Herhalingen', + 'title' => 'Titel', + 'transaction_s' => 'Transactie(s)', + 'field' => 'Veld', + 'value' => 'Waarde', + 'interest' => 'Rente', + 'interest_period' => 'Renteperiode', + 'liability_type' => 'Type passiva', + 'liability_direction' => 'Passiva in- of uitgaand', + 'end_date' => 'Einddatum', + 'payment_info' => 'Betalingsinformatie', + 'expected_info' => 'Volgende verwachte transactie', + 'start_date' => 'Startdatum', + 'trigger' => 'Trigger', + 'response' => 'Reactie', + 'delivery' => 'Bericht', + 'url' => 'URL', + 'secret' => 'Geheim', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/nl_NL/pagination.php b/resources/lang/nl_NL/pagination.php index e644c9f1bf..0485b1f517 100644 --- a/resources/lang/nl_NL/pagination.php +++ b/resources/lang/nl_NL/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nl_NL/passwords.php b/resources/lang/nl_NL/passwords.php index b1600218bb..0b929c7bb6 100644 --- a/resources/lang/nl_NL/passwords.php +++ b/resources/lang/nl_NL/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nl_NL/rules.php b/resources/lang/nl_NL/rules.php index c546a1c14b..e5e6c27748 100644 --- a/resources/lang/nl_NL/rules.php +++ b/resources/lang/nl_NL/rules.php @@ -1,6 +1,5 @@ 'Firefly III kan geen abonnement met naam ":name" vinden', 'no_notes_to_move' => 'De transactie heeft geen notities om te verplaatsen naar het omschrijvingsveld', 'no_tags_to_remove' => 'De transactie heeft geen tags om te verwijderen', + 'not_withdrawal' => 'Deze transactie is niet een uitgave', + 'not_deposit' => 'Deze transactie is geen inkomsten', 'cannot_find_tag' => 'Firefly III kan tag ":tag" niet vinden', 'cannot_find_asset' => 'Firefly III kan geen betaalrekening met naam ":name" vinden', 'cannot_find_accounts' => 'Firefly III kan de bron- of doelrekening niet vinden', diff --git a/resources/lang/nl_NL/validation.php b/resources/lang/nl_NL/validation.php index 1082007b08..714b70f9d9 100644 --- a/resources/lang/nl_NL/validation.php +++ b/resources/lang/nl_NL/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array mist "where"-clausule', - 'missing_update' => 'Array mist "update"-clausule', - 'invalid_where_key' => 'JSON bevat een ongeldige key in de "where"-clausule', - 'invalid_update_key' => 'JSON bevat een ongeldige key in de "update"-clausule', - 'invalid_query_data' => 'Er zitten ongeldige gegevens in het %s:%s veld van je query.', - 'invalid_query_account_type' => 'Je query bevat accounts van verschillende types, wat niet is toegestaan.', - 'invalid_query_currency' => 'Je query bevat account met verschillende valuta-instellingen, wat niet is toegestaan.', - 'iban' => 'Dit is niet een geldige IBAN.', - 'zero_or_more' => 'De waarde mag niet negatief zijn.', - 'date_or_time' => 'De waarde moet een geldige datum of tijdwaarde zijn (ISO 8601).', - 'source_equals_destination' => 'De bronrekening is gelijk aan de doelrekening.', - 'unique_account_number_for_user' => 'Het lijkt erop dat dit rekeningnummer al in gebruik is.', - 'unique_iban_for_user' => 'Het lijkt erop dat deze IBAN al in gebruik is.', - 'deleted_user' => 'Je kan je niet registreren met dit e-mailadres.', - 'rule_trigger_value' => 'Deze waarde is niet geldig voor de geselecteerde trigger.', - 'rule_action_value' => 'Deze waarde is niet geldig voor de geselecteerde actie.', - 'file_already_attached' => 'Het geuploade bestand ":name" is al gelinkt aan deze transactie.', - 'file_attached' => 'Bestand ":name" is succesvol geüpload.', - 'must_exist' => 'Het ID in veld :attribute bestaat niet.', - 'all_accounts_equal' => 'Alle rekeningen in dit veld moeten gelijk zijn.', - 'group_title_mandatory' => 'Een groepstitel is verplicht wanneer er meer dan één transactie is.', - 'transaction_types_equal' => 'Alle splits moeten van hetzelfde type zijn.', - 'invalid_transaction_type' => 'Ongeldig transactietype.', - 'invalid_selection' => 'Ongeldige selectie.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Er is op zijn minst één transactie nodig.', - 'recurring_transaction_id' => 'Er is op zijn minst één transactie nodig.', - 'need_id_to_match' => 'Je moet dit item met een ID versturen, zodat de API het kan matchen.', - 'too_many_unmatched' => 'Te veel transacties kunnen niet worden gekoppeld aan hun respectievelijke databank gegeven. Zorg ervoor dat bestaande transacties een geldig ID hebben.', - 'id_does_not_match' => 'Ingediend ID #:id komt niet overeen met het verwachte ID. Zorg ervoor dat het overeenkomt of laat het veld weg.', - 'at_least_one_repetition' => 'Er is op zijn minst één herhaling nodig.', - 'require_repeat_until' => 'Je moet een aantal herhalingen opgeven, of een einddatum (repeat_until). Niet beide.', - 'require_currency_info' => 'De inhoud van dit veld is ongeldig zonder valutagegevens.', - 'not_transfer_account' => 'Deze account kan je niet gebruiken voor overschrijvingen.', - 'require_currency_amount' => 'De inhoud van dit veld is ongeldig zonder bedrag in vreemde valuta.', - 'require_foreign_currency' => 'Dit veld vereist een nummer', - 'require_foreign_dest' => 'Deze veldwaarde moet overeenkomen met de valuta van de doelrekening.', - 'require_foreign_src' => 'Deze veldwaarde moet overeenkomen met de valuta van de bronrekening.', - 'equal_description' => 'Transactiebeschrijving mag niet gelijk zijn aan globale beschrijving.', - 'file_invalid_mime' => 'Bestand ":name" is van het type ":mime", en die kan je niet uploaden.', - 'file_too_large' => 'Bestand ":name" is te groot.', - 'belongs_to_user' => 'De waarde van :attribute is onbekend.', - 'accepted' => ':attribute moet geaccepteerd zijn.', - 'bic' => 'Dit is geen geldige BIC.', - 'at_least_one_trigger' => 'De regel moet minstens één trigger hebben.', - 'at_least_one_active_trigger' => 'De regel moet minstens één actieve trigger hebben.', - 'at_least_one_action' => 'De regel moet minstens één actie hebben.', - 'at_least_one_active_action' => 'De regel moet minstens één actieve actie hebben.', - 'base64' => 'Dit is geen geldige base64 gecodeerde data.', - 'model_id_invalid' => 'Dit ID past niet bij dit object.', - 'less' => ':attribute moet minder zijn dan 10.000.000', - 'active_url' => ':attribute is geen geldige URL.', - 'after' => ':attribute moet een datum na :date zijn.', - 'date_after' => 'De startdatum moet vóór de einddatum zijn.', - 'alpha' => ':attribute mag alleen letters bevatten.', - 'alpha_dash' => ':attribute mag alleen letters, nummers, onderstreep(_) en strepen(-) bevatten.', - 'alpha_num' => ':attribute mag alleen letters en nummers bevatten.', - 'array' => ':attribute moet geselecteerde elementen bevatten.', - 'unique_for_user' => 'Er is al een entry met deze :attribute.', - 'before' => ':attribute moet een datum voor :date zijn.', - 'unique_object_for_user' => 'Deze naam is al in gebruik.', - 'unique_account_for_user' => 'Deze rekeningnaam is al in gebruik.', + 'bad_type_source' => 'Firefly III kan het transactietype niet bepalen op basis van deze bronrekening.', + 'bad_type_destination' => 'Firefly III kan het transactietype niet bepalen op basis van deze doelrekening.', + 'missing_where' => 'Array mist "where"-clausule', + 'missing_update' => 'Array mist "update"-clausule', + 'invalid_where_key' => 'JSON bevat een ongeldige key in de "where"-clausule', + 'invalid_update_key' => 'JSON bevat een ongeldige key in de "update"-clausule', + 'invalid_query_data' => 'Er zitten ongeldige gegevens in het %s:%s veld van je query.', + 'invalid_query_account_type' => 'Je query bevat accounts van verschillende types, wat niet is toegestaan.', + 'invalid_query_currency' => 'Je query bevat account met verschillende valuta-instellingen, wat niet is toegestaan.', + 'iban' => 'Dit is niet een geldige IBAN.', + 'zero_or_more' => 'De waarde mag niet negatief zijn.', + 'more_than_zero' => 'Het bedrag moet meer zijn dan nul.', + 'more_than_zero_correct' => 'De waarde moet nul of meer zijn.', + 'no_asset_account' => 'Dit is geen betaalrekening.', + 'date_or_time' => 'De waarde moet een geldige datum of tijdwaarde zijn (ISO 8601).', + 'source_equals_destination' => 'De bronrekening is gelijk aan de doelrekening.', + 'unique_account_number_for_user' => 'Het lijkt erop dat dit rekeningnummer al in gebruik is.', + 'unique_iban_for_user' => 'Het lijkt erop dat deze IBAN al in gebruik is.', + 'reconciled_forbidden_field' => 'Deze transactie is al afgestemd, dus je kan ":field" niet wijzigen', + 'deleted_user' => 'Je kan je niet registreren met dit e-mailadres.', + 'rule_trigger_value' => 'Deze waarde is niet geldig voor de geselecteerde trigger.', + 'rule_action_value' => 'Deze waarde is niet geldig voor de geselecteerde actie.', + 'file_already_attached' => 'Het geuploade bestand ":name" is al gelinkt aan deze transactie.', + 'file_attached' => 'Bestand ":name" is succesvol geüpload.', + 'must_exist' => 'Het ID in veld :attribute bestaat niet.', + 'all_accounts_equal' => 'Alle rekeningen in dit veld moeten gelijk zijn.', + 'group_title_mandatory' => 'Een groepstitel is verplicht wanneer er meer dan één transactie is.', + 'transaction_types_equal' => 'Alle splits moeten van hetzelfde type zijn.', + 'invalid_transaction_type' => 'Ongeldig transactietype.', + 'invalid_selection' => 'Ongeldige selectie.', + 'belongs_user' => 'Deze waarde hoort bij een object dat niet lijkt te bestaan.', + 'belongs_user_or_user_group' => 'Deze waarde hoort bij een object dat niet bij deze financiële administratie hoort.', + 'at_least_one_transaction' => 'Er is op zijn minst één transactie nodig.', + 'recurring_transaction_id' => 'Er is op zijn minst één transactie nodig.', + 'need_id_to_match' => 'Je moet dit item met een ID versturen, zodat de API het kan matchen.', + 'too_many_unmatched' => 'Te veel transacties kunnen niet worden gekoppeld aan hun respectievelijke databank gegeven. Zorg ervoor dat bestaande transacties een geldig ID hebben.', + 'id_does_not_match' => 'Ingediend ID #:id komt niet overeen met het verwachte ID. Zorg ervoor dat het overeenkomt of laat het veld weg.', + 'at_least_one_repetition' => 'Er is op zijn minst één herhaling nodig.', + 'require_repeat_until' => 'Je moet een aantal herhalingen opgeven, of een einddatum (repeat_until). Niet beide.', + 'require_currency_info' => 'De inhoud van dit veld is ongeldig zonder valutagegevens.', + 'not_transfer_account' => 'Deze account kan je niet gebruiken voor overschrijvingen.', + 'require_currency_amount' => 'De inhoud van dit veld is ongeldig zonder bedrag in vreemde valuta.', + 'require_foreign_currency' => 'Dit veld vereist een nummer', + 'require_foreign_dest' => 'Deze veldwaarde moet overeenkomen met de valuta van de doelrekening.', + 'require_foreign_src' => 'Deze veldwaarde moet overeenkomen met de valuta van de bronrekening.', + 'equal_description' => 'Transactiebeschrijving mag niet gelijk zijn aan globale beschrijving.', + 'file_invalid_mime' => 'Bestand ":name" is van het type ":mime", en die kan je niet uploaden.', + 'file_too_large' => 'Bestand ":name" is te groot.', + 'belongs_to_user' => 'De waarde van :attribute is onbekend.', + 'accepted' => ':attribute moet geaccepteerd zijn.', + 'bic' => 'Dit is geen geldige BIC.', + 'at_least_one_trigger' => 'De regel moet minstens één trigger hebben.', + 'at_least_one_active_trigger' => 'De regel moet minstens één actieve trigger hebben.', + 'at_least_one_action' => 'De regel moet minstens één actie hebben.', + 'at_least_one_active_action' => 'De regel moet minstens één actieve actie hebben.', + 'base64' => 'Dit is geen geldige base64 gecodeerde data.', + 'model_id_invalid' => 'Dit ID past niet bij dit object.', + 'less' => ':attribute moet minder zijn dan 10.000.000', + 'active_url' => ':attribute is geen geldige URL.', + 'after' => ':attribute moet een datum na :date zijn.', + 'date_after' => 'De startdatum moet vóór de einddatum zijn.', + 'alpha' => ':attribute mag alleen letters bevatten.', + 'alpha_dash' => ':attribute mag alleen letters, nummers, onderstreep(_) en strepen(-) bevatten.', + 'alpha_num' => ':attribute mag alleen letters en nummers bevatten.', + 'array' => ':attribute moet geselecteerde elementen bevatten.', + 'unique_for_user' => 'Er is al een entry met deze :attribute.', + 'before' => ':attribute moet een datum voor :date zijn.', + 'unique_object_for_user' => 'Deze naam is al in gebruik.', + 'unique_account_for_user' => 'Deze rekeningnaam is al in gebruik.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute moet tussen :min en :max zijn.', + 'between.file' => ':attribute moet tussen :min en :max kilobytes zijn.', + 'between.string' => ':attribute moet tussen :min en :max karakters zijn.', + 'between.array' => ':attribute moet tussen :min en :max items bevatten.', + 'boolean' => ':attribute moet true of false zijn.', + 'confirmed' => ':attribute bevestiging komt niet overeen.', + 'date' => ':attribute moet een datum bevatten.', + 'date_format' => ':attribute moet een geldig datum formaat bevatten.', + 'different' => ':attribute en :other moeten verschillend zijn.', + 'digits' => ':attribute moet bestaan uit :digits cijfers.', + 'digits_between' => ':attribute moet bestaan uit minimaal :min en maximaal :max cijfers.', + 'email' => ':attribute is geen geldig e-mailadres.', + 'filled' => ':attribute is verplicht.', + 'exists' => ':attribute bestaat niet.', + 'image' => ':attribute moet een afbeelding zijn.', + 'in' => ':attribute is ongeldig.', + 'integer' => ':attribute moet een getal zijn.', + 'ip' => ':attribute moet een geldig IP-adres zijn.', + 'json' => 'De :attribute moet een JSON tekst zijn.', + 'max.numeric' => ':attribute mag niet hoger dan :max zijn.', + 'max.file' => ':attribute mag niet meer dan :max kilobytes zijn.', + 'max.string' => ':attribute mag niet uit meer dan :max karakters bestaan.', + 'max.array' => ':attribute mag niet meer dan :max items bevatten.', + 'mimes' => ':attribute moet een bestand zijn van het bestandstype :values.', + 'min.numeric' => ':attribute moet minimaal :min zijn.', + 'lte.numeric' => 'Veld :attribute moet minder zijn dan :value.', + 'min.file' => ':attribute moet minimaal :min kilobytes zijn.', + 'min.string' => ':attribute moet minimaal :min karakters zijn.', + 'min.array' => ':attribute moet minimaal :min items bevatten.', + 'not_in' => 'Het formaat van :attribute is ongeldig.', + 'numeric' => ':attribute moet een nummer zijn.', + 'scientific_notation' => 'In veld :attribute kan je de wetenschappelijke notatie niet gebruiken.', + 'numeric_native' => 'Het originele bedrag moet een getal zijn.', + 'numeric_destination' => 'Het doelbedrag moet een getal zijn.', + 'numeric_source' => 'Het bronbedrag moet een getal zijn.', + 'regex' => ':attribute formaat is ongeldig.', + 'required' => ':attribute is verplicht.', + 'required_if' => ':attribute is verplicht indien :other gelijk is aan :value.', + 'required_unless' => ':attribute is verplicht tenzij :other gelijk is aan :values.', + 'required_with' => ':attribute is verplicht i.c.m. :values', + 'required_with_all' => ':attribute is verplicht i.c.m. :values', + 'required_without' => ':attribute is verplicht als :values niet ingevuld is.', + 'required_without_all' => ':attribute is verplicht als :values niet ingevuld zijn.', + 'same' => ':attribute en :other moeten overeenkomen.', + 'size.numeric' => ':attribute moet :size zijn.', + 'amount_min_over_max' => 'Het minimumbedrag mag niet groter zijn dan het maximale bedrag.', + 'size.file' => ':attribute moet :size kilobyte zijn.', + 'size.string' => ':attribute moet :size karakters zijn.', + 'size.array' => ':attribute moet :size items bevatten.', + 'unique' => ':attribute is al in gebruik.', + 'string' => 'Het :attribute moet een tekenreeks zijn.', + 'url' => ':attribute is geen geldige URL.', + 'timezone' => 'Het :attribute moet een geldige zone zijn.', + '2fa_code' => 'De waarde in het :attribute-veld is niet geldig.', + 'dimensions' => 'Het :attribute heeft het verkeerde afbeeldingsformaat.', + 'distinct' => 'Het :attribute veld heeft een dubbele waarde.', + 'file' => ':attribute moet een bestand zijn.', + 'in_array' => 'Het :attribute veld bestaat niet in :other.', + 'present' => 'Het :attribute veld moet aanwezig zijn.', + 'amount_zero' => 'Het totaalbedrag kan niet nul zijn.', + 'current_target_amount' => 'Het huidige bedrag moet minder zijn dan het doelbedrag.', + 'unique_piggy_bank_for_user' => 'De naam van de spaarpot moet uniek zijn.', + 'unique_object_group' => 'De groepsnaam moet uniek zijn', + 'starts_with' => 'De waarde moet beginnen met :values.', + 'unique_webhook' => 'Je hebt al een webhook met deze combinatie van URL, trigger, reactie en bericht.', + 'unique_existing_webhook' => 'Je hebt al een andere webhook met deze combinatie van URL, trigger, reactie en bericht.', + 'same_account_type' => 'Beide rekeningen moeten van hetzelfde rekeningtype zijn', + 'same_account_currency' => 'Beide rekeningen moeten dezelfde valuta hebben', - 'between.numeric' => ':attribute moet tussen :min en :max zijn.', - 'between.file' => ':attribute moet tussen :min en :max kilobytes zijn.', - 'between.string' => ':attribute moet tussen :min en :max karakters zijn.', - 'between.array' => ':attribute moet tussen :min en :max items bevatten.', - 'boolean' => ':attribute moet true of false zijn.', - 'confirmed' => ':attribute bevestiging komt niet overeen.', - 'date' => ':attribute moet een datum bevatten.', - 'date_format' => ':attribute moet een geldig datum formaat bevatten.', - 'different' => ':attribute en :other moeten verschillend zijn.', - 'digits' => ':attribute moet bestaan uit :digits cijfers.', - 'digits_between' => ':attribute moet bestaan uit minimaal :min en maximaal :max cijfers.', - 'email' => ':attribute is geen geldig e-mailadres.', - 'filled' => ':attribute is verplicht.', - 'exists' => ':attribute bestaat niet.', - 'image' => ':attribute moet een afbeelding zijn.', - 'in' => ':attribute is ongeldig.', - 'integer' => ':attribute moet een getal zijn.', - 'ip' => ':attribute moet een geldig IP-adres zijn.', - 'json' => 'De :attribute moet een JSON tekst zijn.', - 'max.numeric' => ':attribute mag niet hoger dan :max zijn.', - 'max.file' => ':attribute mag niet meer dan :max kilobytes zijn.', - 'max.string' => ':attribute mag niet uit meer dan :max karakters bestaan.', - 'max.array' => ':attribute mag niet meer dan :max items bevatten.', - 'mimes' => ':attribute moet een bestand zijn van het bestandstype :values.', - 'min.numeric' => ':attribute moet minimaal :min zijn.', - 'lte.numeric' => 'Veld :attribute moet minder zijn dan :value.', - 'min.file' => ':attribute moet minimaal :min kilobytes zijn.', - 'min.string' => ':attribute moet minimaal :min karakters zijn.', - 'min.array' => ':attribute moet minimaal :min items bevatten.', - 'not_in' => 'Het formaat van :attribute is ongeldig.', - 'numeric' => ':attribute moet een nummer zijn.', - 'numeric_native' => 'Het originele bedrag moet een getal zijn.', - 'numeric_destination' => 'Het doelbedrag moet een getal zijn.', - 'numeric_source' => 'Het bronbedrag moet een getal zijn.', - 'regex' => ':attribute formaat is ongeldig.', - 'required' => ':attribute is verplicht.', - 'required_if' => ':attribute is verplicht indien :other gelijk is aan :value.', - 'required_unless' => ':attribute is verplicht tenzij :other gelijk is aan :values.', - 'required_with' => ':attribute is verplicht i.c.m. :values', - 'required_with_all' => ':attribute is verplicht i.c.m. :values', - 'required_without' => ':attribute is verplicht als :values niet ingevuld is.', - 'required_without_all' => ':attribute is verplicht als :values niet ingevuld zijn.', - 'same' => ':attribute en :other moeten overeenkomen.', - 'size.numeric' => ':attribute moet :size zijn.', - 'amount_min_over_max' => 'Het minimumbedrag mag niet groter zijn dan het maximale bedrag.', - 'size.file' => ':attribute moet :size kilobyte zijn.', - 'size.string' => ':attribute moet :size karakters zijn.', - 'size.array' => ':attribute moet :size items bevatten.', - 'unique' => ':attribute is al in gebruik.', - 'string' => 'Het :attribute moet een tekenreeks zijn.', - 'url' => ':attribute is geen geldige URL.', - 'timezone' => 'Het :attribute moet een geldige zone zijn.', - '2fa_code' => 'De waarde in het :attribute-veld is niet geldig.', - 'dimensions' => 'Het :attribute heeft het verkeerde afbeeldingsformaat.', - 'distinct' => 'Het :attribute veld heeft een dubbele waarde.', - 'file' => ':attribute moet een bestand zijn.', - 'in_array' => 'Het :attribute veld bestaat niet in :other.', - 'present' => 'Het :attribute veld moet aanwezig zijn.', - 'amount_zero' => 'Het totaalbedrag kan niet nul zijn.', - 'current_target_amount' => 'Het huidige bedrag moet minder zijn dan het doelbedrag.', - 'unique_piggy_bank_for_user' => 'De naam van de spaarpot moet uniek zijn.', - 'unique_object_group' => 'De groepsnaam moet uniek zijn', - 'starts_with' => 'De waarde moet beginnen met :values.', - 'unique_webhook' => 'Je hebt al een webhook met deze combinatie van URL, trigger, reactie en bericht.', - 'unique_existing_webhook' => 'Je hebt al een andere webhook met deze combinatie van URL, trigger, reactie en bericht.', - 'same_account_type' => 'Beide rekeningen moeten van hetzelfde rekeningtype zijn', - 'same_account_currency' => 'Beide rekeningen moeten dezelfde valuta hebben', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Dit is geen veilig wachtwoord. Probeer het nog een keer. Zie ook: https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Dit is geen geldige herhaling voor periodieke transacties.', - 'valid_recurrence_rep_moment' => 'Ongeldig herhaalmoment voor dit type herhaling.', - 'invalid_account_info' => 'Ongeldige rekeninginformatie.', - 'attributes' => [ + 'secure_password' => 'Dit is geen veilig wachtwoord. Probeer het nog een keer. Zie ook: https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Dit is geen geldige herhaling voor periodieke transacties.', + 'valid_recurrence_rep_moment' => 'Ongeldig herhaalmoment voor dit type herhaling.', + 'invalid_account_info' => 'Ongeldige rekeninginformatie.', + 'attributes' => [ 'email' => 'e-mailadres', 'description' => 'omschrijving', 'amount' => 'bedrag', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Om door te gaan moet een geldige bronrekening ID en/of geldige bronrekeningnaam worden gevonden.', - 'withdrawal_source_bad_data' => '[a] Kan geen geldige bronrekening vinden bij het zoeken naar ID ":id" of naam ":name".', - 'withdrawal_dest_need_data' => '[a] Om door te gaan moet een geldig doelrekening ID en/of geldige doelrekeningnaam worden gevonden.', - 'withdrawal_dest_bad_data' => 'Kan geen geldige doelrekening vinden bij het zoeken naar ID ":id" of naam ":name".', + 'withdrawal_source_need_data' => 'Om door te gaan moet een geldige bronrekening ID en/of geldige bronrekeningnaam worden gevonden.', + 'withdrawal_source_bad_data' => '[a] Kan geen geldige bronrekening vinden bij het zoeken naar ID ":id" of naam ":name".', + 'withdrawal_dest_need_data' => '[a] Om door te gaan moet een geldig doelrekening ID en/of geldige doelrekeningnaam worden gevonden.', + 'withdrawal_dest_bad_data' => 'Kan geen geldige doelrekening vinden bij het zoeken naar ID ":id" of naam ":name".', - 'withdrawal_dest_iban_exists' => 'De IBAN van deze doelrekening is al in gebruik door een betaalrekening of een passiva, en kan niet worden gebruikt als een doelrekening voor deze uitgave.', - 'deposit_src_iban_exists' => 'De IBAN van deze bronrekening is al in gebruik door een betaalrekening of een passiva, en kan niet worden gebruikt als een bronrekening voor deze inkomsten.', + 'withdrawal_dest_iban_exists' => 'De IBAN van deze doelrekening is al in gebruik door een betaalrekening of een passiva, en kan niet worden gebruikt als een doelrekening voor deze uitgave.', + 'deposit_src_iban_exists' => 'De IBAN van deze bronrekening is al in gebruik door een betaalrekening of een passiva, en kan niet worden gebruikt als een bronrekening voor deze inkomsten.', - 'reconciliation_source_bad_data' => 'Kan geen geldige afstemmingsrekening vinden bij het zoeken naar ID ":id" of naam ":name".', + 'reconciliation_source_bad_data' => 'Kan geen geldige afstemmingsrekening vinden bij het zoeken naar ID ":id" of naam ":name".', - 'generic_source_bad_data' => '[e] Kan geen geldige bronrekening vinden bij het zoeken naar ID ":id" of naam ":name".', + 'generic_source_bad_data' => '[e] Kan geen geldige bronrekening vinden bij het zoeken naar ID ":id" of naam ":name".', - 'deposit_source_need_data' => 'Om door te gaan moet een geldige bronrekening ID en/of geldige bronrekeningnaam worden gevonden.', - 'deposit_source_bad_data' => '[b] Kan geen geldige bronrekening vinden bij het zoeken naar ID ":id" of naam ":name".', - 'deposit_dest_need_data' => '[b] Om door te gaan moet een geldig doelrekening ID en/of geldige doelrekeningnaam worden ingevoerd.', - 'deposit_dest_bad_data' => 'Kan geen geldige doelrekening vinden bij het zoeken naar ID ":id" of naam ":name".', - 'deposit_dest_wrong_type' => 'De ingevoerde doelrekening is niet van het juiste type.', + 'deposit_source_need_data' => 'Om door te gaan moet een geldige bronrekening ID en/of geldige bronrekeningnaam worden gevonden.', + 'deposit_source_bad_data' => '[b] Kan geen geldige bronrekening vinden bij het zoeken naar ID ":id" of naam ":name".', + 'deposit_dest_need_data' => '[b] Om door te gaan moet een geldig doelrekening ID en/of geldige doelrekeningnaam worden ingevoerd.', + 'deposit_dest_bad_data' => 'Kan geen geldige doelrekening vinden bij het zoeken naar ID ":id" of naam ":name".', + 'deposit_dest_wrong_type' => 'De ingevoerde doelrekening is niet van het juiste type.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Om door te gaan moet een geldig bronaccount ID en/of geldige bronaccountnaam worden gevonden.', + 'transfer_source_bad_data' => '[c] Kan geen geldige bronrekening vinden bij het zoeken naar ID ":id" of naam ":name".', + 'transfer_dest_need_data' => '[c] Om door te gaan moet een geldig doelrekening ID en/of geldige doelrekeningnaam worden ingevoerd.', + 'transfer_dest_bad_data' => 'Kan geen geldige doelrekening vinden bij het zoeken naar ID ":id" of naam ":name".', + 'need_id_in_edit' => 'Elke split moet een transaction_journal_id hebben (een geldig ID of 0).', - 'transfer_source_need_data' => 'Om door te gaan moet een geldig bronaccount ID en/of geldige bronaccountnaam worden gevonden.', - 'transfer_source_bad_data' => '[c] Kan geen geldige bronrekening vinden bij het zoeken naar ID ":id" of naam ":name".', - 'transfer_dest_need_data' => '[c] Om door te gaan moet een geldig doelrekening ID en/of geldige doelrekeningnaam worden ingevoerd.', - 'transfer_dest_bad_data' => 'Kan geen geldige doelrekening vinden bij het zoeken naar ID ":id" of naam ":name".', - 'need_id_in_edit' => 'Elke split moet een transaction_journal_id hebben (een geldig ID of 0).', + 'ob_source_need_data' => 'Om door te gaan moet er een geldig bronrekening ID en/of geldige bronrekeningnaam worden gevonden.', + 'lc_source_need_data' => 'Er moet een geldig bronrekening-ID zijn om door te gaan.', + 'ob_dest_need_data' => '[d] Om door te gaan moet een geldig doelrekening ID en/of geldige doelrekeningnaam worden ingevoerd.', + 'ob_dest_bad_data' => 'Kan geen geldige doelrekening vinden bij het zoeken naar ID ":id" of naam ":name".', + 'reconciliation_either_account' => 'Om een afstemmingstransactie in te dienen moet je een bron- of doelrekening insturen. Niet beide, niet geen beide.', - 'ob_source_need_data' => 'Om door te gaan moet er een geldig bronrekening ID en/of geldige bronrekeningnaam worden gevonden.', - 'lc_source_need_data' => 'Er moet een geldig bronrekening-ID zijn om door te gaan.', - 'ob_dest_need_data' => '[d] Om door te gaan moet een geldig doelrekening ID en/of geldige doelrekeningnaam worden ingevoerd.', - 'ob_dest_bad_data' => 'Kan geen geldige doelrekening vinden bij het zoeken naar ID ":id" of naam ":name".', - 'reconciliation_either_account' => 'Om een afstemmingstransactie in te dienen moet je een bron- of doelrekening insturen. Niet beide, niet geen beide.', + 'generic_invalid_source' => 'Je kan deze rekening niet gebruiken als bronrekening.', + 'generic_invalid_destination' => 'Je kan deze rekening niet gebruiken als doelrekening.', - 'generic_invalid_source' => 'Je kan deze rekening niet gebruiken als bronrekening.', - 'generic_invalid_destination' => 'Je kan deze rekening niet gebruiken als doelrekening.', + 'generic_no_source' => 'Je moet bronrekeninggegevens submitten of een transactie journal ID meegeven.', + 'generic_no_destination' => 'Je moet doelrekeninggegevens submitten of een transactie journal ID meegeven.', - 'generic_no_source' => 'Je moet bronrekeninggegevens submitten of een transactie journal ID meegeven.', - 'generic_no_destination' => 'Je moet doelrekeninggegevens submitten of een transactie journal ID meegeven.', - - 'gte.numeric' => ':attribute moet groter of gelijk zijn aan :value.', - 'gt.numeric' => ':attribute moet groter zijn dan :value.', - 'gte.file' => ':attribute moet groter of gelijk zijn aan :value kilobytes.', - 'gte.string' => ':attribute moet :value karakters of meer bevatten.', - 'gte.array' => ':attribute moet :value items of meer bevatten.', + 'gte.numeric' => ':attribute moet groter of gelijk zijn aan :value.', + 'gt.numeric' => ':attribute moet groter zijn dan :value.', + 'gte.file' => ':attribute moet groter of gelijk zijn aan :value kilobytes.', + 'gte.string' => ':attribute moet :value karakters of meer bevatten.', + 'gte.array' => ':attribute moet :value items of meer bevatten.', 'amount_required_for_auto_budget' => 'Bedrag is vereist.', 'auto_budget_amount_positive' => 'Het bedrag moet meer zijn dan nul.', + 'auto_budget_period_mandatory' => 'De auto-budgetperiode is verplicht.', // no access to administration: diff --git a/resources/lang/nn_NO/api.php b/resources/lang/nn_NO/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/nn_NO/api.php +++ b/resources/lang/nn_NO/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/nn_NO/auth.php b/resources/lang/nn_NO/auth.php index 9334c00e05..a7d86a150a 100644 --- a/resources/lang/nn_NO/auth.php +++ b/resources/lang/nn_NO/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Me kunne ikkje finna nokon konto som har dei oppgitte detaljene.', 'throttle' => 'For mange innloggingsforsøk. Ver venleg å prøv att om :seconds sekunder.', diff --git a/resources/lang/nn_NO/breadcrumbs.php b/resources/lang/nn_NO/breadcrumbs.php index b97e60a8d1..885230447d 100644 --- a/resources/lang/nn_NO/breadcrumbs.php +++ b/resources/lang/nn_NO/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Heim', - 'budgets' => 'Budsjett', - 'subscriptions' => 'Abonnement', - 'transactions' => 'Transaksjoner', - 'title_expenses' => 'Utgifter', - 'title_withdrawal' => 'Utgifter', - 'title_revenue' => 'Inntekt', - 'title_deposit' => 'Inntekt', - 'title_transfer' => 'Overføringer', - 'title_transfers' => 'Overføringer', - 'edit_currency' => 'Rediger valuta ":name"', - 'delete_currency' => 'Slett valuta ":name"', - 'newPiggyBank' => 'Lag ein ny sparegris', - 'edit_piggyBank' => 'Rediger sparegris ":name"', - 'preferences' => 'Innstillinger', - 'profile' => 'Profil', - 'accounts' => 'Kontoar', - 'changePassword' => 'Endre passord', - 'change_email' => 'Endre din epostadresse', - 'bills' => 'Rekningar', - 'newBill' => 'Ny rekning', - 'edit_bill' => 'Rediger rekning ":name"', - 'delete_bill' => 'Slett rekning ":name"', - 'reports' => 'Rapporter', - 'search_result' => 'Søkeresultater for ":query"', - 'withdrawal_list' => 'Utgifter', - 'Withdrawal_list' => 'Utgifter', - 'deposit_list' => 'Inntekter og innskot', - 'transfer_list' => 'Overføringer', - 'transfers_list' => 'Overføringer', + 'home' => 'Heim', + 'budgets' => 'Budsjett', + 'subscriptions' => 'Abonnement', + 'transactions' => 'Transaksjoner', + 'title_expenses' => 'Utgifter', + 'title_withdrawal' => 'Utgifter', + 'title_revenue' => 'Inntekt', + 'title_deposit' => 'Inntekt', + 'title_transfer' => 'Overføringer', + 'title_transfers' => 'Overføringer', + 'edit_currency' => 'Rediger valuta ":name"', + 'delete_currency' => 'Slett valuta ":name"', + 'newPiggyBank' => 'Lag ein ny sparegris', + 'edit_piggyBank' => 'Rediger sparegrisen ":name"', + 'preferences' => 'Innstillinger', + 'profile' => 'Profil', + 'accounts' => 'Kontoar', + 'changePassword' => 'Endre passord', + 'change_email' => 'Endre din epostadresse', + 'bills' => 'Rekningar', + 'newBill' => 'Ny rekning', + 'edit_bill' => 'Rediger rekning ":name"', + 'delete_bill' => 'Slett rekning ":name"', + 'reports' => 'Rapporter', + 'search_result' => 'Søkeresultater for ":query"', + 'withdrawal_list' => 'Utgifter', + 'Withdrawal_list' => 'Utgifter', + 'deposit_list' => 'Inntekter og innskot', + 'transfer_list' => 'Overføringer', + 'transfers_list' => 'Overføringer', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Avstemminger', 'create_withdrawal' => 'Opprett nytt uttak', 'create_deposit' => 'Opprett nytt innskot', diff --git a/resources/lang/nn_NO/components.php b/resources/lang/nn_NO/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/nn_NO/components.php +++ b/resources/lang/nn_NO/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nn_NO/config.php b/resources/lang/nn_NO/config.php index ffe2a891bd..ffa1fb5a50 100644 --- a/resources/lang/nn_NO/config.php +++ b/resources/lang/nn_NO/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'nn', - 'locale' => 'no, nn, Norsk, nn_NO, nn_NO.utf8, nn_NO.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'nn', + 'locale' => 'no, nn, Norsk, nn_NO, nn_NO.utf8, nn_NO.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, YYYY', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, YYYY', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'MMMM Do, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'Do MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'Do MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'do MMMM, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'do MMMM, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Week' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Week' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'kvartal'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Måndag', - 'dow_2' => 'Tysdag', - 'dow_3' => 'Onsdag', - 'dow_4' => 'Torsdag', - 'dow_5' => 'Fredag', - 'dow_6' => 'Laurdag', - 'dow_7' => 'Søndag', + 'quarter_fns' => "'kvartal'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Måndag', + 'dow_2' => 'Tysdag', + 'dow_3' => 'Onsdag', + 'dow_4' => 'Torsdag', + 'dow_5' => 'Fredag', + 'dow_6' => 'Laurdag', + 'dow_7' => 'Søndag', ]; /* diff --git a/resources/lang/nn_NO/demo.php b/resources/lang/nn_NO/demo.php index 5b5c33baf7..c8932b8770 100644 --- a/resources/lang/nn_NO/demo.php +++ b/resources/lang/nn_NO/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nn_NO/email.php b/resources/lang/nn_NO/email.php index bdd0317482..5f62515e88 100644 --- a/resources/lang/nn_NO/email.php +++ b/resources/lang/nn_NO/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Ei testmelding frå Firefly III-installasjonen din', 'admin_test_body' => 'Dette er ei testmelding frå Firefly III-installasjonen din. Meldinga vart sendt til :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Ein invitasjon har vorte oppretta', 'invitation_created_body' => 'Admin brukar ":email" oppretta ein brukarinvitasjon til ":invitee. Invitasjonen vil vera gyldig i 48 timer.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Tilbakestill passord:', 'registered_doc_link' => 'Dokumentasjon:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Ein ny Firefly III versjon er tilgjengeleg', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Om du føretrekk, kan du òg åpne eit nytt problem på https://github.com/firefly-ii/firefly-ii/issues.', 'error_stacktrace_below' => 'Hele informasjonen er:', 'error_headers' => 'Følgende headers kan òg vera relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III har oppretta ein ny transaksjon|Firefly III har skapt :count nye transaksjonar', 'new_journals_header' => 'Firefly III har oppretta ein transaksjon for deg. Du finn den i din Firefly III installasjon|:Firefly III har laget :count transaksjonar for deg. Du kan finna dei i Firefly III installasjonen:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Rekninga din **":name"** avsluttes :date. Dette er **I DAG!**', 'bill_warning_extension_date_zero' => 'Rekninga din **":name"** skal forlenges eller annulleres :date. Dette er **I DAG!**', 'bill_warning_please_action' => 'Ver venleg å gjer dei rette tiltaka.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/nn_NO/errors.php b/resources/lang/nn_NO/errors.php index 2def2d3aee..3682bb3f5b 100644 --- a/resources/lang/nn_NO/errors.php +++ b/resources/lang/nn_NO/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack Trace', 'more_info' => 'Mer informasjon', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Samle inn meir informasjon i storage/logs mappa kor du finn loggfiler. Om du køyrer Docker, bruk docker logger -f [container].', - 'collect_info_more' => 'Du kan lesa meir om innsamling av feilinformasjon i FAQ.', - 'github_help' => 'Få hjelp på GitHub', - 'github_instructions' => 'Du er meir enn velkomen til å åpne eit nytt problem på GitHub.', - 'use_search' => 'Bruk søket!', - 'include_info' => 'Inkluder informasjonen frå denne feilsøkingssida.', - 'tell_more' => 'Fortel oss meir enn det står Oisann!"', - 'include_logs' => 'Inkluder feillogger (sjå ovenfor).', - 'what_did_you_do' => 'Fortell oss kva du gjorde.', - 'offline_header' => 'Du er sannsynligvis fråkopla', - 'offline_unreachable' => 'Firefly III er ikkje tilgjengeleg. Eininga di er fråkopla eller serveren fungerar ikkje.', - 'offline_github' => 'Om du er sikker på at både enheten og serveren er online, åpne ein sak på GitHub.', - + 'collect_info' => 'Samle inn meir informasjon i storage/logs mappa kor du finn loggfiler. Om du køyrer Docker, bruk docker logger -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Få hjelp på GitHub', + 'github_instructions' => 'Du er meir enn velkomen til å åpne eit nytt problem på GitHub.', + 'use_search' => 'Bruk søket!', + 'include_info' => 'Inkluder informasjonen frå denne feilsøkingssida.', + 'tell_more' => 'Fortel oss meir enn det står Oisann!"', + 'include_logs' => 'Inkluder feillogger (sjå ovenfor).', + 'what_did_you_do' => 'Fortell oss kva du gjorde.', + 'offline_header' => 'Du er sannsynligvis fråkopla', + 'offline_unreachable' => 'Firefly III er ikkje tilgjengeleg. Eininga di er fråkopla eller serveren fungerar ikkje.', + 'offline_github' => 'Om du er sikker på at både enheten og serveren er online, åpne ein sak på GitHub.', ]; diff --git a/resources/lang/nn_NO/firefly.php b/resources/lang/nn_NO/firefly.php index adc40dcd4a..edd443820c 100644 --- a/resources/lang/nn_NO/firefly.php +++ b/resources/lang/nn_NO/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Lukk', - 'actions' => 'Handlinger', - 'edit' => 'Rediger', - 'delete' => 'Slett', - 'split' => 'Del opp', - 'single_split' => 'Del opp', - 'clone' => 'Klon', - 'confirm_action' => 'Bekreft handling', - 'last_seven_days' => 'Syv siste dager', - 'last_thirty_days' => 'Tredve siste dager', - 'last_180_days' => 'Siste 180 dager', - 'month_to_date' => 'Måned til dato', - 'year_to_date' => 'År til dato', - 'YTD' => 'Hittil i år', - 'welcome_back' => 'Korleis går det?', - 'everything' => 'Alt', - 'today' => 'i dag', - 'customRange' => 'Egendefinert utval', - 'date_range' => 'Datointervall', - 'apply' => 'Bruk', - 'select_date' => 'Vel dato..', - 'cancel' => 'Avbryt', - 'from' => 'Frå', - 'to' => 'Til', - 'structure' => 'Struktur', - 'help_translating' => 'Denne hjelpeteksten er ikkje tilgjengelig på ditt språk. Vil du hjelpa å oversetta?', - 'showEverything' => 'Vis alt', - 'never' => 'Aldri', - 'no_results_for_empty_search' => 'Søket ditt var tomt, så ingenting vart funnet.', - 'removed_amount' => 'Fjerna :amount', - 'added_amount' => 'La til :amount', - 'asset_account_role_help' => 'Eventuelle ekstra alternativ som følge av ditt val kan settes senere.', - 'Opening balance' => 'Startsaldo', - 'create_new_stuff' => 'Lag nye ting', - 'new_withdrawal' => 'Nytt uttak', - 'create_new_transaction' => 'Opprett ny transaksjon', - 'sidebar_frontpage_create' => 'Opprett', - 'new_transaction' => 'Ny transaksjon', - 'no_rules_for_bill' => 'Denne rekninga har ingen reglar knytt til den.', - 'go_to_asset_accounts' => 'Sjå aktivakontoane dine', - 'go_to_budgets' => 'Gå til budsjetta dine', - 'go_to_withdrawals' => 'Gå til uttaka dine', - 'clones_journal_x' => 'Denne transaksjonen er ein klone av ":description" (#:id)', - 'go_to_categories' => 'Gå til kategoriane dine', - 'go_to_bills' => 'Gå til rekningane dine', - 'go_to_expense_accounts' => 'Sjå utgiftskontoane dine', - 'go_to_revenue_accounts' => 'Sjå inntektskontoane dine', - 'go_to_piggies' => 'Gå til sparegrisane dine', - 'new_deposit' => 'Nytt innskot', - 'new_transfer' => 'Ny overføring', - 'new_transfers' => 'Ny overføring', - 'new_asset_account' => 'Ny aktivakonto', - 'new_expense_account' => 'Ny utgiftskonto', - 'new_revenue_account' => 'Ny inntektskonto', - 'new_liabilities_account' => 'Ny gjeld', - 'new_budget' => 'Nytt budsjett', - 'new_bill' => 'Ny rekning', - 'block_account_logout' => 'Du har vorte logga ut. Blokkerte kontoar kan ikkje bruka denne nettstaden. Har du registrert deg med ei gyldig e-postadresse?', - 'flash_success' => 'Suksess!', - 'flash_info' => 'Melding', - 'flash_warning' => 'Advarsel!', - 'flash_error' => 'Feil!', - 'flash_danger' => 'Fare!', - 'flash_info_multiple' => 'Det eksisterar ei melding | Det eksisterar :count meldingar', - 'flash_error_multiple' => 'Det er ein feil | Det er :count feil', - 'net_worth' => 'Formue', - 'help_for_this_page' => 'Hjelp for denne sida', - 'help_for_this_page_body' => 'Du finn meir informasjon om denne sida i dokumentasjonen.', - 'two_factor_welcome' => 'Hallo!', - 'two_factor_enter_code' => 'Ver venleg å skriv inn tofaktorautentiseringskoden for å fortsetja. Appen på telefonen kan generera den for deg.', - 'two_factor_code_here' => 'Skriv koden her', - 'two_factor_title' => 'Tofaktorautentisering', - 'authenticate' => 'Autentisere', - 'two_factor_forgot_title' => 'Mista tofaktorautentisering', - 'two_factor_forgot' => 'Jeg har glemt/mistet min tofaktor-ting.', - 'two_factor_lost_header' => 'Mista tofaktorautentisering?', - 'two_factor_lost_intro' => 'Om du òg har mistet sikkerhetskodane din, har du uflaks. Noko du ikkje kan fiksa frå webgrensesnittet. Du har to val.', - 'two_factor_lost_fix_self' => 'Om du køyrer din eigen instans av Firefly III, les dette innlegget i FAQ for instruksjonar.', - 'two_factor_lost_fix_owner' => 'Ellers sender ein epost til eigaren av nettsida, :site_owner og spør vedkommande om å tilbakestille tofaktorautentiseringa din.', - 'mfa_backup_code' => 'Du har brukt ein sikkerhetskode for å logge inn i Firefly III. Den kan ikkje brukes igjen, så kryss den frå lista din.', - 'pref_two_factor_new_backup_codes' => 'Få nye sikkerhetskoder', - 'pref_two_factor_backup_code_count' => 'Du har :count gyldige backup-koder. You have :count valid backup koder.', - '2fa_i_have_them' => 'Jeg lagra dem!', - 'warning_much_data' => ':days dager med data kan ta litt tid å laste.', - 'registered' => 'Registreringen var vellukka!', - 'Default asset account' => 'Standard aktivakonto', - 'no_budget_pointer' => 'Det ser ikkje ut til at du har budsjett enda. Du bør oppretta nokon på budsjett-sida. Budsjett kan hjelpa deg med å halda oversikt over utgifter.', - 'no_bill_pointer' => 'Det ser ut til at du ikkje har nokon rekningar enda. Du bør oppretta nokon på rekningar-side. Rekningar kan hjelpa deg med å holde oversikt over utgifter.', - 'Savings account' => 'Sparekonto', - 'Credit card' => 'Kredittkort', - 'source_accounts' => 'Kjeldekonto|Kjeldekontoar', - 'destination_accounts' => 'Målkonto|Målkontoar', - 'user_id_is' => 'Din brukar-ID er :user', - 'field_supports_markdown' => 'Dette feltet støttar Markdown.', - 'need_more_help' => 'Om du treng meir hjelp med å bruka Firefly III, ver venleg å opprett ei sak på Github.', - 'reenable_intro_text' => 'Du kan òg reaktivera introduksjonsveiledningen.', - 'intro_boxes_after_refresh' => 'Innføringsboksane vil dukke opp igjen når du laster sida på nytt.', - 'show_all_no_filter' => 'Vis alle transaksjonar uten å gruppere dei etter dato.', - 'expenses_by_category' => 'Utgifter etter kategori', - 'expenses_by_budget' => 'Utgifter etter budsjett', - 'income_by_category' => 'Inntekt etter kategori', - 'expenses_by_asset_account' => 'Utgifter etter aktivakonto', - 'expenses_by_expense_account' => 'Utgifter etter utgiftskonto', - 'cannot_redirect_to_account' => 'Firefly III kan ikkje videresende deg til rett side. Beklager.', - 'sum_of_expenses' => 'Sum av utgifter', - 'sum_of_income' => 'Sum av inntekt', - 'liabilities' => 'Gjeld', - 'spent_in_specific_budget' => 'Brukt i budsjett ":budget"', - 'spent_in_specific_double' => 'Brukt i konto ":account', - 'earned_in_specific_double' => 'Opptjent i konto ":account', - 'source_account' => 'Kjeldekonto', - 'source_account_reconciliation' => 'Du kan ikkje redigera kildekontoen for ein avstemmingstransaksjon.', - 'destination_account' => 'Målkonto', - 'destination_account_reconciliation' => 'Du kan ikkje redigera kildekontoen for ein avstemmingstransaksjon.', - 'sum_of_expenses_in_budget' => 'Brukt totalt i budsjett «:budget»', - 'left_in_budget_limit' => 'Att å bruka i følge budsjett', - 'current_period' => 'Noverande periode', - 'show_the_current_period_and_overview' => 'Vis gjeldande periode og oversikt', - 'pref_languages_locale' => 'For at eit anna språk enn engelsk skal fungera skikkelig, må operativsystemet ditt vera utstyrt med rett lokalinformasjon. Om dette ikkje er på plass, kan valutadata, datoar og beløp verta vist feil.', - 'budget_in_period' => 'Alle transaksjonar for budsjett ":name" mellom :start og :end i :currency', - 'chart_budget_in_period' => 'Diagram for alle transaksjonar for budsjett ":name" mellom :start og :end i :currency', - 'chart_budget_in_period_only_currency' => 'Beløpet du budsjetterte var i :currency, så dette diagrammet vil berre visa transaksjonar i :currency.', - 'chart_account_in_period' => 'Diagram for alle transaksjonar for konto ":name" (:balance) mellom :start og :end', - 'chart_category_in_period' => 'Diagram for alle transaksjonar for kategori ":name" mellom :start og :end', - 'chart_category_all' => 'Graf over alle transaksjonar for kategori ":name"', - 'clone_withdrawal' => 'Klone dette uttaket', - 'clone_deposit' => 'Klone dette innskuddet', - 'clone_transfer' => 'Klone denne overføringen', - 'multi_select_no_selection' => 'Ingen valt', - 'multi_select_select_all' => 'Vel alle', - 'multi_select_n_selected' => 'valt', - 'multi_select_all_selected' => 'Alle valde', - 'multi_select_filter_placeholder' => 'Finn..', - 'intro_next_label' => 'Neste', - 'intro_prev_label' => 'Forrige', - 'intro_skip_label' => 'Hopp over', - 'intro_done_label' => 'Ferdig', - 'between_dates_breadcrumb' => 'Mellom :start og :end', - 'all_journals_without_budget' => 'Alle transaksjonar uten budsjett', - 'journals_without_budget' => 'Transaksjoner uten budsjett', - 'all_journals_without_category' => 'Alle ukategoriserte transaksjonar', - 'journals_without_category' => 'Ukategoriserte transaksjonar', - 'all_journals_for_account' => 'Alle transaksjonar for konto :name', - 'chart_all_journals_for_account' => 'Graf over alle transaksjonar for konto :name', - 'journals_in_period_for_account' => 'Alle transaksjonar for konto :name mellom :start og :end', - 'journals_in_period_for_account_js' => 'Alle transaksjonar for konto {title} mellom {start} og {end}', - 'transferred' => 'Overført', - 'all_withdrawal' => 'Alle utgifter', - 'all_transactions' => 'Alle transaksjonar', - 'title_withdrawal_between' => 'Alle utgifter mellom :start og :end', - 'all_deposit' => 'Alle inntekter', - 'title_deposit_between' => 'Alle inntekter mellom :start og :end', - 'all_transfers' => 'Alle overføringer', - 'title_transfers_between' => 'Alle overføringer mellom :start og :end', - 'all_transfer' => 'Alle overføringer', - 'all_journals_for_tag' => 'Alle transaksjonar for nøkkelordet «:tag»', - 'title_transfer_between' => 'Alle overføringer mellom :start og :end', - 'all_journals_for_category' => 'Alle transaksjonar for kategori :name', - 'all_journals_for_budget' => 'Alle transaksjonar for budsjett :name', - 'chart_all_journals_for_budget' => 'Graf over alle transaksjonar for budsjett :name', - 'journals_in_period_for_category' => 'Alle transaksjonar for kategori :name mellom :start og :end', - 'journals_in_period_for_tag' => 'Alle transaksjonar for nøkkelordet :tag mellom :start og :end', - 'not_available_demo_user' => 'Funksjonen du prøvar å få tilgang til, er ikkje tilgjengeleg for demobrukarar.', - 'exchange_rate_instructions' => 'Aktivakonto "@name" godtar kun transaksjonar i @native_currency. Om du ønskar å bruka @foreign_currency i staden, må du passe på at beløpet i @native_currency òg er satt:', - 'transfer_exchange_rate_instructions' => 'Kjeldekonto "@source_name" godtar kun transaksjonar i @source_currency. Destinasjonskonto "@dest_name" aksepterer berre transaksjonar i @dest_currency. Du må angi overført beløp rett i begge valutaene.', - 'transaction_data' => 'Transaksjonsdata', - 'invalid_server_configuration' => 'Ugyldig serverkonfigurasjon', - 'invalid_locale_settings' => 'Firefly III kan ikkje formatere pengebeløp fordi serveren din manglar dei nødvendige pakkane. Sjå følgande instruksjonar for korleis du set opp dette.', - 'quickswitch' => 'Hurtigbryter', - 'sign_in_to_start' => 'Logg inn for å starte økten', - 'sign_in' => 'Logg inn', - 'register_new_account' => 'Registrer ein ny konto', - 'forgot_my_password' => 'Jeg har glemt passordet mitt', - 'problems_with_input' => 'Det var nokon problemer med utfyllingen din.', - 'reset_password' => 'Tilbakestill passordet ditt', - 'button_reset_password' => 'Tilbakestill passord', - 'reset_button' => 'Tilbakestill', - 'want_to_login' => 'Jeg vil logge inn', - 'login_page_title' => 'Innlogging til Firefly III', - 'register_page_title' => 'Registrer deg på Firefly III', - 'forgot_pw_page_title' => 'Glemt passord for Firefly III', - 'reset_pw_page_title' => 'Nullstill passord for Firefly III', - 'cannot_reset_demo_user' => 'Du kan ikkje nustille passordet til demo brukar.', - 'no_att_demo_user' => 'Demo brukaren kan ikkje laste opp vedlegg.', - 'button_register' => 'Registrer', - 'authorization' => 'Autorisasjon', - 'active_bills_only' => 'kun aktive rekningar', - 'active_bills_only_total' => 'alle aktive rekningar', - 'active_exp_bills_only' => 'kun aktive og forventa rekningar', - 'active_exp_bills_only_total' => 'kun aktive og forventa rekningar', - 'per_period_sum_1D' => 'Forventa daglege kostnadar', - 'per_period_sum_1W' => 'Forventa vekentlege kostnadar', - 'per_period_sum_1M' => 'Forventa månadlege kostnadar', - 'per_period_sum_3M' => 'Forventa kvartalskostnadar', - 'per_period_sum_6M' => 'Forventa halvårlege kostnadar', - 'per_period_sum_1Y' => 'Forventa årlege kostnadar', - 'average_per_bill' => 'gjennomsnitt per rekning', - 'expected_total' => 'forventet totalt', - 'reconciliation_account_name' => ':name avstemming (:currency)', - 'saved' => 'Lagret', - 'advanced_options' => 'Avanserte innstillinger', - 'advanced_options_explain' => 'Nokre sider i Firefly III har avanserte alternativ gøymt bak denne knappen. Denne sida har ikkje noko spesielt her, men sjekk ut dei andre!', - 'here_be_dragons' => 'Her eksisterar drager', + 'close' => 'Lukk', + 'actions' => 'Handlinger', + 'edit' => 'Rediger', + 'delete' => 'Slett', + 'split' => 'Del opp', + 'single_split' => 'Del opp', + 'clone' => 'Klon', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Bekreft handling', + 'last_seven_days' => 'Syv siste dager', + 'last_thirty_days' => 'Tredve siste dager', + 'last_180_days' => 'Siste 180 dager', + 'month_to_date' => 'Måned til dato', + 'year_to_date' => 'År til dato', + 'YTD' => 'Hittil i år', + 'welcome_back' => 'Korleis går det?', + 'everything' => 'Alt', + 'today' => 'i dag', + 'customRange' => 'Egendefinert utval', + 'date_range' => 'Datointervall', + 'apply' => 'Bruk', + 'select_date' => 'Vel dato..', + 'cancel' => 'Avbryt', + 'from' => 'Frå', + 'to' => 'Til', + 'structure' => 'Struktur', + 'help_translating' => 'Denne hjelpeteksten er ikkje tilgjengelig på ditt språk. Vil du hjelpa å oversetta?', + 'showEverything' => 'Vis alt', + 'never' => 'Aldri', + 'no_results_for_empty_search' => 'Søket ditt var tomt, så ingenting vart funnet.', + 'removed_amount' => 'Fjerna :amount', + 'added_amount' => 'La til :amount', + 'asset_account_role_help' => 'Eventuelle ekstra alternativ som følge av ditt val kan settes senere.', + 'Opening balance' => 'Startsaldo', + 'create_new_stuff' => 'Lag nye ting', + 'new_withdrawal' => 'Nytt uttak', + 'create_new_transaction' => 'Opprett ny transaksjon', + 'sidebar_frontpage_create' => 'Opprett', + 'new_transaction' => 'Ny transaksjon', + 'no_rules_for_bill' => 'Denne rekninga har ingen reglar knytt til den.', + 'go_to_asset_accounts' => 'Sjå aktivakontoane dine', + 'go_to_budgets' => 'Gå til budsjetta dine', + 'go_to_withdrawals' => 'Gå til uttaka dine', + 'clones_journal_x' => 'Denne transaksjonen er ein klone av ":description" (#:id)', + 'go_to_categories' => 'Gå til kategoriane dine', + 'go_to_bills' => 'Gå til rekningane dine', + 'go_to_expense_accounts' => 'Sjå utgiftskontoane dine', + 'go_to_revenue_accounts' => 'Sjå inntektskontoane dine', + 'go_to_piggies' => 'Gå til sparegrisane dine', + 'new_deposit' => 'Nytt innskot', + 'new_transfer' => 'Ny overføring', + 'new_transfers' => 'Ny overføring', + 'new_asset_account' => 'Ny aktivakonto', + 'new_expense_account' => 'Ny utgiftskonto', + 'new_revenue_account' => 'Ny inntektskonto', + 'new_liabilities_account' => 'Ny gjeld', + 'new_budget' => 'Nytt budsjett', + 'new_bill' => 'Ny rekning', + 'block_account_logout' => 'Du har vorte logga ut. Blokkerte kontoar kan ikkje bruka denne nettstaden. Har du registrert deg med ei gyldig e-postadresse?', + 'flash_success' => 'Suksess!', + 'flash_info' => 'Melding', + 'flash_warning' => 'Advarsel!', + 'flash_error' => 'Feil!', + 'flash_danger' => 'Fare!', + 'flash_info_multiple' => 'Det eksisterar ei melding | Det eksisterar :count meldingar', + 'flash_error_multiple' => 'Det er ein feil | Det er :count feil', + 'net_worth' => 'Formue', + 'help_for_this_page' => 'Hjelp for denne sida', + 'help_for_this_page_body' => 'Du finn meir informasjon om denne sida i dokumentasjonen.', + 'two_factor_welcome' => 'Hallo!', + 'two_factor_enter_code' => 'Ver venleg å skriv inn tofaktorautentiseringskoden for å fortsetja. Appen på telefonen kan generera den for deg.', + 'two_factor_code_here' => 'Skriv koden her', + 'two_factor_title' => 'Tofaktorautentisering', + 'authenticate' => 'Autentisere', + 'two_factor_forgot_title' => 'Mista tofaktorautentisering', + 'two_factor_forgot' => 'Jeg har glemt/mistet min tofaktor-ting.', + 'two_factor_lost_header' => 'Mista tofaktorautentisering?', + 'two_factor_lost_intro' => 'Om du òg har mistet sikkerhetskodane din, har du uflaks. Noko du ikkje kan fiksa frå webgrensesnittet. Du har to val.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner og spør vedkommande om å tilbakestille tofaktorautentiseringa din.', + 'mfa_backup_code' => 'Du har brukt ein sikkerhetskode for å logge inn i Firefly III. Den kan ikkje brukes igjen, så kryss den frå lista din.', + 'pref_two_factor_new_backup_codes' => 'Få nye sikkerhetskoder', + 'pref_two_factor_backup_code_count' => 'Du har :count gyldige backup-koder. You have :count valid backup koder.', + '2fa_i_have_them' => 'Jeg lagra dem!', + 'warning_much_data' => ':days dager med data kan ta litt tid å laste.', + 'registered' => 'Registreringen var vellukka!', + 'Default asset account' => 'Standard aktivakonto', + 'no_budget_pointer' => 'Det ser ikkje ut til at du har budsjett enda. Du bør oppretta nokon på budsjett-sida. Budsjett kan hjelpa deg med å halda oversikt over utgifter.', + 'no_bill_pointer' => 'Det ser ut til at du ikkje har nokon rekningar enda. Du bør oppretta nokon på rekningar-side. Rekningar kan hjelpa deg med å holde oversikt over utgifter.', + 'Savings account' => 'Sparekonto', + 'Credit card' => 'Kredittkort', + 'source_accounts' => 'Kjeldekonto|Kjeldekontoar', + 'destination_accounts' => 'Målkonto|Målkontoar', + 'user_id_is' => 'Din brukar-ID er :user', + 'field_supports_markdown' => 'Dette feltet støttar Markdown.', + 'need_more_help' => 'Om du treng meir hjelp med å bruka Firefly III, ver venleg å opprett ei sak på Github.', + 'reenable_intro_text' => 'Du kan òg reaktivera introduksjonsveiledningen.', + 'intro_boxes_after_refresh' => 'Innføringsboksane vil dukke opp igjen når du laster sida på nytt.', + 'show_all_no_filter' => 'Vis alle transaksjonar uten å gruppere dei etter dato.', + 'expenses_by_category' => 'Utgifter etter kategori', + 'expenses_by_budget' => 'Utgifter etter budsjett', + 'income_by_category' => 'Inntekt etter kategori', + 'expenses_by_asset_account' => 'Utgifter etter aktivakonto', + 'expenses_by_expense_account' => 'Utgifter etter utgiftskonto', + 'cannot_redirect_to_account' => 'Firefly III kan ikkje videresende deg til rett side. Beklager.', + 'sum_of_expenses' => 'Sum av utgifter', + 'sum_of_income' => 'Sum av inntekt', + 'liabilities' => 'Gjeld', + 'spent_in_specific_budget' => 'Brukt i budsjett ":budget"', + 'spent_in_specific_double' => 'Brukt i konto ":account', + 'earned_in_specific_double' => 'Opptjent i konto ":account', + 'source_account' => 'Kjeldekonto', + 'source_account_reconciliation' => 'Du kan ikkje redigera kildekontoen for ein avstemmingstransaksjon.', + 'destination_account' => 'Målkonto', + 'destination_account_reconciliation' => 'Du kan ikkje redigera kildekontoen for ein avstemmingstransaksjon.', + 'sum_of_expenses_in_budget' => 'Brukt totalt i budsjett «:budget»', + 'left_in_budget_limit' => 'Att å bruka i følge budsjett', + 'current_period' => 'Noverande periode', + 'show_the_current_period_and_overview' => 'Vis gjeldande periode og oversikt', + 'pref_languages_locale' => 'For at eit anna språk enn engelsk skal fungera skikkelig, må operativsystemet ditt vera utstyrt med rett lokalinformasjon. Om dette ikkje er på plass, kan valutadata, datoar og beløp verta vist feil.', + 'budget_in_period' => 'Alle transaksjonar for budsjett ":name" mellom :start og :end i :currency', + 'chart_budget_in_period' => 'Diagram for alle transaksjonar for budsjett ":name" mellom :start og :end i :currency', + 'chart_budget_in_period_only_currency' => 'Beløpet du budsjetterte var i :currency, så dette diagrammet vil berre visa transaksjonar i :currency.', + 'chart_account_in_period' => 'Diagram for alle transaksjonar for konto ":name" (:balance) mellom :start og :end', + 'chart_category_in_period' => 'Diagram for alle transaksjonar for kategori ":name" mellom :start og :end', + 'chart_category_all' => 'Graf over alle transaksjonar for kategori ":name"', + 'clone_withdrawal' => 'Klone dette uttaket', + 'clone_deposit' => 'Klone dette innskuddet', + 'clone_transfer' => 'Klone denne overføringen', + 'multi_select_no_selection' => 'Ingen valt', + 'multi_select_select_all' => 'Vel alle', + 'multi_select_n_selected' => 'valt', + 'multi_select_all_selected' => 'Alle valde', + 'multi_select_filter_placeholder' => 'Finn..', + 'intro_next_label' => 'Neste', + 'intro_prev_label' => 'Forrige', + 'intro_skip_label' => 'Hopp over', + 'intro_done_label' => 'Ferdig', + 'between_dates_breadcrumb' => 'Mellom :start og :end', + 'all_journals_without_budget' => 'Alle transaksjonar uten budsjett', + 'journals_without_budget' => 'Transaksjoner uten budsjett', + 'all_journals_without_category' => 'Alle ukategoriserte transaksjonar', + 'journals_without_category' => 'Ukategoriserte transaksjonar', + 'all_journals_for_account' => 'Alle transaksjonar for konto :name', + 'chart_all_journals_for_account' => 'Graf over alle transaksjonar for konto :name', + 'journals_in_period_for_account' => 'Alle transaksjonar for konto :name mellom :start og :end', + 'journals_in_period_for_account_js' => 'Alle transaksjonar for konto {title} mellom {start} og {end}', + 'transferred' => 'Overført', + 'all_withdrawal' => 'Alle utgifter', + 'all_transactions' => 'Alle transaksjonar', + 'title_withdrawal_between' => 'Alle utgifter mellom :start og :end', + 'all_deposit' => 'Alle inntekter', + 'title_deposit_between' => 'Alle inntekter mellom :start og :end', + 'all_transfers' => 'Alle overføringer', + 'title_transfers_between' => 'Alle overføringer mellom :start og :end', + 'all_transfer' => 'Alle overføringer', + 'all_journals_for_tag' => 'Alle transaksjonar for nøkkelordet «:tag»', + 'title_transfer_between' => 'Alle overføringer mellom :start og :end', + 'all_journals_for_category' => 'Alle transaksjonar for kategori :name', + 'all_journals_for_budget' => 'Alle transaksjonar for budsjett :name', + 'chart_all_journals_for_budget' => 'Graf over alle transaksjonar for budsjett :name', + 'journals_in_period_for_category' => 'Alle transaksjonar for kategori :name mellom :start og :end', + 'journals_in_period_for_tag' => 'Alle transaksjonar for nøkkelordet :tag mellom :start og :end', + 'not_available_demo_user' => 'Funksjonen du prøvar å få tilgang til, er ikkje tilgjengeleg for demobrukarar.', + 'exchange_rate_instructions' => 'Aktivakonto "@name" godtar kun transaksjonar i @native_currency. Om du ønskar å bruka @foreign_currency i staden, må du passe på at beløpet i @native_currency òg er satt:', + 'transfer_exchange_rate_instructions' => 'Kjeldekonto "@source_name" godtar kun transaksjonar i @source_currency. Destinasjonskonto "@dest_name" aksepterer berre transaksjonar i @dest_currency. Du må angi overført beløp rett i begge valutaene.', + 'transaction_data' => 'Transaksjonsdata', + 'invalid_server_configuration' => 'Ugyldig serverkonfigurasjon', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Hurtigbryter', + 'sign_in_to_start' => 'Logg inn for å starte økten', + 'sign_in' => 'Logg inn', + 'register_new_account' => 'Registrer ein ny konto', + 'forgot_my_password' => 'Jeg har glemt passordet mitt', + 'problems_with_input' => 'Det var nokon problemer med utfyllingen din.', + 'reset_password' => 'Tilbakestill passordet ditt', + 'button_reset_password' => 'Tilbakestill passord', + 'reset_button' => 'Tilbakestill', + 'want_to_login' => 'Jeg vil logge inn', + 'login_page_title' => 'Innlogging til Firefly III', + 'register_page_title' => 'Registrer deg på Firefly III', + 'forgot_pw_page_title' => 'Glemt passord for Firefly III', + 'reset_pw_page_title' => 'Nullstill passord for Firefly III', + 'cannot_reset_demo_user' => 'Du kan ikkje nustille passordet til demo brukar.', + 'no_att_demo_user' => 'Demo brukaren kan ikkje laste opp vedlegg.', + 'button_register' => 'Registrer', + 'authorization' => 'Autorisasjon', + 'active_bills_only' => 'kun aktive rekningar', + 'active_bills_only_total' => 'alle aktive rekningar', + 'active_exp_bills_only' => 'kun aktive og forventa rekningar', + 'active_exp_bills_only_total' => 'kun aktive og forventa rekningar', + 'per_period_sum_1D' => 'Forventa daglege kostnadar', + 'per_period_sum_1W' => 'Forventa vekentlege kostnadar', + 'per_period_sum_1M' => 'Forventa månadlege kostnadar', + 'per_period_sum_3M' => 'Forventa kvartalskostnadar', + 'per_period_sum_6M' => 'Forventa halvårlege kostnadar', + 'per_period_sum_1Y' => 'Forventa årlege kostnadar', + 'average_per_bill' => 'gjennomsnitt per rekning', + 'expected_total' => 'forventet totalt', + 'reconciliation_account_name' => ':name avstemming (:currency)', + 'saved' => 'Lagret', + 'advanced_options' => 'Avanserte innstillinger', + 'advanced_options_explain' => 'Nokre sider i Firefly III har avanserte alternativ gøymt bak denne knappen. Denne sida har ikkje noko spesielt her, men sjekk ut dei andre!', + 'here_be_dragons' => 'Her eksisterar drager', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'Ingen Webhook meldingar', - 'webhook_trigger_STORE_TRANSACTION' => 'Etter transaksjons opprettelse', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Etter transaksjons oppdatering', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Etter transaksjons sletting', - 'webhook_response_TRANSACTIONS' => 'Transaksjonsdetaljer', - 'webhook_response_ACCOUNTS' => 'Kontodetaljer', - 'webhook_response_none_NONE' => 'Ingen detaljer', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspiser', - 'create_new_webhook' => 'Opprett ny Webhook', - 'webhooks_create_breadcrumb' => 'Opprett ny Webhook', - 'webhook_trigger_form_help' => 'Kva for ei hending skal Webhook utløysa', - 'webhook_response_form_help' => 'Kva skal Webhook må senda til URL.', - 'webhook_delivery_form_help' => 'Kva format skal Webhook sende data i.', - 'webhook_active_form_help' => 'Webhook må aktiverast for å fungera.', - 'stored_new_webhook' => 'Lagret ny webhook ":title"', - 'delete_webhook' => 'Slett Webhook', - 'deleted_webhook' => 'Sletta Webhook ":title"', - 'edit_webhook' => 'Rediger Webhook ":title"', - 'updated_webhook' => 'Oppdatert Webhook ":title"', - 'edit_webhook_js' => 'Rediger Webhook "{title}"', - 'show_webhook' => 'Webhook «:title»', - 'webhook_was_triggered' => 'Webhook vart trigget på den angitte transaksjonen. Ver venleg å vent på resultatet.', - 'webhook_messages' => 'Webhook melding', - 'view_message' => 'Vis melding', - 'view_attempts' => 'Vis mislykkede forsøk', - 'message_content_title' => 'Webhook meldingsinnhold', - 'message_content_help' => 'Dette er innhaldet av meldinga som vart sendt (eller forsøkt sendt) med denne Webhook.', - 'attempt_content_title' => 'Webhook forsøk', - 'attempt_content_help' => 'Dette er alle mislykkede forsøk på denne webhook-meldinga som vert sendt til den konfigurerte URL-en. Etter ein tid vil Firefly III slutta å prøve.', - 'no_attempts' => 'Det er ingen mislykkede forsøk. Det er god ting!', - 'webhook_attempt_at' => 'Forsøk på {moment}', - 'logs' => 'Logger', - 'response' => 'Respons', - 'visit_webhook_url' => 'Besøk URL til webhook', - 'reset_webhook_secret' => 'Tilbakestill Webhook hemmelegheit', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") er lagra.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") er oppdatert.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'deaktivert', + 'no_webhook_messages' => 'Ingen Webhook meldingar', + 'webhook_trigger_STORE_TRANSACTION' => 'Etter transaksjons opprettelse', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Etter transaksjons oppdatering', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Etter transaksjons sletting', + 'webhook_response_TRANSACTIONS' => 'Transaksjonsdetaljer', + 'webhook_response_ACCOUNTS' => 'Kontodetaljer', + 'webhook_response_none_NONE' => 'Ingen detaljer', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspiser', + 'create_new_webhook' => 'Opprett ny Webhook', + 'webhooks_create_breadcrumb' => 'Opprett ny Webhook', + 'webhook_trigger_form_help' => 'Kva for ei hending skal Webhook utløysa', + 'webhook_response_form_help' => 'Kva skal Webhook må senda til URL.', + 'webhook_delivery_form_help' => 'Kva format skal Webhook sende data i.', + 'webhook_active_form_help' => 'Webhook må aktiverast for å fungera.', + 'stored_new_webhook' => 'Lagret ny webhook ":title"', + 'delete_webhook' => 'Slett Webhook', + 'deleted_webhook' => 'Sletta Webhook ":title"', + 'edit_webhook' => 'Rediger Webhook ":title"', + 'updated_webhook' => 'Oppdatert Webhook ":title"', + 'edit_webhook_js' => 'Rediger Webhook "{title}"', + 'show_webhook' => 'Webhook «:title»', + 'webhook_was_triggered' => 'Webhook vart trigget på den angitte transaksjonen. Ver venleg å vent på resultatet.', + 'webhook_messages' => 'Webhook melding', + 'view_message' => 'Vis melding', + 'view_attempts' => 'Vis mislykkede forsøk', + 'message_content_title' => 'Webhook meldingsinnhold', + 'message_content_help' => 'Dette er innhaldet av meldinga som vart sendt (eller forsøkt sendt) med denne Webhook.', + 'attempt_content_title' => 'Webhook forsøk', + 'attempt_content_help' => 'Dette er alle mislykkede forsøk på denne webhook-meldinga som vert sendt til den konfigurerte URL-en. Etter ein tid vil Firefly III slutta å prøve.', + 'no_attempts' => 'Det er ingen mislykkede forsøk. Det er god ting!', + 'webhook_attempt_at' => 'Forsøk på {moment}', + 'logs' => 'Logger', + 'response' => 'Respons', + 'visit_webhook_url' => 'Besøk URL til webhook', + 'reset_webhook_secret' => 'Tilbakestill Webhook hemmelegheit', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") er lagra.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") er oppdatert.', // API access - 'authorization_request' => 'Firefly III v:version autorisasjonsspørsmål', - 'authorization_request_intro' => 'Applikasjonen ":client" spør om tilgang til din finansielle administrasjon. Vil du tillata :client slik at han får tilgang til dine data?', - 'authorization_request_site' => 'Du vil verta omdirigert til :url som vil gje tilgang til dine Firefly III data.', - 'authorization_request_invalid' => 'Dette tilgangsspørsmålet er ugyldig. Ver venleg å ikkje følg denne koplinga igjen.', - 'scopes_will_be_able' => 'Denne applikasjonen vil kunne:', - 'button_authorize' => 'Autoriser', - 'none_in_select_list' => '(ingen)', - 'no_piggy_bank' => '(ingen sparegriser)', - 'name_in_currency' => ':name i :currency', - 'paid_in_currency' => 'Betalt i :currency', - 'unpaid_in_currency' => 'Ubetalt i :currency', - 'is_alpha_warning' => 'Du køyrer ein ALPHA-versjon. Vær varsom for feil og problemer.', - 'is_beta_warning' => 'Du køyrer ein BETA-versjon. Vær varsom for bugs og problemer.', - 'all_destination_accounts' => 'Målkonto', - 'all_source_accounts' => 'Kjeldekontoar', - 'back_to_index' => 'Tilbake til index', - 'cant_logout_guard' => 'Firefly III kan ikkje logge deg ut.', - 'internal_reference' => 'Intern referanse', + 'authorization_request' => 'Firefly III v:version autorisasjonsspørsmål', + 'authorization_request_intro' => 'Applikasjonen ":client" spør om tilgang til din finansielle administrasjon. Vil du tillata :client slik at han får tilgang til dine data?', + 'authorization_request_site' => 'Du vil verta omdirigert til :url som vil gje tilgang til dine Firefly III data.', + 'authorization_request_invalid' => 'Dette tilgangsspørsmålet er ugyldig. Ver venleg å ikkje følg denne koplinga igjen.', + 'scopes_will_be_able' => 'Denne applikasjonen vil kunne:', + 'button_authorize' => 'Autoriser', + 'none_in_select_list' => '(ingen)', + 'no_piggy_bank' => '(ingen sparegriser)', + 'name_in_currency' => ':name i :currency', + 'paid_in_currency' => 'Betalt i :currency', + 'unpaid_in_currency' => 'Ubetalt i :currency', + 'is_alpha_warning' => 'Du køyrer ein ALPHA-versjon. Vær varsom for feil og problemer.', + 'is_beta_warning' => 'Du køyrer ein BETA-versjon. Vær varsom for bugs og problemer.', + 'all_destination_accounts' => 'Målkonto', + 'all_source_accounts' => 'Kjeldekontoar', + 'back_to_index' => 'Tilbake til index', + 'cant_logout_guard' => 'Firefly III kan ikkje logge deg ut.', + 'internal_reference' => 'Intern referanse', // check for updates: - 'update_check_title' => 'Sjå etter oppdateringar', - 'admin_update_check_title' => 'Sjå etter oppdateringar automatisk', - 'admin_update_check_explain' => 'Firefly III kan sjekka etter oppdateringar automatisk. Når du aktiverar denne innstillinga, vil systemet kontakta Github for å sjå om ein ny versjon av Firefly III er tilgjengeleg. Når det er kjem ei ny oppdatering, vil du få beskjed. Du kan testa denne beskjeden ved å bruka knappen til høgre. Ver venleg å marker nedanfor om du vil at Firefly III skal sjå etter oppdateringar.', - 'check_for_updates_permission' => 'Firefly III kan sjå etter oppdateringar, men det krev løyvet ditt først. Gå til -administrasjonen for å velga om denne funksjonen skal aktiverast.', - 'updates_ask_me_later' => 'Spør meg senere', - 'updates_do_not_check' => 'Ikke sjå etter oppdateringar', - 'updates_enable_check' => 'Aktiver oppdateringssjekk', - 'admin_update_check_now_title' => 'Sjå etter oppdateringar no', - 'admin_update_check_now_explain' => 'Om du trykker på knappen, vil Firefly III sjå om din noverande versjon er den nyaste.', - 'check_for_updates_button' => 'Sjekk no!', - 'update_new_version_alert' => 'Ein ny versjon av Firefly III er tilgjengeleg. Du køyrer :your_version, den nyaste versjonen er :new_version som vart utgitt den :date.', - 'update_version_beta' => 'Dette er ein BETA versjon, du kan oppleve problemer.', - 'update_version_alpha' => 'Dette er ein ALPHA versjon, du kan oppleve problemer.', - 'update_current_version_alert' => 'Du køyrer :version, som er den nyaste tilgjengelege utgjevinga.', - 'update_newer_version_alert' => 'Du køyrer :your_version, som er nyare enn den nyaste versjonen, :new_version.', - 'update_check_error' => 'Det oppstod ein feil under søk etter oppdatering: :error', - 'unknown_error' => 'Ukjent feil. Beklager det.', - 'just_new_release' => 'Ein ny versjon er tilgjengeleg! Versjon :version vart tilgjengeleg :date. Denne utgjevinga er heilt ny. Vent gjerne nokre dagar for å sikra at den nye utgåva er stabil.', - 'disabled_but_check' => 'Du har deaktivert oppdateringssjekk. Ikke gløym å oppdatera sjølv av og til. Tusen takk!', - 'admin_update_channel_title' => 'Oppdater kanal', - 'admin_update_channel_explain' => 'Firefly III har tre oppdaterings "kanaler" som bestemmer kor mykje du ønskar å ligga foran med tanke på funksjoner, forbetringar og feil. Bruk beta-kanalen dersom du er eventyrlysten og "alfa" når du likar å leva farleg.', - 'update_channel_stable' => 'Stable. Alt skal fungera som forventet.', - 'update_channel_beta' => 'Beta. Nye funksjoner, men kan ha enkelte programfeil.', - 'update_channel_alpha' => 'Alfa. Me sleng nye ting inn, og brukar det som fell av.', + 'update_check_title' => 'Sjå etter oppdateringar', + 'admin_update_check_title' => 'Sjå etter oppdateringar automatisk', + 'admin_update_check_explain' => 'Firefly III kan sjekka etter oppdateringar automatisk. Når du aktiverar denne innstillinga, vil systemet kontakta Github for å sjå om ein ny versjon av Firefly III er tilgjengeleg. Når det er kjem ei ny oppdatering, vil du få beskjed. Du kan testa denne beskjeden ved å bruka knappen til høgre. Ver venleg å marker nedanfor om du vil at Firefly III skal sjå etter oppdateringar.', + 'check_for_updates_permission' => 'Firefly III kan sjå etter oppdateringar, men det krev løyvet ditt først. Gå til -administrasjonen for å velga om denne funksjonen skal aktiverast.', + 'updates_ask_me_later' => 'Spør meg senere', + 'updates_do_not_check' => 'Ikke sjå etter oppdateringar', + 'updates_enable_check' => 'Aktiver oppdateringssjekk', + 'admin_update_check_now_title' => 'Sjå etter oppdateringar no', + 'admin_update_check_now_explain' => 'Om du trykker på knappen, vil Firefly III sjå om din noverande versjon er den nyaste.', + 'check_for_updates_button' => 'Sjekk no!', + 'update_new_version_alert' => 'Ein ny versjon av Firefly III er tilgjengeleg. Du køyrer :your_version, den nyaste versjonen er :new_version som vart utgitt den :date.', + 'update_version_beta' => 'Dette er ein BETA versjon, du kan oppleve problemer.', + 'update_version_alpha' => 'Dette er ein ALPHA versjon, du kan oppleve problemer.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Du køyrer :version, som er den nyaste tilgjengelege utgjevinga.', + 'update_newer_version_alert' => 'Du køyrer :your_version, som er nyare enn den nyaste versjonen, :new_version.', + 'update_check_error' => 'Det oppstod ein feil under søk etter oppdatering: :error', + 'unknown_error' => 'Ukjent feil. Beklager det.', + 'disabled_but_check' => 'Du har deaktivert oppdateringssjekk. Ikke gløym å oppdatera sjølv av og til. Tusen takk!', + 'admin_update_channel_title' => 'Oppdater kanal', + 'admin_update_channel_explain' => 'Firefly III har tre oppdaterings "kanaler" som bestemmer kor mykje du ønskar å ligga foran med tanke på funksjoner, forbetringar og feil. Bruk beta-kanalen dersom du er eventyrlysten og "alfa" når du likar å leva farleg.', + 'update_channel_stable' => 'Stable. Alt skal fungera som forventet.', + 'update_channel_beta' => 'Beta. Nye funksjoner, men kan ha enkelte programfeil.', + 'update_channel_alpha' => 'Alfa. Me sleng nye ting inn, og brukar det som fell av.', // search - 'search' => 'Søk', - 'search_query' => 'Spørring', - 'search_found_transactions' => 'Firefly III fant :count transaksjon på :time sekunder|Firefly III fant :count transaksjonar på :time sekunder.', - 'search_found_more_transactions' => 'Firefly III fant meir enn :count transaksjonar på :time sekunder.', - 'search_for_query' => 'Firefly III leter etter transaksjonar med desse ordene: :query', - 'invalid_operators_list' => 'Desse søkeparametrane er ikkje gyldige og vart ignorert.', + 'search' => 'Søk', + 'search_query' => 'Spørring', + 'search_found_transactions' => 'Firefly III fant :count transaksjon på :time sekunder|Firefly III fant :count transaksjonar på :time sekunder.', + 'search_found_more_transactions' => 'Firefly III fant meir enn :count transaksjonar på :time sekunder.', + 'search_for_query' => 'Firefly III leter etter transaksjonar med desse ordene: :query', + 'invalid_operators_list' => 'Desse søkeparametrane er ikkje gyldige og vart ignorert.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaksjons dato er ":value"', 'search_modifier_not_date_on' => 'Transaksjonsdato er ikkje ":value"', 'search_modifier_reconciled' => 'Transaksjonen er avstemt', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Transaksjonstype er ":value"', 'search_modifier_not_transaction_type' => 'Transaksjonstype er ikkje ":value"', 'search_modifier_tag_is' => 'Nøkkelordet er «:value»', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'Ingen nøkkelord er «:value»', 'search_modifier_date_on_year' => 'Transaksjonen er i år ":value"', 'search_modifier_not_date_on_year' => 'Transaksjonen er ikkje i året ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Transaksjonen er i eller etter månaden ":value"', 'search_modifier_date_after_day' => 'Transaksjonen er etter eller på dagen i månaden ":value"', - // new 'search_modifier_tag_is_not' => 'Ingen nøkkelord er «:value»', 'search_modifier_not_tag_is_not' => 'Nøkkelordet er «:value»', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => 'Lag ny regel frå søk', 'rule_from_search_words' => 'Regelverksmotoren har problemer med søkeparameteren ":string". Den foreslåtte regelen som passar til ditt søk kan gje eit anna resultat. Ver venleg å kontroller reglane nøye.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Dei følgende modifikatorer er lagt til søket i tillegg:', 'general_search_error' => 'Det oppstod ein feil under søking. Ver venleg å sjekk loggfilene for meir informasjon.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Ikke', 'cannot_fire_inactive_rules' => 'Du kan ikkje køyra inaktive reglar.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Regler', 'rule_name' => 'Namn på regel', 'rule_triggers' => 'Regel utløses når', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Når ein transaksjon er oppdatert', 'rule_trigger_user_action' => 'Brukarhandling er ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Kjeldekonto namn byrjar med..', 'rule_trigger_source_account_starts' => 'Kjeldenamnet byrjar med ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Budsjett er ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Eit vilkårleg nøkkelord er..', 'rule_trigger_tag_is' => 'Eit vilkårleg nøkkelord er «:trigger_value»', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Transaksjonsvaluta er..', 'rule_trigger_currency_is' => 'Transaksjonsvaluta er ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Transaksjonens fremmed valuta er..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaksjonen eksisterer ikkje', 'rule_trigger_not_has_attachments' => 'Transaksjonen har ingen vedlegg', 'rule_trigger_not_has_any_category' => 'Transaksjonen har ingen kategori', - 'rule_trigger_not_has_any_budget' => 'Transaksjonen har ingen kategori', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaksjonen har ingen rekningar', 'rule_trigger_not_has_any_tag' => 'Transaksjonen har ingen nøkkelord', 'rule_trigger_not_any_notes' => 'Transaksjonen har ingen notat', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Målkonto er ikkje ein kontantkonto', 'rule_trigger_not_account_is_cash' => 'Ingen konto er ein kontantkonto', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'SLETT transaksjon(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Legg notat til beskrivinga', 'rule_action_move_descr_to_notes' => 'Erstatt notat med beskriving', 'rule_action_move_notes_to_descr' => 'Erstatt beskriving med notat', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Regelgruppe for rekningar', 'rulegroup_for_bills_description' => 'Ein spesiell regelgruppe for alle reglane som involverer rekningar.', 'rule_for_bill_title' => 'Automatisk generert regel for rekning ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Regel for rekning ":name"', 'new_rule_for_bill_description' => 'Denne regelen markerer transaksjonar for rekning ":name".', - 'new_rule_for_journal_title' => 'Regel basert på transaksjon ":description"', - 'new_rule_for_journal_description' => 'Denne regelen er basert på transaksjon ":description. Den vil passa transaksjonar som er like.', + 'new_rule_for_journal_title' => 'Regel basert på transaksjon ":description"', + 'new_rule_for_journal_description' => 'Denne regelen er basert på transaksjon ":description. Den vil passa transaksjonar som er like.', // tags - 'store_new_tag' => 'Lagra nytt nøkkelord', - 'update_tag' => 'Oppdater nøkkelord', - 'no_location_set' => 'Ingen plassering spesifisert.', - 'meta_data' => 'Metadata', - 'location' => 'Sted', - 'without_date' => 'Uten dato', - 'result' => 'Resultat', - 'sums_apply_to_range' => 'Alle beløp gjelder for det valde området', - 'mapbox_api_key' => 'For å bruka kart, få ein API-nøkkel frå Mapbox. Åpne .env filen og angi denne koden etter MAPBOX_API_KEY =.', - 'press_object_location' => 'Høyreklikk eller trykk lenge for å angi objektets plassering.', - 'clear_location' => 'Tøm lokasjon', - 'delete_all_selected_tags' => 'Slett alle valde nøkkelord', - 'select_tags_to_delete' => 'Ikke gløym å velja nokre nøkkelord.', - 'deleted_x_tags' => 'Sletta :count nøkkelord.|Sletta :count nøkkelord.', - 'create_rule_from_transaction' => 'Opprett regel basert på transaksjon', - 'create_recurring_from_transaction' => 'Opprett gjentakande transaksjon basert på transaksjon', - + 'store_new_tag' => 'Lagra nytt nøkkelord', + 'update_tag' => 'Oppdater nøkkelord', + 'no_location_set' => 'Ingen plassering spesifisert.', + 'meta_data' => 'Metadata', + 'location' => 'Sted', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Uten dato', + 'result' => 'Resultat', + 'sums_apply_to_range' => 'Alle beløp gjelder for det valde området', + 'mapbox_api_key' => 'For å bruka kart, få ein API-nøkkel frå Mapbox. Åpne .env filen og angi denne koden etter MAPBOX_API_KEY =.', + 'press_object_location' => 'Høyreklikk eller trykk lenge for å angi objektets plassering.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Tøm lokasjon', + 'delete_all_selected_tags' => 'Slett alle valde nøkkelord', + 'select_tags_to_delete' => 'Ikke gløym å velja nokre nøkkelord.', + 'deleted_x_tags' => 'Sletta :count nøkkelord.|Sletta :count nøkkelord.', + 'create_rule_from_transaction' => 'Opprett regel basert på transaksjon', + 'create_recurring_from_transaction' => 'Opprett gjentakande transaksjon basert på transaksjon', // preferences - 'dark_mode_option_browser' => 'La nettleseren din avgjera', - 'dark_mode_option_light' => 'Alltid lys', - 'dark_mode_option_dark' => 'Alltid mørk', - 'equal_to_language' => '(likt språk)', - 'dark_mode_preference' => 'Mørk modus', - 'dark_mode_preference_help' => 'Fortell Firefly III når den skal bruka mørk modus.', - 'pref_home_screen_accounts' => 'Startskjermkontoar', - 'pref_home_screen_accounts_help' => 'Kva kontoar skal visast på startsida?', - 'pref_view_range' => 'Visningsgrense', - 'pref_view_range_help' => 'Nokre diagram er automatisk gruppert i periodar. Budsjetta grupperast òg i periodar. Kva for ein periode føretrekk du?', - 'pref_1D' => 'Én dag', - 'pref_1W' => 'Én veke', - 'pref_1M' => 'Ein månad', - 'pref_3M' => 'Tre måneder (kvartal)', - 'pref_6M' => 'Seks måneder', - 'pref_1Y' => 'Ett år', - 'pref_last365' => 'I fjor', - 'pref_last90' => 'Siste 90 dager', - 'pref_last30' => 'Siste 30 dagene', - 'pref_last7' => 'Siste 7 dager', - 'pref_YTD' => 'År til dato', - 'pref_QTD' => 'Kvartal til dato', - 'pref_MTD' => 'Måned til dato', - 'pref_languages' => 'Språk', - 'pref_locale' => 'Instillinger for språk', - 'pref_languages_help' => 'Firefly III støttar fleire språk. Kva føretrekk du?', - 'pref_locale_help' => 'Firefly III lar deg velga andre lokale innstillinger, som korleis valutaer, tal og datoar er formatert. Oppføringar i denne lista vert kanskje ikkje støtta av systemet ditt. Firefly III har ikkje rett dato innstillinger for alle steder; kontakt meg gjerne for forbetringar.', - 'pref_locale_no_demo' => 'Denne funksjonen vil ikkje fungera for demo-brukar.', - 'pref_custom_fiscal_year' => 'Innstillinger for rekneskapsår', - 'pref_custom_fiscal_year_label' => 'Aktivert', - 'pref_custom_fiscal_year_help' => 'I land som brukar eit anna rekneskapsår enn 1. januar til 31. desember, kan du slå på dette og angi start- og sluttdager for rekneskapsåret', - 'pref_fiscal_year_start_label' => 'Rekneskapsårets startdato', - 'pref_two_factor_auth' => '2-trinnsverifisering', - 'pref_two_factor_auth_help' => 'Når du aktiverar 2-trinnsverifisering (òg kjent som tofaktorautentisering), legg du til eit ekstra sikkerhetslag på kontoen din. Du loggar deg på med noko du veit (passordet ditt) og noko du har (ein bekreftelseskode). Bekreftelseskodar vert laga av eit program på telefonen, for eksempel Authy eller Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Skru på 2-trinnsverifisering', - 'pref_two_factor_auth_disabled' => '2-trinnsverifisering er fjerna og deaktivert', - 'pref_two_factor_auth_remove_it' => 'Ikke gløym å fjerna kontoen frå autentiseringsappen din!', - 'pref_two_factor_auth_code' => 'Bekreftelseskode', - 'pref_two_factor_auth_code_help' => 'Skann QR-koden med eit program på telefonen, for eksempel Authy eller Google Authenticator, og skriv inn den genererte koden.', - 'pref_two_factor_auth_reset_code' => 'Tilbakestill verifiseringskoden', - 'pref_two_factor_auth_disable_2fa' => 'Deaktiver 2FA', - '2fa_use_secret_instead' => 'Om du ikkje kan skanne QR- koden, bruk gjerne hemmelegheita i staden: :secret.', - '2fa_backup_codes' => 'Lagra desse sikkerhetskodane for å få tilgang i tilfelle du mister enheten.', - '2fa_already_enabled' => '2-trinns verifisering er allereie aktivert.', - 'wrong_mfa_code' => 'Denne MFA-koden er ikkje gyldig.', - 'pref_save_settings' => 'Lagra innstillinger', - 'saved_preferences' => 'Innstillinger lagra!', - 'preferences_general' => 'Generelt', - 'preferences_frontpage' => 'Startskjermen', - 'preferences_security' => 'Sikkerhet', - 'preferences_layout' => 'Oppsett', - 'preferences_notifications' => 'Varsler', - 'pref_home_show_deposits' => 'Vis innskot på startskjermen', - 'pref_home_show_deposits_info' => 'Startskjermen visar allereie kostnadskontoane dine. Skal den òg vise inntektskontoane dine?', - 'pref_home_do_show_deposits' => 'Ja, vis dem', - 'successful_count' => 'korav :count var vellukka', - 'list_page_size_title' => 'Sidestørrelse', - 'list_page_size_help' => 'Ei liste over ting (kontoar, transaksjonar osv.). Visar maksimalt dette antal element på kvar side.', - 'list_page_size_label' => 'Sidestørrelse', - 'between_dates' => '(:start og :end)', - 'pref_optional_fields_transaction' => 'Valgfrie felt for transaksjonar', - 'pref_optional_fields_transaction_help' => 'Som standard er ikkje alle felt aktivert når du oppretter ein ny transaksjon (for å unngå forvirring). Nedanfor kan du aktivera desse felta om du trur dei kan vera nyttige for deg. Selvfølgelig vil eit felt som er deaktivert, men allereie fylt inn, vera synlig, uavhengig av innstillinga.', - 'optional_tj_date_fields' => 'Datofelter', - 'optional_tj_other_fields' => 'Andre felt', - 'optional_tj_attachment_fields' => 'Vedleggsfelter', - 'pref_optional_tj_interest_date' => 'Rentedato', - 'pref_optional_tj_book_date' => 'Bokføringsdato', - 'pref_optional_tj_process_date' => 'Prosesseringsdato', - 'pref_optional_tj_due_date' => 'Forfallsdato', - 'pref_optional_tj_payment_date' => 'Betalingsdato', - 'pref_optional_tj_invoice_date' => 'Fakturadato', - 'pref_optional_tj_internal_reference' => 'Intern referanse', - 'pref_optional_tj_notes' => 'Notat', - 'pref_optional_tj_attachments' => 'Vedlegg', - 'pref_optional_tj_external_url' => 'Ekstern URL', - 'pref_optional_tj_location' => 'Sted', - 'pref_optional_tj_links' => 'Transaksjonskoplingar', - 'optional_field_meta_dates' => 'Datoer', - 'optional_field_meta_business' => 'Bedrift', - 'optional_field_attachments' => 'Vedlegg', - 'optional_field_meta_data' => 'Valgfri metadata', - 'external_url' => 'Ekstern URL', - 'pref_notification_bill_reminder' => 'Påminnelse om forfallende rekningar', - 'pref_notification_new_access_token' => 'Varsle når eit nytt API tilgangstoken er opprettet', - 'pref_notification_transaction_creation' => 'Varsle når ein transaksjon opprettes automatisk', - 'pref_notification_user_login' => 'Varsle når du loggar inn frå eit ny plass', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Varslinger', - 'pref_notifications_help' => 'Angi om dette er varsler du ønskar å få. Nokre meldingar kan inneholda sensitiv økonomisk informasjon.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'Om du vil at Firefly III skal varsle deg ved hjelp av Slack, skriv inn webhook-URLen her. Ellers la feltet stå tomt. Dersom du er ein administrator må du òg definera denne URL-adressa i administrasjonen.', - 'slack_url_label' => 'Slack «incoming webhook» URL', + 'dark_mode_option_browser' => 'La nettleseren din avgjera', + 'dark_mode_option_light' => 'Alltid lys', + 'dark_mode_option_dark' => 'Alltid mørk', + 'equal_to_language' => '(likt språk)', + 'dark_mode_preference' => 'Mørk modus', + 'dark_mode_preference_help' => 'Fortell Firefly III når den skal bruka mørk modus.', + 'pref_home_screen_accounts' => 'Startskjermkontoar', + 'pref_home_screen_accounts_help' => 'Kva kontoar skal visast på startsida?', + 'pref_view_range' => 'Visningsgrense', + 'pref_view_range_help' => 'Nokre diagram er automatisk gruppert i periodar. Budsjetta grupperast òg i periodar. Kva for ein periode føretrekk du?', + 'pref_1D' => 'Én dag', + 'pref_1W' => 'Én veke', + 'pref_1M' => 'Ein månad', + 'pref_3M' => 'Tre måneder (kvartal)', + 'pref_6M' => 'Seks måneder', + 'pref_1Y' => 'Ett år', + 'pref_last365' => 'I fjor', + 'pref_last90' => 'Siste 90 dager', + 'pref_last30' => 'Siste 30 dagene', + 'pref_last7' => 'Siste 7 dager', + 'pref_YTD' => 'År til dato', + 'pref_QTD' => 'Kvartal til dato', + 'pref_MTD' => 'Måned til dato', + 'pref_languages' => 'Språk', + 'pref_locale' => 'Instillinger for språk', + 'pref_languages_help' => 'Firefly III støttar fleire språk. Kva føretrekk du?', + 'pref_locale_help' => 'Firefly III lar deg velga andre lokale innstillinger, som korleis valutaer, tal og datoar er formatert. Oppføringar i denne lista vert kanskje ikkje støtta av systemet ditt. Firefly III har ikkje rett dato innstillinger for alle steder; kontakt meg gjerne for forbetringar.', + 'pref_locale_no_demo' => 'Denne funksjonen vil ikkje fungera for demo-brukar.', + 'pref_custom_fiscal_year' => 'Innstillinger for rekneskapsår', + 'pref_custom_fiscal_year_label' => 'Aktivert', + 'pref_custom_fiscal_year_help' => 'I land som brukar eit anna rekneskapsår enn 1. januar til 31. desember, kan du slå på dette og angi start- og sluttdager for rekneskapsåret', + 'pref_fiscal_year_start_label' => 'Rekneskapsårets startdato', + 'pref_two_factor_auth' => '2-trinnsverifisering', + 'pref_two_factor_auth_help' => 'Når du aktiverar 2-trinnsverifisering (òg kjent som tofaktorautentisering), legg du til eit ekstra sikkerhetslag på kontoen din. Du loggar deg på med noko du veit (passordet ditt) og noko du har (ein bekreftelseskode). Bekreftelseskodar vert laga av eit program på telefonen, for eksempel Authy eller Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Skru på 2-trinnsverifisering', + 'pref_two_factor_auth_disabled' => '2-trinnsverifisering er fjerna og deaktivert', + 'pref_two_factor_auth_remove_it' => 'Ikke gløym å fjerna kontoen frå autentiseringsappen din!', + 'pref_two_factor_auth_code' => 'Bekreftelseskode', + 'pref_two_factor_auth_code_help' => 'Skann QR-koden med eit program på telefonen, for eksempel Authy eller Google Authenticator, og skriv inn den genererte koden.', + 'pref_two_factor_auth_reset_code' => 'Tilbakestill verifiseringskoden', + 'pref_two_factor_auth_disable_2fa' => 'Deaktiver 2FA', + '2fa_use_secret_instead' => 'Om du ikkje kan skanne QR- koden, bruk gjerne hemmelegheita i staden: :secret.', + '2fa_backup_codes' => 'Lagra desse sikkerhetskodane for å få tilgang i tilfelle du mister enheten.', + '2fa_already_enabled' => '2-trinns verifisering er allereie aktivert.', + 'wrong_mfa_code' => 'Denne MFA-koden er ikkje gyldig.', + 'pref_save_settings' => 'Lagra innstillinger', + 'saved_preferences' => 'Innstillinger lagra!', + 'preferences_general' => 'Generelt', + 'preferences_frontpage' => 'Startskjermen', + 'preferences_security' => 'Sikkerhet', + 'preferences_layout' => 'Oppsett', + 'preferences_notifications' => 'Varsler', + 'pref_home_show_deposits' => 'Vis innskot på startskjermen', + 'pref_home_show_deposits_info' => 'Startskjermen visar allereie kostnadskontoane dine. Skal den òg vise inntektskontoane dine?', + 'pref_home_do_show_deposits' => 'Ja, vis dem', + 'successful_count' => 'korav :count var vellukka', + 'list_page_size_title' => 'Sidestørrelse', + 'list_page_size_help' => 'Ei liste over ting (kontoar, transaksjonar osv.). Visar maksimalt dette antal element på kvar side.', + 'list_page_size_label' => 'Sidestørrelse', + 'between_dates' => '(:start og :end)', + 'pref_optional_fields_transaction' => 'Valgfrie felt for transaksjonar', + 'pref_optional_fields_transaction_help' => 'Som standard er ikkje alle felt aktivert når du oppretter ein ny transaksjon (for å unngå forvirring). Nedanfor kan du aktivera desse felta om du trur dei kan vera nyttige for deg. Selvfølgelig vil eit felt som er deaktivert, men allereie fylt inn, vera synlig, uavhengig av innstillinga.', + 'optional_tj_date_fields' => 'Datofelter', + 'optional_tj_other_fields' => 'Andre felt', + 'optional_tj_attachment_fields' => 'Vedleggsfelter', + 'pref_optional_tj_interest_date' => 'Rentedato', + 'pref_optional_tj_book_date' => 'Bokføringsdato', + 'pref_optional_tj_process_date' => 'Prosesseringsdato', + 'pref_optional_tj_due_date' => 'Forfallsdato', + 'pref_optional_tj_payment_date' => 'Betalingsdato', + 'pref_optional_tj_invoice_date' => 'Fakturadato', + 'pref_optional_tj_internal_reference' => 'Intern referanse', + 'pref_optional_tj_notes' => 'Notat', + 'pref_optional_tj_attachments' => 'Vedlegg', + 'pref_optional_tj_external_url' => 'Ekstern URL', + 'pref_optional_tj_location' => 'Sted', + 'pref_optional_tj_links' => 'Transaksjonskoplingar', + 'optional_field_meta_dates' => 'Datoer', + 'optional_field_meta_business' => 'Bedrift', + 'optional_field_attachments' => 'Vedlegg', + 'optional_field_meta_data' => 'Valgfri metadata', + 'external_url' => 'Ekstern URL', + 'pref_notification_bill_reminder' => 'Påminnelse om forfallende rekningar', + 'pref_notification_new_access_token' => 'Varsle når eit nytt API tilgangstoken er opprettet', + 'pref_notification_transaction_creation' => 'Varsle når ein transaksjon opprettes automatisk', + 'pref_notification_user_login' => 'Varsle når du loggar inn frå eit ny plass', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Varslinger', + 'pref_notifications_help' => 'Angi om dette er varsler du ønskar å få. Nokre meldingar kan inneholda sensitiv økonomisk informasjon.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'Om du vil at Firefly III skal varsle deg ved hjelp av Slack, skriv inn webhook-URLen her. Ellers la feltet stå tomt. Dersom du er ein administrator må du òg definera denne URL-adressa i administrasjonen.', + 'slack_url_label' => 'Slack «incoming webhook» URL', // Financial administrations - 'administration_index' => 'Økonomisk administrasjon', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Økonomisk administrasjon', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Rens data frå Firefly III', - 'purge_data_expl' => 'Rensing betyr «slett det som allereie er sletta». Under normale omstendigheiter slettar Firefly III ingenting permanent. Det gjemmer det. Knappen under slettar alle desse tidlegare «sletta» oppføringane FOR ALLTID.', - 'delete_stuff_header' => 'Slett og rens data', - 'purge_all_data' => 'Rens alle sletta postar', - 'purge_data' => 'Rens data', - 'purged_all_records' => 'Alle sletta postar vart fjerna.', - 'delete_data_title' => 'Slett data frå Firefly III', - 'permanent_delete_stuff' => 'Du kan sletta ting frå Firefly III. Ved å bruka knappane under betyr at oppføringane dine vil verta fjerna frå visning og skjult. Det er ikkje mogleg å angre på dette, men elementa kan forbli i databasen kor du kan hente dei tilbake om nødvendig.', - 'other_sessions_logged_out' => 'Alle dine andre økter har vorte logget ut.', - 'delete_unused_accounts' => 'Sletting av ubrukte kontoar vil tømma auto-fullfør listene dine.', - 'delete_all_unused_accounts' => 'Slett ubrukte kontoar', - 'deleted_all_unused_accounts' => 'Alle ubrukte kontoar er sletta', - 'delete_all_budgets' => 'Slett ALLE budsjett', - 'delete_all_categories' => 'Slett ALLE kategoriane dine', - 'delete_all_tags' => 'Slett ALLE nøkkelorda dine', - 'delete_all_bills' => 'Slett ALLE rekningane dine', - 'delete_all_piggy_banks' => 'Slett ALLE sparegriser', - 'delete_all_rules' => 'Slett ALLE reglane dine', - 'delete_all_recurring' => 'Slett ALLE gjentakande transaksjonar', - 'delete_all_object_groups' => 'Slett ALLE objektgrupper', - 'delete_all_accounts' => 'Slett ALLE kontoane dine', - 'delete_all_asset_accounts' => 'Slett ALLE aktivakontoane dine', - 'delete_all_expense_accounts' => 'Slett ALLE utgiftskontoane dine', - 'delete_all_revenue_accounts' => 'Slett ALLE inntektskontoane dine', - 'delete_all_liabilities' => 'Slett ALLE forpliktelser', - 'delete_all_transactions' => 'Slett ALLE transaksjonane dine', - 'delete_all_withdrawals' => 'Slett ALLE uttaka dine', - 'delete_all_deposits' => 'Slett ALLE innskot', - 'delete_all_transfers' => 'Slett ALLE overføringer', - 'also_delete_transactions' => 'Når kontoar vert sletta så vert ALLE tilhøyrande uttak, innskot og overføringar sletta!', - 'deleted_all_budgets' => 'Alle budsjett har vorte sletta', - 'deleted_all_categories' => 'Alle kategoriar har vorte sletta', - 'deleted_all_tags' => 'Alle nøkkelorda har vorte sletta', - 'deleted_all_bills' => 'Alle rekningar har vorte sletta', - 'deleted_all_piggy_banks' => 'Alle sparegriser er sletta', - 'deleted_all_rules' => 'Alle reglar og regelgrupper er sletta', - 'deleted_all_object_groups' => 'Alle grupper har vorte sletta', - 'deleted_all_accounts' => 'Alle kontoar har vorte sletta', - 'deleted_all_asset_accounts' => 'Alle aktivakontoar har vorte sletta', - 'deleted_all_expense_accounts' => 'Alle utgiftskontoar har blitt sletta', - 'deleted_all_revenue_accounts' => 'Alle inntektskontoar har blitt sletta', - 'deleted_all_liabilities' => 'Alle forpliktelser har vorte sletta', - 'deleted_all_transactions' => 'Alle transaksjonar har vorte sletta', - 'deleted_all_withdrawals' => 'Alle uttak er sletta', - 'deleted_all_deposits' => 'Alle innskot er sletta', - 'deleted_all_transfers' => 'Alle overføringer er sletta', - 'deleted_all_recurring' => 'Alle gjentakande transaksjonar har vorte sletta', - 'change_your_password' => 'Endre passord', - 'delete_account' => 'Slett konto', - 'current_password' => 'Noverande passord', - 'new_password' => 'Nytt passord', - 'new_password_again' => 'Nytt passord (gjenta)', - 'delete_your_account' => 'Slett din konto', - 'delete_your_account_help' => 'Om du slettar brukarkontoen din så vert og alle kontoar, transaksjonar, og alt anna du har lagra i Firefly III sletta. Det vert vekke FOR GODT.', - 'delete_your_account_password' => 'Skriv inn passordet ditt for å fortsetja.', - 'password' => 'Passord', - 'are_you_sure' => 'Er du sikker? Du kan ikkje angre på dette.', - 'delete_account_button' => 'SLETT din konto', - 'invalid_current_password' => 'Ugyldig noverande passord!', - 'password_changed' => 'Passord endra!', - 'should_change' => 'Tanken er å endra passordet ditt.', - 'invalid_password' => 'Ugyldig passord!', - 'what_is_pw_security' => 'Kva er «sjekk passordsikkerhet»?', - 'secure_pw_title' => 'Korleis velga eit sikkert passord', - 'forgot_password_response' => 'Takk skal du ha. Om det eksisterar ein konto med denne e-postadressa, finn du instruksjonar i innboksen din.', - 'secure_pw_history' => 'Ikke ein veke går uten at du leser i nyheitene om eit nettsted som har mistet passord for brukarane sine. Hackere og tyver brukar desse passorda for å prøve å stjela din private informasjon. Denne informasjonen er verdifull.', - 'secure_pw_ff' => 'Brukar du det same passordet over alt på Internett? Om berre ein nettstad mistar passordet, har datasnokar tilgang til alle dine data. Firefly III er avhengig av at du vel eit sterkt og unikt passord for å beskytta dine finansielle data.', - 'secure_pw_check_box' => 'For å hjelpa deg kan Firefly III sjekka om passordet du vil bruka har vorte stole tidlegare. Om dette er tilfelle, rådar Firefly III deg til ikkje å bruka dette passordet.', - 'secure_pw_working_title' => 'Korleis virker det?', - 'secure_pw_working' => 'Ved å huke av denne boksen vil Firefly III sende dei fem første teikna til SHA1-hashen av passordet ditt til nettsida til Troy Hunt for å sjå om det er på lista hans. Dette vil stoppe deg frå å bruka usikre passord som anbefalt i den siste spesialpublikasjonen frå NIST om dette emnet.', - 'secure_pw_should' => 'Bør eg huke av boksen?', - 'secure_pw_long_password' => 'Ja. Alltid bekreft at passordet ditt er trygt.', - 'command_line_token' => 'Kommandolinjenøkkel', - 'explain_command_line_token' => 'Du trenger dette "token" for å utføre kommander på kommandolinje som f. eks. importere eller eksportere. Uten dette teiknet fungerar ikkje kommandoene. Ikke del din kommandolinje token. Ingen vil spørre deg om dette spesialteiknet, ikkje engang meg. Om du frykter at du har mistet dette, eller ved paranoia, trykk på knappen for å generera eit nytt "token".', - 'regenerate_command_line_token' => 'Regenerer kommandolinjenøkkel', - 'token_regenerated' => 'Ein ny kommandolinjenøkkel vart generert', - 'change_your_email' => 'Endre din epostadresse', - 'email_verification' => 'Ein e-postmelding sendes til din gamle og nye e-postadresse. Av sikkerhetsgrunner, vil du ikkje kunne logge inn før du bekrefter din nye epostadresse. Om du er usikker på om Firefly III installasjonen er i stand til å sende e-post, ikkje bruk denne funksjonen. Om du er administrator, kan du teste dette i Administrasjon.', - 'email_changed_logout' => 'Inntil du bekrefter e-postadressa din, kan du ikkje logge inn.', - 'login_with_new_email' => 'Du kan no logge inn med din nye e-postadresse.', - 'login_with_old_email' => 'Du kan no logge inn med din gamle e-postadresse igjen.', - 'login_provider_local_only' => 'Denne handlinga er ikkje tilgjengeleg ved autentisering gjennom «:login_provider».', - 'external_user_mgt_disabled' => 'Denne handlinga er ikkje tilgjengelig når Firefly III ikkje er ansvarlig for brukarstyring eller autentiseringshandtering.', - 'external_auth_disabled' => 'Denne handlinga er ikkje tilgjengeleg når Firefly III ikkje er ansvarlig for autentiseringshandtering.', - 'delete_local_info_only' => "Fordi Firefly III ikkje er ansvarlig for brukarstyring eller autentiseringshandtering, vil denne funksjonen berre sletta lokal informasjon om Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth klienter', - 'profile_oauth_no_clients' => 'Du har ikkje oppretta nokon OAuth klienter.', - 'profile_oauth_clients_external_auth' => 'Om du brukar ein ekstern autentiseringsleverandør som Authelia, vil ikkje OAuth klientar fungera. Du kan berre bruka personlege tilgangsnøklar.', - 'profile_oauth_clients_header' => 'Klienter', - 'profile_oauth_client_id' => 'Klient-ID', - 'profile_oauth_client_name' => 'Namn', - 'profile_oauth_client_secret' => 'Hemmelegheit', - 'profile_oauth_create_new_client' => 'Opprett Ny Klient', - 'profile_oauth_create_client' => 'Opprett Klient', - 'profile_oauth_edit_client' => 'Rediger Klient', - 'profile_oauth_name_help' => 'Noko brukarane dine vil gjenkjenne og stole på.', - 'profile_oauth_redirect_url' => 'Videresendings-URL', - 'profile_oauth_redirect_url_help' => 'Programmets tilbakekallingslenkje for autorisering.', - 'profile_authorized_apps' => 'Dine autoriserte applikasjoner', - 'profile_authorized_clients' => 'Autoriserte klienter', - 'profile_scopes' => 'Omfang', - 'profile_revoke' => 'Tilbakekall', - 'profile_oauth_client_secret_title' => 'Klient Hemmelegheit', - 'profile_oauth_client_secret_expl' => 'Her er din nye klienthemmelegheit. Dette er den einaste gongen han vert vist så ikkje mist han! Du kan bruka denne hemmeligheita til å laga API-spørsmål.', - 'profile_personal_access_tokens' => 'Personleg tilgangsnøkkel', - 'profile_personal_access_token' => 'Personleg tilgangsnøkkel', - 'profile_oauth_confidential' => 'Konfidensiell', - 'profile_oauth_confidential_help' => 'Krev at klienten godkjenner med ein hemmelegheit. Konfidensielle klienter kan halde legitimasjon på ein sikker måte uten å utsette dei for uautoriserte parter. Offentlige programmer, som skrivebord eller JavaScript SPA-programmer er ikkje istand til å halda hemmelegheiter sikra.', - 'profile_personal_access_token_explanation' => 'Her er din nye personlege tilgangsnøkkel. Dette er den einaste gongen han vert vist så ikkje mist han! Du kan no bruka tilgangsnøkkelen til å laga API-spørsmål.', - 'profile_no_personal_access_token' => 'Du har ikkje oppretta personlege tilgangsnøklar.', - 'profile_create_new_token' => 'Opprette nytt token', - 'profile_create_token' => 'Opprett token', - 'profile_create' => 'Opprett', - 'profile_save_changes' => 'Lagra endringer', - 'profile_whoops' => 'Oisann!', - 'profile_something_wrong' => 'Noko gjekk gale!', - 'profile_try_again' => 'Noko gjekk gale. Prøv på nytt.', - 'amounts' => 'Beløp', - 'multi_account_warning_unknown' => 'Avhengig av kva type transaksjon du opprettar, Kjelde og/eller målkonto for etterfølgande delingar kan overstyrast av det som er definert i transaksjonens første del.', - 'multi_account_warning_withdrawal' => 'Husk at kildekontoen for etterfølgende oppsplitting skal overlates av kva som defineres i den første delen av uttrekket.', - 'multi_account_warning_deposit' => 'Husk at mottakerkontoen for etterfølgende oppsplitting skal overstyres av det som er definert i den første delen av depositumet.', - 'multi_account_warning_transfer' => 'Husk at kildens pluss destinasjonskonto med etterfølgende oppdeling overstyres av det som er definert i ein første del av overføringen.', + 'purge_data_title' => 'Rens data frå Firefly III', + 'purge_data_expl' => 'Rensing betyr «slett det som allereie er sletta». Under normale omstendigheiter slettar Firefly III ingenting permanent. Det gjemmer det. Knappen under slettar alle desse tidlegare «sletta» oppføringane FOR ALLTID.', + 'delete_stuff_header' => 'Slett og rens data', + 'purge_all_data' => 'Rens alle sletta postar', + 'purge_data' => 'Rens data', + 'purged_all_records' => 'Alle sletta postar vart fjerna.', + 'delete_data_title' => 'Slett data frå Firefly III', + 'permanent_delete_stuff' => 'Du kan sletta ting frå Firefly III. Ved å bruka knappane under betyr at oppføringane dine vil verta fjerna frå visning og skjult. Det er ikkje mogleg å angre på dette, men elementa kan forbli i databasen kor du kan hente dei tilbake om nødvendig.', + 'other_sessions_logged_out' => 'Alle dine andre økter har vorte logget ut.', + 'delete_unused_accounts' => 'Sletting av ubrukte kontoar vil tømma auto-fullfør listene dine.', + 'delete_all_unused_accounts' => 'Slett ubrukte kontoar', + 'deleted_all_unused_accounts' => 'Alle ubrukte kontoar er sletta', + 'delete_all_budgets' => 'Slett ALLE budsjett', + 'delete_all_categories' => 'Slett ALLE kategoriane dine', + 'delete_all_tags' => 'Slett ALLE nøkkelorda dine', + 'delete_all_bills' => 'Slett ALLE rekningane dine', + 'delete_all_piggy_banks' => 'Slett ALLE sparegriser', + 'delete_all_rules' => 'Slett ALLE reglane dine', + 'delete_all_recurring' => 'Slett ALLE gjentakande transaksjonar', + 'delete_all_object_groups' => 'Slett ALLE objektgrupper', + 'delete_all_accounts' => 'Slett ALLE kontoane dine', + 'delete_all_asset_accounts' => 'Slett ALLE aktivakontoane dine', + 'delete_all_expense_accounts' => 'Slett ALLE utgiftskontoane dine', + 'delete_all_revenue_accounts' => 'Slett ALLE inntektskontoane dine', + 'delete_all_liabilities' => 'Slett ALLE forpliktelser', + 'delete_all_transactions' => 'Slett ALLE transaksjonane dine', + 'delete_all_withdrawals' => 'Slett ALLE uttaka dine', + 'delete_all_deposits' => 'Slett ALLE innskot', + 'delete_all_transfers' => 'Slett ALLE overføringer', + 'also_delete_transactions' => 'Når kontoar vert sletta så vert ALLE tilhøyrande uttak, innskot og overføringar sletta!', + 'deleted_all_budgets' => 'Alle budsjett har vorte sletta', + 'deleted_all_categories' => 'Alle kategoriar har vorte sletta', + 'deleted_all_tags' => 'Alle nøkkelorda har vorte sletta', + 'deleted_all_bills' => 'Alle rekningar har vorte sletta', + 'deleted_all_piggy_banks' => 'Alle sparegriser er sletta', + 'deleted_all_rules' => 'Alle reglar og regelgrupper er sletta', + 'deleted_all_object_groups' => 'Alle grupper har vorte sletta', + 'deleted_all_accounts' => 'Alle kontoar har vorte sletta', + 'deleted_all_asset_accounts' => 'Alle aktivakontoar har vorte sletta', + 'deleted_all_expense_accounts' => 'Alle utgiftskontoar har blitt sletta', + 'deleted_all_revenue_accounts' => 'Alle inntektskontoar har blitt sletta', + 'deleted_all_liabilities' => 'Alle forpliktelser har vorte sletta', + 'deleted_all_transactions' => 'Alle transaksjonar har vorte sletta', + 'deleted_all_withdrawals' => 'Alle uttak er sletta', + 'deleted_all_deposits' => 'Alle innskot er sletta', + 'deleted_all_transfers' => 'Alle overføringer er sletta', + 'deleted_all_recurring' => 'Alle gjentakande transaksjonar har vorte sletta', + 'change_your_password' => 'Endre passord', + 'delete_account' => 'Slett konto', + 'current_password' => 'Noverande passord', + 'new_password' => 'Nytt passord', + 'new_password_again' => 'Nytt passord (gjenta)', + 'delete_your_account' => 'Slett din konto', + 'delete_your_account_help' => 'Om du slettar brukarkontoen din så vert og alle kontoar, transaksjonar, og alt anna du har lagra i Firefly III sletta. Det vert vekke FOR GODT.', + 'delete_your_account_password' => 'Skriv inn passordet ditt for å fortsetja.', + 'password' => 'Passord', + 'are_you_sure' => 'Er du sikker? Du kan ikkje angre på dette.', + 'delete_account_button' => 'SLETT din konto', + 'invalid_current_password' => 'Ugyldig noverande passord!', + 'password_changed' => 'Passord endra!', + 'should_change' => 'Tanken er å endra passordet ditt.', + 'invalid_password' => 'Ugyldig passord!', + 'what_is_pw_security' => 'Kva er «sjekk passordsikkerhet»?', + 'secure_pw_title' => 'Korleis velga eit sikkert passord', + 'forgot_password_response' => 'Takk skal du ha. Om det eksisterar ein konto med denne e-postadressa, finn du instruksjonar i innboksen din.', + 'secure_pw_history' => 'Ikke ein veke går uten at du leser i nyheitene om eit nettsted som har mistet passord for brukarane sine. Hackere og tyver brukar desse passorda for å prøve å stjela din private informasjon. Denne informasjonen er verdifull.', + 'secure_pw_ff' => 'Brukar du det same passordet over alt på Internett? Om berre ein nettstad mistar passordet, har datasnokar tilgang til alle dine data. Firefly III er avhengig av at du vel eit sterkt og unikt passord for å beskytta dine finansielle data.', + 'secure_pw_check_box' => 'For å hjelpa deg kan Firefly III sjekka om passordet du vil bruka har vorte stole tidlegare. Om dette er tilfelle, rådar Firefly III deg til ikkje å bruka dette passordet.', + 'secure_pw_working_title' => 'Korleis virker det?', + 'secure_pw_working' => 'Ved å huke av denne boksen vil Firefly III sende dei fem første teikna til SHA1-hashen av passordet ditt til nettsida til Troy Hunt for å sjå om det er på lista hans. Dette vil stoppe deg frå å bruka usikre passord som anbefalt i den siste spesialpublikasjonen frå NIST om dette emnet.', + 'secure_pw_should' => 'Bør eg huke av boksen?', + 'secure_pw_long_password' => 'Ja. Alltid bekreft at passordet ditt er trygt.', + 'command_line_token' => 'Kommandolinjenøkkel', + 'explain_command_line_token' => 'Du trenger dette "token" for å utføre kommander på kommandolinje som f. eks. importere eller eksportere. Uten dette teiknet fungerar ikkje kommandoene. Ikke del din kommandolinje token. Ingen vil spørre deg om dette spesialteiknet, ikkje engang meg. Om du frykter at du har mistet dette, eller ved paranoia, trykk på knappen for å generera eit nytt "token".', + 'regenerate_command_line_token' => 'Regenerer kommandolinjenøkkel', + 'token_regenerated' => 'Ein ny kommandolinjenøkkel vart generert', + 'change_your_email' => 'Endre din epostadresse', + 'email_verification' => 'Ein e-postmelding sendes til din gamle og nye e-postadresse. Av sikkerhetsgrunner, vil du ikkje kunne logge inn før du bekrefter din nye epostadresse. Om du er usikker på om Firefly III installasjonen er i stand til å sende e-post, ikkje bruk denne funksjonen. Om du er administrator, kan du teste dette i Administrasjon.', + 'email_changed_logout' => 'Inntil du bekrefter e-postadressa din, kan du ikkje logge inn.', + 'login_with_new_email' => 'Du kan no logge inn med din nye e-postadresse.', + 'login_with_old_email' => 'Du kan no logge inn med din gamle e-postadresse igjen.', + 'login_provider_local_only' => 'Denne handlinga er ikkje tilgjengeleg ved autentisering gjennom «:login_provider».', + 'external_user_mgt_disabled' => 'Denne handlinga er ikkje tilgjengelig når Firefly III ikkje er ansvarlig for brukarstyring eller autentiseringshandtering.', + 'external_auth_disabled' => 'Denne handlinga er ikkje tilgjengeleg når Firefly III ikkje er ansvarlig for autentiseringshandtering.', + 'delete_local_info_only' => 'Fordi Firefly III ikkje er ansvarlig for brukarstyring eller autentiseringshandtering, vil denne funksjonen berre sletta lokal informasjon om Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth klienter', + 'profile_oauth_no_clients' => 'Du har ikkje oppretta nokon OAuth klienter.', + 'profile_oauth_clients_external_auth' => 'Om du brukar ein ekstern autentiseringsleverandør som Authelia, vil ikkje OAuth klientar fungera. Du kan berre bruka personlege tilgangsnøklar.', + 'profile_oauth_clients_header' => 'Klienter', + 'profile_oauth_client_id' => 'Klient-ID', + 'profile_oauth_client_name' => 'Namn', + 'profile_oauth_client_secret' => 'Hemmelegheit', + 'profile_oauth_create_new_client' => 'Opprett Ny Klient', + 'profile_oauth_create_client' => 'Opprett Klient', + 'profile_oauth_edit_client' => 'Rediger Klient', + 'profile_oauth_name_help' => 'Noko brukarane dine vil gjenkjenne og stole på.', + 'profile_oauth_redirect_url' => 'Videresendings-URL', + 'profile_oauth_redirect_url_help' => 'Programmets tilbakekallingslenkje for autorisering.', + 'profile_authorized_apps' => 'Dine autoriserte applikasjoner', + 'profile_authorized_clients' => 'Autoriserte klienter', + 'profile_scopes' => 'Omfang', + 'profile_revoke' => 'Tilbakekall', + 'profile_oauth_client_secret_title' => 'Klient Hemmelegheit', + 'profile_oauth_client_secret_expl' => 'Her er din nye klienthemmelegheit. Dette er den einaste gongen han vert vist så ikkje mist han! Du kan bruka denne hemmeligheita til å laga API-spørsmål.', + 'profile_personal_access_tokens' => 'Personleg tilgangsnøkkel', + 'profile_personal_access_token' => 'Personleg tilgangsnøkkel', + 'profile_oauth_confidential' => 'Konfidensiell', + 'profile_oauth_confidential_help' => 'Krev at klienten godkjenner med ein hemmelegheit. Konfidensielle klienter kan halde legitimasjon på ein sikker måte uten å utsette dei for uautoriserte parter. Offentlige programmer, som skrivebord eller JavaScript SPA-programmer er ikkje istand til å halda hemmelegheiter sikra.', + 'profile_personal_access_token_explanation' => 'Her er din nye personlege tilgangsnøkkel. Dette er den einaste gongen han vert vist så ikkje mist han! Du kan no bruka tilgangsnøkkelen til å laga API-spørsmål.', + 'profile_no_personal_access_token' => 'Du har ikkje oppretta personlege tilgangsnøklar.', + 'profile_create_new_token' => 'Opprette nytt token', + 'profile_create_token' => 'Opprett token', + 'profile_create' => 'Opprett', + 'profile_save_changes' => 'Lagra endringer', + 'profile_whoops' => 'Oisann!', + 'profile_something_wrong' => 'Noko gjekk gale!', + 'profile_try_again' => 'Noko gjekk gale. Prøv på nytt.', + 'amounts' => 'Beløp', + 'multi_account_warning_unknown' => 'Avhengig av kva type transaksjon du opprettar, Kjelde og/eller målkonto for etterfølgande delingar kan overstyrast av det som er definert i transaksjonens første del.', + 'multi_account_warning_withdrawal' => 'Husk at kildekontoen for etterfølgende oppsplitting skal overlates av kva som defineres i den første delen av uttrekket.', + 'multi_account_warning_deposit' => 'Husk at mottakerkontoen for etterfølgende oppsplitting skal overstyres av det som er definert i den første delen av depositumet.', + 'multi_account_warning_transfer' => 'Husk at kildens pluss destinasjonskonto med etterfølgende oppdeling overstyres av det som er definert i ein første del av overføringen.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Eksportere data frå Firefly III', - 'export_data_menu' => 'Eksporter data', - 'export_data_bc' => 'Eksportere data frå Firefly III', - 'export_data_main_title' => 'Importer data til Firefly III', - 'export_data_expl' => 'Denne lenkja lar deg eksportera alle transaksjonar + metadata frå Firefly III. Referer til hjelp (øvst til høgre (?)-ikon) for meir informasjon om prosessen.', - 'export_data_all_transactions' => 'Eksportere alle transaksjonar', - 'export_data_advanced_expl' => 'Dersom du trenger ein meir avansert eller spesifikk type eksport, les "hjelpen" om korleis man brukar konsollkommandoen php artisan help firefly-ii:export-data.', + 'export_data_title' => 'Eksportere data frå Firefly III', + 'export_data_menu' => 'Eksporter data', + 'export_data_bc' => 'Eksportere data frå Firefly III', + 'export_data_main_title' => 'Importer data til Firefly III', + 'export_data_expl' => 'Denne lenkja lar deg eksportera alle transaksjonar + metadata frå Firefly III. Referer til hjelp (øvst til høgre (?)-ikon) for meir informasjon om prosessen.', + 'export_data_all_transactions' => 'Eksportere alle transaksjonar', + 'export_data_advanced_expl' => 'Dersom du trenger ein meir avansert eller spesifikk type eksport, les "hjelpen" om korleis man brukar konsollkommandoen php artisan help firefly-ii:export-data.', // attachments - 'nr_of_attachments' => 'Ett vedlegg|:count vedlegg', - 'attachments' => 'Vedlegg', - 'edit_attachment' => 'Rediger vedlegg ":name"', - 'update_attachment' => 'Oppdater vedlegget', - 'delete_attachment' => 'Slett vedlegg ":name"', - 'attachment_deleted' => 'Sletta vedlegg ":name"', - 'liabilities_deleted' => 'Sletta gjeld ":name"', - 'attachment_updated' => 'Oppdatert vedlegg ":name"', - 'upload_max_file_size' => 'Maks filstørrelse: :size', - 'list_all_attachments' => 'Liste over alle vedlegg', + 'nr_of_attachments' => 'Ett vedlegg|:count vedlegg', + 'attachments' => 'Vedlegg', + 'edit_attachment' => 'Rediger vedlegg ":name"', + 'update_attachment' => 'Oppdater vedlegget', + 'delete_attachment' => 'Slett vedlegg ":name"', + 'attachment_deleted' => 'Sletta vedlegg ":name"', + 'liabilities_deleted' => 'Sletta gjeld ":name"', + 'attachment_updated' => 'Oppdatert vedlegg ":name"', + 'upload_max_file_size' => 'Maks filstørrelse: :size', + 'list_all_attachments' => 'Liste over alle vedlegg', // transaction index - 'title_expenses' => 'Utgifter', - 'title_withdrawal' => 'Utgifter', - 'title_revenue' => 'Inntekt', - 'title_deposit' => 'Inntekt', - 'title_transfer' => 'Overføringer', - 'title_transfers' => 'Overføringer', - 'submission_options' => 'Alternativer for innsending', - 'apply_rules_checkbox' => 'Bruk reglar', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Utgifter', + 'title_withdrawal' => 'Utgifter', + 'title_revenue' => 'Inntekt', + 'title_deposit' => 'Inntekt', + 'title_transfer' => 'Overføringer', + 'title_transfers' => 'Overføringer', + 'submission_options' => 'Alternativer for innsending', + 'apply_rules_checkbox' => 'Bruk reglar', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Denne transaksjonen er allereie eit uttak', - 'convert_is_already_type_Deposit' => 'Denne transaksjonen er allereie eit innskot', - 'convert_is_already_type_Transfer' => 'Denne transaksjonen er allereie ein overføring', - 'convert_to_Withdrawal' => 'Konverter ":description" til eit uttak', - 'convert_to_Deposit' => 'Konverter ":description" til eit innskot', - 'convert_to_Transfer' => 'Konverter ":description" til ein overføring', - 'convert_options_WithdrawalDeposit' => 'Konverter eit uttak til eit innskot', - 'convert_options_WithdrawalTransfer' => 'Konverter eit uttak til ein overføring', - 'convert_options_DepositTransfer' => 'Konverter eit innskot til ein overføring', - 'convert_options_DepositWithdrawal' => 'Konverter eit innskot til eit uttak', - 'convert_options_TransferWithdrawal' => 'Konverter ein overføring til eit uttak', - 'convert_options_TransferDeposit' => 'Konverter ein overføring til eit innskot', - 'convert_Withdrawal_to_deposit' => 'Konverter dette uttaket til eit innskot', - 'convert_Withdrawal_to_transfer' => 'Konverter dette uttaket til ein overføring', - 'convert_Deposit_to_withdrawal' => 'Konverter dette innskuddet til eit uttak', - 'convert_Deposit_to_transfer' => 'Konverter dette innskuddet til ein overføring', - 'convert_Transfer_to_deposit' => 'Konverter denne overføringen til eit innskot', - 'convert_Transfer_to_withdrawal' => 'Konverter denne overføringen til eit uttak', - 'convert_please_set_revenue_source' => 'Ver venleg å vel inntektskontoen pengane vil komma frå.', - 'convert_please_set_asset_destination' => 'Ver venleg å vel aktivakontoen pengane skal gå til.', - 'convert_please_set_expense_destination' => 'Ver venleg å vel utgiftsskontoen pengane skal gå til.', - 'convert_please_set_asset_source' => 'Ver venleg å vel aktivakontoen pengane kjem frå.', - 'convert_expl_w_d' => 'Når du endrar eit uttak til eit innskot, vert pengane bli satt inn på den angitte målkontoen i staden for å verta tatt ut av den.|Når du endrar eit uttak til eit innskot, vert pengane bli satt inn på dei angitte målkontoane i staden for å verta tatt ut av dei.', - 'convert_expl_w_t' => 'Ved konvertering frå uttak til overføring, vil pengane overføres frå kildekontoen til andre aktiva eller gjeld i staden for å verta brukt på den opprinnelige utgiftskontoen.|Ved konvertering frå uttak til overføring, vil pengane overføres frå kjeldekontoane til andre aktiva eller gjeldskontoar i staden for å verta brukt på den opprinnelige utgiftskontoen.', - 'convert_expl_d_w' => 'Når du endrar eit innskot til eit uttak, vert pengane bli tatt ut av den angitte kjeldekontoen i staden for å verta satt inn.|Når du endrar eit innskot til eit uttak, vert pengane bli tatt ut av dei angitte kjeldekontoane i staden for å verta satt inn.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'Når du konverterar ei overføring til eit uttak, vert pengene brukt på målkontoen du vel her, i staden for å verta overført.|Når du konverterar ei overføring til eit uttak, vert pengene brukt på målkontoane du vel her, i staden for å verta overført.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => 'Transaksjonen er konvertert til eit uttak', - 'converted_to_Deposit' => 'Transaksjonen er konvertert til eit innskot', - 'converted_to_Transfer' => 'Transaksjonen er konvertert til ein overføring', - 'invalid_convert_selection' => 'Kontoen du har valt er allereie brukt i denne transaksjonen eller eksisterar ikkje.', - 'source_or_dest_invalid' => 'Finner ikkje rett transaksjonsdetaljer. Konvertering er ikkje mogleg.', - 'convert_to_withdrawal' => 'Konverter til eit uttak', - 'convert_to_deposit' => 'Konverter til eit innskot', - 'convert_to_transfer' => 'Konverter til ei overføring', + 'convert_is_already_type_Withdrawal' => 'Denne transaksjonen er allereie eit uttak', + 'convert_is_already_type_Deposit' => 'Denne transaksjonen er allereie eit innskot', + 'convert_is_already_type_Transfer' => 'Denne transaksjonen er allereie ein overføring', + 'convert_to_Withdrawal' => 'Konverter ":description" til eit uttak', + 'convert_to_Deposit' => 'Konverter ":description" til eit innskot', + 'convert_to_Transfer' => 'Konverter ":description" til ein overføring', + 'convert_options_WithdrawalDeposit' => 'Konverter eit uttak til eit innskot', + 'convert_options_WithdrawalTransfer' => 'Konverter eit uttak til ein overføring', + 'convert_options_DepositTransfer' => 'Konverter eit innskot til ein overføring', + 'convert_options_DepositWithdrawal' => 'Konverter eit innskot til eit uttak', + 'convert_options_TransferWithdrawal' => 'Konverter ein overføring til eit uttak', + 'convert_options_TransferDeposit' => 'Konverter ein overføring til eit innskot', + 'convert_Withdrawal_to_deposit' => 'Konverter dette uttaket til eit innskot', + 'convert_Withdrawal_to_transfer' => 'Konverter dette uttaket til ein overføring', + 'convert_Deposit_to_withdrawal' => 'Konverter dette innskuddet til eit uttak', + 'convert_Deposit_to_transfer' => 'Konverter dette innskuddet til ein overføring', + 'convert_Transfer_to_deposit' => 'Konverter denne overføringen til eit innskot', + 'convert_Transfer_to_withdrawal' => 'Konverter denne overføringen til eit uttak', + 'convert_please_set_revenue_source' => 'Ver venleg å vel inntektskontoen pengane vil komma frå.', + 'convert_please_set_asset_destination' => 'Ver venleg å vel aktivakontoen pengane skal gå til.', + 'convert_please_set_expense_destination' => 'Ver venleg å vel utgiftsskontoen pengane skal gå til.', + 'convert_please_set_asset_source' => 'Ver venleg å vel aktivakontoen pengane kjem frå.', + 'convert_expl_w_d' => 'Når du endrar eit uttak til eit innskot, vert pengane bli satt inn på den angitte målkontoen i staden for å verta tatt ut av den.|Når du endrar eit uttak til eit innskot, vert pengane bli satt inn på dei angitte målkontoane i staden for å verta tatt ut av dei.', + 'convert_expl_w_t' => 'Ved konvertering frå uttak til overføring, vil pengane overføres frå kildekontoen til andre aktiva eller gjeld i staden for å verta brukt på den opprinnelige utgiftskontoen.|Ved konvertering frå uttak til overføring, vil pengane overføres frå kjeldekontoane til andre aktiva eller gjeldskontoar i staden for å verta brukt på den opprinnelige utgiftskontoen.', + 'convert_expl_d_w' => 'Når du endrar eit innskot til eit uttak, vert pengane bli tatt ut av den angitte kjeldekontoen i staden for å verta satt inn.|Når du endrar eit innskot til eit uttak, vert pengane bli tatt ut av dei angitte kjeldekontoane i staden for å verta satt inn.', + 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', + 'convert_expl_t_w' => 'Når du konverterar ei overføring til eit uttak, vert pengene brukt på målkontoen du vel her, i staden for å verta overført.|Når du konverterar ei overføring til eit uttak, vert pengene brukt på målkontoane du vel her, i staden for å verta overført.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', + 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', + 'converted_to_Withdrawal' => 'Transaksjonen er konvertert til eit uttak', + 'converted_to_Deposit' => 'Transaksjonen er konvertert til eit innskot', + 'converted_to_Transfer' => 'Transaksjonen er konvertert til ein overføring', + 'invalid_convert_selection' => 'Kontoen du har valt er allereie brukt i denne transaksjonen eller eksisterar ikkje.', + 'source_or_dest_invalid' => 'Finner ikkje rett transaksjonsdetaljer. Konvertering er ikkje mogleg.', + 'convert_to_withdrawal' => 'Konverter til eit uttak', + 'convert_to_deposit' => 'Konverter til eit innskot', + 'convert_to_transfer' => 'Konverter til ei overføring', // create new stuff: - 'create_new_withdrawal' => 'Opprett nytt uttak', - 'create_new_deposit' => 'Opprett nytt innskot', - 'create_new_transfer' => 'Opprett ny overføring', - 'create_new_asset' => 'Opprett ny aktivakonto', - 'create_new_liabilities' => 'Opprett ny gjeld', - 'create_new_expense' => 'Opprett ny utgiftskonto', - 'create_new_revenue' => 'Opprett ny inntektskonto', - 'create_new_piggy_bank' => 'Opprett ny sparegris', - 'create_new_bill' => 'Opprett ny rekning', - 'create_new_subscription' => 'Opprett nytt abonnement', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Opprett nytt uttak', + 'create_new_deposit' => 'Opprett nytt innskot', + 'create_new_transfer' => 'Opprett ny overføring', + 'create_new_asset' => 'Opprett ny aktivakonto', + 'create_new_liabilities' => 'Opprett ny gjeld', + 'create_new_expense' => 'Opprett ny utgiftskonto', + 'create_new_revenue' => 'Opprett ny inntektskonto', + 'create_new_piggy_bank' => 'Opprett ny sparegris', + 'create_new_bill' => 'Opprett ny rekning', + 'create_new_subscription' => 'Opprett nytt abonnement', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Opprett ein ny valuta', - 'store_currency' => 'Lagra ny valuta', - 'update_currency' => 'Oppdater valuta', - 'new_default_currency' => ':name er no standardvaluta.', - 'cannot_delete_currency' => 'Kan ikkje sletta :name fordi det er fortsatt i bruk.', - 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', - 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', - 'cannot_disable_currency_last_left' => 'Kan ikkje deaktivera :name fordi det er den siste aktive valutaen.', - 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', - 'cannot_disable_currency_bills' => 'Kan ikkje deaktivera :name fordi den er brukt i rekningar.', - 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', - 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', - 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', - 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', - 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', - 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', - 'deleted_currency' => 'Valuta :name sletta', - 'created_currency' => 'Valuta :name opprettet', - 'could_not_store_currency' => 'Kan ikkje lagra den nye valutaen.', - 'updated_currency' => 'Valuta :name oppdatert', - 'ask_site_owner' => 'Spør :owner om å legga til, fjerna eller redigera valutaer.', - 'currencies_intro' => 'Firefly III støttar ulike valutaer som du kan definere og aktivera her.', - 'make_default_currency' => 'Sett som standard', - 'default_currency' => 'standard', - 'currency_is_disabled' => 'Deaktivert', - 'enable_currency' => 'Aktiver', - 'disable_currency' => 'Deaktiver', - 'currencies_default_disabled' => 'Dei fleste valutaene er deaktivert som standard. For å bruka dem, må du aktivera dei først.', - 'currency_is_now_enabled' => 'Valuta ":name" er aktivert', - 'currency_is_now_disabled' => 'Valuta ":name" er deaktivert', + 'create_currency' => 'Opprett ein ny valuta', + 'store_currency' => 'Lagra ny valuta', + 'update_currency' => 'Oppdater valuta', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Kan ikkje sletta :name fordi det er fortsatt i bruk.', + 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', + 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', + 'cannot_disable_currency_last_left' => 'Kan ikkje deaktivera :name fordi det er den siste aktive valutaen.', + 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', + 'cannot_disable_currency_bills' => 'Kan ikkje deaktivera :name fordi den er brukt i rekningar.', + 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', + 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', + 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', + 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', + 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', + 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', + 'deleted_currency' => 'Valuta :name sletta', + 'created_currency' => 'Valuta :name opprettet', + 'could_not_store_currency' => 'Kan ikkje lagra den nye valutaen.', + 'updated_currency' => 'Valuta :name oppdatert', + 'ask_site_owner' => 'Spør :owner om å legga til, fjerna eller redigera valutaer.', + 'currencies_intro' => 'Firefly III støttar ulike valutaer som du kan definere og aktivera her.', + 'make_default_currency' => 'Sett som standard', + 'default_currency' => 'standard', + 'currency_is_disabled' => 'Deaktivert', + 'enable_currency' => 'Aktiver', + 'disable_currency' => 'Deaktiver', + 'currencies_default_disabled' => 'Dei fleste valutaene er deaktivert som standard. For å bruka dem, må du aktivera dei først.', + 'currency_is_now_enabled' => 'Valuta ":name" er aktivert', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Valuta ":name" er deaktivert', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Obligatoriske felter', - 'optionalFields' => 'Valgfrie felter', - 'options' => 'Alternativer', + 'mandatoryFields' => 'Obligatoriske felter', + 'optionalFields' => 'Valgfrie felter', + 'options' => 'Alternativer', // budgets: - 'daily_budgets' => 'Daily budgets', - 'weekly_budgets' => 'Weekly budgets', - 'monthly_budgets' => 'Monthly budgets', - 'quarterly_budgets' => 'Quarterly budgets', - 'half_year_budgets' => 'Half-yearly budgets', - 'yearly_budgets' => 'Yearly budgets', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'Dette beløpet gjeld frå :start til :end:', - 'total_available_budget' => 'Total available budget (between :start and :end)', - 'total_available_budget_in_currency' => 'Total available budget in :currency', - 'see_below' => 'sjå nedanfor', - 'create_new_budget' => 'Opprett eit nytt budsjett', - 'store_new_budget' => 'Lagra nytt budsjett', - 'stored_new_budget' => 'Lagret nytt budsjett ":name"', - 'available_between' => 'Tilgjengeleg mellom :start og :end', - 'transactionsWithoutBudget' => 'Utgifter uten budsjett', - 'transactions_no_budget' => 'Utgifter uten budsjett mellom :start og :end', - 'spent_between' => 'Allereie brukt mellom :start og :end', - 'set_available_amount' => 'Sett tilgjengeleg beløp', - 'update_available_amount' => 'Oppdater tilgjengeleg beløp', - 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', - 'createBudget' => 'Nytt budsjett', - 'invalid_currency' => 'Dette er ein ugyldig valuta', - 'invalid_amount' => 'Ver venleg og skriv inn eit beløp', - 'set_ab' => 'Det tilgjengelege budsjettbeløpet er satt', - 'updated_ab' => 'Det tilgjengelege budsjettbeløpet har vorte oppdatert', - 'deleted_ab' => 'Det tilgjengelege budsjettbeløpet har vorte sletta', - 'deleted_bl' => 'Det budsjetterte beløpet er fjerna', - 'alt_currency_ab_create' => 'Sett tilgjengeleg budsjett i annan valuta', - 'bl_create_btn' => 'Angi budsjett i annan valuta', - 'inactiveBudgets' => 'Inaktive budsjett', - 'without_budget_between' => 'Transaksjoner uten eit budsjett mellom :start og :end', - 'delete_budget' => 'Slett budsjett ":name"', - 'deleted_budget' => 'Slett budsjett ":name"', - 'edit_budget' => 'Rediger budsjett ":name"', - 'updated_budget' => 'Oppdater budsjett ":name"', - 'update_amount' => 'Oppdater beløp', - 'update_budget' => 'Oppdater budsjett', - 'update_budget_amount_range' => 'Oppdater (forventa) tilgjengeleg beløp mellom :start og :end', - 'set_budget_limit_title' => 'Sett budsjettert beløp for budsjett :budget mellom :start og :end', - 'set_budget_limit' => 'Angi budsjettert beløp', - 'budget_period_navigator' => 'Periodenavigatør', - 'info_on_available_amount' => 'Kva har eg tilgjengeleg?', - 'available_amount_indication' => 'Bruk desse beløpa for å få ein indikasjon på kva ditt totale budsjett kan vera.', - 'suggested' => 'Foreslått', - 'average_between' => 'Gjennomsnitt mellom :start og :end', - 'transferred_in' => 'Overført (in)', - 'transferred_away' => 'Overført (vekke)', - 'auto_budget_none' => 'Ingen automatisk budsjett', - 'auto_budget_reset' => 'Angi eit fast beløp kvar periode', - 'auto_budget_rollover' => 'Legg til eit fast beløp kvar periode', - 'auto_budget_adjusted' => 'Legg til eit beløp kvar periode og korriger for overforbruk', - 'auto_budget_period_daily' => 'Dagleg', - 'auto_budget_period_weekly' => 'Ukentlig', - 'auto_budget_period_monthly' => 'Månadleg', - 'auto_budget_period_quarterly' => 'Kvartalsvis', - 'auto_budget_period_half_year' => 'Kvart halvår', - 'auto_budget_period_yearly' => 'Årleg', - 'auto_budget_help' => 'Du kan lesa meir om denne funksjonen under hjelp. Klikk ikonet øvst til høgre (?).', - 'auto_budget_reset_icon' => 'Budsjettet vert fastsatt periodisk', - 'auto_budget_rollover_icon' => 'Budsjettbeløpet vil øke periodisk', - 'auto_budget_adjusted_icon' => 'Budsjettbeløpet vil periodevis auka og korrigerast for overforbruk', - 'remove_budgeted_amount' => 'Fjern budsjettert beløp i :currency', + 'daily_budgets' => 'Daily budgets', + 'weekly_budgets' => 'Weekly budgets', + 'monthly_budgets' => 'Monthly budgets', + 'quarterly_budgets' => 'Quarterly budgets', + 'half_year_budgets' => 'Half-yearly budgets', + 'yearly_budgets' => 'Yearly budgets', + 'other_budgets' => 'Custom timed budgets', + 'budget_limit_not_in_range' => 'Dette beløpet gjeld frå :start til :end:', + 'total_available_budget' => 'Totalt tilgjengeleg budsjett (mellom :start og :end)', + 'total_available_budget_in_currency' => 'Totalt tilgjengeleg budsjett i :currency', + 'see_below' => 'sjå nedanfor', + 'create_new_budget' => 'Opprett eit nytt budsjett', + 'store_new_budget' => 'Lagra nytt budsjett', + 'stored_new_budget' => 'Lagret nytt budsjett ":name"', + 'available_between' => 'Tilgjengeleg mellom :start og :end', + 'transactionsWithoutBudget' => 'Utgifter uten budsjett', + 'transactions_no_budget' => 'Utgifter uten budsjett mellom :start og :end', + 'spent_between' => 'Allereie brukt mellom :start og :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Sett tilgjengeleg beløp', + 'update_available_amount' => 'Oppdater tilgjengeleg beløp', + 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', + 'createBudget' => 'Nytt budsjett', + 'invalid_currency' => 'Dette er ein ugyldig valuta', + 'invalid_amount' => 'Ver venleg og skriv inn eit beløp', + 'set_ab' => 'Det tilgjengelege budsjettbeløpet er satt', + 'updated_ab' => 'Det tilgjengelege budsjettbeløpet har vorte oppdatert', + 'deleted_ab' => 'Det tilgjengelege budsjettbeløpet har vorte sletta', + 'deleted_bl' => 'Det budsjetterte beløpet er fjerna', + 'alt_currency_ab_create' => 'Sett tilgjengeleg budsjett i annan valuta', + 'bl_create_btn' => 'Angi budsjett i annan valuta', + 'inactiveBudgets' => 'Inaktive budsjett', + 'without_budget_between' => 'Transaksjoner uten eit budsjett mellom :start og :end', + 'delete_budget' => 'Slett budsjett ":name"', + 'deleted_budget' => 'Slett budsjett ":name"', + 'edit_budget' => 'Rediger budsjett ":name"', + 'updated_budget' => 'Oppdater budsjett ":name"', + 'update_amount' => 'Oppdater beløp', + 'update_budget' => 'Oppdater budsjett', + 'update_budget_amount_range' => 'Oppdater (forventa) tilgjengeleg beløp mellom :start og :end', + 'set_budget_limit_title' => 'Sett budsjettert beløp for budsjett :budget mellom :start og :end', + 'set_budget_limit' => 'Angi budsjettert beløp', + 'budget_period_navigator' => 'Periodenavigering', + 'info_on_available_amount' => 'Kva har eg tilgjengeleg?', + 'available_amount_indication' => 'Bruk desse beløpa for å få ein indikasjon på kva ditt totale budsjett kan vera.', + 'suggested' => 'Foreslått', + 'average_between' => 'Gjennomsnitt mellom :start og :end', + 'transferred_in' => 'Overført (in)', + 'transferred_away' => 'Overført (vekke)', + 'auto_budget_none' => 'Ingen automatisk budsjett', + 'auto_budget_reset' => 'Angi eit fast beløp kvar periode', + 'auto_budget_rollover' => 'Legg til eit fast beløp kvar periode', + 'auto_budget_adjusted' => 'Legg til eit beløp kvar periode og korriger for overforbruk', + 'auto_budget_period_daily' => 'Dagleg', + 'auto_budget_period_weekly' => 'Ukentlig', + 'auto_budget_period_monthly' => 'Månadleg', + 'auto_budget_period_quarterly' => 'Kvartalsvis', + 'auto_budget_period_half_year' => 'Kvart halvår', + 'auto_budget_period_yearly' => 'Årleg', + 'auto_budget_help' => 'Du kan lesa meir om denne funksjonen under hjelp. Klikk ikonet øvst til høgre (?).', + 'auto_budget_reset_icon' => 'Budsjettet vert fastsatt periodisk', + 'auto_budget_rollover_icon' => 'Budsjettbeløpet vil øke periodisk', + 'auto_budget_adjusted_icon' => 'Budsjettbeløpet vil periodevis auka og korrigerast for overforbruk', + 'remove_budgeted_amount' => 'Fjern budsjettert beløp i :currency', // bills: - 'subscription' => 'Abonnement', - 'not_expected_period' => 'Ikke forventet denne perioden', - 'subscriptions_in_group' => 'Abonnement i gruppa «%{title}»', - 'subscr_expected_x_times' => 'Forvent å betal %{amount} %{times} gonger denne perioden', - 'not_or_not_yet' => 'Ikke (enda)', - 'visit_bill' => 'Sjå rekninga ":name" på Firefly III', - 'match_between_amounts' => 'Rekning passar transaksjonar mellom :low og :high.', - 'running_again_loss' => 'Tidlegare kopla transaksjonar til denne rekninga kan miste koplinga si, om dei (ikkje lengre) stemmer overens med regelen(ane).', - 'bill_related_rules' => 'Regler relatert til denne rekninga', - 'repeats' => 'Gjentas', - 'bill_end_date_help' => 'Valgfritt felt. Rekninga er ventet å vera over på denne datoen.', - 'bill_extension_date_help' => 'Valgfritt felt. Rekninga må utvides (eller annulleres) på eller før denne datoen.', - 'bill_end_index_line' => 'Denne rekninga avsluttes :date', - 'bill_extension_index_line' => 'Denne rekninga må utvides eller kanselleres på :date', - 'connected_journals' => 'Tilknyttede transaksjonar', - 'auto_match_on' => 'Automatisk kopla av Firefly III', - 'auto_match_off' => 'Ikke automatisk kopla av Firefly III', - 'next_expected_match' => 'Neste forventa treff', - 'delete_bill' => 'Slett rekning ":name"', - 'deleted_bill' => 'Sletta rekning ":name"', - 'edit_bill' => 'Rediger rekning ":name"', - 'more' => 'Mer', - 'rescan_old' => 'Kjør reglar igjen, på alle transaksjonar', - 'update_bill' => 'Oppdater rekning', - 'updated_bill' => 'Oppdatert rekning ":name"', - 'store_new_bill' => 'Lagra ny rekning', - 'stored_new_bill' => 'Lagret ny rekning ":name"', - 'cannot_scan_inactive_bill' => 'Inaktive rekningar kan ikkje skannes.', - 'rescanned_bill' => 'Skannet alt på nytt, og kopla :count transaksjon til rekninga |Reskanned alt, og linket :count transaksjon til rekninga.', - 'average_bill_amount_year' => 'Gjennomsnittlig rekningsbeløp (:year)', - 'average_bill_amount_overall' => 'Gjennomsnittlig rekningsbeløp (alt i alt)', - 'bill_is_active' => 'Rekning er aktiv', - 'bill_expected_between' => 'Forventet mellom :start og :end', - 'bill_will_automatch' => 'Rekninga vil automatisk knyttes til samsvarende transaksjonar', - 'skips_over' => 'hopper over', - 'bill_store_error' => 'Det oppsto ein uventa feil medan du lagra den nye rekninga. Ver venleg å sjekk loggfilene', - 'list_inactive_rule' => 'inaktiv regel', - 'bill_edit_rules' => 'Firefly III vil forsøke å redigera regelen òg relatert til denne rekninga. Om du har endra denne regelen sjølv, vil Firefly III ikkje endra noko. Firefly III vil forsøke å redigera reglane for :count òg knytt til denne rekninga. Om du har endra desse reglane sjølv, vil ikkje Firefly III endra noko.', - 'bill_expected_date' => 'Forventet :date', - 'bill_expected_date_js' => 'Forventet {date}', - 'expected_amount' => '(Forventa) beløp', - 'bill_paid_on' => 'Betalt den {date}', - 'bill_repeats_weekly' => 'Gjentas ukentlig', - 'bill_repeats_monthly' => 'Gjentas månadleg', - 'bill_repeats_quarterly' => 'Gjentas kvartalsvis', - 'bill_repeats_half-year' => 'Gjentas kvart halvår', - 'bill_repeats_yearly' => 'Gjentas årleg', - 'bill_repeats_weekly_other' => 'Gjentas annankvar veke', - 'bill_repeats_monthly_other' => 'Gjentas annankvar månad', - 'bill_repeats_quarterly_other' => 'Gjentas annankvar kvartal', - 'bill_repeats_half-year_other' => 'Gjentas årleg', - 'bill_repeats_yearly_other' => 'Gjentas annankvar år', - 'bill_repeats_weekly_skip' => 'Gjentas kvar {skip} veke', - 'bill_repeats_monthly_skip' => 'Gjentas kvar {skip} månad', - 'bill_repeats_quarterly_skip' => 'Gjentas annankvar {skip} kvartal', - 'bill_repeats_half-year_skip' => 'Gjentas kvart {skip} halvår', - 'bill_repeats_yearly_skip' => 'Gjentas kvart {skip} år', - 'subscriptions' => 'Abonnement', - 'go_to_subscriptions' => 'Gå til dine abonnement', - 'forever' => 'For alltid', - 'extension_date_is' => 'Forlengelsesdato er {date}', + 'subscription' => 'Abonnement', + 'not_expected_period' => 'Ikke forventet denne perioden', + 'subscriptions_in_group' => 'Abonnement i gruppa «%{title}»', + 'subscr_expected_x_times' => 'Forvent å betal %{amount} %{times} gonger denne perioden', + 'not_or_not_yet' => 'Ikke (enda)', + 'visit_bill' => 'Sjå rekninga ":name" på Firefly III', + 'match_between_amounts' => 'Rekning passar transaksjonar mellom :low og :high.', + 'running_again_loss' => 'Tidlegare kopla transaksjonar til denne rekninga kan miste koplinga si, om dei (ikkje lengre) stemmer overens med regelen(ane).', + 'bill_related_rules' => 'Regler relatert til denne rekninga', + 'repeats' => 'Gjentas', + 'bill_end_date_help' => 'Valgfritt felt. Rekninga er ventet å vera over på denne datoen.', + 'bill_extension_date_help' => 'Valgfritt felt. Rekninga må utvides (eller annulleres) på eller før denne datoen.', + 'bill_end_index_line' => 'Denne rekninga avsluttes :date', + 'bill_extension_index_line' => 'Denne rekninga må utvides eller kanselleres på :date', + 'connected_journals' => 'Tilknyttede transaksjonar', + 'auto_match_on' => 'Automatisk kopla av Firefly III', + 'auto_match_off' => 'Ikke automatisk kopla av Firefly III', + 'next_expected_match' => 'Neste forventa treff', + 'delete_bill' => 'Slett rekning ":name"', + 'deleted_bill' => 'Sletta rekning ":name"', + 'edit_bill' => 'Rediger rekning ":name"', + 'more' => 'Mer', + 'rescan_old' => 'Kjør reglar igjen, på alle transaksjonar', + 'update_bill' => 'Oppdater rekning', + 'updated_bill' => 'Oppdatert rekning ":name"', + 'store_new_bill' => 'Lagra ny rekning', + 'stored_new_bill' => 'Lagret ny rekning ":name"', + 'cannot_scan_inactive_bill' => 'Inaktive rekningar kan ikkje skannes.', + 'rescanned_bill' => 'Skannet alt på nytt, og kopla :count transaksjon til rekninga |Reskanned alt, og linket :count transaksjon til rekninga.', + 'average_bill_amount_year' => 'Gjennomsnittlig rekningsbeløp (:year)', + 'average_bill_amount_overall' => 'Gjennomsnittlig rekningsbeløp (alt i alt)', + 'bill_is_active' => 'Rekning er aktiv', + 'bill_expected_between' => 'Forventet mellom :start og :end', + 'bill_will_automatch' => 'Rekninga vil automatisk knyttes til samsvarende transaksjonar', + 'skips_over' => 'hopper over', + 'bill_store_error' => 'Det oppsto ein uventa feil medan du lagra den nye rekninga. Ver venleg å sjekk loggfilene', + 'list_inactive_rule' => 'inaktiv regel', + 'bill_edit_rules' => 'Firefly III vil forsøke å redigera regelen òg relatert til denne rekninga. Om du har endra denne regelen sjølv, vil Firefly III ikkje endra noko. Firefly III vil forsøke å redigera reglane for :count òg knytt til denne rekninga. Om du har endra desse reglane sjølv, vil ikkje Firefly III endra noko.', + 'bill_expected_date' => 'Forventet :date', + 'bill_expected_date_js' => 'Forventet {date}', + 'expected_amount' => '(Forventa) beløp', + 'bill_paid_on' => 'Betalt den {date}', + 'bill_repeats_weekly' => 'Gjentas ukentlig', + 'bill_repeats_monthly' => 'Gjentas månadleg', + 'bill_repeats_quarterly' => 'Gjentas kvartalsvis', + 'bill_repeats_half-year' => 'Gjentas kvart halvår', + 'bill_repeats_yearly' => 'Gjentas årleg', + 'bill_repeats_weekly_other' => 'Gjentas annankvar veke', + 'bill_repeats_monthly_other' => 'Gjentas annankvar månad', + 'bill_repeats_quarterly_other' => 'Gjentas annankvar kvartal', + 'bill_repeats_half-year_other' => 'Gjentas årleg', + 'bill_repeats_yearly_other' => 'Gjentas annankvar år', + 'bill_repeats_weekly_skip' => 'Gjentas kvar {skip} veke', + 'bill_repeats_monthly_skip' => 'Gjentas kvar {skip} månad', + 'bill_repeats_quarterly_skip' => 'Gjentas annankvar {skip} kvartal', + 'bill_repeats_half-year_skip' => 'Gjentas kvart {skip} halvår', + 'bill_repeats_yearly_skip' => 'Gjentas kvart {skip} år', + 'subscriptions' => 'Abonnement', + 'go_to_subscriptions' => 'Gå til dine abonnement', + 'forever' => 'For alltid', + 'extension_date_is' => 'Forlengelsesdato er {date}', // accounts: - 'i_am_owed_amount' => 'Jeg er skyldig beløp', - 'i_owe_amount' => 'Jeg skylder beløp', - 'inactive_account_link' => 'Du har :count inaktiv (arkivert) konto, som du kan sjå på denne separate sida. Du har :count inaktive (arkiverte) kontoar som du kan sjå på denne separate sida.', - 'all_accounts_inactive' => 'Dette er dine inaktive kontoar.', - 'active_account_link' => 'Denne lenkja går tilbake til dei aktive kontoane.', - 'account_missing_transaction' => 'Konto #:id (":name") kan ikkje verta vist direkte, Firefly mangler omdirigerings informasjon.', - 'cc_monthly_payment_date_help' => 'Vel eit år og ein månad, det vert ignorert likevel. Berre dagen i måneden er relevant.', - 'details_for_asset' => 'Detaljer for brukskonto ":name"', - 'details_for_expense' => 'Detaljer for utgiftskonto ":name"', - 'details_for_revenue' => 'Detaljer for inntektskonto ":name"', - 'details_for_cash' => 'Detaljer for kontantkonto ":name"', - 'store_new_asset_account' => 'Lagra ny brukskonto', - 'store_new_expense_account' => 'Lagra ny utgiftskonto', - 'store_new_revenue_account' => 'Lagra ny inntektskonto', - 'edit_asset_account' => 'Rediger brukskonto ":name"', - 'edit_expense_account' => 'Rediger utgiftskonto ":name"', - 'edit_revenue_account' => 'Rediger inntektskonto ":name"', - 'delete_asset_account' => 'Slett brukskonto ":name"', - 'delete_expense_account' => 'Slett utgiftskonto ":name"', - 'delete_revenue_account' => 'Slett inntektskonto ":name"', - 'delete_liabilities_account' => 'Slett gjeld ":name"', - 'asset_deleted' => 'Sletting av brukskonto ":name" var vellukka', - 'account_deleted' => 'Sletting av konto ":name" var vellukka', - 'expense_deleted' => 'Sletting av utgiftskonto ":name" var vellukka', - 'revenue_deleted' => 'Sletting av inntekskonto ":name" var vellukka', - 'update_asset_account' => 'Oppdater aktivakonto', - 'update_undefined_account' => 'Oppdater konto', - 'update_liabilities_account' => 'Oppdater gjeld', - 'update_expense_account' => 'Oppdater utgiftskonto', - 'update_revenue_account' => 'Oppdater inntektskonto', - 'make_new_asset_account' => 'Opprett ein ny aktivakonto', - 'make_new_expense_account' => 'Opprett ein ny utgiftskonto', - 'make_new_revenue_account' => 'Opprett ein ny inntektskonto', - 'make_new_liabilities_account' => 'Opprett ny gjeld', - 'asset_accounts' => 'Aktivakontoar', - 'undefined_accounts' => 'Kontoar', - 'asset_accounts_inactive' => 'Aktivakontoar (inaktive)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Utgiftskontoar', - 'expense_accounts_inactive' => 'Utgiftskontoar (inaktive)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Inntektskontoar', - 'revenue_accounts_inactive' => 'Inntektskontoar (inaktive)', - 'cash_accounts' => 'Kontantkontoar', - 'Cash account' => 'Kontantkonto', - 'liabilities_accounts' => 'Gjeldskonto', - 'liabilities_accounts_inactive' => 'Gjeldskonto (inaktive)', - 'reconcile_account' => 'Avstem konto ":account"', - 'overview_of_reconcile_modal' => 'Balanseoversikt', - 'delete_reconciliation' => 'Slett avstemming', - 'update_reconciliation' => 'Oppdater avstemming', - 'amount_cannot_be_zero' => 'Beløpet kan ikkje vera null', - 'end_of_reconcile_period' => 'Slutten av balanse perioden :period', - 'start_of_reconcile_period' => 'Starten av balanse perioden :period', - 'start_balance' => 'Startsaldo', - 'end_balance' => 'Sluttsaldo', - 'update_balance_dates_instruction' => 'Koble beløpa og datoane over til kontoutskrifta, og trykk på "Start avstemning"', - 'select_transactions_instruction' => 'Vel transaksjonane som visast på kontoutskrifta.', - 'select_range_and_balance' => 'Kontroller først datoperiode og saldo. Deretter trykker du på "Start avstemning"', - 'date_change_instruction' => 'Om du endrer datointervallet no, vil du miste all foreløpig framdrift.', - 'update_selection' => 'Oppdater utval', - 'store_reconcile' => 'Lagra avstemming', - 'reconciliation_transaction' => 'Avstemmingstransaksjon', - 'Reconciliation' => 'Avstemming', - 'reconciliation' => 'Avstemming', - 'reconcile_options' => 'Avstemmingsalternativer', - 'reconcile_range' => 'Avstemningsområde', - 'start_reconcile' => 'Start avstemming', - 'cash_account_type' => 'Kontanter', - 'cash' => 'kontanter', - 'cant_find_redirect_account' => 'Firefly III prøvde å omdirigere deg, men kan ikkje. Beklager det. Tilbake til indeksen.', - 'account_type' => 'Kontotype', - 'save_transactions_by_moving' => 'Lagra denne transaksjonen ved å flytte den til ein annan konto:|Lagra desse transaksjonane ved å flytte dei til ein annan konto:', - 'save_transactions_by_moving_js' => 'Ingen transaksjonar|Lagra denne transaksjonen ved å flytte den til ein annan konto. |Lagra desse transaksjonane ved å flytte dei til ein annan konto.', - 'stored_new_account' => 'Ny konto:name: lagra!', - 'stored_new_account_js' => 'Ny konto "{name}" lagra!', - 'updated_account' => 'Oppdatert konto ":name"', - 'updated_account_js' => 'Oppdatert konto "{title}".', - 'credit_card_options' => 'Kredittkortvalg', - 'no_transactions_account' => 'Det eksisterar ingen transaksjonar (i denne perioden) for brukskonto ":name".', - 'no_transactions_period' => 'Det eksisterar ingen transaksjonar (i denne perioden).', - 'no_data_for_chart' => 'Det er ikkje nok informasjon (enda) til å generera dette diagrammet.', - 'select_at_least_one_account' => 'Vel minst ein brukskonto', - 'select_at_least_one_category' => 'Vel minst ein kategori', - 'select_at_least_one_budget' => 'Vel minst eit budsjett', - 'select_at_least_one_tag' => 'Vel minst eit nøkkelord', - 'select_at_least_one_expense' => 'Vel minst ein kombinasjon av utgift/inntekts konto. Om du ikkje har ein (lista er tom) så vil ikkje denne rapporten vera tilgjengeleg.', - 'account_default_currency' => 'Dette vert standard valuta for denne kontoen.', - 'reconcile_has_more' => 'Din Firefly III-hovedbok har meir pengar i seg enn banken hevder du burde ha. Det eksisterar fleire alternativ. Ver venleg å vel kva du skal gjera. Deretter trykker du på "Bekreft avstemming".', - 'reconcile_has_less' => 'Din Firefly III-hovedbok har mindre pengar i seg enn banken hevder du burde ha. Det eksisterar fleire alternativ. Ver venleg å vel kva du skal gjera. Deretter trykker du på "Bekreft avstemming".', - 'reconcile_is_equal' => 'Din Firefly III-hovedbok og dine kontoutskriftar samsvarar. Det er ingenting du treng gjera. Ver venleg å trykk "Bekreft avstemming" for å fortsetja.', - 'create_pos_reconcile_transaction' => 'Fjern dei valde transaksjonene, og opprett ein korrigering som legger til :amount til denne aktivakontoen.', - 'create_neg_reconcile_transaction' => 'Fjern dei valde transaksjonene, og opprett ein korrigering som tek bort :amount frå denne aktivakontoen.', - 'reconcile_do_nothing' => 'Fjern dei valde transaksjonene, men ikkje korriger.', - 'reconcile_go_back' => 'Du kan alltid redigera eller sletta ein korrigering senere.', - 'must_be_asset_account' => 'Du kan berre avstemma aktivakontoar', - 'reconciliation_stored' => 'Avstemming lagra', - 'reconciliation_error' => 'På grunn av ein feil vart transaksjonane markert som avstemt, men korrigeringen har ikkje vorte lagra: :error.', - 'reconciliation_transaction_title' => 'Avstemming (:from til :to)', - 'sum_of_reconciliation' => 'Sum av avstemming', - 'reconcile_this_account' => 'Avstem denne kontoen', - 'reconcile' => 'Avstem', - 'show' => 'Vis', - 'confirm_reconciliation' => 'Bekreft avstemming', - 'submitted_start_balance' => 'Innsendt startsaldo', - 'selected_transactions' => 'Valgte transaksjonar (:count)', - 'already_cleared_transactions' => 'Tidlegare rydda transaksjonar (:count)', - 'submitted_end_balance' => 'Innsendt sluttsaldo', - 'initial_balance_description' => 'Start saldo for ":account"', - 'liability_credit_description' => 'Gjeld på lån ":account"', - 'interest_calc_' => 'ukjent', - 'interest_calc_daily' => 'Per dag', - 'interest_calc_monthly' => 'Per månad', - 'interest_calc_yearly' => 'Per år', - 'interest_calc_weekly' => 'Per veke', - 'interest_calc_half-year' => 'Per halvår', - 'interest_calc_quarterly' => 'Per kvartal', - 'initial_balance_account' => 'Inngående balanse for :account', - 'list_options' => 'Listealternativer', + 'i_am_owed_amount' => 'Jeg er skyldig beløp', + 'i_owe_amount' => 'Jeg skylder beløp', + 'inactive_account_link' => 'Du har :count inaktiv (arkivert) konto, som du kan sjå på denne separate sida. Du har :count inaktive (arkiverte) kontoar som du kan sjå på denne separate sida.', + 'all_accounts_inactive' => 'Dette er dine inaktive kontoar.', + 'active_account_link' => 'Denne lenkja går tilbake til dei aktive kontoane.', + 'account_missing_transaction' => 'Konto #:id (":name") kan ikkje verta vist direkte, Firefly mangler omdirigerings informasjon.', + 'cc_monthly_payment_date_help' => 'Vel eit år og ein månad, det vert ignorert likevel. Berre dagen i måneden er relevant.', + 'details_for_asset' => 'Detaljer for brukskonto ":name"', + 'details_for_expense' => 'Detaljer for utgiftskonto ":name"', + 'details_for_revenue' => 'Detaljer for inntektskonto ":name"', + 'details_for_cash' => 'Detaljer for kontantkonto ":name"', + 'store_new_asset_account' => 'Lagra ny brukskonto', + 'store_new_expense_account' => 'Lagra ny utgiftskonto', + 'store_new_revenue_account' => 'Lagra ny inntektskonto', + 'edit_asset_account' => 'Rediger brukskonto ":name"', + 'edit_expense_account' => 'Rediger utgiftskonto ":name"', + 'edit_revenue_account' => 'Rediger inntektskonto ":name"', + 'delete_asset_account' => 'Slett brukskonto ":name"', + 'delete_expense_account' => 'Slett utgiftskonto ":name"', + 'delete_revenue_account' => 'Slett inntektskonto ":name"', + 'delete_liabilities_account' => 'Slett gjeld ":name"', + 'asset_deleted' => 'Sletting av brukskonto ":name" var vellukka', + 'account_deleted' => 'Sletting av konto ":name" var vellukka', + 'expense_deleted' => 'Sletting av utgiftskonto ":name" var vellukka', + 'revenue_deleted' => 'Sletting av inntekskonto ":name" var vellukka', + 'update_asset_account' => 'Oppdater aktivakonto', + 'update_undefined_account' => 'Oppdater konto', + 'update_liabilities_account' => 'Oppdater gjeld', + 'update_expense_account' => 'Oppdater utgiftskonto', + 'update_revenue_account' => 'Oppdater inntektskonto', + 'make_new_asset_account' => 'Opprett ein ny aktivakonto', + 'make_new_expense_account' => 'Opprett ein ny utgiftskonto', + 'make_new_revenue_account' => 'Opprett ein ny inntektskonto', + 'make_new_liabilities_account' => 'Opprett ny gjeld', + 'asset_accounts' => 'Aktivakontoar', + 'undefined_accounts' => 'Kontoar', + 'asset_accounts_inactive' => 'Aktivakontoar (inaktive)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Utgiftskontoar', + 'expense_accounts_inactive' => 'Utgiftskontoar (inaktive)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Inntektskontoar', + 'revenue_accounts_inactive' => 'Inntektskontoar (inaktive)', + 'cash_accounts' => 'Kontantkontoar', + 'Cash account' => 'Kontantkonto', + 'liabilities_accounts' => 'Gjeldskonto', + 'liabilities_accounts_inactive' => 'Gjeldskonto (inaktive)', + 'reconcile_account' => 'Avstem konto ":account"', + 'overview_of_reconcile_modal' => 'Balanseoversikt', + 'delete_reconciliation' => 'Slett avstemming', + 'update_reconciliation' => 'Oppdater avstemming', + 'amount_cannot_be_zero' => 'Beløpet kan ikkje vera null', + 'end_of_reconcile_period' => 'Slutten av balanse perioden :period', + 'start_of_reconcile_period' => 'Starten av balanse perioden :period', + 'start_balance' => 'Startsaldo', + 'end_balance' => 'Sluttsaldo', + 'update_balance_dates_instruction' => 'Koble beløpa og datoane over til kontoutskrifta, og trykk på "Start avstemning"', + 'select_transactions_instruction' => 'Vel transaksjonane som visast på kontoutskrifta.', + 'select_range_and_balance' => 'Kontroller først datoperiode og saldo. Deretter trykker du på "Start avstemning"', + 'date_change_instruction' => 'Om du endrer datointervallet no, vil du miste all foreløpig framdrift.', + 'update_selection' => 'Oppdater utval', + 'store_reconcile' => 'Lagra avstemming', + 'reconciliation_transaction' => 'Avstemmingstransaksjon', + 'Reconciliation' => 'Avstemming', + 'reconciliation' => 'Avstemming', + 'reconcile_options' => 'Avstemmingsalternativer', + 'reconcile_range' => 'Avstemningsområde', + 'start_reconcile' => 'Start avstemming', + 'cash_account_type' => 'Kontanter', + 'cash' => 'kontanter', + 'cant_find_redirect_account' => 'Firefly III prøvde å omdirigere deg, men kan ikkje. Beklager det. Tilbake til indeksen.', + 'account_type' => 'Kontotype', + 'save_transactions_by_moving' => 'Lagra denne transaksjonen ved å flytte den til ein annan konto:|Lagra desse transaksjonane ved å flytte dei til ein annan konto:', + 'save_transactions_by_moving_js' => 'Ingen transaksjonar|Lagra denne transaksjonen ved å flytte den til ein annan konto. |Lagra desse transaksjonane ved å flytte dei til ein annan konto.', + 'stored_new_account' => 'Ny konto:name: lagra!', + 'stored_new_account_js' => 'Ny konto "{name}" lagra!', + 'updated_account' => 'Oppdatert konto ":name"', + 'updated_account_js' => 'Oppdatert konto "{title}".', + 'credit_card_options' => 'Kredittkortvalg', + 'no_transactions_account' => 'Det eksisterar ingen transaksjonar (i denne perioden) for brukskonto ":name".', + 'no_transactions_period' => 'Det eksisterar ingen transaksjonar (i denne perioden).', + 'no_data_for_chart' => 'Det er ikkje nok informasjon (enda) til å generera dette diagrammet.', + 'select_at_least_one_account' => 'Vel minst ein brukskonto', + 'select_at_least_one_category' => 'Vel minst ein kategori', + 'select_at_least_one_budget' => 'Vel minst eit budsjett', + 'select_at_least_one_tag' => 'Vel minst eit nøkkelord', + 'select_at_least_one_expense' => 'Vel minst ein kombinasjon av utgift/inntekts konto. Om du ikkje har ein (lista er tom) så vil ikkje denne rapporten vera tilgjengeleg.', + 'account_default_currency' => 'Dette vert standard valuta for denne kontoen.', + 'reconcile_has_more' => 'Din Firefly III-hovedbok har meir pengar i seg enn banken hevder du burde ha. Det eksisterar fleire alternativ. Ver venleg å vel kva du skal gjera. Deretter trykker du på "Bekreft avstemming".', + 'reconcile_has_less' => 'Din Firefly III-hovedbok har mindre pengar i seg enn banken hevder du burde ha. Det eksisterar fleire alternativ. Ver venleg å vel kva du skal gjera. Deretter trykker du på "Bekreft avstemming".', + 'reconcile_is_equal' => 'Din Firefly III-hovedbok og dine kontoutskriftar samsvarar. Det er ingenting du treng gjera. Ver venleg å trykk "Bekreft avstemming" for å fortsetja.', + 'create_pos_reconcile_transaction' => 'Fjern dei valde transaksjonene, og opprett ein korrigering som legger til :amount til denne aktivakontoen.', + 'create_neg_reconcile_transaction' => 'Fjern dei valde transaksjonene, og opprett ein korrigering som tek bort :amount frå denne aktivakontoen.', + 'reconcile_do_nothing' => 'Fjern dei valde transaksjonene, men ikkje korriger.', + 'reconcile_go_back' => 'Du kan alltid redigera eller sletta ein korrigering senere.', + 'must_be_asset_account' => 'Du kan berre avstemma aktivakontoar', + 'reconciliation_stored' => 'Avstemming lagra', + 'reconciliation_error' => 'På grunn av ein feil vart transaksjonane markert som avstemt, men korrigeringen har ikkje vorte lagra: :error.', + 'reconciliation_transaction_title' => 'Avstemming (:from til :to)', + 'sum_of_reconciliation' => 'Sum av avstemming', + 'reconcile_this_account' => 'Avstem denne kontoen', + 'reconcile' => 'Avstem', + 'show' => 'Vis', + 'confirm_reconciliation' => 'Bekreft avstemming', + 'submitted_start_balance' => 'Innsendt startsaldo', + 'selected_transactions' => 'Valgte transaksjonar (:count)', + 'already_cleared_transactions' => 'Tidlegare rydda transaksjonar (:count)', + 'submitted_end_balance' => 'Innsendt sluttsaldo', + 'initial_balance_description' => 'Start saldo for ":account"', + 'liability_credit_description' => 'Gjeld på lån ":account"', + 'interest_calc_' => 'ukjent', + 'interest_calc_daily' => 'Per dag', + 'interest_calc_monthly' => 'Per månad', + 'interest_calc_yearly' => 'Per år', + 'interest_calc_weekly' => 'Per veke', + 'interest_calc_half-year' => 'Per halvår', + 'interest_calc_quarterly' => 'Per kvartal', + 'initial_balance_account' => 'Inngående balanse for :account', + 'list_options' => 'Listealternativer', // categories: - 'new_category' => 'Ny kategori', - 'create_new_category' => 'Opprett ein ny kategori', - 'without_category' => 'Uten kategori', - 'update_category' => 'Oppdater kategori', - 'updated_category' => 'Oppdatert kategori ":name"', - 'categories' => 'Kategorier', - 'edit_category' => 'Rediger kategori ":name"', - 'no_category' => '(ingen kategori)', - 'unknown_category_plain' => 'No category', - 'category' => 'Kategori', - 'delete_category' => 'Slett kategori ":name"', - 'deleted_category' => 'Sletta kategori ":name"', - 'store_category' => 'Lagra ny kategori', - 'stored_category' => 'Lagret ny kategori ":name"', - 'without_category_between' => 'Uten kategori mellom :start og :end', + 'new_category' => 'Ny kategori', + 'create_new_category' => 'Opprett ein ny kategori', + 'without_category' => 'Uten kategori', + 'update_category' => 'Oppdater kategori', + 'updated_category' => 'Oppdatert kategori ":name"', + 'categories' => 'Kategorier', + 'edit_category' => 'Rediger kategori ":name"', + 'no_category' => '(ingen kategori)', + 'unknown_category_plain' => 'No category', + 'category' => 'Kategori', + 'delete_category' => 'Slett kategori ":name"', + 'deleted_category' => 'Sletta kategori ":name"', + 'store_category' => 'Lagra ny kategori', + 'stored_category' => 'Lagret ny kategori ":name"', + 'without_category_between' => 'Uten kategori mellom :start og :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Oppdater uttak', - 'update_deposit' => 'Oppdater innskot', - 'update_transaction' => 'Oppdater transaksjonen', - 'update_transfer' => 'Oppdater overføring', - 'updated_withdrawal' => 'Oppdatert uttak ":description"', - 'updated_deposit' => 'Oppdatert innskot ":description"', - 'updated_transfer' => 'Oppdatert overføring ":description"', - 'no_changes_withdrawal' => 'Uttak ":description" vart ikkje endra.', - 'no_changes_deposit' => 'Innskudd ":description" vart ikkje endra.', - 'no_changes_transfer' => 'Overføring ":description" vart ikkje endra.', - 'delete_withdrawal' => 'Slett uttak ":description"', - 'delete_deposit' => 'Slett innskot ":description"', - 'delete_transfer' => 'Slett overføring ":description"', - 'deleted_withdrawal' => 'Sletta uttak ":description"', - 'deleted_deposit' => 'Sletta innskot ":description"', - 'deleted_transfer' => 'Sletta overføring ":description"', - 'deleted_reconciliation' => 'Sletta avstemmingstransaksjon ":description"', - 'stored_journal' => 'Opprettet ny transaksjon ":description"', - 'stored_journal_no_descr' => 'Vellykket! Ny transaksjon er opprettet', - 'updated_journal_no_descr' => 'Transaksjonen din vart oppdatert', - 'select_transactions' => 'Vel transaksjonar', - 'rule_group_select_transactions' => 'Påfør ":title" på transaksjonene', - 'rule_select_transactions' => 'Påfør ":title" på transaksjonene', - 'stop_selection' => 'Stop val av transaksjonar', - 'reconcile_selected' => 'Avstem', - 'mass_delete_journals' => 'Slett fleire transaksjonar', - 'mass_edit_journals' => 'Rediger fleire transaksjonar', - 'mass_bulk_journals' => 'Rediger fleire transaksjonar samtidig', - 'mass_bulk_journals_explain' => 'Dette skjemaet lar deg endra eigenskapar for transaksjonane nedanfor i ei oppdatering. Alle transaksjonane i tabellen vil verta oppdatert når du endrer parametrane du ser her.', - 'part_of_split' => 'Denne transaksjonen er ein del av ein delt transaksjon. Om du ikkje har valt alle delane, kan du enda opp med å endra berre halvparten av transaksjonen.', - 'bulk_set_new_values' => 'Bruk innstillingane nedanfor for å angi nye verdiar. Om du lar dei stå tomme, vert dei verande tomme. Vær òg oppmerksom på at kun uttak vil verta gitt eit budsjett.', - 'no_bulk_category' => 'Ikke oppdater kategori', - 'no_bulk_budget' => 'Ikke oppdater budsjett', - 'no_bulk_tags' => 'Ikkje oppdater nøkkelord', - 'replace_with_these_tags' => 'Erstatt med desse nøkkelorda', - 'append_these_tags' => 'Legg til desse nøkkelorda', - 'mass_edit' => 'Rediger individuelt valde', - 'bulk_edit' => 'Rediger valde i bulk', - 'mass_delete' => 'Slett valde', - 'cannot_edit_other_fields' => 'Du kan ikkje masseredigere andre felt enn dei som er her, fordi det er ikkje plass til å vise dem. Ver venleg å følg linken og rediger desse ein om gongen om du må redigera desse felta.', - 'cannot_change_amount_reconciled' => 'Du kan ikkje endra antal avstemte transaksjonar.', - 'no_budget' => '(ingen budsjett)', - 'no_bill' => '(ingen rekning)', - 'account_per_budget' => 'Konto per budsjett', - 'account_per_category' => 'Konto per kategori', - 'create_new_object' => 'Opprett', - 'empty' => '(tom)', - 'all_other_budgets' => '(alle andre budsjett)', - 'all_other_accounts' => '(alle andre kontoar)', - 'expense_per_source_account' => 'Expenses per source account', - 'expense_per_destination_account' => 'Expenses per destination account', - 'income_per_destination_account' => 'Income per destination account', - 'spent_in_specific_category' => 'Brukt i kategori «:category»', - 'earned_in_specific_category' => 'Opptjent i kategori ":category"', - 'spent_in_specific_tag' => 'Brukt i nøkkelordet «:tag»', - 'earned_in_specific_tag' => 'Opptjent i nøkkelordet «:tag»', - 'income_per_source_account' => 'Inntekter per kildekonto', - 'average_spending_per_destination' => 'Gjennomsnittlig utgift per målkonto', - 'average_spending_per_source' => 'Gjennomsnittlig utgift per kildekonto', - 'average_earning_per_source' => 'Gjennomsnittlig opptjente per kildekonto', - 'average_earning_per_destination' => 'Gjennomsnittlig opptjente per målkonto', - 'account_per_tag' => 'Konto per nøkkelord', - 'tag_report_expenses_listed_once' => 'Utgifter og inntekter vert aldri vist to ganger. Dersom ein transaksjon har fleire nøkkelord, vil han kun bli vist under eit av nøkkelorda sine. Denne lista kan sjå ut til å mangla data, men beløpa vil være korrekte.', - 'double_report_expenses_charted_once' => 'Utgifter og inntekter vert aldri vist to ganger. Dersom ein transaksjon har fleire nøkkelord, vil han kun bli vist under eit av nøkkelorda sine. Dette diagrammet kan sjå ut til å mangla data, men beløpa vil være korrekte.', - 'tag_report_chart_single_tag' => 'Diagrammet gjeld eit enkelt nøkkelord. Hvis ein transaksjon har fleire nøkkelord, vil det du ser her bli reflektert i diagram for andre nøkkelord i tillegg.', - 'tag' => 'Nøkkelord', - 'no_budget_squared' => '(ingen budsjett)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(ingen kontotype)', - 'opt_group_no_account_type' => '(ingen kontotype)', - 'opt_group_defaultAsset' => 'Standard aktivakontoar', - 'opt_group_savingAsset' => 'Sparekontoar', - 'opt_group_sharedAsset' => 'Delte aktivakontoar', - 'opt_group_ccAsset' => 'Kredittkort', - 'opt_group_cashWalletAsset' => 'Kontant lommebok', - 'opt_group_expense_account' => 'Utgiftskontoar', - 'opt_group_revenue_account' => 'Inntektskontoar', - 'opt_group_l_Loan' => 'Gjeld: Lån', - 'opt_group_cash_account' => 'Kontantkonto', - 'opt_group_l_Debt' => 'Gjeld: Gjeld', - 'opt_group_l_Mortgage' => 'Gjeld: Huslån', - 'opt_group_l_Credit card' => 'Gjeld: Kredittkort', - 'notes' => 'Notat', - 'unknown_journal_error' => 'Kunne ikkje lagra transaksjonen. Ver venleg å sjekk loggfilene.', - 'attachment_not_found' => 'Finner ikkje dette vedlegget.', - 'journal_link_bill' => 'Denne transaksjonen er knytt til rekning :name. Om du vil fjerna knytningen, fjerner du avmerkingen. Bruka reglar for å koble den til ein annan rekning.', - 'transaction_stored_link' => 'Transaksjon #{ID} ("{title}") har vorte lagra.', - 'transaction_new_stored_link' => 'Transaksjon #{ID} har vorte lagra.', - 'transaction_updated_link' => 'Transaksjon #{ID} ("{title}") har vorte oppdatert.', - 'transaction_updated_no_changes' => 'Transaksjon #{ID} ("{title}") fekk ingen endringar.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Brukt {amount} av {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Oppdater uttak', + 'update_deposit' => 'Oppdater innskot', + 'update_transaction' => 'Oppdater transaksjonen', + 'update_transfer' => 'Oppdater overføring', + 'updated_withdrawal' => 'Oppdatert uttak ":description"', + 'updated_deposit' => 'Oppdatert innskot ":description"', + 'updated_transfer' => 'Oppdatert overføring ":description"', + 'no_changes_withdrawal' => 'Uttak ":description" vart ikkje endra.', + 'no_changes_deposit' => 'Innskudd ":description" vart ikkje endra.', + 'no_changes_transfer' => 'Overføring ":description" vart ikkje endra.', + 'delete_withdrawal' => 'Slett uttak ":description"', + 'delete_deposit' => 'Slett innskot ":description"', + 'delete_transfer' => 'Slett overføring ":description"', + 'deleted_withdrawal' => 'Sletta uttak ":description"', + 'deleted_deposit' => 'Sletta innskot ":description"', + 'deleted_transfer' => 'Sletta overføring ":description"', + 'deleted_reconciliation' => 'Sletta avstemmingstransaksjon ":description"', + 'stored_journal' => 'Opprettet ny transaksjon ":description"', + 'stored_journal_js' => 'Transaksjonen «%{description}» vart oppretta', + 'stored_journal_no_descr' => 'Vellykket! Ny transaksjon er opprettet', + 'updated_journal_no_descr' => 'Transaksjonen din vart oppdatert', + 'select_transactions' => 'Vel transaksjonar', + 'rule_group_select_transactions' => 'Påfør ":title" på transaksjonene', + 'rule_select_transactions' => 'Påfør ":title" på transaksjonene', + 'stop_selection' => 'Stop val av transaksjonar', + 'reconcile_selected' => 'Avstem', + 'mass_delete_journals' => 'Slett fleire transaksjonar', + 'mass_edit_journals' => 'Rediger fleire transaksjonar', + 'mass_bulk_journals' => 'Rediger fleire transaksjonar samtidig', + 'mass_bulk_journals_explain' => 'Dette skjemaet lar deg endra eigenskapar for transaksjonane nedanfor i ei oppdatering. Alle transaksjonane i tabellen vil verta oppdatert når du endrer parametrane du ser her.', + 'part_of_split' => 'Denne transaksjonen er ein del av ein delt transaksjon. Om du ikkje har valt alle delane, kan du enda opp med å endra berre halvparten av transaksjonen.', + 'bulk_set_new_values' => 'Bruk innstillingane nedanfor for å angi nye verdiar. Om du lar dei stå tomme, vert dei verande tomme. Vær òg oppmerksom på at kun uttak vil verta gitt eit budsjett.', + 'no_bulk_category' => 'Ikke oppdater kategori', + 'no_bulk_budget' => 'Ikke oppdater budsjett', + 'no_bulk_tags' => 'Ikkje oppdater nøkkelord', + 'replace_with_these_tags' => 'Erstatt med desse nøkkelorda', + 'append_these_tags' => 'Legg til desse nøkkelorda', + 'mass_edit' => 'Rediger individuelt valde', + 'bulk_edit' => 'Rediger valde i bulk', + 'mass_delete' => 'Slett valde', + 'cannot_edit_other_fields' => 'Du kan ikkje masseredigere andre felt enn dei som er her, fordi det er ikkje plass til å vise dem. Ver venleg å følg linken og rediger desse ein om gongen om du må redigera desse felta.', + 'cannot_change_amount_reconciled' => 'Du kan ikkje endra antal avstemte transaksjonar.', + 'no_budget' => '(ingen budsjett)', + 'no_bill' => '(ingen rekning)', + 'account_per_budget' => 'Konto per budsjett', + 'account_per_category' => 'Konto per kategori', + 'create_new_object' => 'Opprett', + 'empty' => '(tom)', + 'all_other_budgets' => '(alle andre budsjett)', + 'all_other_accounts' => '(alle andre kontoar)', + 'expense_per_source_account' => 'Expenses per source account', + 'expense_per_destination_account' => 'Expenses per destination account', + 'income_per_destination_account' => 'Income per destination account', + 'spent_in_specific_category' => 'Brukt i kategori «:category»', + 'earned_in_specific_category' => 'Opptjent i kategori ":category"', + 'spent_in_specific_tag' => 'Brukt i nøkkelordet «:tag»', + 'earned_in_specific_tag' => 'Opptjent i nøkkelordet «:tag»', + 'income_per_source_account' => 'Inntekter per kildekonto', + 'average_spending_per_destination' => 'Gjennomsnittlig utgift per målkonto', + 'average_spending_per_source' => 'Gjennomsnittlig utgift per kildekonto', + 'average_earning_per_source' => 'Gjennomsnittlig opptjente per kildekonto', + 'average_earning_per_destination' => 'Gjennomsnittlig opptjente per målkonto', + 'account_per_tag' => 'Konto per nøkkelord', + 'tag_report_expenses_listed_once' => 'Utgifter og inntekter vert aldri vist to ganger. Dersom ein transaksjon har fleire nøkkelord, vil han kun bli vist under eit av nøkkelorda sine. Denne lista kan sjå ut til å mangla data, men beløpa vil være korrekte.', + 'double_report_expenses_charted_once' => 'Utgifter og inntekter vert aldri vist to ganger. Dersom ein transaksjon har fleire nøkkelord, vil han kun bli vist under eit av nøkkelorda sine. Dette diagrammet kan sjå ut til å mangla data, men beløpa vil være korrekte.', + 'tag_report_chart_single_tag' => 'Diagrammet gjeld eit enkelt nøkkelord. Hvis ein transaksjon har fleire nøkkelord, vil det du ser her bli reflektert i diagram for andre nøkkelord i tillegg.', + 'tag' => 'Nøkkelord', + 'no_budget_squared' => '(ingen budsjett)', + 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', + 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', + 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', + 'opt_group_' => '(ingen kontotype)', + 'opt_group_no_account_type' => '(ingen kontotype)', + 'opt_group_defaultAsset' => 'Standard aktivakontoar', + 'opt_group_savingAsset' => 'Sparekontoar', + 'opt_group_sharedAsset' => 'Delte aktivakontoar', + 'opt_group_ccAsset' => 'Kredittkort', + 'opt_group_cashWalletAsset' => 'Kontant lommebok', + 'opt_group_expense_account' => 'Utgiftskontoar', + 'opt_group_revenue_account' => 'Inntektskontoar', + 'opt_group_l_Loan' => 'Gjeld: Lån', + 'opt_group_cash_account' => 'Kontantkonto', + 'opt_group_l_Debt' => 'Gjeld: Gjeld', + 'opt_group_l_Mortgage' => 'Gjeld: Huslån', + 'opt_group_l_Credit card' => 'Gjeld: Kredittkort', + 'notes' => 'Notat', + 'unknown_journal_error' => 'Kunne ikkje lagra transaksjonen. Ver venleg å sjekk loggfilene.', + 'attachment_not_found' => 'Finner ikkje dette vedlegget.', + 'journal_link_bill' => 'Denne transaksjonen er knytt til rekning :name. Om du vil fjerna knytningen, fjerner du avmerkingen. Bruka reglar for å koble den til ein annan rekning.', + 'transaction_stored_link' => 'Transaksjon #{ID} ("{title}") har vorte lagra.', + 'transaction_new_stored_link' => 'Transaksjon #{ID} har vorte lagra.', + 'transaction_updated_link' => 'Transaksjon #{ID} ("{title}") har vorte oppdatert.', + 'transaction_updated_no_changes' => 'Transaksjon #{ID} ("{title}") fekk ingen endringar.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Brukt {amount} av {total}', // new user: - 'welcome' => 'Velkomen til Firefly III!', - 'submit' => 'Send inn', - 'submission' => 'Submission', - 'submit_yes_really' => 'Registrer (Jeg veit kva eg gjer)', - 'getting_started' => 'Kom igang', - 'to_get_started' => 'Det er godt å sjå at du har installert Firefly III. Ver venleg å skriv inn bankens namn og saldo på hovedkontoen din for å komma i gang. Du treng Ikke bekymra deg om du har fleire kontoar. Du kan legga dei til seinare. Dette her er berre for at Firefly III skal få noko data å starta med.', - 'savings_balance_text' => 'Firefly III vil automatisk oppretta ein sparekonto for deg. Som standard vil det ikkje vera pengar på sparekontoen din, men om du oppgir saldoen din til Firefly III så vert den lagt inn for deg.', - 'finish_up_new_user' => 'Det var alt! Du kan fortsetja ved å trykke Send. Deretter vil du verta tatt til startskjermen til Firefly III.', - 'stored_new_accounts_new_user' => 'Jippi! Dei nye kontoane dine vart lagra.', - 'set_preferred_language' => 'Om du føretrekk å bruka Firefly III med eit anna språk, ver venleg å indiker det her.', - 'language' => 'Språk', - 'new_savings_account' => ':bank_name sparekonto', - 'cash_wallet' => 'Kontanter lommebok', - 'currency_not_present' => 'Om valutaen du vanligvis brukar ikkje er i lista, fortvil ikkje. Du kan oppretta din eigen valuta under Alternativer > valuta.', + 'welcome' => 'Velkomen til Firefly III!', + 'submit' => 'Send inn', + 'submission' => 'Submission', + 'submit_yes_really' => 'Registrer (Jeg veit kva eg gjer)', + 'getting_started' => 'Kom igang', + 'to_get_started' => 'Det er godt å sjå at du har installert Firefly III. Ver venleg å skriv inn bankens namn og saldo på hovedkontoen din for å komma i gang. Du treng Ikke bekymra deg om du har fleire kontoar. Du kan legga dei til seinare. Dette her er berre for at Firefly III skal få noko data å starta med.', + 'savings_balance_text' => 'Firefly III vil automatisk oppretta ein sparekonto for deg. Som standard vil det ikkje vera pengar på sparekontoen din, men om du oppgir saldoen din til Firefly III så vert den lagt inn for deg.', + 'finish_up_new_user' => 'Det var alt! Du kan fortsetja ved å trykke Send. Deretter vil du verta tatt til startskjermen til Firefly III.', + 'stored_new_accounts_new_user' => 'Jippi! Dei nye kontoane dine vart lagra.', + 'set_preferred_language' => 'Om du føretrekk å bruka Firefly III med eit anna språk, ver venleg å indiker det her.', + 'language' => 'Språk', + 'new_savings_account' => ':bank_name sparekonto', + 'cash_wallet' => 'Kontanter lommebok', + 'currency_not_present' => 'Om valutaen du vanligvis brukar ikkje er i lista, fortvil ikkje. Du kan oppretta din eigen valuta under Alternativer > valuta.', // home page: - 'transaction_table_description' => 'Ein tabell som inneheld transaksjonane dine', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => 'Dine kontoar', - 'your_accounts' => 'Din konto oversikt', - 'category_overview' => 'Kategori oversikt', - 'expense_overview' => 'Utgiftskonto oversikt', - 'revenue_overview' => 'Inntektskonto oversikt', - 'budgetsAndSpending' => 'Budsjett og forbruk', - 'budgets_and_spending' => 'Budsjett og forbruk', - 'go_to_budget' => 'Gå til budsjett "{budget}"', - 'go_to_deposits' => 'Gå til innskot', - 'go_to_expenses' => 'Gå til utgifter', - 'savings' => 'Oppspart', - 'newWithdrawal' => 'Ny utgift', - 'newDeposit' => 'Nytt innskot', - 'newTransfer' => 'Ny overføring', - 'bills_to_pay' => 'Rekningar å betala', - 'per_day' => 'Per dag', - 'left_to_spend_per_day' => 'Att å bruka per dag', - 'bills_paid' => 'Rekningar betalt', - 'custom_period' => 'Tilpassa periode', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Vel periode', + 'transaction_table_description' => 'Ein tabell som inneheld transaksjonane dine', + 'opposing_account' => 'Opposing account', + 'yourAccounts' => 'Dine kontoar', + 'your_accounts' => 'Din konto oversikt', + 'category_overview' => 'Kategori oversikt', + 'expense_overview' => 'Utgiftskonto oversikt', + 'revenue_overview' => 'Inntektskonto oversikt', + 'budgetsAndSpending' => 'Budsjett og forbruk', + 'budgets_and_spending' => 'Budsjett og forbruk', + 'go_to_budget' => 'Gå til budsjett "{budget}"', + 'go_to_deposits' => 'Gå til innskot', + 'go_to_expenses' => 'Gå til utgifter', + 'savings' => 'Oppspart', + 'newWithdrawal' => 'Ny utgift', + 'newDeposit' => 'Nytt innskot', + 'newTransfer' => 'Ny overføring', + 'bills_to_pay' => 'Rekningar å betala', + 'per_day' => 'Per dag', + 'left_to_spend_per_day' => 'Att å bruka per dag', + 'bills_paid' => 'Rekningar betalt', + 'custom_period' => 'Tilpassa periode', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Vel periode', // menu and titles, should be recycled as often as possible: - 'currency' => 'Valuta', - 'preferences' => 'Innstillinger', - 'logout' => 'Logg ut', - 'logout_other_sessions' => 'Logg ut alle andre økter', - 'toggleNavigation' => 'Vis/Skjul navigation', - 'searchPlaceholder' => 'Søk...', - 'version' => 'Versjon', - 'dashboard' => 'Startskjerm', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Tilgjengelege budsjett ({currency})', - 'currencies' => 'Valutaer', - 'activity' => 'Aktivitet', - 'usage' => 'Bruk', - 'accounts' => 'Kontoar', - 'Asset account' => 'Aktivakonto', - 'Default account' => 'Aktivakonto', - 'Expense account' => 'Utgiftskonto', - 'Revenue account' => 'Inntektskonto', - 'Initial balance account' => 'Startsaldokonto', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Gjeld', - 'account_type_Loan' => 'Lån', - 'account_type_Mortgage' => 'Boliglån', - 'account_type_debt' => 'Gjeld', - 'account_type_loan' => 'Lån', - 'account_type_mortgage' => 'Boliglån', - 'account_type_Credit card' => 'Kredittkort', - 'credit_card_type_monthlyFull' => 'Full betaling kvar månad', - 'liability_direction_credit' => 'Jeg skylder denne gjelda', - 'liability_direction_debit' => 'Jeg skylder denne gjelda til ein annan', - 'liability_direction_credit_short' => 'Jeg skuldet denne gjelda', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Ukjent', - 'liability_direction_null_short' => 'Ukjent', - 'Liability credit' => 'Lån kreditt', - 'budgets' => 'Budsjett', - 'tags' => 'Nøkkelord', - 'reports' => 'Rapportar', - 'transactions' => 'Transaksjoner', - 'expenses' => 'Utgifter', - 'income' => 'Inntekt', - 'transfers' => 'Overføringer', - 'moneyManagement' => 'Pengestyring', - 'money_management' => 'Pengestyring', - 'tools' => 'Verktøy', - 'piggyBanks' => 'Sparegriser', - 'piggy_banks' => 'Sparegriser', - 'amount_x_of_y' => '{current} av {total}', - 'bills' => 'Rekningar', - 'withdrawal' => 'Uttak', - 'opening_balance' => 'Startsaldo', - 'deposit' => 'Innskudd', - 'account' => 'Konto', - 'transfer' => 'Overføring', - 'Withdrawal' => 'Uttak', - 'Deposit' => 'Innskudd', - 'Transfer' => 'Overføring', - 'bill' => 'Rekning', - 'yes' => 'Ja', - 'no' => 'Nei', - 'amount' => 'Beløp', - 'overview' => 'Oversikt', - 'saveOnAccount' => 'Spar på konto', - 'unknown' => 'Ukjent', - 'monthly' => 'Månadleg', - 'profile' => 'Profil', - 'errors' => 'Feil', - 'debt_start_date' => 'Startdato for gjeld', - 'debt_start_amount' => 'Start beløp for gjeld', - 'debt_start_amount_help' => 'Det er alltid best å definera denne verdien til eit negativt beløp. Les hjelpesidene (topp til høgre (?)-ikonet) for meir informasjon.', - 'interest_period_help' => 'Dette feltet er rent kosmetisk og vil ikkje verta berekna for deg. Sidan det visar seg at bankane er svært sneaky så Firefly III aldri får det rett.', - 'store_new_liabilities_account' => 'Lagra ny gjeld', - 'edit_liabilities_account' => 'Rediger gjeld ":name"', - 'financial_control' => 'Financial control', - 'accounting' => 'Rekneskap', - 'automation' => 'Automatisering', - 'others' => 'Andre', - 'classification' => 'Klassifisering', - 'store_transaction' => 'Lagra transaksjon', + 'currency' => 'Valuta', + 'preferences' => 'Innstillinger', + 'logout' => 'Logg ut', + 'logout_other_sessions' => 'Logg ut alle andre økter', + 'toggleNavigation' => 'Vis/Skjul navigation', + 'searchPlaceholder' => 'Søk...', + 'version' => 'Versjon', + 'dashboard' => 'Startskjerm', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Tilgjengelege budsjett ({currency})', + 'currencies' => 'Valutaer', + 'activity' => 'Aktivitet', + 'usage' => 'Bruk', + 'accounts' => 'Kontoar', + 'Asset account' => 'Aktivakonto', + 'Default account' => 'Aktivakonto', + 'Expense account' => 'Utgiftskonto', + 'Revenue account' => 'Inntektskonto', + 'Initial balance account' => 'Startsaldokonto', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Gjeld', + 'account_type_Loan' => 'Lån', + 'account_type_Mortgage' => 'Boliglån', + 'account_type_debt' => 'Gjeld', + 'account_type_loan' => 'Lån', + 'account_type_mortgage' => 'Boliglån', + 'account_type_Credit card' => 'Kredittkort', + 'credit_card_type_monthlyFull' => 'Full betaling kvar månad', + 'liability_direction_credit' => 'Jeg skylder denne gjelda', + 'liability_direction_debit' => 'Jeg skylder denne gjelda til ein annan', + 'liability_direction_credit_short' => 'Jeg skuldet denne gjelda', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Ukjent', + 'liability_direction_null_short' => 'Ukjent', + 'Liability credit' => 'Lån kreditt', + 'budgets' => 'Budsjett', + 'tags' => 'Nøkkelord', + 'reports' => 'Rapportar', + 'transactions' => 'Transaksjoner', + 'expenses' => 'Utgifter', + 'income' => 'Inntekt', + 'transfers' => 'Overføringer', + 'moneyManagement' => 'Pengestyring', + 'money_management' => 'Pengestyring', + 'tools' => 'Verktøy', + 'piggyBanks' => 'Sparegrisar', + 'piggy_banks' => 'Sparegriser', + 'amount_x_of_y' => '{current} av {total}', + 'bills' => 'Rekningar', + 'withdrawal' => 'Uttak', + 'opening_balance' => 'Startsaldo', + 'deposit' => 'Innskudd', + 'account' => 'Konto', + 'transfer' => 'Overføring', + 'Withdrawal' => 'Uttak', + 'Deposit' => 'Innskudd', + 'Transfer' => 'Overføring', + 'bill' => 'Rekning', + 'yes' => 'Ja', + 'no' => 'Nei', + 'amount' => 'Beløp', + 'overview' => 'Oversikt', + 'saveOnAccount' => 'Spar på konto', + 'unknown' => 'Ukjent', + 'monthly' => 'Månadleg', + 'profile' => 'Profil', + 'errors' => 'Feil', + 'debt_start_date' => 'Startdato for gjeld', + 'debt_start_amount' => 'Start beløp for gjeld', + 'debt_start_amount_help' => 'Det er alltid best å definera denne verdien til eit negativt beløp. Les hjelpesidene (topp til høgre (?)-ikonet) for meir informasjon.', + 'interest_period_help' => 'Dette feltet er rent kosmetisk og vil ikkje verta berekna for deg. Sidan det visar seg at bankane er svært sneaky så Firefly III aldri får det rett.', + 'store_new_liabilities_account' => 'Lagra ny gjeld', + 'edit_liabilities_account' => 'Rediger gjeld ":name"', + 'financial_control' => 'Financial control', + 'accounting' => 'Rekneskap', + 'automation' => 'Automatisering', + 'others' => 'Andre', + 'classification' => 'Klassifisering', + 'store_transaction' => 'Lagra transaksjon', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Standard finansiell rapport mellom :start og :end', - 'report_audit' => 'Transaksjonshistorikk og oversikt mellom :start og :end', - 'report_category' => 'Kategori rapport mellom :start og :end', - 'report_double' => 'Utgift/Inntekt kontorapport mellom :start og :end', - 'report_budget' => 'Budsjettrapport mellom :start og :end', - 'report_tag' => 'Nøkkelordrapport mellom :start og :end', - 'quick_link_reports' => 'Hurtiglenkjer', - 'quick_link_examples' => 'Dette er berre nokon eksempel linker for å komma i gang. Sjekk ut hjelpesidene under (?) -knappen for informasjon om alle rapportar og dei magiske orda som du kan bruka.', - 'quick_link_default_report' => 'Standard finansiell rapport', - 'quick_link_audit_report' => 'Oversikt over transaksjonshistorikk', - 'report_this_month_quick' => 'Inneverande månad, alle kontoar', - 'report_last_month_quick' => 'Forrige månad, alle kontoar', - 'report_this_year_quick' => 'Inneverande år, alle kontoar', - 'report_this_fiscal_year_quick' => 'Inneverande rekneskapsår, alle kontoar', - 'report_all_time_quick' => 'Frå tidenes morgon, alle kontoar', - 'reports_can_bookmark' => 'Husk at rapportar kan bokmerkast.', - 'incomeVsExpenses' => 'Inntekter vs. utgifter', - 'accountBalances' => 'Saldo', - 'balanceStart' => 'Saldo ved starten av periode', - 'balanceEnd' => 'Saldo ved utgongen av perioden', - 'splitByAccount' => 'Del opp på konto', - 'coveredWithTags' => 'Dekket med nøkkelord', - 'leftInBudget' => 'Att i budsjett', - 'left_in_debt' => 'Skuldig beløp', - 'sumOfSums' => 'Sum av summer', - 'noCategory' => '(ingen kategori)', - 'notCharged' => 'Ikke belastet (enda)', - 'inactive' => 'Inaktiv', - 'active' => 'Aktiv', - 'difference' => 'Differanse', - 'money_flowing_in' => 'Inn', - 'money_flowing_out' => 'Ut', - 'topX' => 'topp :number', - 'show_full_list' => 'Vis hele lista', - 'show_only_top' => 'Vis berre topp :number', - 'report_type' => 'Rapporttype', - 'report_type_default' => 'Standard finansiell rapport', - 'report_type_audit' => 'Transaksjonshistorikk (revisjon)', - 'report_type_category' => 'Kategorirapport', - 'report_type_budget' => 'Budsjettrapport', - 'report_type_tag' => 'Nøkkelordrapport', - 'report_type_double' => 'Rapport for kostnadar / inntekter', - 'more_info_help' => 'Mer informasjon om desse rapportane finn du på hjelpesidene. Trykk på (?) -ikonet øvst til høgre.', - 'report_included_accounts' => 'Inkluderte kontoar', - 'report_date_range' => 'Datointervall', - 'report_preset_ranges' => 'Forhåndsinnstilte områder', - 'shared' => 'Delt', - 'fiscal_year' => 'Rekneskapsår', - 'income_entry' => 'Inntekter frå konto ":name" mellom :start og :end', - 'expense_entry' => 'Utgifter til konto ":name" mellom :start og :end', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => 'Utgifter i budsjettet «:budget» mellom :start og :end', - 'balance_amount' => 'Utgifter i budsjett ":budget" betalt frå konto ":account" mellom :start og :end', - 'no_audit_activity' => 'Ingen aktivitet er registrert på konto :account_name mellom :start og :end.', - 'audit_end_balance' => 'Kontobalanse frå :account_name ved slutten av :end var: :balance', - 'reports_extra_options' => 'Ekstra alternativ', - 'report_has_no_extra_options' => 'Denne rapporten har ingen ekstra alternativ', - 'reports_submit' => 'Vis rapport', - 'end_after_start_date' => 'Sluttdato for rapport må vera etter startdato.', - 'select_category' => 'Vel kategori(ar)', - 'select_budget' => 'Vel budsjett.', - 'select_tag' => 'Vel nøkkelord.', - 'income_per_category' => 'Inntekter per kategori', - 'expense_per_category' => 'Utgifter per kategori', - 'expense_per_budget' => 'Utgifter per budsjett', - 'income_per_account' => 'Inntekter per konto', - 'expense_per_account' => 'Utgifter per konto', - 'expense_per_tag' => 'Utgifter per nøkkelord', - 'income_per_tag' => 'Inntekter per nøkkelord', - 'include_expense_not_in_budget' => 'Inkluderte utgifter ikkje med i dei valde budsjettene', - 'include_expense_not_in_account' => 'Inkluderte utgifter ikkje med i dei valde kontoane', - 'include_expense_not_in_category' => 'Inkluderte utgifter ikkje med i dei valde kategoriene', - 'include_income_not_in_category' => 'Inkluderte inntekter ikkje med i dei valde kategoriene', - 'include_income_not_in_account' => 'Inkluderte inntekter ikkje med i dei valde kontoane', - 'include_income_not_in_tags' => 'Inkluderte inntekter ikkje i valde nøkkelord', - 'include_expense_not_in_tags' => 'Inkluderte utgifter ikkje i valde nøkkelord', - 'everything_else' => 'Alt anna', - 'income_and_expenses' => 'Inntekter og utgifter', - 'spent_average' => 'Brukt (gjennomsnittlig)', - 'income_average' => 'Inntekt (gjennomsnittlig)', - 'transaction_count' => 'Transaksjonsantal', - 'average_spending_per_account' => 'Gjennomsnittlig bruk per konto', - 'average_income_per_account' => 'Gjennomsnittlig inntekt per konto', - 'total' => 'Totalt', - 'description' => 'Beskriving', - 'sum_of_period' => 'Sum for perioden', - 'average_in_period' => 'Gjennomsnitt for periode', - 'account_role_defaultAsset' => 'Standard aktivakonto', - 'account_role_sharedAsset' => 'Delt aktivakonto', - 'account_role_savingAsset' => 'Sparekonto', - 'account_role_ccAsset' => 'Kredittkort', - 'account_role_cashWalletAsset' => 'Kontant lommebok', - 'budget_chart_click' => 'Ver venleg å trykk på eit budsjettnamn i tabellen ovenfor for å sjå eit diagram.', - 'category_chart_click' => 'Ver venleg å trykk på eit kategorinamn i tabellen ovenfor for å sjå eit diagram.', - 'in_out_accounts' => 'Tjent og brukt pr. kombinasjon', - 'in_out_accounts_per_asset' => 'Tjent og brukt (per aktivakonto)', - 'in_out_per_category' => 'Tjent og brukt per kategori', - 'out_per_budget' => 'Brukt per budsjett', - 'select_expense_revenue' => 'Vel utgifts-/inntektskonto', - 'multi_currency_report_sum' => 'Sidan denne lista inneheld kontoar med forskjellig valuta vil summen(summane) mest sannsynleg ikkje gje meining. Rapporten vil alltid falla tilbake på din standardvaluta.', - 'sum_in_default_currency' => 'Summen vil alltid be i din standard valuta.', - 'net_filtered_prefs' => 'Dette diagrammet vil aldri inkludere kontoar som ikkje har "Inkluder i nettoverdi"-valget avkryssa.', + 'report_default' => 'Standard finansiell rapport mellom :start og :end', + 'report_audit' => 'Transaksjonshistorikk og oversikt mellom :start og :end', + 'report_category' => 'Kategori rapport mellom :start og :end', + 'report_double' => 'Utgift/Inntekt kontorapport mellom :start og :end', + 'report_budget' => 'Budsjettrapport mellom :start og :end', + 'report_tag' => 'Nøkkelordrapport mellom :start og :end', + 'quick_link_reports' => 'Hurtiglenkjer', + 'quick_link_examples' => 'Dette er berre nokon eksempel linker for å komma i gang. Sjekk ut hjelpesidene under (?) -knappen for informasjon om alle rapportar og dei magiske orda som du kan bruka.', + 'quick_link_default_report' => 'Standard finansiell rapport', + 'quick_link_audit_report' => 'Oversikt over transaksjonshistorikk', + 'report_this_month_quick' => 'Inneverande månad, alle kontoar', + 'report_last_month_quick' => 'Forrige månad, alle kontoar', + 'report_this_year_quick' => 'Inneverande år, alle kontoar', + 'report_this_fiscal_year_quick' => 'Inneverande rekneskapsår, alle kontoar', + 'report_all_time_quick' => 'Frå tidenes morgon, alle kontoar', + 'reports_can_bookmark' => 'Husk at rapportar kan bokmerkast.', + 'incomeVsExpenses' => 'Inntekter vs. utgifter', + 'accountBalances' => 'Saldo', + 'balanceStart' => 'Saldo ved starten av periode', + 'balanceEnd' => 'Saldo ved utgongen av perioden', + 'splitByAccount' => 'Del opp på konto', + 'coveredWithTags' => 'Dekket med nøkkelord', + 'leftInBudget' => 'Att i budsjett', + 'left_in_debt' => 'Skuldig beløp', + 'sumOfSums' => 'Sum av summer', + 'noCategory' => '(ingen kategori)', + 'notCharged' => 'Ikke belastet (enda)', + 'inactive' => 'Inaktiv', + 'active' => 'Aktiv', + 'difference' => 'Differanse', + 'money_flowing_in' => 'Inn', + 'money_flowing_out' => 'Ut', + 'topX' => 'topp :number', + 'show_full_list' => 'Vis hele lista', + 'show_only_top' => 'Vis berre topp :number', + 'report_type' => 'Rapporttype', + 'report_type_default' => 'Standard finansiell rapport', + 'report_type_audit' => 'Transaksjonshistorikk (revisjon)', + 'report_type_category' => 'Kategorirapport', + 'report_type_budget' => 'Budsjettrapport', + 'report_type_tag' => 'Nøkkelordrapport', + 'report_type_double' => 'Rapport for kostnadar / inntekter', + 'more_info_help' => 'Mer informasjon om desse rapportane finn du på hjelpesidene. Trykk på (?) -ikonet øvst til høgre.', + 'report_included_accounts' => 'Inkluderte kontoar', + 'report_date_range' => 'Datointervall', + 'report_preset_ranges' => 'Forhåndsinnstilte områder', + 'shared' => 'Delt', + 'fiscal_year' => 'Rekneskapsår', + 'income_entry' => 'Inntekter frå konto ":name" mellom :start og :end', + 'expense_entry' => 'Utgifter til konto ":name" mellom :start og :end', + 'category_entry' => 'Expenses and income in category ":name" between :start and :end', + 'budget_spent_amount' => 'Utgifter i budsjettet «:budget» mellom :start og :end', + 'balance_amount' => 'Utgifter i budsjett ":budget" betalt frå konto ":account" mellom :start og :end', + 'no_audit_activity' => 'Ingen aktivitet er registrert på konto :account_name mellom :start og :end.', + 'audit_end_balance' => 'Kontobalanse frå :account_name ved slutten av :end var: :balance', + 'reports_extra_options' => 'Ekstra alternativ', + 'report_has_no_extra_options' => 'Denne rapporten har ingen ekstra alternativ', + 'reports_submit' => 'Vis rapport', + 'end_after_start_date' => 'Sluttdato for rapport må vera etter startdato.', + 'select_category' => 'Vel kategori(ar)', + 'select_budget' => 'Vel budsjett.', + 'select_tag' => 'Vel nøkkelord.', + 'income_per_category' => 'Inntekter per kategori', + 'expense_per_category' => 'Utgifter per kategori', + 'expense_per_budget' => 'Utgifter per budsjett', + 'income_per_account' => 'Inntekter per konto', + 'expense_per_account' => 'Utgifter per konto', + 'expense_per_tag' => 'Utgifter per nøkkelord', + 'income_per_tag' => 'Inntekter per nøkkelord', + 'include_expense_not_in_budget' => 'Inkluderte utgifter ikkje med i dei valde budsjettene', + 'include_expense_not_in_account' => 'Inkluderte utgifter ikkje med i dei valde kontoane', + 'include_expense_not_in_category' => 'Inkluderte utgifter ikkje med i dei valde kategoriene', + 'include_income_not_in_category' => 'Inkluderte inntekter ikkje med i dei valde kategoriene', + 'include_income_not_in_account' => 'Inkluderte inntekter ikkje med i dei valde kontoane', + 'include_income_not_in_tags' => 'Inkluderte inntekter ikkje i valde nøkkelord', + 'include_expense_not_in_tags' => 'Inkluderte utgifter ikkje i valde nøkkelord', + 'everything_else' => 'Alt anna', + 'income_and_expenses' => 'Inntekter og utgifter', + 'spent_average' => 'Brukt (gjennomsnittlig)', + 'income_average' => 'Inntekt (gjennomsnittlig)', + 'transaction_count' => 'Transaksjonsantal', + 'average_spending_per_account' => 'Gjennomsnittlig bruk per konto', + 'average_income_per_account' => 'Gjennomsnittlig inntekt per konto', + 'total' => 'Totalt', + 'description' => 'Beskriving', + 'sum_of_period' => 'Sum for perioden', + 'average_in_period' => 'Gjennomsnitt for periode', + 'account_role_defaultAsset' => 'Standard aktivakonto', + 'account_role_sharedAsset' => 'Delt aktivakonto', + 'account_role_savingAsset' => 'Sparekonto', + 'account_role_ccAsset' => 'Kredittkort', + 'account_role_cashWalletAsset' => 'Kontant lommebok', + 'budget_chart_click' => 'Ver venleg å trykk på eit budsjettnamn i tabellen ovenfor for å sjå eit diagram.', + 'category_chart_click' => 'Ver venleg å trykk på eit kategorinamn i tabellen ovenfor for å sjå eit diagram.', + 'in_out_accounts' => 'Tjent og brukt pr. kombinasjon', + 'in_out_accounts_per_asset' => 'Tjent og brukt (per aktivakonto)', + 'in_out_per_category' => 'Tjent og brukt per kategori', + 'out_per_budget' => 'Brukt per budsjett', + 'select_expense_revenue' => 'Vel utgifts-/inntektskonto', + 'multi_currency_report_sum' => 'Sidan denne lista inneheld kontoar med forskjellig valuta vil summen(summane) mest sannsynleg ikkje gje meining. Rapporten vil alltid falla tilbake på din standardvaluta.', + 'sum_in_default_currency' => 'Summen vil alltid be i din standard valuta.', + 'net_filtered_prefs' => 'Dette diagrammet vil aldri inkludere kontoar som ikkje har "Inkluder i nettoverdi"-valget avkryssa.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Diagram', - 'month' => 'Måned', - 'budget' => 'Budsjett', - 'spent' => 'Brukt', - 'spent_capped' => 'Brukt (Avkorta)', - 'spent_in_budget' => 'Brukt i budsjett', - 'left_to_spend' => 'Att å bruka', - 'earned' => 'Opptjent', - 'overspent' => 'Overforbruk', - 'left' => 'Att', - 'max-amount' => 'Maksimumsbeløp', - 'min-amount' => 'Minimumsbeløp', - 'journal-amount' => 'Gjeldande rekningspost', - 'name' => 'Namn', - 'date' => 'Dato', - 'date_and_time' => 'Dato og klokkeslett', - 'time' => 'Tid', - 'paid' => 'Betalt', - 'unpaid' => 'Ikke betalt', - 'day' => 'Dag', - 'budgeted' => 'Budsjettert', - 'period' => 'Periode', - 'balance' => 'Saldo', - 'in_out_period' => 'Inn + ut denne perioden', - 'sum' => 'Sum', - 'summary' => 'Oppsummering', - 'average' => 'Gjennomsnitt', - 'balanceFor' => 'Saldo for :name', - 'no_tags' => '(ingen nøkkelord)', + 'chart' => 'Diagram', + 'month' => 'Måned', + 'budget' => 'Budsjett', + 'spent' => 'Brukt', + 'spent_capped' => 'Brukt (Avkorta)', + 'spent_in_budget' => 'Brukt i budsjett', + 'left_to_spend' => 'Att å bruka', + 'earned' => 'Opptjent', + 'overspent' => 'Overforbruk', + 'left' => 'Att', + 'max-amount' => 'Maksimumsbeløp', + 'min-amount' => 'Minimumsbeløp', + 'journal-amount' => 'Gjeldande rekningspost', + 'name' => 'Namn', + 'date' => 'Dato', + 'date_and_time' => 'Dato og klokkeslett', + 'time' => 'Tid', + 'paid' => 'Betalt', + 'unpaid' => 'Ikke betalt', + 'day' => 'Dag', + 'budgeted' => 'Budsjettert', + 'period' => 'Periode', + 'balance' => 'Saldo', + 'in_out_period' => 'Inn + ut denne perioden', + 'sum' => 'Sum', + 'summary' => 'Oppsummering', + 'average' => 'Gjennomsnitt', + 'balanceFor' => 'Saldo for :name', + 'no_tags' => '(ingen nøkkelord)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Hendelseshistorikk', - 'add_money_to_piggy' => 'Legg til pengar i sparegris ":name"', - 'piggy_bank' => 'Sparegris', - 'new_piggy_bank' => 'Ny sparegris', - 'store_piggy_bank' => 'Opprett ny sparegris', - 'stored_piggy_bank' => 'Lagra ny sparegris ":name"', - 'account_status' => 'Kontostatus', - 'left_for_piggy_banks' => 'Att i sparegriser', - 'sum_of_piggy_banks' => 'Sum i sparegriser', - 'saved_so_far' => 'Spart til no', - 'left_to_save' => 'Att å spara', - 'suggested_amount' => 'Foreslått månadleg beløp for å spara', - 'add_money_to_piggy_title' => 'Legg til pengar i sparegris ":name"', - 'remove_money_from_piggy_title' => 'Fjern pengar frå sparegris ":name"', - 'add' => 'Legg til', - 'no_money_for_piggy' => 'Du har ikkje fleire pengar å legga i denne sparegrisen.', - 'suggested_savings_per_month' => 'Foreslått pr. månad', + 'event_history' => 'Hendelseshistorikk', + 'add_money_to_piggy' => 'Legg til pengar i sparegris ":name"', + 'piggy_bank' => 'Sparegris', + 'new_piggy_bank' => 'Ny sparegris', + 'store_piggy_bank' => 'Opprett ny sparegris', + 'stored_piggy_bank' => 'Lagra ny sparegris ":name"', + 'account_status' => 'Kontostatus', + 'left_for_piggy_banks' => 'Att i sparegriser', + 'sum_of_piggy_banks' => 'Sum i sparegriser', + 'saved_so_far' => 'Spart til no', + 'left_to_save' => 'Att å spara', + 'suggested_amount' => 'Foreslått månadleg beløp for å spara', + 'add_money_to_piggy_title' => 'Legg til pengar i sparegris ":name"', + 'remove_money_from_piggy_title' => 'Fjern pengar frå sparegris ":name"', + 'add' => 'Legg til', + 'no_money_for_piggy' => 'Du har ikkje fleire pengar å legga i denne sparegrisen.', + 'suggested_savings_per_month' => 'Foreslått pr. månad', - 'remove' => 'Fjern', - 'max_amount_add' => 'Maksimumsbeløpet du kan legga til er', - 'max_amount_remove' => 'Maksimumsbeløpet du kan fjerna er', - 'update_piggy_button' => 'Oppdater sparegris', - 'update_piggy_title' => 'Oppdater sparegris ":name"', - 'updated_piggy_bank' => 'Oppdatert sparegris ":name"', - 'details' => 'Detaljer', - 'events' => 'Hendelser', - 'target_amount' => 'Målbeløp', - 'start_date' => 'Startdato', - 'no_start_date' => 'Ingen start dato', - 'target_date' => 'Måldato', - 'no_target_date' => 'Ingen måldato', - 'table' => 'Tabell', - 'delete_piggy_bank' => 'Slett sparegris ":name"', - 'cannot_add_amount_piggy' => 'Kan ikkje legga :amount til i ":name".', - 'cannot_remove_from_piggy' => 'Kan ikkje fjerna :amount frå ":name".', - 'deleted_piggy_bank' => 'Sletta sparegris ":name"', - 'added_amount_to_piggy' => 'La til :amount i ":name"', - 'removed_amount_from_piggy' => 'Fjerna :amount frå ":name"', - 'piggy_events' => 'Tilhøyrande sparegrisar', + 'remove' => 'Fjern', + 'max_amount_add' => 'Maksimumsbeløpet du kan legga til er', + 'max_amount_remove' => 'Maksimumsbeløpet du kan fjerna er', + 'update_piggy_button' => 'Oppdater sparegris', + 'update_piggy_title' => 'Oppdater sparegris ":name"', + 'updated_piggy_bank' => 'Oppdatert sparegris ":name"', + 'details' => 'Detaljer', + 'events' => 'Hendelser', + 'target_amount' => 'Målbeløp', + 'start_date' => 'Startdato', + 'no_start_date' => 'Ingen start dato', + 'target_date' => 'Måldato', + 'no_target_date' => 'Ingen måldato', + 'table' => 'Tabell', + 'delete_piggy_bank' => 'Slett sparegris ":name"', + 'cannot_add_amount_piggy' => 'Kan ikkje legga :amount til i ":name".', + 'cannot_remove_from_piggy' => 'Kan ikkje fjerna :amount frå ":name".', + 'deleted_piggy_bank' => 'Sletta sparegris ":name"', + 'added_amount_to_piggy' => 'La til :amount i ":name"', + 'removed_amount_from_piggy' => 'Fjerna :amount frå ":name"', + 'piggy_events' => 'Tilhøyrande sparegrisar', // tags - 'delete_tag' => 'Slett nøkkelordet «:tag»', - 'deleted_tag' => 'Sletta nøkkelordet «:tag»', - 'new_tag' => 'Lag nytt nøkkelord', - 'edit_tag' => 'Rediger nøkkelordet «:tag»', - 'updated_tag' => 'Oppdaterte nøkkelordet «:tag»', - 'created_tag' => 'Nøkkelordet «:tag» har vorte oppretta!', + 'delete_tag' => 'Slett nøkkelordet «:tag»', + 'deleted_tag' => 'Sletta nøkkelordet «:tag»', + 'new_tag' => 'Lag nytt nøkkelord', + 'edit_tag' => 'Rediger nøkkelordet «:tag»', + 'updated_tag' => 'Oppdaterte nøkkelordet «:tag»', + 'created_tag' => 'Nøkkelordet «:tag» har vorte oppretta!', - 'transaction_journal_information' => 'Transaksjonsinformasjon', - 'transaction_journal_amount' => 'Beløpsinformasjon', - 'transaction_journal_meta' => 'Metainformasjon', - 'transaction_journal_more' => 'Meir informasjon', - 'basic_journal_information' => 'Grunnleggande transaksjonsinformasjon', - 'transaction_journal_extra' => 'Ekstra informasjon', - 'att_part_of_journal' => 'Lagra under «:journal»', - 'total_amount' => 'Totalbeløp', - 'number_of_decimals' => 'Antal desimalar', + 'transaction_journal_information' => 'Transaksjonsinformasjon', + 'transaction_journal_amount' => 'Beløpsinformasjon', + 'transaction_journal_meta' => 'Metainformasjon', + 'transaction_journal_more' => 'Meir informasjon', + 'basic_journal_information' => 'Grunnleggande transaksjonsinformasjon', + 'transaction_journal_extra' => 'Ekstra informasjon', + 'att_part_of_journal' => 'Lagra under «:journal»', + 'total_amount' => 'Totalbeløp', + 'number_of_decimals' => 'Antal desimalar', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'Invitasjonen til «:address» har allerede vorte innløyst.', - 'invite_is_deleted' => 'Invitasjonen til «:address» vart sletta.', - 'invite_new_user_title' => 'Inviter ny brukar', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'E-postadresse', - 'invite_user' => 'Inviter brukar', - 'user_is_invited' => 'E-postadressa «:address» vart invitert til Firefly III', - 'administration' => 'Administrasjon', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invitasjonskoden er allereie brukt', - 'user_administration' => 'Brukaradministrasjon', - 'list_all_users' => 'Alle brukarar', - 'all_users' => 'Alle brukarar', - 'instance_configuration' => 'Konfigurasjon', - 'firefly_instance_configuration' => 'Konfigurasjonsalternativer for Firefly III', - 'setting_single_user_mode' => 'Enkeltbrukarmodus', - 'setting_single_user_mode_explain' => 'Som standard godtar Firefly III berre ein (1) registrering: deg. Dette er eit sikkerhetstiltak, som hindrer andre i å bruka din instans om du ikkje tillatar dei det. Fremtidige registreringer er blokkert. Når du kryssar av denne ruten kan andre bruka din førekomst, forutsatt at dei kan nå serveren (når den er kopla til Internett).', - 'store_configuration' => 'Lagra konfigurasjon', - 'single_user_administration' => 'Brukaradministrasjon for :email', - 'edit_user' => 'Rediger brukar :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'Brukardata', - 'user_information' => 'Brukarinformasjon', - 'total_size' => 'totalstørrelse', - 'budget_or_budgets' => ':count budsjett|:count budsjett', - 'budgets_with_limits' => ':count budsjett med konfigurert beløp|:count budsjett med konfigurert beløp', - 'nr_of_rules_in_total_groups' => ':count_rules reglar i :count_groups regel gruppe(r)', - 'tag_or_tags' => ':count nøkkelord|:count nøkkelord', - 'configuration_updated' => 'Konfigurasjonen er oppdatert', - 'setting_is_demo_site' => 'Demo nettsted', - 'setting_is_demo_site_explain' => 'Om du avhuker denne boksen, vil installasjonen oppføre seg som om det er ein demo site, som kan ha rare bivirkninger.', - 'block_code_bounced' => 'Epostmelding(ar) kunne ikkje leveres', - 'block_code_expired' => 'Demo-konto utløpt', - 'no_block_code' => 'Ingen grunn for utestengelse eller brukaren er ikkje utestengt', - 'block_code_email_changed' => 'Brukaren har ikkje bekreftet ny e-postadresse enda', - 'admin_update_email' => 'I motsetning til profilsida, vil brukaren IKKE verta varslet om at e-postadressa er endra!', - 'update_user' => 'Oppdater brukar', - 'updated_user' => 'Brukardata er endra.', - 'delete_user' => 'Slett brukar :email', - 'user_deleted' => 'Brukaren er sletta', - 'send_test_email' => 'Send test-epostmelding', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Send melding', - 'send_test_triggered' => 'Test vart utløst. Sjekk innboksen din og loggfilene.', - 'give_admin_careful' => 'Brukarar som får administrative rettigheter kan ta bort din. Vær forsiktig.', - 'admin_maintanance_title' => 'Vedlikehold', - 'admin_maintanance_expl' => 'Nokre smarte knappar for Firefly III vedlikehald', - 'admin_maintenance_clear_cache' => 'Tøm hurtigminne', - 'admin_notifications' => 'Admin varsel', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'Brukar får velkomstmelding etter registrering', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'Ein ny versjon er tilgjengeleg', - 'admin_notification_check_invite_created' => 'Ein brukar er invitert til Firefly III', - 'admin_notification_check_invite_redeemed' => 'Ein brukerinvitasjon er innløyst', - 'all_invited_users' => 'Alle inviterte brukarar', - 'save_notification_settings' => 'Lagra innstillingar', - 'notification_settings_saved' => 'Varslingsinnstillingane har vorte lagra', - - - 'split_transaction_title' => 'Beskrivinga av den splitta transaksjonen', - 'split_transaction_title_help' => 'Om du oppretter ein splittet transaksjon, må du ha ein hoved beskriving for alle deler av transaksjonen.', - 'split_title_help' => 'Om du oppretter ein splittet transaksjon, må du ha ein global beskriving for alle deler av transaksjonen.', - 'you_create_transfer' => 'Du lager ein overføring.', - 'you_create_withdrawal' => 'Du lager eit uttak.', - 'you_create_deposit' => 'Du lager ein innskud.', + 'invite_is_already_redeemed' => 'Invitasjonen til «:address» har allerede vorte innløyst.', + 'invite_is_deleted' => 'Invitasjonen til «:address» vart sletta.', + 'invite_new_user_title' => 'Inviter ny brukar', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'E-postadresse', + 'invite_user' => 'Inviter brukar', + 'user_is_invited' => 'E-postadressa «:address» vart invitert til Firefly III', + 'administration' => 'Administrasjon', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invitasjonskoden er allereie brukt', + 'user_administration' => 'Brukaradministrasjon', + 'list_all_users' => 'Alle brukarar', + 'all_users' => 'Alle brukarar', + 'instance_configuration' => 'Konfigurasjon', + 'firefly_instance_configuration' => 'Konfigurasjonsalternativer for Firefly III', + 'setting_single_user_mode' => 'Enkeltbrukarmodus', + 'setting_single_user_mode_explain' => 'Som standard godtar Firefly III berre ein (1) registrering: deg. Dette er eit sikkerhetstiltak, som hindrer andre i å bruka din instans om du ikkje tillatar dei det. Fremtidige registreringer er blokkert. Når du kryssar av denne ruten kan andre bruka din førekomst, forutsatt at dei kan nå serveren (når den er kopla til Internett).', + 'store_configuration' => 'Lagra konfigurasjon', + 'single_user_administration' => 'Brukaradministrasjon for :email', + 'edit_user' => 'Rediger brukar :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'Brukardata', + 'user_information' => 'Brukarinformasjon', + 'total_size' => 'totalstørrelse', + 'budget_or_budgets' => ':count budsjett|:count budsjett', + 'budgets_with_limits' => ':count budsjett med konfigurert beløp|:count budsjett med konfigurert beløp', + 'nr_of_rules_in_total_groups' => ':count_rules reglar i :count_groups regel gruppe(r)', + 'tag_or_tags' => ':count nøkkelord|:count nøkkelord', + 'configuration_updated' => 'Konfigurasjonen er oppdatert', + 'setting_is_demo_site' => 'Demo nettsted', + 'setting_is_demo_site_explain' => 'Om du avhuker denne boksen, vil installasjonen oppføre seg som om det er ein demo site, som kan ha rare bivirkninger.', + 'block_code_bounced' => 'Epostmelding(ar) kunne ikkje leveres', + 'block_code_expired' => 'Demo-konto utløpt', + 'no_block_code' => 'Ingen grunn for utestengelse eller brukaren er ikkje utestengt', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Brukaren har ikkje bekreftet ny e-postadresse enda', + 'admin_update_email' => 'I motsetning til profilsida, vil brukaren IKKE verta varslet om at e-postadressa er endra!', + 'update_user' => 'Oppdater brukar', + 'updated_user' => 'Brukardata er endra.', + 'delete_user' => 'Slett brukar :email', + 'user_deleted' => 'Brukaren er sletta', + 'send_test_email' => 'Send test-epostmelding', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Send melding', + 'send_test_triggered' => 'Test vart utløst. Sjekk innboksen din og loggfilene.', + 'give_admin_careful' => 'Brukarar som får administrative rettigheter kan ta bort din. Vær forsiktig.', + 'admin_maintanance_title' => 'Vedlikehold', + 'admin_maintanance_expl' => 'Nokre smarte knappar for Firefly III vedlikehald', + 'admin_maintenance_clear_cache' => 'Tøm hurtigminne', + 'admin_notifications' => 'Admin varsel', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'Brukar får velkomstmelding etter registrering', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'Ein ny versjon er tilgjengeleg', + 'admin_notification_check_invite_created' => 'Ein brukar er invitert til Firefly III', + 'admin_notification_check_invite_redeemed' => 'Ein brukerinvitasjon er innløyst', + 'all_invited_users' => 'Alle inviterte brukarar', + 'save_notification_settings' => 'Lagra innstillingar', + 'notification_settings_saved' => 'Varslingsinnstillingane har vorte lagra', + 'split_transaction_title' => 'Beskrivinga av den splitta transaksjonen', + 'split_transaction_title_help' => 'Om du oppretter ein splittet transaksjon, må du ha ein hoved beskriving for alle deler av transaksjonen.', + 'split_title_help' => 'Om du oppretter ein splittet transaksjon, må du ha ein global beskriving for alle deler av transaksjonen.', + 'you_create_transfer' => 'Du lager ein overføring.', + 'you_create_withdrawal' => 'Du lager eit uttak.', + 'you_create_deposit' => 'Du lager ein innskud.', // links - 'journal_link_configuration' => 'Konfigurasjon av transaksjonslenkjer', - 'create_new_link_type' => 'Opprett ny lenktype', - 'store_new_link_type' => 'Lagra ny koblingstype', - 'update_link_type' => 'Oppdater koblingstype', - 'edit_link_type' => 'Rediger lenkjetype «:name»', - 'updated_link_type' => 'Oppdatert lenkjetype «:name»', - 'delete_link_type' => 'Slett lenkjetype «:name»', - 'deleted_link_type' => 'Sletta lenkjetype «:name»', - 'stored_new_link_type' => 'Lagra ny lenkjetype «:name»', - 'cannot_edit_link_type' => 'Kan ikkje redigera lenkjetype «:name»', - 'link_type_help_name' => 'Dvs. "Duplikater"', - 'link_type_help_inward' => 'Dvs. "duplikater"', - 'link_type_help_outward' => 'Dvs. "dupliseres av"', - 'save_connections_by_moving' => 'Lagra koblingen mellom desse transaksjonane ved å flytte dei til ein annan lenktype:', - 'do_not_save_connection' => '(ikkje lagra kobling)', - 'link_transaction' => 'Sammenkoble transaksjon', - 'link_to_other_transaction' => 'Koble denne transaksjonen til ein annan transaksjon', - 'select_transaction_to_link' => 'Vel ein transaksjon å koble til denne transaksjonen. Lenker er for tiden ubrukt i Firefly III (bortsett frå å verta vist), men eg planlegg å endra dette i framtida. Bruk søkeboksen for å velga ein transaksjon, enten etter tittel eller etter ID. Om du vil legga til egendefinerte lenkjetyper, sjekk administrasjonsavsnittetet.', - 'this_transaction' => 'Denne transaksjonen', - 'transaction' => 'Transaksjon', - 'comments' => 'Kommentarar', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Kan ikkje koble desse transaksjonane saman', - 'selected_transaction' => 'Vel transaksjonar', - 'journals_linked' => 'Transaksjonane er knytt saman.', - 'journals_error_linked' => 'Desse transaksjonane er allereie knytt saman.', - 'journals_link_to_self' => 'Du kan ikkje koble ein transaksjon til seg sjølv', - 'journal_links' => 'Transaksjonskoblinger', - 'this_withdrawal' => 'Dette uttaket', - 'this_deposit' => 'Dette innskuddet', - 'this_transfer' => 'Denne overføringen', - 'overview_for_link' => 'Oversikt for linktype «:name»', - 'source_transaction' => 'Kjeldetransaksjon', - 'link_description' => 'Lenkjebeskriving', - 'destination_transaction' => 'Destinasjonstransaksjon', - 'delete_journal_link' => 'Slett koblingen mellom :source og :destination', - 'deleted_link' => 'Sletta kobling', + 'journal_link_configuration' => 'Konfigurasjon av transaksjonslenkjer', + 'create_new_link_type' => 'Opprett ny lenktype', + 'store_new_link_type' => 'Lagra ny koblingstype', + 'update_link_type' => 'Oppdater koblingstype', + 'edit_link_type' => 'Rediger lenkjetype «:name»', + 'updated_link_type' => 'Oppdatert lenkjetype «:name»', + 'delete_link_type' => 'Slett lenkjetype «:name»', + 'deleted_link_type' => 'Sletta lenkjetype «:name»', + 'stored_new_link_type' => 'Lagra ny lenkjetype «:name»', + 'cannot_edit_link_type' => 'Kan ikkje redigera lenkjetype «:name»', + 'link_type_help_name' => 'Dvs. "Duplikater"', + 'link_type_help_inward' => 'Dvs. "duplikater"', + 'link_type_help_outward' => 'Dvs. "dupliseres av"', + 'save_connections_by_moving' => 'Lagra koblingen mellom desse transaksjonane ved å flytte dei til ein annan lenktype:', + 'do_not_save_connection' => '(ikkje lagra kobling)', + 'link_transaction' => 'Sammenkoble transaksjon', + 'link_to_other_transaction' => 'Koble denne transaksjonen til ein annan transaksjon', + 'select_transaction_to_link' => 'Vel ein transaksjon å koble til denne transaksjonen. Lenker er for tiden ubrukt i Firefly III (bortsett frå å verta vist), men eg planlegg å endra dette i framtida. Bruk søkeboksen for å velga ein transaksjon, enten etter tittel eller etter ID. Om du vil legga til egendefinerte lenkjetyper, sjekk administrasjonsavsnittetet.', + 'this_transaction' => 'Denne transaksjonen', + 'transaction' => 'Transaksjon', + 'comments' => 'Kommentarar', + 'link_notes' => 'Any notes you wish to store with the link.', + 'invalid_link_selection' => 'Kan ikkje koble desse transaksjonane saman', + 'selected_transaction' => 'Vel transaksjonar', + 'journals_linked' => 'Transaksjonane er knytt saman.', + 'journals_error_linked' => 'Desse transaksjonane er allereie knytt saman.', + 'journals_link_to_self' => 'Du kan ikkje koble ein transaksjon til seg sjølv', + 'journal_links' => 'Transaksjonskoblinger', + 'this_withdrawal' => 'Dette uttaket', + 'this_deposit' => 'Dette innskuddet', + 'this_transfer' => 'Denne overføringen', + 'overview_for_link' => 'Oversikt for linktype «:name»', + 'source_transaction' => 'Kjeldetransaksjon', + 'link_description' => 'Lenkjebeskriving', + 'destination_transaction' => 'Destinasjonstransaksjon', + 'delete_journal_link' => 'Slett koblingen mellom :source og :destination', + 'deleted_link' => 'Sletta kobling', // link translations: - 'Paid_name' => 'Betalt', - 'Refund_name' => 'Refusjon', - 'Reimbursement_name' => 'Tilbakebetaling', - 'Related_name' => 'Relatert', - 'relates to_inward' => 'relatert til', - 'is (partially) refunded by_inward' => 'er (delvis) refundert av', - 'is (partially) paid for by_inward' => 'er (delvis) betalt av', - 'is (partially) reimbursed by_inward' => 'er (delvis) tilbakebetalt av', - 'inward_transaction' => 'Innlands transaksjon', - 'outward_transaction' => 'Utenland transaksjon', - 'relates to_outward' => 'relatert til', - '(partially) refunds_outward' => '(delvise) refusjoner', - '(partially) pays for_outward' => 'betaler (delvis) for', - '(partially) reimburses_outward' => 'tilbakebetaler (delvis)', - 'is (partially) refunded by' => 'er (delvis) refundert av', - 'is (partially) paid for by' => 'er (delvis) betalt av', - 'is (partially) reimbursed by' => 'er (delvis) tilbakebetalt av', - 'relates to' => 'relatert til', - '(partially) refunds' => '(delvise) refusjoner', - '(partially) pays for' => 'betaler (delvis) for', - '(partially) reimburses' => 'tilbakebetaler (delvis)', + 'Paid_name' => 'Betalt', + 'Refund_name' => 'Refusjon', + 'Reimbursement_name' => 'Tilbakebetaling', + 'Related_name' => 'Relatert', + 'relates to_inward' => 'relatert til', + 'is (partially) refunded by_inward' => 'er (delvis) refundert av', + 'is (partially) paid for by_inward' => 'er (delvis) betalt av', + 'is (partially) reimbursed by_inward' => 'er (delvis) tilbakebetalt av', + 'inward_transaction' => 'Innlands transaksjon', + 'outward_transaction' => 'Utenland transaksjon', + 'relates to_outward' => 'relatert til', + '(partially) refunds_outward' => '(delvise) refusjoner', + '(partially) pays for_outward' => 'betaler (delvis) for', + '(partially) reimburses_outward' => 'tilbakebetaler (delvis)', + 'is (partially) refunded by' => 'er (delvis) refundert av', + 'is (partially) paid for by' => 'er (delvis) betalt av', + 'is (partially) reimbursed by' => 'er (delvis) tilbakebetalt av', + 'relates to' => 'relatert til', + '(partially) refunds' => '(delvise) refusjoner', + '(partially) pays for' => 'betaler (delvis) for', + '(partially) reimburses' => 'tilbakebetaler (delvis)', // split a transaction: - 'splits' => 'Deler opp', - 'add_another_split' => 'Legg til ein oppdeling til', - 'cannot_edit_opening_balance' => 'Du kan ikkje redigera åpningssaldoen til ein konto.', - 'no_edit_multiple_left' => 'Du har ikkje valt ein tillatt transaksjon for redigering.', - 'breadcrumb_convert_group' => 'Konverter transaksjonen', - 'convert_invalid_source' => 'Kjeldeinformasjon er ugyldig for transaksjon #%d.', - 'convert_invalid_destination' => 'Målinformasjon er ugyldig for transaksjon #%d.', - 'create_another' => 'Gå tilbake hit etter lagring for å oppretta ein ny.', - 'after_update_create_another' => 'Gå tilbake hit etter oppdatering, for å fortsetja å redigera.', - 'store_as_new' => 'Lagra som ein ny transaksjon istedenfor å oppdatera.', - 'reset_after' => 'Nullstill skjema etter innsending', - 'errors_submission' => 'Noko gjekk gale med innleveringa. Ver venleg å sjekk feila.', - 'transaction_expand_split' => 'Utvid splitt', - 'transaction_collapse_split' => 'Kollaps deling', + 'splits' => 'Deler opp', + 'add_another_split' => 'Legg til ein oppdeling til', + 'cannot_edit_opening_balance' => 'Du kan ikkje redigera åpningssaldoen til ein konto.', + 'no_edit_multiple_left' => 'Du har ikkje valt ein tillatt transaksjon for redigering.', + 'breadcrumb_convert_group' => 'Konverter transaksjonen', + 'convert_invalid_source' => 'Kjeldeinformasjon er ugyldig for transaksjon #%d.', + 'convert_invalid_destination' => 'Målinformasjon er ugyldig for transaksjon #%d.', + 'create_another' => 'Gå tilbake hit etter lagring for å oppretta ein ny.', + 'after_update_create_another' => 'Gå tilbake hit etter oppdatering, for å fortsetja å redigera.', + 'store_as_new' => 'Lagra som ein ny transaksjon istedenfor å oppdatera.', + 'reset_after' => 'Nullstill skjema etter innsending', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Utvid splitt', + 'transaction_collapse_split' => 'Kollaps deling', // object groups - 'default_group_title_name' => '(ikkje gruppert)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ikkje gruppert)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'La oss oppretta ein aktivakonto!', - 'no_accounts_intro_asset' => 'Du har ingen aktivakontoar enda. Aktivakontoar er hovedkontoane dine: brukskonto, sparekonto, delt konto eller til og med kredittkortet ditt.', - 'no_accounts_imperative_asset' => 'For å begynne å bruka Firefly III må du oppretta minst ein aktivakonto. La oss gjera det no:', - 'no_accounts_create_asset' => 'Opprett ein aktivakonto', - 'no_accounts_title_expense' => 'La oss laga ein utgiftskonto!', - 'no_accounts_intro_expense' => 'Du har ingen utgiftskonto enda. Utgiftskontoar er dei stadane du brukar pengar, for eksempel butikkar og supermarked.', - 'no_accounts_imperative_expense' => 'Utgiftskontoar vert oppretta automatisk når du opprettar transaksjonar, men du kan og oppretta dei manuelt om du vil. La oss laga ein no:', - 'no_accounts_create_expense' => 'Opprett ein utgiftskonto', - 'no_accounts_title_revenue' => 'La oss oppretta ein inntektskonto!', - 'no_accounts_intro_revenue' => 'Du har ingen inntektskonto enda. Inntektskontoar er dei stadane du mottek pengar frå, for eksempel arbeidsgjevaren din.', - 'no_accounts_imperative_revenue' => 'Inntektsskontoar vert oppretta automatisk når du opprettar transaksjonar, men du kan og oppretta dei manuelt om du vil. La oss laga ein no:', - 'no_accounts_create_revenue' => 'Opprett ein inntektskonto', - 'no_accounts_title_liabilities' => 'La oss laga eit lån!', - 'no_accounts_intro_liabilities' => 'Du har ikkje gjeld enda. "Gjeldskonto" er kontoar som du registrerar ditt (studie) lån og andre formar for gjeld på.', - 'no_accounts_imperative_liabilities' => 'Du behøver ikkje bruka denne funksjonen, men den kan vera fornuftig å bruka når du vil ha kontroll på desse tingene.', - 'no_accounts_create_liabilities' => 'Opprett gjeld', - 'no_budgets_title_default' => 'La oss laga eit budsjett', - 'no_rules_title_default' => 'La oss laga ein regel', - 'no_budgets_intro_default' => 'Du har ingen budsjett enda. Budsjett brukes til å organisere utgiftane i logiske grupper, som du kan definera tak på for å begrense utgiftane dine.', - 'no_rules_intro_default' => 'Du har ingen reglar enda. Regler er kraftfulle automatiseringer som kan håndtere transaksjonar for deg.', - 'no_rules_imperative_default' => 'Regler kan vera veldig nyttige når du håndterer transaksjonar. La oss laga ein no:', - 'no_budgets_imperative_default' => 'Budsjett er eit basis verktøy for finansiell administrasjon. La oss laga eit no:', - 'no_budgets_create_default' => 'Opprett eit budsjett', - 'no_rules_create_default' => 'Opprett ein regel', - 'no_categories_title_default' => 'La oss laga ein kategori!', - 'no_categories_intro_default' => 'Du har ingen kategoriar enda. Kategorier brukes til å finjustere dine transaksjonar og merke dei med sin eigen kategori.', - 'no_categories_imperative_default' => 'Kategorier opprettes automatisk når du oppretter transaksjonar, men du kan oppretta ein manuelt òg. La oss oppretta ein no:', - 'no_categories_create_default' => 'Opprett ein kategori', - 'no_tags_title_default' => 'La oss laga eit nøkkelord!', - 'no_tags_intro_default' => 'Du har ingen nøkkelord enda. Nøkkelord vert benytta til å finjustera transaksjonar og merka dei med spesifikke ord.', - 'no_tags_imperative_default' => 'Nøkkelord vert oppretta automatisk når du lagar transaksjonar, men du kan òg laga dei manuelt. La oss laga eit no:', - 'no_tags_create_default' => 'Opprett nøkkelord', - 'no_transactions_title_withdrawal' => 'La oss laga ein utgift!', - 'no_transactions_intro_withdrawal' => 'Du har ingen utgifter enda. Du kan legga inn utgifter for å begynne å administrere din økonomi.', - 'no_transactions_imperative_withdrawal' => 'Har du brukt pengar? Då bør du skriva det ned:', - 'no_transactions_create_withdrawal' => 'Opprett ein utgift', - 'no_transactions_title_deposit' => 'La oss legga inn nokon inntekter!', - 'no_transactions_intro_deposit' => 'Du har ingen registrert inntekt enda. Du kan legga inn inntekter for å begynne å administrere din økonomi.', - 'no_transactions_imperative_deposit' => 'Har du mottatt pengar? Da bør du skrive det ned:', - 'no_transactions_create_deposit' => 'Opprett eit innskot', - 'no_transactions_title_transfers' => 'La oss legga inn ein overføring!', - 'no_transactions_intro_transfers' => 'Du har ingen overføringar enda. Når du flyttar pengar mellom aktivakontoar, registreres dette som ei overføring.', - 'no_transactions_imperative_transfers' => 'Har du flyttet pengar rundt? Da bør du skrive det ned:', - 'no_transactions_create_transfers' => 'Opprett ein overføring', - 'no_piggies_title_default' => 'La oss laga ein sparegris!', - 'no_piggies_intro_default' => 'Du har ingen sparegriser enda. Du kan oppretta sparegriser for å forenkle sparing og halde oversikt over kva du sparar til.', - 'no_piggies_imperative_default' => 'Har du ting du sparar pengar til? Lag ein sparegris for å få kontroll på sparinga:', - 'no_piggies_create_default' => 'Lag ein ny sparegris', - 'no_bills_title_default' => 'La oss legga inn ein rekning!', - 'no_bills_intro_default' => 'Du har ingen rekningar enda. Du kan oppretta rekningar for å halde oversikt over vanlige utgifter, som husleie eller forsikringer.', - 'no_bills_imperative_default' => 'Har du rekningar som kjem regelmessig? Opprett ei rekning og for å halde styr betalingane dine:', - 'no_bills_create_default' => 'Opprett ein rekning', + 'no_accounts_title_asset' => 'La oss oppretta ein aktivakonto!', + 'no_accounts_intro_asset' => 'Du har ingen aktivakontoar enda. Aktivakontoar er hovedkontoane dine: brukskonto, sparekonto, delt konto eller til og med kredittkortet ditt.', + 'no_accounts_imperative_asset' => 'For å begynne å bruka Firefly III må du oppretta minst ein aktivakonto. La oss gjera det no:', + 'no_accounts_create_asset' => 'Opprett ein aktivakonto', + 'no_accounts_title_expense' => 'La oss laga ein utgiftskonto!', + 'no_accounts_intro_expense' => 'Du har ingen utgiftskonto enda. Utgiftskontoar er dei stadane du brukar pengar, for eksempel butikkar og supermarked.', + 'no_accounts_imperative_expense' => 'Utgiftskontoar vert oppretta automatisk når du opprettar transaksjonar, men du kan og oppretta dei manuelt om du vil. La oss laga ein no:', + 'no_accounts_create_expense' => 'Opprett ein utgiftskonto', + 'no_accounts_title_revenue' => 'La oss oppretta ein inntektskonto!', + 'no_accounts_intro_revenue' => 'Du har ingen inntektskonto enda. Inntektskontoar er dei stadane du mottek pengar frå, for eksempel arbeidsgjevaren din.', + 'no_accounts_imperative_revenue' => 'Inntektsskontoar vert oppretta automatisk når du opprettar transaksjonar, men du kan og oppretta dei manuelt om du vil. La oss laga ein no:', + 'no_accounts_create_revenue' => 'Opprett ein inntektskonto', + 'no_accounts_title_liabilities' => 'La oss laga eit lån!', + 'no_accounts_intro_liabilities' => 'Du har ikkje gjeld enda. "Gjeldskonto" er kontoar som du registrerar ditt (studie) lån og andre formar for gjeld på.', + 'no_accounts_imperative_liabilities' => 'Du behøver ikkje bruka denne funksjonen, men den kan vera fornuftig å bruka når du vil ha kontroll på desse tingene.', + 'no_accounts_create_liabilities' => 'Opprett gjeld', + 'no_budgets_title_default' => 'La oss laga eit budsjett', + 'no_rules_title_default' => 'La oss laga ein regel', + 'no_budgets_intro_default' => 'Du har ingen budsjett enda. Budsjett brukes til å organisere utgiftane i logiske grupper, som du kan definera tak på for å begrense utgiftane dine.', + 'no_rules_intro_default' => 'Du har ingen reglar enda. Regler er kraftfulle automatiseringer som kan håndtere transaksjonar for deg.', + 'no_rules_imperative_default' => 'Regler kan vera veldig nyttige når du håndterer transaksjonar. La oss laga ein no:', + 'no_budgets_imperative_default' => 'Budsjett er eit basis verktøy for finansiell administrasjon. La oss laga eit no:', + 'no_budgets_create_default' => 'Opprett eit budsjett', + 'no_rules_create_default' => 'Opprett ein regel', + 'no_categories_title_default' => 'La oss laga ein kategori!', + 'no_categories_intro_default' => 'Du har ingen kategoriar enda. Kategorier brukes til å finjustere dine transaksjonar og merke dei med sin eigen kategori.', + 'no_categories_imperative_default' => 'Kategorier opprettes automatisk når du oppretter transaksjonar, men du kan oppretta ein manuelt òg. La oss oppretta ein no:', + 'no_categories_create_default' => 'Opprett ein kategori', + 'no_tags_title_default' => 'La oss laga eit nøkkelord!', + 'no_tags_intro_default' => 'Du har ingen nøkkelord enda. Nøkkelord vert benytta til å finjustera transaksjonar og merka dei med spesifikke ord.', + 'no_tags_imperative_default' => 'Nøkkelord vert oppretta automatisk når du lagar transaksjonar, men du kan òg laga dei manuelt. La oss laga eit no:', + 'no_tags_create_default' => 'Opprett nøkkelord', + 'no_transactions_title_withdrawal' => 'La oss laga ein utgift!', + 'no_transactions_intro_withdrawal' => 'Du har ingen utgifter enda. Du kan legga inn utgifter for å begynne å administrere din økonomi.', + 'no_transactions_imperative_withdrawal' => 'Har du brukt pengar? Då bør du skriva det ned:', + 'no_transactions_create_withdrawal' => 'Opprett ein utgift', + 'no_transactions_title_deposit' => 'La oss legga inn nokon inntekter!', + 'no_transactions_intro_deposit' => 'Du har ingen registrert inntekt enda. Du kan legga inn inntekter for å begynne å administrere din økonomi.', + 'no_transactions_imperative_deposit' => 'Har du mottatt pengar? Da bør du skrive det ned:', + 'no_transactions_create_deposit' => 'Opprett eit innskot', + 'no_transactions_title_transfers' => 'La oss legga inn ein overføring!', + 'no_transactions_intro_transfers' => 'Du har ingen overføringar enda. Når du flyttar pengar mellom aktivakontoar, registreres dette som ei overføring.', + 'no_transactions_imperative_transfers' => 'Har du flyttet pengar rundt? Da bør du skrive det ned:', + 'no_transactions_create_transfers' => 'Opprett ein overføring', + 'no_piggies_title_default' => 'La oss laga ein sparegris!', + 'no_piggies_intro_default' => 'Du har ingen sparegriser enda. Du kan oppretta sparegriser for å forenkle sparing og halde oversikt over kva du sparar til.', + 'no_piggies_imperative_default' => 'Har du ting du sparar pengar til? Lag ein sparegris for å få kontroll på sparinga:', + 'no_piggies_create_default' => 'Lag ein ny sparegris', + 'no_bills_title_default' => 'La oss legga inn ein rekning!', + 'no_bills_intro_default' => 'Du har ingen rekningar enda. Du kan oppretta rekningar for å halde oversikt over vanlige utgifter, som husleie eller forsikringer.', + 'no_bills_imperative_default' => 'Har du rekningar som kjem regelmessig? Opprett ei rekning og for å halde styr betalingane dine:', + 'no_bills_create_default' => 'Opprett ein rekning', // recurring transactions - 'create_right_now' => 'Opprett med ein gang', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Gjentakande transaksjonar', - 'repeat_until_in_past' => 'Denne gjentakande transaksjonen slutta å gjenta :date.', - 'recurring_calendar_view' => 'Kalender', - 'no_recurring_title_default' => 'La oss oppretta ein gjentakande transaksjon!', - 'no_recurring_intro_default' => 'Du har ingen gjentakande transaksjonar enda. Du kan bruka desse for å få Firefly III til å automatisk oppretta transaksjonar for deg.', - 'no_recurring_imperative_default' => 'Dette er ein ganske avansert funksjon, men den kan vera svært nyttig. Husk å lesa dokumentasjonen (?)-ikonet øvst til høgre) før du fortset.', - 'no_recurring_create_default' => 'Opprett ein gjentakande transaksjon', - 'make_new_recurring' => 'Opprett ein gjentakande transaksjon', - 'recurring_daily' => 'Dagleg', - 'recurring_weekly' => 'Kvar veke på :weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => 'Kvar månad på :dayOfMonth :weekday', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Kvar månad på :dayOfMonth :weekday', - 'recurring_yearly' => 'Kvart år den :date', - 'overview_for_recurrence' => 'Oversikt for gjentakande transaksjon ":title"', - 'warning_duplicates_repetitions' => 'I sjeldne tilfeller datoane vist to gonger i lista. Dette kan skje når fleire gjentakingar kolliderer. Firefly III genererer alltid ein transaksjon per dag.', - 'created_transactions' => 'Relaterte transaksjonar', - 'expected_withdrawals' => 'Forventa uttak', - 'expected_deposits' => 'Forventa innskot', - 'expected_transfers' => 'Forventa overføringar', - 'created_withdrawals' => 'Opprettede uttak', - 'created_deposits' => 'Opprettede innskot', - 'created_transfers' => 'Opprettede overføringer', - 'recurring_info' => 'Gjentakande transaksjon :count / :total', - 'created_from_recurrence' => 'Opprettet frå gjentakande transaksjon ":title" (#:id)', - 'recurring_never_cron' => 'Det kan sjå ut til at cron jobben som er nødvendig for å støtta gjentakande transaksjonar aldri har køyrt. Dette er sjølvsagt normalt når du nettopp har installert Firefly III, men dette bør settast opp så snart som mogleg. Sjekk ut hjelp-sidene ved å bruka (?) -ikonet øvst i høgre hjørne på sida.', - 'recurring_cron_long_ago' => 'Det ser ut som det har gått meir enn 36 timer sida cron jobben for å støtta gjentakande transaksjonar har køyrt. Er du sikker på at den er satt opp rett? Sjekk ut hjelpe-sidene ved å bruka (?) -ikonet øvst i høgre hjørne på sida.', + 'create_right_now' => 'Opprett med ein gang', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Gjentakande transaksjonar', + 'repeat_until_in_past' => 'Denne gjentakande transaksjonen slutta å gjenta :date.', + 'recurring_calendar_view' => 'Kalender', + 'no_recurring_title_default' => 'La oss oppretta ein gjentakande transaksjon!', + 'no_recurring_intro_default' => 'Du har ingen gjentakande transaksjonar enda. Du kan bruka desse for å få Firefly III til å automatisk oppretta transaksjonar for deg.', + 'no_recurring_imperative_default' => 'Dette er ein ganske avansert funksjon, men den kan vera svært nyttig. Husk å lesa dokumentasjonen (?)-ikonet øvst til høgre) før du fortset.', + 'no_recurring_create_default' => 'Opprett ein gjentakande transaksjon', + 'make_new_recurring' => 'Opprett ein gjentakande transaksjon', + 'recurring_daily' => 'Dagleg', + 'recurring_weekly' => 'Kvar veke på :weekday', + 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', + 'recurring_monthly' => 'Kvar månad på :dayOfMonth :weekday', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => 'Kvar månad på :dayOfMonth :weekday', + 'recurring_yearly' => 'Kvart år den :date', + 'overview_for_recurrence' => 'Oversikt for gjentakande transaksjon ":title"', + 'warning_duplicates_repetitions' => 'I sjeldne tilfeller datoane vist to gonger i lista. Dette kan skje når fleire gjentakingar kolliderer. Firefly III genererer alltid ein transaksjon per dag.', + 'created_transactions' => 'Relaterte transaksjonar', + 'expected_withdrawals' => 'Forventa uttak', + 'expected_deposits' => 'Forventa innskot', + 'expected_transfers' => 'Forventa overføringar', + 'created_withdrawals' => 'Opprettede uttak', + 'created_deposits' => 'Opprettede innskot', + 'created_transfers' => 'Opprettede overføringer', + 'recurring_info' => 'Gjentakande transaksjon :count / :total', + 'created_from_recurrence' => 'Opprettet frå gjentakande transaksjon ":title" (#:id)', + 'recurring_never_cron' => 'Det kan sjå ut til at cron jobben som er nødvendig for å støtta gjentakande transaksjonar aldri har køyrt. Dette er sjølvsagt normalt når du nettopp har installert Firefly III, men dette bør settast opp så snart som mogleg. Sjekk ut hjelp-sidene ved å bruka (?) -ikonet øvst i høgre hjørne på sida.', + 'recurring_cron_long_ago' => 'Det ser ut som det har gått meir enn 36 timer sida cron jobben for å støtta gjentakande transaksjonar har køyrt. Er du sikker på at den er satt opp rett? Sjekk ut hjelpe-sidene ved å bruka (?) -ikonet øvst i høgre hjørne på sida.', - 'create_new_recurrence' => 'Lag ny gjentakande transaksjon', - 'help_first_date' => 'Spesifiser den første forventa gjentakinga. Den må vera i framtida.', - 'help_first_date_no_past' => 'Spesifiser den første forventa gjentakinga. Firefly III vil ikkje oppretta transaksjonar i fortida.', - 'no_currency' => '(ingen valuta)', - 'mandatory_for_recurring' => 'Pålagt gjentakelses informasjon', - 'mandatory_for_transaction' => 'Pålagt transaksjons informasjon', - 'optional_for_recurring' => 'Valgfritt gjentakelses informasjon', - 'optional_for_transaction' => 'Valgfritt transaksjons informasjon', - 'change_date_other_options' => 'Ved å endra på "første dato" får du fleire val.', - 'mandatory_fields_for_tranaction' => 'Verdiane her vil enda opp i transaksjonen(ane) som vert oppretta', - 'click_for_calendar' => 'Trykk her for å få ein kalender som visar deg når transaksjonen vil gjenta seg.', - 'repeat_forever' => 'Gjenta for alltid', - 'repeat_until_date' => 'Gjenta til dato', - 'repeat_times' => 'Gjenta antal gonger', - 'recurring_skips_one' => 'Annankvar', - 'recurring_skips_more' => 'Hopper over :count forekomster', - 'store_new_recurrence' => 'Lagra gjentakande transaksjon', - 'stored_new_recurrence' => 'Gjentakande transaksjon ":title" lagra.', - 'edit_recurrence' => 'Rediger gjentakande transaksjon ":title"', - 'recurring_repeats_until' => 'Gjenta til :date', - 'recurring_repeats_forever' => 'Gjenta for alltid', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Oppdater gjentakande transaksjon', - 'updated_recurrence' => 'Oppdatert gjentakande transaksjon ":title"', - 'recurrence_is_inactive' => 'Denne gjentakande transaksjonen er ikkje aktiv og vil ikkje generera nye transaksjonar.', - 'delete_recurring' => 'Slett gjentakande transaksjon ":title"', - 'new_recurring_transaction' => 'Opprett gjentakande transaksjon', - 'help_weekend' => 'Kva skal Firefly III gjera når gjentakande transaksjon fell på ein Laurdag eller Søndag?', - 'do_nothing' => 'Berre opprett transaksjonen', - 'skip_transaction' => 'Hopp over forekomsten', - 'jump_to_friday' => 'Opprett transaksjonen på foregående Fredag i staden', - 'jump_to_monday' => 'Opprett transaksjonen på neste Måndag i staden', - 'will_jump_friday' => 'Opprettes på Fredag i staden for i helgane.', - 'will_jump_monday' => 'Opprettes på Måndag i staden for i helgane.', - 'except_weekends' => 'Unntatt helger', - 'recurrence_deleted' => 'Gjentakande transaksjon ":title" sletta', + 'create_new_recurrence' => 'Lag ny gjentakande transaksjon', + 'help_first_date' => 'Spesifiser den første forventa gjentakinga. Den må vera i framtida.', + 'help_first_date_no_past' => 'Spesifiser den første forventa gjentakinga. Firefly III vil ikkje oppretta transaksjonar i fortida.', + 'no_currency' => '(ingen valuta)', + 'mandatory_for_recurring' => 'Pålagt gjentakelses informasjon', + 'mandatory_for_transaction' => 'Pålagt transaksjons informasjon', + 'optional_for_recurring' => 'Valgfritt gjentakelses informasjon', + 'optional_for_transaction' => 'Valgfritt transaksjons informasjon', + 'change_date_other_options' => 'Ved å endra på "første dato" får du fleire val.', + 'mandatory_fields_for_tranaction' => 'Verdiane her vil enda opp i transaksjonen(ane) som vert oppretta', + 'click_for_calendar' => 'Trykk her for å få ein kalender som visar deg når transaksjonen vil gjenta seg.', + 'repeat_forever' => 'Gjenta for alltid', + 'repeat_until_date' => 'Gjenta til dato', + 'repeat_times' => 'Gjenta antal gonger', + 'recurring_skips_one' => 'Annankvar', + 'recurring_skips_more' => 'Hopper over :count forekomster', + 'store_new_recurrence' => 'Lagra gjentakande transaksjon', + 'stored_new_recurrence' => 'Gjentakande transaksjon ":title" lagra.', + 'edit_recurrence' => 'Rediger gjentakande transaksjon ":title"', + 'recurring_repeats_until' => 'Gjenta til :date', + 'recurring_repeats_forever' => 'Gjenta for alltid', + 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', + 'update_recurrence' => 'Oppdater gjentakande transaksjon', + 'updated_recurrence' => 'Oppdatert gjentakande transaksjon ":title"', + 'recurrence_is_inactive' => 'Denne gjentakande transaksjonen er ikkje aktiv og vil ikkje generera nye transaksjonar.', + 'delete_recurring' => 'Slett gjentakande transaksjon ":title"', + 'new_recurring_transaction' => 'Opprett gjentakande transaksjon', + 'help_weekend' => 'Kva skal Firefly III gjera når gjentakande transaksjon fell på ein Laurdag eller Søndag?', + 'do_nothing' => 'Berre opprett transaksjonen', + 'skip_transaction' => 'Hopp over forekomsten', + 'jump_to_friday' => 'Opprett transaksjonen på foregående Fredag i staden', + 'jump_to_monday' => 'Opprett transaksjonen på neste Måndag i staden', + 'will_jump_friday' => 'Opprettes på Fredag i staden for i helgane.', + 'will_jump_monday' => 'Opprettes på Måndag i staden for i helgane.', + 'except_weekends' => 'Unntatt helger', + 'recurrence_deleted' => 'Gjentakande transaksjon ":title" sletta', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balanse i (:currency)', - 'box_spent_in_currency' => 'Brukt (:currency)', - 'box_earned_in_currency' => 'Opptjent (:currency)', - 'box_budgeted_in_currency' => 'Budsjettert (:currency)', - 'box_bill_paid_in_currency' => 'Betalte faktura (:currency)', - 'box_bill_unpaid_in_currency' => 'Ubetalte faktura (:currency)', - 'box_left_to_spend_in_currency' => 'Att å bruka (:currency)', - 'box_net_worth_in_currency' => 'Net worth (:currency)', - 'box_spend_per_day' => 'Att å bruka per dag: :amount', + 'box_balance_in_currency' => 'Balanse i (:currency)', + 'box_spent_in_currency' => 'Brukt (:currency)', + 'box_earned_in_currency' => 'Opptjent (:currency)', + 'box_budgeted_in_currency' => 'Budsjettert (:currency)', + 'box_bill_paid_in_currency' => 'Betalte faktura (:currency)', + 'box_bill_unpaid_in_currency' => 'Ubetalte faktura (:currency)', + 'box_left_to_spend_in_currency' => 'Att å bruka (:currency)', + 'box_net_worth_in_currency' => 'Net worth (:currency)', + 'box_spend_per_day' => 'Att å bruka per dag: :amount', // debug page - 'debug_page' => 'Debug page', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Debug page', + 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', + 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', + 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', // object groups - 'object_groups_menu_bar' => 'Grupper', - 'object_groups_page_title' => 'Grupper', - 'object_groups_breadcrumb' => 'Grupper', - 'object_groups_index' => 'Oversikt', - 'object_groups' => 'Grupper', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Tittel', - 'edit_object_group' => 'Rediger gruppa «:title»', - 'delete_object_group' => 'Slett gruppa «:title»', - 'update_object_group' => 'Oppdater gruppe', - 'updated_object_group' => 'Gruppa «:title» vart oppdatert', - 'deleted_object_group' => 'Gruppa «:title» vart sletta', - 'object_group' => 'Gruppe', + 'object_groups_menu_bar' => 'Grupper', + 'object_groups_page_title' => 'Grupper', + 'object_groups_breadcrumb' => 'Grupper', + 'object_groups_index' => 'Oversikt', + 'object_groups' => 'Grupper', + 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', + 'object_group_title' => 'Tittel', + 'edit_object_group' => 'Rediger gruppa «:title»', + 'delete_object_group' => 'Slett gruppa «:title»', + 'update_object_group' => 'Oppdater gruppe', + 'updated_object_group' => 'Gruppa «:title» vart oppdatert', + 'deleted_object_group' => 'Gruppa «:title» vart sletta', + 'object_group' => 'Gruppe', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'La til :amount i sparegrisen «:name»', - 'ale_action_log_remove' => 'Fjerna :amount frå sparegrisen «:name»', - 'ale_action_clear_budget' => 'Fjerna frå budsjett', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Fjerna fra kategori', - 'ale_action_clear_notes' => 'Fjerna notat', - 'ale_action_clear_tag' => 'Fjerna nøkkelord', - 'ale_action_clear_all_tags' => 'Fjerna alle nøkkelord', - 'ale_action_set_bill' => 'Kopla til rekning', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Sett budsjett', - 'ale_action_set_category' => 'Sett kategori', - 'ale_action_set_source' => 'Sett kjeldekonto', - 'ale_action_set_destination' => 'Sett målkonto', - 'ale_action_update_transaction_type' => 'Endra transaksjonstype', - 'ale_action_update_notes' => 'Endra notat', - 'ale_action_update_description' => 'Endra beskriving', - 'ale_action_add_to_piggy' => 'Sparegris', - 'ale_action_remove_from_piggy' => 'Sparegris', - 'ale_action_add_tag' => 'La til nøkkelord', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'La til :amount i sparegrisen «:name»', + 'ale_action_log_remove' => 'Fjerna :amount frå sparegrisen «:name»', + 'ale_action_clear_budget' => 'Fjerna frå budsjett', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Fjerna fra kategori', + 'ale_action_clear_notes' => 'Fjerna notat', + 'ale_action_clear_tag' => 'Fjerna nøkkelord', + 'ale_action_clear_all_tags' => 'Fjerna alle nøkkelord', + 'ale_action_set_bill' => 'Kopla til rekning', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Sett budsjett', + 'ale_action_set_category' => 'Sett kategori', + 'ale_action_set_source' => 'Sett kjeldekonto', + 'ale_action_set_destination' => 'Sett målkonto', + 'ale_action_update_transaction_type' => 'Endra transaksjonstype', + 'ale_action_update_notes' => 'Endra notat', + 'ale_action_update_description' => 'Endra beskriving', + 'ale_action_add_to_piggy' => 'Sparegris', + 'ale_action_remove_from_piggy' => 'Sparegris', + 'ale_action_add_tag' => 'La til nøkkelord', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/nn_NO/form.php b/resources/lang/nn_NO/form.php index 2320b7dbea..4af82fed8a 100644 --- a/resources/lang/nn_NO/form.php +++ b/resources/lang/nn_NO/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Bankens namn', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Sparesaldo', - 'credit_card_limit' => 'Kredittkortgrense', - 'automatch' => 'Finn automatisk', - 'skip' => 'Hopp over', - 'enabled' => 'Aktivert', - 'name' => 'Namn', - 'active' => 'Aktiv', - 'amount_min' => 'Minimumsbeløp', - 'amount_max' => 'Maksimumsbeløp', - 'match' => 'Passar med', - 'strict' => 'Streng modus', - 'repeat_freq' => 'Gjentas', - 'object_group' => 'Gruppe', - 'location' => 'Sted', - 'update_channel' => 'Oppdater kanal', - 'currency_id' => 'Valuta', - 'transaction_currency_id' => 'Valuta', - 'auto_budget_currency_id' => 'Valuta', - 'external_ip' => 'Serverens eksterne IP', - 'attachments' => 'Vedlegg', - 'BIC' => 'BIC', - 'verify_password' => 'Bekreft passordsikkerhet', - 'source_account' => 'Kjeldekonto', - 'destination_account' => 'Målkonto', - 'asset_destination_account' => 'Destinasjonskonto', - 'include_net_worth' => 'Inkluder i formue', - 'asset_source_account' => 'Kjeldekonto', - 'journal_description' => 'Beskrivelse', - 'note' => 'Notat', - 'currency' => 'Valuta', - 'account_id' => 'Aktivakonto', - 'budget_id' => 'Budsjett', - 'bill_id' => 'Rekning', - 'opening_balance' => 'Inngående balanse', - 'tagMode' => 'Nøkkelordmodus', - 'virtual_balance' => 'Virtuell balanse', + 'bank_name' => 'Bankens namn', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Sparesaldo', + 'credit_card_limit' => 'Kredittkortgrense', + 'automatch' => 'Finn automatisk', + 'skip' => 'Hopp over', + 'enabled' => 'Aktivert', + 'name' => 'Namn', + 'active' => 'Aktiv', + 'amount_min' => 'Minimumsbeløp', + 'amount_max' => 'Maksimumsbeløp', + 'match' => 'Passar med', + 'strict' => 'Streng modus', + 'repeat_freq' => 'Gjentas', + 'object_group' => 'Gruppe', + 'location' => 'Sted', + 'update_channel' => 'Oppdater kanal', + 'currency_id' => 'Valuta', + 'transaction_currency_id' => 'Valuta', + 'auto_budget_currency_id' => 'Valuta', + 'external_ip' => 'Serverens eksterne IP', + 'attachments' => 'Vedlegg', + 'BIC' => 'BIC', + 'verify_password' => 'Bekreft passordsikkerhet', + 'source_account' => 'Kjeldekonto', + 'destination_account' => 'Målkonto', + 'asset_destination_account' => 'Destinasjonskonto', + 'include_net_worth' => 'Inkluder i formue', + 'asset_source_account' => 'Kjeldekonto', + 'journal_description' => 'Beskrivelse', + 'note' => 'Notat', + 'currency' => 'Valuta', + 'account_id' => 'Aktivakonto', + 'budget_id' => 'Budsjett', + 'bill_id' => 'Rekning', + 'opening_balance' => 'Inngående balanse', + 'tagMode' => 'Nøkkelordmodus', + 'virtual_balance' => 'Virtuell balanse', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Målbeløp', 'account_role' => 'Konto rolle', 'opening_balance_date' => 'Dato inngående saldo', @@ -176,11 +174,11 @@ return [ 'category_areYouSure' => 'Er du sikker på at du vil sletta kategorien ved namn ":name"?', 'recurring_areYouSure' => 'Er du sikker på at du vil sletta gjentakande transaksjonen ved namn ":title"?', 'currency_areYouSure' => 'Er du sikker på at du vil sletta valutaen ved namn ":name"?', - 'piggyBank_areYouSure' => 'Er du sikker på at du vil sletta sparegrisen ved namn ":name"?', + 'piggyBank_areYouSure' => 'Er du sikker på at du vil sletta sparegrisen som heiter ":name"?', 'journal_areYouSure' => 'Er du sikker på at du vil sletta transaksjonen med beskriving ":description"?', 'mass_journal_are_you_sure' => 'Er du sikker på at du vil sletta desse transaksjonene?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Er du sikker på at du ønskar å sletta nøkkelordet «:tag»?', 'journal_link_areYouSure' => 'Er du sikker på at du vil sletta koblingen mellom :source og :destination?', 'linkType_areYouSure' => 'Er du sikker på at du vil sletta koblingstypen ":name" (":inward" / ":outward")?', @@ -203,8 +200,8 @@ return [ 'also_delete_transactions_js' => 'Ingen transaksjonar|Den einaste transaksjonen som er knytt til denne kontoen, vil òg verta sletta| Alle {count} transaksjonar som er kopla til denne kontoen vil verta sletta.', 'also_delete_connections' => 'Den ene transaksjonen som er knytt til denne koblingstypen, vil miste denne forbindelsen. | Alle :count transaksjonar knytt til denne koblingstypen vil miste forbindelsen.', 'also_delete_rules' => 'Den ene regelen som er knytt til denne regelgruppen, vil òg verta sletta. | Alle dei :count reglane som er knytt til denne regelgruppen slettes òg.', - 'also_delete_piggyBanks' => 'Den ene sparegrisen som er kopla til denne kontoen, vil òg verta sletta. | Alle dei :count sparegrisane knytt til denne kontoen slettes òg.', - 'also_delete_piggyBanks_js' => 'Finner ingen sparegriser|Den einaste sparegrisen som er knytt til denne kontoen vil òg verta sletta.|Alle {count} sparegriser som er kopla til denne kontoen vil òg verta sletta.', + 'also_delete_piggyBanks' => 'Den eine sparegrisen som er kopla til denne kontoen vil og verta sletta. | Alle dei :count sparegrisane knytt til denne kontoen vert og sletta.', + 'also_delete_piggyBanks_js' => 'Ingen sparegrisar|Den einaste sparegrisen som er knytt til denne kontoen vil og verta sletta.|Alle {count} sparegrisane som er kopla til denne kontoen vil og verta sletta.', 'not_delete_piggy_banks' => 'Sparegrisen som er knytt til denne gruppen vil ikkje verta sletta.| Dei :count sparegrisane som er kopla til denne gruppen vil ikkje verta sletta.', 'bill_keep_transactions' => 'Ingen transaksjonar knytt til denne rekninga vert sletta.|Ingen av dei :count transaksjonane knytt til denne rekninga vil verta sletta.', 'budget_keep_transactions' => 'Ingen transaksjonar knytt til dette budsjettet vert sletta.|Ingen av dei :count transaksjonane knytt til dette budsjettet vil verta sletta.', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Sang', - // admin 'domain' => 'Domene', 'single_user_mode' => 'Deaktiver brukarregistrering', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS konto', 'local_account' => 'Firefly III konto', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Dato frå', - 'to_date' => 'Dato til', - 'due_date' => 'Forfallsdato', - 'payment_date' => 'Betalingsdato', - 'invoice_date' => 'Fakturadato', - 'internal_reference' => 'Intern referanse', - 'inward' => 'Innvendig beskriving', - 'outward' => 'Utvendig beskriving', - 'rule_group_id' => 'Regelgruppe', - 'transaction_description' => 'Transaksjonsbeskriving', - 'first_date' => 'Første dato', - 'transaction_type' => 'Transaksjonstype', - 'repeat_until' => 'Gjenta til', - 'recurring_description' => 'Gjentakande transaksjonsbeskriving', - 'repetition_type' => 'Type repetisjon', - 'foreign_currency_id' => 'Utenlandsk valuta', - 'repetition_end' => 'Repetisjon avsluttar', - 'repetitions' => 'Repetisjoner', - 'calendar' => 'Kalender', - 'weekend' => 'Helg', - 'client_secret' => 'Klient Hemmelegheit', - 'withdrawal_destination_id' => 'Målkonto', - 'deposit_source_id' => 'Kjeldekonto', - 'expected_on' => 'Forventet den', - 'paid' => 'Betalt', - 'auto_budget_type' => 'Auto-budsjett', - 'auto_budget_amount' => 'Auto-budsjett beløp', - 'auto_budget_period' => 'Auto-budsjett periode', - 'collected' => 'Innhentet', - 'submitted' => 'Innsendt', - 'key' => 'Nøkkel', - 'value' => 'Innhold i registeret', - 'webhook_delivery' => 'Levering', - 'webhook_response' => 'Respons', - 'webhook_trigger' => 'Utløser', + 'from_date' => 'Dato frå', + 'to_date' => 'Dato til', + 'due_date' => 'Forfallsdato', + 'payment_date' => 'Betalingsdato', + 'invoice_date' => 'Fakturadato', + 'internal_reference' => 'Intern referanse', + 'inward' => 'Innvendig beskriving', + 'outward' => 'Utvendig beskriving', + 'rule_group_id' => 'Regelgruppe', + 'transaction_description' => 'Transaksjonsbeskriving', + 'first_date' => 'Første dato', + 'transaction_type' => 'Transaksjonstype', + 'repeat_until' => 'Gjenta til', + 'recurring_description' => 'Gjentakande transaksjonsbeskriving', + 'repetition_type' => 'Type repetisjon', + 'foreign_currency_id' => 'Utenlandsk valuta', + 'repetition_end' => 'Repetisjon avsluttar', + 'repetitions' => 'Repetisjoner', + 'calendar' => 'Kalender', + 'weekend' => 'Helg', + 'client_secret' => 'Klient Hemmelegheit', + 'withdrawal_destination_id' => 'Målkonto', + 'deposit_source_id' => 'Kjeldekonto', + 'expected_on' => 'Forventet den', + 'paid' => 'Betalt', + 'auto_budget_type' => 'Auto-budsjett', + 'auto_budget_amount' => 'Auto-budsjett beløp', + 'auto_budget_period' => 'Auto-budsjett periode', + 'collected' => 'Innhentet', + 'submitted' => 'Innsendt', + 'key' => 'Nøkkel', + 'value' => 'Innhold i registeret', + 'webhook_delivery' => 'Levering', + 'webhook_response' => 'Respons', + 'webhook_trigger' => 'Utløser', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/nn_NO/intro.php b/resources/lang/nn_NO/intro.php index f17a2281c2..5efb0a9245 100644 --- a/resources/lang/nn_NO/intro.php +++ b/resources/lang/nn_NO/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Velkomen til indekssida i Firefly III. Ta deg tid til å gå gjennom denne introduksjonen for å få ein følelse av korleis Firefly III fungerar.', - 'index_accounts-chart' => 'Dette diagrammet visar gjeldande saldo på aktivakontoane dine. Du kan velga kontoane som er synlige her under innstillinger.', - 'index_box_out_holder' => 'Denne lille boksen og boksane ved sida av gjer deg ei rask oversikt over din økonomiske situasjon.', - 'index_help' => 'Om du treng hjelp til ein side eller eit skjema, trykker du på denne knappen.', - 'index_outro' => 'Dei fleste sidene av Firefly III vil starte med ein liten gjennomgang slik som denne. Ta kontakt med meg om du har spørsmål eller kommentarar. Sett igang!', - 'index_sidebar-toggle' => 'For å oppretta nye transaksjonar, kontoar eller andre ting, bruk menyen under dette ikonet.', - 'index_cash_account' => 'Dette er kontoane som er oppretta så langt. Du kan bruka kontantkontoen til å spore kontantutgifter, men det er sjølvsagt ikkje obligatorisk.', + 'index_intro' => 'Velkomen til indekssida i Firefly III. Ta deg tid til å gå gjennom denne introduksjonen for å få ein følelse av korleis Firefly III fungerar.', + 'index_accounts-chart' => 'Dette diagrammet visar gjeldande saldo på aktivakontoane dine. Du kan velga kontoane som er synlige her under innstillinger.', + 'index_box_out_holder' => 'Denne lille boksen og boksane ved sida av gjer deg ei rask oversikt over din økonomiske situasjon.', + 'index_help' => 'Om du treng hjelp til ein side eller eit skjema, trykker du på denne knappen.', + 'index_outro' => 'Dei fleste sidene av Firefly III vil starte med ein liten gjennomgang slik som denne. Ta kontakt med meg om du har spørsmål eller kommentarar. Sett igang!', + 'index_sidebar-toggle' => 'For å oppretta nye transaksjonar, kontoar eller andre ting, bruk menyen under dette ikonet.', + 'index_cash_account' => 'Dette er kontoane som er oppretta så langt. Du kan bruka kontantkontoen til å spore kontantutgifter, men det er sjølvsagt ikkje obligatorisk.', // transactions - 'transactions_create_basic_info' => 'Skriv inn grunnleggende informasjon om din transaksjon. Kjelde, destinasjon, dato og beskriving.', - 'transactions_create_amount_info' => 'Angi mengde for transaksjonen. Om nødvendig vil felta auto-oppdatera for utenlansk beløp info.', - 'transactions_create_optional_info' => 'Alle desse felta er valgfrie. Å legga til meta-data her vil gjera transaksjonane dine betre organisert.', - 'transactions_create_split' => 'Om du vil dele ein transaksjon, kan du legga til fleire deler med denne knappen', + 'transactions_create_basic_info' => 'Skriv inn grunnleggende informasjon om din transaksjon. Kjelde, destinasjon, dato og beskriving.', + 'transactions_create_amount_info' => 'Angi mengde for transaksjonen. Om nødvendig vil felta auto-oppdatera for utenlansk beløp info.', + 'transactions_create_optional_info' => 'Alle desse felta er valgfrie. Å legga til meta-data her vil gjera transaksjonane dine betre organisert.', + 'transactions_create_split' => 'Om du vil dele ein transaksjon, kan du legga til fleire deler med denne knappen', // create account: - 'accounts_create_iban' => 'Gi kontoane dine ein gyldig IBAN. Dette gjer dataimport lettare i framtida.', - 'accounts_create_asset_opening_balance' => 'Aktivakontoar kan ha ein "åpningssaldo" som indikerar starten på denne kontoens historie i Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III støttar fleire valutaer. Aktivakontoar har ein hovedvaluta, som du må definera her.', - 'accounts_create_asset_virtual' => 'Nokon gonger kan det hjelpa å gje kontoen din ein virtuell saldo: eit ekstra beløp vert alltid lagt til eller fjerna frå den faktiske saldoen.', + 'accounts_create_iban' => 'Gi kontoane dine ein gyldig IBAN. Dette gjer dataimport lettare i framtida.', + 'accounts_create_asset_opening_balance' => 'Aktivakontoar kan ha ein "åpningssaldo" som indikerar starten på denne kontoens historie i Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III støttar fleire valutaer. Aktivakontoar har ein hovedvaluta, som du må definera her.', + 'accounts_create_asset_virtual' => 'Nokon gonger kan det hjelpa å gje kontoen din ein virtuell saldo: eit ekstra beløp vert alltid lagt til eller fjerna frå den faktiske saldoen.', // budgets index - 'budgets_index_intro' => 'Budsjett vert brukt til å handtera økonomien din og er ein av kjernefunksjonane i Firefly III.', - 'budgets_index_set_budget' => 'Sett ditt totale budsjett for kvar periode så Firefly III kan fortelja deg om du har budsjettert med alle tilgjengelege pengar.', - 'budgets_index_see_expenses_bar' => 'Når du brukar pengar vil denne linja fyllast opp.', - 'budgets_index_navigate_periods' => 'Naviger gjennom periodar for å enkelt definera budsjett på førehand.', - 'budgets_index_new_budget' => 'Opprett nye budsjett etter behov.', - 'budgets_index_list_of_budgets' => 'Bruk denne tabellen til å angi beløp for kvart budsjett og sjå korleis du klarar deg.', - 'budgets_index_outro' => 'Om du vil vita meir om budsjettering, trykk på hjelp-ikonet øvst til høgre.', + 'budgets_index_intro' => 'Budsjett vert brukt til å handtera økonomien din og er ein av kjernefunksjonane i Firefly III.', + 'budgets_index_see_expenses_bar' => 'Når du brukar pengar vil denne linja fyllast opp.', + 'budgets_index_navigate_periods' => 'Naviger gjennom periodar for å enkelt definera budsjett på førehand.', + 'budgets_index_new_budget' => 'Opprett nye budsjett etter behov.', + 'budgets_index_list_of_budgets' => 'Bruk denne tabellen til å angi beløp for kvart budsjett og sjå korleis du klarar deg.', + 'budgets_index_outro' => 'Om du vil vita meir om budsjettering, trykk på hjelp-ikonet øvst til høgre.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Bruk desse rapportane for å få detaljert innsikt i din økonomi.', - 'reports_index_inputReportType' => 'Vel ein rapporttype. Sjekk ut hjelpesidene for å sjå kva kvar rapport visar deg.', - 'reports_index_inputAccountsSelect' => 'Du kan ekskludere eller inkludere aktivakontoar etter eget ønske.', - 'reports_index_inputDateRange' => 'Den valde datoperioden er heilt opp til deg: frå ein dag, og opptil 10 år.', - 'reports_index_extra-options-box' => 'Avhengig av kva rapport du har valt, kan du velga ekstra filter og alternativ her. Følg med på denne boksen når du endrer rapporttypar.', + 'reports_index_intro' => 'Bruk desse rapportane for å få detaljert innsikt i din økonomi.', + 'reports_index_inputReportType' => 'Vel ein rapporttype. Sjekk ut hjelpesidene for å sjå kva kvar rapport visar deg.', + 'reports_index_inputAccountsSelect' => 'Du kan ekskludere eller inkludere aktivakontoar etter eget ønske.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Avhengig av kva rapport du har valt, kan du velga ekstra filter og alternativ her. Følg med på denne boksen når du endrer rapporttypar.', // reports (reports) - 'reports_report_default_intro' => 'Denne rapporten gjer deg ein rask og omfattende oversikt over økonomien din. Om du ønskar å sjå noko anna her, ikkje nøl med å kontakta meg!', - 'reports_report_audit_intro' => 'Denne rapporten gjer deg detaljert innsikt i aktivakontoane dine.', - 'reports_report_audit_optionsBox' => 'Bruk desse avkrysningsboksane for å vise eller skjule kolonnane du er interessert i.', + 'reports_report_default_intro' => 'Denne rapporten gjer deg ein rask og omfattende oversikt over økonomien din. Om du ønskar å sjå noko anna her, ikkje nøl med å kontakta meg!', + 'reports_report_audit_intro' => 'Denne rapporten gjer deg detaljert innsikt i aktivakontoane dine.', + 'reports_report_audit_optionsBox' => 'Bruk desse avkrysningsboksane for å vise eller skjule kolonnane du er interessert i.', - 'reports_report_category_intro' => 'Denne rapporten gjer deg innblikk i ein eller fleire kategoriar.', - 'reports_report_category_pieCharts' => 'Desse diagramma gjer deg innblikk i utgifter og inntekt per kategori eller per konto.', - 'reports_report_category_incomeAndExpensesChart' => 'Dette diagrammet visar dine utgifter og inntekter per kategori.', + 'reports_report_category_intro' => 'Denne rapporten gjer deg innblikk i ein eller fleire kategoriar.', + 'reports_report_category_pieCharts' => 'Desse diagramma gjer deg innblikk i utgifter og inntekt per kategori eller per konto.', + 'reports_report_category_incomeAndExpensesChart' => 'Dette diagrammet visar dine utgifter og inntekter per kategori.', - 'reports_report_tag_intro' => 'Denne rapporten gjer deg innblikk i ein eller fleire nøkkelord.', - 'reports_report_tag_pieCharts' => 'Desse diagramma gjer deg innblikk i utgifter og inntekter per nøkkelord, konto, kategori eller budsjett.', - 'reports_report_tag_incomeAndExpensesChart' => 'Dette diagrammet visar dine utgifter og inntekter per nøkkelord.', + 'reports_report_tag_intro' => 'Denne rapporten gjer deg innblikk i ein eller fleire nøkkelord.', + 'reports_report_tag_pieCharts' => 'Desse diagramma gjer deg innblikk i utgifter og inntekter per nøkkelord, konto, kategori eller budsjett.', + 'reports_report_tag_incomeAndExpensesChart' => 'Dette diagrammet visar dine utgifter og inntekter per nøkkelord.', 'reports_report_budget_intro' => 'Denne rapporten gjer deg innblikk i eit eller fleire budsjett.', 'reports_report_budget_pieCharts' => 'Desse diagramma gjer deg innblikk i utgifter og inntekter per budsjett eller per konto.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Ved sida av denne fremdriftslinjen er det to knapper (+ og -) for å legga til eller fjerna pengar frå kvar sparegris.', 'piggy-banks_index_accountStatus' => 'For kvar aktivakonto med minst ein sparegris er statusen oppført i denne tabellen.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Kva er målet ditt? Ein ny sofa, eit kamera, pengar til uforutsette utgifter?', 'piggy-banks_create_date' => 'Du kan angi ein måldato eller ein frist for din sparegris.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Bruk rekningar for å spore kor mange pengar du skal betala for kvar periode. Tenk på utgifter som leie, forsikring eller nedbetaling av boliglån.', 'bills_create_name' => 'Bruk eit beskrivende namn som "Leie" eller "Helseforsikring".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Vel minimum og maksimumsbeløp for denne rekninga.', 'bills_create_repeat_freq_holder' => 'Dei fleste rekningar gjentas månadleg, men du kan angi ein annan frekvens her.', 'bills_create_skip_holder' => 'Om ein rekning gjentas kvar andre veke, skal "hopp over" -feltet settes til "1" for å hoppe over annankvar veke.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Bruk denne knappen for å sjå kva eksisterande transaksjonar som samsvarer med regelen din.', 'rules_create_actions' => 'Sett så mange handlinger som du vil.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Fleire alternativ er tilgjengeleg bak desse fanene.', diff --git a/resources/lang/nn_NO/list.php b/resources/lang/nn_NO/list.php index ea1e16efa6..8ba354f282 100644 --- a/resources/lang/nn_NO/list.php +++ b/resources/lang/nn_NO/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Knapper', - 'icon' => 'Ikon', - 'id' => 'ID', - 'create_date' => 'Opprettet', - 'update_date' => 'Oppdatert', - 'updated_at' => 'Oppdatert', - 'balance_before' => 'Saldo før', - 'balance_after' => 'Saldo etter', - 'name' => 'Namn', - 'role' => 'Rolle', - 'currentBalance' => 'Noverande saldo', - 'linked_to_rules' => 'Relevante reglar', - 'active' => 'Er aktiv?', - 'percentage' => 'pst.', - 'recurring_transaction' => 'Gjentakande transaksjon', - 'next_due' => 'Neste frist', - 'transaction_type' => 'Type', - 'lastActivity' => 'Siste aktivitet', - 'balanceDiff' => 'Saldodifferanse', - 'other_meta_data' => 'Andre meta-data', - 'invited_at' => 'Invitert', - 'expires' => 'Invitasjonen går ut på dato', - 'invited_by' => 'Invitert av', - 'invite_link' => 'Invitasjonslenkje', - 'account_type' => 'Kontotype', - 'created_at' => 'Opprettet', - 'account' => 'Konto', - 'external_url' => 'Ekstern URL', - 'matchingAmount' => 'Beløp', - 'destination' => 'Mål', - 'source' => 'Kjelde', - 'next_expected_match' => 'Neste forventa treff', - 'automatch' => 'Automatisk treff?', + 'buttons' => 'Knapper', + 'icon' => 'Ikon', + 'id' => 'ID', + 'create_date' => 'Opprettet', + 'update_date' => 'Oppdatert', + 'updated_at' => 'Oppdatert', + 'balance_before' => 'Saldo før', + 'balance_after' => 'Saldo etter', + 'name' => 'Namn', + 'role' => 'Rolle', + 'currentBalance' => 'Noverande saldo', + 'linked_to_rules' => 'Relevante reglar', + 'active' => 'Er aktiv?', + 'percentage' => 'pst.', + 'recurring_transaction' => 'Gjentakande transaksjon', + 'next_due' => 'Neste frist', + 'transaction_type' => 'Type', + 'lastActivity' => 'Siste aktivitet', + 'balanceDiff' => 'Saldodifferanse', + 'other_meta_data' => 'Andre meta-data', + 'invited_at' => 'Invitert', + 'expires' => 'Invitasjonen går ut på dato', + 'invited_by' => 'Invitert av', + 'invite_link' => 'Invitasjonslenkje', + 'account_type' => 'Kontotype', + 'created_at' => 'Opprettet', + 'account' => 'Konto', + 'external_url' => 'Ekstern URL', + 'matchingAmount' => 'Beløp', + 'destination' => 'Mål', + 'source' => 'Kjelde', + 'next_expected_match' => 'Neste forventa treff', + 'automatch' => 'Automatisk treff?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Gjentas', 'description' => 'Beskriving', 'amount' => 'Beløp', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Konto med bunq', 'file_name' => 'Filnamn', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Filstørrelse', - 'file_type' => 'Filtype', - 'attached_to' => 'Knyttet til', - 'file_exists' => 'Filen eksisterer', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Siste innlogging', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'bunq betalings ID', - 'repetitions' => 'Repetisjoner', - 'title' => 'Tittel', - 'transaction_s' => 'Transaksjoner', - 'field' => 'Felt', - 'value' => 'Verdi', - 'interest' => 'Renter', - 'interest_period' => 'Renteperiode', - 'liability_type' => 'Type gjeld', - 'liability_direction' => 'Gjeld inn/ut', - 'end_date' => 'Sluttdato', - 'payment_info' => 'Betalingsinformasjon', - 'expected_info' => 'Neste forventa transaksjon', - 'start_date' => 'Start dato', - 'trigger' => 'Utløser', - 'response' => 'Respons', - 'delivery' => 'Levering', - 'url' => 'Nettadresse', - 'secret' => 'Hemmelegheit', - + 'file_size' => 'Filstørrelse', + 'file_type' => 'Filtype', + 'attached_to' => 'Knyttet til', + 'file_exists' => 'Filen eksisterer', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Siste innlogging', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'bunq betalings ID', + 'repetitions' => 'Repetisjoner', + 'title' => 'Tittel', + 'transaction_s' => 'Transaksjoner', + 'field' => 'Felt', + 'value' => 'Verdi', + 'interest' => 'Renter', + 'interest_period' => 'Renteperiode', + 'liability_type' => 'Type gjeld', + 'liability_direction' => 'Gjeld inn/ut', + 'end_date' => 'Sluttdato', + 'payment_info' => 'Betalingsinformasjon', + 'expected_info' => 'Neste forventa transaksjon', + 'start_date' => 'Start dato', + 'trigger' => 'Utløser', + 'response' => 'Respons', + 'delivery' => 'Levering', + 'url' => 'Nettadresse', + 'secret' => 'Hemmelegheit', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/nn_NO/pagination.php b/resources/lang/nn_NO/pagination.php index 8635a89058..ca98fe5f7b 100644 --- a/resources/lang/nn_NO/pagination.php +++ b/resources/lang/nn_NO/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nn_NO/passwords.php b/resources/lang/nn_NO/passwords.php index c6bd17c0bd..96329155eb 100644 --- a/resources/lang/nn_NO/passwords.php +++ b/resources/lang/nn_NO/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/nn_NO/rules.php b/resources/lang/nn_NO/rules.php index 25978424a3..48c1fd32d7 100644 --- a/resources/lang/nn_NO/rules.php +++ b/resources/lang/nn_NO/rules.php @@ -1,6 +1,5 @@ 'Firefly III finn ikkje abonnementet «:name»', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'Transaksjonen har ingen nøkkelord å fjerna', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III finn ikkje nøkkelordet «:tag»', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/nn_NO/validation.php b/resources/lang/nn_NO/validation.php index b5e902ae5f..e549a36c7a 100644 --- a/resources/lang/nn_NO/validation.php +++ b/resources/lang/nn_NO/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Matrise mangler "where"-klausul', - 'missing_update' => 'Matrise mangler "update"-klausul', - 'invalid_where_key' => 'JSON inneheld ein ugyldig nøkkel for "where"-klausulen', - 'invalid_update_key' => 'JSON inneheld ein ugyldig nøkkel for "update"-klausulen', - 'invalid_query_data' => 'Det eksisterar ugyldig data i %s:%s -feltet for din spørring.', - 'invalid_query_account_type' => 'Spørringa inneheld kontoar av ulike typer, det er ikkje tillatt.', - 'invalid_query_currency' => 'Søket inneheld kontoar som har ulike valuta-innstillingar, det er ikkje tillatt.', - 'iban' => 'Dette er ikkje ein gyldig IBAN.', - 'zero_or_more' => 'Verdien kan ikkje vera negativ.', - 'date_or_time' => 'Verdien må vera eit gyldig dato- eller klokkeslettformat (ISO 8601).', - 'source_equals_destination' => 'Kjeldekontoen er lik destinasjonskonto.', - 'unique_account_number_for_user' => 'Det ser ut som dette kontonummeret er allereie i bruk.', - 'unique_iban_for_user' => 'Det ser ut som dette IBAN er allereie i bruk.', - 'deleted_user' => 'På grunn av sikkerhetsbegrensninger kan du ikkje registreres med denne e-postadresse.', - 'rule_trigger_value' => 'Denne verdien er ugyldig for den valde triggeren.', - 'rule_action_value' => 'Denne verdien er ugyldig for den valde handlinga.', - 'file_already_attached' => 'Opplastede fil ":name" er allereie knytt til dette objektet.', - 'file_attached' => 'Opplasting av fil ":name" var vellukka.', - 'must_exist' => 'IDen i feltet :attribute eksisterar ikkje i databasen.', - 'all_accounts_equal' => 'Alle kontoar i dette feltet må vera like.', - 'group_title_mandatory' => 'Ein gruppetittel er obligatorisk når det er meir enn ein transaksjon.', - 'transaction_types_equal' => 'Alle deler må vera av samme type.', - 'invalid_transaction_type' => 'Ugyldig transaksjonstype.', - 'invalid_selection' => 'Dine val er ugyldig.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Trenger minst ein transaksjon.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Det er for mange sendte transaksjonar som ikkje passar til sine respektive databaseoppføringar. Pass på at eksisterende oppføringer har ein gyldig ID.', - 'id_does_not_match' => 'Innsendt ID #:id samsvarar ikkje med forventa ID. Kontroller at den samsvarer, eller utelat feltet.', - 'at_least_one_repetition' => 'Trenge minst ei gjentaking.', - 'require_repeat_until' => 'Krever enten eit antal repetisjoner eller ein slutt dato (gjentas til). Ikke begge.', - 'require_currency_info' => 'Innhaldet i dette feltet er ugyldig uten valutainformasjon.', - 'not_transfer_account' => 'Denne kontoen er ikkje ein konto som kan benyttes for overføringer.', - 'require_currency_amount' => 'Innhaldet i dette feltet er ugyldig uten utenlandsk beløpsinformasjon.', - 'require_foreign_currency' => 'Dette feltet krever eit tal', - 'require_foreign_dest' => 'Denne feltverdien må samsvare med valutaen til målkontoen.', - 'require_foreign_src' => 'Denne feltverdien må samsvare med valutaen til kildekontoen.', - 'equal_description' => 'Transaksjonsbeskrivinga bør ikkje vera lik global beskriving.', - 'file_invalid_mime' => 'Kan ikkje akseptere fil ":name" av typen ":mime" for opplasting.', - 'file_too_large' => '":name"-filen er for stor.', - 'belongs_to_user' => 'Verdien av :attribute er ukjent.', - 'accepted' => ':attribute må verta godtatt.', - 'bic' => 'Dette er ikkje ein gyldig BIC.', - 'at_least_one_trigger' => 'Regel må ha minst ein trigger.', - 'at_least_one_active_trigger' => 'Regel må ha minst ein aktiv trigger.', - 'at_least_one_action' => 'Regel må ha minst ein aksjon.', - 'at_least_one_active_action' => 'Regel må ha minst ein aktiv handling.', - 'base64' => 'Dette er ikkje godkjent base64 kodet data.', - 'model_id_invalid' => 'Den angitte ID er ugyldig for denne modellen.', - 'less' => ':attribute må vera mindre enn 10,000,000', - 'active_url' => ':attribute er ikkje ein gyldig URL.', - 'after' => ':attribute må vera ein dato etter :date.', - 'date_after' => 'Startdatoen må vera før sluttdato.', - 'alpha' => ':attribute kan kun innehalda bokstavar.', - 'alpha_dash' => ':attribute kan berre innehalda bokstavar, tal og bindestrekar.', - 'alpha_num' => ':attribute kan berre inneholda bokstavar og tal.', - 'array' => ':attribute må vera ein liste.', - 'unique_for_user' => 'Det eksisterar allereie ein førekomst med :attribute.', - 'before' => ':attribute må vera ein dato før :date.', - 'unique_object_for_user' => 'Dette namnet er allereie i bruk.', - 'unique_account_for_user' => 'Dette konto namnet er allereie i bruk.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Matrise mangler "where"-klausul', + 'missing_update' => 'Matrise mangler "update"-klausul', + 'invalid_where_key' => 'JSON inneheld ein ugyldig nøkkel for "where"-klausulen', + 'invalid_update_key' => 'JSON inneheld ein ugyldig nøkkel for "update"-klausulen', + 'invalid_query_data' => 'Det eksisterar ugyldig data i %s:%s -feltet for din spørring.', + 'invalid_query_account_type' => 'Spørringa inneheld kontoar av ulike typer, det er ikkje tillatt.', + 'invalid_query_currency' => 'Søket inneheld kontoar som har ulike valuta-innstillingar, det er ikkje tillatt.', + 'iban' => 'Dette er ikkje ein gyldig IBAN.', + 'zero_or_more' => 'Verdien kan ikkje vera negativ.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Verdien må vera eit gyldig dato- eller klokkeslettformat (ISO 8601).', + 'source_equals_destination' => 'Kjeldekontoen er lik destinasjonskonto.', + 'unique_account_number_for_user' => 'Det ser ut som dette kontonummeret er allereie i bruk.', + 'unique_iban_for_user' => 'Det ser ut som dette IBAN er allereie i bruk.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'På grunn av sikkerhetsbegrensninger kan du ikkje registreres med denne e-postadresse.', + 'rule_trigger_value' => 'Denne verdien er ugyldig for den valde triggeren.', + 'rule_action_value' => 'Denne verdien er ugyldig for den valde handlinga.', + 'file_already_attached' => 'Opplastede fil ":name" er allereie knytt til dette objektet.', + 'file_attached' => 'Opplasting av fil ":name" var vellukka.', + 'must_exist' => 'IDen i feltet :attribute eksisterar ikkje i databasen.', + 'all_accounts_equal' => 'Alle kontoar i dette feltet må vera like.', + 'group_title_mandatory' => 'Ein gruppetittel er obligatorisk når det er meir enn ein transaksjon.', + 'transaction_types_equal' => 'Alle deler må vera av samme type.', + 'invalid_transaction_type' => 'Ugyldig transaksjonstype.', + 'invalid_selection' => 'Dine val er ugyldig.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Trenger minst ein transaksjon.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Det er for mange sendte transaksjonar som ikkje passar til sine respektive databaseoppføringar. Pass på at eksisterende oppføringer har ein gyldig ID.', + 'id_does_not_match' => 'Innsendt ID #:id samsvarar ikkje med forventa ID. Kontroller at den samsvarer, eller utelat feltet.', + 'at_least_one_repetition' => 'Trenge minst ei gjentaking.', + 'require_repeat_until' => 'Krever enten eit antal repetisjoner eller ein slutt dato (gjentas til). Ikke begge.', + 'require_currency_info' => 'Innhaldet i dette feltet er ugyldig uten valutainformasjon.', + 'not_transfer_account' => 'Denne kontoen er ikkje ein konto som kan benyttes for overføringer.', + 'require_currency_amount' => 'Innhaldet i dette feltet er ugyldig uten utenlandsk beløpsinformasjon.', + 'require_foreign_currency' => 'Dette feltet krever eit tal', + 'require_foreign_dest' => 'Denne feltverdien må samsvare med valutaen til målkontoen.', + 'require_foreign_src' => 'Denne feltverdien må samsvare med valutaen til kildekontoen.', + 'equal_description' => 'Transaksjonsbeskrivinga bør ikkje vera lik global beskriving.', + 'file_invalid_mime' => 'Kan ikkje akseptere fil ":name" av typen ":mime" for opplasting.', + 'file_too_large' => '":name"-filen er for stor.', + 'belongs_to_user' => 'Verdien av :attribute er ukjent.', + 'accepted' => ':attribute må verta godtatt.', + 'bic' => 'Dette er ikkje ein gyldig BIC.', + 'at_least_one_trigger' => 'Regel må ha minst ein trigger.', + 'at_least_one_active_trigger' => 'Regel må ha minst ein aktiv trigger.', + 'at_least_one_action' => 'Regel må ha minst ein aksjon.', + 'at_least_one_active_action' => 'Regel må ha minst ein aktiv handling.', + 'base64' => 'Dette er ikkje godkjent base64 kodet data.', + 'model_id_invalid' => 'Den angitte ID er ugyldig for denne modellen.', + 'less' => ':attribute må vera mindre enn 10,000,000', + 'active_url' => ':attribute er ikkje ein gyldig URL.', + 'after' => ':attribute må vera ein dato etter :date.', + 'date_after' => 'Startdatoen må vera før sluttdato.', + 'alpha' => ':attribute kan kun innehalda bokstavar.', + 'alpha_dash' => ':attribute kan berre innehalda bokstavar, tal og bindestrekar.', + 'alpha_num' => ':attribute kan berre inneholda bokstavar og tal.', + 'array' => ':attribute må vera ein liste.', + 'unique_for_user' => 'Det eksisterar allereie ein førekomst med :attribute.', + 'before' => ':attribute må vera ein dato før :date.', + 'unique_object_for_user' => 'Dette namnet er allereie i bruk.', + 'unique_account_for_user' => 'Dette konto namnet er allereie i bruk.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute må vera ein verdi mellom :min og :max.', + 'between.file' => ':attribute må vera mellom :min og :max kilobyte.', + 'between.string' => ':attribute må vera mellom :min og :max teikn.', + 'between.array' => ':attribute må ha mellom :min og :max element.', + 'boolean' => ':attribute må vera sann eller usann.', + 'confirmed' => ':attribute bekreftelsen stemmer ikkje overens.', + 'date' => ':attribute er ikkje ein gyldig dato.', + 'date_format' => ':attribute samsvarer ikkje med formatet :format.', + 'different' => ':attribute og :other må vera forskjellig.', + 'digits' => ':attribute må vera :digits sifre.', + 'digits_between' => ':attribute må vera mellom :min og :max sifre.', + 'email' => ':attribute må vera ein gyldig epostaddresse.', + 'filled' => ':attribute må fyllast ut.', + 'exists' => 'Den valde :attribute er ikkje gyldig.', + 'image' => ':attribute må vera eit bilde.', + 'in' => 'Den valde :attribute er ikkje gyldig.', + 'integer' => ':attribute må vera eit heltall.', + 'ip' => ':attribute må vera ein gyldig IP-addresse.', + 'json' => ':attribute må vera ein gyldig JSON streng.', + 'max.numeric' => ':attribute ikkje kan vera større enn :max.', + 'max.file' => ':attribute ikkje kan vera større enn :max kilobytes.', + 'max.string' => ':attribute ikkje kan vera større enn :max teikn.', + 'max.array' => ':attribute kan ikkje innehalda meir enn :max element.', + 'mimes' => ':attribute må vera ein fil av type: :values.', + 'min.numeric' => ':attribute må vera minst :min.', + 'lte.numeric' => ':attribute må vera mindre enn eller lik :value.', + 'min.file' => ':attribute må vera minst :min kilobytes.', + 'min.string' => ':attribute må vera minst :min teikn.', + 'min.array' => ':attribute må innehalde minst :min element.', + 'not_in' => 'Den valde :attribute er ikkje gyldig.', + 'numeric' => ':attribute må vera eit tal.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Den normale beløpet må vera eit nummer.', + 'numeric_destination' => 'Destinasjons beløpet må vera eit nummer.', + 'numeric_source' => 'Kjelde beløpet må vera eit nummer.', + 'regex' => ':attribute formatet er ugyldig.', + 'required' => ':attribute feltet må fyllast ut.', + 'required_if' => ':attribute feltet er påkrevd når :other er :value.', + 'required_unless' => ':attribute feltet er påkrevd om ikkje :other er i :values.', + 'required_with' => ':attribute feltet er nødvendig når :values er tilstede.', + 'required_with_all' => ':attribute feltet er nødvendig når :values er tilstede.', + 'required_without' => ':attribute er påkrevd når :values ikkje er definert.', + 'required_without_all' => ':attribute er påkrevd når ingen av :values er definert.', + 'same' => ':attribute og :other må vera like.', + 'size.numeric' => ':attribute må vera :size.', + 'amount_min_over_max' => 'Minimumsbeløpet kan ikkje vera større enn maksimumsbeløpet.', + 'size.file' => ':attribute må vera :size kilobyte.', + 'size.string' => ':attribute må vera :size teikn.', + 'size.array' => ':attribute må innehalda :size element.', + 'unique' => ':attribute har allereie vorte tatt.', + 'string' => ':attribute må vera ein streng.', + 'url' => ':attribute formatet er ugyldig.', + 'timezone' => ':attribute må vera ein gyldig tidssone.', + '2fa_code' => ':attribute formatet er ugyldig.', + 'dimensions' => ':attribute har ugyldig bilde dimensjoner.', + 'distinct' => ':attribute feltet har ein duplikatverdi.', + 'file' => ':attribute må vera ein fil.', + 'in_array' => 'Feltet :attribute eksisterar ikkje i :other.', + 'present' => ':attribute feltet må vera definert.', + 'amount_zero' => 'Totalbeløpet kan ikkje vera null.', + 'current_target_amount' => 'Det noverande beløpet må vera mindre enn målbeløpet.', + 'unique_piggy_bank_for_user' => 'Namnet på sparegris må vera unik.', + 'unique_object_group' => 'Gruppenamnet må vera unikt', + 'starts_with' => 'Verdien må starte med :values.', + 'unique_webhook' => 'Du har allereie ein webhook med denne kombinasjonen URL, utløser, respons og levering.', + 'unique_existing_webhook' => 'Du har allereie ein annan webhook med denne kombinasjonen URL, utløser, respons og levering.', + 'same_account_type' => 'Begge kontoar må vera av samme kontotype', + 'same_account_currency' => 'Begge kontoar må ha samme valuta-innstilling', - 'between.numeric' => ':attribute må vera ein verdi mellom :min og :max.', - 'between.file' => ':attribute må vera mellom :min og :max kilobyte.', - 'between.string' => ':attribute må vera mellom :min og :max teikn.', - 'between.array' => ':attribute må ha mellom :min og :max element.', - 'boolean' => ':attribute må vera sann eller usann.', - 'confirmed' => ':attribute bekreftelsen stemmer ikkje overens.', - 'date' => ':attribute er ikkje ein gyldig dato.', - 'date_format' => ':attribute samsvarer ikkje med formatet :format.', - 'different' => ':attribute og :other må vera forskjellig.', - 'digits' => ':attribute må vera :digits sifre.', - 'digits_between' => ':attribute må vera mellom :min og :max sifre.', - 'email' => ':attribute må vera ein gyldig epostaddresse.', - 'filled' => ':attribute må fyllast ut.', - 'exists' => 'Den valde :attribute er ikkje gyldig.', - 'image' => ':attribute må vera eit bilde.', - 'in' => 'Den valde :attribute er ikkje gyldig.', - 'integer' => ':attribute må vera eit heltall.', - 'ip' => ':attribute må vera ein gyldig IP-addresse.', - 'json' => ':attribute må vera ein gyldig JSON streng.', - 'max.numeric' => ':attribute ikkje kan vera større enn :max.', - 'max.file' => ':attribute ikkje kan vera større enn :max kilobytes.', - 'max.string' => ':attribute ikkje kan vera større enn :max teikn.', - 'max.array' => ':attribute kan ikkje innehalda meir enn :max element.', - 'mimes' => ':attribute må vera ein fil av type: :values.', - 'min.numeric' => ':attribute må vera minst :min.', - 'lte.numeric' => ':attribute må vera mindre enn eller lik :value.', - 'min.file' => ':attribute må vera minst :min kilobytes.', - 'min.string' => ':attribute må vera minst :min teikn.', - 'min.array' => ':attribute må innehalde minst :min element.', - 'not_in' => 'Den valde :attribute er ikkje gyldig.', - 'numeric' => ':attribute må vera eit tal.', - 'numeric_native' => 'Den normale beløpet må vera eit nummer.', - 'numeric_destination' => 'Destinasjons beløpet må vera eit nummer.', - 'numeric_source' => 'Kjelde beløpet må vera eit nummer.', - 'regex' => ':attribute formatet er ugyldig.', - 'required' => ':attribute feltet må fyllast ut.', - 'required_if' => ':attribute feltet er påkrevd når :other er :value.', - 'required_unless' => ':attribute feltet er påkrevd om ikkje :other er i :values.', - 'required_with' => ':attribute feltet er nødvendig når :values er tilstede.', - 'required_with_all' => ':attribute feltet er nødvendig når :values er tilstede.', - 'required_without' => ':attribute er påkrevd når :values ikkje er definert.', - 'required_without_all' => ':attribute er påkrevd når ingen av :values er definert.', - 'same' => ':attribute og :other må vera like.', - 'size.numeric' => ':attribute må vera :size.', - 'amount_min_over_max' => 'Minimumsbeløpet kan ikkje vera større enn maksimumsbeløpet.', - 'size.file' => ':attribute må vera :size kilobyte.', - 'size.string' => ':attribute må vera :size teikn.', - 'size.array' => ':attribute må innehalda :size element.', - 'unique' => ':attribute har allereie vorte tatt.', - 'string' => ':attribute må vera ein streng.', - 'url' => ':attribute formatet er ugyldig.', - 'timezone' => ':attribute må vera ein gyldig tidssone.', - '2fa_code' => ':attribute formatet er ugyldig.', - 'dimensions' => ':attribute har ugyldig bilde dimensjoner.', - 'distinct' => ':attribute feltet har ein duplikatverdi.', - 'file' => ':attribute må vera ein fil.', - 'in_array' => 'Feltet :attribute eksisterar ikkje i :other.', - 'present' => ':attribute feltet må vera definert.', - 'amount_zero' => 'Totalbeløpet kan ikkje vera null.', - 'current_target_amount' => 'Det noverande beløpet må vera mindre enn målbeløpet.', - 'unique_piggy_bank_for_user' => 'Namnet på sparegris må vera unik.', - 'unique_object_group' => 'Gruppenamnet må vera unikt', - 'starts_with' => 'Verdien må starte med :values.', - 'unique_webhook' => 'Du har allereie ein webhook med denne kombinasjonen URL, utløser, respons og levering.', - 'unique_existing_webhook' => 'Du har allereie ein annan webhook med denne kombinasjonen URL, utløser, respons og levering.', - 'same_account_type' => 'Begge kontoar må vera av samme kontotype', - 'same_account_currency' => 'Begge kontoar må ha samme valuta-innstilling', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Dette er ikkje eit sikkert passord. Ver venleg å prøv igjen. For meir informasjon, sjå https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Ugyldig repetisjons type for gjentakande transaksjonar.', - 'valid_recurrence_rep_moment' => 'Ugyldig repetisjons tid for denne type repetisjon.', - 'invalid_account_info' => 'Ugyldig konto informasjon.', - 'attributes' => [ + 'secure_password' => 'Dette er ikkje eit sikkert passord. Ver venleg å prøv igjen. For meir informasjon, sjå https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Ugyldig repetisjons type for gjentakande transaksjonar.', + 'valid_recurrence_rep_moment' => 'Ugyldig repetisjons tid for denne type repetisjon.', + 'invalid_account_info' => 'Ugyldig konto informasjon.', + 'attributes' => [ 'email' => 'epostadresse', 'description' => 'beskriving', 'amount' => 'beløp', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Trenger ein gyldig kilde konto-ID og/eller gyldig kilde kontonamn for å fortsetja.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Kunne ikkje finna ein gyldig målkonto ved søk etter ID ":id" eller namn ":name".', + 'withdrawal_source_need_data' => 'Trenger ein gyldig kilde konto-ID og/eller gyldig kilde kontonamn for å fortsetja.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Kunne ikkje finna ein gyldig målkonto ved søk etter ID ":id" eller namn ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Kunne ikkje finna ein gyldig avstemmingskonto ved søk etter ID ":id" eller namn ":name".', + 'reconciliation_source_bad_data' => 'Kunne ikkje finna ein gyldig avstemmingskonto ved søk etter ID ":id" eller namn ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Trenger ein gyldig kilde konto-ID og/eller gyldig kilde kontonamn for å fortsetja.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Kunne ikkje finna ein gyldig destinasjons konto ved å søke etter ID ":id" eller namn ":name".', - 'deposit_dest_wrong_type' => 'Den oppgitte målkontoen er ikkje av rett type.', + 'deposit_source_need_data' => 'Trenger ein gyldig kilde konto-ID og/eller gyldig kilde kontonamn for å fortsetja.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Kunne ikkje finna ein gyldig destinasjons konto ved å søke etter ID ":id" eller namn ":name".', + 'deposit_dest_wrong_type' => 'Den oppgitte målkontoen er ikkje av rett type.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Trenger ein gyldig kilde konto-ID og/eller gyldig kilde kontonamn for å fortsetja.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Kunne ikkje finna ein gyldig destinasjons konto ved å søke etter ID ":id" eller namn ":name".', + 'need_id_in_edit' => 'Kvar del må ha transaction_journal_id (enten gyldig ID eller 0).', - 'transfer_source_need_data' => 'Trenger ein gyldig kilde konto-ID og/eller gyldig kilde kontonamn for å fortsetja.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Kunne ikkje finna ein gyldig destinasjons konto ved å søke etter ID ":id" eller namn ":name".', - 'need_id_in_edit' => 'Kvar del må ha transaction_journal_id (enten gyldig ID eller 0).', + 'ob_source_need_data' => 'Trenger ein gyldig kjeldekonto ID og/eller gyldig kjeldekonto namn for å fortsetja.', + 'lc_source_need_data' => 'Trenger ein gyldig kjeldekonto ID for å fortsetja.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Kunne ikkje finna ein gyldig destinasjonskonto ved søk etter ID ":id" eller namn ":name".', + 'reconciliation_either_account' => 'For å utføre ein avstemming, må du enten oppgi ein kilde eller ein målkonto. Ikke begge eller ingen.', - 'ob_source_need_data' => 'Trenger ein gyldig kjeldekonto ID og/eller gyldig kjeldekonto namn for å fortsetja.', - 'lc_source_need_data' => 'Trenger ein gyldig kjeldekonto ID for å fortsetja.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Kunne ikkje finna ein gyldig destinasjonskonto ved søk etter ID ":id" eller namn ":name".', - 'reconciliation_either_account' => 'For å utføre ein avstemming, må du enten oppgi ein kilde eller ein målkonto. Ikke begge eller ingen.', + 'generic_invalid_source' => 'Du kan ikkje bruka denne kontoen som kildekonto.', + 'generic_invalid_destination' => 'Du kan ikkje bruka denne kontoen som destinasjonskonto.', - 'generic_invalid_source' => 'Du kan ikkje bruka denne kontoen som kildekonto.', - 'generic_invalid_destination' => 'Du kan ikkje bruka denne kontoen som destinasjonskonto.', + 'generic_no_source' => 'Du må sende inn kontoinformasjon eller sende inn transaksjons-journal-ID.', + 'generic_no_destination' => 'Du må sende inn kontoinformasjon om mottakerkontoen, eller sende inn ein transaksjons-journal-ID.', - 'generic_no_source' => 'Du må sende inn kontoinformasjon eller sende inn transaksjons-journal-ID.', - 'generic_no_destination' => 'Du må sende inn kontoinformasjon om mottakerkontoen, eller sende inn ein transaksjons-journal-ID.', - - 'gte.numeric' => ':attribute må vera større enn eller lik :value.', - 'gt.numeric' => ':attribute må vera større enn :value.', - 'gte.file' => ':attribute må vera større enn eller lik :value kilobyte.', - 'gte.string' => ':attribute må vera større enn eller lik :value teikn.', - 'gte.array' => ':attribute må ha :value element eller meir.', + 'gte.numeric' => ':attribute må vera større enn eller lik :value.', + 'gt.numeric' => ':attribute må vera større enn :value.', + 'gte.file' => ':attribute må vera større enn eller lik :value kilobyte.', + 'gte.string' => ':attribute må vera større enn eller lik :value teikn.', + 'gte.array' => ':attribute må ha :value element eller meir.', 'amount_required_for_auto_budget' => 'Beløpet er påkrevd.', 'auto_budget_amount_positive' => 'Beløpet må vera meir enn null.', + 'auto_budget_period_mandatory' => 'Auto budsjett perioden er eit obligatorisk felt.', // no access to administration: diff --git a/resources/lang/pl_PL/api.php b/resources/lang/pl_PL/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/pl_PL/api.php +++ b/resources/lang/pl_PL/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/pl_PL/auth.php b/resources/lang/pl_PL/auth.php index 9c31c409e4..9ca1db9331 100644 --- a/resources/lang/pl_PL/auth.php +++ b/resources/lang/pl_PL/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Te poświadczenia nie zgadzają się z naszymi danymi.', 'throttle' => 'Zbyt wiele prób logowania. Spróbuj ponownie za :seconds sekund.', diff --git a/resources/lang/pl_PL/breadcrumbs.php b/resources/lang/pl_PL/breadcrumbs.php index 37d178b930..58af73bf06 100644 --- a/resources/lang/pl_PL/breadcrumbs.php +++ b/resources/lang/pl_PL/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Strona główna', - 'budgets' => 'Budżety', - 'subscriptions' => 'Subskrypcje', - 'transactions' => 'Transakcje', - 'title_expenses' => 'Wydatki', - 'title_withdrawal' => 'Wydatki', - 'title_revenue' => 'Przychody / dochody', - 'title_deposit' => 'Przychód / dochód', - 'title_transfer' => 'Transfery', - 'title_transfers' => 'Transfery', - 'edit_currency' => 'Modyfikuj walutę ":name"', - 'delete_currency' => 'Usuń walutę ":name"', - 'newPiggyBank' => 'Utwórz nową skarbonkę', - 'edit_piggyBank' => 'Modyfikuj skarbonkę ":name"', - 'preferences' => 'Preferencje', - 'profile' => 'Profil', - 'accounts' => 'Konta', - 'changePassword' => 'Zmień swoje hasło', - 'change_email' => 'Zmień swój adres e-mail', - 'bills' => 'Rachunki', - 'newBill' => 'Nowy rachunek', - 'edit_bill' => 'Modyfikuj rachunek ":name"', - 'delete_bill' => 'Usuń rachunek ":name"', - 'reports' => 'Raporty', - 'search_result' => 'Wyniki wyszukiwania dla ":query"', - 'withdrawal_list' => 'Wydatki', - 'Withdrawal_list' => 'Wydatki', - 'deposit_list' => 'Przychody, dochody oraz depozyty', - 'transfer_list' => 'Transfery', - 'transfers_list' => 'Transfery', + 'home' => 'Strona główna', + 'budgets' => 'Budżety', + 'subscriptions' => 'Subskrypcje', + 'transactions' => 'Transakcje', + 'title_expenses' => 'Wydatki', + 'title_withdrawal' => 'Wydatki', + 'title_revenue' => 'Przychody / dochody', + 'title_deposit' => 'Przychód / dochód', + 'title_transfer' => 'Transfery', + 'title_transfers' => 'Transfery', + 'edit_currency' => 'Modyfikuj walutę ":name"', + 'delete_currency' => 'Usuń walutę ":name"', + 'newPiggyBank' => 'Utwórz nową skarbonkę', + 'edit_piggyBank' => 'Modyfikuj skarbonkę ":name"', + 'preferences' => 'Preferencje', + 'profile' => 'Profil', + 'accounts' => 'Konta', + 'changePassword' => 'Zmień swoje hasło', + 'change_email' => 'Zmień swój adres e-mail', + 'bills' => 'Rachunki', + 'newBill' => 'Nowy rachunek', + 'edit_bill' => 'Modyfikuj rachunek ":name"', + 'delete_bill' => 'Usuń rachunek ":name"', + 'reports' => 'Raporty', + 'search_result' => 'Wyniki wyszukiwania dla ":query"', + 'withdrawal_list' => 'Wydatki', + 'Withdrawal_list' => 'Wydatki', + 'deposit_list' => 'Przychody, dochody oraz depozyty', + 'transfer_list' => 'Transfery', + 'transfers_list' => 'Transfery', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Uzgodnienia', 'create_withdrawal' => 'Utwórz nową wypłatę', 'create_deposit' => 'Utwórz nową wpłatę', diff --git a/resources/lang/pl_PL/components.php b/resources/lang/pl_PL/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/pl_PL/components.php +++ b/resources/lang/pl_PL/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/pl_PL/config.php b/resources/lang/pl_PL/config.php index 2b0b1ef11d..51123ec55d 100644 --- a/resources/lang/pl_PL/config.php +++ b/resources/lang/pl_PL/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'pl', - 'locale' => 'pl_PL.utf8, pl_PL.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'pl', + 'locale' => 'pl_PL.utf8, pl_PL.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'D MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'D MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd D MMMM, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd D MMMM, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'D MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'D MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'D MMMM YYYY [o] HH:mm:ss', + 'date_time_fns' => 'do MMMM yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'D MMMM YYYY [o] HH:mm:ss', - 'date_time_fns' => 'do MMMM yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'tydzień' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'tydzień' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\k\w Q YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\k\w Q YYYY', - - 'quarter_fns' => "'kwartał' Q, yyyy", - 'half_year_fns' => "'{half} półrocze' yyyy", - 'dow_1' => 'Poniedziałek', - 'dow_2' => 'Wtorek', - 'dow_3' => 'Środa', - 'dow_4' => 'Czwartek', - 'dow_5' => 'Piątek', - 'dow_6' => 'Sobota', - 'dow_7' => 'Niedziela', + 'quarter_fns' => "'kwartał' Q, yyyy", + 'half_year_fns' => "'{half} półrocze' yyyy", + 'dow_1' => 'Poniedziałek', + 'dow_2' => 'Wtorek', + 'dow_3' => 'Środa', + 'dow_4' => 'Czwartek', + 'dow_5' => 'Piątek', + 'dow_6' => 'Sobota', + 'dow_7' => 'Niedziela', ]; /* diff --git a/resources/lang/pl_PL/demo.php b/resources/lang/pl_PL/demo.php index d9a850d326..67eb7a7caa 100644 --- a/resources/lang/pl_PL/demo.php +++ b/resources/lang/pl_PL/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/pl_PL/email.php b/resources/lang/pl_PL/email.php index b4407e2a19..17d0432f62 100644 --- a/resources/lang/pl_PL/email.php +++ b/resources/lang/pl_PL/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Wiadomość testowa z twojej instalacji Firefly III', 'admin_test_body' => 'To jest wiadomość testowa z twojej instancji Firefly III. Została wysłana na :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Zaproszenie zostało utworzone', 'invitation_created_body' => 'Administrator ":email" utworzył zaproszenie dla użytkownika, które może być użyte przez każdego, kto ma dostęp do adresu e-mail ":invitee". Zaproszenie będzie ważne przez 48 godzin.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Resetowanie hasła:', 'registered_doc_link' => 'Dokumentacja:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Dostępna jest nowa wersja Firefly III', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Jeśli wolisz, możesz również otworzyć nowy problem na https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Pełny opis błędu znajduje się poniżej:', 'error_headers' => 'Istotne mogą być również następujące nagłówki:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III stworzył nową transakcję|Firefly III stworzył :count nowych transakcji', 'new_journals_header' => 'Firefly III stworzył dla Ciebie transakcję. Możesz znaleźć ją w Firefly III:|Firefly III stworzył dla Ciebie transakcje :count. Możesz je znaleźć w Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Twój rachunek **":name"** ma datę końcową :date. Ten moment minie **DZIŚ!**', 'bill_warning_extension_date_zero' => 'Twój rachunek **":name"** ma być przedłużony lub anulowany dnia :date. Ten moment minie **DZIŚ!**', 'bill_warning_please_action' => 'Proszę podejmij odpowiednie działania.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/pl_PL/errors.php b/resources/lang/pl_PL/errors.php index b1df84f31a..6e4cd01c38 100644 --- a/resources/lang/pl_PL/errors.php +++ b/resources/lang/pl_PL/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Ślad stosu', 'more_info' => 'Więcej informacji', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Więcej informacji znajdziesz w katalogu storage/logs, w który zawiera pliki dziennika. Jeśli używasz Docker, użyj docker logs -f [container].', - 'collect_info_more' => 'Więcej informacji o zbieraniu informacji o błędach możesz znaleźć w FAQ.', - 'github_help' => 'Uzyskaj pomoc na GitHub', - 'github_instructions' => 'Możesz otworzyć nowy problem na GitHub.', - 'use_search' => 'Użyj wyszukiwania!', - 'include_info' => 'Dołącz informacje z tej strony debugowania.', - 'tell_more' => 'Powiedz nam więcej niż "Nie działa!"', - 'include_logs' => 'Dołącz dzienniki błędów (patrz powyżej).', - 'what_did_you_do' => 'Powiedz nam, co robisz.', - 'offline_header' => 'Prawdopodobnie jesteś offline', - 'offline_unreachable' => 'Firefly III jest nieosiągalny. Twoje urządzenie jest obecnie offline lub serwer nie działa.', - 'offline_github' => 'Jeśli jesteś pewien, że Twoje urządzenie i serwer są online, otwórz zgłoszenie na GitHub.', - + 'collect_info' => 'Więcej informacji znajdziesz w katalogu storage/logs, w który zawiera pliki dziennika. Jeśli używasz Docker, użyj docker logs -f [container].', + 'collect_info_more' => 'Możesz przeczytać więcej o zbieraniu informacji o błędach w FAQ.', + 'github_help' => 'Uzyskaj pomoc na GitHub', + 'github_instructions' => 'Możesz otworzyć nowy problem na GitHub.', + 'use_search' => 'Użyj wyszukiwania!', + 'include_info' => 'Dołącz informacje z tej strony debugowania.', + 'tell_more' => 'Powiedz nam więcej niż "Nie działa!"', + 'include_logs' => 'Dołącz dzienniki błędów (patrz powyżej).', + 'what_did_you_do' => 'Powiedz nam, co robisz.', + 'offline_header' => 'Prawdopodobnie jesteś offline', + 'offline_unreachable' => 'Firefly III jest nieosiągalny. Twoje urządzenie jest obecnie offline lub serwer nie działa.', + 'offline_github' => 'Jeśli jesteś pewien, że Twoje urządzenie i serwer są online, otwórz zgłoszenie na GitHub.', ]; diff --git a/resources/lang/pl_PL/firefly.php b/resources/lang/pl_PL/firefly.php index 18e74c2f2f..43397aeaee 100644 --- a/resources/lang/pl_PL/firefly.php +++ b/resources/lang/pl_PL/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Zamknij', - 'actions' => 'Akcje', - 'edit' => 'Modyfikuj', - 'delete' => 'Usuń', - 'split' => 'Podziel', - 'single_split' => 'Podział', - 'clone' => 'Sklonuj', - 'confirm_action' => 'Potwierdź akcję', - 'last_seven_days' => 'Ostatnie 7 dni', - 'last_thirty_days' => 'Ostanie 30 dni', - 'last_180_days' => 'Ostatnie 180 dni', - 'month_to_date' => 'Miesiąc do daty', - 'year_to_date' => 'Rok do daty', - 'YTD' => 'Od początku roku', - 'welcome_back' => 'Co jest grane?', - 'everything' => 'Wszystko', - 'today' => 'dzisiaj', - 'customRange' => 'Niestandardowy zakres', - 'date_range' => 'Zakres dat', - 'apply' => 'Zastosuj', - 'select_date' => 'Wybierz datę...', - 'cancel' => 'Anuluj', - 'from' => 'Z', - 'to' => 'Do', - 'structure' => 'Struktura', - 'help_translating' => 'Tekst pomocy nie jest jeszcze dostępny po polsku. Może chcesz pomóc w tłumaczeniu?', - 'showEverything' => 'Pokaż wszystko', - 'never' => 'Nigdy', - 'no_results_for_empty_search' => 'Twoje zapytanie były puste, wiec nic nie zostało znalezione.', - 'removed_amount' => 'Usunięto :amount', - 'added_amount' => 'Dodano :amount', - 'asset_account_role_help' => 'Dodatkowe opcje wynikające z Twojego wyboru można ustawić później.', - 'Opening balance' => 'Bilans otwarcia', - 'create_new_stuff' => 'Utwórz nowe rzeczy', - 'new_withdrawal' => 'Nowa wypłata', - 'create_new_transaction' => 'Stwórz nową transakcję', - 'sidebar_frontpage_create' => 'Utwórz', - 'new_transaction' => 'Nowa transakcja', - 'no_rules_for_bill' => 'Ten rachunek nie ma przypisanych do niego reguł.', - 'go_to_asset_accounts' => 'Zobacz swoje konta aktywów', - 'go_to_budgets' => 'Przejdź do swoich budżetów', - 'go_to_withdrawals' => 'Przejdź do swoich wydatków', - 'clones_journal_x' => 'Ta transakcja jest sklonowana z transakcji ":description" (#:id)', - 'go_to_categories' => 'Przejdź do swoich kategorii', - 'go_to_bills' => 'Przejdź do swoich rachunków', - 'go_to_expense_accounts' => 'Zobacz swoje konta wydatków', - 'go_to_revenue_accounts' => 'Zobacz swoje konta przychodów', - 'go_to_piggies' => 'Przejdź do swoich skarbonek', - 'new_deposit' => 'Nowa wpłata', - 'new_transfer' => 'Nowy transfer', - 'new_transfers' => 'Nowy transfer', - 'new_asset_account' => 'Nowe konto aktywów', - 'new_expense_account' => 'Nowe konto wydatków', - 'new_revenue_account' => 'Nowe konto przychodów', - 'new_liabilities_account' => 'Nowe zobowiązanie', - 'new_budget' => 'Nowy budżet', - 'new_bill' => 'Nowy rachunek', - 'block_account_logout' => 'Zostałeś wylogowany. Zablokowane konta nie mogą korzystać z tej strony. Czy zarejestrowałeś się z prawidłowym adresem e-mail?', - 'flash_success' => 'Sukces!', - 'flash_info' => 'Komunikat', - 'flash_warning' => 'Ostrzeżenie!', - 'flash_error' => 'Błąd!', - 'flash_danger' => 'Uwaga!', - 'flash_info_multiple' => 'Jest jedna wiadomość|Jest :count wiadomości', - 'flash_error_multiple' => 'Jest jeden błąd|Jest :count błędów', - 'net_worth' => 'Wartość netto', - 'help_for_this_page' => 'Pomoc dla tej strony', - 'help_for_this_page_body' => 'Więcej informacji o tej stronie możesz znaleźć w dokumentacji.', - 'two_factor_welcome' => 'Cześć!', - 'two_factor_enter_code' => 'Aby kontynuować, wprowadź kod uwierzytelniania dwuskładnikowego. Twoja aplikacja może wygenerować go dla Ciebie.', - 'two_factor_code_here' => 'Wprowadź tutaj kod', - 'two_factor_title' => 'Weryfikacja dwuskładnikowa', - 'authenticate' => 'Uwierzytelnij', - 'two_factor_forgot_title' => 'Utracone uwierzytelnianie dwuskładnikowe', - 'two_factor_forgot' => 'Zapomniałem mojego uwierzytelnienia dwuskładnikowego.', - 'two_factor_lost_header' => 'Straciłeś uwierzytelnianie dwuskładnikowe?', - 'two_factor_lost_intro' => 'Jeżeli także nie masz kodów, to niestety nie masz szczęścia. To nie jest coś, co możemy naprawić z poziomu przeglądarki. Masz dwie opcje.', - 'two_factor_lost_fix_self' => 'Jeżeli masz własną instancję Firefly III, przeczytaj ten wpis w FAQ aby uzyskać instrukcje.', - 'two_factor_lost_fix_owner' => 'W przeciwnym razie, powiadom właściciela strony, :site_owner i poproś go o zresetowanie Twojego uwierzytelnienia dwuskładnikowego.', - 'mfa_backup_code' => 'Użyłeś kodu zapasowego do zalogowania się do Firefly III. Nie możesz go użyć ponownie, więc wykreśl go z listy.', - 'pref_two_factor_new_backup_codes' => 'Wygeneruj nowe kody zapasowe', - 'pref_two_factor_backup_code_count' => 'Masz :count poprawny kod zapasowy.|Masz :count poprawnych kodów zapasowych.', - '2fa_i_have_them' => 'Kody zapisane!', - 'warning_much_data' => 'Załadowanie danych z :days dni może trochę potrwać.', - 'registered' => 'Zarejestrowałeś się pomyślnie!', - 'Default asset account' => 'Domyślne konto aktywów', - 'no_budget_pointer' => 'Wygląda na to, że nie masz jeszcze budżetów. Powinieneś utworzyć kilka na stronie budżetów. Budżety mogą Ci pomóc śledzić wydatki.', - 'no_bill_pointer' => 'Wygląda na to, że nie masz jeszcze rachunków. Powinieneś utworzyć kilka na stronie rachunków. Rachunki mogą Ci pomóc śledzić wydatki.', - 'Savings account' => 'Konto oszczędnościowe', - 'Credit card' => 'Karta kredytowa', - 'source_accounts' => 'Konto źródłowe | Konta źródłowe', - 'destination_accounts' => 'Konto docelowe|Konta docelowe', - 'user_id_is' => 'Twój identyfikator użytkownika to :user', - 'field_supports_markdown' => 'To pole obsługuje Markdown.', - 'need_more_help' => 'Jeśli potrzebujesz dodatkowej pomocy w korzystaniu z Firefly III, proszę opisz go w zgłoszeniu na Githubie.', - 'reenable_intro_text' => 'Możesz także ponownie włączyć samouczek.', - 'intro_boxes_after_refresh' => 'Samouczek pojawi się po odświeżeniu strony.', - 'show_all_no_filter' => 'Pokaż wszystkie transakcje bez grupowania ich według daty.', - 'expenses_by_category' => 'Wydatki wg kategorii', - 'expenses_by_budget' => 'Wydatki wg budżetu', - 'income_by_category' => 'Dochody wg kategorii', - 'expenses_by_asset_account' => 'Wydatki wg kont aktywów', - 'expenses_by_expense_account' => 'Wydatki wg kont wydatków', - 'cannot_redirect_to_account' => 'Firefly III nie może Cię przekierować na właściwą stronę. Przepraszamy.', - 'sum_of_expenses' => 'Suma wydatków', - 'sum_of_income' => 'Suma dochodów', - 'liabilities' => 'Zobowiązania', - 'spent_in_specific_budget' => 'Wydatki w budżecie ":budget"', - 'spent_in_specific_double' => 'Wydano z kont(a) ":account"', - 'earned_in_specific_double' => 'Zarobiono na konto(a) ":account"', - 'source_account' => 'Konto źródłowe', - 'source_account_reconciliation' => 'Nie możesz edytować konta źródłowego transakcji uzgadniania.', - 'destination_account' => 'Konto docelowe', - 'destination_account_reconciliation' => 'Nie możesz edytować konta docelowego transakcji uzgadniania.', - 'sum_of_expenses_in_budget' => 'Wydano łącznie w budżecie ":budget"', - 'left_in_budget_limit' => 'Możliwe do wydania wg budżetu', - 'current_period' => 'Bieżący okres', - 'show_the_current_period_and_overview' => 'Pokaż bieżący okres oraz przegląd', - 'pref_languages_locale' => 'Aby język inny niż angielski działał poprawnie, twój system operacyjny musi być wyposażony w odpowiednie informacje o lokalizacji. Jeśli nie są one obecne, dane walutowe, daty i kwoty mogą być źle sformatowane.', - 'budget_in_period' => 'Wszystkie transakcje dla budżetu ":name" od :start do :end w :currency', - 'chart_budget_in_period' => 'Wykres wszystkich transakcji dla budżetu ":name" od :start do :end w :currency', - 'chart_budget_in_period_only_currency' => 'Kwota zaplanowanego budżetu była w :currency, więc ten wykres pokaże transakcje tylko w :currency.', - 'chart_account_in_period' => 'Wykres wszystkich transakcji dla konta ":name" (:balance) od :start do :end', - 'chart_category_in_period' => 'Wykres wszystkich transakcji dla kategorii ":name" od :start do :end', - 'chart_category_all' => 'Wykres wszystkich transakcji dla kategorii ":name"', - 'clone_withdrawal' => 'Zduplikuj tę wypłatę', - 'clone_deposit' => 'Zduplikuj tą wpłatę', - 'clone_transfer' => 'Zduplikuj ten transfer', - 'multi_select_no_selection' => 'Nie wybrano', - 'multi_select_select_all' => 'Zaznacz wszystkie', - 'multi_select_n_selected' => 'wybrane', - 'multi_select_all_selected' => 'Wybrano wszystko', - 'multi_select_filter_placeholder' => 'Znajdź...', - 'intro_next_label' => 'Dalej', - 'intro_prev_label' => 'Wstecz', - 'intro_skip_label' => 'Pomiń', - 'intro_done_label' => 'Gotowe', - 'between_dates_breadcrumb' => 'Pomiędzy :start a :end', - 'all_journals_without_budget' => 'Wszystkie transakcje bez budżetu', - 'journals_without_budget' => 'Transakcje bez budżetu', - 'all_journals_without_category' => 'Wszystkie transakcje bez kategorii', - 'journals_without_category' => 'Transakcje bez kategorii', - 'all_journals_for_account' => 'Wszystkie transakcje dla konta :name', - 'chart_all_journals_for_account' => 'Wykres wszystkich transakcji dla konta :name', - 'journals_in_period_for_account' => 'Wszystkie transakcje dla konta :name od :start do :end', - 'journals_in_period_for_account_js' => 'Wszystkie transakcje dla konta {title} od {start} do {end}', - 'transferred' => 'Przesłano', - 'all_withdrawal' => 'Wszystkie wydatki', - 'all_transactions' => 'Wszystkie transakcje', - 'title_withdrawal_between' => 'Wszystkie wydatki do :start do :end', - 'all_deposit' => 'Wszystkie przychody', - 'title_deposit_between' => 'Wszystkie przychody do :start do :end', - 'all_transfers' => 'Wszystkie transfery', - 'title_transfers_between' => 'Wszystkie transfery od :start do :end', - 'all_transfer' => 'Wszystkie transfery', - 'all_journals_for_tag' => 'Wszystkie transakcje dla tagu ":tag"', - 'title_transfer_between' => 'Wszystkie transfery od :start do :end', - 'all_journals_for_category' => 'Wszystkie transakcje dla kategorii :name', - 'all_journals_for_budget' => 'Wszystkie transakcje dla budżetu :name', - 'chart_all_journals_for_budget' => 'Wykres wszystkich transakcji dla budżetu :name', - 'journals_in_period_for_category' => 'Wszystkie transakcje dla kategorii :name od :start do :end', - 'journals_in_period_for_tag' => 'Wszystkie transakcje dla tagu :tag od :start do :end', - 'not_available_demo_user' => 'Funkcja, do której próbujesz uzyskać dostęp nie jest dostępna dla użytkowników demo.', - 'exchange_rate_instructions' => 'Konto aktywów "@name" obsługuje tylko transakcje w walucie @native_currency. Jeśli chcesz użyć waluty @foreign_currency, upewnij się, że kwota w @native_currency jest również znana:', - 'transfer_exchange_rate_instructions' => 'Konto źródłowe "@source_name" obsługuje tylko transakcje w walucie @source_currency. Konto docelowe "@dest_name" obsługuje tylko transakcje w walucie @dest_currency. Musisz podać przelewaną kwotę w obu walutach.', - 'transaction_data' => 'Dane transakcji', - 'invalid_server_configuration' => 'Nieprawidłowa konfiguracja serwera', - 'invalid_locale_settings' => 'Firefly III nie może sformatować kwot, ponieważ brakuje wymaganych pakietów na Twoim serwerze. Sprawdź instrukcje jak je zainstalować (po angielsku).', - 'quickswitch' => 'Szybki przełącznik', - 'sign_in_to_start' => 'Zaloguj się, aby rozpocząć sesję', - 'sign_in' => 'Zaloguj', - 'register_new_account' => 'Zarejestruj nowe konto', - 'forgot_my_password' => 'Nie pamiętam hasła', - 'problems_with_input' => 'Wystąpił problem z wprowadzonymi danymi.', - 'reset_password' => 'Zresetuj swoje hasło', - 'button_reset_password' => 'Zresetuj hasło', - 'reset_button' => 'Zresetuj', - 'want_to_login' => 'Chcę się zalogować', - 'login_page_title' => 'Zaloguj się do Firefly III', - 'register_page_title' => 'Zarejestruj się w Firefly III', - 'forgot_pw_page_title' => 'Nie pamiętam hasła do Firefly III', - 'reset_pw_page_title' => 'Resetowanie hasła do Firefly III', - 'cannot_reset_demo_user' => 'Nie można zresetować hasła dla użytkownika demonstracyjnego.', - 'no_att_demo_user' => 'Użytkownik demonstracyjny nie może przesyłać załączników.', - 'button_register' => 'Zarejestruj', - 'authorization' => 'Autoryzacja', - 'active_bills_only' => 'tylko aktywne rachunki', - 'active_bills_only_total' => 'wszystkie aktywne rachunki', - 'active_exp_bills_only' => 'tylko aktywne i oczekiwane rachunki', - 'active_exp_bills_only_total' => 'tylko aktywne i oczekiwane rachunki', - 'per_period_sum_1D' => 'Oczekiwane koszty dzienne', - 'per_period_sum_1W' => 'Oczekiwane koszty tygodniowe', - 'per_period_sum_1M' => 'Przewidywane koszty miesięczne', - 'per_period_sum_3M' => 'Oczekiwane koszty kwartalne', - 'per_period_sum_6M' => 'Oczekiwane koszty półroczne', - 'per_period_sum_1Y' => 'Oczekiwane koszty roczne', - 'average_per_bill' => 'średnia za rachunek', - 'expected_total' => 'oczekiwana suma', - 'reconciliation_account_name' => 'Uzgadnianie :name (:currency)', - 'saved' => 'Zapisano', - 'advanced_options' => 'Opcje zaawansowane', - 'advanced_options_explain' => 'Niektóre strony w Firefly III mają zaawansowane opcje ukryte pod tym przyciskiem. Ta strona niestety nie ma nic, ale sprawdź inne!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Zamknij', + 'actions' => 'Akcje', + 'edit' => 'Modyfikuj', + 'delete' => 'Usuń', + 'split' => 'Podziel', + 'single_split' => 'Podział', + 'clone' => 'Sklonuj', + 'clone_and_edit' => 'Sklonuj i modyfikuj', + 'confirm_action' => 'Potwierdź akcję', + 'last_seven_days' => 'Ostatnie 7 dni', + 'last_thirty_days' => 'Ostanie 30 dni', + 'last_180_days' => 'Ostatnie 180 dni', + 'month_to_date' => 'Miesiąc do daty', + 'year_to_date' => 'Rok do daty', + 'YTD' => 'Od początku roku', + 'welcome_back' => 'Co jest grane?', + 'everything' => 'Wszystko', + 'today' => 'dzisiaj', + 'customRange' => 'Niestandardowy zakres', + 'date_range' => 'Zakres dat', + 'apply' => 'Zastosuj', + 'select_date' => 'Wybierz datę...', + 'cancel' => 'Anuluj', + 'from' => 'Z', + 'to' => 'Do', + 'structure' => 'Struktura', + 'help_translating' => 'Tekst pomocy nie jest jeszcze dostępny po polsku. Może chcesz pomóc w tłumaczeniu?', + 'showEverything' => 'Pokaż wszystko', + 'never' => 'Nigdy', + 'no_results_for_empty_search' => 'Twoje zapytanie były puste, wiec nic nie zostało znalezione.', + 'removed_amount' => 'Usunięto :amount', + 'added_amount' => 'Dodano :amount', + 'asset_account_role_help' => 'Dodatkowe opcje wynikające z Twojego wyboru można ustawić później.', + 'Opening balance' => 'Bilans otwarcia', + 'create_new_stuff' => 'Utwórz nowe rzeczy', + 'new_withdrawal' => 'Nowa wypłata', + 'create_new_transaction' => 'Stwórz nową transakcję', + 'sidebar_frontpage_create' => 'Utwórz', + 'new_transaction' => 'Nowa transakcja', + 'no_rules_for_bill' => 'Ten rachunek nie ma przypisanych do niego reguł.', + 'go_to_asset_accounts' => 'Zobacz swoje konta aktywów', + 'go_to_budgets' => 'Przejdź do swoich budżetów', + 'go_to_withdrawals' => 'Przejdź do swoich wydatków', + 'clones_journal_x' => 'Ta transakcja jest sklonowana z transakcji ":description" (#:id)', + 'go_to_categories' => 'Przejdź do swoich kategorii', + 'go_to_bills' => 'Przejdź do swoich rachunków', + 'go_to_expense_accounts' => 'Zobacz swoje konta wydatków', + 'go_to_revenue_accounts' => 'Zobacz swoje konta przychodów', + 'go_to_piggies' => 'Przejdź do swoich skarbonek', + 'new_deposit' => 'Nowa wpłata', + 'new_transfer' => 'Nowy transfer', + 'new_transfers' => 'Nowy transfer', + 'new_asset_account' => 'Nowe konto aktywów', + 'new_expense_account' => 'Nowe konto wydatków', + 'new_revenue_account' => 'Nowe konto przychodów', + 'new_liabilities_account' => 'Nowe zobowiązanie', + 'new_budget' => 'Nowy budżet', + 'new_bill' => 'Nowy rachunek', + 'block_account_logout' => 'Zostałeś wylogowany. Zablokowane konta nie mogą korzystać z tej strony. Czy zarejestrowałeś się z prawidłowym adresem e-mail?', + 'flash_success' => 'Sukces!', + 'flash_info' => 'Komunikat', + 'flash_warning' => 'Ostrzeżenie!', + 'flash_error' => 'Błąd!', + 'flash_danger' => 'Uwaga!', + 'flash_info_multiple' => 'Jest jedna wiadomość|Jest :count wiadomości', + 'flash_error_multiple' => 'Jest jeden błąd|Jest :count błędów', + 'net_worth' => 'Wartość netto', + 'help_for_this_page' => 'Pomoc dla tej strony', + 'help_for_this_page_body' => 'Więcej informacji o tej stronie możesz znaleźć w dokumentacji.', + 'two_factor_welcome' => 'Cześć!', + 'two_factor_enter_code' => 'Aby kontynuować, wprowadź kod uwierzytelniania dwuskładnikowego. Twoja aplikacja może wygenerować go dla Ciebie.', + 'two_factor_code_here' => 'Wprowadź tutaj kod', + 'two_factor_title' => 'Weryfikacja dwuskładnikowa', + 'authenticate' => 'Uwierzytelnij', + 'two_factor_forgot_title' => 'Utracone uwierzytelnianie dwuskładnikowe', + 'two_factor_forgot' => 'Zapomniałem mojego uwierzytelnienia dwuskładnikowego.', + 'two_factor_lost_header' => 'Straciłeś uwierzytelnianie dwuskładnikowe?', + 'two_factor_lost_intro' => 'Jeżeli także nie masz kodów, to niestety nie masz szczęścia. To nie jest coś, co możemy naprawić z poziomu przeglądarki. Masz dwie opcje.', + 'two_factor_lost_fix_self' => 'Jeśli jesteś właścicielem tej instalacji Firefly III, przeczytaj :site_owner i poproś go o zresetowanie Twojego uwierzytelnienia dwuskładnikowego.', + 'mfa_backup_code' => 'Użyłeś kodu zapasowego do zalogowania się do Firefly III. Nie możesz go użyć ponownie, więc wykreśl go z listy.', + 'pref_two_factor_new_backup_codes' => 'Wygeneruj nowe kody zapasowe', + 'pref_two_factor_backup_code_count' => 'Masz :count poprawny kod zapasowy.|Masz :count poprawnych kodów zapasowych.', + '2fa_i_have_them' => 'Kody zapisane!', + 'warning_much_data' => 'Załadowanie danych z :days dni może trochę potrwać.', + 'registered' => 'Zarejestrowałeś się pomyślnie!', + 'Default asset account' => 'Domyślne konto aktywów', + 'no_budget_pointer' => 'Wygląda na to, że nie masz jeszcze budżetów. Powinieneś utworzyć kilka na stronie budżetów. Budżety mogą Ci pomóc śledzić wydatki.', + 'no_bill_pointer' => 'Wygląda na to, że nie masz jeszcze rachunków. Powinieneś utworzyć kilka na stronie rachunków. Rachunki mogą Ci pomóc śledzić wydatki.', + 'Savings account' => 'Konto oszczędnościowe', + 'Credit card' => 'Karta kredytowa', + 'source_accounts' => 'Konto źródłowe | Konta źródłowe', + 'destination_accounts' => 'Konto docelowe|Konta docelowe', + 'user_id_is' => 'Twój identyfikator użytkownika to :user', + 'field_supports_markdown' => 'To pole obsługuje Markdown.', + 'need_more_help' => 'Jeśli potrzebujesz dodatkowej pomocy w korzystaniu z Firefly III, proszę opisz go w zgłoszeniu na Githubie.', + 'reenable_intro_text' => 'Możesz także ponownie włączyć samouczek.', + 'intro_boxes_after_refresh' => 'Samouczek pojawi się po odświeżeniu strony.', + 'show_all_no_filter' => 'Pokaż wszystkie transakcje bez grupowania ich według daty.', + 'expenses_by_category' => 'Wydatki wg kategorii', + 'expenses_by_budget' => 'Wydatki wg budżetu', + 'income_by_category' => 'Dochody wg kategorii', + 'expenses_by_asset_account' => 'Wydatki wg kont aktywów', + 'expenses_by_expense_account' => 'Wydatki wg kont wydatków', + 'cannot_redirect_to_account' => 'Firefly III nie może Cię przekierować na właściwą stronę. Przepraszamy.', + 'sum_of_expenses' => 'Suma wydatków', + 'sum_of_income' => 'Suma dochodów', + 'liabilities' => 'Zobowiązania', + 'spent_in_specific_budget' => 'Wydatki w budżecie ":budget"', + 'spent_in_specific_double' => 'Wydano z kont(a) ":account"', + 'earned_in_specific_double' => 'Zarobiono na konto(a) ":account"', + 'source_account' => 'Konto źródłowe', + 'source_account_reconciliation' => 'Nie możesz edytować konta źródłowego transakcji uzgadniania.', + 'destination_account' => 'Konto docelowe', + 'destination_account_reconciliation' => 'Nie możesz edytować konta docelowego transakcji uzgadniania.', + 'sum_of_expenses_in_budget' => 'Wydano łącznie w budżecie ":budget"', + 'left_in_budget_limit' => 'Możliwe do wydania wg budżetu', + 'current_period' => 'Bieżący okres', + 'show_the_current_period_and_overview' => 'Pokaż bieżący okres oraz przegląd', + 'pref_languages_locale' => 'Aby język inny niż angielski działał poprawnie, twój system operacyjny musi być wyposażony w odpowiednie informacje o lokalizacji. Jeśli nie są one obecne, dane walutowe, daty i kwoty mogą być źle sformatowane.', + 'budget_in_period' => 'Wszystkie transakcje dla budżetu ":name" od :start do :end w :currency', + 'chart_budget_in_period' => 'Wykres wszystkich transakcji dla budżetu ":name" od :start do :end w :currency', + 'chart_budget_in_period_only_currency' => 'Kwota zaplanowanego budżetu była w :currency, więc ten wykres pokaże transakcje tylko w :currency.', + 'chart_account_in_period' => 'Wykres wszystkich transakcji dla konta ":name" (:balance) od :start do :end', + 'chart_category_in_period' => 'Wykres wszystkich transakcji dla kategorii ":name" od :start do :end', + 'chart_category_all' => 'Wykres wszystkich transakcji dla kategorii ":name"', + 'clone_withdrawal' => 'Zduplikuj tę wypłatę', + 'clone_deposit' => 'Zduplikuj tą wpłatę', + 'clone_transfer' => 'Zduplikuj ten transfer', + 'multi_select_no_selection' => 'Nie wybrano', + 'multi_select_select_all' => 'Zaznacz wszystkie', + 'multi_select_n_selected' => 'wybrane', + 'multi_select_all_selected' => 'Wybrano wszystko', + 'multi_select_filter_placeholder' => 'Znajdź...', + 'intro_next_label' => 'Dalej', + 'intro_prev_label' => 'Wstecz', + 'intro_skip_label' => 'Pomiń', + 'intro_done_label' => 'Gotowe', + 'between_dates_breadcrumb' => 'Pomiędzy :start a :end', + 'all_journals_without_budget' => 'Wszystkie transakcje bez budżetu', + 'journals_without_budget' => 'Transakcje bez budżetu', + 'all_journals_without_category' => 'Wszystkie transakcje bez kategorii', + 'journals_without_category' => 'Transakcje bez kategorii', + 'all_journals_for_account' => 'Wszystkie transakcje dla konta :name', + 'chart_all_journals_for_account' => 'Wykres wszystkich transakcji dla konta :name', + 'journals_in_period_for_account' => 'Wszystkie transakcje dla konta :name od :start do :end', + 'journals_in_period_for_account_js' => 'Wszystkie transakcje dla konta {title} od {start} do {end}', + 'transferred' => 'Przesłano', + 'all_withdrawal' => 'Wszystkie wydatki', + 'all_transactions' => 'Wszystkie transakcje', + 'title_withdrawal_between' => 'Wszystkie wydatki do :start do :end', + 'all_deposit' => 'Wszystkie przychody', + 'title_deposit_between' => 'Wszystkie przychody do :start do :end', + 'all_transfers' => 'Wszystkie transfery', + 'title_transfers_between' => 'Wszystkie transfery od :start do :end', + 'all_transfer' => 'Wszystkie transfery', + 'all_journals_for_tag' => 'Wszystkie transakcje dla tagu ":tag"', + 'title_transfer_between' => 'Wszystkie transfery od :start do :end', + 'all_journals_for_category' => 'Wszystkie transakcje dla kategorii :name', + 'all_journals_for_budget' => 'Wszystkie transakcje dla budżetu :name', + 'chart_all_journals_for_budget' => 'Wykres wszystkich transakcji dla budżetu :name', + 'journals_in_period_for_category' => 'Wszystkie transakcje dla kategorii :name od :start do :end', + 'journals_in_period_for_tag' => 'Wszystkie transakcje dla tagu :tag od :start do :end', + 'not_available_demo_user' => 'Funkcja, do której próbujesz uzyskać dostęp nie jest dostępna dla użytkowników demo.', + 'exchange_rate_instructions' => 'Konto aktywów "@name" obsługuje tylko transakcje w walucie @native_currency. Jeśli chcesz użyć waluty @foreign_currency, upewnij się, że kwota w @native_currency jest również znana:', + 'transfer_exchange_rate_instructions' => 'Konto źródłowe "@source_name" obsługuje tylko transakcje w walucie @source_currency. Konto docelowe "@dest_name" obsługuje tylko transakcje w walucie @dest_currency. Musisz podać przelewaną kwotę w obu walutach.', + 'transaction_data' => 'Dane transakcji', + 'invalid_server_configuration' => 'Nieprawidłowa konfiguracja serwera', + 'invalid_locale_settings' => 'Firefly III nie może sformatować kwot pieniężnych, ponieważ na Twoim serwerze brakuje wymaganych pakietów. Sprawdź instrukcje jak je zainstalować (po angielsku).', + 'quickswitch' => 'Szybki przełącznik', + 'sign_in_to_start' => 'Zaloguj się, aby rozpocząć sesję', + 'sign_in' => 'Zaloguj', + 'register_new_account' => 'Zarejestruj nowe konto', + 'forgot_my_password' => 'Nie pamiętam hasła', + 'problems_with_input' => 'Wystąpił problem z wprowadzonymi danymi.', + 'reset_password' => 'Zresetuj swoje hasło', + 'button_reset_password' => 'Zresetuj hasło', + 'reset_button' => 'Zresetuj', + 'want_to_login' => 'Chcę się zalogować', + 'login_page_title' => 'Zaloguj się do Firefly III', + 'register_page_title' => 'Zarejestruj się w Firefly III', + 'forgot_pw_page_title' => 'Nie pamiętam hasła do Firefly III', + 'reset_pw_page_title' => 'Resetowanie hasła do Firefly III', + 'cannot_reset_demo_user' => 'Nie można zresetować hasła dla użytkownika demonstracyjnego.', + 'no_att_demo_user' => 'Użytkownik demonstracyjny nie może przesyłać załączników.', + 'button_register' => 'Zarejestruj', + 'authorization' => 'Autoryzacja', + 'active_bills_only' => 'tylko aktywne rachunki', + 'active_bills_only_total' => 'wszystkie aktywne rachunki', + 'active_exp_bills_only' => 'tylko aktywne i oczekiwane rachunki', + 'active_exp_bills_only_total' => 'tylko aktywne i oczekiwane rachunki', + 'per_period_sum_1D' => 'Oczekiwane koszty dzienne', + 'per_period_sum_1W' => 'Oczekiwane koszty tygodniowe', + 'per_period_sum_1M' => 'Przewidywane koszty miesięczne', + 'per_period_sum_3M' => 'Oczekiwane koszty kwartalne', + 'per_period_sum_6M' => 'Oczekiwane koszty półroczne', + 'per_period_sum_1Y' => 'Oczekiwane koszty roczne', + 'average_per_bill' => 'średnia za rachunek', + 'expected_total' => 'oczekiwana suma', + 'reconciliation_account_name' => 'Uzgadnianie :name (:currency)', + 'saved' => 'Zapisano', + 'advanced_options' => 'Opcje zaawansowane', + 'advanced_options_explain' => 'Niektóre strony w Firefly III mają zaawansowane opcje ukryte pod tym przyciskiem. Ta strona niestety nie ma nic, ale sprawdź inne!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooki', - 'webhooks_breadcrumb' => 'Webhooki', - 'no_webhook_messages' => 'Brak wiadomości webhook', - 'webhook_trigger_STORE_TRANSACTION' => 'Po utworzeniu transakcji', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Po zmodyfikowaniu transakcji', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Po usunięciu transakcji', - 'webhook_response_TRANSACTIONS' => 'Szczegóły transakcji', - 'webhook_response_ACCOUNTS' => 'Szczegóły konta', - 'webhook_response_none_NONE' => 'Brak szczegółów', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Zbadaj', - 'create_new_webhook' => 'Utwórz nowy webhook', - 'webhooks_create_breadcrumb' => 'Utwórz nowy webhook', - 'webhook_trigger_form_help' => 'Wskaż zdarzenie do wyzwolenia webhook\'a', - 'webhook_response_form_help' => 'Wskaż, co webhook musi przesłać do adresu URL.', - 'webhook_delivery_form_help' => 'W jakim formacie webhook musi dostarczać dane.', - 'webhook_active_form_help' => 'Webhook musi być aktywny lub nie zostanie wywołany.', - 'stored_new_webhook' => 'Zapisano nowy webhook ":title"', - 'delete_webhook' => 'Usuń webhook', - 'deleted_webhook' => 'Usunięto webhook ":title"', - 'edit_webhook' => 'Edytuj webhook ":title"', - 'updated_webhook' => 'Zaktualizowano webhook ":title"', - 'edit_webhook_js' => 'Edytuj webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'Webhook został uruchomiony na wskazanej transakcji. Poczekaj na wyniki.', - 'webhook_messages' => 'Wiadomość webhook\'a', - 'view_message' => 'Podgląd wiadomości', - 'view_attempts' => 'Podgląd nieudanych prób', - 'message_content_title' => 'Treść wiadomości webhook\'a', - 'message_content_help' => 'To jest zawartość wiadomości, która została wysłana (lub próbowano wysłać) za pomocą tego webhooka.', - 'attempt_content_title' => 'Próby dostępu do webhook', - 'attempt_content_help' => 'To są wszystkie nieudane próby przesłania tej wiadomości webhooka do skonfigurowanego adresu URL. Po pewnym czasie Firefly III przestanie próbować.', - 'no_attempts' => 'Nie ma nieudanych prób. To dobrze!', - 'webhook_attempt_at' => 'Próba o {moment}', - 'logs' => 'Logi', - 'response' => 'Odpowiedź', - 'visit_webhook_url' => 'Odwiedź adres URL webhooka', - 'reset_webhook_secret' => 'Resetuj sekret webhooka', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") został zapisany.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") został zaktualizowany.', + 'webhooks' => 'Webhooki', + 'webhooks_breadcrumb' => 'Webhooki', + 'webhooks_menu_disabled' => 'wyłączone', + 'no_webhook_messages' => 'Brak wiadomości webhook', + 'webhook_trigger_STORE_TRANSACTION' => 'Po utworzeniu transakcji', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Po zmodyfikowaniu transakcji', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Po usunięciu transakcji', + 'webhook_response_TRANSACTIONS' => 'Szczegóły transakcji', + 'webhook_response_ACCOUNTS' => 'Szczegóły konta', + 'webhook_response_none_NONE' => 'Brak szczegółów', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Zbadaj', + 'create_new_webhook' => 'Utwórz nowy webhook', + 'webhooks_create_breadcrumb' => 'Utwórz nowy webhook', + 'webhook_trigger_form_help' => 'Wskaż zdarzenie do wyzwolenia webhook\'a', + 'webhook_response_form_help' => 'Wskaż, co webhook musi przesłać do adresu URL.', + 'webhook_delivery_form_help' => 'W jakim formacie webhook musi dostarczać dane.', + 'webhook_active_form_help' => 'Webhook musi być aktywny lub nie zostanie wywołany.', + 'stored_new_webhook' => 'Zapisano nowy webhook ":title"', + 'delete_webhook' => 'Usuń webhook', + 'deleted_webhook' => 'Usunięto webhook ":title"', + 'edit_webhook' => 'Edytuj webhook ":title"', + 'updated_webhook' => 'Zaktualizowano webhook ":title"', + 'edit_webhook_js' => 'Edytuj webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'Webhook został uruchomiony na wskazanej transakcji. Poczekaj na wyniki.', + 'webhook_messages' => 'Wiadomość webhook\'a', + 'view_message' => 'Podgląd wiadomości', + 'view_attempts' => 'Podgląd nieudanych prób', + 'message_content_title' => 'Treść wiadomości webhook\'a', + 'message_content_help' => 'To jest zawartość wiadomości, która została wysłana (lub próbowano wysłać) za pomocą tego webhooka.', + 'attempt_content_title' => 'Próby dostępu do webhook', + 'attempt_content_help' => 'To są wszystkie nieudane próby przesłania tej wiadomości webhooka do skonfigurowanego adresu URL. Po pewnym czasie Firefly III przestanie próbować.', + 'no_attempts' => 'Nie ma nieudanych prób. To dobrze!', + 'webhook_attempt_at' => 'Próba o {moment}', + 'logs' => 'Logi', + 'response' => 'Odpowiedź', + 'visit_webhook_url' => 'Odwiedź adres URL webhooka', + 'reset_webhook_secret' => 'Resetuj sekret webhooka', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") został zapisany.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") został zaktualizowany.', // API access - 'authorization_request' => 'Żądanie autoryzacji Firefly III v:version', - 'authorization_request_intro' => 'Aplikacja :client prosi o pozwolenie na dostęp do Twojej administracji finansowej. Czy chcesz pozwolić :client na dostęp do tych danych?', - 'authorization_request_site' => 'Zostaniesz przekierowany do :url, który będzie mógł uzyskać dostęp do danych Firefly III.', - 'authorization_request_invalid' => 'Ta prośba o dostęp jest nieprawidłowa. Proszę nigdy więcej nie klikaj tego linku.', - 'scopes_will_be_able' => 'Ta aplikacja będzie mogła:', - 'button_authorize' => 'Autoryzuj', - 'none_in_select_list' => '(żadne)', - 'no_piggy_bank' => '(brak skarbonki)', - 'name_in_currency' => ':name w :currency', - 'paid_in_currency' => 'Zapłacone w :currency', - 'unpaid_in_currency' => 'Niezapłacone w :currency', - 'is_alpha_warning' => 'Używasz wersji ALPHA. Uważaj na błędy i problemy.', - 'is_beta_warning' => 'Używasz wersji BETA. Uważaj na błędy i problemy.', - 'all_destination_accounts' => 'Konta docelowe', - 'all_source_accounts' => 'Konta źródłowe', - 'back_to_index' => 'Wróć do indeksu', - 'cant_logout_guard' => 'Firefly III nie może cię wylogować.', - 'internal_reference' => 'Wewnętrzny nr referencyjny', + 'authorization_request' => 'Żądanie autoryzacji Firefly III v:version', + 'authorization_request_intro' => 'Aplikacja :client prosi o pozwolenie na dostęp do Twojej administracji finansowej. Czy chcesz pozwolić :client na dostęp do tych danych?', + 'authorization_request_site' => 'Zostaniesz przekierowany do :url, który będzie mógł uzyskać dostęp do danych Firefly III.', + 'authorization_request_invalid' => 'Ta prośba o dostęp jest nieprawidłowa. Proszę nigdy więcej nie klikaj tego linku.', + 'scopes_will_be_able' => 'Ta aplikacja będzie mogła:', + 'button_authorize' => 'Autoryzuj', + 'none_in_select_list' => '(żadne)', + 'no_piggy_bank' => '(brak skarbonki)', + 'name_in_currency' => ':name w :currency', + 'paid_in_currency' => 'Zapłacone w :currency', + 'unpaid_in_currency' => 'Niezapłacone w :currency', + 'is_alpha_warning' => 'Używasz wersji ALPHA. Uważaj na błędy i problemy.', + 'is_beta_warning' => 'Używasz wersji BETA. Uważaj na błędy i problemy.', + 'all_destination_accounts' => 'Konta docelowe', + 'all_source_accounts' => 'Konta źródłowe', + 'back_to_index' => 'Wróć do indeksu', + 'cant_logout_guard' => 'Firefly III nie może cię wylogować.', + 'internal_reference' => 'Wewnętrzny nr referencyjny', // check for updates: - 'update_check_title' => 'Sprawdź aktualizacje', - 'admin_update_check_title' => 'Automatycznie sprawdzaj dostępność aktualizacji', - 'admin_update_check_explain' => 'Firefly III może automatycznie sprawdzać dostępność aktualizacji. Po włączeniu tej opcji będzie kontaktować się z serwerem aktualizacji w celu sprawdzenia czy dostępna jest nowa wersja Firefly III. Jeżeli będzie, otrzymasz powiadomienie. Możesz przetestować to powiadomienie używając przycisku po prawej stronie. Wskaż proszę czy chcesz, aby Firefly III sprawdzało dostępność aktualizacji.', - 'check_for_updates_permission' => 'Firefly III może sprawdzić dostępność aktualizacji, ale potrzebuje Twojej zgody, aby to robić. Przejdź do administracji, aby określić, czy ta funkcja ma być włączona.', - 'updates_ask_me_later' => 'Zapytaj mnie później', - 'updates_do_not_check' => 'Nie sprawdzaj dostępności aktualizacji', - 'updates_enable_check' => 'Włącz sprawdzanie aktualizacji', - 'admin_update_check_now_title' => 'Sprawdź dostępność aktualizacji', - 'admin_update_check_now_explain' => 'Jeśli naciśniesz przycisk, Firefly III sprawdzi, czy używasz najnowszej wersji.', - 'check_for_updates_button' => 'Sprawdź teraz!', - 'update_new_version_alert' => 'Dostępna jest nowa wersja Firefly III. Używasz wersji :your_version, najnowsza wersja to :new_version wydana :date.', - 'update_version_beta' => 'Ta wersja jest wersją BETA. Możesz napotkać błędy.', - 'update_version_alpha' => 'Ta wersja jest wersją ALPHA. Możesz napotkać błędy.', - 'update_current_version_alert' => 'Używasz wersji :version, która jest najnowszą dostępną wersją.', - 'update_newer_version_alert' => 'Używasz wersji :your_version, która jest nowsza niż najnowsza wersja, :new_version.', - 'update_check_error' => 'Wystąpił błąd podczas sprawdzania aktualizacji :error', - 'unknown_error' => 'Nieznany błąd. Przepraszamy za to.', - 'just_new_release' => 'Dostępna jest nowa wersja! Wersja :version została wydana :date. To wydanie jest bardzo świeże. Poczekaj kilka dni na stabilizację nowej wersji.', - 'disabled_but_check' => 'Wyłączyłeś sprawdzanie aktualizacji. Więc nie zapomnij sprawdzać aktualizacji osobiście od czasu do czasu. Dziękujemy!', - 'admin_update_channel_title' => 'Kanał aktualizacji', - 'admin_update_channel_explain' => 'Firefly III posiada trzy "kanały", które decydują jak wczesnej pod względem funkcji, ulepszeń i błędów wersji używasz. Użyj kanału "beta", jeśli lubisz przygody i "alfa", gdy lubisz żyć niebezpiecznie.', - 'update_channel_stable' => 'Stabilne. Wszystko powinno działać zgodnie z oczekiwaniami.', - 'update_channel_beta' => 'Beta. Nowe funkcje, ale niektóre funkcje mogą nie działać poprawnie.', - 'update_channel_alpha' => 'Alfa. Rzucamy różne rzeczy i zostawiamy to, co się przyklei.', + 'update_check_title' => 'Sprawdź aktualizacje', + 'admin_update_check_title' => 'Automatycznie sprawdzaj dostępność aktualizacji', + 'admin_update_check_explain' => 'Firefly III może automatycznie sprawdzać dostępność aktualizacji. Po włączeniu tej opcji będzie kontaktować się z serwerem aktualizacji w celu sprawdzenia czy dostępna jest nowa wersja Firefly III. Jeżeli będzie, otrzymasz powiadomienie. Możesz przetestować to powiadomienie używając przycisku po prawej stronie. Wskaż proszę czy chcesz, aby Firefly III sprawdzało dostępność aktualizacji.', + 'check_for_updates_permission' => 'Firefly III może sprawdzić dostępność aktualizacji, ale potrzebuje Twojej zgody, aby to robić. Przejdź do administracji, aby określić, czy ta funkcja ma być włączona.', + 'updates_ask_me_later' => 'Zapytaj mnie później', + 'updates_do_not_check' => 'Nie sprawdzaj dostępności aktualizacji', + 'updates_enable_check' => 'Włącz sprawdzanie aktualizacji', + 'admin_update_check_now_title' => 'Sprawdź dostępność aktualizacji', + 'admin_update_check_now_explain' => 'Jeśli naciśniesz przycisk, Firefly III sprawdzi, czy używasz najnowszej wersji.', + 'check_for_updates_button' => 'Sprawdź teraz!', + 'update_new_version_alert' => 'Dostępna jest nowa wersja Firefly III. Używasz wersji :your_version, najnowsza wersja to :new_version wydana :date.', + 'update_version_beta' => 'Ta wersja jest wersją BETA. Możesz napotkać błędy.', + 'update_version_alpha' => 'Ta wersja jest wersją ALPHA. Możesz napotkać błędy.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Używasz wersji :version, która jest najnowszą dostępną wersją.', + 'update_newer_version_alert' => 'Używasz wersji :your_version, która jest nowsza niż najnowsza wersja, :new_version.', + 'update_check_error' => 'Wystąpił błąd podczas sprawdzania aktualizacji :error', + 'unknown_error' => 'Nieznany błąd. Przepraszamy za to.', + 'disabled_but_check' => 'Wyłączyłeś sprawdzanie aktualizacji. Więc nie zapomnij sprawdzać aktualizacji osobiście od czasu do czasu. Dziękujemy!', + 'admin_update_channel_title' => 'Kanał aktualizacji', + 'admin_update_channel_explain' => 'Firefly III posiada trzy "kanały", które decydują jak wczesnej pod względem funkcji, ulepszeń i błędów wersji używasz. Użyj kanału "beta", jeśli lubisz przygody i "alfa", gdy lubisz żyć niebezpiecznie.', + 'update_channel_stable' => 'Stabilne. Wszystko powinno działać zgodnie z oczekiwaniami.', + 'update_channel_beta' => 'Beta. Nowe funkcje, ale niektóre funkcje mogą nie działać poprawnie.', + 'update_channel_alpha' => 'Alfa. Rzucamy różne rzeczy i zostawiamy to, co się przyklei.', // search - 'search' => 'Szukaj', - 'search_query' => 'Zapytanie', - 'search_found_transactions' => 'Firefly III znalazł :count transakcję w :time sekund.|Firefly III znalazł :count transakcji w :time sekund.', - 'search_found_more_transactions' => 'Firefly III znalazł więcej niż :count transakcji w :time sekund.', - 'search_for_query' => 'Firefly III szuka transakcji zawierających wszystkie słowa: :query', - 'invalid_operators_list' => 'Te parametry wyszukiwania nie są prawidłowe i zostały zignorowane.', + 'search' => 'Szukaj', + 'search_query' => 'Zapytanie', + 'search_found_transactions' => 'Firefly III znalazł :count transakcję w :time sekund.|Firefly III znalazł :count transakcji w :time sekund.', + 'search_found_more_transactions' => 'Firefly III znalazł więcej niż :count transakcji w :time sekund.', + 'search_for_query' => 'Firefly III szuka transakcji zawierających wszystkie słowa: :query', + 'invalid_operators_list' => 'Te parametry wyszukiwania nie są prawidłowe i zostały zignorowane.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Data transakcji to ":value"', 'search_modifier_not_date_on' => 'Data transakcji to nie ":value"', 'search_modifier_reconciled' => 'Transakcja została uzgodniona', @@ -435,11 +436,11 @@ return [ 'search_modifier_not_source_account_nr_starts' => 'Numer konta źródłowego (IBAN) nie zaczyna się od ":value"', 'search_modifier_source_account_nr_ends' => 'Numer konta źródłowego (IBAN) kończy się na ":value"', 'search_modifier_not_source_account_nr_ends' => 'Numer konta źródłowego (IBAN) nie kończy się na ":value"', - 'search_modifier_destination_account_is' => 'Konto docelowe to ":value"', + 'search_modifier_destination_account_is' => 'Nazwa konta docelowego to ":value"', 'search_modifier_not_destination_account_is' => 'Nazwa konta docelowego to nie ":value"', - 'search_modifier_destination_account_contains' => 'Konto docelowe zawiera ":value"', + 'search_modifier_destination_account_contains' => 'Nazwa konta docelowego zawiera ":value"', 'search_modifier_not_destination_account_contains' => 'Nazwa konta docelowego nie zawiera ":value"', - 'search_modifier_destination_account_starts' => 'Konto docelowe zaczyna się od ":value"', + 'search_modifier_destination_account_starts' => 'Nazwa konta docelowego zaczyna się od ":value"', 'search_modifier_not_destination_account_starts' => 'Nazwa konta docelowego nie zaczyna się od ":value"', 'search_modifier_destination_account_ends' => 'Nazwa konta docelowego kończy się na ":value"', 'search_modifier_not_destination_account_ends' => 'Nazwa konta docelowego nie kończy się na ":value"', @@ -456,7 +457,7 @@ return [ 'search_modifier_destination_account_nr_starts' => 'Numer konta docelowego (IBAN) zaczyna się od ":value"', 'search_modifier_not_destination_account_nr_starts' => 'Numer konta docelowego (IBAN) nie zaczyna się od ":value"', 'search_modifier_destination_account_nr_ends' => 'Numer konta docelowego (IBAN) kończy się na ":value"', - 'search_modifier_not_destination_account_nr_ends' => 'Numer konta docelowego (IBAN) nie kończy się ":value"', + 'search_modifier_not_destination_account_nr_ends' => 'Numer konta docelowego (IBAN) nie kończy się na ":value"', 'search_modifier_account_id' => 'ID konta źródłowego lub docelowego to: :value', 'search_modifier_not_account_id' => 'ID konta źródłowego lub docelowego to nie: :value', 'search_modifier_category_is' => 'Kategoria to ":value"', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Transakcja jest typu ":value"', 'search_modifier_not_transaction_type' => 'Typ transakcji to nie ":value"', 'search_modifier_tag_is' => 'Tag to ":value"', + 'search_modifier_tag_contains' => 'Tag zawiera ":value"', + 'search_modifier_not_tag_contains' => 'Tag nie zawiera ":value"', + 'search_modifier_tag_ends' => 'Tag kończy się na ":value"', + 'search_modifier_tag_starts' => 'Tag zaczyna się od ":value"', 'search_modifier_not_tag_is' => 'Tag nie jest ustawiony na ":value"', 'search_modifier_date_on_year' => 'Transakcja jest w roku ":value"', 'search_modifier_not_date_on_year' => 'Transakcja nie jest w roku ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Transakcja jest w miesiącu lub po miesiącu ":value"', 'search_modifier_date_after_day' => 'Transakcja jest po lub w dniu miesiąca ":value"', - // new 'search_modifier_tag_is_not' => 'Tag nie jest ustawiony na ":value"', 'search_modifier_not_tag_is_not' => 'Tag to ":value"', @@ -549,12 +553,12 @@ return [ 'search_modifier_not_journal_id' => 'ID dziennika to nie ":value"', 'search_modifier_recurrence_id' => 'ID transakcji cyklicznej to ":value"', 'search_modifier_not_recurrence_id' => 'ID transakcji cyklicznej to nie ":value"', - 'search_modifier_foreign_amount_is' => 'Kwota zagraniczna to ":value"', - 'search_modifier_not_foreign_amount_is' => 'Kwota zagraniczna to nie ":value"', - 'search_modifier_foreign_amount_less' => 'Kwota zagraniczna jest mniejsza niż ":value"', - 'search_modifier_not_foreign_amount_more' => 'Kwota zagraniczna jest mniejsza niż ":value"', - 'search_modifier_not_foreign_amount_less' => 'Kwota zagraniczna jest większa niż ":value"', - 'search_modifier_foreign_amount_more' => 'Kwota zagraniczna jest większa niż ":value"', + 'search_modifier_foreign_amount_is' => 'Kwota obca to ":value"', + 'search_modifier_not_foreign_amount_is' => 'Kwota obca to nie ":value"', + 'search_modifier_foreign_amount_less' => 'Kwota obca jest mniejsza niż ":value"', + 'search_modifier_not_foreign_amount_more' => 'Kwota obca jest mniejsza niż ":value"', + 'search_modifier_not_foreign_amount_less' => 'Kwota obca jest większa niż ":value"', + 'search_modifier_foreign_amount_more' => 'Kwota obca jest większa niż ":value"', 'search_modifier_exists' => 'Transakcja istnieje (dowolna transakcja)', 'search_modifier_not_exists' => 'Transakcja nie istnieje (brak transakcji)', @@ -577,14 +581,14 @@ return [ 'search_modifier_book_date_on_month' => 'Data księgowania transakcji jest w miesiącu ":value"', 'search_modifier_book_date_on_day' => 'Data księgowania transakcji przypada w dniu miesiąca ":value"', 'search_modifier_not_book_date_on_year' => 'Data księgowania transakcji nie jest w roku ":value"', - 'search_modifier_not_book_date_on_month' => 'Transaction book date is not in month ":value"', - 'search_modifier_not_book_date_on_day' => 'Transaction book date is not on day of month ":value"', - 'search_modifier_book_date_before_year' => 'Transaction book date is before or in year ":value"', - 'search_modifier_book_date_before_month' => 'Transaction book date is before or in month ":value"', - 'search_modifier_book_date_before_day' => 'Transaction book date is before or on day of month ":value"', - 'search_modifier_book_date_after_year' => 'Transaction book date is after or in year ":value"', - 'search_modifier_book_date_after_month' => 'Transaction book date is after or in month ":value"', - 'search_modifier_book_date_after_day' => 'Transaction book date is after or on day of month ":value"', + 'search_modifier_not_book_date_on_month' => 'Data księgowania transakcji nie jest w miesiącu ":value"', + 'search_modifier_not_book_date_on_day' => 'Data księgowania transakcji nie przypada w dniu miesiąca ":value"', + 'search_modifier_book_date_before_year' => 'Data księgowania transakcji jest przed lub w roku ":value"', + 'search_modifier_book_date_before_month' => 'Data księgowania transakcji jest przed lub w miesiącu ":value"', + 'search_modifier_book_date_before_day' => 'Data księgowania transakcji jest przed lub w dniu miesiąca ":value"', + 'search_modifier_book_date_after_year' => 'Data księgowania transakcji jest po lub w roku ":value"', + 'search_modifier_book_date_after_month' => 'Data księgowania transakcji jest po lub w miesiącu ":value"', + 'search_modifier_book_date_after_day' => 'Data księgowania transakcji jest po lub w dniu miesiąca ":value"', 'search_modifier_process_date_on_year' => 'Transaction process date is in year ":value"', 'search_modifier_process_date_on_month' => 'Transaction process date is in month ":value"', 'search_modifier_process_date_on_day' => 'Transaction process date is on day of month ":value"', @@ -689,16 +693,16 @@ return [ 'search_modifier_updated_at_before' => 'Transaction was updated on or before ":value"', 'search_modifier_updated_at_after' => 'Transaction was updated on or after ":value"', - 'search_modifier_attachment_name_is' => 'Any attachment\'s name is ":value"', - 'search_modifier_attachment_name_contains' => 'Any attachment\'s name contains ":value"', - 'search_modifier_attachment_name_starts' => 'Any attachment\'s name starts with ":value"', - 'search_modifier_attachment_name_ends' => 'Any attachment\'s name ends with ":value"', - 'search_modifier_attachment_notes_are' => 'Any attachment\'s notes are ":value"', - 'search_modifier_attachment_notes_contains' => 'Any attachment\'s notes contain ":value"', - 'search_modifier_attachment_notes_starts' => 'Any attachment\'s notes start with ":value"', - 'search_modifier_attachment_notes_ends' => 'Any attachment\'s notes end with ":value"', - 'search_modifier_not_attachment_name_is' => 'Any attachment\'s name is not ":value"', - 'search_modifier_not_attachment_name_contains' => 'Any attachment\'s name does not contain ":value"', + 'search_modifier_attachment_name_is' => 'Nazwa dowolnego załącznika to ":value"', + 'search_modifier_attachment_name_contains' => 'Nazwa dowolnego załącznika zawiera ":value"', + 'search_modifier_attachment_name_starts' => 'Nazwa dowolnego załącznika zaczyna się od ":value"', + 'search_modifier_attachment_name_ends' => 'Nazwa dowolnego załącznika kończy się na ":value"', + 'search_modifier_attachment_notes_are' => 'Notatki dowolnego załącznika to ":value"', + 'search_modifier_attachment_notes_contains' => 'Notatki dowolnego załącznika zawierają ":value"', + 'search_modifier_attachment_notes_starts' => 'Notatki dowolnego załącznika zaczynają się od ":value"', + 'search_modifier_attachment_notes_ends' => 'Notatki dowolnego załącznika kończą się na ":value"', + 'search_modifier_not_attachment_name_is' => 'Nazwa dowolnego załącznika to nie ":value"', + 'search_modifier_not_attachment_name_contains' => 'Nazwa dowolnego załącznika nie zawiera ":value"', 'search_modifier_not_attachment_name_starts' => 'Any attachment\'s name does not start with ":value"', 'search_modifier_not_attachment_name_ends' => 'Any attachment\'s name does not end with ":value"', 'search_modifier_not_attachment_notes_are' => 'Any attachment\'s notes are not ":value"', @@ -710,7 +714,7 @@ return [ '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ł.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Zastosowano także poniższe modyfikatory:', 'general_search_error' => 'Wystąpił błąd podczas wyszukiwania. Aby uzyskać więcej informacji proszę sprawdzić logi aplikacji.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Nie', 'cannot_fire_inactive_rules' => 'Nie możesz wykonać nieaktywnych reguł.', + 'show_triggers' => 'Pokaż wyzwalacze', + 'show_actions' => 'Pokaż działania', 'rules' => 'Reguły', 'rule_name' => 'Nazwa reguły', 'rule_triggers' => 'Reguły są wyzwalane gdy', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Po zmodyfikowaniu transakcji', 'rule_trigger_user_action' => 'Akcją użytkownika jest ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Konto źródłowe się zaczyna od..', 'rule_trigger_source_account_starts' => 'Konto źródłowe się zaczyna od ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Budżet to ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Dowolny tag to..', 'rule_trigger_tag_is' => 'Dowolny tag jest ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Waluta transakcji to..', 'rule_trigger_currency_is' => 'Waluta transakcji to ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Waluta obca transakcji to..', @@ -974,9 +984,9 @@ return [ 'rule_trigger_category_starts_choice' => 'Kategoria zaczyna się od..', 'rule_trigger_category_starts' => 'Kategoria zaczyna się od ":trigger_value"', 'rule_trigger_budget_contains_choice' => 'Budżet zawiera..', - 'rule_trigger_budget_contains' => 'Budget contains ":trigger_value"', - 'rule_trigger_budget_ends_choice' => 'Budżet kończy się..', - 'rule_trigger_budget_ends' => 'Budżet kończy się ":trigger_value"', + 'rule_trigger_budget_contains' => 'Budżet zawiera ":trigger_value"', + 'rule_trigger_budget_ends_choice' => 'Budżet kończy się na..', + 'rule_trigger_budget_ends' => 'Budżet kończy się na ":trigger_value"', 'rule_trigger_budget_starts_choice' => 'Budżet zaczyna się od..', 'rule_trigger_budget_starts' => 'Budżet zaczyna się od ":trigger_value"', 'rule_trigger_bill_contains_choice' => 'Rachunek zawiera..', @@ -1009,10 +1019,10 @@ return [ 'rule_trigger_has_no_attachments' => 'Transaction has no attachments', 'rule_trigger_recurrence_id_choice' => 'Recurring transaction ID is..', 'rule_trigger_recurrence_id' => 'Recurring transaction ID is ":trigger_value"', - 'rule_trigger_interest_date_on_choice' => 'Interest date is on..', - 'rule_trigger_interest_date_on' => 'Interest date is on ":trigger_value"', - 'rule_trigger_interest_date_before_choice' => 'Interest date is before..', - 'rule_trigger_interest_date_before' => 'Interest date is before ":trigger_value"', + 'rule_trigger_interest_date_on_choice' => 'Data odsetek jest dnia..', + 'rule_trigger_interest_date_on' => 'Data odsetek jest dnia ":trigger_value"', + 'rule_trigger_interest_date_before_choice' => 'Data odsetek jest przed dniem..', + 'rule_trigger_interest_date_before' => 'Data odsetek jest przed dniem ":trigger_value"', 'rule_trigger_interest_date_after_choice' => 'Interest date is after..', 'rule_trigger_interest_date_after' => 'Interest date is after ":trigger_value"', 'rule_trigger_book_date_on_choice' => 'Book date is on..', @@ -1053,12 +1063,12 @@ return [ 'rule_trigger_updated_at_before' => 'Transaction was last updated before ":trigger_value"', 'rule_trigger_updated_at_after_choice' => 'Transaction was last updated after..', 'rule_trigger_updated_at_after' => 'Transaction was last updated after ":trigger_value"', - 'rule_trigger_foreign_amount_is_choice' => 'Foreign amount is exactly..', - 'rule_trigger_foreign_amount_is' => 'Foreign amount is exactly ":trigger_value"', - 'rule_trigger_foreign_amount_less_choice' => 'Foreign amount is less than..', - 'rule_trigger_foreign_amount_less' => 'Foreign amount is less than ":trigger_value"', - 'rule_trigger_foreign_amount_more_choice' => 'Foreign amount is more than..', - 'rule_trigger_foreign_amount_more' => 'Foreign amount is more than ":trigger_value"', + 'rule_trigger_foreign_amount_is_choice' => 'Kwota obca to dokładnie..', + 'rule_trigger_foreign_amount_is' => 'Kwota obca to dokładnie ":trigger_value"', + 'rule_trigger_foreign_amount_less_choice' => 'Kwota obca jest mniejsza niż..', + 'rule_trigger_foreign_amount_less' => 'Kwota obca jest mniejsza niż ":trigger_value"', + 'rule_trigger_foreign_amount_more_choice' => 'Kwota obca jest większa niż..', + 'rule_trigger_foreign_amount_more' => 'Kwota obca jest większa niż ":trigger_value"', 'rule_trigger_attachment_name_is_choice' => 'Any attachment\'s name is..', 'rule_trigger_attachment_name_is' => 'Any attachment\'s name is ":trigger_value"', 'rule_trigger_attachment_name_contains_choice' => 'Any attachment\'s name contains..', @@ -1075,15 +1085,15 @@ return [ 'rule_trigger_attachment_notes_starts' => 'Any attachment\'s notes start with ":trigger_value"', 'rule_trigger_attachment_notes_ends_choice' => 'Any attachment\'s notes end with..', 'rule_trigger_attachment_notes_ends' => 'Any attachment\'s notes end with ":trigger_value"', - 'rule_trigger_reconciled_choice' => 'Transaction is reconciled', - 'rule_trigger_reconciled' => 'Transaction is reconciled', - 'rule_trigger_exists_choice' => 'Any transaction matches(!)', - 'rule_trigger_exists' => 'Any transaction matches', + 'rule_trigger_reconciled_choice' => 'Transakcja została uzgodniona', + 'rule_trigger_reconciled' => 'Transakcja została uzgodniona', + 'rule_trigger_exists_choice' => 'Dowolna transakcja pasuje(!)', + 'rule_trigger_exists' => 'Dowolna transakcja pasuje', // more values for new types: 'rule_trigger_not_account_id' => 'Account ID is not ":trigger_value"', 'rule_trigger_not_source_account_id' => 'Source account ID is not ":trigger_value"', - 'rule_trigger_not_destination_account_id' => 'Destination account ID is not ":trigger_value"', + 'rule_trigger_not_destination_account_id' => 'ID konta docelowego to nie ":trigger_value"', 'rule_trigger_not_transaction_type' => 'Transaction type is not ":trigger_value"', 'rule_trigger_not_tag_is' => 'Tag to nie ":trigger_value"', 'rule_trigger_not_tag_is_not' => 'Tag to ":trigger_value"', @@ -1103,14 +1113,14 @@ return [ 'rule_trigger_not_source_account_nr_contains' => 'Source account number / IBAN does not contain ":trigger_value"', 'rule_trigger_not_source_account_nr_ends' => 'Source account number / IBAN does not end on ":trigger_value"', 'rule_trigger_not_source_account_nr_starts' => 'Source account number / IBAN does not start with ":trigger_value"', - 'rule_trigger_not_destination_account_is' => 'Destination account is not ":trigger_value"', - 'rule_trigger_not_destination_account_contains' => 'Destination account does not contain ":trigger_value"', - 'rule_trigger_not_destination_account_ends' => 'Destination account does not end on ":trigger_value"', - 'rule_trigger_not_destination_account_starts' => 'Destination account does not start with ":trigger_value"', - 'rule_trigger_not_destination_account_nr_is' => 'Destination account number / IBAN is not ":trigger_value"', - 'rule_trigger_not_destination_account_nr_contains' => 'Destination account number / IBAN does not contain ":trigger_value"', - 'rule_trigger_not_destination_account_nr_ends' => 'Destination account number / IBAN does not end on ":trigger_value"', - 'rule_trigger_not_destination_account_nr_starts' => 'Destination account number / IBAN does not start with ":trigger_value"', + 'rule_trigger_not_destination_account_is' => 'Konto docelowe to nie ":trigger_value"', + 'rule_trigger_not_destination_account_contains' => 'Konto docelowe nie zawiera ":trigger_value"', + 'rule_trigger_not_destination_account_ends' => 'Konto docelowe nie kończy się na ":trigger_value"', + 'rule_trigger_not_destination_account_starts' => 'Konto docelowe nie zaczyna się od ":trigger_value"', + 'rule_trigger_not_destination_account_nr_is' => 'Numer konta docelowego / IBAN to nie ":trigger_value"', + 'rule_trigger_not_destination_account_nr_contains' => 'Numer konta docelowego / IBAN nie zawiera ":trigger_value"', + 'rule_trigger_not_destination_account_nr_ends' => 'Numer konta docelowego / IBAN nie kończy się na ":trigger_value"', + 'rule_trigger_not_destination_account_nr_starts' => 'Numer konta docelowego / IBAN nie zaczyna się od ":trigger_value"', 'rule_trigger_not_account_is' => 'Neither account is ":trigger_value"', 'rule_trigger_not_account_contains' => 'Neither account contains ":trigger_value"', 'rule_trigger_not_account_ends' => 'Neither account ends on ":trigger_value"', @@ -1143,10 +1153,10 @@ return [ 'rule_trigger_not_external_url_contains' => 'External URL does not contain ":trigger_value"', 'rule_trigger_not_external_url_ends' => 'External URL does not end on ":trigger_value"', 'rule_trigger_not_external_url_starts' => 'External URL does not start with ":trigger_value"', - 'rule_trigger_not_currency_is' => 'Currency is not ":trigger_value"', - 'rule_trigger_not_foreign_currency_is' => 'Foreign currency is not ":trigger_value"', - 'rule_trigger_not_id' => 'Transaction ID is not ":trigger_value"', - 'rule_trigger_not_journal_id' => 'Transaction journal ID is not ":trigger_value"', + 'rule_trigger_not_currency_is' => 'Waluta to nie ":trigger_value"', + 'rule_trigger_not_foreign_currency_is' => 'Waluta obca to nie ":trigger_value"', + 'rule_trigger_not_id' => 'Identyfikator transakcji to nie ":trigger_value"', + 'rule_trigger_not_journal_id' => 'ID dziennika transakcji to nie ":trigger_value"', 'rule_trigger_not_recurrence_id' => 'Recurrence ID is not ":trigger_value"', 'rule_trigger_not_date_on' => 'Date is not on ":trigger_value"', 'rule_trigger_not_date_before' => 'Date is not before ":trigger_value"', @@ -1178,9 +1188,9 @@ return [ 'rule_trigger_not_amount_is' => 'Transaction amount is not ":trigger_value"', 'rule_trigger_not_amount_less' => 'Transaction amount is more than ":trigger_value"', 'rule_trigger_not_amount_more' => 'Transaction amount is less than ":trigger_value"', - 'rule_trigger_not_foreign_amount_is' => 'Foreign transaction amount is not ":trigger_value"', - 'rule_trigger_not_foreign_amount_less' => 'Foreign transaction amount is more than ":trigger_value"', - 'rule_trigger_not_foreign_amount_more' => 'Foreign transaction amount is less than ":trigger_value"', + 'rule_trigger_not_foreign_amount_is' => 'Kwota obcej transakcji to nie ":trigger_value"', + 'rule_trigger_not_foreign_amount_less' => 'Kwota obcej transakcji jest większa niż ":trigger_value"', + 'rule_trigger_not_foreign_amount_more' => 'Kwota obcej transakcji jest mniejsza niż ":trigger_value"', 'rule_trigger_not_attachment_name_is' => 'No attachment is named ":trigger_value"', 'rule_trigger_not_attachment_name_contains' => 'No attachment name contains ":trigger_value"', 'rule_trigger_not_attachment_name_starts' => 'No attachment name starts with ":trigger_value"', @@ -1191,9 +1201,9 @@ return [ 'rule_trigger_not_attachment_notes_ends' => 'No attachment notes end on ":trigger_value"', 'rule_trigger_not_reconciled' => 'Transakcja nie została uzgodniona', 'rule_trigger_not_exists' => 'Transakcja nie istnieje', - 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', - 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transakcje bez kategorii', + 'rule_trigger_not_has_attachments' => 'Transakcja nie ma załączników', + 'rule_trigger_not_has_any_category' => 'Transakcja nie ma kategorii', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transakcja bez rachunku', 'rule_trigger_not_has_any_tag' => 'Transakcja bez tagów', 'rule_trigger_not_any_notes' => 'Transakcja bez notatek', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Konto docelowe to nie konto gotówkowe', 'rule_trigger_not_account_is_cash' => 'Żadne konto nie jest kontem gotówkowym', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'USUŃ transakcję(!)', @@ -1277,261 +1286,264 @@ return [ 'rule_action_append_notes_to_descr' => 'Dołącz notatki do opisu', 'rule_action_move_descr_to_notes' => 'Zastąp notatki opisem', 'rule_action_move_notes_to_descr' => 'Zastąp opis notatkami', + 'rule_action_set_destination_to_cash_choice' => 'Ustaw konto docelowe na konto gotówkowe', + 'rule_action_set_source_to_cash_choice' => 'Ustaw konto źródłowe na konto gotówkowe', 'rulegroup_for_bills_title' => 'Grupa reguł dla rachunków', - 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', - 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', - 'rule_for_bill_description' => 'This rule is auto-generated to try to match bill ":name".', + 'rulegroup_for_bills_description' => 'Specjalna grupa reguł dla wszystkich reguł dotyczących rachunków.', + 'rule_for_bill_title' => 'Automatycznie wygenerowana reguła dla rachunku ":name"', + 'rule_for_bill_description' => 'Ta reguła została wygenerowana automatycznie by dopasować się do rachunku ":name".', 'create_rule_for_bill' => 'Utwórz nową regułę dla rachunku ":name"', 'create_rule_for_bill_txt' => 'You have just created a new bill called ":name", congratulations!Firefly III can automagically match new withdrawals to this bill. For example, whenever you pay your rent, the bill "rent" will be linked to the expense. This way, Firefly III can accurately show you which bills are due and which ones aren\'t. In order to do so, a new rule must be created. Firefly III has filled in some sensible defaults for you. Please make sure these are correct. If these values are correct, Firefly III will automatically link the correct withdrawal to the correct bill. Please check out the triggers to see if they are correct, and add some if they\'re wrong.', 'new_rule_for_bill_title' => 'Reguła dla rachunku ":name"', 'new_rule_for_bill_description' => 'Ta reguła oznacza transakcje jako powiązane z rachunkiem ":name".', - 'new_rule_for_journal_title' => 'Reguła oparta na transakcji ":description"', - 'new_rule_for_journal_description' => 'Ta reguła jest oparta na transakcji ":description". Będzie zgodna z transakcjami, które są dokładnie takie same.', + 'new_rule_for_journal_title' => 'Reguła oparta na transakcji ":description"', + 'new_rule_for_journal_description' => 'Ta reguła jest oparta na transakcji ":description". Będzie zgodna z transakcjami, które są dokładnie takie same.', // tags - 'store_new_tag' => 'Zachowaj nowy tag', - 'update_tag' => 'Zmodyfikuj tag', - 'no_location_set' => 'Nie ustawiono lokalizacji.', - 'meta_data' => 'Metadane', - 'location' => 'Lokalizacja', - 'without_date' => 'Bez daty', - 'result' => 'Wynik', - 'sums_apply_to_range' => 'Wszystkie sumy mają zastosowanie do wybranego zakresu', - 'mapbox_api_key' => 'Aby użyć mapy, pobierz klucz API z Mapbox. Otwórz plik .env i wprowadź ten kod po MAPBOX_API_KEY=.', - 'press_object_location' => 'Kliknij prawym przyciskiem myszy lub naciśnij i przytrzymaj aby ustawić lokalizację obiektu.', - 'clear_location' => 'Wyczyść lokalizację', - 'delete_all_selected_tags' => 'Usuń wszystkie zaznaczone tagi', - 'select_tags_to_delete' => 'Nie zapomnij wybrać tagów.', - 'deleted_x_tags' => 'Usunięto :count tag.|Usunięto :count tagów.', - 'create_rule_from_transaction' => 'Utwórz regułę na podstawie transakcji', - 'create_recurring_from_transaction' => 'Utwórz cykliczną transakcję na podstawie transakcji', - + 'store_new_tag' => 'Zachowaj nowy tag', + 'update_tag' => 'Zmodyfikuj tag', + 'no_location_set' => 'Nie ustawiono lokalizacji.', + 'meta_data' => 'Metadane', + 'location' => 'Lokalizacja', + 'location_first_split' => 'Lokalizacja dla tej transakcji może być ustawiona w pierwszym podziale tej transakcji.', + 'without_date' => 'Bez daty', + 'result' => 'Wynik', + 'sums_apply_to_range' => 'Wszystkie sumy mają zastosowanie do wybranego zakresu', + 'mapbox_api_key' => 'Aby użyć mapy, pobierz klucz API z Mapbox. Otwórz plik .env i wprowadź ten kod po MAPBOX_API_KEY=.', + 'press_object_location' => 'Kliknij prawym przyciskiem myszy lub naciśnij i przytrzymaj aby ustawić lokalizację obiektu.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Wyczyść lokalizację', + 'delete_all_selected_tags' => 'Usuń wszystkie zaznaczone tagi', + 'select_tags_to_delete' => 'Nie zapomnij wybrać tagów.', + 'deleted_x_tags' => 'Usunięto :count tag.|Usunięto :count tagów.', + 'create_rule_from_transaction' => 'Utwórz regułę na podstawie transakcji', + 'create_recurring_from_transaction' => 'Utwórz cykliczną transakcję na podstawie transakcji', // preferences - 'dark_mode_option_browser' => 'Pozwól Twojej przeglądarce decydować', - 'dark_mode_option_light' => 'Zawsze jasny', - 'dark_mode_option_dark' => 'Zawsze ciemny', - 'equal_to_language' => '(równe językowi)', - 'dark_mode_preference' => 'Tryb ciemny', - 'dark_mode_preference_help' => 'Powiedz Firefly III, kiedy użyć trybu ciemnego.', - 'pref_home_screen_accounts' => 'Konta na stronie domowej', - 'pref_home_screen_accounts_help' => 'Które konta powinny być wyświetlane na stronie głównej?', - 'pref_view_range' => 'Zakres widzenia', - 'pref_view_range_help' => 'Niektóre wykresy są automatycznie grupowane w okresy. Twoje budżety będą również pogrupowane w okresy. Jaki okres wolisz?', - 'pref_1D' => 'Dzień', - 'pref_1W' => 'Tydzień', - 'pref_1M' => 'Miesiąc', - 'pref_3M' => 'Trzy miesiące (kwartał)', - 'pref_6M' => 'Sześć miesięcy', - 'pref_1Y' => 'Rok', - 'pref_last365' => 'Ostatni rok', - 'pref_last90' => 'Ostatnie 90 dni', - 'pref_last30' => 'Ostatnie 30 dni', - 'pref_last7' => 'Ostatnie 7 dni', - 'pref_YTD' => 'Rok do daty', - 'pref_QTD' => 'Kwartał do daty', - 'pref_MTD' => 'Miesiąc do daty', - 'pref_languages' => 'Języki', - 'pref_locale' => 'Ustawienia regionalne', - 'pref_languages_help' => 'Firefly III obsługuje kilka języków. Który wolisz?', - 'pref_locale_help' => 'Firefly III pozwala na ustawienie innych ustawień lokalnych, takich jak formatowanie walut, liczb i dat. Wpisy na tej liście mogą nie być obsługiwane przez Twój system. Firefly III nie ma poprawnych ustawień daty dla każdego miejsca; skontaktuj się ze mną, abym mógł to ulepszyć.', - 'pref_locale_no_demo' => 'Ta funkcja nie zadziała dla użytkownika demonstracyjnego.', - 'pref_custom_fiscal_year' => 'Ustawienia roku podatkowego', - 'pref_custom_fiscal_year_label' => 'Włączone', - 'pref_custom_fiscal_year_help' => 'W krajach, w których rok podatkowy nie zaczyna się 1 stycznia i nie kończy 31 grudnia, możesz włączyć tą opcję oraz podać początek / koniec roku podatkowego', - 'pref_fiscal_year_start_label' => 'Początek roku podatkowego', - 'pref_two_factor_auth' => 'Weryfikacja dwuetapowa', - 'pref_two_factor_auth_help' => 'Po włączeniu weryfikacji dwuetapowej (znanej również jako uwierzytelnianie dwuskładnikowe) dodajesz dodatkową warstwę zabezpieczeń do swojego konta. Logujesz się czymś, co znasz (hasło) i czymś co masz (kod weryfikacyjny). Kody weryfikacyjne generowane są przez aplikację w telefonie, na przykład Authy lub Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Włącz weryfikację dwuetapową', - 'pref_two_factor_auth_disabled' => 'Kod weryfikacji dwuetapowej został usunięty i wyłączony', - 'pref_two_factor_auth_remove_it' => 'Nie zapomnij usunąć konta z aplikacji uwierzytelniajcej!', - 'pref_two_factor_auth_code' => 'Zweryfikuj kod', - 'pref_two_factor_auth_code_help' => 'Zeskanuj kod QR za pomocą aplikacji w telefonie, takiej jak Authy lub Google Authenticator i wprowadź wygenerowany kod.', - 'pref_two_factor_auth_reset_code' => 'Zresetuj kod weryfikacyjny', - 'pref_two_factor_auth_disable_2fa' => 'Wyłącz weryfikację dwuetapową', - '2fa_use_secret_instead' => 'Jeżeli nie możesz zeskanować kodu QR użyj sekretu: :secret.', - '2fa_backup_codes' => 'Zachowaj te kody na wypadek zgubienia urządzenia.', - '2fa_already_enabled' => 'Uwierzytelnianie dwuskładnikowe jest już aktywne.', - 'wrong_mfa_code' => 'Ten kod uwierzytelniania nie jest prawidłowy.', - 'pref_save_settings' => 'Zapisz ustawienia', - 'saved_preferences' => 'Preferencje zostały zapisane!', - 'preferences_general' => 'Ogólne', - 'preferences_frontpage' => 'Ekran główny', - 'preferences_security' => 'Bezpieczeństwo', - 'preferences_layout' => 'Układ', - 'preferences_notifications' => 'Powiadomienia', - 'pref_home_show_deposits' => 'Pokaż przychody na stronie domowej', - 'pref_home_show_deposits_info' => 'Ekran główny pokazuje już konta wydatków. Czy chcesz wyświetlać również konta przychodów?', - 'pref_home_do_show_deposits' => 'Tak, pokaż je', - 'successful_count' => 'z których :count zakończone pomyślnie', - 'list_page_size_title' => 'Rozmiar strony', - 'list_page_size_help' => 'Każda lista rzeczy (konta, transakcje itp.) pokazuje co najwyżej tyle na stronę.', - 'list_page_size_label' => 'Rozmiar strony', - 'between_dates' => '(:start i :end)', - 'pref_optional_fields_transaction' => 'Opcjonalne pola dla transakcji', - 'pref_optional_fields_transaction_help' => 'Domyślnie nie wszystkie pola są aktywne podczas tworzenia nowej transakcji (aby uniknąć bałaganu). Poniżej możesz włączyć te pola, jeśli uważasz, że mogą one być przydatne dla Ciebie. Oczywiście każde pole, które jest wyłączone, ale już wypełnione, będzie widoczne niezależnie od ustawienia.', - 'optional_tj_date_fields' => 'Pola dat', - 'optional_tj_other_fields' => 'Inne pola', - 'optional_tj_attachment_fields' => 'Pola załączników', - 'pref_optional_tj_interest_date' => 'Data odsetek', - 'pref_optional_tj_book_date' => 'Data księgowania', - 'pref_optional_tj_process_date' => 'Data przetworzenia', - 'pref_optional_tj_due_date' => 'Termin realizacji', - 'pref_optional_tj_payment_date' => 'Data płatności', - 'pref_optional_tj_invoice_date' => 'Data faktury', - 'pref_optional_tj_internal_reference' => 'Wewnętrzny numer', - 'pref_optional_tj_notes' => 'Notatki', - 'pref_optional_tj_attachments' => 'Załączniki', - 'pref_optional_tj_external_url' => 'Zewnętrzny adres URL', - 'pref_optional_tj_location' => 'Lokalizacja', - 'pref_optional_tj_links' => 'Powiązane transakcje', - 'optional_field_meta_dates' => 'Daty', - 'optional_field_meta_business' => 'Biznesowe', - 'optional_field_attachments' => 'Załączniki', - 'optional_field_meta_data' => 'Opcjonalne metadane', - 'external_url' => 'Zewnętrzny adres URL', - 'pref_notification_bill_reminder' => 'Przypomnienie o wygasających rachunkach', - 'pref_notification_new_access_token' => 'Powiadomienie o utworzeniu nowego tokenu dostępu API', - 'pref_notification_transaction_creation' => 'Powiadomienie o automatycznym utworzeniu transakcji', - 'pref_notification_user_login' => 'Powiadomienie o zalogowaniu się z nowej lokalizacji', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Powiadomienia', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Adres URL webhooka Slack', - 'slack_webhook_url_help' => 'Jeśli chcesz, aby Firefly III powiadamiał Cię używając Slacka, wprowadź tutaj adres URL webhooka. W przeciwnym razie pozostaw pole puste. Jeśli jesteś administratorem, musisz również ustawić ten adres URL w panelu administracji.', - 'slack_url_label' => 'Adres URL "przychodzącego webhooka" dla Slacka', + 'dark_mode_option_browser' => 'Pozwól Twojej przeglądarce decydować', + 'dark_mode_option_light' => 'Zawsze jasny', + 'dark_mode_option_dark' => 'Zawsze ciemny', + 'equal_to_language' => '(równe językowi)', + 'dark_mode_preference' => 'Tryb ciemny', + 'dark_mode_preference_help' => 'Powiedz Firefly III, kiedy użyć trybu ciemnego.', + 'pref_home_screen_accounts' => 'Konta na stronie domowej', + 'pref_home_screen_accounts_help' => 'Które konta powinny być wyświetlane na stronie głównej?', + 'pref_view_range' => 'Zakres widoku', + 'pref_view_range_help' => 'Niektóre wykresy są automatycznie grupowane w okresy. Twoje budżety będą również pogrupowane w okresy. Jaki okres wolisz?', + 'pref_1D' => 'Dzień', + 'pref_1W' => 'Tydzień', + 'pref_1M' => 'Miesiąc', + 'pref_3M' => 'Trzy miesiące (kwartał)', + 'pref_6M' => 'Sześć miesięcy', + 'pref_1Y' => 'Rok', + 'pref_last365' => 'Ostatni rok', + 'pref_last90' => 'Ostatnie 90 dni', + 'pref_last30' => 'Ostatnie 30 dni', + 'pref_last7' => 'Ostatnie 7 dni', + 'pref_YTD' => 'Rok do daty', + 'pref_QTD' => 'Kwartał do daty', + 'pref_MTD' => 'Miesiąc do daty', + 'pref_languages' => 'Języki', + 'pref_locale' => 'Ustawienia regionalne', + 'pref_languages_help' => 'Firefly III obsługuje kilka języków. Który wolisz?', + 'pref_locale_help' => 'Firefly III pozwala na ustawienie innych ustawień lokalnych, takich jak formatowanie walut, liczb i dat. Wpisy na tej liście mogą nie być obsługiwane przez Twój system. Firefly III nie ma poprawnych ustawień daty dla każdego miejsca; skontaktuj się ze mną, abym mógł to ulepszyć.', + 'pref_locale_no_demo' => 'Ta funkcja nie zadziała dla użytkownika demonstracyjnego.', + 'pref_custom_fiscal_year' => 'Ustawienia roku podatkowego', + 'pref_custom_fiscal_year_label' => 'Włączone', + 'pref_custom_fiscal_year_help' => 'W krajach, w których rok podatkowy nie zaczyna się 1 stycznia i nie kończy 31 grudnia, możesz włączyć tą opcję oraz podać początek / koniec roku podatkowego', + 'pref_fiscal_year_start_label' => 'Początek roku podatkowego', + 'pref_two_factor_auth' => 'Weryfikacja dwuetapowa', + 'pref_two_factor_auth_help' => 'Po włączeniu weryfikacji dwuetapowej (znanej również jako uwierzytelnianie dwuskładnikowe) dodajesz dodatkową warstwę zabezpieczeń do swojego konta. Logujesz się czymś, co znasz (hasło) i czymś co masz (kod weryfikacyjny). Kody weryfikacyjne generowane są przez aplikację w telefonie, na przykład Authy lub Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Włącz weryfikację dwuetapową', + 'pref_two_factor_auth_disabled' => 'Kod weryfikacji dwuetapowej został usunięty i wyłączony', + 'pref_two_factor_auth_remove_it' => 'Nie zapomnij usunąć konta z aplikacji uwierzytelniajcej!', + 'pref_two_factor_auth_code' => 'Zweryfikuj kod', + 'pref_two_factor_auth_code_help' => 'Zeskanuj kod QR za pomocą aplikacji w telefonie, takiej jak Authy lub Google Authenticator i wprowadź wygenerowany kod.', + 'pref_two_factor_auth_reset_code' => 'Zresetuj kod weryfikacyjny', + 'pref_two_factor_auth_disable_2fa' => 'Wyłącz weryfikację dwuetapową', + '2fa_use_secret_instead' => 'Jeżeli nie możesz zeskanować kodu QR użyj sekretu: :secret.', + '2fa_backup_codes' => 'Zachowaj te kody na wypadek zgubienia urządzenia.', + '2fa_already_enabled' => 'Uwierzytelnianie dwuskładnikowe jest już aktywne.', + 'wrong_mfa_code' => 'Ten kod uwierzytelniania nie jest prawidłowy.', + 'pref_save_settings' => 'Zapisz ustawienia', + 'saved_preferences' => 'Preferencje zostały zapisane!', + 'preferences_general' => 'Ogólne', + 'preferences_frontpage' => 'Ekran główny', + 'preferences_security' => 'Bezpieczeństwo', + 'preferences_layout' => 'Układ', + 'preferences_notifications' => 'Powiadomienia', + 'pref_home_show_deposits' => 'Pokaż przychody na stronie domowej', + 'pref_home_show_deposits_info' => 'Ekran główny pokazuje już konta wydatków. Czy chcesz wyświetlać również konta przychodów?', + 'pref_home_do_show_deposits' => 'Tak, pokaż je', + 'successful_count' => 'z których :count zakończone pomyślnie', + 'list_page_size_title' => 'Rozmiar strony', + 'list_page_size_help' => 'Każda lista rzeczy (konta, transakcje itp.) pokazuje co najwyżej tyle na stronę.', + 'list_page_size_label' => 'Rozmiar strony', + 'between_dates' => '(:start i :end)', + 'pref_optional_fields_transaction' => 'Opcjonalne pola dla transakcji', + 'pref_optional_fields_transaction_help' => 'Domyślnie nie wszystkie pola są aktywne podczas tworzenia nowej transakcji (aby uniknąć bałaganu). Poniżej możesz włączyć te pola, jeśli uważasz, że mogą one być przydatne dla Ciebie. Oczywiście każde pole, które jest wyłączone, ale już wypełnione, będzie widoczne niezależnie od ustawienia.', + 'optional_tj_date_fields' => 'Pola dat', + 'optional_tj_other_fields' => 'Inne pola', + 'optional_tj_attachment_fields' => 'Pola załączników', + 'pref_optional_tj_interest_date' => 'Data odsetek', + 'pref_optional_tj_book_date' => 'Data księgowania', + 'pref_optional_tj_process_date' => 'Data przetworzenia', + 'pref_optional_tj_due_date' => 'Termin realizacji', + 'pref_optional_tj_payment_date' => 'Data płatności', + 'pref_optional_tj_invoice_date' => 'Data faktury', + 'pref_optional_tj_internal_reference' => 'Wewnętrzny numer', + 'pref_optional_tj_notes' => 'Notatki', + 'pref_optional_tj_attachments' => 'Załączniki', + 'pref_optional_tj_external_url' => 'Zewnętrzny adres URL', + 'pref_optional_tj_location' => 'Lokalizacja', + 'pref_optional_tj_links' => 'Powiązane transakcje', + 'optional_field_meta_dates' => 'Daty', + 'optional_field_meta_business' => 'Biznesowe', + 'optional_field_attachments' => 'Załączniki', + 'optional_field_meta_data' => 'Opcjonalne metadane', + 'external_url' => 'Zewnętrzny adres URL', + 'pref_notification_bill_reminder' => 'Przypomnienie o wygasających rachunkach', + 'pref_notification_new_access_token' => 'Powiadomienie o utworzeniu nowego tokenu dostępu API', + 'pref_notification_transaction_creation' => 'Powiadomienie o automatycznym utworzeniu transakcji', + 'pref_notification_user_login' => 'Powiadomienie o zalogowaniu się z nowej lokalizacji', + 'pref_notification_rule_action_failures' => 'Powiadom o niewykonaniu akcji reguły (tylko Slack lub Discord)', + 'pref_notifications' => 'Powiadomienia', + 'pref_notifications_help' => 'Wskaż, czy są to powiadomienia, które chcesz otrzymywać. Niektóre powiadomienia mogą zawierać wrażliwe informacje finansowe.', + 'slack_webhook_url' => 'Adres URL webhooka Slack', + 'slack_webhook_url_help' => 'Jeśli chcesz, aby Firefly III powiadamiał Cię używając Slacka, wprowadź tutaj adres URL webhooka. W przeciwnym razie pozostaw pole puste. Jeśli jesteś administratorem, musisz również ustawić ten adres URL w panelu administracji.', + 'slack_url_label' => 'Adres URL "przychodzącego webhooka" dla Slacka', // Financial administrations - 'administration_index' => 'Zarządzanie finansami', - 'administrations_index_menu' => 'Zarządzanie finansami', + 'administration_index' => 'Zarządzanie finansami', + 'administrations_index_menu' => 'Zarządzanie finansami', // profile: - 'purge_data_title' => 'Wyczyść dane z Firefly III', - 'purge_data_expl' => '"Wyczyszczenie" oznacza "usunięcie tego, co zostało już usunięte". W normalnych warunkach Firefly III nie usuwa nic na stałe. Po prostu je ukrywa. Przycisk poniżej usuwa wszystkie "usunięte" rekordy na ZAWSZE.', - 'delete_stuff_header' => 'Usuń i wyczyść dane', - 'purge_all_data' => 'Wyczyść wszystkie usunięte wpisy', - 'purge_data' => 'Wyczyść dane', - 'purged_all_records' => 'Wszystkie usunięte rekordy zostały wyczyszczone.', - 'delete_data_title' => 'Usuń dane z Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'Wszystkie twoje inne sesje zostały wylogowane.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Usuń nieużywane konta', - 'deleted_all_unused_accounts' => 'Wszystkie nieużywane konta zostały usunięte', - 'delete_all_budgets' => 'Usuń WSZYSTKIE budżety', - 'delete_all_categories' => 'Usuń WSZYSTKIE kategorie', - 'delete_all_tags' => 'Usuń WSZYSTKIE tagi', - 'delete_all_bills' => 'Usuń WSZYSTKIE rachunki', - 'delete_all_piggy_banks' => 'Usuń WSZYSTKIE skarbonki', - 'delete_all_rules' => 'Usuń WSZYSTKIE reguły', - 'delete_all_recurring' => 'Usuń WSZYSTKIE transakcje cykliczne', - 'delete_all_object_groups' => 'Usuń WSZYSTKIE grupy obiektów', - 'delete_all_accounts' => 'Usuń WSZYSTKIE konta', - 'delete_all_asset_accounts' => 'Usuń WSZYSTKIE konta aktywów', - 'delete_all_expense_accounts' => 'Usuń WSZYSTKIE konta wydatków', - 'delete_all_revenue_accounts' => 'Usuń WSZYSTKIE konta przychodów', - 'delete_all_liabilities' => 'Usuń WSZYSTKIE swoje zobowiązania', - 'delete_all_transactions' => 'Usuń WSZYSTKIE transakcje', - 'delete_all_withdrawals' => 'Usuń WSZYSTKIE wydatki', - 'delete_all_deposits' => 'Usuń WSZYSTKIE wpłaty', - 'delete_all_transfers' => 'Usuń WSZYSTKIE przelewy', - 'also_delete_transactions' => 'Usunięcie kont spowoduje również usunięcie WSZYSTKICH powiązanych wydatków, wpłat i transferów!', - 'deleted_all_budgets' => 'Usunięto wszystkie budżety', - 'deleted_all_categories' => 'Usunięto wszystkie kategorie', - 'deleted_all_tags' => 'Usunięto wszystkie tagi', - 'deleted_all_bills' => 'Wszystkie rachunki zostały usunięte', - 'deleted_all_piggy_banks' => 'Wszystkie skarbonki zostały usunięte', - 'deleted_all_rules' => 'Wszystkie reguły i grupy reguł zostały usunięte', - 'deleted_all_object_groups' => 'Wszystkie grupy zostały usunięte', - 'deleted_all_accounts' => 'Wszystkie konta zostały usunięte', - 'deleted_all_asset_accounts' => 'Wszystkie konta aktywów zostały usunięte', - 'deleted_all_expense_accounts' => 'Wszystkie konta wydatków zostały usunięte', - 'deleted_all_revenue_accounts' => 'Wszystkie konta przychodów zostały usunięte', - 'deleted_all_liabilities' => 'Wszystkie zobowiązania zostały usunięte', - 'deleted_all_transactions' => 'Wszystkie transakcje zostały usunięte', - 'deleted_all_withdrawals' => 'Wszystkie wydatki zostały usunięte', - 'deleted_all_deposits' => 'Wszystkie wpłaty zostały usunięte', - 'deleted_all_transfers' => 'Wszystkie przelewy zostały usunięte', - 'deleted_all_recurring' => 'Wszystkie cykliczne transakcje zostały usunięte', - 'change_your_password' => 'Zmień swoje hasło', - 'delete_account' => 'Usuń konto', - 'current_password' => 'Bieżące hasło', - 'new_password' => 'Nowe Hasło', - 'new_password_again' => 'Nowe hasło (ponownie)', - 'delete_your_account' => 'Usuń swoje konto', - 'delete_your_account_help' => 'Usunięcie twojego konta usunie również wszystkie konta, transakcje, wszystko co mogłeś mieć zapisane w Firefly III. Po prostu ZNIKNIE.', - 'delete_your_account_password' => 'Wprowadź hasło aby kontynuować.', - 'password' => 'Hasło', - 'are_you_sure' => 'Jesteś pewny? Nie możesz tego cofnąć.', - 'delete_account_button' => 'USUŃ swoje konto', - 'invalid_current_password' => 'Nieprawidłowe bieżące hasło!', - 'password_changed' => 'Hasło zostało zmienione!', - 'should_change' => 'Chodzi o to, aby zmienić swoje hasło.', - 'invalid_password' => 'Nieprawidłowe hasło!', - 'what_is_pw_security' => 'Co to jest "Sprawdź bezpieczeństwo hasła"?', - 'secure_pw_title' => 'Jak wybrać bezpieczne hasło', - 'forgot_password_response' => 'Dziękujemy. Jeśli istnieje konto z tym adresem e-mail, instrukcje znajdziesz w swojej skrzynce odbiorczej.', - 'secure_pw_history' => 'Nie ma tygodnia w którym nie czytalibyśmy w wiadomościach o stronie, która straciła hasła swoich użytkowników. Hakerzy i złodzieje używają tych haseł, aby wykraść twoje prywatne informacje. Te informacje są cenne.', - 'secure_pw_ff' => 'Czy używasz tego samego hasła w całym Internecie? Jeśli jedna strona straci Twoje hasło, hakerzy będą mieli dostęp do wszystkich Twoich danych. Firefly III polega na Twoim wyborze silnego i unikatowego hasła w celu ochrony Twojej dokumentacji finansowej.', - 'secure_pw_check_box' => 'Aby Ci pomóc, Firefly III może sprawdzić, czy hasło, którego chcesz użyć, zostało w przeszłości skradzione. Jeśli okaże się to prawdą, Firefly III radzi NIE używać tego hasła.', - 'secure_pw_working_title' => 'Jak to działa?', - 'secure_pw_working' => 'Zaznaczając to pole, Firefly III wyśle pierwsze pięć znaków skrótu SHA1 Twojego hasła do strony internetowej Troy Hunt, aby sprawdzić, czy znajduje się ono na liście haseł, które wyciekły. To powstrzyma Cię przed używaniem niebezpiecznych haseł, co jest zalecane w najnowszej specjalnej publikacji Narodowy Instytut Standaryzacji i Technologii (NIST) na ten temat.', - 'secure_pw_should' => 'Czy powinienem zaznaczyć to pole?', - 'secure_pw_long_password' => 'Tak. Zawsze sprawdź, czy hasło jest bezpieczne.', - 'command_line_token' => 'Token wiersza poleceń', - 'explain_command_line_token' => 'Potrzebujesz tego tokenu aby wykonywać operacje (takie jak eksportowanie danych) za pomocą wiersza poleceń. Bez niego takie wrażliwe polecenia nie będą działać. Nie udostępniaj nikomu swojego tokenu. Nikt Cię o niego nie zapyta, nawet ja. Jeżeli obawiasz się, że go straciłeś lub jesteś paranoikiem, wygeneruj nowy token używając przycisku.', - 'regenerate_command_line_token' => 'Wygeneruj nowy token wiersza poleceń', - 'token_regenerated' => 'Wygenerowano nowy token wiersza poleceń', - 'change_your_email' => 'Zmień swój adres e-mail', - 'email_verification' => 'Wiadomość e-mail zostanie wysłana na stary ORAZ nowy adres e-mail. Ze względów bezpieczeństwa, nie będziesz mógł się zalogować, dopóki nie zweryfikujesz nowego adresu e-mail. Jeśli nie masz pewności, czy twoja instalacja Firefly III umożliwia wysyłanie wiadomości e-mail, nie korzystaj z tej funkcji. Jeśli jesteś administratorem, możesz przetestować to w panelu administracyjnym.', - 'email_changed_logout' => 'Dopóki nie zweryfikujesz swojego adresu e-mail, nie możesz się zalogować.', - 'login_with_new_email' => 'Teraz możesz logować się nowym adresem e-mail.', - 'login_with_old_email' => 'Teraz ponownie możesz logować się starym adresem e-mail.', - 'login_provider_local_only' => 'Ta akcja nie jest dostępna gdy uwierzytelniasz się poprzez ":login_provider".', - 'external_user_mgt_disabled' => 'Ta akcja nie jest dostępna, gdy Firefly III nie jest odpowiedzialny za zarządzanie użytkownikiem lub obsługę uwierzytelniania.', - 'external_auth_disabled' => 'Ta akcja nie jest dostępna, gdy Firefly III nie jest odpowiedzialny za obsługę uwierzytelniania.', - 'delete_local_info_only' => "Ponieważ Firefly III nie jest odpowiedzialny za zarządzanie użytkownikami lub obsługę uwierzytelniania, ta funkcja usunie tylko lokalne informacje Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Klienci OAuth', - 'profile_oauth_no_clients' => 'Nie utworzyłeś żadnych klientów OAuth.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Klienci', - 'profile_oauth_client_id' => 'ID klienta', - 'profile_oauth_client_name' => 'Nazwa', - 'profile_oauth_client_secret' => 'Sekretny klucz', - 'profile_oauth_create_new_client' => 'Utwórz nowego klienta', - 'profile_oauth_create_client' => 'Utwórz klienta', - 'profile_oauth_edit_client' => 'Edytuj klienta', - 'profile_oauth_name_help' => 'Coś, co Twoi użytkownicy będą rozpoznawać i ufać.', - 'profile_oauth_redirect_url' => 'Przekierowanie URL', - 'profile_oauth_redirect_url_help' => 'Adres URL wywołania zwrotnego autoryzacji aplikacji.', - 'profile_authorized_apps' => 'Autoryzowane aplikacje', - 'profile_authorized_clients' => 'Autoryzowani klienci', - 'profile_scopes' => 'Zakresy', - 'profile_revoke' => 'Unieważnij', - 'profile_oauth_client_secret_title' => 'Sekret klienta', - 'profile_oauth_client_secret_expl' => 'Oto twój nowy sekret klienta. Jest to jedyny raz, gdy zostanie wyświetlony, więc nie zgub go! Możesz teraz użyć tego sekretu, aby wykonać zapytania API.', - 'profile_personal_access_tokens' => 'Osobiste tokeny dostępu', - 'profile_personal_access_token' => 'Osobisty token dostępu', - 'profile_oauth_confidential' => 'Poufne', - 'profile_oauth_confidential_help' => 'Wymagaj od klienta uwierzytelnienia za pomocą sekretu. Poufni klienci mogą przechowywać poświadczenia w bezpieczny sposób bez narażania ich na dostęp przez nieuprawnione strony. Publiczne aplikacje, takie jak natywne aplikacje desktopowe lub JavaScript SPA, nie są w stanie bezpiecznie trzymać sekretów.', - 'profile_personal_access_token_explanation' => 'Oto twój nowy osobisty token dostępu. Jest to jedyny raz, gdy zostanie wyświetlony, więc nie zgub go! Możesz teraz użyć tego tokenu, aby wykonać zapytania API.', - 'profile_no_personal_access_token' => 'Nie utworzyłeś żadnych osobistych tokenów.', - 'profile_create_new_token' => 'Utwórz nowy token', - 'profile_create_token' => 'Utwórz token', - 'profile_create' => 'Utwórz', - 'profile_save_changes' => 'Zapisz zmiany', - 'profile_whoops' => 'Uuuups!', - 'profile_something_wrong' => 'Coś poszło nie tak!', - 'profile_try_again' => 'Coś poszło nie tak. Spróbuj ponownie.', - 'amounts' => 'Kwoty', - 'multi_account_warning_unknown' => 'W zależności od rodzaju transakcji, którą tworzysz, konto źródłowe i/lub docelowe kolejnych podziałów może zostać ustawione na konto zdefiniowane w pierwszym podziale transakcji.', - 'multi_account_warning_withdrawal' => 'Pamiętaj, że konto źródłowe kolejnych podziałów zostanie ustawione na konto zdefiniowane w pierwszym podziale wypłaty.', - 'multi_account_warning_deposit' => 'Pamiętaj, że konto docelowe kolejnych podziałów zostanie ustawione na konto zdefiniowane w pierwszym podziale wpłaty.', - 'multi_account_warning_transfer' => 'Pamiętaj, że konta źródłowe i docelowe kolejnych podziałów zostaną ustawione na konto zdefiniowane w pierwszym podziale transferu.', + 'purge_data_title' => 'Wyczyść dane z Firefly III', + 'purge_data_expl' => '"Wyczyszczenie" oznacza "usunięcie tego, co zostało już usunięte". W normalnych warunkach Firefly III nie usuwa nic na stałe. Po prostu je ukrywa. Przycisk poniżej usuwa wszystkie "usunięte" rekordy na ZAWSZE.', + 'delete_stuff_header' => 'Usuń i wyczyść dane', + 'purge_all_data' => 'Wyczyść wszystkie usunięte wpisy', + 'purge_data' => 'Wyczyść dane', + 'purged_all_records' => 'Wszystkie usunięte rekordy zostały wyczyszczone.', + 'delete_data_title' => 'Usuń dane z Firefly III', + 'permanent_delete_stuff' => 'Możesz usuwać rzeczy z Firefly III. Użycie poniższych przycisków oznacza, że Twoje wpisy zostaną usunięte z widoku i ukryte. Nie ma przycisku cofnięcia, ale wpisy mogą pozostać w bazie danych, skąd możesz je odzyskać, jeśli to konieczne.', + 'other_sessions_logged_out' => 'Wszystkie twoje inne sesje zostały wylogowane.', + 'delete_unused_accounts' => 'Usunięcie nieużywanych kont spowoduje wyczyszczenie list auto-uzupełniania.', + 'delete_all_unused_accounts' => 'Usuń nieużywane konta', + 'deleted_all_unused_accounts' => 'Wszystkie nieużywane konta zostały usunięte', + 'delete_all_budgets' => 'Usuń WSZYSTKIE budżety', + 'delete_all_categories' => 'Usuń WSZYSTKIE kategorie', + 'delete_all_tags' => 'Usuń WSZYSTKIE tagi', + 'delete_all_bills' => 'Usuń WSZYSTKIE rachunki', + 'delete_all_piggy_banks' => 'Usuń WSZYSTKIE skarbonki', + 'delete_all_rules' => 'Usuń WSZYSTKIE reguły', + 'delete_all_recurring' => 'Usuń WSZYSTKIE transakcje cykliczne', + 'delete_all_object_groups' => 'Usuń WSZYSTKIE grupy obiektów', + 'delete_all_accounts' => 'Usuń WSZYSTKIE konta', + 'delete_all_asset_accounts' => 'Usuń WSZYSTKIE konta aktywów', + 'delete_all_expense_accounts' => 'Usuń WSZYSTKIE konta wydatków', + 'delete_all_revenue_accounts' => 'Usuń WSZYSTKIE konta przychodów', + 'delete_all_liabilities' => 'Usuń WSZYSTKIE swoje zobowiązania', + 'delete_all_transactions' => 'Usuń WSZYSTKIE transakcje', + 'delete_all_withdrawals' => 'Usuń WSZYSTKIE wydatki', + 'delete_all_deposits' => 'Usuń WSZYSTKIE wpłaty', + 'delete_all_transfers' => 'Usuń WSZYSTKIE przelewy', + 'also_delete_transactions' => 'Usunięcie kont spowoduje również usunięcie WSZYSTKICH powiązanych wydatków, wpłat i transferów!', + 'deleted_all_budgets' => 'Usunięto wszystkie budżety', + 'deleted_all_categories' => 'Usunięto wszystkie kategorie', + 'deleted_all_tags' => 'Usunięto wszystkie tagi', + 'deleted_all_bills' => 'Wszystkie rachunki zostały usunięte', + 'deleted_all_piggy_banks' => 'Wszystkie skarbonki zostały usunięte', + 'deleted_all_rules' => 'Wszystkie reguły i grupy reguł zostały usunięte', + 'deleted_all_object_groups' => 'Wszystkie grupy zostały usunięte', + 'deleted_all_accounts' => 'Wszystkie konta zostały usunięte', + 'deleted_all_asset_accounts' => 'Wszystkie konta aktywów zostały usunięte', + 'deleted_all_expense_accounts' => 'Wszystkie konta wydatków zostały usunięte', + 'deleted_all_revenue_accounts' => 'Wszystkie konta przychodów zostały usunięte', + 'deleted_all_liabilities' => 'Wszystkie zobowiązania zostały usunięte', + 'deleted_all_transactions' => 'Wszystkie transakcje zostały usunięte', + 'deleted_all_withdrawals' => 'Wszystkie wydatki zostały usunięte', + 'deleted_all_deposits' => 'Wszystkie wpłaty zostały usunięte', + 'deleted_all_transfers' => 'Wszystkie przelewy zostały usunięte', + 'deleted_all_recurring' => 'Wszystkie cykliczne transakcje zostały usunięte', + 'change_your_password' => 'Zmień swoje hasło', + 'delete_account' => 'Usuń konto', + 'current_password' => 'Bieżące hasło', + 'new_password' => 'Nowe Hasło', + 'new_password_again' => 'Nowe hasło (ponownie)', + 'delete_your_account' => 'Usuń swoje konto', + 'delete_your_account_help' => 'Usunięcie twojego konta usunie również wszystkie konta, transakcje, wszystko co mogłeś mieć zapisane w Firefly III. Po prostu ZNIKNIE.', + 'delete_your_account_password' => 'Wprowadź hasło aby kontynuować.', + 'password' => 'Hasło', + 'are_you_sure' => 'Jesteś pewny? Nie możesz tego cofnąć.', + 'delete_account_button' => 'USUŃ swoje konto', + 'invalid_current_password' => 'Nieprawidłowe bieżące hasło!', + 'password_changed' => 'Hasło zostało zmienione!', + 'should_change' => 'Chodzi o to, aby zmienić swoje hasło.', + 'invalid_password' => 'Nieprawidłowe hasło!', + 'what_is_pw_security' => 'Co to jest "Sprawdź bezpieczeństwo hasła"?', + 'secure_pw_title' => 'Jak wybrać bezpieczne hasło', + 'forgot_password_response' => 'Dziękujemy. Jeśli istnieje konto z tym adresem e-mail, instrukcje znajdziesz w swojej skrzynce odbiorczej.', + 'secure_pw_history' => 'Nie ma tygodnia w którym nie czytalibyśmy w wiadomościach o stronie, która straciła hasła swoich użytkowników. Hakerzy i złodzieje używają tych haseł, aby wykraść twoje prywatne informacje. Te informacje są cenne.', + 'secure_pw_ff' => 'Czy używasz tego samego hasła w całym Internecie? Jeśli jedna strona straci Twoje hasło, hakerzy będą mieli dostęp do wszystkich Twoich danych. Firefly III polega na Twoim wyborze silnego i unikatowego hasła w celu ochrony Twojej dokumentacji finansowej.', + 'secure_pw_check_box' => 'Aby Ci pomóc, Firefly III może sprawdzić, czy hasło, którego chcesz użyć, zostało w przeszłości skradzione. Jeśli okaże się to prawdą, Firefly III radzi NIE używać tego hasła.', + 'secure_pw_working_title' => 'Jak to działa?', + 'secure_pw_working' => 'Zaznaczając to pole, Firefly III wyśle pierwsze pięć znaków skrótu SHA1 Twojego hasła do strony internetowej Troy Hunt, aby sprawdzić, czy znajduje się ono na liście haseł, które wyciekły. To powstrzyma Cię przed używaniem niebezpiecznych haseł, co jest zalecane w najnowszej specjalnej publikacji Narodowy Instytut Standaryzacji i Technologii (NIST) na ten temat.', + 'secure_pw_should' => 'Czy powinienem zaznaczyć to pole?', + 'secure_pw_long_password' => 'Tak. Zawsze sprawdź, czy hasło jest bezpieczne.', + 'command_line_token' => 'Token wiersza poleceń', + 'explain_command_line_token' => 'Potrzebujesz tego tokenu aby wykonywać operacje (takie jak eksportowanie danych) za pomocą wiersza poleceń. Bez niego takie wrażliwe polecenia nie będą działać. Nie udostępniaj nikomu swojego tokenu. Nikt Cię o niego nie zapyta, nawet ja. Jeżeli obawiasz się, że go straciłeś lub jesteś paranoikiem, wygeneruj nowy token używając przycisku.', + 'regenerate_command_line_token' => 'Wygeneruj nowy token wiersza poleceń', + 'token_regenerated' => 'Wygenerowano nowy token wiersza poleceń', + 'change_your_email' => 'Zmień swój adres e-mail', + 'email_verification' => 'Wiadomość e-mail zostanie wysłana na stary ORAZ nowy adres e-mail. Ze względów bezpieczeństwa, nie będziesz mógł się zalogować, dopóki nie zweryfikujesz nowego adresu e-mail. Jeśli nie masz pewności, czy twoja instalacja Firefly III umożliwia wysyłanie wiadomości e-mail, nie korzystaj z tej funkcji. Jeśli jesteś administratorem, możesz przetestować to w panelu administracyjnym.', + 'email_changed_logout' => 'Dopóki nie zweryfikujesz swojego adresu e-mail, nie możesz się zalogować.', + 'login_with_new_email' => 'Teraz możesz logować się nowym adresem e-mail.', + 'login_with_old_email' => 'Teraz ponownie możesz logować się starym adresem e-mail.', + 'login_provider_local_only' => 'Ta akcja nie jest dostępna gdy uwierzytelniasz się poprzez ":login_provider".', + 'external_user_mgt_disabled' => 'Ta akcja nie jest dostępna, gdy Firefly III nie jest odpowiedzialny za zarządzanie użytkownikiem lub obsługę uwierzytelniania.', + 'external_auth_disabled' => 'Ta akcja nie jest dostępna, gdy Firefly III nie jest odpowiedzialny za obsługę uwierzytelniania.', + 'delete_local_info_only' => 'Ponieważ Firefly III nie jest odpowiedzialny za zarządzanie użytkownikami lub obsługę uwierzytelniania, ta funkcja usunie tylko lokalne informacje Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Klienci OAuth', + 'profile_oauth_no_clients' => 'Nie utworzyłeś żadnych klientów OAuth.', + 'profile_oauth_clients_external_auth' => 'Jeśli używasz zewnętrznego dostawcy uwierzytelniania, takiego jak Authelia, klienci OAuth nie będą działać. Możesz używać tylko osobistych tokenów dostępu.', + 'profile_oauth_clients_header' => 'Klienci', + 'profile_oauth_client_id' => 'ID klienta', + 'profile_oauth_client_name' => 'Nazwa', + 'profile_oauth_client_secret' => 'Sekretny klucz', + 'profile_oauth_create_new_client' => 'Utwórz nowego klienta', + 'profile_oauth_create_client' => 'Utwórz klienta', + 'profile_oauth_edit_client' => 'Edytuj klienta', + 'profile_oauth_name_help' => 'Coś, co Twoi użytkownicy będą rozpoznawać i ufać.', + 'profile_oauth_redirect_url' => 'Przekierowanie URL', + 'profile_oauth_redirect_url_help' => 'Adres URL wywołania zwrotnego autoryzacji aplikacji.', + 'profile_authorized_apps' => 'Autoryzowane aplikacje', + 'profile_authorized_clients' => 'Autoryzowani klienci', + 'profile_scopes' => 'Zakresy', + 'profile_revoke' => 'Unieważnij', + 'profile_oauth_client_secret_title' => 'Sekret klienta', + 'profile_oauth_client_secret_expl' => 'Oto twój nowy sekret klienta. Jest to jedyny raz, gdy zostanie wyświetlony, więc nie zgub go! Możesz teraz użyć tego sekretu, aby wykonać zapytania API.', + 'profile_personal_access_tokens' => 'Osobiste tokeny dostępu', + 'profile_personal_access_token' => 'Osobisty token dostępu', + 'profile_oauth_confidential' => 'Poufne', + 'profile_oauth_confidential_help' => 'Wymagaj od klienta uwierzytelnienia za pomocą sekretu. Poufni klienci mogą przechowywać poświadczenia w bezpieczny sposób bez narażania ich na dostęp przez nieuprawnione strony. Publiczne aplikacje, takie jak natywne aplikacje desktopowe lub JavaScript SPA, nie są w stanie bezpiecznie trzymać sekretów.', + 'profile_personal_access_token_explanation' => 'Oto twój nowy osobisty token dostępu. Jest to jedyny raz, gdy zostanie wyświetlony, więc nie zgub go! Możesz teraz użyć tego tokenu, aby wykonać zapytania API.', + 'profile_no_personal_access_token' => 'Nie utworzyłeś żadnych osobistych tokenów.', + 'profile_create_new_token' => 'Utwórz nowy token', + 'profile_create_token' => 'Utwórz token', + 'profile_create' => 'Utwórz', + 'profile_save_changes' => 'Zapisz zmiany', + 'profile_whoops' => 'Uuuups!', + 'profile_something_wrong' => 'Coś poszło nie tak!', + 'profile_try_again' => 'Coś poszło nie tak. Spróbuj ponownie.', + 'amounts' => 'Kwoty', + 'multi_account_warning_unknown' => 'W zależności od rodzaju transakcji, którą tworzysz, konto źródłowe i/lub docelowe kolejnych podziałów może zostać ustawione na konto zdefiniowane w pierwszym podziale transakcji.', + 'multi_account_warning_withdrawal' => 'Pamiętaj, że konto źródłowe kolejnych podziałów zostanie ustawione na konto zdefiniowane w pierwszym podziale wypłaty.', + 'multi_account_warning_deposit' => 'Pamiętaj, że konto docelowe kolejnych podziałów zostanie ustawione na konto zdefiniowane w pierwszym podziale wpłaty.', + 'multi_account_warning_transfer' => 'Pamiętaj, że konta źródłowe i docelowe kolejnych podziałów zostaną ustawione na konto zdefiniowane w pierwszym podziale transferu.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Eksportuj dane z Firefly III', - 'export_data_menu' => 'Eksportuj dane', - 'export_data_bc' => 'Eksportuj dane z Firefly III', - 'export_data_main_title' => 'Eksportuj dane z Firefly III', - 'export_data_expl' => 'Ten odnośnik pozwala wyeksportować wszystkie transakcje i metadane z Firefly III. Więcej informacji o procesie znajdziesz w pomocy (ikonka (?) w prawym górnym rogu).', - 'export_data_all_transactions' => 'Eksportuj wszystkie transakcje', - 'export_data_advanced_expl' => 'Jeśli potrzebujesz bardziej zaawansowanego lub specyficznego rodzaju eksportu, przeczytaj pomoc, jak użyć polecenia konsoli php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Eksportuj dane z Firefly III', + 'export_data_menu' => 'Eksportuj dane', + 'export_data_bc' => 'Eksportuj dane z Firefly III', + 'export_data_main_title' => 'Eksportuj dane z Firefly III', + 'export_data_expl' => 'Ten odnośnik pozwala wyeksportować wszystkie transakcje i metadane z Firefly III. Więcej informacji o procesie znajdziesz w pomocy (ikonka (?) w prawym górnym rogu).', + 'export_data_all_transactions' => 'Eksportuj wszystkie transakcje', + 'export_data_advanced_expl' => 'Jeśli potrzebujesz bardziej zaawansowanego lub specyficznego rodzaju eksportu, przeczytaj pomoc, jak użyć polecenia konsoli php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Jeden załącznik |:count załączników', - 'attachments' => 'Załączniki', - 'edit_attachment' => 'Modyfikuj załącznik ":name"', - 'update_attachment' => 'Aktualizuj załącznik', - 'delete_attachment' => 'Usuń załącznik ":name"', - 'attachment_deleted' => 'Usunięto załącznik ":name"', - 'liabilities_deleted' => 'Usunięto zobowiązanie ":name"', - 'attachment_updated' => 'Zmodyfikowano załącznik ":name"', - 'upload_max_file_size' => 'Maksymalny rozmiar pliku to: :size', - 'list_all_attachments' => 'Lista wszystkich załączników', + 'nr_of_attachments' => 'Jeden załącznik |:count załączników', + 'attachments' => 'Załączniki', + 'edit_attachment' => 'Modyfikuj załącznik ":name"', + 'update_attachment' => 'Aktualizuj załącznik', + 'delete_attachment' => 'Usuń załącznik ":name"', + 'attachment_deleted' => 'Usunięto załącznik ":name"', + 'liabilities_deleted' => 'Usunięto zobowiązanie ":name"', + 'attachment_updated' => 'Zmodyfikowano załącznik ":name"', + 'upload_max_file_size' => 'Maksymalny rozmiar pliku to: :size', + 'list_all_attachments' => 'Lista wszystkich załączników', // transaction index - 'title_expenses' => 'Wydatki', - 'title_withdrawal' => 'Wydatki', - 'title_revenue' => 'Przychód / dochód', - 'title_deposit' => 'Przychód / dochód', - 'title_transfer' => 'Transfery', - 'title_transfers' => 'Transfery', - 'submission_options' => 'Opcje zapisu', - 'apply_rules_checkbox' => 'Zastosuj reguły', - 'fire_webhooks_checkbox' => 'Uruchom webhooki', + 'is_reconciled_fields_dropped' => 'Ponieważ ta transakcja jest uzgodniona, nie będziesz w stanie zaktualizować ani kont, ani kwot.', + 'title_expenses' => 'Wydatki', + 'title_withdrawal' => 'Wydatki', + 'title_revenue' => 'Przychód / dochód', + 'title_deposit' => 'Przychód / dochód', + 'title_transfer' => 'Transfery', + 'title_transfers' => 'Transfery', + 'submission_options' => 'Opcje zapisu', + 'apply_rules_checkbox' => 'Zastosuj reguły', + 'fire_webhooks_checkbox' => 'Uruchom webhooki', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Ta transakcja jest już wypłatą', - 'convert_is_already_type_Deposit' => 'Ta transakcja jest już wpłatą', - 'convert_is_already_type_Transfer' => 'Ta transakcja jest już transferem', - 'convert_to_Withdrawal' => 'Konwertuj ":description" na wypłatę', - 'convert_to_Deposit' => 'Konwertuj ":description" na wpłatę', - 'convert_to_Transfer' => 'Konwertuj ":description" na transfer', - 'convert_options_WithdrawalDeposit' => 'Konwertuj wypłatę na wpłatę', - 'convert_options_WithdrawalTransfer' => 'Konwertuj wypłatę na transfer', - 'convert_options_DepositTransfer' => 'Konwertuj wpłatę na transfer', - 'convert_options_DepositWithdrawal' => 'Konwertuj wpłatę na wypłatę', - 'convert_options_TransferWithdrawal' => 'Konwertuj transfer na wypłatę', - 'convert_options_TransferDeposit' => 'Konwertuj transfer na wpłatę', - 'convert_Withdrawal_to_deposit' => 'Konwertuj tę wypłatę na wpłatę', - 'convert_Withdrawal_to_transfer' => 'Konwertuj tę wypłatę na transfer', - 'convert_Deposit_to_withdrawal' => 'Konwertuj tę wpłatę na wypłatę', - 'convert_Deposit_to_transfer' => 'Konwertuj tę wpłatę na transfer', - 'convert_Transfer_to_deposit' => 'Konwertuj ten transfer na wpłatę', - 'convert_Transfer_to_withdrawal' => 'Konwertuj ten transfer na wypłatę', - 'convert_please_set_revenue_source' => 'Proszę wybierz konto przychodów, z którego będą przychodzić pieniądze.', - 'convert_please_set_asset_destination' => 'Proszę wybierz konto aktywów, do którego będą wychodzić pieniądze.', - 'convert_please_set_expense_destination' => 'Proszę wybierz konto wydatków, do którego będą wychodzić pieniądze.', - 'convert_please_set_asset_source' => 'Proszę wybierz konto aktywów, z którego będą przychodzić pieniądze.', - 'convert_expl_w_d' => 'Podczas konwersji z wypłaty na wpłatę pieniądze zostaną wpłacone na wyświetlane konto docelowe, a nie wycofane z niego.|Podczas konwersji z wypłaty na wpłatę pieniądze zostaną wpłacone na wyświetlane konta docelowe, a nie wycofane z nich.', - 'convert_expl_w_t' => 'Podczas konwersji wypłaty na przelew, środki zostaną przeniesione z rachunku źródłowego na inny rachunek aktywów lub zobowiązań zamiast być wydane na oryginalnym koncie wydatków.|Podczas konwersji wypłaty na przelew, środki zostaną przeniesione z rachunków źródłowych na inne rachunki aktywów lub zobowiązań zamiast być wydane na oryginalnych kontach wydatków.', - 'convert_expl_d_w' => 'Podczas konwersji z wpłaty na wypłatę pieniądze zostaną wypłacone z wyświetlanego konta źródłowego, a nie wpłacone na nie.|Podczas konwersji z wpłaty na wypłatę pieniądze zostaną wypłacone z wyświetlanych kont źródłowych, a nie wpłacone na nie.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'Aby zakończyć konwersję, proszę ustawić nowe konto źródłowe.|Aby zakończyć konwersję, ustaw nowe konta źródłowe.', - 'convert_select_destinations' => 'Aby zakończyć konwersję, wybierz nowe konto docelowe poniżej.|Aby zakończyć konwersję, wybierz nowe konta docelowe poniżej.', - 'converted_to_Withdrawal' => 'Transakcja została przekonwertowana do wypłaty', - 'converted_to_Deposit' => 'Transakcja została przekonwertowana do wpłaty', - 'converted_to_Transfer' => 'Transakcja została przekonwertowana do transferu', - 'invalid_convert_selection' => 'Wybrane konto jest już używane w tej transakcji lub nie istnieje.', - 'source_or_dest_invalid' => 'Nie można znaleźć poprawnych szczegółów transakcji. Konwersja nie jest możliwa.', - 'convert_to_withdrawal' => 'Konwertuj na wypłatę', - 'convert_to_deposit' => 'Konwertuj na wpłatę', - 'convert_to_transfer' => 'Konwertuj na transfer', + 'convert_is_already_type_Withdrawal' => 'Ta transakcja jest już wypłatą', + 'convert_is_already_type_Deposit' => 'Ta transakcja jest już wpłatą', + 'convert_is_already_type_Transfer' => 'Ta transakcja jest już transferem', + 'convert_to_Withdrawal' => 'Konwertuj ":description" na wypłatę', + 'convert_to_Deposit' => 'Konwertuj ":description" na wpłatę', + 'convert_to_Transfer' => 'Konwertuj ":description" na transfer', + 'convert_options_WithdrawalDeposit' => 'Konwertuj wypłatę na wpłatę', + 'convert_options_WithdrawalTransfer' => 'Konwertuj wypłatę na transfer', + 'convert_options_DepositTransfer' => 'Konwertuj wpłatę na transfer', + 'convert_options_DepositWithdrawal' => 'Konwertuj wpłatę na wypłatę', + 'convert_options_TransferWithdrawal' => 'Konwertuj transfer na wypłatę', + 'convert_options_TransferDeposit' => 'Konwertuj transfer na wpłatę', + 'convert_Withdrawal_to_deposit' => 'Konwertuj tę wypłatę na wpłatę', + 'convert_Withdrawal_to_transfer' => 'Konwertuj tę wypłatę na transfer', + 'convert_Deposit_to_withdrawal' => 'Konwertuj tę wpłatę na wypłatę', + 'convert_Deposit_to_transfer' => 'Konwertuj tę wpłatę na transfer', + 'convert_Transfer_to_deposit' => 'Konwertuj ten transfer na wpłatę', + 'convert_Transfer_to_withdrawal' => 'Konwertuj ten transfer na wypłatę', + 'convert_please_set_revenue_source' => 'Proszę wybierz konto przychodów, z którego będą przychodzić pieniądze.', + 'convert_please_set_asset_destination' => 'Proszę wybierz konto aktywów, do którego będą wychodzić pieniądze.', + 'convert_please_set_expense_destination' => 'Proszę wybierz konto wydatków, do którego będą wychodzić pieniądze.', + 'convert_please_set_asset_source' => 'Proszę wybierz konto aktywów, z którego będą przychodzić pieniądze.', + 'convert_expl_w_d' => 'Podczas konwersji z wypłaty na wpłatę pieniądze zostaną wpłacone na wyświetlane konto docelowe, a nie wycofane z niego.|Podczas konwersji z wypłaty na wpłatę pieniądze zostaną wpłacone na wyświetlane konta docelowe, a nie wycofane z nich.', + 'convert_expl_w_t' => 'Podczas konwersji wypłaty na przelew, środki zostaną przeniesione z rachunku źródłowego na inny rachunek aktywów lub zobowiązań zamiast być wydane na oryginalnym koncie wydatków.|Podczas konwersji wypłaty na przelew, środki zostaną przeniesione z rachunków źródłowych na inne rachunki aktywów lub zobowiązań zamiast być wydane na oryginalnych kontach wydatków.', + 'convert_expl_d_w' => 'Podczas konwersji z wpłaty na wypłatę pieniądze zostaną wypłacone z wyświetlanego konta źródłowego, a nie wpłacone na nie.|Podczas konwersji z wpłaty na wypłatę pieniądze zostaną wypłacone z wyświetlanych kont źródłowych, a nie wpłacone na nie.', + 'convert_expl_d_t' => 'Kiedy zamienisz wpłatę na przelew, pieniądze zostaną wpłacone na wskazany rachunek docelowy z dowolnego konta aktywów lub zobowiązań.|Kiedy zamienisz wpłatę na przelew, pieniądze zostaną wpłacone na wskazane konta docelowe z dowolnego konta aktywów lub pasywów.', + 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'Aby zakończyć konwersję, proszę ustawić nowe konto źródłowe.|Aby zakończyć konwersję, ustaw nowe konta źródłowe.', + 'convert_select_destinations' => 'Aby zakończyć konwersję, wybierz nowe konto docelowe poniżej.|Aby zakończyć konwersję, wybierz nowe konta docelowe poniżej.', + 'converted_to_Withdrawal' => 'Transakcja została przekonwertowana do wypłaty', + 'converted_to_Deposit' => 'Transakcja została przekonwertowana do wpłaty', + 'converted_to_Transfer' => 'Transakcja została przekonwertowana do transferu', + 'invalid_convert_selection' => 'Wybrane konto jest już używane w tej transakcji lub nie istnieje.', + 'source_or_dest_invalid' => 'Nie można znaleźć poprawnych szczegółów transakcji. Konwersja nie jest możliwa.', + 'convert_to_withdrawal' => 'Konwertuj na wypłatę', + 'convert_to_deposit' => 'Konwertuj na wpłatę', + 'convert_to_transfer' => 'Konwertuj na transfer', // create new stuff: - 'create_new_withdrawal' => 'Utwórz nową wypłatę', - 'create_new_deposit' => 'Utwórz nową wpłatę', - 'create_new_transfer' => 'Utwórz nowy transfer', - 'create_new_asset' => 'Utwórz nowe konto aktywów', - 'create_new_liabilities' => 'Utwórz nowe zobowiązanie', - 'create_new_expense' => 'Utwórz nowe konto wydatków', - 'create_new_revenue' => 'Utwórz nowe konto przychodów', - 'create_new_piggy_bank' => 'Utwórz nową skarbonkę', - 'create_new_bill' => 'Utwórz nowy rachunek', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Utwórz nową wypłatę', + 'create_new_deposit' => 'Utwórz nową wpłatę', + 'create_new_transfer' => 'Utwórz nowy transfer', + 'create_new_asset' => 'Utwórz nowe konto aktywów', + 'create_new_liabilities' => 'Utwórz nowe zobowiązanie', + 'create_new_expense' => 'Utwórz nowe konto wydatków', + 'create_new_revenue' => 'Utwórz nowe konto przychodów', + 'create_new_piggy_bank' => 'Utwórz nową skarbonkę', + 'create_new_bill' => 'Utwórz nowy rachunek', + 'create_new_subscription' => 'Utwórz nową subskrypcję', + 'create_new_rule' => 'Utwórz nową regułę', // currencies: - 'create_currency' => 'Utwórz nową walutę', - 'store_currency' => 'Zapisz nową walutę', - 'update_currency' => 'Modyfikuj walutę', - 'new_default_currency' => ':name jest teraz domyślną walutą.', - 'cannot_delete_currency' => 'Nie można usunąć waluty :name, ponieważ jest ona nadal używana.', - 'cannot_delete_fallback_currency' => ':name jest walutą rezerwową systemu i nie można jej usunąć.', - 'cannot_disable_currency_journals' => 'Nie można wyłączyć :name ponieważ istnieją powiązane transakcje.', - 'cannot_disable_currency_last_left' => 'Nie można wyłączyć :name, ponieważ jest to ostatnia włączona waluta.', - 'cannot_disable_currency_account_meta' => 'Nie można wyłączyć :name ponieważ jest użyte na kontach aktywów.', - 'cannot_disable_currency_bills' => 'Nie można wyłączyć :name ponieważ jest użyte w rachunkach.', - 'cannot_disable_currency_recurring' => 'Nie można wyłączyć :name ponieważ jest użyte w transakcjach cyklicznych.', - 'cannot_disable_currency_available_budgets' => 'Nie można wyłączyć :name ponieważ jest użyte w dostępnych budżetach.', - 'cannot_disable_currency_budget_limits' => 'Nie można wyłączyć :name ponieważ jest użyte w budżetach.', - 'cannot_disable_currency_current_default' => 'Nie można wyłączyć :name ponieważ jest to bieżąca waluta domyślna.', - 'cannot_disable_currency_system_fallback' => 'Nie można wyłączyć :name ponieważ jest to waluta domyślna systemu.', - 'disable_EUR_side_effects' => 'Euro jest awaryjną walutą w systemie. Deaktywacja może mieć nieprzewidziane skutki i może spowodować wygaśnięcie gwarancji.', - 'deleted_currency' => 'Waluta :name została usunięta', - 'created_currency' => 'Waluta :name została utworzona', - 'could_not_store_currency' => 'Nie można zapisać nowej waluty.', - 'updated_currency' => 'Waluta :name została zmodyfikowana', - 'ask_site_owner' => 'Poproś :owner aby dodał, usunął lub zmodyfikował waluty.', - 'currencies_intro' => 'Firefly III obsługuje różne waluty, które można ustawić i włączyć tutaj.', - 'make_default_currency' => 'Ustaw jako domyślną', - 'default_currency' => 'domyślna', - 'currency_is_disabled' => 'Nieaktywna', - 'enable_currency' => 'Aktywuj', - 'disable_currency' => 'Deaktywuj', - 'currencies_default_disabled' => 'Większość z tych walut jest domyślnie wyłączona. Aby móc z nich korzystać, należy je wcześniej aktywować.', - 'currency_is_now_enabled' => 'Waluta ":name" została aktywowana', - 'currency_is_now_disabled' => 'Waluta ":name" została deaktywowana', + 'create_currency' => 'Utwórz nową walutę', + 'store_currency' => 'Zapisz nową walutę', + 'update_currency' => 'Modyfikuj walutę', + 'new_default_currency' => '":name" jest teraz domyślną walutą.', + 'default_currency_failed' => 'Nie można ustawić ":name" jako domyślnej waluty. Proszę sprawdź dziennik zdarzeń.', + 'cannot_delete_currency' => 'Nie można usunąć waluty :name, ponieważ jest ona nadal używana.', + 'cannot_delete_fallback_currency' => ':name jest walutą rezerwową systemu i nie można jej usunąć.', + 'cannot_disable_currency_journals' => 'Nie można wyłączyć :name ponieważ istnieją powiązane transakcje.', + 'cannot_disable_currency_last_left' => 'Nie można wyłączyć :name, ponieważ jest to ostatnia włączona waluta.', + 'cannot_disable_currency_account_meta' => 'Nie można wyłączyć :name ponieważ jest użyte na kontach aktywów.', + 'cannot_disable_currency_bills' => 'Nie można wyłączyć :name ponieważ jest użyte w rachunkach.', + 'cannot_disable_currency_recurring' => 'Nie można wyłączyć :name ponieważ jest użyte w transakcjach cyklicznych.', + 'cannot_disable_currency_available_budgets' => 'Nie można wyłączyć :name ponieważ jest użyte w dostępnych budżetach.', + 'cannot_disable_currency_budget_limits' => 'Nie można wyłączyć :name ponieważ jest użyte w budżetach.', + 'cannot_disable_currency_current_default' => 'Nie można wyłączyć :name ponieważ jest to bieżąca waluta domyślna.', + 'cannot_disable_currency_system_fallback' => 'Nie można wyłączyć :name ponieważ jest to waluta domyślna systemu.', + 'disable_EUR_side_effects' => 'Euro jest awaryjną walutą w systemie. Deaktywacja może mieć nieprzewidziane skutki i może spowodować wygaśnięcie gwarancji.', + 'deleted_currency' => 'Waluta :name została usunięta', + 'created_currency' => 'Waluta :name została utworzona', + 'could_not_store_currency' => 'Nie można zapisać nowej waluty.', + 'updated_currency' => 'Waluta :name została zmodyfikowana', + 'ask_site_owner' => 'Poproś :owner aby dodał, usunął lub zmodyfikował waluty.', + 'currencies_intro' => 'Firefly III obsługuje różne waluty, które można ustawić i włączyć tutaj.', + 'make_default_currency' => 'Ustaw jako domyślną', + 'default_currency' => 'domyślna', + 'currency_is_disabled' => 'Nieaktywna', + 'enable_currency' => 'Aktywuj', + 'disable_currency' => 'Deaktywuj', + 'currencies_default_disabled' => 'Większość z tych walut jest domyślnie wyłączona. Aby móc z nich korzystać, należy je wcześniej aktywować.', + 'currency_is_now_enabled' => 'Waluta ":name" została aktywowana', + 'could_not_enable_currency' => 'Nie można włączyć waluty ":name". Sprawdź dziennik zdarzeń.', + 'currency_is_now_disabled' => 'Waluta ":name" została deaktywowana', + 'could_not_disable_currency' => 'Nie można wyłączyć waluty ":name". Być może jest w użyciu?', // forms: - 'mandatoryFields' => 'Pola wymagane', - 'optionalFields' => 'Pola opcjonalne', - 'options' => 'Opcje', + 'mandatoryFields' => 'Pola wymagane', + 'optionalFields' => 'Pola opcjonalne', + 'options' => 'Opcje', // budgets: - 'daily_budgets' => 'Budżety dzienne', - 'weekly_budgets' => 'Budżety tygodniowe', - 'monthly_budgets' => 'Budżety miesięczne', - 'quarterly_budgets' => 'Budżety kwartalne', - 'half_year_budgets' => 'Budżety półroczne', - 'yearly_budgets' => 'Budżety roczne', - 'other_budgets' => 'Budżety niestandardowe', - 'budget_limit_not_in_range' => 'Ta kwota dotyczy okresu od :start do :end:', - 'total_available_budget' => 'Dostępny budżet (pomiędzy :start i :end)', - 'total_available_budget_in_currency' => 'Dostępny budżet w :currency', - 'see_below' => 'zobacz poniżej', - 'create_new_budget' => 'Utwórz nowy budżet', - 'store_new_budget' => 'Zapisz nowy budżet', - 'stored_new_budget' => 'Zapisano nowy budżet ":name"', - 'available_between' => 'Dostępne od :start i :end', - 'transactionsWithoutBudget' => 'Wydatki bez budżetu', - 'transactions_no_budget' => 'Wydatki bez budżetu między :start i :end', - 'spent_between' => 'Wydano między :start i :end', - 'set_available_amount' => 'Ustaw dostępną kwotę', - 'update_available_amount' => 'Aktualizuj dostępną kwotę', - 'ab_basic_modal_explain' => 'Użyj tego formularza aby wskazać, ile jesteś w stanie zabudżetować (w sumie, w :currency) we skazanym okresie.', - 'createBudget' => 'Nowy budżet', - 'invalid_currency' => 'To jest niewłaściwa waluta', - 'invalid_amount' => 'Proszę podać kwotę', - 'set_ab' => 'Dostępna kwota budżetu została ustalona', - 'updated_ab' => 'Dostępna kwota budżetu została zaktualizowana', - 'deleted_ab' => 'Dostępna kwota budżetu została usunięta', - 'deleted_bl' => 'Zabudżetowana kwota została usunięta', - 'alt_currency_ab_create' => 'Ustaw dostępny budżet w innej walucie', - 'bl_create_btn' => 'Ustaw budżet w innej walucie', - 'inactiveBudgets' => 'Nieaktywne budżety', - 'without_budget_between' => 'Transakcje bez budżetu między :start i :end', - 'delete_budget' => 'Usuń budżet ":name"', - 'deleted_budget' => 'Usunięto budżet ":name"', - 'edit_budget' => 'Modyfikuj budżet ":name"', - 'updated_budget' => 'Zmodyfikowano budżet ":name"', - 'update_amount' => 'Aktualizuj kwotę', - 'update_budget' => 'Aktualizuj budżet', - 'update_budget_amount_range' => 'Zaktualizuj (spodziewaną) dostępną kwotę między :start a :end', - 'set_budget_limit_title' => 'Ustaw zabudżetową kwotę dla budżetu :budget pomiędzy :start i :end', - 'set_budget_limit' => 'Ustaw zabudżetowaną kwotę', - 'budget_period_navigator' => 'Nawigator okresowy', - 'info_on_available_amount' => 'Co mam do dyspozycji?', - 'available_amount_indication' => 'Skorzystaj z tych kwot, aby uzyskać wskazówkę ile może wynosić Twój całkowity budżet.', - 'suggested' => 'Sugerowane', - 'average_between' => 'Średnia pomiędzy :start a :end', - 'transferred_in' => 'Przesłane (do)', - 'transferred_away' => 'Przesłane (od)', - 'auto_budget_none' => 'Brak automatycznego budżetu', - 'auto_budget_reset' => 'Ustaw stałą kwotę w każdym okresie', - 'auto_budget_rollover' => 'Dodaj kwotę w każdym okresie', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Dziennie', - 'auto_budget_period_weekly' => 'Tygodniowo', - 'auto_budget_period_monthly' => 'Miesięcznie', - 'auto_budget_period_quarterly' => 'Kwartalnie', - 'auto_budget_period_half_year' => 'Co pół roku', - 'auto_budget_period_yearly' => 'Rocznie', - 'auto_budget_help' => 'Możesz przeczytać więcej o tej funkcji w pomocy. Kliknij ikonę (?) u góry prawej strony.', - 'auto_budget_reset_icon' => 'Ten budżet będzie okresowo ustalany', - 'auto_budget_rollover_icon' => 'Kwota budżetu będzie okresowo rosła', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Usuń zabudżetowaną kwotę w :currency', + 'daily_budgets' => 'Budżety dzienne', + 'weekly_budgets' => 'Budżety tygodniowe', + 'monthly_budgets' => 'Budżety miesięczne', + 'quarterly_budgets' => 'Budżety kwartalne', + 'half_year_budgets' => 'Budżety półroczne', + 'yearly_budgets' => 'Budżety roczne', + 'other_budgets' => 'Budżety niestandardowe', + 'budget_limit_not_in_range' => 'Ta kwota dotyczy okresu od :start do :end:', + 'total_available_budget' => 'Dostępny budżet (pomiędzy :start i :end)', + 'total_available_budget_in_currency' => 'Dostępny budżet w :currency', + 'see_below' => 'zobacz poniżej', + 'create_new_budget' => 'Utwórz nowy budżet', + 'store_new_budget' => 'Zapisz nowy budżet', + 'stored_new_budget' => 'Zapisano nowy budżet ":name"', + 'available_between' => 'Dostępne od :start i :end', + 'transactionsWithoutBudget' => 'Wydatki bez budżetu', + 'transactions_no_budget' => 'Wydatki bez budżetu między :start i :end', + 'spent_between' => 'Wydano między :start i :end', + 'spent_between_left' => 'Wydano :spent pomiędzy :start i :end, pozostało :left.', + 'set_available_amount' => 'Ustaw dostępną kwotę', + 'update_available_amount' => 'Aktualizuj dostępną kwotę', + 'ab_basic_modal_explain' => 'Użyj tego formularza aby wskazać, ile jesteś w stanie zabudżetować (w sumie, w :currency) we skazanym okresie.', + 'createBudget' => 'Nowy budżet', + 'invalid_currency' => 'To jest niewłaściwa waluta', + 'invalid_amount' => 'Proszę podać kwotę', + 'set_ab' => 'Dostępna kwota budżetu została ustalona', + 'updated_ab' => 'Dostępna kwota budżetu została zaktualizowana', + 'deleted_ab' => 'Dostępna kwota budżetu została usunięta', + 'deleted_bl' => 'Zabudżetowana kwota została usunięta', + 'alt_currency_ab_create' => 'Ustaw dostępny budżet w innej walucie', + 'bl_create_btn' => 'Ustaw budżet w innej walucie', + 'inactiveBudgets' => 'Nieaktywne budżety', + 'without_budget_between' => 'Transakcje bez budżetu między :start i :end', + 'delete_budget' => 'Usuń budżet ":name"', + 'deleted_budget' => 'Usunięto budżet ":name"', + 'edit_budget' => 'Modyfikuj budżet ":name"', + 'updated_budget' => 'Zmodyfikowano budżet ":name"', + 'update_amount' => 'Aktualizuj kwotę', + 'update_budget' => 'Aktualizuj budżet', + 'update_budget_amount_range' => 'Zaktualizuj (spodziewaną) dostępną kwotę między :start a :end', + 'set_budget_limit_title' => 'Ustaw zabudżetową kwotę dla budżetu :budget pomiędzy :start i :end', + 'set_budget_limit' => 'Ustaw zabudżetowaną kwotę', + 'budget_period_navigator' => 'Nawigator okresowy', + 'info_on_available_amount' => 'Co mam do dyspozycji?', + 'available_amount_indication' => 'Skorzystaj z tych kwot, aby uzyskać wskazówkę ile może wynosić Twój całkowity budżet.', + 'suggested' => 'Sugerowane', + 'average_between' => 'Średnia pomiędzy :start a :end', + 'transferred_in' => 'Przesłane (do)', + 'transferred_away' => 'Przesłane (od)', + 'auto_budget_none' => 'Brak automatycznego budżetu', + 'auto_budget_reset' => 'Ustaw stałą kwotę w każdym okresie', + 'auto_budget_rollover' => 'Dodaj kwotę w każdym okresie', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Dziennie', + 'auto_budget_period_weekly' => 'Tygodniowo', + 'auto_budget_period_monthly' => 'Miesięcznie', + 'auto_budget_period_quarterly' => 'Kwartalnie', + 'auto_budget_period_half_year' => 'Co pół roku', + 'auto_budget_period_yearly' => 'Rocznie', + 'auto_budget_help' => 'Możesz przeczytać więcej o tej funkcji w pomocy. Kliknij ikonę (?) u góry prawej strony.', + 'auto_budget_reset_icon' => 'Ten budżet będzie okresowo ustalany', + 'auto_budget_rollover_icon' => 'Kwota budżetu będzie okresowo rosła', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Usuń zabudżetowaną kwotę w :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Nie oczekiwany w tym okresie', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Nie (jeszcze)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Rachunek pasuje do transakcji między :low a :high.', - 'running_again_loss' => 'Transakcje poprzednio powiązane z tym rachunkiem mogą stracić to powiązanie, jeżeli nie będą spełniały założeń reguł(y).', - 'bill_related_rules' => 'Reguły powiązane z tym rachunkiem', - 'repeats' => 'Powtarza się', - 'bill_end_date_help' => 'Pole opcjonalne. Oczekuje się, że rachunek zakończy się tego dnia.', - 'bill_extension_date_help' => 'Pole opcjonalne. Rachunek musi być przedłużony (lub anulowany) w dniu lub przed tą datą.', - 'bill_end_index_line' => 'Ten rachunek kończy się :date', - 'bill_extension_index_line' => 'Ten rachunek musi zostać przedłużony lub anulowany :date', - 'connected_journals' => 'Powiązane transakcje', - 'auto_match_on' => 'Automatycznie dopasowane przez Firefly III', - 'auto_match_off' => 'Niedopasowane automatycznie przez Firefly III', - 'next_expected_match' => 'Następne oczekiwane dopasowanie', - 'delete_bill' => 'Usuń rachunek ":name"', - 'deleted_bill' => 'Usunięto rachunek ":name"', - 'edit_bill' => 'Modyfikuj rachunek ":name"', - 'more' => 'Więcej', - 'rescan_old' => 'Uruchom ponownie reguły na wszystkich transakcjach', - 'update_bill' => 'Aktualizuj rachunek', - 'updated_bill' => 'Zaktualizowano rachunek ":name"', - 'store_new_bill' => 'Zapisz nowy rachunek', - 'stored_new_bill' => 'Zapisano nowy rachunek ":name"', - 'cannot_scan_inactive_bill' => 'Nieaktywne rachunki nie mogą być zeskanowane.', - 'rescanned_bill' => 'Przeskanowano wszystko i połączono :count transakcję z rachunkiem.|Przeskanowano wszystko i połączono :count transakcji z rachunkiem.', - 'average_bill_amount_year' => 'Średnia kwota rachunku (:year)', - 'average_bill_amount_overall' => 'Średnia kwota rachunku (ogólnie)', - 'bill_is_active' => 'Rachunek jest aktywny', - 'bill_expected_between' => 'Oczekiwano między :start a :end', - 'bill_will_automatch' => 'Rachunek będzie automatycznie powiązany z pasującymi transakcjami', - 'skips_over' => 'pomija', - 'bill_store_error' => 'Wystąpił nieoczekiwany błąd podczas zapisywania nowego rachunku. Sprawdź pliki dziennika', - 'list_inactive_rule' => 'nieaktywna reguła', - 'bill_edit_rules' => 'Firefly III spróbuje edytować regułę związaną z tym rachunkiem. Jeśli jednak reguła była edytowana przez Ciebie, Firefly III nic nie zmieni. Firefly III spróbuje edytować reguły :count również związane z tym rachunkiem. Jeśli jednak reguły były edytowane przez Ciebie, Firefly III nic nie zmieni.', - 'bill_expected_date' => 'Oczekiwane :date', - 'bill_expected_date_js' => 'Oczekiwane {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Zapłacone {date}', - 'bill_repeats_weekly' => 'Powtarza się co tydzień', - 'bill_repeats_monthly' => 'Powtarza się co miesiąc', - 'bill_repeats_quarterly' => 'Powtarza się co kwartał', - 'bill_repeats_half-year' => 'Powtarza się co pół roku', - 'bill_repeats_yearly' => 'Powtarza się co rok', - 'bill_repeats_weekly_other' => 'Powtarza się co drugi tydzień', - 'bill_repeats_monthly_other' => 'Powtarza się co drugi miesiąc', - 'bill_repeats_quarterly_other' => 'Powtarza się co drugi kwartał', - 'bill_repeats_half-year_other' => 'Powtarza się co rok', - 'bill_repeats_yearly_other' => 'Powtarza się co drugi rok', - 'bill_repeats_weekly_skip' => 'Powtarza się co {skip} tygodni', - 'bill_repeats_monthly_skip' => 'Powtarza się co {skip} miesięcy', - 'bill_repeats_quarterly_skip' => 'Powtarza się co {skip} kwartałów', - 'bill_repeats_half-year_skip' => 'Powtarza się co {skip} połów roku', - 'bill_repeats_yearly_skip' => 'Powtarza się co {skip} lat', - 'subscriptions' => 'Subskrypcje', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Bez daty zakończenia', - 'extension_date_is' => 'Data przedłużenia to {date}', + 'subscription' => 'Subskrypcja', + 'not_expected_period' => 'Nie oczekiwany w tym okresie', + 'subscriptions_in_group' => 'Subskrypcje w grupie "%{title}"', + 'subscr_expected_x_times' => 'Oczekuje zapłaty %{amount} %{times} razy w tym okresie', + 'not_or_not_yet' => 'Nie (jeszcze)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Rachunek pasuje do transakcji między :low a :high.', + 'running_again_loss' => 'Transakcje poprzednio powiązane z tym rachunkiem mogą stracić to powiązanie, jeżeli nie będą spełniały założeń reguł(y).', + 'bill_related_rules' => 'Reguły powiązane z tym rachunkiem', + 'repeats' => 'Powtarza się', + 'bill_end_date_help' => 'Pole opcjonalne. Oczekuje się, że rachunek zakończy się tego dnia.', + 'bill_extension_date_help' => 'Pole opcjonalne. Rachunek musi być przedłużony (lub anulowany) w dniu lub przed tą datą.', + 'bill_end_index_line' => 'Ten rachunek kończy się :date', + 'bill_extension_index_line' => 'Ten rachunek musi zostać przedłużony lub anulowany :date', + 'connected_journals' => 'Powiązane transakcje', + 'auto_match_on' => 'Automatycznie dopasowane przez Firefly III', + 'auto_match_off' => 'Niedopasowane automatycznie przez Firefly III', + 'next_expected_match' => 'Następne oczekiwane dopasowanie', + 'delete_bill' => 'Usuń rachunek ":name"', + 'deleted_bill' => 'Usunięto rachunek ":name"', + 'edit_bill' => 'Modyfikuj rachunek ":name"', + 'more' => 'Więcej', + 'rescan_old' => 'Uruchom ponownie reguły na wszystkich transakcjach', + 'update_bill' => 'Aktualizuj rachunek', + 'updated_bill' => 'Zaktualizowano rachunek ":name"', + 'store_new_bill' => 'Zapisz nowy rachunek', + 'stored_new_bill' => 'Zapisano nowy rachunek ":name"', + 'cannot_scan_inactive_bill' => 'Nieaktywne rachunki nie mogą być zeskanowane.', + 'rescanned_bill' => 'Przeskanowano wszystko i połączono :count transakcję z rachunkiem.|Przeskanowano wszystko i połączono :count transakcji z rachunkiem.', + 'average_bill_amount_year' => 'Średnia kwota rachunku (:year)', + 'average_bill_amount_overall' => 'Średnia kwota rachunku (ogólnie)', + 'bill_is_active' => 'Rachunek jest aktywny', + 'bill_expected_between' => 'Oczekiwano między :start a :end', + 'bill_will_automatch' => 'Rachunek będzie automatycznie powiązany z pasującymi transakcjami', + 'skips_over' => 'pomija', + 'bill_store_error' => 'Wystąpił nieoczekiwany błąd podczas zapisywania nowego rachunku. Sprawdź pliki dziennika', + 'list_inactive_rule' => 'nieaktywna reguła', + 'bill_edit_rules' => 'Firefly III spróbuje edytować regułę związaną z tym rachunkiem. Jeśli jednak reguła była edytowana przez Ciebie, Firefly III nic nie zmieni. Firefly III spróbuje edytować reguły :count również związane z tym rachunkiem. Jeśli jednak reguły były edytowane przez Ciebie, Firefly III nic nie zmieni.', + 'bill_expected_date' => 'Oczekiwane :date', + 'bill_expected_date_js' => 'Oczekiwane {date}', + 'expected_amount' => '(Oczekiwana) kwota', + 'bill_paid_on' => 'Zapłacone {date}', + 'bill_repeats_weekly' => 'Powtarza się co tydzień', + 'bill_repeats_monthly' => 'Powtarza się co miesiąc', + 'bill_repeats_quarterly' => 'Powtarza się co kwartał', + 'bill_repeats_half-year' => 'Powtarza się co pół roku', + 'bill_repeats_yearly' => 'Powtarza się co rok', + 'bill_repeats_weekly_other' => 'Powtarza się co drugi tydzień', + 'bill_repeats_monthly_other' => 'Powtarza się co drugi miesiąc', + 'bill_repeats_quarterly_other' => 'Powtarza się co drugi kwartał', + 'bill_repeats_half-year_other' => 'Powtarza się co rok', + 'bill_repeats_yearly_other' => 'Powtarza się co drugi rok', + 'bill_repeats_weekly_skip' => 'Powtarza się co {skip} tygodni', + 'bill_repeats_monthly_skip' => 'Powtarza się co {skip} miesięcy', + 'bill_repeats_quarterly_skip' => 'Powtarza się co {skip} kwartałów', + 'bill_repeats_half-year_skip' => 'Powtarza się co {skip} połów roku', + 'bill_repeats_yearly_skip' => 'Powtarza się co {skip} lat', + 'subscriptions' => 'Subskrypcje', + 'go_to_subscriptions' => 'Przejdź do swoich subskrypcji', + 'forever' => 'Bez daty zakończenia', + 'extension_date_is' => 'Data przedłużenia to {date}', // accounts: - 'i_am_owed_amount' => 'Należy mi się kwota', - 'i_owe_amount' => 'Jestem winien kwotę', - 'inactive_account_link' => 'Masz :count nieaktywne (zarchiwizowane) konto, które możesz zobaczyć na tej stronie.|Masz :count nieaktywnych (zarchiwizowanych) kont, które możesz zobaczyć na tej stronie.', - 'all_accounts_inactive' => 'To są twoje nieaktywne konta.', - 'active_account_link' => 'Ten link wraca do Twoich aktywnych kont.', - 'account_missing_transaction' => 'Konto #:id (":name") nie możne być wyświetlone bezpośrednio, ale Firefly Iii nie ma informacji przekierowania.', - 'cc_monthly_payment_date_help' => 'Wybierz dowolny rok i miesiąc, są i tak ignorowane. Ważny jest tylko dzień miesiąca.', - 'details_for_asset' => 'Szczegóły konta aktywów ":name"', - 'details_for_expense' => 'Szczegóły konta wydatków ":name"', - 'details_for_revenue' => 'Szczegóły konta przychodów ":name"', - 'details_for_cash' => 'Szczegóły konta gotówkowego ":name"', - 'store_new_asset_account' => 'Zapisz nowe konto aktywów', - 'store_new_expense_account' => 'Zapisz nowe konto wydatków', - 'store_new_revenue_account' => 'Zapisz nowe konto przychodów', - 'edit_asset_account' => 'Modyfikuj konto aktywów ":name"', - 'edit_expense_account' => 'Modyfikuj konto wydatków ":name"', - 'edit_revenue_account' => 'Modyfikuj konto przychodów ":name"', - 'delete_asset_account' => 'Usuń konto aktywów ":name"', - 'delete_expense_account' => 'Usuń konto wydatków ":name"', - 'delete_revenue_account' => 'Usuń konto przychodów ":name"', - 'delete_liabilities_account' => 'Usuń zobowiązanie ":name"', - 'asset_deleted' => 'Pomyślnie usunięto konto aktywów ":name"', - 'account_deleted' => 'Pomyślnie usunięto konto ":name"', - 'expense_deleted' => 'Pomyślnie usunięto konto wydatków ":name"', - 'revenue_deleted' => 'Pomyślnie usunięto konto przychodów ":name"', - 'update_asset_account' => 'Aktualizuj konto aktywów', - 'update_undefined_account' => 'Zaktualizuj konto', - 'update_liabilities_account' => 'Modyfikuj zobowiązanie', - 'update_expense_account' => 'Aktualizuj konto wydatków', - 'update_revenue_account' => 'Aktualizuj konto przychodów', - 'make_new_asset_account' => 'Utwórz nowe konto aktywów', - 'make_new_expense_account' => 'Utwórz nowe konto wydatków', - 'make_new_revenue_account' => 'Utwórz nowe konto przychodów', - 'make_new_liabilities_account' => 'Utwórz nowe zobowiązanie', - 'asset_accounts' => 'Konta aktywów', - 'undefined_accounts' => 'Konta', - 'asset_accounts_inactive' => 'Konta aktywów (nieaktywne)', - 'expense_account' => 'Konto wydatków', - 'expense_accounts' => 'Konta wydatków', - 'expense_accounts_inactive' => 'Konto wydatków (nieaktywne)', - 'revenue_account' => 'Konto przychodów', - 'revenue_accounts' => 'Konta przychodów', - 'revenue_accounts_inactive' => 'Konta przychodów (nieaktywne)', - 'cash_accounts' => 'Konta gotówkowe', - 'Cash account' => 'Konto gotówkowe', - 'liabilities_accounts' => 'Zobowiązania', - 'liabilities_accounts_inactive' => 'Zobowiązania (nieaktywne)', - 'reconcile_account' => 'Uzgodnij konto ":account"', - 'overview_of_reconcile_modal' => 'Przegląd rozrachunku', - 'delete_reconciliation' => 'Usuń uzgodnienie', - 'update_reconciliation' => 'Zaktualizuj uzgodnienie', - 'amount_cannot_be_zero' => 'Kwota nie może wynosić zero', - 'end_of_reconcile_period' => 'Koniec okresu uzgodnienia: :period', - 'start_of_reconcile_period' => 'Początek okresu uzgodnienia: :period', - 'start_balance' => 'Saldo początkowe', - 'end_balance' => 'Saldo końcowe', - 'update_balance_dates_instruction' => 'Dopasuj powyższe kwoty oraz daty do wyciągu bankowego i naciśnij "Rozpocznij uzgadnianie"', - 'select_transactions_instruction' => 'Wybierz transakcje które pojawiają się na wyciągu bankowym.', - 'select_range_and_balance' => 'Najpierw sprawdź zakres dat i salda. Następnie naciśnij "Rozpocznij uzgadnianie"', - 'date_change_instruction' => 'Jeśli teraz zmienisz zakres dat, jakikolwiek postęp zostanie utracony.', - 'update_selection' => 'Zaktualizuj wybór', - 'store_reconcile' => 'Zapisz uzgodnienia', - 'reconciliation_transaction' => 'Transakcja uzgadniania', - 'Reconciliation' => 'Rozrachunek', - 'reconciliation' => 'Rozrachunek', - 'reconcile_options' => 'Opcje uzgadniania', - 'reconcile_range' => 'Zakres rozrachunku', - 'start_reconcile' => 'Rozpocznij uzgadnianie', - 'cash_account_type' => 'Gotówka', - 'cash' => 'gotówka', - 'cant_find_redirect_account' => 'Firefly III próbował Cię przekierować, ale się nie udało. Przepraszamy za to. Wróć do strony głównej.', - 'account_type' => 'Typ konta', - 'save_transactions_by_moving' => 'Zapisz tą transakcję przenosząc ją na inne konto:|Zapisz te transakcje przenosząc je na inne konto:', - 'save_transactions_by_moving_js' => 'Brak transakcji|Zapisz tę transakcję, przenosząc ją na inne konto.|Zapisz te transakcje przenosząc je na inne konto.', - 'stored_new_account' => 'Nowe konto ":name" zostało zapisane!', - 'stored_new_account_js' => 'Nowe konto "{name}" zapisane!', - 'updated_account' => 'Zaktualizowano konto ":name"', - 'updated_account_js' => 'Zaktualizowano konto "{title}".', - 'credit_card_options' => 'Opcje karty kredytowej', - 'no_transactions_account' => 'Brak transakcji (w tym okresie) na koncie aktywów ":name".', - 'no_transactions_period' => 'Nie ma żadnych transakcji (w tym okresie).', - 'no_data_for_chart' => 'Nie ma wystarczająco dużo informacji (póki co), aby wygenerować ten wykres.', - 'select_at_least_one_account' => 'Wybierz proszę co najmniej jedno konto aktywów', - 'select_at_least_one_category' => 'Wybierz proszę co najmniej jedną kategorię', - 'select_at_least_one_budget' => 'Wybierz proszę co najmniej jeden budżet', - 'select_at_least_one_tag' => 'Wybierz proszę co najmniej jeden tag', - 'select_at_least_one_expense' => 'Wybierz proszę co najmniej jedną kombinację kont wydatków/przychodów. Jeżeli nie masz żadnych (lista jest pusta) ten raport jest niedostępny.', - 'account_default_currency' => 'To będzie domyślna waluta powiązana z tym kontem.', - 'reconcile_has_more' => 'Twoja księga główna Firefly III ma więcej pieniędzy niż bank twierdzi, że powinieneś mieć. Istnieje kilka opcji. Wybierz, co zrobić. Następnie naciśnij "Potwierdź uzgodnienie".', - 'reconcile_has_less' => 'Twoja księga główna Firefly III ma mniej pieniędzy niż bank twierdzi, że powinieneś mieć. Istnieje kilka opcji. Wybierz, co zrobić. Następnie naciśnij "Potwierdź uzgodnienie".', - 'reconcile_is_equal' => 'Twoja księga główna Firefly III i wyciągi bankowe są zgodne. Nie ma nic do zrobienia. Naciśnij "Potwierdź uzgodnienie" aby potwierdzić twój wybór.', - 'create_pos_reconcile_transaction' => 'Oznacz wybrane transakcje jako uzgodnione i utwórz korektę dodając :amount do tego konta aktywów.', - 'create_neg_reconcile_transaction' => 'Oznacz wybrane transakcje jako uzgodnione i utwórz korektę usuwając :amount z tego konta aktywów.', - 'reconcile_do_nothing' => 'Oznacz wybrane transakcje jako uzgodnione, ale nic nie poprawiaj.', - 'reconcile_go_back' => 'Możesz zawsze zmodyfikować lub usunąć korektę później.', - 'must_be_asset_account' => 'Możesz uzgodnić tylko konta aktywów', - 'reconciliation_stored' => 'Uzgodnienie zapisane', - 'reconciliation_error' => 'Z powodu błędu transakcje zostały oznaczone jako uzgodnione, ale korekta nie została zapisana: :error.', - 'reconciliation_transaction_title' => 'Rozrachunek (od :from do :to)', - 'sum_of_reconciliation' => 'Suma rozrachunku', - 'reconcile_this_account' => 'Uzgodnij to konto', - 'reconcile' => 'Uzgodnij', - 'show' => 'Pokaż', - 'confirm_reconciliation' => 'Potwierdź rozrachunek', - 'submitted_start_balance' => 'Przesłane saldo początkowe', - 'selected_transactions' => 'Wybrane transakcje (:count)', - 'already_cleared_transactions' => 'Transakcje uzgodnione wcześniej (:count)', - 'submitted_end_balance' => 'Przesłane saldo końcowe', - 'initial_balance_description' => 'Saldo początkowe dla ":account"', - 'liability_credit_description' => 'Zobowiązania udzielone dla ":account"', - 'interest_calc_' => 'nieznany', - 'interest_calc_daily' => 'Co dzień', - 'interest_calc_monthly' => 'Co miesiąc', - 'interest_calc_yearly' => 'Co rok', - 'interest_calc_weekly' => 'Tygodniowo', - 'interest_calc_half-year' => 'Co pół roku', - 'interest_calc_quarterly' => 'Kwartalnie', - 'initial_balance_account' => 'Początkowe saldo konta :account', - 'list_options' => 'Opcje listy', + 'i_am_owed_amount' => 'Należy mi się kwota', + 'i_owe_amount' => 'Jestem winien kwotę', + 'inactive_account_link' => 'Masz :count nieaktywne (zarchiwizowane) konto, które możesz zobaczyć na tej stronie.|Masz :count nieaktywnych (zarchiwizowanych) kont, które możesz zobaczyć na tej stronie.', + 'all_accounts_inactive' => 'To są twoje nieaktywne konta.', + 'active_account_link' => 'Ten link wraca do Twoich aktywnych kont.', + 'account_missing_transaction' => 'Konto #:id (":name") nie możne być wyświetlone bezpośrednio, ale Firefly Iii nie ma informacji przekierowania.', + 'cc_monthly_payment_date_help' => 'Wybierz dowolny rok i miesiąc, są i tak ignorowane. Ważny jest tylko dzień miesiąca.', + 'details_for_asset' => 'Szczegóły konta aktywów ":name"', + 'details_for_expense' => 'Szczegóły konta wydatków ":name"', + 'details_for_revenue' => 'Szczegóły konta przychodów ":name"', + 'details_for_cash' => 'Szczegóły konta gotówkowego ":name"', + 'store_new_asset_account' => 'Zapisz nowe konto aktywów', + 'store_new_expense_account' => 'Zapisz nowe konto wydatków', + 'store_new_revenue_account' => 'Zapisz nowe konto przychodów', + 'edit_asset_account' => 'Modyfikuj konto aktywów ":name"', + 'edit_expense_account' => 'Modyfikuj konto wydatków ":name"', + 'edit_revenue_account' => 'Modyfikuj konto przychodów ":name"', + 'delete_asset_account' => 'Usuń konto aktywów ":name"', + 'delete_expense_account' => 'Usuń konto wydatków ":name"', + 'delete_revenue_account' => 'Usuń konto przychodów ":name"', + 'delete_liabilities_account' => 'Usuń zobowiązanie ":name"', + 'asset_deleted' => 'Pomyślnie usunięto konto aktywów ":name"', + 'account_deleted' => 'Pomyślnie usunięto konto ":name"', + 'expense_deleted' => 'Pomyślnie usunięto konto wydatków ":name"', + 'revenue_deleted' => 'Pomyślnie usunięto konto przychodów ":name"', + 'update_asset_account' => 'Aktualizuj konto aktywów', + 'update_undefined_account' => 'Zaktualizuj konto', + 'update_liabilities_account' => 'Modyfikuj zobowiązanie', + 'update_expense_account' => 'Aktualizuj konto wydatków', + 'update_revenue_account' => 'Aktualizuj konto przychodów', + 'make_new_asset_account' => 'Utwórz nowe konto aktywów', + 'make_new_expense_account' => 'Utwórz nowe konto wydatków', + 'make_new_revenue_account' => 'Utwórz nowe konto przychodów', + 'make_new_liabilities_account' => 'Utwórz nowe zobowiązanie', + 'asset_accounts' => 'Konta aktywów', + 'undefined_accounts' => 'Konta', + 'asset_accounts_inactive' => 'Konta aktywów (nieaktywne)', + 'expense_account' => 'Konto wydatków', + 'expense_accounts' => 'Konta wydatków', + 'expense_accounts_inactive' => 'Konto wydatków (nieaktywne)', + 'revenue_account' => 'Konto przychodów', + 'revenue_accounts' => 'Konta przychodów', + 'revenue_accounts_inactive' => 'Konta przychodów (nieaktywne)', + 'cash_accounts' => 'Konta gotówkowe', + 'Cash account' => 'Konto gotówkowe', + 'liabilities_accounts' => 'Zobowiązania', + 'liabilities_accounts_inactive' => 'Zobowiązania (nieaktywne)', + 'reconcile_account' => 'Uzgodnij konto ":account"', + 'overview_of_reconcile_modal' => 'Przegląd rozrachunku', + 'delete_reconciliation' => 'Usuń uzgodnienie', + 'update_reconciliation' => 'Zaktualizuj uzgodnienie', + 'amount_cannot_be_zero' => 'Kwota nie może wynosić zero', + 'end_of_reconcile_period' => 'Koniec okresu uzgodnienia: :period', + 'start_of_reconcile_period' => 'Początek okresu uzgodnienia: :period', + 'start_balance' => 'Saldo początkowe', + 'end_balance' => 'Saldo końcowe', + 'update_balance_dates_instruction' => 'Dopasuj powyższe kwoty oraz daty do wyciągu bankowego i naciśnij "Rozpocznij uzgadnianie"', + 'select_transactions_instruction' => 'Wybierz transakcje które pojawiają się na wyciągu bankowym.', + 'select_range_and_balance' => 'Najpierw sprawdź zakres dat i salda. Następnie naciśnij "Rozpocznij uzgadnianie"', + 'date_change_instruction' => 'Jeśli teraz zmienisz zakres dat, jakikolwiek postęp zostanie utracony.', + 'update_selection' => 'Zaktualizuj wybór', + 'store_reconcile' => 'Zapisz uzgodnienia', + 'reconciliation_transaction' => 'Transakcja uzgadniania', + 'Reconciliation' => 'Rozrachunek', + 'reconciliation' => 'Rozrachunek', + 'reconcile_options' => 'Opcje uzgadniania', + 'reconcile_range' => 'Zakres rozrachunku', + 'start_reconcile' => 'Rozpocznij uzgadnianie', + 'cash_account_type' => 'Gotówka', + 'cash' => 'gotówka', + 'cant_find_redirect_account' => 'Firefly III próbował Cię przekierować, ale się nie udało. Przepraszamy za to. Wróć do strony głównej.', + 'account_type' => 'Typ konta', + 'save_transactions_by_moving' => 'Zapisz tą transakcję przenosząc ją na inne konto:|Zapisz te transakcje przenosząc je na inne konto:', + 'save_transactions_by_moving_js' => 'Brak transakcji|Zapisz tę transakcję, przenosząc ją na inne konto.|Zapisz te transakcje przenosząc je na inne konto.', + 'stored_new_account' => 'Nowe konto ":name" zostało zapisane!', + 'stored_new_account_js' => 'Nowe konto "{name}" zapisane!', + 'updated_account' => 'Zaktualizowano konto ":name"', + 'updated_account_js' => 'Zaktualizowano konto "{title}".', + 'credit_card_options' => 'Opcje karty kredytowej', + 'no_transactions_account' => 'Brak transakcji (w tym okresie) na koncie aktywów ":name".', + 'no_transactions_period' => 'Nie ma żadnych transakcji (w tym okresie).', + 'no_data_for_chart' => 'Nie ma wystarczająco dużo informacji (póki co), aby wygenerować ten wykres.', + 'select_at_least_one_account' => 'Wybierz proszę co najmniej jedno konto aktywów', + 'select_at_least_one_category' => 'Wybierz proszę co najmniej jedną kategorię', + 'select_at_least_one_budget' => 'Wybierz proszę co najmniej jeden budżet', + 'select_at_least_one_tag' => 'Wybierz proszę co najmniej jeden tag', + 'select_at_least_one_expense' => 'Wybierz proszę co najmniej jedną kombinację kont wydatków/przychodów. Jeżeli nie masz żadnych (lista jest pusta) ten raport jest niedostępny.', + 'account_default_currency' => 'To będzie domyślna waluta powiązana z tym kontem.', + 'reconcile_has_more' => 'Twoja księga główna Firefly III ma więcej pieniędzy niż bank twierdzi, że powinieneś mieć. Istnieje kilka opcji. Wybierz, co zrobić. Następnie naciśnij "Potwierdź uzgodnienie".', + 'reconcile_has_less' => 'Twoja księga główna Firefly III ma mniej pieniędzy niż bank twierdzi, że powinieneś mieć. Istnieje kilka opcji. Wybierz, co zrobić. Następnie naciśnij "Potwierdź uzgodnienie".', + 'reconcile_is_equal' => 'Twoja księga główna Firefly III i wyciągi bankowe są zgodne. Nie ma nic do zrobienia. Naciśnij "Potwierdź uzgodnienie" aby potwierdzić twój wybór.', + 'create_pos_reconcile_transaction' => 'Oznacz wybrane transakcje jako uzgodnione i utwórz korektę dodając :amount do tego konta aktywów.', + 'create_neg_reconcile_transaction' => 'Oznacz wybrane transakcje jako uzgodnione i utwórz korektę usuwając :amount z tego konta aktywów.', + 'reconcile_do_nothing' => 'Oznacz wybrane transakcje jako uzgodnione, ale nic nie poprawiaj.', + 'reconcile_go_back' => 'Możesz zawsze zmodyfikować lub usunąć korektę później.', + 'must_be_asset_account' => 'Możesz uzgodnić tylko konta aktywów', + 'reconciliation_stored' => 'Uzgodnienie zapisane', + 'reconciliation_error' => 'Z powodu błędu transakcje zostały oznaczone jako uzgodnione, ale korekta nie została zapisana: :error.', + 'reconciliation_transaction_title' => 'Rozrachunek (od :from do :to)', + 'sum_of_reconciliation' => 'Suma rozrachunku', + 'reconcile_this_account' => 'Uzgodnij to konto', + 'reconcile' => 'Uzgodnij', + 'show' => 'Pokaż', + 'confirm_reconciliation' => 'Potwierdź rozrachunek', + 'submitted_start_balance' => 'Przesłane saldo początkowe', + 'selected_transactions' => 'Wybrane transakcje (:count)', + 'already_cleared_transactions' => 'Transakcje uzgodnione wcześniej (:count)', + 'submitted_end_balance' => 'Przesłane saldo końcowe', + 'initial_balance_description' => 'Saldo początkowe dla ":account"', + 'liability_credit_description' => 'Zobowiązania udzielone dla ":account"', + 'interest_calc_' => 'nieznany', + 'interest_calc_daily' => 'Co dzień', + 'interest_calc_monthly' => 'Co miesiąc', + 'interest_calc_yearly' => 'Co rok', + 'interest_calc_weekly' => 'Tygodniowo', + 'interest_calc_half-year' => 'Co pół roku', + 'interest_calc_quarterly' => 'Kwartalnie', + 'initial_balance_account' => 'Początkowe saldo konta :account', + 'list_options' => 'Opcje listy', // categories: - 'new_category' => 'Nowa kategoria', - 'create_new_category' => 'Utwórz nową kategorię', - 'without_category' => 'Bez kategorii', - 'update_category' => 'Aktualizuj kategorię', - 'updated_category' => 'Zmodyfikowano kategorię ":name"', - 'categories' => 'Kategorie', - 'edit_category' => 'Edytuj kategorię ":name"', - 'no_category' => '(bez kategorii)', - 'unknown_category_plain' => 'Brak kategorii', - 'category' => 'Kategoria', - 'delete_category' => 'Usuń kategorię ":name"', - 'deleted_category' => 'Usunięto kategorię ":name"', - 'store_category' => 'Zapisz nową kategorię', - 'stored_category' => 'Zapisano nową kategorię ":name"', - 'without_category_between' => 'Bez kategorii między :start i :end', + 'new_category' => 'Nowa kategoria', + 'create_new_category' => 'Utwórz nową kategorię', + 'without_category' => 'Bez kategorii', + 'update_category' => 'Aktualizuj kategorię', + 'updated_category' => 'Zmodyfikowano kategorię ":name"', + 'categories' => 'Kategorie', + 'edit_category' => 'Edytuj kategorię ":name"', + 'no_category' => '(bez kategorii)', + 'unknown_category_plain' => 'Brak kategorii', + 'category' => 'Kategoria', + 'delete_category' => 'Usuń kategorię ":name"', + 'deleted_category' => 'Usunięto kategorię ":name"', + 'store_category' => 'Zapisz nową kategorię', + 'stored_category' => 'Zapisano nową kategorię ":name"', + 'without_category_between' => 'Bez kategorii między :start i :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Modyfikuj wypłatę', - 'update_deposit' => 'Modyfikuj wpłatę', - 'update_transaction' => 'Zaktualizuj transakcję', - 'update_transfer' => 'Modyfikuj transfer', - 'updated_withdrawal' => 'Zaktualizowano wypłatę ":description"', - 'updated_deposit' => 'Zaktualizowano wpłatę ":description"', - 'updated_transfer' => 'Zaktualizowano transfer ":description"', - 'no_changes_withdrawal' => 'Wydatek ":description" nie został zmieniony.', - 'no_changes_deposit' => 'Wpłata ":description" nie została zmieniona.', - 'no_changes_transfer' => 'Przelew ":description" nie został zmieniony.', - 'delete_withdrawal' => 'Usunięto wypłatę ":description"', - 'delete_deposit' => 'Usuń wpłatę ":description"', - 'delete_transfer' => 'Usuń transfer ":description"', - 'deleted_withdrawal' => 'Pomyślnie usunięto wypłatę ":description"', - 'deleted_deposit' => 'Pomyślnie usunięto depozyt ":description"', - 'deleted_transfer' => 'Pomyślnie usunięto transfer ":description"', - 'deleted_reconciliation' => 'Pomyślnie usunięto transakcję uzgadniania ":description"', - 'stored_journal' => 'Pomyślnie utworzono nową transakcję ":description"', - 'stored_journal_no_descr' => 'Pomyślnie utworzono nową transakcję', - 'updated_journal_no_descr' => 'Pomyślnie zaktualizowano Twoją transakcję', - 'select_transactions' => 'Wybierz transakcje', - 'rule_group_select_transactions' => 'Zastosuj ":title" do transakcji', - 'rule_select_transactions' => 'Zastosuj ":title" do transakcji', - 'stop_selection' => 'Przestań wybierać transakcje', - 'reconcile_selected' => 'Uzgodnij', - 'mass_delete_journals' => 'Usuń wiele transakcji', - 'mass_edit_journals' => 'Modyfikuj wiele transakcji', - 'mass_bulk_journals' => 'Hurtowa edycja wielu transakcji', - 'mass_bulk_journals_explain' => 'Ten formularz pozwala na zmianę właściwości transakcji wymienionych poniżej w jednej ogólnej aktualizacji. Wszystkie transakcje w tabeli zostaną zaktualizowane, gdy zmienisz parametry widoczne tutaj.', - 'part_of_split' => 'Ta transakcja jest częścią podzielonej transakcji. Jeżeli nie zaznaczono wszystkich części, transakcja może zostać zmieniona tylko w połowie.', - 'bulk_set_new_values' => 'Użyj pól poniżej, aby ustawić nowe wartości. Jeżeli zostawisz je puste, zostaną wyczyszczone dla wszystkich transakcji. Pamiętaj także, że budżet zostanie ustawiony tylko dla wypłat.', - 'no_bulk_category' => 'Nie aktualizuj kategorii', - 'no_bulk_budget' => 'Nie aktualizuj budżetu', - 'no_bulk_tags' => 'Nie aktualizuj tagów', - 'replace_with_these_tags' => 'Zastąp tagami', - 'append_these_tags' => 'Dodaj te tagi', - 'mass_edit' => 'Edytuj wybrane pojedynczo', - 'bulk_edit' => 'Edytuj wybrane zbiorczo', - 'mass_delete' => 'Usuń zaznaczone', - 'cannot_edit_other_fields' => 'Nie możesz masowo modyfikować innych pól niż te tutaj, ponieważ nie ma miejsca, aby je pokazać. Proszę użyć ikony edycji i edytować je jedno po drugim, jeśli chcesz edytować te pola.', - 'cannot_change_amount_reconciled' => 'Nie możesz zmienić wartości uzgodnionych transakcji.', - 'no_budget' => '(brak budżetu)', - 'no_bill' => '(brak rachunku)', - 'account_per_budget' => 'Konto wg. budżetu', - 'account_per_category' => 'Konto wg. kategorii', - 'create_new_object' => 'Utwórz', - 'empty' => '(pusty)', - 'all_other_budgets' => '(wszystkie inne budżety)', - 'all_other_accounts' => '(wszystkie inne konta)', - 'expense_per_source_account' => 'Wydatki według konta źródłowego', - 'expense_per_destination_account' => 'Wydatki według konta docelowego', - 'income_per_destination_account' => 'Przychody według konta docelowego', - 'spent_in_specific_category' => 'Wydatki w kategorii ":category"', - 'earned_in_specific_category' => 'Przychody w kategorii ":category"', - 'spent_in_specific_tag' => 'Wydatki w tagu ":tag"', - 'earned_in_specific_tag' => 'Przychody w tagu ":tag"', - 'income_per_source_account' => 'Przychody według konta źródłowego', - 'average_spending_per_destination' => 'Średnie wydatki według konta docelowego', - 'average_spending_per_source' => 'Średnie wydatki według konta źródłowego', - 'average_earning_per_source' => 'Średnie przychody według konta źródłowego', - 'average_earning_per_destination' => 'Średnie przychody według konta docelowego', - 'account_per_tag' => 'Konto wg. tagu', - 'tag_report_expenses_listed_once' => 'Wydatki i dochody nigdy nie są wyświetlane dwukrotnie. Jeśli transakcja ma wiele tagów, może się pojawić pod jednym z jej tagów. Może się wydawać, że na tej liście brakuje danych, ale kwoty powinny poprawne.', - 'double_report_expenses_charted_once' => 'Wydatki i dochody nigdy nie są wyświetlane dwukrotnie. Jeśli transakcja ma wiele tagów, może się pojawić pod jednym z jej tagów. Może się wydawać, że na tym wykresie brakuje danych, ale kwoty powinny poprawne.', - 'tag_report_chart_single_tag' => 'Ten wykres dotyczy pojedynczego taga. Jeśli transakcja ma wiele tagów, to co tu widzisz może być pokazane na wykresach innych tagów.', - 'tag' => 'Tag', - 'no_budget_squared' => '(brak budżetu)', - 'perm-delete-many' => 'Usunięcie wielu elementów w jednym podejściu może być bardzo poważne. Zachowaj ostrożność. Możesz usunąć część podzielonej transakcji z tej strony, więc zachowaj ostrożność.', - 'mass_deleted_transactions_success' => 'Usunięto :count transakcję.|Usunięto :count transakcji.', - 'mass_edited_transactions_success' => 'Zaktualizowano :count transakcję.|Zaktualizowano :count transakcji.', - 'opt_group_' => '(brak typu konta)', - 'opt_group_no_account_type' => '(brak typu konta)', - 'opt_group_defaultAsset' => 'Domyślne konta aktywów', - 'opt_group_savingAsset' => 'Konta oszczędnościowe', - 'opt_group_sharedAsset' => 'Współdzielone konta aktywów', - 'opt_group_ccAsset' => 'Karty kredytowe', - 'opt_group_cashWalletAsset' => 'Portfele gotówkowe', - 'opt_group_expense_account' => 'Konta wydatków', - 'opt_group_revenue_account' => 'Konta przychodów', - 'opt_group_l_Loan' => 'Zobowiązanie: Pożyczka', - 'opt_group_cash_account' => 'Konto gotówkowe', - 'opt_group_l_Debt' => 'Zobowiązanie: Dług', - 'opt_group_l_Mortgage' => 'Zobowiązanie: Hipoteka', - 'opt_group_l_Credit card' => 'Zobowiązanie: Karta kredytowa', - 'notes' => 'Notatki', - 'unknown_journal_error' => 'Nie można zapisać transakcji. Sprawdź pliki dziennika.', - 'attachment_not_found' => 'Nie udało się znaleźć tego załącznika.', - 'journal_link_bill' => 'Ta transakcja jest powiązana z rachunkiem :name. Aby usunąć to powiązanie odznacz pole wyboru. Użyj reguł aby połączyć ją z innym rachunkiem.', - 'transaction_stored_link' => 'Transakcja #{ID} ("{title}") została zapisana.', - 'transaction_new_stored_link' => 'Transakcja #{ID} została zapisana.', - 'transaction_updated_link' => 'Transakcja #{ID} ("{title}") została zaktualizowana.', - 'transaction_updated_no_changes' => 'Transakcja #{ID} ("{title}") nie została zmieniona.', - 'first_split_decides' => 'Pierwszy podział określa wartość tego pola', - 'first_split_overrules_source' => 'Pierwszy podział może nadpisać konto źródłowe', - 'first_split_overrules_destination' => 'Pierwszy podział może nadpisać konto docelowe', - 'spent_x_of_y' => 'Wydano {amount} z {total}', + 'wait_loading_transaction' => 'Poczekaj na załadowanie formularza', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Cofnij uzgodnienie', + 'update_withdrawal' => 'Modyfikuj wypłatę', + 'update_deposit' => 'Modyfikuj wpłatę', + 'update_transaction' => 'Zaktualizuj transakcję', + 'update_transfer' => 'Modyfikuj transfer', + 'updated_withdrawal' => 'Zaktualizowano wypłatę ":description"', + 'updated_deposit' => 'Zaktualizowano wpłatę ":description"', + 'updated_transfer' => 'Zaktualizowano transfer ":description"', + 'no_changes_withdrawal' => 'Wydatek ":description" nie został zmieniony.', + 'no_changes_deposit' => 'Wpłata ":description" nie została zmieniona.', + 'no_changes_transfer' => 'Przelew ":description" nie został zmieniony.', + 'delete_withdrawal' => 'Usunięto wypłatę ":description"', + 'delete_deposit' => 'Usuń wpłatę ":description"', + 'delete_transfer' => 'Usuń transfer ":description"', + 'deleted_withdrawal' => 'Pomyślnie usunięto wypłatę ":description"', + 'deleted_deposit' => 'Pomyślnie usunięto depozyt ":description"', + 'deleted_transfer' => 'Pomyślnie usunięto transfer ":description"', + 'deleted_reconciliation' => 'Pomyślnie usunięto transakcję uzgadniania ":description"', + 'stored_journal' => 'Pomyślnie utworzono nową transakcję ":description"', + 'stored_journal_js' => 'Pomyślnie utworzono nową transakcję "%{description}"', + 'stored_journal_no_descr' => 'Pomyślnie utworzono nową transakcję', + 'updated_journal_no_descr' => 'Pomyślnie zaktualizowano Twoją transakcję', + 'select_transactions' => 'Wybierz transakcje', + 'rule_group_select_transactions' => 'Zastosuj ":title" do transakcji', + 'rule_select_transactions' => 'Zastosuj ":title" do transakcji', + 'stop_selection' => 'Przestań wybierać transakcje', + 'reconcile_selected' => 'Uzgodnij', + 'mass_delete_journals' => 'Usuń wiele transakcji', + 'mass_edit_journals' => 'Modyfikuj wiele transakcji', + 'mass_bulk_journals' => 'Hurtowa edycja wielu transakcji', + 'mass_bulk_journals_explain' => 'Ten formularz pozwala na zmianę właściwości transakcji wymienionych poniżej w jednej ogólnej aktualizacji. Wszystkie transakcje w tabeli zostaną zaktualizowane, gdy zmienisz parametry widoczne tutaj.', + 'part_of_split' => 'Ta transakcja jest częścią podzielonej transakcji. Jeżeli nie zaznaczono wszystkich części, transakcja może zostać zmieniona tylko w połowie.', + 'bulk_set_new_values' => 'Użyj pól poniżej, aby ustawić nowe wartości. Jeżeli zostawisz je puste, zostaną wyczyszczone dla wszystkich transakcji. Pamiętaj także, że budżet zostanie ustawiony tylko dla wypłat.', + 'no_bulk_category' => 'Nie aktualizuj kategorii', + 'no_bulk_budget' => 'Nie aktualizuj budżetu', + 'no_bulk_tags' => 'Nie aktualizuj tagów', + 'replace_with_these_tags' => 'Zastąp tagami', + 'append_these_tags' => 'Dodaj te tagi', + 'mass_edit' => 'Edytuj wybrane pojedynczo', + 'bulk_edit' => 'Edytuj wybrane zbiorczo', + 'mass_delete' => 'Usuń zaznaczone', + 'cannot_edit_other_fields' => 'Nie możesz masowo modyfikować innych pól niż te tutaj, ponieważ nie ma miejsca, aby je pokazać. Proszę użyć ikony edycji i edytować je jedno po drugim, jeśli chcesz edytować te pola.', + 'cannot_change_amount_reconciled' => 'Nie możesz zmienić wartości uzgodnionych transakcji.', + 'no_budget' => '(brak budżetu)', + 'no_bill' => '(brak rachunku)', + 'account_per_budget' => 'Konto wg. budżetu', + 'account_per_category' => 'Konto wg. kategorii', + 'create_new_object' => 'Utwórz', + 'empty' => '(pusty)', + 'all_other_budgets' => '(wszystkie inne budżety)', + 'all_other_accounts' => '(wszystkie inne konta)', + 'expense_per_source_account' => 'Wydatki według konta źródłowego', + 'expense_per_destination_account' => 'Wydatki według konta docelowego', + 'income_per_destination_account' => 'Przychody według konta docelowego', + 'spent_in_specific_category' => 'Wydatki w kategorii ":category"', + 'earned_in_specific_category' => 'Przychody w kategorii ":category"', + 'spent_in_specific_tag' => 'Wydatki w tagu ":tag"', + 'earned_in_specific_tag' => 'Przychody w tagu ":tag"', + 'income_per_source_account' => 'Przychody według konta źródłowego', + 'average_spending_per_destination' => 'Średnie wydatki według konta docelowego', + 'average_spending_per_source' => 'Średnie wydatki według konta źródłowego', + 'average_earning_per_source' => 'Średnie przychody według konta źródłowego', + 'average_earning_per_destination' => 'Średnie przychody według konta docelowego', + 'account_per_tag' => 'Konto wg. tagu', + 'tag_report_expenses_listed_once' => 'Wydatki i dochody nigdy nie są wyświetlane dwukrotnie. Jeśli transakcja ma wiele tagów, może się pojawić pod jednym z jej tagów. Może się wydawać, że na tej liście brakuje danych, ale kwoty powinny poprawne.', + 'double_report_expenses_charted_once' => 'Wydatki i dochody nigdy nie są wyświetlane dwukrotnie. Jeśli transakcja ma wiele tagów, może się pojawić pod jednym z jej tagów. Może się wydawać, że na tym wykresie brakuje danych, ale kwoty powinny poprawne.', + 'tag_report_chart_single_tag' => 'Ten wykres dotyczy pojedynczego taga. Jeśli transakcja ma wiele tagów, to co tu widzisz może być pokazane na wykresach innych tagów.', + 'tag' => 'Tag', + 'no_budget_squared' => '(brak budżetu)', + 'perm-delete-many' => 'Usunięcie wielu elementów w jednym podejściu może być bardzo poważne. Zachowaj ostrożność. Możesz usunąć część podzielonej transakcji z tej strony, więc zachowaj ostrożność.', + 'mass_deleted_transactions_success' => 'Usunięto :count transakcję.|Usunięto :count transakcji.', + 'mass_edited_transactions_success' => 'Zaktualizowano :count transakcję.|Zaktualizowano :count transakcji.', + 'opt_group_' => '(brak typu konta)', + 'opt_group_no_account_type' => '(brak typu konta)', + 'opt_group_defaultAsset' => 'Domyślne konta aktywów', + 'opt_group_savingAsset' => 'Konta oszczędnościowe', + 'opt_group_sharedAsset' => 'Współdzielone konta aktywów', + 'opt_group_ccAsset' => 'Karty kredytowe', + 'opt_group_cashWalletAsset' => 'Portfele gotówkowe', + 'opt_group_expense_account' => 'Konta wydatków', + 'opt_group_revenue_account' => 'Konta przychodów', + 'opt_group_l_Loan' => 'Zobowiązanie: Pożyczka', + 'opt_group_cash_account' => 'Konto gotówkowe', + 'opt_group_l_Debt' => 'Zobowiązanie: Dług', + 'opt_group_l_Mortgage' => 'Zobowiązanie: Hipoteka', + 'opt_group_l_Credit card' => 'Zobowiązanie: Karta kredytowa', + 'notes' => 'Notatki', + 'unknown_journal_error' => 'Nie można zapisać transakcji. Sprawdź pliki dziennika.', + 'attachment_not_found' => 'Nie udało się znaleźć tego załącznika.', + 'journal_link_bill' => 'Ta transakcja jest powiązana z rachunkiem :name. Aby usunąć to powiązanie odznacz pole wyboru. Użyj reguł aby połączyć ją z innym rachunkiem.', + 'transaction_stored_link' => 'Transakcja #{ID} ("{title}") została zapisana.', + 'transaction_new_stored_link' => 'Transakcja #{ID} została zapisana.', + 'transaction_updated_link' => 'Transakcja #{ID} ("{title}") została zaktualizowana.', + 'transaction_updated_no_changes' => 'Transakcja #{ID} ("{title}") nie została zmieniona.', + 'first_split_decides' => 'Pierwszy podział określa wartość tego pola', + 'first_split_overrules_source' => 'Pierwszy podział może nadpisać konto źródłowe', + 'first_split_overrules_destination' => 'Pierwszy podział może nadpisać konto docelowe', + 'spent_x_of_y' => 'Wydano {amount} z {total}', // new user: - 'welcome' => 'Witaj w Firefly III!', - 'submit' => 'Prześlij', - 'submission' => 'Zapisz', - 'submit_yes_really' => 'Zatwierdź (wiem co robię)', - 'getting_started' => 'Pierwsze kroki', - 'to_get_started' => 'Dobrze, że udało ci się zainstalować Firefly III. Aby rozpocząć korzystanie z tego narzędzia, wprowadź nazwę swojego banku i saldo głównego rachunku bieżącego. Nie martw się, jeśli masz wiele kont. Możesz dodać je później. Po prostu Firefly III potrzebuje czegoś na początek.', - 'savings_balance_text' => 'Firefly III automatycznie utworzy dla ciebie konto oszczędnościowe. Domyślnie na twoim koncie oszczędnościowym nie ma pieniędzy, ale jeśli chcesz, Firefly III może je tam przechowywać.', - 'finish_up_new_user' => 'To wszystko! Możesz kontynuować, naciskając Zatwierdź. Zostaniesz przeniesiony do strony głównej Firefly III.', - 'stored_new_accounts_new_user' => 'Yay! Twoje nowe konta zostały zapisane.', - 'set_preferred_language' => 'Jeśli wolisz używać Firefly III w innym języku, wskaż to tutaj.', - 'language' => 'Język', - 'new_savings_account' => 'Konto oszczędnościowe :bank_name', - 'cash_wallet' => 'Portfel gotówkowy', - 'currency_not_present' => 'Jeśli waluty, której zwykle używasz, nie ma na liście, nie martw się. Możesz tworzyć swoje własne waluty w Opcje > Waluty.', + 'welcome' => 'Witaj w Firefly III!', + 'submit' => 'Prześlij', + 'submission' => 'Zapisz', + 'submit_yes_really' => 'Zatwierdź (wiem co robię)', + 'getting_started' => 'Pierwsze kroki', + 'to_get_started' => 'Dobrze, że udało ci się zainstalować Firefly III. Aby rozpocząć korzystanie z tego narzędzia, wprowadź nazwę swojego banku i saldo głównego rachunku bieżącego. Nie martw się, jeśli masz wiele kont. Możesz dodać je później. Po prostu Firefly III potrzebuje czegoś na początek.', + 'savings_balance_text' => 'Firefly III automatycznie utworzy dla ciebie konto oszczędnościowe. Domyślnie na twoim koncie oszczędnościowym nie ma pieniędzy, ale jeśli chcesz, Firefly III może je tam przechowywać.', + 'finish_up_new_user' => 'To wszystko! Możesz kontynuować, naciskając Zatwierdź. Zostaniesz przeniesiony do strony głównej Firefly III.', + 'stored_new_accounts_new_user' => 'Yay! Twoje nowe konta zostały zapisane.', + 'set_preferred_language' => 'Jeśli wolisz używać Firefly III w innym języku, wskaż to tutaj.', + 'language' => 'Język', + 'new_savings_account' => 'Konto oszczędnościowe :bank_name', + 'cash_wallet' => 'Portfel gotówkowy', + 'currency_not_present' => 'Jeśli waluty, której zwykle używasz, nie ma na liście, nie martw się. Możesz tworzyć swoje własne waluty w Opcje > Waluty.', // home page: - 'transaction_table_description' => 'Tabela zawierająca Twoje transakcje', - 'opposing_account' => 'Konto przeciwstawne', - 'yourAccounts' => 'Twoje konta', - 'your_accounts' => 'Przegląd Twoich kont', - 'category_overview' => 'Przegląd kategorii', - 'expense_overview' => 'Przegląd kont wydatków', - 'revenue_overview' => 'Przegląd kont przychodów', - 'budgetsAndSpending' => 'Budżety i wydatki', - 'budgets_and_spending' => 'Budżety i wydatki', - 'go_to_budget' => 'Idź do budżetu "{budget}"', - 'go_to_deposits' => 'Przejdź do wpłat', - 'go_to_expenses' => 'Przejdź do wydatków', - 'savings' => 'Oszczędności', - 'newWithdrawal' => 'Nowy wydatek', - 'newDeposit' => 'Nowa wpłata', - 'newTransfer' => 'Nowy transfer', - 'bills_to_pay' => 'Rachunki do zapłacenia', - 'per_day' => 'Dziennie', - 'left_to_spend_per_day' => 'Kwota możliwa do wydania codziennie', - 'bills_paid' => 'Zapłacone rachunki', - 'custom_period' => 'Okres niestandardowy', - 'reset_to_current' => 'Przywróć do bieżącego okresu', - 'select_period' => 'Wybierz okres', + 'transaction_table_description' => 'Tabela zawierająca Twoje transakcje', + 'opposing_account' => 'Konto przeciwstawne', + 'yourAccounts' => 'Twoje konta', + 'your_accounts' => 'Przegląd Twoich kont', + 'category_overview' => 'Przegląd kategorii', + 'expense_overview' => 'Przegląd kont wydatków', + 'revenue_overview' => 'Przegląd kont przychodów', + 'budgetsAndSpending' => 'Budżety i wydatki', + 'budgets_and_spending' => 'Budżety i wydatki', + 'go_to_budget' => 'Idź do budżetu "{budget}"', + 'go_to_deposits' => 'Przejdź do wpłat', + 'go_to_expenses' => 'Przejdź do wydatków', + 'savings' => 'Oszczędności', + 'newWithdrawal' => 'Nowy wydatek', + 'newDeposit' => 'Nowa wpłata', + 'newTransfer' => 'Nowy transfer', + 'bills_to_pay' => 'Rachunki do zapłacenia', + 'per_day' => 'Dziennie', + 'left_to_spend_per_day' => 'Kwota możliwa do wydania codziennie', + 'bills_paid' => 'Zapłacone rachunki', + 'custom_period' => 'Okres niestandardowy', + 'reset_to_current' => 'Przywróć do bieżącego okresu', + 'select_period' => 'Wybierz okres', // menu and titles, should be recycled as often as possible: - 'currency' => 'Waluta', - 'preferences' => 'Preferencje', - 'logout' => 'Wyloguj', - 'logout_other_sessions' => 'Wyloguj z pozostałych sesji', - 'toggleNavigation' => 'Przełącz nawigację', - 'searchPlaceholder' => 'Szukaj...', - 'version' => 'Wersja', - 'dashboard' => 'Kokpit', - 'income_and_expense' => 'Przychody i wydatki', - 'all_money' => 'Wszystkie Twoje pieniądze', - 'unknown_source_plain' => 'Nieznane konto źródłowe', - 'unknown_dest_plain' => 'Nieznane konto docelowe', - 'unknown_any_plain' => 'Nieznane konto', - 'unknown_budget_plain' => 'Brak budżetu', - 'available_budget' => 'Dostępne budżety ({currency})', - 'currencies' => 'Waluty', - 'activity' => 'Aktywność', - 'usage' => 'Użycie', - 'accounts' => 'Konta', - 'Asset account' => 'Konto aktywów', - 'Default account' => 'Konto aktywów', - 'Expense account' => 'Konto wydatków', - 'Revenue account' => 'Konto przychodów', - 'Initial balance account' => 'Początkowe saldo konta', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Dług', - 'account_type_Loan' => 'Pożyczka', - 'account_type_Mortgage' => 'Hipoteka', - 'account_type_debt' => 'Dług', - 'account_type_loan' => 'Pożyczka', - 'account_type_mortgage' => 'Hipoteka', - 'account_type_Credit card' => 'Karta kredytowa', - 'credit_card_type_monthlyFull' => 'Pełna płatność co miesiąc', - 'liability_direction_credit' => 'Zadłużenie wobec mnie', - 'liability_direction_debit' => 'Zadłużenie wobec kogoś innego', - 'liability_direction_credit_short' => 'Dług wobec Ciebie', - 'liability_direction_debit_short' => 'Jesteś dłużny', - 'liability_direction__short' => 'Nieznane', - 'liability_direction_null_short' => 'Nieznane', - 'Liability credit' => 'Kredyt na zobowiązania', - 'budgets' => 'Budżety', - 'tags' => 'Tagi', - 'reports' => 'Raporty', - 'transactions' => 'Transakcje', - 'expenses' => 'Wydatki', - 'income' => 'Przychody / dochody', - 'transfers' => 'Transfery', - 'moneyManagement' => 'Zarządzanie pieniędzmi', - 'money_management' => 'Zarządzanie pieniędzmi', - 'tools' => 'Narzędzia', - 'piggyBanks' => 'Skarbonki', - 'piggy_banks' => 'Skarbonki', - 'amount_x_of_y' => '{current} z {total}', - 'bills' => 'Rachunki', - 'withdrawal' => 'Wypłata', - 'opening_balance' => 'Saldo początkowe', - 'deposit' => 'Wpłata', - 'account' => 'Konto', - 'transfer' => 'Transfer', - 'Withdrawal' => 'Wypłata', - 'Deposit' => 'Wpłata', - 'Transfer' => 'Transfer', - 'bill' => 'Rachunek', - 'yes' => 'Tak', - 'no' => 'Nie', - 'amount' => 'Kwota', - 'overview' => 'Przegląd', - 'saveOnAccount' => 'Oszczędzaj na koncie', - 'unknown' => 'Nieznane', - 'monthly' => 'Miesięcznie', - 'profile' => 'Profil', - 'errors' => 'Błędy', - 'debt_start_date' => 'Początkowa data długu', - 'debt_start_amount' => 'Początkowa kwota długu', - 'debt_start_amount_help' => 'Najlepiej ustawić tę wartość na wartość ujemną. Aby uzyskać więcej informacji, przeczytaj strony pomocy (ikona (?) w prawym górnym rogu).', - 'interest_period_help' => 'To pole jest czysto kosmetyczne i nie zostanie obliczone automatycznie. Jak się okazuje, banki są bardzo podstępne, więc Firefly III nigdy nie oblicza tego prawidłowo.', - 'store_new_liabilities_account' => 'Zapisz nowe zobowiązanie', - 'edit_liabilities_account' => 'Modyfikuj zobowiązanie ":name"', - 'financial_control' => 'Kontrola finansowa', - 'accounting' => 'Księgowość', - 'automation' => 'Automatyzacja', - 'others' => 'Pozostałe', - 'classification' => 'Klasyfikacja', - 'store_transaction' => 'Zapisz transakcję', + 'currency' => 'Waluta', + 'preferences' => 'Preferencje', + 'logout' => 'Wyloguj', + 'logout_other_sessions' => 'Wyloguj z pozostałych sesji', + 'toggleNavigation' => 'Przełącz nawigację', + 'searchPlaceholder' => 'Szukaj...', + 'version' => 'Wersja', + 'dashboard' => 'Kokpit', + 'income_and_expense' => 'Przychody i wydatki', + 'all_money' => 'Wszystkie Twoje pieniądze', + 'unknown_source_plain' => 'Nieznane konto źródłowe', + 'unknown_dest_plain' => 'Nieznane konto docelowe', + 'unknown_any_plain' => 'Nieznane konto', + 'unknown_budget_plain' => 'Brak budżetu', + 'available_budget' => 'Dostępne budżety ({currency})', + 'currencies' => 'Waluty', + 'activity' => 'Aktywność', + 'usage' => 'Użycie', + 'accounts' => 'Konta', + 'Asset account' => 'Konto aktywów', + 'Default account' => 'Konto aktywów', + 'Expense account' => 'Konto wydatków', + 'Revenue account' => 'Konto przychodów', + 'Initial balance account' => 'Początkowe saldo konta', + 'account_type_Asset account' => 'Konto aktywów', + 'account_type_Expense account' => 'Konto wydatków', + 'account_type_Revenue account' => 'Konto przychodów', + 'account_type_Debt' => 'Dług', + 'account_type_Loan' => 'Pożyczka', + 'account_type_Mortgage' => 'Hipoteka', + 'account_type_debt' => 'Dług', + 'account_type_loan' => 'Pożyczka', + 'account_type_mortgage' => 'Hipoteka', + 'account_type_Credit card' => 'Karta kredytowa', + 'credit_card_type_monthlyFull' => 'Pełna płatność co miesiąc', + 'liability_direction_credit' => 'Zadłużenie wobec mnie', + 'liability_direction_debit' => 'Zadłużenie wobec kogoś innego', + 'liability_direction_credit_short' => 'Dług wobec Ciebie', + 'liability_direction_debit_short' => 'Jesteś dłużny', + 'liability_direction__short' => 'Nieznane', + 'liability_direction_null_short' => 'Nieznane', + 'Liability credit' => 'Kredyt na zobowiązania', + 'budgets' => 'Budżety', + 'tags' => 'Tagi', + 'reports' => 'Raporty', + 'transactions' => 'Transakcje', + 'expenses' => 'Wydatki', + 'income' => 'Przychody / dochody', + 'transfers' => 'Transfery', + 'moneyManagement' => 'Zarządzanie pieniędzmi', + 'money_management' => 'Zarządzanie pieniędzmi', + 'tools' => 'Narzędzia', + 'piggyBanks' => 'Skarbonki', + 'piggy_banks' => 'Skarbonki', + 'amount_x_of_y' => '{current} z {total}', + 'bills' => 'Rachunki', + 'withdrawal' => 'Wypłata', + 'opening_balance' => 'Saldo początkowe', + 'deposit' => 'Wpłata', + 'account' => 'Konto', + 'transfer' => 'Transfer', + 'Withdrawal' => 'Wypłata', + 'Deposit' => 'Wpłata', + 'Transfer' => 'Transfer', + 'bill' => 'Rachunek', + 'yes' => 'Tak', + 'no' => 'Nie', + 'amount' => 'Kwota', + 'overview' => 'Przegląd', + 'saveOnAccount' => 'Oszczędzaj na koncie', + 'unknown' => 'Nieznane', + 'monthly' => 'Miesięcznie', + 'profile' => 'Profil', + 'errors' => 'Błędy', + 'debt_start_date' => 'Początkowa data długu', + 'debt_start_amount' => 'Początkowa kwota długu', + 'debt_start_amount_help' => 'Najlepiej ustawić tę wartość na wartość ujemną. Aby uzyskać więcej informacji, przeczytaj strony pomocy (ikona (?) w prawym górnym rogu).', + 'interest_period_help' => 'To pole jest czysto kosmetyczne i nie zostanie obliczone automatycznie. Jak się okazuje, banki są bardzo podstępne, więc Firefly III nigdy nie oblicza tego prawidłowo.', + 'store_new_liabilities_account' => 'Zapisz nowe zobowiązanie', + 'edit_liabilities_account' => 'Modyfikuj zobowiązanie ":name"', + 'financial_control' => 'Kontrola finansowa', + 'accounting' => 'Księgowość', + 'automation' => 'Automatyzacja', + 'others' => 'Pozostałe', + 'classification' => 'Klasyfikacja', + 'store_transaction' => 'Zapisz transakcję', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Domyślny raport finansowy między :start i :end', - 'report_audit' => 'Przegląd historii transakcji między :start i :end', - 'report_category' => 'Raport kategorii między :start a :end', - 'report_double' => 'Raport dotyczący wydatków/przychodów między :start a :end', - 'report_budget' => 'Raport budżetów między :start a :end', - 'report_tag' => 'Raport tagów między :start a :end', - 'quick_link_reports' => 'Szybkie linki', - 'quick_link_examples' => 'To tylko przykładowe linki, od których możesz zacząć. Sprawdź strony pomocy pod przyciskiem (?) aby uzyskać informacje o wszystkich raportach i magicznych słowach, których możesz użyć.', - 'quick_link_default_report' => 'Domyślny raport finansowy', - 'quick_link_audit_report' => 'Przegląd historii transakcji', - 'report_this_month_quick' => 'Bieżący miesiąc, wszystkie konta', - 'report_last_month_quick' => 'Ostatni miesiąc, wszystkie konta', - 'report_this_year_quick' => 'Bieżący rok, wszystkie konta', - 'report_this_fiscal_year_quick' => 'Bieżący rok podatkowy, wszystkie konta', - 'report_all_time_quick' => 'Cały czas, wszystkie konta', - 'reports_can_bookmark' => 'Pamiętaj, że raporty można dodać do zakładek.', - 'incomeVsExpenses' => 'Dochody a wydatki', - 'accountBalances' => 'Salda kont', - 'balanceStart' => 'Saldo na początku okresu', - 'balanceEnd' => 'Saldo na końcu okresu', - 'splitByAccount' => 'Podziel według konta', - 'coveredWithTags' => 'Objęte tagami', - 'leftInBudget' => 'Pozostało w budżecie', - 'left_in_debt' => 'Do zapłaty', - 'sumOfSums' => 'Suma sum', - 'noCategory' => '(bez kategorii)', - 'notCharged' => 'Brak opłaty (jeszcze)', - 'inactive' => 'Nieaktywne', - 'active' => 'Aktywne', - 'difference' => 'Różnica', - 'money_flowing_in' => 'Przychodzące', - 'money_flowing_out' => 'Wychodzące', - 'topX' => 'czołówka :number', - 'show_full_list' => 'Pokaż całą listę', - 'show_only_top' => 'Pokazuj tylko czołową :number', - 'report_type' => 'Typ raportu', - 'report_type_default' => 'Domyślny raport finansowy', - 'report_type_audit' => 'Przegląd historii transakcji (audyt)', - 'report_type_category' => 'Raport kategorii', - 'report_type_budget' => 'Raport budżetów', - 'report_type_tag' => 'Raport tagów', - 'report_type_double' => 'Raport dotyczący konta wydatków/przychodów', - 'more_info_help' => 'Więcej informacji na temat typów raportów można znaleźć na stronach pomocy. Naciśnij ikonę (?) w prawym górnym rogu.', - 'report_included_accounts' => 'Uwzględnione konta', - 'report_date_range' => 'Zakres dat', - 'report_preset_ranges' => 'Predefiniowane zakresy', - 'shared' => 'Udostępnione', - 'fiscal_year' => 'Rok podatkowy', - 'income_entry' => 'Dochód z konta ":name" między: :start a :end', - 'expense_entry' => 'Wydatki na konto ":name" między :start a :end', - 'category_entry' => 'Wydatki w kategorii ":name" między :start i :end', - 'budget_spent_amount' => 'Wydatki w budżecie ":budget" między :start i :end', - 'balance_amount' => 'Wydatki w budżecie ":budget" zapłacone z konta ":account" między :start a :end', - 'no_audit_activity' => 'Nie zarejestrowano żadnej aktywności na koncie :account_name między :start a :end.', - 'audit_end_balance' => 'Saldo konta :account_name na koniec :end wynosiło: :balance', - 'reports_extra_options' => 'Dodatkowe opcje', - 'report_has_no_extra_options' => 'Ten raport nie ma dodatkowych opcji', - 'reports_submit' => 'Zobacz raport', - 'end_after_start_date' => 'Data zakończenia raportu musi być po dacie rozpoczęcia.', - 'select_category' => 'Wybierz kategorię(e)', - 'select_budget' => 'Wybierz budżet(y).', - 'select_tag' => 'Wybierz tag(i).', - 'income_per_category' => 'Dochody wg kategorii', - 'expense_per_category' => 'Wydatki wg kategorii', - 'expense_per_budget' => 'Wydatki wg budżetu', - 'income_per_account' => 'Dochody wg konta', - 'expense_per_account' => 'Wydatki wg konta', - 'expense_per_tag' => 'Wydatki wg tagu', - 'income_per_tag' => 'Dochody wg tagu', - 'include_expense_not_in_budget' => 'Uwzględnij wydatki spoza wybranych budżetów', - 'include_expense_not_in_account' => 'Uwzględnij wydatki spoza wybranych kont', - 'include_expense_not_in_category' => 'Uwzględnij wydatki spoza wybranych kategorii', - 'include_income_not_in_category' => 'Uwzględnij przychody spoza wybranych kategorii', - 'include_income_not_in_account' => 'Uwzględnij przychody spoza wybranych kont', - 'include_income_not_in_tags' => 'Uwzględnij przychody spoza wybranych tagów', - 'include_expense_not_in_tags' => 'Uwzględnij wydatki spoza wybranych tagów', - 'everything_else' => 'Wszystko inne', - 'income_and_expenses' => 'Dochody i wydatki', - 'spent_average' => 'Wydano (średnia)', - 'income_average' => 'Dochód (średnia)', - 'transaction_count' => 'Liczba transakcji', - 'average_spending_per_account' => 'Średnie wydatki per konto', - 'average_income_per_account' => 'Średni dochód per konto', - 'total' => 'Łącznie', - 'description' => 'Opis', - 'sum_of_period' => 'Suma dla tego okresu', - 'average_in_period' => 'Średnia dla tego okresu', - 'account_role_defaultAsset' => 'Domyślne konto aktywów', - 'account_role_sharedAsset' => 'Współdzielone konto aktywów', - 'account_role_savingAsset' => 'Konto oszczędnościowe', - 'account_role_ccAsset' => 'Karta kredytowa', - 'account_role_cashWalletAsset' => 'Portfel gotówkowy', - 'budget_chart_click' => 'Kliknij na nazwę budżetu w tabeli powyżej, aby zobaczyć wykres.', - 'category_chart_click' => 'Kliknij na nazwę kategorii w tabeli powyżej, aby zobaczyć wykres.', - 'in_out_accounts' => 'Zarobione oraz wydane wg kombinacji', - 'in_out_accounts_per_asset' => 'Przychody i wydatki (na konto aktywów)', - 'in_out_per_category' => 'Zarobione oraz wydane wg kategorii', - 'out_per_budget' => 'Wydane wg budżetu', - 'select_expense_revenue' => 'Wybierz konto wydatków/przychodów', - 'multi_currency_report_sum' => 'Ponieważ ta lista zawiera konta z wieloma walutami, sumy, które widzisz, mogą nie mieć sensu. Raport zawsze używa domyślnej waluty.', - 'sum_in_default_currency' => 'Suma zawsze będzie w domyślnej walucie.', - 'net_filtered_prefs' => 'Ten wykres nigdy nie będzie zawierał kont, które nie mają zaznaczonej opcji "Uwzględnij w wartości netto".', + 'report_default' => 'Domyślny raport finansowy między :start i :end', + 'report_audit' => 'Przegląd historii transakcji między :start i :end', + 'report_category' => 'Raport kategorii między :start a :end', + 'report_double' => 'Raport dotyczący wydatków/przychodów między :start a :end', + 'report_budget' => 'Raport budżetów między :start a :end', + 'report_tag' => 'Raport tagów między :start a :end', + 'quick_link_reports' => 'Szybkie linki', + 'quick_link_examples' => 'To tylko przykładowe linki, od których możesz zacząć. Sprawdź strony pomocy pod przyciskiem (?) aby uzyskać informacje o wszystkich raportach i magicznych słowach, których możesz użyć.', + 'quick_link_default_report' => 'Domyślny raport finansowy', + 'quick_link_audit_report' => 'Przegląd historii transakcji', + 'report_this_month_quick' => 'Bieżący miesiąc, wszystkie konta', + 'report_last_month_quick' => 'Ostatni miesiąc, wszystkie konta', + 'report_this_year_quick' => 'Bieżący rok, wszystkie konta', + 'report_this_fiscal_year_quick' => 'Bieżący rok podatkowy, wszystkie konta', + 'report_all_time_quick' => 'Cały czas, wszystkie konta', + 'reports_can_bookmark' => 'Pamiętaj, że raporty można dodać do zakładek.', + 'incomeVsExpenses' => 'Dochody a wydatki', + 'accountBalances' => 'Salda kont', + 'balanceStart' => 'Saldo na początku okresu', + 'balanceEnd' => 'Saldo na końcu okresu', + 'splitByAccount' => 'Podziel według konta', + 'coveredWithTags' => 'Objęte tagami', + 'leftInBudget' => 'Pozostało w budżecie', + 'left_in_debt' => 'Do zapłaty', + 'sumOfSums' => 'Suma sum', + 'noCategory' => '(bez kategorii)', + 'notCharged' => 'Brak opłaty (jeszcze)', + 'inactive' => 'Nieaktywne', + 'active' => 'Aktywne', + 'difference' => 'Różnica', + 'money_flowing_in' => 'Przychodzące', + 'money_flowing_out' => 'Wychodzące', + 'topX' => 'czołówka :number', + 'show_full_list' => 'Pokaż całą listę', + 'show_only_top' => 'Pokazuj tylko czołową :number', + 'report_type' => 'Typ raportu', + 'report_type_default' => 'Domyślny raport finansowy', + 'report_type_audit' => 'Przegląd historii transakcji (audyt)', + 'report_type_category' => 'Raport kategorii', + 'report_type_budget' => 'Raport budżetów', + 'report_type_tag' => 'Raport tagów', + 'report_type_double' => 'Raport dotyczący konta wydatków/przychodów', + 'more_info_help' => 'Więcej informacji na temat typów raportów można znaleźć na stronach pomocy. Naciśnij ikonę (?) w prawym górnym rogu.', + 'report_included_accounts' => 'Uwzględnione konta', + 'report_date_range' => 'Zakres dat', + 'report_preset_ranges' => 'Predefiniowane zakresy', + 'shared' => 'Udostępnione', + 'fiscal_year' => 'Rok podatkowy', + 'income_entry' => 'Dochód z konta ":name" między: :start a :end', + 'expense_entry' => 'Wydatki na konto ":name" między :start a :end', + 'category_entry' => 'Wydatki w kategorii ":name" między :start i :end', + 'budget_spent_amount' => 'Wydatki w budżecie ":budget" między :start i :end', + 'balance_amount' => 'Wydatki w budżecie ":budget" zapłacone z konta ":account" między :start a :end', + 'no_audit_activity' => 'Nie zarejestrowano żadnej aktywności na koncie :account_name między :start a :end.', + 'audit_end_balance' => 'Saldo konta :account_name na koniec :end wynosiło: :balance', + 'reports_extra_options' => 'Dodatkowe opcje', + 'report_has_no_extra_options' => 'Ten raport nie ma dodatkowych opcji', + 'reports_submit' => 'Zobacz raport', + 'end_after_start_date' => 'Data zakończenia raportu musi być po dacie rozpoczęcia.', + 'select_category' => 'Wybierz kategorię(e)', + 'select_budget' => 'Wybierz budżet(y).', + 'select_tag' => 'Wybierz tag(i).', + 'income_per_category' => 'Dochody wg kategorii', + 'expense_per_category' => 'Wydatki wg kategorii', + 'expense_per_budget' => 'Wydatki wg budżetu', + 'income_per_account' => 'Dochody wg konta', + 'expense_per_account' => 'Wydatki wg konta', + 'expense_per_tag' => 'Wydatki wg tagu', + 'income_per_tag' => 'Dochody wg tagu', + 'include_expense_not_in_budget' => 'Uwzględnij wydatki spoza wybranych budżetów', + 'include_expense_not_in_account' => 'Uwzględnij wydatki spoza wybranych kont', + 'include_expense_not_in_category' => 'Uwzględnij wydatki spoza wybranych kategorii', + 'include_income_not_in_category' => 'Uwzględnij przychody spoza wybranych kategorii', + 'include_income_not_in_account' => 'Uwzględnij przychody spoza wybranych kont', + 'include_income_not_in_tags' => 'Uwzględnij przychody spoza wybranych tagów', + 'include_expense_not_in_tags' => 'Uwzględnij wydatki spoza wybranych tagów', + 'everything_else' => 'Wszystko inne', + 'income_and_expenses' => 'Dochody i wydatki', + 'spent_average' => 'Wydano (średnia)', + 'income_average' => 'Dochód (średnia)', + 'transaction_count' => 'Liczba transakcji', + 'average_spending_per_account' => 'Średnie wydatki per konto', + 'average_income_per_account' => 'Średni dochód per konto', + 'total' => 'Łącznie', + 'description' => 'Opis', + 'sum_of_period' => 'Suma dla tego okresu', + 'average_in_period' => 'Średnia dla tego okresu', + 'account_role_defaultAsset' => 'Domyślne konto aktywów', + 'account_role_sharedAsset' => 'Współdzielone konto aktywów', + 'account_role_savingAsset' => 'Konto oszczędnościowe', + 'account_role_ccAsset' => 'Karta kredytowa', + 'account_role_cashWalletAsset' => 'Portfel gotówkowy', + 'budget_chart_click' => 'Kliknij na nazwę budżetu w tabeli powyżej, aby zobaczyć wykres.', + 'category_chart_click' => 'Kliknij na nazwę kategorii w tabeli powyżej, aby zobaczyć wykres.', + 'in_out_accounts' => 'Zarobione oraz wydane wg kombinacji', + 'in_out_accounts_per_asset' => 'Przychody i wydatki (na konto aktywów)', + 'in_out_per_category' => 'Zarobione oraz wydane wg kategorii', + 'out_per_budget' => 'Wydane wg budżetu', + 'select_expense_revenue' => 'Wybierz konto wydatków/przychodów', + 'multi_currency_report_sum' => 'Ponieważ ta lista zawiera konta z wieloma walutami, sumy, które widzisz, mogą nie mieć sensu. Raport zawsze używa domyślnej waluty.', + 'sum_in_default_currency' => 'Suma zawsze będzie w domyślnej walucie.', + 'net_filtered_prefs' => 'Ten wykres nigdy nie będzie zawierał kont, które nie mają zaznaczonej opcji "Uwzględnij w wartości netto".', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Wykres', - 'month' => 'Miesiąc', - 'budget' => 'Budżet', - 'spent' => 'Wydano', - 'spent_capped' => 'Wydano (ograniczone)', - 'spent_in_budget' => 'Wydano w budżecie', - 'left_to_spend' => 'Pozostało do wydania', - 'earned' => 'Zarobiono', - 'overspent' => 'Przepłacono', - 'left' => 'Pozostało', - 'max-amount' => 'Maksymalna kwota', - 'min-amount' => 'Minimalna kwota', - 'journal-amount' => 'Faktyczna kwota', - 'name' => 'Nazwa', - 'date' => 'Data', - 'date_and_time' => 'Data i czas', - 'time' => 'Czas', - 'paid' => 'Zapłacone', - 'unpaid' => 'Niezapłacone', - 'day' => 'Dzień', - 'budgeted' => 'Zabudżetowano', - 'period' => 'Okres', - 'balance' => 'Saldo', - 'in_out_period' => 'In + out this period', - 'sum' => 'Suma', - 'summary' => 'Podsumowanie', - 'average' => 'Średno', - 'balanceFor' => 'Saldo dla :name', - 'no_tags' => '(brak tagów)', + 'chart' => 'Wykres', + 'month' => 'Miesiąc', + 'budget' => 'Budżet', + 'spent' => 'Wydano', + 'spent_capped' => 'Wydano (ograniczone)', + 'spent_in_budget' => 'Wydano w budżecie', + 'left_to_spend' => 'Pozostało do wydania', + 'earned' => 'Zarobiono', + 'overspent' => 'Przepłacono', + 'left' => 'Pozostało', + 'max-amount' => 'Maksymalna kwota', + 'min-amount' => 'Minimalna kwota', + 'journal-amount' => 'Faktyczna kwota', + 'name' => 'Nazwa', + 'date' => 'Data', + 'date_and_time' => 'Data i czas', + 'time' => 'Czas', + 'paid' => 'Zapłacone', + 'unpaid' => 'Niezapłacone', + 'day' => 'Dzień', + 'budgeted' => 'Zabudżetowano', + 'period' => 'Okres', + 'balance' => 'Saldo', + 'in_out_period' => 'Przychodzące + wychodzące w tym okresie', + 'sum' => 'Suma', + 'summary' => 'Podsumowanie', + 'average' => 'Średno', + 'balanceFor' => 'Saldo dla :name', + 'no_tags' => '(brak tagów)', + 'nothing_found' => '(nic nie znaleziono)', // piggy banks: - 'event_history' => 'Historia zdarzeń', - 'add_money_to_piggy' => 'Dodaj pieniądze do skarbonki ":name"', - 'piggy_bank' => 'Skarbonka', - 'new_piggy_bank' => 'Nowa skarbonka', - 'store_piggy_bank' => 'Zapisz nową skarbonkę', - 'stored_piggy_bank' => 'Zapisz nową skarbonkę ":name"', - 'account_status' => 'Status konta', - 'left_for_piggy_banks' => 'Dostępne dla skarbonek', - 'sum_of_piggy_banks' => 'Suma skarbonek', - 'saved_so_far' => 'Zaoszczędzono do tej pory', - 'left_to_save' => 'Pozostało do zaoszczędzenia', - 'suggested_amount' => 'Sugerowana miesięczna kwota do odłożenia', - 'add_money_to_piggy_title' => 'Dodaj pieniądze do skarbonki ":name"', - 'remove_money_from_piggy_title' => 'Usuń pieniądze ze skarbonki ":name"', - 'add' => 'Dodaj', - 'no_money_for_piggy' => 'Nie masz pieniędzy, które mógłbyś umieścić w tej skarbonce.', - 'suggested_savings_per_month' => 'Sugerowane miesięcznie', + 'event_history' => 'Historia zdarzeń', + 'add_money_to_piggy' => 'Dodaj pieniądze do skarbonki ":name"', + 'piggy_bank' => 'Skarbonka', + 'new_piggy_bank' => 'Nowa skarbonka', + 'store_piggy_bank' => 'Zapisz nową skarbonkę', + 'stored_piggy_bank' => 'Zapisz nową skarbonkę ":name"', + 'account_status' => 'Status konta', + 'left_for_piggy_banks' => 'Dostępne dla skarbonek', + 'sum_of_piggy_banks' => 'Suma skarbonek', + 'saved_so_far' => 'Zaoszczędzono do tej pory', + 'left_to_save' => 'Pozostało do zaoszczędzenia', + 'suggested_amount' => 'Sugerowana miesięczna kwota do odłożenia', + 'add_money_to_piggy_title' => 'Dodaj pieniądze do skarbonki ":name"', + 'remove_money_from_piggy_title' => 'Usuń pieniądze ze skarbonki ":name"', + 'add' => 'Dodaj', + 'no_money_for_piggy' => 'Nie masz pieniędzy, które mógłbyś umieścić w tej skarbonce.', + 'suggested_savings_per_month' => 'Sugerowane miesięcznie', - 'remove' => 'Usuń', - 'max_amount_add' => 'Maksymalną kwotą, którą możesz dodać jest', - 'max_amount_remove' => 'Maksymalną kwotą, którą możesz usunąć jest', - 'update_piggy_button' => 'Aktualizuj skarbonkę', - 'update_piggy_title' => 'Aktualizuj skarbonkę ":name"', - 'updated_piggy_bank' => 'Zaktualizowano skarbonkę ":name"', - 'details' => 'Szczegóły', - 'events' => 'Zdarzenia', - 'target_amount' => 'Kwota docelowa', - 'start_date' => 'Data rozpoczęcia', - 'no_start_date' => 'Brak daty rozpoczęcia', - 'target_date' => 'Data docelowa', - 'no_target_date' => 'Brak daty docelowej', - 'table' => 'Tabela', - 'delete_piggy_bank' => 'Usuń skarbonkę ":name"', - 'cannot_add_amount_piggy' => 'Nie można dodać :amount do ":name".', - 'cannot_remove_from_piggy' => 'Nie można usunąć :amount z ":name".', - 'deleted_piggy_bank' => 'Usunięto skarbonkę ":name"', - 'added_amount_to_piggy' => 'Dodano :amount do ":name"', - 'removed_amount_from_piggy' => 'Usunięto :amount z ":name"', - 'piggy_events' => 'Powiązane skarbonki', + 'remove' => 'Usuń', + 'max_amount_add' => 'Maksymalną kwotą, którą możesz dodać jest', + 'max_amount_remove' => 'Maksymalną kwotą, którą możesz usunąć jest', + 'update_piggy_button' => 'Aktualizuj skarbonkę', + 'update_piggy_title' => 'Aktualizuj skarbonkę ":name"', + 'updated_piggy_bank' => 'Zaktualizowano skarbonkę ":name"', + 'details' => 'Szczegóły', + 'events' => 'Zdarzenia', + 'target_amount' => 'Kwota docelowa', + 'start_date' => 'Data rozpoczęcia', + 'no_start_date' => 'Brak daty rozpoczęcia', + 'target_date' => 'Data docelowa', + 'no_target_date' => 'Brak daty docelowej', + 'table' => 'Tabela', + 'delete_piggy_bank' => 'Usuń skarbonkę ":name"', + 'cannot_add_amount_piggy' => 'Nie można dodać :amount do ":name".', + 'cannot_remove_from_piggy' => 'Nie można usunąć :amount z ":name".', + 'deleted_piggy_bank' => 'Usunięto skarbonkę ":name"', + 'added_amount_to_piggy' => 'Dodano :amount do ":name"', + 'removed_amount_from_piggy' => 'Usunięto :amount z ":name"', + 'piggy_events' => 'Powiązane skarbonki', // tags - 'delete_tag' => 'Usuń tag ":tag"', - 'deleted_tag' => 'Usunięto tag ":tag"', - 'new_tag' => 'Utwórz nowy tag', - 'edit_tag' => 'Modyfikuj tag ":tag"', - 'updated_tag' => 'Zaktualizowano tag ":tag"', - 'created_tag' => 'Tag ":tag" został utworzony!', + 'delete_tag' => 'Usuń tag ":tag"', + 'deleted_tag' => 'Usunięto tag ":tag"', + 'new_tag' => 'Utwórz nowy tag', + 'edit_tag' => 'Modyfikuj tag ":tag"', + 'updated_tag' => 'Zaktualizowano tag ":tag"', + 'created_tag' => 'Tag ":tag" został utworzony!', - 'transaction_journal_information' => 'Informacje o transakcji', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta informacje', - 'transaction_journal_more' => 'Więcej informacji', - 'basic_journal_information' => 'Podstawowe informacje o transakcji', - 'transaction_journal_extra' => 'Dodatkowe informacje', - 'att_part_of_journal' => 'Zapisano jako ":journal"', - 'total_amount' => 'Łączna kwota', - 'number_of_decimals' => 'Ilość miejsc dziesiętnych', + 'transaction_journal_information' => 'Informacje o transakcji', + 'transaction_journal_amount' => 'Informacje o kwocie', + 'transaction_journal_meta' => 'Meta informacje', + 'transaction_journal_more' => 'Więcej informacji', + 'basic_journal_information' => 'Podstawowe informacje o transakcji', + 'transaction_journal_extra' => 'Dodatkowe informacje', + 'att_part_of_journal' => 'Zapisano jako ":journal"', + 'total_amount' => 'Łączna kwota', + 'number_of_decimals' => 'Ilość miejsc dziesiętnych', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'Zaproszenie do ":address" zostało już wykorzystane.', - 'invite_is_deleted' => 'Zaproszenie do ":address" zostało usunięte.', - 'invite_new_user_title' => 'Zaproś nowego użytkownika', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Adres email', - 'invite_user' => 'Zaproś użytkownika', - 'user_is_invited' => 'Adres email ":address" został zaproszony do Firefly III', - 'administration' => 'Administracja', - 'system_settings' => 'Ustawienia systemowe', - 'code_already_used' => 'Kod zaproszenia został już użyty', - 'user_administration' => 'Administracja użytkownikami', - 'list_all_users' => 'Wszyscy użytkownicy', - 'all_users' => 'Wszyscy użytkownicy', - 'instance_configuration' => 'Konfiguracja', - 'firefly_instance_configuration' => 'Opcje konfiguracji dla Firefly III', - 'setting_single_user_mode' => 'Tryb pojedynczego użytkownika', - 'setting_single_user_mode_explain' => 'Domyślnie, Firefly III pozwala na jednego (1) użytkownika: Ciebie. Jest to środek bezpieczeństwa uniemożliwiający innym używanie Twojej instalacji, chyba że im pozwolisz. Kolejne rejestracje są zablokowane. Jeżeli odznaczysz to pole, inne osoby będą mogły używać Twojej instalacji Firefly III (zakładając, że jest ona dostępna w Internecie).', - 'store_configuration' => 'Zapisz konfigurację', - 'single_user_administration' => 'Administracja użytkownika dla :email', - 'edit_user' => 'Modyfikuj użytkownika :email', - 'hidden_fields_preferences' => 'Możesz włączyć więcej opcji transakcji w swoich ustawieniach.', - 'user_data_information' => 'Dane użytkownika', - 'user_information' => 'Informacja o użytkowniku', - 'total_size' => 'łączny rozmiar', - 'budget_or_budgets' => ':count budżet|:count budżetów', - 'budgets_with_limits' => ':count budżet z ustaloną kwotą|:count budżetów z ustaloną kwotą', - 'nr_of_rules_in_total_groups' => ':count_rules reguła(y) w :count_groups grupa(ch) reguł', - 'tag_or_tags' => ':count tag|:count tagów', - 'configuration_updated' => 'Konfiguracja została zaktualizowana', - 'setting_is_demo_site' => 'Strona demonstracyjna', - 'setting_is_demo_site_explain' => 'Jeśli zaznaczysz to pole, ta instalacja będzie zachowywać się jak witryna demonstracyjna, co może mieć dziwne efekty uboczne.', - 'block_code_bounced' => 'Odrzucony e-mail potwierdzający', - 'block_code_expired' => 'Demonstracyjne konto wygasło', - 'no_block_code' => 'Brak powody blokady lub użytkownik niezablokowany', - 'block_code_email_changed' => 'Użytkownik nie potwierdził jeszcze nowego adresu e-mail', - 'admin_update_email' => 'W przeciwieństwie do strony "Profil", użytkownik NIE zostanie powiadomiony o zmianie adresu e-mail!', - 'update_user' => 'Modyfikuj użytkownika', - 'updated_user' => 'Dane użytkownika zostały zmienione.', - 'delete_user' => 'Usuń użytkownika :email', - 'user_deleted' => 'Użytkownik został usunięty', - 'send_test_email' => 'Wyślij testową wiadomość e-mail', - 'send_test_email_text' => 'Aby sprawdzić, czy Twoja instalacja umożliwia wysyłanie wiadomości e-mail lub na Slacku, naciśnij ten przycisk. Nie zobaczysz tutaj błędu (jeśli jest), pliki dziennika będą odzwierciedlać wszelkie błędy. Możesz nacisnąć ten przycisk tyle razy, ile chcesz. Nie ma kontroli spamu. Wiadomość zostanie wysłana do :email i powinna wkrótce nadejść.', - 'send_message' => 'Wyślij wiadomość', - 'send_test_triggered' => 'Test został uruchomiony. Sprawdź swoją skrzynkę odbiorczą i pliki dziennika.', - 'give_admin_careful' => 'Użytkownicy, którzy dostaną prawa administratora, mogą zabrać twoje. Zachowaj ostrożność.', - 'admin_maintanance_title' => 'Konserwacja', - 'admin_maintanance_expl' => 'Kilka pięknych przycisków do konserwacji Firefly III', - 'admin_maintenance_clear_cache' => 'Wyczyść pamięć podręczną', - 'admin_notifications' => 'Powiadomienia administratora', - 'admin_notifications_expl' => 'Następujące powiadomienia mogą być włączone lub wyłączone przez administratora. Jeśli chcesz również otrzymywać te wiadomości przez Slack ustaw adres URL dla "przychodzącego webhooka".', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'Dostępna jest nowa wersja', - 'admin_notification_check_invite_created' => 'Użytkownik jest zaproszony do Firefly III', - 'admin_notification_check_invite_redeemed' => 'Zaproszenie użytkownika zostało użyte', - 'all_invited_users' => 'Wszyscy zaproszeni użytkownicy', - 'save_notification_settings' => 'Zapisz ustawienia', - 'notification_settings_saved' => 'Ustawienia powiadomień zostały zapisane', - - - 'split_transaction_title' => 'Opis podzielonej transakcji', - 'split_transaction_title_help' => 'Jeśli tworzysz podzieloną transakcję, musi ona posiadać globalny opis dla wszystkich podziałów w transakcji.', - 'split_title_help' => 'Podzielone transakcje muszą posiadać globalny opis.', - 'you_create_transfer' => 'Tworzysz przelew.', - 'you_create_withdrawal' => 'Tworzysz wydatek.', - 'you_create_deposit' => 'Tworzysz wpłatę.', + 'invite_is_already_redeemed' => 'Zaproszenie do ":address" zostało już wykorzystane.', + 'invite_is_deleted' => 'Zaproszenie do ":address" zostało usunięte.', + 'invite_new_user_title' => 'Zaproś nowego użytkownika', + 'invite_new_user_text' => 'Jako administrator możesz zaprosić innych użytkowników, aby zarejestrowali się w twojej instancji Firefly III. Będą mogli zarejestrować swoje konto, korzystając z bezpośredniego odnośnika, który możesz im udostępnić. Zaproszony użytkownik i jego odnośnik pojawią się w tabeli poniżej. Możesz udostępnić odnośnik użytkownikowi.', + 'invited_user_mail' => 'Adres email', + 'invite_user' => 'Zaproś użytkownika', + 'user_is_invited' => 'Adres email ":address" został zaproszony do Firefly III', + 'administration' => 'Administracja', + 'system_settings' => 'Ustawienia systemowe', + 'code_already_used' => 'Kod zaproszenia został już użyty', + 'user_administration' => 'Administracja użytkownikami', + 'list_all_users' => 'Wszyscy użytkownicy', + 'all_users' => 'Wszyscy użytkownicy', + 'instance_configuration' => 'Konfiguracja', + 'firefly_instance_configuration' => 'Opcje konfiguracji dla Firefly III', + 'setting_single_user_mode' => 'Tryb pojedynczego użytkownika', + 'setting_single_user_mode_explain' => 'Domyślnie, Firefly III pozwala na jednego (1) użytkownika: Ciebie. Jest to środek bezpieczeństwa uniemożliwiający innym używanie Twojej instalacji, chyba że im pozwolisz. Kolejne rejestracje są zablokowane. Jeżeli odznaczysz to pole, inne osoby będą mogły używać Twojej instalacji Firefly III (zakładając, że jest ona dostępna w Internecie).', + 'store_configuration' => 'Zapisz konfigurację', + 'single_user_administration' => 'Administracja użytkownika dla :email', + 'edit_user' => 'Modyfikuj użytkownika :email', + 'hidden_fields_preferences' => 'Możesz włączyć więcej opcji transakcji w swoich ustawieniach.', + 'user_data_information' => 'Dane użytkownika', + 'user_information' => 'Informacja o użytkowniku', + 'total_size' => 'łączny rozmiar', + 'budget_or_budgets' => ':count budżet|:count budżetów', + 'budgets_with_limits' => ':count budżet z ustaloną kwotą|:count budżetów z ustaloną kwotą', + 'nr_of_rules_in_total_groups' => ':count_rules reguła(y) w :count_groups grupa(ch) reguł', + 'tag_or_tags' => ':count tag|:count tagów', + 'configuration_updated' => 'Konfiguracja została zaktualizowana', + 'setting_is_demo_site' => 'Strona demonstracyjna', + 'setting_is_demo_site_explain' => 'Jeśli zaznaczysz to pole, ta instalacja będzie zachowywać się jak witryna demonstracyjna, co może mieć dziwne efekty uboczne.', + 'block_code_bounced' => 'Odrzucony e-mail potwierdzający', + 'block_code_expired' => 'Demonstracyjne konto wygasło', + 'no_block_code' => 'Brak powody blokady lub użytkownik niezablokowany', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Użytkownik nie potwierdził jeszcze nowego adresu e-mail', + 'admin_update_email' => 'W przeciwieństwie do strony "Profil", użytkownik NIE zostanie powiadomiony o zmianie adresu e-mail!', + 'update_user' => 'Modyfikuj użytkownika', + 'updated_user' => 'Dane użytkownika zostały zmienione.', + 'delete_user' => 'Usuń użytkownika :email', + 'user_deleted' => 'Użytkownik został usunięty', + 'send_test_email' => 'Wyślij testową wiadomość e-mail', + 'send_test_email_text' => 'Aby sprawdzić, czy Twoja instalacja umożliwia wysyłanie wiadomości e-mail lub na Slacku, naciśnij ten przycisk. Nie zobaczysz tutaj błędu (jeśli jest), pliki dziennika będą odzwierciedlać wszelkie błędy. Możesz nacisnąć ten przycisk tyle razy, ile chcesz. Nie ma kontroli spamu. Wiadomość zostanie wysłana do :email i powinna wkrótce nadejść.', + 'send_message' => 'Wyślij wiadomość', + 'send_test_triggered' => 'Test został uruchomiony. Sprawdź swoją skrzynkę odbiorczą i pliki dziennika.', + 'give_admin_careful' => 'Użytkownicy, którzy dostaną prawa administratora, mogą zabrać twoje. Zachowaj ostrożność.', + 'admin_maintanance_title' => 'Konserwacja', + 'admin_maintanance_expl' => 'Kilka pięknych przycisków do konserwacji Firefly III', + 'admin_maintenance_clear_cache' => 'Wyczyść pamięć podręczną', + 'admin_notifications' => 'Powiadomienia administratora', + 'admin_notifications_expl' => 'Następujące powiadomienia mogą być włączone lub wyłączone przez administratora. Jeśli chcesz również otrzymywać te wiadomości przez Slack ustaw adres URL dla "przychodzącego webhooka".', + 'admin_notification_check_user_new_reg' => 'Użytkownik otrzymuje wiadomość powitalną po rejestracji', + 'admin_notification_check_admin_new_reg' => 'Administrator(zy) otrzyma(ją) nowe powiadomienie o rejestracji użytkownika', + 'admin_notification_check_new_version' => 'Dostępna jest nowa wersja', + 'admin_notification_check_invite_created' => 'Użytkownik został zaproszony do Firefly III', + 'admin_notification_check_invite_redeemed' => 'Zaproszenie użytkownika zostało użyte', + 'all_invited_users' => 'Wszyscy zaproszeni użytkownicy', + 'save_notification_settings' => 'Zapisz ustawienia', + 'notification_settings_saved' => 'Ustawienia powiadomień zostały zapisane', + 'split_transaction_title' => 'Opis podzielonej transakcji', + 'split_transaction_title_help' => 'Jeśli tworzysz podzieloną transakcję, musi ona posiadać globalny opis dla wszystkich podziałów w transakcji.', + 'split_title_help' => 'Podzielone transakcje muszą posiadać globalny opis.', + 'you_create_transfer' => 'Tworzysz przelew.', + 'you_create_withdrawal' => 'Tworzysz wydatek.', + 'you_create_deposit' => 'Tworzysz wpłatę.', // links - 'journal_link_configuration' => 'Konfiguracja łączy między transakcjami', - 'create_new_link_type' => 'Utwórz nowy typ łącza', - 'store_new_link_type' => 'Zapisz nowy typ łącza', - 'update_link_type' => 'Modyfikuj typ łącza', - 'edit_link_type' => 'Modyfikuj typ łącza ":name"', - 'updated_link_type' => 'Zaktualizowano typ łącza ":name"', - 'delete_link_type' => 'Usuń typ łącza ":name"', - 'deleted_link_type' => 'Usunięto typ łącza ":name"', - 'stored_new_link_type' => 'Zapisz nowy typ łącza ":name"', - 'cannot_edit_link_type' => 'Nie można zaktualizować typu łącza ":name"', - 'link_type_help_name' => 'Np. "Duplikaty"', - 'link_type_help_inward' => 'Np. "duplikuje"', - 'link_type_help_outward' => 'Np. "jest zduplikowana przez"', - 'save_connections_by_moving' => 'Zapisz powiązania miedzy tymi transakcjami, przenosząc je do innego typu łącza:', - 'do_not_save_connection' => '(nie zapisuj powiązań)', - 'link_transaction' => 'Powiąż transakcje', - 'link_to_other_transaction' => 'Powiąż aktualną transakcję z inną transakcją', - 'select_transaction_to_link' => 'Wybierz transakcję, aby powiązać tę transakcję. Powiązania są obecnie nieużywane w Firefly III (oprócz pokazywania), ale zamierzam to zmienić w przyszłości. Użyj pola wyszukiwania, aby wybrać transakcję według tytułu lub ID. Jeśli chcesz dodać niestandardowe typy powiązań, sprawdź sekcję administracyjną.', - 'this_transaction' => 'Ta transakcja', - 'transaction' => 'Transakcja', - 'comments' => 'Komentarze', - 'link_notes' => 'Notatki które chcesz zapisać wraz z powiązaniem.', - 'invalid_link_selection' => 'Nie można powiązać tych transakcji', - 'selected_transaction' => 'Wybrana transakcja', - 'journals_linked' => 'Transakcje zostały powiązane.', - 'journals_error_linked' => 'Wybrane transakcje są już powiązane.', - 'journals_link_to_self' => 'Nie możesz powiązać transakcji z samej ze sobą', - 'journal_links' => 'Powiązane transakcje', - 'this_withdrawal' => 'Ta wypłata', - 'this_deposit' => 'Ta wpłata', - 'this_transfer' => 'Ten transfer', - 'overview_for_link' => 'Przegląd dla typu łącza ":name"', - 'source_transaction' => 'Transakcja źródłowa', - 'link_description' => 'Opis łącza', - 'destination_transaction' => 'Transakcja docelowa', - 'delete_journal_link' => 'Usuń powiązanie między :source a :destination', - 'deleted_link' => 'Usunięto powiązanie', + 'journal_link_configuration' => 'Konfiguracja łączy między transakcjami', + 'create_new_link_type' => 'Utwórz nowy typ łącza', + 'store_new_link_type' => 'Zapisz nowy typ łącza', + 'update_link_type' => 'Modyfikuj typ łącza', + 'edit_link_type' => 'Modyfikuj typ łącza ":name"', + 'updated_link_type' => 'Zaktualizowano typ łącza ":name"', + 'delete_link_type' => 'Usuń typ łącza ":name"', + 'deleted_link_type' => 'Usunięto typ łącza ":name"', + 'stored_new_link_type' => 'Zapisz nowy typ łącza ":name"', + 'cannot_edit_link_type' => 'Nie można zaktualizować typu łącza ":name"', + 'link_type_help_name' => 'Np. "Duplikaty"', + 'link_type_help_inward' => 'Np. "duplikuje"', + 'link_type_help_outward' => 'Np. "jest zduplikowana przez"', + 'save_connections_by_moving' => 'Zapisz powiązania miedzy tymi transakcjami, przenosząc je do innego typu łącza:', + 'do_not_save_connection' => '(nie zapisuj powiązań)', + 'link_transaction' => 'Powiąż transakcje', + 'link_to_other_transaction' => 'Powiąż aktualną transakcję z inną transakcją', + 'select_transaction_to_link' => 'Wybierz transakcję, aby powiązać tę transakcję. Powiązania są obecnie nieużywane w Firefly III (oprócz pokazywania), ale zamierzam to zmienić w przyszłości. Użyj pola wyszukiwania, aby wybrać transakcję według tytułu lub ID. Jeśli chcesz dodać niestandardowe typy powiązań, sprawdź sekcję administracyjną.', + 'this_transaction' => 'Ta transakcja', + 'transaction' => 'Transakcja', + 'comments' => 'Komentarze', + 'link_notes' => 'Notatki które chcesz zapisać wraz z powiązaniem.', + 'invalid_link_selection' => 'Nie można powiązać tych transakcji', + 'selected_transaction' => 'Wybrana transakcja', + 'journals_linked' => 'Transakcje zostały powiązane.', + 'journals_error_linked' => 'Wybrane transakcje są już powiązane.', + 'journals_link_to_self' => 'Nie możesz powiązać transakcji z samej ze sobą', + 'journal_links' => 'Powiązane transakcje', + 'this_withdrawal' => 'Ta wypłata', + 'this_deposit' => 'Ta wpłata', + 'this_transfer' => 'Ten transfer', + 'overview_for_link' => 'Przegląd dla typu łącza ":name"', + 'source_transaction' => 'Transakcja źródłowa', + 'link_description' => 'Opis łącza', + 'destination_transaction' => 'Transakcja docelowa', + 'delete_journal_link' => 'Usuń powiązanie między :source a :destination', + 'deleted_link' => 'Usunięto powiązanie', // link translations: - 'Paid_name' => 'Płatność', - 'Refund_name' => 'Zwrot', - 'Reimbursement_name' => 'Refundacja (zwrot kosztów)', - 'Related_name' => 'Powiązanie', - 'relates to_inward' => 'odnosi się do', - 'is (partially) refunded by_inward' => 'jest (częściowo) zwracane przez', - 'is (partially) paid for by_inward' => 'jest (częściowo) opłacane przez', - 'is (partially) reimbursed by_inward' => 'jest (częściowo) refundowany przez', - 'inward_transaction' => 'Transakcja wewnętrzna', - 'outward_transaction' => 'Transakcja zewnętrzna', - 'relates to_outward' => 'odnosi się do', - '(partially) refunds_outward' => '(częściowo) refundowany', - '(partially) pays for_outward' => '(częściowo) płaci za', - '(partially) reimburses_outward' => '(częściowo) refundowany', - 'is (partially) refunded by' => 'jest (częściowo) zwracane przez', - 'is (partially) paid for by' => 'jest (częściowo) opłacane przez', - 'is (partially) reimbursed by' => 'jest (częściowo) refundowany przez', - 'relates to' => 'odnosi się do', - '(partially) refunds' => '(częściowo) zwraca', - '(partially) pays for' => '(częściowo) płaci za', - '(partially) reimburses' => '(częściowo) refunduje', + 'Paid_name' => 'Płatność', + 'Refund_name' => 'Zwrot', + 'Reimbursement_name' => 'Refundacja (zwrot kosztów)', + 'Related_name' => 'Powiązanie', + 'relates to_inward' => 'odnosi się do', + 'is (partially) refunded by_inward' => 'jest (częściowo) zwracane przez', + 'is (partially) paid for by_inward' => 'jest (częściowo) opłacane przez', + 'is (partially) reimbursed by_inward' => 'jest (częściowo) refundowany przez', + 'inward_transaction' => 'Transakcja wewnętrzna', + 'outward_transaction' => 'Transakcja zewnętrzna', + 'relates to_outward' => 'odnosi się do', + '(partially) refunds_outward' => '(częściowo) refundowany', + '(partially) pays for_outward' => '(częściowo) płaci za', + '(partially) reimburses_outward' => '(częściowo) refundowany', + 'is (partially) refunded by' => 'jest (częściowo) zwracane przez', + 'is (partially) paid for by' => 'jest (częściowo) opłacane przez', + 'is (partially) reimbursed by' => 'jest (częściowo) refundowany przez', + 'relates to' => 'odnosi się do', + '(partially) refunds' => '(częściowo) zwraca', + '(partially) pays for' => '(częściowo) płaci za', + '(partially) reimburses' => '(częściowo) refunduje', // split a transaction: - 'splits' => 'Podziały', - 'add_another_split' => 'Dodaj kolejny podział', - 'cannot_edit_opening_balance' => 'Nie możesz edytować salda otwarcia konta.', - 'no_edit_multiple_left' => 'Nie wybrałeś żadnych poprawnych transakcji do edycji.', - 'breadcrumb_convert_group' => 'Konwertuj tę transakcję', - 'convert_invalid_source' => 'Informacje źródłowe są nieprawidłowe dla transakcji #%d.', - 'convert_invalid_destination' => 'Informacje docelowe są nieprawidłowe dla transakcji #%d.', - 'create_another' => 'Po zapisaniu wróć tutaj, aby utworzyć kolejny.', - 'after_update_create_another' => 'Po aktualizacji wróć tutaj, aby kontynuować edycję.', - 'store_as_new' => 'Zapisz jako nową zamiast aktualizować.', - 'reset_after' => 'Wyczyść formularz po zapisaniu', - 'errors_submission' => 'Coś poszło nie tak w czasie zapisu. Proszę sprawdź błędy.', - 'transaction_expand_split' => 'Rozwiń podział', - 'transaction_collapse_split' => 'Zwiń podział', + 'splits' => 'Podziały', + 'add_another_split' => 'Dodaj kolejny podział', + 'cannot_edit_opening_balance' => 'Nie możesz edytować salda otwarcia konta.', + 'no_edit_multiple_left' => 'Nie wybrałeś żadnych poprawnych transakcji do edycji.', + 'breadcrumb_convert_group' => 'Konwertuj tę transakcję', + 'convert_invalid_source' => 'Informacje źródłowe są nieprawidłowe dla transakcji #%d.', + 'convert_invalid_destination' => 'Informacje docelowe są nieprawidłowe dla transakcji #%d.', + 'create_another' => 'Po zapisaniu wróć tutaj, aby utworzyć kolejny.', + 'after_update_create_another' => 'Po aktualizacji wróć tutaj, aby kontynuować edycję.', + 'store_as_new' => 'Zapisz jako nową zamiast aktualizować.', + 'reset_after' => 'Wyczyść formularz po zapisaniu', + 'errors_submission' => 'Coś poszło nie tak w czasie zapisu. Proszę, sprawdź błędy poniżej.', + 'errors_submission_v2' => 'Coś poszło nie tak w czasie zapisu. Proszę, sprawdź błędy poniżej: %{errorMessage}', + 'transaction_expand_split' => 'Rozwiń podział', + 'transaction_collapse_split' => 'Zwiń podział', // object groups - 'default_group_title_name' => '(bez grupy)', - 'default_group_title_name_plain' => 'bez grupy', + 'default_group_title_name' => '(bez grupy)', + 'default_group_title_name_plain' => 'bez grupy', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Stwórzmy konto aktywów!', - 'no_accounts_intro_asset' => 'Nie masz jeszcze konta nie aktywów. Konta aktywów są twoimi głównymi kontami: konto czekowe, konto oszczędnościowe, wspólne konto lub nawet karta kredytowa.', - 'no_accounts_imperative_asset' => 'Aby rozpocząć korzystanie z Firefly III należy utworzyć co najmniej jedno konto aktywów. Zróbmy je więc teraz:', - 'no_accounts_create_asset' => 'Utwórz konto aktywów', - 'no_accounts_title_expense' => 'Stwórzmy konto wydatków!', - 'no_accounts_intro_expense' => 'Nie masz jeszcze żadnych kont wydatków. Konta wydatków to miejsca, w których wydajesz pieniądze, takie jak sklepy i supermarkety.', - 'no_accounts_imperative_expense' => 'Konta wydatków są tworzone automatycznie podczas tworzenia transakcji, ale możesz również utworzyć je ręcznie, jeśli chcesz. Stwórzmy jedno teraz:', - 'no_accounts_create_expense' => 'Utwórz konto wydatków', - 'no_accounts_title_revenue' => 'Stwórzmy konto przychodów!', - 'no_accounts_intro_revenue' => 'Nie masz jeszcze żadnych kont przychodów. Konta przychodów to miejsca, z których dostajesz pieniądze, takie jak pracodawca.', - 'no_accounts_imperative_revenue' => 'Konta przychodów są tworzone automatycznie podczas tworzenia transakcji, ale możesz również utworzyć je ręcznie, jeśli chcesz. Stwórzmy jedno teraz:', - 'no_accounts_create_revenue' => 'Utwórz konto przychodów', - 'no_accounts_title_liabilities' => 'Stwórzmy zobowiązanie!', - 'no_accounts_intro_liabilities' => 'Nie masz jeszcze żadnych zobowiązań. Zobowiązania to konta które rejestrują Twoje kredyty (np. studenckie) i inne długi.', - 'no_accounts_imperative_liabilities' => 'Nie musisz korzystać z tej funkcji, ale może być przydatna, jeśli chcesz śledzić te rzeczy.', - 'no_accounts_create_liabilities' => 'Utwórz zobowiązanie', - 'no_budgets_title_default' => 'Stwórzmy budżet', - 'no_rules_title_default' => 'Stwórzmy regułę', - 'no_budgets_intro_default' => 'Nie masz jeszcze żadnych budżetów. Budżety są wykorzystywane do organizowania twoich wydatków w logiczne grupy, które możesz obserwować, aby ograniczyć swoje wydatki.', - 'no_rules_intro_default' => 'Nie masz jeszcze żadnych reguł. Automatyzacja reguł jest dosyć potężna i może pomóc Ci w obsłudze transakcji.', - 'no_rules_imperative_default' => 'Reguły mogą być bardzo przydatne podczas zarządzania transakcjami. Utwórzmy jedną teraz:', - 'no_budgets_imperative_default' => 'Budżety są podstawowymi narzędziami zarządzania finansami. Stwórzmy jeden teraz:', - 'no_budgets_create_default' => 'Stwórz budżet', - 'no_rules_create_default' => 'Utwórz regułę', - 'no_categories_title_default' => 'Stwórzmy kategorię!', - 'no_categories_intro_default' => 'Nie masz jeszcze żadnych kategorii. Kategorie służą do precyzyjnego dostrajania transakcji i oznaczania ich zgodnie z wyznaczoną kategorią.', - 'no_categories_imperative_default' => 'Kategorie są tworzone automatycznie podczas tworzenia transakcji, ale możesz również utworzyć je ręcznie, jeśli chcesz. Stwórzmy jedną teraz:', - 'no_categories_create_default' => 'Stwórz kategorię', - 'no_tags_title_default' => 'Stwórzmy tag!', - 'no_tags_intro_default' => 'Nie masz jeszcze tagów. Tagi służą do precyzyjnego dostrajania transakcji i oznaczania ich zgodnie konkretnymi słowami kluczowymi.', - 'no_tags_imperative_default' => 'Tagi są tworzone automatycznie podczas tworzenia transakcji, ale możesz również utworzyć je ręcznie. Stwórzmy jeden teraz:', - 'no_tags_create_default' => 'Utwórz tag', - 'no_transactions_title_withdrawal' => 'Stwórzmy wydatek!', - 'no_transactions_intro_withdrawal' => 'Jeszcze nie masz wydatków. Powinieneś utworzyć wydatki aby rozpocząć zarządzanie swoimi finansami.', - 'no_transactions_imperative_withdrawal' => 'Wydałeś trochę pieniędzy? Zatem powinieneś je zapisać:', - 'no_transactions_create_withdrawal' => 'Utwórz wydatek', - 'no_transactions_title_deposit' => 'Stwórzmy przychód!', - 'no_transactions_intro_deposit' => 'Jeszcze nie masz przychodów. Powinieneś utworzyć przychody aby rozpocząć zarządzanie swoimi finansami.', - 'no_transactions_imperative_deposit' => 'Otrzymałeś trochę pieniędzy? Zatem powinieneś je zapisać:', - 'no_transactions_create_deposit' => 'Stwórz depozyt', - 'no_transactions_title_transfers' => 'Stwórzmy transfer!', - 'no_transactions_intro_transfers' => 'Nie masz jeszcze żadnych transferów. Przenosząc pieniądze między kontami aktywów, rejestruje się je jako transfer.', - 'no_transactions_imperative_transfers' => 'Czy przenosiłeś trochę pieniędzy? Zatem powinieneś to zapisać:', - 'no_transactions_create_transfers' => 'Utwórz transfer', - 'no_piggies_title_default' => 'Stwórzmy skarbonkę!', - 'no_piggies_intro_default' => 'Nie posiadasz jeszcze żadnych skarbonek. Możesz stworzyć skarbonki aby dzielić swoje oszczędności i śledzić na co oszczędzasz.', - 'no_piggies_imperative_default' => 'Oszczędzasz pieniądze na coś? Utwórz skarbonkę i śledź:', - 'no_piggies_create_default' => 'Utwórz nową skarbonkę', - 'no_bills_title_default' => 'Stwórzmy rachunek!', - 'no_bills_intro_default' => 'Nie masz jeszcze żadnych rachunków. Można tworzyć rachunki, aby śledzić regularne wydatki, takie jak czynsz czy ubezpieczenie.', - 'no_bills_imperative_default' => 'Czy masz takie regularne rachunki? Utwórz rachunek i śledź swoje płatności:', - 'no_bills_create_default' => 'Utwórz rachunek', + 'no_accounts_title_asset' => 'Stwórzmy konto aktywów!', + 'no_accounts_intro_asset' => 'Nie masz jeszcze konta nie aktywów. Konta aktywów są twoimi głównymi kontami: konto czekowe, konto oszczędnościowe, wspólne konto lub nawet karta kredytowa.', + 'no_accounts_imperative_asset' => 'Aby rozpocząć korzystanie z Firefly III należy utworzyć co najmniej jedno konto aktywów. Zróbmy je więc teraz:', + 'no_accounts_create_asset' => 'Utwórz konto aktywów', + 'no_accounts_title_expense' => 'Stwórzmy konto wydatków!', + 'no_accounts_intro_expense' => 'Nie masz jeszcze żadnych kont wydatków. Konta wydatków to miejsca, w których wydajesz pieniądze, takie jak sklepy i supermarkety.', + 'no_accounts_imperative_expense' => 'Konta wydatków są tworzone automatycznie podczas tworzenia transakcji, ale możesz również utworzyć je ręcznie, jeśli chcesz. Stwórzmy jedno teraz:', + 'no_accounts_create_expense' => 'Utwórz konto wydatków', + 'no_accounts_title_revenue' => 'Stwórzmy konto przychodów!', + 'no_accounts_intro_revenue' => 'Nie masz jeszcze żadnych kont przychodów. Konta przychodów to miejsca, z których dostajesz pieniądze, takie jak pracodawca.', + 'no_accounts_imperative_revenue' => 'Konta przychodów są tworzone automatycznie podczas tworzenia transakcji, ale możesz również utworzyć je ręcznie, jeśli chcesz. Stwórzmy jedno teraz:', + 'no_accounts_create_revenue' => 'Utwórz konto przychodów', + 'no_accounts_title_liabilities' => 'Stwórzmy zobowiązanie!', + 'no_accounts_intro_liabilities' => 'Nie masz jeszcze żadnych zobowiązań. Zobowiązania to konta które rejestrują Twoje kredyty (np. studenckie) i inne długi.', + 'no_accounts_imperative_liabilities' => 'Nie musisz korzystać z tej funkcji, ale może być przydatna, jeśli chcesz śledzić te rzeczy.', + 'no_accounts_create_liabilities' => 'Utwórz zobowiązanie', + 'no_budgets_title_default' => 'Stwórzmy budżet', + 'no_rules_title_default' => 'Stwórzmy regułę', + 'no_budgets_intro_default' => 'Nie masz jeszcze żadnych budżetów. Budżety są wykorzystywane do organizowania twoich wydatków w logiczne grupy, które możesz obserwować, aby ograniczyć swoje wydatki.', + 'no_rules_intro_default' => 'Nie masz jeszcze żadnych reguł. Automatyzacja reguł jest dosyć potężna i może pomóc Ci w obsłudze transakcji.', + 'no_rules_imperative_default' => 'Reguły mogą być bardzo przydatne podczas zarządzania transakcjami. Utwórzmy jedną teraz:', + 'no_budgets_imperative_default' => 'Budżety są podstawowymi narzędziami zarządzania finansami. Stwórzmy jeden teraz:', + 'no_budgets_create_default' => 'Stwórz budżet', + 'no_rules_create_default' => 'Utwórz regułę', + 'no_categories_title_default' => 'Stwórzmy kategorię!', + 'no_categories_intro_default' => 'Nie masz jeszcze żadnych kategorii. Kategorie służą do precyzyjnego dostrajania transakcji i oznaczania ich zgodnie z wyznaczoną kategorią.', + 'no_categories_imperative_default' => 'Kategorie są tworzone automatycznie podczas tworzenia transakcji, ale możesz również utworzyć je ręcznie, jeśli chcesz. Stwórzmy jedną teraz:', + 'no_categories_create_default' => 'Stwórz kategorię', + 'no_tags_title_default' => 'Stwórzmy tag!', + 'no_tags_intro_default' => 'Nie masz jeszcze tagów. Tagi służą do precyzyjnego dostrajania transakcji i oznaczania ich zgodnie konkretnymi słowami kluczowymi.', + 'no_tags_imperative_default' => 'Tagi są tworzone automatycznie podczas tworzenia transakcji, ale możesz również utworzyć je ręcznie. Stwórzmy jeden teraz:', + 'no_tags_create_default' => 'Utwórz tag', + 'no_transactions_title_withdrawal' => 'Stwórzmy wydatek!', + 'no_transactions_intro_withdrawal' => 'Jeszcze nie masz wydatków. Powinieneś utworzyć wydatki aby rozpocząć zarządzanie swoimi finansami.', + 'no_transactions_imperative_withdrawal' => 'Wydałeś trochę pieniędzy? Zatem powinieneś je zapisać:', + 'no_transactions_create_withdrawal' => 'Utwórz wydatek', + 'no_transactions_title_deposit' => 'Stwórzmy przychód!', + 'no_transactions_intro_deposit' => 'Jeszcze nie masz przychodów. Powinieneś utworzyć przychody aby rozpocząć zarządzanie swoimi finansami.', + 'no_transactions_imperative_deposit' => 'Otrzymałeś trochę pieniędzy? Zatem powinieneś je zapisać:', + 'no_transactions_create_deposit' => 'Stwórz depozyt', + 'no_transactions_title_transfers' => 'Stwórzmy transfer!', + 'no_transactions_intro_transfers' => 'Nie masz jeszcze żadnych transferów. Przenosząc pieniądze między kontami aktywów, rejestruje się je jako transfer.', + 'no_transactions_imperative_transfers' => 'Czy przenosiłeś trochę pieniędzy? Zatem powinieneś to zapisać:', + 'no_transactions_create_transfers' => 'Utwórz transfer', + 'no_piggies_title_default' => 'Stwórzmy skarbonkę!', + 'no_piggies_intro_default' => 'Nie posiadasz jeszcze żadnych skarbonek. Możesz stworzyć skarbonki aby dzielić swoje oszczędności i śledzić na co oszczędzasz.', + 'no_piggies_imperative_default' => 'Oszczędzasz pieniądze na coś? Utwórz skarbonkę i śledź:', + 'no_piggies_create_default' => 'Utwórz nową skarbonkę', + 'no_bills_title_default' => 'Stwórzmy rachunek!', + 'no_bills_intro_default' => 'Nie masz jeszcze żadnych rachunków. Można tworzyć rachunki, aby śledzić regularne wydatki, takie jak czynsz czy ubezpieczenie.', + 'no_bills_imperative_default' => 'Czy masz takie regularne rachunki? Utwórz rachunek i śledź swoje płatności:', + 'no_bills_create_default' => 'Utwórz rachunek', // recurring transactions - 'create_right_now' => 'Utwórz teraz', - 'no_new_transaction_in_recurrence' => 'Nie utworzono żadnej nowej transakcji. Być może została ona już uruchomiona na tę datę?', - 'recurrences' => 'Cykliczne transakcje', - 'repeat_until_in_past' => 'Ta cykliczna transakcja przestała powtarzać się w dniu :date.', - 'recurring_calendar_view' => 'Kalendarz', - 'no_recurring_title_default' => 'Utwórzmy cykliczną transakcję!', - 'no_recurring_intro_default' => 'Nie masz jeszcze żadnych cyklicznych transakcji. Możesz ich użyć, aby Firefly III automatycznie tworzył transakcje za Ciebie.', - 'no_recurring_imperative_default' => 'To dość zaawansowana funkcja, ale może być niezwykle przydatna. Zanim rozpoczniesz zapoznaj się z dokumentacją (ikona (?) w prawym górnym rogu).', - 'no_recurring_create_default' => 'Utwórz cykliczną transakcję', - 'make_new_recurring' => 'Utwórz cykliczną transakcję', - 'recurring_daily' => 'Codziennie', - 'recurring_weekly' => 'Co tydzień w :weekday', - 'recurring_weekly_skip' => 'Co każdy :skip tydzień w :weekday', - 'recurring_monthly' => 'Co miesiąc w :dayOfMonth dzień', - 'recurring_monthly_skip' => 'Co każdy :skip miesiąc :dayOfMonth dnia miesiąca', - 'recurring_ndom' => 'Co miesiąc w każdy :dayOfMonth. :weekday', - 'recurring_yearly' => 'Co rok w dniu :date', - 'overview_for_recurrence' => 'Przegląd cyklicznej transakcji ":title"', - 'warning_duplicates_repetitions' => 'W rzadkich przypadkach daty pojawiają się dwa razy na tej liście. Może się to zdarzyć, gdy zdarzy się wiele powtórzeń. Firefly III zawsze generuje jedną transakcję dziennie.', - 'created_transactions' => 'Powiązane transakcje', - 'expected_withdrawals' => 'Oczekiwane wypłaty', - 'expected_deposits' => 'Oczekiwane wpłaty', - 'expected_transfers' => 'Oczekiwane transfery', - 'created_withdrawals' => 'Utworzone wypłaty', - 'created_deposits' => 'Utworzone wpłaty', - 'created_transfers' => 'Utworzone transfery', - 'recurring_info' => 'Cykliczna transakcja :count / :total', - 'created_from_recurrence' => 'Utworzona przez cykliczną transakcję ":title" (#:id)', - 'recurring_never_cron' => 'Wygląda na to, że zadanie cron, które jest niezbędne do obsługi powtarzających się transakcji, nigdy nie zostało uruchomione. Jest to normalne po zainstalowaniu Firefly III, ale powinno to być jak najszybciej skonfigurowane. Sprawdź strony pomocy za pomocą ikony (?) w prawym górnym rogu strony.', - 'recurring_cron_long_ago' => 'Wygląda na to, że minęło ponad 36 godzin, od kiedy zadanie cron do obsługi cyklicznych transakcji zostało uruchomione po raz ostatni. Czy jesteś pewien, że zostało poprawnie skonfigurowane? Sprawdź strony pomocy za pomocą ikony (?) w prawym górnym rogu strony.', + 'create_right_now' => 'Utwórz teraz', + 'no_new_transaction_in_recurrence' => 'Nie utworzono żadnej nowej transakcji. Być może została ona już uruchomiona na tę datę?', + 'recurrences' => 'Cykliczne transakcje', + 'repeat_until_in_past' => 'Ta cykliczna transakcja przestała powtarzać się w dniu :date.', + 'recurring_calendar_view' => 'Kalendarz', + 'no_recurring_title_default' => 'Utwórzmy cykliczną transakcję!', + 'no_recurring_intro_default' => 'Nie masz jeszcze żadnych cyklicznych transakcji. Możesz ich użyć, aby Firefly III automatycznie tworzył transakcje za Ciebie.', + 'no_recurring_imperative_default' => 'To dość zaawansowana funkcja, ale może być niezwykle przydatna. Zanim rozpoczniesz zapoznaj się z dokumentacją (ikona (?) w prawym górnym rogu).', + 'no_recurring_create_default' => 'Utwórz cykliczną transakcję', + 'make_new_recurring' => 'Utwórz cykliczną transakcję', + 'recurring_daily' => 'Codziennie', + 'recurring_weekly' => 'Co tydzień w :weekday', + 'recurring_weekly_skip' => 'Co każdy :skip tydzień w :weekday', + 'recurring_monthly' => 'Co miesiąc w :dayOfMonth dzień', + 'recurring_monthly_skip' => 'Co każdy :skip miesiąc :dayOfMonth dnia miesiąca', + 'recurring_ndom' => 'Co miesiąc w każdy :dayOfMonth. :weekday', + 'recurring_yearly' => 'Co rok w dniu :date', + 'overview_for_recurrence' => 'Przegląd cyklicznej transakcji ":title"', + 'warning_duplicates_repetitions' => 'W rzadkich przypadkach daty pojawiają się dwa razy na tej liście. Może się to zdarzyć, gdy zdarzy się wiele powtórzeń. Firefly III zawsze generuje jedną transakcję dziennie.', + 'created_transactions' => 'Powiązane transakcje', + 'expected_withdrawals' => 'Oczekiwane wypłaty', + 'expected_deposits' => 'Oczekiwane wpłaty', + 'expected_transfers' => 'Oczekiwane transfery', + 'created_withdrawals' => 'Utworzone wypłaty', + 'created_deposits' => 'Utworzone wpłaty', + 'created_transfers' => 'Utworzone transfery', + 'recurring_info' => 'Cykliczna transakcja :count / :total', + 'created_from_recurrence' => 'Utworzona przez cykliczną transakcję ":title" (#:id)', + 'recurring_never_cron' => 'Wygląda na to, że zadanie cron, które jest niezbędne do obsługi powtarzających się transakcji, nigdy nie zostało uruchomione. Jest to normalne po zainstalowaniu Firefly III, ale powinno to być jak najszybciej skonfigurowane. Sprawdź strony pomocy za pomocą ikony (?) w prawym górnym rogu strony.', + 'recurring_cron_long_ago' => 'Wygląda na to, że minęło ponad 36 godzin, od kiedy zadanie cron do obsługi cyklicznych transakcji zostało uruchomione po raz ostatni. Czy jesteś pewien, że zostało poprawnie skonfigurowane? Sprawdź strony pomocy za pomocą ikony (?) w prawym górnym rogu strony.', - 'create_new_recurrence' => 'Utwórz nową cykliczną transakcję', - 'help_first_date' => 'Wskaż pierwsze oczekiwane wystąpienie. Musi być w przyszłości.', - 'help_first_date_no_past' => 'Wskaż pierwsze oczekiwane wystąpienie. Firefly III nie będzie tworzyć transakcji w przeszłości.', - 'no_currency' => '(brak waluty)', - 'mandatory_for_recurring' => 'Obowiązkowe informacje o powtarzalności', - 'mandatory_for_transaction' => 'Obowiązkowe informacje o transakcji', - 'optional_for_recurring' => 'Opcjonalne informacje o powtarzalności', - 'optional_for_transaction' => 'Opcjonalne informacje o transakcji', - 'change_date_other_options' => 'Zmień "datę początkową" aby zobaczyć więcej opcji.', - 'mandatory_fields_for_tranaction' => 'Te wartości znajdą się w tworzonych transakcjach', - 'click_for_calendar' => 'Kliknij tutaj, aby wyświetlić kalendarz pokazujący, kiedy transakcja będzie się powtarzać.', - 'repeat_forever' => 'Powtarzaj bez końca', - 'repeat_until_date' => 'Powtarzaj aż do dnia', - 'repeat_times' => 'Powtarzaj określoną liczbę razy', - 'recurring_skips_one' => 'Co drugi', - 'recurring_skips_more' => 'Pomiń :count wystąpień', - 'store_new_recurrence' => 'Zapisz cykliczną transakcję', - 'stored_new_recurrence' => 'Cykliczna transakcja ":title" zapisana pomyślnie.', - 'edit_recurrence' => 'Modyfikuj cykliczną transakcję ":title"', - 'recurring_repeats_until' => 'Powtarza się aż do :date', - 'recurring_repeats_forever' => 'Powtarza się bez końca', - 'recurring_repeats_x_times' => 'Powtarza się :count raz|Powtarza się :count razy', - 'update_recurrence' => 'Aktualizuj cykliczną transakcję', - 'updated_recurrence' => 'Zaktualizowano cykliczną transakcję ":title"', - 'recurrence_is_inactive' => 'Ta cykliczna transakcja jest nieaktywna i nie będzie generowała nowych transakcji.', - 'delete_recurring' => 'Usuń cykliczną transakcję ":title"', - 'new_recurring_transaction' => 'Nowa cykliczna transakcja', - 'help_weekend' => 'Co powinno zrobić Firefly III, jeśli cykliczna transakcja wypadnie w sobotę lub niedzielę?', - 'do_nothing' => 'Po prostu utwórz transakcję', - 'skip_transaction' => 'Pomiń wystąpienie', - 'jump_to_friday' => 'Utwórz transakcję w poprzedni piątek', - 'jump_to_monday' => 'Utwórz transakcję w następny poniedziałek', - 'will_jump_friday' => 'Zostanie utworzona w piątki zamiast w weekendy.', - 'will_jump_monday' => 'Zostanie utworzona w poniedziałki zamiast w weekendy.', - 'except_weekends' => 'Pomiń weekendy', - 'recurrence_deleted' => 'Cykliczna transakcja ":title" została usunięta', + 'create_new_recurrence' => 'Utwórz nową cykliczną transakcję', + 'help_first_date' => 'Wskaż pierwsze oczekiwane wystąpienie. Musi być w przyszłości.', + 'help_first_date_no_past' => 'Wskaż pierwsze oczekiwane wystąpienie. Firefly III nie będzie tworzyć transakcji w przeszłości.', + 'no_currency' => '(brak waluty)', + 'mandatory_for_recurring' => 'Obowiązkowe informacje o powtarzalności', + 'mandatory_for_transaction' => 'Obowiązkowe informacje o transakcji', + 'optional_for_recurring' => 'Opcjonalne informacje o powtarzalności', + 'optional_for_transaction' => 'Opcjonalne informacje o transakcji', + 'change_date_other_options' => 'Zmień "datę początkową" aby zobaczyć więcej opcji.', + 'mandatory_fields_for_tranaction' => 'Te wartości znajdą się w tworzonych transakcjach', + 'click_for_calendar' => 'Kliknij tutaj, aby wyświetlić kalendarz pokazujący, kiedy transakcja będzie się powtarzać.', + 'repeat_forever' => 'Powtarzaj bez końca', + 'repeat_until_date' => 'Powtarzaj aż do dnia', + 'repeat_times' => 'Powtarzaj określoną liczbę razy', + 'recurring_skips_one' => 'Co drugi', + 'recurring_skips_more' => 'Pomiń :count wystąpień', + 'store_new_recurrence' => 'Zapisz cykliczną transakcję', + 'stored_new_recurrence' => 'Cykliczna transakcja ":title" zapisana pomyślnie.', + 'edit_recurrence' => 'Modyfikuj cykliczną transakcję ":title"', + 'recurring_repeats_until' => 'Powtarza się aż do :date', + 'recurring_repeats_forever' => 'Powtarza się bez końca', + 'recurring_repeats_x_times' => 'Powtarza się :count raz|Powtarza się :count razy', + 'update_recurrence' => 'Aktualizuj cykliczną transakcję', + 'updated_recurrence' => 'Zaktualizowano cykliczną transakcję ":title"', + 'recurrence_is_inactive' => 'Ta cykliczna transakcja jest nieaktywna i nie będzie generowała nowych transakcji.', + 'delete_recurring' => 'Usuń cykliczną transakcję ":title"', + 'new_recurring_transaction' => 'Nowa cykliczna transakcja', + 'help_weekend' => 'Co powinno zrobić Firefly III, jeśli cykliczna transakcja wypadnie w sobotę lub niedzielę?', + 'do_nothing' => 'Po prostu utwórz transakcję', + 'skip_transaction' => 'Pomiń wystąpienie', + 'jump_to_friday' => 'Utwórz transakcję w poprzedni piątek', + 'jump_to_monday' => 'Utwórz transakcję w następny poniedziałek', + 'will_jump_friday' => 'Zostanie utworzona w piątki zamiast w weekendy.', + 'will_jump_monday' => 'Zostanie utworzona w poniedziałki zamiast w weekendy.', + 'except_weekends' => 'Pomiń weekendy', + 'recurrence_deleted' => 'Cykliczna transakcja ":title" została usunięta', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Saldo (:currency)', - 'box_spent_in_currency' => 'Wydano (:currency)', - 'box_earned_in_currency' => 'Zarobiono (:currency)', - 'box_budgeted_in_currency' => 'Zabudżetowano (:currency)', - 'box_bill_paid_in_currency' => 'Zapłacone rachunki (:currency)', - 'box_bill_unpaid_in_currency' => 'Niezapłacone rachunki (:currency)', - 'box_left_to_spend_in_currency' => 'Możliwe do wydania (:currency)', - 'box_net_worth_in_currency' => 'Wartość netto (:currency)', - 'box_spend_per_day' => 'Możliwe do wydania codziennie: :amount', + 'box_balance_in_currency' => 'Saldo (:currency)', + 'box_spent_in_currency' => 'Wydano (:currency)', + 'box_earned_in_currency' => 'Zarobiono (:currency)', + 'box_budgeted_in_currency' => 'Zabudżetowano (:currency)', + 'box_bill_paid_in_currency' => 'Zapłacone rachunki (:currency)', + 'box_bill_unpaid_in_currency' => 'Niezapłacone rachunki (:currency)', + 'box_left_to_spend_in_currency' => 'Możliwe do wydania (:currency)', + 'box_net_worth_in_currency' => 'Wartość netto (:currency)', + 'box_spend_per_day' => 'Możliwe do wydania codziennie: :amount', // debug page - 'debug_page' => 'Strona debugowania', - 'debug_submit_instructions' => 'Jeśli masz problemy możesz użyć informacji w tym polu jako informacji debugowania. Skopiuj i wklej do nowego lub istniejącego problemu z GitHub. Wygeneruje to piękną tabelę, która może być wykorzystana do szybkiego rozpoznania twojego problemu.', - 'debug_pretty_table' => 'Jeśli skopiujesz/wkleisz poniższe pole do problemu na GitHub, zostanie wygenerowana tabela. Proszę nie używaj cudzysłowów.', - 'debug_additional_data' => 'Możesz również udostępnić zawartość poniższego pola. Możesz również skopiować i wkleić to do nowego lub istniejącego problemu GitHub. Jednakże zawartość tego pola może zawierać informacje prywatne, takie jak nazwy konta, szczegóły transakcji lub adresy e-mail.', + 'debug_page' => 'Strona debugowania', + 'debug_submit_instructions' => 'Jeśli masz problemy możesz użyć informacji w tym polu jako informacji debugowania. Skopiuj i wklej do nowego lub istniejącego problemu z GitHub. Wygeneruje to piękną tabelę, która może być wykorzystana do szybkiego rozpoznania twojego problemu.', + 'debug_pretty_table' => 'Jeśli skopiujesz/wkleisz poniższe pole do problemu na GitHub, zostanie wygenerowana tabela. Proszę nie używaj cudzysłowów.', + 'debug_additional_data' => 'Możesz również udostępnić zawartość poniższego pola. Możesz również skopiować i wkleić to do nowego lub istniejącego problemu GitHub. Jednakże zawartość tego pola może zawierać informacje prywatne, takie jak nazwy konta, szczegóły transakcji lub adresy e-mail.', // object groups - 'object_groups_menu_bar' => 'Grupy', - 'object_groups_page_title' => 'Grupy', - 'object_groups_breadcrumb' => 'Grupy', - 'object_groups_index' => 'Przegląd', - 'object_groups' => 'Grupy', - 'object_groups_empty_explain' => 'Niektóre rzeczy w Firefly III można podzielić na grupy. Na przykład skarbonki zawierają pole "Grupa" w ekranach edycji i tworzenia. Gdy ustawisz to pole, możesz edytować nazwy i kolejność grup na tej stronie. Aby uzyskać więcej informacji, sprawdź strony pomocy w prawym górnym rogu, pod ikoną (?).', - 'object_group_title' => 'Tytuł', - 'edit_object_group' => 'Modyfikuj grupę ":title"', - 'delete_object_group' => 'Usuń grupę ":title"', - 'update_object_group' => 'Aktualizuj grupę', - 'updated_object_group' => 'Pomyślnie zaktualizowano grupę ":title"', - 'deleted_object_group' => 'Pomyślnie usunięto grupę ":title"', - 'object_group' => 'Grupa', + 'object_groups_menu_bar' => 'Grupy', + 'object_groups_page_title' => 'Grupy', + 'object_groups_breadcrumb' => 'Grupy', + 'object_groups_index' => 'Przegląd', + 'object_groups' => 'Grupy', + 'object_groups_empty_explain' => 'Niektóre rzeczy w Firefly III można podzielić na grupy. Na przykład skarbonki zawierają pole "Grupa" w ekranach edycji i tworzenia. Gdy ustawisz to pole, możesz edytować nazwy i kolejność grup na tej stronie. Aby uzyskać więcej informacji, sprawdź strony pomocy w prawym górnym rogu, pod ikoną (?).', + 'object_group_title' => 'Tytuł', + 'edit_object_group' => 'Modyfikuj grupę ":title"', + 'delete_object_group' => 'Usuń grupę ":title"', + 'update_object_group' => 'Aktualizuj grupę', + 'updated_object_group' => 'Pomyślnie zaktualizowano grupę ":title"', + 'deleted_object_group' => 'Pomyślnie usunięto grupę ":title"', + 'object_group' => 'Grupa', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Wpisy dziennika audytu', - 'ale_action_log_add' => 'Dodano :amount do skarbonki ":name"', - 'ale_action_log_remove' => 'Usunięto :amount ze skarbonki ":name"', - 'ale_action_clear_budget' => 'Usunięto z budżetu', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Zaktualizowano datę transakcji', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Usunięto z kategorii', - 'ale_action_clear_notes' => 'Usunięto notatki', - 'ale_action_clear_tag' => 'Wyczyszczono tag', - 'ale_action_clear_all_tags' => 'Wyczyszczono wszystkie tagi', - 'ale_action_set_bill' => 'Powiązano z rachunkiem', - 'ale_action_switch_accounts' => 'Zmieniono konto źródłowe i docelowe', - 'ale_action_set_budget' => 'Ustawiono budżet', - 'ale_action_set_category' => 'Ustawiono kategorię', - 'ale_action_set_source' => 'Ustawiono konto źródłowe', - 'ale_action_set_destination' => 'Ustawiono konto docelowe', - 'ale_action_update_transaction_type' => 'Zmieniono typ transakcji', - 'ale_action_update_notes' => 'Zmieniono notatki', - 'ale_action_update_description' => 'Zmieniono opis', - 'ale_action_add_to_piggy' => 'Skarbonka', - 'ale_action_remove_from_piggy' => 'Skarbonka', - 'ale_action_add_tag' => 'Dodano tag', + 'audit_log_entries' => 'Wpisy dziennika audytu', + 'ale_action_log_add' => 'Dodano :amount do skarbonki ":name"', + 'ale_action_log_remove' => 'Usunięto :amount ze skarbonki ":name"', + 'ale_action_clear_budget' => 'Usunięto z budżetu', + 'ale_action_update_group_title' => 'Zaktualizowano tytuł grupy transakcji', + 'ale_action_update_date' => 'Zaktualizowano datę transakcji', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Usunięto z kategorii', + 'ale_action_clear_notes' => 'Usunięto notatki', + 'ale_action_clear_tag' => 'Wyczyszczono tag', + 'ale_action_clear_all_tags' => 'Wyczyszczono wszystkie tagi', + 'ale_action_set_bill' => 'Powiązano z rachunkiem', + 'ale_action_switch_accounts' => 'Zmieniono konto źródłowe i docelowe', + 'ale_action_set_budget' => 'Ustawiono budżet', + 'ale_action_set_category' => 'Ustawiono kategorię', + 'ale_action_set_source' => 'Ustawiono konto źródłowe', + 'ale_action_set_destination' => 'Ustawiono konto docelowe', + 'ale_action_update_transaction_type' => 'Zmieniono typ transakcji', + 'ale_action_update_notes' => 'Zmieniono notatki', + 'ale_action_update_description' => 'Zmieniono opis', + 'ale_action_add_to_piggy' => 'Skarbonka', + 'ale_action_remove_from_piggy' => 'Skarbonka', + 'ale_action_add_tag' => 'Dodano tag', // dashboard - 'enable_auto_convert' => 'Włącz przeliczenie walut', - 'disable_auto_convert' => 'Wyłącz przeliczanie walut', - + 'enable_auto_convert' => 'Włącz przeliczenie walut', + 'disable_auto_convert' => 'Wyłącz przeliczanie walut', ]; /* diff --git a/resources/lang/pl_PL/form.php b/resources/lang/pl_PL/form.php index ecc382428c..20f6b40c97 100644 --- a/resources/lang/pl_PL/form.php +++ b/resources/lang/pl_PL/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Nazwa banku', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Saldo konta oszczędnościowego', - 'credit_card_limit' => 'Limit karty kredytowej', - 'automatch' => 'Dopasuj automatycznie', - 'skip' => 'Pomiń', - 'enabled' => 'Aktywna', - 'name' => 'Nazwa', - 'active' => 'Aktywny', - 'amount_min' => 'Minimalna kwota', - 'amount_max' => 'Maksymalna kwota', - 'match' => 'Dopasowanie', - 'strict' => 'Tryb ścisły', - 'repeat_freq' => 'Powtarza się', - 'object_group' => 'Grupa', - 'location' => 'Lokalizacja', - 'update_channel' => 'Kanał aktualizacji', - 'currency_id' => 'Waluta', - 'transaction_currency_id' => 'Waluta', - 'auto_budget_currency_id' => 'Waluta', - 'external_ip' => 'Zewnętrzny adres IP Twojego serwera', - 'attachments' => 'Załączniki', - 'BIC' => 'BIC', - 'verify_password' => 'Sprawdź bezpieczeństwo hasła', - 'source_account' => 'Konto źródłowe', - 'destination_account' => 'Konto docelowe', - 'asset_destination_account' => 'Konto docelowe', - 'include_net_worth' => 'Uwzględnij w wartości netto', - 'asset_source_account' => 'Konto źródłowe', - 'journal_description' => 'Opis', - 'note' => 'Notatki', - 'currency' => 'Waluta', - 'account_id' => 'Konto aktywów', - 'budget_id' => 'Budżet', - 'bill_id' => 'Rachunek', - 'opening_balance' => 'Saldo początkowe', - 'tagMode' => 'Tryb tagów', - 'virtual_balance' => 'Wirtualne saldo', + 'bank_name' => 'Nazwa banku', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Saldo konta oszczędnościowego', + 'credit_card_limit' => 'Limit karty kredytowej', + 'automatch' => 'Dopasuj automatycznie', + 'skip' => 'Pomiń', + 'enabled' => 'Aktywna', + 'name' => 'Nazwa', + 'active' => 'Aktywny', + 'amount_min' => 'Minimalna kwota', + 'amount_max' => 'Maksymalna kwota', + 'match' => 'Dopasowanie', + 'strict' => 'Tryb ścisły', + 'repeat_freq' => 'Powtarza się', + 'object_group' => 'Grupa', + 'location' => 'Lokalizacja', + 'update_channel' => 'Kanał aktualizacji', + 'currency_id' => 'Waluta', + 'transaction_currency_id' => 'Waluta', + 'auto_budget_currency_id' => 'Waluta', + 'external_ip' => 'Zewnętrzny adres IP Twojego serwera', + 'attachments' => 'Załączniki', + 'BIC' => 'BIC', + 'verify_password' => 'Sprawdź bezpieczeństwo hasła', + 'source_account' => 'Konto źródłowe', + 'destination_account' => 'Konto docelowe', + 'asset_destination_account' => 'Konto docelowe', + 'include_net_worth' => 'Uwzględnij w wartości netto', + 'asset_source_account' => 'Konto źródłowe', + 'journal_description' => 'Opis', + 'note' => 'Notatki', + 'currency' => 'Waluta', + 'account_id' => 'Konto aktywów', + 'budget_id' => 'Budżet', + 'bill_id' => 'Rachunek', + 'opening_balance' => 'Saldo początkowe', + 'tagMode' => 'Tryb tagów', + 'virtual_balance' => 'Wirtualne saldo', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Kwota docelowa', 'account_role' => 'Rola konta', 'opening_balance_date' => 'Data salda otwarcia', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Czy na pewno chcesz usunąć transakcję opisaną ":description"?', 'mass_journal_are_you_sure' => 'Czy na pewno chcesz usunąć te transakcje?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Czy na pewno chcesz usunąć tag ":tag"?', 'journal_link_areYouSure' => 'Czy na pewno chcesz usunąć powiązanie między :source a :destination?', 'linkType_areYouSure' => 'Czy na pewno chcesz usunąć typ łącza ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Piosenka', - // admin 'domain' => 'Domena', 'single_user_mode' => 'Wyłącz rejestrację użytkowników', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Konto FinTS', 'local_account' => 'Konto Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Data od', - 'to_date' => 'Data do', - 'due_date' => 'Termin realizacji', - 'payment_date' => 'Data płatności', - 'invoice_date' => 'Data faktury', - 'internal_reference' => 'Wewnętrzny numer', - 'inward' => 'Opis wewnętrzny', - 'outward' => 'Opis zewnętrzny', - 'rule_group_id' => 'Grupa reguł', - 'transaction_description' => 'Opis transakcji', - 'first_date' => 'Data początkowa', - 'transaction_type' => 'Typ transakcji', - 'repeat_until' => 'Powtarzaj aż', - 'recurring_description' => 'Opis cyklicznej transakcji', - 'repetition_type' => 'Tryb powtarzania', - 'foreign_currency_id' => 'Zagraniczna waluta', - 'repetition_end' => 'Koniec powtarzania', - 'repetitions' => 'Powtórzenia', - 'calendar' => 'Kalendarz', - 'weekend' => 'Weekend', - 'client_secret' => 'Sekret klienta', - 'withdrawal_destination_id' => 'Konto docelowe', - 'deposit_source_id' => 'Konto źródłowe', - 'expected_on' => 'Oczekiwany', - 'paid' => 'Zapłacone', - 'auto_budget_type' => 'Auto-budżet', - 'auto_budget_amount' => 'Kwota automatycznego budżetu', - 'auto_budget_period' => 'Okres automatycznego budżetu', - 'collected' => 'Zebrane', - 'submitted' => 'Przesłane', - 'key' => 'Klucz', - 'value' => 'Zawartość rekordu', - 'webhook_delivery' => 'Doręczenie', - 'webhook_response' => 'Odpowiedź', - 'webhook_trigger' => 'Wyzwalacz', + 'from_date' => 'Data od', + 'to_date' => 'Data do', + 'due_date' => 'Termin realizacji', + 'payment_date' => 'Data płatności', + 'invoice_date' => 'Data faktury', + 'internal_reference' => 'Wewnętrzny numer', + 'inward' => 'Opis wewnętrzny', + 'outward' => 'Opis zewnętrzny', + 'rule_group_id' => 'Grupa reguł', + 'transaction_description' => 'Opis transakcji', + 'first_date' => 'Data początkowa', + 'transaction_type' => 'Typ transakcji', + 'repeat_until' => 'Powtarzaj aż', + 'recurring_description' => 'Opis cyklicznej transakcji', + 'repetition_type' => 'Tryb powtarzania', + 'foreign_currency_id' => 'Zagraniczna waluta', + 'repetition_end' => 'Koniec powtarzania', + 'repetitions' => 'Powtórzenia', + 'calendar' => 'Kalendarz', + 'weekend' => 'Weekend', + 'client_secret' => 'Sekret klienta', + 'withdrawal_destination_id' => 'Konto docelowe', + 'deposit_source_id' => 'Konto źródłowe', + 'expected_on' => 'Oczekiwany', + 'paid' => 'Zapłacone', + 'auto_budget_type' => 'Auto-budżet', + 'auto_budget_amount' => 'Kwota automatycznego budżetu', + 'auto_budget_period' => 'Okres automatycznego budżetu', + 'collected' => 'Zebrane', + 'submitted' => 'Przesłane', + 'key' => 'Klucz', + 'value' => 'Zawartość rekordu', + 'webhook_delivery' => 'Doręczenie', + 'webhook_response' => 'Odpowiedź', + 'webhook_trigger' => 'Wyzwalacz', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/pl_PL/intro.php b/resources/lang/pl_PL/intro.php index fef42efaaf..721ded26d7 100644 --- a/resources/lang/pl_PL/intro.php +++ b/resources/lang/pl_PL/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Witamy na stronie domowej Firefly III. Proszę poświęć trochę czasu, aby przejść przez to wprowadzenie, aby poznać sposób działania Firefly III.', - 'index_accounts-chart' => 'Ten wykres przedstawia bieżące saldo kont aktywów. Możesz wybrać konta widoczne tutaj w Twoich preferencjach.', - 'index_box_out_holder' => 'To małe pole i pola obok niego umożliwiają szybki przegląd Twojej sytuacji finansowej.', - 'index_help' => 'Jeśli potrzebujesz pomocy na stronie lub formularzu, naciśnij ten przycisk.', - 'index_outro' => 'Większość stron z Firefly III zacznie się od małego wprowadzenia jak to. Skontaktuj się ze mną, jeśli masz pytania lub komentarze. Miłego korzystania!', - 'index_sidebar-toggle' => 'Aby utworzyć nowe transakcje, konta lub inne rzeczy, użyj menu pod tą ikoną.', - 'index_cash_account' => 'To są dotychczas utworzone konta. Możesz użyć konta gotówkowego do śledzenia wydatków gotówkowych, ale oczywiście nie jest to obowiązkowe.', + 'index_intro' => 'Witamy na stronie domowej Firefly III. Proszę poświęć trochę czasu, aby przejść przez to wprowadzenie, aby poznać sposób działania Firefly III.', + 'index_accounts-chart' => 'Ten wykres przedstawia bieżące saldo kont aktywów. Możesz wybrać konta widoczne tutaj w Twoich preferencjach.', + 'index_box_out_holder' => 'To małe pole i pola obok niego umożliwiają szybki przegląd Twojej sytuacji finansowej.', + 'index_help' => 'Jeśli potrzebujesz pomocy na stronie lub formularzu, naciśnij ten przycisk.', + 'index_outro' => 'Większość stron z Firefly III zacznie się od małego wprowadzenia jak to. Skontaktuj się ze mną, jeśli masz pytania lub komentarze. Miłego korzystania!', + 'index_sidebar-toggle' => 'Aby utworzyć nowe transakcje, konta lub inne rzeczy, użyj menu pod tą ikoną.', + 'index_cash_account' => 'To są dotychczas utworzone konta. Możesz użyć konta gotówkowego do śledzenia wydatków gotówkowych, ale oczywiście nie jest to obowiązkowe.', // transactions - 'transactions_create_basic_info' => 'Wprowadź podstawowe informacje o swojej transakcji. Konto źródłowe, konto docelowe, datę i opis.', - 'transactions_create_amount_info' => 'Wprowadź wartość transakcji. Jeśli to konieczne, pola będą automatycznie aktualizować informacje o obcej kwocie.', - 'transactions_create_optional_info' => 'Wszystkie te pola są opcjonalne. Dodanie meta-danych sprawi, że Twoje transakcje będą lepiej zorganizowane.', - 'transactions_create_split' => 'Jeżeli chcesz podzielić transakcję, dodaj więcej podziałów używając tego przycisku', + 'transactions_create_basic_info' => 'Wprowadź podstawowe informacje o swojej transakcji. Konto źródłowe, konto docelowe, datę i opis.', + 'transactions_create_amount_info' => 'Wprowadź wartość transakcji. Jeśli to konieczne, pola będą automatycznie aktualizować informacje o obcej kwocie.', + 'transactions_create_optional_info' => 'Wszystkie te pola są opcjonalne. Dodanie meta-danych sprawi, że Twoje transakcje będą lepiej zorganizowane.', + 'transactions_create_split' => 'Jeżeli chcesz podzielić transakcję, dodaj więcej podziałów używając tego przycisku', // create account: - 'accounts_create_iban' => 'Nadaj kontom ważny numer IBAN. Może to ułatwić import danych w przyszłości.', - 'accounts_create_asset_opening_balance' => 'Konta aktywów mogą mieć "bilans otwarcia", wskazujący początek historii tego konta w Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III obsługuje wiele walut. Konta aktywów mają jedną główną walutę, który należy ustawić tutaj.', - 'accounts_create_asset_virtual' => 'Czasami warto dodać do konta wirtualne saldo: dodatkowa kwota zawsze dodawana lub odejmowana od rzeczywistego salda.', + 'accounts_create_iban' => 'Nadaj kontom ważny numer IBAN. Może to ułatwić import danych w przyszłości.', + 'accounts_create_asset_opening_balance' => 'Konta aktywów mogą mieć "bilans otwarcia", wskazujący początek historii tego konta w Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III obsługuje wiele walut. Konta aktywów mają jedną główną walutę, który należy ustawić tutaj.', + 'accounts_create_asset_virtual' => 'Czasami warto dodać do konta wirtualne saldo: dodatkowa kwota zawsze dodawana lub odejmowana od rzeczywistego salda.', // budgets index - 'budgets_index_intro' => 'Budżety są wykorzystywane do zarządzania finansami i stanowią jedną z podstawowych funkcji Firefly III.', - 'budgets_index_set_budget' => 'Ustaw całkowity budżet na każdy okres, aby Firefly III mógł Ci powiedzieć, czy wydałeś wszystkie dostępne pieniądze.', - 'budgets_index_see_expenses_bar' => 'Wydawanie pieniędzy powoli wypełnia ten pasek.', - 'budgets_index_navigate_periods' => 'Przejrzyj okresy, aby łatwiej ustawić przyszłe budżety.', - 'budgets_index_new_budget' => 'Utwórz nowe budżety zgodnie z Twoimi potrzebami.', - 'budgets_index_list_of_budgets' => 'Skorzystaj z tej tabeli, aby ustawić kwoty dla każdego budżetu i sprawdź jak ci idzie.', - 'budgets_index_outro' => 'Aby dowiedzieć się więcej o budżetowaniu, użyj ikonki pomocy w prawym górnym rogu.', + 'budgets_index_intro' => 'Budżety są wykorzystywane do zarządzania finansami i stanowią jedną z podstawowych funkcji Firefly III.', + 'budgets_index_see_expenses_bar' => 'Wydawanie pieniędzy powoli wypełnia ten pasek.', + 'budgets_index_navigate_periods' => 'Przejrzyj okresy, aby łatwiej ustawić przyszłe budżety.', + 'budgets_index_new_budget' => 'Utwórz nowe budżety zgodnie z Twoimi potrzebami.', + 'budgets_index_list_of_budgets' => 'Skorzystaj z tej tabeli, aby ustawić kwoty dla każdego budżetu i sprawdź jak ci idzie.', + 'budgets_index_outro' => 'Aby dowiedzieć się więcej o budżetowaniu, użyj ikonki pomocy w prawym górnym rogu.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Skorzystaj z tych raportów, aby uzyskać szczegółowe informacje o swoich finansach.', - 'reports_index_inputReportType' => 'Wybierz typ raportu. Sprawdź stronę pomocy, aby zobaczyć, co pokazuje każdy raport.', - 'reports_index_inputAccountsSelect' => 'Możesz wykluczyć lub uwzględnić konta zasobów według własnego uznania.', - 'reports_index_inputDateRange' => 'Wybrany zakres dat zależy wyłącznie od ciebie: od jednego dnia do 10 lat.', - 'reports_index_extra-options-box' => 'W zależności od wybranego raportu możesz wybrać dodatkowe filtry i opcje tutaj. Obserwuj to pole, gdy zmieniasz typy raportów.', + 'reports_index_intro' => 'Skorzystaj z tych raportów, aby uzyskać szczegółowe informacje o swoich finansach.', + 'reports_index_inputReportType' => 'Wybierz typ raportu. Sprawdź stronę pomocy, aby zobaczyć, co pokazuje każdy raport.', + 'reports_index_inputAccountsSelect' => 'Możesz wykluczyć lub uwzględnić konta zasobów według własnego uznania.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'W zależności od wybranego raportu możesz wybrać dodatkowe filtry i opcje tutaj. Obserwuj to pole, gdy zmieniasz typy raportów.', // reports (reports) - 'reports_report_default_intro' => 'Raport ten zapewni szybki i wszechstronny przegląd twoich finansów. Jeśli chcesz zobaczyć cokolwiek innego, nie wahaj się ze mną skontaktować!', - 'reports_report_audit_intro' => 'Ten raport zawiera szczegółowe informacje na temat kont aktywów.', - 'reports_report_audit_optionsBox' => 'Użyj tych pól wyboru aby pokazać lub ukryć kolumny, które Cię interesują.', + 'reports_report_default_intro' => 'Raport ten zapewni szybki i wszechstronny przegląd twoich finansów. Jeśli chcesz zobaczyć cokolwiek innego, nie wahaj się ze mną skontaktować!', + 'reports_report_audit_intro' => 'Ten raport zawiera szczegółowe informacje na temat kont aktywów.', + 'reports_report_audit_optionsBox' => 'Użyj tych pól wyboru aby pokazać lub ukryć kolumny, które Cię interesują.', - 'reports_report_category_intro' => 'Ten raport daje wgląd w jedną lub wiele kategorii.', - 'reports_report_category_pieCharts' => 'Te wykresy dają wgląd w wydatki i dochody według kategorii lub konta.', - 'reports_report_category_incomeAndExpensesChart' => 'Ten wykres pokazuje twoje wydatki i dochody według kategorii.', + 'reports_report_category_intro' => 'Ten raport daje wgląd w jedną lub wiele kategorii.', + 'reports_report_category_pieCharts' => 'Te wykresy dają wgląd w wydatki i dochody według kategorii lub konta.', + 'reports_report_category_incomeAndExpensesChart' => 'Ten wykres pokazuje twoje wydatki i dochody według kategorii.', - 'reports_report_tag_intro' => 'Ten raport daje wgląd w jeden lub wiele tagów.', - 'reports_report_tag_pieCharts' => 'Te wykresy dają wgląd w wydatki i dochody według tagu, konta, kategorii lub budżetu.', - 'reports_report_tag_incomeAndExpensesChart' => 'Ten wykres pokazuje Twoje wydatki i dochody według tagu.', + 'reports_report_tag_intro' => 'Ten raport daje wgląd w jeden lub wiele tagów.', + 'reports_report_tag_pieCharts' => 'Te wykresy dają wgląd w wydatki i dochody według tagu, konta, kategorii lub budżetu.', + 'reports_report_tag_incomeAndExpensesChart' => 'Ten wykres pokazuje Twoje wydatki i dochody według tagu.', 'reports_report_budget_intro' => 'Ten raport daje wgląd w jeden lub wiele budżetów.', 'reports_report_budget_pieCharts' => 'Te wykresy dają wgląd w wydatki według budżetu lub konta.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Obok tego paska postępu znajdują się dwa przyciski (+ oraz -) do dodawania lub usuwania pieniędzy z każdej skarbonki.', 'piggy-banks_index_accountStatus' => 'Dla każdego konta aktywów z co najmniej jedną skarbonką status jest pokazany w tej tabeli.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Jaki jest twój cel? Nowa kanapa, aparat fotograficzny, pieniądze na nagłe wypadki?', 'piggy-banks_create_date' => 'Możesz ustawić docelową datę lub termin dla swojej skarbonki.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Korzystaj z rachunków, aby śledzić kwotę pieniędzy, którą jesteś winny w każdym okresie. Pomyśl o takich wydatkach jak czynsz, ubezpieczenie czy spłata kredytu hipotecznego.', 'bills_create_name' => 'Użyj opisowej nazwy, takiej jak "Czynsz" lub "Ubezpieczenie zdrowotne".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Wybierz minimalną i maksymalną kwotę dla tego rachunku.', 'bills_create_repeat_freq_holder' => 'Większość rachunków powtarza się co miesiąc, ale możesz ustawić inną częstotliwość tutaj.', 'bills_create_skip_holder' => 'Jeśli rachunek powtarza się co 2 tygodnie, pole "Pomiń" powinno być ustawione na "1", aby pominąć co drugi tydzień.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Użyj tego przycisku, aby zobaczyć, które transakcje pasują do Twojej reguły.', 'rules_create_actions' => 'Ustaw tak wiele akcji, jak chcesz.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Więcej opcji dostępne są za tymi kartami.', diff --git a/resources/lang/pl_PL/list.php b/resources/lang/pl_PL/list.php index b950b36063..acd4c18378 100644 --- a/resources/lang/pl_PL/list.php +++ b/resources/lang/pl_PL/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Przyciski', - 'icon' => 'Ikona', - 'id' => 'ID', - 'create_date' => 'Utworzono', - 'update_date' => 'Zaktualizowano', - 'updated_at' => 'Zaktualizowano', - 'balance_before' => 'Saldo przed', - 'balance_after' => 'Saldo po', - 'name' => 'Nazwa', - 'role' => 'Rola', - 'currentBalance' => 'Bieżące saldo', - 'linked_to_rules' => 'Powiązane reguły', - 'active' => 'Jest aktywny?', - 'percentage' => '%', - 'recurring_transaction' => 'Cykliczna transakcja', - 'next_due' => 'Następny termin', - 'transaction_type' => 'Typ', - 'lastActivity' => 'Ostatnia aktywność', - 'balanceDiff' => 'Różnica sald', - 'other_meta_data' => 'Inne dane meta', - 'invited_at' => 'Zaproszono o', - 'expires' => 'Zaproszenie wygasa', - 'invited_by' => 'Zaproszono przez', - 'invite_link' => 'Link zaproszenia', - 'account_type' => 'Typ konta', - 'created_at' => 'Utworzono', - 'account' => 'Konto', - 'external_url' => 'Zewnętrzny adres URL', - 'matchingAmount' => 'Kwota', - 'destination' => 'Cel', - 'source' => 'Źródło', - 'next_expected_match' => 'Następne oczekiwane dopasowanie', - 'automatch' => 'Auto dopasowanie?', + 'buttons' => 'Przyciski', + 'icon' => 'Ikona', + 'id' => 'ID', + 'create_date' => 'Utworzono', + 'update_date' => 'Zaktualizowano', + 'updated_at' => 'Zaktualizowano', + 'balance_before' => 'Saldo przed', + 'balance_after' => 'Saldo po', + 'name' => 'Nazwa', + 'role' => 'Rola', + 'currentBalance' => 'Bieżące saldo', + 'linked_to_rules' => 'Powiązane reguły', + 'active' => 'Jest aktywny?', + 'percentage' => '%', + 'recurring_transaction' => 'Cykliczna transakcja', + 'next_due' => 'Następny termin', + 'transaction_type' => 'Typ', + 'lastActivity' => 'Ostatnia aktywność', + 'balanceDiff' => 'Różnica sald', + 'other_meta_data' => 'Inne dane meta', + 'invited_at' => 'Zaproszono o', + 'expires' => 'Zaproszenie wygasa', + 'invited_by' => 'Zaproszono przez', + 'invite_link' => 'Link zaproszenia', + 'account_type' => 'Typ konta', + 'created_at' => 'Utworzono', + 'account' => 'Konto', + 'external_url' => 'Zewnętrzny adres URL', + 'matchingAmount' => 'Kwota', + 'destination' => 'Cel', + 'source' => 'Źródło', + 'next_expected_match' => 'Następne oczekiwane dopasowanie', + 'automatch' => 'Auto dopasowanie?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Powtarza się', 'description' => 'Opis', 'amount' => 'Kwota', @@ -111,7 +109,7 @@ return [ 'registered_at' => 'Zarejestrowano', 'is_blocked' => 'Jest zablokowany', 'is_admin' => 'Jest administratorem', - 'has_two_factor' => 'Ma dwustopniową autoryzację', + 'has_two_factor' => 'Ma dwuetapową autoryzację', 'blocked_code' => 'Kod blokady', 'source_account' => 'Konto źródłowe', 'destination_account' => 'Konto docelowe', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Konto bunq', 'file_name' => 'Nazwa pliku', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Rozmiar pliku', - 'file_type' => 'Typ pliku', - 'attached_to' => 'Dołączony do', - 'file_exists' => 'Plik istnieje', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Ostatnie logowanie', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'ID płatności bunq', - 'repetitions' => 'Powtórzenia', - 'title' => 'Tytuł', - 'transaction_s' => 'Transakcja(e)', - 'field' => 'Pole', - 'value' => 'Wartość', - 'interest' => 'Odsetki', - 'interest_period' => 'Okres odsetkowy', - 'liability_type' => 'Rodzaj zobowiązania', - 'liability_direction' => 'Zobowiązania przychodzące/wychodzące', - 'end_date' => 'Data końcowa', - 'payment_info' => 'Informacje o płatności', - 'expected_info' => 'Następna oczekiwana transakcja', - 'start_date' => 'Data rozpoczęcia', - 'trigger' => 'Wyzwalacz', - 'response' => 'Odpowiedź', - 'delivery' => 'Doręczenie', - 'url' => 'URL', - 'secret' => 'Sekret', - + 'file_size' => 'Rozmiar pliku', + 'file_type' => 'Typ pliku', + 'attached_to' => 'Dołączony do', + 'file_exists' => 'Plik istnieje', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Ostatnie logowanie', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'ID płatności bunq', + 'repetitions' => 'Powtórzenia', + 'title' => 'Tytuł', + 'transaction_s' => 'Transakcja(e)', + 'field' => 'Pole', + 'value' => 'Wartość', + 'interest' => 'Odsetki', + 'interest_period' => 'Okres odsetkowy', + 'liability_type' => 'Rodzaj zobowiązania', + 'liability_direction' => 'Zobowiązania przychodzące/wychodzące', + 'end_date' => 'Data końcowa', + 'payment_info' => 'Informacje o płatności', + 'expected_info' => 'Następna oczekiwana transakcja', + 'start_date' => 'Data rozpoczęcia', + 'trigger' => 'Wyzwalacz', + 'response' => 'Odpowiedź', + 'delivery' => 'Doręczenie', + 'url' => 'URL', + 'secret' => 'Sekret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/pl_PL/pagination.php b/resources/lang/pl_PL/pagination.php index 9823b34ef3..0466fe46de 100644 --- a/resources/lang/pl_PL/pagination.php +++ b/resources/lang/pl_PL/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/pl_PL/passwords.php b/resources/lang/pl_PL/passwords.php index edf452eae1..5ee6685358 100644 --- a/resources/lang/pl_PL/passwords.php +++ b/resources/lang/pl_PL/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/pl_PL/rules.php b/resources/lang/pl_PL/rules.php index a0054ec4e9..08e2f00d96 100644 --- a/resources/lang/pl_PL/rules.php +++ b/resources/lang/pl_PL/rules.php @@ -1,6 +1,5 @@ 'Action ":action", present in rule ":rule", could not be applied to transaction #:group: :error', - 'find_or_create_tag_failed' => 'Could not find or create tag ":tag"', - 'tag_already_added' => 'Tag ":tag" is already linked to this transaction', - 'inspect_transaction' => 'Inspect transaction ":title" @ Firefly III', - 'inspect_rule' => 'Inspect rule ":title" @ Firefly III', - 'journal_other_user' => 'This transaction doesn\'t belong to the user', - 'no_such_journal' => 'This transaction doesn\'t exist', - 'journal_already_no_budget' => 'This transaction has no budget, so it cannot be removed', - 'journal_already_no_category' => 'This transaction had no category, so it cannot be removed', - 'journal_already_no_notes' => 'This transaction had no notes, so they cannot be removed', - 'journal_not_found' => 'Firefly III can\'t find the requested transaction', - 'split_group' => 'Firefly III cannot execute this action on a transaction with multiple splits', - 'is_already_withdrawal' => 'This transaction is already a withdrawal', - 'is_already_deposit' => 'This transaction is already a deposit', - 'is_already_transfer' => 'This transaction is already a transfer', - 'is_not_transfer' => 'This transaction is not a transfer', - 'complex_error' => 'Something complicated went wrong. Sorry about that. Please inspect the logs of Firefly III', - 'no_valid_opposing' => 'Conversion failed because there is no valid account named ":account"', - 'new_notes_empty' => 'The notes to be set are empty', - 'unsupported_transaction_type_withdrawal' => 'Firefly III cannot convert a ":type" to a withdrawal', - 'unsupported_transaction_type_deposit' => 'Firefly III cannot convert a ":type" to a deposit', - 'unsupported_transaction_type_transfer' => 'Firefly III cannot convert a ":type" to a transfer', - 'already_has_source_asset' => 'This transaction already has ":name" as the source asset account', - 'already_has_destination_asset' => 'This transaction already has ":name" as the destination asset account', - 'already_has_destination' => 'This transaction already has ":name" as the destination account', - 'already_has_source' => 'This transaction already has ":name" as the source account', - 'already_linked_to_subscription' => 'The transaction is already linked to subscription ":name"', - 'already_linked_to_category' => 'The transaction is already linked to category ":name"', - 'already_linked_to_budget' => 'The transaction is already linked to budget ":name"', - 'cannot_find_subscription' => 'Firefly III can\'t find subscription ":name"', - 'no_notes_to_move' => 'The transaction has no notes to move to the description field', - 'no_tags_to_remove' => 'The transaction has no tags to remove', - 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', - 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', - 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', - 'cannot_find_source_transaction' => 'Firefly III can\'t find the source transaction', - 'cannot_find_destination_transaction' => 'Firefly III can\'t find the destination transaction', - 'cannot_find_source_transaction_account' => 'Firefly III can\'t find the source transaction account', - 'cannot_find_destination_transaction_account' => 'Firefly III can\'t find the destination transaction account', - 'cannot_find_piggy' => 'Firefly III can\'t find a piggy bank named ":name"', - 'no_link_piggy' => 'This transaction\'s accounts are not linked to the piggy bank, so no action will be taken', + 'main_message' => 'Akcja ":action", obecna w regule ":rule", nie mogła zostać zastosowana do transakcji #:group: :error', + 'find_or_create_tag_failed' => 'Nie można znaleźć lub utworzyć tagu ":tag"', + 'tag_already_added' => 'Tag ":tag" jest już powiązany z tą transakcją', + 'inspect_transaction' => 'Sprawdź transakcję ":title" @ Firefly III', + 'inspect_rule' => 'Sprawdź regułę ":title" @ Firefly III', + 'journal_other_user' => 'Ta transakcja nie należy do użytkownika', + 'no_such_journal' => 'Ta transakcja nie istnieje', + 'journal_already_no_budget' => 'Ta transakcja nie ma budżetu, więc nie może zostać usunięta', + 'journal_already_no_category' => 'Ta transakcja nie miała kategorii, więc kategoria nie może zostać usunięta', + 'journal_already_no_notes' => 'Ta transakcja nie miała notatek, więc te nie mogą zostać usunięte', + 'journal_not_found' => 'Firefly III nie może znaleźć żądanej transakcji', + 'split_group' => 'Firefly III nie może wykonać tej akcji na transakcji z wieloma podziałami', + 'is_already_withdrawal' => 'Ta transakcja jest już wypłatą', + 'is_already_deposit' => 'Ta transakcja jest już wpłatą', + 'is_already_transfer' => 'Ta transakcja jest już transferem', + 'is_not_transfer' => 'Ta transakcja nie jest transferem', + 'complex_error' => 'Coś skomplikowanego poszło nie tak. Proszę sprawdź logi Firefly III', + 'no_valid_opposing' => 'Konwersja nie powiodła się, ponieważ nie ma poprawnego konta o nazwie ":account"', + 'new_notes_empty' => 'Notatki które mają być ustawione są puste', + 'unsupported_transaction_type_withdrawal' => 'Firefly III nie może przekonwertować ":type" na wypłatę', + 'unsupported_transaction_type_deposit' => 'Firefly III nie może przekonwertować ":type" na wpłatę', + 'unsupported_transaction_type_transfer' => 'Firefly III nie może przekonwertować ":type" na transfer', + 'already_has_source_asset' => 'Ta transakcja ma już ustawione ":name" jako konto aktywów', + 'already_has_destination_asset' => 'Ta transakcja ma już ustawione ":name" jako docelowe konto aktywów', + 'already_has_destination' => 'Ta transakcja ma już ustawione ":name" jako konto docelowe', + 'already_has_source' => 'Ta transakcja ma już ustawione ":name" jako konto źródłowe', + 'already_linked_to_subscription' => 'Transakcja jest już powiązana z rachunkiem ":name"', + 'already_linked_to_category' => 'Transakcja jest już powiązana z kategorią ":name"', + 'already_linked_to_budget' => 'Transakcja jest już powiązana z budżetem ":name"', + 'cannot_find_subscription' => 'Firefly III nie może znaleźć rachunku ":name"', + 'no_notes_to_move' => 'Transakcja nie ma notatek do przeniesienia do pola opisu', + 'no_tags_to_remove' => 'Transakcja nie ma tagów do usunięcia', + 'not_withdrawal' => 'Transakcja nie jest wydatkiem', + 'not_deposit' => 'Transakcja nie jest wpłatą', + 'cannot_find_tag' => 'Firefly III nie może znaleźć tagu ":tag"', + 'cannot_find_asset' => 'Firefly III nie może znaleźć konta aktywów ":name"', + 'cannot_find_accounts' => 'Firefly III nie może znaleźć konta źródłowego lub docelowego', + 'cannot_find_source_transaction' => 'Firefly III nie może znaleźć transakcji źródłowej', + 'cannot_find_destination_transaction' => 'Firefly III nie może znaleźć docelowej transakcji', + 'cannot_find_source_transaction_account' => 'Firefly III nie może znaleźć konta źródłowego transakcji', + 'cannot_find_destination_transaction_account' => 'Firefly III nie może znaleźć konta docelowego transakcji', + 'cannot_find_piggy' => 'Firefly III nie może znaleźć skarbonki o nazwie ":name"', + 'no_link_piggy' => 'Konta tej transakcji nie są powiązane ze skarbonką - więc nie zostaną podjęte żadne działania', 'cannot_unlink_tag' => 'Tag ":tag" nie jest powiązany z tą transakcją', 'cannot_find_budget' => 'Firefly III nie może znaleźć budżetu ":name"', 'cannot_find_category' => 'Firefly III nie może znaleźć kategorii ":name"', diff --git a/resources/lang/pl_PL/validation.php b/resources/lang/pl_PL/validation.php index f2e12ea79b..dc9aa62df9 100644 --- a/resources/lang/pl_PL/validation.php +++ b/resources/lang/pl_PL/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Tablica nie zawiera klauzuli "where"', - 'missing_update' => 'Tablica nie zawiera klauzuli "update"', - 'invalid_where_key' => 'JSON zawiera nieprawidłowy klucz dla klauzuli "where"', - 'invalid_update_key' => 'JSON zawiera nieprawidłowy klucz dla klauzuli "update"', - 'invalid_query_data' => 'W Twoim zapytaniu, w polu %s:%s są nieprawidłowe dane.', - 'invalid_query_account_type' => 'Twoje zapytanie zawiera konta różnego typu, co jest niedozwolone.', - 'invalid_query_currency' => 'Twoje zapytanie zawiera konta, które mają różne ustawienia walutowe, co jest niedozwolone.', - 'iban' => 'To nie jest prawidłowy IBAN.', - 'zero_or_more' => 'Wartość nie może być ujemna.', - 'date_or_time' => 'Wartość musi być prawidłową datą lub czasem (ISO 8601).', - 'source_equals_destination' => 'Konto źródłowe jest równe kontu docelowemu.', - 'unique_account_number_for_user' => 'Wygląda na to, że ten numer konta jest już w użyciu.', - 'unique_iban_for_user' => 'Wygląda na to, że ten IBAN jest już używany.', - 'deleted_user' => 'Ze względu na zabezpieczenia nie możesz się zarejestrować używając tego adresu e-mail.', - 'rule_trigger_value' => 'Ta wartość jest nieprawidłowa dla wybranego wyzwalacza.', - 'rule_action_value' => 'Ta wartość jest nieprawidłowa dla wybranej akcji.', - 'file_already_attached' => 'Przesłany plik ":name" jest już dołączony do tego obiektu.', - 'file_attached' => 'Pomyślnie wgrano plik ":name".', - 'must_exist' => 'Identyfikator w polu :attribute nie istnieje w bazie danych.', - 'all_accounts_equal' => 'Wszystkie konta w tym polu muszą być takie same.', - 'group_title_mandatory' => 'Tytuł grupy jest obowiązkowy, gdy istnieje więcej niż jedna transakcja.', - 'transaction_types_equal' => 'Wszystkie podziały muszą być tego samego typu.', - 'invalid_transaction_type' => 'Nieprawidłowy typ transakcji.', - 'invalid_selection' => 'Twój wybór jest nieprawidłowy.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Wymaga co najmniej jednej transakcji.', - 'recurring_transaction_id' => 'Wymaga co najmniej jednej transakcji.', - 'need_id_to_match' => 'Musisz przesłać ten wpis z ID dla API, aby móc go dopasować.', - 'too_many_unmatched' => 'Zbyt wiele przesłanych transakcji nie może być dopasowanych do ich odpowiednich wpisów w bazie danych. Upewnij się, że istniejące wpisy mają poprawny ID.', - 'id_does_not_match' => 'Przesłane ID #:id nie pasuje do oczekiwanego ID. Upewnij się, że pasuje do pola lub pomiń to pole.', - 'at_least_one_repetition' => 'Wymaga co najmniej jednego powtórzenia.', - 'require_repeat_until' => 'Wymagana jest liczba powtórzeń lub data zakończenia (repeat_until), ale nie obie jednocześnie.', - 'require_currency_info' => 'Treść tego pola jest nieprawidłowa bez informacji o walucie.', - 'not_transfer_account' => 'To konto nie jest kontem, które może być używane do przelewów.', - 'require_currency_amount' => 'Treść tego pola jest nieprawidłowa bez informacji o obcej kwocie.', - 'require_foreign_currency' => 'Wymagane jest wprowadzenie liczby w tym polu', - 'require_foreign_dest' => 'Wartość tego pola musi odpowiadać walucie konta docelowego.', - 'require_foreign_src' => 'Wartość tego pola musi odpowiadać walucie konta źródłowego.', - 'equal_description' => 'Opis transakcji nie powinien być równy globalnemu opisowi.', - 'file_invalid_mime' => 'Plik ":name" jest typu ":mime", który nie jest akceptowany jako nowy plik do przekazania.', - 'file_too_large' => 'Plik ":name" jest zbyt duży.', - 'belongs_to_user' => 'Wartość :attribute jest nieznana.', - 'accepted' => ':attribute musi zostać zaakceptowany.', - 'bic' => 'To nie jest prawidłowy BIC.', - 'at_least_one_trigger' => 'Reguła powinna mieć co najmniej jeden wyzwalacz.', - 'at_least_one_active_trigger' => 'Reguła powinna mieć co najmniej jeden aktywny wyzwalacz.', - 'at_least_one_action' => 'Reguła powinna mieć co najmniej jedną akcję.', - 'at_least_one_active_action' => 'Reguła powinna mieć co najmniej jedną aktywną akcję.', - 'base64' => 'To nie są prawidłowe dane zakodowane w base64.', - 'model_id_invalid' => 'Podane ID wygląda na nieprawidłowe dla tego modelu.', - 'less' => ':attribute musi być mniejszy od 10 000 000', - 'active_url' => ':attribute nie jest prawidłowym adresem URL.', - 'after' => ':attribute musi być datą późniejszą od :date.', - 'date_after' => 'Data rozpoczęcia musi być wcześniejsza niż data zakończenia.', - 'alpha' => ':attribute może zawierać tylko litery.', - 'alpha_dash' => ':attribute może zawierać litery, cyfry oraz myślniki.', - 'alpha_num' => ':attribute może zawierać jedynie litery oraz cyfry.', - 'array' => ':attribute musi być tablicą.', - 'unique_for_user' => 'Istnieje już wpis z tym :attribute.', - 'before' => ':attribute musi być wcześniejszą datą w stosunku do :date.', - 'unique_object_for_user' => 'Ta nazwa jest już w użyciu.', - 'unique_account_for_user' => 'Ta nazwa konta jest już w użyciu.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Tablica nie zawiera klauzuli "where"', + 'missing_update' => 'Tablica nie zawiera klauzuli "update"', + 'invalid_where_key' => 'JSON zawiera nieprawidłowy klucz dla klauzuli "where"', + 'invalid_update_key' => 'JSON zawiera nieprawidłowy klucz dla klauzuli "update"', + 'invalid_query_data' => 'W Twoim zapytaniu, w polu %s:%s są nieprawidłowe dane.', + 'invalid_query_account_type' => 'Twoje zapytanie zawiera konta różnego typu, co jest niedozwolone.', + 'invalid_query_currency' => 'Twoje zapytanie zawiera konta, które mają różne ustawienia walutowe, co jest niedozwolone.', + 'iban' => 'To nie jest prawidłowy IBAN.', + 'zero_or_more' => 'Wartość nie może być ujemna.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'To nie jest konto aktywów.', + 'date_or_time' => 'Wartość musi być prawidłową datą lub czasem (ISO 8601).', + 'source_equals_destination' => 'Konto źródłowe jest równe kontu docelowemu.', + 'unique_account_number_for_user' => 'Wygląda na to, że ten numer konta jest już w użyciu.', + 'unique_iban_for_user' => 'Wygląda na to, że ten IBAN jest już używany.', + 'reconciled_forbidden_field' => 'Ta transakcja jest już uzgodniona, nie można zmienić ":field"', + 'deleted_user' => 'Ze względu na zabezpieczenia nie możesz się zarejestrować używając tego adresu e-mail.', + 'rule_trigger_value' => 'Ta wartość jest nieprawidłowa dla wybranego wyzwalacza.', + 'rule_action_value' => 'Ta wartość jest nieprawidłowa dla wybranej akcji.', + 'file_already_attached' => 'Przesłany plik ":name" jest już dołączony do tego obiektu.', + 'file_attached' => 'Pomyślnie wgrano plik ":name".', + 'must_exist' => 'Identyfikator w polu :attribute nie istnieje w bazie danych.', + 'all_accounts_equal' => 'Wszystkie konta w tym polu muszą być takie same.', + 'group_title_mandatory' => 'Tytuł grupy jest obowiązkowy, gdy istnieje więcej niż jedna transakcja.', + 'transaction_types_equal' => 'Wszystkie podziały muszą być tego samego typu.', + 'invalid_transaction_type' => 'Nieprawidłowy typ transakcji.', + 'invalid_selection' => 'Twój wybór jest nieprawidłowy.', + 'belongs_user' => 'Ta wartość jest powiązana z obiektem, który nie istnieje.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Wymaga co najmniej jednej transakcji.', + 'recurring_transaction_id' => 'Wymaga co najmniej jednej transakcji.', + 'need_id_to_match' => 'Musisz przesłać ten wpis z ID dla API, aby móc go dopasować.', + 'too_many_unmatched' => 'Zbyt wiele przesłanych transakcji nie może być dopasowanych do ich odpowiednich wpisów w bazie danych. Upewnij się, że istniejące wpisy mają poprawny ID.', + 'id_does_not_match' => 'Przesłane ID #:id nie pasuje do oczekiwanego ID. Upewnij się, że pasuje do pola lub pomiń to pole.', + 'at_least_one_repetition' => 'Wymaga co najmniej jednego powtórzenia.', + 'require_repeat_until' => 'Wymagana jest liczba powtórzeń lub data zakończenia (repeat_until), ale nie obie jednocześnie.', + 'require_currency_info' => 'Treść tego pola jest nieprawidłowa bez informacji o walucie.', + 'not_transfer_account' => 'To konto nie jest kontem, które może być używane do przelewów.', + 'require_currency_amount' => 'Treść tego pola jest nieprawidłowa bez informacji o obcej kwocie.', + 'require_foreign_currency' => 'Wymagane jest wprowadzenie liczby w tym polu', + 'require_foreign_dest' => 'Wartość tego pola musi odpowiadać walucie konta docelowego.', + 'require_foreign_src' => 'Wartość tego pola musi odpowiadać walucie konta źródłowego.', + 'equal_description' => 'Opis transakcji nie powinien być równy globalnemu opisowi.', + 'file_invalid_mime' => 'Plik ":name" jest typu ":mime", który nie jest akceptowany jako nowy plik do przekazania.', + 'file_too_large' => 'Plik ":name" jest zbyt duży.', + 'belongs_to_user' => 'Wartość :attribute jest nieznana.', + 'accepted' => ':attribute musi zostać zaakceptowany.', + 'bic' => 'To nie jest prawidłowy BIC.', + 'at_least_one_trigger' => 'Reguła powinna mieć co najmniej jeden wyzwalacz.', + 'at_least_one_active_trigger' => 'Reguła powinna mieć co najmniej jeden aktywny wyzwalacz.', + 'at_least_one_action' => 'Reguła powinna mieć co najmniej jedną akcję.', + 'at_least_one_active_action' => 'Reguła powinna mieć co najmniej jedną aktywną akcję.', + 'base64' => 'To nie są prawidłowe dane zakodowane w base64.', + 'model_id_invalid' => 'Podane ID wygląda na nieprawidłowe dla tego modelu.', + 'less' => ':attribute musi być mniejszy od 10 000 000', + 'active_url' => ':attribute nie jest prawidłowym adresem URL.', + 'after' => ':attribute musi być datą późniejszą od :date.', + 'date_after' => 'Data rozpoczęcia musi być wcześniejsza niż data zakończenia.', + 'alpha' => ':attribute może zawierać tylko litery.', + 'alpha_dash' => ':attribute może zawierać litery, cyfry oraz myślniki.', + 'alpha_num' => ':attribute może zawierać jedynie litery oraz cyfry.', + 'array' => ':attribute musi być tablicą.', + 'unique_for_user' => 'Istnieje już wpis z tym :attribute.', + 'before' => ':attribute musi być wcześniejszą datą w stosunku do :date.', + 'unique_object_for_user' => 'Ta nazwa jest już w użyciu.', + 'unique_account_for_user' => 'Ta nazwa konta jest już w użyciu.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute musi się mieścić w zakresie pomiędzy :min a :max.', + 'between.file' => ':attribute musi się mieścić w zakresie pomiędzy :min oraz :max kilobajtów.', + 'between.string' => ':attribute musi zawierać pomiędzy :min a :max znaków.', + 'between.array' => ':attribute musi zawierać pomiędzy :min a :max elementów.', + 'boolean' => 'Pole :attribute musi być prawdą albo fałszem.', + 'confirmed' => 'Pole :attribute i jego potwierdzenie nie pasują do siebie.', + 'date' => ':attribute nie jest prawidłową datą.', + 'date_format' => ':attribute rożni się od formatu :format.', + 'different' => ':attribute oraz :other muszą się różnić.', + 'digits' => ':attribute musi składać się z :digits cyfr.', + 'digits_between' => ':attribute musi mieć od :min do :max cyfr.', + 'email' => ':attribute musi być prawidłowym adresem email.', + 'filled' => 'Pole :attribute jest wymagane.', + 'exists' => 'Wybrane :attribute są nieprawidłowe.', + 'image' => ':attribute musi być obrazkiem.', + 'in' => 'Wybrany :attribute jest nieprawidłowy.', + 'integer' => ':attribute musi być liczbą całkowitą.', + 'ip' => ':attribute musi być poprawnym adresem IP.', + 'json' => ':attribute musi być prawidłowym węzłem JSON.', + 'max.numeric' => ':attribute nie może być większy niż :max.', + 'max.file' => ':attribute nie może być większy niż :max kilobajtów.', + 'max.string' => ':attribute nie może być dłuższy od :max znaków.', + 'max.array' => ':attribute nie może zawierać więcej niż :max elementów.', + 'mimes' => ':attribute musi być plikiem typu :values.', + 'min.numeric' => ':attribute musi być przynajmniej :min.', + 'lte.numeric' => ':attribute musi być mniejszy lub równy :value.', + 'min.file' => ':attribute musi mieć przynajmniej :min kilobajtów.', + 'min.string' => ':attribute musi mieć co najmniej :min znaków.', + 'min.array' => ':attribute musi zawierać przynajmniej :min elementów.', + 'not_in' => 'Wybrany :attribute jest nieprawidłowy.', + 'numeric' => ':attribute musi byc liczbą.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Kwota źródłowa musi być liczbą.', + 'numeric_destination' => 'Kwota docelowa musi być liczbą.', + 'numeric_source' => 'Kwota źródłowa musi być liczbą.', + 'regex' => 'Format :attribute jest nieprawidłowy.', + 'required' => 'Pole :attribute jest wymagane.', + 'required_if' => 'Pole :attribute jest wymagane gdy :other jest :value.', + 'required_unless' => 'Pole :attribute jest wymagane, chyba że :other jest w :values.', + 'required_with' => 'Pole :attribute jest wymagane gdy :values jest podana.', + 'required_with_all' => 'Pole :attribute jest wymagane gdy :values jest podana.', + 'required_without' => 'Pole :attribute jest wymagane gdy :values nie jest podana.', + 'required_without_all' => ':attribute jest wymagane, gdy żadna z wartości :values nie jest podana.', + 'same' => 'Pole :attribute oraz :other muszą się zgadzać.', + 'size.numeric' => ':attribute musi być wielkości :size.', + 'amount_min_over_max' => 'Minimalna kwota nie może być większa niż maksymalna kwota.', + 'size.file' => ':attribute musi mieć :size kilobajtów.', + 'size.string' => ':attribute musi mieć :size znaków.', + 'size.array' => ':attribute musi zawierać :size elementów.', + 'unique' => 'Taki :attribute już występuje.', + 'string' => ':attribute musi być ciągiem znaków.', + 'url' => 'Format :attribute jest nieprawidłowy.', + 'timezone' => ':attribute musi być prawidłową strefą.', + '2fa_code' => 'Format :attribute jest nieprawidłowy.', + 'dimensions' => ':attribute ma nieprawidłowe wymiary obrazu.', + 'distinct' => 'Pole :attribute zawiera zduplikowaną wartość.', + 'file' => ':attribute musi być plikiem.', + 'in_array' => 'Pole :attribute nie istnieje w :other.', + 'present' => 'Pole :attribute musi być obecne.', + 'amount_zero' => 'Całkowita kwota nie może wynosić zero.', + 'current_target_amount' => 'Bieżąca kwota musi być mniejsza niż kwota docelowa.', + 'unique_piggy_bank_for_user' => 'Nazwa skarbonki musi być unikalna.', + 'unique_object_group' => 'Nazwa grupy musi być unikalna', + 'starts_with' => 'Wartość musi zaczynać się od :values.', + 'unique_webhook' => 'Masz już webhook z tą kombinacją adresu URL, wyzwalacza, odpowiedzi i doręczenia.', + 'unique_existing_webhook' => 'Masz już inny webhook z tą kombinacją adresu URL, wyzwalacza, odpowiedzi i doręczenia.', + 'same_account_type' => 'Oba konta muszą być tego samego typu', + 'same_account_currency' => 'Oba konta muszą mieć to samo ustawienie waluty', - 'between.numeric' => ':attribute musi się mieścić w zakresie pomiędzy :min a :max.', - 'between.file' => ':attribute musi się mieścić w zakresie pomiędzy :min oraz :max kilobajtów.', - 'between.string' => ':attribute musi zawierać pomiędzy :min a :max znaków.', - 'between.array' => ':attribute musi zawierać pomiędzy :min a :max elementów.', - 'boolean' => 'Pole :attribute musi być prawdą albo fałszem.', - 'confirmed' => 'Pole :attribute i jego potwierdzenie nie pasują do siebie.', - 'date' => ':attribute nie jest prawidłową datą.', - 'date_format' => ':attribute rożni się od formatu :format.', - 'different' => ':attribute oraz :other muszą się różnić.', - 'digits' => ':attribute musi składać się z :digits cyfr.', - 'digits_between' => ':attribute musi mieć od :min do :max cyfr.', - 'email' => ':attribute musi być prawidłowym adresem email.', - 'filled' => 'Pole :attribute jest wymagane.', - 'exists' => 'Wybrane :attribute są nieprawidłowe.', - 'image' => ':attribute musi być obrazkiem.', - 'in' => 'Wybrany :attribute jest nieprawidłowy.', - 'integer' => ':attribute musi być liczbą całkowitą.', - 'ip' => ':attribute musi być poprawnym adresem IP.', - 'json' => ':attribute musi być prawidłowym węzłem JSON.', - 'max.numeric' => ':attribute nie może być większy niż :max.', - 'max.file' => ':attribute nie może być większy niż :max kilobajtów.', - 'max.string' => ':attribute nie może być dłuższy od :max znaków.', - 'max.array' => ':attribute nie może zawierać więcej niż :max elementów.', - 'mimes' => ':attribute musi być plikiem typu :values.', - 'min.numeric' => ':attribute musi być przynajmniej :min.', - 'lte.numeric' => ':attribute musi być mniejszy lub równy :value.', - 'min.file' => ':attribute musi mieć przynajmniej :min kilobajtów.', - 'min.string' => ':attribute musi mieć co najmniej :min znaków.', - 'min.array' => ':attribute musi zawierać przynajmniej :min elementów.', - 'not_in' => 'Wybrany :attribute jest nieprawidłowy.', - 'numeric' => ':attribute musi byc liczbą.', - 'numeric_native' => 'Kwota źródłowa musi być liczbą.', - 'numeric_destination' => 'Kwota docelowa musi być liczbą.', - 'numeric_source' => 'Kwota źródłowa musi być liczbą.', - 'regex' => 'Format :attribute jest nieprawidłowy.', - 'required' => 'Pole :attribute jest wymagane.', - 'required_if' => 'Pole :attribute jest wymagane gdy :other jest :value.', - 'required_unless' => 'Pole :attribute jest wymagane, chyba że :other jest w :values.', - 'required_with' => 'Pole :attribute jest wymagane gdy :values jest podana.', - 'required_with_all' => 'Pole :attribute jest wymagane gdy :values jest podana.', - 'required_without' => 'Pole :attribute jest wymagane gdy :values nie jest podana.', - 'required_without_all' => ':attribute jest wymagane, gdy żadna z wartości :values nie jest podana.', - 'same' => 'Pole :attribute oraz :other muszą się zgadzać.', - 'size.numeric' => ':attribute musi być wielkości :size.', - 'amount_min_over_max' => 'Minimalna kwota nie może być większa niż maksymalna kwota.', - 'size.file' => ':attribute musi mieć :size kilobajtów.', - 'size.string' => ':attribute musi mieć :size znaków.', - 'size.array' => ':attribute musi zawierać :size elementów.', - 'unique' => 'Taki :attribute już występuje.', - 'string' => ':attribute musi być ciągiem znaków.', - 'url' => 'Format :attribute jest nieprawidłowy.', - 'timezone' => ':attribute musi być prawidłową strefą.', - '2fa_code' => 'Format :attribute jest nieprawidłowy.', - 'dimensions' => ':attribute ma nieprawidłowe wymiary obrazu.', - 'distinct' => 'Pole :attribute zawiera zduplikowaną wartość.', - 'file' => ':attribute musi być plikiem.', - 'in_array' => 'Pole :attribute nie istnieje w :other.', - 'present' => 'Pole :attribute musi być obecne.', - 'amount_zero' => 'Całkowita kwota nie może wynosić zero.', - 'current_target_amount' => 'Bieżąca kwota musi być mniejsza niż kwota docelowa.', - 'unique_piggy_bank_for_user' => 'Nazwa skarbonki musi być unikalna.', - 'unique_object_group' => 'Nazwa grupy musi być unikalna', - 'starts_with' => 'Wartość musi zaczynać się od :values.', - 'unique_webhook' => 'Masz już webhook z tą kombinacją adresu URL, wyzwalacza, odpowiedzi i doręczenia.', - 'unique_existing_webhook' => 'Masz już inny webhook z tą kombinacją adresu URL, wyzwalacza, odpowiedzi i doręczenia.', - 'same_account_type' => 'Oba konta muszą być tego samego typu', - 'same_account_currency' => 'Oba konta muszą mieć to samo ustawienie waluty', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'To nie jest bezpieczne hasło. Proszę spróbować ponownie. Aby uzyskać więcej informacji odwiedź https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Nieprawidłowy typ powtórzeń dla cyklicznych transakcji.', - 'valid_recurrence_rep_moment' => 'Nieprawidłowy moment powtórzenia dla tego typu powtórzenia.', - 'invalid_account_info' => 'Nieprawidłowe informacje o koncie.', - 'attributes' => [ + 'secure_password' => 'To nie jest bezpieczne hasło. Proszę spróbować ponownie. Aby uzyskać więcej informacji odwiedź https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Nieprawidłowy typ powtórzeń dla cyklicznych transakcji.', + 'valid_recurrence_rep_moment' => 'Nieprawidłowy moment powtórzenia dla tego typu powtórzenia.', + 'invalid_account_info' => 'Nieprawidłowe informacje o koncie.', + 'attributes' => [ 'email' => 'adres e-mail', 'description' => 'opis', 'amount' => 'kwota', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta źródłowego i/lub prawidłową nazwę konta źródłowego.', - 'withdrawal_source_bad_data' => '[a] Nie można znaleźć poprawnego konta źródłowego podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', - 'withdrawal_dest_need_data' => '[a] Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta wydatków i/lub prawidłową nazwę konta wydatków.', - 'withdrawal_dest_bad_data' => 'Nie można znaleźć poprawnego konta wydatków podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', + 'withdrawal_source_need_data' => 'Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta źródłowego i/lub prawidłową nazwę konta źródłowego.', + 'withdrawal_source_bad_data' => '[a] Nie można znaleźć poprawnego konta źródłowego podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', + 'withdrawal_dest_need_data' => '[a] Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta wydatków i/lub prawidłową nazwę konta wydatków.', + 'withdrawal_dest_bad_data' => 'Nie można znaleźć poprawnego konta wydatków podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', - 'withdrawal_dest_iban_exists' => 'To konto docelowe IBAN jest już używane przez konto aktywów lub zobowiązanie i nie może być użyte jako miejsce docelowe wydatku.', - 'deposit_src_iban_exists' => 'To konto źródłowe IBAN jest już używany przez rachunek aktywów lub zobowiązanie i nie może być używany jako źródło wpłaty.', + 'withdrawal_dest_iban_exists' => 'To konto docelowe IBAN jest już używane przez konto aktywów lub zobowiązanie i nie może być użyte jako miejsce docelowe wydatku.', + 'deposit_src_iban_exists' => 'To konto źródłowe IBAN jest już używany przez rachunek aktywów lub zobowiązanie i nie może być używany jako źródło wpłaty.', - 'reconciliation_source_bad_data' => 'Nie można znaleźć prawidłowego konta uzgadniania podczas wyszukiwania ID ":id" lub nazwy ":name".', + 'reconciliation_source_bad_data' => 'Nie można znaleźć prawidłowego konta uzgadniania podczas wyszukiwania ID ":id" lub nazwy ":name".', - 'generic_source_bad_data' => '[e] Nie można znaleźć poprawnego konta źródłowego podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', + 'generic_source_bad_data' => '[e] Nie można znaleźć poprawnego konta źródłowego podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', - 'deposit_source_need_data' => 'Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta źródłowego i/lub prawidłową nazwę konta źródłowego.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Nie można znaleźć poprawnego konta wydatków podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', - 'deposit_dest_wrong_type' => 'Konto docelowe nie jest poprawnego typu.', + 'deposit_source_need_data' => 'Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta źródłowego i/lub prawidłową nazwę konta źródłowego.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Nie można znaleźć poprawnego konta wydatków podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', + 'deposit_dest_wrong_type' => 'Konto docelowe nie jest poprawnego typu.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta źródłowego i/lub prawidłową nazwę konta źródłowego.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Nie można znaleźć poprawnego konta wydatków podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', + 'need_id_in_edit' => 'Każdy podział musi posiadać transaction_journal_id (poprawny identyfikator lub 0).', - 'transfer_source_need_data' => 'Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta źródłowego i/lub prawidłową nazwę konta źródłowego.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Nie można znaleźć poprawnego konta wydatków podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', - 'need_id_in_edit' => 'Każdy podział musi posiadać transaction_journal_id (poprawny identyfikator lub 0).', + 'ob_source_need_data' => 'Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta źródłowego i/lub prawidłową nazwę konta źródłowego.', + 'lc_source_need_data' => 'Potrzebujemy poprawny identyfikator konta źródłowego, aby kontynuować.', + 'ob_dest_need_data' => '[d] Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta wydatków i/lub prawidłową nazwę konta wydatków.', + 'ob_dest_bad_data' => 'Nie można znaleźć poprawnego konta wydatków podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', + 'reconciliation_either_account' => 'Aby przesłać uzgodnienie, musisz przesłać konto źródłowe lub docelowe. Nie oba te konto, ani nie żadnego konta.', - 'ob_source_need_data' => 'Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta źródłowego i/lub prawidłową nazwę konta źródłowego.', - 'lc_source_need_data' => 'Potrzebujemy poprawny identyfikator konta źródłowego, aby kontynuować.', - 'ob_dest_need_data' => '[d] Aby kontynuować, musisz uzyskać prawidłowy identyfikator konta wydatków i/lub prawidłową nazwę konta wydatków.', - 'ob_dest_bad_data' => 'Nie można znaleźć poprawnego konta wydatków podczas wyszukiwania identyfikatora ":id" lub nazwy ":name".', - 'reconciliation_either_account' => 'Aby przesłać uzgodnienie, musisz przesłać konto źródłowe lub docelowe. Nie oba te konto, ani nie żadnego konta.', + 'generic_invalid_source' => 'Nie możesz użyć tego konta jako konta źródłowego.', + 'generic_invalid_destination' => 'Nie możesz użyć tego konta jako konta docelowego.', - 'generic_invalid_source' => 'Nie możesz użyć tego konta jako konta źródłowego.', - 'generic_invalid_destination' => 'Nie możesz użyć tego konta jako konta docelowego.', + 'generic_no_source' => 'Musisz przesłać informacje o koncie źródłowym lub przesłać identyfikator dziennika transakcji.', + 'generic_no_destination' => 'Musisz przesłać informacje o koncie docelowym lub przesłać identyfikator dziennika transakcji.', - 'generic_no_source' => 'Musisz przesłać informacje o koncie źródłowym lub przesłać identyfikator dziennika transakcji.', - 'generic_no_destination' => 'Musisz przesłać informacje o koncie docelowym lub przesłać identyfikator dziennika transakcji.', - - 'gte.numeric' => ':attribute musi być większy lub równy :value.', - 'gt.numeric' => ':attribute musi być większy niż :value.', - 'gte.file' => ':attribute musi mieć rozmiar większy niż lub równy :value kilobajtów.', - 'gte.string' => ':attribute musi mieć :value lub więcej znaków.', - 'gte.array' => ':attribute musi mieć :value lub więcej elementów.', + 'gte.numeric' => ':attribute musi być większy lub równy :value.', + 'gt.numeric' => ':attribute musi być większy niż :value.', + 'gte.file' => ':attribute musi mieć rozmiar większy niż lub równy :value kilobajtów.', + 'gte.string' => ':attribute musi mieć :value lub więcej znaków.', + 'gte.array' => ':attribute musi mieć :value lub więcej elementów.', 'amount_required_for_auto_budget' => 'Kwota jest wymagana.', 'auto_budget_amount_positive' => 'Kwota musi być większa niż zero.', + 'auto_budget_period_mandatory' => 'Okres automatycznego budżetu to pole obowiązkowe.', // no access to administration: diff --git a/resources/lang/pt_BR/api.php b/resources/lang/pt_BR/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/pt_BR/api.php +++ b/resources/lang/pt_BR/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/pt_BR/auth.php b/resources/lang/pt_BR/auth.php index 81b4ee6d9b..2da527fadb 100644 --- a/resources/lang/pt_BR/auth.php +++ b/resources/lang/pt_BR/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Essas credenciais não correspondem aos nossos registros.', 'throttle' => 'Muitas tentativas de login. Por favor, tente novamente em :seconds segundos.', diff --git a/resources/lang/pt_BR/breadcrumbs.php b/resources/lang/pt_BR/breadcrumbs.php index dba863ec6c..d3ded5d192 100644 --- a/resources/lang/pt_BR/breadcrumbs.php +++ b/resources/lang/pt_BR/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Início', - 'budgets' => 'Orçamentos', - 'subscriptions' => 'Assinaturas', - 'transactions' => 'Transações', - 'title_expenses' => 'Despesas', - 'title_withdrawal' => 'Despesas', - 'title_revenue' => 'Receita / Renda', - 'title_deposit' => 'Receita / Renda', - 'title_transfer' => 'Transferências', - 'title_transfers' => 'Transferências', - 'edit_currency' => 'Editar moeda ":name"', - 'delete_currency' => 'Excluir moeda ":name"', - 'newPiggyBank' => 'Criar um novo cofrinho', - 'edit_piggyBank' => 'Editar cofrinho ":name"', - 'preferences' => 'Preferências', - 'profile' => 'Perfil', - 'accounts' => 'Contas', - 'changePassword' => 'Alterar sua senha', - 'change_email' => 'Altere seu endereço de email', - 'bills' => 'Faturas', - 'newBill' => 'Nova fatura', - 'edit_bill' => 'Editar fatura ":name"', - 'delete_bill' => 'Apagar fatura ":name"', - 'reports' => 'Relatórios', - 'search_result' => 'Resultados da busca ":query"', - 'withdrawal_list' => 'Despesas', - 'Withdrawal_list' => 'Despesas', - 'deposit_list' => 'Receitas, renda e depósitos', - 'transfer_list' => 'Transferências', - 'transfers_list' => 'Transferências', + 'home' => 'Início', + 'budgets' => 'Orçamentos', + 'subscriptions' => 'Assinaturas', + 'transactions' => 'Transações', + 'title_expenses' => 'Despesas', + 'title_withdrawal' => 'Despesas', + 'title_revenue' => 'Receita / Renda', + 'title_deposit' => 'Receita / Renda', + 'title_transfer' => 'Transferências', + 'title_transfers' => 'Transferências', + 'edit_currency' => 'Editar moeda ":name"', + 'delete_currency' => 'Excluir moeda ":name"', + 'newPiggyBank' => 'Criar um novo cofrinho', + 'edit_piggyBank' => 'Editar cofrinho ":name"', + 'preferences' => 'Preferências', + 'profile' => 'Perfil', + 'accounts' => 'Contas', + 'changePassword' => 'Alterar sua senha', + 'change_email' => 'Altere seu endereço de email', + 'bills' => 'Contas de consumo', + 'newBill' => 'Nova conta', + 'edit_bill' => 'Editar conta ":name"', + 'delete_bill' => 'Apagar conta ":name"', + 'reports' => 'Relatórios', + 'search_result' => 'Resultados da busca ":query"', + 'withdrawal_list' => 'Despesas', + 'Withdrawal_list' => 'Despesas', + 'deposit_list' => 'Receitas, renda e depósitos', + 'transfer_list' => 'Transferências', + 'transfers_list' => 'Transferências', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,20 +76,19 @@ return [ * */ - 'reconciliation_list' => 'Reconciliações', 'create_withdrawal' => 'Criar uma nova retirada', 'create_deposit' => 'Criar um novo depósito', - 'create_transfer' => 'Criar nova transferência', + 'create_transfer' => 'Criar nova transferência', 'create_new_transaction' => 'Criar uma nova transação', 'edit_journal' => 'Editar transação ":description"', 'edit_reconciliation' => 'Editar ":description"', 'delete_journal' => 'Apagar transação ":description"', 'delete_group' => 'Excluir transação ":description"', - 'tags' => 'Etiquetas', - 'createTag' => 'Criar nova etiqueta', - 'edit_tag' => 'Editar etiqueta ":tag"', - 'delete_tag' => 'Apagar etiqueta ":tag"', + 'tags' => 'Tags', + 'createTag' => 'Criar nova tag', + 'edit_tag' => 'Editar tag ":tag"', + 'delete_tag' => 'Excluir tag ":tag"', 'delete_journal_link' => 'Excluir vínculo entre transações', 'edit_object_group' => 'Editar grupo ":title"', 'delete_object_group' => 'Excluir grupo ":title"', diff --git a/resources/lang/pt_BR/components.php b/resources/lang/pt_BR/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/pt_BR/components.php +++ b/resources/lang/pt_BR/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/pt_BR/config.php b/resources/lang/pt_BR/config.php index 4cd8826c2c..ef2f734b28 100644 --- a/resources/lang/pt_BR/config.php +++ b/resources/lang/pt_BR/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'pt-br', - 'locale' => 'pt-br, pt_BR.utf8, pt_BR.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM [de] YYYY', + 'html_language' => 'pt-br', + 'locale' => 'pt-br, pt_BR.utf8, pt_BR.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM [de] YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'DD [de] MMMM [de] YYYY', - 'month_and_day_fns' => 'd [de] MMMM [de] y', - 'month_and_day_js' => 'DD [de] MMMM [de] YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'DD [de] MMMM [de] YYYY', + 'month_and_day_fns' => 'd [de] MMMM [de] y', + 'month_and_day_js' => 'DD [de] MMMM [de] YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd, D [de] MMMM [de] YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd, D [de] MMMM [de] YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'D [de] MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'D [de] MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'DD [de] MMMM [de] YYYY, [às] HH:mm:ss', + 'date_time_fns' => 'dd \'de\' MMMM \'de\' yyyy, \'às\' HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'DD [de] MMMM [de] YYYY, [às] HH:mm:ss', - 'date_time_fns' => 'dd \'de\' MMMM \'de\' yyyy, \'às\' HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'DD [de] MMMM [de] YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'DD [de] MMMM [de] YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Semana] W, GGGG', + 'week_in_year_fns' => "'Semana' w 'de' yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Semana] W, GGGG', - 'week_in_year_fns' => "'Semana' w 'de' yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\TQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\TQ YYYY', - - 'quarter_fns' => "'T'Q, yyyy", - 'half_year_fns' => "'S{half}', yyyy", - 'dow_1' => 'Segunda', - 'dow_2' => 'Terça', - 'dow_3' => 'Quarta', - 'dow_4' => 'Quinta', - 'dow_5' => 'Sexta', - 'dow_6' => 'Sábado', - 'dow_7' => 'Domingo', + 'quarter_fns' => "'T'Q, yyyy", + 'half_year_fns' => "'S{half}', yyyy", + 'dow_1' => 'Segunda', + 'dow_2' => 'Terça', + 'dow_3' => 'Quarta', + 'dow_4' => 'Quinta', + 'dow_5' => 'Sexta', + 'dow_6' => 'Sábado', + 'dow_7' => 'Domingo', ]; /* diff --git a/resources/lang/pt_BR/demo.php b/resources/lang/pt_BR/demo.php index d37ed8079d..056010f443 100644 --- a/resources/lang/pt_BR/demo.php +++ b/resources/lang/pt_BR/demo.php @@ -31,15 +31,14 @@ * */ - declare(strict_types=1); return [ 'no_demo_text' => 'Desculpe, não há nenhum texto extra de explicação para esta página.', 'see_help_icon' => 'No entanto, o -ícone no canto superior direito pode lhe dizer mais.', - 'index' => 'Bem-vindo ao Firefly III! Nesta página você pode obter uma rápida visão geral de suas finanças. Para mais informações, confira Contas de Ativos → Contas de Ativos e, claro, as páginas de Orçamentos e Relatório.Ou então, dê uma olhada ao redor e veja onde você vai parar.', + 'index' => 'Bem-vindo ao Firefly III! Nesta página você pode obter uma rápida visão geral de suas finanças. Para mais informações, confira Contas de Ativos → Contas de Ativos e, claro, as páginas de Orçamentos e Relatórios.Ou então, dê uma olhada ao redor e veja onde você vai parar.', 'accounts-index' => 'Contas de ativo são suas contas bancárias pessoais. Contas de despesa são aquilo em que você gasta seu dinheiro, tais como lojas e amigos. Contas de receitas são as fontes das quais você recebe seu dinheiro, como o seu trabalho, o governo ou outras fontes de renda. Passivos são suas dívidas e empréstimos, como dívidas antigas de cartão de crédito ou empréstimos estudantis. Nesta página você pode editá-los ou removê-los.', - 'budgets-index' => 'Esta página mostra a você uma visão geral dos seus orçamentos. A barra superior mostra a quantidade disponível a ser orçamentada. Isto pode ser personalizado para qualquer valor clicando o montante à direita. A quantidade que você gastou de fato é mostrada na barra abaixo. Abaixo, estão as despesas para cada orçamento e o que você orçou neles.', + 'budgets-index' => 'Esta página mostra a você uma visão geral dos seus orçamentos. A barra superior mostra a quantidade disponível a ser orçada. Isto pode ser personalizado para qualquer valor clicando no montante à direita. O valor que você gastou de fato é mostrada na barra abaixo. Abaixo, estão as despesas para cada orçamento e o que você orçou neles.', 'reports-index-start' => 'Firefly III suporta vários tipos de relatórios. Leia sobre eles clicando no-ícone no canto superior direito.', 'reports-index-examples' => 'Certifique-se de verificar estes exemplos: um quadro financeiro mensal, um quadro financeiro anual e uma visão geral orçamentária.', 'currencies-index' => 'Firefly III oferece suporte a várias moedas. Embora o padrão seja o Euro, ela pode ser definida para o dólar americano e muitas outras moedas. Como você pode ver uma pequena seleção de moedas foi incluída, mas você pode adicionar suas próprias se desejar. No entanto, alterar a moeda padrão não vai mudar a moeda de transações existentes: Firefly III suporta o uso de várias moedas ao mesmo tempo.', diff --git a/resources/lang/pt_BR/email.php b/resources/lang/pt_BR/email.php index 79306b1dc8..00d931cb17 100644 --- a/resources/lang/pt_BR/email.php +++ b/resources/lang/pt_BR/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Uma mensagem de teste de sua instância do Firefly III', 'admin_test_body' => 'Essa é uma mensagem de teste de sua instância do Firefly III. Foi enviada para :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Um convite foi criado', 'invitation_created_body' => 'O administrador ":email" criou um convite de usuário que pode ser usado por quem administrar o e-mail ":invitee". O convite é válido por 48h.', @@ -68,7 +66,7 @@ return [ // new IP 'login_from_new_ip' => 'Novo login no Firefly III', 'slack_login_from_new_ip' => 'Novo login no Firefly III do IP :ip (:host)', - 'new_ip_body' => 'O Firefly III detectou um novo login em sua conta a partir de um endereço IP desconhecido. Caso você nunca tenha logado do endereço IP abaixo, ou o fez há mais de seis meses, o Firefly III irá notificá-lo.', + 'new_ip_body' => 'Firefly III detectou um novo login em sua conta a partir de um endereço IP desconhecido. Caso você nunca tenha logado do endereço IP abaixo, ou o fez há mais de seis meses, o Firefly III irá notificá-lo.', 'new_ip_warning' => 'Caso você reconheça este endereço IP ou o login, você pode ignorar esta mensagem. Ou se você não fez login, se não tem ideia do que se trata, verifique a segurança da sua senha, altere-a e desconecte-se de todas as outras sessões. Para fazer isso, vá para sua página de perfil. Claro que você já habilitou 2FA, né? Mantenha-se seguro!', 'ip_address' => 'Endereço IP', 'host_name' => 'Servidor', @@ -76,7 +74,7 @@ return [ // access token created 'access_token_created_subject' => 'Um novo token de acesso foi criado', - 'access_token_created_body' => 'Alguém (esperamos que você) acabou de criar um novo token de acesso à API do Firefly III, para sua conta.', + 'access_token_created_body' => 'Alguém (esperamos que você) acabou de criar um novo token de acesso à API do Firefly III para sua conta.', 'access_token_created_explanation' => 'Este token permite acessar **TODOS** os seus registros financeiros através da API do Firefly III.', 'access_token_created_revoke' => 'Se não foi você, por favor revogue este token o mais rápido possível em :url', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Redefinição de senha:', 'registered_doc_link' => 'Documentação:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Uma nova versão do Firefly III está disponível', @@ -122,12 +119,12 @@ return [ // OAuth token created 'oauth_created_subject' => 'Um novo cliente OAuth foi criado', 'oauth_created_body' => 'Alguém (esperamos que você) acabou de criar um Cliente OAuth na API do Firefly III para sua conta de usuário. Está nomeado como ":name" e a URL de retorno é `:url`.', - 'oauth_created_explanation' => 'Este chave de cliente permite acessar **TODOS** os seus registros financeiros através da API do Firefly III.', - 'oauth_created_undo' => 'Se não foi você, revogue o acesso desta chave o mais rápido possível, em `:url`', + 'oauth_created_explanation' => 'Com esta chave, o cliente pode acessar **TODOS** os seus registros financeiros através da API do Firefly III.', + 'oauth_created_undo' => 'Se não foi você, revogue o acesso desta chave o mais rápido possível em `:url`', // reset password 'reset_pw_subject' => 'Seu pedido de redefinição de senha', - 'reset_pw_instructions' => 'Alguém tentou redefinir sua senha. Se foi você, por favor, abra o link abaixo para fazê-lo.', + 'reset_pw_instructions' => 'Alguém tentou redefinir sua senha. Se foi você, por favor, siga o link abaixo para continuar.', 'reset_pw_warning' => '**POR FAVOR**, confirme que o link realmente direciona você para o Firefly III que você espera!', // error @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Se preferir, você também pode abrir uma nova issue em https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'O rastreamento completo está abaixo:', 'error_headers' => 'Os seguintes cabeçalhos também podem ser relevantes:', + 'error_post' => 'Isto foi enviado pelo usuário:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III criou uma nova transação.|Firefly III criou :count novas transações', 'new_journals_header' => 'Firefly III criou uma transação para você. Você pode encontrá-la em sua instância do Firefly III:|Firefly III criou :count transações para você. Você pode encontrá-los em sua instância do Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Sua fatura **":name"** vai vencer em :date. Este momento acontecerá **HOJE!**', 'bill_warning_extension_date_zero' => 'Sua fatura **":name"** deverá ser prorrogada ou cancelada em :date. Este momento acontecerá **HOJE!**', 'bill_warning_please_action' => 'Por favor, tome a medida apropriada.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/pt_BR/errors.php b/resources/lang/pt_BR/errors.php index 14ac58b1ba..085057e679 100644 --- a/resources/lang/pt_BR/errors.php +++ b/resources/lang/pt_BR/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack trace', 'more_info' => 'Mais informações', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Por favor, colete mais informações no diretório storage/logs, onde você encontrará os arquivos de log. Se você estiver executando o Docker, use docker logs -f [container].', - 'collect_info_more' => 'Você pode ler mais sobre a coleta de informações de erro em Perguntas Frequentes.', - 'github_help' => 'Obtenha ajuda no GitHub', - 'github_instructions' => 'Você é mais do que bem-vindo para abrir uma nova issue no GitHub..', - 'use_search' => 'Use a busca!', - 'include_info' => 'Incluir a informação desta página de debug.', - 'tell_more' => 'Nos diga mais do que "ele retorna Ops!"', - 'include_logs' => 'Inclua os logs de erro (veja acima).', - 'what_did_you_do' => 'Nos diga o que você estava fazendo.', - 'offline_header' => 'Você provavelmente está offline', - 'offline_unreachable' => 'O Firefly III está inacessível. Seu dispositivo está offline ou o servidor não está funcionando.', - 'offline_github' => 'Caso você tenha certeza de que seu dispositivo e o servidor estão online, por favor, abra um ticket no GitHub.', - + 'collect_info' => 'Por favor, colete mais informações no diretório storage/logs, onde você encontrará os arquivos de log. Se você estiver executando o Docker, use docker logs -f [container].', + 'collect_info_more' => 'Você pode ler mais sobre a coleta de informações de erros no FAQ.', + 'github_help' => 'Obtenha ajuda no GitHub', + 'github_instructions' => 'Você é mais do que bem-vindo para abrir uma nova issue no GitHub..', + 'use_search' => 'Use a busca!', + 'include_info' => 'Incluir a informação desta página de debug.', + 'tell_more' => 'Nos diga mais do que "ele retorna Ops!"', + 'include_logs' => 'Inclua os logs de erro (veja acima).', + 'what_did_you_do' => 'Nos diga o que você estava fazendo.', + 'offline_header' => 'Você provavelmente está offline', + 'offline_unreachable' => 'O Firefly III está inacessível. Seu dispositivo está offline ou o servidor não está funcionando.', + 'offline_github' => 'Caso você tenha certeza de que seu dispositivo e o servidor estão online, por favor, abra um ticket no GitHub.', ]; diff --git a/resources/lang/pt_BR/firefly.php b/resources/lang/pt_BR/firefly.php index 7336a2fc13..394c9bbd12 100644 --- a/resources/lang/pt_BR/firefly.php +++ b/resources/lang/pt_BR/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Fechar', - 'actions' => 'Ações', - 'edit' => 'Editar', - 'delete' => 'Apagar', - 'split' => 'Dividir', - 'single_split' => 'Divisão', - 'clone' => 'Clonar', - 'confirm_action' => 'Confirmar ação', - 'last_seven_days' => 'Últimos sete dias', - 'last_thirty_days' => 'Últimos 30 dias', - 'last_180_days' => 'Últimos 180 dias', - 'month_to_date' => 'Mês até a data', - 'year_to_date' => 'Ano até à data', - 'YTD' => 'Acumulado no ano', - 'welcome_back' => 'O que está acontecendo?', - 'everything' => 'Tudo', - 'today' => 'hoje', - 'customRange' => 'Intervalo Personalizado', - 'date_range' => 'Intervalo de datas', - 'apply' => 'Aplicar', - 'select_date' => 'Selecione a data..', - 'cancel' => 'Cancelar', - 'from' => 'De', - 'to' => 'Até', - 'structure' => 'Estrutura', - 'help_translating' => 'Este texto de ajuda ainda não está disponível no seu idioma. Que tal ajudar a traduzí-lo?', - 'showEverything' => 'Mostrar tudo', - 'never' => 'Nunca', - 'no_results_for_empty_search' => 'Sua pesquisa estava vazia, então nada foi encontrado.', - 'removed_amount' => ':amount removido', - 'added_amount' => ':amount adicionada', - 'asset_account_role_help' => 'Quaisquer opções extras resultantes da sua escolha pode ser definido mais tarde.', - 'Opening balance' => 'Saldo inicial', - 'create_new_stuff' => 'Criar novas coisas', - 'new_withdrawal' => 'Nova retirada', - 'create_new_transaction' => 'Criar nova transação', - 'sidebar_frontpage_create' => 'Criar', - 'new_transaction' => 'Nova transação', - 'no_rules_for_bill' => 'Esta fatura não tem regras associadas a ela.', - 'go_to_asset_accounts' => 'Veja suas contas ativas', - 'go_to_budgets' => 'Vá para seus orçamentos', - 'go_to_withdrawals' => 'Vá para seus saques', - 'clones_journal_x' => 'Esta transação é um clone de ":description" (#:id)', - 'go_to_categories' => 'Vá para suas categorias', - 'go_to_bills' => 'Vá para suas faturas', - 'go_to_expense_accounts' => 'Veja suas despesas', - 'go_to_revenue_accounts' => 'Veja suas receitas', - 'go_to_piggies' => 'Vá para sua poupança', - 'new_deposit' => 'Novo depósito', - 'new_transfer' => 'Nova transferência', - 'new_transfers' => 'Nova transferência', - 'new_asset_account' => 'Nova conta de ativo', - 'new_expense_account' => 'Nova conta de despesa', - 'new_revenue_account' => 'Nova conta de receita', - 'new_liabilities_account' => 'Novo passivo', - 'new_budget' => 'Novo orçamento', - 'new_bill' => 'Nova fatura', - 'block_account_logout' => 'Você foi desconectado. Contas bloqueadas não podem usar este site. Você se registrou com um email válido?', - 'flash_success' => 'Sucesso!', - 'flash_info' => 'Mensagem', - 'flash_warning' => 'Atenção!', - 'flash_error' => 'Erro!', - 'flash_danger' => 'Perigo!', - 'flash_info_multiple' => 'Há uma mensagem|Existem :count mensagens', - 'flash_error_multiple' => 'Houve um erro|Houve :count erros', - 'net_worth' => 'Valor Líquido', - 'help_for_this_page' => 'Ajuda para esta página', - 'help_for_this_page_body' => 'Você pode encontrar mais informações sobre esta página na documentação.', - 'two_factor_welcome' => 'Olá!', - 'two_factor_enter_code' => 'Para continuar, por favor, digite seu código de autenticação em duas etapas. Seu aplicativo pode gerá-lo para você.', - 'two_factor_code_here' => 'Insira o código aqui', - 'two_factor_title' => 'Autenticação em duas etapas', - 'authenticate' => 'Autenticar', - 'two_factor_forgot_title' => 'Perdeu autenticação em duas etapas', - 'two_factor_forgot' => 'Esqueci minha autenticação em duas etapas.', - 'two_factor_lost_header' => 'Perdeu sua autenticação em duas etapas?', - 'two_factor_lost_intro' => 'Se você perdeu seus códigos de backup também, você tem azar. Isso não é algo que você pode corrigir a partir da interface da web. Você tem duas escolhas.', - 'two_factor_lost_fix_self' => 'Caso você execute sua própria instância do Firefly III, leia este item no FAQ para instruções.', - 'two_factor_lost_fix_owner' => 'Caso contrário, o proprietário do site :site_owner e peça para redefinir a sua autenticação de duas etapas.', - 'mfa_backup_code' => 'Você usou um código de backup para acessar o Firefly III. Não pode ser usado novamente, então cruze-o na sua lista.', - 'pref_two_factor_new_backup_codes' => 'Obter novos códigos de backup', - 'pref_two_factor_backup_code_count' => 'Você tem :count código de backup válido.|Você tem :count códigos de backup válidos.', - '2fa_i_have_them' => 'Eu os armazenei!', - 'warning_much_data' => ':days dias de dados podem demorar um pouco para carregar.', - 'registered' => 'Você se registrou com sucesso!', - 'Default asset account' => 'Conta padrão', - 'no_budget_pointer' => 'Parece que você ainda não tem orçamentos. Você deve criar alguns na página de orçamentos. Orçamentos podem ajudá-lo a manter o controle das despesas.', - 'no_bill_pointer' => 'Parece que você ainda não tem faturas. Você deve criar algumas em faturas. Faturas podem ajudar você a manter o controle de despesas.', - 'Savings account' => 'Conta poupança', - 'Credit card' => 'Cartão de crédito', - 'source_accounts' => 'Conta de origem|Contas de origem', - 'destination_accounts' => 'Conta de destino|Contas de destino', - 'user_id_is' => 'Seu id de usuário é :user', - 'field_supports_markdown' => 'Este campo suporta Markdown.', - 'need_more_help' => 'Se você precisa de mais ajuda usando o Firefly III, por favor abra um ticket no Github.', - 'reenable_intro_text' => 'Você também pode reabilitar o guia de introdução.', - 'intro_boxes_after_refresh' => 'As caixas de introdução reaparecerão quando você atualizar a página.', - 'show_all_no_filter' => 'Mostre todas as transações sem agrupá-las por data.', - 'expenses_by_category' => 'Despesa por categoria', - 'expenses_by_budget' => 'Despesas pelo orçamento', - 'income_by_category' => 'Receitas por categoria', - 'expenses_by_asset_account' => 'Despesas por conta de ativos', - 'expenses_by_expense_account' => 'Despesas por conta de despesa', - 'cannot_redirect_to_account' => 'Firefly III não pode redirecioná-lo para a página correta. Minhas desculpas.', - 'sum_of_expenses' => 'Soma das despesas', - 'sum_of_income' => 'Soma da renda', - 'liabilities' => 'Passivos', - 'spent_in_specific_budget' => 'Gasto no orçamento ":budget"', - 'spent_in_specific_double' => 'Gasto na conta ":account"', - 'earned_in_specific_double' => 'Ganho na conta ":account"', - 'source_account' => 'Conta origem', - 'source_account_reconciliation' => 'Você não pode editar a conta de origem de uma transação de reconciliação.', - 'destination_account' => 'Conta destino', - 'destination_account_reconciliation' => 'Você não pode editar a conta de origem de uma transação de reconciliação.', - 'sum_of_expenses_in_budget' => 'Gasto total no orçamento ":budget"', - 'left_in_budget_limit' => 'Restante para gastar de acordo com o orçamento', - 'current_period' => 'Período atual', - 'show_the_current_period_and_overview' => 'Mostrar o período atual e visão geral', - 'pref_languages_locale' => 'Para que um idioma diferente do inglês funcione corretamente, seu sistema operacional deve estar equipado com as informações locais corretas. Se estas não estiverem presentes, os dados de moeda, as datas e os montantes podem ser formatados incorretamente.', - 'budget_in_period' => 'Todas as transações para orçamento ":name" entre :start e :end na moeda :currency', - 'chart_budget_in_period' => 'Gráfico para todas as transações do orçamento ":name" entre :start e :end em :currency', - 'chart_budget_in_period_only_currency' => 'O valor que você orçou foi em :currency, então este gráfico mostrará apenas transações em :currency.', - 'chart_account_in_period' => 'Gráfico para todas as transações para a conta ":name" (:balance) entre :start e :end', - 'chart_category_in_period' => 'Gráfico para todas as transações para a categoria ":name" entre :start e :end', - 'chart_category_all' => 'Gráfico para todas as transações para a categoria ":name"', - 'clone_withdrawal' => 'Clonar esta saída', - 'clone_deposit' => 'Clonar esta entrada', - 'clone_transfer' => 'Clonar esta transferência', - 'multi_select_no_selection' => 'Nenhum selecionado', - 'multi_select_select_all' => 'Selecionar tudo', - 'multi_select_n_selected' => 'selecionado', - 'multi_select_all_selected' => 'Todos selecionados', - 'multi_select_filter_placeholder' => 'Encontrar..', - 'intro_next_label' => 'Próximo', - 'intro_prev_label' => 'Anterior', - 'intro_skip_label' => 'Pular', - 'intro_done_label' => 'Concluído', - 'between_dates_breadcrumb' => 'Entre :start e :end', - 'all_journals_without_budget' => 'Todas as transações sem um orçamento', - 'journals_without_budget' => 'Transações sem um orçamento', - 'all_journals_without_category' => 'Todas as transações sem uma categoria', - 'journals_without_category' => 'Transações sem uma categoria', - 'all_journals_for_account' => 'Todas as transações para conta :name', - 'chart_all_journals_for_account' => 'Gráfico de todas as transações para conta :name', - 'journals_in_period_for_account' => 'Todas as transações para conta :name entre :start e :end', - 'journals_in_period_for_account_js' => 'Todas as transações para conta {title} entre {start} e {end}', - 'transferred' => 'Transferido', - 'all_withdrawal' => 'Todas as despesas', - 'all_transactions' => 'Todas as transações', - 'title_withdrawal_between' => 'Todas as despesas entre :start e :end', - 'all_deposit' => 'Todas as receitas', - 'title_deposit_between' => 'Todas as receitas entre :start e :end', - 'all_transfers' => 'Todas as transferências', - 'title_transfers_between' => 'Todas as transferências entre :start e :end', - 'all_transfer' => 'Todas as transferências', - 'all_journals_for_tag' => 'Todas as transações para tag ":tag"', - 'title_transfer_between' => 'Todas as transferências entre :start e :end', - 'all_journals_for_category' => 'Todas as transações para categoria :name', - 'all_journals_for_budget' => 'Todas as transações para orçamento :name', - 'chart_all_journals_for_budget' => 'Gráfico de todas as transações para orçamento :name', - 'journals_in_period_for_category' => 'Todas as transações para a categoria :name entre :start e :end', - 'journals_in_period_for_tag' => 'Todas as transações para tag :tag entre :start e :end', - 'not_available_demo_user' => 'O recurso que você tenta acessar não está disponível para usuários da demo.', - 'exchange_rate_instructions' => 'A conta ativa "@name" aceita apenas transações em @native_currency. Se você deseja usar @foreign_currency em vez disso, verifique se a quantidade em @native_currency também é conhecida:', - 'transfer_exchange_rate_instructions' => 'A conta ativa de origem "@source_name" aceita apenas transações em @source_currency. A conta ativa de destino "@dest_name" aceita apenas transações em @dest_currency. Você deve fornecer o valor transferido corretamente em ambas as moedas.', - 'transaction_data' => 'Dados de transação', - 'invalid_server_configuration' => 'Configuração do servidor inválida', - 'invalid_locale_settings' => 'O Firefly III não é capaz de formatar quantidades monetárias porque está faltando os pacotes necessários no seu servidor. Existem instruções sobre como fazer isso.', - 'quickswitch' => 'Mudança rápida', - 'sign_in_to_start' => 'Faça login para iniciar sua sessão', - 'sign_in' => 'Entrar', - 'register_new_account' => 'Cadastrar uma nova conta', - 'forgot_my_password' => 'Esqueci minha senha', - 'problems_with_input' => 'Houve alguns problemas com a sua entrada.', - 'reset_password' => 'Redefinir sua senha', - 'button_reset_password' => 'Redefinir senha', - 'reset_button' => 'Redefinir', - 'want_to_login' => 'Eu quero fazer o login', - 'login_page_title' => 'Login no Firefly III', - 'register_page_title' => 'Registrar no Firefly III', - 'forgot_pw_page_title' => 'Esqueceu sua senha do Firefly III', - 'reset_pw_page_title' => 'Redefinir sua senha para Firefly III', - 'cannot_reset_demo_user' => 'Você não pode redefinir a senha do usuário demo.', - 'no_att_demo_user' => 'O usuário de demonstração não pode enviar anexos.', - 'button_register' => 'Registrar', - 'authorization' => 'Autorização', - 'active_bills_only' => 'apenas faturas ativas', - 'active_bills_only_total' => 'todas as faturas ativas', - 'active_exp_bills_only' => 'somente faturas ativas e esperadas', - 'active_exp_bills_only_total' => 'somente todas as faturas ativas e esperadas', - 'per_period_sum_1D' => 'Custos diários esperados', - 'per_period_sum_1W' => 'Custos semanais esperados', - 'per_period_sum_1M' => 'Custos mensais esperados', - 'per_period_sum_3M' => 'Custos trimestrais esperados', - 'per_period_sum_6M' => 'Custos semestrais esperados', - 'per_period_sum_1Y' => 'Custos anuais esperados', - 'average_per_bill' => 'média por fatura', - 'expected_total' => 'total esperado', - 'reconciliation_account_name' => 'Reconciliação :name (:currency)', - 'saved' => 'Salvo', - 'advanced_options' => 'Opções avançadas', - 'advanced_options_explain' => 'Algumas páginas no Firefly III têm opções avançadas escondidas atrás deste botão. Esta página não tem nada elaborado aqui, mas confira as outras!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Fechar', + 'actions' => 'Ações', + 'edit' => 'Editar', + 'delete' => 'Apagar', + 'split' => 'Dividir', + 'single_split' => 'Divisão', + 'clone' => 'Clonar', + 'clone_and_edit' => 'Clonar e editar', + 'confirm_action' => 'Confirmar ação', + 'last_seven_days' => 'Últimos sete dias', + 'last_thirty_days' => 'Últimos 30 dias', + 'last_180_days' => 'Últimos 180 dias', + 'month_to_date' => 'Começo do mês até hoje', + 'year_to_date' => 'Começo do ano até hoje', + 'YTD' => 'Acumulado no ano', + 'welcome_back' => 'O que está acontecendo?', + 'everything' => 'Tudo', + 'today' => 'hoje', + 'customRange' => 'Intervalo personalizado', + 'date_range' => 'Intervalo de datas', + 'apply' => 'Aplicar', + 'select_date' => 'Selecione a data..', + 'cancel' => 'Cancelar', + 'from' => 'De', + 'to' => 'Até', + 'structure' => 'Estrutura', + 'help_translating' => 'Este texto de ajuda ainda não está disponível no seu idioma. Que tal ajudar a traduzí-lo?', + 'showEverything' => 'Mostrar tudo', + 'never' => 'Nunca', + 'no_results_for_empty_search' => 'Sua pesquisa estava vazia, então nada foi encontrado.', + 'removed_amount' => 'Removido :amount', + 'added_amount' => 'Adicionado :amount', + 'asset_account_role_help' => 'Quaisquer opções extras resultantes da sua escolha podem ser definidas depois.', + 'Opening balance' => 'Saldo inicial', + 'create_new_stuff' => 'Criar coisas novas', + 'new_withdrawal' => 'Nova saída', + 'create_new_transaction' => 'Criar nova transação', + 'sidebar_frontpage_create' => 'Criar', + 'new_transaction' => 'Nova transação', + 'no_rules_for_bill' => 'Esta fatura não tem regras associadas a ela.', + 'go_to_asset_accounts' => 'Veja suas contas de ativos', + 'go_to_budgets' => 'Vá para seus orçamentos', + 'go_to_withdrawals' => 'Vá para seus saques', + 'clones_journal_x' => 'Esta transação é um clone de ":description" (#:id)', + 'go_to_categories' => 'Vá para suas categorias', + 'go_to_bills' => 'Vá para suas faturas', + 'go_to_expense_accounts' => 'Veja suas despesas', + 'go_to_revenue_accounts' => 'Veja suas receitas', + 'go_to_piggies' => 'Vá para seus cofrinhos', + 'new_deposit' => 'Nova entrada', + 'new_transfer' => 'Nova transferência', + 'new_transfers' => 'Nova transferência', + 'new_asset_account' => 'Nova conta de ativo', + 'new_expense_account' => 'Nova conta de despesa', + 'new_revenue_account' => 'Nova conta de receita', + 'new_liabilities_account' => 'Novo passivo', + 'new_budget' => 'Novo orçamento', + 'new_bill' => 'Nova conta', + 'block_account_logout' => 'Você foi desconectado. Contas bloqueadas não podem usar este site. Você se registrou com um email válido?', + 'flash_success' => 'Sucesso!', + 'flash_info' => 'Mensagem', + 'flash_warning' => 'Atenção!', + 'flash_error' => 'Erro!', + 'flash_danger' => 'Perigo!', + 'flash_info_multiple' => 'Há uma mensagem|Existem :count mensagens', + 'flash_error_multiple' => 'Houve um erro|Houve :count erros', + 'net_worth' => 'Patrimônio líquido', + 'help_for_this_page' => 'Ajuda para esta página', + 'help_for_this_page_body' => 'Você pode encontrar mais informações sobre esta página na documentação.', + 'two_factor_welcome' => 'Olá!', + 'two_factor_enter_code' => 'Para continuar, por favor, digite seu código de autenticação em duas etapas. Seu aplicativo pode gerá-lo para você.', + 'two_factor_code_here' => 'Insira o código aqui', + 'two_factor_title' => 'Autenticação em duas etapas', + 'authenticate' => 'Autenticar', + 'two_factor_forgot_title' => 'Autenticação em duas etapas perdida', + 'two_factor_forgot' => 'Esqueci minha autenticação em duas etapas.', + 'two_factor_lost_header' => 'Perdeu sua autenticação em duas etapas?', + 'two_factor_lost_intro' => 'Se você perdeu seus códigos de backup também, você tem azar. Isso não é algo que você pode corrigir a partir da interface da web. Você tem duas escolhas.', + 'two_factor_lost_fix_self' => 'Se você roda sua própria instância do Firefly III, leia :site_owner, e peça que redefina sua autenticação de duas etapas.', + 'mfa_backup_code' => 'Você usou um código de backup para acessar o Firefly III. Não pode ser usado novamente, então cruze-o na sua lista.', + 'pref_two_factor_new_backup_codes' => 'Obter novos códigos de backup', + 'pref_two_factor_backup_code_count' => 'Você tem :count código de backup válido.|Você tem :count códigos de backup válidos.', + '2fa_i_have_them' => 'Eu os armazenei!', + 'warning_much_data' => ':days dias de dados podem demorar um pouco para carregar.', + 'registered' => 'Você se registrou com sucesso!', + 'Default asset account' => 'Conta de ativo padrão', + 'no_budget_pointer' => 'Parece que você ainda não tem orçamentos. Você deve criar alguns na página de orçamentos. Orçamentos podem ajudá-lo a manter o controle das despesas.', + 'no_bill_pointer' => 'Parece que você ainda não tem faturas. Você deve criar algumas em faturas. Faturas podem ajudar você a manter o controle de despesas.', + 'Savings account' => 'Conta poupança', + 'Credit card' => 'Cartão de crédito', + 'source_accounts' => 'Conta de origem|Contas de origem', + 'destination_accounts' => 'Conta de destino|Contas de destino', + 'user_id_is' => 'Seu id de usuário é :user', + 'field_supports_markdown' => 'Este campo suporta Markdown.', + 'need_more_help' => 'Se você precisa de mais ajuda usando o Firefly III, por favor abra um ticket no Github.', + 'reenable_intro_text' => 'Você também pode reabilitar o guia de introdução.', + 'intro_boxes_after_refresh' => 'As caixas de introdução reaparecerão quando você atualizar a página.', + 'show_all_no_filter' => 'Mostre todas as transações sem agrupá-las por data.', + 'expenses_by_category' => 'Despesa por categoria', + 'expenses_by_budget' => 'Despesas pelo orçamento', + 'income_by_category' => 'Receitas por categoria', + 'expenses_by_asset_account' => 'Despesas por conta de ativos', + 'expenses_by_expense_account' => 'Despesas por conta de despesa', + 'cannot_redirect_to_account' => 'Firefly III não pode redirecioná-lo para a página correta. Minhas desculpas.', + 'sum_of_expenses' => 'Soma das despesas', + 'sum_of_income' => 'Soma da renda', + 'liabilities' => 'Passivos', + 'spent_in_specific_budget' => 'Gasto no orçamento ":budget"', + 'spent_in_specific_double' => 'Gasto na conta ":account"', + 'earned_in_specific_double' => 'Ganho na conta ":account"', + 'source_account' => 'Conta origem', + 'source_account_reconciliation' => 'Você não pode editar a conta de origem de uma transação de reconciliação.', + 'destination_account' => 'Conta destino', + 'destination_account_reconciliation' => 'Você não pode editar a conta destino de uma transação de reconciliação.', + 'sum_of_expenses_in_budget' => 'Gasto total no orçamento ":budget"', + 'left_in_budget_limit' => 'Restante para gastar de acordo com o orçamento', + 'current_period' => 'Período atual', + 'show_the_current_period_and_overview' => 'Mostrar o período atual e visão geral', + 'pref_languages_locale' => 'Para que um idioma diferente do inglês funcione corretamente, seu sistema operacional deve estar configurado com as informações locais corretas. Se estas não estiverem presentes, os dados de moeda, as datas e os montantes podem ser formatados incorretamente.', + 'budget_in_period' => 'Todas as transações para orçamento ":name" entre :start e :end na moeda :currency', + 'chart_budget_in_period' => 'Gráfico para todas as transações do orçamento ":name" entre :start e :end em :currency', + 'chart_budget_in_period_only_currency' => 'O valor que você orçou foi em :currency, então este gráfico mostrará apenas transações em :currency.', + 'chart_account_in_period' => 'Gráfico para todas as transações para a conta ":name" (:balance) entre :start e :end', + 'chart_category_in_period' => 'Gráfico para todas as transações para a categoria ":name" entre :start e :end', + 'chart_category_all' => 'Gráfico para todas as transações para a categoria ":name"', + 'clone_withdrawal' => 'Clonar esta saída', + 'clone_deposit' => 'Clonar esta entrada', + 'clone_transfer' => 'Clonar esta transferência', + 'multi_select_no_selection' => 'Nenhum selecionado', + 'multi_select_select_all' => 'Selecionar tudo', + 'multi_select_n_selected' => 'selecionado', + 'multi_select_all_selected' => 'Todos selecionados', + 'multi_select_filter_placeholder' => 'Encontrar..', + 'intro_next_label' => 'Próximo', + 'intro_prev_label' => 'Anterior', + 'intro_skip_label' => 'Pular', + 'intro_done_label' => 'Concluído', + 'between_dates_breadcrumb' => 'Entre :start e :end', + 'all_journals_without_budget' => 'Todas as transações sem um orçamento', + 'journals_without_budget' => 'Transações sem um orçamento', + 'all_journals_without_category' => 'Todas as transações sem uma categoria', + 'journals_without_category' => 'Transações sem uma categoria', + 'all_journals_for_account' => 'Todas as transações para conta :name', + 'chart_all_journals_for_account' => 'Gráfico de todas as transações para conta :name', + 'journals_in_period_for_account' => 'Todas as transações para conta :name entre :start e :end', + 'journals_in_period_for_account_js' => 'Todas as transações para conta {title} entre {start} e {end}', + 'transferred' => 'Transferido', + 'all_withdrawal' => 'Todas as despesas', + 'all_transactions' => 'Todas as transações', + 'title_withdrawal_between' => 'Todas as despesas entre :start e :end', + 'all_deposit' => 'Todas as receitas', + 'title_deposit_between' => 'Todas as receitas entre :start e :end', + 'all_transfers' => 'Todas as transferências', + 'title_transfers_between' => 'Todas as transferências entre :start e :end', + 'all_transfer' => 'Todas as transferências', + 'all_journals_for_tag' => 'Todas as transações para tag ":tag"', + 'title_transfer_between' => 'Todas as transferências entre :start e :end', + 'all_journals_for_category' => 'Todas as transações para categoria :name', + 'all_journals_for_budget' => 'Todas as transações para orçamento :name', + 'chart_all_journals_for_budget' => 'Gráfico de todas as transações para orçamento :name', + 'journals_in_period_for_category' => 'Todas as transações para a categoria :name entre :start e :end', + 'journals_in_period_for_tag' => 'Todas as transações para tag :tag entre :start e :end', + 'not_available_demo_user' => 'O recurso que você tenta acessar não está disponível para usuários da demo.', + 'exchange_rate_instructions' => 'A conta ativa "@name" aceita apenas transações em @native_currency. Se você deseja usar @foreign_currency em vez disso, verifique se a quantidade em @native_currency também é conhecida:', + 'transfer_exchange_rate_instructions' => 'A conta ativa de origem "@source_name" aceita apenas transações em @source_currency. A conta ativa de destino "@dest_name" aceita apenas transações em @dest_currency. Você deve fornecer o valor transferido corretamente em ambas as moedas.', + 'transaction_data' => 'Dados de transação', + 'invalid_server_configuration' => 'Configuração do servidor inválida', + 'invalid_locale_settings' => 'O Firefly III não é capaz de formatar valores monetários porque seu servidor não tem os pacotes necessários. Veja as instruções de como resolver isso.', + 'quickswitch' => 'Mudança rápida', + 'sign_in_to_start' => 'Faça login para iniciar sua sessão', + 'sign_in' => 'Entrar', + 'register_new_account' => 'Cadastrar uma nova conta', + 'forgot_my_password' => 'Esqueci minha senha', + 'problems_with_input' => 'Houve alguns problemas com a sua entrada.', + 'reset_password' => 'Redefinir sua senha', + 'button_reset_password' => 'Redefinir senha', + 'reset_button' => 'Redefinir', + 'want_to_login' => 'Eu quero fazer o login', + 'login_page_title' => 'Login no Firefly III', + 'register_page_title' => 'Registrar no Firefly III', + 'forgot_pw_page_title' => 'Esqueceu sua senha do Firefly III', + 'reset_pw_page_title' => 'Redefinir sua senha para Firefly III', + 'cannot_reset_demo_user' => 'Você não pode redefinir a senha do usuário demo.', + 'no_att_demo_user' => 'O usuário de demonstração não pode enviar anexos.', + 'button_register' => 'Registrar', + 'authorization' => 'Autorização', + 'active_bills_only' => 'apenas faturas ativas', + 'active_bills_only_total' => 'todas as faturas ativas', + 'active_exp_bills_only' => 'somente faturas ativas e esperadas', + 'active_exp_bills_only_total' => 'todas as faturas ativas e esperadas', + 'per_period_sum_1D' => 'Custos diários esperados', + 'per_period_sum_1W' => 'Custos semanais esperados', + 'per_period_sum_1M' => 'Custos mensais esperados', + 'per_period_sum_3M' => 'Custos trimestrais esperados', + 'per_period_sum_6M' => 'Custos semestrais esperados', + 'per_period_sum_1Y' => 'Custos anuais esperados', + 'average_per_bill' => 'média por fatura', + 'expected_total' => 'total esperado', + 'reconciliation_account_name' => 'Reconciliação :name (:currency)', + 'saved' => 'Salvo', + 'advanced_options' => 'Opções avançadas', + 'advanced_options_explain' => 'Algumas páginas no Firefly III têm opções avançadas escondidas atrás deste botão. Esta página não tem nada elaborado aqui, mas confira as outras!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'Não há mensagens de webhook', - 'webhook_trigger_STORE_TRANSACTION' => 'Após criação da transação', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Após atualização da transação', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Após exclusão da transação', - 'webhook_response_TRANSACTIONS' => 'Detalhes da transação', - 'webhook_response_ACCOUNTS' => 'Detalhes da conta', - 'webhook_response_none_NONE' => 'Sem detalhes', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspecionar', - 'create_new_webhook' => 'Criar novo webhook', - 'webhooks_create_breadcrumb' => 'Criar novo webhook', - 'webhook_trigger_form_help' => 'Indica em que evento o webhook será acionado', - 'webhook_response_form_help' => 'Indica o que o webhook deve enviar para a URL.', - 'webhook_delivery_form_help' => 'Em que formato o webhook deverá entregar os dados.', - 'webhook_active_form_help' => 'O webhook deverá estar ativo ou não será chamado.', - 'stored_new_webhook' => 'Novo webhook armazenado: ":title"', - 'delete_webhook' => 'Excluir webhook', - 'deleted_webhook' => 'Webhook ":title" excluído', - 'edit_webhook' => 'Editar webhook ":title"', - 'updated_webhook' => 'Webhook ":title" atualizado', - 'edit_webhook_js' => 'Editar webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'O webhook foi acionado na transação indicada. Por favor, aguarde os resultados aparecerem.', - 'webhook_messages' => 'Mensagem do webhook', - 'view_message' => 'Ver mensagem', - 'view_attempts' => 'Ver tentativas que falharam', - 'message_content_title' => 'Conteúdo da mensagem do webhook', - 'message_content_help' => 'Este é o conteúdo da mensagem enviada (ou a tentativa) usando este webhook.', - 'attempt_content_title' => 'Tentativas do webhook', - 'attempt_content_help' => 'Estas são todas as tentativas mal sucedidas do webhook enviar mensagem para a URL configurada. Depois de algum tempo, Firefly III parará de tentar.', - 'no_attempts' => 'Não há tentativas mal sucedidas. Esta é uma coisa boa!', - 'webhook_attempt_at' => 'Tentativa em {moment}', - 'logs' => 'Registros', - 'response' => 'Resposta', - 'visit_webhook_url' => 'Acesse a URL do webhook', - 'reset_webhook_secret' => 'Redefinir chave do webhook', - 'webhook_stored_link' => 'Webhooh #{ID} ("{title}") foi salva.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") foi atualizado.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'desabilitado', + 'no_webhook_messages' => 'Não há mensagens de webhook', + 'webhook_trigger_STORE_TRANSACTION' => 'Após criação da transação', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Após atualização da transação', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Após exclusão da transação', + 'webhook_response_TRANSACTIONS' => 'Detalhes da transação', + 'webhook_response_ACCOUNTS' => 'Detalhes da conta', + 'webhook_response_none_NONE' => 'Sem detalhes', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspecionar', + 'create_new_webhook' => 'Criar novo webhook', + 'webhooks_create_breadcrumb' => 'Criar novo webhook', + 'webhook_trigger_form_help' => 'Indica em que evento o webhook será acionado', + 'webhook_response_form_help' => 'Indica o que o webhook deve enviar para a URL.', + 'webhook_delivery_form_help' => 'Em que formato o webhook deverá entregar os dados.', + 'webhook_active_form_help' => 'O webhook deverá estar ativo ou não será chamado.', + 'stored_new_webhook' => 'Novo webhook armazenado: ":title"', + 'delete_webhook' => 'Excluir webhook', + 'deleted_webhook' => 'Webhook ":title" excluído', + 'edit_webhook' => 'Editar webhook ":title"', + 'updated_webhook' => 'Webhook ":title" atualizado', + 'edit_webhook_js' => 'Editar webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'O webhook foi acionado na transação indicada. Por favor, aguarde os resultados aparecerem.', + 'webhook_messages' => 'Mensagem do webhook', + 'view_message' => 'Ver mensagem', + 'view_attempts' => 'Ver tentativas que falharam', + 'message_content_title' => 'Conteúdo da mensagem do webhook', + 'message_content_help' => 'Este é o conteúdo da mensagem enviada (ou a tentativa) usando este webhook.', + 'attempt_content_title' => 'Tentativas do webhook', + 'attempt_content_help' => 'Estas são todas as tentativas mal sucedidas do webhook enviar mensagem para a URL configurada. Depois de algum tempo, Firefly III parará de tentar.', + 'no_attempts' => 'Não há tentativas mal sucedidas. Esta é uma coisa boa!', + 'webhook_attempt_at' => 'Tentativa em {moment}', + 'logs' => 'Registros', + 'response' => 'Resposta', + 'visit_webhook_url' => 'Acesse a URL do webhook', + 'reset_webhook_secret' => 'Redefinir chave do webhook', + 'webhook_stored_link' => 'Webhooh #{ID} ("{title}") foi salva.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") foi atualizado.', // API access - 'authorization_request' => 'Firefly III v:version Pedido de autorização', - 'authorization_request_intro' => 'O aplicativo ":client" está solicitando permissão para acessar sua administração financeira. Você deseja autorizar o acesso a estes registros a :client?', - 'authorization_request_site' => 'Você será redirecionado para :url que então será capaz de acessar seus dados do Firefly III.', - 'authorization_request_invalid' => 'Este pedido de acesso é inválido. Por favor, nunca mais acesse este link novamente.', - 'scopes_will_be_able' => 'Esta aplicação será capaz de:', - 'button_authorize' => 'Autorizar', - 'none_in_select_list' => '(nenhum)', - 'no_piggy_bank' => '(nenhum cofrinho)', - 'name_in_currency' => ':name em :currency', - 'paid_in_currency' => 'Pago em :currency', - 'unpaid_in_currency' => 'Não pago em :currency', - 'is_alpha_warning' => 'Você está executando uma versão ALPHA. Cuidado com bugs e problemas.', - 'is_beta_warning' => 'Você está executando uma versão BETA. Cuidado com bugs e problemas.', - 'all_destination_accounts' => 'Contas de destino', - 'all_source_accounts' => 'Contas de origem', - 'back_to_index' => 'Voltar ao índice', - 'cant_logout_guard' => 'Firefly III não pode te deslogar.', - 'internal_reference' => 'Referência interna', + 'authorization_request' => 'Firefly III v:version Pedido de autorização', + 'authorization_request_intro' => 'O aplicativo ":client" está solicitando permissão para acessar sua administração financeira. Você deseja autorizar o acesso a estes registros a :client?', + 'authorization_request_site' => 'Você será redirecionado para :url que então será capaz de acessar seus dados do Firefly III.', + 'authorization_request_invalid' => 'Este pedido de acesso é inválido. Por favor, nunca mais acesse este link novamente.', + 'scopes_will_be_able' => 'Esta aplicação será capaz de:', + 'button_authorize' => 'Autorizar', + 'none_in_select_list' => '(nenhum)', + 'no_piggy_bank' => '(nenhum cofrinho)', + 'name_in_currency' => ':name em :currency', + 'paid_in_currency' => 'Pago em :currency', + 'unpaid_in_currency' => 'Não pago em :currency', + 'is_alpha_warning' => 'Você está executando uma versão ALPHA. Cuidado com bugs e problemas.', + 'is_beta_warning' => 'Você está executando uma versão BETA. Cuidado com bugs e problemas.', + 'all_destination_accounts' => 'Contas de destino', + 'all_source_accounts' => 'Contas de origem', + 'back_to_index' => 'Voltar ao índice', + 'cant_logout_guard' => 'Firefly III não pode te deslogar.', + 'internal_reference' => 'Referência interna', // check for updates: - 'update_check_title' => 'Verificar Atualizações', - 'admin_update_check_title' => 'Verificar atualização automaticamente', - 'admin_update_check_explain' => 'O Firefly lll pode checar por atualizações automaticamente. Quando você ativa essa configuração, o servidor de atualização do Firefly lll será contatado para ver se uma nova versão está disponível. Quando estiver, você receberá uma notificação. Você pode testar essa notificação utilizando o botão à direita. Por favor, indique abaixo se você quer que o Firefly lll verifique por atualizações.', - 'check_for_updates_permission' => 'O Firefly III pode verificar atualizações, mas precisa da sua permissão para fazê-lo. Acesse a administração para indicar se você gostaria que esse recurso fosse ativado.', - 'updates_ask_me_later' => 'Pergunte-me depois', - 'updates_do_not_check' => 'Não verifique se há atualizações', - 'updates_enable_check' => 'Habilitar a verificação de atualizações', - 'admin_update_check_now_title' => 'Verifique se há atualizações agora', - 'admin_update_check_now_explain' => 'Se você pressionar o botão, o Firefly III verá se sua versão atual é a mais recente.', - 'check_for_updates_button' => 'Verifique agora!', - 'update_new_version_alert' => 'Uma nova versão do Firefly lll está disponível. Você está utilizando a versão :your_version, e a nova é a :new_version, que foi lançada no dia :date.', - 'update_version_beta' => 'Esta versão é uma versão BETA. Você pode encontrar problemas.', - 'update_version_alpha' => 'Esta versão é uma versão ALPHA. Você pode encontrar problemas.', - 'update_current_version_alert' => 'Você está utilizando a versão :version, que é a última disponível.', - 'update_newer_version_alert' => 'Você está utilizando a versão :your_version, que é mais nova do que a mais recente :new_version.', - 'update_check_error' => 'Ocorreu um erro durante a verificação de atualizações: :error', - 'unknown_error' => 'Erro desconhecido. Desculpe por isso.', - 'just_new_release' => 'Uma nova versão está disponível! A versão :version foi lançada no dia :date. Esse lançamento é bastante novo. Espere por alguns dias para que a nova versão se estabilize.', - 'disabled_but_check' => 'Você desativou a verificação de atualizações. Então, não se esqueça de verificar se há atualizações de vez em quando. Obrigado!', - 'admin_update_channel_title' => 'Atualizar canal', - 'admin_update_channel_explain' => 'O Firefly lll tem três "canais" de atualizações que determinam o quão à frente da curva você está em termos de funções, melhorias e bugs. Utilize o canal "beta" se você é aventureiro, e o "alpha" se você gosta de viver a vida perigosamente.', - 'update_channel_stable' => 'Estável. Tudo deve funcionar como esperado.', - 'update_channel_beta' => 'Beta. Novas funções, mas as coisas podem estar quebradas.', - 'update_channel_alpha' => 'Alfa. Nós tentamos várias coisas e usamos o que funcionar.', + 'update_check_title' => 'Verificar Atualizações', + 'admin_update_check_title' => 'Verificar atualização automaticamente', + 'admin_update_check_explain' => 'O Firefly lll pode checar por atualizações automaticamente. Quando você ativa essa configuração, o servidor de atualização do Firefly lll será contatado para ver se uma nova versão está disponível. Quando estiver, você receberá uma notificação. Você pode testar essa notificação utilizando o botão à direita. Por favor, indique abaixo se você quer que o Firefly lll verifique por atualizações.', + 'check_for_updates_permission' => 'O Firefly III pode verificar atualizações, mas precisa da sua permissão para fazê-lo. Acesse a administração para indicar se você gostaria que esse recurso fosse ativado.', + 'updates_ask_me_later' => 'Pergunte-me depois', + 'updates_do_not_check' => 'Não verifique se há atualizações', + 'updates_enable_check' => 'Habilitar a verificação de atualizações', + 'admin_update_check_now_title' => 'Verifique se há atualizações agora', + 'admin_update_check_now_explain' => 'Se você pressionar o botão, o Firefly III verá se sua versão atual é a mais recente.', + 'check_for_updates_button' => 'Verifique agora!', + 'update_new_version_alert' => 'Uma nova versão do Firefly lll está disponível. Você está utilizando a versão :your_version, e a nova é a :new_version, que foi lançada no dia :date.', + 'update_version_beta' => 'Esta versão é uma versão BETA. Você pode encontrar problemas.', + 'update_version_alpha' => 'Esta versão é uma versão ALPHA. Você pode encontrar problemas.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Você está utilizando a versão :version, que é a última disponível.', + 'update_newer_version_alert' => 'Você está utilizando a versão :your_version, que é mais nova do que a mais recente :new_version.', + 'update_check_error' => 'Ocorreu um erro durante a verificação de atualizações: :error', + 'unknown_error' => 'Erro desconhecido. Desculpe por isso.', + 'disabled_but_check' => 'Você desativou a verificação de atualizações. Então, não se esqueça de verificar se há atualizações de vez em quando. Obrigado!', + 'admin_update_channel_title' => 'Atualizar canal', + 'admin_update_channel_explain' => 'O Firefly lll tem três "canais" de atualizações que determinam o quão à frente da curva você está em termos de funções, melhorias e bugs. Utilize o canal "beta" se você é aventureiro, e o "alpha" se você gosta de viver a vida perigosamente.', + 'update_channel_stable' => 'Estável. Tudo deve funcionar como esperado.', + 'update_channel_beta' => 'Beta. Novas funções, mas as coisas podem estar quebradas.', + 'update_channel_alpha' => 'Alfa. Nós tentamos várias coisas e usamos o que funcionar.', // search - 'search' => 'Pesquisa', - 'search_query' => 'Pedido', - 'search_found_transactions' => 'Firefly III encontrou :count transação em :time segundos.|Firefly III encontrou :count transações em :time segundos.', - 'search_found_more_transactions' => 'Firefly III encontrou mais de :count transações em :time segundos.', - 'search_for_query' => 'Firefly III está procurando transações com todas estas palavras neles: :query', - 'invalid_operators_list' => 'Estes parâmetros de busca não são válidos e foram ignorados.', + 'search' => 'Pesquisa', + 'search_query' => 'Pedido', + 'search_found_transactions' => 'Firefly III encontrou :count transação em :time segundos.|Firefly III encontrou :count transações em :time segundos.', + 'search_found_more_transactions' => 'Firefly III encontrou mais de :count transações em :time segundos.', + 'search_for_query' => 'Firefly III está procurando transações com todas estas palavras neles: :query', + 'invalid_operators_list' => 'Estes parâmetros de busca não são válidos e foram ignorados.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'A data da transação é ":value"', 'search_modifier_not_date_on' => 'A data da transação não é ":value"', 'search_modifier_reconciled' => 'Transação está reconciliada', @@ -395,8 +396,8 @@ return [ 'search_modifier_not_has_no_bill' => 'A transação deve ter (qualquer) fatura', 'search_modifier_has_any_bill' => 'A transação deve ter uma fatura (qualquer)', 'search_modifier_not_has_any_bill' => 'A transação não pode ter uma fatura', - 'search_modifier_has_no_tag' => 'A transação não deve ter etiquetas', - 'search_modifier_not_has_any_tag' => 'A transação não deve ter etiquetas', + 'search_modifier_has_no_tag' => 'A transação não deve ter tags', + 'search_modifier_not_has_any_tag' => 'A transação não deve ter tags', 'search_modifier_not_has_no_tag' => 'A transação deve ter uma tag (qualquer)', 'search_modifier_has_any_tag' => 'A transação deve ter uma tag (qualquer)', 'search_modifier_notes_contains' => 'As notas de transação contém ":value"', @@ -467,7 +468,11 @@ return [ 'search_modifier_not_bill_is' => 'Fatura não é ":value"', 'search_modifier_transaction_type' => 'O tipo da transação é ":value"', 'search_modifier_not_transaction_type' => 'Tipo de transação não é ":value"', - 'search_modifier_tag_is' => 'A etiqueta é ":value"', + 'search_modifier_tag_is' => 'A tag é ":value"', + 'search_modifier_tag_contains' => 'Tag contém ":value"', + 'search_modifier_not_tag_contains' => 'Tag não contém ":value"', + 'search_modifier_tag_ends' => 'Tag termina com ":value"', + 'search_modifier_tag_starts' => 'Tag começa com ":value"', 'search_modifier_not_tag_is' => 'Nenhuma tag é ":value"', 'search_modifier_date_on_year' => 'Transação é no ano de ":value"', 'search_modifier_not_date_on_year' => 'Transação não está no ano ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Transação está no mês ou após ":value"', 'search_modifier_date_after_day' => 'Transação é depois ou no dia do mês de ":value"', - // new 'search_modifier_tag_is_not' => 'Nenhuma tag é ":value"', 'search_modifier_not_tag_is_not' => 'A tag é ":value"', @@ -573,17 +577,17 @@ return [ 'search_modifier_interest_date_after_year' => 'Data de juros da transação é após ou no ano de ":value"', 'search_modifier_interest_date_after_month' => 'Data de juros da transação é posterior ou no mês de ":value"', 'search_modifier_interest_date_after_day' => 'Data de juros da transação é após ou no dia do mês de ":value"', - 'search_modifier_book_date_on_year' => 'Data de registro da transação está no ano de ":value"', - 'search_modifier_book_date_on_month' => 'Data de registro da transação é no mês de ":value"', - 'search_modifier_book_date_on_day' => 'Data de registro da transação é no dia do mês de ":value"', - 'search_modifier_not_book_date_on_year' => 'Data de registro da transação não é no ano ":value"', - 'search_modifier_not_book_date_on_month' => 'Data de registro da transação não é no mês ":value"', - 'search_modifier_not_book_date_on_day' => 'Data de registro da transação não é no dia do mês ":value"', - 'search_modifier_book_date_before_year' => 'Data de registro da transação é antes ou no ano de ":value"', - 'search_modifier_book_date_before_month' => 'Data de registro da transação é antes ou no mês de ":value"', - 'search_modifier_book_date_before_day' => 'Data de registro da transação é antes ou no dia do mês de ":value"', - 'search_modifier_book_date_after_year' => 'Data de registro da transação é posterior ou no ano de ":value"', - 'search_modifier_book_date_after_month' => 'Data de registro da transação é posterior ou no mês de ":value"', + 'search_modifier_book_date_on_year' => 'Data de lançamento está no ano de ":value"', + 'search_modifier_book_date_on_month' => 'Data de lançamento é no mês de ":value"', + 'search_modifier_book_date_on_day' => 'Data de lançamento é no dia do mês de ":value"', + 'search_modifier_not_book_date_on_year' => 'Data de lançamento não é no ano ":value"', + 'search_modifier_not_book_date_on_month' => 'Data de lançamento não é no mês ":value"', + 'search_modifier_not_book_date_on_day' => 'Data de lançamento não é no dia do mês ":value"', + 'search_modifier_book_date_before_year' => 'Data de lançamento é antes ou no ano de ":value"', + 'search_modifier_book_date_before_month' => 'Data de lançamento é antes ou no mês de ":value"', + 'search_modifier_book_date_before_day' => 'Data de lançamento é antes ou no dia do mês de ":value"', + 'search_modifier_book_date_after_year' => 'Data de lançamento é posterior ou no ano de ":value"', + 'search_modifier_book_date_after_month' => 'Data de lançamento é posterior ou no mês de ":value"', 'search_modifier_book_date_after_day' => 'Data de registro da transação é posterior ou no dia do mês de ":value"', 'search_modifier_process_date_on_year' => 'Data de processamento da transação está no ano de ":value"', 'search_modifier_process_date_on_month' => 'Data de processamento da transação está no mês de ":value"', @@ -660,10 +664,10 @@ return [ 'search_modifier_created_at_after_day' => 'A transação foi criada em ou após o dia do mês de ":value"', 'search_modifier_interest_date_before' => 'Data de juros da transação é em ou antes de ":value"', 'search_modifier_interest_date_after' => 'Data de juros da transação é em ou posterior a ":value"', - 'search_modifier_book_date_on' => 'Data de registro da transação é em ":value"', - 'search_modifier_not_book_date_on' => 'Data de registro da transação não está em ":value"', - 'search_modifier_book_date_before' => 'Data de registro da transação é em ou antes de ":value"', - 'search_modifier_book_date_after' => 'Data de registro da transação é em ou após ":value"', + 'search_modifier_book_date_on' => 'Data de lançamento é em ":value"', + 'search_modifier_not_book_date_on' => 'Data de lançamento não está em ":value"', + 'search_modifier_book_date_before' => 'Data de lançamento é em ou antes de ":value"', + 'search_modifier_book_date_after' => 'Data de lançamento é em ou após ":value"', 'search_modifier_process_date_on' => 'Data de processamento da transação é em ":value"', 'search_modifier_not_process_date_on' => 'Data do processasmento da transação é no mês ":value"', 'search_modifier_process_date_before' => 'Data de processamento da transação é em ou antes de ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Os seguintes modificadores são aplicados também à busca:', 'general_search_error' => 'Um erro ocorreu durante a pesquisa. Por favor, cheque os arquivos de log para mais informações.', @@ -747,14 +750,16 @@ return [ // rules 'is_not_rule_trigger' => 'Não é', 'cannot_fire_inactive_rules' => 'Você não pode executar regras inativas.', + 'show_triggers' => 'Exibir gatilhos', + 'show_actions' => 'Exibir ações', 'rules' => 'Regras', 'rule_name' => 'Nome da regra', 'rule_triggers' => 'Regra dispara quando', - 'rule_actions' => 'Regra será', + 'rule_actions' => 'Regra irá', 'new_rule' => 'Nova regra', 'new_rule_group' => 'Novo grupo de regras', - 'rule_priority_up' => 'Dar mais prioridade a regra', - 'rule_priority_down' => 'Dar a regra menos prioridade', + 'rule_priority_up' => 'Dar mais prioridade à regra', + 'rule_priority_down' => 'Dar à regra menos prioridade', 'make_new_rule_group' => 'Fazer o novo grupo de regras', 'store_new_rule_group' => 'Gravar novo grupo de regras', 'created_new_rule_group' => 'Novo grupo de regras ":title" armazenado!', @@ -764,7 +769,7 @@ return [ 'rule_copy_of' => 'Cópia de ":title"', 'duplicated_rule' => 'Regra duplicada ":title" em ":newTitle"', 'delete_rule_group' => 'Excluir grupo de regra ":title"', - 'deleted_rule_group' => 'Removido grupo de regra ":title"', + 'deleted_rule_group' => 'Grupo de regra ":title" excluído', 'update_rule_group' => 'Atualizar um grupo de regra', 'no_rules_in_group' => 'Não existem regras neste grupo', 'move_rule_group_up' => 'Subir o grupo de regras', @@ -780,7 +785,7 @@ return [ 'rule_help_strict' => 'Nas regras estritas TODOS os gatilhos devem ser acionados para que a ação ou ações sejam executadas. Nas regras não-estritas, QUALQUER gatilho será suficiente para que a ação ou ações sejam executadas.', 'rule_help_active' => 'Regras inativas nunca serão disparadas.', 'stored_new_rule' => 'Armazenado a nova regra com o título ":title"', - 'deleted_rule' => 'Regra excluída com o título ":title"', + 'deleted_rule' => 'Regra ":title" excluída', 'store_new_rule' => 'Armazenar nova regra', 'updated_rule' => 'Regra atualizada com o título ":title"', 'default_rule_group_name' => 'Regras padrão', @@ -800,13 +805,13 @@ return [ 'warning_no_matching_transactions' => 'Nenhuma transação correspondente foi encontrada.', 'warning_no_valid_triggers' => 'Sem gatilhos válidos fornecidos.', 'apply_rule_selection' => 'Aplicar a regra ":title" para uma seleção de suas transações', - 'apply_rule_selection_intro' => 'As regras como ":title" normalmente são aplicadas apenas a transações novas ou atualizadas, mas você pode informar o Firefly III para executá-lo em uma seleção de suas transações existentes. Isso pode ser útil quando você atualizou uma regra e você precisa das alterações a serem aplicadas a todas as suas outras transações.', + 'apply_rule_selection_intro' => 'As regras como ":title" normalmente são aplicadas apenas a transações novas ou atualizadas, mas você pode informar o Firefly III para executá-lo em uma seleção de suas transações existentes. Isso pode ser útil quando você atualizou uma regra e você precisa que as alterações sejam aplicadas a todas as suas outras transações.', 'include_transactions_from_accounts' => 'Incluir as transações destas contas', 'include' => 'Incluir?', 'applied_rule_selection' => '{0} Nenhuma transação em sua seleção foi alterada pela regra ":title".|[1] Uma transação em sua seleção foi alterada pela regra ":title".|[2,*] :count transações em sua seleção foram alteradas pela regra ":title".', 'execute' => 'Executar', 'apply_rule_group_selection' => 'Aplicar grupo de regras ":title" para uma seleção de suas transações', - 'apply_rule_group_selection_intro' => 'Os grupos de regras como ":title" normalmente são aplicados apenas a transações novas ou atualizadas, mas você pode informar ao Firefly III para executar todas as regras neste grupo em uma seleção de suas transações existentes. Isso pode ser útil quando você atualizou um grupo de regras e você precisa das alterações a serem aplicadas a todas as suas outras transações.', + 'apply_rule_group_selection_intro' => 'Os grupos de regras como ":title" normalmente são aplicados apenas a transações novas ou atualizadas, mas você pode informar ao Firefly III para executar todas as regras neste grupo em uma seleção de suas transações existentes. Isso pode ser útil quando você atualizou um grupo de regras e você precisa que as alterações sejam aplicadas a todas as suas outras transações.', 'applied_rule_group_selection' => 'Grupo de regras ":title" tem sido aplicada para sua seleção.', // actions and triggers @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Quando uma transação é atualizada', 'rule_trigger_user_action' => 'Ação do usuário é ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Nome da conta de origem começa com..', 'rule_trigger_source_account_starts' => 'Nome da conta de origem começa com ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'O orçamento é ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Qualquer tag é..', 'rule_trigger_tag_is' => 'Qualquer tag é ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'A moeda da transação é..', 'rule_trigger_currency_is' => 'A moeda da transação é ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'A moeda estrangeira da transação é...', @@ -906,10 +916,10 @@ return [ 'rule_trigger_has_no_budget' => 'A transação não possui orçamento', 'rule_trigger_has_any_budget_choice' => 'Tem um orçamento (qualquer)', 'rule_trigger_has_any_budget' => 'Transação tem um orçamento (qualquer)', - 'rule_trigger_has_no_bill_choice' => 'Não tem nenhuma conta', + 'rule_trigger_has_no_bill_choice' => 'Não tem nenhuma fatura', 'rule_trigger_has_no_bill' => 'A transação não tem nenhuma fatura', 'rule_trigger_has_any_bill_choice' => 'Tem uma fatura (qualquer)', - 'rule_trigger_has_any_bill' => 'A transação tem uma conta (qualquer)', + 'rule_trigger_has_any_bill' => 'A transação tem uma fatura (qualquer)', 'rule_trigger_has_no_tag_choice' => 'Não tem tag(s)', 'rule_trigger_has_no_tag' => 'A transação não tem tag(s)', 'rule_trigger_has_any_tag_choice' => 'Tem uma ou mais tags (qualquer)', @@ -938,7 +948,7 @@ return [ 'rule_trigger_any_external_url_choice' => 'A transação tem uma URL externa (qualquer)', 'rule_trigger_any_external_id' => 'A transação tem um ID externo (qualquer)', 'rule_trigger_any_external_id_choice' => 'A transação tem um ID externo (qualquer)', - 'rule_trigger_no_external_url_choice' => 'A transação não tem um link externo', + 'rule_trigger_no_external_url_choice' => 'A transação não tem uma URL externa', 'rule_trigger_no_external_url' => 'A transação não tem URL externa', 'rule_trigger_no_external_id_choice' => 'A transação não tem um ID externo', 'rule_trigger_no_external_id' => 'A transação não tem um ID externo', @@ -1015,12 +1025,12 @@ return [ 'rule_trigger_interest_date_before' => 'Data de juros é antes de ":trigger_value"', 'rule_trigger_interest_date_after_choice' => 'Data de juros é após..', 'rule_trigger_interest_date_after' => 'Data de juros é após ":trigger_value"', - 'rule_trigger_book_date_on_choice' => 'Data de reserva é em..', - 'rule_trigger_book_date_on' => 'Data de reserva é em ":trigger_value"', - 'rule_trigger_book_date_before_choice' => 'A data de reserva é antes de..', - 'rule_trigger_book_date_before' => 'Data de reserva é antes de ":trigger_value"', - 'rule_trigger_book_date_after_choice' => 'A data de reserva é após..', - 'rule_trigger_book_date_after' => 'Data de reserva após ":trigger_value"', + 'rule_trigger_book_date_on_choice' => 'Data de lançamento é em..', + 'rule_trigger_book_date_on' => 'Data de lançamento é em ":trigger_value"', + 'rule_trigger_book_date_before_choice' => 'Data de lançamento é antes de..', + 'rule_trigger_book_date_before' => 'Data de lançamento é antes de ":trigger_value"', + 'rule_trigger_book_date_after_choice' => 'Data de lançamento é após..', + 'rule_trigger_book_date_after' => 'Data de lançamento é após ":trigger_value"', 'rule_trigger_process_date_on_choice' => 'Data de processamento é em..', 'rule_trigger_process_date_on' => 'Data de processamento é ":trigger_value"', 'rule_trigger_process_date_before_choice' => 'Data de processamento é antes de..', @@ -1085,7 +1095,7 @@ return [ 'rule_trigger_not_source_account_id' => 'ID da conta de origem não é ":trigger_value"', 'rule_trigger_not_destination_account_id' => 'ID da conta de destino não é ":trigger_value"', 'rule_trigger_not_transaction_type' => 'Tipo de transação não é ":trigger_value"', - 'rule_trigger_not_tag_is' => 'A etiqueta não é ":trigger_value"', + 'rule_trigger_not_tag_is' => 'A tag não é ":trigger_value"', 'rule_trigger_not_tag_is_not' => 'A tag é ":trigger_value"', 'rule_trigger_not_description_is' => 'Descrição não é ":trigger_value"', 'rule_trigger_not_description_contains' => 'Descrição não contém', @@ -1154,9 +1164,9 @@ return [ 'rule_trigger_not_interest_date_on' => 'Data de juros não é em ":trigger_value"', 'rule_trigger_not_interest_date_before' => 'Data de juros não é anterior a ":trigger_value"', 'rule_trigger_not_interest_date_after' => 'Data de juros não é posterior a ":trigger_value"', - 'rule_trigger_not_book_date_on' => 'Data de agendamento não é em ":trigger_value"', - 'rule_trigger_not_book_date_before' => 'Data de agendamento não é antes de ":trigger_value"', - 'rule_trigger_not_book_date_after' => 'Data de agendamento não é após ":trigger_value"', + 'rule_trigger_not_book_date_on' => 'Data de lançamento não é em ":trigger_value"', + 'rule_trigger_not_book_date_before' => 'Data de lançamento não é antes de ":trigger_value"', + 'rule_trigger_not_book_date_after' => 'Data de lançamento não é após ":trigger_value"', 'rule_trigger_not_process_date_on' => 'Data de processamento não é em ":trigger_value"', 'rule_trigger_not_process_date_before' => 'Data de processamento não é antes de ":trigger_value"', 'rule_trigger_not_process_date_after' => 'Data de processamento não é após ":trigger_value"', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transação não existe', 'rule_trigger_not_has_attachments' => 'A transação não tem anexos', 'rule_trigger_not_has_any_category' => 'A transação não tem categoria', - 'rule_trigger_not_has_any_budget' => 'A transação não tem categoria', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'A transação não tem nenhuma fatura', 'rule_trigger_not_has_any_tag' => 'A transação não tem tags', 'rule_trigger_not_any_notes' => 'A transação não tem notas', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Conta de destino não é uma conta em dinheiro', 'rule_trigger_not_account_is_cash' => 'Nenhuma conta é uma conta em dinheiro', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'EXCLUIR transação(!)', @@ -1277,261 +1286,264 @@ return [ 'rule_action_append_notes_to_descr' => 'Adicionar notas à descrição', 'rule_action_move_descr_to_notes' => 'Substituir notas por descrição', 'rule_action_move_notes_to_descr' => 'Substituir descrição por notas', + 'rule_action_set_destination_to_cash_choice' => 'Definir a conta destino para (dinheiro)', + 'rule_action_set_source_to_cash_choice' => 'Definir a conta de ativo para (dinheiro)', 'rulegroup_for_bills_title' => 'Grupo de regras para faturas', 'rulegroup_for_bills_description' => 'Um grupo especial de regras para todas as regras que envolvem faturas.', 'rule_for_bill_title' => 'Regra gerada automaticamente para a fatura ":name"', 'rule_for_bill_description' => 'Esta regra é gerada automaticamente para tentar corresponder à fatura ":name".', 'create_rule_for_bill' => 'Criar uma nova regra para a fatura ":name"', - 'create_rule_for_bill_txt' => 'Você acabou de criar uma nova fatura chamada ":name". Parabéns! O Firefly III pode combinar automagicamente novas despesas com essa fatura. Por exemplo, sempre que você pagar seu aluguel, a fatura "aluguel" será vinculada À essa despesa. Dessa forma, o Firefly III pode mostrar com precisão quais faturas estão vencidas e quais não estão. Para isso, uma nova regra deve ser criada. O Firefly III preencheu algumas informações por você. Por favor, verifique se está tudo certo. Se estiverem corretas, o Firefly III irá vincular as retiradas a essas faturas automaticamente. Por favor, confira os gatilhos e adicione outros, se estiverem errados.', + 'create_rule_for_bill_txt' => 'Você acabou de criar uma nova fatura chamada ":name". Parabéns! O Firefly III pode combinar automagicamente novas despesas com essa fatura. Por exemplo, sempre que você pagar seu aluguel, a fatura "aluguel" será vinculada a essa despesa. Dessa forma, o Firefly III pode mostrar com precisão quais faturas estão vencidas e quais não estão. Para isso, uma nova regra deve ser criada. O Firefly III preencheu algumas informações por você. Por favor, verifique se está tudo certo. Se estiverem corretas, o Firefly III irá vincular as despesas a essas faturas automaticamente. Por favor, confira os gatilhos e adicione outros, se estiverem errados.', 'new_rule_for_bill_title' => 'Regra para a fatura ":name"', 'new_rule_for_bill_description' => 'Esta regra marca as transações para a fatura ":name".', - 'new_rule_for_journal_title' => 'Regra baseada na transação ":description"', - 'new_rule_for_journal_description' => 'Esta regra é baseada na transação ":description". Irá corresponder a transações que são exatamente iguais.', + 'new_rule_for_journal_title' => 'Regra baseada na transação ":description"', + 'new_rule_for_journal_description' => 'Esta regra é baseada na transação ":description". Irá corresponder a transações que são exatamente iguais.', // tags - 'store_new_tag' => 'Armazenar nova tag', - 'update_tag' => 'Atualizar tag', - 'no_location_set' => 'Nenhuma localização.', - 'meta_data' => 'Meta dados', - 'location' => 'Localização', - 'without_date' => 'Sem data', - 'result' => 'Resultado', - 'sums_apply_to_range' => 'Todas as somas aplicam-se ao intervalo selecionado', - 'mapbox_api_key' => 'Para usar o mapa, obtenha uma chave API do Mapbox. Abra seu arquivo .env e insira este código MAPBOX_API_KEY=.', - 'press_object_location' => 'Clique com o botão direito ou pressione longamente para definir a localização do objeto.', - 'clear_location' => 'Limpar localização', - 'delete_all_selected_tags' => 'Excluir todas as tags selecionadas', - 'select_tags_to_delete' => 'Não se esqueça de selecionar algumas tags.', - 'deleted_x_tags' => ':count etiqueta foi deletada. :count etiquetas foram deletadas.', - 'create_rule_from_transaction' => 'Criar regra baseada na transação', - 'create_recurring_from_transaction' => 'Criar transação recorrente baseada na transação', - + 'store_new_tag' => 'Armazenar nova tag', + 'update_tag' => 'Atualizar tag', + 'no_location_set' => 'Nenhuma localização.', + 'meta_data' => 'Meta dados', + 'location' => 'Localização', + 'location_first_split' => 'O local para essa transação pode ser definido na primeira divisão dessa transação.', + 'without_date' => 'Sem data', + 'result' => 'Resultado', + 'sums_apply_to_range' => 'Todas as somas aplicam-se ao intervalo selecionado', + 'mapbox_api_key' => 'Para usar o mapa, obtenha uma chave API do Mapbox. Abra seu arquivo .env e insira este código MAPBOX_API_KEY=.', + 'press_object_location' => 'Clique com o botão direito ou pressione longamente para definir a localização do objeto.', + 'click_tap_location' => 'Clique ou toque no mapa para adicionar um local', + 'clear_location' => 'Limpar localização', + 'delete_all_selected_tags' => 'Excluir todas as tags selecionadas', + 'select_tags_to_delete' => 'Não se esqueça de selecionar algumas tags.', + 'deleted_x_tags' => ':count tag foi excluída.|:count tags foram excluídas.', + 'create_rule_from_transaction' => 'Criar regra baseada na transação', + 'create_recurring_from_transaction' => 'Criar transação recorrente baseada na transação', // preferences - 'dark_mode_option_browser' => 'Deixe seu navegador decidir', - 'dark_mode_option_light' => 'Sempre claro', - 'dark_mode_option_dark' => 'Sempre escuro', - 'equal_to_language' => '(igual ao idioma)', - 'dark_mode_preference' => 'Modo escuro', - 'dark_mode_preference_help' => 'Avise ao Firefly III quando usar o modo escuro.', - 'pref_home_screen_accounts' => 'Conta da tela inicial', - 'pref_home_screen_accounts_help' => 'Que conta deve ser exibida na tela inicial?', - 'pref_view_range' => 'Ver intervalo', - 'pref_view_range_help' => 'Algumas tabelas estão automaticamente agrupadas em períodos. Seus orçamentos também serão agrupados em períodos. Qual período você prefere?', - 'pref_1D' => 'Um dia', - 'pref_1W' => 'Uma semana', - 'pref_1M' => 'Um mês', - 'pref_3M' => 'Trimestral', - 'pref_6M' => 'Semestral', - 'pref_1Y' => 'Um ano', - 'pref_last365' => 'Ano passado', - 'pref_last90' => 'Últimos 90 dias', - 'pref_last30' => 'Últimos 30 dias', - 'pref_last7' => 'Últimos 7 dias', - 'pref_YTD' => 'Ano até à data', - 'pref_QTD' => 'Trimestre até à data', - 'pref_MTD' => 'Mês até a data', - 'pref_languages' => 'Idiomas', - 'pref_locale' => 'Configurações regionais', - 'pref_languages_help' => 'Firefly III suporta muitos idiomas. Qual você prefere?', - 'pref_locale_help' => 'Firefly III permite que você defina outras configurações locais, por exemplo, como moedas, números e datas são formatadas. Os itens nesta lista podem não ser suportadas pelo seu sistema. Firefly III não tem as corretas configurações de data para cada local; entre em contato para melhorias.', - 'pref_locale_no_demo' => 'Este recurso não funcionará para o usuário de demonstração.', - 'pref_custom_fiscal_year' => 'Configurações de ano fiscal', - 'pref_custom_fiscal_year_label' => 'Habilitado', - 'pref_custom_fiscal_year_help' => 'Nos países que usam um exercício diferente de 1 de Janeiro a 31 de Dezembro, você pode ativar isto e especificar início / fim do ano fiscal', - 'pref_fiscal_year_start_label' => 'Data de início de ano fiscal', - 'pref_two_factor_auth' => 'Verificação em duas etapas', - 'pref_two_factor_auth_help' => 'Quando você habilitar verificação em 2-passos (também conhecido como Two Factor Authentication), você adicionar uma camada extra de segurança para sua conta. Você entra com alguma coisa que você sabe (sua senha) e algo que você tem (um código de verificação). Os códigos de verificação são gerados por um aplicativo em seu telefone, como Authy ou Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Habilitar a verificação de 2 etapas', - 'pref_two_factor_auth_disabled' => 'código de verificação em 2 etapas removido e desativado', - 'pref_two_factor_auth_remove_it' => 'Não se esqueça de remover a conta de seu aplicativo de autenticação!', - 'pref_two_factor_auth_code' => 'Verificar código', - 'pref_two_factor_auth_code_help' => 'Scaneie o código QR com um aplicativo em seu telefone como Authy ou Google Authenticator e insira o código gerado.', - 'pref_two_factor_auth_reset_code' => 'Redefinir o código de verificação', - 'pref_two_factor_auth_disable_2fa' => 'Desativar verificação em duas etapas', - '2fa_use_secret_instead' => 'Se você não pode escanear o QR code, sinta-se à vontade para usar o código secreto :secret.', - '2fa_backup_codes' => 'Armazene esses códigos de reserva para acesso, caso você perca seu dispositivo.', - '2fa_already_enabled' => 'A verificação em duas etapas já está habilitada.', - 'wrong_mfa_code' => 'Esse código MFA não é válido.', - 'pref_save_settings' => 'Salvar definições', - 'saved_preferences' => 'Preferências salvas!', - 'preferences_general' => 'Geral', - 'preferences_frontpage' => 'Tela inicial', - 'preferences_security' => 'Segurança', - 'preferences_layout' => 'Interface', - 'preferences_notifications' => 'Notificações', - 'pref_home_show_deposits' => 'Depósitos de mostrar na tela inicial', - 'pref_home_show_deposits_info' => 'A tela inicial já mostra suas contas de despesas. Deveria também mostrar suas receitas?', - 'pref_home_do_show_deposits' => 'Sim, mostrar-lhes', - 'successful_count' => 'dos quais :count bem sucedida', - 'list_page_size_title' => 'Tamanho da página', - 'list_page_size_help' => 'Qualquer lista de coisas (contas, transações, etc.) mostra, no máximo, este tanto por página.', - 'list_page_size_label' => 'Tamanho da página', - 'between_dates' => '(:start e :end)', - 'pref_optional_fields_transaction' => 'Campos opcionais para transações', - 'pref_optional_fields_transaction_help' => 'Por padrão, nem todos os campos estão ativados ao criar uma nova transação (por causa da desordem). Abaixo, você pode habilitar esses campos se você acha que eles podem ser úteis para você. Claro, qualquer campo desabilitado, mas já preenchido, será visível, independentemente da configuração.', - 'optional_tj_date_fields' => 'Campos de data', - 'optional_tj_other_fields' => 'Outros campos', - 'optional_tj_attachment_fields' => 'Campos de anexo', - 'pref_optional_tj_interest_date' => 'Data de interesse', - 'pref_optional_tj_book_date' => 'Data reserva', - 'pref_optional_tj_process_date' => 'Data de processamento', - 'pref_optional_tj_due_date' => 'Data de vencimento', - 'pref_optional_tj_payment_date' => 'Data de pagamento', - 'pref_optional_tj_invoice_date' => 'Data da Fatura', - 'pref_optional_tj_internal_reference' => 'Referência interna', - 'pref_optional_tj_notes' => 'Notas', - 'pref_optional_tj_attachments' => 'Anexos', - 'pref_optional_tj_external_url' => 'URL externa', - 'pref_optional_tj_location' => 'Localização', - 'pref_optional_tj_links' => 'Links da transação', - 'optional_field_meta_dates' => 'Datas', - 'optional_field_meta_business' => 'Negócios', - 'optional_field_attachments' => 'Anexos', - 'optional_field_meta_data' => 'Meta dados opcionais', - 'external_url' => 'URL externa', - 'pref_notification_bill_reminder' => 'Lembrete sobre expiração de faturas', - 'pref_notification_new_access_token' => 'Alerta quando um novo token de acesso à API é criado', - 'pref_notification_transaction_creation' => 'Alerta quando uma transação é criada automaticamente', - 'pref_notification_user_login' => 'Alertar quando você logar de uma nova localidade', - 'pref_notification_rule_action_failures' => 'Alertar quando as ações de regras falharem ao executar (somente Slack ou Discord)', - 'pref_notifications' => 'Notificações', - 'pref_notifications_help' => 'Indique se estas são notificações que você gostaria de receber. Algumas notificações podem conter informações financeiras sensíveis.', - 'slack_webhook_url' => 'URL de Webhook do Slack', - 'slack_webhook_url_help' => 'Se você quiser que o Firefly III envie notificações usando o Slack, digite a URL do webhook aqui. Caso contrário, deixe o campo em branco. Se você é um administrador, você precisa definir esta URL também na administração.', - 'slack_url_label' => 'URL do webhook de entrada do Slack', + 'dark_mode_option_browser' => 'Deixe seu navegador decidir', + 'dark_mode_option_light' => 'Sempre claro', + 'dark_mode_option_dark' => 'Sempre escuro', + 'equal_to_language' => '(igual ao idioma)', + 'dark_mode_preference' => 'Modo escuro', + 'dark_mode_preference_help' => 'Avise ao Firefly III quando usar o modo escuro.', + 'pref_home_screen_accounts' => 'Conta da tela inicial', + 'pref_home_screen_accounts_help' => 'Quais contas devem ser exibidas na tela inicial?', + 'pref_view_range' => 'Ver intervalo', + 'pref_view_range_help' => 'Algumas tabelas estão automaticamente agrupadas em períodos. Seus orçamentos também serão agrupados em períodos. Qual período você prefere?', + 'pref_1D' => 'Um dia', + 'pref_1W' => 'Uma semana', + 'pref_1M' => 'Um mês', + 'pref_3M' => 'Trimestral', + 'pref_6M' => 'Semestral', + 'pref_1Y' => 'Um ano', + 'pref_last365' => 'Ano passado', + 'pref_last90' => 'Últimos 90 dias', + 'pref_last30' => 'Últimos 30 dias', + 'pref_last7' => 'Últimos 7 dias', + 'pref_YTD' => 'Começo do ano até hoje', + 'pref_QTD' => 'Começo do trimestre até hoje', + 'pref_MTD' => 'Começo do mês até hoje', + 'pref_languages' => 'Idiomas', + 'pref_locale' => 'Configurações regionais', + 'pref_languages_help' => 'Firefly III suporta muitos idiomas. Qual você prefere?', + 'pref_locale_help' => 'Firefly III permite que você defina outras configurações locais, por exemplo, como moedas, números e datas são formatadas. Os itens nesta lista podem não ser suportadas pelo seu sistema. Firefly III não tem as corretas configurações de data para cada local; entre em contato para melhorias.', + 'pref_locale_no_demo' => 'Este recurso não funcionará para o usuário de demonstração.', + 'pref_custom_fiscal_year' => 'Configurações de ano fiscal', + 'pref_custom_fiscal_year_label' => 'Habilitado', + 'pref_custom_fiscal_year_help' => 'Nos países que usam um exercício diferente de 1 de Janeiro a 31 de Dezembro, você pode ativar isto e especificar início / fim do ano fiscal', + 'pref_fiscal_year_start_label' => 'Data de início de ano fiscal', + 'pref_two_factor_auth' => 'Verificação em duas etapas', + 'pref_two_factor_auth_help' => 'Quando você habilita verificação em 2 etapas (também conhecido como Two Factor Authentication), você adiciona uma camada extra de segurança para sua conta. Você entra com alguma coisa que você sabe (sua senha) e algo que você tem (um código de verificação). Os códigos de verificação são gerados por um aplicativo em seu telefone, como Authy ou Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Habilitar a verificação de 2 etapas', + 'pref_two_factor_auth_disabled' => 'código de verificação em 2 etapas removido e desativado', + 'pref_two_factor_auth_remove_it' => 'Não se esqueça de remover a conta de seu aplicativo de autenticação!', + 'pref_two_factor_auth_code' => 'Verificar código', + 'pref_two_factor_auth_code_help' => 'Scaneie o código QR com um aplicativo em seu telefone como Authy ou Google Authenticator e insira o código gerado.', + 'pref_two_factor_auth_reset_code' => 'Redefinir o código de verificação', + 'pref_two_factor_auth_disable_2fa' => 'Desativar verificação em duas etapas', + '2fa_use_secret_instead' => 'Se você não pode escanear o QR code, sinta-se à vontade para usar o código secreto :secret.', + '2fa_backup_codes' => 'Armazene esses códigos de reserva para acesso, caso você perca seu dispositivo.', + '2fa_already_enabled' => 'A verificação em duas etapas já está habilitada.', + 'wrong_mfa_code' => 'Esse código MFA não é válido.', + 'pref_save_settings' => 'Salvar definições', + 'saved_preferences' => 'Preferências salvas!', + 'preferences_general' => 'Geral', + 'preferences_frontpage' => 'Tela inicial', + 'preferences_security' => 'Segurança', + 'preferences_layout' => 'Interface', + 'preferences_notifications' => 'Notificações', + 'pref_home_show_deposits' => 'Depósitos de mostrar na tela inicial', + 'pref_home_show_deposits_info' => 'A tela inicial já mostra suas contas de despesas. Deveria também mostrar suas receitas?', + 'pref_home_do_show_deposits' => 'Sim, mostrar-lhes', + 'successful_count' => 'dos quais :count bem sucedida', + 'list_page_size_title' => 'Tamanho da página', + 'list_page_size_help' => 'Qualquer lista de coisas (contas, transações, etc.) mostra, no máximo, este tanto por página.', + 'list_page_size_label' => 'Tamanho da página', + 'between_dates' => '(:start e :end)', + 'pref_optional_fields_transaction' => 'Campos opcionais para transações', + 'pref_optional_fields_transaction_help' => 'Por padrão, nem todos os campos estão ativados ao criar uma nova transação (por causa da desordem). Abaixo, você pode habilitar esses campos se você acha que eles podem ser úteis para você. Claro, qualquer campo desabilitado, mas já preenchido, será visível, independentemente da configuração.', + 'optional_tj_date_fields' => 'Campos de data', + 'optional_tj_other_fields' => 'Outros campos', + 'optional_tj_attachment_fields' => 'Campos de anexo', + 'pref_optional_tj_interest_date' => 'Data de juros', + 'pref_optional_tj_book_date' => 'Data de lançamento', + 'pref_optional_tj_process_date' => 'Data de processamento', + 'pref_optional_tj_due_date' => 'Data de vencimento', + 'pref_optional_tj_payment_date' => 'Data de pagamento', + 'pref_optional_tj_invoice_date' => 'Data da Fatura', + 'pref_optional_tj_internal_reference' => 'Referência interna', + 'pref_optional_tj_notes' => 'Notas', + 'pref_optional_tj_attachments' => 'Anexos', + 'pref_optional_tj_external_url' => 'URL externa', + 'pref_optional_tj_location' => 'Localização', + 'pref_optional_tj_links' => 'Links da transação', + 'optional_field_meta_dates' => 'Datas', + 'optional_field_meta_business' => 'Negócios', + 'optional_field_attachments' => 'Anexos', + 'optional_field_meta_data' => 'Meta dados opcionais', + 'external_url' => 'URL externa', + 'pref_notification_bill_reminder' => 'Lembrete sobre expiração de faturas', + 'pref_notification_new_access_token' => 'Alerta quando um novo token de acesso à API é criado', + 'pref_notification_transaction_creation' => 'Alerta quando uma transação é criada automaticamente', + 'pref_notification_user_login' => 'Alertar quando você logar de uma nova localidade', + 'pref_notification_rule_action_failures' => 'Alertar quando as ações de regras falharem ao executar (somente Slack ou Discord)', + 'pref_notifications' => 'Notificações', + 'pref_notifications_help' => 'Indique se estas são notificações que você gostaria de receber. Algumas notificações podem conter informações financeiras sensíveis.', + 'slack_webhook_url' => 'URL de Webhook do Slack', + 'slack_webhook_url_help' => 'Se você quiser que o Firefly III envie notificações usando o Slack, digite a URL do webhook aqui. Caso contrário, deixe o campo em branco. Se você é um administrador, você precisa definir esta URL também na administração.', + 'slack_url_label' => 'URL do webhook de entrada do Slack', // Financial administrations - 'administration_index' => 'Administração financeira', - 'administrations_index_menu' => 'Administração(ões) financeira(s)', + 'administration_index' => 'Administração financeira', + 'administrations_index_menu' => 'Administração(ões) financeira(s)', // profile: - 'purge_data_title' => 'Excluir dados do Firefly III', - 'purge_data_expl' => '"Purgar" significa "apagar o que já está excluído". Em circunstâncias normais, o Firefly III não exclui nada permanentemente. Ela apenas o esconde. O botão abaixo exclui todos estes registros "excluídos" anteriores.', - 'delete_stuff_header' => 'Apagar e purgar dados', - 'purge_all_data' => 'Purgar Registros Excluídos', - 'purge_data' => 'Purgar dados', - 'purged_all_records' => 'Todos os registros de apagados foram purgados.', - 'delete_data_title' => 'Excluir dados do Firefly III', - 'permanent_delete_stuff' => 'Você pode excluir coisas do Firefly III. Usar os botões abaixo significa que seus itens serão removidos da visualização e ocultos. Não há botão de desfazer para isso, mas os itens podem permanecer no banco de dados onde você pode salvá-los se necessário.', - 'other_sessions_logged_out' => 'Todas as suas outras sessões foram desconectadas.', - 'delete_unused_accounts' => 'Excluir contas não utilizadas limpará suas listas de preenchimento automático.', - 'delete_all_unused_accounts' => 'Apagar contas não utilizadas', - 'deleted_all_unused_accounts' => 'Todas as contas não utilizadas foram excluídas', - 'delete_all_budgets' => 'Excluir TODOS os seus orçamentos', - 'delete_all_categories' => 'Excluir TODAS as suas categorias', - 'delete_all_tags' => 'Excluir TODAS as suas tags', - 'delete_all_bills' => 'Excluir TODAS as suas contas de consumo', - 'delete_all_piggy_banks' => 'Excluir TODOS os seus cofrinhos', - 'delete_all_rules' => 'Excluir TODAS as suas regras', - 'delete_all_recurring' => 'Excluir TODAS as suas transações recorrentes', - 'delete_all_object_groups' => 'Excluir TODOS os seus grupos de objetos', - 'delete_all_accounts' => 'Excluir TODAS as suas contas', - 'delete_all_asset_accounts' => 'Excluir TODAS as suas contas de ativos', - 'delete_all_expense_accounts' => 'Excluir TODAS as suas contas de despesas', - 'delete_all_revenue_accounts' => 'Excluir TODAS as suas contas de receita', - 'delete_all_liabilities' => 'Excluir TODOS os seus passivos', - 'delete_all_transactions' => 'Excluir TODAS as suas transações', - 'delete_all_withdrawals' => 'Excluir TODOS os seus saques', - 'delete_all_deposits' => 'Excluir TODAS as duas entradas', - 'delete_all_transfers' => 'Excluir TODAS as suas transferências', - 'also_delete_transactions' => 'A exclusão de contas também excluirá TODAS as saídas, entradas e transferências associadas!', - 'deleted_all_budgets' => 'Todos os orçamentos foram excluídos', - 'deleted_all_categories' => 'Todas as categorias foram excluídas', - 'deleted_all_tags' => 'Todas as tags foram excluídas', - 'deleted_all_bills' => 'Todas as contas foram excluídas', - 'deleted_all_piggy_banks' => 'Todos os cofrinhos foram excluídos', - 'deleted_all_rules' => 'Todas as regras e grupos de regras foram excluídos', - 'deleted_all_object_groups' => 'Todos os grupos foram excluídos', - 'deleted_all_accounts' => 'Todas as contas foram excluídas', - 'deleted_all_asset_accounts' => 'Todas as contas de ativos foram excluídas', - 'deleted_all_expense_accounts' => 'Todas as contas de despesas foram excluídas', - 'deleted_all_revenue_accounts' => 'Todas as contas de receita foram excluídas', - 'deleted_all_liabilities' => 'Todos os passivos foram excluídos', - 'deleted_all_transactions' => 'Todas as transações foram excluídas', - 'deleted_all_withdrawals' => 'Todas as saídas foram excluídas', - 'deleted_all_deposits' => 'Todas as entradas foram excluídas', - 'deleted_all_transfers' => 'Todas as transferências foram excluídas', - 'deleted_all_recurring' => 'Todas as transações recorrentes foram excluídas', - 'change_your_password' => 'Alterar sua senha', - 'delete_account' => 'Apagar conta', - 'current_password' => 'Senha atual', - 'new_password' => 'Nova senha', - 'new_password_again' => 'Nova senha (novamente)', - 'delete_your_account' => 'Apagar sua conta', - 'delete_your_account_help' => 'Excluindo sua conta também vai apagar quaisquer contas, transações, qualquer coisa que você pode ter salvo no Firefly III. Tudo será perdido.', - 'delete_your_account_password' => 'Coloque sua senha para continuar.', - 'password' => 'Senha', - 'are_you_sure' => 'Você tem certeza? Você não poderá desfazer isso.', - 'delete_account_button' => 'Apagar sua conta', - 'invalid_current_password' => 'Senha atual inválida!', - 'password_changed' => 'Senha alterada!', - 'should_change' => 'A idéia é alterar sua senha.', - 'invalid_password' => 'Senha inválida!', - 'what_is_pw_security' => 'O que é "verificar a segurança da senha"?', - 'secure_pw_title' => 'Como escolher uma senha segura', - 'forgot_password_response' => 'Caso exista uma conta com este endereço de e-mail, você encontrará instruções em sua caixa de entrada.', - 'secure_pw_history' => 'Não é toda semana que você lê notícias sobre site que perde as senhas de seus usuários. Hackers e ladrões usam essas senhas para tentar roubar suas informações privadas. Esta informação é valiosa.', - 'secure_pw_ff' => 'Você usa a mesma senha em toda a internet? Se um site perder sua senha, os hackers terão acesso a todos os seus dados. O Firefly III depende de você para escolher uma senha forte e única para proteger seus registros financeiros.', - 'secure_pw_check_box' => 'Para ajudá-lo o Firefly III pode verificar se a senha que você deseja usar foi roubada anteriormente. Se for esse o caso, o Firefly III aconselha a você NÃO utilizar essa senha.', - 'secure_pw_working_title' => 'Como isso funciona?', - 'secure_pw_working' => 'Ao marcar a caixa de seleção, o Firefly III enviará os cinco primeiros caracteres do hash SHA1 de sua senha ao site Troy Hunt, para verificar se ela está na lista. Isso impede que você use senhas inseguras, como recomendado na última publicação NIST Special sobre esse assunto.', - 'secure_pw_should' => 'Devo verificar a caixa?', - 'secure_pw_long_password' => 'Sim. Sempre verificar se sua senha é segura.', - 'command_line_token' => 'Token de linha de comando', - 'explain_command_line_token' => 'Você precisa desse token para executar ações na linha de comando, como exportação de dados. Sem ele, esse comando sensível não irá funcionar. Não compartilhe seu token de linha de comando. Ninguém irá te perguntar sobre esse token, nem mesmo eu. se você tiver medo de perder ele, ou quando estiver paranoico, crie um novo token usando o botão.', - 'regenerate_command_line_token' => 'Regenerar token de linha de comando', - 'token_regenerated' => 'Foi gerado um novo token de linha de comando', - 'change_your_email' => 'Altere seu endereço de email', - 'email_verification' => 'Uma mensagem de e-mail será enviada para o seu endereço de e-mail antigo E novo. Por razões de segurança, você não será capaz de fazer login até você confirmar seu novo endereço de e-mail. Se você não tem certeza se sua instalação do Firefly III é capaz de enviar e-mail, por favor não use esse recurso. Se você é um administrador, você pode testar isso na Administração.', - 'email_changed_logout' => 'Até que você verifique seu endereço de e-mail, não pode iniciar sessão.', - 'login_with_new_email' => 'Agora você pode fazer login com seu novo endereço de e-mail.', - 'login_with_old_email' => 'Agora você pode fazer login novamente com o seu endereço de e-mail antigo.', - 'login_provider_local_only' => 'Esta ação não está disponível durante a autenticação por meio de ":login_provider".', - 'external_user_mgt_disabled' => 'Esta ação não está disponível quando o Firefly III não é responsável pelo gerenciamento de usuários ou manipulação de autenticação.', - 'external_auth_disabled' => 'Esta ação não está disponível quando o Firefly III não é responsável pela autenticação.', - 'delete_local_info_only' => "Como o Firefly III não é responsável pelo gerenciamento de usuários ou pela manipulação de autenticação, esta função excluirá apenas informações locais do Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Clientes OAuth', - 'profile_oauth_no_clients' => 'Você não criou nenhum cliente OAuth.', - 'profile_oauth_clients_external_auth' => 'Se você estiver usando um provedor de autenticação externo, como Authelia, clientes OAuth (como apps) não funcionarão. Você só poderá usar Tokens de Acesso Pessoal.', - 'profile_oauth_clients_header' => 'Clientes', - 'profile_oauth_client_id' => 'ID do Cliente', - 'profile_oauth_client_name' => 'Nome', - 'profile_oauth_client_secret' => 'Segredo', - 'profile_oauth_create_new_client' => 'Criar um novo cliente', - 'profile_oauth_create_client' => 'Criar um cliente', - 'profile_oauth_edit_client' => 'Editar cliente', - 'profile_oauth_name_help' => 'Alguma coisa que seus usuários vão reconhecer e identificar.', - 'profile_oauth_redirect_url' => 'URL de redirecionamento', - 'profile_oauth_redirect_url_help' => 'A URL de retorno da sua solicitação de autorização.', - 'profile_authorized_apps' => 'Aplicativos autorizados', - 'profile_authorized_clients' => 'Clientes autorizados', - 'profile_scopes' => 'Escopos', - 'profile_revoke' => 'Revogar', - 'profile_oauth_client_secret_title' => 'Segredo do cliente', - 'profile_oauth_client_secret_expl' => 'Aqui está o seu novo segredo de cliente. Esta é a única vez que ela será mostrada, então não o perca! Agora você pode usar este segredo para fazer requisições de API.', - 'profile_personal_access_tokens' => 'Tokens de acesso pessoal', - 'profile_personal_access_token' => 'Token de acesso pessoal', - 'profile_oauth_confidential' => 'Confidencial', - 'profile_oauth_confidential_help' => 'Exige que o cliente se autentique com um segredo. Clientes confidenciais podem manter credenciais de forma segura sem expô-las à partes não autorizadas. Aplicações públicas, como aplicações de área de trabalho nativas ou JavaScript SPA, são incapazes de manter segredos com segurança.', - 'profile_personal_access_token_explanation' => 'Aqui está seu novo token de acesso pessoal. Esta é a única vez que ela será mostrada então não perca! Agora você pode usar esse token para fazer solicitações de API.', - 'profile_no_personal_access_token' => 'Você não criou nenhum token de acesso pessoal.', - 'profile_create_new_token' => 'Criar novo token', - 'profile_create_token' => 'Criar token', - 'profile_create' => 'Criar', - 'profile_save_changes' => 'Salvar alterações', - 'profile_whoops' => 'Ops!', - 'profile_something_wrong' => 'Alguma coisa deu errado!', - 'profile_try_again' => 'Algo deu errado. Por favor tente novamente.', - 'amounts' => 'Quantias', - 'multi_account_warning_unknown' => 'Dependendo do tipo de transação que você criar, a conta de origem e/ou de destino das divisões subsequentes pode ser sobrescrita pelo que estiver definido na primeira divisão da transação.', - 'multi_account_warning_withdrawal' => 'Tenha em mente que a conta de origem das subsequentes divisões será sobrescrita pelo que estiver definido na primeira divisão da saída.', - 'multi_account_warning_deposit' => 'Tenha em mente que a conta de destino das divisões subsequentes será sobrescrita pelo que estiver definido na primeira divisão da entrada.', - 'multi_account_warning_transfer' => 'Tenha em mente que a conta de origem + de destino das divisões subsequentes será sobrescrita pelo que for definido na primeira divisão da transferência.', + 'purge_data_title' => 'Expurgar dados do Firefly III', + 'purge_data_expl' => '"Expurgar" significa "apagar o que já está excluído". Em circunstâncias normais, o Firefly III não exclui nada permanentemente. Ela apenas o esconde. O botão abaixo exclui todos estes registros "excluídos" anteriores PARA SEMPRE.', + 'delete_stuff_header' => 'Apagar e expurgar dados', + 'purge_all_data' => 'Expurgar registros excluídos', + 'purge_data' => 'Expurgar dados', + 'purged_all_records' => 'Todos os registros apagados foram expurgados.', + 'delete_data_title' => 'Excluir dados do Firefly III', + 'permanent_delete_stuff' => 'Você pode excluir coisas do Firefly III. Usar os botões abaixo significa que seus itens serão removidos da visualização e ocultados. Não há botão de desfazer para isso, mas os itens podem permanecer no banco de dados onde você pode salvá-los se necessário.', + 'other_sessions_logged_out' => 'Todas as suas outras sessões foram desconectadas.', + 'delete_unused_accounts' => 'Excluir contas não utilizadas limpará suas listas de preenchimento automático.', + 'delete_all_unused_accounts' => 'Apagar contas não utilizadas', + 'deleted_all_unused_accounts' => 'Todas as contas não utilizadas foram excluídas', + 'delete_all_budgets' => 'Excluir TODOS os seus orçamentos', + 'delete_all_categories' => 'Excluir TODAS as suas categorias', + 'delete_all_tags' => 'Excluir TODAS as suas tags', + 'delete_all_bills' => 'Excluir TODAS as suas faturas', + 'delete_all_piggy_banks' => 'Excluir TODOS os seus cofrinhos', + 'delete_all_rules' => 'Excluir TODAS as suas regras', + 'delete_all_recurring' => 'Excluir TODAS as suas transações recorrentes', + 'delete_all_object_groups' => 'Excluir TODOS os seus grupos de objetos', + 'delete_all_accounts' => 'Excluir TODAS as suas contas', + 'delete_all_asset_accounts' => 'Excluir TODAS as suas contas de ativos', + 'delete_all_expense_accounts' => 'Excluir TODAS as suas contas de despesas', + 'delete_all_revenue_accounts' => 'Excluir TODAS as suas contas de receita', + 'delete_all_liabilities' => 'Excluir TODOS os seus passivos', + 'delete_all_transactions' => 'Excluir TODAS as suas transações', + 'delete_all_withdrawals' => 'Excluir TODAS as suas despesas', + 'delete_all_deposits' => 'Excluir TODAS as suas entradas', + 'delete_all_transfers' => 'Excluir TODAS as suas transferências', + 'also_delete_transactions' => 'A exclusão de contas também excluirá TODAS as saídas, entradas e transferências associadas!', + 'deleted_all_budgets' => 'Todos os orçamentos foram excluídos', + 'deleted_all_categories' => 'Todas as categorias foram excluídas', + 'deleted_all_tags' => 'Todas as tags foram excluídas', + 'deleted_all_bills' => 'Todas as faturas foram excluídas', + 'deleted_all_piggy_banks' => 'Todos os cofrinhos foram excluídos', + 'deleted_all_rules' => 'Todas as regras e grupos de regras foram excluídos', + 'deleted_all_object_groups' => 'Todos os grupos foram excluídos', + 'deleted_all_accounts' => 'Todas as contas foram excluídas', + 'deleted_all_asset_accounts' => 'Todas as contas de ativos foram excluídas', + 'deleted_all_expense_accounts' => 'Todas as contas de despesas foram excluídas', + 'deleted_all_revenue_accounts' => 'Todas as contas de receita foram excluídas', + 'deleted_all_liabilities' => 'Todos os passivos foram excluídos', + 'deleted_all_transactions' => 'Todas as transações foram excluídas', + 'deleted_all_withdrawals' => 'Todas as saídas foram excluídas', + 'deleted_all_deposits' => 'Todas as entradas foram excluídas', + 'deleted_all_transfers' => 'Todas as transferências foram excluídas', + 'deleted_all_recurring' => 'Todas as transações recorrentes foram excluídas', + 'change_your_password' => 'Alterar sua senha', + 'delete_account' => 'Apagar conta', + 'current_password' => 'Senha atual', + 'new_password' => 'Nova senha', + 'new_password_again' => 'Nova senha (novamente)', + 'delete_your_account' => 'Apagar sua conta', + 'delete_your_account_help' => 'Excluindo sua conta também vai apagar quaisquer contas, transações, qualquer coisa que você pode ter salvo no Firefly III. Tudo será perdido.', + 'delete_your_account_password' => 'Coloque sua senha para continuar.', + 'password' => 'Senha', + 'are_you_sure' => 'Você tem certeza? Você não poderá desfazer isso.', + 'delete_account_button' => 'Apagar sua conta', + 'invalid_current_password' => 'Senha atual inválida!', + 'password_changed' => 'Senha alterada!', + 'should_change' => 'A idéia é alterar sua senha.', + 'invalid_password' => 'Senha inválida!', + 'what_is_pw_security' => 'O que é "verificar a segurança da senha"?', + 'secure_pw_title' => 'Como escolher uma senha segura', + 'forgot_password_response' => 'Caso exista uma conta com este endereço de e-mail, você encontrará instruções em sua caixa de entrada.', + 'secure_pw_history' => 'Não é toda semana que você lê notícias sobre site que perde as senhas de seus usuários. Hackers e ladrões usam essas senhas para tentar roubar suas informações privadas. Esta informação é valiosa.', + 'secure_pw_ff' => 'Você usa a mesma senha em toda a internet? Se um site perder sua senha, os hackers terão acesso a todos os seus dados. O Firefly III depende de você para escolher uma senha forte e única para proteger seus registros financeiros.', + 'secure_pw_check_box' => 'Para ajudá-lo o Firefly III pode verificar se a senha que você deseja usar foi roubada anteriormente. Se for esse o caso, o Firefly III aconselha a você NÃO utilizar essa senha.', + 'secure_pw_working_title' => 'Como isso funciona?', + 'secure_pw_working' => 'Ao marcar a caixa de seleção, o Firefly III enviará os cinco primeiros caracteres do hash SHA1 de sua senha ao site Troy Hunt, para verificar se ela está na lista. Isso impede que você use senhas inseguras, como recomendado na última publicação NIST Special sobre esse assunto.', + 'secure_pw_should' => 'Devo verificar a caixa?', + 'secure_pw_long_password' => 'Sim. Sempre verificar se sua senha é segura.', + 'command_line_token' => 'Token de linha de comando', + 'explain_command_line_token' => 'Você precisa desse token para executar ações na linha de comando, como exportação de dados. Sem ele, esse comando sensível não irá funcionar. Não compartilhe seu token de linha de comando. Ninguém irá te perguntar sobre esse token, nem mesmo eu. se você tiver medo de perder ele, ou quando estiver paranoico, crie um novo token usando o botão.', + 'regenerate_command_line_token' => 'Regenerar token de linha de comando', + 'token_regenerated' => 'Foi gerado um novo token de linha de comando', + 'change_your_email' => 'Altere seu endereço de email', + 'email_verification' => 'Uma mensagem de e-mail será enviada para o seu endereço de e-mail antigo E novo. Por razões de segurança, você não será capaz de fazer login até você confirmar seu novo endereço de e-mail. Se você não tem certeza se sua instalação do Firefly III é capaz de enviar e-mail, por favor não use esse recurso. Se você é um administrador, você pode testar isso na Administração.', + 'email_changed_logout' => 'Até que você verifique seu endereço de e-mail, não pode iniciar sessão.', + 'login_with_new_email' => 'Agora você pode fazer login com seu novo endereço de e-mail.', + 'login_with_old_email' => 'Agora você pode fazer login novamente com o seu endereço de e-mail antigo.', + 'login_provider_local_only' => 'Esta ação não está disponível durante a autenticação por meio de ":login_provider".', + 'external_user_mgt_disabled' => 'Esta ação não está disponível quando o Firefly III não é responsável pelo gerenciamento de usuários ou manipulação de autenticação.', + 'external_auth_disabled' => 'Esta ação não está disponível quando o Firefly III não é responsável pela autenticação.', + 'delete_local_info_only' => 'Como o Firefly III não é responsável pelo gerenciamento de usuários ou pela manipulação de autenticação, esta função excluirá apenas informações locais do Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Clientes OAuth', + 'profile_oauth_no_clients' => 'Você não criou nenhum cliente OAuth.', + 'profile_oauth_clients_external_auth' => 'Se você estiver usando um provedor de autenticação externo, como Authelia, clientes OAuth (como apps) não funcionarão. Você só poderá usar Tokens de Acesso Pessoal.', + 'profile_oauth_clients_header' => 'Clientes', + 'profile_oauth_client_id' => 'ID do Cliente', + 'profile_oauth_client_name' => 'Nome', + 'profile_oauth_client_secret' => 'Segredo', + 'profile_oauth_create_new_client' => 'Criar um novo cliente', + 'profile_oauth_create_client' => 'Criar um cliente', + 'profile_oauth_edit_client' => 'Editar cliente', + 'profile_oauth_name_help' => 'Alguma coisa que seus usuários vão reconhecer e identificar.', + 'profile_oauth_redirect_url' => 'URL de redirecionamento', + 'profile_oauth_redirect_url_help' => 'A URL de retorno da sua solicitação de autorização.', + 'profile_authorized_apps' => 'Aplicativos autorizados', + 'profile_authorized_clients' => 'Clientes autorizados', + 'profile_scopes' => 'Escopos', + 'profile_revoke' => 'Revogar', + 'profile_oauth_client_secret_title' => 'Segredo do cliente', + 'profile_oauth_client_secret_expl' => 'Aqui está o seu novo segredo de cliente. Esta é a única vez que ela será mostrada, então não o perca! Agora você pode usar este segredo para fazer requisições de API.', + 'profile_personal_access_tokens' => 'Tokens de acesso pessoal', + 'profile_personal_access_token' => 'Token de acesso pessoal', + 'profile_oauth_confidential' => 'Confidencial', + 'profile_oauth_confidential_help' => 'Exige que o cliente se autentique com um segredo. Clientes confidenciais podem manter credenciais de forma segura sem expô-las à partes não autorizadas. Aplicações públicas, como aplicações de área de trabalho nativas ou JavaScript SPA, são incapazes de manter segredos com segurança.', + 'profile_personal_access_token_explanation' => 'Aqui está seu novo token de acesso pessoal. Esta é a única vez que ela será mostrada então não perca! Agora você pode usar esse token para fazer solicitações de API.', + 'profile_no_personal_access_token' => 'Você não criou nenhum token de acesso pessoal.', + 'profile_create_new_token' => 'Criar novo token', + 'profile_create_token' => 'Criar token', + 'profile_create' => 'Criar', + 'profile_save_changes' => 'Salvar alterações', + 'profile_whoops' => 'Ops!', + 'profile_something_wrong' => 'Alguma coisa deu errado!', + 'profile_try_again' => 'Algo deu errado. Por favor tente novamente.', + 'amounts' => 'Quantias', + 'multi_account_warning_unknown' => 'Dependendo do tipo de transação que você criar, a conta de origem e/ou de destino das divisões subsequentes pode ser sobrescrita pelo que estiver definido na primeira divisão da transação.', + 'multi_account_warning_withdrawal' => 'Tenha em mente que a conta de origem das divisões subsequentes será sobrescrita pelo que estiver definido na primeira divisão da saída.', + 'multi_account_warning_deposit' => 'Tenha em mente que a conta de destino das divisões subsequentes será sobrescrita pelo que estiver definido na primeira divisão da entrada.', + 'multi_account_warning_transfer' => 'Tenha em mente que a conta de origem + de destino das divisões subsequentes serão sobrescritas pelo que for definido na primeira divisão da transferência.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Exportar dados do Firefly III', - 'export_data_menu' => 'Exportar dados', - 'export_data_bc' => 'Exportar dados do Firefly III', - 'export_data_main_title' => 'Exportar dados do Firefly III', - 'export_data_expl' => 'Este link permite que você exporte todas as transações e os metadados do Firefly lll. Por favor, consulte a ajuda (ícone no topo direito (?)) para mais informações sobre o processo.', - 'export_data_all_transactions' => 'Exportar todas as transações', - 'export_data_advanced_expl' => 'Se você precisa de um tipo mais avançado ou específico de exportação, leia a ajuda sobre como utilizar o console de comandos php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Exportar dados do Firefly III', + 'export_data_menu' => 'Exportar dados', + 'export_data_bc' => 'Exportar dados do Firefly III', + 'export_data_main_title' => 'Exportar dados do Firefly III', + 'export_data_expl' => 'Este botão permite que você exporte todas as transações e os metadados do Firefly lll. Por favor, consulte a ajuda (ícone no topo direito (?)) para mais informações sobre o processo.', + 'export_data_all_transactions' => 'Exportar todas as transações', + 'export_data_advanced_expl' => 'Se você precisa de um tipo mais avançado ou específico de exportação, leia a ajuda sobre como utilizar o console de comandos php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Um anexo|:count anexos', - 'attachments' => 'Anexos', - 'edit_attachment' => 'Editar anexo ":name"', - 'update_attachment' => 'Atualizar anexo', - 'delete_attachment' => 'Apagar anexo ":name"', - 'attachment_deleted' => 'Anexo apagado ":name"', - 'liabilities_deleted' => 'Passivo excluído ":name"', - 'attachment_updated' => 'Anexo atualizado ":name"', - 'upload_max_file_size' => 'Tamanho máximo do arquivo: :size', - 'list_all_attachments' => 'Lista de todos os anexos', + 'nr_of_attachments' => 'Um anexo|:count anexos', + 'attachments' => 'Anexos', + 'edit_attachment' => 'Editar anexo ":name"', + 'update_attachment' => 'Atualizar anexo', + 'delete_attachment' => 'Apagar anexo ":name"', + 'attachment_deleted' => 'Anexo apagado ":name"', + 'liabilities_deleted' => 'Passivo ":name" excluído', + 'attachment_updated' => 'Anexo atualizado ":name"', + 'upload_max_file_size' => 'Tamanho máximo do arquivo: :size', + 'list_all_attachments' => 'Lista de todos os anexos', // transaction index - 'title_expenses' => 'Despesas', - 'title_withdrawal' => 'Despesas', - 'title_revenue' => 'Receitas / Renda', - 'title_deposit' => 'Receita / Renda', - 'title_transfer' => 'Transferências', - 'title_transfers' => 'Transferências', - 'submission_options' => 'Opções de envio', - 'apply_rules_checkbox' => 'Aplicar regras', - 'fire_webhooks_checkbox' => 'Acionar webhooks', + 'is_reconciled_fields_dropped' => 'Como a transação está reconciliada, você não pode atualizar as contas, nem o(s) valor(es).', + 'title_expenses' => 'Despesas', + 'title_withdrawal' => 'Despesas', + 'title_revenue' => 'Receitas / Renda', + 'title_deposit' => 'Receita / Renda', + 'title_transfer' => 'Transferências', + 'title_transfers' => 'Transferências', + 'submission_options' => 'Opções de envio', + 'apply_rules_checkbox' => 'Aplicar regras', + 'fire_webhooks_checkbox' => 'Acionar webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Esta transação é já uma retirada', - 'convert_is_already_type_Deposit' => 'Esta operação já é um depósito', - 'convert_is_already_type_Transfer' => 'Esta transação é já uma transferência', - 'convert_to_Withdrawal' => 'Converter ":description" para uma saída', - 'convert_to_Deposit' => 'Converter ":description" de um depósito', - 'convert_to_Transfer' => 'Converter ":description" para uma transferência', - 'convert_options_WithdrawalDeposit' => 'Converter uma retirada em um depósito', - 'convert_options_WithdrawalTransfer' => 'Converter uma retirada em uma transferência', - 'convert_options_DepositTransfer' => 'Converter um depósito em uma transferência', - 'convert_options_DepositWithdrawal' => 'Converter um depósito em uma retirada', - 'convert_options_TransferWithdrawal' => 'Converter uma transferência em uma retirada', - 'convert_options_TransferDeposit' => 'Converter uma transferência em um depósito', - 'convert_Withdrawal_to_deposit' => 'Converter esta retirada de um depósito', - 'convert_Withdrawal_to_transfer' => 'Converter esta retirada para uma transferência', - 'convert_Deposit_to_withdrawal' => 'Converter este depósito para uma retirada', - 'convert_Deposit_to_transfer' => 'Converter este depósito para uma transferência', - 'convert_Transfer_to_deposit' => 'Converter esta transferência para um depósito', - 'convert_Transfer_to_withdrawal' => 'Converter esta transferência a uma retirada', - 'convert_please_set_revenue_source' => 'Por favor, escolha a conta de receitas de onde virá o dinheiro.', - 'convert_please_set_asset_destination' => 'Por favor, escolha a conta de ativo para onde vai o dinheiro.', - 'convert_please_set_expense_destination' => 'Por favor, escolha a conta de despesas para onde o dinheiro vai.', - 'convert_please_set_asset_source' => 'Por favor, escolha a conta de ativo, de onde virá o dinheiro.', - 'convert_expl_w_d' => 'Ao converter uma saída para uma entrada, o dinheiro será depositado na conta de destino exibida, em vez de ser retirado dela.|Ao converter uma saída para uma entrada, o dinheiro será depositado nas contas de destino exibidas, em vez de ser retirado delas.', - 'convert_expl_w_t' => 'Ao converter uma saída em uma transferência, o dinheiro será transferido para fora da conta de origem para outra conta de ativo ou conta de responsabilidade em vez de ser gasto na conta de despesa original.|Ao converter uma saída em uma transferência, o dinheiro será transferido das contas de origem para outras contas de ativo ou contas de responsabilidade em vez de ser gasto nas contas de despesas originais.', - 'convert_expl_d_w' => 'Ao converter uma entrada para uma saída, o dinheiro será retirado da conta de destino exibida, em vez de ser depositado nela.|Ao converter uma entrada para uma entrada, o dinheiro será retirado das contas de destino exibidas, em vez de ser depositados nelas.', - 'convert_expl_d_t' => 'Quando você converte uma entrada em uma transferência, o dinheiro será depositado na conta de destino listada de sua conta de ativo ou de responsabilidade.|Quando você converter uma entrada em uma transferência, o dinheiro será depositado nas contas de destino listadas de qualquer um dos seus ativos ou contas de responsabilidade.', - 'convert_expl_t_w' => 'Quando você converter uma transferência em uma saída, o dinheiro será gasto na conta de destino que você definir aqui, em vez de ser transferido.|Quando você converter uma transferência em uma saída, o dinheiro será gasto nas contas de destino que você definir aqui, em vez de ser transferido.', - 'convert_expl_t_d' => 'Quando você converte uma transferência ema uma entrada, o dinheiro será depositado na conta de destino que você vê aqui, em vez de ser transferido para ele.|Quando você converte uma transferência em uma entrada, o dinheiro será depositado nas contas de destino que você vê aqui, em vez de ser transferido para elas.', - 'convert_select_sources' => 'Para completar a conversão, defina a nova conta de origem abaixo.|Para completar a conversão, por favor, defina as novas contas de origem abaixo.', - 'convert_select_destinations' => 'Para completar a conversão, por favor, selecione a nova conta de destino abaixo.|Para completar a conversão, selecione as novas contas de destino abaixo.', - 'converted_to_Withdrawal' => 'A transação foi convertida em uma saída', - 'converted_to_Deposit' => 'A transação foi convertida em entrada', - 'converted_to_Transfer' => 'A transação foi convertida em uma transferência', - 'invalid_convert_selection' => 'A conta que você selecionou já é usada nesta transação ou não existe.', - 'source_or_dest_invalid' => 'Os detalhes corretos da transação não foram encontrados. A conversão não é possível.', - 'convert_to_withdrawal' => 'Converter para saída', - 'convert_to_deposit' => 'Converter para entrada', - 'convert_to_transfer' => 'Converter para transferência', + 'convert_is_already_type_Withdrawal' => 'Esta transação já é uma saída', + 'convert_is_already_type_Deposit' => 'Esta transação já é uma entrada', + 'convert_is_already_type_Transfer' => 'Esta transação é já uma transferência', + 'convert_to_Withdrawal' => 'Converter ":description" para uma saída', + 'convert_to_Deposit' => 'Converter ":description" para uma entrada', + 'convert_to_Transfer' => 'Converter ":description" para uma transferência', + 'convert_options_WithdrawalDeposit' => 'Converter uma saída em uma entrada', + 'convert_options_WithdrawalTransfer' => 'Converter uma saída para uma transferência', + 'convert_options_DepositTransfer' => 'Converter uma entrada em uma transferência', + 'convert_options_DepositWithdrawal' => 'Converter uma entrada em uma saída', + 'convert_options_TransferWithdrawal' => 'Converter uma transferência em uma saída', + 'convert_options_TransferDeposit' => 'Converter uma transferência em uma entrada', + 'convert_Withdrawal_to_deposit' => 'Converter esta saída de uma entrada', + 'convert_Withdrawal_to_transfer' => 'Converter esta saída para uma transferência', + 'convert_Deposit_to_withdrawal' => 'Converter esta entrada para uma saída', + 'convert_Deposit_to_transfer' => 'Converter esta entrada para uma transferência', + 'convert_Transfer_to_deposit' => 'Converter esta transferência para uma entrada', + 'convert_Transfer_to_withdrawal' => 'Converter esta transferência em uma saída', + 'convert_please_set_revenue_source' => 'Por favor, escolha a conta de receitas de onde virá o dinheiro.', + 'convert_please_set_asset_destination' => 'Por favor, escolha a conta de ativo para onde vai o dinheiro.', + 'convert_please_set_expense_destination' => 'Por favor, escolha a conta de despesas para onde o dinheiro vai.', + 'convert_please_set_asset_source' => 'Por favor, escolha a conta de ativo, de onde virá o dinheiro.', + 'convert_expl_w_d' => 'Ao converter uma saída para uma entrada, o dinheiro será depositado na conta de destino exibida, em vez de ser retirado dela.|Ao converter uma saída para uma entrada, o dinheiro será depositado nas contas de destino exibidas, em vez de ser retirado delas.', + 'convert_expl_w_t' => 'Ao converter uma saída em uma transferência, o dinheiro será transferido para fora da conta de origem para outra conta de ativo ou conta de responsabilidade em vez de ser gasto na conta de despesa original.|Ao converter uma saída em uma transferência, o dinheiro será transferido das contas de origem para outras contas de ativo ou contas de responsabilidade em vez de ser gasto nas contas de despesas originais.', + 'convert_expl_d_w' => 'Ao converter uma entrada para uma saída, o dinheiro será retirado da conta de destino exibida, em vez de ser depositado nela.|Ao converter uma entrada para uma entrada, o dinheiro será retirado das contas de destino exibidas, em vez de ser depositados nelas.', + 'convert_expl_d_t' => 'Quando você converte uma entrada em uma transferência, o dinheiro será depositado na conta de destino listada de sua conta de ativo ou de responsabilidade.|Quando você converter uma entrada em uma transferência, o dinheiro será depositado nas contas de destino listadas de qualquer um dos seus ativos ou contas de responsabilidade.', + 'convert_expl_t_w' => 'Quando você converter uma transferência em uma saída, o dinheiro será gasto na conta de destino que você definir aqui, em vez de ser transferido.|Quando você converter uma transferência em uma saída, o dinheiro será gasto nas contas de destino que você definir aqui, em vez de ser transferido.', + 'convert_expl_t_d' => 'Quando você converte uma transferência ema uma entrada, o dinheiro será depositado na conta de destino que você vê aqui, em vez de ser transferido para ele.|Quando você converte uma transferência em uma entrada, o dinheiro será depositado nas contas de destino que você vê aqui, em vez de ser transferido para elas.', + 'convert_select_sources' => 'Para completar a conversão, defina a nova conta de origem abaixo.|Para completar a conversão, por favor, defina as novas contas de origem abaixo.', + 'convert_select_destinations' => 'Para completar a conversão, por favor, selecione a nova conta de destino abaixo.|Para completar a conversão, selecione as novas contas de destino abaixo.', + 'converted_to_Withdrawal' => 'A transação foi convertida em uma saída', + 'converted_to_Deposit' => 'A transação foi convertida em entrada', + 'converted_to_Transfer' => 'A transação foi convertida em uma transferência', + 'invalid_convert_selection' => 'A conta que você selecionou já é usada nesta transação ou não existe.', + 'source_or_dest_invalid' => 'Os detalhes corretos da transação não foram encontrados. A conversão não é possível.', + 'convert_to_withdrawal' => 'Converter para saída', + 'convert_to_deposit' => 'Converter para entrada', + 'convert_to_transfer' => 'Converter para transferência', // create new stuff: - 'create_new_withdrawal' => 'Criar nova retirada', - 'create_new_deposit' => 'Criar um novo depósito', - 'create_new_transfer' => 'Criar nova transferência', - 'create_new_asset' => 'Criar nova conta de ativo', - 'create_new_liabilities' => 'Criar novo passivo', - 'create_new_expense' => 'Criar nova conta de despesa', - 'create_new_revenue' => 'Criar nova conta de receita', - 'create_new_piggy_bank' => 'Criar novo cofrinho', - 'create_new_bill' => 'Criar nova fatura', - 'create_new_subscription' => 'Criar nova assinatura', - 'create_new_rule' => 'Criar nova regra', + 'create_new_withdrawal' => 'Criar nova saída', + 'create_new_deposit' => 'Criar uma nova entrada', + 'create_new_transfer' => 'Criar nova transferência', + 'create_new_asset' => 'Criar nova conta de ativo', + 'create_new_liabilities' => 'Criar novo passivo', + 'create_new_expense' => 'Criar nova conta de despesa', + 'create_new_revenue' => 'Criar nova conta de receita', + 'create_new_piggy_bank' => 'Criar novo cofrinho', + 'create_new_bill' => 'Criar nova conta', + 'create_new_subscription' => 'Criar nova assinatura', + 'create_new_rule' => 'Criar nova regra', // currencies: - 'create_currency' => 'Criar uma nova moeda', - 'store_currency' => 'Armazenar nova moeda', - 'update_currency' => 'Atualizar moeda', - 'new_default_currency' => 'Agora :name é a moeda padrão.', - 'cannot_delete_currency' => 'Não é possível excluir :name porque ainda está em uso.', - 'cannot_delete_fallback_currency' => ':name é a moeda padrão do sistema e não pode ser excluída.', - 'cannot_disable_currency_journals' => 'Não é possível desativar :name porque as transações ainda estão a usando.', - 'cannot_disable_currency_last_left' => ':name não pode ser desabilitada pois essa é a única moeda ativa.', - 'cannot_disable_currency_account_meta' => ':name não pode ser desabilitada pois é utilizada nas contas de ativos.', - 'cannot_disable_currency_bills' => ':name não pode ser desabilitada pois ela é utilizada em contas de consumo.', - 'cannot_disable_currency_recurring' => ':name não pode ser desabilitada pois é utilizada nas transações recorrentes.', - 'cannot_disable_currency_available_budgets' => ':name não pode ser desabilitada pois é utilizada em orçamentos existentes.', - 'cannot_disable_currency_budget_limits' => ':name não pode ser desabilitada pois é utilizada em limites dos orçamentos.', - 'cannot_disable_currency_current_default' => ':name não pode ser desabilitada pois é moeda atualmente utilizada.', - 'cannot_disable_currency_system_fallback' => ':name não pode ser desabilitada pois é moeda padrão do sistema.', - 'disable_EUR_side_effects' => 'O Euro é a moeda de recurso de emergência do sistema. Desativar pode ter efeitos colaterais indesejados e pode violar sua garantia.', - 'deleted_currency' => 'Moeda :name excluída', - 'created_currency' => 'Moeda :name criada', - 'could_not_store_currency' => 'Não foi possível guardar a nova moeda.', - 'updated_currency' => 'Moeda :name atualizada', - 'ask_site_owner' => 'Por favor, pergunte ao :owner para adicionar, remover ou editar moedas.', - 'currencies_intro' => 'Firefly III oferece suporte a várias moedas que você pode definir e ativar aqui.', - 'make_default_currency' => 'Tornar padrão', - 'default_currency' => 'padrão', - 'currency_is_disabled' => 'Desabilitado', - 'enable_currency' => 'Habilitar', - 'disable_currency' => 'Desabilitar', - 'currencies_default_disabled' => 'A maioria das moedas é desabilitada por padrão. Para usá-las, você deve primeiro habilitá-las.', - 'currency_is_now_enabled' => 'Moeda ":name" foi ativada', - 'currency_is_now_disabled' => 'Moeda ":name" foi desativada', + 'create_currency' => 'Criar uma nova moeda', + 'store_currency' => 'Armazenar nova moeda', + 'update_currency' => 'Atualizar moeda', + 'new_default_currency' => '":name" é agora a moeda padrão.', + 'default_currency_failed' => 'Não foi possível tornar ":name" a moeda padrão. Por favor, verifique os logs.', + 'cannot_delete_currency' => 'Não é possível excluir :name porque ainda está em uso.', + 'cannot_delete_fallback_currency' => ':name é a moeda padrão do sistema e não pode ser excluída.', + 'cannot_disable_currency_journals' => 'Não é possível desativar :name porque as transações ainda estão a usando.', + 'cannot_disable_currency_last_left' => ':name não pode ser desabilitada pois essa é a única moeda ativa.', + 'cannot_disable_currency_account_meta' => ':name não pode ser desabilitada pois é utilizada nas contas de ativos.', + 'cannot_disable_currency_bills' => ':name não pode ser desabilitada pois é utilizada nas faturas.', + 'cannot_disable_currency_recurring' => ':name não pode ser desabilitada pois é utilizada nas transações recorrentes.', + 'cannot_disable_currency_available_budgets' => ':name não pode ser desabilitada pois é utilizada em orçamentos existentes.', + 'cannot_disable_currency_budget_limits' => ':name não pode ser desabilitada pois é utilizada em limites dos orçamentos.', + 'cannot_disable_currency_current_default' => ':name não pode ser desabilitada pois é moeda atualmente utilizada.', + 'cannot_disable_currency_system_fallback' => ':name não pode ser desabilitada pois é moeda padrão do sistema.', + 'disable_EUR_side_effects' => 'O Euro é a moeda de recurso de emergência do sistema. Desativar pode ter efeitos colaterais indesejados e pode violar sua garantia.', + 'deleted_currency' => 'Moeda :name excluída', + 'created_currency' => 'Moeda :name criada', + 'could_not_store_currency' => 'Não foi possível guardar a nova moeda.', + 'updated_currency' => 'Moeda :name atualizada', + 'ask_site_owner' => 'Por favor, peça para :owner para adicionar, remover ou editar moedas.', + 'currencies_intro' => 'Firefly III oferece suporte a várias moedas que você pode definir e ativar aqui.', + 'make_default_currency' => 'Tornar padrão', + 'default_currency' => 'padrão', + 'currency_is_disabled' => 'Desabilitado', + 'enable_currency' => 'Habilitar', + 'disable_currency' => 'Desabilitar', + 'currencies_default_disabled' => 'A maioria das moedas é desabilitada por padrão. Para usá-las, você deve primeiro habilitá-las.', + 'currency_is_now_enabled' => 'Moeda ":name" foi ativada', + 'could_not_enable_currency' => 'Não foi possível habilitar a moeda ":name". Por favor, revise os logs.', + 'currency_is_now_disabled' => 'Moeda ":name" foi desativada', + 'could_not_disable_currency' => 'Não foi possível desabilitar a moeda ":name". Será que ainda está em uso?', // forms: - 'mandatoryFields' => 'Campos obrigatórios', - 'optionalFields' => 'Campos opcionais', - 'options' => 'Opções', + 'mandatoryFields' => 'Campos obrigatórios', + 'optionalFields' => 'Campos opcionais', + 'options' => 'Opções', // budgets: - 'daily_budgets' => 'Orçamentos diários', - 'weekly_budgets' => 'Orçamentos semanais', - 'monthly_budgets' => 'Orçamentos mensais', - 'quarterly_budgets' => 'Orçamentos trimestrais', - 'half_year_budgets' => 'Orçamentos semestrais', - 'yearly_budgets' => 'Orçamentos anuais', - 'other_budgets' => 'Orçamentos de períodos personalizados', - 'budget_limit_not_in_range' => 'Esta quantia aplica-se de :start a :end:', - 'total_available_budget' => 'Total de orçamentos disponíveis (entre :start e :end)', - 'total_available_budget_in_currency' => 'Orçamentos disponíveis em :currency', - 'see_below' => 'veja abaixo', - 'create_new_budget' => 'Criar um novo orçamento', - 'store_new_budget' => 'Armazenar novo orçamento', - 'stored_new_budget' => 'Novo orçamento armazenado ":name"', - 'available_between' => 'Disponível entre :start e :end', - 'transactionsWithoutBudget' => 'Despesas sem orçamentos', - 'transactions_no_budget' => 'Despesas sem orçamento entre :start e :end', - 'spent_between' => 'Gasto entre :start e :end', - 'set_available_amount' => 'Definir o valor disponível', - 'update_available_amount' => 'Atualizar o valor disponível', - 'ab_basic_modal_explain' => 'Use este formulário para indicar quanto você espera gastar (no total, em :currency) no período indicado.', - 'createBudget' => 'Novo orçamento', - 'invalid_currency' => 'Esta é uma moeda inválida', - 'invalid_amount' => 'Por favor, insira uma quantidade', - 'set_ab' => 'O valor do orçamento disponível foi definido', - 'updated_ab' => 'O montante do orçamento disponível foi atualizado', - 'deleted_ab' => 'O montante do orçamento disponível foi excluído', - 'deleted_bl' => 'O valor orçado foi removido', - 'alt_currency_ab_create' => 'Definir o orçamento disponível em outra moeda', - 'bl_create_btn' => 'Definir o orçamento em outra moeda', - 'inactiveBudgets' => 'Orçamentos inativos', - 'without_budget_between' => 'Transações sem um orçamento entre :start e :end', - 'delete_budget' => 'Excluir orçamento ":name"', - 'deleted_budget' => 'Orçamento ":name" excluído', - 'edit_budget' => 'Editar orçamento ":name"', - 'updated_budget' => 'Orçamento atualizado ":name"', - 'update_amount' => 'Atualizar quantia', - 'update_budget' => 'Atualizar Orçamento', - 'update_budget_amount_range' => 'Atualizar quantia disponível (esperada) entre :start e :end', - 'set_budget_limit_title' => 'Definir valor para o orçamento :budget entre :start e :end', - 'set_budget_limit' => 'Definir valor orçado', - 'budget_period_navigator' => 'Navegador do período', - 'info_on_available_amount' => 'O que tenho disponível?', - 'available_amount_indication' => 'Use esses montantes para obter uma indicação do que seu orçamento total poderia ser.', - 'suggested' => 'Sugerido', - 'average_between' => 'Média entre :start e :end', - 'transferred_in' => 'Transferido (para)', - 'transferred_away' => 'Transferido (fora)', - 'auto_budget_none' => 'Sem orçamento automático', - 'auto_budget_reset' => 'Definir um valor fixo a cada período', - 'auto_budget_rollover' => 'Adicionar valor a cada período', - 'auto_budget_adjusted' => 'Adicionar um valor a cada período e corrigir para gastos excessivos', - 'auto_budget_period_daily' => 'Diariamente', - 'auto_budget_period_weekly' => 'Semanalmente', - 'auto_budget_period_monthly' => 'Mensalmente', - 'auto_budget_period_quarterly' => 'Trimestralmente', - 'auto_budget_period_half_year' => 'A cada semestre', - 'auto_budget_period_yearly' => 'Anualmente', - 'auto_budget_help' => 'Você pode ler mais sobre esta função na seção ajuda. Clique no ícone superior direito (?).', - 'auto_budget_reset_icon' => 'Este orçamento será definido periodicamente', - 'auto_budget_rollover_icon' => 'O valor orçado aumentará periodicamente', - 'auto_budget_adjusted_icon' => 'O valor do orçamento aumentará periodicamente e correrá para gastos excessivos pendentes', - 'remove_budgeted_amount' => 'Remover montante orçado em :currency', + 'daily_budgets' => 'Orçamentos diários', + 'weekly_budgets' => 'Orçamentos semanais', + 'monthly_budgets' => 'Orçamentos mensais', + 'quarterly_budgets' => 'Orçamentos trimestrais', + 'half_year_budgets' => 'Orçamentos semestrais', + 'yearly_budgets' => 'Orçamentos anuais', + 'other_budgets' => 'Orçamentos de períodos personalizados', + 'budget_limit_not_in_range' => 'Esta quantia aplica-se de :start a :end:', + 'total_available_budget' => 'Total de orçamentos disponíveis (entre :start e :end)', + 'total_available_budget_in_currency' => 'Orçamentos disponíveis em :currency', + 'see_below' => 'veja abaixo', + 'create_new_budget' => 'Criar um novo orçamento', + 'store_new_budget' => 'Armazenar novo orçamento', + 'stored_new_budget' => 'Novo orçamento armazenado ":name"', + 'available_between' => 'Disponível entre :start e :end', + 'transactionsWithoutBudget' => 'Despesas sem orçamentos', + 'transactions_no_budget' => 'Despesas sem orçamento entre :start e :end', + 'spent_between' => 'Gasto entre :start e :end', + 'spent_between_left' => 'Gasto :spent entre :start e :end, restando :left.', + 'set_available_amount' => 'Definir o valor disponível', + 'update_available_amount' => 'Atualizar o valor disponível', + 'ab_basic_modal_explain' => 'Use este formulário para indicar quanto você espera gastar (no total, em :currency) no período indicado.', + 'createBudget' => 'Novo orçamento', + 'invalid_currency' => 'Esta é uma moeda inválida', + 'invalid_amount' => 'Por favor, insira uma quantidade', + 'set_ab' => 'O valor do orçamento disponível foi definido', + 'updated_ab' => 'O montante do orçamento disponível foi atualizado', + 'deleted_ab' => 'O montante do orçamento disponível foi excluído', + 'deleted_bl' => 'O valor orçado foi removido', + 'alt_currency_ab_create' => 'Definir o orçamento disponível em outra moeda', + 'bl_create_btn' => 'Definir o orçamento em outra moeda', + 'inactiveBudgets' => 'Orçamentos inativos', + 'without_budget_between' => 'Transações sem um orçamento entre :start e :end', + 'delete_budget' => 'Excluir orçamento ":name"', + 'deleted_budget' => 'Orçamento ":name" excluído', + 'edit_budget' => 'Editar orçamento ":name"', + 'updated_budget' => 'Orçamento atualizado ":name"', + 'update_amount' => 'Atualizar quantia', + 'update_budget' => 'Atualizar Orçamento', + 'update_budget_amount_range' => 'Atualizar quantia disponível (esperada) entre :start e :end', + 'set_budget_limit_title' => 'Definir valor para o orçamento :budget entre :start e :end', + 'set_budget_limit' => 'Definir valor orçado', + 'budget_period_navigator' => 'Navegador do período', + 'info_on_available_amount' => 'O que tenho disponível?', + 'available_amount_indication' => 'Use esses montantes para obter uma indicação do que seu orçamento total poderia ser.', + 'suggested' => 'Sugerido', + 'average_between' => 'Média entre :start e :end', + 'transferred_in' => 'Transferido (para)', + 'transferred_away' => 'Transferido (fora)', + 'auto_budget_none' => 'Sem orçamento automático', + 'auto_budget_reset' => 'Definir um valor fixo a cada período', + 'auto_budget_rollover' => 'Adicionar valor a cada período', + 'auto_budget_adjusted' => 'Adicionar um valor a cada período e corrigir para gastos excessivos', + 'auto_budget_period_daily' => 'Diariamente', + 'auto_budget_period_weekly' => 'Semanalmente', + 'auto_budget_period_monthly' => 'Mensalmente', + 'auto_budget_period_quarterly' => 'Trimestralmente', + 'auto_budget_period_half_year' => 'A cada semestre', + 'auto_budget_period_yearly' => 'Anualmente', + 'auto_budget_help' => 'Você pode ler mais sobre esta função na seção ajuda. Clique no ícone superior direito (?).', + 'auto_budget_reset_icon' => 'Este orçamento será definido periodicamente', + 'auto_budget_rollover_icon' => 'O valor orçado aumentará periodicamente', + 'auto_budget_adjusted_icon' => 'O valor do orçamento aumentará periodicamente e corrigirá para gastos excessivos', + 'remove_budgeted_amount' => 'Remover montante orçado em :currency', // bills: - 'subscription' => 'Assinatura', - 'not_expected_period' => 'Não esperado este período', - 'subscriptions_in_group' => 'Assinaturas no grupo "%{title}"', - 'subscr_expected_x_times' => 'Espera-se pagar %{amount} %{times} vezes neste período', - 'not_or_not_yet' => 'Não (ainda)', - 'visit_bill' => 'Visite a fatura ":name" no Firefly III', - 'match_between_amounts' => 'Fatura corresponde a transações entre :low e :high.', - 'running_again_loss' => 'Transações previamente vinculadas a esta fatura podem perder sua conexão, se elas (não mais) corresponderem à(s) regra(s).', - 'bill_related_rules' => 'Regras relacionadas a esta conta', - 'repeats' => 'Repetições', - 'bill_end_date_help' => 'Campo opcional. Espera-se que a fatura termine nesta data.', - 'bill_extension_date_help' => 'Campo opcional. A fatura deve ser renovada (ou cancelada) nesta ou antes desta data.', - 'bill_end_index_line' => 'Esta fatura termina em :date', - 'bill_extension_index_line' => 'Esta fatura deve ser renovada ou cancelada em :date', - 'connected_journals' => 'Transações conectadas', - 'auto_match_on' => 'Automaticamente correspondente com Firefly III', - 'auto_match_off' => 'Não corresponde automaticamente com Firefly III', - 'next_expected_match' => 'Próximo correspondente esperado', - 'delete_bill' => 'Apagar fatura ":name"', - 'deleted_bill' => 'Fatura apagada ":name"', - 'edit_bill' => 'Editar fatura ":name"', - 'more' => 'Mais', - 'rescan_old' => 'Executar regras novamente, em todas as transações', - 'update_bill' => 'Atualizar fatura', - 'updated_bill' => 'Fatura atualizada ":name"', - 'store_new_bill' => 'Armazenar nova fatura', - 'stored_new_bill' => 'Nova fatura armazenada ":name"', - 'cannot_scan_inactive_bill' => 'Faturas inativas não podem ser verificadas.', - 'rescanned_bill' => 'Verificamos tudo e vinculamos :count transação para a fatura.|Verificamos tudo e vinculamos :count transações para a fatura.', - 'average_bill_amount_year' => 'Média de fatura (:year)', - 'average_bill_amount_overall' => 'Média de fatura (geral)', - 'bill_is_active' => 'Fatura está ativa', - 'bill_expected_between' => 'Esperado entre :start e :end', - 'bill_will_automatch' => 'A fatura será automaticamente vinculada a transações correspondentes', - 'skips_over' => 'ignorar', - 'bill_store_error' => 'Um erro inesperado ocorreu ao armazenar sua nova fatura. Por favor, verifique os arquivos de log', - 'list_inactive_rule' => 'regra inativa', - 'bill_edit_rules' => 'O Firefly III tentará editar a regra relacionada a esta fatura também. Se você editou essa regra, o Firefly III não vai mudar nada. |Firefly III tentará editar :count regras relacionadas a esta fatura também. Se você editou essas regras, no entanto, o Firefly III não vai mudar nada.', - 'bill_expected_date' => 'Esperado :date', - 'bill_expected_date_js' => 'Esperado {date}', - 'expected_amount' => 'Valor (esperado)', - 'bill_paid_on' => 'Pago em {date}', - 'bill_repeats_weekly' => 'Repete semanalmente', - 'bill_repeats_monthly' => 'Repete mensalmente', - 'bill_repeats_quarterly' => 'Repete trimestralmente', - 'bill_repeats_half-year' => 'Repete a cada semestre', - 'bill_repeats_yearly' => 'Repete anualmente', - 'bill_repeats_weekly_other' => 'Repete quinzenalmente', - 'bill_repeats_monthly_other' => 'Repete bimestralmente', - 'bill_repeats_quarterly_other' => 'Repete a cada dois trimestres', - 'bill_repeats_half-year_other' => 'Repete anualmente', - 'bill_repeats_yearly_other' => 'Repete a cada dois anos', - 'bill_repeats_weekly_skip' => 'Repete a cada {skip} semanas', - 'bill_repeats_monthly_skip' => 'Repete a cada {skip} meses', - 'bill_repeats_quarterly_skip' => 'Repete a cada {skip} trimestres', - 'bill_repeats_half-year_skip' => 'Repete a cada {skip} semestres', - 'bill_repeats_yearly_skip' => 'Repete a cada {skip} anos', - 'subscriptions' => 'Assinaturas', - 'go_to_subscriptions' => 'Vá para suas assinaturas', - 'forever' => 'Para sempre', - 'extension_date_is' => 'Data da extensão é {date}', + 'subscription' => 'Assinatura', + 'not_expected_period' => 'Não esperado este período', + 'subscriptions_in_group' => 'Assinaturas no grupo "%{title}"', + 'subscr_expected_x_times' => 'Espera-se pagar %{amount} %{times} vezes neste período', + 'not_or_not_yet' => 'Não (ainda)', + 'visit_bill' => 'Visite a fatura ":name" no Firefly III', + 'match_between_amounts' => 'Fatura corresponde a transações entre :low e :high.', + 'running_again_loss' => 'Transações previamente vinculadas a esta fatura podem perder sua conexão, se elas (não mais) corresponderem à(s) regra(s).', + 'bill_related_rules' => 'Regras relacionadas a essa fatura', + 'repeats' => 'Repetições', + 'bill_end_date_help' => 'Campo opcional. Espera-se que a fatura termine nesta data.', + 'bill_extension_date_help' => 'Campo opcional. A fatura deve ser renovada (ou cancelada) nesta ou antes desta data.', + 'bill_end_index_line' => 'Esta fatura termina em :date', + 'bill_extension_index_line' => 'Esta fatura deve ser renovada ou cancelada em :date', + 'connected_journals' => 'Transações conectadas', + 'auto_match_on' => 'Automaticamente correspondente com Firefly III', + 'auto_match_off' => 'Não corresponde automaticamente com Firefly III', + 'next_expected_match' => 'Próximo correspondente esperado', + 'delete_bill' => 'Apagar conta ":name"', + 'deleted_bill' => 'Fatura ":name" apagada', + 'edit_bill' => 'Editar conta ":name"', + 'more' => 'Mais', + 'rescan_old' => 'Executar regras novamente, em todas as transações', + 'update_bill' => 'Atualizar conta', + 'updated_bill' => 'Conta atualizada ":name"', + 'store_new_bill' => 'Armazenar nova conta', + 'stored_new_bill' => 'Nova conta armazenada ":name"', + 'cannot_scan_inactive_bill' => 'Faturas inativas não podem ser verificadas.', + 'rescanned_bill' => 'Verificamos tudo e vinculamos :count transação para a fatura.|Verificamos tudo e vinculamos :count transações para a fatura.', + 'average_bill_amount_year' => 'Média de fatura (:year)', + 'average_bill_amount_overall' => 'Valor médio de conta (geral)', + 'bill_is_active' => 'Fatura está ativa', + 'bill_expected_between' => 'Esperado entre :start e :end', + 'bill_will_automatch' => 'A fatura será automaticamente vinculada a transações correspondentes', + 'skips_over' => 'ignorar', + 'bill_store_error' => 'Um erro inesperado ocorreu ao armazenar sua nova fatura. Por favor, verifique os arquivos de log', + 'list_inactive_rule' => 'regra inativa', + 'bill_edit_rules' => 'O Firefly III tentará editar a regra relacionada a esta fatura também. Se você editou essa regra, o Firefly III não vai mudar nada. |Firefly III tentará editar :count regras relacionadas a esta fatura também. Se você editou essas regras, no entanto, o Firefly III não vai mudar nada.', + 'bill_expected_date' => 'Esperado :date', + 'bill_expected_date_js' => 'Esperado {date}', + 'expected_amount' => 'Valor (esperado)', + 'bill_paid_on' => 'Pago em {date}', + 'bill_repeats_weekly' => 'Repete semanalmente', + 'bill_repeats_monthly' => 'Repete mensalmente', + 'bill_repeats_quarterly' => 'Repete trimestralmente', + 'bill_repeats_half-year' => 'Repete a cada semestre', + 'bill_repeats_yearly' => 'Repete anualmente', + 'bill_repeats_weekly_other' => 'Repete quinzenalmente', + 'bill_repeats_monthly_other' => 'Repete bimestralmente', + 'bill_repeats_quarterly_other' => 'Repete a cada dois trimestres', + 'bill_repeats_half-year_other' => 'Repete anualmente', + 'bill_repeats_yearly_other' => 'Repete a cada dois anos', + 'bill_repeats_weekly_skip' => 'Repete a cada {skip} semanas', + 'bill_repeats_monthly_skip' => 'Repete a cada {skip} meses', + 'bill_repeats_quarterly_skip' => 'Repete a cada {skip} trimestres', + 'bill_repeats_half-year_skip' => 'Repete a cada {skip} semestres', + 'bill_repeats_yearly_skip' => 'Repete a cada {skip} anos', + 'subscriptions' => 'Assinaturas', + 'go_to_subscriptions' => 'Vá para suas assinaturas', + 'forever' => 'Para sempre', + 'extension_date_is' => 'Data da extensão é {date}', // accounts: - 'i_am_owed_amount' => 'Eu tenho uma dívida a receber', - 'i_owe_amount' => 'Eu tenho uma dívida a pagar', - 'inactive_account_link' => 'Você tem uma conta :count inativa (arquivada) que você pode ver nesta página separada.|Você tem contas :count inativas (arquivadas) que você pode ver nesta página separada.', - 'all_accounts_inactive' => 'Estas são as suas contas inativas.', - 'active_account_link' => 'Este link volta para suas contas ativas.', - 'account_missing_transaction' => 'Conta #:id (":name") não pode ser visualizada diretamente, mas o Firefly está sem informação de redirecionamento.', - 'cc_monthly_payment_date_help' => 'Selecione qualquer ano e mês, eles serão ignorados. Apenas o dia do mês é relevante.', - 'details_for_asset' => 'Detalhes para a conta de ativo ":name"', - 'details_for_expense' => 'Detalhes para a conta de despesas ":name"', - 'details_for_revenue' => 'Detalhes para a conta de receitas ":name"', - 'details_for_cash' => 'Detalhes para a conta de dinheiro ":name"', - 'store_new_asset_account' => 'Armazenar nova conta de ativo', - 'store_new_expense_account' => 'Armazenar nova conta de despesa', - 'store_new_revenue_account' => 'Armazenar nova conta de receita', - 'edit_asset_account' => 'Editar conta de ativo ":name"', - 'edit_expense_account' => 'Editar conta de despesa ":name"', - 'edit_revenue_account' => 'Editar conta de receitas ":name"', - 'delete_asset_account' => 'Excluir conta do activo ":name"', - 'delete_expense_account' => 'Excluir conta de despesas ":name"', - 'delete_revenue_account' => 'Excluir conta de receitas ":name"', - 'delete_liabilities_account' => 'Apagar passivo ":name"', - 'asset_deleted' => 'Conta de ativo ":name" excluído com sucesso', - 'account_deleted' => 'Conta ":name" deletada com sucesso', - 'expense_deleted' => 'Conta de despesa ":name" excluída com sucesso', - 'revenue_deleted' => 'Conta de receitas ":name" excluída com sucesso', - 'update_asset_account' => 'Atualizar de conta de ativo', - 'update_undefined_account' => 'Atualizar conta', - 'update_liabilities_account' => 'Atualizar passivo', - 'update_expense_account' => 'Atualizar conta de despesas', - 'update_revenue_account' => 'Atualizar conta de receita', - 'make_new_asset_account' => 'Criar uma nova conta de ativo', - 'make_new_expense_account' => 'Criar uma nova conta de despesa', - 'make_new_revenue_account' => 'Criar uma nova conta de receita', - 'make_new_liabilities_account' => 'Criar um novo passivo', - 'asset_accounts' => 'Contas de ativo', - 'undefined_accounts' => 'Contas', - 'asset_accounts_inactive' => 'Contas de ativos (inativas)', - 'expense_account' => 'Conta de despesas', - 'expense_accounts' => 'Contas de despesas', - 'expense_accounts_inactive' => 'Contas de despesas (inativas)', - 'revenue_account' => 'Conta de Receitas', - 'revenue_accounts' => 'Contas de receitas', - 'revenue_accounts_inactive' => 'Contas de receita (inativas)', - 'cash_accounts' => 'Contas Correntes', - 'Cash account' => 'Conta Corrente', - 'liabilities_accounts' => 'Passivos', - 'liabilities_accounts_inactive' => 'Passivos (inativos)', - 'reconcile_account' => 'Reconciliar conta ":account"', - 'overview_of_reconcile_modal' => 'Visão geral da reconciliação', - 'delete_reconciliation' => 'Eliminar reconciliação', - 'update_reconciliation' => 'Atualizar a reconciliação', - 'amount_cannot_be_zero' => 'O valor não pode ser zero', - 'end_of_reconcile_period' => 'Período de fim de reconciliação: :period', - 'start_of_reconcile_period' => 'Início do período de reconciliação: :period', - 'start_balance' => 'Saldo Inicial', - 'end_balance' => 'Saldo Final', - 'update_balance_dates_instruction' => 'Corresponda os valores e datas acima do seu extracto bancário e pressione "Começar reconciliar"', - 'select_transactions_instruction' => 'Selecione as transações que aparecem no extrato bancário.', - 'select_range_and_balance' => 'Primeiro, verifique o intervalo de datas e os saldos. Em seguida, pressione "Iniciar reconciliação"', - 'date_change_instruction' => 'Se você alterar o intervalo de datas agora, qualquer progresso será perdido.', - 'update_selection' => 'Atualizar seleção', - 'store_reconcile' => 'Armazenar reconciliação', - 'reconciliation_transaction' => 'Transação de reconciliação', - 'Reconciliation' => 'Reconciliação', - 'reconciliation' => 'Reconciliação', - 'reconcile_options' => 'Opções de reconciliação', - 'reconcile_range' => 'Intervalo de reconciliação', - 'start_reconcile' => 'Comece a reconciliar', - 'cash_account_type' => 'Dinheiro', - 'cash' => 'dinheiro', - 'cant_find_redirect_account' => 'Firefly III tentou te redirecionar mas não conseguiu. Desculpe por isso. De volta ao índice.', - 'account_type' => 'Tipo de conta', - 'save_transactions_by_moving' => 'Salve esta transação movendo-a para outra conta:|Salve essas transações movendo-as para outra conta:', - 'save_transactions_by_moving_js' => 'Nenhuma transação.|Salve esta transação movendo-a para outra conta.|Salve essas transações movendo-as para outra conta.', - 'stored_new_account' => 'Nova conta ":name" armazenado!', - 'stored_new_account_js' => 'Nova conta "{name}" armazenada!', - 'updated_account' => 'Conta ":name" atualizada', - 'updated_account_js' => 'Conta atualizada "{title}".', - 'credit_card_options' => 'Opções de cartão de crédito', - 'no_transactions_account' => 'Não há transações (neste período) para a conta ativa ":name".', - 'no_transactions_period' => 'Não há transações (neste período).', - 'no_data_for_chart' => 'Não há informações suficientes (ainda) para gerar este gráfico.', - 'select_at_least_one_account' => 'Por favor, selecione pelo menos uma conta de ativo', - 'select_at_least_one_category' => 'Por favor selecione, pelo menos, uma categoria', - 'select_at_least_one_budget' => 'Por favor, selecione pelo menos um orçamento', - 'select_at_least_one_tag' => 'Por favor, selecione pelo menos uma tag', - 'select_at_least_one_expense' => 'Por favor, selecione pelo menos uma combinação de contas de despesas/receitas. Se você não tem nenhuma (a lista está vazia) este relatório não está disponível.', - 'account_default_currency' => 'Esta será a moeda padrão associada a esta conta.', - 'reconcile_has_more' => 'Seu registro do Firefly III tem mais dinheiro nele do que o seu banco afirma que você deveria ter. Existem várias opções. Escolha o que fazer. Em seguida, pressione "Confirmar reconciliação".', - 'reconcile_has_less' => 'Seu registro do Firefly III tem menos dinheiro nele do que o seu banco afirma que você deveria ter. Existem várias opções. Escolha o que fazer. Em seguida, pressione "Confirmar reconciliação".', - 'reconcile_is_equal' => 'Seu registro do Firefly III e seus registros bancários combinam. Não há nada a se fazer. Pressione "Confirmar reconciliação" para confirmar sua entrada.', - 'create_pos_reconcile_transaction' => 'Desmarque as transações selecionadas e, em seguida, crie uma correção adicionando :amount para esta conta ativa.', - 'create_neg_reconcile_transaction' => 'Desmarque as transações selecionadas e, em seguida, crie uma correção removendo :amount para esta conta ativa.', - 'reconcile_do_nothing' => 'Desmarcar as transações selecionadas, mas não corrigir.', - 'reconcile_go_back' => 'Você sempre pode editar ou excluir uma correção mais tarde.', - 'must_be_asset_account' => 'Você só pode conciliar contas de ativos', - 'reconciliation_stored' => 'Reconciliação armazenada', - 'reconciliation_error' => 'Devido a um erro, as transações foram marcadas como conciliadas, mas a correcção não foi armazenada: :error.', - 'reconciliation_transaction_title' => 'Reconciliação (:from a :to)', - 'sum_of_reconciliation' => 'Total reconciliado', - 'reconcile_this_account' => 'Concilie esta conta', - 'reconcile' => 'Reconciliar', - 'show' => 'Exibir', - 'confirm_reconciliation' => 'Confirmar reconciliação', - 'submitted_start_balance' => 'Saldo inicial enviado', - 'selected_transactions' => 'Transações selecionadas (:count)', - 'already_cleared_transactions' => 'Transações já removidas (:count)', - 'submitted_end_balance' => 'Saldo final enviado', - 'initial_balance_description' => 'Saldo inicial para ":account"', - 'liability_credit_description' => 'Passivo de crédito para ":account"', - 'interest_calc_' => 'desconhecido', - 'interest_calc_daily' => 'Por dia', - 'interest_calc_monthly' => 'Por mês', - 'interest_calc_yearly' => 'Por ano', - 'interest_calc_weekly' => 'Por semana', - 'interest_calc_half-year' => 'Por semestre', - 'interest_calc_quarterly' => 'Por trimestre', - 'initial_balance_account' => 'Saldo inicial da conta :account', - 'list_options' => 'Opções de lista', + 'i_am_owed_amount' => 'Eu tenho uma dívida a receber', + 'i_owe_amount' => 'Valor do passivo', + 'inactive_account_link' => 'Você tem :count conta inativa (arquivada), que você pode ver nesta página separada.|Você tem :count contas inativas (arquivadas), que você pode ver nesta página separada.', + 'all_accounts_inactive' => 'Estas são as suas contas inativas.', + 'active_account_link' => 'Este link volta para suas contas ativas.', + 'account_missing_transaction' => 'Conta #:id (":name") não pode ser visualizada diretamente, mas o Firefly está sem informação de redirecionamento.', + 'cc_monthly_payment_date_help' => 'Selecione qualquer ano e mês, eles serão ignorados. Apenas o dia do mês é relevante.', + 'details_for_asset' => 'Detalhes para a conta de ativo ":name"', + 'details_for_expense' => 'Detalhes para a conta de despesas ":name"', + 'details_for_revenue' => 'Detalhes para a conta de receitas ":name"', + 'details_for_cash' => 'Detalhes para a conta de dinheiro ":name"', + 'store_new_asset_account' => 'Armazenar nova conta de ativo', + 'store_new_expense_account' => 'Armazenar nova conta de despesa', + 'store_new_revenue_account' => 'Armazenar nova conta de receita', + 'edit_asset_account' => 'Editar conta de ativo ":name"', + 'edit_expense_account' => 'Editar conta de despesa ":name"', + 'edit_revenue_account' => 'Editar conta de receitas ":name"', + 'delete_asset_account' => 'Excluir conta de ativo ":name"', + 'delete_expense_account' => 'Excluir conta de despesas ":name"', + 'delete_revenue_account' => 'Excluir conta de receitas ":name"', + 'delete_liabilities_account' => 'Apagar passivo ":name"', + 'asset_deleted' => 'Conta de ativo ":name" excluída com sucesso', + 'account_deleted' => 'Conta ":name" deletada com sucesso', + 'expense_deleted' => 'Conta de despesa ":name" excluída com sucesso', + 'revenue_deleted' => 'Conta de receitas ":name" excluída com sucesso', + 'update_asset_account' => 'Atualizar de conta de ativo', + 'update_undefined_account' => 'Atualizar conta', + 'update_liabilities_account' => 'Atualizar passivo', + 'update_expense_account' => 'Atualizar conta de despesas', + 'update_revenue_account' => 'Atualizar conta de receita', + 'make_new_asset_account' => 'Criar uma nova conta de ativo', + 'make_new_expense_account' => 'Criar uma nova conta de despesa', + 'make_new_revenue_account' => 'Criar uma nova conta de receita', + 'make_new_liabilities_account' => 'Criar um novo passivo', + 'asset_accounts' => 'Contas de ativo', + 'undefined_accounts' => 'Contas', + 'asset_accounts_inactive' => 'Contas de ativos (inativas)', + 'expense_account' => 'Conta de despesas', + 'expense_accounts' => 'Contas de despesas', + 'expense_accounts_inactive' => 'Contas de despesas (inativas)', + 'revenue_account' => 'Conta de Receitas', + 'revenue_accounts' => 'Contas de receitas', + 'revenue_accounts_inactive' => 'Contas de receita (inativas)', + 'cash_accounts' => 'Contas Correntes', + 'Cash account' => 'Conta Corrente', + 'liabilities_accounts' => 'Passivos', + 'liabilities_accounts_inactive' => 'Passivos (inativos)', + 'reconcile_account' => 'Reconciliar conta ":account"', + 'overview_of_reconcile_modal' => 'Visão geral da reconciliação', + 'delete_reconciliation' => 'Eliminar reconciliação', + 'update_reconciliation' => 'Atualizar a reconciliação', + 'amount_cannot_be_zero' => 'O valor não pode ser zero', + 'end_of_reconcile_period' => 'Período de fim de reconciliação: :period', + 'start_of_reconcile_period' => 'Início do período de reconciliação: :period', + 'start_balance' => 'Saldo Inicial', + 'end_balance' => 'Saldo Final', + 'update_balance_dates_instruction' => 'Corresponda os valores e datas acima do seu extracto bancário e pressione "Começar reconciliar"', + 'select_transactions_instruction' => 'Selecione as transações que aparecem no extrato bancário.', + 'select_range_and_balance' => 'Primeiro, verifique o intervalo de datas e os saldos. Em seguida, pressione "Iniciar reconciliação"', + 'date_change_instruction' => 'Se você alterar o intervalo de datas agora, qualquer progresso será perdido.', + 'update_selection' => 'Atualizar seleção', + 'store_reconcile' => 'Armazenar reconciliação', + 'reconciliation_transaction' => 'Transação de reconciliação', + 'Reconciliation' => 'Reconciliação', + 'reconciliation' => 'Reconciliação', + 'reconcile_options' => 'Opções de reconciliação', + 'reconcile_range' => 'Intervalo de reconciliação', + 'start_reconcile' => 'Comece a reconciliar', + 'cash_account_type' => 'Dinheiro', + 'cash' => 'dinheiro', + 'cant_find_redirect_account' => 'Firefly III tentou te redirecionar mas não conseguiu. Desculpe por isso. De volta ao índice.', + 'account_type' => 'Tipo de conta', + 'save_transactions_by_moving' => 'Salve esta transação movendo-a para outra conta:|Salve essas transações movendo-as para outra conta:', + 'save_transactions_by_moving_js' => 'Nenhuma transação.|Salve esta transação movendo-a para outra conta.|Salve essas transações movendo-as para outra conta.', + 'stored_new_account' => 'Nova conta ":name" armazenado!', + 'stored_new_account_js' => 'Nova conta "{name}" armazenada!', + 'updated_account' => 'Conta ":name" atualizada', + 'updated_account_js' => 'Conta atualizada "{title}".', + 'credit_card_options' => 'Opções de cartão de crédito', + 'no_transactions_account' => 'Não há transações (neste período) para a conta ativa ":name".', + 'no_transactions_period' => 'Não há transações (neste período).', + 'no_data_for_chart' => 'Não há informações suficientes (ainda) para gerar este gráfico.', + 'select_at_least_one_account' => 'Por favor, selecione pelo menos uma conta de ativo', + 'select_at_least_one_category' => 'Por favor selecione, pelo menos, uma categoria', + 'select_at_least_one_budget' => 'Por favor, selecione pelo menos um orçamento', + 'select_at_least_one_tag' => 'Por favor, selecione pelo menos uma tag', + 'select_at_least_one_expense' => 'Por favor, selecione pelo menos uma combinação de contas de despesas/receitas. Se você não tem nenhuma (a lista está vazia) este relatório não está disponível.', + 'account_default_currency' => 'Esta será a moeda padrão associada a esta conta.', + 'reconcile_has_more' => 'Seu registro do Firefly III tem mais dinheiro nele do que o seu banco afirma que você deveria ter. Existem várias opções. Escolha o que fazer. Em seguida, pressione "Confirmar reconciliação".', + 'reconcile_has_less' => 'Seu registro do Firefly III tem menos dinheiro nele do que o seu banco afirma que você deveria ter. Existem várias opções. Escolha o que fazer. Em seguida, pressione "Confirmar reconciliação".', + 'reconcile_is_equal' => 'Seu registro do Firefly III e seus registros bancários combinam. Não há nada a se fazer. Pressione "Confirmar reconciliação" para confirmar sua entrada.', + 'create_pos_reconcile_transaction' => 'Desmarque as transações selecionadas e, em seguida, crie uma correção adicionando :amount para esta conta ativa.', + 'create_neg_reconcile_transaction' => 'Desmarque as transações selecionadas e, em seguida, crie uma correção removendo :amount para esta conta ativa.', + 'reconcile_do_nothing' => 'Desmarcar as transações selecionadas, mas não corrigir.', + 'reconcile_go_back' => 'Você sempre pode editar ou excluir uma correção mais tarde.', + 'must_be_asset_account' => 'Você só pode conciliar contas de ativos', + 'reconciliation_stored' => 'Reconciliação armazenada', + 'reconciliation_error' => 'Devido a um erro, as transações foram marcadas como conciliadas, mas a correcção não foi armazenada: :error.', + 'reconciliation_transaction_title' => 'Reconciliação (:from a :to)', + 'sum_of_reconciliation' => 'Total reconciliado', + 'reconcile_this_account' => 'Concilie esta conta', + 'reconcile' => 'Reconciliar', + 'show' => 'Exibir', + 'confirm_reconciliation' => 'Confirmar reconciliação', + 'submitted_start_balance' => 'Saldo inicial enviado', + 'selected_transactions' => 'Transações selecionadas (:count)', + 'already_cleared_transactions' => 'Transações já removidas (:count)', + 'submitted_end_balance' => 'Saldo final enviado', + 'initial_balance_description' => 'Saldo inicial para ":account"', + 'liability_credit_description' => 'Passivo de crédito para ":account"', + 'interest_calc_' => 'desconhecido', + 'interest_calc_daily' => 'Por dia', + 'interest_calc_monthly' => 'Por mês', + 'interest_calc_yearly' => 'Por ano', + 'interest_calc_weekly' => 'Por semana', + 'interest_calc_half-year' => 'Por semestre', + 'interest_calc_quarterly' => 'Por trimestre', + 'initial_balance_account' => 'Saldo inicial da conta :account', + 'list_options' => 'Opções de lista', // categories: - 'new_category' => 'Nova categoria', - 'create_new_category' => 'Criar uma nova categoria', - 'without_category' => 'Sem uma categoria', - 'update_category' => 'Atualizar Categoria', - 'updated_category' => 'Atualizado categoria ":name"', - 'categories' => 'Categorias', - 'edit_category' => 'Editar categoria ":name"', - 'no_category' => '(sem categoria)', - 'unknown_category_plain' => 'Sem categoria', - 'category' => 'Categoria', - 'delete_category' => 'Excluir categoria ":name"', - 'deleted_category' => 'Categoria ":name" excluída', - 'store_category' => 'Armazenar nova categoria', - 'stored_category' => 'Armazenada nova categoria ":name"', - 'without_category_between' => 'Sem categoria entre :start e :end', + 'new_category' => 'Nova categoria', + 'create_new_category' => 'Criar uma nova categoria', + 'without_category' => 'Sem uma categoria', + 'update_category' => 'Atualizar Categoria', + 'updated_category' => 'Atualizado categoria ":name"', + 'categories' => 'Categorias', + 'edit_category' => 'Editar categoria ":name"', + 'no_category' => '(sem categoria)', + 'unknown_category_plain' => 'Sem categoria', + 'category' => 'Categoria', + 'delete_category' => 'Excluir categoria ":name"', + 'deleted_category' => 'Categoria ":name" excluída', + 'store_category' => 'Armazenar nova categoria', + 'stored_category' => 'Armazenada nova categoria ":name"', + 'without_category_between' => 'Sem categoria entre :start e :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Atualizar retirada', - 'update_deposit' => 'Atualizar de depósito', - 'update_transaction' => 'Atualizar transação', - 'update_transfer' => 'Atualizar transferência', - 'updated_withdrawal' => 'Retirada Atualizada ":description"', - 'updated_deposit' => 'Depósito atualizado ":description"', - 'updated_transfer' => 'Transferência atualizada ":description"', - 'no_changes_withdrawal' => 'A retirada ":description" não foi alterada.', - 'no_changes_deposit' => 'O depósito ":description" não foi alterado.', - 'no_changes_transfer' => 'A transferência ":description" não foi alterada.', - 'delete_withdrawal' => 'Excluir a retirada ":description"', - 'delete_deposit' => 'Apagar depósito ":description"', - 'delete_transfer' => 'Apagar transferência ":description"', - 'deleted_withdrawal' => 'Retirada ":description" excluída com sucesso', - 'deleted_deposit' => 'Depósito ":description" excluído com sucesso', - 'deleted_transfer' => 'Transferência ":description" excluída com sucesso', - 'deleted_reconciliation' => 'Transação de reconciliação ":description" excluída com sucesso', - 'stored_journal' => 'Transação ":description" incluída com sucesso', - 'stored_journal_no_descr' => 'Transação criada com sucesso', - 'updated_journal_no_descr' => 'Transação atualizada com sucesso', - 'select_transactions' => 'Selecione as transações', - 'rule_group_select_transactions' => 'Aplicar ":title" às transações', - 'rule_select_transactions' => 'Aplicar ":title" às transações', - 'stop_selection' => 'Parar de selecionar transações', - 'reconcile_selected' => 'Reconciliar', - 'mass_delete_journals' => 'Excluir um número de transacções', - 'mass_edit_journals' => 'Editar um número de transacções', - 'mass_bulk_journals' => 'Editar um grande número de transações', - 'mass_bulk_journals_explain' => 'Este formulário permite alterar as propriedades das transações listadas abaixo em uma atualização abrangente. Todas as transações na tabela serão atualizadas quando você alterar os parâmetros que você vê aqui.', - 'part_of_split' => 'Esta transação faz parte de uma transação dividida. Se você não selecionou todas as divisões, poderá acabar mudando apenas metade da transação.', - 'bulk_set_new_values' => 'Use as entradas abaixo para definir novos valores. Se você deixá-los vazios, eles serão feitos vazios para todos. Além disso, note que apenas as saídas receberão um orçamento.', - 'no_bulk_category' => 'Não atualize a categoria', - 'no_bulk_budget' => 'Não atualize o orçamento', - 'no_bulk_tags' => 'Não atualize a(s) tag(s)', - 'replace_with_these_tags' => 'Substituir com estas tags', - 'append_these_tags' => 'Adicionar estas tags', - 'mass_edit' => 'Editar selecionados individualmente', - 'bulk_edit' => 'Editar selecionados em massa', - 'mass_delete' => 'Excluir selecionados', - 'cannot_edit_other_fields' => 'Você não pode editar em massa outros campos que não esses aqui, porque não há espaço para mostrá-los. Por favor siga o link e editá-los por um por um, se você precisar editar esses campos.', - 'cannot_change_amount_reconciled' => 'Você não pode alterar o valor das transações reconciliadas.', - 'no_budget' => '(sem orçamento)', - 'no_bill' => '(sem fatura)', - 'account_per_budget' => 'Conta por orçamento', - 'account_per_category' => 'Conta por categoria', - 'create_new_object' => 'Criar', - 'empty' => '(vazio)', - 'all_other_budgets' => '(todos os outros orçamentos)', - 'all_other_accounts' => '(todas as outras contas)', - 'expense_per_source_account' => 'Despesas por conta origem', - 'expense_per_destination_account' => 'Despesas por conta destino', - 'income_per_destination_account' => 'Receita por conta destino', - 'spent_in_specific_category' => 'Gasto na categoria ":category"', - 'earned_in_specific_category' => 'Ganhos na categoria ":category"', - 'spent_in_specific_tag' => 'Gasto na tag ":tag"', - 'earned_in_specific_tag' => 'Ganho na tag ":tag"', - 'income_per_source_account' => 'Receita por conta origem', - 'average_spending_per_destination' => 'Média de despesas por conta destino', - 'average_spending_per_source' => 'Gasto médio por conta origem', - 'average_earning_per_source' => 'Média de ganhos por conta origem', - 'average_earning_per_destination' => 'Ganhos médios por conta destino', - 'account_per_tag' => 'Conta por tag', - 'tag_report_expenses_listed_once' => 'Despesas e receitas nunca são listadas duas vezes. Se uma transação tiver múltiplas etiquetas, pode apenas aparecer em uma de suas etiquetas. Esta lista pode parecer estar faltando dados, mas os valores estão corretos.', - 'double_report_expenses_charted_once' => 'Despesas e receitas nunca são exibidos duas vezes. Se uma transação tiver múltiplas etiquetas, pode apenas aparecer em uma de suas etiquetas. Este gráfico pode parecer que está faltando dados, mas os valores estão corretos.', - 'tag_report_chart_single_tag' => 'Este gráfico se aplica a uma única etiqueta. Se uma transação tem múltiplas etiquetas, o que você vê aqui pode aparecer nos gráficos de outras etiquetas também.', - 'tag' => 'Etiqueta', - 'no_budget_squared' => '(sem orçamento)', - 'perm-delete-many' => 'Excluir muitos itens de uma só vez pode ser muito perturbador. Por favor, seja cauteloso. Você pode excluir parte de uma transação dividida desta página, então tome cuidado.', - 'mass_deleted_transactions_success' => 'Excluído :count transação.|Excluído :count transações.', - 'mass_edited_transactions_success' => 'Atualizado :count transação.|Atualizado :count transações.', - 'opt_group_' => '(nenhum tipo de conta)', - 'opt_group_no_account_type' => '(sem o tipo de conta)', - 'opt_group_defaultAsset' => 'Contas padrão', - 'opt_group_savingAsset' => 'Contas de poupança', - 'opt_group_sharedAsset' => 'Contas de ativos compartilhadas', - 'opt_group_ccAsset' => 'Cartões de crédito', - 'opt_group_cashWalletAsset' => 'Carteiras de dinheiro', - 'opt_group_expense_account' => 'Contas de despesas', - 'opt_group_revenue_account' => 'Contas de receitas', - 'opt_group_l_Loan' => 'Passivo: empréstimo', - 'opt_group_cash_account' => 'Conta em dinheiro', - 'opt_group_l_Debt' => 'Passivo: dívida', - 'opt_group_l_Mortgage' => 'Passivo: hipoteca', - 'opt_group_l_Credit card' => 'Passivo: cartão de crédito', - 'notes' => 'Notas', - 'unknown_journal_error' => 'A transação não pôde ser armazenada. Por favor, verifique os arquivos de log.', - 'attachment_not_found' => 'O anexo não foi encontrado.', - 'journal_link_bill' => 'Esta transação está ligada à fatura :name. Para remover a conexão, desmarque a caixa de seleção. Use as regras para conectá-la a outra fatura.', - 'transaction_stored_link' => 'Transação #{ID} ("{title}") foi salva.', - 'transaction_new_stored_link' => 'Transação #{ID} foi salva.', - 'transaction_updated_link' => 'A Transação #{ID} ("{title}") foi atualizada.', - 'transaction_updated_no_changes' => 'A Transação #{ID} ("{title}") não recebeu nenhuma alteração.', - 'first_split_decides' => 'A primeira divisão determina o valor deste campo', - 'first_split_overrules_source' => 'A primeira divisão pode anular a conta de origem', - 'first_split_overrules_destination' => 'A primeira divisão pode anular a conta de destino', - 'spent_x_of_y' => 'Gasto {amount} de {total}', + 'wait_loading_transaction' => 'Por favor, aguarde o formulário carregar', + 'wait_loading_data' => 'Por favor, aguarde suas informações serem carregadas...', + 'wait_attachments' => 'Por favor, aguarde pelo upload dos anexos.', + 'errors_upload' => 'O upload falhou. Por favor, verifique o console do seu navegador para o erro.', + 'amount_foreign_if' => 'Valor em moeda estrangeira, se houver', + 'amount_destination_account' => 'Valor na moeda da conta destino', + 'edit_transaction_title' => 'Editar transação ":description"', + 'unreconcile' => 'Desfazer reconciliação', + 'update_withdrawal' => 'Atualizar saída', + 'update_deposit' => 'Atualizar entrada', + 'update_transaction' => 'Atualizar transação', + 'update_transfer' => 'Atualizar transferência', + 'updated_withdrawal' => 'Saída atualizada ":description"', + 'updated_deposit' => 'Entrada atualizada ":description"', + 'updated_transfer' => 'Transferência atualizada ":description"', + 'no_changes_withdrawal' => 'A retirada ":description" não foi alterada.', + 'no_changes_deposit' => 'O depósito ":description" não foi alterado.', + 'no_changes_transfer' => 'A transferência ":description" não foi alterada.', + 'delete_withdrawal' => 'Excluir a saída ":description"', + 'delete_deposit' => 'Apagar entrada ":description"', + 'delete_transfer' => 'Apagar transferência ":description"', + 'deleted_withdrawal' => 'Saída":description" excluída com sucesso', + 'deleted_deposit' => 'Entrada":description" excluída com sucesso', + 'deleted_transfer' => 'Transferência ":description" excluída com sucesso', + 'deleted_reconciliation' => 'Transação de reconciliação ":description" excluída com sucesso', + 'stored_journal' => 'Transação ":description" incluída com sucesso', + 'stored_journal_js' => 'Transação "%{description}" criada com sucesso', + 'stored_journal_no_descr' => 'Transação criada com sucesso', + 'updated_journal_no_descr' => 'Transação atualizada com sucesso', + 'select_transactions' => 'Selecione as transações', + 'rule_group_select_transactions' => 'Aplicar ":title" às transações', + 'rule_select_transactions' => 'Aplicar ":title" às transações', + 'stop_selection' => 'Parar de selecionar transações', + 'reconcile_selected' => 'Reconciliar', + 'mass_delete_journals' => 'Excluir transações em massa', + 'mass_edit_journals' => 'Editar transações em massa', + 'mass_bulk_journals' => 'Editar transações em massa', + 'mass_bulk_journals_explain' => 'Este formulário permite alterar as propriedades das transações listadas abaixo em uma atualização abrangente. Todas as transações na tabela serão atualizadas quando você alterar os parâmetros que você vê aqui.', + 'part_of_split' => 'Esta transação faz parte de uma transação dividida. Se você não selecionou todas as divisões, poderá acabar mudando apenas metade da transação.', + 'bulk_set_new_values' => 'Use as entradas abaixo para definir novos valores. Se você deixá-los vazios, eles serão feitos vazios para todos. Além disso, note que apenas as saídas receberão um orçamento.', + 'no_bulk_category' => 'Não atualize a categoria', + 'no_bulk_budget' => 'Não atualize o orçamento', + 'no_bulk_tags' => 'Não atualize a(s) tag(s)', + 'replace_with_these_tags' => 'Substituir com estas tags', + 'append_these_tags' => 'Adicionar estas tags', + 'mass_edit' => 'Editar selecionados individualmente', + 'bulk_edit' => 'Editar selecionados em massa', + 'mass_delete' => 'Excluir selecionados', + 'cannot_edit_other_fields' => 'Você não pode editar em massa outros campos além desses aqui, porque não há espaço para mostrá-los. Por favor, siga o link para editá-los um por um, se você precisar editar esses campos.', + 'cannot_change_amount_reconciled' => 'Você não pode alterar o valor das transações reconciliadas.', + 'no_budget' => '(sem orçamento)', + 'no_bill' => '(sem fatura)', + 'account_per_budget' => 'Conta por orçamento', + 'account_per_category' => 'Conta por categoria', + 'create_new_object' => 'Criar', + 'empty' => '(vazio)', + 'all_other_budgets' => '(todos os outros orçamentos)', + 'all_other_accounts' => '(todas as outras contas)', + 'expense_per_source_account' => 'Despesas por conta origem', + 'expense_per_destination_account' => 'Despesas por conta destino', + 'income_per_destination_account' => 'Receita por conta destino', + 'spent_in_specific_category' => 'Gasto na categoria ":category"', + 'earned_in_specific_category' => 'Ganhos na categoria ":category"', + 'spent_in_specific_tag' => 'Gasto na tag ":tag"', + 'earned_in_specific_tag' => 'Ganho na tag ":tag"', + 'income_per_source_account' => 'Receita por conta origem', + 'average_spending_per_destination' => 'Média de despesas por conta destino', + 'average_spending_per_source' => 'Gasto médio por conta origem', + 'average_earning_per_source' => 'Média de ganhos por conta origem', + 'average_earning_per_destination' => 'Ganhos médios por conta destino', + 'account_per_tag' => 'Conta por tag', + 'tag_report_expenses_listed_once' => 'Despesas e receitas nunca são listadas duas vezes. Se uma transação tiver múltiplas tags, pode apenas aparecer em uma de suas tags. Esta lista pode parecer estar faltando dados, mas os valores estão corretos.', + 'double_report_expenses_charted_once' => 'Despesas e receitas nunca são exibidos duas vezes. Se uma transação tiver múltiplas tags, pode apenas aparecer em uma de suas tags. Este gráfico pode parecer que está faltando dados, mas os valores estão corretos.', + 'tag_report_chart_single_tag' => 'Este gráfico se aplica a uma única tag. Se uma transação tem múltiplas tags, o que você vê aqui pode aparecer nos gráficos de outras tags também.', + 'tag' => 'Tag', + 'no_budget_squared' => '(sem orçamento)', + 'perm-delete-many' => 'Excluir muitos itens de uma só vez pode ser muito perturbador. Por favor, seja cauteloso. Você pode excluir parte de uma transação dividida desta página, então tome cuidado.', + 'mass_deleted_transactions_success' => ':count transação excluída.|:count transações excluídas.', + 'mass_edited_transactions_success' => 'Atualizado :count transação.|Atualizado :count transações.', + 'opt_group_' => '(nenhum tipo de conta)', + 'opt_group_no_account_type' => '(sem o tipo de conta)', + 'opt_group_defaultAsset' => 'Contas padrão', + 'opt_group_savingAsset' => 'Contas de poupança', + 'opt_group_sharedAsset' => 'Contas de ativos compartilhadas', + 'opt_group_ccAsset' => 'Cartões de crédito', + 'opt_group_cashWalletAsset' => 'Carteiras de dinheiro', + 'opt_group_expense_account' => 'Contas de despesas', + 'opt_group_revenue_account' => 'Contas de receitas', + 'opt_group_l_Loan' => 'Passivo: empréstimo', + 'opt_group_cash_account' => 'Conta em dinheiro', + 'opt_group_l_Debt' => 'Passivo: dívida', + 'opt_group_l_Mortgage' => 'Passivo: hipoteca', + 'opt_group_l_Credit card' => 'Passivo: cartão de crédito', + 'notes' => 'Notas', + 'unknown_journal_error' => 'A transação não pôde ser armazenada. Por favor, verifique os arquivos de log.', + 'attachment_not_found' => 'O anexo não foi encontrado.', + 'journal_link_bill' => 'Esta transação está vinculada à fatura :name. Para remover a conexão, desmarque a caixa de seleção. Use as regras para conectá-la a outra fatura.', + 'transaction_stored_link' => 'Transação #{ID} ("{title}") foi salva.', + 'transaction_new_stored_link' => 'Transação #{ID} foi salva.', + 'transaction_updated_link' => 'A Transação #{ID} ("{title}") foi atualizada.', + 'transaction_updated_no_changes' => 'A Transação #{ID} ("{title}") não recebeu nenhuma alteração.', + 'first_split_decides' => 'A primeira divisão determina o valor deste campo', + 'first_split_overrules_source' => 'A primeira divisão pode anular a conta de origem', + 'first_split_overrules_destination' => 'A primeira divisão pode anular a conta de destino', + 'spent_x_of_y' => 'Gasto {amount} de {total}', // new user: - 'welcome' => 'Bem Vindo ao Firefly III!', - 'submit' => 'Enviar', - 'submission' => 'Envio', - 'submit_yes_really' => 'Enviar (eu sei o que estou fazendo)', - 'getting_started' => 'Iniciar', - 'to_get_started' => 'É bom ver que você instalou o Firefly III com sucesso. Para começar com esta ferramenta, insira o nome do banco e o saldo da sua principal conta corrente. Não se preocupe ainda se você tiver várias contas. Você pode adicionar aqueles mais tarde. É só que o Firefly III precisa de algo para começar.', - 'savings_balance_text' => 'O Firefly III criará automaticamente uma conta de poupança para você. Por padrão, não haverá dinheiro na sua conta de poupança, mas se você contar o saldo ao Firefly III, ele será armazenado como tal.', - 'finish_up_new_user' => 'É isso aí! Você pode continuar pressionando Enviar. Você será levado ao índice de Firefly III.', - 'stored_new_accounts_new_user' => 'Yay! Suas novas contas foram armazenadas.', - 'set_preferred_language' => 'Se você prefere utilizar o Firefly III em outro idioma, informe aqui.', - 'language' => 'Idioma', - 'new_savings_account' => 'Conta de poupança :bank_name', - 'cash_wallet' => 'Carteira de dinheiro', - 'currency_not_present' => 'Não se preocupe se a moeda que você usa normalmente não está listada. Você pode criar suas próprias moedas em "Opções > Moedas".', + 'welcome' => 'Bem Vindo ao Firefly III!', + 'submit' => 'Enviar', + 'submission' => 'Envio', + 'submit_yes_really' => 'Enviar (eu sei o que estou fazendo)', + 'getting_started' => 'Iniciar', + 'to_get_started' => 'É bom ver que você instalou o Firefly III com sucesso. Para começar com esta ferramenta, insira o nome do banco e o saldo da sua principal conta corrente. Não se preocupe ainda se você tiver várias contas. Você pode adicionar aqueles mais tarde. É só que o Firefly III precisa de algo para começar.', + 'savings_balance_text' => 'O Firefly III criará automaticamente uma conta de poupança para você. Por padrão, não haverá dinheiro na sua conta de poupança, mas se você contar o saldo ao Firefly III, ele será armazenado como tal.', + 'finish_up_new_user' => 'É isso aí! Você pode continuar pressionando Enviar. Você será levado ao índice de Firefly III.', + 'stored_new_accounts_new_user' => 'Yay! Suas novas contas foram armazenadas.', + 'set_preferred_language' => 'Se você prefere utilizar o Firefly III em outro idioma, informe aqui.', + 'language' => 'Idioma', + 'new_savings_account' => 'Conta de poupança :bank_name', + 'cash_wallet' => 'Carteira de dinheiro', + 'currency_not_present' => 'Não se preocupe se a moeda que você usa normalmente não está listada. Você pode criar suas próprias moedas em "Opções > Moedas".', // home page: - 'transaction_table_description' => 'Uma tabela contendo suas transações', - 'opposing_account' => 'Conta oposta', - 'yourAccounts' => 'Suas contas', - 'your_accounts' => 'Visão geral da sua conta', - 'category_overview' => 'Visão geral da categoria', - 'expense_overview' => 'Visão geral da conta de despesa', - 'revenue_overview' => 'Visão geral da conta de receita', - 'budgetsAndSpending' => 'Orçamentos e despesas', - 'budgets_and_spending' => 'Orçamentos e despesas', - 'go_to_budget' => 'Ir para o orçamento "{budget}"', - 'go_to_deposits' => 'Ir para as entradas', - 'go_to_expenses' => 'Ir para despesas', - 'savings' => 'Poupanças', - 'newWithdrawal' => 'Nova despesa', - 'newDeposit' => 'Novo depósito', - 'newTransfer' => 'Nova transferência', - 'bills_to_pay' => 'Faturas a pagar', - 'per_day' => 'Por dia', - 'left_to_spend_per_day' => 'Restante para gastar por dia', - 'bills_paid' => 'Faturas pagas', - 'custom_period' => 'Período personalizado', - 'reset_to_current' => 'Redefinir para o período atual', - 'select_period' => 'Selecione um período', + 'transaction_table_description' => 'Uma tabela contendo suas transações', + 'opposing_account' => 'Conta oposta', + 'yourAccounts' => 'Suas contas', + 'your_accounts' => 'Visão geral da sua conta', + 'category_overview' => 'Visão geral da categoria', + 'expense_overview' => 'Visão geral da conta de despesa', + 'revenue_overview' => 'Visão geral da conta de receita', + 'budgetsAndSpending' => 'Orçamentos e despesas', + 'budgets_and_spending' => 'Orçamentos e despesas', + 'go_to_budget' => 'Ir para o orçamento "{budget}"', + 'go_to_deposits' => 'Ir para as entradas', + 'go_to_expenses' => 'Ir para despesas', + 'savings' => 'Poupanças', + 'newWithdrawal' => 'Nova despesa', + 'newDeposit' => 'Nova entrada', + 'newTransfer' => 'Nova transferência', + 'bills_to_pay' => 'Faturas a pagar', + 'per_day' => 'Por dia', + 'left_to_spend_per_day' => 'Restante para gastar por dia', + 'bills_paid' => 'Faturas pagas', + 'custom_period' => 'Período personalizado', + 'reset_to_current' => 'Redefinir para o período atual', + 'select_period' => 'Selecione um período', // menu and titles, should be recycled as often as possible: - 'currency' => 'Moeda', - 'preferences' => 'Preferências', - 'logout' => 'Desconectar', - 'logout_other_sessions' => 'Sair de todas as outras sessões', - 'toggleNavigation' => 'Alternar navegação', - 'searchPlaceholder' => 'Pesquisar...', - 'version' => 'Versão', - 'dashboard' => 'Painel de Controle', - 'income_and_expense' => 'Receitas e despesas', - 'all_money' => 'Todo o seu dinheiro', - 'unknown_source_plain' => 'Conta de origem desconhecida', - 'unknown_dest_plain' => 'Conta de destino desconhecida', - 'unknown_any_plain' => 'Conta desconhecida', - 'unknown_budget_plain' => 'Nenhum orçamento', - 'available_budget' => 'Orçamento disponível ({currency})', - 'currencies' => 'Moedas', - 'activity' => 'Atividade', - 'usage' => 'Utilização', - 'accounts' => 'Contas', - 'Asset account' => 'Conta de ativo', - 'Default account' => 'Conta de ativo', - 'Expense account' => 'Conta de Despesa', - 'Revenue account' => 'Conta de Receita', - 'Initial balance account' => 'Saldo inicial da conta', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Dívida', - 'account_type_Loan' => 'Empréstimo', - 'account_type_Mortgage' => 'Hipoteca', - 'account_type_debt' => 'Débito', - 'account_type_loan' => 'Empréstimo', - 'account_type_mortgage' => 'Hipoteca', - 'account_type_Credit card' => 'Cartão de crédito', - 'credit_card_type_monthlyFull' => 'Pagamento completo todo mês', - 'liability_direction_credit' => 'Eu tenho uma dívida a receber', - 'liability_direction_debit' => 'Devo este débito a outra pessoa', - 'liability_direction_credit_short' => 'Devo receber essa dívida', - 'liability_direction_debit_short' => 'Devo essa dívida', - 'liability_direction__short' => 'Desconhecida', - 'liability_direction_null_short' => 'Desconhecida', - 'Liability credit' => 'Crédito de passivo', - 'budgets' => 'Orçamentos', - 'tags' => 'Tags', - 'reports' => 'Relatórios', - 'transactions' => 'Transações', - 'expenses' => 'Despesas', - 'income' => 'Receita / Renda', - 'transfers' => 'Transferências', - 'moneyManagement' => 'Gerenciamento de Dinheiro', - 'money_management' => 'Gestão Monetária', - 'tools' => 'Ferramentas', - 'piggyBanks' => 'Cofrinhos', - 'piggy_banks' => 'Cofrinhos', - 'amount_x_of_y' => '{current} de {total}', - 'bills' => 'Faturas', - 'withdrawal' => 'Retirada', - 'opening_balance' => 'Saldo inicial', - 'deposit' => 'Depósito', - 'account' => 'Conta', - 'transfer' => 'Transferência', - 'Withdrawal' => 'Retirada', - 'Deposit' => 'Depósito', - 'Transfer' => 'Transferência', - 'bill' => 'Fatura', - 'yes' => 'Sim', - 'no' => 'Não', - 'amount' => 'Valor', - 'overview' => 'Visão Geral', - 'saveOnAccount' => 'Salvar na conta', - 'unknown' => 'Desconhecido', - 'monthly' => 'Mensal', - 'profile' => 'Perfil', - 'errors' => 'Erros', - 'debt_start_date' => 'Data de início da dívida', - 'debt_start_amount' => 'Montante inicial da dívida', - 'debt_start_amount_help' => 'É sempre melhor definir este valor para um valor negativo. Leia as páginas de ajuda (ícone no topo direito (?)) para mais informações.', - 'interest_period_help' => 'Esse campo é puramente cosmético e não será calculado para você. Como os bancos são muito sorrateiros, o Firefly lll nunca acertou esse cálculo.', - 'store_new_liabilities_account' => 'Guardar novo passivo', - 'edit_liabilities_account' => 'Editar passivo ":name"', - 'financial_control' => 'Controle financeiro', - 'accounting' => 'Contabilidade', - 'automation' => 'Automação', - 'others' => 'Outros', - 'classification' => 'Classificação', - 'store_transaction' => 'Salvar transação', + 'currency' => 'Moeda', + 'preferences' => 'Preferências', + 'logout' => 'Desconectar', + 'logout_other_sessions' => 'Sair de todas as outras sessões', + 'toggleNavigation' => 'Alternar navegação', + 'searchPlaceholder' => 'Pesquisar...', + 'version' => 'Versão', + 'dashboard' => 'Painel de Controle', + 'income_and_expense' => 'Receitas e despesas', + 'all_money' => 'Todo o seu dinheiro', + 'unknown_source_plain' => 'Conta de origem desconhecida', + 'unknown_dest_plain' => 'Conta de destino desconhecida', + 'unknown_any_plain' => 'Conta desconhecida', + 'unknown_budget_plain' => 'Nenhum orçamento', + 'available_budget' => 'Orçamento disponível ({currency})', + 'currencies' => 'Moedas', + 'activity' => 'Atividade', + 'usage' => 'Utilização', + 'accounts' => 'Contas', + 'Asset account' => 'Conta de ativo', + 'Default account' => 'Conta de ativo', + 'Expense account' => 'Conta de Despesa', + 'Revenue account' => 'Conta de Receita', + 'Initial balance account' => 'Saldo inicial da conta', + 'account_type_Asset account' => 'Conta de ativos', + 'account_type_Expense account' => 'Conta de despesas', + 'account_type_Revenue account' => 'Conta de receitas', + 'account_type_Debt' => 'Dívida', + 'account_type_Loan' => 'Empréstimo', + 'account_type_Mortgage' => 'Hipoteca', + 'account_type_debt' => 'Débito', + 'account_type_loan' => 'Empréstimo', + 'account_type_mortgage' => 'Hipoteca', + 'account_type_Credit card' => 'Cartão de crédito', + 'credit_card_type_monthlyFull' => 'Pagamento completo todo mês', + 'liability_direction_credit' => 'Eu tenho uma dívida a receber', + 'liability_direction_debit' => 'Eu tenho uma dívida a pagar', + 'liability_direction_credit_short' => 'Devo receber essa dívida', + 'liability_direction_debit_short' => 'Devo essa dívida', + 'liability_direction__short' => 'Desconhecida', + 'liability_direction_null_short' => 'Desconhecida', + 'Liability credit' => 'Crédito de passivo', + 'budgets' => 'Orçamentos', + 'tags' => 'Tags', + 'reports' => 'Relatórios', + 'transactions' => 'Transações', + 'expenses' => 'Despesas', + 'income' => 'Receita / Renda', + 'transfers' => 'Transferências', + 'moneyManagement' => 'Gerenciamento de Dinheiro', + 'money_management' => 'Gestão Monetária', + 'tools' => 'Ferramentas', + 'piggyBanks' => 'Cofrinhos', + 'piggy_banks' => 'Cofrinhos', + 'amount_x_of_y' => '{current} de {total}', + 'bills' => 'Faturas', + 'withdrawal' => 'Retirada', + 'opening_balance' => 'Saldo inicial', + 'deposit' => 'Depósito', + 'account' => 'Conta', + 'transfer' => 'Transferência', + 'Withdrawal' => 'Retirada', + 'Deposit' => 'Depósito', + 'Transfer' => 'Transferência', + 'bill' => 'Fatura', + 'yes' => 'Sim', + 'no' => 'Não', + 'amount' => 'Valor', + 'overview' => 'Visão Geral', + 'saveOnAccount' => 'Salvar na conta', + 'unknown' => 'Desconhecido', + 'monthly' => 'Mensal', + 'profile' => 'Perfil', + 'errors' => 'Erros', + 'debt_start_date' => 'Data de início da dívida', + 'debt_start_amount' => 'Montante inicial da dívida', + 'debt_start_amount_help' => 'É sempre melhor definir este valor para um valor negativo. Leia as páginas de ajuda (ícone no topo direito (?)) para mais informações.', + 'interest_period_help' => 'Esse campo é puramente estético e não será calculado para você. Como os bancos são muito sorrateiros, o Firefly lll nunca acertou esse cálculo.', + 'store_new_liabilities_account' => 'Guardar novo passivo', + 'edit_liabilities_account' => 'Editar passivo ":name"', + 'financial_control' => 'Controle financeiro', + 'accounting' => 'Contabilidade', + 'automation' => 'Automação', + 'others' => 'Outros', + 'classification' => 'Classificação', + 'store_transaction' => 'Salvar transação', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Relatório financeiro padrão entre :start e :end', - 'report_audit' => 'Visão geral do histórico de transação entre :start e :end', - 'report_category' => 'Relatório de categoria entre :start e :end', - 'report_double' => 'Relatório de despesas/receitas entre :start e :end', - 'report_budget' => 'Relatório de orçamento entre :start e :end', - 'report_tag' => 'Relatório de tag entre :start e :end', - 'quick_link_reports' => 'Ligações rápidas', - 'quick_link_examples' => 'Estes são apenas alguns links de exemplo para você começar. Confira as páginas de ajuda com o botão (?) para obter informações sobre todos os relatórios e as palavras mágicas que você pode usar.', - 'quick_link_default_report' => 'Relatório financeiro padrão', - 'quick_link_audit_report' => 'Visão geral do histórico de transação', - 'report_this_month_quick' => 'Mês atual, todas as contas', - 'report_last_month_quick' => 'Mês passado, todas as contas', - 'report_this_year_quick' => 'Ano atual, todas as contas', - 'report_this_fiscal_year_quick' => 'Ano fiscal atual, todas as contas', - 'report_all_time_quick' => 'Todos os tempos, todas as contas', - 'reports_can_bookmark' => 'Lembre-se que relatórios podem ser marcados.', - 'incomeVsExpenses' => 'Renda vs. Despesas', - 'accountBalances' => 'Saldos de Contas', - 'balanceStart' => 'Saldo no início do período', - 'balanceEnd' => 'Saldo no final do período', - 'splitByAccount' => 'Dividir por conta', - 'coveredWithTags' => 'Coberto com tags', - 'leftInBudget' => 'Deixou no orçamento', - 'left_in_debt' => 'Valor devido', - 'sumOfSums' => 'Soma dos montantes', - 'noCategory' => '(sem categoria)', - 'notCharged' => 'Não cobrado (ainda)', - 'inactive' => 'Inativo', - 'active' => 'Ativo', - 'difference' => 'Diferença', - 'money_flowing_in' => 'Entrada', - 'money_flowing_out' => 'Saída', - 'topX' => 'topo :number', - 'show_full_list' => 'Mostrar a lista inteira', - 'show_only_top' => 'Mostrar apenas os topo :number', - 'report_type' => 'Tipo de relatório', - 'report_type_default' => 'Relatório financeiro padrão', - 'report_type_audit' => 'Visão geral do histórico de transação (auditoria)', - 'report_type_category' => 'Relatório por Categorias', - 'report_type_budget' => 'Relatório de orçamento', - 'report_type_tag' => 'Relatório de tag', - 'report_type_double' => 'Relatório de despesas/receitas', - 'more_info_help' => 'Mais informações sobre esses tipos de relatórios podem ser encontradas nas páginas de ajuda. Pressione o ícone (?) no canto superior direito.', - 'report_included_accounts' => 'Contas incluídas', - 'report_date_range' => 'Período', - 'report_preset_ranges' => 'Intervalos pré-definidos', - 'shared' => 'Compartilhado', - 'fiscal_year' => 'Ano fiscal', - 'income_entry' => 'Rendimento da conta ":name" entre :start e :end', - 'expense_entry' => 'Despesas da conta ":name" entre :start e :end', - 'category_entry' => 'Despesas e receitas na categoria ":name" entre :start e :end', - 'budget_spent_amount' => 'Despesas no orçamento ":name" entre :start e :end', - 'balance_amount' => 'Despesas no orçamento ":budget" pagas por conta":account" entre :start e :end', - 'no_audit_activity' => 'Nenhuma atividade foi registrada na conta :account_name entre :start e :end.', - 'audit_end_balance' => 'Saldo da conta :account_name no final de :end foi :balance', - 'reports_extra_options' => 'Opções adicionais', - 'report_has_no_extra_options' => 'Este relatório não tem mais opções', - 'reports_submit' => 'Visualizar relatório', - 'end_after_start_date' => 'Data de término do relatório deve ser depois da data de início.', - 'select_category' => 'Selecionar categoria(s)', - 'select_budget' => 'Selecionar orçamento(s).', - 'select_tag' => 'Selecionar tag(s).', - 'income_per_category' => 'Receitas por categoria', - 'expense_per_category' => 'Despesa por categoria', - 'expense_per_budget' => 'Despesa por orçamento', - 'income_per_account' => 'Rendimento por conta', - 'expense_per_account' => 'Por conta de despesas', - 'expense_per_tag' => 'Despesa por tag', - 'income_per_tag' => 'Rendimento por tag', - 'include_expense_not_in_budget' => 'Despesas não incluídas no(s) orçamento(s) selecionado(s)', - 'include_expense_not_in_account' => 'Despesas não incluídas na(s) contas(s) selecionada(s)', - 'include_expense_not_in_category' => 'Despesas não incluídas na(s) categoria(s) selecionada(s)', - 'include_income_not_in_category' => 'Rendimento não incluído na(s) categoria(s) selecionada(s)', - 'include_income_not_in_account' => 'Rendimento não incluído na(s) conta(s) selecionada(s)', - 'include_income_not_in_tags' => 'Rendimento não incluído na(s) tag(s) selecionada(s)', - 'include_expense_not_in_tags' => 'Despesas não incluídas na(s) tag(s) selecionada(s)', - 'everything_else' => 'Todo o resto', - 'income_and_expenses' => 'Receitas e despesas', - 'spent_average' => 'Gastos (média)', - 'income_average' => 'Renda (média)', - 'transaction_count' => 'Contagem de transações', - 'average_spending_per_account' => 'Média de gastos por conta', - 'average_income_per_account' => 'Rendimento médio por conta', - 'total' => 'Total', - 'description' => 'Descrição', - 'sum_of_period' => 'Soma de período', - 'average_in_period' => 'Média do período', - 'account_role_defaultAsset' => 'Conta padrão', - 'account_role_sharedAsset' => 'Contas de ativos compartilhadas', - 'account_role_savingAsset' => 'Conta poupança', - 'account_role_ccAsset' => 'Cartão de crédito', - 'account_role_cashWalletAsset' => 'Carteira de dinheiro', - 'budget_chart_click' => 'Clique no nome do orçamento na tabela acima para ver um gráfico.', - 'category_chart_click' => 'Clique no nome da categoria na tabela acima para ver um gráfico.', - 'in_out_accounts' => 'Ganhou e gastou por combinação', - 'in_out_accounts_per_asset' => 'Ganhos e gastos (por conta de ativo)', - 'in_out_per_category' => 'Ganhou e gastou por categoria', - 'out_per_budget' => 'Gasto por orçamento', - 'select_expense_revenue' => 'Selecione conta de despesa/receita', - 'multi_currency_report_sum' => 'Esta lista têm contas com várias moedas, portanto a(s) soma(s) que você vê talvez não faça(m) sentido. O relatório sempre usará sua moeda padrão.', - 'sum_in_default_currency' => 'A soma será sempre em sua moeda padrão.', - 'net_filtered_prefs' => 'Esse gráfico nunca irá incluir contas que têm a opção "incluir no patrimônio líquido" desmarcada.', + 'report_default' => 'Relatório financeiro padrão entre :start e :end', + 'report_audit' => 'Visão geral do histórico de transação entre :start e :end', + 'report_category' => 'Relatório de categoria entre :start e :end', + 'report_double' => 'Relatório de despesas/receitas entre :start e :end', + 'report_budget' => 'Relatório de orçamento entre :start e :end', + 'report_tag' => 'Relatório de tag entre :start e :end', + 'quick_link_reports' => 'Links rápidos', + 'quick_link_examples' => 'Estes são apenas alguns links de exemplo para você começar. Confira as páginas de ajuda com o botão (?) para obter informações sobre todos os relatórios e as palavras mágicas que você pode usar.', + 'quick_link_default_report' => 'Relatório financeiro padrão', + 'quick_link_audit_report' => 'Visão geral do histórico de transação', + 'report_this_month_quick' => 'Mês atual, todas as contas', + 'report_last_month_quick' => 'Mês passado, todas as contas', + 'report_this_year_quick' => 'Ano atual, todas as contas', + 'report_this_fiscal_year_quick' => 'Ano fiscal atual, todas as contas', + 'report_all_time_quick' => 'Todos os tempos, todas as contas', + 'reports_can_bookmark' => 'Lembre-se que relatórios podem ser favoritados.', + 'incomeVsExpenses' => 'Renda vs. Despesas', + 'accountBalances' => 'Saldos de Contas', + 'balanceStart' => 'Saldo no início do período', + 'balanceEnd' => 'Saldo no final do período', + 'splitByAccount' => 'Dividir por conta', + 'coveredWithTags' => 'Coberto com tags', + 'leftInBudget' => 'Deixou no orçamento', + 'left_in_debt' => 'Valor do passivo', + 'sumOfSums' => 'Soma dos montantes', + 'noCategory' => '(sem categoria)', + 'notCharged' => 'Não cobrado (ainda)', + 'inactive' => 'Inativo', + 'active' => 'Ativo', + 'difference' => 'Diferença', + 'money_flowing_in' => 'Entrada', + 'money_flowing_out' => 'Saída', + 'topX' => 'topo :number', + 'show_full_list' => 'Mostrar a lista inteira', + 'show_only_top' => 'Mostrar apenas os topo :number', + 'report_type' => 'Tipo de relatório', + 'report_type_default' => 'Relatório financeiro padrão', + 'report_type_audit' => 'Visão geral do histórico de transação (auditoria)', + 'report_type_category' => 'Relatório por Categorias', + 'report_type_budget' => 'Relatório de orçamento', + 'report_type_tag' => 'Relatório de tag', + 'report_type_double' => 'Relatório de despesas/receitas', + 'more_info_help' => 'Mais informações sobre esses tipos de relatórios podem ser encontradas nas páginas de ajuda. Pressione o ícone (?) no canto superior direito.', + 'report_included_accounts' => 'Contas incluídas', + 'report_date_range' => 'Período', + 'report_preset_ranges' => 'Intervalos pré-definidos', + 'shared' => 'Compartilhado', + 'fiscal_year' => 'Ano fiscal', + 'income_entry' => 'Rendimento da conta ":name" entre :start e :end', + 'expense_entry' => 'Despesas da conta ":name" entre :start e :end', + 'category_entry' => 'Despesas e receitas na categoria ":name" entre :start e :end', + 'budget_spent_amount' => 'Despesas no orçamento ":name" entre :start e :end', + 'balance_amount' => 'Despesas no orçamento ":budget" pagas por conta":account" entre :start e :end', + 'no_audit_activity' => 'Nenhuma atividade foi registrada na conta :account_name entre :start e :end.', + 'audit_end_balance' => 'Saldo da conta :account_name no final de :end foi :balance', + 'reports_extra_options' => 'Opções adicionais', + 'report_has_no_extra_options' => 'Este relatório não tem mais opções', + 'reports_submit' => 'Visualizar relatório', + 'end_after_start_date' => 'Data de término do relatório deve ser depois da data de início.', + 'select_category' => 'Selecionar categoria(s)', + 'select_budget' => 'Selecionar orçamento(s).', + 'select_tag' => 'Selecionar tag(s).', + 'income_per_category' => 'Receitas por categoria', + 'expense_per_category' => 'Despesa por categoria', + 'expense_per_budget' => 'Despesa por orçamento', + 'income_per_account' => 'Rendimento por conta', + 'expense_per_account' => 'Por conta de despesas', + 'expense_per_tag' => 'Despesa por tag', + 'income_per_tag' => 'Rendimento por tag', + 'include_expense_not_in_budget' => 'Despesas não incluídas no(s) orçamento(s) selecionado(s)', + 'include_expense_not_in_account' => 'Despesas não incluídas na(s) contas(s) selecionada(s)', + 'include_expense_not_in_category' => 'Despesas não incluídas na(s) categoria(s) selecionada(s)', + 'include_income_not_in_category' => 'Rendimento não incluído na(s) categoria(s) selecionada(s)', + 'include_income_not_in_account' => 'Rendimento não incluído na(s) conta(s) selecionada(s)', + 'include_income_not_in_tags' => 'Rendimento não incluído na(s) tag(s) selecionada(s)', + 'include_expense_not_in_tags' => 'Despesas não incluídas na(s) tag(s) selecionada(s)', + 'everything_else' => 'Todo o resto', + 'income_and_expenses' => 'Receitas e despesas', + 'spent_average' => 'Gastos (média)', + 'income_average' => 'Renda (média)', + 'transaction_count' => 'Contagem de transações', + 'average_spending_per_account' => 'Média de gastos por conta', + 'average_income_per_account' => 'Rendimento médio por conta', + 'total' => 'Total', + 'description' => 'Descrição', + 'sum_of_period' => 'Soma de período', + 'average_in_period' => 'Média do período', + 'account_role_defaultAsset' => 'Conta padrão', + 'account_role_sharedAsset' => 'Contas de ativos compartilhadas', + 'account_role_savingAsset' => 'Conta poupança', + 'account_role_ccAsset' => 'Cartão de crédito', + 'account_role_cashWalletAsset' => 'Carteira de dinheiro', + 'budget_chart_click' => 'Clique no nome do orçamento na tabela acima para ver um gráfico.', + 'category_chart_click' => 'Clique no nome da categoria na tabela acima para ver um gráfico.', + 'in_out_accounts' => 'Ganhou e gastou por combinação', + 'in_out_accounts_per_asset' => 'Ganhos e gastos (por conta de ativo)', + 'in_out_per_category' => 'Ganhou e gastou por categoria', + 'out_per_budget' => 'Gasto por orçamento', + 'select_expense_revenue' => 'Selecione conta de despesa/receita', + 'multi_currency_report_sum' => 'Esta lista têm contas com várias moedas, portanto a(s) soma(s) que você vê talvez não faça(m) sentido. O relatório sempre usará sua moeda padrão.', + 'sum_in_default_currency' => 'A soma será sempre em sua moeda padrão.', + 'net_filtered_prefs' => 'Esse gráfico nunca irá incluir contas que têm a opção "incluir no patrimônio líquido" desmarcada.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Gráfico', - 'month' => 'Mês', - 'budget' => 'Orçamento', - 'spent' => 'Gasto', - 'spent_capped' => 'Despesa (limitada)', - 'spent_in_budget' => 'Gasto no orçamento', - 'left_to_spend' => 'Restante para gastar', - 'earned' => 'Ganho', - 'overspent' => 'Gasto excedido', - 'left' => 'Restante', - 'max-amount' => 'Valor Máximo', - 'min-amount' => 'Valor mínimo', - 'journal-amount' => 'Valor atual da fatura', - 'name' => 'Nome', - 'date' => 'Data', - 'date_and_time' => 'Data e hora', - 'time' => 'Horário', - 'paid' => 'Pago', - 'unpaid' => 'Não pago', - 'day' => 'Dia', - 'budgeted' => 'Orçado', - 'period' => 'Período', - 'balance' => 'Saldo', - 'in_out_period' => 'Entrada + Saída deste período', - 'sum' => 'Soma', - 'summary' => 'Resumo', - 'average' => 'Média', - 'balanceFor' => 'Saldo para ":name"', - 'no_tags' => '(sem etiquetas)', + 'chart' => 'Gráfico', + 'month' => 'Mês', + 'budget' => 'Orçamento', + 'spent' => 'Gasto', + 'spent_capped' => 'Despesa (limitada)', + 'spent_in_budget' => 'Gasto no orçamento', + 'left_to_spend' => 'Restante para gastar', + 'earned' => 'Ganho', + 'overspent' => 'Gasto excedido', + 'left' => 'Restante', + 'max-amount' => 'Valor Máximo', + 'min-amount' => 'Valor mínimo', + 'journal-amount' => 'Valor atual da fatura', + 'name' => 'Nome', + 'date' => 'Data', + 'date_and_time' => 'Data e hora', + 'time' => 'Horário', + 'paid' => 'Pago', + 'unpaid' => 'Não pago', + 'day' => 'Dia', + 'budgeted' => 'Orçado', + 'period' => 'Período', + 'balance' => 'Saldo', + 'in_out_period' => 'Entrada + Saída deste período', + 'sum' => 'Soma', + 'summary' => 'Resumo', + 'average' => 'Média', + 'balanceFor' => 'Saldo para ":name"', + 'no_tags' => '(no tags)', + 'nothing_found' => '(nada encontrado)', // piggy banks: - 'event_history' => 'Histórico do evento', - 'add_money_to_piggy' => 'Adicionar dinheiro ao cofrinho ":name"', - 'piggy_bank' => 'Cofrinho', - 'new_piggy_bank' => 'Nova poupança', - 'store_piggy_bank' => 'Armazenar novo cofrinho', - 'stored_piggy_bank' => 'Armazenar novo cofrinho ":name"', - 'account_status' => 'Status da Conta', - 'left_for_piggy_banks' => 'Deixar para cofrinhos', - 'sum_of_piggy_banks' => 'Soma dos cofrinhos', - 'saved_so_far' => 'Salvo até agora', - 'left_to_save' => 'Restante para poupar', - 'suggested_amount' => 'Quantia mensal sugerida para poupar', - 'add_money_to_piggy_title' => 'Adicionar dinheiro ao cofrinho ":name"', - 'remove_money_from_piggy_title' => 'Retire o dinheiro do cofrinho ":name"', - 'add' => 'Adicionar', - 'no_money_for_piggy' => 'Você não tem dinheiro para colocar nessa poupança.', - 'suggested_savings_per_month' => 'Sugerido por mês', + 'event_history' => 'Histórico do evento', + 'add_money_to_piggy' => 'Adicionar dinheiro ao cofrinho ":name"', + 'piggy_bank' => 'Cofrinho', + 'new_piggy_bank' => 'Novo cofrinho', + 'store_piggy_bank' => 'Armazenar novo cofrinho', + 'stored_piggy_bank' => 'Armazenar novo cofrinho ":name"', + 'account_status' => 'Status da Conta', + 'left_for_piggy_banks' => 'Restante para cofrinhos', + 'sum_of_piggy_banks' => 'Soma dos cofrinhos', + 'saved_so_far' => 'Poupado até agora', + 'left_to_save' => 'Restante para poupar', + 'suggested_amount' => 'Quantia mensal sugerida para poupar', + 'add_money_to_piggy_title' => 'Adicionar dinheiro ao cofrinho ":name"', + 'remove_money_from_piggy_title' => 'Retire o dinheiro do cofrinho ":name"', + 'add' => 'Adicionar', + 'no_money_for_piggy' => 'Você não tem dinheiro para colocar nesse cofrinho.', + 'suggested_savings_per_month' => 'Sugerido por mês', - 'remove' => 'Remover', - 'max_amount_add' => 'É a quantidade máxima que você pode adicionar é', - 'max_amount_remove' => 'É a quantidade máxima que você pode remover é', - 'update_piggy_button' => 'Atualizar cofrinho', - 'update_piggy_title' => 'Atualizar cofrinho ":name"', - 'updated_piggy_bank' => 'Cofrinho ":name" atualizado', - 'details' => 'Detalhes', - 'events' => 'Eventos', - 'target_amount' => 'Valor alvo', - 'start_date' => 'Data de Início', - 'no_start_date' => 'Sem data de início', - 'target_date' => 'Data Alvo', - 'no_target_date' => 'Nenhum data', - 'table' => 'Tabela', - 'delete_piggy_bank' => 'Apagar cofrinho ":name"', - 'cannot_add_amount_piggy' => 'Não foi possível adicionar :amount a ":name".', - 'cannot_remove_from_piggy' => 'Não foi possível remover :amount de ":name".', - 'deleted_piggy_bank' => 'Apagar cofrinho ":name"', - 'added_amount_to_piggy' => 'Adicionado :amount de ":name"', - 'removed_amount_from_piggy' => 'Removido :amount de ":name"', - 'piggy_events' => 'Relacionado ao cofrinho', + 'remove' => 'Remover', + 'max_amount_add' => 'É a quantidade máxima que você pode adicionar é', + 'max_amount_remove' => 'É a quantidade máxima que você pode remover é', + 'update_piggy_button' => 'Atualizar cofrinho', + 'update_piggy_title' => 'Atualizar cofrinho ":name"', + 'updated_piggy_bank' => 'Cofrinho ":name" atualizado', + 'details' => 'Detalhes', + 'events' => 'Eventos', + 'target_amount' => 'Valor alvo', + 'start_date' => 'Data de Início', + 'no_start_date' => 'Sem data de início', + 'target_date' => 'Data Alvo', + 'no_target_date' => 'Nenhum data', + 'table' => 'Tabela', + 'delete_piggy_bank' => 'Apagar cofrinho ":name"', + 'cannot_add_amount_piggy' => 'Não foi possível adicionar :amount a ":name".', + 'cannot_remove_from_piggy' => 'Não foi possível remover :amount de ":name".', + 'deleted_piggy_bank' => 'Cofrinho ":name" excluído', + 'added_amount_to_piggy' => 'Adicionado :amount em ":name"', + 'removed_amount_from_piggy' => 'Removido :amount de ":name"', + 'piggy_events' => 'Relacionado ao cofrinho', // tags - 'delete_tag' => 'Apagar tag ":tag"', - 'deleted_tag' => 'Apagar tag ":tag"', - 'new_tag' => 'Fazer nova tag', - 'edit_tag' => 'Editar tag ":tag"', - 'updated_tag' => 'Tag atualizada ":tag"', - 'created_tag' => 'Tag ":tag" foi criada!', + 'delete_tag' => 'Apagar tag ":tag"', + 'deleted_tag' => 'Tag ":tag" excluída', + 'new_tag' => 'Fazer nova tag', + 'edit_tag' => 'Editar tag ":tag"', + 'updated_tag' => 'Tag atualizada ":tag"', + 'created_tag' => 'Tag ":tag" foi criada!', - 'transaction_journal_information' => 'Informação da transação', - 'transaction_journal_amount' => 'Informação da quantidade', - 'transaction_journal_meta' => 'Meta-informação', - 'transaction_journal_more' => 'Mais informações', - 'basic_journal_information' => 'Informações básicas de transação', - 'transaction_journal_extra' => 'Informação extra', - 'att_part_of_journal' => 'Armazendo sob ":journal"', - 'total_amount' => 'Valor total', - 'number_of_decimals' => 'Número de casas decimais', + 'transaction_journal_information' => 'Informação da transação', + 'transaction_journal_amount' => 'Informação da quantidade', + 'transaction_journal_meta' => 'Meta-informação', + 'transaction_journal_more' => 'Mais informações', + 'basic_journal_information' => 'Informações básicas de transação', + 'transaction_journal_extra' => 'Informação extra', + 'att_part_of_journal' => 'Armazendo sob ":journal"', + 'total_amount' => 'Valor total', + 'number_of_decimals' => 'Número de casas decimais', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'O convite para ":address" já foi resgatado.', - 'invite_is_deleted' => 'O convite para ":address" foi removido.', - 'invite_new_user_title' => 'Convidar novo usuário', - 'invite_new_user_text' => 'Como administrador, você pode convidar usuários para se registrarem na administração do Firefly III. Usando o link direto que você pode compartilhar, eles serão capazes de registrar uma conta. O usuário convidado e seu link de convite aparecerão na tabela abaixo. Você é livre para compartilhar com eles o link do convite.', - 'invited_user_mail' => 'E-mail', - 'invite_user' => 'Convidar usuário', - 'user_is_invited' => 'O e-mail ":address" foi convidado para Firefly III', - 'administration' => 'Administração', - 'system_settings' => 'Configurações do sistema', - 'code_already_used' => 'O código de convite foi utilizado', - 'user_administration' => 'Administração de usuários', - 'list_all_users' => 'Todos os usuários', - 'all_users' => 'Todos os usuários', - 'instance_configuration' => 'Configuração', - 'firefly_instance_configuration' => 'Opções de configuração para Firefly III', - 'setting_single_user_mode' => 'Modo de usuário único', - 'setting_single_user_mode_explain' => 'Por padrão, o Firefly III aceita apenas um (1) usuário registrado: você. Esta é uma medida de segurança para impedir que outros usem sua instância a menos que você os permita. Os registros futuros estão bloqueados. Quando você desmarca esta opção, outros podem usar sua instância se puderem acessá-la (quando ela está conectada à Internet).', - 'store_configuration' => 'Salvar configuração', - 'single_user_administration' => 'Administração de usuários para :email', - 'edit_user' => 'Editar usuário :email', - 'hidden_fields_preferences' => 'Você pode habilitar mais opções de transação em suas preferências.', - 'user_data_information' => 'Dados de usuário', - 'user_information' => 'Informações do usuário', - 'total_size' => 'tamanho total', - 'budget_or_budgets' => ':count orçamento|:count orçamentos', - 'budgets_with_limits' => ':count orçamento com valor configurado|:count orçamentos com valor configurado', - 'nr_of_rules_in_total_groups' => ':count_rules regra (s) em :count_groups grupo(s) de regras', - 'tag_or_tags' => ':count etiqueta|:count etiquetas', - 'configuration_updated' => 'A configuração foi atualizada', - 'setting_is_demo_site' => 'Site demo', - 'setting_is_demo_site_explain' => 'Se você marcar esta caixa, esta instalação se comportará como se fosse o site de demonstração, o que pode ter efeitos colaterais estranhos.', - 'block_code_bounced' => 'Mensagem(s) de email devolvidas', - 'block_code_expired' => 'Conta de demonstração expirada', - 'no_block_code' => 'Nenhuma razão para o bloqueio ou o usuário não está bloqueado', - 'block_code_email_changed' => 'O usuário ainda não confirmou o novo endereço de e-mail', - 'admin_update_email' => 'Ao contrário da página de perfil, o usuário NÃO será notificado de que seu endereço de e-mail mudou!', - 'update_user' => 'Atualizar usuário', - 'updated_user' => 'Os dados do usuário foram alterados.', - 'delete_user' => 'Excluir usuário :email', - 'user_deleted' => 'O usuário foi apagado', - 'send_test_email' => 'Enviar e-mail de teste', - 'send_test_email_text' => 'Para verificar se a sua instalação é capaz de enviar e-mail ou postar mensagens no Slack, pressione este botão. Você não verá um erro aqui (se houver), os arquivos de log refletirão quaisquer erros. Você pode pressionar este botão quantas vezes quiser. Não há controle de spam. A mensagem será enviada para :email e deve chegar em breve.', - 'send_message' => 'Enviar mensagem', - 'send_test_triggered' => 'O teste foi desencadeado. Verifique a sua caixa de entrada e os arquivos de log.', - 'give_admin_careful' => 'Os usuários que obtiverem direitos de administrador podem retirar os seus. Tenha cuidado.', - 'admin_maintanance_title' => 'Manutenção', - 'admin_maintanance_expl' => 'Alguns botões úteis para a manutenção do Firefly III', - 'admin_maintenance_clear_cache' => 'Limpar o cache', - 'admin_notifications' => 'Notificações do Administrador', - 'admin_notifications_expl' => 'As seguintes notificações podem ser ativadas ou desativadas pelo administrador. Se você quiser ter essas mensagens no Slack, defina a URL de "webhook de entrada".', - 'admin_notification_check_user_new_reg' => 'Usuário recebe mensagem de boas-vindas pós-registro', - 'admin_notification_check_admin_new_reg' => 'Administrador(es) recebem uma notificação de registro de novo usuário', - 'admin_notification_check_new_version' => 'Uma nova versão está disponível', - 'admin_notification_check_invite_created' => 'Um usuário foi convidado para Firefly III', - 'admin_notification_check_invite_redeemed' => 'Um convite de usuário foi resgatado', - 'all_invited_users' => 'Todos os usuários convidados', - 'save_notification_settings' => 'Salvar configurações', - 'notification_settings_saved' => 'As configurações de notificação foram salvas', - - - 'split_transaction_title' => 'Descrição da transação dividida', - 'split_transaction_title_help' => 'Se você criar uma transação dividida, deve haver uma descrição global para todas as partes da transação.', - 'split_title_help' => 'Se você criar uma transação dividida, é necessário haver uma descrição global para todas as partes da transação.', - 'you_create_transfer' => 'Você está criando uma transferência.', - 'you_create_withdrawal' => 'Você está criando uma saída.', - 'you_create_deposit' => 'Você está criando uma entrada.', + 'invite_is_already_redeemed' => 'O convite para ":address" já foi resgatado.', + 'invite_is_deleted' => 'O convite para ":address" foi removido.', + 'invite_new_user_title' => 'Convidar novo usuário', + 'invite_new_user_text' => 'Como administrador, você pode convidar usuários para se registrarem na administração do Firefly III. Usando o link direto que você pode compartilhar, eles serão capazes de registrar uma conta. O usuário convidado e seu link de convite aparecerão na tabela abaixo. Você é livre para compartilhar com eles o link do convite.', + 'invited_user_mail' => 'E-mail', + 'invite_user' => 'Convidar usuário', + 'user_is_invited' => 'O e-mail ":address" foi convidado para Firefly III', + 'administration' => 'Administração', + 'system_settings' => 'Configurações do sistema', + 'code_already_used' => 'O código de convite foi utilizado', + 'user_administration' => 'Administração de usuários', + 'list_all_users' => 'Todos os usuários', + 'all_users' => 'Todos os usuários', + 'instance_configuration' => 'Configuração', + 'firefly_instance_configuration' => 'Opções de configuração para Firefly III', + 'setting_single_user_mode' => 'Modo de usuário único', + 'setting_single_user_mode_explain' => 'Por padrão, o Firefly III aceita apenas um (1) usuário registrado: você. Esta é uma medida de segurança para impedir que outros usem sua instância a menos que você os permita. Os registros futuros estão bloqueados. Quando você desmarca esta opção, outros podem usar sua instância se puderem acessá-la (quando ela está conectada à Internet).', + 'store_configuration' => 'Salvar configuração', + 'single_user_administration' => 'Administração de usuários para :email', + 'edit_user' => 'Editar usuário :email', + 'hidden_fields_preferences' => 'Você pode habilitar mais opções de transação em suas preferências.', + 'user_data_information' => 'Dados de usuário', + 'user_information' => 'Informações do usuário', + 'total_size' => 'tamanho total', + 'budget_or_budgets' => ':count orçamento|:count orçamentos', + 'budgets_with_limits' => ':count orçamento com valor configurado|:count orçamentos com valor configurado', + 'nr_of_rules_in_total_groups' => ':count_rules regra (s) em :count_groups grupo(s) de regras', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'A configuração foi atualizada', + 'setting_is_demo_site' => 'Site demo', + 'setting_is_demo_site_explain' => 'Se você marcar esta caixa, esta instância vai se comportar como se fosse o site de demonstração, o que pode ter efeitos colaterais estranhos.', + 'block_code_bounced' => 'Mensagem(s) de email devolvidas', + 'block_code_expired' => 'Conta de demonstração expirada', + 'no_block_code' => 'Nenhuma razão para o bloqueio ou o usuário não está bloqueado', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'O usuário ainda não confirmou o novo endereço de e-mail', + 'admin_update_email' => 'Ao contrário da página de perfil, o usuário NÃO será notificado de que seu endereço de e-mail mudou!', + 'update_user' => 'Atualizar usuário', + 'updated_user' => 'Os dados do usuário foram alterados.', + 'delete_user' => 'Excluir usuário :email', + 'user_deleted' => 'O usuário foi apagado', + 'send_test_email' => 'Enviar e-mail de teste', + 'send_test_email_text' => 'Para verificar se a sua instalação é capaz de enviar e-mail ou postar mensagens no Slack, pressione este botão. Você não verá um erro aqui (se houver), os arquivos de log refletirão quaisquer erros. Você pode pressionar este botão quantas vezes quiser. Não há controle de spam. A mensagem será enviada para :email e deve chegar em breve.', + 'send_message' => 'Enviar mensagem', + 'send_test_triggered' => 'O teste foi desencadeado. Verifique a sua caixa de entrada e os arquivos de log.', + 'give_admin_careful' => 'Os usuários que obtiverem direitos de administrador podem retirar os seus. Tenha cuidado.', + 'admin_maintanance_title' => 'Manutenção', + 'admin_maintanance_expl' => 'Alguns botões úteis para a manutenção do Firefly III', + 'admin_maintenance_clear_cache' => 'Limpar o cache', + 'admin_notifications' => 'Notificações do Administrador', + 'admin_notifications_expl' => 'As seguintes notificações podem ser ativadas ou desativadas pelo administrador. Se você quiser ter essas mensagens no Slack, defina a URL de "webhook de entrada".', + 'admin_notification_check_user_new_reg' => 'Usuário recebe mensagem de boas-vindas pós-registro', + 'admin_notification_check_admin_new_reg' => 'Administrador(es) recebem uma notificação de registro de novo usuário', + 'admin_notification_check_new_version' => 'Uma nova versão está disponível', + 'admin_notification_check_invite_created' => 'Um usuário foi convidado para Firefly III', + 'admin_notification_check_invite_redeemed' => 'Um convite de usuário foi resgatado', + 'all_invited_users' => 'Todos os usuários convidados', + 'save_notification_settings' => 'Salvar configurações', + 'notification_settings_saved' => 'As configurações de notificação foram salvas', + 'split_transaction_title' => 'Descrição da transação dividida', + 'split_transaction_title_help' => 'Se você criar uma transação dividida, deve haver uma descrição global para todas as partes da transação.', + 'split_title_help' => 'Se você criar uma transação dividida, é necessário haver uma descrição global para todas as partes da transação.', + 'you_create_transfer' => 'Você está criando uma transferência.', + 'you_create_withdrawal' => 'Você está criando uma saída.', + 'you_create_deposit' => 'Você está criando uma entrada.', // links - 'journal_link_configuration' => 'Configuração de vínculos de transações', - 'create_new_link_type' => 'Crie um novo tipo de vínculo', - 'store_new_link_type' => 'Armazene novo tipo de vínculo', - 'update_link_type' => 'Atualize o tipo de vínculo', - 'edit_link_type' => 'Excluir tipo de liagação ":name"', - 'updated_link_type' => 'Tipo de vínculo ":name" atualizado', - 'delete_link_type' => 'Excluir tipo de vínculo ":name"', - 'deleted_link_type' => 'Tipo de vínculo ":name" excluído', - 'stored_new_link_type' => 'Armazene novo tipo de vínculo ":name"', - 'cannot_edit_link_type' => 'Não é possível editar o tipo de vínculo ":name"', - 'link_type_help_name' => 'Ou seja. "Duplicatas"', - 'link_type_help_inward' => 'Ou seja. "duplicatas"', - 'link_type_help_outward' => 'Ou seja. "é duplicado por"', - 'save_connections_by_moving' => 'Salve o vínculo entre essas transações movendo-as para outro tipo de vínculo:', - 'do_not_save_connection' => '(não salve a conexão)', - 'link_transaction' => 'Ligar transação', - 'link_to_other_transaction' => 'Ligue esta transação a outra transação', - 'select_transaction_to_link' => 'Selecione uma transação para vincular esta transação. Atualmente, os links não são usados no Firefly III (além de serem exibidos), mas planejo mudar isso no futuro. Use a caixa de pesquisa para selecionar uma transação por título ou por ID. Se você quiser adicionar tipos de link personalizados, confira a seção de administração.', - 'this_transaction' => 'Esta transação', - 'transaction' => 'Transação', - 'comments' => 'Comentários', - 'link_notes' => 'Quaisquer notas que você deseja armazenar com o link.', - 'invalid_link_selection' => 'Não é possível ligar essas transações', - 'selected_transaction' => 'Transação selecionada', - 'journals_linked' => 'As transações estão vinculadas.', - 'journals_error_linked' => 'Essas transações já estão vinculadas.', - 'journals_link_to_self' => 'Você não pode vincular uma transação a ela mesma', - 'journal_links' => 'Transações vinculadas', - 'this_withdrawal' => 'Esta saída', - 'this_deposit' => 'Esta entrada', - 'this_transfer' => 'Esta transferência', - 'overview_for_link' => 'Visão geral para o tipo de vínculo ":name"', - 'source_transaction' => 'Transação de origem', - 'link_description' => 'Descrição do vínculo', - 'destination_transaction' => 'Transação de destino', - 'delete_journal_link' => 'Excluir o vínculo entre :source e :destination', - 'deleted_link' => 'Excluir vínculo', + 'journal_link_configuration' => 'Configuração de vínculos de transações', + 'create_new_link_type' => 'Crie um novo tipo de vínculo', + 'store_new_link_type' => 'Armazene novo tipo de vínculo', + 'update_link_type' => 'Atualize o tipo de vínculo', + 'edit_link_type' => 'Editar tipo de vínculo ":name"', + 'updated_link_type' => 'Tipo de vínculo ":name" atualizado', + 'delete_link_type' => 'Excluir tipo de vínculo ":name"', + 'deleted_link_type' => 'Tipo de vínculo ":name" excluído', + 'stored_new_link_type' => 'Armazene novo tipo de vínculo ":name"', + 'cannot_edit_link_type' => 'Não é possível editar o tipo de vínculo ":name"', + 'link_type_help_name' => 'Ou seja. "Duplicatas"', + 'link_type_help_inward' => 'Ou seja. "duplicatas"', + 'link_type_help_outward' => 'Ou seja. "é duplicado por"', + 'save_connections_by_moving' => 'Salve o vínculo entre essas transações movendo-as para outro tipo de vínculo:', + 'do_not_save_connection' => '(não salve a conexão)', + 'link_transaction' => 'Vincular transação', + 'link_to_other_transaction' => 'Vincule esta transação a outra transação', + 'select_transaction_to_link' => 'Selecione uma transação para vincular com esta transação. Atualmente, os vínculos não são usados no Firefly III (além de serem exibidos), mas planejo mudar isso no futuro. Use a caixa de pesquisa para selecionar uma transação por título ou por ID. Se você quiser adicionar tipos de vínculo personalizados, confira a seção de administração.', + 'this_transaction' => 'Esta transação', + 'transaction' => 'Transação', + 'comments' => 'Comentários', + 'link_notes' => 'Quaisquer notas que você deseja armazenar com o link.', + 'invalid_link_selection' => 'Não é possível vincular essas transações', + 'selected_transaction' => 'Transação selecionada', + 'journals_linked' => 'As transações estão vinculadas.', + 'journals_error_linked' => 'Essas transações já estão vinculadas.', + 'journals_link_to_self' => 'Você não pode vincular uma transação a ela mesma', + 'journal_links' => 'Transações vinculadas', + 'this_withdrawal' => 'Esta saída', + 'this_deposit' => 'Esta entrada', + 'this_transfer' => 'Esta transferência', + 'overview_for_link' => 'Visão geral para o tipo de vínculo ":name"', + 'source_transaction' => 'Transação de origem', + 'link_description' => 'Descrição do vínculo', + 'destination_transaction' => 'Transação de destino', + 'delete_journal_link' => 'Excluir o vínculo entre :source e :destination', + 'deleted_link' => 'Vínculo excluído', // link translations: - 'Paid_name' => 'Pago', - 'Refund_name' => 'Devolução', - 'Reimbursement_name' => 'Reembolso', - 'Related_name' => 'Relacionado', - 'relates to_inward' => 'relacionado a', - 'is (partially) refunded by_inward' => 'é (parcialmente) devolvido por', - 'is (partially) paid for by_inward' => 'é (parcialmente) pago por', - 'is (partially) reimbursed by_inward' => 'é (parcialmente) reembolsado por', - 'inward_transaction' => 'Transação interna', - 'outward_transaction' => 'Transação externa', - 'relates to_outward' => 'relacionado a', - '(partially) refunds_outward' => 'devolve (parcialmente)', - '(partially) pays for_outward' => 'paga (parcialmente) por', - '(partially) reimburses_outward' => 'reembolsa (parcialmente)', - 'is (partially) refunded by' => 'foi (parcialmente) devolvido por', - 'is (partially) paid for by' => 'foi (parcialmente) pago por', - 'is (partially) reimbursed by' => 'foi (parcialmente) reembolsado por', - 'relates to' => 'relacionado a', - '(partially) refunds' => '(parcialmente) devolve', - '(partially) pays for' => '(parcialmente) pago por', - '(partially) reimburses' => '(parcialmente) reembolsa', + 'Paid_name' => 'Pago', + 'Refund_name' => 'Devolução', + 'Reimbursement_name' => 'Reembolso', + 'Related_name' => 'Relacionado', + 'relates to_inward' => 'relacionado a', + 'is (partially) refunded by_inward' => 'é (parcialmente) devolvido por', + 'is (partially) paid for by_inward' => 'é (parcialmente) pago por', + 'is (partially) reimbursed by_inward' => 'é (parcialmente) reembolsado por', + 'inward_transaction' => 'Transação interna', + 'outward_transaction' => 'Transação externa', + 'relates to_outward' => 'relacionado a', + '(partially) refunds_outward' => 'devolve (parcialmente)', + '(partially) pays for_outward' => 'paga (parcialmente) por', + '(partially) reimburses_outward' => 'reembolsa (parcialmente)', + 'is (partially) refunded by' => 'foi (parcialmente) devolvido por', + 'is (partially) paid for by' => 'foi (parcialmente) pago por', + 'is (partially) reimbursed by' => 'foi (parcialmente) reembolsado por', + 'relates to' => 'relacionado a', + '(partially) refunds' => '(parcialmente) devolve', + '(partially) pays for' => 'paga (parcialmente)', + '(partially) reimburses' => '(parcialmente) reembolsa', // split a transaction: - 'splits' => 'Divide-se', - 'add_another_split' => 'Adicionar outra divisão', - 'cannot_edit_opening_balance' => 'Não é possível editar o saldo de abertura de uma conta.', - 'no_edit_multiple_left' => 'Você não selecionou nenhuma transação válida para editar.', - 'breadcrumb_convert_group' => 'Converter transação', - 'convert_invalid_source' => 'As informações de origem são inválidas para transações #%d.', - 'convert_invalid_destination' => 'As informações de destino são inválidas para transações #%d.', - 'create_another' => 'Depois de armazenar, retorne aqui para criar outro.', - 'after_update_create_another' => 'Depois de atualizar, retorne aqui para continuar editando.', - 'store_as_new' => 'Armazene como uma nova transação em vez de atualizar.', - 'reset_after' => 'Limpar o formulário após o envio', - 'errors_submission' => 'Há algo de errado com o seu envio. Por favor, verifique os erros abaixo.', - 'transaction_expand_split' => 'Exibir divisão', - 'transaction_collapse_split' => 'Esconder divisão', + 'splits' => 'Divisões', + 'add_another_split' => 'Adicionar outra divisão', + 'cannot_edit_opening_balance' => 'Não é possível editar o saldo de abertura de uma conta.', + 'no_edit_multiple_left' => 'Você não selecionou nenhuma transação válida para editar.', + 'breadcrumb_convert_group' => 'Converter transação', + 'convert_invalid_source' => 'As informações de origem são inválidas para transações #%d.', + 'convert_invalid_destination' => 'As informações de destino são inválidas para transações #%d.', + 'create_another' => 'Depois de armazenar, retorne aqui para criar outro.', + 'after_update_create_another' => 'Depois de atualizar, retorne aqui para continuar editando.', + 'store_as_new' => 'Armazene como uma nova transação em vez de atualizar.', + 'reset_after' => 'Limpar o formulário após o envio', + 'errors_submission' => 'Algo deu errado com seu envio. Por favor, verifique os erros abaixo.', + 'errors_submission_v2' => 'Algo deu errado com seu envio. Por favor, verifique os erros abaixo: %{errorMessage}', + 'transaction_expand_split' => 'Exibir divisão', + 'transaction_collapse_split' => 'Esconder divisão', // object groups - 'default_group_title_name' => '(não agrupado)', - 'default_group_title_name_plain' => 'sem grupo', + 'default_group_title_name' => '(não agrupado)', + 'default_group_title_name_plain' => 'sem grupo', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Vamos criar uma conta de ativos!', - 'no_accounts_intro_asset' => 'Ainda não possui contas de ativos. As contas de ativos são suas principais contas: sua conta corrente, conta poupança, conta compartilhada ou mesmo seu cartão de crédito.', - 'no_accounts_imperative_asset' => 'Para começar a usar o Firefly III, você deve criar pelo menos uma conta de ativos. Vamos fazer agora:', - 'no_accounts_create_asset' => 'Criar uma conta de ativo', - 'no_accounts_title_expense' => 'Vamos criar uma conta de despesas!', - 'no_accounts_intro_expense' => 'Você ainda não possui contas de despesas. As contas de despesas são os lugares onde você gasta dinheiro, como lojas e supermercados.', - 'no_accounts_imperative_expense' => 'As contas de despesas são criadas automaticamente quando você cria transações, mas você também pode criar uma manualmente, se desejar. Vamos criar uma agora:', - 'no_accounts_create_expense' => 'Criar uma conta de despesas', - 'no_accounts_title_revenue' => 'Vamos criar uma conta de receita!', - 'no_accounts_intro_revenue' => 'Você ainda não possui contas de receita. As contas de receita são os locais onde você recebe dinheiro, como o seu empregador.', - 'no_accounts_imperative_revenue' => 'As contas de receita são criadas automaticamente quando você cria transações, mas você também pode criar uma manualmente, se desejar. Vamos criar um agora:', - 'no_accounts_create_revenue' => 'Criar uma conta de receita', - 'no_accounts_title_liabilities' => 'Vamos criar um passivo!', - 'no_accounts_intro_liabilities' => 'Você ainda não tem nenhum passivo. Essas contas registram seus empréstimos e outras dívidas.', - 'no_accounts_imperative_liabilities' => 'Você não precisa usar esse recurso, mas pode ser útil se você quer controlar esse tipo de coisas.', - 'no_accounts_create_liabilities' => 'Criar um passivo', - 'no_budgets_title_default' => 'Vamos criar um orçamento', - 'no_rules_title_default' => 'Vamos criar uma regra', - 'no_budgets_intro_default' => 'Você ainda não tem nenhum orçamento. Eles são utilizados para organizar suas despesas em grupos lógicos, que você pode aplicar para limitar suas despesas.', - 'no_rules_intro_default' => 'Você ainda não tem regras. As regras são poderosas automações que podem gerenciar transações para você.', - 'no_rules_imperative_default' => 'As regras podem ser muito úteis quando você está gerenciando transações. Vamos criar uma agora:', - 'no_budgets_imperative_default' => 'Os orçamentos são as ferramentas básicas de gestão financeira. Vamos criar um agora:', - 'no_budgets_create_default' => 'Criar orçamento', - 'no_rules_create_default' => 'Criar uma regra', - 'no_categories_title_default' => 'Vamos criar uma categoria!', - 'no_categories_intro_default' => 'Você ainda não possui categorias. As categorias são usadas para ajustar suas transações e rotulá-las com a categoria designada.', - 'no_categories_imperative_default' => 'As categorias são criadas automaticamente quando você cria transações, mas você também pode criar uma manualmente. Vamos criar uma agora:', - 'no_categories_create_default' => 'Criar uma categoria', - 'no_tags_title_default' => 'Vamos criar uma tag!', - 'no_tags_intro_default' => 'Ainda não possui tags. As tags são usadas para ajustar suas transações e rotulá-las com palavras-chave específicas.', - 'no_tags_imperative_default' => 'As tags são criadas automaticamente quando você cria transações, mas você também pode criar uma manualmente. Vamos criar uma agora:', - 'no_tags_create_default' => 'Criar uma tag', - 'no_transactions_title_withdrawal' => 'Vamos criar uma despesa!', - 'no_transactions_intro_withdrawal' => 'Ainda não tem despesas. Você deve criar despesas para começar a gerenciar suas finanças.', - 'no_transactions_imperative_withdrawal' => 'Você gastou algum dinheiro? Então você deve anotá-lo:', - 'no_transactions_create_withdrawal' => 'Crie uma despesa', - 'no_transactions_title_deposit' => 'Vamos criar alguma renda!', - 'no_transactions_intro_deposit' => 'Você não tem nenhuma renda registrada ainda. Você deve criar entradas de renda para começar a gerenciar suas finanças.', - 'no_transactions_imperative_deposit' => 'Você recebeu algum dinheiro? Então você deve anotá-lo:', - 'no_transactions_create_deposit' => 'Criar uma entrada', - 'no_transactions_title_transfers' => 'Vamos criar uma transferência!', - 'no_transactions_intro_transfers' => 'Você ainda não tem transferências. Quando você move dinheiro entre contas ativas, ele é registrado como uma transferência.', - 'no_transactions_imperative_transfers' => 'Você moveu algum dinheiro? Então você deve anotá-lo:', - 'no_transactions_create_transfers' => 'Criar uma transferência', - 'no_piggies_title_default' => 'Vamos criar uma poupança!', - 'no_piggies_intro_default' => 'Você ainda não tem poupança. Você pode criar popanças para dividir suas economias e acompanhar para o que você está economizando.', - 'no_piggies_imperative_default' => 'Você tem coisas para as quais você está economizando? Crie uma poupança e acompanhe:', - 'no_piggies_create_default' => 'Criar uma nova poupança', - 'no_bills_title_default' => 'Vamos criar uma fatura!', - 'no_bills_intro_default' => 'Você ainda não possui faturas. Você pode criar faturas para acompanhar as despesas regulares, como sua renda ou seguro.', - 'no_bills_imperative_default' => 'Você tem esse tipo de fatura regularmente? Crie uma conta e acompanhe seus pagamentos:', - 'no_bills_create_default' => 'Criar uma fatura', + 'no_accounts_title_asset' => 'Vamos criar uma conta de ativos!', + 'no_accounts_intro_asset' => 'Ainda não possui contas de ativos. As contas de ativos são suas principais contas: sua conta corrente, conta poupança, conta compartilhada ou mesmo seu cartão de crédito.', + 'no_accounts_imperative_asset' => 'Para começar a usar o Firefly III, você deve criar pelo menos uma conta de ativos. Vamos fazer agora:', + 'no_accounts_create_asset' => 'Criar uma conta de ativo', + 'no_accounts_title_expense' => 'Vamos criar uma conta de despesas!', + 'no_accounts_intro_expense' => 'Você ainda não possui contas de despesas. As contas de despesas são os lugares onde você gasta dinheiro, como lojas e supermercados.', + 'no_accounts_imperative_expense' => 'As contas de despesas são criadas automaticamente quando você cria transações, mas você também pode criar uma manualmente, se desejar. Vamos criar uma agora:', + 'no_accounts_create_expense' => 'Criar uma conta de despesas', + 'no_accounts_title_revenue' => 'Vamos criar uma conta de receita!', + 'no_accounts_intro_revenue' => 'Você ainda não possui contas de receita. As contas de receita são os locais onde você recebe dinheiro, como o seu empregador.', + 'no_accounts_imperative_revenue' => 'As contas de receita são criadas automaticamente quando você cria transações, mas você também pode criar uma manualmente, se desejar. Vamos criar um agora:', + 'no_accounts_create_revenue' => 'Criar uma conta de receita', + 'no_accounts_title_liabilities' => 'Vamos criar um passivo!', + 'no_accounts_intro_liabilities' => 'Você ainda não tem nenhum passivo. Essas contas registram seus empréstimos e outras dívidas.', + 'no_accounts_imperative_liabilities' => 'Você não precisa usar esse recurso, mas pode ser útil se você quer controlar esse tipo de coisas.', + 'no_accounts_create_liabilities' => 'Criar um passivo', + 'no_budgets_title_default' => 'Vamos criar um orçamento', + 'no_rules_title_default' => 'Vamos criar uma regra', + 'no_budgets_intro_default' => 'Você ainda não tem nenhum orçamento. Eles são utilizados para organizar suas despesas em grupos lógicos, que você pode aplicar para limitar suas despesas.', + 'no_rules_intro_default' => 'Você ainda não tem regras. As regras são poderosas automações que podem gerenciar transações para você.', + 'no_rules_imperative_default' => 'As regras podem ser muito úteis quando você está gerenciando transações. Vamos criar uma agora:', + 'no_budgets_imperative_default' => 'Os orçamentos são as ferramentas básicas de gestão financeira. Vamos criar um agora:', + 'no_budgets_create_default' => 'Criar orçamento', + 'no_rules_create_default' => 'Criar uma regra', + 'no_categories_title_default' => 'Vamos criar uma categoria!', + 'no_categories_intro_default' => 'Você ainda não possui categorias. As categorias são usadas para ajustar suas transações e rotulá-las com a categoria designada.', + 'no_categories_imperative_default' => 'As categorias são criadas automaticamente quando você cria transações, mas você também pode criar uma manualmente. Vamos criar uma agora:', + 'no_categories_create_default' => 'Criar uma categoria', + 'no_tags_title_default' => 'Vamos criar uma tag!', + 'no_tags_intro_default' => 'Ainda não possui tags. As tags são usadas para ajustar suas transações e rotulá-las com palavras-chave específicas.', + 'no_tags_imperative_default' => 'As tags são criadas automaticamente quando você cria transações, mas você também pode criar uma manualmente. Vamos criar uma agora:', + 'no_tags_create_default' => 'Criar uma tag', + 'no_transactions_title_withdrawal' => 'Vamos criar uma despesa!', + 'no_transactions_intro_withdrawal' => 'Ainda não tem despesas. Você deve criar despesas para começar a gerenciar suas finanças.', + 'no_transactions_imperative_withdrawal' => 'Você gastou algum dinheiro? Então você deve anotá-lo:', + 'no_transactions_create_withdrawal' => 'Crie uma despesa', + 'no_transactions_title_deposit' => 'Vamos criar alguma renda!', + 'no_transactions_intro_deposit' => 'Você não tem nenhuma renda registrada ainda. Você deve criar entradas de renda para começar a gerenciar suas finanças.', + 'no_transactions_imperative_deposit' => 'Você recebeu algum dinheiro? Então você deve anotá-lo:', + 'no_transactions_create_deposit' => 'Criar uma entrada', + 'no_transactions_title_transfers' => 'Vamos criar uma transferência!', + 'no_transactions_intro_transfers' => 'Você ainda não tem transferências. Quando você move dinheiro entre contas ativas, ele é registrado como uma transferência.', + 'no_transactions_imperative_transfers' => 'Você moveu algum dinheiro? Então você deve anotá-lo:', + 'no_transactions_create_transfers' => 'Criar uma transferência', + 'no_piggies_title_default' => 'Vamos criar um cofrinho!', + 'no_piggies_intro_default' => 'Você ainda não tem cofrinhos. Você pode criar cofrinhos para dividir suas economias e acompanhar para o que você está economizando.', + 'no_piggies_imperative_default' => 'Você tem coisas para as quais você está economizando? Crie um cofrinho e acompanhe:', + 'no_piggies_create_default' => 'Criar um novo cofrinho', + 'no_bills_title_default' => 'Vamos criar uma fatura!', + 'no_bills_intro_default' => 'Você ainda não possui faturas. Você pode criar faturas para acompanhar as despesas regulares, como sua renda ou seguro.', + 'no_bills_imperative_default' => 'Você tem esse tipo de fatura regularmente? Crie uma fatura e acompanhe seus pagamentos:', + 'no_bills_create_default' => 'Criar uma fatura', // recurring transactions - 'create_right_now' => 'Criar agora mesmo', - 'no_new_transaction_in_recurrence' => 'Nenhuma transação nova foi criada. Talvez já tenha sido disparada nesta data?', - 'recurrences' => 'Transações recorrentes', - 'repeat_until_in_past' => 'Esta transação recorrente parou de repetir em :date.', - 'recurring_calendar_view' => 'Calendário', - 'no_recurring_title_default' => 'Vamos criar uma transação recorrente!', - 'no_recurring_intro_default' => 'Você ainda não tem nenhuma transação recorrente. Você pode usá-las para que o Firefly III crie transações para você automaticamente.', - 'no_recurring_imperative_default' => 'Essa é uma função bastante avançada, mas pode ser muito útil. Leia a documentação (ícone (?) no canto superior direito) antes de continuar.', - 'no_recurring_create_default' => 'Criar transação recorrente', - 'make_new_recurring' => 'Criar transação recorrente', - 'recurring_daily' => 'Todos os dias', - 'recurring_weekly' => ':weekday toda semana', - 'recurring_weekly_skip' => 'A cada :skipª semana em :weekday', - 'recurring_monthly' => 'Todos os meses no dia :dayOfMonth', - 'recurring_monthly_skip' => 'A cada mês :skipº no dia :dayOfMonth', - 'recurring_ndom' => 'Todos os meses na(o) :dayOfMonth ª/º :weekday', - 'recurring_yearly' => 'Todos os anos em :date', - 'overview_for_recurrence' => 'Visão geral da transação recorrente ":title"', - 'warning_duplicates_repetitions' => 'Em raras ocasiões, as datas aparecem duas vezes na lista. Isso pode acontecer quando várias repetições colidem. Firefly III sempre irá gerar uma transação por dia.', - 'created_transactions' => 'Transações relacionadas', - 'expected_withdrawals' => 'Saídas previstas', - 'expected_deposits' => 'Entradas esperadas', - 'expected_transfers' => 'Transferências previstas', - 'created_withdrawals' => 'Saídas criadas', - 'created_deposits' => 'Entradas criadas', - 'created_transfers' => 'Transferências criadas', - 'recurring_info' => 'Transação recorrente :count / :total', - 'created_from_recurrence' => 'Criado a partir da transação recorrente ":title" (#:id)', - 'recurring_never_cron' => 'Parece que o cron job necessário para dar suporte a transações recorrentes nunca foi executado. Isso é normal quando você acabou de instalar o Firefly III, mas deve ser configurado o quanto antes. Por favor, veja as páginas de ajuda usando o ícone (?) no canto superior direito da página.', - 'recurring_cron_long_ago' => 'Faz mais de 36 horas que o cron job que dá suporte a transações recorrentes foi acionado pela última vez. Tem certeza de que foi configurado corretamente? Por favor, veja as páginas de ajuda usando o ícone (?) no canto superior direito da página.', + 'create_right_now' => 'Criar agora mesmo', + 'no_new_transaction_in_recurrence' => 'Nenhuma transação nova foi criada. Talvez já tenha sido disparada nesta data?', + 'recurrences' => 'Transações recorrentes', + 'repeat_until_in_past' => 'Esta transação recorrente parou de repetir em :date.', + 'recurring_calendar_view' => 'Calendário', + 'no_recurring_title_default' => 'Vamos criar uma transação recorrente!', + 'no_recurring_intro_default' => 'Você ainda não tem nenhuma transação recorrente. Você pode usá-las para que o Firefly III crie transações para você automaticamente.', + 'no_recurring_imperative_default' => 'Essa é uma função bastante avançada, mas pode ser muito útil. Leia a documentação (ícone (?) no canto superior direito) antes de continuar.', + 'no_recurring_create_default' => 'Criar transação recorrente', + 'make_new_recurring' => 'Criar transação recorrente', + 'recurring_daily' => 'Todos os dias', + 'recurring_weekly' => ':weekday toda semana', + 'recurring_weekly_skip' => 'A cada :skipª semana em :weekday', + 'recurring_monthly' => 'Todos os meses no dia :dayOfMonth', + 'recurring_monthly_skip' => 'A cada mês :skipº no dia :dayOfMonth', + 'recurring_ndom' => 'Todos os meses na(o) :dayOfMonth ª/º :weekday', + 'recurring_yearly' => 'Todos os anos em :date', + 'overview_for_recurrence' => 'Visão geral da transação recorrente ":title"', + 'warning_duplicates_repetitions' => 'Em raras ocasiões, as datas aparecem duas vezes na lista. Isso pode acontecer quando várias repetições colidem. Firefly III sempre irá gerar uma transação por dia.', + 'created_transactions' => 'Transações relacionadas', + 'expected_withdrawals' => 'Saídas previstas', + 'expected_deposits' => 'Entradas esperadas', + 'expected_transfers' => 'Transferências previstas', + 'created_withdrawals' => 'Saídas criadas', + 'created_deposits' => 'Entradas criadas', + 'created_transfers' => 'Transferências criadas', + 'recurring_info' => 'Transação recorrente :count / :total', + 'created_from_recurrence' => 'Criado a partir da transação recorrente ":title" (#:id)', + 'recurring_never_cron' => 'Parece que o cron job necessário para dar suporte a transações recorrentes nunca foi executado. Isso é normal quando você acabou de instalar o Firefly III, mas deve ser configurado o quanto antes. Por favor, veja as páginas de ajuda usando o ícone (?) no canto superior direito da página.', + 'recurring_cron_long_ago' => 'Faz mais de 36 horas que o cron job que dá suporte a transações recorrentes foi acionado pela última vez. Tem certeza de que foi configurado corretamente? Por favor, veja as páginas de ajuda usando o ícone (?) no canto superior direito da página.', - 'create_new_recurrence' => 'Criar nova transação recorrente', - 'help_first_date' => 'Indique a primeira recorrência esperada. Isso deve ser no futuro.', - 'help_first_date_no_past' => 'Indique a primeira recorrência esperada. Firefly III não irá criar transações no passado.', - 'no_currency' => '(sem moeda)', - 'mandatory_for_recurring' => 'Informações obrigatórias de recorrência', - 'mandatory_for_transaction' => 'Informações obrigatórias de transação', - 'optional_for_recurring' => 'Informações opcionais de recorrência', - 'optional_for_transaction' => 'Informações opcionais de transação', - 'change_date_other_options' => 'Mude a "primeira data" para ver mais opções.', - 'mandatory_fields_for_tranaction' => 'Os valores aqui estarão na(s) transação(ões) criada(s)', - 'click_for_calendar' => 'Clique aqui para ver um calendário que mostra quando a transação se repetiria.', - 'repeat_forever' => 'Repetir para sempre', - 'repeat_until_date' => 'Repetir até uma data', - 'repeat_times' => 'Repetir uma quantidade de vezes', - 'recurring_skips_one' => 'Intercalado', - 'recurring_skips_more' => 'Pular :count ocorrências', - 'store_new_recurrence' => 'Salvar transação recorrente', - 'stored_new_recurrence' => 'Transação recorrente ":title" armazenada com sucesso.', - 'edit_recurrence' => 'Editar transação recorrente ":title"', - 'recurring_repeats_until' => 'Repetir até :date', - 'recurring_repeats_forever' => 'Repetir sempre', - 'recurring_repeats_x_times' => 'Repetir :count vez|Repetir :count vezes', - 'update_recurrence' => 'Atualizar transação recorrente', - 'updated_recurrence' => 'Atualizar transação recorrente ":title"', - 'recurrence_is_inactive' => 'Esta transação recorrente não está ativa e não gerará novas transações.', - 'delete_recurring' => 'Apagar transação recorrente ":title"', - 'new_recurring_transaction' => 'Nova transação recorrente', - 'help_weekend' => 'O que o Firefly III deve fazer quando a transação recorrente cai em um sábado ou domingo?', - 'do_nothing' => 'Apenas criar a transação', - 'skip_transaction' => 'Pular a ocorrência', - 'jump_to_friday' => 'Criar a transação na sexta-feira anterior', - 'jump_to_monday' => 'Criar a transação na segunda-feira seguinte', - 'will_jump_friday' => 'Será criada na sexta-feira em vez de nos finais de semana.', - 'will_jump_monday' => 'Será criada na segunda-feira em vez de nos finais de semana.', - 'except_weekends' => 'Exceto nos fins de semana', - 'recurrence_deleted' => 'Transação recorrente ":title" apagada', + 'create_new_recurrence' => 'Criar nova transação recorrente', + 'help_first_date' => 'Indique a primeira recorrência esperada. Isso deve ser no futuro.', + 'help_first_date_no_past' => 'Indique a primeira recorrência esperada. Firefly III não irá criar transações no passado.', + 'no_currency' => '(sem moeda)', + 'mandatory_for_recurring' => 'Informações obrigatórias de recorrência', + 'mandatory_for_transaction' => 'Informações obrigatórias de transação', + 'optional_for_recurring' => 'Informações opcionais de recorrência', + 'optional_for_transaction' => 'Informações opcionais de transação', + 'change_date_other_options' => 'Mude a "primeira data" para ver mais opções.', + 'mandatory_fields_for_tranaction' => 'Os valores aqui estarão na(s) transação(ões) criada(s)', + 'click_for_calendar' => 'Clique aqui para ver um calendário que mostra quando a transação se repetiria.', + 'repeat_forever' => 'Repetir para sempre', + 'repeat_until_date' => 'Repetir até uma data', + 'repeat_times' => 'Repetir uma quantidade de vezes', + 'recurring_skips_one' => 'Intercalado', + 'recurring_skips_more' => 'Pular :count ocorrências', + 'store_new_recurrence' => 'Salvar transação recorrente', + 'stored_new_recurrence' => 'Transação recorrente ":title" armazenada com sucesso.', + 'edit_recurrence' => 'Editar transação recorrente ":title"', + 'recurring_repeats_until' => 'Repetir até :date', + 'recurring_repeats_forever' => 'Repetir sempre', + 'recurring_repeats_x_times' => 'Repetir :count vez|Repetir :count vezes', + 'update_recurrence' => 'Atualizar transação recorrente', + 'updated_recurrence' => 'Atualizar transação recorrente ":title"', + 'recurrence_is_inactive' => 'Esta transação recorrente não está ativa e não gerará novas transações.', + 'delete_recurring' => 'Apagar transação recorrente ":title"', + 'new_recurring_transaction' => 'Nova transação recorrente', + 'help_weekend' => 'O que o Firefly III deve fazer quando a transação recorrente cai em um sábado ou domingo?', + 'do_nothing' => 'Apenas criar a transação', + 'skip_transaction' => 'Pular a ocorrência', + 'jump_to_friday' => 'Criar a transação na sexta-feira anterior', + 'jump_to_monday' => 'Criar a transação na segunda-feira seguinte', + 'will_jump_friday' => 'Será criada na sexta-feira em vez de nos finais de semana.', + 'will_jump_monday' => 'Será criada na segunda-feira em vez de nos finais de semana.', + 'except_weekends' => 'Exceto nos fins de semana', + 'recurrence_deleted' => 'Transação recorrente ":title" excluída', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Saldo (:currency)', - 'box_spent_in_currency' => 'Gasto (:currency)', - 'box_earned_in_currency' => 'Ganho (:currency)', - 'box_budgeted_in_currency' => 'Orçado (:currency)', - 'box_bill_paid_in_currency' => 'Faturas pagas (:currency)', - 'box_bill_unpaid_in_currency' => 'Faturas não pagas (:currency)', - 'box_left_to_spend_in_currency' => 'Restante para gastar (:currency)', - 'box_net_worth_in_currency' => 'Valor líquido (:currency)', - 'box_spend_per_day' => 'Restante para gastar por dia: :amount', + 'box_balance_in_currency' => 'Saldo (:currency)', + 'box_spent_in_currency' => 'Gasto (:currency)', + 'box_earned_in_currency' => 'Ganho (:currency)', + 'box_budgeted_in_currency' => 'Orçado (:currency)', + 'box_bill_paid_in_currency' => 'Faturas pagas (:currency)', + 'box_bill_unpaid_in_currency' => 'Faturas não pagas (:currency)', + 'box_left_to_spend_in_currency' => 'Restante para gastar (:currency)', + 'box_net_worth_in_currency' => 'Patrimônio líquido (:currency)', + 'box_spend_per_day' => 'Restante para gastar por dia: :amount', // debug page - 'debug_page' => 'Página de depuração', - 'debug_submit_instructions' => 'Se você estiver com problemas, você pode usar as informações nesta caixa como informações de depuração. Por favor, copie e cole em um issue existente ou nova GitHub. Gerará uma linda tabela que pode ser usada para diagnosticar rapidamente seu problema.', - 'debug_pretty_table' => 'Se você copiar/colar a caixa abaixo em uma issue no GitHub, ela irá gerar uma tabela. Por favor, não coloque este texto entre acentos agudos ou aspas.', - 'debug_additional_data' => 'Você também pode compartilhar o conteúdo da caixa abaixo. Você também pode copiar e colar isso em uma issue nova ou existente do GitHub. No entanto, o conteúdo desta caixa pode conter informações privadas, como nomes de conta, detalhes da transação ou endereços de e-mail.', + 'debug_page' => 'Página de depuração', + 'debug_submit_instructions' => 'Se você estiver com problemas, você pode usar as informações nesta caixa como informações de depuração. Por favor, copie e cole em um issue existente ou nova GitHub. Gerará uma linda tabela que pode ser usada para diagnosticar rapidamente seu problema.', + 'debug_pretty_table' => 'Se você copiar/colar a caixa abaixo em uma issue no GitHub, ela irá gerar uma tabela. Por favor, não coloque este texto entre acentos agudos ou aspas.', + 'debug_additional_data' => 'Você também pode compartilhar o conteúdo da caixa abaixo. Você também pode copiar e colar isso em uma issue nova ou existente do GitHub. No entanto, o conteúdo desta caixa pode conter informações privadas, como nomes de conta, detalhes da transação ou endereços de e-mail.', // object groups - 'object_groups_menu_bar' => 'Grupos', - 'object_groups_page_title' => 'Grupos', - 'object_groups_breadcrumb' => 'Grupos', - 'object_groups_index' => 'Visão geral', - 'object_groups' => 'Grupos', - 'object_groups_empty_explain' => 'Algumas coisas no Firefly III podem ser divididas em grupos. Por exemplo, apresentam um campo "Grupo" na edição e criam telas. Quando definir este campo, você pode editar os nomes e a ordem dos grupos nesta página. Para obter mais informações, confira as páginas de ajuda no canto superior direito, abaixo do ícone (?).', - 'object_group_title' => 'Título', - 'edit_object_group' => 'Editar grupo ":title"', - 'delete_object_group' => 'Excluir grupo ":title"', - 'update_object_group' => 'Atualizar grupo', - 'updated_object_group' => 'O grupo ":title" foi atualizado com sucesso', - 'deleted_object_group' => 'O grupo ":title" foi deletado com sucesso', - 'object_group' => 'Grupo', + 'object_groups_menu_bar' => 'Grupos', + 'object_groups_page_title' => 'Grupos', + 'object_groups_breadcrumb' => 'Grupos', + 'object_groups_index' => 'Visão geral', + 'object_groups' => 'Grupos', + 'object_groups_empty_explain' => 'Algumas coisas no Firefly III podem ser divididas em grupos. Cofrinhos, por exemplo, apresentam um campo "Grupo" nas telas de edição e criação. Quando definir este campo, você pode editar os nomes e a ordem dos grupos nesta página. Para obter mais informações, confira as páginas de ajuda no canto superior direito, abaixo do ícone (?).', + 'object_group_title' => 'Título', + 'edit_object_group' => 'Editar grupo ":title"', + 'delete_object_group' => 'Excluir grupo ":title"', + 'update_object_group' => 'Atualizar grupo', + 'updated_object_group' => 'O grupo ":title" foi atualizado com sucesso', + 'deleted_object_group' => 'O grupo ":title" foi deletado com sucesso', + 'object_group' => 'Grupo', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Entradas do log de auditoria', - 'ale_action_log_add' => 'Adicionado :amount ao cofrinho ":name"', - 'ale_action_log_remove' => 'Retirado :amount do cofrinho ":name"', - 'ale_action_clear_budget' => 'Removido do orçamento', - 'ale_action_update_group_title' => 'Título do grupo de transações atualizado', - 'ale_action_update_date' => 'Data de transação atualizada', - 'ale_action_update_order' => 'Ordem de transação atualizada', - 'ale_action_clear_category' => 'Removido da categoria', - 'ale_action_clear_notes' => 'Anotações removidas', - 'ale_action_clear_tag' => 'Etiquetas apagadas', - 'ale_action_clear_all_tags' => 'Todas as etiquetas foram apagadas', - 'ale_action_set_bill' => 'Ligado à fatura', - 'ale_action_switch_accounts' => 'Conta de origem e destino alternados', - 'ale_action_set_budget' => 'Definir orçamento', - 'ale_action_set_category' => 'Definir categoria', - 'ale_action_set_source' => 'Definir conta de origem', - 'ale_action_set_destination' => 'Definir conta de destino', - 'ale_action_update_transaction_type' => 'Tipo de transação alterado', - 'ale_action_update_notes' => 'Anotações alteradas', - 'ale_action_update_description' => 'Descrição alterada', - 'ale_action_add_to_piggy' => 'Cofrinho', - 'ale_action_remove_from_piggy' => 'Cofrinho', - 'ale_action_add_tag' => 'Etiqueta adicionada', + 'audit_log_entries' => 'Entradas do log de auditoria', + 'ale_action_log_add' => 'Adicionado :amount ao cofrinho ":name"', + 'ale_action_log_remove' => 'Retirado :amount do cofrinho ":name"', + 'ale_action_clear_budget' => 'Removido do orçamento', + 'ale_action_update_group_title' => 'Título do grupo de transações atualizado', + 'ale_action_update_date' => 'Data de transação atualizada', + 'ale_action_update_order' => 'Ordem de transação atualizada', + 'ale_action_clear_category' => 'Removido da categoria', + 'ale_action_clear_notes' => 'Anotações removidas', + 'ale_action_clear_tag' => 'Tags apagadas', + 'ale_action_clear_all_tags' => 'Todas as tags foram apagadas', + 'ale_action_set_bill' => 'Vinculado à fatura', + 'ale_action_switch_accounts' => 'Conta de origem e destino alternados', + 'ale_action_set_budget' => 'Definir orçamento', + 'ale_action_set_category' => 'Definir categoria', + 'ale_action_set_source' => 'Definir conta de origem', + 'ale_action_set_destination' => 'Definir conta de destino', + 'ale_action_update_transaction_type' => 'Tipo de transação alterado', + 'ale_action_update_notes' => 'Anotações alteradas', + 'ale_action_update_description' => 'Descrição alterada', + 'ale_action_add_to_piggy' => 'Cofrinho', + 'ale_action_remove_from_piggy' => 'Cofrinho', + 'ale_action_add_tag' => 'Tag adicionada', // dashboard - 'enable_auto_convert' => 'Habilitar conversão de moeda', - 'disable_auto_convert' => 'Desativar conversão de moeda', - + 'enable_auto_convert' => 'Habilitar conversão de moeda', + 'disable_auto_convert' => 'Desativar conversão de moeda', ]; /* diff --git a/resources/lang/pt_BR/form.php b/resources/lang/pt_BR/form.php index a718ac4072..ec658fcccd 100644 --- a/resources/lang/pt_BR/form.php +++ b/resources/lang/pt_BR/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Nome do banco', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Salda da Poupança', - 'credit_card_limit' => 'Limite do Cartão de Crédito', - 'automatch' => 'Equivale automaticamente', - 'skip' => 'Pular', - 'enabled' => 'Habilitado', - 'name' => 'Nome', - 'active' => 'Ativar', - 'amount_min' => 'Valor Mínimo', - 'amount_max' => 'Valor Máximo', - 'match' => 'Corresponde em', - 'strict' => 'Modo estrito', - 'repeat_freq' => 'Repetições', - 'object_group' => 'Grupo', - 'location' => 'Localização', - 'update_channel' => 'Canal de atualização', - 'currency_id' => 'Moeda', - 'transaction_currency_id' => 'Moeda', - 'auto_budget_currency_id' => 'Moeda', - 'external_ip' => 'O IP externo do seu servidor', - 'attachments' => 'Anexos', - 'BIC' => 'BIC', - 'verify_password' => 'Verificação da segurança da senha', - 'source_account' => 'Conta de origem', - 'destination_account' => 'Conta de destino', - 'asset_destination_account' => 'Conta de destino', - 'include_net_worth' => 'Incluir no patrimonio liquido', - 'asset_source_account' => 'Conta de origem', - 'journal_description' => 'Descrição', - 'note' => 'Notas', - 'currency' => 'Moeda', - 'account_id' => 'Conta de ativo', - 'budget_id' => 'Orçamento', - 'bill_id' => 'Fatura', - 'opening_balance' => 'Saldo inicial', - 'tagMode' => 'Modo de tag', - 'virtual_balance' => 'Saldo virtual', + 'bank_name' => 'Nome do banco', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Saldo da Poupança', + 'credit_card_limit' => 'Limite do Cartão de Crédito', + 'automatch' => 'Equivale automaticamente', + 'skip' => 'Pular', + 'enabled' => 'Habilitado', + 'name' => 'Nome', + 'active' => 'Ativo', + 'amount_min' => 'Valor Mínimo', + 'amount_max' => 'Valor Máximo', + 'match' => 'Corresponde em', + 'strict' => 'Modo estrito', + 'repeat_freq' => 'Repetições', + 'object_group' => 'Grupo', + 'location' => 'Localização', + 'update_channel' => 'Canal de atualização', + 'currency_id' => 'Moeda', + 'transaction_currency_id' => 'Moeda', + 'auto_budget_currency_id' => 'Moeda', + 'external_ip' => 'O IP externo do seu servidor', + 'attachments' => 'Anexos', + 'BIC' => 'BIC', + 'verify_password' => 'Verificação da segurança da senha', + 'source_account' => 'Conta de origem', + 'destination_account' => 'Conta de destino', + 'asset_destination_account' => 'Conta de destino', + 'include_net_worth' => 'Incluir no patrimônio líquido', + 'asset_source_account' => 'Conta de origem', + 'journal_description' => 'Descrição', + 'note' => 'Notas', + 'currency' => 'Moeda', + 'account_id' => 'Conta de ativo', + 'budget_id' => 'Orçamento', + 'bill_id' => 'Fatura', + 'opening_balance' => 'Saldo inicial', + 'tagMode' => 'Modo de tag', + 'virtual_balance' => 'Saldo virtual', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,20 +85,19 @@ return [ * */ - 'targetamount' => 'Valor alvo', - 'account_role' => 'Função de conta', + 'account_role' => 'Tipo de conta', 'opening_balance_date' => 'Data do saldo inicial', 'cc_type' => 'Plano de pagamento do Cartão de Crédito', 'cc_monthly_payment_date' => 'Data do pagamento mensal do Cartão de Crédito', 'piggy_bank_id' => 'Cofrinho', 'returnHere' => 'Retornar aqui', - 'returnHereExplanation' => 'Depois de armazenar, retorne aqui para criar outro.', - 'returnHereUpdateExplanation' => 'Depois da atualização, retorne aqui', + 'returnHereExplanation' => 'Depois de armazenar, retornar aqui para criar outro.', + 'returnHereUpdateExplanation' => 'Depois de atualizar, retornar aqui.', 'description' => 'Descrição', 'expense_account' => 'Conta de Despesa', 'revenue_account' => 'Conta de Receita', - 'decimal_places' => 'Casas décimais', + 'decimal_places' => 'Casas decimais', 'destination_amount' => 'Quantidade (destino)', 'new_email_address' => 'Novo endereço de e-mail', 'verification' => 'Verificação', @@ -111,27 +109,27 @@ return [ 'interest_period' => 'Período de juros', 'extension_date' => 'Data de renovação', 'type' => 'Tipo', - 'convert_Withdrawal' => 'Converter a retirada', - 'convert_Deposit' => 'Converter o depósito', + 'convert_Withdrawal' => 'Converter saída', + 'convert_Deposit' => 'Converter entrada', 'convert_Transfer' => 'Converter a transferência', 'amount' => 'Valor', 'foreign_amount' => 'Montante em moeda estrangeira', 'date' => 'Data', - 'interest_date' => 'Data de interesse', - 'book_date' => 'Data reserva', + 'interest_date' => 'Data do juros', + 'book_date' => 'Data de lançamento', 'process_date' => 'Data de processamento', 'category' => 'Categoria', - 'tags' => 'Etiquetas', + 'tags' => 'Tags', 'deletePermanently' => 'Apagar permanentemente', 'cancel' => 'Cancelar', 'targetdate' => 'Data Alvo', 'startdate' => 'Data de Início', - 'tag' => 'Etiqueta', + 'tag' => 'Tag', 'under' => 'Debaixo', 'symbol' => 'Símbolo', 'code' => 'Código', 'iban' => 'IBAN', - 'account_number' => 'Número de conta', + 'account_number' => 'Número da conta', 'creditCardNumber' => 'Número do cartão de crédito', 'has_headers' => 'Cabeçalhos', 'date_format' => 'Formato da Data', @@ -142,7 +140,7 @@ return [ 'filename' => 'Nome do arquivo', 'mime' => 'Tipo do Arquivo (MIME)', 'size' => 'Tamanho', - 'trigger' => 'Disparo', + 'trigger' => 'Gatilho', 'stop_processing' => 'Parar processamento', 'start_date' => 'Início do intervalo', 'end_date' => 'Final do intervalo', @@ -152,7 +150,7 @@ return [ 'end' => 'Término do intervalo', 'delete_account' => 'Apagar conta ":name"', 'delete_webhook' => 'Excluir webhook ":title"', - 'delete_bill' => 'Apagar fatura ":name"', + 'delete_bill' => 'Apagar conta ":name"', 'delete_budget' => 'Excluir o orçamento ":name"', 'delete_category' => 'Excluir categoria ":name"', 'delete_currency' => 'Excluir moeda ":name"', @@ -164,23 +162,23 @@ return [ 'delete_user' => 'Excluir o usuário ":email"', 'delete_recurring' => 'Apagar transação recorrente ":title"', 'user_areYouSure' => 'Se você excluir o usuário ":email", tudo desaparecerá. Não será possível desfazer a ação. Se excluir você mesmo, você perderá acesso total a essa instância do Firefly III.', - 'attachment_areYouSure' => 'Tem certeza que deseja excluir o anexo denominado ":name"?', - 'account_areYouSure' => 'Tem certeza que deseja excluir a conta denominada ":name"?', + 'attachment_areYouSure' => 'Tem certeza que deseja excluir o anexo ":name"?', + 'account_areYouSure' => 'Tem certeza que deseja excluir a conta ":name"?', 'account_areYouSure_js' => 'Tem certeza que deseja excluir a conta "{name}"?', - 'bill_areYouSure' => 'Você tem certeza que quer apagar a fatura ":name"?', - 'rule_areYouSure' => 'Tem certeza que deseja excluir a regra intitulada ":title"?', - 'object_group_areYouSure' => 'Você tem certeza que deseja excluir a regra intitulada ":title"?', - 'ruleGroup_areYouSure' => 'Tem certeza que deseja excluir o grupo de regras intitulado ":title"?', - 'budget_areYouSure' => 'Tem certeza que deseja excluir o orçamento chamado ":name"?', + 'bill_areYouSure' => 'Você tem certeza que quer apagar a conta ":name"?', + 'rule_areYouSure' => 'Tem certeza que deseja excluir a regra ":title"?', + 'object_group_areYouSure' => 'Você tem certeza que deseja excluir a regra ":title"?', + 'ruleGroup_areYouSure' => 'Tem certeza que deseja excluir o grupo de regras ":title"?', + 'budget_areYouSure' => 'Tem certeza que deseja excluir o orçamento ":name"?', 'webhook_areYouSure' => 'Você tem certeza que quer excluir o webhook ":title"?', - 'category_areYouSure' => 'Tem certeza que deseja excluir a categoria com o nome ":name"?', - 'recurring_areYouSure' => 'Tem certeza que deseja excluir o grupo de regras intitulado ":title"?', - 'currency_areYouSure' => 'Tem certeza que deseja excluir a moeda chamada ":name"?', - 'piggyBank_areYouSure' => 'Tem certeza que deseja excluir o cofrinho chamado ":name"?', - 'journal_areYouSure' => 'Tem certeza que deseja excluir a transação descrita ":description"?', + 'category_areYouSure' => 'Tem certeza que deseja excluir a categoria ":name"?', + 'recurring_areYouSure' => 'Tem certeza que deseja excluir o grupo de regras ":title"?', + 'currency_areYouSure' => 'Tem certeza que deseja excluir a moeda ":name"?', + 'piggyBank_areYouSure' => 'Tem certeza que deseja excluir o cofrinho ":name"?', + 'journal_areYouSure' => 'Tem certeza que deseja excluir a transação ":description"?', 'mass_journal_are_you_sure' => 'Tem a certeza que pretende apagar estas transações?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,22 +189,21 @@ return [ * */ - 'tag_areYouSure' => 'Você tem certeza que quer apagar a tag ":tag"?', 'journal_link_areYouSure' => 'Tem certeza que deseja excluir o vínculo entre :source e :destination?', - 'linkType_areYouSure' => 'Tem certeza que deseja excluir o tipo de link ":name" (":inward" / ":outward")?', + 'linkType_areYouSure' => 'Tem certeza que deseja excluir o tipo de vínculo ":name" (":inward" / ":outward")?', 'permDeleteWarning' => 'Exclusão de dados do Firefly III são permanentes e não podem ser desfeitos.', - 'mass_make_selection' => 'Você ainda pode evitar que itens sejam excluídos, removendo a caixa de seleção.', + 'mass_make_selection' => 'Você ainda pode evitar que itens sejam excluídos, desmarcando a caixa de seleção.', 'delete_all_permanently' => 'Exclua os selecionados permanentemente', 'update_all_journals' => 'Atualizar essas transações', - 'also_delete_transactions' => 'A única transação ligada a essa conta será excluída também.|Todas as :count transações ligadas a esta conta serão excluídas também.', + 'also_delete_transactions' => 'A única transação vinculada a essa conta será excluída também.|Todas as :count transações vinculadas a esta conta serão excluídas também.', 'also_delete_transactions_js' => 'Sem transações|A única transação conectada a esta conta também será excluída.|Todas as {count} transações conectadas a essa conta também serão excluídas.', 'also_delete_connections' => 'A única transação relacionada com este tipo de link vai perder a conexão. | Todas as transações de :count ligadas com este tipo de vínculo vão perder sua conexão.', - 'also_delete_rules' => 'A única regra que ligado a este grupo de regras será excluída também.|Todos as :count regras ligadas a este grupo de regras serão excluídas também.', - 'also_delete_piggyBanks' => 'O único cofrinho conectado a essa conta será excluído também.|Todos os :count cofrinhos conectados a esta conta serão excluídos também.', + 'also_delete_rules' => 'A única regra vinculada a este grupo de regras será excluída também.|Todos as :count regras vinculadas a este grupo de regras serão excluídas também.', + 'also_delete_piggyBanks' => 'O único cofrinho vinculado a essa conta será excluído também.|Todos os :count cofrinhos vinculados a esta conta serão excluídos também.', 'also_delete_piggyBanks_js' => 'Sem cofrinhos|O único cofrinho conectado a esta conta também será excluído.|Todos os {count} cofrinhos conectados a esta conta também serão excluídos.', 'not_delete_piggy_banks' => 'O cofrinho conectado a este grupo não será excluído.|Os :count cofrinhos conectados a este grupo não serão excluídos.', - 'bill_keep_transactions' => 'A única transação conectada a esta conta não será excluída.|Todas as :count transações conectadas a esta conta não serão excluídas.', + 'bill_keep_transactions' => 'A única transação conectada a esta fatura não será excluída.|Todas as :count transações conectadas a esta fatura não serão excluídas.', 'budget_keep_transactions' => 'A única transação conectada a este orçamento não será excluída.|Todas as :count transações conectadas a este orçamento não serão excluídas.', 'category_keep_transactions' => 'A única transação conectada a esta categoria não será excluída.|Todas as :count transações conectadas a esta categoria não serão excluídas.', 'recurring_keep_transactions' => 'A única transação criada por esta transação recorrente não será excluída.|Todas as :count transações criadas por esta transação recorrente não serão excluídas.', @@ -216,7 +213,7 @@ return [ 'delete_object_group' => 'Excluir grupo ":title"', 'email' => 'E-mail', 'password' => 'Senha', - 'password_confirmation' => 'Senha(Confirmar)', + 'password_confirmation' => 'Senha (Confirmar)', 'blocked' => 'Está bloqueado?', 'blocked_code' => 'Razão para o bloqueio', 'login_name' => 'Login', @@ -225,12 +222,11 @@ return [ 'bill_end_date' => 'Data final', // import - 'apply_rules' => 'Aplicar Regras', + 'apply_rules' => 'Aplicar regras', 'artist' => 'Artista', 'album' => 'Álbum', 'song' => 'Música', - // admin 'domain' => 'Domínio', 'single_user_mode' => 'Desabilitar registro de usuários', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Conta no FinTS', 'local_account' => 'Conta no Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Data inicial', - 'to_date' => 'Data final', - 'due_date' => 'Data de vencimento', - 'payment_date' => 'Data de pagamento', - 'invoice_date' => 'Data da Fatura', - 'internal_reference' => 'Referência interna', - 'inward' => 'Descrição interna', - 'outward' => 'Descrição externa', - 'rule_group_id' => 'Grupo de regras', - 'transaction_description' => 'Descrição da transação', - 'first_date' => 'Primeira data', - 'transaction_type' => 'Tipo de transação', - 'repeat_until' => 'Repetir até', - 'recurring_description' => 'Descrição da transação recorrente', - 'repetition_type' => 'Tipo de repetição', - 'foreign_currency_id' => 'Moeda estrangeira', - 'repetition_end' => 'Repetição termina', - 'repetitions' => 'Repetições', - 'calendar' => 'Calendário', - 'weekend' => 'Fim de Semana', - 'client_secret' => 'Chave secreta', - 'withdrawal_destination_id' => 'Conta de destino', - 'deposit_source_id' => 'Conta de origem', - 'expected_on' => 'Esperado em', - 'paid' => 'Pago', - 'auto_budget_type' => 'Orçamento automático', - 'auto_budget_amount' => 'Valor do orçamento automático', - 'auto_budget_period' => 'Período de orçamento automático', - 'collected' => 'Coletado', - 'submitted' => 'Enviado', - 'key' => 'Chave', - 'value' => 'Conteúdo do registro', - 'webhook_delivery' => 'Entrega', - 'webhook_response' => 'Resposta', - 'webhook_trigger' => 'Gatilho', + 'from_date' => 'Data inicial', + 'to_date' => 'Data final', + 'due_date' => 'Data de vencimento', + 'payment_date' => 'Data de pagamento', + 'invoice_date' => 'Data da Fatura', + 'internal_reference' => 'Referência interna', + 'inward' => 'Descrição interna', + 'outward' => 'Descrição externa', + 'rule_group_id' => 'Grupo de regras', + 'transaction_description' => 'Descrição da transação', + 'first_date' => 'Primeira data', + 'transaction_type' => 'Tipo de transação', + 'repeat_until' => 'Repetir até', + 'recurring_description' => 'Descrição da transação recorrente', + 'repetition_type' => 'Tipo de repetição', + 'foreign_currency_id' => 'Moeda estrangeira', + 'repetition_end' => 'Repetição termina', + 'repetitions' => 'Repetições', + 'calendar' => 'Calendário', + 'weekend' => 'Fim de Semana', + 'client_secret' => 'Chave secreta', + 'withdrawal_destination_id' => 'Conta de destino', + 'deposit_source_id' => 'Conta de origem', + 'expected_on' => 'Esperado em', + 'paid' => 'Pago', + 'auto_budget_type' => 'Orçamento automático', + 'auto_budget_amount' => 'Valor do orçamento automático', + 'auto_budget_period' => 'Período de orçamento automático', + 'collected' => 'Coletado', + 'submitted' => 'Enviado', + 'key' => 'Chave', + 'value' => 'Conteúdo do registro', + 'webhook_delivery' => 'Entrega', + 'webhook_response' => 'Resposta', + 'webhook_trigger' => 'Gatilho', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/pt_BR/intro.php b/resources/lang/pt_BR/intro.php index 21d47abf27..a2267cedba 100644 --- a/resources/lang/pt_BR/intro.php +++ b/resources/lang/pt_BR/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Bem-vindo(a) à página inicial do Firefly III. Aproveite e acompanhe esta introdução para ter uma ideia de como funciona.', - 'index_accounts-chart' => 'Este gráfico mostra o saldo atual de suas contas de ativos. Você pode selecionar as contas visíveis aqui nas suas preferências.', - 'index_box_out_holder' => 'Esta pequena caixa e as caixas próximas a esta lhe darão uma rápida visão geral de sua situação financeira.', - 'index_help' => 'Se você precisar de ajuda com uma página ou um formulário, pressione este botão.', - 'index_outro' => 'A maioria das páginas do Firefly III começará com uma pequena turnê como esta. Entre em contato comigo quando tiver dúvidas ou comentários. Aproveite!', - 'index_sidebar-toggle' => 'Para criar novas transações, contas ou outras coisas, use o menu dentro deste ícone.', - 'index_cash_account' => 'Estas são as contas criadas até agora. Você pode usar a conta de caixa para rastrear as despesas de caixa, mas não é obrigatório, claro.', + 'index_intro' => 'Bem-vindo(a) à página inicial do Firefly III. Aproveite e acompanhe esta introdução para ter uma ideia de como funciona.', + 'index_accounts-chart' => 'Este gráfico mostra o saldo atual de suas contas de ativos. Você pode selecionar as contas visíveis aqui nas suas preferências.', + 'index_box_out_holder' => 'Esta pequena caixa e as caixas próximas a esta lhe darão uma rápida visão geral de sua situação financeira.', + 'index_help' => 'Se você precisar de ajuda com uma página ou um formulário, pressione este botão.', + 'index_outro' => 'A maioria das páginas do Firefly III começará com uma pequena turnê como esta. Entre em contato comigo quando tiver dúvidas ou comentários. Aproveite!', + 'index_sidebar-toggle' => 'Para criar novas transações, contas ou outras coisas, use o menu dentro deste ícone.', + 'index_cash_account' => 'Estas são as contas criadas até agora. Você pode usar a conta de caixa para rastrear as despesas de caixa, mas não é obrigatório, claro.', // transactions - 'transactions_create_basic_info' => 'Insira as informações básicas de sua transação. Origem, destino, data e descrição.', - 'transactions_create_amount_info' => 'Insira o valor da transação. Caso necessário, os campos serão atualizados automaticamente para informações de valor estrangeiro.', - 'transactions_create_optional_info' => 'Todos estes campos são opcionais. Adicionar meta-dados aqui fará suas transações melhor organizadas.', - 'transactions_create_split' => 'Caso você queira dividir uma transação, adicione mais divisões com este botão', + 'transactions_create_basic_info' => 'Insira as informações básicas de sua transação. Origem, destino, data e descrição.', + 'transactions_create_amount_info' => 'Insira o valor da transação. Caso necessário, os campos serão atualizados automaticamente para informações de valor estrangeiro.', + 'transactions_create_optional_info' => 'Todos estes campos são opcionais. Adicionar meta-dados aqui fará suas transações melhor organizadas.', + 'transactions_create_split' => 'Caso você queira dividir uma transação, adicione mais divisões com este botão', // create account: - 'accounts_create_iban' => 'Dê a suas contas um IBAN válido. Isso poderá tornar a importação de dados muito fácil no futuro.', - 'accounts_create_asset_opening_balance' => 'As contas de ativos podem ter um "saldo de abertura", indicando o início do histórico desta conta no Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III suporta múltiplas moedas. As contas de ativos têm uma moeda principal, que você deve definir aqui.', - 'accounts_create_asset_virtual' => 'Às vezes, ajuda a dar à sua conta um saldo virtual: um valor extra sempre adicionado ou removido do saldo real.', + 'accounts_create_iban' => 'Dê a suas contas um IBAN válido. Isso poderá tornar a importação de dados muito fácil no futuro.', + 'accounts_create_asset_opening_balance' => 'As contas de ativos podem ter um "saldo de abertura", indicando o início do histórico desta conta no Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III suporta múltiplas moedas. As contas de ativos têm uma moeda principal, que você deve definir aqui.', + 'accounts_create_asset_virtual' => 'Às vezes, ajuda a dar à sua conta um saldo virtual: um valor extra sempre adicionado ou removido do saldo real.', // budgets index - 'budgets_index_intro' => 'Os orçamentos são usados ​​para gerenciar suas finanças e formar uma das principais funções do Firefly III.', - 'budgets_index_set_budget' => 'Defina seu orçamento total para todos os períodos, de modo que o Firefly III possa lhe dizer se você orçou todo o dinheiro disponível.', - 'budgets_index_see_expenses_bar' => 'Gastar dinheiro vai preencher lentamente esta barra.', - 'budgets_index_navigate_periods' => 'Navegue por períodos para definir os orçamentos facilmente antes do tempo.', - 'budgets_index_new_budget' => 'Crie novos orçamentos conforme for entendendo o programa.', - 'budgets_index_list_of_budgets' => 'Use esta tabela para definir os montantes para cada orçamento e veja como você está fazendo.', - 'budgets_index_outro' => 'Para saber mais sobre criar orçamentos, clique no ícone de ajuda no canto superior direito.', + 'budgets_index_intro' => "Os orçamentos são usados \u{200b}\u{200b}para gerenciar suas finanças e formar uma das principais funções do Firefly III.", + 'budgets_index_see_expenses_bar' => 'Gastar dinheiro vai preencher lentamente esta barra.', + 'budgets_index_navigate_periods' => 'Navegue por períodos para definir os orçamentos facilmente antes do tempo.', + 'budgets_index_new_budget' => 'Crie novos orçamentos conforme for entendendo o programa.', + 'budgets_index_list_of_budgets' => 'Use esta tabela para definir os montantes para cada orçamento e veja como você está fazendo.', + 'budgets_index_outro' => 'Para saber mais sobre criar orçamentos, clique no ícone de ajuda no canto superior direito.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Use esses relatórios para obter informações detalhadas sobre suas finanças.', - 'reports_index_inputReportType' => 'Escolha um tipo de relatório. Confira as páginas de ajuda para ver o que cada relatório mostra.', - 'reports_index_inputAccountsSelect' => 'Você pode excluir ou incluir contas de ativos de acordo com a sua demanda.', - 'reports_index_inputDateRange' => 'O intervalo de datas selecionado depende inteiramente de você: de um dia a 10 anos.', - 'reports_index_extra-options-box' => 'Dependendo do relatório que você selecionou, você pode usar filtros e opções adicionais aqui. Observe esta caixa quando você altera os tipos de relatórios.', + 'reports_index_intro' => 'Use esses relatórios para obter informações detalhadas sobre suas finanças.', + 'reports_index_inputReportType' => 'Escolha um tipo de relatório. Confira as páginas de ajuda para ver o que cada relatório mostra.', + 'reports_index_inputAccountsSelect' => 'Você pode excluir ou incluir contas de ativos de acordo com a sua demanda.', + 'reports_index_inputDateRange' => 'O intervalo de datas selecionado depende só de você: de um dia até 10 anos ou mais.', + 'reports_index_extra-options-box' => 'Dependendo do relatório que você selecionou, você pode usar filtros e opções adicionais aqui. Observe esta caixa quando você altera os tipos de relatórios.', // reports (reports) - 'reports_report_default_intro' => 'Este relatório lhe dará uma visão geral rápida e abrangente de suas finanças. Se você deseja ver mais alguma coisa, não hesite em contactar-me!', - 'reports_report_audit_intro' => 'Este relatório fornecerá informações detalhadas sobre suas contas de ativos.', - 'reports_report_audit_optionsBox' => 'Use essas caixas de seleção para mostrar ou ocultar as colunas em que você está interessado.', + 'reports_report_default_intro' => 'Este relatório lhe dará uma visão geral rápida e abrangente de suas finanças. Se você deseja ver mais alguma coisa, não hesite em contactar-me!', + 'reports_report_audit_intro' => 'Este relatório fornecerá informações detalhadas sobre suas contas de ativos.', + 'reports_report_audit_optionsBox' => 'Use essas caixas de seleção para mostrar ou ocultar as colunas em que você está interessado.', - 'reports_report_category_intro' => 'Este relatório lhe dará uma visão em uma ou várias categorias.', - 'reports_report_category_pieCharts' => 'Esses gráficos fornecerão informações sobre despesas e receitas por categoria ou por conta.', - 'reports_report_category_incomeAndExpensesChart' => 'Este gráfico mostra suas despesas e receitas por categoria.', + 'reports_report_category_intro' => 'Este relatório lhe dará uma visão em uma ou várias categorias.', + 'reports_report_category_pieCharts' => 'Esses gráficos fornecerão informações sobre despesas e receitas por categoria ou por conta.', + 'reports_report_category_incomeAndExpensesChart' => 'Este gráfico mostra suas despesas e receitas por categoria.', - 'reports_report_tag_intro' => 'Este relatório lhe dará uma visão de uma ou várias tags.', - 'reports_report_tag_pieCharts' => 'Esses gráficos fornecerão informações sobre despesas e receitas por tag, conta, categoria ou orçamento.', - 'reports_report_tag_incomeAndExpensesChart' => 'Este gráfico mostra suas despesas e receita por tag.', + 'reports_report_tag_intro' => 'Este relatório lhe dará uma visão de uma ou várias tags.', + 'reports_report_tag_pieCharts' => 'Esses gráficos fornecerão informações sobre despesas e receitas por tag, conta, categoria ou orçamento.', + 'reports_report_tag_incomeAndExpensesChart' => 'Este gráfico mostra suas despesas e receita por tag.', 'reports_report_budget_intro' => 'Este relatório lhe dará uma visão em um ou vários orçamentos.', 'reports_report_budget_pieCharts' => 'Esses gráficos fornecerão informações sobre despesas por orçamento ou por conta.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Ao lado desta barra de progresso estão dois botões (+ e -) para adicionar ou remover dinheiro de cada cofrinho.', 'piggy-banks_index_accountStatus' => 'Para cada conta de ativos com pelo menos um cofrinho, o status está listado nesta tabela.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Qual é o teu objetivo? Um novo sofá, uma câmera, dinheiro para emergências?', 'piggy-banks_create_date' => 'Você pode definir uma data-alvo ou um prazo para seu cofrinho.', @@ -136,9 +132,9 @@ return [ 'piggy-banks_show_piggyEvents' => 'Todas as adições ou remoções também estão listadas aqui.', // bill index - 'bills_index_rules' => 'Aqui você visualiza quais regras se aplicam a esta conta', + 'bills_index_rules' => 'Aqui você visualiza quais regras se aplicam a esta fatura', 'bills_index_paid_in_period' => 'Este campo indica quando a fatura foi paga pela última vez.', - 'bills_index_expected_in_period' => 'Este campo indica, para cada conta, se e quando a próxima fatura é esperada para cair em conta.', + 'bills_index_expected_in_period' => 'Este campo indica, para cada conta, se e quando a próxima conta é esperada.', // show bill 'bills_show_billInfo' => 'Esta tabela mostra algumas informações gerais sobre esta fatura.', @@ -146,9 +142,9 @@ return [ 'bills_show_billChart' => 'Este gráfico mostra as transações vinculadas a esta fatura.', // create bill - 'bills_create_intro' => 'Use faturas para acompanhar a quantidade de dinheiro devido por período. Pense em gastos como aluguel, seguro ou pagamentos de hipoteca.', - 'bills_create_name' => 'Use um nome descritivo como "Aluguel" ou "Seguro de saúde".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + 'bills_create_intro' => 'Use as faturas para acompanhar a quantidade de dinheiro devido por período. Pense em gastos como aluguel, seguro ou pagamentos de hipoteca.', + 'bills_create_name' => 'Use um nome descritivo como "Aluguel" ou "Plano de saúde".', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Selecione um valor mínimo e máximo para esta fatura.', 'bills_create_repeat_freq_holder' => 'A maioria das faturas repetem mensalmente, mas você pode definir outra frequência aqui.', 'bills_create_skip_holder' => 'Se uma fatura se repete a cada 2 semanas, o campo "pular" deve ser definido como "1" para a repetição quinzenal.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Use este botão para ver quais transações combinariam com sua regra.', 'rules_create_actions' => 'Defina todas ações que desejar realizar.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Mais opções estão disponíveis atrás dessas abas/guias.', diff --git a/resources/lang/pt_BR/list.php b/resources/lang/pt_BR/list.php index 83e00088fe..329e8099c6 100644 --- a/resources/lang/pt_BR/list.php +++ b/resources/lang/pt_BR/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Botões', - 'icon' => 'Ícone', - 'id' => 'ID', - 'create_date' => 'Criado em', - 'update_date' => 'Atualizado em', - 'updated_at' => 'Atualizado em', - 'balance_before' => 'Saldo Antes', - 'balance_after' => 'Saldo depois', - 'name' => 'Nome', - 'role' => 'Papel', - 'currentBalance' => 'Saldo atual', - 'linked_to_rules' => 'Regras relevantes', - 'active' => 'Está ativo?', - 'percentage' => 'pct.', - 'recurring_transaction' => 'Transação recorrente', - 'next_due' => 'Próximo vencimento', - 'transaction_type' => 'Tipo', - 'lastActivity' => 'Última atividade', - 'balanceDiff' => 'Diferença de saldo', - 'other_meta_data' => 'Outros meta dados', - 'invited_at' => 'Convidado em', - 'expires' => 'O convite expira em', - 'invited_by' => 'Convidado por', - 'invite_link' => 'Link do convite', - 'account_type' => 'Tipo de conta', - 'created_at' => 'Criado em', - 'account' => 'Conta', - 'external_url' => 'URL externa', - 'matchingAmount' => 'Total', - 'destination' => 'Destino', - 'source' => 'Fonte', - 'next_expected_match' => 'Próximo correspondente esperado', - 'automatch' => 'Correspondência automática?', + 'buttons' => 'Botões', + 'icon' => 'Ícone', + 'id' => 'ID', + 'create_date' => 'Criado em', + 'update_date' => 'Atualizado em', + 'updated_at' => 'Atualizado em', + 'balance_before' => 'Saldo Antes', + 'balance_after' => 'Saldo depois', + 'name' => 'Nome', + 'role' => 'Papel', + 'currentBalance' => 'Saldo atual', + 'linked_to_rules' => 'Regras relevantes', + 'active' => 'Está ativo?', + 'percentage' => 'pct.', + 'recurring_transaction' => 'Transação recorrente', + 'next_due' => 'Próximo vencimento', + 'transaction_type' => 'Tipo', + 'lastActivity' => 'Última atividade', + 'balanceDiff' => 'Diferença de saldo', + 'other_meta_data' => 'Outros meta dados', + 'invited_at' => 'Convidado em', + 'expires' => 'O convite expira em', + 'invited_by' => 'Convidado por', + 'invite_link' => 'Link do convite', + 'account_type' => 'Tipo de conta', + 'created_at' => 'Criado em', + 'account' => 'Conta', + 'external_url' => 'URL externa', + 'matchingAmount' => 'Total', + 'destination' => 'Destino', + 'source' => 'Origem', + 'next_expected_match' => 'Próxima correspondência esperada', + 'automatch' => 'Correspondência automática?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,15 +79,14 @@ return [ * */ - 'repeat_freq' => 'Repetições', 'description' => 'Descrição', 'amount' => 'Total', 'date' => 'Data', - 'interest_date' => 'Data de interesse', - 'book_date' => 'Data reserva', + 'interest_date' => 'Data de juros', + 'book_date' => 'Data de lançamento', 'process_date' => 'Data de processamento', - 'due_date' => 'Prazo', + 'due_date' => 'Data de vencimento', 'payment_date' => 'Data de pagamento', 'invoice_date' => 'Data da Fatura', 'internal_reference' => 'Referência interna', @@ -100,25 +98,25 @@ return [ 'category' => 'Categoria', 'bill' => 'Fatura', 'withdrawal' => 'Retirada', - 'deposit' => 'Depósito', + 'deposit' => 'Entrada', 'transfer' => 'Transferência', 'type' => 'Tipo', 'completed' => 'Completo', 'iban' => 'IBAN', 'account_number' => 'Número da conta', - 'paid_current_period' => 'Pago este período', + 'paid_current_period' => 'Pago neste período', 'email' => 'Email', 'registered_at' => 'Registrado em', 'is_blocked' => 'Está bloqueado', 'is_admin' => 'É admin', 'has_two_factor' => 'Tem 2FA', - 'blocked_code' => 'Bloco de código', + 'blocked_code' => 'Código de bloqueio', 'source_account' => 'Conta de origem', 'destination_account' => 'Conta de destino', 'accounts_count' => 'Número de Contas', 'journals_count' => 'Número de transações', 'attachments_count' => 'Número de anexos', - 'bills_count' => 'Número de contas', + 'bills_count' => 'Número de faturas', 'categories_count' => 'Número de categorias', 'budget_count' => 'Número de orçamentos', 'rule_and_groups_count' => 'Número de regras e grupos de regras', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Conta com bunq', 'file_name' => 'Nome do arquivo', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Tamanho do arquivo', - 'file_type' => 'Tipo do arquivo', - 'attached_to' => 'Anexado a', - 'file_exists' => 'Arquivo já existe', - 'spectre_bank' => 'Banco', - 'spectre_last_use' => 'Último login', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'ID de pagamento bunq', - 'repetitions' => 'Repetições', - 'title' => 'Título', - 'transaction_s' => 'Transação(s)', - 'field' => 'Campo', - 'value' => 'Valor', - 'interest' => 'Juros', - 'interest_period' => 'Período de juros', - 'liability_type' => 'Tipo de passivo', - 'liability_direction' => 'Entrada/saída de passivo', - 'end_date' => 'Data final', - 'payment_info' => 'Informação de pagamento', - 'expected_info' => 'Próxima transação esperada', - 'start_date' => 'Data de início', - 'trigger' => 'Gatilho', - 'response' => 'Resposta', - 'delivery' => 'Entrega', - 'url' => 'URL', - 'secret' => 'Chave', - + 'file_size' => 'Tamanho do arquivo', + 'file_type' => 'Tipo do arquivo', + 'attached_to' => 'Anexado a', + 'file_exists' => 'Arquivo já existe', + 'spectre_bank' => 'Banco', + 'spectre_last_use' => 'Último login', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'ID de pagamento bunq', + 'repetitions' => 'Repetições', + 'title' => 'Título', + 'transaction_s' => 'Transação(s)', + 'field' => 'Campo', + 'value' => 'Valor', + 'interest' => 'Juros', + 'interest_period' => 'Período de juros', + 'liability_type' => 'Tipo de passivo', + 'liability_direction' => 'Entrada/saída de passivo', + 'end_date' => 'Data final', + 'payment_info' => 'Informação de pagamento', + 'expected_info' => 'Próxima transação esperada', + 'start_date' => 'Data de início', + 'trigger' => 'Gatilho', + 'response' => 'Resposta', + 'delivery' => 'Entrega', + 'url' => 'URL', + 'secret' => 'Chave', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/pt_BR/pagination.php b/resources/lang/pt_BR/pagination.php index ca675ef431..814b768d00 100644 --- a/resources/lang/pt_BR/pagination.php +++ b/resources/lang/pt_BR/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/pt_BR/passwords.php b/resources/lang/pt_BR/passwords.php index 7b19b10944..56915be68f 100644 --- a/resources/lang/pt_BR/passwords.php +++ b/resources/lang/pt_BR/passwords.php @@ -31,12 +31,11 @@ * */ - declare(strict_types=1); return [ 'password' => 'A senha precisa ter no mínimo seis caracteres e tem que ser igual à confirmação de senha.', - 'user' => 'Não foi possível encontrar o usuário com este e-mail.', + 'user' => 'Não foi possível encontrar um usuário com este e-mail.', 'token' => 'Este token de redefinição de senha é inválido.', 'sent' => 'Nós te enviamos um email com um link para trocar a senha!', 'reset' => 'Sua senha foi redefinida!', diff --git a/resources/lang/pt_BR/rules.php b/resources/lang/pt_BR/rules.php index d5ab6430a0..aaaf65d476 100644 --- a/resources/lang/pt_BR/rules.php +++ b/resources/lang/pt_BR/rules.php @@ -1,6 +1,5 @@ 'O Firefly III não pode encontrar a assinatura ":name"', 'no_notes_to_move' => 'A transação não tem notas para mover para o campo descrição', 'no_tags_to_remove' => 'A transação não tem tags para remover', + 'not_withdrawal' => 'A transação não é uma retirada', + 'not_deposit' => 'A transação não é um depósito', 'cannot_find_tag' => 'O Firefly III não pode encontrar a tag ":tag"', 'cannot_find_asset' => 'O Firefly III não pode encontrar a conta de ativos ":name"', 'cannot_find_accounts' => 'O Firefly III não pode encontrar a conta destino ou origem', @@ -63,7 +64,7 @@ return [ 'cannot_find_destination_transaction' => 'O Firefly III não pode encontrar a transação destino', 'cannot_find_source_transaction_account' => 'O Firefly III não pode encontrar a conta origem da transação', 'cannot_find_destination_transaction_account' => 'O Firefly III não pode encontrar a conta destino da transação', - 'cannot_find_piggy' => 'O Firefly III não pode encontrar um cofrinho chamdo ":name"', + 'cannot_find_piggy' => 'O Firefly III não pode encontrar um cofrinho chamado ":name"', 'no_link_piggy' => 'As contas da transação não estão vinculada ao cofrinho, então nenhuma ação será tomada', 'cannot_unlink_tag' => 'A tag ":tag" não está vinculada a esta transação', 'cannot_find_budget' => 'O Firefly III não pode encontrar o orçamento ":name"', diff --git a/resources/lang/pt_BR/validation.php b/resources/lang/pt_BR/validation.php index 01a87e34e8..e7a337c2fe 100644 --- a/resources/lang/pt_BR/validation.php +++ b/resources/lang/pt_BR/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'O array está sem a cláusula "where"', - 'missing_update' => 'O array está sem a cláusula "update"', - 'invalid_where_key' => 'O JSON contém uma chave inválida para a cláusula "where"', - 'invalid_update_key' => 'O JSON contém uma chave inválida para a cláusula "update"', - 'invalid_query_data' => 'Há dados inválidos no campo %s:%s da sua consulta.', - 'invalid_query_account_type' => 'Sua consulta contém contas de diferentes tipos, o que não é permitido.', - 'invalid_query_currency' => 'Sua consulta contém contas que têm diferentes configurações de moeda, o que não é permitido.', - 'iban' => 'Este não é um válido IBAN.', - 'zero_or_more' => 'O valor não pode ser negativo.', - 'date_or_time' => 'O valor deve ser uma data válida (ISO 8601).', - 'source_equals_destination' => 'A conta de origem é igual à conta de destino.', - 'unique_account_number_for_user' => 'Parece que este número de conta já está em uso.', - 'unique_iban_for_user' => 'Parece que este IBAN já está em uso.', - 'deleted_user' => 'Devido a restrições de segurança, você não pode registrar usando este endereço de e-mail.', - 'rule_trigger_value' => 'Este valor é inválido para o disparo selecionado.', - 'rule_action_value' => 'Este valor é inválido para a ação selecionada.', - 'file_already_attached' => 'Arquivo ":name" carregado já está anexado para este objeto.', - 'file_attached' => 'Arquivo carregado com sucesso ":name".', - 'must_exist' => 'O ID no campo :attribute não existe no banco de dados.', - 'all_accounts_equal' => 'Todas as contas neste campo devem ser iguais.', - 'group_title_mandatory' => 'Um título de grupo é obrigatório quando existe mais de uma transação.', - 'transaction_types_equal' => 'Todas as divisões devem ser do mesmo tipo.', - 'invalid_transaction_type' => 'Tipo de transação inválido.', - 'invalid_selection' => 'Sua seleção é inválida.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Precisa de ao menos uma transação.', - 'recurring_transaction_id' => 'Precisa de ao menos uma transação.', - 'need_id_to_match' => 'Você precisa enviar esta entrada com um ID para a API poder identificá-la.', - 'too_many_unmatched' => 'Muitas transações submetidas não podem ser correspondidas a suas respectivas entradas de banco de dados. Certifique-se de que as entradas existentes possuem um ID válido.', - 'id_does_not_match' => 'O ID #:id enviado não corresponde ao ID esperado. Certifique-se de que corresponda ou omita o campo.', - 'at_least_one_repetition' => 'Precisa de ao menos uma repetição.', - 'require_repeat_until' => 'É necessário ou um número de repetições ou uma data de término (repetir até). Não ambos.', - 'require_currency_info' => 'O conteúdo deste campo é inválido sem informações de moeda.', - 'not_transfer_account' => 'Esta não é uma conta que possa ser usada para transferências.', - 'require_currency_amount' => 'O conteúdo deste campo é inválido sem a informação de moeda estrangeira.', - 'require_foreign_currency' => 'Este campo deve ser um número', - 'require_foreign_dest' => 'Este valor de campo deve corresponder à moeda da conta de destino.', - 'require_foreign_src' => 'Este valor de campo deve corresponder à moeda da conta de origem.', - 'equal_description' => 'A descrição da transação não pode ser igual à descrição global.', - 'file_invalid_mime' => 'Arquivo ":name" é do tipo ":mime" que não é aceito como um novo upload.', - 'file_too_large' => 'Arquivo ":name" é muito grande.', - 'belongs_to_user' => 'O valor de :attribute é desconhecido.', - 'accepted' => 'O campo :attribute deve ser aceito.', - 'bic' => 'Este não é um BIC válido.', - 'at_least_one_trigger' => 'A regra deve ter pelo menos um gatilho.', - 'at_least_one_active_trigger' => 'A regra deve ter pelo menos um acionador ativo.', - 'at_least_one_action' => 'A regra deve ter pelo menos uma ação.', - 'at_least_one_active_action' => 'A regra deve ter pelo menos uma ação ativa.', - 'base64' => 'Isto não é válido na codificação de dados base64.', - 'model_id_invalid' => 'A identificação especificada parece inválida para este modelo.', - 'less' => ':attribute deve ser menor do que 10.000.000', - 'active_url' => 'O campo :attribute não contém um URL válido.', - 'after' => 'O campo :attribute deverá conter uma data posterior a :date.', - 'date_after' => 'A data de início deve ser anterior à data de término.', - 'alpha' => 'O campo :attribute deverá conter apenas letras.', - 'alpha_dash' => 'O campo :attribute deverá conter apenas letras, números e traços.', - 'alpha_num' => 'O campo :attribute deverá conter apenas letras e números .', - 'array' => 'O campo :attribute precisa ser um conjunto.', - 'unique_for_user' => 'Já existe uma entrada com este :attribute.', - 'before' => 'O campo :attribute deverá conter uma data anterior a :date.', - 'unique_object_for_user' => 'Este nome já esta em uso.', - 'unique_account_for_user' => 'Este nome de conta já está sendo usado.', + 'bad_type_source' => 'Firefly III não conseguiu determinar o tipo de transação baseado nesta conta de origem.', + 'bad_type_destination' => 'Firefly III não conseguiu determinar o tipo de transação baseado nesta conta destino.', + 'missing_where' => 'O array está sem a cláusula "where"', + 'missing_update' => 'O array está sem a cláusula "update"', + 'invalid_where_key' => 'O JSON contém uma chave inválida para a cláusula "where"', + 'invalid_update_key' => 'O JSON contém uma chave inválida para a cláusula "update"', + 'invalid_query_data' => 'Há dados inválidos no campo %s:%s da sua consulta.', + 'invalid_query_account_type' => 'Sua consulta contém contas de diferentes tipos, o que não é permitido.', + 'invalid_query_currency' => 'Sua consulta contém contas que têm diferentes configurações de moeda, o que não é permitido.', + 'iban' => 'Este não é um válido IBAN.', + 'zero_or_more' => 'O valor não pode ser negativo.', + 'more_than_zero' => 'O valor precisa ser maior do que zero.', + 'more_than_zero_correct' => 'O valor precisa ser zero ou mais.', + 'no_asset_account' => 'Esta não é uma conta de ativo.', + 'date_or_time' => 'O valor deve ser uma data válida (ISO 8601).', + 'source_equals_destination' => 'A conta de origem é igual à conta de destino.', + 'unique_account_number_for_user' => 'Parece que este número de conta já está em uso.', + 'unique_iban_for_user' => 'Parece que este IBAN já está em uso.', + 'reconciled_forbidden_field' => 'Esta transação já está reconciliada, você não pode mudar o campo ":field"', + 'deleted_user' => 'Devido a restrições de segurança, você não pode se registrar usando este endereço de e-mail.', + 'rule_trigger_value' => 'Este valor é inválido para o disparo selecionado.', + 'rule_action_value' => 'Este valor é inválido para a ação selecionada.', + 'file_already_attached' => 'Arquivo ":name" carregado já está anexado para este objeto.', + 'file_attached' => 'Arquivo carregado com sucesso ":name".', + 'must_exist' => 'O ID no campo :attribute não existe no banco de dados.', + 'all_accounts_equal' => 'Todas as contas neste campo devem ser iguais.', + 'group_title_mandatory' => 'Um título de grupo é obrigatório quando existe mais de uma transação.', + 'transaction_types_equal' => 'Todas as divisões devem ser do mesmo tipo.', + 'invalid_transaction_type' => 'Tipo de transação inválido.', + 'invalid_selection' => 'Sua seleção é inválida.', + 'belongs_user' => 'Este valor está vinculado a um objeto que aparentemente não existe.', + 'belongs_user_or_user_group' => 'Este valor está ligado a um objeto que aparentemente não existe na sua administração financeira atual.', + 'at_least_one_transaction' => 'Precisa de ao menos uma transação.', + 'recurring_transaction_id' => 'Precisa de ao menos uma transação.', + 'need_id_to_match' => 'Você precisa enviar esta entrada com um ID para a API poder identificá-la.', + 'too_many_unmatched' => 'Muitas transações submetidas não podem ser correspondidas a suas respectivas entradas de banco de dados. Certifique-se de que as entradas existentes possuem um ID válido.', + 'id_does_not_match' => 'O ID #:id enviado não corresponde ao ID esperado. Certifique-se de que corresponda ou omita o campo.', + 'at_least_one_repetition' => 'Precisa de ao menos uma repetição.', + 'require_repeat_until' => 'É necessário ou um número de repetições ou uma data de término (repetir até). Não ambos.', + 'require_currency_info' => 'O conteúdo deste campo é inválido sem informações de moeda.', + 'not_transfer_account' => 'Esta não é uma conta que possa ser usada para transferências.', + 'require_currency_amount' => 'O conteúdo deste campo é inválido sem a informação de moeda estrangeira.', + 'require_foreign_currency' => 'Este campo deve ser um número', + 'require_foreign_dest' => 'Este valor de campo deve corresponder à moeda da conta de destino.', + 'require_foreign_src' => 'Este valor de campo deve corresponder à moeda da conta de origem.', + 'equal_description' => 'A descrição da transação não pode ser igual à descrição global.', + 'file_invalid_mime' => 'Arquivo ":name" é do tipo ":mime" que não é aceito como um novo upload.', + 'file_too_large' => 'Arquivo ":name" é muito grande.', + 'belongs_to_user' => 'O valor de :attribute é desconhecido.', + 'accepted' => 'O campo :attribute deve ser aceito.', + 'bic' => 'Este não é um BIC válido.', + 'at_least_one_trigger' => 'A regra deve ter pelo menos um gatilho.', + 'at_least_one_active_trigger' => 'A regra deve ter pelo menos um acionador ativo.', + 'at_least_one_action' => 'A regra deve ter pelo menos uma ação.', + 'at_least_one_active_action' => 'A regra deve ter pelo menos uma ação ativa.', + 'base64' => 'Isto não é válido na codificação de dados base64.', + 'model_id_invalid' => 'A identificação especificada parece inválida para este modelo.', + 'less' => ':attribute deve ser menor do que 10.000.000', + 'active_url' => 'O campo :attribute não contém um URL válido.', + 'after' => 'O campo :attribute deverá conter uma data posterior a :date.', + 'date_after' => 'A data de início deve ser anterior à data de término.', + 'alpha' => 'O campo :attribute deverá conter apenas letras.', + 'alpha_dash' => 'O campo :attribute deverá conter apenas letras, números e traços.', + 'alpha_num' => 'O campo :attribute deverá conter apenas letras e números .', + 'array' => 'O campo :attribute precisa ser um conjunto.', + 'unique_for_user' => 'Já existe uma entrada com este :attribute.', + 'before' => 'O campo :attribute deverá conter uma data anterior a :date.', + 'unique_object_for_user' => 'Este nome já esta em uso.', + 'unique_account_for_user' => 'Este nome de conta já está sendo usado.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => 'O campo :attribute deverá ter um valor entre :min - :max.', + 'between.file' => 'O campo :attribute deverá ter um tamanho entre :min - :max kilobytes.', + 'between.string' => 'O campo :attribute deverá conter entre :min - :max caracteres.', + 'between.array' => 'O campo :attribute precisar ter entre :min - :max itens.', + 'boolean' => 'O campo :attribute deverá ter o valor verdadeiro ou falso.', + 'confirmed' => 'A confirmação para o campo :attribute não coincide.', + 'date' => 'O campo :attribute não contém uma data válida.', + 'date_format' => 'A data indicada para o campo :attribute não respeita o formato :format.', + 'different' => 'Os campos :attribute e :other deverão conter valores diferentes.', + 'digits' => 'O campo :attribute deverá conter :digits dígitos.', + 'digits_between' => 'O campo :attribute deverá conter entre :min a :max dígitos.', + 'email' => 'O campo :attribute não contém um endereço de email válido.', + 'filled' => 'O campo :attribute é obrigatório.', + 'exists' => 'O valor selecionado para o campo :attribute é inválido.', + 'image' => 'O campo :attribute deverá conter uma imagem.', + 'in' => 'O campo :attribute não contém um valor válido.', + 'integer' => 'O campo :attribute deverá conter um número inteiro.', + 'ip' => 'O campo :attribute deverá conter um IP válido.', + 'json' => 'O campo :attribute deverá conter uma string JSON válida.', + 'max.numeric' => 'O campo :attribute não deverá conter um valor superior a :max.', + 'max.file' => 'O campo :attribute não deverá ter um tamanho superior a :max kilobytes.', + 'max.string' => 'O campo :attribute não deverá conter mais de :max caracteres.', + 'max.array' => 'O campo :attribute deve ter no máximo :max itens.', + 'mimes' => 'O campo :attribute deverá conter um arquivo do tipo: :values.', + 'min.numeric' => 'O campo :attribute deverá ter um valor superior ou igual a :min.', + 'lte.numeric' => 'O :attribute deve ser menor ou igual a :value.', + 'min.file' => 'O campo :attribute deverá ter no mínimo :min kilobytes.', + 'min.string' => 'O campo :attribute deverá conter no mínimo :min caracteres.', + 'min.array' => 'O campo :attribute deve ter no mínimo :min itens.', + 'not_in' => 'O campo :attribute contém um valor inválido.', + 'numeric' => 'O campo :attribute deverá conter um valor numérico.', + 'scientific_notation' => 'O atributo :attribute não pode usar a notação científica.', + 'numeric_native' => 'O montante nativo deve ser um número.', + 'numeric_destination' => 'O montante de destino deve ser um número.', + 'numeric_source' => 'O montante original deve ser um número.', + 'regex' => 'O formato do valor para o campo :attribute é inválido.', + 'required' => 'O campo :attribute é obrigatório.', + 'required_if' => 'O campo :attribute é obrigatório quando o valor do campo :other é igual a :value.', + 'required_unless' => 'O campo :attribute é obrigatório a menos que :other esteja presente em :values.', + 'required_with' => 'O campo :attribute é obrigatório quando :values está presente.', + 'required_with_all' => 'O campo :attribute é obrigatório quando um dos :values está presente.', + 'required_without' => 'O campo :attribute é obrigatório quanto :values não está presente.', + 'required_without_all' => 'O campo :attribute é obrigatório quando nenhum dos :values está presente.', + 'same' => 'Os campos :attribute e :other deverão conter valores iguais.', + 'size.numeric' => 'O campo :attribute deverá conter o valor :size.', + 'amount_min_over_max' => 'O valor mínimo não pode ser maior do que o valor máximo.', + 'size.file' => 'O campo :attribute deverá ter o tamanho de :size kilobytes.', + 'size.string' => 'O campo :attribute deverá conter :size caracteres.', + 'size.array' => 'O campo :attribute deve ter :size itens.', + 'unique' => 'O valor indicado para o campo :attribute já se encontra utilizado.', + 'string' => 'O campo :attribute deve ser uma string.', + 'url' => 'O formato do URL indicado para o campo :attribute é inválido.', + 'timezone' => 'O campo :attribute deverá ter um fuso horário válido.', + '2fa_code' => 'O campo :attribute é inválido.', + 'dimensions' => 'O campo :attribute tem dimensões de imagem inválido.', + 'distinct' => 'O campo :attribute tem um valor duplicado.', + 'file' => 'O :attribute deve ser um arquivo.', + 'in_array' => 'O campo :attribute não existe em :other.', + 'present' => 'O campo :attribute deve estar presente.', + 'amount_zero' => 'O montante total não pode ser zero.', + 'current_target_amount' => 'O valor atual deve ser menor do que o valor pretendido.', + 'unique_piggy_bank_for_user' => 'O nome do cofrinho deve ser único.', + 'unique_object_group' => 'O nome do grupo deve ser único', + 'starts_with' => 'O valor deve começar com :values.', + 'unique_webhook' => 'Você já tem um webhook com esta combinação de URL, gatilho, resposta e entrega.', + 'unique_existing_webhook' => 'Você já tem outro webhook com esta combinação de URL, gatilho, resposta e entrega.', + 'same_account_type' => 'Ambas as contas devem ser do mesmo tipo', + 'same_account_currency' => 'Ambas as contas devem ter a mesma configuração de moeda', - 'between.numeric' => 'O campo :attribute deverá ter um valor entre :min - :max.', - 'between.file' => 'O campo :attribute deverá ter um tamanho entre :min - :max kilobytes.', - 'between.string' => 'O campo :attribute deverá conter entre :min - :max caracteres.', - 'between.array' => 'O campo :attribute precisar ter entre :min - :max itens.', - 'boolean' => 'O campo :attribute deverá ter o valor verdadeiro ou falso.', - 'confirmed' => 'A confirmação para o campo :attribute não coincide.', - 'date' => 'O campo :attribute não contém uma data válida.', - 'date_format' => 'A data indicada para o campo :attribute não respeita o formato :format.', - 'different' => 'Os campos :attribute e :other deverão conter valores diferentes.', - 'digits' => 'O campo :attribute deverá conter :digits dígitos.', - 'digits_between' => 'O campo :attribute deverá conter entre :min a :max dígitos.', - 'email' => 'O campo :attribute não contém um endereço de email válido.', - 'filled' => 'O campo :attribute é obrigatório.', - 'exists' => 'O valor selecionado para o campo :attribute é inválido.', - 'image' => 'O campo :attribute deverá conter uma imagem.', - 'in' => 'O campo :attribute não contém um valor válido.', - 'integer' => 'O campo :attribute deverá conter um número inteiro.', - 'ip' => 'O campo :attribute deverá conter um IP válido.', - 'json' => 'O campo :attribute deverá conter uma string JSON válida.', - 'max.numeric' => 'O campo :attribute não deverá conter um valor superior a :max.', - 'max.file' => 'O campo :attribute não deverá ter um tamanho superior a :max kilobytes.', - 'max.string' => 'O campo :attribute não deverá conter mais de :max caracteres.', - 'max.array' => 'O campo :attribute deve ter no máximo :max itens.', - 'mimes' => 'O campo :attribute deverá conter um arquivo do tipo: :values.', - 'min.numeric' => 'O campo :attribute deverá ter um valor superior ou igual a :min.', - 'lte.numeric' => 'O :attribute deve ser menor ou igual a :value.', - 'min.file' => 'O campo :attribute deverá ter no mínimo :min kilobytes.', - 'min.string' => 'O campo :attribute deverá conter no mínimo :min caracteres.', - 'min.array' => 'O campo :attribute deve ter no mínimo :min itens.', - 'not_in' => 'O campo :attribute contém um valor inválido.', - 'numeric' => 'O campo :attribute deverá conter um valor numérico.', - 'numeric_native' => 'O montante nativo deve ser um número.', - 'numeric_destination' => 'O montante de destino deve ser um número.', - 'numeric_source' => 'O montante original deve ser um número.', - 'regex' => 'O formato do valor para o campo :attribute é inválido.', - 'required' => 'O campo :attribute é obrigatório.', - 'required_if' => 'O campo :attribute é obrigatório quando o valor do campo :other é igual a :value.', - 'required_unless' => 'O campo :attribute é obrigatório a menos que :other esteja presente em :values.', - 'required_with' => 'O campo :attribute é obrigatório quando :values está presente.', - 'required_with_all' => 'O campo :attribute é obrigatório quando um dos :values está presente.', - 'required_without' => 'O campo :attribute é obrigatório quanto :values não está presente.', - 'required_without_all' => 'O campo :attribute é obrigatório quando nenhum dos :values está presente.', - 'same' => 'Os campos :attribute e :other deverão conter valores iguais.', - 'size.numeric' => 'O campo :attribute deverá conter o valor :size.', - 'amount_min_over_max' => 'O valor mínimo não pode ser maior do que o valor máximo.', - 'size.file' => 'O campo :attribute deverá ter o tamanho de :size kilobytes.', - 'size.string' => 'O campo :attribute deverá conter :size caracteres.', - 'size.array' => 'O campo :attribute deve ter :size itens.', - 'unique' => 'O valor indicado para o campo :attribute já se encontra utilizado.', - 'string' => 'O campo :attribute deve ser uma string.', - 'url' => 'O formato do URL indicado para o campo :attribute é inválido.', - 'timezone' => 'O campo :attribute deverá ter um fuso horário válido.', - '2fa_code' => 'O campo :attribute é inválido.', - 'dimensions' => 'O campo :attribute tem dimensões de imagem inválido.', - 'distinct' => 'O campo :attribute tem um valor duplicado.', - 'file' => 'O :attribute deve ser um arquivo.', - 'in_array' => 'O campo :attribute não existe em :other.', - 'present' => 'O campo :attribute deve estar presente.', - 'amount_zero' => 'O montante total não pode ser zero.', - 'current_target_amount' => 'O valor atual deve ser menor do que o valor pretendido.', - 'unique_piggy_bank_for_user' => 'O nome do cofrinho deve ser único.', - 'unique_object_group' => 'O nome do grupo deve ser único', - 'starts_with' => 'O valor deve começar com :values.', - 'unique_webhook' => 'Você já tem um webhook com esta combinação de URL, gatilho, resposta e entrega.', - 'unique_existing_webhook' => 'Você já tem outro webhook com esta combinação de URL, gatilho, resposta e entrega.', - 'same_account_type' => 'Ambas as contas devem ser do mesmo tipo', - 'same_account_currency' => 'Ambas as contas devem ter a mesma configuração de moeda', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Esta não é uma senha segura. Por favor, tente novamente. Para mais informações, visite https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Tipo de repetição inválido para transações recorrentes.', - 'valid_recurrence_rep_moment' => 'Momento de repetição inválido para esse tipo de repetição.', - 'invalid_account_info' => 'Informação de conta inválida.', - 'attributes' => [ + 'secure_password' => 'Esta não é uma senha segura. Por favor, tente novamente. Para mais informações, visite https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Tipo de repetição inválido para transações recorrentes.', + 'valid_recurrence_rep_moment' => 'Momento de repetição inválido para esse tipo de repetição.', + 'invalid_account_info' => 'Informação de conta inválida.', + 'attributes' => [ 'email' => 'endereço de e-mail', 'description' => 'descrição', 'amount' => 'valor', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'É necessário obter um ID de uma conta de origem válida e/ou um nome de conta de origem válido para continuar.', - 'withdrawal_source_bad_data' => '[a] Não foi possível encontrar uma conta de origem válida ao procurar por ID ":id" ou nome ":name".', - 'withdrawal_dest_need_data' => '[a] É necessário obter um ID de conta de destino válido e/ou um nome de conta de destino válido para continuar.', - 'withdrawal_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar por ID ":id" ou nome ":name".', + 'withdrawal_source_need_data' => 'É necessário obter um ID de uma conta de origem válida e/ou um nome de conta de origem válido para continuar.', + 'withdrawal_source_bad_data' => '[a] Não foi possível encontrar uma conta de origem válida ao procurar por ID ":id" ou nome ":name".', + 'withdrawal_dest_need_data' => '[a] É necessário obter um ID de conta de destino válido e/ou um nome de conta de destino válido para continuar.', + 'withdrawal_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar por ID ":id" ou nome ":name".', - 'withdrawal_dest_iban_exists' => 'Este IBAN de conta de destino já está em uso por outra conta de ativos ou uma responsabilidade e não pode ser usada como um destino de retirada.', - 'deposit_src_iban_exists' => 'Este IBAN de conta de origem já está em uso por outra conta de ativos ou uma responsabilidade e não pode ser usada como uma fonte de depósito.', + 'withdrawal_dest_iban_exists' => 'Este IBAN de conta de destino já está em uso por outra conta de ativos ou uma responsabilidade e não pode ser usada como um destino de retirada.', + 'deposit_src_iban_exists' => 'Este IBAN de conta de origem já está em uso por outra conta de ativos ou uma responsabilidade e não pode ser usada como uma fonte de depósito.', - 'reconciliation_source_bad_data' => 'Não foi possível encontrar uma conta de reconciliação válida ao pesquisar por ID ":id" ou nome ":name".', + 'reconciliation_source_bad_data' => 'Não foi possível encontrar uma conta de reconciliação válida ao pesquisar por ID ":id" ou nome ":name".', - 'generic_source_bad_data' => '[e] Não foi possível encontrar uma conta de origem válida ao procurar por ID ":id" ou nome ":name".', + 'generic_source_bad_data' => '[e] Não foi possível encontrar uma conta de origem válida ao procurar por ID ":id" ou nome ":name".', - 'deposit_source_need_data' => 'É necessário obter um ID de uma conta de origem válida e/ou um nome de conta de origem válido para continuar.', - 'deposit_source_bad_data' => '[b] Não foi possível encontrar uma conta de origem válida ao procurar por ID ":id" ou nome ":name".', - 'deposit_dest_need_data' => '[b] É necessário obter um ID de conta de destino válido e/ou um nome de conta de destino válido para continuar.', - 'deposit_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar por ID ":id" ou nome ":name".', - 'deposit_dest_wrong_type' => 'A conta de destino enviada não é do tipo certo.', + 'deposit_source_need_data' => 'É necessário obter um ID de uma conta de origem válida e/ou um nome de conta de origem válido para continuar.', + 'deposit_source_bad_data' => '[b] Não foi possível encontrar uma conta de origem válida ao procurar por ID ":id" ou nome ":name".', + 'deposit_dest_need_data' => '[b] É necessário obter um ID de conta de destino válido e/ou um nome de conta de destino válido para continuar.', + 'deposit_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar por ID ":id" ou nome ":name".', + 'deposit_dest_wrong_type' => 'A conta de destino enviada não é do tipo certo.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'É necessário obter um ID de uma conta de origem válida e/ou um nome de conta de origem válido para continuar.', + 'transfer_source_bad_data' => '[c] Não foi possível encontrar uma conta de origem válida ao procurar por ID ":id" ou nome ":name".', + 'transfer_dest_need_data' => '[c] É necessário obter um ID de conta de destino válido e/ou um nome de conta de destino válido para continuar.', + 'transfer_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar por ID ":id" ou nome ":name".', + 'need_id_in_edit' => 'Cada divisão deve ter transaction_journal_id (ID válido ou 0).', - 'transfer_source_need_data' => 'É necessário obter um ID de uma conta de origem válida e/ou um nome de conta de origem válido para continuar.', - 'transfer_source_bad_data' => '[c] Não foi possível encontrar uma conta de origem válida ao procurar por ID ":id" ou nome ":name".', - 'transfer_dest_need_data' => '[c] É necessário obter um ID de conta de destino válido e/ou um nome de conta de destino válido para continuar.', - 'transfer_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar por ID ":id" ou nome ":name".', - 'need_id_in_edit' => 'Cada divisão deve ter transaction_journal_id (ID válido ou 0).', + 'ob_source_need_data' => 'É necessário obter um ID de uma conta de origem válida e/ou um nome de conta de origem válido para continuar.', + 'lc_source_need_data' => 'É necessário obter um ID de uma conta de origem válida para continuar.', + 'ob_dest_need_data' => '[d] É necessário obter um ID de conta de destino válido e/ou um nome de conta de destino válido para continuar.', + 'ob_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar por ID ":id" ou nome ":name".', + 'reconciliation_either_account' => 'Para enviar uma reconciliação, você deve enviar uma conta de origem ou de destino. Não ambos, nem nenhum.', - 'ob_source_need_data' => 'É necessário obter um ID de uma conta de origem válida e/ou um nome de conta de origem válido para continuar.', - 'lc_source_need_data' => 'É necessário obter um ID de uma conta de origem válida para continuar.', - 'ob_dest_need_data' => '[d] É necessário obter um ID de conta de destino válido e/ou um nome de conta de destino válido para continuar.', - 'ob_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar por ID ":id" ou nome ":name".', - 'reconciliation_either_account' => 'Para enviar uma reconciliação, você deve enviar uma conta de origem ou de destino. Não ambos, nem nenhum.', + 'generic_invalid_source' => 'Você não pode usar esta conta como conta de origem.', + 'generic_invalid_destination' => 'Você não pode usar esta conta como conta de destino.', - 'generic_invalid_source' => 'Você não pode usar esta conta como conta de origem.', - 'generic_invalid_destination' => 'Você não pode usar esta conta como conta de destino.', + 'generic_no_source' => 'Você deve enviar as informações da conta de origem ou enviar um ID do diário de transação.', + 'generic_no_destination' => 'Você deve enviar as informações da conta de destino ou enviar um ID do diário de transação.', - 'generic_no_source' => 'Você deve enviar as informações da conta de origem ou enviar um ID do diário de transação.', - 'generic_no_destination' => 'Você deve enviar as informações da conta de destino ou enviar um ID do diário de transação.', - - 'gte.numeric' => ':attribute deve ser maior ou igual a :value.', - 'gt.numeric' => 'O campo :attribute deve ser maior que :value.', - 'gte.file' => 'O campo :attribute deve ser maior ou igual a :value kilobytes.', - 'gte.string' => 'O campo :attribute deve ser maior ou igual a :value caracteres.', - 'gte.array' => 'O campo :attribute deve ter :value itens ou mais.', + 'gte.numeric' => ':attribute deve ser maior ou igual a :value.', + 'gt.numeric' => 'O campo :attribute deve ser maior que :value.', + 'gte.file' => 'O campo :attribute deve ser maior ou igual a :value kilobytes.', + 'gte.string' => 'O campo :attribute deve ser maior ou igual a :value caracteres.', + 'gte.array' => 'O campo :attribute deve ter :value itens ou mais.', 'amount_required_for_auto_budget' => 'O valor é necessário.', 'auto_budget_amount_positive' => 'A quantidade deve ser maior do que zero.', + 'auto_budget_period_mandatory' => 'O período de orçamento automático é um campo obrigatório.', // no access to administration: diff --git a/resources/lang/pt_PT/api.php b/resources/lang/pt_PT/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/pt_PT/api.php +++ b/resources/lang/pt_PT/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/pt_PT/auth.php b/resources/lang/pt_PT/auth.php index 1c491fc08f..4947e2720b 100644 --- a/resources/lang/pt_PT/auth.php +++ b/resources/lang/pt_PT/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'As credenciais não correspondem aos nossos registos.', 'throttle' => 'Demasiadas tentativas de início de sessão. Tente novamente em :seconds segundos.', diff --git a/resources/lang/pt_PT/breadcrumbs.php b/resources/lang/pt_PT/breadcrumbs.php index 553e09c75d..c084957556 100644 --- a/resources/lang/pt_PT/breadcrumbs.php +++ b/resources/lang/pt_PT/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Início', - 'budgets' => 'Orçamentos', - 'subscriptions' => 'Subscrições', - 'transactions' => 'Transações', - 'title_expenses' => 'Despesas', - 'title_withdrawal' => 'Despesas', - 'title_revenue' => 'Receita / rendimento', - 'title_deposit' => 'Receita / rendimento', - 'title_transfer' => 'Transferências', - 'title_transfers' => 'Transferências', - 'edit_currency' => 'Editar moeda ":name"', - 'delete_currency' => 'Apagar moeda ":name"', - 'newPiggyBank' => 'Criar mealheiro', - 'edit_piggyBank' => 'Editar mealheiro ":name"', - 'preferences' => 'Preferências', - 'profile' => 'Perfil', - 'accounts' => 'Contas', - 'changePassword' => 'Alterar password', - 'change_email' => 'Alterar email', - 'bills' => 'Faturas', - 'newBill' => 'Nova fatura', - 'edit_bill' => 'Editar fatura ":name"', - 'delete_bill' => 'Apagar fatura ":name"', - 'reports' => 'Relatórios', - 'search_result' => 'Resultados da pesquisa para ":query"', - 'withdrawal_list' => 'Despesas', - 'Withdrawal_list' => 'Despesas', - 'deposit_list' => 'Receitas, rendimentos e depósitos', - 'transfer_list' => 'Transferências', - 'transfers_list' => 'Transferências', + 'home' => 'Início', + 'budgets' => 'Orçamentos', + 'subscriptions' => 'Subscrições', + 'transactions' => 'Transações', + 'title_expenses' => 'Despesas', + 'title_withdrawal' => 'Despesas', + 'title_revenue' => 'Receita / rendimento', + 'title_deposit' => 'Receita / rendimento', + 'title_transfer' => 'Transferências', + 'title_transfers' => 'Transferências', + 'edit_currency' => 'Editar moeda ":name"', + 'delete_currency' => 'Apagar moeda ":name"', + 'newPiggyBank' => 'Criar mealheiro', + 'edit_piggyBank' => 'Editar mealheiro ":name"', + 'preferences' => 'Preferências', + 'profile' => 'Perfil', + 'accounts' => 'Contas', + 'changePassword' => 'Alterar password', + 'change_email' => 'Alterar email', + 'bills' => 'Faturas', + 'newBill' => 'Nova fatura', + 'edit_bill' => 'Editar fatura ":name"', + 'delete_bill' => 'Apagar fatura ":name"', + 'reports' => 'Relatórios', + 'search_result' => 'Resultados da pesquisa para ":query"', + 'withdrawal_list' => 'Despesas', + 'Withdrawal_list' => 'Despesas', + 'deposit_list' => 'Receitas, rendimentos e depósitos', + 'transfer_list' => 'Transferências', + 'transfers_list' => 'Transferências', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Reconciliações', 'create_withdrawal' => 'Novo levantamento', 'create_deposit' => 'Novo depósito', diff --git a/resources/lang/pt_PT/components.php b/resources/lang/pt_PT/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/pt_PT/components.php +++ b/resources/lang/pt_PT/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/pt_PT/config.php b/resources/lang/pt_PT/config.php index 621d5b8ff6..88dce3a7cb 100644 --- a/resources/lang/pt_PT/config.php +++ b/resources/lang/pt_PT/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'pt', - 'locale' => 'pt, Português, pt_PT.utf8, pt_PT.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'pt', + 'locale' => 'pt, Português, pt_PT.utf8, pt_PT.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMM YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'DD MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D MMM YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'DD MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd, DD [de] MMMM [de] YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd, DD [de] MMMM [de] YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'DD [de] MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'DD [de] MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'DD [de] MMMM [de] YYYY, @ HH:mm:ss', + 'date_time_fns' => 'DO [de] MMMM YYYY, @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'DD [de] MMMM [de] YYYY, @ HH:mm:ss', - 'date_time_fns' => 'DO [de] MMMM YYYY, @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GG', + 'week_in_year_fns' => "'Semana' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GG', - 'week_in_year_fns' => "'Semana' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\TQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\TQ YYYY', - - 'quarter_fns' => "'T' Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Segunda', - 'dow_2' => 'Terça', - 'dow_3' => 'Quarta', - 'dow_4' => 'Quinta', - 'dow_5' => 'Sexta', - 'dow_6' => 'Sábado', - 'dow_7' => 'Domingo', + 'quarter_fns' => "'T' Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Segunda', + 'dow_2' => 'Terça', + 'dow_3' => 'Quarta', + 'dow_4' => 'Quinta', + 'dow_5' => 'Sexta', + 'dow_6' => 'Sábado', + 'dow_7' => 'Domingo', ]; /* diff --git a/resources/lang/pt_PT/demo.php b/resources/lang/pt_PT/demo.php index b81f29a364..ed19ae1d1f 100644 --- a/resources/lang/pt_PT/demo.php +++ b/resources/lang/pt_PT/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/pt_PT/email.php b/resources/lang/pt_PT/email.php index 9f3a50e212..c91c9ea762 100644 --- a/resources/lang/pt_PT/email.php +++ b/resources/lang/pt_PT/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Uma mensagem de teste da instalação do Firefly III', 'admin_test_body' => 'Esta é uma mensagem de teste da sua instância do Firefly III. Foi enviada para :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Foi criado um convite', 'invitation_created_body' => 'O utilizador administrador ":email" criou um convite que pode ser usado por alguém que detenha o email ":invitee". O convite será válido por 48 horas.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Alteração da senha:', 'registered_doc_link' => 'Documentação:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Está disponível uma nova versão do Firefly III', @@ -147,8 +144,9 @@ Isto pode ajudar a corrigir o erro que acabou de encontrar.', 'error_github_text' => 'Se preferir, pode também abrir uma nova questão em https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'O rastreamento da pilha completo é:', 'error_headers' => 'Os cabeçalhos seguintes também podem ser relevantes:', + 'error_post' => 'Isto foi submetido pelo utilizador:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -159,7 +157,6 @@ Isto pode ajudar a corrigir o erro que acabou de encontrar.', * */ - // report new journals 'new_journals_subject' => 'O Firefly III criou uma nova transação|O Firefly III criou :count novas transações', 'new_journals_header' => 'O Firefly III criou uma transação por si. Pode encontrá-la na sua instância do Firefly III.|O Firefly III criou :count transações por si. Pode encontrá-las na sua instância do Firefly III:', @@ -174,7 +171,6 @@ Isto pode ajudar a corrigir o erro que acabou de encontrar.', 'bill_warning_end_date_zero' => 'O encargo **:name** deve ser pago em :date. Esse dia é **HOJE!**', 'bill_warning_extension_date_zero' => 'O encargo **:name** deve ser prorrogado ou cancelado no dia :date. Esse dia é **HOJE!**', 'bill_warning_please_action' => 'Por favor, tome as medidas apropriadas.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/pt_PT/errors.php b/resources/lang/pt_PT/errors.php index 666d026f2d..a029a175cc 100644 --- a/resources/lang/pt_PT/errors.php +++ b/resources/lang/pt_PT/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Rastreamento da pilha', 'more_info' => 'Mais informação', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Por favor, recolha mais informação na pasta storage/logs que é onde encontra os ficheiros de log. Se estiver a utilizar Docker, utilize docker logs -f [container].', - 'collect_info_more' => 'Pode ler mais sobre a recolha de informação de erros em nas FAQ.', - 'github_help' => 'Obter ajuda no GitHub', - 'github_instructions' => 'Esteja completamente à vontade em abrir uma nova questão no GitHub.', - 'use_search' => 'Use a pesquisa!', - 'include_info' => 'Inclua a informação da página de depuração.', - 'tell_more' => 'Diga-nos mais do que "diz Oops! no ecrã"', - 'include_logs' => 'Incluir relatório de erros (ver acima).', - 'what_did_you_do' => 'Diga-nos o que estava a fazer.', - 'offline_header' => 'Provavelmente está offline', - 'offline_unreachable' => 'O Firefly III está inacessível. O seu dispositivo está offline ou o servidor não está a funcionar.', - 'offline_github' => 'Se tem a certeza que o seu dispositivo e o servidor estão online, por favor, abra um ticket no GitHub.', - + 'collect_info' => 'Por favor, recolha mais informação na pasta storage/logs que é onde encontra os ficheiros de log. Se estiver a utilizar Docker, utilize docker logs -f [container].', + 'collect_info_more' => 'Pode ler mais sobre a coleta de informação de erros no o FAQ.', + 'github_help' => 'Obter ajuda no GitHub', + 'github_instructions' => 'Esteja completamente à vontade em abrir uma nova questão no GitHub.', + 'use_search' => 'Use a pesquisa!', + 'include_info' => 'Inclua a informação da página de depuração.', + 'tell_more' => 'Diga-nos mais do que "diz Oops! no ecrã"', + 'include_logs' => 'Incluir relatório de erros (ver acima).', + 'what_did_you_do' => 'Diga-nos o que estava a fazer.', + 'offline_header' => 'Provavelmente está offline', + 'offline_unreachable' => 'O Firefly III está inacessível. O seu dispositivo está offline ou o servidor não está a funcionar.', + 'offline_github' => 'Se tem a certeza que o seu dispositivo e o servidor estão online, por favor, abra um ticket no GitHub.', ]; diff --git a/resources/lang/pt_PT/firefly.php b/resources/lang/pt_PT/firefly.php index 1bb7fae2ef..3bf7fb39be 100644 --- a/resources/lang/pt_PT/firefly.php +++ b/resources/lang/pt_PT/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Fechar', - 'actions' => 'Ações', - 'edit' => 'Editar', - 'delete' => 'Eliminar', - 'split' => 'Dividir', - 'single_split' => 'Divisão', - 'clone' => 'Duplicar', - 'confirm_action' => 'Confirmar ação', - 'last_seven_days' => 'Últimos sete dias', - 'last_thirty_days' => 'Últimos trinta dias', - 'last_180_days' => 'Últimos 180 dias', - 'month_to_date' => 'Mês corrente', - 'year_to_date' => 'Ano corrente', - 'YTD' => 'Ano corrente', - 'welcome_back' => 'Painel de controlo', - 'everything' => 'Tudo', - 'today' => 'hoje', - 'customRange' => 'Intervalo personalizado', - 'date_range' => 'Intervalo de datas', - 'apply' => 'Aplicar', - 'select_date' => 'Selecionar data..', - 'cancel' => 'Cancelar', - 'from' => 'De', - 'to' => 'Até', - 'structure' => 'Estrutura', - 'help_translating' => 'Este texto de ajuda ainda não esta disponível na tua língua. Queres ajudar a traduzir?', - 'showEverything' => 'Mostrar tudo', - 'never' => 'Nunca', - 'no_results_for_empty_search' => 'A sua pesquisa estava vazia, nada foi encontrado.', - 'removed_amount' => 'Removido :amount', - 'added_amount' => 'Adicionado :amount', - 'asset_account_role_help' => 'Quaisquer opções extras resultantes da sua escolha podem ser definidas mais tarde.', - 'Opening balance' => 'Saldo inicial', - 'create_new_stuff' => 'Criar novo', - 'new_withdrawal' => 'Novo levantamento', - 'create_new_transaction' => 'Criar uma nova transação', - 'sidebar_frontpage_create' => 'Criar', - 'new_transaction' => 'Nova transação', - 'no_rules_for_bill' => 'Este encargo não tem regras associadas.', - 'go_to_asset_accounts' => 'Ver as contas de ativos', - 'go_to_budgets' => 'Ir para os seus orçamentos', - 'go_to_withdrawals' => 'Ir para os seus levantamentos', - 'clones_journal_x' => 'Esta transação é uma cópia de ":description" (#:id)', - 'go_to_categories' => 'Ir para categorias', - 'go_to_bills' => 'Ir para os seus encargos', - 'go_to_expense_accounts' => 'Ver as contas de despesa', - 'go_to_revenue_accounts' => 'Ver as contas de receitas', - 'go_to_piggies' => 'Ir para mealheiros', - 'new_deposit' => 'Novo depósito', - 'new_transfer' => 'Nova transferência', - 'new_transfers' => 'Nova transferência', - 'new_asset_account' => 'Nova conta de ativos', - 'new_expense_account' => 'Nova conta de gastos', - 'new_revenue_account' => 'Nova conta de receitas', - 'new_liabilities_account' => 'Novo passivo', - 'new_budget' => 'Novo orçamento', - 'new_bill' => 'Novo encargo', - 'block_account_logout' => 'A sua sessão foi terminada. Contas bloqueadas não podem utilizar este site. Já se registou com um email válido?', - 'flash_success' => 'Sucesso!', - 'flash_info' => 'Mensagem', - 'flash_warning' => 'Aviso!', - 'flash_error' => 'Erro!', - 'flash_danger' => 'Perigo!', - 'flash_info_multiple' => 'Tem uma mensagem|Tem :count mensagens', - 'flash_error_multiple' => 'Há um erro|Há :count erros', - 'net_worth' => 'Posição global', - 'help_for_this_page' => 'Ajuda para esta página', - 'help_for_this_page_body' => 'Pode encontrar mais informações sobre esta página na documentação.', - 'two_factor_welcome' => 'Olá!', - 'two_factor_enter_code' => 'Para continuar, por favor introduza o código da sua autenticação de 2 passos. A sua aplicação pode gerá-lo para si.', - 'two_factor_code_here' => 'Introduza o código aqui', - 'two_factor_title' => 'Autenticação de 2 passos', - 'authenticate' => 'Autenticar', - 'two_factor_forgot_title' => 'Perda da autenticação 2 passos', - 'two_factor_forgot' => 'Esqueci-me da minha cena de 2 passos.', - 'two_factor_lost_header' => 'Perdeu a sua autenticação de 2 passos?', - 'two_factor_lost_intro' => 'Se também perdeu os códigos de backup, está com azar. Não é algo que se possa resolver pela interface web. Têm duas alternativas.', - 'two_factor_lost_fix_self' => 'Se gere a sua própria instância do Firefly III, leia esta linha no FAQ para instruções.', - 'two_factor_lost_fix_owner' => 'Caso contrario, envie um email ao dono da plataforma, :site_owner e peça-lhe para reiniciar a sua autenticação de 2 passos.', - 'mfa_backup_code' => 'Utilizou um código de backup para aceder ao Firefly III. Esse código não pode ser utilizado novamente, é melhor riscá-lo da sua lista.', - 'pref_two_factor_new_backup_codes' => 'Obter novos códigos de backup', - 'pref_two_factor_backup_code_count' => 'Tem :count código de backup válido.|Tem :count códigos de backup válidos.', - '2fa_i_have_them' => 'Guardei-os!', - 'warning_much_data' => ':days dias de dados podem demorar a carregar.', - 'registered' => 'Registou-se com sucesso!', - 'Default asset account' => 'Conta de ativos principal', - 'no_budget_pointer' => 'Parece que ainda não tem orçamentos. Pode criá-los na página de orçamentos. Os orçamentos podem ajudá-lo a controlar as despesas.', - 'no_bill_pointer' => 'Parece que ainda não tem encargos. Pode criá-los na página de encargos. Os Encargos podem ajudá-lo a controlar as despesas.', - 'Savings account' => 'Conta poupança', - 'Credit card' => 'Cartão de crédito', - 'source_accounts' => 'Conta de origem|Contas de origem', - 'destination_accounts' => 'Conta de destino|Contas de destino', - 'user_id_is' => 'O seu id de utilizador: :user', - 'field_supports_markdown' => 'Este campo suporta Markdown.', - 'need_more_help' => 'Se precisar de mais ajuda para usar o Firefly III, por favor abra um ticket no Github.', - 'reenable_intro_text' => 'Também pode reativar o guia de introdução.', - 'intro_boxes_after_refresh' => 'Os tutoriais de introdução vão aparecer quando atualizar a página.', - 'show_all_no_filter' => 'Mostrar todas as transações sem as agrupar por data.', - 'expenses_by_category' => 'Despesas por categoria', - 'expenses_by_budget' => 'Despesas por orçamento', - 'income_by_category' => 'Receitas por categoria', - 'expenses_by_asset_account' => 'Despesas por conta de ativos', - 'expenses_by_expense_account' => 'Despesas por conta de despesas', - 'cannot_redirect_to_account' => 'O Firefly III não consegue redirecioná-lo para a página correta. Lamentamos.', - 'sum_of_expenses' => 'Soma das despesas', - 'sum_of_income' => 'Soma das receitas', - 'liabilities' => 'Passivos', - 'spent_in_specific_budget' => 'Gasto no orçamento ":budget"', - 'spent_in_specific_double' => 'Gasto na conta ":account"', - 'earned_in_specific_double' => 'Ganho na conta ":account"', - 'source_account' => 'Conta de origem', - 'source_account_reconciliation' => 'Não pode editar a conta de origem de uma transação de reconciliação.', - 'destination_account' => 'Conta de destino', - 'destination_account_reconciliation' => 'Não pode editar a conta de destino de uma transação de reconciliação.', - 'sum_of_expenses_in_budget' => 'Total gasto no orçamento ":budget"', - 'left_in_budget_limit' => 'Restante para gastar com base no orçamentado', - 'current_period' => 'Período atual', - 'show_the_current_period_and_overview' => 'Mostrar o período atual e a visão geral', - 'pref_languages_locale' => 'Para que um idioma diferente do inglês funcione corretamente, o sistema operativo deve utilizar as definições locais corretas. Se eles não estiverem presentes, dados de moeda, datas e valores podem estar formatados incorretamente.', - 'budget_in_period' => 'Todas as transações para o orçamento ":name" entre :start e :end em :currency', - 'chart_budget_in_period' => 'Gráfico para todas as transações do orçamento ":name" entre :start e :end em :currency', - 'chart_budget_in_period_only_currency' => 'O valor orçamentado foi em :currency, por isso o gráfico apenas irá mostrar transações em :currency.', - 'chart_account_in_period' => 'Gráfico para todas as transações da conta ":name" (:balance) entre :start e :end', - 'chart_category_in_period' => 'Gráfico para todas as transações da categoria ":name" entre :start e :end', - 'chart_category_all' => 'Gráfico para todas as transações da categoria ":name"', - 'clone_withdrawal' => 'Clonar este levantamento', - 'clone_deposit' => 'Clonar este depósito', - 'clone_transfer' => 'Clonar esta transferência', - 'multi_select_no_selection' => 'Nenhum selecionado', - 'multi_select_select_all' => 'Selecionar todos', - 'multi_select_n_selected' => 'selecionados', - 'multi_select_all_selected' => 'Todos selecionados', - 'multi_select_filter_placeholder' => 'Procurar..', - 'intro_next_label' => 'Próximo', - 'intro_prev_label' => 'Anterior', - 'intro_skip_label' => 'Ignorar', - 'intro_done_label' => 'Feito', - 'between_dates_breadcrumb' => 'Entre :start e :end', - 'all_journals_without_budget' => 'Todas as transações sem orçamento', - 'journals_without_budget' => 'Transações sem orçamento', - 'all_journals_without_category' => 'Todas as transações sem categoria', - 'journals_without_category' => 'Transações sem categoria', - 'all_journals_for_account' => 'Todas as transações para a conta :name', - 'chart_all_journals_for_account' => 'Gráfico de todas as transações para a conta :name', - 'journals_in_period_for_account' => 'Todas as transações da conta :name entre :start e :end', - 'journals_in_period_for_account_js' => 'Todas as transações para a conta {title} entre {start} e {end}', - 'transferred' => 'Transferido', - 'all_withdrawal' => 'Todas as despesas', - 'all_transactions' => 'Todas as transações', - 'title_withdrawal_between' => 'Todas as despesas entre :start e :end', - 'all_deposit' => 'Todas as receitas', - 'title_deposit_between' => 'Todas as receitas entre :start e :end', - 'all_transfers' => 'Todas as transferências', - 'title_transfers_between' => 'Todas as transferências entre :start e :end', - 'all_transfer' => 'Todas as transferências', - 'all_journals_for_tag' => 'Todas as transações para a etiqueta ":tag"', - 'title_transfer_between' => 'Todas as transferências entre :start e :end', - 'all_journals_for_category' => 'Todas as transações para a categoria :name', - 'all_journals_for_budget' => 'Todas as transações para o orçamento :name', - 'chart_all_journals_for_budget' => 'Gráfico de todas as transações para o orçamento :name', - 'journals_in_period_for_category' => 'Todas as transações da categoria :name entre :start e :end', - 'journals_in_period_for_tag' => 'Todas as transações da etiqueta :tag entre :start e :end', - 'not_available_demo_user' => 'A funcionalidade que tentou aceder não está disponível para utilizadores demo.', - 'exchange_rate_instructions' => 'A conta de ativos "@name" apenas aceita transações em @native_currency. Se preferir usar @foreign_currency, tem de inserir o valor em @native_currency também:', - 'transfer_exchange_rate_instructions' => 'A conta de ativos de origem "@source_name" apenas aceita transações em @source_currency. A conta de ativos de destino "@dest_name" apenas aceita transações em @dest_currency. Tem de fornecer o valor transferido corretamente em ambas as moedas.', - 'transaction_data' => 'Dados da transação', - 'invalid_server_configuration' => 'Configuração de servidor inválida', - 'invalid_locale_settings' => 'O Firefly III é incapaz de formatar quantidades monetárias porque o seu servidor tem em falta os pacotes necessários. Existem instruções para resolver isto.', - 'quickswitch' => 'Troca rápida', - 'sign_in_to_start' => 'Registe-se para iniciar sessão', - 'sign_in' => 'Iniciar sessão', - 'register_new_account' => 'Registar nova conta', - 'forgot_my_password' => 'Esqueci-me da palavra-passe', - 'problems_with_input' => 'Existem alguns problemas com o valor introduzido.', - 'reset_password' => 'Redefinir a palavra-passe', - 'button_reset_password' => 'Redefinir a palavra-passe', - 'reset_button' => 'Redefinir', - 'want_to_login' => 'Quero iniciar sessão', - 'login_page_title' => 'Iniciar sessão no Firefly III', - 'register_page_title' => 'Registar no Firefly III', - 'forgot_pw_page_title' => 'Esqueceu a palavra-passe do Firefly III', - 'reset_pw_page_title' => 'Reiniciar a palavra-passe do Firefly III', - 'cannot_reset_demo_user' => 'Não pode reiniciar a palavra-passe do utilizador de demonstração.', - 'no_att_demo_user' => 'O utilizador demo não pode enviar anexos.', - 'button_register' => 'Registar', - 'authorization' => 'Autorização', - 'active_bills_only' => 'apenas encargos ativos', - 'active_bills_only_total' => 'todos os encargos ativos', - 'active_exp_bills_only' => 'apenas encargos ativos e esperados', - 'active_exp_bills_only_total' => 'apenas os encargos ativos previstos', - 'per_period_sum_1D' => 'Previsão de custos diários', - 'per_period_sum_1W' => 'Previsão de custos semanais', - 'per_period_sum_1M' => 'Previsão de custos mensais', - 'per_period_sum_3M' => 'Custos trimestrais esperados', - 'per_period_sum_6M' => 'Previsão de custos semestrais', - 'per_period_sum_1Y' => 'Previsão de custos anuais', - 'average_per_bill' => 'média por encargo', - 'expected_total' => 'total esperado', - 'reconciliation_account_name' => ':name reconciliação (:currency)', - 'saved' => 'Guardado', - 'advanced_options' => 'Opções avançadas', - 'advanced_options_explain' => 'Algumas páginas no Firefly III têm opções avançadas escondidas atrás deste botão. Esta página não tem nada sofisticado aqui, mas veja as outras!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Fechar', + 'actions' => 'Ações', + 'edit' => 'Editar', + 'delete' => 'Eliminar', + 'split' => 'Dividir', + 'single_split' => 'Divisão', + 'clone' => 'Duplicar', + 'clone_and_edit' => 'Clonar e editar', + 'confirm_action' => 'Confirmar ação', + 'last_seven_days' => 'Últimos sete dias', + 'last_thirty_days' => 'Últimos trinta dias', + 'last_180_days' => 'Últimos 180 dias', + 'month_to_date' => 'Mês corrente', + 'year_to_date' => 'Ano corrente', + 'YTD' => 'Ano corrente', + 'welcome_back' => 'Painel de controlo', + 'everything' => 'Tudo', + 'today' => 'hoje', + 'customRange' => 'Intervalo personalizado', + 'date_range' => 'Intervalo de datas', + 'apply' => 'Aplicar', + 'select_date' => 'Selecionar data..', + 'cancel' => 'Cancelar', + 'from' => 'De', + 'to' => 'Até', + 'structure' => 'Estrutura', + 'help_translating' => 'Este texto de ajuda ainda não esta disponível na tua língua. Queres ajudar a traduzir?', + 'showEverything' => 'Mostrar tudo', + 'never' => 'Nunca', + 'no_results_for_empty_search' => 'A sua pesquisa estava vazia, nada foi encontrado.', + 'removed_amount' => 'Removido :amount', + 'added_amount' => 'Adicionado :amount', + 'asset_account_role_help' => 'Quaisquer opções extras resultantes da sua escolha podem ser definidas mais tarde.', + 'Opening balance' => 'Saldo inicial', + 'create_new_stuff' => 'Criar novo', + 'new_withdrawal' => 'Novo levantamento', + 'create_new_transaction' => 'Criar uma nova transação', + 'sidebar_frontpage_create' => 'Criar', + 'new_transaction' => 'Nova transação', + 'no_rules_for_bill' => 'Este encargo não tem regras associadas.', + 'go_to_asset_accounts' => 'Ver as contas de ativos', + 'go_to_budgets' => 'Ir para os seus orçamentos', + 'go_to_withdrawals' => 'Ir para os seus levantamentos', + 'clones_journal_x' => 'Esta transação é uma cópia de ":description" (#:id)', + 'go_to_categories' => 'Ir para categorias', + 'go_to_bills' => 'Ir para os seus encargos', + 'go_to_expense_accounts' => 'Ver as contas de despesa', + 'go_to_revenue_accounts' => 'Ver as contas de receitas', + 'go_to_piggies' => 'Ir para mealheiros', + 'new_deposit' => 'Novo depósito', + 'new_transfer' => 'Nova transferência', + 'new_transfers' => 'Nova transferência', + 'new_asset_account' => 'Nova conta de ativos', + 'new_expense_account' => 'Nova conta de gastos', + 'new_revenue_account' => 'Nova conta de receitas', + 'new_liabilities_account' => 'Novo passivo', + 'new_budget' => 'Novo orçamento', + 'new_bill' => 'Novo encargo', + 'block_account_logout' => 'A sua sessão foi terminada. Contas bloqueadas não podem utilizar este site. Já se registou com um email válido?', + 'flash_success' => 'Sucesso!', + 'flash_info' => 'Mensagem', + 'flash_warning' => 'Aviso!', + 'flash_error' => 'Erro!', + 'flash_danger' => 'Perigo!', + 'flash_info_multiple' => 'Tem uma mensagem|Tem :count mensagens', + 'flash_error_multiple' => 'Há um erro|Há :count erros', + 'net_worth' => 'Posição global', + 'help_for_this_page' => 'Ajuda para esta página', + 'help_for_this_page_body' => 'Pode encontrar mais informações sobre esta página na documentação.', + 'two_factor_welcome' => 'Olá!', + 'two_factor_enter_code' => 'Para continuar, por favor introduza o código da sua autenticação de 2 passos. A sua aplicação pode gerá-lo para si.', + 'two_factor_code_here' => 'Introduza o código aqui', + 'two_factor_title' => 'Autenticação de 2 passos', + 'authenticate' => 'Autenticar', + 'two_factor_forgot_title' => 'Perda da autenticação 2 passos', + 'two_factor_forgot' => 'Esqueci-me da minha cena de 2 passos.', + 'two_factor_lost_header' => 'Perdeu a sua autenticação de 2 passos?', + 'two_factor_lost_intro' => 'Se também perdeu os códigos de backup, está com azar. Não é algo que se possa resolver pela interface web. Têm duas alternativas.', + 'two_factor_lost_fix_self' => 'Se tiver a sua própria instância do Firefly III, por favor leia :site_owner e peça-lhe para reiniciar a sua autenticação de 2 passos.', + 'mfa_backup_code' => 'Utilizou um código de backup para aceder ao Firefly III. Esse código não pode ser utilizado novamente, é melhor riscá-lo da sua lista.', + 'pref_two_factor_new_backup_codes' => 'Obter novos códigos de backup', + 'pref_two_factor_backup_code_count' => 'Tem :count código de backup válido.|Tem :count códigos de backup válidos.', + '2fa_i_have_them' => 'Guardei-os!', + 'warning_much_data' => ':days dias de dados podem demorar a carregar.', + 'registered' => 'Registou-se com sucesso!', + 'Default asset account' => 'Conta de ativos principal', + 'no_budget_pointer' => 'Parece que ainda não tem orçamentos. Pode criá-los na página de orçamentos. Os orçamentos podem ajudá-lo a controlar as despesas.', + 'no_bill_pointer' => 'Parece que ainda não tem encargos. Pode criá-los na página de encargos. Os Encargos podem ajudá-lo a controlar as despesas.', + 'Savings account' => 'Conta poupança', + 'Credit card' => 'Cartão de crédito', + 'source_accounts' => 'Conta de origem|Contas de origem', + 'destination_accounts' => 'Conta de destino|Contas de destino', + 'user_id_is' => 'O seu id de utilizador: :user', + 'field_supports_markdown' => 'Este campo suporta Markdown.', + 'need_more_help' => 'Se precisar de mais ajuda para usar o Firefly III, por favor abra um ticket no Github.', + 'reenable_intro_text' => 'Também pode reativar o guia de introdução.', + 'intro_boxes_after_refresh' => 'Os tutoriais de introdução vão aparecer quando atualizar a página.', + 'show_all_no_filter' => 'Mostrar todas as transações sem as agrupar por data.', + 'expenses_by_category' => 'Despesas por categoria', + 'expenses_by_budget' => 'Despesas por orçamento', + 'income_by_category' => 'Receitas por categoria', + 'expenses_by_asset_account' => 'Despesas por conta de ativos', + 'expenses_by_expense_account' => 'Despesas por conta de despesas', + 'cannot_redirect_to_account' => 'O Firefly III não consegue redirecioná-lo para a página correta. Lamentamos.', + 'sum_of_expenses' => 'Soma das despesas', + 'sum_of_income' => 'Soma das receitas', + 'liabilities' => 'Passivos', + 'spent_in_specific_budget' => 'Gasto no orçamento ":budget"', + 'spent_in_specific_double' => 'Gasto na conta ":account"', + 'earned_in_specific_double' => 'Ganho na conta ":account"', + 'source_account' => 'Conta de origem', + 'source_account_reconciliation' => 'Não pode editar a conta de origem de uma transação de reconciliação.', + 'destination_account' => 'Conta de destino', + 'destination_account_reconciliation' => 'Não pode editar a conta de destino de uma transação de reconciliação.', + 'sum_of_expenses_in_budget' => 'Total gasto no orçamento ":budget"', + 'left_in_budget_limit' => 'Restante para gastar com base no orçamentado', + 'current_period' => 'Período atual', + 'show_the_current_period_and_overview' => 'Mostrar o período atual e a visão geral', + 'pref_languages_locale' => 'Para que um idioma diferente do inglês funcione corretamente, o sistema operativo deve utilizar as definições locais corretas. Se eles não estiverem presentes, dados de moeda, datas e valores podem estar formatados incorretamente.', + 'budget_in_period' => 'Todas as transações para o orçamento ":name" entre :start e :end em :currency', + 'chart_budget_in_period' => 'Gráfico para todas as transações do orçamento ":name" entre :start e :end em :currency', + 'chart_budget_in_period_only_currency' => 'O valor orçamentado foi em :currency, por isso o gráfico apenas irá mostrar transações em :currency.', + 'chart_account_in_period' => 'Gráfico para todas as transações da conta ":name" (:balance) entre :start e :end', + 'chart_category_in_period' => 'Gráfico para todas as transações da categoria ":name" entre :start e :end', + 'chart_category_all' => 'Gráfico para todas as transações da categoria ":name"', + 'clone_withdrawal' => 'Clonar este levantamento', + 'clone_deposit' => 'Clonar este depósito', + 'clone_transfer' => 'Clonar esta transferência', + 'multi_select_no_selection' => 'Nenhum selecionado', + 'multi_select_select_all' => 'Selecionar todos', + 'multi_select_n_selected' => 'selecionados', + 'multi_select_all_selected' => 'Todos selecionados', + 'multi_select_filter_placeholder' => 'Procurar..', + 'intro_next_label' => 'Próximo', + 'intro_prev_label' => 'Anterior', + 'intro_skip_label' => 'Ignorar', + 'intro_done_label' => 'Feito', + 'between_dates_breadcrumb' => 'Entre :start e :end', + 'all_journals_without_budget' => 'Todas as transações sem orçamento', + 'journals_without_budget' => 'Transações sem orçamento', + 'all_journals_without_category' => 'Todas as transações sem categoria', + 'journals_without_category' => 'Transações sem categoria', + 'all_journals_for_account' => 'Todas as transações para a conta :name', + 'chart_all_journals_for_account' => 'Gráfico de todas as transações para a conta :name', + 'journals_in_period_for_account' => 'Todas as transações da conta :name entre :start e :end', + 'journals_in_period_for_account_js' => 'Todas as transações para a conta {title} entre {start} e {end}', + 'transferred' => 'Transferido', + 'all_withdrawal' => 'Todas as despesas', + 'all_transactions' => 'Todas as transações', + 'title_withdrawal_between' => 'Todas as despesas entre :start e :end', + 'all_deposit' => 'Todas as receitas', + 'title_deposit_between' => 'Todas as receitas entre :start e :end', + 'all_transfers' => 'Todas as transferências', + 'title_transfers_between' => 'Todas as transferências entre :start e :end', + 'all_transfer' => 'Todas as transferências', + 'all_journals_for_tag' => 'Todas as transações para a etiqueta ":tag"', + 'title_transfer_between' => 'Todas as transferências entre :start e :end', + 'all_journals_for_category' => 'Todas as transações para a categoria :name', + 'all_journals_for_budget' => 'Todas as transações para o orçamento :name', + 'chart_all_journals_for_budget' => 'Gráfico de todas as transações para o orçamento :name', + 'journals_in_period_for_category' => 'Todas as transações da categoria :name entre :start e :end', + 'journals_in_period_for_tag' => 'Todas as transações da etiqueta :tag entre :start e :end', + 'not_available_demo_user' => 'A funcionalidade que tentou aceder não está disponível para utilizadores demo.', + 'exchange_rate_instructions' => 'A conta de ativos "@name" apenas aceita transações em @native_currency. Se preferir usar @foreign_currency, tem de inserir o valor em @native_currency também:', + 'transfer_exchange_rate_instructions' => 'A conta de ativos de origem "@source_name" apenas aceita transações em @source_currency. A conta de ativos de destino "@dest_name" apenas aceita transações em @dest_currency. Tem de fornecer o valor transferido corretamente em ambas as moedas.', + 'transaction_data' => 'Dados da transação', + 'invalid_server_configuration' => 'Configuração de servidor inválida', + 'invalid_locale_settings' => 'O Firefly III não consegue formatar quantias monetárias porque o seu servidor não tem os pacotes requeridos. Há instruções para fazer isto.', + 'quickswitch' => 'Troca rápida', + 'sign_in_to_start' => 'Registe-se para iniciar sessão', + 'sign_in' => 'Iniciar sessão', + 'register_new_account' => 'Registar nova conta', + 'forgot_my_password' => 'Esqueci-me da palavra-passe', + 'problems_with_input' => 'Existem alguns problemas com o valor introduzido.', + 'reset_password' => 'Redefinir a palavra-passe', + 'button_reset_password' => 'Redefinir a palavra-passe', + 'reset_button' => 'Redefinir', + 'want_to_login' => 'Quero iniciar sessão', + 'login_page_title' => 'Iniciar sessão no Firefly III', + 'register_page_title' => 'Registar no Firefly III', + 'forgot_pw_page_title' => 'Esqueceu a palavra-passe do Firefly III', + 'reset_pw_page_title' => 'Reiniciar a palavra-passe do Firefly III', + 'cannot_reset_demo_user' => 'Não pode reiniciar a palavra-passe do utilizador de demonstração.', + 'no_att_demo_user' => 'O utilizador demo não pode enviar anexos.', + 'button_register' => 'Registar', + 'authorization' => 'Autorização', + 'active_bills_only' => 'apenas encargos ativos', + 'active_bills_only_total' => 'todos os encargos ativos', + 'active_exp_bills_only' => 'apenas encargos ativos e esperados', + 'active_exp_bills_only_total' => 'apenas os encargos ativos previstos', + 'per_period_sum_1D' => 'Previsão de custos diários', + 'per_period_sum_1W' => 'Previsão de custos semanais', + 'per_period_sum_1M' => 'Previsão de custos mensais', + 'per_period_sum_3M' => 'Custos trimestrais esperados', + 'per_period_sum_6M' => 'Previsão de custos semestrais', + 'per_period_sum_1Y' => 'Previsão de custos anuais', + 'average_per_bill' => 'média por encargo', + 'expected_total' => 'total esperado', + 'reconciliation_account_name' => ':name reconciliação (:currency)', + 'saved' => 'Guardado', + 'advanced_options' => 'Opções avançadas', + 'advanced_options_explain' => 'Algumas páginas no Firefly III têm opções avançadas escondidas atrás deste botão. Esta página não tem nada sofisticado aqui, mas veja as outras!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'Não existem mensagens novas', - 'webhook_trigger_STORE_TRANSACTION' => 'Após criar transação', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Após atualizar transação', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Após eliminar transação', - 'webhook_response_TRANSACTIONS' => 'Detalhes da transação', - 'webhook_response_ACCOUNTS' => 'Detalhes da conta', - 'webhook_response_none_NONE' => 'Sem dados', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspecionar', - 'create_new_webhook' => 'Criar um novo webhook', - 'webhooks_create_breadcrumb' => 'Criar um novo webhook', - 'webhook_trigger_form_help' => 'Indicar em que evento o webhook será a acionado', - 'webhook_response_form_help' => 'Indicar o que o webhook deve submeter para o URL.', - 'webhook_delivery_form_help' => 'Em que formato deve o webhook entregar os dados.', - 'webhook_active_form_help' => 'O webhook deve ser ativado ou não será acionado.', - 'stored_new_webhook' => 'Webhook ":title" guardado', - 'delete_webhook' => 'Eliminar webhook', - 'deleted_webhook' => 'Apagar webhook ":title"', - 'edit_webhook' => 'Editar webhook ":title"', - 'updated_webhook' => 'Atualizado o webhook ":title"', - 'edit_webhook_js' => 'Editar webhook ":title"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'O webhook foi acionado na transação indicada. Por favor, aguarde que os resultados surjam.', - 'webhook_messages' => 'Mensagem do webhook', - 'view_message' => 'Ver mensagem', - 'view_attempts' => 'Ver tentativas falhadas', - 'message_content_title' => 'Conteúdo da mensagem do webhook', - 'message_content_help' => 'Este é o conteúdo da mensagem que foi enviada (ou se tentou enviar) usando este webhook.', - 'attempt_content_title' => 'Tentativas de webhook', - 'attempt_content_help' => 'Estas são todas as tentativas falhadas de envio desta mensagem webhook para o URL configurado. Após algum tempo, o Firefly vai deixar de tentar.', - 'no_attempts' => 'Não há tentativas falhadas. Isso é bom!', - 'webhook_attempt_at' => 'Tentativa em {moment}', - 'logs' => 'Logs', - 'response' => 'Respostas', - 'visit_webhook_url' => 'Ir para URL do webhook', - 'reset_webhook_secret' => 'Redefinir segredo webhook', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") foi guardado.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") foi guardado.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'desabilitado', + 'no_webhook_messages' => 'Não existem mensagens novas', + 'webhook_trigger_STORE_TRANSACTION' => 'Após criar transação', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Após atualizar transação', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Após eliminar transação', + 'webhook_response_TRANSACTIONS' => 'Detalhes da transação', + 'webhook_response_ACCOUNTS' => 'Detalhes da conta', + 'webhook_response_none_NONE' => 'Sem dados', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspecionar', + 'create_new_webhook' => 'Criar um novo webhook', + 'webhooks_create_breadcrumb' => 'Criar um novo webhook', + 'webhook_trigger_form_help' => 'Indicar em que evento o webhook será a acionado', + 'webhook_response_form_help' => 'Indicar o que o webhook deve submeter para o URL.', + 'webhook_delivery_form_help' => 'Em que formato deve o webhook entregar os dados.', + 'webhook_active_form_help' => 'O webhook deve ser ativado ou não será acionado.', + 'stored_new_webhook' => 'Webhook ":title" guardado', + 'delete_webhook' => 'Eliminar webhook', + 'deleted_webhook' => 'Apagar webhook ":title"', + 'edit_webhook' => 'Editar webhook ":title"', + 'updated_webhook' => 'Atualizado o webhook ":title"', + 'edit_webhook_js' => 'Editar webhook ":title"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'O webhook foi acionado na transação indicada. Por favor, aguarde que os resultados surjam.', + 'webhook_messages' => 'Mensagem do webhook', + 'view_message' => 'Ver mensagem', + 'view_attempts' => 'Ver tentativas falhadas', + 'message_content_title' => 'Conteúdo da mensagem do webhook', + 'message_content_help' => 'Este é o conteúdo da mensagem que foi enviada (ou se tentou enviar) usando este webhook.', + 'attempt_content_title' => 'Tentativas de webhook', + 'attempt_content_help' => 'Estas são todas as tentativas falhadas de envio desta mensagem webhook para o URL configurado. Após algum tempo, o Firefly vai deixar de tentar.', + 'no_attempts' => 'Não há tentativas falhadas. Isso é bom!', + 'webhook_attempt_at' => 'Tentativa em {moment}', + 'logs' => 'Logs', + 'response' => 'Respostas', + 'visit_webhook_url' => 'Ir para URL do webhook', + 'reset_webhook_secret' => 'Redefinir segredo webhook', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") foi guardado.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") foi guardado.', // API access - 'authorization_request' => 'Firefly III v:version Solicitar Autorização', - 'authorization_request_intro' => 'A aplicação ":client" está a pedir acesso à sua administração financeira. Gostaria de autorizar :client a aceder a esses registos?', - 'authorization_request_site' => 'Será redirecionado para :url o qual será capaz de aceder aos seus dados do Firefly III.', - 'authorization_request_invalid' => 'Este pedido de acesso é inválido. Por favor, não siga este link novamente.', - 'scopes_will_be_able' => 'Esta aplicação será capaz de:', - 'button_authorize' => 'Autorizar', - 'none_in_select_list' => '(nenhum)', - 'no_piggy_bank' => '(nenhum mealheiro)', - 'name_in_currency' => ':name em :currency', - 'paid_in_currency' => 'Pago em :currency', - 'unpaid_in_currency' => 'Por pagar em :currency', - 'is_alpha_warning' => 'Está a executar uma versão ALPHA. Cuidado com bugs e problemas.', - 'is_beta_warning' => 'Está a executar uma versão BETA. Cuidado com bugs e problemas.', - 'all_destination_accounts' => 'Contas de destino', - 'all_source_accounts' => 'Contas de origem', - 'back_to_index' => 'Voltar para o índice', - 'cant_logout_guard' => 'O Firefly III não consegue terminar a sua sessão.', - 'internal_reference' => 'Referência interna', + 'authorization_request' => 'Firefly III v:version Solicitar Autorização', + 'authorization_request_intro' => 'A aplicação ":client" está a pedir acesso à sua administração financeira. Gostaria de autorizar :client a aceder a esses registos?', + 'authorization_request_site' => 'Será redirecionado para :url o qual será capaz de aceder aos seus dados do Firefly III.', + 'authorization_request_invalid' => 'Este pedido de acesso é inválido. Por favor, não siga este link novamente.', + 'scopes_will_be_able' => 'Esta aplicação será capaz de:', + 'button_authorize' => 'Autorizar', + 'none_in_select_list' => '(nenhum)', + 'no_piggy_bank' => '(nenhum mealheiro)', + 'name_in_currency' => ':name em :currency', + 'paid_in_currency' => 'Pago em :currency', + 'unpaid_in_currency' => 'Por pagar em :currency', + 'is_alpha_warning' => 'Está a executar uma versão ALPHA. Cuidado com bugs e problemas.', + 'is_beta_warning' => 'Está a executar uma versão BETA. Cuidado com bugs e problemas.', + 'all_destination_accounts' => 'Contas de destino', + 'all_source_accounts' => 'Contas de origem', + 'back_to_index' => 'Voltar para o índice', + 'cant_logout_guard' => 'O Firefly III não consegue terminar a sua sessão.', + 'internal_reference' => 'Referência interna', // check for updates: - 'update_check_title' => 'Procurar atualizações', - 'admin_update_check_title' => 'Procurar atualizações automaticamente', - 'admin_update_check_explain' => 'Firefly III pode verificar actualizações automaticamente. Ao activar esta opção, ele entrará em contacto com o servidor de atualização do Firefly III para ver se uma nova versão está disponível. Quando estiver, receberá uma notificação. Pode testar esta notificação utilizando o botão à direita. Indique abaixo se quer que o Firefly III verifique se há atualizações.', - 'check_for_updates_permission' => 'O Firefly III pode procurar por atualizações, mas necessita da sua permissão para isso. Por favor, dirija-se a administração para indicar se gostaria de ter esta funcionalidade ativa.', - 'updates_ask_me_later' => 'Perguntar-me mais tarde', - 'updates_do_not_check' => 'Não procurar por atualizações', - 'updates_enable_check' => 'Ativar a procura por atualizações', - 'admin_update_check_now_title' => 'Procurar por atualizações agora', - 'admin_update_check_now_explain' => 'Se premir o botão, o Firefly III verificará se a versão atual é a mais recente.', - 'check_for_updates_button' => 'Verificar agora!', - 'update_new_version_alert' => 'Está disponível uma versão nova do Firefly III. Está a usar a versão :your_version, a versão mais recente é :new_version que foi lançada em :date.', - 'update_version_beta' => 'Esta versão é BETA. Pode ter problemas.', - 'update_version_alpha' => 'Esta versão é ALPHA. Pode ter problemas.', - 'update_current_version_alert' => 'Está a executar :version, que é a última versão disponível.', - 'update_newer_version_alert' => 'Está a executar :your_version, que é mais recente que a última versão, :new_version.', - 'update_check_error' => 'Ocorreu um erro durante a verificação de atualizações: :error', - 'unknown_error' => 'Erro desconhecido. Pedimos desculpa.', - 'just_new_release' => 'Está disponível uma nova versão! A versão :version foi lançada a :date. Esta versão é muito recente. Aguarde alguns dias para que a nova versão estabilize.', - 'disabled_but_check' => 'Desativou a verificação de atualizações. Mas, não se esqueça de verificar se há atualizações de vez em quando. Obrigado!', - 'admin_update_channel_title' => 'Atualizar canal', - 'admin_update_channel_explain' => 'O Firefly III tem três "canais" de atualizações que determinam o quão há frente você está em termos de funcionalidades, melhorias e erros. Utilize o canal "beta" se gostar de aventuras e o "alpha" se gostar de viver a vida ao limite.', - 'update_channel_stable' => 'Estável. Deve estar a funcionar como esperado.', - 'update_channel_beta' => 'Beta. Novas funcionalidades, mas as algumas coisas podem ter problemas.', - 'update_channel_alpha' => 'Alfa. Fazemos o que vier, e o que ficar fica.', + 'update_check_title' => 'Procurar atualizações', + 'admin_update_check_title' => 'Procurar atualizações automaticamente', + 'admin_update_check_explain' => 'Firefly III pode verificar actualizações automaticamente. Ao activar esta opção, ele entrará em contacto com o servidor de atualização do Firefly III para ver se uma nova versão está disponível. Quando estiver, receberá uma notificação. Pode testar esta notificação utilizando o botão à direita. Indique abaixo se quer que o Firefly III verifique se há atualizações.', + 'check_for_updates_permission' => 'O Firefly III pode procurar por atualizações, mas necessita da sua permissão para isso. Por favor, dirija-se a administração para indicar se gostaria de ter esta funcionalidade ativa.', + 'updates_ask_me_later' => 'Perguntar-me mais tarde', + 'updates_do_not_check' => 'Não procurar por atualizações', + 'updates_enable_check' => 'Ativar a procura por atualizações', + 'admin_update_check_now_title' => 'Procurar por atualizações agora', + 'admin_update_check_now_explain' => 'Se premir o botão, o Firefly III verificará se a versão atual é a mais recente.', + 'check_for_updates_button' => 'Verificar agora!', + 'update_new_version_alert' => 'Está disponível uma versão nova do Firefly III. Está a usar a versão :your_version, a versão mais recente é :new_version que foi lançada em :date.', + 'update_version_beta' => 'Esta versão é BETA. Pode ter problemas.', + 'update_version_alpha' => 'Esta versão é ALPHA. Pode ter problemas.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Está a executar :version, que é a última versão disponível.', + 'update_newer_version_alert' => 'Está a executar :your_version, que é mais recente que a última versão, :new_version.', + 'update_check_error' => 'Ocorreu um erro durante a verificação de atualizações: :error', + 'unknown_error' => 'Erro desconhecido. Pedimos desculpa.', + 'disabled_but_check' => 'Desativou a verificação de atualizações. Mas, não se esqueça de verificar se há atualizações de vez em quando. Obrigado!', + 'admin_update_channel_title' => 'Atualizar canal', + 'admin_update_channel_explain' => 'O Firefly III tem três "canais" de atualizações que determinam o quão há frente você está em termos de funcionalidades, melhorias e erros. Utilize o canal "beta" se gostar de aventuras e o "alpha" se gostar de viver a vida ao limite.', + 'update_channel_stable' => 'Estável. Deve estar a funcionar como esperado.', + 'update_channel_beta' => 'Beta. Novas funcionalidades, mas as algumas coisas podem ter problemas.', + 'update_channel_alpha' => 'Alfa. Fazemos o que vier, e o que ficar fica.', // search - 'search' => 'Procurar', - 'search_query' => 'Pesquisa', - 'search_found_transactions' => 'Firefly III encontrou :count transacção em :time segundos.|Firefly III encontrou :count transacções em :time segundos.', - 'search_found_more_transactions' => 'Firefly III encontrou mais de :count transacções em :time segundos.', - 'search_for_query' => 'O Firefly III está à procura de transacções com as palavras: :query', - 'invalid_operators_list' => 'Estes parâmetros de pesquisa não são válidos e foram ignorados.', + 'search' => 'Procurar', + 'search_query' => 'Pesquisa', + 'search_found_transactions' => 'Firefly III encontrou :count transacção em :time segundos.|Firefly III encontrou :count transacções em :time segundos.', + 'search_found_more_transactions' => 'Firefly III encontrou mais de :count transacções em :time segundos.', + 'search_for_query' => 'O Firefly III está à procura de transacções com as palavras: :query', + 'invalid_operators_list' => 'Estes parâmetros de pesquisa não são válidos e foram ignorados.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'A data da transação é ":value"', 'search_modifier_not_date_on' => 'A data da transação não é ":value"', 'search_modifier_reconciled' => 'Transação reconciliada', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Tipo de transacção é ":value"', 'search_modifier_not_transaction_type' => 'O tipo de transação não é ":value"', 'search_modifier_tag_is' => 'A etiqueta é ":value"', + 'search_modifier_tag_contains' => 'A etiqueta contem ":value"', + 'search_modifier_not_tag_contains' => 'A etiqueta não contêm ":value"', + 'search_modifier_tag_ends' => 'A etiqueta acaba com ":value"', + 'search_modifier_tag_starts' => 'A etiqueta começa com ":value"', 'search_modifier_not_tag_is' => 'Nenhuma etiqueta é ":value"', 'search_modifier_date_on_year' => 'A transação é do ano ":value"', 'search_modifier_not_date_on_year' => 'A transação não é no ano ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'A transação é no ou depois do mês ":value"', 'search_modifier_date_after_day' => 'A transação é depois ou no dia do mês ":value"', - // new 'search_modifier_tag_is_not' => 'Nenhuma etiqueta é ":value"', 'search_modifier_not_tag_is_not' => 'A etiqueta é ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Os seguintes modificadores também são aplicados à pesquisa:', 'general_search_error' => 'Ocorreu um erro ao procurar. Por favor, verifique os arquivos de log para mais informações.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Não', 'cannot_fire_inactive_rules' => 'Não pode executar regras inativas.', + 'show_triggers' => 'Mostrar gatilhos', + 'show_actions' => 'Mostrar ações', 'rules' => 'Regras', 'rule_name' => 'Nome da regra', 'rule_triggers' => 'Regra dispara quando', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Quando uma transação é atualizada', 'rule_trigger_user_action' => 'A ação de utilizador é ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'O nome da conta de origem começa com..', 'rule_trigger_source_account_starts' => 'O nome da conta de origem começa com ":trigger_value"', @@ -864,12 +868,12 @@ return [ 'rule_trigger_transaction_type' => 'Transação é do tipo ":trigger_value"', 'rule_trigger_category_is_choice' => 'A categoria é..', 'rule_trigger_category_is' => 'A categoria é ":trigger_value"', - 'rule_trigger_amount_less_choice' => 'Amount is less than or equal to ..', - 'rule_trigger_amount_less' => 'Amount is less than or equal to :trigger_value', + 'rule_trigger_amount_less_choice' => 'Quantidade é menor ou igual a ..', + 'rule_trigger_amount_less' => 'Quantidade é menor ou igual a :trigger_value', 'rule_trigger_amount_is_choice' => 'O montante é..', 'rule_trigger_amount_is' => 'O montante é :trigger_value', - 'rule_trigger_amount_more_choice' => 'Amount is more than or equal to..', - 'rule_trigger_amount_more' => 'Amount is more than or equal to :trigger_value', + 'rule_trigger_amount_more_choice' => 'Quantidade é maior ou igual a..', + 'rule_trigger_amount_more' => 'Quantidade é maior ou igual a :trigger_value', 'rule_trigger_description_starts_choice' => 'A descrição começa com..', 'rule_trigger_description_starts' => 'A descrição começa com ":trigger_value"', 'rule_trigger_description_ends_choice' => 'A descrição termina com..', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'O orçamento é ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Uma etiqueta é..', 'rule_trigger_tag_is' => 'Qualquer etiqueta é ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'A moeda da transação é..', 'rule_trigger_currency_is' => 'A moeda da transação é ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'A moeda estrangeira da transação é..', @@ -934,14 +944,14 @@ return [ 'rule_trigger_internal_reference_is' => 'A referência interna é ":trigger_value"', 'rule_trigger_journal_id_choice' => 'O ID do diário de transações é..', 'rule_trigger_journal_id' => 'O ID do diário de transações é ":trigger_value"', - 'rule_trigger_any_external_url' => 'Transaction has an (any) external URL', - 'rule_trigger_any_external_url_choice' => 'Transaction has an (any) external URL', - 'rule_trigger_any_external_id' => 'Transaction has an (any) external ID', - 'rule_trigger_any_external_id_choice' => 'Transaction has an (any) external ID', + 'rule_trigger_any_external_url' => 'A transação tem um (qualquer) URL externo', + 'rule_trigger_any_external_url_choice' => 'A transação tem um (qualquer) URL externo', + 'rule_trigger_any_external_id' => 'A transação tem um (qualquer) ID externo', + 'rule_trigger_any_external_id_choice' => 'A transação tem um (qualquer) ID externo', 'rule_trigger_no_external_url_choice' => 'A transação não tem nenhum URL externo', 'rule_trigger_no_external_url' => 'A transação não tem nenhum URL externo', - 'rule_trigger_no_external_id_choice' => 'Transaction has no external ID', - 'rule_trigger_no_external_id' => 'Transaction has no external ID', + 'rule_trigger_no_external_id_choice' => 'A transação não tem ID externo', + 'rule_trigger_no_external_id' => 'A transação não tem ID externo', 'rule_trigger_id_choice' => 'ID da transação é..', 'rule_trigger_id' => 'O ID da transação é ":trigger_value"', 'rule_trigger_sepa_ct_is_choice' => 'SEPA CT é..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'A transação não existe', 'rule_trigger_not_has_attachments' => 'A transação não tem anexos', 'rule_trigger_not_has_any_category' => 'A transação não tem categoria', - 'rule_trigger_not_has_any_budget' => 'A transação não tem categoria', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'A transação não tem encargos', 'rule_trigger_not_has_any_tag' => 'A transação não tem etiquetas', 'rule_trigger_not_any_notes' => 'A transação não tem notas', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'A conta de destino não é uma conta de caixa', 'rule_trigger_not_account_is_cash' => 'Nenhuma das contas é uma conta de caixa', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'APAGAR transação(!)', @@ -1260,8 +1269,8 @@ return [ 'rule_action_set_notes_choice' => 'Atribuir as notas..', 'rule_action_link_to_bill_choice' => 'Ligar a encargo..', 'rule_action_link_to_bill' => 'Ligar a um encargo ":action_value"', - 'rule_action_switch_accounts_choice' => 'Switch source and destination accounts (transfers only!)', - 'rule_action_switch_accounts' => 'Switch source and destination', + 'rule_action_switch_accounts_choice' => 'Trocar a conta de origem e de destino (apenas para transferências!)', + 'rule_action_switch_accounts' => 'Trocar origem e destino', 'rule_action_set_notes' => 'Defina notas para ":action_value"', 'rule_action_convert_deposit_choice' => 'Converter a transação num depósito', 'rule_action_convert_deposit' => 'Converter a transação para um depósito a partir de ":action_value"', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Acrescentar notas à descrição', 'rule_action_move_descr_to_notes' => 'Substituir notas por descrição', 'rule_action_move_notes_to_descr' => 'Substituir descrição por notas', + 'rule_action_set_destination_to_cash_choice' => 'Definir a conta de destino para (cash)', + 'rule_action_set_source_to_cash_choice' => 'Definir a conta de origem para (cash)', 'rulegroup_for_bills_title' => 'Grupo de regras para encargos', 'rulegroup_for_bills_description' => 'Um grupo especial de regras para todas as regras que envolvem encargos.', 'rule_for_bill_title' => 'Regra gerada automaticamente para o encargo ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Regra para o encargo ":name"', 'new_rule_for_bill_description' => 'Esta regra marca as transações para o encargo ":name".', - 'new_rule_for_journal_title' => 'Regra baseada na transação ":description"', - 'new_rule_for_journal_description' => 'A regra é baseada na transação ":description". Ou seja, a regra vai ser aplicada a todas as transações iguais.', + 'new_rule_for_journal_title' => 'Regra baseada na transação ":description"', + 'new_rule_for_journal_description' => 'A regra é baseada na transação ":description". Ou seja, a regra vai ser aplicada a todas as transações iguais.', // tags - 'store_new_tag' => 'Gravar nova etiqueta', - 'update_tag' => 'Atualizar etiqueta', - 'no_location_set' => 'Sem localização definida.', - 'meta_data' => 'Meta dados', - 'location' => 'Localização', - 'without_date' => 'Sem data', - 'result' => 'Resultado', - 'sums_apply_to_range' => 'Todas as somas aplicam-se ao intervalo selecionado', - 'mapbox_api_key' => 'Para usar o mapa, arranje uma chave de API do Mapbox. Abra o seu ficheiro .env e adicione essa chave a seguir a MAPBOX_API_KEY=.', - 'press_object_location' => 'Clique com o botão direito ou pressione longamente para definir o local do objeto.', - 'clear_location' => 'Limpar localização', - 'delete_all_selected_tags' => 'Excluir todas as etiquetas selecionadas', - 'select_tags_to_delete' => 'Não se esqueça de selecionar algumas etiquetas.', - 'deleted_x_tags' => 'Apagada :count etiqueta.|Apagadas :count etiquetas.', - 'create_rule_from_transaction' => 'Criar regra com base na transação', - 'create_recurring_from_transaction' => 'Criar transação recorrente com base na transação', - + 'store_new_tag' => 'Gravar nova etiqueta', + 'update_tag' => 'Atualizar etiqueta', + 'no_location_set' => 'Sem localização definida.', + 'meta_data' => 'Meta dados', + 'location' => 'Localização', + 'location_first_split' => 'O local desta transação pode ser definido na primeira divisão desta transação.', + 'without_date' => 'Sem data', + 'result' => 'Resultado', + 'sums_apply_to_range' => 'Todas as somas aplicam-se ao intervalo selecionado', + 'mapbox_api_key' => 'Para usar o mapa, arranje uma chave de API do Mapbox. Abra o seu ficheiro .env e adicione essa chave a seguir a MAPBOX_API_KEY=.', + 'press_object_location' => 'Clique com o botão direito ou pressione longamente para definir o local do objeto.', + 'click_tap_location' => 'Carregue ou clique no mapa para adicionar uma localização', + 'clear_location' => 'Limpar localização', + 'delete_all_selected_tags' => 'Excluir todas as etiquetas selecionadas', + 'select_tags_to_delete' => 'Não se esqueça de selecionar algumas etiquetas.', + 'deleted_x_tags' => 'Apagada :count etiqueta.|Apagadas :count etiquetas.', + 'create_rule_from_transaction' => 'Criar regra com base na transação', + 'create_recurring_from_transaction' => 'Criar transação recorrente com base na transação', // preferences - 'dark_mode_option_browser' => 'Deixe o seu navegador decidir', - 'dark_mode_option_light' => 'Sempre claro', - 'dark_mode_option_dark' => 'Sempre escuro', - 'equal_to_language' => '(igual ao idioma)', - 'dark_mode_preference' => 'Modo escuro', - 'dark_mode_preference_help' => 'Diga ao Firefly III quando usar o modo escuro.', - 'pref_home_screen_accounts' => 'Contas do ecrã inicial', - 'pref_home_screen_accounts_help' => 'Que contas devem ser mostradas na página principal?', - 'pref_view_range' => 'Ver intervalo', - 'pref_view_range_help' => 'Alguns gráficos são automaticamente agrupados por períodos. Os seus orçamentos serão também agrupados em períodos. Que período prefere?', - 'pref_1D' => 'Um dia', - 'pref_1W' => 'Uma semana', - 'pref_1M' => 'Um mês', - 'pref_3M' => 'Três meses (trimestre)', - 'pref_6M' => 'Seis meses', - 'pref_1Y' => 'Um ano', - 'pref_last365' => 'No ano passado', - 'pref_last90' => 'Últimos 90 dias', - 'pref_last30' => 'Últimos 30 dias', - 'pref_last7' => 'Últimos 7 dias', - 'pref_YTD' => 'Ano corrente', - 'pref_QTD' => 'Trimestre corrente', - 'pref_MTD' => 'Mês corrente', - 'pref_languages' => 'Idiomas', - 'pref_locale' => 'Definições regionais', - 'pref_languages_help' => 'O Firefly III suporta vários idiomas. Qual prefere?', - 'pref_locale_help' => 'O Firefly III permite definir configurações regionais, tais como o formato das moedas, números ou datas. Os elementos nesta lista podem não ser suportados pelo seu sistema. O Firefly III não têm as definições de datas corretas para todos as regiões; contacte-me para melhorias.', - 'pref_locale_no_demo' => 'Esta funcionalidade não funciona para o utilizador de demonstração.', - 'pref_custom_fiscal_year' => 'Definições do ano fiscal', - 'pref_custom_fiscal_year_label' => 'Ativado', - 'pref_custom_fiscal_year_help' => 'Para países que usam ano fiscal diferente de 1 de janeiro a 31 de dezembro, pode alterar estas datas para começarem em acabarem nos dias de início e fim corretos', - 'pref_fiscal_year_start_label' => 'Data de início do ano fiscal', - 'pref_two_factor_auth' => 'Verificação de 2 passos', - 'pref_two_factor_auth_help' => 'Quando ativa a autenticação em 2 passos (também conhecida por autenticação de 2 fatores), adiciona uma camada extra de segurança à sua conta. Pode iniciar sessão com algo que você conhece (a sua palavra-passe) e com algo que tem (um código de verificação). Os códigos de verificação são gerados por uma aplicação no seu telemóvel tais como, a Authy ou o Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Ativar verificação de 2 passos', - 'pref_two_factor_auth_disabled' => 'Código de verificação de 2 passos removido e desativado', - 'pref_two_factor_auth_remove_it' => 'Não se esqueça de remover a conta da sua aplicação de autenticação!', - 'pref_two_factor_auth_code' => 'Código de verificação', - 'pref_two_factor_auth_code_help' => 'Leia o código QR com uma aplicação como a Authy ou o Google Authenticator e depois introduza o código gerado.', - 'pref_two_factor_auth_reset_code' => 'Repor código de verificação', - 'pref_two_factor_auth_disable_2fa' => 'Desativar 2FA', - '2fa_use_secret_instead' => 'Se não conseguir ler o código QR, sinta-se livre de utilizar um segredo em alternativa: :secret.', - '2fa_backup_codes' => 'Guarde estes códigos de backup para acesso, caso perca o seu dispositivo.', - '2fa_already_enabled' => 'A verificação de 2 passos já está ativada.', - 'wrong_mfa_code' => 'Esse código MFA não é válido.', - 'pref_save_settings' => 'Guardar definições', - 'saved_preferences' => 'Preferências guardadas!', - 'preferences_general' => 'Geral', - 'preferences_frontpage' => 'Ecrã inicial', - 'preferences_security' => 'Segurança', - 'preferences_layout' => 'Disposição', - 'preferences_notifications' => 'Notificações', - 'pref_home_show_deposits' => 'Mostrar depósitos no ecrã inicial', - 'pref_home_show_deposits_info' => 'O ecrã inicial já mostra as contas de despesas. Deveria também mostrar as receitas?', - 'pref_home_do_show_deposits' => 'Sim, mostrar', - 'successful_count' => 'dos quais :count bem sucedido(s)', - 'list_page_size_title' => 'Tamanho da página', - 'list_page_size_help' => 'Qualquer lista de coisas (contas, transações, etc.) mostra, no máximo, este número por página.', - 'list_page_size_label' => 'Tamanho da página', - 'between_dates' => '(:start e :end)', - 'pref_optional_fields_transaction' => 'Campos opcionais para transacções', - 'pref_optional_fields_transaction_help' => 'Por defeito, nem todos os campos estão habilitados ao criar uma nova transacção (para não atrapalhar). Abaixo, pode habilitar os campos se achar que eles podem lhe úteis. Claro, qualquer campo que estiver desabilitado, mas já preenchido, será visível independente da configuração.', - 'optional_tj_date_fields' => 'Campos de data', - 'optional_tj_other_fields' => 'Outros campos', - 'optional_tj_attachment_fields' => 'Campos de anexo', - 'pref_optional_tj_interest_date' => 'Data de juros', - 'pref_optional_tj_book_date' => 'Data do agendamento', - 'pref_optional_tj_process_date' => 'Data de processamento', - 'pref_optional_tj_due_date' => 'Data de vencimento', - 'pref_optional_tj_payment_date' => 'Data de pagamento', - 'pref_optional_tj_invoice_date' => 'Data da fatura', - 'pref_optional_tj_internal_reference' => 'Referência interna', - 'pref_optional_tj_notes' => 'Notas', - 'pref_optional_tj_attachments' => 'Anexos', - 'pref_optional_tj_external_url' => 'URL externo', - 'pref_optional_tj_location' => 'Localização', - 'pref_optional_tj_links' => 'Links transacionais', - 'optional_field_meta_dates' => 'Datas', - 'optional_field_meta_business' => 'Empresariais', - 'optional_field_attachments' => 'Anexos', - 'optional_field_meta_data' => 'Meta data opcional', - 'external_url' => 'URL Externo', - 'pref_notification_bill_reminder' => 'Lembrete sobre encargos a expirar', - 'pref_notification_new_access_token' => 'Alerta quando é criado um token da API', - 'pref_notification_transaction_creation' => 'Alerta quando é criada uma transação de forma automática', - 'pref_notification_user_login' => 'Alerta quando inicia sessão a partir de uma nova localização', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notificações', - 'pref_notifications_help' => 'Diga se não quiser receber algumas destas notificações. Algumas notificações podem conter informação financeira sensível.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'Se quiser que o Firefly III o notifique via Slack, introduza o URL do webhook aqui. Caso contrário, deixe o campo em branco. Se for um administrador, também tem de definir este URL na administração.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Deixe o seu navegador decidir', + 'dark_mode_option_light' => 'Sempre claro', + 'dark_mode_option_dark' => 'Sempre escuro', + 'equal_to_language' => '(igual ao idioma)', + 'dark_mode_preference' => 'Modo escuro', + 'dark_mode_preference_help' => 'Diga ao Firefly III quando usar o modo escuro.', + 'pref_home_screen_accounts' => 'Contas do ecrã inicial', + 'pref_home_screen_accounts_help' => 'Que contas devem ser mostradas na página principal?', + 'pref_view_range' => 'Ver intervalo', + 'pref_view_range_help' => 'Alguns gráficos são automaticamente agrupados por períodos. Os seus orçamentos serão também agrupados em períodos. Que período prefere?', + 'pref_1D' => 'Um dia', + 'pref_1W' => 'Uma semana', + 'pref_1M' => 'Um mês', + 'pref_3M' => 'Três meses (trimestre)', + 'pref_6M' => 'Seis meses', + 'pref_1Y' => 'Um ano', + 'pref_last365' => 'No ano passado', + 'pref_last90' => 'Últimos 90 dias', + 'pref_last30' => 'Últimos 30 dias', + 'pref_last7' => 'Últimos 7 dias', + 'pref_YTD' => 'Ano corrente', + 'pref_QTD' => 'Trimestre corrente', + 'pref_MTD' => 'Mês corrente', + 'pref_languages' => 'Idiomas', + 'pref_locale' => 'Definições regionais', + 'pref_languages_help' => 'O Firefly III suporta vários idiomas. Qual prefere?', + 'pref_locale_help' => 'O Firefly III permite definir configurações regionais, tais como o formato das moedas, números ou datas. Os elementos nesta lista podem não ser suportados pelo seu sistema. O Firefly III não têm as definições de datas corretas para todos as regiões; contacte-me para melhorias.', + 'pref_locale_no_demo' => 'Esta funcionalidade não funciona para o utilizador de demonstração.', + 'pref_custom_fiscal_year' => 'Definições do ano fiscal', + 'pref_custom_fiscal_year_label' => 'Ativado', + 'pref_custom_fiscal_year_help' => 'Para países que usam ano fiscal diferente de 1 de janeiro a 31 de dezembro, pode alterar estas datas para começarem em acabarem nos dias de início e fim corretos', + 'pref_fiscal_year_start_label' => 'Data de início do ano fiscal', + 'pref_two_factor_auth' => 'Verificação de 2 passos', + 'pref_two_factor_auth_help' => 'Quando ativa a autenticação em 2 passos (também conhecida por autenticação de 2 fatores), adiciona uma camada extra de segurança à sua conta. Pode iniciar sessão com algo que você conhece (a sua palavra-passe) e com algo que tem (um código de verificação). Os códigos de verificação são gerados por uma aplicação no seu telemóvel tais como, a Authy ou o Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Ativar verificação de 2 passos', + 'pref_two_factor_auth_disabled' => 'Código de verificação de 2 passos removido e desativado', + 'pref_two_factor_auth_remove_it' => 'Não se esqueça de remover a conta da sua aplicação de autenticação!', + 'pref_two_factor_auth_code' => 'Código de verificação', + 'pref_two_factor_auth_code_help' => 'Leia o código QR com uma aplicação como a Authy ou o Google Authenticator e depois introduza o código gerado.', + 'pref_two_factor_auth_reset_code' => 'Repor código de verificação', + 'pref_two_factor_auth_disable_2fa' => 'Desativar 2FA', + '2fa_use_secret_instead' => 'Se não conseguir ler o código QR, sinta-se livre de utilizar um segredo em alternativa: :secret.', + '2fa_backup_codes' => 'Guarde estes códigos de backup para acesso, caso perca o seu dispositivo.', + '2fa_already_enabled' => 'A verificação de 2 passos já está ativada.', + 'wrong_mfa_code' => 'Esse código MFA não é válido.', + 'pref_save_settings' => 'Guardar definições', + 'saved_preferences' => 'Preferências guardadas!', + 'preferences_general' => 'Geral', + 'preferences_frontpage' => 'Ecrã inicial', + 'preferences_security' => 'Segurança', + 'preferences_layout' => 'Disposição', + 'preferences_notifications' => 'Notificações', + 'pref_home_show_deposits' => 'Mostrar depósitos no ecrã inicial', + 'pref_home_show_deposits_info' => 'O ecrã inicial já mostra as contas de despesas. Deveria também mostrar as receitas?', + 'pref_home_do_show_deposits' => 'Sim, mostrar', + 'successful_count' => 'dos quais :count bem sucedido(s)', + 'list_page_size_title' => 'Tamanho da página', + 'list_page_size_help' => 'Qualquer lista de coisas (contas, transações, etc.) mostra, no máximo, este número por página.', + 'list_page_size_label' => 'Tamanho da página', + 'between_dates' => '(:start e :end)', + 'pref_optional_fields_transaction' => 'Campos opcionais para transacções', + 'pref_optional_fields_transaction_help' => 'Por defeito, nem todos os campos estão habilitados ao criar uma nova transacção (para não atrapalhar). Abaixo, pode habilitar os campos se achar que eles podem lhe úteis. Claro, qualquer campo que estiver desabilitado, mas já preenchido, será visível independente da configuração.', + 'optional_tj_date_fields' => 'Campos de data', + 'optional_tj_other_fields' => 'Outros campos', + 'optional_tj_attachment_fields' => 'Campos de anexo', + 'pref_optional_tj_interest_date' => 'Data de juros', + 'pref_optional_tj_book_date' => 'Data do agendamento', + 'pref_optional_tj_process_date' => 'Data de processamento', + 'pref_optional_tj_due_date' => 'Data de vencimento', + 'pref_optional_tj_payment_date' => 'Data de pagamento', + 'pref_optional_tj_invoice_date' => 'Data da fatura', + 'pref_optional_tj_internal_reference' => 'Referência interna', + 'pref_optional_tj_notes' => 'Notas', + 'pref_optional_tj_attachments' => 'Anexos', + 'pref_optional_tj_external_url' => 'URL externo', + 'pref_optional_tj_location' => 'Localização', + 'pref_optional_tj_links' => 'Links transacionais', + 'optional_field_meta_dates' => 'Datas', + 'optional_field_meta_business' => 'Empresariais', + 'optional_field_attachments' => 'Anexos', + 'optional_field_meta_data' => 'Meta data opcional', + 'external_url' => 'URL Externo', + 'pref_notification_bill_reminder' => 'Lembrete sobre encargos a expirar', + 'pref_notification_new_access_token' => 'Alerta quando é criado um token da API', + 'pref_notification_transaction_creation' => 'Alerta quando é criada uma transação de forma automática', + 'pref_notification_user_login' => 'Alerta quando inicia sessão a partir de uma nova localização', + 'pref_notification_rule_action_failures' => 'Alertar quando uma regra não consegue executar (apenas Slack ou Discord)', + 'pref_notifications' => 'Notificações', + 'pref_notifications_help' => 'Diga se não quiser receber algumas destas notificações. Algumas notificações podem conter informação financeira sensível.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'Se quiser que o Firefly III o notifique via Slack, introduza o URL do webhook aqui. Caso contrário, deixe o campo em branco. Se for um administrador, também tem de definir este URL na administração.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Administração financeira', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Administração financeira', + 'administrations_index_menu' => 'Administração financeira', // profile: - 'purge_data_title' => 'Purgue dados do Firefly III', - 'purge_data_expl' => '"Purgar" significa "apagar o que já foi apagado". Em circunstâncias normais, o Firefly III não apaga nada de forma definitiva. Apenas esconde. O botão abaixo apaga todos esses registos anteriormente "apagados" PARA SEMPRE.', - 'delete_stuff_header' => 'Apagar e purgar dados', - 'purge_all_data' => 'Purgar todos os registos apagados', - 'purge_data' => 'Purgar dados', - 'purged_all_records' => 'Todos os registos apagados foram purgados.', - 'delete_data_title' => 'Apagar dados do Firefly III', - 'permanent_delete_stuff' => 'Pode apagar coisas do Firefly III. Usando os botões abaixo fará com que os seus itens sejam removidos da visualização e escondidos. Não há botão de anular para isto, mas os itens permanecem na base de dados e poderá recuperá-los se necessário.', - 'other_sessions_logged_out' => 'Todas as outras sessões foram desconectadas.', - 'delete_unused_accounts' => 'Apagar contas não utilizadas irá limpar as suas listas de preenchimento automático.', - 'delete_all_unused_accounts' => 'Apagar contas não utilizadas', - 'deleted_all_unused_accounts' => 'Todas as contas não usadas foram apagadas', - 'delete_all_budgets' => 'Apagar TODOS os orçamentos', - 'delete_all_categories' => 'Apagar TODAS as categorias', - 'delete_all_tags' => 'Apagar TODAS as etiquetas', - 'delete_all_bills' => 'Apagar TODAS as faturas', - 'delete_all_piggy_banks' => 'Apagar todos os mealheiros', - 'delete_all_rules' => 'Apagar TODAS as regras', - 'delete_all_recurring' => 'Apagar TODAS as transacções recorrentes', - 'delete_all_object_groups' => 'Apagar TODOS os grupos de objectos', - 'delete_all_accounts' => 'Apagar TODAS as contas', - 'delete_all_asset_accounts' => 'Apagar TODAS as contas de activos', - 'delete_all_expense_accounts' => 'Apagar TODAS as contas de despesas', - 'delete_all_revenue_accounts' => 'Apagar TODOS as contas de receita', - 'delete_all_liabilities' => 'Apagar TODOS os passivos', - 'delete_all_transactions' => 'Apagar TODAS as suas transacções', - 'delete_all_withdrawals' => 'Apagar TODOS os levantamentos', - 'delete_all_deposits' => 'Apagar TODOS os depósitos', - 'delete_all_transfers' => 'Apagar TODOS as transferências', - 'also_delete_transactions' => 'Apagar a conta também apaga TODOS os levantamentos, depósitos e transferências associadas!', - 'deleted_all_budgets' => 'Todos os orçamentos foram apagados', - 'deleted_all_categories' => 'Todas as categorias foram apagadas', - 'deleted_all_tags' => 'Todas as etiquetas foram apagadas', - 'deleted_all_bills' => 'Todos os encargos foram apagados', - 'deleted_all_piggy_banks' => 'Todos os mealheiros foram apagados', - 'deleted_all_rules' => 'Todas as regras e grupos de regras foram apagadas', - 'deleted_all_object_groups' => 'Todos os grupos foram apagados', - 'deleted_all_accounts' => 'Todas as contas foram apagadas', - 'deleted_all_asset_accounts' => 'Todas as contas de ativos foram apagadas', - 'deleted_all_expense_accounts' => 'Todas as contas de despesas foram apagadas', - 'deleted_all_revenue_accounts' => 'Todas as contas de receita foram apagadas', - 'deleted_all_liabilities' => 'Todos os passivos foram apagados', - 'deleted_all_transactions' => 'Todas as transacções foram apagadas', - 'deleted_all_withdrawals' => 'Todas os levantamentos foram apagados', - 'deleted_all_deposits' => 'Todos os depósitos foram apagados', - 'deleted_all_transfers' => 'Todas as transferências foram apagadas', - 'deleted_all_recurring' => 'Todas as transacções recorrentes foram apagadas', - 'change_your_password' => 'Altere a sua palavra-passe', - 'delete_account' => 'Apagar conta de utilizador', - 'current_password' => 'Palavra-passe atual', - 'new_password' => 'Nova palavra-passe', - 'new_password_again' => 'Nova palavra-passe (novamente)', - 'delete_your_account' => 'Apagar a conta', - 'delete_your_account_help' => 'Apagar a sua conta Firefly III apaga também todas as contas, transações, tudo o que está guardado no Firefly III. Isso será perdido.', - 'delete_your_account_password' => 'Introduza a sua palavra-passe para continuar.', - 'password' => 'Palavra-passe', - 'are_you_sure' => 'Tem a certeza? Não pode anular esta ação.', - 'delete_account_button' => 'APAGAR a sua conta', - 'invalid_current_password' => 'Palavra-passe atual inválida!', - 'password_changed' => 'Palavra-passe alterada!', - 'should_change' => 'A ideia é alterar palavra-passe.', - 'invalid_password' => 'Palavra-passe inválida!', - 'what_is_pw_security' => 'O que é "verificar segurança da palavra-passe"?', - 'secure_pw_title' => 'Como escolher uma palavra-passe segura', - 'forgot_password_response' => 'Obrigado. Se existir uma conta com este endereço de email, encontrará as instruções na sua caixa de entrada.', - 'secure_pw_history' => 'Não há semana em que não se leia nas notícias sobre sites perderem as palavras-passe dos utilizadores. Hackers e ladrões usam essas palavras-passe para tentar roubar a sua informação pessoal. Essa informação é valiosa.', - 'secure_pw_ff' => 'Utiliza a mesma palavra-passe para tudo na Internet? Se um site perder a sua palavra-passe, os hackers ganham acesso a todos os seus dados. O Firefly III depende de uma palavra-passe forte e única para poder proteger toda a sua informação financeira.', - 'secure_pw_check_box' => 'Para ajudá-lo o Firefly III pode verificar se a palavra-passe que pretende usar já foi roubada no passado. Se for esse o caso, o Firefly III recomenda que não a utilize.', - 'secure_pw_working_title' => 'Como funciona?', - 'secure_pw_working' => 'Ao marcar a caixa, o Firefly III enviará os cinco primeiros carateres do hash SHA1 da sua palavra-passe para o website Troy Hunt para confirmar se está na lista. Assim consegue impedi-lo de usar palavras-passe inseguras, como é recomendado na última publicação NIST Special sobre o assunto.', - 'secure_pw_should' => 'Devo marcar a caixa?', - 'secure_pw_long_password' => 'Sim. Verifique sempre se a sua palavra-passe é segura.', - 'command_line_token' => 'Token de linha de comando', - 'explain_command_line_token' => 'É necessário um token para executar opções de linha de comando, tais como exportar dados. Sem isso, os comandos inseridos não funcionarão. Não partilhe o seu token da linha de comandos com ninguém. Nunca ninguém, nem mesmo eu, alguma vez lhe pediremos esse token. Se sentir que o perdeu, ou se sentir paranoico, pode substituir o mesmo usando o botão.', - 'regenerate_command_line_token' => 'Recriar token de linha de comando', - 'token_regenerated' => 'Um novo token de linha de comando foi criado', - 'change_your_email' => 'Alterar o seu email', - 'email_verification' => 'Será enviada uma mensagem de email para os seus endereços de email ANTIGO E NOVO. Por razões de segurança, não será capaz de iniciar sessão até confirmar o seu novo endereço de email. Se não tem a certeza se a sua instalação do Firefly III é capaz de enviar emails, por favor não utilize esta funcionalidade. Se é um administrador, pode testá-la na Administração.', - 'email_changed_logout' => 'Até verificar o seu endereço de e-mail, não poderá iniciar sessão.', - 'login_with_new_email' => 'Agora já pode iniciar sessão com o seu novo endereço de e-mail.', - 'login_with_old_email' => 'Já pode iniciar sessão com o seu endereço de email antigo.', - 'login_provider_local_only' => 'Esta ação não está disponível ao autenticar através de ":login_provider".', - 'external_user_mgt_disabled' => 'Esta ação não está disponível quando o Firefly III não é responsável pela gestão de utilizadores ou autenticação.', - 'external_auth_disabled' => 'Esta ação não está disponível quando o Firefly III não é responsável pela autenticação.', - 'delete_local_info_only' => "Como o Firefly III não é responsável pela gestão de utilizadores ou autenticação, esta função apenas apaga informações locais do Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Clientes OAuth', - 'profile_oauth_no_clients' => 'Não criou nenhum cliente OAuth.', - 'profile_oauth_clients_external_auth' => 'Se estivar a usar um provedor de autenticação externo, como o Authelia, os clientes OAuth não funcionarão. Só pode usar Tokens de Acesso Pessoal.', - 'profile_oauth_clients_header' => 'Clientes', - 'profile_oauth_client_id' => 'ID do Cliente', - 'profile_oauth_client_name' => 'Nome', - 'profile_oauth_client_secret' => 'Segredo', - 'profile_oauth_create_new_client' => 'Criar Novo Cliente', - 'profile_oauth_create_client' => 'Criar Cliente', - 'profile_oauth_edit_client' => 'Editar Cliente', - 'profile_oauth_name_help' => 'Algo que os utilizadores reconheçam e confiem.', - 'profile_oauth_redirect_url' => 'URL de redirecionamento', - 'profile_oauth_redirect_url_help' => 'URL de callback de autorização da aplicação.', - 'profile_authorized_apps' => 'Aplicações autorizadas', - 'profile_authorized_clients' => 'Clientes autorizados', - 'profile_scopes' => 'Contextos', - 'profile_revoke' => 'Revogar', - 'profile_oauth_client_secret_title' => 'Segredo do cliente', - 'profile_oauth_client_secret_expl' => 'Aqui está o seu segredo de cliente. Apenas estará visível uma vez, portanto não o perca! Pode agora utilizar este segredo para fazer pedidos à API.', - 'profile_personal_access_tokens' => 'Tokens de acesso pessoal', - 'profile_personal_access_token' => 'Token de acesso pessoal', - 'profile_oauth_confidential' => 'Confidencial', - 'profile_oauth_confidential_help' => 'Exigir que o cliente se autentique com um segredo. Clientes confidenciais podem manter credenciais de forma segura sem as expor a terceiros não autorizados. Aplicações públicas, tais como aplicações desktop nativas ou JavaScript SPA, são incapazes de garantir a segurança dos segredos.', - 'profile_personal_access_token_explanation' => 'Aqui está o seu novo token de acesso pessoal. Esta é a única vez que será mostrado, portanto, não o perca! Pode usá-lo para fazer pedidos à API.', - 'profile_no_personal_access_token' => 'Ainda não criou tokens de acesso pessoal.', - 'profile_create_new_token' => 'Criar novo token', - 'profile_create_token' => 'Criar token', - 'profile_create' => 'Criar', - 'profile_save_changes' => 'Guardar alterações', - 'profile_whoops' => 'Oops!', - 'profile_something_wrong' => 'Algo correu mal!', - 'profile_try_again' => 'Algo correu mal. Por favor, tente novamente.', - 'amounts' => 'Montantes', - 'multi_account_warning_unknown' => 'Dependendo do tipo de transação que criar, a conta de origem e/ou destino de subsequentes divisões pode ser sobrescrita pelo que estiver definido na primeira divisão da transação.', - 'multi_account_warning_withdrawal' => 'Tenha presente que a conta de origem de divisões subsequentes será sobrescrita pelo que estiver definido na primeira divisão do levantamento.', - 'multi_account_warning_deposit' => 'Tenha presente que a conta de destino de divisões subsequentes será sobrescrita pelo que estiver definida na primeira divisão do depósito.', - 'multi_account_warning_transfer' => 'Tenha presenta que a conta de origem + destino de divisões subsequentes serão sobrescritas pelo que estiver definido na primeira divisão da transferência.', + 'purge_data_title' => 'Purgue dados do Firefly III', + 'purge_data_expl' => '"Purgar" significa "apagar o que já foi apagado". Em circunstâncias normais, o Firefly III não apaga nada de forma definitiva. Apenas esconde. O botão abaixo apaga todos esses registos anteriormente "apagados" PARA SEMPRE.', + 'delete_stuff_header' => 'Apagar e purgar dados', + 'purge_all_data' => 'Purgar todos os registos apagados', + 'purge_data' => 'Purgar dados', + 'purged_all_records' => 'Todos os registos apagados foram purgados.', + 'delete_data_title' => 'Apagar dados do Firefly III', + 'permanent_delete_stuff' => 'Pode apagar coisas do Firefly III. Usando os botões abaixo fará com que os seus itens sejam removidos da visualização e escondidos. Não há botão de anular para isto, mas os itens permanecem na base de dados e poderá recuperá-los se necessário.', + 'other_sessions_logged_out' => 'Todas as outras sessões foram desconectadas.', + 'delete_unused_accounts' => 'Apagar contas não utilizadas irá limpar as suas listas de preenchimento automático.', + 'delete_all_unused_accounts' => 'Apagar contas não utilizadas', + 'deleted_all_unused_accounts' => 'Todas as contas não usadas foram apagadas', + 'delete_all_budgets' => 'Apagar TODOS os orçamentos', + 'delete_all_categories' => 'Apagar TODAS as categorias', + 'delete_all_tags' => 'Apagar TODAS as etiquetas', + 'delete_all_bills' => 'Apagar TODAS as faturas', + 'delete_all_piggy_banks' => 'Apagar todos os mealheiros', + 'delete_all_rules' => 'Apagar TODAS as regras', + 'delete_all_recurring' => 'Apagar TODAS as transacções recorrentes', + 'delete_all_object_groups' => 'Apagar TODOS os grupos de objectos', + 'delete_all_accounts' => 'Apagar TODAS as contas', + 'delete_all_asset_accounts' => 'Apagar TODAS as contas de activos', + 'delete_all_expense_accounts' => 'Apagar TODAS as contas de despesas', + 'delete_all_revenue_accounts' => 'Apagar TODOS as contas de receita', + 'delete_all_liabilities' => 'Apagar TODOS os passivos', + 'delete_all_transactions' => 'Apagar TODAS as suas transacções', + 'delete_all_withdrawals' => 'Apagar TODOS os levantamentos', + 'delete_all_deposits' => 'Apagar TODOS os depósitos', + 'delete_all_transfers' => 'Apagar TODOS as transferências', + 'also_delete_transactions' => 'Apagar a conta também apaga TODOS os levantamentos, depósitos e transferências associadas!', + 'deleted_all_budgets' => 'Todos os orçamentos foram apagados', + 'deleted_all_categories' => 'Todas as categorias foram apagadas', + 'deleted_all_tags' => 'Todas as etiquetas foram apagadas', + 'deleted_all_bills' => 'Todos os encargos foram apagados', + 'deleted_all_piggy_banks' => 'Todos os mealheiros foram apagados', + 'deleted_all_rules' => 'Todas as regras e grupos de regras foram apagadas', + 'deleted_all_object_groups' => 'Todos os grupos foram apagados', + 'deleted_all_accounts' => 'Todas as contas foram apagadas', + 'deleted_all_asset_accounts' => 'Todas as contas de ativos foram apagadas', + 'deleted_all_expense_accounts' => 'Todas as contas de despesas foram apagadas', + 'deleted_all_revenue_accounts' => 'Todas as contas de receita foram apagadas', + 'deleted_all_liabilities' => 'Todos os passivos foram apagados', + 'deleted_all_transactions' => 'Todas as transacções foram apagadas', + 'deleted_all_withdrawals' => 'Todas os levantamentos foram apagados', + 'deleted_all_deposits' => 'Todos os depósitos foram apagados', + 'deleted_all_transfers' => 'Todas as transferências foram apagadas', + 'deleted_all_recurring' => 'Todas as transacções recorrentes foram apagadas', + 'change_your_password' => 'Altere a sua palavra-passe', + 'delete_account' => 'Apagar conta de utilizador', + 'current_password' => 'Palavra-passe atual', + 'new_password' => 'Nova palavra-passe', + 'new_password_again' => 'Nova palavra-passe (novamente)', + 'delete_your_account' => 'Apagar a conta', + 'delete_your_account_help' => 'Apagar a sua conta Firefly III apaga também todas as contas, transações, tudo o que está guardado no Firefly III. Isso será perdido.', + 'delete_your_account_password' => 'Introduza a sua palavra-passe para continuar.', + 'password' => 'Palavra-passe', + 'are_you_sure' => 'Tem a certeza? Não pode anular esta ação.', + 'delete_account_button' => 'APAGAR a sua conta', + 'invalid_current_password' => 'Palavra-passe atual inválida!', + 'password_changed' => 'Palavra-passe alterada!', + 'should_change' => 'A ideia é alterar palavra-passe.', + 'invalid_password' => 'Palavra-passe inválida!', + 'what_is_pw_security' => 'O que é "verificar segurança da palavra-passe"?', + 'secure_pw_title' => 'Como escolher uma palavra-passe segura', + 'forgot_password_response' => 'Obrigado. Se existir uma conta com este endereço de email, encontrará as instruções na sua caixa de entrada.', + 'secure_pw_history' => 'Não há semana em que não se leia nas notícias sobre sites perderem as palavras-passe dos utilizadores. Hackers e ladrões usam essas palavras-passe para tentar roubar a sua informação pessoal. Essa informação é valiosa.', + 'secure_pw_ff' => 'Utiliza a mesma palavra-passe para tudo na Internet? Se um site perder a sua palavra-passe, os hackers ganham acesso a todos os seus dados. O Firefly III depende de uma palavra-passe forte e única para poder proteger toda a sua informação financeira.', + 'secure_pw_check_box' => 'Para ajudá-lo o Firefly III pode verificar se a palavra-passe que pretende usar já foi roubada no passado. Se for esse o caso, o Firefly III recomenda que não a utilize.', + 'secure_pw_working_title' => 'Como funciona?', + 'secure_pw_working' => 'Ao marcar a caixa, o Firefly III enviará os cinco primeiros carateres do hash SHA1 da sua palavra-passe para o website Troy Hunt para confirmar se está na lista. Assim consegue impedi-lo de usar palavras-passe inseguras, como é recomendado na última publicação NIST Special sobre o assunto.', + 'secure_pw_should' => 'Devo marcar a caixa?', + 'secure_pw_long_password' => 'Sim. Verifique sempre se a sua palavra-passe é segura.', + 'command_line_token' => 'Token de linha de comando', + 'explain_command_line_token' => 'É necessário um token para executar opções de linha de comando, tais como exportar dados. Sem isso, os comandos inseridos não funcionarão. Não partilhe o seu token da linha de comandos com ninguém. Nunca ninguém, nem mesmo eu, alguma vez lhe pediremos esse token. Se sentir que o perdeu, ou se sentir paranoico, pode substituir o mesmo usando o botão.', + 'regenerate_command_line_token' => 'Recriar token de linha de comando', + 'token_regenerated' => 'Um novo token de linha de comando foi criado', + 'change_your_email' => 'Alterar o seu email', + 'email_verification' => 'Será enviada uma mensagem de email para os seus endereços de email ANTIGO E NOVO. Por razões de segurança, não será capaz de iniciar sessão até confirmar o seu novo endereço de email. Se não tem a certeza se a sua instalação do Firefly III é capaz de enviar emails, por favor não utilize esta funcionalidade. Se é um administrador, pode testá-la na Administração.', + 'email_changed_logout' => 'Até verificar o seu endereço de e-mail, não poderá iniciar sessão.', + 'login_with_new_email' => 'Agora já pode iniciar sessão com o seu novo endereço de e-mail.', + 'login_with_old_email' => 'Já pode iniciar sessão com o seu endereço de email antigo.', + 'login_provider_local_only' => 'Esta ação não está disponível ao autenticar através de ":login_provider".', + 'external_user_mgt_disabled' => 'Esta ação não está disponível quando o Firefly III não é responsável pela gestão de utilizadores ou autenticação.', + 'external_auth_disabled' => 'Esta ação não está disponível quando o Firefly III não é responsável pela autenticação.', + 'delete_local_info_only' => 'Como o Firefly III não é responsável pela gestão de utilizadores ou autenticação, esta função apenas apaga informações locais do Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Clientes OAuth', + 'profile_oauth_no_clients' => 'Não criou nenhum cliente OAuth.', + 'profile_oauth_clients_external_auth' => 'Se estivar a usar um provedor de autenticação externo, como o Authelia, os clientes OAuth não funcionarão. Só pode usar Tokens de Acesso Pessoal.', + 'profile_oauth_clients_header' => 'Clientes', + 'profile_oauth_client_id' => 'ID do Cliente', + 'profile_oauth_client_name' => 'Nome', + 'profile_oauth_client_secret' => 'Segredo', + 'profile_oauth_create_new_client' => 'Criar Novo Cliente', + 'profile_oauth_create_client' => 'Criar Cliente', + 'profile_oauth_edit_client' => 'Editar Cliente', + 'profile_oauth_name_help' => 'Algo que os utilizadores reconheçam e confiem.', + 'profile_oauth_redirect_url' => 'URL de redirecionamento', + 'profile_oauth_redirect_url_help' => 'URL de callback de autorização da aplicação.', + 'profile_authorized_apps' => 'Aplicações autorizadas', + 'profile_authorized_clients' => 'Clientes autorizados', + 'profile_scopes' => 'Contextos', + 'profile_revoke' => 'Revogar', + 'profile_oauth_client_secret_title' => 'Segredo do cliente', + 'profile_oauth_client_secret_expl' => 'Aqui está o seu segredo de cliente. Apenas estará visível uma vez, portanto não o perca! Pode agora utilizar este segredo para fazer pedidos à API.', + 'profile_personal_access_tokens' => 'Tokens de acesso pessoal', + 'profile_personal_access_token' => 'Token de acesso pessoal', + 'profile_oauth_confidential' => 'Confidencial', + 'profile_oauth_confidential_help' => 'Exigir que o cliente se autentique com um segredo. Clientes confidenciais podem manter credenciais de forma segura sem as expor a terceiros não autorizados. Aplicações públicas, tais como aplicações desktop nativas ou JavaScript SPA, são incapazes de garantir a segurança dos segredos.', + 'profile_personal_access_token_explanation' => 'Aqui está o seu novo token de acesso pessoal. Esta é a única vez que será mostrado, portanto, não o perca! Pode usá-lo para fazer pedidos à API.', + 'profile_no_personal_access_token' => 'Ainda não criou tokens de acesso pessoal.', + 'profile_create_new_token' => 'Criar novo token', + 'profile_create_token' => 'Criar token', + 'profile_create' => 'Criar', + 'profile_save_changes' => 'Guardar alterações', + 'profile_whoops' => 'Oops!', + 'profile_something_wrong' => 'Algo correu mal!', + 'profile_try_again' => 'Algo correu mal. Por favor, tente novamente.', + 'amounts' => 'Montantes', + 'multi_account_warning_unknown' => 'Dependendo do tipo de transação que criar, a conta de origem e/ou destino de subsequentes divisões pode ser sobrescrita pelo que estiver definido na primeira divisão da transação.', + 'multi_account_warning_withdrawal' => 'Tenha presente que a conta de origem de divisões subsequentes será sobrescrita pelo que estiver definido na primeira divisão do levantamento.', + 'multi_account_warning_deposit' => 'Tenha presente que a conta de destino de divisões subsequentes será sobrescrita pelo que estiver definida na primeira divisão do depósito.', + 'multi_account_warning_transfer' => 'Tenha presenta que a conta de origem + destino de divisões subsequentes serão sobrescritas pelo que estiver definido na primeira divisão da transferência.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Exportar dados do Firefly III', - 'export_data_menu' => 'Exportar dados', - 'export_data_bc' => 'Exportar dados do Firefly III', - 'export_data_main_title' => 'Exportar dados do Firefly III', - 'export_data_expl' => 'Esta hiperligação permite-lhe exportar todas as transações e os meta dados do Firefly III. Por favor, consulte a ajuda (canto superior direito ícone-(?)) para obter mais informações sobre o processo.', - 'export_data_all_transactions' => 'Exportar todas as transações', - 'export_data_advanced_expl' => 'Se precisar de um tipo mais específico ou avançado de exportação, leia a ajuda sobre como usar o comando da consola php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Exportar dados do Firefly III', + 'export_data_menu' => 'Exportar dados', + 'export_data_bc' => 'Exportar dados do Firefly III', + 'export_data_main_title' => 'Exportar dados do Firefly III', + 'export_data_expl' => 'Esta hiperligação permite-lhe exportar todas as transações e os meta dados do Firefly III. Por favor, consulte a ajuda (canto superior direito ícone-(?)) para obter mais informações sobre o processo.', + 'export_data_all_transactions' => 'Exportar todas as transações', + 'export_data_advanced_expl' => 'Se precisar de um tipo mais específico ou avançado de exportação, leia a ajuda sobre como usar o comando da consola php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Um anexo|:count anexos', - 'attachments' => 'Anexos', - 'edit_attachment' => 'Alterar anexo ":name"', - 'update_attachment' => 'Atualizar anexo', - 'delete_attachment' => 'Apagar anexo ":name"', - 'attachment_deleted' => 'Anexo apagado ":name"', - 'liabilities_deleted' => 'Passivo apagado ":name"', - 'attachment_updated' => 'Anexo alterado ":name"', - 'upload_max_file_size' => 'Tamanho maximo do ficheiro: :size', - 'list_all_attachments' => 'Lista de todos os anexos', + 'nr_of_attachments' => 'Um anexo|:count anexos', + 'attachments' => 'Anexos', + 'edit_attachment' => 'Alterar anexo ":name"', + 'update_attachment' => 'Atualizar anexo', + 'delete_attachment' => 'Apagar anexo ":name"', + 'attachment_deleted' => 'Anexo apagado ":name"', + 'liabilities_deleted' => 'Passivo apagado ":name"', + 'attachment_updated' => 'Anexo alterado ":name"', + 'upload_max_file_size' => 'Tamanho maximo do ficheiro: :size', + 'list_all_attachments' => 'Lista de todos os anexos', // transaction index - 'title_expenses' => 'Despesas', - 'title_withdrawal' => 'Despesas', - 'title_revenue' => 'Receita / rendimento', - 'title_deposit' => 'Receita / rendimento', - 'title_transfer' => 'Transferências', - 'title_transfers' => 'Transferências', - 'submission_options' => 'Opções de submissão', - 'apply_rules_checkbox' => 'Aplicar regras', - 'fire_webhooks_checkbox' => 'Ativar webhooks', + 'is_reconciled_fields_dropped' => 'Como esta transação está reconciliada, não pode atualizar as contas, nem os montantes.', + 'title_expenses' => 'Despesas', + 'title_withdrawal' => 'Despesas', + 'title_revenue' => 'Receita / rendimento', + 'title_deposit' => 'Receita / rendimento', + 'title_transfer' => 'Transferências', + 'title_transfers' => 'Transferências', + 'submission_options' => 'Opções de submissão', + 'apply_rules_checkbox' => 'Aplicar regras', + 'fire_webhooks_checkbox' => 'Ativar webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Esta transação já e um levantamento', - 'convert_is_already_type_Deposit' => 'Esta transação já e um depósito', - 'convert_is_already_type_Transfer' => 'Esta transação já é uma transferência', - 'convert_to_Withdrawal' => 'Converter ":description" num levantamento', - 'convert_to_Deposit' => 'Converter ":description" num depósito', - 'convert_to_Transfer' => 'Converter ":description" numa transferência', - 'convert_options_WithdrawalDeposit' => 'Converter um levantamento num depósito', - 'convert_options_WithdrawalTransfer' => 'Converter um levantamento numa transferência', - 'convert_options_DepositTransfer' => 'Converter um depósito numa transferência', - 'convert_options_DepositWithdrawal' => 'Converter um depósito num levantamento', - 'convert_options_TransferWithdrawal' => 'Converter uma transferência num levantamento', - 'convert_options_TransferDeposit' => 'Converter uma transferência num depósito', - 'convert_Withdrawal_to_deposit' => 'Converter este levantamento num depósito', - 'convert_Withdrawal_to_transfer' => 'Converter este levantamento numa transferência', - 'convert_Deposit_to_withdrawal' => 'Converter este depósito num levantamento', - 'convert_Deposit_to_transfer' => 'Converter este depósito numa transferência', - 'convert_Transfer_to_deposit' => 'Converter esta transferência num depósito', - 'convert_Transfer_to_withdrawal' => 'Converter esta transferência num levantamento', - 'convert_please_set_revenue_source' => 'Por favor, selecione a conta de receitas de onde sairá o dinheiro.', - 'convert_please_set_asset_destination' => 'Por favor, escolha a conta de ativos para a qual irá o dinheiro.', - 'convert_please_set_expense_destination' => 'Por favor, escolha a conta de despesas para a qual irá o dinheiro.', - 'convert_please_set_asset_source' => 'Por favor, escolha a conta de ativos de onde sairá o dinheiro.', - 'convert_expl_w_d' => 'Ao converter um levantamento num depósito, o dinheiro será depositado na conta de destino exibida, em vez de ser retirado. Ao converter um levantamento num depósito, o dinheiro será depositado nas contas de destino exibidas, em vez de ser retirado.', - 'convert_expl_w_t' => 'Ao converter um levantamento numa transferência, o dinheiro será transferido para fora da conta de origem para outra conta de ativos ou passivos em vez de ser gasto na conta de despesa original.|Ao converter um levantamento numa transferência, o dinheiro será transferido das contas de origem para outras contas de activos ou passivos em vez de ser gasto nas contas de despesas originais.', - 'convert_expl_d_w' => 'Quando converter um depósito num levantamento, o dinheiro será retirado da conta de origem exibida, em vez de ser depositado na mesma.|Quando converter um depósito num levantamento, o dinheiro será retirado das contas de origem exibidas, em vez de ser depositado nas mesmas.', - 'convert_expl_d_t' => 'Quando converter um depósito numa transferência, o dinheiro será depositado na conta de destino listada, de qualquer uma das suas conta de ativos ou passivos.|Quando converter um depósito numa transferência, o dinheiro será depositado nas contas de destino listadas de qualquer uma das suas contas de ativos ou passivos.', - 'convert_expl_t_w' => 'Quando converter uma transferência num levantamento, o dinheiro será gasto na conta de destino que definiu aqui, em vez de ser transferido para fora.|Quando converter uma transferência num levantamento, o dinheiro será gasto nas contas de destino que definiu aqui, em vez de ser transferido para fora.', - 'convert_expl_t_d' => 'Ao converter uma transferência num depósito, o dinheiro será depositado na conta de destino que vê aqui, em vez de ser transferido para lá.| Ao converter uma transferência em depósito, o dinheiro será depositado nas contas de destino que vê aqui, em vez de ser transferido para elas.', - 'convert_select_sources' => 'Para completar a conversão, por favor defina a nova conta de origem abaixo.|Para completar a conversão, por favor defina as novas contas de origem abaixo.', - 'convert_select_destinations' => 'Para completar a conversão, por favor selecione a nova conta de destino abaixo.|Para completar a conversão, por favor selecione as novas contas de destino abaixo.', - 'converted_to_Withdrawal' => 'A transação foi convertida num levantamento', - 'converted_to_Deposit' => 'A transação foi convertida num depósito', - 'converted_to_Transfer' => 'A transação foi convertida numa transferência', - 'invalid_convert_selection' => 'A conta que selecionou já está em uso nas transações ou não existe.', - 'source_or_dest_invalid' => 'Não foi possível encontrar os detalhes corretos da transação. A conversão não é possível.', - 'convert_to_withdrawal' => 'Converter para levantamento', - 'convert_to_deposit' => 'Converter para depósito', - 'convert_to_transfer' => 'Converter para uma transferência', + 'convert_is_already_type_Withdrawal' => 'Esta transação já e um levantamento', + 'convert_is_already_type_Deposit' => 'Esta transação já e um depósito', + 'convert_is_already_type_Transfer' => 'Esta transação já é uma transferência', + 'convert_to_Withdrawal' => 'Converter ":description" num levantamento', + 'convert_to_Deposit' => 'Converter ":description" num depósito', + 'convert_to_Transfer' => 'Converter ":description" numa transferência', + 'convert_options_WithdrawalDeposit' => 'Converter um levantamento num depósito', + 'convert_options_WithdrawalTransfer' => 'Converter um levantamento numa transferência', + 'convert_options_DepositTransfer' => 'Converter um depósito numa transferência', + 'convert_options_DepositWithdrawal' => 'Converter um depósito num levantamento', + 'convert_options_TransferWithdrawal' => 'Converter uma transferência num levantamento', + 'convert_options_TransferDeposit' => 'Converter uma transferência num depósito', + 'convert_Withdrawal_to_deposit' => 'Converter este levantamento num depósito', + 'convert_Withdrawal_to_transfer' => 'Converter este levantamento numa transferência', + 'convert_Deposit_to_withdrawal' => 'Converter este depósito num levantamento', + 'convert_Deposit_to_transfer' => 'Converter este depósito numa transferência', + 'convert_Transfer_to_deposit' => 'Converter esta transferência num depósito', + 'convert_Transfer_to_withdrawal' => 'Converter esta transferência num levantamento', + 'convert_please_set_revenue_source' => 'Por favor, selecione a conta de receitas de onde sairá o dinheiro.', + 'convert_please_set_asset_destination' => 'Por favor, escolha a conta de ativos para a qual irá o dinheiro.', + 'convert_please_set_expense_destination' => 'Por favor, escolha a conta de despesas para a qual irá o dinheiro.', + 'convert_please_set_asset_source' => 'Por favor, escolha a conta de ativos de onde sairá o dinheiro.', + 'convert_expl_w_d' => 'Ao converter um levantamento num depósito, o dinheiro será depositado na conta de destino exibida, em vez de ser retirado. Ao converter um levantamento num depósito, o dinheiro será depositado nas contas de destino exibidas, em vez de ser retirado.', + 'convert_expl_w_t' => 'Ao converter um levantamento numa transferência, o dinheiro será transferido para fora da conta de origem para outra conta de ativos ou passivos em vez de ser gasto na conta de despesa original.|Ao converter um levantamento numa transferência, o dinheiro será transferido das contas de origem para outras contas de activos ou passivos em vez de ser gasto nas contas de despesas originais.', + 'convert_expl_d_w' => 'Quando converter um depósito num levantamento, o dinheiro será retirado da conta de origem exibida, em vez de ser depositado na mesma.|Quando converter um depósito num levantamento, o dinheiro será retirado das contas de origem exibidas, em vez de ser depositado nas mesmas.', + 'convert_expl_d_t' => 'Quando converter um depósito numa transferência, o dinheiro será depositado na conta de destino listada, de qualquer uma das suas conta de ativos ou passivos.|Quando converter um depósito numa transferência, o dinheiro será depositado nas contas de destino listadas de qualquer uma das suas contas de ativos ou passivos.', + 'convert_expl_t_w' => 'Quando converter uma transferência num levantamento, o dinheiro será gasto na conta de destino que definiu aqui, em vez de ser transferido para fora.|Quando converter uma transferência num levantamento, o dinheiro será gasto nas contas de destino que definiu aqui, em vez de ser transferido para fora.', + 'convert_expl_t_d' => 'Ao converter uma transferência num depósito, o dinheiro será depositado na conta de destino que vê aqui, em vez de ser transferido para lá.| Ao converter uma transferência em depósito, o dinheiro será depositado nas contas de destino que vê aqui, em vez de ser transferido para elas.', + 'convert_select_sources' => 'Para completar a conversão, por favor defina a nova conta de origem abaixo.|Para completar a conversão, por favor defina as novas contas de origem abaixo.', + 'convert_select_destinations' => 'Para completar a conversão, por favor selecione a nova conta de destino abaixo.|Para completar a conversão, por favor selecione as novas contas de destino abaixo.', + 'converted_to_Withdrawal' => 'A transação foi convertida num levantamento', + 'converted_to_Deposit' => 'A transação foi convertida num depósito', + 'converted_to_Transfer' => 'A transação foi convertida numa transferência', + 'invalid_convert_selection' => 'A conta que selecionou já está em uso nas transações ou não existe.', + 'source_or_dest_invalid' => 'Não foi possível encontrar os detalhes corretos da transação. A conversão não é possível.', + 'convert_to_withdrawal' => 'Converter para levantamento', + 'convert_to_deposit' => 'Converter para depósito', + 'convert_to_transfer' => 'Converter para uma transferência', // create new stuff: - 'create_new_withdrawal' => 'Criar novo levantamento', - 'create_new_deposit' => 'Criar novo depósito', - 'create_new_transfer' => 'Criar nova transferência', - 'create_new_asset' => 'Criar nova conta de activos', - 'create_new_liabilities' => 'Criar novo passivo', - 'create_new_expense' => 'Criar nova conta de despesas', - 'create_new_revenue' => 'Criar nova conta de receitas', - 'create_new_piggy_bank' => 'Criar mealheiro', - 'create_new_bill' => 'Criar novo encargo', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Criar novo levantamento', + 'create_new_deposit' => 'Criar novo depósito', + 'create_new_transfer' => 'Criar nova transferência', + 'create_new_asset' => 'Criar nova conta de activos', + 'create_new_liabilities' => 'Criar novo passivo', + 'create_new_expense' => 'Criar nova conta de despesas', + 'create_new_revenue' => 'Criar nova conta de receitas', + 'create_new_piggy_bank' => 'Criar mealheiro', + 'create_new_bill' => 'Criar novo encargo', + 'create_new_subscription' => 'Criar uma nova subscrição', + 'create_new_rule' => 'Criar regra nova', // currencies: - 'create_currency' => 'Criar uma nova moeda', - 'store_currency' => 'Guardar nova moeda', - 'update_currency' => 'Atualizar moeda', - 'new_default_currency' => ':name é a moeda padrão.', - 'cannot_delete_currency' => 'Não é possível apagar :name porque ainda está em uso.', - 'cannot_delete_fallback_currency' => ':name é a moeda de reserva do sistema e não pode ser apagada.', - 'cannot_disable_currency_journals' => 'Não é possível desativar :name porque ainda há transações a usa-la.', - 'cannot_disable_currency_last_left' => 'Não é possível desativar :name porque é a única moeda ativada.', - 'cannot_disable_currency_account_meta' => 'Não é possível desactivar :name porque ele é utilizado em contas de activos.', - 'cannot_disable_currency_bills' => 'Não é possível desativar :name porque está a ser utilizado em faturas.', - 'cannot_disable_currency_recurring' => 'Não é possível desativar :name porque é utilizado em transações recorrentes.', - 'cannot_disable_currency_available_budgets' => 'Não é possível desativar :name porque é utilizado nos orçamentos disponíveis.', - 'cannot_disable_currency_budget_limits' => 'Não é possível desativar :name porque está a ser usado nos limites de orçamento.', - 'cannot_disable_currency_current_default' => 'Não é possível desactivar :name porque é a moeda padrão atual.', - 'cannot_disable_currency_system_fallback' => 'Não é possível desactivar :name porque é a moeda padrão do sistema.', - 'disable_EUR_side_effects' => 'O Euro é a moeda de reserva no caso de emergência no sistema. Desativa-la pode trazer efeitos secundários não desejáveis e pode anular a sua garantia.', - 'deleted_currency' => 'Moeda :name apagada', - 'created_currency' => 'Moeda :name criada', - 'could_not_store_currency' => 'Não foi possível guardar a nova moeda.', - 'updated_currency' => 'Moeda :name atualizada', - 'ask_site_owner' => 'Por favor, peça ao :owner para adicionar, remover ou editar moedas.', - 'currencies_intro' => 'O Firefly III suporta várias moedas que pode definir e ativar aqui.', - 'make_default_currency' => 'Tornar predefinido', - 'default_currency' => 'padrão', - 'currency_is_disabled' => 'Desativado', - 'enable_currency' => 'Ativar', - 'disable_currency' => 'Desativar', - 'currencies_default_disabled' => 'A maioria destas moedas está desativada por defeito. Para poder usá-las, tem de as ativar primeiro.', - 'currency_is_now_enabled' => 'A moeda ":name" foi ativada', - 'currency_is_now_disabled' => 'A moeda ":name" foi desativada', + 'create_currency' => 'Criar uma nova moeda', + 'store_currency' => 'Guardar nova moeda', + 'update_currency' => 'Atualizar moeda', + 'new_default_currency' => '":name" passou a ser a moeda padrão.', + 'default_currency_failed' => 'Não foi possível fazer ":name" a moeda padrão. Por favor, verifique os logs de erro.', + 'cannot_delete_currency' => 'Não é possível apagar :name porque ainda está em uso.', + 'cannot_delete_fallback_currency' => ':name é a moeda de reserva do sistema e não pode ser apagada.', + 'cannot_disable_currency_journals' => 'Não é possível desativar :name porque ainda há transações a usa-la.', + 'cannot_disable_currency_last_left' => 'Não é possível desativar :name porque é a única moeda ativada.', + 'cannot_disable_currency_account_meta' => 'Não é possível desactivar :name porque ele é utilizado em contas de activos.', + 'cannot_disable_currency_bills' => 'Não é possível desativar :name porque está a ser utilizado em faturas.', + 'cannot_disable_currency_recurring' => 'Não é possível desativar :name porque é utilizado em transações recorrentes.', + 'cannot_disable_currency_available_budgets' => 'Não é possível desativar :name porque é utilizado nos orçamentos disponíveis.', + 'cannot_disable_currency_budget_limits' => 'Não é possível desativar :name porque está a ser usado nos limites de orçamento.', + 'cannot_disable_currency_current_default' => 'Não é possível desactivar :name porque é a moeda padrão atual.', + 'cannot_disable_currency_system_fallback' => 'Não é possível desactivar :name porque é a moeda padrão do sistema.', + 'disable_EUR_side_effects' => 'O Euro é a moeda de reserva no caso de emergência no sistema. Desativa-la pode trazer efeitos secundários não desejáveis e pode anular a sua garantia.', + 'deleted_currency' => 'Moeda :name apagada', + 'created_currency' => 'Moeda :name criada', + 'could_not_store_currency' => 'Não foi possível guardar a nova moeda.', + 'updated_currency' => 'Moeda :name atualizada', + 'ask_site_owner' => 'Por favor, peça ao :owner para adicionar, remover ou editar moedas.', + 'currencies_intro' => 'O Firefly III suporta várias moedas que pode definir e ativar aqui.', + 'make_default_currency' => 'Tornar predefinido', + 'default_currency' => 'padrão', + 'currency_is_disabled' => 'Desativado', + 'enable_currency' => 'Ativar', + 'disable_currency' => 'Desativar', + 'currencies_default_disabled' => 'A maioria destas moedas está desativada por defeito. Para poder usá-las, tem de as ativar primeiro.', + 'currency_is_now_enabled' => 'A moeda ":name" foi ativada', + 'could_not_enable_currency' => 'Não foi possível habilitar a moeda ":name". Por favor, verifique os logs.', + 'currency_is_now_disabled' => 'A moeda ":name" foi desativada', + 'could_not_disable_currency' => 'Não foi possível desativar a moeda ":name". Talvez ainda esteja em uso?', // forms: - 'mandatoryFields' => 'Campos obrigatórios', - 'optionalFields' => 'Campos opcionais', - 'options' => 'Opções', + 'mandatoryFields' => 'Campos obrigatórios', + 'optionalFields' => 'Campos opcionais', + 'options' => 'Opções', // budgets: - 'daily_budgets' => 'Orçamentos diários', - 'weekly_budgets' => 'Orçamentos semanais', - 'monthly_budgets' => 'Orçamentos mensais', - 'quarterly_budgets' => 'Orçamentos trimestrais', - 'half_year_budgets' => 'Orçamentos semestrais', - 'yearly_budgets' => 'Orçamentos anuais', - 'other_budgets' => 'Orçamentos de período personalizado', - 'budget_limit_not_in_range' => 'Esta montante aplica-se de :start a :end:', - 'total_available_budget' => 'Orçamento total disponível (entre :start e :end)', - 'total_available_budget_in_currency' => 'Orçamento total disponível em :currency', - 'see_below' => 'ver abaixo', - 'create_new_budget' => 'Criar um novo orçamento', - 'store_new_budget' => 'Guardar novo orçamento', - 'stored_new_budget' => 'Novo orçamento ":name" guardado', - 'available_between' => 'Disponível entre :start e :end', - 'transactionsWithoutBudget' => 'Despesas sem orçamento', - 'transactions_no_budget' => 'Despesas sem orçamento entre :start e :end', - 'spent_between' => 'Já gasto entre :start e :end', - 'set_available_amount' => 'Definir montante disponível', - 'update_available_amount' => 'Atualizar montante disponível', - 'ab_basic_modal_explain' => 'Use este formulário para indicar quanto espera conseguir orçamentar (no total, em :currency) no período indicado.', - 'createBudget' => 'Novo orçamento', - 'invalid_currency' => 'Esta é uma moeda inválida', - 'invalid_amount' => 'Por favor, insira um montante', - 'set_ab' => 'O montante do orçamento disponível foi definido', - 'updated_ab' => 'O montante do orçamento disponível foi atualizado', - 'deleted_ab' => 'O montante do orçamento disponível foi apagado', - 'deleted_bl' => 'O montante orçamentado foi retirado', - 'alt_currency_ab_create' => 'Definir o orçamento disponível noutra moeda', - 'bl_create_btn' => 'Definir orçamento noutra moeda', - 'inactiveBudgets' => 'Orçamentos inativos', - 'without_budget_between' => 'Transações sem orçamento entre :start e :end', - 'delete_budget' => 'Apagar orçamento ":name"', - 'deleted_budget' => 'Orçamento ":name" apagado', - 'edit_budget' => 'Editar orçamento ":name"', - 'updated_budget' => 'Orçamento ":name" apagado', - 'update_amount' => 'Atualizar montante', - 'update_budget' => 'Atualizar orçamento', - 'update_budget_amount_range' => 'Atualizar o valor (esperado) disponível entre :start e :end', - 'set_budget_limit_title' => 'Definir montante orçado para o orçamento :budget entre :start e :end', - 'set_budget_limit' => 'Definir montante orçamentado', - 'budget_period_navigator' => 'Navegador de período', - 'info_on_available_amount' => 'O que tenho disponível?', - 'available_amount_indication' => 'Utilize estes valores para obter uma indicação do que seu orçamento total poderia ser.', - 'suggested' => 'Sugerido', - 'average_between' => 'Media entre :start e :end', - 'transferred_in' => 'Transferido (para)', - 'transferred_away' => 'Transferido (de)', - 'auto_budget_none' => 'Sem orçamento automático', - 'auto_budget_reset' => 'Defina um valor fixo em cada período', - 'auto_budget_rollover' => 'Adicionar um montante a cada período', - 'auto_budget_adjusted' => 'Adicionar um montante todos os períodos e corrigir para gastos excessivos', - 'auto_budget_period_daily' => 'Diariamente', - 'auto_budget_period_weekly' => 'Semanalmente', - 'auto_budget_period_monthly' => 'Mensalmente', - 'auto_budget_period_quarterly' => 'Trimestralmente', - 'auto_budget_period_half_year' => 'Semestralmente', - 'auto_budget_period_yearly' => 'Anualmente', - 'auto_budget_help' => 'Pode saber mais sobre esta funcionalidade na ajuda. Carregue no ícone(?) no canto superior direito.', - 'auto_budget_reset_icon' => 'Este orçamento será definido periodicamente', - 'auto_budget_rollover_icon' => 'O montante do orçamento irá aumentar periodicamente', - 'auto_budget_adjusted_icon' => 'O montante orçamentado aumentará periodicamente e será corrigido por gastos excessivos', - 'remove_budgeted_amount' => 'Remover montante orçamentado em :currency', + 'daily_budgets' => 'Orçamentos diários', + 'weekly_budgets' => 'Orçamentos semanais', + 'monthly_budgets' => 'Orçamentos mensais', + 'quarterly_budgets' => 'Orçamentos trimestrais', + 'half_year_budgets' => 'Orçamentos semestrais', + 'yearly_budgets' => 'Orçamentos anuais', + 'other_budgets' => 'Orçamentos de período personalizado', + 'budget_limit_not_in_range' => 'Esta montante aplica-se de :start a :end:', + 'total_available_budget' => 'Orçamento total disponível (entre :start e :end)', + 'total_available_budget_in_currency' => 'Orçamento total disponível em :currency', + 'see_below' => 'ver abaixo', + 'create_new_budget' => 'Criar um novo orçamento', + 'store_new_budget' => 'Guardar novo orçamento', + 'stored_new_budget' => 'Novo orçamento ":name" guardado', + 'available_between' => 'Disponível entre :start e :end', + 'transactionsWithoutBudget' => 'Despesas sem orçamento', + 'transactions_no_budget' => 'Despesas sem orçamento entre :start e :end', + 'spent_between' => 'Já gasto entre :start e :end', + 'spent_between_left' => 'Gastou :spent entre :start e :end, sobrando :left.', + 'set_available_amount' => 'Definir montante disponível', + 'update_available_amount' => 'Atualizar montante disponível', + 'ab_basic_modal_explain' => 'Use este formulário para indicar quanto espera conseguir orçamentar (no total, em :currency) no período indicado.', + 'createBudget' => 'Novo orçamento', + 'invalid_currency' => 'Esta é uma moeda inválida', + 'invalid_amount' => 'Por favor, insira um montante', + 'set_ab' => 'O montante do orçamento disponível foi definido', + 'updated_ab' => 'O montante do orçamento disponível foi atualizado', + 'deleted_ab' => 'O montante do orçamento disponível foi apagado', + 'deleted_bl' => 'O montante orçamentado foi retirado', + 'alt_currency_ab_create' => 'Definir o orçamento disponível noutra moeda', + 'bl_create_btn' => 'Definir orçamento noutra moeda', + 'inactiveBudgets' => 'Orçamentos inativos', + 'without_budget_between' => 'Transações sem orçamento entre :start e :end', + 'delete_budget' => 'Apagar orçamento ":name"', + 'deleted_budget' => 'Orçamento ":name" apagado', + 'edit_budget' => 'Editar orçamento ":name"', + 'updated_budget' => 'Orçamento ":name" apagado', + 'update_amount' => 'Atualizar montante', + 'update_budget' => 'Atualizar orçamento', + 'update_budget_amount_range' => 'Atualizar o valor (esperado) disponível entre :start e :end', + 'set_budget_limit_title' => 'Definir montante orçado para o orçamento :budget entre :start e :end', + 'set_budget_limit' => 'Definir montante orçamentado', + 'budget_period_navigator' => 'Navegador de período', + 'info_on_available_amount' => 'O que tenho disponível?', + 'available_amount_indication' => 'Utilize estes valores para obter uma indicação do que seu orçamento total poderia ser.', + 'suggested' => 'Sugerido', + 'average_between' => 'Media entre :start e :end', + 'transferred_in' => 'Transferido (para)', + 'transferred_away' => 'Transferido (de)', + 'auto_budget_none' => 'Sem orçamento automático', + 'auto_budget_reset' => 'Defina um valor fixo em cada período', + 'auto_budget_rollover' => 'Adicionar um montante a cada período', + 'auto_budget_adjusted' => 'Adicionar um montante todos os períodos e corrigir para gastos excessivos', + 'auto_budget_period_daily' => 'Diariamente', + 'auto_budget_period_weekly' => 'Semanalmente', + 'auto_budget_period_monthly' => 'Mensalmente', + 'auto_budget_period_quarterly' => 'Trimestralmente', + 'auto_budget_period_half_year' => 'Semestralmente', + 'auto_budget_period_yearly' => 'Anualmente', + 'auto_budget_help' => 'Pode saber mais sobre esta funcionalidade na ajuda. Carregue no ícone(?) no canto superior direito.', + 'auto_budget_reset_icon' => 'Este orçamento será definido periodicamente', + 'auto_budget_rollover_icon' => 'O montante do orçamento irá aumentar periodicamente', + 'auto_budget_adjusted_icon' => 'O montante orçamentado aumentará periodicamente e será corrigido por gastos excessivos', + 'remove_budgeted_amount' => 'Remover montante orçamentado em :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Este período não foi previsto', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Não (ainda)', - 'visit_bill' => 'Visite o encargo ":name" no Firefly III', - 'match_between_amounts' => 'O encargo corresponde à transação entre :low e :high.', - 'running_again_loss' => 'As transações ligadas anteriormente a este encargo poderão perder a ligação, se (já não) coincidirem com a(s) regra(s).', - 'bill_related_rules' => 'Regras relacionadas com este encargo', - 'repeats' => 'Repete', - 'bill_end_date_help' => 'Campo opcional. Está previsto que o encargo cesse nesta data.', - 'bill_extension_date_help' => 'Campo opcional. O encargo deve ser prorrogado (ou cancelado) até esta data.', - 'bill_end_index_line' => 'Este encargo termina em :date', - 'bill_extension_index_line' => 'Este encargo deve ser prorrogado ou cancelado em :date', - 'connected_journals' => 'Transações ligadas entre si', - 'auto_match_on' => 'Correspondido automaticamente pelo Firefly III', - 'auto_match_off' => 'Não correspondido automaticamente pelo Firefly III', - 'next_expected_match' => 'Próxima correspondência esperada', - 'delete_bill' => 'Apagar encargo ":name"', - 'deleted_bill' => 'Encargo ":name" apagado', - 'edit_bill' => 'Editar encargo ":name"', - 'more' => 'Mais', - 'rescan_old' => 'Executar regras novamente, em todas as transações', - 'update_bill' => 'Atualizar encargo', - 'updated_bill' => 'Encargo ":name" atualizado', - 'store_new_bill' => 'Guardar novo encargo', - 'stored_new_bill' => 'Novo encargo ":name" guardado', - 'cannot_scan_inactive_bill' => 'Encargos inativos não podem ser verificados.', - 'rescanned_bill' => 'Foi tudo verificado novamente tendo sido ligada :count transação ao encargo.|Foi tudo verificado novamente tendo sido ligadas :count transações ao encargo.', - 'average_bill_amount_year' => 'Valor médio do encargo (:year)', - 'average_bill_amount_overall' => 'Valor médio do encargo (geral)', - 'bill_is_active' => 'O encargo está ativo', - 'bill_expected_between' => 'Previsto entre :start e :end', - 'bill_will_automatch' => 'O encargo será automaticamente ligado a transações compatíveis', - 'skips_over' => 'passar à frente', - 'bill_store_error' => 'Ocorreu um erro inesperado ao guardar o novo encargo. Por favor, verifique os ficheiros de log', - 'list_inactive_rule' => 'regra inativa', - 'bill_edit_rules' => 'O Firefly III tentará editar também a regra relacionada com este encargo. Se editou pessoalmente esta regra, o Firefly III não irá mudar nada.|O Firefly III tentará editar também as :count regras relacionadas com este encargo. No entanto, se editou pessoalmente estas regras, o Firefly III não irá mudar nada.', - 'bill_expected_date' => 'Esperado :date', - 'bill_expected_date_js' => 'Esperado {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Pago a {date}', - 'bill_repeats_weekly' => 'Repete-se semanalmente', - 'bill_repeats_monthly' => 'Repete mensalmente', - 'bill_repeats_quarterly' => 'Repete trimestralmente', - 'bill_repeats_half-year' => 'Repete-se a cada meio ano', - 'bill_repeats_yearly' => 'Repete-se anualmente', - 'bill_repeats_weekly_other' => 'Repete-se a cada semana', - 'bill_repeats_monthly_other' => 'Repete-se a cada outro mês', - 'bill_repeats_quarterly_other' => 'Repete-se a cada trimestre', - 'bill_repeats_half-year_other' => 'Repete-se anualmente', - 'bill_repeats_yearly_other' => 'Repete-se a cada ano', - 'bill_repeats_weekly_skip' => 'Repete-se a cada {skip} semanas', - 'bill_repeats_monthly_skip' => 'Repete-se a cada {skip} meses', - 'bill_repeats_quarterly_skip' => 'Repete a cada {skip} trimestres', - 'bill_repeats_half-year_skip' => 'Repete-se a cada {skip} meio ano', - 'bill_repeats_yearly_skip' => 'Repete-se a cada {skip} anos', - 'subscriptions' => 'Subscrições', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Para sempre', - 'extension_date_is' => 'A data de extensão é {date}', + 'subscription' => 'Subscrição', + 'not_expected_period' => 'Este período não foi previsto', + 'subscriptions_in_group' => 'Subscrição no grupo "%{title}"', + 'subscr_expected_x_times' => 'Espere pagar %{amount} %{times} neste período', + 'not_or_not_yet' => 'Não (ainda)', + 'visit_bill' => 'Visite o encargo ":name" no Firefly III', + 'match_between_amounts' => 'O encargo corresponde à transação entre :low e :high.', + 'running_again_loss' => 'As transações ligadas anteriormente a este encargo poderão perder a ligação, se (já não) coincidirem com a(s) regra(s).', + 'bill_related_rules' => 'Regras relacionadas com este encargo', + 'repeats' => 'Repete', + 'bill_end_date_help' => 'Campo opcional. Está previsto que o encargo cesse nesta data.', + 'bill_extension_date_help' => 'Campo opcional. O encargo deve ser prorrogado (ou cancelado) até esta data.', + 'bill_end_index_line' => 'Este encargo termina em :date', + 'bill_extension_index_line' => 'Este encargo deve ser prorrogado ou cancelado em :date', + 'connected_journals' => 'Transações ligadas entre si', + 'auto_match_on' => 'Correspondido automaticamente pelo Firefly III', + 'auto_match_off' => 'Não correspondido automaticamente pelo Firefly III', + 'next_expected_match' => 'Próxima correspondência esperada', + 'delete_bill' => 'Apagar encargo ":name"', + 'deleted_bill' => 'Encargo ":name" apagado', + 'edit_bill' => 'Editar encargo ":name"', + 'more' => 'Mais', + 'rescan_old' => 'Executar regras novamente, em todas as transações', + 'update_bill' => 'Atualizar encargo', + 'updated_bill' => 'Encargo ":name" atualizado', + 'store_new_bill' => 'Guardar novo encargo', + 'stored_new_bill' => 'Novo encargo ":name" guardado', + 'cannot_scan_inactive_bill' => 'Encargos inativos não podem ser verificados.', + 'rescanned_bill' => 'Foi tudo verificado novamente tendo sido ligada :count transação ao encargo.|Foi tudo verificado novamente tendo sido ligadas :count transações ao encargo.', + 'average_bill_amount_year' => 'Valor médio do encargo (:year)', + 'average_bill_amount_overall' => 'Valor médio do encargo (geral)', + 'bill_is_active' => 'O encargo está ativo', + 'bill_expected_between' => 'Previsto entre :start e :end', + 'bill_will_automatch' => 'O encargo será automaticamente ligado a transações compatíveis', + 'skips_over' => 'passar à frente', + 'bill_store_error' => 'Ocorreu um erro inesperado ao guardar o novo encargo. Por favor, verifique os ficheiros de log', + 'list_inactive_rule' => 'regra inativa', + 'bill_edit_rules' => 'O Firefly III tentará editar também a regra relacionada com este encargo. Se editou pessoalmente esta regra, o Firefly III não irá mudar nada.|O Firefly III tentará editar também as :count regras relacionadas com este encargo. No entanto, se editou pessoalmente estas regras, o Firefly III não irá mudar nada.', + 'bill_expected_date' => 'Esperado :date', + 'bill_expected_date_js' => 'Esperado {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Pago a {date}', + 'bill_repeats_weekly' => 'Repete-se semanalmente', + 'bill_repeats_monthly' => 'Repete mensalmente', + 'bill_repeats_quarterly' => 'Repete trimestralmente', + 'bill_repeats_half-year' => 'Repete-se a cada meio ano', + 'bill_repeats_yearly' => 'Repete-se anualmente', + 'bill_repeats_weekly_other' => 'Repete-se a cada semana', + 'bill_repeats_monthly_other' => 'Repete-se a cada outro mês', + 'bill_repeats_quarterly_other' => 'Repete-se a cada trimestre', + 'bill_repeats_half-year_other' => 'Repete-se anualmente', + 'bill_repeats_yearly_other' => 'Repete-se a cada ano', + 'bill_repeats_weekly_skip' => 'Repete-se a cada {skip} semanas', + 'bill_repeats_monthly_skip' => 'Repete-se a cada {skip} meses', + 'bill_repeats_quarterly_skip' => 'Repete a cada {skip} trimestres', + 'bill_repeats_half-year_skip' => 'Repete-se a cada {skip} meio ano', + 'bill_repeats_yearly_skip' => 'Repete-se a cada {skip} anos', + 'subscriptions' => 'Subscrições', + 'go_to_subscriptions' => 'Ir para as suas subscrições', + 'forever' => 'Para sempre', + 'extension_date_is' => 'A data de extensão é {date}', // accounts: - 'i_am_owed_amount' => 'Devem-me um montante', - 'i_owe_amount' => 'Eu devo um montante', - 'inactive_account_link' => 'Você tem :count conta inativa (arquivada), que pode visualizar nesta página separada.| Você tem :count contas inativas (arquivadas), que pode visualizar nesta página separada.', - 'all_accounts_inactive' => 'Estas são as suas contas inactivas.', - 'active_account_link' => 'Este link volta para suas contas activas.', - 'account_missing_transaction' => 'A conta #:id (":name") não pode ser visualizada diretamente, no entanto, o Firefly está sem informação de redirecionamento.', - 'cc_monthly_payment_date_help' => 'Selecione qualquer ano e mês, será ignorado de qualquer forma. Apenas o dia do mês é relevante.', - 'details_for_asset' => 'Detalhes para a conta de ativos ":name"', - 'details_for_expense' => 'Detalhes para a conta de despesas ":name"', - 'details_for_revenue' => 'Detalhes para a conta de receitas ":name"', - 'details_for_cash' => 'Detalhes de conta caixa ":name"', - 'store_new_asset_account' => 'Guardar nova conta de ativos', - 'store_new_expense_account' => 'Guardar nova conta de despesas', - 'store_new_revenue_account' => 'Guardar nova conta de receitas', - 'edit_asset_account' => 'Editar conta de ativos ":name"', - 'edit_expense_account' => 'Editar conta de despesas ":name"', - 'edit_revenue_account' => 'Editar conta de receitas ":name"', - 'delete_asset_account' => 'Apagar conta de ativos ":name"', - 'delete_expense_account' => 'Apagar conta de despesas ":name"', - 'delete_revenue_account' => 'Apagar conta de receitas ":name"', - 'delete_liabilities_account' => 'Apagar passivo ":name"', - 'asset_deleted' => 'Conta de ativos ":name" apagada com sucesso', - 'account_deleted' => 'Conta ":name" eliminada com sucesso', - 'expense_deleted' => 'Conta de despesas ":name" apagada com sucesso', - 'revenue_deleted' => 'Conta de receitas ":name" apagada com sucesso', - 'update_asset_account' => 'Atualizar conta de ativos', - 'update_undefined_account' => 'Atualizar conta', - 'update_liabilities_account' => 'Atualizar conta de passivos', - 'update_expense_account' => 'Atualizar conta de despesas', - 'update_revenue_account' => 'Atualizar conta de receitas', - 'make_new_asset_account' => 'Criar conta de ativos', - 'make_new_expense_account' => 'Criar conta de despesas', - 'make_new_revenue_account' => 'Criar conta de receitas', - 'make_new_liabilities_account' => 'Criar nova conta de passivos', - 'asset_accounts' => 'Conta de ativos', - 'undefined_accounts' => 'Contas', - 'asset_accounts_inactive' => 'Contas de ativos (inativas)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Conta de despesas', - 'expense_accounts_inactive' => 'Contas de despesas (desativadas)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Conta de receitas', - 'revenue_accounts_inactive' => 'Contas de receita (desativadas)', - 'cash_accounts' => 'Contas de caixa', - 'Cash account' => 'Conta de caixa', - 'liabilities_accounts' => 'Conta de passivos', - 'liabilities_accounts_inactive' => 'Contas de passivos (inativas)', - 'reconcile_account' => 'Reconciliar conta ":account"', - 'overview_of_reconcile_modal' => 'Visão geral da reconciliação', - 'delete_reconciliation' => 'Apagar reconciliação', - 'update_reconciliation' => 'Atualizar reconciliação', - 'amount_cannot_be_zero' => 'O valor não pode ser zero', - 'end_of_reconcile_period' => 'Fim do período de reconciliação: :period', - 'start_of_reconcile_period' => 'Início do período de reconciliação: :period', - 'start_balance' => 'Saldo inicial', - 'end_balance' => 'Saldo final', - 'update_balance_dates_instruction' => 'Corresponda os valores e datas acima ao seu extrato bancário e pressione "Começar reconciliação"', - 'select_transactions_instruction' => 'Selecione as transações que aparecem no seu extrato bancário.', - 'select_range_and_balance' => 'Primeiro verifique a data e os saldos. Em seguida, pressione "Iniciar reconciliação"', - 'date_change_instruction' => 'Se alterar o intervalo de datas agora, todo o progresso será perdido.', - 'update_selection' => 'Atualizar seleção', - 'store_reconcile' => 'Guardar reconciliação', - 'reconciliation_transaction' => 'Transacção de reconciliação', - 'Reconciliation' => 'Reconciliação', - 'reconciliation' => 'Reconciliação', - 'reconcile_options' => 'Opções de reconciliação', - 'reconcile_range' => 'Intervalo de reconciliação', - 'start_reconcile' => 'Começar a reconciliar', - 'cash_account_type' => 'Dinheiro', - 'cash' => 'dinheiro', - 'cant_find_redirect_account' => 'Firefly III tentou redirecciona-lo mas não conseguiu. Pedimos desculpa. De volta ao inicio.', - 'account_type' => 'Tipo de conta', - 'save_transactions_by_moving' => 'Guarde esta transacção movendo-a para outra conta:|Guarde estas transacções movendo-as para outra conta:', - 'save_transactions_by_moving_js' => 'Nenhuma transação| Guarde esta transação movendo-a para outra conta| Guarde estas transações movendo-as para outra conta.', - 'stored_new_account' => 'Nova conta ":name" gravada!', - 'stored_new_account_js' => 'Nova conta "{name}" armazenada!', - 'updated_account' => 'Conta ":name" alterada', - 'updated_account_js' => 'Conta atualizada "{title}".', - 'credit_card_options' => 'Opções do cartão de crédito', - 'no_transactions_account' => 'Não existem transações (neste período) para a conta de ativos ":name".', - 'no_transactions_period' => 'Não há transações (neste período).', - 'no_data_for_chart' => 'Não existe informação suficiente (ainda) para gerar este gráfico.', - 'select_at_least_one_account' => 'Por favor, selecione, pelo menos, uma conta de ativos', - 'select_at_least_one_category' => 'Por favor, selecione pelo menos uma categoria', - 'select_at_least_one_budget' => 'Por favor, selecione, pelo menos, um orçamento', - 'select_at_least_one_tag' => 'Por favor, selecione, pelo menos, uma etiqueta', - 'select_at_least_one_expense' => 'Por favor, selecione pelo menos uma combinação de contas de despesas/receita. Se não tiver nenhuma (a lista está vazia), este relatório não fica disponível.', - 'account_default_currency' => 'Esta vai ser a moeda predefinida associada a esta conta.', - 'reconcile_has_more' => 'O seu diário Firefly III tem mais dinheiro do que aquele que o seu banco afirma ter. Existem várias opções. Por favor, escolha o que quer fazer. Depois, pressione "Confirmar reconciliação".', - 'reconcile_has_less' => 'O seu diário Firefly III tem menos dinheiro do que aquele que o seu banco afirma ter. Existem várias opções. Por favor, escolha o que quer fazer. Depois, pressione "Confirmar reconciliação".', - 'reconcile_is_equal' => 'O seu diário Firefly III e o seu extrato bancário estão iguais. Não existe nada para fazer. Por favor, carregue em "Confirmar reconciliação" para confirmar.', - 'create_pos_reconcile_transaction' => 'Desmarque as transações selecionadas e crie uma correção adicionando :amount a esta conta de ativos.', - 'create_neg_reconcile_transaction' => 'Desmarque as transações selecionadas e crie uma correção removendo :amount desta conta de ativos.', - 'reconcile_do_nothing' => 'Limpar as transações selecionadas, mas não corrigir.', - 'reconcile_go_back' => 'Pode sempre editar ou eliminar uma correção mais tarde.', - 'must_be_asset_account' => 'Só pode reconciliar contas de ativos', - 'reconciliation_stored' => 'Reconciliação guardada', - 'reconciliation_error' => 'Devido a um erro as transações foram marcadas como reconciliadas, mas a correção não foi guardada: :error.', - 'reconciliation_transaction_title' => 'Reconciliação (:from a :to)', - 'sum_of_reconciliation' => 'Soma da reconciliação', - 'reconcile_this_account' => 'Reconciliar esta conta', - 'reconcile' => 'Reconciliar', - 'show' => 'Mostrar', - 'confirm_reconciliation' => 'Confirmar reconciliação', - 'submitted_start_balance' => 'Saldo inicial enviado', - 'selected_transactions' => 'Transações selecionadas (:count)', - 'already_cleared_transactions' => 'Transações já removidas (:count)', - 'submitted_end_balance' => 'Saldo final enviado', - 'initial_balance_description' => 'Saldo inicial para ":account"', - 'liability_credit_description' => 'Crédito de passivo para ":account"', - 'interest_calc_' => 'desconhecido', - 'interest_calc_daily' => 'Por dia', - 'interest_calc_monthly' => 'Por mês', - 'interest_calc_yearly' => 'Por ano', - 'interest_calc_weekly' => 'Por semana', - 'interest_calc_half-year' => 'Por semestre', - 'interest_calc_quarterly' => 'Por trimestre', - 'initial_balance_account' => 'Saldo inicial da conta :account', - 'list_options' => 'Listar opções', + 'i_am_owed_amount' => 'Devem-me um montante', + 'i_owe_amount' => 'Eu devo um montante', + 'inactive_account_link' => 'Você tem :count conta inativa (arquivada), que pode visualizar nesta página separada.| Você tem :count contas inativas (arquivadas), que pode visualizar nesta página separada.', + 'all_accounts_inactive' => 'Estas são as suas contas inactivas.', + 'active_account_link' => 'Este link volta para suas contas activas.', + 'account_missing_transaction' => 'A conta #:id (":name") não pode ser visualizada diretamente, no entanto, o Firefly está sem informação de redirecionamento.', + 'cc_monthly_payment_date_help' => 'Selecione qualquer ano e mês, será ignorado de qualquer forma. Apenas o dia do mês é relevante.', + 'details_for_asset' => 'Detalhes para a conta de ativos ":name"', + 'details_for_expense' => 'Detalhes para a conta de despesas ":name"', + 'details_for_revenue' => 'Detalhes para a conta de receitas ":name"', + 'details_for_cash' => 'Detalhes de conta caixa ":name"', + 'store_new_asset_account' => 'Guardar nova conta de ativos', + 'store_new_expense_account' => 'Guardar nova conta de despesas', + 'store_new_revenue_account' => 'Guardar nova conta de receitas', + 'edit_asset_account' => 'Editar conta de ativos ":name"', + 'edit_expense_account' => 'Editar conta de despesas ":name"', + 'edit_revenue_account' => 'Editar conta de receitas ":name"', + 'delete_asset_account' => 'Apagar conta de ativos ":name"', + 'delete_expense_account' => 'Apagar conta de despesas ":name"', + 'delete_revenue_account' => 'Apagar conta de receitas ":name"', + 'delete_liabilities_account' => 'Apagar passivo ":name"', + 'asset_deleted' => 'Conta de ativos ":name" apagada com sucesso', + 'account_deleted' => 'Conta ":name" eliminada com sucesso', + 'expense_deleted' => 'Conta de despesas ":name" apagada com sucesso', + 'revenue_deleted' => 'Conta de receitas ":name" apagada com sucesso', + 'update_asset_account' => 'Atualizar conta de ativos', + 'update_undefined_account' => 'Atualizar conta', + 'update_liabilities_account' => 'Atualizar conta de passivos', + 'update_expense_account' => 'Atualizar conta de despesas', + 'update_revenue_account' => 'Atualizar conta de receitas', + 'make_new_asset_account' => 'Criar conta de ativos', + 'make_new_expense_account' => 'Criar conta de despesas', + 'make_new_revenue_account' => 'Criar conta de receitas', + 'make_new_liabilities_account' => 'Criar nova conta de passivos', + 'asset_accounts' => 'Conta de ativos', + 'undefined_accounts' => 'Contas', + 'asset_accounts_inactive' => 'Contas de ativos (inativas)', + 'expense_account' => 'Conta de despesas', + 'expense_accounts' => 'Conta de despesas', + 'expense_accounts_inactive' => 'Contas de despesas (desativadas)', + 'revenue_account' => 'Conta de receitas', + 'revenue_accounts' => 'Conta de receitas', + 'revenue_accounts_inactive' => 'Contas de receita (desativadas)', + 'cash_accounts' => 'Contas de caixa', + 'Cash account' => 'Conta de caixa', + 'liabilities_accounts' => 'Conta de passivos', + 'liabilities_accounts_inactive' => 'Contas de passivos (inativas)', + 'reconcile_account' => 'Reconciliar conta ":account"', + 'overview_of_reconcile_modal' => 'Visão geral da reconciliação', + 'delete_reconciliation' => 'Apagar reconciliação', + 'update_reconciliation' => 'Atualizar reconciliação', + 'amount_cannot_be_zero' => 'O valor não pode ser zero', + 'end_of_reconcile_period' => 'Fim do período de reconciliação: :period', + 'start_of_reconcile_period' => 'Início do período de reconciliação: :period', + 'start_balance' => 'Saldo inicial', + 'end_balance' => 'Saldo final', + 'update_balance_dates_instruction' => 'Corresponda os valores e datas acima ao seu extrato bancário e pressione "Começar reconciliação"', + 'select_transactions_instruction' => 'Selecione as transações que aparecem no seu extrato bancário.', + 'select_range_and_balance' => 'Primeiro verifique a data e os saldos. Em seguida, pressione "Iniciar reconciliação"', + 'date_change_instruction' => 'Se alterar o intervalo de datas agora, todo o progresso será perdido.', + 'update_selection' => 'Atualizar seleção', + 'store_reconcile' => 'Guardar reconciliação', + 'reconciliation_transaction' => 'Transacção de reconciliação', + 'Reconciliation' => 'Reconciliação', + 'reconciliation' => 'Reconciliação', + 'reconcile_options' => 'Opções de reconciliação', + 'reconcile_range' => 'Intervalo de reconciliação', + 'start_reconcile' => 'Começar a reconciliar', + 'cash_account_type' => 'Dinheiro', + 'cash' => 'dinheiro', + 'cant_find_redirect_account' => 'Firefly III tentou redirecciona-lo mas não conseguiu. Pedimos desculpa. De volta ao inicio.', + 'account_type' => 'Tipo de conta', + 'save_transactions_by_moving' => 'Guarde esta transacção movendo-a para outra conta:|Guarde estas transacções movendo-as para outra conta:', + 'save_transactions_by_moving_js' => 'Nenhuma transação| Guarde esta transação movendo-a para outra conta| Guarde estas transações movendo-as para outra conta.', + 'stored_new_account' => 'Nova conta ":name" gravada!', + 'stored_new_account_js' => 'Nova conta "{name}" armazenada!', + 'updated_account' => 'Conta ":name" alterada', + 'updated_account_js' => 'Conta atualizada "{title}".', + 'credit_card_options' => 'Opções do cartão de crédito', + 'no_transactions_account' => 'Não existem transações (neste período) para a conta de ativos ":name".', + 'no_transactions_period' => 'Não há transações (neste período).', + 'no_data_for_chart' => 'Não existe informação suficiente (ainda) para gerar este gráfico.', + 'select_at_least_one_account' => 'Por favor, selecione, pelo menos, uma conta de ativos', + 'select_at_least_one_category' => 'Por favor, selecione pelo menos uma categoria', + 'select_at_least_one_budget' => 'Por favor, selecione, pelo menos, um orçamento', + 'select_at_least_one_tag' => 'Por favor, selecione, pelo menos, uma etiqueta', + 'select_at_least_one_expense' => 'Por favor, selecione pelo menos uma combinação de contas de despesas/receita. Se não tiver nenhuma (a lista está vazia), este relatório não fica disponível.', + 'account_default_currency' => 'Esta vai ser a moeda predefinida associada a esta conta.', + 'reconcile_has_more' => 'O seu diário Firefly III tem mais dinheiro do que aquele que o seu banco afirma ter. Existem várias opções. Por favor, escolha o que quer fazer. Depois, pressione "Confirmar reconciliação".', + 'reconcile_has_less' => 'O seu diário Firefly III tem menos dinheiro do que aquele que o seu banco afirma ter. Existem várias opções. Por favor, escolha o que quer fazer. Depois, pressione "Confirmar reconciliação".', + 'reconcile_is_equal' => 'O seu diário Firefly III e o seu extrato bancário estão iguais. Não existe nada para fazer. Por favor, carregue em "Confirmar reconciliação" para confirmar.', + 'create_pos_reconcile_transaction' => 'Desmarque as transações selecionadas e crie uma correção adicionando :amount a esta conta de ativos.', + 'create_neg_reconcile_transaction' => 'Desmarque as transações selecionadas e crie uma correção removendo :amount desta conta de ativos.', + 'reconcile_do_nothing' => 'Limpar as transações selecionadas, mas não corrigir.', + 'reconcile_go_back' => 'Pode sempre editar ou eliminar uma correção mais tarde.', + 'must_be_asset_account' => 'Só pode reconciliar contas de ativos', + 'reconciliation_stored' => 'Reconciliação guardada', + 'reconciliation_error' => 'Devido a um erro as transações foram marcadas como reconciliadas, mas a correção não foi guardada: :error.', + 'reconciliation_transaction_title' => 'Reconciliação (:from a :to)', + 'sum_of_reconciliation' => 'Soma da reconciliação', + 'reconcile_this_account' => 'Reconciliar esta conta', + 'reconcile' => 'Reconciliar', + 'show' => 'Mostrar', + 'confirm_reconciliation' => 'Confirmar reconciliação', + 'submitted_start_balance' => 'Saldo inicial enviado', + 'selected_transactions' => 'Transações selecionadas (:count)', + 'already_cleared_transactions' => 'Transações já removidas (:count)', + 'submitted_end_balance' => 'Saldo final enviado', + 'initial_balance_description' => 'Saldo inicial para ":account"', + 'liability_credit_description' => 'Crédito de passivo para ":account"', + 'interest_calc_' => 'desconhecido', + 'interest_calc_daily' => 'Por dia', + 'interest_calc_monthly' => 'Por mês', + 'interest_calc_yearly' => 'Por ano', + 'interest_calc_weekly' => 'Por semana', + 'interest_calc_half-year' => 'Por semestre', + 'interest_calc_quarterly' => 'Por trimestre', + 'initial_balance_account' => 'Saldo inicial da conta :account', + 'list_options' => 'Listar opções', // categories: - 'new_category' => 'Nova categoria', - 'create_new_category' => 'Criar nova categoria', - 'without_category' => 'Sem uma categoria', - 'update_category' => 'Atualizar categoria', - 'updated_category' => 'Categoria ":name" atualizada', - 'categories' => 'Categorias', - 'edit_category' => 'Editar categoria ":name"', - 'no_category' => '(sem categoria)', - 'unknown_category_plain' => 'No category', - 'category' => 'Categoria', - 'delete_category' => 'Apagar categoria ":name"', - 'deleted_category' => 'Categoria ":name" apagada', - 'store_category' => 'Gravar categoria', - 'stored_category' => 'Categoria ":name" gravada', - 'without_category_between' => 'Sem categoria entre :start e :end', + 'new_category' => 'Nova categoria', + 'create_new_category' => 'Criar nova categoria', + 'without_category' => 'Sem uma categoria', + 'update_category' => 'Atualizar categoria', + 'updated_category' => 'Categoria ":name" atualizada', + 'categories' => 'Categorias', + 'edit_category' => 'Editar categoria ":name"', + 'no_category' => '(sem categoria)', + 'unknown_category_plain' => 'Sem categoria', + 'category' => 'Categoria', + 'delete_category' => 'Apagar categoria ":name"', + 'deleted_category' => 'Categoria ":name" apagada', + 'store_category' => 'Gravar categoria', + 'stored_category' => 'Categoria ":name" gravada', + 'without_category_between' => 'Sem categoria entre :start e :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Atualizar levantamento', - 'update_deposit' => 'Atualizar depósito', - 'update_transaction' => 'Atualizar transação', - 'update_transfer' => 'Atualizar transferência', - 'updated_withdrawal' => 'Atualizar levantamento ":description"', - 'updated_deposit' => 'Atualizar depósito ":description"', - 'updated_transfer' => 'Atualizar transferência ":description"', - 'no_changes_withdrawal' => 'O levantamento ":description" não foi alterado.', - 'no_changes_deposit' => 'O depósito ":description" não foi alterado.', - 'no_changes_transfer' => 'A transferência ":description" não foi alterada.', - 'delete_withdrawal' => 'Apagar levantamento ":description"', - 'delete_deposit' => 'Apagar depósito ":description"', - 'delete_transfer' => 'Apagar transferência ":description"', - 'deleted_withdrawal' => 'Apagado o levantamento ":description" com sucesso', - 'deleted_deposit' => 'Apagado o depósito ":description" com sucesso', - 'deleted_transfer' => 'Transferência ":description" apagada com sucesso', - 'deleted_reconciliation' => 'Transação de reconciliação ":description" apagada com sucesso', - 'stored_journal' => 'Inserida a transação ":description" com sucesso', - 'stored_journal_no_descr' => 'Nova transação criada com sucesso', - 'updated_journal_no_descr' => 'Transação atualizada com sucesso', - 'select_transactions' => 'Selecionar transações', - 'rule_group_select_transactions' => 'Aplicar ":title" às transações', - 'rule_select_transactions' => 'Aplicar ":title" às transações', - 'stop_selection' => 'Pare de selecionar transações', - 'reconcile_selected' => 'Reconciliar', - 'mass_delete_journals' => 'Apagar um número de transações', - 'mass_edit_journals' => 'Editar um número de transações', - 'mass_bulk_journals' => 'Editar em bloco um número de transações', - 'mass_bulk_journals_explain' => 'Este formulário permite alterar as propriedades das transações listadas abaixo numa atualização abrangente. Todas as transações na tabela serão atualizadas quando alterar os parâmetros que estão aqui.', - 'part_of_split' => 'Esta transação faz parte de uma transação dividida. Se não selecionar todas as partições, pode acabar por mudar apenas uma parte da transação.', - 'bulk_set_new_values' => 'Use as entradas abaixo para definir novos valores. Se deixar em branco, serão definidas em branco para todos. Além disso, note que só serão dados orçamentos a levantamentos.', - 'no_bulk_category' => 'Não atualizar categoria', - 'no_bulk_budget' => 'Não atualizar orçamento', - 'no_bulk_tags' => 'Não atualizar etiqueta(s)', - 'replace_with_these_tags' => 'Substituir com estas etiquetas', - 'append_these_tags' => 'Adicionar estas etiquetas', - 'mass_edit' => 'Editar selecionados individualmente', - 'bulk_edit' => 'Editar selecionados em bloco', - 'mass_delete' => 'Apagar selecionados', - 'cannot_edit_other_fields' => 'Não pode editar em bloco outros campos para além destes, porque não existe espaço para mostrá-los. Por favor, siga o link para editá-los um-a-um, se tiver necessidade disso.', - 'cannot_change_amount_reconciled' => 'Não pode alterar o montante de transações reconciliadas.', - 'no_budget' => '(sem orçamento)', - 'no_bill' => '(sem encargo)', - 'account_per_budget' => 'Conta por orçamento', - 'account_per_category' => 'Conta por categoria', - 'create_new_object' => 'Criar', - 'empty' => '(vazio)', - 'all_other_budgets' => '(todos os outros orçamentos)', - 'all_other_accounts' => '(todas as outras contas)', - 'expense_per_source_account' => 'Despesas por conta de origem', - 'expense_per_destination_account' => 'Despesas por conta de destino', - 'income_per_destination_account' => 'Rendimento por conta de destino', - 'spent_in_specific_category' => 'Gasto na categoria ":category"', - 'earned_in_specific_category' => 'Ganhos na categoria ":category"', - 'spent_in_specific_tag' => 'Gasto na etiqueta ":tag"', - 'earned_in_specific_tag' => 'Ganhos na etiqueta ":tag"', - 'income_per_source_account' => 'Rendimento por conta de origem', - 'average_spending_per_destination' => 'Média das despesas por conta de destino', - 'average_spending_per_source' => 'Média das despesas por conta de origem', - 'average_earning_per_source' => 'Média dos ganhos por conta de origem', - 'average_earning_per_destination' => 'Média de ganhos por conta de destino', - 'account_per_tag' => 'Conta por etiqueta', - 'tag_report_expenses_listed_once' => 'Despesas e receitas nunca são listadas duas vezes. Se uma transação tiver múltiplas etiquetas, apenas aparece se estiver debaixo de uma etiqueta selecionada. Esta lista pode parecer que têm dados em falta, no entanto os montantes estarão corretos.', - 'double_report_expenses_charted_once' => 'Despesas e receitas nunca são listadas duas vezes. Se uma transação tiver múltiplas etiquetas, apenas aparece se estiver debaixo de uma etiqueta selecionada. Este gráfico pode parecer que têm dados em falta, no entanto os montantes estarão corretos.', - 'tag_report_chart_single_tag' => 'Este gráfico está aplicado a uma única etiqueta. Se a transação tiver múltiplas etiquetas, o que você vê aqui pode ser refletido noutros gráficos de outras etiquetas.', - 'tag' => 'Etiqueta', - 'no_budget_squared' => '(sem orçamento)', - 'perm-delete-many' => 'Apagar tantos itens de uma vez pode ter efeitos desastrosos. Por favor tenha cuidado. Pode sempre apagar partes de uma transação dividida a partir desta página, por tanto tenha cuidado.', - 'mass_deleted_transactions_success' => 'Apagada :count transação.|Apagadas :count transações.', - 'mass_edited_transactions_success' => 'Atualizada :count transação.|Atualizadas :count transações.', - 'opt_group_' => '(sem tipo de conta)', - 'opt_group_no_account_type' => '(sem tipo de conta)', - 'opt_group_defaultAsset' => 'Conta de activos padrão', - 'opt_group_savingAsset' => 'Contas poupança', - 'opt_group_sharedAsset' => 'Contas de activos partilhados', - 'opt_group_ccAsset' => 'Cartões de crédito', - 'opt_group_cashWalletAsset' => 'Carteiras de dinheiro', - 'opt_group_expense_account' => 'Contas de despesas', - 'opt_group_revenue_account' => 'Contas de receitas', - 'opt_group_l_Loan' => 'Passivo: Empréstimo', - 'opt_group_cash_account' => 'Conta de caixa', - 'opt_group_l_Debt' => 'Passivo: dívida', - 'opt_group_l_Mortgage' => 'Passivo: hipoteca', - 'opt_group_l_Credit card' => 'Passivo: cartão de crédito', - 'notes' => 'Notas', - 'unknown_journal_error' => 'Não foi possível guardar a transação. Por favor, verifique os ficheiros de log.', - 'attachment_not_found' => 'Este anexo não foi encontrado.', - 'journal_link_bill' => 'Esta transação está ligada ao encargo :name. Para remover a ligação, desmarque a caixa de seleção. Utilize as regras para ligá-la a outro encargo.', - 'transaction_stored_link' => 'A transação #{ID} ("{title}") foi guardada.', - 'transaction_new_stored_link' => 'A transação#{ID} foi guardada.', - 'transaction_updated_link' => 'A transação #{ID} ("{title}") foi atualizada.', - 'transaction_updated_no_changes' => 'A transação #{ID} ("{title}") não recebeu nenhuma alteração.', - 'first_split_decides' => 'A primeira divisão determina o valor deste campo', - 'first_split_overrules_source' => 'A primeira divisão pode substituir a conta de origem', - 'first_split_overrules_destination' => 'A primeira divisão pode substituir a conta de destino', - 'spent_x_of_y' => 'Gasto {amount} de {total}', + 'wait_loading_transaction' => 'Por favor, aguarde o formulário carregar', + 'wait_loading_data' => 'Por favor, aguarde enquanto carregamos a sua informação...', + 'wait_attachments' => 'Por favor, aguarde os anexos serem carregados.', + 'errors_upload' => 'O upload falhou. Por favor, verifique o console do seu navegador para ver o erro.', + 'amount_foreign_if' => 'Valor em moeda estrangeira, se houver', + 'amount_destination_account' => 'Valor na moeda da conta de destino', + 'edit_transaction_title' => 'Editar transação ":description"', + 'unreconcile' => 'Desfazer reconciliação', + 'update_withdrawal' => 'Atualizar levantamento', + 'update_deposit' => 'Atualizar depósito', + 'update_transaction' => 'Atualizar transação', + 'update_transfer' => 'Atualizar transferência', + 'updated_withdrawal' => 'Atualizar levantamento ":description"', + 'updated_deposit' => 'Atualizar depósito ":description"', + 'updated_transfer' => 'Atualizar transferência ":description"', + 'no_changes_withdrawal' => 'O levantamento ":description" não foi alterado.', + 'no_changes_deposit' => 'O depósito ":description" não foi alterado.', + 'no_changes_transfer' => 'A transferência ":description" não foi alterada.', + 'delete_withdrawal' => 'Apagar levantamento ":description"', + 'delete_deposit' => 'Apagar depósito ":description"', + 'delete_transfer' => 'Apagar transferência ":description"', + 'deleted_withdrawal' => 'Apagado o levantamento ":description" com sucesso', + 'deleted_deposit' => 'Apagado o depósito ":description" com sucesso', + 'deleted_transfer' => 'Transferência ":description" apagada com sucesso', + 'deleted_reconciliation' => 'Transação de reconciliação ":description" apagada com sucesso', + 'stored_journal' => 'Inserida a transação ":description" com sucesso', + 'stored_journal_js' => 'A transação "%{description}" foi criada com sucesso', + 'stored_journal_no_descr' => 'Nova transação criada com sucesso', + 'updated_journal_no_descr' => 'Transação atualizada com sucesso', + 'select_transactions' => 'Selecionar transações', + 'rule_group_select_transactions' => 'Aplicar ":title" às transações', + 'rule_select_transactions' => 'Aplicar ":title" às transações', + 'stop_selection' => 'Pare de selecionar transações', + 'reconcile_selected' => 'Reconciliar', + 'mass_delete_journals' => 'Apagar um número de transações', + 'mass_edit_journals' => 'Editar um número de transações', + 'mass_bulk_journals' => 'Editar em bloco um número de transações', + 'mass_bulk_journals_explain' => 'Este formulário permite alterar as propriedades das transações listadas abaixo numa atualização abrangente. Todas as transações na tabela serão atualizadas quando alterar os parâmetros que estão aqui.', + 'part_of_split' => 'Esta transação faz parte de uma transação dividida. Se não selecionar todas as partições, pode acabar por mudar apenas uma parte da transação.', + 'bulk_set_new_values' => 'Use as entradas abaixo para definir novos valores. Se deixar em branco, serão definidas em branco para todos. Além disso, note que só serão dados orçamentos a levantamentos.', + 'no_bulk_category' => 'Não atualizar categoria', + 'no_bulk_budget' => 'Não atualizar orçamento', + 'no_bulk_tags' => 'Não atualizar etiqueta(s)', + 'replace_with_these_tags' => 'Substituir com estas etiquetas', + 'append_these_tags' => 'Adicionar estas etiquetas', + 'mass_edit' => 'Editar selecionados individualmente', + 'bulk_edit' => 'Editar selecionados em bloco', + 'mass_delete' => 'Apagar selecionados', + 'cannot_edit_other_fields' => 'Não pode editar em bloco outros campos para além destes, porque não existe espaço para mostrá-los. Por favor, siga o link para editá-los um-a-um, se tiver necessidade disso.', + 'cannot_change_amount_reconciled' => 'Não pode alterar o montante de transações reconciliadas.', + 'no_budget' => '(sem orçamento)', + 'no_bill' => '(sem encargo)', + 'account_per_budget' => 'Conta por orçamento', + 'account_per_category' => 'Conta por categoria', + 'create_new_object' => 'Criar', + 'empty' => '(vazio)', + 'all_other_budgets' => '(todos os outros orçamentos)', + 'all_other_accounts' => '(todas as outras contas)', + 'expense_per_source_account' => 'Despesas por conta de origem', + 'expense_per_destination_account' => 'Despesas por conta de destino', + 'income_per_destination_account' => 'Rendimento por conta de destino', + 'spent_in_specific_category' => 'Gasto na categoria ":category"', + 'earned_in_specific_category' => 'Ganhos na categoria ":category"', + 'spent_in_specific_tag' => 'Gasto na etiqueta ":tag"', + 'earned_in_specific_tag' => 'Ganhos na etiqueta ":tag"', + 'income_per_source_account' => 'Rendimento por conta de origem', + 'average_spending_per_destination' => 'Média das despesas por conta de destino', + 'average_spending_per_source' => 'Média das despesas por conta de origem', + 'average_earning_per_source' => 'Média dos ganhos por conta de origem', + 'average_earning_per_destination' => 'Média de ganhos por conta de destino', + 'account_per_tag' => 'Conta por etiqueta', + 'tag_report_expenses_listed_once' => 'Despesas e receitas nunca são listadas duas vezes. Se uma transação tiver múltiplas etiquetas, apenas aparece se estiver debaixo de uma etiqueta selecionada. Esta lista pode parecer que têm dados em falta, no entanto os montantes estarão corretos.', + 'double_report_expenses_charted_once' => 'Despesas e receitas nunca são listadas duas vezes. Se uma transação tiver múltiplas etiquetas, apenas aparece se estiver debaixo de uma etiqueta selecionada. Este gráfico pode parecer que têm dados em falta, no entanto os montantes estarão corretos.', + 'tag_report_chart_single_tag' => 'Este gráfico está aplicado a uma única etiqueta. Se a transação tiver múltiplas etiquetas, o que você vê aqui pode ser refletido noutros gráficos de outras etiquetas.', + 'tag' => 'Etiqueta', + 'no_budget_squared' => '(sem orçamento)', + 'perm-delete-many' => 'Apagar tantos itens de uma vez pode ter efeitos desastrosos. Por favor tenha cuidado. Pode sempre apagar partes de uma transação dividida a partir desta página, por tanto tenha cuidado.', + 'mass_deleted_transactions_success' => 'Apagada :count transação.|Apagadas :count transações.', + 'mass_edited_transactions_success' => 'Atualizada :count transação.|Atualizadas :count transações.', + 'opt_group_' => '(sem tipo de conta)', + 'opt_group_no_account_type' => '(sem tipo de conta)', + 'opt_group_defaultAsset' => 'Conta de activos padrão', + 'opt_group_savingAsset' => 'Contas poupança', + 'opt_group_sharedAsset' => 'Contas de activos partilhados', + 'opt_group_ccAsset' => 'Cartões de crédito', + 'opt_group_cashWalletAsset' => 'Carteiras de dinheiro', + 'opt_group_expense_account' => 'Contas de despesas', + 'opt_group_revenue_account' => 'Contas de receitas', + 'opt_group_l_Loan' => 'Passivo: Empréstimo', + 'opt_group_cash_account' => 'Conta de caixa', + 'opt_group_l_Debt' => 'Passivo: dívida', + 'opt_group_l_Mortgage' => 'Passivo: hipoteca', + 'opt_group_l_Credit card' => 'Passivo: cartão de crédito', + 'notes' => 'Notas', + 'unknown_journal_error' => 'Não foi possível guardar a transação. Por favor, verifique os ficheiros de log.', + 'attachment_not_found' => 'Este anexo não foi encontrado.', + 'journal_link_bill' => 'Esta transação está ligada ao encargo :name. Para remover a ligação, desmarque a caixa de seleção. Utilize as regras para ligá-la a outro encargo.', + 'transaction_stored_link' => 'A transação #{ID} ("{title}") foi guardada.', + 'transaction_new_stored_link' => 'A transação#{ID} foi guardada.', + 'transaction_updated_link' => 'A transação #{ID} ("{title}") foi atualizada.', + 'transaction_updated_no_changes' => 'A transação #{ID} ("{title}") não recebeu nenhuma alteração.', + 'first_split_decides' => 'A primeira divisão determina o valor deste campo', + 'first_split_overrules_source' => 'A primeira divisão pode substituir a conta de origem', + 'first_split_overrules_destination' => 'A primeira divisão pode substituir a conta de destino', + 'spent_x_of_y' => 'Gasto {amount} de {total}', // new user: - 'welcome' => 'Bem-vindo ao Firefly III!', - 'submit' => 'Guardar', - 'submission' => 'Submissão', - 'submit_yes_really' => 'Submeter (sei o que faço)', - 'getting_started' => 'Primeiros passos', - 'to_get_started' => 'É bom ver que instalou o Firefly III com sucesso. Para começar a utilizar esta ferramenta, por favor insira o nome do seu banco bem como o montante presente na sua conta corrente principal. Não se preocupe por agora se tiver múltiplas contas. Pode sempre adicioná-las depois. É que o Firefly III necessita de alguma coisa para começar.', - 'savings_balance_text' => 'O Firefly III criará automaticamente uma conta de poupança. Por defeito, não haverá dinheiro na sua conta poupança, mas se indicar ao Firefly III o saldo ele será armazenado como tal.', - 'finish_up_new_user' => 'É isso mesmo! Pode continuar a pressionar Enviar. Vai voltar ao índice do Firefly III.', - 'stored_new_accounts_new_user' => 'Yay! As novas contas foram guardadas.', - 'set_preferred_language' => 'Se prefere utilizar o Firefly III noutro idioma, por favor indique-o aqui.', - 'language' => 'Idioma', - 'new_savings_account' => 'Conta de poupança :bank_name', - 'cash_wallet' => 'Carteira de dinheiro', - 'currency_not_present' => 'Não se preocupe se a moeda que utiliza normalmente não está listada. Pode criar as suas próprias moedas em Opções > Moedas.', + 'welcome' => 'Bem-vindo ao Firefly III!', + 'submit' => 'Guardar', + 'submission' => 'Submissão', + 'submit_yes_really' => 'Submeter (sei o que faço)', + 'getting_started' => 'Primeiros passos', + 'to_get_started' => 'É bom ver que instalou o Firefly III com sucesso. Para começar a utilizar esta ferramenta, por favor insira o nome do seu banco bem como o montante presente na sua conta corrente principal. Não se preocupe por agora se tiver múltiplas contas. Pode sempre adicioná-las depois. É que o Firefly III necessita de alguma coisa para começar.', + 'savings_balance_text' => 'O Firefly III criará automaticamente uma conta de poupança. Por defeito, não haverá dinheiro na sua conta poupança, mas se indicar ao Firefly III o saldo ele será armazenado como tal.', + 'finish_up_new_user' => 'É isso mesmo! Pode continuar a pressionar Enviar. Vai voltar ao índice do Firefly III.', + 'stored_new_accounts_new_user' => 'Yay! As novas contas foram guardadas.', + 'set_preferred_language' => 'Se prefere utilizar o Firefly III noutro idioma, por favor indique-o aqui.', + 'language' => 'Idioma', + 'new_savings_account' => 'Conta de poupança :bank_name', + 'cash_wallet' => 'Carteira de dinheiro', + 'currency_not_present' => 'Não se preocupe se a moeda que utiliza normalmente não está listada. Pode criar as suas próprias moedas em Opções > Moedas.', // home page: - 'transaction_table_description' => 'Uma tabela com as suas transações', - 'opposing_account' => 'Conta de contrapartida', - 'yourAccounts' => 'As suas contas', - 'your_accounts' => 'Resumo da sua conta', - 'category_overview' => 'Resumo da categoria', - 'expense_overview' => 'Resumo da conta de despesas', - 'revenue_overview' => 'Resumo da conta de receitas', - 'budgetsAndSpending' => 'Orçamentos e gastos', - 'budgets_and_spending' => 'Orçamentos e gastos', - 'go_to_budget' => 'Vá para o orçamento "{budget}"', - 'go_to_deposits' => 'Ir para depósitos', - 'go_to_expenses' => 'Ir para despesas', - 'savings' => 'Poupanças', - 'newWithdrawal' => 'Nova despesa', - 'newDeposit' => 'Novo depósito', - 'newTransfer' => 'Nova transferência', - 'bills_to_pay' => 'Encargos a pagar', - 'per_day' => 'Por dia', - 'left_to_spend_per_day' => 'Restante para gastar por dia', - 'bills_paid' => 'Encargos pagos', - 'custom_period' => 'Período personalizado', - 'reset_to_current' => 'Reiniciar o período personalizado', - 'select_period' => 'Selecionar um período', + 'transaction_table_description' => 'Uma tabela com as suas transações', + 'opposing_account' => 'Conta de contrapartida', + 'yourAccounts' => 'As suas contas', + 'your_accounts' => 'Resumo da sua conta', + 'category_overview' => 'Resumo da categoria', + 'expense_overview' => 'Resumo da conta de despesas', + 'revenue_overview' => 'Resumo da conta de receitas', + 'budgetsAndSpending' => 'Orçamentos e gastos', + 'budgets_and_spending' => 'Orçamentos e gastos', + 'go_to_budget' => 'Vá para o orçamento "{budget}"', + 'go_to_deposits' => 'Ir para depósitos', + 'go_to_expenses' => 'Ir para despesas', + 'savings' => 'Poupanças', + 'newWithdrawal' => 'Nova despesa', + 'newDeposit' => 'Novo depósito', + 'newTransfer' => 'Nova transferência', + 'bills_to_pay' => 'Encargos a pagar', + 'per_day' => 'Por dia', + 'left_to_spend_per_day' => 'Restante para gastar por dia', + 'bills_paid' => 'Encargos pagos', + 'custom_period' => 'Período personalizado', + 'reset_to_current' => 'Reiniciar o período personalizado', + 'select_period' => 'Selecionar um período', // menu and titles, should be recycled as often as possible: - 'currency' => 'Moeda', - 'preferences' => 'Preferências', - 'logout' => 'Terminar Sessão', - 'logout_other_sessions' => 'Terminar todas as outras sessões', - 'toggleNavigation' => 'Mostrar/esconder navegação', - 'searchPlaceholder' => 'Pesquisar...', - 'version' => 'Versão', - 'dashboard' => 'Painel de controlo', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Orçamento disponível ({currency})', - 'currencies' => 'Moedas', - 'activity' => 'Atividade', - 'usage' => 'Uso', - 'accounts' => 'Contas', - 'Asset account' => 'Conta de ativos', - 'Default account' => 'Conta de ativos', - 'Expense account' => 'Conta de despesas', - 'Revenue account' => 'Conta de receitas', - 'Initial balance account' => 'Conta de saldo inicial', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Dívida', - 'account_type_Loan' => 'Empréstimo', - 'account_type_Mortgage' => 'Hipoteca', - 'account_type_debt' => 'Dívida', - 'account_type_loan' => 'Empréstimo', - 'account_type_mortgage' => 'Hipoteca', - 'account_type_Credit card' => 'Cartão de crédito', - 'credit_card_type_monthlyFull' => 'Pagamento total a cada mês', - 'liability_direction_credit' => 'Esta dívida é-me devida', - 'liability_direction_debit' => 'Devo esta dívida a outra pessoa', - 'liability_direction_credit_short' => 'Devem-me esta dívida', - 'liability_direction_debit_short' => 'Devo esta dívida', - 'liability_direction__short' => 'Desconhecido', - 'liability_direction_null_short' => 'Desconhecido', - 'Liability credit' => 'Crédito de passivo', - 'budgets' => 'Orçamentos', - 'tags' => 'Etiquetas', - 'reports' => 'Relatórios', - 'transactions' => 'Transações', - 'expenses' => 'Despesas', - 'income' => 'Receita / rendimento', - 'transfers' => 'Transferências', - 'moneyManagement' => 'Gestão de dinheiro', - 'money_management' => 'Gestão de dinheiro', - 'tools' => 'Ferramentas', - 'piggyBanks' => 'Mealheiros', - 'piggy_banks' => 'Mealheiros', - 'amount_x_of_y' => '{current} de {total}', - 'bills' => 'Encargos', - 'withdrawal' => 'Levantamento', - 'opening_balance' => 'Saldo de abertura', - 'deposit' => 'Depósito', - 'account' => 'Conta', - 'transfer' => 'Transferência', - 'Withdrawal' => 'Levantamento', - 'Deposit' => 'Depósito', - 'Transfer' => 'Transferência', - 'bill' => 'Encargo', - 'yes' => 'Sim', - 'no' => 'Não', - 'amount' => 'Montante', - 'overview' => 'Visão geral', - 'saveOnAccount' => 'Poupar na conta', - 'unknown' => 'Desconhecido', - 'monthly' => 'Mensalmente', - 'profile' => 'Perfil', - 'errors' => 'Erros', - 'debt_start_date' => 'Data inicial da dívida', - 'debt_start_amount' => 'Montante inicial da dívida', - 'debt_start_amount_help' => 'É sempre melhor definir esse valor como um valor negativo. Leia as páginas de ajuda (canto superior direito (?)) para obter mais informações.', - 'interest_period_help' => 'Este campo é puramente cosmético e não será calculado por si. Acontece que os bancos são muito matreiros e por isso o Firefly III nunca acerta.', - 'store_new_liabilities_account' => 'Guardar novo passivo', - 'edit_liabilities_account' => 'Editar passivo ":name"', - 'financial_control' => 'Controlo financeiro', - 'accounting' => 'Contabilidade', - 'automation' => 'Automatização', - 'others' => 'Outros', - 'classification' => 'Classificação', - 'store_transaction' => 'Guardar transação', + 'currency' => 'Moeda', + 'preferences' => 'Preferências', + 'logout' => 'Terminar Sessão', + 'logout_other_sessions' => 'Terminar todas as outras sessões', + 'toggleNavigation' => 'Mostrar/esconder navegação', + 'searchPlaceholder' => 'Pesquisar...', + 'version' => 'Versão', + 'dashboard' => 'Painel de controlo', + 'income_and_expense' => 'Receitas e despesas', + 'all_money' => 'Todo o seu dinheiro', + 'unknown_source_plain' => 'Conta de origem desconhecida', + 'unknown_dest_plain' => 'Conta de destino desconhecida', + 'unknown_any_plain' => 'Conta desconhecida', + 'unknown_budget_plain' => 'Sem orçamento', + 'available_budget' => 'Orçamento disponível ({currency})', + 'currencies' => 'Moedas', + 'activity' => 'Atividade', + 'usage' => 'Uso', + 'accounts' => 'Contas', + 'Asset account' => 'Conta de ativos', + 'Default account' => 'Conta de ativos', + 'Expense account' => 'Conta de despesas', + 'Revenue account' => 'Conta de receitas', + 'Initial balance account' => 'Conta de saldo inicial', + 'account_type_Asset account' => 'Conta de ativos', + 'account_type_Expense account' => 'Conta de gastos / passivos', + 'account_type_Revenue account' => 'Conta de receitas', + 'account_type_Debt' => 'Dívida', + 'account_type_Loan' => 'Empréstimo', + 'account_type_Mortgage' => 'Hipoteca', + 'account_type_debt' => 'Dívida', + 'account_type_loan' => 'Empréstimo', + 'account_type_mortgage' => 'Hipoteca', + 'account_type_Credit card' => 'Cartão de crédito', + 'credit_card_type_monthlyFull' => 'Pagamento total a cada mês', + 'liability_direction_credit' => 'Esta dívida é-me devida', + 'liability_direction_debit' => 'Devo esta dívida a outra pessoa', + 'liability_direction_credit_short' => 'Devem-me esta dívida', + 'liability_direction_debit_short' => 'Devo esta dívida', + 'liability_direction__short' => 'Desconhecido', + 'liability_direction_null_short' => 'Desconhecido', + 'Liability credit' => 'Crédito de passivo', + 'budgets' => 'Orçamentos', + 'tags' => 'Etiquetas', + 'reports' => 'Relatórios', + 'transactions' => 'Transações', + 'expenses' => 'Despesas', + 'income' => 'Receita / rendimento', + 'transfers' => 'Transferências', + 'moneyManagement' => 'Gestão de dinheiro', + 'money_management' => 'Gestão de dinheiro', + 'tools' => 'Ferramentas', + 'piggyBanks' => 'Mealheiros', + 'piggy_banks' => 'Mealheiros', + 'amount_x_of_y' => '{current} de {total}', + 'bills' => 'Encargos', + 'withdrawal' => 'Levantamento', + 'opening_balance' => 'Saldo de abertura', + 'deposit' => 'Depósito', + 'account' => 'Conta', + 'transfer' => 'Transferência', + 'Withdrawal' => 'Levantamento', + 'Deposit' => 'Depósito', + 'Transfer' => 'Transferência', + 'bill' => 'Encargo', + 'yes' => 'Sim', + 'no' => 'Não', + 'amount' => 'Montante', + 'overview' => 'Visão geral', + 'saveOnAccount' => 'Poupar na conta', + 'unknown' => 'Desconhecido', + 'monthly' => 'Mensalmente', + 'profile' => 'Perfil', + 'errors' => 'Erros', + 'debt_start_date' => 'Data inicial da dívida', + 'debt_start_amount' => 'Montante inicial da dívida', + 'debt_start_amount_help' => 'É sempre melhor definir esse valor como um valor negativo. Leia as páginas de ajuda (canto superior direito (?)) para obter mais informações.', + 'interest_period_help' => 'Este campo é puramente cosmético e não será calculado por si. Acontece que os bancos são muito matreiros e por isso o Firefly III nunca acerta.', + 'store_new_liabilities_account' => 'Guardar novo passivo', + 'edit_liabilities_account' => 'Editar passivo ":name"', + 'financial_control' => 'Controlo financeiro', + 'accounting' => 'Contabilidade', + 'automation' => 'Automatização', + 'others' => 'Outros', + 'classification' => 'Classificação', + 'store_transaction' => 'Guardar transação', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Relatório financeiro predefinido entre :start e :end', - 'report_audit' => 'Visão geral do histórico de transações entre :start e :end', - 'report_category' => 'Relatório da categoria entre :start e :end', - 'report_double' => 'Relatório de despesas/receitas entre :start e :end', - 'report_budget' => 'Relatório de orçamento entre :start e :end', - 'report_tag' => 'Relatório de etiqueta entre :start e :end', - 'quick_link_reports' => 'Links rápidos', - 'quick_link_examples' => 'Estes são apenas alguns links de exemplo para o ajudar a começar. Veja as páginas de ajuda presentes no botão-(?) para mais informação sobre todos os relatórios e as palavras mágicas que pode usar.', - 'quick_link_default_report' => 'Relatório financeiro predefinido', - 'quick_link_audit_report' => 'Visão geral do histórico de transações', - 'report_this_month_quick' => 'Mês corrente, todas as contas', - 'report_last_month_quick' => 'Mês passado, todas as contas', - 'report_this_year_quick' => 'Ano atual, todas as contas', - 'report_this_fiscal_year_quick' => 'Ano fiscal atual, todas as contas', - 'report_all_time_quick' => 'Todas as contas, de sempre', - 'reports_can_bookmark' => 'Lembre-se de que os relatórios podem ser guardados.', - 'incomeVsExpenses' => 'Receitas vs Despesas', - 'accountBalances' => 'Saldos das contas', - 'balanceStart' => 'Saldo no início do período', - 'balanceEnd' => 'Saldo no final do período', - 'splitByAccount' => 'Dividir por conta', - 'coveredWithTags' => 'Com etiquetas', - 'leftInBudget' => 'Restante no orçamento', - 'left_in_debt' => 'Montante em dívida', - 'sumOfSums' => 'Soma das somas', - 'noCategory' => '(sem categoria)', - 'notCharged' => 'Não cobrado (ainda)', - 'inactive' => 'Inativo', - 'active' => 'Ativo', - 'difference' => 'Diferença', - 'money_flowing_in' => 'Dentro', - 'money_flowing_out' => 'Fora', - 'topX' => 'superior :number', - 'show_full_list' => 'Mostrar a lista inteira', - 'show_only_top' => 'Mostrar apenas topo :number', - 'report_type' => 'Tipo de relatório', - 'report_type_default' => 'Relatório financeiro padrão', - 'report_type_audit' => 'Visão geral do histórico de transacções (auditoria)', - 'report_type_category' => 'Relatório por categoria', - 'report_type_budget' => 'Relatório por orçamento', - 'report_type_tag' => 'Relatório por etiqueta', - 'report_type_double' => 'Relatório de despesas/receitas', - 'more_info_help' => 'Mais informação sobre este tipo de relatórios pode ser encontrada nas páginas de ajuda. Por favor carregue no ícone (?) no canto superior direito.', - 'report_included_accounts' => 'Contas incluídas', - 'report_date_range' => 'Intervalo de datas', - 'report_preset_ranges' => 'Intervalos pré-definidos', - 'shared' => 'Partilhado', - 'fiscal_year' => 'Ano fiscal', - 'income_entry' => 'Rendimento da conta ":name" entre :start e :end', - 'expense_entry' => 'Despesas na conta ":name" entre :start e :end', - 'category_entry' => 'Despesas e receitas na categoria ":name" entre :start e :end', - 'budget_spent_amount' => 'Despesas no orçamento ":budget" entre :start e :end', - 'balance_amount' => 'Despesas no orçamento ":budget" pagas com a conta ":account" entre :start e :end', - 'no_audit_activity' => 'Sem atividade registada na conta :account_name entre :start e :end.', - 'audit_end_balance' => 'O saldo da conta :account_name no final de :end era :balance', - 'reports_extra_options' => 'Opções adicionais', - 'report_has_no_extra_options' => 'Este relatório não tem opções adicionais', - 'reports_submit' => 'Ver relatório', - 'end_after_start_date' => 'A data de fim do relatório deve ser superior à da data de início.', - 'select_category' => 'Selecionar categoria(s)', - 'select_budget' => 'Selecionar orçamento(s).', - 'select_tag' => 'Selecionar etiqueta(s).', - 'income_per_category' => 'Receita por categoria', - 'expense_per_category' => 'Despesa por categoria', - 'expense_per_budget' => 'Despesa por orçamento', - 'income_per_account' => 'Receita por conta', - 'expense_per_account' => 'Despesa por conta', - 'expense_per_tag' => 'Despesa por etiqueta', - 'income_per_tag' => 'Receita por etiqueta', - 'include_expense_not_in_budget' => 'Despesas incluídas fora do(s) orçamento(s) selecionado(s)', - 'include_expense_not_in_account' => 'Despesas incluídas fora da(s) conta(s) selecionada(s)', - 'include_expense_not_in_category' => 'Despesas incluídas fora da(s) categoria(s) selecionada(s)', - 'include_income_not_in_category' => 'Rendimento incluído fora da(s) categoria(s) selecionada(s)', - 'include_income_not_in_account' => 'Rendimento incluído fora da(s) conta(s) selecionada(s)', - 'include_income_not_in_tags' => 'Rendimento incluído fora da(s) etiqueta(s) selecionada(s)', - 'include_expense_not_in_tags' => 'Despesas incluídas fora da(s) etiqueta(s) selecionada(s)', - 'everything_else' => 'Tudo o restante', - 'income_and_expenses' => 'Receitas e despesas', - 'spent_average' => 'Gasto (média)', - 'income_average' => 'Rendimento (média)', - 'transaction_count' => 'Número de transações', - 'average_spending_per_account' => 'Média de gastos por conta', - 'average_income_per_account' => 'Rendimento médio por conta', - 'total' => 'Total', - 'description' => 'Descrição', - 'sum_of_period' => 'Soma do período', - 'average_in_period' => 'Média no período', - 'account_role_defaultAsset' => 'Conta de ativos predefinida', - 'account_role_sharedAsset' => 'Conta de ativos partilhados', - 'account_role_savingAsset' => 'Conta poupança', - 'account_role_ccAsset' => 'Cartão de crédito', - 'account_role_cashWalletAsset' => 'Carteira de dinheiro', - 'budget_chart_click' => 'Por favor, carregue no nome de um orçamento na tabela acima para visualizar um gráfico.', - 'category_chart_click' => 'Por favor, carregue no nome duma categoria na tabela acima para visualizar um gráfico.', - 'in_out_accounts' => 'Ganhos e gastos por combinação', - 'in_out_accounts_per_asset' => 'Recebido e gasto (por conta de ativos)', - 'in_out_per_category' => 'Ganhos e gastos por categoria', - 'out_per_budget' => 'Gasto por orçamento', - 'select_expense_revenue' => 'Seleccione conta de despesa/receita', - 'multi_currency_report_sum' => 'Como esta lista contém contas com várias moedas diferentes, a(s) soma(s) que vê pode não fazer sentido. O relatório vai utilizar sempre a moeda padrão.', - 'sum_in_default_currency' => 'A soma estará sempre na moeda padrão.', - 'net_filtered_prefs' => 'Esse gráfico nunca incluirá contas que tenham a opção "incluir no património líquido" desmarcada.', + 'report_default' => 'Relatório financeiro predefinido entre :start e :end', + 'report_audit' => 'Visão geral do histórico de transações entre :start e :end', + 'report_category' => 'Relatório da categoria entre :start e :end', + 'report_double' => 'Relatório de despesas/receitas entre :start e :end', + 'report_budget' => 'Relatório de orçamento entre :start e :end', + 'report_tag' => 'Relatório de etiqueta entre :start e :end', + 'quick_link_reports' => 'Links rápidos', + 'quick_link_examples' => 'Estes são apenas alguns links de exemplo para o ajudar a começar. Veja as páginas de ajuda presentes no botão-(?) para mais informação sobre todos os relatórios e as palavras mágicas que pode usar.', + 'quick_link_default_report' => 'Relatório financeiro predefinido', + 'quick_link_audit_report' => 'Visão geral do histórico de transações', + 'report_this_month_quick' => 'Mês corrente, todas as contas', + 'report_last_month_quick' => 'Mês passado, todas as contas', + 'report_this_year_quick' => 'Ano atual, todas as contas', + 'report_this_fiscal_year_quick' => 'Ano fiscal atual, todas as contas', + 'report_all_time_quick' => 'Todas as contas, de sempre', + 'reports_can_bookmark' => 'Lembre-se de que os relatórios podem ser guardados.', + 'incomeVsExpenses' => 'Receitas vs Despesas', + 'accountBalances' => 'Saldos das contas', + 'balanceStart' => 'Saldo no início do período', + 'balanceEnd' => 'Saldo no final do período', + 'splitByAccount' => 'Dividir por conta', + 'coveredWithTags' => 'Com etiquetas', + 'leftInBudget' => 'Restante no orçamento', + 'left_in_debt' => 'Montante em dívida', + 'sumOfSums' => 'Soma das somas', + 'noCategory' => '(sem categoria)', + 'notCharged' => 'Não cobrado (ainda)', + 'inactive' => 'Inativo', + 'active' => 'Ativo', + 'difference' => 'Diferença', + 'money_flowing_in' => 'Dentro', + 'money_flowing_out' => 'Fora', + 'topX' => 'superior :number', + 'show_full_list' => 'Mostrar a lista inteira', + 'show_only_top' => 'Mostrar apenas topo :number', + 'report_type' => 'Tipo de relatório', + 'report_type_default' => 'Relatório financeiro padrão', + 'report_type_audit' => 'Visão geral do histórico de transacções (auditoria)', + 'report_type_category' => 'Relatório por categoria', + 'report_type_budget' => 'Relatório por orçamento', + 'report_type_tag' => 'Relatório por etiqueta', + 'report_type_double' => 'Relatório de despesas/receitas', + 'more_info_help' => 'Mais informação sobre este tipo de relatórios pode ser encontrada nas páginas de ajuda. Por favor carregue no ícone (?) no canto superior direito.', + 'report_included_accounts' => 'Contas incluídas', + 'report_date_range' => 'Intervalo de datas', + 'report_preset_ranges' => 'Intervalos pré-definidos', + 'shared' => 'Partilhado', + 'fiscal_year' => 'Ano fiscal', + 'income_entry' => 'Rendimento da conta ":name" entre :start e :end', + 'expense_entry' => 'Despesas na conta ":name" entre :start e :end', + 'category_entry' => 'Despesas e receitas na categoria ":name" entre :start e :end', + 'budget_spent_amount' => 'Despesas no orçamento ":budget" entre :start e :end', + 'balance_amount' => 'Despesas no orçamento ":budget" pagas com a conta ":account" entre :start e :end', + 'no_audit_activity' => 'Sem atividade registada na conta :account_name entre :start e :end.', + 'audit_end_balance' => 'O saldo da conta :account_name no final de :end era :balance', + 'reports_extra_options' => 'Opções adicionais', + 'report_has_no_extra_options' => 'Este relatório não tem opções adicionais', + 'reports_submit' => 'Ver relatório', + 'end_after_start_date' => 'A data de fim do relatório deve ser superior à da data de início.', + 'select_category' => 'Selecionar categoria(s)', + 'select_budget' => 'Selecionar orçamento(s).', + 'select_tag' => 'Selecionar etiqueta(s).', + 'income_per_category' => 'Receita por categoria', + 'expense_per_category' => 'Despesa por categoria', + 'expense_per_budget' => 'Despesa por orçamento', + 'income_per_account' => 'Receita por conta', + 'expense_per_account' => 'Despesa por conta', + 'expense_per_tag' => 'Despesa por etiqueta', + 'income_per_tag' => 'Receita por etiqueta', + 'include_expense_not_in_budget' => 'Despesas incluídas fora do(s) orçamento(s) selecionado(s)', + 'include_expense_not_in_account' => 'Despesas incluídas fora da(s) conta(s) selecionada(s)', + 'include_expense_not_in_category' => 'Despesas incluídas fora da(s) categoria(s) selecionada(s)', + 'include_income_not_in_category' => 'Rendimento incluído fora da(s) categoria(s) selecionada(s)', + 'include_income_not_in_account' => 'Rendimento incluído fora da(s) conta(s) selecionada(s)', + 'include_income_not_in_tags' => 'Rendimento incluído fora da(s) etiqueta(s) selecionada(s)', + 'include_expense_not_in_tags' => 'Despesas incluídas fora da(s) etiqueta(s) selecionada(s)', + 'everything_else' => 'Tudo o restante', + 'income_and_expenses' => 'Receitas e despesas', + 'spent_average' => 'Gasto (média)', + 'income_average' => 'Rendimento (média)', + 'transaction_count' => 'Número de transações', + 'average_spending_per_account' => 'Média de gastos por conta', + 'average_income_per_account' => 'Rendimento médio por conta', + 'total' => 'Total', + 'description' => 'Descrição', + 'sum_of_period' => 'Soma do período', + 'average_in_period' => 'Média no período', + 'account_role_defaultAsset' => 'Conta de ativos predefinida', + 'account_role_sharedAsset' => 'Conta de ativos partilhados', + 'account_role_savingAsset' => 'Conta poupança', + 'account_role_ccAsset' => 'Cartão de crédito', + 'account_role_cashWalletAsset' => 'Carteira de dinheiro', + 'budget_chart_click' => 'Por favor, carregue no nome de um orçamento na tabela acima para visualizar um gráfico.', + 'category_chart_click' => 'Por favor, carregue no nome duma categoria na tabela acima para visualizar um gráfico.', + 'in_out_accounts' => 'Ganhos e gastos por combinação', + 'in_out_accounts_per_asset' => 'Recebido e gasto (por conta de ativos)', + 'in_out_per_category' => 'Ganhos e gastos por categoria', + 'out_per_budget' => 'Gasto por orçamento', + 'select_expense_revenue' => 'Seleccione conta de despesa/receita', + 'multi_currency_report_sum' => 'Como esta lista contém contas com várias moedas diferentes, a(s) soma(s) que vê pode não fazer sentido. O relatório vai utilizar sempre a moeda padrão.', + 'sum_in_default_currency' => 'A soma estará sempre na moeda padrão.', + 'net_filtered_prefs' => 'Esse gráfico nunca incluirá contas que tenham a opção "incluir no património líquido" desmarcada.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Gráfico', - 'month' => 'Mes', - 'budget' => 'Orçamento', - 'spent' => 'Gasto', - 'spent_capped' => 'Gasto (limitado)', - 'spent_in_budget' => 'Gasto no orçamento', - 'left_to_spend' => 'Restante para gastar', - 'earned' => 'Ganho', - 'overspent' => 'Gasto excedido', - 'left' => 'Em falta', - 'max-amount' => 'Montante máximo', - 'min-amount' => 'Montante mínimo', - 'journal-amount' => 'Entrada atual no encargo', - 'name' => 'Nome', - 'date' => 'Data', - 'date_and_time' => 'Data e hora', - 'time' => 'Hora', - 'paid' => 'Pago', - 'unpaid' => 'Por pagar', - 'day' => 'Dia', - 'budgeted' => 'Orçamentado', - 'period' => 'Período', - 'balance' => 'Saldo', - 'in_out_period' => 'Dentro + fora este período', - 'sum' => 'Soma', - 'summary' => 'Resumo', - 'average' => 'Média', - 'balanceFor' => 'Saldo para :name', - 'no_tags' => '(sem etiquetas)', + 'chart' => 'Gráfico', + 'month' => 'Mes', + 'budget' => 'Orçamento', + 'spent' => 'Gasto', + 'spent_capped' => 'Gasto (limitado)', + 'spent_in_budget' => 'Gasto no orçamento', + 'left_to_spend' => 'Restante para gastar', + 'earned' => 'Ganho', + 'overspent' => 'Gasto excedido', + 'left' => 'Em falta', + 'max-amount' => 'Montante máximo', + 'min-amount' => 'Montante mínimo', + 'journal-amount' => 'Entrada atual no encargo', + 'name' => 'Nome', + 'date' => 'Data', + 'date_and_time' => 'Data e hora', + 'time' => 'Hora', + 'paid' => 'Pago', + 'unpaid' => 'Por pagar', + 'day' => 'Dia', + 'budgeted' => 'Orçamentado', + 'period' => 'Período', + 'balance' => 'Saldo', + 'in_out_period' => 'Dentro + fora este período', + 'sum' => 'Soma', + 'summary' => 'Resumo', + 'average' => 'Média', + 'balanceFor' => 'Saldo para :name', + 'no_tags' => '(sem etiquetas)', + 'nothing_found' => '(sem resultados)', // piggy banks: - 'event_history' => 'Histórico de eventos', - 'add_money_to_piggy' => 'Adicionar dinheiro ao mealheiro ":name"', - 'piggy_bank' => 'Mealheiro', - 'new_piggy_bank' => 'Novo mealheiro', - 'store_piggy_bank' => 'Guardar novo mealheiro', - 'stored_piggy_bank' => 'Guardar novo mealheiro ":name"', - 'account_status' => 'Estado da conta', - 'left_for_piggy_banks' => 'Sobra para os mealheiros', - 'sum_of_piggy_banks' => 'Soma dos mealheiros', - 'saved_so_far' => 'Poupado até agora', - 'left_to_save' => 'Restante para poupar', - 'suggested_amount' => 'Valor de poupança mensal sugerido', - 'add_money_to_piggy_title' => 'Adicionar dinheiro ao mealheiro ":name"', - 'remove_money_from_piggy_title' => 'Remover dinheiro do mealheiro ":name"', - 'add' => 'Adicionar', - 'no_money_for_piggy' => 'Não tem dinheiro para colocar neste mealheiro.', - 'suggested_savings_per_month' => 'Sugerido por mês', + 'event_history' => 'Histórico de eventos', + 'add_money_to_piggy' => 'Adicionar dinheiro ao mealheiro ":name"', + 'piggy_bank' => 'Mealheiro', + 'new_piggy_bank' => 'Novo mealheiro', + 'store_piggy_bank' => 'Guardar novo mealheiro', + 'stored_piggy_bank' => 'Guardar novo mealheiro ":name"', + 'account_status' => 'Estado da conta', + 'left_for_piggy_banks' => 'Sobra para os mealheiros', + 'sum_of_piggy_banks' => 'Soma dos mealheiros', + 'saved_so_far' => 'Poupado até agora', + 'left_to_save' => 'Restante para poupar', + 'suggested_amount' => 'Valor de poupança mensal sugerido', + 'add_money_to_piggy_title' => 'Adicionar dinheiro ao mealheiro ":name"', + 'remove_money_from_piggy_title' => 'Remover dinheiro do mealheiro ":name"', + 'add' => 'Adicionar', + 'no_money_for_piggy' => 'Não tem dinheiro para colocar neste mealheiro.', + 'suggested_savings_per_month' => 'Sugerido por mês', - 'remove' => 'Remover', - 'max_amount_add' => 'O montante máximo que pode adicionar é', - 'max_amount_remove' => 'O montante máximo que pode remover é', - 'update_piggy_button' => 'Atualizar mealheiro', - 'update_piggy_title' => 'Atualizar o mealheiro ":name"', - 'updated_piggy_bank' => 'Mealheiro ":name" atualizado', - 'details' => 'Detalhes', - 'events' => 'Eventos', - 'target_amount' => 'Montante alvo', - 'start_date' => 'Data inicial', - 'no_start_date' => 'Sem data inicial', - 'target_date' => 'Data alvo', - 'no_target_date' => 'Sem data alvo', - 'table' => 'Tabela', - 'delete_piggy_bank' => 'Apagar o mealheiro ":name"', - 'cannot_add_amount_piggy' => 'Nao consigo adicionar :amount a ":name".', - 'cannot_remove_from_piggy' => 'Nao consigo remover :amount de ":name".', - 'deleted_piggy_bank' => 'Mealheiro ":name" apagado', - 'added_amount_to_piggy' => 'Adicionado :amount a ":name"', - 'removed_amount_from_piggy' => 'Removido :amount de ":name"', - 'piggy_events' => 'Mealheiros relacionados', + 'remove' => 'Remover', + 'max_amount_add' => 'O montante máximo que pode adicionar é', + 'max_amount_remove' => 'O montante máximo que pode remover é', + 'update_piggy_button' => 'Atualizar mealheiro', + 'update_piggy_title' => 'Atualizar o mealheiro ":name"', + 'updated_piggy_bank' => 'Mealheiro ":name" atualizado', + 'details' => 'Detalhes', + 'events' => 'Eventos', + 'target_amount' => 'Montante alvo', + 'start_date' => 'Data inicial', + 'no_start_date' => 'Sem data inicial', + 'target_date' => 'Data alvo', + 'no_target_date' => 'Sem data alvo', + 'table' => 'Tabela', + 'delete_piggy_bank' => 'Apagar o mealheiro ":name"', + 'cannot_add_amount_piggy' => 'Nao consigo adicionar :amount a ":name".', + 'cannot_remove_from_piggy' => 'Nao consigo remover :amount de ":name".', + 'deleted_piggy_bank' => 'Mealheiro ":name" apagado', + 'added_amount_to_piggy' => 'Adicionado :amount a ":name"', + 'removed_amount_from_piggy' => 'Removido :amount de ":name"', + 'piggy_events' => 'Mealheiros relacionados', // tags - 'delete_tag' => 'Apagar etiqueta ":tag"', - 'deleted_tag' => 'Etiqueta ":tag" apagada', - 'new_tag' => 'Nova etiqueta', - 'edit_tag' => 'Editar etiqueta ":tag"', - 'updated_tag' => 'Etiqueta ":tag" alterada', - 'created_tag' => 'Etiqueta ":tag" criada!', + 'delete_tag' => 'Apagar etiqueta ":tag"', + 'deleted_tag' => 'Etiqueta ":tag" apagada', + 'new_tag' => 'Nova etiqueta', + 'edit_tag' => 'Editar etiqueta ":tag"', + 'updated_tag' => 'Etiqueta ":tag" alterada', + 'created_tag' => 'Etiqueta ":tag" criada!', - 'transaction_journal_information' => 'Informação da transação', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta informação', - 'transaction_journal_more' => 'Mais informações', - 'basic_journal_information' => 'Informações básicas de transação', - 'transaction_journal_extra' => 'Informações extra', - 'att_part_of_journal' => 'Guardado em ":journal"', - 'total_amount' => 'Montante total', - 'number_of_decimals' => 'Número de casas decimais', + 'transaction_journal_information' => 'Informação da transação', + 'transaction_journal_amount' => 'Informação da quantidade', + 'transaction_journal_meta' => 'Meta informação', + 'transaction_journal_more' => 'Mais informações', + 'basic_journal_information' => 'Informações básicas de transação', + 'transaction_journal_extra' => 'Informações extra', + 'att_part_of_journal' => 'Guardado em ":journal"', + 'total_amount' => 'Montante total', + 'number_of_decimals' => 'Número de casas decimais', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'O convite enviado para ":address" já foi resgatado.', - 'invite_is_deleted' => 'O convite enviado para ":address" foi apagado.', - 'invite_new_user_title' => 'Convidar novo utilizador', - 'invite_new_user_text' => 'Como administrador, pode convidar utilizadores para se registarem na sua instância do Firefly III. Usando a ligação direta que partilhar com eles, eles serão capazes de registar uma conta. O utilizador convidado e a sua ligação de convite aparecerão na tabela abaixo. Tenha a liberdade de partilhar com eles a ligação do convite.', - 'invited_user_mail' => 'Endereço de email', - 'invite_user' => 'Convidar utilizador', - 'user_is_invited' => 'O endereço de email ":address" recebeu um convite para o Firefly III', - 'administration' => 'Administração', - 'system_settings' => 'System settings', - 'code_already_used' => 'O código de convite foi usado', - 'user_administration' => 'Gestão de utilizadores', - 'list_all_users' => 'Todos os utilizadores', - 'all_users' => 'Todos os utilizadores', - 'instance_configuration' => 'Configuração', - 'firefly_instance_configuration' => 'Opções de configuração para o Firefly III', - 'setting_single_user_mode' => 'Modo de utilizador único', - 'setting_single_user_mode_explain' => 'Por defeito, o Firefly III só aceita um (1) registo: o seu. Esta é uma medida de segurança, impedindo que outros utilizem a sua plataforma, a menos que permita. Os futuros registos estão bloqueados. Quando desmarcar esta caixa, outros podem utilizar a sua plataforma caso tenham acesso (quando ela estiver conectada à Internet).', - 'store_configuration' => 'Gravar configuração', - 'single_user_administration' => 'Administração de utilizadores para :email', - 'edit_user' => 'Editar utilizador :email', - 'hidden_fields_preferences' => 'Pode ativar mais opções de transações nas suas preferências.', - 'user_data_information' => 'Dados do utilizador', - 'user_information' => 'Informação do utilizador', - 'total_size' => 'tamanho total', - 'budget_or_budgets' => ':count orçamento|:count orçamentos', - 'budgets_with_limits' => ':count orçamento com montante definido|:count orçamentos com montante definido', - 'nr_of_rules_in_total_groups' => ':count_rules regra(s) em :count_groups grupo(s) de regras', - 'tag_or_tags' => ':count etiqueta|:count etiquetas', - 'configuration_updated' => 'A configuração foi atualizada', - 'setting_is_demo_site' => 'Site de demonstração', - 'setting_is_demo_site_explain' => 'Se marcar esta caixa, esta instalação vai funcionar como site de demonstração, o que pode ter efeitos colaterais estranhos.', - 'block_code_bounced' => 'Mensagem(s) de email devolvida(s)', - 'block_code_expired' => 'Conta de demonstração expirada', - 'no_block_code' => 'Sem razão para bloqueio ou utilizador não bloqueado', - 'block_code_email_changed' => 'O utilizador ainda não confirmou o novo endereço de email', - 'admin_update_email' => 'Ao contrário da página de perfil, o utilizador NÃO vai ser notificado sobre a alteração do endereço de email!', - 'update_user' => 'Atualizar utilizador', - 'updated_user' => 'Os dados do utilizador foram alterados.', - 'delete_user' => 'Apagar utilizador ":email"', - 'user_deleted' => 'O utilizador foi apagado', - 'send_test_email' => 'Enviar e-mail de teste', - 'send_test_email_text' => 'Para confirmar se a sua instância é capaz de enviar emails ou publicar mensagens no Slack, pressione este botão. Não verá nenhum erro aqui (mesmo que exista), os ficheiros de registo (log) registarão os erros. Pode premir este botão todas as vezes que quiser. Não há controlo de spam. A mensagem será enviada para :email e deve chegar brevemente.', - 'send_message' => 'Enviar mensagem', - 'send_test_triggered' => 'O teste foi activado. Verifique a caixa de entrada e os arquivos de log.', - 'give_admin_careful' => 'Utilizadores que obtiverem direitos de administrador podem remover as suas permissões. Tenha cuidado.', - 'admin_maintanance_title' => 'Manutenção', - 'admin_maintanance_expl' => 'Alguns botões sofisticados para a manutenção do Firefly III', - 'admin_maintenance_clear_cache' => 'Limpar cache', - 'admin_notifications' => 'Notificações administrativas', - 'admin_notifications_expl' => 'As seguintes notificações podem ser ativadas ou desativadas pelo administrador. Se quiser receber essas mensagens através do Slack, defina a URL de "webhook de entrada".', - 'admin_notification_check_user_new_reg' => 'O utilizador recebe mensagem de boas-vindas pós-registo', - 'admin_notification_check_admin_new_reg' => 'O(s) administrador(es) recebe(m) uma notificação de registo de novo utilizador', - 'admin_notification_check_new_version' => 'Está disponível uma nova versão', - 'admin_notification_check_invite_created' => 'Um utilizador foi convidado para o Firefly III', - 'admin_notification_check_invite_redeemed' => 'Foi resgatado um convite de utilizador', - 'all_invited_users' => 'Todos os utilizadores convidados', - 'save_notification_settings' => 'Gravar definições', - 'notification_settings_saved' => 'As definições de notificação foram gravadas', - - - 'split_transaction_title' => 'Descrição da transação dividida', - 'split_transaction_title_help' => 'Se criar uma transação dividida, deve haver uma descrição global para todas as partes da transação.', - 'split_title_help' => 'Se criar uma transação dividida, deve haver uma descrição global para todas as partes da transação.', - 'you_create_transfer' => 'Está a criar uma transferência.', - 'you_create_withdrawal' => 'Está a criar um levantamento.', - 'you_create_deposit' => 'Está a criar um depósito.', + 'invite_is_already_redeemed' => 'O convite enviado para ":address" já foi resgatado.', + 'invite_is_deleted' => 'O convite enviado para ":address" foi apagado.', + 'invite_new_user_title' => 'Convidar novo utilizador', + 'invite_new_user_text' => 'Como administrador, pode convidar utilizadores para se registarem na sua instância do Firefly III. Usando a ligação direta que partilhar com eles, eles serão capazes de registar uma conta. O utilizador convidado e a sua ligação de convite aparecerão na tabela abaixo. Tenha a liberdade de partilhar com eles a ligação do convite.', + 'invited_user_mail' => 'Endereço de email', + 'invite_user' => 'Convidar utilizador', + 'user_is_invited' => 'O endereço de email ":address" recebeu um convite para o Firefly III', + 'administration' => 'Administração', + 'system_settings' => 'Definições de sistema', + 'code_already_used' => 'O código de convite foi usado', + 'user_administration' => 'Gestão de utilizadores', + 'list_all_users' => 'Todos os utilizadores', + 'all_users' => 'Todos os utilizadores', + 'instance_configuration' => 'Configuração', + 'firefly_instance_configuration' => 'Opções de configuração para o Firefly III', + 'setting_single_user_mode' => 'Modo de utilizador único', + 'setting_single_user_mode_explain' => 'Por defeito, o Firefly III só aceita um (1) registo: o seu. Esta é uma medida de segurança, impedindo que outros utilizem a sua plataforma, a menos que permita. Os futuros registos estão bloqueados. Quando desmarcar esta caixa, outros podem utilizar a sua plataforma caso tenham acesso (quando ela estiver conectada à Internet).', + 'store_configuration' => 'Gravar configuração', + 'single_user_administration' => 'Administração de utilizadores para :email', + 'edit_user' => 'Editar utilizador :email', + 'hidden_fields_preferences' => 'Pode ativar mais opções de transações nas suas preferências.', + 'user_data_information' => 'Dados do utilizador', + 'user_information' => 'Informação do utilizador', + 'total_size' => 'tamanho total', + 'budget_or_budgets' => ':count orçamento|:count orçamentos', + 'budgets_with_limits' => ':count orçamento com montante definido|:count orçamentos com montante definido', + 'nr_of_rules_in_total_groups' => ':count_rules regra(s) em :count_groups grupo(s) de regras', + 'tag_or_tags' => ':count etiqueta|:count etiquetas', + 'configuration_updated' => 'A configuração foi atualizada', + 'setting_is_demo_site' => 'Site de demonstração', + 'setting_is_demo_site_explain' => 'Se marcar esta caixa, esta instalação vai funcionar como site de demonstração, o que pode ter efeitos colaterais estranhos.', + 'block_code_bounced' => 'Mensagem(s) de email devolvida(s)', + 'block_code_expired' => 'Conta de demonstração expirada', + 'no_block_code' => 'Sem razão para bloqueio ou utilizador não bloqueado', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'O utilizador ainda não confirmou o novo endereço de email', + 'admin_update_email' => 'Ao contrário da página de perfil, o utilizador NÃO vai ser notificado sobre a alteração do endereço de email!', + 'update_user' => 'Atualizar utilizador', + 'updated_user' => 'Os dados do utilizador foram alterados.', + 'delete_user' => 'Apagar utilizador ":email"', + 'user_deleted' => 'O utilizador foi apagado', + 'send_test_email' => 'Enviar e-mail de teste', + 'send_test_email_text' => 'Para confirmar se a sua instância é capaz de enviar emails ou publicar mensagens no Slack, pressione este botão. Não verá nenhum erro aqui (mesmo que exista), os ficheiros de registo (log) registarão os erros. Pode premir este botão todas as vezes que quiser. Não há controlo de spam. A mensagem será enviada para :email e deve chegar brevemente.', + 'send_message' => 'Enviar mensagem', + 'send_test_triggered' => 'O teste foi activado. Verifique a caixa de entrada e os arquivos de log.', + 'give_admin_careful' => 'Utilizadores que obtiverem direitos de administrador podem remover as suas permissões. Tenha cuidado.', + 'admin_maintanance_title' => 'Manutenção', + 'admin_maintanance_expl' => 'Alguns botões sofisticados para a manutenção do Firefly III', + 'admin_maintenance_clear_cache' => 'Limpar cache', + 'admin_notifications' => 'Notificações administrativas', + 'admin_notifications_expl' => 'As seguintes notificações podem ser ativadas ou desativadas pelo administrador. Se quiser receber essas mensagens através do Slack, defina a URL de "webhook de entrada".', + 'admin_notification_check_user_new_reg' => 'O utilizador recebe mensagem de boas-vindas pós-registo', + 'admin_notification_check_admin_new_reg' => 'O(s) administrador(es) recebe(m) uma notificação de registo de novo utilizador', + 'admin_notification_check_new_version' => 'Está disponível uma nova versão', + 'admin_notification_check_invite_created' => 'Um utilizador foi convidado para o Firefly III', + 'admin_notification_check_invite_redeemed' => 'Foi resgatado um convite de utilizador', + 'all_invited_users' => 'Todos os utilizadores convidados', + 'save_notification_settings' => 'Gravar definições', + 'notification_settings_saved' => 'As definições de notificação foram gravadas', + 'split_transaction_title' => 'Descrição da transação dividida', + 'split_transaction_title_help' => 'Se criar uma transação dividida, deve haver uma descrição global para todas as partes da transação.', + 'split_title_help' => 'Se criar uma transação dividida, deve haver uma descrição global para todas as partes da transação.', + 'you_create_transfer' => 'Está a criar uma transferência.', + 'you_create_withdrawal' => 'Está a criar um levantamento.', + 'you_create_deposit' => 'Está a criar um depósito.', // links - 'journal_link_configuration' => 'Configuração de ligações de transação', - 'create_new_link_type' => 'Criar novo tipo de ligação', - 'store_new_link_type' => 'Guardar novo tipo de ligação', - 'update_link_type' => 'Atualizar tipo de ligação', - 'edit_link_type' => 'Editar tipo de ligação ":name"', - 'updated_link_type' => 'Tipo de ligação ":name" atualizado', - 'delete_link_type' => 'Apagar tipo de ligação ":name"', - 'deleted_link_type' => 'Tipo de ligação ":name" apagado', - 'stored_new_link_type' => 'Guarde novo tipo de ligação ":name"', - 'cannot_edit_link_type' => 'Não é possível editar o tipo de ligação ":name"', - 'link_type_help_name' => 'E.g. "Duplicados"', - 'link_type_help_inward' => 'E.g. "duplicados"', - 'link_type_help_outward' => 'E.g. "é duplicado por"', - 'save_connections_by_moving' => 'Grave a ligação entre estas transações ao mover as mesmas para outro tipo de ligação:', - 'do_not_save_connection' => '(não guardar a ligação)', - 'link_transaction' => 'Ligar transação', - 'link_to_other_transaction' => 'Ligue esta transação a outra transação', - 'select_transaction_to_link' => 'Selecione uma transação à qual ligar esta transação. Estas ligações estão por utilizar no Firefly III (apesar de serem mostradas), mas planeio fazer alterações no futuro. Utilize a caixa de pesquisa para selecionar uma transação pelo título ou pelo ID. Se desejar adicionar ligações feitas à medida, verifique a secção de administração.', - 'this_transaction' => 'Esta transação', - 'transaction' => 'Transação', - 'comments' => 'Comentários', - 'link_notes' => 'Quaisquer notas que deseje guardar com a ligação.', - 'invalid_link_selection' => 'Não é possível ligar estas transações', - 'selected_transaction' => 'Transação selecionada', - 'journals_linked' => 'As transações estão ligadas.', - 'journals_error_linked' => 'Estas transações já estão ligadas.', - 'journals_link_to_self' => 'Não pode ligar uma transação a ela mesma', - 'journal_links' => 'Ligações de transação', - 'this_withdrawal' => 'Este levantamento', - 'this_deposit' => 'Este depósito', - 'this_transfer' => 'Esta transferência', - 'overview_for_link' => 'Visão geral do tipo de ligação ":name"', - 'source_transaction' => 'Transação de origem', - 'link_description' => 'Descrição da ligação', - 'destination_transaction' => 'Transação de destino', - 'delete_journal_link' => 'Apagar a ligação entre :source e :destination', - 'deleted_link' => 'Link apagado', + 'journal_link_configuration' => 'Configuração de ligações de transação', + 'create_new_link_type' => 'Criar novo tipo de ligação', + 'store_new_link_type' => 'Guardar novo tipo de ligação', + 'update_link_type' => 'Atualizar tipo de ligação', + 'edit_link_type' => 'Editar tipo de ligação ":name"', + 'updated_link_type' => 'Tipo de ligação ":name" atualizado', + 'delete_link_type' => 'Apagar tipo de ligação ":name"', + 'deleted_link_type' => 'Tipo de ligação ":name" apagado', + 'stored_new_link_type' => 'Guarde novo tipo de ligação ":name"', + 'cannot_edit_link_type' => 'Não é possível editar o tipo de ligação ":name"', + 'link_type_help_name' => 'E.g. "Duplicados"', + 'link_type_help_inward' => 'E.g. "duplicados"', + 'link_type_help_outward' => 'E.g. "é duplicado por"', + 'save_connections_by_moving' => 'Grave a ligação entre estas transações ao mover as mesmas para outro tipo de ligação:', + 'do_not_save_connection' => '(não guardar a ligação)', + 'link_transaction' => 'Ligar transação', + 'link_to_other_transaction' => 'Ligue esta transação a outra transação', + 'select_transaction_to_link' => 'Selecione uma transação à qual ligar esta transação. Estas ligações estão por utilizar no Firefly III (apesar de serem mostradas), mas planeio fazer alterações no futuro. Utilize a caixa de pesquisa para selecionar uma transação pelo título ou pelo ID. Se desejar adicionar ligações feitas à medida, verifique a secção de administração.', + 'this_transaction' => 'Esta transação', + 'transaction' => 'Transação', + 'comments' => 'Comentários', + 'link_notes' => 'Quaisquer notas que deseje guardar com a ligação.', + 'invalid_link_selection' => 'Não é possível ligar estas transações', + 'selected_transaction' => 'Transação selecionada', + 'journals_linked' => 'As transações estão ligadas.', + 'journals_error_linked' => 'Estas transações já estão ligadas.', + 'journals_link_to_self' => 'Não pode ligar uma transação a ela mesma', + 'journal_links' => 'Ligações de transação', + 'this_withdrawal' => 'Este levantamento', + 'this_deposit' => 'Este depósito', + 'this_transfer' => 'Esta transferência', + 'overview_for_link' => 'Visão geral do tipo de ligação ":name"', + 'source_transaction' => 'Transação de origem', + 'link_description' => 'Descrição da ligação', + 'destination_transaction' => 'Transação de destino', + 'delete_journal_link' => 'Apagar a ligação entre :source e :destination', + 'deleted_link' => 'Link apagado', // link translations: - 'Paid_name' => 'Pago', - 'Refund_name' => 'Reembolso', - 'Reimbursement_name' => 'Reembolso', - 'Related_name' => 'Relacionado', - 'relates to_inward' => 'relacionado com', - 'is (partially) refunded by_inward' => 'e (parcialmente) reembolsado por', - 'is (partially) paid for by_inward' => 'e (parcialmente) pago por', - 'is (partially) reimbursed by_inward' => 'e (parcialmente) reembolsado por', - 'inward_transaction' => 'Transacção interna', - 'outward_transaction' => 'Transacção externa', - 'relates to_outward' => 'refere-se a', - '(partially) refunds_outward' => 'reembolsos (parcialmente)', - '(partially) pays for_outward' => 'paga por (parcialmente)', - '(partially) reimburses_outward' => 'reembolsa (parcialmente)', - 'is (partially) refunded by' => 'é (parcialmente) reembolsado por', - 'is (partially) paid for by' => 'é (parcialmente) pago por', - 'is (partially) reimbursed by' => 'é (parcialmente) reembolsado por', - 'relates to' => 'relacionado com', - '(partially) refunds' => 'reembolsos (parcialmente)', - '(partially) pays for' => 'pago por (parcialmente)', - '(partially) reimburses' => 'reembolsos (parcialmente)', + 'Paid_name' => 'Pago', + 'Refund_name' => 'Reembolso', + 'Reimbursement_name' => 'Reembolso', + 'Related_name' => 'Relacionado', + 'relates to_inward' => 'relacionado com', + 'is (partially) refunded by_inward' => 'e (parcialmente) reembolsado por', + 'is (partially) paid for by_inward' => 'e (parcialmente) pago por', + 'is (partially) reimbursed by_inward' => 'e (parcialmente) reembolsado por', + 'inward_transaction' => 'Transacção interna', + 'outward_transaction' => 'Transacção externa', + 'relates to_outward' => 'refere-se a', + '(partially) refunds_outward' => 'reembolsos (parcialmente)', + '(partially) pays for_outward' => 'paga por (parcialmente)', + '(partially) reimburses_outward' => 'reembolsa (parcialmente)', + 'is (partially) refunded by' => 'é (parcialmente) reembolsado por', + 'is (partially) paid for by' => 'é (parcialmente) pago por', + 'is (partially) reimbursed by' => 'é (parcialmente) reembolsado por', + 'relates to' => 'relacionado com', + '(partially) refunds' => 'reembolsos (parcialmente)', + '(partially) pays for' => 'pago por (parcialmente)', + '(partially) reimburses' => 'reembolsos (parcialmente)', // split a transaction: - 'splits' => 'Divisões', - 'add_another_split' => 'Adicionar outra divisão', - 'cannot_edit_opening_balance' => 'Não pode editar o saldo inicial de uma conta.', - 'no_edit_multiple_left' => 'Não selecionou nenhuma transação válida para editar.', - 'breadcrumb_convert_group' => 'Converter transação', - 'convert_invalid_source' => 'A informação de origem é inválida para a transação #%d.', - 'convert_invalid_destination' => 'A informação de destino é inválida para a transação #%d.', - 'create_another' => 'Depois de guardar, voltar aqui para criar outra.', - 'after_update_create_another' => 'Após atualizar, regresse aqui para continuar a editar.', - 'store_as_new' => 'Guarde como nova transação em vez de atualizar.', - 'reset_after' => 'Reiniciar o formulário após o envio', - 'errors_submission' => 'Aconteceu algo errado com a sua submissão. Por favor, verifique os erros.', - 'transaction_expand_split' => 'Expandir divisão', - 'transaction_collapse_split' => 'Ocultar divisão', + 'splits' => 'Divisões', + 'add_another_split' => 'Adicionar outra divisão', + 'cannot_edit_opening_balance' => 'Não pode editar o saldo inicial de uma conta.', + 'no_edit_multiple_left' => 'Não selecionou nenhuma transação válida para editar.', + 'breadcrumb_convert_group' => 'Converter transação', + 'convert_invalid_source' => 'A informação de origem é inválida para a transação #%d.', + 'convert_invalid_destination' => 'A informação de destino é inválida para a transação #%d.', + 'create_another' => 'Depois de guardar, voltar aqui para criar outra.', + 'after_update_create_another' => 'Após atualizar, regresse aqui para continuar a editar.', + 'store_as_new' => 'Guarde como nova transação em vez de atualizar.', + 'reset_after' => 'Reiniciar o formulário após o envio', + 'errors_submission' => 'Algo correu mal com o envio dos dados. Por favor verifique e corrija os erros abaixo.', + 'errors_submission_v2' => 'Algo correu mal com o envio dos dados. Por favor verifique e corrija os erros abaixo: %{errorMessage}', + 'transaction_expand_split' => 'Expandir divisão', + 'transaction_collapse_split' => 'Ocultar divisão', // object groups - 'default_group_title_name' => '(não agrupado)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(não agrupado)', + 'default_group_title_name_plain' => 'sem grupo', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Vamos criar uma conta de ativos!', - 'no_accounts_intro_asset' => 'Ainda não tem nenhuma conta de ativos. Contas de ativos são as suas contas principais: a conta à ordem, conta de poupança, conta partilhada ou até o seu cartão de crédito.', - 'no_accounts_imperative_asset' => 'Para começar a usar o Firefly III, tem de criar pelo menos uma conta de ativos. Vamos criá-la agora:', - 'no_accounts_create_asset' => 'Criar uma conta de ativos', - 'no_accounts_title_expense' => 'Vamos criar uma conta de despesas!', - 'no_accounts_intro_expense' => 'Ainda não tem contas de despesas. As contas de despesas servem para os lugares onde gasta dinheiro, como lojas e supermercados.', - 'no_accounts_imperative_expense' => 'As contas de despesas são criadas automaticamente quando cria transações, mas também pode criar uma manualmente, se quiser. Vamos criar uma agora:', - 'no_accounts_create_expense' => 'Criar uma conta de despesas', - 'no_accounts_title_revenue' => 'Vamos criar uma conta de receitas!', - 'no_accounts_intro_revenue' => 'Ainda não tem contas de receita. Contas de receita são os locais de onde recebe dinheiro, como, por exemplo, o seu trabalho.', - 'no_accounts_imperative_revenue' => 'As contas de receita são criadas automaticamente quando cria transações, mas também pode criar uma manualmente, se quiser. Vamos criar uma agora:', - 'no_accounts_create_revenue' => 'Criar uma conta de receitas', - 'no_accounts_title_liabilities' => 'Vamos criar um passivo!', - 'no_accounts_intro_liabilities' => 'Ainda não tem conta de passivos. Contas de passivos é onde se registam dívidas e empréstimos.', - 'no_accounts_imperative_liabilities' => 'Não precisa de utilizar esta funcionalidade, mas pode ser útil se quiser acompanhar estas coisas.', - 'no_accounts_create_liabilities' => 'Criar um passivo', - 'no_budgets_title_default' => 'Vamos criar um orçamento', - 'no_rules_title_default' => 'Vamos criar uma regra', - 'no_budgets_intro_default' => 'Ainda não tem orçamentos. Os orçamentos são usados para organizar as suas despesas em grupos lógicos, que pode usar como limiar para ajudar a limitar as suas despesas.', - 'no_rules_intro_default' => 'Ainda não tem regras. As regras são poderosas automações que podem gerir transações por si.', - 'no_rules_imperative_default' => 'As regras podem ser muito úteis quando gere transações. Vamos criar uma agora:', - 'no_budgets_imperative_default' => 'Os orçamentos são as ferramentas básicas da gestão financeira. Vamos criar um agora:', - 'no_budgets_create_default' => 'Criar um orçamento', - 'no_rules_create_default' => 'Criar uma regra', - 'no_categories_title_default' => 'Vamos criar uma categoria!', - 'no_categories_intro_default' => 'Ainda não tem categorias. As categorias são usadas para ajustar as transacções e rotulá-las para uma categoria especifica.', - 'no_categories_imperative_default' => 'As categorias são criadas automaticamente quando cria transacções, mas também pode criar uma manualmente. Vamos criar uma agora:', - 'no_categories_create_default' => 'Criar uma categoria', - 'no_tags_title_default' => 'Vamos criar uma etiqueta!', - 'no_tags_intro_default' => 'Ainda não tem etiquetas. As etiquetas são usadas para ajustar as transações e rotulá-las com palavras-chave específicas.', - 'no_tags_imperative_default' => 'As etiquetas são criadas automaticamente quando cria transações, mas também pode criá-las manualmente. Vamos criar uma agora:', - 'no_tags_create_default' => 'Criar uma etiqueta', - 'no_transactions_title_withdrawal' => 'Vamos criar uma despesa!', - 'no_transactions_intro_withdrawal' => 'Ainda não tem despesas. Deve criar despesas para começar a gerir as suas finanças.', - 'no_transactions_imperative_withdrawal' => 'Gastou algum dinheiro? Então deveria anotá-lo:', - 'no_transactions_create_withdrawal' => 'Criar despesa', - 'no_transactions_title_deposit' => 'Vamos criar uma receita!', - 'no_transactions_intro_deposit' => 'Ainda não tem rendimentos registados. Deve criar entradas de rendimentos para começar a gerir as suas finanças.', - 'no_transactions_imperative_deposit' => 'Recebeu dinheiro? Então é melhor anotá-lo:', - 'no_transactions_create_deposit' => 'Criar depósito', - 'no_transactions_title_transfers' => 'Vamos criar uma transferência!', - 'no_transactions_intro_transfers' => 'Ainda não tem transferências. Quando movimenta dinheiro entre contas de ativos, fica registado como uma transferência.', - 'no_transactions_imperative_transfers' => 'Movimentou algum dinheiro? Então deve anotá-lo:', - 'no_transactions_create_transfers' => 'Criar transferência', - 'no_piggies_title_default' => 'Vamos criar um mealheiro!', - 'no_piggies_intro_default' => 'Ainda não tem nenhum mealheiro. Pode criar mealheiros para dividir as suas poupanças e acompanhar o objetivo da poupança.', - 'no_piggies_imperative_default' => 'Tem alguma coisa para a qual está a poupar? Crie um mealheiro e acompanhe:', - 'no_piggies_create_default' => 'Criar um novo mealheiro', - 'no_bills_title_default' => 'Vamos criar um encargo!', - 'no_bills_intro_default' => 'Ainda não tem encargos. Pode criar encargos para acompanhar as despesas regulares, como a renda de casa ou seguro.', - 'no_bills_imperative_default' => 'Tem encargos regulares? Crie um encargo e acompanhe os pagamentos:', - 'no_bills_create_default' => 'Criar um encargo', + 'no_accounts_title_asset' => 'Vamos criar uma conta de ativos!', + 'no_accounts_intro_asset' => 'Ainda não tem nenhuma conta de ativos. Contas de ativos são as suas contas principais: a conta à ordem, conta de poupança, conta partilhada ou até o seu cartão de crédito.', + 'no_accounts_imperative_asset' => 'Para começar a usar o Firefly III, tem de criar pelo menos uma conta de ativos. Vamos criá-la agora:', + 'no_accounts_create_asset' => 'Criar uma conta de ativos', + 'no_accounts_title_expense' => 'Vamos criar uma conta de despesas!', + 'no_accounts_intro_expense' => 'Ainda não tem contas de despesas. As contas de despesas servem para os lugares onde gasta dinheiro, como lojas e supermercados.', + 'no_accounts_imperative_expense' => 'As contas de despesas são criadas automaticamente quando cria transações, mas também pode criar uma manualmente, se quiser. Vamos criar uma agora:', + 'no_accounts_create_expense' => 'Criar uma conta de despesas', + 'no_accounts_title_revenue' => 'Vamos criar uma conta de receitas!', + 'no_accounts_intro_revenue' => 'Ainda não tem contas de receita. Contas de receita são os locais de onde recebe dinheiro, como, por exemplo, o seu trabalho.', + 'no_accounts_imperative_revenue' => 'As contas de receita são criadas automaticamente quando cria transações, mas também pode criar uma manualmente, se quiser. Vamos criar uma agora:', + 'no_accounts_create_revenue' => 'Criar uma conta de receitas', + 'no_accounts_title_liabilities' => 'Vamos criar um passivo!', + 'no_accounts_intro_liabilities' => 'Ainda não tem conta de passivos. Contas de passivos é onde se registam dívidas e empréstimos.', + 'no_accounts_imperative_liabilities' => 'Não precisa de utilizar esta funcionalidade, mas pode ser útil se quiser acompanhar estas coisas.', + 'no_accounts_create_liabilities' => 'Criar um passivo', + 'no_budgets_title_default' => 'Vamos criar um orçamento', + 'no_rules_title_default' => 'Vamos criar uma regra', + 'no_budgets_intro_default' => 'Ainda não tem orçamentos. Os orçamentos são usados para organizar as suas despesas em grupos lógicos, que pode usar como limiar para ajudar a limitar as suas despesas.', + 'no_rules_intro_default' => 'Ainda não tem regras. As regras são poderosas automações que podem gerir transações por si.', + 'no_rules_imperative_default' => 'As regras podem ser muito úteis quando gere transações. Vamos criar uma agora:', + 'no_budgets_imperative_default' => 'Os orçamentos são as ferramentas básicas da gestão financeira. Vamos criar um agora:', + 'no_budgets_create_default' => 'Criar um orçamento', + 'no_rules_create_default' => 'Criar uma regra', + 'no_categories_title_default' => 'Vamos criar uma categoria!', + 'no_categories_intro_default' => 'Ainda não tem categorias. As categorias são usadas para ajustar as transacções e rotulá-las para uma categoria especifica.', + 'no_categories_imperative_default' => 'As categorias são criadas automaticamente quando cria transacções, mas também pode criar uma manualmente. Vamos criar uma agora:', + 'no_categories_create_default' => 'Criar uma categoria', + 'no_tags_title_default' => 'Vamos criar uma etiqueta!', + 'no_tags_intro_default' => 'Ainda não tem etiquetas. As etiquetas são usadas para ajustar as transações e rotulá-las com palavras-chave específicas.', + 'no_tags_imperative_default' => 'As etiquetas são criadas automaticamente quando cria transações, mas também pode criá-las manualmente. Vamos criar uma agora:', + 'no_tags_create_default' => 'Criar uma etiqueta', + 'no_transactions_title_withdrawal' => 'Vamos criar uma despesa!', + 'no_transactions_intro_withdrawal' => 'Ainda não tem despesas. Deve criar despesas para começar a gerir as suas finanças.', + 'no_transactions_imperative_withdrawal' => 'Gastou algum dinheiro? Então deveria anotá-lo:', + 'no_transactions_create_withdrawal' => 'Criar despesa', + 'no_transactions_title_deposit' => 'Vamos criar uma receita!', + 'no_transactions_intro_deposit' => 'Ainda não tem rendimentos registados. Deve criar entradas de rendimentos para começar a gerir as suas finanças.', + 'no_transactions_imperative_deposit' => 'Recebeu dinheiro? Então é melhor anotá-lo:', + 'no_transactions_create_deposit' => 'Criar depósito', + 'no_transactions_title_transfers' => 'Vamos criar uma transferência!', + 'no_transactions_intro_transfers' => 'Ainda não tem transferências. Quando movimenta dinheiro entre contas de ativos, fica registado como uma transferência.', + 'no_transactions_imperative_transfers' => 'Movimentou algum dinheiro? Então deve anotá-lo:', + 'no_transactions_create_transfers' => 'Criar transferência', + 'no_piggies_title_default' => 'Vamos criar um mealheiro!', + 'no_piggies_intro_default' => 'Ainda não tem nenhum mealheiro. Pode criar mealheiros para dividir as suas poupanças e acompanhar o objetivo da poupança.', + 'no_piggies_imperative_default' => 'Tem alguma coisa para a qual está a poupar? Crie um mealheiro e acompanhe:', + 'no_piggies_create_default' => 'Criar um novo mealheiro', + 'no_bills_title_default' => 'Vamos criar um encargo!', + 'no_bills_intro_default' => 'Ainda não tem encargos. Pode criar encargos para acompanhar as despesas regulares, como a renda de casa ou seguro.', + 'no_bills_imperative_default' => 'Tem encargos regulares? Crie um encargo e acompanhe os pagamentos:', + 'no_bills_create_default' => 'Criar um encargo', // recurring transactions - 'create_right_now' => 'Criar agora', - 'no_new_transaction_in_recurrence' => 'Não foi criada nenhuma transação nova. Talvez já tenha sido acionada nesta data?', - 'recurrences' => 'Transações recorrentes', - 'repeat_until_in_past' => 'Esta transação recorrente parou de ocorrer a :date.', - 'recurring_calendar_view' => 'Calendário', - 'no_recurring_title_default' => 'Vamos criar uma transação recorrente!', - 'no_recurring_intro_default' => 'Ainda não tem nenhuma transação recorrente. Pode usá-las para que o Firefly III crie transações automaticamente.', - 'no_recurring_imperative_default' => 'Esta é uma funcionalidade avançada, mas pode ser extremamente útil. Certifique-se de que lê a documentação (?)-ícone no canto superior direito) antes de continuar.', - 'no_recurring_create_default' => 'Criar uma transação recorrente', - 'make_new_recurring' => 'Criar transação recorrente', - 'recurring_daily' => 'Todos os dias', - 'recurring_weekly' => 'Semanalmente à(ao) :weekday', - 'recurring_weekly_skip' => 'A cada :skipª semana no :weekday dia', - 'recurring_monthly' => 'Todos os meses no dia :dayOfMonth', - 'recurring_monthly_skip' => 'A cada :skip meses no dia :dayOfMonth', - 'recurring_ndom' => 'Todos os meses no dia :dayOfMonth :weekday', - 'recurring_yearly' => 'Todos os anos em :date', - 'overview_for_recurrence' => 'Visão geral da transação recorrente ":title"', - 'warning_duplicates_repetitions' => 'Em raras ocasiões, as datas aparecem duas vezes nesta lista. Isso pode acontecer quando várias repetições colidem. O Firefly III irá gerar sempre uma transação por dia.', - 'created_transactions' => 'Transações relacionadas', - 'expected_withdrawals' => 'Levantamentos esperados', - 'expected_deposits' => 'Depósitos esperados', - 'expected_transfers' => 'Transferências esperadas', - 'created_withdrawals' => 'Levantamentos criados', - 'created_deposits' => 'Depósitos criados', - 'created_transfers' => 'Transferência criada', - 'recurring_info' => 'Transação recorrente :count / :total', - 'created_from_recurrence' => 'Criado a partir da transação recorrente ":title" (#:id)', - 'recurring_never_cron' => 'Aparentemente o cron job necessário para suportar transações recorrentes nunca foi executado. Isto é algo normal quando acaba de instalar o Firefly III, no entanto isto deve ser configurado o mais rápido possível. Por favor verifique as páginas de ajuda no ícone-(?) no canto superior direito da página.', - 'recurring_cron_long_ago' => 'Parece que a última vez que o cron job que trata das transações recorrentes correu foi há mais de 36 horas desde a ultima vez. Têm a certeza que está configurado corretamente? Por favor verifique as páginas de ajuda através do ícone-(?) no canto superior direito da página.', + 'create_right_now' => 'Criar agora', + 'no_new_transaction_in_recurrence' => 'Não foi criada nenhuma transação nova. Talvez já tenha sido acionada nesta data?', + 'recurrences' => 'Transações recorrentes', + 'repeat_until_in_past' => 'Esta transação recorrente parou de ocorrer a :date.', + 'recurring_calendar_view' => 'Calendário', + 'no_recurring_title_default' => 'Vamos criar uma transação recorrente!', + 'no_recurring_intro_default' => 'Ainda não tem nenhuma transação recorrente. Pode usá-las para que o Firefly III crie transações automaticamente.', + 'no_recurring_imperative_default' => 'Esta é uma funcionalidade avançada, mas pode ser extremamente útil. Certifique-se de que lê a documentação (?)-ícone no canto superior direito) antes de continuar.', + 'no_recurring_create_default' => 'Criar uma transação recorrente', + 'make_new_recurring' => 'Criar transação recorrente', + 'recurring_daily' => 'Todos os dias', + 'recurring_weekly' => 'Semanalmente à(ao) :weekday', + 'recurring_weekly_skip' => 'A cada :skipª semana no :weekday dia', + 'recurring_monthly' => 'Todos os meses no dia :dayOfMonth', + 'recurring_monthly_skip' => 'A cada :skip meses no dia :dayOfMonth', + 'recurring_ndom' => 'Todos os meses no dia :dayOfMonth :weekday', + 'recurring_yearly' => 'Todos os anos em :date', + 'overview_for_recurrence' => 'Visão geral da transação recorrente ":title"', + 'warning_duplicates_repetitions' => 'Em raras ocasiões, as datas aparecem duas vezes nesta lista. Isso pode acontecer quando várias repetições colidem. O Firefly III irá gerar sempre uma transação por dia.', + 'created_transactions' => 'Transações relacionadas', + 'expected_withdrawals' => 'Levantamentos esperados', + 'expected_deposits' => 'Depósitos esperados', + 'expected_transfers' => 'Transferências esperadas', + 'created_withdrawals' => 'Levantamentos criados', + 'created_deposits' => 'Depósitos criados', + 'created_transfers' => 'Transferência criada', + 'recurring_info' => 'Transação recorrente :count / :total', + 'created_from_recurrence' => 'Criado a partir da transação recorrente ":title" (#:id)', + 'recurring_never_cron' => 'Aparentemente o cron job necessário para suportar transações recorrentes nunca foi executado. Isto é algo normal quando acaba de instalar o Firefly III, no entanto isto deve ser configurado o mais rápido possível. Por favor verifique as páginas de ajuda no ícone-(?) no canto superior direito da página.', + 'recurring_cron_long_ago' => 'Parece que a última vez que o cron job que trata das transações recorrentes correu foi há mais de 36 horas desde a ultima vez. Têm a certeza que está configurado corretamente? Por favor verifique as páginas de ajuda através do ícone-(?) no canto superior direito da página.', - 'create_new_recurrence' => 'Criar nova transação recorrente', - 'help_first_date' => 'Indique a primeira recorrência esperada. Isto deve ser no futuro.', - 'help_first_date_no_past' => 'Indique a primeira recorrência esperada. O Firefly III não irá criar transações recorrentes no passado.', - 'no_currency' => '(sem moeda)', - 'mandatory_for_recurring' => 'Informações de recorrência obrigatórias', - 'mandatory_for_transaction' => 'Informações obrigatórias de transação', - 'optional_for_recurring' => 'Opcional informação recorrente', - 'optional_for_transaction' => 'Opcional informação de transação', - 'change_date_other_options' => 'Altere a "primeira data" para ver mais opções.', - 'mandatory_fields_for_tranaction' => 'Os valores aqui presentes vão acabar na(s) transação(ões) a serem criadas', - 'click_for_calendar' => 'Carregue aqui para ver um calendário que mostra quando a transação irá repetir.', - 'repeat_forever' => 'Repetir para sempre', - 'repeat_until_date' => 'Repetir até uma data', - 'repeat_times' => 'Repetir um número de vezes', - 'recurring_skips_one' => 'Alternado', - 'recurring_skips_more' => 'Saltar :count ocorrências', - 'store_new_recurrence' => 'Guardar transação recorrente', - 'stored_new_recurrence' => 'Transação recorrente ":title" guardada com sucesso.', - 'edit_recurrence' => 'Editar transação recorrente ":title"', - 'recurring_repeats_until' => 'Repete até :date', - 'recurring_repeats_forever' => 'Repetir para sempre', - 'recurring_repeats_x_times' => 'Repete :count vez|Repete :count vezes', - 'update_recurrence' => 'Atualizar transação recorrente', - 'updated_recurrence' => 'Atualizar transação recorrente ":title"', - 'recurrence_is_inactive' => 'Esta transação recorrente não está ativada e não serão geradas novas transações.', - 'delete_recurring' => 'Apagar transação recorrente ":title"', - 'new_recurring_transaction' => 'Nova transação recorrente', - 'help_weekend' => 'O que deve fazer o Firefly III quando uma transação recorrente ocorre num sábado ou domingo?', - 'do_nothing' => 'Crie só a transação', - 'skip_transaction' => 'Saltar a ocorrência', - 'jump_to_friday' => 'Criar antes uma transação na sexta-feira passada', - 'jump_to_monday' => 'Criar antes a transação na próxima segunda-feira', - 'will_jump_friday' => 'Será criada na sexta-feira em vez de nos fins de semana.', - 'will_jump_monday' => 'Será criada na segunda-feira em vez de nos fins de semana.', - 'except_weekends' => 'Exceto fins de semana', - 'recurrence_deleted' => 'Transação recorrente ":title" apagada', + 'create_new_recurrence' => 'Criar nova transação recorrente', + 'help_first_date' => 'Indique a primeira recorrência esperada. Isto deve ser no futuro.', + 'help_first_date_no_past' => 'Indique a primeira recorrência esperada. O Firefly III não irá criar transações recorrentes no passado.', + 'no_currency' => '(sem moeda)', + 'mandatory_for_recurring' => 'Informações de recorrência obrigatórias', + 'mandatory_for_transaction' => 'Informações obrigatórias de transação', + 'optional_for_recurring' => 'Opcional informação recorrente', + 'optional_for_transaction' => 'Opcional informação de transação', + 'change_date_other_options' => 'Altere a "primeira data" para ver mais opções.', + 'mandatory_fields_for_tranaction' => 'Os valores aqui presentes vão acabar na(s) transação(ões) a serem criadas', + 'click_for_calendar' => 'Carregue aqui para ver um calendário que mostra quando a transação irá repetir.', + 'repeat_forever' => 'Repetir para sempre', + 'repeat_until_date' => 'Repetir até uma data', + 'repeat_times' => 'Repetir um número de vezes', + 'recurring_skips_one' => 'Alternado', + 'recurring_skips_more' => 'Saltar :count ocorrências', + 'store_new_recurrence' => 'Guardar transação recorrente', + 'stored_new_recurrence' => 'Transação recorrente ":title" guardada com sucesso.', + 'edit_recurrence' => 'Editar transação recorrente ":title"', + 'recurring_repeats_until' => 'Repete até :date', + 'recurring_repeats_forever' => 'Repetir para sempre', + 'recurring_repeats_x_times' => 'Repete :count vez|Repete :count vezes', + 'update_recurrence' => 'Atualizar transação recorrente', + 'updated_recurrence' => 'Atualizar transação recorrente ":title"', + 'recurrence_is_inactive' => 'Esta transação recorrente não está ativada e não serão geradas novas transações.', + 'delete_recurring' => 'Apagar transação recorrente ":title"', + 'new_recurring_transaction' => 'Nova transação recorrente', + 'help_weekend' => 'O que deve fazer o Firefly III quando uma transação recorrente ocorre num sábado ou domingo?', + 'do_nothing' => 'Crie só a transação', + 'skip_transaction' => 'Saltar a ocorrência', + 'jump_to_friday' => 'Criar antes uma transação na sexta-feira passada', + 'jump_to_monday' => 'Criar antes a transação na próxima segunda-feira', + 'will_jump_friday' => 'Será criada na sexta-feira em vez de nos fins de semana.', + 'will_jump_monday' => 'Será criada na segunda-feira em vez de nos fins de semana.', + 'except_weekends' => 'Exceto fins de semana', + 'recurrence_deleted' => 'Transação recorrente ":title" apagada', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Saldo (:currency)', - 'box_spent_in_currency' => 'Gasto (:currency)', - 'box_earned_in_currency' => 'Ganho (:currency)', - 'box_budgeted_in_currency' => 'Orçamentado (:currency)', - 'box_bill_paid_in_currency' => 'Encargos pagos (:currency)', - 'box_bill_unpaid_in_currency' => 'Encargos por pagar (:currency)', - 'box_left_to_spend_in_currency' => 'Restante para gastar (:currency)', - 'box_net_worth_in_currency' => 'Valor líquido (:currency)', - 'box_spend_per_day' => 'Restante para gastar por dia: :amount', + 'box_balance_in_currency' => 'Saldo (:currency)', + 'box_spent_in_currency' => 'Gasto (:currency)', + 'box_earned_in_currency' => 'Ganho (:currency)', + 'box_budgeted_in_currency' => 'Orçamentado (:currency)', + 'box_bill_paid_in_currency' => 'Encargos pagos (:currency)', + 'box_bill_unpaid_in_currency' => 'Encargos por pagar (:currency)', + 'box_left_to_spend_in_currency' => 'Restante para gastar (:currency)', + 'box_net_worth_in_currency' => 'Valor líquido (:currency)', + 'box_spend_per_day' => 'Restante para gastar por dia: :amount', // debug page - 'debug_page' => 'Página de depuração', - 'debug_submit_instructions' => 'Se estiver com problemas, pode utilizar a informação desta caixa como informação de depuração. Por favor, copie e cole a mesma numa questão GitHub nova ou existente. Será gerada uma bonita tabela que pode ser usada como diagnóstico rápido do seu problema.', - 'debug_pretty_table' => 'Se copiar e colar o conteúdo da caixa abaixo numa questão do GitHub será gerada uma tabela. Por favor, não envolva o texto com acentos ou aspas.', - 'debug_additional_data' => 'Pode também partilhar o conteúdo da caixa abaixo. Pode copiar e colar a mesma numa questão GitHub novo ou existente. No entanto, o conteúdo da caixa abaixo pode conter informação privada como nomes de contas, detalhes de transações, ou endereços de email.', + 'debug_page' => 'Página de depuração', + 'debug_submit_instructions' => 'Se estiver com problemas, pode utilizar a informação desta caixa como informação de depuração. Por favor, copie e cole a mesma numa questão GitHub nova ou existente. Será gerada uma bonita tabela que pode ser usada como diagnóstico rápido do seu problema.', + 'debug_pretty_table' => 'Se copiar e colar o conteúdo da caixa abaixo numa questão do GitHub será gerada uma tabela. Por favor, não envolva o texto com acentos ou aspas.', + 'debug_additional_data' => 'Pode também partilhar o conteúdo da caixa abaixo. Pode copiar e colar a mesma numa questão GitHub novo ou existente. No entanto, o conteúdo da caixa abaixo pode conter informação privada como nomes de contas, detalhes de transações, ou endereços de email.', // object groups - 'object_groups_menu_bar' => 'Grupos', - 'object_groups_page_title' => 'Grupos', - 'object_groups_breadcrumb' => 'Grupos', - 'object_groups_index' => 'Visão geral', - 'object_groups' => 'Grupos', - 'object_groups_empty_explain' => 'Alguns elementos no Firefly III podem ser divididos em grupos. Os mealheiros, por exemplo, têm um campo "Grupo" nos ecrãs de criaçao e edição. Quando esse campo é definido, pode alterar os nomes e a ordem dos grupos nesta página. Para mais informação, veja a ajuda existente no canto superior direito, no botão com ícone-(?).', - 'object_group_title' => 'Título', - 'edit_object_group' => 'Editar grupo ":title"', - 'delete_object_group' => 'Apagar grupo ":title"', - 'update_object_group' => 'Atualizar grupo', - 'updated_object_group' => 'Grupo ":title" atualizado com sucesso', - 'deleted_object_group' => 'Grupo ":title" apagado com sucesso', - 'object_group' => 'Grupo', + 'object_groups_menu_bar' => 'Grupos', + 'object_groups_page_title' => 'Grupos', + 'object_groups_breadcrumb' => 'Grupos', + 'object_groups_index' => 'Visão geral', + 'object_groups' => 'Grupos', + 'object_groups_empty_explain' => 'Alguns elementos no Firefly III podem ser divididos em grupos. Os mealheiros, por exemplo, têm um campo "Grupo" nos ecrãs de criaçao e edição. Quando esse campo é definido, pode alterar os nomes e a ordem dos grupos nesta página. Para mais informação, veja a ajuda existente no canto superior direito, no botão com ícone-(?).', + 'object_group_title' => 'Título', + 'edit_object_group' => 'Editar grupo ":title"', + 'delete_object_group' => 'Apagar grupo ":title"', + 'update_object_group' => 'Atualizar grupo', + 'updated_object_group' => 'Grupo ":title" atualizado com sucesso', + 'deleted_object_group' => 'Grupo ":title" apagado com sucesso', + 'object_group' => 'Grupo', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Detalhes do registo (log) de auditoria', - 'ale_action_log_add' => 'Adicionado :amount ao mealheiro ":name"', - 'ale_action_log_remove' => 'Removido :amount do mealheiro ":name"', - 'ale_action_clear_budget' => 'Removido do orçamento', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removido da categoria', - 'ale_action_clear_notes' => 'Notas removidas', - 'ale_action_clear_tag' => 'Etiqueta limpa', - 'ale_action_clear_all_tags' => 'Apagadas todas as etiquetas', - 'ale_action_set_bill' => 'Ligado a encargo', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Definir orçamento', - 'ale_action_set_category' => 'Definir categoria', - 'ale_action_set_source' => 'Definir conta de origem', - 'ale_action_set_destination' => 'Definir conta de destino', - 'ale_action_update_transaction_type' => 'Tipo de transação alterado', - 'ale_action_update_notes' => 'Notas alteradas', - 'ale_action_update_description' => 'Descrição alterada', - 'ale_action_add_to_piggy' => 'Mealheiro', - 'ale_action_remove_from_piggy' => 'Mealheiro', - 'ale_action_add_tag' => 'Etiqueta adicionada', + 'audit_log_entries' => 'Detalhes do registo (log) de auditoria', + 'ale_action_log_add' => 'Adicionado :amount ao mealheiro ":name"', + 'ale_action_log_remove' => 'Removido :amount do mealheiro ":name"', + 'ale_action_clear_budget' => 'Removido do orçamento', + 'ale_action_update_group_title' => 'Título atualizado do grupo de transações', + 'ale_action_update_date' => 'Data da transação atualizada', + 'ale_action_update_order' => 'Ordem de transação atualizada', + 'ale_action_clear_category' => 'Removido da categoria', + 'ale_action_clear_notes' => 'Notas removidas', + 'ale_action_clear_tag' => 'Etiqueta limpa', + 'ale_action_clear_all_tags' => 'Apagadas todas as etiquetas', + 'ale_action_set_bill' => 'Ligado a encargo', + 'ale_action_switch_accounts' => 'Conta de origem e destino alternados', + 'ale_action_set_budget' => 'Definir orçamento', + 'ale_action_set_category' => 'Definir categoria', + 'ale_action_set_source' => 'Definir conta de origem', + 'ale_action_set_destination' => 'Definir conta de destino', + 'ale_action_update_transaction_type' => 'Tipo de transação alterado', + 'ale_action_update_notes' => 'Notas alteradas', + 'ale_action_update_description' => 'Descrição alterada', + 'ale_action_add_to_piggy' => 'Mealheiro', + 'ale_action_remove_from_piggy' => 'Mealheiro', + 'ale_action_add_tag' => 'Etiqueta adicionada', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Ativar a conversão de moeda', + 'disable_auto_convert' => 'Destaivar a conversão de moeda', ]; /* diff --git a/resources/lang/pt_PT/form.php b/resources/lang/pt_PT/form.php index 9f39d6f4f5..0018c3e2d3 100644 --- a/resources/lang/pt_PT/form.php +++ b/resources/lang/pt_PT/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Nome do banco', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Saldo nas poupanças', - 'credit_card_limit' => 'Limite do cartão de crédito', - 'automatch' => 'Corresponder automaticamente', - 'skip' => 'Pular', - 'enabled' => 'Ativo', - 'name' => 'Nome', - 'active' => 'Ativo', - 'amount_min' => 'Montante mínimo', - 'amount_max' => 'Montante máximo', - 'match' => 'Corresponde em', - 'strict' => 'Modo restrito', - 'repeat_freq' => 'Repete', - 'object_group' => 'Grupo', - 'location' => 'Localização', - 'update_channel' => 'Canal de atualização', - 'currency_id' => 'Moeda', - 'transaction_currency_id' => 'Moeda', - 'auto_budget_currency_id' => 'Moeda', - 'external_ip' => 'IP externo do seu servidor', - 'attachments' => 'Anexos', - 'BIC' => 'BIC', - 'verify_password' => 'Verificar a segurança da palavra-passe', - 'source_account' => 'Conta de origem', - 'destination_account' => 'Conta de destino', - 'asset_destination_account' => 'Conta de destino', - 'include_net_worth' => 'Incluir na posição global', - 'asset_source_account' => 'Conta de origem', - 'journal_description' => 'Descrição', - 'note' => 'Notas', - 'currency' => 'Moeda', - 'account_id' => 'Conta de ativos', - 'budget_id' => 'Orçamento', - 'bill_id' => 'Encargo', - 'opening_balance' => 'Saldo inicial', - 'tagMode' => 'Modo da etiqueta', - 'virtual_balance' => 'Saldo virtual', + 'bank_name' => 'Nome do banco', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Saldo nas poupanças', + 'credit_card_limit' => 'Limite do cartão de crédito', + 'automatch' => 'Corresponder automaticamente', + 'skip' => 'Pular', + 'enabled' => 'Ativo', + 'name' => 'Nome', + 'active' => 'Ativo', + 'amount_min' => 'Montante mínimo', + 'amount_max' => 'Montante máximo', + 'match' => 'Corresponde em', + 'strict' => 'Modo restrito', + 'repeat_freq' => 'Repete', + 'object_group' => 'Grupo', + 'location' => 'Localização', + 'update_channel' => 'Canal de atualização', + 'currency_id' => 'Moeda', + 'transaction_currency_id' => 'Moeda', + 'auto_budget_currency_id' => 'Moeda', + 'external_ip' => 'IP externo do seu servidor', + 'attachments' => 'Anexos', + 'BIC' => 'BIC', + 'verify_password' => 'Verificar a segurança da palavra-passe', + 'source_account' => 'Conta de origem', + 'destination_account' => 'Conta de destino', + 'asset_destination_account' => 'Conta de destino', + 'include_net_worth' => 'Incluir na posição global', + 'asset_source_account' => 'Conta de origem', + 'journal_description' => 'Descrição', + 'note' => 'Notas', + 'currency' => 'Moeda', + 'account_id' => 'Conta de ativos', + 'budget_id' => 'Orçamento', + 'bill_id' => 'Encargo', + 'opening_balance' => 'Saldo inicial', + 'tagMode' => 'Modo da etiqueta', + 'virtual_balance' => 'Saldo virtual', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Montante alvo', 'account_role' => 'Tipo de conta', 'opening_balance_date' => 'Data do saldo inicial', @@ -147,7 +145,7 @@ return [ 'start_date' => 'Início do intervalo', 'end_date' => 'Fim do intervalo', 'enddate' => 'Data do término', - 'move_rules_before_delete' => 'Rule group', + 'move_rules_before_delete' => 'Grupo de regras', 'start' => 'Início do intervalo', 'end' => 'Fim do intervalo', 'delete_account' => 'Apagar conta ":name"', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Tem a certeza que pretende apagar a transação com descrição ":description"?', 'mass_journal_are_you_sure' => 'Tem a certeza que pretende apagar estas transações?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Tem a certeza que pretende apagar a etiqueta ":tag"?', 'journal_link_areYouSure' => 'Tem a certeza que pretende apagar a ligação entre :source e :destination?', 'linkType_areYouSure' => 'Tem a certeza que pretende apagar o tipo de link ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Álbum', 'song' => 'Música', - // admin 'domain' => 'Domínio', 'single_user_mode' => 'Desativar registo de utilizadores', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Conta FinTS', 'local_account' => 'Conta Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Data desde', - 'to_date' => 'Data até', - 'due_date' => 'Data de vencimento', - 'payment_date' => 'Data de pagamento', - 'invoice_date' => 'Data da fatura', - 'internal_reference' => 'Referência interna', - 'inward' => 'Descrição interna', - 'outward' => 'Descrição externa', - 'rule_group_id' => 'Grupo de regras', - 'transaction_description' => 'Descrição da transação', - 'first_date' => 'Primeira data', - 'transaction_type' => 'Tipo de transação', - 'repeat_until' => 'Repetir até', - 'recurring_description' => 'Descrição da transação recorrente', - 'repetition_type' => 'Tipo de repetição', - 'foreign_currency_id' => 'Moeda estrangeira', - 'repetition_end' => 'Repetição termina', - 'repetitions' => 'Repetições', - 'calendar' => 'Calendário', - 'weekend' => 'Fim de semana', - 'client_secret' => 'Segredo do cliente', - 'withdrawal_destination_id' => 'Conta de destino', - 'deposit_source_id' => 'Conta de origem', - 'expected_on' => 'Esperado em', - 'paid' => 'Pago', - 'auto_budget_type' => 'Orçamento automático', - 'auto_budget_amount' => 'Montante do orçamento automático', - 'auto_budget_period' => 'Período do orçamento automático', - 'collected' => 'Recebido', - 'submitted' => 'Enviado', - 'key' => 'Chave', - 'value' => 'Conteúdo do registo', - 'webhook_delivery' => 'Entrega', - 'webhook_response' => 'Resposta', - 'webhook_trigger' => 'Gatilho', + 'from_date' => 'Data desde', + 'to_date' => 'Data até', + 'due_date' => 'Data de vencimento', + 'payment_date' => 'Data de pagamento', + 'invoice_date' => 'Data da fatura', + 'internal_reference' => 'Referência interna', + 'inward' => 'Descrição interna', + 'outward' => 'Descrição externa', + 'rule_group_id' => 'Grupo de regras', + 'transaction_description' => 'Descrição da transação', + 'first_date' => 'Primeira data', + 'transaction_type' => 'Tipo de transação', + 'repeat_until' => 'Repetir até', + 'recurring_description' => 'Descrição da transação recorrente', + 'repetition_type' => 'Tipo de repetição', + 'foreign_currency_id' => 'Moeda estrangeira', + 'repetition_end' => 'Repetição termina', + 'repetitions' => 'Repetições', + 'calendar' => 'Calendário', + 'weekend' => 'Fim de semana', + 'client_secret' => 'Segredo do cliente', + 'withdrawal_destination_id' => 'Conta de destino', + 'deposit_source_id' => 'Conta de origem', + 'expected_on' => 'Esperado em', + 'paid' => 'Pago', + 'auto_budget_type' => 'Orçamento automático', + 'auto_budget_amount' => 'Montante do orçamento automático', + 'auto_budget_period' => 'Período do orçamento automático', + 'collected' => 'Recebido', + 'submitted' => 'Enviado', + 'key' => 'Chave', + 'value' => 'Conteúdo do registo', + 'webhook_delivery' => 'Entrega', + 'webhook_response' => 'Resposta', + 'webhook_trigger' => 'Gatilho', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/pt_PT/intro.php b/resources/lang/pt_PT/intro.php index 9890d3b35a..4ea695ca60 100644 --- a/resources/lang/pt_PT/intro.php +++ b/resources/lang/pt_PT/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Bem-vindo(a) à página inicial do Firefly III. Por favor, reserve um momento para ler a nossa introdução para perceber o modo de funcionamento do Firefly III.', - 'index_accounts-chart' => 'Este gráfico mostra o saldo atual das suas contas de ativos. Pode selecionar as contas a aparecer aqui, nas suas preferências.', - 'index_box_out_holder' => 'Esta caixa e as restantes ao lado dão-lhe um breve resumo da sua situação financeira.', - 'index_help' => 'Se alguma vez precisar de ajuda com uma página ou um formulário, use este botão.', - 'index_outro' => 'A maioria das páginas no Firefly III vão começar com um pequeno tutorial como este. Por favor, contacte-me quando tiver questões ou comentários. Desfrute!', - 'index_sidebar-toggle' => 'Para criar transações, contas ou outras coisas, use o menu sobre este ícone.', - 'index_cash_account' => 'Estas são as contas criadas até agora. Pode usar uma conta caixa para acompanhar as suas despesas em dinheiro, no entanto, não é obrigatório usar.', + 'index_intro' => 'Bem-vindo(a) à página inicial do Firefly III. Por favor, reserve um momento para ler a nossa introdução para perceber o modo de funcionamento do Firefly III.', + 'index_accounts-chart' => 'Este gráfico mostra o saldo atual das suas contas de ativos. Pode selecionar as contas a aparecer aqui, nas suas preferências.', + 'index_box_out_holder' => 'Esta caixa e as restantes ao lado dão-lhe um breve resumo da sua situação financeira.', + 'index_help' => 'Se alguma vez precisar de ajuda com uma página ou um formulário, use este botão.', + 'index_outro' => 'A maioria das páginas no Firefly III vão começar com um pequeno tutorial como este. Por favor, contacte-me quando tiver questões ou comentários. Desfrute!', + 'index_sidebar-toggle' => 'Para criar transações, contas ou outras coisas, use o menu sobre este ícone.', + 'index_cash_account' => 'Estas são as contas criadas até agora. Pode usar uma conta caixa para acompanhar as suas despesas em dinheiro, no entanto, não é obrigatório usar.', // transactions - 'transactions_create_basic_info' => 'Adicione a informação básica da sua transação. Origem, destino, data e descrição.', - 'transactions_create_amount_info' => 'Adicione a quantia da transação. Se necessário os campos atualizar-se-ão automaticamente com informações de moedas estrangeiras.', - 'transactions_create_optional_info' => 'Estes campos são todos opcionais. Adicionar meta-dados aqui irá ajudar a organizar melhor as suas transações.', - 'transactions_create_split' => 'Se quiser dividir uma transação, adicione mais divisões com este botão', + 'transactions_create_basic_info' => 'Adicione a informação básica da sua transação. Origem, destino, data e descrição.', + 'transactions_create_amount_info' => 'Adicione a quantia da transação. Se necessário os campos atualizar-se-ão automaticamente com informações de moedas estrangeiras.', + 'transactions_create_optional_info' => 'Estes campos são todos opcionais. Adicionar meta-dados aqui irá ajudar a organizar melhor as suas transações.', + 'transactions_create_split' => 'Se quiser dividir uma transação, adicione mais divisões com este botão', // create account: - 'accounts_create_iban' => 'Atribua IBAN\'s válidos às suas contas. Isto pode ajudar a tornar a importação de dados muito simples no futuro.', - 'accounts_create_asset_opening_balance' => 'As contas de ativos podem ter um saldo de abertura, desta forma indicando o início do seu historial no Firefly III.', - 'accounts_create_asset_currency' => 'O Firefly III suporta múltiplas moedas. Contas de ativos tem uma moeda principal, que deve ser definida aqui.', - 'accounts_create_asset_virtual' => 'Por vezes, pode ajudar dar à sua conta um saldo virtual: uma quantia extra, sempre adicionada ou removida do saldo real.', + 'accounts_create_iban' => 'Atribua IBAN\'s válidos às suas contas. Isto pode ajudar a tornar a importação de dados muito simples no futuro.', + 'accounts_create_asset_opening_balance' => 'As contas de ativos podem ter um saldo de abertura, desta forma indicando o início do seu historial no Firefly III.', + 'accounts_create_asset_currency' => 'O Firefly III suporta múltiplas moedas. Contas de ativos tem uma moeda principal, que deve ser definida aqui.', + 'accounts_create_asset_virtual' => 'Por vezes, pode ajudar dar à sua conta um saldo virtual: uma quantia extra, sempre adicionada ou removida do saldo real.', // budgets index - 'budgets_index_intro' => 'Os orçamentos são usados para gerir as suas finanças e fazem parte de uma das funções principais do Firefly III.', - 'budgets_index_set_budget' => 'Defina o seu orçamento total para cada período, de modo que o Firefly III possa dizer se tem orçamentado todo o seu dinheiro disponível.', - 'budgets_index_see_expenses_bar' => 'Ao gastar dinheiro esta barra vai sendo preenchida.', - 'budgets_index_navigate_periods' => 'Navega através de intervalos para definir os orçamentos antecipadamente.', - 'budgets_index_new_budget' => 'Crie novos orçamentos como achar melhor.', - 'budgets_index_list_of_budgets' => 'Use esta tabela para definir os valores para cada orçamento e manter o controlo dos gastos.', - 'budgets_index_outro' => 'Para obter mais informações sobre orçamentos, verifique o ícone de ajuda no canto superior direito.', + 'budgets_index_intro' => 'Os orçamentos são usados para gerir as suas finanças e fazem parte de uma das funções principais do Firefly III.', + 'budgets_index_see_expenses_bar' => 'Ao gastar dinheiro esta barra vai sendo preenchida.', + 'budgets_index_navigate_periods' => 'Navega através de intervalos para definir os orçamentos antecipadamente.', + 'budgets_index_new_budget' => 'Crie novos orçamentos como achar melhor.', + 'budgets_index_list_of_budgets' => 'Use esta tabela para definir os valores para cada orçamento e manter o controlo dos gastos.', + 'budgets_index_outro' => 'Para obter mais informações sobre orçamentos, verifique o ícone de ajuda no canto superior direito.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Use estes relatórios para obter sínteses detalhadas sobre as suas finanças.', - 'reports_index_inputReportType' => 'Escolha um tipo de relatório. Confira as páginas de ajuda para ter a certeza do que cada relatório mostra.', - 'reports_index_inputAccountsSelect' => 'Pode incluir ou excluir contas de ativos conforme as suas necessidades.', - 'reports_index_inputDateRange' => 'O intervalo temporal a definir é totalmente consigo: desde 1 dia até 10 anos.', - 'reports_index_extra-options-box' => 'Dependendo do relatório que selecionou, pode selecionar filtros e opções extra aqui. Repare nesta caixa quando mudar os tipos de relatório.', + 'reports_index_intro' => 'Use estes relatórios para obter sínteses detalhadas sobre as suas finanças.', + 'reports_index_inputReportType' => 'Escolha um tipo de relatório. Confira as páginas de ajuda para ter a certeza do que cada relatório mostra.', + 'reports_index_inputAccountsSelect' => 'Pode incluir ou excluir contas de ativos conforme as suas necessidades.', + 'reports_index_inputDateRange' => 'O intervalo das datas depende do que quiser: 1 dia, 10 anos, ou até mais.', + 'reports_index_extra-options-box' => 'Dependendo do relatório que selecionou, pode selecionar filtros e opções extra aqui. Repare nesta caixa quando mudar os tipos de relatório.', // reports (reports) - 'reports_report_default_intro' => 'Este relatório vai-lhe dar uma visão rápida e abrangente das suas finanças. Se desejar ver algo a mais, por favor não hesite em contactar-me!', - 'reports_report_audit_intro' => 'Este relatório vai-lhe dar informações detalhadas das suas contas de ativos.', - 'reports_report_audit_optionsBox' => 'Usa estes campos para mostrar ou esconder as colunas que pretenda.', + 'reports_report_default_intro' => 'Este relatório vai-lhe dar uma visão rápida e abrangente das suas finanças. Se desejar ver algo a mais, por favor não hesite em contactar-me!', + 'reports_report_audit_intro' => 'Este relatório vai-lhe dar informações detalhadas das suas contas de ativos.', + 'reports_report_audit_optionsBox' => 'Usa estes campos para mostrar ou esconder as colunas que pretenda.', - 'reports_report_category_intro' => 'Este relatório dar-lhe-á perspetiva sobre uma ou múltiplas categorias.', - 'reports_report_category_pieCharts' => 'Estes gráficos dar-lhe-ão perspetiva sobre despesas e receitas, por categoria ou por conta.', - 'reports_report_category_incomeAndExpensesChart' => 'Este gráfico mostra-lhe as despesas e receitas por categoria.', + 'reports_report_category_intro' => 'Este relatório dar-lhe-á perspetiva sobre uma ou múltiplas categorias.', + 'reports_report_category_pieCharts' => 'Estes gráficos dar-lhe-ão perspetiva sobre despesas e receitas, por categoria ou por conta.', + 'reports_report_category_incomeAndExpensesChart' => 'Este gráfico mostra-lhe as despesas e receitas por categoria.', - 'reports_report_tag_intro' => 'Este relatório dar-lhe-á informações de uma ou múltiplas etiquetas.', - 'reports_report_tag_pieCharts' => 'Estes gráficos dar-lhe-ão informações de despesas e receitas por etiqueta, conta, categoria ou orçamento.', - 'reports_report_tag_incomeAndExpensesChart' => 'Este gráfico mostra-lhe as suas despesas e receitas por etiqueta.', + 'reports_report_tag_intro' => 'Este relatório dar-lhe-á informações de uma ou múltiplas etiquetas.', + 'reports_report_tag_pieCharts' => 'Estes gráficos dar-lhe-ão informações de despesas e receitas por etiqueta, conta, categoria ou orçamento.', + 'reports_report_tag_incomeAndExpensesChart' => 'Este gráfico mostra-lhe as suas despesas e receitas por etiqueta.', 'reports_report_budget_intro' => 'Este relatório dar-lhe-á informações de um ou múltiplos orçamentos.', 'reports_report_budget_pieCharts' => 'Estes gráficos dar-lhe-ão perspetiva sobre despesas por orçamento ou por conta.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Ao lado desta barra de progresso existem 2 botões (+ e -) para adicionar ou remover dinheiro de cada mealheiro.', 'piggy-banks_index_accountStatus' => 'Para cada conta de ativo com pelo menos um mealheiro, o estado e listado nesta tabela.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Qual é o seu objetivo? Um sofá novo, uma câmara, dinheiro para emergências?', 'piggy-banks_create_date' => 'Pode definir uma data alvo ou um prazo limite para o seu mealheiro.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Use os encargos para controlar o montante de dinheiro que terá de despender em cada período. Pense nos encargos como rendas de casa, seguros ou pagamentos de hipotecas.', 'bills_create_name' => 'Use um nome descritivo como "Renda" ou "Seguro de Vida".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Selecione um montante mínimo e máximo para este encargo.', 'bills_create_repeat_freq_holder' => 'A maioria dos encargos são mensais, mas pode definir outra frequência aqui.', 'bills_create_skip_holder' => 'Se um encargo se repete a cada 2 semanas, o campo "saltar" deve ser colocado como "1" para saltar semana sim, semana não.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Use este botão para ver que transações podem coincidir com a sua regra.', 'rules_create_actions' => 'Defina todas as ações que quiser.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Mais opções estão disponíveis atrás destas abas.', diff --git a/resources/lang/pt_PT/list.php b/resources/lang/pt_PT/list.php index 51de2c7159..44b937c0e1 100644 --- a/resources/lang/pt_PT/list.php +++ b/resources/lang/pt_PT/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Botões', - 'icon' => 'Ícone', - 'id' => 'ID', - 'create_date' => 'Criado em', - 'update_date' => 'Alterado em', - 'updated_at' => 'Alterado em', - 'balance_before' => 'Saldo antes', - 'balance_after' => 'Saldo depois', - 'name' => 'Nome', - 'role' => 'Perfil', - 'currentBalance' => 'Saldo atual', - 'linked_to_rules' => 'Regras relevantes', - 'active' => 'Esta ativo?', - 'percentage' => '%.', - 'recurring_transaction' => 'Transação recorrente', - 'next_due' => 'Próximo vencimento', - 'transaction_type' => 'Tipo', - 'lastActivity' => 'Última atividade', - 'balanceDiff' => 'Diferença de saldo', - 'other_meta_data' => 'Outros meta dados', - 'invited_at' => 'Convidado em', - 'expires' => 'O convite expira', - 'invited_by' => 'Convidado por', - 'invite_link' => 'Link do convite', - 'account_type' => 'Tipo de conta', - 'created_at' => 'Criado em', - 'account' => 'Conta', - 'external_url' => 'URL Externo', - 'matchingAmount' => 'Montante', - 'destination' => 'Destino', - 'source' => 'Origem', - 'next_expected_match' => 'Próxima correspondência esperada', - 'automatch' => 'Auto correspondência?', + 'buttons' => 'Botões', + 'icon' => 'Ícone', + 'id' => 'ID', + 'create_date' => 'Criado em', + 'update_date' => 'Alterado em', + 'updated_at' => 'Alterado em', + 'balance_before' => 'Saldo antes', + 'balance_after' => 'Saldo depois', + 'name' => 'Nome', + 'role' => 'Perfil', + 'currentBalance' => 'Saldo atual', + 'linked_to_rules' => 'Regras relevantes', + 'active' => 'Esta ativo?', + 'percentage' => '%.', + 'recurring_transaction' => 'Transação recorrente', + 'next_due' => 'Próximo vencimento', + 'transaction_type' => 'Tipo', + 'lastActivity' => 'Última atividade', + 'balanceDiff' => 'Diferença de saldo', + 'other_meta_data' => 'Outros meta dados', + 'invited_at' => 'Convidado em', + 'expires' => 'O convite expira', + 'invited_by' => 'Convidado por', + 'invite_link' => 'Link do convite', + 'account_type' => 'Tipo de conta', + 'created_at' => 'Criado em', + 'account' => 'Conta', + 'external_url' => 'URL Externo', + 'matchingAmount' => 'Montante', + 'destination' => 'Destino', + 'source' => 'Origem', + 'next_expected_match' => 'Próxima correspondência esperada', + 'automatch' => 'Auto correspondência?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Repete', 'description' => 'Descrição', 'amount' => 'Montante', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Conta no bunq', 'file_name' => 'Nome do ficheiro', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Tamanho do ficheiro', - 'file_type' => 'Tipo do ficheiro', - 'attached_to' => 'Anexado a', - 'file_exists' => 'O ficheiro existe', - 'spectre_bank' => 'Banco', - 'spectre_last_use' => 'Último início de sessão', - 'spectre_status' => 'Estado', - 'bunq_payment_id' => 'ID de pagamento bunq', - 'repetitions' => 'Repetições', - 'title' => 'Título', - 'transaction_s' => 'Transação(ões)', - 'field' => 'Campo', - 'value' => 'Valor', - 'interest' => 'Juro', - 'interest_period' => 'Período de juros', - 'liability_type' => 'Tipo de responsabilidade', - 'liability_direction' => 'Passivo entrada/fora', - 'end_date' => 'Data do término', - 'payment_info' => 'Informações de pagamento', - 'expected_info' => 'Próxima transação esperada', - 'start_date' => 'Data de inicio', - 'trigger' => 'Gatilho', - 'response' => 'Resposta', - 'delivery' => 'Entrega', - 'url' => 'URL', - 'secret' => 'Segredo', - + 'file_size' => 'Tamanho do ficheiro', + 'file_type' => 'Tipo do ficheiro', + 'attached_to' => 'Anexado a', + 'file_exists' => 'O ficheiro existe', + 'spectre_bank' => 'Banco', + 'spectre_last_use' => 'Último início de sessão', + 'spectre_status' => 'Estado', + 'bunq_payment_id' => 'ID de pagamento bunq', + 'repetitions' => 'Repetições', + 'title' => 'Título', + 'transaction_s' => 'Transação(ões)', + 'field' => 'Campo', + 'value' => 'Valor', + 'interest' => 'Juro', + 'interest_period' => 'Período de juros', + 'liability_type' => 'Tipo de responsabilidade', + 'liability_direction' => 'Passivo entrada/fora', + 'end_date' => 'Data do término', + 'payment_info' => 'Informações de pagamento', + 'expected_info' => 'Próxima transação esperada', + 'start_date' => 'Data de inicio', + 'trigger' => 'Gatilho', + 'response' => 'Resposta', + 'delivery' => 'Entrega', + 'url' => 'URL', + 'secret' => 'Segredo', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/pt_PT/pagination.php b/resources/lang/pt_PT/pagination.php index 8286eca40e..a142efcadb 100644 --- a/resources/lang/pt_PT/pagination.php +++ b/resources/lang/pt_PT/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/pt_PT/passwords.php b/resources/lang/pt_PT/passwords.php index fcfb3190ba..34e2393305 100644 --- a/resources/lang/pt_PT/passwords.php +++ b/resources/lang/pt_PT/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/pt_PT/rules.php b/resources/lang/pt_PT/rules.php index 389fb335ff..280929c0e6 100644 --- a/resources/lang/pt_PT/rules.php +++ b/resources/lang/pt_PT/rules.php @@ -1,6 +1,5 @@ 'Action ":action", present in rule ":rule", could not be applied to transaction #:group: :error', - 'find_or_create_tag_failed' => 'Could not find or create tag ":tag"', - 'tag_already_added' => 'Tag ":tag" is already linked to this transaction', - 'inspect_transaction' => 'Inspect transaction ":title" @ Firefly III', + 'main_message' => 'A ação ":action", presenta na regra ":rule" não pôde ser aplicada à transação #:group: :error', + 'find_or_create_tag_failed' => 'Não foi possível encontrar ou criar a etiqueta ":tag"', + 'tag_already_added' => 'A etiqueta ":tag" já está vinculada a esta transação', + 'inspect_transaction' => 'Inspecionar transação ":title" @ Firefly III', 'inspect_rule' => 'Inspect rule ":title" @ Firefly III', - 'journal_other_user' => 'This transaction doesn\'t belong to the user', - 'no_such_journal' => 'This transaction doesn\'t exist', - 'journal_already_no_budget' => 'This transaction has no budget, so it cannot be removed', - 'journal_already_no_category' => 'This transaction had no category, so it cannot be removed', - 'journal_already_no_notes' => 'This transaction had no notes, so they cannot be removed', - 'journal_not_found' => 'Firefly III can\'t find the requested transaction', - 'split_group' => 'Firefly III cannot execute this action on a transaction with multiple splits', - 'is_already_withdrawal' => 'This transaction is already a withdrawal', - 'is_already_deposit' => 'This transaction is already a deposit', - 'is_already_transfer' => 'This transaction is already a transfer', - 'is_not_transfer' => 'This transaction is not a transfer', - 'complex_error' => 'Something complicated went wrong. Sorry about that. Please inspect the logs of Firefly III', - 'no_valid_opposing' => 'Conversion failed because there is no valid account named ":account"', - 'new_notes_empty' => 'The notes to be set are empty', - 'unsupported_transaction_type_withdrawal' => 'Firefly III cannot convert a ":type" to a withdrawal', - 'unsupported_transaction_type_deposit' => 'Firefly III cannot convert a ":type" to a deposit', - 'unsupported_transaction_type_transfer' => 'Firefly III cannot convert a ":type" to a transfer', - 'already_has_source_asset' => 'This transaction already has ":name" as the source asset account', - 'already_has_destination_asset' => 'This transaction already has ":name" as the destination asset account', + 'journal_other_user' => 'Esta transação não pertence ao utilizador', + 'no_such_journal' => 'Esta transação não existe', + 'journal_already_no_budget' => 'Esta transação não tem orçamento, então não pode ser removido', + 'journal_already_no_category' => 'Esta transação não tinha nenhuma categoria, por isso não esta pode ser removida', + 'journal_already_no_notes' => 'Esta transação não tinha notas, por isso elas não podem ser removidas', + 'journal_not_found' => 'O Firefly III não consegue encontrar a transação que solicitou', + 'split_group' => 'O Firefly III não pode executar essa ação numa transação com múltiplas divisões', + 'is_already_withdrawal' => 'Esta transação já e um levantamento', + 'is_already_deposit' => 'Esta transação já e um depósito', + 'is_already_transfer' => 'Esta transação já é uma transferência', + 'is_not_transfer' => 'Esta transação não é uma transferência', + 'complex_error' => 'Algo complicou deu errado. Desculpe por isso. Por favor, inspecione os logs do Firefly III', + 'no_valid_opposing' => 'A conversão falhou porque não há nenhuma conta válida chamada ":account"', + 'new_notes_empty' => 'As notas a serem definidas estão vazias', + 'unsupported_transaction_type_withdrawal' => 'Firefly III não pode converter um ":type" para um levantamento', + 'unsupported_transaction_type_deposit' => 'Firefly III não pode converter um ":type" para um depósito', + 'unsupported_transaction_type_transfer' => 'Firefly III não pode converter um ":type" para uma transferência', + 'already_has_source_asset' => 'Esta transação já tem ":name" como a conta do ativo de origem', + 'already_has_destination_asset' => 'Esta transação já tem ":name" como a conta de ativo de destino', 'already_has_destination' => 'This transaction already has ":name" as the destination account', 'already_has_source' => 'This transaction already has ":name" as the source account', 'already_linked_to_subscription' => 'The transaction is already linked to subscription ":name"', @@ -56,6 +55,8 @@ return [ 'cannot_find_subscription' => 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/pt_PT/validation.php b/resources/lang/pt_PT/validation.php index 94afa89135..f282d3f5e1 100644 --- a/resources/lang/pt_PT/validation.php +++ b/resources/lang/pt_PT/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'A matriz tem em falta a cláusula-"onde"', - 'missing_update' => 'A matriz tem em falta a cláusula-"atualizar"', - 'invalid_where_key' => 'JSON contém uma chave inválida para a cláusula "onde"', - 'invalid_update_key' => 'JSON contém uma chave inválida para a cláusula "atualizar"', - 'invalid_query_data' => 'Existem dados inválidos no campo %s:%s do seu inquérito.', - 'invalid_query_account_type' => 'O seu inquérito contém contas de tipos diferentes, o que não é permitido.', - 'invalid_query_currency' => 'O seu inquérito contém contas com configurações de moeda diferentes, o que não é permitido.', - 'iban' => 'Este IBAN não é valido.', - 'zero_or_more' => 'O valor não pode ser negativo.', - 'date_or_time' => 'O valor deve ser uma data ou hora válida (ISO 8601).', - 'source_equals_destination' => 'A conta de origem é igual à conta de destino.', - 'unique_account_number_for_user' => 'Parece que este número de conta já está em uso.', - 'unique_iban_for_user' => 'Parece que este IBAN já está em uso.', - 'deleted_user' => 'Devido a motivos de segurança, não se pode registar com este email.', - 'rule_trigger_value' => 'Este valor é inválido para o gatilho selecionado.', - 'rule_action_value' => 'Este valor é inválido para a ação selecionada.', - 'file_already_attached' => 'O ficheiro ":name" carregado já está anexado a este objeto.', - 'file_attached' => 'Ficheiro carregado com sucesso ":name".', - 'must_exist' => 'O ID no campo :attribute não existe na base de dados.', - 'all_accounts_equal' => 'Todas as contas neste campo têm de ser iguais.', - 'group_title_mandatory' => 'Um título de grupo é obrigatório quando existe mais de uma transação.', - 'transaction_types_equal' => 'Todas as divisões devem ser do mesmo tipo.', - 'invalid_transaction_type' => 'Tipo de transação inválido.', - 'invalid_selection' => 'A sua seleção é invalida.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Necessita pelo menos de uma transação.', - 'recurring_transaction_id' => 'Precisa de pelo menos uma transação.', - 'need_id_to_match' => 'Precisa de enviar esta entrada com um ID para corresponder com a API.', - 'too_many_unmatched' => 'Muitas transações enviadas não podem ser correspondidas a suas respetivas entradas na base de dados. Certifique-se de que as entradas existentes têm um ID válido.', - 'id_does_not_match' => 'O ID enviado #:id não corresponde ao ID esperado. Certifique-se de que corresponda ou omita o campo.', - 'at_least_one_repetition' => 'Necessita pelo menos de uma repetição.', - 'require_repeat_until' => 'Preencher um número de repetições, ou uma data de fim (repetir_até). Não ambos.', - 'require_currency_info' => 'O conteúdo deste campo é inválido sem a informação da moeda.', - 'not_transfer_account' => 'Esta conta não pode ser utilizada para transferências.', - 'require_currency_amount' => 'O conteúdo deste campo é inválido sem o montante da moeda estrangeira.', - 'require_foreign_currency' => 'Este campo requer um número', - 'require_foreign_dest' => 'O valor deste campo deve utilizar a mesma moeda da conta de destino.', - 'require_foreign_src' => 'O valor deste campo deve utilizar a mesma moeda da conta de origem.', - 'equal_description' => 'A descrição da transação não deve ser igual à descrição global.', - 'file_invalid_mime' => 'O ficheiro ":name" é do tipo ":mime" que não é aceite para carregamento.', - 'file_too_large' => 'O ficheiro ":name" é demasiado grande.', - 'belongs_to_user' => 'O valor de :attribute é desconhecido.', - 'accepted' => 'O :attribute tem de ser aceite.', - 'bic' => 'Este BIC não é válido.', - 'at_least_one_trigger' => 'A regra tem de ter pelo menos um gatilho.', - 'at_least_one_active_trigger' => 'A regra deve ter pelo menos um gatilho ativo.', - 'at_least_one_action' => 'A regra tem de ter pelo menos uma ação.', - 'at_least_one_active_action' => 'A regra deve ter pelo menos uma ação ativa.', - 'base64' => 'Isto não é um valor base64 válido.', - 'model_id_invalid' => 'O ID inserido é inválido para este modelo.', - 'less' => ':attribute tem de ser menor que 10.000.000', - 'active_url' => 'O :attribute não é um URL válido.', - 'after' => 'A data :attribute tem de ser posterior a :date.', - 'date_after' => 'A data de início deve ser anterior à data de fim.', - 'alpha' => 'O :attribute apenas pode conter letras.', - 'alpha_dash' => 'O :attribute apenas pode conter letras, números e traços.', - 'alpha_num' => 'O :attribute apenas pode conter letras e números.', - 'array' => 'O :attribute tem de ser uma matriz.', - 'unique_for_user' => 'Já existe um registo com este :attribute.', - 'before' => 'A data :attribute tem de ser anterior a :date.', - 'unique_object_for_user' => 'Este nome já está em uso.', - 'unique_account_for_user' => 'Este nome de conta já está em uso.', + 'bad_type_source' => 'O Firefly III não consegue determinar o tipo de transação baseado nesta conta de origem.', + 'bad_type_destination' => 'O Firefly III não consegue determinar o tipo de transação baseado nesta conta de destino.', + 'missing_where' => 'A matriz tem em falta a cláusula-"onde"', + 'missing_update' => 'A matriz tem em falta a cláusula-"atualizar"', + 'invalid_where_key' => 'JSON contém uma chave inválida para a cláusula "onde"', + 'invalid_update_key' => 'JSON contém uma chave inválida para a cláusula "atualizar"', + 'invalid_query_data' => 'Existem dados inválidos no campo %s:%s do seu inquérito.', + 'invalid_query_account_type' => 'O seu inquérito contém contas de tipos diferentes, o que não é permitido.', + 'invalid_query_currency' => 'O seu inquérito contém contas com configurações de moeda diferentes, o que não é permitido.', + 'iban' => 'Este IBAN não é valido.', + 'zero_or_more' => 'O valor não pode ser negativo.', + 'more_than_zero' => 'O valor deve ser mais que zero.', + 'more_than_zero_correct' => 'O valor deve ser maior ou igual a zero.', + 'no_asset_account' => 'Esta não é uma conta de ativos.', + 'date_or_time' => 'O valor deve ser uma data ou hora válida (ISO 8601).', + 'source_equals_destination' => 'A conta de origem é igual à conta de destino.', + 'unique_account_number_for_user' => 'Parece que este número de conta já está em uso.', + 'unique_iban_for_user' => 'Parece que este IBAN já está em uso.', + 'reconciled_forbidden_field' => 'Esta transação já está reconciliada, não pode alterar o ":field"', + 'deleted_user' => 'Devido a motivos de segurança, não se pode registar com este email.', + 'rule_trigger_value' => 'Este valor é inválido para o gatilho selecionado.', + 'rule_action_value' => 'Este valor é inválido para a ação selecionada.', + 'file_already_attached' => 'O ficheiro ":name" carregado já está anexado a este objeto.', + 'file_attached' => 'Ficheiro carregado com sucesso ":name".', + 'must_exist' => 'O ID no campo :attribute não existe na base de dados.', + 'all_accounts_equal' => 'Todas as contas neste campo têm de ser iguais.', + 'group_title_mandatory' => 'Um título de grupo é obrigatório quando existe mais de uma transação.', + 'transaction_types_equal' => 'Todas as divisões devem ser do mesmo tipo.', + 'invalid_transaction_type' => 'Tipo de transação inválido.', + 'invalid_selection' => 'A sua seleção é invalida.', + 'belongs_user' => 'Esse valor está ligado a um objeto que parece não existir.', + 'belongs_user_or_user_group' => 'Esse valor está ligado a um objeto que parece não existir na sua administração financeira atual.', + 'at_least_one_transaction' => 'Necessita pelo menos de uma transação.', + 'recurring_transaction_id' => 'Precisa de pelo menos uma transação.', + 'need_id_to_match' => 'Precisa de enviar esta entrada com um ID para corresponder com a API.', + 'too_many_unmatched' => 'Muitas transações enviadas não podem ser correspondidas a suas respetivas entradas na base de dados. Certifique-se de que as entradas existentes têm um ID válido.', + 'id_does_not_match' => 'O ID enviado #:id não corresponde ao ID esperado. Certifique-se de que corresponda ou omita o campo.', + 'at_least_one_repetition' => 'Necessita pelo menos de uma repetição.', + 'require_repeat_until' => 'Preencher um número de repetições, ou uma data de fim (repetir_até). Não ambos.', + 'require_currency_info' => 'O conteúdo deste campo é inválido sem a informação da moeda.', + 'not_transfer_account' => 'Esta conta não pode ser utilizada para transferências.', + 'require_currency_amount' => 'O conteúdo deste campo é inválido sem o montante da moeda estrangeira.', + 'require_foreign_currency' => 'Este campo requer um número', + 'require_foreign_dest' => 'O valor deste campo deve utilizar a mesma moeda da conta de destino.', + 'require_foreign_src' => 'O valor deste campo deve utilizar a mesma moeda da conta de origem.', + 'equal_description' => 'A descrição da transação não deve ser igual à descrição global.', + 'file_invalid_mime' => 'O ficheiro ":name" é do tipo ":mime" que não é aceite para carregamento.', + 'file_too_large' => 'O ficheiro ":name" é demasiado grande.', + 'belongs_to_user' => 'O valor de :attribute é desconhecido.', + 'accepted' => 'O :attribute tem de ser aceite.', + 'bic' => 'Este BIC não é válido.', + 'at_least_one_trigger' => 'A regra tem de ter pelo menos um gatilho.', + 'at_least_one_active_trigger' => 'A regra deve ter pelo menos um gatilho ativo.', + 'at_least_one_action' => 'A regra tem de ter pelo menos uma ação.', + 'at_least_one_active_action' => 'A regra deve ter pelo menos uma ação ativa.', + 'base64' => 'Isto não é um valor base64 válido.', + 'model_id_invalid' => 'O ID inserido é inválido para este modelo.', + 'less' => ':attribute tem de ser menor que 10.000.000', + 'active_url' => 'O :attribute não é um URL válido.', + 'after' => 'A data :attribute tem de ser posterior a :date.', + 'date_after' => 'A data de início deve ser anterior à data de fim.', + 'alpha' => 'O :attribute apenas pode conter letras.', + 'alpha_dash' => 'O :attribute apenas pode conter letras, números e traços.', + 'alpha_num' => 'O :attribute apenas pode conter letras e números.', + 'array' => 'O :attribute tem de ser uma matriz.', + 'unique_for_user' => 'Já existe um registo com este :attribute.', + 'before' => 'A data :attribute tem de ser anterior a :date.', + 'unique_object_for_user' => 'Este nome já está em uso.', + 'unique_account_for_user' => 'Este nome de conta já está em uso.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => 'O :attribute tem de estar entre :min e :max.', + 'between.file' => 'O :attribute tem de estar entre :min e :max kilobytes.', + 'between.string' => 'O :attribute tem de ter entre :min e :max carateres.', + 'between.array' => 'O :attribute tem de ter entre :min e :max itens.', + 'boolean' => 'O campo :attribute tem de ser verdadeiro ou falso.', + 'confirmed' => 'A confirmação de :attribute não coincide.', + 'date' => 'A data :attribute não é válida.', + 'date_format' => 'O valor :attribute não corresponde ao formato :format.', + 'different' => 'O :attribute e :other têm de ser diferentes.', + 'digits' => 'O :attribute tem de ter :digits dígitos.', + 'digits_between' => 'O :attribute tem de ter entre :min e :max dígitos.', + 'email' => 'O :attribute tem de ser um endereço de email válido.', + 'filled' => 'O campo :attribute é obrigatório.', + 'exists' => 'O :attribute selecionado é inválido.', + 'image' => 'O :attribute tem de ser uma imagem.', + 'in' => 'O :attribute selecionado é inválido.', + 'integer' => 'O :attribute tem de ser um inteiro.', + 'ip' => 'O :attribute tem de ser um endereço IP válido.', + 'json' => 'O :attribute tem de ser uma string JSON valida.', + 'max.numeric' => 'O :attribute nao pode ser maior que :max.', + 'max.file' => 'O :attribute não pode ter mais que :max kilobytes.', + 'max.string' => 'O :attribute não pode ter mais que :max carateres.', + 'max.array' => 'O :attribute não pode ter mais que :max itens.', + 'mimes' => 'O :attribute tem de ser um ficheiro do tipo :values.', + 'min.numeric' => 'O :attribute tem de ser pelo menos :min.', + 'lte.numeric' => 'O :attribute tem de ser menor ou igual a :value.', + 'min.file' => 'O :attribute tem de ter, pelo menos, :min kilobytes.', + 'min.string' => 'O :attribute tem de ter, pelo menos, :min carateres.', + 'min.array' => 'O :attribute tem de ter, pelo menos, :min itens.', + 'not_in' => 'O :attribute selecionado é inválido.', + 'numeric' => 'O :attribute tem de ser um número.', + 'scientific_notation' => 'O atributo :attribute não pode usar a notação científica.', + 'numeric_native' => 'O montante nativo tem de ser um número.', + 'numeric_destination' => 'O montante de destino tem de ser um número.', + 'numeric_source' => 'O montante de origem tem de ser um número.', + 'regex' => 'O formato do :attribute é inválido.', + 'required' => 'O campo :attribute é obrigatório.', + 'required_if' => 'O campo :attribute é obrigatório quando :other e :value.', + 'required_unless' => 'O campo :attribute é obrigatório, a menos que :other esteja em :values.', + 'required_with' => 'O campo :attribute é obrigatório quando o :values está presente.', + 'required_with_all' => 'O campo :attribute é obrigatório quando o :values está presente.', + 'required_without' => 'O campo :attribute é obrigatório quando o :values não está presente.', + 'required_without_all' => 'O campo :attribute é obrigatório quando nenhum dos :values estão presentes.', + 'same' => 'O :attribute e o :other têm de ser iguais.', + 'size.numeric' => 'O :attribute tem de ter :size.', + 'amount_min_over_max' => 'O montante mínimo não pode ser maior que o montante máximo.', + 'size.file' => 'O :attribute tem de ter :size kilobytes.', + 'size.string' => 'O :attribute tem e ter :size carateres.', + 'size.array' => 'O :attribute tem de conter :size itens.', + 'unique' => 'O :attribute já foi usado.', + 'string' => 'O :attribute tem de ser um texto.', + 'url' => 'O formato do :attribute é inválido.', + 'timezone' => 'O :attribute tem de ser uma zona válida.', + '2fa_code' => 'O campo :attribute é inválido.', + 'dimensions' => 'O :attribute tem dimensões de imagens incorretas.', + 'distinct' => 'O campo :attribute tem um valor duplicado.', + 'file' => 'O :attribute tem de ser um ficheiro.', + 'in_array' => 'O campo :attribute não existe em :other.', + 'present' => 'O campo :attribute tem de estar presente.', + 'amount_zero' => 'O montante total não pode ser 0.', + 'current_target_amount' => 'O valor atual deve ser inferior ao valor pretendido.', + 'unique_piggy_bank_for_user' => 'O nome do mealheiro tem de ser único.', + 'unique_object_group' => 'O nome do grupo tem de ser único', + 'starts_with' => 'O valor deve começar com :values.', + 'unique_webhook' => 'Já existe um webhook com esta combinação de URL, gatilho, resposta e entrega.', + 'unique_existing_webhook' => 'Já existe outro webhook com esta combinação de URL, gatilho, resposta e entrega.', + 'same_account_type' => 'Ambas as contas devem ser do mesmo tipo', + 'same_account_currency' => 'Ambas as contas devem ter a mesma moeda configurada', - 'between.numeric' => 'O :attribute tem de estar entre :min e :max.', - 'between.file' => 'O :attribute tem de estar entre :min e :max kilobytes.', - 'between.string' => 'O :attribute tem de ter entre :min e :max carateres.', - 'between.array' => 'O :attribute tem de ter entre :min e :max itens.', - 'boolean' => 'O campo :attribute tem de ser verdadeiro ou falso.', - 'confirmed' => 'A confirmação de :attribute não coincide.', - 'date' => 'A data :attribute não é válida.', - 'date_format' => 'O valor :attribute não corresponde ao formato :format.', - 'different' => 'O :attribute e :other têm de ser diferentes.', - 'digits' => 'O :attribute tem de ter :digits dígitos.', - 'digits_between' => 'O :attribute tem de ter entre :min e :max dígitos.', - 'email' => 'O :attribute tem de ser um endereço de email válido.', - 'filled' => 'O campo :attribute é obrigatório.', - 'exists' => 'O :attribute selecionado é inválido.', - 'image' => 'O :attribute tem de ser uma imagem.', - 'in' => 'O :attribute selecionado é inválido.', - 'integer' => 'O :attribute tem de ser um inteiro.', - 'ip' => 'O :attribute tem de ser um endereço IP válido.', - 'json' => 'O :attribute tem de ser uma string JSON valida.', - 'max.numeric' => 'O :attribute nao pode ser maior que :max.', - 'max.file' => 'O :attribute não pode ter mais que :max kilobytes.', - 'max.string' => 'O :attribute não pode ter mais que :max carateres.', - 'max.array' => 'O :attribute não pode ter mais que :max itens.', - 'mimes' => 'O :attribute tem de ser um ficheiro do tipo :values.', - 'min.numeric' => 'O :attribute tem de ser pelo menos :min.', - 'lte.numeric' => 'O :attribute tem de ser menor ou igual a :value.', - 'min.file' => 'O :attribute tem de ter, pelo menos, :min kilobytes.', - 'min.string' => 'O :attribute tem de ter, pelo menos, :min carateres.', - 'min.array' => 'O :attribute tem de ter, pelo menos, :min itens.', - 'not_in' => 'O :attribute selecionado é inválido.', - 'numeric' => 'O :attribute tem de ser um número.', - 'numeric_native' => 'O montante nativo tem de ser um número.', - 'numeric_destination' => 'O montante de destino tem de ser um número.', - 'numeric_source' => 'O montante de origem tem de ser um número.', - 'regex' => 'O formato do :attribute é inválido.', - 'required' => 'O campo :attribute é obrigatório.', - 'required_if' => 'O campo :attribute é obrigatório quando :other e :value.', - 'required_unless' => 'O campo :attribute é obrigatório, a menos que :other esteja em :values.', - 'required_with' => 'O campo :attribute é obrigatório quando o :values está presente.', - 'required_with_all' => 'O campo :attribute é obrigatório quando o :values está presente.', - 'required_without' => 'O campo :attribute é obrigatório quando o :values não está presente.', - 'required_without_all' => 'O campo :attribute é obrigatório quando nenhum dos :values estão presentes.', - 'same' => 'O :attribute e o :other têm de ser iguais.', - 'size.numeric' => 'O :attribute tem de ter :size.', - 'amount_min_over_max' => 'O montante mínimo não pode ser maior que o montante máximo.', - 'size.file' => 'O :attribute tem de ter :size kilobytes.', - 'size.string' => 'O :attribute tem e ter :size carateres.', - 'size.array' => 'O :attribute tem de conter :size itens.', - 'unique' => 'O :attribute já foi usado.', - 'string' => 'O :attribute tem de ser um texto.', - 'url' => 'O formato do :attribute é inválido.', - 'timezone' => 'O :attribute tem de ser uma zona válida.', - '2fa_code' => 'O campo :attribute é inválido.', - 'dimensions' => 'O :attribute tem dimensões de imagens incorretas.', - 'distinct' => 'O campo :attribute tem um valor duplicado.', - 'file' => 'O :attribute tem de ser um ficheiro.', - 'in_array' => 'O campo :attribute não existe em :other.', - 'present' => 'O campo :attribute tem de estar presente.', - 'amount_zero' => 'O montante total não pode ser 0.', - 'current_target_amount' => 'O valor atual deve ser inferior ao valor pretendido.', - 'unique_piggy_bank_for_user' => 'O nome do mealheiro tem de ser único.', - 'unique_object_group' => 'O nome do grupo tem de ser único', - 'starts_with' => 'O valor deve começar com :values.', - 'unique_webhook' => 'Já existe um webhook com esta combinação de URL, gatilho, resposta e entrega.', - 'unique_existing_webhook' => 'Já existe outro webhook com esta combinação de URL, gatilho, resposta e entrega.', - 'same_account_type' => 'Ambas as contas devem ser do mesmo tipo', - 'same_account_currency' => 'Ambas as contas devem ter a mesma moeda configurada', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Esta não é uma palavra-passe segura. Tente de novo por favor. Para mais informações visite https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Tipo de repetição inválido para transações recorrentes.', - 'valid_recurrence_rep_moment' => 'Momento inválido para este tipo de repetição.', - 'invalid_account_info' => 'Informação de conta inválida.', - 'attributes' => [ + 'secure_password' => 'Esta não é uma palavra-passe segura. Tente de novo por favor. Para mais informações visite https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Tipo de repetição inválido para transações recorrentes.', + 'valid_recurrence_rep_moment' => 'Momento inválido para este tipo de repetição.', + 'invalid_account_info' => 'Informação de conta inválida.', + 'attributes' => [ 'email' => 'endereço de email', 'description' => 'descrição', 'amount' => 'montante', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'É preciso ter um ID de uma conta de origem válida e/ou um nome de uma conta de origem válida para continuar.', - 'withdrawal_source_bad_data' => '[a] Não foi possível encontrar uma conta de origem válida ao pesquisar pelo ID ":id" ou nome ":name".', - 'withdrawal_dest_need_data' => '[a] É preciso ter um ID de conta de destino e/ou nome de conta de destino válido para continuar.', - 'withdrawal_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar pelo ID ":id" ou nome ":name".', + 'withdrawal_source_need_data' => 'É preciso ter um ID de uma conta de origem válida e/ou um nome de uma conta de origem válida para continuar.', + 'withdrawal_source_bad_data' => '[a] Não foi possível encontrar uma conta de origem válida ao pesquisar pelo ID ":id" ou nome ":name".', + 'withdrawal_dest_need_data' => '[a] É preciso ter um ID de conta de destino e/ou nome de conta de destino válido para continuar.', + 'withdrawal_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar pelo ID ":id" ou nome ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'O IBAN da conta de destino já está em uso por uma conta de ativos ou por um risco e não pode ser utilizado como destino de levantamento.', + 'deposit_src_iban_exists' => 'O IBAN da conta de destino já está em uso por uma conta de ativos ou por um risco e não pode ser utilizado como fonte de depósito.', - 'reconciliation_source_bad_data' => 'Não foi possível encontrar uma conta de reconciliação válida ao procurar pela ID ":id" ou pelo nome ":name".', + 'reconciliation_source_bad_data' => 'Não foi possível encontrar uma conta de reconciliação válida ao procurar pela ID ":id" ou pelo nome ":name".', - 'generic_source_bad_data' => '[e] Não foi possível encontrar uma conta de origem válida ao pesquisar pelo ID ":id" ou nome ":name".', + 'generic_source_bad_data' => '[e] Não foi possível encontrar uma conta de origem válida ao pesquisar pelo ID ":id" ou nome ":name".', - 'deposit_source_need_data' => 'É preciso ter um ID de uma conta de origem válida e/ou um nome de uma conta de origem válida para continuar.', - 'deposit_source_bad_data' => '[b] Não foi possível encontrar a conta de origem válida em quando pesquisar pelo ID ":id" ou nome ":name".', - 'deposit_dest_need_data' => '[b] É preciso ter um ID de conta de destino e/ou nome de conta de destino válido para continuar.', - 'deposit_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar pelo ID ":id" ou nome ":name".', - 'deposit_dest_wrong_type' => 'A conta de destino enviada não é do tipo correto.', + 'deposit_source_need_data' => 'É preciso ter um ID de uma conta de origem válida e/ou um nome de uma conta de origem válida para continuar.', + 'deposit_source_bad_data' => '[b] Não foi possível encontrar a conta de origem válida em quando pesquisar pelo ID ":id" ou nome ":name".', + 'deposit_dest_need_data' => '[b] É preciso ter um ID de conta de destino e/ou nome de conta de destino válido para continuar.', + 'deposit_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar pelo ID ":id" ou nome ":name".', + 'deposit_dest_wrong_type' => 'A conta de destino enviada não é do tipo correto.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'É preciso ter um ID de uma conta de origem válida e/ou um nome de uma conta de origem válida para continuar.', + 'transfer_source_bad_data' => '[c] Não foi possível encontrar a conta de origem válida em quando pesquisar pelo ID ":id" ou nome ":name".', + 'transfer_dest_need_data' => '[c] É preciso ter um ID de conta de destino e/ou nome de conta de destino válido para continuar.', + 'transfer_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar por ID ":id" ou nome ":name".', + 'need_id_in_edit' => 'Cada divisão deve ter transaction_journal_id (ID válido ou 0).', - 'transfer_source_need_data' => 'É preciso ter um ID de uma conta de origem válida e/ou um nome de uma conta de origem válida para continuar.', - 'transfer_source_bad_data' => '[c] Não foi possível encontrar a conta de origem válida em quando pesquisar pelo ID ":id" ou nome ":name".', - 'transfer_dest_need_data' => '[c] É preciso ter um ID de conta de destino e/ou nome de conta de destino válido para continuar.', - 'transfer_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar por ID ":id" ou nome ":name".', - 'need_id_in_edit' => 'Cada divisão deve ter transaction_journal_id (ID válido ou 0).', + 'ob_source_need_data' => 'É preciso ter um ID de uma conta de origem válida e/ou um nome de uma conta de origem válida para continuar.', + 'lc_source_need_data' => 'É necessário obter um ID de uma conta de origem válida para continuar.', + 'ob_dest_need_data' => '[d] É preciso ter um ID de conta de destino e/ou nome de conta de destino válido para continuar.', + 'ob_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar pelo ID ":id" ou nome ":name".', + 'reconciliation_either_account' => 'Ao submeter a reconciliação, tem de submeter a conta de origem ou a conta de destino. Não ambas ou nenhuma.', - 'ob_source_need_data' => 'É preciso ter um ID de uma conta de origem válida e/ou um nome de uma conta de origem válida para continuar.', - 'lc_source_need_data' => 'É necessário obter um ID de uma conta de origem válida para continuar.', - 'ob_dest_need_data' => '[d] É preciso ter um ID de conta de destino e/ou nome de conta de destino válido para continuar.', - 'ob_dest_bad_data' => 'Não foi possível encontrar uma conta de destino válida ao pesquisar pelo ID ":id" ou nome ":name".', - 'reconciliation_either_account' => 'Ao submeter a reconciliação, tem de submeter a conta de origem ou a conta de destino. Não ambas ou nenhuma.', + 'generic_invalid_source' => 'Não pode utilizar esta conta como conta de origem.', + 'generic_invalid_destination' => 'Não pode utilizar esta conta como conta de destino.', - 'generic_invalid_source' => 'Não pode utilizar esta conta como conta de origem.', - 'generic_invalid_destination' => 'Não pode utilizar esta conta como conta de destino.', + 'generic_no_source' => 'Tem de submeter a informação de uma conta de origem ou uma ID de diário de transações.', + 'generic_no_destination' => 'Tem de submeter a informação de uma conta de destino ou uma ID de diário de transações.', - 'generic_no_source' => 'Tem de submeter a informação de uma conta de origem ou uma ID de diário de transações.', - 'generic_no_destination' => 'Tem de submeter a informação de uma conta de destino ou uma ID de diário de transações.', - - 'gte.numeric' => 'O :attribute deve ser maior ou igual a :value.', - 'gt.numeric' => 'O :attribute deve ser superior a :value.', - 'gte.file' => 'O :attribute deve ser maior ou igual a :value kilobytes.', - 'gte.string' => 'O :attribute deve ser maior ou igual a :value carateres.', - 'gte.array' => 'O :attribute deve ter :value items ou mais.', + 'gte.numeric' => 'O :attribute deve ser maior ou igual a :value.', + 'gt.numeric' => 'O :attribute deve ser superior a :value.', + 'gte.file' => 'O :attribute deve ser maior ou igual a :value kilobytes.', + 'gte.string' => 'O :attribute deve ser maior ou igual a :value carateres.', + 'gte.array' => 'O :attribute deve ter :value items ou mais.', 'amount_required_for_auto_budget' => 'O montante é obrigatório.', 'auto_budget_amount_positive' => 'O montante deve ser maior que zero.', + 'auto_budget_period_mandatory' => 'O período de orçamento automático é um campo obrigatório.', // no access to administration: diff --git a/resources/lang/ro_RO/api.php b/resources/lang/ro_RO/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/ro_RO/api.php +++ b/resources/lang/ro_RO/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/ro_RO/auth.php b/resources/lang/ro_RO/auth.php index ffe8452e29..76d70e12bd 100644 --- a/resources/lang/ro_RO/auth.php +++ b/resources/lang/ro_RO/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Aceste informații de autentificare nu corespund înregistrărilor noastre.', 'throttle' => 'Prea multe tentative de autentificare. Vă rugăm să încercaţi din nou în :seconds secunde.', diff --git a/resources/lang/ro_RO/breadcrumbs.php b/resources/lang/ro_RO/breadcrumbs.php index 59686ce5e0..e66fe38a8c 100644 --- a/resources/lang/ro_RO/breadcrumbs.php +++ b/resources/lang/ro_RO/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Acasă', - 'budgets' => 'Budgets', - 'subscriptions' => 'Subscriptions', - 'transactions' => 'Transactions', - 'title_expenses' => 'Expenses', - 'title_withdrawal' => 'Expenses', - 'title_revenue' => 'Revenue / income', - 'title_deposit' => 'Revenue / income', - 'title_transfer' => 'Transfers', - 'title_transfers' => 'Transfers', - 'edit_currency' => 'Editează moneda ":name"', - 'delete_currency' => 'Șterge moneda ":name"', - 'newPiggyBank' => 'Crează o nouă pușculiță', - 'edit_piggyBank' => 'Editează pușculița ":name"', - 'preferences' => 'Preferințe', - 'profile' => 'Profil', - 'accounts' => 'Conturi', - 'changePassword' => 'Modificare parolă', - 'change_email' => 'Modificare adresă de email', - 'bills' => 'Facturi', - 'newBill' => 'Factură nouă', - 'edit_bill' => 'Editează factura ":name"', - 'delete_bill' => 'Șterge factura ":name"', - 'reports' => 'Rapoarte', - 'search_result' => 'Rezultatele căutării ":query"', - 'withdrawal_list' => 'Cheltuieli', - 'Withdrawal_list' => 'Cheltuieli', - 'deposit_list' => 'Venituri și depozite', - 'transfer_list' => 'Transferuri', - 'transfers_list' => 'Transferuri', + 'home' => 'Acasă', + 'budgets' => 'Budgets', + 'subscriptions' => 'Subscriptions', + 'transactions' => 'Transactions', + 'title_expenses' => 'Expenses', + 'title_withdrawal' => 'Expenses', + 'title_revenue' => 'Revenue / income', + 'title_deposit' => 'Revenue / income', + 'title_transfer' => 'Transfers', + 'title_transfers' => 'Transfers', + 'edit_currency' => 'Editează moneda ":name"', + 'delete_currency' => 'Șterge moneda ":name"', + 'newPiggyBank' => 'Crează o nouă pușculiță', + 'edit_piggyBank' => 'Editează pușculița ":name"', + 'preferences' => 'Preferințe', + 'profile' => 'Profil', + 'accounts' => 'Conturi', + 'changePassword' => 'Modificare parolă', + 'change_email' => 'Modificare adresă de email', + 'bills' => 'Facturi', + 'newBill' => 'Factură nouă', + 'edit_bill' => 'Editează factura ":name"', + 'delete_bill' => 'Șterge factura ":name"', + 'reports' => 'Rapoarte', + 'search_result' => 'Rezultatele căutării ":query"', + 'withdrawal_list' => 'Cheltuieli', + 'Withdrawal_list' => 'Cheltuieli', + 'deposit_list' => 'Venituri și depozite', + 'transfer_list' => 'Transferuri', + 'transfers_list' => 'Transferuri', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Reconcilieri', 'create_withdrawal' => 'Crează o nouă retragere', 'create_deposit' => 'Crează depozit nou', diff --git a/resources/lang/ro_RO/components.php b/resources/lang/ro_RO/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/ro_RO/components.php +++ b/resources/lang/ro_RO/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ro_RO/config.php b/resources/lang/ro_RO/config.php index 6dd0f4f738..58fe78eaf3 100644 --- a/resources/lang/ro_RO/config.php +++ b/resources/lang/ro_RO/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'ro', - 'locale' => 'ro, Română, ro_RO.utf8, ro_RO.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'ro', + 'locale' => 'ro, Română, ro_RO.utf8, ro_RO.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, YYYY', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, YYYY', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'MMMM Do, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Săptămână' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Săptămână' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyy", - 'dow_1' => 'Luni', - 'dow_2' => 'Marţi', - 'dow_3' => 'Miercuri', - 'dow_4' => 'Joi', - 'dow_5' => 'Vineri', - 'dow_6' => 'Sâmbătă', - 'dow_7' => 'Duminică', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyy", + 'dow_1' => 'Luni', + 'dow_2' => 'Marţi', + 'dow_3' => 'Miercuri', + 'dow_4' => 'Joi', + 'dow_5' => 'Vineri', + 'dow_6' => 'Sâmbătă', + 'dow_7' => 'Duminică', ]; /* diff --git a/resources/lang/ro_RO/demo.php b/resources/lang/ro_RO/demo.php index 67da7ea6fa..f1979d74bd 100644 --- a/resources/lang/ro_RO/demo.php +++ b/resources/lang/ro_RO/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ro_RO/email.php b/resources/lang/ro_RO/email.php index f6a3c0c805..cedf55ff37 100644 --- a/resources/lang/ro_RO/email.php +++ b/resources/lang/ro_RO/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Un mesaj de testare de la instalarea Firefly III', 'admin_test_body' => 'Acesta este un mesaj de test de la instanța dvs. Firefly III. Acesta a fost trimis la :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'An invitation has been created', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Resetare parolă:', 'registered_doc_link' => 'Documentaţie:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'A new Firefly III version is available', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Dacă preferați, puteți de asemenea deschide o nouă problemă pe GitHub.', 'error_stacktrace_below' => 'Stacktrack-ul complet este mai jos:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III a creat o nouă tranzacție, Firefly III a creat :count tranzacții noi', 'new_journals_header' => 'Firefly III a creat o tranzacție pentru dvs. O puteți găsi în instalarea dvs. Firefly III:|Firefly III a creat :count tranzacții pentru dvs. Le puteți găsi în instalarea Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ro_RO/errors.php b/resources/lang/ro_RO/errors.php index 1db56e6dd5..5d4312315e 100644 --- a/resources/lang/ro_RO/errors.php +++ b/resources/lang/ro_RO/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack trace', 'more_info' => 'Mai multe informaţii', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Vă rugăm să colectați mai multe informații în directorul storage/logs unde veți găsi fișiere jurnal. Dacă rulați Docker, folosiți docker logs -f[container].', - 'collect_info_more' => 'Poți citi mai multe despre colectarea informațiilor despre erori în FAQ.', - 'github_help' => 'Obțineți ajutor pe GitHub', - 'github_instructions' => 'Dacă sunteți sigur că această pagină ar trebui să existe, vă rugăm să deschideți un tichet pe GitHub.', - 'use_search' => 'Folosește căutarea!', - 'include_info' => 'Include informațiile din această pagină de depanare.', - 'tell_more' => 'Spune-ne mai mult decât „spune Whoops!”', - 'include_logs' => 'Include jurnalele de erori (a se vedea mai sus).', - 'what_did_you_do' => 'Spune-ne ce făceai.', - 'offline_header' => 'You are probably offline', - 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', - 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', - + 'collect_info' => 'Vă rugăm să colectați mai multe informații în directorul storage/logs unde veți găsi fișiere jurnal. Dacă rulați Docker, folosiți docker logs -f[container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Obțineți ajutor pe GitHub', + 'github_instructions' => 'Dacă sunteți sigur că această pagină ar trebui să existe, vă rugăm să deschideți un tichet pe GitHub.', + 'use_search' => 'Folosește căutarea!', + 'include_info' => 'Include informațiile din această pagină de depanare.', + 'tell_more' => 'Spune-ne mai mult decât „spune Whoops!”', + 'include_logs' => 'Include jurnalele de erori (a se vedea mai sus).', + 'what_did_you_do' => 'Spune-ne ce făceai.', + 'offline_header' => 'You are probably offline', + 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', + 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', ]; diff --git a/resources/lang/ro_RO/firefly.php b/resources/lang/ro_RO/firefly.php index 3a3af07e9d..d24a79b357 100644 --- a/resources/lang/ro_RO/firefly.php +++ b/resources/lang/ro_RO/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Închide', - 'actions' => 'Acțiuni', - 'edit' => 'Editează', - 'delete' => 'Șterge', - 'split' => 'Împarte', - 'single_split' => 'Împarte', - 'clone' => 'Clonă', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => 'Ultimele 7 zile', - 'last_thirty_days' => 'Ultimele 30 de zile', - 'last_180_days' => 'Ultimele 180 de zile', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'YTD', - 'welcome_back' => 'Ce se redă?', - 'everything' => 'Tot', - 'today' => 'Azi', - 'customRange' => 'Intervalul personalizat', - 'date_range' => 'Interval de date', - 'apply' => 'Aplică', - 'select_date' => 'Selectează data..', - 'cancel' => 'Anulare', - 'from' => 'De la', - 'to' => 'Către', - 'structure' => 'Structură', - 'help_translating' => 'Acest text de ajutor nu este încă disponibil în limba dvs.', - 'showEverything' => 'Afișați totul', - 'never' => 'Niciodată', - 'no_results_for_empty_search' => 'Căutarea dvs. a fost goală, deci nu a fost găsit nimic.', - 'removed_amount' => ':amount eliminată', - 'added_amount' => ':amount adaugată', - 'asset_account_role_help' => 'Opțiunile suplimentare rezultate din alegerea dvs. pot fi setate mai târziu.', - 'Opening balance' => 'Soldul de deschidere', - 'create_new_stuff' => 'Creați lucruri noi', - 'new_withdrawal' => 'Tranzacție nouă', - 'create_new_transaction' => 'Creați o tranzacție nouă', - 'sidebar_frontpage_create' => 'Crează', - 'new_transaction' => 'Tranzacţie nouă', - 'no_rules_for_bill' => 'Acestă factură nu are asociate reguli.', - 'go_to_asset_accounts' => 'Vizualizați conturile de active', - 'go_to_budgets' => 'Mergi la bugete', - 'go_to_withdrawals' => 'Mergi la retragerile tale', - 'clones_journal_x' => 'Această tranzacție este o clonă a ":description" (#:id)', - 'go_to_categories' => 'Mergi la categorii', - 'go_to_bills' => 'Mergi la facturi', - 'go_to_expense_accounts' => 'Vezi cheltuielile contabile', - 'go_to_revenue_accounts' => 'Vezi contul de venituris', - 'go_to_piggies' => 'Mergi la pușculiță', - 'new_deposit' => 'Depunere nouă', - 'new_transfer' => 'Transfer nou', - 'new_transfers' => 'Transferuri noi', - 'new_asset_account' => 'Cont nou de activ', - 'new_expense_account' => 'Cont nou de cheltuieli', - 'new_revenue_account' => 'Cont nou pentru venituri', - 'new_liabilities_account' => 'Provizion nou', - 'new_budget' => 'Buget nou', - 'new_bill' => 'Factură nouă', - 'block_account_logout' => 'Ai fost deconectat. Conturile blocate nu pot utiliza acest site. Ați înregistrat o adresă de e-mail validă?', - 'flash_success' => 'Succes!', - 'flash_info' => 'Mesaj', - 'flash_warning' => 'Avertizare!', - 'flash_error' => 'Eroare!', - 'flash_danger' => 'Pericol!', - 'flash_info_multiple' => 'Există un mesaj | Există :count mesaje', - 'flash_error_multiple' => 'Există o singură eroare | Există :count erori', - 'net_worth' => 'Valoarea netă', - 'help_for_this_page' => 'Ajutor pentru această pagină', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => 'Bună ziua!', - 'two_factor_enter_code' => 'Pentru a continua, introduceți codul dvs. de autentificare cu doi factori. Aplicația dvs. o poate genera pentru dvs.', - 'two_factor_code_here' => 'Introdu codul aici', - 'two_factor_title' => 'Autentificare cu doi factori', - 'authenticate' => 'Autentificare', - 'two_factor_forgot_title' => 'S-a pierdut autentificarea cu doi factori', - 'two_factor_forgot' => 'Am uitat autentificarea cu doi factori.', - 'two_factor_lost_header' => 'Ai uitat autentificarea cu doi factori?', - 'two_factor_lost_intro' => 'Dacă ați pierdut și codurile de rezervă, aveți ghinion. Nu este un lucru pe care îl puteți remedia din interfața web. Aveți două opțiuni.', - 'two_factor_lost_fix_self' => 'Dacă rulați propria dvs. instanță a Firefly III, citiți această intrare în FAQ pentru instrucțiuni.', - 'two_factor_lost_fix_owner' => 'În caz contrar, trimiteți prin e-mail proprietarului site-ului : proprietarul site-ului și solicitați-i să reseteze autentificarea cu doi factori.', - 'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.', - 'pref_two_factor_new_backup_codes' => 'Obțineți noi coduri de rezervă', - 'pref_two_factor_backup_code_count' => 'Aveți :count cod valid pentru copia de rezervă. Aveți :count coduri de rezervă valide.', - '2fa_i_have_them' => 'Le-am depozitat!', - 'warning_much_data' => ':days zilele de date pot dura o perioadă până încărcare.', - 'registered' => 'Te-ai inregistrat cu succes!', - 'Default asset account' => 'Cont de active implicit', - 'no_budget_pointer' => 'Se pare că nu aveți încă bugete. Ar trebui să creați câteva pe pagina bugete. Bugetele vă pot ajuta să țineți evidența cheltuielilor.', - 'no_bill_pointer' => 'Se pare că nu aveți încă facturi. Ar trebui să creați unele pe pagina facturi. Facturile vă pot ajuta să țineți evidența cheltuielilor.', - 'Savings account' => 'Cont de economii', - 'Credit card' => 'Card de credit', - 'source_accounts' => 'Contul sursă | Conturi sursă', - 'destination_accounts' => 'Contul destinației | Conturile de destinație', - 'user_id_is' => 'ID-ul dvs. de utilizator este :user', - 'field_supports_markdown' => 'Acest câmp acceptă Markdown HTML.', - 'need_more_help' => 'Dacă aveți nevoie de ajutor suplimentar, deschideți un tichet pe Github.', - 'reenable_intro_text' => 'De asemenea, puteți să activați din nou ghidul de introducere .', - 'intro_boxes_after_refresh' => 'Cutiile de introducere vor apărea din nou atunci când actualizați pagina.', - 'show_all_no_filter' => 'Afișați toate tranzacțiile fără a le grupa după dată.', - 'expenses_by_category' => 'Cheltuieli pe categorii', - 'expenses_by_budget' => 'Cheltuieli pe buget', - 'income_by_category' => 'Venituri pe categorii', - 'expenses_by_asset_account' => 'Cheltuieli pe cont de activ', - 'expenses_by_expense_account' => 'Cheltuieli pe cont de cheltuieli', - 'cannot_redirect_to_account' => 'Nu vă putem redirecționa către pagina corectă. Scuze.', - 'sum_of_expenses' => 'Suma cheltuielilor', - 'sum_of_income' => 'Suma veniturilor', - 'liabilities' => 'Provizioane', - 'spent_in_specific_budget' => 'Cheltuit în bugetul ":budget"', - 'spent_in_specific_double' => 'Cheltuit în contul ":account"', - 'earned_in_specific_double' => 'Câștigat în contul ":account"', - 'source_account' => 'Contul sursă', - 'source_account_reconciliation' => 'Nu puteți edita contul sursă al unei tranzacții de reconciliere.', - 'destination_account' => 'Contul de destinație', - 'destination_account_reconciliation' => 'Nu puteți edita contul de destinație al unei tranzacții de reconciliere.', - 'sum_of_expenses_in_budget' => 'Cheltuielile totale în bugetul ":budget"', - 'left_in_budget_limit' => 'Rest de chetuit ăn funcție de buget', - 'current_period' => 'Perioada curentă', - 'show_the_current_period_and_overview' => 'Afișați perioada curentă și prezentarea generală', - 'pref_languages_locale' => 'Pentru ca o altă limbă decât limba engleză să funcționeze corect, sistemul dvs. de operare trebuie să fie dotat cu informațiile de localizare corecte. Dacă acestea nu sunt prezente, datele valutare, datele și sumele pot fi formatate greșit.', - 'budget_in_period' => 'Toate tranzacțiile pentru bugetul ":name" între :start și :end în :currency', - 'chart_budget_in_period' => 'Graficul cu toate tranzacțiile pentru bugetul ":name" între :start și :end în :currency', - 'chart_budget_in_period_only_currency' => 'Suma bugetată a fost în :currency, astfel încât acest grafic va afișa numai tranzacții în :currency.', - 'chart_account_in_period' => 'Graficul cu toate tranzacțiile pentru contul ":name" (:balance) între :start și :end', - 'chart_category_in_period' => 'Graficul cu toate tranzacțiile pentru categoria ":name" între :start și :end', - 'chart_category_all' => 'Graficul cu toate tranzacțiile pentru categoria ":name"', - 'clone_withdrawal' => 'Clonați această retragere', - 'clone_deposit' => 'Clonați această depozit', - 'clone_transfer' => 'Clonați această transfer', - 'multi_select_no_selection' => 'Nimic selectat', - 'multi_select_select_all' => 'Selectează tot', - 'multi_select_n_selected' => 'selectat', - 'multi_select_all_selected' => 'Toate selectate', - 'multi_select_filter_placeholder' => 'Gasește..', - 'intro_next_label' => 'Următor', - 'intro_prev_label' => 'Anterior', - 'intro_skip_label' => 'Treci peste', - 'intro_done_label' => 'Finalizat', - 'between_dates_breadcrumb' => 'între :start și :end', - 'all_journals_without_budget' => 'Toate tranzacțiile fără un buget', - 'journals_without_budget' => 'Tranzacții fără un buget', - 'all_journals_without_category' => 'Toate tranzacțiile fără o categorie', - 'journals_without_category' => 'Tranzacții fără o categorie', - 'all_journals_for_account' => 'Toate tranzacțiile pentru contul :name', - 'chart_all_journals_for_account' => 'Graficul tuturor tranzacțiilor pentru contul :name', - 'journals_in_period_for_account' => 'Toate tranzacțiile pentru contul :name între :start și :end', - 'journals_in_period_for_account_js' => 'Toate tranzacțiile pentru contul {title} între {start} și {end}', - 'transferred' => 'Transferat', - 'all_withdrawal' => 'Toate cheltuielile', - 'all_transactions' => 'Toate tranzacțiile', - 'title_withdrawal_between' => 'Toate cheltuielile între :start și :end', - 'all_deposit' => 'Toate veniturile', - 'title_deposit_between' => 'Toate veniturile între :start și :end', - 'all_transfers' => 'Toate transferurile', - 'title_transfers_between' => 'Toate transferurile între :start și :end', - 'all_transfer' => 'Toate transferurile', - 'all_journals_for_tag' => 'Toate tranzacțiile pentru eticheta ":tag"', - 'title_transfer_between' => 'Toate transferurile între :start și :end', - 'all_journals_for_category' => 'Toate tranzacțiile pentru categoria :name', - 'all_journals_for_budget' => 'Toate tranzacțiile pentru bugetul :name', - 'chart_all_journals_for_budget' => 'Graficul cu toate tranzacțiile pentru bugetul :name', - 'journals_in_period_for_category' => 'Toate tranzacțiile pentru categoria :name între :start și :end', - 'journals_in_period_for_tag' => 'Toate tranzacțiile pentru eticheta :tag între :start și :end', - 'not_available_demo_user' => 'Funcția pe care încercați să o accesați nu este disponibilă pentru demo.', - 'exchange_rate_instructions' => 'Contul de active "@name" acceptă numai tranzacțiile în @native_currency. Dacă doriți să utilizați în schimb @foreign_currency asigurați-vă că suma din @native_currency este cunoscută, de asemenea:', - 'transfer_exchange_rate_instructions' => 'Sursa contului de active "@source_name" acceptă numai tranzacțiile în @source_currency. Destinația contului de active "@dest_name" acceptă numai tranzacțiile în @dest_currency. Trebuie să furnizați corect suma transferată în ambele valute.', - 'transaction_data' => 'Datele tranzacției', - 'invalid_server_configuration' => 'Configurația serverului este nevalidă', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Schimbare rapida', - 'sign_in_to_start' => 'Logați-vă pentru a începe sesiunea', - 'sign_in' => 'Logare', - 'register_new_account' => 'Înregistrați un nou cont', - 'forgot_my_password' => 'Am uitat parola', - 'problems_with_input' => 'Sunt probleme cu input-ul dvs.', - 'reset_password' => 'Reseteaza parola', - 'button_reset_password' => 'Reseteaza parola', - 'reset_button' => 'Reseteaza', - 'want_to_login' => 'Vreau sa mă loghez', - 'login_page_title' => 'Logare', - 'register_page_title' => 'Înregistrare', - 'forgot_pw_page_title' => 'Am uitat parola', - 'reset_pw_page_title' => 'Reseteaza parola', - 'cannot_reset_demo_user' => 'Nu puteți reseta parola utilizatorului demo.', - 'no_att_demo_user' => 'Utilizatorul demo nu poate încărca atașamente.', - 'button_register' => 'Înregistrare', - 'authorization' => 'Autorizare', - 'active_bills_only' => 'numai facturi active', - 'active_bills_only_total' => 'toate facturile active', - 'active_exp_bills_only' => 'numai facturi active și așteptate', - 'active_exp_bills_only_total' => 'numai facturi active și așteptate', - 'per_period_sum_1D' => 'Costurile zilnice preconizate', - 'per_period_sum_1W' => 'Costurile săptămânale preconizate', - 'per_period_sum_1M' => 'Costuri lunare estimate', - 'per_period_sum_3M' => 'Costuri trimestriale preconizate', - 'per_period_sum_6M' => 'Costuri semestriale preconizate', - 'per_period_sum_1Y' => 'Costuri anuale preconizate', - 'average_per_bill' => 'media pe factură', - 'expected_total' => 'total așteptat', - 'reconciliation_account_name' => ':name reconciliere (:currency)', - 'saved' => 'Salvat', - 'advanced_options' => 'Opțiuni avansate', - 'advanced_options_explain' => 'Unele pagini din Firefly III au opțiuni avansate ascunse în spatele acestui buton. Această pagină nu are nimic extravagant aici, dar verifică celelalte!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Închide', + 'actions' => 'Acțiuni', + 'edit' => 'Editează', + 'delete' => 'Șterge', + 'split' => 'Împarte', + 'single_split' => 'Împarte', + 'clone' => 'Clonă', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Confirm action', + 'last_seven_days' => 'Ultimele 7 zile', + 'last_thirty_days' => 'Ultimele 30 de zile', + 'last_180_days' => 'Ultimele 180 de zile', + 'month_to_date' => 'Month to date', + 'year_to_date' => 'Year to date', + 'YTD' => 'YTD', + 'welcome_back' => 'Ce se redă?', + 'everything' => 'Tot', + 'today' => 'Azi', + 'customRange' => 'Intervalul personalizat', + 'date_range' => 'Interval de date', + 'apply' => 'Aplică', + 'select_date' => 'Selectează data..', + 'cancel' => 'Anulare', + 'from' => 'De la', + 'to' => 'Către', + 'structure' => 'Structură', + 'help_translating' => 'Acest text de ajutor nu este încă disponibil în limba dvs.', + 'showEverything' => 'Afișați totul', + 'never' => 'Niciodată', + 'no_results_for_empty_search' => 'Căutarea dvs. a fost goală, deci nu a fost găsit nimic.', + 'removed_amount' => ':amount eliminată', + 'added_amount' => ':amount adaugată', + 'asset_account_role_help' => 'Opțiunile suplimentare rezultate din alegerea dvs. pot fi setate mai târziu.', + 'Opening balance' => 'Soldul de deschidere', + 'create_new_stuff' => 'Creați lucruri noi', + 'new_withdrawal' => 'Tranzacție nouă', + 'create_new_transaction' => 'Creați o tranzacție nouă', + 'sidebar_frontpage_create' => 'Crează', + 'new_transaction' => 'Tranzacţie nouă', + 'no_rules_for_bill' => 'Acestă factură nu are asociate reguli.', + 'go_to_asset_accounts' => 'Vizualizați conturile de active', + 'go_to_budgets' => 'Mergi la bugete', + 'go_to_withdrawals' => 'Mergi la retragerile tale', + 'clones_journal_x' => 'Această tranzacție este o clonă a ":description" (#:id)', + 'go_to_categories' => 'Mergi la categorii', + 'go_to_bills' => 'Mergi la facturi', + 'go_to_expense_accounts' => 'Vezi cheltuielile contabile', + 'go_to_revenue_accounts' => 'Vezi contul de venituris', + 'go_to_piggies' => 'Mergi la pușculiță', + 'new_deposit' => 'Depunere nouă', + 'new_transfer' => 'Transfer nou', + 'new_transfers' => 'Transferuri noi', + 'new_asset_account' => 'Cont nou de activ', + 'new_expense_account' => 'Cont nou de cheltuieli', + 'new_revenue_account' => 'Cont nou pentru venituri', + 'new_liabilities_account' => 'Provizion nou', + 'new_budget' => 'Buget nou', + 'new_bill' => 'Factură nouă', + 'block_account_logout' => 'Ai fost deconectat. Conturile blocate nu pot utiliza acest site. Ați înregistrat o adresă de e-mail validă?', + 'flash_success' => 'Succes!', + 'flash_info' => 'Mesaj', + 'flash_warning' => 'Avertizare!', + 'flash_error' => 'Eroare!', + 'flash_danger' => 'Pericol!', + 'flash_info_multiple' => 'Există un mesaj | Există :count mesaje', + 'flash_error_multiple' => 'Există o singură eroare | Există :count erori', + 'net_worth' => 'Valoarea netă', + 'help_for_this_page' => 'Ajutor pentru această pagină', + 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', + 'two_factor_welcome' => 'Bună ziua!', + 'two_factor_enter_code' => 'Pentru a continua, introduceți codul dvs. de autentificare cu doi factori. Aplicația dvs. o poate genera pentru dvs.', + 'two_factor_code_here' => 'Introdu codul aici', + 'two_factor_title' => 'Autentificare cu doi factori', + 'authenticate' => 'Autentificare', + 'two_factor_forgot_title' => 'S-a pierdut autentificarea cu doi factori', + 'two_factor_forgot' => 'Am uitat autentificarea cu doi factori.', + 'two_factor_lost_header' => 'Ai uitat autentificarea cu doi factori?', + 'two_factor_lost_intro' => 'Dacă ați pierdut și codurile de rezervă, aveți ghinion. Nu este un lucru pe care îl puteți remedia din interfața web. Aveți două opțiuni.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read : proprietarul site-ului și solicitați-i să reseteze autentificarea cu doi factori.', + 'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.', + 'pref_two_factor_new_backup_codes' => 'Obțineți noi coduri de rezervă', + 'pref_two_factor_backup_code_count' => 'Aveți :count cod valid pentru copia de rezervă. Aveți :count coduri de rezervă valide.', + '2fa_i_have_them' => 'Le-am depozitat!', + 'warning_much_data' => ':days zilele de date pot dura o perioadă până încărcare.', + 'registered' => 'Te-ai inregistrat cu succes!', + 'Default asset account' => 'Cont de active implicit', + 'no_budget_pointer' => 'Se pare că nu aveți încă bugete. Ar trebui să creați câteva pe pagina bugete. Bugetele vă pot ajuta să țineți evidența cheltuielilor.', + 'no_bill_pointer' => 'Se pare că nu aveți încă facturi. Ar trebui să creați unele pe pagina facturi. Facturile vă pot ajuta să țineți evidența cheltuielilor.', + 'Savings account' => 'Cont de economii', + 'Credit card' => 'Card de credit', + 'source_accounts' => 'Contul sursă | Conturi sursă', + 'destination_accounts' => 'Contul destinației | Conturile de destinație', + 'user_id_is' => 'ID-ul dvs. de utilizator este :user', + 'field_supports_markdown' => 'Acest câmp acceptă Markdown HTML.', + 'need_more_help' => 'Dacă aveți nevoie de ajutor suplimentar, deschideți un tichet pe Github.', + 'reenable_intro_text' => 'De asemenea, puteți să activați din nou ghidul de introducere .', + 'intro_boxes_after_refresh' => 'Cutiile de introducere vor apărea din nou atunci când actualizați pagina.', + 'show_all_no_filter' => 'Afișați toate tranzacțiile fără a le grupa după dată.', + 'expenses_by_category' => 'Cheltuieli pe categorii', + 'expenses_by_budget' => 'Cheltuieli pe buget', + 'income_by_category' => 'Venituri pe categorii', + 'expenses_by_asset_account' => 'Cheltuieli pe cont de activ', + 'expenses_by_expense_account' => 'Cheltuieli pe cont de cheltuieli', + 'cannot_redirect_to_account' => 'Nu vă putem redirecționa către pagina corectă. Scuze.', + 'sum_of_expenses' => 'Suma cheltuielilor', + 'sum_of_income' => 'Suma veniturilor', + 'liabilities' => 'Provizioane', + 'spent_in_specific_budget' => 'Cheltuit în bugetul ":budget"', + 'spent_in_specific_double' => 'Cheltuit în contul ":account"', + 'earned_in_specific_double' => 'Câștigat în contul ":account"', + 'source_account' => 'Contul sursă', + 'source_account_reconciliation' => 'Nu puteți edita contul sursă al unei tranzacții de reconciliere.', + 'destination_account' => 'Contul de destinație', + 'destination_account_reconciliation' => 'Nu puteți edita contul de destinație al unei tranzacții de reconciliere.', + 'sum_of_expenses_in_budget' => 'Cheltuielile totale în bugetul ":budget"', + 'left_in_budget_limit' => 'Rest de chetuit ăn funcție de buget', + 'current_period' => 'Perioada curentă', + 'show_the_current_period_and_overview' => 'Afișați perioada curentă și prezentarea generală', + 'pref_languages_locale' => 'Pentru ca o altă limbă decât limba engleză să funcționeze corect, sistemul dvs. de operare trebuie să fie dotat cu informațiile de localizare corecte. Dacă acestea nu sunt prezente, datele valutare, datele și sumele pot fi formatate greșit.', + 'budget_in_period' => 'Toate tranzacțiile pentru bugetul ":name" între :start și :end în :currency', + 'chart_budget_in_period' => 'Graficul cu toate tranzacțiile pentru bugetul ":name" între :start și :end în :currency', + 'chart_budget_in_period_only_currency' => 'Suma bugetată a fost în :currency, astfel încât acest grafic va afișa numai tranzacții în :currency.', + 'chart_account_in_period' => 'Graficul cu toate tranzacțiile pentru contul ":name" (:balance) între :start și :end', + 'chart_category_in_period' => 'Graficul cu toate tranzacțiile pentru categoria ":name" între :start și :end', + 'chart_category_all' => 'Graficul cu toate tranzacțiile pentru categoria ":name"', + 'clone_withdrawal' => 'Clonați această retragere', + 'clone_deposit' => 'Clonați această depozit', + 'clone_transfer' => 'Clonați această transfer', + 'multi_select_no_selection' => 'Nimic selectat', + 'multi_select_select_all' => 'Selectează tot', + 'multi_select_n_selected' => 'selectat', + 'multi_select_all_selected' => 'Toate selectate', + 'multi_select_filter_placeholder' => 'Gasește..', + 'intro_next_label' => 'Următor', + 'intro_prev_label' => 'Anterior', + 'intro_skip_label' => 'Treci peste', + 'intro_done_label' => 'Finalizat', + 'between_dates_breadcrumb' => 'între :start și :end', + 'all_journals_without_budget' => 'Toate tranzacțiile fără un buget', + 'journals_without_budget' => 'Tranzacții fără un buget', + 'all_journals_without_category' => 'Toate tranzacțiile fără o categorie', + 'journals_without_category' => 'Tranzacții fără o categorie', + 'all_journals_for_account' => 'Toate tranzacțiile pentru contul :name', + 'chart_all_journals_for_account' => 'Graficul tuturor tranzacțiilor pentru contul :name', + 'journals_in_period_for_account' => 'Toate tranzacțiile pentru contul :name între :start și :end', + 'journals_in_period_for_account_js' => 'Toate tranzacțiile pentru contul {title} între {start} și {end}', + 'transferred' => 'Transferat', + 'all_withdrawal' => 'Toate cheltuielile', + 'all_transactions' => 'Toate tranzacțiile', + 'title_withdrawal_between' => 'Toate cheltuielile între :start și :end', + 'all_deposit' => 'Toate veniturile', + 'title_deposit_between' => 'Toate veniturile între :start și :end', + 'all_transfers' => 'Toate transferurile', + 'title_transfers_between' => 'Toate transferurile între :start și :end', + 'all_transfer' => 'Toate transferurile', + 'all_journals_for_tag' => 'Toate tranzacțiile pentru eticheta ":tag"', + 'title_transfer_between' => 'Toate transferurile între :start și :end', + 'all_journals_for_category' => 'Toate tranzacțiile pentru categoria :name', + 'all_journals_for_budget' => 'Toate tranzacțiile pentru bugetul :name', + 'chart_all_journals_for_budget' => 'Graficul cu toate tranzacțiile pentru bugetul :name', + 'journals_in_period_for_category' => 'Toate tranzacțiile pentru categoria :name între :start și :end', + 'journals_in_period_for_tag' => 'Toate tranzacțiile pentru eticheta :tag între :start și :end', + 'not_available_demo_user' => 'Funcția pe care încercați să o accesați nu este disponibilă pentru demo.', + 'exchange_rate_instructions' => 'Contul de active "@name" acceptă numai tranzacțiile în @native_currency. Dacă doriți să utilizați în schimb @foreign_currency asigurați-vă că suma din @native_currency este cunoscută, de asemenea:', + 'transfer_exchange_rate_instructions' => 'Sursa contului de active "@source_name" acceptă numai tranzacțiile în @source_currency. Destinația contului de active "@dest_name" acceptă numai tranzacțiile în @dest_currency. Trebuie să furnizați corect suma transferată în ambele valute.', + 'transaction_data' => 'Datele tranzacției', + 'invalid_server_configuration' => 'Configurația serverului este nevalidă', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Schimbare rapida', + 'sign_in_to_start' => 'Logați-vă pentru a începe sesiunea', + 'sign_in' => 'Logare', + 'register_new_account' => 'Înregistrați un nou cont', + 'forgot_my_password' => 'Am uitat parola', + 'problems_with_input' => 'Sunt probleme cu input-ul dvs.', + 'reset_password' => 'Reseteaza parola', + 'button_reset_password' => 'Reseteaza parola', + 'reset_button' => 'Reseteaza', + 'want_to_login' => 'Vreau sa mă loghez', + 'login_page_title' => 'Logare', + 'register_page_title' => 'Înregistrare', + 'forgot_pw_page_title' => 'Am uitat parola', + 'reset_pw_page_title' => 'Reseteaza parola', + 'cannot_reset_demo_user' => 'Nu puteți reseta parola utilizatorului demo.', + 'no_att_demo_user' => 'Utilizatorul demo nu poate încărca atașamente.', + 'button_register' => 'Înregistrare', + 'authorization' => 'Autorizare', + 'active_bills_only' => 'numai facturi active', + 'active_bills_only_total' => 'toate facturile active', + 'active_exp_bills_only' => 'numai facturi active și așteptate', + 'active_exp_bills_only_total' => 'numai facturi active și așteptate', + 'per_period_sum_1D' => 'Costurile zilnice preconizate', + 'per_period_sum_1W' => 'Costurile săptămânale preconizate', + 'per_period_sum_1M' => 'Costuri lunare estimate', + 'per_period_sum_3M' => 'Costuri trimestriale preconizate', + 'per_period_sum_6M' => 'Costuri semestriale preconizate', + 'per_period_sum_1Y' => 'Costuri anuale preconizate', + 'average_per_bill' => 'media pe factură', + 'expected_total' => 'total așteptat', + 'reconciliation_account_name' => ':name reconciliere (:currency)', + 'saved' => 'Salvat', + 'advanced_options' => 'Opțiuni avansate', + 'advanced_options_explain' => 'Unele pagini din Firefly III au opțiuni avansate ascunse în spatele acestui buton. Această pagină nu are nimic extravagant aici, dar verifică celelalte!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhook-uri', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhook-uri', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', + 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', + 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', + 'webhook_response_TRANSACTIONS' => 'Transaction details', + 'webhook_response_ACCOUNTS' => 'Account details', + 'webhook_response_none_NONE' => 'No details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspect', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => 'View message', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logs', + 'response' => 'Response', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'v: Solicitare de autorizare', - 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', - 'scopes_will_be_able' => 'Această aplicație va fi capabilă să to:', - 'button_authorize' => 'Autorizează', - 'none_in_select_list' => '(nici unul)', - 'no_piggy_bank' => '(nicio pușculiță)', - 'name_in_currency' => ':name în :currency', - 'paid_in_currency' => 'Plătit în :currency', - 'unpaid_in_currency' => 'Neplătit în :currency', - 'is_alpha_warning' => 'Executaţi o versiune ALPHA. Fiţi atenţi la erori şi probleme.', - 'is_beta_warning' => 'Executaţi o versiune BETA. Fiţi atenţi la erori şi probleme.', - 'all_destination_accounts' => 'Conturi de destinație', - 'all_source_accounts' => 'Conturi sursă', - 'back_to_index' => 'Înapoi la index', - 'cant_logout_guard' => 'Firefly III nu vă poate deconecta.', - 'internal_reference' => 'Referință internă', + 'authorization_request' => 'v: Solicitare de autorizare', + 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', + 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', + 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', + 'scopes_will_be_able' => 'Această aplicație va fi capabilă să to:', + 'button_authorize' => 'Autorizează', + 'none_in_select_list' => '(nici unul)', + 'no_piggy_bank' => '(nicio pușculiță)', + 'name_in_currency' => ':name în :currency', + 'paid_in_currency' => 'Plătit în :currency', + 'unpaid_in_currency' => 'Neplătit în :currency', + 'is_alpha_warning' => 'Executaţi o versiune ALPHA. Fiţi atenţi la erori şi probleme.', + 'is_beta_warning' => 'Executaţi o versiune BETA. Fiţi atenţi la erori şi probleme.', + 'all_destination_accounts' => 'Conturi de destinație', + 'all_source_accounts' => 'Conturi sursă', + 'back_to_index' => 'Înapoi la index', + 'cant_logout_guard' => 'Firefly III nu vă poate deconecta.', + 'internal_reference' => 'Referință internă', // check for updates: - 'update_check_title' => 'Verifică actualizări', - 'admin_update_check_title' => 'Verificați automat actualizarea', - 'admin_update_check_explain' => 'Firefly III poate căuta actualizări automat. Când activați această setare, acesta va contacta serverul de actualizare Firefly III pentru a vedea dacă este disponibilă o nouă versiune de Firefly III. Când este, veți primi o notificare. Puteți testa această notificare folosind butonul din dreapta. Vă rugăm să indicați mai jos dacă doriți ca Firefly III să verifice actualizările.', - 'check_for_updates_permission' => 'Firefly III poate verifica actualizările, dar are nevoie de permisiunea dvs. pentru a face acest lucru. Accesați link-ul pentru a indica dacă doriți ca această funcție să fie activată.', - 'updates_ask_me_later' => 'Intreabă-mă mai târziu', - 'updates_do_not_check' => 'Nu verificați actualizările', - 'updates_enable_check' => 'Activați verificarea pentru actualizări', - 'admin_update_check_now_title' => 'Verificați actualizările acum', - 'admin_update_check_now_explain' => 'Dacă apăsați butonul, Firefly III va vedea dacă versiunea curentă este cea mai recentă.', - 'check_for_updates_button' => 'Verifică acum!', - 'update_new_version_alert' => 'O nouă versiune de Firefly III este disponibilă. Dvs. aveți :your_version, ultima versiune este :new_version lansată în data de :date.', - 'update_version_beta' => 'Această versiune este o versiune BETA. Este posibil să aveți probleme.', - 'update_version_alpha' => 'Această versiune este o versiune ALFA. Este posibil să aveți probleme.', - 'update_current_version_alert' => 'Aveți versiunea :version, care este ultima disponibilă.', - 'update_newer_version_alert' => 'Aveți versiunea :your_version, care este mai nouă decât cea mai recentă versiune, :new_version.', - 'update_check_error' => 'A apărut o eroare la verificarea actualizărilor: :error', - 'unknown_error' => 'Eroare necunoscută. Ne pare rău pentru asta.', - 'just_new_release' => 'O nouă versiune este disponibilă! Versiunea :version a fost lansată :date. Această versiune este foarte proaspătă. Așteptați câteva zile pentru ca noua versiune să se stabilizeze.', - 'disabled_but_check' => 'Ai dezactivat verificarea actualizării. Așa că nu uita să verifici singur actualizările din când în când. Mulțumim!', - 'admin_update_channel_title' => 'Actualizare canal', - 'admin_update_channel_explain' => 'Firefly III are trei "canale" de actualizare, care determină cât de avansați sunteți în termeni de caracteristici, îmbunătățiri și bug-uri. Folosiți canalul „beta” dacă sunteți aventuroși și „alfa” atunci când vă place să trăiți periculos viața.', - 'update_channel_stable' => 'Stabil. Totul ar trebui să funcționeze așa cum este de așteptat.', - 'update_channel_beta' => 'Beta. Caracteristici noi, dar lucrurile pot fi stricate.', - 'update_channel_alpha' => 'Alfa. Aruncăm chestii și folosiți orice.', + 'update_check_title' => 'Verifică actualizări', + 'admin_update_check_title' => 'Verificați automat actualizarea', + 'admin_update_check_explain' => 'Firefly III poate căuta actualizări automat. Când activați această setare, acesta va contacta serverul de actualizare Firefly III pentru a vedea dacă este disponibilă o nouă versiune de Firefly III. Când este, veți primi o notificare. Puteți testa această notificare folosind butonul din dreapta. Vă rugăm să indicați mai jos dacă doriți ca Firefly III să verifice actualizările.', + 'check_for_updates_permission' => 'Firefly III poate verifica actualizările, dar are nevoie de permisiunea dvs. pentru a face acest lucru. Accesați link-ul pentru a indica dacă doriți ca această funcție să fie activată.', + 'updates_ask_me_later' => 'Intreabă-mă mai târziu', + 'updates_do_not_check' => 'Nu verificați actualizările', + 'updates_enable_check' => 'Activați verificarea pentru actualizări', + 'admin_update_check_now_title' => 'Verificați actualizările acum', + 'admin_update_check_now_explain' => 'Dacă apăsați butonul, Firefly III va vedea dacă versiunea curentă este cea mai recentă.', + 'check_for_updates_button' => 'Verifică acum!', + 'update_new_version_alert' => 'O nouă versiune de Firefly III este disponibilă. Dvs. aveți :your_version, ultima versiune este :new_version lansată în data de :date.', + 'update_version_beta' => 'Această versiune este o versiune BETA. Este posibil să aveți probleme.', + 'update_version_alpha' => 'Această versiune este o versiune ALFA. Este posibil să aveți probleme.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Aveți versiunea :version, care este ultima disponibilă.', + 'update_newer_version_alert' => 'Aveți versiunea :your_version, care este mai nouă decât cea mai recentă versiune, :new_version.', + 'update_check_error' => 'A apărut o eroare la verificarea actualizărilor: :error', + 'unknown_error' => 'Eroare necunoscută. Ne pare rău pentru asta.', + 'disabled_but_check' => 'Ai dezactivat verificarea actualizării. Așa că nu uita să verifici singur actualizările din când în când. Mulțumim!', + 'admin_update_channel_title' => 'Actualizare canal', + 'admin_update_channel_explain' => 'Firefly III are trei "canale" de actualizare, care determină cât de avansați sunteți în termeni de caracteristici, îmbunătățiri și bug-uri. Folosiți canalul „beta” dacă sunteți aventuroși și „alfa” atunci când vă place să trăiți periculos viața.', + 'update_channel_stable' => 'Stabil. Totul ar trebui să funcționeze așa cum este de așteptat.', + 'update_channel_beta' => 'Beta. Caracteristici noi, dar lucrurile pot fi stricate.', + 'update_channel_alpha' => 'Alfa. Aruncăm chestii și folosiți orice.', // search - 'search' => 'Caută', - 'search_query' => 'Interogare', - 'search_found_transactions' => 'Firefly III a găsit :count tranzacție în :time secunde.| Firefly III a găsit :count tranzacții în :time secunde.', - 'search_found_more_transactions' => 'Firefly III a găsit mai mult de :count tranzacții în :time secunde.', - 'search_for_query' => 'Firefly III este în căutarea pentru tranzacţii cu toate aceste cuvinte în ele: :query', - 'invalid_operators_list' => 'Acești parametri de căutare nu sunt valabili și au fost ignorați.', + 'search' => 'Caută', + 'search_query' => 'Interogare', + 'search_found_transactions' => 'Firefly III a găsit :count tranzacție în :time secunde.| Firefly III a găsit :count tranzacții în :time secunde.', + 'search_found_more_transactions' => 'Firefly III a găsit mai mult de :count tranzacții în :time secunde.', + 'search_for_query' => 'Firefly III este în căutarea pentru tranzacţii cu toate aceste cuvinte în ele: :query', + 'invalid_operators_list' => 'Acești parametri de căutare nu sunt valabili și au fost ignorați.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaction date is ":value"', 'search_modifier_not_date_on' => 'Transaction date is not ":value"', 'search_modifier_reconciled' => 'Transaction is reconciled', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Tipul tranzacției este ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Eticheta este ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Următorii modificatorii sunt aplicați la căutare:', 'general_search_error' => 'A apărut o eroare în timpul căutării. Verificați log-urile pentru mai multe informații.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'Nu se pot executa reguli inactive.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Reguli', 'rule_name' => 'Denumirea regulii', 'rule_triggers' => 'Regulă se va declanșa când', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Când este o tranzacție actualizată', 'rule_trigger_user_action' => 'Acțiunea utilizatorului este ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Numele contului sursă începe cu..', 'rule_trigger_source_account_starts' => 'Numele contului sursă începe cu ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Bugetul este ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Moneda tranzacției este..', 'rule_trigger_currency_is' => 'Moneda tranzacției este ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Tranzacția valutară este..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Grup de reguli pentru facturi', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Regula privind factura ":name"', 'new_rule_for_bill_description' => 'Această regulă marchează tranzacțiile pentru factura ":name".', - 'new_rule_for_journal_title' => 'Regulă bazată pe tranzacția ":description"', - 'new_rule_for_journal_description' => 'Această regulă este bazată pe tranzacția ":description". Se va potrivi cu tranzacțiile care sunt exact la fel.', + 'new_rule_for_journal_title' => 'Regulă bazată pe tranzacția ":description"', + 'new_rule_for_journal_description' => 'Această regulă este bazată pe tranzacția ":description". Se va potrivi cu tranzacțiile care sunt exact la fel.', // tags - 'store_new_tag' => 'Salvați o nouă etichetă', - 'update_tag' => 'Actualizați eticheta', - 'no_location_set' => 'Nu a fost setată nicio locație.', - 'meta_data' => 'Date meta', - 'location' => 'Locație', - 'without_date' => 'Fără data', - 'result' => 'Rezultat', - 'sums_apply_to_range' => 'Toate sumele se aplică gamei selectate', - 'mapbox_api_key' => 'Pentru a utiliza harta, obțineți o cheie API din Mapbox . Deschideți fișierul .env și introduceți acest cod după MAPBOX_API_KEY = .', - 'press_object_location' => 'Faceți clic dreapta sau apăsați lung pentru a seta locația obiectului.', - 'clear_location' => 'Ștergeți locația', - 'delete_all_selected_tags' => 'Şterge toate etichetele selectate', - 'select_tags_to_delete' => 'Nu uitați să selectați unele etichete.', - 'deleted_x_tags' => 'S-a șters :count tag.| :count tags șterse.', - 'create_rule_from_transaction' => 'Creați o regulă bazată pe tranzacție', - 'create_recurring_from_transaction' => 'Creați o tranzacție recurentă bazată pe tranzacție', - + 'store_new_tag' => 'Salvați o nouă etichetă', + 'update_tag' => 'Actualizați eticheta', + 'no_location_set' => 'Nu a fost setată nicio locație.', + 'meta_data' => 'Date meta', + 'location' => 'Locație', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Fără data', + 'result' => 'Rezultat', + 'sums_apply_to_range' => 'Toate sumele se aplică gamei selectate', + 'mapbox_api_key' => 'Pentru a utiliza harta, obțineți o cheie API din Mapbox . Deschideți fișierul .env și introduceți acest cod după MAPBOX_API_KEY = .', + 'press_object_location' => 'Faceți clic dreapta sau apăsați lung pentru a seta locația obiectului.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Ștergeți locația', + 'delete_all_selected_tags' => 'Şterge toate etichetele selectate', + 'select_tags_to_delete' => 'Nu uitați să selectați unele etichete.', + 'deleted_x_tags' => 'S-a șters :count tag.| :count tags șterse.', + 'create_rule_from_transaction' => 'Creați o regulă bazată pe tranzacție', + 'create_recurring_from_transaction' => 'Creați o tranzacție recurentă bazată pe tranzacție', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(egal cu limba)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Ecranul de start al conturilor', - 'pref_home_screen_accounts_help' => 'Ce conturi ar trebui afișate pe pagina de pornire?', - 'pref_view_range' => 'Vedeți intervalul', - 'pref_view_range_help' => 'Anumite grafice sunt grupate automat în perioade. Bugeturile dvs. vor fi, de asemenea, grupate în perioade. Ce perioadă ați prefera?', - 'pref_1D' => 'O zi', - 'pref_1W' => 'O saptamână', - 'pref_1M' => 'O lună', - 'pref_3M' => 'Trei luni (trimestru)', - 'pref_6M' => 'Șase luni', - 'pref_1Y' => 'Un an', - 'pref_last365' => 'Last year', - 'pref_last90' => 'Last 90 days', - 'pref_last30' => 'Last 30 days', - 'pref_last7' => 'Last 7 days', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Limbi', - 'pref_locale' => 'Setările locale', - 'pref_languages_help' => 'Firefly III acceptă mai multe limbi. Pe care o preferați?', - 'pref_locale_help' => 'Firefly III vă permite să setați alte setări locale, cum ar fi modul în care valutele, numerele și datele sunt formatate. Este posibil ca intrările din această listă să nu fie acceptate de sistemul dumneavoastră. Firefly III nu are setările de date corecte pentru fiecare local; contactați-mă pentru îmbunătățiri.', - 'pref_locale_no_demo' => 'Această funcție nu va funcționa pentru utilizatorul demo.', - 'pref_custom_fiscal_year' => 'Setări an fiscal', - 'pref_custom_fiscal_year_label' => 'Activat', - 'pref_custom_fiscal_year_help' => 'În țările care utilizează un exercițiu financiar, altul decât 1 ianuarie până la 31 decembrie, puteți să le activați și să specificați zilele de începere / sfârșit ale anului fiscal', - 'pref_fiscal_year_start_label' => 'Data de începere a anului fiscal', - 'pref_two_factor_auth' => 'Verificarea în doi pași', - 'pref_two_factor_auth_help' => 'Când activați verificarea în doi pași (cunoscută și ca autentificare cu doi factori), adăugați un nivel suplimentar de securitate în contul dvs. Conectați-vă cu ceva ce știți (parola dvs.) și ceva ce aveți (un cod de verificare). Codurile de verificare sunt generate de o aplicație de pe telefon, cum ar fi Authy sau Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Activați verificarea în doi pași', - 'pref_two_factor_auth_disabled' => 'Cod de verificare în doi pași eliminat și dezactivat', - 'pref_two_factor_auth_remove_it' => 'Nu uitați să eliminați contul din aplicația dvs. de autentificare!', - 'pref_two_factor_auth_code' => 'Verificați codul', - 'pref_two_factor_auth_code_help' => 'Scanați codul QR cu o aplicație de pe telefon, cum ar fi Authy sau Google Authenticator și introduceți codul generat.', - 'pref_two_factor_auth_reset_code' => 'Resetați codul de verificare', - 'pref_two_factor_auth_disable_2fa' => 'Dezactivați autentificarea cu doi factori', - '2fa_use_secret_instead' => 'Dacă nu puteți scana codul QR, nu ezitați să utilizați codul secret: :secret.', - '2fa_backup_codes' => 'Stocați aceste coduri de rezervă pentru acces în cazul în care pierdeți dispozitivul.', - '2fa_already_enabled' => 'Verificarea în 2 pași este deja activată.', - 'wrong_mfa_code' => 'Codul MFA nu este valid.', - 'pref_save_settings' => 'Salvează setările', - 'saved_preferences' => 'Preferințele sunt salvate!', - 'preferences_general' => 'Generale', - 'preferences_frontpage' => 'Ecranul de start', - 'preferences_security' => 'Securitate', - 'preferences_layout' => 'Schemă', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Afișați depozitele pe ecranul de pornire', - 'pref_home_show_deposits_info' => 'Ecranul de pornire vă arată deja cont de cheltuieli. Ar trebui să afișeze și conturile dvs. de venit?', - 'pref_home_do_show_deposits' => 'Da, arată-le', - 'successful_count' => 'din care :count au reușit', - 'list_page_size_title' => 'Mărimea paginii', - 'list_page_size_help' => 'Orice listă de lucruri (conturi, tranzacții etc.) arată cel mult atât de multe pe pagină.', - 'list_page_size_label' => 'Mărimea paginii', - 'between_dates' => '(:start și :end)', - 'pref_optional_fields_transaction' => 'Câmpuri opționale pentru tranzacții', - 'pref_optional_fields_transaction_help' => 'În mod prestabilit, toate câmpurile nu sunt activate atunci când creați o nouă tranzacție (din cauza aglomerării). Mai jos, puteți activa aceste câmpuri dacă credeți că acestea ar putea fi utile pentru dvs. Desigur, orice câmp care este dezactivat, dar deja completat, va fi vizibil indiferent de setare.', - 'optional_tj_date_fields' => 'Câmpurile de date', - 'optional_tj_other_fields' => 'Alte câmpuri', - 'optional_tj_attachment_fields' => 'Câmpuri de atașament', - 'pref_optional_tj_interest_date' => 'Data de interes', - 'pref_optional_tj_book_date' => 'Data revervării', - 'pref_optional_tj_process_date' => 'Data procesării', - 'pref_optional_tj_due_date' => 'Data scadentă', - 'pref_optional_tj_payment_date' => 'Data plății', - 'pref_optional_tj_invoice_date' => 'Data facturii', - 'pref_optional_tj_internal_reference' => 'Referință internă', - 'pref_optional_tj_notes' => 'Notițe', - 'pref_optional_tj_attachments' => 'Ataşamente', - 'pref_optional_tj_external_url' => 'External URL', - 'pref_optional_tj_location' => 'Locaţie', - 'pref_optional_tj_links' => 'Link-uri de tranzacție', - 'optional_field_meta_dates' => 'Date', - 'optional_field_meta_business' => 'Afaceri', - 'optional_field_attachments' => 'Ataşamente', - 'optional_field_meta_data' => 'Meta date opționale', - 'external_url' => 'URL extern', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(egal cu limba)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Ecranul de start al conturilor', + 'pref_home_screen_accounts_help' => 'Ce conturi ar trebui afișate pe pagina de pornire?', + 'pref_view_range' => 'Vedeți intervalul', + 'pref_view_range_help' => 'Anumite grafice sunt grupate automat în perioade. Bugeturile dvs. vor fi, de asemenea, grupate în perioade. Ce perioadă ați prefera?', + 'pref_1D' => 'O zi', + 'pref_1W' => 'O saptamână', + 'pref_1M' => 'O lună', + 'pref_3M' => 'Trei luni (trimestru)', + 'pref_6M' => 'Șase luni', + 'pref_1Y' => 'Un an', + 'pref_last365' => 'Last year', + 'pref_last90' => 'Last 90 days', + 'pref_last30' => 'Last 30 days', + 'pref_last7' => 'Last 7 days', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => 'Limbi', + 'pref_locale' => 'Setările locale', + 'pref_languages_help' => 'Firefly III acceptă mai multe limbi. Pe care o preferați?', + 'pref_locale_help' => 'Firefly III vă permite să setați alte setări locale, cum ar fi modul în care valutele, numerele și datele sunt formatate. Este posibil ca intrările din această listă să nu fie acceptate de sistemul dumneavoastră. Firefly III nu are setările de date corecte pentru fiecare local; contactați-mă pentru îmbunătățiri.', + 'pref_locale_no_demo' => 'Această funcție nu va funcționa pentru utilizatorul demo.', + 'pref_custom_fiscal_year' => 'Setări an fiscal', + 'pref_custom_fiscal_year_label' => 'Activat', + 'pref_custom_fiscal_year_help' => 'În țările care utilizează un exercițiu financiar, altul decât 1 ianuarie până la 31 decembrie, puteți să le activați și să specificați zilele de începere / sfârșit ale anului fiscal', + 'pref_fiscal_year_start_label' => 'Data de începere a anului fiscal', + 'pref_two_factor_auth' => 'Verificarea în doi pași', + 'pref_two_factor_auth_help' => 'Când activați verificarea în doi pași (cunoscută și ca autentificare cu doi factori), adăugați un nivel suplimentar de securitate în contul dvs. Conectați-vă cu ceva ce știți (parola dvs.) și ceva ce aveți (un cod de verificare). Codurile de verificare sunt generate de o aplicație de pe telefon, cum ar fi Authy sau Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Activați verificarea în doi pași', + 'pref_two_factor_auth_disabled' => 'Cod de verificare în doi pași eliminat și dezactivat', + 'pref_two_factor_auth_remove_it' => 'Nu uitați să eliminați contul din aplicația dvs. de autentificare!', + 'pref_two_factor_auth_code' => 'Verificați codul', + 'pref_two_factor_auth_code_help' => 'Scanați codul QR cu o aplicație de pe telefon, cum ar fi Authy sau Google Authenticator și introduceți codul generat.', + 'pref_two_factor_auth_reset_code' => 'Resetați codul de verificare', + 'pref_two_factor_auth_disable_2fa' => 'Dezactivați autentificarea cu doi factori', + '2fa_use_secret_instead' => 'Dacă nu puteți scana codul QR, nu ezitați să utilizați codul secret: :secret.', + '2fa_backup_codes' => 'Stocați aceste coduri de rezervă pentru acces în cazul în care pierdeți dispozitivul.', + '2fa_already_enabled' => 'Verificarea în 2 pași este deja activată.', + 'wrong_mfa_code' => 'Codul MFA nu este valid.', + 'pref_save_settings' => 'Salvează setările', + 'saved_preferences' => 'Preferințele sunt salvate!', + 'preferences_general' => 'Generale', + 'preferences_frontpage' => 'Ecranul de start', + 'preferences_security' => 'Securitate', + 'preferences_layout' => 'Schemă', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Afișați depozitele pe ecranul de pornire', + 'pref_home_show_deposits_info' => 'Ecranul de pornire vă arată deja cont de cheltuieli. Ar trebui să afișeze și conturile dvs. de venit?', + 'pref_home_do_show_deposits' => 'Da, arată-le', + 'successful_count' => 'din care :count au reușit', + 'list_page_size_title' => 'Mărimea paginii', + 'list_page_size_help' => 'Orice listă de lucruri (conturi, tranzacții etc.) arată cel mult atât de multe pe pagină.', + 'list_page_size_label' => 'Mărimea paginii', + 'between_dates' => '(:start și :end)', + 'pref_optional_fields_transaction' => 'Câmpuri opționale pentru tranzacții', + 'pref_optional_fields_transaction_help' => 'În mod prestabilit, toate câmpurile nu sunt activate atunci când creați o nouă tranzacție (din cauza aglomerării). Mai jos, puteți activa aceste câmpuri dacă credeți că acestea ar putea fi utile pentru dvs. Desigur, orice câmp care este dezactivat, dar deja completat, va fi vizibil indiferent de setare.', + 'optional_tj_date_fields' => 'Câmpurile de date', + 'optional_tj_other_fields' => 'Alte câmpuri', + 'optional_tj_attachment_fields' => 'Câmpuri de atașament', + 'pref_optional_tj_interest_date' => 'Data de interes', + 'pref_optional_tj_book_date' => 'Data revervării', + 'pref_optional_tj_process_date' => 'Data procesării', + 'pref_optional_tj_due_date' => 'Data scadentă', + 'pref_optional_tj_payment_date' => 'Data plății', + 'pref_optional_tj_invoice_date' => 'Data facturii', + 'pref_optional_tj_internal_reference' => 'Referință internă', + 'pref_optional_tj_notes' => 'Notițe', + 'pref_optional_tj_attachments' => 'Ataşamente', + 'pref_optional_tj_external_url' => 'External URL', + 'pref_optional_tj_location' => 'Locaţie', + 'pref_optional_tj_links' => 'Link-uri de tranzacție', + 'optional_field_meta_dates' => 'Date', + 'optional_field_meta_business' => 'Afaceri', + 'optional_field_attachments' => 'Ataşamente', + 'optional_field_meta_data' => 'Meta date opționale', + 'external_url' => 'URL extern', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'Toate celelalte sesiuni au fost deconectate.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Șterge toate bugetele', - 'delete_all_categories' => 'Șterge toate categoriile', - 'delete_all_tags' => 'Șterge toate tag-urile', - 'delete_all_bills' => 'Ștergeți TOATE facturile dvs', - 'delete_all_piggy_banks' => 'Șterge TOATE pușculițele tale', - 'delete_all_rules' => 'Șterge TOATE regulile', - 'delete_all_recurring' => 'Șterge TOATE tranzacțiile dvs. recurente', - 'delete_all_object_groups' => 'Șterge TOATE grupurile de obiecte', - 'delete_all_accounts' => 'Șterge TOATE conturile tale', - 'delete_all_asset_accounts' => 'Șterge TOATE conturile de active', - 'delete_all_expense_accounts' => 'Ștergeți TOATE conturile de cheltuieli', - 'delete_all_revenue_accounts' => 'Șterge TOATE conturile de venituri', - 'delete_all_liabilities' => 'Șterge TOATE datoriile tale', - 'delete_all_transactions' => 'Ștergeți TOATE tranzacțiile dvs', - 'delete_all_withdrawals' => 'Șterge TOATE retragerile', - 'delete_all_deposits' => 'Șterge TOATE depozitele tale', - 'delete_all_transfers' => 'Șterge TOATE transferurile tale', - 'also_delete_transactions' => 'Ștergerea conturilor va șterge și toate retragerile asociate, depozitele și transferurile!', - 'deleted_all_budgets' => 'Toate bugetele au fost şterse', - 'deleted_all_categories' => 'Toate categoriile au fost şterse', - 'deleted_all_tags' => 'Toate tag-urile au fost şterse', - 'deleted_all_bills' => 'Toate facturile au fost șterse', - 'deleted_all_piggy_banks' => 'Toate pușculițele au fost șterse', - 'deleted_all_rules' => 'Toate regulile și grupurile de reguli au fost șterse', - 'deleted_all_object_groups' => 'Toate grupurile au fost șterse', - 'deleted_all_accounts' => 'Toate conturile au fost șterse', - 'deleted_all_asset_accounts' => 'Toate conturile de active au fost șterse', - 'deleted_all_expense_accounts' => 'Toate conturile de cheltuieli au fost șterse', - 'deleted_all_revenue_accounts' => 'Toate conturile de venituri au fost șterse', - 'deleted_all_liabilities' => 'Toate datoriile au fost șterse', - 'deleted_all_transactions' => 'Toate tranzacțiile au fost șterse', - 'deleted_all_withdrawals' => 'Toate retragerile au fost șterse', - 'deleted_all_deposits' => 'Toate depozitele au fost șterse', - 'deleted_all_transfers' => 'Toate transferurile au fost șterse', - 'deleted_all_recurring' => 'Toate tranzacțiile recurente au fost șterse', - 'change_your_password' => 'Schimbați-vă parola', - 'delete_account' => 'Șterge account', - 'current_password' => 'Parola actuală', - 'new_password' => 'Parola nouă', - 'new_password_again' => 'Parola nouă (din nou)', - 'delete_your_account' => 'Ștergeți contul dvs', - 'delete_your_account_help' => 'Ștergerea contului dvs. va șterge, de asemenea, orice cont, tranzacție, orice ați salvat în aplicație. Acestea vor dispărea.', - 'delete_your_account_password' => 'Introduceți parola pentru a continua.', - 'password' => 'Parola', - 'are_you_sure' => 'Esti sigur? Nu poți anula acest lucru.', - 'delete_account_button' => 'Ștergeți contul dvs', - 'invalid_current_password' => 'Parola curentă nevalidă!', - 'password_changed' => 'Parolă schimbată!', - 'should_change' => 'Ideea este să vă schimbați parola.', - 'invalid_password' => 'Parolă nevalidă!', - 'what_is_pw_security' => 'Ce este "verificarea securității parolei"?', - 'secure_pw_title' => 'Cum alegeți o parolă sigură', - 'forgot_password_response' => 'Vă mulţumim. Dacă există un cont cu această adresă de e-mail, veţi găsi instrucţiuni în căsuţa poştală.', - 'secure_pw_history' => 'Nu trece nici săptămână și citiți în știri despre un site care pierde parolele utilizatorilor săi. Hackerii și hoții utilizează aceste parole pentru a încerca să vă fure informațiile private. Aceste informații sunt valoroase.', - 'secure_pw_ff' => 'Utilizați aceeași parolă pe tot internetul? Dacă un site pierde parola, hackerii au acces la toate datele. Firefly III se bazează pe dvs. pentru a alege o parolă puternică și unică pentru a vă proteja înregistrările financiare.', - 'secure_pw_check_box' => 'Pentru a vă ajuta să faceți acest lucru Firefly III poate verifica dacă parola pe care doriți să o utilizați a fost furată în trecut. Dacă este cazul, Firefly III vă sfătuiește NU să utilizați parola respectivă.', - 'secure_pw_working_title' => 'Cum funcționează?', - 'secure_pw_working' => 'Dacă bifați caseta, Firefly III va trimite primele cinci caractere ale hash-ului SHA1 al parolei dvs. la site-ul Troy Hunt pentru a vedea dacă este în listă. Acest lucru vă va împiedica să utilizați parole nesigure, așa cum se recomandă în cele mai recente articole de specialitate pe NIST pe acest subiect.', - 'secure_pw_should' => 'Ar trebui să bifez caseta??', - 'secure_pw_long_password' => 'Da. Verificați întotdeauna că parola este sigură.', - 'command_line_token' => 'Token-ul liniei de comandă', - 'explain_command_line_token' => 'Aveți nevoie de acest token pentru a efectua opțiunile prin linie de comandă, cum ar fi exportul de date. Fără el, acea comandă sensibilă nu va funcționa. Nu distribui token-ul pentru linia de comandă. Nimeni nu vă va cere acest token, nici măcar eu. Dacă te temi că ai pierdut asta, sau când ești paranoic, regenerează acest token folosind butonul.', - 'regenerate_command_line_token' => 'Regenerați token-ul liniei de comandă', - 'token_regenerated' => 'A fost generat un nou token de linie de comandă', - 'change_your_email' => 'Schimbați adresa dvs. de e-mail', - 'email_verification' => 'Un mesaj de e-mail va fi trimis la vechea și noua adresă de e-mail. Din motive de securitate, nu vei putea să te autentifici până nu îți verifici noua adresă de e-mail. Dacă nu sunteți sigur că instalarea dvs. Firefly III este capabilă să trimită e-mail, vă rugăm să nu utilizați această funcție. Dacă sunteți un administrator, puteți testa acest lucru în Administrare.', - 'email_changed_logout' => 'Până când nu vă confirmați adresa de e-mail, nu vă puteți conecta.', - 'login_with_new_email' => 'Acum vă puteți conecta cu noua dvs. adresă de e-mail.', - 'login_with_old_email' => 'Acum puteți să vă conectați din nou cu vechea adresă de e-mail.', - 'login_provider_local_only' => 'Această acțiune nu este disponibilă când vă autentificați prin ":login_provider".', - 'external_user_mgt_disabled' => 'Această acțiune nu este disponibilă atunci când Firefly III nu este responsabil de gestionarea utilizatorului sau de manipularea autentificării.', - 'external_auth_disabled' => 'Această acțiune nu este disponibilă atunci când Firefly III nu este responsabil pentru manipularea autentificării.', - 'delete_local_info_only' => "Deoarece Firefly III nu este responsabil de gestionarea utilizatorului sau de manipularea autentificării, această funcție va șterge doar informațiile locale Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Clienți OAuth', - 'profile_oauth_no_clients' => 'Nu ați creat niciun client OAuth.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Clienți', - 'profile_oauth_client_id' => 'ID Client', - 'profile_oauth_client_name' => 'Nume', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Creare client nou', - 'profile_oauth_create_client' => 'Creare client', - 'profile_oauth_edit_client' => 'Editare client', - 'profile_oauth_name_help' => 'Ceva ce utilizatorii vor recunoaște și vor avea încredere.', - 'profile_oauth_redirect_url' => 'Redirectioneaza URL', - 'profile_oauth_redirect_url_help' => 'URL-ul de retroapelare al aplicației dvs.', - 'profile_authorized_apps' => 'Aplicațiile dvs autorizate', - 'profile_authorized_clients' => 'Clienți autorizați', - 'profile_scopes' => 'Domenii', - 'profile_revoke' => 'Revocați', - 'profile_oauth_client_secret_title' => 'Secret client', - 'profile_oauth_client_secret_expl' => 'Aici este noul tău cod secret de client. Este singura dată când va fi afișat așa că nu îl pierzi! Acum poți folosi acest cod pentru a face cereri API.', - 'profile_personal_access_tokens' => 'Token de acces personal', - 'profile_personal_access_token' => 'Token de acces personal', - 'profile_oauth_confidential' => 'Confidenţial', - 'profile_oauth_confidential_help' => 'Solicitați clientului să se autentifice cu un secret. Clienții confidențiali pot păstra acreditările într-un mod securizat fără a le expune unor părți neautorizate. Aplicațiile publice, cum ar fi aplicațiile native desktop sau JavaScript SPA, nu pot păstra secretele în siguranță.', - 'profile_personal_access_token_explanation' => 'Aici este noul dvs. token de acces personal. Este singura dată când va fi afișat așa că nu îl pierde! Acum poți folosi acest token pentru a face cereri API.', - 'profile_no_personal_access_token' => 'Nu aţi creat nici un token personal de acces.', - 'profile_create_new_token' => 'Crează un nou token', - 'profile_create_token' => 'Crează token', - 'profile_create' => 'Crează', - 'profile_save_changes' => 'Salvează modificările', - 'profile_whoops' => 'Hopaa!', - 'profile_something_wrong' => 'A apărut o eroare!', - 'profile_try_again' => 'A apărut o problemă. Încercați din nou.', - 'amounts' => 'Sume', - 'multi_account_warning_unknown' => 'În funcție de tipul de tranzacție pe care o creați, contul sursei și/sau destinației fracționărilor ulterioare poate fi depășit cu orice se definește în prima împărțire a tranzacției.', - 'multi_account_warning_withdrawal' => 'Reţineţi faptul că sursa scindărilor ulterioare va fi anulată de orice altceva definit în prima împărţire a retragerii.', - 'multi_account_warning_deposit' => 'Țineți cont de faptul că destinația scindărilor ulterioare va fi depășită cu orice se definește la prima împărțire a depozitului.', - 'multi_account_warning_transfer' => 'Reţineţi faptul că contul sursei + destinaţia fracţionărilor ulterioare va fi anulat de orice se defineşte în prima împărţire a transferului.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'Toate celelalte sesiuni au fost deconectate.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Șterge toate bugetele', + 'delete_all_categories' => 'Șterge toate categoriile', + 'delete_all_tags' => 'Șterge toate tag-urile', + 'delete_all_bills' => 'Ștergeți TOATE facturile dvs', + 'delete_all_piggy_banks' => 'Șterge TOATE pușculițele tale', + 'delete_all_rules' => 'Șterge TOATE regulile', + 'delete_all_recurring' => 'Șterge TOATE tranzacțiile dvs. recurente', + 'delete_all_object_groups' => 'Șterge TOATE grupurile de obiecte', + 'delete_all_accounts' => 'Șterge TOATE conturile tale', + 'delete_all_asset_accounts' => 'Șterge TOATE conturile de active', + 'delete_all_expense_accounts' => 'Ștergeți TOATE conturile de cheltuieli', + 'delete_all_revenue_accounts' => 'Șterge TOATE conturile de venituri', + 'delete_all_liabilities' => 'Șterge TOATE datoriile tale', + 'delete_all_transactions' => 'Ștergeți TOATE tranzacțiile dvs', + 'delete_all_withdrawals' => 'Șterge TOATE retragerile', + 'delete_all_deposits' => 'Șterge TOATE depozitele tale', + 'delete_all_transfers' => 'Șterge TOATE transferurile tale', + 'also_delete_transactions' => 'Ștergerea conturilor va șterge și toate retragerile asociate, depozitele și transferurile!', + 'deleted_all_budgets' => 'Toate bugetele au fost şterse', + 'deleted_all_categories' => 'Toate categoriile au fost şterse', + 'deleted_all_tags' => 'Toate tag-urile au fost şterse', + 'deleted_all_bills' => 'Toate facturile au fost șterse', + 'deleted_all_piggy_banks' => 'Toate pușculițele au fost șterse', + 'deleted_all_rules' => 'Toate regulile și grupurile de reguli au fost șterse', + 'deleted_all_object_groups' => 'Toate grupurile au fost șterse', + 'deleted_all_accounts' => 'Toate conturile au fost șterse', + 'deleted_all_asset_accounts' => 'Toate conturile de active au fost șterse', + 'deleted_all_expense_accounts' => 'Toate conturile de cheltuieli au fost șterse', + 'deleted_all_revenue_accounts' => 'Toate conturile de venituri au fost șterse', + 'deleted_all_liabilities' => 'Toate datoriile au fost șterse', + 'deleted_all_transactions' => 'Toate tranzacțiile au fost șterse', + 'deleted_all_withdrawals' => 'Toate retragerile au fost șterse', + 'deleted_all_deposits' => 'Toate depozitele au fost șterse', + 'deleted_all_transfers' => 'Toate transferurile au fost șterse', + 'deleted_all_recurring' => 'Toate tranzacțiile recurente au fost șterse', + 'change_your_password' => 'Schimbați-vă parola', + 'delete_account' => 'Șterge account', + 'current_password' => 'Parola actuală', + 'new_password' => 'Parola nouă', + 'new_password_again' => 'Parola nouă (din nou)', + 'delete_your_account' => 'Ștergeți contul dvs', + 'delete_your_account_help' => 'Ștergerea contului dvs. va șterge, de asemenea, orice cont, tranzacție, orice ați salvat în aplicație. Acestea vor dispărea.', + 'delete_your_account_password' => 'Introduceți parola pentru a continua.', + 'password' => 'Parola', + 'are_you_sure' => 'Esti sigur? Nu poți anula acest lucru.', + 'delete_account_button' => 'Ștergeți contul dvs', + 'invalid_current_password' => 'Parola curentă nevalidă!', + 'password_changed' => 'Parolă schimbată!', + 'should_change' => 'Ideea este să vă schimbați parola.', + 'invalid_password' => 'Parolă nevalidă!', + 'what_is_pw_security' => 'Ce este "verificarea securității parolei"?', + 'secure_pw_title' => 'Cum alegeți o parolă sigură', + 'forgot_password_response' => 'Vă mulţumim. Dacă există un cont cu această adresă de e-mail, veţi găsi instrucţiuni în căsuţa poştală.', + 'secure_pw_history' => 'Nu trece nici săptămână și citiți în știri despre un site care pierde parolele utilizatorilor săi. Hackerii și hoții utilizează aceste parole pentru a încerca să vă fure informațiile private. Aceste informații sunt valoroase.', + 'secure_pw_ff' => 'Utilizați aceeași parolă pe tot internetul? Dacă un site pierde parola, hackerii au acces la toate datele. Firefly III se bazează pe dvs. pentru a alege o parolă puternică și unică pentru a vă proteja înregistrările financiare.', + 'secure_pw_check_box' => 'Pentru a vă ajuta să faceți acest lucru Firefly III poate verifica dacă parola pe care doriți să o utilizați a fost furată în trecut. Dacă este cazul, Firefly III vă sfătuiește NU să utilizați parola respectivă.', + 'secure_pw_working_title' => 'Cum funcționează?', + 'secure_pw_working' => 'Dacă bifați caseta, Firefly III va trimite primele cinci caractere ale hash-ului SHA1 al parolei dvs. la site-ul Troy Hunt pentru a vedea dacă este în listă. Acest lucru vă va împiedica să utilizați parole nesigure, așa cum se recomandă în cele mai recente articole de specialitate pe NIST pe acest subiect.', + 'secure_pw_should' => 'Ar trebui să bifez caseta??', + 'secure_pw_long_password' => 'Da. Verificați întotdeauna că parola este sigură.', + 'command_line_token' => 'Token-ul liniei de comandă', + 'explain_command_line_token' => 'Aveți nevoie de acest token pentru a efectua opțiunile prin linie de comandă, cum ar fi exportul de date. Fără el, acea comandă sensibilă nu va funcționa. Nu distribui token-ul pentru linia de comandă. Nimeni nu vă va cere acest token, nici măcar eu. Dacă te temi că ai pierdut asta, sau când ești paranoic, regenerează acest token folosind butonul.', + 'regenerate_command_line_token' => 'Regenerați token-ul liniei de comandă', + 'token_regenerated' => 'A fost generat un nou token de linie de comandă', + 'change_your_email' => 'Schimbați adresa dvs. de e-mail', + 'email_verification' => 'Un mesaj de e-mail va fi trimis la vechea și noua adresă de e-mail. Din motive de securitate, nu vei putea să te autentifici până nu îți verifici noua adresă de e-mail. Dacă nu sunteți sigur că instalarea dvs. Firefly III este capabilă să trimită e-mail, vă rugăm să nu utilizați această funcție. Dacă sunteți un administrator, puteți testa acest lucru în Administrare.', + 'email_changed_logout' => 'Până când nu vă confirmați adresa de e-mail, nu vă puteți conecta.', + 'login_with_new_email' => 'Acum vă puteți conecta cu noua dvs. adresă de e-mail.', + 'login_with_old_email' => 'Acum puteți să vă conectați din nou cu vechea adresă de e-mail.', + 'login_provider_local_only' => 'Această acțiune nu este disponibilă când vă autentificați prin ":login_provider".', + 'external_user_mgt_disabled' => 'Această acțiune nu este disponibilă atunci când Firefly III nu este responsabil de gestionarea utilizatorului sau de manipularea autentificării.', + 'external_auth_disabled' => 'Această acțiune nu este disponibilă atunci când Firefly III nu este responsabil pentru manipularea autentificării.', + 'delete_local_info_only' => 'Deoarece Firefly III nu este responsabil de gestionarea utilizatorului sau de manipularea autentificării, această funcție va șterge doar informațiile locale Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Clienți OAuth', + 'profile_oauth_no_clients' => 'Nu ați creat niciun client OAuth.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Clienți', + 'profile_oauth_client_id' => 'ID Client', + 'profile_oauth_client_name' => 'Nume', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Creare client nou', + 'profile_oauth_create_client' => 'Creare client', + 'profile_oauth_edit_client' => 'Editare client', + 'profile_oauth_name_help' => 'Ceva ce utilizatorii vor recunoaște și vor avea încredere.', + 'profile_oauth_redirect_url' => 'Redirectioneaza URL', + 'profile_oauth_redirect_url_help' => 'URL-ul de retroapelare al aplicației dvs.', + 'profile_authorized_apps' => 'Aplicațiile dvs autorizate', + 'profile_authorized_clients' => 'Clienți autorizați', + 'profile_scopes' => 'Domenii', + 'profile_revoke' => 'Revocați', + 'profile_oauth_client_secret_title' => 'Secret client', + 'profile_oauth_client_secret_expl' => 'Aici este noul tău cod secret de client. Este singura dată când va fi afișat așa că nu îl pierzi! Acum poți folosi acest cod pentru a face cereri API.', + 'profile_personal_access_tokens' => 'Token de acces personal', + 'profile_personal_access_token' => 'Token de acces personal', + 'profile_oauth_confidential' => 'Confidenţial', + 'profile_oauth_confidential_help' => 'Solicitați clientului să se autentifice cu un secret. Clienții confidențiali pot păstra acreditările într-un mod securizat fără a le expune unor părți neautorizate. Aplicațiile publice, cum ar fi aplicațiile native desktop sau JavaScript SPA, nu pot păstra secretele în siguranță.', + 'profile_personal_access_token_explanation' => 'Aici este noul dvs. token de acces personal. Este singura dată când va fi afișat așa că nu îl pierde! Acum poți folosi acest token pentru a face cereri API.', + 'profile_no_personal_access_token' => 'Nu aţi creat nici un token personal de acces.', + 'profile_create_new_token' => 'Crează un nou token', + 'profile_create_token' => 'Crează token', + 'profile_create' => 'Crează', + 'profile_save_changes' => 'Salvează modificările', + 'profile_whoops' => 'Hopaa!', + 'profile_something_wrong' => 'A apărut o eroare!', + 'profile_try_again' => 'A apărut o problemă. Încercați din nou.', + 'amounts' => 'Sume', + 'multi_account_warning_unknown' => 'În funcție de tipul de tranzacție pe care o creați, contul sursei și/sau destinației fracționărilor ulterioare poate fi depășit cu orice se definește în prima împărțire a tranzacției.', + 'multi_account_warning_withdrawal' => 'Reţineţi faptul că sursa scindărilor ulterioare va fi anulată de orice altceva definit în prima împărţire a retragerii.', + 'multi_account_warning_deposit' => 'Țineți cont de faptul că destinația scindărilor ulterioare va fi depășită cu orice se definește la prima împărțire a depozitului.', + 'multi_account_warning_transfer' => 'Reţineţi faptul că contul sursei + destinaţia fracţionărilor ulterioare va fi anulat de orice se defineşte în prima împărţire a transferului.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Exportă date din Firefly III', - 'export_data_menu' => 'Exportă datele', - 'export_data_bc' => 'Exportă date din Firefly III', - 'export_data_main_title' => 'Exportă date din Firefly III', - 'export_data_expl' => 'Acest link vă permite să exportați toate tranzacțiile + datele meta de la Firefly III. Vă rugăm să consultați ajutorul (pictograma din dreapta sus (?)) pentru mai multe informații despre proces.', - 'export_data_all_transactions' => 'Exportă toate tranzacțiile', - 'export_data_advanced_expl' => 'Dacă aveți nevoie de un tip de export mai avansat sau specific, citiți despre modul de utilizare a comenzii în consolă php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Exportă date din Firefly III', + 'export_data_menu' => 'Exportă datele', + 'export_data_bc' => 'Exportă date din Firefly III', + 'export_data_main_title' => 'Exportă date din Firefly III', + 'export_data_expl' => 'Acest link vă permite să exportați toate tranzacțiile + datele meta de la Firefly III. Vă rugăm să consultați ajutorul (pictograma din dreapta sus (?)) pentru mai multe informații despre proces.', + 'export_data_all_transactions' => 'Exportă toate tranzacțiile', + 'export_data_advanced_expl' => 'Dacă aveți nevoie de un tip de export mai avansat sau specific, citiți despre modul de utilizare a comenzii în consolă php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Un atașament|:count atașamente', - 'attachments' => 'Atașamente', - 'edit_attachment' => 'Editați attachment ":name"', - 'update_attachment' => 'Actualizați atașament', - 'delete_attachment' => 'Șterge atașament ":name"', - 'attachment_deleted' => 'Atașament ":name" șters', - 'liabilities_deleted' => 'Provizionul ":name" a fost șters', - 'attachment_updated' => 'Atașament ":name" actualizat', - 'upload_max_file_size' => 'Dimensiunea maximă a fișierului: :size', - 'list_all_attachments' => 'Lista tuturor atașamentelor', + 'nr_of_attachments' => 'Un atașament|:count atașamente', + 'attachments' => 'Atașamente', + 'edit_attachment' => 'Editați attachment ":name"', + 'update_attachment' => 'Actualizați atașament', + 'delete_attachment' => 'Șterge atașament ":name"', + 'attachment_deleted' => 'Atașament ":name" șters', + 'liabilities_deleted' => 'Provizionul ":name" a fost șters', + 'attachment_updated' => 'Atașament ":name" actualizat', + 'upload_max_file_size' => 'Dimensiunea maximă a fișierului: :size', + 'list_all_attachments' => 'Lista tuturor atașamentelor', // transaction index - 'title_expenses' => 'Cheltuieli', - 'title_withdrawal' => 'Cheltuieli', - 'title_revenue' => 'Venituri', - 'title_deposit' => 'Venituri', - 'title_transfer' => 'Transferuri', - 'title_transfers' => 'Transferuri', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Cheltuieli', + 'title_withdrawal' => 'Cheltuieli', + 'title_revenue' => 'Venituri', + 'title_deposit' => 'Venituri', + 'title_transfer' => 'Transferuri', + 'title_transfers' => 'Transferuri', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Această tranzacție este deja o retragere', - 'convert_is_already_type_Deposit' => 'Această tranzacție este deja un depozit', - 'convert_is_already_type_Transfer' => 'Această tranzacție este deja un transfer', - 'convert_to_Withdrawal' => 'Convertește ":description" la o retragere', - 'convert_to_Deposit' => 'Convertește ":description" la un depozit', - 'convert_to_Transfer' => 'Convertește ":description" la un transfer', - 'convert_options_WithdrawalDeposit' => 'Convertește o retragere intr-un depozit', - 'convert_options_WithdrawalTransfer' => 'Convertește o retragere intr-un transfer', - 'convert_options_DepositTransfer' => 'Convertește un depozit intr-un transfer', - 'convert_options_DepositWithdrawal' => 'Convertește un depozit intr-o retragere', - 'convert_options_TransferWithdrawal' => 'Convertește un transfer intr-o retragere', - 'convert_options_TransferDeposit' => 'Convertește un transfer intr-un depozit', - 'convert_Withdrawal_to_deposit' => 'Convertește această retragere la un depozit', - 'convert_Withdrawal_to_transfer' => 'Convertește această retragere la un transfer', - 'convert_Deposit_to_withdrawal' => 'Convertește aceast depozit la o retragere', - 'convert_Deposit_to_transfer' => 'Convertește această depozit la un transfer', - 'convert_Transfer_to_deposit' => 'Convertește aceast transfer la un depozit', - 'convert_Transfer_to_withdrawal' => 'Convertește aceast transfer la o retragere', - 'convert_please_set_revenue_source' => 'Alegeți un cont de venituri din care vor proveni banii.', - 'convert_please_set_asset_destination' => 'Alegeți un cont de active unde vor merge banii.', - 'convert_please_set_expense_destination' => 'Alegeți un cont de cheltuieli unde vor merge banii.', - 'convert_please_set_asset_source' => 'Alegeți un cont de active unde vor veni banii.', - 'convert_expl_w_d' => 'La conversia de la o retragere la un depozit, banii vor fi depozitați în contul de destinație afișat, în loc să fie retrași din acesta. La conversia de la o retragere la un depozit, banii vor fi depozitați în conturile de destinație afișate, în loc să fie retrași din acestea.', - 'convert_expl_w_t' => 'Când convertești o retragere într-un transfer, banii vor fi transferați departe de contul sursă în alt cont de activ sau de pasiv în loc să fie cheltuiți pe contul de cheltuieli inițial. Când convertești o retragere într-un transfer, banii vor fi transferați departe de conturile sursă în alte conturi de active sau de pasiv în loc să fie cheltuiți pe conturile inițiale de cheltuieli.', - 'convert_expl_d_w' => 'Atunci când convertești un depozit într-o retragere, banii vor fi retrași din contul sursă afișat, în loc să fie depozitați în acesta. Atunci când convertești un depozit într-o retragere, banii vor fi retrași din conturile sursă afișate, în loc să fie depozitați în acestea.', - 'convert_expl_d_t' => 'Când convertești un depozit într-un transfer, banii vor fi depozitați în contul de destinație listat din orice cont de active sau pasive. Când convertești un depozit într-un transfer, banii vor fi depozitați în conturile de destinație listate din oricare dintre conturile de active sau de pasiv ale dumneavoastră.', - 'convert_expl_t_w' => 'Când convertești un transfer într-o retragere, banii vor fi cheltuiți pe contul de destinație pe care îl setezi aici, în loc să fie transferați înapoi. Când convertești un transfer într-o retragere, banii vor fi cheltuiți pe conturile de destinație pe care le setezi aici, în loc să fie transferați la distanță.', - 'convert_expl_t_d' => 'Când convertești un transfer într-un depozit, banii vor fi depozitați în contul de destinație pe care îl vedeți aici, în loc să fie transferați în acesta. Când convertești un transfer într-un depozit, banii vor fi depozitați în conturile de destinație pe care le vedeți aici, în loc să fie transferați în ele.', - 'convert_select_sources' => 'Pentru a finaliza conversia, vă rugăm să setați noul cont sursă mai jos. Pentru a finaliza conversia, vă rugăm să setați mai jos conturile sursă noi.', - 'convert_select_destinations' => 'Pentru a finaliza conversia, vă rugăm să selectaţi noul cont de destinaţie de mai jos. Pentru a finaliza conversia, selectaţi noul cont de destinaţie de mai jos.', - 'converted_to_Withdrawal' => 'Tranzacția a fost transformată în retragere', - 'converted_to_Deposit' => 'Tranzacția a fost transformată în depozit', - 'converted_to_Transfer' => 'Tranzacția a fost transformată în transfer', - 'invalid_convert_selection' => 'Contul pe care l-ați selectat este deja utilizat în această tranzacție sau nu există.', - 'source_or_dest_invalid' => 'Nu se pot găsi detaliile corecte ale tranzacției. Conversia nu este posibilă.', - 'convert_to_withdrawal' => 'Convertește la retragere', - 'convert_to_deposit' => 'Convertește la depozit', - 'convert_to_transfer' => 'Convertește la transfer', + 'convert_is_already_type_Withdrawal' => 'Această tranzacție este deja o retragere', + 'convert_is_already_type_Deposit' => 'Această tranzacție este deja un depozit', + 'convert_is_already_type_Transfer' => 'Această tranzacție este deja un transfer', + 'convert_to_Withdrawal' => 'Convertește ":description" la o retragere', + 'convert_to_Deposit' => 'Convertește ":description" la un depozit', + 'convert_to_Transfer' => 'Convertește ":description" la un transfer', + 'convert_options_WithdrawalDeposit' => 'Convertește o retragere intr-un depozit', + 'convert_options_WithdrawalTransfer' => 'Convertește o retragere intr-un transfer', + 'convert_options_DepositTransfer' => 'Convertește un depozit intr-un transfer', + 'convert_options_DepositWithdrawal' => 'Convertește un depozit intr-o retragere', + 'convert_options_TransferWithdrawal' => 'Convertește un transfer intr-o retragere', + 'convert_options_TransferDeposit' => 'Convertește un transfer intr-un depozit', + 'convert_Withdrawal_to_deposit' => 'Convertește această retragere la un depozit', + 'convert_Withdrawal_to_transfer' => 'Convertește această retragere la un transfer', + 'convert_Deposit_to_withdrawal' => 'Convertește aceast depozit la o retragere', + 'convert_Deposit_to_transfer' => 'Convertește această depozit la un transfer', + 'convert_Transfer_to_deposit' => 'Convertește aceast transfer la un depozit', + 'convert_Transfer_to_withdrawal' => 'Convertește aceast transfer la o retragere', + 'convert_please_set_revenue_source' => 'Alegeți un cont de venituri din care vor proveni banii.', + 'convert_please_set_asset_destination' => 'Alegeți un cont de active unde vor merge banii.', + 'convert_please_set_expense_destination' => 'Alegeți un cont de cheltuieli unde vor merge banii.', + 'convert_please_set_asset_source' => 'Alegeți un cont de active unde vor veni banii.', + 'convert_expl_w_d' => 'La conversia de la o retragere la un depozit, banii vor fi depozitați în contul de destinație afișat, în loc să fie retrași din acesta. La conversia de la o retragere la un depozit, banii vor fi depozitați în conturile de destinație afișate, în loc să fie retrași din acestea.', + 'convert_expl_w_t' => 'Când convertești o retragere într-un transfer, banii vor fi transferați departe de contul sursă în alt cont de activ sau de pasiv în loc să fie cheltuiți pe contul de cheltuieli inițial. Când convertești o retragere într-un transfer, banii vor fi transferați departe de conturile sursă în alte conturi de active sau de pasiv în loc să fie cheltuiți pe conturile inițiale de cheltuieli.', + 'convert_expl_d_w' => 'Atunci când convertești un depozit într-o retragere, banii vor fi retrași din contul sursă afișat, în loc să fie depozitați în acesta. Atunci când convertești un depozit într-o retragere, banii vor fi retrași din conturile sursă afișate, în loc să fie depozitați în acestea.', + 'convert_expl_d_t' => 'Când convertești un depozit într-un transfer, banii vor fi depozitați în contul de destinație listat din orice cont de active sau pasive. Când convertești un depozit într-un transfer, banii vor fi depozitați în conturile de destinație listate din oricare dintre conturile de active sau de pasiv ale dumneavoastră.', + 'convert_expl_t_w' => 'Când convertești un transfer într-o retragere, banii vor fi cheltuiți pe contul de destinație pe care îl setezi aici, în loc să fie transferați înapoi. Când convertești un transfer într-o retragere, banii vor fi cheltuiți pe conturile de destinație pe care le setezi aici, în loc să fie transferați la distanță.', + 'convert_expl_t_d' => 'Când convertești un transfer într-un depozit, banii vor fi depozitați în contul de destinație pe care îl vedeți aici, în loc să fie transferați în acesta. Când convertești un transfer într-un depozit, banii vor fi depozitați în conturile de destinație pe care le vedeți aici, în loc să fie transferați în ele.', + 'convert_select_sources' => 'Pentru a finaliza conversia, vă rugăm să setați noul cont sursă mai jos. Pentru a finaliza conversia, vă rugăm să setați mai jos conturile sursă noi.', + 'convert_select_destinations' => 'Pentru a finaliza conversia, vă rugăm să selectaţi noul cont de destinaţie de mai jos. Pentru a finaliza conversia, selectaţi noul cont de destinaţie de mai jos.', + 'converted_to_Withdrawal' => 'Tranzacția a fost transformată în retragere', + 'converted_to_Deposit' => 'Tranzacția a fost transformată în depozit', + 'converted_to_Transfer' => 'Tranzacția a fost transformată în transfer', + 'invalid_convert_selection' => 'Contul pe care l-ați selectat este deja utilizat în această tranzacție sau nu există.', + 'source_or_dest_invalid' => 'Nu se pot găsi detaliile corecte ale tranzacției. Conversia nu este posibilă.', + 'convert_to_withdrawal' => 'Convertește la retragere', + 'convert_to_deposit' => 'Convertește la depozit', + 'convert_to_transfer' => 'Convertește la transfer', // create new stuff: - 'create_new_withdrawal' => 'Creați o nouă retragere', - 'create_new_deposit' => 'Creați un nou depozit', - 'create_new_transfer' => 'Creați un nou transfer', - 'create_new_asset' => 'Creați un nou cont de active', - 'create_new_liabilities' => 'Creare provizion nou', - 'create_new_expense' => 'Creați un nou cont de cheltuieli', - 'create_new_revenue' => 'Creați un nou cont de venituri', - 'create_new_piggy_bank' => 'Creați o nouă pușculiță', - 'create_new_bill' => 'Creați o nouă factură', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Creați o nouă retragere', + 'create_new_deposit' => 'Creați un nou depozit', + 'create_new_transfer' => 'Creați un nou transfer', + 'create_new_asset' => 'Creați un nou cont de active', + 'create_new_liabilities' => 'Creare provizion nou', + 'create_new_expense' => 'Creați un nou cont de cheltuieli', + 'create_new_revenue' => 'Creați un nou cont de venituri', + 'create_new_piggy_bank' => 'Creați o nouă pușculiță', + 'create_new_bill' => 'Creați o nouă factură', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Creați o nouă monedă', - 'store_currency' => 'Salvați o nouă monedă', - 'update_currency' => 'Actualizați monedă', - 'new_default_currency' => ':name este acum moneda implicită.', - 'cannot_delete_currency' => 'Nu se poate șterge :nume deoarece este încă în uz.', - 'cannot_delete_fallback_currency' => ':name este moneda de rezervă a sistemului și nu poate fi ștearsă.', - 'cannot_disable_currency_journals' => 'Nu se poate dezactiva :name, deoarece tranzacțiile încă îl utilizează.', - 'cannot_disable_currency_last_left' => 'Nu se poate dezactiva :name, deoarece este ultima monedă activată.', - 'cannot_disable_currency_account_meta' => 'Nu se poate dezactiva :name deoarece este utilizat în conturile de active.', - 'cannot_disable_currency_bills' => 'Nu se poate dezactiva :name deoarece este folosit în facturi.', - 'cannot_disable_currency_recurring' => 'Nu se poate dezactiva :name deoareceeste utilizat în tranzacții recurente.', - 'cannot_disable_currency_available_budgets' => 'Nu se poate dezactiva :name deoarece este folosit în bugetele disponibile.', - 'cannot_disable_currency_budget_limits' => 'Nu se poate dezactiva :name deoarece este utilizat în limite bugetare.', - 'cannot_disable_currency_current_default' => 'Nu se poate dezactiva :name deoarece este moneda implicită curentă.', - 'cannot_disable_currency_system_fallback' => 'Nu se poate dezactiva :name deoarece este moneda implicită a sistemului.', - 'disable_EUR_side_effects' => 'Euro este moneda de recuperare de urgență a sistemului. Dezactivarea acestuia poate avea efecte secundare nedorite și vă poate anula garanția.', - 'deleted_currency' => 'Moneda :name stearsă', - 'created_currency' => 'Moneda :name creată', - 'could_not_store_currency' => 'Nu am putut stoca o nouă monedă.', - 'updated_currency' => 'Moneda :name actualizată', - 'ask_site_owner' => 'Vă rugăm să întrebați :owner să adăuge, elimine sau editeze valute.', - 'currencies_intro' => 'Firefly III acceptă diferite valute pe care le puteți seta și activa aici.', - 'make_default_currency' => 'Faceți implicit', - 'default_currency' => 'implicit', - 'currency_is_disabled' => 'Dezactivat', - 'enable_currency' => 'Activează', - 'disable_currency' => 'Dezactivează', - 'currencies_default_disabled' => 'Cele mai multe dintre aceste monede sunt dezactivate în mod prestabilit. Pentru a le folosi, trebuie să le activați mai întâi.', - 'currency_is_now_enabled' => 'Moneda ":name" a fost activată', - 'currency_is_now_disabled' => 'Moneda ":name" a fost dezactivată', + 'create_currency' => 'Creați o nouă monedă', + 'store_currency' => 'Salvați o nouă monedă', + 'update_currency' => 'Actualizați monedă', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Nu se poate șterge :nume deoarece este încă în uz.', + 'cannot_delete_fallback_currency' => ':name este moneda de rezervă a sistemului și nu poate fi ștearsă.', + 'cannot_disable_currency_journals' => 'Nu se poate dezactiva :name, deoarece tranzacțiile încă îl utilizează.', + 'cannot_disable_currency_last_left' => 'Nu se poate dezactiva :name, deoarece este ultima monedă activată.', + 'cannot_disable_currency_account_meta' => 'Nu se poate dezactiva :name deoarece este utilizat în conturile de active.', + 'cannot_disable_currency_bills' => 'Nu se poate dezactiva :name deoarece este folosit în facturi.', + 'cannot_disable_currency_recurring' => 'Nu se poate dezactiva :name deoareceeste utilizat în tranzacții recurente.', + 'cannot_disable_currency_available_budgets' => 'Nu se poate dezactiva :name deoarece este folosit în bugetele disponibile.', + 'cannot_disable_currency_budget_limits' => 'Nu se poate dezactiva :name deoarece este utilizat în limite bugetare.', + 'cannot_disable_currency_current_default' => 'Nu se poate dezactiva :name deoarece este moneda implicită curentă.', + 'cannot_disable_currency_system_fallback' => 'Nu se poate dezactiva :name deoarece este moneda implicită a sistemului.', + 'disable_EUR_side_effects' => 'Euro este moneda de recuperare de urgență a sistemului. Dezactivarea acestuia poate avea efecte secundare nedorite și vă poate anula garanția.', + 'deleted_currency' => 'Moneda :name stearsă', + 'created_currency' => 'Moneda :name creată', + 'could_not_store_currency' => 'Nu am putut stoca o nouă monedă.', + 'updated_currency' => 'Moneda :name actualizată', + 'ask_site_owner' => 'Vă rugăm să întrebați :owner să adăuge, elimine sau editeze valute.', + 'currencies_intro' => 'Firefly III acceptă diferite valute pe care le puteți seta și activa aici.', + 'make_default_currency' => 'Faceți implicit', + 'default_currency' => 'implicit', + 'currency_is_disabled' => 'Dezactivat', + 'enable_currency' => 'Activează', + 'disable_currency' => 'Dezactivează', + 'currencies_default_disabled' => 'Cele mai multe dintre aceste monede sunt dezactivate în mod prestabilit. Pentru a le folosi, trebuie să le activați mai întâi.', + 'currency_is_now_enabled' => 'Moneda ":name" a fost activată', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Moneda ":name" a fost dezactivată', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Câmpuri obligatorii', - 'optionalFields' => 'Câmpuri opționale', - 'options' => 'Opțiuni', + 'mandatoryFields' => 'Câmpuri obligatorii', + 'optionalFields' => 'Câmpuri opționale', + 'options' => 'Opțiuni', // budgets: - 'daily_budgets' => 'Bugete zilnice', - 'weekly_budgets' => 'Bugete săptămânale', - 'monthly_budgets' => 'Bugete lunare', - 'quarterly_budgets' => 'Bugete trimestriale', - 'half_year_budgets' => 'Bugete semestriale', - 'yearly_budgets' => 'Bugete anuale', - 'other_budgets' => 'Bugete personalizate temporale', - 'budget_limit_not_in_range' => 'Această sumă se aplică de la :start la :end:', - 'total_available_budget' => 'Buget total disponibil (între :start și :end)', - 'total_available_budget_in_currency' => 'Buget total disponibil în :currency', - 'see_below' => 'vezi mai jos', - 'create_new_budget' => 'Creați un nou budget', - 'store_new_budget' => 'Salvați un nou budget', - 'stored_new_budget' => 'Bugetul ":name" a fost salvat', - 'available_between' => 'Disponibil între :start și :end', - 'transactionsWithoutBudget' => 'Cheltuieli fără buget', - 'transactions_no_budget' => 'Cheltuieli fără buget între :start și :end', - 'spent_between' => 'Cheltuit între :start și :end', - 'set_available_amount' => 'Setați suma disponibilă', - 'update_available_amount' => 'Actualizați suma disponibilă', - 'ab_basic_modal_explain' => 'Utilizați acest formular pentru a indica cât de mult doriți să bugeți (în total, în :currency) în perioada indicată.', - 'createBudget' => 'Buget nou', - 'invalid_currency' => 'Aceasta este o monedă nevalidă', - 'invalid_amount' => 'Vă rugăm să introduceţi o sumă', - 'set_ab' => 'Suma disponibilă a bugetului a fost stabilită', - 'updated_ab' => 'Suma disponibilă a bugetului a fost actualizată', - 'deleted_ab' => 'Suma disponibilă a bugetului a fost ștearsă', - 'deleted_bl' => 'Suma disponibilă a bugetului a fost îndepărtat', - 'alt_currency_ab_create' => 'Setați bugetul disponibil într-o altă monedă', - 'bl_create_btn' => 'Setați bugetul într-o altă monedă', - 'inactiveBudgets' => 'Bugete inactive', - 'without_budget_between' => 'Tranzacții fără un buget între :start și :end', - 'delete_budget' => 'Șterge buget ":name"', - 'deleted_budget' => 'Buget ":name" șters', - 'edit_budget' => 'Editați buget ":name"', - 'updated_budget' => 'Buget ":name" actualizat', - 'update_amount' => 'Actualizați suma', - 'update_budget' => 'Actualizați bugetul', - 'update_budget_amount_range' => 'Actualizați suma disponibilă între :start și :end', - 'set_budget_limit_title' => 'Setați suma bugetată pentru bugetul :budget între :start și :end', - 'set_budget_limit' => 'Setați suma bugetată', - 'budget_period_navigator' => 'Navigator pe perioada', - 'info_on_available_amount' => 'Ce am disponibil?', - 'available_amount_indication' => 'Utilizați aceste sume pentru a obține o indicație cu privire la bugetul dvs. total.', - 'suggested' => 'Sugerat', - 'average_between' => 'Media între :start și :end', - 'transferred_in' => 'Transferat (în)', - 'transferred_away' => 'Transferat (departe)', - 'auto_budget_none' => 'Fără auto-buget', - 'auto_budget_reset' => 'Stabiliți o sumă fixă pentru fiecare perioadă', - 'auto_budget_rollover' => 'Adaugă o sumă în fiecare perioadă', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Zilnic', - 'auto_budget_period_weekly' => 'Săptămânal', - 'auto_budget_period_monthly' => 'Lunar', - 'auto_budget_period_quarterly' => 'Trimestrial', - 'auto_budget_period_half_year' => 'Fiecare jumătate de an', - 'auto_budget_period_yearly' => 'Anual', - 'auto_budget_help' => 'Poți citi mai multe despre această caracteristică din ajutor. Apasă pe icoana din dreapta sus (?).', - 'auto_budget_reset_icon' => 'Acest buget va fi stabilit periodic', - 'auto_budget_rollover_icon' => 'Suma bugetului va crește periodic', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Șterge suma înscrisă în :currency', + 'daily_budgets' => 'Bugete zilnice', + 'weekly_budgets' => 'Bugete săptămânale', + 'monthly_budgets' => 'Bugete lunare', + 'quarterly_budgets' => 'Bugete trimestriale', + 'half_year_budgets' => 'Bugete semestriale', + 'yearly_budgets' => 'Bugete anuale', + 'other_budgets' => 'Bugete personalizate temporale', + 'budget_limit_not_in_range' => 'Această sumă se aplică de la :start la :end:', + 'total_available_budget' => 'Buget total disponibil (între :start și :end)', + 'total_available_budget_in_currency' => 'Buget total disponibil în :currency', + 'see_below' => 'vezi mai jos', + 'create_new_budget' => 'Creați un nou budget', + 'store_new_budget' => 'Salvați un nou budget', + 'stored_new_budget' => 'Bugetul ":name" a fost salvat', + 'available_between' => 'Disponibil între :start și :end', + 'transactionsWithoutBudget' => 'Cheltuieli fără buget', + 'transactions_no_budget' => 'Cheltuieli fără buget între :start și :end', + 'spent_between' => 'Cheltuit între :start și :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Setați suma disponibilă', + 'update_available_amount' => 'Actualizați suma disponibilă', + 'ab_basic_modal_explain' => 'Utilizați acest formular pentru a indica cât de mult doriți să bugeți (în total, în :currency) în perioada indicată.', + 'createBudget' => 'Buget nou', + 'invalid_currency' => 'Aceasta este o monedă nevalidă', + 'invalid_amount' => 'Vă rugăm să introduceţi o sumă', + 'set_ab' => 'Suma disponibilă a bugetului a fost stabilită', + 'updated_ab' => 'Suma disponibilă a bugetului a fost actualizată', + 'deleted_ab' => 'Suma disponibilă a bugetului a fost ștearsă', + 'deleted_bl' => 'Suma disponibilă a bugetului a fost îndepărtat', + 'alt_currency_ab_create' => 'Setați bugetul disponibil într-o altă monedă', + 'bl_create_btn' => 'Setați bugetul într-o altă monedă', + 'inactiveBudgets' => 'Bugete inactive', + 'without_budget_between' => 'Tranzacții fără un buget între :start și :end', + 'delete_budget' => 'Șterge buget ":name"', + 'deleted_budget' => 'Buget ":name" șters', + 'edit_budget' => 'Editați buget ":name"', + 'updated_budget' => 'Buget ":name" actualizat', + 'update_amount' => 'Actualizați suma', + 'update_budget' => 'Actualizați bugetul', + 'update_budget_amount_range' => 'Actualizați suma disponibilă între :start și :end', + 'set_budget_limit_title' => 'Setați suma bugetată pentru bugetul :budget între :start și :end', + 'set_budget_limit' => 'Setați suma bugetată', + 'budget_period_navigator' => 'Navigator pe perioada', + 'info_on_available_amount' => 'Ce am disponibil?', + 'available_amount_indication' => 'Utilizați aceste sume pentru a obține o indicație cu privire la bugetul dvs. total.', + 'suggested' => 'Sugerat', + 'average_between' => 'Media între :start și :end', + 'transferred_in' => 'Transferat (în)', + 'transferred_away' => 'Transferat (departe)', + 'auto_budget_none' => 'Fără auto-buget', + 'auto_budget_reset' => 'Stabiliți o sumă fixă pentru fiecare perioadă', + 'auto_budget_rollover' => 'Adaugă o sumă în fiecare perioadă', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Zilnic', + 'auto_budget_period_weekly' => 'Săptămânal', + 'auto_budget_period_monthly' => 'Lunar', + 'auto_budget_period_quarterly' => 'Trimestrial', + 'auto_budget_period_half_year' => 'Fiecare jumătate de an', + 'auto_budget_period_yearly' => 'Anual', + 'auto_budget_help' => 'Poți citi mai multe despre această caracteristică din ajutor. Apasă pe icoana din dreapta sus (?).', + 'auto_budget_reset_icon' => 'Acest buget va fi stabilit periodic', + 'auto_budget_rollover_icon' => 'Suma bugetului va crește periodic', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Șterge suma înscrisă în :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Nu se aşteaptă această perioadă', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Nu (încă)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Factura se potrivește tranzacțiilor între :low și :high.', - 'running_again_loss' => 'Tranzacțiile legate anterior de această factură își pot pierde conexiunea, dacă acestea nu mai corespund cu regula (regulile).', - 'bill_related_rules' => 'Reguli legate de această factură', - 'repeats' => 'Repetă', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Tranzacții conectate', - 'auto_match_on' => 'Potrivire automată făcută de Firefly III', - 'auto_match_off' => 'Potrivirea nu este făcută automat de Firefly III', - 'next_expected_match' => 'Următoarea potrivire asteptată', - 'delete_bill' => 'Șterge factura ":name"', - 'deleted_bill' => 'Factura ":name" stearsă', - 'edit_bill' => 'Editați factura ":name"', - 'more' => 'Mai mult', - 'rescan_old' => 'Rulează din nou regulile pentru toate tranzacțiile', - 'update_bill' => 'Actualizați factura', - 'updated_bill' => 'Factura ":name" actualizată', - 'store_new_bill' => 'Salvați o nouă factură', - 'stored_new_bill' => 'Factura noua ":name" a fost salvată', - 'cannot_scan_inactive_bill' => 'Facturile inactive nu pot fi scanate.', - 'rescanned_bill' => 'Recanați totul și conectați :count tranzacție la factură. | Recanați totul și conectați :count tranzacții la factură.', - 'average_bill_amount_year' => 'Suma medie a facturilor (:year)', - 'average_bill_amount_overall' => 'Suma medie a facturilor (în ansamblu)', - 'bill_is_active' => 'Factura este activă', - 'bill_expected_between' => 'Așteptat între :start și :end', - 'bill_will_automatch' => 'Factura se va conecta automat la tranzacții ce se potrivesc', - 'skips_over' => 'sari peste', - 'bill_store_error' => 'A apărut o eroare neașteptată în timpul stocării facturii noi. Verificați log-urile', - 'list_inactive_rule' => 'regulă inactivă', - 'bill_edit_rules' => 'Firefly III va încerca să editeze și regula legată de această factură. Dacă ați editat chiar dvs. această regulă, Firefly III nu va schimba nimic. Firefly III va încerca să editeze și regulile :count legate de această factură. Totuși, dacă ați editat aceste reguli, Firefly III nu va schimba nimic.', - 'bill_expected_date' => 'Se așteaptă :date', - 'bill_expected_date_js' => 'Așteptat {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Plătit pe {date}', - 'bill_repeats_weekly' => 'Se repetă săptămânal', - 'bill_repeats_monthly' => 'Se repetă lunar', - 'bill_repeats_quarterly' => 'Repetă trimestrial', - 'bill_repeats_half-year' => 'Se repetă la fiecare jumătate de an', - 'bill_repeats_yearly' => 'Se repetă anual', - 'bill_repeats_weekly_other' => 'Se repetă in fiecare săptămâna', - 'bill_repeats_monthly_other' => 'Se repetă la fiecare altă lună', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Repeats yearly', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Subscriptions', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Forever', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Nu se aşteaptă această perioadă', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Nu (încă)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Factura se potrivește tranzacțiilor între :low și :high.', + 'running_again_loss' => 'Tranzacțiile legate anterior de această factură își pot pierde conexiunea, dacă acestea nu mai corespund cu regula (regulile).', + 'bill_related_rules' => 'Reguli legate de această factură', + 'repeats' => 'Repetă', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Tranzacții conectate', + 'auto_match_on' => 'Potrivire automată făcută de Firefly III', + 'auto_match_off' => 'Potrivirea nu este făcută automat de Firefly III', + 'next_expected_match' => 'Următoarea potrivire asteptată', + 'delete_bill' => 'Șterge factura ":name"', + 'deleted_bill' => 'Factura ":name" stearsă', + 'edit_bill' => 'Editați factura ":name"', + 'more' => 'Mai mult', + 'rescan_old' => 'Rulează din nou regulile pentru toate tranzacțiile', + 'update_bill' => 'Actualizați factura', + 'updated_bill' => 'Factura ":name" actualizată', + 'store_new_bill' => 'Salvați o nouă factură', + 'stored_new_bill' => 'Factura noua ":name" a fost salvată', + 'cannot_scan_inactive_bill' => 'Facturile inactive nu pot fi scanate.', + 'rescanned_bill' => 'Recanați totul și conectați :count tranzacție la factură. | Recanați totul și conectați :count tranzacții la factură.', + 'average_bill_amount_year' => 'Suma medie a facturilor (:year)', + 'average_bill_amount_overall' => 'Suma medie a facturilor (în ansamblu)', + 'bill_is_active' => 'Factura este activă', + 'bill_expected_between' => 'Așteptat între :start și :end', + 'bill_will_automatch' => 'Factura se va conecta automat la tranzacții ce se potrivesc', + 'skips_over' => 'sari peste', + 'bill_store_error' => 'A apărut o eroare neașteptată în timpul stocării facturii noi. Verificați log-urile', + 'list_inactive_rule' => 'regulă inactivă', + 'bill_edit_rules' => 'Firefly III va încerca să editeze și regula legată de această factură. Dacă ați editat chiar dvs. această regulă, Firefly III nu va schimba nimic. Firefly III va încerca să editeze și regulile :count legate de această factură. Totuși, dacă ați editat aceste reguli, Firefly III nu va schimba nimic.', + 'bill_expected_date' => 'Se așteaptă :date', + 'bill_expected_date_js' => 'Așteptat {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Plătit pe {date}', + 'bill_repeats_weekly' => 'Se repetă săptămânal', + 'bill_repeats_monthly' => 'Se repetă lunar', + 'bill_repeats_quarterly' => 'Repetă trimestrial', + 'bill_repeats_half-year' => 'Se repetă la fiecare jumătate de an', + 'bill_repeats_yearly' => 'Se repetă anual', + 'bill_repeats_weekly_other' => 'Se repetă in fiecare săptămâna', + 'bill_repeats_monthly_other' => 'Se repetă la fiecare altă lună', + 'bill_repeats_quarterly_other' => 'Repeats every other quarter', + 'bill_repeats_half-year_other' => 'Repeats yearly', + 'bill_repeats_yearly_other' => 'Repeats every other year', + 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', + 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', + 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', + 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', + 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', + 'subscriptions' => 'Subscriptions', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Forever', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'Aveți un cont :count inactiv (arhivat), pe care îl puteți vizualiza pe această pagină separată. Aveți :count inactive (arhivate), pe care le puteți vizualiza pe această pagină separată.', - 'all_accounts_inactive' => 'Acestea sunt conturile dvs. inactive.', - 'active_account_link' => 'Acest link revine la conturile dvs. active.', - 'account_missing_transaction' => 'Contul #:id (":name") nu pot fi vizualizate direct.', - 'cc_monthly_payment_date_help' => 'Selectați în orice an și în orice lună, acesta va fi ignorat oricum. Numai ziua lunii este relevantă.', - 'details_for_asset' => 'Detalii pentru contul de active ":name"', - 'details_for_expense' => 'Detalii pentru contul de cheltuieli ":name"', - 'details_for_revenue' => 'Detalii pentru contul de venituri ":name"', - 'details_for_cash' => 'Detalii pentru contul de numerar ":name"', - 'store_new_asset_account' => 'Salvați un nou cont de active', - 'store_new_expense_account' => 'Salvați un nou cont de cheltuieli', - 'store_new_revenue_account' => 'Salvați un nou cont de venituri', - 'edit_asset_account' => 'Editați contul de active ":name"', - 'edit_expense_account' => 'Editați contul de cheltuieli ":name"', - 'edit_revenue_account' => 'Editați contul de venituri ":name"', - 'delete_asset_account' => 'Șterge contul de active ":name"', - 'delete_expense_account' => 'Șterge contul de cheltuieli ":name"', - 'delete_revenue_account' => 'Șterge contul de venituri ":name"', - 'delete_liabilities_account' => 'Șterge provizionul ":name"', - 'asset_deleted' => 'Contul de active ":name" a fost șters cu succes', - 'account_deleted' => 'Cont ":name" șters cu succes', - 'expense_deleted' => 'Contul de cheltuieli ":name" a fost șters cu succes', - 'revenue_deleted' => 'Contul de venituri ":name" a fost șters cu succes', - 'update_asset_account' => 'Actualizați contul de active', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => 'Actualizați provizionul', - 'update_expense_account' => 'Actualizați cont de cheltuieli', - 'update_revenue_account' => 'Actualizați cont de venituri', - 'make_new_asset_account' => 'Creați un nou cont de active', - 'make_new_expense_account' => 'Creați un nou cont de cheltuieli', - 'make_new_revenue_account' => 'Creați un nou cont de venituri', - 'make_new_liabilities_account' => 'Creați un nou provizion', - 'asset_accounts' => 'Conturile de active', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Conturi de active (inactive)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Conturi de cheltuieli', - 'expense_accounts_inactive' => 'Conturi de cheltuieli (inactive)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Conturi de venituri', - 'revenue_accounts_inactive' => 'Conturi de venituri (inactive)', - 'cash_accounts' => 'Conturi de numerar', - 'Cash account' => 'Cont de numerar', - 'liabilities_accounts' => 'Provizioane', - 'liabilities_accounts_inactive' => 'Pasive (inactive)', - 'reconcile_account' => 'Reconciliază/Potrivește contul ":account"', - 'overview_of_reconcile_modal' => 'Privire de ansamblu asupra reconcilierii', - 'delete_reconciliation' => 'Șterge reconcilierea', - 'update_reconciliation' => 'Actualizați reconcilierea', - 'amount_cannot_be_zero' => 'Suma nu poate fi zero', - 'end_of_reconcile_period' => 'Sfârșitul perioadei de reconciliere: :period', - 'start_of_reconcile_period' => 'Începutul perioadei de reconciliere: :period', - 'start_balance' => 'Sold de început', - 'end_balance' => 'Sold final', - 'update_balance_dates_instruction' => 'Potriviți sumele și datele de mai sus la extrasul de cont bancar și apăsați pe "Porniți reconcilierea"', - 'select_transactions_instruction' => 'Selectați tranzacțiile care apar în extrasul dvs. bancar.', - 'select_range_and_balance' => 'Mai întâi verificați intervalul de date și balanțele. Apoi apăsați "Porniți reconcilierea"', - 'date_change_instruction' => 'Dacă schimbați acum intervalul de date, orice progres va fi pierdut.', - 'update_selection' => 'Actualizați selectaia', - 'store_reconcile' => 'Salvați reconcilierea', - 'reconciliation_transaction' => 'Tranzacție de reconciliere', - 'Reconciliation' => 'Reconciliere', - 'reconciliation' => 'Reconciliere', - 'reconcile_options' => 'Optiuni reconciliere', - 'reconcile_range' => 'Domeniu de reconciliere', - 'start_reconcile' => 'Porniți reconcilierea', - 'cash_account_type' => 'Numerar', - 'cash' => 'numerar', - 'cant_find_redirect_account' => 'Firefly III a încercat să vă redirecționeze, dar nu a putut. Îmi pare rău pentru asta. Înapoi la index.', - 'account_type' => 'Tip cont', - 'save_transactions_by_moving' => 'Salvați această tranzacție mutând-o într-un alt cont: | Salvați aceste tranzacții prin mutarea lor într-un alt cont:', - 'save_transactions_by_moving_js' => 'Fără tranzacții* Salvați această tranzacție mutând-o în alt cont. | Salvați aceste tranzacții mutându-le într-un alt cont.', - 'stored_new_account' => 'Cont nou ":name" salvat!', - 'stored_new_account_js' => 'Cont nou "{name}" stocat!', - 'updated_account' => 'Contul ":name" actualizat', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Opțiuni pentru carduri de credit', - 'no_transactions_account' => 'Nu există tranzacții (în această perioadă) pentru contul de activ ":name".', - 'no_transactions_period' => 'Nu există nicio tranzacție (in această perioadă).', - 'no_data_for_chart' => 'Nu există suficiente informații (încă) pentru a genera acest grafic.', - 'select_at_least_one_account' => 'Selectați cel puțin un cont de active', - 'select_at_least_one_category' => 'Selectați cel puțin o categorie', - 'select_at_least_one_budget' => 'Selectați cel puțin un buget', - 'select_at_least_one_tag' => 'Selectați cel puțin o eticheta', - 'select_at_least_one_expense' => 'Selectați cel puțin o combinație cont de cheltuieli/venituri. Dacă nu ai încă nici una (lista este goală) acest raport nu este disponibil.', - 'account_default_currency' => 'Aceasta va fi moneda implicită asociată acestui cont.', - 'reconcile_has_more' => 'Registrul dvs are mai mulți bani în ea decât banca dvs. susține că ar trebui să aveți. Există mai multe opțiuni. Alegeți ce să faceți. Apoi, apăsați "Confirmați reconcilierea".', - 'reconcile_has_less' => 'Registrul dvs are mai puțini bani în ea decât banca dvs. susține că ar trebui să aveți. Există mai multe opțiuni. Alegeți ce să faceți. Apoi, apăsați "Confirmați reconcilierea".', - 'reconcile_is_equal' => 'Registrul si declarațiile dvs. de cont se potrivesc. Nu e nimic de facut. Te rog apasă "Confirmați reconcilierea" to confirm your input.', - 'create_pos_reconcile_transaction' => 'Goliți tranzacțiile selectate și creați o corecție adăugând :amount la acest cont de active.', - 'create_neg_reconcile_transaction' => 'Goliți tranzacțiile selectate și creați o corecție ștergând :amount din acest cont de active.', - 'reconcile_do_nothing' => 'Goliți tranzacțiile selectate, dar nu corectați.', - 'reconcile_go_back' => 'Puteți modifica sau șterge întotdeauna o corecție mai târziu.', - 'must_be_asset_account' => 'Puteți reconcilia numai contul de active', - 'reconciliation_stored' => 'Reconciliere salvată', - 'reconciliation_error' => 'Din cauza unei erori tranzacțiile au fost marcate ca reconciliate, dar corectarea nu a fost stocată: :error.', - 'reconciliation_transaction_title' => 'Reconciliere (:from la :to)', - 'sum_of_reconciliation' => 'Suma împăcărilor', - 'reconcile_this_account' => 'Reconciliați acest cont', - 'reconcile' => 'Reconcilia', - 'show' => 'Afișează', - 'confirm_reconciliation' => 'Confirmați reconcilierea', - 'submitted_start_balance' => 'Balanța inițială afișată', - 'selected_transactions' => 'Tranzacții selectate (:count)', - 'already_cleared_transactions' => 'Au fost deja tranzacții eliminate (:count)', - 'submitted_end_balance' => 'Sold final afițat', - 'initial_balance_description' => 'Sold inițial pentru ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'necunoscut', - 'interest_calc_daily' => 'Pe zi', - 'interest_calc_monthly' => 'Pe lună', - 'interest_calc_yearly' => 'Pe an', - 'interest_calc_weekly' => 'Pe săptămână', - 'interest_calc_half-year' => 'Pe jumătate de an', - 'interest_calc_quarterly' => 'Pe trimestru', - 'initial_balance_account' => 'Bilanțul inițial al contului :account', - 'list_options' => 'Opțiuni listă', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'Aveți un cont :count inactiv (arhivat), pe care îl puteți vizualiza pe această pagină separată. Aveți :count inactive (arhivate), pe care le puteți vizualiza pe această pagină separată.', + 'all_accounts_inactive' => 'Acestea sunt conturile dvs. inactive.', + 'active_account_link' => 'Acest link revine la conturile dvs. active.', + 'account_missing_transaction' => 'Contul #:id (":name") nu pot fi vizualizate direct.', + 'cc_monthly_payment_date_help' => 'Selectați în orice an și în orice lună, acesta va fi ignorat oricum. Numai ziua lunii este relevantă.', + 'details_for_asset' => 'Detalii pentru contul de active ":name"', + 'details_for_expense' => 'Detalii pentru contul de cheltuieli ":name"', + 'details_for_revenue' => 'Detalii pentru contul de venituri ":name"', + 'details_for_cash' => 'Detalii pentru contul de numerar ":name"', + 'store_new_asset_account' => 'Salvați un nou cont de active', + 'store_new_expense_account' => 'Salvați un nou cont de cheltuieli', + 'store_new_revenue_account' => 'Salvați un nou cont de venituri', + 'edit_asset_account' => 'Editați contul de active ":name"', + 'edit_expense_account' => 'Editați contul de cheltuieli ":name"', + 'edit_revenue_account' => 'Editați contul de venituri ":name"', + 'delete_asset_account' => 'Șterge contul de active ":name"', + 'delete_expense_account' => 'Șterge contul de cheltuieli ":name"', + 'delete_revenue_account' => 'Șterge contul de venituri ":name"', + 'delete_liabilities_account' => 'Șterge provizionul ":name"', + 'asset_deleted' => 'Contul de active ":name" a fost șters cu succes', + 'account_deleted' => 'Cont ":name" șters cu succes', + 'expense_deleted' => 'Contul de cheltuieli ":name" a fost șters cu succes', + 'revenue_deleted' => 'Contul de venituri ":name" a fost șters cu succes', + 'update_asset_account' => 'Actualizați contul de active', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => 'Actualizați provizionul', + 'update_expense_account' => 'Actualizați cont de cheltuieli', + 'update_revenue_account' => 'Actualizați cont de venituri', + 'make_new_asset_account' => 'Creați un nou cont de active', + 'make_new_expense_account' => 'Creați un nou cont de cheltuieli', + 'make_new_revenue_account' => 'Creați un nou cont de venituri', + 'make_new_liabilities_account' => 'Creați un nou provizion', + 'asset_accounts' => 'Conturile de active', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Conturi de active (inactive)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Conturi de cheltuieli', + 'expense_accounts_inactive' => 'Conturi de cheltuieli (inactive)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Conturi de venituri', + 'revenue_accounts_inactive' => 'Conturi de venituri (inactive)', + 'cash_accounts' => 'Conturi de numerar', + 'Cash account' => 'Cont de numerar', + 'liabilities_accounts' => 'Provizioane', + 'liabilities_accounts_inactive' => 'Pasive (inactive)', + 'reconcile_account' => 'Reconciliază/Potrivește contul ":account"', + 'overview_of_reconcile_modal' => 'Privire de ansamblu asupra reconcilierii', + 'delete_reconciliation' => 'Șterge reconcilierea', + 'update_reconciliation' => 'Actualizați reconcilierea', + 'amount_cannot_be_zero' => 'Suma nu poate fi zero', + 'end_of_reconcile_period' => 'Sfârșitul perioadei de reconciliere: :period', + 'start_of_reconcile_period' => 'Începutul perioadei de reconciliere: :period', + 'start_balance' => 'Sold de început', + 'end_balance' => 'Sold final', + 'update_balance_dates_instruction' => 'Potriviți sumele și datele de mai sus la extrasul de cont bancar și apăsați pe "Porniți reconcilierea"', + 'select_transactions_instruction' => 'Selectați tranzacțiile care apar în extrasul dvs. bancar.', + 'select_range_and_balance' => 'Mai întâi verificați intervalul de date și balanțele. Apoi apăsați "Porniți reconcilierea"', + 'date_change_instruction' => 'Dacă schimbați acum intervalul de date, orice progres va fi pierdut.', + 'update_selection' => 'Actualizați selectaia', + 'store_reconcile' => 'Salvați reconcilierea', + 'reconciliation_transaction' => 'Tranzacție de reconciliere', + 'Reconciliation' => 'Reconciliere', + 'reconciliation' => 'Reconciliere', + 'reconcile_options' => 'Optiuni reconciliere', + 'reconcile_range' => 'Domeniu de reconciliere', + 'start_reconcile' => 'Porniți reconcilierea', + 'cash_account_type' => 'Numerar', + 'cash' => 'numerar', + 'cant_find_redirect_account' => 'Firefly III a încercat să vă redirecționeze, dar nu a putut. Îmi pare rău pentru asta. Înapoi la index.', + 'account_type' => 'Tip cont', + 'save_transactions_by_moving' => 'Salvați această tranzacție mutând-o într-un alt cont: | Salvați aceste tranzacții prin mutarea lor într-un alt cont:', + 'save_transactions_by_moving_js' => 'Fără tranzacții* Salvați această tranzacție mutând-o în alt cont. | Salvați aceste tranzacții mutându-le într-un alt cont.', + 'stored_new_account' => 'Cont nou ":name" salvat!', + 'stored_new_account_js' => 'Cont nou "{name}" stocat!', + 'updated_account' => 'Contul ":name" actualizat', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Opțiuni pentru carduri de credit', + 'no_transactions_account' => 'Nu există tranzacții (în această perioadă) pentru contul de activ ":name".', + 'no_transactions_period' => 'Nu există nicio tranzacție (in această perioadă).', + 'no_data_for_chart' => 'Nu există suficiente informații (încă) pentru a genera acest grafic.', + 'select_at_least_one_account' => 'Selectați cel puțin un cont de active', + 'select_at_least_one_category' => 'Selectați cel puțin o categorie', + 'select_at_least_one_budget' => 'Selectați cel puțin un buget', + 'select_at_least_one_tag' => 'Selectați cel puțin o eticheta', + 'select_at_least_one_expense' => 'Selectați cel puțin o combinație cont de cheltuieli/venituri. Dacă nu ai încă nici una (lista este goală) acest raport nu este disponibil.', + 'account_default_currency' => 'Aceasta va fi moneda implicită asociată acestui cont.', + 'reconcile_has_more' => 'Registrul dvs are mai mulți bani în ea decât banca dvs. susține că ar trebui să aveți. Există mai multe opțiuni. Alegeți ce să faceți. Apoi, apăsați "Confirmați reconcilierea".', + 'reconcile_has_less' => 'Registrul dvs are mai puțini bani în ea decât banca dvs. susține că ar trebui să aveți. Există mai multe opțiuni. Alegeți ce să faceți. Apoi, apăsați "Confirmați reconcilierea".', + 'reconcile_is_equal' => 'Registrul si declarațiile dvs. de cont se potrivesc. Nu e nimic de facut. Te rog apasă "Confirmați reconcilierea" to confirm your input.', + 'create_pos_reconcile_transaction' => 'Goliți tranzacțiile selectate și creați o corecție adăugând :amount la acest cont de active.', + 'create_neg_reconcile_transaction' => 'Goliți tranzacțiile selectate și creați o corecție ștergând :amount din acest cont de active.', + 'reconcile_do_nothing' => 'Goliți tranzacțiile selectate, dar nu corectați.', + 'reconcile_go_back' => 'Puteți modifica sau șterge întotdeauna o corecție mai târziu.', + 'must_be_asset_account' => 'Puteți reconcilia numai contul de active', + 'reconciliation_stored' => 'Reconciliere salvată', + 'reconciliation_error' => 'Din cauza unei erori tranzacțiile au fost marcate ca reconciliate, dar corectarea nu a fost stocată: :error.', + 'reconciliation_transaction_title' => 'Reconciliere (:from la :to)', + 'sum_of_reconciliation' => 'Suma împăcărilor', + 'reconcile_this_account' => 'Reconciliați acest cont', + 'reconcile' => 'Reconcilia', + 'show' => 'Afișează', + 'confirm_reconciliation' => 'Confirmați reconcilierea', + 'submitted_start_balance' => 'Balanța inițială afișată', + 'selected_transactions' => 'Tranzacții selectate (:count)', + 'already_cleared_transactions' => 'Au fost deja tranzacții eliminate (:count)', + 'submitted_end_balance' => 'Sold final afițat', + 'initial_balance_description' => 'Sold inițial pentru ":account"', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'necunoscut', + 'interest_calc_daily' => 'Pe zi', + 'interest_calc_monthly' => 'Pe lună', + 'interest_calc_yearly' => 'Pe an', + 'interest_calc_weekly' => 'Pe săptămână', + 'interest_calc_half-year' => 'Pe jumătate de an', + 'interest_calc_quarterly' => 'Pe trimestru', + 'initial_balance_account' => 'Bilanțul inițial al contului :account', + 'list_options' => 'Opțiuni listă', // categories: - 'new_category' => 'Categorie nouă', - 'create_new_category' => 'Creați o nouă categorie', - 'without_category' => 'Fară o categorie', - 'update_category' => 'Actualizați categoria', - 'updated_category' => 'Categorie ":name" actualizată', - 'categories' => 'Categorii', - 'edit_category' => 'Editați categoria ":name"', - 'no_category' => '(nici o categorie)', - 'unknown_category_plain' => 'No category', - 'category' => 'Categorie', - 'delete_category' => 'Șterge categoria ":name"', - 'deleted_category' => 'Categorie ":name" ștearsă', - 'store_category' => 'Salvați o nouă categorie', - 'stored_category' => 'Categorie nouă ":name" salvată', - 'without_category_between' => 'Fără categorie între :start și :end', + 'new_category' => 'Categorie nouă', + 'create_new_category' => 'Creați o nouă categorie', + 'without_category' => 'Fară o categorie', + 'update_category' => 'Actualizați categoria', + 'updated_category' => 'Categorie ":name" actualizată', + 'categories' => 'Categorii', + 'edit_category' => 'Editați categoria ":name"', + 'no_category' => '(nici o categorie)', + 'unknown_category_plain' => 'No category', + 'category' => 'Categorie', + 'delete_category' => 'Șterge categoria ":name"', + 'deleted_category' => 'Categorie ":name" ștearsă', + 'store_category' => 'Salvați o nouă categorie', + 'stored_category' => 'Categorie nouă ":name" salvată', + 'without_category_between' => 'Fără categorie între :start și :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Actualizați retragere', - 'update_deposit' => 'Actualizați depozit', - 'update_transaction' => 'Actualizați tranzacția', - 'update_transfer' => 'Actualizați transfer', - 'updated_withdrawal' => 'Retragerea ":description" actualizată', - 'updated_deposit' => 'Depozitul ":description" actualizat', - 'updated_transfer' => 'Transferul ":description" actualizat', - 'no_changes_withdrawal' => 'Retragerea ":description" nu a fost modificată.', - 'no_changes_deposit' => 'Depozitul ":description" nu a fost modificat.', - 'no_changes_transfer' => 'Transferul ":description" nu a fost modificat.', - 'delete_withdrawal' => 'Șterge retragere ":description"', - 'delete_deposit' => 'Șterge depozit ":description"', - 'delete_transfer' => 'Șterge transfer ":description"', - 'deleted_withdrawal' => 'Retragerea ":description" ștearsă cu succes', - 'deleted_deposit' => 'Depozitul ":description" șters cu succes', - 'deleted_transfer' => 'Transferul ":description" șters cu succes', - 'deleted_reconciliation' => 'Tranzacție de reconciliere ":description" a fost ștearsă cu succes', - 'stored_journal' => 'A fost creată cu succes o tranzacție nouă ":description"', - 'stored_journal_no_descr' => 'Tranzacția s-a creat cu succes', - 'updated_journal_no_descr' => 'Tranzacția s-a actualizat cu succes', - 'select_transactions' => 'Selectați tranzacțiile', - 'rule_group_select_transactions' => 'Aplică ":title" la tranzacții', - 'rule_select_transactions' => 'Aplică ":title" la tranzacții', - 'stop_selection' => 'Opriți selectarea tranzacțiilor', - 'reconcile_selected' => 'Reconcilia', - 'mass_delete_journals' => 'Ștergeți un număr de tranzacții', - 'mass_edit_journals' => 'Editați un număr de tranzacții', - 'mass_bulk_journals' => 'Editarea în bloc un număr de tranzacții', - 'mass_bulk_journals_explain' => 'Acest formular vă permite să modificați proprietățile tranzacțiilor enumerate mai jos într-o actualizare completă. Toate tranzacțiile din tabel vor fi actualizate atunci când modificați parametrii pe care îi vedeți aici.', - 'part_of_split' => 'Această tranzacție face parte dintr-o tranzacție divizată. Dacă nu ați selectat toate divizările, puteți ajunge să schimbați doar jumătate din tranzacție.', - 'bulk_set_new_values' => 'Utilizați input-urile de mai jos pentru a seta noi valori. Dacă le lăsați goale, vor fi goale toate. De asemenea, rețineți că doar bugetele vor primi un buget.', - 'no_bulk_category' => 'Nu actualizați categoria', - 'no_bulk_budget' => 'Nu actualizați budgetul', - 'no_bulk_tags' => 'Nu actualizați etichetă(e) ', - 'replace_with_these_tags' => 'Înlocuiește cu aceste etichete', - 'append_these_tags' => 'Adaugă aceste etichete', - 'mass_edit' => 'Editează individual', - 'bulk_edit' => 'Editează cele selectate in masă (bulk)', - 'mass_delete' => 'Șterge elementele selectate', - 'cannot_edit_other_fields' => 'Nu poți edita alte câmpuri decât cele de aici, pentru că nu există loc pentru a le arăta. Urmați linkul și editați-l câte unul, dacă aveți nevoie să editați aceste câmpuri.', - 'cannot_change_amount_reconciled' => 'Nu puteți modifica suma tranzacțiilor reconciliate.', - 'no_budget' => '(nici un buget)', - 'no_bill' => '(fără factură)', - 'account_per_budget' => 'Cont pe buget', - 'account_per_category' => 'Cont pe categorie', - 'create_new_object' => 'Creează', - 'empty' => '(gol)', - 'all_other_budgets' => '(toate celelalte bugete)', - 'all_other_accounts' => '(toate celelalte conturi)', - 'expense_per_source_account' => 'Cheltuieli pe contul sursă', - 'expense_per_destination_account' => 'Cheltuieli pe contul de destinație', - 'income_per_destination_account' => 'Venit pe contul de destinație', - 'spent_in_specific_category' => 'Cheltuit în categoria ":category"', - 'earned_in_specific_category' => 'Câștigat în categoria ":category"', - 'spent_in_specific_tag' => 'Cheltuit in eticheta ":tag"', - 'earned_in_specific_tag' => 'Câștigat in eticheta ":tag"', - 'income_per_source_account' => 'Venit pe cont sursă', - 'average_spending_per_destination' => 'Cheltuieli medii pe contul de destinație', - 'average_spending_per_source' => 'Cheltuieli medii pe contul sursă', - 'average_earning_per_source' => 'Venitul mediu pe cont sursă', - 'average_earning_per_destination' => 'Venitul mediu pe cont de destinație', - 'account_per_tag' => 'Cont pe etichetă', - 'tag_report_expenses_listed_once' => 'Cheltuielile și veniturile nu sunt listate niciodată de două ori. Dacă o tranzacție are mai multe etichete, poate apărea doar sub una dintre etichetele sale. Această listă poate părea că lipsesc date, dar sumele vor fi corecte.', - 'double_report_expenses_charted_once' => 'Cheltuielile și veniturile nu sunt afișate niciodată de două ori. Dacă o tranzacție are mai multe etichete, poate apărea doar sub una dintre etichetele sale. Acest grafic poate părea că lipsesc date, dar sumele vor fi corecte.', - 'tag_report_chart_single_tag' => 'Acest grafic se aplică unei singure etichete. Dacă o tranzacție are mai multe etichete, ceea ce vedeți aici poate fi reflectat și în graficele altor etichete.', - 'tag' => 'Etichetă', - 'no_budget_squared' => '(nici un buget)', - 'perm-delete-many' => 'Ștergerea multor articole dintr-o dată poate fi foarte perturbatoare. Vă rugăm să fiți precaut. Puteți șterge o parte dintr-o tranzacție divizată din această pagină, așa că aveți grijă.', - 'mass_deleted_transactions_success' => 'S-a șters :count tranzacție. :count tranzacții.', - 'mass_edited_transactions_success' => 'Actualizat :count tranzacție. | Actualizat :count tranzacții.', - 'opt_group_' => '(niciun tip de cont)', - 'opt_group_no_account_type' => '(niciun tip de cont)', - 'opt_group_defaultAsset' => 'Ccont de active implicit', - 'opt_group_savingAsset' => 'Cont de economii', - 'opt_group_sharedAsset' => 'Cont de active partajat', - 'opt_group_ccAsset' => 'Carduri de credit', - 'opt_group_cashWalletAsset' => 'Cash - Numerar', - 'opt_group_expense_account' => 'Conturi de cheltuieli', - 'opt_group_revenue_account' => 'Conturi de venituri', - 'opt_group_l_Loan' => 'Provizion: Împrumut', - 'opt_group_cash_account' => 'Cont de numerar', - 'opt_group_l_Debt' => 'Provizion: Datorie', - 'opt_group_l_Mortgage' => 'Provizion: Credit ipotecar', - 'opt_group_l_Credit card' => 'Provizion: Card de credit', - 'notes' => 'Notițe', - 'unknown_journal_error' => 'Nu a putut fi stocată tranzacția. Te rog verifică log-urile.', - 'attachment_not_found' => 'Acest atașament nu a putut fi găsit.', - 'journal_link_bill' => 'Această tranzacție este legată de factura :nume . Pentru a elimina conexiunea, debifați caseta de selectare. Utilizați regulile pentru conectarea la o altă factură.', - 'transaction_stored_link' => 'Tranzacția #{ID} ("{title}") a fost stocată.', - 'transaction_new_stored_link' => 'Tranzacția #{ID} a fost stocată.', - 'transaction_updated_link' => 'Tranzacția #{ID} ("{title}") a fost actualizată.', - 'transaction_updated_no_changes' => 'Tranzacția #{ID} ("{title}") nu a primit nicio modificare.', - 'first_split_decides' => 'Prima împărțire determină valoarea acestui câmp', - 'first_split_overrules_source' => 'Prima împărțire poate suprascrie contul sursă', - 'first_split_overrules_destination' => 'Prima împărțire poate suprascrie contul de destinație', - 'spent_x_of_y' => 'Cheltuit {amount} din {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Actualizați retragere', + 'update_deposit' => 'Actualizați depozit', + 'update_transaction' => 'Actualizați tranzacția', + 'update_transfer' => 'Actualizați transfer', + 'updated_withdrawal' => 'Retragerea ":description" actualizată', + 'updated_deposit' => 'Depozitul ":description" actualizat', + 'updated_transfer' => 'Transferul ":description" actualizat', + 'no_changes_withdrawal' => 'Retragerea ":description" nu a fost modificată.', + 'no_changes_deposit' => 'Depozitul ":description" nu a fost modificat.', + 'no_changes_transfer' => 'Transferul ":description" nu a fost modificat.', + 'delete_withdrawal' => 'Șterge retragere ":description"', + 'delete_deposit' => 'Șterge depozit ":description"', + 'delete_transfer' => 'Șterge transfer ":description"', + 'deleted_withdrawal' => 'Retragerea ":description" ștearsă cu succes', + 'deleted_deposit' => 'Depozitul ":description" șters cu succes', + 'deleted_transfer' => 'Transferul ":description" șters cu succes', + 'deleted_reconciliation' => 'Tranzacție de reconciliere ":description" a fost ștearsă cu succes', + 'stored_journal' => 'A fost creată cu succes o tranzacție nouă ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Tranzacția s-a creat cu succes', + 'updated_journal_no_descr' => 'Tranzacția s-a actualizat cu succes', + 'select_transactions' => 'Selectați tranzacțiile', + 'rule_group_select_transactions' => 'Aplică ":title" la tranzacții', + 'rule_select_transactions' => 'Aplică ":title" la tranzacții', + 'stop_selection' => 'Opriți selectarea tranzacțiilor', + 'reconcile_selected' => 'Reconcilia', + 'mass_delete_journals' => 'Ștergeți un număr de tranzacții', + 'mass_edit_journals' => 'Editați un număr de tranzacții', + 'mass_bulk_journals' => 'Editarea în bloc un număr de tranzacții', + 'mass_bulk_journals_explain' => 'Acest formular vă permite să modificați proprietățile tranzacțiilor enumerate mai jos într-o actualizare completă. Toate tranzacțiile din tabel vor fi actualizate atunci când modificați parametrii pe care îi vedeți aici.', + 'part_of_split' => 'Această tranzacție face parte dintr-o tranzacție divizată. Dacă nu ați selectat toate divizările, puteți ajunge să schimbați doar jumătate din tranzacție.', + 'bulk_set_new_values' => 'Utilizați input-urile de mai jos pentru a seta noi valori. Dacă le lăsați goale, vor fi goale toate. De asemenea, rețineți că doar bugetele vor primi un buget.', + 'no_bulk_category' => 'Nu actualizați categoria', + 'no_bulk_budget' => 'Nu actualizați budgetul', + 'no_bulk_tags' => 'Nu actualizați etichetă(e) ', + 'replace_with_these_tags' => 'Înlocuiește cu aceste etichete', + 'append_these_tags' => 'Adaugă aceste etichete', + 'mass_edit' => 'Editează individual', + 'bulk_edit' => 'Editează cele selectate in masă (bulk)', + 'mass_delete' => 'Șterge elementele selectate', + 'cannot_edit_other_fields' => 'Nu poți edita alte câmpuri decât cele de aici, pentru că nu există loc pentru a le arăta. Urmați linkul și editați-l câte unul, dacă aveți nevoie să editați aceste câmpuri.', + 'cannot_change_amount_reconciled' => 'Nu puteți modifica suma tranzacțiilor reconciliate.', + 'no_budget' => '(nici un buget)', + 'no_bill' => '(fără factură)', + 'account_per_budget' => 'Cont pe buget', + 'account_per_category' => 'Cont pe categorie', + 'create_new_object' => 'Creează', + 'empty' => '(gol)', + 'all_other_budgets' => '(toate celelalte bugete)', + 'all_other_accounts' => '(toate celelalte conturi)', + 'expense_per_source_account' => 'Cheltuieli pe contul sursă', + 'expense_per_destination_account' => 'Cheltuieli pe contul de destinație', + 'income_per_destination_account' => 'Venit pe contul de destinație', + 'spent_in_specific_category' => 'Cheltuit în categoria ":category"', + 'earned_in_specific_category' => 'Câștigat în categoria ":category"', + 'spent_in_specific_tag' => 'Cheltuit in eticheta ":tag"', + 'earned_in_specific_tag' => 'Câștigat in eticheta ":tag"', + 'income_per_source_account' => 'Venit pe cont sursă', + 'average_spending_per_destination' => 'Cheltuieli medii pe contul de destinație', + 'average_spending_per_source' => 'Cheltuieli medii pe contul sursă', + 'average_earning_per_source' => 'Venitul mediu pe cont sursă', + 'average_earning_per_destination' => 'Venitul mediu pe cont de destinație', + 'account_per_tag' => 'Cont pe etichetă', + 'tag_report_expenses_listed_once' => 'Cheltuielile și veniturile nu sunt listate niciodată de două ori. Dacă o tranzacție are mai multe etichete, poate apărea doar sub una dintre etichetele sale. Această listă poate părea că lipsesc date, dar sumele vor fi corecte.', + 'double_report_expenses_charted_once' => 'Cheltuielile și veniturile nu sunt afișate niciodată de două ori. Dacă o tranzacție are mai multe etichete, poate apărea doar sub una dintre etichetele sale. Acest grafic poate părea că lipsesc date, dar sumele vor fi corecte.', + 'tag_report_chart_single_tag' => 'Acest grafic se aplică unei singure etichete. Dacă o tranzacție are mai multe etichete, ceea ce vedeți aici poate fi reflectat și în graficele altor etichete.', + 'tag' => 'Etichetă', + 'no_budget_squared' => '(nici un buget)', + 'perm-delete-many' => 'Ștergerea multor articole dintr-o dată poate fi foarte perturbatoare. Vă rugăm să fiți precaut. Puteți șterge o parte dintr-o tranzacție divizată din această pagină, așa că aveți grijă.', + 'mass_deleted_transactions_success' => 'S-a șters :count tranzacție. :count tranzacții.', + 'mass_edited_transactions_success' => 'Actualizat :count tranzacție. | Actualizat :count tranzacții.', + 'opt_group_' => '(niciun tip de cont)', + 'opt_group_no_account_type' => '(niciun tip de cont)', + 'opt_group_defaultAsset' => 'Ccont de active implicit', + 'opt_group_savingAsset' => 'Cont de economii', + 'opt_group_sharedAsset' => 'Cont de active partajat', + 'opt_group_ccAsset' => 'Carduri de credit', + 'opt_group_cashWalletAsset' => 'Cash - Numerar', + 'opt_group_expense_account' => 'Conturi de cheltuieli', + 'opt_group_revenue_account' => 'Conturi de venituri', + 'opt_group_l_Loan' => 'Provizion: Împrumut', + 'opt_group_cash_account' => 'Cont de numerar', + 'opt_group_l_Debt' => 'Provizion: Datorie', + 'opt_group_l_Mortgage' => 'Provizion: Credit ipotecar', + 'opt_group_l_Credit card' => 'Provizion: Card de credit', + 'notes' => 'Notițe', + 'unknown_journal_error' => 'Nu a putut fi stocată tranzacția. Te rog verifică log-urile.', + 'attachment_not_found' => 'Acest atașament nu a putut fi găsit.', + 'journal_link_bill' => 'Această tranzacție este legată de factura :nume . Pentru a elimina conexiunea, debifați caseta de selectare. Utilizați regulile pentru conectarea la o altă factură.', + 'transaction_stored_link' => 'Tranzacția #{ID} ("{title}") a fost stocată.', + 'transaction_new_stored_link' => 'Tranzacția #{ID} a fost stocată.', + 'transaction_updated_link' => 'Tranzacția #{ID} ("{title}") a fost actualizată.', + 'transaction_updated_no_changes' => 'Tranzacția #{ID} ("{title}") nu a primit nicio modificare.', + 'first_split_decides' => 'Prima împărțire determină valoarea acestui câmp', + 'first_split_overrules_source' => 'Prima împărțire poate suprascrie contul sursă', + 'first_split_overrules_destination' => 'Prima împărțire poate suprascrie contul de destinație', + 'spent_x_of_y' => 'Cheltuit {amount} din {total}', // new user: - 'welcome' => 'Bine ați venit!', - 'submit' => 'Trimite', - 'submission' => 'Transmitere', - 'submit_yes_really' => 'Trimite (Știu ce fac)', - 'getting_started' => 'Introducere', - 'to_get_started' => 'Este bine să vedeți că ați instalat cu succes Firefly III. Pentru a începe cu acest instrument, introduceți numele băncii dvs. și soldul contului de control principal. Nu vă faceți griji încă dacă aveți mai multe conturi. Puteți să le adăugați mai târziu. Firefly III are nevoie de ceva de început.', - 'savings_balance_text' => 'Firefly III va crea automat un cont de economii pentru dvs. În mod implicit, în contul dvs. de economii nu vor mai fi bani, dar dacă scrii balanța, acesta va fi salvat.', - 'finish_up_new_user' => 'Asta e! Puteți continua apăsând pe Trimiteți . Veți fi duși la indexul Firefly III.', - 'stored_new_accounts_new_user' => 'Ura! Conturile dvs. noi au fost salvate.', - 'set_preferred_language' => 'Dacă preferați să utilizați Firefly III într-o altă limbă, vă rugăm să indicați aici.', - 'language' => 'Limbă', - 'new_savings_account' => ':bank_name cont de economii', - 'cash_wallet' => 'Portofel în numerar', - 'currency_not_present' => 'Dacă moneda pe care o utilizați în mod normal nu este listată, nu vă faceți griji. Puteți crea propriile valute în Opțiuni> Monede.', + 'welcome' => 'Bine ați venit!', + 'submit' => 'Trimite', + 'submission' => 'Transmitere', + 'submit_yes_really' => 'Trimite (Știu ce fac)', + 'getting_started' => 'Introducere', + 'to_get_started' => 'Este bine să vedeți că ați instalat cu succes Firefly III. Pentru a începe cu acest instrument, introduceți numele băncii dvs. și soldul contului de control principal. Nu vă faceți griji încă dacă aveți mai multe conturi. Puteți să le adăugați mai târziu. Firefly III are nevoie de ceva de început.', + 'savings_balance_text' => 'Firefly III va crea automat un cont de economii pentru dvs. În mod implicit, în contul dvs. de economii nu vor mai fi bani, dar dacă scrii balanța, acesta va fi salvat.', + 'finish_up_new_user' => 'Asta e! Puteți continua apăsând pe Trimiteți . Veți fi duși la indexul Firefly III.', + 'stored_new_accounts_new_user' => 'Ura! Conturile dvs. noi au fost salvate.', + 'set_preferred_language' => 'Dacă preferați să utilizați Firefly III într-o altă limbă, vă rugăm să indicați aici.', + 'language' => 'Limbă', + 'new_savings_account' => ':bank_name cont de economii', + 'cash_wallet' => 'Portofel în numerar', + 'currency_not_present' => 'Dacă moneda pe care o utilizați în mod normal nu este listată, nu vă faceți griji. Puteți crea propriile valute în Opțiuni> Monede.', // home page: - 'transaction_table_description' => 'Un tabel care conține tranzacțiile tale', - 'opposing_account' => 'Cont opus', - 'yourAccounts' => 'Conturile dvs.', - 'your_accounts' => 'Prezentarea generală a contului', - 'category_overview' => 'Categorie - prezentare generală', - 'expense_overview' => 'Prezentare generală cont cheltuială', - 'revenue_overview' => 'Prezentare generală cont venituri', - 'budgetsAndSpending' => 'Bugetele și cheltuielile', - 'budgets_and_spending' => 'Bugete și cheltuieli', - 'go_to_budget' => 'Mergi la buget "{budget}"', - 'go_to_deposits' => 'Du-te la depozite', - 'go_to_expenses' => 'Mergi la cheltuieli', - 'savings' => 'Economii', - 'newWithdrawal' => 'Cheltuieli noi', - 'newDeposit' => 'Depozit nou', - 'newTransfer' => 'Transfer nou', - 'bills_to_pay' => 'Facturile de plată', - 'per_day' => 'Pe zi', - 'left_to_spend_per_day' => 'Rămas de cheltui pe zi', - 'bills_paid' => 'Facturile plătite', - 'custom_period' => 'Perioadă personalizată', - 'reset_to_current' => 'Resetare la perioada curentă', - 'select_period' => 'Selectați o perioadă', + 'transaction_table_description' => 'Un tabel care conține tranzacțiile tale', + 'opposing_account' => 'Cont opus', + 'yourAccounts' => 'Conturile dvs.', + 'your_accounts' => 'Prezentarea generală a contului', + 'category_overview' => 'Categorie - prezentare generală', + 'expense_overview' => 'Prezentare generală cont cheltuială', + 'revenue_overview' => 'Prezentare generală cont venituri', + 'budgetsAndSpending' => 'Bugetele și cheltuielile', + 'budgets_and_spending' => 'Bugete și cheltuieli', + 'go_to_budget' => 'Mergi la buget "{budget}"', + 'go_to_deposits' => 'Du-te la depozite', + 'go_to_expenses' => 'Mergi la cheltuieli', + 'savings' => 'Economii', + 'newWithdrawal' => 'Cheltuieli noi', + 'newDeposit' => 'Depozit nou', + 'newTransfer' => 'Transfer nou', + 'bills_to_pay' => 'Facturile de plată', + 'per_day' => 'Pe zi', + 'left_to_spend_per_day' => 'Rămas de cheltui pe zi', + 'bills_paid' => 'Facturile plătite', + 'custom_period' => 'Perioadă personalizată', + 'reset_to_current' => 'Resetare la perioada curentă', + 'select_period' => 'Selectați o perioadă', // menu and titles, should be recycled as often as possible: - 'currency' => 'Monedă', - 'preferences' => 'Preferințe', - 'logout' => 'Ieșire', - 'logout_other_sessions' => 'Deconectează toate celelalte sesiuni', - 'toggleNavigation' => 'Navigare', - 'searchPlaceholder' => 'Cautare...', - 'version' => 'Versiunea', - 'dashboard' => 'Panou de control', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Buget disponibil ({currency})', - 'currencies' => 'Monede', - 'activity' => 'Activitate', - 'usage' => 'Utilizare', - 'accounts' => 'Conturi', - 'Asset account' => 'Cont de active', - 'Default account' => 'Cont activ principal', - 'Expense account' => 'Cont de cheltuieli', - 'Revenue account' => 'Contul de venituri', - 'Initial balance account' => 'Sold cont inițial', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Datorie', - 'account_type_Loan' => 'Împrumut', - 'account_type_Mortgage' => 'Credit ipotecar', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Card de credit', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'Sunt datorat acestei datorii', - 'liability_direction_debit' => 'Datorăm această datorie altcuiva', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Buget', - 'tags' => 'Etichete', - 'reports' => 'Rapoarte', - 'transactions' => 'Tranzacții', - 'expenses' => 'Cheltuieli', - 'income' => 'Venituri', - 'transfers' => 'Transferuri', - 'moneyManagement' => 'Gestionarea banilor', - 'money_management' => 'Gestionarea banilor', - 'tools' => 'Instrumente', - 'piggyBanks' => 'Pușculiță', - 'piggy_banks' => 'Pușculiță', - 'amount_x_of_y' => '{current} din {total}', - 'bills' => 'Facturi', - 'withdrawal' => 'Retragere', - 'opening_balance' => 'Soldul de deschidere', - 'deposit' => 'Depozit', - 'account' => 'Cont', - 'transfer' => 'Transfer', - 'Withdrawal' => 'Retragere', - 'Deposit' => 'Depozit', - 'Transfer' => 'Transfer', - 'bill' => 'Factură', - 'yes' => 'Da', - 'no' => 'Nu', - 'amount' => 'Sumă', - 'overview' => 'Imagine de ansamblu', - 'saveOnAccount' => 'Salvați în cont', - 'unknown' => 'Necunoscut', - 'monthly' => 'Lunar', - 'profile' => 'Profil', - 'errors' => 'Erori', - 'debt_start_date' => 'Data de începere a datoriilor', - 'debt_start_amount' => 'Valoarea inițială a datoriei', - 'debt_start_amount_help' => 'Este întotdeauna cel mai bine să setezi această valoare la o valoare negativă. Citește paginile de ajutor [iconița din dreapta sus (?)] pentru mai multe informații.', - 'interest_period_help' => 'Acest câmp este pur cosmetic și nu va fi calculat pentru tine. Se pare că băncile sunt foarte deranjante așa că Firefly III nu reușește niciodată.', - 'store_new_liabilities_account' => 'Salvați provizion nou', - 'edit_liabilities_account' => 'Editați provizion ":name"', - 'financial_control' => 'Controlul financiar', - 'accounting' => 'Contabilitate', - 'automation' => 'Automatizare', - 'others' => 'Altele', - 'classification' => 'Clasificare', - 'store_transaction' => 'Tranzacție magazin', + 'currency' => 'Monedă', + 'preferences' => 'Preferințe', + 'logout' => 'Ieșire', + 'logout_other_sessions' => 'Deconectează toate celelalte sesiuni', + 'toggleNavigation' => 'Navigare', + 'searchPlaceholder' => 'Cautare...', + 'version' => 'Versiunea', + 'dashboard' => 'Panou de control', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Buget disponibil ({currency})', + 'currencies' => 'Monede', + 'activity' => 'Activitate', + 'usage' => 'Utilizare', + 'accounts' => 'Conturi', + 'Asset account' => 'Cont de active', + 'Default account' => 'Cont activ principal', + 'Expense account' => 'Cont de cheltuieli', + 'Revenue account' => 'Contul de venituri', + 'Initial balance account' => 'Sold cont inițial', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Datorie', + 'account_type_Loan' => 'Împrumut', + 'account_type_Mortgage' => 'Credit ipotecar', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Card de credit', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'Sunt datorat acestei datorii', + 'liability_direction_debit' => 'Datorăm această datorie altcuiva', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Buget', + 'tags' => 'Etichete', + 'reports' => 'Rapoarte', + 'transactions' => 'Tranzacții', + 'expenses' => 'Cheltuieli', + 'income' => 'Venituri', + 'transfers' => 'Transferuri', + 'moneyManagement' => 'Gestionarea banilor', + 'money_management' => 'Gestionarea banilor', + 'tools' => 'Instrumente', + 'piggyBanks' => 'Pușculiță', + 'piggy_banks' => 'Pușculiță', + 'amount_x_of_y' => '{current} din {total}', + 'bills' => 'Facturi', + 'withdrawal' => 'Retragere', + 'opening_balance' => 'Soldul de deschidere', + 'deposit' => 'Depozit', + 'account' => 'Cont', + 'transfer' => 'Transfer', + 'Withdrawal' => 'Retragere', + 'Deposit' => 'Depozit', + 'Transfer' => 'Transfer', + 'bill' => 'Factură', + 'yes' => 'Da', + 'no' => 'Nu', + 'amount' => 'Sumă', + 'overview' => 'Imagine de ansamblu', + 'saveOnAccount' => 'Salvați în cont', + 'unknown' => 'Necunoscut', + 'monthly' => 'Lunar', + 'profile' => 'Profil', + 'errors' => 'Erori', + 'debt_start_date' => 'Data de începere a datoriilor', + 'debt_start_amount' => 'Valoarea inițială a datoriei', + 'debt_start_amount_help' => 'Este întotdeauna cel mai bine să setezi această valoare la o valoare negativă. Citește paginile de ajutor [iconița din dreapta sus (?)] pentru mai multe informații.', + 'interest_period_help' => 'Acest câmp este pur cosmetic și nu va fi calculat pentru tine. Se pare că băncile sunt foarte deranjante așa că Firefly III nu reușește niciodată.', + 'store_new_liabilities_account' => 'Salvați provizion nou', + 'edit_liabilities_account' => 'Editați provizion ":name"', + 'financial_control' => 'Controlul financiar', + 'accounting' => 'Contabilitate', + 'automation' => 'Automatizare', + 'others' => 'Altele', + 'classification' => 'Clasificare', + 'store_transaction' => 'Tranzacție magazin', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Raportul financiar prestabilit între :start și :end', - 'report_audit' => 'Afișarea istoricului tranzacțiilor între :start și :end', - 'report_category' => 'Raport privind categoria între :start și :end', - 'report_double' => 'Raport privind cheltuielile / veniturile între :start și :end', - 'report_budget' => 'Raport privind bugetul între :start și :end', - 'report_tag' => 'Raport privind etichetele între :start și :end', - 'quick_link_reports' => 'Link-uri rapide', - 'quick_link_examples' => 'Acestea sunt doar câteva exemple de linkuri pentru a începe. Consultați paginile de ajutor de la butonul (?) pentru informații despre toate rapoartele și cuvintele magice pe care le puteți utiliza.', - 'quick_link_default_report' => 'Raportul financiar prestabilit', - 'quick_link_audit_report' => 'Afișarea istoricului tranzacțiilor', - 'report_this_month_quick' => 'Luna curentă, toate conturile', - 'report_last_month_quick' => 'Luna curentă, toate conturile', - 'report_this_year_quick' => 'Anul curent, toate conturile', - 'report_this_fiscal_year_quick' => 'Anul fiscal curent, toate conturile', - 'report_all_time_quick' => 'Tot timpul, toate conturile', - 'reports_can_bookmark' => 'Rețineți că rapoartele pot fi marcate ca favorite.', - 'incomeVsExpenses' => 'Venituri vs. cheltuieli', - 'accountBalances' => 'Solduri de cont', - 'balanceStart' => 'Sold la începutul perioadei', - 'balanceEnd' => 'Sold la sfârșitul perioadei', - 'splitByAccount' => 'Împărțire după cont', - 'coveredWithTags' => 'Acoperite cu etichete', - 'leftInBudget' => 'Rămasă în bugetul', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Suma sumelor', - 'noCategory' => '(nici o categorie)', - 'notCharged' => 'Nu este taxat (încă)', - 'inactive' => 'Inactiv', - 'active' => 'Activ', - 'difference' => 'Diferență', - 'money_flowing_in' => 'În', - 'money_flowing_out' => 'Afară', - 'topX' => 'top :number', - 'show_full_list' => 'Afișați întreaga listă', - 'show_only_top' => 'Afișează numai topul :number', - 'report_type' => 'Tip de raport', - 'report_type_default' => 'Raportul financiar prestabilit', - 'report_type_audit' => 'Afișarea istoricului tranzacțiilor (audit)', - 'report_type_category' => 'Raport privind categoria', - 'report_type_budget' => 'Raport privind bugetul', - 'report_type_tag' => 'Raport privind etichetele', - 'report_type_double' => 'Raport privind contul de cheltuieli / venituri', - 'more_info_help' => 'Mai multe informații despre aceste tipuri de rapoarte pot fi găsite în paginile de ajutor. Apăsați pictograma (?) Din colțul din dreapta sus.', - 'report_included_accounts' => 'Conturi incluse', - 'report_date_range' => 'Interval de date', - 'report_preset_ranges' => 'Valori prestabilite', - 'shared' => 'Partajate', - 'fiscal_year' => 'An fiscal', - 'income_entry' => 'Venituri din cont ":name" între :start și :end', - 'expense_entry' => 'Cheltuieli în cont ":name" între :start și :end', - 'category_entry' => 'Cheltuieli și venituri în categoria ":name" între :start și :end', - 'budget_spent_amount' => 'Cheltuieli în bugetul ":budget" între :start și :end', - 'balance_amount' => 'Cheltuieli în bugetul ":budget" plătit din cont ":account" între :start și :end', - 'no_audit_activity' => 'Nu a fost înregistrată nici o activitate în contul :account_name între :start și :end.', - 'audit_end_balance' => 'Soldul contului :account_name la sfârșitul :end a fost: :balance', - 'reports_extra_options' => 'Opțiuni suplimentare', - 'report_has_no_extra_options' => 'Acest raport nu are opțiuni suplimentare', - 'reports_submit' => 'Vizualizează raportul', - 'end_after_start_date' => 'Data de încheiere a raportului trebuie să fie după data de începere.', - 'select_category' => 'Selectați categoria (categoriile)', - 'select_budget' => 'Selectați bugetul (bugetele).', - 'select_tag' => 'Selectați eticheta (-urile).', - 'income_per_category' => 'Venituri pe categorie', - 'expense_per_category' => 'Cheltuială pe categorie', - 'expense_per_budget' => 'Cheltuială pe buget', - 'income_per_account' => 'Venituri pe cont', - 'expense_per_account' => 'Cheltuială pe cont', - 'expense_per_tag' => 'Cheltuială pe eticheta', - 'income_per_tag' => 'Venituri pe eticheta', - 'include_expense_not_in_budget' => 'Cheltuielile incluse nu sunt în bugetul (bugetele) selectat (e)', - 'include_expense_not_in_account' => 'Cheltuielile incluse nu sunt în contul (conturile) selectat (e)', - 'include_expense_not_in_category' => 'Cheltuielile incluse nu sunt în categoria (categoriile) selectat (e)', - 'include_income_not_in_category' => 'Veniturile incluse nu sunt în categoria (categoriile) selectat (e)', - 'include_income_not_in_account' => 'Veniturile incluse nu sunt în contul (conturile) selectat (e)', - 'include_income_not_in_tags' => 'Veniturile incluse nu sunt în etichetă(e) selectat (e)', - 'include_expense_not_in_tags' => 'Cheltuielile incluse nu sunt în etichete', - 'everything_else' => 'Orice altceva', - 'income_and_expenses' => 'Venituri și cheltuieli', - 'spent_average' => 'Cheltuit (in medie)', - 'income_average' => 'Venituri (in medie)', - 'transaction_count' => 'Numărul de tranzacții', - 'average_spending_per_account' => 'Cheltuielile medii pe cont', - 'average_income_per_account' => 'Venitul mediu pe cont', - 'total' => 'Total', - 'description' => 'Descriere', - 'sum_of_period' => 'Suma perioadei', - 'average_in_period' => 'Media în perioada', - 'account_role_defaultAsset' => 'Contul implicit activ', - 'account_role_sharedAsset' => 'Contul de active partajat', - 'account_role_savingAsset' => 'Cont de economii', - 'account_role_ccAsset' => 'Card de credit', - 'account_role_cashWalletAsset' => 'Cash - Numerar', - 'budget_chart_click' => 'Faceți clic pe un nume de buget din tabelul de mai sus pentru a vedea o grafic.', - 'category_chart_click' => 'Clic pe numele unei categorii din tabelul de mai sus pentru a vedea un grafic.', - 'in_out_accounts' => 'Câștigat și cheltuit pe combinație', - 'in_out_accounts_per_asset' => 'Câștigat și cheltuit (pe cont de activ)', - 'in_out_per_category' => 'Câștigat și cheltuit pe categorie', - 'out_per_budget' => 'Cheltuit pe buget', - 'select_expense_revenue' => 'Selectați contul de cheltuieli / venituri', - 'multi_currency_report_sum' => 'Deoarece această listă conține conturi cu mai multe valute, suma (sumele) pe care o vedeți este posibil să nu aibă sens. Raportul va reveni întotdeauna la moneda dvs. prestabilită.', - 'sum_in_default_currency' => 'Suma va fi întotdeauna în moneda dvs. prestabilită.', - 'net_filtered_prefs' => 'Acest grafic nu va include niciodată conturi care nu au selectat opțiunea "Include în valoare netă".', + 'report_default' => 'Raportul financiar prestabilit între :start și :end', + 'report_audit' => 'Afișarea istoricului tranzacțiilor între :start și :end', + 'report_category' => 'Raport privind categoria între :start și :end', + 'report_double' => 'Raport privind cheltuielile / veniturile între :start și :end', + 'report_budget' => 'Raport privind bugetul între :start și :end', + 'report_tag' => 'Raport privind etichetele între :start și :end', + 'quick_link_reports' => 'Link-uri rapide', + 'quick_link_examples' => 'Acestea sunt doar câteva exemple de linkuri pentru a începe. Consultați paginile de ajutor de la butonul (?) pentru informații despre toate rapoartele și cuvintele magice pe care le puteți utiliza.', + 'quick_link_default_report' => 'Raportul financiar prestabilit', + 'quick_link_audit_report' => 'Afișarea istoricului tranzacțiilor', + 'report_this_month_quick' => 'Luna curentă, toate conturile', + 'report_last_month_quick' => 'Luna curentă, toate conturile', + 'report_this_year_quick' => 'Anul curent, toate conturile', + 'report_this_fiscal_year_quick' => 'Anul fiscal curent, toate conturile', + 'report_all_time_quick' => 'Tot timpul, toate conturile', + 'reports_can_bookmark' => 'Rețineți că rapoartele pot fi marcate ca favorite.', + 'incomeVsExpenses' => 'Venituri vs. cheltuieli', + 'accountBalances' => 'Solduri de cont', + 'balanceStart' => 'Sold la începutul perioadei', + 'balanceEnd' => 'Sold la sfârșitul perioadei', + 'splitByAccount' => 'Împărțire după cont', + 'coveredWithTags' => 'Acoperite cu etichete', + 'leftInBudget' => 'Rămasă în bugetul', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Suma sumelor', + 'noCategory' => '(nici o categorie)', + 'notCharged' => 'Nu este taxat (încă)', + 'inactive' => 'Inactiv', + 'active' => 'Activ', + 'difference' => 'Diferență', + 'money_flowing_in' => 'În', + 'money_flowing_out' => 'Afară', + 'topX' => 'top :number', + 'show_full_list' => 'Afișați întreaga listă', + 'show_only_top' => 'Afișează numai topul :number', + 'report_type' => 'Tip de raport', + 'report_type_default' => 'Raportul financiar prestabilit', + 'report_type_audit' => 'Afișarea istoricului tranzacțiilor (audit)', + 'report_type_category' => 'Raport privind categoria', + 'report_type_budget' => 'Raport privind bugetul', + 'report_type_tag' => 'Raport privind etichetele', + 'report_type_double' => 'Raport privind contul de cheltuieli / venituri', + 'more_info_help' => 'Mai multe informații despre aceste tipuri de rapoarte pot fi găsite în paginile de ajutor. Apăsați pictograma (?) Din colțul din dreapta sus.', + 'report_included_accounts' => 'Conturi incluse', + 'report_date_range' => 'Interval de date', + 'report_preset_ranges' => 'Valori prestabilite', + 'shared' => 'Partajate', + 'fiscal_year' => 'An fiscal', + 'income_entry' => 'Venituri din cont ":name" între :start și :end', + 'expense_entry' => 'Cheltuieli în cont ":name" între :start și :end', + 'category_entry' => 'Cheltuieli și venituri în categoria ":name" între :start și :end', + 'budget_spent_amount' => 'Cheltuieli în bugetul ":budget" între :start și :end', + 'balance_amount' => 'Cheltuieli în bugetul ":budget" plătit din cont ":account" între :start și :end', + 'no_audit_activity' => 'Nu a fost înregistrată nici o activitate în contul :account_name între :start și :end.', + 'audit_end_balance' => 'Soldul contului :account_name la sfârșitul :end a fost: :balance', + 'reports_extra_options' => 'Opțiuni suplimentare', + 'report_has_no_extra_options' => 'Acest raport nu are opțiuni suplimentare', + 'reports_submit' => 'Vizualizează raportul', + 'end_after_start_date' => 'Data de încheiere a raportului trebuie să fie după data de începere.', + 'select_category' => 'Selectați categoria (categoriile)', + 'select_budget' => 'Selectați bugetul (bugetele).', + 'select_tag' => 'Selectați eticheta (-urile).', + 'income_per_category' => 'Venituri pe categorie', + 'expense_per_category' => 'Cheltuială pe categorie', + 'expense_per_budget' => 'Cheltuială pe buget', + 'income_per_account' => 'Venituri pe cont', + 'expense_per_account' => 'Cheltuială pe cont', + 'expense_per_tag' => 'Cheltuială pe eticheta', + 'income_per_tag' => 'Venituri pe eticheta', + 'include_expense_not_in_budget' => 'Cheltuielile incluse nu sunt în bugetul (bugetele) selectat (e)', + 'include_expense_not_in_account' => 'Cheltuielile incluse nu sunt în contul (conturile) selectat (e)', + 'include_expense_not_in_category' => 'Cheltuielile incluse nu sunt în categoria (categoriile) selectat (e)', + 'include_income_not_in_category' => 'Veniturile incluse nu sunt în categoria (categoriile) selectat (e)', + 'include_income_not_in_account' => 'Veniturile incluse nu sunt în contul (conturile) selectat (e)', + 'include_income_not_in_tags' => 'Veniturile incluse nu sunt în etichetă(e) selectat (e)', + 'include_expense_not_in_tags' => 'Cheltuielile incluse nu sunt în etichete', + 'everything_else' => 'Orice altceva', + 'income_and_expenses' => 'Venituri și cheltuieli', + 'spent_average' => 'Cheltuit (in medie)', + 'income_average' => 'Venituri (in medie)', + 'transaction_count' => 'Numărul de tranzacții', + 'average_spending_per_account' => 'Cheltuielile medii pe cont', + 'average_income_per_account' => 'Venitul mediu pe cont', + 'total' => 'Total', + 'description' => 'Descriere', + 'sum_of_period' => 'Suma perioadei', + 'average_in_period' => 'Media în perioada', + 'account_role_defaultAsset' => 'Contul implicit activ', + 'account_role_sharedAsset' => 'Contul de active partajat', + 'account_role_savingAsset' => 'Cont de economii', + 'account_role_ccAsset' => 'Card de credit', + 'account_role_cashWalletAsset' => 'Cash - Numerar', + 'budget_chart_click' => 'Faceți clic pe un nume de buget din tabelul de mai sus pentru a vedea o grafic.', + 'category_chart_click' => 'Clic pe numele unei categorii din tabelul de mai sus pentru a vedea un grafic.', + 'in_out_accounts' => 'Câștigat și cheltuit pe combinație', + 'in_out_accounts_per_asset' => 'Câștigat și cheltuit (pe cont de activ)', + 'in_out_per_category' => 'Câștigat și cheltuit pe categorie', + 'out_per_budget' => 'Cheltuit pe buget', + 'select_expense_revenue' => 'Selectați contul de cheltuieli / venituri', + 'multi_currency_report_sum' => 'Deoarece această listă conține conturi cu mai multe valute, suma (sumele) pe care o vedeți este posibil să nu aibă sens. Raportul va reveni întotdeauna la moneda dvs. prestabilită.', + 'sum_in_default_currency' => 'Suma va fi întotdeauna în moneda dvs. prestabilită.', + 'net_filtered_prefs' => 'Acest grafic nu va include niciodată conturi care nu au selectat opțiunea "Include în valoare netă".', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Grafic', - 'month' => 'Lună', - 'budget' => 'Buget', - 'spent' => 'Cheltuit', - 'spent_capped' => 'Cheltuit (plafonat)', - 'spent_in_budget' => 'Cheltuit în budget', - 'left_to_spend' => 'Ramas de cheltuit', - 'earned' => 'Câștigat', - 'overspent' => 'Depășire de buget', - 'left' => 'Rămas', - 'max-amount' => 'Sumă maximă', - 'min-amount' => 'Valoare minimă', - 'journal-amount' => 'Intrare factură curentă', - 'name' => 'Nume', - 'date' => 'Dată', - 'date_and_time' => 'Data și ora', - 'time' => 'Timp', - 'paid' => 'Plătit', - 'unpaid' => 'Neplătit', - 'day' => 'Zi', - 'budgeted' => 'Bugetat', - 'period' => 'Perioada', - 'balance' => 'Balantă', - 'in_out_period' => 'In + out this period', - 'sum' => 'Sumă', - 'summary' => 'Rezumat', - 'average' => 'In medie', - 'balanceFor' => 'Balanta pentru :name', - 'no_tags' => '(fără etichete)', + 'chart' => 'Grafic', + 'month' => 'Lună', + 'budget' => 'Buget', + 'spent' => 'Cheltuit', + 'spent_capped' => 'Cheltuit (plafonat)', + 'spent_in_budget' => 'Cheltuit în budget', + 'left_to_spend' => 'Ramas de cheltuit', + 'earned' => 'Câștigat', + 'overspent' => 'Depășire de buget', + 'left' => 'Rămas', + 'max-amount' => 'Sumă maximă', + 'min-amount' => 'Valoare minimă', + 'journal-amount' => 'Intrare factură curentă', + 'name' => 'Nume', + 'date' => 'Dată', + 'date_and_time' => 'Data și ora', + 'time' => 'Timp', + 'paid' => 'Plătit', + 'unpaid' => 'Neplătit', + 'day' => 'Zi', + 'budgeted' => 'Bugetat', + 'period' => 'Perioada', + 'balance' => 'Balantă', + 'in_out_period' => 'In + out this period', + 'sum' => 'Sumă', + 'summary' => 'Rezumat', + 'average' => 'In medie', + 'balanceFor' => 'Balanta pentru :name', + 'no_tags' => '(fără etichete)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Adăugați bani la pușculiță ":name"', - 'piggy_bank' => 'Pușculiță', - 'new_piggy_bank' => 'Pușculiță nouă', - 'store_piggy_bank' => 'Salvați pușculița', - 'stored_piggy_bank' => 'Pușculița ":name" a fost salvată', - 'account_status' => 'Starea contului', - 'left_for_piggy_banks' => 'Rămas pentru pușculiță', - 'sum_of_piggy_banks' => 'Suma pușculiței', - 'saved_so_far' => 'Salvat până acum', - 'left_to_save' => 'Rămas de salvat', - 'suggested_amount' => 'Sumă lunară sugerată pentru salvare', - 'add_money_to_piggy_title' => 'Adăugați bani la pușculița ":name"', - 'remove_money_from_piggy_title' => 'Scoateți bani de la pușculița ":name"', - 'add' => 'Adaugă', - 'no_money_for_piggy' => 'Nu ai încă bani de pus în această pușculiță.', - 'suggested_savings_per_month' => 'Sugerat pe lună', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Adăugați bani la pușculiță ":name"', + 'piggy_bank' => 'Pușculiță', + 'new_piggy_bank' => 'Pușculiță nouă', + 'store_piggy_bank' => 'Salvați pușculița', + 'stored_piggy_bank' => 'Pușculița ":name" a fost salvată', + 'account_status' => 'Starea contului', + 'left_for_piggy_banks' => 'Rămas pentru pușculiță', + 'sum_of_piggy_banks' => 'Suma pușculiței', + 'saved_so_far' => 'Salvat până acum', + 'left_to_save' => 'Rămas de salvat', + 'suggested_amount' => 'Sumă lunară sugerată pentru salvare', + 'add_money_to_piggy_title' => 'Adăugați bani la pușculița ":name"', + 'remove_money_from_piggy_title' => 'Scoateți bani de la pușculița ":name"', + 'add' => 'Adaugă', + 'no_money_for_piggy' => 'Nu ai încă bani de pus în această pușculiță.', + 'suggested_savings_per_month' => 'Sugerat pe lună', - 'remove' => 'Elimină', - 'max_amount_add' => 'Suma maximă pe care o puteți adăuga este', - 'max_amount_remove' => 'Suma maximă pe care o puteți elimina este', - 'update_piggy_button' => 'Actualizați pușculiță', - 'update_piggy_title' => 'Actualizați pușculița ":name"', - 'updated_piggy_bank' => 'Pușculiță ":name" a fost actualizată', - 'details' => 'Detalii', - 'events' => 'Evenimente', - 'target_amount' => 'Sumă țintă', - 'start_date' => 'Data de început', - 'no_start_date' => 'Nu există o dată de începere', - 'target_date' => 'Data țintă', - 'no_target_date' => 'Nu există o dată vizată', - 'table' => 'Tabel', - 'delete_piggy_bank' => 'Șterge pușculița ":name"', - 'cannot_add_amount_piggy' => 'Nu s-a putut adăuga :amount la ":name".', - 'cannot_remove_from_piggy' => 'Nu s-a putut elimina :amount din ":name".', - 'deleted_piggy_bank' => 'Pușculița ":name" a fost ștearsă', - 'added_amount_to_piggy' => 'Adăugat :amount la ":name"', - 'removed_amount_from_piggy' => 'Eliminat :amount din ":name"', - 'piggy_events' => 'Pușculițe asociate', + 'remove' => 'Elimină', + 'max_amount_add' => 'Suma maximă pe care o puteți adăuga este', + 'max_amount_remove' => 'Suma maximă pe care o puteți elimina este', + 'update_piggy_button' => 'Actualizați pușculiță', + 'update_piggy_title' => 'Actualizați pușculița ":name"', + 'updated_piggy_bank' => 'Pușculiță ":name" a fost actualizată', + 'details' => 'Detalii', + 'events' => 'Evenimente', + 'target_amount' => 'Sumă țintă', + 'start_date' => 'Data de început', + 'no_start_date' => 'Nu există o dată de începere', + 'target_date' => 'Data țintă', + 'no_target_date' => 'Nu există o dată vizată', + 'table' => 'Tabel', + 'delete_piggy_bank' => 'Șterge pușculița ":name"', + 'cannot_add_amount_piggy' => 'Nu s-a putut adăuga :amount la ":name".', + 'cannot_remove_from_piggy' => 'Nu s-a putut elimina :amount din ":name".', + 'deleted_piggy_bank' => 'Pușculița ":name" a fost ștearsă', + 'added_amount_to_piggy' => 'Adăugat :amount la ":name"', + 'removed_amount_from_piggy' => 'Eliminat :amount din ":name"', + 'piggy_events' => 'Pușculițe asociate', // tags - 'delete_tag' => 'Șterge eticheta ":tag"', - 'deleted_tag' => 'Eticheta ":tag" a fost ștearsă', - 'new_tag' => 'Faceți o nouă eticheta', - 'edit_tag' => 'Editați eticheta ":tag"', - 'updated_tag' => 'Eticheta ":tag" a fost actualizat', - 'created_tag' => 'Eticheta ":tag" a fost creat!', + 'delete_tag' => 'Șterge eticheta ":tag"', + 'deleted_tag' => 'Eticheta ":tag" a fost ștearsă', + 'new_tag' => 'Faceți o nouă eticheta', + 'edit_tag' => 'Editați eticheta ":tag"', + 'updated_tag' => 'Eticheta ":tag" a fost actualizat', + 'created_tag' => 'Eticheta ":tag" a fost creat!', - 'transaction_journal_information' => 'Informații despre tranzacții', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Informații meta', - 'transaction_journal_more' => 'Mai multe informaţii', - 'basic_journal_information' => 'Informații de bază despre tranzacție', - 'transaction_journal_extra' => 'Informații suplimentare', - 'att_part_of_journal' => 'Salvat în ":journal"', - 'total_amount' => 'Valoare totală', - 'number_of_decimals' => 'Număr de zecimale', + 'transaction_journal_information' => 'Informații despre tranzacții', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Informații meta', + 'transaction_journal_more' => 'Mai multe informaţii', + 'basic_journal_information' => 'Informații de bază despre tranzacție', + 'transaction_journal_extra' => 'Informații suplimentare', + 'att_part_of_journal' => 'Salvat în ":journal"', + 'total_amount' => 'Valoare totală', + 'number_of_decimals' => 'Număr de zecimale', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Administrare', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Administrarea utilizatorilor', - 'list_all_users' => 'Toți utilizatorii', - 'all_users' => 'Toți utilizatorii', - 'instance_configuration' => 'Configurare', - 'firefly_instance_configuration' => 'Opțiuni configurare', - 'setting_single_user_mode' => 'Mod de utilizator unic', - 'setting_single_user_mode_explain' => 'În mod implicit, Firefly III acceptă numai o înregistrare: dvs. Aceasta este o măsură de securitate, împiedicând pe alții să vă folosească instanța dacă nu le permiteți. Inregistrările viitoare sunt blocate. Când debifați această casetă, alții vă pot folosi și instanța, presupunând că pot ajunge la ea (când este conectată la internet).', - 'store_configuration' => 'Salvați configurarea', - 'single_user_administration' => 'Administrare utilizator pentru :email', - 'edit_user' => 'Editați user :email', - 'hidden_fields_preferences' => 'Puteți activa mai multe opțiuni de tranzacție în preferințele dvs.', - 'user_data_information' => 'Datele utilizatorului', - 'user_information' => 'Informații utilizator', - 'total_size' => 'marimea totală', - 'budget_or_budgets' => ':count buget |:count bugete', - 'budgets_with_limits' => ':count buget cu suma configurată | :count bugete cu suma configurată', - 'nr_of_rules_in_total_groups' => ':count_rules regulă(reguli) în :count_groups grup (uri) de reguli', - 'tag_or_tags' => ':count tag | :count tag-uri', - 'configuration_updated' => 'Configurația a fost actualizată', - 'setting_is_demo_site' => 'Site-ul demo', - 'setting_is_demo_site_explain' => 'Dacă bifați această casetă, această instalare se va comporta ca și cum ar fi site-ul demo, care poate avea efecte secundare ciudate.', - 'block_code_bounced' => 'Mesaje e-mail (uri) returnate', - 'block_code_expired' => 'Contul Demo a expirat', - 'no_block_code' => 'Nu există motive pentru blocarea sau blocarea utilizatorului', - 'block_code_email_changed' => 'Utilizatorul nu a confirmat încă nicio adresă de e-mail nouă', - 'admin_update_email' => 'Contrar paginii de profil, utilizatorul NU va fi anunțat că adresa sa de email a fost modificată!', - 'update_user' => 'Actualizați user', - 'updated_user' => 'Datele utilizatorilor au fost modificate.', - 'delete_user' => 'Șterge user :email', - 'user_deleted' => 'Utilizatorul a fost șters', - 'send_test_email' => 'Trimiteți mesajul de e-mail test', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Trimite mesaj', - 'send_test_triggered' => 'Testul a fost declanșat. Verificați mesajele primite și log-urile.', - 'give_admin_careful' => 'Utilizatorii cărora li se acordă drepturi de administrator pot lua drepturile dvs. Fiți atenți.', - 'admin_maintanance_title' => 'Mentenanţă', - 'admin_maintanance_expl' => 'Ceva butoane grozave pentru mentenanța Firefly III', - 'admin_maintenance_clear_cache' => 'Golește memoria cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Descrierea tranzacției divizate', - 'split_transaction_title_help' => 'Dacă creați o tranzacție divizată, trebuie să existe o descriere globală pentru toate diviziunile tranzacției.', - 'split_title_help' => 'Dacă creați o tranzacție divizată, trebuie să existe o descriere globală pentru toate diviziunile tranzacției.', - 'you_create_transfer' => 'Creezi un transfer.', - 'you_create_withdrawal' => 'Creezi o retragere.', - 'you_create_deposit' => 'Creezi un depozit.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Administrare', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'Administrarea utilizatorilor', + 'list_all_users' => 'Toți utilizatorii', + 'all_users' => 'Toți utilizatorii', + 'instance_configuration' => 'Configurare', + 'firefly_instance_configuration' => 'Opțiuni configurare', + 'setting_single_user_mode' => 'Mod de utilizator unic', + 'setting_single_user_mode_explain' => 'În mod implicit, Firefly III acceptă numai o înregistrare: dvs. Aceasta este o măsură de securitate, împiedicând pe alții să vă folosească instanța dacă nu le permiteți. Inregistrările viitoare sunt blocate. Când debifați această casetă, alții vă pot folosi și instanța, presupunând că pot ajunge la ea (când este conectată la internet).', + 'store_configuration' => 'Salvați configurarea', + 'single_user_administration' => 'Administrare utilizator pentru :email', + 'edit_user' => 'Editați user :email', + 'hidden_fields_preferences' => 'Puteți activa mai multe opțiuni de tranzacție în preferințele dvs.', + 'user_data_information' => 'Datele utilizatorului', + 'user_information' => 'Informații utilizator', + 'total_size' => 'marimea totală', + 'budget_or_budgets' => ':count buget |:count bugete', + 'budgets_with_limits' => ':count buget cu suma configurată | :count bugete cu suma configurată', + 'nr_of_rules_in_total_groups' => ':count_rules regulă(reguli) în :count_groups grup (uri) de reguli', + 'tag_or_tags' => ':count tag | :count tag-uri', + 'configuration_updated' => 'Configurația a fost actualizată', + 'setting_is_demo_site' => 'Site-ul demo', + 'setting_is_demo_site_explain' => 'Dacă bifați această casetă, această instalare se va comporta ca și cum ar fi site-ul demo, care poate avea efecte secundare ciudate.', + 'block_code_bounced' => 'Mesaje e-mail (uri) returnate', + 'block_code_expired' => 'Contul Demo a expirat', + 'no_block_code' => 'Nu există motive pentru blocarea sau blocarea utilizatorului', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Utilizatorul nu a confirmat încă nicio adresă de e-mail nouă', + 'admin_update_email' => 'Contrar paginii de profil, utilizatorul NU va fi anunțat că adresa sa de email a fost modificată!', + 'update_user' => 'Actualizați user', + 'updated_user' => 'Datele utilizatorilor au fost modificate.', + 'delete_user' => 'Șterge user :email', + 'user_deleted' => 'Utilizatorul a fost șters', + 'send_test_email' => 'Trimiteți mesajul de e-mail test', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Trimite mesaj', + 'send_test_triggered' => 'Testul a fost declanșat. Verificați mesajele primite și log-urile.', + 'give_admin_careful' => 'Utilizatorii cărora li se acordă drepturi de administrator pot lua drepturile dvs. Fiți atenți.', + 'admin_maintanance_title' => 'Mentenanţă', + 'admin_maintanance_expl' => 'Ceva butoane grozave pentru mentenanța Firefly III', + 'admin_maintenance_clear_cache' => 'Golește memoria cache', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Descrierea tranzacției divizate', + 'split_transaction_title_help' => 'Dacă creați o tranzacție divizată, trebuie să existe o descriere globală pentru toate diviziunile tranzacției.', + 'split_title_help' => 'Dacă creați o tranzacție divizată, trebuie să existe o descriere globală pentru toate diviziunile tranzacției.', + 'you_create_transfer' => 'Creezi un transfer.', + 'you_create_withdrawal' => 'Creezi o retragere.', + 'you_create_deposit' => 'Creezi un depozit.', // links - 'journal_link_configuration' => 'Configurare link-uri de tranzacție', - 'create_new_link_type' => 'Creați un nou tip de legătură', - 'store_new_link_type' => 'Salvați un nou tip de legătură', - 'update_link_type' => 'Actualizați tip de legătură', - 'edit_link_type' => 'Editați tip de legătură ":name"', - 'updated_link_type' => 'Tip de legătură ":name" actualizat', - 'delete_link_type' => 'Șterge tip de legătură ":name"', - 'deleted_link_type' => 'Tip de legătură ":name" șters', - 'stored_new_link_type' => 'Salvați new tip de legătură ":name"', - 'cannot_edit_link_type' => 'Nu se poate edita tipul de legătură ":name"', - 'link_type_help_name' => 'Ex. "Dubluri"', - 'link_type_help_inward' => 'Ex. "dubluri"', - 'link_type_help_outward' => 'Ex. "este duplicat de către"', - 'save_connections_by_moving' => 'Salvați legătura dintre aceste tranzacții prin mutarea lor la un alt tip de legătură:', - 'do_not_save_connection' => '(nu salvați conexiunea)', - 'link_transaction' => 'Link tranzacție', - 'link_to_other_transaction' => 'Conectați această tranzacție la o altă tranzacție', - 'select_transaction_to_link' => 'Selectați o tranzacție pentru a conecta această tranzacție. Linkurile sunt în prezent neutilizate în Firefly III (în afară de a fi arătat), dar intenționez să schimb acest lucru în viitor. Utilizați caseta de căutare pentru a selecta o tranzacție fie după titlu, fie prin ID. Dacă doriți să adăugați tipuri de link personalizate, consultați secțiunea de administrare.', - 'this_transaction' => 'Această tranzacție', - 'transaction' => 'Tranzacţie', - 'comments' => 'Comentarii', - 'link_notes' => 'Orice notă pe care doriți să o păstrați cu linkul.', - 'invalid_link_selection' => 'Nu se poate lega aceste tranzacții', - 'selected_transaction' => 'Tranzacție selectată', - 'journals_linked' => 'Tranzacțiile sunt legate.', - 'journals_error_linked' => 'Aceste tranzacții sunt deja legate.', - 'journals_link_to_self' => 'Nu puteți conecta o tranzacție la sine', - 'journal_links' => 'Link-uri de tranzacții', - 'this_withdrawal' => 'Această retragere', - 'this_deposit' => 'Acest depozit', - 'this_transfer' => 'Acest transfer', - 'overview_for_link' => 'Prezentare generală pentru tipul de legătură ":name"', - 'source_transaction' => 'Tranzacție sursă', - 'link_description' => 'Descrierea legăturii', - 'destination_transaction' => 'Tranzacție de destinație', - 'delete_journal_link' => 'Șterge legătura dintre :source și :destination', - 'deleted_link' => 'Link șters', + 'journal_link_configuration' => 'Configurare link-uri de tranzacție', + 'create_new_link_type' => 'Creați un nou tip de legătură', + 'store_new_link_type' => 'Salvați un nou tip de legătură', + 'update_link_type' => 'Actualizați tip de legătură', + 'edit_link_type' => 'Editați tip de legătură ":name"', + 'updated_link_type' => 'Tip de legătură ":name" actualizat', + 'delete_link_type' => 'Șterge tip de legătură ":name"', + 'deleted_link_type' => 'Tip de legătură ":name" șters', + 'stored_new_link_type' => 'Salvați new tip de legătură ":name"', + 'cannot_edit_link_type' => 'Nu se poate edita tipul de legătură ":name"', + 'link_type_help_name' => 'Ex. "Dubluri"', + 'link_type_help_inward' => 'Ex. "dubluri"', + 'link_type_help_outward' => 'Ex. "este duplicat de către"', + 'save_connections_by_moving' => 'Salvați legătura dintre aceste tranzacții prin mutarea lor la un alt tip de legătură:', + 'do_not_save_connection' => '(nu salvați conexiunea)', + 'link_transaction' => 'Link tranzacție', + 'link_to_other_transaction' => 'Conectați această tranzacție la o altă tranzacție', + 'select_transaction_to_link' => 'Selectați o tranzacție pentru a conecta această tranzacție. Linkurile sunt în prezent neutilizate în Firefly III (în afară de a fi arătat), dar intenționez să schimb acest lucru în viitor. Utilizați caseta de căutare pentru a selecta o tranzacție fie după titlu, fie prin ID. Dacă doriți să adăugați tipuri de link personalizate, consultați secțiunea de administrare.', + 'this_transaction' => 'Această tranzacție', + 'transaction' => 'Tranzacţie', + 'comments' => 'Comentarii', + 'link_notes' => 'Orice notă pe care doriți să o păstrați cu linkul.', + 'invalid_link_selection' => 'Nu se poate lega aceste tranzacții', + 'selected_transaction' => 'Tranzacție selectată', + 'journals_linked' => 'Tranzacțiile sunt legate.', + 'journals_error_linked' => 'Aceste tranzacții sunt deja legate.', + 'journals_link_to_self' => 'Nu puteți conecta o tranzacție la sine', + 'journal_links' => 'Link-uri de tranzacții', + 'this_withdrawal' => 'Această retragere', + 'this_deposit' => 'Acest depozit', + 'this_transfer' => 'Acest transfer', + 'overview_for_link' => 'Prezentare generală pentru tipul de legătură ":name"', + 'source_transaction' => 'Tranzacție sursă', + 'link_description' => 'Descrierea legăturii', + 'destination_transaction' => 'Tranzacție de destinație', + 'delete_journal_link' => 'Șterge legătura dintre :source și :destination', + 'deleted_link' => 'Link șters', // link translations: - 'Paid_name' => 'Plătit', - 'Refund_name' => 'Restituire', - 'Reimbursement_name' => 'Rambursare', - 'Related_name' => 'Legate de', - 'relates to_inward' => 'se referă la', - 'is (partially) refunded by_inward' => 'este rambursat (parțial) de către', - 'is (partially) paid for by_inward' => 'este (parțial) plătit de către', - 'is (partially) reimbursed by_inward' => 'este (parțial) rambursat de către', - 'inward_transaction' => 'Tranzacție internă', - 'outward_transaction' => 'Tranzacție externă', - 'relates to_outward' => 'se referă la', - '(partially) refunds_outward' => '(parțial) restituiri', - '(partially) pays for_outward' => '(parțial) plătește pentru', - '(partially) reimburses_outward' => '(parțial) ramburseaza', - 'is (partially) refunded by' => 'este (parțial) rambursat de către', - 'is (partially) paid for by' => 'este (parțial) plătit de către', - 'is (partially) reimbursed by' => 'este (parțial) rambursat de către', - 'relates to' => 'asociat cu', - '(partially) refunds' => '(parțial) restituiri', - '(partially) pays for' => '(parțial) plătește pentru', - '(partially) reimburses' => '(parțial) ramburseaza', + 'Paid_name' => 'Plătit', + 'Refund_name' => 'Restituire', + 'Reimbursement_name' => 'Rambursare', + 'Related_name' => 'Legate de', + 'relates to_inward' => 'se referă la', + 'is (partially) refunded by_inward' => 'este rambursat (parțial) de către', + 'is (partially) paid for by_inward' => 'este (parțial) plătit de către', + 'is (partially) reimbursed by_inward' => 'este (parțial) rambursat de către', + 'inward_transaction' => 'Tranzacție internă', + 'outward_transaction' => 'Tranzacție externă', + 'relates to_outward' => 'se referă la', + '(partially) refunds_outward' => '(parțial) restituiri', + '(partially) pays for_outward' => '(parțial) plătește pentru', + '(partially) reimburses_outward' => '(parțial) ramburseaza', + 'is (partially) refunded by' => 'este (parțial) rambursat de către', + 'is (partially) paid for by' => 'este (parțial) plătit de către', + 'is (partially) reimbursed by' => 'este (parțial) rambursat de către', + 'relates to' => 'asociat cu', + '(partially) refunds' => '(parțial) restituiri', + '(partially) pays for' => '(parțial) plătește pentru', + '(partially) reimburses' => '(parțial) ramburseaza', // split a transaction: - 'splits' => 'Desparte', - 'add_another_split' => 'Adăugați o divizare', - 'cannot_edit_opening_balance' => 'Nu puteți edita soldul de deschidere al unui cont.', - 'no_edit_multiple_left' => 'Nu ați selectat niciun fel de tranzacții valide pentru a le edita.', - 'breadcrumb_convert_group' => 'Tranzacție convertită', - 'convert_invalid_source' => 'Informațiile sursă sunt nevalide pentru tranzacția #%d.', - 'convert_invalid_destination' => 'Informațiile de destinație sunt nevalide pentru tranzacția #%d.', - 'create_another' => 'După stocare, reveniți aici pentru a crea alta.', - 'after_update_create_another' => 'După actualizare, reveniți aici pentru a continua editarea.', - 'store_as_new' => 'Stocați ca o tranzacție nouă în loc să actualizați.', - 'reset_after' => 'Resetați formularul după trimitere', - 'errors_submission' => 'A fost ceva în neregulă cu depunerea ta. Te rugăm să verifici erorile.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Desparte', + 'add_another_split' => 'Adăugați o divizare', + 'cannot_edit_opening_balance' => 'Nu puteți edita soldul de deschidere al unui cont.', + 'no_edit_multiple_left' => 'Nu ați selectat niciun fel de tranzacții valide pentru a le edita.', + 'breadcrumb_convert_group' => 'Tranzacție convertită', + 'convert_invalid_source' => 'Informațiile sursă sunt nevalide pentru tranzacția #%d.', + 'convert_invalid_destination' => 'Informațiile de destinație sunt nevalide pentru tranzacția #%d.', + 'create_another' => 'După stocare, reveniți aici pentru a crea alta.', + 'after_update_create_another' => 'După actualizare, reveniți aici pentru a continua editarea.', + 'store_as_new' => 'Stocați ca o tranzacție nouă în loc să actualizați.', + 'reset_after' => 'Resetați formularul după trimitere', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(negrupat)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(negrupat)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Să cream un cont de active!', - 'no_accounts_intro_asset' => 'Nu ai încă nici un cont de active. Contul de active sunt conturile principale: contul dvs. de verificare, contul de economii, contul partajat sau chiar cardul dvs. de credit.', - 'no_accounts_imperative_asset' => 'Pentru a începe să utilizați Firefly III, trebuie să creați cel puțin un cont de active. Să o facem acum:', - 'no_accounts_create_asset' => 'Creați un cont de active', - 'no_accounts_title_expense' => 'Să cream un cont de cheltuieli!', - 'no_accounts_intro_expense' => 'Nu ai încă nici un cont de cheltuieli. Cont de cheltuieli sunt locurile unde cheltuiți bani, cum ar fi magazinele și supermarketurile.', - 'no_accounts_imperative_expense' => 'Cont de cheltuieli sunt create automat când creați tranzacții, dar puteți crea și una manuală, dacă doriți. Să creăm unul acum:', - 'no_accounts_create_expense' => 'Creați un cont de cheltuieli', - 'no_accounts_title_revenue' => 'Să cream un cont de venituri!', - 'no_accounts_intro_revenue' => 'Nu ai încă nici un cont de venituri.Conturile de venituri sunt locurile de unde primiți bani, cum ar fi angajatorul dvs.', - 'no_accounts_imperative_revenue' => 'Conturile de venituri sunt create automat când creați tranzacții, dar puteți crea și una manuală, dacă doriți. Să creăm unul acum:', - 'no_accounts_create_revenue' => 'Creați un cont de venituri', - 'no_accounts_title_liabilities' => 'Să cream un provizion!', - 'no_accounts_intro_liabilities' => 'Nu ai încă nici un provizion. Provizioanele sunt conturile care vă înregistrează cardurile de credit, împrumuturile și alte datorii.', - 'no_accounts_imperative_liabilities' => 'Nu trebuie să utilizați această funcție, dar poate fi utilă dacă doriți să urmăriți aceste lucruri.', - 'no_accounts_create_liabilities' => 'Creați un provizion', - 'no_budgets_title_default' => 'Să cream un provizion', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'Nu ai încă nici un buget. Bugetele sunt folosite pentru a vă organiza cheltuielile în grupuri logice, pe care le puteți supune unei limite de cheltuieli.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Bugetele sunt instrumentele de bază ale gestiunii financiare. Să creăm unul acum:', - 'no_budgets_create_default' => 'Creați un buget', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Să cream o categorie!', - 'no_categories_intro_default' => 'Nu ai încă nici o categorie. Categoriile sunt utilizate pentru a regla tranzacțiile și a le eticheta cu categoria lor desemnată.', - 'no_categories_imperative_default' => 'Categoriile sunt create automat atunci când creați tranzacții, dar puteți crea și una manuală. Să creăm una acum:', - 'no_categories_create_default' => 'Creați o categorie', - 'no_tags_title_default' => 'Să cream o eticheta!', - 'no_tags_intro_default' => 'Nu ai încă nici o eticheta. Etichetele sunt utilizate pentru etichetarea tranzacțiilor cu cuvinte cheie specifice.', - 'no_tags_imperative_default' => 'Etichetele sunt create automat atunci când creați tranzacții, dar puteți crea și una manuală. Să creăm una acum:', - 'no_tags_create_default' => 'Creați o etichetă', - 'no_transactions_title_withdrawal' => 'Să cream o cheltuială!', - 'no_transactions_intro_withdrawal' => 'Nu ai încă nici o cheltuială. Trebuie să creați cheltuieli pentru a începe să vă gestionați finanțele.', - 'no_transactions_imperative_withdrawal' => 'Ai cheltuit niște bani? Atunci ar trebui să o scrieți:', - 'no_transactions_create_withdrawal' => 'Creați o cheltuială', - 'no_transactions_title_deposit' => 'Să creăm niște venituri!', - 'no_transactions_intro_deposit' => 'Nu ai încă nici un venit înregistrat. Ar trebui să creați intrări de venituri pentru a începe să vă gestionați finanțele.', - 'no_transactions_imperative_deposit' => 'Ai primit niște bani? Atunci ar trebui să o scrieți:', - 'no_transactions_create_deposit' => 'Creați un depozit', - 'no_transactions_title_transfers' => 'Să cream un transfer!', - 'no_transactions_intro_transfers' => 'Nu ai încă nici o transfer. Când transferați bani între contul de active, acesta este înregistrat ca transfer.', - 'no_transactions_imperative_transfers' => 'Ai mutat niște bani? Atunci ar trebui să o scrieți:', - 'no_transactions_create_transfers' => 'Creați un transfer', - 'no_piggies_title_default' => 'Să cream o pușculiță!', - 'no_piggies_intro_default' => 'Nu ai încă nici o pușculiță. Puteți crea pușculita pentru a vă împărți economiile și pentru a urmări ceea ce economisiți.', - 'no_piggies_imperative_default' => 'Aveți lucruri pentru care economisiți bani? Creați o pușculiță și urmăriți-o:', - 'no_piggies_create_default' => 'Creați o nouă pușculiță', - 'no_bills_title_default' => 'Să cream o factură!', - 'no_bills_intro_default' => 'Nu ai încă nici o factură. Puteți crea facturi pentru a urmări cheltuielile obișnuite, cum ar fi chiria sau asigurarea.', - 'no_bills_imperative_default' => 'Aveți astfel de facturi obișnuite? Creați o factură și țineți evidența plăților dvs.:', - 'no_bills_create_default' => 'Creați o factură', + 'no_accounts_title_asset' => 'Să cream un cont de active!', + 'no_accounts_intro_asset' => 'Nu ai încă nici un cont de active. Contul de active sunt conturile principale: contul dvs. de verificare, contul de economii, contul partajat sau chiar cardul dvs. de credit.', + 'no_accounts_imperative_asset' => 'Pentru a începe să utilizați Firefly III, trebuie să creați cel puțin un cont de active. Să o facem acum:', + 'no_accounts_create_asset' => 'Creați un cont de active', + 'no_accounts_title_expense' => 'Să cream un cont de cheltuieli!', + 'no_accounts_intro_expense' => 'Nu ai încă nici un cont de cheltuieli. Cont de cheltuieli sunt locurile unde cheltuiți bani, cum ar fi magazinele și supermarketurile.', + 'no_accounts_imperative_expense' => 'Cont de cheltuieli sunt create automat când creați tranzacții, dar puteți crea și una manuală, dacă doriți. Să creăm unul acum:', + 'no_accounts_create_expense' => 'Creați un cont de cheltuieli', + 'no_accounts_title_revenue' => 'Să cream un cont de venituri!', + 'no_accounts_intro_revenue' => 'Nu ai încă nici un cont de venituri.Conturile de venituri sunt locurile de unde primiți bani, cum ar fi angajatorul dvs.', + 'no_accounts_imperative_revenue' => 'Conturile de venituri sunt create automat când creați tranzacții, dar puteți crea și una manuală, dacă doriți. Să creăm unul acum:', + 'no_accounts_create_revenue' => 'Creați un cont de venituri', + 'no_accounts_title_liabilities' => 'Să cream un provizion!', + 'no_accounts_intro_liabilities' => 'Nu ai încă nici un provizion. Provizioanele sunt conturile care vă înregistrează cardurile de credit, împrumuturile și alte datorii.', + 'no_accounts_imperative_liabilities' => 'Nu trebuie să utilizați această funcție, dar poate fi utilă dacă doriți să urmăriți aceste lucruri.', + 'no_accounts_create_liabilities' => 'Creați un provizion', + 'no_budgets_title_default' => 'Să cream un provizion', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'Nu ai încă nici un buget. Bugetele sunt folosite pentru a vă organiza cheltuielile în grupuri logice, pe care le puteți supune unei limite de cheltuieli.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Bugetele sunt instrumentele de bază ale gestiunii financiare. Să creăm unul acum:', + 'no_budgets_create_default' => 'Creați un buget', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Să cream o categorie!', + 'no_categories_intro_default' => 'Nu ai încă nici o categorie. Categoriile sunt utilizate pentru a regla tranzacțiile și a le eticheta cu categoria lor desemnată.', + 'no_categories_imperative_default' => 'Categoriile sunt create automat atunci când creați tranzacții, dar puteți crea și una manuală. Să creăm una acum:', + 'no_categories_create_default' => 'Creați o categorie', + 'no_tags_title_default' => 'Să cream o eticheta!', + 'no_tags_intro_default' => 'Nu ai încă nici o eticheta. Etichetele sunt utilizate pentru etichetarea tranzacțiilor cu cuvinte cheie specifice.', + 'no_tags_imperative_default' => 'Etichetele sunt create automat atunci când creați tranzacții, dar puteți crea și una manuală. Să creăm una acum:', + 'no_tags_create_default' => 'Creați o etichetă', + 'no_transactions_title_withdrawal' => 'Să cream o cheltuială!', + 'no_transactions_intro_withdrawal' => 'Nu ai încă nici o cheltuială. Trebuie să creați cheltuieli pentru a începe să vă gestionați finanțele.', + 'no_transactions_imperative_withdrawal' => 'Ai cheltuit niște bani? Atunci ar trebui să o scrieți:', + 'no_transactions_create_withdrawal' => 'Creați o cheltuială', + 'no_transactions_title_deposit' => 'Să creăm niște venituri!', + 'no_transactions_intro_deposit' => 'Nu ai încă nici un venit înregistrat. Ar trebui să creați intrări de venituri pentru a începe să vă gestionați finanțele.', + 'no_transactions_imperative_deposit' => 'Ai primit niște bani? Atunci ar trebui să o scrieți:', + 'no_transactions_create_deposit' => 'Creați un depozit', + 'no_transactions_title_transfers' => 'Să cream un transfer!', + 'no_transactions_intro_transfers' => 'Nu ai încă nici o transfer. Când transferați bani între contul de active, acesta este înregistrat ca transfer.', + 'no_transactions_imperative_transfers' => 'Ai mutat niște bani? Atunci ar trebui să o scrieți:', + 'no_transactions_create_transfers' => 'Creați un transfer', + 'no_piggies_title_default' => 'Să cream o pușculiță!', + 'no_piggies_intro_default' => 'Nu ai încă nici o pușculiță. Puteți crea pușculita pentru a vă împărți economiile și pentru a urmări ceea ce economisiți.', + 'no_piggies_imperative_default' => 'Aveți lucruri pentru care economisiți bani? Creați o pușculiță și urmăriți-o:', + 'no_piggies_create_default' => 'Creați o nouă pușculiță', + 'no_bills_title_default' => 'Să cream o factură!', + 'no_bills_intro_default' => 'Nu ai încă nici o factură. Puteți crea facturi pentru a urmări cheltuielile obișnuite, cum ar fi chiria sau asigurarea.', + 'no_bills_imperative_default' => 'Aveți astfel de facturi obișnuite? Creați o factură și țineți evidența plăților dvs.:', + 'no_bills_create_default' => 'Creați o factură', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Tranzacții recurente', - 'repeat_until_in_past' => 'Această tranzacție recurentă a încetat să se mai repete la :date.', - 'recurring_calendar_view' => 'Calendar', - 'no_recurring_title_default' => 'Să cream o tranzacție recurentă!', - 'no_recurring_intro_default' => 'Nu ai încă nici o tranzacție recurentă. Puteți utiliza aceste pentru a face Firefly III să creeze automat tranzacții pentru dvs..', - 'no_recurring_imperative_default' => 'Aceasta este o caracteristică destul de avansată, dar poate fi extrem de utilă. Asigurați-vă că ați citit documentația (?) - pictograma din colțul din dreapta sus) înainte de a continua.', - 'no_recurring_create_default' => 'Creați o tranzacție recurentă', - 'make_new_recurring' => 'Creați o tranzacție recurentă', - 'recurring_daily' => 'Zilnic', - 'recurring_weekly' => 'În fiecare săptămână :weekday', - 'recurring_weekly_skip' => 'Fiecare :skip(st/nd/rd/th) săptămână în :weekday', - 'recurring_monthly' => 'În fiecare lună in ziua de :dayOfMonth(st/nd/rd/th)', - 'recurring_monthly_skip' => 'În fiecare :skip(st/nd/rd/th) lună in ziua de :dayOfMonth(st/nd/rd/th)', - 'recurring_ndom' => 'În fiecare lună pe :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => 'În fiecare an :date', - 'overview_for_recurrence' => 'Prezentare generală a tranzacției recurente ":title"', - 'warning_duplicates_repetitions' => 'În cazuri rare, datele apar de două ori în această listă. Acest lucru se poate întâmpla când mai multe repetări se ciocnesc. Firefly III va genera întotdeauna o tranzacție pe zi.', - 'created_transactions' => 'Operațiuni înrudite', - 'expected_withdrawals' => 'Retragerile preconizate', - 'expected_deposits' => 'Depozitele preconizate', - 'expected_transfers' => 'Transferurile preconizate', - 'created_withdrawals' => 'Retragerile create', - 'created_deposits' => 'Depozitele create', - 'created_transfers' => 'Transferurile create', - 'recurring_info' => 'Tranzacție recurentă :count / :total', - 'created_from_recurrence' => 'Creat din tranzacții recurente ":title" (#:id)', - 'recurring_never_cron' => 'Se pare că cron-job-ul necesar pentru a susține tranzacțiile recurente nu a avut loc niciodată. Acest lucru este, desigur, normal când ați instalat Firefly III, dar acest lucru ar trebui să fie ceva de instalat cât mai curând posibil. Consultați paginile de ajutor utilizând pictograma (?) - în colțul din dreapta sus al paginii.', - 'recurring_cron_long_ago' => 'Se pare că au trecut mai mult de 36 de ore de când cron-job-ul pentru susținerea tranzacțiilor recurente a fost utilizat. Sunteți sigur că a fost configurat corect? Consultați paginile de ajutor utilizând pictograma (?) - în colțul din dreapta sus al paginii.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Tranzacții recurente', + 'repeat_until_in_past' => 'Această tranzacție recurentă a încetat să se mai repete la :date.', + 'recurring_calendar_view' => 'Calendar', + 'no_recurring_title_default' => 'Să cream o tranzacție recurentă!', + 'no_recurring_intro_default' => 'Nu ai încă nici o tranzacție recurentă. Puteți utiliza aceste pentru a face Firefly III să creeze automat tranzacții pentru dvs..', + 'no_recurring_imperative_default' => 'Aceasta este o caracteristică destul de avansată, dar poate fi extrem de utilă. Asigurați-vă că ați citit documentația (?) - pictograma din colțul din dreapta sus) înainte de a continua.', + 'no_recurring_create_default' => 'Creați o tranzacție recurentă', + 'make_new_recurring' => 'Creați o tranzacție recurentă', + 'recurring_daily' => 'Zilnic', + 'recurring_weekly' => 'În fiecare săptămână :weekday', + 'recurring_weekly_skip' => 'Fiecare :skip(st/nd/rd/th) săptămână în :weekday', + 'recurring_monthly' => 'În fiecare lună in ziua de :dayOfMonth(st/nd/rd/th)', + 'recurring_monthly_skip' => 'În fiecare :skip(st/nd/rd/th) lună in ziua de :dayOfMonth(st/nd/rd/th)', + 'recurring_ndom' => 'În fiecare lună pe :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => 'În fiecare an :date', + 'overview_for_recurrence' => 'Prezentare generală a tranzacției recurente ":title"', + 'warning_duplicates_repetitions' => 'În cazuri rare, datele apar de două ori în această listă. Acest lucru se poate întâmpla când mai multe repetări se ciocnesc. Firefly III va genera întotdeauna o tranzacție pe zi.', + 'created_transactions' => 'Operațiuni înrudite', + 'expected_withdrawals' => 'Retragerile preconizate', + 'expected_deposits' => 'Depozitele preconizate', + 'expected_transfers' => 'Transferurile preconizate', + 'created_withdrawals' => 'Retragerile create', + 'created_deposits' => 'Depozitele create', + 'created_transfers' => 'Transferurile create', + 'recurring_info' => 'Tranzacție recurentă :count / :total', + 'created_from_recurrence' => 'Creat din tranzacții recurente ":title" (#:id)', + 'recurring_never_cron' => 'Se pare că cron-job-ul necesar pentru a susține tranzacțiile recurente nu a avut loc niciodată. Acest lucru este, desigur, normal când ați instalat Firefly III, dar acest lucru ar trebui să fie ceva de instalat cât mai curând posibil. Consultați paginile de ajutor utilizând pictograma (?) - în colțul din dreapta sus al paginii.', + 'recurring_cron_long_ago' => 'Se pare că au trecut mai mult de 36 de ore de când cron-job-ul pentru susținerea tranzacțiilor recurente a fost utilizat. Sunteți sigur că a fost configurat corect? Consultați paginile de ajutor utilizând pictograma (?) - în colțul din dreapta sus al paginii.', - 'create_new_recurrence' => 'Creați o nouă tranzacție recurentă', - 'help_first_date' => 'Indicați prima recurență așteptată. Aceasta trebuie să fie în viitor.', - 'help_first_date_no_past' => 'Indicați prima recurență așteptată. Firefly III nu va crea tranzacții în trecut.', - 'no_currency' => '(nici o monedă)', - 'mandatory_for_recurring' => 'Informații obligatorii despre recurență', - 'mandatory_for_transaction' => 'Informații obligatorii despre tranzacții', - 'optional_for_recurring' => 'Informații opționale despre recurență', - 'optional_for_transaction' => 'Informații opționale despre tranzacții', - 'change_date_other_options' => 'Modificați "prima dată" pentru a vedea mai multe opțiuni.', - 'mandatory_fields_for_tranaction' => 'Valorile de aici vor rezulta în tranzacția (tranzacțiile) care se creează', - 'click_for_calendar' => 'Dați clic aici pentru un calendar care vă arată când tranzacția se va repeta.', - 'repeat_forever' => 'Repetați pentru totdeauna', - 'repeat_until_date' => 'Repetați până la data', - 'repeat_times' => 'Repetați de mai multe ori', - 'recurring_skips_one' => 'Toate celelalte', - 'recurring_skips_more' => 'Sari peste :count apariții', - 'store_new_recurrence' => 'Salvați tranzacție recurentă', - 'stored_new_recurrence' => 'tranzacție recurentă ":title" salvată cu succes.', - 'edit_recurrence' => 'Editați tranzacția recurentă ":title"', - 'recurring_repeats_until' => 'Se repetă până la :date', - 'recurring_repeats_forever' => 'Se repetă pentru totdeauna', - 'recurring_repeats_x_times' => 'Repetă :count time | Repetă de :count ori', - 'update_recurrence' => 'Actualizați tranzacția recurentă', - 'updated_recurrence' => 'Tranzacție recurentă ":title" a fost actualizată', - 'recurrence_is_inactive' => 'Această tranzacție recurentă nu este activă și nu va genera noi tranzacții.', - 'delete_recurring' => 'Șterge tranzacția recurentă ":title"', - 'new_recurring_transaction' => 'Tranzacție recurentă nouă', - 'help_weekend' => 'Ce ar trebui să facă Firefly III atunci când tranzacția recurentă cade într-o sâmbătă sau duminică?', - 'do_nothing' => 'Doar creați tranzacția', - 'skip_transaction' => 'Omiteți apariția', - 'jump_to_friday' => 'Creați tranzacția din vineri precedentă', - 'jump_to_monday' => 'Creați tranzacția de luni viitoare', - 'will_jump_friday' => 'Va fi creat vineri în loc de weekend.', - 'will_jump_monday' => 'Va fi creat luni, în loc de weekend.', - 'except_weekends' => 'Cu excepția weekend-urilor', - 'recurrence_deleted' => 'tranzacție recurentă ":title" ștearsă', + 'create_new_recurrence' => 'Creați o nouă tranzacție recurentă', + 'help_first_date' => 'Indicați prima recurență așteptată. Aceasta trebuie să fie în viitor.', + 'help_first_date_no_past' => 'Indicați prima recurență așteptată. Firefly III nu va crea tranzacții în trecut.', + 'no_currency' => '(nici o monedă)', + 'mandatory_for_recurring' => 'Informații obligatorii despre recurență', + 'mandatory_for_transaction' => 'Informații obligatorii despre tranzacții', + 'optional_for_recurring' => 'Informații opționale despre recurență', + 'optional_for_transaction' => 'Informații opționale despre tranzacții', + 'change_date_other_options' => 'Modificați "prima dată" pentru a vedea mai multe opțiuni.', + 'mandatory_fields_for_tranaction' => 'Valorile de aici vor rezulta în tranzacția (tranzacțiile) care se creează', + 'click_for_calendar' => 'Dați clic aici pentru un calendar care vă arată când tranzacția se va repeta.', + 'repeat_forever' => 'Repetați pentru totdeauna', + 'repeat_until_date' => 'Repetați până la data', + 'repeat_times' => 'Repetați de mai multe ori', + 'recurring_skips_one' => 'Toate celelalte', + 'recurring_skips_more' => 'Sari peste :count apariții', + 'store_new_recurrence' => 'Salvați tranzacție recurentă', + 'stored_new_recurrence' => 'tranzacție recurentă ":title" salvată cu succes.', + 'edit_recurrence' => 'Editați tranzacția recurentă ":title"', + 'recurring_repeats_until' => 'Se repetă până la :date', + 'recurring_repeats_forever' => 'Se repetă pentru totdeauna', + 'recurring_repeats_x_times' => 'Repetă :count time | Repetă de :count ori', + 'update_recurrence' => 'Actualizați tranzacția recurentă', + 'updated_recurrence' => 'Tranzacție recurentă ":title" a fost actualizată', + 'recurrence_is_inactive' => 'Această tranzacție recurentă nu este activă și nu va genera noi tranzacții.', + 'delete_recurring' => 'Șterge tranzacția recurentă ":title"', + 'new_recurring_transaction' => 'Tranzacție recurentă nouă', + 'help_weekend' => 'Ce ar trebui să facă Firefly III atunci când tranzacția recurentă cade într-o sâmbătă sau duminică?', + 'do_nothing' => 'Doar creați tranzacția', + 'skip_transaction' => 'Omiteți apariția', + 'jump_to_friday' => 'Creați tranzacția din vineri precedentă', + 'jump_to_monday' => 'Creați tranzacția de luni viitoare', + 'will_jump_friday' => 'Va fi creat vineri în loc de weekend.', + 'will_jump_monday' => 'Va fi creat luni, în loc de weekend.', + 'except_weekends' => 'Cu excepția weekend-urilor', + 'recurrence_deleted' => 'tranzacție recurentă ":title" ștearsă', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balanța (:currency)', - 'box_spent_in_currency' => 'Cheltuit (:currency)', - 'box_earned_in_currency' => 'Câștigat (:currency)', - 'box_budgeted_in_currency' => 'Bugetat (:currency)', - 'box_bill_paid_in_currency' => 'Facturi plătite (:currency)', - 'box_bill_unpaid_in_currency' => 'Facturi neplătite (:currency)', - 'box_left_to_spend_in_currency' => 'Rămas de cheltuit (:currency)', - 'box_net_worth_in_currency' => 'Valoarea netă (:currency)', - 'box_spend_per_day' => 'Rămas de cheltui pe zi: :amount', + 'box_balance_in_currency' => 'Balanța (:currency)', + 'box_spent_in_currency' => 'Cheltuit (:currency)', + 'box_earned_in_currency' => 'Câștigat (:currency)', + 'box_budgeted_in_currency' => 'Bugetat (:currency)', + 'box_bill_paid_in_currency' => 'Facturi plătite (:currency)', + 'box_bill_unpaid_in_currency' => 'Facturi neplătite (:currency)', + 'box_left_to_spend_in_currency' => 'Rămas de cheltuit (:currency)', + 'box_net_worth_in_currency' => 'Valoarea netă (:currency)', + 'box_spend_per_day' => 'Rămas de cheltui pe zi: :amount', // debug page - 'debug_page' => 'Pagina de depanare', - 'debug_submit_instructions' => 'Dacă întâmpini probleme, poți folosi informațiile din această casetă ca informație de depanare. Vă rugăm să copiați și lipiți într-o problemă nouă sau existentă GitHub. Va genera un tabel care poate fi folosit pentru a vă diagnostica rapid problema.', - 'debug_pretty_table' => 'Dacă copiați/lipiți căsuța de mai jos într-o problemă GitHub, aceasta va genera un tabel. Vă rugăm să nu înconjurați acest text cu backticks sau ghilimele.', - 'debug_additional_data' => 'De asemenea, poți distribui conținutul casetei de mai jos. Poți deasemenea să copiezi și să lipești asta într-un subiect GitHub nou sau existent. Cu toate acestea, conținutul acestei rubrici poate conține informații private, cum ar fi numele contului, detaliile tranzacției sau adresele de e-mail.', + 'debug_page' => 'Pagina de depanare', + 'debug_submit_instructions' => 'Dacă întâmpini probleme, poți folosi informațiile din această casetă ca informație de depanare. Vă rugăm să copiați și lipiți într-o problemă nouă sau existentă GitHub. Va genera un tabel care poate fi folosit pentru a vă diagnostica rapid problema.', + 'debug_pretty_table' => 'Dacă copiați/lipiți căsuța de mai jos într-o problemă GitHub, aceasta va genera un tabel. Vă rugăm să nu înconjurați acest text cu backticks sau ghilimele.', + 'debug_additional_data' => 'De asemenea, poți distribui conținutul casetei de mai jos. Poți deasemenea să copiezi și să lipești asta într-un subiect GitHub nou sau existent. Cu toate acestea, conținutul acestei rubrici poate conține informații private, cum ar fi numele contului, detaliile tranzacției sau adresele de e-mail.', // object groups - 'object_groups_menu_bar' => 'Grupuri', - 'object_groups_page_title' => 'Grupuri', - 'object_groups_breadcrumb' => 'Grupuri', - 'object_groups_index' => 'Prezentare generală', - 'object_groups' => 'Grupuri', - 'object_groups_empty_explain' => 'Unele lucruri din Firefly III pot fi împărțite în grupuri. Pușculițele, de exemplu, prezintă un câmp "Group" în editare și creează ecrane. Când setați acest câmp, puteți edita numele și ordinea grupurilor de pe această pagină. Pentru mai multe informații, vedeți paginile de ajutor din colțul din dreapta sus, sub pictograma (?).', - 'object_group_title' => 'Titlu', - 'edit_object_group' => 'Editați grupul ":title"', - 'delete_object_group' => 'Șterge grupul ":title"', - 'update_object_group' => 'Actualizați grupul', - 'updated_object_group' => 'Grup actualizat cu succes ":title"', - 'deleted_object_group' => 'Grup ":title" șters cu succes', - 'object_group' => 'Grup', + 'object_groups_menu_bar' => 'Grupuri', + 'object_groups_page_title' => 'Grupuri', + 'object_groups_breadcrumb' => 'Grupuri', + 'object_groups_index' => 'Prezentare generală', + 'object_groups' => 'Grupuri', + 'object_groups_empty_explain' => 'Unele lucruri din Firefly III pot fi împărțite în grupuri. Pușculițele, de exemplu, prezintă un câmp "Group" în editare și creează ecrane. Când setați acest câmp, puteți edita numele și ordinea grupurilor de pe această pagină. Pentru mai multe informații, vedeți paginile de ajutor din colțul din dreapta sus, sub pictograma (?).', + 'object_group_title' => 'Titlu', + 'edit_object_group' => 'Editați grupul ":title"', + 'delete_object_group' => 'Șterge grupul ":title"', + 'update_object_group' => 'Actualizați grupul', + 'updated_object_group' => 'Grup actualizat cu succes ":title"', + 'deleted_object_group' => 'Grup ":title" șters cu succes', + 'object_group' => 'Grup', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/ro_RO/form.php b/resources/lang/ro_RO/form.php index f03a87d8d5..f80b5bcf90 100644 --- a/resources/lang/ro_RO/form.php +++ b/resources/lang/ro_RO/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Numele băncii', - 'bank_balance' => 'Balanță', - 'savings_balance' => 'Soldul de economii', - 'credit_card_limit' => 'Limita cardului de credit', - 'automatch' => 'Se potrivește automat', - 'skip' => 'Sari peste', - 'enabled' => 'Activat', - 'name' => 'Nume', - 'active' => 'Activ', - 'amount_min' => 'Suma minimă', - 'amount_max' => 'suma maximă', - 'match' => 'Se potrivește', - 'strict' => 'Modul strict', - 'repeat_freq' => 'Repetă', - 'object_group' => 'Grup', - 'location' => 'Locație', - 'update_channel' => 'Actualizare canal', - 'currency_id' => 'Monedă', - 'transaction_currency_id' => 'Monedă', - 'auto_budget_currency_id' => 'Monedă', - 'external_ip' => 'IP-ul extern al serverului dvs.', - 'attachments' => 'Fișiere atașate', - 'BIC' => 'BIC', - 'verify_password' => 'Verificați securitatea parolei', - 'source_account' => 'Contul sursă', - 'destination_account' => 'Contul destinației', - 'asset_destination_account' => 'Contul destinației', - 'include_net_worth' => 'Includeți în valoare netă', - 'asset_source_account' => 'Contul sursă', - 'journal_description' => 'Descriere', - 'note' => 'Notițe', - 'currency' => 'Monedă', - 'account_id' => 'Cont de active', - 'budget_id' => 'Buget', - 'bill_id' => 'Factură', - 'opening_balance' => 'Soldul de deschidere', - 'tagMode' => 'Mod de etichetare', - 'virtual_balance' => 'Soldul virtual', + 'bank_name' => 'Numele băncii', + 'bank_balance' => 'Balanță', + 'savings_balance' => 'Soldul de economii', + 'credit_card_limit' => 'Limita cardului de credit', + 'automatch' => 'Se potrivește automat', + 'skip' => 'Sari peste', + 'enabled' => 'Activat', + 'name' => 'Nume', + 'active' => 'Activ', + 'amount_min' => 'Suma minimă', + 'amount_max' => 'suma maximă', + 'match' => 'Se potrivește', + 'strict' => 'Modul strict', + 'repeat_freq' => 'Repetă', + 'object_group' => 'Grup', + 'location' => 'Locație', + 'update_channel' => 'Actualizare canal', + 'currency_id' => 'Monedă', + 'transaction_currency_id' => 'Monedă', + 'auto_budget_currency_id' => 'Monedă', + 'external_ip' => 'IP-ul extern al serverului dvs.', + 'attachments' => 'Fișiere atașate', + 'BIC' => 'BIC', + 'verify_password' => 'Verificați securitatea parolei', + 'source_account' => 'Contul sursă', + 'destination_account' => 'Contul destinației', + 'asset_destination_account' => 'Contul destinației', + 'include_net_worth' => 'Includeți în valoare netă', + 'asset_source_account' => 'Contul sursă', + 'journal_description' => 'Descriere', + 'note' => 'Notițe', + 'currency' => 'Monedă', + 'account_id' => 'Cont de active', + 'budget_id' => 'Buget', + 'bill_id' => 'Factură', + 'opening_balance' => 'Soldul de deschidere', + 'tagMode' => 'Mod de etichetare', + 'virtual_balance' => 'Soldul virtual', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Sumă țintă', 'account_role' => 'Rolul contului', 'opening_balance_date' => 'Data soldului de deschidere', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Sunteți sigur că doriți să ștergeți tranzacția ":description"?', 'mass_journal_are_you_sure' => 'Sunteți sigur că doriți să ștergeți aceste tranzacții?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Sunteți sigur că doriți să ștergeți eticheta ":tag"?', 'journal_link_areYouSure' => 'Sunteți sigur că doriți să ștergeți legătura dintre :source și :destination?', 'linkType_areYouSure' => 'Sunteți sigur că doriți să ștergeți tipul de legătură ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Melodie', - // admin 'domain' => 'Domeniu', 'single_user_mode' => 'Dezactivați înregistrarea utilizatorilor', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Cont FinTS', 'local_account' => 'Cont Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Data din', - 'to_date' => 'Data până la', - 'due_date' => 'Data scadentă', - 'payment_date' => 'Data de plată', - 'invoice_date' => 'Data facturii', - 'internal_reference' => 'Referință internă', - 'inward' => 'Descrierea interioară', - 'outward' => 'Descrierea exterioară', - 'rule_group_id' => 'Grup de reguli', - 'transaction_description' => 'Descrierea tranzacției', - 'first_date' => 'Prima dată', - 'transaction_type' => 'Tipul tranzacției', - 'repeat_until' => 'Repetați până la', - 'recurring_description' => 'Descrierea tranzacției recurente', - 'repetition_type' => 'Tip de repetare', - 'foreign_currency_id' => 'Monedă străină', - 'repetition_end' => 'Repetarea se termină', - 'repetitions' => 'Repetări', - 'calendar' => 'Calendar', - 'weekend' => 'Sfârșit de săptămână', - 'client_secret' => 'Codul secret al clientului', - 'withdrawal_destination_id' => 'Contul de destinație', - 'deposit_source_id' => 'Contul sursă', - 'expected_on' => 'Așteptat pe', - 'paid' => 'Plătit', - 'auto_budget_type' => 'Auto-buget', - 'auto_budget_amount' => 'Suma auto-bugetului', - 'auto_budget_period' => 'Perioadă auto-buget', - 'collected' => 'Colectat', - 'submitted' => 'Trimis', - 'key' => 'Cheie', - 'value' => 'Conținutul înregistrării', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Data din', + 'to_date' => 'Data până la', + 'due_date' => 'Data scadentă', + 'payment_date' => 'Data de plată', + 'invoice_date' => 'Data facturii', + 'internal_reference' => 'Referință internă', + 'inward' => 'Descrierea interioară', + 'outward' => 'Descrierea exterioară', + 'rule_group_id' => 'Grup de reguli', + 'transaction_description' => 'Descrierea tranzacției', + 'first_date' => 'Prima dată', + 'transaction_type' => 'Tipul tranzacției', + 'repeat_until' => 'Repetați până la', + 'recurring_description' => 'Descrierea tranzacției recurente', + 'repetition_type' => 'Tip de repetare', + 'foreign_currency_id' => 'Monedă străină', + 'repetition_end' => 'Repetarea se termină', + 'repetitions' => 'Repetări', + 'calendar' => 'Calendar', + 'weekend' => 'Sfârșit de săptămână', + 'client_secret' => 'Codul secret al clientului', + 'withdrawal_destination_id' => 'Contul de destinație', + 'deposit_source_id' => 'Contul sursă', + 'expected_on' => 'Așteptat pe', + 'paid' => 'Plătit', + 'auto_budget_type' => 'Auto-buget', + 'auto_budget_amount' => 'Suma auto-bugetului', + 'auto_budget_period' => 'Perioadă auto-buget', + 'collected' => 'Colectat', + 'submitted' => 'Trimis', + 'key' => 'Cheie', + 'value' => 'Conținutul înregistrării', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ro_RO/intro.php b/resources/lang/ro_RO/intro.php index 153c8f7222..274f8afb34 100644 --- a/resources/lang/ro_RO/intro.php +++ b/resources/lang/ro_RO/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Bun venit pe pagina principală a Firefly III. Vă rugăm să parcurgeţi acest intro pentru a vedea cum funcționează Firefly III.', - 'index_accounts-chart' => 'Acest grafic arată soldul curent al conturilor dvs. de active. Puteți selecta conturile vizibile aici în preferințele dvs.', - 'index_box_out_holder' => 'Aceast dreptunghi mic și cele de lângă el vă vor oferi o imagine de ansamblu rapidă a situației financiare.', - 'index_help' => 'Dacă aveți nevoie vreodată de ajutor cu o pagină sau un formular, apăsați acest buton.', - 'index_outro' => 'Cele mai multe pagini ale Firefly III vor începe cu un mic tur ca acesta. Contactați-mă atunci când aveți întrebări sau comentarii. Bucurați-vă!', - 'index_sidebar-toggle' => 'Pentru a crea noi tranzacții, conturi sau alte lucruri, utilizați meniul de sub această pictogramă.', - 'index_cash_account' => 'Acestea sunt conturile create până acum. Puteți utiliza contul de numerar pentru a urmări cheltuielile cu numerar, dar nu este obligatoriu, desigur.', + 'index_intro' => 'Bun venit pe pagina principală a Firefly III. Vă rugăm să parcurgeţi acest intro pentru a vedea cum funcționează Firefly III.', + 'index_accounts-chart' => 'Acest grafic arată soldul curent al conturilor dvs. de active. Puteți selecta conturile vizibile aici în preferințele dvs.', + 'index_box_out_holder' => 'Aceast dreptunghi mic și cele de lângă el vă vor oferi o imagine de ansamblu rapidă a situației financiare.', + 'index_help' => 'Dacă aveți nevoie vreodată de ajutor cu o pagină sau un formular, apăsați acest buton.', + 'index_outro' => 'Cele mai multe pagini ale Firefly III vor începe cu un mic tur ca acesta. Contactați-mă atunci când aveți întrebări sau comentarii. Bucurați-vă!', + 'index_sidebar-toggle' => 'Pentru a crea noi tranzacții, conturi sau alte lucruri, utilizați meniul de sub această pictogramă.', + 'index_cash_account' => 'Acestea sunt conturile create până acum. Puteți utiliza contul de numerar pentru a urmări cheltuielile cu numerar, dar nu este obligatoriu, desigur.', // transactions - 'transactions_create_basic_info' => 'Introduceți informațiile de bază ale tranzacției. Sursa, destinația, data și descrierea.', - 'transactions_create_amount_info' => 'Introduceți valoarea tranzacției. Dacă este necesar, câmpurile se vor actualiza automat pentru informațiile din valută.', - 'transactions_create_optional_info' => 'Toate aceste câmpuri sunt opționale. Adăugarea de meta-date aici va îmbunătăți organizarea tranzacțiilor.', - 'transactions_create_split' => 'Dacă doriţi să împărţiţi o tranzacţie, adăugaţi mai multe scindări cu acest buton', + 'transactions_create_basic_info' => 'Introduceți informațiile de bază ale tranzacției. Sursa, destinația, data și descrierea.', + 'transactions_create_amount_info' => 'Introduceți valoarea tranzacției. Dacă este necesar, câmpurile se vor actualiza automat pentru informațiile din valută.', + 'transactions_create_optional_info' => 'Toate aceste câmpuri sunt opționale. Adăugarea de meta-date aici va îmbunătăți organizarea tranzacțiilor.', + 'transactions_create_split' => 'Dacă doriţi să împărţiţi o tranzacţie, adăugaţi mai multe scindări cu acest buton', // create account: - 'accounts_create_iban' => 'Dați conturilor dvs. un IBAN valid. Acest lucru ar putea face ca importul de date să fie foarte ușor în viitor.', - 'accounts_create_asset_opening_balance' => 'Conturile de active pot avea un "sold de deschidere", indicând începutul istoricului acestui cont în Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III acceptă mai multe valute. Conturile de active au o monedă principală, pe care trebuie să o setați aici.', - 'accounts_create_asset_virtual' => 'Câteodată este de ajutor să adăugaţi contului dvs. un sold virtual: o sumă suplimentară adăugată sau retrasă întotdeauna din soldul real.', + 'accounts_create_iban' => 'Dați conturilor dvs. un IBAN valid. Acest lucru ar putea face ca importul de date să fie foarte ușor în viitor.', + 'accounts_create_asset_opening_balance' => 'Conturile de active pot avea un "sold de deschidere", indicând începutul istoricului acestui cont în Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III acceptă mai multe valute. Conturile de active au o monedă principală, pe care trebuie să o setați aici.', + 'accounts_create_asset_virtual' => 'Câteodată este de ajutor să adăugaţi contului dvs. un sold virtual: o sumă suplimentară adăugată sau retrasă întotdeauna din soldul real.', // budgets index - 'budgets_index_intro' => 'Bugetele sunt folosite pentru a vă gestiona finanțele; ele sunt una dintre funcțiile de bază ale Firefly III.', - 'budgets_index_set_budget' => 'Stabiliți bugetul total pentru fiecare perioadă, astfel încât Firefly III vă poate spune dacă ați bugetat toți banii disponibili.', - 'budgets_index_see_expenses_bar' => 'Banii cheltuiți vor umple încet această linie.', - 'budgets_index_navigate_periods' => 'Navigați prin perioade de timp pentru a stabili cu ușurință bugetele viitoare.', - 'budgets_index_new_budget' => 'Creați bugete noi după cum doriți.', - 'budgets_index_list_of_budgets' => 'Utilizați acest tabel pentru a stabili sumele pentru fiecare buget și pentru a vedea cum progresaţi.', - 'budgets_index_outro' => 'Pentru a afla mai multe despre bugetare, verificați pictograma de ajutor din colțul din dreapta sus.', + 'budgets_index_intro' => 'Bugetele sunt folosite pentru a vă gestiona finanțele; ele sunt una dintre funcțiile de bază ale Firefly III.', + 'budgets_index_see_expenses_bar' => 'Banii cheltuiți vor umple încet această linie.', + 'budgets_index_navigate_periods' => 'Navigați prin perioade de timp pentru a stabili cu ușurință bugetele viitoare.', + 'budgets_index_new_budget' => 'Creați bugete noi după cum doriți.', + 'budgets_index_list_of_budgets' => 'Utilizați acest tabel pentru a stabili sumele pentru fiecare buget și pentru a vedea cum progresaţi.', + 'budgets_index_outro' => 'Pentru a afla mai multe despre bugetare, verificați pictograma de ajutor din colțul din dreapta sus.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Utilizați aceste rapoarte pentru a obține informații detaliate despre finanțele dumneavoastră.', - 'reports_index_inputReportType' => 'Alegeți un tip de raport. Consultați paginile de ajutor pentru a vedea ce arată fiecare raport.', - 'reports_index_inputAccountsSelect' => 'Puteți exclude sau include conturi de active după cum doriți.', - 'reports_index_inputDateRange' => 'Intervalul de date selectat depinde în întregime de dvs.: de la o zi la 10 ani.', - 'reports_index_extra-options-box' => 'În funcție de raportul pe care l-ați selectat, puteți selecta filtre și opțiuni suplimentare aici. Urmăriți această casetă când modificați tipurile de rapoarte.', + 'reports_index_intro' => 'Utilizați aceste rapoarte pentru a obține informații detaliate despre finanțele dumneavoastră.', + 'reports_index_inputReportType' => 'Alegeți un tip de raport. Consultați paginile de ajutor pentru a vedea ce arată fiecare raport.', + 'reports_index_inputAccountsSelect' => 'Puteți exclude sau include conturi de active după cum doriți.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'În funcție de raportul pe care l-ați selectat, puteți selecta filtre și opțiuni suplimentare aici. Urmăriți această casetă când modificați tipurile de rapoarte.', // reports (reports) - 'reports_report_default_intro' => 'Acest raport vă va oferi o imagine de ansamblu rapidă și cuprinzătoare a finanțelor. Dacă doriți să vedeți altceva, vă rugăm să nu ezitați să mă contactați!', - 'reports_report_audit_intro' => 'Acest raport vă va oferi informații detaliate despre conturile de active.', - 'reports_report_audit_optionsBox' => 'Utilizați aceste casete pentru a afișa sau a ascunde coloanele care vă interesează.', + 'reports_report_default_intro' => 'Acest raport vă va oferi o imagine de ansamblu rapidă și cuprinzătoare a finanțelor. Dacă doriți să vedeți altceva, vă rugăm să nu ezitați să mă contactați!', + 'reports_report_audit_intro' => 'Acest raport vă va oferi informații detaliate despre conturile de active.', + 'reports_report_audit_optionsBox' => 'Utilizați aceste casete pentru a afișa sau a ascunde coloanele care vă interesează.', - 'reports_report_category_intro' => 'Acest raport vă va oferi informații despre una sau mai multe categorii.', - 'reports_report_category_pieCharts' => 'Aceste diagrame vă vor oferi informații despre cheltuielile și veniturile pe categorii sau pe cont.', - 'reports_report_category_incomeAndExpensesChart' => 'Această diagramă arată cheltuielile și veniturile pe categorii.', + 'reports_report_category_intro' => 'Acest raport vă va oferi informații despre una sau mai multe categorii.', + 'reports_report_category_pieCharts' => 'Aceste diagrame vă vor oferi informații despre cheltuielile și veniturile pe categorii sau pe cont.', + 'reports_report_category_incomeAndExpensesChart' => 'Această diagramă arată cheltuielile și veniturile pe categorii.', - 'reports_report_tag_intro' => 'Acest raport vă va oferi informații despre una sau mai multe etichete.', - 'reports_report_tag_pieCharts' => 'Aceste diagrame vă vor oferi informații despre cheltuielile și veniturile pe etichete, cont, categorie sau buget.', - 'reports_report_tag_incomeAndExpensesChart' => 'Acest grafic prezintă cheltuielile și venitul pe etichetă.', + 'reports_report_tag_intro' => 'Acest raport vă va oferi informații despre una sau mai multe etichete.', + 'reports_report_tag_pieCharts' => 'Aceste diagrame vă vor oferi informații despre cheltuielile și veniturile pe etichete, cont, categorie sau buget.', + 'reports_report_tag_incomeAndExpensesChart' => 'Acest grafic prezintă cheltuielile și venitul pe etichetă.', 'reports_report_budget_intro' => 'Acest raport vă va oferi informații despre unul sau mai multe bugete.', 'reports_report_budget_pieCharts' => 'Aceste diagrame vă vor oferi informații despre cheltuielile pe buget sau pe cont.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Lângă această bara de progres sunt două butoane (+ și -) pentru a adăuga sau a elimina bani din fiecare pușculiță.', 'piggy-banks_index_accountStatus' => 'Pentru fiecare cont de activ cu cel puțin o pușculiță, statutul este menționat în acest tabel.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Care este țelul tău? O canapea nouă, o cameră, bani pentru urgențe?', 'piggy-banks_create_date' => 'Puteți stabili o dată țintă sau un termen limită pentru pușculița dvs..', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Utilizați facturile pentru a urmări cantitatea de bani pe care o plătiți în fiecare perioadă. Gândiți-vă la cheltuieli cum ar fi chiria, asigurarea sau plățile ipotecare.', 'bills_create_name' => 'Utilizați un nume descriptiv, cum ar fi "Chirie" sau "Asigurarea de sănătate".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Selectați o sumă minimă și maximă pentru această factură.', 'bills_create_repeat_freq_holder' => 'Cele mai multe facturi se repetă lunar, dar puteți stabili o altă frecvență aici.', 'bills_create_skip_holder' => 'Dacă o factură se repetă la fiecare 2 săptămâni, câmpul "săriți" ar trebui să fie setat la "1" pentru a sări peste o săptămână.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Utilizați acest buton pentru a vedea care tranzacții s-ar potrivi regulii dvs.', 'rules_create_actions' => 'Setați câte acțiuni doriți.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Mai multe opțiuni sunt disponibile în spatele acestor file.', diff --git a/resources/lang/ro_RO/list.php b/resources/lang/ro_RO/list.php index 2d35c2ea77..8c6793cb45 100644 --- a/resources/lang/ro_RO/list.php +++ b/resources/lang/ro_RO/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Butoane', - 'icon' => 'Iconiță', - 'id' => 'ID', - 'create_date' => 'Creat la', - 'update_date' => 'actualizat la', - 'updated_at' => 'actualizat la', - 'balance_before' => 'Sold înainte', - 'balance_after' => 'Sold după', - 'name' => 'Nume', - 'role' => 'Rol', - 'currentBalance' => 'Sold curent', - 'linked_to_rules' => 'Reguli relevante', - 'active' => 'Este activ?', - 'percentage' => 'procent %', - 'recurring_transaction' => 'Tranzacție recurentă', - 'next_due' => 'Următoarea scadență', - 'transaction_type' => 'Tip', - 'lastActivity' => 'Ultima activitate', - 'balanceDiff' => 'Diferența de sold', - 'other_meta_data' => 'Alte meta-date', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Tip de cont', - 'created_at' => 'Creat la', - 'account' => 'Cont', - 'external_url' => 'External URL', - 'matchingAmount' => 'Sumă', - 'destination' => 'Destinație', - 'source' => 'Sursă', - 'next_expected_match' => 'Următoarea potrivire așteptată', - 'automatch' => 'Potrivire automată?', + 'buttons' => 'Butoane', + 'icon' => 'Iconiță', + 'id' => 'ID', + 'create_date' => 'Creat la', + 'update_date' => 'actualizat la', + 'updated_at' => 'actualizat la', + 'balance_before' => 'Sold înainte', + 'balance_after' => 'Sold după', + 'name' => 'Nume', + 'role' => 'Rol', + 'currentBalance' => 'Sold curent', + 'linked_to_rules' => 'Reguli relevante', + 'active' => 'Este activ?', + 'percentage' => 'procent %', + 'recurring_transaction' => 'Tranzacție recurentă', + 'next_due' => 'Următoarea scadență', + 'transaction_type' => 'Tip', + 'lastActivity' => 'Ultima activitate', + 'balanceDiff' => 'Diferența de sold', + 'other_meta_data' => 'Alte meta-date', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => 'Tip de cont', + 'created_at' => 'Creat la', + 'account' => 'Cont', + 'external_url' => 'External URL', + 'matchingAmount' => 'Sumă', + 'destination' => 'Destinație', + 'source' => 'Sursă', + 'next_expected_match' => 'Următoarea potrivire așteptată', + 'automatch' => 'Potrivire automată?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Repetă', 'description' => 'Descriere', 'amount' => 'Sumă', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Cont cu bunq', 'file_name' => 'Nume de fișier', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Mărime fișier', - 'file_type' => 'Tip fișier', - 'attached_to' => 'Atașat la', - 'file_exists' => 'Fișierul există', - 'spectre_bank' => 'Bancă', - 'spectre_last_use' => 'Ultima logare', - 'spectre_status' => 'Statut', - 'bunq_payment_id' => 'ID plată bunq', - 'repetitions' => 'Repetări', - 'title' => 'Titlu', - 'transaction_s' => 'Tranzacție(tranzacții)', - 'field' => 'Câmp', - 'value' => 'Valoare', - 'interest' => 'Interes', - 'interest_period' => 'Perioadă de interes', - 'liability_type' => 'Tip de provizion', - 'liability_direction' => 'Răspundere în/afară', - 'end_date' => 'Data de sfârșit', - 'payment_info' => 'Informații de plată', - 'expected_info' => 'Următoarea tranzacție așteptată', - 'start_date' => 'Dată de începere', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Mărime fișier', + 'file_type' => 'Tip fișier', + 'attached_to' => 'Atașat la', + 'file_exists' => 'Fișierul există', + 'spectre_bank' => 'Bancă', + 'spectre_last_use' => 'Ultima logare', + 'spectre_status' => 'Statut', + 'bunq_payment_id' => 'ID plată bunq', + 'repetitions' => 'Repetări', + 'title' => 'Titlu', + 'transaction_s' => 'Tranzacție(tranzacții)', + 'field' => 'Câmp', + 'value' => 'Valoare', + 'interest' => 'Interes', + 'interest_period' => 'Perioadă de interes', + 'liability_type' => 'Tip de provizion', + 'liability_direction' => 'Răspundere în/afară', + 'end_date' => 'Data de sfârșit', + 'payment_info' => 'Informații de plată', + 'expected_info' => 'Următoarea tranzacție așteptată', + 'start_date' => 'Dată de începere', + 'trigger' => 'Trigger', + 'response' => 'Response', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ro_RO/pagination.php b/resources/lang/ro_RO/pagination.php index 848da8d3c9..31670d9e23 100644 --- a/resources/lang/ro_RO/pagination.php +++ b/resources/lang/ro_RO/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ro_RO/passwords.php b/resources/lang/ro_RO/passwords.php index 6e38c6011e..17a8f1f129 100644 --- a/resources/lang/ro_RO/passwords.php +++ b/resources/lang/ro_RO/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ro_RO/rules.php b/resources/lang/ro_RO/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/ro_RO/rules.php +++ b/resources/lang/ro_RO/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/ro_RO/validation.php b/resources/lang/ro_RO/validation.php index 063330d76e..72c0da6b8e 100644 --- a/resources/lang/ro_RO/validation.php +++ b/resources/lang/ro_RO/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'Acesta nu este un IBAN valabil.', - 'zero_or_more' => 'Valoarea nu poate fi negativă.', - 'date_or_time' => 'Valoarea trebuie să fie o dată validă sau o valoare în timp (ISO 8601).', - 'source_equals_destination' => 'Contul sursă este egal cu contul de destinație.', - 'unique_account_number_for_user' => 'Se pare că acest număr de cont este deja utilizat.', - 'unique_iban_for_user' => 'Se pare că acest IBAN este deja utilizat.', - 'deleted_user' => 'Din cauza constrângerilor de securitate, nu vă puteți înregistra utilizând această adresă de e-mail.', - 'rule_trigger_value' => 'Această valoare nu este validă pentru declanșatorul selectat.', - 'rule_action_value' => 'Această valoare nu este validă pentru acțiunea selectată.', - 'file_already_attached' => 'Fișierul încărcat ":name" este deja atașat acestui obiect.', - 'file_attached' => 'Fișierul ":name" a fost încărcat cu succes.', - 'must_exist' => 'Câmpul ID :attribute nu există în baza de date.', - 'all_accounts_equal' => 'Toate conturile din acest câmp trebuie să fie egale.', - 'group_title_mandatory' => 'Un titlu de grup este obligatoriu atunci când există mai multe tranzacții.', - 'transaction_types_equal' => 'Toate împărțirile trebuie să fie de același tip.', - 'invalid_transaction_type' => 'Tip tranzacție nevalidă.', - 'invalid_selection' => 'Selecția dvs. este nevalidă.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Aveți nevoie de cel puțin o tranzacție.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Aveți nevoie de cel puțin o repetare.', - 'require_repeat_until' => 'Solicitați fie un număr de repetări, fie o dată de încheiere (repeat_until). Nu amândouă.', - 'require_currency_info' => 'Conținutul acestui câmp este nevalid fără informații despre monedă.', - 'not_transfer_account' => 'Acest cont nu este un cont care poate fi utilizat pentru transferuri.', - 'require_currency_amount' => 'Conținutul acestui câmp este nevalid fără informații despre monedă.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Descrierea tranzacției nu trebuie să fie egală cu descrierea globală.', - 'file_invalid_mime' => 'Fișierul ":name" este de tip ":mime" și nu este acceptat ca o încărcare nouă.', - 'file_too_large' => 'Fișierul ":name" este prea mare.', - 'belongs_to_user' => 'Valoarea :attribute este necunoscută.', - 'accepted' => 'Câmpul :attribute trebuie să fie acceptat.', - 'bic' => 'Acesta nu este un BIC valabil.', - 'at_least_one_trigger' => 'Regula trebuie să aibă cel puțin un declanșator.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'Regula trebuie să aibă cel puțin o acțiune.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'Acest lucru nu este valabil pentru datele encoded base64.', - 'model_id_invalid' => 'ID-ul dat nu pare valid pentru acest model.', - 'less' => ':attribute trebuie să fie mai mic decât 10,000,000', - 'active_url' => ':attribute nu este o adresă URL validă.', - 'after' => ':attribute trebuie să fie o dată ulterioară :date.', - 'date_after' => 'Data de început trebuie să fie înainte de data de sfârșit.', - 'alpha' => ':attribute poate conține numai litere.', - 'alpha_dash' => ':attribute poate conține numai litere, numere și liniuțe.', - 'alpha_num' => ':attribute poate conține numai litere și numere.', - 'array' => ':attribute trebuie să fie o matrice (array).', - 'unique_for_user' => 'Există deja o intrare cu acest :attribute.', - 'before' => ':attribute trebuie să fie o dată înainte de :date.', - 'unique_object_for_user' => 'Acest nume este deja folosit.', - 'unique_account_for_user' => 'Acest nume de cont este deja utilizat.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => 'Acesta nu este un IBAN valabil.', + 'zero_or_more' => 'Valoarea nu poate fi negativă.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Valoarea trebuie să fie o dată validă sau o valoare în timp (ISO 8601).', + 'source_equals_destination' => 'Contul sursă este egal cu contul de destinație.', + 'unique_account_number_for_user' => 'Se pare că acest număr de cont este deja utilizat.', + 'unique_iban_for_user' => 'Se pare că acest IBAN este deja utilizat.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Din cauza constrângerilor de securitate, nu vă puteți înregistra utilizând această adresă de e-mail.', + 'rule_trigger_value' => 'Această valoare nu este validă pentru declanșatorul selectat.', + 'rule_action_value' => 'Această valoare nu este validă pentru acțiunea selectată.', + 'file_already_attached' => 'Fișierul încărcat ":name" este deja atașat acestui obiect.', + 'file_attached' => 'Fișierul ":name" a fost încărcat cu succes.', + 'must_exist' => 'Câmpul ID :attribute nu există în baza de date.', + 'all_accounts_equal' => 'Toate conturile din acest câmp trebuie să fie egale.', + 'group_title_mandatory' => 'Un titlu de grup este obligatoriu atunci când există mai multe tranzacții.', + 'transaction_types_equal' => 'Toate împărțirile trebuie să fie de același tip.', + 'invalid_transaction_type' => 'Tip tranzacție nevalidă.', + 'invalid_selection' => 'Selecția dvs. este nevalidă.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Aveți nevoie de cel puțin o tranzacție.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Aveți nevoie de cel puțin o repetare.', + 'require_repeat_until' => 'Solicitați fie un număr de repetări, fie o dată de încheiere (repeat_until). Nu amândouă.', + 'require_currency_info' => 'Conținutul acestui câmp este nevalid fără informații despre monedă.', + 'not_transfer_account' => 'Acest cont nu este un cont care poate fi utilizat pentru transferuri.', + 'require_currency_amount' => 'Conținutul acestui câmp este nevalid fără informații despre monedă.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'Descrierea tranzacției nu trebuie să fie egală cu descrierea globală.', + 'file_invalid_mime' => 'Fișierul ":name" este de tip ":mime" și nu este acceptat ca o încărcare nouă.', + 'file_too_large' => 'Fișierul ":name" este prea mare.', + 'belongs_to_user' => 'Valoarea :attribute este necunoscută.', + 'accepted' => 'Câmpul :attribute trebuie să fie acceptat.', + 'bic' => 'Acesta nu este un BIC valabil.', + 'at_least_one_trigger' => 'Regula trebuie să aibă cel puțin un declanșator.', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => 'Regula trebuie să aibă cel puțin o acțiune.', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => 'Acest lucru nu este valabil pentru datele encoded base64.', + 'model_id_invalid' => 'ID-ul dat nu pare valid pentru acest model.', + 'less' => ':attribute trebuie să fie mai mic decât 10,000,000', + 'active_url' => ':attribute nu este o adresă URL validă.', + 'after' => ':attribute trebuie să fie o dată ulterioară :date.', + 'date_after' => 'Data de început trebuie să fie înainte de data de sfârșit.', + 'alpha' => ':attribute poate conține numai litere.', + 'alpha_dash' => ':attribute poate conține numai litere, numere și liniuțe.', + 'alpha_num' => ':attribute poate conține numai litere și numere.', + 'array' => ':attribute trebuie să fie o matrice (array).', + 'unique_for_user' => 'Există deja o intrare cu acest :attribute.', + 'before' => ':attribute trebuie să fie o dată înainte de :date.', + 'unique_object_for_user' => 'Acest nume este deja folosit.', + 'unique_account_for_user' => 'Acest nume de cont este deja utilizat.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute trebuie să fie între :min și :max.', + 'between.file' => ':attribute trebuie să fie între :min și :max kilobyți.', + 'between.string' => ':attribute trebuie să fie între :min și :max caractere.', + 'between.array' => ':attribute trebuie să aibă între :min și :max articole.', + 'boolean' => ':attribute trebuie să fie adevărat sau fals.', + 'confirmed' => ':attribute confirmarea nu se potrivește.', + 'date' => ':attribute nu este o dată validă.', + 'date_format' => ':attribute nu se potrivește cu formatul :format.', + 'different' => ':attribute și :other trebuie să fie diferite.', + 'digits' => ':attribute trebuie să fie :digits digits.', + 'digits_between' => ':attribute trebuie să fie între :min și :max digits.', + 'email' => ':attribute trebuie să fie o adresă de e-mail validă.', + 'filled' => 'Câmpul :attribute este necesar.', + 'exists' => 'Câmpul selectat :attribute este invalid.', + 'image' => 'Câmpul :attribute trebuie să fie o imagine.', + 'in' => 'Câmpul selectat :attribute este invalid.', + 'integer' => ':attribute trebuie să fie un număr întreg.', + 'ip' => ':attribute trebuie să fie o adresă IP valabilă.', + 'json' => ':attribute trebuie să fie un șir JSON valid.', + 'max.numeric' => ':attribute nu poate fi mai mare decât :max.', + 'max.file' => ':attribute nu poate fi mai mare decât :max kilobyți.', + 'max.string' => ':attribute nu poate fi mai mare decât :max caractere.', + 'max.array' => ':attribute nu poate avea mai mult de :max articole.', + 'mimes' => ':attribute trebuie să fie un fișier de tipul: :values.', + 'min.numeric' => ':attribute trebuie să aibă măcar :min.', + 'lte.numeric' => ':attribute trebuie să fie mai mic sau egal :value.', + 'min.file' => ':attribute trebuie să aibă măcar :min kilobyți.', + 'min.string' => ':attribute trebuie să aibă măcar :min caractere.', + 'min.array' => ':attribute trebuie să aibă măcar :min articole.', + 'not_in' => 'Câmpul selectat :attribute este invalid.', + 'numeric' => 'Câmpul :attribute trebuie să fie un număr.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Suma nativă trebuie să fie un număr.', + 'numeric_destination' => 'Suma destinației trebuie să fie un număr.', + 'numeric_source' => 'Suma sursei trebuie să fie un număr.', + 'regex' => 'Câmpul :attribute are format nevalid.', + 'required' => 'Câmpul :attribute este obligatoriu.', + 'required_if' => 'Câmpul :attribute este obligatoriu când :other este :value.', + 'required_unless' => 'Câmpul :attribute este obligatoriu dacă nu :other este în :values.', + 'required_with' => 'Câmpul :attribute este obligatoriu când :values este prezent.', + 'required_with_all' => 'Câmpul :attribute este obligatoriu când :values este prezent.', + 'required_without' => 'Câmpul :attribute este obligatoriu când :values nu este prezent.', + 'required_without_all' => 'Câmpul :attribute este obligatoriu când nici unul dintre :values este prezent.', + 'same' => ':attribute și :other trebuie să se potrivească.', + 'size.numeric' => ':attribute trebuie să fie :size.', + 'amount_min_over_max' => 'Suma minimă nu poate fi mai mare decât suma maximă.', + 'size.file' => ':attribute trebuie să aibă :size kilobyți.', + 'size.string' => ':attribute trebuie să aibă :size caractere.', + 'size.array' => ':attribute trebuie să contină :size articole.', + 'unique' => ':attribute a fost deja luat.', + 'string' => ':attribute trebuie să fie un șir de caractere.', + 'url' => ':attribute format este invalid.', + 'timezone' => ':attribute trebuie să fie o zonă validă.', + '2fa_code' => 'Câmpul :attribute este invalid.', + 'dimensions' => ':attribute are dimensiuni de imagine nevalide.', + 'distinct' => 'Câmpul :attribute are o valoare duplicată.', + 'file' => ':attribute trebuie să fie un fișier.', + 'in_array' => 'Câmpul :attribute nu există în :other.', + 'present' => 'Câmpul :attribute trebuie să fie prezent.', + 'amount_zero' => 'Suma totală nu poate fi zero.', + 'current_target_amount' => 'Suma curentă trebuie să fie mai mică decât suma vizată.', + 'unique_piggy_bank_for_user' => 'Numele pușculiței trebuie să fie unic.', + 'unique_object_group' => 'Numele grupului trebuie să fie unic', + 'starts_with' => 'Valoarea trebuie să înceapă cu :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Ambele conturi trebuie să fie de acelaşi tip de cont', + 'same_account_currency' => 'Ambele conturi trebuie să aibă aceeași monedă', - 'between.numeric' => ':attribute trebuie să fie între :min și :max.', - 'between.file' => ':attribute trebuie să fie între :min și :max kilobyți.', - 'between.string' => ':attribute trebuie să fie între :min și :max caractere.', - 'between.array' => ':attribute trebuie să aibă între :min și :max articole.', - 'boolean' => ':attribute trebuie să fie adevărat sau fals.', - 'confirmed' => ':attribute confirmarea nu se potrivește.', - 'date' => ':attribute nu este o dată validă.', - 'date_format' => ':attribute nu se potrivește cu formatul :format.', - 'different' => ':attribute și :other trebuie să fie diferite.', - 'digits' => ':attribute trebuie să fie :digits digits.', - 'digits_between' => ':attribute trebuie să fie între :min și :max digits.', - 'email' => ':attribute trebuie să fie o adresă de e-mail validă.', - 'filled' => 'Câmpul :attribute este necesar.', - 'exists' => 'Câmpul selectat :attribute este invalid.', - 'image' => 'Câmpul :attribute trebuie să fie o imagine.', - 'in' => 'Câmpul selectat :attribute este invalid.', - 'integer' => ':attribute trebuie să fie un număr întreg.', - 'ip' => ':attribute trebuie să fie o adresă IP valabilă.', - 'json' => ':attribute trebuie să fie un șir JSON valid.', - 'max.numeric' => ':attribute nu poate fi mai mare decât :max.', - 'max.file' => ':attribute nu poate fi mai mare decât :max kilobyți.', - 'max.string' => ':attribute nu poate fi mai mare decât :max caractere.', - 'max.array' => ':attribute nu poate avea mai mult de :max articole.', - 'mimes' => ':attribute trebuie să fie un fișier de tipul: :values.', - 'min.numeric' => ':attribute trebuie să aibă măcar :min.', - 'lte.numeric' => ':attribute trebuie să fie mai mic sau egal :value.', - 'min.file' => ':attribute trebuie să aibă măcar :min kilobyți.', - 'min.string' => ':attribute trebuie să aibă măcar :min caractere.', - 'min.array' => ':attribute trebuie să aibă măcar :min articole.', - 'not_in' => 'Câmpul selectat :attribute este invalid.', - 'numeric' => 'Câmpul :attribute trebuie să fie un număr.', - 'numeric_native' => 'Suma nativă trebuie să fie un număr.', - 'numeric_destination' => 'Suma destinației trebuie să fie un număr.', - 'numeric_source' => 'Suma sursei trebuie să fie un număr.', - 'regex' => 'Câmpul :attribute are format nevalid.', - 'required' => 'Câmpul :attribute este obligatoriu.', - 'required_if' => 'Câmpul :attribute este obligatoriu când :other este :value.', - 'required_unless' => 'Câmpul :attribute este obligatoriu dacă nu :other este în :values.', - 'required_with' => 'Câmpul :attribute este obligatoriu când :values este prezent.', - 'required_with_all' => 'Câmpul :attribute este obligatoriu când :values este prezent.', - 'required_without' => 'Câmpul :attribute este obligatoriu când :values nu este prezent.', - 'required_without_all' => 'Câmpul :attribute este obligatoriu când nici unul dintre :values este prezent.', - 'same' => ':attribute și :other trebuie să se potrivească.', - 'size.numeric' => ':attribute trebuie să fie :size.', - 'amount_min_over_max' => 'Suma minimă nu poate fi mai mare decât suma maximă.', - 'size.file' => ':attribute trebuie să aibă :size kilobyți.', - 'size.string' => ':attribute trebuie să aibă :size caractere.', - 'size.array' => ':attribute trebuie să contină :size articole.', - 'unique' => ':attribute a fost deja luat.', - 'string' => ':attribute trebuie să fie un șir de caractere.', - 'url' => ':attribute format este invalid.', - 'timezone' => ':attribute trebuie să fie o zonă validă.', - '2fa_code' => 'Câmpul :attribute este invalid.', - 'dimensions' => ':attribute are dimensiuni de imagine nevalide.', - 'distinct' => 'Câmpul :attribute are o valoare duplicată.', - 'file' => ':attribute trebuie să fie un fișier.', - 'in_array' => 'Câmpul :attribute nu există în :other.', - 'present' => 'Câmpul :attribute trebuie să fie prezent.', - 'amount_zero' => 'Suma totală nu poate fi zero.', - 'current_target_amount' => 'Suma curentă trebuie să fie mai mică decât suma vizată.', - 'unique_piggy_bank_for_user' => 'Numele pușculiței trebuie să fie unic.', - 'unique_object_group' => 'Numele grupului trebuie să fie unic', - 'starts_with' => 'Valoarea trebuie să înceapă cu :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Ambele conturi trebuie să fie de acelaşi tip de cont', - 'same_account_currency' => 'Ambele conturi trebuie să aibă aceeași monedă', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Aceasta nu este o parolă sigură. Vă rugăm să încercați din nou. Pentru mai multe informații, vizitați https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Tip de repetare nevalid pentru tranzacțiile recurente.', - 'valid_recurrence_rep_moment' => 'Momentul repetiției nevalid pentru acest tip de repetare.', - 'invalid_account_info' => 'Informațiile contului nevalide.', - 'attributes' => [ + 'secure_password' => 'Aceasta nu este o parolă sigură. Vă rugăm să încercați din nou. Pentru mai multe informații, vizitați https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Tip de repetare nevalid pentru tranzacțiile recurente.', + 'valid_recurrence_rep_moment' => 'Momentul repetiției nevalid pentru acest tip de repetare.', + 'invalid_account_info' => 'Informațiile contului nevalide.', + 'attributes' => [ 'email' => 'adresă e-mail', 'description' => 'descriere', 'amount' => 'sumă', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Trebuie să continuați să obțineți un ID de cont sursă valabil și / sau un nume de cont sursă valabil.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Nu s-a găsit un cont de destinaţie valabil la căutarea ID ":id" sau nume ":name".', + 'withdrawal_source_need_data' => 'Trebuie să continuați să obțineți un ID de cont sursă valabil și / sau un nume de cont sursă valabil.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Nu s-a găsit un cont de destinaţie valabil la căutarea ID ":id" sau nume ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Trebuie să continuați să obțineți un ID de cont sursă valabil și / sau un nume de cont sursă valabil.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Nu s-a găsit un cont de destinaţie valabil la căutarea ID ":id" sau nume ":name".', - 'deposit_dest_wrong_type' => 'Contul de destinație trimis nu este de tipul potrivit.', + 'deposit_source_need_data' => 'Trebuie să continuați să obțineți un ID de cont sursă valabil și / sau un nume de cont sursă valabil.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Nu s-a găsit un cont de destinaţie valabil la căutarea ID ":id" sau nume ":name".', + 'deposit_dest_wrong_type' => 'Contul de destinație trimis nu este de tipul potrivit.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Trebuie să continuați să obțineți un ID de cont sursă valabil și / sau un nume de cont sursă valabil.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Nu s-a găsit un cont de destinaţie valabil la căutarea ID ":id" sau nume ":name".', + 'need_id_in_edit' => 'Fiecare împărțire trebuie să aibă transaction_journal_id (fie ID valid sau 0).', - 'transfer_source_need_data' => 'Trebuie să continuați să obțineți un ID de cont sursă valabil și / sau un nume de cont sursă valabil.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Nu s-a găsit un cont de destinaţie valabil la căutarea ID ":id" sau nume ":name".', - 'need_id_in_edit' => 'Fiecare împărțire trebuie să aibă transaction_journal_id (fie ID valid sau 0).', + 'ob_source_need_data' => 'Pentru a continua, trebuie să obțineți un ID sursă validă și / sau un nume valid al contului sursă valabil.', + 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Nu s-a găsit un cont de destinaţie valabil la căutarea ID ":id" sau nume ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Pentru a continua, trebuie să obțineți un ID sursă validă și / sau un nume valid al contului sursă valabil.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Nu s-a găsit un cont de destinaţie valabil la căutarea ID ":id" sau nume ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Nu puteți utiliza acest cont ca și cont sursă.', + 'generic_invalid_destination' => 'Nu puteți utiliza acest cont ca și cont de destinație.', - 'generic_invalid_source' => 'Nu puteți utiliza acest cont ca și cont sursă.', - 'generic_invalid_destination' => 'Nu puteți utiliza acest cont ca și cont de destinație.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => ':attribute trebuie să fie mai mare sau egal cu :value.', - 'gt.numeric' => ':attribute trebuie să fie mai mare decât :value.', - 'gte.file' => ':attribute trebuie să fie mai mare sau egal cu :value kilobytes.', - 'gte.string' => ':attribute trebuie să fie mai mare sau egal cu :value caractere.', - 'gte.array' => ':attribute trebuie sa aiba :value valori sau mai multe.', + 'gte.numeric' => ':attribute trebuie să fie mai mare sau egal cu :value.', + 'gt.numeric' => ':attribute trebuie să fie mai mare decât :value.', + 'gte.file' => ':attribute trebuie să fie mai mare sau egal cu :value kilobytes.', + 'gte.string' => ':attribute trebuie să fie mai mare sau egal cu :value caractere.', + 'gte.array' => ':attribute trebuie sa aiba :value valori sau mai multe.', 'amount_required_for_auto_budget' => 'Suma este necesară.', 'auto_budget_amount_positive' => 'Suma trebuie să fie mai mare decât zero.', + 'auto_budget_period_mandatory' => 'Perioada de autobuget este un câmp obligatoriu.', // no access to administration: diff --git a/resources/lang/ru_RU/api.php b/resources/lang/ru_RU/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/ru_RU/api.php +++ b/resources/lang/ru_RU/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/ru_RU/auth.php b/resources/lang/ru_RU/auth.php index 375f8bccaa..cafb9f9601 100644 --- a/resources/lang/ru_RU/auth.php +++ b/resources/lang/ru_RU/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Неправильный адрес электронной почты или пароль.', 'throttle' => 'Слишком много попыток входа. Пожалуйста, попробуйте снова через :seconds секунд.', diff --git a/resources/lang/ru_RU/breadcrumbs.php b/resources/lang/ru_RU/breadcrumbs.php index 2dc825921d..12e40fe018 100644 --- a/resources/lang/ru_RU/breadcrumbs.php +++ b/resources/lang/ru_RU/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Главная', - 'budgets' => 'Бюджет', - 'subscriptions' => 'Подписки', - 'transactions' => 'Транзакции', - 'title_expenses' => 'Расходы', - 'title_withdrawal' => 'Расходы', - 'title_revenue' => 'Доходы / поступления', - 'title_deposit' => 'Доходы / поступления', - 'title_transfer' => 'Перевод', - 'title_transfers' => 'Переводы', - 'edit_currency' => 'Редактирование валюты ":name"', - 'delete_currency' => 'Удаление валюты ":name"', - 'newPiggyBank' => 'Создание новой копилки', - 'edit_piggyBank' => 'Редактирование копилки ":name"', - 'preferences' => 'Настройки', - 'profile' => 'Профиль', - 'accounts' => 'Счета', - 'changePassword' => 'Изменение вашего пароля', - 'change_email' => 'Изменить адрес электронной почты', - 'bills' => 'Счета к оплате', - 'newBill' => 'Новый счёт к оплате', - 'edit_bill' => 'Редактирование счёта к оплате ":name"', - 'delete_bill' => 'Удаление счёта к оплате ":name"', - 'reports' => 'Отчёты', - 'search_result' => 'Результаты поиска для ":query"', - 'withdrawal_list' => 'Мои расходы', - 'Withdrawal_list' => 'Расходы', - 'deposit_list' => 'Мои доходы', - 'transfer_list' => 'Переводы', - 'transfers_list' => 'Переводы', + 'home' => 'Главная', + 'budgets' => 'Бюджет', + 'subscriptions' => 'Подписки', + 'transactions' => 'Транзакции', + 'title_expenses' => 'Расходы', + 'title_withdrawal' => 'Расходы', + 'title_revenue' => 'Доходы / поступления', + 'title_deposit' => 'Доходы / поступления', + 'title_transfer' => 'Перевод', + 'title_transfers' => 'Переводы', + 'edit_currency' => 'Редактирование валюты ":name"', + 'delete_currency' => 'Удаление валюты ":name"', + 'newPiggyBank' => 'Создание новой копилки', + 'edit_piggyBank' => 'Редактирование копилки ":name"', + 'preferences' => 'Настройки', + 'profile' => 'Профиль', + 'accounts' => 'Счета', + 'changePassword' => 'Изменение вашего пароля', + 'change_email' => 'Изменить адрес электронной почты', + 'bills' => 'Счета к оплате', + 'newBill' => 'Новый счёт к оплате', + 'edit_bill' => 'Редактирование счёта к оплате ":name"', + 'delete_bill' => 'Удаление счёта к оплате ":name"', + 'reports' => 'Отчёты', + 'search_result' => 'Результаты поиска для ":query"', + 'withdrawal_list' => 'Мои расходы', + 'Withdrawal_list' => 'Расходы', + 'deposit_list' => 'Мои доходы', + 'transfer_list' => 'Переводы', + 'transfers_list' => 'Переводы', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Сверка', 'create_withdrawal' => 'Создать новый расход', 'create_deposit' => 'Создать новый доход', diff --git a/resources/lang/ru_RU/components.php b/resources/lang/ru_RU/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/ru_RU/components.php +++ b/resources/lang/ru_RU/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ru_RU/config.php b/resources/lang/ru_RU/config.php index b37e019b9f..9050867f9b 100644 --- a/resources/lang/ru_RU/config.php +++ b/resources/lang/ru_RU/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'ru', - 'locale' => 'ru, Russian, ru_RU.utf8, ru_RU.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'ru', + 'locale' => 'ru, Russian, ru_RU.utf8, ru_RU.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMM YYYY', - 'month_and_day_fns' => 'D MMMM YYYY', - 'month_and_day_js' => 'Do MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D MMM YYYY', + 'month_and_day_fns' => 'D MMMM YYYY', + 'month_and_day_js' => 'Do MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'Do MMMM YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'Do MMMM YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'Do MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'Do MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'Do MMMM YYYY, @ HH:mm:ss', + 'date_time_fns' => 'Do MMMM yyyy, @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'Do MMMM YYYY, @ HH:mm:ss', - 'date_time_fns' => 'Do MMMM yyyy, @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Неделя' ww, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Неделя' ww, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "Q'-й квартал', yyyy", - 'half_year_fns' => "'{half}-е полугодие', yyyy", - 'dow_1' => 'Понедельник', - 'dow_2' => 'Вторник', - 'dow_3' => 'Среда', - 'dow_4' => 'Четверг', - 'dow_5' => 'Пятница', - 'dow_6' => 'Суббота', - 'dow_7' => 'Воскресенье', + 'quarter_fns' => "Q'-й квартал', yyyy", + 'half_year_fns' => "'{half}-е полугодие', yyyy", + 'dow_1' => 'Понедельник', + 'dow_2' => 'Вторник', + 'dow_3' => 'Среда', + 'dow_4' => 'Четверг', + 'dow_5' => 'Пятница', + 'dow_6' => 'Суббота', + 'dow_7' => 'Воскресенье', ]; /* diff --git a/resources/lang/ru_RU/demo.php b/resources/lang/ru_RU/demo.php index c275658739..1efe8c8f7f 100644 --- a/resources/lang/ru_RU/demo.php +++ b/resources/lang/ru_RU/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ru_RU/email.php b/resources/lang/ru_RU/email.php index 1767bb86bf..14b5489ff7 100644 --- a/resources/lang/ru_RU/email.php +++ b/resources/lang/ru_RU/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Тестовое сообщение от вашей установки Firefly III', 'admin_test_body' => 'Это тестовое сообщение с вашего сервера Firefly III. Оно было отправлено на :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Приглашение было создано', 'invitation_created_body' => 'Администратор ":email" создал приглашение пользователю с адресом электронной почты ":invitee". Приглашение действительно в течение 48 часов.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Сбросить пароль:', 'registered_doc_link' => 'Документация:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'Доступна новая версия Firefly III', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Если вы предпочитаете, вы также можете открыть новый тикет на https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Полная трассировка стека:', 'error_headers' => 'Заголовки также могут иметь отношение к следующим темам:', + 'error_post' => 'Это было отправлено пользователем:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III создал новую транзакцию|Firefly III создал :count новых транзакций', 'new_journals_header' => 'Firefly III создал для вас транзакцию. Вы можете найти её в вашей установке Firefly III: |Firefly III создал для вас :count транзакций. Вы можете найти их в вашей установке Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Срок действия вашего счета **":name"** истекает :date. Это **СЕГОДНЯ!**', 'bill_warning_extension_date_zero' => 'Ваш счет **":name"** необходимо продлить или отменить :date. Это **СЕГОДНЯ!**', 'bill_warning_please_action' => 'Просим принять соответствующие меры.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ru_RU/errors.php b/resources/lang/ru_RU/errors.php index ab2614c8d2..5bb5a8d366 100644 --- a/resources/lang/ru_RU/errors.php +++ b/resources/lang/ru_RU/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Трассировка стека', 'more_info' => 'Подробности', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Пожалуйста, соберите больше информации в каталоге storage/logs, где вы найдете файлы журнала. Если вы используете Docker, используйте docker logs -f [container].', - 'collect_info_more' => 'Вы можете прочитать больше о сборе информации об ошибке в FAQ.', - 'github_help' => 'Получить помощь на GitHub', - 'github_instructions' => 'Я буду очень признателен, если вы откроете Заявку на GitHub.', - 'use_search' => 'Используйте поиск!', - 'include_info' => 'Включить информацию с этой страницы отладки.', - 'tell_more' => 'Я хочу знать больше, чем просто "Упс!"', - 'include_logs' => 'Прикрепить журналы ошибок (см. выше).', - 'what_did_you_do' => 'Расскажите нам, что именно вы делали.', - 'offline_header' => 'Вы возможно офлайн', - 'offline_unreachable' => 'Firefly III не доступен. Ваше устройство сейчас не в сети или сервер выключен.', - 'offline_github' => 'Если вы уверены что ваше устройство и сервер в сети то откройте заявку GitHub.', - + 'collect_info' => 'Пожалуйста, соберите больше информации в каталоге storage/logs, где вы найдете файлы журнала. Если вы используете Docker, используйте docker logs -f [container].', + 'collect_info_more' => 'Подробнее о сборе информации об ошибках можно прочитать в FAQ.', + 'github_help' => 'Получить помощь на GitHub', + 'github_instructions' => 'Я буду очень признателен, если вы откроете Заявку на GitHub.', + 'use_search' => 'Используйте поиск!', + 'include_info' => 'Включить информацию с этой страницы отладки.', + 'tell_more' => 'Я хочу знать больше, чем просто "Упс!"', + 'include_logs' => 'Прикрепить журналы ошибок (см. выше).', + 'what_did_you_do' => 'Расскажите нам, что именно вы делали.', + 'offline_header' => 'Вы возможно офлайн', + 'offline_unreachable' => 'Firefly III не доступен. Ваше устройство сейчас не в сети или сервер выключен.', + 'offline_github' => 'Если вы уверены что ваше устройство и сервер в сети то откройте заявку GitHub.', ]; diff --git a/resources/lang/ru_RU/firefly.php b/resources/lang/ru_RU/firefly.php index 2bda631dac..999c292800 100644 --- a/resources/lang/ru_RU/firefly.php +++ b/resources/lang/ru_RU/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Закрыть', - 'actions' => 'Действия', - 'edit' => 'Изменить', - 'delete' => 'Удалить', - 'split' => 'Разделить', - 'single_split' => 'Разделённая транзакция', - 'clone' => 'Клонировать', - 'confirm_action' => 'Подтвердите действие', - 'last_seven_days' => 'Последние 7 дней', - 'last_thirty_days' => 'Последние 30 дней', - 'last_180_days' => 'Последние 180 дней', - 'month_to_date' => 'Месяц до даты', - 'year_to_date' => 'Лет до даты', - 'YTD' => 'YTD', - 'welcome_back' => 'Что происходит с моими финансами?', - 'everything' => 'Всё', - 'today' => 'сегодня', - 'customRange' => 'Другой интервал', - 'date_range' => 'Диапазон дат', - 'apply' => 'Применить', - 'select_date' => 'Выбрать дату...', - 'cancel' => 'Отмена', - 'from' => 'От', - 'to' => 'Куда', - 'structure' => 'Структура', - 'help_translating' => 'Этот текст справки пока не доступен на русском языке. Но вы можете помочь с переводом.', - 'showEverything' => 'Показать всё', - 'never' => 'Никогда', - 'no_results_for_empty_search' => 'Результатов не найдено.', - 'removed_amount' => 'Снято :amount', - 'added_amount' => 'Добавлено :amount', - 'asset_account_role_help' => 'Вы сможете произвести любые дополнительные настройки позже.', - 'Opening balance' => 'Баланс на момент открытия', - 'create_new_stuff' => 'Создать новый объект', - 'new_withdrawal' => 'Новый расход', - 'create_new_transaction' => 'Создать новую транзакцию', - 'sidebar_frontpage_create' => 'Создать', - 'new_transaction' => 'Новая транзакция', - 'no_rules_for_bill' => 'С этим счётом не связано ни одно правило.', - 'go_to_asset_accounts' => 'Просмотр ваших основных счетов', - 'go_to_budgets' => 'Перейти к вашим бюджетам', - 'go_to_withdrawals' => 'Перейти к вашим расходам', - 'clones_journal_x' => 'Эта транзакция является клоном ":description" (#:id)', - 'go_to_categories' => 'Перейти к вашим категориям', - 'go_to_bills' => 'Перейти к вашим счетам на оплату', - 'go_to_expense_accounts' => 'Перейти к вашим счетам расходов', - 'go_to_revenue_accounts' => 'Перейти к вашим счетам доходов', - 'go_to_piggies' => 'Перейти к вашим копилкам', - 'new_deposit' => 'Новый доход', - 'new_transfer' => 'Новый перевод', - 'new_transfers' => 'Новый перевод', - 'new_asset_account' => 'Новый счет активов', - 'new_expense_account' => 'Новый расходный счет', - 'new_revenue_account' => 'Новый доходный счет', - 'new_liabilities_account' => 'Новый долг', - 'new_budget' => 'Новый бюджет', - 'new_bill' => 'Новый счёт к оплате', - 'block_account_logout' => 'Вы вышли из системы. Заблокированные учётные записи не могут использовать этот сайт. Вы зарегистрировались с действующим адресом электронной почты?', - 'flash_success' => 'Успешно!', - 'flash_info' => 'Сообщение', - 'flash_warning' => 'Предупреждение!', - 'flash_error' => 'Ошибка!', - 'flash_danger' => 'Опасность!', - 'flash_info_multiple' => 'Есть одно сообщение|Есть :count сообщений', - 'flash_error_multiple' => 'Есть одна ошибка|Есть :count ошибок', - 'net_worth' => 'Мои сбережения', - 'help_for_this_page' => 'Справка по этой странице', - 'help_for_this_page_body' => 'Вы можете найти подробную информацию об этой странице в документации.', - 'two_factor_welcome' => 'Здравствуйте!', - 'two_factor_enter_code' => 'Чтобы продолжить, введите ваш код двухфакторной аутентификации. Ваше приложение может сгенерировать его для вас.', - 'two_factor_code_here' => 'Введите код здесь', - 'two_factor_title' => 'Двухфакторная аутентификация', - 'authenticate' => 'Аутентифицироваться', - 'two_factor_forgot_title' => 'Утерян код для двухфакторной аутентификации', - 'two_factor_forgot' => 'Я забыл свой ключ для двухфакторной авторизации.', - 'two_factor_lost_header' => 'Потеряли вашу двухфакторную аутентификацию?', - 'two_factor_lost_intro' => 'Если вы потеряли также и ваши резервные коды, вам не повезло. Эту проблему вы не сможете решить через веб-интерфейс. Теперь у вас есть два варианта.', - 'two_factor_lost_fix_self' => 'Если вы запускаете свой собственный экземпляр Firefly III, прочтите эту запись в FAQ для получения инструкций.', - 'two_factor_lost_fix_owner' => 'Иначе, свяжитесь по email с владельцем сайта :site_owner и попросите сбросить вашу двухфакторную аутентификацию.', - 'mfa_backup_code' => 'Вы использовали резервный код для входа в Firefly III. Его нельзя использовать второй раз, поэтому вычеркните его из своего списка.', - 'pref_two_factor_new_backup_codes' => 'Получить новые коды резервирования', - 'pref_two_factor_backup_code_count' => 'У вас есть :count действующих резервных кодов.|У вас есть :count действующих резервных кодов.', - '2fa_i_have_them' => 'Я всё сохранил!', - 'warning_much_data' => 'Загрузка данных за :days дней может занять некоторое время.', - 'registered' => 'Вы зарегистрировались успешно!', - 'Default asset account' => 'Счёт по умолчанию', - 'no_budget_pointer' => 'Похоже, у вас пока нет бюджетов. Вы должны создать их на странице Бюджеты. Бюджеты могут помочь вам отслеживать расходы.', - 'no_bill_pointer' => 'Похоже, у вас пока нет счетов на оплату. Вы должны создать их на странице Счета на оплату. Счета на оплату могут помочь вам отслеживать расходы.', - 'Savings account' => 'Сберегательный счет', - 'Credit card' => 'Кредитная карта', - 'source_accounts' => 'Счёт-источник|Счета-источники', - 'destination_accounts' => 'Счёт назначения|Счета назначения', - 'user_id_is' => 'Ваш id пользователя :user', - 'field_supports_markdown' => 'Это поле поддерживает Markdown.', - 'need_more_help' => 'Если вам нужна дополнительная помощь по использованию Firefly III, пожалуйста, откройте issue на Github (желательно, на английском языке).', - 'reenable_intro_text' => 'Вы также можете повторно включить обучение для начинающих.', - 'intro_boxes_after_refresh' => 'Блоки с подсказками появятся, когда вы обновите страницу.', - 'show_all_no_filter' => 'Показать все транзакции без группировки по датам.', - 'expenses_by_category' => 'Расходы по категориям', - 'expenses_by_budget' => 'Расходы по бюджетам', - 'income_by_category' => 'Доход по категориям', - 'expenses_by_asset_account' => 'Расходы по основному счёту', - 'expenses_by_expense_account' => 'Расходы по счёту расходов', - 'cannot_redirect_to_account' => 'Firefly III не может перенаправить вас на правильную страницу. Приносим извинения.', - 'sum_of_expenses' => 'Сумма расходов', - 'sum_of_income' => 'Сумма дохода', - 'liabilities' => 'Долговые счета', - 'spent_in_specific_budget' => 'Расходы по бюджету ":budget"', - 'spent_in_specific_double' => 'Расходы по счёту ":account"', - 'earned_in_specific_double' => 'Доходы по счёту ":account"', - 'source_account' => 'Счёт-источник', - 'source_account_reconciliation' => 'Вы не можете редактировать счёт-источник для сверяемой транзакции.', - 'destination_account' => 'Счёт назначения', - 'destination_account_reconciliation' => 'Вы не можете редактировать счёт назначения для сверяемой транзакции.', - 'sum_of_expenses_in_budget' => 'Сумма расходов по бюджету ":budget"', - 'left_in_budget_limit' => 'Осталось потратить в соответствии с бюджетом', - 'current_period' => 'Текущий период', - 'show_the_current_period_and_overview' => 'Показать текущий период и обзор', - 'pref_languages_locale' => 'Для корректной работы с языками, отличными от английского, ваша операционная система должна отдавать корректную информацию о локали. Если это не так, валюты, даты и суммы могут отображаться некорректно.', - 'budget_in_period' => 'Все транзакции для бюджета ":name" между :start и :end в :currency', - 'chart_budget_in_period' => 'Диаграмма всех транзакций для бюджета ":name" между :start и :end в :currency', - 'chart_budget_in_period_only_currency' => 'Ваш бюджет использует валюту :currency, поэтому будут показаны только транзакции в :currency.', - 'chart_account_in_period' => 'Диаграмма всех транзакций для счёта ":name" (:balance) между :start и :end', - 'chart_category_in_period' => 'Диаграмма всех транзакций для категории ":name" между :start и :end', - 'chart_category_all' => 'Диаграмма всех транзакций для категории ":name"', - 'clone_withdrawal' => 'Клонировать этот расход', - 'clone_deposit' => 'Клонировать этот доход', - 'clone_transfer' => 'Клонировать этот трансфер', - 'multi_select_no_selection' => 'Ничего не выбрано', - 'multi_select_select_all' => 'Выбрать все', - 'multi_select_n_selected' => 'выбранные', - 'multi_select_all_selected' => 'Все выбранные', - 'multi_select_filter_placeholder' => 'Поиск..', - 'intro_next_label' => 'Далее', - 'intro_prev_label' => 'Назад', - 'intro_skip_label' => 'Пропустить', - 'intro_done_label' => 'Завершить', - 'between_dates_breadcrumb' => 'Между :start и :end', - 'all_journals_without_budget' => 'Все транзакции без бюджета', - 'journals_without_budget' => 'Транзакции без бюджета', - 'all_journals_without_category' => 'Все транзакции без категории', - 'journals_without_category' => 'Транзакции без категории', - 'all_journals_for_account' => 'Все транзакции для счёта :name', - 'chart_all_journals_for_account' => 'Диаграмма всех транзакций для счёта :name', - 'journals_in_period_for_account' => 'Все транзакции для счёта :name между :start и :end', - 'journals_in_period_for_account_js' => 'Все транзакции по счету {title} между {start} и {end}', - 'transferred' => 'Переведено', - 'all_withdrawal' => 'Все расходы', - 'all_transactions' => 'Все транзакции', - 'title_withdrawal_between' => 'Все расходы между :start и :end', - 'all_deposit' => 'Все доходы', - 'title_deposit_between' => 'Все доходы между :start и :end', - 'all_transfers' => 'Все переводы', - 'title_transfers_between' => 'Все переводы между :start и :end', - 'all_transfer' => 'Все переводы', - 'all_journals_for_tag' => 'Все транзакции для метки ":tag"', - 'title_transfer_between' => 'Все переводы между :start и :end', - 'all_journals_for_category' => 'Все транзакции для категории :name', - 'all_journals_for_budget' => 'Все транзакции для бюджета :name', - 'chart_all_journals_for_budget' => 'Диаграмма всех транзакций для бюджета :name', - 'journals_in_period_for_category' => 'Все транзакции для категории :name между :start и :end', - 'journals_in_period_for_tag' => 'Все транзакции для метки :tag между :start и :end', - 'not_available_demo_user' => 'Функция, которую вы пытаетесь использовать, недоступна для демо-пользователей.', - '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' => 'Неправильная конфигурация сервера', - 'invalid_locale_settings' => 'Firefly III не может форматировать денежные суммы, потому что на вашем сервере отсутствуют необходимые пакеты. Вот инструкции, как это сделать.', - 'quickswitch' => 'Быстрое переключение', - 'sign_in_to_start' => 'Войдите, чтобы начать сессию', - 'sign_in' => 'Войти', - 'register_new_account' => 'Зарегистрировать новый счёт', - 'forgot_my_password' => 'Я забыл пароль', - 'problems_with_input' => 'Есть кое-какие проблемы с введёнными вами данными.', - 'reset_password' => 'Восстановление пароля', - 'button_reset_password' => 'Сбросить пароль', - 'reset_button' => 'Сбросить', - 'want_to_login' => 'Я хочу войти', - 'login_page_title' => 'Вход в Firefly III', - 'register_page_title' => 'Регистрация в Firefly III', - 'forgot_pw_page_title' => 'Забыли свой пароль к Firefly III?', - 'reset_pw_page_title' => 'Сбросить свой пароль к Firefly III', - 'cannot_reset_demo_user' => 'Вы не можете сбросить пароль демонстрационной учётной записи.', - 'no_att_demo_user' => 'Демо-пользователь не может загружать вложения.', - 'button_register' => 'Регистрация', - 'authorization' => 'Авторизация', - 'active_bills_only' => 'только активные счета', - 'active_bills_only_total' => 'все активные счета на оплату', - 'active_exp_bills_only' => 'только активные и ожидаемые счета на оплату', - 'active_exp_bills_only_total' => 'только активные и ожидаемые счета на оплату', - 'per_period_sum_1D' => 'Ожидаемые ежедневные расходы', - 'per_period_sum_1W' => 'Ожидаемые еженедельные расходы', - 'per_period_sum_1M' => 'Ожидаемые ежемесячные расходы', - 'per_period_sum_3M' => 'Ожидаемые ежеквартальные расходы', - 'per_period_sum_6M' => 'Ожидаемые расходы раз в полгода', - 'per_period_sum_1Y' => 'Ожидаемые ежегодные расходы', - 'average_per_bill' => 'в среднем на счёт', - 'expected_total' => 'ожидаемый итог', - 'reconciliation_account_name' => ':name сверка (:currency)', - 'saved' => 'Сохранено', - 'advanced_options' => 'Расширенные настройки', - 'advanced_options_explain' => 'На некоторых страницах Firefly III за этой кнопкой скрыты расширенные опции. На этой странице нет ничего фантастического, но проверьте на других страницах!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Закрыть', + 'actions' => 'Действия', + 'edit' => 'Изменить', + 'delete' => 'Удалить', + 'split' => 'Разделить', + 'single_split' => 'Разделённая транзакция', + 'clone' => 'Клонировать', + 'clone_and_edit' => 'Клонировать и редактировать', + 'confirm_action' => 'Подтвердите действие', + 'last_seven_days' => 'Последние 7 дней', + 'last_thirty_days' => 'Последние 30 дней', + 'last_180_days' => 'Последние 180 дней', + 'month_to_date' => 'Месяц до даты', + 'year_to_date' => 'Лет до даты', + 'YTD' => 'YTD', + 'welcome_back' => 'Что происходит с моими финансами?', + 'everything' => 'Всё', + 'today' => 'сегодня', + 'customRange' => 'Другой интервал', + 'date_range' => 'Диапазон дат', + 'apply' => 'Применить', + 'select_date' => 'Выбрать дату...', + 'cancel' => 'Отмена', + 'from' => 'От', + 'to' => 'Куда', + 'structure' => 'Структура', + 'help_translating' => 'Этот текст справки пока не доступен на русском языке. Но вы можете помочь с переводом.', + 'showEverything' => 'Показать всё', + 'never' => 'Никогда', + 'no_results_for_empty_search' => 'Результатов не найдено.', + 'removed_amount' => 'Снято :amount', + 'added_amount' => 'Добавлено :amount', + 'asset_account_role_help' => 'Вы сможете произвести любые дополнительные настройки позже.', + 'Opening balance' => 'Баланс на момент открытия', + 'create_new_stuff' => 'Создать новый объект', + 'new_withdrawal' => 'Новый расход', + 'create_new_transaction' => 'Создать новую транзакцию', + 'sidebar_frontpage_create' => 'Создать', + 'new_transaction' => 'Новая транзакция', + 'no_rules_for_bill' => 'С этим счётом не связано ни одно правило.', + 'go_to_asset_accounts' => 'Просмотр ваших основных счетов', + 'go_to_budgets' => 'Перейти к вашим бюджетам', + 'go_to_withdrawals' => 'Перейти к вашим расходам', + 'clones_journal_x' => 'Эта транзакция является клоном ":description" (#:id)', + 'go_to_categories' => 'Перейти к вашим категориям', + 'go_to_bills' => 'Перейти к вашим счетам на оплату', + 'go_to_expense_accounts' => 'Перейти к вашим счетам расходов', + 'go_to_revenue_accounts' => 'Перейти к вашим счетам доходов', + 'go_to_piggies' => 'Перейти к вашим копилкам', + 'new_deposit' => 'Новый доход', + 'new_transfer' => 'Новый перевод', + 'new_transfers' => 'Новый перевод', + 'new_asset_account' => 'Новый счет активов', + 'new_expense_account' => 'Новый счёт расходов', + 'new_revenue_account' => 'Новый счёт доходов', + 'new_liabilities_account' => 'Новый долг', + 'new_budget' => 'Новый бюджет', + 'new_bill' => 'Новый счёт к оплате', + 'block_account_logout' => 'Вы вышли из системы. Заблокированные учётные записи не могут использовать этот сайт. Вы зарегистрировались с действующим адресом электронной почты?', + 'flash_success' => 'Успешно!', + 'flash_info' => 'Сообщение', + 'flash_warning' => 'Предупреждение!', + 'flash_error' => 'Ошибка!', + 'flash_danger' => 'Опасность!', + 'flash_info_multiple' => 'Есть одно сообщение|Есть :count сообщений', + 'flash_error_multiple' => 'Есть одна ошибка|Есть :count ошибок', + 'net_worth' => 'Мои сбережения', + 'help_for_this_page' => 'Справка по этой странице', + 'help_for_this_page_body' => 'Вы можете найти подробную информацию об этой странице в документации.', + 'two_factor_welcome' => 'Здравствуйте!', + 'two_factor_enter_code' => 'Чтобы продолжить, введите ваш код двухфакторной аутентификации. Ваше приложение может сгенерировать его для вас.', + 'two_factor_code_here' => 'Введите код здесь', + 'two_factor_title' => 'Двухфакторная аутентификация', + 'authenticate' => 'Аутентифицироваться', + 'two_factor_forgot_title' => 'Утерян код для двухфакторной аутентификации', + 'two_factor_forgot' => 'Я забыл свой ключ для двухфакторной авторизации.', + 'two_factor_lost_header' => 'Потеряли вашу двухфакторную аутентификацию?', + 'two_factor_lost_intro' => 'Если вы потеряли также и ваши резервные коды, вам не повезло. Эту проблему вы не сможете решить через веб-интерфейс. Теперь у вас есть два варианта.', + 'two_factor_lost_fix_self' => 'Если вы запускаете собственный экземпляр Firefly III, прочтите :site_owner и попросите сбросить вашу двухфакторную аутентификацию.', + 'mfa_backup_code' => 'Вы использовали резервный код для входа в Firefly III. Его нельзя использовать второй раз, поэтому вычеркните его из своего списка.', + 'pref_two_factor_new_backup_codes' => 'Получить новые коды резервирования', + 'pref_two_factor_backup_code_count' => 'У вас есть :count действующих резервных кодов.|У вас есть :count действующих резервных кодов.', + '2fa_i_have_them' => 'Я всё сохранил!', + 'warning_much_data' => 'Загрузка данных за :days дней может занять некоторое время.', + 'registered' => 'Вы зарегистрировались успешно!', + 'Default asset account' => 'Счёт по умолчанию', + 'no_budget_pointer' => 'Похоже, у вас пока нет бюджетов. Вы должны создать их на странице Бюджеты. Бюджеты могут помочь вам отслеживать расходы.', + 'no_bill_pointer' => 'Похоже, у вас пока нет счетов на оплату. Вы должны создать их на странице Счета на оплату. Счета на оплату могут помочь вам отслеживать расходы.', + 'Savings account' => 'Сберегательный счет', + 'Credit card' => 'Кредитная карта', + 'source_accounts' => 'Счёт-источник|Счета-источники', + 'destination_accounts' => 'Счёт назначения|Счета назначения', + 'user_id_is' => 'Ваш id пользователя :user', + 'field_supports_markdown' => 'Это поле поддерживает Markdown.', + 'need_more_help' => 'Если вам нужна дополнительная помощь по использованию Firefly III, пожалуйста, откройте issue на Github (желательно, на английском языке).', + 'reenable_intro_text' => 'Вы также можете повторно включить обучение для начинающих.', + 'intro_boxes_after_refresh' => 'Блоки с подсказками появятся, когда вы обновите страницу.', + 'show_all_no_filter' => 'Показать все транзакции без группировки по датам.', + 'expenses_by_category' => 'Расходы по категориям', + 'expenses_by_budget' => 'Расходы по бюджетам', + 'income_by_category' => 'Доход по категориям', + 'expenses_by_asset_account' => 'Расходы по основному счёту', + 'expenses_by_expense_account' => 'Расходы по счёту расходов', + 'cannot_redirect_to_account' => 'Firefly III не может перенаправить вас на правильную страницу. Приносим извинения.', + 'sum_of_expenses' => 'Сумма расходов', + 'sum_of_income' => 'Сумма дохода', + 'liabilities' => 'Долговые счета', + 'spent_in_specific_budget' => 'Расходы по бюджету ":budget"', + 'spent_in_specific_double' => 'Расходы по счёту ":account"', + 'earned_in_specific_double' => 'Доходы по счёту ":account"', + 'source_account' => 'Счёт-источник', + 'source_account_reconciliation' => 'Вы не можете редактировать счёт-источник для сверяемой транзакции.', + 'destination_account' => 'Счёт назначения', + 'destination_account_reconciliation' => 'Вы не можете редактировать счёт назначения для сверяемой транзакции.', + 'sum_of_expenses_in_budget' => 'Сумма расходов по бюджету ":budget"', + 'left_in_budget_limit' => 'Осталось потратить в соответствии с бюджетом', + 'current_period' => 'Текущий период', + 'show_the_current_period_and_overview' => 'Показать текущий период и обзор', + 'pref_languages_locale' => 'Для корректной работы с языками, отличными от английского, ваша операционная система должна отдавать корректную информацию о локали. Если это не так, валюты, даты и суммы могут отображаться некорректно.', + 'budget_in_period' => 'Все транзакции для бюджета ":name" между :start и :end в :currency', + 'chart_budget_in_period' => 'Диаграмма всех транзакций для бюджета ":name" между :start и :end в :currency', + 'chart_budget_in_period_only_currency' => 'Ваш бюджет использует валюту :currency, поэтому будут показаны только транзакции в :currency.', + 'chart_account_in_period' => 'Диаграмма всех транзакций для счёта ":name" (:balance) между :start и :end', + 'chart_category_in_period' => 'Диаграмма всех транзакций для категории ":name" между :start и :end', + 'chart_category_all' => 'Диаграмма всех транзакций для категории ":name"', + 'clone_withdrawal' => 'Клонировать этот расход', + 'clone_deposit' => 'Клонировать этот доход', + 'clone_transfer' => 'Клонировать этот трансфер', + 'multi_select_no_selection' => 'Ничего не выбрано', + 'multi_select_select_all' => 'Выбрать все', + 'multi_select_n_selected' => 'выбранные', + 'multi_select_all_selected' => 'Все выбранные', + 'multi_select_filter_placeholder' => 'Поиск..', + 'intro_next_label' => 'Далее', + 'intro_prev_label' => 'Назад', + 'intro_skip_label' => 'Пропустить', + 'intro_done_label' => 'Завершить', + 'between_dates_breadcrumb' => 'Между :start и :end', + 'all_journals_without_budget' => 'Все транзакции без бюджета', + 'journals_without_budget' => 'Транзакции без бюджета', + 'all_journals_without_category' => 'Все транзакции без категории', + 'journals_without_category' => 'Транзакции без категории', + 'all_journals_for_account' => 'Все транзакции для счёта :name', + 'chart_all_journals_for_account' => 'Диаграмма всех транзакций для счёта :name', + 'journals_in_period_for_account' => 'Все транзакции для счёта :name между :start и :end', + 'journals_in_period_for_account_js' => 'Все транзакции по счету {title} между {start} и {end}', + 'transferred' => 'Переведено', + 'all_withdrawal' => 'Все расходы', + 'all_transactions' => 'Все транзакции', + 'title_withdrawal_between' => 'Все расходы между :start и :end', + 'all_deposit' => 'Все доходы', + 'title_deposit_between' => 'Все доходы между :start и :end', + 'all_transfers' => 'Все переводы', + 'title_transfers_between' => 'Все переводы между :start и :end', + 'all_transfer' => 'Все переводы', + 'all_journals_for_tag' => 'Все транзакции для метки ":tag"', + 'title_transfer_between' => 'Все переводы между :start и :end', + 'all_journals_for_category' => 'Все транзакции для категории :name', + 'all_journals_for_budget' => 'Все транзакции для бюджета :name', + 'chart_all_journals_for_budget' => 'Диаграмма всех транзакций для бюджета :name', + 'journals_in_period_for_category' => 'Все транзакции для категории :name между :start и :end', + 'journals_in_period_for_tag' => 'Все транзакции для метки :tag между :start и :end', + 'not_available_demo_user' => 'Функция, которую вы пытаетесь использовать, недоступна для демо-пользователей.', + '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' => 'Неправильная конфигурация сервера', + 'invalid_locale_settings' => 'Firefly III не может форматировать денежные суммы, потому что на вашем сервере отсутствуют необходимые пакеты. Инструкция, как это сделать.', + 'quickswitch' => 'Быстрое переключение', + 'sign_in_to_start' => 'Войдите, чтобы начать сессию', + 'sign_in' => 'Войти', + 'register_new_account' => 'Зарегистрировать новый счёт', + 'forgot_my_password' => 'Я забыл пароль', + 'problems_with_input' => 'Есть кое-какие проблемы с введёнными вами данными.', + 'reset_password' => 'Восстановление пароля', + 'button_reset_password' => 'Сбросить пароль', + 'reset_button' => 'Сбросить', + 'want_to_login' => 'Я хочу войти', + 'login_page_title' => 'Вход в Firefly III', + 'register_page_title' => 'Регистрация в Firefly III', + 'forgot_pw_page_title' => 'Забыли свой пароль к Firefly III?', + 'reset_pw_page_title' => 'Сбросить свой пароль к Firefly III', + 'cannot_reset_demo_user' => 'Вы не можете сбросить пароль демонстрационной учётной записи.', + 'no_att_demo_user' => 'Демо-пользователь не может загружать вложения.', + 'button_register' => 'Регистрация', + 'authorization' => 'Авторизация', + 'active_bills_only' => 'только активные счета', + 'active_bills_only_total' => 'все активные счета на оплату', + 'active_exp_bills_only' => 'только активные и ожидаемые счета на оплату', + 'active_exp_bills_only_total' => 'только активные и ожидаемые счета на оплату', + 'per_period_sum_1D' => 'Ожидаемые ежедневные расходы', + 'per_period_sum_1W' => 'Ожидаемые еженедельные расходы', + 'per_period_sum_1M' => 'Ожидаемые ежемесячные расходы', + 'per_period_sum_3M' => 'Ожидаемые ежеквартальные расходы', + 'per_period_sum_6M' => 'Ожидаемые расходы раз в полгода', + 'per_period_sum_1Y' => 'Ожидаемые ежегодные расходы', + 'average_per_bill' => 'в среднем на счёт', + 'expected_total' => 'ожидаемый итог', + 'reconciliation_account_name' => ':name сверка (:currency)', + 'saved' => 'Сохранено', + 'advanced_options' => 'Расширенные настройки', + 'advanced_options_explain' => 'На некоторых страницах Firefly III за этой кнопкой скрыты расширенные опции. На этой странице нет ничего фантастического, но проверьте на других страницах!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Веб-хуки', - 'webhooks_breadcrumb' => 'Вебхуки', - 'no_webhook_messages' => 'Нет сообщений от вебхуков', - 'webhook_trigger_STORE_TRANSACTION' => 'После создания транзакции', - 'webhook_trigger_UPDATE_TRANSACTION' => 'После обновления транзакции', - 'webhook_trigger_DESTROY_TRANSACTION' => 'После удаления транзакции', - 'webhook_response_TRANSACTIONS' => 'Детали операции', - 'webhook_response_ACCOUNTS' => 'Сведения об учетной записи', - 'webhook_response_none_NONE' => 'Нет подробных сведений', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Проинспектировать', - 'create_new_webhook' => 'Создать новый вебхук', - 'webhooks_create_breadcrumb' => 'Создать новый вебхук', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Добавлен новый вебхук ":title"', - 'delete_webhook' => 'Удалить вебхук', - 'deleted_webhook' => 'Удалить вебхук ":title"', - 'edit_webhook' => 'Редактировать webhook ":title"', - 'updated_webhook' => 'Обновлен webhook ":title"', - 'edit_webhook_js' => 'Редактировать вебхук "{title}"', - 'show_webhook' => 'Вебхук ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Сообщение вебхука', - 'view_message' => 'Просмотр сообщения', - 'view_attempts' => 'Просмотр неудачных попыток', - 'message_content_title' => 'Содержимое сообщения webhook', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Логи', - 'response' => 'Ответ', - 'visit_webhook_url' => 'Посетить URL вебхука', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Веб-хуки', + 'webhooks_breadcrumb' => 'Вебхуки', + 'webhooks_menu_disabled' => 'отключено', + 'no_webhook_messages' => 'Нет сообщений от вебхуков', + 'webhook_trigger_STORE_TRANSACTION' => 'После создания транзакции', + 'webhook_trigger_UPDATE_TRANSACTION' => 'После обновления транзакции', + 'webhook_trigger_DESTROY_TRANSACTION' => 'После удаления транзакции', + 'webhook_response_TRANSACTIONS' => 'Детали операции', + 'webhook_response_ACCOUNTS' => 'Сведения об учетной записи', + 'webhook_response_none_NONE' => 'Нет подробных сведений', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Проинспектировать', + 'create_new_webhook' => 'Создать новый вебхук', + 'webhooks_create_breadcrumb' => 'Создать новый вебхук', + 'webhook_trigger_form_help' => 'Укажите, на каких событиях будет срабатывать веб-хук', + 'webhook_response_form_help' => 'Укажите, что веб-хук должен отправить на URL.', + 'webhook_delivery_form_help' => 'В каком формате должны быть загружены данные веб-хука.', + 'webhook_active_form_help' => 'Веб-хук должен быть активным или он не будет вызван.', + 'stored_new_webhook' => 'Добавлен новый вебхук ":title"', + 'delete_webhook' => 'Удалить вебхук', + 'deleted_webhook' => 'Удалить вебхук ":title"', + 'edit_webhook' => 'Редактировать webhook ":title"', + 'updated_webhook' => 'Обновлен webhook ":title"', + 'edit_webhook_js' => 'Редактировать вебхук "{title}"', + 'show_webhook' => 'Вебхук ":title"', + 'webhook_was_triggered' => 'Веб-хук сработал на указанную транзакцию. Пожалуйста, дождитесь появления результатов.', + 'webhook_messages' => 'Сообщение вебхука', + 'view_message' => 'Просмотр сообщения', + 'view_attempts' => 'Просмотр неудачных попыток', + 'message_content_title' => 'Содержимое сообщения webhook', + 'message_content_help' => 'Это содержимое сообщения, которое было отправлено (или попробовало) с помощью этого веб-хука.', + 'attempt_content_title' => 'Попытки веб-хука', + 'attempt_content_help' => 'Это все неудачные попытки отправки этого веб-хук сообщения на указанный URL. Через некоторое время Firefly III прекратит попытки.', + 'no_attempts' => 'Нет неудачных попыток. Это хорошо!', + 'webhook_attempt_at' => 'Попытка в {moment}', + 'logs' => 'Логи', + 'response' => 'Ответ', + 'visit_webhook_url' => 'Посетить URL вебхука', + 'reset_webhook_secret' => 'Сбросить секрет webhook', + 'webhook_stored_link' => 'Веб-хук #{ID} ("{title}") сохранен.', + 'webhook_updated_link' => 'Веб-хук #{ID} ("{title}") обновлен.', // API access - 'authorization_request' => 'Запрос авторизации Firefly III v:version', - 'authorization_request_intro' => 'Приложение ":client" запрашивает разрешение на доступ к вашему финансовому администрированию. Вы хотите разрешить :client доступ к этим записям?', - 'authorization_request_site' => 'Вы будете перенаправлены на :url, который будет иметь доступ к вашим данным Firefly III.', - 'authorization_request_invalid' => 'Этот запрос доступа недействителен. Пожалуйста, никогда не переходите по этой ссылке снова.', - 'scopes_will_be_able' => 'Это приложение будет иметь возможность:', - 'button_authorize' => 'Авторизация', - 'none_in_select_list' => '(нет)', - 'no_piggy_bank' => '(нет копилки)', - 'name_in_currency' => ':name в :currency', - 'paid_in_currency' => 'Оплачено в :currency', - 'unpaid_in_currency' => 'Неоплачено в :currency', - 'is_alpha_warning' => 'Вы используете АЛЬФА-версию. Будьте осторожны с ошибками и проблемами.', - 'is_beta_warning' => 'Вы используете БЕТА-версию. Будьте осторожны с ошибками и проблемами.', - 'all_destination_accounts' => 'Счета назначения', - 'all_source_accounts' => 'Счета-источники', - 'back_to_index' => 'Вернуться к содержанию', - 'cant_logout_guard' => 'Firefly III не может выйти из системы.', - 'internal_reference' => 'Внутренняя ссылка', + 'authorization_request' => 'Запрос авторизации Firefly III v:version', + 'authorization_request_intro' => 'Приложение ":client" запрашивает разрешение на доступ к вашему финансовому администрированию. Вы хотите разрешить :client доступ к этим записям?', + 'authorization_request_site' => 'Вы будете перенаправлены на :url, который будет иметь доступ к вашим данным Firefly III.', + 'authorization_request_invalid' => 'Этот запрос доступа недействителен. Пожалуйста, никогда не переходите по этой ссылке снова.', + 'scopes_will_be_able' => 'Это приложение будет иметь возможность:', + 'button_authorize' => 'Авторизация', + 'none_in_select_list' => '(нет)', + 'no_piggy_bank' => '(нет копилки)', + 'name_in_currency' => ':name в :currency', + 'paid_in_currency' => 'Оплачено в :currency', + 'unpaid_in_currency' => 'Неоплачено в :currency', + 'is_alpha_warning' => 'Вы используете АЛЬФА-версию. Будьте осторожны с ошибками и проблемами.', + 'is_beta_warning' => 'Вы используете БЕТА-версию. Будьте осторожны с ошибками и проблемами.', + 'all_destination_accounts' => 'Счета назначения', + 'all_source_accounts' => 'Счета-источники', + 'back_to_index' => 'Вернуться к содержанию', + 'cant_logout_guard' => 'Firefly III не может выйти из системы.', + 'internal_reference' => 'Внутренняя ссылка', // check for updates: - 'update_check_title' => 'Проверить обновления', - 'admin_update_check_title' => 'Автоматически проверять наличие обновлений', - 'admin_update_check_explain' => 'Firefly III может автоматически проверять наличие обновлений. После включения опции, он свяжется с сервером обновлений Firefly III, чтобы узнать, доступна ли новая версия Firefly III. Когда это произойдёт, вы получите уведомление. Вы можете проверить это уведомление, нажав кнопку справа. Пожалуйста, укажите ниже, если вы хотите, чтобы Firefly III проверял наличие обновлений.', - 'check_for_updates_permission' => 'Firefly III может проверять наличие обновлений, но для этого требуется ваше разрешение. Перейдите в администрирование, чтобы указать, хотите ли вы включить эту функцию.', - 'updates_ask_me_later' => 'Спросить меня позже', - 'updates_do_not_check' => 'Не проверять наличие обновлений', - 'updates_enable_check' => 'Включить проверку обновлений', - 'admin_update_check_now_title' => 'Проверить наличие обновлений', - 'admin_update_check_now_explain' => 'Если вы нажмете кнопку, Firefly III посмотрит, является ли ваша текущая версия последней.', - 'check_for_updates_button' => 'Проверить сейчас!', - 'update_new_version_alert' => 'Доступна новая версия Firefly III. Вы используете версию v:your_version, самая свежая версия - v:new_version (выпущена :date).', - 'update_version_beta' => 'Эта версия является БЕТА-версией. Вы можете столкнуться с проблемами.', - 'update_version_alpha' => 'Эта версия является АЛЬФА-версией. Вы можете столкнуться с проблемами.', - 'update_current_version_alert' => 'Вы используете v:version, которая является последним доступным релизом.', - 'update_newer_version_alert' => 'Вы используете версию v:your_version, которая новее последнего релиза (v:new_version).', - 'update_check_error' => 'Произошла ошибка при проверке обновлений: :error', - 'unknown_error' => 'Неизвестная ошибка. Извините за это.', - 'just_new_release' => 'Доступна новая версия! Версия :version была выпущена :date. Этот релиз очень свежий. Подождите несколько дней, пока этот релиз стабилизируется.', - 'disabled_but_check' => 'Вы отключили проверку обновлений. Так что не забывайте время от времени проверять наличие обновлений самостоятельно. Спасибо!', - 'admin_update_channel_title' => 'Канал обновлений', - 'admin_update_channel_explain' => 'Firefly III может использовать три "канала" обновлений, которые различаются наборами новых функций и ошибок. Используйте "бета"-канал, если вы любите приключения и "альфа", если вам нравится жить с чувством постоянной опасности.', - 'update_channel_stable' => 'Стабильный. Всё должно работать, как вы ожидаете.', - 'update_channel_beta' => 'Бета. Есть новые возможности, но что-нибудь может быть сломано.', - 'update_channel_alpha' => 'Альфа. Код таких версий может быть собран из соплей и палок.', + 'update_check_title' => 'Проверить обновления', + 'admin_update_check_title' => 'Автоматически проверять наличие обновлений', + 'admin_update_check_explain' => 'Firefly III может автоматически проверять наличие обновлений. После включения опции, он свяжется с сервером обновлений Firefly III, чтобы узнать, доступна ли новая версия Firefly III. Когда это произойдёт, вы получите уведомление. Вы можете проверить это уведомление, нажав кнопку справа. Пожалуйста, укажите ниже, если вы хотите, чтобы Firefly III проверял наличие обновлений.', + 'check_for_updates_permission' => 'Firefly III может проверять наличие обновлений, но для этого требуется ваше разрешение. Перейдите в администрирование, чтобы указать, хотите ли вы включить эту функцию.', + 'updates_ask_me_later' => 'Спросить меня позже', + 'updates_do_not_check' => 'Не проверять наличие обновлений', + 'updates_enable_check' => 'Включить проверку обновлений', + 'admin_update_check_now_title' => 'Проверить наличие обновлений', + 'admin_update_check_now_explain' => 'Если вы нажмете кнопку, Firefly III посмотрит, является ли ваша текущая версия последней.', + 'check_for_updates_button' => 'Проверить сейчас!', + 'update_new_version_alert' => 'Доступна новая версия Firefly III. Вы используете версию v:your_version, самая свежая версия - v:new_version (выпущена :date).', + 'update_version_beta' => 'Эта версия является БЕТА-версией. Вы можете столкнуться с проблемами.', + 'update_version_alpha' => 'Эта версия является АЛЬФА-версией. Вы можете столкнуться с проблемами.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Вы используете v:version, которая является последним доступным релизом.', + 'update_newer_version_alert' => 'Вы используете версию v:your_version, которая новее последнего релиза (v:new_version).', + 'update_check_error' => 'Произошла ошибка при проверке обновлений: :error', + 'unknown_error' => 'Неизвестная ошибка. Извините за это.', + 'disabled_but_check' => 'Вы отключили проверку обновлений. Так что не забывайте время от времени проверять наличие обновлений самостоятельно. Спасибо!', + 'admin_update_channel_title' => 'Канал обновлений', + 'admin_update_channel_explain' => 'Firefly III может использовать три "канала" обновлений, которые различаются наборами новых функций и ошибок. Используйте "бета"-канал, если вы любите приключения и "альфа", если вам нравится жить с чувством постоянной опасности.', + 'update_channel_stable' => 'Стабильный. Всё должно работать, как вы ожидаете.', + 'update_channel_beta' => 'Бета. Есть новые возможности, но что-нибудь может быть сломано.', + 'update_channel_alpha' => 'Альфа. Код таких версий может быть собран из соплей и палок.', // search - 'search' => 'Поиск', - 'search_query' => 'Запрос', - 'search_found_transactions' => 'Firefly III нашёл :count транзакции за :time секунд.|Firefly III нашёл :count транзакций за :time секунд.', - 'search_found_more_transactions' => 'Firefly III нашёл более :count транзакций за :time секунд.', - 'search_for_query' => 'Firefly III ищет транзакции со всеми этими словами: :query', - 'invalid_operators_list' => 'Эти параметры поиска некорректны и были проигнорированы.', + 'search' => 'Поиск', + 'search_query' => 'Запрос', + 'search_found_transactions' => 'Firefly III нашёл :count транзакции за :time секунд.|Firefly III нашёл :count транзакций за :time секунд.', + 'search_found_more_transactions' => 'Firefly III нашёл более :count транзакций за :time секунд.', + 'search_for_query' => 'Firefly III ищет транзакции со всеми этими словами: :query', + 'invalid_operators_list' => 'Эти параметры поиска некорректны и были проигнорированы.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Дата транзакции: ":value"', 'search_modifier_not_date_on' => 'Дата транзакции не ":value"', 'search_modifier_reconciled' => 'Транзакция сверена', @@ -363,11 +364,11 @@ return [ 'search_modifier_no_external_url' => 'У транзакции нет внешнего URL', 'search_modifier_no_external_id' => 'У транзакции нет внешнего URL', 'search_modifier_not_any_external_url' => 'У транзакции нет внешнего URL', - 'search_modifier_not_any_external_id' => 'The transaction has no external ID', + 'search_modifier_not_any_external_id' => 'У транзакции нет внешнего ID', 'search_modifier_any_external_url' => 'Транзакция должна иметь (любой) внешний URL', - 'search_modifier_any_external_id' => 'The transaction must have a (any) external ID', + 'search_modifier_any_external_id' => 'Транзакция должна иметь (любой) внешний идентификатор', 'search_modifier_not_no_external_url' => 'Транзакция должна иметь (любой) внешний URL', - 'search_modifier_not_no_external_id' => 'The transaction must have a (any) external ID', + 'search_modifier_not_no_external_id' => 'Транзакция должна иметь (любой) внешний идентификатор', 'search_modifier_internal_reference_is' => 'Внутренняя ссылка: ":value"', 'search_modifier_not_internal_reference_is' => 'Внутренняя ссылка не ":value"', 'search_modifier_description_starts' => 'Описание начинается с ":value"', @@ -377,88 +378,88 @@ return [ 'search_modifier_description_contains' => 'Описание содержит ":value"', 'search_modifier_not_description_contains' => 'Описание не содержит ":value"', 'search_modifier_description_is' => 'Описание точно соответствует ":value"', - 'search_modifier_not_description_is' => 'Description is exactly not ":value"', + 'search_modifier_not_description_is' => 'Описание не является ":value"', 'search_modifier_currency_is' => '(Иностранная) валюта транзакции - ":value"', - 'search_modifier_not_currency_is' => 'Transaction (foreign) currency is not ":value"', + 'search_modifier_not_currency_is' => 'Валюта транзакции (иностранная) не ":value"', 'search_modifier_foreign_currency_is' => 'Иностранная валюта транзакции - ":value"', - 'search_modifier_not_foreign_currency_is' => 'Transaction foreign currency is not ":value"', + 'search_modifier_not_foreign_currency_is' => 'Иностранная валюта транзакции не ":value"', 'search_modifier_has_attachments' => 'Транзакция должна иметь вложение', 'search_modifier_has_no_category' => 'Транзакция не должна быть связана с категорией', - 'search_modifier_not_has_no_category' => 'The transaction must have a (any) category', - 'search_modifier_not_has_any_category' => 'The transaction must have no category', + 'search_modifier_not_has_no_category' => 'Транзакция должна иметь (любую) категорию', + 'search_modifier_not_has_any_category' => 'Транзакция не должна иметь категорию', 'search_modifier_has_any_category' => 'Транзакция должна быть связана с (любой) категорией', 'search_modifier_has_no_budget' => 'Транзакция не должна быть связана с бюджетом', - 'search_modifier_not_has_any_budget' => 'The transaction must have no budget', + 'search_modifier_not_has_any_budget' => 'Транзакция не должна иметь бюджет', 'search_modifier_has_any_budget' => 'Транзакция должна быть связана с (любым) бюджетом', - 'search_modifier_not_has_no_budget' => 'The transaction must have a (any) budget', + 'search_modifier_not_has_no_budget' => 'Транзакция должна иметь (любой) бюджет', 'search_modifier_has_no_bill' => 'Транзакция не должна иметь счёта', - 'search_modifier_not_has_no_bill' => 'The transaction must have a (any) bill', + 'search_modifier_not_has_no_bill' => 'Транзакция должна иметь (любой) счёт к оплате', 'search_modifier_has_any_bill' => 'Транзакция должна иметь (любой) счет', - 'search_modifier_not_has_any_bill' => 'The transaction must have no bill', + 'search_modifier_not_has_any_bill' => 'Транзакция не должна иметь счета', 'search_modifier_has_no_tag' => 'У транзакции не должно быть меток', - 'search_modifier_not_has_any_tag' => 'The transaction must have no tags', - 'search_modifier_not_has_no_tag' => 'The transaction must have a (any) tag', + 'search_modifier_not_has_any_tag' => 'У транзакции не должно быть меток', + 'search_modifier_not_has_no_tag' => 'Транзакция должна иметь (любую) метку', 'search_modifier_has_any_tag' => 'Транзакция должна иметь (любую) метку', 'search_modifier_notes_contains' => 'Заметка к транзакции содержит ":value"', - 'search_modifier_not_notes_contains' => 'The transaction notes do not contain ":value"', + 'search_modifier_not_notes_contains' => 'Заметки к транзакции не содержат ":value"', 'search_modifier_notes_starts' => 'Заметка к транзакции начинается с ":value"', - 'search_modifier_not_notes_starts' => 'The transaction notes do not start with ":value"', + 'search_modifier_not_notes_starts' => 'Заметки к транзакции не начинаются с ":value"', 'search_modifier_notes_ends' => 'Заметка к транзакции заканчивается на ":value"', - 'search_modifier_not_notes_ends' => 'The transaction notes do not end with ":value"', + 'search_modifier_not_notes_ends' => 'Заметки к транзакции не заканчиваются на ":value"', 'search_modifier_notes_is' => 'Заметка к транзакции в точности совпадает с ":value"', - 'search_modifier_not_notes_is' => 'The transaction notes are exactly not ":value"', + 'search_modifier_not_notes_is' => 'Заметки к транзакции не совпадают с ":value"', 'search_modifier_no_notes' => 'Транзакция не содержит заметок', - 'search_modifier_not_no_notes' => 'The transaction must have notes', + 'search_modifier_not_no_notes' => 'Транзакция должна иметь заметки', 'search_modifier_any_notes' => 'Транзакция должна содержать заметки', - 'search_modifier_not_any_notes' => 'The transaction has no notes', + 'search_modifier_not_any_notes' => 'У транзакции нет заметок', 'search_modifier_amount_is' => 'Сумма в точности равна :value', 'search_modifier_not_amount_is' => 'Сумма не равна :value', 'search_modifier_amount_less' => 'Сумма меньше или равна :value', - 'search_modifier_not_amount_more' => 'Amount is less than or equal to :value', + 'search_modifier_not_amount_more' => 'Сумма меньше или равна :value', 'search_modifier_amount_more' => 'Сумма больше или равна :value', - 'search_modifier_not_amount_less' => 'Amount is more than or equal to :value', + 'search_modifier_not_amount_less' => 'Сумма больше или равна :value', 'search_modifier_source_account_is' => 'Название счёта-источника точно соответствует ":value"', - 'search_modifier_not_source_account_is' => 'Source account name is not ":value"', + 'search_modifier_not_source_account_is' => 'Название счёта-источника не ":value"', 'search_modifier_source_account_contains' => 'Название счёта-источника содержит ":value"', - 'search_modifier_not_source_account_contains' => 'Source account name does not contain ":value"', + 'search_modifier_not_source_account_contains' => 'Название счёта-источника не содержит ":value"', 'search_modifier_source_account_starts' => 'Название счёта-источника начинается с ":value"', - 'search_modifier_not_source_account_starts' => 'Source account name does not start with ":value"', + 'search_modifier_not_source_account_starts' => 'Название счёта-источника не начинается с ":value"', 'search_modifier_source_account_ends' => 'Название счёта-источника заканчивается на ":value"', - 'search_modifier_not_source_account_ends' => 'Source account name does not end with ":value"', + 'search_modifier_not_source_account_ends' => 'Название счёта-источника не заканчивается на ":value"', 'search_modifier_source_account_id' => 'ID счёта-источника = :value', - 'search_modifier_not_source_account_id' => 'Source account ID is not :value', + 'search_modifier_not_source_account_id' => 'Идентификатор исходного аккаунта не :value', 'search_modifier_source_account_nr_is' => 'Номер счёта-источника (IBAN) - ":value"', - 'search_modifier_not_source_account_nr_is' => 'Source account number (IBAN) is not ":value"', + 'search_modifier_not_source_account_nr_is' => 'Номер счёта-источника (IBAN) не ":value"', 'search_modifier_source_account_nr_contains' => 'Номер счёта-источника (IBAN) содержит ":value"', - 'search_modifier_not_source_account_nr_contains' => 'Source account number (IBAN) does not contain ":value"', + 'search_modifier_not_source_account_nr_contains' => 'Номер счёта-источника (IBAN) не содержит на ":value"', 'search_modifier_source_account_nr_starts' => 'Номер счёта-источника (IBAN) начинается с ":value"', - 'search_modifier_not_source_account_nr_starts' => 'Source account number (IBAN) does not start with ":value"', - 'search_modifier_source_account_nr_ends' => 'Source account number (IBAN) ends on ":value"', - 'search_modifier_not_source_account_nr_ends' => 'Source account number (IBAN) does not end on ":value"', + 'search_modifier_not_source_account_nr_starts' => 'Номер счёта-источника (IBAN) не начинается с ":value"', + 'search_modifier_source_account_nr_ends' => 'Номер счёта-источника (IBAN) заканчивается на ":value"', + 'search_modifier_not_source_account_nr_ends' => 'Номер счёта-источника (IBAN) не заканчивается на ":value"', 'search_modifier_destination_account_is' => 'Название счёта назначения точно соответствует ":value"', - 'search_modifier_not_destination_account_is' => 'Destination account name is not ":value"', + 'search_modifier_not_destination_account_is' => 'Название счёта-назначения не ":value"', 'search_modifier_destination_account_contains' => 'Название счёта назначения содержит ":value"', - 'search_modifier_not_destination_account_contains' => 'Destination account name does not contain ":value"', + 'search_modifier_not_destination_account_contains' => 'Название счёта-назначения не содержит ":value"', 'search_modifier_destination_account_starts' => 'Название счёта назначения начинается с ":value"', - 'search_modifier_not_destination_account_starts' => 'Destination account name does not start with ":value"', - 'search_modifier_destination_account_ends' => 'Destination account name ends on ":value"', - 'search_modifier_not_destination_account_ends' => 'Destination account name does not end on ":value"', + 'search_modifier_not_destination_account_starts' => 'Название счёта-назначения не начинается с ":value"', + 'search_modifier_destination_account_ends' => 'Название счёта-назначения заканчивается на ":value"', + 'search_modifier_not_destination_account_ends' => 'Название счёта-назначения не заканчивается на ":value"', 'search_modifier_destination_account_id' => 'ID счёта назначения = :value', - 'search_modifier_not_destination_account_id' => 'Destination account ID is not :value', - 'search_modifier_destination_is_cash' => 'Destination account is the "(cash)" account', - 'search_modifier_not_destination_is_cash' => 'Destination account is not the "(cash)" account', - 'search_modifier_source_is_cash' => 'Source account is the "(cash)" account', - 'search_modifier_not_source_is_cash' => 'Source account is not the "(cash)" account', + 'search_modifier_not_destination_account_id' => 'ID счёта-назначения не ":value"', + 'search_modifier_destination_is_cash' => 'Целевой счет - это аккаунт "(наличные)"', + 'search_modifier_not_destination_is_cash' => 'Целевой счет - это аккаунт не "(наличные)"', + 'search_modifier_source_is_cash' => 'Исходный счет - это "(наличные)"', + 'search_modifier_not_source_is_cash' => 'Исходный счет не является "(наличные)"', 'search_modifier_destination_account_nr_is' => 'Номер счета назначения (IBAN) - ":value"', - 'search_modifier_not_destination_account_nr_is' => 'Destination account number (IBAN) is ":value"', + 'search_modifier_not_destination_account_nr_is' => 'Номер счета назначения (IBAN) - ":value"', 'search_modifier_destination_account_nr_contains' => 'Номер счета назначения (IBAN) содержит ":value"', - 'search_modifier_not_destination_account_nr_contains' => 'Destination account number (IBAN) does not contain ":value"', + 'search_modifier_not_destination_account_nr_contains' => 'Номер счёта-назначения (IBAN) не содержит ":value"', 'search_modifier_destination_account_nr_starts' => 'Номер счета назначения (IBAN) начинается с ":value"', - 'search_modifier_not_destination_account_nr_starts' => 'Destination account number (IBAN) does not start with ":value"', + 'search_modifier_not_destination_account_nr_starts' => 'Номер счёта-назначения (IBAN) не начинается с ":value"', 'search_modifier_destination_account_nr_ends' => 'Номер счета назначения (IBAN) оканчивается на ":value"', - 'search_modifier_not_destination_account_nr_ends' => 'Destination account number (IBAN) does not end with ":value"', + 'search_modifier_not_destination_account_nr_ends' => 'Номер счёта-назначения (IBAN) не заканчивается на ":value"', 'search_modifier_account_id' => 'ID счета источника или назначения: :value', - 'search_modifier_not_account_id' => 'Source or destination account ID\'s is/are not: :value', + 'search_modifier_not_account_id' => 'Идентификатор счёта источника или назначения не: :value', 'search_modifier_category_is' => 'Категория - ":value"', 'search_modifier_not_category_is' => 'Категория не равна ":value"', 'search_modifier_budget_is' => 'Бюджет - ":value"', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Тип транзакции - ":value"', 'search_modifier_not_transaction_type' => 'Тип транзакции не ":value"', 'search_modifier_tag_is' => 'Тег - ":value"', + 'search_modifier_tag_contains' => 'Метка содержит ":value"', + 'search_modifier_not_tag_contains' => 'Метка не содержит ":value"', + 'search_modifier_tag_ends' => 'Метка заканчивается на ":value"', + 'search_modifier_tag_starts' => 'Метка начинается с ":value"', 'search_modifier_not_tag_is' => 'Нет тега ":value"', 'search_modifier_date_on_year' => 'Транзакция в году ":value"', 'search_modifier_not_date_on_year' => 'Транзакция не в году ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Транзакция в месяце ":value" или после', 'search_modifier_date_after_day' => 'Транзакция после или в день месяца ":value"', - // new 'search_modifier_tag_is_not' => 'Нет тега ":value"', 'search_modifier_not_tag_is_not' => 'Тег ":value"', @@ -497,11 +501,11 @@ return [ 'search_modifier_account_nr_is' => 'Номер счета / IBAN ":value"', 'search_modifier_not_account_nr_is' => 'Номер счета / IBAN ":value"', 'search_modifier_account_nr_contains' => 'Номер счета / IBAN содержит ":value"', - 'search_modifier_not_account_nr_contains' => 'Neither account number / IBAN contains ":value"', - 'search_modifier_account_nr_ends' => 'Either account number / IBAN ends with ":value"', - 'search_modifier_not_account_nr_ends' => 'Neither account number / IBAN ends with ":value"', - 'search_modifier_account_nr_starts' => 'Either account number / IBAN starts with ":value"', - 'search_modifier_not_account_nr_starts' => 'Neither account number / IBAN starts with ":value"', + 'search_modifier_not_account_nr_contains' => 'Ни один номер счета / IBAN не содержит ":value"', + 'search_modifier_account_nr_ends' => 'Номер счета / IBAN заканчивается на ":value"', + 'search_modifier_not_account_nr_ends' => 'Ни один номер счета / IBAN не заканчивается на ":value"', + 'search_modifier_account_nr_starts' => 'Номер счета / IBAN начинается с ":value"', + 'search_modifier_not_account_nr_starts' => 'Ни один номер счета / IBAN не начинается с ":value"', 'search_modifier_category_contains' => 'Категория содержит ":value"', 'search_modifier_not_category_contains' => 'Категория не содержит ":value"', 'search_modifier_category_ends' => 'Категория заканчивается на ":value"', @@ -531,45 +535,45 @@ return [ 'search_modifier_internal_reference_ends' => 'Внутренняя ссылка заканчивается на ":value"', 'search_modifier_internal_reference_starts' => 'Внутренняя ссылка начинается с ":value"', 'search_modifier_not_internal_reference_ends' => 'Внутренняя ссылка не заканчивается на ":value"', - 'search_modifier_not_internal_reference_starts' => 'Internal reference does not start with ":value"', + 'search_modifier_not_internal_reference_starts' => 'Внутренняя ссылка не начинается с ":value"', 'search_modifier_external_url_is' => 'Внешний URL-адрес ":value"', - 'search_modifier_not_external_url_is' => 'External URL is not ":value"', + 'search_modifier_not_external_url_is' => 'Внешний URL не ":value"', 'search_modifier_external_url_contains' => 'Внешний URL содержит ":value"', - 'search_modifier_not_external_url_contains' => 'External URL does not contain ":value"', + 'search_modifier_not_external_url_contains' => 'Внешний URL не содержит ":value"', 'search_modifier_external_url_ends' => 'Внешний URL заканчивается на ":value"', - 'search_modifier_not_external_url_ends' => 'External URL does not end with ":value"', + 'search_modifier_not_external_url_ends' => 'Внешний URL не заканчивается на ":value"', 'search_modifier_external_url_starts' => 'Внешний URL начинается с ":value"', - 'search_modifier_not_external_url_starts' => 'External URL does not start with ":value"', + 'search_modifier_not_external_url_starts' => 'Внешний URL не начинается с ":value"', 'search_modifier_has_no_attachments' => 'Транзакция не содержит вложений', - 'search_modifier_not_has_no_attachments' => 'Transaction has attachments', - 'search_modifier_not_has_attachments' => 'Transaction has no attachments', - 'search_modifier_account_is_cash' => 'Either account is the "(cash)" account.', - 'search_modifier_not_account_is_cash' => 'Neither account is the "(cash)" account.', + 'search_modifier_not_has_no_attachments' => 'Транзакция имеет вложения', + 'search_modifier_not_has_attachments' => 'Транзакции не содержит вложений', + 'search_modifier_account_is_cash' => 'Любой счет является «(наличными)».', + 'search_modifier_not_account_is_cash' => 'Ни один из этих счетов не является "(наличные)".', 'search_modifier_journal_id' => 'ID журнала ":value"', - 'search_modifier_not_journal_id' => 'The journal ID is not ":value"', - 'search_modifier_recurrence_id' => 'The recurring transaction ID is ":value"', - 'search_modifier_not_recurrence_id' => 'The recurring transaction ID is not ":value"', + 'search_modifier_not_journal_id' => 'ID журнала не является ":value"', + 'search_modifier_recurrence_id' => 'ID повторяющейся транзакции является ":value"', + 'search_modifier_not_recurrence_id' => 'ID повторяющейся транзакции не является ":value"', 'search_modifier_foreign_amount_is' => 'Сумма иностранного платежа: ":value"', - 'search_modifier_not_foreign_amount_is' => 'The foreign amount is not ":value"', + 'search_modifier_not_foreign_amount_is' => 'Сумма в иностранной валюте не ":value"', 'search_modifier_foreign_amount_less' => 'Сумма в иностранной валюте меньше ":value"', - 'search_modifier_not_foreign_amount_more' => 'The foreign amount is less than ":value"', - 'search_modifier_not_foreign_amount_less' => 'The foreign amount is more than ":value"', + 'search_modifier_not_foreign_amount_more' => 'Сумма в иностранной валюте меньше ":value"', + 'search_modifier_not_foreign_amount_less' => 'Сумма в иностранной валюте больше ":value"', 'search_modifier_foreign_amount_more' => 'Иначе сумма больше чем ":value"', - 'search_modifier_exists' => 'Transaction exists (any transaction)', - 'search_modifier_not_exists' => 'Transaction does not exist (no transaction)', + 'search_modifier_exists' => 'Транзакция существует (любая транзакция)', + 'search_modifier_not_exists' => 'Транзакция не существует (нет транзакции)', // date fields - 'search_modifier_interest_date_on' => 'Transaction interest date is ":value"', - 'search_modifier_not_interest_date_on' => 'Transaction interest date is not ":value"', - 'search_modifier_interest_date_on_year' => 'Transaction interest date is in year ":value"', - 'search_modifier_not_interest_date_on_year' => 'Transaction interest date is not in year ":value"', - 'search_modifier_interest_date_on_month' => 'Transaction interest date is in month ":value"', - 'search_modifier_not_interest_date_on_month' => 'Transaction interest date is not in month ":value"', - 'search_modifier_interest_date_on_day' => 'Transaction interest date is on day of month ":value"', - 'search_modifier_not_interest_date_on_day' => 'Transaction interest date is not on day of month ":value"', - 'search_modifier_interest_date_before_year' => 'Transaction interest date is before or in year ":value"', - 'search_modifier_interest_date_before_month' => 'Transaction interest date is before or in month ":value"', - 'search_modifier_interest_date_before_day' => 'Transaction interest date is before or on day of month ":value"', + 'search_modifier_interest_date_on' => 'Дата начисления процентов по транзакции ":value"', + 'search_modifier_not_interest_date_on' => 'Дата начисления процентов по транзакции не ":value"', + 'search_modifier_interest_date_on_year' => 'Дата интересующей транзакции указана в году ":value"', + 'search_modifier_not_interest_date_on_year' => 'Дата интересующей сделке указана вне года ":value"', + 'search_modifier_interest_date_on_month' => 'Дата начисления процентов по сделке указана в месяце ":value"', + 'search_modifier_not_interest_date_on_month' => 'Дата интересующей сделке указана вне месяца ":value"', + 'search_modifier_interest_date_on_day' => 'Дата начисления процентов по сделке приходится на день месяца ":value"', + 'search_modifier_not_interest_date_on_day' => 'Дата выплаты процентов по транзакции не совпадает с днем месяца «:value»', + 'search_modifier_interest_date_before_year' => 'Дата выплаты процентов по сделке наступает в ":value" году или предшествует этому году', + 'search_modifier_interest_date_before_month' => 'Дата выплаты процентов по сделке наступает в ":value" месяце или до этого месяца', + 'search_modifier_interest_date_before_day' => 'Дата начисления процентов по сделке в день месяца ":value" или до него', 'search_modifier_interest_date_after_year' => 'Дата транзакции через или в год ":value"', 'search_modifier_interest_date_after_month' => 'Дата транзакции после или в ":value" месяце', 'search_modifier_interest_date_after_day' => 'Дата транзакции после или в день месяца ":value"', @@ -705,12 +709,12 @@ return [ 'search_modifier_not_attachment_notes_contains' => 'Any attachment\'s notes do not contain ":value"', 'search_modifier_not_attachment_notes_starts' => 'Any attachment\'s notes start with ":value"', 'search_modifier_not_attachment_notes_ends' => 'Any attachment\'s notes do not end with ":value"', - 'search_modifier_sepa_ct_is' => 'SEPA CT is ":value"', + 'search_modifier_sepa_ct_is' => 'SEPA CT ":value"', 'update_rule_from_query' => 'Обновить правило ":rule" из поискового запроса', 'create_rule_from_query' => 'Создать новое правило из поискового запроса', 'rule_from_search_words' => 'Механизм правил не справился с обработкой ":string". Предлагаемое правило, удовлетворяющее вашему поисковому запросу, может дать различные результаты. Пожалуйста, тщательно проверьте условия правила.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'В поиске применяются следующие атрибуты:', 'general_search_error' => 'При поиске произошла ошибка. Пожалуйста, проверьте log-файлы для получения дополнительной информации.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'НЕ', 'cannot_fire_inactive_rules' => 'Вы не можете выполнять неактивные правила.', + 'show_triggers' => 'Показать триггеры', + 'show_actions' => 'Показать действия', 'rules' => 'Правила', 'rule_name' => 'Название правила', 'rule_triggers' => 'Правило срабатывает, когда', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Когда транзакция обновляется', 'rule_trigger_user_action' => 'Действие пользователя = ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Название счёта-источника начинается с..', 'rule_trigger_source_account_starts' => 'Название счёта-источника начинается с ":trigger_value"', @@ -824,8 +828,8 @@ return [ 'rule_trigger_source_account_is' => 'Название счёта-источника ":trigger_value"', 'rule_trigger_source_account_contains_choice' => 'Название счёта-источника содержит..', 'rule_trigger_source_account_contains' => 'Название счёта-источника содержит ":trigger_value"', - 'rule_trigger_account_id_choice' => 'Either account ID is exactly..', - 'rule_trigger_account_id' => 'Either account ID is exactly :trigger_value', + 'rule_trigger_account_id_choice' => 'Идентификатор счёта совпадает с..', + 'rule_trigger_account_id' => 'Идентификатор счёта совпадает с :trigger_value', 'rule_trigger_source_account_id_choice' => 'ID счёта-источника совпадает с..', 'rule_trigger_source_account_id' => 'ID счёта-источника совпадает с :trigger_value', 'rule_trigger_destination_account_id_choice' => 'ID счёта назначения совпадает с..', @@ -864,12 +868,12 @@ return [ 'rule_trigger_transaction_type' => 'Тип транзакции = ":trigger_value"', 'rule_trigger_category_is_choice' => 'Категория =', 'rule_trigger_category_is' => 'Категория = ":trigger_value"', - 'rule_trigger_amount_less_choice' => 'Amount is less than or equal to ..', - 'rule_trigger_amount_less' => 'Amount is less than or equal to :trigger_value', + 'rule_trigger_amount_less_choice' => 'Сумма меньше или равна ..', + 'rule_trigger_amount_less' => 'Сумма меньше или равна :trigger_value', 'rule_trigger_amount_is_choice' => 'Сумма..', 'rule_trigger_amount_is' => 'Сумма :trigger_value', - 'rule_trigger_amount_more_choice' => 'Amount is more than or equal to..', - 'rule_trigger_amount_more' => 'Amount is more than or equal to :trigger_value', + 'rule_trigger_amount_more_choice' => 'Сумма больше или равна..', + 'rule_trigger_amount_more' => 'Сумма больше или равна :trigger_value', 'rule_trigger_description_starts_choice' => 'Описание начинается с...', 'rule_trigger_description_starts' => 'Описание начинается с ":trigger_value"', 'rule_trigger_description_ends_choice' => 'Описание заканчивается на...', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Бюджет = ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Любой тег..', 'rule_trigger_tag_is' => 'Любой тег ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Валюта операции - ', 'rule_trigger_currency_is' => 'Валюта транзакции = ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Валюта операции - ', @@ -909,7 +919,7 @@ return [ 'rule_trigger_has_no_bill_choice' => 'Не содержит счетов', 'rule_trigger_has_no_bill' => 'Транзакция не содержит счетов', 'rule_trigger_has_any_bill_choice' => 'Содержит (любой) счёт', - 'rule_trigger_has_any_bill' => 'Transaction has a (any) bill', + 'rule_trigger_has_any_bill' => 'У транзакции есть (любой) счет на оплату', 'rule_trigger_has_no_tag_choice' => 'Нет меток', 'rule_trigger_has_no_tag' => 'У транзакции ни одной метки', 'rule_trigger_has_any_tag_choice' => 'Есть одна или несколько (любых) меток', @@ -934,39 +944,39 @@ return [ 'rule_trigger_internal_reference_is' => 'Внутренняя ссылка - ":trigger_value"', 'rule_trigger_journal_id_choice' => 'ID журнала транзакций..', 'rule_trigger_journal_id' => 'ID журнала транзакций ":trigger_value"', - 'rule_trigger_any_external_url' => 'Transaction has an (any) external URL', - 'rule_trigger_any_external_url_choice' => 'Transaction has an (any) external URL', - 'rule_trigger_any_external_id' => 'Transaction has an (any) external ID', - 'rule_trigger_any_external_id_choice' => 'Transaction has an (any) external ID', + 'rule_trigger_any_external_url' => 'У транзакции есть (любой) внешний URL', + 'rule_trigger_any_external_url_choice' => 'У транзакции есть (любой) внешний URL', + 'rule_trigger_any_external_id' => 'У транзакции есть (любой) внешний идентификатор', + 'rule_trigger_any_external_id_choice' => 'У транзакции есть (любой) внешний идентификатор', 'rule_trigger_no_external_url_choice' => 'У транзакции нет внешнего URL', 'rule_trigger_no_external_url' => 'У транзакции нет внешнего URL', - 'rule_trigger_no_external_id_choice' => 'Transaction has no external ID', - 'rule_trigger_no_external_id' => 'Transaction has no external ID', + 'rule_trigger_no_external_id_choice' => 'У транзакции нет внешнего идентификатора', + 'rule_trigger_no_external_id' => 'У транзакции нет внешнего идентификатора', 'rule_trigger_id_choice' => 'ID транзакции..', 'rule_trigger_id' => 'ID транзакции ":trigger_value"', - 'rule_trigger_sepa_ct_is_choice' => 'SEPA CT is..', - 'rule_trigger_sepa_ct_is' => 'SEPA CT is ":trigger_value"', + 'rule_trigger_sepa_ct_is_choice' => 'SEPA CT..', + 'rule_trigger_sepa_ct_is' => 'SEPA CT ":trigger_value"', // new values: 'rule_trigger_user_action_choice' => 'Действие пользователя = ":trigger_value"', - 'rule_trigger_tag_is_not_choice' => 'No tag is..', - 'rule_trigger_tag_is_not' => 'No tag is ":trigger_value"', - 'rule_trigger_account_is_choice' => 'Either account is exactly..', - 'rule_trigger_account_is' => 'Either account is exactly ":trigger_value"', + 'rule_trigger_tag_is_not_choice' => 'Нет тэга..', + 'rule_trigger_tag_is_not' => 'Нет тега ":trigger_value"', + 'rule_trigger_account_is_choice' => 'Счет совпадает с..', + 'rule_trigger_account_is' => 'Счет совпадает с ":trigger_value"', 'rule_trigger_account_contains_choice' => 'Любая учетная запись заканчивается содержит..', 'rule_trigger_account_contains' => 'Любая учетная запись содержит ":trigger_value"', 'rule_trigger_account_ends_choice' => 'Любая учетная запись заканчивается..', 'rule_trigger_account_ends' => 'Любая учетная запись заканчивается на ":trigger_value"', 'rule_trigger_account_starts_choice' => 'Любая учетная запись начинается с..', 'rule_trigger_account_starts' => 'Любая учетная запись начинается с ":trigger_value"', - 'rule_trigger_account_nr_is_choice' => 'Either account number / IBAN is..', - 'rule_trigger_account_nr_is' => 'Either account number / IBAN is ":trigger_value"', - 'rule_trigger_account_nr_contains_choice' => 'Either account number / IBAN contains..', - 'rule_trigger_account_nr_contains' => 'Either account number / IBAN contains ":trigger_value"', - 'rule_trigger_account_nr_ends_choice' => 'Either account number / IBAN ends with..', - 'rule_trigger_account_nr_ends' => 'Either account number / IBAN ends with ":trigger_value"', - 'rule_trigger_account_nr_starts_choice' => 'Either account number / IBAN starts with..', - 'rule_trigger_account_nr_starts' => 'Either account number / IBAN starts with ":trigger_value"', + 'rule_trigger_account_nr_is_choice' => 'Номер счета / IBAN..', + 'rule_trigger_account_nr_is' => 'Номер счета / IBAN ":trigger_value"', + 'rule_trigger_account_nr_contains_choice' => 'Номер счета / IBAN содержит..', + 'rule_trigger_account_nr_contains' => 'Номер счета / IBAN содержит ":trigger_value"', + 'rule_trigger_account_nr_ends_choice' => 'Номер счета / IBAN заканчивается на..', + 'rule_trigger_account_nr_ends' => 'Номер счета / IBAN заканчивается на ":trigger_value"', + 'rule_trigger_account_nr_starts_choice' => 'Номер счета / IBAN начинается с..', + 'rule_trigger_account_nr_starts' => 'Номер счета / IBAN начинается с ":trigger_value"', 'rule_trigger_category_contains_choice' => 'Категория содержит..', 'rule_trigger_category_contains' => 'Категория содержит ":trigger_value"', 'rule_trigger_category_ends_choice' => 'Категория заканчивается на..', @@ -1007,26 +1017,26 @@ return [ 'rule_trigger_external_url_starts' => 'Внешний URL начинается с ":trigger_value"', 'rule_trigger_has_no_attachments_choice' => 'Вложений нет', 'rule_trigger_has_no_attachments' => 'У транзакции нет вложений', - 'rule_trigger_recurrence_id_choice' => 'Recurring transaction ID is..', - 'rule_trigger_recurrence_id' => 'Recurring transaction ID is ":trigger_value"', - 'rule_trigger_interest_date_on_choice' => 'Interest date is on..', - 'rule_trigger_interest_date_on' => 'Interest date is on ":trigger_value"', - 'rule_trigger_interest_date_before_choice' => 'Interest date is before..', - 'rule_trigger_interest_date_before' => 'Interest date is before ":trigger_value"', - 'rule_trigger_interest_date_after_choice' => 'Interest date is after..', - 'rule_trigger_interest_date_after' => 'Interest date is after ":trigger_value"', + 'rule_trigger_recurrence_id_choice' => 'Идентификатор повторяющейся транзакции..', + 'rule_trigger_recurrence_id' => 'Идентификатор повторяющейся транзакции ":trigger_value"', + 'rule_trigger_interest_date_on_choice' => 'Дата начисления процентов..', + 'rule_trigger_interest_date_on' => 'Дата начисления процентов ":trigger_value"', + 'rule_trigger_interest_date_before_choice' => 'Дата начисления процентов после..', + 'rule_trigger_interest_date_before' => 'Дата начисления процентов до ":trigger_value"', + 'rule_trigger_interest_date_after_choice' => 'Дата начисления процентов после..', + 'rule_trigger_interest_date_after' => 'Дата начисления процентов после ":trigger_value"', 'rule_trigger_book_date_on_choice' => 'Book date is on..', 'rule_trigger_book_date_on' => 'Book date is on ":trigger_value"', 'rule_trigger_book_date_before_choice' => 'Book date is before..', 'rule_trigger_book_date_before' => 'Book date is before ":trigger_value"', 'rule_trigger_book_date_after_choice' => 'Book date is after..', 'rule_trigger_book_date_after' => 'Book date is after ":trigger_value"', - 'rule_trigger_process_date_on_choice' => 'Process date is on..', - 'rule_trigger_process_date_on' => 'Process date is ":trigger_value"', - 'rule_trigger_process_date_before_choice' => 'Process date is before..', - 'rule_trigger_process_date_before' => 'Process date is before ":trigger_value"', - 'rule_trigger_process_date_after_choice' => 'Process date is after..', - 'rule_trigger_process_date_after' => 'Process date is after ":trigger_value"', + 'rule_trigger_process_date_on_choice' => 'Дата оплаты..', + 'rule_trigger_process_date_on' => 'Дата оплаты ":trigger_value"', + 'rule_trigger_process_date_before_choice' => 'Дата оплаты до..', + 'rule_trigger_process_date_before' => 'Дата оплаты до ":trigger_value"', + 'rule_trigger_process_date_after_choice' => 'Дата оплаты после..', + 'rule_trigger_process_date_after' => 'Дата счета после ":trigger_value"', 'rule_trigger_due_date_on_choice' => 'Дата выполнения..', 'rule_trigger_due_date_on' => 'Дата выполнения ":trigger_value"', 'rule_trigger_due_date_before_choice' => 'Дата выполнения до..', @@ -1067,39 +1077,39 @@ return [ 'rule_trigger_attachment_name_starts' => 'Имя любого вложения начинается с ":trigger_value"', 'rule_trigger_attachment_name_ends_choice' => 'Имя любого вложений заканчивается на..', 'rule_trigger_attachment_name_ends' => 'Имя любого вложений заканчивается на ":trigger_value"', - 'rule_trigger_attachment_notes_are_choice' => 'Any attachment\'s notes are..', - 'rule_trigger_attachment_notes_are' => 'Any attachment\'s notes are ":trigger_value"', - 'rule_trigger_attachment_notes_contains_choice' => 'Any attachment\'s notes contain..', - 'rule_trigger_attachment_notes_contains' => 'Any attachment\'s notes contain ":trigger_value"', - 'rule_trigger_attachment_notes_starts_choice' => 'Any attachment\'s notes start with..', - 'rule_trigger_attachment_notes_starts' => 'Any attachment\'s notes start with ":trigger_value"', - 'rule_trigger_attachment_notes_ends_choice' => 'Any attachment\'s notes end with..', - 'rule_trigger_attachment_notes_ends' => 'Any attachment\'s notes end with ":trigger_value"', + 'rule_trigger_attachment_notes_are_choice' => 'Имя любого вложения..', + 'rule_trigger_attachment_notes_are' => 'Любое имя вложения: ":trigger_value"', + 'rule_trigger_attachment_notes_contains_choice' => 'Имя любых вложений содержит..', + 'rule_trigger_attachment_notes_contains' => 'Имя любых вложений содержит ":trigger_value"', + 'rule_trigger_attachment_notes_starts_choice' => 'Имя любого вложения начинается с..', + 'rule_trigger_attachment_notes_starts' => 'Имя любого вложения начинается с ":trigger_value"', + 'rule_trigger_attachment_notes_ends_choice' => 'Имя любого вложений заканчивается на..', + 'rule_trigger_attachment_notes_ends' => 'Имя любого вложений заканчивается на ":trigger_value"', 'rule_trigger_reconciled_choice' => 'Транзакция сверена', 'rule_trigger_reconciled' => 'Транзакция сверена', - 'rule_trigger_exists_choice' => 'Any transaction matches(!)', - 'rule_trigger_exists' => 'Any transaction matches', + 'rule_trigger_exists_choice' => 'Любые транзакции совпадают(!)', + 'rule_trigger_exists' => 'Любые транзакции совпадают', // more values for new types: - 'rule_trigger_not_account_id' => 'Account ID is not ":trigger_value"', - 'rule_trigger_not_source_account_id' => 'Source account ID is not ":trigger_value"', - 'rule_trigger_not_destination_account_id' => 'Destination account ID is not ":trigger_value"', - 'rule_trigger_not_transaction_type' => 'Transaction type is not ":trigger_value"', - 'rule_trigger_not_tag_is' => 'Tag is not ":trigger_value"', - 'rule_trigger_not_tag_is_not' => 'Tag is ":trigger_value"', - 'rule_trigger_not_description_is' => 'Description is not ":trigger_value"', - 'rule_trigger_not_description_contains' => 'Description does not contain', - 'rule_trigger_not_description_ends' => 'Description does not end with ":trigger_value"', - 'rule_trigger_not_description_starts' => 'Description does not start with ":trigger_value"', - 'rule_trigger_not_notes_is' => 'Notes are not ":trigger_value"', - 'rule_trigger_not_notes_contains' => 'Notes do not contain ":trigger_value"', - 'rule_trigger_not_notes_ends' => 'Notes do not end on ":trigger_value"', - 'rule_trigger_not_notes_starts' => 'Notes do not start with ":trigger_value"', - 'rule_trigger_not_source_account_is' => 'Source account is not ":trigger_value"', - 'rule_trigger_not_source_account_contains' => 'Source account does not contain ":trigger_value"', - 'rule_trigger_not_source_account_ends' => 'Source account does not end on ":trigger_value"', - 'rule_trigger_not_source_account_starts' => 'Source account does not start with ":trigger_value"', - 'rule_trigger_not_source_account_nr_is' => 'Source account number / IBAN is not ":trigger_value"', + 'rule_trigger_not_account_id' => 'ID аккаунта не ":trigger_value"', + 'rule_trigger_not_source_account_id' => 'ID счёта-источника не ":trigger_value"', + 'rule_trigger_not_destination_account_id' => 'ID счёта-назначения не ":trigger_value"', + 'rule_trigger_not_transaction_type' => 'Тип транзакции не ":trigger_value"', + 'rule_trigger_not_tag_is' => 'Метка не ":trigger_value"', + 'rule_trigger_not_tag_is_not' => 'Метка = ":trigger_value"', + 'rule_trigger_not_description_is' => 'Описание не ":trigger_value"', + 'rule_trigger_not_description_contains' => 'Описание не содержит', + 'rule_trigger_not_description_ends' => 'Описание не заканчивается на ":trigger_value"', + 'rule_trigger_not_description_starts' => 'Описание не начинается с ":trigger_value"', + 'rule_trigger_not_notes_is' => 'Заметки не ":trigger_value"', + 'rule_trigger_not_notes_contains' => 'Заметки не содержат ":trigger_value"', + 'rule_trigger_not_notes_ends' => 'Заметки не заканчиваются на ":trigger_value"', + 'rule_trigger_not_notes_starts' => 'Заметки не начинаются с ":trigger_value"', + 'rule_trigger_not_source_account_is' => 'Счёт-источник не ":trigger_value"', + 'rule_trigger_not_source_account_contains' => 'Счёт-источник не содержит ":trigger_value"', + 'rule_trigger_not_source_account_ends' => 'Счёт-источник не заканчивается на ":trigger_value"', + 'rule_trigger_not_source_account_starts' => 'Счёт-источник не начинается с ":trigger_value"', + 'rule_trigger_not_source_account_nr_is' => 'Номер счёта-источника / IBAN не ":trigger_value"', 'rule_trigger_not_source_account_nr_contains' => 'Source account number / IBAN does not contain ":trigger_value"', 'rule_trigger_not_source_account_nr_ends' => 'Source account number / IBAN does not end on ":trigger_value"', 'rule_trigger_not_source_account_nr_starts' => 'Source account number / IBAN does not start with ":trigger_value"', @@ -1143,14 +1153,14 @@ return [ 'rule_trigger_not_external_url_contains' => 'External URL does not contain ":trigger_value"', 'rule_trigger_not_external_url_ends' => 'External URL does not end on ":trigger_value"', 'rule_trigger_not_external_url_starts' => 'External URL does not start with ":trigger_value"', - 'rule_trigger_not_currency_is' => 'Currency is not ":trigger_value"', + 'rule_trigger_not_currency_is' => 'Валюта не ":trigger_value"', 'rule_trigger_not_foreign_currency_is' => 'Foreign currency is not ":trigger_value"', - 'rule_trigger_not_id' => 'Transaction ID is not ":trigger_value"', - 'rule_trigger_not_journal_id' => 'Transaction journal ID is not ":trigger_value"', + 'rule_trigger_not_id' => 'ID транзакции не является ":trigger_value"', + 'rule_trigger_not_journal_id' => 'ID журнала транзакций не является ":trigger_value"', 'rule_trigger_not_recurrence_id' => 'Recurrence ID is not ":trigger_value"', - 'rule_trigger_not_date_on' => 'Date is not on ":trigger_value"', - 'rule_trigger_not_date_before' => 'Date is not before ":trigger_value"', - 'rule_trigger_not_date_after' => 'Date is not after ":trigger_value"', + 'rule_trigger_not_date_on' => 'Дата не ":trigger_value"', + 'rule_trigger_not_date_before' => 'Дата не до ":trigger_value"', + 'rule_trigger_not_date_after' => 'Дата не после ":trigger_value"', 'rule_trigger_not_interest_date_on' => 'Interest date is not on ":trigger_value"', 'rule_trigger_not_interest_date_before' => 'Interest date is not before ":trigger_value"', 'rule_trigger_not_interest_date_after' => 'Interest date is not after ":trigger_value"', @@ -1166,10 +1176,10 @@ return [ 'rule_trigger_not_payment_date_on' => 'Payment date is not on ":trigger_value"', 'rule_trigger_not_payment_date_before' => 'Payment date is not before ":trigger_value"', 'rule_trigger_not_payment_date_after' => 'Payment date is not after ":trigger_value"', - 'rule_trigger_not_invoice_date_on' => 'Invoice date is not on ":trigger_value"', - 'rule_trigger_not_invoice_date_before' => 'Invoice date is not before ":trigger_value"', - 'rule_trigger_not_invoice_date_after' => 'Invoice date is not after ":trigger_value"', - 'rule_trigger_not_created_at_on' => 'Transaction is not created on ":trigger_value"', + 'rule_trigger_not_invoice_date_on' => 'Дата выставления счета не ":trigger_value"', + 'rule_trigger_not_invoice_date_before' => 'Дата счета не до ":trigger_value"', + 'rule_trigger_not_invoice_date_after' => 'Дата счета не после ":trigger_value"', + 'rule_trigger_not_created_at_on' => 'Транзакция не создана в ":trigger_value"', 'rule_trigger_not_created_at_before' => 'Transaction is not created before ":trigger_value"', 'rule_trigger_not_created_at_after' => 'Transaction is not created after ":trigger_value"', 'rule_trigger_not_updated_at_on' => 'Transaction is not updated on ":trigger_value"', @@ -1189,27 +1199,27 @@ return [ 'rule_trigger_not_attachment_notes_contains' => 'No attachment notes contain ":trigger_value"', 'rule_trigger_not_attachment_notes_starts' => 'No attachment notes start with ":trigger_value"', 'rule_trigger_not_attachment_notes_ends' => 'No attachment notes end on ":trigger_value"', - 'rule_trigger_not_reconciled' => 'Transaction is not reconciled', - 'rule_trigger_not_exists' => 'Transaction does not exist', - 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', - 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', - 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', - 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', - 'rule_trigger_not_any_notes' => 'Transaction has no notes', - 'rule_trigger_not_any_external_url' => 'Transaction has no external URL', - 'rule_trigger_not_has_no_attachments' => 'Transaction has a (any) attachment(s)', - 'rule_trigger_not_has_no_category' => 'Transaction has a (any) category', - 'rule_trigger_not_has_no_budget' => 'Transaction has a (any) budget', - 'rule_trigger_not_has_no_bill' => 'Transaction has a (any) bill', - 'rule_trigger_not_has_no_tag' => 'Transaction has a (any) tag', - 'rule_trigger_not_no_notes' => 'Transaction has any notes', - 'rule_trigger_not_no_external_url' => 'Transaction has an external URL', - 'rule_trigger_not_source_is_cash' => 'Source account is not a cash account', - 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', - 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', + 'rule_trigger_not_reconciled' => 'Транзакция не сверена', + 'rule_trigger_not_exists' => 'Транзакция не существует', + 'rule_trigger_not_has_attachments' => 'У транзакции нет вложений', + 'rule_trigger_not_has_any_category' => 'У транзакции нет категории', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', + 'rule_trigger_not_has_any_bill' => 'У транзакции нет счета на оплату', + 'rule_trigger_not_has_any_tag' => 'У транзакции нет тегов', + 'rule_trigger_not_any_notes' => 'У транзакции нет заметок', + 'rule_trigger_not_any_external_url' => 'У транзакции нет внешнего URL', + 'rule_trigger_not_has_no_attachments' => 'У транзакции есть (любое) вложение(я)', + 'rule_trigger_not_has_no_category' => 'У транзакции есть (любая) категория', + 'rule_trigger_not_has_no_budget' => 'У транзакции есть (любой) бюджет', + 'rule_trigger_not_has_no_bill' => 'У транзакции есть (любой) счет на оплату', + 'rule_trigger_not_has_no_tag' => 'У транзакции есть (любой) тег', + 'rule_trigger_not_no_notes' => 'У транзакции есть заметки', + 'rule_trigger_not_no_external_url' => 'У транзакции есть внешний URL', + 'rule_trigger_not_source_is_cash' => 'Счёт-источник не наличный счёт', + 'rule_trigger_not_destination_is_cash' => 'Счет назначения не наличный счёт', + 'rule_trigger_not_account_is_cash' => 'Ни один счет не является наличным', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,11 +1230,10 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend - 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', - 'rule_action_delete_transaction' => 'DELETE transaction(!)', + 'rule_action_delete_transaction_choice' => 'УДАЛИТЬ транзакцию(!)', + 'rule_action_delete_transaction' => 'УДАЛИТЬ транзакцию(!)', 'rule_action_set_category' => 'Назначить категорию ":action_value"', 'rule_action_clear_category' => 'Очистить поле "Категория"', 'rule_action_set_budget' => 'Назначить бюджет ":action_value"', @@ -1235,33 +1244,33 @@ return [ 'rule_action_set_description' => 'Назначить описание ":action_value"', 'rule_action_append_description' => 'Добавить в конце описание с ":action_value"', 'rule_action_prepend_description' => 'Добавить в начале описание с ":action_value"', - 'rule_action_set_category_choice' => 'Set category to ..', + 'rule_action_set_category_choice' => 'Установить категорию в ..', 'rule_action_clear_category_choice' => 'Удалить любую категорию', - 'rule_action_set_budget_choice' => 'Set budget to ..', + 'rule_action_set_budget_choice' => 'Установить бюджет в ..', 'rule_action_clear_budget_choice' => 'Удалить любой бюджет', - 'rule_action_add_tag_choice' => 'Add tag ..', - 'rule_action_remove_tag_choice' => 'Remove tag ..', + 'rule_action_add_tag_choice' => 'Добавить метку ..', + 'rule_action_remove_tag_choice' => 'Удалить метку ..', 'rule_action_remove_all_tags_choice' => 'Удалить все метки...', - 'rule_action_set_description_choice' => 'Set description to ..', + 'rule_action_set_description_choice' => 'Задать описание ..', 'rule_action_update_piggy_choice' => 'Add / remove transaction amount in piggy bank ..', 'rule_action_update_piggy' => 'Add / remove transaction amount in piggy bank ":action_value"', - 'rule_action_append_description_choice' => 'Append description with ..', - 'rule_action_prepend_description_choice' => 'Prepend description with ..', - 'rule_action_set_source_account_choice' => 'Set source account to ..', + 'rule_action_append_description_choice' => 'Добавить описание с ..', + 'rule_action_prepend_description_choice' => 'Добавить в начале описания ..', + 'rule_action_set_source_account_choice' => 'Назначить счёт-источник ..', 'rule_action_set_source_account' => 'Назначить счёт-источник :action_value', - 'rule_action_set_destination_account_choice' => 'Set destination account to ..', + 'rule_action_set_destination_account_choice' => 'Установить счет назначения на ..', 'rule_action_set_destination_account' => 'Назначить целевой счёт :action_value', - 'rule_action_append_notes_choice' => 'Append notes with ..', + 'rule_action_append_notes_choice' => 'Добавить в конце заметки ..', 'rule_action_append_notes' => 'Добавить в конце заметки с ":action_value"', - 'rule_action_prepend_notes_choice' => 'Prepend notes with ..', + 'rule_action_prepend_notes_choice' => 'Добавить в начале заметки ..', 'rule_action_prepend_notes' => 'Добавить в начале заметки с ":action_value"', 'rule_action_clear_notes_choice' => 'Удалить любые заметки', 'rule_action_clear_notes' => 'Удалить любые заметки', - 'rule_action_set_notes_choice' => 'Set notes to ..', - 'rule_action_link_to_bill_choice' => 'Link to a bill ..', + 'rule_action_set_notes_choice' => 'Добавить заметку ..', + 'rule_action_link_to_bill_choice' => 'Ссылка на счет ..', 'rule_action_link_to_bill' => 'Ссылка на счёт к оплате ":action_value"', - 'rule_action_switch_accounts_choice' => 'Switch source and destination accounts (transfers only!)', - 'rule_action_switch_accounts' => 'Switch source and destination', + 'rule_action_switch_accounts_choice' => 'Поменять счета источника и назначения (только для переводов!)', + 'rule_action_switch_accounts' => 'Поменять источник и назначение', 'rule_action_set_notes' => 'Назначить примечания ":action_value"', 'rule_action_convert_deposit_choice' => 'Преобразовать транзакцию в доход', 'rule_action_convert_deposit' => 'Преобразовать транзакцию в доход с помощью ":action_value"', @@ -1273,10 +1282,12 @@ return [ 'rule_action_append_notes_to_descr_choice' => 'Append the transaction notes to the description', 'rule_action_move_descr_to_notes_choice' => 'Replace the current transaction notes with the description', 'rule_action_move_notes_to_descr_choice' => 'Replace the current description with the transaction notes', - 'rule_action_append_descr_to_notes' => 'Append description to notes', - 'rule_action_append_notes_to_descr' => 'Append notes to description', - 'rule_action_move_descr_to_notes' => 'Replace notes with description', - 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_append_descr_to_notes' => 'Добавить описание к заметкам', + 'rule_action_append_notes_to_descr' => 'Добавить заметки к описанию', + 'rule_action_move_descr_to_notes' => 'Заменить заметки описанием', + 'rule_action_move_notes_to_descr' => 'Заменить описание заметками', + 'rule_action_set_destination_to_cash_choice' => 'Установить счет назначения (кэш)', + 'rule_action_set_source_to_cash_choice' => 'Установить исходный счёт (кэш)', 'rulegroup_for_bills_title' => 'Группа правил для счетов к оплате', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Правило для счёта на оплату ":name"', 'new_rule_for_bill_description' => 'Это правило помечает транзакции для счёта на оплату ":name".', - 'new_rule_for_journal_title' => 'Правило основано на транзакции ":description"', - 'new_rule_for_journal_description' => 'Это правило основано на транзакции ":description". Под него будут подпадать транзакции, которые точно совпадают.', + 'new_rule_for_journal_title' => 'Правило основано на транзакции ":description"', + 'new_rule_for_journal_description' => 'Это правило основано на транзакции ":description". Под него будут подпадать транзакции, которые точно совпадают.', // tags - 'store_new_tag' => 'Сохранить новую метку', - 'update_tag' => 'Обновить метку', - 'no_location_set' => 'Местоположение не указано.', - 'meta_data' => 'Расширенные данные', - 'location' => 'Размещение', - 'without_date' => 'Без даты', - 'result' => 'Результат', - 'sums_apply_to_range' => 'Все суммы относятся к выбранному диапазону', - 'mapbox_api_key' => 'Чтобы использовать карту, получите ключ API от сервиса Mapbox. Откройте файл .env и введите этот код в строке MAPBOX_API_KEY = .', - 'press_object_location' => 'Щёлкните правой кнопкой мыши или надолго нажмите на сенсорный экран, чтобы установить местоположение объекта.', - 'clear_location' => 'Очистить местоположение', - 'delete_all_selected_tags' => 'Удалить все выбранные метки', - 'select_tags_to_delete' => 'Не забудьте выбрать несколько меток.', - 'deleted_x_tags' => 'Удалена :count метка.|Удалено :count меток.', - 'create_rule_from_transaction' => 'Создать правило на основе транзакции', - 'create_recurring_from_transaction' => 'Создать повторяющуюся транзакцию, основанную на транзакции', - + 'store_new_tag' => 'Сохранить новую метку', + 'update_tag' => 'Обновить метку', + 'no_location_set' => 'Местоположение не указано.', + 'meta_data' => 'Расширенные данные', + 'location' => 'Размещение', + 'location_first_split' => 'Расположение для этой транзакции может быть установлено на первой части этой транзакции.', + 'without_date' => 'Без даты', + 'result' => 'Результат', + 'sums_apply_to_range' => 'Все суммы относятся к выбранному диапазону', + 'mapbox_api_key' => 'Чтобы использовать карту, получите ключ API от сервиса Mapbox. Откройте файл .env и введите этот код в строке MAPBOX_API_KEY = .', + 'press_object_location' => 'Щёлкните правой кнопкой мыши или надолго нажмите на сенсорный экран, чтобы установить местоположение объекта.', + 'click_tap_location' => 'Нажмите на карту, чтобы добавить местоположение', + 'clear_location' => 'Очистить местоположение', + 'delete_all_selected_tags' => 'Удалить все выбранные метки', + 'select_tags_to_delete' => 'Не забудьте выбрать несколько меток.', + 'deleted_x_tags' => 'Удалена :count метка.|Удалено :count меток.', + 'create_rule_from_transaction' => 'Создать правило на основе транзакции', + 'create_recurring_from_transaction' => 'Создать повторяющуюся транзакцию, основанную на транзакции', // preferences - 'dark_mode_option_browser' => 'По усмотрению браузера', - 'dark_mode_option_light' => 'Всегда светлый', - 'dark_mode_option_dark' => 'Всегда тёмный', - 'equal_to_language' => '(в соответствии с языком)', - 'dark_mode_preference' => 'Тёмный режим', - 'dark_mode_preference_help' => 'Когда Firefly III должен использовать тёмный режим?', - 'pref_home_screen_accounts' => 'Счета, отображаемые в сводке', - 'pref_home_screen_accounts_help' => 'Какие счета нужно отображать в сводке на главной странице?', - 'pref_view_range' => 'Диапазон просмотра', - 'pref_view_range_help' => 'Некоторые графики автоматически сгруппированы по периодам. Ваш бюджет также будет сгруппирован по периодам. Какой период вы предпочитаете?', - 'pref_1D' => 'Один день', - 'pref_1W' => 'Одна неделя', - 'pref_1M' => 'Один месяц', - 'pref_3M' => 'Три месяца (квартал)', - 'pref_6M' => 'Шесть месяцев', - 'pref_1Y' => 'Один год', - 'pref_last365' => 'Последний год', - 'pref_last90' => 'Последние 90 дней', - 'pref_last30' => 'Последние 30 дней', - 'pref_last7' => 'Последние 7 дней', - 'pref_YTD' => 'За год до сегодня', - 'pref_QTD' => 'Квартал до сегодняшнего дня', - 'pref_MTD' => 'Месяц до сегодняшнего дня', - 'pref_languages' => 'Языки', - 'pref_locale' => 'Региональные настройки', - 'pref_languages_help' => 'Firefly III поддерживает несколько языков. Какой язык вы предпочитаете?', - 'pref_locale_help' => 'Firefly III позволяет устанавливать другие региональные настройки, например форматирование валют, чисел и дат. Записи в этом списке могут не поддерживаться вашей системой. Firefly III не имеет правильных настроек даты для каждой локали; свяжитесь со мной для улучшения.', - 'pref_locale_no_demo' => 'Эта функция не будет работать для демо-пользователя.', - 'pref_custom_fiscal_year' => 'Параметры финансового года', - 'pref_custom_fiscal_year_label' => 'Включить', - 'pref_custom_fiscal_year_help' => 'Для стран, в которых финансовый год начинается не 1 января, а заканчивается не 31 декабря, вы должны указать даты начала и окончания финансового года', - 'pref_fiscal_year_start_label' => 'Дата начала финансового года', - 'pref_two_factor_auth' => 'Двухэтапная аутентификация', - 'pref_two_factor_auth_help' => 'Когда вы включаете двухэтапную аутентификацию (также известную как двухфакторная аутентификация), вы добавляете дополнительный уровень безопасности в свою учётную запись. Вы входите в систему со своим паролем и ещё чем-то, что есть только у вас (код подтверждения). Коды подтверждения генерируются приложением на вашем телефоне, например, Authy или Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Включить двухэтапную аутентификацию', - 'pref_two_factor_auth_disabled' => 'Двухэтапную код подтверждения удалён и отключен', - 'pref_two_factor_auth_remove_it' => 'Не забудьте удалить учётную запись из своего приложения для аутентификации!', - 'pref_two_factor_auth_code' => 'Проверить код', - 'pref_two_factor_auth_code_help' => 'Отсканируйте QR-код с помощью приложения на телефоне, например Authy или Google Authenticator, и введите сгенерированный код.', - 'pref_two_factor_auth_reset_code' => 'Сбросить код верификации', - 'pref_two_factor_auth_disable_2fa' => 'Выключить 2FA', - '2fa_use_secret_instead' => 'Если вы не можете отсканировать QR-код, не стесняйтесь использовать вместо него секрет: :secret.', - '2fa_backup_codes' => 'Сохраните эти резервные коды для доступа в случае потери устройства.', - '2fa_already_enabled' => 'Двухфакторная верификация уже включена.', - 'wrong_mfa_code' => 'Этот код MFA недействителен.', - 'pref_save_settings' => 'Сохранить настройки', - 'saved_preferences' => 'Настройки сохранены!', - 'preferences_general' => 'Основные', - 'preferences_frontpage' => 'Сводка', - 'preferences_security' => 'Безопасность', - 'preferences_layout' => 'Отображение', - 'preferences_notifications' => 'Уведомления', - 'pref_home_show_deposits' => 'Показывать доходы на главной странице', - 'pref_home_show_deposits_info' => 'В сводке уже отображаются ваши счета расходов. Нужно ли показывать там также ваши счета доходов?', - 'pref_home_do_show_deposits' => 'Да, показать их', - 'successful_count' => 'из которых :count успешно', - 'list_page_size_title' => 'Размер страницы', - 'list_page_size_help' => 'Все списки в программе (счета, транзакции и т. п.) будут отображаться с указанным количеством на одну страницу.', - 'list_page_size_label' => 'Размер страницы', - 'between_dates' => '(:start и :end)', - 'pref_optional_fields_transaction' => 'Дополнительные поля для транзакций', - 'pref_optional_fields_transaction_help' => 'По умолчанию при создании новой транзакции включены не все поля (чтобы не создавать беспорядок). Но вы можете включить эти поля, если лично вам они могут быть полезны. Любое поле, которое в последствии будет отключено, будет по-прежнему отображаться, если оно уже заполнено (независимо от данный настроек).', - 'optional_tj_date_fields' => 'Поля с датами', - 'optional_tj_other_fields' => 'Прочие поля', - 'optional_tj_attachment_fields' => 'Поля вложений', - 'pref_optional_tj_interest_date' => 'Дата начисления процентов', - 'pref_optional_tj_book_date' => 'Дата внесения записи', - 'pref_optional_tj_process_date' => 'Дата обработки', - 'pref_optional_tj_due_date' => 'Срок оплаты', - 'pref_optional_tj_payment_date' => 'Дата платежа', - 'pref_optional_tj_invoice_date' => 'Дата выставления счёта', - 'pref_optional_tj_internal_reference' => 'Внутренняя ссылка', - 'pref_optional_tj_notes' => 'Заметки', - 'pref_optional_tj_attachments' => 'Вложения', - 'pref_optional_tj_external_url' => 'Внешний URL', - 'pref_optional_tj_location' => 'Расположение', - 'pref_optional_tj_links' => 'Связи транзакции', - 'optional_field_meta_dates' => 'Даты', - 'optional_field_meta_business' => 'Бизнес', - 'optional_field_attachments' => 'Вложения', - 'optional_field_meta_data' => 'Расширенные данные', - 'external_url' => 'Внешний URL-адрес', - 'pref_notification_bill_reminder' => 'Напоминания о неоплаченных счетах', - 'pref_notification_new_access_token' => 'Оповещения о создании нового токена для доступа к API', - 'pref_notification_transaction_creation' => 'Предупреждения об автоматически созданных транзакциях', - 'pref_notification_user_login' => 'Оповещение при входе в аккаунт из нового места', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Уведомления', - 'pref_notifications_help' => 'Укажите, какие из перечисленных уведомлений вы хотели бы получать. Некоторые уведомления могут содержать конфиденциальную финансовую информацию.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'Если вы хотите, чтобы Firefly III уведомил вас об использовании Slack, введите URL-адрес webhook здесь. В противном случае оставьте поле пустым. Если вы являетесь администратором, вы также должны задать этот URL-адрес в администрировании.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'По усмотрению браузера', + 'dark_mode_option_light' => 'Всегда светлый', + 'dark_mode_option_dark' => 'Всегда тёмный', + 'equal_to_language' => '(в соответствии с языком)', + 'dark_mode_preference' => 'Тёмный режим', + 'dark_mode_preference_help' => 'Когда Firefly III должен использовать тёмный режим?', + 'pref_home_screen_accounts' => 'Счета, отображаемые в сводке', + 'pref_home_screen_accounts_help' => 'Какие счета нужно отображать в сводке на главной странице?', + 'pref_view_range' => 'Диапазон просмотра', + 'pref_view_range_help' => 'Некоторые графики автоматически сгруппированы по периодам. Ваш бюджет также будет сгруппирован по периодам. Какой период вы предпочитаете?', + 'pref_1D' => 'Один день', + 'pref_1W' => 'Одна неделя', + 'pref_1M' => 'Один месяц', + 'pref_3M' => 'Три месяца (квартал)', + 'pref_6M' => 'Шесть месяцев', + 'pref_1Y' => 'Один год', + 'pref_last365' => 'Последний год', + 'pref_last90' => 'Последние 90 дней', + 'pref_last30' => 'Последние 30 дней', + 'pref_last7' => 'Последние 7 дней', + 'pref_YTD' => 'За год до сегодня', + 'pref_QTD' => 'Квартал до сегодняшнего дня', + 'pref_MTD' => 'Месяц до сегодняшнего дня', + 'pref_languages' => 'Языки', + 'pref_locale' => 'Региональные настройки', + 'pref_languages_help' => 'Firefly III поддерживает несколько языков. Какой язык вы предпочитаете?', + 'pref_locale_help' => 'Firefly III позволяет устанавливать другие региональные настройки, например форматирование валют, чисел и дат. Записи в этом списке могут не поддерживаться вашей системой. Firefly III не имеет правильных настроек даты для каждой локали; свяжитесь со мной для улучшения.', + 'pref_locale_no_demo' => 'Эта функция не будет работать для демо-пользователя.', + 'pref_custom_fiscal_year' => 'Параметры финансового года', + 'pref_custom_fiscal_year_label' => 'Включить', + 'pref_custom_fiscal_year_help' => 'Для стран, в которых финансовый год начинается не 1 января, а заканчивается не 31 декабря, вы должны указать даты начала и окончания финансового года', + 'pref_fiscal_year_start_label' => 'Дата начала финансового года', + 'pref_two_factor_auth' => 'Двухэтапная аутентификация', + 'pref_two_factor_auth_help' => 'Когда вы включаете двухэтапную аутентификацию (также известную как двухфакторная аутентификация), вы добавляете дополнительный уровень безопасности в свою учётную запись. Вы входите в систему со своим паролем и ещё чем-то, что есть только у вас (код подтверждения). Коды подтверждения генерируются приложением на вашем телефоне, например, Authy или Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Включить двухэтапную аутентификацию', + 'pref_two_factor_auth_disabled' => 'Двухэтапную код подтверждения удалён и отключен', + 'pref_two_factor_auth_remove_it' => 'Не забудьте удалить учётную запись из своего приложения для аутентификации!', + 'pref_two_factor_auth_code' => 'Проверить код', + 'pref_two_factor_auth_code_help' => 'Отсканируйте QR-код с помощью приложения на телефоне, например Authy или Google Authenticator, и введите сгенерированный код.', + 'pref_two_factor_auth_reset_code' => 'Сбросить код верификации', + 'pref_two_factor_auth_disable_2fa' => 'Выключить 2FA', + '2fa_use_secret_instead' => 'Если вы не можете отсканировать QR-код, не стесняйтесь использовать вместо него секрет: :secret.', + '2fa_backup_codes' => 'Сохраните эти резервные коды для доступа в случае потери устройства.', + '2fa_already_enabled' => 'Двухфакторная верификация уже включена.', + 'wrong_mfa_code' => 'Этот код MFA недействителен.', + 'pref_save_settings' => 'Сохранить настройки', + 'saved_preferences' => 'Настройки сохранены!', + 'preferences_general' => 'Основные', + 'preferences_frontpage' => 'Сводка', + 'preferences_security' => 'Безопасность', + 'preferences_layout' => 'Отображение', + 'preferences_notifications' => 'Уведомления', + 'pref_home_show_deposits' => 'Показывать доходы на главной странице', + 'pref_home_show_deposits_info' => 'В сводке уже отображаются ваши счета расходов. Нужно ли показывать там также ваши счета доходов?', + 'pref_home_do_show_deposits' => 'Да, показать их', + 'successful_count' => 'из которых :count успешно', + 'list_page_size_title' => 'Размер страницы', + 'list_page_size_help' => 'Все списки в программе (счета, транзакции и т. п.) будут отображаться с указанным количеством на одну страницу.', + 'list_page_size_label' => 'Размер страницы', + 'between_dates' => '(:start и :end)', + 'pref_optional_fields_transaction' => 'Дополнительные поля для транзакций', + 'pref_optional_fields_transaction_help' => 'По умолчанию при создании новой транзакции включены не все поля (чтобы не создавать беспорядок). Но вы можете включить эти поля, если лично вам они могут быть полезны. Любое поле, которое в последствии будет отключено, будет по-прежнему отображаться, если оно уже заполнено (независимо от данный настроек).', + 'optional_tj_date_fields' => 'Поля с датами', + 'optional_tj_other_fields' => 'Прочие поля', + 'optional_tj_attachment_fields' => 'Поля вложений', + 'pref_optional_tj_interest_date' => 'Дата начисления процентов', + 'pref_optional_tj_book_date' => 'Дата внесения записи', + 'pref_optional_tj_process_date' => 'Дата обработки', + 'pref_optional_tj_due_date' => 'Срок оплаты', + 'pref_optional_tj_payment_date' => 'Дата платежа', + 'pref_optional_tj_invoice_date' => 'Дата выставления счёта', + 'pref_optional_tj_internal_reference' => 'Внутренняя ссылка', + 'pref_optional_tj_notes' => 'Заметки', + 'pref_optional_tj_attachments' => 'Вложения', + 'pref_optional_tj_external_url' => 'Внешний URL', + 'pref_optional_tj_location' => 'Расположение', + 'pref_optional_tj_links' => 'Связи транзакции', + 'optional_field_meta_dates' => 'Даты', + 'optional_field_meta_business' => 'Бизнес', + 'optional_field_attachments' => 'Вложения', + 'optional_field_meta_data' => 'Расширенные данные', + 'external_url' => 'Внешний URL-адрес', + 'pref_notification_bill_reminder' => 'Напоминания о неоплаченных счетах', + 'pref_notification_new_access_token' => 'Оповещения о создании нового токена для доступа к API', + 'pref_notification_transaction_creation' => 'Предупреждения об автоматически созданных транзакциях', + 'pref_notification_user_login' => 'Оповещение при входе в аккаунт из нового места', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Уведомления', + 'pref_notifications_help' => 'Укажите, какие из перечисленных уведомлений вы хотели бы получать. Некоторые уведомления могут содержать конфиденциальную финансовую информацию.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'Если вы хотите, чтобы Firefly III уведомил вас об использовании Slack, введите URL-адрес webhook здесь. В противном случае оставьте поле пустым. Если вы являетесь администратором, вы также должны задать этот URL-адрес в администрировании.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Управление финансами', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Управление финансами', + 'administrations_index_menu' => 'Управление финансами', // profile: - 'purge_data_title' => 'Уничтожить данные из Firefly III', - 'purge_data_expl' => '"Уничтожение" - это полное "удаление того, что уже было удалено". Обычно Firefly III ничего не удаляет полностью. Он просто скрывает данные. Кнопка ниже удаляет все эти ранее "удалённые" записи НАВСЕГДА.', - 'delete_stuff_header' => 'Удалить и уничтожить данные', - 'purge_all_data' => 'Уничтожить все записи', - 'purge_data' => 'Уничтожить данные', - 'purged_all_records' => 'Все удалённые записи будут полностью уничтожены.', - 'delete_data_title' => 'Удалить данные из Firefly III', - 'permanent_delete_stuff' => 'Вы можете удалить данные из Firefly III. Использование кнопок ниже означает, что ваши данные больше не будут видны в Firefly. Вы не сможете отменить эту операцию из интерфейса Firefly, но записи могут остаться в базе данных, и вы сможете их восстановить при необходимости.', - 'other_sessions_logged_out' => 'Все прочие ваши сессии были прекращены.', - 'delete_unused_accounts' => 'Удаление неиспользуемых учетных записей очистит ваши автоматически заполненные списки.', - 'delete_all_unused_accounts' => 'Удалить неиспользуемые учётные записи', - 'deleted_all_unused_accounts' => 'Все неиспользуемые учетные записи удалены', - 'delete_all_budgets' => 'Удалить ВСЕ ваши бюджеты', - 'delete_all_categories' => 'Удалить ВСЕ ваши категории', - 'delete_all_tags' => 'Удалить ВСЕ ваши метки', - 'delete_all_bills' => 'Удалить ВСЕ ваши счета на оплату', - 'delete_all_piggy_banks' => 'Удалите ВСЕ ваши копилки', - 'delete_all_rules' => 'Удалить ВСЕ ваши правила', - 'delete_all_recurring' => 'Удалить ВСЕ ваши повторяющиеся транзакции', - 'delete_all_object_groups' => 'Удалить все ваши группы объектов', - 'delete_all_accounts' => 'Удалить ВСЕ ваши счета', - 'delete_all_asset_accounts' => 'Удалить ВСЕ ваши основные счета', - 'delete_all_expense_accounts' => 'Удалить ВСЕ счета расходов', - 'delete_all_revenue_accounts' => 'Удалить ВСЕ ваши счета доходов', - 'delete_all_liabilities' => 'Удалить ВСЕ ваши обязательства', - 'delete_all_transactions' => 'Удалить все ваши транзакции', - 'delete_all_withdrawals' => 'Удалить ВСЕ ваши расходы', - 'delete_all_deposits' => 'Удалить ВСЕ ваши доходы', - 'delete_all_transfers' => 'Удалить ВСЕ ваши переводы', - 'also_delete_transactions' => 'Удаление счетов приведёт к удалению ВСЕХ связанных расходов, доходов и переводов!', - 'deleted_all_budgets' => 'Все бюджеты были удалены', - 'deleted_all_categories' => 'Все категории были удалены', - 'deleted_all_tags' => 'Все метки были удалены', - 'deleted_all_bills' => 'Все счета на оплату были удалены', - 'deleted_all_piggy_banks' => 'Все копилки были удалены', - 'deleted_all_rules' => 'Все правила и группы правил были удалены', - 'deleted_all_object_groups' => 'Все группы были удалены', - 'deleted_all_accounts' => 'Все счета были удалены', - 'deleted_all_asset_accounts' => 'Все основные счета были удалены', - 'deleted_all_expense_accounts' => 'Все счета расходов были удалены', - 'deleted_all_revenue_accounts' => 'Все счета доходов были удалены', - 'deleted_all_liabilities' => 'Все обязательства были удалены', - 'deleted_all_transactions' => 'Все транзакции были удалены', - 'deleted_all_withdrawals' => 'Все расходы были удалены', - 'deleted_all_deposits' => 'Все доходы были удалены', - 'deleted_all_transfers' => 'Все переводы были удалены', - 'deleted_all_recurring' => 'Все повторяющиеся операции были удалены', - 'change_your_password' => 'Изменить ваш пароль', - 'delete_account' => 'Удалить профиль', - 'current_password' => 'Текущий пароль', - 'new_password' => 'Новый пароль', - 'new_password_again' => 'Новый пароль (ещё раз)', - 'delete_your_account' => 'Удалить ваш профиль', - 'delete_your_account_help' => 'При удалении вашего профиля также будут удалены все счета, транзакции. Не будет сохранено ничего, что вы хранили в Firefly III. Всё будет УТЕРЯНО!', - 'delete_your_account_password' => 'Для продолжения введите свой пароль.', - 'password' => 'Пароль', - 'are_you_sure' => 'Вы уверены? Эту операцию нельзя будет отменить.', - 'delete_account_button' => 'УДАЛИТЬ ваш профиль', - 'invalid_current_password' => 'Неправильный пароль!', - 'password_changed' => 'Пароль изменён!', - 'should_change' => 'Кажется, нужно изменить пароль.', - 'invalid_password' => 'Неверный пароль!', - 'what_is_pw_security' => 'Что такое «проверка безопасности паролей»?', - 'secure_pw_title' => 'Как выбрать безопасный пароль', - 'forgot_password_response' => 'Спасибо. Если существует учетная запись с этим адресом электронной почты, вы найдете инструкции в вашем почтовом ящике.', - 'secure_pw_history' => 'Каждую неделю вы читаете в новостях о сайтах, теряющих пароли своих пользователей. Хакеры и воры используют эти пароли, чтобы попытаться украсть вашу личную информацию. Эта информация является ценной.', - 'secure_pw_ff' => 'Вы используете один и тот же пароль по всему Интернету? Если один сайт потеряет ваш пароль, хакеры получат полный доступ ко всем вашим данным. Firefly III надеется, что вы выберите хороший и уникальный пароль для защиты своих финансовых данных.', - 'secure_pw_check_box' => 'Чтобы помочь вам, Firefly III может проверить, был ли использован пароль, который вы хотите использовать, где-то ещё. Если это так, Firefly III советует вам НЕ использовать такой пароль.', - 'secure_pw_working_title' => 'Как это работает?', - 'secure_pw_working' => 'Если вы установите данный флажок, Firefly III отправит первые 5 символов SHA1-хэша вашего пароля на сайт Troy Hunt, чтобы узнать, есть ли он в списке. Согласно рекомендациям по данному вопросу, опубликованным недавно в NIST Special Publication, такая проверка защитит вас от использования небезопасных паролей.', - 'secure_pw_should' => 'Должен ли я установить флажок?', - 'secure_pw_long_password' => 'Да. Всегда проверять безопасность моего пароля.', - 'command_line_token' => 'Токен командной строки', - 'explain_command_line_token' => 'Этот токен необходим для выполнения операций из командной строки (таких как экспорт данных). Без него эта чувствительная команда не будет работать. Не показывайте никому свой токен. Никто не попросит у вас эту информацию, даже я. Если вы боитесь, что потеряли этот токен, или у вас паранойя, вы можете сгенерировать новый токен с помощью этой кнопки.', - 'regenerate_command_line_token' => 'Сгенерировать новый токен командной строки', - 'token_regenerated' => 'Новый токен командной строки сгенерирован', - 'change_your_email' => 'Изменить ваш адрес электронной почты', - 'email_verification' => 'Письмо будет отправлено на ваши адреса электронной почты: старый и новый. В целях безопасности, вы не сможете войти в систему, пока не подтвердите новый адрес электронной почты. Если вы не уверены, что ваша установка Firefly III может отправлять электронную почту, не используйте эту функцию. Если вы являетесь администратором, вы можете проверить это на странице Администрирование.', - 'email_changed_logout' => 'Пока вы не подтвердите свой адрес электронной почты, вы не сможете войти в систему.', - 'login_with_new_email' => 'Теперь вы можете войти с новым адресом электронной почты.', - 'login_with_old_email' => 'Теперь вы можете снова войти со своим старым адресом электронной почты.', - 'login_provider_local_only' => 'Это действие недоступно при аутентификации через ":login_provider".', - 'external_user_mgt_disabled' => 'Это действие недоступно, если Firefly III не отвечает за управление пользователями или обработку аутентификации.', - 'external_auth_disabled' => 'Это действие недоступно, если Firefly III не отвечает за обработку аутентификации.', - 'delete_local_info_only' => "Поскольку Firefly III не отвечает за управление пользователями или обработку аутентификации, эта функция будет удалять только локальную информацию Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Клиенты OAuth', - 'profile_oauth_no_clients' => 'У вас пока нет клиентов OAuth.', - 'profile_oauth_clients_external_auth' => 'Если вы используете внешний поставщик аутентификации, например Authelia, клиенты OAuth не будут работать. Вы можете использовать только персональные токены доступа.', - 'profile_oauth_clients_header' => 'Клиенты', - 'profile_oauth_client_id' => 'ID клиента', - 'profile_oauth_client_name' => 'Название', - 'profile_oauth_client_secret' => 'Секретный ключ', - 'profile_oauth_create_new_client' => 'Создать нового клиента', - 'profile_oauth_create_client' => 'Создать клиента', - 'profile_oauth_edit_client' => 'Изменить клиента', - 'profile_oauth_name_help' => 'Что-то, что ваши пользователи знают, и чему доверяют.', - 'profile_oauth_redirect_url' => 'URL редиректа', - 'profile_oauth_redirect_url_help' => 'URL обратного вызова для вашего приложения.', - 'profile_authorized_apps' => 'Авторизованные приложения', - 'profile_authorized_clients' => 'Авторизованные клиенты', - 'profile_scopes' => 'Разрешения', - 'profile_revoke' => 'Отключить', - 'profile_oauth_client_secret_title' => 'Ключ клиента', - 'profile_oauth_client_secret_expl' => 'Вот ваш новый ключ клиента. Он будет показан вам только сейчас, поэтому не потеряйте его! Теперь вы можете использовать этот ключ, чтобы делать запросы по API.', - 'profile_personal_access_tokens' => 'Персональные Access Tokens', - 'profile_personal_access_token' => 'Персональный Access Token', - 'profile_oauth_confidential' => 'Конфиденциальный', - 'profile_oauth_confidential_help' => 'Требовать, чтобы клиент аутентифицировался с секретным ключом. Конфиденциальные клиенты могут хранить учётные данные в надёжном виде, защищая их от несанкционированного доступа. Публичные приложения, такие как обычный рабочий стол или приложения JavaScript SPA, не могут надёжно хранить ваши ключи.', - 'profile_personal_access_token_explanation' => 'Вот ваш новый персональный токен доступа. Он будет показан вам только сейчас, поэтому не потеряйте его! Теперь вы можете использовать этот токен, чтобы делать запросы по API.', - 'profile_no_personal_access_token' => 'Вы не создали ни одного персонального токена доступа.', - 'profile_create_new_token' => 'Создать новый токен', - 'profile_create_token' => 'Создать токен', - 'profile_create' => 'Создать', - 'profile_save_changes' => 'Сохранить изменения', - 'profile_whoops' => 'Ууупс!', - 'profile_something_wrong' => 'Что-то пошло не так!', - 'profile_try_again' => 'Произошла ошибка. Пожалуйста, попробуйте снова.', - 'amounts' => 'Сумма', - 'multi_account_warning_unknown' => 'В зависимости от типа транзакции, которую вы создаёте, счёт-источник и/или счёт назначения следующих частей разделённой транзакции могут быть заменены теми, которые указаны для первой части транзакции.', - 'multi_account_warning_withdrawal' => 'Имейте в виду, что счёт-источник в других частях разделённой транзакции будет таким же, как в первой части расхода.', - 'multi_account_warning_deposit' => 'Имейте в виду, что счёт назначения в других частях разделённой транзакции будет таким же, как в первой части дохода.', - 'multi_account_warning_transfer' => 'Имейте в виду, что счёт-источник и счёт назначения в других частях разделённой транзакции будут такими же, как в первой части перевода.', + 'purge_data_title' => 'Уничтожить данные из Firefly III', + 'purge_data_expl' => '"Уничтожение" - это полное "удаление того, что уже было удалено". Обычно Firefly III ничего не удаляет полностью. Он просто скрывает данные. Кнопка ниже удаляет все эти ранее "удалённые" записи НАВСЕГДА.', + 'delete_stuff_header' => 'Удалить и уничтожить данные', + 'purge_all_data' => 'Уничтожить все записи', + 'purge_data' => 'Уничтожить данные', + 'purged_all_records' => 'Все удалённые записи будут полностью уничтожены.', + 'delete_data_title' => 'Удалить данные из Firefly III', + 'permanent_delete_stuff' => 'Вы можете удалить данные из Firefly III. Использование кнопок ниже означает, что ваши данные больше не будут видны в Firefly. Вы не сможете отменить эту операцию из интерфейса Firefly, но записи могут остаться в базе данных, и вы сможете их восстановить при необходимости.', + 'other_sessions_logged_out' => 'Все прочие ваши сессии были прекращены.', + 'delete_unused_accounts' => 'Удаление неиспользуемых учетных записей очистит ваши автоматически заполненные списки.', + 'delete_all_unused_accounts' => 'Удалить неиспользуемые учётные записи', + 'deleted_all_unused_accounts' => 'Все неиспользуемые учетные записи удалены', + 'delete_all_budgets' => 'Удалить ВСЕ ваши бюджеты', + 'delete_all_categories' => 'Удалить ВСЕ ваши категории', + 'delete_all_tags' => 'Удалить ВСЕ ваши метки', + 'delete_all_bills' => 'Удалить ВСЕ ваши счета на оплату', + 'delete_all_piggy_banks' => 'Удалите ВСЕ ваши копилки', + 'delete_all_rules' => 'Удалить ВСЕ ваши правила', + 'delete_all_recurring' => 'Удалить ВСЕ ваши повторяющиеся транзакции', + 'delete_all_object_groups' => 'Удалить все ваши группы объектов', + 'delete_all_accounts' => 'Удалить ВСЕ ваши счета', + 'delete_all_asset_accounts' => 'Удалить ВСЕ ваши основные счета', + 'delete_all_expense_accounts' => 'Удалить ВСЕ счета расходов', + 'delete_all_revenue_accounts' => 'Удалить ВСЕ ваши счета доходов', + 'delete_all_liabilities' => 'Удалить ВСЕ ваши обязательства', + 'delete_all_transactions' => 'Удалить все ваши транзакции', + 'delete_all_withdrawals' => 'Удалить ВСЕ ваши расходы', + 'delete_all_deposits' => 'Удалить ВСЕ ваши доходы', + 'delete_all_transfers' => 'Удалить ВСЕ ваши переводы', + 'also_delete_transactions' => 'Удаление счетов приведёт к удалению ВСЕХ связанных расходов, доходов и переводов!', + 'deleted_all_budgets' => 'Все бюджеты были удалены', + 'deleted_all_categories' => 'Все категории были удалены', + 'deleted_all_tags' => 'Все метки были удалены', + 'deleted_all_bills' => 'Все счета на оплату были удалены', + 'deleted_all_piggy_banks' => 'Все копилки были удалены', + 'deleted_all_rules' => 'Все правила и группы правил были удалены', + 'deleted_all_object_groups' => 'Все группы были удалены', + 'deleted_all_accounts' => 'Все счета были удалены', + 'deleted_all_asset_accounts' => 'Все основные счета были удалены', + 'deleted_all_expense_accounts' => 'Все счета расходов были удалены', + 'deleted_all_revenue_accounts' => 'Все счета доходов были удалены', + 'deleted_all_liabilities' => 'Все обязательства были удалены', + 'deleted_all_transactions' => 'Все транзакции были удалены', + 'deleted_all_withdrawals' => 'Все расходы были удалены', + 'deleted_all_deposits' => 'Все доходы были удалены', + 'deleted_all_transfers' => 'Все переводы были удалены', + 'deleted_all_recurring' => 'Все повторяющиеся операции были удалены', + 'change_your_password' => 'Изменить ваш пароль', + 'delete_account' => 'Удалить профиль', + 'current_password' => 'Текущий пароль', + 'new_password' => 'Новый пароль', + 'new_password_again' => 'Новый пароль (ещё раз)', + 'delete_your_account' => 'Удалить ваш профиль', + 'delete_your_account_help' => 'При удалении вашего профиля также будут удалены все счета, транзакции. Не будет сохранено ничего, что вы хранили в Firefly III. Всё будет УТЕРЯНО!', + 'delete_your_account_password' => 'Для продолжения введите свой пароль.', + 'password' => 'Пароль', + 'are_you_sure' => 'Вы уверены? Эту операцию нельзя будет отменить.', + 'delete_account_button' => 'УДАЛИТЬ ваш профиль', + 'invalid_current_password' => 'Неправильный пароль!', + 'password_changed' => 'Пароль изменён!', + 'should_change' => 'Кажется, нужно изменить пароль.', + 'invalid_password' => 'Неверный пароль!', + 'what_is_pw_security' => 'Что такое «проверка безопасности паролей»?', + 'secure_pw_title' => 'Как выбрать безопасный пароль', + 'forgot_password_response' => 'Спасибо. Если существует учетная запись с этим адресом электронной почты, вы найдете инструкции в вашем почтовом ящике.', + 'secure_pw_history' => 'Каждую неделю вы читаете в новостях о сайтах, теряющих пароли своих пользователей. Хакеры и воры используют эти пароли, чтобы попытаться украсть вашу личную информацию. Эта информация является ценной.', + 'secure_pw_ff' => 'Вы используете один и тот же пароль по всему Интернету? Если один сайт потеряет ваш пароль, хакеры получат полный доступ ко всем вашим данным. Firefly III надеется, что вы выберите хороший и уникальный пароль для защиты своих финансовых данных.', + 'secure_pw_check_box' => 'Чтобы помочь вам, Firefly III может проверить, был ли использован пароль, который вы хотите использовать, где-то ещё. Если это так, Firefly III советует вам НЕ использовать такой пароль.', + 'secure_pw_working_title' => 'Как это работает?', + 'secure_pw_working' => 'Если вы установите данный флажок, Firefly III отправит первые 5 символов SHA1-хэша вашего пароля на сайт Troy Hunt, чтобы узнать, есть ли он в списке. Согласно рекомендациям по данному вопросу, опубликованным недавно в NIST Special Publication, такая проверка защитит вас от использования небезопасных паролей.', + 'secure_pw_should' => 'Должен ли я установить флажок?', + 'secure_pw_long_password' => 'Да. Всегда проверять безопасность моего пароля.', + 'command_line_token' => 'Токен командной строки', + 'explain_command_line_token' => 'Этот токен необходим для выполнения операций из командной строки (таких как экспорт данных). Без него эта чувствительная команда не будет работать. Не показывайте никому свой токен. Никто не попросит у вас эту информацию, даже я. Если вы боитесь, что потеряли этот токен, или у вас паранойя, вы можете сгенерировать новый токен с помощью этой кнопки.', + 'regenerate_command_line_token' => 'Сгенерировать новый токен командной строки', + 'token_regenerated' => 'Новый токен командной строки сгенерирован', + 'change_your_email' => 'Изменить ваш адрес электронной почты', + 'email_verification' => 'Письмо будет отправлено на ваши адреса электронной почты: старый и новый. В целях безопасности, вы не сможете войти в систему, пока не подтвердите новый адрес электронной почты. Если вы не уверены, что ваша установка Firefly III может отправлять электронную почту, не используйте эту функцию. Если вы являетесь администратором, вы можете проверить это на странице Администрирование.', + 'email_changed_logout' => 'Пока вы не подтвердите свой адрес электронной почты, вы не сможете войти в систему.', + 'login_with_new_email' => 'Теперь вы можете войти с новым адресом электронной почты.', + 'login_with_old_email' => 'Теперь вы можете снова войти со своим старым адресом электронной почты.', + 'login_provider_local_only' => 'Это действие недоступно при аутентификации через ":login_provider".', + 'external_user_mgt_disabled' => 'Это действие недоступно, если Firefly III не отвечает за управление пользователями или обработку аутентификации.', + 'external_auth_disabled' => 'Это действие недоступно, если Firefly III не отвечает за обработку аутентификации.', + 'delete_local_info_only' => 'Поскольку Firefly III не отвечает за управление пользователями или обработку аутентификации, эта функция будет удалять только локальную информацию Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Клиенты OAuth', + 'profile_oauth_no_clients' => 'У вас пока нет клиентов OAuth.', + 'profile_oauth_clients_external_auth' => 'Если вы используете внешний поставщик аутентификации, например Authelia, клиенты OAuth не будут работать. Вы можете использовать только персональные токены доступа.', + 'profile_oauth_clients_header' => 'Клиенты', + 'profile_oauth_client_id' => 'ID клиента', + 'profile_oauth_client_name' => 'Название', + 'profile_oauth_client_secret' => 'Секретный ключ', + 'profile_oauth_create_new_client' => 'Создать нового клиента', + 'profile_oauth_create_client' => 'Создать клиента', + 'profile_oauth_edit_client' => 'Изменить клиента', + 'profile_oauth_name_help' => 'Что-то, что ваши пользователи знают, и чему доверяют.', + 'profile_oauth_redirect_url' => 'URL редиректа', + 'profile_oauth_redirect_url_help' => 'URL обратного вызова для вашего приложения.', + 'profile_authorized_apps' => 'Авторизованные приложения', + 'profile_authorized_clients' => 'Авторизованные клиенты', + 'profile_scopes' => 'Разрешения', + 'profile_revoke' => 'Отключить', + 'profile_oauth_client_secret_title' => 'Ключ клиента', + 'profile_oauth_client_secret_expl' => 'Вот ваш новый ключ клиента. Он будет показан вам только сейчас, поэтому не потеряйте его! Теперь вы можете использовать этот ключ, чтобы делать запросы по API.', + 'profile_personal_access_tokens' => 'Персональные Access Tokens', + 'profile_personal_access_token' => 'Персональный Access Token', + 'profile_oauth_confidential' => 'Конфиденциальный', + 'profile_oauth_confidential_help' => 'Требовать, чтобы клиент аутентифицировался с секретным ключом. Конфиденциальные клиенты могут хранить учётные данные в надёжном виде, защищая их от несанкционированного доступа. Публичные приложения, такие как обычный рабочий стол или приложения JavaScript SPA, не могут надёжно хранить ваши ключи.', + 'profile_personal_access_token_explanation' => 'Вот ваш новый персональный токен доступа. Он будет показан вам только сейчас, поэтому не потеряйте его! Теперь вы можете использовать этот токен, чтобы делать запросы по API.', + 'profile_no_personal_access_token' => 'Вы не создали ни одного персонального токена доступа.', + 'profile_create_new_token' => 'Создать новый токен', + 'profile_create_token' => 'Создать токен', + 'profile_create' => 'Создать', + 'profile_save_changes' => 'Сохранить изменения', + 'profile_whoops' => 'Ууупс!', + 'profile_something_wrong' => 'Что-то пошло не так!', + 'profile_try_again' => 'Произошла ошибка. Пожалуйста, попробуйте снова.', + 'amounts' => 'Сумма', + 'multi_account_warning_unknown' => 'В зависимости от типа транзакции, которую вы создаёте, счёт-источник и/или счёт назначения следующих частей разделённой транзакции могут быть заменены теми, которые указаны для первой части транзакции.', + 'multi_account_warning_withdrawal' => 'Имейте в виду, что счёт-источник в других частях разделённой транзакции будет таким же, как в первой части расхода.', + 'multi_account_warning_deposit' => 'Имейте в виду, что счёт назначения в других частях разделённой транзакции будет таким же, как в первой части дохода.', + 'multi_account_warning_transfer' => 'Имейте в виду, что счёт-источник и счёт назначения в других частях разделённой транзакции будут такими же, как в первой части перевода.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Экспорт данных из Firefly III', - 'export_data_menu' => 'Экспорт данных', - 'export_data_bc' => 'Экспорт данных из Firefly III', - 'export_data_main_title' => 'Экспорт данных из Firefly III', - 'export_data_expl' => 'Эта ссылка позволяет вам экспортировать все транзакции и мета-данные из Firefly III. Подробную информацию об экспорте вы можете получить в справке (см. значок (?) в правом верхнем углу).', - 'export_data_all_transactions' => 'Экспорт всех транзакций', - 'export_data_advanced_expl' => 'Если вам нужен более продвинутый или конкретный тип экспорта, прочтите справку о том, как использовать команду консоли php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Экспорт данных из Firefly III', + 'export_data_menu' => 'Экспорт данных', + 'export_data_bc' => 'Экспорт данных из Firefly III', + 'export_data_main_title' => 'Экспорт данных из Firefly III', + 'export_data_expl' => 'Эта ссылка позволяет вам экспортировать все транзакции и мета-данные из Firefly III. Подробную информацию об экспорте вы можете получить в справке (см. значок (?) в правом верхнем углу).', + 'export_data_all_transactions' => 'Экспорт всех транзакций', + 'export_data_advanced_expl' => 'Если вам нужен более продвинутый или конкретный тип экспорта, прочтите справку о том, как использовать команду консоли php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Одно вложение |:count вложений', - 'attachments' => 'Вложения', - 'edit_attachment' => 'Изменить вложение ":name"', - 'update_attachment' => 'Обновить вложение', - 'delete_attachment' => 'Удалить вложение ":name"', - 'attachment_deleted' => 'Вложение ":name" удалено', - 'liabilities_deleted' => 'Долговой счёт ":name" удалён', - 'attachment_updated' => 'Вложение ":name" обновлено', - 'upload_max_file_size' => 'Максимальный размер файла: :size', - 'list_all_attachments' => 'Список всех вложений', + 'nr_of_attachments' => 'Одно вложение |:count вложений', + 'attachments' => 'Вложения', + 'edit_attachment' => 'Изменить вложение ":name"', + 'update_attachment' => 'Обновить вложение', + 'delete_attachment' => 'Удалить вложение ":name"', + 'attachment_deleted' => 'Вложение ":name" удалено', + 'liabilities_deleted' => 'Долговой счёт ":name" удалён', + 'attachment_updated' => 'Вложение ":name" обновлено', + 'upload_max_file_size' => 'Максимальный размер файла: :size', + 'list_all_attachments' => 'Список всех вложений', // transaction index - 'title_expenses' => 'Расходы', - 'title_withdrawal' => 'Расходы', - 'title_revenue' => 'Доход', - 'title_deposit' => 'Доход', - 'title_transfer' => 'Переводы', - 'title_transfers' => 'Переводы', - 'submission_options' => 'Опции отправки', - 'apply_rules_checkbox' => 'Применить правила', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Поскольку эта транзакция сверена, вы не сможете обновить счета, ни сумму(ы).', + 'title_expenses' => 'Расходы', + 'title_withdrawal' => 'Расходы', + 'title_revenue' => 'Доход', + 'title_deposit' => 'Доход', + 'title_transfer' => 'Переводы', + 'title_transfers' => 'Переводы', + 'submission_options' => 'Опции отправки', + 'apply_rules_checkbox' => 'Применить правила', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Эта транзакция уже является расходом', - 'convert_is_already_type_Deposit' => 'Эта транзакция уже является доходом', - 'convert_is_already_type_Transfer' => 'Эта транзакция уже является переводом', - 'convert_to_Withdrawal' => 'Преобразовать ":description" в расход', - 'convert_to_Deposit' => 'Преобразовать ":description" в доход', - 'convert_to_Transfer' => 'Преобразовать ":description" в перевод', - 'convert_options_WithdrawalDeposit' => 'Преобразовать расход в доход', - 'convert_options_WithdrawalTransfer' => 'Преобразовать расход в перевод', - 'convert_options_DepositTransfer' => 'Преобразовать доход в перевод', - 'convert_options_DepositWithdrawal' => 'Преобразовать доход в расход', - 'convert_options_TransferWithdrawal' => 'Преобразовать перевод в расход', - 'convert_options_TransferDeposit' => 'Преобразовать перевод в доход', - 'convert_Withdrawal_to_deposit' => 'Преобразовать этот расход в доход', - 'convert_Withdrawal_to_transfer' => 'Преобразовать этот расход в перевод', - 'convert_Deposit_to_withdrawal' => 'Преобразовать этот доход в расход', - 'convert_Deposit_to_transfer' => 'Преобразовать этот доход в перевод', - 'convert_Transfer_to_deposit' => 'Преобразовать этот перевод в доход', - 'convert_Transfer_to_withdrawal' => 'Преобразовать этот перевод в расход', - 'convert_please_set_revenue_source' => 'Пожалуйста, выберите счёт доходов, с которого поступят деньги.', - 'convert_please_set_asset_destination' => 'Пожалуйста, выберите основной счёт, на который будут переведены деньги.', - 'convert_please_set_expense_destination' => 'Пожалуйста, выберите счёт расходов, на который будут направлены деньги.', - 'convert_please_set_asset_source' => 'Пожалуйста, выберите основной счёт, с которого поступят деньги.', - 'convert_expl_w_d' => 'При преобразовании расхода в доход, средства будут внесены на указанный счёт, а не списаны с него.|При преобразовании расхода в доход, средства будут внесены на указанные счета, а не списаны с них.', - 'convert_expl_w_t' => 'При преобразовании расхода в перевод, средства будут переведены с исходного счёта на другой основной счёт или вклад, а не просто списаны с исходного счёта расходов.|При преобразовании расхода в перевод, средства будут переведены с исходных счётов на другие основные счета или вклады, а не просто списаны с исходных счетов расходов.', - 'convert_expl_d_w' => 'При преобразовании дохода в расход, средства будут списаны с указанного счёта-источника, а не внесены на него.|При преобразовании дохода в расход, средства будут списаны с указанных счетов-источников, а не внесены на них.', - 'convert_expl_d_t' => 'При преобразовании дохода в перевод, средства будут начислены на счёт назначения с любого из ваших активов или обязательств.|При преобразовании дохода в перевод, средства будут начислены на счета назначения с любого из ваших активов или обязательств.', - 'convert_expl_t_w' => 'При преобразовании перевода в расход, средства будут списаны с указанного вами счёта назначения, а не переведены на него.|При преобразовании перевода в расход, средства будут списаны с указанных вами счетов назначения, а не переведены на них.', - 'convert_expl_t_d' => 'При преобразовании перевода в доход, средства будут начислены на указанный счёт назначения, а не переведены на него.|При преобразовании перевода в доход, средства будут начислены на указанные счета назначения, а не переведены на них.', - 'convert_select_sources' => 'Для завершения преобразования, укажите новый счёт назначения.|Для завершения преобразования, укажите новые счета назначения.', - 'convert_select_destinations' => 'Для завершения преобразования, выберите новый счёт назначения.|Для завершения преобразования, выберите новые счета назначения.', - 'converted_to_Withdrawal' => 'Транзакция была преобразована в расход', - 'converted_to_Deposit' => 'Транзакция была преобразована в доход', - 'converted_to_Transfer' => 'Транзакция была преобразована в перевод', - 'invalid_convert_selection' => 'Выбранный вами счёт уже используется в этой транзакции или не существует.', - 'source_or_dest_invalid' => 'Не удается найти правильные сведения о транзакции. Преобразование невозможно.', - 'convert_to_withdrawal' => 'Преобразовать в расход', - 'convert_to_deposit' => 'Преобразовать в доход', - 'convert_to_transfer' => 'Преобразовать в перевод', + 'convert_is_already_type_Withdrawal' => 'Эта транзакция уже является расходом', + 'convert_is_already_type_Deposit' => 'Эта транзакция уже является доходом', + 'convert_is_already_type_Transfer' => 'Эта транзакция уже является переводом', + 'convert_to_Withdrawal' => 'Преобразовать ":description" в расход', + 'convert_to_Deposit' => 'Преобразовать ":description" в доход', + 'convert_to_Transfer' => 'Преобразовать ":description" в перевод', + 'convert_options_WithdrawalDeposit' => 'Преобразовать расход в доход', + 'convert_options_WithdrawalTransfer' => 'Преобразовать расход в перевод', + 'convert_options_DepositTransfer' => 'Преобразовать доход в перевод', + 'convert_options_DepositWithdrawal' => 'Преобразовать доход в расход', + 'convert_options_TransferWithdrawal' => 'Преобразовать перевод в расход', + 'convert_options_TransferDeposit' => 'Преобразовать перевод в доход', + 'convert_Withdrawal_to_deposit' => 'Преобразовать этот расход в доход', + 'convert_Withdrawal_to_transfer' => 'Преобразовать этот расход в перевод', + 'convert_Deposit_to_withdrawal' => 'Преобразовать этот доход в расход', + 'convert_Deposit_to_transfer' => 'Преобразовать этот доход в перевод', + 'convert_Transfer_to_deposit' => 'Преобразовать этот перевод в доход', + 'convert_Transfer_to_withdrawal' => 'Преобразовать этот перевод в расход', + 'convert_please_set_revenue_source' => 'Пожалуйста, выберите счёт доходов, с которого поступят деньги.', + 'convert_please_set_asset_destination' => 'Пожалуйста, выберите основной счёт, на который будут переведены деньги.', + 'convert_please_set_expense_destination' => 'Пожалуйста, выберите счёт расходов, на который будут направлены деньги.', + 'convert_please_set_asset_source' => 'Пожалуйста, выберите основной счёт, с которого поступят деньги.', + 'convert_expl_w_d' => 'При преобразовании расхода в доход, средства будут внесены на указанный счёт, а не списаны с него.|При преобразовании расхода в доход, средства будут внесены на указанные счета, а не списаны с них.', + 'convert_expl_w_t' => 'При преобразовании расхода в перевод, средства будут переведены с исходного счёта на другой основной счёт или вклад, а не просто списаны с исходного счёта расходов.|При преобразовании расхода в перевод, средства будут переведены с исходных счётов на другие основные счета или вклады, а не просто списаны с исходных счетов расходов.', + 'convert_expl_d_w' => 'При преобразовании дохода в расход, средства будут списаны с указанного счёта-источника, а не внесены на него.|При преобразовании дохода в расход, средства будут списаны с указанных счетов-источников, а не внесены на них.', + 'convert_expl_d_t' => 'При преобразовании дохода в перевод, средства будут начислены на счёт назначения с любого из ваших активов или обязательств.|При преобразовании дохода в перевод, средства будут начислены на счета назначения с любого из ваших активов или обязательств.', + 'convert_expl_t_w' => 'При преобразовании перевода в расход, средства будут списаны с указанного вами счёта назначения, а не переведены на него.|При преобразовании перевода в расход, средства будут списаны с указанных вами счетов назначения, а не переведены на них.', + 'convert_expl_t_d' => 'При преобразовании перевода в доход, средства будут начислены на указанный счёт назначения, а не переведены на него.|При преобразовании перевода в доход, средства будут начислены на указанные счета назначения, а не переведены на них.', + 'convert_select_sources' => 'Для завершения преобразования, укажите новый счёт назначения.|Для завершения преобразования, укажите новые счета назначения.', + 'convert_select_destinations' => 'Для завершения преобразования, выберите новый счёт назначения.|Для завершения преобразования, выберите новые счета назначения.', + 'converted_to_Withdrawal' => 'Транзакция была преобразована в расход', + 'converted_to_Deposit' => 'Транзакция была преобразована в доход', + 'converted_to_Transfer' => 'Транзакция была преобразована в перевод', + 'invalid_convert_selection' => 'Выбранный вами счёт уже используется в этой транзакции или не существует.', + 'source_or_dest_invalid' => 'Не удается найти правильные сведения о транзакции. Преобразование невозможно.', + 'convert_to_withdrawal' => 'Преобразовать в расход', + 'convert_to_deposit' => 'Преобразовать в доход', + 'convert_to_transfer' => 'Преобразовать в перевод', // create new stuff: - 'create_new_withdrawal' => 'Создать новый расход', - 'create_new_deposit' => 'Создать новый доход', - 'create_new_transfer' => 'Создать новый перевод', - 'create_new_asset' => 'Создать новый активный счёт', - 'create_new_liabilities' => 'Создать новый долговой счёт', - 'create_new_expense' => 'Создать новый счёт расхода', - 'create_new_revenue' => 'Создать новый счёт дохода', - 'create_new_piggy_bank' => 'Создать новую копилку', - 'create_new_bill' => 'Создать новый счёт к оплате', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Создать новый расход', + 'create_new_deposit' => 'Создать новый доход', + 'create_new_transfer' => 'Создать новый перевод', + 'create_new_asset' => 'Создать новый активный счёт', + 'create_new_liabilities' => 'Создать новый долговой счёт', + 'create_new_expense' => 'Создать новый счёт расхода', + 'create_new_revenue' => 'Создать новый счёт дохода', + 'create_new_piggy_bank' => 'Создать новую копилку', + 'create_new_bill' => 'Создать новый счёт к оплате', + 'create_new_subscription' => 'Создать новую подписку', + 'create_new_rule' => 'Создать новое правило', // currencies: - 'create_currency' => 'Создать новую валюту', - 'store_currency' => 'Сохранить новую валюту', - 'update_currency' => 'Обновить валюту', - 'new_default_currency' => ':name теперь является вашей основной валютой.', - 'cannot_delete_currency' => 'Невозможно удалить валюту :name, поскольку она используется.', - 'cannot_delete_fallback_currency' => ':name - это системная резервная валюта, она не может быть удалена.', - 'cannot_disable_currency_journals' => 'Не удается отключить валюту :name, потому что она была использована в транзакциях.', - 'cannot_disable_currency_last_left' => 'Не удается отключить валюту :name, потому что это последняя активная валюта.', - 'cannot_disable_currency_account_meta' => 'Невозможно отключить валюту :name, поскольку она используется для одного из счетов.', - 'cannot_disable_currency_bills' => 'Невозможно отключить валюту :name, поскольку она используется в счёте на оплату.', - 'cannot_disable_currency_recurring' => 'Невозможно отключить валюту :name, поскольку она используется для повторяющейся транзакции.', - 'cannot_disable_currency_available_budgets' => 'Невозможно отключить валюту :name, поскольку она используется в бюджете.', - 'cannot_disable_currency_budget_limits' => 'Невозможно отключить валюту :name, поскольку она используется в лимите для бюджета.', - 'cannot_disable_currency_current_default' => 'Невозможно отключить валюту :name, поскольку это текущая валюта по умолчанию.', - 'cannot_disable_currency_system_fallback' => 'Невозможно отключить валюту :name, поскольку это системная валюта по умолчанию.', - 'disable_EUR_side_effects' => 'Евро является аварийной резервной валютой системы. Её отключение может иметь непредвиденные побочные эффекты и может привести к потере гарантии.', - 'deleted_currency' => 'Валюта :name удалена', - 'created_currency' => 'Валюта :name создана', - 'could_not_store_currency' => 'Невозможно сохранить новую валюту.', - 'updated_currency' => 'Валюта :name обновлена', - 'ask_site_owner' => 'Пожалуйста, обратитесь к :owner для добавления, удаления или изменения валюты.', - 'currencies_intro' => 'Firefly III может работать с несколькими валютами. Вы можете управлять ими здесь.', - 'make_default_currency' => 'Сделать основной', - 'default_currency' => 'основная', - 'currency_is_disabled' => 'Отключена', - 'enable_currency' => 'Включить', - 'disable_currency' => 'Отключить', - 'currencies_default_disabled' => 'Большинство этих валют по умолчанию отключены. Для использования, сначала включите их.', - 'currency_is_now_enabled' => 'Валюта ":name" была включена', - 'currency_is_now_disabled' => 'Валюта ":name" была отключена', + 'create_currency' => 'Создать новую валюту', + 'store_currency' => 'Сохранить новую валюту', + 'update_currency' => 'Обновить валюту', + 'new_default_currency' => '":name" сейчас валюта по умолчанию.', + 'default_currency_failed' => 'Не удалось сделать ":name" валютой по умолчанию. Пожалуйста, проверьте журналы (логи).', + 'cannot_delete_currency' => 'Невозможно удалить валюту :name, поскольку она используется.', + 'cannot_delete_fallback_currency' => ':name - это системная резервная валюта, она не может быть удалена.', + 'cannot_disable_currency_journals' => 'Не удается отключить валюту :name, потому что она была использована в транзакциях.', + 'cannot_disable_currency_last_left' => 'Не удается отключить валюту :name, потому что это последняя активная валюта.', + 'cannot_disable_currency_account_meta' => 'Невозможно отключить валюту :name, поскольку она используется для одного из счетов.', + 'cannot_disable_currency_bills' => 'Невозможно отключить валюту :name, поскольку она используется в счёте на оплату.', + 'cannot_disable_currency_recurring' => 'Невозможно отключить валюту :name, поскольку она используется для повторяющейся транзакции.', + 'cannot_disable_currency_available_budgets' => 'Невозможно отключить валюту :name, поскольку она используется в бюджете.', + 'cannot_disable_currency_budget_limits' => 'Невозможно отключить валюту :name, поскольку она используется в лимите для бюджета.', + 'cannot_disable_currency_current_default' => 'Невозможно отключить валюту :name, поскольку это текущая валюта по умолчанию.', + 'cannot_disable_currency_system_fallback' => 'Невозможно отключить валюту :name, поскольку это системная валюта по умолчанию.', + 'disable_EUR_side_effects' => 'Евро является аварийной резервной валютой системы. Её отключение может иметь непредвиденные побочные эффекты и может привести к потере гарантии.', + 'deleted_currency' => 'Валюта :name удалена', + 'created_currency' => 'Валюта :name создана', + 'could_not_store_currency' => 'Невозможно сохранить новую валюту.', + 'updated_currency' => 'Валюта :name обновлена', + 'ask_site_owner' => 'Пожалуйста, обратитесь к :owner для добавления, удаления или изменения валюты.', + 'currencies_intro' => 'Firefly III может работать с несколькими валютами. Вы можете управлять ими здесь.', + 'make_default_currency' => 'Сделать основной', + 'default_currency' => 'основная', + 'currency_is_disabled' => 'Отключена', + 'enable_currency' => 'Включить', + 'disable_currency' => 'Отключить', + 'currencies_default_disabled' => 'Большинство этих валют по умолчанию отключены. Для использования, сначала включите их.', + 'currency_is_now_enabled' => 'Валюта ":name" была включена', + 'could_not_enable_currency' => 'Не удалось включить валюту ":name". Пожалуйста, просмотрите журналы.', + 'currency_is_now_disabled' => 'Валюта ":name" была отключена', + 'could_not_disable_currency' => 'Не удалось отключить валюту ":name". Возможно, она все еще используется?', // forms: - 'mandatoryFields' => 'Обязательные поля', - 'optionalFields' => 'Дополнительные поля', - 'options' => 'Параметры', + 'mandatoryFields' => 'Обязательные поля', + 'optionalFields' => 'Дополнительные поля', + 'options' => 'Параметры', // budgets: - 'daily_budgets' => 'Бюджеты на день', - 'weekly_budgets' => 'Бюджеты на неделю', - 'monthly_budgets' => 'Бюджеты на месяц', - 'quarterly_budgets' => 'Бюджеты на квартал', - 'half_year_budgets' => 'Бюджеты на полгода', - 'yearly_budgets' => 'Годовые бюджеты', - 'other_budgets' => 'Бюджеты на произвольный отрезок времени', - 'budget_limit_not_in_range' => 'Эта сумма действует с :start по :end:', - 'total_available_budget' => 'Общий доступный бюджет (между :start и :end)', - 'total_available_budget_in_currency' => 'Всего доступно в бюджете (:currency)', - 'see_below' => 'см. ниже', - 'create_new_budget' => 'Создать новый бюджет', - 'store_new_budget' => 'Сохранить новый бюджет', - 'stored_new_budget' => 'Новый бюджет ":name" сохранён', - 'available_between' => 'Доступно между :start и :end', - 'transactionsWithoutBudget' => 'Расходы вне бюджета', - 'transactions_no_budget' => 'Расходы вне бюджета между :start и :end', - 'spent_between' => 'Уже потрачено между :start и :end', - 'set_available_amount' => 'Установить доступную сумму', - 'update_available_amount' => 'Обновить доступную сумму', - 'ab_basic_modal_explain' => 'Используйте эту форму, чтобы указать какой бюджет вы планируете (всего, в :currency) на указанный период.', - 'createBudget' => 'Новый бюджет', - 'invalid_currency' => 'Это неверная валюта', - 'invalid_amount' => 'Пожалуйста, введите сумму', - 'set_ab' => 'Доступная сумма бюджета была установлена', - 'updated_ab' => 'Доступная сумма бюджета была обновлена', - 'deleted_ab' => 'Доступная сумма бюджета была удалена', - 'deleted_bl' => 'Запланированная в бюджете сумма была удалена', - 'alt_currency_ab_create' => 'Установите доступный бюджет в другой валюте', - 'bl_create_btn' => 'Установите бюджет в другой валюте', - 'inactiveBudgets' => 'Неактивные бюджеты', - 'without_budget_between' => 'Транзакции вне бюджета между :start и :end', - 'delete_budget' => 'Удалить бюджет ":name"', - 'deleted_budget' => 'Бюджет ":name" удалён', - 'edit_budget' => 'Редактировать бюджет ":name"', - 'updated_budget' => 'Бюджет ":name" обновлён', - 'update_amount' => 'Обновить сумму', - 'update_budget' => 'Обновить бюджет', - 'update_budget_amount_range' => 'Обновить (ожидаемые) доступные средства между :start и :end', - 'set_budget_limit_title' => 'Установите сумму для :budget между :start и :end', - 'set_budget_limit' => 'Установите сумму в бюджете', - 'budget_period_navigator' => 'Навигация по периодам', - 'info_on_available_amount' => 'Сколько средств у меня есть?', - 'available_amount_indication' => 'Используйте эти суммы, чтобы узнать, каким может быть ваш суммарный бюджет.', - 'suggested' => 'Рекомендуемые', - 'average_between' => 'В среднем между :start и :end', - 'transferred_in' => 'Переведено (в)', - 'transferred_away' => 'Переведено (из)', - 'auto_budget_none' => 'Без автобюджета', - 'auto_budget_reset' => 'Задать фиксированную сумму на каждый период', - 'auto_budget_rollover' => 'Добавить сумму на каждый период', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Ежедневно', - 'auto_budget_period_weekly' => 'Еженедельно', - 'auto_budget_period_monthly' => 'Ежемесячно', - 'auto_budget_period_quarterly' => 'Ежеквартально', - 'auto_budget_period_half_year' => 'Раз в полгода', - 'auto_budget_period_yearly' => 'Каждый год', - 'auto_budget_help' => 'Подробнее об этой функции можно прочитать в справке. Щёлкните по значку (?) в правом верхнем углу.', - 'auto_budget_reset_icon' => 'Этот бюджет будет устанавливаться периодически', - 'auto_budget_rollover_icon' => 'Доступная в бюджете сумма будет периодически увеличиваться', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Удалить запланированную в бюджете сумму в :currency', + 'daily_budgets' => 'Бюджеты на день', + 'weekly_budgets' => 'Бюджеты на неделю', + 'monthly_budgets' => 'Бюджеты на месяц', + 'quarterly_budgets' => 'Бюджеты на квартал', + 'half_year_budgets' => 'Бюджеты на полгода', + 'yearly_budgets' => 'Годовые бюджеты', + 'other_budgets' => 'Бюджеты на произвольный отрезок времени', + 'budget_limit_not_in_range' => 'Эта сумма действует с :start по :end:', + 'total_available_budget' => 'Общий доступный бюджет (между :start и :end)', + 'total_available_budget_in_currency' => 'Всего доступно в бюджете (:currency)', + 'see_below' => 'см. ниже', + 'create_new_budget' => 'Создать новый бюджет', + 'store_new_budget' => 'Сохранить новый бюджет', + 'stored_new_budget' => 'Новый бюджет ":name" сохранён', + 'available_between' => 'Доступно между :start и :end', + 'transactionsWithoutBudget' => 'Расходы вне бюджета', + 'transactions_no_budget' => 'Расходы вне бюджета между :start и :end', + 'spent_between' => 'Уже потрачено между :start и :end', + 'spent_between_left' => 'Потрачено :spent между :start и :end, осталось :left.', + 'set_available_amount' => 'Установить доступную сумму', + 'update_available_amount' => 'Обновить доступную сумму', + 'ab_basic_modal_explain' => 'Используйте эту форму, чтобы указать какой бюджет вы планируете (всего, в :currency) на указанный период.', + 'createBudget' => 'Новый бюджет', + 'invalid_currency' => 'Это неверная валюта', + 'invalid_amount' => 'Пожалуйста, введите сумму', + 'set_ab' => 'Доступная сумма бюджета была установлена', + 'updated_ab' => 'Доступная сумма бюджета была обновлена', + 'deleted_ab' => 'Доступная сумма бюджета была удалена', + 'deleted_bl' => 'Запланированная в бюджете сумма была удалена', + 'alt_currency_ab_create' => 'Установите доступный бюджет в другой валюте', + 'bl_create_btn' => 'Установите бюджет в другой валюте', + 'inactiveBudgets' => 'Неактивные бюджеты', + 'without_budget_between' => 'Транзакции вне бюджета между :start и :end', + 'delete_budget' => 'Удалить бюджет ":name"', + 'deleted_budget' => 'Бюджет ":name" удалён', + 'edit_budget' => 'Редактировать бюджет ":name"', + 'updated_budget' => 'Бюджет ":name" обновлён', + 'update_amount' => 'Обновить сумму', + 'update_budget' => 'Обновить бюджет', + 'update_budget_amount_range' => 'Обновить (ожидаемые) доступные средства между :start и :end', + 'set_budget_limit_title' => 'Установите сумму для :budget между :start и :end', + 'set_budget_limit' => 'Установите сумму в бюджете', + 'budget_period_navigator' => 'Навигация по периодам', + 'info_on_available_amount' => 'Сколько средств у меня есть?', + 'available_amount_indication' => 'Используйте эти суммы, чтобы узнать, каким может быть ваш суммарный бюджет.', + 'suggested' => 'Рекомендуемые', + 'average_between' => 'В среднем между :start и :end', + 'transferred_in' => 'Переведено (в)', + 'transferred_away' => 'Переведено (из)', + 'auto_budget_none' => 'Без автобюджета', + 'auto_budget_reset' => 'Задать фиксированную сумму на каждый период', + 'auto_budget_rollover' => 'Добавить сумму на каждый период', + 'auto_budget_adjusted' => 'Добавьте сумму каждого периода и скорректируйте перерасход', + 'auto_budget_period_daily' => 'Ежедневно', + 'auto_budget_period_weekly' => 'Еженедельно', + 'auto_budget_period_monthly' => 'Ежемесячно', + 'auto_budget_period_quarterly' => 'Ежеквартально', + 'auto_budget_period_half_year' => 'Раз в полгода', + 'auto_budget_period_yearly' => 'Каждый год', + 'auto_budget_help' => 'Подробнее об этой функции можно прочитать в справке. Щёлкните по значку (?) в правом верхнем углу.', + 'auto_budget_reset_icon' => 'Этот бюджет будет устанавливаться периодически', + 'auto_budget_rollover_icon' => 'Доступная в бюджете сумма будет периодически увеличиваться', + 'auto_budget_adjusted_icon' => 'Сумма бюджета будет периодически увеличиваться и будет скорректирована в случае перерасхода', + 'remove_budgeted_amount' => 'Удалить запланированную в бюджете сумму в :currency', // bills: - 'subscription' => 'Подписка', - 'not_expected_period' => 'Не ожидается в данном периоде', - 'subscriptions_in_group' => 'Подписки в группе "%{title}"', - 'subscr_expected_x_times' => 'Ожидается оплата %{amount} %{times} раз за этот период', - 'not_or_not_yet' => 'Нет (пока)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Сравнение транзакций по счетам к оплате между :low и :high.', - 'running_again_loss' => 'Транзакции, ранее привязанные к этому счёту на оплату, могут потерять связь, они (больше) не соответствуют правилу (правилам).', - 'bill_related_rules' => 'Правила, связанные с этим счётом на оплату', - 'repeats' => 'Повторы', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'Этот счет заканчивается :date', - 'bill_extension_index_line' => 'Этот счет должен быть продлен или отменен :date', - 'connected_journals' => 'Связанные транзакции', - 'auto_match_on' => 'Автоматически сверено Firefly III', - 'auto_match_off' => 'Не сверено автоматически Firefly III', - 'next_expected_match' => 'Следующая сверка ожидается', - 'delete_bill' => 'Удалить счёт к оплате ":name"', - 'deleted_bill' => 'Удаленный счёт к оплате ":name"', - 'edit_bill' => 'Отредактировать счёт к оплате ":name"', - 'more' => 'Больше', - 'rescan_old' => 'Выполнить правила снова, по всем транзакциям', - 'update_bill' => 'Обновить счёт на оплату', - 'updated_bill' => 'Счёт на оплату ":name" обновлён', - 'store_new_bill' => 'Сохранить новый счёт к оплате', - 'stored_new_bill' => 'Новый счёт к оплате ":name" сохранён', - 'cannot_scan_inactive_bill' => 'Неактивные счета не могут быть перепроверены.', - 'rescanned_bill' => 'Проверена :count транзакция, привязанная к этому счёту на оплату.|Проверены все :count транзакций, привязанных к этому счёту на оплату.', - 'average_bill_amount_year' => 'Средняя сумма счёта на оплату (:year)', - 'average_bill_amount_overall' => 'Средняя сумма счёта на оплату (за всё время)', - 'bill_is_active' => 'Счёт на оплату активен', - 'bill_expected_between' => 'Ожидается между :start и :end', - 'bill_will_automatch' => 'Счёт будет автоматически связан с подходящими транзакциями', - 'skips_over' => 'пропустить', - 'bill_store_error' => 'При создании вашего нового счёта на оплату произошла неожиданная ошибка. Пожалуйста, проверьте log-файлы', - 'list_inactive_rule' => 'неактивное правило', - 'bill_edit_rules' => 'Firefly III также попытается отредактировать правило, связанное с этим счётом на оплату. Однако, если вы сами отредактировали это правило, Firefly III ничего не изменит.|Firefly III также попытается отредактировать :count правил, связанных с этим счётом на оплату. Однако, если вы сами отредактировали эти правила, Firefly III ничего не изменит.', - 'bill_expected_date' => 'Истекает :date', - 'bill_expected_date_js' => 'Ожидаемая дата {date}', - 'expected_amount' => '(Ожидаемая) сумма', - 'bill_paid_on' => 'Оплачено {date}', - 'bill_repeats_weekly' => 'Повторяет еженедельно', - 'bill_repeats_monthly' => 'Повторять ежемесячно', - 'bill_repeats_quarterly' => 'Повторяет ежеквартально', - 'bill_repeats_half-year' => 'Повторяется раз в полгода', - 'bill_repeats_yearly' => 'Повторяется ежегодно', - 'bill_repeats_weekly_other' => 'Repeats every other week', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Повторяется ежегодно', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Подписки', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Всегда', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Подписка', + 'not_expected_period' => 'Не ожидается в данном периоде', + 'subscriptions_in_group' => 'Подписки в группе "%{title}"', + 'subscr_expected_x_times' => 'Ожидается оплата %{amount} %{times} раз за этот период', + 'not_or_not_yet' => 'Нет (пока)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Сравнение транзакций по счетам к оплате между :low и :high.', + 'running_again_loss' => 'Транзакции, ранее привязанные к этому счёту на оплату, могут потерять связь, они (больше) не соответствуют правилу (правилам).', + 'bill_related_rules' => 'Правила, связанные с этим счётом на оплату', + 'repeats' => 'Повторы', + 'bill_end_date_help' => 'Необязательное поле. Счет должен быть завершен на эту дату.', + 'bill_extension_date_help' => 'Необязательное поле. Счет должен быть продлен (или отменен) на или до этой даты.', + 'bill_end_index_line' => 'Этот счет заканчивается :date', + 'bill_extension_index_line' => 'Этот счет должен быть продлен или отменен :date', + 'connected_journals' => 'Связанные транзакции', + 'auto_match_on' => 'Автоматически сверено Firefly III', + 'auto_match_off' => 'Не сверено автоматически Firefly III', + 'next_expected_match' => 'Следующая сверка ожидается', + 'delete_bill' => 'Удалить счёт к оплате ":name"', + 'deleted_bill' => 'Удаленный счёт к оплате ":name"', + 'edit_bill' => 'Отредактировать счёт к оплате ":name"', + 'more' => 'Больше', + 'rescan_old' => 'Выполнить правила снова, по всем транзакциям', + 'update_bill' => 'Обновить счёт на оплату', + 'updated_bill' => 'Счёт на оплату ":name" обновлён', + 'store_new_bill' => 'Сохранить новый счёт к оплате', + 'stored_new_bill' => 'Новый счёт к оплате ":name" сохранён', + 'cannot_scan_inactive_bill' => 'Неактивные счета не могут быть перепроверены.', + 'rescanned_bill' => 'Проверена :count транзакция, привязанная к этому счёту на оплату.|Проверены все :count транзакций, привязанных к этому счёту на оплату.', + 'average_bill_amount_year' => 'Средняя сумма счёта на оплату (:year)', + 'average_bill_amount_overall' => 'Средняя сумма счёта на оплату (за всё время)', + 'bill_is_active' => 'Счёт на оплату активен', + 'bill_expected_between' => 'Ожидается между :start и :end', + 'bill_will_automatch' => 'Счёт будет автоматически связан с подходящими транзакциями', + 'skips_over' => 'пропустить', + 'bill_store_error' => 'При создании вашего нового счёта на оплату произошла неожиданная ошибка. Пожалуйста, проверьте log-файлы', + 'list_inactive_rule' => 'неактивное правило', + 'bill_edit_rules' => 'Firefly III также попытается отредактировать правило, связанное с этим счётом на оплату. Однако, если вы сами отредактировали это правило, Firefly III ничего не изменит.|Firefly III также попытается отредактировать :count правил, связанных с этим счётом на оплату. Однако, если вы сами отредактировали эти правила, Firefly III ничего не изменит.', + 'bill_expected_date' => 'Истекает :date', + 'bill_expected_date_js' => 'Ожидаемая дата {date}', + 'expected_amount' => '(Ожидаемая) сумма', + 'bill_paid_on' => 'Оплачено {date}', + 'bill_repeats_weekly' => 'Повторяет еженедельно', + 'bill_repeats_monthly' => 'Повторять ежемесячно', + 'bill_repeats_quarterly' => 'Повторяет ежеквартально', + 'bill_repeats_half-year' => 'Повторяется раз в полгода', + 'bill_repeats_yearly' => 'Повторяется ежегодно', + 'bill_repeats_weekly_other' => 'Повторяется каждую неделю', + 'bill_repeats_monthly_other' => 'Повторяется каждый месяц', + 'bill_repeats_quarterly_other' => 'Повторяется каждый квартал', + 'bill_repeats_half-year_other' => 'Повторяется ежегодно', + 'bill_repeats_yearly_other' => 'Повторяется каждый год', + 'bill_repeats_weekly_skip' => 'Повторяется каждую {skip} неделю', + 'bill_repeats_monthly_skip' => 'Повторяется каждый {skip} месяц', + 'bill_repeats_quarterly_skip' => 'Повторяется каждый {skip} квартал', + 'bill_repeats_half-year_skip' => 'Повторяется каждые {skip} полгода', + 'bill_repeats_yearly_skip' => 'Повторяется каждые {skip} года', + 'subscriptions' => 'Подписки', + 'go_to_subscriptions' => 'Перейти к вашим подпискам', + 'forever' => 'Всегда', + 'extension_date_is' => 'Дата расширения {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'У вас :count неактивный (архивный) счёт, который вы можете увидеть на этой отдельной странице.|У вас :count неактивных (архивных) счетов, которые вы можете увидеть на этой отдельной странице.', - 'all_accounts_inactive' => 'Это ваши неактивные счета.', - 'active_account_link' => 'Эта ссылка вернёт вас к вашим активным счетам.', - 'account_missing_transaction' => 'Счёт #:id (":name") невозможно просмотреть напрямую, и у Firefly нет информации для перенаправления.', - 'cc_monthly_payment_date_help' => 'Выберите любой год и любой месяц, он будет проигнорирован в любом случае. Только день месяца является актуальным.', - 'details_for_asset' => 'Детали по основному счёту ":name"', - 'details_for_expense' => 'Детали по счёту расходов ":name"', - 'details_for_revenue' => 'Детали по счёту доходов ":name"', - 'details_for_cash' => 'Детали по наличному счёту ":name"', - 'store_new_asset_account' => 'Сохранить новый основной счёт', - 'store_new_expense_account' => 'Сохранить новый счёт расхода', - 'store_new_revenue_account' => 'Сохранить новый счёт дохода', - 'edit_asset_account' => 'Изменить основной счёт ":name"', - 'edit_expense_account' => 'Изменить счёт расходов ":name"', - 'edit_revenue_account' => 'Изменить счёт доходов ":name"', - 'delete_asset_account' => 'Удалить основной счёт ":name"', - 'delete_expense_account' => 'Удалить счёт расходов ":name"', - 'delete_revenue_account' => 'Удалить счёт доходов ":name"', - 'delete_liabilities_account' => 'Удалить долговой счёт ":name"', - 'asset_deleted' => 'Основной счёт ":name" успешно удалён', - 'account_deleted' => 'Successfully deleted account ":name"', - 'expense_deleted' => 'Счёт расхода ":name" успешно удалён', - 'revenue_deleted' => 'Счёт дохода ":name" успешно удалён', - 'update_asset_account' => 'Обновить основной счёт', - 'update_undefined_account' => 'Обновить учётную запись', - 'update_liabilities_account' => 'Обновить долговой счёт', - 'update_expense_account' => 'Обновить счёт расхода', - 'update_revenue_account' => 'Обновить счёт дохода', - 'make_new_asset_account' => 'Создать новый основной счёт', - 'make_new_expense_account' => 'Создать новый счёт расхода', - 'make_new_revenue_account' => 'Создать новый счёт дохода', - 'make_new_liabilities_account' => 'Создать новый долговой счёт', - 'asset_accounts' => 'Основные счета', - 'undefined_accounts' => 'Учётные записи', - 'asset_accounts_inactive' => 'Основной счёт (неактивный)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Счета расходов', - 'expense_accounts_inactive' => 'Счёт расходов (неактивный)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Счета доходов', - 'revenue_accounts_inactive' => 'Счёт доходов (неактивный)', - 'cash_accounts' => 'Наличные деньги', - 'Cash account' => 'Наличные деньги', - 'liabilities_accounts' => 'Долги', - 'liabilities_accounts_inactive' => 'Долги (неактивные)', - 'reconcile_account' => 'Сверка счёта ":account"', - 'overview_of_reconcile_modal' => 'Обзор сверки', - 'delete_reconciliation' => 'Удалить сверку', - 'update_reconciliation' => 'Обновить сверку', - 'amount_cannot_be_zero' => 'Сумма не может быть равна нулю', - 'end_of_reconcile_period' => 'Конец периода сверки: :period', - 'start_of_reconcile_period' => 'Начало периода сверки: :period', - 'start_balance' => 'Начальный баланс', - 'end_balance' => 'Конечный баланс', - 'update_balance_dates_instruction' => 'Сверьте суммы и даты, указанные выше, со своей банковской выпиской и нажмите «Начать сверку»', - 'select_transactions_instruction' => 'Выберите транзакции, которые отражены в выписке с вашего банковского счёта.', - 'select_range_and_balance' => 'Сначала проверьте диапазон дат и балансы. Затем нажмите «Начать сверку»', - 'date_change_instruction' => 'Если вы измените диапазон дат сейчас, текущий прогресс будет потерян.', - 'update_selection' => 'Обновить выбранное', - 'store_reconcile' => 'Сохранить сверку', - 'reconciliation_transaction' => 'Сверка транзакции', - 'Reconciliation' => 'Сверка', - 'reconciliation' => 'Сверка', - 'reconcile_options' => 'Параметры сверки', - 'reconcile_range' => 'Диапазон сверки', - 'start_reconcile' => 'Начать сверку', - 'cash_account_type' => 'Наличные', - 'cash' => 'наличные', - 'cant_find_redirect_account' => 'Firefly III попытался перенаправить вас, но не смог. Извините. Вернуться на главную страницу.', - 'account_type' => 'Тип счёта', - 'save_transactions_by_moving' => 'Сохраните эту транзакцию, переместив её на другой счёт:|Сохраните эти транзакции, переместив их на другой счёт:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'Новый счёт ":name" сохранён!', - 'stored_new_account_js' => 'Новыая учётная запись "{name}" сохранена!', - 'updated_account' => 'Обновить счёт ":name"', - 'updated_account_js' => 'Обновлена учетная запись "{title}".', - 'credit_card_options' => 'Параметры кредитной карты', - 'no_transactions_account' => 'Для основного счёта ":name" нет транзакций (в этом периоде).', - 'no_transactions_period' => 'Нет транзакций (в этот период).', - 'no_data_for_chart' => 'Недостаточно информации (пока) для построения этой диаграммы.', - 'select_at_least_one_account' => 'Выберите хотя бы один счёт', - 'select_at_least_one_category' => 'Пожалуйста, выберите по крайней мере одну категорию', - 'select_at_least_one_budget' => 'Пожалуйста, выберите по крайней мере один бюджет', - 'select_at_least_one_tag' => 'Пожалуйста, выберите по крайней мере одну метку', - 'select_at_least_one_expense' => 'Пожалуйста, выберите хотя бы одну комбинацию счетов расходов/доходов. Если их у вас нет (список пуст), данный отчёт недоступен.', - 'account_default_currency' => 'С этим счётом будет связана валюта по умолчанию.', - 'reconcile_has_more' => 'В вашей бухгалтерской книге Firefly III учтено больше денег, чем должно быть, согласно выписке из банка. Существует несколько вариантов. Пожалуйста, выберите, что делать, а затем нажмите «Подтвердить сверку».', - 'reconcile_has_less' => 'В вашей бухгалтерской книге Firefly III учтено меньше денег, чем должно быть, согласно выписке из банка. Существует несколько вариантов. Пожалуйста, выберите, что делать, а затем нажмите «Подтвердить сверку».', - 'reconcile_is_equal' => 'Ваша бухгалтерская книга Firefly III и ваши банковские выписки совпадают. Ничего делать не нужно. Пожалуйста, нажмите «Подтвердить сверку» для ввода данных.', - 'create_pos_reconcile_transaction' => 'Удалить выбранные транзакции и создать корректировку, добавляющую сумму :amount к этому основному счёту.', - 'create_neg_reconcile_transaction' => 'Удалить выбранные транзакции и создать корректировку, удаляющую сумму :amount с этого основного счёта.', - 'reconcile_do_nothing' => 'Удалить выбранные транзакции, но не производить корректировку.', - 'reconcile_go_back' => 'Вы сможете изменить или удалить корректировку позже.', - 'must_be_asset_account' => 'Вы можете производить сверку только для основных счётов', - 'reconciliation_stored' => 'Сверка сохранена', - 'reconciliation_error' => 'Из-за ошибки транзакции были помечены как сверенные, но коррекция не была сохранена: :error.', - 'reconciliation_transaction_title' => 'Сверка (с :from по :to)', - 'sum_of_reconciliation' => 'Сумма по сверке', - 'reconcile_this_account' => 'Произвести сверку данного счёта', - 'reconcile' => 'Сверить', - 'show' => 'Показать', - 'confirm_reconciliation' => 'Подтвердить сверку', - 'submitted_start_balance' => 'Подтверждённый начальный баланс', - 'selected_transactions' => 'Выбранный транзакции (:count)', - 'already_cleared_transactions' => 'Уже удалённые транзакции (:count)', - 'submitted_end_balance' => 'Подтверждённый конечный баланс', - 'initial_balance_description' => 'Начальный баланс для ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'неизвестно', - 'interest_calc_daily' => 'В день', - 'interest_calc_monthly' => 'В месяц', - 'interest_calc_yearly' => 'В год', - 'interest_calc_weekly' => 'За неделю', - 'interest_calc_half-year' => 'За полгода', - 'interest_calc_quarterly' => 'За квартал', - 'initial_balance_account' => 'Начальный баланс для счёта :account', - 'list_options' => 'Список настроек', + 'i_am_owed_amount' => 'Мне должны сумму', + 'i_owe_amount' => 'Я должен сумму', + 'inactive_account_link' => 'У вас :count неактивный (архивный) счёт, который вы можете увидеть на этой отдельной странице.|У вас :count неактивных (архивных) счетов, которые вы можете увидеть на этой отдельной странице.', + 'all_accounts_inactive' => 'Это ваши неактивные счета.', + 'active_account_link' => 'Эта ссылка вернёт вас к вашим активным счетам.', + 'account_missing_transaction' => 'Счёт #:id (":name") невозможно просмотреть напрямую, и у Firefly нет информации для перенаправления.', + 'cc_monthly_payment_date_help' => 'Выберите любой год и любой месяц, он будет проигнорирован в любом случае. Только день месяца является актуальным.', + 'details_for_asset' => 'Детали по основному счёту ":name"', + 'details_for_expense' => 'Детали по счёту расходов ":name"', + 'details_for_revenue' => 'Детали по счёту доходов ":name"', + 'details_for_cash' => 'Детали по наличному счёту ":name"', + 'store_new_asset_account' => 'Сохранить новый основной счёт', + 'store_new_expense_account' => 'Сохранить новый счёт расхода', + 'store_new_revenue_account' => 'Сохранить новый счёт дохода', + 'edit_asset_account' => 'Изменить основной счёт ":name"', + 'edit_expense_account' => 'Изменить счёт расходов ":name"', + 'edit_revenue_account' => 'Изменить счёт доходов ":name"', + 'delete_asset_account' => 'Удалить основной счёт ":name"', + 'delete_expense_account' => 'Удалить счёт расходов ":name"', + 'delete_revenue_account' => 'Удалить счёт доходов ":name"', + 'delete_liabilities_account' => 'Удалить долговой счёт ":name"', + 'asset_deleted' => 'Основной счёт ":name" успешно удалён', + 'account_deleted' => 'Счёт ":name" успешно удалён', + 'expense_deleted' => 'Счёт расхода ":name" успешно удалён', + 'revenue_deleted' => 'Счёт дохода ":name" успешно удалён', + 'update_asset_account' => 'Обновить основной счёт', + 'update_undefined_account' => 'Обновить учётную запись', + 'update_liabilities_account' => 'Обновить долговой счёт', + 'update_expense_account' => 'Обновить счёт расхода', + 'update_revenue_account' => 'Обновить счёт дохода', + 'make_new_asset_account' => 'Создать новый основной счёт', + 'make_new_expense_account' => 'Создать новый счёт расхода', + 'make_new_revenue_account' => 'Создать новый счёт дохода', + 'make_new_liabilities_account' => 'Создать новый долговой счёт', + 'asset_accounts' => 'Основные счета', + 'undefined_accounts' => 'Учётные записи', + 'asset_accounts_inactive' => 'Основной счёт (неактивный)', + 'expense_account' => 'Счет расходов', + 'expense_accounts' => 'Счета расходов', + 'expense_accounts_inactive' => 'Счёт расходов (неактивный)', + 'revenue_account' => 'Счет доходов', + 'revenue_accounts' => 'Счета доходов', + 'revenue_accounts_inactive' => 'Счёт доходов (неактивный)', + 'cash_accounts' => 'Наличные деньги', + 'Cash account' => 'Наличные деньги', + 'liabilities_accounts' => 'Долги', + 'liabilities_accounts_inactive' => 'Долги (неактивные)', + 'reconcile_account' => 'Сверка счёта ":account"', + 'overview_of_reconcile_modal' => 'Обзор сверки', + 'delete_reconciliation' => 'Удалить сверку', + 'update_reconciliation' => 'Обновить сверку', + 'amount_cannot_be_zero' => 'Сумма не может быть равна нулю', + 'end_of_reconcile_period' => 'Конец периода сверки: :period', + 'start_of_reconcile_period' => 'Начало периода сверки: :period', + 'start_balance' => 'Начальный баланс', + 'end_balance' => 'Конечный баланс', + 'update_balance_dates_instruction' => 'Сверьте суммы и даты, указанные выше, со своей банковской выпиской и нажмите «Начать сверку»', + 'select_transactions_instruction' => 'Выберите транзакции, которые отражены в выписке с вашего банковского счёта.', + 'select_range_and_balance' => 'Сначала проверьте диапазон дат и балансы. Затем нажмите «Начать сверку»', + 'date_change_instruction' => 'Если вы измените диапазон дат сейчас, текущий прогресс будет потерян.', + 'update_selection' => 'Обновить выбранное', + 'store_reconcile' => 'Сохранить сверку', + 'reconciliation_transaction' => 'Сверка транзакции', + 'Reconciliation' => 'Сверка', + 'reconciliation' => 'Сверка', + 'reconcile_options' => 'Параметры сверки', + 'reconcile_range' => 'Диапазон сверки', + 'start_reconcile' => 'Начать сверку', + 'cash_account_type' => 'Наличные', + 'cash' => 'наличные', + 'cant_find_redirect_account' => 'Firefly III попытался перенаправить вас, но не смог. Извините. Вернуться на главную страницу.', + 'account_type' => 'Тип счёта', + 'save_transactions_by_moving' => 'Сохраните эту транзакцию, переместив её на другой счёт:|Сохраните эти транзакции, переместив их на другой счёт:', + 'save_transactions_by_moving_js' => 'Нет транзакций|Сохраните эту транзакцию, переместив ее на другой счет. |Сохраните эти транзакции, переместив их на другой счет.', + 'stored_new_account' => 'Новый счёт ":name" сохранён!', + 'stored_new_account_js' => 'Новыая учётная запись "{name}" сохранена!', + 'updated_account' => 'Обновить счёт ":name"', + 'updated_account_js' => 'Обновлена учетная запись "{title}".', + 'credit_card_options' => 'Параметры кредитной карты', + 'no_transactions_account' => 'Для основного счёта ":name" нет транзакций (в этом периоде).', + 'no_transactions_period' => 'Нет транзакций (в этот период).', + 'no_data_for_chart' => 'Недостаточно информации (пока) для построения этой диаграммы.', + 'select_at_least_one_account' => 'Выберите хотя бы один счёт', + 'select_at_least_one_category' => 'Пожалуйста, выберите по крайней мере одну категорию', + 'select_at_least_one_budget' => 'Пожалуйста, выберите по крайней мере один бюджет', + 'select_at_least_one_tag' => 'Пожалуйста, выберите по крайней мере одну метку', + 'select_at_least_one_expense' => 'Пожалуйста, выберите хотя бы одну комбинацию счетов расходов/доходов. Если их у вас нет (список пуст), данный отчёт недоступен.', + 'account_default_currency' => 'С этим счётом будет связана валюта по умолчанию.', + 'reconcile_has_more' => 'В вашей бухгалтерской книге Firefly III учтено больше денег, чем должно быть, согласно выписке из банка. Существует несколько вариантов. Пожалуйста, выберите, что делать, а затем нажмите «Подтвердить сверку».', + 'reconcile_has_less' => 'В вашей бухгалтерской книге Firefly III учтено меньше денег, чем должно быть, согласно выписке из банка. Существует несколько вариантов. Пожалуйста, выберите, что делать, а затем нажмите «Подтвердить сверку».', + 'reconcile_is_equal' => 'Ваша бухгалтерская книга Firefly III и ваши банковские выписки совпадают. Ничего делать не нужно. Пожалуйста, нажмите «Подтвердить сверку» для ввода данных.', + 'create_pos_reconcile_transaction' => 'Удалить выбранные транзакции и создать корректировку, добавляющую сумму :amount к этому основному счёту.', + 'create_neg_reconcile_transaction' => 'Удалить выбранные транзакции и создать корректировку, удаляющую сумму :amount с этого основного счёта.', + 'reconcile_do_nothing' => 'Удалить выбранные транзакции, но не производить корректировку.', + 'reconcile_go_back' => 'Вы сможете изменить или удалить корректировку позже.', + 'must_be_asset_account' => 'Вы можете производить сверку только для основных счётов', + 'reconciliation_stored' => 'Сверка сохранена', + 'reconciliation_error' => 'Из-за ошибки транзакции были помечены как сверенные, но коррекция не была сохранена: :error.', + 'reconciliation_transaction_title' => 'Сверка (с :from по :to)', + 'sum_of_reconciliation' => 'Сумма по сверке', + 'reconcile_this_account' => 'Произвести сверку данного счёта', + 'reconcile' => 'Сверить', + 'show' => 'Показать', + 'confirm_reconciliation' => 'Подтвердить сверку', + 'submitted_start_balance' => 'Подтверждённый начальный баланс', + 'selected_transactions' => 'Выбранный транзакции (:count)', + 'already_cleared_transactions' => 'Уже удалённые транзакции (:count)', + 'submitted_end_balance' => 'Подтверждённый конечный баланс', + 'initial_balance_description' => 'Начальный баланс для ":account"', + 'liability_credit_description' => 'Кредитное обязательство по ":account"', + 'interest_calc_' => 'неизвестно', + 'interest_calc_daily' => 'В день', + 'interest_calc_monthly' => 'В месяц', + 'interest_calc_yearly' => 'В год', + 'interest_calc_weekly' => 'За неделю', + 'interest_calc_half-year' => 'За полгода', + 'interest_calc_quarterly' => 'За квартал', + 'initial_balance_account' => 'Начальный баланс для счёта :account', + 'list_options' => 'Список настроек', // categories: - 'new_category' => 'Новая категория', - 'create_new_category' => 'Создать новую категорию', - 'without_category' => 'Без категории', - 'update_category' => 'Обновить категорию', - 'updated_category' => 'Обновить категорию ":name"', - 'categories' => 'Категории', - 'edit_category' => 'Изменить категорию ":name"', - 'no_category' => '(без категории)', - 'unknown_category_plain' => 'No category', - 'category' => 'Категория', - 'delete_category' => 'Удалить категорию ":name"', - 'deleted_category' => 'Удалить категорию ":name"', - 'store_category' => 'Сохранить новую категорию', - 'stored_category' => 'Новая категория ":name" успешно сохранена!', - 'without_category_between' => 'Без категории между :start и :end', + 'new_category' => 'Новая категория', + 'create_new_category' => 'Создать новую категорию', + 'without_category' => 'Без категории', + 'update_category' => 'Обновить категорию', + 'updated_category' => 'Обновить категорию ":name"', + 'categories' => 'Категории', + 'edit_category' => 'Изменить категорию ":name"', + 'no_category' => '(без категории)', + 'unknown_category_plain' => 'Без категории', + 'category' => 'Категория', + 'delete_category' => 'Удалить категорию ":name"', + 'deleted_category' => 'Удалить категорию ":name"', + 'store_category' => 'Сохранить новую категорию', + 'stored_category' => 'Новая категория ":name" успешно сохранена!', + 'without_category_between' => 'Без категории между :start и :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Обновить расход', - 'update_deposit' => 'Обновить доход', - 'update_transaction' => 'Обновить транзакцию', - 'update_transfer' => 'Обновить перевод', - 'updated_withdrawal' => 'Расход ":description" обновлён', - 'updated_deposit' => 'Доход ":description" обновлён', - 'updated_transfer' => 'Перевод ":description" обновлён', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Перевод ":description" не был изменен.', - 'delete_withdrawal' => 'Удалить расход ":description"', - 'delete_deposit' => 'Удалить доход ":description"', - 'delete_transfer' => 'Удалить перевод ":description"', - 'deleted_withdrawal' => 'Расход ":description" успешно удалён', - 'deleted_deposit' => 'Доход ":description" успешно удалён', - 'deleted_transfer' => 'Перевод ":description" успешно удалён', - 'deleted_reconciliation' => 'Сверенная транзакция ":description" успешно удалена', - 'stored_journal' => 'Новая транзакция ":description" успешно создана', - 'stored_journal_no_descr' => 'Ваша новая транзакция успешно создана', - 'updated_journal_no_descr' => 'Ваша транзакция успешно обновлена', - 'select_transactions' => 'Выбрать транзакции', - 'rule_group_select_transactions' => 'Применить ":title" к транзакциям', - 'rule_select_transactions' => 'Применить ":title" к транзакциям', - 'stop_selection' => 'Завершить выбор транзакций', - 'reconcile_selected' => 'Сверить', - 'mass_delete_journals' => 'Удалить несколько транзакций', - 'mass_edit_journals' => 'Изменить несколько транзакций', - 'mass_bulk_journals' => 'Массовое изменение нескольких транзакций', - 'mass_bulk_journals_explain' => 'Эта форма позволяет массово изменять свойства всех транзакций, перечисленных ниже. Все транзакции в таблице будут обновлены с учётом новых параметров, которые вы видите здесь.', - 'part_of_split' => 'Эта транзакция является частью разделённой транзакции. Если вы выбрали не все части, то можете изменить только половину транзакции.', - 'bulk_set_new_values' => 'Используйте эти поля для ввода новых значений. Если вы оставите их пустыми, они будут очищены у всех записей. Также обратите внимание, что бюджет будет сопоставлен только с расходами.', - 'no_bulk_category' => 'Не обновлять категорию', - 'no_bulk_budget' => 'Не обновлять бюджет', - 'no_bulk_tags' => 'Не обновлять метки', - 'replace_with_these_tags' => 'Заменить этими метками', - 'append_these_tags' => 'Добавить эти метки', - 'mass_edit' => 'Изменить выбранные по отдельности', - 'bulk_edit' => 'Изменить выбранную группу', - 'mass_delete' => 'Удалить выбранные', - 'cannot_edit_other_fields' => 'Вы не можете массово редактировать другие поля, кроме тех, которые видите здесь, поскольку для их отображения недостаточно места. Пожалуйста, перейдите по ссылке и отредактируйте их по одной, если вам нужно изменить такие поля.', - 'cannot_change_amount_reconciled' => 'Вы не можете изменить сумму по сверенным транзакциям.', - 'no_budget' => '(вне бюджета)', - 'no_bill' => '(нет счёта на оплату)', - 'account_per_budget' => 'Счёт в бюджете', - 'account_per_category' => 'Счёт по категории', - 'create_new_object' => 'Создать', - 'empty' => '(пусто)', - 'all_other_budgets' => '(все остальные бюджеты)', - 'all_other_accounts' => '(все остальные счета)', - 'expense_per_source_account' => 'Расходы по счёту-источнику', - 'expense_per_destination_account' => 'Расходы по счёту назначения', - 'income_per_destination_account' => 'Доходы по счёту назначения', - 'spent_in_specific_category' => 'Расходы по категории ":category"', - 'earned_in_specific_category' => 'Доходы по категории ":category"', - 'spent_in_specific_tag' => 'Расходы с меткой ":tag"', - 'earned_in_specific_tag' => 'Доходы с меткой ":tag"', - 'income_per_source_account' => 'Доход на счёт-источник', - 'average_spending_per_destination' => 'Средний расход по счёту-источнику', - 'average_spending_per_source' => 'Средний расход по счёту-источнику', - 'average_earning_per_source' => 'Средний доход по счёту-источнику', - 'average_earning_per_destination' => 'Средний доход по счёту назначения', - 'account_per_tag' => 'Счёт по метку', - 'tag_report_expenses_listed_once' => 'Расходы и доходы никогда не отображаются дважды. Если транзакция имеет несколько меток, она может отображаться только с одной из них. Может показаться, что диаграмма не отображает часть данных, но суммы будут правильной.', - 'double_report_expenses_charted_once' => 'Расходы и доходы никогда не отображаются дважды. Если транзакция имеет несколько меток, она может отображаться только с одной из них. Может показаться, что диаграмма не отображает часть данных, но суммы будут правильной.', - 'tag_report_chart_single_tag' => 'Эта диаграмма отображает данные для одной метки. Если транзакция имеет несколько меток, эти же самые данные могут быть отражены в диаграммах других меток.', - 'tag' => 'Метка', - 'no_budget_squared' => '(вне бюджета)', - 'perm-delete-many' => 'Удаление нескольких элементов за один раз может быть очень разрушительным. Пожалуйста, будьте осторожны. Например, вы можете удалить часть разделённой транзакции, видиму на этой странице.', - 'mass_deleted_transactions_success' => 'Удалена :count транзакция.|Удалено :count транзакций.', - 'mass_edited_transactions_success' => 'Обновлена :count транзакция.|Обновлено :count транзакций.', - 'opt_group_' => '(нет типа счёта)', - 'opt_group_no_account_type' => '(нет типа счёта)', - 'opt_group_defaultAsset' => 'Основные счета по умолчанию', - 'opt_group_savingAsset' => 'Сберегательные счета', - 'opt_group_sharedAsset' => 'Общие основные счета', - 'opt_group_ccAsset' => 'Кредитные карты', - 'opt_group_cashWalletAsset' => 'Кошельки с наличными', - 'opt_group_expense_account' => 'Счета расходов', - 'opt_group_revenue_account' => 'Счета доходов', - 'opt_group_l_Loan' => 'Долги (кредит)', - 'opt_group_cash_account' => 'Наличные деньги', - 'opt_group_l_Debt' => 'Долги (дебит)', - 'opt_group_l_Mortgage' => 'Долги (ипотека)', - 'opt_group_l_Credit card' => 'Долги (кредитная карта)', - 'notes' => 'Заметки', - 'unknown_journal_error' => 'Не удалось сохранить транзакцию. Пожалуйста, проверьте log-файлы.', - 'attachment_not_found' => 'Вложение не найдено.', - 'journal_link_bill' => 'Эта транзакция связана со счётом на оплату :name. Чтобы удалить эту связь, снимите галочку. Используйте правила для связи с другим счётом на оплату.', - 'transaction_stored_link' => 'Транзакция #{ID} ("{title}") сохранена.', - 'transaction_new_stored_link' => 'Транзакция #{ID} сохранена.', - 'transaction_updated_link' => 'Транзакция #{ID} ("{title}") обновлена.', - 'transaction_updated_no_changes' => 'Транзакция #{ID} ("{title}") не изменилась.', - 'first_split_decides' => 'В данном поле используется значение из первой части разделенной транзакции', - 'first_split_overrules_source' => 'Значение из первой части транзакции может изменить счет источника', - 'first_split_overrules_destination' => 'Значение из первой части транзакции может изменить счет назначения', - 'spent_x_of_y' => 'Потрачено {amount} из {total}', + 'wait_loading_transaction' => 'Дождитесь загрузки формы', + 'wait_loading_data' => 'Пожалуйста, дождитесь загрузки вашей информации...', + 'wait_attachments' => 'Пожалуйста, дождитесь загрузки вложений.', + 'errors_upload' => 'Загрузка не удалась. Пожалуйста, проверьте консоль вашего браузера на наличие ошибки.', + 'amount_foreign_if' => 'Сумма в иностранной валюте, если таковая имеется', + 'amount_destination_account' => 'Сумма в валюте счета назначения', + 'edit_transaction_title' => 'Редактировать транзакцию ":description"', + 'unreconcile' => 'Отменить сверку', + 'update_withdrawal' => 'Обновить расход', + 'update_deposit' => 'Обновить доход', + 'update_transaction' => 'Обновить транзакцию', + 'update_transfer' => 'Обновить перевод', + 'updated_withdrawal' => 'Расход ":description" обновлён', + 'updated_deposit' => 'Доход ":description" обновлён', + 'updated_transfer' => 'Перевод ":description" обновлён', + 'no_changes_withdrawal' => 'Расход ":description" не был изменен.', + 'no_changes_deposit' => 'Доход ":description" не был изменен.', + 'no_changes_transfer' => 'Перевод ":description" не был изменен.', + 'delete_withdrawal' => 'Удалить расход ":description"', + 'delete_deposit' => 'Удалить доход ":description"', + 'delete_transfer' => 'Удалить перевод ":description"', + 'deleted_withdrawal' => 'Расход ":description" успешно удалён', + 'deleted_deposit' => 'Доход ":description" успешно удалён', + 'deleted_transfer' => 'Перевод ":description" успешно удалён', + 'deleted_reconciliation' => 'Сверенная транзакция ":description" успешно удалена', + 'stored_journal' => 'Новая транзакция ":description" успешно создана', + 'stored_journal_js' => 'Новая транзакция "%{description}" успешно создана', + 'stored_journal_no_descr' => 'Ваша новая транзакция успешно создана', + 'updated_journal_no_descr' => 'Ваша транзакция успешно обновлена', + 'select_transactions' => 'Выбрать транзакции', + 'rule_group_select_transactions' => 'Применить ":title" к транзакциям', + 'rule_select_transactions' => 'Применить ":title" к транзакциям', + 'stop_selection' => 'Завершить выбор транзакций', + 'reconcile_selected' => 'Сверить', + 'mass_delete_journals' => 'Удалить несколько транзакций', + 'mass_edit_journals' => 'Изменить несколько транзакций', + 'mass_bulk_journals' => 'Массовое изменение нескольких транзакций', + 'mass_bulk_journals_explain' => 'Эта форма позволяет массово изменять свойства всех транзакций, перечисленных ниже. Все транзакции в таблице будут обновлены с учётом новых параметров, которые вы видите здесь.', + 'part_of_split' => 'Эта транзакция является частью разделённой транзакции. Если вы выбрали не все части, то можете изменить только половину транзакции.', + 'bulk_set_new_values' => 'Используйте эти поля для ввода новых значений. Если вы оставите их пустыми, они будут очищены у всех записей. Также обратите внимание, что бюджет будет сопоставлен только с расходами.', + 'no_bulk_category' => 'Не обновлять категорию', + 'no_bulk_budget' => 'Не обновлять бюджет', + 'no_bulk_tags' => 'Не обновлять метки', + 'replace_with_these_tags' => 'Заменить этими метками', + 'append_these_tags' => 'Добавить эти метки', + 'mass_edit' => 'Изменить выбранные по отдельности', + 'bulk_edit' => 'Изменить выбранную группу', + 'mass_delete' => 'Удалить выбранные', + 'cannot_edit_other_fields' => 'Вы не можете массово редактировать другие поля, кроме тех, которые видите здесь, поскольку для их отображения недостаточно места. Пожалуйста, перейдите по ссылке и отредактируйте их по одной, если вам нужно изменить такие поля.', + 'cannot_change_amount_reconciled' => 'Вы не можете изменить сумму по сверенным транзакциям.', + 'no_budget' => '(вне бюджета)', + 'no_bill' => '(нет счёта на оплату)', + 'account_per_budget' => 'Счёт в бюджете', + 'account_per_category' => 'Счёт по категории', + 'create_new_object' => 'Создать', + 'empty' => '(пусто)', + 'all_other_budgets' => '(все остальные бюджеты)', + 'all_other_accounts' => '(все остальные счета)', + 'expense_per_source_account' => 'Расходы по счёту-источнику', + 'expense_per_destination_account' => 'Расходы по счёту назначения', + 'income_per_destination_account' => 'Доходы по счёту назначения', + 'spent_in_specific_category' => 'Расходы по категории ":category"', + 'earned_in_specific_category' => 'Доходы по категории ":category"', + 'spent_in_specific_tag' => 'Расходы с меткой ":tag"', + 'earned_in_specific_tag' => 'Доходы с меткой ":tag"', + 'income_per_source_account' => 'Доход на счёт-источник', + 'average_spending_per_destination' => 'Средний расход по счёту-источнику', + 'average_spending_per_source' => 'Средний расход по счёту-источнику', + 'average_earning_per_source' => 'Средний доход по счёту-источнику', + 'average_earning_per_destination' => 'Средний доход по счёту назначения', + 'account_per_tag' => 'Счёт по метку', + 'tag_report_expenses_listed_once' => 'Расходы и доходы никогда не отображаются дважды. Если транзакция имеет несколько меток, она может отображаться только с одной из них. Может показаться, что диаграмма не отображает часть данных, но суммы будут правильной.', + 'double_report_expenses_charted_once' => 'Расходы и доходы никогда не отображаются дважды. Если транзакция имеет несколько меток, она может отображаться только с одной из них. Может показаться, что диаграмма не отображает часть данных, но суммы будут правильной.', + 'tag_report_chart_single_tag' => 'Эта диаграмма отображает данные для одной метки. Если транзакция имеет несколько меток, эти же самые данные могут быть отражены в диаграммах других меток.', + 'tag' => 'Метка', + 'no_budget_squared' => '(вне бюджета)', + 'perm-delete-many' => 'Удаление нескольких элементов за один раз может быть очень разрушительным. Пожалуйста, будьте осторожны. Например, вы можете удалить часть разделённой транзакции, видиму на этой странице.', + 'mass_deleted_transactions_success' => 'Удалена :count транзакция.|Удалено :count транзакций.', + 'mass_edited_transactions_success' => 'Обновлена :count транзакция.|Обновлено :count транзакций.', + 'opt_group_' => '(нет типа счёта)', + 'opt_group_no_account_type' => '(нет типа счёта)', + 'opt_group_defaultAsset' => 'Основные счета по умолчанию', + 'opt_group_savingAsset' => 'Сберегательные счета', + 'opt_group_sharedAsset' => 'Общие основные счета', + 'opt_group_ccAsset' => 'Кредитные карты', + 'opt_group_cashWalletAsset' => 'Кошельки с наличными', + 'opt_group_expense_account' => 'Счета расходов', + 'opt_group_revenue_account' => 'Счета доходов', + 'opt_group_l_Loan' => 'Долги (кредит)', + 'opt_group_cash_account' => 'Наличные деньги', + 'opt_group_l_Debt' => 'Долги (дебит)', + 'opt_group_l_Mortgage' => 'Долги (ипотека)', + 'opt_group_l_Credit card' => 'Долги (кредитная карта)', + 'notes' => 'Заметки', + 'unknown_journal_error' => 'Не удалось сохранить транзакцию. Пожалуйста, проверьте log-файлы.', + 'attachment_not_found' => 'Вложение не найдено.', + 'journal_link_bill' => 'Эта транзакция связана со счётом на оплату :name. Чтобы удалить эту связь, снимите галочку. Используйте правила для связи с другим счётом на оплату.', + 'transaction_stored_link' => 'Транзакция #{ID} ("{title}") сохранена.', + 'transaction_new_stored_link' => 'Транзакция #{ID} сохранена.', + 'transaction_updated_link' => 'Транзакция #{ID} ("{title}") обновлена.', + 'transaction_updated_no_changes' => 'Транзакция #{ID} ("{title}") не изменилась.', + 'first_split_decides' => 'В данном поле используется значение из первой части разделенной транзакции', + 'first_split_overrules_source' => 'Значение из первой части транзакции может изменить счет источника', + 'first_split_overrules_destination' => 'Значение из первой части транзакции может изменить счет назначения', + 'spent_x_of_y' => 'Потрачено {amount} из {total}', // new user: - 'welcome' => 'Добро пожаловать в Firefly III!', - 'submit' => 'Подтвердить', - 'submission' => 'Отправить', - 'submit_yes_really' => 'Подтвердить (я знаю, что делаю)', - 'getting_started' => 'Начало работы', - 'to_get_started' => 'Приятно видеть, что вы успешно установили Firefly III. Чтобы начать работу, введите, пожалуйста, название своего банка и баланс вашего основного банковского счёта. Если вы планируете использовать несколько счетов, не волнуйтесь, вы сможете добавить их позже. Сейчас Firefly III просто нужны какие-нибудь первоначальные данные.', - 'savings_balance_text' => 'Firefly III автоматически создаст сберегательный счёт для вас. По умолчанию на вашем сберегательном счёте не будет денег, но если вы укажете начальный баланс, он будет сохранен.', - 'finish_up_new_user' => 'Это всё! Вы можете продолжить, нажав Подтвердить. Вы попадете на главную страницу Firefly III.', - 'stored_new_accounts_new_user' => 'Ура! Ваши новые учётные записи сохранены.', - 'set_preferred_language' => 'Если вы предпочитаете использовать Firefly III на другом языке, укажите здесь здесь.', - 'language' => 'Язык', - 'new_savings_account' => 'сберегательный счёт в :bank_name', - 'cash_wallet' => 'Кошелёк с наличными', - 'currency_not_present' => 'Если ваша основная валюта ещё не указана, не волнуйтесь. Вы можете создать собственные валюты в разделе Параметры > Валюты.', + 'welcome' => 'Добро пожаловать в Firefly III!', + 'submit' => 'Подтвердить', + 'submission' => 'Отправить', + 'submit_yes_really' => 'Подтвердить (я знаю, что делаю)', + 'getting_started' => 'Начало работы', + 'to_get_started' => 'Приятно видеть, что вы успешно установили Firefly III. Чтобы начать работу, введите, пожалуйста, название своего банка и баланс вашего основного банковского счёта. Если вы планируете использовать несколько счетов, не волнуйтесь, вы сможете добавить их позже. Сейчас Firefly III просто нужны какие-нибудь первоначальные данные.', + 'savings_balance_text' => 'Firefly III автоматически создаст сберегательный счёт для вас. По умолчанию на вашем сберегательном счёте не будет денег, но если вы укажете начальный баланс, он будет сохранен.', + 'finish_up_new_user' => 'Это всё! Вы можете продолжить, нажав Подтвердить. Вы попадете на главную страницу Firefly III.', + 'stored_new_accounts_new_user' => 'Ура! Ваши новые учётные записи сохранены.', + 'set_preferred_language' => 'Если вы предпочитаете использовать Firefly III на другом языке, укажите здесь здесь.', + 'language' => 'Язык', + 'new_savings_account' => 'сберегательный счёт в :bank_name', + 'cash_wallet' => 'Кошелёк с наличными', + 'currency_not_present' => 'Если ваша основная валюта ещё не указана, не волнуйтесь. Вы можете создать собственные валюты в разделе Параметры > Валюты.', // home page: - 'transaction_table_description' => 'Таблица, содержащая ваши транзакции', - 'opposing_account' => 'Противодействующий счёт', - 'yourAccounts' => 'Ваши счета', - 'your_accounts' => 'Обзор вашего счёта', - 'category_overview' => 'Обзор категории', - 'expense_overview' => 'Обзор счета расходов', - 'revenue_overview' => 'Обзор счёта доходов', - 'budgetsAndSpending' => 'Бюджеты и расходы', - 'budgets_and_spending' => 'Бюджеты и расходы', - 'go_to_budget' => 'Перейти к бюджету "{budget}"', - 'go_to_deposits' => 'Перейти ко вкладам', - 'go_to_expenses' => 'Перейти к расходам', - 'savings' => 'Экономия', - 'newWithdrawal' => 'Новый расход', - 'newDeposit' => 'Новый доход', - 'newTransfer' => 'Новый перевод', - 'bills_to_pay' => 'Счета к оплате', - 'per_day' => 'В день', - 'left_to_spend_per_day' => 'Можно тратить в день', - 'bills_paid' => 'Оплаченные счета', - 'custom_period' => 'Пользовательский период', - 'reset_to_current' => 'Сброс к текущему периоду', - 'select_period' => 'Выберите период', + 'transaction_table_description' => 'Таблица, содержащая ваши транзакции', + 'opposing_account' => 'Противодействующий счёт', + 'yourAccounts' => 'Ваши счета', + 'your_accounts' => 'Обзор вашего счёта', + 'category_overview' => 'Обзор категории', + 'expense_overview' => 'Обзор счета расходов', + 'revenue_overview' => 'Обзор счёта доходов', + 'budgetsAndSpending' => 'Бюджеты и расходы', + 'budgets_and_spending' => 'Бюджеты и расходы', + 'go_to_budget' => 'Перейти к бюджету "{budget}"', + 'go_to_deposits' => 'Перейти ко вкладам', + 'go_to_expenses' => 'Перейти к расходам', + 'savings' => 'Экономия', + 'newWithdrawal' => 'Новый расход', + 'newDeposit' => 'Новый доход', + 'newTransfer' => 'Новый перевод', + 'bills_to_pay' => 'Счета к оплате', + 'per_day' => 'В день', + 'left_to_spend_per_day' => 'Можно тратить в день', + 'bills_paid' => 'Оплаченные счета', + 'custom_period' => 'Пользовательский период', + 'reset_to_current' => 'Сброс к текущему периоду', + 'select_period' => 'Выберите период', // menu and titles, should be recycled as often as possible: - 'currency' => 'Валюта', - 'preferences' => 'Настройки', - 'logout' => 'Выход', - 'logout_other_sessions' => 'Завершить все другие сессии', - 'toggleNavigation' => 'Переключить навигацию', - 'searchPlaceholder' => 'Поиск...', - 'version' => 'Версия', - 'dashboard' => 'Сводка', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Доступный бюджет ({currency})', - 'currencies' => 'Валюты', - 'activity' => 'Активность', - 'usage' => 'Использование', - 'accounts' => 'Счета', - 'Asset account' => 'Активный счёт', - 'Default account' => 'Основной счёт', - 'Expense account' => 'Счета расходов', - 'Revenue account' => 'Счета доходов', - 'Initial balance account' => 'Начальный баланс для счёта', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Дебит', - 'account_type_Loan' => 'Заём', - 'account_type_Mortgage' => 'Ипотека', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Заём', - 'account_type_mortgage' => 'Ипотека', - 'account_type_Credit card' => 'Кредитная карта', - 'credit_card_type_monthlyFull' => 'Полная оплата каждый месяц', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Неизвестно', - 'liability_direction_null_short' => 'Неизвестно', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Бюджет', - 'tags' => 'Метки', - 'reports' => 'Отчёты', - 'transactions' => 'Транзакции', - 'expenses' => 'Мои расходы', - 'income' => 'Мои доходы', - 'transfers' => 'Переводы', - 'moneyManagement' => 'Управление финансами', - 'money_management' => 'Управление финансами', - 'tools' => 'Инструменты', - 'piggyBanks' => 'Копилки', - 'piggy_banks' => 'Копилки', - 'amount_x_of_y' => '{current} из {total}', - 'bills' => 'Счета к оплате', - 'withdrawal' => 'Расход', - 'opening_balance' => 'Начальный баланс', - 'deposit' => 'Доход', - 'account' => 'Счёт', - 'transfer' => 'Перевод', - 'Withdrawal' => 'Расход', - 'Deposit' => 'Доход', - 'Transfer' => 'Перевод', - 'bill' => 'Счёт к оплате', - 'yes' => 'Да', - 'no' => 'Нет', - 'amount' => 'Сумма', - 'overview' => 'Обзор', - 'saveOnAccount' => 'Сохранить на счёте', - 'unknown' => 'Неизвестно', - 'monthly' => 'Ежемесячно', - 'profile' => 'Профиль', - 'errors' => 'Ошибки', - 'debt_start_date' => 'Дата начала дебита', - 'debt_start_amount' => 'Начальная сумма дебита', - 'debt_start_amount_help' => 'Всегда лучше установить отрицательное значение. Для получения дополнительной информации прочтите страницу справки (значок (?) в правом верхнем углу).', - 'interest_period_help' => 'Это поле чисто косметическое и не будет рассчитано для вас. Как оказалось, банки очень хитры, так что Firefly III никогда не делает это правильно.', - 'store_new_liabilities_account' => 'Сохранить новое обязательство', - 'edit_liabilities_account' => 'Редактировать долговой счёт ":name"', - 'financial_control' => 'Финансовый контроль', - 'accounting' => 'Учёт финансов', - 'automation' => 'Автоматизация', - 'others' => 'Другие', - 'classification' => 'Классификация', - 'store_transaction' => 'Сохранить транзакцию', + 'currency' => 'Валюта', + 'preferences' => 'Настройки', + 'logout' => 'Выход', + 'logout_other_sessions' => 'Завершить все другие сессии', + 'toggleNavigation' => 'Переключить навигацию', + 'searchPlaceholder' => 'Поиск...', + 'version' => 'Версия', + 'dashboard' => 'Сводка', + 'income_and_expense' => 'Доходы и расходы', + 'all_money' => 'Все ваши деньги', + 'unknown_source_plain' => 'Неизвестный счет источник', + 'unknown_dest_plain' => 'Неизвестный счет назначения', + 'unknown_any_plain' => 'Неизвестный счет', + 'unknown_budget_plain' => 'Без бюджета', + 'available_budget' => 'Доступный бюджет ({currency})', + 'currencies' => 'Валюты', + 'activity' => 'Активность', + 'usage' => 'Использование', + 'accounts' => 'Счета', + 'Asset account' => 'Активный счёт', + 'Default account' => 'Основной счёт', + 'Expense account' => 'Счета расходов', + 'Revenue account' => 'Счета доходов', + 'Initial balance account' => 'Начальный баланс для счёта', + 'account_type_Asset account' => 'Счет активов', + 'account_type_Expense account' => 'Счета расходов', + 'account_type_Revenue account' => 'Счет доходов', + 'account_type_Debt' => 'Дебит', + 'account_type_Loan' => 'Заём', + 'account_type_Mortgage' => 'Ипотека', + 'account_type_debt' => 'Долг', + 'account_type_loan' => 'Заём', + 'account_type_mortgage' => 'Ипотека', + 'account_type_Credit card' => 'Кредитная карта', + 'credit_card_type_monthlyFull' => 'Полная оплата каждый месяц', + 'liability_direction_credit' => 'Мне должны', + 'liability_direction_debit' => 'Я должен кому-то', + 'liability_direction_credit_short' => 'Мне должны', + 'liability_direction_debit_short' => 'Я должен', + 'liability_direction__short' => 'Неизвестно', + 'liability_direction_null_short' => 'Неизвестно', + 'Liability credit' => 'Кредитное обязательство', + 'budgets' => 'Бюджет', + 'tags' => 'Метки', + 'reports' => 'Отчёты', + 'transactions' => 'Транзакции', + 'expenses' => 'Расходы', + 'income' => 'Доходы', + 'transfers' => 'Переводы', + 'moneyManagement' => 'Управление финансами', + 'money_management' => 'Управление финансами', + 'tools' => 'Инструменты', + 'piggyBanks' => 'Копилки', + 'piggy_banks' => 'Копилки', + 'amount_x_of_y' => '{current} из {total}', + 'bills' => 'Счета к оплате', + 'withdrawal' => 'Расход', + 'opening_balance' => 'Начальный баланс', + 'deposit' => 'Доход', + 'account' => 'Счёт', + 'transfer' => 'Перевод', + 'Withdrawal' => 'Расход', + 'Deposit' => 'Доход', + 'Transfer' => 'Перевод', + 'bill' => 'Счёт к оплате', + 'yes' => 'Да', + 'no' => 'Нет', + 'amount' => 'Сумма', + 'overview' => 'Обзор', + 'saveOnAccount' => 'Сохранить на счёте', + 'unknown' => 'Неизвестно', + 'monthly' => 'Ежемесячно', + 'profile' => 'Профиль', + 'errors' => 'Ошибки', + 'debt_start_date' => 'Дата начала дебита', + 'debt_start_amount' => 'Начальная сумма дебита', + 'debt_start_amount_help' => 'Всегда лучше установить отрицательное значение. Для получения дополнительной информации прочтите страницу справки (значок (?) в правом верхнем углу).', + 'interest_period_help' => 'Это поле чисто косметическое и не будет рассчитано для вас. Как оказалось, банки очень хитры, так что Firefly III никогда не делает это правильно.', + 'store_new_liabilities_account' => 'Сохранить новое обязательство', + 'edit_liabilities_account' => 'Редактировать долговой счёт ":name"', + 'financial_control' => 'Финансовый контроль', + 'accounting' => 'Учёт финансов', + 'automation' => 'Автоматизация', + 'others' => 'Другие', + 'classification' => 'Классификация', + 'store_transaction' => 'Сохранить транзакцию', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Стандартный финансовый отчёт за период с :start по :end', - 'report_audit' => 'Обзор транзакций за период с :start по :end', - 'report_category' => 'Отчёт по категории между :start и :end', - 'report_double' => 'Отчёт по счёту расходов/доходов между :start и :end', - 'report_budget' => 'Отчет по бюджету между :start и :end', - 'report_tag' => 'Отчет по метке между :start и :end', - 'quick_link_reports' => 'Быстрые ссылки', - 'quick_link_examples' => 'Это лишь несколько примеров ссылок, которые вы начали. Посмотрите страницу справки (кнопка "?") для получения информации о всех отчётах и волшебных словах, которые вы можете использовать.', - 'quick_link_default_report' => 'Стандартный финансовый отчёт', - 'quick_link_audit_report' => 'Обзор транзакций', - 'report_this_month_quick' => 'Текущий месяц, все счета', - 'report_last_month_quick' => 'Последний месяц, все счета', - 'report_this_year_quick' => 'Текущий год, все счета', - 'report_this_fiscal_year_quick' => 'Текущий финансовый год, всё счета', - 'report_all_time_quick' => 'Всё время, все счета', - 'reports_can_bookmark' => 'Помните, что отчеты можно добавить в закладки.', - 'incomeVsExpenses' => 'Сравнение расходов и доходов', - 'accountBalances' => 'Остатки на счетах', - 'balanceStart' => 'Остаток на начало периода', - 'balanceEnd' => 'Остаток на конец периода', - 'splitByAccount' => 'Разделить по разным счетам', - 'coveredWithTags' => 'Присвоены метки', - 'leftInBudget' => 'Осталось в бюджете', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Сумма сумм', - 'noCategory' => '(без категории)', - 'notCharged' => 'Не взимается (пока)', - 'inactive' => 'Неактивный', - 'active' => 'Активный', - 'difference' => 'Разница', - 'money_flowing_in' => 'В', - 'money_flowing_out' => 'Из', - 'topX' => 'макс. :number', - 'show_full_list' => 'Показать весь список', - 'show_only_top' => 'Показывать только первые :number', - 'report_type' => 'Тип отчета', - 'report_type_default' => 'Стандартный финансовый отчёт', - 'report_type_audit' => 'Обзор истории транзакций (аудит)', - 'report_type_category' => 'Отчёт по категории', - 'report_type_budget' => 'Отчёт по бюджету', - 'report_type_tag' => 'Отчёт по метке', - 'report_type_double' => 'Отчёт о расходах/доходах', - 'more_info_help' => 'Более подробную информацию об этих типах отчётов вы можете найти на странице справки. Нажмите значок (?) в правом верхнем углу.', - 'report_included_accounts' => 'Счета, включаемые в отчёт', - 'report_date_range' => 'Диапазон дат', - 'report_preset_ranges' => 'Предустановленные диапазоны', - 'shared' => 'Общие', - 'fiscal_year' => 'Фискальный год', - 'income_entry' => 'Поступления со счёта ":name" между :start и :end', - 'expense_entry' => 'Расходы на счёт ":name" между :start и :end', - 'category_entry' => 'Расходы и доходы по категории ":name" между :start и :end', - 'budget_spent_amount' => 'Расходы по статье бюджета ":budget" между :start и :end', - 'balance_amount' => 'Расходы по статmt бюджета ":budget", оплаченные со счёта ":account" между :start и :end', - 'no_audit_activity' => 'Для счёта :account_name не было зафиксировано никакой активности между :start и :end.', - 'audit_end_balance' => 'Баланс на счёте :account_name на конец :end составляет: :balance', - 'reports_extra_options' => 'Дополнительные опции', - 'report_has_no_extra_options' => 'У этого отчёта нет дополнительных опций', - 'reports_submit' => 'Просмотреть отчет', - 'end_after_start_date' => 'Конечная дата отчёта должна быть позже, чем начальная дата.', - 'select_category' => 'Выберите категории', - 'select_budget' => 'Выберите бюджет(ы).', - 'select_tag' => 'Выберите метки.', - 'income_per_category' => 'Доход по категориям', - 'expense_per_category' => 'Расход по категориям', - 'expense_per_budget' => 'Расход по бюджетам', - 'income_per_account' => 'Доход по счетам', - 'expense_per_account' => 'Расход по счетам', - 'expense_per_tag' => 'Расход по меткам', - 'income_per_tag' => 'Доход по меткам', - 'include_expense_not_in_budget' => 'Включены расходы, не входящие в выбранный бюджет', - 'include_expense_not_in_account' => 'Включены расходы, не относящиеся к выбранному счёту', - 'include_expense_not_in_category' => 'Включены расходы, не относящиеся к выбранной категории', - 'include_income_not_in_category' => 'Включены доходы, не относящиеся к выбранной категории', - 'include_income_not_in_account' => 'Включены доходы, не относящиеся к выбранному счёту', - 'include_income_not_in_tags' => 'Включены доходы, не отмеченные выбранной меткой', - 'include_expense_not_in_tags' => 'Включены расходы, не отмеченные выбранной меткой', - 'everything_else' => 'Всё остальное', - 'income_and_expenses' => 'Доходы и расходы', - 'spent_average' => 'Расход (средний)', - 'income_average' => 'Доход (средний)', - 'transaction_count' => 'Количество транзакций', - 'average_spending_per_account' => 'Средний расход по счёту', - 'average_income_per_account' => 'Средний доход на счету', - 'total' => 'Итого', - 'description' => 'Описание', - 'sum_of_period' => 'Сумма за период', - 'average_in_period' => 'В среднем за период', - 'account_role_defaultAsset' => 'Счёт по умолчанию', - 'account_role_sharedAsset' => 'Общий основной счёт', - 'account_role_savingAsset' => 'Сберегательный счет', - 'account_role_ccAsset' => 'Кредитная карта', - 'account_role_cashWalletAsset' => 'Наличные', - 'budget_chart_click' => 'Щёлкните по названию бюджета в таблице выше, чтобы увидеть диаграмму.', - 'category_chart_click' => 'Щёлкните по названию категории в таблице выше, чтобы увидеть диаграмму.', - 'in_out_accounts' => 'Доходы и траты в сумме', - 'in_out_accounts_per_asset' => 'Доходы и траты (по основному счету)', - 'in_out_per_category' => 'Доходы и траты по каждой из категорий', - 'out_per_budget' => 'Расходы по бюджету', - 'select_expense_revenue' => 'Выберите счёт расходов или доходов', - 'multi_currency_report_sum' => 'Поскольку этот список содержит счета с несколькими валютами, то сумма(ы), которую вы видите, может не иметь смысла. Отчёт всегда будет возвращаться к вашей валюте по умолчанию.', - 'sum_in_default_currency' => 'Сумма всегда будет в валюте по умолчанию.', - 'net_filtered_prefs' => 'Эта диаграмма никогда не будет включать счета, у которых выключена опция "Включать в мои сбережения".', + 'report_default' => 'Стандартный финансовый отчёт за период с :start по :end', + 'report_audit' => 'Обзор транзакций за период с :start по :end', + 'report_category' => 'Отчёт по категории между :start и :end', + 'report_double' => 'Отчёт по счёту расходов/доходов между :start и :end', + 'report_budget' => 'Отчет по бюджету между :start и :end', + 'report_tag' => 'Отчет по метке между :start и :end', + 'quick_link_reports' => 'Быстрые ссылки', + 'quick_link_examples' => 'Это лишь несколько примеров ссылок, которые вы начали. Посмотрите страницу справки (кнопка "?") для получения информации о всех отчётах и волшебных словах, которые вы можете использовать.', + 'quick_link_default_report' => 'Стандартный финансовый отчёт', + 'quick_link_audit_report' => 'Обзор транзакций', + 'report_this_month_quick' => 'Текущий месяц, все счета', + 'report_last_month_quick' => 'Последний месяц, все счета', + 'report_this_year_quick' => 'Текущий год, все счета', + 'report_this_fiscal_year_quick' => 'Текущий финансовый год, всё счета', + 'report_all_time_quick' => 'Всё время, все счета', + 'reports_can_bookmark' => 'Помните, что отчеты можно добавить в закладки.', + 'incomeVsExpenses' => 'Сравнение расходов и доходов', + 'accountBalances' => 'Остатки на счетах', + 'balanceStart' => 'Остаток на начало периода', + 'balanceEnd' => 'Остаток на конец периода', + 'splitByAccount' => 'Разделить по разным счетам', + 'coveredWithTags' => 'Присвоены метки', + 'leftInBudget' => 'Осталось в бюджете', + 'left_in_debt' => 'Сумма долга', + 'sumOfSums' => 'Сумма сумм', + 'noCategory' => '(без категории)', + 'notCharged' => 'Не взимается (пока)', + 'inactive' => 'Неактивный', + 'active' => 'Активный', + 'difference' => 'Разница', + 'money_flowing_in' => 'В', + 'money_flowing_out' => 'Из', + 'topX' => 'макс. :number', + 'show_full_list' => 'Показать весь список', + 'show_only_top' => 'Показывать только первые :number', + 'report_type' => 'Тип отчета', + 'report_type_default' => 'Стандартный финансовый отчёт', + 'report_type_audit' => 'Обзор истории транзакций (аудит)', + 'report_type_category' => 'Отчёт по категории', + 'report_type_budget' => 'Отчёт по бюджету', + 'report_type_tag' => 'Отчёт по метке', + 'report_type_double' => 'Отчёт о расходах/доходах', + 'more_info_help' => 'Более подробную информацию об этих типах отчётов вы можете найти на странице справки. Нажмите значок (?) в правом верхнем углу.', + 'report_included_accounts' => 'Счета, включаемые в отчёт', + 'report_date_range' => 'Диапазон дат', + 'report_preset_ranges' => 'Предустановленные диапазоны', + 'shared' => 'Общие', + 'fiscal_year' => 'Фискальный год', + 'income_entry' => 'Поступления со счёта ":name" между :start и :end', + 'expense_entry' => 'Расходы на счёт ":name" между :start и :end', + 'category_entry' => 'Расходы и доходы по категории ":name" между :start и :end', + 'budget_spent_amount' => 'Расходы по статье бюджета ":budget" между :start и :end', + 'balance_amount' => 'Расходы по статmt бюджета ":budget", оплаченные со счёта ":account" между :start и :end', + 'no_audit_activity' => 'Для счёта :account_name не было зафиксировано никакой активности между :start и :end.', + 'audit_end_balance' => 'Баланс на счёте :account_name на конец :end составляет: :balance', + 'reports_extra_options' => 'Дополнительные опции', + 'report_has_no_extra_options' => 'У этого отчёта нет дополнительных опций', + 'reports_submit' => 'Просмотреть отчет', + 'end_after_start_date' => 'Конечная дата отчёта должна быть позже, чем начальная дата.', + 'select_category' => 'Выберите категории', + 'select_budget' => 'Выберите бюджет(ы).', + 'select_tag' => 'Выберите метки.', + 'income_per_category' => 'Доход по категориям', + 'expense_per_category' => 'Расход по категориям', + 'expense_per_budget' => 'Расход по бюджетам', + 'income_per_account' => 'Доход по счетам', + 'expense_per_account' => 'Расход по счетам', + 'expense_per_tag' => 'Расход по меткам', + 'income_per_tag' => 'Доход по меткам', + 'include_expense_not_in_budget' => 'Включены расходы, не входящие в выбранный бюджет', + 'include_expense_not_in_account' => 'Включены расходы, не относящиеся к выбранному счёту', + 'include_expense_not_in_category' => 'Включены расходы, не относящиеся к выбранной категории', + 'include_income_not_in_category' => 'Включены доходы, не относящиеся к выбранной категории', + 'include_income_not_in_account' => 'Включены доходы, не относящиеся к выбранному счёту', + 'include_income_not_in_tags' => 'Включены доходы, не отмеченные выбранной меткой', + 'include_expense_not_in_tags' => 'Включены расходы, не отмеченные выбранной меткой', + 'everything_else' => 'Всё остальное', + 'income_and_expenses' => 'Доходы и расходы', + 'spent_average' => 'Расход (средний)', + 'income_average' => 'Доход (средний)', + 'transaction_count' => 'Количество транзакций', + 'average_spending_per_account' => 'Средний расход по счёту', + 'average_income_per_account' => 'Средний доход на счету', + 'total' => 'Итого', + 'description' => 'Описание', + 'sum_of_period' => 'Сумма за период', + 'average_in_period' => 'В среднем за период', + 'account_role_defaultAsset' => 'Счёт по умолчанию', + 'account_role_sharedAsset' => 'Общий основной счёт', + 'account_role_savingAsset' => 'Сберегательный счет', + 'account_role_ccAsset' => 'Кредитная карта', + 'account_role_cashWalletAsset' => 'Наличные', + 'budget_chart_click' => 'Щёлкните по названию бюджета в таблице выше, чтобы увидеть диаграмму.', + 'category_chart_click' => 'Щёлкните по названию категории в таблице выше, чтобы увидеть диаграмму.', + 'in_out_accounts' => 'Доходы и траты в сумме', + 'in_out_accounts_per_asset' => 'Доходы и траты (по основному счету)', + 'in_out_per_category' => 'Доходы и траты по каждой из категорий', + 'out_per_budget' => 'Расходы по бюджету', + 'select_expense_revenue' => 'Выберите счёт расходов или доходов', + 'multi_currency_report_sum' => 'Поскольку этот список содержит счета с несколькими валютами, то сумма(ы), которую вы видите, может не иметь смысла. Отчёт всегда будет возвращаться к вашей валюте по умолчанию.', + 'sum_in_default_currency' => 'Сумма всегда будет в валюте по умолчанию.', + 'net_filtered_prefs' => 'Эта диаграмма никогда не будет включать счета, у которых выключена опция "Включать в мои сбережения".', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Диаграмма', - 'month' => 'Месяц', - 'budget' => 'Бюджет', - 'spent' => 'Расход', - 'spent_capped' => 'Потрачено (не более)', - 'spent_in_budget' => 'Расходы по бюджету', - 'left_to_spend' => 'Осталось потратить', - 'earned' => 'Заработано', - 'overspent' => 'Перерасход', - 'left' => 'Осталось', - 'max-amount' => 'Максимальная сумма', - 'min-amount' => 'Минимальная сумма', - 'journal-amount' => 'Запись текущего счёта на оплату', - 'name' => 'Название', - 'date' => 'Дата', - 'date_and_time' => 'Дата и время', - 'time' => 'Время', - 'paid' => 'Оплачено', - 'unpaid' => 'Не оплачено', - 'day' => 'День', - 'budgeted' => 'Запланировано в бюджете', - 'period' => 'Период', - 'balance' => 'Бaлaнc', - 'in_out_period' => 'Баланс в этом периоде', - 'sum' => 'Сумма', - 'summary' => 'Сводка', - 'average' => 'Среднее значение', - 'balanceFor' => 'Баланс для :name', - 'no_tags' => '(нет меток)', + 'chart' => 'Диаграмма', + 'month' => 'Месяц', + 'budget' => 'Бюджет', + 'spent' => 'Расход', + 'spent_capped' => 'Потрачено (не более)', + 'spent_in_budget' => 'Расходы по бюджету', + 'left_to_spend' => 'Осталось потратить', + 'earned' => 'Доходы', + 'overspent' => 'Перерасход', + 'left' => 'Осталось', + 'max-amount' => 'Максимальная сумма', + 'min-amount' => 'Минимальная сумма', + 'journal-amount' => 'Запись текущего счёта на оплату', + 'name' => 'Название', + 'date' => 'Дата', + 'date_and_time' => "Дата и\u{a0}время", + 'time' => 'Время', + 'paid' => 'Оплачено', + 'unpaid' => 'Не оплачено', + 'day' => 'День', + 'budgeted' => 'Запланировано в бюджете', + 'period' => 'Период', + 'balance' => 'Бaлaнc', + 'in_out_period' => 'Баланс в этом периоде', + 'sum' => 'Сумма', + 'summary' => 'Сводка', + 'average' => 'Среднее значение', + 'balanceFor' => 'Баланс для :name', + 'no_tags' => '(нет меток)', + 'nothing_found' => '(ничего не найдено)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Добавить деньги в копилку ":name"', - 'piggy_bank' => 'Копилка', - 'new_piggy_bank' => 'Новая копилка', - 'store_piggy_bank' => 'Сохранить новую копилку', - 'stored_piggy_bank' => 'Сохранить новую копилку ":name"', - 'account_status' => 'Состояние счета', - 'left_for_piggy_banks' => 'Остаток для всех копилок', - 'sum_of_piggy_banks' => 'Сумма по всем копилкам', - 'saved_so_far' => 'Сохранено на данный момент', - 'left_to_save' => 'Осталось накопить', - 'suggested_amount' => 'Рекомендуемая месячная сумма для перевода в копилку', - 'add_money_to_piggy_title' => 'Добавить деньги в копилку ":name"', - 'remove_money_from_piggy_title' => 'Удалить деньги из копилки ":name"', - 'add' => 'Добавить', - 'no_money_for_piggy' => 'У вас нет денег, чтобы положить в этот копилку.', - 'suggested_savings_per_month' => 'Рекомендуется на месяц', + 'event_history' => 'История событий', + 'add_money_to_piggy' => 'Добавить деньги в копилку ":name"', + 'piggy_bank' => 'Копилка', + 'new_piggy_bank' => 'Новая копилка', + 'store_piggy_bank' => 'Сохранить новую копилку', + 'stored_piggy_bank' => 'Сохранить новую копилку ":name"', + 'account_status' => 'Состояние счета', + 'left_for_piggy_banks' => 'Остаток для всех копилок', + 'sum_of_piggy_banks' => 'Сумма по всем копилкам', + 'saved_so_far' => 'Сохранено на данный момент', + 'left_to_save' => 'Осталось накопить', + 'suggested_amount' => 'Рекомендуемая месячная сумма для перевода в копилку', + 'add_money_to_piggy_title' => 'Добавить деньги в копилку ":name"', + 'remove_money_from_piggy_title' => 'Удалить деньги из копилки ":name"', + 'add' => 'Добавить', + 'no_money_for_piggy' => 'У вас нет денег, чтобы положить в этот копилку.', + 'suggested_savings_per_month' => 'Рекомендуется на месяц', - 'remove' => 'Удалить', - 'max_amount_add' => 'Максимальная сумма, которую вы можете добавить:', - 'max_amount_remove' => 'Максимальная сумма, которую вы можете удалить:', - 'update_piggy_button' => 'Обновить копилку', - 'update_piggy_title' => 'Обновить копилку ":name"', - 'updated_piggy_bank' => 'Копилка ":name" обновлена', - 'details' => 'Подробности', - 'events' => 'События', - 'target_amount' => 'Целевая сумма', - 'start_date' => 'Дата начала', - 'no_start_date' => 'Нет начальной даты', - 'target_date' => 'Конечная дата', - 'no_target_date' => 'Нет конечной даты', - 'table' => 'Таблица', - 'delete_piggy_bank' => 'Удалить копилку ":name"', - 'cannot_add_amount_piggy' => 'Невозможно добавить :amount в ":name".', - 'cannot_remove_from_piggy' => 'Невозможно удалить :amount из ":name".', - 'deleted_piggy_bank' => 'Копилка ":name" удалена', - 'added_amount_to_piggy' => 'Добавлено :amount в ":name"', - 'removed_amount_from_piggy' => 'Удалено :amount из ":name"', - 'piggy_events' => 'Связанные копилки', + 'remove' => 'Удалить', + 'max_amount_add' => 'Максимальная сумма, которую вы можете добавить:', + 'max_amount_remove' => 'Максимальная сумма, которую вы можете удалить:', + 'update_piggy_button' => 'Обновить копилку', + 'update_piggy_title' => 'Обновить копилку ":name"', + 'updated_piggy_bank' => 'Копилка ":name" обновлена', + 'details' => 'Подробности', + 'events' => 'События', + 'target_amount' => 'Целевая сумма', + 'start_date' => 'Дата начала', + 'no_start_date' => 'Нет начальной даты', + 'target_date' => 'Конечная дата', + 'no_target_date' => 'Нет конечной даты', + 'table' => 'Таблица', + 'delete_piggy_bank' => 'Удалить копилку ":name"', + 'cannot_add_amount_piggy' => 'Невозможно добавить :amount в ":name".', + 'cannot_remove_from_piggy' => 'Невозможно удалить :amount из ":name".', + 'deleted_piggy_bank' => 'Копилка ":name" удалена', + 'added_amount_to_piggy' => 'Добавлено :amount в ":name"', + 'removed_amount_from_piggy' => 'Удалено :amount из ":name"', + 'piggy_events' => 'Связанные копилки', // tags - 'delete_tag' => 'Удалить метку ":tag"', - 'deleted_tag' => 'Метка ":tag" удалена', - 'new_tag' => 'Создать новую метку', - 'edit_tag' => 'Изменить метку ":tag"', - 'updated_tag' => 'Метка ":tag" обновлена', - 'created_tag' => 'Метка ":tag" была создана!', + 'delete_tag' => 'Удалить метку ":tag"', + 'deleted_tag' => 'Метка ":tag" удалена', + 'new_tag' => 'Создать новую метку', + 'edit_tag' => 'Изменить метку ":tag"', + 'updated_tag' => 'Метка ":tag" обновлена', + 'created_tag' => 'Метка ":tag" была создана!', - 'transaction_journal_information' => 'Информация о транзакции', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Дополнительная информация', - 'transaction_journal_more' => 'Дополнительная информация', - 'basic_journal_information' => 'Основная информация о транзакции', - 'transaction_journal_extra' => 'Дополнительные сведения', - 'att_part_of_journal' => 'Сохранено в ":journal"', - 'total_amount' => 'Итого', - 'number_of_decimals' => 'Количество знаков после запятой', + 'transaction_journal_information' => 'Информация о транзакции', + 'transaction_journal_amount' => 'Информация о сумме', + 'transaction_journal_meta' => 'Дополнительная информация', + 'transaction_journal_more' => 'Дополнительная информация', + 'basic_journal_information' => 'Основная информация о транзакции', + 'transaction_journal_extra' => 'Дополнительные сведения', + 'att_part_of_journal' => 'Сохранено в ":journal"', + 'total_amount' => 'Итого', + 'number_of_decimals' => 'Количество знаков после запятой', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'Приглашение ":address" уже было активировано.', - 'invite_is_deleted' => 'Приглашение ":address" удалено.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Администрирование', - 'system_settings' => 'System settings', - 'code_already_used' => 'Код приглашения уже был использован', - 'user_administration' => 'Управление пользователями', - 'list_all_users' => 'Список пользователей', - 'all_users' => 'Все пользователи', - 'instance_configuration' => 'Конфигурация', - 'firefly_instance_configuration' => 'Базовая конфигурация Firefly III', - 'setting_single_user_mode' => 'Режим одного пользователя', - 'setting_single_user_mode_explain' => 'По умолчанию Firefly III работает только с одним пользователем (это вы). Это сделано с целью обеспечения безопасности, чтобы другие люди не могли использовать ваш Firefly без вашего разрешения. Регистрация других пользователей просто невозможна. Однако, если вы снимите этот флажок, другие смогут использовать ваш Firefly, при условии, что у них есть доступ к нему (например, он доступен через Интернет).', - 'store_configuration' => 'Сохранить конфигурацию', - 'single_user_administration' => 'Управление пользователем :email', - 'edit_user' => 'Редактирование пользователя :email', - 'hidden_fields_preferences' => 'Вы можете включить больше параметров транзакции в настройках.', - 'user_data_information' => 'Данные пользователя', - 'user_information' => 'Информация о пользователе', - 'total_size' => 'общий размер', - 'budget_or_budgets' => ':count бюджет|:count бюджетов', - 'budgets_with_limits' => ':count бюджет с заданной суммой|:count бюджетов с заданной суммой', - 'nr_of_rules_in_total_groups' => ':count_rules правил в :count_groups группах', - 'tag_or_tags' => ':count метка|:count меток', - 'configuration_updated' => 'Конфигурация обновлена', - 'setting_is_demo_site' => 'Демо-сайт', - 'setting_is_demo_site_explain' => 'Если вы установите этот флажок, эта копия FireFly будет вести себя как демонстрационный сайт, который может иметь странные побочные эффекты.', - 'block_code_bounced' => 'Отправка письма (писем) с аккаунта', - 'block_code_expired' => 'Срок демо-версии истёк', - 'no_block_code' => 'Нет причины для блокировки или пользователь не заблокирован', - 'block_code_email_changed' => 'Пользователь не подтвердил новый адрес электронной почты', - 'admin_update_email' => 'Внимание! Пользователь НЕ будет уведомлён о смене адреса электронной почты. Новый адрес он увидит только на странице профиля.', - 'update_user' => 'Обновить пользователя', - 'updated_user' => 'Данные пользователя были изменены.', - 'delete_user' => 'Удалить пользователя :email', - 'user_deleted' => 'Пользователь был удален', - 'send_test_email' => 'Отправить тестовое письмо на E-mail пользователя', - 'send_test_email_text' => 'Чтобы узнать, может ли ваша копия FireFly отправлять электронную почту, нажмите эту кнопку. Вы не увидите здесь ошибки (если они возникнут), все ошибки будут зафиксированы в лог-файле. Вы можете нажимать эту кнопку столько раз, сколько хотите. Спам не контролируется. Сообщение будет отправлено на адрес :email и вы сможете получить его в ближайшее время.', - 'send_message' => 'Отправить сообщение', - 'send_test_triggered' => 'Тест был выполнен. Проверьте ваш почтовый ящик и log-файлы.', - 'give_admin_careful' => 'Пользователи, которым даны права администратора, могут отнять такие права у вас. Будьте осторожны.', - 'admin_maintanance_title' => 'Обслуживание', - 'admin_maintanance_expl' => 'Некоторые хитрые кнопочки для обслуживания Firefly III', - 'admin_maintenance_clear_cache' => 'Очистить кэш', - 'admin_notifications' => 'Уведомления администратора', - 'admin_notifications_expl' => 'Следующие уведомления могут быть включены или отключены администратором. Если вы хотите получить эти сообщения через Slack также установите URL "входящий вебхук".', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'Все приглашенные пользователи', - 'save_notification_settings' => 'Сохранить настройки', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Описание разделённой транзакции', - 'split_transaction_title_help' => 'Если вы создаёте разделённую транзакцию, то должны указать общее описание для всех её составляющих.', - 'split_title_help' => 'Если вы создаёте разделённую транзакцию, то должны указать общее описание дле всех её составляющих.', - 'you_create_transfer' => 'Вы создаёте перевод.', - 'you_create_withdrawal' => 'Вы создаёте расход.', - 'you_create_deposit' => 'Вы создаёте доход.', + 'invite_is_already_redeemed' => 'Приглашение ":address" уже было активировано.', + 'invite_is_deleted' => 'Приглашение ":address" удалено.', + 'invite_new_user_title' => 'Пригласить нового пользователя', + 'invite_new_user_text' => 'Как администратор, вы можете пригласить пользователей зарегистрироваться в администрируемым вами Firefly III. С помощью прямой ссылки вы можете поделиться с ними, они смогут зарегистрировать аккаунт. Приглашенный пользователь и его пригласительная ссылка появятся в таблице ниже. Вы можете поделиться с ними ссылкой.', + 'invited_user_mail' => 'Адрес электронной почты', + 'invite_user' => 'Пригласить пользователя', + 'user_is_invited' => 'Адрес электронной почты ":address" был приглашен в Firefly III', + 'administration' => 'Администрирование', + 'system_settings' => 'Настройки системы', + 'code_already_used' => 'Код приглашения уже был использован', + 'user_administration' => 'Управление пользователями', + 'list_all_users' => 'Список пользователей', + 'all_users' => 'Все пользователи', + 'instance_configuration' => 'Конфигурация', + 'firefly_instance_configuration' => 'Базовая конфигурация Firefly III', + 'setting_single_user_mode' => 'Режим одного пользователя', + 'setting_single_user_mode_explain' => 'По умолчанию Firefly III работает только с одним пользователем (это вы). Это сделано с целью обеспечения безопасности, чтобы другие люди не могли использовать ваш Firefly без вашего разрешения. Регистрация других пользователей просто невозможна. Однако, если вы снимите этот флажок, другие смогут использовать ваш Firefly, при условии, что у них есть доступ к нему (например, он доступен через Интернет).', + 'store_configuration' => 'Сохранить конфигурацию', + 'single_user_administration' => 'Управление пользователем :email', + 'edit_user' => 'Редактирование пользователя :email', + 'hidden_fields_preferences' => 'Вы можете включить больше параметров транзакции в настройках.', + 'user_data_information' => 'Данные пользователя', + 'user_information' => 'Информация о пользователе', + 'total_size' => 'общий размер', + 'budget_or_budgets' => ':count бюджет|:count бюджетов', + 'budgets_with_limits' => ':count бюджет с заданной суммой|:count бюджетов с заданной суммой', + 'nr_of_rules_in_total_groups' => ':count_rules правил в :count_groups группах', + 'tag_or_tags' => ':count метка|:count меток', + 'configuration_updated' => 'Конфигурация обновлена', + 'setting_is_demo_site' => 'Демо-сайт', + 'setting_is_demo_site_explain' => 'Если вы установите этот флажок, эта копия FireFly будет вести себя как демонстрационный сайт, который может иметь странные побочные эффекты.', + 'block_code_bounced' => 'Отправка письма (писем) с аккаунта', + 'block_code_expired' => 'Срок демо-версии истёк', + 'no_block_code' => 'Нет причины для блокировки или пользователь не заблокирован', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Пользователь не подтвердил новый адрес электронной почты', + 'admin_update_email' => 'Внимание! Пользователь НЕ будет уведомлён о смене адреса электронной почты. Новый адрес он увидит только на странице профиля.', + 'update_user' => 'Обновить пользователя', + 'updated_user' => 'Данные пользователя были изменены.', + 'delete_user' => 'Удалить пользователя :email', + 'user_deleted' => 'Пользователь был удален', + 'send_test_email' => 'Отправить тестовое письмо на E-mail пользователя', + 'send_test_email_text' => 'Чтобы узнать, может ли ваша копия FireFly отправлять электронную почту, нажмите эту кнопку. Вы не увидите здесь ошибки (если они возникнут), все ошибки будут зафиксированы в лог-файле. Вы можете нажимать эту кнопку столько раз, сколько хотите. Спам не контролируется. Сообщение будет отправлено на адрес :email и вы сможете получить его в ближайшее время.', + 'send_message' => 'Отправить сообщение', + 'send_test_triggered' => 'Тест был выполнен. Проверьте ваш почтовый ящик и log-файлы.', + 'give_admin_careful' => 'Пользователи, которым даны права администратора, могут отнять такие права у вас. Будьте осторожны.', + 'admin_maintanance_title' => 'Обслуживание', + 'admin_maintanance_expl' => 'Некоторые хитрые кнопочки для обслуживания Firefly III', + 'admin_maintenance_clear_cache' => 'Очистить кэш', + 'admin_notifications' => 'Уведомления администратора', + 'admin_notifications_expl' => 'Следующие уведомления могут быть включены или отключены администратором. Если вы хотите получить эти сообщения через Slack также установите URL "входящий вебхук".', + 'admin_notification_check_user_new_reg' => 'Пользователь получает приветственное сообщение после регистрации', + 'admin_notification_check_admin_new_reg' => 'Администраторы(ы) получают уведомление о регистрации нового пользователя', + 'admin_notification_check_new_version' => 'Доступна новая версия', + 'admin_notification_check_invite_created' => 'Пользователь приглашен на Firefly III', + 'admin_notification_check_invite_redeemed' => 'Приглашение пользователя использовано', + 'all_invited_users' => 'Все приглашенные пользователи', + 'save_notification_settings' => 'Сохранить настройки', + 'notification_settings_saved' => 'Настройки уведомлений сохранены', + 'split_transaction_title' => 'Описание разделённой транзакции', + 'split_transaction_title_help' => 'Если вы создаёте разделённую транзакцию, то должны указать общее описание для всех её составляющих.', + 'split_title_help' => 'Если вы создаёте разделённую транзакцию, то должны указать общее описание дле всех её составляющих.', + 'you_create_transfer' => 'Вы создаёте перевод.', + 'you_create_withdrawal' => 'Вы создаёте расход.', + 'you_create_deposit' => 'Вы создаёте доход.', // links - 'journal_link_configuration' => 'Настройка связей между транзакциями', - 'create_new_link_type' => 'Создать новый тип связи', - 'store_new_link_type' => 'Сохранить новый тип связи', - 'update_link_type' => 'Обновить тип связи', - 'edit_link_type' => 'Изменить тип ссылки ":name"', - 'updated_link_type' => 'Тип связи ":name" обновлён', - 'delete_link_type' => 'Удалить тип ссылки ":name"', - 'deleted_link_type' => 'Тип ссылки ":name" удалён', - 'stored_new_link_type' => 'Сохранить новый тип связи ":name"', - 'cannot_edit_link_type' => 'Невозможно изменить тип ссылки ":name"', - 'link_type_help_name' => 'Например, "Дубликаты"', - 'link_type_help_inward' => 'Например, "дубликаты"', - 'link_type_help_outward' => 'Например, "это дублирует..."', - 'save_connections_by_moving' => 'Сохраните связь между этими транзакциями, переместив их на другой тип ссылок:', - 'do_not_save_connection' => '(не сохранять соединение)', - 'link_transaction' => 'Связать транзакцию', - 'link_to_other_transaction' => 'Связать эту транзакцию с другой транзакцией', - 'select_transaction_to_link' => 'Выберите транзакцию, с которой хотите связать данную транзакцию. Пока такие ссылки не используются Firefly III (кроме того, что показано), но я планирую изменить это в будущем. Используйте поле поиска, чтобы выбрать транзакцию либо по названию, либо по ID. Если вы хотите добавить пользовательские типы ссылок, проверьте раздел администрирования.', - 'this_transaction' => 'Эта транзакция', - 'transaction' => 'Транзакция', - 'comments' => 'Комментарии', - 'link_notes' => 'Любые заметки, которые вы хотите сохранить с этой ссылкой.', - 'invalid_link_selection' => 'Невозможно связать эти транзакции', - 'selected_transaction' => 'Выбранная транзакция', - 'journals_linked' => 'Транзакции были связаны.', - 'journals_error_linked' => 'Эти транзакции уже связаны.', - 'journals_link_to_self' => 'Вы не можете связать транзакцию с самой собой', - 'journal_links' => 'Связи транзакции', - 'this_withdrawal' => 'Этот расход', - 'this_deposit' => 'Этот доход', - 'this_transfer' => 'Этот перевод', - 'overview_for_link' => 'Обзор для типа ссылки ":name"', - 'source_transaction' => 'Исходная транзакция', - 'link_description' => 'Описание связи', - 'destination_transaction' => 'Целевая транзакция', - 'delete_journal_link' => 'Удалить связи между :source и :destination', - 'deleted_link' => 'Связь удалена', + 'journal_link_configuration' => 'Настройка связей между транзакциями', + 'create_new_link_type' => 'Создать новый тип связи', + 'store_new_link_type' => 'Сохранить новый тип связи', + 'update_link_type' => 'Обновить тип связи', + 'edit_link_type' => 'Изменить тип ссылки ":name"', + 'updated_link_type' => 'Тип связи ":name" обновлён', + 'delete_link_type' => 'Удалить тип ссылки ":name"', + 'deleted_link_type' => 'Тип ссылки ":name" удалён', + 'stored_new_link_type' => 'Сохранить новый тип связи ":name"', + 'cannot_edit_link_type' => 'Невозможно изменить тип ссылки ":name"', + 'link_type_help_name' => 'Например, "Дубликаты"', + 'link_type_help_inward' => 'Например, "дубликаты"', + 'link_type_help_outward' => 'Например, "это дублирует..."', + 'save_connections_by_moving' => 'Сохраните связь между этими транзакциями, переместив их на другой тип ссылок:', + 'do_not_save_connection' => '(не сохранять соединение)', + 'link_transaction' => 'Связать транзакцию', + 'link_to_other_transaction' => 'Связать эту транзакцию с другой транзакцией', + 'select_transaction_to_link' => 'Выберите транзакцию, с которой хотите связать данную транзакцию. Пока такие ссылки не используются Firefly III (кроме того, что показано), но я планирую изменить это в будущем. Используйте поле поиска, чтобы выбрать транзакцию либо по названию, либо по ID. Если вы хотите добавить пользовательские типы ссылок, проверьте раздел администрирования.', + 'this_transaction' => 'Эта транзакция', + 'transaction' => 'Транзакция', + 'comments' => 'Комментарии', + 'link_notes' => 'Любые заметки, которые вы хотите сохранить с этой ссылкой.', + 'invalid_link_selection' => 'Невозможно связать эти транзакции', + 'selected_transaction' => 'Выбранная транзакция', + 'journals_linked' => 'Транзакции были связаны.', + 'journals_error_linked' => 'Эти транзакции уже связаны.', + 'journals_link_to_self' => 'Вы не можете связать транзакцию с самой собой', + 'journal_links' => 'Связи транзакции', + 'this_withdrawal' => 'Этот расход', + 'this_deposit' => 'Этот доход', + 'this_transfer' => 'Этот перевод', + 'overview_for_link' => 'Обзор для типа ссылки ":name"', + 'source_transaction' => 'Исходная транзакция', + 'link_description' => 'Описание связи', + 'destination_transaction' => 'Целевая транзакция', + 'delete_journal_link' => 'Удалить связи между :source и :destination', + 'deleted_link' => 'Связь удалена', // link translations: - 'Paid_name' => 'Оплачено', - 'Refund_name' => 'Возврат', - 'Reimbursement_name' => 'Возмещение', - 'Related_name' => 'Связанные', - 'relates to_inward' => 'связано с', - 'is (partially) refunded by_inward' => '(частично) возвращён', - 'is (partially) paid for by_inward' => '(частично) оплачен', - 'is (partially) reimbursed by_inward' => '(частично) возмещён', - 'inward_transaction' => 'Внутренняя транзакция', - 'outward_transaction' => 'Внешняя транзакция', - 'relates to_outward' => 'относится к', - '(partially) refunds_outward' => '(частично) возвращены', - '(partially) pays for_outward' => '(частично) оплачены', - '(partially) reimburses_outward' => '(частично) возмещены', - 'is (partially) refunded by' => '(частично) возвращён', - 'is (partially) paid for by' => '(частично) оплачен', - 'is (partially) reimbursed by' => '(частично) возмещён', - 'relates to' => 'связано с', - '(partially) refunds' => '(частично) возвращены', - '(partially) pays for' => '(частично) оплачены', - '(partially) reimburses' => '(частично) возмещены', + 'Paid_name' => 'Оплачено', + 'Refund_name' => 'Возврат', + 'Reimbursement_name' => 'Возмещение', + 'Related_name' => 'Связанные', + 'relates to_inward' => 'связано с', + 'is (partially) refunded by_inward' => '(частично) возвращён', + 'is (partially) paid for by_inward' => '(частично) оплачен', + 'is (partially) reimbursed by_inward' => '(частично) возмещён', + 'inward_transaction' => 'Внутренняя транзакция', + 'outward_transaction' => 'Внешняя транзакция', + 'relates to_outward' => 'относится к', + '(partially) refunds_outward' => '(частично) возвращены', + '(partially) pays for_outward' => '(частично) оплачены', + '(partially) reimburses_outward' => '(частично) возмещены', + 'is (partially) refunded by' => '(частично) возвращён', + 'is (partially) paid for by' => '(частично) оплачен', + 'is (partially) reimbursed by' => '(частично) возмещён', + 'relates to' => 'связано с', + '(partially) refunds' => '(частично) возвращены', + '(partially) pays for' => '(частично) оплачены', + '(partially) reimburses' => '(частично) возмещены', // split a transaction: - 'splits' => 'Разделение транзакции', - 'add_another_split' => 'Добавить еще одну часть', - 'cannot_edit_opening_balance' => 'Вы не можете изменить начальный баланс этого счёта.', - 'no_edit_multiple_left' => 'Вы выбрали для редактирования некорректную транзакцию.', - 'breadcrumb_convert_group' => 'Преобразовать транзакцию', - 'convert_invalid_source' => 'Транзакция #%d содержит неверную информацию о счете источника.', - 'convert_invalid_destination' => 'Транзакция #%d содержит неверную информацию о счёте назначения.', - 'create_another' => 'После сохранения вернуться сюда и создать ещё одну аналогичную запись.', - 'after_update_create_another' => 'После обновления вернитесь сюда, чтобы продолжить редактирование.', - 'store_as_new' => 'Сохранить как новую транзакцию вместо обновления.', - 'reset_after' => 'Сбросить форму после отправки', - 'errors_submission' => 'При отправке что-то пошло не так. Пожалуйста, проверьте ошибки ниже.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Разделение транзакции', + 'add_another_split' => 'Добавить еще одну часть', + 'cannot_edit_opening_balance' => 'Вы не можете изменить начальный баланс этого счёта.', + 'no_edit_multiple_left' => 'Вы выбрали для редактирования некорректную транзакцию.', + 'breadcrumb_convert_group' => 'Преобразовать транзакцию', + 'convert_invalid_source' => 'Транзакция #%d содержит неверную информацию о счете источника.', + 'convert_invalid_destination' => 'Транзакция #%d содержит неверную информацию о счёте назначения.', + 'create_another' => 'После сохранения вернуться сюда и создать ещё одну аналогичную запись.', + 'after_update_create_another' => 'После обновления вернитесь сюда, чтобы продолжить редактирование.', + 'store_as_new' => 'Сохранить как новую транзакцию вместо обновления.', + 'reset_after' => 'Сбросить форму после отправки', + 'errors_submission' => 'С вашей публикацией произошла ошибка. Пожалуйста, проверьте ошибки ниже.', + 'errors_submission_v2' => 'С вашей публикацией произошла ошибка. Пожалуйста, проверьте следующие ошибки: %{errorMessage}', + 'transaction_expand_split' => 'Развернуть разделение', + 'transaction_collapse_split' => 'Свернуть разделение', // object groups - 'default_group_title_name' => '(без группировки)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(без группировки)', + 'default_group_title_name_plain' => 'без группировки', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Давайте создадим счёт расхода!', - 'no_accounts_intro_asset' => 'У вас пока нет основных счетов. Основные счета - это ваши денежные активы (наличные, сберегательный счёт, кредитная карта и т. п.).', - 'no_accounts_imperative_asset' => 'Чтобы начать использовать Firefly III, вы должны создать хотя бы один основной счёт. Давайте сделаем это сейчас:', - 'no_accounts_create_asset' => 'Создание расходного счёта', - 'no_accounts_title_expense' => 'Давайте создадим расходный счёт!', - 'no_accounts_intro_expense' => 'Пока у вас нет ни одного расходного счёта. Расходные счета используются для контроля за тем, где именно вы расходуете свои финансы. Например, в магазинах или на оплату коммунальных счетов.', - 'no_accounts_imperative_expense' => 'Расходные счета создаются автоматически, когда вы создаёте транзакции (расходы), но вы можете также создать их вручную, если хотите. Давайте создадим один прямо сейчас:', - 'no_accounts_create_expense' => 'Создать расходный счёт', - 'no_accounts_title_revenue' => 'Давайте создадим счёт дохода!', - 'no_accounts_intro_revenue' => 'У вас ещё нет счетов дохода. Счета дохода - это источники вашего дохода (например, ваш работодатель).', - 'no_accounts_imperative_revenue' => 'Счета дохода создаются автоматически при создании транзакций, но вы можете создать их вручную, если хотите. Давайте создадим один сейчас:', - 'no_accounts_create_revenue' => 'Создать счёт дохода', - 'no_accounts_title_liabilities' => 'Давайте создадим первый долговой счёт!', - 'no_accounts_intro_liabilities' => 'У вас пока нет обязательств. Обязательства являются счетами, которые регистрируют ваши ссуды (например, студенческие) и другие долги.', - 'no_accounts_imperative_liabilities' => 'Вам не обязательно использовать эту функцию, но она может быть полезной, если вы хотите отслеживать такие вещи.', - 'no_accounts_create_liabilities' => 'Создать новый долговой счёт', - 'no_budgets_title_default' => 'Давайте создадим бюджет', - 'no_rules_title_default' => 'Давайте создадим правило', - 'no_budgets_intro_default' => 'У вас пока нет бюджетов. Бюджеты используются для упорядочивания ваших расходов в логические группы, с помощью наблюдения за которыми вы можете ограничить свои расходы.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Бюджеты - это основные инструменты управления финансами. Давайте создадим один сейчас:', - 'no_budgets_create_default' => 'Создать бюджет', - 'no_rules_create_default' => 'Создать правило', - 'no_categories_title_default' => 'Давайте создадим категорию!', - 'no_categories_intro_default' => 'У вас пока нет категорий. Категории используются для точной настройки ваших транзакций и их маркировки.', - 'no_categories_imperative_default' => 'Категории создаются автоматически при создании транзакций, но вы также можете создать их вручную. Давайте создадим одну сейчас:', - 'no_categories_create_default' => 'Создать категорию', - 'no_tags_title_default' => 'Давайте создадим метку!', - 'no_tags_intro_default' => 'У вас еще нет меток. Метки используются для точной настройки транзакций и маркировки их конкретными ключевыми словами.', - 'no_tags_imperative_default' => 'Метки создаются автоматически при создании транзакций, но вы также можете создать их вручную. Давайте создадим одну сейчас:', - 'no_tags_create_default' => 'Создать метку', - 'no_transactions_title_withdrawal' => 'Давайте создадим расход!', - 'no_transactions_intro_withdrawal' => 'У вас пока нет расходов. Вы должны создать хотя бы один расход, чтобы начать управлять своими финансами.', - 'no_transactions_imperative_withdrawal' => 'Вы потратили часть своих денег? Это нужно записать:', - 'no_transactions_create_withdrawal' => 'Создать расход', - 'no_transactions_title_deposit' => 'Давайте создадим какой-нибудь доход!', - 'no_transactions_intro_deposit' => 'У вас пока нет учтённых доходов. Вы должны создать запись дохода, чтобы начать управлять своими финансами.', - 'no_transactions_imperative_deposit' => 'Вы получили какие-нибудь деньги? Вам нужно это записать:', - 'no_transactions_create_deposit' => 'Создать доход', - 'no_transactions_title_transfers' => 'Давайте создадим перевод!', - 'no_transactions_intro_transfers' => 'У вас ещё нет переводов. Когда вы перемещаете деньги между счетами, это нужно записывать как перевод.', - 'no_transactions_imperative_transfers' => 'Вы переместили часть своих денег? Это нужно записать:', - 'no_transactions_create_transfers' => 'Создать перевод', - 'no_piggies_title_default' => 'Давайте создадим копилку!', - 'no_piggies_intro_default' => 'У вас пока нет копилок. Вы можете создавать копилки, чтобы разделить свои сбережения и следить за тем, за что вы сберегаете.', - 'no_piggies_imperative_default' => 'Вы хотите накопить денег на что-нибудь? Создайте копилку и следите за своими сбережениями:', - 'no_piggies_create_default' => 'Создать новую копилку', - 'no_bills_title_default' => 'Давайте создадим счёт на оплату!', - 'no_bills_intro_default' => 'У вас пока нет счетов на оплату. Вы можете создавать счета для отслеживания регулярных расходов, таких как арендная плата или страхование.', - 'no_bills_imperative_default' => 'У вас есть такие регулярные платежи? Создайте счёт на оплату и отслеживайте свои платежи:', - 'no_bills_create_default' => 'Создать счет к оплате', + 'no_accounts_title_asset' => 'Давайте создадим счёт расхода!', + 'no_accounts_intro_asset' => 'У вас пока нет основных счетов. Основные счета - это ваши денежные активы (наличные, сберегательный счёт, кредитная карта и т. п.).', + 'no_accounts_imperative_asset' => 'Чтобы начать использовать Firefly III, вы должны создать хотя бы один основной счёт. Давайте сделаем это сейчас:', + 'no_accounts_create_asset' => 'Создание расходного счёта', + 'no_accounts_title_expense' => 'Давайте создадим расходный счёт!', + 'no_accounts_intro_expense' => 'Пока у вас нет ни одного расходного счёта. Расходные счета используются для контроля за тем, где именно вы расходуете свои финансы. Например, в магазинах или на оплату коммунальных счетов.', + 'no_accounts_imperative_expense' => 'Расходные счета создаются автоматически, когда вы создаёте транзакции (расходы), но вы можете также создать их вручную, если хотите. Давайте создадим один прямо сейчас:', + 'no_accounts_create_expense' => 'Создать расходный счёт', + 'no_accounts_title_revenue' => 'Давайте создадим счёт дохода!', + 'no_accounts_intro_revenue' => 'У вас ещё нет счетов дохода. Счета дохода - это источники вашего дохода (например, ваш работодатель).', + 'no_accounts_imperative_revenue' => 'Счета дохода создаются автоматически при создании транзакций, но вы можете создать их вручную, если хотите. Давайте создадим один сейчас:', + 'no_accounts_create_revenue' => 'Создать счёт дохода', + 'no_accounts_title_liabilities' => 'Давайте создадим первый долговой счёт!', + 'no_accounts_intro_liabilities' => 'У вас пока нет обязательств. Обязательства являются счетами, которые регистрируют ваши ссуды (например, студенческие) и другие долги.', + 'no_accounts_imperative_liabilities' => 'Вам не обязательно использовать эту функцию, но она может быть полезной, если вы хотите отслеживать такие вещи.', + 'no_accounts_create_liabilities' => 'Создать новый долговой счёт', + 'no_budgets_title_default' => 'Давайте создадим бюджет', + 'no_rules_title_default' => 'Давайте создадим правило', + 'no_budgets_intro_default' => 'У вас пока нет бюджетов. Бюджеты используются для упорядочивания ваших расходов в логические группы, с помощью наблюдения за которыми вы можете ограничить свои расходы.', + 'no_rules_intro_default' => 'У Вас пока нет правил. Правила - это мощные автоматизации, которые могут обрабатывать транзакции за вас.', + 'no_rules_imperative_default' => 'Правила могут быть очень полезны при управлении транзакциями. Давайте создадим одно сейчас:', + 'no_budgets_imperative_default' => 'Бюджеты - это основные инструменты управления финансами. Давайте создадим один сейчас:', + 'no_budgets_create_default' => 'Создать бюджет', + 'no_rules_create_default' => 'Создать правило', + 'no_categories_title_default' => 'Давайте создадим категорию!', + 'no_categories_intro_default' => 'У вас пока нет категорий. Категории используются для точной настройки ваших транзакций и их маркировки.', + 'no_categories_imperative_default' => 'Категории создаются автоматически при создании транзакций, но вы также можете создать их вручную. Давайте создадим одну сейчас:', + 'no_categories_create_default' => 'Создать категорию', + 'no_tags_title_default' => 'Давайте создадим метку!', + 'no_tags_intro_default' => 'У вас еще нет меток. Метки используются для точной настройки транзакций и маркировки их конкретными ключевыми словами.', + 'no_tags_imperative_default' => 'Метки создаются автоматически при создании транзакций, но вы также можете создать их вручную. Давайте создадим одну сейчас:', + 'no_tags_create_default' => 'Создать метку', + 'no_transactions_title_withdrawal' => 'Давайте создадим расход!', + 'no_transactions_intro_withdrawal' => 'У вас пока нет расходов. Вы должны создать хотя бы один расход, чтобы начать управлять своими финансами.', + 'no_transactions_imperative_withdrawal' => 'Вы потратили часть своих денег? Это нужно записать:', + 'no_transactions_create_withdrawal' => 'Создать расход', + 'no_transactions_title_deposit' => 'Давайте создадим какой-нибудь доход!', + 'no_transactions_intro_deposit' => 'У вас пока нет учтённых доходов. Вы должны создать запись дохода, чтобы начать управлять своими финансами.', + 'no_transactions_imperative_deposit' => 'Вы получили какие-нибудь деньги? Вам нужно это записать:', + 'no_transactions_create_deposit' => 'Создать доход', + 'no_transactions_title_transfers' => 'Давайте создадим перевод!', + 'no_transactions_intro_transfers' => 'У вас ещё нет переводов. Когда вы перемещаете деньги между счетами, это нужно записывать как перевод.', + 'no_transactions_imperative_transfers' => 'Вы переместили часть своих денег? Это нужно записать:', + 'no_transactions_create_transfers' => 'Создать перевод', + 'no_piggies_title_default' => 'Давайте создадим копилку!', + 'no_piggies_intro_default' => 'У вас пока нет копилок. Вы можете создавать копилки, чтобы разделить свои сбережения и следить за тем, за что вы сберегаете.', + 'no_piggies_imperative_default' => 'Вы хотите накопить денег на что-нибудь? Создайте копилку и следите за своими сбережениями:', + 'no_piggies_create_default' => 'Создать новую копилку', + 'no_bills_title_default' => 'Давайте создадим счёт на оплату!', + 'no_bills_intro_default' => 'У вас пока нет счетов на оплату. Вы можете создавать счета для отслеживания регулярных расходов, таких как арендная плата или страхование.', + 'no_bills_imperative_default' => 'У вас есть такие регулярные платежи? Создайте счёт на оплату и отслеживайте свои платежи:', + 'no_bills_create_default' => 'Создать счет к оплате', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Повторяющиеся транзакции', - 'repeat_until_in_past' => 'Повторение этой повторяющейся транзакции прервано :date.', - 'recurring_calendar_view' => 'Календарь', - 'no_recurring_title_default' => 'Давайте создадим повторяющуюся транзакцию!', - 'no_recurring_intro_default' => 'У вас пока нет повторяющихся транзакций. Вы можете использовать их для автоматического создания транзакций в Firefly III.', - 'no_recurring_imperative_default' => 'Это очень продвинутая функция, но она может быть очень полезна. Убедитесь, что вы прочитали документацию (значок "?" в правом верхнем углу), прежде чем продолжить.', - 'no_recurring_create_default' => 'Создать повторяющуюся транзакцию', - 'make_new_recurring' => 'Создать повторяющуюся транзакцию', - 'recurring_daily' => 'Каждый день', - 'recurring_weekly' => 'Каждую неделю в :weekday', - 'recurring_weekly_skip' => 'Каждую :skip(st/nd/rd/th) неделю в :weekday', - 'recurring_monthly' => 'Каждый месяц в :dayOfMonth(st/nd/rd/th) день', - 'recurring_monthly_skip' => 'Каждый :skip(st/nd/rd/th) месяц в :dayOfMonth(st/nd/rd/th) день', - 'recurring_ndom' => 'Каждый месяц в :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => 'Каждый год на :date', - 'overview_for_recurrence' => 'Обзор повторяющейся транзакции ":title"', - 'warning_duplicates_repetitions' => 'В редких случаях даты в этом списке появляются дважды. Это может произойти, когда несколько повторяющихся транзакций пересекаются. Firefly III всегда будет генерировать одну транзакцию в день.', - 'created_transactions' => 'Связанные транзакции', - 'expected_withdrawals' => 'Просроченные расходы', - 'expected_deposits' => 'Просроченные доходы', - 'expected_transfers' => 'Просроченные переводы', - 'created_withdrawals' => 'Расходы созданы', - 'created_deposits' => 'Доходы созданы', - 'created_transfers' => 'Переводы созданы', - 'recurring_info' => 'Повторяющаяся транзакция :count / :total', - 'created_from_recurrence' => 'Создано из повторяющейся транзакции ":title" (#:id)', - 'recurring_never_cron' => 'Похоже, что задание cron, которое необходимо для работы повторяющихся транзакций, никогда не запускалось. Это совершенно нормально, если вы только что установили Firefly III, но возможно стоит проверить кое-какие настройки как можно скорее. Пожалуйста, перечитайте страницу справки, используя значок (?) в верхнем правом углу этой страницы.', - 'recurring_cron_long_ago' => 'Похоже, что прошло более 36 часов с того времени, когда задание cron должно было быть выполнено в последний раз. Вы уверены, что всё настроено правильно? Пожалуйста, перечитайте страницу справки, используя значок (?) в верхнем правом углу этой страницы.', + 'create_right_now' => 'Создать прямо сейчас', + 'no_new_transaction_in_recurrence' => 'Не было создано ни одной новой транзакции. Возможно, она уже была запущена на эту дату?', + 'recurrences' => 'Повторяющиеся транзакции', + 'repeat_until_in_past' => 'Повторение этой повторяющейся транзакции прервано :date.', + 'recurring_calendar_view' => 'Календарь', + 'no_recurring_title_default' => 'Давайте создадим повторяющуюся транзакцию!', + 'no_recurring_intro_default' => 'У вас пока нет повторяющихся транзакций. Вы можете использовать их для автоматического создания транзакций в Firefly III.', + 'no_recurring_imperative_default' => 'Это очень продвинутая функция, но она может быть очень полезна. Убедитесь, что вы прочитали документацию (значок "?" в правом верхнем углу), прежде чем продолжить.', + 'no_recurring_create_default' => 'Создать повторяющуюся транзакцию', + 'make_new_recurring' => 'Создать повторяющуюся транзакцию', + 'recurring_daily' => 'Каждый день', + 'recurring_weekly' => 'Каждую неделю в :weekday', + 'recurring_weekly_skip' => 'Каждую :skip(st/nd/rd/th) неделю в :weekday', + 'recurring_monthly' => 'Каждый месяц в :dayOfMonth(st/nd/rd/th) день', + 'recurring_monthly_skip' => 'Каждый :skip(st/nd/rd/th) месяц в :dayOfMonth(st/nd/rd/th) день', + 'recurring_ndom' => 'Каждый месяц в :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => 'Каждый год на :date', + 'overview_for_recurrence' => 'Обзор повторяющейся транзакции ":title"', + 'warning_duplicates_repetitions' => 'В редких случаях даты в этом списке появляются дважды. Это может произойти, когда несколько повторяющихся транзакций пересекаются. Firefly III всегда будет генерировать одну транзакцию в день.', + 'created_transactions' => 'Связанные транзакции', + 'expected_withdrawals' => 'Просроченные расходы', + 'expected_deposits' => 'Просроченные доходы', + 'expected_transfers' => 'Просроченные переводы', + 'created_withdrawals' => 'Расходы созданы', + 'created_deposits' => 'Доходы созданы', + 'created_transfers' => 'Переводы созданы', + 'recurring_info' => 'Повторяющаяся транзакция :count / :total', + 'created_from_recurrence' => 'Создано из повторяющейся транзакции ":title" (#:id)', + 'recurring_never_cron' => 'Похоже, что задание cron, которое необходимо для работы повторяющихся транзакций, никогда не запускалось. Это совершенно нормально, если вы только что установили Firefly III, но возможно стоит проверить кое-какие настройки как можно скорее. Пожалуйста, перечитайте страницу справки, используя значок (?) в верхнем правом углу этой страницы.', + 'recurring_cron_long_ago' => 'Похоже, что прошло более 36 часов с того времени, когда задание cron должно было быть выполнено в последний раз. Вы уверены, что всё настроено правильно? Пожалуйста, перечитайте страницу справки, используя значок (?) в верхнем правом углу этой страницы.', - 'create_new_recurrence' => 'Создать новую повторяющуюся транзакцию', - 'help_first_date' => 'Укажите первое ожидаемое повторение. Оно должно быть в будущем.', - 'help_first_date_no_past' => 'Укажите первое ожидаемое повторение. Firefly III не будет создавать транзакции ранее этой даты.', - 'no_currency' => '(нет валюты)', - 'mandatory_for_recurring' => 'Обязательные сведения о повторении', - 'mandatory_for_transaction' => 'Обязательные сведения о транзакции', - 'optional_for_recurring' => 'Опциональные сведения о повторении', - 'optional_for_transaction' => 'Опциональные сведения о транзакции', - 'change_date_other_options' => 'Измените "начальную дату", чтобы увидеть больше опций.', - 'mandatory_fields_for_tranaction' => 'Эти значения будут использоваться при создании транзакций', - 'click_for_calendar' => 'Щёлкните здесь, чтобы открыт календарь и указать, когда транзакция будет повторяться.', - 'repeat_forever' => 'Повторять всегда', - 'repeat_until_date' => 'Повторять до указанной даты', - 'repeat_times' => 'Повторять указанное число раз', - 'recurring_skips_one' => 'Другой период', - 'recurring_skips_more' => 'Пропустить :count повторов', - 'store_new_recurrence' => 'Сохранить повторяющуюся транзакцию', - 'stored_new_recurrence' => 'Повторяющаяся транзакция ":title" успешно сохранена.', - 'edit_recurrence' => 'Изменить повторяющуюся транзакцию ":title"', - 'recurring_repeats_until' => 'Повторять до :date', - 'recurring_repeats_forever' => 'Повторять всегда', - 'recurring_repeats_x_times' => 'Повторяется :count раз|Повторяется :count раз', - 'update_recurrence' => 'Обновить повторяющуюся транзакцию', - 'updated_recurrence' => 'Повторяющаяся транзакция ":title" обновлена', - 'recurrence_is_inactive' => 'Эта повторяющаяся транзакция не активна и не создаёт новые транзакции.', - 'delete_recurring' => 'Удалить повторяющуюся транзакцию ":title"', - 'new_recurring_transaction' => 'Новая запланированная транзакция', - 'help_weekend' => 'Что должен сделать Firefly III, когда повторяющаяся транзакция попадает на субботу или воскресенье?', - 'do_nothing' => 'Просто создать транзакцию', - 'skip_transaction' => 'Пропустить транзакцию', - 'jump_to_friday' => 'Создать транзакцию в предшествующую пятницу', - 'jump_to_monday' => 'Создать транзакцию в следующий понедельник', - 'will_jump_friday' => 'Будет создана в пятницу, а не в выходной день.', - 'will_jump_monday' => 'Будет создана в понедельник, а не в выходной день.', - 'except_weekends' => 'Исключить выходные дни', - 'recurrence_deleted' => 'Повторяющаяся транзакция ":title" удалена', + 'create_new_recurrence' => 'Создать новую повторяющуюся транзакцию', + 'help_first_date' => 'Укажите первое ожидаемое повторение. Оно должно быть в будущем.', + 'help_first_date_no_past' => 'Укажите первое ожидаемое повторение. Firefly III не будет создавать транзакции ранее этой даты.', + 'no_currency' => '(нет валюты)', + 'mandatory_for_recurring' => 'Обязательные сведения о повторении', + 'mandatory_for_transaction' => 'Обязательные сведения о транзакции', + 'optional_for_recurring' => 'Опциональные сведения о повторении', + 'optional_for_transaction' => 'Опциональные сведения о транзакции', + 'change_date_other_options' => 'Измените "начальную дату", чтобы увидеть больше опций.', + 'mandatory_fields_for_tranaction' => 'Эти значения будут использоваться при создании транзакций', + 'click_for_calendar' => 'Щёлкните здесь, чтобы открыт календарь и указать, когда транзакция будет повторяться.', + 'repeat_forever' => 'Повторять всегда', + 'repeat_until_date' => 'Повторять до указанной даты', + 'repeat_times' => 'Повторять указанное число раз', + 'recurring_skips_one' => 'Другой период', + 'recurring_skips_more' => 'Пропустить :count повторов', + 'store_new_recurrence' => 'Сохранить повторяющуюся транзакцию', + 'stored_new_recurrence' => 'Повторяющаяся транзакция ":title" успешно сохранена.', + 'edit_recurrence' => 'Изменить повторяющуюся транзакцию ":title"', + 'recurring_repeats_until' => 'Повторять до :date', + 'recurring_repeats_forever' => 'Повторять всегда', + 'recurring_repeats_x_times' => 'Повторяется :count раз|Повторяется :count раз', + 'update_recurrence' => 'Обновить повторяющуюся транзакцию', + 'updated_recurrence' => 'Повторяющаяся транзакция ":title" обновлена', + 'recurrence_is_inactive' => 'Эта повторяющаяся транзакция не активна и не создаёт новые транзакции.', + 'delete_recurring' => 'Удалить повторяющуюся транзакцию ":title"', + 'new_recurring_transaction' => 'Новая запланированная транзакция', + 'help_weekend' => 'Что должен сделать Firefly III, когда повторяющаяся транзакция попадает на субботу или воскресенье?', + 'do_nothing' => 'Просто создать транзакцию', + 'skip_transaction' => 'Пропустить транзакцию', + 'jump_to_friday' => 'Создать транзакцию в предшествующую пятницу', + 'jump_to_monday' => 'Создать транзакцию в следующий понедельник', + 'will_jump_friday' => 'Будет создана в пятницу, а не в выходной день.', + 'will_jump_monday' => 'Будет создана в понедельник, а не в выходной день.', + 'except_weekends' => 'Исключить выходные дни', + 'recurrence_deleted' => 'Повторяющаяся транзакция ":title" удалена', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Баланс (:currency)', - 'box_spent_in_currency' => 'Расходы (:currency)', - 'box_earned_in_currency' => 'Доходы (:currency)', - 'box_budgeted_in_currency' => 'Запланировано в бюджете (:currency)', - 'box_bill_paid_in_currency' => 'Счета на оплату (:currency)', - 'box_bill_unpaid_in_currency' => 'Неоплаченные счета (:currency)', - 'box_left_to_spend_in_currency' => 'Осталось потратить (:currency)', - 'box_net_worth_in_currency' => 'Мои сбережения (:currency)', - 'box_spend_per_day' => 'Можно тратить в день: :amount', + 'box_balance_in_currency' => 'Баланс (:currency)', + 'box_spent_in_currency' => 'Расходы (:currency)', + 'box_earned_in_currency' => 'Доходы (:currency)', + 'box_budgeted_in_currency' => 'Запланировано в бюджете (:currency)', + 'box_bill_paid_in_currency' => 'Счета на оплату (:currency)', + 'box_bill_unpaid_in_currency' => 'Неоплаченные счета (:currency)', + 'box_left_to_spend_in_currency' => 'Осталось потратить (:currency)', + 'box_net_worth_in_currency' => 'Мои сбережения (:currency)', + 'box_spend_per_day' => 'Можно тратить в день: :amount', // debug page - 'debug_page' => 'Отладка', - 'debug_submit_instructions' => 'Если у вас возникли проблемы, вы можете использовать информацию в этом поле в качестве отладочной информации. Пожалуйста, скопируйте и вставьте эту информацию в новую или существующую проблему на GitHub. Будет сгенерирована красивая таблица, которая поможет быстро диагностировать вашу проблему.', - 'debug_pretty_table' => 'Если вы скопируете/вставите содержимое этого поля в проблему на GitHub, будет сгенерирована таблица. Пожалуйста, не окружайте этот текст апострофами или кавычками.', - 'debug_additional_data' => 'Вы также можете поделиться содержимым поля ниже. Вы можете скопировать и вставить это в новую или существующую проблему на GitHub. Однако помните, что содержимое этого поля может содержать личную информацию, такую как имена счетов, детали ваших транзакций или адреса электронной почты.', + 'debug_page' => 'Отладка', + 'debug_submit_instructions' => 'Если у вас возникли проблемы, вы можете использовать информацию в этом поле в качестве отладочной информации. Пожалуйста, скопируйте и вставьте эту информацию в новую или существующую проблему на GitHub. Будет сгенерирована красивая таблица, которая поможет быстро диагностировать вашу проблему.', + 'debug_pretty_table' => 'Если вы скопируете/вставите содержимое этого поля в проблему на GitHub, будет сгенерирована таблица. Пожалуйста, не окружайте этот текст апострофами или кавычками.', + 'debug_additional_data' => 'Вы также можете поделиться содержимым поля ниже. Вы можете скопировать и вставить это в новую или существующую проблему на GitHub. Однако помните, что содержимое этого поля может содержать личную информацию, такую как имена счетов, детали ваших транзакций или адреса электронной почты.', // object groups - 'object_groups_menu_bar' => 'Группы', - 'object_groups_page_title' => 'Группы', - 'object_groups_breadcrumb' => 'Группы', - 'object_groups_index' => 'Обзор', - 'object_groups' => 'Группы', - 'object_groups_empty_explain' => 'Некоторые вещи в Firefly III можно разделить на группы. Например, поле "Группа " на экранах редактирования и создания копилок. Когда вы зададите это поле, вы сможете редактировать названия и порядок групп на этой странице. Для получения дополнительной информации ознакомьтесь со справочными страницами (щёлкните по значку (?) в правом верхнем углу).', - 'object_group_title' => 'Название', - 'edit_object_group' => 'Изменить группу ":title"', - 'delete_object_group' => 'Удалить группу ":title"', - 'update_object_group' => 'Обновить группу', - 'updated_object_group' => 'Группа успешно обновлена ":title"', - 'deleted_object_group' => 'Группа успешно удалена ":title"', - 'object_group' => 'Группа', + 'object_groups_menu_bar' => 'Группы', + 'object_groups_page_title' => 'Группы', + 'object_groups_breadcrumb' => 'Группы', + 'object_groups_index' => 'Обзор', + 'object_groups' => 'Группы', + 'object_groups_empty_explain' => 'Некоторые вещи в Firefly III можно разделить на группы. Например, поле "Группа " на экранах редактирования и создания копилок. Когда вы зададите это поле, вы сможете редактировать названия и порядок групп на этой странице. Для получения дополнительной информации ознакомьтесь со справочными страницами (щёлкните по значку (?) в правом верхнем углу).', + 'object_group_title' => 'Название', + 'edit_object_group' => 'Изменить группу ":title"', + 'delete_object_group' => 'Удалить группу ":title"', + 'update_object_group' => 'Обновить группу', + 'updated_object_group' => 'Группа успешно обновлена ":title"', + 'deleted_object_group' => 'Группа успешно удалена ":title"', + 'object_group' => 'Группа', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Обновлены название группы транзакций', - 'ale_action_update_date' => 'Обновлена дата транзакции', - 'ale_action_update_order' => 'Обновлён порядок транзакций', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Копилка', - 'ale_action_remove_from_piggy' => 'Копилка', - 'ale_action_add_tag' => 'Добавленный тег', + 'audit_log_entries' => 'Записи журнала аудита', + 'ale_action_log_add' => 'Добавить :amount в копилку ":name"', + 'ale_action_log_remove' => 'Взять :amount из копилки ":name"', + 'ale_action_clear_budget' => 'Удалено из бюджета', + 'ale_action_update_group_title' => 'Обновлены название группы транзакций', + 'ale_action_update_date' => 'Обновлена дата транзакции', + 'ale_action_update_order' => 'Обновлён порядок транзакций', + 'ale_action_clear_category' => 'Удалено из категории', + 'ale_action_clear_notes' => 'Удаленные заметки', + 'ale_action_clear_tag' => 'Тэг очищен', + 'ale_action_clear_all_tags' => 'Все теги очищены', + 'ale_action_set_bill' => 'Привязано к счету', + 'ale_action_switch_accounts' => 'Смена счета источника и назначения', + 'ale_action_set_budget' => 'Указать бюджет', + 'ale_action_set_category' => 'Указать категорию', + 'ale_action_set_source' => 'Указать счёт-источник', + 'ale_action_set_destination' => 'Указать счёт назначения', + 'ale_action_update_transaction_type' => 'Изменен тип платежа', + 'ale_action_update_notes' => 'Заметки изменены', + 'ale_action_update_description' => 'Описание изменено', + 'ale_action_add_to_piggy' => 'Копилка', + 'ale_action_remove_from_piggy' => 'Копилка', + 'ale_action_add_tag' => 'Добавленный тег', // dashboard - 'enable_auto_convert' => 'Включить конвертацию валюты', - 'disable_auto_convert' => 'Отключить конвертацию валюты', - + 'enable_auto_convert' => 'Включить конвертацию валюты', + 'disable_auto_convert' => 'Отключить конвертацию валюты', ]; /* diff --git a/resources/lang/ru_RU/form.php b/resources/lang/ru_RU/form.php index c00b1b79a9..a4195e4731 100644 --- a/resources/lang/ru_RU/form.php +++ b/resources/lang/ru_RU/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Название банка', - 'bank_balance' => 'Бaлaнc', - 'savings_balance' => 'Сберегательный баланс', - 'credit_card_limit' => 'Лимит кредитной карты', - 'automatch' => 'Автоматическое сопоставление', - 'skip' => 'Пропустить', - 'enabled' => 'Включено', - 'name' => 'Название', - 'active' => 'Активный', - 'amount_min' => 'Минимальная сумма', - 'amount_max' => 'Максимальная сумма', - 'match' => 'Ключи для связи', - 'strict' => 'Строгий режим', - 'repeat_freq' => 'Повторы', - 'object_group' => 'Группа', - 'location' => 'Местоположение', - 'update_channel' => 'Канал обновлений', - 'currency_id' => 'Валюта', - 'transaction_currency_id' => 'Валюта', - 'auto_budget_currency_id' => 'Валюта', - 'external_ip' => 'Внешний IP-адрес вашего сервера', - 'attachments' => 'Вложения', - 'BIC' => 'BIC', - 'verify_password' => 'Проверка безопасности паролей', - 'source_account' => 'Исходный счёт', - 'destination_account' => 'Счёт назначения', - 'asset_destination_account' => 'Счёт назначения', - 'include_net_worth' => 'Включать в "Мои сбережения"', - 'asset_source_account' => 'Исходный счёт', - 'journal_description' => 'Описание', - 'note' => 'Заметки', - 'currency' => 'Валюта', - 'account_id' => 'Основной счёт', - 'budget_id' => 'Бюджет', - 'bill_id' => 'Счет', - 'opening_balance' => 'Начальный баланс', - 'tagMode' => 'Режим метки', - 'virtual_balance' => 'Виртуальный баланс', + 'bank_name' => 'Название банка', + 'bank_balance' => 'Бaлaнc', + 'savings_balance' => 'Сберегательный баланс', + 'credit_card_limit' => 'Лимит кредитной карты', + 'automatch' => 'Автоматическое сопоставление', + 'skip' => 'Пропустить', + 'enabled' => 'Включено', + 'name' => 'Название', + 'active' => 'Активный', + 'amount_min' => 'Минимальная сумма', + 'amount_max' => 'Максимальная сумма', + 'match' => 'Ключи для связи', + 'strict' => 'Строгий режим', + 'repeat_freq' => 'Повторы', + 'object_group' => 'Группа', + 'location' => 'Местоположение', + 'update_channel' => 'Канал обновлений', + 'currency_id' => 'Валюта', + 'transaction_currency_id' => 'Валюта', + 'auto_budget_currency_id' => 'Валюта', + 'external_ip' => 'Внешний IP-адрес вашего сервера', + 'attachments' => 'Вложения', + 'BIC' => 'BIC', + 'verify_password' => 'Проверка безопасности паролей', + 'source_account' => 'Исходный счёт', + 'destination_account' => 'Счёт назначения', + 'asset_destination_account' => 'Счёт назначения', + 'include_net_worth' => 'Включать в "Мои сбережения"', + 'asset_source_account' => 'Исходный счёт', + 'journal_description' => 'Описание', + 'note' => 'Заметки', + 'currency' => 'Валюта', + 'account_id' => 'Основной счёт', + 'budget_id' => 'Бюджет', + 'bill_id' => 'Счет', + 'opening_balance' => 'Начальный баланс', + 'tagMode' => 'Режим метки', + 'virtual_balance' => 'Виртуальный баланс', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Целевая сумма', 'account_role' => 'Тип счета', 'opening_balance_date' => 'Дата начального баланса', @@ -99,7 +97,7 @@ return [ 'description' => 'Описание', 'expense_account' => 'Счет расходов', 'revenue_account' => 'Доходный счет', - 'decimal_places' => 'Количество цифр после точки', + 'decimal_places' => 'Количество знаков после запятой', 'destination_amount' => 'Сумма (назначение)', 'new_email_address' => 'Новый адрес электронной почты', 'verification' => 'Проверка', @@ -147,7 +145,7 @@ return [ 'start_date' => 'Начало диапазона', 'end_date' => 'Конец диапазона', 'enddate' => 'Дата окончания', - 'move_rules_before_delete' => 'Rule group', + 'move_rules_before_delete' => 'Группа правил', 'start' => 'Начало диапазона', 'end' => 'Конец диапазона', 'delete_account' => 'Удалить счёт ":name"', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Вы действительно хотите удалить транзакцию с описанием ":description"?', 'mass_journal_are_you_sure' => 'Вы действительно хотите удалить эти транзакции?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Вы действительно хотите удалить метку ":tag"?', 'journal_link_areYouSure' => 'Вы действительно хотите удалить связь между :source и :destination?', 'linkType_areYouSure' => 'Вы уверены, что хотите удалить тип ссылки ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Альбом', 'song' => 'Композиция', - // admin 'domain' => 'Домен', 'single_user_mode' => 'Отключить регистрацию пользователей', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'Счёт FinTS', 'local_account' => 'Счёт Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'От даты', - 'to_date' => 'До даты', - 'due_date' => 'Срок оплаты', - 'payment_date' => 'Дата платежа', - 'invoice_date' => 'Дата выставления счёта', - 'internal_reference' => 'Внутренняя ссылка', - 'inward' => 'Внутреннее описание', - 'outward' => 'Внешнее описание', - 'rule_group_id' => 'Группа правил', - 'transaction_description' => 'Описание транзакции', - 'first_date' => 'Начальная дата', - 'transaction_type' => 'Тип транзакции', - 'repeat_until' => 'Повторять до тех пор, пока', - 'recurring_description' => 'Описание повторяющейся транзакции', - 'repetition_type' => 'Тип повторения', - 'foreign_currency_id' => 'Иностранная валюта', - 'repetition_end' => 'Заканчивать повторение', - 'repetitions' => 'Повторения', - 'calendar' => 'Календарь', - 'weekend' => 'Выходные', - 'client_secret' => 'Закрытый ключ клиента', - 'withdrawal_destination_id' => 'Счёт назначения', - 'deposit_source_id' => 'Исходный счёт', - 'expected_on' => 'Ожидаем', - 'paid' => 'Оплачено', - 'auto_budget_type' => 'Авто-бюджет', - 'auto_budget_amount' => 'Сумма авто-бюджета', - 'auto_budget_period' => 'Период авто-бюджета', - 'collected' => 'Получено', - 'submitted' => 'Отправлено', - 'key' => 'Ключ', - 'value' => 'Содержание записи', - 'webhook_delivery' => 'Доставка', - 'webhook_response' => 'Ответ', - 'webhook_trigger' => 'События', + 'from_date' => 'От даты', + 'to_date' => 'До даты', + 'due_date' => 'Срок оплаты', + 'payment_date' => 'Дата платежа', + 'invoice_date' => 'Дата выставления счёта', + 'internal_reference' => 'Внутренняя ссылка', + 'inward' => 'Внутреннее описание', + 'outward' => 'Внешнее описание', + 'rule_group_id' => 'Группа правил', + 'transaction_description' => 'Описание транзакции', + 'first_date' => 'Начальная дата', + 'transaction_type' => 'Тип транзакции', + 'repeat_until' => 'Повторять до тех пор, пока', + 'recurring_description' => 'Описание повторяющейся транзакции', + 'repetition_type' => 'Тип повторения', + 'foreign_currency_id' => 'Иностранная валюта', + 'repetition_end' => 'Заканчивать повторение', + 'repetitions' => 'Повторения', + 'calendar' => 'Календарь', + 'weekend' => 'Выходные', + 'client_secret' => 'Закрытый ключ клиента', + 'withdrawal_destination_id' => 'Счёт назначения', + 'deposit_source_id' => 'Исходный счёт', + 'expected_on' => 'Ожидаем', + 'paid' => 'Оплачено', + 'auto_budget_type' => 'Авто-бюджет', + 'auto_budget_amount' => 'Сумма авто-бюджета', + 'auto_budget_period' => 'Период авто-бюджета', + 'collected' => 'Получено', + 'submitted' => 'Отправлено', + 'key' => 'Ключ', + 'value' => 'Содержание записи', + 'webhook_delivery' => 'Доставка', + 'webhook_response' => 'Ответ', + 'webhook_trigger' => 'События', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ru_RU/intro.php b/resources/lang/ru_RU/intro.php index ac520032e6..0b11499ff9 100644 --- a/resources/lang/ru_RU/intro.php +++ b/resources/lang/ru_RU/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Добро пожаловать на стартовую страницу Firefly III. Пожалуйста, найдите время, чтобы ознакомиться с этим кратким введением в возможности Firefly III.', - 'index_accounts-chart' => 'Эта диаграмма показывает текущий баланс ваших счетов. Вы можете выбрать счета, видимые здесь, в настройках.', - 'index_box_out_holder' => 'Небольшие блоки, собранные на этой странице, показывают общее положение дел с вашими финансами.', - 'index_help' => 'Если вам нужна помощь со страницей или формой - нажмите эту кнопку.', - 'index_outro' => 'Большинство страниц Firefly III начнутся с небольшого тура, подобного этому. Пожалуйста, свяжитесь со мной, если у вас возникнут вопросы или комментарии. Наслаждайтесь!', - 'index_sidebar-toggle' => 'Для создания новый транзакций, счётов или другие элементов, используйте меню под этим значком.', - 'index_cash_account' => 'Это ранее созданные счета. Вы можете использовать счёт "Наличные" для отслеживания ваших наличных расходов, но это, в общем-то, не обязательно.', + 'index_intro' => 'Добро пожаловать на стартовую страницу Firefly III. Пожалуйста, найдите время, чтобы ознакомиться с этим кратким введением в возможности Firefly III.', + 'index_accounts-chart' => 'Эта диаграмма показывает текущий баланс ваших счетов. Вы можете выбрать счета, видимые здесь, в настройках.', + 'index_box_out_holder' => 'Небольшие блоки, собранные на этой странице, показывают общее положение дел с вашими финансами.', + 'index_help' => 'Если вам нужна помощь со страницей или формой - нажмите эту кнопку.', + 'index_outro' => 'Большинство страниц Firefly III начнутся с небольшого тура, подобного этому. Пожалуйста, свяжитесь со мной, если у вас возникнут вопросы или комментарии. Наслаждайтесь!', + 'index_sidebar-toggle' => 'Для создания новый транзакций, счётов или другие элементов, используйте меню под этим значком.', + 'index_cash_account' => 'Это ранее созданные счета. Вы можете использовать счёт "Наличные" для отслеживания ваших наличных расходов, но это, в общем-то, не обязательно.', // transactions - 'transactions_create_basic_info' => 'Введите основную информацию о вашей транзакции. Счёт-источник, счёт назначения, дату и описание.', - 'transactions_create_amount_info' => 'Введите сумму транзакции. Если сумма задана в иностранной валюте, эти поля, при необходимости, будут автоматически обновляться.', - 'transactions_create_optional_info' => 'Все эти поля являются необязательными. Добавление метаданных сделает ваши транзакции более организованными.', - 'transactions_create_split' => 'Если вы хотите разделить транзакцию, добавьте дополнительные фрагменты этой кнопкой', + 'transactions_create_basic_info' => 'Введите основную информацию о вашей транзакции. Счёт-источник, счёт назначения, дату и описание.', + 'transactions_create_amount_info' => 'Введите сумму транзакции. Если сумма задана в иностранной валюте, эти поля, при необходимости, будут автоматически обновляться.', + 'transactions_create_optional_info' => 'Все эти поля являются необязательными. Добавление метаданных сделает ваши транзакции более организованными.', + 'transactions_create_split' => 'Если вы хотите разделить транзакцию, добавьте дополнительные фрагменты этой кнопкой', // create account: - 'accounts_create_iban' => 'Задайте вашим счетам действующий IBAN. В будущем это может сделать импорт данных очень простым.', - 'accounts_create_asset_opening_balance' => 'У счёта активов всегда есть «начальный баланс», показывающий, какая сумма была на этом счету, когда вы начали работать с ним в Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III поддерживает несколько валют. Каждый счёт связан с одной основной валютой, которую вы должны указать здесь.', - 'accounts_create_asset_virtual' => 'Иногда бывает удобно предоставить вашему счёту виртуальный баланс: дополнительная сумма, всегда добавленная или выведенная из фактического баланса.', + 'accounts_create_iban' => 'Задайте вашим счетам действующий IBAN. В будущем это может сделать импорт данных очень простым.', + 'accounts_create_asset_opening_balance' => 'У счёта активов всегда есть «начальный баланс», показывающий, какая сумма была на этом счету, когда вы начали работать с ним в Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III поддерживает несколько валют. Каждый счёт связан с одной основной валютой, которую вы должны указать здесь.', + 'accounts_create_asset_virtual' => 'Иногда бывает удобно предоставить вашему счёту виртуальный баланс: дополнительная сумма, всегда добавленная или выведенная из фактического баланса.', // budgets index - 'budgets_index_intro' => 'Бюджеты используются для управления финансами и являются одной из основных функций Firefly III.', - 'budgets_index_set_budget' => 'Установите свой общий бюджет на каждый период, чтобы Firefly III мог подсказать вам, если вы потратите все запланированные деньги.', - 'budgets_index_see_expenses_bar' => 'По мере того, как вы будете тратить деньги, эта диаграмма будет заполняться.', - 'budgets_index_navigate_periods' => 'Перемещайтесь между периодами, чтобы планировать бюджеты заранее.', - 'budgets_index_new_budget' => 'Создавайте новые бюджеты по своему усмотрению.', - 'budgets_index_list_of_budgets' => 'Используйте эту таблицу, чтобы установить суммы для каждого бюджета и посмотреть, как у вас идут дела.', - 'budgets_index_outro' => 'Чтобы узнать больше о бюджете, воспользуйтесь значком справки в верхнем правом углу.', + 'budgets_index_intro' => 'Бюджеты используются для управления финансами и являются одной из основных функций Firefly III.', + 'budgets_index_see_expenses_bar' => 'По мере того, как вы будете тратить деньги, эта диаграмма будет заполняться.', + 'budgets_index_navigate_periods' => 'Перемещайтесь между периодами, чтобы планировать бюджеты заранее.', + 'budgets_index_new_budget' => 'Создавайте новые бюджеты по своему усмотрению.', + 'budgets_index_list_of_budgets' => 'Используйте эту таблицу, чтобы установить суммы для каждого бюджета и посмотреть, как у вас идут дела.', + 'budgets_index_outro' => 'Чтобы узнать больше о бюджете, воспользуйтесь значком справки в верхнем правом углу.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Используйте эти отчеты, чтобы получить подробные сведения о ваших финансах.', - 'reports_index_inputReportType' => 'Выберите тип отчета. Просмотрите страницу справки, чтобы узнать, что показывает каждый отчёт.', - 'reports_index_inputAccountsSelect' => 'Вы можете исключить или включить основные счета по своему усмотрению.', - 'reports_index_inputDateRange' => 'Выбранный диапазон дат зависит от вас: от одного дня до 10 лет.', - 'reports_index_extra-options-box' => 'В зависимости от выбранного вами отчёта вы можете выбрать здесь дополнительные фильтры и параметры. Посмотрите этот блок, когда вы меняете типы отчётов.', + 'reports_index_intro' => 'Используйте эти отчеты, чтобы получить подробные сведения о ваших финансах.', + 'reports_index_inputReportType' => 'Выберите тип отчета. Просмотрите страницу справки, чтобы узнать, что показывает каждый отчёт.', + 'reports_index_inputAccountsSelect' => 'Вы можете исключить или включить основные счета по своему усмотрению.', + 'reports_index_inputDateRange' => 'Выбор диапазона дат зависит от Вас: от одного дня до 10 лет или более.', + 'reports_index_extra-options-box' => 'В зависимости от выбранного вами отчёта вы можете выбрать здесь дополнительные фильтры и параметры. Посмотрите этот блок, когда вы меняете типы отчётов.', // reports (reports) - 'reports_report_default_intro' => 'В этом отчёте вы получите быстрый и исчерпывающий обзор ваших финансов. Если вы хотите увидеть что-нибудь ещё, пожалуйста, не стесняйтесь обращаться ко мне!', - 'reports_report_audit_intro' => 'Этот отчёт покажет вам подробную информацию о ваших активах.', - 'reports_report_audit_optionsBox' => 'Используйте эти флажки, чтобы показать или скрыть интересующие вас столбцы.', + 'reports_report_default_intro' => 'В этом отчёте вы получите быстрый и исчерпывающий обзор ваших финансов. Если вы хотите увидеть что-нибудь ещё, пожалуйста, не стесняйтесь обращаться ко мне!', + 'reports_report_audit_intro' => 'Этот отчёт покажет вам подробную информацию о ваших активах.', + 'reports_report_audit_optionsBox' => 'Используйте эти флажки, чтобы показать или скрыть интересующие вас столбцы.', - 'reports_report_category_intro' => 'Этот отчёт даст вам представление об одной или нескольких категориях.', - 'reports_report_category_pieCharts' => 'Эти диаграммы дадут вам представление о расходах и доходах по категориям или счетам.', - 'reports_report_category_incomeAndExpensesChart' => 'На этой диаграмме показаны ваши расходы и доход по каждой категории.', + 'reports_report_category_intro' => 'Этот отчёт даст вам представление об одной или нескольких категориях.', + 'reports_report_category_pieCharts' => 'Эти диаграммы дадут вам представление о расходах и доходах по категориям или счетам.', + 'reports_report_category_incomeAndExpensesChart' => 'На этой диаграмме показаны ваши расходы и доход по каждой категории.', - 'reports_report_tag_intro' => 'Этот отчёт даст вам представление об одной или нескольких метках.', - 'reports_report_tag_pieCharts' => 'Эти диаграммы дадут вам представление о расходах и доходах по меткам, счетам, категориям или бюджетам.', - 'reports_report_tag_incomeAndExpensesChart' => 'На этой диаграмме показаны ваши расходы и доходы с определенной меткой.', + 'reports_report_tag_intro' => 'Этот отчёт даст вам представление об одной или нескольких метках.', + 'reports_report_tag_pieCharts' => 'Эти диаграммы дадут вам представление о расходах и доходах по меткам, счетам, категориям или бюджетам.', + 'reports_report_tag_incomeAndExpensesChart' => 'На этой диаграмме показаны ваши расходы и доходы с определенной меткой.', 'reports_report_budget_intro' => 'Этот отчёт даст вам представление об одном или нескольких бюджетах.', 'reports_report_budget_pieCharts' => 'Эти диаграммы дадут вам представление о расходах по выбранному бюджету или счёту.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Рядом с этим индикатором выполнения находятся две кнопки (+ и -) для добавления или удаления денег из каждой копилки.', 'piggy-banks_index_accountStatus' => 'Для каждого основного счёта, связанного хотя бы с одной копилкой, статус указан в этой таблице.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Какова ваша цель? Новый диван, камера, деньги на "чёрный день"?', 'piggy-banks_create_date' => 'Вы можете указать конкретную дату или крайний срок для наполнения своей копилки.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Используйте счета, чтобы отслеживать суммы денег, которое вы должны заплатить за каждый период. Подумайте о расходах, таких как аренда, страхование или ипотечные платежи.', 'bills_create_name' => 'Используйте понятные названия, например «Аренда» или «Расходы на лечение».', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Выберите минимальную и максимальную сумму для этого счета.', 'bills_create_repeat_freq_holder' => 'Обычно счета к оплате выставляются раз в месяц, но здесь вы можете указать другую периодичность.', 'bills_create_skip_holder' => 'Если счёт выставляется каждые 2 недели, в поле "пропустить" нужно поставить "1", чтобы пропускать все прочие недели.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Используйте эту кнопку, чтобы узнать, какие транзакции будут соответствовать вашему правилу.', 'rules_create_actions' => 'Установите столько действий, сколько хотите.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'На этих вкладках доступны дополнительные параметры.', diff --git a/resources/lang/ru_RU/list.php b/resources/lang/ru_RU/list.php index 80b91b45e0..46e4de36a7 100644 --- a/resources/lang/ru_RU/list.php +++ b/resources/lang/ru_RU/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Кнопки', - 'icon' => 'Значок', - 'id' => 'ID', - 'create_date' => 'Создан', - 'update_date' => 'Обновлён', - 'updated_at' => 'Последнее изменение', - 'balance_before' => 'Баланс до', - 'balance_after' => 'Баланс после', - 'name' => 'Имя', - 'role' => 'Роль', - 'currentBalance' => 'Текущий баланс', - 'linked_to_rules' => 'Подходящие правила', - 'active' => 'Активен?', - 'percentage' => 'процентов', - 'recurring_transaction' => 'Повторяющаяся транзакция', - 'next_due' => 'Следующий срок оплаты', - 'transaction_type' => 'Тип', - 'lastActivity' => 'Последняя активность', - 'balanceDiff' => 'Разность баланса', - 'other_meta_data' => 'Другие метаданные', - 'invited_at' => 'Приглашён в', - 'expires' => 'Приглашение истекает', - 'invited_by' => 'Пригласил', - 'invite_link' => 'Ссылка на приглашение', - 'account_type' => 'Тип профиля', - 'created_at' => 'Создан', - 'account' => 'Счёт', - 'external_url' => 'Внешний ссылка', - 'matchingAmount' => 'Сумма', - 'destination' => 'Получатель', - 'source' => 'Источник', - 'next_expected_match' => 'Следующий ожидаемый результат', - 'automatch' => 'Автоподбор?', + 'buttons' => 'Кнопки', + 'icon' => 'Значок', + 'id' => 'ID', + 'create_date' => 'Создан', + 'update_date' => 'Обновлён', + 'updated_at' => 'Последнее изменение', + 'balance_before' => 'Баланс до', + 'balance_after' => 'Баланс после', + 'name' => 'Имя', + 'role' => 'Роль', + 'currentBalance' => 'Текущий баланс', + 'linked_to_rules' => 'Подходящие правила', + 'active' => 'Активен?', + 'percentage' => 'процентов', + 'recurring_transaction' => 'Повторяющаяся транзакция', + 'next_due' => 'Следующий срок оплаты', + 'transaction_type' => 'Тип', + 'lastActivity' => 'Последняя активность', + 'balanceDiff' => 'Разность баланса', + 'other_meta_data' => 'Другие метаданные', + 'invited_at' => 'Приглашён в', + 'expires' => 'Приглашение истекает', + 'invited_by' => 'Пригласил', + 'invite_link' => 'Ссылка на приглашение', + 'account_type' => 'Тип профиля', + 'created_at' => 'Создан', + 'account' => 'Счёт', + 'external_url' => 'Внешний ссылка', + 'matchingAmount' => 'Сумма', + 'destination' => 'Получатель', + 'source' => 'Источник', + 'next_expected_match' => 'Следующий ожидаемый результат', + 'automatch' => 'Автоподбор?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Повторы', 'description' => 'Описание', 'amount' => 'Сумма', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Счёт с bunq', 'file_name' => 'Имя файла', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Размер файла', - 'file_type' => 'Тип файла', - 'attached_to' => 'Прикреплено к', - 'file_exists' => 'Файл существует', - 'spectre_bank' => 'Банк', - 'spectre_last_use' => 'Последний вход', - 'spectre_status' => 'Статус', - 'bunq_payment_id' => 'ID платежа bunq', - 'repetitions' => 'Повторы', - 'title' => 'Название', - 'transaction_s' => 'Транзакции', - 'field' => 'Поле', - 'value' => 'Значение', - 'interest' => 'Процентная ставка', - 'interest_period' => 'Период начисления процентов', - 'liability_type' => 'Тип ответственности', - 'liability_direction' => 'Обязательства (входящие и исходящие)', - 'end_date' => 'Дата окончания', - 'payment_info' => 'Иформация о платеже', - 'expected_info' => 'Следующая ожидаемая операция', - 'start_date' => 'Начальная дата', - 'trigger' => 'Событие', - 'response' => 'Ответ', - 'delivery' => 'Доставка', - 'url' => 'Ссылка', - 'secret' => 'Секрет', - + 'file_size' => 'Размер файла', + 'file_type' => 'Тип файла', + 'attached_to' => 'Прикреплено к', + 'file_exists' => 'Файл существует', + 'spectre_bank' => 'Банк', + 'spectre_last_use' => 'Последний вход', + 'spectre_status' => 'Статус', + 'bunq_payment_id' => 'ID платежа bunq', + 'repetitions' => 'Повторы', + 'title' => 'Название', + 'transaction_s' => 'Транзакции', + 'field' => 'Поле', + 'value' => 'Значение', + 'interest' => 'Процентная ставка', + 'interest_period' => 'Период начисления процентов', + 'liability_type' => 'Тип ответственности', + 'liability_direction' => 'Обязательства (входящие и исходящие)', + 'end_date' => 'Дата окончания', + 'payment_info' => 'Иформация о платеже', + 'expected_info' => 'Следующая ожидаемая операция', + 'start_date' => 'Начальная дата', + 'trigger' => 'Событие', + 'response' => 'Ответ', + 'delivery' => 'Доставка', + 'url' => 'Ссылка', + 'secret' => 'Секрет', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/ru_RU/pagination.php b/resources/lang/ru_RU/pagination.php index fb76080518..de41617552 100644 --- a/resources/lang/ru_RU/pagination.php +++ b/resources/lang/ru_RU/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ru_RU/passwords.php b/resources/lang/ru_RU/passwords.php index 26da201632..809aca2949 100644 --- a/resources/lang/ru_RU/passwords.php +++ b/resources/lang/ru_RU/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/ru_RU/rules.php b/resources/lang/ru_RU/rules.php index 0ffc57b3dd..fd167a059c 100644 --- a/resources/lang/ru_RU/rules.php +++ b/resources/lang/ru_RU/rules.php @@ -1,6 +1,5 @@ 'Action ":action", present in rule ":rule", could not be applied to transaction #:group: :error', - 'find_or_create_tag_failed' => 'Could not find or create tag ":tag"', - 'tag_already_added' => 'Tag ":tag" is already linked to this transaction', - 'inspect_transaction' => 'Inspect transaction ":title" @ Firefly III', - 'inspect_rule' => 'Inspect rule ":title" @ Firefly III', - 'journal_other_user' => 'This transaction doesn\'t belong to the user', - 'no_such_journal' => 'This transaction doesn\'t exist', - 'journal_already_no_budget' => 'This transaction has no budget, so it cannot be removed', - 'journal_already_no_category' => 'This transaction had no category, so it cannot be removed', - 'journal_already_no_notes' => 'This transaction had no notes, so they cannot be removed', - 'journal_not_found' => 'Firefly III can\'t find the requested transaction', - 'split_group' => 'Firefly III cannot execute this action on a transaction with multiple splits', - 'is_already_withdrawal' => 'This transaction is already a withdrawal', - 'is_already_deposit' => 'This transaction is already a deposit', - 'is_already_transfer' => 'This transaction is already a transfer', - 'is_not_transfer' => 'This transaction is not a transfer', - 'complex_error' => 'Something complicated went wrong. Sorry about that. Please inspect the logs of Firefly III', - 'no_valid_opposing' => 'Conversion failed because there is no valid account named ":account"', - 'new_notes_empty' => 'The notes to be set are empty', - 'unsupported_transaction_type_withdrawal' => 'Firefly III cannot convert a ":type" to a withdrawal', - 'unsupported_transaction_type_deposit' => 'Firefly III cannot convert a ":type" to a deposit', - 'unsupported_transaction_type_transfer' => 'Firefly III cannot convert a ":type" to a transfer', - 'already_has_source_asset' => 'This transaction already has ":name" as the source asset account', - 'already_has_destination_asset' => 'This transaction already has ":name" as the destination asset account', - 'already_has_destination' => 'This transaction already has ":name" as the destination account', - 'already_has_source' => 'This transaction already has ":name" as the source account', - 'already_linked_to_subscription' => 'The transaction is already linked to subscription ":name"', + 'main_message' => 'Действие ":action", присутствующее в правиле ":rule", не может быть применено к транзакции #:group: :error', + 'find_or_create_tag_failed' => 'Не удалось найти или создать тег ":tag"', + 'tag_already_added' => 'Тег ":tag" уже связан с этой транзакцией', + 'inspect_transaction' => 'Проверка транзакции ":title" @ Firefly III', + 'inspect_rule' => 'Проверьте правило ":title" @ Firefly III', + 'journal_other_user' => 'Эта транзакция не принадлежит пользователю', + 'no_such_journal' => 'Эта транзакция не существует', + 'journal_already_no_budget' => 'Эта транзакция не имеет бюджета, поэтому её нельзя удалить', + 'journal_already_no_category' => 'Эта транзакция не имеет категории, поэтому ее нельзя удалить', + 'journal_already_no_notes' => 'У этой транзакции нет заметок, поэтому они не могут быть удалены', + 'journal_not_found' => 'Firefly III не может найти запрошенную транзакцию', + 'split_group' => 'Firefly III не может выполнить это действие для транзакции с множественным разбиением', + 'is_already_withdrawal' => 'Эта транзакция уже является расходом', + 'is_already_deposit' => 'Эта транзакция уже является доходом', + 'is_already_transfer' => 'Эта транзакция уже является переводом', + 'is_not_transfer' => 'Эта транзакция не является переводом', + 'complex_error' => 'Что-то сложное пошло не так. Извините за это. Пожалуйста, проверьте журналы Firefly III', + 'no_valid_opposing' => 'Преобразование не удалось, так как нет действующего счета с именем ":account"', + 'new_notes_empty' => 'Заметки должны быть заполнены', + 'unsupported_transaction_type_withdrawal' => 'Firefly III не может конвертировать ":type" в расход', + 'unsupported_transaction_type_deposit' => 'Firefly III не может конвертировать ":type" в доход', + 'unsupported_transaction_type_transfer' => 'Firefly III не может конвертировать ":type" в перевод', + 'already_has_source_asset' => 'Эта транзакция уже имеет ":name" в качестве основного счета-источника', + 'already_has_destination_asset' => 'Эта транзакция уже имеет ":name" в качестве основного счета назначения', + 'already_has_destination' => 'Эта транзакция уже имеет ":name" в качестве счета назначения', + 'already_has_source' => 'Эта транзакция уже имеет ":name" в качестве счета-источника', + 'already_linked_to_subscription' => 'Транзакция уже связана с подпиской ":name"', 'already_linked_to_category' => 'Транзакция уже связана с категорией ":name"', 'already_linked_to_budget' => 'Транзакция уже связана с бюджетом ":name"', - 'cannot_find_subscription' => 'Firefly III can\'t find subscription ":name"', - 'no_notes_to_move' => 'The transaction has no notes to move to the description field', - 'no_tags_to_remove' => 'The transaction has no tags to remove', - 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', - 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', - 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', - 'cannot_find_source_transaction' => 'Firefly III can\'t find the source transaction', - 'cannot_find_destination_transaction' => 'Firefly III can\'t find the destination transaction', - 'cannot_find_source_transaction_account' => 'Firefly III can\'t find the source transaction account', - 'cannot_find_destination_transaction_account' => 'Firefly III can\'t find the destination transaction account', - 'cannot_find_piggy' => 'Firefly III can\'t find a piggy bank named ":name"', - 'no_link_piggy' => 'This transaction\'s accounts are not linked to the piggy bank, so no action will be taken', - 'cannot_unlink_tag' => 'Tag ":tag" isn\'t linked to this transaction', - 'cannot_find_budget' => 'Firefly III can\'t find budget ":name"', - 'cannot_find_category' => 'Firefly III can\'t find category ":name"', - 'cannot_set_budget' => 'Firefly III can\'t set budget ":name" to a transaction of type ":type"', + 'cannot_find_subscription' => 'Firefly III не может найти подписку ":name"', + 'no_notes_to_move' => 'Транзакция не имеет заметок для перемещения в поле описания', + 'no_tags_to_remove' => 'У транзакции нет тегов для удаления', + 'not_withdrawal' => 'Транзакция не является снятием', + 'not_deposit' => 'Транзакция не является депозитом', + 'cannot_find_tag' => 'Firefly III не может найти тег ":tag"', + 'cannot_find_asset' => 'Firefly III не может найти основной счет ":name"', + 'cannot_find_accounts' => 'Firefly III не может найти счет источника или назначения', + 'cannot_find_source_transaction' => 'Firefly III не может найти транзакцию источника', + 'cannot_find_destination_transaction' => 'Firefly III не может найти транзакцию назначения', + 'cannot_find_source_transaction_account' => 'Firefly III не может найти счет транзакции источника', + 'cannot_find_destination_transaction_account' => 'Firefly III не может найти счет транзакции назначения', + 'cannot_find_piggy' => 'Firefly III не может найти копилку с именем ":name"', + 'no_link_piggy' => 'Счета этих транзакций не привязаны к копилке, поэтому никакие действия не будут предприняты', + 'cannot_unlink_tag' => 'Тег ":tag" не связан с этой транзакцией', + 'cannot_find_budget' => 'Firefly III не может найти бюджет ":name"', + 'cannot_find_category' => 'Firefly III не может найти категорию ":name"', + 'cannot_set_budget' => 'Firefly III не может установить бюджет ":name" транзакции типа ":type"', ]; diff --git a/resources/lang/ru_RU/validation.php b/resources/lang/ru_RU/validation.php index dd3bef6edd..a37d8fe832 100644 --- a/resources/lang/ru_RU/validation.php +++ b/resources/lang/ru_RU/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'В массиве отсутствует связка "where" ("где")', - 'missing_update' => 'В массиве отсутствует связка "update" ("обновить")', - 'invalid_where_key' => 'JSON содержит недопустимый ключ для связки "where" ("где")', - 'invalid_update_key' => 'JSON содержит недопустимый ключ для связки "update" ("обновить")', - 'invalid_query_data' => 'В поле %s:%s вашего запроса содержатся неверные данные.', - 'invalid_query_account_type' => 'Ваш запрос содержит счета разных типов, что недопустимо.', - 'invalid_query_currency' => 'Ваш запрос содержит счета с разными валютами, что недопустимо.', - 'iban' => 'Это некорректный IBAN.', - 'zero_or_more' => 'Это значение не может быть отрицательным.', - 'date_or_time' => 'Значение должно быть корректной датой или временем (ISO 8601).', - 'source_equals_destination' => 'Счёт источник и счёт назначения совпадают.', - 'unique_account_number_for_user' => 'Этот номер счёта уже используется.', - 'unique_iban_for_user' => 'Этот IBAN уже используется.', - 'deleted_user' => 'По соображениям безопасности, вы не можете зарегистрироваться, используя этот адрес электронной почты.', - 'rule_trigger_value' => 'Это значение является недопустимым для выбранного триггера.', - 'rule_action_value' => 'Это значение является недопустимым для выбранного действия.', - 'file_already_attached' => 'Загруженный файл ":name" уже прикреплён к этому объекту.', - 'file_attached' => 'Файл ":name". успешно загружен.', - 'must_exist' => 'ID в поле field :attribute не существует в базе данных.', - 'all_accounts_equal' => 'Все счета в данном поле должны совпадать.', - 'group_title_mandatory' => 'Название группы является обязательным, если транзакций несколько.', - 'transaction_types_equal' => 'Все части транзакции должны быть одного типа.', - 'invalid_transaction_type' => 'Недопустимый тип транзакции.', - 'invalid_selection' => 'Вы сделали неправильный выбор.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Необходима как минимум одна транзакция.', - 'recurring_transaction_id' => 'Необходима минимум одна транзакция.', - 'need_id_to_match' => 'Вы должны отправить эту запись с ID для того, чтобы API мог сопоставить её.', - 'too_many_unmatched' => 'Слишком много отправленных транзакций не могут быть сопоставлены с соответствующими записями в базе данных. Убедитесь, что существующие записи имеют правильный ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Необходима как минимум одна транзакция.', - 'require_repeat_until' => 'Требуется либо несколько повторений, либо конечная дата (repeat_until). Но не оба параметра разом.', - 'require_currency_info' => 'Содержимое этого поля недействительно без информации о валюте.', - 'not_transfer_account' => 'Этот счёт нельзя использовать для перевода.', - 'require_currency_amount' => 'Содержимое этого поля недействительно без информации о валюте.', - 'require_foreign_currency' => 'Это поле требует число', - 'require_foreign_dest' => 'Это значение поля должно совпадать с валютой счета назначения.', - 'require_foreign_src' => 'Это поле должно совпадать с валютой исходного счета.', - 'equal_description' => 'Описание транзакции не должно совпадать с глобальным описанием.', - 'file_invalid_mime' => 'Файл ":name" имеет тип ":mime". Загрузка файлов такого типа невозможна.', - 'file_too_large' => 'Файл ":name" слишком большой.', - 'belongs_to_user' => 'Значение :attribute неизвестно.', - 'accepted' => 'Необходимо принять :attribute.', - 'bic' => 'Это некорректный BIC.', - 'at_least_one_trigger' => 'Правило должно иметь хотя бы одно условие.', - 'at_least_one_active_trigger' => 'Правило должно иметь хотя бы один активный триггер.', - 'at_least_one_action' => 'Правило должно иметь хотя бы одно действие.', - 'at_least_one_active_action' => 'Правило должно иметь по крайней мере одно активное действие.', - 'base64' => 'Это некорректный формат для данных, зашифрованных с помощью base64.', - 'model_id_invalid' => 'Данный ID кажется недопустимым для этой модели.', - 'less' => ':attribute должен быть меньше 10,000,000', - 'active_url' => ':attribute не является допустимым URL-адресом.', - 'after' => ':attribute должна быть позже :date.', - 'date_after' => 'Дата начала должна быть до даты окончания.', - 'alpha' => ':attribute может содержать только буквы.', - 'alpha_dash' => ':attribute может содержать только буквы, числа и дефис.', - 'alpha_num' => ':attribute может содержать только буквы и числа.', - 'array' => ':attribute должен быть массивом.', - 'unique_for_user' => 'Уже существует запись с этим :attribute.', - 'before' => ':attribute должна быть раньше :date.', - 'unique_object_for_user' => 'Это название уже используется.', - 'unique_account_for_user' => 'Такое название счёта уже используется.', + 'bad_type_source' => 'Firefly III не может определить тип транзакции на основе этого исходного счета.', + 'bad_type_destination' => 'Firefly III не может определить тип транзакции на основе этого счета.', + 'missing_where' => 'В массиве отсутствует связка "where" ("где")', + 'missing_update' => 'В массиве отсутствует связка "update" ("обновить")', + 'invalid_where_key' => 'JSON содержит недопустимый ключ для связки "where" ("где")', + 'invalid_update_key' => 'JSON содержит недопустимый ключ для связки "update" ("обновить")', + 'invalid_query_data' => 'В поле %s:%s вашего запроса содержатся неверные данные.', + 'invalid_query_account_type' => 'Ваш запрос содержит счета разных типов, что недопустимо.', + 'invalid_query_currency' => 'Ваш запрос содержит счета с разными валютами, что недопустимо.', + 'iban' => 'Это некорректный IBAN.', + 'zero_or_more' => 'Это значение не может быть отрицательным.', + 'more_than_zero' => 'Значение должно быть больше нуля.', + 'more_than_zero_correct' => 'Значение должно быть ноль или больше.', + 'no_asset_account' => 'Это не счет активов.', + 'date_or_time' => 'Значение должно быть корректной датой или временем (ISO 8601).', + 'source_equals_destination' => 'Счёт источник и счёт назначения совпадают.', + 'unique_account_number_for_user' => 'Этот номер счёта уже используется.', + 'unique_iban_for_user' => 'Этот IBAN уже используется.', + 'reconciled_forbidden_field' => 'Эта транзакция уже сверена, вы не можете изменить ":field"', + 'deleted_user' => 'По соображениям безопасности, вы не можете зарегистрироваться, используя этот адрес электронной почты.', + 'rule_trigger_value' => 'Это значение является недопустимым для выбранного триггера.', + 'rule_action_value' => 'Это значение является недопустимым для выбранного действия.', + 'file_already_attached' => 'Загруженный файл ":name" уже прикреплён к этому объекту.', + 'file_attached' => 'Файл ":name". успешно загружен.', + 'must_exist' => 'ID в поле field :attribute не существует в базе данных.', + 'all_accounts_equal' => 'Все счета в данном поле должны совпадать.', + 'group_title_mandatory' => 'Название группы является обязательным, если транзакций несколько.', + 'transaction_types_equal' => 'Все части транзакции должны быть одного типа.', + 'invalid_transaction_type' => 'Недопустимый тип транзакции.', + 'invalid_selection' => 'Вы сделали неправильный выбор.', + 'belongs_user' => 'Это значение связано с объектом, который не существует.', + 'belongs_user_or_user_group' => 'Это значение связано с объектом, который не существует в Вашем текущем финансовом администрировании.', + 'at_least_one_transaction' => 'Необходима как минимум одна транзакция.', + 'recurring_transaction_id' => 'Необходима минимум одна транзакция.', + 'need_id_to_match' => 'Вы должны отправить эту запись с ID для того, чтобы API мог сопоставить её.', + 'too_many_unmatched' => 'Слишком много отправленных транзакций не могут быть сопоставлены с соответствующими записями в базе данных. Убедитесь, что существующие записи имеют правильный ID.', + 'id_does_not_match' => 'Отправленный ID #:id не соответствует ожидаемому ID. Убедитесь, что он совпадает или не соответствует поле.', + 'at_least_one_repetition' => 'Необходима как минимум одна транзакция.', + 'require_repeat_until' => 'Требуется либо несколько повторений, либо конечная дата (repeat_until). Но не оба параметра разом.', + 'require_currency_info' => 'Содержимое этого поля недействительно без информации о валюте.', + 'not_transfer_account' => 'Этот счёт нельзя использовать для перевода.', + 'require_currency_amount' => 'Содержимое этого поля недействительно без информации о валюте.', + 'require_foreign_currency' => 'Это поле требует число', + 'require_foreign_dest' => 'Это значение поля должно совпадать с валютой счета назначения.', + 'require_foreign_src' => 'Это поле должно совпадать с валютой исходного счета.', + 'equal_description' => 'Описание транзакции не должно совпадать с глобальным описанием.', + 'file_invalid_mime' => 'Файл ":name" имеет тип ":mime". Загрузка файлов такого типа невозможна.', + 'file_too_large' => 'Файл ":name" слишком большой.', + 'belongs_to_user' => 'Значение :attribute неизвестно.', + 'accepted' => 'Необходимо принять :attribute.', + 'bic' => 'Это некорректный BIC.', + 'at_least_one_trigger' => 'Правило должно иметь хотя бы одно условие.', + 'at_least_one_active_trigger' => 'Правило должно иметь хотя бы один активный триггер.', + 'at_least_one_action' => 'Правило должно иметь хотя бы одно действие.', + 'at_least_one_active_action' => 'Правило должно иметь по крайней мере одно активное действие.', + 'base64' => 'Это некорректный формат для данных, зашифрованных с помощью base64.', + 'model_id_invalid' => 'Данный ID кажется недопустимым для этой модели.', + 'less' => ':attribute должен быть меньше 10,000,000', + 'active_url' => ':attribute не является допустимым URL-адресом.', + 'after' => ':attribute должна быть позже :date.', + 'date_after' => 'Дата начала должна быть до даты окончания.', + 'alpha' => ':attribute может содержать только буквы.', + 'alpha_dash' => ':attribute может содержать только буквы, числа и дефис.', + 'alpha_num' => ':attribute может содержать только буквы и числа.', + 'array' => ':attribute должен быть массивом.', + 'unique_for_user' => 'Уже существует запись с этим :attribute.', + 'before' => ':attribute должна быть раньше :date.', + 'unique_object_for_user' => 'Это название уже используется.', + 'unique_account_for_user' => 'Такое название счёта уже используется.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute должен быть больше :min и меньше :max.', + 'between.file' => ':attribute должен быть размером :min - :max килобайт.', + 'between.string' => ':attribute должен содержать :min - :max символов.', + 'between.array' => ':attribute должен содержать :min - :max элементов.', + 'boolean' => 'Поле :attribute должно быть истинным или ложным.', + 'confirmed' => ':attribute не совпадает с подтверждением.', + 'date' => ':attribute не является верной датой.', + 'date_format' => ':attribute не совпадает с форматом :format.', + 'different' => ':attribute и :other не должны совпадать.', + 'digits' => ':attribute должно содержать :digits цифр.', + 'digits_between' => ':attribute должен содержать :min - :max цифр.', + 'email' => ':attribute не является верным email адресом.', + 'filled' => 'Поле :attribute должно быть заполнено.', + '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' => 'Значение :attribute должно быть не меньше :min символов.', + 'min.array' => 'Значение :attribute должно содержать не меньше :min элементов.', + 'not_in' => 'Выбранный :attribute не верный.', + 'numeric' => ':attribute должен быть числом.', + 'scientific_notation' => ':attribute не может использовать научную обозначение.', + 'numeric_native' => 'Сумма должна быть числом.', + 'numeric_destination' => 'Сумма назначения должна быть числом.', + 'numeric_source' => 'Исходная сумма должна быть числом.', + 'regex' => 'Формат :attribute некорректен.', + 'required' => 'Поле :attribute является обязательным.', + 'required_if' => 'Значение :attribute является обязательным, когда :other равное :value.', + 'required_unless' => 'Поле :attribute является обязательным, если :other не входит в список :values.', + 'required_with' => 'Поле :attribute является обязательным, когда есть :values.', + 'required_with_all' => 'Поле :attribute является обязательным, когда есть :values.', + 'required_without' => 'Поле :attribute является обязательным, когда отсутствует :values.', + 'required_without_all' => ':attribute поле обязательно для заполнения, так как ни одно из :values не существует.', + 'same' => ':attribute и :other должны совпадать.', + 'size.numeric' => ':attribute должен быть размером :size.', + 'amount_min_over_max' => 'Минимальная сумма не может быть больше максимальной суммы.', + 'size.file' => ':attribute должен быть размером :size килобайт.', + 'size.string' => ':attribute должен состоять из :size символов.', + 'size.array' => ':attribute должен содержать :size элементов.', + 'unique' => ':attribute уже занят.', + 'string' => 'Значение :attribute должно быть строкой.', + 'url' => 'Неверный формат ввода :attribute.', + 'timezone' => ':attribute должен быть в допустимом диапазоне.', + '2fa_code' => ':attribute введен неверно.', + 'dimensions' => 'Недопустимые размеры изображения :attribute.', + 'distinct' => 'Поле :attribute содержит повторяющееся значение.', + 'file' => ':attribute должен быть файлом.', + 'in_array' => 'Поле :attribute не существует в :other.', + 'present' => 'Поле :attribute должно быть заполнено.', + 'amount_zero' => 'Сумма не может быть равна нулю.', + 'current_target_amount' => 'Текущая сумма должна быть меньше целевой суммы.', + 'unique_piggy_bank_for_user' => 'Название копилки должно быть уникальным.', + 'unique_object_group' => 'Название группы должно быть уникальным', + 'starts_with' => 'Значение должно начинаться с :values.', + 'unique_webhook' => 'У вас уже есть вебхук с этим сочетанием URL, триггер, ответа и доставки.', + 'unique_existing_webhook' => 'У вас уже есть другой вебхук с этим сочетанием URL, триггер, ответа и доставки.', + 'same_account_type' => 'Оба счета должны иметь один тип счета', + 'same_account_currency' => 'Оба счета должны иметь одну и ту же валюту', - 'between.numeric' => ':attribute должен быть больше :min и меньше :max.', - 'between.file' => ':attribute должен быть размером :min - :max килобайт.', - 'between.string' => ':attribute должен содержать :min - :max символов.', - 'between.array' => ':attribute должен содержать :min - :max элементов.', - 'boolean' => 'Поле :attribute должно быть истинным или ложным.', - 'confirmed' => ':attribute не совпадает с подтверждением.', - 'date' => ':attribute не является верной датой.', - 'date_format' => ':attribute не совпадает с форматом :format.', - 'different' => ':attribute и :other не должны совпадать.', - 'digits' => ':attribute должно содержать :digits цифр.', - 'digits_between' => ':attribute должен содержать :min - :max цифр.', - 'email' => ':attribute не является верным email адресом.', - 'filled' => 'Поле :attribute должно быть заполнено.', - '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' => 'Значение :attribute должно быть не меньше :min символов.', - 'min.array' => 'Значение :attribute должно содержать не меньше :min элементов.', - 'not_in' => 'Выбранный :attribute не верный.', - 'numeric' => ':attribute должен быть числом.', - 'numeric_native' => 'Сумма должна быть числом.', - 'numeric_destination' => 'Сумма назначения должна быть числом.', - 'numeric_source' => 'Исходная сумма должна быть числом.', - 'regex' => 'Формат :attribute некорректен.', - 'required' => 'Поле :attribute является обязательным.', - 'required_if' => 'Значение :attribute является обязательным, когда :other равное :value.', - 'required_unless' => 'Поле :attribute является обязательным, если :other не входит в список :values.', - 'required_with' => 'Поле :attribute является обязательным, когда есть :values.', - 'required_with_all' => 'Поле :attribute является обязательным, когда есть :values.', - 'required_without' => 'Поле :attribute является обязательным, когда отсутствует :values.', - 'required_without_all' => ':attribute поле обязательно для заполнения, так как ни одно из :values не существует.', - 'same' => ':attribute и :other должны совпадать.', - 'size.numeric' => ':attribute должен быть размером :size.', - 'amount_min_over_max' => 'Минимальная сумма не может быть больше максимальной суммы.', - 'size.file' => ':attribute должен быть размером :size килобайт.', - 'size.string' => ':attribute должен состоять из :size символов.', - 'size.array' => ':attribute должен содержать :size элементов.', - 'unique' => ':attribute уже занят.', - 'string' => 'Значение :attribute должно быть строкой.', - 'url' => 'Неверный формат ввода :attribute.', - 'timezone' => ':attribute должен быть в допустимом диапазоне.', - '2fa_code' => ':attribute введен неверно.', - 'dimensions' => 'Недопустимые размеры изображения :attribute.', - 'distinct' => 'Поле :attribute содержит повторяющееся значение.', - 'file' => ':attribute должен быть файлом.', - 'in_array' => 'Поле :attribute не существует в :other.', - 'present' => 'Поле :attribute должно быть заполнено.', - 'amount_zero' => 'Сумма не может быть равна нулю.', - 'current_target_amount' => 'Текущая сумма должна быть меньше целевой суммы.', - 'unique_piggy_bank_for_user' => 'Название копилки должно быть уникальным.', - 'unique_object_group' => 'Название группы должно быть уникальным', - 'starts_with' => 'Значение должно начинаться с :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'У вас уже есть другой вебхук с этим сочетанием URL, триггер, ответа и доставки.', - 'same_account_type' => 'Оба счета должны иметь один тип счета', - 'same_account_currency' => 'Оба счета должны иметь одну и ту же валюту', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Это не безопасный пароль. Попробуйте еще раз. Подробнее можно узнать по ссылке https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Недопустимый тип для повторяющихся транзакций.', - 'valid_recurrence_rep_moment' => 'Неверный период повторения для данного типа повторений.', - 'invalid_account_info' => 'Неверные данные о счёте.', - 'attributes' => [ + 'secure_password' => 'Это не безопасный пароль. Попробуйте еще раз. Подробнее можно узнать по ссылке https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Недопустимый тип для повторяющихся транзакций.', + 'valid_recurrence_rep_moment' => 'Неверный период повторения для данного типа повторений.', + 'invalid_account_info' => 'Неверные данные о счёте.', + 'attributes' => [ 'email' => '"Адрес электронной почты"', 'description' => '"Описание"', 'amount' => 'Сумма', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Для продолжения необходим действительный ID счёта-источника и/или действительное имя счёта.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Не удалось найти действительный счёт назначения при поиске ID ":id" или имени ":name".', + 'withdrawal_source_need_data' => 'Для продолжения необходим действительный ID счёта-источника и/или действительное имя счёта.', + 'withdrawal_source_bad_data' => '[a] Не удалось найти учетную запись источника при поиске ID ":id" или имени ":name".', + 'withdrawal_dest_need_data' => '[a] Для продолжения необходимо получить правильный идентификатор счета назначения и/или действительное имя счета назначения.', + 'withdrawal_dest_bad_data' => 'Не удалось найти действительный счёт назначения при поиске ID ":id" или имени ":name".', - 'withdrawal_dest_iban_exists' => 'Этот IBAN счета назначения уже используется счетом актива или обязательства и не может быть использован в качестве назначения для снятия средств.', - 'deposit_src_iban_exists' => 'Этот IBAN счета-источника уже используется счетом актива или обязательства и не может быть использован в качестве источника депозита.', + 'withdrawal_dest_iban_exists' => 'Этот IBAN счета назначения уже используется счетом актива или обязательства и не может быть использован в качестве назначения для снятия средств.', + 'deposit_src_iban_exists' => 'Этот IBAN счета-источника уже используется счетом актива или обязательства и не может быть использован в качестве источника депозита.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Не удалось найти действующую учетную запись сверки при поиске ID ":id" или имя ":name".', - 'generic_source_bad_data' => '[e] Не удалось найти корректный счёт-источник при поиске ID ":id" или имени ":name".', + 'generic_source_bad_data' => '[e] Не удалось найти корректный счёт-источник при поиске ID ":id" или имени ":name".', - 'deposit_source_need_data' => 'Для продолжения необходим действительный ID счёта-источника и/или действительное имя счёта.', - 'deposit_source_bad_data' => '[b] Не удалось найти корректный счёт-источник при поиске ID ":id" или имени ":name".', - 'deposit_dest_need_data' => '[b] Для продолжения необходим действительный ID счёта назначения и/или действительное имя счёта.', - 'deposit_dest_bad_data' => 'Не удалось найти действительный счёт назначения при поиске ID ":id" или имени ":name".', - 'deposit_dest_wrong_type' => 'Сохраняемый счёт назначения - некорректный.', + 'deposit_source_need_data' => 'Для продолжения необходим действительный ID счёта-источника и/или действительное имя счёта.', + 'deposit_source_bad_data' => '[b] Не удалось найти корректный счёт-источник при поиске ID ":id" или имени ":name".', + 'deposit_dest_need_data' => '[b] Для продолжения необходим действительный ID счёта назначения и/или действительное имя счёта.', + 'deposit_dest_bad_data' => 'Не удалось найти действительный счёт назначения при поиске ID ":id" или имени ":name".', + 'deposit_dest_wrong_type' => 'Сохраняемый счёт назначения - некорректный.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Для продолжения необходим действительный ID счёта-источника и/или действительное имя счёта.', + 'transfer_source_bad_data' => '[c] Не удалось найти учетную запись источника при поиске ID ":id" или имени ":name".', + 'transfer_dest_need_data' => '[a] Для продолжения необходимо получить правильный идентификатор счета назначения и/или действительное имя счета назначения.', + 'transfer_dest_bad_data' => 'Не удалось найти действительный счёт назначения при поиске ID ":id" или имени ":name".', + 'need_id_in_edit' => 'Каждая разделённая транзакция должна иметь transaction_journal_id (либо действительный ID, либо 0).', - 'transfer_source_need_data' => 'Для продолжения необходим действительный ID счёта-источника и/или действительное имя счёта.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Не удалось найти действительный счёт назначения при поиске ID ":id" или имени ":name".', - 'need_id_in_edit' => 'Каждая разделённая транзакция должна иметь transaction_journal_id (либо действительный ID, либо 0).', + 'ob_source_need_data' => 'Для продолжения необходим действительный ID счёта-источника и/или действительное имя счёта.', + 'lc_source_need_data' => 'Для продолжения необходимо получить идентификатор учетной записи исходного кода.', + 'ob_dest_need_data' => '[a] Для продолжения необходимо получить правильный идентификатор счета назначения и/или действительное имя счета назначения.', + 'ob_dest_bad_data' => 'Не удалось найти действительный счёт назначения при поиске ID ":id" или имени ":name".', + 'reconciliation_either_account' => 'Чтобы отправить сверку, вы должны отправить либо исходный код, либо целевой счет. Не обоих, а не ничтожные.', - 'ob_source_need_data' => 'Для продолжения необходим действительный ID счёта-источника и/или действительное имя счёта.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Не удалось найти действительный счёт назначения при поиске ID ":id" или имени ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Вы не можете использовать этот счёт в качестве счёта-источника.', + 'generic_invalid_destination' => 'Вы не можете использовать этот счёт в качестве счёта назначения.', - 'generic_invalid_source' => 'Вы не можете использовать этот счёт в качестве счёта-источника.', - 'generic_invalid_destination' => 'Вы не можете использовать этот счёт в качестве счёта назначения.', + 'generic_no_source' => 'Вы должны представить информацию о счете источнике или идентификатор из журнала транзакции.', + 'generic_no_destination' => 'Вы должны представить исходную информацию об учетной записи или представить идентификатор журнала транзакций.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'Значение :attribute должно быть больше или равно :value.', - 'gt.numeric' => 'Значение :attribute должно быть больше :value.', - 'gte.file' => 'Размер файла в поле :attribute должен быть больше или равен :value Килобайт(а).', - 'gte.string' => 'Значение :attribute должно быть больше или равно :value символам.', - 'gte.array' => 'Значения поля :attribute должно включать :value элементов или больше.', + 'gte.numeric' => 'Значение :attribute должно быть больше или равно :value.', + 'gt.numeric' => 'Значение :attribute должно быть больше :value.', + 'gte.file' => 'Размер файла в поле :attribute должен быть больше или равен :value Килобайт(а).', + 'gte.string' => 'Значение :attribute должно быть больше или равно :value символам.', + 'gte.array' => 'Значения поля :attribute должно включать :value элементов или больше.', 'amount_required_for_auto_budget' => 'Нужно указать сумму.', 'auto_budget_amount_positive' => 'Сумма должна быть больше 0.', + 'auto_budget_period_mandatory' => 'Период авто-бюджета - это обязательно поле.', // no access to administration: diff --git a/resources/lang/sk_SK/api.php b/resources/lang/sk_SK/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/sk_SK/api.php +++ b/resources/lang/sk_SK/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/sk_SK/auth.php b/resources/lang/sk_SK/auth.php index bcbaa35ac5..a1ad3397b9 100644 --- a/resources/lang/sk_SK/auth.php +++ b/resources/lang/sk_SK/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Nesprávne prihlasovacie údaje.', 'throttle' => 'Príliš mnoho pokusov o prihlásenie. Skúste to prosím znovu o :seconds sekúnd.', diff --git a/resources/lang/sk_SK/breadcrumbs.php b/resources/lang/sk_SK/breadcrumbs.php index b62ff4360c..b4da16ce50 100644 --- a/resources/lang/sk_SK/breadcrumbs.php +++ b/resources/lang/sk_SK/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Domov', - 'budgets' => 'Budgets', - 'subscriptions' => 'Subscriptions', - 'transactions' => 'Transactions', - 'title_expenses' => 'Expenses', - 'title_withdrawal' => 'Expenses', - 'title_revenue' => 'Revenue / income', - 'title_deposit' => 'Revenue / income', - 'title_transfer' => 'Transfers', - 'title_transfers' => 'Transfers', - 'edit_currency' => 'Upraviť menu „:name“', - 'delete_currency' => 'Odstrániť menu „:name“', - 'newPiggyBank' => 'Vytvoriť novú pokladničku', - 'edit_piggyBank' => 'Upraviť pokladničku „:name“', - 'preferences' => 'Predvoľby', - 'profile' => 'Profil', - 'accounts' => 'Účty', - 'changePassword' => 'Zmeniť heslo', - 'change_email' => 'Zmeniť e-mailovú adresu', - 'bills' => 'Účtenky a faktúry', - 'newBill' => 'Nový účet', - 'edit_bill' => 'Upravit účet „:name“', - 'delete_bill' => 'Odstrániť účet „:name“', - 'reports' => 'Prehľady', - 'search_result' => 'Výsledky vyhľadávania pre „:query“', - 'withdrawal_list' => 'Výdaje', - 'Withdrawal_list' => 'Výdaje', - 'deposit_list' => 'Výnosy, príjmy a vklady', - 'transfer_list' => 'Prevody', - 'transfers_list' => 'Prevody', + 'home' => 'Domov', + 'budgets' => 'Budgets', + 'subscriptions' => 'Subscriptions', + 'transactions' => 'Transactions', + 'title_expenses' => 'Expenses', + 'title_withdrawal' => 'Expenses', + 'title_revenue' => 'Revenue / income', + 'title_deposit' => 'Revenue / income', + 'title_transfer' => 'Transfers', + 'title_transfers' => 'Transfers', + 'edit_currency' => 'Upraviť menu „:name“', + 'delete_currency' => 'Odstrániť menu „:name“', + 'newPiggyBank' => 'Vytvoriť novú pokladničku', + 'edit_piggyBank' => 'Upraviť pokladničku „:name“', + 'preferences' => 'Predvoľby', + 'profile' => 'Profil', + 'accounts' => 'Účty', + 'changePassword' => 'Zmeniť heslo', + 'change_email' => 'Zmeniť e-mailovú adresu', + 'bills' => 'Účtenky a faktúry', + 'newBill' => 'Nový účet', + 'edit_bill' => 'Upravit účet „:name“', + 'delete_bill' => 'Odstrániť účet „:name“', + 'reports' => 'Prehľady', + 'search_result' => 'Výsledky vyhľadávania pre „:query“', + 'withdrawal_list' => 'Výdaje', + 'Withdrawal_list' => 'Výdaje', + 'deposit_list' => 'Výnosy, príjmy a vklady', + 'transfer_list' => 'Prevody', + 'transfers_list' => 'Prevody', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Vyúčtovania', 'create_withdrawal' => 'Vytvoriť nový výber', 'create_deposit' => 'Vytvoriť nový vklad', diff --git a/resources/lang/sk_SK/components.php b/resources/lang/sk_SK/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/sk_SK/components.php +++ b/resources/lang/sk_SK/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/sk_SK/config.php b/resources/lang/sk_SK/config.php index 134d0913b7..f7884a19c7 100644 --- a/resources/lang/sk_SK/config.php +++ b/resources/lang/sk_SK/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'sk', - 'locale' => 'sk, Slovenčina, sk_SK, sk_SK.utf8, sk_SK.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'sk', + 'locale' => 'sk, Slovenčina, sk_SK, sk_SK.utf8, sk_SK.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, RRRR', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'D. MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, RRRR', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'D. MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'D. MMMM YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'D. MMMM YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D. MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D. MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Týždeň' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Týždeň' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Pondelok', - 'dow_2' => 'Utorok', - 'dow_3' => 'Streda', - 'dow_4' => 'Štvrtok', - 'dow_5' => 'Piatok', - 'dow_6' => 'Sobota', - 'dow_7' => 'Nedeľa', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Pondelok', + 'dow_2' => 'Utorok', + 'dow_3' => 'Streda', + 'dow_4' => 'Štvrtok', + 'dow_5' => 'Piatok', + 'dow_6' => 'Sobota', + 'dow_7' => 'Nedeľa', ]; /* diff --git a/resources/lang/sk_SK/demo.php b/resources/lang/sk_SK/demo.php index deaa8adcbc..32a8e82b43 100644 --- a/resources/lang/sk_SK/demo.php +++ b/resources/lang/sk_SK/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/sk_SK/email.php b/resources/lang/sk_SK/email.php index 09503bf5ae..a75f7299ee 100644 --- a/resources/lang/sk_SK/email.php +++ b/resources/lang/sk_SK/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Testovacia správa z vašej inštalácie Firefly III', 'admin_test_body' => 'Toto je testovacia správa z vašej inštancie Firefly III. Bola odoslaná na :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'An invitation has been created', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Obnova hesla:', 'registered_doc_link' => 'Dokumentácia:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'A new Firefly III version is available', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Prípadne môžete vytvoriť hlásenie na https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Celý zásobník je nižšie:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III vytvoril novú transakciu|Firefly III :count nových transakcií', 'new_journals_header' => 'Firefly III pre vás vytvoril transakciu. Nájdete ju vo svojej inštalácii Firefly III:|Firefly III pre vás vytvoríl :count transakcií. Nájdete ich vo svojej inštalácii Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/sk_SK/errors.php b/resources/lang/sk_SK/errors.php index e8e8adfd73..d2d0d6efc4 100644 --- a/resources/lang/sk_SK/errors.php +++ b/resources/lang/sk_SK/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Trasovanie zásobníka', 'more_info' => 'Viac informácií', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Prosím, získajte viac informácií v zložke storage/logs, kde nájdete chybové záznamy. Ak spúšťate aplikáciu cez Docker, použite docker logs -f [container].', - 'collect_info_more' => 'Viac o získavaní informácií o chybách si môžete prečítať v sekcii často kladených otázok.', - 'github_help' => 'Nájdite pomoc na GitHube', - 'github_instructions' => 'Budeme viac než radi, ak vytvoríte nové hlásenie na GitHube.', - 'use_search' => 'Použite vyhľadávanie!', - 'include_info' => 'Priložiť informácie z tejto ladiacej stránky.', - 'tell_more' => 'Povedzte nám viac, než "napísalo mi to Ups!"', - 'include_logs' => 'Priložiť chybové záznamy (viď vyššie).', - 'what_did_you_do' => 'Napíšte nám, čo ste robili, keď sa chyba vyskytla.', - 'offline_header' => 'You are probably offline', - 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', - 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', - + 'collect_info' => 'Prosím, získajte viac informácií v zložke storage/logs, kde nájdete chybové záznamy. Ak spúšťate aplikáciu cez Docker, použite docker logs -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Nájdite pomoc na GitHube', + 'github_instructions' => 'Budeme viac než radi, ak vytvoríte nové hlásenie na GitHube.', + 'use_search' => 'Použite vyhľadávanie!', + 'include_info' => 'Priložiť informácie z tejto ladiacej stránky.', + 'tell_more' => 'Povedzte nám viac, než "napísalo mi to Ups!"', + 'include_logs' => 'Priložiť chybové záznamy (viď vyššie).', + 'what_did_you_do' => 'Napíšte nám, čo ste robili, keď sa chyba vyskytla.', + 'offline_header' => 'You are probably offline', + 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', + 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', ]; diff --git a/resources/lang/sk_SK/firefly.php b/resources/lang/sk_SK/firefly.php index 53a86d89db..4ff9402a88 100644 --- a/resources/lang/sk_SK/firefly.php +++ b/resources/lang/sk_SK/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Zavrieť', - 'actions' => 'Akcie', - 'edit' => 'Upraviť', - 'delete' => 'Odstrániť', - 'split' => 'Rozúčtovať', - 'single_split' => 'Rozúčtovať', - 'clone' => 'Klonovať', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => 'Uplynulých 7 dní', - 'last_thirty_days' => 'Uplynulých 30 dní', - 'last_180_days' => 'Posledných 180 dní', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'Tento rok', - 'welcome_back' => 'Ako to ide?', - 'everything' => 'Všetko', - 'today' => 'dnes', - 'customRange' => 'Vlastný rozsah', - 'date_range' => 'Časový rozsah', - 'apply' => 'Použiť', - 'select_date' => 'Vyberte dátum..', - 'cancel' => 'Storno', - 'from' => 'Od', - 'to' => 'Komu', - 'structure' => 'Štruktúra', - 'help_translating' => 'Tento text pomocníka ešte nie je k dispozícii vo vašom jazyku. Pomôžete prekladať?', - 'showEverything' => 'Zobraziť všetko', - 'never' => 'Nikdy', - 'no_results_for_empty_search' => 'Nevyplnili ste žiadny vyhľadávaný pojem, takže sa nič nenašlo.', - 'removed_amount' => 'Odobrané :amount', - 'added_amount' => 'Pridané :amount', - 'asset_account_role_help' => 'Akékoľvek ďalšie možnosti vyplývajúce z vášho výberu je možné nastaviť neskôr.', - 'Opening balance' => 'Počiatočný zostatok', - 'create_new_stuff' => 'Vytvoriť nový údaj', - 'new_withdrawal' => 'Nový výber', - 'create_new_transaction' => 'Vytvoriť novú transakciu', - 'sidebar_frontpage_create' => 'Vytvoriť', - 'new_transaction' => 'Nová transakcia', - 'no_rules_for_bill' => 'Táto účtenka nemá priradené žiadne pravidlá.', - 'go_to_asset_accounts' => 'Zobraziť účty aktív', - 'go_to_budgets' => 'Zobraziť rozpočty', - 'go_to_withdrawals' => 'Zobraziť výbery', - 'clones_journal_x' => 'Táto transakcia je kópiou „:description“ (#:id)', - 'go_to_categories' => 'Zobraziť kategórie', - 'go_to_bills' => 'Zobraziť účty', - 'go_to_expense_accounts' => 'Zobraziť výdavkové účty', - 'go_to_revenue_accounts' => 'Zobraziť výnosové účty', - 'go_to_piggies' => 'Zobraziť pokladničky', - 'new_deposit' => 'Nový vklad', - 'new_transfer' => 'Nový prevod', - 'new_transfers' => 'Nový prevod', - 'new_asset_account' => 'Nový účet aktív', - 'new_expense_account' => 'Nový výdavkový účet', - 'new_revenue_account' => 'Nový výnosový účet', - 'new_liabilities_account' => 'Nový záväzok', - 'new_budget' => 'Nový rozpočet', - 'new_bill' => 'Nový účet', - 'block_account_logout' => 'Byli jste odhlásení. Zablokované účty tuto stránku nemôžu používať. Zaregistrovaliste sa pomocou platnej e-mailovej adresy?', - 'flash_success' => 'Hotovo!', - 'flash_info' => 'Správa', - 'flash_warning' => 'Varovanie!', - 'flash_error' => 'Chyba!', - 'flash_danger' => 'Danger!', - 'flash_info_multiple' => 'Jedna správa|:count správ', - 'flash_error_multiple' => 'Jedna chyba|:count chýb', - 'net_worth' => 'Čisté imanie', - 'help_for_this_page' => 'Pomocník pro túto stránku', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => 'Zdravíme!', - 'two_factor_enter_code' => 'Pre pokračovanie zadajte kód pre dvojfázové overenie. Vaša aplikácia ho pre vás môže vytvoriť.', - 'two_factor_code_here' => 'Sem vložte kód', - 'two_factor_title' => 'Dvojfázové overenie', - 'authenticate' => 'Overiť', - 'two_factor_forgot_title' => 'Stratil(a) som dvojfázové overenie', - 'two_factor_forgot' => 'Zabudol(a) som si nástroj pro dvojfázové overenie.', - 'two_factor_lost_header' => 'Ztratili ste svoje dvojfázové overenie?', - 'two_factor_lost_intro' => 'Ak ste stratili aj svoje záložné kódy, máte smolu. Nie je to niečo, čo by ste mohli opraviť z webového rozhrania. Máte dve možnosti.', - 'two_factor_lost_fix_self' => 'Ak ste si spustili vlastnú inštanciu Firefly III, prečítajte si tento záznam v FAQ pre pokyny.', - 'two_factor_lost_fix_owner' => 'V ostatných prípadoch napíšte prevádzkovateľovi, :site_owner a požiadajte ho o obnovenie vášho dvojfázového overenia.', - 'mfa_backup_code' => 'Použitím záložného kódu, umožňujúceho prihlásenie do Firefly III, platnosť kódu zaniká. Takže kód, ktorým ste sa už prihlásili, už vám je k ničomu (nie je možné ho použiť opakovane) - preto si ho zo zoznamu vyškrtnite.', - 'pref_two_factor_new_backup_codes' => 'Získať nové záložní kódy', - 'pref_two_factor_backup_code_count' => 'Máte :count platný záložný kód.|Máte :count platných záložných kódov.', - '2fa_i_have_them' => 'Uložil som si ich!', - 'warning_much_data' => 'Načítanie :days dní údajov môže chvíľu trvať.', - 'registered' => 'Úspešne ste sa zaregistrovali!', - 'Default asset account' => 'Prednastavený účet aktív', - 'no_budget_pointer' => 'Zdá sa, že zatiaľ nemáte žiadne rozpočty. Na stránke rozpočty by ste si nejaké mali vytvoriť. Rozpočty môžu pomôcť udržať prehľad vo výdavkoch.', - 'no_bill_pointer' => 'Zdá sa, že zatiaľ nemáte žiadne účty. Na stránke účty by ste mali nejaké vytvoriť. Účty môžu pomôcť udržať si prehľad vo výdavkoch.', - 'Savings account' => 'Sporiaci účet', - 'Credit card' => 'Kreditná karta', - 'source_accounts' => 'Zdrojový účet|Zdrojové účty', - 'destination_accounts' => 'Cieľový účet|Cieľové účty', - 'user_id_is' => 'Váš identifikátor použivateľa je :user', - 'field_supports_markdown' => 'Text v tomto políčku je možné formátovať pomocou syntaxe Markdown.', - 'need_more_help' => 'Ak potřebujetr ďalšiu pomoc s používaním Firefly III, založte požiadavku na portáli GitHub.', - 'reenable_intro_text' => 'Môžete tiež znova povoliť úvodné pokyny.', - 'intro_boxes_after_refresh' => 'Oblasti s úvodom sa znovu objavia po opätovnom načítaní stránky.', - 'show_all_no_filter' => 'Zobraziť všetky transakcie bez zoskupenia podľa dátumu.', - 'expenses_by_category' => 'Výdavky podľa kategórie', - 'expenses_by_budget' => 'Výdavky podľa rozpočtu', - 'income_by_category' => 'Príjmy podľa kategórie', - 'expenses_by_asset_account' => 'Výdavky podľa účtu aktív', - 'expenses_by_expense_account' => 'Výdavky podľa výdajových účtov', - 'cannot_redirect_to_account' => 'Firefly III se nedarí presmerovať vás na správnu stránku. Ospravedlňujeme sa.', - 'sum_of_expenses' => 'Suma výdavkov', - 'sum_of_income' => 'Suma príjmov', - 'liabilities' => 'Záväzky', - 'spent_in_specific_budget' => 'Utratené v rozpočte „:budget“', - 'spent_in_specific_double' => 'Uhradené v účte ":account"', - 'earned_in_specific_double' => 'Zarobené na účte ":account"', - 'source_account' => 'Zdrojový účet', - 'source_account_reconciliation' => 'Nemôžete upraviť zdrojový účet zúčtovacej transakcie.', - 'destination_account' => 'Cieľový účet', - 'destination_account_reconciliation' => 'Nemôžete upraviť cieľový účet zúčtovacej transakcie.', - 'sum_of_expenses_in_budget' => 'Celkom utratené v rozpočte „:budget“', - 'left_in_budget_limit' => 'Ponechané k útrate podľa rozpočtu', - 'current_period' => 'Aktuálne obdobie', - 'show_the_current_period_and_overview' => 'Zobraziť aktuálne obdobie a prehľad', - 'pref_languages_locale' => 'Aby mohol iný jazyk ako angličtina správne fungovať, musí byť váš operačný systém vybavený správnymi miestnymi informáciami. Ak nie sú k dispozícii, môžu byť údaje o mene, dátumy a sumy nesprávne naformátované.', - 'budget_in_period' => 'Všetky transakcie pre rozpočet ":name" medzi :start a :end v mene :currency', - 'chart_budget_in_period' => 'Graf všetkých transakcií pre rozpočet ":name" medzi :start a :end v mene :currency', - 'chart_budget_in_period_only_currency' => 'Suma rozpočtu je v :currency, takže tento graf zobrazuje len transakcie v :currency.', - 'chart_account_in_period' => 'Graf všetkých transakcií pre účet ":name" (:balance) medzi :start a :end', - 'chart_category_in_period' => 'Graf všetkých transakcií pre kategóriu „:name“ medzi :start a :end', - 'chart_category_all' => 'Graf všetkých transakcií pre kategóriu „:name“', - 'clone_withdrawal' => 'Klonovať tento výber', - 'clone_deposit' => 'Klonovať tento vklad', - 'clone_transfer' => 'Klonovať tento prevod', - 'multi_select_no_selection' => 'Žiadny výber', - 'multi_select_select_all' => 'Vybrať všetko', - 'multi_select_n_selected' => 'vybrané', - 'multi_select_all_selected' => 'Všetko vybrané', - 'multi_select_filter_placeholder' => 'Hľadať…', - 'intro_next_label' => 'Nasledujúce', - 'intro_prev_label' => 'Predchádzajúce', - 'intro_skip_label' => 'Preskočiť', - 'intro_done_label' => 'Hotovo', - 'between_dates_breadcrumb' => 'Medzi :start a :end', - 'all_journals_without_budget' => 'Všetky transakcie bez rozpočtu', - 'journals_without_budget' => 'Transakcie bez rozpočtu', - 'all_journals_without_category' => 'Všetky transakcie bez kategórie', - 'journals_without_category' => 'Transakcie bez kategórie', - 'all_journals_for_account' => 'Všetky transakcie pre účet :name', - 'chart_all_journals_for_account' => 'Graf všetkých transakcíi pre účet „:name“', - 'journals_in_period_for_account' => 'Všetky transakcie pre účet „:name“ medzi :start a :end', - 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', - 'transferred' => 'Prenesené', - 'all_withdrawal' => 'Všetky výdavky', - 'all_transactions' => 'Všetky transakcie', - 'title_withdrawal_between' => 'Všetky výdavky medzi :start a :end', - 'all_deposit' => 'Všetky výnosy', - 'title_deposit_between' => 'Všetky výnosy medzi :start a :end', - 'all_transfers' => 'Všetky prevody', - 'title_transfers_between' => 'Všetky prevody medzi :start a :end', - 'all_transfer' => 'Všetky prevody', - 'all_journals_for_tag' => 'Všetky transakcie pre značku „:tag“', - 'title_transfer_between' => 'Všetky prevody medzi :start a :end', - 'all_journals_for_category' => 'Všetky prevody pre kategóriu :name', - 'all_journals_for_budget' => 'Všetky transakcie pre rozpočet :name', - 'chart_all_journals_for_budget' => 'Graf všetkých transakcií pre rozpočet „:name“', - 'journals_in_period_for_category' => 'Všetky transakce pre kategóriu „:name“ medzi :start a :end', - 'journals_in_period_for_tag' => 'Všetky transakcie pre štítok :tag medzi :start a :end', - 'not_available_demo_user' => 'Funkcia, ku ktorej sa snažíte získať prístup, nie je používateľom ukážky k dispozícii.', - 'exchange_rate_instructions' => 'Majetkový účet „@name“ prijíma iba transakcie v @native_currency. Ak chcete namiesto toho použiť @foreign_currency, uistite sa, že je známa aj suma v @native_currency:', - 'transfer_exchange_rate_instructions' => 'Účet zdrojového majetku "@source_name" prijíma iba transakcie v @source_currency. Cieľový majetkový účet „@dest_name“ prijíma iba transakcie v @dest_currency. Prevedenú čiastku musíte uviesť správne v oboch menách.', - 'transaction_data' => 'Údaje o transakcii', - 'invalid_server_configuration' => 'Neplatné nastavenie serveru', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Rýchle prepnutie', - 'sign_in_to_start' => 'Pre zahájenie sedenia sa prihláste', - 'sign_in' => 'Prihlásiť', - 'register_new_account' => 'Zaregistrovať nový účet', - 'forgot_my_password' => 'Zabudol(a) som svoje heslo', - 'problems_with_input' => 'Vyskytol sa problém s vstupnými údajmi.', - 'reset_password' => 'Obnovte si heslo', - 'button_reset_password' => 'Obnoviť heslo', - 'reset_button' => 'Obnoviť', - 'want_to_login' => 'Chcem sa prihlásiť', - 'login_page_title' => 'Prihlásenie do Firefly III', - 'register_page_title' => 'Registrácia do Firefly III', - 'forgot_pw_page_title' => 'Zabudnuté heslo do Firefly III', - 'reset_pw_page_title' => 'Obnovte si heslo do Firefly III', - 'cannot_reset_demo_user' => 'Heslo použivateľa pre ukážku (demo) nie je možné obnoviť.', - 'no_att_demo_user' => 'Demo používateľ nemá povolené nahrávať prílohy.', - 'button_register' => 'Registrovať', - 'authorization' => 'Autorizácia', - 'active_bills_only' => 'len aktívne účty', - 'active_bills_only_total' => 'všetky aktívne účty', - 'active_exp_bills_only' => 'len aktívne a očakávané účty', - 'active_exp_bills_only_total' => 'len všetky očakávané aktívne účty', - 'per_period_sum_1D' => 'Očakávané denné výdavky', - 'per_period_sum_1W' => 'Očakávané týždenné výdavky', - 'per_period_sum_1M' => 'Očakávané mesačné výdavky', - 'per_period_sum_3M' => 'Očakávané štvrťročné výdavky', - 'per_period_sum_6M' => 'Očakávané polročné výdavky', - 'per_period_sum_1Y' => 'Očakávané ročné výdavky', - 'average_per_bill' => 'priemer na účet', - 'expected_total' => 'očakávaný celkový súčet', - 'reconciliation_account_name' => ':name zúčtovanie (:currency)', - 'saved' => 'Uložené', - 'advanced_options' => 'Pokročilé nastavenia', - 'advanced_options_explain' => 'Niektoré stránky Firefly III majú pod týmto tlačítkom skryté pokročilé nastavenia. Táto stránka síce nič také neobsahuje, ale určite to skúste na iných!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Zavrieť', + 'actions' => 'Akcie', + 'edit' => 'Upraviť', + 'delete' => 'Odstrániť', + 'split' => 'Rozúčtovať', + 'single_split' => 'Rozúčtovať', + 'clone' => 'Klonovať', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Confirm action', + 'last_seven_days' => 'Uplynulých 7 dní', + 'last_thirty_days' => 'Uplynulých 30 dní', + 'last_180_days' => 'Posledných 180 dní', + 'month_to_date' => 'Month to date', + 'year_to_date' => 'Year to date', + 'YTD' => 'Tento rok', + 'welcome_back' => 'Ako to ide?', + 'everything' => 'Všetko', + 'today' => 'dnes', + 'customRange' => 'Vlastný rozsah', + 'date_range' => 'Časový rozsah', + 'apply' => 'Použiť', + 'select_date' => 'Vyberte dátum..', + 'cancel' => 'Storno', + 'from' => 'Od', + 'to' => 'Komu', + 'structure' => 'Štruktúra', + 'help_translating' => 'Tento text pomocníka ešte nie je k dispozícii vo vašom jazyku. Pomôžete prekladať?', + 'showEverything' => 'Zobraziť všetko', + 'never' => 'Nikdy', + 'no_results_for_empty_search' => 'Nevyplnili ste žiadny vyhľadávaný pojem, takže sa nič nenašlo.', + 'removed_amount' => 'Odobrané :amount', + 'added_amount' => 'Pridané :amount', + 'asset_account_role_help' => 'Akékoľvek ďalšie možnosti vyplývajúce z vášho výberu je možné nastaviť neskôr.', + 'Opening balance' => 'Počiatočný zostatok', + 'create_new_stuff' => 'Vytvoriť nový údaj', + 'new_withdrawal' => 'Nový výber', + 'create_new_transaction' => 'Vytvoriť novú transakciu', + 'sidebar_frontpage_create' => 'Vytvoriť', + 'new_transaction' => 'Nová transakcia', + 'no_rules_for_bill' => 'Táto účtenka nemá priradené žiadne pravidlá.', + 'go_to_asset_accounts' => 'Zobraziť účty aktív', + 'go_to_budgets' => 'Zobraziť rozpočty', + 'go_to_withdrawals' => 'Zobraziť výbery', + 'clones_journal_x' => 'Táto transakcia je kópiou „:description“ (#:id)', + 'go_to_categories' => 'Zobraziť kategórie', + 'go_to_bills' => 'Zobraziť účty', + 'go_to_expense_accounts' => 'Zobraziť výdavkové účty', + 'go_to_revenue_accounts' => 'Zobraziť výnosové účty', + 'go_to_piggies' => 'Zobraziť pokladničky', + 'new_deposit' => 'Nový vklad', + 'new_transfer' => 'Nový prevod', + 'new_transfers' => 'Nový prevod', + 'new_asset_account' => 'Nový účet aktív', + 'new_expense_account' => 'Nový výdavkový účet', + 'new_revenue_account' => 'Nový výnosový účet', + 'new_liabilities_account' => 'Nový záväzok', + 'new_budget' => 'Nový rozpočet', + 'new_bill' => 'Nový účet', + 'block_account_logout' => 'Byli jste odhlásení. Zablokované účty tuto stránku nemôžu používať. Zaregistrovaliste sa pomocou platnej e-mailovej adresy?', + 'flash_success' => 'Hotovo!', + 'flash_info' => 'Správa', + 'flash_warning' => 'Varovanie!', + 'flash_error' => 'Chyba!', + 'flash_danger' => 'Danger!', + 'flash_info_multiple' => 'Jedna správa|:count správ', + 'flash_error_multiple' => 'Jedna chyba|:count chýb', + 'net_worth' => 'Čisté imanie', + 'help_for_this_page' => 'Pomocník pro túto stránku', + 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', + 'two_factor_welcome' => 'Zdravíme!', + 'two_factor_enter_code' => 'Pre pokračovanie zadajte kód pre dvojfázové overenie. Vaša aplikácia ho pre vás môže vytvoriť.', + 'two_factor_code_here' => 'Sem vložte kód', + 'two_factor_title' => 'Dvojfázové overenie', + 'authenticate' => 'Overiť', + 'two_factor_forgot_title' => 'Stratil(a) som dvojfázové overenie', + 'two_factor_forgot' => 'Zabudol(a) som si nástroj pro dvojfázové overenie.', + 'two_factor_lost_header' => 'Ztratili ste svoje dvojfázové overenie?', + 'two_factor_lost_intro' => 'Ak ste stratili aj svoje záložné kódy, máte smolu. Nie je to niečo, čo by ste mohli opraviť z webového rozhrania. Máte dve možnosti.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner a požiadajte ho o obnovenie vášho dvojfázového overenia.', + 'mfa_backup_code' => 'Použitím záložného kódu, umožňujúceho prihlásenie do Firefly III, platnosť kódu zaniká. Takže kód, ktorým ste sa už prihlásili, už vám je k ničomu (nie je možné ho použiť opakovane) - preto si ho zo zoznamu vyškrtnite.', + 'pref_two_factor_new_backup_codes' => 'Získať nové záložní kódy', + 'pref_two_factor_backup_code_count' => 'Máte :count platný záložný kód.|Máte :count platných záložných kódov.', + '2fa_i_have_them' => 'Uložil som si ich!', + 'warning_much_data' => 'Načítanie :days dní údajov môže chvíľu trvať.', + 'registered' => 'Úspešne ste sa zaregistrovali!', + 'Default asset account' => 'Prednastavený účet aktív', + 'no_budget_pointer' => 'Zdá sa, že zatiaľ nemáte žiadne rozpočty. Na stránke rozpočty by ste si nejaké mali vytvoriť. Rozpočty môžu pomôcť udržať prehľad vo výdavkoch.', + 'no_bill_pointer' => 'Zdá sa, že zatiaľ nemáte žiadne účty. Na stránke účty by ste mali nejaké vytvoriť. Účty môžu pomôcť udržať si prehľad vo výdavkoch.', + 'Savings account' => 'Sporiaci účet', + 'Credit card' => 'Kreditná karta', + 'source_accounts' => 'Zdrojový účet|Zdrojové účty', + 'destination_accounts' => 'Cieľový účet|Cieľové účty', + 'user_id_is' => 'Váš identifikátor použivateľa je :user', + 'field_supports_markdown' => 'Text v tomto políčku je možné formátovať pomocou syntaxe Markdown.', + 'need_more_help' => 'Ak potřebujetr ďalšiu pomoc s používaním Firefly III, založte požiadavku na portáli GitHub.', + 'reenable_intro_text' => 'Môžete tiež znova povoliť úvodné pokyny.', + 'intro_boxes_after_refresh' => 'Oblasti s úvodom sa znovu objavia po opätovnom načítaní stránky.', + 'show_all_no_filter' => 'Zobraziť všetky transakcie bez zoskupenia podľa dátumu.', + 'expenses_by_category' => 'Výdavky podľa kategórie', + 'expenses_by_budget' => 'Výdavky podľa rozpočtu', + 'income_by_category' => 'Príjmy podľa kategórie', + 'expenses_by_asset_account' => 'Výdavky podľa účtu aktív', + 'expenses_by_expense_account' => 'Výdavky podľa výdajových účtov', + 'cannot_redirect_to_account' => 'Firefly III se nedarí presmerovať vás na správnu stránku. Ospravedlňujeme sa.', + 'sum_of_expenses' => 'Suma výdavkov', + 'sum_of_income' => 'Suma príjmov', + 'liabilities' => 'Záväzky', + 'spent_in_specific_budget' => 'Utratené v rozpočte „:budget“', + 'spent_in_specific_double' => 'Uhradené v účte ":account"', + 'earned_in_specific_double' => 'Zarobené na účte ":account"', + 'source_account' => 'Zdrojový účet', + 'source_account_reconciliation' => 'Nemôžete upraviť zdrojový účet zúčtovacej transakcie.', + 'destination_account' => 'Cieľový účet', + 'destination_account_reconciliation' => 'Nemôžete upraviť cieľový účet zúčtovacej transakcie.', + 'sum_of_expenses_in_budget' => 'Celkom utratené v rozpočte „:budget“', + 'left_in_budget_limit' => 'Ponechané k útrate podľa rozpočtu', + 'current_period' => 'Aktuálne obdobie', + 'show_the_current_period_and_overview' => 'Zobraziť aktuálne obdobie a prehľad', + 'pref_languages_locale' => 'Aby mohol iný jazyk ako angličtina správne fungovať, musí byť váš operačný systém vybavený správnymi miestnymi informáciami. Ak nie sú k dispozícii, môžu byť údaje o mene, dátumy a sumy nesprávne naformátované.', + 'budget_in_period' => 'Všetky transakcie pre rozpočet ":name" medzi :start a :end v mene :currency', + 'chart_budget_in_period' => 'Graf všetkých transakcií pre rozpočet ":name" medzi :start a :end v mene :currency', + 'chart_budget_in_period_only_currency' => 'Suma rozpočtu je v :currency, takže tento graf zobrazuje len transakcie v :currency.', + 'chart_account_in_period' => 'Graf všetkých transakcií pre účet ":name" (:balance) medzi :start a :end', + 'chart_category_in_period' => 'Graf všetkých transakcií pre kategóriu „:name“ medzi :start a :end', + 'chart_category_all' => 'Graf všetkých transakcií pre kategóriu „:name“', + 'clone_withdrawal' => 'Klonovať tento výber', + 'clone_deposit' => 'Klonovať tento vklad', + 'clone_transfer' => 'Klonovať tento prevod', + 'multi_select_no_selection' => 'Žiadny výber', + 'multi_select_select_all' => 'Vybrať všetko', + 'multi_select_n_selected' => 'vybrané', + 'multi_select_all_selected' => 'Všetko vybrané', + 'multi_select_filter_placeholder' => 'Hľadať…', + 'intro_next_label' => 'Nasledujúce', + 'intro_prev_label' => 'Predchádzajúce', + 'intro_skip_label' => 'Preskočiť', + 'intro_done_label' => 'Hotovo', + 'between_dates_breadcrumb' => 'Medzi :start a :end', + 'all_journals_without_budget' => 'Všetky transakcie bez rozpočtu', + 'journals_without_budget' => 'Transakcie bez rozpočtu', + 'all_journals_without_category' => 'Všetky transakcie bez kategórie', + 'journals_without_category' => 'Transakcie bez kategórie', + 'all_journals_for_account' => 'Všetky transakcie pre účet :name', + 'chart_all_journals_for_account' => 'Graf všetkých transakcíi pre účet „:name“', + 'journals_in_period_for_account' => 'Všetky transakcie pre účet „:name“ medzi :start a :end', + 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', + 'transferred' => 'Prenesené', + 'all_withdrawal' => 'Všetky výdavky', + 'all_transactions' => 'Všetky transakcie', + 'title_withdrawal_between' => 'Všetky výdavky medzi :start a :end', + 'all_deposit' => 'Všetky výnosy', + 'title_deposit_between' => 'Všetky výnosy medzi :start a :end', + 'all_transfers' => 'Všetky prevody', + 'title_transfers_between' => 'Všetky prevody medzi :start a :end', + 'all_transfer' => 'Všetky prevody', + 'all_journals_for_tag' => 'Všetky transakcie pre značku „:tag“', + 'title_transfer_between' => 'Všetky prevody medzi :start a :end', + 'all_journals_for_category' => 'Všetky prevody pre kategóriu :name', + 'all_journals_for_budget' => 'Všetky transakcie pre rozpočet :name', + 'chart_all_journals_for_budget' => 'Graf všetkých transakcií pre rozpočet „:name“', + 'journals_in_period_for_category' => 'Všetky transakce pre kategóriu „:name“ medzi :start a :end', + 'journals_in_period_for_tag' => 'Všetky transakcie pre štítok :tag medzi :start a :end', + 'not_available_demo_user' => 'Funkcia, ku ktorej sa snažíte získať prístup, nie je používateľom ukážky k dispozícii.', + 'exchange_rate_instructions' => 'Majetkový účet „@name“ prijíma iba transakcie v @native_currency. Ak chcete namiesto toho použiť @foreign_currency, uistite sa, že je známa aj suma v @native_currency:', + 'transfer_exchange_rate_instructions' => 'Účet zdrojového majetku "@source_name" prijíma iba transakcie v @source_currency. Cieľový majetkový účet „@dest_name“ prijíma iba transakcie v @dest_currency. Prevedenú čiastku musíte uviesť správne v oboch menách.', + 'transaction_data' => 'Údaje o transakcii', + 'invalid_server_configuration' => 'Neplatné nastavenie serveru', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Rýchle prepnutie', + 'sign_in_to_start' => 'Pre zahájenie sedenia sa prihláste', + 'sign_in' => 'Prihlásiť', + 'register_new_account' => 'Zaregistrovať nový účet', + 'forgot_my_password' => 'Zabudol(a) som svoje heslo', + 'problems_with_input' => 'Vyskytol sa problém s vstupnými údajmi.', + 'reset_password' => 'Obnovte si heslo', + 'button_reset_password' => 'Obnoviť heslo', + 'reset_button' => 'Obnoviť', + 'want_to_login' => 'Chcem sa prihlásiť', + 'login_page_title' => 'Prihlásenie do Firefly III', + 'register_page_title' => 'Registrácia do Firefly III', + 'forgot_pw_page_title' => 'Zabudnuté heslo do Firefly III', + 'reset_pw_page_title' => 'Obnovte si heslo do Firefly III', + 'cannot_reset_demo_user' => 'Heslo použivateľa pre ukážku (demo) nie je možné obnoviť.', + 'no_att_demo_user' => 'Demo používateľ nemá povolené nahrávať prílohy.', + 'button_register' => 'Registrovať', + 'authorization' => 'Autorizácia', + 'active_bills_only' => 'len aktívne účty', + 'active_bills_only_total' => 'všetky aktívne účty', + 'active_exp_bills_only' => 'len aktívne a očakávané účty', + 'active_exp_bills_only_total' => 'len všetky očakávané aktívne účty', + 'per_period_sum_1D' => 'Očakávané denné výdavky', + 'per_period_sum_1W' => 'Očakávané týždenné výdavky', + 'per_period_sum_1M' => 'Očakávané mesačné výdavky', + 'per_period_sum_3M' => 'Očakávané štvrťročné výdavky', + 'per_period_sum_6M' => 'Očakávané polročné výdavky', + 'per_period_sum_1Y' => 'Očakávané ročné výdavky', + 'average_per_bill' => 'priemer na účet', + 'expected_total' => 'očakávaný celkový súčet', + 'reconciliation_account_name' => ':name zúčtovanie (:currency)', + 'saved' => 'Uložené', + 'advanced_options' => 'Pokročilé nastavenia', + 'advanced_options_explain' => 'Niektoré stránky Firefly III majú pod týmto tlačítkom skryté pokročilé nastavenia. Táto stránka síce nič také neobsahuje, ale určite to skúste na iných!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooky', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhooky', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', + 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', + 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', + 'webhook_response_TRANSACTIONS' => 'Transaction details', + 'webhook_response_ACCOUNTS' => 'Account details', + 'webhook_response_none_NONE' => 'No details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspect', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => 'View message', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logs', + 'response' => 'Response', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Požiadavka na overenie – Firefly III verzia :version', - 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', - 'scopes_will_be_able' => 'Táto aplikácia bude môcť:', - 'button_authorize' => 'Autorizovať', - 'none_in_select_list' => '(žiadne)', - 'no_piggy_bank' => '(žiadna pokladnička)', - 'name_in_currency' => ':name v :currency', - 'paid_in_currency' => 'Uhradené v :currency', - 'unpaid_in_currency' => 'Neuhradené v :currency', - 'is_alpha_warning' => 'Používate ALPHA verziu. Buďte ostražití pred chybami a problémami.', - 'is_beta_warning' => 'Používate BETA verziu. Buďte ostražití pred chybami a problémami.', - 'all_destination_accounts' => 'Cieľové účty', - 'all_source_accounts' => 'Zdrojové účty', - 'back_to_index' => 'Späť na zoznam', - 'cant_logout_guard' => 'Firefly III sa nepodarilo vás odhlásiť.', - 'internal_reference' => 'Interná referencia', + 'authorization_request' => 'Požiadavka na overenie – Firefly III verzia :version', + 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', + 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', + 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', + 'scopes_will_be_able' => 'Táto aplikácia bude môcť:', + 'button_authorize' => 'Autorizovať', + 'none_in_select_list' => '(žiadne)', + 'no_piggy_bank' => '(žiadna pokladnička)', + 'name_in_currency' => ':name v :currency', + 'paid_in_currency' => 'Uhradené v :currency', + 'unpaid_in_currency' => 'Neuhradené v :currency', + 'is_alpha_warning' => 'Používate ALPHA verziu. Buďte ostražití pred chybami a problémami.', + 'is_beta_warning' => 'Používate BETA verziu. Buďte ostražití pred chybami a problémami.', + 'all_destination_accounts' => 'Cieľové účty', + 'all_source_accounts' => 'Zdrojové účty', + 'back_to_index' => 'Späť na zoznam', + 'cant_logout_guard' => 'Firefly III sa nepodarilo vás odhlásiť.', + 'internal_reference' => 'Interná referencia', // check for updates: - 'update_check_title' => 'Zistiť dostupnosť aktualizácií', - 'admin_update_check_title' => 'Zisťovať dostupnosť aktualizácií automaticky', - 'admin_update_check_explain' => 'Firefly III môže sám kontrolovať aktualizácie. Ak toto nastavenie aktivujete, bude kontaktovať hlavný server Firefly III, či je dostupná nová verzia Firefly III. Ak áno, dostanete upozornenie. Toto upozornenie si môžete vyskúšať kliknutím na tlačítko napravo. Prosím, vyberte nižšie, či chcete, aby Firefly III kontroloval aktualizácie.', - 'check_for_updates_permission' => 'Firefly III môže automaticky kontrolovať dostupnosť aktualizácií, ale potrebuje k tomu vaše povolenie. Prejdite do správy a označte, či chcete túto funkciu zapnúť.', - 'updates_ask_me_later' => 'Spýtať sa neskôr', - 'updates_do_not_check' => 'Nezisťovať dostupnosť aktualizácií', - 'updates_enable_check' => 'Zisťovať dostupnosť aktualizácií', - 'admin_update_check_now_title' => 'Zistiť dostupnosť aktualizácií teraz', - 'admin_update_check_now_explain' => 'Ak stlačíte tlačidlo, Firefly III zistí, či je vaša aktuálna verzia najnovšia.', - 'check_for_updates_button' => 'Skontrolovať teraz!', - 'update_new_version_alert' => 'Je dostupná nová verzia Firefly III. Pracujete s verziou :your_version, najnovšia verzia je :new_version zverejnená :date.', - 'update_version_beta' => 'Toto je BETA verzia. Môžu sa vyskytnúť chyby.', - 'update_version_alpha' => 'Toto je ALPHA verzia. Môžu sa vyskytnúť chyby.', - 'update_current_version_alert' => 'Pracujete s verziou :version, čo je najnovšie dostupné vydanie.', - 'update_newer_version_alert' => 'Pracujete s verziou :your_version, ktorá je novšia, než posledné vydanie, :new_version.', - 'update_check_error' => 'Pri kontrole aktualizácii nastala chyba: :error', - 'unknown_error' => 'Neznáma chyba. Prepáčte.', - 'just_new_release' => 'Je dostupná nová verzia! Verzia :version bola vydaná :date. Je zverejnená veľmi krátko, počkajte zopár dní, kým sa táto verzia stabilizuje.', - 'disabled_but_check' => 'Vypli ste kontrolu aktualizácií. Nezabudnite občas skontrolovať aktualizácie manuálne. Ďakujeme!', - 'admin_update_channel_title' => 'Aktualizačný kanál', - 'admin_update_channel_explain' => 'Firefly III má tri "kanály" aktualizácií, ktoré určujú, ako napred ste so svojim systémom, čo sa týka funkcií, vylepšení a chýb. Ak radi skúšate nové veci, použite "beta" kanál a ak vás bavi žiť nebezpečne, vyberte si "alfa".', - 'update_channel_stable' => 'Stabilná verzia. Všetko by malo fungovať.', - 'update_channel_beta' => 'Beta verzia. Nové funkcie, môžu sa vyskytnúť chyby.', - 'update_channel_alpha' => 'Alfa verzia. Hodíme sem, čo nás napadne, a použije sa, čo sa uchytí.', + 'update_check_title' => 'Zistiť dostupnosť aktualizácií', + 'admin_update_check_title' => 'Zisťovať dostupnosť aktualizácií automaticky', + 'admin_update_check_explain' => 'Firefly III môže sám kontrolovať aktualizácie. Ak toto nastavenie aktivujete, bude kontaktovať hlavný server Firefly III, či je dostupná nová verzia Firefly III. Ak áno, dostanete upozornenie. Toto upozornenie si môžete vyskúšať kliknutím na tlačítko napravo. Prosím, vyberte nižšie, či chcete, aby Firefly III kontroloval aktualizácie.', + 'check_for_updates_permission' => 'Firefly III môže automaticky kontrolovať dostupnosť aktualizácií, ale potrebuje k tomu vaše povolenie. Prejdite do správy a označte, či chcete túto funkciu zapnúť.', + 'updates_ask_me_later' => 'Spýtať sa neskôr', + 'updates_do_not_check' => 'Nezisťovať dostupnosť aktualizácií', + 'updates_enable_check' => 'Zisťovať dostupnosť aktualizácií', + 'admin_update_check_now_title' => 'Zistiť dostupnosť aktualizácií teraz', + 'admin_update_check_now_explain' => 'Ak stlačíte tlačidlo, Firefly III zistí, či je vaša aktuálna verzia najnovšia.', + 'check_for_updates_button' => 'Skontrolovať teraz!', + 'update_new_version_alert' => 'Je dostupná nová verzia Firefly III. Pracujete s verziou :your_version, najnovšia verzia je :new_version zverejnená :date.', + 'update_version_beta' => 'Toto je BETA verzia. Môžu sa vyskytnúť chyby.', + 'update_version_alpha' => 'Toto je ALPHA verzia. Môžu sa vyskytnúť chyby.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Pracujete s verziou :version, čo je najnovšie dostupné vydanie.', + 'update_newer_version_alert' => 'Pracujete s verziou :your_version, ktorá je novšia, než posledné vydanie, :new_version.', + 'update_check_error' => 'Pri kontrole aktualizácii nastala chyba: :error', + 'unknown_error' => 'Neznáma chyba. Prepáčte.', + 'disabled_but_check' => 'Vypli ste kontrolu aktualizácií. Nezabudnite občas skontrolovať aktualizácie manuálne. Ďakujeme!', + 'admin_update_channel_title' => 'Aktualizačný kanál', + 'admin_update_channel_explain' => 'Firefly III má tri "kanály" aktualizácií, ktoré určujú, ako napred ste so svojim systémom, čo sa týka funkcií, vylepšení a chýb. Ak radi skúšate nové veci, použite "beta" kanál a ak vás bavi žiť nebezpečne, vyberte si "alfa".', + 'update_channel_stable' => 'Stabilná verzia. Všetko by malo fungovať.', + 'update_channel_beta' => 'Beta verzia. Nové funkcie, môžu sa vyskytnúť chyby.', + 'update_channel_alpha' => 'Alfa verzia. Hodíme sem, čo nás napadne, a použije sa, čo sa uchytí.', // search - 'search' => 'Hľadať', - 'search_query' => 'Požiadavka', - 'search_found_transactions' => 'Firefly III našiel :count transakciu za :time sekúnd.|Firefly III našiel :count transakcií za :time sekúnd.', - 'search_found_more_transactions' => 'Firefly III našiel viac než :count transakcií za :time sekúnd.', - 'search_for_query' => 'Firefly III vyhľadáva transakcie obsahujúce tieto výrazy: :query', - 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', + 'search' => 'Hľadať', + 'search_query' => 'Požiadavka', + 'search_found_transactions' => 'Firefly III našiel :count transakciu za :time sekúnd.|Firefly III našiel :count transakcií za :time sekúnd.', + 'search_found_more_transactions' => 'Firefly III našiel viac než :count transakcií za :time sekúnd.', + 'search_for_query' => 'Firefly III vyhľadáva transakcie obsahujúce tieto výrazy: :query', + 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaction date is ":value"', 'search_modifier_not_date_on' => 'Transaction date is not ":value"', 'search_modifier_reconciled' => 'Transaction is reconciled', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Typ transakcie je ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Štítok je ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Pri vyhľadávaní sa použijú aj nasledujúce modifikátory:', 'general_search_error' => 'Pri hľadaní sa vyskytla chyba. Ďalšie informácie nájdete v súboroch denníka.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'Neaktívne pravidlá nie je možné spustiť.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Pravidlá', 'rule_name' => 'Názov pravidla', 'rule_triggers' => 'Pravidlo se uplatní, ak', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Kedy bola transakcia aktualizovaná', 'rule_trigger_user_action' => 'Použivateľská akcia je „:trigger_value“', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Názov zdrojového účtu začína..', 'rule_trigger_source_account_starts' => 'Názov zdrojového účtu začína ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Rozpočet je „:trigger_value“', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Mena transakcie je..', 'rule_trigger_currency_is' => 'Mena transakcie je „:trigger_value“', 'rule_trigger_foreign_currency_is_choice' => 'Cudzia mena transakcie je..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Skupina pravidiel pre účty', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Pravidlo pre účet ":name"', 'new_rule_for_bill_description' => 'Toto pravidlo označuje transakcie pre účet ":name".', - 'new_rule_for_journal_title' => 'Pravidlo založené na transakcii ":description"', - 'new_rule_for_journal_description' => 'Toto pravidlo je založené na transakcii ":description". Zachytí transakcie, ktoré sú presne také isté.', + 'new_rule_for_journal_title' => 'Pravidlo založené na transakcii ":description"', + 'new_rule_for_journal_description' => 'Toto pravidlo je založené na transakcii ":description". Zachytí transakcie, ktoré sú presne také isté.', // tags - 'store_new_tag' => 'Uložiť nový štítok', - 'update_tag' => 'Upraviť štítok', - 'no_location_set' => 'Žiadna poloha.', - 'meta_data' => 'Metadata', - 'location' => 'Poloha', - 'without_date' => 'Bez dátumu', - 'result' => 'Výsledok', - 'sums_apply_to_range' => 'Všetky súčty sa vzťahujú na vybraný rozsah', - 'mapbox_api_key' => 'Pre použitie mapy získajte API kľúč z Mapboxu. Otvorte súbor .env a tento kľúč vložte za MAPBOX_API_KEY=.', - 'press_object_location' => 'Pre nastavenie pozície objektu kliknite pravým tlačítkom alebo kliknite a podržte.', - 'clear_location' => 'Odstrániť pozíciu', - 'delete_all_selected_tags' => 'Odstrániť všetky vybraté štítky', - 'select_tags_to_delete' => 'Nezabudnite vybrať nejaké štítky.', - 'deleted_x_tags' => ':count štítok bol odstránený.|:count štítkov bolo odstránených.', - 'create_rule_from_transaction' => 'Vytvoriť na základe transakcie štítok', - 'create_recurring_from_transaction' => 'Vytvoriť na základe transakcie opakovanú transakciu', - + 'store_new_tag' => 'Uložiť nový štítok', + 'update_tag' => 'Upraviť štítok', + 'no_location_set' => 'Žiadna poloha.', + 'meta_data' => 'Metadata', + 'location' => 'Poloha', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Bez dátumu', + 'result' => 'Výsledok', + 'sums_apply_to_range' => 'Všetky súčty sa vzťahujú na vybraný rozsah', + 'mapbox_api_key' => 'Pre použitie mapy získajte API kľúč z Mapboxu. Otvorte súbor .env a tento kľúč vložte za MAPBOX_API_KEY=.', + 'press_object_location' => 'Pre nastavenie pozície objektu kliknite pravým tlačítkom alebo kliknite a podržte.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Odstrániť pozíciu', + 'delete_all_selected_tags' => 'Odstrániť všetky vybraté štítky', + 'select_tags_to_delete' => 'Nezabudnite vybrať nejaké štítky.', + 'deleted_x_tags' => ':count štítok bol odstránený.|:count štítkov bolo odstránených.', + 'create_rule_from_transaction' => 'Vytvoriť na základe transakcie štítok', + 'create_recurring_from_transaction' => 'Vytvoriť na základe transakcie opakovanú transakciu', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(rovné jazyku)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Účty na úvodnej obrazovke', - 'pref_home_screen_accounts_help' => 'Ktoré účty zobraziť na úvodnej stránke?', - 'pref_view_range' => 'Zobraziť rozsah', - 'pref_view_range_help' => 'Niektoré grafy sú automaticky zoskupené podľa období. Vaše rozpočty budú tiež zoskupené podľa období. Aké obdobie by ste uprednostnili?', - 'pref_1D' => 'Jeden deň', - 'pref_1W' => 'Jeden týždeň', - 'pref_1M' => 'Jeden mesiac', - 'pref_3M' => 'Tri mesiace (štvrťrok)', - 'pref_6M' => 'Šesť mesiacov', - 'pref_1Y' => 'Jeden rok', - 'pref_last365' => 'Last year', - 'pref_last90' => 'Last 90 days', - 'pref_last30' => 'Last 30 days', - 'pref_last7' => 'Last 7 days', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Jazyky', - 'pref_locale' => 'Miestne nastavenia', - 'pref_languages_help' => 'Firefly III podporuje niekoľko jazykov – v ktorom ho chcete používať?', - 'pref_locale_help' => 'Firefly III vám umožňuje nastaviť ďalšie nastavenia, ako napríklad formátovanie mien, čísel a údajov. Položky v tomto zozname nemusia byť podporované vašim systémom. Firefly III nemá správne nastavené správne údaje pre všetky lokalizácie. Pre vylepšenie ma kontaktujte.', - 'pref_locale_no_demo' => 'Táto vlastnosť nebude pre demo použivateľa fungovať.', - 'pref_custom_fiscal_year' => 'Nastavenie fiškálneho roku', - 'pref_custom_fiscal_year_label' => 'Zapnuté', - 'pref_custom_fiscal_year_help' => 'Pre krajiny, v ktorých fiškálny rok nezačína 1. januára a tým pádom ani nekončí 31. decembra, je tu možné nastaviť iný začiatok a koniec', - 'pref_fiscal_year_start_label' => 'Dátum začiatku fiškálneho roka', - 'pref_two_factor_auth' => 'Dvojfázové overenie', - 'pref_two_factor_auth_help' => 'Keď povolíte dvojstupňové overenie (známe tiež ako dvojfaktorové overenie), pridáte do svojho účtu ďalšiu vrstvu zabezpečenia. Prihlásite sa pomocou niečoho, čo viete (svoje heslo), a toho, čo máte (verifikačný kód). Overovacie kódy generuje aplikácia vo vašom telefóne, napríklad Authy alebo Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Zapnúť dvojfázové overenie', - 'pref_two_factor_auth_disabled' => 'Dvojkrokové overenie odstránené a vypnuté', - 'pref_two_factor_auth_remove_it' => 'Nezabudnite tento účet odstrániť z overovacej aplikácie!', - 'pref_two_factor_auth_code' => 'Overiť kód', - 'pref_two_factor_auth_code_help' => 'Naskenujte QR kód v aplikácii na vašom telefóne (napríklad Authy alebo Google Authenticator) a vložte aplikáciou vytvorený kód.', - 'pref_two_factor_auth_reset_code' => 'Obnoviť overovací kód', - 'pref_two_factor_auth_disable_2fa' => 'Vypnúť dvojkrokové overenie', - '2fa_use_secret_instead' => 'Ak nemôžete naskenovať QR kód, použite namiesto neho tajný kľúč: :secret.', - '2fa_backup_codes' => 'Tieto záložné kódy si odložte, pre prípad straty vášho zariadenia.', - '2fa_already_enabled' => 'Dvojkrokové overenie je už zapnuté.', - 'wrong_mfa_code' => 'Tento MFA kód nie je platný.', - 'pref_save_settings' => 'Uložiť nastavenia', - 'saved_preferences' => 'Predvoľby uložené!', - 'preferences_general' => 'Všeobecné', - 'preferences_frontpage' => 'Úvodná obrazovka', - 'preferences_security' => 'Zabezpečenie', - 'preferences_layout' => 'Rozvrhnutie', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Zobrazovať vklady na úvodnej obrazovke', - 'pref_home_show_deposits_info' => 'Úvodná obrazovka už zobrazuje vaše výdavkové účty. Majú sa zobraziť aj príjmové?', - 'pref_home_do_show_deposits' => 'Áno, zobraziť ich', - 'successful_count' => 'z toho :count úspešné', - 'list_page_size_title' => 'Počet na stranu', - 'list_page_size_help' => 'Akýkoľvek zoznam údajov (účty, transakcie, atď) zobrazuje toto maximum na stránku.', - 'list_page_size_label' => 'Veľkosť stránky', - 'between_dates' => '(:start a :end)', - 'pref_optional_fields_transaction' => 'Voliteľné údaje pre transakcie', - 'pref_optional_fields_transaction_help' => 'Pri vytváraní novej transakcie nie sú predvolene povolené všetky polia (kvôli neprehľadnosti). Nižšie môžete tieto polia povoliť, ak si myslíte, že by mohli byť pre vás užitočné. Samozrejme, každé pole, ktoré je zakázané, ale už je vyplnené, bude viditeľné bez ohľadu na nastavenie.', - 'optional_tj_date_fields' => 'Políčka pre dátum', - 'optional_tj_other_fields' => 'Iné údaje', - 'optional_tj_attachment_fields' => 'Políčka pre prílohy', - 'pref_optional_tj_interest_date' => 'Úrokový dátum', - 'pref_optional_tj_book_date' => 'Dátum rezervácie', - 'pref_optional_tj_process_date' => 'Dátum spracovania', - 'pref_optional_tj_due_date' => 'Dátum splatnosti', - 'pref_optional_tj_payment_date' => 'Dátum úhrady', - 'pref_optional_tj_invoice_date' => 'Dátum vystavenia', - 'pref_optional_tj_internal_reference' => 'Interná referencia', - 'pref_optional_tj_notes' => 'Poznámky', - 'pref_optional_tj_attachments' => 'Prílohy', - 'pref_optional_tj_external_url' => 'External URL', - 'pref_optional_tj_location' => 'Poloha', - 'pref_optional_tj_links' => 'Prepojenia transakcie', - 'optional_field_meta_dates' => 'Dátumy', - 'optional_field_meta_business' => 'Spoločnosť', - 'optional_field_attachments' => 'Prílohy', - 'optional_field_meta_data' => 'Voliteľné metadata', - 'external_url' => 'Externá URL', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(rovné jazyku)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Účty na úvodnej obrazovke', + 'pref_home_screen_accounts_help' => 'Ktoré účty zobraziť na úvodnej stránke?', + 'pref_view_range' => 'Zobraziť rozsah', + 'pref_view_range_help' => 'Niektoré grafy sú automaticky zoskupené podľa období. Vaše rozpočty budú tiež zoskupené podľa období. Aké obdobie by ste uprednostnili?', + 'pref_1D' => 'Jeden deň', + 'pref_1W' => 'Jeden týždeň', + 'pref_1M' => 'Jeden mesiac', + 'pref_3M' => 'Tri mesiace (štvrťrok)', + 'pref_6M' => 'Šesť mesiacov', + 'pref_1Y' => 'Jeden rok', + 'pref_last365' => 'Last year', + 'pref_last90' => 'Last 90 days', + 'pref_last30' => 'Last 30 days', + 'pref_last7' => 'Last 7 days', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => 'Jazyky', + 'pref_locale' => 'Miestne nastavenia', + 'pref_languages_help' => 'Firefly III podporuje niekoľko jazykov – v ktorom ho chcete používať?', + 'pref_locale_help' => 'Firefly III vám umožňuje nastaviť ďalšie nastavenia, ako napríklad formátovanie mien, čísel a údajov. Položky v tomto zozname nemusia byť podporované vašim systémom. Firefly III nemá správne nastavené správne údaje pre všetky lokalizácie. Pre vylepšenie ma kontaktujte.', + 'pref_locale_no_demo' => 'Táto vlastnosť nebude pre demo použivateľa fungovať.', + 'pref_custom_fiscal_year' => 'Nastavenie fiškálneho roku', + 'pref_custom_fiscal_year_label' => 'Zapnuté', + 'pref_custom_fiscal_year_help' => 'Pre krajiny, v ktorých fiškálny rok nezačína 1. januára a tým pádom ani nekončí 31. decembra, je tu možné nastaviť iný začiatok a koniec', + 'pref_fiscal_year_start_label' => 'Dátum začiatku fiškálneho roka', + 'pref_two_factor_auth' => 'Dvojfázové overenie', + 'pref_two_factor_auth_help' => 'Keď povolíte dvojstupňové overenie (známe tiež ako dvojfaktorové overenie), pridáte do svojho účtu ďalšiu vrstvu zabezpečenia. Prihlásite sa pomocou niečoho, čo viete (svoje heslo), a toho, čo máte (verifikačný kód). Overovacie kódy generuje aplikácia vo vašom telefóne, napríklad Authy alebo Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Zapnúť dvojfázové overenie', + 'pref_two_factor_auth_disabled' => 'Dvojkrokové overenie odstránené a vypnuté', + 'pref_two_factor_auth_remove_it' => 'Nezabudnite tento účet odstrániť z overovacej aplikácie!', + 'pref_two_factor_auth_code' => 'Overiť kód', + 'pref_two_factor_auth_code_help' => 'Naskenujte QR kód v aplikácii na vašom telefóne (napríklad Authy alebo Google Authenticator) a vložte aplikáciou vytvorený kód.', + 'pref_two_factor_auth_reset_code' => 'Obnoviť overovací kód', + 'pref_two_factor_auth_disable_2fa' => 'Vypnúť dvojkrokové overenie', + '2fa_use_secret_instead' => 'Ak nemôžete naskenovať QR kód, použite namiesto neho tajný kľúč: :secret.', + '2fa_backup_codes' => 'Tieto záložné kódy si odložte, pre prípad straty vášho zariadenia.', + '2fa_already_enabled' => 'Dvojkrokové overenie je už zapnuté.', + 'wrong_mfa_code' => 'Tento MFA kód nie je platný.', + 'pref_save_settings' => 'Uložiť nastavenia', + 'saved_preferences' => 'Predvoľby uložené!', + 'preferences_general' => 'Všeobecné', + 'preferences_frontpage' => 'Úvodná obrazovka', + 'preferences_security' => 'Zabezpečenie', + 'preferences_layout' => 'Rozvrhnutie', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Zobrazovať vklady na úvodnej obrazovke', + 'pref_home_show_deposits_info' => 'Úvodná obrazovka už zobrazuje vaše výdavkové účty. Majú sa zobraziť aj príjmové?', + 'pref_home_do_show_deposits' => 'Áno, zobraziť ich', + 'successful_count' => 'z toho :count úspešné', + 'list_page_size_title' => 'Počet na stranu', + 'list_page_size_help' => 'Akýkoľvek zoznam údajov (účty, transakcie, atď) zobrazuje toto maximum na stránku.', + 'list_page_size_label' => 'Veľkosť stránky', + 'between_dates' => '(:start a :end)', + 'pref_optional_fields_transaction' => 'Voliteľné údaje pre transakcie', + 'pref_optional_fields_transaction_help' => 'Pri vytváraní novej transakcie nie sú predvolene povolené všetky polia (kvôli neprehľadnosti). Nižšie môžete tieto polia povoliť, ak si myslíte, že by mohli byť pre vás užitočné. Samozrejme, každé pole, ktoré je zakázané, ale už je vyplnené, bude viditeľné bez ohľadu na nastavenie.', + 'optional_tj_date_fields' => 'Políčka pre dátum', + 'optional_tj_other_fields' => 'Iné údaje', + 'optional_tj_attachment_fields' => 'Políčka pre prílohy', + 'pref_optional_tj_interest_date' => 'Úrokový dátum', + 'pref_optional_tj_book_date' => 'Dátum rezervácie', + 'pref_optional_tj_process_date' => 'Dátum spracovania', + 'pref_optional_tj_due_date' => 'Dátum splatnosti', + 'pref_optional_tj_payment_date' => 'Dátum úhrady', + 'pref_optional_tj_invoice_date' => 'Dátum vystavenia', + 'pref_optional_tj_internal_reference' => 'Interná referencia', + 'pref_optional_tj_notes' => 'Poznámky', + 'pref_optional_tj_attachments' => 'Prílohy', + 'pref_optional_tj_external_url' => 'External URL', + 'pref_optional_tj_location' => 'Poloha', + 'pref_optional_tj_links' => 'Prepojenia transakcie', + 'optional_field_meta_dates' => 'Dátumy', + 'optional_field_meta_business' => 'Spoločnosť', + 'optional_field_attachments' => 'Prílohy', + 'optional_field_meta_data' => 'Voliteľné metadata', + 'external_url' => 'Externá URL', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'Všetky vaše sedenia boli odhlásené.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Odstrániť VŠETKY vaše rozpočty', - 'delete_all_categories' => 'Odstrániť VŠETKY vaše kategórie', - 'delete_all_tags' => 'Odstrániť VŠETKY vaše štítky', - 'delete_all_bills' => 'Odstrániť VŠETKY vaše účty', - 'delete_all_piggy_banks' => 'Odstrániť VŠETKY vaše pokladničky', - 'delete_all_rules' => 'Odstrániť VŠETKY vaše pravidlá', - 'delete_all_recurring' => 'Odstrániť VŠETKY vaše opakujúce sa transakcie', - 'delete_all_object_groups' => 'Odstrániť VŠETKY vaše skupiny objektov', - 'delete_all_accounts' => 'Odstrániť VŠETKY vaše účty', - 'delete_all_asset_accounts' => 'Odstrániť VŠETKY vaše účty aktív', - 'delete_all_expense_accounts' => 'Odstrániť VŠETKY výdavkové účty', - 'delete_all_revenue_accounts' => 'Odstrániť VŠETKY vaše výnosové účty', - 'delete_all_liabilities' => 'Odstrániť VŠETKY vaše záväzky', - 'delete_all_transactions' => 'Odstrániť VŠETKY vaše transakcie', - 'delete_all_withdrawals' => 'Odstrániť VŠETKY vaše výbery', - 'delete_all_deposits' => 'Odstrániť VŠETKY vaše vklady', - 'delete_all_transfers' => 'Odstrániť VŠETKY vaše prevody', - 'also_delete_transactions' => 'Odstránením účtov sa tiež odstránia VŠETKY previazané výbery, vklady a prevody!', - 'deleted_all_budgets' => 'Všetky rozpočty boli odstránené', - 'deleted_all_categories' => 'Všetky kategórie boli odstránené', - 'deleted_all_tags' => 'Všetky štítky boli odstránené', - 'deleted_all_bills' => 'Všetky účty boli odstránené', - 'deleted_all_piggy_banks' => 'Všetky pokladničky boli odstránené', - 'deleted_all_rules' => 'Všetky pravidlá a skupiny pravidiel boli odstránené', - 'deleted_all_object_groups' => 'Všetky skupiny boli odstránené', - 'deleted_all_accounts' => 'Všetky účty boli odstránené', - 'deleted_all_asset_accounts' => 'Všetky účty aktív boli odstránené', - 'deleted_all_expense_accounts' => 'Všetky výdavkové účty boli odstránené', - 'deleted_all_revenue_accounts' => 'Všetky výnosové účty boli odstránené', - 'deleted_all_liabilities' => 'Všetky záväzky boli odstránené', - 'deleted_all_transactions' => 'Všetky transakcie boli odstránené', - 'deleted_all_withdrawals' => 'Všetky výbery boli odstránené', - 'deleted_all_deposits' => 'Všetky vklady boli odstránené', - 'deleted_all_transfers' => 'Všetky prevody boli odstránené', - 'deleted_all_recurring' => 'Všetky opakované transakcie boli odstránené', - 'change_your_password' => 'Zmeňte si heslo', - 'delete_account' => 'Odstrániť účet', - 'current_password' => 'Aktuálne heslo', - 'new_password' => 'Nové heslo', - 'new_password_again' => 'Nové heslo (kontrola)', - 'delete_your_account' => 'Odstráňte svoj účet', - 'delete_your_account_help' => 'Pri odstránení vášho účtu sa zmažú všetky účty, transakcie, všetko, čo ste vo Firefly III uložili. Bude to PREČ.', - 'delete_your_account_password' => 'Pokračujte zadaním svojho hesla.', - 'password' => 'Heslo', - 'are_you_sure' => 'Ste si istí? Túto akciu nie je možné vrátiť späť.', - 'delete_account_button' => 'Odstrániť účet', - 'invalid_current_password' => 'Neplatné aktuálne heslo!', - 'password_changed' => 'Heslo zmenené!', - 'should_change' => 'Cieľom je zmeniť vaše heslo.', - 'invalid_password' => 'Neplatné heslo!', - 'what_is_pw_security' => 'Čo znamená „overiť bezpečnosť hesla“?', - 'secure_pw_title' => 'Ako zvoliť bezpečné heslo', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => 'Neprejde týždeň, aby sme nevideli správy o ďalšej stránke, ktorá prišla o databázu hesiel svojich použivateľov. Hackeri a zlodeji tieto heslá používajú pre pokusy o ukradnutie vašich súkromných informácií. Informácie sú cenné.', - 'secure_pw_ff' => 'Používate rovnaké heslo na viacerých webových službách? Ak jedna z nich príde o vaše heslo, hackeri získajú prístup k všetkým z nich. Firefly III sa spolieha na to, že si zvolíte silné a inde nepoužívané heslo pre ochranu vašich finančných záznamov.', - 'secure_pw_check_box' => 'Firefly III môže pre vás skontrolovať heslo, ktoré chcete použiť, či nebolo v minulosti odcudzené. V takom prípade vám ho NEodporučí použiť.', - 'secure_pw_working_title' => 'Ako to funguje?', - 'secure_pw_working' => 'Zaškrtnutím tohto políčka Firefly III odošle prvých päť znakov hash vášho hesla SHA1 na web Troy Hunt a zistí, či je vaše heslo na zozname. To vám zabráni v používaní nebezpečných hesiel, ako sa odporúča v najnovšej špeciálnej publikácii NIST týkajúcej sa bezpečnosti.', - 'secure_pw_should' => 'Mám to zaškrtnúť?', - 'secure_pw_long_password' => 'Áno, vždy overiť bezpečnosť hesla.', - 'command_line_token' => 'Token pre príkazový riadok', - 'explain_command_line_token' => 'Tento token potrebujete na vykonávanie možností príkazového riadku, ako je napríklad export údajov. Bez toho tento citlivý príkaz nebude fungovať. Nezdieľajte svoj token príkazového riadku. Nikto od vás nebude žiadať tento token, ani ja. Ak sa bojíte, že ste to stratili, alebo keď ste paranoidní, regenerujte tento token pomocou tlačidla.', - 'regenerate_command_line_token' => 'Pregenerovať token príkazového riadka', - 'token_regenerated' => 'Nový token pre príkazový riadok bol vytvorený', - 'change_your_email' => 'Zmena e-mailovej adresy', - 'email_verification' => 'E-mailová správa bude zaslaná na vašu starú A novú e-mailovú adresu. Z bezpečnostných dôvodov sa nebudete môcť prihlásiť, kým neoveríte svoju novú e-mailovú adresu. Ak si nie ste istí, či je vaša inštalácia Firefly III schopná odosielať e-maily, nepoužívajte túto funkciu. Ak ste správcom, môžete to otestovať v časti Správa.', - 'email_changed_logout' => 'Kým neoveríte svoju e-mailovú adresu, nemôžete sa prihlásiť.', - 'login_with_new_email' => 'Teraz sa môžete prihlásiť so svojou novou e-mailovou adresou.', - 'login_with_old_email' => 'Teraz sa môžete prihlásiť so svojou starou e-mailovou adresou.', - 'login_provider_local_only' => 'Táto akcia nie je k dispozícii pri autentifikácii prostredníctvom „:login_provider“.', - 'external_user_mgt_disabled' => 'Táto akcia nie je k dispozícii, keď Firefly III nie je zodpovedný za správu používateľov alebo manipuláciu s autentifikáciou.', - 'external_auth_disabled' => 'Táto akcia nie je dostupná, ak Firefly III nie je zodpovedný za autentifikáciu.', - 'delete_local_info_only' => "Pretože Firefly III nie je zodpovedný za správu používateľov alebo manipuláciu s autentifikáciou, táto funkcia vymaže iba miestne informácie Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth klienti', - 'profile_oauth_no_clients' => 'Zatiaľ ste nevytvorili žiadneho OAuth klienta.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Klienti', - 'profile_oauth_client_id' => 'ID klienta', - 'profile_oauth_client_name' => 'Meno/Názov', - 'profile_oauth_client_secret' => 'Tajný kľúč', - 'profile_oauth_create_new_client' => 'Vytvoriť nového klienta', - 'profile_oauth_create_client' => 'Vytvoriť klienta', - 'profile_oauth_edit_client' => 'Upraviť klienta', - 'profile_oauth_name_help' => 'Niečo, čo vaši použivatelia poznajú a budú tomu dôverovať.', - 'profile_oauth_redirect_url' => 'URL presmerovania', - 'profile_oauth_redirect_url_help' => 'Spätná URL pre overenie autorizácie vašej aplikácie.', - 'profile_authorized_apps' => 'Povolené aplikácie', - 'profile_authorized_clients' => 'Autorizovaní klienti', - 'profile_scopes' => 'Rozsahy', - 'profile_revoke' => 'Odvolať', - 'profile_oauth_client_secret_title' => 'Tajný kľúč klienta', - 'profile_oauth_client_secret_expl' => 'Toto je váš tajný kľúč klienta. Toto je jediný raz, kedy sa zobrazí - nestraťte ho! Odteraz môžete tento tajný kľúč používať pre prístup k API.', - 'profile_personal_access_tokens' => 'Osobné prístupové tokeny', - 'profile_personal_access_token' => 'Osobný prístupový token', - 'profile_oauth_confidential' => 'Dôverné', - 'profile_oauth_confidential_help' => 'Vyžadujte od klienta autentifikáciu pomocou tajného kľúča. Dôverní klienti môžu uchovávať poverenia bezpečným spôsobom bez toho, aby boli vystavení neoprávneným stranám. Verejné aplikácie, ako napríklad natívna pracovná plocha alebo aplikácie Java SPA, nedokážu tajné kľúče bezpečne uchovať.', - 'profile_personal_access_token_explanation' => 'Toto je váš nový osobný prístupový token. Toto je jediný raz, kedy sa zobrazí - nestraťte ho! Odteraz ho môžete používať pre prístup k API.', - 'profile_no_personal_access_token' => 'Ešte ste nevytvorili žiadne osobné prístupové tokeny.', - 'profile_create_new_token' => 'Vytvoriť nový token', - 'profile_create_token' => 'Vytvoriť token', - 'profile_create' => 'Vytvoriť', - 'profile_save_changes' => 'Uložiť zmeny', - 'profile_whoops' => 'Ajaj!', - 'profile_something_wrong' => 'Niečo sa pokazilo!', - 'profile_try_again' => 'Niečo sa pokazilo. Prosím, skúste znova.', - 'amounts' => 'Suma', - 'multi_account_warning_unknown' => 'V závislosti od typu vytvorenej transakcie, môže byť zdrojový a/alebo cieľový účet následných rozúčtovaní prepísaný údajmi v prvom rozdelení transakcie.', - 'multi_account_warning_withdrawal' => 'Majte na pamäti, že zdrojový bankový účet následných rozúčtovaní bude prepísaný tým, čo je definované v prvom rozdelení výberu.', - 'multi_account_warning_deposit' => 'Majte na pamäti, že zdrojový bankový účet následných rozúčtovaní bude prepísaný tým, čo je definované v prvom rozúčtovaní vkladu.', - 'multi_account_warning_transfer' => 'Majte na pamäti, že zdrojový a cieľový bankový účet následných rozúčtovaní bude prepísaný tým, čo je definované v prvom rozúčtovaní prevodu.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'Všetky vaše sedenia boli odhlásené.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Odstrániť VŠETKY vaše rozpočty', + 'delete_all_categories' => 'Odstrániť VŠETKY vaše kategórie', + 'delete_all_tags' => 'Odstrániť VŠETKY vaše štítky', + 'delete_all_bills' => 'Odstrániť VŠETKY vaše účty', + 'delete_all_piggy_banks' => 'Odstrániť VŠETKY vaše pokladničky', + 'delete_all_rules' => 'Odstrániť VŠETKY vaše pravidlá', + 'delete_all_recurring' => 'Odstrániť VŠETKY vaše opakujúce sa transakcie', + 'delete_all_object_groups' => 'Odstrániť VŠETKY vaše skupiny objektov', + 'delete_all_accounts' => 'Odstrániť VŠETKY vaše účty', + 'delete_all_asset_accounts' => 'Odstrániť VŠETKY vaše účty aktív', + 'delete_all_expense_accounts' => 'Odstrániť VŠETKY výdavkové účty', + 'delete_all_revenue_accounts' => 'Odstrániť VŠETKY vaše výnosové účty', + 'delete_all_liabilities' => 'Odstrániť VŠETKY vaše záväzky', + 'delete_all_transactions' => 'Odstrániť VŠETKY vaše transakcie', + 'delete_all_withdrawals' => 'Odstrániť VŠETKY vaše výbery', + 'delete_all_deposits' => 'Odstrániť VŠETKY vaše vklady', + 'delete_all_transfers' => 'Odstrániť VŠETKY vaše prevody', + 'also_delete_transactions' => 'Odstránením účtov sa tiež odstránia VŠETKY previazané výbery, vklady a prevody!', + 'deleted_all_budgets' => 'Všetky rozpočty boli odstránené', + 'deleted_all_categories' => 'Všetky kategórie boli odstránené', + 'deleted_all_tags' => 'Všetky štítky boli odstránené', + 'deleted_all_bills' => 'Všetky účty boli odstránené', + 'deleted_all_piggy_banks' => 'Všetky pokladničky boli odstránené', + 'deleted_all_rules' => 'Všetky pravidlá a skupiny pravidiel boli odstránené', + 'deleted_all_object_groups' => 'Všetky skupiny boli odstránené', + 'deleted_all_accounts' => 'Všetky účty boli odstránené', + 'deleted_all_asset_accounts' => 'Všetky účty aktív boli odstránené', + 'deleted_all_expense_accounts' => 'Všetky výdavkové účty boli odstránené', + 'deleted_all_revenue_accounts' => 'Všetky výnosové účty boli odstránené', + 'deleted_all_liabilities' => 'Všetky záväzky boli odstránené', + 'deleted_all_transactions' => 'Všetky transakcie boli odstránené', + 'deleted_all_withdrawals' => 'Všetky výbery boli odstránené', + 'deleted_all_deposits' => 'Všetky vklady boli odstránené', + 'deleted_all_transfers' => 'Všetky prevody boli odstránené', + 'deleted_all_recurring' => 'Všetky opakované transakcie boli odstránené', + 'change_your_password' => 'Zmeňte si heslo', + 'delete_account' => 'Odstrániť účet', + 'current_password' => 'Aktuálne heslo', + 'new_password' => 'Nové heslo', + 'new_password_again' => 'Nové heslo (kontrola)', + 'delete_your_account' => 'Odstráňte svoj účet', + 'delete_your_account_help' => 'Pri odstránení vášho účtu sa zmažú všetky účty, transakcie, všetko, čo ste vo Firefly III uložili. Bude to PREČ.', + 'delete_your_account_password' => 'Pokračujte zadaním svojho hesla.', + 'password' => 'Heslo', + 'are_you_sure' => 'Ste si istí? Túto akciu nie je možné vrátiť späť.', + 'delete_account_button' => 'Odstrániť účet', + 'invalid_current_password' => 'Neplatné aktuálne heslo!', + 'password_changed' => 'Heslo zmenené!', + 'should_change' => 'Cieľom je zmeniť vaše heslo.', + 'invalid_password' => 'Neplatné heslo!', + 'what_is_pw_security' => 'Čo znamená „overiť bezpečnosť hesla“?', + 'secure_pw_title' => 'Ako zvoliť bezpečné heslo', + 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', + 'secure_pw_history' => 'Neprejde týždeň, aby sme nevideli správy o ďalšej stránke, ktorá prišla o databázu hesiel svojich použivateľov. Hackeri a zlodeji tieto heslá používajú pre pokusy o ukradnutie vašich súkromných informácií. Informácie sú cenné.', + 'secure_pw_ff' => 'Používate rovnaké heslo na viacerých webových službách? Ak jedna z nich príde o vaše heslo, hackeri získajú prístup k všetkým z nich. Firefly III sa spolieha na to, že si zvolíte silné a inde nepoužívané heslo pre ochranu vašich finančných záznamov.', + 'secure_pw_check_box' => 'Firefly III môže pre vás skontrolovať heslo, ktoré chcete použiť, či nebolo v minulosti odcudzené. V takom prípade vám ho NEodporučí použiť.', + 'secure_pw_working_title' => 'Ako to funguje?', + 'secure_pw_working' => 'Zaškrtnutím tohto políčka Firefly III odošle prvých päť znakov hash vášho hesla SHA1 na web Troy Hunt a zistí, či je vaše heslo na zozname. To vám zabráni v používaní nebezpečných hesiel, ako sa odporúča v najnovšej špeciálnej publikácii NIST týkajúcej sa bezpečnosti.', + 'secure_pw_should' => 'Mám to zaškrtnúť?', + 'secure_pw_long_password' => 'Áno, vždy overiť bezpečnosť hesla.', + 'command_line_token' => 'Token pre príkazový riadok', + 'explain_command_line_token' => 'Tento token potrebujete na vykonávanie možností príkazového riadku, ako je napríklad export údajov. Bez toho tento citlivý príkaz nebude fungovať. Nezdieľajte svoj token príkazového riadku. Nikto od vás nebude žiadať tento token, ani ja. Ak sa bojíte, že ste to stratili, alebo keď ste paranoidní, regenerujte tento token pomocou tlačidla.', + 'regenerate_command_line_token' => 'Pregenerovať token príkazového riadka', + 'token_regenerated' => 'Nový token pre príkazový riadok bol vytvorený', + 'change_your_email' => 'Zmena e-mailovej adresy', + 'email_verification' => 'E-mailová správa bude zaslaná na vašu starú A novú e-mailovú adresu. Z bezpečnostných dôvodov sa nebudete môcť prihlásiť, kým neoveríte svoju novú e-mailovú adresu. Ak si nie ste istí, či je vaša inštalácia Firefly III schopná odosielať e-maily, nepoužívajte túto funkciu. Ak ste správcom, môžete to otestovať v časti Správa.', + 'email_changed_logout' => 'Kým neoveríte svoju e-mailovú adresu, nemôžete sa prihlásiť.', + 'login_with_new_email' => 'Teraz sa môžete prihlásiť so svojou novou e-mailovou adresou.', + 'login_with_old_email' => 'Teraz sa môžete prihlásiť so svojou starou e-mailovou adresou.', + 'login_provider_local_only' => 'Táto akcia nie je k dispozícii pri autentifikácii prostredníctvom „:login_provider“.', + 'external_user_mgt_disabled' => 'Táto akcia nie je k dispozícii, keď Firefly III nie je zodpovedný za správu používateľov alebo manipuláciu s autentifikáciou.', + 'external_auth_disabled' => 'Táto akcia nie je dostupná, ak Firefly III nie je zodpovedný za autentifikáciu.', + 'delete_local_info_only' => 'Pretože Firefly III nie je zodpovedný za správu používateľov alebo manipuláciu s autentifikáciou, táto funkcia vymaže iba miestne informácie Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth klienti', + 'profile_oauth_no_clients' => 'Zatiaľ ste nevytvorili žiadneho OAuth klienta.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Klienti', + 'profile_oauth_client_id' => 'ID klienta', + 'profile_oauth_client_name' => 'Meno/Názov', + 'profile_oauth_client_secret' => 'Tajný kľúč', + 'profile_oauth_create_new_client' => 'Vytvoriť nového klienta', + 'profile_oauth_create_client' => 'Vytvoriť klienta', + 'profile_oauth_edit_client' => 'Upraviť klienta', + 'profile_oauth_name_help' => 'Niečo, čo vaši použivatelia poznajú a budú tomu dôverovať.', + 'profile_oauth_redirect_url' => 'URL presmerovania', + 'profile_oauth_redirect_url_help' => 'Spätná URL pre overenie autorizácie vašej aplikácie.', + 'profile_authorized_apps' => 'Povolené aplikácie', + 'profile_authorized_clients' => 'Autorizovaní klienti', + 'profile_scopes' => 'Rozsahy', + 'profile_revoke' => 'Odvolať', + 'profile_oauth_client_secret_title' => 'Tajný kľúč klienta', + 'profile_oauth_client_secret_expl' => 'Toto je váš tajný kľúč klienta. Toto je jediný raz, kedy sa zobrazí - nestraťte ho! Odteraz môžete tento tajný kľúč používať pre prístup k API.', + 'profile_personal_access_tokens' => 'Osobné prístupové tokeny', + 'profile_personal_access_token' => 'Osobný prístupový token', + 'profile_oauth_confidential' => 'Dôverné', + 'profile_oauth_confidential_help' => 'Vyžadujte od klienta autentifikáciu pomocou tajného kľúča. Dôverní klienti môžu uchovávať poverenia bezpečným spôsobom bez toho, aby boli vystavení neoprávneným stranám. Verejné aplikácie, ako napríklad natívna pracovná plocha alebo aplikácie Java SPA, nedokážu tajné kľúče bezpečne uchovať.', + 'profile_personal_access_token_explanation' => 'Toto je váš nový osobný prístupový token. Toto je jediný raz, kedy sa zobrazí - nestraťte ho! Odteraz ho môžete používať pre prístup k API.', + 'profile_no_personal_access_token' => 'Ešte ste nevytvorili žiadne osobné prístupové tokeny.', + 'profile_create_new_token' => 'Vytvoriť nový token', + 'profile_create_token' => 'Vytvoriť token', + 'profile_create' => 'Vytvoriť', + 'profile_save_changes' => 'Uložiť zmeny', + 'profile_whoops' => 'Ajaj!', + 'profile_something_wrong' => 'Niečo sa pokazilo!', + 'profile_try_again' => 'Niečo sa pokazilo. Prosím, skúste znova.', + 'amounts' => 'Suma', + 'multi_account_warning_unknown' => 'V závislosti od typu vytvorenej transakcie, môže byť zdrojový a/alebo cieľový účet následných rozúčtovaní prepísaný údajmi v prvom rozdelení transakcie.', + 'multi_account_warning_withdrawal' => 'Majte na pamäti, že zdrojový bankový účet následných rozúčtovaní bude prepísaný tým, čo je definované v prvom rozdelení výberu.', + 'multi_account_warning_deposit' => 'Majte na pamäti, že zdrojový bankový účet následných rozúčtovaní bude prepísaný tým, čo je definované v prvom rozúčtovaní vkladu.', + 'multi_account_warning_transfer' => 'Majte na pamäti, že zdrojový a cieľový bankový účet následných rozúčtovaní bude prepísaný tým, čo je definované v prvom rozúčtovaní prevodu.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Export údajov z Firefly III', - 'export_data_menu' => 'Export údajov', - 'export_data_bc' => 'Export údajov z Firefly III', - 'export_data_main_title' => 'Export údajov z Firefly III', - 'export_data_expl' => 'Tento odkaz vám umožní exportovať všetky transakcie a metadata z Firefly III. Viac informácií o procese nájdete v pomocníkovi (ikona (?) vpravo hore).', - 'export_data_all_transactions' => 'Export všetkých transakcií', - 'export_data_advanced_expl' => 'Ak potrebujete pokročilejší alebo konkrétnejší typ exportu, prečítajte si pomocníka, ako používať príkaz konzoly php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Export údajov z Firefly III', + 'export_data_menu' => 'Export údajov', + 'export_data_bc' => 'Export údajov z Firefly III', + 'export_data_main_title' => 'Export údajov z Firefly III', + 'export_data_expl' => 'Tento odkaz vám umožní exportovať všetky transakcie a metadata z Firefly III. Viac informácií o procese nájdete v pomocníkovi (ikona (?) vpravo hore).', + 'export_data_all_transactions' => 'Export všetkých transakcií', + 'export_data_advanced_expl' => 'Ak potrebujete pokročilejší alebo konkrétnejší typ exportu, prečítajte si pomocníka, ako používať príkaz konzoly php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Jedna príloha|:count príloh', - 'attachments' => 'Prílohy', - 'edit_attachment' => 'Upraviť prílohu ":name"', - 'update_attachment' => 'Upraviť prílohu', - 'delete_attachment' => 'Odstrániť prílohu „:name“', - 'attachment_deleted' => 'Príloha „:name“ bola odstránená', - 'liabilities_deleted' => 'Záväzok „:name“ bol odstránený', - 'attachment_updated' => 'Príloha „:name“ upravená', - 'upload_max_file_size' => 'Maximálna veľkosť súboru: :size', - 'list_all_attachments' => 'Zoznam všetkých príloh', + 'nr_of_attachments' => 'Jedna príloha|:count príloh', + 'attachments' => 'Prílohy', + 'edit_attachment' => 'Upraviť prílohu ":name"', + 'update_attachment' => 'Upraviť prílohu', + 'delete_attachment' => 'Odstrániť prílohu „:name“', + 'attachment_deleted' => 'Príloha „:name“ bola odstránená', + 'liabilities_deleted' => 'Záväzok „:name“ bol odstránený', + 'attachment_updated' => 'Príloha „:name“ upravená', + 'upload_max_file_size' => 'Maximálna veľkosť súboru: :size', + 'list_all_attachments' => 'Zoznam všetkých príloh', // transaction index - 'title_expenses' => 'Výdavky', - 'title_withdrawal' => 'Výdavky', - 'title_revenue' => 'Zisky / príjmy', - 'title_deposit' => 'Zisky / príjmy', - 'title_transfer' => 'Prevody', - 'title_transfers' => 'Prevody', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Výdavky', + 'title_withdrawal' => 'Výdavky', + 'title_revenue' => 'Zisky / príjmy', + 'title_deposit' => 'Zisky / príjmy', + 'title_transfer' => 'Prevody', + 'title_transfers' => 'Prevody', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Tato transakcia už je výber', - 'convert_is_already_type_Deposit' => 'Tato transakcia už je vklad', - 'convert_is_already_type_Transfer' => 'Tato transakcia už je prevod', - 'convert_to_Withdrawal' => 'Zmeniť „:description“ na výber', - 'convert_to_Deposit' => 'Zmeniť „:description“ na vklad', - 'convert_to_Transfer' => 'Zmeniť „:description“ na prevod', - 'convert_options_WithdrawalDeposit' => 'Zmeniť výber na vklad', - 'convert_options_WithdrawalTransfer' => 'Zmeniť výber na prevod', - 'convert_options_DepositTransfer' => 'Zmeniť vklad na prevod', - 'convert_options_DepositWithdrawal' => 'Zmeniť vklad na výber', - 'convert_options_TransferWithdrawal' => 'Zmeniť prevod na výber', - 'convert_options_TransferDeposit' => 'Zmeniť prevod na vklad', - 'convert_Withdrawal_to_deposit' => 'Zmeniť tento výber na vklad', - 'convert_Withdrawal_to_transfer' => 'Zmeniť tento výber na vklad', - 'convert_Deposit_to_withdrawal' => 'Zmeniť tento vklad na výber', - 'convert_Deposit_to_transfer' => 'Zmeniť tento vklad na prevod', - 'convert_Transfer_to_deposit' => 'Zmeniť tento prevod na vklad', - 'convert_Transfer_to_withdrawal' => 'Zmeniť tento prevod na výber', - 'convert_please_set_revenue_source' => 'Vyberte účet aktiv, z kterého peniaze prídu.', - 'convert_please_set_asset_destination' => 'Vyberte účet aktív, na ktorý tieto peniaze odídu.', - 'convert_please_set_expense_destination' => 'Vyberte výdavkový účet, na ktorý peniaze odídu.', - 'convert_please_set_asset_source' => 'Vyberte účet aktív, z ktorého peniaze odídu.', - 'convert_expl_w_d' => 'Pri zmene výberu na vklad sa peniaze namiesto toho, aby sa zo zobrazeného cieľového účtu vybrali, vložia sa naň.|Pri zmene výberu na vklad sa peniaze namiesto výberu zo zobrazených cieľových účtov na ne vložia.', - 'convert_expl_w_t' => 'Pri zmene výberu na prevod sa peniaze prevedú preč zo zdrojového účtu na iný účet aktív alebo pasív namiesto toho, aby sa minuli na pôvodný účet výdavkov.|Pri zmene výberu na prevod sa peniaze prevedú ďalej z zdrojové účty na iné účty aktív alebo pasív namiesto toho, aby sa minuli na pôvodné účty výdavkov.', - 'convert_expl_d_w' => 'Pri zmene vkladu na výber sa peniaze namiesto vybratého vkladu vyberú zo zobrazeného zdrojového účtu.|Pri zmene vkladu na výber sa peniaze namiesto vloženia vyberú zo zobrazených zdrojových účtov. do nich.', - 'convert_expl_d_t' => 'Keď zmeníte vklad na prevod, peniaze sa vložia na uvedený cieľový účet z ktoréhokoľvek z vašich aktív alebo pasív.|Keď zmeníte vklad na prevod, peniaze sa vložia na uvedené cieľové účty z ľubovoľného účtu vašich aktív alebo pasív.', - 'convert_expl_t_w' => 'Keď zmeníte prevod na výber, peniaze sa minú na cieľový účet, ktorý ste tu nastavili, a nie na prevod preč.|Keď zmeníte prevod na výber, peniaze sa minú na cieľové účty, ktoré ste tu nastavili, namiesto toho, aby boli presunuté preč.', - 'convert_expl_t_d' => 'Keď zmeníte prevod na vklad, peniaze sa namiesto toho, aby sa na ne presunuli, uložia na cieľový účet, ktorý vidíte tu.|Keď zmeníte prevod na vklad, peniaze sa vložia na cieľové účty, ktoré vidíte tu, namiesto aby sa do nich preniesli.', - 'convert_select_sources' => 'Ak chcete dokončiť konverziu, nižšie nastavte nový zdrojový účet.|Na dokončenie konverzie nastavte nižšie nové zdrojové účty.', - 'convert_select_destinations' => 'Ak chcete dokončiť konverziu, vyberte nový cieľový účet uvedený nižšie.|Na dokončenie konverzie vyberte nižšie nové cieľové účty.', - 'converted_to_Withdrawal' => 'Transakcia bola prevedená na výber', - 'converted_to_Deposit' => 'Transakcia bola prevedená na vklad', - 'converted_to_Transfer' => 'Transakcia bola prevedená na prevod', - 'invalid_convert_selection' => 'Účet, ktorý ste vybrali, sa už v tejto transakcii používa alebo neexistuje.', - 'source_or_dest_invalid' => 'Nenašli sa správne podrobnosti transakcie. Prevod nie je možný.', - 'convert_to_withdrawal' => 'Zmeniť na výber', - 'convert_to_deposit' => 'Zmeniť na vklad', - 'convert_to_transfer' => 'Zmeniť na prevod', + 'convert_is_already_type_Withdrawal' => 'Tato transakcia už je výber', + 'convert_is_already_type_Deposit' => 'Tato transakcia už je vklad', + 'convert_is_already_type_Transfer' => 'Tato transakcia už je prevod', + 'convert_to_Withdrawal' => 'Zmeniť „:description“ na výber', + 'convert_to_Deposit' => 'Zmeniť „:description“ na vklad', + 'convert_to_Transfer' => 'Zmeniť „:description“ na prevod', + 'convert_options_WithdrawalDeposit' => 'Zmeniť výber na vklad', + 'convert_options_WithdrawalTransfer' => 'Zmeniť výber na prevod', + 'convert_options_DepositTransfer' => 'Zmeniť vklad na prevod', + 'convert_options_DepositWithdrawal' => 'Zmeniť vklad na výber', + 'convert_options_TransferWithdrawal' => 'Zmeniť prevod na výber', + 'convert_options_TransferDeposit' => 'Zmeniť prevod na vklad', + 'convert_Withdrawal_to_deposit' => 'Zmeniť tento výber na vklad', + 'convert_Withdrawal_to_transfer' => 'Zmeniť tento výber na vklad', + 'convert_Deposit_to_withdrawal' => 'Zmeniť tento vklad na výber', + 'convert_Deposit_to_transfer' => 'Zmeniť tento vklad na prevod', + 'convert_Transfer_to_deposit' => 'Zmeniť tento prevod na vklad', + 'convert_Transfer_to_withdrawal' => 'Zmeniť tento prevod na výber', + 'convert_please_set_revenue_source' => 'Vyberte účet aktiv, z kterého peniaze prídu.', + 'convert_please_set_asset_destination' => 'Vyberte účet aktív, na ktorý tieto peniaze odídu.', + 'convert_please_set_expense_destination' => 'Vyberte výdavkový účet, na ktorý peniaze odídu.', + 'convert_please_set_asset_source' => 'Vyberte účet aktív, z ktorého peniaze odídu.', + 'convert_expl_w_d' => 'Pri zmene výberu na vklad sa peniaze namiesto toho, aby sa zo zobrazeného cieľového účtu vybrali, vložia sa naň.|Pri zmene výberu na vklad sa peniaze namiesto výberu zo zobrazených cieľových účtov na ne vložia.', + 'convert_expl_w_t' => 'Pri zmene výberu na prevod sa peniaze prevedú preč zo zdrojového účtu na iný účet aktív alebo pasív namiesto toho, aby sa minuli na pôvodný účet výdavkov.|Pri zmene výberu na prevod sa peniaze prevedú ďalej z zdrojové účty na iné účty aktív alebo pasív namiesto toho, aby sa minuli na pôvodné účty výdavkov.', + 'convert_expl_d_w' => 'Pri zmene vkladu na výber sa peniaze namiesto vybratého vkladu vyberú zo zobrazeného zdrojového účtu.|Pri zmene vkladu na výber sa peniaze namiesto vloženia vyberú zo zobrazených zdrojových účtov. do nich.', + 'convert_expl_d_t' => 'Keď zmeníte vklad na prevod, peniaze sa vložia na uvedený cieľový účet z ktoréhokoľvek z vašich aktív alebo pasív.|Keď zmeníte vklad na prevod, peniaze sa vložia na uvedené cieľové účty z ľubovoľného účtu vašich aktív alebo pasív.', + 'convert_expl_t_w' => 'Keď zmeníte prevod na výber, peniaze sa minú na cieľový účet, ktorý ste tu nastavili, a nie na prevod preč.|Keď zmeníte prevod na výber, peniaze sa minú na cieľové účty, ktoré ste tu nastavili, namiesto toho, aby boli presunuté preč.', + 'convert_expl_t_d' => 'Keď zmeníte prevod na vklad, peniaze sa namiesto toho, aby sa na ne presunuli, uložia na cieľový účet, ktorý vidíte tu.|Keď zmeníte prevod na vklad, peniaze sa vložia na cieľové účty, ktoré vidíte tu, namiesto aby sa do nich preniesli.', + 'convert_select_sources' => 'Ak chcete dokončiť konverziu, nižšie nastavte nový zdrojový účet.|Na dokončenie konverzie nastavte nižšie nové zdrojové účty.', + 'convert_select_destinations' => 'Ak chcete dokončiť konverziu, vyberte nový cieľový účet uvedený nižšie.|Na dokončenie konverzie vyberte nižšie nové cieľové účty.', + 'converted_to_Withdrawal' => 'Transakcia bola prevedená na výber', + 'converted_to_Deposit' => 'Transakcia bola prevedená na vklad', + 'converted_to_Transfer' => 'Transakcia bola prevedená na prevod', + 'invalid_convert_selection' => 'Účet, ktorý ste vybrali, sa už v tejto transakcii používa alebo neexistuje.', + 'source_or_dest_invalid' => 'Nenašli sa správne podrobnosti transakcie. Prevod nie je možný.', + 'convert_to_withdrawal' => 'Zmeniť na výber', + 'convert_to_deposit' => 'Zmeniť na vklad', + 'convert_to_transfer' => 'Zmeniť na prevod', // create new stuff: - 'create_new_withdrawal' => 'Vytvoriť nový výber', - 'create_new_deposit' => 'Vytvoriť nový vklad', - 'create_new_transfer' => 'Vytvoriť nový prevod', - 'create_new_asset' => 'Vytvoriť nový účet aktív', - 'create_new_liabilities' => 'Vytvoriť nový záväzok', - 'create_new_expense' => 'Vytvoriť výdavkoý účet', - 'create_new_revenue' => 'Vytvoriť nový príjmový účet', - 'create_new_piggy_bank' => 'Vytvoriť novú pokladničku', - 'create_new_bill' => 'Vytvoriť nový účet', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Vytvoriť nový výber', + 'create_new_deposit' => 'Vytvoriť nový vklad', + 'create_new_transfer' => 'Vytvoriť nový prevod', + 'create_new_asset' => 'Vytvoriť nový účet aktív', + 'create_new_liabilities' => 'Vytvoriť nový záväzok', + 'create_new_expense' => 'Vytvoriť výdavkoý účet', + 'create_new_revenue' => 'Vytvoriť nový príjmový účet', + 'create_new_piggy_bank' => 'Vytvoriť novú pokladničku', + 'create_new_bill' => 'Vytvoriť nový účet', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Vytvoriť novú menu', - 'store_currency' => 'Uložiť novú menu', - 'update_currency' => 'Upraviť menu', - 'new_default_currency' => ':name je teraz predvolená mena.', - 'cannot_delete_currency' => ':name nie je možné odstrániť, pretože sa stále v aplikácii používa.', - 'cannot_delete_fallback_currency' => ':name je predvolená systémová základná mena a nie je možné ju odstrániť.', - 'cannot_disable_currency_journals' => ':name nie je možné vypnúť, pretože ju používajú niektoré transakcie.', - 'cannot_disable_currency_last_left' => ':name nie je možné vypnúť, pretože je to posledná aktívna mena.', - 'cannot_disable_currency_account_meta' => ':name nie je možné vypnúť, pretože je použitý v majetkových účtoch.', - 'cannot_disable_currency_bills' => ':name nie je možné vypnúť, pretože je použitý v majetkových účtoch.', - 'cannot_disable_currency_recurring' => ':name nie je možné vypnúť, pretože je použitý v opakovaných transakciách.', - 'cannot_disable_currency_available_budgets' => ':name nie je možné vypnúť, pretože je použitý v rozpočtoch.', - 'cannot_disable_currency_budget_limits' => ':name nie je možné vypnúť, pretože je použitý v obmedzeniach rozpočtov.', - 'cannot_disable_currency_current_default' => ':name nie je možné vypnúť, pretože je to aktuálne predvolená mena.', - 'cannot_disable_currency_system_fallback' => ':name nie je možné vypnúť, pretože je to systémová predvolená mena.', - 'disable_EUR_side_effects' => 'Euro je núdzová záložná mena systému. Jeho deaktivácia môže mať nežiaduce vedľajšie účinky a môže spôsobiť neplatnosť záruky.', - 'deleted_currency' => 'Mena :name bola odstránená', - 'created_currency' => 'Mena :name vytvorená', - 'could_not_store_currency' => 'Novú menu sa nepodarilo uložiť.', - 'updated_currency' => 'Mena :name upravená', - 'ask_site_owner' => 'O pridanie, odstránenie alebo zmeny v menách požiadajte prosím :owner.', - 'currencies_intro' => 'Firefly III podporuje rôzne meny, ktoré tu môžete spravovať.', - 'make_default_currency' => 'Nastaviť ako predvolené', - 'default_currency' => 'predvolené', - 'currency_is_disabled' => 'Vypnuté', - 'enable_currency' => 'Zapnúť', - 'disable_currency' => 'Vypnúť', - 'currencies_default_disabled' => 'Väčšina týchto mien je v základnom stave vypnutá. Ak ich chcete používať, musíte ich najprv zapnúť.', - 'currency_is_now_enabled' => 'Mena „:name“ bola zapnutá', - 'currency_is_now_disabled' => 'Mena „:name“ bola vypnutá', + 'create_currency' => 'Vytvoriť novú menu', + 'store_currency' => 'Uložiť novú menu', + 'update_currency' => 'Upraviť menu', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => ':name nie je možné odstrániť, pretože sa stále v aplikácii používa.', + 'cannot_delete_fallback_currency' => ':name je predvolená systémová základná mena a nie je možné ju odstrániť.', + 'cannot_disable_currency_journals' => ':name nie je možné vypnúť, pretože ju používajú niektoré transakcie.', + 'cannot_disable_currency_last_left' => ':name nie je možné vypnúť, pretože je to posledná aktívna mena.', + 'cannot_disable_currency_account_meta' => ':name nie je možné vypnúť, pretože je použitý v majetkových účtoch.', + 'cannot_disable_currency_bills' => ':name nie je možné vypnúť, pretože je použitý v majetkových účtoch.', + 'cannot_disable_currency_recurring' => ':name nie je možné vypnúť, pretože je použitý v opakovaných transakciách.', + 'cannot_disable_currency_available_budgets' => ':name nie je možné vypnúť, pretože je použitý v rozpočtoch.', + 'cannot_disable_currency_budget_limits' => ':name nie je možné vypnúť, pretože je použitý v obmedzeniach rozpočtov.', + 'cannot_disable_currency_current_default' => ':name nie je možné vypnúť, pretože je to aktuálne predvolená mena.', + 'cannot_disable_currency_system_fallback' => ':name nie je možné vypnúť, pretože je to systémová predvolená mena.', + 'disable_EUR_side_effects' => 'Euro je núdzová záložná mena systému. Jeho deaktivácia môže mať nežiaduce vedľajšie účinky a môže spôsobiť neplatnosť záruky.', + 'deleted_currency' => 'Mena :name bola odstránená', + 'created_currency' => 'Mena :name vytvorená', + 'could_not_store_currency' => 'Novú menu sa nepodarilo uložiť.', + 'updated_currency' => 'Mena :name upravená', + 'ask_site_owner' => 'O pridanie, odstránenie alebo zmeny v menách požiadajte prosím :owner.', + 'currencies_intro' => 'Firefly III podporuje rôzne meny, ktoré tu môžete spravovať.', + 'make_default_currency' => 'Nastaviť ako predvolené', + 'default_currency' => 'predvolené', + 'currency_is_disabled' => 'Vypnuté', + 'enable_currency' => 'Zapnúť', + 'disable_currency' => 'Vypnúť', + 'currencies_default_disabled' => 'Väčšina týchto mien je v základnom stave vypnutá. Ak ich chcete používať, musíte ich najprv zapnúť.', + 'currency_is_now_enabled' => 'Mena „:name“ bola zapnutá', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Mena „:name“ bola vypnutá', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Povinné údaje', - 'optionalFields' => 'Voliteľné údaje', - 'options' => 'Možnosti', + 'mandatoryFields' => 'Povinné údaje', + 'optionalFields' => 'Voliteľné údaje', + 'options' => 'Možnosti', // budgets: - 'daily_budgets' => 'Denné rozpočty', - 'weekly_budgets' => 'Týždenné rozpočty', - 'monthly_budgets' => 'Mesačné rozpočty', - 'quarterly_budgets' => 'Štvrťročné rozpočty', - 'half_year_budgets' => 'Polročné rozpočty', - 'yearly_budgets' => 'Ročné rozpočty', - 'other_budgets' => 'Špecifické časované rozpočty', - 'budget_limit_not_in_range' => 'Táto suma platí od :start do :end:', - 'total_available_budget' => 'Suma dostupného rozpočtu (medzi :start a :end)', - 'total_available_budget_in_currency' => 'Celkový rozpočet k dispozici v :currency', - 'see_below' => 'viď nižšie', - 'create_new_budget' => 'Vytvoriť nový rozpočet', - 'store_new_budget' => 'Uložiť nový rozpočet', - 'stored_new_budget' => 'Uložený nový rozpočet „:name“', - 'available_between' => 'Dostupné medzi :start a :end', - 'transactionsWithoutBudget' => 'Výdavky bez rozpočtu', - 'transactions_no_budget' => 'Výdavky bez rozpočtu medzi :start a :end', - 'spent_between' => 'Už utratené medzi :start a :end', - 'set_available_amount' => 'Nastaviť sumu k dispozícii', - 'update_available_amount' => 'Aktualizovať sumu k dispozícii', - 'ab_basic_modal_explain' => 'Pomocou tohto formulára zadajte, koľko očakávate, že budete môcť v uvedenom období zostaviť rozpočet (celkovo v :currency).', - 'createBudget' => 'Nový rozpočet', - 'invalid_currency' => 'Toto nie je platná mena', - 'invalid_amount' => 'Prosím, zadajte sumu', - 'set_ab' => 'Dostupná suma rozpočtu bola nastavená', - 'updated_ab' => 'Dostupná suma rozpočtu bola aktualizovaná', - 'deleted_ab' => 'Dostupná suma rozpočtu bola odstránená', - 'deleted_bl' => 'Rozpočtovaná suma bola odstránená', - 'alt_currency_ab_create' => 'Nastaviť dostupný rozpočet v inej mene', - 'bl_create_btn' => 'Nastaviť rozpočet v inej mene', - 'inactiveBudgets' => 'Neaktívne rozpočty', - 'without_budget_between' => 'Transakcia bez rozpočtu medzi :start a :end', - 'delete_budget' => 'Odstrániť rozpočet „:name“', - 'deleted_budget' => 'Rozpočet „:name“ bol odstránený', - 'edit_budget' => 'Upraviť rozpočet „:name“', - 'updated_budget' => 'Upravený rozpočet „:name“', - 'update_amount' => 'Upraviť sumu', - 'update_budget' => 'Upraviť rozpočet', - 'update_budget_amount_range' => 'Aktualizovať (očakávané) dostupné množstvo medzi :start a :end', - 'set_budget_limit_title' => 'Nastaviť rozpočtovanú sumu pre rozpočet :budget medzi :start a :end', - 'set_budget_limit' => 'Nastavte sumu rozpočtu', - 'budget_period_navigator' => 'Navigátor období', - 'info_on_available_amount' => 'Čo mám(e) k dispozícii?', - 'available_amount_indication' => 'Pomocou týchto súm získate informáciu o tom, aký môže byť váš celkový rozpočet.', - 'suggested' => 'Navrhované', - 'average_between' => 'Priemer medzi :start a :end', - 'transferred_in' => 'Prevedené (k nám)', - 'transferred_away' => 'Prevedené (preč)', - 'auto_budget_none' => 'Žiadny automatický rozpočet', - 'auto_budget_reset' => 'Nastaviť pevnú sumu pre každé obdobie', - 'auto_budget_rollover' => 'Pridať sumu každé obdobie', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Denne', - 'auto_budget_period_weekly' => 'Týždenne', - 'auto_budget_period_monthly' => 'Mesačne', - 'auto_budget_period_quarterly' => 'Štvrťročne', - 'auto_budget_period_half_year' => 'Polročne', - 'auto_budget_period_yearly' => 'Ročne', - 'auto_budget_help' => 'Viac o tejto funkcii sa dozviete v pomocníkovi. Kliknite na ikonu (?) vpravo hore.', - 'auto_budget_reset_icon' => 'Tento rozpočet bude stanovovaný pravidelne', - 'auto_budget_rollover_icon' => 'Táto suma rozpočtu sa bude pravidelne navyšovať', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Odstrániť rozpočtovú sumu v :currency', + 'daily_budgets' => 'Denné rozpočty', + 'weekly_budgets' => 'Týždenné rozpočty', + 'monthly_budgets' => 'Mesačné rozpočty', + 'quarterly_budgets' => 'Štvrťročné rozpočty', + 'half_year_budgets' => 'Polročné rozpočty', + 'yearly_budgets' => 'Ročné rozpočty', + 'other_budgets' => 'Špecifické časované rozpočty', + 'budget_limit_not_in_range' => 'Táto suma platí od :start do :end:', + 'total_available_budget' => 'Suma dostupného rozpočtu (medzi :start a :end)', + 'total_available_budget_in_currency' => 'Celkový rozpočet k dispozici v :currency', + 'see_below' => 'viď nižšie', + 'create_new_budget' => 'Vytvoriť nový rozpočet', + 'store_new_budget' => 'Uložiť nový rozpočet', + 'stored_new_budget' => 'Uložený nový rozpočet „:name“', + 'available_between' => 'Dostupné medzi :start a :end', + 'transactionsWithoutBudget' => 'Výdavky bez rozpočtu', + 'transactions_no_budget' => 'Výdavky bez rozpočtu medzi :start a :end', + 'spent_between' => 'Už utratené medzi :start a :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Nastaviť sumu k dispozícii', + 'update_available_amount' => 'Aktualizovať sumu k dispozícii', + 'ab_basic_modal_explain' => 'Pomocou tohto formulára zadajte, koľko očakávate, že budete môcť v uvedenom období zostaviť rozpočet (celkovo v :currency).', + 'createBudget' => 'Nový rozpočet', + 'invalid_currency' => 'Toto nie je platná mena', + 'invalid_amount' => 'Prosím, zadajte sumu', + 'set_ab' => 'Dostupná suma rozpočtu bola nastavená', + 'updated_ab' => 'Dostupná suma rozpočtu bola aktualizovaná', + 'deleted_ab' => 'Dostupná suma rozpočtu bola odstránená', + 'deleted_bl' => 'Rozpočtovaná suma bola odstránená', + 'alt_currency_ab_create' => 'Nastaviť dostupný rozpočet v inej mene', + 'bl_create_btn' => 'Nastaviť rozpočet v inej mene', + 'inactiveBudgets' => 'Neaktívne rozpočty', + 'without_budget_between' => 'Transakcia bez rozpočtu medzi :start a :end', + 'delete_budget' => 'Odstrániť rozpočet „:name“', + 'deleted_budget' => 'Rozpočet „:name“ bol odstránený', + 'edit_budget' => 'Upraviť rozpočet „:name“', + 'updated_budget' => 'Upravený rozpočet „:name“', + 'update_amount' => 'Upraviť sumu', + 'update_budget' => 'Upraviť rozpočet', + 'update_budget_amount_range' => 'Aktualizovať (očakávané) dostupné množstvo medzi :start a :end', + 'set_budget_limit_title' => 'Nastaviť rozpočtovanú sumu pre rozpočet :budget medzi :start a :end', + 'set_budget_limit' => 'Nastavte sumu rozpočtu', + 'budget_period_navigator' => 'Navigátor období', + 'info_on_available_amount' => 'Čo mám(e) k dispozícii?', + 'available_amount_indication' => 'Pomocou týchto súm získate informáciu o tom, aký môže byť váš celkový rozpočet.', + 'suggested' => 'Navrhované', + 'average_between' => 'Priemer medzi :start a :end', + 'transferred_in' => 'Prevedené (k nám)', + 'transferred_away' => 'Prevedené (preč)', + 'auto_budget_none' => 'Žiadny automatický rozpočet', + 'auto_budget_reset' => 'Nastaviť pevnú sumu pre každé obdobie', + 'auto_budget_rollover' => 'Pridať sumu každé obdobie', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Denne', + 'auto_budget_period_weekly' => 'Týždenne', + 'auto_budget_period_monthly' => 'Mesačne', + 'auto_budget_period_quarterly' => 'Štvrťročne', + 'auto_budget_period_half_year' => 'Polročne', + 'auto_budget_period_yearly' => 'Ročne', + 'auto_budget_help' => 'Viac o tejto funkcii sa dozviete v pomocníkovi. Kliknite na ikonu (?) vpravo hore.', + 'auto_budget_reset_icon' => 'Tento rozpočet bude stanovovaný pravidelne', + 'auto_budget_rollover_icon' => 'Táto suma rozpočtu sa bude pravidelne navyšovať', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Odstrániť rozpočtovú sumu v :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Neočakávané v tomto období', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => '(Ešte) nie', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Účtu zodpovedajú transakcie medzi :low a :high.', - 'running_again_loss' => 'Predchádzajúce spojené transakcie s týmto účtom môžu stratiť spojenie, ak sa (už) nezhodujú s pravidlami.', - 'bill_related_rules' => 'Pravidlá súvisiace s týmto účtom', - 'repeats' => 'Opakuje sa', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Prepojené transakcie', - 'auto_match_on' => 'Automaticky spárované Firefly III', - 'auto_match_off' => 'Firefly III nedokáže automaticky spárovať', - 'next_expected_match' => 'Ďalšia očakávaná zhoda', - 'delete_bill' => 'Odstrániť účet „:name“', - 'deleted_bill' => 'Ůčet „:name“ bol odstránený', - 'edit_bill' => 'Upraviť účet „:name“', - 'more' => 'Viac', - 'rescan_old' => 'Spustiť pravidlá znovu, na všetky transakcie', - 'update_bill' => 'Upraviť účet', - 'updated_bill' => 'Upraviť účet „:name“', - 'store_new_bill' => 'Uložiť nový účet', - 'stored_new_bill' => 'Nový účet „:name“ uložený', - 'cannot_scan_inactive_bill' => 'Neaktívne účty nie je možné skenovať.', - 'rescanned_bill' => 'Všetko bolo znova prehľadané a :count transakcia bola prepojená s účtom.|Všetko bolo znova prehľadané a :count transakcií bolo prepojených s účtom.', - 'average_bill_amount_year' => 'Priemerná ročná suma (:year)', - 'average_bill_amount_overall' => 'Priemerná ročná suma (celkom)', - 'bill_is_active' => 'Účet je aktívny', - 'bill_expected_between' => 'Očakávané medzi :start a :end', - 'bill_will_automatch' => 'Účet bude automaticky prepojený so zodpovedajúcimi transakciami', - 'skips_over' => 'preskočí cez', - 'bill_store_error' => 'Pri ukladaní nového účtu nastala chyba. Prosím, skontrolujte denník udalostí', - 'list_inactive_rule' => 'neaktívne pravidlo', - 'bill_edit_rules' => 'Firefly III sa pokúsi upraviť aj pravidlo týkajúce sa tohto účtu. Ak ste si však toto pravidlo upravili sami, Firefly III ho nebude meniť.|Firefly III sa pokúsi upraviť aj :count pravidiel súvisiacich s týmto účtom. Ak ste si však tieto pravidlá upravili sami, Firefly III ich nebude meniť.', - 'bill_expected_date' => 'Očakávané :date', - 'bill_expected_date_js' => 'Expected {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Uhradené {date}', - 'bill_repeats_weekly' => 'Repeats weekly', - 'bill_repeats_monthly' => 'Repeats monthly', - 'bill_repeats_quarterly' => 'Repeats quarterly', - 'bill_repeats_half-year' => 'Repeats every half year', - 'bill_repeats_yearly' => 'Repeats yearly', - 'bill_repeats_weekly_other' => 'Repeats every other week', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Repeats yearly', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Subscriptions', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Forever', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Neočakávané v tomto období', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => '(Ešte) nie', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Účtu zodpovedajú transakcie medzi :low a :high.', + 'running_again_loss' => 'Predchádzajúce spojené transakcie s týmto účtom môžu stratiť spojenie, ak sa (už) nezhodujú s pravidlami.', + 'bill_related_rules' => 'Pravidlá súvisiace s týmto účtom', + 'repeats' => 'Opakuje sa', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Prepojené transakcie', + 'auto_match_on' => 'Automaticky spárované Firefly III', + 'auto_match_off' => 'Firefly III nedokáže automaticky spárovať', + 'next_expected_match' => 'Ďalšia očakávaná zhoda', + 'delete_bill' => 'Odstrániť účet „:name“', + 'deleted_bill' => 'Ůčet „:name“ bol odstránený', + 'edit_bill' => 'Upraviť účet „:name“', + 'more' => 'Viac', + 'rescan_old' => 'Spustiť pravidlá znovu, na všetky transakcie', + 'update_bill' => 'Upraviť účet', + 'updated_bill' => 'Upraviť účet „:name“', + 'store_new_bill' => 'Uložiť nový účet', + 'stored_new_bill' => 'Nový účet „:name“ uložený', + 'cannot_scan_inactive_bill' => 'Neaktívne účty nie je možné skenovať.', + 'rescanned_bill' => 'Všetko bolo znova prehľadané a :count transakcia bola prepojená s účtom.|Všetko bolo znova prehľadané a :count transakcií bolo prepojených s účtom.', + 'average_bill_amount_year' => 'Priemerná ročná suma (:year)', + 'average_bill_amount_overall' => 'Priemerná ročná suma (celkom)', + 'bill_is_active' => 'Účet je aktívny', + 'bill_expected_between' => 'Očakávané medzi :start a :end', + 'bill_will_automatch' => 'Účet bude automaticky prepojený so zodpovedajúcimi transakciami', + 'skips_over' => 'preskočí cez', + 'bill_store_error' => 'Pri ukladaní nového účtu nastala chyba. Prosím, skontrolujte denník udalostí', + 'list_inactive_rule' => 'neaktívne pravidlo', + 'bill_edit_rules' => 'Firefly III sa pokúsi upraviť aj pravidlo týkajúce sa tohto účtu. Ak ste si však toto pravidlo upravili sami, Firefly III ho nebude meniť.|Firefly III sa pokúsi upraviť aj :count pravidiel súvisiacich s týmto účtom. Ak ste si však tieto pravidlá upravili sami, Firefly III ich nebude meniť.', + 'bill_expected_date' => 'Očakávané :date', + 'bill_expected_date_js' => 'Expected {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Uhradené {date}', + 'bill_repeats_weekly' => 'Repeats weekly', + 'bill_repeats_monthly' => 'Repeats monthly', + 'bill_repeats_quarterly' => 'Repeats quarterly', + 'bill_repeats_half-year' => 'Repeats every half year', + 'bill_repeats_yearly' => 'Repeats yearly', + 'bill_repeats_weekly_other' => 'Repeats every other week', + 'bill_repeats_monthly_other' => 'Repeats every other month', + 'bill_repeats_quarterly_other' => 'Repeats every other quarter', + 'bill_repeats_half-year_other' => 'Repeats yearly', + 'bill_repeats_yearly_other' => 'Repeats every other year', + 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', + 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', + 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', + 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', + 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', + 'subscriptions' => 'Subscriptions', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Forever', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'Máte :count neaktívny (archivovaný) bankový účet, ktorý môžete zobraziť na tejto samostatnej stránke.|Máte :count neaktívnych (archivovaných) bankových účtov, ktoré môžete zobraziť na tejto samostatnej stránke.', - 'all_accounts_inactive' => 'Toto sú vaše neaktívne bankové účty.', - 'active_account_link' => 'Tento prepojenie smeruje späť na vaše aktívne účty.', - 'account_missing_transaction' => 'Bankový účet #:id (":name") nie je možné zobraziť priamo, ale Firefly III chýbajú informácie o presmerovaní.', - 'cc_monthly_payment_date_help' => 'Vyberte akýkoľvek rok alebo mesiac, budú ignorované. Relevantný je len deň v mesiaci.', - 'details_for_asset' => 'Podrobnosti o účte aktív „:name“', - 'details_for_expense' => 'Podrobnosti o výdavkovom účte „:name“', - 'details_for_revenue' => 'Podrobnosti o výnosovom účte „:name“', - 'details_for_cash' => 'Podrobnosti o hotovostnom účte „:name“', - 'store_new_asset_account' => 'Uložiť nový účet aktív', - 'store_new_expense_account' => 'Uložiť nový výdavkový účet', - 'store_new_revenue_account' => 'Uložiť nový príjmový účet', - 'edit_asset_account' => 'Upraviť účet aktív „:name“', - 'edit_expense_account' => 'Upraviť výdavkový účet „:name“', - 'edit_revenue_account' => 'Upraviť výnosový účet „:name“', - 'delete_asset_account' => 'Odstrániť účet aktív „:name“', - 'delete_expense_account' => 'Odstrániť výdavkový účet ":name"', - 'delete_revenue_account' => 'Odstrániť výnosový účet ":name"', - 'delete_liabilities_account' => 'Odstrániť záväzok „:name“', - 'asset_deleted' => 'Majetkový účet ":name" bol odstránený', - 'account_deleted' => 'Účet ":name" bol odstránený', - 'expense_deleted' => 'Výdavkový účet ":name" bol odstránený', - 'revenue_deleted' => 'Výnosový účet ":name" bol odstránený', - 'update_asset_account' => 'Upraviť výdajový účet', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => 'Upraviť záväzok', - 'update_expense_account' => 'Upraviť výdavkový účet', - 'update_revenue_account' => 'Upraviť príjmový účet', - 'make_new_asset_account' => 'Vytvoriť nový účet aktív', - 'make_new_expense_account' => 'Vytvoriť výdavkový účet', - 'make_new_revenue_account' => 'Vytvoriť nový príjmový účet', - 'make_new_liabilities_account' => 'Vytvoriť nový záväzok', - 'asset_accounts' => 'Účty aktív', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Majetkový účet (neaktívny)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Výdavkové účty', - 'expense_accounts_inactive' => 'Výdajový účet (neaktívny)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Výnosové účty', - 'revenue_accounts_inactive' => 'Výnosové účty (neaktívne)', - 'cash_accounts' => 'Hotovostné účty', - 'Cash account' => 'Hotovostný účet', - 'liabilities_accounts' => 'Záväzky', - 'liabilities_accounts_inactive' => 'Záväzky (neaktívne)', - 'reconcile_account' => 'Vyúčtovať účet ":account"', - 'overview_of_reconcile_modal' => 'Prehľad zúčtovania', - 'delete_reconciliation' => 'Odstrániť zúčtovanie', - 'update_reconciliation' => 'Opraviť zúčtovanie', - 'amount_cannot_be_zero' => 'Suma nemôže byť nula', - 'end_of_reconcile_period' => 'Koniec zúčtovacieho obdobia: :period', - 'start_of_reconcile_period' => 'Začiatok zúčtovacieho obdobia: :period', - 'start_balance' => 'Počiatočný zostatok', - 'end_balance' => 'Konečný zostatok', - 'update_balance_dates_instruction' => 'Priraďte vyššie uvedené sumy a dátumy k svojmu bankovému výpisu a stlačte tlačidlo „Začať vyúčtovanie“', - 'select_transactions_instruction' => 'Vyberte transakcie, ktoré sa zobrazia na vašom bankovom výpise.', - 'select_range_and_balance' => 'Najskôr skontrolujte rozsah dátumov a zostatky. Potom stlačte tlačidlo „Spustiť vyúčtovanie“', - 'date_change_instruction' => 'Ak teraz zmeníte rozsah dátumov, akýkoľvek pokrok sa stratí.', - 'update_selection' => 'Upraviť výber', - 'store_reconcile' => 'Uložiť zúčtovanie', - 'reconciliation_transaction' => 'Zúčtovacia transakcia', - 'Reconciliation' => 'Zúčtovanie', - 'reconciliation' => 'Zúčtovanie', - 'reconcile_options' => 'Možnosti zúčtovania', - 'reconcile_range' => 'Rozsah zúčtovania', - 'start_reconcile' => 'Spustiť zúčtovanie', - 'cash_account_type' => 'Hotovosť', - 'cash' => 'hotovosť', - 'cant_find_redirect_account' => 'Firefly III sa vás pokúsil presmerovať, ale nepodarilo sa. Prepáčte. Späť na úvod.', - 'account_type' => 'Typ účtu', - 'save_transactions_by_moving' => 'Uložte túto transakciu presunutím do iného účtu:|Uložte tieto transakcie presunutím do iného účtu:', - 'save_transactions_by_moving_js' => 'Žiadne transakcie|Zachovať túto transakciu presunom pod iný účet.|Zachovať tieto transakcie presunom pod iný účet.', - 'stored_new_account' => 'Nový účet „:name“ bol uložený!', - 'stored_new_account_js' => 'Nový účet "{name}" vytvorený!', - 'updated_account' => 'Účet „:name“ upravený', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Možnosti kreditnej karty', - 'no_transactions_account' => 'Pre majetkový účet ":name" neexistujú (v tomto období) žiadne transakcie.', - 'no_transactions_period' => 'Neexistujú žiadne transakcie (v tomto období).', - 'no_data_for_chart' => 'Pre vytvorenie tohto grafu nie je (zatiaľ) dostatok informácií.', - 'select_at_least_one_account' => 'Vyberte aspoň jeden účet aktív', - 'select_at_least_one_category' => 'Vyberte aspoň jednu kategóriu', - 'select_at_least_one_budget' => 'Vyberte aspoň jeden rozpočet', - 'select_at_least_one_tag' => 'Vyberte aspoň jeden štítok', - 'select_at_least_one_expense' => 'Vyberte aspoň jednu kombináciu účtov výdavkov/výnosov. Ak žiadne nemáte (zoznam je prázdny), tento výkaz nie je k dispozícii.', - 'account_default_currency' => 'Toto bude predvolená mena previazaná s týmto bankovým účtom.', - 'reconcile_has_more' => 'Vaša účtovná kniha Firefly III obsahuje viac peňazí, než udáva vaša banka. Máte viac možností - vyberte, ako pokračovať. Potom kliknite na "Potvrdiť zúčtovanie".', - 'reconcile_has_less' => 'Vaša účtovná kniha Firefly III obsahuje menej peňazí, než udáva vaša banka. Máte viac možností - vyberte, ako pokračovať. Potom kliknite na "Potvrdiť zúčtovanie".', - 'reconcile_is_equal' => 'Vaša účtovná kniha Firefly III sa zhoduje s výpismi z vašej banky. Kliknite na "Potvrdiť zúčtovanie" pre potvrdenie.', - 'create_pos_reconcile_transaction' => 'Vymažte vybrané transakcie a vytvorte opravu pridania :amount k tomuto majetkovému účtu.', - 'create_neg_reconcile_transaction' => 'Vymažte vybrané transakcie a vytvorte opravu odstránenia :amount z tohto majetkového účtu.', - 'reconcile_do_nothing' => 'Vymažte vybraté transakcie, ale neopravujte ich.', - 'reconcile_go_back' => 'Opravu môžete kedykoľvek upraviť alebo odstrániť.', - 'must_be_asset_account' => 'Môžete zúčtovať len majetkové účty', - 'reconciliation_stored' => 'Zúčtovanie uložené', - 'reconciliation_error' => 'Transakcie boli označené ako zúčtované, ale kvôli nasledujúcej chybe neboli uložené: :error.', - 'reconciliation_transaction_title' => 'Zúčtovanie (:from pre :to)', - 'sum_of_reconciliation' => 'Sumár zúčtovania', - 'reconcile_this_account' => 'Vyúčtovat tento účet', - 'reconcile' => 'Vyúčtovať', - 'show' => 'Zobraziť', - 'confirm_reconciliation' => 'Potvrdiť zúčtovanie', - 'submitted_start_balance' => 'Vložený počiatočný zostatok', - 'selected_transactions' => 'Vybrané transakcie (:count)', - 'already_cleared_transactions' => 'Už zúčtované transakcie (:count)', - 'submitted_end_balance' => 'Vložený konečný zostatok', - 'initial_balance_description' => 'Počiatočný zostatok pre „:account“', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'neznáme', - 'interest_calc_daily' => 'Za deň', - 'interest_calc_monthly' => 'Za mesiac', - 'interest_calc_yearly' => 'Za rok', - 'interest_calc_weekly' => 'Za týždeň', - 'interest_calc_half-year' => 'Za polrok', - 'interest_calc_quarterly' => 'Za štvrťrok', - 'initial_balance_account' => 'Počiatočný zostatok pre :account', - 'list_options' => 'Možnosti zoznamu', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'Máte :count neaktívny (archivovaný) bankový účet, ktorý môžete zobraziť na tejto samostatnej stránke.|Máte :count neaktívnych (archivovaných) bankových účtov, ktoré môžete zobraziť na tejto samostatnej stránke.', + 'all_accounts_inactive' => 'Toto sú vaše neaktívne bankové účty.', + 'active_account_link' => 'Tento prepojenie smeruje späť na vaše aktívne účty.', + 'account_missing_transaction' => 'Bankový účet #:id (":name") nie je možné zobraziť priamo, ale Firefly III chýbajú informácie o presmerovaní.', + 'cc_monthly_payment_date_help' => 'Vyberte akýkoľvek rok alebo mesiac, budú ignorované. Relevantný je len deň v mesiaci.', + 'details_for_asset' => 'Podrobnosti o účte aktív „:name“', + 'details_for_expense' => 'Podrobnosti o výdavkovom účte „:name“', + 'details_for_revenue' => 'Podrobnosti o výnosovom účte „:name“', + 'details_for_cash' => 'Podrobnosti o hotovostnom účte „:name“', + 'store_new_asset_account' => 'Uložiť nový účet aktív', + 'store_new_expense_account' => 'Uložiť nový výdavkový účet', + 'store_new_revenue_account' => 'Uložiť nový príjmový účet', + 'edit_asset_account' => 'Upraviť účet aktív „:name“', + 'edit_expense_account' => 'Upraviť výdavkový účet „:name“', + 'edit_revenue_account' => 'Upraviť výnosový účet „:name“', + 'delete_asset_account' => 'Odstrániť účet aktív „:name“', + 'delete_expense_account' => 'Odstrániť výdavkový účet ":name"', + 'delete_revenue_account' => 'Odstrániť výnosový účet ":name"', + 'delete_liabilities_account' => 'Odstrániť záväzok „:name“', + 'asset_deleted' => 'Majetkový účet ":name" bol odstránený', + 'account_deleted' => 'Účet ":name" bol odstránený', + 'expense_deleted' => 'Výdavkový účet ":name" bol odstránený', + 'revenue_deleted' => 'Výnosový účet ":name" bol odstránený', + 'update_asset_account' => 'Upraviť výdajový účet', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => 'Upraviť záväzok', + 'update_expense_account' => 'Upraviť výdavkový účet', + 'update_revenue_account' => 'Upraviť príjmový účet', + 'make_new_asset_account' => 'Vytvoriť nový účet aktív', + 'make_new_expense_account' => 'Vytvoriť výdavkový účet', + 'make_new_revenue_account' => 'Vytvoriť nový príjmový účet', + 'make_new_liabilities_account' => 'Vytvoriť nový záväzok', + 'asset_accounts' => 'Účty aktív', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Majetkový účet (neaktívny)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Výdavkové účty', + 'expense_accounts_inactive' => 'Výdajový účet (neaktívny)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Výnosové účty', + 'revenue_accounts_inactive' => 'Výnosové účty (neaktívne)', + 'cash_accounts' => 'Hotovostné účty', + 'Cash account' => 'Hotovostný účet', + 'liabilities_accounts' => 'Záväzky', + 'liabilities_accounts_inactive' => 'Záväzky (neaktívne)', + 'reconcile_account' => 'Vyúčtovať účet ":account"', + 'overview_of_reconcile_modal' => 'Prehľad zúčtovania', + 'delete_reconciliation' => 'Odstrániť zúčtovanie', + 'update_reconciliation' => 'Opraviť zúčtovanie', + 'amount_cannot_be_zero' => 'Suma nemôže byť nula', + 'end_of_reconcile_period' => 'Koniec zúčtovacieho obdobia: :period', + 'start_of_reconcile_period' => 'Začiatok zúčtovacieho obdobia: :period', + 'start_balance' => 'Počiatočný zostatok', + 'end_balance' => 'Konečný zostatok', + 'update_balance_dates_instruction' => 'Priraďte vyššie uvedené sumy a dátumy k svojmu bankovému výpisu a stlačte tlačidlo „Začať vyúčtovanie“', + 'select_transactions_instruction' => 'Vyberte transakcie, ktoré sa zobrazia na vašom bankovom výpise.', + 'select_range_and_balance' => 'Najskôr skontrolujte rozsah dátumov a zostatky. Potom stlačte tlačidlo „Spustiť vyúčtovanie“', + 'date_change_instruction' => 'Ak teraz zmeníte rozsah dátumov, akýkoľvek pokrok sa stratí.', + 'update_selection' => 'Upraviť výber', + 'store_reconcile' => 'Uložiť zúčtovanie', + 'reconciliation_transaction' => 'Zúčtovacia transakcia', + 'Reconciliation' => 'Zúčtovanie', + 'reconciliation' => 'Zúčtovanie', + 'reconcile_options' => 'Možnosti zúčtovania', + 'reconcile_range' => 'Rozsah zúčtovania', + 'start_reconcile' => 'Spustiť zúčtovanie', + 'cash_account_type' => 'Hotovosť', + 'cash' => 'hotovosť', + 'cant_find_redirect_account' => 'Firefly III sa vás pokúsil presmerovať, ale nepodarilo sa. Prepáčte. Späť na úvod.', + 'account_type' => 'Typ účtu', + 'save_transactions_by_moving' => 'Uložte túto transakciu presunutím do iného účtu:|Uložte tieto transakcie presunutím do iného účtu:', + 'save_transactions_by_moving_js' => 'Žiadne transakcie|Zachovať túto transakciu presunom pod iný účet.|Zachovať tieto transakcie presunom pod iný účet.', + 'stored_new_account' => 'Nový účet „:name“ bol uložený!', + 'stored_new_account_js' => 'Nový účet "{name}" vytvorený!', + 'updated_account' => 'Účet „:name“ upravený', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Možnosti kreditnej karty', + 'no_transactions_account' => 'Pre majetkový účet ":name" neexistujú (v tomto období) žiadne transakcie.', + 'no_transactions_period' => 'Neexistujú žiadne transakcie (v tomto období).', + 'no_data_for_chart' => 'Pre vytvorenie tohto grafu nie je (zatiaľ) dostatok informácií.', + 'select_at_least_one_account' => 'Vyberte aspoň jeden účet aktív', + 'select_at_least_one_category' => 'Vyberte aspoň jednu kategóriu', + 'select_at_least_one_budget' => 'Vyberte aspoň jeden rozpočet', + 'select_at_least_one_tag' => 'Vyberte aspoň jeden štítok', + 'select_at_least_one_expense' => 'Vyberte aspoň jednu kombináciu účtov výdavkov/výnosov. Ak žiadne nemáte (zoznam je prázdny), tento výkaz nie je k dispozícii.', + 'account_default_currency' => 'Toto bude predvolená mena previazaná s týmto bankovým účtom.', + 'reconcile_has_more' => 'Vaša účtovná kniha Firefly III obsahuje viac peňazí, než udáva vaša banka. Máte viac možností - vyberte, ako pokračovať. Potom kliknite na "Potvrdiť zúčtovanie".', + 'reconcile_has_less' => 'Vaša účtovná kniha Firefly III obsahuje menej peňazí, než udáva vaša banka. Máte viac možností - vyberte, ako pokračovať. Potom kliknite na "Potvrdiť zúčtovanie".', + 'reconcile_is_equal' => 'Vaša účtovná kniha Firefly III sa zhoduje s výpismi z vašej banky. Kliknite na "Potvrdiť zúčtovanie" pre potvrdenie.', + 'create_pos_reconcile_transaction' => 'Vymažte vybrané transakcie a vytvorte opravu pridania :amount k tomuto majetkovému účtu.', + 'create_neg_reconcile_transaction' => 'Vymažte vybrané transakcie a vytvorte opravu odstránenia :amount z tohto majetkového účtu.', + 'reconcile_do_nothing' => 'Vymažte vybraté transakcie, ale neopravujte ich.', + 'reconcile_go_back' => 'Opravu môžete kedykoľvek upraviť alebo odstrániť.', + 'must_be_asset_account' => 'Môžete zúčtovať len majetkové účty', + 'reconciliation_stored' => 'Zúčtovanie uložené', + 'reconciliation_error' => 'Transakcie boli označené ako zúčtované, ale kvôli nasledujúcej chybe neboli uložené: :error.', + 'reconciliation_transaction_title' => 'Zúčtovanie (:from pre :to)', + 'sum_of_reconciliation' => 'Sumár zúčtovania', + 'reconcile_this_account' => 'Vyúčtovat tento účet', + 'reconcile' => 'Vyúčtovať', + 'show' => 'Zobraziť', + 'confirm_reconciliation' => 'Potvrdiť zúčtovanie', + 'submitted_start_balance' => 'Vložený počiatočný zostatok', + 'selected_transactions' => 'Vybrané transakcie (:count)', + 'already_cleared_transactions' => 'Už zúčtované transakcie (:count)', + 'submitted_end_balance' => 'Vložený konečný zostatok', + 'initial_balance_description' => 'Počiatočný zostatok pre „:account“', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'neznáme', + 'interest_calc_daily' => 'Za deň', + 'interest_calc_monthly' => 'Za mesiac', + 'interest_calc_yearly' => 'Za rok', + 'interest_calc_weekly' => 'Za týždeň', + 'interest_calc_half-year' => 'Za polrok', + 'interest_calc_quarterly' => 'Za štvrťrok', + 'initial_balance_account' => 'Počiatočný zostatok pre :account', + 'list_options' => 'Možnosti zoznamu', // categories: - 'new_category' => 'Nová kategória', - 'create_new_category' => 'Vytvoriť novú kategóriu', - 'without_category' => 'Bez kategórie', - 'update_category' => 'Aktualizovať kategóriu', - 'updated_category' => 'Kategória „:name“ upravená', - 'categories' => 'Kategórie', - 'edit_category' => 'Upraviť kategóriu „:name“', - 'no_category' => '(žiadna kategória)', - 'unknown_category_plain' => 'No category', - 'category' => 'Kategória', - 'delete_category' => 'Odstrániť kategóriu „:name“', - 'deleted_category' => 'Kategorie „:name“ smazána', - 'store_category' => 'Uložiť novú kategóriu', - 'stored_category' => 'Nová kategória „:name“ bola uložená', - 'without_category_between' => 'Bez kategórie medzi :start a :end', + 'new_category' => 'Nová kategória', + 'create_new_category' => 'Vytvoriť novú kategóriu', + 'without_category' => 'Bez kategórie', + 'update_category' => 'Aktualizovať kategóriu', + 'updated_category' => 'Kategória „:name“ upravená', + 'categories' => 'Kategórie', + 'edit_category' => 'Upraviť kategóriu „:name“', + 'no_category' => '(žiadna kategória)', + 'unknown_category_plain' => 'No category', + 'category' => 'Kategória', + 'delete_category' => 'Odstrániť kategóriu „:name“', + 'deleted_category' => 'Kategorie „:name“ smazána', + 'store_category' => 'Uložiť novú kategóriu', + 'stored_category' => 'Nová kategória „:name“ bola uložená', + 'without_category_between' => 'Bez kategórie medzi :start a :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Upraviť výber', - 'update_deposit' => 'Upraviť vklad', - 'update_transaction' => 'Upraviť transakciu', - 'update_transfer' => 'Upraviť prevod', - 'updated_withdrawal' => 'Výber „:description“ bol upravený', - 'updated_deposit' => 'Vklad „:description“ bol upravený', - 'updated_transfer' => 'Prevod „:description“ bol upravený', - 'no_changes_withdrawal' => 'Výber ":description" nebol pozmenený.', - 'no_changes_deposit' => 'Vklad ":description" nebol pozmenený.', - 'no_changes_transfer' => 'Prevod ":description" nebol pozmenený.', - 'delete_withdrawal' => 'Výber bol „:description“ upravený', - 'delete_deposit' => 'Odstrániť vklad „:description“', - 'delete_transfer' => 'Odstrániť prevod „:description“', - 'deleted_withdrawal' => 'Výber „:description“ bol odstránený', - 'deleted_deposit' => 'Vklad „:description“ bol odstránený', - 'deleted_transfer' => 'Prevod „:description“ bol odstránený', - 'deleted_reconciliation' => 'Zúčtovacia transakcia ":description" bola odstránená', - 'stored_journal' => 'Nová transakcia „:description“ bola vytvorená', - 'stored_journal_no_descr' => 'Vaša nová transakcia bola vytvorená', - 'updated_journal_no_descr' => 'Vaša transakcia bola upravená', - 'select_transactions' => 'Vybrať transakcie', - 'rule_group_select_transactions' => 'Použiť ":title" na transakcie', - 'rule_select_transactions' => 'Použiť ":title" na transakcie', - 'stop_selection' => 'Ukončiť označovanie transakcií', - 'reconcile_selected' => 'Zúčtovať', - 'mass_delete_journals' => 'Odstrániť transakcie', - 'mass_edit_journals' => 'Upraviť transakcie', - 'mass_bulk_journals' => 'Hromadná úprava transakcií', - 'mass_bulk_journals_explain' => 'Tento formulár umožňuje meniť vlastnosti transakcií uvedených nižšie v jednej rozsiahlej aktualizácii. Všetky transakcie v tabuľke sa aktualizujú, keď zmeníte parametre, ktoré tu vidíte.', - 'part_of_split' => 'Táto transakcia je súčasťou rozúčtovanej transakcie. Ak ste nevybrali všetky rozúčtovania, môžete skončiť iba polovičnou zmenou transakcie.', - 'bulk_set_new_values' => 'Nové hodnoty nastavíte pomocí vstupních kolonek níže. Pokud je nevyplníte, budou u všeho vyprázdněny. Také si všimněte, že pouze výběry dostanou rozpočet.', - 'no_bulk_category' => 'Neupraviť kategóriu', - 'no_bulk_budget' => 'Neupraviť rozpočet', - 'no_bulk_tags' => 'Neupraviť štítky', - 'replace_with_these_tags' => 'Prepísať týmito štítkami', - 'append_these_tags' => 'Pridať tieto štítky', - 'mass_edit' => 'Upraviť označené individuálne', - 'bulk_edit' => 'Hromadná úprava označeného', - 'mass_delete' => 'Odstrániť označené', - 'cannot_edit_other_fields' => 'Nemôžete hromadne upravovať iné polia ako tie, ktoré sú tu, pretože nie je priestor na ich zobrazenie. Ak potrebujete upraviť tieto polia, kliknite na odkaz a upravte ich jednotlivo.', - 'cannot_change_amount_reconciled' => 'Nemôžete meniť sumu zúčtovaných transakcií.', - 'no_budget' => '(žiadny rozpočet)', - 'no_bill' => '(žiadny účet)', - 'account_per_budget' => 'Účty pre jednotlivé rozpočty', - 'account_per_category' => 'Účty pre jednotlivé kategórie', - 'create_new_object' => 'Vytvoriť', - 'empty' => '(prázdne)', - 'all_other_budgets' => '(všetky ostatné rozpočty)', - 'all_other_accounts' => '(všetky ostatné účty)', - 'expense_per_source_account' => 'Výdavky podľa zdrojového účtu', - 'expense_per_destination_account' => 'Výdavky podľa cieľového účtu', - 'income_per_destination_account' => 'Príjmy podľa cieľového účtu', - 'spent_in_specific_category' => 'Utratené v kategórii „:category“', - 'earned_in_specific_category' => 'Získané v kategórii „:category“', - 'spent_in_specific_tag' => 'Utratené pod štítkom „:tag“', - 'earned_in_specific_tag' => 'Získané pod štítkom „:tag“', - 'income_per_source_account' => 'Príjem podľa zdrojového účtu', - 'average_spending_per_destination' => 'Priemerný výdavok podľa cieľového účtu', - 'average_spending_per_source' => 'Priemerný výdavok podľa zdrojového účtu', - 'average_earning_per_source' => 'Priemerný príjem v jednotlivých zdrojových účtoch', - 'average_earning_per_destination' => 'Priemerný príjem v jednotlivých cieľových účtoch', - 'account_per_tag' => 'Účty pod jednotlivými štítkami', - 'tag_report_expenses_listed_once' => 'Výdavky a príjmy nikdy nie sú vypísané dvakrát. Ak má transakcia viacero štítkov, zobrazí se len pod jedným z nich. Môže se zdať, že na zozname chýbajú údaje, ale sumy budú správne.', - 'double_report_expenses_charted_once' => 'Výdavky a príjmy nikdy nie sú zobrazené dvakrát. Ak má transakcia viacero štítkov, zobrazí sa len pod jedným z nich. Môže sa zdať, že v tomto grafe niektoré údaje chýbajú, ale čiastky budú správne.', - 'tag_report_chart_single_tag' => 'Tento graf sa vzťahuje na jeden štítok. Ak má transakcia viac štítkov, to, čo tu vidíte, sa môže prejaviť aj v grafoch iných štítkov.', - 'tag' => 'Štítok', - 'no_budget_squared' => '(žiadny rozpočet)', - 'perm-delete-many' => 'Odstránenie viacerých položiek naraz môže byť veľmi rušivé. Buďte opatrní. Z tejto stránky môžete odstrániť časť rozdelenej transakcie, buďte preto opatrní.', - 'mass_deleted_transactions_success' => ':count transakcia bola odstránená.|:count transakcií bolo odstránených.', - 'mass_edited_transactions_success' => 'Upravila sa :count transakcia.|Upravilo sa :count transakcií.', - 'opt_group_' => '(žiadny typ účtu)', - 'opt_group_no_account_type' => '(žiadny typ účtu)', - 'opt_group_defaultAsset' => 'Predvolený majetkový účet', - 'opt_group_savingAsset' => 'Sporiace účty', - 'opt_group_sharedAsset' => 'Zdieľané účty aktív', - 'opt_group_ccAsset' => 'Kreditné karty', - 'opt_group_cashWalletAsset' => 'Peňaženky', - 'opt_group_expense_account' => 'Výdavkové účty', - 'opt_group_revenue_account' => 'Účty pre príjmy', - 'opt_group_l_Loan' => 'Záväzok: Pôžička', - 'opt_group_cash_account' => 'Hotovostný účet', - 'opt_group_l_Debt' => 'Záväzok: Dlh', - 'opt_group_l_Mortgage' => 'Záväzok: hypotéka', - 'opt_group_l_Credit card' => 'Záväzok: kreditná karta', - 'notes' => 'Poznámky', - 'unknown_journal_error' => 'Transakciu sa nepodarilo uložiť. Pozrite sa do záznamov denníka udalostí.', - 'attachment_not_found' => 'Nepodarilo sa nájsť prílohu.', - 'journal_link_bill' => 'Táto transakcia je prepojená s účtom :name. Ak chcete odstrániť prepojenie, odznačte ho. Pre prepojenie s iným účtom použite pravidlá.', - 'transaction_stored_link' => 'Transakcia #{ID} ("{title}") bola uložená.', - 'transaction_new_stored_link' => 'Transakcia #{ID} bola uložená.', - 'transaction_updated_link' => 'Transakcia #{ID} ("{title}") bola upravená.', - 'transaction_updated_no_changes' => 'Transakcia #{ID} ("{title}") sa nezmenila.', - 'first_split_decides' => 'Hodnotu tohto atribútu určuje prvé rozdelenie', - 'first_split_overrules_source' => 'Prvé rozdelenie môže pozmeniť zdrojový účet', - 'first_split_overrules_destination' => 'Prvé rozdelenie môže pozmeniť cieľový účet', - 'spent_x_of_y' => 'Utratené {amount} z {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Upraviť výber', + 'update_deposit' => 'Upraviť vklad', + 'update_transaction' => 'Upraviť transakciu', + 'update_transfer' => 'Upraviť prevod', + 'updated_withdrawal' => 'Výber „:description“ bol upravený', + 'updated_deposit' => 'Vklad „:description“ bol upravený', + 'updated_transfer' => 'Prevod „:description“ bol upravený', + 'no_changes_withdrawal' => 'Výber ":description" nebol pozmenený.', + 'no_changes_deposit' => 'Vklad ":description" nebol pozmenený.', + 'no_changes_transfer' => 'Prevod ":description" nebol pozmenený.', + 'delete_withdrawal' => 'Výber bol „:description“ upravený', + 'delete_deposit' => 'Odstrániť vklad „:description“', + 'delete_transfer' => 'Odstrániť prevod „:description“', + 'deleted_withdrawal' => 'Výber „:description“ bol odstránený', + 'deleted_deposit' => 'Vklad „:description“ bol odstránený', + 'deleted_transfer' => 'Prevod „:description“ bol odstránený', + 'deleted_reconciliation' => 'Zúčtovacia transakcia ":description" bola odstránená', + 'stored_journal' => 'Nová transakcia „:description“ bola vytvorená', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Vaša nová transakcia bola vytvorená', + 'updated_journal_no_descr' => 'Vaša transakcia bola upravená', + 'select_transactions' => 'Vybrať transakcie', + 'rule_group_select_transactions' => 'Použiť ":title" na transakcie', + 'rule_select_transactions' => 'Použiť ":title" na transakcie', + 'stop_selection' => 'Ukončiť označovanie transakcií', + 'reconcile_selected' => 'Zúčtovať', + 'mass_delete_journals' => 'Odstrániť transakcie', + 'mass_edit_journals' => 'Upraviť transakcie', + 'mass_bulk_journals' => 'Hromadná úprava transakcií', + 'mass_bulk_journals_explain' => 'Tento formulár umožňuje meniť vlastnosti transakcií uvedených nižšie v jednej rozsiahlej aktualizácii. Všetky transakcie v tabuľke sa aktualizujú, keď zmeníte parametre, ktoré tu vidíte.', + 'part_of_split' => 'Táto transakcia je súčasťou rozúčtovanej transakcie. Ak ste nevybrali všetky rozúčtovania, môžete skončiť iba polovičnou zmenou transakcie.', + 'bulk_set_new_values' => 'Nové hodnoty nastavíte pomocí vstupních kolonek níže. Pokud je nevyplníte, budou u všeho vyprázdněny. Také si všimněte, že pouze výběry dostanou rozpočet.', + 'no_bulk_category' => 'Neupraviť kategóriu', + 'no_bulk_budget' => 'Neupraviť rozpočet', + 'no_bulk_tags' => 'Neupraviť štítky', + 'replace_with_these_tags' => 'Prepísať týmito štítkami', + 'append_these_tags' => 'Pridať tieto štítky', + 'mass_edit' => 'Upraviť označené individuálne', + 'bulk_edit' => 'Hromadná úprava označeného', + 'mass_delete' => 'Odstrániť označené', + 'cannot_edit_other_fields' => 'Nemôžete hromadne upravovať iné polia ako tie, ktoré sú tu, pretože nie je priestor na ich zobrazenie. Ak potrebujete upraviť tieto polia, kliknite na odkaz a upravte ich jednotlivo.', + 'cannot_change_amount_reconciled' => 'Nemôžete meniť sumu zúčtovaných transakcií.', + 'no_budget' => '(žiadny rozpočet)', + 'no_bill' => '(žiadny účet)', + 'account_per_budget' => 'Účty pre jednotlivé rozpočty', + 'account_per_category' => 'Účty pre jednotlivé kategórie', + 'create_new_object' => 'Vytvoriť', + 'empty' => '(prázdne)', + 'all_other_budgets' => '(všetky ostatné rozpočty)', + 'all_other_accounts' => '(všetky ostatné účty)', + 'expense_per_source_account' => 'Výdavky podľa zdrojového účtu', + 'expense_per_destination_account' => 'Výdavky podľa cieľového účtu', + 'income_per_destination_account' => 'Príjmy podľa cieľového účtu', + 'spent_in_specific_category' => 'Utratené v kategórii „:category“', + 'earned_in_specific_category' => 'Získané v kategórii „:category“', + 'spent_in_specific_tag' => 'Utratené pod štítkom „:tag“', + 'earned_in_specific_tag' => 'Získané pod štítkom „:tag“', + 'income_per_source_account' => 'Príjem podľa zdrojového účtu', + 'average_spending_per_destination' => 'Priemerný výdavok podľa cieľového účtu', + 'average_spending_per_source' => 'Priemerný výdavok podľa zdrojového účtu', + 'average_earning_per_source' => 'Priemerný príjem v jednotlivých zdrojových účtoch', + 'average_earning_per_destination' => 'Priemerný príjem v jednotlivých cieľových účtoch', + 'account_per_tag' => 'Účty pod jednotlivými štítkami', + 'tag_report_expenses_listed_once' => 'Výdavky a príjmy nikdy nie sú vypísané dvakrát. Ak má transakcia viacero štítkov, zobrazí se len pod jedným z nich. Môže se zdať, že na zozname chýbajú údaje, ale sumy budú správne.', + 'double_report_expenses_charted_once' => 'Výdavky a príjmy nikdy nie sú zobrazené dvakrát. Ak má transakcia viacero štítkov, zobrazí sa len pod jedným z nich. Môže sa zdať, že v tomto grafe niektoré údaje chýbajú, ale čiastky budú správne.', + 'tag_report_chart_single_tag' => 'Tento graf sa vzťahuje na jeden štítok. Ak má transakcia viac štítkov, to, čo tu vidíte, sa môže prejaviť aj v grafoch iných štítkov.', + 'tag' => 'Štítok', + 'no_budget_squared' => '(žiadny rozpočet)', + 'perm-delete-many' => 'Odstránenie viacerých položiek naraz môže byť veľmi rušivé. Buďte opatrní. Z tejto stránky môžete odstrániť časť rozdelenej transakcie, buďte preto opatrní.', + 'mass_deleted_transactions_success' => ':count transakcia bola odstránená.|:count transakcií bolo odstránených.', + 'mass_edited_transactions_success' => 'Upravila sa :count transakcia.|Upravilo sa :count transakcií.', + 'opt_group_' => '(žiadny typ účtu)', + 'opt_group_no_account_type' => '(žiadny typ účtu)', + 'opt_group_defaultAsset' => 'Predvolený majetkový účet', + 'opt_group_savingAsset' => 'Sporiace účty', + 'opt_group_sharedAsset' => 'Zdieľané účty aktív', + 'opt_group_ccAsset' => 'Kreditné karty', + 'opt_group_cashWalletAsset' => 'Peňaženky', + 'opt_group_expense_account' => 'Výdavkové účty', + 'opt_group_revenue_account' => 'Účty pre príjmy', + 'opt_group_l_Loan' => 'Záväzok: Pôžička', + 'opt_group_cash_account' => 'Hotovostný účet', + 'opt_group_l_Debt' => 'Záväzok: Dlh', + 'opt_group_l_Mortgage' => 'Záväzok: hypotéka', + 'opt_group_l_Credit card' => 'Záväzok: kreditná karta', + 'notes' => 'Poznámky', + 'unknown_journal_error' => 'Transakciu sa nepodarilo uložiť. Pozrite sa do záznamov denníka udalostí.', + 'attachment_not_found' => 'Nepodarilo sa nájsť prílohu.', + 'journal_link_bill' => 'Táto transakcia je prepojená s účtom :name. Ak chcete odstrániť prepojenie, odznačte ho. Pre prepojenie s iným účtom použite pravidlá.', + 'transaction_stored_link' => 'Transakcia #{ID} ("{title}") bola uložená.', + 'transaction_new_stored_link' => 'Transakcia #{ID} bola uložená.', + 'transaction_updated_link' => 'Transakcia #{ID} ("{title}") bola upravená.', + 'transaction_updated_no_changes' => 'Transakcia #{ID} ("{title}") sa nezmenila.', + 'first_split_decides' => 'Hodnotu tohto atribútu určuje prvé rozdelenie', + 'first_split_overrules_source' => 'Prvé rozdelenie môže pozmeniť zdrojový účet', + 'first_split_overrules_destination' => 'Prvé rozdelenie môže pozmeniť cieľový účet', + 'spent_x_of_y' => 'Utratené {amount} z {total}', // new user: - 'welcome' => 'Vitajte ve Firefly III!', - 'submit' => 'Odoslať', - 'submission' => 'Odoslanie', - 'submit_yes_really' => 'Odoslať (viem, čo robím)', - 'getting_started' => 'Začíname', - 'to_get_started' => 'Je dobré vidieť, že ste Firefly III úspešne nainštalovali. Ak chcete začať používať tento nástroj, zadajte názov svojej banky a zostatok na vašom hlavnom bežnom účte. Ak máte viac účtov, zatiaľ si nerobte starosti. Môžete ich pridať neskôr. Firefly III jednoducho potrebuje aspoň niečo, s čím môže začať pracovať.', - 'savings_balance_text' => 'Firefly III vám automaticky vytvorí sporiaci účet. V predvolenom nastavení nebudú na vašom sporiacom účte žiadne peniaze, ale ak to vo Firefly III určíte, zostatok sa uloží ako taký.', - 'finish_up_new_user' => 'To je všetko! Môžete pokračovať stlačením Odoslať. Budete presmerovaní na úvodnú stránku Firefly III.', - 'stored_new_accounts_new_user' => 'Jupí! Vaše nové bankové účty boli uložené.', - 'set_preferred_language' => 'Ak chcete radšej používať Firefly III v inom jazyku, uveďte to tu.', - 'language' => 'Jazyk', - 'new_savings_account' => ':bank_name šetriaci účet', - 'cash_wallet' => 'Peňaženka', - 'currency_not_present' => 'Ak mena, ktorú bežne používate, nie je uvedená, nič sa nedeje. Svoje vlastné meny môžete vytvoriť v časti Možnosti > Meny.', + 'welcome' => 'Vitajte ve Firefly III!', + 'submit' => 'Odoslať', + 'submission' => 'Odoslanie', + 'submit_yes_really' => 'Odoslať (viem, čo robím)', + 'getting_started' => 'Začíname', + 'to_get_started' => 'Je dobré vidieť, že ste Firefly III úspešne nainštalovali. Ak chcete začať používať tento nástroj, zadajte názov svojej banky a zostatok na vašom hlavnom bežnom účte. Ak máte viac účtov, zatiaľ si nerobte starosti. Môžete ich pridať neskôr. Firefly III jednoducho potrebuje aspoň niečo, s čím môže začať pracovať.', + 'savings_balance_text' => 'Firefly III vám automaticky vytvorí sporiaci účet. V predvolenom nastavení nebudú na vašom sporiacom účte žiadne peniaze, ale ak to vo Firefly III určíte, zostatok sa uloží ako taký.', + 'finish_up_new_user' => 'To je všetko! Môžete pokračovať stlačením Odoslať. Budete presmerovaní na úvodnú stránku Firefly III.', + 'stored_new_accounts_new_user' => 'Jupí! Vaše nové bankové účty boli uložené.', + 'set_preferred_language' => 'Ak chcete radšej používať Firefly III v inom jazyku, uveďte to tu.', + 'language' => 'Jazyk', + 'new_savings_account' => ':bank_name šetriaci účet', + 'cash_wallet' => 'Peňaženka', + 'currency_not_present' => 'Ak mena, ktorú bežne používate, nie je uvedená, nič sa nedeje. Svoje vlastné meny môžete vytvoriť v časti Možnosti > Meny.', // home page: - 'transaction_table_description' => 'Tabuľka obsahujúca vaše transakcie', - 'opposing_account' => 'Cieľový účet', - 'yourAccounts' => 'Vaše účty', - 'your_accounts' => 'Prehľad vášho účtu', - 'category_overview' => 'Prehľad kategórie', - 'expense_overview' => 'Prehľad výdavkových účtov', - 'revenue_overview' => 'Prehľad príjmových účtov', - 'budgetsAndSpending' => 'Rozpočty a útraty', - 'budgets_and_spending' => 'Rozpočty a útraty', - 'go_to_budget' => 'Zobraziť rozpočet „{budget}“', - 'go_to_deposits' => 'Zobraziť vklady', - 'go_to_expenses' => 'Zobraziť výdavky', - 'savings' => 'Úspory', - 'newWithdrawal' => 'Nový výdavok', - 'newDeposit' => 'Nový vklad', - 'newTransfer' => 'Nový převod', - 'bills_to_pay' => 'Účty na úhradu', - 'per_day' => 'Za deň', - 'left_to_spend_per_day' => 'Zostáva na denné útraty', - 'bills_paid' => 'Zaplatené účty', - 'custom_period' => 'Vlastné obdobie', - 'reset_to_current' => 'Obnoviť na aktuálne obdobie', - 'select_period' => 'Vyberte obdobie', + 'transaction_table_description' => 'Tabuľka obsahujúca vaše transakcie', + 'opposing_account' => 'Cieľový účet', + 'yourAccounts' => 'Vaše účty', + 'your_accounts' => 'Prehľad vášho účtu', + 'category_overview' => 'Prehľad kategórie', + 'expense_overview' => 'Prehľad výdavkových účtov', + 'revenue_overview' => 'Prehľad príjmových účtov', + 'budgetsAndSpending' => 'Rozpočty a útraty', + 'budgets_and_spending' => 'Rozpočty a útraty', + 'go_to_budget' => 'Zobraziť rozpočet „{budget}“', + 'go_to_deposits' => 'Zobraziť vklady', + 'go_to_expenses' => 'Zobraziť výdavky', + 'savings' => 'Úspory', + 'newWithdrawal' => 'Nový výdavok', + 'newDeposit' => 'Nový vklad', + 'newTransfer' => 'Nový převod', + 'bills_to_pay' => 'Účty na úhradu', + 'per_day' => 'Za deň', + 'left_to_spend_per_day' => 'Zostáva na denné útraty', + 'bills_paid' => 'Zaplatené účty', + 'custom_period' => 'Vlastné obdobie', + 'reset_to_current' => 'Obnoviť na aktuálne obdobie', + 'select_period' => 'Vyberte obdobie', // menu and titles, should be recycled as often as possible: - 'currency' => 'Mena', - 'preferences' => 'Možnosti', - 'logout' => 'Odhlásiť sa', - 'logout_other_sessions' => 'Odhlásiť všetky ostatné sedenia', - 'toggleNavigation' => 'Vyp/zap. navigáciu', - 'searchPlaceholder' => 'Vyhľadať...', - 'version' => 'Verzia', - 'dashboard' => 'Prehľad', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Rozpočet k dispozícii ({currency})', - 'currencies' => 'Meny', - 'activity' => 'Aktivita', - 'usage' => 'Použitie', - 'accounts' => 'Účty', - 'Asset account' => 'Účet aktiv', - 'Default account' => 'Účet aktiv', - 'Expense account' => 'Výdavkový účet', - 'Revenue account' => 'Príjmový účet', - 'Initial balance account' => 'Účet počiatočného zostatku', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Dlh', - 'account_type_Loan' => 'Pôžička', - 'account_type_Mortgage' => 'Hypotéka', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Kreditná karta', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'Túto sumu mi dlžia', - 'liability_direction_debit' => 'Tento dlh mám voči niekomu inému', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Rozpočty', - 'tags' => 'Štítky', - 'reports' => 'Výkazy', - 'transactions' => 'Transakcie', - 'expenses' => 'Výdavky', - 'income' => 'Zisky / príjmy', - 'transfers' => 'Prevody', - 'moneyManagement' => 'Správa peňazí', - 'money_management' => 'Správa peňazí', - 'tools' => 'Nástroje', - 'piggyBanks' => 'Pokladničky', - 'piggy_banks' => 'Pokladničky', - 'amount_x_of_y' => '{current} z {total}', - 'bills' => 'Účty', - 'withdrawal' => 'Výber', - 'opening_balance' => 'Počiatočný zostatok', - 'deposit' => 'Vklad', - 'account' => 'Účet', - 'transfer' => 'Prevod', - 'Withdrawal' => 'Výber', - 'Deposit' => 'Vklad', - 'Transfer' => 'Prevod', - 'bill' => 'Účet', - 'yes' => 'Áno', - 'no' => 'Ne', - 'amount' => 'Suma', - 'overview' => 'Prehľad', - 'saveOnAccount' => 'Uložiť na účet', - 'unknown' => 'Neznáme', - 'monthly' => 'Mesačne', - 'profile' => 'Profil', - 'errors' => 'Chyby', - 'debt_start_date' => 'Dátum začiatku dlhu', - 'debt_start_amount' => 'Počiatočná výška dlhu', - 'debt_start_amount_help' => 'Najlepšie je vždy túto hodnotu nastaviť na zápornú hodnotu. Ďalšie informácie nájdete na stránkach pomocníka (ikona (?) vpravo hore).', - 'interest_period_help' => 'Toto pole je čisto kozmetické a nebude sa pre vás počítať. Ako sa ukázalo, banky sú veľmi záludné, takže Firefly III to nikdy neurobí správne.', - 'store_new_liabilities_account' => 'Uložiť nový záväzok', - 'edit_liabilities_account' => 'Upraviť záväzok „:name“', - 'financial_control' => 'Finančná kontrola', - 'accounting' => 'Bankové účty', - 'automation' => 'Automatizácia', - 'others' => 'Iné', - 'classification' => 'Klasifikácia', - 'store_transaction' => 'Uložiť transakciu', + 'currency' => 'Mena', + 'preferences' => 'Možnosti', + 'logout' => 'Odhlásiť sa', + 'logout_other_sessions' => 'Odhlásiť všetky ostatné sedenia', + 'toggleNavigation' => 'Vyp/zap. navigáciu', + 'searchPlaceholder' => 'Vyhľadať...', + 'version' => 'Verzia', + 'dashboard' => 'Prehľad', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Rozpočet k dispozícii ({currency})', + 'currencies' => 'Meny', + 'activity' => 'Aktivita', + 'usage' => 'Použitie', + 'accounts' => 'Účty', + 'Asset account' => 'Účet aktiv', + 'Default account' => 'Účet aktiv', + 'Expense account' => 'Výdavkový účet', + 'Revenue account' => 'Príjmový účet', + 'Initial balance account' => 'Účet počiatočného zostatku', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Dlh', + 'account_type_Loan' => 'Pôžička', + 'account_type_Mortgage' => 'Hypotéka', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Kreditná karta', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'Túto sumu mi dlžia', + 'liability_direction_debit' => 'Tento dlh mám voči niekomu inému', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Rozpočty', + 'tags' => 'Štítky', + 'reports' => 'Výkazy', + 'transactions' => 'Transakcie', + 'expenses' => 'Výdavky', + 'income' => 'Zisky / príjmy', + 'transfers' => 'Prevody', + 'moneyManagement' => 'Správa peňazí', + 'money_management' => 'Správa peňazí', + 'tools' => 'Nástroje', + 'piggyBanks' => 'Pokladničky', + 'piggy_banks' => 'Pokladničky', + 'amount_x_of_y' => '{current} z {total}', + 'bills' => 'Účty', + 'withdrawal' => 'Výber', + 'opening_balance' => 'Počiatočný zostatok', + 'deposit' => 'Vklad', + 'account' => 'Účet', + 'transfer' => 'Prevod', + 'Withdrawal' => 'Výber', + 'Deposit' => 'Vklad', + 'Transfer' => 'Prevod', + 'bill' => 'Účet', + 'yes' => 'Áno', + 'no' => 'Ne', + 'amount' => 'Suma', + 'overview' => 'Prehľad', + 'saveOnAccount' => 'Uložiť na účet', + 'unknown' => 'Neznáme', + 'monthly' => 'Mesačne', + 'profile' => 'Profil', + 'errors' => 'Chyby', + 'debt_start_date' => 'Dátum začiatku dlhu', + 'debt_start_amount' => 'Počiatočná výška dlhu', + 'debt_start_amount_help' => 'Najlepšie je vždy túto hodnotu nastaviť na zápornú hodnotu. Ďalšie informácie nájdete na stránkach pomocníka (ikona (?) vpravo hore).', + 'interest_period_help' => 'Toto pole je čisto kozmetické a nebude sa pre vás počítať. Ako sa ukázalo, banky sú veľmi záludné, takže Firefly III to nikdy neurobí správne.', + 'store_new_liabilities_account' => 'Uložiť nový záväzok', + 'edit_liabilities_account' => 'Upraviť záväzok „:name“', + 'financial_control' => 'Finančná kontrola', + 'accounting' => 'Bankové účty', + 'automation' => 'Automatizácia', + 'others' => 'Iné', + 'classification' => 'Klasifikácia', + 'store_transaction' => 'Uložiť transakciu', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Predvolený finančný výkaz v období :start a :end', - 'report_audit' => 'Prehľad histórie transakcií medzi :start a :end', - 'report_category' => 'Výkaz kategórie v rozmedzí :start a :end', - 'report_double' => 'Výkaz účtov výdavkov/výnosov medzi :start a :end', - 'report_budget' => 'Výkaz rozpočtov medzi :start a :end', - 'report_tag' => 'Výkaz štítkov medzi :start a :end', - 'quick_link_reports' => 'Rýchle odkazy', - 'quick_link_examples' => 'Je to len niekoľko príkladov prepojení, ktoré vám pomôžu začať. Na stránkach pomocníka pod tlačidlom (?) Nájdete informácie o všetkých výkazoch a magických slovíčkach, ktoré môžete použiť.', - 'quick_link_default_report' => 'Predvolený finančný výkaz', - 'quick_link_audit_report' => 'Prehľad histórie transakcií', - 'report_this_month_quick' => 'Aktuálny mesiac, všetky účty', - 'report_last_month_quick' => 'Minulý mesiac, všetky účty', - 'report_this_year_quick' => 'Aktuálny rok, všetky účty', - 'report_this_fiscal_year_quick' => 'Aktuálny fiškálny rok, všetky účty', - 'report_all_time_quick' => 'Kedykoľvek, všetky účty', - 'reports_can_bookmark' => 'Pamätajte, že výkazy je možné si ukládať do záložiek.', - 'incomeVsExpenses' => 'Príjmy voči výdavkom', - 'accountBalances' => 'Zostatky účtov', - 'balanceStart' => 'Zostatok na začiatku obdobia', - 'balanceEnd' => 'Zostatok na konci obdobia', - 'splitByAccount' => 'Rozúčtovanie podľa účtu', - 'coveredWithTags' => 'Pokryté štítkami', - 'leftInBudget' => 'Zostáva v rozpočte', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Súhrn súčtov', - 'noCategory' => '(bez kategórie)', - 'notCharged' => 'Nestrhnuté (zatiaľ)', - 'inactive' => 'Neaktívne', - 'active' => 'Aktívne', - 'difference' => 'Rozdiel', - 'money_flowing_in' => 'Prichádzajúce', - 'money_flowing_out' => 'Odchádzajúce', - 'topX' => 'naj :number', - 'show_full_list' => 'Zobraziť celý zoznam', - 'show_only_top' => 'Zobraziť len :number naj', - 'report_type' => 'Typ výkazu', - 'report_type_default' => 'Predvolený finančný výkaz', - 'report_type_audit' => 'Prehlad histórie transakcií (audit)', - 'report_type_category' => 'Výkaz kategórií', - 'report_type_budget' => 'Výkaz rozpočtu', - 'report_type_tag' => 'Výkaz štítkov', - 'report_type_double' => 'Výkaz výdajov/výnosov účtu', - 'more_info_help' => 'Viac informácií o týchto druhoch výkazov nájdete na stránkach pomocníka. Stlačte ikonu (?) V pravom hornom rohu.', - 'report_included_accounts' => 'Zahrnuté účty', - 'report_date_range' => 'Obdobie', - 'report_preset_ranges' => 'Predvolené rozsahy', - 'shared' => 'Zdieľané', - 'fiscal_year' => 'Fiškálny rok', - 'income_entry' => 'Príjmy z účtu „:name“ medzi :start a :end', - 'expense_entry' => 'Výdavky z účtu „:name“ v období :start a :end', - 'category_entry' => 'Výdavky a príjmy na účte „:name“ v období :start a :end', - 'budget_spent_amount' => 'Výdavky z rozpočtu „:budget“ v období :start a :end', - 'balance_amount' => 'Výdavky z rozpočtu „:budget“ hradené z účtu „:account“ v období :start a :end', - 'no_audit_activity' => 'Medzi :start a :end nebola na účte :account_name zaznamenaná žiadna aktivita.', - 'audit_end_balance' => 'Zostatok na účte :account_name na konci :end bol: :balance', - 'reports_extra_options' => 'Ďalšie možnosti', - 'report_has_no_extra_options' => 'Tento výkaz nemá žiadne ďalšie možnosti', - 'reports_submit' => 'Zobraziť výkaz', - 'end_after_start_date' => 'Konečný dátum výkazu musí nasledovať po počiatočnom dátume.', - 'select_category' => 'Vybrať kategórie', - 'select_budget' => 'Vybrať rozpočty.', - 'select_tag' => 'Vybrať štítky.', - 'income_per_category' => 'Príjem podľa kategórie', - 'expense_per_category' => 'Výdavky podľa kategórie', - 'expense_per_budget' => 'Výdavky podľa rozpočtu', - 'income_per_account' => 'Príjem podľa účtu', - 'expense_per_account' => 'Výdavky podľa účtu', - 'expense_per_tag' => 'Výdavky podľa štítku', - 'income_per_tag' => 'Príjmy podľa štítku', - 'include_expense_not_in_budget' => 'Zahrnuté výdavky nie sú v zvolených rozpočtoch', - 'include_expense_not_in_account' => 'Zahrnuté výdavky nie sú v zvolených bankových účtoch', - 'include_expense_not_in_category' => 'Zahrnuté výdavky nie sú v zvolených kategóriách', - 'include_income_not_in_category' => 'Zahrnuté príjmy nie sú v zvolených kategóriách', - 'include_income_not_in_account' => 'Zahrnuté príjmy nie sú v zvolených bankových účtoch', - 'include_income_not_in_tags' => 'Zahrnuté príjmy nie sú v zvolených štítkoch', - 'include_expense_not_in_tags' => 'Zahrnuté výdavky nie sú v zvolených štítkoch', - 'everything_else' => 'Všetko ostatné', - 'income_and_expenses' => 'Príjmy a výdavky', - 'spent_average' => 'Utratené (priemerne)', - 'income_average' => 'Získané (priemerne)', - 'transaction_count' => 'Počet transakcií', - 'average_spending_per_account' => 'Priemerné výdaje na účet', - 'average_income_per_account' => 'Priemerný príjem v jednotlivých účtoch', - 'total' => 'Spolu', - 'description' => 'Popis', - 'sum_of_period' => 'Spolu v období', - 'average_in_period' => 'Priemer obdobia', - 'account_role_defaultAsset' => 'Predvolený účet aktív', - 'account_role_sharedAsset' => 'Zdieľaný účet aktív', - 'account_role_savingAsset' => 'Šetriaci účet', - 'account_role_ccAsset' => 'Kreditná karta', - 'account_role_cashWalletAsset' => 'Peňaženka', - 'budget_chart_click' => 'Graf zobrazíte kliknutím na názov rozpočtu vo vyššie uvedenej tabuľke.', - 'category_chart_click' => 'Graf zobrazíte kliknutím na názov kategórie vo vyššie uvedenej tabuľke.', - 'in_out_accounts' => 'Získané a utratené v kombináciách', - 'in_out_accounts_per_asset' => 'Zarobené a utratené (na majetkový účet)', - 'in_out_per_category' => 'Získané a utratené v jednotlivých kategóriách', - 'out_per_budget' => 'Utratené v jednotlivých rozpočtoch', - 'select_expense_revenue' => 'Vybrať účet výdavkov/ziskov', - 'multi_currency_report_sum' => 'Pretože tento zoznam obsahuje účty v rôznych menách, nedávajú zobrazované súčty zmysel. Výkaz v tomto prípade vždy použije predvolenú menu.', - 'sum_in_default_currency' => 'Suma vždy bude v mene, ktorú ste nastavili jako predvolenú.', - 'net_filtered_prefs' => 'Tento graf nikdy nebude obsahovať účty, ktoré nemajú začiarknuté políčko „Zahrnúť do čistého imania“.', + 'report_default' => 'Predvolený finančný výkaz v období :start a :end', + 'report_audit' => 'Prehľad histórie transakcií medzi :start a :end', + 'report_category' => 'Výkaz kategórie v rozmedzí :start a :end', + 'report_double' => 'Výkaz účtov výdavkov/výnosov medzi :start a :end', + 'report_budget' => 'Výkaz rozpočtov medzi :start a :end', + 'report_tag' => 'Výkaz štítkov medzi :start a :end', + 'quick_link_reports' => 'Rýchle odkazy', + 'quick_link_examples' => 'Je to len niekoľko príkladov prepojení, ktoré vám pomôžu začať. Na stránkach pomocníka pod tlačidlom (?) Nájdete informácie o všetkých výkazoch a magických slovíčkach, ktoré môžete použiť.', + 'quick_link_default_report' => 'Predvolený finančný výkaz', + 'quick_link_audit_report' => 'Prehľad histórie transakcií', + 'report_this_month_quick' => 'Aktuálny mesiac, všetky účty', + 'report_last_month_quick' => 'Minulý mesiac, všetky účty', + 'report_this_year_quick' => 'Aktuálny rok, všetky účty', + 'report_this_fiscal_year_quick' => 'Aktuálny fiškálny rok, všetky účty', + 'report_all_time_quick' => 'Kedykoľvek, všetky účty', + 'reports_can_bookmark' => 'Pamätajte, že výkazy je možné si ukládať do záložiek.', + 'incomeVsExpenses' => 'Príjmy voči výdavkom', + 'accountBalances' => 'Zostatky účtov', + 'balanceStart' => 'Zostatok na začiatku obdobia', + 'balanceEnd' => 'Zostatok na konci obdobia', + 'splitByAccount' => 'Rozúčtovanie podľa účtu', + 'coveredWithTags' => 'Pokryté štítkami', + 'leftInBudget' => 'Zostáva v rozpočte', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Súhrn súčtov', + 'noCategory' => '(bez kategórie)', + 'notCharged' => 'Nestrhnuté (zatiaľ)', + 'inactive' => 'Neaktívne', + 'active' => 'Aktívne', + 'difference' => 'Rozdiel', + 'money_flowing_in' => 'Prichádzajúce', + 'money_flowing_out' => 'Odchádzajúce', + 'topX' => 'naj :number', + 'show_full_list' => 'Zobraziť celý zoznam', + 'show_only_top' => 'Zobraziť len :number naj', + 'report_type' => 'Typ výkazu', + 'report_type_default' => 'Predvolený finančný výkaz', + 'report_type_audit' => 'Prehlad histórie transakcií (audit)', + 'report_type_category' => 'Výkaz kategórií', + 'report_type_budget' => 'Výkaz rozpočtu', + 'report_type_tag' => 'Výkaz štítkov', + 'report_type_double' => 'Výkaz výdajov/výnosov účtu', + 'more_info_help' => 'Viac informácií o týchto druhoch výkazov nájdete na stránkach pomocníka. Stlačte ikonu (?) V pravom hornom rohu.', + 'report_included_accounts' => 'Zahrnuté účty', + 'report_date_range' => 'Obdobie', + 'report_preset_ranges' => 'Predvolené rozsahy', + 'shared' => 'Zdieľané', + 'fiscal_year' => 'Fiškálny rok', + 'income_entry' => 'Príjmy z účtu „:name“ medzi :start a :end', + 'expense_entry' => 'Výdavky z účtu „:name“ v období :start a :end', + 'category_entry' => 'Výdavky a príjmy na účte „:name“ v období :start a :end', + 'budget_spent_amount' => 'Výdavky z rozpočtu „:budget“ v období :start a :end', + 'balance_amount' => 'Výdavky z rozpočtu „:budget“ hradené z účtu „:account“ v období :start a :end', + 'no_audit_activity' => 'Medzi :start a :end nebola na účte :account_name zaznamenaná žiadna aktivita.', + 'audit_end_balance' => 'Zostatok na účte :account_name na konci :end bol: :balance', + 'reports_extra_options' => 'Ďalšie možnosti', + 'report_has_no_extra_options' => 'Tento výkaz nemá žiadne ďalšie možnosti', + 'reports_submit' => 'Zobraziť výkaz', + 'end_after_start_date' => 'Konečný dátum výkazu musí nasledovať po počiatočnom dátume.', + 'select_category' => 'Vybrať kategórie', + 'select_budget' => 'Vybrať rozpočty.', + 'select_tag' => 'Vybrať štítky.', + 'income_per_category' => 'Príjem podľa kategórie', + 'expense_per_category' => 'Výdavky podľa kategórie', + 'expense_per_budget' => 'Výdavky podľa rozpočtu', + 'income_per_account' => 'Príjem podľa účtu', + 'expense_per_account' => 'Výdavky podľa účtu', + 'expense_per_tag' => 'Výdavky podľa štítku', + 'income_per_tag' => 'Príjmy podľa štítku', + 'include_expense_not_in_budget' => 'Zahrnuté výdavky nie sú v zvolených rozpočtoch', + 'include_expense_not_in_account' => 'Zahrnuté výdavky nie sú v zvolených bankových účtoch', + 'include_expense_not_in_category' => 'Zahrnuté výdavky nie sú v zvolených kategóriách', + 'include_income_not_in_category' => 'Zahrnuté príjmy nie sú v zvolených kategóriách', + 'include_income_not_in_account' => 'Zahrnuté príjmy nie sú v zvolených bankových účtoch', + 'include_income_not_in_tags' => 'Zahrnuté príjmy nie sú v zvolených štítkoch', + 'include_expense_not_in_tags' => 'Zahrnuté výdavky nie sú v zvolených štítkoch', + 'everything_else' => 'Všetko ostatné', + 'income_and_expenses' => 'Príjmy a výdavky', + 'spent_average' => 'Utratené (priemerne)', + 'income_average' => 'Získané (priemerne)', + 'transaction_count' => 'Počet transakcií', + 'average_spending_per_account' => 'Priemerné výdaje na účet', + 'average_income_per_account' => 'Priemerný príjem v jednotlivých účtoch', + 'total' => 'Spolu', + 'description' => 'Popis', + 'sum_of_period' => 'Spolu v období', + 'average_in_period' => 'Priemer obdobia', + 'account_role_defaultAsset' => 'Predvolený účet aktív', + 'account_role_sharedAsset' => 'Zdieľaný účet aktív', + 'account_role_savingAsset' => 'Šetriaci účet', + 'account_role_ccAsset' => 'Kreditná karta', + 'account_role_cashWalletAsset' => 'Peňaženka', + 'budget_chart_click' => 'Graf zobrazíte kliknutím na názov rozpočtu vo vyššie uvedenej tabuľke.', + 'category_chart_click' => 'Graf zobrazíte kliknutím na názov kategórie vo vyššie uvedenej tabuľke.', + 'in_out_accounts' => 'Získané a utratené v kombináciách', + 'in_out_accounts_per_asset' => 'Zarobené a utratené (na majetkový účet)', + 'in_out_per_category' => 'Získané a utratené v jednotlivých kategóriách', + 'out_per_budget' => 'Utratené v jednotlivých rozpočtoch', + 'select_expense_revenue' => 'Vybrať účet výdavkov/ziskov', + 'multi_currency_report_sum' => 'Pretože tento zoznam obsahuje účty v rôznych menách, nedávajú zobrazované súčty zmysel. Výkaz v tomto prípade vždy použije predvolenú menu.', + 'sum_in_default_currency' => 'Suma vždy bude v mene, ktorú ste nastavili jako predvolenú.', + 'net_filtered_prefs' => 'Tento graf nikdy nebude obsahovať účty, ktoré nemajú začiarknuté políčko „Zahrnúť do čistého imania“.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Graf', - 'month' => 'Mesiac', - 'budget' => 'Rozpočet', - 'spent' => 'Utratené', - 'spent_capped' => 'Útraty (obmedzené)', - 'spent_in_budget' => 'Utratené v rozpočte', - 'left_to_spend' => 'Zostáva k útrate', - 'earned' => 'Zarobené', - 'overspent' => 'Prekročené výdaje', - 'left' => 'Zostáva', - 'max-amount' => 'Maximálna suma', - 'min-amount' => 'Najmenšia možná suma', - 'journal-amount' => 'Zadanie aktuálneho účtu', - 'name' => 'Názov', - 'date' => 'Dátum', - 'date_and_time' => 'Dátum a čas', - 'time' => 'Čas', - 'paid' => 'Uhradené', - 'unpaid' => 'Neuhradené', - 'day' => 'Deň', - 'budgeted' => 'Rozpočtované', - 'period' => 'Obdobie', - 'balance' => 'Zostatok', - 'in_out_period' => 'In + out this period', - 'sum' => 'Suma', - 'summary' => 'Sumár', - 'average' => 'Priemer', - 'balanceFor' => 'Zostatok pre :name', - 'no_tags' => '(žiadne štítky)', + 'chart' => 'Graf', + 'month' => 'Mesiac', + 'budget' => 'Rozpočet', + 'spent' => 'Utratené', + 'spent_capped' => 'Útraty (obmedzené)', + 'spent_in_budget' => 'Utratené v rozpočte', + 'left_to_spend' => 'Zostáva k útrate', + 'earned' => 'Zarobené', + 'overspent' => 'Prekročené výdaje', + 'left' => 'Zostáva', + 'max-amount' => 'Maximálna suma', + 'min-amount' => 'Najmenšia možná suma', + 'journal-amount' => 'Zadanie aktuálneho účtu', + 'name' => 'Názov', + 'date' => 'Dátum', + 'date_and_time' => 'Dátum a čas', + 'time' => 'Čas', + 'paid' => 'Uhradené', + 'unpaid' => 'Neuhradené', + 'day' => 'Deň', + 'budgeted' => 'Rozpočtované', + 'period' => 'Obdobie', + 'balance' => 'Zostatok', + 'in_out_period' => 'In + out this period', + 'sum' => 'Suma', + 'summary' => 'Sumár', + 'average' => 'Priemer', + 'balanceFor' => 'Zostatok pre :name', + 'no_tags' => '(žiadne štítky)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Vložiť peniaze do pokladničky ":name"', - 'piggy_bank' => 'Pokladnička', - 'new_piggy_bank' => 'Nová pokladnička', - 'store_piggy_bank' => 'Uložiť novú pokladničku', - 'stored_piggy_bank' => 'Uložiť novú pokladničku „:name“', - 'account_status' => 'Stav účtu', - 'left_for_piggy_banks' => 'Zostáva pre pokladničky', - 'sum_of_piggy_banks' => 'Súčet pokladničiek', - 'saved_so_far' => 'Doteraz našetrené', - 'left_to_save' => 'Zostáva ušetriť', - 'suggested_amount' => 'Odporúčaná mesačná suma do úspor', - 'add_money_to_piggy_title' => 'Vložiť peniaze do pokladničky ":name"', - 'remove_money_from_piggy_title' => 'Vybrať peniaze z pokladničky ":name"', - 'add' => 'Pridať', - 'no_money_for_piggy' => 'Nie sú k dispozícii žiadne peniaze, ktoré by se dali vložiť do tejto pokladničky.', - 'suggested_savings_per_month' => 'Odporúčané na mesiac', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Vložiť peniaze do pokladničky ":name"', + 'piggy_bank' => 'Pokladnička', + 'new_piggy_bank' => 'Nová pokladnička', + 'store_piggy_bank' => 'Uložiť novú pokladničku', + 'stored_piggy_bank' => 'Uložiť novú pokladničku „:name“', + 'account_status' => 'Stav účtu', + 'left_for_piggy_banks' => 'Zostáva pre pokladničky', + 'sum_of_piggy_banks' => 'Súčet pokladničiek', + 'saved_so_far' => 'Doteraz našetrené', + 'left_to_save' => 'Zostáva ušetriť', + 'suggested_amount' => 'Odporúčaná mesačná suma do úspor', + 'add_money_to_piggy_title' => 'Vložiť peniaze do pokladničky ":name"', + 'remove_money_from_piggy_title' => 'Vybrať peniaze z pokladničky ":name"', + 'add' => 'Pridať', + 'no_money_for_piggy' => 'Nie sú k dispozícii žiadne peniaze, ktoré by se dali vložiť do tejto pokladničky.', + 'suggested_savings_per_month' => 'Odporúčané na mesiac', - 'remove' => 'Odstrániť', - 'max_amount_add' => 'Najvyššia suma, ktorú je možné pridať je', - 'max_amount_remove' => 'Najvyššia suma, ktorú je možné odobrať je', - 'update_piggy_button' => 'Upraviť pokladničku', - 'update_piggy_title' => 'Upraviť pokladničku ":name"', - 'updated_piggy_bank' => 'Pokladnička „:name“ bola upravená', - 'details' => 'Podrobnosti', - 'events' => 'Udalosti', - 'target_amount' => 'Cieľová suma', - 'start_date' => 'Dátum zahájenia', - 'no_start_date' => 'Žiadny dátum zahájenia', - 'target_date' => 'Cieľový dátum', - 'no_target_date' => 'Žiadny cieľový dátum', - 'table' => 'Tabuľka', - 'delete_piggy_bank' => 'Odstrániť pokladničku ":name"', - 'cannot_add_amount_piggy' => 'Nepodarilo sa pridať :amount do „:name“.', - 'cannot_remove_from_piggy' => 'Nepodarilo sa odstrániť :amount z „:name“.', - 'deleted_piggy_bank' => 'Pokladnička ":name" bola odstránená', - 'added_amount_to_piggy' => ':amount pridané do „:name“', - 'removed_amount_from_piggy' => ':amount odobrané z „:name“', - 'piggy_events' => 'Súvisiace pokladničky', + 'remove' => 'Odstrániť', + 'max_amount_add' => 'Najvyššia suma, ktorú je možné pridať je', + 'max_amount_remove' => 'Najvyššia suma, ktorú je možné odobrať je', + 'update_piggy_button' => 'Upraviť pokladničku', + 'update_piggy_title' => 'Upraviť pokladničku ":name"', + 'updated_piggy_bank' => 'Pokladnička „:name“ bola upravená', + 'details' => 'Podrobnosti', + 'events' => 'Udalosti', + 'target_amount' => 'Cieľová suma', + 'start_date' => 'Dátum zahájenia', + 'no_start_date' => 'Žiadny dátum zahájenia', + 'target_date' => 'Cieľový dátum', + 'no_target_date' => 'Žiadny cieľový dátum', + 'table' => 'Tabuľka', + 'delete_piggy_bank' => 'Odstrániť pokladničku ":name"', + 'cannot_add_amount_piggy' => 'Nepodarilo sa pridať :amount do „:name“.', + 'cannot_remove_from_piggy' => 'Nepodarilo sa odstrániť :amount z „:name“.', + 'deleted_piggy_bank' => 'Pokladnička ":name" bola odstránená', + 'added_amount_to_piggy' => ':amount pridané do „:name“', + 'removed_amount_from_piggy' => ':amount odobrané z „:name“', + 'piggy_events' => 'Súvisiace pokladničky', // tags - 'delete_tag' => 'Odstrániť štítok „:tag“', - 'deleted_tag' => 'Štítok „:tag“ bol odstránený', - 'new_tag' => 'Vytvoriť nový štítok', - 'edit_tag' => 'Upraviť štítok „:tag“', - 'updated_tag' => 'Štítok „:tag“ bol upravený', - 'created_tag' => 'Štítok „:tag“ bol vytvorený!', + 'delete_tag' => 'Odstrániť štítok „:tag“', + 'deleted_tag' => 'Štítok „:tag“ bol odstránený', + 'new_tag' => 'Vytvoriť nový štítok', + 'edit_tag' => 'Upraviť štítok „:tag“', + 'updated_tag' => 'Štítok „:tag“ bol upravený', + 'created_tag' => 'Štítok „:tag“ bol vytvorený!', - 'transaction_journal_information' => 'Informácie o transakcii', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta informácie', - 'transaction_journal_more' => 'Ďalšie informácie', - 'basic_journal_information' => 'Základné Informácie o transakcii', - 'transaction_journal_extra' => 'Ďalšie informácie', - 'att_part_of_journal' => 'Uložené pod „:journal“', - 'total_amount' => 'Celková suma', - 'number_of_decimals' => 'Počet desatinných miest', + 'transaction_journal_information' => 'Informácie o transakcii', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Meta informácie', + 'transaction_journal_more' => 'Ďalšie informácie', + 'basic_journal_information' => 'Základné Informácie o transakcii', + 'transaction_journal_extra' => 'Ďalšie informácie', + 'att_part_of_journal' => 'Uložené pod „:journal“', + 'total_amount' => 'Celková suma', + 'number_of_decimals' => 'Počet desatinných miest', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Správa', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Správa použivateľov', - 'list_all_users' => 'Všetci použivatelia', - 'all_users' => 'Všetci použivatelia', - 'instance_configuration' => 'Nastavenia', - 'firefly_instance_configuration' => 'Možnosti nastavenia Firefly III', - 'setting_single_user_mode' => 'Režim jediného použivateľa', - 'setting_single_user_mode_explain' => 'V predvolenom režime Firefly III akceptuje len jednu registráciu – Vás. Toto je bezpečnostné opatrenie, brániace ostatným používať vašu inštaláciu, kým im to nepovolíte. Ďalšie registrácie sú blokované. Aj tento prepínač povolíte, budú vašu inštaláciu Firefly III môcť použiť, samozrejme za predpokladu, že je je pre nich dostupná (pripojená k Internetu).', - 'store_configuration' => 'Uložiť nastavenia', - 'single_user_administration' => 'Správa použivateľa pre :email', - 'edit_user' => 'Upraviť použivateľa :email', - 'hidden_fields_preferences' => 'Viac možností transakcií môžete povoliť vo svojich nastaveniach.', - 'user_data_information' => 'Použivateľské údaje', - 'user_information' => 'Informácie o použivateľovi', - 'total_size' => 'celková veľkosť', - 'budget_or_budgets' => ':count rozpočet|:count rozpočtov', - 'budgets_with_limits' => ':count rozpočet s rozpočtovou sumou|:count rozpočtov s rozpočtovou sumou', - 'nr_of_rules_in_total_groups' => ':count_rules pravidiel v skupine pravidiel :count_groups', - 'tag_or_tags' => ':count štítok|:count štítkov', - 'configuration_updated' => 'Nastavenie bolo upravené', - 'setting_is_demo_site' => 'Demostránka', - 'setting_is_demo_site_explain' => 'Ak začiarknete toto políčko, bude sa táto inštalácia správať, akoby išlo o ukážkovú stránku, čo môže mať zvláštne vedľajšie účinky.', - 'block_code_bounced' => 'E-mailové správy boli vrátené', - 'block_code_expired' => 'Platnost demoúčtu skončila', - 'no_block_code' => 'Nie je dôvod pre blokovanie, alebo použivateľ nebol zablokovaný', - 'block_code_email_changed' => 'Poživateľ ešte nepotvrdil svoju e-mailovú adresu', - 'admin_update_email' => 'Na rozdiel od profilovej stránky použivatel NEBUDE upozornený na zmenu svojej e-mailovej adresy!', - 'update_user' => 'Upraviť použivateľa', - 'updated_user' => 'Údaje použivateľa boli zmenené.', - 'delete_user' => 'Odstrániť použivateľa :email', - 'user_deleted' => 'Použivateľ bol odstránený', - 'send_test_email' => 'Poslať skúšobný e-mail', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Odoslať správu', - 'send_test_triggered' => 'Test bol odoslaný. Skontrolujte svoju doručenú poštu a súbory denníka.', - 'give_admin_careful' => 'Používatelia, ktorí majú práva správcu, vám môžu odobrať tie vaše. Buďte opatrní.', - 'admin_maintanance_title' => 'Údržba', - 'admin_maintanance_expl' => 'Niekoľko šikovných tlačidiel pre údržbu Firefly III', - 'admin_maintenance_clear_cache' => 'Vymazať medzipamäť', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Popis rozúčtovania', - 'split_transaction_title_help' => 'Ak vytvoríte rozúčtovanú transakciu, musí existovať globálny popis všetkých rozúčtovaní transakcie.', - 'split_title_help' => 'Ak vytvoríte rozúčtovanie transakcie, je potrebné, aby ste určili všeobecný popis pre všetky rozúčtovania danej transakcie.', - 'you_create_transfer' => 'Vytvárate prevod.', - 'you_create_withdrawal' => 'Vytvárate výber.', - 'you_create_deposit' => 'Vytvárate vklad.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Správa', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'Správa použivateľov', + 'list_all_users' => 'Všetci použivatelia', + 'all_users' => 'Všetci použivatelia', + 'instance_configuration' => 'Nastavenia', + 'firefly_instance_configuration' => 'Možnosti nastavenia Firefly III', + 'setting_single_user_mode' => 'Režim jediného použivateľa', + 'setting_single_user_mode_explain' => 'V predvolenom režime Firefly III akceptuje len jednu registráciu – Vás. Toto je bezpečnostné opatrenie, brániace ostatným používať vašu inštaláciu, kým im to nepovolíte. Ďalšie registrácie sú blokované. Aj tento prepínač povolíte, budú vašu inštaláciu Firefly III môcť použiť, samozrejme za predpokladu, že je je pre nich dostupná (pripojená k Internetu).', + 'store_configuration' => 'Uložiť nastavenia', + 'single_user_administration' => 'Správa použivateľa pre :email', + 'edit_user' => 'Upraviť použivateľa :email', + 'hidden_fields_preferences' => 'Viac možností transakcií môžete povoliť vo svojich nastaveniach.', + 'user_data_information' => 'Použivateľské údaje', + 'user_information' => 'Informácie o použivateľovi', + 'total_size' => 'celková veľkosť', + 'budget_or_budgets' => ':count rozpočet|:count rozpočtov', + 'budgets_with_limits' => ':count rozpočet s rozpočtovou sumou|:count rozpočtov s rozpočtovou sumou', + 'nr_of_rules_in_total_groups' => ':count_rules pravidiel v skupine pravidiel :count_groups', + 'tag_or_tags' => ':count štítok|:count štítkov', + 'configuration_updated' => 'Nastavenie bolo upravené', + 'setting_is_demo_site' => 'Demostránka', + 'setting_is_demo_site_explain' => 'Ak začiarknete toto políčko, bude sa táto inštalácia správať, akoby išlo o ukážkovú stránku, čo môže mať zvláštne vedľajšie účinky.', + 'block_code_bounced' => 'E-mailové správy boli vrátené', + 'block_code_expired' => 'Platnost demoúčtu skončila', + 'no_block_code' => 'Nie je dôvod pre blokovanie, alebo použivateľ nebol zablokovaný', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Poživateľ ešte nepotvrdil svoju e-mailovú adresu', + 'admin_update_email' => 'Na rozdiel od profilovej stránky použivatel NEBUDE upozornený na zmenu svojej e-mailovej adresy!', + 'update_user' => 'Upraviť použivateľa', + 'updated_user' => 'Údaje použivateľa boli zmenené.', + 'delete_user' => 'Odstrániť použivateľa :email', + 'user_deleted' => 'Použivateľ bol odstránený', + 'send_test_email' => 'Poslať skúšobný e-mail', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Odoslať správu', + 'send_test_triggered' => 'Test bol odoslaný. Skontrolujte svoju doručenú poštu a súbory denníka.', + 'give_admin_careful' => 'Používatelia, ktorí majú práva správcu, vám môžu odobrať tie vaše. Buďte opatrní.', + 'admin_maintanance_title' => 'Údržba', + 'admin_maintanance_expl' => 'Niekoľko šikovných tlačidiel pre údržbu Firefly III', + 'admin_maintenance_clear_cache' => 'Vymazať medzipamäť', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Popis rozúčtovania', + 'split_transaction_title_help' => 'Ak vytvoríte rozúčtovanú transakciu, musí existovať globálny popis všetkých rozúčtovaní transakcie.', + 'split_title_help' => 'Ak vytvoríte rozúčtovanie transakcie, je potrebné, aby ste určili všeobecný popis pre všetky rozúčtovania danej transakcie.', + 'you_create_transfer' => 'Vytvárate prevod.', + 'you_create_withdrawal' => 'Vytvárate výber.', + 'you_create_deposit' => 'Vytvárate vklad.', // links - 'journal_link_configuration' => 'Konfigurácia prepojení transakcií', - 'create_new_link_type' => 'Vytvoriť nový typ prepojenia', - 'store_new_link_type' => 'Uložiť nový typ prepojenia', - 'update_link_type' => 'Upraviť typ prepojenia', - 'edit_link_type' => 'Upraviť prepojenie typu „:name“', - 'updated_link_type' => 'Prepojenie typu „:name“ bolo upravené', - 'delete_link_type' => 'Odstrániť prepojenie typu ":name"', - 'deleted_link_type' => 'Prepojenie typu ":name" bolo odstránené', - 'stored_new_link_type' => 'Uložiť nové prepojenie typu ":name"', - 'cannot_edit_link_type' => 'Nie je možné upraviť prepojenie typu ":name"', - 'link_type_help_name' => 'tj. "duplicity"', - 'link_type_help_inward' => 'tj. „duplicity“', - 'link_type_help_outward' => 'tj. "duplikované"', - 'save_connections_by_moving' => 'Uložiť prepojenie medzi týmito transakciami presunutím do iného typu prepojenia:', - 'do_not_save_connection' => '(neukladať prepojenie)', - 'link_transaction' => 'Prepojiť transakciu', - 'link_to_other_transaction' => 'Prepojiť túto transakciu s inou', - 'select_transaction_to_link' => 'Vyberte transakciu, s ktorou chcete túto transakciu prepojiť. Prepojenia v súčasnosti nie sú vo Firefly III (okrem zobrazenia) používané, ale sú plány to v budúcnosti zmeniť. Pomocou vyhľadávacieho poľa vyberte transakciu podľa názvu alebo podľa ID. Ak chcete pridať vlastné typy odkazov, pozrite si sekciu pre správu.', - 'this_transaction' => 'Táto transakcia', - 'transaction' => 'Transakcia', - 'comments' => 'Komentáre', - 'link_notes' => 'Všetky poznámky, ktoré chcete uložiť s prepojením.', - 'invalid_link_selection' => 'Tieto transakcie nie je možné prepojiť', - 'selected_transaction' => 'Vybraná transakcia', - 'journals_linked' => 'Transakcie sú prepojené.', - 'journals_error_linked' => 'Tieto transakcie už sú prepojené.', - 'journals_link_to_self' => 'Nie je možné prepojiť transakciu so sebou samou', - 'journal_links' => 'Prepojenia transakcie', - 'this_withdrawal' => 'Tento výber', - 'this_deposit' => 'Tento vklad', - 'this_transfer' => 'Tento prevod', - 'overview_for_link' => 'Prehľad pre prepojenie typu ":name"', - 'source_transaction' => 'Zdrojová transakcia', - 'link_description' => 'Popis prepojenia', - 'destination_transaction' => 'Cieľová transakcia', - 'delete_journal_link' => 'Odstránenie prepojenia medzi :source a :destination', - 'deleted_link' => 'Prepojenie bolo odstránené', + 'journal_link_configuration' => 'Konfigurácia prepojení transakcií', + 'create_new_link_type' => 'Vytvoriť nový typ prepojenia', + 'store_new_link_type' => 'Uložiť nový typ prepojenia', + 'update_link_type' => 'Upraviť typ prepojenia', + 'edit_link_type' => 'Upraviť prepojenie typu „:name“', + 'updated_link_type' => 'Prepojenie typu „:name“ bolo upravené', + 'delete_link_type' => 'Odstrániť prepojenie typu ":name"', + 'deleted_link_type' => 'Prepojenie typu ":name" bolo odstránené', + 'stored_new_link_type' => 'Uložiť nové prepojenie typu ":name"', + 'cannot_edit_link_type' => 'Nie je možné upraviť prepojenie typu ":name"', + 'link_type_help_name' => 'tj. "duplicity"', + 'link_type_help_inward' => 'tj. „duplicity“', + 'link_type_help_outward' => 'tj. "duplikované"', + 'save_connections_by_moving' => 'Uložiť prepojenie medzi týmito transakciami presunutím do iného typu prepojenia:', + 'do_not_save_connection' => '(neukladať prepojenie)', + 'link_transaction' => 'Prepojiť transakciu', + 'link_to_other_transaction' => 'Prepojiť túto transakciu s inou', + 'select_transaction_to_link' => 'Vyberte transakciu, s ktorou chcete túto transakciu prepojiť. Prepojenia v súčasnosti nie sú vo Firefly III (okrem zobrazenia) používané, ale sú plány to v budúcnosti zmeniť. Pomocou vyhľadávacieho poľa vyberte transakciu podľa názvu alebo podľa ID. Ak chcete pridať vlastné typy odkazov, pozrite si sekciu pre správu.', + 'this_transaction' => 'Táto transakcia', + 'transaction' => 'Transakcia', + 'comments' => 'Komentáre', + 'link_notes' => 'Všetky poznámky, ktoré chcete uložiť s prepojením.', + 'invalid_link_selection' => 'Tieto transakcie nie je možné prepojiť', + 'selected_transaction' => 'Vybraná transakcia', + 'journals_linked' => 'Transakcie sú prepojené.', + 'journals_error_linked' => 'Tieto transakcie už sú prepojené.', + 'journals_link_to_self' => 'Nie je možné prepojiť transakciu so sebou samou', + 'journal_links' => 'Prepojenia transakcie', + 'this_withdrawal' => 'Tento výber', + 'this_deposit' => 'Tento vklad', + 'this_transfer' => 'Tento prevod', + 'overview_for_link' => 'Prehľad pre prepojenie typu ":name"', + 'source_transaction' => 'Zdrojová transakcia', + 'link_description' => 'Popis prepojenia', + 'destination_transaction' => 'Cieľová transakcia', + 'delete_journal_link' => 'Odstránenie prepojenia medzi :source a :destination', + 'deleted_link' => 'Prepojenie bolo odstránené', // link translations: - 'Paid_name' => 'Uhradené', - 'Refund_name' => 'Refundácia', - 'Reimbursement_name' => 'Preplatenie', - 'Related_name' => 'Súvisiace', - 'relates to_inward' => 'súvisí s', - 'is (partially) refunded by_inward' => 'je (čiastočne) preplatené', - 'is (partially) paid for by_inward' => 'je (čiastočne) uhradené', - 'is (partially) reimbursed by_inward' => 'je (čiastočne) preplatené', - 'inward_transaction' => 'Príchodzia transakcia', - 'outward_transaction' => 'Odchádzajúca transakcia', - 'relates to_outward' => 'súvisí s', - '(partially) refunds_outward' => '(čiastočne) prepláca', - '(partially) pays for_outward' => '(čiastočne) uhrádza', - '(partially) reimburses_outward' => '(čiastočne) prepláca', - 'is (partially) refunded by' => 'je (čiastočne) preplatené', - 'is (partially) paid for by' => 'je (čiastočne) uhradené', - 'is (partially) reimbursed by' => 'je (čiastočne) preplatené', - 'relates to' => 'súvisí s', - '(partially) refunds' => '(čiastočne) prepláca', - '(partially) pays for' => '(čiastočne) uhrádza', - '(partially) reimburses' => '(čiastočne) prepláca', + 'Paid_name' => 'Uhradené', + 'Refund_name' => 'Refundácia', + 'Reimbursement_name' => 'Preplatenie', + 'Related_name' => 'Súvisiace', + 'relates to_inward' => 'súvisí s', + 'is (partially) refunded by_inward' => 'je (čiastočne) preplatené', + 'is (partially) paid for by_inward' => 'je (čiastočne) uhradené', + 'is (partially) reimbursed by_inward' => 'je (čiastočne) preplatené', + 'inward_transaction' => 'Príchodzia transakcia', + 'outward_transaction' => 'Odchádzajúca transakcia', + 'relates to_outward' => 'súvisí s', + '(partially) refunds_outward' => '(čiastočne) prepláca', + '(partially) pays for_outward' => '(čiastočne) uhrádza', + '(partially) reimburses_outward' => '(čiastočne) prepláca', + 'is (partially) refunded by' => 'je (čiastočne) preplatené', + 'is (partially) paid for by' => 'je (čiastočne) uhradené', + 'is (partially) reimbursed by' => 'je (čiastočne) preplatené', + 'relates to' => 'súvisí s', + '(partially) refunds' => '(čiastočne) prepláca', + '(partially) pays for' => '(čiastočne) uhrádza', + '(partially) reimburses' => '(čiastočne) prepláca', // split a transaction: - 'splits' => 'Rozúčtovania', - 'add_another_split' => 'Pridať ďalšie rozúčtovanie', - 'cannot_edit_opening_balance' => 'Počiatočný zostatok na účte nemôžete upraviť.', - 'no_edit_multiple_left' => 'Nevybrali ste žiadne platné transakcie na úpravu.', - 'breadcrumb_convert_group' => 'Zmeniť transakciu', - 'convert_invalid_source' => 'Zdrojové informácie sú pre transakciu #%d neplatné.', - 'convert_invalid_destination' => 'Cílové informace sú pre transakciu #%d neplatné.', - 'create_another' => 'Po uložení sa vrátiť späť sem a vytvoriť ďalší.', - 'after_update_create_another' => 'Po aktualizácii sa vrátiť späť a pokračovať v úpravách.', - 'store_as_new' => 'Namiesto aktualizácie uložiť ako novú transakciu.', - 'reset_after' => 'Po odoslaní vynulovať formulár', - 'errors_submission' => 'Pri odosielaní sa niečo nepodarilo. Skontrolujte prosím chyby.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Rozúčtovania', + 'add_another_split' => 'Pridať ďalšie rozúčtovanie', + 'cannot_edit_opening_balance' => 'Počiatočný zostatok na účte nemôžete upraviť.', + 'no_edit_multiple_left' => 'Nevybrali ste žiadne platné transakcie na úpravu.', + 'breadcrumb_convert_group' => 'Zmeniť transakciu', + 'convert_invalid_source' => 'Zdrojové informácie sú pre transakciu #%d neplatné.', + 'convert_invalid_destination' => 'Cílové informace sú pre transakciu #%d neplatné.', + 'create_another' => 'Po uložení sa vrátiť späť sem a vytvoriť ďalší.', + 'after_update_create_another' => 'Po aktualizácii sa vrátiť späť a pokračovať v úpravách.', + 'store_as_new' => 'Namiesto aktualizácie uložiť ako novú transakciu.', + 'reset_after' => 'Po odoslaní vynulovať formulár', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(nezoskupené)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(nezoskupené)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Vytvorme účet aktív!', - 'no_accounts_intro_asset' => 'Zatiaľ nemáte žiadne majetkové účty. Majetkové účty sú vaše hlavné účty: bežný účet, sporiaci účet, zdieľaný účet alebo dokonca vaša kreditná karta.', - 'no_accounts_imperative_asset' => 'Ak chcete začať používať Firefly III, musíte si vytvoriť aspoň jeden majetkový účet. Urobme tak teraz:', - 'no_accounts_create_asset' => 'Vytvoriť nový účet', - 'no_accounts_title_expense' => 'Vytvorme výdavkový účet!', - 'no_accounts_intro_expense' => 'Zatiaľ ste nevytvorili žiadne výdavkové účty. Tieto účty sú určené na útraty, napríklad v obchodoch a supermarketoch.', - 'no_accounts_imperative_expense' => 'Výdavkové účty sa vytvárajú automaticky pri vytváraní transakcií, ale ak chcete, môžete ich vytvoriť aj manuálne. Vytvorme si jeden teraz:', - 'no_accounts_create_expense' => 'Vytvoriť výdavkový účet', - 'no_accounts_title_revenue' => 'Vytvorme príjmový účet!', - 'no_accounts_intro_revenue' => 'Zatiaľ ste nevytvorili žiadny príjmový účet. Príjmové účty slúžia na príjem peňazí – napríklad od vášho zamestnávateľa.', - 'no_accounts_imperative_revenue' => 'Účty výnosov sa vytvárajú automaticky pri vytváraní transakcií, ale môžete ich vytvoriť aj manuálne. Vytvorme si jeden teraz:', - 'no_accounts_create_revenue' => 'Vytvoriť príjmový účet', - 'no_accounts_title_liabilities' => 'Poďme vytvoriť záväzok!', - 'no_accounts_intro_liabilities' => 'Zatiaľ ste nevytvorili žiadne záväzky. Sú to účty, ktoré registrujú vaše pôžičky a ostatné dlhy.', - 'no_accounts_imperative_liabilities' => 'Túto funkciu nemusíte používať, ale hodí sa, ak si chcete v týchto veciach udržať prehľad.', - 'no_accounts_create_liabilities' => 'Vytvoriť záväzok', - 'no_budgets_title_default' => 'Poďme vytvoriť rozpočet', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'Zatiaľ nemáte žiadne rozpočty. Rozpočty sa používajú na usporiadanie vašich výdavkov do logických skupín, ktoré môžete obmedziť výdavkom pomocou soft-cap.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Rozpočty sú základné nástroje správy financií. Poďme si taký vytvoriť:', - 'no_budgets_create_default' => 'Vytvoriť rozpočet', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Poďme vytvoriť kategóriu!', - 'no_categories_intro_default' => 'Zatiaľ nemáte žiadne kategórie. Kategórie sa používajú na doladenie vašich transakcií a na označenie príslušnou kategóriou.', - 'no_categories_imperative_default' => 'Kategórie sa vytvárajú automaticky pri vytváraní transakcií, ale môžete ich vytvoriť aj manuálne. Vytvorme si teraz jednu:', - 'no_categories_create_default' => 'Vytvoriť kategóriu', - 'no_tags_title_default' => 'Poďme vytvoriť štítok!', - 'no_tags_intro_default' => 'Ešte ste nevytvorili žiadny štítok. Slúžia na jemné dolaďovanie vašich transakcií a označujú ich konkrétnymi kľúčovými slovami.', - 'no_tags_imperative_default' => 'Štítky sa vytvárajú automaticky pri vytváraní transakcií, ale môžete ich vytvoriť aj ručne. Vytvorme si teraz jeden:', - 'no_tags_create_default' => 'Vytvoriť štítok', - 'no_transactions_title_withdrawal' => 'Poďme vytvoriť výdavok!', - 'no_transactions_intro_withdrawal' => 'Zatiaľ nemáte žiadne výdaje. Mali by ste si vytvoriť výdavky, aby ste mohli začať spravovať svoje financie.', - 'no_transactions_imperative_withdrawal' => 'Už ste minuli nejaké peniaze? Potom by ste si to mali zapísať:', - 'no_transactions_create_withdrawal' => 'Vytvoriť výdavok', - 'no_transactions_title_deposit' => 'Poďme vytvoriť nejaký príjem!', - 'no_transactions_intro_deposit' => 'Zatiaľ nemáte zaznamenaný žiadny príjem. Mali by ste vytvoriť záznamy o príjmoch, aby ste mohli začať spravovať svoje financie.', - 'no_transactions_imperative_deposit' => 'Dostali ste nejaké peniaze? Potom by ste si to mali zapísať:', - 'no_transactions_create_deposit' => 'Vytvoriť vklad', - 'no_transactions_title_transfers' => 'Poďme vytvoriť prevod!', - 'no_transactions_intro_transfers' => 'Zatiaľ nemáte žiadne prevody. Keď presúvate peniaze medzi majetkovými účtami, zaznamená sa to ako prevod.', - 'no_transactions_imperative_transfers' => 'Presunuli ste nejaké peniaze? Potom by ste si to mali zapísať:', - 'no_transactions_create_transfers' => 'Vytvoriť prevod', - 'no_piggies_title_default' => 'Poďme vytvoriť pokladničku!', - 'no_piggies_intro_default' => 'Zatiaľ nemáte žiadne pokladničky. Môžete vytvoriť pokladničky, ktoré vám rozdelia úspory a sledujú, na čo si šetríte.', - 'no_piggies_imperative_default' => 'Máte veci, na ktoré si šetríte peniaze? Vytvorte si pokladničku a sledujte vývoj:', - 'no_piggies_create_default' => 'Vytvoriť novú pokladničku', - 'no_bills_title_default' => 'Poďme vytvoriť účet!', - 'no_bills_intro_default' => 'Zatiaľ nemáte žiadne účty. Môžete si vytvárať účty na sledovanie pravidelných výdavkov, ako je váš nájom alebo poistenie.', - 'no_bills_imperative_default' => 'Máte také pravidelné účty? Vytvorte účet a sledujte svoje platby:', - 'no_bills_create_default' => 'Vytvoriť účet', + 'no_accounts_title_asset' => 'Vytvorme účet aktív!', + 'no_accounts_intro_asset' => 'Zatiaľ nemáte žiadne majetkové účty. Majetkové účty sú vaše hlavné účty: bežný účet, sporiaci účet, zdieľaný účet alebo dokonca vaša kreditná karta.', + 'no_accounts_imperative_asset' => 'Ak chcete začať používať Firefly III, musíte si vytvoriť aspoň jeden majetkový účet. Urobme tak teraz:', + 'no_accounts_create_asset' => 'Vytvoriť nový účet', + 'no_accounts_title_expense' => 'Vytvorme výdavkový účet!', + 'no_accounts_intro_expense' => 'Zatiaľ ste nevytvorili žiadne výdavkové účty. Tieto účty sú určené na útraty, napríklad v obchodoch a supermarketoch.', + 'no_accounts_imperative_expense' => 'Výdavkové účty sa vytvárajú automaticky pri vytváraní transakcií, ale ak chcete, môžete ich vytvoriť aj manuálne. Vytvorme si jeden teraz:', + 'no_accounts_create_expense' => 'Vytvoriť výdavkový účet', + 'no_accounts_title_revenue' => 'Vytvorme príjmový účet!', + 'no_accounts_intro_revenue' => 'Zatiaľ ste nevytvorili žiadny príjmový účet. Príjmové účty slúžia na príjem peňazí – napríklad od vášho zamestnávateľa.', + 'no_accounts_imperative_revenue' => 'Účty výnosov sa vytvárajú automaticky pri vytváraní transakcií, ale môžete ich vytvoriť aj manuálne. Vytvorme si jeden teraz:', + 'no_accounts_create_revenue' => 'Vytvoriť príjmový účet', + 'no_accounts_title_liabilities' => 'Poďme vytvoriť záväzok!', + 'no_accounts_intro_liabilities' => 'Zatiaľ ste nevytvorili žiadne záväzky. Sú to účty, ktoré registrujú vaše pôžičky a ostatné dlhy.', + 'no_accounts_imperative_liabilities' => 'Túto funkciu nemusíte používať, ale hodí sa, ak si chcete v týchto veciach udržať prehľad.', + 'no_accounts_create_liabilities' => 'Vytvoriť záväzok', + 'no_budgets_title_default' => 'Poďme vytvoriť rozpočet', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'Zatiaľ nemáte žiadne rozpočty. Rozpočty sa používajú na usporiadanie vašich výdavkov do logických skupín, ktoré môžete obmedziť výdavkom pomocou soft-cap.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Rozpočty sú základné nástroje správy financií. Poďme si taký vytvoriť:', + 'no_budgets_create_default' => 'Vytvoriť rozpočet', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Poďme vytvoriť kategóriu!', + 'no_categories_intro_default' => 'Zatiaľ nemáte žiadne kategórie. Kategórie sa používajú na doladenie vašich transakcií a na označenie príslušnou kategóriou.', + 'no_categories_imperative_default' => 'Kategórie sa vytvárajú automaticky pri vytváraní transakcií, ale môžete ich vytvoriť aj manuálne. Vytvorme si teraz jednu:', + 'no_categories_create_default' => 'Vytvoriť kategóriu', + 'no_tags_title_default' => 'Poďme vytvoriť štítok!', + 'no_tags_intro_default' => 'Ešte ste nevytvorili žiadny štítok. Slúžia na jemné dolaďovanie vašich transakcií a označujú ich konkrétnymi kľúčovými slovami.', + 'no_tags_imperative_default' => 'Štítky sa vytvárajú automaticky pri vytváraní transakcií, ale môžete ich vytvoriť aj ručne. Vytvorme si teraz jeden:', + 'no_tags_create_default' => 'Vytvoriť štítok', + 'no_transactions_title_withdrawal' => 'Poďme vytvoriť výdavok!', + 'no_transactions_intro_withdrawal' => 'Zatiaľ nemáte žiadne výdaje. Mali by ste si vytvoriť výdavky, aby ste mohli začať spravovať svoje financie.', + 'no_transactions_imperative_withdrawal' => 'Už ste minuli nejaké peniaze? Potom by ste si to mali zapísať:', + 'no_transactions_create_withdrawal' => 'Vytvoriť výdavok', + 'no_transactions_title_deposit' => 'Poďme vytvoriť nejaký príjem!', + 'no_transactions_intro_deposit' => 'Zatiaľ nemáte zaznamenaný žiadny príjem. Mali by ste vytvoriť záznamy o príjmoch, aby ste mohli začať spravovať svoje financie.', + 'no_transactions_imperative_deposit' => 'Dostali ste nejaké peniaze? Potom by ste si to mali zapísať:', + 'no_transactions_create_deposit' => 'Vytvoriť vklad', + 'no_transactions_title_transfers' => 'Poďme vytvoriť prevod!', + 'no_transactions_intro_transfers' => 'Zatiaľ nemáte žiadne prevody. Keď presúvate peniaze medzi majetkovými účtami, zaznamená sa to ako prevod.', + 'no_transactions_imperative_transfers' => 'Presunuli ste nejaké peniaze? Potom by ste si to mali zapísať:', + 'no_transactions_create_transfers' => 'Vytvoriť prevod', + 'no_piggies_title_default' => 'Poďme vytvoriť pokladničku!', + 'no_piggies_intro_default' => 'Zatiaľ nemáte žiadne pokladničky. Môžete vytvoriť pokladničky, ktoré vám rozdelia úspory a sledujú, na čo si šetríte.', + 'no_piggies_imperative_default' => 'Máte veci, na ktoré si šetríte peniaze? Vytvorte si pokladničku a sledujte vývoj:', + 'no_piggies_create_default' => 'Vytvoriť novú pokladničku', + 'no_bills_title_default' => 'Poďme vytvoriť účet!', + 'no_bills_intro_default' => 'Zatiaľ nemáte žiadne účty. Môžete si vytvárať účty na sledovanie pravidelných výdavkov, ako je váš nájom alebo poistenie.', + 'no_bills_imperative_default' => 'Máte také pravidelné účty? Vytvorte účet a sledujte svoje platby:', + 'no_bills_create_default' => 'Vytvoriť účet', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Opakované transakcie', - 'repeat_until_in_past' => 'Táto opakujúca sa transakcia sa prestala opakovať :date.', - 'recurring_calendar_view' => 'Kalendár', - 'no_recurring_title_default' => 'Poďme vytvoriť opakujúcu sa transakciu!', - 'no_recurring_intro_default' => 'Zatiaľ nemáte žiadne opakujúce sa transakcie. Môžete ich použiť na to, aby Firefly III za vás automaticky vytvoril transakcie.', - 'no_recurring_imperative_default' => 'Toto je dosť pokročilá funkcia, ale môže byť veľmi užitočná. Než budete pokračovať, nezabudnite si prečítať dokumentáciu - ikona (?) v pravom hornom rohu.', - 'no_recurring_create_default' => 'Vytvoriť opakujúcu sa transakciu', - 'make_new_recurring' => 'Vytvoriť opakujúcu sa transakciu', - 'recurring_daily' => 'Každý deň', - 'recurring_weekly' => 'Každý týždeň v :weekday', - 'recurring_weekly_skip' => 'Každý :skip týždeň v :weekday', - 'recurring_monthly' => 'Každý mesiac, :dayOfMonthho', - 'recurring_monthly_skip' => 'Každý :skip mesiac, :dayOfMonthho', - 'recurring_ndom' => 'Každý mesiac, :weekday :dayOfMonthho', - 'recurring_yearly' => 'Každý rok v :date', - 'overview_for_recurrence' => 'Prehľad opakujúcej sa transakcie ":title"', - 'warning_duplicates_repetitions' => 'V zriedkavých prípadoch sa v tomto zozname zobrazia dátumy dvakrát. To sa môže stať, keď sa zrazí viac opakovaní. Firefly III vygeneruje vždy jednu transakciu za deň.', - 'created_transactions' => 'Súvisiace transakcie', - 'expected_withdrawals' => 'Očakávané výbery', - 'expected_deposits' => 'Očakávané vklady', - 'expected_transfers' => 'Očakávané prevody', - 'created_withdrawals' => 'Vytvorené výbery', - 'created_deposits' => 'Vytvorené vklady', - 'created_transfers' => 'Vytvorené prevody', - 'recurring_info' => 'Opakovaná transakcia :count / :total', - 'created_from_recurrence' => 'Vytvorené z opakovanej transakcie ":title" (#:id)', - 'recurring_never_cron' => 'Zdá sa, že úloha cron, ktorá je nevyhnutná na podporu opakujúcich sa transakcií, sa nikdy nespustila. To je samozrejme normálne, keď ste práve nainštalovali Firefly III, ale toto by mali čo najskôr nastaviť. Skontrolujte stránky pomocníka pomocou ikony (?) v pravom hornom rohu stránky.', - 'recurring_cron_long_ago' => 'Vyzerá to, že od posledného spustenia úlohy cron na podporu opakujúcich sa transakcií uplynulo viac ako 36 hodín. Ste si istý, že bol nastavený správne? Skontrolujte stránky pomocníka pomocou ikony (?) v pravom hornom rohu stránky.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Opakované transakcie', + 'repeat_until_in_past' => 'Táto opakujúca sa transakcia sa prestala opakovať :date.', + 'recurring_calendar_view' => 'Kalendár', + 'no_recurring_title_default' => 'Poďme vytvoriť opakujúcu sa transakciu!', + 'no_recurring_intro_default' => 'Zatiaľ nemáte žiadne opakujúce sa transakcie. Môžete ich použiť na to, aby Firefly III za vás automaticky vytvoril transakcie.', + 'no_recurring_imperative_default' => 'Toto je dosť pokročilá funkcia, ale môže byť veľmi užitočná. Než budete pokračovať, nezabudnite si prečítať dokumentáciu - ikona (?) v pravom hornom rohu.', + 'no_recurring_create_default' => 'Vytvoriť opakujúcu sa transakciu', + 'make_new_recurring' => 'Vytvoriť opakujúcu sa transakciu', + 'recurring_daily' => 'Každý deň', + 'recurring_weekly' => 'Každý týždeň v :weekday', + 'recurring_weekly_skip' => 'Každý :skip týždeň v :weekday', + 'recurring_monthly' => 'Každý mesiac, :dayOfMonthho', + 'recurring_monthly_skip' => 'Každý :skip mesiac, :dayOfMonthho', + 'recurring_ndom' => 'Každý mesiac, :weekday :dayOfMonthho', + 'recurring_yearly' => 'Každý rok v :date', + 'overview_for_recurrence' => 'Prehľad opakujúcej sa transakcie ":title"', + 'warning_duplicates_repetitions' => 'V zriedkavých prípadoch sa v tomto zozname zobrazia dátumy dvakrát. To sa môže stať, keď sa zrazí viac opakovaní. Firefly III vygeneruje vždy jednu transakciu za deň.', + 'created_transactions' => 'Súvisiace transakcie', + 'expected_withdrawals' => 'Očakávané výbery', + 'expected_deposits' => 'Očakávané vklady', + 'expected_transfers' => 'Očakávané prevody', + 'created_withdrawals' => 'Vytvorené výbery', + 'created_deposits' => 'Vytvorené vklady', + 'created_transfers' => 'Vytvorené prevody', + 'recurring_info' => 'Opakovaná transakcia :count / :total', + 'created_from_recurrence' => 'Vytvorené z opakovanej transakcie ":title" (#:id)', + 'recurring_never_cron' => 'Zdá sa, že úloha cron, ktorá je nevyhnutná na podporu opakujúcich sa transakcií, sa nikdy nespustila. To je samozrejme normálne, keď ste práve nainštalovali Firefly III, ale toto by mali čo najskôr nastaviť. Skontrolujte stránky pomocníka pomocou ikony (?) v pravom hornom rohu stránky.', + 'recurring_cron_long_ago' => 'Vyzerá to, že od posledného spustenia úlohy cron na podporu opakujúcich sa transakcií uplynulo viac ako 36 hodín. Ste si istý, že bol nastavený správne? Skontrolujte stránky pomocníka pomocou ikony (?) v pravom hornom rohu stránky.', - 'create_new_recurrence' => 'Vytvoriť novú opakujúcu sa transakciu', - 'help_first_date' => 'Uveďte prvé očakávané opakovanie. Musí byť v budúcnosti.', - 'help_first_date_no_past' => 'Uveďte prvé očakávané opakovanie. Firefly III nevytvára transakcie v minulosti.', - 'no_currency' => '(žiadna mena)', - 'mandatory_for_recurring' => 'Nezbytné informace k opakovanosti', - 'mandatory_for_transaction' => 'Povinné informácie o transakcii', - 'optional_for_recurring' => 'Voliteľné informácie o opakovanosti', - 'optional_for_transaction' => 'Voliteľné informácie o transakcii', - 'change_date_other_options' => 'Pre zobrazenie ďalších možností zmeňte „prvý dátum“.', - 'mandatory_fields_for_tranaction' => 'Tieto hodnoty budú prevedené do vytvorených transakcií', - 'click_for_calendar' => 'Kliknite sem pre zobrazenie kalendára, ktorý vám ukáže, kedy sa transakcia bude opakovať.', - 'repeat_forever' => 'Opakovat donekonečna', - 'repeat_until_date' => 'Opakovat do dátumu', - 'repeat_times' => 'Zopakovat -krát', - 'recurring_skips_one' => 'Každý druhý', - 'recurring_skips_more' => 'Preskočí :count výskytov', - 'store_new_recurrence' => 'Uložiť opakovanú transakciu', - 'stored_new_recurrence' => 'Opakujúca sa transakcia „:title“ bola uložená.', - 'edit_recurrence' => 'Upraviť opakovanú transakciu „:title“', - 'recurring_repeats_until' => 'Opakuje sa do :date', - 'recurring_repeats_forever' => 'Opakuje sa navždy', - 'recurring_repeats_x_times' => 'Opakuje sa :count krát|Opakuje sa :count krát', - 'update_recurrence' => 'Upraviť opakujúcu sa transakciu', - 'updated_recurrence' => 'Opakovaná transakcia ":title" bola upravená', - 'recurrence_is_inactive' => 'Táto opakujúca sa transakcia nie je aktívna a nebude generovať nové transakcie.', - 'delete_recurring' => 'Odstrániť opakovanú transakciu „:title“', - 'new_recurring_transaction' => 'Nová opakujúca sa transakcia', - 'help_weekend' => 'Čo by mal Firefly III spraviť, keď opakovaná transakcia pripadne na sobotu alebo nedeľu?', - 'do_nothing' => 'Len vytvoriť transakciu', - 'skip_transaction' => 'Preskočit opakovanosť', - 'jump_to_friday' => 'Namiesto toho vytvoriť transakciu predošlý piatok', - 'jump_to_monday' => 'Namiesto toho vytvoriť transakciu predošlý pondelok', - 'will_jump_friday' => 'Vytvorí sa namiesto víkendu v piatok.', - 'will_jump_monday' => 'Vytvorí sa namiesto víkendu v pondelok.', - 'except_weekends' => 'Okrem víkendov', - 'recurrence_deleted' => 'Opakovaná transakcia ":title" bola odstránená', + 'create_new_recurrence' => 'Vytvoriť novú opakujúcu sa transakciu', + 'help_first_date' => 'Uveďte prvé očakávané opakovanie. Musí byť v budúcnosti.', + 'help_first_date_no_past' => 'Uveďte prvé očakávané opakovanie. Firefly III nevytvára transakcie v minulosti.', + 'no_currency' => '(žiadna mena)', + 'mandatory_for_recurring' => 'Nezbytné informace k opakovanosti', + 'mandatory_for_transaction' => 'Povinné informácie o transakcii', + 'optional_for_recurring' => 'Voliteľné informácie o opakovanosti', + 'optional_for_transaction' => 'Voliteľné informácie o transakcii', + 'change_date_other_options' => 'Pre zobrazenie ďalších možností zmeňte „prvý dátum“.', + 'mandatory_fields_for_tranaction' => 'Tieto hodnoty budú prevedené do vytvorených transakcií', + 'click_for_calendar' => 'Kliknite sem pre zobrazenie kalendára, ktorý vám ukáže, kedy sa transakcia bude opakovať.', + 'repeat_forever' => 'Opakovat donekonečna', + 'repeat_until_date' => 'Opakovat do dátumu', + 'repeat_times' => 'Zopakovat -krát', + 'recurring_skips_one' => 'Každý druhý', + 'recurring_skips_more' => 'Preskočí :count výskytov', + 'store_new_recurrence' => 'Uložiť opakovanú transakciu', + 'stored_new_recurrence' => 'Opakujúca sa transakcia „:title“ bola uložená.', + 'edit_recurrence' => 'Upraviť opakovanú transakciu „:title“', + 'recurring_repeats_until' => 'Opakuje sa do :date', + 'recurring_repeats_forever' => 'Opakuje sa navždy', + 'recurring_repeats_x_times' => 'Opakuje sa :count krát|Opakuje sa :count krát', + 'update_recurrence' => 'Upraviť opakujúcu sa transakciu', + 'updated_recurrence' => 'Opakovaná transakcia ":title" bola upravená', + 'recurrence_is_inactive' => 'Táto opakujúca sa transakcia nie je aktívna a nebude generovať nové transakcie.', + 'delete_recurring' => 'Odstrániť opakovanú transakciu „:title“', + 'new_recurring_transaction' => 'Nová opakujúca sa transakcia', + 'help_weekend' => 'Čo by mal Firefly III spraviť, keď opakovaná transakcia pripadne na sobotu alebo nedeľu?', + 'do_nothing' => 'Len vytvoriť transakciu', + 'skip_transaction' => 'Preskočit opakovanosť', + 'jump_to_friday' => 'Namiesto toho vytvoriť transakciu predošlý piatok', + 'jump_to_monday' => 'Namiesto toho vytvoriť transakciu predošlý pondelok', + 'will_jump_friday' => 'Vytvorí sa namiesto víkendu v piatok.', + 'will_jump_monday' => 'Vytvorí sa namiesto víkendu v pondelok.', + 'except_weekends' => 'Okrem víkendov', + 'recurrence_deleted' => 'Opakovaná transakcia ":title" bola odstránená', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Zostatok (:currency)', - 'box_spent_in_currency' => 'Utratené (:currency)', - 'box_earned_in_currency' => 'Zarobené (:currency)', - 'box_budgeted_in_currency' => 'Rozpočet (:currency)', - 'box_bill_paid_in_currency' => 'Uhradené účty (:currency)', - 'box_bill_unpaid_in_currency' => 'Neuhradené účty (:currency)', - 'box_left_to_spend_in_currency' => 'Zostáva k útrate (:currency)', - 'box_net_worth_in_currency' => 'Čisté imanie (:currency)', - 'box_spend_per_day' => 'Zostáva pre dennú útratu: :amount', + 'box_balance_in_currency' => 'Zostatok (:currency)', + 'box_spent_in_currency' => 'Utratené (:currency)', + 'box_earned_in_currency' => 'Zarobené (:currency)', + 'box_budgeted_in_currency' => 'Rozpočet (:currency)', + 'box_bill_paid_in_currency' => 'Uhradené účty (:currency)', + 'box_bill_unpaid_in_currency' => 'Neuhradené účty (:currency)', + 'box_left_to_spend_in_currency' => 'Zostáva k útrate (:currency)', + 'box_net_worth_in_currency' => 'Čisté imanie (:currency)', + 'box_spend_per_day' => 'Zostáva pre dennú útratu: :amount', // debug page - 'debug_page' => 'Stránka ladenia', - 'debug_submit_instructions' => 'Ak narazíte na problémy, môžete informácie z tohto poľa použiť ako ladiace informácie. Skopírujte a prilepte do nového alebo existujúceho hlásenia GitHub. Vygeneruje krásnu tabuľku, pomocou ktorej je možné rýchlo diagnostikovať váš problém.', - 'debug_pretty_table' => 'Ak skopírujete/prilepíte nižšie uvedené pole do vydania GitHub, vygeneruje sa tabuľka. Nepridávajte okolo tohto textu znaky ` ani úvodzovky.', - 'debug_additional_data' => 'Môžete tiež zdieľať obsah poľa nižšie. Môžete ich tiež skopírovať a vložiť do nového alebo existujúceho hlásenia GitHub. Obsah tohto poľa však môže obsahovať súkromné informácie, ako sú názvy účtov, podrobnosti transakcií alebo e-mailové adresy.', + 'debug_page' => 'Stránka ladenia', + 'debug_submit_instructions' => 'Ak narazíte na problémy, môžete informácie z tohto poľa použiť ako ladiace informácie. Skopírujte a prilepte do nového alebo existujúceho hlásenia GitHub. Vygeneruje krásnu tabuľku, pomocou ktorej je možné rýchlo diagnostikovať váš problém.', + 'debug_pretty_table' => 'Ak skopírujete/prilepíte nižšie uvedené pole do vydania GitHub, vygeneruje sa tabuľka. Nepridávajte okolo tohto textu znaky ` ani úvodzovky.', + 'debug_additional_data' => 'Môžete tiež zdieľať obsah poľa nižšie. Môžete ich tiež skopírovať a vložiť do nového alebo existujúceho hlásenia GitHub. Obsah tohto poľa však môže obsahovať súkromné informácie, ako sú názvy účtov, podrobnosti transakcií alebo e-mailové adresy.', // object groups - 'object_groups_menu_bar' => 'Skupiny', - 'object_groups_page_title' => 'Skupiny', - 'object_groups_breadcrumb' => 'Skupiny', - 'object_groups_index' => 'Prehľad', - 'object_groups' => 'Skupiny', - 'object_groups_empty_explain' => 'Niektoré veci vo Firefly III sa dajú rozdeliť do skupín. Napríklad pokladničky majú v obrazovkách úprav a vytvárania pole „Skupina“. Keď nastavíte toto pole, môžete na tejto stránke upravovať názvy a poradie skupín. Ďalšie informácie nájdete na stránkach pomocníka v pravom hornom rohu pod ikonou (?).', - 'object_group_title' => 'Názov', - 'edit_object_group' => 'Upraviť skupinu „:title“', - 'delete_object_group' => 'Odstrániť skupinu ":title"', - 'update_object_group' => 'Aktualizovať skupinu', - 'updated_object_group' => 'Skupina ":title" bola upravená', - 'deleted_object_group' => 'Skupina ":title" bola odstránená', - 'object_group' => 'Skupina', + 'object_groups_menu_bar' => 'Skupiny', + 'object_groups_page_title' => 'Skupiny', + 'object_groups_breadcrumb' => 'Skupiny', + 'object_groups_index' => 'Prehľad', + 'object_groups' => 'Skupiny', + 'object_groups_empty_explain' => 'Niektoré veci vo Firefly III sa dajú rozdeliť do skupín. Napríklad pokladničky majú v obrazovkách úprav a vytvárania pole „Skupina“. Keď nastavíte toto pole, môžete na tejto stránke upravovať názvy a poradie skupín. Ďalšie informácie nájdete na stránkach pomocníka v pravom hornom rohu pod ikonou (?).', + 'object_group_title' => 'Názov', + 'edit_object_group' => 'Upraviť skupinu „:title“', + 'delete_object_group' => 'Odstrániť skupinu ":title"', + 'update_object_group' => 'Aktualizovať skupinu', + 'updated_object_group' => 'Skupina ":title" bola upravená', + 'deleted_object_group' => 'Skupina ":title" bola odstránená', + 'object_group' => 'Skupina', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/sk_SK/form.php b/resources/lang/sk_SK/form.php index 1a83fe8b5e..df6c06481a 100644 --- a/resources/lang/sk_SK/form.php +++ b/resources/lang/sk_SK/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Názov banky', - 'bank_balance' => 'Zostatok', - 'savings_balance' => 'Zostatok úspor', - 'credit_card_limit' => 'Limit kreditnej karty', - 'automatch' => 'Hľadať zhodu automaticky', - 'skip' => 'Preskočiť', - 'enabled' => 'Zapnuté', - 'name' => 'Názov', - 'active' => 'Aktívne', - 'amount_min' => 'Minimálna suma', - 'amount_max' => 'Maximálna suma', - 'match' => 'Zhoda', - 'strict' => 'Striktný režim', - 'repeat_freq' => 'Opakuje sa', - 'object_group' => 'Skupina', - 'location' => 'Údaje o polohe', - 'update_channel' => 'Kanál aktualizácií', - 'currency_id' => 'Mena', - 'transaction_currency_id' => 'Mena', - 'auto_budget_currency_id' => 'Mena', - 'external_ip' => 'Externá IP adresa vášho serveru', - 'attachments' => 'Prílohy', - 'BIC' => 'BIC', - 'verify_password' => 'Overiť bezpečnosť hesla', - 'source_account' => 'Zdrojový účet', - 'destination_account' => 'Cieľový účet', - 'asset_destination_account' => 'Cieľový účet', - 'include_net_worth' => 'Zahrnúť do čistého majetku', - 'asset_source_account' => 'Zdrojový účet', - 'journal_description' => 'Popis', - 'note' => 'Poznámky', - 'currency' => 'Mena', - 'account_id' => 'Účet aktív', - 'budget_id' => 'Rozpočet', - 'bill_id' => 'Bill', - 'opening_balance' => 'Počiatočný zostatok', - 'tagMode' => 'Režim štítku', - 'virtual_balance' => 'Virtuálnu zostatok', + 'bank_name' => 'Názov banky', + 'bank_balance' => 'Zostatok', + 'savings_balance' => 'Zostatok úspor', + 'credit_card_limit' => 'Limit kreditnej karty', + 'automatch' => 'Hľadať zhodu automaticky', + 'skip' => 'Preskočiť', + 'enabled' => 'Zapnuté', + 'name' => 'Názov', + 'active' => 'Aktívne', + 'amount_min' => 'Minimálna suma', + 'amount_max' => 'Maximálna suma', + 'match' => 'Zhoda', + 'strict' => 'Striktný režim', + 'repeat_freq' => 'Opakuje sa', + 'object_group' => 'Skupina', + 'location' => 'Údaje o polohe', + 'update_channel' => 'Kanál aktualizácií', + 'currency_id' => 'Mena', + 'transaction_currency_id' => 'Mena', + 'auto_budget_currency_id' => 'Mena', + 'external_ip' => 'Externá IP adresa vášho serveru', + 'attachments' => 'Prílohy', + 'BIC' => 'BIC', + 'verify_password' => 'Overiť bezpečnosť hesla', + 'source_account' => 'Zdrojový účet', + 'destination_account' => 'Cieľový účet', + 'asset_destination_account' => 'Cieľový účet', + 'include_net_worth' => 'Zahrnúť do čistého majetku', + 'asset_source_account' => 'Zdrojový účet', + 'journal_description' => 'Popis', + 'note' => 'Poznámky', + 'currency' => 'Mena', + 'account_id' => 'Účet aktív', + 'budget_id' => 'Rozpočet', + 'bill_id' => 'Bill', + 'opening_balance' => 'Počiatočný zostatok', + 'tagMode' => 'Režim štítku', + 'virtual_balance' => 'Virtuálnu zostatok', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Cieľová suma', 'account_role' => 'Rola účtu', 'opening_balance_date' => 'Dátum počiatočného zostatku', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Skutočne chcete odstrániť transakciu popísanú ":description"?', 'mass_journal_are_you_sure' => 'Skutočne chcete odstrániť tieto transakcie?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Skutočne chcete odstrániť značku ":tag"?', 'journal_link_areYouSure' => 'Skutočne chcete odstrániť previazanie medzi :source a :destination?', 'linkType_areYouSure' => 'Skutočne chcete odstrániť previazanie typu ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Skladba', - // admin 'domain' => 'Doména', 'single_user_mode' => 'Vypnúť možnosť registrácie použivateľov', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS účet', 'local_account' => 'Účet Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Od dátumu', - 'to_date' => 'Do dátumu', - 'due_date' => 'Dátum splatnosti', - 'payment_date' => 'Dátum úhrady', - 'invoice_date' => 'Dátum vystavenia', - 'internal_reference' => 'Interná referencia', - 'inward' => 'Príchodzí popis', - 'outward' => 'Odchádzajúci popis', - 'rule_group_id' => 'Skupina pravidiel', - 'transaction_description' => 'Popis transakcie', - 'first_date' => 'Prvý dátum', - 'transaction_type' => 'Typ transakcie', - 'repeat_until' => 'Opakovať do', - 'recurring_description' => 'Popis opakujúcej sa transakcie', - 'repetition_type' => 'Typ opakovania', - 'foreign_currency_id' => 'Zahraničná mena', - 'repetition_end' => 'Opakovanie končí', - 'repetitions' => 'Opakovaní', - 'calendar' => 'Kalendár', - 'weekend' => 'Víkend', - 'client_secret' => 'Tajný kľúč klienta', - 'withdrawal_destination_id' => 'Cieľový účet', - 'deposit_source_id' => 'Zdrojový účet', - 'expected_on' => 'Očakávané', - 'paid' => 'Uhradené', - 'auto_budget_type' => 'Auto-rozpočet', - 'auto_budget_amount' => 'Suma auto-rozpočtu', - 'auto_budget_period' => 'Obdobie automatického rozpočtu', - 'collected' => 'Zozbierané', - 'submitted' => 'Odoslané', - 'key' => 'Kľúč', - 'value' => 'Obsah záznamu', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Od dátumu', + 'to_date' => 'Do dátumu', + 'due_date' => 'Dátum splatnosti', + 'payment_date' => 'Dátum úhrady', + 'invoice_date' => 'Dátum vystavenia', + 'internal_reference' => 'Interná referencia', + 'inward' => 'Príchodzí popis', + 'outward' => 'Odchádzajúci popis', + 'rule_group_id' => 'Skupina pravidiel', + 'transaction_description' => 'Popis transakcie', + 'first_date' => 'Prvý dátum', + 'transaction_type' => 'Typ transakcie', + 'repeat_until' => 'Opakovať do', + 'recurring_description' => 'Popis opakujúcej sa transakcie', + 'repetition_type' => 'Typ opakovania', + 'foreign_currency_id' => 'Zahraničná mena', + 'repetition_end' => 'Opakovanie končí', + 'repetitions' => 'Opakovaní', + 'calendar' => 'Kalendár', + 'weekend' => 'Víkend', + 'client_secret' => 'Tajný kľúč klienta', + 'withdrawal_destination_id' => 'Cieľový účet', + 'deposit_source_id' => 'Zdrojový účet', + 'expected_on' => 'Očakávané', + 'paid' => 'Uhradené', + 'auto_budget_type' => 'Auto-rozpočet', + 'auto_budget_amount' => 'Suma auto-rozpočtu', + 'auto_budget_period' => 'Obdobie automatického rozpočtu', + 'collected' => 'Zozbierané', + 'submitted' => 'Odoslané', + 'key' => 'Kľúč', + 'value' => 'Obsah záznamu', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/sk_SK/intro.php b/resources/lang/sk_SK/intro.php index 173b455e66..882b5aa624 100644 --- a/resources/lang/sk_SK/intro.php +++ b/resources/lang/sk_SK/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Vitajte na titulnej stránke Firefly III. Venujte čas tomuto úvodu, aby ste se dozvedeli, ako Firefly III funguje.', - 'index_accounts-chart' => 'Tento graf zobrazuje aktuálne zostatky vašich majetkových účtov. Aké účty se tu majú zobrazovať, je možné nastaviť v predvoľbách.', - 'index_box_out_holder' => 'Táto malá oblasť a ďalšie vedľa podávajú rýchly prehľad vašej finančnej situácie.', - 'index_help' => 'Ak budete potrebovať pomoc k stránke alebo formuláru, kliknite na toto tlačítko.', - 'index_outro' => 'Väčina stránok Firefly III začína krátkou prehliadkou, ako je táto. Obraťte se na mňa, ak máte otázky alebo komentáre. Nech vám slúži!', - 'index_sidebar-toggle' => 'Na vytváranie nových transakcií, účtov a ostatných položiek, použite ponuku pod touto ikonou.', - 'index_cash_account' => 'Toto sú doteraz vytvorené účty. Hotovostný účet môžete použiť pre sledovanie výdajov v hotovosti, ale nie je to, pochopiteľne, povinné.', + 'index_intro' => 'Vitajte na titulnej stránke Firefly III. Venujte čas tomuto úvodu, aby ste se dozvedeli, ako Firefly III funguje.', + 'index_accounts-chart' => 'Tento graf zobrazuje aktuálne zostatky vašich majetkových účtov. Aké účty se tu majú zobrazovať, je možné nastaviť v predvoľbách.', + 'index_box_out_holder' => 'Táto malá oblasť a ďalšie vedľa podávajú rýchly prehľad vašej finančnej situácie.', + 'index_help' => 'Ak budete potrebovať pomoc k stránke alebo formuláru, kliknite na toto tlačítko.', + 'index_outro' => 'Väčina stránok Firefly III začína krátkou prehliadkou, ako je táto. Obraťte se na mňa, ak máte otázky alebo komentáre. Nech vám slúži!', + 'index_sidebar-toggle' => 'Na vytváranie nových transakcií, účtov a ostatných položiek, použite ponuku pod touto ikonou.', + 'index_cash_account' => 'Toto sú doteraz vytvorené účty. Hotovostný účet môžete použiť pre sledovanie výdajov v hotovosti, ale nie je to, pochopiteľne, povinné.', // transactions - 'transactions_create_basic_info' => 'Zadajte základné informácie o transakcii. Zdroj, cieľ, dátum a popis.', - 'transactions_create_amount_info' => 'Zadajte sumu transakcie. Ak je to potrebné, polia sa automaticky aktualizujú pre informácie o cudzej mene.', - 'transactions_create_optional_info' => 'Tieto polia sú nepovinné. Pridaním ďalších metadát zlepšíte organizáciu vašich transakcií.', - 'transactions_create_split' => 'Ak chcete rozdeliť transakciu, týmto tlačítkom vykonáte rozdelenie', + 'transactions_create_basic_info' => 'Zadajte základné informácie o transakcii. Zdroj, cieľ, dátum a popis.', + 'transactions_create_amount_info' => 'Zadajte sumu transakcie. Ak je to potrebné, polia sa automaticky aktualizujú pre informácie o cudzej mene.', + 'transactions_create_optional_info' => 'Tieto polia sú nepovinné. Pridaním ďalších metadát zlepšíte organizáciu vašich transakcií.', + 'transactions_create_split' => 'Ak chcete rozdeliť transakciu, týmto tlačítkom vykonáte rozdelenie', // create account: - 'accounts_create_iban' => 'Uveďte pre svoje účty platný IBAN identifikátor. V budúcnosti by to mohlo veľmi uľahčiť import dát.', - 'accounts_create_asset_opening_balance' => 'Majetkové účty môžu mať „počiatočný zostatok" označujúcí začiatok histórie tohoto účtu vo Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III podporuje viacero mien. Majetkové účty majú jednu hlavnú menu, ktorú je potrebné tu nastaviť.', - 'accounts_create_asset_virtual' => 'Niekedy sa môže hodiť dať svojmu účtu virtuálny zostatok: extra sumu, vždy pripočítanú alebo odrátanú od aktuálneho zostatku.', + 'accounts_create_iban' => 'Uveďte pre svoje účty platný IBAN identifikátor. V budúcnosti by to mohlo veľmi uľahčiť import dát.', + 'accounts_create_asset_opening_balance' => 'Majetkové účty môžu mať „počiatočný zostatok" označujúcí začiatok histórie tohoto účtu vo Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III podporuje viacero mien. Majetkové účty majú jednu hlavnú menu, ktorú je potrebné tu nastaviť.', + 'accounts_create_asset_virtual' => 'Niekedy sa môže hodiť dať svojmu účtu virtuálny zostatok: extra sumu, vždy pripočítanú alebo odrátanú od aktuálneho zostatku.', // budgets index - 'budgets_index_intro' => 'Rozpočty slúžia na správu vašich financií a tvoria jednu z hlavných funkcií Firefly III.', - 'budgets_index_set_budget' => 'Nastavte celkový rozpočet pre každé z období a Firefly III vám povie, ak ste vyčerpali všetky dostupné peniaze.', - 'budgets_index_see_expenses_bar' => 'Utratené peniaze budou postupne plniť tento pruh.', - 'budgets_index_navigate_periods' => 'Prechádzajte obdobiami a jednoducho nastavujte rozpočty vopred.', - 'budgets_index_new_budget' => 'Vytvárajte nové rozpočty ako uznáte za vhodné.', - 'budgets_index_list_of_budgets' => 'Používajte túto tabuľku pre nastavenie súm pre každý rozpočet a zistite, ako ste na tom s financiami.', - 'budgets_index_outro' => 'Ak se chcete dozvedieť viac o tvorbe rozpočtov, kliknite na ikonu pomocníka v pravom hornom rohu.', + 'budgets_index_intro' => 'Rozpočty slúžia na správu vašich financií a tvoria jednu z hlavných funkcií Firefly III.', + 'budgets_index_see_expenses_bar' => 'Utratené peniaze budou postupne plniť tento pruh.', + 'budgets_index_navigate_periods' => 'Prechádzajte obdobiami a jednoducho nastavujte rozpočty vopred.', + 'budgets_index_new_budget' => 'Vytvárajte nové rozpočty ako uznáte za vhodné.', + 'budgets_index_list_of_budgets' => 'Používajte túto tabuľku pre nastavenie súm pre každý rozpočet a zistite, ako ste na tom s financiami.', + 'budgets_index_outro' => 'Ak se chcete dozvedieť viac o tvorbe rozpočtov, kliknite na ikonu pomocníka v pravom hornom rohu.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'S pomocou týchto prehľadov získate podrobné informácie o svojich financiách.', - 'reports_index_inputReportType' => 'Vyberte typ prehľadu. Pozrite sa na stránky pomocníka a zistite, čo vám každý prehľad ukáže.', - 'reports_index_inputAccountsSelect' => 'Môžete zahŕňať, alebo vynechávať majetkové účty, ako potrebujete.', - 'reports_index_inputDateRange' => 'Vybrané časové obdobie je plne na vás: od jedného dňa po 10 rokov.', - 'reports_index_extra-options-box' => 'Podľa toho, aký výkaz ste vybrali, je tu možné vybrať ďalšie filtre a voľby. Pri zmene typu výkazu sledujte túto oblasť.', + 'reports_index_intro' => 'S pomocou týchto prehľadov získate podrobné informácie o svojich financiách.', + 'reports_index_inputReportType' => 'Vyberte typ prehľadu. Pozrite sa na stránky pomocníka a zistite, čo vám každý prehľad ukáže.', + 'reports_index_inputAccountsSelect' => 'Môžete zahŕňať, alebo vynechávať majetkové účty, ako potrebujete.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Podľa toho, aký výkaz ste vybrali, je tu možné vybrať ďalšie filtre a voľby. Pri zmene typu výkazu sledujte túto oblasť.', // reports (reports) - 'reports_report_default_intro' => 'Tento výkaz vám podá rýchly a podrobný prehľad vašich financií. Ak chcete vidieť niečo iné, neváhajte se na mňa obrátiť!', - 'reports_report_audit_intro' => 'Tento výkaz vám podá podrobný prehľad vašich majetkových účtov.', - 'reports_report_audit_optionsBox' => 'Pomocou týchto zaškrtávacích políčiek zobrazujte alebo skrývajte stĺpce, které vás (ne)zaujímajú.', + 'reports_report_default_intro' => 'Tento výkaz vám podá rýchly a podrobný prehľad vašich financií. Ak chcete vidieť niečo iné, neváhajte se na mňa obrátiť!', + 'reports_report_audit_intro' => 'Tento výkaz vám podá podrobný prehľad vašich majetkových účtov.', + 'reports_report_audit_optionsBox' => 'Pomocou týchto zaškrtávacích políčiek zobrazujte alebo skrývajte stĺpce, které vás (ne)zaujímajú.', - 'reports_report_category_intro' => 'Tato zostava vám podá prehľad v jednej alebo viacerých kategóriách.', - 'reports_report_category_pieCharts' => 'Tieto grafy vám podajú prehľad výdajov a príjmov pre jednotlivé kategórie alebo účty.', - 'reports_report_category_incomeAndExpensesChart' => 'Tento graf zobrazuje vaše náklady a príjmy v jednotlivých kategóriách.', + 'reports_report_category_intro' => 'Tato zostava vám podá prehľad v jednej alebo viacerých kategóriách.', + 'reports_report_category_pieCharts' => 'Tieto grafy vám podajú prehľad výdajov a príjmov pre jednotlivé kategórie alebo účty.', + 'reports_report_category_incomeAndExpensesChart' => 'Tento graf zobrazuje vaše náklady a príjmy v jednotlivých kategóriách.', - 'reports_report_tag_intro' => 'Táto zostava vám podáva prehľad jedného alebo viacerých štítkov.', - 'reports_report_tag_pieCharts' => 'Tieto grafy vám podávajú prehľad nákladov a príjmov pre jednotlivé štítky, účty, kategórie alebo rozpočty.', - 'reports_report_tag_incomeAndExpensesChart' => 'Tento graf zobrazuje vaše výdaje a príjmy pre každý štítok.', + 'reports_report_tag_intro' => 'Táto zostava vám podáva prehľad jedného alebo viacerých štítkov.', + 'reports_report_tag_pieCharts' => 'Tieto grafy vám podávajú prehľad nákladov a príjmov pre jednotlivé štítky, účty, kategórie alebo rozpočty.', + 'reports_report_tag_incomeAndExpensesChart' => 'Tento graf zobrazuje vaše výdaje a príjmy pre každý štítok.', 'reports_report_budget_intro' => 'Táto zostava vám podáva prehľad jedného alebo viacerých rozpočtov.', 'reports_report_budget_pieCharts' => 'Tieto grafy vám podávajú prehľad výdajov pro jednotlivé rozpočty alebo účty.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Vedľa tohto ukazovateľa postupu sa nachádzajú dve tlačítka (+ a -) pre pridanie alebo odobranie peňazí z každej z pokladničiek.', 'piggy-banks_index_accountStatus' => 'Pre každý majetkový účet s aspoň jednou pokladničkou je v tejto tabuľke vypísaný stav.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Čo je vašim cieľom? Nová pohovka, fotoaparát, rezerva pre nečekané výdaje?', 'piggy-banks_create_date' => 'Pre pokladničku je možné nastaviť cieľový dátum alebo termín.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Účty používajte pre sledovanie súm, ktoré máte v každom z období zaplatiť. Jedná sa o výdaje jako nájomné, poistenie alebo splátky hypotéky.', 'bills_create_name' => 'Zadajte výstižný názov, ako „Nájomné“ alebo „Životné poistenie“.', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Vyberte najnižšiu a najvyššiu sumu pre tento účet.', 'bills_create_repeat_freq_holder' => 'Väčšina platieb se opakuje mesačne, ale je možné nastaviť aj inú frekvenciu.', 'bills_create_skip_holder' => 'Ak sa platba opakuje každé dva týždne, políčko „preskočit“ by malo byť nastavené na „1“, aby byl vynechaný každý druhý týždeň.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Toto tlačidlo slúži na zobrazenie transakcií, ktoré zodpovedajú pravidlu.', 'rules_create_actions' => 'Nastavte toľko akcií, koľko potrebujete.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Ďalšie možnosti sú k dispozícii v kartách.', diff --git a/resources/lang/sk_SK/list.php b/resources/lang/sk_SK/list.php index 33fa45a559..faff8d1512 100644 --- a/resources/lang/sk_SK/list.php +++ b/resources/lang/sk_SK/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Tlačítka', - 'icon' => 'Ikona', - 'id' => 'Číslo [ID]', - 'create_date' => 'Vytvorené', - 'update_date' => 'Aktualizované', - 'updated_at' => 'Aktualizované', - 'balance_before' => 'Zostatok pred', - 'balance_after' => 'Zostatok po', - 'name' => 'Meno/Názov', - 'role' => 'Rola', - 'currentBalance' => 'Aktuálny zostatok', - 'linked_to_rules' => 'Príslušné pravidlá', - 'active' => 'Aktívne?', - 'percentage' => 'perc.', - 'recurring_transaction' => 'Opakované transakcie', - 'next_due' => 'Nasledujúca splatnosť', - 'transaction_type' => 'Typ', - 'lastActivity' => 'Posledná aktivita', - 'balanceDiff' => 'Rozdiel zostatku', - 'other_meta_data' => 'Ostatné metadata', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Typ účtu', - 'created_at' => 'Vytvorené', - 'account' => 'Účet', - 'external_url' => 'External URL', - 'matchingAmount' => 'Suma', - 'destination' => 'Cieľ', - 'source' => 'Zdroj', - 'next_expected_match' => 'Ďalšia očakávaná zhoda', - 'automatch' => 'Automatické hľadanie zhody?', + 'buttons' => 'Tlačítka', + 'icon' => 'Ikona', + 'id' => 'Číslo [ID]', + 'create_date' => 'Vytvorené', + 'update_date' => 'Aktualizované', + 'updated_at' => 'Aktualizované', + 'balance_before' => 'Zostatok pred', + 'balance_after' => 'Zostatok po', + 'name' => 'Meno/Názov', + 'role' => 'Rola', + 'currentBalance' => 'Aktuálny zostatok', + 'linked_to_rules' => 'Príslušné pravidlá', + 'active' => 'Aktívne?', + 'percentage' => 'perc.', + 'recurring_transaction' => 'Opakované transakcie', + 'next_due' => 'Nasledujúca splatnosť', + 'transaction_type' => 'Typ', + 'lastActivity' => 'Posledná aktivita', + 'balanceDiff' => 'Rozdiel zostatku', + 'other_meta_data' => 'Ostatné metadata', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => 'Typ účtu', + 'created_at' => 'Vytvorené', + 'account' => 'Účet', + 'external_url' => 'External URL', + 'matchingAmount' => 'Suma', + 'destination' => 'Cieľ', + 'source' => 'Zdroj', + 'next_expected_match' => 'Ďalšia očakávaná zhoda', + 'automatch' => 'Automatické hľadanie zhody?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Opakuje sa', 'description' => 'Popis', 'amount' => 'Suma', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Účet s bunq', 'file_name' => 'Název souboru', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Veľkosť súboru', - 'file_type' => 'Typ súboru', - 'attached_to' => 'Pripojené k', - 'file_exists' => 'Súbor existuje', - 'spectre_bank' => 'Banka', - 'spectre_last_use' => 'Posledné prihlásenie', - 'spectre_status' => 'Stav', - 'bunq_payment_id' => 'ID platby bunq', - 'repetitions' => 'Opakovaní', - 'title' => 'Názov', - 'transaction_s' => 'Transakcie', - 'field' => 'Pole', - 'value' => 'Hodnota', - 'interest' => 'Úrok', - 'interest_period' => 'Interest period', - 'liability_type' => 'Typ záväzku', - 'liability_direction' => 'Liability in/out', - 'end_date' => 'End date', - 'payment_info' => 'Payment information', - 'expected_info' => 'Next expected transaction', - 'start_date' => 'Start date', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Veľkosť súboru', + 'file_type' => 'Typ súboru', + 'attached_to' => 'Pripojené k', + 'file_exists' => 'Súbor existuje', + 'spectre_bank' => 'Banka', + 'spectre_last_use' => 'Posledné prihlásenie', + 'spectre_status' => 'Stav', + 'bunq_payment_id' => 'ID platby bunq', + 'repetitions' => 'Opakovaní', + 'title' => 'Názov', + 'transaction_s' => 'Transakcie', + 'field' => 'Pole', + 'value' => 'Hodnota', + 'interest' => 'Úrok', + 'interest_period' => 'Interest period', + 'liability_type' => 'Typ záväzku', + 'liability_direction' => 'Liability in/out', + 'end_date' => 'End date', + 'payment_info' => 'Payment information', + 'expected_info' => 'Next expected transaction', + 'start_date' => 'Start date', + 'trigger' => 'Trigger', + 'response' => 'Response', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/sk_SK/pagination.php b/resources/lang/sk_SK/pagination.php index 5dc6a0539e..26cd7444b2 100644 --- a/resources/lang/sk_SK/pagination.php +++ b/resources/lang/sk_SK/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/sk_SK/passwords.php b/resources/lang/sk_SK/passwords.php index c401f477f2..6f3a9c938d 100644 --- a/resources/lang/sk_SK/passwords.php +++ b/resources/lang/sk_SK/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/sk_SK/rules.php b/resources/lang/sk_SK/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/sk_SK/rules.php +++ b/resources/lang/sk_SK/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/sk_SK/validation.php b/resources/lang/sk_SK/validation.php index b4f52e2465..0d3c1a5930 100644 --- a/resources/lang/sk_SK/validation.php +++ b/resources/lang/sk_SK/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'Toto nie je platný IBAN.', - 'zero_or_more' => 'Hodnota nemôže byť záporná.', - 'date_or_time' => 'Je třeba, aby hodnota byla platné datum nebo čas (ve formátu dle normy ISO 8601).', - 'source_equals_destination' => 'Zdrojový účet je zároveň cieľový.', - 'unique_account_number_for_user' => 'Zdá sa, že toto číslo účtu sa už používa.', - 'unique_iban_for_user' => 'Vyzerá to tak, že tento IBAN kód sa už používa.', - 'deleted_user' => 'Z bezpečnostných dôvodov pre registráciu nemôžete použiť túto emailovú adresu.', - 'rule_trigger_value' => 'Táto hodnota je pre označený spúšťač neplatná.', - 'rule_action_value' => 'Táto hodnota je pre vybranú akciu neplatná.', - 'file_already_attached' => 'Nahraný soubor ":name" je už k tomuto objektu pripojený.', - 'file_attached' => 'Soubor „:name“ úspěšně nahrán.', - 'must_exist' => 'Identifikátor v poli :attribute v databáze neexistuje.', - 'all_accounts_equal' => 'Všetky účty v tomto poli musia byť zhodné.', - 'group_title_mandatory' => 'Ak je tu viac než jedna transakcia, je potrebné vyplniť názov skupiny.', - 'transaction_types_equal' => 'Všetky rozdelenia musia mať zhodný typ.', - 'invalid_transaction_type' => 'Neplatný typ transakcie.', - 'invalid_selection' => 'Váš výber je neplatný.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Potrebujete aspoň jednu transakciu.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Potrebujete aspoň jedno opakovanie.', - 'require_repeat_until' => 'Vyžaduje buď niekoľko opakovaní alebo dátum ukončenia (repeat_until). Ne obidve.', - 'require_currency_info' => 'Obsah tohto poľa je bez informácií o mene neplatný.', - 'not_transfer_account' => 'Tento účet nie je účet, ktorý je možné použiť pre prevody.', - 'require_currency_amount' => 'Obsah tohto poľa je bez informácie o cudzej mene neplatný.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Popis transakcie nesmie byť rovnaký ako globálny popis.', - 'file_invalid_mime' => 'Súbor ":name" je typu ":mime", ktorý nie je pre nahrávanie schválený.', - 'file_too_large' => 'Súbor ":name" je príliš veľký.', - 'belongs_to_user' => 'Hodnota :attribute nie je známa.', - 'accepted' => 'Atribút :attribute je potrebné potvrdiť.', - 'bic' => 'Toto nie je platný BIC.', - 'at_least_one_trigger' => 'Pravidlo musí mať aspoň jeden spúšťač.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'Pravidlo musí obsahovať aspoň jednu akciu.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'Údaje nie sú v platnom kódovaní Base64.', - 'model_id_invalid' => 'Zdá sa, že dané ID je pre tento model neplatné.', - 'less' => ':attribute musí byť menej než 10.000.000', - 'active_url' => ':attribute nie je platná adresa URL.', - 'after' => ':attribute musí byť neskôr, než :date.', - 'date_after' => 'Počiatočný dátum musí byť starší, než konečný dátum.', - 'alpha' => ':attribute môže obsahovať len písmená.', - 'alpha_dash' => ':attribute môže obsahovať len písmená, čísla a pomlčky.', - 'alpha_num' => ':attribute môže obsahovať len písmená a čísla.', - 'array' => ':attribute musí byť pole.', - 'unique_for_user' => 'Položka s týmto :attribute už existuje.', - 'before' => ':attribute musí byť skôr než :date.', - 'unique_object_for_user' => 'Tento názov sa už používa.', - 'unique_account_for_user' => 'Tento názov účtu je už použitý.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => 'Toto nie je platný IBAN.', + 'zero_or_more' => 'Hodnota nemôže byť záporná.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Je třeba, aby hodnota byla platné datum nebo čas (ve formátu dle normy ISO 8601).', + 'source_equals_destination' => 'Zdrojový účet je zároveň cieľový.', + 'unique_account_number_for_user' => 'Zdá sa, že toto číslo účtu sa už používa.', + 'unique_iban_for_user' => 'Vyzerá to tak, že tento IBAN kód sa už používa.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Z bezpečnostných dôvodov pre registráciu nemôžete použiť túto emailovú adresu.', + 'rule_trigger_value' => 'Táto hodnota je pre označený spúšťač neplatná.', + 'rule_action_value' => 'Táto hodnota je pre vybranú akciu neplatná.', + 'file_already_attached' => 'Nahraný soubor ":name" je už k tomuto objektu pripojený.', + 'file_attached' => 'Soubor „:name“ úspěšně nahrán.', + 'must_exist' => 'Identifikátor v poli :attribute v databáze neexistuje.', + 'all_accounts_equal' => 'Všetky účty v tomto poli musia byť zhodné.', + 'group_title_mandatory' => 'Ak je tu viac než jedna transakcia, je potrebné vyplniť názov skupiny.', + 'transaction_types_equal' => 'Všetky rozdelenia musia mať zhodný typ.', + 'invalid_transaction_type' => 'Neplatný typ transakcie.', + 'invalid_selection' => 'Váš výber je neplatný.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Potrebujete aspoň jednu transakciu.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Potrebujete aspoň jedno opakovanie.', + 'require_repeat_until' => 'Vyžaduje buď niekoľko opakovaní alebo dátum ukončenia (repeat_until). Ne obidve.', + 'require_currency_info' => 'Obsah tohto poľa je bez informácií o mene neplatný.', + 'not_transfer_account' => 'Tento účet nie je účet, ktorý je možné použiť pre prevody.', + 'require_currency_amount' => 'Obsah tohto poľa je bez informácie o cudzej mene neplatný.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'Popis transakcie nesmie byť rovnaký ako globálny popis.', + 'file_invalid_mime' => 'Súbor ":name" je typu ":mime", ktorý nie je pre nahrávanie schválený.', + 'file_too_large' => 'Súbor ":name" je príliš veľký.', + 'belongs_to_user' => 'Hodnota :attribute nie je známa.', + 'accepted' => 'Atribút :attribute je potrebné potvrdiť.', + 'bic' => 'Toto nie je platný BIC.', + 'at_least_one_trigger' => 'Pravidlo musí mať aspoň jeden spúšťač.', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => 'Pravidlo musí obsahovať aspoň jednu akciu.', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => 'Údaje nie sú v platnom kódovaní Base64.', + 'model_id_invalid' => 'Zdá sa, že dané ID je pre tento model neplatné.', + 'less' => ':attribute musí byť menej než 10.000.000', + 'active_url' => ':attribute nie je platná adresa URL.', + 'after' => ':attribute musí byť neskôr, než :date.', + 'date_after' => 'Počiatočný dátum musí byť starší, než konečný dátum.', + 'alpha' => ':attribute môže obsahovať len písmená.', + 'alpha_dash' => ':attribute môže obsahovať len písmená, čísla a pomlčky.', + 'alpha_num' => ':attribute môže obsahovať len písmená a čísla.', + 'array' => ':attribute musí byť pole.', + 'unique_for_user' => 'Položka s týmto :attribute už existuje.', + 'before' => ':attribute musí byť skôr než :date.', + 'unique_object_for_user' => 'Tento názov sa už používa.', + 'unique_account_for_user' => 'Tento názov účtu je už použitý.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute musí byť v rozsahu :min a :max.', + 'between.file' => ':attribute musí byť v rozsahu :min a :max kilobajtov.', + 'between.string' => ':attribute musí mať dĺžku v rozsahu :min a :max znakov.', + 'between.array' => ':attribute musí mať medzi :min a :max položkami.', + 'boolean' => ':attribute musí mať hodnotu pravda alebo nepravda.', + 'confirmed' => 'Potvrdenie :attribute sa nezhoduje.', + 'date' => ':attribute nie je platný dátum.', + 'date_format' => ':attribute nezodpovedá formátu :format.', + 'different' => ':attribute a :other sa musia líšiť.', + 'digits' => ':attribute musí obsahovať :digits číslic.', + 'digits_between' => ':attribute musí byť v rozsahu :min a :max číslic.', + 'email' => ':attribute musí byť platná e-mailová adresa.', + 'filled' => 'Pole :attribute nesmie byť prázdne.', + 'exists' => 'Vybraný :attribute je neplatný.', + 'image' => ':attribute musí byť obrázok.', + 'in' => 'Vybraný :attribute je neplatný.', + 'integer' => ':attribute musí byť celé číslo.', + 'ip' => ':attribute musí byť platná IP adresa.', + 'json' => ':attribute musí byť platný JSON reťazec.', + 'max.numeric' => ':attribute nesmie byť viac než :max.', + 'max.file' => ':attribute nesmie byť viac než :max kilobajtov.', + 'max.string' => ':attribute nesmie byť viac než :max znakov.', + 'max.array' => ':attribute nesmie obsahovať viac než :max položiek.', + 'mimes' => ':attribute musí byť súbor typu: :values.', + 'min.numeric' => ':attribute musí byť minimálne :min.', + 'lte.numeric' => ':attribute musí byť nižší alebo rovný :value.', + 'min.file' => ':attribute musí byť minimálne :min kilobajtov.', + 'min.string' => ':attribute musí mať minimálne :min znakov.', + 'min.array' => ':attribute musí obsahovať minimálne :min položiek.', + 'not_in' => 'Vybraný :attribute je neplatný.', + 'numeric' => ':attribute musí byť číslo.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Suma v hlavnej mene musí byť číslo.', + 'numeric_destination' => 'Cieľová suma musí byť číslo.', + 'numeric_source' => 'Zdrojová suma musí byť číslo.', + 'regex' => 'Formát :attribute je neplatný.', + 'required' => 'Pole :attribute je povinné.', + 'required_if' => ':attribute je povinné, ak :other je :value.', + 'required_unless' => ':attribute je povinné, ak :other nie je :values.', + 'required_with' => ':attribute je povinné, ak sú zvolené :values.', + 'required_with_all' => ':attribute je povinné, ak sú zvolené :values.', + 'required_without' => ':attribute je povinné, ak nie sú zvolené :values.', + 'required_without_all' => ':attribute je povinné, ak nie sú zvolené :values.', + 'same' => ':attribute a :other musia byť zhodné.', + 'size.numeric' => ':attribute musí byť :size.', + 'amount_min_over_max' => 'Minimálna suma nemôže byť vyššia než maximálna suma.', + 'size.file' => ':attribute musí mať :size kilobajtov.', + 'size.string' => ':attribute musí mať :size znakov.', + 'size.array' => ':attribute musí obsahovať :size položiek.', + 'unique' => ':attribute už existuje.', + 'string' => ':attribute byť reťazec.', + 'url' => 'Formát :attribute je neplatný.', + 'timezone' => ':attribute musí byť platná zóna.', + '2fa_code' => 'Pole :attribute je neplatné.', + 'dimensions' => ':attribute má neplatné rozmery obrázku.', + 'distinct' => 'Pole :attribute má duplicitnú hodnotu.', + 'file' => ':attribute musí byť súbor.', + 'in_array' => 'Pole :attribute v :other neexistuje.', + 'present' => 'Pole :attribute musí byť prítomné.', + 'amount_zero' => 'Celková suma nesmie byť nula.', + 'current_target_amount' => 'Aktuálna suma musí být menšia, než cieľová suma.', + 'unique_piggy_bank_for_user' => 'Názov pokladničky musí byť jedinečný.', + 'unique_object_group' => 'Názov skupiny musí byť jedinečný', + 'starts_with' => 'Hodnota musí začínať :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Oba účty musia mať rovnaký typ', + 'same_account_currency' => 'Oba účty musia mať rovnakú menu', - 'between.numeric' => ':attribute musí byť v rozsahu :min a :max.', - 'between.file' => ':attribute musí byť v rozsahu :min a :max kilobajtov.', - 'between.string' => ':attribute musí mať dĺžku v rozsahu :min a :max znakov.', - 'between.array' => ':attribute musí mať medzi :min a :max položkami.', - 'boolean' => ':attribute musí mať hodnotu pravda alebo nepravda.', - 'confirmed' => 'Potvrdenie :attribute sa nezhoduje.', - 'date' => ':attribute nie je platný dátum.', - 'date_format' => ':attribute nezodpovedá formátu :format.', - 'different' => ':attribute a :other sa musia líšiť.', - 'digits' => ':attribute musí obsahovať :digits číslic.', - 'digits_between' => ':attribute musí byť v rozsahu :min a :max číslic.', - 'email' => ':attribute musí byť platná e-mailová adresa.', - 'filled' => 'Pole :attribute nesmie byť prázdne.', - 'exists' => 'Vybraný :attribute je neplatný.', - 'image' => ':attribute musí byť obrázok.', - 'in' => 'Vybraný :attribute je neplatný.', - 'integer' => ':attribute musí byť celé číslo.', - 'ip' => ':attribute musí byť platná IP adresa.', - 'json' => ':attribute musí byť platný JSON reťazec.', - 'max.numeric' => ':attribute nesmie byť viac než :max.', - 'max.file' => ':attribute nesmie byť viac než :max kilobajtov.', - 'max.string' => ':attribute nesmie byť viac než :max znakov.', - 'max.array' => ':attribute nesmie obsahovať viac než :max položiek.', - 'mimes' => ':attribute musí byť súbor typu: :values.', - 'min.numeric' => ':attribute musí byť minimálne :min.', - 'lte.numeric' => ':attribute musí byť nižší alebo rovný :value.', - 'min.file' => ':attribute musí byť minimálne :min kilobajtov.', - 'min.string' => ':attribute musí mať minimálne :min znakov.', - 'min.array' => ':attribute musí obsahovať minimálne :min položiek.', - 'not_in' => 'Vybraný :attribute je neplatný.', - 'numeric' => ':attribute musí byť číslo.', - 'numeric_native' => 'Suma v hlavnej mene musí byť číslo.', - 'numeric_destination' => 'Cieľová suma musí byť číslo.', - 'numeric_source' => 'Zdrojová suma musí byť číslo.', - 'regex' => 'Formát :attribute je neplatný.', - 'required' => 'Pole :attribute je povinné.', - 'required_if' => ':attribute je povinné, ak :other je :value.', - 'required_unless' => ':attribute je povinné, ak :other nie je :values.', - 'required_with' => ':attribute je povinné, ak sú zvolené :values.', - 'required_with_all' => ':attribute je povinné, ak sú zvolené :values.', - 'required_without' => ':attribute je povinné, ak nie sú zvolené :values.', - 'required_without_all' => ':attribute je povinné, ak nie sú zvolené :values.', - 'same' => ':attribute a :other musia byť zhodné.', - 'size.numeric' => ':attribute musí byť :size.', - 'amount_min_over_max' => 'Minimálna suma nemôže byť vyššia než maximálna suma.', - 'size.file' => ':attribute musí mať :size kilobajtov.', - 'size.string' => ':attribute musí mať :size znakov.', - 'size.array' => ':attribute musí obsahovať :size položiek.', - 'unique' => ':attribute už existuje.', - 'string' => ':attribute byť reťazec.', - 'url' => 'Formát :attribute je neplatný.', - 'timezone' => ':attribute musí byť platná zóna.', - '2fa_code' => 'Pole :attribute je neplatné.', - 'dimensions' => ':attribute má neplatné rozmery obrázku.', - 'distinct' => 'Pole :attribute má duplicitnú hodnotu.', - 'file' => ':attribute musí byť súbor.', - 'in_array' => 'Pole :attribute v :other neexistuje.', - 'present' => 'Pole :attribute musí byť prítomné.', - 'amount_zero' => 'Celková suma nesmie byť nula.', - 'current_target_amount' => 'Aktuálna suma musí být menšia, než cieľová suma.', - 'unique_piggy_bank_for_user' => 'Názov pokladničky musí byť jedinečný.', - 'unique_object_group' => 'Názov skupiny musí byť jedinečný', - 'starts_with' => 'Hodnota musí začínať :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Oba účty musia mať rovnaký typ', - 'same_account_currency' => 'Oba účty musia mať rovnakú menu', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Toto nie je bezpečné heslo. Skúste iné. Viac se dozviete na http://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Neplatný typ opakovania pre opakované transakcie.', - 'valid_recurrence_rep_moment' => 'Neplatný moment opakovania pre tento typ opakovania.', - 'invalid_account_info' => 'Neplatná informácia o účte.', - 'attributes' => [ + 'secure_password' => 'Toto nie je bezpečné heslo. Skúste iné. Viac se dozviete na http://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Neplatný typ opakovania pre opakované transakcie.', + 'valid_recurrence_rep_moment' => 'Neplatný moment opakovania pre tento typ opakovania.', + 'invalid_account_info' => 'Neplatná informácia o účte.', + 'attributes' => [ 'email' => 'e-mailová adresa', 'description' => 'popis', 'amount' => 'suma', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Pre pokračovanie je potrebné platné ID zdrojového účtu a/alebo platný názov zdrojového účtu.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Pre ID „:id“ alebo mena „:name“ sa nenašiel žiadny platný cieľový účet.', + 'withdrawal_source_need_data' => 'Pre pokračovanie je potrebné platné ID zdrojového účtu a/alebo platný názov zdrojového účtu.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Pre ID „:id“ alebo mena „:name“ sa nenašiel žiadny platný cieľový účet.', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Pre pokračovanie je potrebné platné ID zdrojového účtu a/alebo platný názov zdrojového účtu.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Pre ID „:id“ alebo meno „:name“ sa nenašiel žiadny platný cieľový účet.', - 'deposit_dest_wrong_type' => 'Zadaný cieľový účet nemá správny typ.', + 'deposit_source_need_data' => 'Pre pokračovanie je potrebné platné ID zdrojového účtu a/alebo platný názov zdrojového účtu.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Pre ID „:id“ alebo meno „:name“ sa nenašiel žiadny platný cieľový účet.', + 'deposit_dest_wrong_type' => 'Zadaný cieľový účet nemá správny typ.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Pre pokračovanie je potrebné platné ID zdrojového účtu a/alebo platný názov zdrojového účtu.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Pre ID „:id“ alebo meno „:name“ sa nenašiel žiadny platný cieľový účet.', + 'need_id_in_edit' => 'Každé rozdelenie musí mať platné transaction_journal_id (platné ID alebo 0).', - 'transfer_source_need_data' => 'Pre pokračovanie je potrebné platné ID zdrojového účtu a/alebo platný názov zdrojového účtu.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Pre ID „:id“ alebo meno „:name“ sa nenašiel žiadny platný cieľový účet.', - 'need_id_in_edit' => 'Každé rozdelenie musí mať platné transaction_journal_id (platné ID alebo 0).', + 'ob_source_need_data' => 'Pre pokračovanie je potrebné platné ID zdrojového účtu a/alebo platný názov zdrojového účtu.', + 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Pre ID „:id“ alebo mena „:name“ sa nenašiel žiadny platný cieľový účet.', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Pre pokračovanie je potrebné platné ID zdrojového účtu a/alebo platný názov zdrojového účtu.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Pre ID „:id“ alebo mena „:name“ sa nenašiel žiadny platný cieľový účet.', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Tento účet nie je možné použiť ako zdrojový účet.', + 'generic_invalid_destination' => 'Tento účet nie je možné použiť ako cieľový účet.', - 'generic_invalid_source' => 'Tento účet nie je možné použiť ako zdrojový účet.', - 'generic_invalid_destination' => 'Tento účet nie je možné použiť ako cieľový účet.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'Hodnota :attribute musí byť väčšia alebo rovná :value.', - 'gt.numeric' => 'Hodnota :attribute musí byť väčšia ako :value.', - 'gte.file' => 'Hodnota :attribute musí byť väčšia alebo rovná :value kilobajtov.', - 'gte.string' => 'Hodnota :attribute musí byť väčšia alebo rovná :value znakov.', - 'gte.array' => 'Hodnota :attribute musí obsahovať :value alebo viac položiek.', + 'gte.numeric' => 'Hodnota :attribute musí byť väčšia alebo rovná :value.', + 'gt.numeric' => 'Hodnota :attribute musí byť väčšia ako :value.', + 'gte.file' => 'Hodnota :attribute musí byť väčšia alebo rovná :value kilobajtov.', + 'gte.string' => 'Hodnota :attribute musí byť väčšia alebo rovná :value znakov.', + 'gte.array' => 'Hodnota :attribute musí obsahovať :value alebo viac položiek.', 'amount_required_for_auto_budget' => 'Suma je povinná.', 'auto_budget_amount_positive' => 'Suma musí byť viac ako 0.', + 'auto_budget_period_mandatory' => 'Obdobie rozpočtu je povinný údaj.', // no access to administration: diff --git a/resources/lang/sl_SI/api.php b/resources/lang/sl_SI/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/sl_SI/api.php +++ b/resources/lang/sl_SI/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/sl_SI/auth.php b/resources/lang/sl_SI/auth.php index e7284f684a..c3d1a954f9 100644 --- a/resources/lang/sl_SI/auth.php +++ b/resources/lang/sl_SI/auth.php @@ -31,11 +31,9 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Podatki se ne ujemajo s podatki v naši bazi.', - 'throttle' => 'Prevečkrat ste se poskusili prijaviti. Poskusite ponovno čez :seconds sekunde.', + 'throttle' => 'Prevečkrat ste se poskusili prijaviti. Poskusite ponovno čez :seconds sekund.', ]; diff --git a/resources/lang/sl_SI/breadcrumbs.php b/resources/lang/sl_SI/breadcrumbs.php index 9aaca7d926..c83ddb89ad 100644 --- a/resources/lang/sl_SI/breadcrumbs.php +++ b/resources/lang/sl_SI/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Prva stran', - 'budgets' => 'Proračuni', - 'subscriptions' => 'Naročnine', - 'transactions' => 'Transakcije', - 'title_expenses' => 'Stroški', - 'title_withdrawal' => 'Stroški', - 'title_revenue' => 'Dohodki / prihodki', - 'title_deposit' => 'Dohodki / prihodki', - 'title_transfer' => 'Prenosi', - 'title_transfers' => 'Prenosi', - 'edit_currency' => 'uredi valuto ":name"', - 'delete_currency' => 'izbriši valuto ":name"', - 'newPiggyBank' => 'ustvari novega pujska', - 'edit_piggyBank' => 'uredi pujska za ":name"', - 'preferences' => 'nastavitve', - 'profile' => 'profil', - 'accounts' => 'Računi', - 'changePassword' => 'spremeni geslo', - 'change_email' => 'Spremenite e-poštni naslov', - 'bills' => 'Trajniki', - 'newBill' => 'nov trajnik', - 'edit_bill' => 'uredi trajnik ":name"', - 'delete_bill' => 'izbriši trajnik ":name"', - 'reports' => 'Poročila', - 'search_result' => 'rezultati iskanja za ":query"', - 'withdrawal_list' => 'stroški', - 'Withdrawal_list' => 'Stroški', - 'deposit_list' => 'prihodki', - 'transfer_list' => 'prenosi', - 'transfers_list' => 'prenosi', + 'home' => 'Domov', + 'budgets' => 'Proračuni', + 'subscriptions' => 'Naročnine', + 'transactions' => 'Transakcije', + 'title_expenses' => 'Stroški', + 'title_withdrawal' => 'Stroški', + 'title_revenue' => 'Dohodki / prihodki', + 'title_deposit' => 'Dohodki / prihodki', + 'title_transfer' => 'Prenosi', + 'title_transfers' => 'Prenosi', + 'edit_currency' => 'Uredi valuto ":name"', + 'delete_currency' => 'Izbriši valuto ":name"', + 'newPiggyBank' => 'Ustvari nov hranilnik', + 'edit_piggyBank' => 'Uredi hranilnik ":name"', + 'preferences' => 'Nastavitve', + 'profile' => 'Profil', + 'accounts' => 'Računi', + 'changePassword' => 'Spremenite geslo', + 'change_email' => 'Spremenite e-poštni naslov', + 'bills' => 'Računi', + 'newBill' => 'Nov račun', + 'edit_bill' => 'Uredi račun ":name"', + 'delete_bill' => 'Izbriši račun ":name"', + 'reports' => 'Poročila', + 'search_result' => 'Rezultati iskanja za ":query"', + 'withdrawal_list' => 'Stroški', + 'Withdrawal_list' => 'Stroški', + 'deposit_list' => 'Prihodki, dohodki in prilivi', + 'transfer_list' => 'Prenosi', + 'transfers_list' => 'Prenosi', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,27 +76,26 @@ return [ * */ - 'reconciliation_list' => 'Poravnave', - 'create_withdrawal' => 'ustvari nov odhodek', - 'create_deposit' => 'ustvari nov prihodek', - 'create_transfer' => 'ustvari nov prenos', + 'create_withdrawal' => 'Ustvari nov odliv', + 'create_deposit' => 'Ustvari nov priliv', + 'create_transfer' => 'Ustvari nov prenos', 'create_new_transaction' => 'Ustvari novo transakcijo', - 'edit_journal' => 'uredi transakcijo ":description"', + 'edit_journal' => 'Uredi transakcijo ":description"', 'edit_reconciliation' => 'Uredi ":description"', - 'delete_journal' => 'izbriši transakcijo ":description"', + 'delete_journal' => 'Izbriši transakcijo ":description"', 'delete_group' => 'Izbriši transakcijo ":description"', - 'tags' => 'značke', - 'createTag' => 'ustvari novo značko', - 'edit_tag' => 'uredi značko ":tag"', - 'delete_tag' => 'izbriši značko ":tag"', + 'tags' => 'Oznake', + 'createTag' => 'Ustvari novo oznako', + 'edit_tag' => 'Posodobi oznako ":tag"', + 'delete_tag' => 'Izbriši oznako ":tag"', 'delete_journal_link' => 'Izbriši povezavo med transakcijami', 'edit_object_group' => 'Uredi skupino ":title"', 'delete_object_group' => 'Izbriši skupino ":title"', 'logout_others' => 'Odjavi druge seje', 'asset_accounts' => 'Premoženjski računi', 'expense_accounts' => 'Računi stroškov', - 'revenue_accounts' => 'Račun prihodkov', + 'revenue_accounts' => 'Računi prihodkov', 'liabilities_accounts' => 'Obveznosti', 'placeholder' => '[Placeholder]', ]; diff --git a/resources/lang/sl_SI/components.php b/resources/lang/sl_SI/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/sl_SI/components.php +++ b/resources/lang/sl_SI/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/sl_SI/config.php b/resources/lang/sl_SI/config.php index f41fbbb8bd..1b838a4b6a 100644 --- a/resources/lang/sl_SI/config.php +++ b/resources/lang/sl_SI/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'sl', - 'locale' => 'sl, Slovenian, sl_SI, sl_SI.utf8, sl_SI.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'sl', + 'locale' => 'sl, Slovenščina, sl_SI, sl_SI.utf8, sl_SI.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D. MMM, YYYY', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D. MMM, YYYY', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'MMMM Do, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'Do MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'Do MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'D. MMMM, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'D. MMMM, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D. MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D. MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Week' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Week' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Ponedeljek', - 'dow_2' => 'Torek', - 'dow_3' => 'Sreda', - 'dow_4' => 'Četrtek', - 'dow_5' => 'Petek', - 'dow_6' => 'Sobota', - 'dow_7' => 'Nedelja', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Ponedeljek', + 'dow_2' => 'Torek', + 'dow_3' => 'Sreda', + 'dow_4' => 'Četrtek', + 'dow_5' => 'Petek', + 'dow_6' => 'Sobota', + 'dow_7' => 'Nedelja', ]; /* diff --git a/resources/lang/sl_SI/demo.php b/resources/lang/sl_SI/demo.php index 3d097a38c6..31f1878ba3 100644 --- a/resources/lang/sl_SI/demo.php +++ b/resources/lang/sl_SI/demo.php @@ -31,22 +31,21 @@ * */ - declare(strict_types=1); return [ - 'no_demo_text' => 'Oprostite, ni dodatne razlage za this page.', + 'no_demo_text' => 'Oprostite, ni dodatne razlage za to stran.', 'see_help_icon' => 'Več informacij pa dobite s klikom na -ikono zgoraj desno.', - 'index' => 'Dobrodošli v Firefly III! Na tej strani boste dobili hiter pregled nad vašimi financami. Za več informacij preverite račune → premoženjski računi in seveda budžet in poročila. Ali pa se samo malo razglejte naokoli in videli boste, kje boste končali.', + 'index' => 'Dobrodošli v Firefly III! Na tej strani boste dobili hiter pregled nad vašimi financami. Za več informacij preverite račune → premoženjski računi in seveda proračuni in poročila. Ali pa se samo malo razglejte naokoli in videli boste, kje boste končali.', 'accounts-index' => 'Računi sredstev so vaši osebni bančni računi. Stroškovni računi so računi na katere zapravljate vaš denar, kot npr. trgovine in prijatelji. Računi prihodkov so računi iz katerih dobivate denar, kot npr. vaš delodajalec, država in drugi viri vaših prihodkov. Računi obveznosti so vaši dolgovi in krediti, kot na primer dolg na kreditni kartici in študentsko posojilo. Na tej strani lahko račune urejate ali jih odstranite.', - 'budgets-index' => 'Na tej strani najdete pregled nad vašimi budžeti. Zgornji kazalec prikazuje vsoto ki je na razpolago za ta budžet. To lahko nastavljate za katerokoli obdobje, tako da kliknete na vsoto na desni. Vsota, ki ste jo dejansko porabili je prikazana na spodnjem kazalcu. Spodaj so prikazani vaši stroški razporejeni po budžetih.', - 'reports-index-start' => 'Firefly III podpira mnogo različnih poročil. Preberi več s klikom na ikono v zgorjnem desnem kotu.', + 'budgets-index' => 'Na tej strani najdete pregled nad vašimi proračuni. Zgornji kazalec prikazuje vsoto ki je na razpolago za ta proračun. To lahko nastavljate za katerokoli obdobje, tako da kliknete na vsoto na desni. Vsota, ki ste jo dejansko porabili je prikazana na spodnjem kazalcu. Spodaj so prikazani vaši stroški razporejeni po budžetih.', + 'reports-index-start' => 'Firefly III podpira mnogo različnih poročil. Preberi več s klikom na ikono v zgornjem desnem kotu.', 'reports-index-examples' => 'Poglej si še ostale primere: mesečni finančni pregled, letni finančni pregled in pregled proračuna.', - 'currencies-index' => 'Firefly III podpira mnogo valut. Čeprav je privzet Evro, je možno nastaviti USD in ostale valute. Nekaj valut je že vključenih, po želji pa lahko dodaš svoje. Sprememba privzete valute ne bo spremenila valute na obstoječih transakcijah, Firefly III pa podpira uporabo več valut istočasno.', - 'transactions-index' => 'Ti stroški, prihodki in prenosi niso pretirano domiselni. Ustvarjeni so bili samodejno.', - 'piggy-banks-index' => 'Obstajajo trije pujski. Uporabi gumba plus in minus da vplivaš na količino denarja v vsakem. Klikni na ime pujska za več informacij.', + 'currencies-index' => 'Firefly III podpira več valut. Čeprav je privzet Evro, je možno nastaviti USD in ostale valute. Nekaj valut je že vključenih, po želji pa lahko dodate svoje. Sprememba privzete valute ne bo spremenila valute na obstoječih transakcijah, Firefly III pa podpira uporabo več valut istočasno.', + 'transactions-index' => 'Ti stroški, prilivi in prenosi niso pretirano domiselni. Ustvarjeni so bili samodejno.', + 'piggy-banks-index' => 'Obstajajo trije hranilniki. Uporabite gumba plus in minus da vplivate na količino denarja v vsakem. Kliknite na ime hranilnika za več informacij.', 'profile-index' => 'Demo spletno mesto se ponastavi vsake štiri ure. Dostop lahko izgubiš v vsakem trenutku. Ta proces je samodejen in ne gre za "bug".', ]; diff --git a/resources/lang/sl_SI/email.php b/resources/lang/sl_SI/email.php index 9f2f5a6999..1cad573e27 100644 --- a/resources/lang/sl_SI/email.php +++ b/resources/lang/sl_SI/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -42,10 +41,10 @@ return [ 'footer_ps' => 'PS: To sporočilo je bilo poslano, ker ga je sprožila zahteva iz naslova IP :ipAddress.', // admin test - 'admin_test_subject' => 'Testno sporočilo Vaše Firefly III namestitve', - 'admin_test_body' => 'To je testno sporočilo iz vašega primerka Firefly III. Poslano je bilo na naslov :email.', + 'admin_test_subject' => 'Testno sporočilo vaše Firefly III namestitve', + 'admin_test_body' => 'To je testno sporočilo iz vašega primerka Firefly III. Poslano je bilo na elektronski naslov :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'Ustvarjeno je bilo povabilo', 'invitation_created_body' => 'Administratorski uporabnik ":email" je ustvaril povabilo, ki ga lahko uporabi vsak, ki se skriva za e-poštnim naslovom ":invitee". Vabilo velja 48 ur.', @@ -68,7 +66,7 @@ return [ // new IP 'login_from_new_ip' => 'Nova prijava v Firefly III', 'slack_login_from_new_ip' => 'Nova prijava v Firefly III iz IP :ip (:host)', - 'new_ip_body' => 'Firefly III je zaznal novo prijavo v vaš račun z neznanega IP-naslova. Če se še nikoli niste prijavili s spodnjega IP-naslova ali je to že več kot šest mesecev nazaj, vas bo program Firefly III opozoril.', + 'new_ip_body' => 'Firefly III je zaznal novo prijavo v vaš račun z neznanega IP naslova. Če se še nikoli niste prijavili s spodnjega IP naslova ali je to že več kot šest mesecev nazaj, vas bo program Firefly III na to opozoril.', 'new_ip_warning' => 'Če ta naslov IP ali prijavo prepoznate, tega sporočila ne upoštevajte. Če se niste prijavili ali če nimate pojma, za kaj gre, preverite varnostno geslo, ga spremenite in odjavite vse druge seje. To storite tako, da obiščete stran svojega profila. Seveda že imate omogočeno funkcijo 2FA, kajne? Ostanite varni!', 'ip_address' => 'IP naslov', 'host_name' => 'Gostitelj', @@ -76,9 +74,9 @@ return [ // access token created 'access_token_created_subject' => 'Nov žeton za dostop je bil ustvarjen', - 'access_token_created_body' => 'Nekdo (upajmo da Vi) je ustvaril nov Firefly III API dostopni žeton za Vaš uporabniški račun.', + 'access_token_created_body' => 'Nekdo (upajmo da vi) je ustvaril nov Firefly III API dostopni žeton za Vaš uporabniški račun.', 'access_token_created_explanation' => 'S tem žetonom lahko prek vmesnika API Firefly III dostopajo do **vseh** vaših finančnih evidenc.', - 'access_token_created_revoke' => 'Če to niste bili vi, čim prej prekličite ta žeton na :url', + 'access_token_created_revoke' => 'Če to niste bili vi, čim prej prekličite ta žeton na spletnem naslovu :url', // registered 'registered_subject' => 'Dobrodošli v Firefly III!', @@ -89,10 +87,10 @@ return [ 'registered_help' => 'V zgornjem desnem kotu vsake strani je ikona pomoči. Če potrebujete pomoč, jo kliknite!', 'registered_closing' => 'Uživajte!', 'registered_firefly_iii_link' => 'Firefly III:', - 'registered_pw_reset_link' => 'Ponastavitev gesla:', + 'registered_pw_reset_link' => 'Ponastavitev geslo:', 'registered_doc_link' => 'Dokumentacija:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,18 +101,17 @@ return [ * */ - // new version 'new_version_email_subject' => 'Na voljo je nova različica Firefly III', // email change - 'email_change_subject' => 'Vaš Firefly III poštni naslov je bil spremenjen', + 'email_change_subject' => 'Vaš Firefly III e-poštni naslov je bil spremenjen', 'email_change_body_to_new' => 'Vi ali nekdo z dostopom do vašega računa Firefly III je spremenil vaš e-poštni naslov. Če tega sporočila niste pričakovali, ga prezrite in izbrišite.', - 'email_change_body_to_old' => 'Vi ali nekdo z dostopom do vašega računa Firefly III je spremenil vaš e-poštni naslov. Če tega niste pričakovali, morate za zaščito svojega računa slediti spodnji povezavi "razveljaviti"!', - 'email_change_ignore' => 'Če ste sprožili to spremembo, lahko to sporočilo mirno prezrete.', - 'email_change_old' => 'Star poštni naslov je bil: :email', + 'email_change_body_to_old' => 'Vi ali nekdo z dostopom do vašega računa Firefly III je spremenil vaš e-poštni naslov. Če tega niste pričakovali, morate za zaščito svojega računa slediti spodnji povezavi "razveljavi"!', + 'email_change_ignore' => 'Če ste vi sprožili to spremembo, lahko to sporočilo mirno prezrete.', + 'email_change_old' => 'Stari e-poštni naslov je bil: :email', 'email_change_old_strong' => 'Stari e-poštni naslov je bil: **:email**', - 'email_change_new' => 'Nov poštni naslov je: :email', + 'email_change_new' => 'Nov e-poštni naslov je: :email', 'email_change_new_strong' => 'Novi e-poštni naslov je: **:email**', 'email_change_instructions' => 'Dokler te spremembe ne potrdite, Firefly III ne morete uporabljati. Za to sledite spodnji povezavi.', 'email_change_undo_link' => 'Če želite preklicati spremembo, sledite tej povezavi:', @@ -131,23 +128,24 @@ return [ 'reset_pw_warning' => '**PROSIM** preverite, ali povezava dejansko vodi do Firefly III, kamor naj bi vodila!', // error - 'error_subject' => 'Ujeli napako v Firefly III', + 'error_subject' => 'Ujel sem napako v Firefly III', 'error_intro' => 'Firefly III v:version se je zaletel v napako: :errorMessage.', 'error_type' => 'Napaka je bila tipa ":class".', - 'error_timestamp' => 'Napaka se je pojavila ob/pri: :time.', + 'error_timestamp' => 'Napaka se je pojavila na/ob: :time.', 'error_location' => 'Ta napaka se je pojavila v datoteki ":file" v vrstici :line s kodo :code.', 'error_user' => 'Na napako je naletel uporabnik #:id, :email.', 'error_no_user' => 'Za to napako ni bil prijavljen noben uporabnik ali pa ni bil zaznan noben uporabnik.', 'error_ip' => 'Naslov IP, povezan s to napako, je: :ip', 'error_url' => 'URL je: :url', 'error_user_agent' => 'Uporabniški agent: :userAgent', - 'error_stacktrace' => 'Celoten stacktrace je spodaj. Če mislite, da je to bug v Firefly III, lahko to sporočilo posredujete na james@firefly-iii.org. To lahko pomaga popraviti hrošča, ki ste ga pravkar naleteli.', + 'error_stacktrace' => 'Celoten sled sklada je spodaj. Če mislite, da je to hrošč v Firefly III, lahko to sporočilo posredujete na james@firefly-iii.org. To lahko pomaga popraviti hrošča, ki ste ga pravkar naleteli.', 'error_github_html' => 'Če vam je ljubše, lahko odprete tudi novo vprašanje na GitHubu.', 'error_github_text' => 'Če želite, lahko novo številko odprete tudi na spletnem mestu https://github.com/firefly-iii/firefly-iii/issues.', - 'error_stacktrace_below' => 'Celotna stacktrace je spodaj:', - 'error_headers' => 'Ustrezni so lahko tudi naslednji naslovi:', + 'error_stacktrace_below' => 'Celotna sled sklada je spodaj:', + 'error_headers' => 'Uporabne so lahko tudi naslednje HTTP glave:', + 'error_post' => 'To je poslal uporabnik:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,10 +156,9 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III je ustvaril novo transakcijo|Firefly III je ustvaril :count novih transakcij', - 'new_journals_header' => 'Firefly III je ustvaril transakcijo za vas. Najdetejo v svoji namestitvi Firefly III:|Firefly III je za vas ustvaril :count transakcij. Najdete jih v svoji namestitvi Firefly III:', + 'new_journals_header' => 'Firefly III je ustvaril transakcijo za vas. Najdete jo v svoji namestitvi Firefly III:|Firefly III je za vas ustvaril :count transakcij. Najdete jih v svoji namestitvi Firefly III:', // bill warning 'bill_warning_subject_end_date' => 'Vaš račun ":name" bo potekel čez :diff dni', @@ -172,8 +169,7 @@ return [ 'bill_warning_extension_date' => 'Vaš račun **":name"** bo podaljšan ali preklican dne :date. Ta trenutek bo minil čez približno **:diff dni**.', 'bill_warning_end_date_zero' => 'Vaš račun **":name"** naj bi potekel :date. Ta trenutek bo minil **DANES!**', 'bill_warning_extension_date_zero' => 'Vaš račun **":name"** bo podaljšan ali preklican dne :date. Ta trenutek bo minil **DANES!**', - 'bill_warning_please_action' => 'Prosimo, da ustrezno ukrepate.', - + 'bill_warning_please_action' => 'Prosim, da ustrezno ukrepate.', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/sl_SI/errors.php b/resources/lang/sl_SI/errors.php index fd9d34776c..d1ccd063a8 100644 --- a/resources/lang/sl_SI/errors.php +++ b/resources/lang/sl_SI/errors.php @@ -31,13 +31,12 @@ * */ - declare(strict_types=1); return [ '404_header' => 'Firefly III ne najde te strani.', '404_page_does_not_exist' => 'Stran, ki ste jo zahtevali, ne obstaja. Preverite, ali niste vnesli napačnega URL-ja. Ste se morda zmotili?', - '404_send_error' => 'Če ste bili samodejno preusmerjeni na to stran, sprejmite moje opravičilo. Ta napaka je omenjena v vaših dnevniških datotekah in hvaležen vam bom, če mi pošljete napako.', + '404_send_error' => 'Če ste bili samodejno preusmerjeni na to stran, sprejmite moje opravičilo. Ta napaka je omenjena v vaših dnevniških datotekah in hvaležen vam bom, če mi to napako pošljete.', '404_github_link' => 'Če ste prepričani, da bi ta stran morala obstajati, odprite težavo na GitHub-u.', 'whoops' => 'Ups!', 'fatal_error' => 'Prišlo je do usodne napake. Preverite dnevniške datoteke v "storage/logs" ali uporabite "docker logs -f [container]", da vidite, kaj se dogaja.', @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Sled sklada', 'more_info' => 'Več informacij', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Zberite več informacij v imeniku storage/logs, kjer boste našli dnevniške datoteke. Če uporabljate Docker, uporabite docker logs -f [container].', - 'collect_info_more' => 'Več o zbiranju informacij o napakah lahko preberete v pogostih vprašanjih.', - 'github_help' => 'Pridobi pomoč na GitHub-u', - 'github_instructions' => 'Vabimo vas, da odprete novo težavo na GitHub-u.', - 'use_search' => 'Uporabi iskanje!', - 'include_info' => 'Vključite informacije s te strani za odpravljanje napak.', - 'tell_more' => 'Povejte nam kaj več kot "pravijo Ups!"', - 'include_logs' => 'Vključite dnevnike napak (glejte zgoraj).', - 'what_did_you_do' => 'Povejte nam, kaj ste počeli.', - 'offline_header' => 'Verjetno ste brez povezave', - 'offline_unreachable' => 'Firefly III je nedosegljiv. Vaša naprava je trenutno brez povezave ali pa strežnik ne deluje.', - 'offline_github' => 'Če ste prepričani, da sta vaša naprava in strežnik povezana, odprite težavo na GitHub-u .', - + 'collect_info' => 'Zberite več informacij v imeniku storage/logs, kjer boste našli dnevniške datoteke. Če uporabljate Docker, uporabite docker logs -f [container].', + 'collect_info_more' => 'Več o zbiranju informacij o napakah lahko preberete v pogostih vprašanjih.', + 'github_help' => 'Pridobite pomoč na GitHub-u', + 'github_instructions' => 'Vabimo vas, da odprete novo težavo na GitHub-u.', + 'use_search' => 'Uporabite iskanje!', + 'include_info' => 'Vključite informacije s te strani za odpravljanje napak.', + 'tell_more' => 'Povejte nam kaj več kot "pravi Ups!"', + 'include_logs' => 'Vključite dnevnike napak (glejte zgoraj).', + 'what_did_you_do' => 'Povejte nam, kaj ste počeli.', + 'offline_header' => 'Verjetno ste brez povezave', + 'offline_unreachable' => 'Firefly III je nedosegljiv. Vaša naprava je trenutno brez povezave ali pa strežnik ne deluje.', + 'offline_github' => 'Če ste prepričani, da sta vaša naprava in strežnik povezana, odprite težavo na GitHub-u .', ]; diff --git a/resources/lang/sl_SI/firefly.php b/resources/lang/sl_SI/firefly.php index cab77d65ff..2373269adc 100644 --- a/resources/lang/sl_SI/firefly.php +++ b/resources/lang/sl_SI/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'zapri', - 'actions' => 'Dejanja', - 'edit' => 'uredi', - 'delete' => 'izbriši', - 'split' => 'Razdeli', - 'single_split' => 'Razdeli', - 'clone' => 'Kloniraj', - 'confirm_action' => 'Potrdi dejanje', - 'last_seven_days' => 'Zadnjih sedem dni', - 'last_thirty_days' => 'Zadnjih 30 dni', - 'last_180_days' => 'Zadnjih 180 dni', - 'month_to_date' => 'Od meseca do datuma', - 'year_to_date' => 'Leto do datuma', - 'YTD' => 'YTD', - 'welcome_back' => 'Kaj dogaja?', - 'everything' => 'vse', - 'today' => 'danes', - 'customRange' => 'obseg po meri', - 'date_range' => 'Datumski obseg', - 'apply' => 'uporabi', - 'select_date' => 'Izberi datum..', - 'cancel' => 'prekliči', - 'from' => 'Od', - 'to' => 'Do', - 'structure' => 'Struktura', - 'help_translating' => 'Pomoč še ni na voljo v tvojem jeziku. Boš pomagal pri prevodu?', - 'showEverything' => 'pokaži vse', - 'never' => 'nikoli', - 'no_results_for_empty_search' => 'Vaše iskanje je bilo prazno, zato ni bilo mogoče najti ničesar.', - 'removed_amount' => 'Odstranjeno :amount', - 'added_amount' => 'Dodano :amount', - 'asset_account_role_help' => 'Dodatne možnosti se lahko nastavljajo tudi kasneje.', - 'Opening balance' => 'Začetno stanje', - 'create_new_stuff' => 'Ustvari novo kramo', - 'new_withdrawal' => 'Nov odliv', - 'create_new_transaction' => 'Ustvari novo transakcijo', - 'sidebar_frontpage_create' => 'Ustvari', - 'new_transaction' => 'Nova transakcija', - 'no_rules_for_bill' => 'Ta račun nima nastavljenih pravil.', - 'go_to_asset_accounts' => 'Oglej si račune sredstev', - 'go_to_budgets' => 'Na proračune', - 'go_to_withdrawals' => 'Pojdite na svoja izplačila', - 'clones_journal_x' => 'Ta transakcija je kopija ":description" (#:id)', - 'go_to_categories' => 'Na kategorije', - 'go_to_bills' => 'Na trajnike', - 'go_to_expense_accounts' => 'Oglej si račune stroškov', - 'go_to_revenue_accounts' => 'Oglej si račune prihodkov', - 'go_to_piggies' => 'Na pujske', - 'new_deposit' => 'nov depozit', - 'new_transfer' => 'nov prenos', - 'new_transfers' => 'Nov prenos', - 'new_asset_account' => 'nov premoženjski račun', - 'new_expense_account' => 'nov konto za stroške', - 'new_revenue_account' => 'nov konto za dohodke', - 'new_liabilities_account' => 'Nova obveznost', - 'new_budget' => 'nov budžet', - 'new_bill' => 'nov trajnik', - 'block_account_logout' => 'Odjavljeni ste. Blokirani računi ne morejo uporabljati te spletne strani. Ali ste se registrirali z veljavnim e-poštnim naslovom?', - 'flash_success' => 'Uspelo je!', - 'flash_info' => 'Sporočilo', - 'flash_warning' => 'Opozorilo!', - 'flash_error' => 'Napaka!', - 'flash_danger' => 'Nevarnost!', - 'flash_info_multiple' => 'Tukajle je eno sporočilo | Tukajle je :count sporočil', - 'flash_error_multiple' => 'Tukajle je ena napaka | Tukajle je :count napak', - 'net_worth' => 'Neto vrednost', - 'help_for_this_page' => 'Pomoč za to stran', - 'help_for_this_page_body' => 'Več informacij o tej strani najdete v dokumentaciji.', - 'two_factor_welcome' => 'Zdravo!', - 'two_factor_enter_code' => 'Če želite nadaljevati, vnesite svojo kodo. Vaš program za prijavo jo lahko ustvari za vas.', - 'two_factor_code_here' => 'Vnesite kodo tukaj', - 'two_factor_title' => 'Overovitev v dveh korakih', - 'authenticate' => 'Identifikacija', - 'two_factor_forgot_title' => 'Izguba identifikacije v dveh korakih', - 'two_factor_forgot' => 'Pozabil sem svojo reč za dva koraka.', - 'two_factor_lost_header' => 'Nimaš dostopa do identifikacije v dveh korakih?', - 'two_factor_lost_intro' => 'Če si izgubil tudi rezervne kode imaš res smolo. Tega ne moreš popraviti preko spletnega vmesnika. Imaš dve možnosti.', - 'two_factor_lost_fix_self' => 'Če uporabljaš lastno namestitev Firefly III, si za navodila oglej ta zapis.', - 'two_factor_lost_fix_owner' => 'V nasprotnem primeru pišite po e-pošti lastniku spletnega mesta :site_owner in ga prosite, da ponastavijo vaše preverjanje pristnosti v dveh korakih.', - 'mfa_backup_code' => 'V Firefly III si se prijavil z rezervno kodo. Te kode ne moreš več uporabiti zato jo na seznamu prečrtaj.', - 'pref_two_factor_new_backup_codes' => 'Ustvari nove rezervne kode', - 'pref_two_factor_backup_code_count' => 'Imate :count veljavno rezervno kodo.|Imate :count veljavne rezervne kode.', - '2fa_i_have_them' => 'Spravil sem jih!', - 'warning_much_data' => ':days dni podatkov se lahko nalaga kar nekaj časa.', - 'registered' => 'Uspešno ste se registrirali!', - 'Default asset account' => 'privzeti premoženjski račun', - 'no_budget_pointer' => 'Zdi se, da še nimate proračuna. Ustvarite jih nekaj na strani proračuni. Proračuni vam lahko pomagajo spremljati stroške.', - 'no_bill_pointer' => 'Zdi se, da še nimate računov. Ustvarite jih na strani računi. Računi vam lahko pomagajo spremljati stroške.', - 'Savings account' => 'Varčevalni račun', - 'Credit card' => 'kreditna kartica', - 'source_accounts' => 'Izvorni račun|Izvorni računi', - 'destination_accounts' => 'Ciljni račun|Ciljni računi', - 'user_id_is' => 'Vaše uporabniško ime se glasi :user', - 'field_supports_markdown' => 'To polje podpira Markdown.', - 'need_more_help' => 'Če potrebujete več pomoči pri uporabi Firefly III, prosimo, da odprete zahtevek za pomoč na Githubu.', - 'reenable_intro_text' => 'Vodiča lahko ponovno aktiviraš.', - 'intro_boxes_after_refresh' => 'Info polja se ponovno pojavijo, ko osvežiš stran.', - 'show_all_no_filter' => 'Pokaži vse transakcije brez omejitve datuma.', - 'expenses_by_category' => 'stroški po kategorijah', - 'expenses_by_budget' => 'stroški po budžetih', - 'income_by_category' => 'Prihodki po kategorijah', - 'expenses_by_asset_account' => 'stroški po premoženjskih računih', - 'expenses_by_expense_account' => 'stroški po stroškovnih kontih', - 'cannot_redirect_to_account' => 'Oprostite, ne moremo te preusmeriti na pravo stran.', - 'sum_of_expenses' => 'vsota stroškov', - 'sum_of_income' => 'Vsota dohodkov', - 'liabilities' => 'Obveznosti', - 'spent_in_specific_budget' => 'Porabljeno v proračunu ":budget"', - 'spent_in_specific_double' => 'Porabljeno po računu/ih ":account"', - 'earned_in_specific_double' => 'Prisluženo po računu/ih ":account"', - 'source_account' => 'Izvorni račun', - 'source_account_reconciliation' => 'Pri usklajevalni transakciji ni možno urejati izvornega računa.', - 'destination_account' => 'Ciljni račun', - 'destination_account_reconciliation' => 'Pri usklajevalni transakciji ni možno urejati ciljnega računa.', - 'sum_of_expenses_in_budget' => 'Skupaj porabljeno v ":budget"', - 'left_in_budget_limit' => 'Na voljo za zapravljanje glede na proračun', - 'current_period' => 'Tekoče obdobje', - 'show_the_current_period_and_overview' => 'Pokaži trenutno obdobje in pregled', - 'pref_languages_locale' => 'Za ostale jezike, razen Angleščine, je potrebno na operacijski sistem namestiti prave jezikovne nastavitve. Če le-te niso nastavljene pravilno se valuta, datumi in zneski ne bodo pravilno prikazovali.', - 'budget_in_period' => 'Vse transakcije za proračun ":name" med :start in :end v :currency', - 'chart_budget_in_period' => 'Diagram vseh transakcij za proračun ":name" med :start in :end v :currency', - 'chart_budget_in_period_only_currency' => 'Znesek v proračunu je v :currency, zato bodo na diagramu prikazane samo transakcije v :currency.', - 'chart_account_in_period' => 'Diagram vseh transakcij za račun ":name" (:balance) med :start in :end', - 'chart_category_in_period' => 'Diagram vseh transakcij za kategorijo ":name" med :start in :end', - 'chart_category_all' => 'Diagram vseh transakcij za kategorijo ":name"', - 'clone_withdrawal' => 'Kloniraj ta odliv', - 'clone_deposit' => 'Kloniraj ta polog', - 'clone_transfer' => 'Kloniraj ta prenos', - 'multi_select_no_selection' => 'Nič ni izbrano', - 'multi_select_select_all' => 'Izberi vse', - 'multi_select_n_selected' => 'izbrano', - 'multi_select_all_selected' => 'Vse je izbrano', - 'multi_select_filter_placeholder' => 'Najdi..', - 'intro_next_label' => 'Naslednji', - 'intro_prev_label' => 'Predhodnji', - 'intro_skip_label' => 'Preskoči', - 'intro_done_label' => 'Končano', - 'between_dates_breadcrumb' => 'Med :start in :end', - 'all_journals_without_budget' => 'Vse transakcije brez budžeta', - 'journals_without_budget' => 'Transakcije brez budžeta', - 'all_journals_without_category' => 'Vse transakcije brez kategorije', - 'journals_without_category' => 'Transakcije brez kategorije', - 'all_journals_for_account' => 'Vse transakcije za konto :name', - 'chart_all_journals_for_account' => 'Diagram vseh transakcij za konto :name', - 'journals_in_period_for_account' => 'stroški na kontu ":name" med :start in :end', - 'journals_in_period_for_account_js' => 'Vse transakcije za račun {title} med {start} in {end}', - 'transferred' => 'Prenešeno', - 'all_withdrawal' => 'vsi stroški', - 'all_transactions' => 'Vse transakcije', - 'title_withdrawal_between' => 'vsi stroški med :start in :end', - 'all_deposit' => 'Vsi prihodki', - 'title_deposit_between' => 'Vsi prihodki med :start in :end', - 'all_transfers' => 'Vsi prenosi', - 'title_transfers_between' => 'vsi prenosi med :start in :end', - 'all_transfer' => 'Vsi prenosi', - 'all_journals_for_tag' => 'Vse transakcije za oznako ":tag"', - 'title_transfer_between' => 'Vse transakcije med :start in :end', - 'all_journals_for_category' => 'Vse transakcije v kategoriji :name', - 'all_journals_for_budget' => 'Vse transakcije za v proračunu :name', - 'chart_all_journals_for_budget' => 'Diagram vseh transakcij za proračun :name', - 'journals_in_period_for_category' => 'Vse transakcije na računu ":name" med :start in :end', - 'journals_in_period_for_tag' => 'Vse transakcije z oznako :tag med :start in :end', - 'not_available_demo_user' => 'Funkcija ni na voljo za demo uporabnike.', - 'exchange_rate_instructions' => 'Premoženjski račun "@name" sprejema samo transakcije v @native_currency. Če želite namesto tega uporabiti @foreign_currency, morate podati tudi znesek v @native_currency:', - 'transfer_exchange_rate_instructions' => 'Izvorni premoženjski račun "@source_name" sprejema samo transakcije v @source_currency. Ciljni premoženjski račun "@dest_name" sprejema samo transakcije v @dest_currency. Podati morate znesek v obeh valutah.', - 'transaction_data' => 'Podrobnosti transakcije', - 'invalid_server_configuration' => 'Neveljavna konfiguracija strežnika', - 'invalid_locale_settings' => 'Firefly III ne more oblikovati denarnih zneskov, ker vašemu strežniku manjkajo zahtevani paketi. Obstajajo navodila, kako to narediti.', - 'quickswitch' => 'Hitri preklop', - 'sign_in_to_start' => 'Za nadaljevanje se prijavi', - 'sign_in' => 'Prijava', - 'register_new_account' => 'Ustvari nov račun', - 'forgot_my_password' => 'Pozabil sem geslo', - 'problems_with_input' => 'S tvojim vnosom so težave.', - 'reset_password' => 'Ponastavi geslo', - 'button_reset_password' => 'Ponastavi geslo', - 'reset_button' => 'Ponastavi', - 'want_to_login' => 'Želim se prijaviti', - 'login_page_title' => 'Prijava v Firefly III', - 'register_page_title' => 'Ustvari nov račun za Firefly III', - 'forgot_pw_page_title' => 'Si pozabil geslo za Firefly III?', - 'reset_pw_page_title' => 'Ponastavi geslo za Firefly III', - 'cannot_reset_demo_user' => 'Za demo uporabnika gesla ni mogoče ponastaviti.', - 'no_att_demo_user' => 'Demo uporabnik ne more naložiti prilog.', - 'button_register' => 'Registracija', - 'authorization' => 'Overitev', - 'active_bills_only' => 'samo aktivni trajniki', - 'active_bills_only_total' => 'vsi aktivni trajniki', - 'active_exp_bills_only' => 'samo aktivni in pričakovani trajniki', - 'active_exp_bills_only_total' => 'samo aktivni in pričakovani trajniki', - 'per_period_sum_1D' => 'Predvideni dnevni stroški', - 'per_period_sum_1W' => 'Predvideni tedenski stroški', - 'per_period_sum_1M' => 'Predvideni mesečni stroški', - 'per_period_sum_3M' => 'Pričakovani četrtletni stroški', - 'per_period_sum_6M' => 'Predvideni polletni stroški', - 'per_period_sum_1Y' => 'Pričakovani letni stroški', - 'average_per_bill' => 'povprečen trajnik', - 'expected_total' => 'pričakovana vsota', - 'reconciliation_account_name' => 'Usklajevanje :name (:currency)', - 'saved' => 'Shranjeno', - 'advanced_options' => 'Napredne možnosti', - 'advanced_options_explain' => 'Nekatere strani v Firefly III imajo za tem gumbom skrite napredne možnosti. Ta stran nima nič posebnega, vendar si oglejte druge!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Zapri', + 'actions' => 'Dejanja', + 'edit' => 'Uredi', + 'delete' => 'Izbriši', + 'split' => 'Razdeli', + 'single_split' => 'Razdeli', + 'clone' => 'Kloniraj', + 'clone_and_edit' => 'Kloniraj in uredi', + 'confirm_action' => 'Potrdi dejanje', + 'last_seven_days' => 'Zadnjih sedem dni', + 'last_thirty_days' => 'Zadnjih 30 dni', + 'last_180_days' => 'Zadnjih 180 dni', + 'month_to_date' => 'Od meseca do datuma', + 'year_to_date' => 'Leto do datuma', + 'YTD' => 'YTD', + 'welcome_back' => 'Kaj vse se dogaja?', + 'everything' => 'Vse', + 'today' => 'danes', + 'customRange' => 'Obseg po meri', + 'date_range' => 'Datumski obseg', + 'apply' => 'Uporabi', + 'select_date' => 'Izberi datum..', + 'cancel' => 'Prekliči', + 'from' => 'Od', + 'to' => 'Do', + 'structure' => 'Struktura', + 'help_translating' => 'Pomoč še ni na voljo v tvojem jeziku. Boš pomagal pri prevodu?', + 'showEverything' => 'Pokaži vse', + 'never' => 'Nikoli', + 'no_results_for_empty_search' => 'Vaše polje iskanja je prazno, zato ni bilo mogoče najti ničesar.', + 'removed_amount' => 'Odstranjeno :amount', + 'added_amount' => 'Dodano :amount', + 'asset_account_role_help' => 'Dodatne možnosti se lahko nastavljajo tudi kasneje.', + 'Opening balance' => 'Začetno stanje', + 'create_new_stuff' => 'Ustvari novo stvar', + 'new_withdrawal' => 'Nov odliv', + 'create_new_transaction' => 'Ustvari novo transakcijo', + 'sidebar_frontpage_create' => 'Ustvari', + 'new_transaction' => 'Nova transakcija', + 'no_rules_for_bill' => 'Ta račun nima nastavljenih pravil.', + 'go_to_asset_accounts' => 'Oglej si račune sredstev', + 'go_to_budgets' => 'Na proračune', + 'go_to_withdrawals' => 'Pojdi na svoje odlive', + 'clones_journal_x' => 'Ta transakcija je kopija ":description" (#:id)', + 'go_to_categories' => 'Na kategorije', + 'go_to_bills' => 'Na svoje račune', + 'go_to_expense_accounts' => 'Oglej si račune stroškov', + 'go_to_revenue_accounts' => 'Oglej si račune prihodkov', + 'go_to_piggies' => 'Na hranilnike', + 'new_deposit' => 'Nov priliv', + 'new_transfer' => 'Nov prenos', + 'new_transfers' => 'Nov prenos', + 'new_asset_account' => 'Nov račun sredstev', + 'new_expense_account' => 'Nov račun stroškov', + 'new_revenue_account' => 'Nov račun prihodkov', + 'new_liabilities_account' => 'Nova obveznost', + 'new_budget' => 'Nov proračun', + 'new_bill' => 'Nov račun', + 'block_account_logout' => 'Odjavljeni ste. Blokirani računi ne morejo uporabljati te spletne strani. Ali ste se registrirali z veljavnim e-poštnim naslovom?', + 'flash_success' => 'Uspelo je!', + 'flash_info' => 'Sporočilo', + 'flash_warning' => 'Opozorilo!', + 'flash_error' => 'Napaka!', + 'flash_danger' => 'Nevarnost!', + 'flash_info_multiple' => 'Tu je eno sporočilo | Tu je :count sporočil', + 'flash_error_multiple' => 'Tu je ena napaka | Tu je :count napak', + 'net_worth' => 'Neto vrednost', + 'help_for_this_page' => 'Pomoč za to stran', + 'help_for_this_page_body' => 'Več informacij o tej strani najdete v dokumentaciji.', + 'two_factor_welcome' => 'Zdravo!', + 'two_factor_enter_code' => 'Če želite nadaljevati, vnesite vašo dvofaktorsko kodo. Vaš program za prijavo jo lahko ustvari za vas.', + 'two_factor_code_here' => 'Tukaj vnesi kodo', + 'two_factor_title' => 'Dvofaktorska avtentikacija', + 'authenticate' => 'Avtentikacija', + 'two_factor_forgot_title' => 'Izguba dvofaktorske avtentikacije', + 'two_factor_forgot' => 'Pozabil sem svojo reč za dva koraka.', + 'two_factor_lost_header' => 'Nimate dostopa do dvofaktorske avtentikacije?', + 'two_factor_lost_intro' => 'Če ste izgubili tudi varnostne kode imate res smolo. Tega ne morete popraviti preko spletnega vmesnika. Imate dve možnosti.', + 'two_factor_lost_fix_self' => 'Če poganjate lastno namestitev Firefly III, preberite :site_owner in ga prosite, da ponastavi vaše preverjanje pristnosti v dveh korakih.', + 'mfa_backup_code' => 'V Firefly III si se prijavil z rezervno kodo. Te kode ne moreš več uporabiti zato jo na seznamu prečrtaj.', + 'pref_two_factor_new_backup_codes' => 'Pridobi nove varnostne kode', + 'pref_two_factor_backup_code_count' => 'Imate :count veljavno varnostno kodo.|Imate :count veljavnih varnostnih kod.', + '2fa_i_have_them' => 'Spravil sem jih!', + 'warning_much_data' => ':days dni podatkov se lahko nalaga kar nekaj časa.', + 'registered' => 'Uspešno ste se registrirali!', + 'Default asset account' => 'Privzeti premoženjski račun', + 'no_budget_pointer' => 'Zdi se, da še nimate proračuna. Ustvarite jih nekaj na strani proračuni. Proračuni vam lahko pomagajo spremljati stroške.', + 'no_bill_pointer' => 'Zdi se, da še nimate računov. Ustvarite jih na strani računi. Računi vam lahko pomagajo spremljati stroške.', + 'Savings account' => 'Varčevalni račun', + 'Credit card' => 'Kreditna kartica', + 'source_accounts' => 'Izvorni račun|Izvorni računi', + 'destination_accounts' => 'Ciljni račun|Ciljni računi', + 'user_id_is' => 'Vaše uporabniško ime je :user', + 'field_supports_markdown' => 'To polje podpira Markdown.', + 'need_more_help' => 'Če potrebujete več pomoči pri uporabi Firefly III, prosimo, da odprete zahtevek za pomoč na Githubu.', + 'reenable_intro_text' => 'Vodiča lahko ponovno aktiviraš.', + 'intro_boxes_after_refresh' => 'Info polja se ponovno pojavijo, ko osvežite stran.', + 'show_all_no_filter' => 'Pokaži vse transakcije brez omejitve datuma.', + 'expenses_by_category' => 'Stroški po kategorijah', + 'expenses_by_budget' => 'Stroški po proračunih', + 'income_by_category' => 'Prihodki po kategorijah', + 'expenses_by_asset_account' => 'Stroški po premoženjskih računih', + 'expenses_by_expense_account' => 'Stroški po računih stroškov', + 'cannot_redirect_to_account' => 'Oprostite, ne moremo vas preusmeriti na pravo stran.', + 'sum_of_expenses' => 'Vsota stroškov', + 'sum_of_income' => 'Vsota prihodkov', + 'liabilities' => 'Obveznosti', + 'spent_in_specific_budget' => 'Porabljeno v proračunu ":budget"', + 'spent_in_specific_double' => 'Porabljeno po računu/ih ":account"', + 'earned_in_specific_double' => 'Prisluženo po računu/ih ":account"', + 'source_account' => 'Izvorni račun', + 'source_account_reconciliation' => 'Pri usklajevalni transakciji ni možno urejati izvornega računa.', + 'destination_account' => 'Ciljni račun', + 'destination_account_reconciliation' => 'Pri usklajevalni transakciji ni možno urejati ciljnega računa.', + 'sum_of_expenses_in_budget' => 'Skupaj porabljeno v ":budget"', + 'left_in_budget_limit' => 'Na voljo za zapravljanje glede na proračun', + 'current_period' => 'Tekoče obdobje', + 'show_the_current_period_and_overview' => 'Pokaži trenutno obdobje in pregled', + 'pref_languages_locale' => 'Za ostale jezike, razen Angleščine, je potrebno na operacijski sistem namestiti prave jezikovne nastavitve. Če le-te niso nastavljene pravilno se valuta, datumi in zneski ne bodo pravilno prikazovali.', + 'budget_in_period' => 'Vse transakcije za proračun ":name" med :start in :end v :currency', + 'chart_budget_in_period' => 'Diagram vseh transakcij za proračun ":name" med :start in :end v :currency', + 'chart_budget_in_period_only_currency' => 'Proračunski znesek je v :currency, zato bodo na grafikonu prikazane samo transakcije v :currency.', + 'chart_account_in_period' => 'Grafikon vseh transakcij za račun ":name" (:balance) med :start in :end', + 'chart_category_in_period' => 'Grafikon vseh transakcij za kategorijo ":name" med :start in :end', + 'chart_category_all' => 'Grafikon vseh transakcij za kategorijo ":name"', + 'clone_withdrawal' => 'Kloniraj ta odliv', + 'clone_deposit' => 'Kloniraj ta priliv', + 'clone_transfer' => 'Kloniraj ta prenos', + 'multi_select_no_selection' => 'Nič ni izbrano', + 'multi_select_select_all' => 'Izberi vse', + 'multi_select_n_selected' => 'izbrano', + 'multi_select_all_selected' => 'Vse je izbrano', + 'multi_select_filter_placeholder' => 'Najdi..', + 'intro_next_label' => 'Naslednji', + 'intro_prev_label' => 'Predhodnji', + 'intro_skip_label' => 'Preskoči', + 'intro_done_label' => 'Končano', + 'between_dates_breadcrumb' => 'Med :start in :end', + 'all_journals_without_budget' => 'Vse transakcije brez proračuna', + 'journals_without_budget' => 'Transakcije brez proračuna', + 'all_journals_without_category' => 'Vse transakcije brez kategorije', + 'journals_without_category' => 'Transakcije brez kategorije', + 'all_journals_for_account' => 'Vse transakcije za račun :name', + 'chart_all_journals_for_account' => 'Grafikon vseh transakcij za račun :name', + 'journals_in_period_for_account' => 'Vse transakcije za račun ":name" med :start in :end', + 'journals_in_period_for_account_js' => 'Vse transakcije za račun {title} med {start} in {end}', + 'transferred' => 'Preneseno', + 'all_withdrawal' => 'Vsi stroški', + 'all_transactions' => 'Vse transakcije', + 'title_withdrawal_between' => 'Vsi stroški med :start in :end', + 'all_deposit' => 'Vsi dohodki', + 'title_deposit_between' => 'Vsi dohodki med :start in :end', + 'all_transfers' => 'Vsi prenosi', + 'title_transfers_between' => 'Vsi prenosi med :start in :end', + 'all_transfer' => 'Vsi prenosi', + 'all_journals_for_tag' => 'Vse transakcije za oznako ":tag"', + 'title_transfer_between' => 'Vse transakcije med :start in :end', + 'all_journals_for_category' => 'Vse transakcije v kategoriji :name', + 'all_journals_for_budget' => 'Vse transakcije za v proračunu :name', + 'chart_all_journals_for_budget' => 'Grafikon vseh transakcij za proračun :name', + 'journals_in_period_for_category' => 'Vse transakcije na računu ":name" med :start in :end', + 'journals_in_period_for_tag' => 'Vse transakcije z oznako :tag med :start in :end', + 'not_available_demo_user' => 'Funkcija ni na voljo za demo uporabnike.', + 'exchange_rate_instructions' => 'Račun sredstev "@name" sprejema samo transakcije v @native_currency. Če želite namesto tega uporabiti @foreign_currency, morate podati tudi znesek v @native_currency:', + 'transfer_exchange_rate_instructions' => 'Izvorni račun sredstev "@source_name" sprejema samo transakcije v @source_currency. Ciljni račun sredstev "@dest_name" pa sprejema samo transakcije v @dest_currency. Podati morate znesek v obeh valutah.', + 'transaction_data' => 'Podrobnosti transakcije', + 'invalid_server_configuration' => 'Neveljavna nastavitev strežnika', + 'invalid_locale_settings' => 'Firefly III ne more oblikovati denarnih zneskov, ker vašemu strežniku manjkajo zahtevani paketi. Obstajajo navodila za to.', + 'quickswitch' => 'Hitri preklop', + 'sign_in_to_start' => 'Za nadaljevanje se prijavi', + 'sign_in' => 'Prijava', + 'register_new_account' => 'Ustvari nov račun', + 'forgot_my_password' => 'Pozabil sem geslo', + 'problems_with_input' => 'Z vašim vnosom so težave.', + 'reset_password' => 'Ponastavite vaše geslo', + 'button_reset_password' => 'Ponastavite geslo', + 'reset_button' => 'Ponastavite', + 'want_to_login' => 'Želim se prijaviti', + 'login_page_title' => 'Prijava v Firefly III', + 'register_page_title' => 'Ustvari nov račun za Firefly III', + 'forgot_pw_page_title' => 'Ste pozabil geslo za Firefly III', + 'reset_pw_page_title' => 'Ponastavite geslo za Firefly III', + 'cannot_reset_demo_user' => 'Za demo uporabnika gesla ni mogoče ponastaviti.', + 'no_att_demo_user' => 'Demo uporabnik ne more naložiti prilog.', + 'button_register' => 'Registracija', + 'authorization' => 'Avtorizacija', + 'active_bills_only' => 'samo aktivni računi', + 'active_bills_only_total' => 'vsi aktivni računi', + 'active_exp_bills_only' => 'samo aktivni in pričakovani računi', + 'active_exp_bills_only_total' => 'samo aktivni in pričakovani računi', + 'per_period_sum_1D' => 'Predvideni dnevni stroški', + 'per_period_sum_1W' => 'Predvideni tedenski stroški', + 'per_period_sum_1M' => 'Predvideni mesečni stroški', + 'per_period_sum_3M' => 'Pričakovani četrtletni stroški', + 'per_period_sum_6M' => 'Predvideni polletni stroški', + 'per_period_sum_1Y' => 'Predvideni letni stroški', + 'average_per_bill' => 'povprečno po računu', + 'expected_total' => 'predvidena vsota', + 'reconciliation_account_name' => 'Usklajevanje :name (:currency)', + 'saved' => 'Shranjeno', + 'advanced_options' => 'Napredne možnosti', + 'advanced_options_explain' => 'Nekatere strani v Firefly III imajo za tem gumbom skrite napredne možnosti. Ta stran nima nič posebnega, vendar si oglejte še druge!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Spletne kljuke (Webhooks)', - 'webhooks_breadcrumb' => 'Spletne kljuke (Webhooks)', - 'no_webhook_messages' => 'Tukaj ni sporočil spletnih kljuk', - 'webhook_trigger_STORE_TRANSACTION' => 'Po ustvarjanju transakcije', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Po posodabljanju transakcije', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Po brisanju transakcije', - 'webhook_response_TRANSACTIONS' => 'Podrobnosti transakcije', - 'webhook_response_ACCOUNTS' => 'Podrobnosti računa', - 'webhook_response_none_NONE' => 'Ni podrobnosti', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Preglejte', - 'create_new_webhook' => 'Ustvari nov webhook', - 'webhooks_create_breadcrumb' => 'Ustvari nov webhook', - 'webhook_trigger_form_help' => 'Navedite, ob katerem dogodku se bo sprožil webhook', - 'webhook_response_form_help' => 'Navedite, kaj mora webhook predložiti URL-ju.', - 'webhook_delivery_form_help' => 'V kateri obliki mora webhook dostaviti podatke.', - 'webhook_active_form_help' => 'Webhook mora biti aktiven, sicer ne bo poklican.', - 'stored_new_webhook' => 'Shranjen nov webhook ":title"', - 'delete_webhook' => 'Izbriši Webhook', - 'deleted_webhook' => 'Izbrisan webhook ":title"', - 'edit_webhook' => 'Uredi webhook ":title"', - 'updated_webhook' => 'Posodobljen webhook ":title"', - 'edit_webhook_js' => 'Uredi webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'Webhook je bil sprožen ob navedeni transakciji. Počakajte, da se prikažejo rezultati.', - 'webhook_messages' => 'Webhook sporočilo', - 'view_message' => 'Poglej sporočilo', - 'view_attempts' => 'Ogled neuspelih poskusov', - 'message_content_title' => 'Vsebina sporočila Webhook', - 'message_content_help' => 'To je vsebina sporočila, ki je bilo poslano (ali poskuseno) s tem webhookom.', - 'attempt_content_title' => 'Poskusi Webhook', - 'attempt_content_help' => 'To so vsi neuspešni poskusi pošiljanja tega sporočila webhook na konfigurirani URL. Čez nekaj časa bo Firefly III nehal poskušati.', - 'no_attempts' => 'Neuspešnih poskusov ni. To je dobra stvar!', - 'webhook_attempt_at' => 'Poskus ob {moment}', - 'logs' => 'Logi', - 'response' => 'Odziv', - 'visit_webhook_url' => 'Obiščite URL webhooka', - 'reset_webhook_secret' => 'Ponastavi skrivnost webhooka', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") je bil shranjen.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") je posodobljen.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'onemogočeno', + 'no_webhook_messages' => 'Tukaj ni webhook sporočil', + 'webhook_trigger_STORE_TRANSACTION' => 'Po ustvarjanju transakcije', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Po posodabljanju transakcije', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Po brisanju transakcije', + 'webhook_response_TRANSACTIONS' => 'Podrobnosti transakcije', + 'webhook_response_ACCOUNTS' => 'Podrobnosti računa', + 'webhook_response_none_NONE' => 'Ni podrobnosti', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Preglejte', + 'create_new_webhook' => 'Ustvari nov webhook', + 'webhooks_create_breadcrumb' => 'Ustvari nov webhook', + 'webhook_trigger_form_help' => 'Navedite, ob katerem dogodku se bo sprožil webhook', + 'webhook_response_form_help' => 'Navedite, kaj mora webhook poslati po URL-ju.', + 'webhook_delivery_form_help' => 'V kateri obliki mora webhook dostaviti podatke.', + 'webhook_active_form_help' => 'Webhook mora biti aktiven, sicer ne bo poklican.', + 'stored_new_webhook' => 'Shranjen nov webhook ":title"', + 'delete_webhook' => 'Izbriši Webhook', + 'deleted_webhook' => 'Izbrisan webhook ":title"', + 'edit_webhook' => 'Uredi webhook ":title"', + 'updated_webhook' => 'Posodobljen webhook ":title"', + 'edit_webhook_js' => 'Uredi webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'Webhook je bil sprožen ob navedeni transakciji. Počakajte, da se prikažejo rezultati.', + 'webhook_messages' => 'Webhook sporočilo', + 'view_message' => 'Poglej sporočilo', + 'view_attempts' => 'Ogled neuspelih poskusov', + 'message_content_title' => 'Vsebina sporočila Webhook', + 'message_content_help' => 'To je vsebina sporočila, ki je bilo poslano (ali poskuseno) s tem webhookom.', + 'attempt_content_title' => 'Poskusi Webhook', + 'attempt_content_help' => 'To so vsi neuspešni poskusi pošiljanja tega sporočila webhook na konfigurirani URL. Čez nekaj časa bo Firefly III nehal poskušati.', + 'no_attempts' => 'Ni neuspešnih poskusov. To je dobra stvar!', + 'webhook_attempt_at' => 'Poskus ob {moment}', + 'logs' => 'Dnevniki', + 'response' => 'Odziv', + 'visit_webhook_url' => 'Obiščite URL webhooka', + 'reset_webhook_secret' => 'Ponastavi skrivno kodo webhooka', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") je bil shranjen.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") je bil posodobljen.', // API access - 'authorization_request' => 'Firefly III v:version Zahteva za avtorizacijo', - 'authorization_request_intro' => ':client je zahteval dostop do upravljanja tvojih financ. Dovoliš da :client dostopa do teh podatkov?', - 'authorization_request_site' => 'Preusmerjeni boste na :url, ki bo nato lahko dostopal do vaših podatkov Firefly III.', - 'authorization_request_invalid' => 'Ta zahteva za dostop je neveljavna. Nikoli več ne sledite tej povezavi.', - 'scopes_will_be_able' => 'Ta aplikacija bo lahko:', - 'button_authorize' => 'Overi', - 'none_in_select_list' => '(brez)', - 'no_piggy_bank' => '(brez hranilnika)', - 'name_in_currency' => ':name v :currency', - 'paid_in_currency' => 'Paid v :currency', - 'unpaid_in_currency' => 'Unpaid v :currency', - 'is_alpha_warning' => 'Poganjaš ALFA verzijo. Bodi pozoren na hrošče in težave.', - 'is_beta_warning' => 'Poganjaš BETA verzijo. Bodi pozoren na hrošče in težave.', - 'all_destination_accounts' => 'Ciljni računi', - 'all_source_accounts' => 'Izvorni računi', - 'back_to_index' => 'Nazaj na kazalo', - 'cant_logout_guard' => 'Firefly III vas ne more odjaviti.', - 'internal_reference' => 'Interna referenca', + 'authorization_request' => 'Firefly III v:version Zahteva za avtorizacijo', + 'authorization_request_intro' => ':client je zahteval dostop do upravljanja tvojih financ. Dovoliš da :client dostopa do teh podatkov?', + 'authorization_request_site' => 'Preusmerjeni boste na :url, ki bo nato lahko dostopal do vaših podatkov Firefly III.', + 'authorization_request_invalid' => 'Ta zahteva za dostop je neveljavna. Nikoli več ne sledite tej povezavi.', + 'scopes_will_be_able' => 'Ta aplikacija bo lahko:', + 'button_authorize' => 'Avtoriziraj', + 'none_in_select_list' => '(brez)', + 'no_piggy_bank' => '(brez hranilnika)', + 'name_in_currency' => ':name v :currency', + 'paid_in_currency' => 'Plačano v :currency', + 'unpaid_in_currency' => 'Neplačano v :currency', + 'is_alpha_warning' => 'Poganjate ALFA verzijo. Bodite pozorni na hrošče in težave.', + 'is_beta_warning' => 'Poganjate BETA verzijo. Bodite pozorni na hrošče in težave.', + 'all_destination_accounts' => 'Ciljni računi', + 'all_source_accounts' => 'Izvorni računi', + 'back_to_index' => 'Nazaj na kazalo', + 'cant_logout_guard' => 'Firefly III vas ne more odjaviti.', + 'internal_reference' => 'Interna referenca', // check for updates: - 'update_check_title' => 'Preveri za posodobitve', - 'admin_update_check_title' => 'Samodejno preverjaj za posodobitve', - 'admin_update_check_explain' => 'Firefly III lahko samodejno preverja posodobitve. Če to omogočiš, bomo na Github-u preverjali ali je na voljo nova različica in te o tem obvestili. To obvestilo lahko preizkusiš z gumbom na desni. Označi spodaj, če želiš, da Firefly III preveri, ali so posodobitve na voljo.', - 'check_for_updates_permission' => 'Firefly III lahko preveri posodobitve, vendar potrebuje vaše dovoljenje. Pojdite v skrbništvo, da označite, ali želite omogočiti to funkcijo.', - 'updates_ask_me_later' => 'Vprašaj me kasneje', - 'updates_do_not_check' => 'Ne preverjaj posodobitev', - 'updates_enable_check' => 'Omogoči preverjanje posodobitev', - 'admin_update_check_now_title' => 'Preveri za posodobitve zdaj', - 'admin_update_check_now_explain' => 'Če pritisnete gumb, bo Firefly III preveril, ali je vaša trenutna različica zadnja.', - 'check_for_updates_button' => 'Preveri zdaj!', - 'update_new_version_alert' => 'Na voljo je nova različica Firefly III. Trenutno uporabljaš :your_version, najnovejša različica pa je :new_version, izdana :date.', - 'update_version_beta' => 'To je BETA verzija. Lahko naletiš na težave.', - 'update_version_alpha' => 'To je ALFA verzija. Lahko naletiš na težave.', - 'update_current_version_alert' => 'Uporabljaš :version, ki je zadnja razpoložljiva izdaja.', - 'update_newer_version_alert' => 'Uporabljaš :your_version, ki je novejša od zadnje izdaje, :new_version.', - 'update_check_error' => 'Pri preverjanju posodobitev smo naleteli na težavo: :error', - 'unknown_error' => 'Nepoznana napaka. Oprosti :)', - 'just_new_release' => 'Na voljo je nova verzija! Verzija :version je bila izdana :date. Je zelo sveža, zato počakaj nekaj dni da se stabilizira.', - 'disabled_but_check' => 'Onemogočili ste preverjanje posodobitev. Zato ne pozabite občasno preveriti, ali so na voljo posodobitve. Hvala vam!', - 'admin_update_channel_title' => 'Kanal posodobitev', - 'admin_update_channel_explain' => 'Firefly III ima tri "kanale" posodobitev, ki določajo, kako hitro prejmete nove funkcije, izboljšave in odprave napak. Uporabite kanal "beta", če ste pustolovec, in "alfa", če radi živite nevarno življenje.', - 'update_channel_stable' => 'Stabilno. Vse naj bi delovalo po pričakovanjih.', - 'update_channel_beta' => 'Beta. Nove funkcionalnosti, vendar ni nujno, da vse deluje.', - 'update_channel_alpha' => 'Alfa. Noter vržemo razne stvari da vidimo kaj se "prime".', + 'update_check_title' => 'Preverite za posodobitve', + 'admin_update_check_title' => 'Samodejno preverjaj za posodobitve', + 'admin_update_check_explain' => 'Firefly III lahko samodejno preverja posodobitve. Če to omogočite, bomo na Github-u preverjali ali je na voljo nova različica in vas o tem obvestili. To obvestilo lahko preizkusite z gumbom na desni. Označite spodaj, če želite, da Firefly III preveri, ali so posodobitve na voljo.', + 'check_for_updates_permission' => 'Firefly III lahko preveri posodobitve, vendar potrebuje vaše dovoljenje. Pojdite v skrbništvo, da označite, ali želite omogočiti to funkcijo.', + 'updates_ask_me_later' => 'Vprašaj me kasneje', + 'updates_do_not_check' => 'Ne preverjaj posodobitev', + 'updates_enable_check' => 'Omogoči preverjanje posodobitev', + 'admin_update_check_now_title' => 'Preveri za posodobitve zdaj', + 'admin_update_check_now_explain' => 'Če pritisnete gumb, bo Firefly III preveril, ali je vaša trenutna različica zadnja.', + 'check_for_updates_button' => 'Preveri zdaj!', + 'update_new_version_alert' => 'Na voljo je nova različica Firefly III. Trenutno uporabljate :your_version, najnovejša različica pa je :new_version, izdana :date.', + 'update_version_beta' => 'To je BETA verzija. Lahko naletite na težave.', + 'update_version_alpha' => 'To je ALFA verzija. Lahko naletite na težave.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Uporabljate :version, ki je zadnja razpoložljiva izdaja.', + 'update_newer_version_alert' => 'Uporabljate :your_version, ki je novejša od zadnje izdaje, :new_version.', + 'update_check_error' => 'Pri preverjanju posodobitev smo naleteli na težavo: :error', + 'unknown_error' => 'Neznana napaka. Oprostite prosim.', + 'disabled_but_check' => 'Onemogočili ste preverjanje posodobitev. Zato ne pozabite občasno preveriti, ali so na voljo posodobitve. Hvala vam!', + 'admin_update_channel_title' => 'Kanal posodobitev', + 'admin_update_channel_explain' => 'Firefly III ima tri "kanale" posodobitev, ki določajo, kako hitro prejmete nove funkcije, izboljšave in odprave napak. Uporabite kanal "beta", če ste pustolovec, in "alfa", če radi živite nevarno življenje.', + 'update_channel_stable' => 'Stabilno. Vse naj bi delovalo po pričakovanjih.', + 'update_channel_beta' => 'Beta. Nove funkcionalnosti, vendar ni nujno, da vse deluje.', + 'update_channel_alpha' => 'Alfa. Noter vržemo razne stvari da vidimo kaj se "prime".', // search - 'search' => 'Iskanje', - 'search_query' => 'Poizvedba', - 'search_found_transactions' => 'Firefly III je našel :count transakcijo v :time sekundah.|Firefly III je našel :count transakcij v :time sekundah.', - 'search_found_more_transactions' => 'Firefly III je našel več kot :count transakcij v :time sekundah.', - 'search_for_query' => 'Firefly III išče transakcije, ki vsebujejo vse besede: :query', - 'invalid_operators_list' => 'Ti iskalni parametri niso veljavni in so bili prezrti.', + 'search' => 'Iskanje', + 'search_query' => 'Poizvedba', + 'search_found_transactions' => 'Firefly III je našel :count transakcijo v :time sekundah.|Firefly III je našel :count transakcij v :time sekundah.', + 'search_found_more_transactions' => 'Firefly III je našel več kot :count transakcij v :time sekundah.', + 'search_for_query' => 'Firefly III išče transakcije, ki vsebujejo vse besede: :query', + 'invalid_operators_list' => 'Ti iskalni parametri niso veljavni in so bili prezrti.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Datum transakcije je ":value"', 'search_modifier_not_date_on' => 'Datum transakcije ni ":value"', 'search_modifier_reconciled' => 'Transakcija je usklajena', @@ -370,10 +371,10 @@ return [ 'search_modifier_not_no_external_id' => 'Transakcija mora imeti (poljubni) zunanji ID', 'search_modifier_internal_reference_is' => 'Notranja referenca je ":value"', 'search_modifier_not_internal_reference_is' => 'Notranja referenca ni ":value"', - 'search_modifier_description_starts' => 'Opis se začne s/z ":value"', - 'search_modifier_not_description_starts' => 'Opis se ne začne s/z ":value"', - 'search_modifier_description_ends' => 'Opis se konča s/z ":value"', - 'search_modifier_not_description_ends' => 'Opis se ne konča s/z ":value"', + 'search_modifier_description_starts' => 'Opis se začne s ":value"', + 'search_modifier_not_description_starts' => 'Opis se ne začne s ":value"', + 'search_modifier_description_ends' => 'Opis se konča s ":value"', + 'search_modifier_not_description_ends' => 'Opis se ne konča s ":value"', 'search_modifier_description_contains' => 'Opis vsebuje ":value"', 'search_modifier_not_description_contains' => 'Opis ne vsebuje ":value"', 'search_modifier_description_is' => 'Opis je točno ":value"', @@ -391,10 +392,10 @@ return [ 'search_modifier_not_has_any_budget' => 'Transakcija ne sme imeti proračuna', 'search_modifier_has_any_budget' => 'Transakcija mora imeti (poljubni) proračun', 'search_modifier_not_has_no_budget' => 'Transakcija mora imeti (poljubni) proračun', - 'search_modifier_has_no_bill' => 'Transakcija ne sme imeti trajnika', - 'search_modifier_not_has_no_bill' => 'Transakcija mora imeti (poljubni) trajnik', - 'search_modifier_has_any_bill' => 'Transakcija mora imeti (poljubni) trajnik', - 'search_modifier_not_has_any_bill' => 'Transakcija ne sme imeti trajnika', + 'search_modifier_has_no_bill' => 'Transakcija ne sme imeti računa', + 'search_modifier_not_has_no_bill' => 'Transakcija mora imeti (poljuben) račun', + 'search_modifier_has_any_bill' => 'Transakcija mora imeti (poljuben) račun', + 'search_modifier_not_has_any_bill' => 'Transakcija ne sme imeti računa', 'search_modifier_has_no_tag' => 'Transakcija ne sme imeti oznak', 'search_modifier_not_has_any_tag' => 'Transakcija ne sme imeti oznak', 'search_modifier_not_has_no_tag' => 'Transakcija nima (poljubne) oznake', @@ -403,8 +404,8 @@ return [ 'search_modifier_not_notes_contains' => 'Opombe o transakciji ne vsebujejo ":value"', 'search_modifier_notes_starts' => 'Opombe o transakciji se začnejo z ":value"', 'search_modifier_not_notes_starts' => 'Opombe o transakciji se ne začnejo z ":value"', - 'search_modifier_notes_ends' => 'Opombe o transakciji se končajo z ":value"', - 'search_modifier_not_notes_ends' => 'Opombe o transakciji se ne končajo z ":value"', + 'search_modifier_notes_ends' => 'Opombe o transakciji se končajo s ":value"', + 'search_modifier_not_notes_ends' => 'Opombe o transakciji se ne končajo s ":value"', 'search_modifier_notes_is' => 'Opombe o transakciji so točno ":value"', 'search_modifier_not_notes_is' => 'Opombe o transakciji natanko niso ":value"', 'search_modifier_no_notes' => 'Transakcija nima opomb', @@ -423,8 +424,8 @@ return [ 'search_modifier_not_source_account_contains' => 'Ime izvornega računa ne vsebuje ":value"', 'search_modifier_source_account_starts' => 'Ime izvornega računa se začne z ":value"', 'search_modifier_not_source_account_starts' => 'Ime izvornega računa se ne začne z ":value"', - 'search_modifier_source_account_ends' => 'Ime izvornega računa se konča z ":value"', - 'search_modifier_not_source_account_ends' => 'Ime izvornega računa se ne konča z ":value"', + 'search_modifier_source_account_ends' => 'Ime izvornega računa se konča s ":value"', + 'search_modifier_not_source_account_ends' => 'Ime izvornega računa se ne konča s ":value"', 'search_modifier_source_account_id' => 'ID izvornega računa je :value', 'search_modifier_not_source_account_id' => 'ID izvornega računa ni :value', 'search_modifier_source_account_nr_is' => 'Izvorna številka računa (IBAN) je ":value"', @@ -455,19 +456,23 @@ return [ 'search_modifier_not_destination_account_nr_contains' => 'Številka ciljnega računa (IBAN) ne vsebuje ":value"', 'search_modifier_destination_account_nr_starts' => 'Številka ciljnega računa (IBAN) se začne z ":value"', 'search_modifier_not_destination_account_nr_starts' => 'Številka ciljnega računa (IBAN) se ne začne z ":value"', - 'search_modifier_destination_account_nr_ends' => 'Številka ciljnega računa (IBAN) se konča z ":value"', - 'search_modifier_not_destination_account_nr_ends' => 'Številka ciljnega računa (IBAN) se ne konča z ":value"', - 'search_modifier_account_id' => 'ID-ji izvornega ali ciljnega računa je/so: :value', - 'search_modifier_not_account_id' => 'ID-ji izvornega ali ciljnega računa ni/niso: :value', + 'search_modifier_destination_account_nr_ends' => 'Številka ciljnega računa (IBAN) se konča s ":value"', + 'search_modifier_not_destination_account_nr_ends' => 'Številka ciljnega računa (IBAN) se ne konča s ":value"', + 'search_modifier_account_id' => 'ID-ji izvornega ali ciljnega računa so: :value', + 'search_modifier_not_account_id' => 'ID-ji izvornega ali ciljnega računa ni: :value', 'search_modifier_category_is' => 'Kategorija je ":value"', 'search_modifier_not_category_is' => 'Kategorija ni ":value"', 'search_modifier_budget_is' => 'Proračun je ":value"', 'search_modifier_not_budget_is' => 'Proračun ni ":value"', - 'search_modifier_bill_is' => 'Trajnik je ":value"', - 'search_modifier_not_bill_is' => 'Trajnik ni ":value"', + 'search_modifier_bill_is' => 'Račun je ":value"', + 'search_modifier_not_bill_is' => 'Račun ni ":value"', 'search_modifier_transaction_type' => 'Vrsta transakcije je ":value"', 'search_modifier_not_transaction_type' => 'Vrsta transakcije ni ":value"', 'search_modifier_tag_is' => 'Oznaka je ":value"', + 'search_modifier_tag_contains' => 'Oznaka vsebuje ":value"', + 'search_modifier_not_tag_contains' => 'Oznaka ne vsebuje ":value"', + 'search_modifier_tag_ends' => 'Oznaka se konča z ":value"', + 'search_modifier_tag_starts' => 'Oznaka se začne z ":value"', 'search_modifier_not_tag_is' => 'Nobena oznaka ni ":value"', 'search_modifier_date_on_year' => 'Transakcija je v letu ":value"', 'search_modifier_not_date_on_year' => 'Transakcija ni v letu ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Transakcija je v ali po mesecu ":value"', 'search_modifier_date_after_day' => 'Transakcija je po ali na dan v mesecu ":value"', - // new 'search_modifier_tag_is_not' => 'Nobena oznaka ni ":value', 'search_modifier_not_tag_is_not' => 'Oznaka je ":value"', @@ -490,16 +494,16 @@ return [ 'search_modifier_not_account_is' => 'Noben račun ni ":value"', 'search_modifier_account_contains' => 'Kateri koli račun vsebuje ":value"', 'search_modifier_not_account_contains' => 'Noben račun ne vsebuje ":value"', - 'search_modifier_account_ends' => 'Oba računa se končata z ":value"', - 'search_modifier_not_account_ends' => 'Noben račun se ne konča z ":value"', + 'search_modifier_account_ends' => 'Oba računa se končata s ":value"', + 'search_modifier_not_account_ends' => 'Noben račun se ne konča s ":value"', 'search_modifier_account_starts' => 'Oba računa se začneta z ":value"', 'search_modifier_not_account_starts' => 'Noben račun se ne začne z ":value"', 'search_modifier_account_nr_is' => 'Številka računa/IBAN je ":value"', 'search_modifier_not_account_nr_is' => 'Nobena številka računa/IBAN ni ":value"', 'search_modifier_account_nr_contains' => 'Številka računa/IBAN vsebuje ":value"', 'search_modifier_not_account_nr_contains' => 'Nobena številka računa / IBAN ne vsebuje ":value"', - 'search_modifier_account_nr_ends' => 'Številka računa / IBAN se konča z ":value"', - 'search_modifier_not_account_nr_ends' => 'Nobena številka računa / IBAN se ne konča z ":value"', + 'search_modifier_account_nr_ends' => 'Številka računa / IBAN se konča s ":value"', + 'search_modifier_not_account_nr_ends' => 'Nobena številka računa / IBAN se ne konča s ":value"', 'search_modifier_account_nr_starts' => 'Številka računa/IBAN se začne z ":value"', 'search_modifier_not_account_nr_starts' => 'Nobena številka računa / IBAN se ne začne z ":value"', 'search_modifier_category_contains' => 'Kategorija vsebuje ":value"', @@ -510,34 +514,34 @@ return [ 'search_modifier_not_category_starts' => 'Kategorija se ne začne z ":value"', 'search_modifier_budget_contains' => 'Proračun vsebuje ":value"', 'search_modifier_not_budget_contains' => 'Proračun ne vsebuje ":value"', - 'search_modifier_budget_ends' => 'Proračun se konča z ":value"', + 'search_modifier_budget_ends' => 'Proračun se konča s ":value"', 'search_modifier_not_budget_ends' => 'Proračun se ne konča na ":value"', 'search_modifier_budget_starts' => 'Proračun se začne z ":value"', 'search_modifier_not_budget_starts' => 'Proračun se ne začne z ":value"', - 'search_modifier_bill_contains' => 'Trajnik vsebuje ":value"', - 'search_modifier_not_bill_contains' => 'Trajnik ne vsebuje ":value"', - 'search_modifier_bill_ends' => 'Trajnik se konča z ":value"', - 'search_modifier_not_bill_ends' => 'Trajnik se ne konča na ":value"', - 'search_modifier_bill_starts' => 'Trajnik se začne z ":value"', - 'search_modifier_not_bill_starts' => 'Trajnik se ne začne z ":value"', + 'search_modifier_bill_contains' => 'Račun vsebuje ":value"', + 'search_modifier_not_bill_contains' => 'Račun ne vsebuje ":value"', + 'search_modifier_bill_ends' => 'Račun se konča s ":value"', + 'search_modifier_not_bill_ends' => 'Račun se ne konča na ":value"', + 'search_modifier_bill_starts' => 'Račun se začne z ":value"', + 'search_modifier_not_bill_starts' => 'Račun se ne začne z ":value"', 'search_modifier_external_id_contains' => 'Zunanji ID vsebuje ":value"', 'search_modifier_not_external_id_contains' => 'Zunanji ID ne vsebuje ":value"', - 'search_modifier_external_id_ends' => 'Zunanji ID se konča z ":value"', - 'search_modifier_not_external_id_ends' => 'Zunanji ID se ne konča z ":value"', + 'search_modifier_external_id_ends' => 'Zunanji ID se konča s ":value"', + 'search_modifier_not_external_id_ends' => 'Zunanji ID se ne konča s ":value"', 'search_modifier_external_id_starts' => 'Zunanji ID se začne z ":value"', 'search_modifier_not_external_id_starts' => 'Zunanji ID se ne začne z ":value"', 'search_modifier_internal_reference_contains' => 'Notranja referenca vsebuje ":value"', 'search_modifier_not_internal_reference_contains' => 'Notranja referenca ne vsebuje ":value"', - 'search_modifier_internal_reference_ends' => 'Notranja referenca se konča z ":value"', + 'search_modifier_internal_reference_ends' => 'Notranja referenca se konča s ":value"', 'search_modifier_internal_reference_starts' => 'Notranja referenca se začne z ":value"', - 'search_modifier_not_internal_reference_ends' => 'Notranja referenca se ne konča z ":value"', + 'search_modifier_not_internal_reference_ends' => 'Notranja referenca se ne konča s ":value"', 'search_modifier_not_internal_reference_starts' => 'Notranja referenca se ne začne z ":value"', 'search_modifier_external_url_is' => 'Zunanji URL je ":value"', 'search_modifier_not_external_url_is' => 'Zunanji URL ni ":value"', 'search_modifier_external_url_contains' => 'Zunanji URL vsebuje ":value"', 'search_modifier_not_external_url_contains' => 'Zunanji URL ne vsebuje ":value"', - 'search_modifier_external_url_ends' => 'Zunanji URL se konča z ":value"', - 'search_modifier_not_external_url_ends' => 'Zunanji URL se ne konča z ":value"', + 'search_modifier_external_url_ends' => 'Zunanji URL se konča s ":value"', + 'search_modifier_not_external_url_ends' => 'Zunanji URL se ne konča s ":value"', 'search_modifier_external_url_starts' => 'Zunanji URL se začne z ":value"', 'search_modifier_not_external_url_starts' => 'Zunanji URL se ne začne z ":value"', 'search_modifier_has_no_attachments' => 'Transakcija nima prilog', @@ -692,25 +696,25 @@ return [ 'search_modifier_attachment_name_is' => 'Ime katere koli priloge je ":value"', 'search_modifier_attachment_name_contains' => 'Vsako ime priloge vsebuje ":value"', 'search_modifier_attachment_name_starts' => 'Vsako ime priloge se začne z ":value"', - 'search_modifier_attachment_name_ends' => 'Vsako ime priloge se konča z ":value"', + 'search_modifier_attachment_name_ends' => 'Vsako ime priloge se konča s ":value"', 'search_modifier_attachment_notes_are' => 'Vse opombe k prilogi so ":value"', 'search_modifier_attachment_notes_contains' => 'Vse opombe k prilogi vsebujejo ":value"', 'search_modifier_attachment_notes_starts' => 'Vse opombe k prilogi se začnejo z ":value"', - 'search_modifier_attachment_notes_ends' => 'Opombe katere koli priloge se končajo z ":value"', + 'search_modifier_attachment_notes_ends' => 'Opombe katere koli priloge se končajo s ":value"', 'search_modifier_not_attachment_name_is' => 'Ime nobene priloge ni ":value"', 'search_modifier_not_attachment_name_contains' => 'Ime nobene priloge ne vsebuje ":value"', 'search_modifier_not_attachment_name_starts' => 'Ime nobene priloge se ne začne z ":value"', - 'search_modifier_not_attachment_name_ends' => 'Ime nobene priloge se ne konča z ":value"', + 'search_modifier_not_attachment_name_ends' => 'Ime nobene priloge se ne konča s ":value"', 'search_modifier_not_attachment_notes_are' => 'Opombe k prilogi niso »:value«', 'search_modifier_not_attachment_notes_contains' => 'Opombe k prilogi ne vsebujejo ":value"', 'search_modifier_not_attachment_notes_starts' => 'Vse opombe k prilogi se začnejo z ":value"', - 'search_modifier_not_attachment_notes_ends' => 'Opombe k prilogi se ne končajo z ":value"', + 'search_modifier_not_attachment_notes_ends' => 'Opombe k prilogi se ne končajo s ":value"', 'search_modifier_sepa_ct_is' => 'SEPA CT je ":value"', - 'update_rule_from_query' => 'Posodobi pravilo ":rule" iz iskalne poizvedbe', + 'update_rule_from_query' => 'Posodobite pravilo ":rule" iz iskalne poizvedbe', 'create_rule_from_query' => 'Ustvari novo pravilo iz iskalne poizvedbe', 'rule_from_search_words' => 'Mehanizem pravil težko obravnava ":string". Predlagano pravilo, ki ustreza vaši iskalni poizvedbi, lahko daje drugačne rezultate. Pazljivo preverite sprožilce pravila.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,12 +725,11 @@ return [ * */ - // END 'modifiers_applies_are' => 'Naslednji modifikatorji se uporabljajo tudi za iskanje:', 'general_search_error' => 'Pri iskanju je prišlo do napake. Za več informacij preverite datoteke dnevnika.', 'search_box' => 'Iskanje', - 'search_box_intro' => 'Dobrodošli v iskalni funkciji Firefly III. V polje vnesi iskalno poizvedbo. Preverite datoteko za pomoč, ker je iskanje precej napredno.', + 'search_box_intro' => 'Dobrodošli v iskalni funkciji Firefly III. V polje vnesite iskalno poizvedbo. Preverite datoteko za pomoč, ker je iskanje precej napredno.', 'search_error' => 'Napaka med iskanjem', 'search_searching' => 'Iščem...', 'search_results' => 'Rezultati iskanja', @@ -747,33 +750,35 @@ return [ // rules 'is_not_rule_trigger' => 'Ni', 'cannot_fire_inactive_rules' => 'Neaktivnih pravil ne morete izvajati.', + 'show_triggers' => 'Prikaži sprožilce', + 'show_actions' => 'Prikaži dejanja', 'rules' => 'Pravila', 'rule_name' => 'Naziv pravila', 'rule_triggers' => 'Pravilo se sproži, ko', 'rule_actions' => 'Pravilo bo', 'new_rule' => 'Novo pravilo', 'new_rule_group' => 'Nova skupina pravil', - 'rule_priority_up' => 'Pravilu povišaj prioriteto', - 'rule_priority_down' => 'Pravilu znižaj prioriteto', + 'rule_priority_up' => 'Pravilu povišajte prioriteto', + 'rule_priority_down' => 'Pravilu znižajte prioriteto', 'make_new_rule_group' => 'Ustvari novo skupino pravil', 'store_new_rule_group' => 'Shrani novo skupino pravil', - 'created_new_rule_group' => 'Nova skupino pravil ":title" shranjena!', - 'updated_rule_group' => 'Skupina pravil ":title" uspešno posodobljena.', + 'created_new_rule_group' => 'Nova skupina pravil ":title" je shranjena!', + 'updated_rule_group' => 'Skupina pravil ":title" je uspešno posodobljena.', 'edit_rule_group' => 'Uredi skupino pravil ":title"', 'duplicate_rule' => 'Ustvari dvojnik pravila ":title"', 'rule_copy_of' => 'Kopija ":title"', 'duplicated_rule' => 'Pravilo ":title" podvojeno v ":newTitle"', 'delete_rule_group' => 'Izbriši skupino pravil ":title"', - 'deleted_rule_group' => 'Skupina pravil ":title" izbrisana', - 'update_rule_group' => 'Posodobi skupino pravil', + 'deleted_rule_group' => 'Skupina pravil ":title" je izbrisana', + 'update_rule_group' => 'Posodobite skupino pravil', 'no_rules_in_group' => 'V tej skupini ni pravil', 'move_rule_group_up' => 'Premakni skupino pravil gor', 'move_rule_group_down' => 'Premakni skupino pravil dol', 'save_rules_by_moving' => 'Shranite to pravilo tako, da ga premaknete v drugo skupino pravil:|Shranite ta pravila tako, da jih premaknete v drugo skupino pravil:', 'make_new_rule' => 'Ustvari novo pravilo v skupini ":title"', 'make_new_rule_no_group' => 'Ustvari novo pravilo', - 'instructions_rule_from_bill' => 'Da povežemo transakcije z novim trajnikom ":name" bo Firefly III ustvaril pravilo, ki bo samodejno preverjalo vnesene transakcije. Preveri podrobnosti pravila spodaj in pravilo shrani.', - 'instructions_rule_from_journal' => 'Ustvari pravilo na podlagi transakcije. Dopolni ali uredi spodnji obrazec.', + 'instructions_rule_from_bill' => 'Da povežemo transakcije z novim računom ":name" bo Firefly III ustvaril pravilo, ki bo samodejno preverjalo vnesene transakcije. Preverite podrobnosti spodnjega pravila in pravilo shranite.', + 'instructions_rule_from_journal' => 'Ustvarite pravilo na podlagi transakcije. Dopolnite ali uredite spodnji obrazec.', 'rule_is_strict' => 'strogo pravilo', 'rule_is_not_strict' => 'togo pravilo', 'rule_help_stop_processing' => 'Ko potrdite to polje, se poznejša pravila v tej skupini ne bodo izvajala.', @@ -782,12 +787,12 @@ return [ 'stored_new_rule' => 'Shranjeno novo pravilo z naslovom ":title"', 'deleted_rule' => 'Pravilo z naslovom ":title" izbrisano', 'store_new_rule' => 'Shrani novo pravilo', - 'updated_rule' => 'Pravilo z naslovom ":title" posodobljeno', + 'updated_rule' => 'Pravilo z naslovom ":title" je posodobljeno', 'default_rule_group_name' => 'Privzeto pravilo', 'default_rule_group_description' => 'Vsa pravila ki niso v skupini.', 'trigger' => 'Sprožilec', 'trigger_value' => 'Sprožilec na vrednost', - 'stop_processing_other_triggers' => 'Ustavi izvajanje drugih prožilcev', + 'stop_processing_other_triggers' => 'Ustavi izvajanje drugih sprožilcev', 'add_rule_trigger' => 'Dodaj nov sprožilec', 'action' => 'Dejanje', 'action_value' => 'Vrednost dejanja', @@ -796,17 +801,17 @@ return [ 'edit_rule' => 'Uredi pravilo ":title"', 'delete_rule' => 'Izbriši pravilo ":title"', 'update_rule' => 'Uredi pravilo', - 'test_rule_triggers' => 'Poglej ujemajoče transakcije', + 'test_rule_triggers' => 'Poglej ujemajoče se transakcije', 'warning_no_matching_transactions' => 'Ni ustreznih transakcij.', 'warning_no_valid_triggers' => 'Sprožilci niso veljavni.', - 'apply_rule_selection' => 'Uporabite pravilo ":title" za izbor transakcij', - 'apply_rule_selection_intro' => 'Pravila, kot je ":title", se običajno uporabljajo samo za nove ali posodobljene transakcije, vendar lahko označiš da jih Firefly III zažene ob izbiri obstoječih transakcij. To je lahko uporabno, če ste posodobili pravilo in morate spremembe uporabiti za vse druge transakcije.', + 'apply_rule_selection' => 'Uporabi pravilo ":title" za izbor transakcij', + 'apply_rule_selection_intro' => 'Pravila, kot je ":title", se običajno uporabljajo samo za nove ali posodobljene transakcije, vendar lahko označite da jih Firefly III zažene ob izbiri obstoječih transakcij. To je lahko uporabno, če ste posodobili pravilo in morate spremembe uporabiti za vse druge transakcije.', 'include_transactions_from_accounts' => 'Vključi transakcije iz teh računov', - 'include' => 'Vključi?', + 'include' => 'Vključim?', 'applied_rule_selection' => '{0} Pravilo »:title« ni spremenilo nobene transakcije v vašem izboru.|[1] Eno transakcijo v vašem izboru je spremenilo pravilo »:title«.|[2,*] :count transakcij v vašem izboru je spremenilo pravilo ":naslov".', 'execute' => 'Izvedi', 'apply_rule_group_selection' => 'Uporabite skupino pravil ":title" za izbor transakcij', - 'apply_rule_group_selection_intro' => 'Skupine pravil, kot je ":title", se običajno uporabljajo samo za nove ali posodobljene transakcije, vendar lahko označiš da jih Firefly III zažene ob izbiri obstoječih transakcij. To je lahko uporabno, če ste posodobili pravilo in morate spremembe uporabiti za vse druge transakcije.', + 'apply_rule_group_selection_intro' => 'Skupine pravil, kot je ":title", se običajno uporabljajo samo za nove ali posodobljene transakcije, vendar lahko označite da jih Firefly III zažene ob izbiri obstoječih transakcij. To je lahko uporabno, če ste posodobili pravilo in morate spremembe uporabiti za vse druge transakcije.', 'applied_rule_group_selection' => 'Skupina pravil ":title" je bila uporabljena za vašo izbiro.', // actions and triggers @@ -814,12 +819,11 @@ return [ 'rule_trigger_update_journal' => 'Ko je transakcija posodobljena', 'rule_trigger_user_action' => 'Dejanje uporabnika je ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Ime izvornega računa se začne z ...', 'rule_trigger_source_account_starts' => 'Ime izvornega računa se začne z ":trigger_value"', - 'rule_trigger_source_account_ends_choice' => 'Ime izvornega računa se konča s/z ...', - 'rule_trigger_source_account_ends' => 'Ime izvornega računa se konča s/z ":trigger_value"', + 'rule_trigger_source_account_ends_choice' => 'Ime izvornega računa se konča s..', + 'rule_trigger_source_account_ends' => 'Ime izvornega računa se konča s ":trigger_value"', 'rule_trigger_source_account_is_choice' => 'Ime izvornega računa je ...', 'rule_trigger_source_account_is' => 'Ime izvornega računa je ":trigger_value"', 'rule_trigger_source_account_contains_choice' => 'Ime izvornega računa vsebuje ...', @@ -838,24 +842,24 @@ return [ 'rule_trigger_destination_is_cash' => 'Ciljni račun je (gotovinski) račun', 'rule_trigger_source_account_nr_starts_choice' => 'Izvorna številka računa / IBAN se začne z ...', 'rule_trigger_source_account_nr_starts' => 'Izvorna številka računa / IBAN se začne z ":trigger_value"', - 'rule_trigger_source_account_nr_ends_choice' => 'Izvorna številka računa / IBAN se konča z ...', - 'rule_trigger_source_account_nr_ends' => 'Izvorna številka računa / IBAN se konča z ":trigger_value"', + 'rule_trigger_source_account_nr_ends_choice' => 'Izvorna številka računa / IBAN se konča s..', + 'rule_trigger_source_account_nr_ends' => 'Izvorna številka računa / IBAN se konča s ":trigger_value"', 'rule_trigger_source_account_nr_is_choice' => 'Izvorna številka računa / IBAN je ...', 'rule_trigger_source_account_nr_is' => 'Izvorna številka računa/IBAN je ":trigger_value"', 'rule_trigger_source_account_nr_contains_choice' => 'Izvorna številka računa / IBAN vsebuje ...', 'rule_trigger_source_account_nr_contains' => 'Izvorna številka računa/IBAN vsebuje ":trigger_value"', 'rule_trigger_destination_account_starts_choice' => 'Ime ciljnega računa se začne z ...', 'rule_trigger_destination_account_starts' => 'Ime ciljnega računa se začne z ":trigger_value"', - 'rule_trigger_destination_account_ends_choice' => 'Ime ciljnega računa se konča z ...', - 'rule_trigger_destination_account_ends' => 'Ime ciljnega računa se konča s/z ":trigger_value"', + 'rule_trigger_destination_account_ends_choice' => 'Ime ciljnega računa se konča s..', + 'rule_trigger_destination_account_ends' => 'Ime ciljnega računa se konča s ":trigger_value"', 'rule_trigger_destination_account_is_choice' => 'Ime ciljnega računa je ...', 'rule_trigger_destination_account_is' => 'Ime ciljnega računa je ":trigger_value"', 'rule_trigger_destination_account_contains_choice' => 'Ime ciljnega računa vsebuje ...', 'rule_trigger_destination_account_contains' => 'Ime ciljnega računa vsebuje ":trigger_value"', - 'rule_trigger_destination_account_nr_starts_choice' => 'Številka ciljnega računa / IBAN se začne s/z ...', - 'rule_trigger_destination_account_nr_starts' => 'Številka ciljnega računa / IBAN se začne s/z ":trigger_value"', - 'rule_trigger_destination_account_nr_ends_choice' => 'Številka ciljnega računa / IBAN se konča s/z ...', - 'rule_trigger_destination_account_nr_ends' => 'Številka ciljnega računa / IBAN se konča s/z ":trigger_value"', + 'rule_trigger_destination_account_nr_starts_choice' => 'Številka ciljnega računa / IBAN se začne s..', + 'rule_trigger_destination_account_nr_starts' => 'Številka ciljnega računa / IBAN se začne s ":trigger_value"', + 'rule_trigger_destination_account_nr_ends_choice' => 'Številka ciljnega računa / IBAN se konča s..', + 'rule_trigger_destination_account_nr_ends' => 'Številka ciljnega računa / IBAN se konča s ":trigger_value"', 'rule_trigger_destination_account_nr_is_choice' => 'Številka ciljnega računa / IBAN je ...', 'rule_trigger_destination_account_nr_is' => 'Številka ciljnega računa/IBAN je ":trigger_value"', 'rule_trigger_destination_account_nr_contains_choice' => 'Številka ciljnega računa / IBAN vsebuje ...', @@ -870,10 +874,10 @@ return [ 'rule_trigger_amount_is' => 'Znesek je :trigger_value', 'rule_trigger_amount_more_choice' => 'Znesek je večji ali enak ...', 'rule_trigger_amount_more' => 'Znesek je večji ali enak :trigger_value', - 'rule_trigger_description_starts_choice' => 'Opis se začne s/z..', - 'rule_trigger_description_starts' => 'Opis se začne s/z ":trigger_value"', - 'rule_trigger_description_ends_choice' => 'Opis se konča z..', - 'rule_trigger_description_ends' => 'Opis se konča z ":trigger_value"', + 'rule_trigger_description_starts_choice' => 'Opis se začne s..', + 'rule_trigger_description_starts' => 'Opis se začne s ":trigger_value"', + 'rule_trigger_description_ends_choice' => 'Opis se konča s..', + 'rule_trigger_description_ends' => 'Opis se konča s ":trigger_value"', 'rule_trigger_description_contains_choice' => 'Opis vsebuje..', 'rule_trigger_description_contains' => 'Opis vsebuje ":trigger_value"', 'rule_trigger_description_is_choice' => 'Opis je..', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Proračun je ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Vsaka oznaka je ...', 'rule_trigger_tag_is' => 'Katera koli oznaka je ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Valuta transakcije je..', 'rule_trigger_currency_is' => 'Valuta transakcije je ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Tuja valuta transakcije je ...', @@ -907,9 +917,9 @@ return [ 'rule_trigger_has_any_budget_choice' => 'Ima (katerikoli) proračun', 'rule_trigger_has_any_budget' => 'Transakcija ima (katerikoli) proračun', 'rule_trigger_has_no_bill_choice' => 'Nima računa', - 'rule_trigger_has_no_bill' => 'Transakcija nima trajnikov', - 'rule_trigger_has_any_bill_choice' => 'Ima (kateri koli) trajnik', - 'rule_trigger_has_any_bill' => 'Transakcija ima (katerikoli) trajnik', + 'rule_trigger_has_no_bill' => 'Transakcija nima nobenega računa', + 'rule_trigger_has_any_bill_choice' => 'Ima (katerikoli) račun', + 'rule_trigger_has_any_bill' => 'Transakcija ima (katerikoli) račun', 'rule_trigger_has_no_tag_choice' => 'Nima oznak', 'rule_trigger_has_no_tag' => 'Transakcija nima oznak(e)', 'rule_trigger_has_any_tag_choice' => 'Ima eno ali več oznak', @@ -922,12 +932,12 @@ return [ 'rule_trigger_notes_is' => 'Opombe so ":trigger_value"', 'rule_trigger_notes_contains_choice' => 'Opombe vsebujejo ...', 'rule_trigger_notes_contains' => 'Opombe vsebujejo ":trigger_value', - 'rule_trigger_notes_starts_choice' => 'Opombe se začnejo s/z ...', - 'rule_trigger_notes_starts' => 'Opombe se začnejo s/z ":trigger_value"', - 'rule_trigger_notes_ends_choice' => 'Opombe se končajo s/z ...', - 'rule_trigger_notes_ends' => 'Opombe se končajo s/z ":trigger_value"', + 'rule_trigger_notes_starts_choice' => 'Opombe se začnejo s..', + 'rule_trigger_notes_starts' => 'Opombe se začnejo s ":trigger_value"', + 'rule_trigger_notes_ends_choice' => 'Opombe se končajo s..', + 'rule_trigger_notes_ends' => 'Opombe se končajo s ":trigger_value"', 'rule_trigger_bill_is_choice' => 'Račun je..', - 'rule_trigger_bill_is' => 'Trajnik je ":trigger_value"', + 'rule_trigger_bill_is' => 'Račun je ":trigger_value"', 'rule_trigger_external_id_is_choice' => 'Zunanji ID je ...', 'rule_trigger_external_id_is' => 'Zunanji ID je ":trigger_value"', 'rule_trigger_internal_reference_is_choice' => 'Notranja referenca je ..', @@ -955,56 +965,56 @@ return [ 'rule_trigger_account_is' => 'Kateri koli račun je točno ":trigger_value"', 'rule_trigger_account_contains_choice' => 'Vsak račun vsebuje ...', 'rule_trigger_account_contains' => 'Kateri koli račun vsebuje ":trigger_value"', - 'rule_trigger_account_ends_choice' => 'Kateri koli račun se konča z ...', - 'rule_trigger_account_ends' => 'Oba računa se končata s/z ":trigger_value"', - 'rule_trigger_account_starts_choice' => 'Vsak račun se začne s/z ...', - 'rule_trigger_account_starts' => 'Oba računa se začneta s/z ":trigger_value"', + 'rule_trigger_account_ends_choice' => 'Kateri koli račun se konča s..', + 'rule_trigger_account_ends' => 'Oba računa se končata s ":trigger_value"', + 'rule_trigger_account_starts_choice' => 'Vsak račun se začne s..', + 'rule_trigger_account_starts' => 'Oba računa se začneta s ":trigger_value"', 'rule_trigger_account_nr_is_choice' => 'Številka računa / IBAN je ...', 'rule_trigger_account_nr_is' => 'Številka računa/IBAN je ":trigger_value"', 'rule_trigger_account_nr_contains_choice' => 'Številka računa / IBAN vsebuje ...', 'rule_trigger_account_nr_contains' => 'Številka računa/IBAN vsebuje ":trigger_value"', - 'rule_trigger_account_nr_ends_choice' => 'Katera koli številka računa / IBAN se konča s/z ...', - 'rule_trigger_account_nr_ends' => 'Številka računa/IBAN se konča s/z ":trigger_value"', - 'rule_trigger_account_nr_starts_choice' => 'Številka računa/IBAN se začne s/z..', + 'rule_trigger_account_nr_ends_choice' => 'Katera koli številka računa / IBAN se konča s..', + 'rule_trigger_account_nr_ends' => 'Številka računa/IBAN se konča s ":trigger_value"', + 'rule_trigger_account_nr_starts_choice' => 'Številka računa/IBAN se začne s..', 'rule_trigger_account_nr_starts' => 'Številka računa/IBAN se začne z ":trigger_value"', 'rule_trigger_category_contains_choice' => 'Kategorija vsebuje ...', 'rule_trigger_category_contains' => 'Kategorija vsebuje ":trigger_value"', - 'rule_trigger_category_ends_choice' => 'Kategorija se konča s/z ...', - 'rule_trigger_category_ends' => 'Kategorija se konča z ":trigger_value"', - 'rule_trigger_category_starts_choice' => 'Kategorija se začne s/z ...', - 'rule_trigger_category_starts' => 'Kategorija se začne s/z ":trigger_value"', + 'rule_trigger_category_ends_choice' => 'Kategorija se konča s..', + 'rule_trigger_category_ends' => 'Kategorija se konča s ":trigger_value"', + 'rule_trigger_category_starts_choice' => 'Kategorija se začne s..', + 'rule_trigger_category_starts' => 'Kategorija se začne s ":trigger_value"', 'rule_trigger_budget_contains_choice' => 'Proračun vsebuje ...', 'rule_trigger_budget_contains' => 'Proračun vsebuje ":trigger_value"', - 'rule_trigger_budget_ends_choice' => 'Proračun se konča s/z ...', - 'rule_trigger_budget_ends' => 'Proračun se konča s/z ":trigger_value"', - 'rule_trigger_budget_starts_choice' => 'Proračun se začne s/z ...', - 'rule_trigger_budget_starts' => 'Proračun se začne s/z ":trigger_value"', - 'rule_trigger_bill_contains_choice' => 'Trajnik vsebuje ...', - 'rule_trigger_bill_contains' => 'Trajnik vsebuje ":trigger_value"', - 'rule_trigger_bill_ends_choice' => 'Trajnik se konča s/z ...', - 'rule_trigger_bill_ends' => 'Trajnik se konča z ":trigger_value"', - 'rule_trigger_bill_starts_choice' => 'Trajnik se začne s/z ...', - 'rule_trigger_bill_starts' => 'Trajnik se začne s/z ":trigger_value"', + 'rule_trigger_budget_ends_choice' => 'Proračun se konča s..', + 'rule_trigger_budget_ends' => 'Proračun se konča s ":trigger_value"', + 'rule_trigger_budget_starts_choice' => 'Proračun se začne s..', + 'rule_trigger_budget_starts' => 'Proračun se začne s ":trigger_value"', + 'rule_trigger_bill_contains_choice' => 'Račun vsebuje..', + 'rule_trigger_bill_contains' => 'Račun vsebuje ":trigger_value"', + 'rule_trigger_bill_ends_choice' => 'Račun se konča s..', + 'rule_trigger_bill_ends' => 'Račun se konča s ":trigger_value"', + 'rule_trigger_bill_starts_choice' => 'Račun se začne s..', + 'rule_trigger_bill_starts' => 'Račun se začne s ":trigger_value"', 'rule_trigger_external_id_contains_choice' => 'Zunanji ID vsebuje ...', 'rule_trigger_external_id_contains' => 'Zunanji ID vsebuje ":trigger_value"', - 'rule_trigger_external_id_ends_choice' => 'Zunanji ID se konča s/z ...', - 'rule_trigger_external_id_ends' => 'Zunanji ID se konča s/z ":trigger_value"', - 'rule_trigger_external_id_starts_choice' => 'Zunanji ID se začne s/z ..', - 'rule_trigger_external_id_starts' => 'Zunanji ID se začne s/z ":trigger_value"', + 'rule_trigger_external_id_ends_choice' => 'Zunanji ID se konča s..', + 'rule_trigger_external_id_ends' => 'Zunanji ID se konča s ":trigger_value"', + 'rule_trigger_external_id_starts_choice' => 'Zunanji ID se začne s..', + 'rule_trigger_external_id_starts' => 'Zunanji ID se začne s ":trigger_value"', 'rule_trigger_internal_reference_contains_choice' => 'Notranja referenca vsebuje ...', 'rule_trigger_internal_reference_contains' => 'Notranja referenca vsebuje ":trigger_value"', - 'rule_trigger_internal_reference_ends_choice' => 'Notranja referenca se konča s/z ...', - 'rule_trigger_internal_reference_ends' => 'Notranja referenca se konča s/z ":trigger_value"', - 'rule_trigger_internal_reference_starts_choice' => 'Notranja referenca se začne s/z ...', - 'rule_trigger_internal_reference_starts' => 'Notranja referenca se začne s/z ":trigger_value"', + 'rule_trigger_internal_reference_ends_choice' => 'Notranja referenca se konča s..', + 'rule_trigger_internal_reference_ends' => 'Notranja referenca se konča s ":trigger_value"', + 'rule_trigger_internal_reference_starts_choice' => 'Notranja referenca se začne s..', + 'rule_trigger_internal_reference_starts' => 'Notranja referenca se začne s ":trigger_value"', 'rule_trigger_external_url_is_choice' => 'Zunanji URL je ...', 'rule_trigger_external_url_is' => 'Zunanji URL je ":trigger_value"', 'rule_trigger_external_url_contains_choice' => 'Zunanji URL vsebuje ...', 'rule_trigger_external_url_contains' => 'Zunanji URL vsebuje ":trigger_value"', - 'rule_trigger_external_url_ends_choice' => 'Zunanji URL se konča s/z ...', - 'rule_trigger_external_url_ends' => 'Zunanji URL se konča s/z ":trigger_value"', - 'rule_trigger_external_url_starts_choice' => 'Zunanji URL se začne s/z ..', - 'rule_trigger_external_url_starts' => 'Zunanji URL se začne s/z ":trigger_value"', + 'rule_trigger_external_url_ends_choice' => 'Zunanji URL se konča s..', + 'rule_trigger_external_url_ends' => 'Zunanji URL se konča s ":trigger_value"', + 'rule_trigger_external_url_starts_choice' => 'Zunanji URL se začne s..', + 'rule_trigger_external_url_starts' => 'Zunanji URL se začne s ":trigger_value"', 'rule_trigger_has_no_attachments_choice' => 'Nima prilog', 'rule_trigger_has_no_attachments' => 'Transakcija nima prilog', 'rule_trigger_recurrence_id_choice' => 'ID ponavljajoče se transakcije je ...', @@ -1065,16 +1075,16 @@ return [ 'rule_trigger_attachment_name_contains' => 'Vsako ime priloge vsebuje ":trigger_value"', 'rule_trigger_attachment_name_starts_choice' => 'Vsako ime priloge se začne z ...', 'rule_trigger_attachment_name_starts' => 'Vsako ime priloge se začne z ":trigger_value"', - 'rule_trigger_attachment_name_ends_choice' => 'Vsako ime priloge se konča s/z ...', - 'rule_trigger_attachment_name_ends' => 'Vsako ime priloge se konča s/z ":trigger_value"', + 'rule_trigger_attachment_name_ends_choice' => 'Vsako ime priloge se konča s..', + 'rule_trigger_attachment_name_ends' => 'Vsako ime priloge se konča s ":trigger_value"', 'rule_trigger_attachment_notes_are_choice' => 'Morebitne opombe k prilogi so ...', 'rule_trigger_attachment_notes_are' => 'Vse opombe k prilogi so ":trigger_value"', 'rule_trigger_attachment_notes_contains_choice' => 'Vse opombe k prilogi vsebujejo ...', 'rule_trigger_attachment_notes_contains' => 'Vse opombe k prilogi vsebujejo ":trigger_value"', - 'rule_trigger_attachment_notes_starts_choice' => 'Vse opombe k prilogi se začnejo s/z ...', - 'rule_trigger_attachment_notes_starts' => 'Vse opombe k prilogi se začnejo s/z ":trigger_value"', - 'rule_trigger_attachment_notes_ends_choice' => 'Vse opombe k prilogi se končajo s/z ...', - 'rule_trigger_attachment_notes_ends' => 'Vse opombe k prilogi se končajo s/z ":trigger_value"', + 'rule_trigger_attachment_notes_starts_choice' => 'Vse opombe k prilogi se začnejo s..', + 'rule_trigger_attachment_notes_starts' => 'Vse opombe k prilogi se začnejo s ":trigger_value"', + 'rule_trigger_attachment_notes_ends_choice' => 'Vse opombe k prilogi se končajo s..', + 'rule_trigger_attachment_notes_ends' => 'Vse opombe k prilogi se končajo s ":trigger_value"', 'rule_trigger_reconciled_choice' => 'Transakcija je usklajena', 'rule_trigger_reconciled' => 'Transakcija je usklajena', 'rule_trigger_exists_choice' => 'Katera koli transakcija se ujema(!)', @@ -1089,32 +1099,32 @@ return [ 'rule_trigger_not_tag_is_not' => 'Oznaka je ":trigger_value"', 'rule_trigger_not_description_is' => 'Opis ni ":trigger_value"', 'rule_trigger_not_description_contains' => 'Opis ne vsebuje ', - 'rule_trigger_not_description_ends' => 'Opis se začne s/z ":trigger_value"', - 'rule_trigger_not_description_starts' => 'Opis se ne začne s/z ":value"', + 'rule_trigger_not_description_ends' => 'Opis se začne s ":trigger_value"', + 'rule_trigger_not_description_starts' => 'Opis se ne začne s ":trigger_value"', 'rule_trigger_not_notes_is' => 'Opombe niso ":trigger_value"', 'rule_trigger_not_notes_contains' => 'Opombe ne vsebujejo ":trigger_value', 'rule_trigger_not_notes_ends' => 'Opombe se ne končajo na ":trigger_value"', - 'rule_trigger_not_notes_starts' => 'Opombe se ne začnejo s/z ":trigger_value"', + 'rule_trigger_not_notes_starts' => 'Opombe se ne začnejo s ":trigger_value"', 'rule_trigger_not_source_account_is' => 'Izvorni račun ni ":trigger_value"', 'rule_trigger_not_source_account_contains' => 'Izvorni račun ne vsebuje ":trigger_value"', 'rule_trigger_not_source_account_ends' => 'Izvorni račun se ne konča na ":trigger_value"', - 'rule_trigger_not_source_account_starts' => 'Izvorni račun se ne začne s/z ":trigger_value"', + 'rule_trigger_not_source_account_starts' => 'Izvorni račun se ne začne s ":trigger_value"', 'rule_trigger_not_source_account_nr_is' => 'Izvorna številka računa/IBAN ni ":trigger_value"', 'rule_trigger_not_source_account_nr_contains' => 'Izvorna številka računa/IBAN ne vsebuje ":trigger_value"', 'rule_trigger_not_source_account_nr_ends' => 'Izvorna številka računa / IBAN se ne konča na ":trigger_value"', - 'rule_trigger_not_source_account_nr_starts' => 'Izvorna številka računa/IBAN se ne začne s/z ":trigger_value"', + 'rule_trigger_not_source_account_nr_starts' => 'Izvorna številka računa/IBAN se ne začne s ":trigger_value"', 'rule_trigger_not_destination_account_is' => 'Ciljni račun ni ":trigger_value"', 'rule_trigger_not_destination_account_contains' => 'Ciljni račun ne vsebuje ":trigger_value"', 'rule_trigger_not_destination_account_ends' => 'Ciljni račun se ne konča na ":trigger_value"', - 'rule_trigger_not_destination_account_starts' => 'Ciljni račun se ne začne s/z ":trigger_value"', + 'rule_trigger_not_destination_account_starts' => 'Ciljni račun se ne začne s ":trigger_value"', 'rule_trigger_not_destination_account_nr_is' => 'Številka ciljnega računa/IBAN ni ":trigger_value"', 'rule_trigger_not_destination_account_nr_contains' => 'Številka ciljnega računa / IBAN ne vsebuje ":trigger_value"', 'rule_trigger_not_destination_account_nr_ends' => 'Številka ciljnega računa / IBAN se ne konča na ":trigger_value"', - 'rule_trigger_not_destination_account_nr_starts' => 'Številka ciljnega računa / IBAN se ne začne s/z ":trigger_value"', + 'rule_trigger_not_destination_account_nr_starts' => 'Številka ciljnega računa / IBAN se ne začne s ":trigger_value"', 'rule_trigger_not_account_is' => 'Noben račun ni ":trigger_value"', 'rule_trigger_not_account_contains' => 'Noben račun ne vsebuje ":trigger_value"', 'rule_trigger_not_account_ends' => 'Noben račun se ne konča na ":trigger_value"', - 'rule_trigger_not_account_starts' => 'Noben račun se ne začne s/z ":trigger_value"', + 'rule_trigger_not_account_starts' => 'Noben račun se ne začne s ":trigger_value"', 'rule_trigger_not_account_nr_is' => 'Nobena številka računa/IBAN ni ":trigger_value"', 'rule_trigger_not_account_nr_contains' => 'Nobena številka računa / IBAN ne vsebuje ":trigger_value"', 'rule_trigger_not_account_nr_ends' => 'Nobena številka računa / IBAN se ne konča na ":trigger_value"', @@ -1122,27 +1132,27 @@ return [ 'rule_trigger_not_category_is' => 'Kategorija ni ":trigger_value"', 'rule_trigger_not_category_contains' => 'Kategorija ne vsebuje ":trigger_value"', 'rule_trigger_not_category_ends' => 'Kategorija se ne konča na ":trigger_value"', - 'rule_trigger_not_category_starts' => 'Kategorija se ne začne s/z ":trigger_value"', + 'rule_trigger_not_category_starts' => 'Kategorija se ne začne s ":trigger_value"', 'rule_trigger_not_budget_is' => 'Proračun ni ":trigger_value"', 'rule_trigger_not_budget_contains' => 'Proračun ne vsebuje ":trigger_value"', 'rule_trigger_not_budget_ends' => 'Proračun se ne konča na ":trigger_value"', 'rule_trigger_not_budget_starts' => 'Proračun se ne začne z ":trigger_value"', - 'rule_trigger_not_bill_is' => 'Trajnik ni ":trigger_value"', - 'rule_trigger_not_bill_contains' => 'Trajnik ne vsebuje ":trigger_value"', - 'rule_trigger_not_bill_ends' => 'Trajnik se ne konča na ":trigger_value"', - 'rule_trigger_not_bill_starts' => 'Trajnik se ne konča z ":trigger_value"', + 'rule_trigger_not_bill_is' => 'Račun ni ":trigger_value"', + 'rule_trigger_not_bill_contains' => 'Račun ne vsebuje ":trigger_value"', + 'rule_trigger_not_bill_ends' => 'Račun se ne konča na ":trigger_value"', + 'rule_trigger_not_bill_starts' => 'Račun se ne konča s ":trigger_value"', 'rule_trigger_not_external_id_is' => 'Zunanji ID ni ":trigger_value"', 'rule_trigger_not_external_id_contains' => 'Zunanji ID ne vsebuje ":trigger_value"', 'rule_trigger_not_external_id_ends' => 'Zunanji ID se ne konča na ":trigger_value"', - 'rule_trigger_not_external_id_starts' => 'Zunanji ID se ne začne s/z ":trigger_value"', + 'rule_trigger_not_external_id_starts' => 'Zunanji ID se ne začne s ":trigger_value"', 'rule_trigger_not_internal_reference_is' => 'Notranja referenca ni ":trigger_value"', 'rule_trigger_not_internal_reference_contains' => 'Notranja referenca ne vsebuje ":trigger_value"', 'rule_trigger_not_internal_reference_ends' => 'Notranja referenca se ne konča na ":trigger_value"', - 'rule_trigger_not_internal_reference_starts' => 'Notranja referenca se ne začne s/z ":trigger_value"', + 'rule_trigger_not_internal_reference_starts' => 'Notranja referenca se ne začne s ":trigger_value"', 'rule_trigger_not_external_url_is' => 'Zunanji URL ni ":trigger_value"', 'rule_trigger_not_external_url_contains' => 'Zunanji URL ne vsebuje ":trigger_value"', 'rule_trigger_not_external_url_ends' => 'Zunanji URL se ne konča na ":trigger_value"', - 'rule_trigger_not_external_url_starts' => 'Zunanji URL se ne začne s/z ":trigger_value"', + 'rule_trigger_not_external_url_starts' => 'Zunanji URL se ne začne s ":trigger_value"', 'rule_trigger_not_currency_is' => 'Valuta ni ":trigger_value"', 'rule_trigger_not_foreign_currency_is' => 'Tuja valuta ni ":trigger_value"', 'rule_trigger_not_id' => 'ID transakcije ni ":trigger_value"', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transakcija ne obstaja', 'rule_trigger_not_has_attachments' => 'Transakcija nima prilog', 'rule_trigger_not_has_any_category' => 'Transakcija nima kategorije', - 'rule_trigger_not_has_any_budget' => 'Transakcija nima kategorije', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transakcija nima računa', 'rule_trigger_not_has_any_tag' => 'Transakcija nima oznak', 'rule_trigger_not_any_notes' => 'Transakcija nima opomb', @@ -1201,7 +1211,7 @@ return [ 'rule_trigger_not_has_no_attachments' => 'Transakcija ima (poljubne) priloge', 'rule_trigger_not_has_no_category' => 'Transakcija ima (poljubno) kategorijo', 'rule_trigger_not_has_no_budget' => 'Transakcija ima (poljubni) proračun', - 'rule_trigger_not_has_no_bill' => 'Transakcija ima (poljubni) račun', + 'rule_trigger_not_has_no_bill' => 'Transakcija ima (poljuben) račun', 'rule_trigger_not_has_no_tag' => 'Transakcija ima (poljubno) oznako', 'rule_trigger_not_no_notes' => 'Transakcija ima morebitne opombe', 'rule_trigger_not_no_external_url' => 'Transakcija ima zunanji URL', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Ciljni račun ni gotovinski račun', 'rule_trigger_not_account_is_cash' => 'Noben račun ni denarni račun', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,11 +1230,10 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend - 'rule_action_delete_transaction_choice' => 'IZBRIŠITE transakcijo (!)', - 'rule_action_delete_transaction' => 'IZBRIŠITE transakcijo (!)', + 'rule_action_delete_transaction_choice' => 'IZBRIŠI transakcijo (!)', + 'rule_action_delete_transaction' => 'IZBRIŠI transakcijo (!)', 'rule_action_set_category' => 'Nastavi kategorijo na ":action_value"', 'rule_action_clear_category' => 'Počisti kategorijo', 'rule_action_set_budget' => 'Nastavi proračun na ":action_value"', @@ -1234,304 +1243,307 @@ return [ 'rule_action_remove_all_tags' => 'Odstrani vse oznake', 'rule_action_set_description' => 'Nastavi opis na ":action_value"', 'rule_action_append_description' => 'Opisu dodaj ":action_value"', - 'rule_action_prepend_description' => 'Pred opisom dodaj ":action_value"', + 'rule_action_prepend_description' => 'Pred opis dodaj ":action_value"', 'rule_action_set_category_choice' => 'Nastavi kategorijo na ...', 'rule_action_clear_category_choice' => 'Počisti kategorijo', 'rule_action_set_budget_choice' => 'Nastavi proračun na ...', 'rule_action_clear_budget_choice' => 'Počisti proračun', 'rule_action_add_tag_choice' => 'Dodaj oznako ..', - 'rule_action_remove_tag_choice' => 'Odstrani oznako ...', + 'rule_action_remove_tag_choice' => 'Odstranite oznako ..', 'rule_action_remove_all_tags_choice' => 'Odstrani vse oznake', 'rule_action_set_description_choice' => 'Nastavi opis na ...', 'rule_action_update_piggy_choice' => 'Dodaj/odstrani znesek transakcije v hranilniku ...', - 'rule_action_update_piggy' => 'Dodaj/odstrani znesek transakcije v hranilnik ":action_value"', - 'rule_action_append_description_choice' => 'Za opis dodaj ...', + 'rule_action_update_piggy' => 'Dodajte / odstranite znesek transakcije v hranilnik ":action_value"', + 'rule_action_append_description_choice' => 'Opisu dodaj ..', 'rule_action_prepend_description_choice' => 'Pred opis dodaj ...', 'rule_action_set_source_account_choice' => 'Nastavi izvorni račun na ...', 'rule_action_set_source_account' => 'Nastavi izvorni račun na :action_value', 'rule_action_set_destination_account_choice' => 'Nastavi ciljni račun na ...', 'rule_action_set_destination_account' => 'Nastavi ciljni račun na :action_value', - 'rule_action_append_notes_choice' => 'Za opombo dodaj ...', - 'rule_action_append_notes' => 'Za opombo dodaj ":action_value"', + 'rule_action_append_notes_choice' => 'Opombi dodaj ..', + 'rule_action_append_notes' => 'Opombi dodaj ":action_value"', 'rule_action_prepend_notes_choice' => 'Pred opombo dodaj ...', 'rule_action_prepend_notes' => 'Pred opombo dodaj ":action_value"', 'rule_action_clear_notes_choice' => 'Odstrani opombe', 'rule_action_clear_notes' => 'Odstrani opombe', 'rule_action_set_notes_choice' => 'Nastavi opombe na ...', - 'rule_action_link_to_bill_choice' => 'Poveži s trajnikom ...', - 'rule_action_link_to_bill' => 'Poveži s trajnikom ":action_value"', + 'rule_action_link_to_bill_choice' => 'Poveži z računom ..', + 'rule_action_link_to_bill' => 'Poveži z računom ":action_value"', 'rule_action_switch_accounts_choice' => 'Zamenjajte izvorni in ciljni račun (samo prenosi!)', 'rule_action_switch_accounts' => 'Zamenjava vira in cilja', 'rule_action_set_notes' => 'Nastavi opombe na ":action_value"', - 'rule_action_convert_deposit_choice' => 'Pretvori transakcijo v polog', - 'rule_action_convert_deposit' => 'Pretvori transakcijo v polog iz ":action_value"', + 'rule_action_convert_deposit_choice' => 'Pretvori transakcijo v priliv', + 'rule_action_convert_deposit' => 'Pretvori transakcijo v priliv iz ":action_value"', 'rule_action_convert_withdrawal_choice' => 'Pretvori transakcijo v odliv', 'rule_action_convert_withdrawal' => 'Pretvori transakcijo v odliv na ":action_value"', 'rule_action_convert_transfer_choice' => 'Pretvori transakcijo v prenos', 'rule_action_convert_transfer' => 'Pretvori transakcijo v prenos z ":action_value"', 'rule_action_append_descr_to_notes_choice' => 'Opis dodajte opombam o transakciji', - 'rule_action_append_notes_to_descr_choice' => 'Opisu pripnite opombe o transakciji', + 'rule_action_append_notes_to_descr_choice' => 'Opombe o transakciji dodajte opisu', 'rule_action_move_descr_to_notes_choice' => 'Zamenjajte trenutne opombe o transakciji z opisom', 'rule_action_move_notes_to_descr_choice' => 'Zamenjajte trenutni opis z opombami o transakciji', - 'rule_action_append_descr_to_notes' => 'Za opis dodaj ...', - 'rule_action_append_notes_to_descr' => 'Dodajte opombe opisu', + 'rule_action_append_descr_to_notes' => 'Dodaj opis k opombami', + 'rule_action_append_notes_to_descr' => 'Dodaj opombe k opisu', 'rule_action_move_descr_to_notes' => 'Opombe zamenjajte z opisom', 'rule_action_move_notes_to_descr' => 'Zamenjajte opis z opombami', - 'rulegroup_for_bills_title' => 'Skupina pravil za trajnike', + 'rule_action_set_destination_to_cash_choice' => 'Nastavi ciljni račun na (gotovina)', + 'rule_action_set_source_to_cash_choice' => 'Nastavi izvorni račun na (gotovina)', + 'rulegroup_for_bills_title' => 'Skupina pravil za račune', 'rulegroup_for_bills_description' => 'Posebna skupina pravil za vsa pravila, ki vključujejo račune.', 'rule_for_bill_title' => 'Samodejno ustvarjeno pravilo za račun ":name"', 'rule_for_bill_description' => 'To pravilo je samodejno ustvarjeno za poskus ujemanja računa ":name".', - 'create_rule_for_bill' => 'Ustvari novo pravilo za trajnik: ":name"', - 'create_rule_for_bill_txt' => 'Pravkar ste ustvarili nov račun z imenom ":name", čestitamo! Firefly III lahko samodejno poveže nove dvige s tem računom. Na primer, kadar koli plačate najemnino, bo račun "najemnina" povezan s stroški. Tako vam lahko Firefly III natančno pokaže, kateri računi so zapadli in kateri ne. Če želite to narediti, je treba ustvariti novo pravilo. Firefly III je za vas izpolnil nekaj smiselnih privzetih vrednosti. Preverite, ali so pravilni. Če so te vrednosti pravilne, Firefly III samodejno poveže pravilen dvig s pravilnim računom. Preverite sprožilce, da vidite, ali so pravilni, in jih dodajte, če so napačni.', - 'new_rule_for_bill_title' => 'Pravilo za trajnik ":name"', - 'new_rule_for_bill_description' => 'To pravilo označuje transakcije za trajnik ":name".', + 'create_rule_for_bill' => 'Ustvari novo pravilo za račun ":name"', + 'create_rule_for_bill_txt' => 'Pravkar ste ustvarili nov račun z imenom ":name", čestitamo! Firefly III lahko samodejno poveže nove odlive s tem računom. Na primer, kadar koli plačate najemnino, bo račun "najemnina" povezan s stroški. Tako vam lahko Firefly III natančno pokaže, kateri računi so zapadli in kateri ne. Če želite to narediti, je treba ustvariti novo pravilo. Firefly III je za vas izpolnil nekaj smiselnih privzetih vrednosti. Preverite, ali so pravilni. Če so te vrednosti pravilne, Firefly III samodejno poveže pravilen odliv s pravilnim računom. Preverite sprožilce, da vidite, ali so pravilni, in jih dodajte, če so napačni.', + 'new_rule_for_bill_title' => 'Pravilo za račun ":name"', + 'new_rule_for_bill_description' => 'To pravilo označuje transakcije za račun ":name".', - 'new_rule_for_journal_title' => 'Pravilo, ki temelji na transakciji ":description"', - 'new_rule_for_journal_description' => 'To pravilo temelji na transakciji ":description". Ujemalo se bo le s popolnoma enakimi transakcijami.', + 'new_rule_for_journal_title' => 'Pravilo, ki temelji na transakciji ":description"', + 'new_rule_for_journal_description' => 'To pravilo temelji na transakciji ":description". Ujemalo se bo le s popolnoma enakimi transakcijami.', // tags - 'store_new_tag' => 'Shrani novo oznako', - 'update_tag' => 'Posodobi oznako', - 'no_location_set' => 'Lokacija ni nastavljena.', - 'meta_data' => 'Meta podatki', - 'location' => 'Lokacija', - 'without_date' => 'Brez datuma', - 'result' => 'Rezultati', - 'sums_apply_to_range' => 'Vsi zneski veljajo za izbran interval', - 'mapbox_api_key' => 'Če želite uporabiti zemljevid, pridobite API ključ iz Mapbox-a. Odprite datoteko .env in vanjo vnesite kodo za MAPBOX_API_KEY=.', - 'press_object_location' => 'Z desnim klikom ali dolgim pritiskom nastavite lokacijo objekta.', - 'clear_location' => 'Počisti lokacijo', - 'delete_all_selected_tags' => 'Izbriši vse izbrane oznake', - 'select_tags_to_delete' => 'Ne pozabi izbrati oznak.', - 'deleted_x_tags' => 'Izbrisana :count oznaka.|Izbrisanih :count oznak.', - 'create_rule_from_transaction' => 'Ustvari pravilo, ki temelji na transakciji', - 'create_recurring_from_transaction' => 'Ustvarite ponavljajočo se transakcijo na podlagi transakcije', - + 'store_new_tag' => 'Shrani novo oznako', + 'update_tag' => 'Posodobi oznako', + 'no_location_set' => 'Lokacija ni nastavljena.', + 'meta_data' => 'Meta podatki', + 'location' => 'Lokacija', + 'location_first_split' => 'Mesto za to transakcijo je mogoče nastaviti ob prvi delitvi te transakcije.', + 'without_date' => 'Brez datuma', + 'result' => 'Rezultati', + 'sums_apply_to_range' => 'Vsi zneski veljajo za izbran interval', + 'mapbox_api_key' => 'Če želite uporabiti zemljevid, pridobite API ključ iz Mapbox-a. Odprite datoteko .env in vanjo vnesite kodo za MAPBOX_API_KEY=.', + 'press_object_location' => 'Z desnim klikom ali dolgim pritiskom nastavite lokacijo objekta.', + 'click_tap_location' => 'Kliknite ali tapnite zemljevid, da dodate lokacijo', + 'clear_location' => 'Počisti lokacijo', + 'delete_all_selected_tags' => 'Izbriši vse izbrane oznake', + 'select_tags_to_delete' => 'Ne pozabite izbrati oznak.', + 'deleted_x_tags' => 'Izbrisana :count oznaka.|Izbrisanih :count oznak.', + 'create_rule_from_transaction' => 'Ustvarite pravilo, ki temelji na transakciji', + 'create_recurring_from_transaction' => 'Ustvarite ponavljajočo se transakcijo na podlagi transakcije', // preferences - 'dark_mode_option_browser' => 'Dovoli, da brskalnik določi ', - 'dark_mode_option_light' => 'Vedno svetla tema', - 'dark_mode_option_dark' => 'Vedno temna tema', - 'equal_to_language' => '(enako jeziku)', - 'dark_mode_preference' => 'Temen način', - 'dark_mode_preference_help' => 'Povejte Firefly III, kdaj naj uporabi temni način.', - 'pref_home_screen_accounts' => 'Računi na začetni strani', - 'pref_home_screen_accounts_help' => 'Kateri računi naj bodo prikazani na začetni strani?', - 'pref_view_range' => 'Ogled intervala', - 'pref_view_range_help' => 'Nekateri diagrami so samodejno združeni v obdobja. Tudi proračuni bodo združeni v obdobjih. Kakšno obdobje želite?', - 'pref_1D' => 'En dan', - 'pref_1W' => 'En teden', - 'pref_1M' => 'En mesec', - 'pref_3M' => 'Trije meseci (četrtletje)', - 'pref_6M' => 'Šest mesecev', - 'pref_1Y' => 'Eno leto', - 'pref_last365' => 'Zadnje leto', - 'pref_last90' => 'Zadnjih 90 dni', - 'pref_last30' => 'Zadnjih 30 dni', - 'pref_last7' => 'Zadnjih 7 dni', - 'pref_YTD' => 'Leto do datuma', - 'pref_QTD' => 'Četrtletje do danes', - 'pref_MTD' => 'Mesec do datuma', - 'pref_languages' => 'Jeziki', - 'pref_locale' => 'Področne nastavitve', - 'pref_languages_help' => 'Firefly III podpira več jezikov. Kateri ti je ljubši?', - 'pref_locale_help' => 'V Firefly III lahko nastaviš ostale nastavitve lokalizacije, kot na primer prikaz valut, števil in datumov. Tvoj sistem morda ne podpira vnosov na tem seznamu. Firefly III nima pravilnih nastavitev prikaza datuma za vse lokalizacije; kontaktirajte me za izboljšave.', - 'pref_locale_no_demo' => 'Ta funkcija ne bo delovala za demo uporabnika.', - 'pref_custom_fiscal_year' => 'Nastavitve fiskalnega leta', - 'pref_custom_fiscal_year_label' => 'Omogočeno', - 'pref_custom_fiscal_year_help' => 'V državah, ki uporabljajo finančno leto, ki je drugače od 1. januarja do 31. decembra, lahko to vklopite in določite prvi / zadnji dan fiskalnega leta', - 'pref_fiscal_year_start_label' => 'Začetek fiskalnega leta', - 'pref_two_factor_auth' => 'preverjanje v dveh korakih', - 'pref_two_factor_auth_help' => 'Ko omogočite preverjanje v dveh korakih (znano tudi kot dvo-nivojsko preverjanje pristnosti), svojemu računu dodate dodatno raven varnosti. Prijavite se z nečim, kar poznate (geslo), in s tem, kar imate (kodo za preverjanje). Kode za preverjanje generira aplikacija v vašem telefonu, kot je Authy ali Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Omogoči preverjanje v dveh korakih', - 'pref_two_factor_auth_disabled' => 'Koda za preverjanje v dveh korakih je odstranjena in onemogočena', - 'pref_two_factor_auth_remove_it' => 'Ne pozabi odstraniti računa iz aplikacije za preverjanje pristnosti!', - 'pref_two_factor_auth_code' => 'Preveri kodo', - 'pref_two_factor_auth_code_help' => 'Skenirajte kodo QR z aplikacijo v telefonu, kot je Authy ali Google Authenticator, in vnesite generirano kodo.', - 'pref_two_factor_auth_reset_code' => 'Ponastavi kodo za preverjanje', - 'pref_two_factor_auth_disable_2fa' => 'Onemogoči 2FA', - '2fa_use_secret_instead' => 'Če ne morete skenirati QR kode, raje uporabite skrivno kodo: :secret.', - '2fa_backup_codes' => 'Te rezervne kode varno spravi za primer, če izgubiš svojo napravo.', - '2fa_already_enabled' => ' Preverjanje v dveh korakih je že omogočeno.', - 'wrong_mfa_code' => 'Ta MFA koda ni veljavna.', - 'pref_save_settings' => 'Shrani nastavitve', - 'saved_preferences' => 'Nastavitve shranjene!', - 'preferences_general' => 'Splošno', - 'preferences_frontpage' => 'Začetni zaslon', - 'preferences_security' => 'Varnost', - 'preferences_layout' => 'Postavitev', - 'preferences_notifications' => 'Obvestila', - 'pref_home_show_deposits' => 'Pokaži depozite na začetni strani', - 'pref_home_show_deposits_info' => 'Prva stran že prikazuje vaše stroškovne konte. Ali naj tudi prikazuje prihodkovne konte?', - 'pref_home_do_show_deposits' => 'Ja, pokaži jih', - 'successful_count' => 'od tega :count uspešno', - 'list_page_size_title' => 'Velikost strani', - 'list_page_size_help' => 'Vsak seznam stvari (računi, transakcije itd.) pokaže največ toliko na stran.', - 'list_page_size_label' => 'Velikost strani', - 'between_dates' => '(:start in :end)', - 'pref_optional_fields_transaction' => 'Neobvezna polja za transakcije', - 'pref_optional_fields_transaction_help' => 'Privzeto pri ustvarjanju nove transakcije niso omogočena vsa polja (zaradi nepreglednosti). V nadaljevanju lahko omogočite dodatna polja, če menite, da bi vam to lahko koristilo. Seveda je vsako polje, ki je onemogočeno, vendar že izpolnjeno, vidno ne glede na nastavitev.', - 'optional_tj_date_fields' => 'Datumska polja', - 'optional_tj_other_fields' => 'Druga polja', - 'optional_tj_attachment_fields' => 'Polja prilog', - 'pref_optional_tj_interest_date' => 'Datum obresti', - 'pref_optional_tj_book_date' => 'Datum knjiženja', - 'pref_optional_tj_process_date' => 'Datum obdelave', - 'pref_optional_tj_due_date' => 'Datum zapadlosti', - 'pref_optional_tj_payment_date' => 'Datum plačila', - 'pref_optional_tj_invoice_date' => 'Datum računa', - 'pref_optional_tj_internal_reference' => 'Notranji sklic', - 'pref_optional_tj_notes' => 'Opombe', - 'pref_optional_tj_attachments' => 'Priloge', - 'pref_optional_tj_external_url' => 'Zunanji URL', - 'pref_optional_tj_location' => 'Lokacija', - 'pref_optional_tj_links' => 'Povezave transakcije', - 'optional_field_meta_dates' => 'Datumi', - 'optional_field_meta_business' => 'Poslovno', - 'optional_field_attachments' => 'Priloge', - 'optional_field_meta_data' => 'Izbirni meta podatki', - 'external_url' => 'Zunanji URL', - 'pref_notification_bill_reminder' => 'Opomnik o poteklih trajnikih', - 'pref_notification_new_access_token' => 'Opozorilo, ko je ustvarjen nov žeton za dostop do API-ja', - 'pref_notification_transaction_creation' => 'Opozorilo, ko je transakcija ustvarjena samodejno', - 'pref_notification_user_login' => 'Opozorilo, ko se prijavite z nove lokacije', - 'pref_notification_rule_action_failures' => 'Opozorilo, ko se dejanja pravila ne izvedejo (samo Slack ali Discord)', - 'pref_notifications' => 'Obvestila', - 'pref_notifications_help' => 'Označite, ali so to obvestila, ki jih želite prejemati. Nekatera obvestila lahko vsebujejo občutljive finančne podatke.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'Če želite, da vas Firefly III obvesti s storitvijo Slack, tukaj vnesite URL webhook. V nasprotnem primeru pustite polje prazno. Če ste skrbnik, morate ta URL nastaviti tudi v administraciji.', - 'slack_url_label' => 'Slack "dohodni webhook" URL', + 'dark_mode_option_browser' => 'Dovolite, da določi brskalnik', + 'dark_mode_option_light' => 'Vedno svetla tema', + 'dark_mode_option_dark' => 'Vedno temna tema', + 'equal_to_language' => '(enako jeziku)', + 'dark_mode_preference' => 'Temen način', + 'dark_mode_preference_help' => 'Povejte Firefly III, kdaj naj uporabi temni način.', + 'pref_home_screen_accounts' => 'Računi na začetni strani', + 'pref_home_screen_accounts_help' => 'Kateri računi naj bodo prikazani na začetni strani?', + 'pref_view_range' => 'Interval pogleda', + 'pref_view_range_help' => 'Nekateri diagrami so samodejno združeni v obdobja. Tudi proračuni bodo združeni v obdobjih. Kakšno obdobje želite?', + 'pref_1D' => 'En dan', + 'pref_1W' => 'En teden', + 'pref_1M' => 'En mesec', + 'pref_3M' => 'Trije meseci (četrtletje)', + 'pref_6M' => 'Šest mesecev', + 'pref_1Y' => 'Eno leto', + 'pref_last365' => 'Zadnje leto', + 'pref_last90' => 'Zadnjih 90 dni', + 'pref_last30' => 'Zadnjih 30 dni', + 'pref_last7' => 'Zadnjih 7 dni', + 'pref_YTD' => 'Leto do datuma', + 'pref_QTD' => 'Četrtletje do danes', + 'pref_MTD' => 'Mesec do datuma', + 'pref_languages' => 'Jeziki', + 'pref_locale' => 'Področne nastavitve', + 'pref_languages_help' => 'Firefly III podpira več jezikov. Kateri vam je ljubši?', + 'pref_locale_help' => 'V Firefly III lahko nastavite ostale nastavitve lokalizacije, kot na primer prikaz valut, števil in datumov. Vaš sistem morda ne podpira vnosov na tem seznamu. Firefly III nima pravilnih nastavitev prikaza datuma za vse lokalizacije; kontaktirajte me za izboljšave.', + 'pref_locale_no_demo' => 'Ta funkcija ne bo delovala za demo uporabnika.', + 'pref_custom_fiscal_year' => 'Nastavitve fiskalnega leta', + 'pref_custom_fiscal_year_label' => 'Omogočeno', + 'pref_custom_fiscal_year_help' => 'V državah, ki uporabljajo finančno leto, ki je drugače od 1. januarja do 31. decembra, lahko to vklopite in določite prvi / zadnji dan fiskalnega leta', + 'pref_fiscal_year_start_label' => 'Začetek fiskalnega leta', + 'pref_two_factor_auth' => 'Preverjanje v dveh korakih', + 'pref_two_factor_auth_help' => 'Ko omogočite preverjanje v dveh korakih (znano tudi kot dvofaktorska avtentikacija), svojemu računu dodate dodatno raven varnosti. Prijavite se z nečim, kar poznate (geslo), in s tem, kar imate (kodo za preverjanje). Kode za preverjanje generira aplikacija v vašem telefonu, kot je Authy ali Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Omogoči preverjanje v dveh korakih', + 'pref_two_factor_auth_disabled' => 'Koda za preverjanje v dveh korakih je odstranjena in onemogočena', + 'pref_two_factor_auth_remove_it' => 'Ne pozabite odstraniti računa iz aplikacije za preverjanje pristnosti!', + 'pref_two_factor_auth_code' => 'Preverite kodo', + 'pref_two_factor_auth_code_help' => 'Skenirajte kodo QR z aplikacijo v telefonu, kot je Authy ali Google Authenticator, in vnesite generirano kodo.', + 'pref_two_factor_auth_reset_code' => 'Ponastavite kodo za preverjanje', + 'pref_two_factor_auth_disable_2fa' => 'Onemogoči 2FA', + '2fa_use_secret_instead' => 'Če ne morete skenirati QR kode, raje uporabite skrivno kodo: :secret.', + '2fa_backup_codes' => 'Te varnostne kode varno spravite za primer, če izgubite svojo napravo.', + '2fa_already_enabled' => ' Preverjanje v dveh korakih je že omogočeno.', + 'wrong_mfa_code' => 'Ta MFA koda ni veljavna.', + 'pref_save_settings' => 'Shrani nastavitve', + 'saved_preferences' => 'Nastavitve shranjene!', + 'preferences_general' => 'Splošno', + 'preferences_frontpage' => 'Začetni zaslon', + 'preferences_security' => 'Varnost', + 'preferences_layout' => 'Postavitev', + 'preferences_notifications' => 'Obvestila', + 'pref_home_show_deposits' => 'Pokaži prilive na začetni strani', + 'pref_home_show_deposits_info' => 'Prva stran že prikazuje vaše račune stroškov. Ali naj prikazuje tudi račune prihodkov?', + 'pref_home_do_show_deposits' => 'Da, pokaži jih', + 'successful_count' => 'od tega :count uspešno', + 'list_page_size_title' => 'Velikost strani', + 'list_page_size_help' => 'Vsak seznam stvari (računi, transakcije itd.) pokaže največ toliko na stran.', + 'list_page_size_label' => 'Velikost strani', + 'between_dates' => '(:start in :end)', + 'pref_optional_fields_transaction' => 'Neobvezna polja za transakcije', + 'pref_optional_fields_transaction_help' => 'Privzeto pri ustvarjanju nove transakcije niso omogočena vsa polja (zaradi nepreglednosti). V nadaljevanju lahko omogočite dodatna polja, če menite, da bi vam to lahko koristilo. Seveda je vsako polje, ki je onemogočeno, vendar že izpolnjeno, vidno ne glede na nastavitev.', + 'optional_tj_date_fields' => 'Datumska polja', + 'optional_tj_other_fields' => 'Druga polja', + 'optional_tj_attachment_fields' => 'Polja prilog', + 'pref_optional_tj_interest_date' => 'Datum obresti', + 'pref_optional_tj_book_date' => 'Datum knjiženja', + 'pref_optional_tj_process_date' => 'Datum obdelave', + 'pref_optional_tj_due_date' => 'Datum zapadlosti', + 'pref_optional_tj_payment_date' => 'Datum plačila', + 'pref_optional_tj_invoice_date' => 'Datum računa', + 'pref_optional_tj_internal_reference' => 'Notranji sklic', + 'pref_optional_tj_notes' => 'Opombe', + 'pref_optional_tj_attachments' => 'Priloge', + 'pref_optional_tj_external_url' => 'Zunanji URL', + 'pref_optional_tj_location' => 'Lokacija', + 'pref_optional_tj_links' => 'Povezave transakcije', + 'optional_field_meta_dates' => 'Datumi', + 'optional_field_meta_business' => 'Poslovno', + 'optional_field_attachments' => 'Priloge', + 'optional_field_meta_data' => 'Izbirni meta podatki', + 'external_url' => 'Zunanji URL', + 'pref_notification_bill_reminder' => 'Opomnik o poteklih računih', + 'pref_notification_new_access_token' => 'Opozorilo, ko je ustvarjen nov žeton za dostop do API-ja', + 'pref_notification_transaction_creation' => 'Opozorilo, ko je transakcija ustvarjena samodejno', + 'pref_notification_user_login' => 'Opozorilo, ko se prijavite z nove lokacije', + 'pref_notification_rule_action_failures' => 'Opozorilo, ko se dejanja pravila ne izvedejo (samo Slack ali Discord)', + 'pref_notifications' => 'Obvestila', + 'pref_notifications_help' => 'Označite, ali so to obvestila, ki jih želite prejemati. Nekatera obvestila lahko vsebujejo občutljive finančne podatke.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'Če želite, da vas Firefly III obvesti s storitvijo Slack, tukaj vnesite URL webhook. V nasprotnem primeru pustite polje prazno. Če ste skrbnik, morate ta URL nastaviti tudi v administraciji.', + 'slack_url_label' => 'Slack "dohodni webhook" URL', // Financial administrations - 'administration_index' => 'Finančna administracija', - 'administrations_index_menu' => 'Finančna administracija', + 'administration_index' => 'Finančna administracija', + 'administrations_index_menu' => 'Finančna administracija', // profile: - 'purge_data_title' => 'Čiščenje podatkov iz Firefly III', - 'purge_data_expl' => '"Čiščenje" pomeni "brisanje tistega, kar je že izbrisano". V normalnih okoliščinah Firefly III ničesar trajno ne izbriše. To samo skriva. Spodnji gumb izbriše vse te prej "izbrisane" zapise ZA VEDNO.', - 'delete_stuff_header' => 'Brisanje in čiščenje podatkov', - 'purge_all_data' => 'Počisti vse izbrisane zapise', - 'purge_data' => 'Izbris podatkov', - 'purged_all_records' => 'Vsi izbrisani zapisi so bili izbrisani.', - 'delete_data_title' => 'Izbrišite podatke iz Firefly III', - 'permanent_delete_stuff' => 'Iz Firefly III lahko izbrišete stvari. Uporaba spodnjih gumbov pomeni, da bodo vaši predmeti odstranjeni iz pogleda in skriti. Za to ni gumba za razveljavitev, vendar lahko elementi ostanejo v bazi podatkov, kjer jih lahko po potrebi rešite.', - 'other_sessions_logged_out' => 'Vse vaše druge seje so bile odjavljene.', - 'delete_unused_accounts' => 'Če izbrišete neuporabljene račune, boste počistili svoje sezname za samodejno dokončanje.', - 'delete_all_unused_accounts' => 'Izbrišite neuporabljene račune', - 'deleted_all_unused_accounts' => 'Vsi neuporabljeni računi so izbrisani', - 'delete_all_budgets' => 'Izbriši VSE proračune', - 'delete_all_categories' => 'Izbrišite VSE vaše kategorije', - 'delete_all_tags' => 'Izbriši VSE oznake', - 'delete_all_bills' => 'Izbriši VSE račune', - 'delete_all_piggy_banks' => 'Izbriši VSE hranilnike', - 'delete_all_rules' => 'Izbriši VSA pravila', - 'delete_all_recurring' => 'Izbriši VSE ponavljajoče transakcije', - 'delete_all_object_groups' => 'Delete ALL your object groups', - 'delete_all_accounts' => 'Delete ALL your accounts', - 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', - 'delete_all_expense_accounts' => 'Izbriši VSE račune stroškov', - 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', - 'delete_all_liabilities' => 'Delete ALL your liabilities', - 'delete_all_transactions' => 'Delete ALL your transactions', - 'delete_all_withdrawals' => 'Delete ALL your withdrawals', - 'delete_all_deposits' => 'Izbriši VSE pologe', - 'delete_all_transfers' => 'Izbriši VSE prenose ', - 'also_delete_transactions' => 'Brisanje računa bo pobrisalo tudi VSE povezane dvige, pologe in prenose!', - 'deleted_all_budgets' => 'Vsi proračuni so bili izbrisani', - 'deleted_all_categories' => 'Vse kategorije so bile izbrisane', - 'deleted_all_tags' => 'Vse oznake so bile izbrisane', - 'deleted_all_bills' => 'All bills have been deleted', - 'deleted_all_piggy_banks' => 'Vsi hranilniki so bili izbrisani', - 'deleted_all_rules' => 'All rules and rule groups have been deleted', - 'deleted_all_object_groups' => 'All groups have been deleted', - 'deleted_all_accounts' => 'All accounts have been deleted', - 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', - 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', - 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', - 'deleted_all_liabilities' => 'All liabilities have been deleted', - 'deleted_all_transactions' => 'All transactions have been deleted', - 'deleted_all_withdrawals' => 'All withdrawals have been deleted', - 'deleted_all_deposits' => 'All deposits have been deleted', - 'deleted_all_transfers' => 'All transfers have been deleted', - 'deleted_all_recurring' => 'All recurring transactions have been deleted', - 'change_your_password' => 'Spremeni geslo', - 'delete_account' => 'Izbriši račun', - 'current_password' => 'Trenutno geslo', - 'new_password' => 'Novo geslo', - 'new_password_again' => 'Novo geslo (ponovno)', - 'delete_your_account' => 'Izbriši račun', - 'delete_your_account_help' => 'Če izbrišete račun, bodo izbrisani tudi vsi računi, transakcije, karkoli ste morda shranili v storitev Firefly III bo izgubljeno.', - 'delete_your_account_password' => 'Za nadaljevanje vpišite geslo.', - 'password' => 'Geslo', - 'are_you_sure' => 'Ali si prepričan? Tega se ne da razveljaviti.', - 'delete_account_button' => 'IZBRIŠI račun', - 'invalid_current_password' => 'Obstoječe geslo je napačno!', - 'password_changed' => 'Geslo spremenjeno!', - 'should_change' => 'Namen je spremeniti geslo.', - 'invalid_password' => 'Napačno geslo!', - 'what_is_pw_security' => 'Kaj je »preverjanje varnosti gesla«?', - 'secure_pw_title' => 'Kako izbrati varno geslo', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => 'Niti teden še ni minil, ko ste prebrali v novicah o strani, ki izgublja gesla svojih uporabnikov. Hekerji in tatovi uporabljajo ta gesla, da bi poskušali ukrasti vaše zasebne podatke. Te informacije so dragocene.', - 'secure_pw_ff' => 'Ali uporabljate isto geslo po vsem internetu? Če eno mesto izgubi geslo, imajo hekerji dostop do vseh vaših podatkov. Firefly III se zanaša na vas, da izberete močno in edinstveno geslo za zaščito vaših finančnih zapisov.', - 'secure_pw_check_box' => 'Da bi vam pomagali, lahko Firefly III preveri, ali je bilo geslo, ki ga želite uporabiti, ukradeno v preteklosti. V tem primeru vam svetuje, da NE uporabljate tega gesla.', - 'secure_pw_working_title' => 'Kako deluje?', - 'secure_pw_working' => 'S potrditvijo tega polja bo Firefly III poslal prvih pet znakov zgoščenega zapisa SHA1 vašega gesla na spletno stran Troy Hunta, da vidite, ali je na seznamu. Tako ne boste mogli uporabljati nevarnih gesel, kot je priporočeno v najnovejši posebni publikaciji NIST na to temo.', - 'secure_pw_should' => 'Naj potrdim polje?', - 'secure_pw_long_password' => 'Da. Vedno preverite, ali je vaše geslo varno.', - 'command_line_token' => 'Žeton za ukazno vrstico', - 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', - 'regenerate_command_line_token' => 'Ponovno ustvari žeton za ukazno vrstico', - 'token_regenerated' => 'Nov žeton ukazne vrstice je bil ustvarjen', - 'change_your_email' => 'Spremeni elektronski naslov', - 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', - 'email_changed_logout' => 'Dokler ne potrdite svojega elektronskega naslova, se ne morete prijaviti.', - 'login_with_new_email' => 'Zdaj se lahko prijavite z novim e-poštnim naslovom.', - 'login_with_old_email' => 'Znova se lahko prijavite s starim elektronskim naslovom.', - 'login_provider_local_only' => 'To dejanje ni na voljo pri preverjanju pristnosti preko ":login_provider".', - 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', - 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', - 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Clients', - 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Client ID', - 'profile_oauth_client_name' => 'Ime', - 'profile_oauth_client_secret' => 'Skrivnost', - 'profile_oauth_create_new_client' => 'Create New Client', - 'profile_oauth_create_client' => 'Create Client', - 'profile_oauth_edit_client' => 'Urejanje odjemalca', - 'profile_oauth_name_help' => 'Something your users will recognize and trust.', - 'profile_oauth_redirect_url' => 'Redirect URL', - 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', - 'profile_authorized_apps' => 'Authorized applications', - 'profile_authorized_clients' => 'Authorized clients', - 'profile_scopes' => 'Obseg', - 'profile_revoke' => 'Prekliči', - 'profile_oauth_client_secret_title' => 'Client Secret', - 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', - 'profile_personal_access_tokens' => 'Personal Access Tokens', - 'profile_personal_access_token' => 'Personal Access Token', - 'profile_oauth_confidential' => 'Zaupno', - 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', - 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', - 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', - 'profile_create_new_token' => 'Ustvari nov žeton', - 'profile_create_token' => 'Ustvari žeton', - 'profile_create' => 'Ustvari', - 'profile_save_changes' => 'Shrani spremembe', - 'profile_whoops' => 'Ups!', - 'profile_something_wrong' => 'Nekaj je šlo narobe!', - 'profile_try_again' => 'Something went wrong. Please try again.', - 'amounts' => 'Zneski', - 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', - 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', - 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', - 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', + 'purge_data_title' => 'Čiščenje podatkov iz Firefly III', + 'purge_data_expl' => '"Čiščenje" pomeni "brisanje tistega, kar je že izbrisano". V normalnih okoliščinah Firefly III ničesar trajno ne izbriše. To samo skriva. Spodnji gumb izbriše vse te prej "izbrisane" zapise ZA VEDNO.', + 'delete_stuff_header' => 'Brisanje in čiščenje podatkov', + 'purge_all_data' => 'Počisti vse izbrisane zapise', + 'purge_data' => 'Izbris podatkov', + 'purged_all_records' => 'Vsi izbrisani zapisi so bili izbrisani.', + 'delete_data_title' => 'Izbriši podatke iz Firefly III', + 'permanent_delete_stuff' => 'Iz Firefly III lahko izbrišete stvari. Uporaba spodnjih gumbov pomeni, da bodo vaši predmeti odstranjeni iz pogleda in skriti. Za to ni gumba za razveljavitev, vendar lahko elementi ostanejo v bazi podatkov, kjer jih lahko po potrebi rešite.', + 'other_sessions_logged_out' => 'Vse vaše druge seje so bile odjavljene.', + 'delete_unused_accounts' => 'Če izbrišete neuporabljene račune, boste počistili svoje sezname za samodejno dokončanje.', + 'delete_all_unused_accounts' => 'Izbriši neuporabljene račune', + 'deleted_all_unused_accounts' => 'Vsi neuporabljeni računi so izbrisani', + 'delete_all_budgets' => 'Izbriši VSE proračune', + 'delete_all_categories' => 'Izbriši VSE kategorije', + 'delete_all_tags' => 'Izbriši VSE oznake', + 'delete_all_bills' => 'Izbriši VSE račune', + 'delete_all_piggy_banks' => 'Izbriši VSE hranilnike', + 'delete_all_rules' => 'Izbriši VSA pravila', + 'delete_all_recurring' => 'Izbriši VSE ponavljajoče se transakcije', + 'delete_all_object_groups' => 'Izbriši VSE skupine predmetov', + 'delete_all_accounts' => 'Izbriši VSE račune', + 'delete_all_asset_accounts' => 'Izbriši VSE račune sredstev', + 'delete_all_expense_accounts' => 'Izbriši VSE račune stroškov', + 'delete_all_revenue_accounts' => 'Izbriši VSE račune prihodkov', + 'delete_all_liabilities' => 'Izbriši VSE obveznosti', + 'delete_all_transactions' => 'Izbriši VSE transakcije', + 'delete_all_withdrawals' => 'Izbriši VSE odlive', + 'delete_all_deposits' => 'Izbriši VSE prilive', + 'delete_all_transfers' => 'Izbriši VSE prenose ', + 'also_delete_transactions' => 'Brisanje računa bo pobrisalo tudi VSE povezane odlive, prilive in prenose!', + 'deleted_all_budgets' => 'Vsi proračuni so bili izbrisani', + 'deleted_all_categories' => 'Vse kategorije so bile izbrisane', + 'deleted_all_tags' => 'Vse oznake so bile izbrisane', + 'deleted_all_bills' => 'Vsi računi so bili izbrisani', + 'deleted_all_piggy_banks' => 'Vsi hranilniki so bili izbrisani', + 'deleted_all_rules' => 'Vsa pravila in skupine pravil so bila izbrisana', + 'deleted_all_object_groups' => 'Vse skupine so bile izbrisane', + 'deleted_all_accounts' => 'Vsi računi so bili izbrisani', + 'deleted_all_asset_accounts' => 'Vsi računi sredstev so bili izbrisani', + 'deleted_all_expense_accounts' => 'Vsi računi stroškov so bili izbrisani', + 'deleted_all_revenue_accounts' => 'Vsi računi prihodkov so bili izbrisani', + 'deleted_all_liabilities' => 'Vse obveznosti so bile izbrisane', + 'deleted_all_transactions' => 'Vse transakcije so bile izbrisane', + 'deleted_all_withdrawals' => 'Vsi odlivi so bili izbrisani', + 'deleted_all_deposits' => 'Vsi prilivi so bili izbrisani', + 'deleted_all_transfers' => 'Vsi prenosi so bili izbrisani', + 'deleted_all_recurring' => 'Vse ponavljajoče se transakcije so bile izbrisane', + 'change_your_password' => 'Spremeni geslo', + 'delete_account' => 'Izbriši račun', + 'current_password' => 'Trenutno geslo', + 'new_password' => 'Novo geslo', + 'new_password_again' => 'Novo geslo (ponovno)', + 'delete_your_account' => 'Izbriši račun', + 'delete_your_account_help' => 'Če izbrišete račun, bodo izbrisani tudi vsi računi, transakcije, karkoli ste morda shranili v storitev Firefly III bo izgubljeno.', + 'delete_your_account_password' => 'Za nadaljevanje vpišite geslo.', + 'password' => 'Geslo', + 'are_you_sure' => 'Ali ste prepričan? Tega se ne da razveljaviti.', + 'delete_account_button' => 'IZBRIŠI račun', + 'invalid_current_password' => 'Obstoječe geslo je napačno!', + 'password_changed' => 'Geslo spremenjeno!', + 'should_change' => 'Namen je spremeniti vaše geslo.', + 'invalid_password' => 'Napačno geslo!', + 'what_is_pw_security' => 'Kaj je »preverjanje varnosti gesla«?', + 'secure_pw_title' => 'Kako izbrati varno geslo', + 'forgot_password_response' => 'Hvala vam. Če obstaja račun s tem e-poštnim naslovom, boste navodila našli v mapi »Prejeto«.', + 'secure_pw_history' => 'Niti teden še ni minil, ko ste prebrali v novicah o strani, ki izgublja gesla svojih uporabnikov. Hekerji in tatovi uporabljajo ta gesla, da bi poskušali ukrasti vaše zasebne podatke. Te informacije so dragocene.', + 'secure_pw_ff' => 'Ali uporabljate isto geslo po vsem internetu? Če eno mesto izgubi geslo, imajo hekerji dostop do vseh vaših podatkov. Firefly III se zanaša na vas, da izberete močno in edinstveno geslo za zaščito vaših finančnih zapisov.', + 'secure_pw_check_box' => 'Da bi vam pomagali, lahko Firefly III preveri, ali je bilo geslo, ki ga želite uporabiti, ukradeno v preteklosti. V tem primeru vam svetuje, da NE uporabljate tega gesla.', + 'secure_pw_working_title' => 'Kako deluje?', + 'secure_pw_working' => 'S potrditvijo tega polja bo Firefly III poslal prvih pet znakov zgoščenega zapisa SHA1 vašega gesla na spletno stran Troy Hunta, da vidite, ali je na seznamu. Tako ne boste mogli uporabljati nevarnih gesel, kot je priporočeno v najnovejši posebni publikaciji NIST na to temo.', + 'secure_pw_should' => 'Naj potrdim polje?', + 'secure_pw_long_password' => 'Da. Vedno preverite, ali je vaše geslo varno.', + 'command_line_token' => 'Žeton za ukazno vrstico', + 'explain_command_line_token' => 'Ta žeton potrebujete za izvajanje možnosti ukazne vrstice, kot je izvoz podatkov. Brez tega ta občutljiv ukaz ne bo deloval. Ne delite svojega žetona ukazne vrstice. Nihče vas ne bo prosil za ta žeton, tudi jaz ne. Če se bojite, da ste to izgubili, ali ko ste paranoični, znova ustvarite ta žeton z gumbom.', + 'regenerate_command_line_token' => 'Ponovno ustvari žeton za ukazno vrstico', + 'token_regenerated' => 'Nov žeton ukazne vrstice je bil ustvarjen', + 'change_your_email' => 'Spremeni elektronski naslov', + 'email_verification' => 'E-poštno sporočilo bo poslano na vaš stari IN novi e-poštni naslov. Iz varnostnih razlogov se ne boste mogli prijaviti, dokler ne potrdite svojega novega e-poštnega naslova. Če niste prepričani, ali vaša namestitev Firefly III omogoča pošiljanje e-pošte, prosimo, ne uporabljajte te funkcije. Če ste skrbnik, lahko to preizkusite v Administracija.', + 'email_changed_logout' => 'Dokler ne potrdite svojega elektronskega naslova, se ne morete prijaviti.', + 'login_with_new_email' => 'Zdaj se lahko prijavite z novim e-poštnim naslovom.', + 'login_with_old_email' => 'Znova se lahko prijavite s starim elektronskim naslovom.', + 'login_provider_local_only' => 'To dejanje ni na voljo pri preverjanju pristnosti preko ":login_provider".', + 'external_user_mgt_disabled' => 'To dejanje ni na voljo, če Firefly III ni odgovoren za upravljanje uporabnikov ali preverjanje pristnosti.', + 'external_auth_disabled' => 'To dejanje ni na voljo, če Firefly III ni odgovoren za upravljanje uporabnikov ali preverjanje pristnosti.', + 'delete_local_info_only' => 'Ker Firefly III ni odgovoren za upravljanje uporabnikov ali preverjanje pristnosti, bo ta funkcija izbrisala samo lokalne podatke Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Odjemalci OAuth', + 'profile_oauth_no_clients' => 'Ustvarili niste še nobenega odjemalca OAuth.', + 'profile_oauth_clients_external_auth' => 'Če uporabljate zunanjega ponudnika preverjanja pristnosti, kot je Authelia, odjemalci OAuth ne bodo delovali. Uporabljate lahko samo osebne žetone za dostop.', + 'profile_oauth_clients_header' => 'Odjemalci', + 'profile_oauth_client_id' => 'Client ID', + 'profile_oauth_client_name' => 'Ime', + 'profile_oauth_client_secret' => 'Skrivna koda', + 'profile_oauth_create_new_client' => 'Ustvari novega odjemalca', + 'profile_oauth_create_client' => 'Ustvari odjemalca', + 'profile_oauth_edit_client' => 'Urejanje odjemalca', + 'profile_oauth_name_help' => 'Nekaj, kar bodo vaši uporabniki prepoznali in mu zaupali.', + 'profile_oauth_redirect_url' => 'URL preusmeritve', + 'profile_oauth_redirect_url_help' => 'URL povratnega klica avtorizacije vaše aplikacije.', + 'profile_authorized_apps' => 'Pooblaščene aplikacije', + 'profile_authorized_clients' => 'Pooblaščeni odjemalci', + 'profile_scopes' => 'Področja', + 'profile_revoke' => 'Odvzemi dostop', + 'profile_oauth_client_secret_title' => 'Skrivna koda odjemalca', + 'profile_oauth_client_secret_expl' => 'Tukaj je skrivna koda vašega odjemalca. To je edini čas, da bo prikazana, zato je ne izgubite! Zdaj lahko uporabite to skrivno kodo za pošiljanje zahtev API.', + 'profile_personal_access_tokens' => 'Osebni dostopni žetoni', + 'profile_personal_access_token' => 'Osebni dostopni žeton', + 'profile_oauth_confidential' => 'Zaupno', + 'profile_oauth_confidential_help' => 'Od odjemalca zahtevajte avtentikacijo s skrivno kodo. Zaupni odjemalci imajo lahko poverilnice na varen način, ne da bi jih izpostavili nepooblaščenim osebam. Javne aplikacije, kot so izvorne namizne aplikacije ali aplikacije JavaScript SPA, ne morejo varno hraniti skrivnih kod.', + 'profile_personal_access_token_explanation' => 'Tukaj je vaš novi žeton za osebni dostop. To je edini čas, da bo prikazan, zato ga ne izgubite! Od zdaj naprej lahko uporabite ta žeton za pošiljanje zahtev API.', + 'profile_no_personal_access_token' => 'Niste ustvarili nobenih osebnih žetonov za dostop.', + 'profile_create_new_token' => 'Ustvari nov žeton', + 'profile_create_token' => 'Ustvari žeton', + 'profile_create' => 'Ustvari', + 'profile_save_changes' => 'Shrani spremembe', + 'profile_whoops' => 'Ups!', + 'profile_something_wrong' => 'Nekaj je šlo narobe!', + 'profile_try_again' => "Nekaj \u{200b}\u{200b}je šlo narobe. Prosim poskusite znova.", + 'amounts' => 'Zneski', + 'multi_account_warning_unknown' => 'Odvisno od vrste transakcije, ki jo ustvarite, lahko izvorni in/ali ciljni račun poznejših razdelitev preglasi tisto, kar je definirano v prvi razdelitvi transakcije.', + 'multi_account_warning_withdrawal' => 'Upoštevajte, da bo izvorni račun poznejših razdelitev preglasilo tisto, kar je definirano v prvi razdelitvi odliva.', + 'multi_account_warning_deposit' => 'Upoštevajte, da bo ciljni račun poznejših delitev preglasilo tisto, kar je opredeljeno v prvi delitvi priliva.', + 'multi_account_warning_transfer' => 'Upoštevajte, da bo izvorni + ciljni račun poznejših razdelitev preglasilo tisto, kar je definirano v prvi razdelitvi prenosa.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Izvozi podatke iz Firefly III', - 'export_data_menu' => 'Izvozi podatke', - 'export_data_bc' => 'Izvozi podatke iz Firefly III', - 'export_data_main_title' => 'Izvozi podatke iz Firefly III', - 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', - 'export_data_all_transactions' => 'Izvozi vse transakcije', - 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Izvozi podatke iz Firefly III', + 'export_data_menu' => 'Izvozi podatke', + 'export_data_bc' => 'Izvozi podatke iz Firefly III', + 'export_data_main_title' => 'Izvozi podatke iz Firefly III', + 'export_data_expl' => 'Ta povezava vam omogoča izvoz vseh transakcij + meta podatkov iz Firefly III. Prosimo, glejte pomoč (zgornja desna (?)-ikona) za več informacij o postopku.', + 'export_data_all_transactions' => 'Izvozi vse transakcije', + 'export_data_advanced_expl' => 'Če potrebujete naprednejšo ali specifično vrsto izvoza, preberite pomoč o uporabi konzolnega ukaza php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Ena priloga|:count prilog', - 'attachments' => 'Priloge', - 'edit_attachment' => 'Uredi prilogo ":name"', - 'update_attachment' => 'Posodobi prilogo', - 'delete_attachment' => 'Izbruši prilogo ":name"', - 'attachment_deleted' => 'Priloga ":name" izbrisana', - 'liabilities_deleted' => 'Deleted liability ":name"', - 'attachment_updated' => 'Priloga ":name" posodobljena', - 'upload_max_file_size' => 'Največja velikost datoteke: :size', - 'list_all_attachments' => 'Seznam vseh prilog', + 'nr_of_attachments' => 'Ena priloga|:count prilog', + 'attachments' => 'Priloge', + 'edit_attachment' => 'Uredi prilogo ":name"', + 'update_attachment' => 'Posodobi prilogo', + 'delete_attachment' => 'Izbriši prilogo ":name"', + 'attachment_deleted' => 'Priloga ":name" izbrisana', + 'liabilities_deleted' => 'Izbrisana odgovornost ":name"', + 'attachment_updated' => 'Priloga ":name" je posodobljena', + 'upload_max_file_size' => 'Največja velikost datoteke: :size', + 'list_all_attachments' => 'Seznam vseh prilog', // transaction index - 'title_expenses' => 'stroški', - 'title_withdrawal' => 'stroški', - 'title_revenue' => 'Dohodki / prihodki', - 'title_deposit' => 'Dohodki / prihodki', - 'title_transfer' => 'Prenosi', - 'title_transfers' => 'Prenosi', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Uporabi pravila', - 'fire_webhooks_checkbox' => 'Sproži Webhooke', + 'is_reconciled_fields_dropped' => 'Ker je ta transakcija usklajena, ne boste mogli posodobiti računov niti zneskov.', + 'title_expenses' => 'Stroški', + 'title_withdrawal' => 'Stroški', + 'title_revenue' => 'Dohodki / prihodki', + 'title_deposit' => 'Dohodki / prihodki', + 'title_transfer' => 'Prenosi', + 'title_transfers' => 'Prenosi', + 'submission_options' => 'Možnosti oddaje', + 'apply_rules_checkbox' => 'Uporabite pravila', + 'fire_webhooks_checkbox' => 'Sprožite Webhooke', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Ta transakcija je že odliv', - 'convert_is_already_type_Deposit' => 'Ta transakcija je že polog', - 'convert_is_already_type_Transfer' => 'Ta transakcija je že prenos', - 'convert_to_Withdrawal' => 'Pretvori ":description" v odliv', - 'convert_to_Deposit' => 'Pretvori ":description" v polog', - 'convert_to_Transfer' => 'Pretvori ":description" v prenos', - 'convert_options_WithdrawalDeposit' => 'Pretvori odliv v polog', - 'convert_options_WithdrawalTransfer' => 'Pretvori odliv v prenos', - 'convert_options_DepositTransfer' => 'Pretvori polog v prenos', - 'convert_options_DepositWithdrawal' => 'Pretvori polog v odliv', - 'convert_options_TransferWithdrawal' => 'Pretvori prenos v odliv', - 'convert_options_TransferDeposit' => 'Pretvori prenos v polog', - 'convert_Withdrawal_to_deposit' => 'Pretvori ta odliv v polog', - 'convert_Withdrawal_to_transfer' => 'Pretvori ta odliv v prenos', - 'convert_Deposit_to_withdrawal' => 'Pretvori ta polog v odliv', - 'convert_Deposit_to_transfer' => 'Pretvori ta polog v prenos', - 'convert_Transfer_to_deposit' => 'Pretvori ta prenos v polog', - 'convert_Transfer_to_withdrawal' => 'Pretvori ta prenos v odliv', - 'convert_please_set_revenue_source' => 'Izberite račun prihodkov iz katerega boste prenesli denar.', - 'convert_please_set_asset_destination' => 'Izberite premoženjski račun na katerega boste prenesli denar.', - 'convert_please_set_expense_destination' => 'Izberite na kateri stroškovni konto bo denar šel.', - 'convert_please_set_asset_source' => 'Izberite premoženjski račun iz katerega boste prenesli denar.', - 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', - 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', - 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => 'Transakcija je bila pretvorjena v odliv', - 'converted_to_Deposit' => 'Transakcija je bila pretvorjena v polog', - 'converted_to_Transfer' => 'Transakcija je bila pretvorjena v prenos', - 'invalid_convert_selection' => 'Račun, ki ste ga izbrali, je v tej transakciji se že uporabljen ali pa ne obstaja.', - 'source_or_dest_invalid' => 'Ne najdem pravilnih podrobnosti o transakciji. Pretvorba ni mogoča.', - 'convert_to_withdrawal' => 'Pretvori v odliv', - 'convert_to_deposit' => 'Pretvori v polog', - 'convert_to_transfer' => 'Pretvori v prenos', + 'convert_is_already_type_Withdrawal' => 'Ta transakcija je že odliv', + 'convert_is_already_type_Deposit' => 'Ta transakcija je že priliv', + 'convert_is_already_type_Transfer' => 'Ta transakcija je že prenos', + 'convert_to_Withdrawal' => 'Pretvori ":description" v odliv', + 'convert_to_Deposit' => 'Pretvori ":description" v priliv', + 'convert_to_Transfer' => 'Pretvori ":description" v prenos', + 'convert_options_WithdrawalDeposit' => 'Pretvori odliv v priliv', + 'convert_options_WithdrawalTransfer' => 'Pretvori odliv v prenos', + 'convert_options_DepositTransfer' => 'Pretvori priliv v prenos', + 'convert_options_DepositWithdrawal' => 'Pretvori polog v odliv', + 'convert_options_TransferWithdrawal' => 'Pretvori prenos v odliv', + 'convert_options_TransferDeposit' => 'Pretvori prenos v priliv', + 'convert_Withdrawal_to_deposit' => 'Pretvori ta odliv v priliv', + 'convert_Withdrawal_to_transfer' => 'Pretvori ta dvig v prenos', + 'convert_Deposit_to_withdrawal' => 'Pretvori ta priliv v odliv', + 'convert_Deposit_to_transfer' => 'Pretvori ta priliv v prenos', + 'convert_Transfer_to_deposit' => 'Pretvori ta prenos v priliv', + 'convert_Transfer_to_withdrawal' => 'Pretvori ta prenos v odliv', + 'convert_please_set_revenue_source' => 'Izberite račun prihodkov iz katerega boste prenesli denar.', + 'convert_please_set_asset_destination' => 'Izberite račun sredstev na katerega boste prenesli denar.', + 'convert_please_set_expense_destination' => 'Izberite na kateri račun stroškov bo šel denar.', + 'convert_please_set_asset_source' => 'Izberite račun sredstev iz katerega boste prenesli denar.', + 'convert_expl_w_d' => 'Pri pretvorbi iz odliva v priliv bo denar položen na prikazani ciljni račun, namesto da bi bil dvignjen z njega.|Pri pretvorbi iz odliva v priliv bo denar položen na prikazane ciljne račune, namesto da se od njih umika.', + 'convert_expl_w_t' => 'Pri pretvorbi odliva v prenos bo denar prenesen stran od izvornega računa na drug račun sredstev ali obveznosti, namesto da bi bil porabljen na prvotnem računu stroškov.|Pri pretvarjanju odliva v prenos bo denar prenesen stran od izvornega računa na druge račune sredstev ali obveznosti, namesto da bi bili porabljeni na prvotnih računih odhodkov.', + 'convert_expl_d_w' => 'Pri pretvorbi priliva v odliv, bo denar dvignjen s prikazanega izvornega računa, namesto da bi bil položen nanj.|Pri pretvorbi priliva v odliv, bo denar dvignjen s prikazanih izvornih računov, namesto da bi bil položen nanje.', + 'convert_expl_d_t' => 'Ko pretvorite priliv v prenos, bo denar položen na navedeni ciljni račun s katerega koli računa sredstev ali obveznosti.|Ko pretvorite priliv v prenos, bo denar položen na navedene ciljne račune s katerega koli vaših računov sredstev ali obveznosti.', + 'convert_expl_t_w' => 'Ko pretvorite nakazilo v odliv, bo denar porabljen na ciljnem računu, ki ga nastavite tukaj, namesto da bi bil prenesen stran.|Ko pretvorite prenos v odliv, bo denar porabljen na ciljnih računih, ki ste jih nastavili tukaj, namesto da bi bil premeščen.', + 'convert_expl_t_d' => 'Ko pretvorite nakazilo v priliv, bo denar položen na ciljni račun, ki ga vidite tukaj, namesto da bi bil nakazan vanj.|Ko pretvorite nakazilo v priliv, bo denar položen na ciljne račune, ki jih vidite tukaj, namesto da bi bil prenesen vanje.', + 'convert_select_sources' => 'Če želite dokončati pretvorbo, nastavite nov izvorni račun spodaj.|Za dokončanje pretvorbe nastavite nove izvorne račune spodaj.', + 'convert_select_destinations' => 'Za dokončanje konverzije spodaj izberite nov ciljni račun.|Za dokončanje konverzije spodaj izberite nove ciljne račune.', + 'converted_to_Withdrawal' => 'Transakcija je bila pretvorjena v odliv', + 'converted_to_Deposit' => 'Transakcija je bila pretvorjena v priliv', + 'converted_to_Transfer' => 'Transakcija je bila pretvorjena v prenos', + 'invalid_convert_selection' => 'Račun, ki ste ga izbrali, je v tej transakciji že uporabljen ali pa ne obstaja.', + 'source_or_dest_invalid' => 'Ne najdem pravilnih podrobnosti o transakciji. Pretvorba ni mogoča.', + 'convert_to_withdrawal' => 'Pretvori v odliv', + 'convert_to_deposit' => 'Pretvori v priliv', + 'convert_to_transfer' => 'Pretvori v prenos', // create new stuff: - 'create_new_withdrawal' => 'Ustvari nov odliv', - 'create_new_deposit' => 'Ustvari nov polog', - 'create_new_transfer' => 'Ustvari nov prenos', - 'create_new_asset' => 'ustvari nov premoženjski račun', - 'create_new_liabilities' => 'Ustvari novo obveznost', - 'create_new_expense' => 'ustvari nov konto za stroške', - 'create_new_revenue' => 'Ustvari nov račun prihodkov', - 'create_new_piggy_bank' => 'Ustvari nov hranilnik', - 'create_new_bill' => 'Ustvari nov trajnik', - 'create_new_subscription' => 'Ustvarite novo naročnino', - 'create_new_rule' => 'Ustvari novo pravilo', + 'create_new_withdrawal' => 'Ustvari nov odliv', + 'create_new_deposit' => 'Ustvari nov priliv', + 'create_new_transfer' => 'Ustvari nov prenos', + 'create_new_asset' => 'Ustvari nov račun sredstev', + 'create_new_liabilities' => 'Ustvari novo obveznost', + 'create_new_expense' => 'Ustvari nov račun stroškov', + 'create_new_revenue' => 'Ustvari nov račun prihodkov', + 'create_new_piggy_bank' => 'Ustvari nov hranilnik', + 'create_new_bill' => 'Ustvari nov račun', + 'create_new_subscription' => 'Ustvari novo naročnino', + 'create_new_rule' => 'Ustvari novo pravilo', // currencies: - 'create_currency' => 'Ustvarite valuto', - 'store_currency' => 'Shrani novo valuto', - 'update_currency' => 'Osveži valuto', - 'new_default_currency' => ':name ni v privzeti valuti.', - 'cannot_delete_currency' => 'Ne morem izbrisati :name ker je v uporabi.', - 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', - 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', - 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', - 'cannot_disable_currency_account_meta' => 'Ne morem onemogočiti :name, ker je uporabljen v računih sredstev.', - 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', - 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', - 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', - 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', - 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', - 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', - 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', - 'deleted_currency' => 'Valuta :name izbrisana', - 'created_currency' => 'Valuta :name ustvarjena', - 'could_not_store_currency' => 'Nove valute ni bilo mogoče shraniti.', - 'updated_currency' => 'Valuta :name posodobljena', - 'ask_site_owner' => 'Dogovori se s/z :owner da doda, odstrani ali uredi valute.', - 'currencies_intro' => 'Firefly III podpira različne valute, ki jih lahko nastavite in omogočite tukaj.', - 'make_default_currency' => 'Nastavi za privzeto', - 'default_currency' => 'privzeto', - 'currency_is_disabled' => 'Onemogočeno', - 'enable_currency' => 'Omogoči', - 'disable_currency' => 'Onemogoči', - 'currencies_default_disabled' => 'Večina teh valut je privzeto onemogočena. Če jih želite uporabiti, jih morate najprej omogočiti.', - 'currency_is_now_enabled' => 'Valuta ":name" je bila omogočena', - 'currency_is_now_disabled' => 'Valuta ":name" je bila onemogočena', + 'create_currency' => 'Ustvari novo valuto', + 'store_currency' => 'Shrani novo valuto', + 'update_currency' => 'Osveži valuto', + 'new_default_currency' => '":name" je zdaj privzeta valuta.', + 'default_currency_failed' => '»:name« ni bilo mogoče narediti za privzeto valuto. Preverite dnevnike.', + 'cannot_delete_currency' => 'Ne morem izbrisati :name ker je v uporabi.', + 'cannot_delete_fallback_currency' => ':name je sistemska nadomestna valuta in je ni mogoče izbrisati.', + 'cannot_disable_currency_journals' => ':name ni mogoče onemogočiti, ker ga transakcije še vedno uporabljajo.', + 'cannot_disable_currency_last_left' => ':name ni mogoče onemogočiti, ker je to zadnja omogočena valuta.', + 'cannot_disable_currency_account_meta' => 'Ne morem onemogočiti :name, ker je uporabljen v računih sredstev.', + 'cannot_disable_currency_bills' => 'Ni mogoče onemogočiti :name, ker se uporablja v računu.', + 'cannot_disable_currency_recurring' => ':name ni mogoče onemogočiti, ker se uporablja v ponavljajočih se transakcijah.', + 'cannot_disable_currency_available_budgets' => ':name ni mogoče onemogočiti, ker se uporablja v ponavljajočih se transakcijah.', + 'cannot_disable_currency_budget_limits' => 'Ni mogoče onemogočiti :name, ker se uporablja v proračunskih omejitvah.', + 'cannot_disable_currency_current_default' => ':name ni mogoče onemogočiti, ker je to trenutna privzeta valuta.', + 'cannot_disable_currency_system_fallback' => ':name ni mogoče onemogočiti, ker je sistemska privzeta valuta.', + 'disable_EUR_side_effects' => 'Evro je rezervna valuta sistema v sili. Če ga onemogočite, lahko pride do nenamernih stranskih učinkov in lahko razveljavi vašo garancijo.', + 'deleted_currency' => 'Valuta :name je izbrisana', + 'created_currency' => 'Valuta :name je ustvarjena', + 'could_not_store_currency' => 'Nove valute ni bilo mogoče shraniti.', + 'updated_currency' => 'Valuta :name je posodobljena', + 'ask_site_owner' => 'Prosim dogovorite se s :owner da doda, odstrani ali uredi valute.', + 'currencies_intro' => 'Firefly III podpira različne valute, ki jih lahko nastavite in omogočite tukaj.', + 'make_default_currency' => 'Nastavi za privzeto', + 'default_currency' => 'privzeto', + 'currency_is_disabled' => 'Onemogočeno', + 'enable_currency' => 'Omogoči', + 'disable_currency' => 'Onemogoči', + 'currencies_default_disabled' => 'Večina teh valut je privzeto onemogočena. Če jih želite uporabiti, jih morate najprej omogočiti.', + 'currency_is_now_enabled' => 'Valuta ":name" je bila omogočena', + 'could_not_enable_currency' => 'Ni bilo mogoče omogočiti valute ":name". Prosimo, preglejte dnevnike.', + 'currency_is_now_disabled' => 'Valuta ":name" je bila onemogočena', + 'could_not_disable_currency' => 'Ni bilo mogoče onemogočiti valute ":name". Mogoče je še v uporabi?', // forms: - 'mandatoryFields' => 'Obvezna polja', - 'optionalFields' => 'Izbirna polja', - 'options' => 'Možnosti', + 'mandatoryFields' => 'Obvezna polja', + 'optionalFields' => 'Izbirna polja', + 'options' => 'Možnosti', // budgets: - 'daily_budgets' => 'Dnevni proračuni', - 'weekly_budgets' => 'Tedenski proračuni', - 'monthly_budgets' => 'Mesečni proračuni', - 'quarterly_budgets' => 'Četrtletni proračuni', - 'half_year_budgets' => 'Polletni proračuni', - 'yearly_budgets' => 'Letni proračuni', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', - 'total_available_budget' => 'Total available budget (between :start and :end)', - 'total_available_budget_in_currency' => 'Total available budget in :currency', - 'see_below' => 'glej spodaj', - 'create_new_budget' => 'Ustvari nov proračun', - 'store_new_budget' => 'Shrani nov proračun', - 'stored_new_budget' => 'Nov proračun ":name" shranjen', - 'available_between' => 'Na voljo med :start in :end', - 'transactionsWithoutBudget' => 'Stroški brez proračuna', - 'transactions_no_budget' => 'Stroški brez proračuna med :start in :end', - 'spent_between' => 'Že porabljeno med :start in :end', - 'set_available_amount' => 'Set available amount', - 'update_available_amount' => 'Update available amount', - 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', - 'createBudget' => 'Nov proračun', - 'invalid_currency' => 'To je neveljavna valuta', - 'invalid_amount' => 'Prosimo, vnesite znesek', - 'set_ab' => 'The available budget amount has been set', - 'updated_ab' => 'The available budget amount has been updated', - 'deleted_ab' => 'The available budget amount has been deleted', - 'deleted_bl' => 'The budgeted amount has been removed', - 'alt_currency_ab_create' => 'Set the available budget in another currency', - 'bl_create_btn' => 'Set budget in another currency', - 'inactiveBudgets' => 'Neaktivni proračuni', - 'without_budget_between' => 'Transakcije brez proračuna med :start in :end', - 'delete_budget' => 'Izbriši proračun ":name"', - 'deleted_budget' => 'Proračun ":name" izbrisan', - 'edit_budget' => 'Uredi proračun ":name"', - 'updated_budget' => 'Proračun ":name" posodobljen', - 'update_amount' => 'Posodobi znesek', - 'update_budget' => 'Posodobi proračun', - 'update_budget_amount_range' => 'Posodobi (pričakovani) razpoložljivi znesek med :start in :end', - 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', - 'set_budget_limit' => 'Set budgeted amount', - 'budget_period_navigator' => 'Obdobje', - 'info_on_available_amount' => 'Kaj imam na voljo?', - 'available_amount_indication' => 'Uporabi te zneske za informacijo kakšen bi bil skupni proračun.', - 'suggested' => 'Predlagano', - 'average_between' => 'Povprečno med :start in :end', - 'transferred_in' => 'Transferred (in)', - 'transferred_away' => 'Transferred (away)', - 'auto_budget_none' => 'Brez samodejnega proračuna', - 'auto_budget_reset' => 'Nastavi fiksni znesek za vsako obdobje', - 'auto_budget_rollover' => 'Dodaj znesek za vsako obdobje', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Dnevno', - 'auto_budget_period_weekly' => 'Tedensko', - 'auto_budget_period_monthly' => 'Mesečno', - 'auto_budget_period_quarterly' => 'Četrtletno', - 'auto_budget_period_half_year' => 'Polletno', - 'auto_budget_period_yearly' => 'Letno', - 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', - 'auto_budget_reset_icon' => 'This budget will be set periodically', - 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', + 'daily_budgets' => 'Dnevni proračuni', + 'weekly_budgets' => 'Tedenski proračuni', + 'monthly_budgets' => 'Mesečni proračuni', + 'quarterly_budgets' => 'Četrtletni proračuni', + 'half_year_budgets' => 'Polletni proračuni', + 'yearly_budgets' => 'Letni proračuni', + 'other_budgets' => 'Časovni proračuni po meri', + 'budget_limit_not_in_range' => 'Ta znesek velja od :start do :end:', + 'total_available_budget' => 'Skupni razpoložljivi proračun (med :start in :end)', + 'total_available_budget_in_currency' => 'Skupni razpoložljivi proračun v :currency', + 'see_below' => 'glej spodaj', + 'create_new_budget' => 'Ustvari nov proračun', + 'store_new_budget' => 'Shrani nov proračun', + 'stored_new_budget' => 'Nov proračun ":name" je shranjen', + 'available_between' => 'Na voljo med :start in :end', + 'transactionsWithoutBudget' => 'Stroški brez proračuna', + 'transactions_no_budget' => 'Stroški brez proračuna med :start in :end', + 'spent_between' => 'Že porabljeno med :start in :end', + 'spent_between_left' => 'Porabljeno :spent med :start in :end, preostane še :left.', + 'set_available_amount' => 'Nastavi razpoložljivo količino', + 'update_available_amount' => 'Posodobi razpoložljivo količino', + 'ab_basic_modal_explain' => 'S tem obrazcem navedite, koliko pričakujete, da boste lahko dodali v proračun (skupaj, v :currency) v navedenem obdobju.', + 'createBudget' => 'Nov proračun', + 'invalid_currency' => 'To je neveljavna valuta', + 'invalid_amount' => 'Prosim, vnesite znesek', + 'set_ab' => 'Razpoložljivi proračunski znesek je nastavljen', + 'updated_ab' => 'Razpoložljivi proračunski znesek je posodobljen', + 'deleted_ab' => 'Razpoložljivi znesek proračuna je bil izbrisan', + 'deleted_bl' => 'Proračunski znesek je bil odstranjen', + 'alt_currency_ab_create' => 'Nastavite razpoložljivi proračun v drugi valuti', + 'bl_create_btn' => 'Nastavite proračun v drugi valuti', + 'inactiveBudgets' => 'Neaktivni proračuni', + 'without_budget_between' => 'Transakcije brez proračuna med :start in :end', + 'delete_budget' => 'Izbriši proračun ":name"', + 'deleted_budget' => 'Proračun ":name" izbrisan', + 'edit_budget' => 'Uredi proračun ":name"', + 'updated_budget' => 'Proračun ":name" je posodobljen', + 'update_amount' => 'Posodobi znesek', + 'update_budget' => 'Posodobi proračun', + 'update_budget_amount_range' => 'Posodobi (pričakovani) razpoložljivi znesek med :start in :end', + 'set_budget_limit_title' => 'Nastavite proračunski znesek za proračun :budget med :start in :end', + 'set_budget_limit' => 'Določite proračunski znesek', + 'budget_period_navigator' => 'Obdobje', + 'info_on_available_amount' => 'Kaj imam na voljo?', + 'available_amount_indication' => 'Uporabi te zneske za informacijo kakšen bi bil skupni proračun.', + 'suggested' => 'Predlagano', + 'average_between' => 'Povprečno med :start in :end', + 'transferred_in' => 'Preneseno (v)', + 'transferred_away' => 'Preneseno (iz)', + 'auto_budget_none' => 'Brez samodejnega proračuna', + 'auto_budget_reset' => 'Nastavite fiksni znesek za vsako obdobje', + 'auto_budget_rollover' => 'Dodajte znesek za vsako obdobje', + 'auto_budget_adjusted' => 'Vsako obdobje dodajte znesek in popravite preveliko porabo', + 'auto_budget_period_daily' => 'Dnevno', + 'auto_budget_period_weekly' => 'Tedensko', + 'auto_budget_period_monthly' => 'Mesečno', + 'auto_budget_period_quarterly' => 'Četrtletno', + 'auto_budget_period_half_year' => 'Polletno', + 'auto_budget_period_yearly' => 'Letno', + 'auto_budget_help' => 'Več o tej funkciji lahko preberete v pomoči. Kliknite ikono zgoraj desno (?).', + 'auto_budget_reset_icon' => 'Ta proračun bo nastavljen periodično', + 'auto_budget_rollover_icon' => 'Proračunski znesek se bo občasno povečeval', + 'auto_budget_adjusted_icon' => 'Proračunski znesek se bo občasno povečeval in popravljal za prekomerno porabo', + 'remove_budgeted_amount' => 'Odstrani proračunski znesek v :currency', // bills: - 'subscription' => 'Naročnina', - 'not_expected_period' => 'Not expected this period', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Ne (še)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Trajnik se ujema s transakcijami med :low in :high.', - 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', - 'bill_related_rules' => 'Pravila povezana s tem trajnikom', - 'repeats' => 'Ponovitve', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Povezane transakcije', - 'auto_match_on' => 'Samodejno povezano s Firefly III', - 'auto_match_off' => 'Ne povezano samodejno s Firefly III', - 'next_expected_match' => 'Naslenje pričakovano ujemanje', - 'delete_bill' => 'Izbriši trajnik ":name"', - 'deleted_bill' => 'Trajnik ":name" izbrisan', - 'edit_bill' => 'Uredi trajnik ":name"', - 'more' => 'Več', - 'rescan_old' => 'Znova zaženite pravila za vse transakcije', - 'update_bill' => 'Posodobi pravilo', - 'updated_bill' => 'Trajnik ":name" posodobljen', - 'store_new_bill' => 'Shrani nov trajnik', - 'stored_new_bill' => 'Nov trajnik ":name" shranjen', - 'cannot_scan_inactive_bill' => 'Neaktivnih računov ni mogoče pregledati.', - 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', - 'average_bill_amount_year' => 'Povprečen znesek trajnika (:year)', - 'average_bill_amount_overall' => 'Povprečen znesek trajnika (vseh)', - 'bill_is_active' => 'Trajnik je aktiven', - 'bill_expected_between' => 'Pričakovano med :start in :end', - 'bill_will_automatch' => 'Račun bo samodejno povezan s transakcijami', - 'skips_over' => 'preskoči', - 'bill_store_error' => 'Pri shranjevanju novega trajnika je prišlo do nepričakovane napake. Preverite datoteke dnevnika', - 'list_inactive_rule' => 'neaktivno pravilo', - 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', - 'bill_expected_date' => 'Pričakovano :date', - 'bill_expected_date_js' => 'Pričakovano {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Plačano na {date}', - 'bill_repeats_weekly' => 'Ponovi vsak teden', - 'bill_repeats_monthly' => 'Repeats monthly', - 'bill_repeats_quarterly' => 'Repeats quarterly', - 'bill_repeats_half-year' => 'Repeats every half year', - 'bill_repeats_yearly' => 'Ponovi se vsako leto', - 'bill_repeats_weekly_other' => 'Repeats every other week', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Ponovi se vsako leto', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Naročnine', - 'go_to_subscriptions' => 'Pojdite na svoje naročnine', - 'forever' => 'V nedolged', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Naročnina', + 'not_expected_period' => 'Ni pričakovano v tem obdobju', + 'subscriptions_in_group' => 'Naročnine v skupini "%{title}"', + 'subscr_expected_x_times' => 'Pričakujte, da boste v tem obdobju plačali %{amount} %{times}-krat', + 'not_or_not_yet' => 'Ne (še)', + 'visit_bill' => 'Obiščite račun ":name" v Firefly III', + 'match_between_amounts' => 'Račun se ujema s transakcijami med :low in :high.', + 'running_again_loss' => 'Prej povezane transakcije s tem računom lahko izgubijo povezavo, če se (ne več) ujemajo s pravilom(-i).', + 'bill_related_rules' => 'Pravila povezana s tem računom', + 'repeats' => 'Ponovitve', + 'bill_end_date_help' => 'Izbirno polje. Račun naj bi se končal na ta datum.', + 'bill_extension_date_help' => 'Izbirno polje. Račun je treba podaljšati (ali preklicati) na ali pred tem datumom.', + 'bill_end_index_line' => 'Ta račun se konča dne :date', + 'bill_extension_index_line' => 'Ta račun je treba podaljšati ali preklicati dne :date', + 'connected_journals' => 'Povezane transakcije', + 'auto_match_on' => 'Samodejno povezano s Firefly III', + 'auto_match_off' => 'Ne povezano samodejno s Firefly III', + 'next_expected_match' => 'Naslednje pričakovano ujemanje', + 'delete_bill' => 'Izbriši račun ":name"', + 'deleted_bill' => 'Račun ":name" je izbrisan', + 'edit_bill' => 'Uredi račun ":name"', + 'more' => 'Več', + 'rescan_old' => 'Znova zaženite pravila za vse transakcije', + 'update_bill' => 'Posodobi račun', + 'updated_bill' => 'Račun ":name" je posodobljen', + 'store_new_bill' => 'Shrani nov račun', + 'stored_new_bill' => 'Nov račun ":name" je shranjen', + 'cannot_scan_inactive_bill' => 'Neaktivnih računom ni mogoče pregledati.', + 'rescanned_bill' => 'Ponovno pregledal vse in povezal :count transakcije z računom.|Znova pregledal vse in povezal :count transakcij z računom.', + 'average_bill_amount_year' => 'Povprečen znesek računa (:year)', + 'average_bill_amount_overall' => 'Povprečen znesek računa (vseh)', + 'bill_is_active' => 'Račun je aktiven', + 'bill_expected_between' => 'Pričakovano med :start in :end', + 'bill_will_automatch' => 'Račun bo samodejno povezan z ujemajočimi se transakcijami', + 'skips_over' => 'preskoči', + 'bill_store_error' => 'Pri shranjevanju novega računa je prišlo do nepričakovane napake. Preverite datoteke dnevnika', + 'list_inactive_rule' => 'neaktivno pravilo', + 'bill_edit_rules' => 'Firefly III bo poskušal urediti tudi pravilo v zvezi s tem predlogom pravila. Če ste to pravilo uredili sami, Firefly III ne bo spremenil ničesar.|Firefly III bo poskušal urediti tudi pravila :count, povezana s tem računom. Če pa ste ta pravila uredili sami, Firefly III ne bo spremenil ničesar.', + 'bill_expected_date' => 'Pričakovano :date', + 'bill_expected_date_js' => 'Pričakovano {date}', + 'expected_amount' => '(Pričakovan) znesek', + 'bill_paid_on' => 'Plačano na {date}', + 'bill_repeats_weekly' => 'Ponovi vsak teden', + 'bill_repeats_monthly' => 'Ponavlja se mesečno', + 'bill_repeats_quarterly' => 'Ponavlja se četrtletno', + 'bill_repeats_half-year' => 'Ponavlja se vsake pol leta', + 'bill_repeats_yearly' => 'Ponovi se vsako leto', + 'bill_repeats_weekly_other' => 'Ponavlja se vsak drugi teden', + 'bill_repeats_monthly_other' => 'Ponavlja se vsak drugi mesec', + 'bill_repeats_quarterly_other' => 'Ponovi vsako drugo četrtletje', + 'bill_repeats_half-year_other' => 'Ponovi se vsako leto', + 'bill_repeats_yearly_other' => 'Ponavlja se vsako drugo leto', + 'bill_repeats_weekly_skip' => 'Ponovi se vsakih {skip} tednov', + 'bill_repeats_monthly_skip' => 'Ponovi se vsakih {skip} mesecev', + 'bill_repeats_quarterly_skip' => 'Ponovi se vsakih {skip} četrtletij', + 'bill_repeats_half-year_skip' => 'Ponovi se vsake {skip} pol leta', + 'bill_repeats_yearly_skip' => 'Ponovi se vsakih {skip} let', + 'subscriptions' => 'Naročnine', + 'go_to_subscriptions' => 'Pojdite na svoje naročnine', + 'forever' => 'V nedolged', + 'extension_date_is' => 'Datum podaljšanja je {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', - 'all_accounts_inactive' => 'These are your inactive accounts.', - 'active_account_link' => 'This link goes back to your active accounts.', - 'account_missing_transaction' => 'Računa #:id (":name") si ni mogoče neposredno ogledati, vendar Firefly-u manjkajo informacije o preusmeritvi.', - 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', - 'details_for_asset' => 'podrobnosti za premoženjski račun ":name"', - 'details_for_expense' => 'podrobnosti stroškovnega konta ":name"', - 'details_for_revenue' => 'Podrobnosti za račun prihodkov ":name"', - 'details_for_cash' => 'Podrobnosti za gotovinski račun ":name"', - 'store_new_asset_account' => 'shrani nov premoženjski račun', - 'store_new_expense_account' => 'shrani nov konto za stroške', - 'store_new_revenue_account' => 'Shrani nov račun prihodkov', - 'edit_asset_account' => 'uredi premoženjski račun ":name"', - 'edit_expense_account' => 'uredi stroškovni konto ":name"', - 'edit_revenue_account' => 'Uredi račun prihodkov ":name"', - 'delete_asset_account' => 'izbriši premoženjski račun ":name"', - 'delete_expense_account' => 'izbriši stroškovni konto ":name"', - 'delete_revenue_account' => 'Izbriši račun prihodkov ":name"', - 'delete_liabilities_account' => 'Izbriši obveznost ":name"', - 'asset_deleted' => 'Premoženjski račun ":name" je bil uspešno izbrisan.', - 'account_deleted' => 'Successfully deleted account ":name"', - 'expense_deleted' => 'stroškovni konto ":name" je bil uspešno izbrisan', - 'revenue_deleted' => 'Račun prihodkov ":name" je bil uspešno izbrisan', - 'update_asset_account' => 'posodobi premoženjski račun', - 'update_undefined_account' => 'Posodobi račun', - 'update_liabilities_account' => 'Uredi obveznost', - 'update_expense_account' => 'Posodobi račun stroškov', - 'update_revenue_account' => 'Posodobi račun prihodkov', - 'make_new_asset_account' => 'ustvari nov premoženjski račun', - 'make_new_expense_account' => 'Ustvari nov račun stroškov', - 'make_new_revenue_account' => 'Ustvari nov račun prihodkov', - 'make_new_liabilities_account' => 'Ustvari novo obveznost', - 'asset_accounts' => 'premoženjski računi', - 'undefined_accounts' => 'Računi', - 'asset_accounts_inactive' => 'Računi sredstev (neaktivno)', - 'expense_account' => 'Račun stroškov', - 'expense_accounts' => 'Računi stroškov', - 'expense_accounts_inactive' => 'Računi sredstev (neaktivno)', - 'revenue_account' => 'Račun prihodkov', - 'revenue_accounts' => 'Račun prihodkov', - 'revenue_accounts_inactive' => 'Račun prihodkov (neaktivno)', - 'cash_accounts' => 'Gotovinski računi', - 'Cash account' => 'Gotovinski račun', - 'liabilities_accounts' => 'Obveznosti', - 'liabilities_accounts_inactive' => 'Liabilities (inactive)', - 'reconcile_account' => 'Uskladi račun: ":account"', - 'overview_of_reconcile_modal' => 'Pregled usklajevanja', - 'delete_reconciliation' => 'Izbriši uskladitev', - 'update_reconciliation' => 'Posodobi uskladitev', - 'amount_cannot_be_zero' => 'Znesek ne sme biti nič', - 'end_of_reconcile_period' => 'Konec obdobja usklajevanja :period', - 'start_of_reconcile_period' => 'Začetek obdobja usklajevanja :period', - 'start_balance' => 'Začetno stanje', - 'end_balance' => 'Končno stanje', - 'update_balance_dates_instruction' => 'Zgornje zneske in datume uskladite z bančnim izpiskom in pritisnite »Začni usklajevanje«', - 'select_transactions_instruction' => 'Izberite transakcije, ki so prikazane v bančnem izpisku.', - 'select_range_and_balance' => 'Najprej preverite obseg datuma in stanje. Nato pritisnite »Začni usklajevanje«', - 'date_change_instruction' => 'Če zdaj spremenite časovno obdobje, se celotna zgodovina izgubi.', - 'update_selection' => 'Posodobi izbor', - 'store_reconcile' => 'Shrani uskladitev', - 'reconciliation_transaction' => 'Uskladitvena transakcija', - 'Reconciliation' => 'Usklajevanje', - 'reconciliation' => 'Usklajevanje', - 'reconcile_options' => 'Možnosti usklajevanja', - 'reconcile_range' => 'Obseg usklajevanja', - 'start_reconcile' => 'Začni usklajevanje', - 'cash_account_type' => 'Gotovina', - 'cash' => 'gotovina', - 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', - 'account_type' => 'Vrsta računa', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'Nov račun ":name" shranjen!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => 'Račun ":name" posodobljen', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Možnosti kreditne kartice', - 'no_transactions_account' => 'Ni transakcij (za to obdobje) za premoženjski račun ":name".', - 'no_transactions_period' => 'V tem obdobju ni transakcij.', - 'no_data_for_chart' => 'Za ustvarjanje tega diagrama (še) ni dovolj informacij.', - 'select_at_least_one_account' => 'Prosim, izberi vsaj en račun sredstev', - 'select_at_least_one_category' => 'Prosim izberi vsaj eno kategorijo', - 'select_at_least_one_budget' => 'Izberite vsaj en proračun', - 'select_at_least_one_tag' => 'Prosim izberite vsaj eno oznako', - 'select_at_least_one_expense' => 'Izberite vsaj eno kombinacijo računov za stroške/prihodke. Če jih nimate (prazen seznam), to poročilo ni na voljo.', - 'account_default_currency' => 'To bo privzeta valuta tega računa.', - 'reconcile_has_more' => 'V Firefly III glavni knjigi je več denarja, kot vaša banka trdi, da bi morali imeti. Obstaja več možnosti. Izberi, kaj želiš storiti. Nato pritisni "Potrdi usklajevanje".', - 'reconcile_has_less' => 'V Firefly III glavni knjigi je manj denarja, kot vaša banka trdi, da bi morali imeti. Obstaja več možnosti. Izberi, kaj želiš storiti. Nato pritisni "Potrdi usklajevanje".', - 'reconcile_is_equal' => 'Firefly III glavna knjiga in vaši bančni izpiski se ujemajo. Ničesar vam ni treba storiti. Pritisnite »Potrdi usklajevanje«, da potrdite vnos.', - 'create_pos_reconcile_transaction' => 'Počisti izbrane transakcije in ustvari popravek, ki bo dodal :amount na ta račun sredstev.', - 'create_neg_reconcile_transaction' => 'Počisti izbrane transakcije in ustvari popravek, ki bo odvzel :amount s tega računa sredstev.', - 'reconcile_do_nothing' => 'Počisti izbrane transakcije, vendar jih ne popravi.', - 'reconcile_go_back' => 'Popravke lahko kadar koli urediš ali izbrišeš.', - 'must_be_asset_account' => 'Uskladiš lahko samo račune sredstev', - 'reconciliation_stored' => 'Usklajevanje shranjeno', - 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', - 'reconciliation_transaction_title' => 'Uskladitev (:from do :to)', - 'sum_of_reconciliation' => 'Vsota uskladitev', - 'reconcile_this_account' => 'Uskladi ta račun', - 'reconcile' => 'Poravnaj', - 'show' => 'Prikaži', - 'confirm_reconciliation' => 'Potrdi uskladitev', - 'submitted_start_balance' => 'Predloženo začetno stanje', - 'selected_transactions' => 'Izbrane transakcije (:count)', - 'already_cleared_transactions' => 'Že obračunane transakcije (:count)', - 'submitted_end_balance' => 'Predloženo končno stanje', - 'initial_balance_description' => 'Začetno stanje za ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'neznano', - 'interest_calc_daily' => 'Na dan', - 'interest_calc_monthly' => 'Na mesec', - 'interest_calc_yearly' => 'Na leto', - 'interest_calc_weekly' => 'Tedensko', - 'interest_calc_half-year' => 'Na pol leta', - 'interest_calc_quarterly' => 'Na četrtletje', - 'initial_balance_account' => 'Initial balance account of :account', - 'list_options' => 'Seznam možnosti', + 'i_am_owed_amount' => 'Dolžan sem znesek', + 'i_owe_amount' => 'Dolgujem znesek', + 'inactive_account_link' => 'Imate :count neaktivnih (arhiviranih) računov, ki si jih lahko ogledate na tej ločeni strani.|Imate :count neaktivnih (arhiviranih) računov, ki si jih lahko ogledate na tej ločeni strani.', + 'all_accounts_inactive' => 'To so vaši neaktivni računi.', + 'active_account_link' => 'Ta povezava vodi nazaj do vaših aktivnih računov.', + 'account_missing_transaction' => 'Računa #:id (":name") si ni mogoče neposredno ogledati, vendar Firefly-u manjkajo informacije o preusmeritvi.', + 'cc_monthly_payment_date_help' => 'Izberite katero koli leto in kateri koli mesec, vseeno bo prezrt. Pomemben je le dan v mesecu.', + 'details_for_asset' => 'Podrobnosti za račun sredstev ":name"', + 'details_for_expense' => 'Podrobnosti računa stroškov ":name"', + 'details_for_revenue' => 'Podrobnosti za račun prihodkov ":name"', + 'details_for_cash' => 'Podrobnosti za gotovinski račun ":name"', + 'store_new_asset_account' => 'Shrani nov račun sredstev', + 'store_new_expense_account' => 'Shrani nov račun stroškov', + 'store_new_revenue_account' => 'Shrani nov račun prihodkov', + 'edit_asset_account' => 'Uredi račun sredstev ":name"', + 'edit_expense_account' => 'Uredi račun stroškov ":name"', + 'edit_revenue_account' => 'Uredi račun prihodkov ":name"', + 'delete_asset_account' => 'Izbriši račun sredstev ":name"', + 'delete_expense_account' => 'Izbriši račun stroškov ":name"', + 'delete_revenue_account' => 'Izbriši račun prihodkov ":name"', + 'delete_liabilities_account' => 'Izbriši obveznost ":name"', + 'asset_deleted' => 'Račun sredstev ":name" je bil uspešno izbrisan', + 'account_deleted' => 'Uspešno izbrisan račun ":name"', + 'expense_deleted' => 'Račun stroškov ":name" je bil uspešno izbrisan', + 'revenue_deleted' => 'Račun prihodkov ":name" je bil uspešno izbrisan', + 'update_asset_account' => 'Posodobite račun sredstev', + 'update_undefined_account' => 'Posodobi račun', + 'update_liabilities_account' => 'Uredi obveznost', + 'update_expense_account' => 'Posodobi račun stroškov', + 'update_revenue_account' => 'Posodobi račun prihodkov', + 'make_new_asset_account' => 'Ustvari nov račun sredstev', + 'make_new_expense_account' => 'Ustvari nov račun stroškov', + 'make_new_revenue_account' => 'Ustvari nov račun prihodkov', + 'make_new_liabilities_account' => 'Ustvari novo obveznost', + 'asset_accounts' => 'Računi sredstev', + 'undefined_accounts' => 'Računi', + 'asset_accounts_inactive' => 'Računi sredstev (neaktivno)', + 'expense_account' => 'Račun stroškov', + 'expense_accounts' => 'Računi stroškov', + 'expense_accounts_inactive' => 'Računi sredstev (neaktivno)', + 'revenue_account' => 'Račun prihodkov', + 'revenue_accounts' => 'Računi prihodkov', + 'revenue_accounts_inactive' => 'Računi prihodkov (neaktivno)', + 'cash_accounts' => 'Gotovinski računi', + 'Cash account' => 'Gotovinski račun', + 'liabilities_accounts' => 'Obveznosti', + 'liabilities_accounts_inactive' => 'Obveznosti (neaktivno)', + 'reconcile_account' => 'Uskladi račun: ":account"', + 'overview_of_reconcile_modal' => 'Pregled usklajevanja', + 'delete_reconciliation' => 'Izbriši uskladitev', + 'update_reconciliation' => 'Posodobi uskladitev', + 'amount_cannot_be_zero' => 'Znesek ne sme biti nič', + 'end_of_reconcile_period' => 'Konec obdobja usklajevanja :period', + 'start_of_reconcile_period' => 'Začetek obdobja usklajevanja :period', + 'start_balance' => 'Začetno stanje', + 'end_balance' => 'Končno stanje', + 'update_balance_dates_instruction' => 'Zgornje zneske in datume uskladite z bančnim izpiskom in pritisnite »Začni usklajevanje«', + 'select_transactions_instruction' => 'Izberite transakcije, ki so prikazane v bančnem izpisku.', + 'select_range_and_balance' => 'Najprej preverite obseg datuma in stanje. Nato pritisnite »Začni usklajevanje«', + 'date_change_instruction' => 'Če zdaj spremenite časovno obdobje, se celotna zgodovina izgubi.', + 'update_selection' => 'Posodobi izbor', + 'store_reconcile' => 'Shrani uskladitev', + 'reconciliation_transaction' => 'Uskladitvena transakcija', + 'Reconciliation' => 'Usklajevanje', + 'reconciliation' => 'Usklajevanje', + 'reconcile_options' => 'Možnosti usklajevanja', + 'reconcile_range' => 'Obseg usklajevanja', + 'start_reconcile' => 'Začni usklajevanje', + 'cash_account_type' => 'Gotovina', + 'cash' => 'gotovina', + 'cant_find_redirect_account' => 'Firefly III vas je poskušal preusmeriti, a ni mogel. Oprostite za to. Nazaj na kazalo.', + 'account_type' => 'Vrsta računa', + 'save_transactions_by_moving' => 'Shranite to transakcijo tako, da jo premaknete na drug račun:|Shranite te transakcije tako, da jih premaknete na drug račun:', + 'save_transactions_by_moving_js' => 'Brez transakcij|Shranite to transakcijo tako, da jo premaknete na drug račun. |Shranite te transakcije tako, da jih premaknete na drug račun.', + 'stored_new_account' => 'Nov račun ":name" je shranjen!', + 'stored_new_account_js' => 'Nov račun "{name}" je shranjen!', + 'updated_account' => 'Račun ":name" je posodobljen', + 'updated_account_js' => 'Posodobljen račun "{title}".', + 'credit_card_options' => 'Možnosti kreditne kartice', + 'no_transactions_account' => 'Ni transakcij (za to obdobje) za račun sredstev ":name".', + 'no_transactions_period' => 'V tem obdobju ni transakcij.', + 'no_data_for_chart' => 'Za ustvarjanje tega diagrama (še) ni dovolj informacij.', + 'select_at_least_one_account' => 'Prosim izberite vsaj en račun sredstev', + 'select_at_least_one_category' => 'Prosim izberite vsaj eno kategorijo', + 'select_at_least_one_budget' => 'Prosim izberite vsaj en proračun', + 'select_at_least_one_tag' => 'Prosim izberite vsaj eno oznako', + 'select_at_least_one_expense' => 'Prosim izberite vsaj eno kombinacijo računov za stroške/prihodke. Če jih nimate (prazen seznam), to poročilo ni na voljo.', + 'account_default_currency' => 'To bo privzeta valuta tega računa.', + 'reconcile_has_more' => 'V Firefly III glavni knjigi je več denarja, kot vaša banka trdi, da bi morali imeti. Obstaja več možnosti. Izberi, kaj želiš storiti. Nato pritisni "Potrdi usklajevanje".', + 'reconcile_has_less' => 'V Firefly III glavni knjigi je manj denarja, kot vaša banka trdi, da bi morali imeti. Obstaja več možnosti. Izberite, kaj želite storiti. Nato pritisnite "Potrdi usklajevanje".', + 'reconcile_is_equal' => 'Firefly III glavna knjiga in vaši bančni izpiski se ujemajo. Ničesar vam ni treba storiti. Pritisnite »Potrdi usklajevanje«, da potrdite vnos.', + 'create_pos_reconcile_transaction' => 'Počisti izbrane transakcije in ustvarite popravek, ki bo dodal :amount na ta račun sredstev.', + 'create_neg_reconcile_transaction' => 'Počisti izbrane transakcije in ustvari popravek, ki bo odvzel :amount s tega računa sredstev.', + 'reconcile_do_nothing' => 'Počisti izbrane transakcije, vendar jih ne popravi.', + 'reconcile_go_back' => 'Popravke lahko kadar koli uredite ali izbrišete.', + 'must_be_asset_account' => 'Uskladite lahko samo račune sredstev', + 'reconciliation_stored' => 'Usklajevanje je shranjeno', + 'reconciliation_error' => 'Zaradi napake so bile transakcije označene kot usklajene, vendar popravek ni bil shranjen: :error.', + 'reconciliation_transaction_title' => 'Uskladitev (:from do :to)', + 'sum_of_reconciliation' => 'Vsota uskladitev', + 'reconcile_this_account' => 'Uskladi ta račun', + 'reconcile' => 'Uskladi', + 'show' => 'Prikaži', + 'confirm_reconciliation' => 'Potrdite uskladitev', + 'submitted_start_balance' => 'Predloženo začetno stanje', + 'selected_transactions' => 'Izbrane transakcije (:count)', + 'already_cleared_transactions' => 'Že obračunane transakcije (:count)', + 'submitted_end_balance' => 'Predloženo končno stanje', + 'initial_balance_description' => 'Začetno stanje za ":account"', + 'liability_credit_description' => 'Dobropis obveznosti za ":account"', + 'interest_calc_' => 'neznano', + 'interest_calc_daily' => 'Na dan', + 'interest_calc_monthly' => 'Na mesec', + 'interest_calc_yearly' => 'Na leto', + 'interest_calc_weekly' => 'Tedensko', + 'interest_calc_half-year' => 'Na pol leta', + 'interest_calc_quarterly' => 'Na četrtletje', + 'initial_balance_account' => 'Začetno stanje na računu :account', + 'list_options' => 'Seznam možnosti', // categories: - 'new_category' => 'Nova kategorija', - 'create_new_category' => 'Ustvari novo kategorijo', - 'without_category' => 'Brez kategorije', - 'update_category' => 'Posodobi kategorije', - 'updated_category' => 'Kategorija ":name" posodobljena', - 'categories' => 'Kategorije', - 'edit_category' => 'Uredi kategorijo ":name"', - 'no_category' => '(brez kategorije)', - 'unknown_category_plain' => 'Brez kategorije', - 'category' => 'Kategorija', - 'delete_category' => 'Izbriši kategorijo ":name"', - 'deleted_category' => 'Kategorija ":name" izbrisana', - 'store_category' => 'Shrani novo kategorijo', - 'stored_category' => 'Nova kategorija ":name" shranjen', - 'without_category_between' => 'Brez kategorije med :start in :end', + 'new_category' => 'Nova kategorija', + 'create_new_category' => 'Ustvari novo kategorijo', + 'without_category' => 'Brez kategorije', + 'update_category' => 'Posodobi kategorije', + 'updated_category' => 'Kategorija ":name" je posodobljena', + 'categories' => 'Kategorije', + 'edit_category' => 'Uredi kategorijo ":name"', + 'no_category' => '(brez kategorije)', + 'unknown_category_plain' => 'Brez kategorije', + 'category' => 'Kategorija', + 'delete_category' => 'Izbriši kategorijo ":name"', + 'deleted_category' => 'Kategorija ":name" je izbrisana', + 'store_category' => 'Shrani novo kategorijo', + 'stored_category' => 'Nova kategorija ":name" je shranjena', + 'without_category_between' => 'Brez kategorije med :start in :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Posodobi odliv', - 'update_deposit' => 'Posodobi polog', - 'update_transaction' => 'Posodobi transakcije', - 'update_transfer' => 'Posodobi prenos', - 'updated_withdrawal' => 'Odliv ":description" posodobljen', - 'updated_deposit' => 'Polog ":description" posodobljen', - 'updated_transfer' => 'Prenos ":description" posodobljen', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => 'Odliv ":description" izbrisan', - 'delete_deposit' => 'Izbriši polog ":description"', - 'delete_transfer' => 'Izbriši prenos ":description"', - 'deleted_withdrawal' => 'Odliv ":description" uspešno izbrisan', - 'deleted_deposit' => 'Polog ":description" uspešno izbrisan', - 'deleted_transfer' => 'Prenos ":description" uspešno izbrisan', - 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', - 'stored_journal' => 'Nova transakcija ":description" uspešno ustvarjena', - 'stored_journal_no_descr' => 'Tvoja nova transakcija uspešno ustvarjena', - 'updated_journal_no_descr' => 'Successfully updated your transaction', - 'select_transactions' => 'Izberi transakcije', - 'rule_group_select_transactions' => 'Uporabi ":title" za transakcije', - 'rule_select_transactions' => 'Uporabi ":title" za transakcije', - 'stop_selection' => 'Končaj z izbiro transakcij', - 'reconcile_selected' => 'Uskladi', - 'mass_delete_journals' => 'Izbriši število transakcij', - 'mass_edit_journals' => 'Uredi več transakcij', - 'mass_bulk_journals' => 'Množično urejanje transakcij', - 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', - 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', - 'bulk_set_new_values' => 'S spodnjimi vnosi nastaviš nove vrednosti. Če jih pustiš prazne, bodo za vse prazne. Upoštevaj tudi, da bo proračun dodeljen samo odlivom.', - 'no_bulk_category' => 'Ne posodobi kategorije', - 'no_bulk_budget' => 'Ne posodobi proračuna', - 'no_bulk_tags' => 'Ne posodobi oznak(e)', - 'replace_with_these_tags' => 'Replace with these tags', - 'append_these_tags' => 'Dodajte te oznake', - 'mass_edit' => 'Edit selected individually', - 'bulk_edit' => 'Edit selected in bulk', - 'mass_delete' => 'Izbriši izbrano', - 'cannot_edit_other_fields' => 'Drugih polj ne morete množično urejati, ker ni prostora za prikaz. Če želite urediti ta polja, sledite povezavi in jih uredite posebej.', - 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', - 'no_budget' => '(brez proračuna)', - 'no_bill' => '(ni računa)', - 'account_per_budget' => 'Porabljeno po proračunu', - 'account_per_category' => 'Account per category', - 'create_new_object' => 'Ustvari', - 'empty' => '(prazno)', - 'all_other_budgets' => '(all other budgets)', - 'all_other_accounts' => '(all other accounts)', - 'expense_per_source_account' => 'Stroški po računih', - 'expense_per_destination_account' => 'Expenses per destination account', - 'income_per_destination_account' => 'Income per destination account', - 'spent_in_specific_category' => 'Spent in category ":category"', - 'earned_in_specific_category' => 'Earned in category ":category"', - 'spent_in_specific_tag' => 'Spent in tag ":tag"', - 'earned_in_specific_tag' => 'Earned in tag ":tag"', - 'income_per_source_account' => 'Income per source account', - 'average_spending_per_destination' => 'Average expense per destination account', - 'average_spending_per_source' => 'Average expense per source account', - 'average_earning_per_source' => 'Average earning per source account', - 'average_earning_per_destination' => 'Average earning per destination account', - 'account_per_tag' => 'Account per tag', - 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', - 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', - 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', - 'tag' => 'Oznaka', - 'no_budget_squared' => '(brez proračuna)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(brez tipa računa)', - 'opt_group_no_account_type' => '(brez tipa računa)', - 'opt_group_defaultAsset' => 'Privzeti računi sredstev', - 'opt_group_savingAsset' => 'Varčevalni račun', - 'opt_group_sharedAsset' => 'Skupni računi sredstev', - 'opt_group_ccAsset' => 'Kreditne kartice', - 'opt_group_cashWalletAsset' => 'Gotovina', - 'opt_group_expense_account' => 'Računi odhodkov', - 'opt_group_revenue_account' => 'Računi prihodkov', - 'opt_group_l_Loan' => 'Obveznost: Posojilo', - 'opt_group_cash_account' => 'Gotovinski račun', - 'opt_group_l_Debt' => 'Obveznost: Dolg', - 'opt_group_l_Mortgage' => 'Obveznost: Hipoteka', - 'opt_group_l_Credit card' => 'Obveznost: Kreditna kartica', - 'notes' => 'Opombe', - 'unknown_journal_error' => 'Transakcije ni bilo mogoče shraniti. Preverite datoteke dnevnika.', - 'attachment_not_found' => 'Te priloge ni bilo mogoče najti.', - 'journal_link_bill' => 'Ta transakcija je povezana s trajnikom :name. Če želiš povezavo prekiniti, odstrani kljukico. Uporabi pravila, da jo povežeš z drugim trajnikom.', - 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', - 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Počakajte, da se obrazec naloži', + 'wait_loading_data' => 'Počakajte, da se vaši podatki naložijo...', + 'wait_attachments' => 'Počakajte, da se priloge naložijo.', + 'errors_upload' => 'Nalaganje ni uspelo. Preverite, ali je v konzoli brskalnika prišlo do napake.', + 'amount_foreign_if' => 'Znesek v tuji valuti, če obstaja', + 'amount_destination_account' => 'Znesek v valuti ciljnega računa', + 'edit_transaction_title' => 'Uredi transakcijo ":description"', + 'unreconcile' => 'Razveljavi uskladitev', + 'update_withdrawal' => 'Posodobi odliv', + 'update_deposit' => 'Posodobi priliv', + 'update_transaction' => 'Posodobi transakcije', + 'update_transfer' => 'Posodobi prenos', + 'updated_withdrawal' => 'Odliv ":description" je posodobljen', + 'updated_deposit' => 'Priliv ":description" je posodobljen', + 'updated_transfer' => 'Prenos ":description" je posodobljen', + 'no_changes_withdrawal' => 'Odliv ":description" ni bil spremenjen.', + 'no_changes_deposit' => 'Priliv ":description" ni bil spremenjen.', + 'no_changes_transfer' => 'Prenos ":description" ni bil spremenjen.', + 'delete_withdrawal' => 'Odliv ":description" je izbrisan', + 'delete_deposit' => 'Izbriši priliv ":description"', + 'delete_transfer' => 'Izbriši prenos ":description"', + 'deleted_withdrawal' => 'Odliv ":description" je uspešno izbrisan', + 'deleted_deposit' => 'Priliv ":description" je uspešno izbrisan', + 'deleted_transfer' => 'Prenos ":description" je uspešno izbrisan', + 'deleted_reconciliation' => 'Transakcija usklajevanja ":description" je bila uspešno izbrisana', + 'stored_journal' => 'Nova transakcija ":description" je uspešno ustvarjena', + 'stored_journal_js' => 'Nova transakcija "%{description}" je uspešno ustvarjena', + 'stored_journal_no_descr' => 'Vaša nova transakcija je uspešno ustvarjena', + 'updated_journal_no_descr' => 'Vaša transakcija je bila uspešno posodobljena', + 'select_transactions' => 'Izberi transakcije', + 'rule_group_select_transactions' => 'Uporabi ":title" za transakcije', + 'rule_select_transactions' => 'Uporabi ":title" za transakcije', + 'stop_selection' => 'Končaj z izbiro transakcij', + 'reconcile_selected' => 'Uskladi', + 'mass_delete_journals' => 'Izbriši število transakcij', + 'mass_edit_journals' => 'Uredi več transakcij', + 'mass_bulk_journals' => 'Množično urejanje transakcij', + 'mass_bulk_journals_explain' => 'Ta obrazec vam omogoča spreminjanje lastnosti spodaj navedenih transakcij v eni obsežni posodobitvi. Vse transakcije v tabeli bodo posodobljene, ko spremenite parametre, ki jih vidite tukaj.', + 'part_of_split' => 'Ta transakcija je del razdeljene transakcije. Če niste izbrali vseh razdelitev, boste morda na koncu spremenili le polovico transakcije.', + 'bulk_set_new_values' => 'S spodnjimi vnosi nastaviš nove vrednosti. Če jih pustiš prazne, bodo za vse prazne. Upoštevajte tudi, da bo proračun dodeljen samo odlivom.', + 'no_bulk_category' => 'Ne posodobi kategorije', + 'no_bulk_budget' => 'Ne posodobi proračuna', + 'no_bulk_tags' => 'Ne posodobi oznak(e)', + 'replace_with_these_tags' => 'Zamenjaj s temi oznakami', + 'append_these_tags' => 'Dodaj te oznake', + 'mass_edit' => 'Uredi izbrano posamično', + 'bulk_edit' => 'Uredi izbrano v večjem obsegu', + 'mass_delete' => 'Izbriši izbrano', + 'cannot_edit_other_fields' => 'Drugih polj ne morete množično urejati, ker ni prostora za prikaz. Če želite urediti ta polja, sledite povezavi in jih uredite posebej.', + 'cannot_change_amount_reconciled' => 'Zneska usklajenih transakcij ne morete spremeniti.', + 'no_budget' => '(brez proračuna)', + 'no_bill' => '(ni računa)', + 'account_per_budget' => 'Porabljeno po proračunu', + 'account_per_category' => 'Račun po kategoriji', + 'create_new_object' => 'Ustvari', + 'empty' => '(prazno)', + 'all_other_budgets' => '(vsi ostali proračuni)', + 'all_other_accounts' => '(vsi ostali računi)', + 'expense_per_source_account' => 'Stroški po računih', + 'expense_per_destination_account' => 'Stroški na ciljnem računu', + 'income_per_destination_account' => 'Dohodek na ciljni račun', + 'spent_in_specific_category' => 'Porabljeno v kategoriji ":category"', + 'earned_in_specific_category' => 'Prisluženo v kategoriji ":category"', + 'spent_in_specific_tag' => 'Porabljeno v oznaki ":tag"', + 'earned_in_specific_tag' => 'Zasluženo v oznaki ":tag"', + 'income_per_source_account' => 'Dohodek na izvorni račun', + 'average_spending_per_destination' => 'Povprečni stroški na ciljni račun', + 'average_spending_per_source' => 'Povprečni stroški na izvorni račun', + 'average_earning_per_source' => 'Povprečni zaslužek na izvorni račun', + 'average_earning_per_destination' => 'Povprečni zaslužek na ciljni račun', + 'account_per_tag' => 'Račun po oznaki', + 'tag_report_expenses_listed_once' => 'Stroški in prihodki niso nikoli navedeni dvakrat. Če ima transakcija več oznak, se lahko prikaže le pod eno od njenih oznak. Morda se zdi, da na tem seznamu manjkajo podatki, vendar bodo zneski pravilni.', + 'double_report_expenses_charted_once' => 'Odhodki in prihodki niso nikoli prikazani dvakrat. Če ima transakcija več oznak, se lahko prikaže le pod eno od njenih oznak. Morda se zdi, da v tem grafikonu manjkajo podatki, vendar bodo zneski pravilni.', + 'tag_report_chart_single_tag' => 'Ta grafikon velja za posamezno oznako. Če ima transakcija več oznak, se lahko to, kar vidite tukaj, odraža tudi v grafikonih drugih oznak.', + 'tag' => 'Oznaka', + 'no_budget_squared' => '(brez proračuna)', + 'perm-delete-many' => 'Brisanje več elementov naenkrat je lahko zelo moteče. Bodite previdni. S te strani lahko izbrišete del razdeljene transakcije, zato bodite previdni.', + 'mass_deleted_transactions_success' => 'Izbrisano :count transakcij.|Izbrisano :count transakcij.', + 'mass_edited_transactions_success' => 'Posodobljeno :count transakcij.|Posodobljeno :count transakcij.', + 'opt_group_' => '(brez tipa računa)', + 'opt_group_no_account_type' => '(brez tipa računa)', + 'opt_group_defaultAsset' => 'Privzeti računi sredstev', + 'opt_group_savingAsset' => 'Varčevalni račun', + 'opt_group_sharedAsset' => 'Skupni računi sredstev', + 'opt_group_ccAsset' => 'Kreditne kartice', + 'opt_group_cashWalletAsset' => 'Gotovina', + 'opt_group_expense_account' => 'Računi odhodkov', + 'opt_group_revenue_account' => 'Računi prihodkov', + 'opt_group_l_Loan' => 'Obveznost: Posojilo', + 'opt_group_cash_account' => 'Gotovinski račun', + 'opt_group_l_Debt' => 'Obveznost: Dolg', + 'opt_group_l_Mortgage' => 'Obveznost: Hipoteka', + 'opt_group_l_Credit card' => 'Obveznost: Kreditna kartica', + 'notes' => 'Opombe', + 'unknown_journal_error' => 'Transakcije ni bilo mogoče shraniti. Preverite datoteke dnevnika.', + 'attachment_not_found' => 'Te priloge ni bilo mogoče najti.', + 'journal_link_bill' => 'Ta transakcija je povezana z računom :name. Če želiš povezavo prekiniti, odstranite kljukico. Uporabite pravila, da jo povežete z drugim računom.', + 'transaction_stored_link' => 'Transakcija št. #{ID} ("{title}") je bila shranjena.', + 'transaction_new_stored_link' => 'Transakcija št. #{ID} je bila shranjena.', + 'transaction_updated_link' => 'Transakcija št. #{ID} ("{title}") je bila posodobljena.', + 'transaction_updated_no_changes' => 'Transakcija št. #{ID} ("{title}") ni prejela nobenih sprememb.', + 'first_split_decides' => 'Prva razdelitev določa vrednost tega polja', + 'first_split_overrules_source' => 'Prva razdelitev lahko razveljavi izvorni račun', + 'first_split_overrules_destination' => 'Prva razdelitev lahko razveljavi ciljni račun', + 'spent_x_of_y' => 'Porabljen {amount} od {total}', // new user: - 'welcome' => 'Dobrodošli v Firefly III!', - 'submit' => 'Potrdi', - 'submission' => 'Oddaja', - 'submit_yes_really' => 'Potrdi (vem kaj počnem)', - 'getting_started' => 'Kako začeti', - 'to_get_started' => 'Lepo je videti, da si uspešno namestil Firefly III. Če želiš začeti z uporabo tega orodja, vnesi ime banke in stanje glavnega tekočega računa. Ne skrbi, če imaš več računov. Lahko jih dodaš pozneje. Firefly III pač potrebuje nekaj za začetek.', - 'savings_balance_text' => 'Firefly III ti bo samodejno ustvaril varčevalni račun. Privzeto na varčevalnem računu ne bo nobenega denarja, če pa Firefly III zaupaš stanje, bo le-to nastavljeno.', - 'finish_up_new_user' => 'To je to! Nadaljuješ s pritiskom na Pošlji. Preusmerjen boš na kazalo Firefly III.', - 'stored_new_accounts_new_user' => 'Juhu! Vaši novi računi so shranjeni.', - 'set_preferred_language' => 'Če želite uporabiti Firefly III v drugem jeziku, prosimo, označite tukaj.', - 'language' => 'Jezik', - 'new_savings_account' => ':bank_name varčevalni račun', - 'cash_wallet' => 'Gotovina', - 'currency_not_present' => 'Če valuta, ki jo običajno uporabljate, ni navedena, ne skrbite. Ustvarite lahko lastne valute pod Možnosti> Valute.', + 'welcome' => 'Dobrodošli v Firefly III!', + 'submit' => 'Potrdite', + 'submission' => 'Predložitev', + 'submit_yes_really' => 'Predložite (vem kaj počnem)', + 'getting_started' => 'Kako začeti', + 'to_get_started' => 'Lepo je videti, da ste uspešno namestili Firefly III. Če želite začeti z uporabo tega orodja, vnesite ime banke in stanje glavnega tekočega računa. Ne skrbite, če imate več računov. Lahko jih dodate pozneje. Firefly III pač potrebuje nekaj za začetek.', + 'savings_balance_text' => 'Firefly III ti bo samodejno ustvaril varčevalni račun. Privzeto na varčevalnem računu ne bo nobenega denarja, če pa Firefly III zaupate stanje, bo le-to nastavljeno.', + 'finish_up_new_user' => 'To je to! Nadaljujete s pritiskom na Pošlji. Preusmerjeni boste na kazalo Firefly III.', + 'stored_new_accounts_new_user' => 'Juhu! Vaši novi računi so shranjeni.', + 'set_preferred_language' => 'Če želite uporabiti Firefly III v drugem jeziku, prosimo, označite tukaj.', + 'language' => 'Jezik', + 'new_savings_account' => ':bank_name varčevalni račun', + 'cash_wallet' => 'Gotovina', + 'currency_not_present' => 'Če valuta, ki jo običajno uporabljate, ni navedena, ne skrbite. Ustvarite lahko lastne valute pod Možnosti> Valute.', // home page: - 'transaction_table_description' => 'A table containing your transactions', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => 'Tvoji računi', - 'your_accounts' => 'Pregled računov', - 'category_overview' => 'Pregled kategorij', - 'expense_overview' => 'Pregled računov stroškov', - 'revenue_overview' => 'Pregled računov prihodkov', - 'budgetsAndSpending' => 'Proračuni in poraba', - 'budgets_and_spending' => 'Proračuni in poraba', - 'go_to_budget' => 'Pojdi na proračun "{budget}"', - 'go_to_deposits' => 'Pojdi na depozite', - 'go_to_expenses' => 'Pojdi na izdatke', - 'savings' => 'Prihranki', - 'newWithdrawal' => 'Nov strošek', - 'newDeposit' => 'Nov polog', - 'newTransfer' => 'Nov prenos', - 'bills_to_pay' => 'Trajnik za plačilo', - 'per_day' => 'Na dan', - 'left_to_spend_per_day' => 'Preostala poraba na dan', - 'bills_paid' => 'Plačani trajniki', - 'custom_period' => 'Obdobje po meri', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Izberite obdobje', + 'transaction_table_description' => 'Tabela z vašimi transakcijami', + 'opposing_account' => 'Nasprotni račun', + 'yourAccounts' => 'Vaši računi', + 'your_accounts' => 'Pregled računov', + 'category_overview' => 'Pregled kategorij', + 'expense_overview' => 'Pregled računov stroškov', + 'revenue_overview' => 'Pregled računov prihodkov', + 'budgetsAndSpending' => 'Proračuni in poraba', + 'budgets_and_spending' => 'Proračuni in poraba', + 'go_to_budget' => 'Pojdi na proračun "{budget}"', + 'go_to_deposits' => 'Pojdi na prilive', + 'go_to_expenses' => 'Pojdi na izdatke', + 'savings' => 'Prihranki', + 'newWithdrawal' => 'Nov strošek', + 'newDeposit' => 'Nov priliv', + 'newTransfer' => 'Nov prenos', + 'bills_to_pay' => 'Računi za plačilo', + 'per_day' => 'Na dan', + 'left_to_spend_per_day' => 'Ostane za porabit na dan', + 'bills_paid' => 'Plačani računi', + 'custom_period' => 'Obdobje po meri', + 'reset_to_current' => 'Ponastavi na trenutno obdobje', + 'select_period' => 'Izberite obdobje', // menu and titles, should be recycled as often as possible: - 'currency' => 'Valuta', - 'preferences' => 'Možnosti', - 'logout' => 'Odjava', - 'logout_other_sessions' => 'Odjavi vse druge seje', - 'toggleNavigation' => 'Preklopi navigacijo', - 'searchPlaceholder' => 'Iskanje...', - 'version' => 'Različica', - 'dashboard' => 'Nadzorna plošča', - 'income_and_expense' => 'Prihodki in odhodki', - 'all_money' => 'Ves vaš denar', - 'unknown_source_plain' => 'Neznan izvorni račun', - 'unknown_dest_plain' => 'Neznan ciljni račun', - 'unknown_any_plain' => 'Neznan račun', - 'unknown_budget_plain' => 'Ni proračuna', - 'available_budget' => 'Razpoložljiv proračun ({currency})', - 'currencies' => 'Valute', - 'activity' => 'Dejavnost', - 'usage' => 'Uporaba', - 'accounts' => 'Računi', - 'Asset account' => 'premoženjski računi', - 'Default account' => 'premoženjski račun', - 'Expense account' => 'Račun stroškov', - 'Revenue account' => 'Račun prihodkov', - 'Initial balance account' => 'Začetno stanje', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Dolg', - 'account_type_Loan' => 'Posojilo', - 'account_type_Mortgage' => 'Hipoteka', - 'account_type_debt' => 'Dolg', - 'account_type_loan' => 'Posojilo', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Kreditna kartica', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Ta dolg je bil dolgovan', - 'liability_direction_debit_short' => 'Dolgujejo ta dolg', - 'liability_direction__short' => 'Neznano', - 'liability_direction_null_short' => 'Neznano', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Proračuni', - 'tags' => 'Oznake', - 'reports' => 'Poročila', - 'transactions' => 'Transakcije', - 'expenses' => 'stroški', - 'income' => 'Dohodki / prihodki', - 'transfers' => 'Prenosi', - 'moneyManagement' => 'Upravljanje denarja', - 'money_management' => 'Upravljanje denarja', - 'tools' => 'Orodja', - 'piggyBanks' => 'Hranilniki', - 'piggy_banks' => 'Hranilniki', - 'amount_x_of_y' => '{current} od {total}', - 'bills' => 'Trajniki', - 'withdrawal' => 'Odliv', - 'opening_balance' => 'Začetno stanje', - 'deposit' => 'Polog', - 'account' => 'Račun', - 'transfer' => 'Prenos', - 'Withdrawal' => 'Odliv', - 'Deposit' => 'Polog', - 'Transfer' => 'Prenos', - 'bill' => 'Trajnik', - 'yes' => 'Da', - 'no' => 'Ne', - 'amount' => 'Znesek', - 'overview' => 'Pregled', - 'saveOnAccount' => 'Shrani na račun', - 'unknown' => 'Neznano', - 'monthly' => 'Mesečno', - 'profile' => 'Profil', - 'errors' => 'Napake', - 'debt_start_date' => 'Začetni datum dolga', - 'debt_start_amount' => 'Začetni znesek dolga', - 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', - 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', - 'store_new_liabilities_account' => 'Shrani novo obveznost', - 'edit_liabilities_account' => 'Uredi obveznost ":name"', - 'financial_control' => 'Nadzor financ', - 'accounting' => 'Računovodstvo', - 'automation' => 'Avtomatizacija', - 'others' => 'Drugo', - 'classification' => 'Klasifikacija', - 'store_transaction' => 'Store transaction', + 'currency' => 'Valuta', + 'preferences' => 'Možnosti', + 'logout' => 'Odjava', + 'logout_other_sessions' => 'Odjavi vse druge seje', + 'toggleNavigation' => 'Preklopi navigacijo', + 'searchPlaceholder' => 'Iskanje...', + 'version' => 'Različica', + 'dashboard' => 'Nadzorna plošča', + 'income_and_expense' => 'Prihodki in odhodki', + 'all_money' => 'Ves vaš denar', + 'unknown_source_plain' => 'Neznan izvorni račun', + 'unknown_dest_plain' => 'Neznan ciljni račun', + 'unknown_any_plain' => 'Neznan račun', + 'unknown_budget_plain' => 'Ni proračuna', + 'available_budget' => 'Razpoložljiv proračun ({currency})', + 'currencies' => 'Valute', + 'activity' => 'Dejavnost', + 'usage' => 'Uporaba', + 'accounts' => 'Računi', + 'Asset account' => 'Račun sredstev', + 'Default account' => 'Račun sredstev', + 'Expense account' => 'Račun stroškov', + 'Revenue account' => 'Račun prihodkov', + 'Initial balance account' => 'Začetno stanje', + 'account_type_Asset account' => 'Račun sredstev', + 'account_type_Expense account' => 'Račun stroškov', + 'account_type_Revenue account' => 'Račun prihodkov', + 'account_type_Debt' => 'Dolg', + 'account_type_Loan' => 'Posojilo', + 'account_type_Mortgage' => 'Hipoteka', + 'account_type_debt' => 'Dolg', + 'account_type_loan' => 'Posojilo', + 'account_type_mortgage' => 'Hipoteka', + 'account_type_Credit card' => 'Kreditna kartica', + 'credit_card_type_monthlyFull' => 'Polno plačilo vsak mesec', + 'liability_direction_credit' => 'Dolžan sem ta dolg', + 'liability_direction_debit' => 'Ta dolg dolgujem nekomu drugemu', + 'liability_direction_credit_short' => 'Ta dolg je bil dolgovan', + 'liability_direction_debit_short' => 'Dolgujem', + 'liability_direction__short' => 'Neznano', + 'liability_direction_null_short' => 'Neznano', + 'Liability credit' => 'Kredit za obveznost', + 'budgets' => 'Proračuni', + 'tags' => 'Oznake', + 'reports' => 'Poročila', + 'transactions' => 'Transakcije', + 'expenses' => 'Stroški', + 'income' => 'Dohodki / prihodki', + 'transfers' => 'Prenosi', + 'moneyManagement' => 'Upravljanje denarja', + 'money_management' => 'Upravljanje denarja', + 'tools' => 'Orodja', + 'piggyBanks' => 'Hranilniki', + 'piggy_banks' => 'Hranilniki', + 'amount_x_of_y' => '{current} od {total}', + 'bills' => 'Računi', + 'withdrawal' => 'Odliv', + 'opening_balance' => 'Začetno stanje', + 'deposit' => 'Priliv', + 'account' => 'Račun', + 'transfer' => 'Prenos', + 'Withdrawal' => 'Odliv', + 'Deposit' => 'Priliv', + 'Transfer' => 'Prenos', + 'bill' => 'Račun', + 'yes' => 'Da', + 'no' => 'Ne', + 'amount' => 'Znesek', + 'overview' => 'Pregled', + 'saveOnAccount' => 'Shrani na račun', + 'unknown' => 'Neznano', + 'monthly' => 'Mesečno', + 'profile' => 'Profil', + 'errors' => 'Napake', + 'debt_start_date' => 'Začetni datum dolga', + 'debt_start_amount' => 'Začetni znesek dolga', + 'debt_start_amount_help' => 'Vedno je najbolje, da to vrednost nastavite na negativno vrednost. Za več informacij preberite strani s pomočjo (zgornja desna (?)-ikona).', + 'interest_period_help' => 'To polje je zgolj kozmetično in ga ne bomo izračunali namesto vas. Kot se je izkazalo, so banke zelo zahrbtne, zato Firefly III nikoli ne zadane pravilno.', + 'store_new_liabilities_account' => 'Shrani novo obveznost', + 'edit_liabilities_account' => 'Uredi obveznost ":name"', + 'financial_control' => 'Nadzor financ', + 'accounting' => 'Računovodstvo', + 'automation' => 'Avtomatizacija', + 'others' => 'Drugo', + 'classification' => 'Klasifikacija', + 'store_transaction' => 'Shrani transakcijo', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Privzeto finančno poročilo med :start in :end', - 'report_audit' => 'Pregled zgodovine transakcij med :start in :end', - 'report_category' => 'Poročilo po kategorijah med :start in :end', - 'report_double' => 'Expense/revenue account report between :start and :end', - 'report_budget' => 'Poročilo proračunov med :start in :end', - 'report_tag' => 'Poročilo oznakah med :start in :end', - 'quick_link_reports' => 'Hitre povezave', - 'quick_link_examples' => 'To so le nekateri primeri povezav za začetek. Oglej si strani za pomoč pod gumbom (?) za informacije o vseh poročilih in "čarobnih besedah", ki jih lahko uporabiš.', - 'quick_link_default_report' => 'Privzeto finančno poročilo', - 'quick_link_audit_report' => 'Pregled zgodovine transakcij', - 'report_this_month_quick' => 'Tekoči mesec, vsi računi', - 'report_last_month_quick' => 'Zadnji mesec, vsi računi', - 'report_this_year_quick' => 'Tekoče leto, vsi računi', - 'report_this_fiscal_year_quick' => 'Tekoče fiskalno leto, vsi računi', - 'report_all_time_quick' => 'Kadarkoli, vsi računi', - 'reports_can_bookmark' => 'Poročila lahko shranite med zaznamke.', - 'incomeVsExpenses' => 'prihodki napram odhodkom', - 'accountBalances' => 'Stanje na računih', - 'balanceStart' => 'Stanje na začetku obdobja', - 'balanceEnd' => 'Stanje na koncu obdobja', - 'splitByAccount' => 'Razdeljeno po računih', - 'coveredWithTags' => 'Z oznakami', - 'leftInBudget' => 'Ostanek v proračunu', - 'left_in_debt' => 'Dolgovani znesek', - 'sumOfSums' => 'Vsota vsot', - 'noCategory' => '(brez kategorije)', - 'notCharged' => 'Ne (še) zaračunano', - 'inactive' => 'Neaktivno', - 'active' => 'Aktiven', - 'difference' => 'Razlika', - 'money_flowing_in' => 'Na', - 'money_flowing_out' => 'Iz', - 'topX' => 'prvih :number', - 'show_full_list' => 'Pokaži celoten seznam', - 'show_only_top' => 'Pokaži samo prvih :number', - 'report_type' => 'Vrsta poročila', - 'report_type_default' => 'Privzeto finančno poročilo', - 'report_type_audit' => 'Pregled zgodovine transakcij (revizija)', - 'report_type_category' => 'Poročilo kategorij', - 'report_type_budget' => 'Poročilo proračunov', - 'report_type_tag' => 'Poročilo oznak', - 'report_type_double' => 'Expense/revenue account report', - 'more_info_help' => 'Več informacij o teh vrstah poročil lahko najdete na straneh s pomočjo. Pritisnite ikono (?) v zgornjem desnem kotu.', - 'report_included_accounts' => 'Vključeni računi', - 'report_date_range' => 'Datumski obseg', - 'report_preset_ranges' => 'Prednadnastavljeni obsegi', - 'shared' => 'Skupni', - 'fiscal_year' => 'Fiskalno leto', - 'income_entry' => 'Prihodki na računi ":name" med :start in :end', - 'expense_entry' => 'Stroški na računu ":name" med :start in :end', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => 'Stroški v proračunu "::budget" med :start in :end', - 'balance_amount' => 'Stroški v proračunu ":budget", plačani iz računa ":account" med :start in :end', - 'no_audit_activity' => 'Na račun ni bila zabeležena nobena dejavnost :account_name med :start in :end.', - 'audit_end_balance' => 'Stanje na računu :account_name na koncu :end je bilo :balance', - 'reports_extra_options' => 'Dodatne možnosti', - 'report_has_no_extra_options' => 'To poročilo nima dodatnih možnosti', - 'reports_submit' => 'Ogled poročila', - 'end_after_start_date' => 'Končni datum poročila mora biti po začetnem datumu.', - 'select_category' => 'Izberi kategorije', - 'select_budget' => 'Izberi proračun(e).', - 'select_tag' => 'Izberi oznake.', - 'income_per_category' => 'Prihodki po kategoriji', - 'expense_per_category' => 'stroški po kategorijah', - 'expense_per_budget' => 'stroški po budžetih', - 'income_per_account' => 'Prihodki pa računu', - 'expense_per_account' => 'Stroški po računih', - 'expense_per_tag' => 'stroški po značkah', - 'income_per_tag' => 'Prihodki po oznaki', - 'include_expense_not_in_budget' => 'Vključeni stroški niso v izbranih proračunih', - 'include_expense_not_in_account' => 'Vključeni stroški niso v izbranih računih', - 'include_expense_not_in_category' => 'Vključeni stroški niso v izbranih kategorijah', - 'include_income_not_in_category' => 'Vključeni prihodki niso v izbranih kategorijah', - 'include_income_not_in_account' => 'Vključeni prihodki niso v izbranih računih', - 'include_income_not_in_tags' => 'Vključeni prihodki nimajo izbranih oznak', - 'include_expense_not_in_tags' => 'Vključeni stroški nimajo izbranih oznak', - 'everything_else' => 'Vse ostalo', - 'income_and_expenses' => 'prihodki in odhodki', - 'spent_average' => 'Porabljeno (povprečje)', - 'income_average' => 'Prihodki (povprečno)', - 'transaction_count' => 'Število transakcije', - 'average_spending_per_account' => 'Povprečna poraba po računu', - 'average_income_per_account' => 'Povprečni prihodek po računu', - 'total' => 'Skupaj', - 'description' => 'Opis', - 'sum_of_period' => 'Seštevek obdobja', - 'average_in_period' => 'Povprečno v obdobju', - 'account_role_defaultAsset' => 'privzeti premoženjski račun', - 'account_role_sharedAsset' => 'deljen premoženjski račun', - 'account_role_savingAsset' => 'varčevalni račun', - 'account_role_ccAsset' => 'kreditna kartica', - 'account_role_cashWalletAsset' => 'Gotovina', - 'budget_chart_click' => 'V zgornji tabeli kliknite na ime proračuna, za ogled diagrama.', - 'category_chart_click' => 'V zgornji tabeli kliknite na ime kategorije, za ogled diagrama.', - 'in_out_accounts' => 'Kombinacija zasluženo/porabljeno', - 'in_out_accounts_per_asset' => 'Zasluženo in porabljeno (po računih sredstev)', - 'in_out_per_category' => 'Zasluženo in porabljeno po kategoriji', - 'out_per_budget' => 'Porabljeno po proračunu', - 'select_expense_revenue' => 'Izberi račun stroškov/prihodkov', - 'multi_currency_report_sum' => 'Ker ta seznam vsebuje račune z več valutami, vsota, ki jo vidite, morda nima smisla. Poročilo se vedno vrne na privzeto valuto.', - 'sum_in_default_currency' => 'Vsota bo vedno v privzeti valuti.', - 'net_filtered_prefs' => 'Ta diagram nikoli ne bo vključeval računov, ki nimajo izbrano »Vključi v neto vrednost«.', + 'report_default' => 'Privzeto finančno poročilo med :start in :end', + 'report_audit' => 'Pregled zgodovine transakcij med :start in :end', + 'report_category' => 'Poročilo po kategorijah med :start in :end', + 'report_double' => 'Poročilo o odhodkih/prihodkih med :start in :end', + 'report_budget' => 'Poročilo proračunov med :start in :end', + 'report_tag' => 'Poročilo oznakah med :start in :end', + 'quick_link_reports' => 'Hitre povezave', + 'quick_link_examples' => 'To so le nekateri primeri povezav za začetek. Oglejte si strani za pomoč pod gumbom (?) za informacije o vseh poročilih in "čarobnih besedah", ki jih lahko uporabite.', + 'quick_link_default_report' => 'Privzeto finančno poročilo', + 'quick_link_audit_report' => 'Pregled zgodovine transakcij', + 'report_this_month_quick' => 'Tekoči mesec, vsi računi', + 'report_last_month_quick' => 'Zadnji mesec, vsi računi', + 'report_this_year_quick' => 'Tekoče leto, vsi računi', + 'report_this_fiscal_year_quick' => 'Tekoče fiskalno leto, vsi računi', + 'report_all_time_quick' => 'Kadarkoli, vsi računi', + 'reports_can_bookmark' => 'Poročila lahko shranite med zaznamke.', + 'incomeVsExpenses' => 'Prihodki napram odhodkom', + 'accountBalances' => 'Stanje na računih', + 'balanceStart' => 'Stanje na začetku obdobja', + 'balanceEnd' => 'Stanje na koncu obdobja', + 'splitByAccount' => 'Razdeljeno po računih', + 'coveredWithTags' => 'Z oznakami', + 'leftInBudget' => 'Ostanek v proračunu', + 'left_in_debt' => 'Dolgovani znesek', + 'sumOfSums' => 'Vsota vsot', + 'noCategory' => '(brez kategorije)', + 'notCharged' => 'Ne (še) zaračunano', + 'inactive' => 'Neaktivno', + 'active' => 'Aktiven', + 'difference' => 'Razlika', + 'money_flowing_in' => 'Na', + 'money_flowing_out' => 'Iz', + 'topX' => 'prvih :number', + 'show_full_list' => 'Pokažite celoten seznam', + 'show_only_top' => 'Pokažite samo prvih :number', + 'report_type' => 'Vrsta poročila', + 'report_type_default' => 'Privzeto finančno poročilo', + 'report_type_audit' => 'Pregled zgodovine transakcij (revizija)', + 'report_type_category' => 'Poročilo kategorij', + 'report_type_budget' => 'Poročilo proračunov', + 'report_type_tag' => 'Poročilo oznak', + 'report_type_double' => 'Poročilo o odhodkih/prihodkih', + 'more_info_help' => 'Več informacij o teh vrstah poročil lahko najdete na straneh s pomočjo. Pritisnite ikono (?) v zgornjem desnem kotu.', + 'report_included_accounts' => 'Vključeni računi', + 'report_date_range' => 'Datumski obseg', + 'report_preset_ranges' => 'Prednastavljeni obsegi', + 'shared' => 'Skupni', + 'fiscal_year' => 'Fiskalno leto', + 'income_entry' => 'Prihodki na računi ":name" med :start in :end', + 'expense_entry' => 'Stroški na računu ":name" med :start in :end', + 'category_entry' => 'Odhodki in prihodki v kategoriji ":name" med :start in :end', + 'budget_spent_amount' => 'Stroški v proračunu "::budget" med :start in :end', + 'balance_amount' => 'Stroški v proračunu ":budget", plačani iz računa ":account" med :start in :end', + 'no_audit_activity' => 'Na račun ni bila zabeležena nobena dejavnost :account_name med :start in :end.', + 'audit_end_balance' => 'Stanje na računu :account_name na koncu :end je bilo :balance', + 'reports_extra_options' => 'Dodatne možnosti', + 'report_has_no_extra_options' => 'To poročilo nima dodatnih možnosti', + 'reports_submit' => 'Ogled poročila', + 'end_after_start_date' => 'Končni datum poročila mora biti po začetnem datumu.', + 'select_category' => 'Izberi kategorije', + 'select_budget' => 'Izberi proračun(e).', + 'select_tag' => 'Izberi oznake.', + 'income_per_category' => 'Prihodki po kategoriji', + 'expense_per_category' => 'Stroški po kategorijah', + 'expense_per_budget' => 'Stroški po proračunu', + 'income_per_account' => 'Prihodki pa računu', + 'expense_per_account' => 'Stroški po računih', + 'expense_per_tag' => 'Stroški po oznakah', + 'income_per_tag' => 'Prihodki po oznaki', + 'include_expense_not_in_budget' => 'Vključeni stroški niso v izbranih proračunih', + 'include_expense_not_in_account' => 'Vključeni stroški niso v izbranih računih', + 'include_expense_not_in_category' => 'Vključeni stroški niso v izbranih kategorijah', + 'include_income_not_in_category' => 'Vključeni prihodki niso v izbranih kategorijah', + 'include_income_not_in_account' => 'Vključeni prihodki niso v izbranih računih', + 'include_income_not_in_tags' => 'Vključeni prihodki nimajo izbranih oznak', + 'include_expense_not_in_tags' => 'Vključeni stroški nimajo izbranih oznak', + 'everything_else' => 'Vse ostalo', + 'income_and_expenses' => 'Prihodki in odhodki', + 'spent_average' => 'Porabljeno (povprečje)', + 'income_average' => 'Prihodki (povprečno)', + 'transaction_count' => 'Število transakcije', + 'average_spending_per_account' => 'Povprečna poraba po računu', + 'average_income_per_account' => 'Povprečni prihodek po računu', + 'total' => 'Skupaj', + 'description' => 'Opis', + 'sum_of_period' => 'Seštevek obdobja', + 'average_in_period' => 'Povprečno v obdobju', + 'account_role_defaultAsset' => 'Privzeti račun sredstev', + 'account_role_sharedAsset' => 'Skupni račun sredstev', + 'account_role_savingAsset' => 'Varčevalni račun', + 'account_role_ccAsset' => 'Kreditna kartica', + 'account_role_cashWalletAsset' => 'Gotovina', + 'budget_chart_click' => 'V zgornji tabeli kliknite na ime proračuna, za ogled grafikona.', + 'category_chart_click' => 'Za ogled grafikona v zgornji tabeli kliknite na ime kategorije.', + 'in_out_accounts' => 'Kombinacija zasluženo/porabljeno', + 'in_out_accounts_per_asset' => 'Zasluženo in porabljeno (po računih sredstev)', + 'in_out_per_category' => 'Zasluženo in porabljeno po kategoriji', + 'out_per_budget' => 'Porabljeno po proračunu', + 'select_expense_revenue' => 'Izberite račun stroškov/prihodkov', + 'multi_currency_report_sum' => 'Ker ta seznam vsebuje račune z več valutami, vsota, ki jo vidite, morda nima smisla. Poročilo se vedno vrne na privzeto valuto.', + 'sum_in_default_currency' => 'Vsota bo vedno v privzeti valuti.', + 'net_filtered_prefs' => 'Ta grafikon nikoli ne bo vključeval računov, ki nimajo izbrano »Vključi v neto vrednost«.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Diagram', - 'month' => 'Mesec', - 'budget' => 'Proračun', - 'spent' => 'Porabljeno', - 'spent_capped' => 'Porabljeno (omejeno)', - 'spent_in_budget' => 'Porabljeno v proračunu', - 'left_to_spend' => 'Preostala poraba', - 'earned' => 'Prisluženo', - 'overspent' => 'Preveč porabljeno', - 'left' => 'Preostalo', - 'max-amount' => 'Najvišji znesek', - 'min-amount' => 'Najmanjša vrednost', - 'journal-amount' => 'Trenutni vnos na računu', - 'name' => 'Ime', - 'date' => 'Datum', - 'date_and_time' => 'Datum in čas', - 'time' => 'Čas', - 'paid' => 'Plačano', - 'unpaid' => 'Neplačano', - 'day' => 'Dan', - 'budgeted' => 'Proračun', - 'period' => 'Obdobje', - 'balance' => 'Stanje', - 'in_out_period' => 'In + out this period', - 'sum' => 'Vsota', - 'summary' => 'Povzetek', - 'average' => 'Povprečno', - 'balanceFor' => 'Stanje za :name', - 'no_tags' => '(ni oznak)', + 'chart' => 'Grafikon', + 'month' => 'Mesec', + 'budget' => 'Proračun', + 'spent' => 'Porabljeno', + 'spent_capped' => 'Porabljeno (omejeno)', + 'spent_in_budget' => 'Porabljeno v proračunu', + 'left_to_spend' => 'Ostane za porabit', + 'earned' => 'Prisluženo', + 'overspent' => 'Preveč porabljeno', + 'left' => 'Preostalo', + 'max-amount' => 'Najvišji znesek', + 'min-amount' => 'Najmanjša vrednost', + 'journal-amount' => 'Trenutni vnos na računu', + 'name' => 'Ime', + 'date' => 'Datum', + 'date_and_time' => 'Datum in čas', + 'time' => 'Čas', + 'paid' => 'Plačano', + 'unpaid' => 'Neplačano', + 'day' => 'Dan', + 'budgeted' => 'Proračunski znesek', + 'period' => 'Obdobje', + 'balance' => 'Stanje', + 'in_out_period' => 'V + iz tega obdobja', + 'sum' => 'Vsota', + 'summary' => 'Povzetek', + 'average' => 'Povprečno', + 'balanceFor' => 'Stanje za :name', + 'no_tags' => '(ni oznak)', + 'nothing_found' => '(nič najdenega)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Dodaj denar na hranilnik ":name"', - 'piggy_bank' => 'Dodaj hranilnik', - 'new_piggy_bank' => 'Nov hranilnik', - 'store_piggy_bank' => 'Shrani nov hranilnik', - 'stored_piggy_bank' => 'Shrani nov hranilnik ":name"', - 'account_status' => 'Stanje računa', - 'left_for_piggy_banks' => 'Preostalo za hranilnike', - 'sum_of_piggy_banks' => 'Vsota hranilnikov', - 'saved_so_far' => 'Privarčevano do sedaj', - 'left_to_save' => 'Preostanek za varčevanje', - 'suggested_amount' => 'Predlagani mesečni znesek varčevanja', - 'add_money_to_piggy_title' => 'Dodaj denar na hranilnik ":name"', - 'remove_money_from_piggy_title' => 'Odstrani denar s hranilnika ":name"', - 'add' => 'Dodaj', - 'no_money_for_piggy' => 'Nimaš denarja da bi ga dal v ta hranilnik.', - 'suggested_savings_per_month' => 'Predlagano na mesec', + 'event_history' => 'Zgodovina dogodkov', + 'add_money_to_piggy' => 'Dodaj denar na hranilnik ":name"', + 'piggy_bank' => 'Dodaj hranilnik', + 'new_piggy_bank' => 'Nov hranilnik', + 'store_piggy_bank' => 'Shrani nov hranilnik', + 'stored_piggy_bank' => 'Shrani nov hranilnik ":name"', + 'account_status' => 'Stanje računa', + 'left_for_piggy_banks' => 'Preostalo za hranilnike', + 'sum_of_piggy_banks' => 'Vsota hranilnikov', + 'saved_so_far' => 'Privarčevano do sedaj', + 'left_to_save' => 'Preostalo za varčevanje', + 'suggested_amount' => 'Predlagani mesečni znesek varčevanja', + 'add_money_to_piggy_title' => 'Dodaj denar na hranilnik ":name"', + 'remove_money_from_piggy_title' => 'Odstrani denar s hranilnika ":name"', + 'add' => 'Dodaj', + 'no_money_for_piggy' => 'Nimate denarja, da bi ga dali v ta hranilnik.', + 'suggested_savings_per_month' => 'Predlagano na mesec', - 'remove' => 'Odstrani', - 'max_amount_add' => 'Najvišji znesek, ki ga lahko dodaš, je', - 'max_amount_remove' => 'Najvišji znesek, ki ga lahko odstraniš, je', - 'update_piggy_button' => 'Posodobi hranilnik', - 'update_piggy_title' => 'Posodobi hranilnik ":name"', - 'updated_piggy_bank' => 'Hranilnik ":name" posodobljen', - 'details' => 'Podrobnosti', - 'events' => 'Dogodki', - 'target_amount' => 'Ciljni znesek', - 'start_date' => 'Začetni datum', - 'no_start_date' => 'Brez začetnega datuma', - 'target_date' => 'Ciljni datum', - 'no_target_date' => 'Brez ciljnega datuma', - 'table' => 'Tabela', - 'delete_piggy_bank' => 'Izbriši hranilnik ":name"', - 'cannot_add_amount_piggy' => 'Zneska :amount ni bilo mogoče dodati na ":name".', - 'cannot_remove_from_piggy' => 'Zneska :amount ni bilo mogoče odstraniti iz ":name".', - 'deleted_piggy_bank' => 'Hranilnik ":name" izbrisan', - 'added_amount_to_piggy' => 'Znesek :amount dodan na ":name"', - 'removed_amount_from_piggy' => 'Znesek :amount odstranjen iz ":name"', - 'piggy_events' => 'Sorodni hranilniki', + 'remove' => 'Odstrani', + 'max_amount_add' => 'Najvišji znesek, ki ga lahko dodate, je', + 'max_amount_remove' => 'Najvišji znesek, ki ga lahko odstranite, je', + 'update_piggy_button' => 'Posodobi hranilnik', + 'update_piggy_title' => 'Posodobi hranilnik ":name"', + 'updated_piggy_bank' => 'Hranilnik ":name" je posodobljen', + 'details' => 'Podrobnosti', + 'events' => 'Dogodki', + 'target_amount' => 'Ciljni znesek', + 'start_date' => 'Začetni datum', + 'no_start_date' => 'Brez začetnega datuma', + 'target_date' => 'Ciljni datum', + 'no_target_date' => 'Brez ciljnega datuma', + 'table' => 'Tabela', + 'delete_piggy_bank' => 'Izbriši hranilnik ":name"', + 'cannot_add_amount_piggy' => 'Zneska :amount ni bilo mogoče dodati na ":name".', + 'cannot_remove_from_piggy' => 'Zneska :amount ni bilo mogoče odstraniti iz ":name".', + 'deleted_piggy_bank' => 'Hranilnik ":name" je izbrisan', + 'added_amount_to_piggy' => 'Znesek :amount dodan na ":name"', + 'removed_amount_from_piggy' => 'Znesek :amount odstranjen iz ":name"', + 'piggy_events' => 'Sorodni hranilniki', // tags - 'delete_tag' => 'Izbriši oznako ":tag"', - 'deleted_tag' => 'Oznaka ":tag" izbrisana', - 'new_tag' => 'Ustvari novo oznako', - 'edit_tag' => 'Uredi oznako ":tag"', - 'updated_tag' => 'Posodobi oznako ":tag"', - 'created_tag' => 'Oznaka ":tag" je bila ustvarjena!', + 'delete_tag' => 'Izbriši oznako ":tag"', + 'deleted_tag' => 'Oznaka ":tag" je izbrisana', + 'new_tag' => 'Ustvari novo oznako', + 'edit_tag' => 'Uredi oznako ":tag"', + 'updated_tag' => 'Posodobi oznako ":tag"', + 'created_tag' => 'Oznaka ":tag" je bila ustvarjena!', - 'transaction_journal_information' => 'Informacije o transakciji', - 'transaction_journal_amount' => 'Informacije o znesku', - 'transaction_journal_meta' => 'Meta informacije', - 'transaction_journal_more' => 'Več informacij', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Shranjeno v ":journal"', - 'total_amount' => 'Skupni znesek', - 'number_of_decimals' => 'Število decimalk', + 'transaction_journal_information' => 'Informacije o transakciji', + 'transaction_journal_amount' => 'Informacije o znesku', + 'transaction_journal_meta' => 'Meta informacije', + 'transaction_journal_more' => 'Več informacij', + 'basic_journal_information' => 'Osnovne informacije o transakciji', + 'transaction_journal_extra' => 'Dodatne informacije', + 'att_part_of_journal' => 'Shranjeno v ":journal"', + 'total_amount' => 'Skupni znesek', + 'number_of_decimals' => 'Število decimalk', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Povabi nove uporabnike', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'E-poštni naslov', - 'invite_user' => 'Povabi uporabnika', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Administracija', - 'system_settings' => 'Sistemske nastavitve', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Upravljanje uporabnikov', - 'list_all_users' => 'Vse uporabnike', - 'all_users' => 'Vsi uporabniki', - 'instance_configuration' => 'Nastavitve', - 'firefly_instance_configuration' => 'Možnosti nastavitev za Firefly III', - 'setting_single_user_mode' => 'Enouporabniški način', - 'setting_single_user_mode_explain' => 'Privzeto Firefly III dovoli samo eno (1) registracijo: tvojo. To je varnostni ukrep, ki preprečuje drugim, da uporabljajo tvojo instanco, razen če jim tega ne dovoliš. Nadaljnje registracije so blokirane. Ko počistite to potrditveno polje, lahko tudi drugi uporabijo tvojo instanco, če do nje lahko dostopajo (ko je objavljena na internetu).', - 'store_configuration' => 'Shrani nastavitve', - 'single_user_administration' => 'Uporabniške nastavitve za :email', - 'edit_user' => 'Uredi uporabnika :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'Uporabniški podatki', - 'user_information' => 'Podatki o uporabniku', - 'total_size' => 'skupna velikost', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_rules pravil v :count_groups skupinskem/ih pravilu/ih', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'Nastavitve so bili posodobljene', - 'setting_is_demo_site' => 'Demo stran', - 'setting_is_demo_site_explain' => 'Če potrdite to polje, se bo ta namestitev obnašala, kot da je to demo spletno mesto in ima lahko čudne stranske učinke.', - 'block_code_bounced' => 'Elektronsko/a sporočilo/a zavrnjeno/a', - 'block_code_expired' => 'Demo račun je potekel', - 'no_block_code' => 'Brez razloga za blokiranje ali pa uporabnik ni blokiran', - 'block_code_email_changed' => 'Uporabnik še ni potrdil novega elektronskega naslova', - 'admin_update_email' => 'V nasprotju s stranjo profila, uporabnik NE bo obveščen o spremembi svojega elektronskega naslova!', - 'update_user' => 'Posodobi uporabnika', - 'updated_user' => 'Uporabniški podatki spremenjeni.', - 'delete_user' => 'Izbriši uporabnika :email', - 'user_deleted' => 'Uporabnik je izbrisan', - 'send_test_email' => 'Pošlji testno elektronsko sporočilo', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Pošlji sporočilo', - 'send_test_triggered' => 'Test je bil sprožen. Preverite mapo »Prejeto« in datoteke dnevnika.', - 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', - 'admin_maintanance_title' => 'Vzdrževanje', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Izprazni predpomnilnik', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Shrani nastavitve', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Opis deljene transakcije', - 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'split_title_help' => 'Če ustvarite deljeno transakcijo, mora obstajati globalni opis za vse dele transakcije.', - 'you_create_transfer' => 'You\'re creating a transfer.', - 'you_create_withdrawal' => 'You\'re creating a withdrawal.', - 'you_create_deposit' => 'You\'re creating a deposit.', + 'invite_is_already_redeemed' => 'Povabilo na ":address" je že unovčeno.', + 'invite_is_deleted' => 'Povabilo na ":address" je bilo izbrisano.', + 'invite_new_user_title' => 'Povabi nove uporabnike', + 'invite_new_user_text' => 'Kot skrbnik lahko povabite uporabnike, da se registrirajo v vaši administraciji Firefly III. Z uporabo neposredne povezave, ki jo lahko delite z njimi, bodo lahko registrirali račun. Povabljeni uporabnik in njegova povezava do povabila bosta prikazana v spodnji tabeli. Z njimi lahko delite povezavo do povabila.', + 'invited_user_mail' => 'E-poštni naslov', + 'invite_user' => 'Povabi uporabnika', + 'user_is_invited' => 'E-poštni naslov ":address" je bil povabljen na Firefly III', + 'administration' => 'Administracija', + 'system_settings' => 'Sistemske nastavitve', + 'code_already_used' => 'Uporabljena je bila koda povabila', + 'user_administration' => 'Upravljanje uporabnikov', + 'list_all_users' => 'Vsi uporabniki', + 'all_users' => 'Vsi uporabniki', + 'instance_configuration' => 'Nastavitve', + 'firefly_instance_configuration' => 'Možnosti nastavitev za Firefly III', + 'setting_single_user_mode' => 'Enouporabniški način', + 'setting_single_user_mode_explain' => 'Privzeto Firefly III dovoli samo eno (1) registracijo: vašo. To je varnostni ukrep, ki preprečuje drugim, da uporabljajo vašo instanco, razen če jim tega ne dovolite. Nadaljnje registracije so blokirane. Ko počistite to potrditveno polje, lahko tudi drugi uporabijo vašo instanco, če do nje lahko dostopajo (ko je objavljena na internetu).', + 'store_configuration' => 'Shranite nastavitve', + 'single_user_administration' => 'Uporabniške nastavitve za :email', + 'edit_user' => 'Uredi uporabnika :email', + 'hidden_fields_preferences' => 'Več možnosti transakcije lahko omogočite v nastavitvah.', + 'user_data_information' => 'Uporabniški podatki', + 'user_information' => 'Podatki o uporabniku', + 'total_size' => 'skupna velikost', + 'budget_or_budgets' => ':count proračun|:count proračunov', + 'budgets_with_limits' => 'Proračun:count z nastavljenim zneskom|:count proračuni z nastavljenim zneskom', + 'nr_of_rules_in_total_groups' => ':count_rules pravil v :count_groups skupinskem/ih pravilu/ih', + 'tag_or_tags' => ':count oznak|:count oznak', + 'configuration_updated' => 'Nastavitve so bili posodobljene', + 'setting_is_demo_site' => 'Demo stran', + 'setting_is_demo_site_explain' => 'Če potrdite to polje, se bo ta namestitev obnašala, kot da je to demo spletno mesto in ima lahko čudne stranske učinke.', + 'block_code_bounced' => 'Elektronsko sporočilo je bilo zavrnjeno', + 'block_code_expired' => 'Demo račun je potekel', + 'no_block_code' => 'Brez razloga za blokiranje ali pa uporabnik ni blokiran', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Uporabnik še ni potrdil novega elektronskega naslova', + 'admin_update_email' => 'V nasprotju s stranjo profila, uporabnik NE bo obveščen o spremembi svojega elektronskega naslova!', + 'update_user' => 'Posodobi uporabnika', + 'updated_user' => 'Uporabniški podatki spremenjeni.', + 'delete_user' => 'Izbriši uporabnika :email', + 'user_deleted' => 'Uporabnik je izbrisan', + 'send_test_email' => 'Pošlji testno elektronsko sporočilo', + 'send_test_email_text' => 'Če želite preveriti, ali vaša namestitev lahko pošilja e-pošto ali objavlja sporočila Slack, pritisnite ta gumb. Tukaj ne boste videli napake (če obstaja), dnevniške datoteke bodo odražale vse napake. Ta gumb lahko pritisnete tolikokrat, kot želite. Ni nadzora neželene pošte. Sporočilo bo poslano na :email in bi moralo prispeti kmalu.', + 'send_message' => 'Pošlji sporočilo', + 'send_test_triggered' => 'Test je bil sprožen. Preverite mapo »Prejeto« in datoteke dnevnika.', + 'give_admin_careful' => 'Uporabniki, ki imajo skrbniške pravice, vam lahko odvzamejo vaše. Bodi previden.', + 'admin_maintanance_title' => 'Vzdrževanje', + 'admin_maintanance_expl' => 'Nekaj čudovitih gumbov za vzdrževanje Firefly III', + 'admin_maintenance_clear_cache' => 'Izpraznite predpomnilnik', + 'admin_notifications' => 'Skrbniška obvestila', + 'admin_notifications_expl' => 'Skrbnik lahko omogoči ali onemogoči naslednja obvestila. Če želite ta sporočila prenesti tudi prek Slacka, nastavite URL "vhodni webhook".', + 'admin_notification_check_user_new_reg' => 'Uporabnik prejme pozdravno sporočilo po registraciji', + 'admin_notification_check_admin_new_reg' => 'Skrbniki prejmejo obvestilo o registraciji novega uporabnika', + 'admin_notification_check_new_version' => 'Na voljo je nova različica', + 'admin_notification_check_invite_created' => 'Uporabnik je povabljen v Firefly III', + 'admin_notification_check_invite_redeemed' => 'Uporabniško povabilo je unovčeno', + 'all_invited_users' => 'Vsi povabljeni uporabniki', + 'save_notification_settings' => 'Shrani nastavitve', + 'notification_settings_saved' => 'Nastavitve obvestil so shranjene', + 'split_transaction_title' => 'Opis razdeljene transakcije', + 'split_transaction_title_help' => 'Če ustvarite razdeljeno transakcijo, mora obstajati globalni opis za vse razdelitve transakcije.', + 'split_title_help' => 'Če ustvarite razdeljeno transakcijo, mora obstajati globalni opis za vse dele transakcije.', + 'you_create_transfer' => 'Ustvarjate prenos.', + 'you_create_withdrawal' => 'Ustvarjate odliv.', + 'you_create_deposit' => 'Ustvarjaš priliv.', // links - 'journal_link_configuration' => 'Nastavitev povezav transakcije', - 'create_new_link_type' => 'Ustvari novo vrsto povezave', - 'store_new_link_type' => 'Shrani novo vrsto povezave', - 'update_link_type' => 'Posodobi vrsto povezave', - 'edit_link_type' => 'Uredi vrsto povezave ":name"', - 'updated_link_type' => 'Vrsto povezave ":name" posodobljena', - 'delete_link_type' => 'Izbriši vrsto povezave ":name"', - 'deleted_link_type' => 'Vrsta povezave ":name" izbrisana', - 'stored_new_link_type' => 'Shrani vrsto povezave ":name"', - 'cannot_edit_link_type' => 'Ne morem urediti vrste povezave ":name"', - 'link_type_help_name' => 'Npr. "Dvojniki"', - 'link_type_help_inward' => 'Npr. "dvojniki"', - 'link_type_help_outward' => 'Npr. "podvojil ga je"', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(ne shrani povezave)', - 'link_transaction' => 'Poveži transakcijo', - 'link_to_other_transaction' => 'Poveži to transakcijo z drugo transakcijo', - 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', - 'this_transaction' => 'Ta transakcija', - 'transaction' => 'Transakcija', - 'comments' => 'Komentarji', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Teh transakcij se ne da povezati', - 'selected_transaction' => 'Selected transaction', - 'journals_linked' => 'Transakcije so povezane.', - 'journals_error_linked' => 'Te transakcije so že povezane.', - 'journals_link_to_self' => 'Transakcije ni mogoče povezati samo nase', - 'journal_links' => 'Povezave transakcije', - 'this_withdrawal' => 'Ta odliv', - 'this_deposit' => 'Ta polog', - 'this_transfer' => 'Ta prenos', - 'overview_for_link' => 'Pregled vrste povezav ":name"', - 'source_transaction' => 'Izvorna transakcija', - 'link_description' => 'Opis povezave', - 'destination_transaction' => 'Ciljna transakcija', - 'delete_journal_link' => 'Izbriši povezavo med :source in :destination', - 'deleted_link' => 'Povezava izbrisana', + 'journal_link_configuration' => 'Nastavitev povezav transakcije', + 'create_new_link_type' => 'Ustvari novo vrsto povezave', + 'store_new_link_type' => 'Shrani novo vrsto povezave', + 'update_link_type' => 'Posodobi vrsto povezave', + 'edit_link_type' => 'Uredi vrsto povezave ":name"', + 'updated_link_type' => 'Vrsta povezave ":name" je posodobljena', + 'delete_link_type' => 'Izbriši vrsto povezave ":name"', + 'deleted_link_type' => 'Vrsta povezave ":name" je izbrisana', + 'stored_new_link_type' => 'Shranite vrsto povezave ":name"', + 'cannot_edit_link_type' => 'Ne morem urediti vrste povezave ":name"', + 'link_type_help_name' => 'Npr. "Dvojniki"', + 'link_type_help_inward' => 'Npr. "dvojniki"', + 'link_type_help_outward' => 'Npr. "podvojil ga je"', + 'save_connections_by_moving' => 'Shranite povezavo med temi transakcijami tako, da jih premaknete na drugo vrsto povezave:', + 'do_not_save_connection' => '(ne shrani povezave)', + 'link_transaction' => 'Poveži transakcijo', + 'link_to_other_transaction' => 'Poveži to transakcijo z drugo transakcijo', + 'select_transaction_to_link' => 'Izberite transakcijo, s katero želite povezati to transakcijo. Povezave trenutno niso v uporabi v Firefly III (razen tega, da so prikazane), vendar nameravam to spremeniti v prihodnosti. Z iskalnim poljem izberite transakcijo po naslovu ali ID-ju. Če želite dodati vrste povezav po meri, si oglejte skrbniški razdelek.', + 'this_transaction' => 'Ta transakcija', + 'transaction' => 'Transakcija', + 'comments' => 'Komentarji', + 'link_notes' => 'Vse opombe, ki jih želite shraniti s povezavo.', + 'invalid_link_selection' => 'Teh transakcij se ne da povezati', + 'selected_transaction' => 'Izbrana transakcija', + 'journals_linked' => 'Transakcije so povezane.', + 'journals_error_linked' => 'Te transakcije so že povezane.', + 'journals_link_to_self' => 'Transakcije ni mogoče povezati samo nase', + 'journal_links' => 'Povezave transakcije', + 'this_withdrawal' => 'Ta odliv', + 'this_deposit' => 'Ta priliv', + 'this_transfer' => 'Ta prenos', + 'overview_for_link' => 'Pregled vrste povezav ":name"', + 'source_transaction' => 'Izvorna transakcija', + 'link_description' => 'Opis povezave', + 'destination_transaction' => 'Ciljna transakcija', + 'delete_journal_link' => 'Izbriši povezavo med :source in :destination', + 'deleted_link' => 'Povezava izbrisana', // link translations: - 'Paid_name' => 'Plačano', - 'Refund_name' => 'Vračilo', - 'Reimbursement_name' => 'Refundacija', - 'Related_name' => 'Sorodno', - 'relates to_inward' => 'se nanaša na', - 'is (partially) refunded by_inward' => 'je (delno) vrnjen iz', - 'is (partially) paid for by_inward' => 'je (delno) plačan iz', - 'is (partially) reimbursed by_inward' => 'je (delno) redundiran iz', - 'inward_transaction' => 'Dohodno plačilo', - 'outward_transaction' => 'Odhodno plačilo', - 'relates to_outward' => 'povezan z', - '(partially) refunds_outward' => '(delno) poplača', - '(partially) pays for_outward' => '(delno) plača za', - '(partially) reimburses_outward' => '(delno) refundira', - 'is (partially) refunded by' => 'is (partially) refunded by', - 'is (partially) paid for by' => 'is (partially) paid for by', - 'is (partially) reimbursed by' => 'is (partially) reimbursed by', - 'relates to' => 'povezan z', - '(partially) refunds' => '(partially) refunds', - '(partially) pays for' => '(partially) pays for', - '(partially) reimburses' => '(partially) reimburses', + 'Paid_name' => 'Plačano', + 'Refund_name' => 'Vračilo', + 'Reimbursement_name' => 'Povračilo', + 'Related_name' => 'Povezano', + 'relates to_inward' => 'se nanaša na', + 'is (partially) refunded by_inward' => 'je (delno) vrnjen iz', + 'is (partially) paid for by_inward' => 'je (delno) plačan iz', + 'is (partially) reimbursed by_inward' => 'je (delno) povrnjen iz', + 'inward_transaction' => 'Dohodno plačilo', + 'outward_transaction' => 'Odhodno plačilo', + 'relates to_outward' => 'povezan z', + '(partially) refunds_outward' => '(delno) poplača', + '(partially) pays for_outward' => '(delno) plača za', + '(partially) reimburses_outward' => '(delno) povrnjen', + 'is (partially) refunded by' => 'znesek je (delno) povrnen od', + 'is (partially) paid for by' => 'je (delno) plačan od', + 'is (partially) reimbursed by' => 'je (delno) povrnjen od', + 'relates to' => 'povezan z', + '(partially) refunds' => '(delna) povračila', + '(partially) pays for' => '(delno) plačan za', + '(partially) reimburses' => '(delno) povrnjen', // split a transaction: - 'splits' => 'Delitve', - 'add_another_split' => 'Dodaj delitev', - 'cannot_edit_opening_balance' => 'Ne moreš urejati začetnega stanja računa.', - 'no_edit_multiple_left' => 'Za urejenje nisi izbral veljavnih transakcij.', - 'breadcrumb_convert_group' => 'Convert transaction', - 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', - 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', - 'create_another' => 'After storing, return here to create another one.', - 'after_update_create_another' => 'After updating, return here to continue editing.', - 'store_as_new' => 'Store as a new transaction instead of updating.', - 'reset_after' => 'Reset form after submission', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Zmanjšanje delitve', + 'splits' => 'Razdelitve', + 'add_another_split' => 'Dodaj še eno razdelitev', + 'cannot_edit_opening_balance' => 'Ne morete urejati začetnega stanja računa.', + 'no_edit_multiple_left' => 'Za urejanje niste izbrali veljavnih transakcij.', + 'breadcrumb_convert_group' => 'Pretvori transakcijo', + 'convert_invalid_source' => 'Podatki o izvoru niso veljavni za transakcijo #%d.', + 'convert_invalid_destination' => 'Informacije o cilju niso veljavne za transakcijo #%d.', + 'create_another' => 'Po shranjevanju se vrnite sem, da ustvarite še enega.', + 'after_update_create_another' => 'Po posodobitvi se vrnite sem za nadaljevanje urejanja.', + 'store_as_new' => 'Shranite kot novo transakcijo namesto posodabljanja.', + 'reset_after' => 'Po predložitvi ponastavite obrazec', + 'errors_submission' => 'Nekaj je bilo narobe z vašo oddajo. Preverite spodnje napake.', + 'errors_submission_v2' => 'Nekaj je bilo narobe z vašo oddajo. Preverite spodnje napake: %{errorMessage}', + 'transaction_expand_split' => 'Razširi razdelitev', + 'transaction_collapse_split' => 'Skrči razdelitev', // object groups - 'default_group_title_name' => '(ungrouped)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(nezdruženo)', + 'default_group_title_name_plain' => 'nezdruženo', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Ustvarite premoženjski račun!', - 'no_accounts_intro_asset' => 'Še nobenega premoženjskega računa nimate. Premoženjski računi so vaši glavni računi sredstev: tekoči računi, skupni računi, varčevalni računi in celo računi kreditnih kartic.', - 'no_accounts_imperative_asset' => 'Da začnete uporabljati Firefly III, morate ustvariti vsaj en premoženjski račun:', - 'no_accounts_create_asset' => 'ustvarite premoženjski račun', - 'no_accounts_title_expense' => 'Ustvarimo nov račun stroškov!', - 'no_accounts_intro_expense' => 'Nimate še nobenega računa stroškov. Računi stroškov so računi kamor knjižite denar, ki ste ga zapravili kot npr. trgovine in supermarketi.', - 'no_accounts_imperative_expense' => 'Računi stroškov se ustvarijo samodejno pri kreiranju transakcije, pa pa želiš, jih lahko ustvariš tudi ročno. Ustvari enega zdaj:', - 'no_accounts_create_expense' => 'Ustvari račun stroškov', - 'no_accounts_title_revenue' => 'Ustvarimo račun prihodkov!', - 'no_accounts_intro_revenue' => 'Računov prihodkov še nimaš. Računi prihodkov so tisti kjer prejemaš denar, kot je na primer vaš delodajalec.', - 'no_accounts_imperative_revenue' => 'Računi prihodkov se ustvarijo samodejno ko ustvarite transakcije, lahko pa jih ustvarite tudi ročno, če želite:', - 'no_accounts_create_revenue' => 'Ustvari račun prihodkov', - 'no_accounts_title_liabilities' => 'Ustvarimo obveznost!', - 'no_accounts_intro_liabilities' => 'Obveznosti še nimaš. Obveznosti so računi, ki evidentirajo (študentska) posojila in druge dolgove.', - 'no_accounts_imperative_liabilities' => 'Te funkcije ni treba uporabljati, vendar je lahko uporabna, če želite slediti tem stvarem.', - 'no_accounts_create_liabilities' => 'Ustvari obveznost', - 'no_budgets_title_default' => 'Ustvarimo proračun', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Proračuni so osnovno orodje finančnega upravljanja. Ustvarimo enega zdaj:', - 'no_budgets_create_default' => 'Ustvari proračun', - 'no_rules_create_default' => 'Ustvari pravilo', - 'no_categories_title_default' => 'Ustvarimo kategorijo!', - 'no_categories_intro_default' => 'Kategorij še nimaš. Kategorije se uporabljajo za natančno nastavitev transakcij in označevanje z določeno kategorijo.', - 'no_categories_imperative_default' => 'Kategorije se ustvarijo avtomatično ko ustvarite transakcije, lahko pa jih ustvarite tudi ročno, če želite:', - 'no_categories_create_default' => 'Ustvari kategorijo', - 'no_tags_title_default' => 'Ustvarimo novo oznako!', - 'no_tags_intro_default' => 'Oznak še nimaš. Oznake se uporabljajo za natančno nastavitev transakcij in označevanje z določenimi ključnimi besedami.', - 'no_tags_imperative_default' => 'Oznake se ustvarijo samodejno ko ustvarite transakcije, lahko pa jih ustvarite tudi ročno, če želite:', - 'no_tags_create_default' => 'Ustvari značko', - 'no_transactions_title_withdrawal' => 'Ustvarimo nov strošek!', - 'no_transactions_intro_withdrawal' => 'Stroškov še nimaš. Za upravljanje svojih financ moraš ustvariti stroške.', - 'no_transactions_imperative_withdrawal' => 'Si porabil nekaj denarja? Potem pa to vnesi:', - 'no_transactions_create_withdrawal' => 'Ustvari strošek', - 'no_transactions_title_deposit' => 'Ustvarimo nov prihodek!', - 'no_transactions_intro_deposit' => 'Prihodkov še nimaš. Za upravljanje svojih financ moraš začeti beležiti prihodke.', - 'no_transactions_imperative_deposit' => 'Si dobil nekaj denarja? Potem pa to vnesi:', - 'no_transactions_create_deposit' => 'Ustvari polog', - 'no_transactions_title_transfers' => 'Ustvarimo nov prenos!', - 'no_transactions_intro_transfers' => 'Nimaš še nobenih prenosov. Če prenašaš denar med računi sredstev, se to zabeleži kot prenos.', - 'no_transactions_imperative_transfers' => 'Si že premikal denar naokoli? Potem pa to vnesi:', - 'no_transactions_create_transfers' => 'Ustvari prenos', - 'no_piggies_title_default' => 'Ustvarimo nov hranilnik!', - 'no_piggies_intro_default' => 'Hranilnikov še nimaš. Lahko jih ustvariš, da razdeliš svoje prihranke in spremljaš, za kaj varčuješ.', - 'no_piggies_imperative_default' => 'Ali imate stvari za katere varčujete? Ustvarite hranilnik in z njim sledite varčevanju:', - 'no_piggies_create_default' => 'Ustvari nov hranilnik', - 'no_bills_title_default' => 'Ustvarimo nov trajnik!', - 'no_bills_intro_default' => 'Trajnikov še nimaš. Lahko ustvariš račune za sledenje rednim stroškom, kot je najem ali zavarovanje.', - 'no_bills_imperative_default' => 'Imate redne račune? Ustvarite trajnik in sledite plačilom:', - 'no_bills_create_default' => 'Ustvari trajnik', + 'no_accounts_title_asset' => 'Ustvarimo račun sredstev!', + 'no_accounts_intro_asset' => 'Še nobenega računa sredstev nimate. Ti računi so vaši glavni računi sredstev: tekoči računi, skupni računi, varčevalni računi in celo računi kreditnih kartic.', + 'no_accounts_imperative_asset' => 'Za začetek uporabe Firefly III, morate ustvariti vsaj en račun sredstev. Naredite to zdaj:', + 'no_accounts_create_asset' => 'Ustvari račun sredstev', + 'no_accounts_title_expense' => 'Ustvarimo nov račun stroškov!', + 'no_accounts_intro_expense' => 'Nimate še nobenega računa stroškov. Računi stroškov so računi kamor knjižite denar, ki ste ga zapravili kot npr. trgovine in supermarketi.', + 'no_accounts_imperative_expense' => 'Računi stroškov se ustvarijo samodejno pri kreiranju transakcije, če pa želite, jih lahko ustvarite tudi ročno. Ustvarite enega zdaj:', + 'no_accounts_create_expense' => 'Ustvari račun stroškov', + 'no_accounts_title_revenue' => 'Ustvarimo račun prihodkov!', + 'no_accounts_intro_revenue' => 'Računov prihodkov še nimate. Računi prihodkov so tisti v katere prejemate denar, kot je na primer vaš od vašega delodajalca.', + 'no_accounts_imperative_revenue' => 'Računi prihodkov se ustvarijo samodejno ko ustvarite transakcije, lahko pa jih ustvarite tudi ročno, če želite:', + 'no_accounts_create_revenue' => 'Ustvari račun prihodkov', + 'no_accounts_title_liabilities' => 'Ustvarimo obveznost!', + 'no_accounts_intro_liabilities' => 'Obveznosti še nimaš. Obveznosti so računi, ki evidentirajo (študentska) posojila in druge dolgove.', + 'no_accounts_imperative_liabilities' => 'Te funkcije ni treba uporabljati, vendar je lahko uporabna, če želite slediti tem stvarem.', + 'no_accounts_create_liabilities' => 'Ustvari obveznost', + 'no_budgets_title_default' => 'Ustvarimo proračun', + 'no_rules_title_default' => 'Ustvarimo pravilo', + 'no_budgets_intro_default' => 'Nimate še nobenega proračuna. Proračuni se uporabljajo za organiziranje vaših stroškov v logične skupine, ki jim lahko dodelite poljubne zneske za omejitev svojih stroškov.', + 'no_rules_intro_default' => 'Nimate še nobenih pravil. Pravila so močna avtomatizacija, ki lahko upravlja transakcije namesto vas.', + 'no_rules_imperative_default' => 'Pravila so lahko zelo uporabna, ko upravljate transakcije. Ustvarimo ga zdaj:', + 'no_budgets_imperative_default' => 'Proračuni so osnovno orodje finančnega upravljanja. Ustvarimo enega zdaj:', + 'no_budgets_create_default' => 'Ustvari proračun', + 'no_rules_create_default' => 'Ustvari pravilo', + 'no_categories_title_default' => 'Ustvarimo kategorijo!', + 'no_categories_intro_default' => 'Nimate še kategorij. Kategorije se uporabljajo za natančno nastavitev transakcij in označevanje z določeno kategorijo.', + 'no_categories_imperative_default' => 'Kategorije se ustvarijo avtomatično, ko ustvarite transakcije, lahko pa jih ustvarite tudi ročno, če želite:', + 'no_categories_create_default' => 'Ustvari kategorijo', + 'no_tags_title_default' => 'Ustvarimo novo oznako!', + 'no_tags_intro_default' => 'Oznak še nimaš. Oznake se uporabljajo za natančno nastavitev transakcij in označevanje z določenimi ključnimi besedami.', + 'no_tags_imperative_default' => 'Oznake se ustvarijo samodejno ko ustvarite transakcije, lahko pa jih ustvarite tudi ročno, če želite:', + 'no_tags_create_default' => 'Ustvari oznako', + 'no_transactions_title_withdrawal' => 'Ustvarimo nov strošek!', + 'no_transactions_intro_withdrawal' => 'Stroškov še nimate. Za upravljanje svojih financ morate ustvariti stroške.', + 'no_transactions_imperative_withdrawal' => 'Ste porabili nekaj denarja? Potem pa to vnesite:', + 'no_transactions_create_withdrawal' => 'Ustvari strošek', + 'no_transactions_title_deposit' => 'Ustvarimo nov prihodek!', + 'no_transactions_intro_deposit' => 'Prihodkov še nimate. Za upravljanje vaših financ morate začeti beležiti prihodke.', + 'no_transactions_imperative_deposit' => 'Ste dobil nekaj denarja? Potem pa to vnesite:', + 'no_transactions_create_deposit' => 'Ustvari priliv', + 'no_transactions_title_transfers' => 'Ustvarimo nov prenos!', + 'no_transactions_intro_transfers' => 'Nimate še nobenih prenosov. Če prenašate denar med računi sredstev, se to zabeleži kot prenos.', + 'no_transactions_imperative_transfers' => 'Ste že premikali denar naokoli? Potem pa to vnesite:', + 'no_transactions_create_transfers' => 'Ustvari prenos', + 'no_piggies_title_default' => 'Ustvarimo nov hranilnik!', + 'no_piggies_intro_default' => 'Nimate še hranilnikov. Lahko jih ustvarite, da razdelite svoje prihranke in spremljate, za kaj varčujete.', + 'no_piggies_imperative_default' => 'Ali imate stvari za katere varčujete? Ustvarite hranilnik in z njim sledite varčevanju:', + 'no_piggies_create_default' => 'Ustvari nov hranilnik', + 'no_bills_title_default' => 'Ustvari nov račun!', + 'no_bills_intro_default' => 'Nimate še nobenega računa. Lahko ustvarite račune za sledenje rednih stroškov, kot so najemnina ali zavarovanje.', + 'no_bills_imperative_default' => 'Imate redne račune? Ustvarite ponavljajoče se račune in sledite vašim plačilom:', + 'no_bills_create_default' => 'Ustvari nov račun', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Ponavljajoče transakcije', - 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', - 'recurring_calendar_view' => 'Koledar', - 'no_recurring_title_default' => 'Ustvarimo ponavljajočo transakcijo!', - 'no_recurring_intro_default' => 'Ponavljajočih transakcij še nimaš. Uporabiš jih lahko zato, da ti Firefly III samodejno ustvari transakcije.', - 'no_recurring_imperative_default' => 'To je precej napredna funkcija, vendar je lahko zelo uporabna. Preden nadaljuješ, se prepričaj, da si v zgornjem desnem kotu prebral dokumentacijo (ikona ?).', - 'no_recurring_create_default' => 'Ustvari ponavljajočo transakcijo', - 'make_new_recurring' => 'Ustvari ponavljajočo transakcijo', - 'recurring_daily' => 'Vsak dan', - 'recurring_weekly' => 'Vsak teden v :weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => 'Vsak mesec :dayOfMonth. dan', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Vsak mesec :dayOfMonth. :weekday', - 'recurring_yearly' => 'Vsako leto na :date', - 'overview_for_recurrence' => 'Pregled ponavljajočih transakcij ":title"', - 'warning_duplicates_repetitions' => 'V redkih primerih se datumi na tem seznamu pojavijo dvakrat. To se lahko zgodi, če pride do večkratnih ponovitev. Firefly III bo vedno ustvaril eno transakcijo na dan.', - 'created_transactions' => 'Sorodne transakcije', - 'expected_withdrawals' => 'Pričakovani odlivi', - 'expected_deposits' => 'Pričakovani pologi', - 'expected_transfers' => 'Pričakovani prenosi', - 'created_withdrawals' => 'Ustvarjeni odlivi', - 'created_deposits' => 'Ustvarjeni pologi', - 'created_transfers' => 'Ustvarjeno prenosi', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => 'Ustvarjeno iz ponavljajoče transakcije ":title" (#:id)', - 'recurring_never_cron' => 'Zdi se, da se cron opravilo, ki je potrebno za podporo ponavljajočih transakcij ni še nikoli zagnalo. To je seveda normalno, če ste pravkar namestili Firefly III, vendar je to nekaj, kar morate čim prej nastaviti. Oglejte si strani s pomočjo z ikono (?) - v zgornjem desnem kotu strani.', - 'recurring_cron_long_ago' => 'Izgleda, da je preteklo več kot 36 ur, odkar je zadnje cron opravilo, ki podpira ponavljajoče transakcije, sprožilo. Ali si prepričan, da je bilo pravilno nastavljeno? Oglej si strani s pomočjo z ikono (?) v zgornjem desnem kotu strani.', + 'create_right_now' => 'Ustvari takoj', + 'no_new_transaction_in_recurrence' => 'Ustvarjena ni bila nobena nova transakcija. Mogoče je bila za ta datum že sprožena?', + 'recurrences' => 'Ponavljajoče se transakcije', + 'repeat_until_in_past' => 'Ta ponavljajoča se transakcija se je prenehala ponavljati dne :date.', + 'recurring_calendar_view' => 'Koledar', + 'no_recurring_title_default' => 'Ustvarimo ponavljajočo se transakcijo!', + 'no_recurring_intro_default' => 'Ponavljajočih transakcij še nimate. Uporabite jih lahko zato, da vam Firefly III samodejno ustvari transakcije.', + 'no_recurring_imperative_default' => 'To je precej napredna funkcija, vendar je lahko zelo uporabna. Preden nadaljuješ, se prepričaj, da si v zgornjem desnem kotu prebral dokumentacijo (ikona ?).', + 'no_recurring_create_default' => 'Ustvari ponavljajočo se transakcijo', + 'make_new_recurring' => 'Ustvari ponavljajočo se transakcijo', + 'recurring_daily' => 'Vsak dan', + 'recurring_weekly' => 'Vsak teden v :weekday', + 'recurring_weekly_skip' => 'Vsak :skip teden na :weekday', + 'recurring_monthly' => 'Vsak mesec :dayOfMonth. dan', + 'recurring_monthly_skip' => 'Vsak :skip mesec na :dayOfMonth dan', + 'recurring_ndom' => 'Vsak mesec :dayOfMonth. :weekday', + 'recurring_yearly' => 'Vsako leto na :date', + 'overview_for_recurrence' => 'Pregled ponavljajočih se transakcij ":title"', + 'warning_duplicates_repetitions' => 'V redkih primerih se datumi na tem seznamu pojavijo dvakrat. To se lahko zgodi, če pride do večkratnih ponovitev. Firefly III bo vedno ustvaril eno transakcijo na dan.', + 'created_transactions' => 'Sorodne transakcije', + 'expected_withdrawals' => 'Pričakovani odlivi', + 'expected_deposits' => 'Pričakovani prilivi', + 'expected_transfers' => 'Pričakovani prenosi', + 'created_withdrawals' => 'Ustvarjeni odlivi', + 'created_deposits' => 'Ustvarjeni prilivi', + 'created_transfers' => 'Ustvarjeno prenosi', + 'recurring_info' => 'Ponavljajoča se transakcija :count / :total', + 'created_from_recurrence' => 'Ustvarjeno iz ponavljajoče se transakcije ":title" (#:id)', + 'recurring_never_cron' => 'Zdi se, da se cron opravilo, ki je potrebno za podporo ponavljajočih se transakcij ni še nikoli zagnalo. To je seveda normalno, če ste pravkar namestili Firefly III, vendar je to nekaj, kar morate čim prej nastaviti. Oglejte si strani s pomočjo z ikono (?) - v zgornjem desnem kotu strani.', + 'recurring_cron_long_ago' => 'Izgleda, da je preteklo več kot 36 ur, odkar je zadnje cron opravilo, ki podpira ponavljajoče se transakcije, sprožilo. Ali ste prepričan, da je bilo pravilno nastavljeno? Oglejte si strani s pomočjo z ikono (?) v zgornjem desnem kotu strani.', - 'create_new_recurrence' => 'Ustvari novo ponavljajočo transakcijo', - 'help_first_date' => 'Navedi prvo pričakovano ponovitev. To mora biti v prihodnosti.', - 'help_first_date_no_past' => 'Firefly III ne bo ustvarjal transakcij v preteklosti.', - 'no_currency' => '(brez valute)', - 'mandatory_for_recurring' => 'Obvezne informacije o ponovitvah', - 'mandatory_for_transaction' => 'Obvezne informacije o transakcijah', - 'optional_for_recurring' => 'Neobvezne informacije o ponovitvah', - 'optional_for_transaction' => 'Neobvezne informacije o transakcijah', - 'change_date_other_options' => 'Spremeni "prvi datum", za več možnosti.', - 'mandatory_fields_for_tranaction' => 'Te vrednosti bodo končale v ustvarjenih transakcijah', - 'click_for_calendar' => 'Klikni tu za koledar, ki ti pokaže, kdaj se transakcija ponovi.', - 'repeat_forever' => 'Ponavljaj v nedogled', - 'repeat_until_date' => 'Ponavljaj do datuma', - 'repeat_times' => 'Ponavljaj večkrat', - 'recurring_skips_one' => 'Vsak drugi', - 'recurring_skips_more' => 'Preskoči :count ponovitev', - 'store_new_recurrence' => 'Shrani ponavljajočo transakcijo', - 'stored_new_recurrence' => 'Ponavljajoča transakcija ":title" uspešno shranjena.', - 'edit_recurrence' => 'Uredi ponavljajočo transakcijo ":title"', - 'recurring_repeats_until' => 'Ponavlja se do :date', - 'recurring_repeats_forever' => 'Ponavlja se v nedogled', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Uredi ponavljajočo transakcijo', - 'updated_recurrence' => 'Uredi ponavljajočo transakcijo ":title"', - 'recurrence_is_inactive' => 'Ta ponavljajoča se transakcija ni aktivna in ne bo ustvarila novih transakcij.', - 'delete_recurring' => 'Izbriši ponavljajočo transakcijo ":title"', - 'new_recurring_transaction' => 'Nova ponavljajoča transakcija', - 'help_weekend' => 'Kaj naj Firefly III stori, ko ponavljajoča transakcija pade na soboto ali nedeljo?', - 'do_nothing' => 'Samo ustvari transakcijo', - 'skip_transaction' => 'Skip the occurrence', - 'jump_to_friday' => 'Namesto tega ustvari transakcijo na prejšnji petek', - 'jump_to_monday' => 'Namesto tega ustvari transakcijo na naslednji ponedeljek', - 'will_jump_friday' => 'Bo ustvarjena v petek namesto ob vikendih.', - 'will_jump_monday' => 'Bo ustvarjena v ponedeljek namesto ob vikendih.', - 'except_weekends' => 'Razen vikendov', - 'recurrence_deleted' => 'Ponavljajoča transakcija ":title" izbrisana', + 'create_new_recurrence' => 'Ustvari novo ponavljajočo se transakcijo', + 'help_first_date' => 'Navedi prvo pričakovano ponovitev. To mora biti v prihodnosti.', + 'help_first_date_no_past' => 'Firefly III ne bo ustvarjal transakcij v preteklosti.', + 'no_currency' => '(brez valute)', + 'mandatory_for_recurring' => 'Obvezne informacije o ponovitvah', + 'mandatory_for_transaction' => 'Obvezne informacije o transakcijah', + 'optional_for_recurring' => 'Neobvezne informacije o ponovitvah', + 'optional_for_transaction' => 'Neobvezne informacije o transakcijah', + 'change_date_other_options' => 'Spremenite "prvi datum", za več možnosti.', + 'mandatory_fields_for_tranaction' => 'Te vrednosti bodo končale v ustvarjenih transakcijah', + 'click_for_calendar' => 'Kliknite tu za koledar, ki vam pokaže, kdaj se transakcija ponovi.', + 'repeat_forever' => 'Ponavljaj v nedogled', + 'repeat_until_date' => 'Ponavljaj do datuma', + 'repeat_times' => 'Ponavljaj večkrat', + 'recurring_skips_one' => 'Vsak drugi', + 'recurring_skips_more' => 'Preskoči :count ponovitev', + 'store_new_recurrence' => 'Shranite ponavljajočo se transakcijo', + 'stored_new_recurrence' => 'Ponavljajoča se transakcija ":title" uspešno shranjena.', + 'edit_recurrence' => 'Uredi ponavljajočo se transakcijo ":title"', + 'recurring_repeats_until' => 'Ponavlja se do :date', + 'recurring_repeats_forever' => 'Ponavlja se v nedogled', + 'recurring_repeats_x_times' => 'Ponavlja se :count časa|Ponavlja se :count krat', + 'update_recurrence' => 'Uredi ponavljajočo se transakcijo', + 'updated_recurrence' => 'Ponavljajoča se transakcija ":title" je bila urejena', + 'recurrence_is_inactive' => 'Ta ponavljajoča se transakcija ni aktivna in ne bo ustvarila novih transakcij.', + 'delete_recurring' => 'Izbriši ponavljajočo se transakcijo ":title"', + 'new_recurring_transaction' => 'Nova ponavljajoča se transakcija', + 'help_weekend' => 'Kaj naj Firefly III stori, ko ponavljajoča se transakcija pade na soboto ali nedeljo?', + 'do_nothing' => 'Samo ustvari transakcijo', + 'skip_transaction' => 'Preskoči ponovitev', + 'jump_to_friday' => 'Namesto tega ustvari transakcijo na prejšnji petek', + 'jump_to_monday' => 'Namesto tega ustvari transakcijo na naslednji ponedeljek', + 'will_jump_friday' => 'Bo ustvarjena v petek namesto ob vikendih.', + 'will_jump_monday' => 'Bo ustvarjena v ponedeljek namesto ob vikendih.', + 'except_weekends' => 'Razen vikendov', + 'recurrence_deleted' => 'Ponavljajoča se transakcija ":title" izbrisana', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balance (:currency)', - 'box_spent_in_currency' => 'Spent (:currency)', - 'box_earned_in_currency' => 'Earned (:currency)', - 'box_budgeted_in_currency' => 'Budgeted (:currency)', - 'box_bill_paid_in_currency' => 'Bills paid (:currency)', - 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', - 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', - 'box_net_worth_in_currency' => 'Net worth (:currency)', - 'box_spend_per_day' => 'Left to spend per day: :amount', + 'box_balance_in_currency' => 'Stanje (:currency)', + 'box_spent_in_currency' => 'Porabljeno (:currency)', + 'box_earned_in_currency' => 'Zasluženo (:currency)', + 'box_budgeted_in_currency' => 'Proračunski znesek (:currency)', + 'box_bill_paid_in_currency' => 'Plačani računi (:currency)', + 'box_bill_unpaid_in_currency' => 'Neplačani računi (:currency)', + 'box_left_to_spend_in_currency' => 'Še za porabit (:currency)', + 'box_net_worth_in_currency' => 'Neto vrednost (:currency)', + 'box_spend_per_day' => 'Še za zapravit na dan :amount', // debug page - 'debug_page' => 'Stran za odpravljanje napak', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Stran za odpravljanje napak', + 'debug_submit_instructions' => 'Če imate težave, lahko informacije v tem polju uporabite kot informacije za odpravljanje napak. Kopirajte in prilepite v novo ali obstoječo izdajo GitHub. Ustvaril bo čudovito tabelo, ki jo lahko uporabite za hitro diagnosticiranje vaše težave.', + 'debug_pretty_table' => 'Če kopirate/prilepite spodnje polje v izdajo GitHub, se ustvari tabela. Prosimo, da tega besedila ne obdajate s povratnimi kljukicami ali narekovaji.', + 'debug_additional_data' => 'Lahko tudi delite vsebino spodnjega polja. To lahko tudi kopirate in prilepite v novo ali obstoječo izdajo GitHub. Vendar lahko vsebina tega polja vsebuje zasebne podatke, kot so imena računov, podrobnosti o transakcijah ali e-poštni naslovi.', // object groups - 'object_groups_menu_bar' => 'Skupine', - 'object_groups_page_title' => 'Skupine', - 'object_groups_breadcrumb' => 'Skupine', - 'object_groups_index' => 'Pregled', - 'object_groups' => 'Skupine', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Naslov', - 'edit_object_group' => 'Uredi skupino ":title"', - 'delete_object_group' => 'Izbriši skupino ":title"', - 'update_object_group' => 'Posodobi skupino', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Skupina', + 'object_groups_menu_bar' => 'Skupine', + 'object_groups_page_title' => 'Skupine', + 'object_groups_breadcrumb' => 'Skupine', + 'object_groups_index' => 'Pregled', + 'object_groups' => 'Skupine', + 'object_groups_empty_explain' => 'Nekatere stvari v Firefly III lahko razdelimo v skupine. Hranilniki imajo na primer polje »Skupina« na zaslonih za urejanje in ustvarjanje. Ko nastavite to polje, lahko uredite imena in vrstni red skupin na tej strani. Za več informacij si oglejte strani s pomočjo v zgornjem desnem kotu pod ikono (?).', + 'object_group_title' => 'Naslov', + 'edit_object_group' => 'Uredi skupino ":title"', + 'delete_object_group' => 'Izbriši skupino ":title"', + 'update_object_group' => 'Posodobi skupino', + 'updated_object_group' => 'Uspešno posodobljena skupina ":title"', + 'deleted_object_group' => 'Uspešno izbrisana skupina ":title"', + 'object_group' => 'Skupina', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Odstrani opombe', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Povezano z računom', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Določite proračun', - 'ale_action_set_category' => 'Nastavi kategorijo', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Spremeni opombe', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Hranilnik', - 'ale_action_remove_from_piggy' => 'Hranilnik', - 'ale_action_add_tag' => 'Dodana oznaka', + 'audit_log_entries' => 'Vnosi v revizijskem dnevniku', + 'ale_action_log_add' => 'Dodan :amount v hranilnik ":name"', + 'ale_action_log_remove' => 'Odstranjeno :amount iz hranilnika ":name"', + 'ale_action_clear_budget' => 'Odstranjeno iz proračuna', + 'ale_action_update_group_title' => 'Posodobljen naslov transakcijske skupine', + 'ale_action_update_date' => 'Posodobljen datum transakcije', + 'ale_action_update_order' => 'Posodobljeno transakcijsko naročilo', + 'ale_action_clear_category' => 'Odstranjeno iz kategorije', + 'ale_action_clear_notes' => 'Odstrani opombe', + 'ale_action_clear_tag' => 'Počiščena oznaka', + 'ale_action_clear_all_tags' => 'Izbrisane vse oznake', + 'ale_action_set_bill' => 'Povezano z računom', + 'ale_action_switch_accounts' => 'Zamenjan izvorni in ciljni račun', + 'ale_action_set_budget' => 'Določite proračun', + 'ale_action_set_category' => 'Nastavi kategorijo', + 'ale_action_set_source' => 'Nastavi izvorni račun', + 'ale_action_set_destination' => 'Nastavi ciljni račun', + 'ale_action_update_transaction_type' => 'Spremenjena vrsta transakcije', + 'ale_action_update_notes' => 'Spremenjene opombe', + 'ale_action_update_description' => 'Spremenjen opis', + 'ale_action_add_to_piggy' => 'Hranilnik', + 'ale_action_remove_from_piggy' => 'Hranilnik', + 'ale_action_add_tag' => 'Dodana oznaka', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Omogoči pretvorbo valut', + 'disable_auto_convert' => 'Onemogoči pretvorbo valut', ]; /* diff --git a/resources/lang/sl_SI/form.php b/resources/lang/sl_SI/form.php index 83b2690655..9fec6c8bd2 100644 --- a/resources/lang/sl_SI/form.php +++ b/resources/lang/sl_SI/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Naziv banke', - 'bank_balance' => 'Stanje', - 'savings_balance' => 'Stanje prihrankov', - 'credit_card_limit' => 'Limit kreditne kartice', - 'automatch' => 'Samodejno poveži', - 'skip' => 'Preskoči', - 'enabled' => 'Omogočeno', - 'name' => 'Ime', - 'active' => 'Aktivno', - 'amount_min' => 'Najnižji znesek', - 'amount_max' => 'Najvišji znesek', - 'match' => 'Se ujema z', - 'strict' => 'Strogi način', - 'repeat_freq' => 'Ponovitve', - 'object_group' => 'Skupina', - 'location' => 'Lokacija', - 'update_channel' => 'Kanal posodobitev', - 'currency_id' => 'Valuta', - 'transaction_currency_id' => 'Valuta', - 'auto_budget_currency_id' => 'Valuta', - 'external_ip' => 'Javni IP naslov tvojega strežnika', - 'attachments' => 'Priloge', - 'BIC' => 'BIC', - 'verify_password' => 'Preveri varnost gesla', - 'source_account' => 'Izvorni račun', - 'destination_account' => 'Ciljni račun', - 'asset_destination_account' => 'Ciljni račun', - 'include_net_worth' => 'Vključi v neto vrednost', - 'asset_source_account' => 'Izvorni račun', - 'journal_description' => 'Opis', - 'note' => 'Opombe', - 'currency' => 'Valuta', - 'account_id' => 'Račun sredstev', - 'budget_id' => 'Proračun', - 'bill_id' => 'Račun', - 'opening_balance' => 'Začetno stanje', - 'tagMode' => 'Način oznak', - 'virtual_balance' => 'Navidezno stanje', + 'bank_name' => 'Naziv banke', + 'bank_balance' => 'Stanje', + 'savings_balance' => 'Stanje prihrankov', + 'credit_card_limit' => 'Limit kreditne kartice', + 'automatch' => 'Samodejno poveži', + 'skip' => 'Preskoči', + 'enabled' => 'Omogočeno', + 'name' => 'Ime', + 'active' => 'Aktivno', + 'amount_min' => 'Najnižji znesek', + 'amount_max' => 'Najvišji znesek', + 'match' => 'Se ujema z', + 'strict' => 'Strogi način', + 'repeat_freq' => 'Ponovitve', + 'object_group' => 'Skupina', + 'location' => 'Lokacija', + 'update_channel' => 'Kanal posodobitev', + 'currency_id' => 'Valuta', + 'transaction_currency_id' => 'Valuta', + 'auto_budget_currency_id' => 'Valuta', + 'external_ip' => 'Javni IP naslov vašega strežnika', + 'attachments' => 'Priloge', + 'BIC' => 'BIC', + 'verify_password' => 'Preverite varnost gesla', + 'source_account' => 'Izvorni račun', + 'destination_account' => 'Ciljni račun', + 'asset_destination_account' => 'Ciljni račun', + 'include_net_worth' => 'Vključite v neto vrednost', + 'asset_source_account' => 'Izvorni račun', + 'journal_description' => 'Opis', + 'note' => 'Opombe', + 'currency' => 'Valuta', + 'account_id' => 'Račun sredstev', + 'budget_id' => 'Proračun', + 'bill_id' => 'Račun', + 'opening_balance' => 'Začetno stanje', + 'tagMode' => 'Način oznak', + 'virtual_balance' => 'Navidezno stanje', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Ciljni znesek', 'account_role' => 'Vloga računa', 'opening_balance_date' => 'Datum začetnega stanja', @@ -94,7 +92,7 @@ return [ 'cc_monthly_payment_date' => 'Datum mesečnega plačila s kreditno kartico', 'piggy_bank_id' => 'Hranilnik', 'returnHere' => 'Vrni se sem', - 'returnHereExplanation' => 'Po shranjevanju se vrni sem in ustvari še eno.', + 'returnHereExplanation' => 'Po shranjevanju se vrni sem in ustvari še enega.', 'returnHereUpdateExplanation' => 'Po shranjevanju se vrni sem.', 'description' => 'Opis', 'expense_account' => 'Račun stroškov', @@ -112,7 +110,7 @@ return [ 'extension_date' => 'Datum razširitve', 'type' => 'Vrsta', 'convert_Withdrawal' => 'Pretvori odliv', - 'convert_Deposit' => 'Pretvori polog', + 'convert_Deposit' => 'Pretvori priliv', 'convert_Transfer' => 'Pretvori prenos', 'amount' => 'Znesek', 'foreign_amount' => 'Tuj znesek', @@ -152,7 +150,7 @@ return [ 'end' => 'Konec obsega', 'delete_account' => 'Izbriši račun ":name"', 'delete_webhook' => 'Izbriši webhook ":title"', - 'delete_bill' => 'Izbriši trajnik ":name"', + 'delete_bill' => 'Izbriši račun ":name"', 'delete_budget' => 'Izbriši proračun ":name"', 'delete_category' => 'Izbriši kategorijo ":name"', 'delete_currency' => 'Izbriši valuto ":name"', @@ -162,25 +160,25 @@ return [ 'delete_rule_group' => 'Izbriši skupino pravil ":title"', 'delete_link_type' => 'Izbriši vrsto povezave ":name"', 'delete_user' => 'Izbriši uporabnika ":email"', - 'delete_recurring' => 'Izbriši ponavljajočo transakcijo ":title"', - 'user_areYouSure' => 'Z brisanjem uporabnika ":email", boš izbrisal vse. Dejanja se ne da razveljaviti ali povrniti iz koša. Če izbrišeš samega sebe, boš izgubil dostop do te instance Firefly III.', - 'attachment_areYouSure' => 'Si prepričan, da želiš zbrisati pripeto datoteko ":name"?', - 'account_areYouSure' => 'Si prepričan, da želiš zbrisati račun ":name"?', - 'account_areYouSure_js' => 'Ali ste prepričani, da želite izbrisati račun z imenom "{name}"?', - 'bill_areYouSure' => 'Si prepričan, da želiš zbrisati trajnik ":name"?', - 'rule_areYouSure' => 'Si prepričan, da želiš zbrisati pravilo ":title"?', - 'object_group_areYouSure' => 'Ali ste prepričani, da želite izbrisati skupino z naslovom ":title"?', - 'ruleGroup_areYouSure' => 'Si prepričan, da želiš zbrisati skupino pravil ":title"?', - 'budget_areYouSure' => 'Si prepričan, da želiš zbrisati proračun ":name"?', - 'webhook_areYouSure' => 'Ali ste prepričani, da želite izbrisati webhook z imenom ":title"?', - 'category_areYouSure' => 'Si prepričan, da želiš zbrisati kategorijo z imenom ":name"?', - 'recurring_areYouSure' => 'Si prepričan, da želiš zbrisati ponavljajoče pravilo ":title"?', - 'currency_areYouSure' => 'Si prepričan, da želiš zbrisati valuto ":name"?', - 'piggyBank_areYouSure' => 'Si prepričan, da želiš zbrisati hranilnik ":name"?', - 'journal_areYouSure' => 'Si prepričan, da želiš zbrisati transakcijo z opisom ":description"?', - 'mass_journal_are_you_sure' => 'Si prepričani, da želite izbrisati te transakcije?', + 'delete_recurring' => 'Izbriši ponavljajočo se transakcijo ":title"', + 'user_areYouSure' => 'Z brisanjem uporabnika ":email", boste izbrisali vse. Dejanja se ne da razveljaviti ali povrniti iz koša. Če izbrišete samega sebe, boste izgubil dostop do te namestitve Firefly III.', + 'attachment_areYouSure' => 'Ste prepričani, da želite izbrisati pripeto datoteko ":name"?', + 'account_areYouSure' => 'Ste prepričani, da želite izbrisati račun ":name"?', + 'account_areYouSure_js' => 'Ste prepričani, da želite izbrisati račun z imenom "{name}"?', + 'bill_areYouSure' => 'Ste prepričani, da želite izbrisati račun ":name"?', + 'rule_areYouSure' => 'Ste prepričani, da želite izbrisati pravilo ":title"?', + 'object_group_areYouSure' => 'Ste prepričani, da želite izbrisati skupino z naslovom ":title"?', + 'ruleGroup_areYouSure' => 'Ste prepričani, da želite izbrisati skupino pravil ":title"?', + 'budget_areYouSure' => 'Ste prepričani, da želite izbrisati proračun ":name"?', + 'webhook_areYouSure' => 'Ste prepričani, da želite izbrisati webhook z imenom ":title"?', + 'category_areYouSure' => 'Ste prepričani, da želite izbrisati kategorijo z imenom ":name"?', + 'recurring_areYouSure' => 'Ste prepričani, da želite izbrisati ponavljajoče pravilo ":title"?', + 'currency_areYouSure' => 'Ste prepričani, da želite izbrisati valuto ":name"?', + 'piggyBank_areYouSure' => 'Ste prepričani, da želite izbrisati hranilnik ":name"?', + 'journal_areYouSure' => 'Ste prepričani, da želite izbrisati transakcijo z opisom ":description"?', + 'mass_journal_are_you_sure' => 'Ste prepričani, da želite izbrisati te transakcije?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,12 +189,11 @@ return [ * */ - - 'tag_areYouSure' => 'Si prepričan, da želite izbrisati to oznako ":tag"?', - 'journal_link_areYouSure' => 'Si prepričan, da želiš izbrisati povezavo med :source in :destination?', - 'linkType_areYouSure' => 'Si prepričan, da želiš izbrisati vrsto povezave ":name" (":inward"/":outward")?', + 'tag_areYouSure' => 'Ste prepričani, da želite izbrisati oznako ":tag"?', + 'journal_link_areYouSure' => 'Ste prepričani, da želite izbrisati povezavo med :source in :destination?', + 'linkType_areYouSure' => 'Ste prepričani, da želite izbrisati vrsto povezave ":name" (":inward"/":outward")?', 'permDeleteWarning' => 'Brisanje stvari iz Firefly III je trajno in ga ni mogoče razveljaviti.', - 'mass_make_selection' => 'Še vedno lahko preprečiš brisanje elementov, tako da počistiš potrditveno polje.', + 'mass_make_selection' => 'Še vedno lahko preprečite brisanje elementov, tako da počistite potrditveno polje.', 'delete_all_permanently' => 'Označeno trajno izbriši', 'update_all_journals' => 'Posodobi te transakcije', 'also_delete_transactions' => 'Edina transakcija, ki je povezana s tem računom, bo prav tako izbrisana.|Vseh :count transakcij, povezanih s tem računom, bo izbrisanih.', @@ -205,14 +202,14 @@ return [ 'also_delete_rules' => 'Edino pravilo, ki je povezano s tem računom, bo prav tako izbrisano.|Vseh :count pravil, povezanih s skupino pravil bo izbrisanih.', 'also_delete_piggyBanks' => 'Edini hranilnik, ki je povezan s tem računom, bo prav tako izbrisan.|Vseh :count hranilnikov, povezanih s tem računom, bo izbrisanih.', 'also_delete_piggyBanks_js' => 'Brez hranilnikov|Edini hranilnik, povezan s tem računom, bo prav tako izbrisan.|Izbrisani bodo tudi vseh {count} hranilnikov, povezani s tem računom.', - 'not_delete_piggy_banks' => 'Hranilnik, povezana s to skupino, ne bo izbrisana.| :count hranilnikov, povezanih s to skupino, ne bo izbrisanih.', - 'bill_keep_transactions' => 'Edina transakcija, ki je povezana s tem trajnikom, ne izbrisana.|Vseh :count transakcij, povezanih s tem trajnikom, bo ohranjenih.', + 'not_delete_piggy_banks' => 'Hranilnik, povezan s to skupino, ne bo izbrisan.| :count hranilnikov, povezanih s to skupino, ne bo izbrisanih.', + 'bill_keep_transactions' => 'Edina transakcija, ki je povezana s tem računom, ne izbrisana.|Vseh :count transakcij, povezanih s tem računom, ne bo izbrisanih.', 'budget_keep_transactions' => 'Edina transakcija, povezana s tem proračunom, ne izbrisana.|Vseh :count transakcij, povezanih s tem proračunom, bo ohranjenih.', 'category_keep_transactions' => 'Edina transakcija, povezana s to kategorijo, ne bo izbrisana.|Vseh :count transakcij, povezanih s to kategorijo bo ohranjenih.', - 'recurring_keep_transactions' => 'Edina transakcija, ustvarjeno s to ponavljajočo transakcijo, ne izbrisana.|Vseh :count transakcij, povezanih ustvarjenih s to ponavljajočo transakcijo bo ohranjenih.', + 'recurring_keep_transactions' => 'Edina transakcija, ustvarjena s to ponavljajočo transakcijo, ne izbrisana.|Vseh :count transakcij, ustvarjenih s to ponavljajočo transakcijo bo ohranjenih.', 'tag_keep_transactions' => 'Edina transakcija, povezana s to oznako, ne bo izbrisana.|Vseh :count transakcij, povezanih s to oznako bo ohranjenih.', 'check_for_updates' => 'Preveri za posodobitve', - 'liability_direction' => 'Odgovornost in/out', + 'liability_direction' => 'Odgovornost not/ven', 'delete_object_group' => 'Izbriši skupino ":title"', 'email' => 'E-poštni naslov', 'password' => 'Geslo', @@ -230,33 +227,32 @@ return [ 'album' => 'Album', 'song' => 'Pesem', - // admin 'domain' => 'Domena', 'single_user_mode' => 'Onemogoči prijavo uporabnikov', 'is_demo_site' => 'Je demo postavitev', // import - 'configuration_file' => 'Konfiguracijska datoteka', + 'configuration_file' => 'Nastavitvena datoteka', 'csv_comma' => 'Vejica (,)', 'csv_semicolon' => 'Podpičje (;)', 'csv_tab' => 'Tabulator (nevidno)', 'csv_delimiter' => 'CSV ločilo polj', 'client_id' => 'Client ID', 'app_id' => 'App ID', - 'secret' => 'Secret', - 'public_key' => 'Public key', + 'secret' => 'Skrivna koda', + 'public_key' => 'Javni ključ', 'country_code' => 'Šifra države', - 'provider_code' => 'Bank or data-provider', + 'provider_code' => 'Banka ponudnika podatkov', 'fints_url' => 'FinTS API URL', 'fints_port' => 'Vrata', - 'fints_bank_code' => 'Bank code', + 'fints_bank_code' => 'Koda banke', 'fints_username' => 'Uporabniško ime', 'fints_password' => 'PIN / geslo', - 'fints_account' => 'FinTS account', + 'fints_account' => 'FinTS račun', 'local_account' => 'Račun v Firely III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Datum od', - 'to_date' => 'Datum do', - 'due_date' => 'Datum zapadlosti', - 'payment_date' => 'Datum plačila', - 'invoice_date' => 'Datum računa', - 'internal_reference' => 'Notranji sklic', - 'inward' => 'Interni opis', - 'outward' => 'Eksterni opis', - 'rule_group_id' => 'Skupina pravil', - 'transaction_description' => 'Opis transakcije', - 'first_date' => 'Prvi datum', - 'transaction_type' => 'Vrsta transakcije', - 'repeat_until' => 'Ponavljaj do', - 'recurring_description' => 'Opis ponavljajoče transakcije', - 'repetition_type' => 'Vrsta ponovitve', - 'foreign_currency_id' => 'Tuja valuta', - 'repetition_end' => 'Konec ponovitve', - 'repetitions' => 'Ponovitve', - 'calendar' => 'Koledar', - 'weekend' => 'Vikend', - 'client_secret' => 'Skrivnost odjemalca', - 'withdrawal_destination_id' => 'Ciljni račun', - 'deposit_source_id' => 'Izvorni račun', - 'expected_on' => 'Pričakovano dne', - 'paid' => 'Plačano', - 'auto_budget_type' => 'Samodejni proračun', - 'auto_budget_amount' => 'Znesek samodejnega proračuna', - 'auto_budget_period' => 'Obdobje samodejnega proračuna', - 'collected' => 'Zbirka', - 'submitted' => 'Oddano', - 'key' => 'Ključ', - 'value' => 'Vsebina zapisa', - 'webhook_delivery' => 'Dostava', - 'webhook_response' => 'Odziv', - 'webhook_trigger' => 'Sprožilec', + 'from_date' => 'Datum od', + 'to_date' => 'Datum do', + 'due_date' => 'Datum zapadlosti', + 'payment_date' => 'Datum plačila', + 'invoice_date' => 'Datum računa', + 'internal_reference' => 'Notranji sklic', + 'inward' => 'Interni opis', + 'outward' => 'Eksterni opis', + 'rule_group_id' => 'Skupina pravil', + 'transaction_description' => 'Opis transakcije', + 'first_date' => 'Prvi datum', + 'transaction_type' => 'Vrsta transakcije', + 'repeat_until' => 'Ponavljaj do', + 'recurring_description' => 'Opis ponavljajoče transakcije', + 'repetition_type' => 'Vrsta ponovitve', + 'foreign_currency_id' => 'Tuja valuta', + 'repetition_end' => 'Konec ponovitve', + 'repetitions' => 'Ponovitve', + 'calendar' => 'Koledar', + 'weekend' => 'Vikend', + 'client_secret' => 'Skrivna koda odjemalca', + 'withdrawal_destination_id' => 'Ciljni račun', + 'deposit_source_id' => 'Izvorni račun', + 'expected_on' => 'Pričakovano dne', + 'paid' => 'Plačano', + 'auto_budget_type' => 'Samodejni proračun', + 'auto_budget_amount' => 'Znesek samodejnega proračuna', + 'auto_budget_period' => 'Obdobje samodejnega proračuna', + 'collected' => 'Zbirka', + 'submitted' => 'Oddano', + 'key' => 'Ključ', + 'value' => 'Vsebina zapisa', + 'webhook_delivery' => 'Dostava', + 'webhook_response' => 'Odziv', + 'webhook_trigger' => 'Sprožilec', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/sl_SI/intro.php b/resources/lang/sl_SI/intro.php index 0c4f96fdd4..8d3923ff3c 100644 --- a/resources/lang/sl_SI/intro.php +++ b/resources/lang/sl_SI/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Dobrodošli na osnovni strani Firefly III. Vzemi si čas za sprehod skozi ta uvod, da dobiš občutek, kako Firefly III deluje.', - 'index_accounts-chart' => 'Ta diagram prikazuje trenutno stanje tvojih računov sredstev. V nastavitvah lahko izbereš račune, ki so vidni tukaj.', - 'index_box_out_holder' => 'To polje in polja poleg tega ti bodo omogočila hiter pregled tvoje finančne situacije.', - 'index_help' => 'Če potrebuješ pomoč na strani ali obrazcu, pritisni ta gumb.', - 'index_outro' => 'Večina strani Firefly III se bo začela z malo predstavitvijo, kot je ta. Če imaš vprašanja ali pripombe, se obrni name. Uživaj!', - 'index_sidebar-toggle' => 'Za ustvarjanje novih transakcij, računov ali drugih stvari uporabi meni pod to ikono.', - 'index_cash_account' => 'To so računi, ki so bili ustvarjeni do sedaj. Lahko uporabiš gotovinski račun za sledenje gotovinskih stroškov, vendar to ni obvezno.', + 'index_intro' => 'Dobrodošli na osnovni strani Firefly III. Vzemite si čas za sprehod skozi ta uvod, da dobite občutek, kako Firefly III deluje.', + 'index_accounts-chart' => 'Ta diagram prikazuje trenutno stanje vaših računov sredstev. V nastavitvah lahko izberete račune, ki so vidni tukaj.', + 'index_box_out_holder' => 'To polje in polja poleg tega vam bodo omogočila hiter pregled vaše finančne situacije.', + 'index_help' => 'Če potrebujete pomoč na strani ali obrazcu, pritisnite ta gumb.', + 'index_outro' => 'Večina strani Firefly III se bo začela z malo predstavitvijo, kot je ta. Če imate vprašanja ali pripombe, se obrnite name. Uživaj!', + 'index_sidebar-toggle' => 'Za ustvarjanje novih transakcij, računov ali drugih stvari uporabite meni pod to ikono.', + 'index_cash_account' => 'To so računi, ki so bili ustvarjeni do sedaj. Lahko uporabite gotovinski račun za sledenje gotovinskih stroškov, vendar to ni obvezno.', // transactions - 'transactions_create_basic_info' => 'Vnesite osnovne podatke o transakciji. Vir, destinacija, datum in opis.', - 'transactions_create_amount_info' => 'Vnesite znesek transakcije. Po potrebi se bodo polja samodejno posodobila za podatke o znesku v tujini.', - 'transactions_create_optional_info' => 'Vsa ta polja so neobvezna. Če sem dodate metapodatke, bodo vaše transakcije bolje organizirane.', - 'transactions_create_split' => 'Če želite razdeliti transakcijo, dodajte več delitev s tem gumbom', + 'transactions_create_basic_info' => 'Vnesite osnovne podatke o transakciji. Vir, destinacija, datum in opis.', + 'transactions_create_amount_info' => 'Vnesite znesek transakcije. Po potrebi se bodo polja samodejno posodobila za podatke o znesku v tujini.', + 'transactions_create_optional_info' => 'Vsa ta polja so neobvezna. Če sem dodate metapodatke, bodo vaše transakcije bolje organizirane.', + 'transactions_create_split' => 'Če želite razdeliti transakcijo, dodajte več razdelitev s tem gumbom', // create account: - 'accounts_create_iban' => 'Svojim računom dodeli veljaven IBAN. To lahko zelo olajša uvoz podatkov v prihodnosti.', - 'accounts_create_asset_opening_balance' => 'Računi sredstev imajo lahko "začetno stanje", kar označuje začetek zgodovine tega računa v Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III podpira več valut. Računi sredstev imajo eno glavno valuto, ki jo nastaviš tukaj.', - 'accounts_create_asset_virtual' => 'Včasih lahko računu nastaviš virtualno stanje: dodaten znesek, ki se vedno doda ali odstrani od dejanskega stanja.', + 'accounts_create_iban' => 'Vašim računom dodelite veljaven IBAN. To lahko zelo olajša uvoz podatkov v prihodnosti.', + 'accounts_create_asset_opening_balance' => 'Računi sredstev imajo lahko "začetno stanje", kar označuje začetek zgodovine tega računa v Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III podpira več valut. Računi sredstev imajo eno glavno valuto, ki jo nastavite tukaj.', + 'accounts_create_asset_virtual' => 'Včasih lahko računu nastavite virtualno stanje: dodaten znesek, ki se vedno doda ali odstrani od dejanskega stanja.', // budgets index - 'budgets_index_intro' => 'Proračuni se uporabljajo za upravljanje tvojih financ in tvorijo eno od ključnih funkcij Firefly III.', - 'budgets_index_set_budget' => 'Določi svoj celotni proračun za vsako obdobje, tako da ti lahko Firefly III pove, če si predvideli vsa razpoložljiva sredstva.', - 'budgets_index_see_expenses_bar' => 'Poraba denarja bo počasi zapolnila to vrstico.', - 'budgets_index_navigate_periods' => 'Krmarjenje po obdobjih omogoča preprosto predčasno nastavitev proračunov.', - 'budgets_index_new_budget' => 'Ustvari nove proračune, kot se ti zdi primerno.', - 'budgets_index_list_of_budgets' => 'S to tabelo določi zneske za vsak proračun in si oglej, kako napreduješ.', - 'budgets_index_outro' => 'Če želiš izvedeti več o pripravi proračuna, preveri ikono pomoči v zgornjem desnem kotu.', + 'budgets_index_intro' => 'Proračuni se uporabljajo za upravljanje vaših financ in tvorijo eno od ključnih funkcij Firefly III.', + 'budgets_index_see_expenses_bar' => 'Poraba denarja bo počasi zapolnila to vrstico.', + 'budgets_index_navigate_periods' => 'Krmarjenje po obdobjih omogoča preprosto predčasno nastavitev proračunov.', + 'budgets_index_new_budget' => 'Ustvarite nove proračune, kot se vam zdi primerno.', + 'budgets_index_list_of_budgets' => 'S to tabelo določite zneske za vsak proračun in si oglejte, kako napredujete.', + 'budgets_index_outro' => 'Če želite izvedeti več o pripravi proračuna, preverite ikono pomoči v zgornjem desnem kotu.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,45 +74,44 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'S temi poročili dobiš podroben vpogled v svoje finance.', - 'reports_index_inputReportType' => 'Izberi vrsto poročila. Oglej si strani za pomoč, če želiš videti, kaj ti vsako poročilo prikazuje.', - 'reports_index_inputAccountsSelect' => 'Račune sredstev lahko izključiš ali vključiš, kot se ti zdi primerno.', - 'reports_index_inputDateRange' => 'Izbrano časovno obdobje je v celoti odvisno od tebe: od enega dneva do 10 let.', - 'reports_index_extra-options-box' => 'Glede na izbrano poročilo lahko tukaj izbereš dodatne filtre in možnosti. Opazuj polje, ko spreminjaš vrste poročil.', + 'reports_index_intro' => 'S temi poročili dobite podroben vpogled v vaše finance.', + 'reports_index_inputReportType' => 'Izberite vrsto poročila. Oglejte si strani za pomoč, če želite videti, kaj vam vsako poročilo prikazuje.', + 'reports_index_inputAccountsSelect' => 'Račune sredstev lahko izključite ali vključite, kot se vam to zdi primerno.', + 'reports_index_inputDateRange' => 'Izbrani datumski razpon je v celoti prepuščen vam: od enega dneva do 10 let ali še več.', + 'reports_index_extra-options-box' => 'Glede na izbrano poročilo lahko tukaj izberete dodatne filtre in možnosti. Opazujte polje, ko spreminjate vrste poročil.', // reports (reports) - 'reports_report_default_intro' => 'To poročilo vam bo dalo hiter in celovit pregled vaših financ. Če želite videti še kaj drugega, me prosim kontaktirajte!', - 'reports_report_audit_intro' => 'To poročilo vam bo dalo podrobne vpoglede v vaše račune sredstev.', - 'reports_report_audit_optionsBox' => 'S temi potrditvenimi polji prikažete ali skrijete stolpce, ki vas zanimajo.', + 'reports_report_default_intro' => 'To poročilo vam bo dalo hiter in celovit pregled vaših financ. Če želite videti še kaj drugega, me prosim kontaktirajte!', + 'reports_report_audit_intro' => 'To poročilo vam bo dalo podrobne vpoglede v vaše račune sredstev.', + 'reports_report_audit_optionsBox' => 'S temi potrditvenimi polji prikažete ali skrijete stolpce, ki vas zanimajo.', - 'reports_report_category_intro' => 'To poročilo vam bo dalo vpogled v eno ali več kategorij.', - 'reports_report_category_pieCharts' => 'Ti grafikoni vam bodo dali vpogled v odhodke in prihodke glede na kategorijo ali račun.', - 'reports_report_category_incomeAndExpensesChart' => 'Ta grafikon prikazuje vaše stroške in prihodke po kategorijah.', + 'reports_report_category_intro' => 'To poročilo vam bo dalo vpogled v eno ali več kategorij.', + 'reports_report_category_pieCharts' => 'Ti grafikoni vam bodo dali vpogled v odhodke in prihodke glede na kategorijo ali račun.', + 'reports_report_category_incomeAndExpensesChart' => 'Ta grafikon prikazuje vaše stroške in prihodke po kategorijah.', - 'reports_report_tag_intro' => 'To poročilo vam bo dalo vpogled v eno ali več oznak.', - 'reports_report_tag_pieCharts' => 'Ti grafikoni vam bodo dali vpogled v stroške in prihodke na oznako, račun, kategorijo ali proračun.', - 'reports_report_tag_incomeAndExpensesChart' => 'This chart shows your expenses and income per tag.', + 'reports_report_tag_intro' => 'To poročilo vam bo dalo vpogled v eno ali več oznak.', + 'reports_report_tag_pieCharts' => 'Ti grafikoni vam bodo dali vpogled v stroške in prihodke na oznako, račun, kategorijo ali proračun.', + 'reports_report_tag_incomeAndExpensesChart' => 'Ta grafikon prikazuje vaše stroške in prihodke po kategorijah.', - 'reports_report_budget_intro' => 'This report will give you insight in one or multiple budgets.', - 'reports_report_budget_pieCharts' => 'These charts will give you insight in expenses per budget or per account.', - 'reports_report_budget_incomeAndExpensesChart' => 'This chart shows your expenses per budget.', + 'reports_report_budget_intro' => 'To poročilo vam bo dalo vpogled v enega ali več proračunov.', + 'reports_report_budget_pieCharts' => 'Ti grafikoni vam bodo dali vpogled v odhodke po proračunih v računu.', + 'reports_report_budget_incomeAndExpensesChart' => 'Ta grafikon prikazuje vaše stroške po proračunih.', // create transaction - 'transactions_create_switch_box' => 'Use these buttons to quickly switch the type of transaction you wish to save.', - 'transactions_create_ffInput_category' => 'You can freely type in this field. Previously created categories will be suggested.', - 'transactions_create_withdrawal_ffInput_budget' => 'Link your withdrawal to a budget for better financial control.', - 'transactions_create_withdrawal_currency_dropdown_amount' => 'Use this dropdown when your withdrawal is in another currency.', - 'transactions_create_deposit_currency_dropdown_amount' => 'Use this dropdown when your deposit is in another currency.', - 'transactions_create_transfer_ffInput_piggy_bank_id' => 'Select a piggy bank and link this transfer to your savings.', + 'transactions_create_switch_box' => 'Uporabite te gumbe za hitri prekop med tipi transakcij, ki jih želite shraniti.', + 'transactions_create_ffInput_category' => 'V to polje lahko prosto pišete. Predhodno ustvarjene kategorije bodo samodejno predlagane.', + 'transactions_create_withdrawal_ffInput_budget' => 'Povežite svoj odliv s proračunom za boljši finančni nadzor.', + 'transactions_create_withdrawal_currency_dropdown_amount' => 'Uporabite ta spustni meni, ko je vaš odliv v drugi valuti.', + 'transactions_create_deposit_currency_dropdown_amount' => 'Uporabite ta spustni meni, ko je vaš depozit v drugi valuti.', + 'transactions_create_transfer_ffInput_piggy_bank_id' => 'Izberite hranilnik in to nakazilo povežite s svojimi prihranki.', // piggy banks index: - 'piggy-banks_index_saved' => 'This field shows you how much you\'ve saved in each piggy bank.', - 'piggy-banks_index_button' => 'Next to this progress bar are two buttons (+ and -) to add or remove money from each piggy bank.', - 'piggy-banks_index_accountStatus' => 'For each asset account with at least one piggy bank the status is listed in this table.', + 'piggy-banks_index_saved' => 'V tem polju je prikazano, koliko ste prihranili v posameznem hranilniku.', + 'piggy-banks_index_button' => 'Poleg te vrstice napredka sta dva gumba (+ in -) za dodajanje ali odstranjevanje denarja iz vsakega hranilnika.', + 'piggy-banks_index_accountStatus' => 'Za vsak račun sredstev z vsaj enim hranilnikom je status naveden v tej tabeli.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,50 +122,49 @@ return [ * */ - // create piggy - 'piggy-banks_create_name' => 'What is your goal? A new couch, a camera, money for emergencies?', - 'piggy-banks_create_date' => 'You can set a target date or a deadline for your piggy bank.', + 'piggy-banks_create_name' => 'Kaj je vaš cilj? Nov kavč, kamera, denar za nujne primere?', + 'piggy-banks_create_date' => 'Določite lahko ciljni datum ali rok za vaš hranilnik.', // show piggy - 'piggy-banks_show_piggyChart' => 'This chart will show the history of this piggy bank.', - 'piggy-banks_show_piggyDetails' => 'Some details about your piggy bank', - 'piggy-banks_show_piggyEvents' => 'Any additions or removals are also listed here.', + 'piggy-banks_show_piggyChart' => 'Ta grafikon bo prikazal zgodovino tega hranilnika.', + 'piggy-banks_show_piggyDetails' => 'Nekaj podrobnosti o vašem hranilniku', + 'piggy-banks_show_piggyEvents' => 'Tukaj so navedena tudi vsa dodajanja ali odstranitve.', // bill index - 'bills_index_rules' => 'Here you see which rules will check if this bill is hit', - 'bills_index_paid_in_period' => 'This field indicates when the bill was last paid.', - 'bills_index_expected_in_period' => 'This field indicates for each bill if and when the next bill is expected to hit.', + 'bills_index_rules' => 'Tukaj vidite, katera pravila bodo preverila, ali je to željen račun', + 'bills_index_paid_in_period' => 'V tem polju je navedeno, kdaj je bil račun nazadnje plačan.', + 'bills_index_expected_in_period' => 'To polje označuje za vsak račun, če in kdaj se pričakuje da bo izdan naslednji račun.', // show bill - 'bills_show_billInfo' => 'This table shows some general information about this bill.', - 'bills_show_billButtons' => 'Use this button to re-scan old transactions so they will be matched to this bill.', - 'bills_show_billChart' => 'This chart shows the transactions linked to this bill.', + 'bills_show_billInfo' => 'Ta tabela prikazuje nekaj splošnih informacij o tem računu.', + 'bills_show_billButtons' => 'Uporabite ta gumb za ponovni pregled starih transakcij, da se bodo ujemale s tem računom.', + 'bills_show_billChart' => 'Ta grafikon prikazuje transakcije, povezane s tem računom.', // create bill - 'bills_create_intro' => 'Use bills to track the amount of money you\'re due every period. Think about expenses like rent, insurance or mortgage payments.', - 'bills_create_name' => 'Use a descriptive name such as "Rent" or "Health insurance".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', - 'bills_create_amount_min_holder' => 'Select a minimum and maximum amount for this bill.', - 'bills_create_repeat_freq_holder' => 'Most bills repeat monthly, but you can set another frequency here.', - 'bills_create_skip_holder' => 'If a bill repeats every 2 weeks, the "skip"-field should be set to "1" to skip every other week.', + 'bills_create_intro' => 'Uporabite račune za spremljanje zneska denarja, ki ga zapadete v vsakem obdobju. Pomislite na stroške, kot so najemnina, zavarovanje ali hipotekarna plačila.', + 'bills_create_name' => 'Uporabite opisno ime, kot je "Najemnina" ali "Zdravstveno zavarovanje".', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + 'bills_create_amount_min_holder' => 'Izberite najnižji in najvišji znesek za ta račun.', + 'bills_create_repeat_freq_holder' => 'Večina računov se ponavlja mesečno, vendar lahko tukaj nastavite drugačno pogostost.', + 'bills_create_skip_holder' => 'Če se račun ponavlja vsaka 2 tedna, je treba polje "preskoči" nastaviti na "1", da preskočite vsak drugi teden.', // rules index - 'rules_index_intro' => 'Firefly III allows you to manage rules, that will automagically be applied to any transaction you create or edit.', - 'rules_index_new_rule_group' => 'You can combine rules in groups for easier management.', - 'rules_index_new_rule' => 'Create as many rules as you like.', - 'rules_index_prio_buttons' => 'Order them any way you see fit.', - 'rules_index_test_buttons' => 'You can test your rules or apply them to existing transactions.', - 'rules_index_rule-triggers' => 'Rules have "triggers" and "actions" that you can order by drag-and-drop.', - 'rules_index_outro' => 'Be sure to check out the help pages using the (?) icon in the top right!', + 'rules_index_intro' => 'Firefly III vam omogoča upravljanje pravil, ki bodo samodejno uporabljena za vsako transakcijo, ki jo ustvarite ali uredite.', + 'rules_index_new_rule_group' => 'Za lažje upravljanje lahko pravila združite v skupine.', + 'rules_index_new_rule' => 'Ustvarite poljubno število pravil.', + 'rules_index_prio_buttons' => 'Razvrstite jih tako, kot se vam zdi primerno.', + 'rules_index_test_buttons' => 'Svoja pravila lahko preizkusite ali jih uporabite za obstoječe transakcije.', + 'rules_index_rule-triggers' => 'Pravila imajo "sprožilce" in "dejanja", ki jih lahko razvrstite tako, da jih povlečete in spustite.', + 'rules_index_outro' => 'Ne pozabite preveriti strani s pomočjo z ikono (?) zgoraj desno!', // create rule: - 'rules_create_mandatory' => 'Choose a descriptive title, and set when the rule should be fired.', - 'rules_create_ruletriggerholder' => 'Add as many triggers as you like, but remember that ALL triggers must match before any actions are fired.', - 'rules_create_test_rule_triggers' => 'Use this button to see which transactions would match your rule.', - 'rules_create_actions' => 'Set as many actions as you like.', + 'rules_create_mandatory' => 'Izberite opisni naslov in nastavite, kdaj naj se pravilo sproži.', + 'rules_create_ruletriggerholder' => 'Dodajte poljubno število sprožilcev, vendar ne pozabite, da se morajo VSI sprožilci ujemati, preden se sprožijo kakršna koli dejanja.', + 'rules_create_test_rule_triggers' => 'S tem gumbom si oglejte, katere transakcije ustrezajo vašemu pravilu.', + 'rules_create_actions' => 'Nastavite poljubno število dejanj.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,17 +175,16 @@ return [ * */ - // preferences - 'preferences_index_tabs' => 'More options are available behind these tabs.', + 'preferences_index_tabs' => 'Za temi zavihki je na voljo še več možnosti.', // currencies - 'currencies_index_intro' => 'Firefly III supports multiple currencies, which you can change on this page.', - 'currencies_index_default' => 'Firefly III has one default currency.', - 'currencies_index_buttons' => 'Use these buttons to change the default currency or enable other currencies.', + 'currencies_index_intro' => 'Firefly III podpira več valut, ki jih lahko spremenite na tej strani.', + 'currencies_index_default' => 'Firefly III ima eno privzeto valuto.', + 'currencies_index_buttons' => 'S temi gumbi spremenite privzeto valuto ali omogočite druge valute.', // create currency - 'currencies_create_code' => 'This code should be ISO compliant (Google it for your new currency).', + 'currencies_create_code' => 'Ta koda mora biti skladna z ISO (poguglajte jo za vašo novo valuto).', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/sl_SI/list.php b/resources/lang/sl_SI/list.php index 7b12dae49f..8f8bb46b96 100644 --- a/resources/lang/sl_SI/list.php +++ b/resources/lang/sl_SI/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Gumbi', - 'icon' => 'Ikona', - 'id' => 'ID', - 'create_date' => 'Ustvarjeno', - 'update_date' => 'Posodobljeno', - 'updated_at' => 'Posodobljeno', - 'balance_before' => 'Stanje prej', - 'balance_after' => 'Stanje potem', - 'name' => 'ime', - 'role' => 'Vloga', - 'currentBalance' => 'trenutno stanje', - 'linked_to_rules' => 'Ustrezna pravila', - 'active' => 'Aktiviran?', - 'percentage' => 'procent', - 'recurring_transaction' => 'Ponavljajoče transakcije', - 'next_due' => 'Naslednji rok', - 'transaction_type' => 'Vrsta', - 'lastActivity' => 'zadnja aktivnost', - 'balanceDiff' => 'Bilančna razlika', - 'other_meta_data' => 'Drugi meta podatki', - 'invited_at' => 'Povabljen na', - 'expires' => 'Vabilo poteče', - 'invited_by' => 'Povabil', - 'invite_link' => 'Povezava za povabilo', - 'account_type' => 'vrsta računa', - 'created_at' => 'ustvarjeno', - 'account' => 'račun', - 'external_url' => 'Zunanji URL', - 'matchingAmount' => 'znesek', - 'destination' => 'Ciljni račun', - 'source' => 'Izvor', - 'next_expected_match' => 'Naslenje pričakovano ujemanje', - 'automatch' => 'Samodejno poveži?', + 'buttons' => 'Gumbi', + 'icon' => 'Ikona', + 'id' => 'ID', + 'create_date' => 'Ustvarjeno', + 'update_date' => 'Posodobljeno', + 'updated_at' => 'Posodobljeno', + 'balance_before' => 'Stanje prej', + 'balance_after' => 'Stanje potem', + 'name' => 'ime', + 'role' => 'Vloga', + 'currentBalance' => 'Trenutno stanje', + 'linked_to_rules' => 'Ustrezna pravila', + 'active' => 'Aktiviran?', + 'percentage' => 'procent', + 'recurring_transaction' => 'Ponavljajoče transakcije', + 'next_due' => 'Naslednji rok', + 'transaction_type' => 'Vrsta', + 'lastActivity' => 'Zadnja aktivnost', + 'balanceDiff' => 'Bilančna razlika', + 'other_meta_data' => 'Drugi meta podatki', + 'invited_at' => 'Povabljen na', + 'expires' => 'Vabilo poteče', + 'invited_by' => 'Povabil', + 'invite_link' => 'Povezava za povabilo', + 'account_type' => 'Vrsta računa', + 'created_at' => 'Ustvarjeno', + 'account' => 'Račun', + 'external_url' => 'Zunanji URL', + 'matchingAmount' => 'Znesek', + 'destination' => 'Ciljni račun', + 'source' => 'Izvor', + 'next_expected_match' => 'Naslenje pričakovano ujemanje', + 'automatch' => 'Samodejno poveži?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,27 +79,26 @@ return [ * */ - - 'repeat_freq' => 'Ponovitev', + 'repeat_freq' => 'Ponovitve', 'description' => 'Opis', 'amount' => 'Znesek', - 'date' => 'datum', - 'interest_date' => 'datum obresti', - 'book_date' => 'datum knjiženja', - 'process_date' => 'datum izvedbe', - 'due_date' => 'rok plačila', + 'date' => 'Datum', + 'interest_date' => 'Datum obresti', + 'book_date' => 'Datum knjiženja', + 'process_date' => 'Datum obdelave', + 'due_date' => 'Datum zapadlosti', 'payment_date' => 'Datum plačila', - 'invoice_date' => 'datum računa', + 'invoice_date' => 'Datum računa', 'internal_reference' => 'Interna referenca', - 'notes' => 'Zabeležke', + 'notes' => 'Opombe', 'from' => 'Pošiljatelj', 'piggy_bank' => 'Hranilnik', 'to' => 'Prejemnik', - 'budget' => 'Budžet', + 'budget' => 'Proračun', 'category' => 'Kategorija', - 'bill' => 'Trajnik', - 'withdrawal' => 'Odhodek', - 'deposit' => 'Prihodek', + 'bill' => 'Račun', + 'withdrawal' => 'Odliv', + 'deposit' => 'Priliv', 'transfer' => 'Prenos', 'type' => 'Vrsta', 'completed' => 'Dokončano', @@ -118,11 +116,11 @@ return [ 'accounts_count' => 'Število računov', 'journals_count' => 'Število transakcij', 'attachments_count' => 'Število prilog', - 'bills_count' => 'Število trajnikov', + 'bills_count' => 'Število računov', 'categories_count' => 'Število kategorij', - 'budget_count' => 'Število budžetov', + 'budget_count' => 'Število proračunov', 'rule_and_groups_count' => 'Število pravil in skupin pravil', - 'tags_count' => 'Število značk', + 'tags_count' => 'Število oznak', 'tags' => 'Oznake', 'inward' => 'Interni opis', 'outward' => 'Eksterni opis', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Račun z bunq', 'file_name' => 'Ime datoteke', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Velikost datoteke', - 'file_type' => 'Vrsta datoteke', - 'attached_to' => 'Priložen', - 'file_exists' => 'Datoteka obstaja', - 'spectre_bank' => 'Banka', - 'spectre_last_use' => 'Zadnja prijava', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'iD plačila bunq', - 'repetitions' => 'Ponovitve', - 'title' => 'Naslov', - 'transaction_s' => 'Transakcije', - 'field' => 'Polje', - 'value' => 'Vrednost', - 'interest' => 'Obresti', - 'interest_period' => 'Obdobje obresti', - 'liability_type' => 'Vrsta obveznost', - 'liability_direction' => 'Odgovornost in/out', - 'end_date' => 'Končni datum', - 'payment_info' => 'Informacije o plačilu', - 'expected_info' => 'Naslednja pričakovana transakcija', - 'start_date' => 'Začetni datum', - 'trigger' => 'Sprožilec', - 'response' => 'Odziv', - 'delivery' => 'Dostava', - 'url' => 'URL', - 'secret' => 'Skrivnost', - + 'file_size' => 'Velikost datoteke', + 'file_type' => 'Vrsta datoteke', + 'attached_to' => 'Priloženo k', + 'file_exists' => 'Datoteka obstaja', + 'spectre_bank' => 'Banka', + 'spectre_last_use' => 'Zadnja prijava', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'iD plačila bunq', + 'repetitions' => 'Ponovitve', + 'title' => 'Naslov', + 'transaction_s' => 'Transakcije', + 'field' => 'Polje', + 'value' => 'Vrednost', + 'interest' => 'Obresti', + 'interest_period' => 'Obdobje obresti', + 'liability_type' => 'Vrsta obveznost', + 'liability_direction' => 'Odgovornost not/ven', + 'end_date' => 'Končni datum', + 'payment_info' => 'Informacije o plačilu', + 'expected_info' => 'Naslednja pričakovana transakcija', + 'start_date' => 'Začetni datum', + 'trigger' => 'Sprožilec', + 'response' => 'Odziv', + 'delivery' => 'Dostava', + 'url' => 'URL', + 'secret' => 'Skrivnost', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/sl_SI/pagination.php b/resources/lang/sl_SI/pagination.php index d1746a5c06..e64d176faa 100644 --- a/resources/lang/sl_SI/pagination.php +++ b/resources/lang/sl_SI/pagination.php @@ -31,10 +31,9 @@ * */ - declare(strict_types=1); return [ - 'previous' => '« Prejšnja stran', - 'next' => 'Naslednja stran »', + 'previous' => '« Prejšnja', + 'next' => 'Naslednja »', ]; diff --git a/resources/lang/sl_SI/passwords.php b/resources/lang/sl_SI/passwords.php index ccda87860f..b9718ed67b 100644 --- a/resources/lang/sl_SI/passwords.php +++ b/resources/lang/sl_SI/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -40,5 +39,5 @@ return [ 'token' => 'Žeton za ponastavitev gesla ni veljaven.', 'sent' => 'Poslali smo vam povezavo za ponastavitev gesla!', 'reset' => 'Vaše geslo je bilo ponastavljeno!', - 'blocked' => 'Dober poskus...', + 'blocked' => 'Ampak dober poskus.', ]; diff --git a/resources/lang/sl_SI/rules.php b/resources/lang/sl_SI/rules.php index 4ddb228727..35ef72e038 100644 --- a/resources/lang/sl_SI/rules.php +++ b/resources/lang/sl_SI/rules.php @@ -1,6 +1,5 @@ 'Ta transakcija ni imela kategorije, zato je ni mogoče odstraniti', 'journal_already_no_notes' => 'Ta transakcija ni imela opomb, zato jih ni mogoče odstraniti', 'journal_not_found' => 'Firefly III ne najde zahtevane transakcije', - 'split_group' => 'Firefly III ne more izvesti tega dejanja na transakciji z več delitvami', - 'is_already_withdrawal' => 'Ta transakcija je že dvig', - 'is_already_deposit' => 'Ta transakcija je že depozit', + 'split_group' => 'Firefly III ne more izvesti tega dejanja na transakciji z več razdelitvami', + 'is_already_withdrawal' => 'Ta transakcija je že odliv', + 'is_already_deposit' => 'Ta transakcija je že priliv', 'is_already_transfer' => 'Ta transakcija je že prenos', 'is_not_transfer' => 'Ta transakcija ni prenos', - 'complex_error' => 'Nekaj ​​zapletenega je šlo narobe. Oprosti za to. Prosimo, preglejte dnevnike Firefly III', + 'complex_error' => "Nekaj \u{200b}\u{200b}zapletenega je šlo narobe. Oprostite za to. Prosimo, preglejte dnevnike Firefly III", 'no_valid_opposing' => 'Pretvorba ni uspela, ker ni veljavnega računa z imenom ":account"', 'new_notes_empty' => 'Opombe, ki jih želite nastaviti, so prazne', - 'unsupported_transaction_type_withdrawal' => 'Firefly III ne more pretvoriti ":type" v dvig', - 'unsupported_transaction_type_deposit' => 'Firefly III ne more pretvoriti ":type" v depozit', + 'unsupported_transaction_type_withdrawal' => 'Firefly III ne more pretvoriti ":type" v odliv', + 'unsupported_transaction_type_deposit' => 'Firefly III ne more pretvoriti ":type" v priliv', 'unsupported_transaction_type_transfer' => 'Firefly III ne more pretvoriti ":type" v prenos', 'already_has_source_asset' => 'Ta transakcija že ima ":name" kot izvorni račun sredstva', 'already_has_destination_asset' => 'Ta transakcija že ima »:name« kot ciljni račun sredstev', 'already_has_destination' => 'Ta transakcija že ima ":name" kot ciljni račun', 'already_has_source' => 'Ta transakcija že ima ":name" kot izvorni račun', 'already_linked_to_subscription' => 'Transakcija je že povezana z naročnino ":name"', - 'already_linked_to_category' => 'The transaction is already linked to category ":name"', - 'already_linked_to_budget' => 'The transaction is already linked to budget ":name"', + 'already_linked_to_category' => 'Transakcija je že povezana s kategorijo ":name"', + 'already_linked_to_budget' => 'Transakcija je že povezana s proračunom ":name"', 'cannot_find_subscription' => 'Firefly III ne najde naročnine ":name"', 'no_notes_to_move' => 'Transakcija nima nobenih opomb, ki bi jih bilo treba premakniti v polje opisa', 'no_tags_to_remove' => 'Transakcija nima oznak za odstranitev', + 'not_withdrawal' => 'Transakcija ni odliv', + 'not_deposit' => 'Transakcija ni priliv', 'cannot_find_tag' => 'Firefly III ne najde oznake ":tag"', 'cannot_find_asset' => 'Firefly III ne najde računa sredstev ":name"', 'cannot_find_accounts' => 'Firefly III ne najde izvornega ali ciljnega računa', diff --git a/resources/lang/sl_SI/validation.php b/resources/lang/sl_SI/validation.php index a712592687..ef7758d4c4 100644 --- a/resources/lang/sl_SI/validation.php +++ b/resources/lang/sl_SI/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'To ni veljaven IBAN.', - 'zero_or_more' => 'The value cannot be negative.', - 'date_or_time' => 'The value must be a valid date or time value (ISO 8601).', - 'source_equals_destination' => 'The source account equals the destination account.', - 'unique_account_number_for_user' => 'Kaže, da je ta številka računa že v uporabi.', - 'unique_iban_for_user' => 'It looks like this IBAN is already in use.', - 'deleted_user' => 'Iz varnostnih razlogov ne morete ustvariti uporabnika s takim e-poštnim naslovom.', - 'rule_trigger_value' => 'Ta vrednost je neveljavna za izbrani sprožilec.', - 'rule_action_value' => 'This value is invalid for the selected action.', - 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', - 'file_attached' => 'Successfully uploaded file ":name".', - 'must_exist' => 'The ID in field :attribute does not exist in the database.', - 'all_accounts_equal' => 'All accounts in this field must be equal.', - 'group_title_mandatory' => 'A group title is mandatory when there is more than one transaction.', - 'transaction_types_equal' => 'All splits must be of the same type.', - 'invalid_transaction_type' => 'Invalid transaction type.', - 'invalid_selection' => 'Your selection is invalid.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Need at least one transaction.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Need at least one repetition.', - 'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.', - 'require_currency_info' => 'The content of this field is invalid without currency information.', - 'not_transfer_account' => 'This account is not an account that can be used for transfers.', - 'require_currency_amount' => 'Vsebina tega polja ni veljavna brez podatkov o tujih zneskih.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Transaction description should not equal global description.', - 'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.', - 'file_too_large' => 'File ":name" is too large.', - 'belongs_to_user' => 'The value of :attribute is unknown.', - 'accepted' => 'The :attribute must be accepted.', - 'bic' => 'This is not a valid BIC.', - 'at_least_one_trigger' => 'Rule must have at least one trigger.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'Rule must have at least one action.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'This is not valid base64 encoded data.', - 'model_id_invalid' => 'The given ID seems invalid for this model.', - 'less' => ':attribute must be less than 10,000,000', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'date_after' => 'The start date must be before the end date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'unique_for_user' => 'There already is an entry with this :attribute.', - 'before' => 'The :attribute must be a date before :date.', - 'unique_object_for_user' => 'This name is already in use.', - 'unique_account_for_user' => 'This account name is already in use.', + 'bad_type_source' => 'Na podlagi tega izvornega računa Firefly III ne more določiti vrste transakcije.', + 'bad_type_destination' => 'Na podlagi tega ciljnega računa Firefly III ne more določiti vrste transakcije.', + 'missing_where' => 'Matriki manjka člen "kjer"', + 'missing_update' => 'Matriki manjka člen "posodobi"', + 'invalid_where_key' => 'JSON vsebuje neveljaven ključ za člen "kjer"', + 'invalid_update_key' => 'JSON vsebuje neveljaven ključ za člen "posodobi"', + 'invalid_query_data' => 'V polju %s:%s vaše poizvedbe so neveljavni podatki.', + 'invalid_query_account_type' => 'Vaša poizvedba vsebuje račune različnih vrst, kar ni dovoljeno.', + 'invalid_query_currency' => 'Vaša poizvedba vsebuje račune, ki imajo različne nastavitve valute, kar ni dovoljeno.', + 'iban' => 'To ni veljaven IBAN.', + 'zero_or_more' => 'Vrednost ne more biti negativna.', + 'more_than_zero' => 'Znesek mora biti večji od nič.', + 'more_than_zero_correct' => 'Vrednost mora biti nič ali več.', + 'no_asset_account' => 'To ni račun sredstev.', + 'date_or_time' => 'Vrednost mora biti veljavna vrednost datuma ali časa (ISO 8601).', + 'source_equals_destination' => 'Izvorni račun je enak ciljnemu računu.', + 'unique_account_number_for_user' => 'Kaže, da je ta številka računa že v uporabi.', + 'unique_iban_for_user' => 'Videti je, da je ta IBAN že v uporabi.', + 'reconciled_forbidden_field' => 'Ta transakcija je že usklajena, ne morete spremeniti ":field"', + 'deleted_user' => 'Iz varnostnih razlogov ne morete ustvariti uporabnika s takim e-poštnim naslovom.', + 'rule_trigger_value' => 'Ta vrednost je neveljavna za izbrani sprožilec.', + 'rule_action_value' => 'Ta vrednost ni veljavna za izbrano dejanje.', + 'file_already_attached' => 'Naložena datoteka ":name" je že priložena temu predmetu.', + 'file_attached' => 'Datoteka ":name" je bila uspešno naložena.', + 'must_exist' => 'ID v polju :attribute ne obstaja v bazi podatkov.', + 'all_accounts_equal' => 'Vsi računi v tem polju morajo biti enaki.', + 'group_title_mandatory' => 'Naslov skupine je obvezen, če obstaja več kot ena transakcija.', + 'transaction_types_equal' => 'Vse razdelitve morajo biti iste vrste.', + 'invalid_transaction_type' => 'Neveljavna vrsta transakcije.', + 'invalid_selection' => 'Vaša izbira je neveljavna.', + 'belongs_user' => 'Ta vrednost je povezana z objektom, za katerega se zdi, da ne obstaja.', + 'belongs_user_or_user_group' => 'Ta vrednost je povezana z objektom, za katerega se zdi, da ne obstaja v vaši trenutni finančni upravi.', + 'at_least_one_transaction' => 'Potrebujete vsaj eno transakcijo.', + 'recurring_transaction_id' => 'Potrebujete vsaj eno transakcijo.', + 'need_id_to_match' => 'Ta vnos morate predložiti z ID-jem za API, da ga lahko povežete.', + 'too_many_unmatched' => 'Preveč predloženih transakcij ni mogoče povezati z njihovimi vnosi v bazo podatkov. Prepričajte se, da imajo obstoječi vnosi veljaven ID.', + 'id_does_not_match' => 'Poslani ID #:id se ne ujema s pričakovanim ID-jem. Prepričajte se, da se ujema s poljem ali ga izpustite.', + 'at_least_one_repetition' => 'Potrebna je vsaj ena ponovitev.', + 'require_repeat_until' => 'Zahtevajte bodisi število ponovitev bodisi končni datum (ponavljaj_do). Ne oboje.', + 'require_currency_info' => 'Vsebina tega polja je neveljavna brez informacij o valuti.', + 'not_transfer_account' => 'Ta račun ni račun, ki ga je mogoče uporabiti za nakazila.', + 'require_currency_amount' => 'Vsebina tega polja ni veljavna brez podatkov o tujih zneskih.', + 'require_foreign_currency' => 'To polje zahteva številko', + 'require_foreign_dest' => 'Vrednost tega polja se mora ujemati z valuto ciljnega računa.', + 'require_foreign_src' => 'Vrednost tega polja se mora ujemati z valuto izvornega računa.', + 'equal_description' => 'Opis transakcije ne sme biti enak globalnemu opisu.', + 'file_invalid_mime' => 'Datoteka ":name" je vrste ":mime", ki ni sprejeta kot novo naložena.', + 'file_too_large' => 'Datoteka ":name" je prevelika.', + 'belongs_to_user' => 'Vrednost :attribute ni znana.', + 'accepted' => ':attribute mora biti sprejet.', + 'bic' => 'To ni veljaven BIC.', + 'at_least_one_trigger' => 'Pravilo mora imeti vsaj en sprožilec.', + 'at_least_one_active_trigger' => 'Pravilo mora imeti vsaj en aktiven sprožilec.', + 'at_least_one_action' => 'Pravilo mora imeti vsaj eno dejanje.', + 'at_least_one_active_action' => 'Pravilo mora imeti vsaj eno aktivno dejanje.', + 'base64' => 'To niso veljavni base64 kodirani podatki.', + 'model_id_invalid' => 'Dani ID se zdi neveljaven za ta model.', + 'less' => ':attribute mora biti manjši od 10.000.000', + 'active_url' => ':attribute ni veljaven URL.', + 'after' => ':attribute mora biti datum po :date.', + 'date_after' => 'Začetni datum mora biti pred končnim datumom.', + 'alpha' => ':attribute lahko vsebuje samo črke.', + 'alpha_dash' => ':attribute lahko vsebuje samo črke, številke in črtice.', + 'alpha_num' => ':attribute lahko vsebuje samo črke in številke.', + 'array' => ':attribute naj bo zbirka.', + 'unique_for_user' => 'Že obstaja vnos s tem :attribute.', + 'before' => ':attribute mora biti datum pred :date.', + 'unique_object_for_user' => 'To ime je že v uporabi.', + 'unique_account_for_user' => 'To ime računa je že v uporabi.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute mora biti med :min in :max.', + 'between.file' => ':attribute mora biti med :min in :max kilobajti.', + 'between.string' => ':attribute mora biti med znaki :min in :max.', + 'between.array' => ':attribute mora imeti med :min in :max elementi.', + 'boolean' => ':attribute polje mora biti pravilno ali napačno.', + 'confirmed' => 'Potrditev :attribute se ne ujema.', + 'date' => ':attribute ni veljaven datum.', + 'date_format' => ':attribute se ne ujema z obliko :format.', + 'different' => ':attribute in :other morata biti različna.', + 'digits' => ':attribute mora imeti :digits števil.', + 'digits_between' => ':attribute mora biti med :min in :max števkami.', + 'email' => ':attribute mora biti veljaven e-naslov.', + 'filled' => 'Polje :attribute je obvezno.', + 'exists' => 'Izbran :attribute je neveljaven.', + 'image' => ':attribute mora biti slika.', + 'in' => 'Izbran :attribute ni veljaven.', + 'integer' => ':attribute mora biti celo število.', + 'ip' => ':attribute mora biti veljaven IP naslov.', + 'json' => ':attribute mora biti veljaven JSON niz.', + 'max.numeric' => ':attribute ne sme biti večji od :max.', + 'max.file' => ':attribute ne sme biti večji od :max kilobajtov.', + 'max.string' => ':attribute ne sme biti večja od :max znakov.', + 'max.array' => ':attribute ne sme imeti več kot :max elementov.', + 'mimes' => ':attribute mora biti datoteka tipa: :values.', + 'min.numeric' => ':attribute mora biti najmanj :min.', + 'lte.numeric' => ':attribute mora biti manj ali enak kot :value.', + 'min.file' => ':attribute mora biti najmanj :min kilobajtov.', + 'min.string' => ':attribute mora biti najmanj :min znakov.', + 'min.array' => ':attribute mora imeti najmanj :min elementov.', + 'not_in' => 'Izbran :attribute ni veljaven.', + 'numeric' => ':attribute mora biti število.', + 'scientific_notation' => ':attribute ne more uporabljati znanstvene notacije.', + 'numeric_native' => 'Domači znesek mora biti število.', + 'numeric_destination' => 'Ciljni znesek mora biti številka.', + 'numeric_source' => 'Izvorni znesek mora biti številka.', + 'regex' => ':attribute oblika ni veljavna.', + 'required' => 'Polje :attribute je obvezno.', + 'required_if' => ':attribute polje je obvezno, če :other je :value.', + 'required_unless' => ':attribute polje je zahtevano, razen če je :other v :values.', + 'required_with' => ':attribute polje je obvezno ko je prisotno :values.', + 'required_with_all' => ':attribute polje je obvezno ko je prisotno :values.', + 'required_without' => ':attribute polje je obvezno, ko :values ni prisotno.', + 'required_without_all' => 'Polje :attribute je obvezno, če ni prisotna nobena od :values.', + 'same' => ':attribute in :other se morata ujemati.', + 'size.numeric' => ':attribute mora biti :size.', + 'amount_min_over_max' => 'Najmanjši znesek ne sme biti večji od največjega zneska.', + 'size.file' => ':attribute mora biti :size kilobajtov.', + 'size.string' => ':attribute mora vsebovati znake :size.', + 'size.array' => ':attribute mora vsebovati elemente :size.', + 'unique' => ':attribute je že zaseden.', + 'string' => ':attribute mora biti niz.', + 'url' => 'Format :attribute je neveljaven.', + 'timezone' => ':attribute mora biti veljavno območje.', + '2fa_code' => 'Polje :attribute ni veljavno.', + 'dimensions' => ':attribute ima neveljavne dimenzije slike.', + 'distinct' => 'Polje :attribute ima podvojeno vrednost.', + 'file' => ':attribute mora biti datoteka.', + 'in_array' => 'Polje :attribute ne obstaja v :other.', + 'present' => 'Polje :attribute mora biti prisotno.', + 'amount_zero' => 'Skupni znesek ne more biti nič.', + 'current_target_amount' => 'Trenutni znesek mora biti manjši od ciljnega zneska.', + 'unique_piggy_bank_for_user' => 'Ime hranilnika mora biti edinstveno.', + 'unique_object_group' => 'Ime skupine mora biti edinstveno', + 'starts_with' => 'Vrednost se mora začeti s :values.', + 'unique_webhook' => 'Webhook s to kombinacijo URL-ja, sprožilca, odgovora in dostave že imate.', + 'unique_existing_webhook' => 'Že imate drug webhook s to kombinacijo URL-ja, sprožilca, odziva in dostave.', + 'same_account_type' => 'Oba računa morata biti iste vrste računa', + 'same_account_currency' => 'Oba računa morata imeti isto nastavitev valute', - 'between.numeric' => 'The :attribute must be between :min and :max.', - 'between.file' => 'The :attribute must be between :min and :max kilobytes.', - 'between.string' => 'The :attribute must be between :min and :max characters.', - 'between.array' => 'The :attribute must have between :min and :max items.', - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'email' => 'The :attribute must be a valid email address.', - 'filled' => 'The :attribute field is required.', - 'exists' => 'The selected :attribute is invalid.', - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'json' => 'The :attribute must be a valid JSON string.', - 'max.numeric' => 'The :attribute may not be greater than :max.', - 'max.file' => 'The :attribute may not be greater than :max kilobytes.', - 'max.string' => 'The :attribute may not be greater than :max characters.', - 'max.array' => 'The :attribute may not have more than :max items.', - 'mimes' => 'The :attribute must be a file of type: :values.', - 'min.numeric' => 'The :attribute must be at least :min.', - 'lte.numeric' => 'The :attribute must be less than or equal :value.', - 'min.file' => 'The :attribute must be at least :min kilobytes.', - 'min.string' => 'The :attribute must be at least :min characters.', - 'min.array' => 'The :attribute must have at least :min items.', - 'not_in' => 'The selected :attribute is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'numeric_native' => 'The native amount must be a number.', - 'numeric_destination' => 'The destination amount must be a number.', - 'numeric_source' => 'The source amount must be a number.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values is present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'size.numeric' => 'The :attribute must be :size.', - 'amount_min_over_max' => 'The minimum amount cannot be larger than the maximum amount.', - 'size.file' => 'The :attribute must be :size kilobytes.', - 'size.string' => 'The :attribute must be :size characters.', - 'size.array' => 'The :attribute must contain :size items.', - 'unique' => 'The :attribute has already been taken.', - 'string' => 'The :attribute must be a string.', - 'url' => 'The :attribute format is invalid.', - 'timezone' => 'The :attribute must be a valid zone.', - '2fa_code' => 'The :attribute field is invalid.', - 'dimensions' => 'The :attribute has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'file' => 'The :attribute must be a file.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'present' => 'The :attribute field must be present.', - 'amount_zero' => 'The total amount cannot be zero.', - 'current_target_amount' => 'The current amount must be less than the target amount.', - 'unique_piggy_bank_for_user' => 'The name of the piggy bank must be unique.', - 'unique_object_group' => 'The group name must be unique', - 'starts_with' => 'The value must start with :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Both accounts must be of the same account type', - 'same_account_currency' => 'Both accounts must have the same currency setting', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,69 +195,68 @@ return [ * */ - - 'secure_password' => 'This is not a secure password. Please try again. For more information, visit https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.', - 'valid_recurrence_rep_moment' => 'Invalid repetition moment for this type of repetition.', - 'invalid_account_info' => 'Invalid account information.', - 'attributes' => [ - 'email' => 'email naslov', - 'description' => 'description', - 'amount' => 'amount', - 'transactions.*.amount' => 'transaction amount', + 'secure_password' => 'To ni varno geslo. Prosim poskusite ponovno. Za več informacij obiščite https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Neveljavna vrsta ponavljanja za ponavljajoče se transakcije.', + 'valid_recurrence_rep_moment' => 'Neveljaven trenutek ponovitve za to vrsto ponovitve.', + 'invalid_account_info' => 'Neveljavni podatki o računu.', + 'attributes' => [ + 'email' => 'e-poštni naslov', + 'description' => 'opis', + 'amount' => 'znesek', + 'transactions.*.amount' => 'znesek transakcije', 'name' => 'ime', 'piggy_bank_id' => 'ID številka hranilnice', 'targetamount' => 'ciljni znesek', - 'opening_balance_date' => 'opening balance date', - 'opening_balance' => 'opening balance', + 'opening_balance_date' => 'datum začetnega stanja', + 'opening_balance' => 'začetno stanje', 'match' => 'ujemanje', 'amount_min' => 'najmanjša vrednost', 'amount_max' => 'največja vrednost', 'title' => 'naslov', 'tag' => 'oznaka', - 'transaction_description' => 'transaction description', - 'rule-action-value.1' => 'rule action value #1', - 'rule-action-value.2' => 'rule action value #2', - 'rule-action-value.3' => 'rule action value #3', - 'rule-action-value.4' => 'rule action value #4', - 'rule-action-value.5' => 'rule action value #5', + 'transaction_description' => 'opis transakcije', + 'rule-action-value.1' => 'vrednost pravila ukrepanja #1', + 'rule-action-value.2' => 'vrednost pravila ukrepanja #2', + 'rule-action-value.3' => 'vrednost pravila ukrepanja #3', + 'rule-action-value.4' => 'vrednost pravila ukrepanja #4', + 'rule-action-value.5' => 'vrednost pravila ukrepanja #5', 'rule-action.1' => 'pravilo ukrepanja #1', 'rule-action.2' => 'pravilo ukrepanja #2', 'rule-action.3' => 'pravilo ukrepanja #3', 'rule-action.4' => 'pravilo ukrepanja #4', 'rule-action.5' => 'pravilo ukrepanja #5', - 'rule-trigger-value.1' => 'rule trigger value #1', - 'rule-trigger-value.2' => 'rule trigger value #2', - 'rule-trigger-value.3' => 'rule trigger value #3', - 'rule-trigger-value.4' => 'rule trigger value #4', - 'rule-trigger-value.5' => 'rule trigger value #5', - 'rule-trigger.1' => 'rule trigger #1', - 'rule-trigger.2' => 'rule trigger #2', - 'rule-trigger.3' => 'rule trigger #3', - 'rule-trigger.4' => 'rule trigger #4', - 'rule-trigger.5' => 'rule trigger #5', + 'rule-trigger-value.1' => 'vrednost pravila sprožitve #1', + 'rule-trigger-value.2' => 'vrednost pravila sprožitve #2', + 'rule-trigger-value.3' => 'vrednost pravila sprožitve #3', + 'rule-trigger-value.4' => 'vrednost pravila sprožitve #4', + 'rule-trigger-value.5' => 'vrednost pravila sprožitve #5', + 'rule-trigger.1' => 'pravilo sprožilca #1', + 'rule-trigger.2' => 'pravilo sprožilca #2', + 'rule-trigger.3' => 'pravilo sprožilca #3', + 'rule-trigger.4' => 'pravilo sprožilca #4', + 'rule-trigger.5' => 'pravilo sprožilca #5', ], // validation of accounts: - 'withdrawal_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'withdrawal_source_need_data' => 'Za nadaljevanje morate pridobiti veljaven ID izvornega računa in/ali veljavno ime izvornega računa.', + 'withdrawal_source_bad_data' => '[a] Pri iskanju ID-ja ":id" ali imena ":name" ni bilo mogoče najti veljavnega izvornega računa.', + 'withdrawal_dest_need_data' => '[a] Za nadaljevanje potrebujete veljaven ID ciljnega računa in/ali veljavno ime ciljnega računa.', + 'withdrawal_dest_bad_data' => 'Pri iskanju ID-ja ":id" ali imena ":name" ni bilo mogoče najti veljavnega ciljnega računa.', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'Ta IBAN ciljnega računa že uporablja račun sredstev ali obveznosti in ga ni mogoče uporabiti kot cilj odliva.', + 'deposit_src_iban_exists' => 'Ta izvorni račun IBAN že uporablja račun sredstev ali obveznosti in ga ni mogoče uporabiti kot vir priliva.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Pri iskanju ID-ja ":id" ali imena ":name" ni bilo mogoče najti veljavnega računa za usklajevanje.', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Ni bilo mogoče najti veljavnega izvornega računa pri iskanju ID-ja ":id" ali imena ":name".', - 'deposit_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', + 'deposit_source_need_data' => 'Za nadaljevanje morate pridobiti veljaven ID izvornega računa in/ali veljavno ime izvornega računa.', + 'deposit_source_bad_data' => '[b] Ni bilo mogoče najti veljavnega izvornega računa pri iskanju ID-ja ":id" ali imena ":name".', + 'deposit_dest_need_data' => '[b] Za nadaljevanje potrebujete veljaven ID ciljnega računa in/ali veljavno ime ciljnega računa.', + 'deposit_dest_bad_data' => 'Pri iskanju ID-ja ":id" ali imena ":name" ni bilo mogoče najti veljavnega ciljnega računa.', + 'deposit_dest_wrong_type' => 'Predložen ciljni račun ni prave vrste.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,37 +267,37 @@ return [ * */ + 'transfer_source_need_data' => 'Za nadaljevanje morate pridobiti veljaven ID izvornega računa in/ali veljavno ime izvornega računa.', + 'transfer_source_bad_data' => '[c] Ni bilo mogoče najti veljavnega izvornega računa pri iskanju ID-ja ":id" ali imena ":name".', + 'transfer_dest_need_data' => '[c] Za nadaljevanje potrebujete veljaven ID ciljnega računa in/ali veljavno ime ciljnega računa.', + 'transfer_dest_bad_data' => 'Pri iskanju ID-ja ":id" ali imena ":name" ni bilo mogoče najti veljavnega ciljnega računa.', + 'need_id_in_edit' => 'Vsaka razdelitev mora imeti transaction_journal_id (bodisi veljaven ID ali 0).', - 'transfer_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'need_id_in_edit' => 'Each split must have transaction_journal_id (either valid ID or 0).', + 'ob_source_need_data' => 'Za nadaljevanje morate pridobiti veljaven ID izvornega računa in/ali veljavno ime izvornega računa.', + 'lc_source_need_data' => 'Za nadaljevanje morate pridobiti veljaven ID izvornega računa.', + 'ob_dest_need_data' => '[d] Za nadaljevanje potrebujete veljaven ID ciljnega računa in/ali veljavno ime ciljnega računa.', + 'ob_dest_bad_data' => 'Pri iskanju ID-ja ":id" ali imena ":name" ni bilo mogoče najti veljavnega ciljnega računa.', + 'reconciliation_either_account' => 'Če želite predložiti uskladitev, morate predložiti izvorni ali ciljni račun. Ne oboje, ne nobeno.', - 'ob_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Tega računa ne morete uporabiti kot izvorni račun.', + 'generic_invalid_destination' => 'Tega računa ne morete uporabiti kot ciljni račun.', - 'generic_invalid_source' => 'You can\'t use this account as the source account.', - 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', + 'generic_no_source' => 'Predložiti morate podatke o izvornem računu ali predložiti ID dnevnika transakcij.', + 'generic_no_destination' => 'Predložiti morate podatke o ciljnem računu ali predložiti ID dnevnika transakcij.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', + 'gte.numeric' => ':attribute mora biti večji ali enak :value.', + 'gt.numeric' => ':attribute mora biti večji od :value.', + 'gte.file' => ':attribute mora biti večji ali enak :value kilobajtov.', + 'gte.string' => ':attribute mora biti večji ali enak znakom :value.', + 'gte.array' => ':attribute mora imeti :value znakov ali več.', - 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', - 'gt.numeric' => 'The :attribute must be greater than :value.', - 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', - 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', - 'gte.array' => 'The :attribute must have :value items or more.', + 'amount_required_for_auto_budget' => 'Znesek je zahtevani podatek.', + 'auto_budget_amount_positive' => 'Znesek mora biti večji od nič.', - 'amount_required_for_auto_budget' => 'The amount is required.', - 'auto_budget_amount_positive' => 'The amount must be more than zero.', - 'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.', + 'auto_budget_period_mandatory' => 'Obdobje samodejnega proračuna je obvezno polje.', // no access to administration: - 'no_access_user_group' => 'You do not have the correct access rights for this administration.', + 'no_access_user_group' => 'Nimate ustreznih pravic dostopa do te administracije.', ]; /* diff --git a/resources/lang/sv_SE/api.php b/resources/lang/sv_SE/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/sv_SE/api.php +++ b/resources/lang/sv_SE/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/sv_SE/auth.php b/resources/lang/sv_SE/auth.php index 20a2487a37..bd7957839c 100644 --- a/resources/lang/sv_SE/auth.php +++ b/resources/lang/sv_SE/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Inloggningsuppgifterna kunde inte hittas.', 'throttle' => 'För många inloggningsförsök. Vänligen försök igen om :seconds sekunder.', diff --git a/resources/lang/sv_SE/breadcrumbs.php b/resources/lang/sv_SE/breadcrumbs.php index 85a785bba8..5c59eba2e8 100644 --- a/resources/lang/sv_SE/breadcrumbs.php +++ b/resources/lang/sv_SE/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Hem', - 'budgets' => 'Budgetar', - 'subscriptions' => 'Prenumerationer', - 'transactions' => 'Transaktioner', - 'title_expenses' => 'Utgifter', - 'title_withdrawal' => 'Uttag', - 'title_revenue' => 'Intäkter / inkomst', - 'title_deposit' => 'Intäkter / inkomst', - 'title_transfer' => 'Överföringar', - 'title_transfers' => 'Överföringar', - 'edit_currency' => 'Redigera valuta ":name"', - 'delete_currency' => 'Ta bort valuta ":name"', - 'newPiggyBank' => 'Skapa en ny spargris', - 'edit_piggyBank' => 'Redigera spargris ”:name”', - 'preferences' => 'Inställningar', - 'profile' => 'Profil', - 'accounts' => 'Konton', - 'changePassword' => 'Ändra ditt lösenord', - 'change_email' => 'Ändra din e-postadress', - 'bills' => 'Räkningar', - 'newBill' => 'Ny räkning', - 'edit_bill' => 'Redigera räkningen ":name"', - 'delete_bill' => 'Ta bort räkningen ":name"', - 'reports' => 'Rapporter', - 'search_result' => 'Sökresultat för ":query"', - 'withdrawal_list' => 'Utgifter', - 'Withdrawal_list' => 'Utgifter', - 'deposit_list' => 'Intäkter, inkomster och insättningar', - 'transfer_list' => 'Överföringar', - 'transfers_list' => 'Överföringar', + 'home' => 'Hem', + 'budgets' => 'Budgetar', + 'subscriptions' => 'Prenumerationer', + 'transactions' => 'Transaktioner', + 'title_expenses' => 'Utgifter', + 'title_withdrawal' => 'Uttag', + 'title_revenue' => 'Intäkter / inkomst', + 'title_deposit' => 'Intäkter / inkomst', + 'title_transfer' => 'Överföringar', + 'title_transfers' => 'Överföringar', + 'edit_currency' => 'Redigera valuta ":name"', + 'delete_currency' => 'Ta bort valuta ":name"', + 'newPiggyBank' => 'Skapa en ny spargris', + 'edit_piggyBank' => 'Redigera spargris ”:name”', + 'preferences' => 'Inställningar', + 'profile' => 'Profil', + 'accounts' => 'Konton', + 'changePassword' => 'Ändra ditt lösenord', + 'change_email' => 'Ändra din e-postadress', + 'bills' => 'Räkningar', + 'newBill' => 'Ny räkning', + 'edit_bill' => 'Redigera räkningen ":name"', + 'delete_bill' => 'Ta bort räkningen ":name"', + 'reports' => 'Rapporter', + 'search_result' => 'Sökresultat för ":query"', + 'withdrawal_list' => 'Utgifter', + 'Withdrawal_list' => 'Utgifter', + 'deposit_list' => 'Intäkter, inkomster och insättningar', + 'transfer_list' => 'Överföringar', + 'transfers_list' => 'Överföringar', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Avstämningar', 'create_withdrawal' => 'Skapa nytt uttag', 'create_deposit' => 'Skapa ny insättning', diff --git a/resources/lang/sv_SE/components.php b/resources/lang/sv_SE/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/sv_SE/components.php +++ b/resources/lang/sv_SE/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/sv_SE/config.php b/resources/lang/sv_SE/config.php index e6f46dd6eb..7cdae8f31e 100644 --- a/resources/lang/sv_SE/config.php +++ b/resources/lang/sv_SE/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'sv', - 'locale' => 'sv, Swedish, sv_SE.utf8, sv_SE.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'sv', + 'locale' => 'sv, Swedish, sv_SE.utf8, sv_SE.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'MMMM DD, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, YYYY', + 'month_and_day_fns' => 'd MMMM y', + 'month_and_day_js' => 'MMMM DD, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'MMMM DD YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM DD YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'DD MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'DD MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Vecka' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Vecka' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'kvartal'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Måndag', - 'dow_2' => 'Tisdag', - 'dow_3' => 'Onsdag', - 'dow_4' => 'Torsdag', - 'dow_5' => 'Fredag', - 'dow_6' => 'Lördag', - 'dow_7' => 'Söndag', + 'quarter_fns' => "'kvartal'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Måndag', + 'dow_2' => 'Tisdag', + 'dow_3' => 'Onsdag', + 'dow_4' => 'Torsdag', + 'dow_5' => 'Fredag', + 'dow_6' => 'Lördag', + 'dow_7' => 'Söndag', ]; /* diff --git a/resources/lang/sv_SE/demo.php b/resources/lang/sv_SE/demo.php index ecec0a5392..3bd3de6718 100644 --- a/resources/lang/sv_SE/demo.php +++ b/resources/lang/sv_SE/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/sv_SE/email.php b/resources/lang/sv_SE/email.php index 384a97a391..6d5bf84c9a 100644 --- a/resources/lang/sv_SE/email.php +++ b/resources/lang/sv_SE/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Ett testmeddelande från din Firefly III-installation', 'admin_test_body' => 'Detta är ett testmeddelande från din Firefly III-instans. Det skickades till :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,9 +55,8 @@ return [ * */ - // invite - 'invitation_created_subject' => 'An invitation has been created', + 'invitation_created_subject' => 'En inbjudan har skapats', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', 'invite_user_subject' => 'You\'ve been invited to create a Firefly III account.', 'invitation_introduction' => 'You\'ve been invited to create a Firefly III account on **:host**. Firefly III is a personal, self-hosted, private personal finance manager. All the cool kids are using it.', @@ -82,7 +80,7 @@ return [ // registered 'registered_subject' => 'Välkommen till Firefly III!', - 'registered_subject_admin' => 'A new user has registered', + 'registered_subject_admin' => 'En ny användare har registrerat sig', 'admin_new_user_registered' => 'A new user has registered. User **:email** was given user ID #:id.', 'registered_welcome' => 'Welcome to [Firefly III](:address). Your registration has made it, and this email is here to confirm it. Yay!', 'registered_pw' => 'If you have forgotten your password already, please reset it using [the password reset tool](:address/password/reset).', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Återställ lösenord:', 'registered_doc_link' => 'Dokumentation:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,9 +101,8 @@ return [ * */ - // new version - 'new_version_email_subject' => 'A new Firefly III version is available', + 'new_version_email_subject' => 'En ny version av Firefly III finns tillgänglig', // email change 'email_change_subject' => 'Din Firefly III e-postadress har ändrats', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Om du föredrar kan du även öppna ett nytt ärende på https://github.com/firefly-ii/firefly-ii/issues.', 'error_stacktrace_below' => 'Komplett stacktrace nedan:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III har skapat en ny transaktion|Firefly III har skapat :count nya transaktioner', 'new_journals_header' => 'Firefly III har skapat en transaktion åt dig. Du hittar den i din Firefly III-installation:|Firefly III har skapat :count transaktioner åt dig. Du hittar dem i din Firefly III-installation:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Din räkning **":name"** förfaller :date. Detta ögonblick kommer att passera **IDAG!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/sv_SE/errors.php b/resources/lang/sv_SE/errors.php index b1ecdcf048..ddf1e357ad 100644 --- a/resources/lang/sv_SE/errors.php +++ b/resources/lang/sv_SE/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,14 +44,14 @@ return [ 'be_right_back' => 'Strax tillbaka!', 'check_back' => 'Firefly III är nere för nödvändigt underhåll. Vänligen kom tillbaka om en liten stund.', 'error_occurred' => 'Hoppsan! Ett fel uppstod.', - 'db_error_occurred' => 'Whoops! A database error occurred.', + 'db_error_occurred' => 'Hoppsan! Ett databasfel inträffade.', 'error_not_recoverable' => 'Oturligt nog har ett återkalligt fel skett :(. Firefly III har gått sönder. Felet är:', 'error' => 'Fel', 'error_location' => 'Detta fel inträffade i filen :file på rad :line med kod :code.', 'stacktrace' => 'Stackspårning', 'more_info' => 'Mer information', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Vänligen samla in mer information i katalogen lagring/loggar där du hittar loggfiler. Om du kör Docker, använd dockerloggar -f [container].', - 'collect_info_more' => 'Du kan läsa mer om att samla in felinformation i FAQ.', - 'github_help' => 'Få hjälp på GitHub', - 'github_instructions' => 'Du är mer än välkommen att öppna ett ärende på GitHub.', - 'use_search' => 'Använd sökningen!', - 'include_info' => 'Inkludera informationen från denna debug-sida.', - 'tell_more' => 'Berätta mer än "det står Hoppsan!"', - 'include_logs' => 'Inkludera felloggar (se ovan).', - 'what_did_you_do' => 'Berätta vad du gjorde.', - 'offline_header' => 'Du är förmodligen offline', - 'offline_unreachable' => 'Firefly III kan inte nås. Din enhet är för närvarande offline eller servern fungerar inte.', - 'offline_github' => 'Om du är säker på att både din enhet och servern är online, vänligen öppna ett ärende på GitHub.', - + 'collect_info' => 'Vänligen samla in mer information i katalogen lagring/loggar där du hittar loggfiler. Om du kör Docker, använd dockerloggar -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Få hjälp på GitHub', + 'github_instructions' => 'Du är mer än välkommen att öppna ett ärende på GitHub.', + 'use_search' => 'Använd sökningen!', + 'include_info' => 'Inkludera informationen från denna debug-sida.', + 'tell_more' => 'Berätta mer än "det står Hoppsan!"', + 'include_logs' => 'Inkludera felloggar (se ovan).', + 'what_did_you_do' => 'Berätta vad du gjorde.', + 'offline_header' => 'Du är förmodligen offline', + 'offline_unreachable' => 'Firefly III kan inte nås. Din enhet är för närvarande offline eller servern fungerar inte.', + 'offline_github' => 'Om du är säker på att både din enhet och servern är online, vänligen öppna ett ärende på GitHub.', ]; diff --git a/resources/lang/sv_SE/firefly.php b/resources/lang/sv_SE/firefly.php index 022d5cbefe..7c586b7c4f 100644 --- a/resources/lang/sv_SE/firefly.php +++ b/resources/lang/sv_SE/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Stäng', - 'actions' => 'Åtgärder', - 'edit' => 'Redigera', - 'delete' => 'Ta bort', - 'split' => 'Dela', - 'single_split' => 'Dela', - 'clone' => 'Klona', - 'confirm_action' => 'Bekräfta åtgärd', - 'last_seven_days' => 'Senaste 7 dagarna', - 'last_thirty_days' => 'Senaste 30 dagarna', - 'last_180_days' => 'Senaste 180 dagarna', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'ÅTD', - 'welcome_back' => 'Vad spelas?', - 'everything' => 'Allt', - 'today' => 'idag', - 'customRange' => 'Egen tidsperiod', - 'date_range' => 'Datumintervall', - 'apply' => 'Bekräfta', - 'select_date' => 'Välj datum..', - 'cancel' => 'Avbryt', - 'from' => 'Från', - 'to' => 'Till', - 'structure' => 'Struktur', - 'help_translating' => 'Den här hjälptexten finns inte på svenska än. Kan du hjälpa till att översätta?', - 'showEverything' => 'Visa allt', - 'never' => 'Aldrig', - 'no_results_for_empty_search' => 'Din sökning var tom, så ingenting hittades.', - 'removed_amount' => 'Borttaget :amount', - 'added_amount' => 'Lade till :amount', - 'asset_account_role_help' => 'Extra alternativ utifrån ditt val kan ändras senare.', - 'Opening balance' => 'Ingående balans', - 'create_new_stuff' => 'Skapa nya saker', - 'new_withdrawal' => 'Nytt uttag', - 'create_new_transaction' => 'Skapa en ny transaktion', - 'sidebar_frontpage_create' => 'Skapa', - 'new_transaction' => 'Lägg till transaktion', - 'no_rules_for_bill' => 'Notan saknar associerade regler.', - 'go_to_asset_accounts' => 'Visa dina tillgångskonton', - 'go_to_budgets' => 'Gå till dina budgetar', - 'go_to_withdrawals' => 'Gå till dina uttag', - 'clones_journal_x' => 'Denna transaktion är en klon av ":description" (#:id)', - 'go_to_categories' => 'Gå till dina kategorier', - 'go_to_bills' => 'Gå till dina räkningar', - 'go_to_expense_accounts' => 'Se dina utgiftskonton', - 'go_to_revenue_accounts' => 'Se din intäktskonton', - 'go_to_piggies' => 'Gå till dina sparbössor', - 'new_deposit' => 'Ny insättning', - 'new_transfer' => 'Ny överföring', - 'new_transfers' => 'Ny överföring', - 'new_asset_account' => 'Nytt tillgångskonto', - 'new_expense_account' => 'Nytt utgiftskonto', - 'new_revenue_account' => 'Nytt intäktskonto', - 'new_liabilities_account' => 'Ny skuld', - 'new_budget' => 'Ny budget', - 'new_bill' => 'Ny nota', - 'block_account_logout' => 'Du har loggats ut. Blockerade konton kan inte använda den här sidan. Registrerade du dig med en giltig e-postadress?', - 'flash_success' => 'Slutförd!', - 'flash_info' => 'Meddelande', - 'flash_warning' => 'Varning!', - 'flash_error' => 'Fel!', - 'flash_danger' => 'Fara!', - 'flash_info_multiple' => 'Det finns ett meddelande|Det finns :count meddelanden', - 'flash_error_multiple' => 'Det finns ett felmeddelande|Det finns :count felmeddelanden', - 'net_worth' => 'Nettoförmögenhet', - 'help_for_this_page' => 'Hjälp för denna sidan', - 'help_for_this_page_body' => 'Du hittar mer information om denna sida i dokumentationen.', - 'two_factor_welcome' => 'Hej!', - 'two_factor_enter_code' => 'För att fortsätta, mata in din tvåfaktorsautentiseringkod. Din applikation kan generera den åt dig.', - 'two_factor_code_here' => 'Skriv in koden', - 'two_factor_title' => 'Tvåfaktorsautensiering', - 'authenticate' => 'Autentisera', - 'two_factor_forgot_title' => 'Förlorad tvåfaktorsautentisering', - 'two_factor_forgot' => 'Jag har glömt min tvåfaktors-pryl.', - 'two_factor_lost_header' => 'Förlorad tvåfaktorsautentisering?', - 'two_factor_lost_intro' => 'Om du har förlorat även dina backupkoder har du otur. Detta är inte något du kan fixa från webbgränssnittet. Du har två val.', - 'two_factor_lost_fix_self' => 'Om du kör din egen instans av Firefly III, läs denna post i FAQ för instruktioner.', - 'two_factor_lost_fix_owner' => 'Annars, skicka epost till sajt-ägaren, :site_owner och be hen att återställa din tvåfaktorsautentisering.', - 'mfa_backup_code' => 'Du har använt en engångskod för att logga in i Firefly III. Den kan inte användas igen, så stryk den från din lista.', - 'pref_two_factor_new_backup_codes' => 'Generera nya engångskoder', - 'pref_two_factor_backup_code_count' => 'Du har :count giltig backup kod.|Du har :count giltiga backup koder.', - '2fa_i_have_them' => 'Sparade!', - 'warning_much_data' => ':days dagar med data kan ta ett tag att ladda.', - 'registered' => 'Din registrering lyckades!', - 'Default asset account' => 'Förvalt tillgångskonto', - 'no_budget_pointer' => 'Du verkar inte ha några budgetar än. Du bör skapa några på budgetar-sidan. Budgetar kan hjälpa dig att hålla reda på utgifter.', - 'no_bill_pointer' => 'Du verkar inte ha några räkningar ännu. Du bör skapa några på räkningar-sidan. Räkningar kan hjälpa dig att hålla reda på utgifter.', - 'Savings account' => 'Sparkonto', - 'Credit card' => 'Kreditkort', - 'source_accounts' => 'Källkonto|Källkonton', - 'destination_accounts' => 'Destination konto|Destination konton', - 'user_id_is' => 'Ditt användarid är :user', - 'field_supports_markdown' => 'Detta fält stödjer Markdown.', - 'need_more_help' => 'Om du behöver mer hjälp med att använda Firefly III, öppna en ticket på GitHub.', - 'reenable_intro_text' => 'Du kan också aktivera introduktionsguidningen.', - 'intro_boxes_after_refresh' => 'Introduktionsrutorna dyker upp igen när du uppdaterar sidan.', - 'show_all_no_filter' => 'Visa alla transaktioner utan att gruppera dem efter datum.', - 'expenses_by_category' => 'Utgifter per kategori', - 'expenses_by_budget' => 'Utgifter per budget', - 'income_by_category' => 'Intäkter per kategori', - 'expenses_by_asset_account' => 'Kostnader per tillgångskonto', - 'expenses_by_expense_account' => 'Kostnader per utgiftskonton', - 'cannot_redirect_to_account' => 'Förlåt, Firefly III kan inte omdirigera dig till rätt sida.', - 'sum_of_expenses' => 'Summa av kostnader', - 'sum_of_income' => 'Summa av inkomst', - 'liabilities' => 'Skulder', - 'spent_in_specific_budget' => 'Spenderad budget ":budget"', - 'spent_in_specific_double' => 'Spenderat i kontot ":account"', - 'earned_in_specific_double' => 'Intjänat i kontot ":account"', - 'source_account' => 'Källkonto', - 'source_account_reconciliation' => 'Du kan inte redigera källkontot för en avstämningstransaktion.', - 'destination_account' => 'Till konto', - 'destination_account_reconciliation' => 'Du kan inte redigera destinationskontot för en avstämningstransaktion.', - 'sum_of_expenses_in_budget' => 'Spenderat totalt i budget ":budget"', - 'left_in_budget_limit' => 'Kvar att spender enligt budget', - 'current_period' => 'Nuvarande period', - 'show_the_current_period_and_overview' => 'Visa nuvarande period och översikt', - 'pref_languages_locale' => 'För att ett språk förutom Engelska ska fungera bra, behöver ditt operativsystem ha de rätta språkinställningarna. Annars kommer inte valuta information, datum och summor visas på rätt sätt.', - 'budget_in_period' => 'Alla transaktioner för budget ":name" mellan :start och :end för :currency', - 'chart_budget_in_period' => 'Diagram med alla transaktioner för budget ":name" mellan :start och :end för :currency', - 'chart_budget_in_period_only_currency' => 'Summan du budgeterat var i :currency, detta diagram visar bara transaktioner i :currency.', - 'chart_account_in_period' => 'Diagram för alla transaktioner för kontot ":name" (:balance) mellan :start och :end', - 'chart_category_in_period' => 'Diagram med alla transaktioner för kategorin ":name" mellan :start och :end', - 'chart_category_all' => 'Diagram med alla transaktioner för kategorin ":name"', - 'clone_withdrawal' => 'Klona detta uttag', - 'clone_deposit' => 'Klona denna insättning', - 'clone_transfer' => 'Klona denna överföring', - 'multi_select_no_selection' => 'Inget valt', - 'multi_select_select_all' => 'Markera allt', - 'multi_select_n_selected' => 'vald', - 'multi_select_all_selected' => 'Allt valt', - 'multi_select_filter_placeholder' => 'Sök..', - 'intro_next_label' => 'Nästa', - 'intro_prev_label' => 'Föregående', - 'intro_skip_label' => 'Hoppa över', - 'intro_done_label' => 'Klart', - 'between_dates_breadcrumb' => 'Mellan :start och :end', - 'all_journals_without_budget' => 'Alla transaktioner utan en budget', - 'journals_without_budget' => 'Transaktioner utan budget', - 'all_journals_without_category' => 'Alla transaktioner utan en kategori', - 'journals_without_category' => 'Transaktioner utan en kategori', - 'all_journals_for_account' => 'Alla transaktioner för konto :name', - 'chart_all_journals_for_account' => 'Diagram med alla transaktioner för konto :name', - 'journals_in_period_for_account' => 'Alla transaktioner för konto :name mellan :start och :end', - 'journals_in_period_for_account_js' => 'Alla transaktioner för konto {title} mellan {start} och {end}', - 'transferred' => 'Överfört', - 'all_withdrawal' => 'All utgifter', - 'all_transactions' => 'Alla transaktioner', - 'title_withdrawal_between' => 'Alla utgifter mellan :start och :end', - 'all_deposit' => 'Alla intäkter', - 'title_deposit_between' => 'Alla intäkter mellan :start och :end', - 'all_transfers' => 'Alla överföringar', - 'title_transfers_between' => 'Alla överföringar mellan :start och :end', - 'all_transfer' => 'Alla överföringar', - 'all_journals_for_tag' => 'Alla överföringar märkta med ":tag"', - 'title_transfer_between' => 'Alla överföringar mellan :start och :end', - 'all_journals_for_category' => 'Alla transaktioner för kategori :name', - 'all_journals_for_budget' => 'Alla transaktioner för budget :name', - 'chart_all_journals_for_budget' => 'Diagram med alla transaktioner för budget :name', - 'journals_in_period_for_category' => 'Alla transaktioner för kategori :name mellan :start och :end', - 'journals_in_period_for_tag' => 'Alla transaktioner märkta :tag mellan :start och :end', - 'not_available_demo_user' => 'Denna funktionen är inte tillgänglig för demo användare.', - 'exchange_rate_instructions' => 'Tillgångskonto "@name" tillåter transaktioner endast i @native_currency. Om du önskar använda @foreign_currency, vänligen säkerställ att summan i @native_currency också är känd:', - 'transfer_exchange_rate_instructions' => 'Källkontot "@source_name" accepterar bara transaktioner i @source_currency. Mottagarkontot "@dest_name" accepterar bara transaktioner i @dest_currencty. Du behöver ange det överförda beloppet korrekt i båda valutorna.', - 'transaction_data' => 'Transaktionsdata', - 'invalid_server_configuration' => 'Ogiltig serverkonfiguration', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Snabbbyte', - 'sign_in_to_start' => 'Logga in för att börja din session', - 'sign_in' => 'Logga in', - 'register_new_account' => 'Registrera ett nytt konto', - 'forgot_my_password' => 'Glömt mitt lösenord', - 'problems_with_input' => 'Det fanns program med din inmatning.', - 'reset_password' => 'Återställ ditt lösenord', - 'button_reset_password' => 'Återställ lösenord', - 'reset_button' => 'Återställ', - 'want_to_login' => 'Jag vill logga in', - 'login_page_title' => 'Logga in till Firefly III', - 'register_page_title' => 'Registrera hos Firefly III', - 'forgot_pw_page_title' => 'Glömt ditt lösenord till Firefly III', - 'reset_pw_page_title' => 'Återställ ditt lösenord för Firefly III', - 'cannot_reset_demo_user' => 'Går inte att återställa lösenordet för demo användaren.', - 'no_att_demo_user' => 'Demoanvändaren kan inte ladda upp bilagor.', - 'button_register' => 'Registrera', - 'authorization' => 'Auktorisering', - 'active_bills_only' => 'endast aktiva räkningar', - 'active_bills_only_total' => 'alla aktiva räkningar', - 'active_exp_bills_only' => 'endast aktiva och väntade räkningar', - 'active_exp_bills_only_total' => 'alla aktiva förväntade räkningar endast', - 'per_period_sum_1D' => 'Förväntade dagliga kostnader', - 'per_period_sum_1W' => 'Förväntade veckokostnader', - 'per_period_sum_1M' => 'Förväntade månadskostnader', - 'per_period_sum_3M' => 'Förväntade kvartalskostnader', - 'per_period_sum_6M' => 'Förväntade halvårskostnader', - 'per_period_sum_1Y' => 'Förväntade årliga kostnader', - 'average_per_bill' => 'medel per nota', - 'expected_total' => 'total förväntad', - 'reconciliation_account_name' => ':name avstämning (:currency)', - 'saved' => 'Sparad', - 'advanced_options' => 'Avancerade alternativ', - 'advanced_options_explain' => 'Vissa sidor i Firefly III har avancerade alternativ gömda bakom den här knappen. Den här sidan har inget tjusigt här, men kolla in de andra!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Stäng', + 'actions' => 'Åtgärder', + 'edit' => 'Redigera', + 'delete' => 'Ta bort', + 'split' => 'Dela', + 'single_split' => 'Dela', + 'clone' => 'Klona', + 'clone_and_edit' => 'Klona och redigera', + 'confirm_action' => 'Bekräfta åtgärd', + 'last_seven_days' => 'Senaste 7 dagarna', + 'last_thirty_days' => 'Senaste 30 dagarna', + 'last_180_days' => 'Senaste 180 dagarna', + 'month_to_date' => 'Månad hittills', + 'year_to_date' => 'År hittills', + 'YTD' => 'ÅTD', + 'welcome_back' => 'Vad spelas?', + 'everything' => 'Allt', + 'today' => 'idag', + 'customRange' => 'Egen tidsperiod', + 'date_range' => 'Datumintervall', + 'apply' => 'Bekräfta', + 'select_date' => 'Välj datum..', + 'cancel' => 'Avbryt', + 'from' => 'Från', + 'to' => 'Till', + 'structure' => 'Struktur', + 'help_translating' => 'Den här hjälptexten finns inte på svenska än. Kan du hjälpa till att översätta?', + 'showEverything' => 'Visa allt', + 'never' => 'Aldrig', + 'no_results_for_empty_search' => 'Din sökning var tom, så ingenting hittades.', + 'removed_amount' => 'Borttaget :amount', + 'added_amount' => 'Lade till :amount', + 'asset_account_role_help' => 'Extra alternativ utifrån ditt val kan ändras senare.', + 'Opening balance' => 'Ingående balans', + 'create_new_stuff' => 'Skapa nya saker', + 'new_withdrawal' => 'Nytt uttag', + 'create_new_transaction' => 'Skapa en ny transaktion', + 'sidebar_frontpage_create' => 'Skapa', + 'new_transaction' => 'Lägg till transaktion', + 'no_rules_for_bill' => 'Notan saknar associerade regler.', + 'go_to_asset_accounts' => 'Visa dina tillgångskonton', + 'go_to_budgets' => 'Gå till dina budgetar', + 'go_to_withdrawals' => 'Gå till dina uttag', + 'clones_journal_x' => 'Denna transaktion är en klon av ":description" (#:id)', + 'go_to_categories' => 'Gå till dina kategorier', + 'go_to_bills' => 'Gå till dina räkningar', + 'go_to_expense_accounts' => 'Se dina utgiftskonton', + 'go_to_revenue_accounts' => 'Se din intäktskonton', + 'go_to_piggies' => 'Gå till dina sparbössor', + 'new_deposit' => 'Ny insättning', + 'new_transfer' => 'Ny överföring', + 'new_transfers' => 'Ny överföring', + 'new_asset_account' => 'Nytt tillgångskonto', + 'new_expense_account' => 'Nytt utgiftskonto', + 'new_revenue_account' => 'Nytt intäktskonto', + 'new_liabilities_account' => 'Ny skuld', + 'new_budget' => 'Ny budget', + 'new_bill' => 'Ny nota', + 'block_account_logout' => 'Du har loggats ut. Blockerade konton kan inte använda den här sidan. Registrerade du dig med en giltig e-postadress?', + 'flash_success' => 'Slutförd!', + 'flash_info' => 'Meddelande', + 'flash_warning' => 'Varning!', + 'flash_error' => 'Fel!', + 'flash_danger' => 'Fara!', + 'flash_info_multiple' => 'Det finns ett meddelande|Det finns :count meddelanden', + 'flash_error_multiple' => 'Det finns ett felmeddelande|Det finns :count felmeddelanden', + 'net_worth' => 'Nettoförmögenhet', + 'help_for_this_page' => 'Hjälp för denna sidan', + 'help_for_this_page_body' => 'Du hittar mer information om denna sida i dokumentationen.', + 'two_factor_welcome' => 'Hej!', + 'two_factor_enter_code' => 'För att fortsätta, mata in din tvåfaktorsautentiseringkod. Din applikation kan generera den åt dig.', + 'two_factor_code_here' => 'Skriv in koden', + 'two_factor_title' => 'Tvåfaktorsautensiering', + 'authenticate' => 'Autentisera', + 'two_factor_forgot_title' => 'Förlorad tvåfaktorsautentisering', + 'two_factor_forgot' => 'Jag har glömt min tvåfaktors-pryl.', + 'two_factor_lost_header' => 'Förlorad tvåfaktorsautentisering?', + 'two_factor_lost_intro' => 'Om du har förlorat även dina backupkoder har du otur. Detta är inte något du kan fixa från webbgränssnittet. Du har två val.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner och be hen att återställa din tvåfaktorsautentisering.', + 'mfa_backup_code' => 'Du har använt en engångskod för att logga in i Firefly III. Den kan inte användas igen, så stryk den från din lista.', + 'pref_two_factor_new_backup_codes' => 'Generera nya engångskoder', + 'pref_two_factor_backup_code_count' => 'Du har :count giltig backup kod.|Du har :count giltiga backup koder.', + '2fa_i_have_them' => 'Sparade!', + 'warning_much_data' => ':days dagar med data kan ta ett tag att ladda.', + 'registered' => 'Din registrering lyckades!', + 'Default asset account' => 'Förvalt tillgångskonto', + 'no_budget_pointer' => 'Du verkar inte ha några budgetar än. Du bör skapa några på budgetar-sidan. Budgetar kan hjälpa dig att hålla reda på utgifter.', + 'no_bill_pointer' => 'Du verkar inte ha några räkningar ännu. Du bör skapa några på räkningar-sidan. Räkningar kan hjälpa dig att hålla reda på utgifter.', + 'Savings account' => 'Sparkonto', + 'Credit card' => 'Kreditkort', + 'source_accounts' => 'Källkonto|Källkonton', + 'destination_accounts' => 'Destination konto|Destination konton', + 'user_id_is' => 'Ditt användarid är :user', + 'field_supports_markdown' => 'Detta fält stödjer Markdown.', + 'need_more_help' => 'Om du behöver mer hjälp med att använda Firefly III, öppna en ticket på GitHub.', + 'reenable_intro_text' => 'Du kan också aktivera introduktionsguidningen.', + 'intro_boxes_after_refresh' => 'Introduktionsrutorna dyker upp igen när du uppdaterar sidan.', + 'show_all_no_filter' => 'Visa alla transaktioner utan att gruppera dem efter datum.', + 'expenses_by_category' => 'Utgifter per kategori', + 'expenses_by_budget' => 'Utgifter per budget', + 'income_by_category' => 'Intäkter per kategori', + 'expenses_by_asset_account' => 'Kostnader per tillgångskonto', + 'expenses_by_expense_account' => 'Kostnader per utgiftskonton', + 'cannot_redirect_to_account' => 'Förlåt, Firefly III kan inte omdirigera dig till rätt sida.', + 'sum_of_expenses' => 'Summa av kostnader', + 'sum_of_income' => 'Summa av inkomst', + 'liabilities' => 'Skulder', + 'spent_in_specific_budget' => 'Spenderad budget ":budget"', + 'spent_in_specific_double' => 'Spenderat i kontot ":account"', + 'earned_in_specific_double' => 'Intjänat i kontot ":account"', + 'source_account' => 'Källkonto', + 'source_account_reconciliation' => 'Du kan inte redigera källkontot för en avstämningstransaktion.', + 'destination_account' => 'Till konto', + 'destination_account_reconciliation' => 'Du kan inte redigera destinationskontot för en avstämningstransaktion.', + 'sum_of_expenses_in_budget' => 'Spenderat totalt i budget ":budget"', + 'left_in_budget_limit' => 'Kvar att spender enligt budget', + 'current_period' => 'Nuvarande period', + 'show_the_current_period_and_overview' => 'Visa nuvarande period och översikt', + 'pref_languages_locale' => 'För att ett språk förutom Engelska ska fungera bra, behöver ditt operativsystem ha de rätta språkinställningarna. Annars kommer inte valuta information, datum och summor visas på rätt sätt.', + 'budget_in_period' => 'Alla transaktioner för budget ":name" mellan :start och :end för :currency', + 'chart_budget_in_period' => 'Diagram med alla transaktioner för budget ":name" mellan :start och :end för :currency', + 'chart_budget_in_period_only_currency' => 'Summan du budgeterat var i :currency, detta diagram visar bara transaktioner i :currency.', + 'chart_account_in_period' => 'Diagram för alla transaktioner för kontot ":name" (:balance) mellan :start och :end', + 'chart_category_in_period' => 'Diagram med alla transaktioner för kategorin ":name" mellan :start och :end', + 'chart_category_all' => 'Diagram med alla transaktioner för kategorin ":name"', + 'clone_withdrawal' => 'Klona detta uttag', + 'clone_deposit' => 'Klona denna insättning', + 'clone_transfer' => 'Klona denna överföring', + 'multi_select_no_selection' => 'Inget valt', + 'multi_select_select_all' => 'Markera allt', + 'multi_select_n_selected' => 'vald', + 'multi_select_all_selected' => 'Allt valt', + 'multi_select_filter_placeholder' => 'Sök..', + 'intro_next_label' => 'Nästa', + 'intro_prev_label' => 'Föregående', + 'intro_skip_label' => 'Hoppa över', + 'intro_done_label' => 'Klart', + 'between_dates_breadcrumb' => 'Mellan :start och :end', + 'all_journals_without_budget' => 'Alla transaktioner utan en budget', + 'journals_without_budget' => 'Transaktioner utan budget', + 'all_journals_without_category' => 'Alla transaktioner utan en kategori', + 'journals_without_category' => 'Transaktioner utan en kategori', + 'all_journals_for_account' => 'Alla transaktioner för konto :name', + 'chart_all_journals_for_account' => 'Diagram med alla transaktioner för konto :name', + 'journals_in_period_for_account' => 'Alla transaktioner för konto :name mellan :start och :end', + 'journals_in_period_for_account_js' => 'Alla transaktioner för konto {title} mellan {start} och {end}', + 'transferred' => 'Överfört', + 'all_withdrawal' => 'All utgifter', + 'all_transactions' => 'Alla transaktioner', + 'title_withdrawal_between' => 'Alla utgifter mellan :start och :end', + 'all_deposit' => 'Alla intäkter', + 'title_deposit_between' => 'Alla intäkter mellan :start och :end', + 'all_transfers' => 'Alla överföringar', + 'title_transfers_between' => 'Alla överföringar mellan :start och :end', + 'all_transfer' => 'Alla överföringar', + 'all_journals_for_tag' => 'Alla överföringar märkta med ":tag"', + 'title_transfer_between' => 'Alla överföringar mellan :start och :end', + 'all_journals_for_category' => 'Alla transaktioner för kategori :name', + 'all_journals_for_budget' => 'Alla transaktioner för budget :name', + 'chart_all_journals_for_budget' => 'Diagram med alla transaktioner för budget :name', + 'journals_in_period_for_category' => 'Alla transaktioner för kategori :name mellan :start och :end', + 'journals_in_period_for_tag' => 'Alla transaktioner märkta :tag mellan :start och :end', + 'not_available_demo_user' => 'Denna funktionen är inte tillgänglig för demo användare.', + 'exchange_rate_instructions' => 'Tillgångskonto "@name" tillåter transaktioner endast i @native_currency. Om du önskar använda @foreign_currency, vänligen säkerställ att summan i @native_currency också är känd:', + 'transfer_exchange_rate_instructions' => 'Källkontot "@source_name" accepterar bara transaktioner i @source_currency. Mottagarkontot "@dest_name" accepterar bara transaktioner i @dest_currencty. Du behöver ange det överförda beloppet korrekt i båda valutorna.', + 'transaction_data' => 'Transaktionsdata', + 'invalid_server_configuration' => 'Ogiltig serverkonfiguration', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Snabbbyte', + 'sign_in_to_start' => 'Logga in för att börja din session', + 'sign_in' => 'Logga in', + 'register_new_account' => 'Registrera ett nytt konto', + 'forgot_my_password' => 'Glömt mitt lösenord', + 'problems_with_input' => 'Det fanns program med din inmatning.', + 'reset_password' => 'Återställ ditt lösenord', + 'button_reset_password' => 'Återställ lösenord', + 'reset_button' => 'Återställ', + 'want_to_login' => 'Jag vill logga in', + 'login_page_title' => 'Logga in till Firefly III', + 'register_page_title' => 'Registrera hos Firefly III', + 'forgot_pw_page_title' => 'Glömt ditt lösenord till Firefly III', + 'reset_pw_page_title' => 'Återställ ditt lösenord för Firefly III', + 'cannot_reset_demo_user' => 'Går inte att återställa lösenordet för demo användaren.', + 'no_att_demo_user' => 'Demoanvändaren kan inte ladda upp bilagor.', + 'button_register' => 'Registrera', + 'authorization' => 'Auktorisering', + 'active_bills_only' => 'endast aktiva räkningar', + 'active_bills_only_total' => 'alla aktiva räkningar', + 'active_exp_bills_only' => 'endast aktiva och väntade räkningar', + 'active_exp_bills_only_total' => 'alla aktiva förväntade räkningar endast', + 'per_period_sum_1D' => 'Förväntade dagliga kostnader', + 'per_period_sum_1W' => 'Förväntade veckokostnader', + 'per_period_sum_1M' => 'Förväntade månadskostnader', + 'per_period_sum_3M' => 'Förväntade kvartalskostnader', + 'per_period_sum_6M' => 'Förväntade halvårskostnader', + 'per_period_sum_1Y' => 'Förväntade årliga kostnader', + 'average_per_bill' => 'medel per nota', + 'expected_total' => 'total förväntad', + 'reconciliation_account_name' => ':name avstämning (:currency)', + 'saved' => 'Sparad', + 'advanced_options' => 'Avancerade alternativ', + 'advanced_options_explain' => 'Vissa sidor i Firefly III har avancerade alternativ gömda bakom den här knappen. Den här sidan har inget tjusigt här, men kolla in de andra!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhookar', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'Efter skapande av transaktion', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaktionsdetaljer', - 'webhook_response_ACCOUNTS' => 'Kontodetaljer', - 'webhook_response_none_NONE' => 'Inga detaljer', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspektera', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'Visa meddelande', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Loggar', - 'response' => 'Svar', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhookar', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'inaktiverad', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => 'Efter skapande av transaktion', + 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', + 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', + 'webhook_response_TRANSACTIONS' => 'Transaktionsdetaljer', + 'webhook_response_ACCOUNTS' => 'Kontodetaljer', + 'webhook_response_none_NONE' => 'Inga detaljer', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspektera', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => 'Visa meddelande', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Loggar', + 'response' => 'Svar', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Firefly III v:version Auktorisationsbegäran', - 'authorization_request_intro' => 'Applikationen ":client" begär behörighet att få tillgång till din ekonomiska administration. Vill du ge :client tillgång till dessa poster?', - 'authorization_request_site' => 'Du kommer omdirigeras till :url som sedan kommer få tillgång till dina Firefly III-data.', - 'authorization_request_invalid' => 'Denna begäran om åtkomst är ogiltig. Följ aldrig den här länken igen.', - 'scopes_will_be_able' => 'Detta program kommer att kunna:', - 'button_authorize' => 'Godkänn', - 'none_in_select_list' => '(Ingen)', - 'no_piggy_bank' => '(ingen spargris)', - 'name_in_currency' => ':name i :currency', - 'paid_in_currency' => 'Betalad i :currency', - 'unpaid_in_currency' => 'Obetalad i :currency', - 'is_alpha_warning' => 'Du kör en ALPHA-version. Var försiktig med buggar och problem.', - 'is_beta_warning' => 'Du kör en BETA-version. Var försiktig med buggar och problem.', - 'all_destination_accounts' => 'Destinationskonton', - 'all_source_accounts' => 'Källkonton', - 'back_to_index' => 'Åter till index', - 'cant_logout_guard' => 'Firefly III kan inte logga ut dig.', - 'internal_reference' => 'Intern referens', + 'authorization_request' => 'Firefly III v:version Auktorisationsbegäran', + 'authorization_request_intro' => 'Applikationen ":client" begär behörighet att få tillgång till din ekonomiska administration. Vill du ge :client tillgång till dessa poster?', + 'authorization_request_site' => 'Du kommer omdirigeras till :url som sedan kommer få tillgång till dina Firefly III-data.', + 'authorization_request_invalid' => 'Denna begäran om åtkomst är ogiltig. Följ aldrig den här länken igen.', + 'scopes_will_be_able' => 'Detta program kommer att kunna:', + 'button_authorize' => 'Godkänn', + 'none_in_select_list' => '(Ingen)', + 'no_piggy_bank' => '(ingen spargris)', + 'name_in_currency' => ':name i :currency', + 'paid_in_currency' => 'Betalad i :currency', + 'unpaid_in_currency' => 'Obetalad i :currency', + 'is_alpha_warning' => 'Du kör en ALPHA-version. Var försiktig med buggar och problem.', + 'is_beta_warning' => 'Du kör en BETA-version. Var försiktig med buggar och problem.', + 'all_destination_accounts' => 'Destinationskonton', + 'all_source_accounts' => 'Källkonton', + 'back_to_index' => 'Åter till index', + 'cant_logout_guard' => 'Firefly III kan inte logga ut dig.', + 'internal_reference' => 'Intern referens', // check for updates: - 'update_check_title' => 'Sök uppdateringar', - 'admin_update_check_title' => 'Sök automatiskt efter uppdateringar', - 'admin_update_check_explain' => 'Firefly III kan söka efter uppdateringar automatiskt. När du aktiverar denna inställning, kommer den kontakta Firefly III uppdateringsserver för att se om en ny version av Firefly III finns tillgänglig. När det gör det så får du en notifiering. Du kan testa dessa notifieringar via knappen till höger. Välj nedan om du vill att Firefly III ska automatiskt söka efter uppdateringar.', - 'check_for_updates_permission' => 'Firefly III kan söka efter uppdateringara, men den behöver din tillåtelse att göra så. Vänligen gå till inställningar för att ställa in om denna funktion ska aktiveras.', - 'updates_ask_me_later' => 'Fråga mig senare', - 'updates_do_not_check' => 'Sök inte efter uppdateringar', - 'updates_enable_check' => 'Aktivera för att leta efter uppdateringar', - 'admin_update_check_now_title' => 'Sök efter uppdateringar nu', - 'admin_update_check_now_explain' => 'Om du trycker på knappen, kontrollerar Firefly III om du har den senaste versionen.', - 'check_for_updates_button' => 'Kontrollera nu!', - 'update_new_version_alert' => 'En ny version av Firefly III är tillgänglig. Du har :your_version, den senaste är :new_version vilken släpptes :date.', - 'update_version_beta' => 'Denna version är en BETA version. Det kan förekomma problem.', - 'update_version_alpha' => 'Denna version är en ALPHA version. Det kan förekomma problem.', - 'update_current_version_alert' => 'Du har :version, vilken är den senaste tillgängliga utgåva.', - 'update_newer_version_alert' => 'Du har :your_version, vilken är nyare än senaste utgåva, :new_version.', - 'update_check_error' => 'Ett fel inträffade vid sökning efter uppdateringar: :error', - 'unknown_error' => 'Okänt fel. Ledsen för det.', - 'just_new_release' => 'En ny version är tillgänglig! Version :version släpptes :date. Denna utgåva är mycket färsk. Vänta några dagar för att den nya utgåvan ska stabiliseras.', - 'disabled_but_check' => 'Du inaktiverade uppdateringskontroll. Så glöm inte att söka efter uppdateringar själv då och då. Tack!', - 'admin_update_channel_title' => 'Uppdatera kanal', - 'admin_update_channel_explain' => 'Firefly III har tre uppdaterings "kanaler" som bestämmer hur frammåt i kurvan du är i form av funktioner, förbättringar och buggar. Använd "beta" kanalen om du är äventyrslysten och "alpha" om du tycket om att leva farligt.', - 'update_channel_stable' => 'Stabil. Allting fungerar som förväntat.', - 'update_channel_beta' => 'Beta. Nya funktioner men saker kan vara trasiga.', - 'update_channel_alpha' => 'Alpha. Vi kastar in saker, det som fastnar det fastnar.', + 'update_check_title' => 'Sök uppdateringar', + 'admin_update_check_title' => 'Sök automatiskt efter uppdateringar', + 'admin_update_check_explain' => 'Firefly III kan söka efter uppdateringar automatiskt. När du aktiverar denna inställning, kommer den kontakta Firefly III uppdateringsserver för att se om en ny version av Firefly III finns tillgänglig. När det gör det så får du en notifiering. Du kan testa dessa notifieringar via knappen till höger. Välj nedan om du vill att Firefly III ska automatiskt söka efter uppdateringar.', + 'check_for_updates_permission' => 'Firefly III kan söka efter uppdateringara, men den behöver din tillåtelse att göra så. Vänligen gå till inställningar för att ställa in om denna funktion ska aktiveras.', + 'updates_ask_me_later' => 'Fråga mig senare', + 'updates_do_not_check' => 'Sök inte efter uppdateringar', + 'updates_enable_check' => 'Aktivera för att leta efter uppdateringar', + 'admin_update_check_now_title' => 'Sök efter uppdateringar nu', + 'admin_update_check_now_explain' => 'Om du trycker på knappen, kontrollerar Firefly III om du har den senaste versionen.', + 'check_for_updates_button' => 'Kontrollera nu!', + 'update_new_version_alert' => 'En ny version av Firefly III är tillgänglig. Du har :your_version, den senaste är :new_version vilken släpptes :date.', + 'update_version_beta' => 'Denna version är en BETA version. Det kan förekomma problem.', + 'update_version_alpha' => 'Denna version är en ALPHA version. Det kan förekomma problem.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Du har :version, vilken är den senaste tillgängliga utgåva.', + 'update_newer_version_alert' => 'Du har :your_version, vilken är nyare än senaste utgåva, :new_version.', + 'update_check_error' => 'Ett fel inträffade vid sökning efter uppdateringar: :error', + 'unknown_error' => 'Okänt fel. Ledsen för det.', + 'disabled_but_check' => 'Du inaktiverade uppdateringskontroll. Så glöm inte att söka efter uppdateringar själv då och då. Tack!', + 'admin_update_channel_title' => 'Uppdatera kanal', + 'admin_update_channel_explain' => 'Firefly III har tre uppdaterings "kanaler" som bestämmer hur frammåt i kurvan du är i form av funktioner, förbättringar och buggar. Använd "beta" kanalen om du är äventyrslysten och "alpha" om du tycket om att leva farligt.', + 'update_channel_stable' => 'Stabil. Allting fungerar som förväntat.', + 'update_channel_beta' => 'Beta. Nya funktioner men saker kan vara trasiga.', + 'update_channel_alpha' => 'Alpha. Vi kastar in saker, det som fastnar det fastnar.', // search - 'search' => 'Sök', - 'search_query' => 'Fråga', - 'search_found_transactions' => 'Firefly III hittade :count transaktion i :time sekunder.|Firefly III hittade :count transaktioner i :time sekunder.', - 'search_found_more_transactions' => 'Firefly III hittade mer än :count transaktioner i :time sekunder.', - 'search_for_query' => 'Firefly III söker efter transaktioner med dessa ord i dem: :query', - 'invalid_operators_list' => 'Sökparametrarna är inte giltiga och har ignorerats.', + 'search' => 'Sök', + 'search_query' => 'Fråga', + 'search_found_transactions' => 'Firefly III hittade :count transaktion i :time sekunder.|Firefly III hittade :count transaktioner i :time sekunder.', + 'search_found_more_transactions' => 'Firefly III hittade mer än :count transaktioner i :time sekunder.', + 'search_for_query' => 'Firefly III söker efter transaktioner med dessa ord i dem: :query', + 'invalid_operators_list' => 'Sökparametrarna är inte giltiga och har ignorerats.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaction date is ":value"', 'search_modifier_not_date_on' => 'Transaction date is not ":value"', 'search_modifier_reconciled' => 'Transaction is reconciled', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Transaktionstypen är ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Taggen är ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Transaktionen är i eller efter månad ":value"', 'search_modifier_date_after_day' => 'Transaktionen är efter eller på dagen i månaden ":value"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Följande filter tillämpas även på sökning(ar):', 'general_search_error' => 'Ett fel uppstod vid sökning. Kontrollera loggfilerna för mer information.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'Du kan inte köra inaktiva regler.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Regler', 'rule_name' => 'Namn på regel', 'rule_triggers' => 'Regel triggas när', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'När en transaktion uppdateras', 'rule_trigger_user_action' => 'Användaråtgärd är ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Källkontonamn börjar med..', 'rule_trigger_source_account_starts' => 'Källkontonamn börjar med ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Budget är ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Transaktionsvalutan är..', 'rule_trigger_currency_is' => 'Transaktionsvalutan är ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Transaktion med utländsk valuta är..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Regelgrupp för räkningar', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Regel för nota ":name"', 'new_rule_for_bill_description' => 'Denna regel markerar transaktion för nota ":name".', - 'new_rule_for_journal_title' => 'Regel baserad på transaktionen ":description"', - 'new_rule_for_journal_description' => 'Den här regeln är baserad på transaktionen ":description". Den kommer matcha transaktioner som är exakt likadana.', + 'new_rule_for_journal_title' => 'Regel baserad på transaktionen ":description"', + 'new_rule_for_journal_description' => 'Den här regeln är baserad på transaktionen ":description". Den kommer matcha transaktioner som är exakt likadana.', // tags - 'store_new_tag' => 'Spara ny etikett', - 'update_tag' => 'Uppdatera etikett', - 'no_location_set' => 'Ingen plats inställd.', - 'meta_data' => 'Metadata', - 'location' => 'Plats', - 'without_date' => 'Utan datum', - 'result' => 'Resultat', - 'sums_apply_to_range' => 'Alla summor gäller för valt intervall', - 'mapbox_api_key' => 'För att använda karta, hämta en API nyckel från Mapbox. Öppna din .env fil och ange koden efter MAPBOX_API_KEY=.', - 'press_object_location' => 'Högerklicka eller långtryck för att ställa in objektets plats.', - 'clear_location' => 'Rena plats', - 'delete_all_selected_tags' => 'Ta bort alla markerade etiketter', - 'select_tags_to_delete' => 'Glöm inte att välja några etiketter.', - 'deleted_x_tags' => 'Tog bort :count tag.|Tog bort :count taggar.', - 'create_rule_from_transaction' => 'Skapa regel baserad på transaktion', - 'create_recurring_from_transaction' => 'Skapa återkommande transaktion baserat på transaktion', - + 'store_new_tag' => 'Spara ny etikett', + 'update_tag' => 'Uppdatera etikett', + 'no_location_set' => 'Ingen plats inställd.', + 'meta_data' => 'Metadata', + 'location' => 'Plats', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Utan datum', + 'result' => 'Resultat', + 'sums_apply_to_range' => 'Alla summor gäller för valt intervall', + 'mapbox_api_key' => 'För att använda karta, hämta en API nyckel från Mapbox. Öppna din .env fil och ange koden efter MAPBOX_API_KEY=.', + 'press_object_location' => 'Högerklicka eller långtryck för att ställa in objektets plats.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Rena plats', + 'delete_all_selected_tags' => 'Ta bort alla markerade etiketter', + 'select_tags_to_delete' => 'Glöm inte att välja några etiketter.', + 'deleted_x_tags' => 'Tog bort :count tag.|Tog bort :count taggar.', + 'create_rule_from_transaction' => 'Skapa regel baserad på transaktion', + 'create_recurring_from_transaction' => 'Skapa återkommande transaktion baserat på transaktion', // preferences - 'dark_mode_option_browser' => 'Låt din webbläsare bestämma', - 'dark_mode_option_light' => 'Alltid ljust', - 'dark_mode_option_dark' => 'Alltid mörkt', - 'equal_to_language' => '(lika med språk)', - 'dark_mode_preference' => 'Mörkt läge', - 'dark_mode_preference_help' => 'Berätta för Firefly III när mörkt läge ska användas.', - 'pref_home_screen_accounts' => 'Startskäm konton', - 'pref_home_screen_accounts_help' => 'Vilka konton ska visas på startskärmen?', - 'pref_view_range' => 'Visa intervall', - 'pref_view_range_help' => 'Vissa diagram grupperas automatiskt i perioder. Dina budgetar grupperas också i perioder. Vilken period föredrar du?', - 'pref_1D' => 'En dag', - 'pref_1W' => 'En vecka', - 'pref_1M' => 'En månad', - 'pref_3M' => 'Tre månader (kvartal)', - 'pref_6M' => 'Sex månader', - 'pref_1Y' => 'Ett år', - 'pref_last365' => 'Föregående år', - 'pref_last90' => 'Senaste 90 dagarna', - 'pref_last30' => 'Senaste 30 dagarna', - 'pref_last7' => 'Senaste 7 dagarna', - 'pref_YTD' => 'Hittills i år', - 'pref_QTD' => 'Kvartal hittills', - 'pref_MTD' => 'Månad hittills', - 'pref_languages' => 'Språk', - 'pref_locale' => 'Nationella inställningar', - 'pref_languages_help' => 'Firefly III stödjer flera språk. Vilket föredrar du?', - 'pref_locale_help' => 'Firefly III låter dig ställa in andra lokala inställningar, som hur valutor, siffror och datum formateras. Poster i denna lista kanske inte stöds av ditt system. Firefly III har inte rätt datuminställningar för varje lokal; kontakta mig för förbättringar.', - 'pref_locale_no_demo' => 'Denna funktion fungerar inte för demoanvändaren.', - 'pref_custom_fiscal_year' => 'Räkneskapsårs inställningar', - 'pref_custom_fiscal_year_label' => 'Aktiverad', - 'pref_custom_fiscal_year_help' => 'I länder som använder räkneskapsår annat än 1a Januari till 31a December, går det att ändra detta och välja start / slut dagar för räkneskapsåret', - 'pref_fiscal_year_start_label' => 'Startdatum för räkneskapsår', - 'pref_two_factor_auth' => 'Tvåstegsverifiering', - 'pref_two_factor_auth_help' => 'När tvåstegsverifiering aktiveras (även känt som tvåfaktorautentisering), så lägger du på ytterligare lager säkerhet på ditt konto. Du kan logga in med något du vet (ditt lösenord) eller något du har (en verifieringskod). Verifieringskoder kan också genereras av en app på din telefon som till exempel, Authy eller Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Aktivera tvåstegsverifiering', - 'pref_two_factor_auth_disabled' => '2-stegs verifieringskod har tagits bort och inaktiverats', - 'pref_two_factor_auth_remove_it' => 'Glöm inte att ta bort kontot från din autentiseringsapp!', - 'pref_two_factor_auth_code' => 'Verifiera kod', - 'pref_two_factor_auth_code_help' => 'Skanna QR koden med en app på din telefon som till exempel Authy eller Google Authenticator och ange den genererade koden.', - 'pref_two_factor_auth_reset_code' => 'Nollställ verifieringskod', - 'pref_two_factor_auth_disable_2fa' => 'Inaktivera 2FA', - '2fa_use_secret_instead' => 'Om du inte kan scanna QR koden, använd denna hemliga istället :secret.', - '2fa_backup_codes' => 'Spara dessa backup koder för åtkomst ifall du tappar bort din enhet.', - '2fa_already_enabled' => 'Tvåfaktorsautentisering är redan aktiverat.', - 'wrong_mfa_code' => 'MFA-koden är inte giltig.', - 'pref_save_settings' => 'Spara inställningar', - 'saved_preferences' => 'Inställningar sparade!', - 'preferences_general' => 'Allmänt', - 'preferences_frontpage' => 'Startsidan', - 'preferences_security' => 'Säkerhet', - 'preferences_layout' => 'Layout', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Visa insättningar på startskärmen', - 'pref_home_show_deposits_info' => 'Startskärmen visar redan dina utgiftskonton. Ska den även visa intäktskonton?', - 'pref_home_do_show_deposits' => 'Ja, visa dem', - 'successful_count' => 'av :count framgångsrikt', - 'list_page_size_title' => 'Sidstorlek', - 'list_page_size_help' => 'Alla listor med (konton, transaktioner, etc) visar som mest så här många per sida.', - 'list_page_size_label' => 'Sidstorlek', - 'between_dates' => '(:start och :end)', - 'pref_optional_fields_transaction' => 'Alternativa fält för transaktioner', - 'pref_optional_fields_transaction_help' => 'Per default är inte alla fält aktiverade vid skapande av en ny transaktion (underlätta röran). Nedanför går det att aktivera dessa fält om de är användbara för dig. Självklar, ett fält som är ifyllt men inaktiverat, visas oavsett denna inställning.', - 'optional_tj_date_fields' => 'Datumfält', - 'optional_tj_other_fields' => 'Andra fält', - 'optional_tj_attachment_fields' => 'Bilagefält', - 'pref_optional_tj_interest_date' => 'Räntedatum', - 'pref_optional_tj_book_date' => 'Bokföringsdatum', - 'pref_optional_tj_process_date' => 'Behandlingsdatum', - 'pref_optional_tj_due_date' => 'Förfallodatum', - 'pref_optional_tj_payment_date' => 'Betalningsdatum', - 'pref_optional_tj_invoice_date' => 'Fakturadatum', - 'pref_optional_tj_internal_reference' => 'Intern referens', - 'pref_optional_tj_notes' => 'Anteckningar', - 'pref_optional_tj_attachments' => 'Bilagor', - 'pref_optional_tj_external_url' => 'Extern URL', - 'pref_optional_tj_location' => 'Plats', - 'pref_optional_tj_links' => 'Transaktionslänkar', - 'optional_field_meta_dates' => 'Datum', - 'optional_field_meta_business' => 'Affärsverksamhet', - 'optional_field_attachments' => 'Bilagor', - 'optional_field_meta_data' => 'Valfri metadata', - 'external_url' => 'Extern URL', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Låt din webbläsare bestämma', + 'dark_mode_option_light' => 'Alltid ljust', + 'dark_mode_option_dark' => 'Alltid mörkt', + 'equal_to_language' => '(lika med språk)', + 'dark_mode_preference' => 'Mörkt läge', + 'dark_mode_preference_help' => 'Berätta för Firefly III när mörkt läge ska användas.', + 'pref_home_screen_accounts' => 'Startskäm konton', + 'pref_home_screen_accounts_help' => 'Vilka konton ska visas på startskärmen?', + 'pref_view_range' => 'Visa intervall', + 'pref_view_range_help' => 'Vissa diagram grupperas automatiskt i perioder. Dina budgetar grupperas också i perioder. Vilken period föredrar du?', + 'pref_1D' => 'En dag', + 'pref_1W' => 'En vecka', + 'pref_1M' => 'En månad', + 'pref_3M' => 'Tre månader (kvartal)', + 'pref_6M' => 'Sex månader', + 'pref_1Y' => 'Ett år', + 'pref_last365' => 'Föregående år', + 'pref_last90' => 'Senaste 90 dagarna', + 'pref_last30' => 'Senaste 30 dagarna', + 'pref_last7' => 'Senaste 7 dagarna', + 'pref_YTD' => 'Hittills i år', + 'pref_QTD' => 'Kvartal hittills', + 'pref_MTD' => 'Månad hittills', + 'pref_languages' => 'Språk', + 'pref_locale' => 'Nationella inställningar', + 'pref_languages_help' => 'Firefly III stödjer flera språk. Vilket föredrar du?', + 'pref_locale_help' => 'Firefly III låter dig ställa in andra lokala inställningar, som hur valutor, siffror och datum formateras. Poster i denna lista kanske inte stöds av ditt system. Firefly III har inte rätt datuminställningar för varje lokal; kontakta mig för förbättringar.', + 'pref_locale_no_demo' => 'Denna funktion fungerar inte för demoanvändaren.', + 'pref_custom_fiscal_year' => 'Räkneskapsårs inställningar', + 'pref_custom_fiscal_year_label' => 'Aktiverad', + 'pref_custom_fiscal_year_help' => 'I länder som använder räkneskapsår annat än 1a Januari till 31a December, går det att ändra detta och välja start / slut dagar för räkneskapsåret', + 'pref_fiscal_year_start_label' => 'Startdatum för räkneskapsår', + 'pref_two_factor_auth' => 'Tvåstegsverifiering', + 'pref_two_factor_auth_help' => 'När tvåstegsverifiering aktiveras (även känt som tvåfaktorautentisering), så lägger du på ytterligare lager säkerhet på ditt konto. Du kan logga in med något du vet (ditt lösenord) eller något du har (en verifieringskod). Verifieringskoder kan också genereras av en app på din telefon som till exempel, Authy eller Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Aktivera tvåstegsverifiering', + 'pref_two_factor_auth_disabled' => '2-stegs verifieringskod har tagits bort och inaktiverats', + 'pref_two_factor_auth_remove_it' => 'Glöm inte att ta bort kontot från din autentiseringsapp!', + 'pref_two_factor_auth_code' => 'Verifiera kod', + 'pref_two_factor_auth_code_help' => 'Skanna QR koden med en app på din telefon som till exempel Authy eller Google Authenticator och ange den genererade koden.', + 'pref_two_factor_auth_reset_code' => 'Nollställ verifieringskod', + 'pref_two_factor_auth_disable_2fa' => 'Inaktivera 2FA', + '2fa_use_secret_instead' => 'Om du inte kan scanna QR koden, använd denna hemliga istället :secret.', + '2fa_backup_codes' => 'Spara dessa backup koder för åtkomst ifall du tappar bort din enhet.', + '2fa_already_enabled' => 'Tvåfaktorsautentisering är redan aktiverat.', + 'wrong_mfa_code' => 'MFA-koden är inte giltig.', + 'pref_save_settings' => 'Spara inställningar', + 'saved_preferences' => 'Inställningar sparade!', + 'preferences_general' => 'Allmänt', + 'preferences_frontpage' => 'Startsidan', + 'preferences_security' => 'Säkerhet', + 'preferences_layout' => 'Layout', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Visa insättningar på startskärmen', + 'pref_home_show_deposits_info' => 'Startskärmen visar redan dina utgiftskonton. Ska den även visa intäktskonton?', + 'pref_home_do_show_deposits' => 'Ja, visa dem', + 'successful_count' => 'av :count framgångsrikt', + 'list_page_size_title' => 'Sidstorlek', + 'list_page_size_help' => 'Alla listor med (konton, transaktioner, etc) visar som mest så här många per sida.', + 'list_page_size_label' => 'Sidstorlek', + 'between_dates' => '(:start och :end)', + 'pref_optional_fields_transaction' => 'Alternativa fält för transaktioner', + 'pref_optional_fields_transaction_help' => 'Per default är inte alla fält aktiverade vid skapande av en ny transaktion (underlätta röran). Nedanför går det att aktivera dessa fält om de är användbara för dig. Självklar, ett fält som är ifyllt men inaktiverat, visas oavsett denna inställning.', + 'optional_tj_date_fields' => 'Datumfält', + 'optional_tj_other_fields' => 'Andra fält', + 'optional_tj_attachment_fields' => 'Bilagefält', + 'pref_optional_tj_interest_date' => 'Räntedatum', + 'pref_optional_tj_book_date' => 'Bokföringsdatum', + 'pref_optional_tj_process_date' => 'Behandlingsdatum', + 'pref_optional_tj_due_date' => 'Förfallodatum', + 'pref_optional_tj_payment_date' => 'Betalningsdatum', + 'pref_optional_tj_invoice_date' => 'Fakturadatum', + 'pref_optional_tj_internal_reference' => 'Intern referens', + 'pref_optional_tj_notes' => 'Anteckningar', + 'pref_optional_tj_attachments' => 'Bilagor', + 'pref_optional_tj_external_url' => 'Extern URL', + 'pref_optional_tj_location' => 'Plats', + 'pref_optional_tj_links' => 'Transaktionslänkar', + 'optional_field_meta_dates' => 'Datum', + 'optional_field_meta_business' => 'Affärsverksamhet', + 'optional_field_attachments' => 'Bilagor', + 'optional_field_meta_data' => 'Valfri metadata', + 'external_url' => 'Extern URL', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'Alla dina andra sessioner har loggats ut.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Ta bort ALLA dina budgetar', - 'delete_all_categories' => 'Ta bort ALLA dina kategorier', - 'delete_all_tags' => 'Ta bort ALLA etiketter', - 'delete_all_bills' => 'Ta bort ALLA dina räkningar', - 'delete_all_piggy_banks' => 'Ta bort ALLA dina spargrisar', - 'delete_all_rules' => 'Ta bort ALLA dina regler', - 'delete_all_recurring' => 'Ta bort ALLA dina återkommande transaktioner', - 'delete_all_object_groups' => 'Ta bort ALLA dina objektgrupper', - 'delete_all_accounts' => 'Ta bort ALLA dina konton', - 'delete_all_asset_accounts' => 'Ta bort ALLA dina tillgångskonton', - 'delete_all_expense_accounts' => 'Ta bort ALLA dina utgiftskonton', - 'delete_all_revenue_accounts' => 'Ta bort ALLA dina intäktskonton', - 'delete_all_liabilities' => 'Ta bort ALLA dina skulder', - 'delete_all_transactions' => 'Ta bort ALLA dina transaktioner', - 'delete_all_withdrawals' => 'Ta bort ALLA dina uttag', - 'delete_all_deposits' => 'Ta bort ALLA dina insättningar', - 'delete_all_transfers' => 'Ta bort ALLA dina överföringar', - 'also_delete_transactions' => 'Att ta bort konton kommer också ta bort ALLA associerade uttag, insättningar och överföringar!', - 'deleted_all_budgets' => 'Alla budgetar har raderats', - 'deleted_all_categories' => 'Alla kategorier har tagits bort', - 'deleted_all_tags' => 'Alla etiketter har tagits bort', - 'deleted_all_bills' => 'Alla räkningar har tagits bort', - 'deleted_all_piggy_banks' => 'Alla spargrisar har tagits bort', - 'deleted_all_rules' => 'Alla regler och regelgrupper har tagits bort', - 'deleted_all_object_groups' => 'Alla grupper har tagits bort', - 'deleted_all_accounts' => 'Alla konton har tagits bort', - 'deleted_all_asset_accounts' => 'Alla tillgångskonton har tagits bort', - 'deleted_all_expense_accounts' => 'Alla utgiftskonton har tagits bort', - 'deleted_all_revenue_accounts' => 'Alla intäktskonton har tagits bort', - 'deleted_all_liabilities' => 'Alla skulder har tagits bort', - 'deleted_all_transactions' => 'Alla transaktioner har tagits bort', - 'deleted_all_withdrawals' => 'Alla uttag har tagits bort', - 'deleted_all_deposits' => 'Alla insättningar har tagits bort', - 'deleted_all_transfers' => 'Alla överföringar har tagits bort', - 'deleted_all_recurring' => 'Alla återkommande transaktioner har tagits bort', - 'change_your_password' => 'Ändra ditt lösenord', - 'delete_account' => 'Ta bort konto', - 'current_password' => 'Nuvarande lösenord', - 'new_password' => 'Nytt lösenord', - 'new_password_again' => 'Repetera lösenord', - 'delete_your_account' => 'Radera ditt konto', - 'delete_your_account_help' => 'Radering av ditt konto tar även bort alla konton, transaktioner, allt du kan ha sparat i Firefly III. Det kommer att vara BORTA.', - 'delete_your_account_password' => 'Ange ditt lösenord för att fortsätta.', - 'password' => 'Lösenord', - 'are_you_sure' => 'Är du säker? Du kan inte ångra detta.', - 'delete_account_button' => 'TA BORT ditt konto', - 'invalid_current_password' => 'Ogiltigt nuvarande lösenord!', - 'password_changed' => 'Lösenordet har ändrats!', - 'should_change' => 'Tanken är att byta ditt lösenord.', - 'invalid_password' => 'Ogiltigt lösenord!', - 'what_is_pw_security' => 'Vad är "verifiera lösenordssäkerhet"?', - 'secure_pw_title' => 'Hur man väljer ett säkert lösenord', - 'forgot_password_response' => 'Tack. Om ett konto finns med denna e-postadress, hittar du instruktioner i din inkorg.', - 'secure_pw_history' => 'Det går inte en vecka utan att man läser i nyheterna om en sida som förlorat lösenord till sina användare. Hackare och tjuvar använder dessa lösenord för att stjäla din privata information. Denna information är värdefull.', - 'secure_pw_ff' => 'Använder du samma lösenord överallt på internet? Om en av dessa sidor förlorar ditt lösenord, så har hackare åtkomst till all din data. Firefly III förlitar sig att du väljer ett starkt och unikt lösenord för att skydda dina ekonomiska uppgifter.', - 'secure_pw_check_box' => 'För att hjälpa dig så kan Firefly III kontrollera om lösenordet du vill använda blivit stulet tidigare. Om detta är fallet, kommer Firefly III råda dig att INTE använda det lösenordet.', - 'secure_pw_working_title' => 'Hur fungerar det?', - 'secure_pw_working' => 'Kryssa i rutan, Firefly III kommer att skicka de fem första tecknen i SHA1 hash av ditt lösenord till webbsidan av Troy Hunt för att se om det finns med på listan. Detta kommer att stoppa dig från att använda osäkra lösenord vilket rekommenderas i den senaste NIST Special Publication om ämnet.', - 'secure_pw_should' => 'Borde jag kryssa i rutan?', - 'secure_pw_long_password' => 'Ja. Verifiera alltid att ditt lösenord är säkert.', - 'command_line_token' => 'Kommandoradstoken', - 'explain_command_line_token' => 'Du behöver denna token för att utföra kommandoradsalternativ, till exempel exportera data. Utan det kommer det känsliga kommandot inte att fungera. Dela inte din kommandoradssymbol. Ingen kommer att be er om detta tecken, inte ens jag. Om du är rädd för att du förlorade detta, eller när du är paranoid, regenerera denna token med hjälp av knappen.', - 'regenerate_command_line_token' => 'Återskapa kommandoradstoken', - 'token_regenerated' => 'En ny kommandoradstoken har skapats', - 'change_your_email' => 'Ändra din e-postadress', - 'email_verification' => 'Ett e-postmeddelande kommer att skickas till din gamla OCH nya e-postadress. Av säkerhetsskäl kommer du inte att kunna logga in förrän du verifierar din nya e-postadress. Om du är osäker på om din Firefly III-installation kan skicka e-post, använd inte den här funktionen. Om du är administratör kan du testa detta i Administration.', - 'email_changed_logout' => 'Tills e-postadress blivit verifierad, så kan du inte logga in.', - 'login_with_new_email' => 'Du kan nu logga in med din nya epost-adress.', - 'login_with_old_email' => 'Du kan nu logga in med din gamla epost-adress igen.', - 'login_provider_local_only' => 'Denna åtgärd är inte tillgänlig vid autentisiering genom ":login_provider".', - 'external_user_mgt_disabled' => 'Denna åtgärd är inte tillgänglig när Firefly III inte är ansvarig för användarhantering eller autentiseringshantering.', - 'external_auth_disabled' => 'Denna åtgärd är inte tillgänglig när Firefly III inte är ansvarig för autentiseringshantering.', - 'delete_local_info_only' => "Eftersom Firefly III inte är ansvarig för användarhantering eller autentiseringshantering, kommer denna funktion endast ta bort lokal Firefly III-information.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth klienter', - 'profile_oauth_no_clients' => 'Du har inte skapat några OAuth klienter.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Klienter', - 'profile_oauth_client_id' => 'Klient ID', - 'profile_oauth_client_name' => 'Namn', - 'profile_oauth_client_secret' => 'Hemlighet', - 'profile_oauth_create_new_client' => 'Skapa ny klient', - 'profile_oauth_create_client' => 'Skapa klient', - 'profile_oauth_edit_client' => 'Redigera klient', - 'profile_oauth_name_help' => 'Något som dina användare kommer att känna igen och lita på.', - 'profile_oauth_redirect_url' => 'Omdirigera URL', - 'profile_oauth_redirect_url_help' => 'Din applikations auktorisering callback URL.', - 'profile_authorized_apps' => 'Auktoriserade applikationer', - 'profile_authorized_clients' => 'Auktoriserade klienter', - 'profile_scopes' => 'Omfattningar', - 'profile_revoke' => 'Återkalla', - 'profile_oauth_client_secret_title' => 'Klienthemlighet', - 'profile_oauth_client_secret_expl' => 'Här är din nya klient hemlighet. Detta är den enda gången det kommer att visas så förlora inte det! Du kan nu använda denna hemlighet för att göra API-förfrågningar.', - 'profile_personal_access_tokens' => 'Personliga åtkomst-Tokens', - 'profile_personal_access_token' => 'Personlig åtkomsttoken', - 'profile_oauth_confidential' => 'Konfidentiell', - 'profile_oauth_confidential_help' => 'Kräv att klienten autentiserar med en hemlighet. Konfidentiella klienter kan hålla autentiseringsuppgifter på ett säkert sätt utan att utsätta dem för obehöriga parter. Publika applikationer, som skrivbord eller JavaScript-SPA-applikationer, kan inte hålla hemligheter på ett säkert sätt.', - 'profile_personal_access_token_explanation' => 'Här är din nya personliga tillgångs token. Detta är den enda gången det kommer att visas så förlora inte det! Du kan nu använda denna token för att göra API-förfrågningar.', - 'profile_no_personal_access_token' => 'Du har inte skapat några personliga åtkomsttokens.', - 'profile_create_new_token' => 'Skapa ny token', - 'profile_create_token' => 'Skapa token', - 'profile_create' => 'Skapa', - 'profile_save_changes' => 'Spara ändringar', - 'profile_whoops' => 'Hoppsan!', - 'profile_something_wrong' => 'Något gick fel!', - 'profile_try_again' => 'Något gick fel. Försök igen.', - 'amounts' => 'Belopp', - 'multi_account_warning_unknown' => 'Beroende på vilken typ av transaktion du skapar, källan och/eller destinationskontot för efterföljande delningar kan åsidosättas av vad som än definieras i den första delningen av transaktionen.', - 'multi_account_warning_withdrawal' => 'Tänk på att källkontot för efterföljande uppdelningar kommer att upphävas av vad som än definieras i den första uppdelningen av uttaget.', - 'multi_account_warning_deposit' => 'Tänk på att destinationskontot för efterföljande uppdelningar kommer att styras av vad som än definieras i den första uppdelningen av insättningen.', - 'multi_account_warning_transfer' => 'Tänk på att käll + destinationskonto av efterföljande delningar kommer att styras av vad som definieras i den första uppdelningen av överföringen.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'Alla dina andra sessioner har loggats ut.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Ta bort ALLA dina budgetar', + 'delete_all_categories' => 'Ta bort ALLA dina kategorier', + 'delete_all_tags' => 'Ta bort ALLA etiketter', + 'delete_all_bills' => 'Ta bort ALLA dina räkningar', + 'delete_all_piggy_banks' => 'Ta bort ALLA dina spargrisar', + 'delete_all_rules' => 'Ta bort ALLA dina regler', + 'delete_all_recurring' => 'Ta bort ALLA dina återkommande transaktioner', + 'delete_all_object_groups' => 'Ta bort ALLA dina objektgrupper', + 'delete_all_accounts' => 'Ta bort ALLA dina konton', + 'delete_all_asset_accounts' => 'Ta bort ALLA dina tillgångskonton', + 'delete_all_expense_accounts' => 'Ta bort ALLA dina utgiftskonton', + 'delete_all_revenue_accounts' => 'Ta bort ALLA dina intäktskonton', + 'delete_all_liabilities' => 'Ta bort ALLA dina skulder', + 'delete_all_transactions' => 'Ta bort ALLA dina transaktioner', + 'delete_all_withdrawals' => 'Ta bort ALLA dina uttag', + 'delete_all_deposits' => 'Ta bort ALLA dina insättningar', + 'delete_all_transfers' => 'Ta bort ALLA dina överföringar', + 'also_delete_transactions' => 'Att ta bort konton kommer också ta bort ALLA associerade uttag, insättningar och överföringar!', + 'deleted_all_budgets' => 'Alla budgetar har raderats', + 'deleted_all_categories' => 'Alla kategorier har tagits bort', + 'deleted_all_tags' => 'Alla etiketter har tagits bort', + 'deleted_all_bills' => 'Alla räkningar har tagits bort', + 'deleted_all_piggy_banks' => 'Alla spargrisar har tagits bort', + 'deleted_all_rules' => 'Alla regler och regelgrupper har tagits bort', + 'deleted_all_object_groups' => 'Alla grupper har tagits bort', + 'deleted_all_accounts' => 'Alla konton har tagits bort', + 'deleted_all_asset_accounts' => 'Alla tillgångskonton har tagits bort', + 'deleted_all_expense_accounts' => 'Alla utgiftskonton har tagits bort', + 'deleted_all_revenue_accounts' => 'Alla intäktskonton har tagits bort', + 'deleted_all_liabilities' => 'Alla skulder har tagits bort', + 'deleted_all_transactions' => 'Alla transaktioner har tagits bort', + 'deleted_all_withdrawals' => 'Alla uttag har tagits bort', + 'deleted_all_deposits' => 'Alla insättningar har tagits bort', + 'deleted_all_transfers' => 'Alla överföringar har tagits bort', + 'deleted_all_recurring' => 'Alla återkommande transaktioner har tagits bort', + 'change_your_password' => 'Ändra ditt lösenord', + 'delete_account' => 'Ta bort konto', + 'current_password' => 'Nuvarande lösenord', + 'new_password' => 'Nytt lösenord', + 'new_password_again' => 'Repetera lösenord', + 'delete_your_account' => 'Radera ditt konto', + 'delete_your_account_help' => 'Radering av ditt konto tar även bort alla konton, transaktioner, allt du kan ha sparat i Firefly III. Det kommer att vara BORTA.', + 'delete_your_account_password' => 'Ange ditt lösenord för att fortsätta.', + 'password' => 'Lösenord', + 'are_you_sure' => 'Är du säker? Du kan inte ångra detta.', + 'delete_account_button' => 'TA BORT ditt konto', + 'invalid_current_password' => 'Ogiltigt nuvarande lösenord!', + 'password_changed' => 'Lösenordet har ändrats!', + 'should_change' => 'Tanken är att byta ditt lösenord.', + 'invalid_password' => 'Ogiltigt lösenord!', + 'what_is_pw_security' => 'Vad är "verifiera lösenordssäkerhet"?', + 'secure_pw_title' => 'Hur man väljer ett säkert lösenord', + 'forgot_password_response' => 'Tack. Om ett konto finns med denna e-postadress, hittar du instruktioner i din inkorg.', + 'secure_pw_history' => 'Det går inte en vecka utan att man läser i nyheterna om en sida som förlorat lösenord till sina användare. Hackare och tjuvar använder dessa lösenord för att stjäla din privata information. Denna information är värdefull.', + 'secure_pw_ff' => 'Använder du samma lösenord överallt på internet? Om en av dessa sidor förlorar ditt lösenord, så har hackare åtkomst till all din data. Firefly III förlitar sig att du väljer ett starkt och unikt lösenord för att skydda dina ekonomiska uppgifter.', + 'secure_pw_check_box' => 'För att hjälpa dig så kan Firefly III kontrollera om lösenordet du vill använda blivit stulet tidigare. Om detta är fallet, kommer Firefly III råda dig att INTE använda det lösenordet.', + 'secure_pw_working_title' => 'Hur fungerar det?', + 'secure_pw_working' => 'Kryssa i rutan, Firefly III kommer att skicka de fem första tecknen i SHA1 hash av ditt lösenord till webbsidan av Troy Hunt för att se om det finns med på listan. Detta kommer att stoppa dig från att använda osäkra lösenord vilket rekommenderas i den senaste NIST Special Publication om ämnet.', + 'secure_pw_should' => 'Borde jag kryssa i rutan?', + 'secure_pw_long_password' => 'Ja. Verifiera alltid att ditt lösenord är säkert.', + 'command_line_token' => 'Kommandoradstoken', + 'explain_command_line_token' => 'Du behöver denna token för att utföra kommandoradsalternativ, till exempel exportera data. Utan det kommer det känsliga kommandot inte att fungera. Dela inte din kommandoradssymbol. Ingen kommer att be er om detta tecken, inte ens jag. Om du är rädd för att du förlorade detta, eller när du är paranoid, regenerera denna token med hjälp av knappen.', + 'regenerate_command_line_token' => 'Återskapa kommandoradstoken', + 'token_regenerated' => 'En ny kommandoradstoken har skapats', + 'change_your_email' => 'Ändra din e-postadress', + 'email_verification' => 'Ett e-postmeddelande kommer att skickas till din gamla OCH nya e-postadress. Av säkerhetsskäl kommer du inte att kunna logga in förrän du verifierar din nya e-postadress. Om du är osäker på om din Firefly III-installation kan skicka e-post, använd inte den här funktionen. Om du är administratör kan du testa detta i Administration.', + 'email_changed_logout' => 'Tills e-postadress blivit verifierad, så kan du inte logga in.', + 'login_with_new_email' => 'Du kan nu logga in med din nya epost-adress.', + 'login_with_old_email' => 'Du kan nu logga in med din gamla epost-adress igen.', + 'login_provider_local_only' => 'Denna åtgärd är inte tillgänlig vid autentisiering genom ":login_provider".', + 'external_user_mgt_disabled' => 'Denna åtgärd är inte tillgänglig när Firefly III inte är ansvarig för användarhantering eller autentiseringshantering.', + 'external_auth_disabled' => 'Denna åtgärd är inte tillgänglig när Firefly III inte är ansvarig för autentiseringshantering.', + 'delete_local_info_only' => 'Eftersom Firefly III inte är ansvarig för användarhantering eller autentiseringshantering, kommer denna funktion endast ta bort lokal Firefly III-information.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth klienter', + 'profile_oauth_no_clients' => 'Du har inte skapat några OAuth klienter.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Klienter', + 'profile_oauth_client_id' => 'Klient ID', + 'profile_oauth_client_name' => 'Namn', + 'profile_oauth_client_secret' => 'Hemlighet', + 'profile_oauth_create_new_client' => 'Skapa ny klient', + 'profile_oauth_create_client' => 'Skapa klient', + 'profile_oauth_edit_client' => 'Redigera klient', + 'profile_oauth_name_help' => 'Något som dina användare kommer att känna igen och lita på.', + 'profile_oauth_redirect_url' => 'Omdirigera URL', + 'profile_oauth_redirect_url_help' => 'Din applikations auktorisering callback URL.', + 'profile_authorized_apps' => 'Auktoriserade applikationer', + 'profile_authorized_clients' => 'Auktoriserade klienter', + 'profile_scopes' => 'Omfattningar', + 'profile_revoke' => 'Återkalla', + 'profile_oauth_client_secret_title' => 'Klienthemlighet', + 'profile_oauth_client_secret_expl' => 'Här är din nya klient hemlighet. Detta är den enda gången det kommer att visas så förlora inte det! Du kan nu använda denna hemlighet för att göra API-förfrågningar.', + 'profile_personal_access_tokens' => 'Personliga åtkomst-Tokens', + 'profile_personal_access_token' => 'Personlig åtkomsttoken', + 'profile_oauth_confidential' => 'Konfidentiell', + 'profile_oauth_confidential_help' => 'Kräv att klienten autentiserar med en hemlighet. Konfidentiella klienter kan hålla autentiseringsuppgifter på ett säkert sätt utan att utsätta dem för obehöriga parter. Publika applikationer, som skrivbord eller JavaScript-SPA-applikationer, kan inte hålla hemligheter på ett säkert sätt.', + 'profile_personal_access_token_explanation' => 'Här är din nya personliga tillgångs token. Detta är den enda gången det kommer att visas så förlora inte det! Du kan nu använda denna token för att göra API-förfrågningar.', + 'profile_no_personal_access_token' => 'Du har inte skapat några personliga åtkomsttokens.', + 'profile_create_new_token' => 'Skapa ny token', + 'profile_create_token' => 'Skapa token', + 'profile_create' => 'Skapa', + 'profile_save_changes' => 'Spara ändringar', + 'profile_whoops' => 'Hoppsan!', + 'profile_something_wrong' => 'Något gick fel!', + 'profile_try_again' => 'Något gick fel. Försök igen.', + 'amounts' => 'Belopp', + 'multi_account_warning_unknown' => 'Beroende på vilken typ av transaktion du skapar, källan och/eller destinationskontot för efterföljande delningar kan åsidosättas av vad som än definieras i den första delningen av transaktionen.', + 'multi_account_warning_withdrawal' => 'Tänk på att källkontot för efterföljande uppdelningar kommer att upphävas av vad som än definieras i den första uppdelningen av uttaget.', + 'multi_account_warning_deposit' => 'Tänk på att destinationskontot för efterföljande uppdelningar kommer att styras av vad som än definieras i den första uppdelningen av insättningen.', + 'multi_account_warning_transfer' => 'Tänk på att käll + destinationskonto av efterföljande delningar kommer att styras av vad som definieras i den första uppdelningen av överföringen.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Exportera data från Firefly III', - 'export_data_menu' => 'Exportera data', - 'export_data_bc' => 'Exportera data från Firefly III', - 'export_data_main_title' => 'Exportera data från Firefly III', - 'export_data_expl' => 'Denna länk låter dig exportera alla transaktioner + meta data från Firefly III. Se hjälpen (högst upp till höger (?)-ikonen) för mer information om processen.', - 'export_data_all_transactions' => 'Exportera alla transaktioner', - 'export_data_advanced_expl' => 'Om du behöver en mer avancerad eller specifik typ av export, läs hjälpen om hur man använder konsolkommandot php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Exportera data från Firefly III', + 'export_data_menu' => 'Exportera data', + 'export_data_bc' => 'Exportera data från Firefly III', + 'export_data_main_title' => 'Exportera data från Firefly III', + 'export_data_expl' => 'Denna länk låter dig exportera alla transaktioner + meta data från Firefly III. Se hjälpen (högst upp till höger (?)-ikonen) för mer information om processen.', + 'export_data_all_transactions' => 'Exportera alla transaktioner', + 'export_data_advanced_expl' => 'Om du behöver en mer avancerad eller specifik typ av export, läs hjälpen om hur man använder konsolkommandot php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'En bilaga|:count bilagor', - 'attachments' => 'Bilagor', - 'edit_attachment' => 'Ändra bilaga ":name"', - 'update_attachment' => 'Uppdatera bifogad fil', - 'delete_attachment' => 'Ta bort bilaga ":name"', - 'attachment_deleted' => 'Tog bort bilaga ":name"', - 'liabilities_deleted' => 'Raderat skuld ":name"', - 'attachment_updated' => 'Uppdaterat bilaga ":name"', - 'upload_max_file_size' => 'Maximal filstorlek är :size', - 'list_all_attachments' => 'Lista alla bilagor', + 'nr_of_attachments' => 'En bilaga|:count bilagor', + 'attachments' => 'Bilagor', + 'edit_attachment' => 'Ändra bilaga ":name"', + 'update_attachment' => 'Uppdatera bifogad fil', + 'delete_attachment' => 'Ta bort bilaga ":name"', + 'attachment_deleted' => 'Tog bort bilaga ":name"', + 'liabilities_deleted' => 'Raderat skuld ":name"', + 'attachment_updated' => 'Uppdaterat bilaga ":name"', + 'upload_max_file_size' => 'Maximal filstorlek är :size', + 'list_all_attachments' => 'Lista alla bilagor', // transaction index - 'title_expenses' => 'Utgifter', - 'title_withdrawal' => 'Utgifter', - 'title_revenue' => 'Intäkter / inkomst', - 'title_deposit' => 'Intäkter / inkomst', - 'title_transfer' => 'Överföringar', - 'title_transfers' => 'Överföringar', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Utgifter', + 'title_withdrawal' => 'Utgifter', + 'title_revenue' => 'Intäkter / inkomst', + 'title_deposit' => 'Intäkter / inkomst', + 'title_transfer' => 'Överföringar', + 'title_transfers' => 'Överföringar', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Transaktionen är redan ett uttag', - 'convert_is_already_type_Deposit' => 'Transaktionen är redan en insättning', - 'convert_is_already_type_Transfer' => 'Transaktionen är redan en överföring', - 'convert_to_Withdrawal' => 'Konvertera ":description" till ett uttag', - 'convert_to_Deposit' => 'Konvertera ":description" till en insättning', - 'convert_to_Transfer' => 'Konvertera ":description" till en överföring', - 'convert_options_WithdrawalDeposit' => 'Konvertera ett uttag till en insättning', - 'convert_options_WithdrawalTransfer' => 'Konvertera ett uttag till en överföring', - 'convert_options_DepositTransfer' => 'Konvertera en insättning till en överföring', - 'convert_options_DepositWithdrawal' => 'Konvertera en insättning till ett uttag', - 'convert_options_TransferWithdrawal' => 'Konvertera en överföring till ett uttag', - 'convert_options_TransferDeposit' => 'Konvertera överföring till en insättning', - 'convert_Withdrawal_to_deposit' => 'Konvertera detta uttg till en insättning', - 'convert_Withdrawal_to_transfer' => 'Konvertera detta uttag till en överföring', - 'convert_Deposit_to_withdrawal' => 'Konvertera denna insättning till ett uttag', - 'convert_Deposit_to_transfer' => 'Konvertera denna insättning till överföring', - 'convert_Transfer_to_deposit' => 'Konvertera överföring till en insättning', - 'convert_Transfer_to_withdrawal' => 'Konvertera överföring till ett uttag', - 'convert_please_set_revenue_source' => 'Vänligen välj intäktskonto där pengarna kommer från.', - 'convert_please_set_asset_destination' => 'Välj tillgångskonto pengarna kommer att gå till.', - 'convert_please_set_expense_destination' => 'Välj utgiftskonto som pengarna går till.', - 'convert_please_set_asset_source' => 'Välj tillgångskonto pengarna kommer från.', - 'convert_expl_w_d' => 'När du konverterar från ett uttag till en insättning, kommer pengarna att deponeras till det visade destinationskontot, istället för att tas ut från det. När du konverterar från ett uttag till en insättning, kommer pengarna att deponeras till de visade destinationskontona, istället för att tas ut från dem.', - 'convert_expl_w_t' => 'När du konverterar ett uttag till en överföring, pengarna överförs från källkontot till annat tillgångs- eller ansvarskonto istället för att spenderas på det ursprungliga utgiftskontot.|När du konverterar ett uttag till en överföring, pengarna överförs från källräkenskaperna till andra tillgångs- eller ansvarskonton istället för att spenderas på de ursprungliga kostnadskontona.', - 'convert_expl_d_w' => 'När du konverterar en insättning till ett uttag kommer pengarna att tas ut från det visade källkontot istället för att deponeras till det.|När du konverterar en insättning till ett uttag kommer pengarna att tas ut från de visade källkontona istället för att deponeras till dem.', - 'convert_expl_d_t' => 'När du konverterar en insättning till en överföring, pengarna kommer att sättas in på det angivna destinationskontot från något av ditt tillgångs- eller ansvarskonto.|När du konverterar en insättning till en överföring, pengarna kommer att sättas in på de angivna destinationskontona från någon av dina tillgångs- eller ansvarskonton.', - 'convert_expl_t_w' => 'När du konverterar en överföring till ett uttag kommer pengarna att spenderas på det destinationskonto du anger här, istället för att överföras bort.|När du konverterar en överföring till ett uttag kommer pengarna att spenderas på de destinationskonton du anger här, istället för att överföras bort.', - 'convert_expl_t_d' => 'När du konverterar från ett uttag till en insättning, kommer pengarna att deponeras till det visade destinationskontot, istället för att tas ut från det.|När du konverterar från ett uttag till en insättning, kommer pengarna att deponeras till de visade destinationskontona, istället för att tas ut från dem.', - 'convert_select_sources' => 'För att slutföra konverteringen, ange det nya källkontot nedan.|För att slutföra konverteringen, vänligen ange de nya källkontona nedan.', - 'convert_select_destinations' => 'För att slutföra konverteringen, välj det nya destinationskontot nedan.|För att slutföra konverteringen, vänligen välj de nya destinationskontona nedan.', - 'converted_to_Withdrawal' => 'Transaktion har konverterats till ett uttag', - 'converted_to_Deposit' => 'Transaktion har konverterats till en insättning', - 'converted_to_Transfer' => 'Transaktionen har konverterats till en överföring', - 'invalid_convert_selection' => 'Valt konto används redan i transaktion eller saknas helt.', - 'source_or_dest_invalid' => 'Finner inte rätt transaktionsdetaljer. Konvertering inte möjlig.', - 'convert_to_withdrawal' => 'Konvertera till ett uttag', - 'convert_to_deposit' => 'Konvertera till en insättning', - 'convert_to_transfer' => 'Konvertera till en överföring', + 'convert_is_already_type_Withdrawal' => 'Transaktionen är redan ett uttag', + 'convert_is_already_type_Deposit' => 'Transaktionen är redan en insättning', + 'convert_is_already_type_Transfer' => 'Transaktionen är redan en överföring', + 'convert_to_Withdrawal' => 'Konvertera ":description" till ett uttag', + 'convert_to_Deposit' => 'Konvertera ":description" till en insättning', + 'convert_to_Transfer' => 'Konvertera ":description" till en överföring', + 'convert_options_WithdrawalDeposit' => 'Konvertera ett uttag till en insättning', + 'convert_options_WithdrawalTransfer' => 'Konvertera ett uttag till en överföring', + 'convert_options_DepositTransfer' => 'Konvertera en insättning till en överföring', + 'convert_options_DepositWithdrawal' => 'Konvertera en insättning till ett uttag', + 'convert_options_TransferWithdrawal' => 'Konvertera en överföring till ett uttag', + 'convert_options_TransferDeposit' => 'Konvertera överföring till en insättning', + 'convert_Withdrawal_to_deposit' => 'Konvertera detta uttg till en insättning', + 'convert_Withdrawal_to_transfer' => 'Konvertera detta uttag till en överföring', + 'convert_Deposit_to_withdrawal' => 'Konvertera denna insättning till ett uttag', + 'convert_Deposit_to_transfer' => 'Konvertera denna insättning till överföring', + 'convert_Transfer_to_deposit' => 'Konvertera överföring till en insättning', + 'convert_Transfer_to_withdrawal' => 'Konvertera överföring till ett uttag', + 'convert_please_set_revenue_source' => 'Vänligen välj intäktskonto där pengarna kommer från.', + 'convert_please_set_asset_destination' => 'Välj tillgångskonto pengarna kommer att gå till.', + 'convert_please_set_expense_destination' => 'Välj utgiftskonto som pengarna går till.', + 'convert_please_set_asset_source' => 'Välj tillgångskonto pengarna kommer från.', + 'convert_expl_w_d' => 'När du konverterar från ett uttag till en insättning, kommer pengarna att deponeras till det visade destinationskontot, istället för att tas ut från det. När du konverterar från ett uttag till en insättning, kommer pengarna att deponeras till de visade destinationskontona, istället för att tas ut från dem.', + 'convert_expl_w_t' => 'När du konverterar ett uttag till en överföring, pengarna överförs från källkontot till annat tillgångs- eller ansvarskonto istället för att spenderas på det ursprungliga utgiftskontot.|När du konverterar ett uttag till en överföring, pengarna överförs från källräkenskaperna till andra tillgångs- eller ansvarskonton istället för att spenderas på de ursprungliga kostnadskontona.', + 'convert_expl_d_w' => 'När du konverterar en insättning till ett uttag kommer pengarna att tas ut från det visade källkontot istället för att deponeras till det.|När du konverterar en insättning till ett uttag kommer pengarna att tas ut från de visade källkontona istället för att deponeras till dem.', + 'convert_expl_d_t' => 'När du konverterar en insättning till en överföring, pengarna kommer att sättas in på det angivna destinationskontot från något av ditt tillgångs- eller ansvarskonto.|När du konverterar en insättning till en överföring, pengarna kommer att sättas in på de angivna destinationskontona från någon av dina tillgångs- eller ansvarskonton.', + 'convert_expl_t_w' => 'När du konverterar en överföring till ett uttag kommer pengarna att spenderas på det destinationskonto du anger här, istället för att överföras bort.|När du konverterar en överföring till ett uttag kommer pengarna att spenderas på de destinationskonton du anger här, istället för att överföras bort.', + 'convert_expl_t_d' => 'När du konverterar från ett uttag till en insättning, kommer pengarna att deponeras till det visade destinationskontot, istället för att tas ut från det.|När du konverterar från ett uttag till en insättning, kommer pengarna att deponeras till de visade destinationskontona, istället för att tas ut från dem.', + 'convert_select_sources' => 'För att slutföra konverteringen, ange det nya källkontot nedan.|För att slutföra konverteringen, vänligen ange de nya källkontona nedan.', + 'convert_select_destinations' => 'För att slutföra konverteringen, välj det nya destinationskontot nedan.|För att slutföra konverteringen, vänligen välj de nya destinationskontona nedan.', + 'converted_to_Withdrawal' => 'Transaktion har konverterats till ett uttag', + 'converted_to_Deposit' => 'Transaktion har konverterats till en insättning', + 'converted_to_Transfer' => 'Transaktionen har konverterats till en överföring', + 'invalid_convert_selection' => 'Valt konto används redan i transaktion eller saknas helt.', + 'source_or_dest_invalid' => 'Finner inte rätt transaktionsdetaljer. Konvertering inte möjlig.', + 'convert_to_withdrawal' => 'Konvertera till ett uttag', + 'convert_to_deposit' => 'Konvertera till en insättning', + 'convert_to_transfer' => 'Konvertera till en överföring', // create new stuff: - 'create_new_withdrawal' => 'Skapa ett nytt uttag', - 'create_new_deposit' => 'Skapa en ny insättning', - 'create_new_transfer' => 'Skapa en ny överföring', - 'create_new_asset' => 'Skapa ett nytt tillgångskonto', - 'create_new_liabilities' => 'Skapa ny skuld', - 'create_new_expense' => 'Skapa ett nytt utgiftskonto', - 'create_new_revenue' => 'Skapa ett nytt intäktskonto', - 'create_new_piggy_bank' => 'Skapa en ny spargris', - 'create_new_bill' => 'Skapa en ny nota', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Skapa ett nytt uttag', + 'create_new_deposit' => 'Skapa en ny insättning', + 'create_new_transfer' => 'Skapa en ny överföring', + 'create_new_asset' => 'Skapa ett nytt tillgångskonto', + 'create_new_liabilities' => 'Skapa ny skuld', + 'create_new_expense' => 'Skapa ett nytt utgiftskonto', + 'create_new_revenue' => 'Skapa ett nytt intäktskonto', + 'create_new_piggy_bank' => 'Skapa en ny spargris', + 'create_new_bill' => 'Skapa en ny nota', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Skapa en ny valuta', - 'store_currency' => 'Lagra en ny valuta', - 'update_currency' => 'Uppdatera valuta', - 'new_default_currency' => ':name är nu standard valuta.', - 'cannot_delete_currency' => 'Kan ej ta bort :name då den fortfarande används.', - 'cannot_delete_fallback_currency' => ':name är systemets reservvaluta och kan inte tas bort.', - 'cannot_disable_currency_journals' => 'Kan inte inaktivera :name då transaktioner fortfarande använder den.', - 'cannot_disable_currency_last_left' => 'Kan inte inaktivera :name efter det är den sista aktiverade valutan.', - 'cannot_disable_currency_account_meta' => 'Kan inte inaktivera :name, används i tillgångskonton.', - 'cannot_disable_currency_bills' => 'Kan inte inaktivera :name, används i räkningar.', - 'cannot_disable_currency_recurring' => 'Kan inte inaktivera :name, används i återkommande transaktioner.', - 'cannot_disable_currency_available_budgets' => 'Kan inte inaktivera :name, används i tillgängliga budgetar.', - 'cannot_disable_currency_budget_limits' => 'Kan inte inaktivera :name, används i budgetgränser.', - 'cannot_disable_currency_current_default' => 'Kan inte inaktivera :name, används som aktuell standardvaluta.', - 'cannot_disable_currency_system_fallback' => 'Kan inte inaktivera :name, är systemets standardvaluta.', - 'disable_EUR_side_effects' => 'Euron är systemets nödfallsvaluta. Inaktivering kan ha oavsiktliga bieffekter och kan upphäva din garanti.', - 'deleted_currency' => 'Valuta :name borttagen', - 'created_currency' => 'Valuta :name skapad', - 'could_not_store_currency' => 'Kunde inte lagra den nya valutan.', - 'updated_currency' => 'Valuta :name uppdaterad', - 'ask_site_owner' => 'Be :owner att lägga till, ta bort eller ändra valutor.', - 'currencies_intro' => 'Firefly III stödjer olika valutor vilket du kan ställa in här.', - 'make_default_currency' => 'Gör till standard', - 'default_currency' => 'standard', - 'currency_is_disabled' => 'Inaktiverad', - 'enable_currency' => 'Aktivera', - 'disable_currency' => 'Inaktivera', - 'currencies_default_disabled' => 'De flesta valutor är inaktiverade som standard. För att använda dem, så måste de aktiveras först.', - 'currency_is_now_enabled' => 'Valuta ":name" har aktiverats', - 'currency_is_now_disabled' => 'Valuta ":name" har inaktiverats', + 'create_currency' => 'Skapa en ny valuta', + 'store_currency' => 'Lagra en ny valuta', + 'update_currency' => 'Uppdatera valuta', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Kan ej ta bort :name då den fortfarande används.', + 'cannot_delete_fallback_currency' => ':name är systemets reservvaluta och kan inte tas bort.', + 'cannot_disable_currency_journals' => 'Kan inte inaktivera :name då transaktioner fortfarande använder den.', + 'cannot_disable_currency_last_left' => 'Kan inte inaktivera :name efter det är den sista aktiverade valutan.', + 'cannot_disable_currency_account_meta' => 'Kan inte inaktivera :name, används i tillgångskonton.', + 'cannot_disable_currency_bills' => 'Kan inte inaktivera :name, används i räkningar.', + 'cannot_disable_currency_recurring' => 'Kan inte inaktivera :name, används i återkommande transaktioner.', + 'cannot_disable_currency_available_budgets' => 'Kan inte inaktivera :name, används i tillgängliga budgetar.', + 'cannot_disable_currency_budget_limits' => 'Kan inte inaktivera :name, används i budgetgränser.', + 'cannot_disable_currency_current_default' => 'Kan inte inaktivera :name, används som aktuell standardvaluta.', + 'cannot_disable_currency_system_fallback' => 'Kan inte inaktivera :name, är systemets standardvaluta.', + 'disable_EUR_side_effects' => 'Euron är systemets nödfallsvaluta. Inaktivering kan ha oavsiktliga bieffekter och kan upphäva din garanti.', + 'deleted_currency' => 'Valuta :name borttagen', + 'created_currency' => 'Valuta :name skapad', + 'could_not_store_currency' => 'Kunde inte lagra den nya valutan.', + 'updated_currency' => 'Valuta :name uppdaterad', + 'ask_site_owner' => 'Be :owner att lägga till, ta bort eller ändra valutor.', + 'currencies_intro' => 'Firefly III stödjer olika valutor vilket du kan ställa in här.', + 'make_default_currency' => 'Gör till standard', + 'default_currency' => 'standard', + 'currency_is_disabled' => 'Inaktiverad', + 'enable_currency' => 'Aktivera', + 'disable_currency' => 'Inaktivera', + 'currencies_default_disabled' => 'De flesta valutor är inaktiverade som standard. För att använda dem, så måste de aktiveras först.', + 'currency_is_now_enabled' => 'Valuta ":name" har aktiverats', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Valuta ":name" har inaktiverats', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Obligatoriska fält', - 'optionalFields' => 'Valfria fält', - 'options' => 'Alternativ', + 'mandatoryFields' => 'Obligatoriska fält', + 'optionalFields' => 'Valfria fält', + 'options' => 'Alternativ', // budgets: - 'daily_budgets' => 'Dagliga budgetar', - 'weekly_budgets' => 'Veckovis budgetar', - 'monthly_budgets' => 'Månatliga budgetar', - 'quarterly_budgets' => 'Kvartalsbudgetar', - 'half_year_budgets' => 'Halvårsbudgetar', - 'yearly_budgets' => 'Årliga budgetar', - 'other_budgets' => 'Anpassade tidsinställda budgetar', - 'budget_limit_not_in_range' => 'Detta belopp gäller från :start till :end:', - 'total_available_budget' => 'Total tillgänglig budget (mellan :start och :end)', - 'total_available_budget_in_currency' => 'Total tillgänglig budget i :currency', - 'see_below' => 'se nedan', - 'create_new_budget' => 'Skapa en ny budget', - 'store_new_budget' => 'Lagra ny budget', - 'stored_new_budget' => 'Lagrade ny budget ":name"', - 'available_between' => 'Tillgänglig mellan :start och :end', - 'transactionsWithoutBudget' => 'Utgifter utan budget', - 'transactions_no_budget' => 'Utgifter utan budget mellan :start och :end', - 'spent_between' => 'Redan spenderat mellan :start och :end', - 'set_available_amount' => 'Valt tillgängligt belopp', - 'update_available_amount' => 'Uppdatera tillgängligt belopp', - 'ab_basic_modal_explain' => 'Detta formulär används för hur mycket du förväntas kunna budgetera (totalt i :currency) under angiven period.', - 'createBudget' => 'Ny budget', - 'invalid_currency' => 'Detta är en ogiltig valuta', - 'invalid_amount' => 'Ange ett belopp', - 'set_ab' => 'Summan på tillgänlig budget har satts', - 'updated_ab' => 'Summan på tillgänlig budget har uppdaterats', - 'deleted_ab' => 'Summan på tillgänglig budget har tagits bort', - 'deleted_bl' => 'Den budgeterade summan har tagits bort', - 'alt_currency_ab_create' => 'Ange tillgänglig budget i annan valuta', - 'bl_create_btn' => 'Ange budget i annan valuta', - 'inactiveBudgets' => 'Inaktiva budgetar', - 'without_budget_between' => 'Transaktioner utan budget mellan :start och :end', - 'delete_budget' => 'Ta bort budget ":name"', - 'deleted_budget' => 'Borttagen budget ":name"', - 'edit_budget' => 'Ändra budget ":name"', - 'updated_budget' => 'Uppdatera budget ":name"', - 'update_amount' => 'Uppdatera belopp', - 'update_budget' => 'Uppdatera budget', - 'update_budget_amount_range' => 'Uppdatera (förväntad) tillgänglig summa mellan :start och :end', - 'set_budget_limit_title' => 'Sätt budgeterat belopp för budget :budget mellan :start och :end', - 'set_budget_limit' => 'Sätt budgeterat belopp', - 'budget_period_navigator' => 'Periodnavigator', - 'info_on_available_amount' => 'Vad är tillgängligt?', - 'available_amount_indication' => 'Använd dessa summor för en indikering av vad din totala budget kan bli.', - 'suggested' => 'Föreslagen', - 'average_between' => 'Genomsnitt mellan :start och :end', - 'transferred_in' => 'Överfört (in)', - 'transferred_away' => 'Överfört (bort)', - 'auto_budget_none' => 'Ingen auto-budget', - 'auto_budget_reset' => 'Ange ett fast belopp varje period', - 'auto_budget_rollover' => 'Lägg till ett belopp varje period', - 'auto_budget_adjusted' => 'Lägg till ett belopp varje period och korrigera för överkonsumtion', - 'auto_budget_period_daily' => 'Dagligen', - 'auto_budget_period_weekly' => 'Veckovis', - 'auto_budget_period_monthly' => 'Månadsvis', - 'auto_budget_period_quarterly' => 'Kvartalsvis', - 'auto_budget_period_half_year' => 'Varje halvår', - 'auto_budget_period_yearly' => 'Årligen', - 'auto_budget_help' => 'Du kan läsa mer om denna funktion i hjälpen. Klicka på (?) ikonen uppe till höger.', - 'auto_budget_reset_icon' => 'Denna budget kommer att fastställas periodvis', - 'auto_budget_rollover_icon' => 'Budgetbeloppet kommer att öka periodiskt', - 'auto_budget_adjusted_icon' => 'Budgetbeloppet kommer att öka periodiskt och kommer att korrigera för överkonsumtion', - 'remove_budgeted_amount' => 'Ta bort budgeterat belopp i :currency', + 'daily_budgets' => 'Dagliga budgetar', + 'weekly_budgets' => 'Veckovis budgetar', + 'monthly_budgets' => 'Månatliga budgetar', + 'quarterly_budgets' => 'Kvartalsbudgetar', + 'half_year_budgets' => 'Halvårsbudgetar', + 'yearly_budgets' => 'Årliga budgetar', + 'other_budgets' => 'Anpassade tidsinställda budgetar', + 'budget_limit_not_in_range' => 'Detta belopp gäller från :start till :end:', + 'total_available_budget' => 'Total tillgänglig budget (mellan :start och :end)', + 'total_available_budget_in_currency' => 'Total tillgänglig budget i :currency', + 'see_below' => 'se nedan', + 'create_new_budget' => 'Skapa en ny budget', + 'store_new_budget' => 'Lagra ny budget', + 'stored_new_budget' => 'Lagrade ny budget ":name"', + 'available_between' => 'Tillgänglig mellan :start och :end', + 'transactionsWithoutBudget' => 'Utgifter utan budget', + 'transactions_no_budget' => 'Utgifter utan budget mellan :start och :end', + 'spent_between' => 'Redan spenderat mellan :start och :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Valt tillgängligt belopp', + 'update_available_amount' => 'Uppdatera tillgängligt belopp', + 'ab_basic_modal_explain' => 'Detta formulär används för hur mycket du förväntas kunna budgetera (totalt i :currency) under angiven period.', + 'createBudget' => 'Ny budget', + 'invalid_currency' => 'Detta är en ogiltig valuta', + 'invalid_amount' => 'Ange ett belopp', + 'set_ab' => 'Summan på tillgänlig budget har satts', + 'updated_ab' => 'Summan på tillgänlig budget har uppdaterats', + 'deleted_ab' => 'Summan på tillgänglig budget har tagits bort', + 'deleted_bl' => 'Den budgeterade summan har tagits bort', + 'alt_currency_ab_create' => 'Ange tillgänglig budget i annan valuta', + 'bl_create_btn' => 'Ange budget i annan valuta', + 'inactiveBudgets' => 'Inaktiva budgetar', + 'without_budget_between' => 'Transaktioner utan budget mellan :start och :end', + 'delete_budget' => 'Ta bort budget ":name"', + 'deleted_budget' => 'Borttagen budget ":name"', + 'edit_budget' => 'Ändra budget ":name"', + 'updated_budget' => 'Uppdatera budget ":name"', + 'update_amount' => 'Uppdatera belopp', + 'update_budget' => 'Uppdatera budget', + 'update_budget_amount_range' => 'Uppdatera (förväntad) tillgänglig summa mellan :start och :end', + 'set_budget_limit_title' => 'Sätt budgeterat belopp för budget :budget mellan :start och :end', + 'set_budget_limit' => 'Sätt budgeterat belopp', + 'budget_period_navigator' => 'Periodnavigator', + 'info_on_available_amount' => 'Vad är tillgängligt?', + 'available_amount_indication' => 'Använd dessa summor för en indikering av vad din totala budget kan bli.', + 'suggested' => 'Föreslagen', + 'average_between' => 'Genomsnitt mellan :start och :end', + 'transferred_in' => 'Överfört (in)', + 'transferred_away' => 'Överfört (bort)', + 'auto_budget_none' => 'Ingen auto-budget', + 'auto_budget_reset' => 'Ange ett fast belopp varje period', + 'auto_budget_rollover' => 'Lägg till ett belopp varje period', + 'auto_budget_adjusted' => 'Lägg till ett belopp varje period och korrigera för överkonsumtion', + 'auto_budget_period_daily' => 'Dagligen', + 'auto_budget_period_weekly' => 'Veckovis', + 'auto_budget_period_monthly' => 'Månadsvis', + 'auto_budget_period_quarterly' => 'Kvartalsvis', + 'auto_budget_period_half_year' => 'Varje halvår', + 'auto_budget_period_yearly' => 'Årligen', + 'auto_budget_help' => 'Du kan läsa mer om denna funktion i hjälpen. Klicka på (?) ikonen uppe till höger.', + 'auto_budget_reset_icon' => 'Denna budget kommer att fastställas periodvis', + 'auto_budget_rollover_icon' => 'Budgetbeloppet kommer att öka periodiskt', + 'auto_budget_adjusted_icon' => 'Budgetbeloppet kommer att öka periodiskt och kommer att korrigera för överkonsumtion', + 'remove_budgeted_amount' => 'Ta bort budgeterat belopp i :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Inte väntat denna period', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Inte (ännu)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Nota matchar transaktioner mellan :low och :high.', - 'running_again_loss' => 'Tidigare länkade transaktioner till denna nota kan förlora sin koppling, om de (inte längre) matchar regler(na).', - 'bill_related_rules' => 'Regler relaterade till denna nota', - 'repeats' => 'Återkommande', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Anslutna transaktioner', - 'auto_match_on' => 'Automatiskt matchade av Firefly III', - 'auto_match_off' => 'Inte automatiskt matchad av Firefly III', - 'next_expected_match' => 'Nästa förväntade träff', - 'delete_bill' => 'Ta bort nota ":name"', - 'deleted_bill' => 'Nota ":name" borttagen', - 'edit_bill' => 'Redigera nota ":name"', - 'more' => 'Mer', - 'rescan_old' => 'Kör regler igen, på alla transaktioner', - 'update_bill' => 'Uppdatera nota', - 'updated_bill' => 'Nota ":name" uppdaterad', - 'store_new_bill' => 'Spara ny nota', - 'stored_new_bill' => 'Ny nota ":name" sparad', - 'cannot_scan_inactive_bill' => 'Inaktiva räkningar kan inte skannas.', - 'rescanned_bill' => 'Sökte genom allting, och länkade :count transaktioner till räkningen.|Sökte genom allting, och länkade :count transaktioner till räkningen.', - 'average_bill_amount_year' => 'Genomsnittligt notabelopp (:year)', - 'average_bill_amount_overall' => 'Genomsnittligt notabelopp (totalt)', - 'bill_is_active' => 'Notan är aktiv', - 'bill_expected_between' => 'Förväntas mellan :start och :end', - 'bill_will_automatch' => 'Nota länkas automatiskt mot matchande transaktioner', - 'skips_over' => 'hoppas över', - 'bill_store_error' => 'Ett oväntat fel uppstod vid lagring av den nya notan. Vänligen se loggfilerna', - 'list_inactive_rule' => 'inaktiv regel', - 'bill_edit_rules' => 'Firefly III kommer också att försöka redigera regeln relaterad till denna räkning. Om du själv har redigerat denna regel kommer Firefly III inte att ändra någonting.|Firefly III kommer att försöka redigera :count regler som är relaterade till denna räkning. Om du själv har redigerat dessa regler kommer dock Firefly III inte att ändra någonting.', - 'bill_expected_date' => 'Förväntat :date', - 'bill_expected_date_js' => 'Förväntat {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Betalad den {date}', - 'bill_repeats_weekly' => 'Upprepas veckovis', - 'bill_repeats_monthly' => 'Upprepas månadsvis', - 'bill_repeats_quarterly' => 'Upprepas kvartalsvis', - 'bill_repeats_half-year' => 'Uprepas varje halvår', - 'bill_repeats_yearly' => 'Upprepas årsvis', - 'bill_repeats_weekly_other' => 'Upprepas varannan vecka', - 'bill_repeats_monthly_other' => 'Upprepas varannan månad', - 'bill_repeats_quarterly_other' => 'Upprepas varannat kvartal', - 'bill_repeats_half-year_other' => 'Upprepas årsvis', - 'bill_repeats_yearly_other' => 'Upprepas varannat år', - 'bill_repeats_weekly_skip' => 'Upprepas varje {skip} veckor', - 'bill_repeats_monthly_skip' => 'Upprepas varje {skip} månad', - 'bill_repeats_quarterly_skip' => 'Upprepas varje {skip} kvartal', - 'bill_repeats_half-year_skip' => 'Upprepas varje {skip} halvår', - 'bill_repeats_yearly_skip' => 'Upprepas varje {skip} år', - 'subscriptions' => 'Prenumerationer', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'För alltid', - 'extension_date_is' => 'Tillägg datum är {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Inte väntat denna period', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Inte (ännu)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Nota matchar transaktioner mellan :low och :high.', + 'running_again_loss' => 'Tidigare länkade transaktioner till denna nota kan förlora sin koppling, om de (inte längre) matchar regler(na).', + 'bill_related_rules' => 'Regler relaterade till denna nota', + 'repeats' => 'Återkommande', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Anslutna transaktioner', + 'auto_match_on' => 'Automatiskt matchade av Firefly III', + 'auto_match_off' => 'Inte automatiskt matchad av Firefly III', + 'next_expected_match' => 'Nästa förväntade träff', + 'delete_bill' => 'Ta bort nota ":name"', + 'deleted_bill' => 'Nota ":name" borttagen', + 'edit_bill' => 'Redigera nota ":name"', + 'more' => 'Mer', + 'rescan_old' => 'Kör regler igen, på alla transaktioner', + 'update_bill' => 'Uppdatera nota', + 'updated_bill' => 'Nota ":name" uppdaterad', + 'store_new_bill' => 'Spara ny nota', + 'stored_new_bill' => 'Ny nota ":name" sparad', + 'cannot_scan_inactive_bill' => 'Inaktiva räkningar kan inte skannas.', + 'rescanned_bill' => 'Sökte genom allting, och länkade :count transaktioner till räkningen.|Sökte genom allting, och länkade :count transaktioner till räkningen.', + 'average_bill_amount_year' => 'Genomsnittligt notabelopp (:year)', + 'average_bill_amount_overall' => 'Genomsnittligt notabelopp (totalt)', + 'bill_is_active' => 'Notan är aktiv', + 'bill_expected_between' => 'Förväntas mellan :start och :end', + 'bill_will_automatch' => 'Nota länkas automatiskt mot matchande transaktioner', + 'skips_over' => 'hoppas över', + 'bill_store_error' => 'Ett oväntat fel uppstod vid lagring av den nya notan. Vänligen se loggfilerna', + 'list_inactive_rule' => 'inaktiv regel', + 'bill_edit_rules' => 'Firefly III kommer också att försöka redigera regeln relaterad till denna räkning. Om du själv har redigerat denna regel kommer Firefly III inte att ändra någonting.|Firefly III kommer att försöka redigera :count regler som är relaterade till denna räkning. Om du själv har redigerat dessa regler kommer dock Firefly III inte att ändra någonting.', + 'bill_expected_date' => 'Förväntat :date', + 'bill_expected_date_js' => 'Förväntat {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Betalad den {date}', + 'bill_repeats_weekly' => 'Upprepas veckovis', + 'bill_repeats_monthly' => 'Upprepas månadsvis', + 'bill_repeats_quarterly' => 'Upprepas kvartalsvis', + 'bill_repeats_half-year' => 'Uprepas varje halvår', + 'bill_repeats_yearly' => 'Upprepas årsvis', + 'bill_repeats_weekly_other' => 'Upprepas varannan vecka', + 'bill_repeats_monthly_other' => 'Upprepas varannan månad', + 'bill_repeats_quarterly_other' => 'Upprepas varannat kvartal', + 'bill_repeats_half-year_other' => 'Upprepas årsvis', + 'bill_repeats_yearly_other' => 'Upprepas varannat år', + 'bill_repeats_weekly_skip' => 'Upprepas varje {skip} veckor', + 'bill_repeats_monthly_skip' => 'Upprepas varje {skip} månad', + 'bill_repeats_quarterly_skip' => 'Upprepas varje {skip} kvartal', + 'bill_repeats_half-year_skip' => 'Upprepas varje {skip} halvår', + 'bill_repeats_yearly_skip' => 'Upprepas varje {skip} år', + 'subscriptions' => 'Prenumerationer', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'För alltid', + 'extension_date_is' => 'Tillägg datum är {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'Du har :count inaktiva (arkiverat) konto, som du kan se på denna separata sida.|Du har :count inaktiva (arkiverade) konton, som du kan se på denna separata sida.', - 'all_accounts_inactive' => 'Dessa är dina inaktiva konton.', - 'active_account_link' => 'Denna länk går tillbaka till dina aktiva konton.', - 'account_missing_transaction' => 'Konto #:id (":name") kan inte visas direkt, men Firefly saknar information för omdirigering.', - 'cc_monthly_payment_date_help' => 'Välj ett år och en månad, det kommer att ignoreras ändå. Endast dagen i månaden är relevant.', - 'details_for_asset' => 'Detaljer för tillgångskonto ":name"', - 'details_for_expense' => 'Detaljer för utgiftskonto ":name"', - 'details_for_revenue' => 'Detaljer för intäktskonto ":name"', - 'details_for_cash' => 'Detaljer för kontantkonto ":name"', - 'store_new_asset_account' => 'Lagra nytt tillgångskonto', - 'store_new_expense_account' => 'Spara nytt utgiftskonto', - 'store_new_revenue_account' => 'Spara nytt intäktskonto', - 'edit_asset_account' => 'Ändra tillgångskonto ":name"', - 'edit_expense_account' => 'Ändra utgiftskonto ":name"', - 'edit_revenue_account' => 'Ändra intäktskonto ":name"', - 'delete_asset_account' => 'Ta bort tillgångskonto ":name"', - 'delete_expense_account' => 'Ta bort utgiftskonto ":name"', - 'delete_revenue_account' => 'Ta bort intäktskonto ":name"', - 'delete_liabilities_account' => 'Ta bort skuld ":name"', - 'asset_deleted' => 'Tillgångskonto togs bort ":name"', - 'account_deleted' => 'Kontot ":name" togs bort', - 'expense_deleted' => 'Utgiftskonto togs bort ":name"', - 'revenue_deleted' => 'Intäktskonto togs bort ":name"', - 'update_asset_account' => 'Uppdatera tillgångskonto', - 'update_undefined_account' => 'Uppdatera konto', - 'update_liabilities_account' => 'Uppdatera skuld', - 'update_expense_account' => 'Uppdatera utgiftskonto', - 'update_revenue_account' => 'Uppdatera intäktskonto', - 'make_new_asset_account' => 'Skapa ett nytt tillgångskonto', - 'make_new_expense_account' => 'Skapa ett nytt utgiftskonto', - 'make_new_revenue_account' => 'Skapa ett nytt intäktskonto', - 'make_new_liabilities_account' => 'Skapa en ny skuld', - 'asset_accounts' => 'Tillgångskonton', - 'undefined_accounts' => 'Konton', - 'asset_accounts_inactive' => 'Tillgångskonton (inaktiva)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Kostnadskonto', - 'expense_accounts_inactive' => 'Utgiftskonton (inaktiva)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Intäktskonton', - 'revenue_accounts_inactive' => 'Intäktskonton (inaktiv)', - 'cash_accounts' => 'Kontantkonton', - 'Cash account' => 'Kontantkonto', - 'liabilities_accounts' => 'Skulder', - 'liabilities_accounts_inactive' => 'Skulder (inaktiva)', - 'reconcile_account' => 'Sammansätt konto ":account"', - 'overview_of_reconcile_modal' => 'Översikt av sammansättning', - 'delete_reconciliation' => 'Ta bort sammansättning', - 'update_reconciliation' => 'Uppdatera sammansättning', - 'amount_cannot_be_zero' => 'Beloppet kan inte vara noll', - 'end_of_reconcile_period' => 'Slut på avstämningsperiod: :period', - 'start_of_reconcile_period' => 'Start av avstämningsperiod: :period', - 'start_balance' => 'Startsaldo', - 'end_balance' => 'Slutsaldo', - 'update_balance_dates_instruction' => 'Matcha beloppen och datum ovan mot dina bankutdrag, och tryck "Börja avstämning"', - 'select_transactions_instruction' => 'Välj transaktioner som visas på kontoutdrag.', - 'select_range_and_balance' => 'Verifiera först datumintervall och balanser. Tryck sedan på "Börja sammanfoga"', - 'date_change_instruction' => 'Byte av datumområde nu kan framsteg förloras.', - 'update_selection' => 'Uppdatera val', - 'store_reconcile' => 'Lagra avstämning', - 'reconciliation_transaction' => 'Stäm av transaktion', - 'Reconciliation' => 'Avstämning', - 'reconciliation' => 'Avstämning', - 'reconcile_options' => 'Avstämningsval', - 'reconcile_range' => 'Avstämningsområde', - 'start_reconcile' => 'Börja stämma av', - 'cash_account_type' => 'Kontant', - 'cash' => 'kontant', - 'cant_find_redirect_account' => 'Firefly III försökte omdirigera dig men misslyckades. Förlåt, åter till index.', - 'account_type' => 'Kontotyp', - 'save_transactions_by_moving' => 'Spara denna transaktion genom att flytta den till ett annat konto:|Spara dessa transaktioner genom att flytta dem till ett annat konto:', - 'save_transactions_by_moving_js' => 'Inga transaktioner|Spara denna transaktion genom att flytta den till ett annat konto.|Spara dessa transaktioner genom att flytta dem till ett annat konto.', - 'stored_new_account' => 'Nytt konto ":name" lagrat!', - 'stored_new_account_js' => 'Nytt konto "{name}" lagrat!', - 'updated_account' => 'Konto ":name" uppdaterad', - 'updated_account_js' => 'Uppdaterade kontot "{title}".', - 'credit_card_options' => 'Kreditkortalternativ', - 'no_transactions_account' => 'Inga transaktioner (i denna period) för tillgångskonto ":name".', - 'no_transactions_period' => 'Inga transaktioner (i denna period).', - 'no_data_for_chart' => 'Saknas information (fortfarande) för att generera detta diagram.', - 'select_at_least_one_account' => 'Välj minst ett tillgångskonto', - 'select_at_least_one_category' => 'Välj åtminstone en kategori', - 'select_at_least_one_budget' => 'Välj minst en budget', - 'select_at_least_one_tag' => 'Välj åtminstone en etikett', - 'select_at_least_one_expense' => 'Välj åtminstone en kombination av utgift/intäcktskonton. Om dessa saknas (listan är tom) är inte denna rapport tillgänglig.', - 'account_default_currency' => 'Detta är standard valut associerad till detta konto.', - 'reconcile_has_more' => 'Firefly III huvudbok har mer penger än vad din bank påstår det bör vara. Det finns flera alternativ. Vänligen välj vad som ska ske. Tryck sedan "Bekräfta avstämning".', - 'reconcile_has_less' => 'Firefly III huvudbok har mindre penger än vad din bank påstår det bör vara. Det finns flera alternativ. Vänligen välj vad som ska ske. Tryck sedan "Bekräfta avstämning".', - 'reconcile_is_equal' => 'Firefly III huvudbok och kontoutdrag stämmer överens. Det finns inget att göra. Tryck "Bekräfta avstämning" för att bekräfta din inmatning.', - 'create_pos_reconcile_transaction' => 'Rensa de valda transaktionerna och skapa en korrigering som lägger till :amount till detta tillgångskonto.', - 'create_neg_reconcile_transaction' => 'Rensa de valda transaktionerna och skapa en korrigering som tar bort :amount från detta tillgångskonto.', - 'reconcile_do_nothing' => 'Rensa de valda transaktionerna, men korrigera inget.', - 'reconcile_go_back' => 'Det går att ändra eller ta bort en rättelse senare.', - 'must_be_asset_account' => 'Du kan bara stämma av tillgångskonton', - 'reconciliation_stored' => 'Avstämning sparad', - 'reconciliation_error' => 'På grund av ett fel markerades transaktionerna som avstämda men korrigeringen har inte sparats: :error.', - 'reconciliation_transaction_title' => 'Avstämning (:from till :to)', - 'sum_of_reconciliation' => 'Summa av avstämning', - 'reconcile_this_account' => 'Stäm av detta konto', - 'reconcile' => 'Avstämning', - 'show' => 'Visa', - 'confirm_reconciliation' => 'Bekräfta avstämning', - 'submitted_start_balance' => 'Inskickad startbalans', - 'selected_transactions' => 'Valda transaktioner (:count)', - 'already_cleared_transactions' => 'Slutförda transaktioner (:count)', - 'submitted_end_balance' => 'Inskickad slutbalans', - 'initial_balance_description' => 'Startbalans för ":account"', - 'liability_credit_description' => 'Ansvarskredit för ":account"', - 'interest_calc_' => 'okänd', - 'interest_calc_daily' => 'Per dag', - 'interest_calc_monthly' => 'Per månad', - 'interest_calc_yearly' => 'Per år', - 'interest_calc_weekly' => 'Per vecka', - 'interest_calc_half-year' => 'Per halvår', - 'interest_calc_quarterly' => 'Per kvartal', - 'initial_balance_account' => 'Startbalans för konto :account', - 'list_options' => 'Listalternativ', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'Du har :count inaktiva (arkiverat) konto, som du kan se på denna separata sida.|Du har :count inaktiva (arkiverade) konton, som du kan se på denna separata sida.', + 'all_accounts_inactive' => 'Dessa är dina inaktiva konton.', + 'active_account_link' => 'Denna länk går tillbaka till dina aktiva konton.', + 'account_missing_transaction' => 'Konto #:id (":name") kan inte visas direkt, men Firefly saknar information för omdirigering.', + 'cc_monthly_payment_date_help' => 'Välj ett år och en månad, det kommer att ignoreras ändå. Endast dagen i månaden är relevant.', + 'details_for_asset' => 'Detaljer för tillgångskonto ":name"', + 'details_for_expense' => 'Detaljer för utgiftskonto ":name"', + 'details_for_revenue' => 'Detaljer för intäktskonto ":name"', + 'details_for_cash' => 'Detaljer för kontantkonto ":name"', + 'store_new_asset_account' => 'Lagra nytt tillgångskonto', + 'store_new_expense_account' => 'Spara nytt utgiftskonto', + 'store_new_revenue_account' => 'Spara nytt intäktskonto', + 'edit_asset_account' => 'Ändra tillgångskonto ":name"', + 'edit_expense_account' => 'Ändra utgiftskonto ":name"', + 'edit_revenue_account' => 'Ändra intäktskonto ":name"', + 'delete_asset_account' => 'Ta bort tillgångskonto ":name"', + 'delete_expense_account' => 'Ta bort utgiftskonto ":name"', + 'delete_revenue_account' => 'Ta bort intäktskonto ":name"', + 'delete_liabilities_account' => 'Ta bort skuld ":name"', + 'asset_deleted' => 'Tillgångskonto togs bort ":name"', + 'account_deleted' => 'Kontot ":name" togs bort', + 'expense_deleted' => 'Utgiftskonto togs bort ":name"', + 'revenue_deleted' => 'Intäktskonto togs bort ":name"', + 'update_asset_account' => 'Uppdatera tillgångskonto', + 'update_undefined_account' => 'Uppdatera konto', + 'update_liabilities_account' => 'Uppdatera skuld', + 'update_expense_account' => 'Uppdatera utgiftskonto', + 'update_revenue_account' => 'Uppdatera intäktskonto', + 'make_new_asset_account' => 'Skapa ett nytt tillgångskonto', + 'make_new_expense_account' => 'Skapa ett nytt utgiftskonto', + 'make_new_revenue_account' => 'Skapa ett nytt intäktskonto', + 'make_new_liabilities_account' => 'Skapa en ny skuld', + 'asset_accounts' => 'Tillgångskonton', + 'undefined_accounts' => 'Konton', + 'asset_accounts_inactive' => 'Tillgångskonton (inaktiva)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Kostnadskonto', + 'expense_accounts_inactive' => 'Utgiftskonton (inaktiva)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Intäktskonton', + 'revenue_accounts_inactive' => 'Intäktskonton (inaktiv)', + 'cash_accounts' => 'Kontantkonton', + 'Cash account' => 'Kontantkonto', + 'liabilities_accounts' => 'Skulder', + 'liabilities_accounts_inactive' => 'Skulder (inaktiva)', + 'reconcile_account' => 'Sammansätt konto ":account"', + 'overview_of_reconcile_modal' => 'Översikt av sammansättning', + 'delete_reconciliation' => 'Ta bort sammansättning', + 'update_reconciliation' => 'Uppdatera sammansättning', + 'amount_cannot_be_zero' => 'Beloppet kan inte vara noll', + 'end_of_reconcile_period' => 'Slut på avstämningsperiod: :period', + 'start_of_reconcile_period' => 'Start av avstämningsperiod: :period', + 'start_balance' => 'Startsaldo', + 'end_balance' => 'Slutsaldo', + 'update_balance_dates_instruction' => 'Matcha beloppen och datum ovan mot dina bankutdrag, och tryck "Börja avstämning"', + 'select_transactions_instruction' => 'Välj transaktioner som visas på kontoutdrag.', + 'select_range_and_balance' => 'Verifiera först datumintervall och balanser. Tryck sedan på "Börja sammanfoga"', + 'date_change_instruction' => 'Byte av datumområde nu kan framsteg förloras.', + 'update_selection' => 'Uppdatera val', + 'store_reconcile' => 'Lagra avstämning', + 'reconciliation_transaction' => 'Stäm av transaktion', + 'Reconciliation' => 'Avstämning', + 'reconciliation' => 'Avstämning', + 'reconcile_options' => 'Avstämningsval', + 'reconcile_range' => 'Avstämningsområde', + 'start_reconcile' => 'Börja stämma av', + 'cash_account_type' => 'Kontant', + 'cash' => 'kontant', + 'cant_find_redirect_account' => 'Firefly III försökte omdirigera dig men misslyckades. Förlåt, åter till index.', + 'account_type' => 'Kontotyp', + 'save_transactions_by_moving' => 'Spara denna transaktion genom att flytta den till ett annat konto:|Spara dessa transaktioner genom att flytta dem till ett annat konto:', + 'save_transactions_by_moving_js' => 'Inga transaktioner|Spara denna transaktion genom att flytta den till ett annat konto.|Spara dessa transaktioner genom att flytta dem till ett annat konto.', + 'stored_new_account' => 'Nytt konto ":name" lagrat!', + 'stored_new_account_js' => 'Nytt konto "{name}" lagrat!', + 'updated_account' => 'Konto ":name" uppdaterad', + 'updated_account_js' => 'Uppdaterade kontot "{title}".', + 'credit_card_options' => 'Kreditkortalternativ', + 'no_transactions_account' => 'Inga transaktioner (i denna period) för tillgångskonto ":name".', + 'no_transactions_period' => 'Inga transaktioner (i denna period).', + 'no_data_for_chart' => 'Saknas information (fortfarande) för att generera detta diagram.', + 'select_at_least_one_account' => 'Välj minst ett tillgångskonto', + 'select_at_least_one_category' => 'Välj åtminstone en kategori', + 'select_at_least_one_budget' => 'Välj minst en budget', + 'select_at_least_one_tag' => 'Välj åtminstone en etikett', + 'select_at_least_one_expense' => 'Välj åtminstone en kombination av utgift/intäcktskonton. Om dessa saknas (listan är tom) är inte denna rapport tillgänglig.', + 'account_default_currency' => 'Detta är standard valut associerad till detta konto.', + 'reconcile_has_more' => 'Firefly III huvudbok har mer penger än vad din bank påstår det bör vara. Det finns flera alternativ. Vänligen välj vad som ska ske. Tryck sedan "Bekräfta avstämning".', + 'reconcile_has_less' => 'Firefly III huvudbok har mindre penger än vad din bank påstår det bör vara. Det finns flera alternativ. Vänligen välj vad som ska ske. Tryck sedan "Bekräfta avstämning".', + 'reconcile_is_equal' => 'Firefly III huvudbok och kontoutdrag stämmer överens. Det finns inget att göra. Tryck "Bekräfta avstämning" för att bekräfta din inmatning.', + 'create_pos_reconcile_transaction' => 'Rensa de valda transaktionerna och skapa en korrigering som lägger till :amount till detta tillgångskonto.', + 'create_neg_reconcile_transaction' => 'Rensa de valda transaktionerna och skapa en korrigering som tar bort :amount från detta tillgångskonto.', + 'reconcile_do_nothing' => 'Rensa de valda transaktionerna, men korrigera inget.', + 'reconcile_go_back' => 'Det går att ändra eller ta bort en rättelse senare.', + 'must_be_asset_account' => 'Du kan bara stämma av tillgångskonton', + 'reconciliation_stored' => 'Avstämning sparad', + 'reconciliation_error' => 'På grund av ett fel markerades transaktionerna som avstämda men korrigeringen har inte sparats: :error.', + 'reconciliation_transaction_title' => 'Avstämning (:from till :to)', + 'sum_of_reconciliation' => 'Summa av avstämning', + 'reconcile_this_account' => 'Stäm av detta konto', + 'reconcile' => 'Avstämning', + 'show' => 'Visa', + 'confirm_reconciliation' => 'Bekräfta avstämning', + 'submitted_start_balance' => 'Inskickad startbalans', + 'selected_transactions' => 'Valda transaktioner (:count)', + 'already_cleared_transactions' => 'Slutförda transaktioner (:count)', + 'submitted_end_balance' => 'Inskickad slutbalans', + 'initial_balance_description' => 'Startbalans för ":account"', + 'liability_credit_description' => 'Ansvarskredit för ":account"', + 'interest_calc_' => 'okänd', + 'interest_calc_daily' => 'Per dag', + 'interest_calc_monthly' => 'Per månad', + 'interest_calc_yearly' => 'Per år', + 'interest_calc_weekly' => 'Per vecka', + 'interest_calc_half-year' => 'Per halvår', + 'interest_calc_quarterly' => 'Per kvartal', + 'initial_balance_account' => 'Startbalans för konto :account', + 'list_options' => 'Listalternativ', // categories: - 'new_category' => 'Ny kategori', - 'create_new_category' => 'Skapa en ny kategori', - 'without_category' => 'Kategori saknas', - 'update_category' => 'Uppdatera kategori', - 'updated_category' => 'Kategori ":name" uppdaterad', - 'categories' => 'Kategorier', - 'edit_category' => 'Redigera kategori ":name"', - 'no_category' => '(utan kategori)', - 'unknown_category_plain' => 'No category', - 'category' => 'Kategori', - 'delete_category' => 'Ta bort kategori ":name"', - 'deleted_category' => 'Kategori ":name" togs bort', - 'store_category' => 'Lagra ny kategori', - 'stored_category' => 'Ny kategori ":name" lagrades', - 'without_category_between' => 'Utan kategori mellan :start och :end', + 'new_category' => 'Ny kategori', + 'create_new_category' => 'Skapa en ny kategori', + 'without_category' => 'Kategori saknas', + 'update_category' => 'Uppdatera kategori', + 'updated_category' => 'Kategori ":name" uppdaterad', + 'categories' => 'Kategorier', + 'edit_category' => 'Redigera kategori ":name"', + 'no_category' => '(utan kategori)', + 'unknown_category_plain' => 'No category', + 'category' => 'Kategori', + 'delete_category' => 'Ta bort kategori ":name"', + 'deleted_category' => 'Kategori ":name" togs bort', + 'store_category' => 'Lagra ny kategori', + 'stored_category' => 'Ny kategori ":name" lagrades', + 'without_category_between' => 'Utan kategori mellan :start och :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,236 +1960,244 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Uppdatera uttag', - 'update_deposit' => 'Uppdatera insättning', - 'update_transaction' => 'Uppdatera transaktion', - 'update_transfer' => 'Uppdatera överföring', - 'updated_withdrawal' => 'Uppdatera uttag ":description"', - 'updated_deposit' => 'Uppdatera insättning ":description"', - 'updated_transfer' => 'Uppdatera överföring ":description"', - 'no_changes_withdrawal' => 'Uttag ":description" har inte ändrats.', - 'no_changes_deposit' => 'Insättning ":description" har inte ändrats.', - 'no_changes_transfer' => 'Överföring ":description" har inte ändrats.', - 'delete_withdrawal' => 'Ta bort uttag ":description"', - 'delete_deposit' => 'Ta bort insättning ":description"', - 'delete_transfer' => 'Ta bort överföring ":description"', - 'deleted_withdrawal' => 'Uttag ":description" har tagits bort', - 'deleted_deposit' => 'Insättning ":description" har tagits bort', - 'deleted_transfer' => 'Överföring ":description" har tagits bort', - 'deleted_reconciliation' => 'Avstämningstransaktionen ":description" togs bort lyckat', - 'stored_journal' => 'Skapade ny transaktion ":description"', - 'stored_journal_no_descr' => 'Ny transaktion skapades lyckat', - 'updated_journal_no_descr' => 'Transaktion har uppdaterats', - 'select_transactions' => 'Välj transaktioner', - 'rule_group_select_transactions' => 'Tillämpa ":title" till transaktioner', - 'rule_select_transactions' => 'Tillämpa ":title" till transaktioner', - 'stop_selection' => 'Sluta välja transaktioner', - 'reconcile_selected' => 'Avstämning', - 'mass_delete_journals' => 'Ta bort ett antal transaktioner', - 'mass_edit_journals' => 'Ändra ett antal transaktioner', - 'mass_bulk_journals' => 'Ändra flera transaktioner', - 'mass_bulk_journals_explain' => 'Detta formulär tillåter dig att ändra egenskaperna på transaktionerna listade nedan i ett enda svep. Alla transaktioner i tabellen uppdateras när du ändrar parametrarna du ser här.', - 'part_of_split' => 'Denna transaktion är del av en delad transaktion. Om du inte har valt alla delarna, kan det bli att du bara ändrar halva transaktionen.', - 'bulk_set_new_values' => 'Använd valen nedan för att sätta nya värden. Om de lämnas tomma, blir de tomma för alla. Notera också att endast uttag kommer att ges en budget.', - 'no_bulk_category' => 'Uppdatera inte kategori', - 'no_bulk_budget' => 'Uppdatera inte budget', - 'no_bulk_tags' => 'Uppdatera inte etikett(er)', - 'replace_with_these_tags' => 'Ersätt med dessa taggar', - 'append_these_tags' => 'Lägg till dessa taggar', - 'mass_edit' => 'Ändra valda individuellt', - 'bulk_edit' => 'Massredigera valda', - 'mass_delete' => 'Ta bort valda', - 'cannot_edit_other_fields' => 'Går ej att massredigera andra fält än dessa, eftersom det inte finns utrymme att visa andra. Vänligen följ länken och redigera dem en efter en om andra fält behöver redigeras.', - 'cannot_change_amount_reconciled' => 'Du kan inte ändra beloppet för avstämda transaktioner.', - 'no_budget' => '(ingen budget)', - 'no_bill' => '(ingen räkning)', - 'account_per_budget' => 'Konto per budget', - 'account_per_category' => 'Konto per etikett', - 'create_new_object' => 'Skapa', - 'empty' => '(tom)', - 'all_other_budgets' => '(övriga budgetar)', - 'all_other_accounts' => '(alla övriga konton)', - 'expense_per_source_account' => 'Utgifter per källkonto', - 'expense_per_destination_account' => 'Utgifter per målkonto', - 'income_per_destination_account' => 'Inkomst per målkonto', - 'spent_in_specific_category' => 'Spenderat i kategori ":category"', - 'earned_in_specific_category' => 'Intjänat i kategori ":category"', - 'spent_in_specific_tag' => 'Spenderat i etikett ":tag"', - 'earned_in_specific_tag' => 'Tjänat i etikett ":tag"', - 'income_per_source_account' => 'Inkomst per källkonto', - 'average_spending_per_destination' => 'Medel kostnad per målkonto', - 'average_spending_per_source' => 'Medel kostnad per källkonto', - 'average_earning_per_source' => 'Medel intjäning per källkonto', - 'average_earning_per_destination' => 'Medel intjäning per målkonto', - 'account_per_tag' => 'Konton per etikett', - 'tag_report_expenses_listed_once' => 'Utgifter och inkomster visas aldrig dubbelt. Om en transaktioner har flera etiketter, visas den bara under en av dessa. Detta diagram kan tyckas sakna data, men summan kommer att stämma.', - 'double_report_expenses_charted_once' => 'Utgifter och inkomster visas aldrig dubbelt. Om en transaktioner har flera etiketter, visas den bara under en av dessa. Detta diagram kan tyckas sakna data, men summan kommer att stämma.', - 'tag_report_chart_single_tag' => 'Detta diagram tillämpas bara för en etikett. Om en transaktion har flera etiketter, det som visas i diagrammen kan komma från andra etiketter också.', - 'tag' => 'Etikett', - 'no_budget_squared' => '(ingen budget)', - 'perm-delete-many' => 'Att ta bort så mycket på en gång kan vara problematiskt. Var försiktig. Du kan ta bort delar av en delad transaktion från denna sida, så var försiktig.', - 'mass_deleted_transactions_success' => 'Borttagna :count transaktion.|Borttagna :count transaktioner.', - 'mass_edited_transactions_success' => 'Uppdaterade :count transaktion.|Uppdaterade :count transaktioner.', - 'opt_group_' => '(saknar kontotyp)', - 'opt_group_no_account_type' => '(saknar kontotyp)', - 'opt_group_defaultAsset' => 'Förvalt tillgångskonton', - 'opt_group_savingAsset' => 'Sparkonton', - 'opt_group_sharedAsset' => 'Delade tillgångskonton', - 'opt_group_ccAsset' => 'Kreditkort', - 'opt_group_cashWalletAsset' => 'Plånböcker', - 'opt_group_expense_account' => 'Kostnadskonton', - 'opt_group_revenue_account' => 'Intäktskonton', - 'opt_group_l_Loan' => 'Skuld: Lån', - 'opt_group_cash_account' => 'Kontantkonto', - 'opt_group_l_Debt' => 'Skuld: Skuld', - 'opt_group_l_Mortgage' => 'Skuld: Bolån', - 'opt_group_l_Credit card' => 'Skuld: Kreditkort', - 'notes' => 'Noteringar', - 'unknown_journal_error' => 'Transaktion kunde inte lagras. Vänligen se loggfiler.', - 'attachment_not_found' => 'Denna bilaga kunde inte hittas.', - 'journal_link_bill' => 'Transaktion länkad till nota :name. För att ta bort koppling, avmarkera kryssrutan. Använd regler för att koppla den till en annan nota.', - 'transaction_stored_link' => 'Transaktion #{ID} ("{title}") sparades.', - 'transaction_new_stored_link' => 'Transaktion #{ID} sparades.', - 'transaction_updated_link' => 'Transaktion #{ID} ("{title}") uppdaterades.', - 'transaction_updated_no_changes' => 'Transaktion #{ID} ("{title}") fick inga ändringar.', - 'first_split_decides' => 'Första delningen bestämmer värdet på detta fält', - 'first_split_overrules_source' => 'Den första delningen kan åsidosätta källkontot', - 'first_split_overrules_destination' => 'Den första delningen kan åsidosätta målkontot', - 'spent_x_of_y' => 'Spenderade {amount} av {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Uppdatera uttag', + 'update_deposit' => 'Uppdatera insättning', + 'update_transaction' => 'Uppdatera transaktion', + 'update_transfer' => 'Uppdatera överföring', + 'updated_withdrawal' => 'Uppdatera uttag ":description"', + 'updated_deposit' => 'Uppdatera insättning ":description"', + 'updated_transfer' => 'Uppdatera överföring ":description"', + 'no_changes_withdrawal' => 'Uttag ":description" har inte ändrats.', + 'no_changes_deposit' => 'Insättning ":description" har inte ändrats.', + 'no_changes_transfer' => 'Överföring ":description" har inte ändrats.', + 'delete_withdrawal' => 'Ta bort uttag ":description"', + 'delete_deposit' => 'Ta bort insättning ":description"', + 'delete_transfer' => 'Ta bort överföring ":description"', + 'deleted_withdrawal' => 'Uttag ":description" har tagits bort', + 'deleted_deposit' => 'Insättning ":description" har tagits bort', + 'deleted_transfer' => 'Överföring ":description" har tagits bort', + 'deleted_reconciliation' => 'Avstämningstransaktionen ":description" togs bort lyckat', + 'stored_journal' => 'Skapade ny transaktion ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Ny transaktion skapades lyckat', + 'updated_journal_no_descr' => 'Transaktion har uppdaterats', + 'select_transactions' => 'Välj transaktioner', + 'rule_group_select_transactions' => 'Tillämpa ":title" till transaktioner', + 'rule_select_transactions' => 'Tillämpa ":title" till transaktioner', + 'stop_selection' => 'Sluta välja transaktioner', + 'reconcile_selected' => 'Avstämning', + 'mass_delete_journals' => 'Ta bort ett antal transaktioner', + 'mass_edit_journals' => 'Ändra ett antal transaktioner', + 'mass_bulk_journals' => 'Ändra flera transaktioner', + 'mass_bulk_journals_explain' => 'Detta formulär tillåter dig att ändra egenskaperna på transaktionerna listade nedan i ett enda svep. Alla transaktioner i tabellen uppdateras när du ändrar parametrarna du ser här.', + 'part_of_split' => 'Denna transaktion är del av en delad transaktion. Om du inte har valt alla delarna, kan det bli att du bara ändrar halva transaktionen.', + 'bulk_set_new_values' => 'Använd valen nedan för att sätta nya värden. Om de lämnas tomma, blir de tomma för alla. Notera också att endast uttag kommer att ges en budget.', + 'no_bulk_category' => 'Uppdatera inte kategori', + 'no_bulk_budget' => 'Uppdatera inte budget', + 'no_bulk_tags' => 'Uppdatera inte etikett(er)', + 'replace_with_these_tags' => 'Ersätt med dessa taggar', + 'append_these_tags' => 'Lägg till dessa taggar', + 'mass_edit' => 'Ändra valda individuellt', + 'bulk_edit' => 'Massredigera valda', + 'mass_delete' => 'Ta bort valda', + 'cannot_edit_other_fields' => 'Går ej att massredigera andra fält än dessa, eftersom det inte finns utrymme att visa andra. Vänligen följ länken och redigera dem en efter en om andra fält behöver redigeras.', + 'cannot_change_amount_reconciled' => 'Du kan inte ändra beloppet för avstämda transaktioner.', + 'no_budget' => '(ingen budget)', + 'no_bill' => '(ingen räkning)', + 'account_per_budget' => 'Konto per budget', + 'account_per_category' => 'Konto per etikett', + 'create_new_object' => 'Skapa', + 'empty' => '(tom)', + 'all_other_budgets' => '(övriga budgetar)', + 'all_other_accounts' => '(alla övriga konton)', + 'expense_per_source_account' => 'Utgifter per källkonto', + 'expense_per_destination_account' => 'Utgifter per målkonto', + 'income_per_destination_account' => 'Inkomst per målkonto', + 'spent_in_specific_category' => 'Spenderat i kategori ":category"', + 'earned_in_specific_category' => 'Intjänat i kategori ":category"', + 'spent_in_specific_tag' => 'Spenderat i etikett ":tag"', + 'earned_in_specific_tag' => 'Tjänat i etikett ":tag"', + 'income_per_source_account' => 'Inkomst per källkonto', + 'average_spending_per_destination' => 'Medel kostnad per målkonto', + 'average_spending_per_source' => 'Medel kostnad per källkonto', + 'average_earning_per_source' => 'Medel intjäning per källkonto', + 'average_earning_per_destination' => 'Medel intjäning per målkonto', + 'account_per_tag' => 'Konton per etikett', + 'tag_report_expenses_listed_once' => 'Utgifter och inkomster visas aldrig dubbelt. Om en transaktioner har flera etiketter, visas den bara under en av dessa. Detta diagram kan tyckas sakna data, men summan kommer att stämma.', + 'double_report_expenses_charted_once' => 'Utgifter och inkomster visas aldrig dubbelt. Om en transaktioner har flera etiketter, visas den bara under en av dessa. Detta diagram kan tyckas sakna data, men summan kommer att stämma.', + 'tag_report_chart_single_tag' => 'Detta diagram tillämpas bara för en etikett. Om en transaktion har flera etiketter, det som visas i diagrammen kan komma från andra etiketter också.', + 'tag' => 'Etikett', + 'no_budget_squared' => '(ingen budget)', + 'perm-delete-many' => 'Att ta bort så mycket på en gång kan vara problematiskt. Var försiktig. Du kan ta bort delar av en delad transaktion från denna sida, så var försiktig.', + 'mass_deleted_transactions_success' => 'Borttagna :count transaktion.|Borttagna :count transaktioner.', + 'mass_edited_transactions_success' => 'Uppdaterade :count transaktion.|Uppdaterade :count transaktioner.', + 'opt_group_' => '(saknar kontotyp)', + 'opt_group_no_account_type' => '(saknar kontotyp)', + 'opt_group_defaultAsset' => 'Förvalt tillgångskonton', + 'opt_group_savingAsset' => 'Sparkonton', + 'opt_group_sharedAsset' => 'Delade tillgångskonton', + 'opt_group_ccAsset' => 'Kreditkort', + 'opt_group_cashWalletAsset' => 'Plånböcker', + 'opt_group_expense_account' => 'Kostnadskonton', + 'opt_group_revenue_account' => 'Intäktskonton', + 'opt_group_l_Loan' => 'Skuld: Lån', + 'opt_group_cash_account' => 'Kontantkonto', + 'opt_group_l_Debt' => 'Skuld: Skuld', + 'opt_group_l_Mortgage' => 'Skuld: Bolån', + 'opt_group_l_Credit card' => 'Skuld: Kreditkort', + 'notes' => 'Noteringar', + 'unknown_journal_error' => 'Transaktion kunde inte lagras. Vänligen se loggfiler.', + 'attachment_not_found' => 'Denna bilaga kunde inte hittas.', + 'journal_link_bill' => 'Transaktion länkad till nota :name. För att ta bort koppling, avmarkera kryssrutan. Använd regler för att koppla den till en annan nota.', + 'transaction_stored_link' => 'Transaktion #{ID} ("{title}") sparades.', + 'transaction_new_stored_link' => 'Transaktion #{ID} sparades.', + 'transaction_updated_link' => 'Transaktion #{ID} ("{title}") uppdaterades.', + 'transaction_updated_no_changes' => 'Transaktion #{ID} ("{title}") fick inga ändringar.', + 'first_split_decides' => 'Första delningen bestämmer värdet på detta fält', + 'first_split_overrules_source' => 'Den första delningen kan åsidosätta källkontot', + 'first_split_overrules_destination' => 'Den första delningen kan åsidosätta målkontot', + 'spent_x_of_y' => 'Spenderade {amount} av {total}', // new user: - 'welcome' => 'Välkommen till Firefly III!', - 'submit' => 'Skicka', - 'submission' => 'Inskickning', - 'submit_yes_really' => 'Skicka (Jag vet vad jag gör)', - 'getting_started' => 'Komma igång', - 'to_get_started' => 'Det är bra att se att du har lyckats installera Firefly III. För att komma igång med detta verktyg vänligen ange din banks namn och saldot på ditt huvudkonto. Oroa dig in om du har flera konton. Dessa går att lägga till senare. Firefly III behöver något att börja med.', - 'savings_balance_text' => 'Firefly III skapar automatiskt sparkonto åt dig. Som standard finns det inga pengar i dina sparkonton, men om du berättar för Firefly III om balansen så lagras detta.', - 'finish_up_new_user' => 'Det var allt! Du kan fortsätta genom att klicka på Skicka. Du kommer då till startsidan för Firefly III.', - 'stored_new_accounts_new_user' => 'Jippie! Dina nya konton har lagrats.', - 'set_preferred_language' => 'Om du föredrar att använda Firefly III i annat språk, välj sådant här.', - 'language' => 'Språk', - 'new_savings_account' => ':bank_name sparkonto', - 'cash_wallet' => 'Plånbok', - 'currency_not_present' => 'Om valutan du normalt använder inte finns med, oroa dig inte. Du kan skapa nya valutor under Alternativ > Valutor.', + 'welcome' => 'Välkommen till Firefly III!', + 'submit' => 'Skicka', + 'submission' => 'Inskickning', + 'submit_yes_really' => 'Skicka (Jag vet vad jag gör)', + 'getting_started' => 'Komma igång', + 'to_get_started' => 'Det är bra att se att du har lyckats installera Firefly III. För att komma igång med detta verktyg vänligen ange din banks namn och saldot på ditt huvudkonto. Oroa dig in om du har flera konton. Dessa går att lägga till senare. Firefly III behöver något att börja med.', + 'savings_balance_text' => 'Firefly III skapar automatiskt sparkonto åt dig. Som standard finns det inga pengar i dina sparkonton, men om du berättar för Firefly III om balansen så lagras detta.', + 'finish_up_new_user' => 'Det var allt! Du kan fortsätta genom att klicka på Skicka. Du kommer då till startsidan för Firefly III.', + 'stored_new_accounts_new_user' => 'Jippie! Dina nya konton har lagrats.', + 'set_preferred_language' => 'Om du föredrar att använda Firefly III i annat språk, välj sådant här.', + 'language' => 'Språk', + 'new_savings_account' => ':bank_name sparkonto', + 'cash_wallet' => 'Plånbok', + 'currency_not_present' => 'Om valutan du normalt använder inte finns med, oroa dig inte. Du kan skapa nya valutor under Alternativ > Valutor.', // home page: - 'transaction_table_description' => 'En tabell som innehåller dina transaktioner', - 'opposing_account' => 'Motsatt konto', - 'yourAccounts' => 'Dina konton', - 'your_accounts' => 'Din kontoöversikt', - 'category_overview' => 'Kategori översikt', - 'expense_overview' => 'Översikt kostnadskonto', - 'revenue_overview' => 'Översikt intäktskonto', - 'budgetsAndSpending' => 'Budgetar och utgifter', - 'budgets_and_spending' => 'Budgetar och utgifter', - 'go_to_budget' => 'Gå till budget "{budget}"', - 'go_to_deposits' => 'Gå till insättningar', - 'go_to_expenses' => 'Gå till utgifter', - 'savings' => 'Sparande', - 'newWithdrawal' => 'Ny utgift', - 'newDeposit' => 'Ny insättning', - 'newTransfer' => 'Ny överföring', - 'bills_to_pay' => 'Räkningar + 'transaction_table_description' => 'En tabell som innehåller dina transaktioner', + 'opposing_account' => 'Motsatt konto', + 'yourAccounts' => 'Dina konton', + 'your_accounts' => 'Din kontoöversikt', + 'category_overview' => 'Kategori översikt', + 'expense_overview' => 'Översikt kostnadskonto', + 'revenue_overview' => 'Översikt intäktskonto', + 'budgetsAndSpending' => 'Budgetar och utgifter', + 'budgets_and_spending' => 'Budgetar och utgifter', + 'go_to_budget' => 'Gå till budget "{budget}"', + 'go_to_deposits' => 'Gå till insättningar', + 'go_to_expenses' => 'Gå till utgifter', + 'savings' => 'Sparande', + 'newWithdrawal' => 'Ny utgift', + 'newDeposit' => 'Ny insättning', + 'newTransfer' => 'Ny överföring', + 'bills_to_pay' => 'Räkningar att betala', - 'per_day' => 'Per dag', - 'left_to_spend_per_day' => 'Kvar att spendera per dag', - 'bills_paid' => 'Räkningar betalda', - 'custom_period' => 'Anpassad period', - 'reset_to_current' => 'Återställ till nuvarande period', - 'select_period' => 'Välj en period', + 'per_day' => 'Per dag', + 'left_to_spend_per_day' => 'Kvar att spendera per dag', + 'bills_paid' => 'Räkningar betalda', + 'custom_period' => 'Anpassad period', + 'reset_to_current' => 'Återställ till nuvarande period', + 'select_period' => 'Välj en period', // menu and titles, should be recycled as often as possible: - 'currency' => 'Valuta', - 'preferences' => 'Inställningar', - 'logout' => 'Logga ut', - 'logout_other_sessions' => 'Logga ut alla andra sessioner', - 'toggleNavigation' => 'Växla navigering', - 'searchPlaceholder' => 'Sök...', - 'version' => 'Version', - 'dashboard' => 'Kontrollpanel', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Tillgänglig budget ({currency})', - 'currencies' => 'Valutor', - 'activity' => 'Aktivitet', - 'usage' => 'Användning', - 'accounts' => 'Konton', - 'Asset account' => 'Tillgångskonto', - 'Default account' => 'Tillgångskonto', - 'Expense account' => 'Kostnadskonto', - 'Revenue account' => 'Intäktskonton', - 'Initial balance account' => 'Startbalans konto', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Skuld', - 'account_type_Loan' => 'Lån', - 'account_type_Mortgage' => 'Bolån', - 'account_type_debt' => 'Skuld', - 'account_type_loan' => 'Lån', - 'account_type_mortgage' => 'Bolån', - 'account_type_Credit card' => 'Kreditkort', - 'credit_card_type_monthlyFull' => 'Full betalning varje månad', - 'liability_direction_credit' => 'Någon skyller mig denna skuld', - 'liability_direction_debit' => 'Jag är skyldig någon annan denna skuld', - 'liability_direction_credit_short' => 'Ägde denna skuld', - 'liability_direction_debit_short' => 'Äger denna skuld', - 'liability_direction__short' => 'Okänd', - 'liability_direction_null_short' => 'Okänd', - 'Liability credit' => 'Ansvar kredit', - 'budgets' => 'Budgetar', - 'tags' => 'Etiketter', - 'reports' => 'Rapporter', - 'transactions' => 'Transaktioner', - 'expenses' => 'Utgifter', - 'income' => 'Intäkter / inkomster', - 'transfers' => 'Överföringar', - 'moneyManagement' => 'Penninghantering', - 'money_management' => 'Penninghantering', - 'tools' => 'Verktyg', - 'piggyBanks' => 'Spargrisar', - 'piggy_banks' => 'Spargrisar', - 'amount_x_of_y' => '{current} av {total}', - 'bills' => 'Räkningar', - 'withdrawal' => 'Uttag', - 'opening_balance' => 'Ingående balans', - 'deposit' => 'Insättning', - 'account' => 'Konto', - 'transfer' => 'Överföring', - 'Withdrawal' => 'Uttag', - 'Deposit' => 'Insättning', - 'Transfer' => 'Överföring', - 'bill' => 'Nota', - 'yes' => 'Ja', - 'no' => 'Nej', - 'amount' => 'Belopp', - 'overview' => 'Översikt', - 'saveOnAccount' => 'Spara till konto', - 'unknown' => 'Okänd', - 'monthly' => 'Månatlig', - 'profile' => 'Profil', - 'errors' => 'Fel', - 'debt_start_date' => 'Skuldens startdatum', - 'debt_start_amount' => 'Skuldens startsumma', - 'debt_start_amount_help' => 'Det är alltid bäst att ställa in detta värde till ett negativt belopp. Läs hjälpsidorna (högst upp till höger (?)-ikonen) för mer information.', - 'interest_period_help' => 'Detta fält är rent kosmetiskt och kommer inte att beräknas för dig. Det har visat sig att banker är mycket lömska så Firefly III får det aldrig rätt.', - 'store_new_liabilities_account' => 'Spara en ny skuld', - 'edit_liabilities_account' => 'Ändra skuld ":name"', - 'financial_control' => 'Finansiell kontroll', - 'accounting' => 'Redovisning', - 'automation' => 'Automatisering', - 'others' => 'Andra', - 'classification' => 'Klassificering', - 'store_transaction' => 'Lagra transaktion', + 'currency' => 'Valuta', + 'preferences' => 'Inställningar', + 'logout' => 'Logga ut', + 'logout_other_sessions' => 'Logga ut alla andra sessioner', + 'toggleNavigation' => 'Växla navigering', + 'searchPlaceholder' => 'Sök...', + 'version' => 'Version', + 'dashboard' => 'Kontrollpanel', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Tillgänglig budget ({currency})', + 'currencies' => 'Valutor', + 'activity' => 'Aktivitet', + 'usage' => 'Användning', + 'accounts' => 'Konton', + 'Asset account' => 'Tillgångskonto', + 'Default account' => 'Tillgångskonto', + 'Expense account' => 'Kostnadskonto', + 'Revenue account' => 'Intäktskonton', + 'Initial balance account' => 'Startbalans konto', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Skuld', + 'account_type_Loan' => 'Lån', + 'account_type_Mortgage' => 'Bolån', + 'account_type_debt' => 'Skuld', + 'account_type_loan' => 'Lån', + 'account_type_mortgage' => 'Bolån', + 'account_type_Credit card' => 'Kreditkort', + 'credit_card_type_monthlyFull' => 'Full betalning varje månad', + 'liability_direction_credit' => 'Någon skyller mig denna skuld', + 'liability_direction_debit' => 'Jag är skyldig någon annan denna skuld', + 'liability_direction_credit_short' => 'Ägde denna skuld', + 'liability_direction_debit_short' => 'Äger denna skuld', + 'liability_direction__short' => 'Okänd', + 'liability_direction_null_short' => 'Okänd', + 'Liability credit' => 'Ansvar kredit', + 'budgets' => 'Budgetar', + 'tags' => 'Etiketter', + 'reports' => 'Rapporter', + 'transactions' => 'Transaktioner', + 'expenses' => 'Utgifter', + 'income' => 'Intäkter / inkomster', + 'transfers' => 'Överföringar', + 'moneyManagement' => 'Penninghantering', + 'money_management' => 'Penninghantering', + 'tools' => 'Verktyg', + 'piggyBanks' => 'Spargrisar', + 'piggy_banks' => 'Spargrisar', + 'amount_x_of_y' => '{current} av {total}', + 'bills' => 'Räkningar', + 'withdrawal' => 'Uttag', + 'opening_balance' => 'Ingående balans', + 'deposit' => 'Insättning', + 'account' => 'Konto', + 'transfer' => 'Överföring', + 'Withdrawal' => 'Uttag', + 'Deposit' => 'Insättning', + 'Transfer' => 'Överföring', + 'bill' => 'Nota', + 'yes' => 'Ja', + 'no' => 'Nej', + 'amount' => 'Belopp', + 'overview' => 'Översikt', + 'saveOnAccount' => 'Spara till konto', + 'unknown' => 'Okänd', + 'monthly' => 'Månatlig', + 'profile' => 'Profil', + 'errors' => 'Fel', + 'debt_start_date' => 'Skuldens startdatum', + 'debt_start_amount' => 'Skuldens startsumma', + 'debt_start_amount_help' => 'Det är alltid bäst att ställa in detta värde till ett negativt belopp. Läs hjälpsidorna (högst upp till höger (?)-ikonen) för mer information.', + 'interest_period_help' => 'Detta fält är rent kosmetiskt och kommer inte att beräknas för dig. Det har visat sig att banker är mycket lömska så Firefly III får det aldrig rätt.', + 'store_new_liabilities_account' => 'Spara en ny skuld', + 'edit_liabilities_account' => 'Ändra skuld ":name"', + 'financial_control' => 'Finansiell kontroll', + 'accounting' => 'Redovisning', + 'automation' => 'Automatisering', + 'others' => 'Andra', + 'classification' => 'Klassificering', + 'store_transaction' => 'Lagra transaktion', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2182,112 +2208,111 @@ return [ * */ - // reports: - 'report_default' => 'Standard ekonomisk rapport mellan :start och :end', - 'report_audit' => 'Transaktionshistoriköversikt mellan :start och :end', - 'report_category' => 'Kategorirapport mellan :start och :end', - 'report_double' => 'Kostnad/intäktskonto rapport mellan :start och :end', - 'report_budget' => 'Budgetrapport mellan :start och :end', - 'report_tag' => 'Etikett rapport mellan :start och :end', - 'quick_link_reports' => 'Snabblänkar', - 'quick_link_examples' => 'Dessa är några exempel länkar för dig att komma igång. Se hjälpsidorna under (?)-knappen för information om alla rapporter och magiska ord du kan använda.', - 'quick_link_default_report' => 'Standard ekonomisk rapport', - 'quick_link_audit_report' => 'Transaktionshistoriköversikt', - 'report_this_month_quick' => 'Nuvarande månad, alla konton', - 'report_last_month_quick' => 'Föregående månad, alla konton', - 'report_this_year_quick' => 'Nuvarande år, alla konton', - 'report_this_fiscal_year_quick' => 'Nuvarande bokföringsår, alla konton', - 'report_all_time_quick' => 'Komplett, alla konton', - 'reports_can_bookmark' => 'Kom ihåg att rapporter kan bokmärkas.', - 'incomeVsExpenses' => 'Inkomster vs utgifter', - 'accountBalances' => 'Kontobalanser', - 'balanceStart' => 'Balans vid början av period', - 'balanceEnd' => 'Balans vid slut av period', - 'splitByAccount' => 'Dela efter konto', - 'coveredWithTags' => 'Belagd med etiketter', - 'leftInBudget' => 'Kvar i budget', - 'left_in_debt' => 'Att betala', - 'sumOfSums' => 'Summan av beloppen', - 'noCategory' => '(ingen kategori)', - 'notCharged' => 'Inte debiterade (ännu)', - 'inactive' => 'Inaktiv', - 'active' => 'Aktiv', - 'difference' => 'Skillnad', - 'money_flowing_in' => 'In', - 'money_flowing_out' => 'Ut', - 'topX' => 'topp :number', - 'show_full_list' => 'Visa hela listan', - 'show_only_top' => 'Visa bara första :number', - 'report_type' => 'Rapporttyp', - 'report_type_default' => 'Standard ekonomisk rapport', - 'report_type_audit' => 'Transaktionshistoriköversikt (granskning)', - 'report_type_category' => 'Kategorirapport', - 'report_type_budget' => 'Budgetrapport', - 'report_type_tag' => 'Etikettrapport', - 'report_type_double' => 'Utgift/intäktskonto rapport', - 'more_info_help' => 'Mer information om dessa typer av rapporter kan hittas i hjälpsidorna. Tryck på (?) ikonen i det övre högra hörnet.', - 'report_included_accounts' => 'Inkludera konton', - 'report_date_range' => 'Datumintervall', - 'report_preset_ranges' => 'Förinställda intervall', - 'shared' => 'Delad', - 'fiscal_year' => 'Räkenskapsår', - 'income_entry' => 'Inkomst från konto ":name" mellan :start och :end', - 'expense_entry' => 'Utgifter från konto ":name" mellan :start och :end', - 'category_entry' => 'Utgifter och inkomster i kategori ":name" mellan :start och :end', - 'budget_spent_amount' => 'Utgifter i budget ":budget" mellan :start och :end', - 'balance_amount' => 'Utgifter i budget ":budget" betalad från konto ":account" mellan :start och :end', - 'no_audit_activity' => 'Ingen aktivitet registrerad på konto :account_name mellan :start och :end.', - 'audit_end_balance' => 'Kontosaldot på :account_name vid slutet av :end var :balance', - 'reports_extra_options' => 'Extra alternativ', - 'report_has_no_extra_options' => 'Denna rapport saknar extra alternativ', - 'reports_submit' => 'Visa rapport', - 'end_after_start_date' => 'Slutdatum för rapporten måste vara efter startdatum.', - 'select_category' => 'Välj kategori(er)', - 'select_budget' => 'Välj budget(ar).', - 'select_tag' => 'Välj etikett(er).', - 'income_per_category' => 'Intäkter per kategori', - 'expense_per_category' => 'Utgifter per kategori', - 'expense_per_budget' => 'Utgifter per budget', - 'income_per_account' => 'Inkomst per konto', - 'expense_per_account' => 'Utgifter per konto', - 'expense_per_tag' => 'Kostnader per etikett', - 'income_per_tag' => 'Inkomster per etikett', - 'include_expense_not_in_budget' => 'Inkludera utgifter utanför valda budget(er)', - 'include_expense_not_in_account' => 'Inkludera utgifter utanför valda konto(n)', - 'include_expense_not_in_category' => 'Inkludera utgifter utanför valda kategori(er)', - 'include_income_not_in_category' => 'Inkludes inkomster utanför valda kategori(er)', - 'include_income_not_in_account' => 'Inkludera inkomster utanför valda konto(n)', - 'include_income_not_in_tags' => 'Inkludera inkomster utanför valda etikett(er)', - 'include_expense_not_in_tags' => 'Inkludera utgifter utanför valda etikett(er)', - 'everything_else' => 'Allt annat', - 'income_and_expenses' => 'Inkomster och utgifter', - 'spent_average' => 'Spenderat (medel)', - 'income_average' => 'Inkomst (medel)', - 'transaction_count' => 'Antal transaktioner', - 'average_spending_per_account' => 'Medel spenderat per konto', - 'average_income_per_account' => 'Medel inkomst per konto', - 'total' => 'Total', - 'description' => 'Beskrivning', - 'sum_of_period' => 'Summa på period', - 'average_in_period' => 'Medel av period', - 'account_role_defaultAsset' => 'Förvalt tillgångskonto', - 'account_role_sharedAsset' => 'Delat tillgångskonto', - 'account_role_savingAsset' => 'Sparkonto', - 'account_role_ccAsset' => 'Kreditkort', - 'account_role_cashWalletAsset' => 'Plånbok', - 'budget_chart_click' => 'Klicka på ett budgetnamn i tabellen nedan för att se ett diagram.', - 'category_chart_click' => 'Klicka på ett kategorinamn i tabellen nedan för att se ett diagram.', - 'in_out_accounts' => 'Intjänat och spenderat per kombination', - 'in_out_accounts_per_asset' => 'Intjänat och spenderat (per tillgångskonto)', - 'in_out_per_category' => 'Intjänat och spenderat per kategori', - 'out_per_budget' => 'Spenderat per budget', - 'select_expense_revenue' => 'Välj utgifts-/intäktskonto', - 'multi_currency_report_sum' => 'Då denna lista innehåller konton med flera valutor, kan summor(na) se konstiga ut. Rapporten faller alltid tillbaka på din standard valuta.', - 'sum_in_default_currency' => 'Summan kommer alltid att vara i din standardvaluta.', - 'net_filtered_prefs' => 'Det här diagrammet kommer aldrig att innehålla konton som har alternativet "Inkludera i nätet värdet" avmarkerat.', + 'report_default' => 'Standard ekonomisk rapport mellan :start och :end', + 'report_audit' => 'Transaktionshistoriköversikt mellan :start och :end', + 'report_category' => 'Kategorirapport mellan :start och :end', + 'report_double' => 'Kostnad/intäktskonto rapport mellan :start och :end', + 'report_budget' => 'Budgetrapport mellan :start och :end', + 'report_tag' => 'Etikett rapport mellan :start och :end', + 'quick_link_reports' => 'Snabblänkar', + 'quick_link_examples' => 'Dessa är några exempel länkar för dig att komma igång. Se hjälpsidorna under (?)-knappen för information om alla rapporter och magiska ord du kan använda.', + 'quick_link_default_report' => 'Standard ekonomisk rapport', + 'quick_link_audit_report' => 'Transaktionshistoriköversikt', + 'report_this_month_quick' => 'Nuvarande månad, alla konton', + 'report_last_month_quick' => 'Föregående månad, alla konton', + 'report_this_year_quick' => 'Nuvarande år, alla konton', + 'report_this_fiscal_year_quick' => 'Nuvarande bokföringsår, alla konton', + 'report_all_time_quick' => 'Komplett, alla konton', + 'reports_can_bookmark' => 'Kom ihåg att rapporter kan bokmärkas.', + 'incomeVsExpenses' => 'Inkomster vs utgifter', + 'accountBalances' => 'Kontobalanser', + 'balanceStart' => 'Balans vid början av period', + 'balanceEnd' => 'Balans vid slut av period', + 'splitByAccount' => 'Dela efter konto', + 'coveredWithTags' => 'Belagd med etiketter', + 'leftInBudget' => 'Kvar i budget', + 'left_in_debt' => 'Att betala', + 'sumOfSums' => 'Summan av beloppen', + 'noCategory' => '(ingen kategori)', + 'notCharged' => 'Inte debiterade (ännu)', + 'inactive' => 'Inaktiv', + 'active' => 'Aktiv', + 'difference' => 'Skillnad', + 'money_flowing_in' => 'In', + 'money_flowing_out' => 'Ut', + 'topX' => 'topp :number', + 'show_full_list' => 'Visa hela listan', + 'show_only_top' => 'Visa bara första :number', + 'report_type' => 'Rapporttyp', + 'report_type_default' => 'Standard ekonomisk rapport', + 'report_type_audit' => 'Transaktionshistoriköversikt (granskning)', + 'report_type_category' => 'Kategorirapport', + 'report_type_budget' => 'Budgetrapport', + 'report_type_tag' => 'Etikettrapport', + 'report_type_double' => 'Utgift/intäktskonto rapport', + 'more_info_help' => 'Mer information om dessa typer av rapporter kan hittas i hjälpsidorna. Tryck på (?) ikonen i det övre högra hörnet.', + 'report_included_accounts' => 'Inkludera konton', + 'report_date_range' => 'Datumintervall', + 'report_preset_ranges' => 'Förinställda intervall', + 'shared' => 'Delad', + 'fiscal_year' => 'Räkenskapsår', + 'income_entry' => 'Inkomst från konto ":name" mellan :start och :end', + 'expense_entry' => 'Utgifter från konto ":name" mellan :start och :end', + 'category_entry' => 'Utgifter och inkomster i kategori ":name" mellan :start och :end', + 'budget_spent_amount' => 'Utgifter i budget ":budget" mellan :start och :end', + 'balance_amount' => 'Utgifter i budget ":budget" betalad från konto ":account" mellan :start och :end', + 'no_audit_activity' => 'Ingen aktivitet registrerad på konto :account_name mellan :start och :end.', + 'audit_end_balance' => 'Kontosaldot på :account_name vid slutet av :end var :balance', + 'reports_extra_options' => 'Extra alternativ', + 'report_has_no_extra_options' => 'Denna rapport saknar extra alternativ', + 'reports_submit' => 'Visa rapport', + 'end_after_start_date' => 'Slutdatum för rapporten måste vara efter startdatum.', + 'select_category' => 'Välj kategori(er)', + 'select_budget' => 'Välj budget(ar).', + 'select_tag' => 'Välj etikett(er).', + 'income_per_category' => 'Intäkter per kategori', + 'expense_per_category' => 'Utgifter per kategori', + 'expense_per_budget' => 'Utgifter per budget', + 'income_per_account' => 'Inkomst per konto', + 'expense_per_account' => 'Utgifter per konto', + 'expense_per_tag' => 'Kostnader per etikett', + 'income_per_tag' => 'Inkomster per etikett', + 'include_expense_not_in_budget' => 'Inkludera utgifter utanför valda budget(er)', + 'include_expense_not_in_account' => 'Inkludera utgifter utanför valda konto(n)', + 'include_expense_not_in_category' => 'Inkludera utgifter utanför valda kategori(er)', + 'include_income_not_in_category' => 'Inkludes inkomster utanför valda kategori(er)', + 'include_income_not_in_account' => 'Inkludera inkomster utanför valda konto(n)', + 'include_income_not_in_tags' => 'Inkludera inkomster utanför valda etikett(er)', + 'include_expense_not_in_tags' => 'Inkludera utgifter utanför valda etikett(er)', + 'everything_else' => 'Allt annat', + 'income_and_expenses' => 'Inkomster och utgifter', + 'spent_average' => 'Spenderat (medel)', + 'income_average' => 'Inkomst (medel)', + 'transaction_count' => 'Antal transaktioner', + 'average_spending_per_account' => 'Medel spenderat per konto', + 'average_income_per_account' => 'Medel inkomst per konto', + 'total' => 'Total', + 'description' => 'Beskrivning', + 'sum_of_period' => 'Summa på period', + 'average_in_period' => 'Medel av period', + 'account_role_defaultAsset' => 'Förvalt tillgångskonto', + 'account_role_sharedAsset' => 'Delat tillgångskonto', + 'account_role_savingAsset' => 'Sparkonto', + 'account_role_ccAsset' => 'Kreditkort', + 'account_role_cashWalletAsset' => 'Plånbok', + 'budget_chart_click' => 'Klicka på ett budgetnamn i tabellen nedan för att se ett diagram.', + 'category_chart_click' => 'Klicka på ett kategorinamn i tabellen nedan för att se ett diagram.', + 'in_out_accounts' => 'Intjänat och spenderat per kombination', + 'in_out_accounts_per_asset' => 'Intjänat och spenderat (per tillgångskonto)', + 'in_out_per_category' => 'Intjänat och spenderat per kategori', + 'out_per_budget' => 'Spenderat per budget', + 'select_expense_revenue' => 'Välj utgifts-/intäktskonto', + 'multi_currency_report_sum' => 'Då denna lista innehåller konton med flera valutor, kan summor(na) se konstiga ut. Rapporten faller alltid tillbaka på din standard valuta.', + 'sum_in_default_currency' => 'Summan kommer alltid att vara i din standardvaluta.', + 'net_filtered_prefs' => 'Det här diagrammet kommer aldrig att innehålla konton som har alternativet "Inkludera i nätet värdet" avmarkerat.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2298,98 +2323,98 @@ return [ * */ - // charts: - 'chart' => 'Graf', - 'month' => 'Månad', - 'budget' => 'Budget', - 'spent' => 'Spenderat', - 'spent_capped' => 'Spenderade (kantade)', - 'spent_in_budget' => 'Spenderat per budget', - 'left_to_spend' => 'Återstår att spendera', - 'earned' => 'Tjänat', - 'overspent' => 'Överansträngd', - 'left' => 'Återstår', - 'max-amount' => 'Högsta belopp', - 'min-amount' => 'Lägsta belopp', - 'journal-amount' => 'Aktuell notapost', - 'name' => 'Namn', - 'date' => 'Datum', - 'date_and_time' => 'Datum och tid', - 'time' => 'Tid', - 'paid' => 'Betald', - 'unpaid' => 'Obetald', - 'day' => 'Dag', - 'budgeted' => 'Budgeterat', - 'period' => 'Period', - 'balance' => 'Saldo', - 'in_out_period' => 'In + ut denna period', - 'sum' => 'Summa', - 'summary' => 'Översikt', - 'average' => 'Medel', - 'balanceFor' => 'Saldo för :name', - 'no_tags' => '(inga etiketter)', + 'chart' => 'Graf', + 'month' => 'Månad', + 'budget' => 'Budget', + 'spent' => 'Spenderat', + 'spent_capped' => 'Spenderade (kantade)', + 'spent_in_budget' => 'Spenderat per budget', + 'left_to_spend' => 'Återstår att spendera', + 'earned' => 'Tjänat', + 'overspent' => 'Överansträngd', + 'left' => 'Återstår', + 'max-amount' => 'Högsta belopp', + 'min-amount' => 'Lägsta belopp', + 'journal-amount' => 'Aktuell notapost', + 'name' => 'Namn', + 'date' => 'Datum', + 'date_and_time' => 'Datum och tid', + 'time' => 'Tid', + 'paid' => 'Betald', + 'unpaid' => 'Obetald', + 'day' => 'Dag', + 'budgeted' => 'Budgeterat', + 'period' => 'Period', + 'balance' => 'Saldo', + 'in_out_period' => 'In + ut denna period', + 'sum' => 'Summa', + 'summary' => 'Översikt', + 'average' => 'Medel', + 'balanceFor' => 'Saldo för :name', + 'no_tags' => '(inga etiketter)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Lägg till pengar till spargris ":name"', - 'piggy_bank' => 'Spargris', - 'new_piggy_bank' => 'Ny spargris', - 'store_piggy_bank' => 'Lagra ny spargris', - 'stored_piggy_bank' => 'Lagra ny spargris ":name"', - 'account_status' => 'Kontostatus', - 'left_for_piggy_banks' => 'Kvar för spargrisar', - 'sum_of_piggy_banks' => 'Summa sparbanker', - 'saved_so_far' => 'Sparat hittills', - 'left_to_save' => 'Kvar att spara', - 'suggested_amount' => 'Föreslaget månadsbelopp att spara', - 'add_money_to_piggy_title' => 'Lägg till pengar till spargris ":name"', - 'remove_money_from_piggy_title' => 'Ta bort pengar från spargris ":name"', - 'add' => 'Lägg till', - 'no_money_for_piggy' => 'Du saknar pengar att lägga till i denna spargris.', - 'suggested_savings_per_month' => 'Föreslaget per månad', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Lägg till pengar till spargris ":name"', + 'piggy_bank' => 'Spargris', + 'new_piggy_bank' => 'Ny spargris', + 'store_piggy_bank' => 'Lagra ny spargris', + 'stored_piggy_bank' => 'Lagra ny spargris ":name"', + 'account_status' => 'Kontostatus', + 'left_for_piggy_banks' => 'Kvar för spargrisar', + 'sum_of_piggy_banks' => 'Summa sparbanker', + 'saved_so_far' => 'Sparat hittills', + 'left_to_save' => 'Kvar att spara', + 'suggested_amount' => 'Föreslaget månadsbelopp att spara', + 'add_money_to_piggy_title' => 'Lägg till pengar till spargris ":name"', + 'remove_money_from_piggy_title' => 'Ta bort pengar från spargris ":name"', + 'add' => 'Lägg till', + 'no_money_for_piggy' => 'Du saknar pengar att lägga till i denna spargris.', + 'suggested_savings_per_month' => 'Föreslaget per månad', - 'remove' => 'Ta bort', - 'max_amount_add' => 'Max belopp du kan lägga till är', - 'max_amount_remove' => 'Max belopp du kan ta bort är', - 'update_piggy_button' => 'Uppdatera spargris', - 'update_piggy_title' => 'Uppdatera spargris ":name"', - 'updated_piggy_bank' => 'Uppdaterat spargris ":name"', - 'details' => 'Detaljer', - 'events' => 'Händelser', - 'target_amount' => 'Mål belopp', - 'start_date' => 'Startdatum', - 'no_start_date' => 'Inget startdatum', - 'target_date' => 'Måldatum', - 'no_target_date' => 'Inget måldatum', - 'table' => 'Tabell', - 'delete_piggy_bank' => 'Ta bort spargris ":name"', - 'cannot_add_amount_piggy' => ':amount kunde inte läggas till ":name".', - 'cannot_remove_from_piggy' => ':amount kunde inte tas bort från ":name".', - 'deleted_piggy_bank' => 'Spargris ":name" har tagits bort', - 'added_amount_to_piggy' => ':amount lades till ":name"', - 'removed_amount_from_piggy' => ':amount togs bort från ":name"', - 'piggy_events' => 'Relaterade spargrisar', + 'remove' => 'Ta bort', + 'max_amount_add' => 'Max belopp du kan lägga till är', + 'max_amount_remove' => 'Max belopp du kan ta bort är', + 'update_piggy_button' => 'Uppdatera spargris', + 'update_piggy_title' => 'Uppdatera spargris ":name"', + 'updated_piggy_bank' => 'Uppdaterat spargris ":name"', + 'details' => 'Detaljer', + 'events' => 'Händelser', + 'target_amount' => 'Mål belopp', + 'start_date' => 'Startdatum', + 'no_start_date' => 'Inget startdatum', + 'target_date' => 'Måldatum', + 'no_target_date' => 'Inget måldatum', + 'table' => 'Tabell', + 'delete_piggy_bank' => 'Ta bort spargris ":name"', + 'cannot_add_amount_piggy' => ':amount kunde inte läggas till ":name".', + 'cannot_remove_from_piggy' => ':amount kunde inte tas bort från ":name".', + 'deleted_piggy_bank' => 'Spargris ":name" har tagits bort', + 'added_amount_to_piggy' => ':amount lades till ":name"', + 'removed_amount_from_piggy' => ':amount togs bort från ":name"', + 'piggy_events' => 'Relaterade spargrisar', // tags - 'delete_tag' => 'Ta bort etiketten ":tag"', - 'deleted_tag' => 'Tog bort etiketten ":tag"', - 'new_tag' => 'Skapa en ny etikett', - 'edit_tag' => 'Ändra etikett ":tag"', - 'updated_tag' => 'Uppdatera etikett ":tag"', - 'created_tag' => 'Etiketten ":tag" har skapats!', + 'delete_tag' => 'Ta bort etiketten ":tag"', + 'deleted_tag' => 'Tog bort etiketten ":tag"', + 'new_tag' => 'Skapa en ny etikett', + 'edit_tag' => 'Ändra etikett ":tag"', + 'updated_tag' => 'Uppdatera etikett ":tag"', + 'created_tag' => 'Etiketten ":tag" har skapats!', - 'transaction_journal_information' => 'Transaktionsinformation', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Metadata', - 'transaction_journal_more' => 'Mer information', - 'basic_journal_information' => 'Grundläggande transaktionsinformation', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Sparad under ":journal"', - 'total_amount' => 'Totala summan', - 'number_of_decimals' => 'Antal decimaler', + 'transaction_journal_information' => 'Transaktionsinformation', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Metadata', + 'transaction_journal_more' => 'Mer information', + 'basic_journal_information' => 'Grundläggande transaktionsinformation', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => 'Sparad under ":journal"', + 'total_amount' => 'Totala summan', + 'number_of_decimals' => 'Antal decimaler', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2400,282 +2425,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'Inbjudan till ":address" har redan lösts in.', - 'invite_is_deleted' => 'Inbjudan till ":address" har tagits bort.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Administration', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Användaradministration', - 'list_all_users' => 'Alla användare', - 'all_users' => 'Alla användare', - 'instance_configuration' => 'Konfiguration', - 'firefly_instance_configuration' => 'Konfigurationsalternativ för Firefly III', - 'setting_single_user_mode' => 'Enkelanvändarläge', - 'setting_single_user_mode_explain' => 'Som standard accepterar Firefly III endas en (1) registrator: du. Detta är en säkerhetstanke, för att förhindra andra från att använda din instans bara om du tillåter det. Framtida registreringar är blockerade. Om du kryssar ur denna ruta, så kan andra användare också använda din instans, förutsatt att de kan nå den (när den är ansluten till internet).', - 'store_configuration' => 'Spara konfiguration', - 'single_user_administration' => 'Användaradministration för :email', - 'edit_user' => 'Redigera användare :email', - 'hidden_fields_preferences' => 'Du kan aktivera fler transaktionsalternativ i dina inställningar.', - 'user_data_information' => 'Användardata', - 'user_information' => 'Användar information', - 'total_size' => 'total storlek', - 'budget_or_budgets' => ':count budget|:count budgetar', - 'budgets_with_limits' => ':count budget med konfigurerat belopp|:count budgetar med konfigurerat belopp', - 'nr_of_rules_in_total_groups' => ':count_rules regel/regler i :count_groups regelgrupp(er)', - 'tag_or_tags' => ':count tag|:count taggar', - 'configuration_updated' => 'Konfigurationen har uppdaterats', - 'setting_is_demo_site' => 'Demo webbplats', - 'setting_is_demo_site_explain' => 'Om du kryssar i denna ruta, kommer installation att bete sig som om det är demosidan, vilket kan ha konstiga biverkningar.', - 'block_code_bounced' => 'E-postmeddelande(n) studsade', - 'block_code_expired' => 'Demo-konto har löpt ut', - 'no_block_code' => 'Ingen anledning till blockering eller användare inte blockerad', - 'block_code_email_changed' => 'Användaren har ännu inte bekräftat ny e-postadress', - 'admin_update_email' => 'I motsats till profilsidan kommer användaren INTE att meddelas att deras e-postadress har ändrats!', - 'update_user' => 'Uppdatera användare', - 'updated_user' => 'Användardata har ändrats.', - 'delete_user' => 'Ta bort användare :email', - 'user_deleted' => 'Användaren har tagits bort', - 'send_test_email' => 'Skicka testmeddelande via e-post', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Skicka meddelande', - 'send_test_triggered' => 'Test utlöst. Kontrollera din inkorg och loggfilerna.', - 'give_admin_careful' => 'Användare som får administratörsrättigheter kan ta bort din. Var försiktig.', - 'admin_maintanance_title' => 'Underhåll', - 'admin_maintanance_expl' => 'Några fiffiga knappar för Firefly III underhåll', - 'admin_maintenance_clear_cache' => 'Rensa cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Beskrivning av delad transaktion', - 'split_transaction_title_help' => 'Om du skapar en delad transaktion måste det finnas en global beskrivning för alla delningar av transaktionen.', - 'split_title_help' => 'Om du skapar en delad transaktion måste det finnas en global beskrivning för alla delningar av transaktionen.', - 'you_create_transfer' => 'Du skapar en överföring.', - 'you_create_withdrawal' => 'Du skapar ett uttag.', - 'you_create_deposit' => 'Du skapar en insättning.', + 'invite_is_already_redeemed' => 'Inbjudan till ":address" har redan lösts in.', + 'invite_is_deleted' => 'Inbjudan till ":address" har tagits bort.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Administration', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'Användaradministration', + 'list_all_users' => 'Alla användare', + 'all_users' => 'Alla användare', + 'instance_configuration' => 'Konfiguration', + 'firefly_instance_configuration' => 'Konfigurationsalternativ för Firefly III', + 'setting_single_user_mode' => 'Enkelanvändarläge', + 'setting_single_user_mode_explain' => 'Som standard accepterar Firefly III endas en (1) registrator: du. Detta är en säkerhetstanke, för att förhindra andra från att använda din instans bara om du tillåter det. Framtida registreringar är blockerade. Om du kryssar ur denna ruta, så kan andra användare också använda din instans, förutsatt att de kan nå den (när den är ansluten till internet).', + 'store_configuration' => 'Spara konfiguration', + 'single_user_administration' => 'Användaradministration för :email', + 'edit_user' => 'Redigera användare :email', + 'hidden_fields_preferences' => 'Du kan aktivera fler transaktionsalternativ i dina inställningar.', + 'user_data_information' => 'Användardata', + 'user_information' => 'Användar information', + 'total_size' => 'total storlek', + 'budget_or_budgets' => ':count budget|:count budgetar', + 'budgets_with_limits' => ':count budget med konfigurerat belopp|:count budgetar med konfigurerat belopp', + 'nr_of_rules_in_total_groups' => ':count_rules regel/regler i :count_groups regelgrupp(er)', + 'tag_or_tags' => ':count tag|:count taggar', + 'configuration_updated' => 'Konfigurationen har uppdaterats', + 'setting_is_demo_site' => 'Demo webbplats', + 'setting_is_demo_site_explain' => 'Om du kryssar i denna ruta, kommer installation att bete sig som om det är demosidan, vilket kan ha konstiga biverkningar.', + 'block_code_bounced' => 'E-postmeddelande(n) studsade', + 'block_code_expired' => 'Demo-konto har löpt ut', + 'no_block_code' => 'Ingen anledning till blockering eller användare inte blockerad', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Användaren har ännu inte bekräftat ny e-postadress', + 'admin_update_email' => 'I motsats till profilsidan kommer användaren INTE att meddelas att deras e-postadress har ändrats!', + 'update_user' => 'Uppdatera användare', + 'updated_user' => 'Användardata har ändrats.', + 'delete_user' => 'Ta bort användare :email', + 'user_deleted' => 'Användaren har tagits bort', + 'send_test_email' => 'Skicka testmeddelande via e-post', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Skicka meddelande', + 'send_test_triggered' => 'Test utlöst. Kontrollera din inkorg och loggfilerna.', + 'give_admin_careful' => 'Användare som får administratörsrättigheter kan ta bort din. Var försiktig.', + 'admin_maintanance_title' => 'Underhåll', + 'admin_maintanance_expl' => 'Några fiffiga knappar för Firefly III underhåll', + 'admin_maintenance_clear_cache' => 'Rensa cache', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Beskrivning av delad transaktion', + 'split_transaction_title_help' => 'Om du skapar en delad transaktion måste det finnas en global beskrivning för alla delningar av transaktionen.', + 'split_title_help' => 'Om du skapar en delad transaktion måste det finnas en global beskrivning för alla delningar av transaktionen.', + 'you_create_transfer' => 'Du skapar en överföring.', + 'you_create_withdrawal' => 'Du skapar ett uttag.', + 'you_create_deposit' => 'Du skapar en insättning.', // links - 'journal_link_configuration' => 'Konfiguration av transaktionslänkar', - 'create_new_link_type' => 'Skapa ny länktyp', - 'store_new_link_type' => 'Lagra ny länktyp', - 'update_link_type' => 'Uppdatera länktyp', - 'edit_link_type' => 'Redigera länktyp ":name"', - 'updated_link_type' => 'Länktypen ":name" uppdaterades', - 'delete_link_type' => 'Ta bort länktyp ":name"', - 'deleted_link_type' => 'Länktypen ":name" raderad', - 'stored_new_link_type' => 'Lagra ny länktyp ":name"', - 'cannot_edit_link_type' => 'Kan inte redigera länktyp ":name"', - 'link_type_help_name' => 'T. ex. "dubbletter"', - 'link_type_help_inward' => 'T. ex. "dubbletter"', - 'link_type_help_outward' => 'T. ex. "är dubbellet av"', - 'save_connections_by_moving' => 'Spara länken mellan dessa transaktioner genom att flytta dem till en annan länktyp:', - 'do_not_save_connection' => '(spara inte koppling)', - 'link_transaction' => 'Länka transaktion', - 'link_to_other_transaction' => 'Länka denna transaktion till en annan transaktion', - 'select_transaction_to_link' => 'Välj en transaktion för att länka denna transaktion till. Länkarna är för närvarande oanvända i Firefly III (förutom att visas), men jag planerar att ändra detta i framtiden. Använd sökrutan för att välja en transaktion antingen efter titel eller efter ID. Om du vill lägga till anpassade länktyper, kolla in administrationsavsnittet.', - 'this_transaction' => 'Denna transaktion', - 'transaction' => 'Transaktion', - 'comments' => 'Kommentarer', - 'link_notes' => 'Eventuella anteckningar som du vill lagra med länken.', - 'invalid_link_selection' => 'Kan inte länka dessa transaktioner', - 'selected_transaction' => 'Vald transaktion', - 'journals_linked' => 'Transaktioner är länkade.', - 'journals_error_linked' => 'Dessa transaktioner är redan länkade.', - 'journals_link_to_self' => 'Går inte länka en transaktion till sig själv', - 'journal_links' => 'Transaktionslänkar', - 'this_withdrawal' => 'Detta uttag', - 'this_deposit' => 'Denna insättning', - 'this_transfer' => 'Denna överföring', - 'overview_for_link' => 'Översikt för länktyp ":name"', - 'source_transaction' => 'Källtransaktion', - 'link_description' => 'Länkbeskrivning', - 'destination_transaction' => 'Destinationstransaktion', - 'delete_journal_link' => 'Ta bort länk mellan :source och :destination', - 'deleted_link' => 'Länk borttagen', + 'journal_link_configuration' => 'Konfiguration av transaktionslänkar', + 'create_new_link_type' => 'Skapa ny länktyp', + 'store_new_link_type' => 'Lagra ny länktyp', + 'update_link_type' => 'Uppdatera länktyp', + 'edit_link_type' => 'Redigera länktyp ":name"', + 'updated_link_type' => 'Länktypen ":name" uppdaterades', + 'delete_link_type' => 'Ta bort länktyp ":name"', + 'deleted_link_type' => 'Länktypen ":name" raderad', + 'stored_new_link_type' => 'Lagra ny länktyp ":name"', + 'cannot_edit_link_type' => 'Kan inte redigera länktyp ":name"', + 'link_type_help_name' => 'T. ex. "dubbletter"', + 'link_type_help_inward' => 'T. ex. "dubbletter"', + 'link_type_help_outward' => 'T. ex. "är dubbellet av"', + 'save_connections_by_moving' => 'Spara länken mellan dessa transaktioner genom att flytta dem till en annan länktyp:', + 'do_not_save_connection' => '(spara inte koppling)', + 'link_transaction' => 'Länka transaktion', + 'link_to_other_transaction' => 'Länka denna transaktion till en annan transaktion', + 'select_transaction_to_link' => 'Välj en transaktion för att länka denna transaktion till. Länkarna är för närvarande oanvända i Firefly III (förutom att visas), men jag planerar att ändra detta i framtiden. Använd sökrutan för att välja en transaktion antingen efter titel eller efter ID. Om du vill lägga till anpassade länktyper, kolla in administrationsavsnittet.', + 'this_transaction' => 'Denna transaktion', + 'transaction' => 'Transaktion', + 'comments' => 'Kommentarer', + 'link_notes' => 'Eventuella anteckningar som du vill lagra med länken.', + 'invalid_link_selection' => 'Kan inte länka dessa transaktioner', + 'selected_transaction' => 'Vald transaktion', + 'journals_linked' => 'Transaktioner är länkade.', + 'journals_error_linked' => 'Dessa transaktioner är redan länkade.', + 'journals_link_to_self' => 'Går inte länka en transaktion till sig själv', + 'journal_links' => 'Transaktionslänkar', + 'this_withdrawal' => 'Detta uttag', + 'this_deposit' => 'Denna insättning', + 'this_transfer' => 'Denna överföring', + 'overview_for_link' => 'Översikt för länktyp ":name"', + 'source_transaction' => 'Källtransaktion', + 'link_description' => 'Länkbeskrivning', + 'destination_transaction' => 'Destinationstransaktion', + 'delete_journal_link' => 'Ta bort länk mellan :source och :destination', + 'deleted_link' => 'Länk borttagen', // link translations: - 'Paid_name' => 'Betalad', - 'Refund_name' => 'Återbetalning', - 'Reimbursement_name' => 'Ersättning', - 'Related_name' => 'Relaterad', - 'relates to_inward' => 'relaterad till', - 'is (partially) refunded by_inward' => 'är (delvis) återbetalad av', - 'is (partially) paid for by_inward' => 'är (delvis) betalad från', - 'is (partially) reimbursed by_inward' => 'är (delvis) ersatt från', - 'inward_transaction' => 'Intransaktion', - 'outward_transaction' => 'Utgående transaktion', - 'relates to_outward' => 'relaterad till', - '(partially) refunds_outward' => '(delvis) återbetalningar', - '(partially) pays for_outward' => '(delvis) betalning för', - '(partially) reimburses_outward' => '(delvis) ersättning', - 'is (partially) refunded by' => 'är (delvis) återbetalad av', - 'is (partially) paid for by' => 'betalas (delvis) av', - 'is (partially) reimbursed by' => 'ersätts (delvis) av', - 'relates to' => 'relaterar till', - '(partially) refunds' => '(delvis) återbetalning', - '(partially) pays for' => '(delvis) betalar för', - '(partially) reimburses' => '(delvis) återbetalar', + 'Paid_name' => 'Betalad', + 'Refund_name' => 'Återbetalning', + 'Reimbursement_name' => 'Ersättning', + 'Related_name' => 'Relaterad', + 'relates to_inward' => 'relaterad till', + 'is (partially) refunded by_inward' => 'är (delvis) återbetalad av', + 'is (partially) paid for by_inward' => 'är (delvis) betalad från', + 'is (partially) reimbursed by_inward' => 'är (delvis) ersatt från', + 'inward_transaction' => 'Intransaktion', + 'outward_transaction' => 'Utgående transaktion', + 'relates to_outward' => 'relaterad till', + '(partially) refunds_outward' => '(delvis) återbetalningar', + '(partially) pays for_outward' => '(delvis) betalning för', + '(partially) reimburses_outward' => '(delvis) ersättning', + 'is (partially) refunded by' => 'är (delvis) återbetalad av', + 'is (partially) paid for by' => 'betalas (delvis) av', + 'is (partially) reimbursed by' => 'ersätts (delvis) av', + 'relates to' => 'relaterar till', + '(partially) refunds' => '(delvis) återbetalning', + '(partially) pays for' => '(delvis) betalar för', + '(partially) reimburses' => '(delvis) återbetalar', // split a transaction: - 'splits' => 'Dela upp', - 'add_another_split' => 'Lägga till en annan delning', - 'cannot_edit_opening_balance' => 'Går inte ändra öppningsbalansen på ett konto.', - 'no_edit_multiple_left' => 'Du har inte valt en giltig transaktion att ändra.', - 'breadcrumb_convert_group' => 'Konvertera transaktion', - 'convert_invalid_source' => 'Källinformation är ogiltig för transaktion #%d.', - 'convert_invalid_destination' => 'Destinationsinformation är ogiltig för transaktion #%d.', - 'create_another' => 'Efter sparat, återkom hit för att skapa ytterligare en.', - 'after_update_create_another' => 'Efter uppdaterat, återkom hit för att fortsätta redigera.', - 'store_as_new' => 'Spara en ny transaktion istället för att uppdatera.', - 'reset_after' => 'Återställ formulär efter inskickat', - 'errors_submission' => 'Något fel uppstod med inskickningen. Vänligen kontrollera felen nedan.', - 'transaction_expand_split' => 'Expandera delningen', - 'transaction_collapse_split' => 'Minimera delning', + 'splits' => 'Dela upp', + 'add_another_split' => 'Lägga till en annan delning', + 'cannot_edit_opening_balance' => 'Går inte ändra öppningsbalansen på ett konto.', + 'no_edit_multiple_left' => 'Du har inte valt en giltig transaktion att ändra.', + 'breadcrumb_convert_group' => 'Konvertera transaktion', + 'convert_invalid_source' => 'Källinformation är ogiltig för transaktion #%d.', + 'convert_invalid_destination' => 'Destinationsinformation är ogiltig för transaktion #%d.', + 'create_another' => 'Efter sparat, återkom hit för att skapa ytterligare en.', + 'after_update_create_another' => 'Efter uppdaterat, återkom hit för att fortsätta redigera.', + 'store_as_new' => 'Spara en ny transaktion istället för att uppdatera.', + 'reset_after' => 'Återställ formulär efter inskickat', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expandera delningen', + 'transaction_collapse_split' => 'Minimera delning', // object groups - 'default_group_title_name' => '(ogrupperad)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ogrupperad)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Låt oss skapa ett tillgångskonto!', - 'no_accounts_intro_asset' => 'Inga tillgångskonton ännu. Tillgångskonton är dina huvudkonton: kontrollkonto, sparkonto, delat konto eller även ditt kreditkort.', - 'no_accounts_imperative_asset' => 'För att börja använda Firefly III måste du skapa minst ett tillgångskonto. Låt oss göra det nu:', - 'no_accounts_create_asset' => 'Skapa ett tillgångskonto', - 'no_accounts_title_expense' => 'Låt oss skapa ett utgiftskonton!', - 'no_accounts_intro_expense' => 'Du har inga utgiftskonton ännu. Utgiftskonton är de platser där du spenderar pengar, såsom butiker och stormarknader.', - 'no_accounts_imperative_expense' => 'Utgiftskonton skapas automatiskt när du skapar transaktioner, men du kan skapa en manuellt också, om du vill. Låt oss skapa en nu:', - 'no_accounts_create_expense' => 'Skapa ett utgiftskonto', - 'no_accounts_title_revenue' => 'Låt oss skapa ett intäktskonto!', - 'no_accounts_intro_revenue' => 'Du har inga intäktskonton än. Intäktskonton är de platser där du får pengar från, till exempel din arbetsgivare.', - 'no_accounts_imperative_revenue' => 'Intäktskonton skapas automatiskt när du skapar transaktioner, men du kan skapa en manuellt också, om du vill. Låt oss skapa en nu:', - 'no_accounts_create_revenue' => 'Skapa ett intäktskonto', - 'no_accounts_title_liabilities' => 'Låt oss skapa en skuld!', - 'no_accounts_intro_liabilities' => 'Du har inga skulder ännu. Skulder är de konton som registrerar dina (studerande) lån och andra skulder.', - 'no_accounts_imperative_liabilities' => 'Du behöver inte använda den här funktionen, men det kan vara användbart om du vill hålla reda på dessa saker.', - 'no_accounts_create_liabilities' => 'Skapa en ny skuld', - 'no_budgets_title_default' => 'Låt oss skapa en budget', - 'no_rules_title_default' => 'Låt oss skapa en regel', - 'no_budgets_intro_default' => 'Du har inga budgetar ännu. Budgetar används för att organisera dina utgifter i logiska grupper, som du kan ge en soft-cap för att begränsa dina utgifter.', - 'no_rules_intro_default' => 'Du har inga regler ännu. Regler är kraftfulla automatiseringar som kan hantera transaktioner åt dig.', - 'no_rules_imperative_default' => 'Regler kan vara mycket användbara när du hanterar transaktioner. Låt oss skapa en nu:', - 'no_budgets_imperative_default' => 'Budgetarna är de grundläggande verktygen för ekonomisk förvaltning. Låt oss skapa ett nu:', - 'no_budgets_create_default' => 'Skapa en budget', - 'no_rules_create_default' => 'Skapa en regel', - 'no_categories_title_default' => 'Låt oss skapa en kategori!', - 'no_categories_intro_default' => 'Du har inga kategorier ännu. Kategorier används för att finjustera dina transaktioner och märka dem med deras utsedda kategori.', - 'no_categories_imperative_default' => 'Kategorier skapas automatiskt när du skapar transaktioner, men du kan skapa en manuellt också. Låt oss skapa en nu:', - 'no_categories_create_default' => 'Skapa en kategori', - 'no_tags_title_default' => 'Skapa en etikett!', - 'no_tags_intro_default' => 'Du har inga etiketter ännu. Etiketter används för att finjustera transaktioner och märka dem med specifika nyckelord.', - 'no_tags_imperative_default' => 'Etiketter skapas automatiskt när du skapar transaktioner, men de går att skapa manuellt också. Låt oss skapa en nu:', - 'no_tags_create_default' => 'Skapa en etikett', - 'no_transactions_title_withdrawal' => 'Låt oss skapa en kostnad!', - 'no_transactions_intro_withdrawal' => 'Du har inga utgifter ännu. Du bör skapa utgifter för att börja hantera din ekonomi.', - 'no_transactions_imperative_withdrawal' => 'Har du spenderat lite pengar? Då ska du skriva ner det:', - 'no_transactions_create_withdrawal' => 'Skapa en kostnad', - 'no_transactions_title_deposit' => 'Låt oss skapa lite inkomst!', - 'no_transactions_intro_deposit' => 'Du har inga registrerade inkomster ännu. Du bör skapa inkomstposter för att börja hantera din ekonomi.', - 'no_transactions_imperative_deposit' => 'Har du fått lite pengar? Då ska du skriva ner det:', - 'no_transactions_create_deposit' => 'Skapa en insättning', - 'no_transactions_title_transfers' => 'Låt oss skapa en överföring!', - 'no_transactions_intro_transfers' => 'Du har inga överföringar ännu. När du flyttar pengar mellan tillgångskonton registreras det som överföring.', - 'no_transactions_imperative_transfers' => 'Har du flyttat lite pengar runt? Då ska du skriva ner det:', - 'no_transactions_create_transfers' => 'Skapa en överföring', - 'no_piggies_title_default' => 'Låt oss skapa en spargris!', - 'no_piggies_intro_default' => 'Du har inga spargrisar ännu. Du kan skapa spargrisar för att dela upp dina besparingar och hålla reda på vad du sparar på.', - 'no_piggies_imperative_default' => 'Har du saker du sparar pengar till? Skapa en spargris och håll reda på:', - 'no_piggies_create_default' => 'Skapa en ny sparbank', - 'no_bills_title_default' => 'Låt oss skapa en nota!', - 'no_bills_intro_default' => 'Du har inga notor ännu. Du kan skapa notor för att hålla koll på dina vanliga utgifter, som hyra eller försäkringar.', - 'no_bills_imperative_default' => 'Har du så regelbundna räkningar? Skapa en räkning och håll koll på dina betalningar:', - 'no_bills_create_default' => 'Skapa en nota', + 'no_accounts_title_asset' => 'Låt oss skapa ett tillgångskonto!', + 'no_accounts_intro_asset' => 'Inga tillgångskonton ännu. Tillgångskonton är dina huvudkonton: kontrollkonto, sparkonto, delat konto eller även ditt kreditkort.', + 'no_accounts_imperative_asset' => 'För att börja använda Firefly III måste du skapa minst ett tillgångskonto. Låt oss göra det nu:', + 'no_accounts_create_asset' => 'Skapa ett tillgångskonto', + 'no_accounts_title_expense' => 'Låt oss skapa ett utgiftskonton!', + 'no_accounts_intro_expense' => 'Du har inga utgiftskonton ännu. Utgiftskonton är de platser där du spenderar pengar, såsom butiker och stormarknader.', + 'no_accounts_imperative_expense' => 'Utgiftskonton skapas automatiskt när du skapar transaktioner, men du kan skapa en manuellt också, om du vill. Låt oss skapa en nu:', + 'no_accounts_create_expense' => 'Skapa ett utgiftskonto', + 'no_accounts_title_revenue' => 'Låt oss skapa ett intäktskonto!', + 'no_accounts_intro_revenue' => 'Du har inga intäktskonton än. Intäktskonton är de platser där du får pengar från, till exempel din arbetsgivare.', + 'no_accounts_imperative_revenue' => 'Intäktskonton skapas automatiskt när du skapar transaktioner, men du kan skapa en manuellt också, om du vill. Låt oss skapa en nu:', + 'no_accounts_create_revenue' => 'Skapa ett intäktskonto', + 'no_accounts_title_liabilities' => 'Låt oss skapa en skuld!', + 'no_accounts_intro_liabilities' => 'Du har inga skulder ännu. Skulder är de konton som registrerar dina (studerande) lån och andra skulder.', + 'no_accounts_imperative_liabilities' => 'Du behöver inte använda den här funktionen, men det kan vara användbart om du vill hålla reda på dessa saker.', + 'no_accounts_create_liabilities' => 'Skapa en ny skuld', + 'no_budgets_title_default' => 'Låt oss skapa en budget', + 'no_rules_title_default' => 'Låt oss skapa en regel', + 'no_budgets_intro_default' => 'Du har inga budgetar ännu. Budgetar används för att organisera dina utgifter i logiska grupper, som du kan ge en soft-cap för att begränsa dina utgifter.', + 'no_rules_intro_default' => 'Du har inga regler ännu. Regler är kraftfulla automatiseringar som kan hantera transaktioner åt dig.', + 'no_rules_imperative_default' => 'Regler kan vara mycket användbara när du hanterar transaktioner. Låt oss skapa en nu:', + 'no_budgets_imperative_default' => 'Budgetarna är de grundläggande verktygen för ekonomisk förvaltning. Låt oss skapa ett nu:', + 'no_budgets_create_default' => 'Skapa en budget', + 'no_rules_create_default' => 'Skapa en regel', + 'no_categories_title_default' => 'Låt oss skapa en kategori!', + 'no_categories_intro_default' => 'Du har inga kategorier ännu. Kategorier används för att finjustera dina transaktioner och märka dem med deras utsedda kategori.', + 'no_categories_imperative_default' => 'Kategorier skapas automatiskt när du skapar transaktioner, men du kan skapa en manuellt också. Låt oss skapa en nu:', + 'no_categories_create_default' => 'Skapa en kategori', + 'no_tags_title_default' => 'Skapa en etikett!', + 'no_tags_intro_default' => 'Du har inga etiketter ännu. Etiketter används för att finjustera transaktioner och märka dem med specifika nyckelord.', + 'no_tags_imperative_default' => 'Etiketter skapas automatiskt när du skapar transaktioner, men de går att skapa manuellt också. Låt oss skapa en nu:', + 'no_tags_create_default' => 'Skapa en etikett', + 'no_transactions_title_withdrawal' => 'Låt oss skapa en kostnad!', + 'no_transactions_intro_withdrawal' => 'Du har inga utgifter ännu. Du bör skapa utgifter för att börja hantera din ekonomi.', + 'no_transactions_imperative_withdrawal' => 'Har du spenderat lite pengar? Då ska du skriva ner det:', + 'no_transactions_create_withdrawal' => 'Skapa en kostnad', + 'no_transactions_title_deposit' => 'Låt oss skapa lite inkomst!', + 'no_transactions_intro_deposit' => 'Du har inga registrerade inkomster ännu. Du bör skapa inkomstposter för att börja hantera din ekonomi.', + 'no_transactions_imperative_deposit' => 'Har du fått lite pengar? Då ska du skriva ner det:', + 'no_transactions_create_deposit' => 'Skapa en insättning', + 'no_transactions_title_transfers' => 'Låt oss skapa en överföring!', + 'no_transactions_intro_transfers' => 'Du har inga överföringar ännu. När du flyttar pengar mellan tillgångskonton registreras det som överföring.', + 'no_transactions_imperative_transfers' => 'Har du flyttat lite pengar runt? Då ska du skriva ner det:', + 'no_transactions_create_transfers' => 'Skapa en överföring', + 'no_piggies_title_default' => 'Låt oss skapa en spargris!', + 'no_piggies_intro_default' => 'Du har inga spargrisar ännu. Du kan skapa spargrisar för att dela upp dina besparingar och hålla reda på vad du sparar på.', + 'no_piggies_imperative_default' => 'Har du saker du sparar pengar till? Skapa en spargris och håll reda på:', + 'no_piggies_create_default' => 'Skapa en ny sparbank', + 'no_bills_title_default' => 'Låt oss skapa en nota!', + 'no_bills_intro_default' => 'Du har inga notor ännu. Du kan skapa notor för att hålla koll på dina vanliga utgifter, som hyra eller försäkringar.', + 'no_bills_imperative_default' => 'Har du så regelbundna räkningar? Skapa en räkning och håll koll på dina betalningar:', + 'no_bills_create_default' => 'Skapa en nota', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Återkommande transaktioner', - 'repeat_until_in_past' => 'Denna återkommande transaktion slutade upprepas :date.', - 'recurring_calendar_view' => 'Kalender', - 'no_recurring_title_default' => 'Låt oss skapa en återkommande transaktion!', - 'no_recurring_intro_default' => 'Du har inga återkommande transaktioner än. Dessa kan användas för att låta Firefly III automatiskt skapa transaktioner åt dig.', - 'no_recurring_imperative_default' => 'Detta är en ganska avancerad funktion, men det kan vara mycket användbart. Se till att du läser dokumentationen (?)-ikonen i det övre högra hörnet) innan du fortsätter.', - 'no_recurring_create_default' => 'Skapa en återkommande transaktion', - 'make_new_recurring' => 'Skapa en återkommande transaktion', - 'recurring_daily' => 'Dagligen', - 'recurring_weekly' => 'Varje vecka på :weekday', - 'recurring_weekly_skip' => 'Varje :skip(a/e) vecka på :weekday', - 'recurring_monthly' => 'Varje månad på :dayOfMonth(a/e) dag', - 'recurring_monthly_skip' => 'Varje :skip(st/nd/rd/th) månad :dayOfMonth(st/nd/rd/th) dag', - 'recurring_ndom' => 'Varje månad på :dayOfMonth(a/e) :weekday', - 'recurring_yearly' => 'Varje år på :date', - 'overview_for_recurrence' => 'Översikt för återkommande transaktioner ":title"', - 'warning_duplicates_repetitions' => 'I sällsynta fall, kan datum förekomma flera gånger i denna lista. Detta kan ske när flera upprepningar kolliderar. Firefly III generar alltid en transaktion per dag.', - 'created_transactions' => 'Relaterade transaktioner', - 'expected_withdrawals' => 'Förväntade uttag', - 'expected_deposits' => 'Förväntade insättningar', - 'expected_transfers' => 'Förväntade överföringar', - 'created_withdrawals' => 'Skapade uttag', - 'created_deposits' => 'Skapade insättning', - 'created_transfers' => 'Skapade överföringar', - 'recurring_info' => 'Återkommande transaktion :count / :total', - 'created_from_recurrence' => 'Skapad från återkommande transaktion ":title" (#:id)', - 'recurring_never_cron' => 'Det verkar som om cron-jobbet som är nödvändigt för att stödja återkommande transaktioner aldrig har kört. Detta är naturligtvis normalt när du just har installerat Firefly III, men detta bör vara något att ställa upp så snart som möjligt. Kolla in hjälpsidorna med hjälp av (?)-ikonen i det övre högra hörnet av sidan.', - 'recurring_cron_long_ago' => 'Det verkar som om det har gått mer än 36 timmar sedan cronjobbet för att stödja återkommande transaktioner har sparkats för sista gången. Är du säker på att den har konfigurerats korrekt? Kolla in hjälpsidorna med hjälp av (?)-ikonen i det övre högra hörnet av sidan.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Återkommande transaktioner', + 'repeat_until_in_past' => 'Denna återkommande transaktion slutade upprepas :date.', + 'recurring_calendar_view' => 'Kalender', + 'no_recurring_title_default' => 'Låt oss skapa en återkommande transaktion!', + 'no_recurring_intro_default' => 'Du har inga återkommande transaktioner än. Dessa kan användas för att låta Firefly III automatiskt skapa transaktioner åt dig.', + 'no_recurring_imperative_default' => 'Detta är en ganska avancerad funktion, men det kan vara mycket användbart. Se till att du läser dokumentationen (?)-ikonen i det övre högra hörnet) innan du fortsätter.', + 'no_recurring_create_default' => 'Skapa en återkommande transaktion', + 'make_new_recurring' => 'Skapa en återkommande transaktion', + 'recurring_daily' => 'Dagligen', + 'recurring_weekly' => 'Varje vecka på :weekday', + 'recurring_weekly_skip' => 'Varje :skip(a/e) vecka på :weekday', + 'recurring_monthly' => 'Varje månad på :dayOfMonth(a/e) dag', + 'recurring_monthly_skip' => 'Varje :skip(st/nd/rd/th) månad :dayOfMonth(st/nd/rd/th) dag', + 'recurring_ndom' => 'Varje månad på :dayOfMonth(a/e) :weekday', + 'recurring_yearly' => 'Varje år på :date', + 'overview_for_recurrence' => 'Översikt för återkommande transaktioner ":title"', + 'warning_duplicates_repetitions' => 'I sällsynta fall, kan datum förekomma flera gånger i denna lista. Detta kan ske när flera upprepningar kolliderar. Firefly III generar alltid en transaktion per dag.', + 'created_transactions' => 'Relaterade transaktioner', + 'expected_withdrawals' => 'Förväntade uttag', + 'expected_deposits' => 'Förväntade insättningar', + 'expected_transfers' => 'Förväntade överföringar', + 'created_withdrawals' => 'Skapade uttag', + 'created_deposits' => 'Skapade insättning', + 'created_transfers' => 'Skapade överföringar', + 'recurring_info' => 'Återkommande transaktion :count / :total', + 'created_from_recurrence' => 'Skapad från återkommande transaktion ":title" (#:id)', + 'recurring_never_cron' => 'Det verkar som om cron-jobbet som är nödvändigt för att stödja återkommande transaktioner aldrig har kört. Detta är naturligtvis normalt när du just har installerat Firefly III, men detta bör vara något att ställa upp så snart som möjligt. Kolla in hjälpsidorna med hjälp av (?)-ikonen i det övre högra hörnet av sidan.', + 'recurring_cron_long_ago' => 'Det verkar som om det har gått mer än 36 timmar sedan cronjobbet för att stödja återkommande transaktioner har sparkats för sista gången. Är du säker på att den har konfigurerats korrekt? Kolla in hjälpsidorna med hjälp av (?)-ikonen i det övre högra hörnet av sidan.', - 'create_new_recurrence' => 'Skapa ny återkommande transaktion', - 'help_first_date' => 'Ange den första förväntade upprepningen. Detta måste vara i framtiden.', - 'help_first_date_no_past' => 'Ange den första förväntade upprepningen. Firefly III kommer inte att skapa transaktioner i det förflutna.', - 'no_currency' => '(ingen valuta)', - 'mandatory_for_recurring' => 'Obligatorisk återkommande information', - 'mandatory_for_transaction' => 'Obligatorisk transaktionsinformation', - 'optional_for_recurring' => 'Valfri återkommande information', - 'optional_for_transaction' => 'Valfri transaktionsinformation', - 'change_date_other_options' => 'Ändra "första datumet" för att se fler alternativ.', - 'mandatory_fields_for_tranaction' => 'Värdena här kommer att hamna i de transaktion(er) som skapas', - 'click_for_calendar' => 'Klicka här för en kalender som visar dig när transaktionen ska upprepas.', - 'repeat_forever' => 'Upprepa för alltid', - 'repeat_until_date' => 'Upprepa till datum', - 'repeat_times' => 'Upprepa ett antal gånger', - 'recurring_skips_one' => 'Varannan', - 'recurring_skips_more' => 'Hoppar över :count förekomster', - 'store_new_recurrence' => 'Lagra återkommande transaktion', - 'stored_new_recurrence' => 'Återkommande transaktion ":title" lagras framgångsrikt.', - 'edit_recurrence' => 'Redigera återkommande transaktion ":title"', - 'recurring_repeats_until' => 'Upprepas till :date', - 'recurring_repeats_forever' => 'Upprepa för alltid', - 'recurring_repeats_x_times' => 'Upprepas :count gång|Upprepas :count gånger', - 'update_recurrence' => 'Uppdatera återkommande transaktion', - 'updated_recurrence' => 'Uppdaterade återkommande transaktion ":title"', - 'recurrence_is_inactive' => 'Denna återkommande transaktion är inte aktiv och kommer inte generera nya transaktioner.', - 'delete_recurring' => 'Ta bort återkommande transaktion ":title"', - 'new_recurring_transaction' => 'Ny återkommande transaktion', - 'help_weekend' => 'Vad ska Firefly III göra när den återkommande transaktionen infaller på en lördag eller söndag?', - 'do_nothing' => 'Skapa bara transaktionen', - 'skip_transaction' => 'Hoppa över förekomsten', - 'jump_to_friday' => 'Skapa transaktionen på föregående fredag istället', - 'jump_to_monday' => 'Skapa transaktionen nästa måndag istället', - 'will_jump_friday' => 'Kommer att skapas på fredag istället för helgerna.', - 'will_jump_monday' => 'Kommer att skapas på måndag istället för helgerna.', - 'except_weekends' => 'Förutom helger', - 'recurrence_deleted' => 'Återkommande transaktion ":title" raderad', + 'create_new_recurrence' => 'Skapa ny återkommande transaktion', + 'help_first_date' => 'Ange den första förväntade upprepningen. Detta måste vara i framtiden.', + 'help_first_date_no_past' => 'Ange den första förväntade upprepningen. Firefly III kommer inte att skapa transaktioner i det förflutna.', + 'no_currency' => '(ingen valuta)', + 'mandatory_for_recurring' => 'Obligatorisk återkommande information', + 'mandatory_for_transaction' => 'Obligatorisk transaktionsinformation', + 'optional_for_recurring' => 'Valfri återkommande information', + 'optional_for_transaction' => 'Valfri transaktionsinformation', + 'change_date_other_options' => 'Ändra "första datumet" för att se fler alternativ.', + 'mandatory_fields_for_tranaction' => 'Värdena här kommer att hamna i de transaktion(er) som skapas', + 'click_for_calendar' => 'Klicka här för en kalender som visar dig när transaktionen ska upprepas.', + 'repeat_forever' => 'Upprepa för alltid', + 'repeat_until_date' => 'Upprepa till datum', + 'repeat_times' => 'Upprepa ett antal gånger', + 'recurring_skips_one' => 'Varannan', + 'recurring_skips_more' => 'Hoppar över :count förekomster', + 'store_new_recurrence' => 'Lagra återkommande transaktion', + 'stored_new_recurrence' => 'Återkommande transaktion ":title" lagras framgångsrikt.', + 'edit_recurrence' => 'Redigera återkommande transaktion ":title"', + 'recurring_repeats_until' => 'Upprepas till :date', + 'recurring_repeats_forever' => 'Upprepa för alltid', + 'recurring_repeats_x_times' => 'Upprepas :count gång|Upprepas :count gånger', + 'update_recurrence' => 'Uppdatera återkommande transaktion', + 'updated_recurrence' => 'Uppdaterade återkommande transaktion ":title"', + 'recurrence_is_inactive' => 'Denna återkommande transaktion är inte aktiv och kommer inte generera nya transaktioner.', + 'delete_recurring' => 'Ta bort återkommande transaktion ":title"', + 'new_recurring_transaction' => 'Ny återkommande transaktion', + 'help_weekend' => 'Vad ska Firefly III göra när den återkommande transaktionen infaller på en lördag eller söndag?', + 'do_nothing' => 'Skapa bara transaktionen', + 'skip_transaction' => 'Hoppa över förekomsten', + 'jump_to_friday' => 'Skapa transaktionen på föregående fredag istället', + 'jump_to_monday' => 'Skapa transaktionen nästa måndag istället', + 'will_jump_friday' => 'Kommer att skapas på fredag istället för helgerna.', + 'will_jump_monday' => 'Kommer att skapas på måndag istället för helgerna.', + 'except_weekends' => 'Förutom helger', + 'recurrence_deleted' => 'Återkommande transaktion ":title" raderad', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2686,71 +2710,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balans (:currency)', - 'box_spent_in_currency' => 'Spenderat (:currency)', - 'box_earned_in_currency' => 'Intjänat (:currency)', - 'box_budgeted_in_currency' => 'Budgeterat (:currency)', - 'box_bill_paid_in_currency' => 'Räkningar betalade (:currency)', - 'box_bill_unpaid_in_currency' => 'Obetalda räkningar (:currency)', - 'box_left_to_spend_in_currency' => 'Kvar att spendera (:currency)', - 'box_net_worth_in_currency' => 'Netto värde (:currency)', - 'box_spend_per_day' => 'Kvar att spendera per dag :amount', + 'box_balance_in_currency' => 'Balans (:currency)', + 'box_spent_in_currency' => 'Spenderat (:currency)', + 'box_earned_in_currency' => 'Intjänat (:currency)', + 'box_budgeted_in_currency' => 'Budgeterat (:currency)', + 'box_bill_paid_in_currency' => 'Räkningar betalade (:currency)', + 'box_bill_unpaid_in_currency' => 'Obetalda räkningar (:currency)', + 'box_left_to_spend_in_currency' => 'Kvar att spendera (:currency)', + 'box_net_worth_in_currency' => 'Netto värde (:currency)', + 'box_spend_per_day' => 'Kvar att spendera per dag :amount', // debug page - 'debug_page' => 'Debug sida', - 'debug_submit_instructions' => 'Om du stöter på problem kan du använda informationen i den här rutan som felsökningsinformation. Kopiera och klistra in i ett nytt eller befintligt GitHub-problem. Det kommer att generera en vacker tabell som kan användas för att snabbt diagnostisera ditt problem.', - 'debug_pretty_table' => 'Om du kopierar/klistrar in rutan nedan i ett GitHub-problem kommer det att generera en tabell. Omge inte denna text med backticks eller citat.', - 'debug_additional_data' => 'Du kan också dela innehållet i rutan nedan. Du kan också kopiera och klistra in detta i en ny eller befintlig GitHub-utgåva. Innehållet i denna ruta kan dock innehålla privat information som kontonamn, transaktionsuppgifter eller e-postadresser.', + 'debug_page' => 'Debug sida', + 'debug_submit_instructions' => 'Om du stöter på problem kan du använda informationen i den här rutan som felsökningsinformation. Kopiera och klistra in i ett nytt eller befintligt GitHub-problem. Det kommer att generera en vacker tabell som kan användas för att snabbt diagnostisera ditt problem.', + 'debug_pretty_table' => 'Om du kopierar/klistrar in rutan nedan i ett GitHub-problem kommer det att generera en tabell. Omge inte denna text med backticks eller citat.', + 'debug_additional_data' => 'Du kan också dela innehållet i rutan nedan. Du kan också kopiera och klistra in detta i en ny eller befintlig GitHub-utgåva. Innehållet i denna ruta kan dock innehålla privat information som kontonamn, transaktionsuppgifter eller e-postadresser.', // object groups - 'object_groups_menu_bar' => 'Grupper', - 'object_groups_page_title' => 'Grupper', - 'object_groups_breadcrumb' => 'Grupper', - 'object_groups_index' => 'Översikt', - 'object_groups' => 'Grupper', - 'object_groups_empty_explain' => 'Vissa saker i Firefly III kan delas in i grupper. Spargrisar till exempel, har ett "Grupp" fält i redigera och skapa vyerna. När du anger det här fältet kan du redigera gruppernas namn och ordning på den här sidan. För mer information, kolla in hjälpsidorna i det övre högra hörnet, under (?)-ikonen.', - 'object_group_title' => 'Titel', - 'edit_object_group' => 'Redigera grupp ":title"', - 'delete_object_group' => 'Ta bort grupp ":title"', - 'update_object_group' => 'Uppdatera grupp', - 'updated_object_group' => 'Uppdaterade gruppen ":title"', - 'deleted_object_group' => 'Tog bort gruppen ":title"', - 'object_group' => 'Grupp', + 'object_groups_menu_bar' => 'Grupper', + 'object_groups_page_title' => 'Grupper', + 'object_groups_breadcrumb' => 'Grupper', + 'object_groups_index' => 'Översikt', + 'object_groups' => 'Grupper', + 'object_groups_empty_explain' => 'Vissa saker i Firefly III kan delas in i grupper. Spargrisar till exempel, har ett "Grupp" fält i redigera och skapa vyerna. När du anger det här fältet kan du redigera gruppernas namn och ordning på den här sidan. För mer information, kolla in hjälpsidorna i det övre högra hörnet, under (?)-ikonen.', + 'object_group_title' => 'Titel', + 'edit_object_group' => 'Redigera grupp ":title"', + 'delete_object_group' => 'Ta bort grupp ":title"', + 'update_object_group' => 'Uppdatera grupp', + 'updated_object_group' => 'Uppdaterade gruppen ":title"', + 'deleted_object_group' => 'Tog bort gruppen ":title"', + 'object_group' => 'Grupp', // other stuff - 'placeholder' => '[Platshållare]', + 'placeholder' => '[Platshållare]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/sv_SE/form.php b/resources/lang/sv_SE/form.php index 3666db79b1..464cc0ac51 100644 --- a/resources/lang/sv_SE/form.php +++ b/resources/lang/sv_SE/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Bankens namn', - 'bank_balance' => 'Saldo', - 'savings_balance' => 'Sparsaldo', - 'credit_card_limit' => 'Kreditkortgräns', - 'automatch' => 'Hitta automatiskt', - 'skip' => 'Hoppa över', - 'enabled' => 'Aktiverad', - 'name' => 'Namn', - 'active' => 'Aktiv', - 'amount_min' => 'Minsta belopp', - 'amount_max' => 'Högsta belopp', - 'match' => 'Träffar på', - 'strict' => 'Strikt läge', - 'repeat_freq' => 'Upprepningar', - 'object_group' => 'Grupp', - 'location' => 'Plats', - 'update_channel' => 'Uppdateringskanal', - 'currency_id' => 'Valuta', - 'transaction_currency_id' => 'Valuta', - 'auto_budget_currency_id' => 'Valuta', - 'external_ip' => 'Din servers externa IP', - 'attachments' => 'Bilagor', - 'BIC' => 'BIC', - 'verify_password' => 'Verifiera lösenordssäkerhet', - 'source_account' => 'Från konto', - 'destination_account' => 'Till konto', - 'asset_destination_account' => 'Till konto', - 'include_net_worth' => 'Inkludera i nettovärde', - 'asset_source_account' => 'Källkonto', - 'journal_description' => 'Beskrivning', - 'note' => 'Anteckningar', - 'currency' => 'Valuta', - 'account_id' => 'Tillgångskonto', - 'budget_id' => 'Budget', - 'bill_id' => 'Räkning', - 'opening_balance' => 'Ingående balans', - 'tagMode' => 'Etikett läge', - 'virtual_balance' => 'Virtuell balans', + 'bank_name' => 'Bankens namn', + 'bank_balance' => 'Saldo', + 'savings_balance' => 'Sparsaldo', + 'credit_card_limit' => 'Kreditkortgräns', + 'automatch' => 'Hitta automatiskt', + 'skip' => 'Hoppa över', + 'enabled' => 'Aktiverad', + 'name' => 'Namn', + 'active' => 'Aktiv', + 'amount_min' => 'Minsta belopp', + 'amount_max' => 'Högsta belopp', + 'match' => 'Träffar på', + 'strict' => 'Strikt läge', + 'repeat_freq' => 'Upprepningar', + 'object_group' => 'Grupp', + 'location' => 'Plats', + 'update_channel' => 'Uppdateringskanal', + 'currency_id' => 'Valuta', + 'transaction_currency_id' => 'Valuta', + 'auto_budget_currency_id' => 'Valuta', + 'external_ip' => 'Din servers externa IP', + 'attachments' => 'Bilagor', + 'BIC' => 'BIC', + 'verify_password' => 'Verifiera lösenordssäkerhet', + 'source_account' => 'Från konto', + 'destination_account' => 'Till konto', + 'asset_destination_account' => 'Till konto', + 'include_net_worth' => 'Inkludera i nettovärde', + 'asset_source_account' => 'Källkonto', + 'journal_description' => 'Beskrivning', + 'note' => 'Anteckningar', + 'currency' => 'Valuta', + 'account_id' => 'Tillgångskonto', + 'budget_id' => 'Budget', + 'bill_id' => 'Räkning', + 'opening_balance' => 'Ingående balans', + 'tagMode' => 'Etikett läge', + 'virtual_balance' => 'Virtuell balans', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Mål belopp', 'account_role' => 'Konto roll', 'opening_balance_date' => 'Ingående balans datum', @@ -147,7 +145,7 @@ return [ 'start_date' => 'Start område', 'end_date' => 'Slut område', 'enddate' => 'Slutdatum', - 'move_rules_before_delete' => 'Rule group', + 'move_rules_before_delete' => 'Regelgrupp', 'start' => 'Start område', 'end' => 'Slut område', 'delete_account' => 'Ta bort konto ":name"', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Är du säker du vill ta bort transaktionen ":description"?', 'mass_journal_are_you_sure' => 'Är du säker du vill ta bort dessa transaktioner?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Är du säker du vill ta bort etiketten ":tag"?', 'journal_link_areYouSure' => 'Är du säker du vill ta bort länken mellan :source och :destination?', 'linkType_areYouSure' => 'Är du säker du vill ta bort länktypen ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Låt', - // admin 'domain' => 'Domän', 'single_user_mode' => 'Inaktivera användarregistrering', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS konto', 'local_account' => 'Firefly III konto', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Datum från', - 'to_date' => 'Datum till', - 'due_date' => 'Förfallodatum', - 'payment_date' => 'Betalningsdatum', - 'invoice_date' => 'Fakturadatum', - 'internal_reference' => 'Intern referens', - 'inward' => 'Inkommande beskrivning', - 'outward' => 'Utgående beskrivning', - 'rule_group_id' => 'Regelgrupp', - 'transaction_description' => 'Transaktionsbeskrivning', - 'first_date' => 'Första datum', - 'transaction_type' => 'Transaktionstyp', - 'repeat_until' => 'Upprepa tills', - 'recurring_description' => 'Återkommande transaktionsbeskrivning', - 'repetition_type' => 'Typ av upprepning', - 'foreign_currency_id' => 'Utländsk valuta', - 'repetition_end' => 'Upprepning avslutas', - 'repetitions' => 'Upprepningar', - 'calendar' => 'Kalender', - 'weekend' => 'Helg', - 'client_secret' => 'Klient-hemlighet', - 'withdrawal_destination_id' => 'Destinationskonto', - 'deposit_source_id' => 'Källkonto', - 'expected_on' => 'Förväntad', - 'paid' => 'Betald', - 'auto_budget_type' => 'Auto-budget', - 'auto_budget_amount' => 'Auto-budget belopp', - 'auto_budget_period' => 'Auto-budget period', - 'collected' => 'Insamlat', - 'submitted' => 'Inskickad', - 'key' => 'Nyckel', - 'value' => 'Innehållet i registret', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Datum från', + 'to_date' => 'Datum till', + 'due_date' => 'Förfallodatum', + 'payment_date' => 'Betalningsdatum', + 'invoice_date' => 'Fakturadatum', + 'internal_reference' => 'Intern referens', + 'inward' => 'Inkommande beskrivning', + 'outward' => 'Utgående beskrivning', + 'rule_group_id' => 'Regelgrupp', + 'transaction_description' => 'Transaktionsbeskrivning', + 'first_date' => 'Första datum', + 'transaction_type' => 'Transaktionstyp', + 'repeat_until' => 'Upprepa tills', + 'recurring_description' => 'Återkommande transaktionsbeskrivning', + 'repetition_type' => 'Typ av upprepning', + 'foreign_currency_id' => 'Utländsk valuta', + 'repetition_end' => 'Upprepning avslutas', + 'repetitions' => 'Upprepningar', + 'calendar' => 'Kalender', + 'weekend' => 'Helg', + 'client_secret' => 'Klient-hemlighet', + 'withdrawal_destination_id' => 'Destinationskonto', + 'deposit_source_id' => 'Källkonto', + 'expected_on' => 'Förväntad', + 'paid' => 'Betald', + 'auto_budget_type' => 'Auto-budget', + 'auto_budget_amount' => 'Auto-budget belopp', + 'auto_budget_period' => 'Auto-budget period', + 'collected' => 'Insamlat', + 'submitted' => 'Inskickad', + 'key' => 'Nyckel', + 'value' => 'Innehållet i registret', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Utlösare', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/sv_SE/intro.php b/resources/lang/sv_SE/intro.php index 0a75fb24a6..803370b565 100644 --- a/resources/lang/sv_SE/intro.php +++ b/resources/lang/sv_SE/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Välkommen till index sidan för Firefly III. Vänligen ta lite tid för att gå genom introt och kunna få en känsla hur Firefly III fungerar.', - 'index_accounts-chart' => 'Detta diagram visar nuvarande balans på dina tillgångskonton. Det går att välja vilka konton som ses här under inställningarna.', - 'index_box_out_holder' => 'Den här lilla rutan och rutorna bredvid ger dig en snabb överblick över din ekonomiska situation.', - 'index_help' => 'Om du någonsin behöver hjälp med en sida eller ett formulär, tryck på den här knappen.', - 'index_outro' => 'De flesta sidor av Firefly III börjar med en lite rundtur som denna. Kontakta mig om det finns några frågor eller kommentarer. Lycka till!', - 'index_sidebar-toggle' => 'För att skapa nya transaktioner, konton eller andra saker, använd menyn under den här ikonen.', - 'index_cash_account' => 'Dessa är de konton som skapats hittills. Använd kontantkonto för att spåra kontantutgifter men det är naturligtvis inte obligatoriskt.', + 'index_intro' => 'Välkommen till index sidan för Firefly III. Vänligen ta lite tid för att gå genom introt och kunna få en känsla hur Firefly III fungerar.', + 'index_accounts-chart' => 'Detta diagram visar nuvarande balans på dina tillgångskonton. Det går att välja vilka konton som ses här under inställningarna.', + 'index_box_out_holder' => 'Den här lilla rutan och rutorna bredvid ger dig en snabb överblick över din ekonomiska situation.', + 'index_help' => 'Om du någonsin behöver hjälp med en sida eller ett formulär, tryck på den här knappen.', + 'index_outro' => 'De flesta sidor av Firefly III börjar med en lite rundtur som denna. Kontakta mig om det finns några frågor eller kommentarer. Lycka till!', + 'index_sidebar-toggle' => 'För att skapa nya transaktioner, konton eller andra saker, använd menyn under den här ikonen.', + 'index_cash_account' => 'Dessa är de konton som skapats hittills. Använd kontantkonto för att spåra kontantutgifter men det är naturligtvis inte obligatoriskt.', // transactions - 'transactions_create_basic_info' => 'Ange grundläggande information för transaktionen. Källa, destination, datum och beskrivning.', - 'transactions_create_amount_info' => 'Ange beloppet för transaktionen. Vid behov kommer fälten automatiskt att uppdateras för information om främmande belopp.', - 'transactions_create_optional_info' => 'Alla dessa fält är frivilliga. Lägga till metadata här kommer att göra dina transaktioner bättre organiserade.', - 'transactions_create_split' => 'Om du vill dela en transaktion, lägg till fler delningar med denna knapp', + 'transactions_create_basic_info' => 'Ange grundläggande information för transaktionen. Källa, destination, datum och beskrivning.', + 'transactions_create_amount_info' => 'Ange beloppet för transaktionen. Vid behov kommer fälten automatiskt att uppdateras för information om främmande belopp.', + 'transactions_create_optional_info' => 'Alla dessa fält är frivilliga. Lägga till metadata här kommer att göra dina transaktioner bättre organiserade.', + 'transactions_create_split' => 'Om du vill dela en transaktion, lägg till fler delningar med denna knapp', // create account: - 'accounts_create_iban' => 'Ge dina konton giltig IBAN. Detta kan förenkla för dataimport i framtiden.', - 'accounts_create_asset_opening_balance' => 'Tillgångskonton kan ha en "öppningsbalans", vilket indikerar början på det här kontoets historia i Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III stöder flera valutor. Tillgångskonton har en huvudvaluta, som du måste ställa in här.', - 'accounts_create_asset_virtual' => 'Ibland kan det hjälpa att ge ditt konto ett virtuell saldo: ett extra belopp som alltid läggs till eller tas bort från ditt faktiska saldo.', + 'accounts_create_iban' => 'Ge dina konton giltig IBAN. Detta kan förenkla för dataimport i framtiden.', + 'accounts_create_asset_opening_balance' => 'Tillgångskonton kan ha en "öppningsbalans", vilket indikerar början på det här kontoets historia i Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III stöder flera valutor. Tillgångskonton har en huvudvaluta, som du måste ställa in här.', + 'accounts_create_asset_virtual' => 'Ibland kan det hjälpa att ge ditt konto ett virtuell saldo: ett extra belopp som alltid läggs till eller tas bort från ditt faktiska saldo.', // budgets index - 'budgets_index_intro' => 'Budgetar används för att hantera din ekonomi och utgör en av kärnfunktionerna i Firefly III.', - 'budgets_index_set_budget' => 'Ställ in din totala budget för varje period så att Firefly III kan berätta om du har budgeterat alla tillgängliga pengar.', - 'budgets_index_see_expenses_bar' => 'Att spendera pengar kommer långsamt att fylla det här fältet.', - 'budgets_index_navigate_periods' => 'Navigera genom perioder för att enkelt kunna sätta budgetar i god tid.', - 'budgets_index_new_budget' => 'Skapa en ny budget som du tycker passar.', - 'budgets_index_list_of_budgets' => 'Använd denna tabell för att ställa in beloppen för varje budget och se hur det står till.', - 'budgets_index_outro' => 'För att lära dig mer om budgetering, kolla in hjälpikonen i det övre högra hörnet.', + 'budgets_index_intro' => 'Budgetar används för att hantera din ekonomi och utgör en av kärnfunktionerna i Firefly III.', + 'budgets_index_see_expenses_bar' => 'Att spendera pengar kommer långsamt att fylla det här fältet.', + 'budgets_index_navigate_periods' => 'Navigera genom perioder för att enkelt kunna sätta budgetar i god tid.', + 'budgets_index_new_budget' => 'Skapa en ny budget som du tycker passar.', + 'budgets_index_list_of_budgets' => 'Använd denna tabell för att ställa in beloppen för varje budget och se hur det står till.', + 'budgets_index_outro' => 'För att lära dig mer om budgetering, kolla in hjälpikonen i det övre högra hörnet.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Använd dessa rapporter för att få detaljerad insikt i din ekonomi.', - 'reports_index_inputReportType' => 'Välj en rapporttyp. Se hjälpsidorna för att se vad varje rapport visar.', - 'reports_index_inputAccountsSelect' => 'Det går att exkluder eller inkludera tillgångskonton som du tycker passar.', - 'reports_index_inputDateRange' => 'Valt datumintervall är helt upp till dig: från en dag till 10 år.', - 'reports_index_extra-options-box' => 'Beroende på vilken rapport du har valt kan du välja extra filter och alternativ här. Se den här rutan när du ändrar rapporttyper.', + 'reports_index_intro' => 'Använd dessa rapporter för att få detaljerad insikt i din ekonomi.', + 'reports_index_inputReportType' => 'Välj en rapporttyp. Se hjälpsidorna för att se vad varje rapport visar.', + 'reports_index_inputAccountsSelect' => 'Det går att exkluder eller inkludera tillgångskonton som du tycker passar.', + 'reports_index_inputDateRange' => 'Det valda datumintervallet är helt upp till dig: från en dag till 10 år eller mer.', + 'reports_index_extra-options-box' => 'Beroende på vilken rapport du har valt kan du välja extra filter och alternativ här. Se den här rutan när du ändrar rapporttyper.', // reports (reports) - 'reports_report_default_intro' => 'Denna rapport ger dig en snabb och omfattande översikt över din ekonomi. Om du vill se något annat, vänligen snälla inte kontakta mig!', - 'reports_report_audit_intro' => 'Denna rapport ger dig detaljerad insikt i dina tillgångskonton.', - 'reports_report_audit_optionsBox' => 'Använd dessa kryssrutor för att visa eller dölja de kolumner du är intresserad av.', + 'reports_report_default_intro' => 'Denna rapport ger dig en snabb och omfattande översikt över din ekonomi. Om du vill se något annat, vänligen snälla inte kontakta mig!', + 'reports_report_audit_intro' => 'Denna rapport ger dig detaljerad insikt i dina tillgångskonton.', + 'reports_report_audit_optionsBox' => 'Använd dessa kryssrutor för att visa eller dölja de kolumner du är intresserad av.', - 'reports_report_category_intro' => 'Denna rapport ger dig inblick i en eller flera kategorier.', - 'reports_report_category_pieCharts' => 'Dessa diagram ger dig inblick i utgifter och inkomst per kategori eller per konto.', - 'reports_report_category_incomeAndExpensesChart' => 'Detta diagram visar dina utgifter och inkomst per kategori.', + 'reports_report_category_intro' => 'Denna rapport ger dig inblick i en eller flera kategorier.', + 'reports_report_category_pieCharts' => 'Dessa diagram ger dig inblick i utgifter och inkomst per kategori eller per konto.', + 'reports_report_category_incomeAndExpensesChart' => 'Detta diagram visar dina utgifter och inkomst per kategori.', - 'reports_report_tag_intro' => 'Denna rapport ger dig inblick i en eller flera taggar.', - 'reports_report_tag_pieCharts' => 'Dessa diagram ger dig inblick i utgifter och inkomst per tagg, konto, kategori eller budget.', - 'reports_report_tag_incomeAndExpensesChart' => 'Detta diagram visar dina utgifter och inkomst per etikett.', + 'reports_report_tag_intro' => 'Denna rapport ger dig inblick i en eller flera taggar.', + 'reports_report_tag_pieCharts' => 'Dessa diagram ger dig inblick i utgifter och inkomst per tagg, konto, kategori eller budget.', + 'reports_report_tag_incomeAndExpensesChart' => 'Detta diagram visar dina utgifter och inkomst per etikett.', 'reports_report_budget_intro' => 'Denna rapport ger dig inblick i en eller flera budgetar.', 'reports_report_budget_pieCharts' => 'Dessa diagram ger dig inblick i utgifter per budget eller per konto.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Bredvid framstegsfältet finns två knappar (+ och -) för att lägga till eller ta bort pengar från varje spargris.', 'piggy-banks_index_accountStatus' => 'För varje tillgångskonto med minst en spargris listas status i denna tabell.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Vad är ditt mål? En ny soffa, en kamera, pengar för nödsituationer?', 'piggy-banks_create_date' => 'Du kan ställa in ett måldatum eller en tidsfrist för din spargris.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Använd räkningar för att följa hur mycket pengar du spenderar varje period. Tänk på utgifter som hyror, försäkringar eller låneränter.', 'bills_create_name' => 'Använd ett beskrivande namn som "Hyra" eller "Sjukförsäkring".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Välj ett lägsta och högsta belopp för denna räkning.', 'bills_create_repeat_freq_holder' => 'De flesta räkningar upprepas varje månad, men du kan ställa in en annan frekvens här.', 'bills_create_skip_holder' => 'Om en räkning upprepas varannan vecka bör fältet "hoppa över" ställas in på "1" för att hoppa över varannan vecka.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Använd den här knappen för att se vilka transaktioner som matchar din regel.', 'rules_create_actions' => 'Ställ in så många åtgärder du vill.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Fler alternativ finns bakom dessa flikar.', diff --git a/resources/lang/sv_SE/list.php b/resources/lang/sv_SE/list.php index 3e3206ca1c..2a5bf38ffc 100644 --- a/resources/lang/sv_SE/list.php +++ b/resources/lang/sv_SE/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Knappar', - 'icon' => 'Ikon', - 'id' => 'ID', - 'create_date' => 'Skapad den', - 'update_date' => 'Uppdaterad den', - 'updated_at' => 'Uppdaterad den', - 'balance_before' => 'Saldo före', - 'balance_after' => 'Saldo efter', - 'name' => 'Namn', - 'role' => 'Roll', - 'currentBalance' => 'Nuvarande saldo', - 'linked_to_rules' => 'Relevanta regler', - 'active' => 'Är aktiv?', - 'percentage' => 'procent', - 'recurring_transaction' => 'Återkommande transaktion', - 'next_due' => 'Nästa förfallodag', - 'transaction_type' => 'Typ', - 'lastActivity' => 'Senaste aktivitet', - 'balanceDiff' => 'Saldodifferens', - 'other_meta_data' => 'Övrigt metadata', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Kontotyp', - 'created_at' => 'Skapad den', - 'account' => 'Konto', - 'external_url' => 'Extern URL', - 'matchingAmount' => 'Belopp', - 'destination' => 'Destination', - 'source' => 'Källa', - 'next_expected_match' => 'Nästa förväntade träff', - 'automatch' => 'Automatisk matchning?', + 'buttons' => 'Knappar', + 'icon' => 'Ikon', + 'id' => 'ID', + 'create_date' => 'Skapad den', + 'update_date' => 'Uppdaterad den', + 'updated_at' => 'Uppdaterad den', + 'balance_before' => 'Saldo före', + 'balance_after' => 'Saldo efter', + 'name' => 'Namn', + 'role' => 'Roll', + 'currentBalance' => 'Nuvarande saldo', + 'linked_to_rules' => 'Relevanta regler', + 'active' => 'Är aktiv?', + 'percentage' => 'procent', + 'recurring_transaction' => 'Återkommande transaktion', + 'next_due' => 'Nästa förfallodag', + 'transaction_type' => 'Typ', + 'lastActivity' => 'Senaste aktivitet', + 'balanceDiff' => 'Saldodifferens', + 'other_meta_data' => 'Övrigt metadata', + 'invited_at' => 'Inbjuden den', + 'expires' => 'Inbjudning utgår', + 'invited_by' => 'Inbjuden av', + 'invite_link' => 'Inbjudningslänk', + 'account_type' => 'Kontotyp', + 'created_at' => 'Skapad den', + 'account' => 'Konto', + 'external_url' => 'Extern URL', + 'matchingAmount' => 'Belopp', + 'destination' => 'Destination', + 'source' => 'Källa', + 'next_expected_match' => 'Nästa förväntade träff', + 'automatch' => 'Automatisk matchning?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Upprepas', 'description' => 'Beskrivning', 'amount' => 'Belopp', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Konto med bunq', 'file_name' => 'Filnamn', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Filstorlek', - 'file_type' => 'Filtyp', - 'attached_to' => 'Bifogad till', - 'file_exists' => 'Fil existerar', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Senaste inloggning', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'bunq betalnings-ID', - 'repetitions' => 'Repetitioner', - 'title' => 'Titel', - 'transaction_s' => 'Transaktion(er)', - 'field' => 'Fält', - 'value' => 'Värde', - 'interest' => 'Ränta', - 'interest_period' => 'Ränteperiod', - 'liability_type' => 'Typ av ansvar', - 'liability_direction' => 'Skuld in/ut', - 'end_date' => 'Slutdatum', - 'payment_info' => 'Betalinformation', - 'expected_info' => 'Nästa förväntade transaktion', - 'start_date' => 'Startdatum', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Filstorlek', + 'file_type' => 'Filtyp', + 'attached_to' => 'Bifogad till', + 'file_exists' => 'Fil existerar', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Senaste inloggning', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'bunq betalnings-ID', + 'repetitions' => 'Repetitioner', + 'title' => 'Titel', + 'transaction_s' => 'Transaktion(er)', + 'field' => 'Fält', + 'value' => 'Värde', + 'interest' => 'Ränta', + 'interest_period' => 'Ränteperiod', + 'liability_type' => 'Typ av ansvar', + 'liability_direction' => 'Skuld in/ut', + 'end_date' => 'Slutdatum', + 'payment_info' => 'Betalinformation', + 'expected_info' => 'Nästa förväntade transaktion', + 'start_date' => 'Startdatum', + 'trigger' => 'Utlösare', + 'response' => 'Svar', + 'delivery' => 'Leverans', + 'url' => 'URL', + 'secret' => 'Hemlighet', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/sv_SE/pagination.php b/resources/lang/sv_SE/pagination.php index e5b51a351f..4629d144c1 100644 --- a/resources/lang/sv_SE/pagination.php +++ b/resources/lang/sv_SE/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/sv_SE/passwords.php b/resources/lang/sv_SE/passwords.php index be5bec2a5a..2aeffaabaf 100644 --- a/resources/lang/sv_SE/passwords.php +++ b/resources/lang/sv_SE/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/sv_SE/rules.php b/resources/lang/sv_SE/rules.php index 389fb335ff..666ba3fa97 100644 --- a/resources/lang/sv_SE/rules.php +++ b/resources/lang/sv_SE/rules.php @@ -1,6 +1,5 @@ 'Inspect transaction ":title" @ Firefly III', 'inspect_rule' => 'Inspect rule ":title" @ Firefly III', 'journal_other_user' => 'This transaction doesn\'t belong to the user', - 'no_such_journal' => 'This transaction doesn\'t exist', + 'no_such_journal' => 'Denna transaktion finns inte', 'journal_already_no_budget' => 'This transaction has no budget, so it cannot be removed', 'journal_already_no_category' => 'This transaction had no category, so it cannot be removed', 'journal_already_no_notes' => 'This transaction had no notes, so they cannot be removed', - 'journal_not_found' => 'Firefly III can\'t find the requested transaction', + 'journal_not_found' => 'Firefly III kan inte hitta den begärda transaktionen', 'split_group' => 'Firefly III cannot execute this action on a transaction with multiple splits', 'is_already_withdrawal' => 'This transaction is already a withdrawal', 'is_already_deposit' => 'This transaction is already a deposit', 'is_already_transfer' => 'This transaction is already a transfer', - 'is_not_transfer' => 'This transaction is not a transfer', + 'is_not_transfer' => 'Denna transaktion är inte en överföring', 'complex_error' => 'Something complicated went wrong. Sorry about that. Please inspect the logs of Firefly III', 'no_valid_opposing' => 'Conversion failed because there is no valid account named ":account"', 'new_notes_empty' => 'The notes to be set are empty', @@ -51,11 +50,13 @@ return [ 'already_has_destination' => 'This transaction already has ":name" as the destination account', 'already_has_source' => 'This transaction already has ":name" as the source account', 'already_linked_to_subscription' => 'The transaction is already linked to subscription ":name"', - 'already_linked_to_category' => 'The transaction is already linked to category ":name"', - 'already_linked_to_budget' => 'The transaction is already linked to budget ":name"', + 'already_linked_to_category' => 'Transaktionen är redan länkad till kategorin ":name"', + 'already_linked_to_budget' => 'Transaktionen är redan länkad till budgeten ":name"', 'cannot_find_subscription' => 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/sv_SE/validation.php b/resources/lang/sv_SE/validation.php index db73b4ca46..6ec88b2de8 100644 --- a/resources/lang/sv_SE/validation.php +++ b/resources/lang/sv_SE/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array saknar "var"-klausul', - 'missing_update' => 'Array saknar "updaterings"-klausul', - 'invalid_where_key' => 'JSON innehåller en ogiltig nyckel för "var"-klausulen', - 'invalid_update_key' => 'JSON innehåller en ogiltig nyckel för "update"-klausulen', - 'invalid_query_data' => 'Det finns ogiltig data i %s:%s fältet i din fråga.', - 'invalid_query_account_type' => 'Din fråga innehåller konton av olika typer, vilket inte är tillåtet.', - 'invalid_query_currency' => 'Din fråga innehåller konton som har olika valutainställningar, vilket inte är tillåtet.', - 'iban' => 'Detta är inte ett giltigt IBAN.', - 'zero_or_more' => 'Värdet får inte vara negativt.', - 'date_or_time' => 'Värdet måste vara ett giltigt datum eller tid (ISO 8601).', - 'source_equals_destination' => 'Källkontot motsvarar mottagarkontot.', - 'unique_account_number_for_user' => 'Det ser ut som att detta kontonummer redan används.', - 'unique_iban_for_user' => 'Det ser ut som att detta IBAN redan används.', - 'deleted_user' => 'På grund av säkerhetsbegränsningar går det inte att registrera sig med denna e-postadress.', - 'rule_trigger_value' => 'Detta värde är ogiltigt för vald trigger.', - 'rule_action_value' => 'Detta värde är ogiltigt för den valda åtgärden.', - 'file_already_attached' => 'Den uppladdade filen ”:name” är redan kopplad till detta objekt.', - 'file_attached' => 'Filen ”:name” har laddats upp.', - 'must_exist' => 'ID i fältet :attribute finns inte i databasen.', - 'all_accounts_equal' => 'Alla konton i detta fält måste vara lika.', - 'group_title_mandatory' => 'En grupptitel är obligatorisk vid mer än en transaktion.', - 'transaction_types_equal' => 'All delade transaktioner måste vara av samma typ.', - 'invalid_transaction_type' => 'Ogiltig transaktionstyp.', - 'invalid_selection' => 'Ditt val är ogiltigt.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Krävs minst en transaktion.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Krävs minst en upprepning.', - 'require_repeat_until' => 'Kräver ett antal repetitioner eller ett slutdatum (repeat_until). Inte båda.', - 'require_currency_info' => 'Innehållet i det här fältet är ogiltigt utan valutainformation.', - 'not_transfer_account' => 'Detta är inte ett konto som kan användas för transaktioner.', - 'require_currency_amount' => 'Innehållet i det här fältet är ogiltigt utan utländskt belopp.', - 'require_foreign_currency' => 'Detta fält kräver ett nummer', - 'require_foreign_dest' => 'Detta fältvärde måste matcha valutan för målkontot.', - 'require_foreign_src' => 'Detta fältvärde måste matcha valutan för källkontot.', - 'equal_description' => 'Transaktions beskrivning bör inte vara samma som den globala beskrivningen.', - 'file_invalid_mime' => 'Filen ”:name” är av typ ”:mime” som inte accepteras som en ny uppladdning.', - 'file_too_large' => 'Filen ”:name” är för stor.', - 'belongs_to_user' => 'Värdet av :attribute är okänt.', - 'accepted' => ':attribute måste godkännas.', - 'bic' => 'Detta är inte en giltig BIC.', - 'at_least_one_trigger' => 'Regeln måste ha minst en utlösare.', - 'at_least_one_active_trigger' => 'Regeln måste ha minst en utlösare.', - 'at_least_one_action' => 'Regel måste ha minst en åtgärd.', - 'at_least_one_active_action' => 'Regeln måste ha minst en aktiv åtgärd.', - 'base64' => 'Detta är inte giltigt bas64 data.', - 'model_id_invalid' => 'Angivet ID verkar ogiltig för denna modell.', - 'less' => ':attribute måste vara mindre än 10 000 000', - 'active_url' => ':attribute är inte en giltig URL.', - 'after' => ':attribute måste vara ett datum efter :date.', - 'date_after' => 'Startdatum måste vara före slutdatum.', - 'alpha' => ':attribute får enbart innehålla bokstäver.', - 'alpha_dash' => ':attribute får endast innehålla bokstäver, siffror och bindestreck.', - 'alpha_num' => ':attribute får endast innehålla bokstäver och siffror.', - 'array' => ':attribute måste vara en array.', - 'unique_for_user' => 'Det finns redan en post med detta :attribute.', - 'before' => ':attribute måste vara ett datum före :date.', - 'unique_object_for_user' => 'Namnet är redan upptaget.', - 'unique_account_for_user' => 'Kontonamnet är redan upptaget.', + 'bad_type_source' => 'Firefly III kan inte avgöra transaktionstypen baserat på detta källkonto.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array saknar "var"-klausul', + 'missing_update' => 'Array saknar "updaterings"-klausul', + 'invalid_where_key' => 'JSON innehåller en ogiltig nyckel för "var"-klausulen', + 'invalid_update_key' => 'JSON innehåller en ogiltig nyckel för "update"-klausulen', + 'invalid_query_data' => 'Det finns ogiltig data i %s:%s fältet i din fråga.', + 'invalid_query_account_type' => 'Din fråga innehåller konton av olika typer, vilket inte är tillåtet.', + 'invalid_query_currency' => 'Din fråga innehåller konton som har olika valutainställningar, vilket inte är tillåtet.', + 'iban' => 'Detta är inte ett giltigt IBAN.', + 'zero_or_more' => 'Värdet får inte vara negativt.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'Värdet måste vara noll eller mer.', + 'no_asset_account' => 'Detta är inte ett tillgångskonto.', + 'date_or_time' => 'Värdet måste vara ett giltigt datum eller tid (ISO 8601).', + 'source_equals_destination' => 'Källkontot motsvarar mottagarkontot.', + 'unique_account_number_for_user' => 'Det ser ut som att detta kontonummer redan används.', + 'unique_iban_for_user' => 'Det ser ut som att detta IBAN redan används.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'På grund av säkerhetsbegränsningar går det inte att registrera sig med denna e-postadress.', + 'rule_trigger_value' => 'Detta värde är ogiltigt för vald trigger.', + 'rule_action_value' => 'Detta värde är ogiltigt för den valda åtgärden.', + 'file_already_attached' => 'Den uppladdade filen ”:name” är redan kopplad till detta objekt.', + 'file_attached' => 'Filen ”:name” har laddats upp.', + 'must_exist' => 'ID i fältet :attribute finns inte i databasen.', + 'all_accounts_equal' => 'Alla konton i detta fält måste vara lika.', + 'group_title_mandatory' => 'En grupptitel är obligatorisk vid mer än en transaktion.', + 'transaction_types_equal' => 'All delade transaktioner måste vara av samma typ.', + 'invalid_transaction_type' => 'Ogiltig transaktionstyp.', + 'invalid_selection' => 'Ditt val är ogiltigt.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Krävs minst en transaktion.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Krävs minst en upprepning.', + 'require_repeat_until' => 'Kräver ett antal repetitioner eller ett slutdatum (repeat_until). Inte båda.', + 'require_currency_info' => 'Innehållet i det här fältet är ogiltigt utan valutainformation.', + 'not_transfer_account' => 'Detta är inte ett konto som kan användas för transaktioner.', + 'require_currency_amount' => 'Innehållet i det här fältet är ogiltigt utan utländskt belopp.', + 'require_foreign_currency' => 'Detta fält kräver ett nummer', + 'require_foreign_dest' => 'Detta fältvärde måste matcha valutan för målkontot.', + 'require_foreign_src' => 'Detta fältvärde måste matcha valutan för källkontot.', + 'equal_description' => 'Transaktions beskrivning bör inte vara samma som den globala beskrivningen.', + 'file_invalid_mime' => 'Filen ”:name” är av typ ”:mime” som inte accepteras som en ny uppladdning.', + 'file_too_large' => 'Filen ”:name” är för stor.', + 'belongs_to_user' => 'Värdet av :attribute är okänt.', + 'accepted' => ':attribute måste godkännas.', + 'bic' => 'Detta är inte en giltig BIC.', + 'at_least_one_trigger' => 'Regeln måste ha minst en utlösare.', + 'at_least_one_active_trigger' => 'Regeln måste ha minst en utlösare.', + 'at_least_one_action' => 'Regel måste ha minst en åtgärd.', + 'at_least_one_active_action' => 'Regeln måste ha minst en aktiv åtgärd.', + 'base64' => 'Detta är inte giltigt bas64 data.', + 'model_id_invalid' => 'Angivet ID verkar ogiltig för denna modell.', + 'less' => ':attribute måste vara mindre än 10 000 000', + 'active_url' => ':attribute är inte en giltig URL.', + 'after' => ':attribute måste vara ett datum efter :date.', + 'date_after' => 'Startdatum måste vara före slutdatum.', + 'alpha' => ':attribute får enbart innehålla bokstäver.', + 'alpha_dash' => ':attribute får endast innehålla bokstäver, siffror och bindestreck.', + 'alpha_num' => ':attribute får endast innehålla bokstäver och siffror.', + 'array' => ':attribute måste vara en array.', + 'unique_for_user' => 'Det finns redan en post med detta :attribute.', + 'before' => ':attribute måste vara ett datum före :date.', + 'unique_object_for_user' => 'Namnet är redan upptaget.', + 'unique_account_for_user' => 'Kontonamnet är redan upptaget.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute måste vara mellan :min och :max.', + 'between.file' => ':attribute måste vara mellan :min och :max kilobytes.', + 'between.string' => ':attribute måste vara mellan :min och :max tecken.', + 'between.array' => ':attribute måste innehålla :min till :max artiklar.', + 'boolean' => ':attribute fältet måste vara sant eller falskt.', + 'confirmed' => ':attribute bekräftelsen matchar inte.', + 'date' => ':attribute är inte ett giltigt datum.', + 'date_format' => ':attribute matchar inte formatet :format.', + 'different' => ':attribute och :other måste vara olika.', + 'digits' => ':attribute måste vara :digits siffror.', + 'digits_between' => ':attribute måste innehålla :min till :max siffror.', + 'email' => ':attribute måste vara en giltig e-postadress.', + 'filled' => ':attribute fältet är obligatoriskt.', + 'exists' => 'Det valda :attribute är ogiltigt.', + 'image' => ':attribute måste vara en bild.', + 'in' => 'Det valda :attribute är ogitligt.', + 'integer' => ':attribute måste vara ett heltal.', + 'ip' => ':attribute måste vara en giltig IP-adress.', + 'json' => ':attribute måste vara en giltig JSON sträng.', + 'max.numeric' => ':attribute får inte vara större än :max.', + 'max.file' => ':attribute får inte vara större än :max kilobytes.', + 'max.string' => ':attribute får inte vara större än :max tecken.', + 'max.array' => ':attribute får inte innehålla fler artiklar än :max.', + 'mimes' => ':attribute måste vara av filtypen :values.', + 'min.numeric' => ':attribute måste vara minst :min.', + 'lte.numeric' => ':attribute måste vara mindre än eller lika med :value.', + 'min.file' => ':attribute måste vara minst :min kilobytes.', + 'min.string' => ':attribute måste minst vara :min tecken.', + 'min.array' => ':attribute måste innehålla minst :min artiklar.', + 'not_in' => 'Det valda :attribute är ogiltigt.', + 'numeric' => ':attribute måste vara ett nummer.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Ursprungsvärdet måste vara ett nummer.', + 'numeric_destination' => 'Mottagarkontot måste vara ett nummer.', + 'numeric_source' => 'Källvärdet måste vara ett nummer.', + 'regex' => ':attribute format är ogiltigt.', + 'required' => ':attribute fältet är obligatoriskt.', + 'required_if' => ':attribute fältet är obligatoriskt när :other är :value.', + 'required_unless' => ':attribute fältet är obligatoriskt så vida inte :other är i :values.', + 'required_with' => ':attribute fältet är obligatoriskt när :values är synligt.', + 'required_with_all' => ':attribute fältet är obligatoriskt när :values är synligt.', + 'required_without' => ':attribute fältet är obligatoriskt när :values inte är synligt.', + 'required_without_all' => ':attribute fältet är obligatoriskt när ingen av :values är synligt.', + 'same' => ':attribute och :other måste matcha.', + 'size.numeric' => ':attribute måste vara :size.', + 'amount_min_over_max' => 'Det minimala värdet kan inte vara större än det maximala värdet.', + 'size.file' => ':attribute måste vara :size kilobytes.', + 'size.string' => ':attribute måste vara :size tecken.', + 'size.array' => ':attribute måste innehålla :size artiklar.', + 'unique' => ':attribute är redan upptaget.', + 'string' => ':attribute måste vara en sträng.', + 'url' => ':attribute formatet är ogiltigt.', + 'timezone' => ':attribute måste vara en giltig zon.', + '2fa_code' => ':attribute fältet är ogiltigt.', + 'dimensions' => ':attribute har ogiltiga bilddimensioner.', + 'distinct' => ':attribute fältet har ett dubbelt värde.', + 'file' => ':attribute måste vara en fil.', + 'in_array' => ':attribute fältet existerar inte i :other.', + 'present' => ':attribute fältet måste vara synligt.', + 'amount_zero' => 'Totala värdet kan inte vara noll.', + 'current_target_amount' => 'Det nuvarande beloppet måste vara mindre än målbeloppet.', + 'unique_piggy_bank_for_user' => 'Namnet på spargrisen måste vara unikt.', + 'unique_object_group' => 'Gruppnamnet måste vara unikt', + 'starts_with' => 'Värdet måste börja med :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Båda kontona måste vara samma kontotyp', + 'same_account_currency' => 'Båda kontona måste ha samma valutainställning', - 'between.numeric' => ':attribute måste vara mellan :min och :max.', - 'between.file' => ':attribute måste vara mellan :min och :max kilobytes.', - 'between.string' => ':attribute måste vara mellan :min och :max tecken.', - 'between.array' => ':attribute måste innehålla :min till :max artiklar.', - 'boolean' => ':attribute fältet måste vara sant eller falskt.', - 'confirmed' => ':attribute bekräftelsen matchar inte.', - 'date' => ':attribute är inte ett giltigt datum.', - 'date_format' => ':attribute matchar inte formatet :format.', - 'different' => ':attribute och :other måste vara olika.', - 'digits' => ':attribute måste vara :digits siffror.', - 'digits_between' => ':attribute måste innehålla :min till :max siffror.', - 'email' => ':attribute måste vara en giltig e-postadress.', - 'filled' => ':attribute fältet är obligatoriskt.', - 'exists' => 'Det valda :attribute är ogiltigt.', - 'image' => ':attribute måste vara en bild.', - 'in' => 'Det valda :attribute är ogitligt.', - 'integer' => ':attribute måste vara ett heltal.', - 'ip' => ':attribute måste vara en giltig IP-adress.', - 'json' => ':attribute måste vara en giltig JSON sträng.', - 'max.numeric' => ':attribute får inte vara större än :max.', - 'max.file' => ':attribute får inte vara större än :max kilobytes.', - 'max.string' => ':attribute får inte vara större än :max tecken.', - 'max.array' => ':attribute får inte innehålla fler artiklar än :max.', - 'mimes' => ':attribute måste vara av filtypen :values.', - 'min.numeric' => ':attribute måste vara minst :min.', - 'lte.numeric' => ':attribute måste vara mindre än eller lika med :value.', - 'min.file' => ':attribute måste vara minst :min kilobytes.', - 'min.string' => ':attribute måste minst vara :min tecken.', - 'min.array' => ':attribute måste innehålla minst :min artiklar.', - 'not_in' => 'Det valda :attribute är ogiltigt.', - 'numeric' => ':attribute måste vara ett nummer.', - 'numeric_native' => 'Ursprungsvärdet måste vara ett nummer.', - 'numeric_destination' => 'Mottagarkontot måste vara ett nummer.', - 'numeric_source' => 'Källvärdet måste vara ett nummer.', - 'regex' => ':attribute format är ogiltigt.', - 'required' => ':attribute fältet är obligatoriskt.', - 'required_if' => ':attribute fältet är obligatoriskt när :other är :value.', - 'required_unless' => ':attribute fältet är obligatoriskt så vida inte :other är i :values.', - 'required_with' => ':attribute fältet är obligatoriskt när :values är synligt.', - 'required_with_all' => ':attribute fältet är obligatoriskt när :values är synligt.', - 'required_without' => ':attribute fältet är obligatoriskt när :values inte är synligt.', - 'required_without_all' => ':attribute fältet är obligatoriskt när ingen av :values är synligt.', - 'same' => ':attribute och :other måste matcha.', - 'size.numeric' => ':attribute måste vara :size.', - 'amount_min_over_max' => 'Det minimala värdet kan inte vara större än det maximala värdet.', - 'size.file' => ':attribute måste vara :size kilobytes.', - 'size.string' => ':attribute måste vara :size tecken.', - 'size.array' => ':attribute måste innehålla :size artiklar.', - 'unique' => ':attribute är redan upptaget.', - 'string' => ':attribute måste vara en sträng.', - 'url' => ':attribute formatet är ogiltigt.', - 'timezone' => ':attribute måste vara en giltig zon.', - '2fa_code' => ':attribute fältet är ogiltigt.', - 'dimensions' => ':attribute har ogiltiga bilddimensioner.', - 'distinct' => ':attribute fältet har ett dubbelt värde.', - 'file' => ':attribute måste vara en fil.', - 'in_array' => ':attribute fältet existerar inte i :other.', - 'present' => ':attribute fältet måste vara synligt.', - 'amount_zero' => 'Totala värdet kan inte vara noll.', - 'current_target_amount' => 'Det nuvarande beloppet måste vara mindre än målbeloppet.', - 'unique_piggy_bank_for_user' => 'Namnet på spargrisen måste vara unikt.', - 'unique_object_group' => 'Gruppnamnet måste vara unikt', - 'starts_with' => 'Värdet måste börja med :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Båda kontona måste vara samma kontotyp', - 'same_account_currency' => 'Båda kontona måste ha samma valutainställning', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Detta lösenord är inte säkert. Vänligen försök igen. För mer info se https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Ogiltig repetitionstyp får återkommande transaktioner.', - 'valid_recurrence_rep_moment' => 'Ogiltig repetitionsmoment för denna typ av repetition.', - 'invalid_account_info' => 'Ogiltig kontoinformation.', - 'attributes' => [ + 'secure_password' => 'Detta lösenord är inte säkert. Vänligen försök igen. För mer info se https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Ogiltig repetitionstyp får återkommande transaktioner.', + 'valid_recurrence_rep_moment' => 'Ogiltig repetitionsmoment för denna typ av repetition.', + 'invalid_account_info' => 'Ogiltig kontoinformation.', + 'attributes' => [ 'email' => 'e-postadress', 'description' => 'beskrivning', 'amount' => 'belopp', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Ett giltigt källkonto-ID och/eller ett giltigt källkontonamn behövs för att gå vidare.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Det gick inte att hitta ett giltigt mottagarkonto med ID ":id" eller namn ":name".', + 'withdrawal_source_need_data' => 'Ett giltigt källkonto-ID och/eller ett giltigt källkontonamn behövs för att gå vidare.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Det gick inte att hitta ett giltigt mottagarkonto med ID ":id" eller namn ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Ett giltigt källkonto-ID och/eller ett giltigt källkontonamn behövs för att gå vidare.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Det gick inte att hitta ett giltigt mottagarkonto med ID ":id" eller namn ":name".', - 'deposit_dest_wrong_type' => 'Det inskickade destinationskontot är inte av rätt typ.', + 'deposit_source_need_data' => 'Ett giltigt källkonto-ID och/eller ett giltigt källkontonamn behövs för att gå vidare.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Det gick inte att hitta ett giltigt mottagarkonto med ID ":id" eller namn ":name".', + 'deposit_dest_wrong_type' => 'Det inskickade destinationskontot är inte av rätt typ.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Ett giltigt källkonto-ID och/eller ett giltigt källkontonamn behövs för att gå vidare.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Det gick inte att hitta ett giltigt mottagarkonto med ID ":id" eller namn ":name".', + 'need_id_in_edit' => 'Varje delad transaktion kräver transaction_journal_id (giltigt ID eller 0).', - 'transfer_source_need_data' => 'Ett giltigt källkonto-ID och/eller ett giltigt källkontonamn behövs för att gå vidare.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Det gick inte att hitta ett giltigt mottagarkonto med ID ":id" eller namn ":name".', - 'need_id_in_edit' => 'Varje delad transaktion kräver transaction_journal_id (giltigt ID eller 0).', + 'ob_source_need_data' => 'Ett giltigt källkonto-ID och/eller ett giltigt källkontonamn behövs för att gå vidare.', + 'lc_source_need_data' => 'Behöver få ett giltigt källkontonummer för att fortsätta.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Det gick inte att hitta ett giltigt mottagarkonto med ID ":id" eller namn ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Ett giltigt källkonto-ID och/eller ett giltigt källkontonamn behövs för att gå vidare.', - 'lc_source_need_data' => 'Behöver få ett giltigt källkontonummer för att fortsätta.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Det gick inte att hitta ett giltigt mottagarkonto med ID ":id" eller namn ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Det går inte att använda detta konto som källkonto.', + 'generic_invalid_destination' => 'Det går inte att använda detta konto som mottagarkonto.', - 'generic_invalid_source' => 'Det går inte att använda detta konto som källkonto.', - 'generic_invalid_destination' => 'Det går inte att använda detta konto som mottagarkonto.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => ':attribute måste vara större än eller lika med :value.', - 'gt.numeric' => ':attribute måste vara större än :value.', - 'gte.file' => ':attribute måste vara större än eller lika med :value kilobyte.', - 'gte.string' => ':attribute måste vara större än eller lika med :value tecken.', - 'gte.array' => ':attribute måste ha :value objekt eller mer.', + 'gte.numeric' => ':attribute måste vara större än eller lika med :value.', + 'gt.numeric' => ':attribute måste vara större än :value.', + 'gte.file' => ':attribute måste vara större än eller lika med :value kilobyte.', + 'gte.string' => ':attribute måste vara större än eller lika med :value tecken.', + 'gte.array' => ':attribute måste ha :value objekt eller mer.', 'amount_required_for_auto_budget' => 'Beloppet är obligatoriskt.', 'auto_budget_amount_positive' => 'Beloppet måste vara mer än noll.', + 'auto_budget_period_mandatory' => 'Den automatiska budgetperioden är ett obligatoriskt fält.', // no access to administration: diff --git a/resources/lang/th_TH/api.php b/resources/lang/th_TH/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/th_TH/api.php +++ b/resources/lang/th_TH/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/th_TH/auth.php b/resources/lang/th_TH/auth.php index 9552ffb7a6..38b4e8ebeb 100644 --- a/resources/lang/th_TH/auth.php +++ b/resources/lang/th_TH/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Credentials นี้ไม่ตรงกับบันทึกของเรา', 'throttle' => 'พยายามเข้าสู่ระบบมากเกินไป โปรดลองใหม่อีกครั้งใน :seconds วินาที', diff --git a/resources/lang/th_TH/breadcrumbs.php b/resources/lang/th_TH/breadcrumbs.php index e4a9b435af..2ff764aecf 100644 --- a/resources/lang/th_TH/breadcrumbs.php +++ b/resources/lang/th_TH/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'หน้าหลัก', - 'budgets' => 'งบประมาณ', - 'subscriptions' => 'การสมัครสมาชิก', - 'transactions' => 'ธุรกรรม', - 'title_expenses' => 'ค่าใช้จ่าย', - 'title_withdrawal' => 'ค่าใช้จ่าย', - 'title_revenue' => 'Revenue / income', - 'title_deposit' => 'Revenue / income', - 'title_transfer' => 'Transfers', - 'title_transfers' => 'Transfers', - 'edit_currency' => 'แก้ไขสกุลเงิน (:name)', - 'delete_currency' => 'ลบสกุลเงิน (:name)', - 'newPiggyBank' => 'สร้างกระปุกออมสิน', - 'edit_piggyBank' => 'แก้ไขกระปุกออมสิน":name"', - 'preferences' => 'การตั้งค่า', - 'profile' => 'โปรไฟล์', - 'accounts' => 'บัญชี', - 'changePassword' => 'เปลี่ยนรหัสผ่านของคุณ', - 'change_email' => 'เปลี่ยนที่อยู่อีเมลของคุณ', - 'bills' => 'บิล', - 'newBill' => 'บิลใหม่', - 'edit_bill' => 'แก้ไขบิล":name"', - 'delete_bill' => 'ลบบิล":name"', - 'reports' => 'รายงาน', - 'search_result' => 'ผลการค้นหา ":query"', - 'withdrawal_list' => 'ค่าใช้จ่าย', - 'Withdrawal_list' => 'ค่าใช้จ่าย', - 'deposit_list' => 'รายได้ และ เงินฝาก', - 'transfer_list' => 'โอน', - 'transfers_list' => 'โอน', + 'home' => 'หน้าหลัก', + 'budgets' => 'งบประมาณ', + 'subscriptions' => 'การสมัครสมาชิก', + 'transactions' => 'ธุรกรรม', + 'title_expenses' => 'ค่าใช้จ่าย', + 'title_withdrawal' => 'ค่าใช้จ่าย', + 'title_revenue' => 'รายได้ / รายรับ', + 'title_deposit' => 'รายได้ / รายรับ', + 'title_transfer' => 'โอน', + 'title_transfers' => 'โอน', + 'edit_currency' => 'แก้ไขสกุลเงิน (:name)', + 'delete_currency' => 'ลบสกุลเงิน (:name)', + 'newPiggyBank' => 'สร้างกระปุกออมสิน', + 'edit_piggyBank' => 'แก้ไขกระปุกออมสิน":name"', + 'preferences' => 'การตั้งค่า', + 'profile' => 'โปรไฟล์', + 'accounts' => 'บัญชี', + 'changePassword' => 'เปลี่ยนรหัสผ่านของคุณ', + 'change_email' => 'เปลี่ยนที่อยู่อีเมลของคุณ', + 'bills' => 'บิล', + 'newBill' => 'บิลใหม่', + 'edit_bill' => 'แก้ไขบิล":name"', + 'delete_bill' => 'ลบบิล":name"', + 'reports' => 'รายงาน', + 'search_result' => 'ผลการค้นหา ":query"', + 'withdrawal_list' => 'ค่าใช้จ่าย', + 'Withdrawal_list' => 'ค่าใช้จ่าย', + 'deposit_list' => 'รายได้ และ เงินฝาก', + 'transfer_list' => 'โอน', + 'transfers_list' => 'โอน', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'การกระทบยอดหนี้', 'create_withdrawal' => 'สร้างรายการถอนเงิน', 'create_deposit' => 'สร้างรายการฝากเงิน', @@ -96,8 +94,8 @@ return [ 'delete_object_group' => 'ลบกลุ่ม ":title"', 'logout_others' => 'ออกจากระบบเซสชั่นอื่น', 'asset_accounts' => 'บัญชีทรัพย์สิน', - 'expense_accounts' => 'Expense accounts', - 'revenue_accounts' => 'Revenue accounts', + 'expense_accounts' => 'บัญชีรายจ่าย', + 'revenue_accounts' => 'บัญชีรายได้', 'liabilities_accounts' => 'หนี้สิน', 'placeholder' => '[ข้อความตัวอย่าง]', ]; diff --git a/resources/lang/th_TH/components.php b/resources/lang/th_TH/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/th_TH/components.php +++ b/resources/lang/th_TH/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/th_TH/config.php b/resources/lang/th_TH/config.php index 9680f04a61..2f99078e41 100644 --- a/resources/lang/th_TH/config.php +++ b/resources/lang/th_TH/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'th', - 'locale' => 'th, Thai, th_TH.utf8, th_TH.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'th', + 'locale' => 'th, Thai, th_TH.utf8, th_TH.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMM YYYY', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'Do MMMM YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'D MMM YYYY', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'Do MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'Do MMMM YYYY @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'Do MMMM YYYY @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Week' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Week' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'จันทร์', - 'dow_2' => 'อังคาร', - 'dow_3' => 'พุธ', - 'dow_4' => 'พฤหัสบดี', - 'dow_5' => 'ศุกร์', - 'dow_6' => 'เสาร์', - 'dow_7' => 'อาทิตย์', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'จันทร์', + 'dow_2' => 'อังคาร', + 'dow_3' => 'พุธ', + 'dow_4' => 'พฤหัสบดี', + 'dow_5' => 'ศุกร์', + 'dow_6' => 'เสาร์', + 'dow_7' => 'อาทิตย์', ]; /* diff --git a/resources/lang/th_TH/demo.php b/resources/lang/th_TH/demo.php index da59aab8ba..885682b955 100644 --- a/resources/lang/th_TH/demo.php +++ b/resources/lang/th_TH/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/th_TH/email.php b/resources/lang/th_TH/email.php index e2ed8a60fc..a8cb2803b3 100644 --- a/resources/lang/th_TH/email.php +++ b/resources/lang/th_TH/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'ข้อความจากการติดตั้ง Firefly III ของคุณ', 'admin_test_body' => 'นี่คือข้อความทดสอบจากระบบของ Firefly III ซึ่งส่งจากอีเมลของ :email', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'An invitation has been created', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'ตั้งรหัสผ่านใหม่', 'registered_doc_link' => 'เอกสาร', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'A new Firefly III version is available', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'If you prefer, you can also open a new issue on https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'The full stacktrace is below:', 'error_headers' => 'The following headers may also be relevant:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III has created a new transaction|Firefly III has created :count new transactions', 'new_journals_header' => 'Firefly III has created a transaction for you. You can find it in your Firefly III installation:|Firefly III has created :count transactions for you. You can find them in your Firefly III installation:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/th_TH/errors.php b/resources/lang/th_TH/errors.php index 6e68b2dd7d..ea78811295 100644 --- a/resources/lang/th_TH/errors.php +++ b/resources/lang/th_TH/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack trace', 'more_info' => 'ข้อมูลเพิ่มเติม', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Please collect more information in the storage/logs directory where you will find log files. If you\'re running Docker, use docker logs -f [container].', - 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', - 'github_help' => 'Get help on GitHub', - 'github_instructions' => 'You\'re more than welcome to open a new issue on GitHub.', - 'use_search' => 'Use the search!', - 'include_info' => 'Include the information from this debug page.', - 'tell_more' => 'Tell us more than "it says Whoops!"', - 'include_logs' => 'Include error logs (see above).', - 'what_did_you_do' => 'Tell us what you were doing.', - 'offline_header' => 'You are probably offline', - 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', - 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', - + 'collect_info' => 'Please collect more information in the storage/logs directory where you will find log files. If you\'re running Docker, use docker logs -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Get help on GitHub', + 'github_instructions' => 'You\'re more than welcome to open a new issue on GitHub.', + 'use_search' => 'Use the search!', + 'include_info' => 'Include the information from this debug page.', + 'tell_more' => 'Tell us more than "it says Whoops!"', + 'include_logs' => 'Include error logs (see above).', + 'what_did_you_do' => 'Tell us what you were doing.', + 'offline_header' => 'You are probably offline', + 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', + 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', ]; diff --git a/resources/lang/th_TH/firefly.php b/resources/lang/th_TH/firefly.php index 4151dd62b3..5d6936e439 100644 --- a/resources/lang/th_TH/firefly.php +++ b/resources/lang/th_TH/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'ปิด', - 'actions' => 'ดำเนินการ', - 'edit' => 'แก้ไข', - 'delete' => 'ลบ', - 'split' => 'แบ่ง', - 'single_split' => 'การแบ่ง', - 'clone' => 'ทำสำเนา', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => '7 วันที่แล้ว', - 'last_thirty_days' => '30 วันที่ผ่านมา', - 'last_180_days' => '180 วันที่ผ่านมา', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'YTD', - 'welcome_back' => 'What\'s playing?', - 'everything' => 'ทุกอย่าง', - 'today' => 'วันนี้', - 'customRange' => 'Custom range', - 'date_range' => 'ช่วงวันที่', - 'apply' => 'นำไปใช้', - 'select_date' => 'เลือกวันที่', - 'cancel' => 'ยกเลิก', - 'from' => 'จาก', - 'to' => 'ถึง', - 'structure' => 'Structure', - 'help_translating' => 'This help text is not yet available in your language. Will you help translate?', - 'showEverything' => 'แสดงทุกอย่าง', - 'never' => 'Never', - 'no_results_for_empty_search' => 'Your search was empty, so nothing was found.', - 'removed_amount' => 'ลบ :amount', - 'added_amount' => 'เพิ่ม :amount', - 'asset_account_role_help' => 'Any extra options resulting from your choice can be set later.', - 'Opening balance' => 'Opening balance', - 'create_new_stuff' => 'Create new stuff', - 'new_withdrawal' => 'New withdrawal', - 'create_new_transaction' => 'Create a new transaction', - 'sidebar_frontpage_create' => 'Create', - 'new_transaction' => 'New transaction', - 'no_rules_for_bill' => 'This bill has no rules associated to it.', - 'go_to_asset_accounts' => 'View your asset accounts', - 'go_to_budgets' => 'Go to your budgets', - 'go_to_withdrawals' => 'Go to your withdrawals', - 'clones_journal_x' => 'This transaction is a clone of ":description" (#:id)', - 'go_to_categories' => 'Go to your categories', - 'go_to_bills' => 'Go to your bills', - 'go_to_expense_accounts' => 'ดูบัญชีรายจ่ายของคุณ', - 'go_to_revenue_accounts' => 'ดูบัญชีรายได้ของคุณ', - 'go_to_piggies' => 'Go to your piggy banks', - 'new_deposit' => 'New deposit', - 'new_transfer' => 'New transfer', - 'new_transfers' => 'New transfer', - 'new_asset_account' => 'New asset account', - 'new_expense_account' => 'New expense account', - 'new_revenue_account' => 'New revenue account', - 'new_liabilities_account' => 'New liability', - 'new_budget' => 'New budget', - 'new_bill' => 'New bill', - 'block_account_logout' => 'You have been logged out. Blocked accounts cannot use this site. Did you register with a valid email address?', - 'flash_success' => 'เสร็จสมบูรณ์!', - 'flash_info' => 'ข้อความ', - 'flash_warning' => 'คำเตือน!', - 'flash_error' => 'ข้อผิดพลาด!', - 'flash_danger' => 'Danger!', - 'flash_info_multiple' => 'There is one message|There are :count messages', - 'flash_error_multiple' => 'There is one error|There are :count errors', - 'net_worth' => 'Net worth', - 'help_for_this_page' => 'Help for this page', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => 'สวัสดี!', - 'two_factor_enter_code' => 'To continue, please enter your two factor authentication code. Your application can generate it for you.', - 'two_factor_code_here' => 'Enter code here', - 'two_factor_title' => 'Two factor authentication', - 'authenticate' => 'Authenticate', - 'two_factor_forgot_title' => 'Lost two factor authentication', - 'two_factor_forgot' => 'I forgot my two-factor thing.', - 'two_factor_lost_header' => 'Lost your two factor authentication?', - 'two_factor_lost_intro' => 'If you lost your backup codes as well, you have bad luck. This is not something you can fix from the web interface. You have two choices.', - 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read this entry in the FAQ for instructions.', - 'two_factor_lost_fix_owner' => 'Otherwise, email the site owner, :site_owner and ask them to reset your two factor authentication.', - 'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.', - 'pref_two_factor_new_backup_codes' => 'Get new backup codes', - 'pref_two_factor_backup_code_count' => 'You have :count valid backup code.|You have :count valid backup codes.', - '2fa_i_have_them' => 'I stored them!', - 'warning_much_data' => ':days days of data may take a while to load.', - 'registered' => 'You have registered successfully!', - 'Default asset account' => 'Default asset account', - 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.', - 'no_bill_pointer' => 'You seem to have no bills yet. You should create some on the bills-page. Bills can help you keep track of expenses.', - 'Savings account' => 'Savings account', - 'Credit card' => 'Credit card', - 'source_accounts' => 'Source account|Source accounts', - 'destination_accounts' => 'Destination account|Destination accounts', - 'user_id_is' => 'Your user id is :user', - 'field_supports_markdown' => 'This field supports Markdown.', - 'need_more_help' => 'If you need more help using Firefly III, please open a ticket on Github.', - 'reenable_intro_text' => 'You can also re-enable the introduction guidance.', - 'intro_boxes_after_refresh' => 'The introduction boxes will reappear when you refresh the page.', - 'show_all_no_filter' => 'Show all transactions without grouping them by date.', - 'expenses_by_category' => 'Expenses by category', - 'expenses_by_budget' => 'Expenses by budget', - 'income_by_category' => 'Income by category', - 'expenses_by_asset_account' => 'Expenses by asset account', - 'expenses_by_expense_account' => 'Expenses by expense account', - 'cannot_redirect_to_account' => 'Firefly III cannot redirect you to the correct page. Apologies.', - 'sum_of_expenses' => 'Sum of expenses', - 'sum_of_income' => 'Sum of income', - 'liabilities' => 'Liabilities', - 'spent_in_specific_budget' => 'Spent in budget ":budget"', - 'spent_in_specific_double' => 'Spent in account ":account"', - 'earned_in_specific_double' => 'Earned in account ":account"', - 'source_account' => 'Source account', - 'source_account_reconciliation' => 'You can\'t edit the source account of a reconciliation transaction.', - 'destination_account' => 'Destination account', - 'destination_account_reconciliation' => 'You can\'t edit the destination account of a reconciliation transaction.', - 'sum_of_expenses_in_budget' => 'Spent total in budget ":budget"', - 'left_in_budget_limit' => 'Left to spend according to budgeting', - 'current_period' => 'Current period', - 'show_the_current_period_and_overview' => 'Show the current period and overview', - 'pref_languages_locale' => 'For a language other than English to work properly, your operating system must be equipped with the correct locale-information. If these are not present, currency data, dates and amounts may be formatted wrong.', - 'budget_in_period' => 'All transactions for budget ":name" between :start and :end in :currency', - 'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency', - 'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.', - 'chart_account_in_period' => 'Chart for all transactions for account ":name" (:balance) between :start and :end', - 'chart_category_in_period' => 'Chart for all transactions for category ":name" between :start and :end', - 'chart_category_all' => 'Chart for all transactions for category ":name"', - 'clone_withdrawal' => 'Clone this withdrawal', - 'clone_deposit' => 'Clone this deposit', - 'clone_transfer' => 'Clone this transfer', - 'multi_select_no_selection' => 'None selected', - 'multi_select_select_all' => 'Select all', - 'multi_select_n_selected' => 'selected', - 'multi_select_all_selected' => 'All selected', - 'multi_select_filter_placeholder' => 'Find..', - 'intro_next_label' => 'Next', - 'intro_prev_label' => 'Previous', - 'intro_skip_label' => 'Skip', - 'intro_done_label' => 'Done', - 'between_dates_breadcrumb' => 'Between :start and :end', - 'all_journals_without_budget' => 'All transactions without a budget', - 'journals_without_budget' => 'Transactions without a budget', - 'all_journals_without_category' => 'All transactions without a category', - 'journals_without_category' => 'Transactions without a category', - 'all_journals_for_account' => 'All transactions for account :name', - 'chart_all_journals_for_account' => 'Chart of all transactions for account :name', - 'journals_in_period_for_account' => 'All transactions for account :name between :start and :end', - 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', - 'transferred' => 'Transferred', - 'all_withdrawal' => 'All expenses', - 'all_transactions' => 'All transactions', - 'title_withdrawal_between' => 'All expenses between :start and :end', - 'all_deposit' => 'All revenue', - 'title_deposit_between' => 'All revenue between :start and :end', - 'all_transfers' => 'All transfers', - 'title_transfers_between' => 'All transfers between :start and :end', - 'all_transfer' => 'All transfers', - 'all_journals_for_tag' => 'All transactions for tag ":tag"', - 'title_transfer_between' => 'All transfers between :start and :end', - 'all_journals_for_category' => 'All transactions for category :name', - 'all_journals_for_budget' => 'All transactions for budget :name', - 'chart_all_journals_for_budget' => 'Chart of all transactions for budget :name', - 'journals_in_period_for_category' => 'All transactions for category :name between :start and :end', - 'journals_in_period_for_tag' => 'All transactions for tag :tag between :start and :end', - 'not_available_demo_user' => 'The feature you try to access is not available to demo users.', - 'exchange_rate_instructions' => 'Asset account "@name" only accepts transactions in @native_currency. If you wish to use @foreign_currency instead, make sure that the amount in @native_currency is known as well:', - 'transfer_exchange_rate_instructions' => 'Source asset account "@source_name" only accepts transactions in @source_currency. Destination asset account "@dest_name" only accepts transactions in @dest_currency. You must provide the transferred amount correctly in both currencies.', - 'transaction_data' => 'Transaction data', - 'invalid_server_configuration' => 'Invalid server configuration', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Quickswitch', - 'sign_in_to_start' => 'Sign in to start your session', - 'sign_in' => 'Sign in', - 'register_new_account' => 'Register a new account', - 'forgot_my_password' => 'I forgot my password', - 'problems_with_input' => 'There were some problems with your input.', - 'reset_password' => 'Reset your password', - 'button_reset_password' => 'Reset password', - 'reset_button' => 'Reset', - 'want_to_login' => 'I want to login', - 'login_page_title' => 'Login to Firefly III', - 'register_page_title' => 'Register at Firefly III', - 'forgot_pw_page_title' => 'Forgot your password for Firefly III', - 'reset_pw_page_title' => 'Reset your password for Firefly III', - 'cannot_reset_demo_user' => 'You cannot reset the password of the demo user.', - 'no_att_demo_user' => 'The demo user can\'t upload attachments.', - 'button_register' => 'Register', - 'authorization' => 'Authorization', - 'active_bills_only' => 'active bills only', - 'active_bills_only_total' => 'all active bills', - 'active_exp_bills_only' => 'active and expected bills only', - 'active_exp_bills_only_total' => 'all active expected bills only', - 'per_period_sum_1D' => 'Expected daily costs', - 'per_period_sum_1W' => 'Expected weekly costs', - 'per_period_sum_1M' => 'Expected monthly costs', - 'per_period_sum_3M' => 'Expected quarterly costs', - 'per_period_sum_6M' => 'Expected half-yearly costs', - 'per_period_sum_1Y' => 'Expected yearly costs', - 'average_per_bill' => 'average per bill', - 'expected_total' => 'expected total', - 'reconciliation_account_name' => ':name reconciliation (:currency)', - 'saved' => 'Saved', - 'advanced_options' => 'Advanced options', - 'advanced_options_explain' => 'Some pages in Firefly III have advanced options hidden behind this button. This page doesn\'t have anything fancy here, but do check out the others!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'ปิด', + 'actions' => 'ดำเนินการ', + 'edit' => 'แก้ไข', + 'delete' => 'ลบ', + 'split' => 'แบ่ง', + 'single_split' => 'การแบ่ง', + 'clone' => 'ทำสำเนา', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Confirm action', + 'last_seven_days' => '7 วันที่แล้ว', + 'last_thirty_days' => '30 วันที่ผ่านมา', + 'last_180_days' => '180 วันที่ผ่านมา', + 'month_to_date' => 'Month to date', + 'year_to_date' => 'Year to date', + 'YTD' => 'YTD', + 'welcome_back' => 'What\'s playing?', + 'everything' => 'ทุกอย่าง', + 'today' => 'วันนี้', + 'customRange' => 'Custom range', + 'date_range' => 'ช่วงวันที่', + 'apply' => 'นำไปใช้', + 'select_date' => 'เลือกวันที่', + 'cancel' => 'ยกเลิก', + 'from' => 'จาก', + 'to' => 'ถึง', + 'structure' => 'Structure', + 'help_translating' => 'This help text is not yet available in your language. Will you help translate?', + 'showEverything' => 'แสดงทุกอย่าง', + 'never' => 'Never', + 'no_results_for_empty_search' => 'Your search was empty, so nothing was found.', + 'removed_amount' => 'ลบ :amount', + 'added_amount' => 'เพิ่ม :amount', + 'asset_account_role_help' => 'Any extra options resulting from your choice can be set later.', + 'Opening balance' => 'Opening balance', + 'create_new_stuff' => 'Create new stuff', + 'new_withdrawal' => 'New withdrawal', + 'create_new_transaction' => 'Create a new transaction', + 'sidebar_frontpage_create' => 'Create', + 'new_transaction' => 'New transaction', + 'no_rules_for_bill' => 'This bill has no rules associated to it.', + 'go_to_asset_accounts' => 'View your asset accounts', + 'go_to_budgets' => 'Go to your budgets', + 'go_to_withdrawals' => 'Go to your withdrawals', + 'clones_journal_x' => 'This transaction is a clone of ":description" (#:id)', + 'go_to_categories' => 'Go to your categories', + 'go_to_bills' => 'Go to your bills', + 'go_to_expense_accounts' => 'ดูบัญชีรายจ่ายของคุณ', + 'go_to_revenue_accounts' => 'ดูบัญชีรายได้ของคุณ', + 'go_to_piggies' => 'Go to your piggy banks', + 'new_deposit' => 'New deposit', + 'new_transfer' => 'New transfer', + 'new_transfers' => 'New transfer', + 'new_asset_account' => 'New asset account', + 'new_expense_account' => 'New expense account', + 'new_revenue_account' => 'New revenue account', + 'new_liabilities_account' => 'New liability', + 'new_budget' => 'New budget', + 'new_bill' => 'New bill', + 'block_account_logout' => 'You have been logged out. Blocked accounts cannot use this site. Did you register with a valid email address?', + 'flash_success' => 'เสร็จสมบูรณ์!', + 'flash_info' => 'ข้อความ', + 'flash_warning' => 'คำเตือน!', + 'flash_error' => 'ข้อผิดพลาด!', + 'flash_danger' => 'Danger!', + 'flash_info_multiple' => 'There is one message|There are :count messages', + 'flash_error_multiple' => 'There is one error|There are :count errors', + 'net_worth' => 'Net worth', + 'help_for_this_page' => 'Help for this page', + 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', + 'two_factor_welcome' => 'สวัสดี!', + 'two_factor_enter_code' => 'To continue, please enter your two factor authentication code. Your application can generate it for you.', + 'two_factor_code_here' => 'Enter code here', + 'two_factor_title' => 'Two factor authentication', + 'authenticate' => 'Authenticate', + 'two_factor_forgot_title' => 'Lost two factor authentication', + 'two_factor_forgot' => 'I forgot my two-factor thing.', + 'two_factor_lost_header' => 'Lost your two factor authentication?', + 'two_factor_lost_intro' => 'If you lost your backup codes as well, you have bad luck. This is not something you can fix from the web interface. You have two choices.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner and ask them to reset your two factor authentication.', + 'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.', + 'pref_two_factor_new_backup_codes' => 'Get new backup codes', + 'pref_two_factor_backup_code_count' => 'You have :count valid backup code.|You have :count valid backup codes.', + '2fa_i_have_them' => 'I stored them!', + 'warning_much_data' => ':days days of data may take a while to load.', + 'registered' => 'You have registered successfully!', + 'Default asset account' => 'Default asset account', + 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.', + 'no_bill_pointer' => 'You seem to have no bills yet. You should create some on the bills-page. Bills can help you keep track of expenses.', + 'Savings account' => 'Savings account', + 'Credit card' => 'Credit card', + 'source_accounts' => 'Source account|Source accounts', + 'destination_accounts' => 'Destination account|Destination accounts', + 'user_id_is' => 'Your user id is :user', + 'field_supports_markdown' => 'This field supports Markdown.', + 'need_more_help' => 'If you need more help using Firefly III, please open a ticket on Github.', + 'reenable_intro_text' => 'You can also re-enable the introduction guidance.', + 'intro_boxes_after_refresh' => 'The introduction boxes will reappear when you refresh the page.', + 'show_all_no_filter' => 'Show all transactions without grouping them by date.', + 'expenses_by_category' => 'Expenses by category', + 'expenses_by_budget' => 'Expenses by budget', + 'income_by_category' => 'Income by category', + 'expenses_by_asset_account' => 'Expenses by asset account', + 'expenses_by_expense_account' => 'Expenses by expense account', + 'cannot_redirect_to_account' => 'Firefly III cannot redirect you to the correct page. Apologies.', + 'sum_of_expenses' => 'Sum of expenses', + 'sum_of_income' => 'Sum of income', + 'liabilities' => 'Liabilities', + 'spent_in_specific_budget' => 'Spent in budget ":budget"', + 'spent_in_specific_double' => 'Spent in account ":account"', + 'earned_in_specific_double' => 'Earned in account ":account"', + 'source_account' => 'Source account', + 'source_account_reconciliation' => 'You can\'t edit the source account of a reconciliation transaction.', + 'destination_account' => 'Destination account', + 'destination_account_reconciliation' => 'You can\'t edit the destination account of a reconciliation transaction.', + 'sum_of_expenses_in_budget' => 'Spent total in budget ":budget"', + 'left_in_budget_limit' => 'Left to spend according to budgeting', + 'current_period' => 'Current period', + 'show_the_current_period_and_overview' => 'Show the current period and overview', + 'pref_languages_locale' => 'For a language other than English to work properly, your operating system must be equipped with the correct locale-information. If these are not present, currency data, dates and amounts may be formatted wrong.', + 'budget_in_period' => 'All transactions for budget ":name" between :start and :end in :currency', + 'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency', + 'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.', + 'chart_account_in_period' => 'Chart for all transactions for account ":name" (:balance) between :start and :end', + 'chart_category_in_period' => 'Chart for all transactions for category ":name" between :start and :end', + 'chart_category_all' => 'Chart for all transactions for category ":name"', + 'clone_withdrawal' => 'Clone this withdrawal', + 'clone_deposit' => 'Clone this deposit', + 'clone_transfer' => 'Clone this transfer', + 'multi_select_no_selection' => 'None selected', + 'multi_select_select_all' => 'Select all', + 'multi_select_n_selected' => 'selected', + 'multi_select_all_selected' => 'All selected', + 'multi_select_filter_placeholder' => 'Find..', + 'intro_next_label' => 'Next', + 'intro_prev_label' => 'Previous', + 'intro_skip_label' => 'Skip', + 'intro_done_label' => 'Done', + 'between_dates_breadcrumb' => 'Between :start and :end', + 'all_journals_without_budget' => 'All transactions without a budget', + 'journals_without_budget' => 'Transactions without a budget', + 'all_journals_without_category' => 'All transactions without a category', + 'journals_without_category' => 'Transactions without a category', + 'all_journals_for_account' => 'All transactions for account :name', + 'chart_all_journals_for_account' => 'Chart of all transactions for account :name', + 'journals_in_period_for_account' => 'All transactions for account :name between :start and :end', + 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', + 'transferred' => 'Transferred', + 'all_withdrawal' => 'All expenses', + 'all_transactions' => 'All transactions', + 'title_withdrawal_between' => 'All expenses between :start and :end', + 'all_deposit' => 'All revenue', + 'title_deposit_between' => 'All revenue between :start and :end', + 'all_transfers' => 'All transfers', + 'title_transfers_between' => 'All transfers between :start and :end', + 'all_transfer' => 'All transfers', + 'all_journals_for_tag' => 'All transactions for tag ":tag"', + 'title_transfer_between' => 'All transfers between :start and :end', + 'all_journals_for_category' => 'All transactions for category :name', + 'all_journals_for_budget' => 'All transactions for budget :name', + 'chart_all_journals_for_budget' => 'Chart of all transactions for budget :name', + 'journals_in_period_for_category' => 'All transactions for category :name between :start and :end', + 'journals_in_period_for_tag' => 'All transactions for tag :tag between :start and :end', + 'not_available_demo_user' => 'The feature you try to access is not available to demo users.', + 'exchange_rate_instructions' => 'Asset account "@name" only accepts transactions in @native_currency. If you wish to use @foreign_currency instead, make sure that the amount in @native_currency is known as well:', + 'transfer_exchange_rate_instructions' => 'Source asset account "@source_name" only accepts transactions in @source_currency. Destination asset account "@dest_name" only accepts transactions in @dest_currency. You must provide the transferred amount correctly in both currencies.', + 'transaction_data' => 'Transaction data', + 'invalid_server_configuration' => 'Invalid server configuration', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Quickswitch', + 'sign_in_to_start' => 'Sign in to start your session', + 'sign_in' => 'Sign in', + 'register_new_account' => 'Register a new account', + 'forgot_my_password' => 'I forgot my password', + 'problems_with_input' => 'There were some problems with your input.', + 'reset_password' => 'Reset your password', + 'button_reset_password' => 'Reset password', + 'reset_button' => 'Reset', + 'want_to_login' => 'I want to login', + 'login_page_title' => 'Login to Firefly III', + 'register_page_title' => 'Register at Firefly III', + 'forgot_pw_page_title' => 'Forgot your password for Firefly III', + 'reset_pw_page_title' => 'Reset your password for Firefly III', + 'cannot_reset_demo_user' => 'You cannot reset the password of the demo user.', + 'no_att_demo_user' => 'The demo user can\'t upload attachments.', + 'button_register' => 'Register', + 'authorization' => 'Authorization', + 'active_bills_only' => 'active bills only', + 'active_bills_only_total' => 'all active bills', + 'active_exp_bills_only' => 'active and expected bills only', + 'active_exp_bills_only_total' => 'all active expected bills only', + 'per_period_sum_1D' => 'Expected daily costs', + 'per_period_sum_1W' => 'Expected weekly costs', + 'per_period_sum_1M' => 'Expected monthly costs', + 'per_period_sum_3M' => 'Expected quarterly costs', + 'per_period_sum_6M' => 'Expected half-yearly costs', + 'per_period_sum_1Y' => 'Expected yearly costs', + 'average_per_bill' => 'average per bill', + 'expected_total' => 'expected total', + 'reconciliation_account_name' => ':name reconciliation (:currency)', + 'saved' => 'Saved', + 'advanced_options' => 'Advanced options', + 'advanced_options_explain' => 'Some pages in Firefly III have advanced options hidden behind this button. This page doesn\'t have anything fancy here, but do check out the others!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', + 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', + 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', + 'webhook_response_TRANSACTIONS' => 'Transaction details', + 'webhook_response_ACCOUNTS' => 'Account details', + 'webhook_response_none_NONE' => 'No details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspect', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => 'View message', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logs', + 'response' => 'Response', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Firefly III v:version Authorization Request', - 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', - 'scopes_will_be_able' => 'This application will be able to:', - 'button_authorize' => 'Authorize', - 'none_in_select_list' => '(none)', - 'no_piggy_bank' => '(no piggy bank)', - 'name_in_currency' => ':name in :currency', - 'paid_in_currency' => 'Paid in :currency', - 'unpaid_in_currency' => 'Unpaid in :currency', - 'is_alpha_warning' => 'You are running an ALPHA version. Be wary of bugs and issues.', - 'is_beta_warning' => 'You are running an BETA version. Be wary of bugs and issues.', - 'all_destination_accounts' => 'Destination accounts', - 'all_source_accounts' => 'Source accounts', - 'back_to_index' => 'Back to the index', - 'cant_logout_guard' => 'Firefly III can\'t log you out.', - 'internal_reference' => 'Internal reference', + 'authorization_request' => 'Firefly III v:version Authorization Request', + 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', + 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', + 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', + 'scopes_will_be_able' => 'This application will be able to:', + 'button_authorize' => 'Authorize', + 'none_in_select_list' => '(none)', + 'no_piggy_bank' => '(no piggy bank)', + 'name_in_currency' => ':name in :currency', + 'paid_in_currency' => 'Paid in :currency', + 'unpaid_in_currency' => 'Unpaid in :currency', + 'is_alpha_warning' => 'You are running an ALPHA version. Be wary of bugs and issues.', + 'is_beta_warning' => 'You are running an BETA version. Be wary of bugs and issues.', + 'all_destination_accounts' => 'Destination accounts', + 'all_source_accounts' => 'Source accounts', + 'back_to_index' => 'Back to the index', + 'cant_logout_guard' => 'Firefly III can\'t log you out.', + 'internal_reference' => 'Internal reference', // check for updates: - 'update_check_title' => 'Check for updates', - 'admin_update_check_title' => 'Automatically check for update', - 'admin_update_check_explain' => 'Firefly III can check for updates automatically. When you enable this setting, it will contact the Firefly III update server to see if a new version of Firefly III is available. When it is, you will get a notification. You can test this notification using the button on the right. Please indicate below if you want Firefly III to check for updates.', - 'check_for_updates_permission' => 'Firefly III can check for updates, but it needs your permission to do so. Please go to the administration to indicate if you would like this feature to be enabled.', - 'updates_ask_me_later' => 'Ask me later', - 'updates_do_not_check' => 'Do not check for updates', - 'updates_enable_check' => 'Enable the check for updates', - 'admin_update_check_now_title' => 'Check for updates now', - 'admin_update_check_now_explain' => 'If you press the button, Firefly III will see if your current version is the latest.', - 'check_for_updates_button' => 'Check now!', - 'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.', - 'update_version_beta' => 'This version is a BETA version. You may run into issues.', - 'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.', - 'update_current_version_alert' => 'You are running :version, which is the latest available release.', - 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', - 'update_check_error' => 'An error occurred while checking for updates: :error', - 'unknown_error' => 'Unknown error. Sorry about that.', - 'just_new_release' => 'A new version is available! Version :version was released :date. This release is very fresh. Wait a few days for the new release to stabilize.', - 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', - 'admin_update_channel_title' => 'Update channel', - 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.', - 'update_channel_stable' => 'Stable. Everything should work as expected.', - 'update_channel_beta' => 'Beta. New features but things may be broken.', - 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', + 'update_check_title' => 'Check for updates', + 'admin_update_check_title' => 'Automatically check for update', + 'admin_update_check_explain' => 'Firefly III can check for updates automatically. When you enable this setting, it will contact the Firefly III update server to see if a new version of Firefly III is available. When it is, you will get a notification. You can test this notification using the button on the right. Please indicate below if you want Firefly III to check for updates.', + 'check_for_updates_permission' => 'Firefly III can check for updates, but it needs your permission to do so. Please go to the administration to indicate if you would like this feature to be enabled.', + 'updates_ask_me_later' => 'Ask me later', + 'updates_do_not_check' => 'Do not check for updates', + 'updates_enable_check' => 'Enable the check for updates', + 'admin_update_check_now_title' => 'Check for updates now', + 'admin_update_check_now_explain' => 'If you press the button, Firefly III will see if your current version is the latest.', + 'check_for_updates_button' => 'Check now!', + 'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.', + 'update_version_beta' => 'This version is a BETA version. You may run into issues.', + 'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'You are running :version, which is the latest available release.', + 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', + 'update_check_error' => 'An error occurred while checking for updates: :error', + 'unknown_error' => 'Unknown error. Sorry about that.', + 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', + 'admin_update_channel_title' => 'Update channel', + 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.', + 'update_channel_stable' => 'Stable. Everything should work as expected.', + 'update_channel_beta' => 'Beta. New features but things may be broken.', + 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', // search - 'search' => 'Search', - 'search_query' => 'Query', - 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', - 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', - 'search_for_query' => 'Firefly III is searching for transactions with all of these words in them: :query', - 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', + 'search' => 'Search', + 'search_query' => 'Query', + 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', + 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', + 'search_for_query' => 'Firefly III is searching for transactions with all of these words in them: :query', + 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaction date is ":value"', 'search_modifier_not_date_on' => 'Transaction date is not ":value"', 'search_modifier_reconciled' => 'Transaction is reconciled', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Transaction type is ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Tag is ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'The following modifiers are applied to the search as well:', 'general_search_error' => 'An error occurred while searching. Please check the log files for more information.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'You cannot execute inactive rules.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Rules', 'rule_name' => 'Name of rule', 'rule_triggers' => 'Rule triggers when', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'When a transaction is updated', 'rule_trigger_user_action' => 'User action is ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Source account name starts with..', 'rule_trigger_source_account_starts' => 'Source account name starts with ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Budget is ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Transaction currency is..', 'rule_trigger_currency_is' => 'Transaction currency is ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Transaction foreign currency is..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Rule group for bills', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Rule for bill ":name"', 'new_rule_for_bill_description' => 'This rule marks transactions for bill ":name".', - 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', - 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', + 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', + 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', // tags - 'store_new_tag' => 'Store new tag', - 'update_tag' => 'Update tag', - 'no_location_set' => 'No location set.', - 'meta_data' => 'Meta data', - 'location' => 'Location', - 'without_date' => 'Without date', - 'result' => 'Result', - 'sums_apply_to_range' => 'All sums apply to the selected range', - 'mapbox_api_key' => 'To use map, get an API key from Mapbox. Open your .env file and enter this code after MAPBOX_API_KEY=.', - 'press_object_location' => 'Right click or long press to set the object\'s location.', - 'clear_location' => 'Clear location', - 'delete_all_selected_tags' => 'Delete all selected tags', - 'select_tags_to_delete' => 'Don\'t forget to select some tags.', - 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', - 'create_rule_from_transaction' => 'Create rule based on transaction', - 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', - + 'store_new_tag' => 'Store new tag', + 'update_tag' => 'Update tag', + 'no_location_set' => 'No location set.', + 'meta_data' => 'Meta data', + 'location' => 'Location', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Without date', + 'result' => 'Result', + 'sums_apply_to_range' => 'All sums apply to the selected range', + 'mapbox_api_key' => 'To use map, get an API key from Mapbox. Open your .env file and enter this code after MAPBOX_API_KEY=.', + 'press_object_location' => 'Right click or long press to set the object\'s location.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Clear location', + 'delete_all_selected_tags' => 'Delete all selected tags', + 'select_tags_to_delete' => 'Don\'t forget to select some tags.', + 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', + 'create_rule_from_transaction' => 'Create rule based on transaction', + 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(equal to language)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Home screen accounts', - 'pref_home_screen_accounts_help' => 'Which accounts should be displayed on the home page?', - 'pref_view_range' => 'View range', - 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', - 'pref_1D' => 'One day', - 'pref_1W' => 'One week', - 'pref_1M' => 'One month', - 'pref_3M' => 'Three months (quarter)', - 'pref_6M' => 'Six months', - 'pref_1Y' => 'One year', - 'pref_last365' => 'Last year', - 'pref_last90' => 'Last 90 days', - 'pref_last30' => 'Last 30 days', - 'pref_last7' => 'Last 7 days', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Languages', - 'pref_locale' => 'Locale settings', - 'pref_languages_help' => 'Firefly III supports several languages. Which one do you prefer?', - 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', - 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', - 'pref_custom_fiscal_year' => 'Fiscal year settings', - 'pref_custom_fiscal_year_label' => 'Enabled', - 'pref_custom_fiscal_year_help' => 'In countries that use a financial year other than January 1 to December 31, you can switch this on and specify start / end days of the fiscal year', - 'pref_fiscal_year_start_label' => 'Fiscal year start date', - 'pref_two_factor_auth' => '2-step verification', - 'pref_two_factor_auth_help' => 'When you enable 2-step verification (also known as two-factor authentication), you add an extra layer of security to your account. You sign in with something you know (your password) and something you have (a verification code). Verification codes are generated by an application on your phone, such as Authy or Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Enable 2-step verification', - 'pref_two_factor_auth_disabled' => '2-step verification code removed and disabled', - 'pref_two_factor_auth_remove_it' => 'Don\'t forget to remove the account from your authentication app!', - 'pref_two_factor_auth_code' => 'Verify code', - 'pref_two_factor_auth_code_help' => 'Scan the QR code with an application on your phone such as Authy or Google Authenticator and enter the generated code.', - 'pref_two_factor_auth_reset_code' => 'Reset verification code', - 'pref_two_factor_auth_disable_2fa' => 'Disable 2FA', - '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', - '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', - '2fa_already_enabled' => '2-step verification is already enabled.', - 'wrong_mfa_code' => 'This MFA code is not valid.', - 'pref_save_settings' => 'Save settings', - 'saved_preferences' => 'Preferences saved!', - 'preferences_general' => 'General', - 'preferences_frontpage' => 'Home screen', - 'preferences_security' => 'Security', - 'preferences_layout' => 'Layout', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Show deposits on the home screen', - 'pref_home_show_deposits_info' => 'The home screen already shows your expense accounts. Should it also show your revenue accounts?', - 'pref_home_do_show_deposits' => 'Yes, show them', - 'successful_count' => 'of which :count successful', - 'list_page_size_title' => 'Page size', - 'list_page_size_help' => 'Any list of things (accounts, transactions, etc) shows at most this many per page.', - 'list_page_size_label' => 'Page size', - 'between_dates' => '(:start and :end)', - 'pref_optional_fields_transaction' => 'Optional fields for transactions', - 'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.', - 'optional_tj_date_fields' => 'Date fields', - 'optional_tj_other_fields' => 'Other fields', - 'optional_tj_attachment_fields' => 'Attachment fields', - 'pref_optional_tj_interest_date' => 'Interest date', - 'pref_optional_tj_book_date' => 'Book date', - 'pref_optional_tj_process_date' => 'Processing date', - 'pref_optional_tj_due_date' => 'Due date', - 'pref_optional_tj_payment_date' => 'Payment date', - 'pref_optional_tj_invoice_date' => 'Invoice date', - 'pref_optional_tj_internal_reference' => 'Internal reference', - 'pref_optional_tj_notes' => 'Notes', - 'pref_optional_tj_attachments' => 'Attachments', - 'pref_optional_tj_external_url' => 'External URL', - 'pref_optional_tj_location' => 'Location', - 'pref_optional_tj_links' => 'Transaction links', - 'optional_field_meta_dates' => 'Dates', - 'optional_field_meta_business' => 'Business', - 'optional_field_attachments' => 'Attachments', - 'optional_field_meta_data' => 'Optional meta data', - 'external_url' => 'External URL', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(equal to language)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Home screen accounts', + 'pref_home_screen_accounts_help' => 'Which accounts should be displayed on the home page?', + 'pref_view_range' => 'View range', + 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', + 'pref_1D' => 'One day', + 'pref_1W' => 'One week', + 'pref_1M' => 'One month', + 'pref_3M' => 'Three months (quarter)', + 'pref_6M' => 'Six months', + 'pref_1Y' => 'One year', + 'pref_last365' => 'Last year', + 'pref_last90' => 'Last 90 days', + 'pref_last30' => 'Last 30 days', + 'pref_last7' => 'Last 7 days', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => 'Languages', + 'pref_locale' => 'Locale settings', + 'pref_languages_help' => 'Firefly III supports several languages. Which one do you prefer?', + 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', + 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', + 'pref_custom_fiscal_year' => 'Fiscal year settings', + 'pref_custom_fiscal_year_label' => 'Enabled', + 'pref_custom_fiscal_year_help' => 'In countries that use a financial year other than January 1 to December 31, you can switch this on and specify start / end days of the fiscal year', + 'pref_fiscal_year_start_label' => 'Fiscal year start date', + 'pref_two_factor_auth' => '2-step verification', + 'pref_two_factor_auth_help' => 'When you enable 2-step verification (also known as two-factor authentication), you add an extra layer of security to your account. You sign in with something you know (your password) and something you have (a verification code). Verification codes are generated by an application on your phone, such as Authy or Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Enable 2-step verification', + 'pref_two_factor_auth_disabled' => '2-step verification code removed and disabled', + 'pref_two_factor_auth_remove_it' => 'Don\'t forget to remove the account from your authentication app!', + 'pref_two_factor_auth_code' => 'Verify code', + 'pref_two_factor_auth_code_help' => 'Scan the QR code with an application on your phone such as Authy or Google Authenticator and enter the generated code.', + 'pref_two_factor_auth_reset_code' => 'Reset verification code', + 'pref_two_factor_auth_disable_2fa' => 'Disable 2FA', + '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', + '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', + '2fa_already_enabled' => '2-step verification is already enabled.', + 'wrong_mfa_code' => 'This MFA code is not valid.', + 'pref_save_settings' => 'Save settings', + 'saved_preferences' => 'Preferences saved!', + 'preferences_general' => 'General', + 'preferences_frontpage' => 'Home screen', + 'preferences_security' => 'Security', + 'preferences_layout' => 'Layout', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Show deposits on the home screen', + 'pref_home_show_deposits_info' => 'The home screen already shows your expense accounts. Should it also show your revenue accounts?', + 'pref_home_do_show_deposits' => 'Yes, show them', + 'successful_count' => 'of which :count successful', + 'list_page_size_title' => 'Page size', + 'list_page_size_help' => 'Any list of things (accounts, transactions, etc) shows at most this many per page.', + 'list_page_size_label' => 'Page size', + 'between_dates' => '(:start and :end)', + 'pref_optional_fields_transaction' => 'Optional fields for transactions', + 'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.', + 'optional_tj_date_fields' => 'Date fields', + 'optional_tj_other_fields' => 'Other fields', + 'optional_tj_attachment_fields' => 'Attachment fields', + 'pref_optional_tj_interest_date' => 'Interest date', + 'pref_optional_tj_book_date' => 'Book date', + 'pref_optional_tj_process_date' => 'Processing date', + 'pref_optional_tj_due_date' => 'Due date', + 'pref_optional_tj_payment_date' => 'Payment date', + 'pref_optional_tj_invoice_date' => 'Invoice date', + 'pref_optional_tj_internal_reference' => 'Internal reference', + 'pref_optional_tj_notes' => 'Notes', + 'pref_optional_tj_attachments' => 'Attachments', + 'pref_optional_tj_external_url' => 'External URL', + 'pref_optional_tj_location' => 'Location', + 'pref_optional_tj_links' => 'Transaction links', + 'optional_field_meta_dates' => 'Dates', + 'optional_field_meta_business' => 'Business', + 'optional_field_attachments' => 'Attachments', + 'optional_field_meta_data' => 'Optional meta data', + 'external_url' => 'External URL', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'All your other sessions have been logged out.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Delete ALL your budgets', - 'delete_all_categories' => 'Delete ALL your categories', - 'delete_all_tags' => 'Delete ALL your tags', - 'delete_all_bills' => 'Delete ALL your bills', - 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', - 'delete_all_rules' => 'Delete ALL your rules', - 'delete_all_recurring' => 'Delete ALL your recurring transactions', - 'delete_all_object_groups' => 'Delete ALL your object groups', - 'delete_all_accounts' => 'Delete ALL your accounts', - 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', - 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', - 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', - 'delete_all_liabilities' => 'Delete ALL your liabilities', - 'delete_all_transactions' => 'Delete ALL your transactions', - 'delete_all_withdrawals' => 'Delete ALL your withdrawals', - 'delete_all_deposits' => 'Delete ALL your deposits', - 'delete_all_transfers' => 'Delete ALL your transfers', - 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', - 'deleted_all_budgets' => 'All budgets have been deleted', - 'deleted_all_categories' => 'All categories have been deleted', - 'deleted_all_tags' => 'All tags have been deleted', - 'deleted_all_bills' => 'All bills have been deleted', - 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', - 'deleted_all_rules' => 'All rules and rule groups have been deleted', - 'deleted_all_object_groups' => 'All groups have been deleted', - 'deleted_all_accounts' => 'All accounts have been deleted', - 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', - 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', - 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', - 'deleted_all_liabilities' => 'All liabilities have been deleted', - 'deleted_all_transactions' => 'All transactions have been deleted', - 'deleted_all_withdrawals' => 'All withdrawals have been deleted', - 'deleted_all_deposits' => 'All deposits have been deleted', - 'deleted_all_transfers' => 'All transfers have been deleted', - 'deleted_all_recurring' => 'All recurring transactions have been deleted', - 'change_your_password' => 'Change your password', - 'delete_account' => 'Delete account', - 'current_password' => 'Current password', - 'new_password' => 'New password', - 'new_password_again' => 'New password (again)', - 'delete_your_account' => 'Delete your account', - 'delete_your_account_help' => 'Deleting your account will also delete any accounts, transactions, anything you might have saved into Firefly III. It\'ll be GONE.', - 'delete_your_account_password' => 'Enter your password to continue.', - 'password' => 'Password', - 'are_you_sure' => 'Are you sure? You cannot undo this.', - 'delete_account_button' => 'DELETE your account', - 'invalid_current_password' => 'Invalid current password!', - 'password_changed' => 'Password changed!', - 'should_change' => 'The idea is to change your password.', - 'invalid_password' => 'Invalid password!', - 'what_is_pw_security' => 'What is "verify password security"?', - 'secure_pw_title' => 'How to choose a secure password', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => 'Not a week goes by that you read in the news about a site losing the passwords of its users. Hackers and thieves use these passwords to try to steal your private information. This information is valuable.', - 'secure_pw_ff' => 'Do you use the same password all over the internet? If one site loses your password, hackers have access to all your data. Firefly III relies on you to choose a strong and unique password to protect your financial records.', - 'secure_pw_check_box' => 'To help you do that Firefly III can check if the password you want to use has been stolen in the past. If this is the case, Firefly III advises you NOT to use that password.', - 'secure_pw_working_title' => 'How does it work?', - 'secure_pw_working' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', - 'secure_pw_should' => 'Should I check the box?', - 'secure_pw_long_password' => 'Yes. Always verify your password is safe.', - 'command_line_token' => 'Command line token', - 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', - 'regenerate_command_line_token' => 'Regenerate command line token', - 'token_regenerated' => 'A new command line token was generated', - 'change_your_email' => 'Change your email address', - 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', - 'email_changed_logout' => 'Until you verify your email address, you cannot login.', - 'login_with_new_email' => 'You can now login with your new email address.', - 'login_with_old_email' => 'You can now login with your old email address again.', - 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', - 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', - 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', - 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Clients', - 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Client ID', - 'profile_oauth_client_name' => 'Name', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Create New Client', - 'profile_oauth_create_client' => 'Create Client', - 'profile_oauth_edit_client' => 'Edit Client', - 'profile_oauth_name_help' => 'Something your users will recognize and trust.', - 'profile_oauth_redirect_url' => 'Redirect URL', - 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', - 'profile_authorized_apps' => 'Authorized applications', - 'profile_authorized_clients' => 'Authorized clients', - 'profile_scopes' => 'Scopes', - 'profile_revoke' => 'Revoke', - 'profile_oauth_client_secret_title' => 'Client Secret', - 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', - 'profile_personal_access_tokens' => 'Personal Access Tokens', - 'profile_personal_access_token' => 'Personal Access Token', - 'profile_oauth_confidential' => 'Confidential', - 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', - 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', - 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', - 'profile_create_new_token' => 'Create new token', - 'profile_create_token' => 'Create token', - 'profile_create' => 'Create', - 'profile_save_changes' => 'Save changes', - 'profile_whoops' => 'Whoops!', - 'profile_something_wrong' => 'Something went wrong!', - 'profile_try_again' => 'Something went wrong. Please try again.', - 'amounts' => 'Amounts', - 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', - 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', - 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', - 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'All your other sessions have been logged out.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Delete ALL your budgets', + 'delete_all_categories' => 'Delete ALL your categories', + 'delete_all_tags' => 'Delete ALL your tags', + 'delete_all_bills' => 'Delete ALL your bills', + 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', + 'delete_all_rules' => 'Delete ALL your rules', + 'delete_all_recurring' => 'Delete ALL your recurring transactions', + 'delete_all_object_groups' => 'Delete ALL your object groups', + 'delete_all_accounts' => 'Delete ALL your accounts', + 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', + 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', + 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', + 'delete_all_liabilities' => 'Delete ALL your liabilities', + 'delete_all_transactions' => 'Delete ALL your transactions', + 'delete_all_withdrawals' => 'Delete ALL your withdrawals', + 'delete_all_deposits' => 'Delete ALL your deposits', + 'delete_all_transfers' => 'Delete ALL your transfers', + 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', + 'deleted_all_budgets' => 'All budgets have been deleted', + 'deleted_all_categories' => 'All categories have been deleted', + 'deleted_all_tags' => 'All tags have been deleted', + 'deleted_all_bills' => 'All bills have been deleted', + 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', + 'deleted_all_rules' => 'All rules and rule groups have been deleted', + 'deleted_all_object_groups' => 'All groups have been deleted', + 'deleted_all_accounts' => 'All accounts have been deleted', + 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', + 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', + 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', + 'deleted_all_liabilities' => 'All liabilities have been deleted', + 'deleted_all_transactions' => 'All transactions have been deleted', + 'deleted_all_withdrawals' => 'All withdrawals have been deleted', + 'deleted_all_deposits' => 'All deposits have been deleted', + 'deleted_all_transfers' => 'All transfers have been deleted', + 'deleted_all_recurring' => 'All recurring transactions have been deleted', + 'change_your_password' => 'Change your password', + 'delete_account' => 'Delete account', + 'current_password' => 'Current password', + 'new_password' => 'New password', + 'new_password_again' => 'New password (again)', + 'delete_your_account' => 'Delete your account', + 'delete_your_account_help' => 'Deleting your account will also delete any accounts, transactions, anything you might have saved into Firefly III. It\'ll be GONE.', + 'delete_your_account_password' => 'Enter your password to continue.', + 'password' => 'Password', + 'are_you_sure' => 'Are you sure? You cannot undo this.', + 'delete_account_button' => 'DELETE your account', + 'invalid_current_password' => 'Invalid current password!', + 'password_changed' => 'Password changed!', + 'should_change' => 'The idea is to change your password.', + 'invalid_password' => 'Invalid password!', + 'what_is_pw_security' => 'What is "verify password security"?', + 'secure_pw_title' => 'How to choose a secure password', + 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', + 'secure_pw_history' => 'Not a week goes by that you read in the news about a site losing the passwords of its users. Hackers and thieves use these passwords to try to steal your private information. This information is valuable.', + 'secure_pw_ff' => 'Do you use the same password all over the internet? If one site loses your password, hackers have access to all your data. Firefly III relies on you to choose a strong and unique password to protect your financial records.', + 'secure_pw_check_box' => 'To help you do that Firefly III can check if the password you want to use has been stolen in the past. If this is the case, Firefly III advises you NOT to use that password.', + 'secure_pw_working_title' => 'How does it work?', + 'secure_pw_working' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', + 'secure_pw_should' => 'Should I check the box?', + 'secure_pw_long_password' => 'Yes. Always verify your password is safe.', + 'command_line_token' => 'Command line token', + 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', + 'regenerate_command_line_token' => 'Regenerate command line token', + 'token_regenerated' => 'A new command line token was generated', + 'change_your_email' => 'Change your email address', + 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', + 'email_changed_logout' => 'Until you verify your email address, you cannot login.', + 'login_with_new_email' => 'You can now login with your new email address.', + 'login_with_old_email' => 'You can now login with your old email address again.', + 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', + 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', + 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', + 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Clients', + 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'Client ID', + 'profile_oauth_client_name' => 'Name', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Create New Client', + 'profile_oauth_create_client' => 'Create Client', + 'profile_oauth_edit_client' => 'Edit Client', + 'profile_oauth_name_help' => 'Something your users will recognize and trust.', + 'profile_oauth_redirect_url' => 'Redirect URL', + 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', + 'profile_authorized_apps' => 'Authorized applications', + 'profile_authorized_clients' => 'Authorized clients', + 'profile_scopes' => 'Scopes', + 'profile_revoke' => 'Revoke', + 'profile_oauth_client_secret_title' => 'Client Secret', + 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', + 'profile_personal_access_tokens' => 'Personal Access Tokens', + 'profile_personal_access_token' => 'Personal Access Token', + 'profile_oauth_confidential' => 'Confidential', + 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', + 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', + 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', + 'profile_create_new_token' => 'Create new token', + 'profile_create_token' => 'Create token', + 'profile_create' => 'Create', + 'profile_save_changes' => 'Save changes', + 'profile_whoops' => 'Whoops!', + 'profile_something_wrong' => 'Something went wrong!', + 'profile_try_again' => 'Something went wrong. Please try again.', + 'amounts' => 'Amounts', + 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', + 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', + 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', + 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Export data from Firefly III', - 'export_data_menu' => 'Export data', - 'export_data_bc' => 'Export data from Firefly III', - 'export_data_main_title' => 'Export data from Firefly III', - 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', - 'export_data_all_transactions' => 'Export all transactions', - 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Export data from Firefly III', + 'export_data_menu' => 'Export data', + 'export_data_bc' => 'Export data from Firefly III', + 'export_data_main_title' => 'Export data from Firefly III', + 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', + 'export_data_all_transactions' => 'Export all transactions', + 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'One attachment|:count attachments', - 'attachments' => 'Attachments', - 'edit_attachment' => 'Edit attachment ":name"', - 'update_attachment' => 'Update attachment', - 'delete_attachment' => 'Delete attachment ":name"', - 'attachment_deleted' => 'Deleted attachment ":name"', - 'liabilities_deleted' => 'Deleted liability ":name"', - 'attachment_updated' => 'Updated attachment ":name"', - 'upload_max_file_size' => 'Maximum file size: :size', - 'list_all_attachments' => 'List of all attachments', + 'nr_of_attachments' => 'One attachment|:count attachments', + 'attachments' => 'Attachments', + 'edit_attachment' => 'Edit attachment ":name"', + 'update_attachment' => 'Update attachment', + 'delete_attachment' => 'Delete attachment ":name"', + 'attachment_deleted' => 'Deleted attachment ":name"', + 'liabilities_deleted' => 'Deleted liability ":name"', + 'attachment_updated' => 'Updated attachment ":name"', + 'upload_max_file_size' => 'Maximum file size: :size', + 'list_all_attachments' => 'List of all attachments', // transaction index - 'title_expenses' => 'Expenses', - 'title_withdrawal' => 'Expenses', - 'title_revenue' => 'Revenue / income', - 'title_deposit' => 'Revenue / income', - 'title_transfer' => 'Transfers', - 'title_transfers' => 'Transfers', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Expenses', + 'title_withdrawal' => 'Expenses', + 'title_revenue' => 'Revenue / income', + 'title_deposit' => 'Revenue / income', + 'title_transfer' => 'Transfers', + 'title_transfers' => 'Transfers', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'This transaction is already a withdrawal', - 'convert_is_already_type_Deposit' => 'This transaction is already a deposit', - 'convert_is_already_type_Transfer' => 'This transaction is already a transfer', - 'convert_to_Withdrawal' => 'Convert ":description" to a withdrawal', - 'convert_to_Deposit' => 'Convert ":description" to a deposit', - 'convert_to_Transfer' => 'Convert ":description" to a transfer', - 'convert_options_WithdrawalDeposit' => 'Convert a withdrawal into a deposit', - 'convert_options_WithdrawalTransfer' => 'Convert a withdrawal into a transfer', - 'convert_options_DepositTransfer' => 'Convert a deposit into a transfer', - 'convert_options_DepositWithdrawal' => 'Convert a deposit into a withdrawal', - 'convert_options_TransferWithdrawal' => 'Convert a transfer into a withdrawal', - 'convert_options_TransferDeposit' => 'Convert a transfer into a deposit', - 'convert_Withdrawal_to_deposit' => 'Convert this withdrawal to a deposit', - 'convert_Withdrawal_to_transfer' => 'Convert this withdrawal to a transfer', - 'convert_Deposit_to_withdrawal' => 'Convert this deposit to a withdrawal', - 'convert_Deposit_to_transfer' => 'Convert this deposit to a transfer', - 'convert_Transfer_to_deposit' => 'Convert this transfer to a deposit', - 'convert_Transfer_to_withdrawal' => 'Convert this transfer to a withdrawal', - 'convert_please_set_revenue_source' => 'Please pick the revenue account where the money will come from.', - 'convert_please_set_asset_destination' => 'Please pick the asset account where the money will go to.', - 'convert_please_set_expense_destination' => 'Please pick the expense account where the money will go to.', - 'convert_please_set_asset_source' => 'Please pick the asset account where the money will come from.', - 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', - 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', - 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal', - 'converted_to_Deposit' => 'The transaction has been converted to a deposit', - 'converted_to_Transfer' => 'The transaction has been converted to a transfer', - 'invalid_convert_selection' => 'The account you have selected is already used in this transaction or does not exist.', - 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', - 'convert_to_withdrawal' => 'Convert to a withdrawal', - 'convert_to_deposit' => 'Convert to a deposit', - 'convert_to_transfer' => 'Convert to a transfer', + 'convert_is_already_type_Withdrawal' => 'This transaction is already a withdrawal', + 'convert_is_already_type_Deposit' => 'This transaction is already a deposit', + 'convert_is_already_type_Transfer' => 'This transaction is already a transfer', + 'convert_to_Withdrawal' => 'Convert ":description" to a withdrawal', + 'convert_to_Deposit' => 'Convert ":description" to a deposit', + 'convert_to_Transfer' => 'Convert ":description" to a transfer', + 'convert_options_WithdrawalDeposit' => 'Convert a withdrawal into a deposit', + 'convert_options_WithdrawalTransfer' => 'Convert a withdrawal into a transfer', + 'convert_options_DepositTransfer' => 'Convert a deposit into a transfer', + 'convert_options_DepositWithdrawal' => 'Convert a deposit into a withdrawal', + 'convert_options_TransferWithdrawal' => 'Convert a transfer into a withdrawal', + 'convert_options_TransferDeposit' => 'Convert a transfer into a deposit', + 'convert_Withdrawal_to_deposit' => 'Convert this withdrawal to a deposit', + 'convert_Withdrawal_to_transfer' => 'Convert this withdrawal to a transfer', + 'convert_Deposit_to_withdrawal' => 'Convert this deposit to a withdrawal', + 'convert_Deposit_to_transfer' => 'Convert this deposit to a transfer', + 'convert_Transfer_to_deposit' => 'Convert this transfer to a deposit', + 'convert_Transfer_to_withdrawal' => 'Convert this transfer to a withdrawal', + 'convert_please_set_revenue_source' => 'Please pick the revenue account where the money will come from.', + 'convert_please_set_asset_destination' => 'Please pick the asset account where the money will go to.', + 'convert_please_set_expense_destination' => 'Please pick the expense account where the money will go to.', + 'convert_please_set_asset_source' => 'Please pick the asset account where the money will come from.', + 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', + 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', + 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', + 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', + 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', + 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', + 'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal', + 'converted_to_Deposit' => 'The transaction has been converted to a deposit', + 'converted_to_Transfer' => 'The transaction has been converted to a transfer', + 'invalid_convert_selection' => 'The account you have selected is already used in this transaction or does not exist.', + 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', + 'convert_to_withdrawal' => 'Convert to a withdrawal', + 'convert_to_deposit' => 'Convert to a deposit', + 'convert_to_transfer' => 'Convert to a transfer', // create new stuff: - 'create_new_withdrawal' => 'Create new withdrawal', - 'create_new_deposit' => 'Create new deposit', - 'create_new_transfer' => 'Create new transfer', - 'create_new_asset' => 'Create new asset account', - 'create_new_liabilities' => 'Create new liability', - 'create_new_expense' => 'Create new expense account', - 'create_new_revenue' => 'Create new revenue account', - 'create_new_piggy_bank' => 'Create new piggy bank', - 'create_new_bill' => 'Create new bill', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Create new withdrawal', + 'create_new_deposit' => 'Create new deposit', + 'create_new_transfer' => 'Create new transfer', + 'create_new_asset' => 'Create new asset account', + 'create_new_liabilities' => 'Create new liability', + 'create_new_expense' => 'Create new expense account', + 'create_new_revenue' => 'Create new revenue account', + 'create_new_piggy_bank' => 'Create new piggy bank', + 'create_new_bill' => 'Create new bill', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Create a new currency', - 'store_currency' => 'Store new currency', - 'update_currency' => 'Update currency', - 'new_default_currency' => ':name is now the default currency.', - 'cannot_delete_currency' => 'Cannot delete :name because it is still in use.', - 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', - 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', - 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', - 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', - 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', - 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', - 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', - 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', - 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', - 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', - 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', - 'deleted_currency' => 'Currency :name deleted', - 'created_currency' => 'Currency :name created', - 'could_not_store_currency' => 'Could not store the new currency.', - 'updated_currency' => 'Currency :name updated', - 'ask_site_owner' => 'Please ask :owner to add, remove or edit currencies.', - 'currencies_intro' => 'Firefly III supports various currencies which you can set and enable here.', - 'make_default_currency' => 'Make default', - 'default_currency' => 'default', - 'currency_is_disabled' => 'Disabled', - 'enable_currency' => 'Enable', - 'disable_currency' => 'Disable', - 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', - 'currency_is_now_enabled' => 'Currency ":name" has been enabled', - 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'create_currency' => 'Create a new currency', + 'store_currency' => 'Store new currency', + 'update_currency' => 'Update currency', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Cannot delete :name because it is still in use.', + 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', + 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', + 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', + 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', + 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', + 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', + 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', + 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', + 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', + 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', + 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', + 'deleted_currency' => 'Currency :name deleted', + 'created_currency' => 'Currency :name created', + 'could_not_store_currency' => 'Could not store the new currency.', + 'updated_currency' => 'Currency :name updated', + 'ask_site_owner' => 'Please ask :owner to add, remove or edit currencies.', + 'currencies_intro' => 'Firefly III supports various currencies which you can set and enable here.', + 'make_default_currency' => 'Make default', + 'default_currency' => 'default', + 'currency_is_disabled' => 'Disabled', + 'enable_currency' => 'Enable', + 'disable_currency' => 'Disable', + 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', + 'currency_is_now_enabled' => 'Currency ":name" has been enabled', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Mandatory fields', - 'optionalFields' => 'Optional fields', - 'options' => 'Options', + 'mandatoryFields' => 'Mandatory fields', + 'optionalFields' => 'Optional fields', + 'options' => 'Options', // budgets: - 'daily_budgets' => 'Daily budgets', - 'weekly_budgets' => 'Weekly budgets', - 'monthly_budgets' => 'Monthly budgets', - 'quarterly_budgets' => 'Quarterly budgets', - 'half_year_budgets' => 'Half-yearly budgets', - 'yearly_budgets' => 'Yearly budgets', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', - 'total_available_budget' => 'Total available budget (between :start and :end)', - 'total_available_budget_in_currency' => 'Total available budget in :currency', - 'see_below' => 'see below', - 'create_new_budget' => 'Create a new budget', - 'store_new_budget' => 'Store new budget', - 'stored_new_budget' => 'Stored new budget ":name"', - 'available_between' => 'Available between :start and :end', - 'transactionsWithoutBudget' => 'Expenses without budget', - 'transactions_no_budget' => 'Expenses without budget between :start and :end', - 'spent_between' => 'Already spent between :start and :end', - 'set_available_amount' => 'Set available amount', - 'update_available_amount' => 'Update available amount', - 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', - 'createBudget' => 'New budget', - 'invalid_currency' => 'This is an invalid currency', - 'invalid_amount' => 'Please enter an amount', - 'set_ab' => 'The available budget amount has been set', - 'updated_ab' => 'The available budget amount has been updated', - 'deleted_ab' => 'The available budget amount has been deleted', - 'deleted_bl' => 'The budgeted amount has been removed', - 'alt_currency_ab_create' => 'Set the available budget in another currency', - 'bl_create_btn' => 'Set budget in another currency', - 'inactiveBudgets' => 'Inactive budgets', - 'without_budget_between' => 'Transactions without a budget between :start and :end', - 'delete_budget' => 'Delete budget ":name"', - 'deleted_budget' => 'Deleted budget ":name"', - 'edit_budget' => 'Edit budget ":name"', - 'updated_budget' => 'Updated budget ":name"', - 'update_amount' => 'Update amount', - 'update_budget' => 'Update budget', - 'update_budget_amount_range' => 'Update (expected) available amount between :start and :end', - 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', - 'set_budget_limit' => 'Set budgeted amount', - 'budget_period_navigator' => 'Period navigator', - 'info_on_available_amount' => 'What do I have available?', - 'available_amount_indication' => 'Use these amounts to get an indication of what your total budget could be.', - 'suggested' => 'Suggested', - 'average_between' => 'Average between :start and :end', - 'transferred_in' => 'Transferred (in)', - 'transferred_away' => 'Transferred (away)', - 'auto_budget_none' => 'No auto-budget', - 'auto_budget_reset' => 'Set a fixed amount every period', - 'auto_budget_rollover' => 'Add an amount every period', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Daily', - 'auto_budget_period_weekly' => 'Weekly', - 'auto_budget_period_monthly' => 'Monthly', - 'auto_budget_period_quarterly' => 'Quarterly', - 'auto_budget_period_half_year' => 'Every half year', - 'auto_budget_period_yearly' => 'Yearly', - 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', - 'auto_budget_reset_icon' => 'This budget will be set periodically', - 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', + 'daily_budgets' => 'Daily budgets', + 'weekly_budgets' => 'Weekly budgets', + 'monthly_budgets' => 'Monthly budgets', + 'quarterly_budgets' => 'Quarterly budgets', + 'half_year_budgets' => 'Half-yearly budgets', + 'yearly_budgets' => 'Yearly budgets', + 'other_budgets' => 'Custom timed budgets', + 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', + 'total_available_budget' => 'Total available budget (between :start and :end)', + 'total_available_budget_in_currency' => 'Total available budget in :currency', + 'see_below' => 'see below', + 'create_new_budget' => 'Create a new budget', + 'store_new_budget' => 'Store new budget', + 'stored_new_budget' => 'Stored new budget ":name"', + 'available_between' => 'Available between :start and :end', + 'transactionsWithoutBudget' => 'Expenses without budget', + 'transactions_no_budget' => 'Expenses without budget between :start and :end', + 'spent_between' => 'Already spent between :start and :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Set available amount', + 'update_available_amount' => 'Update available amount', + 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', + 'createBudget' => 'New budget', + 'invalid_currency' => 'This is an invalid currency', + 'invalid_amount' => 'Please enter an amount', + 'set_ab' => 'The available budget amount has been set', + 'updated_ab' => 'The available budget amount has been updated', + 'deleted_ab' => 'The available budget amount has been deleted', + 'deleted_bl' => 'The budgeted amount has been removed', + 'alt_currency_ab_create' => 'Set the available budget in another currency', + 'bl_create_btn' => 'Set budget in another currency', + 'inactiveBudgets' => 'Inactive budgets', + 'without_budget_between' => 'Transactions without a budget between :start and :end', + 'delete_budget' => 'Delete budget ":name"', + 'deleted_budget' => 'Deleted budget ":name"', + 'edit_budget' => 'Edit budget ":name"', + 'updated_budget' => 'Updated budget ":name"', + 'update_amount' => 'Update amount', + 'update_budget' => 'Update budget', + 'update_budget_amount_range' => 'Update (expected) available amount between :start and :end', + 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', + 'set_budget_limit' => 'Set budgeted amount', + 'budget_period_navigator' => 'Period navigator', + 'info_on_available_amount' => 'What do I have available?', + 'available_amount_indication' => 'Use these amounts to get an indication of what your total budget could be.', + 'suggested' => 'Suggested', + 'average_between' => 'Average between :start and :end', + 'transferred_in' => 'Transferred (in)', + 'transferred_away' => 'Transferred (away)', + 'auto_budget_none' => 'No auto-budget', + 'auto_budget_reset' => 'Set a fixed amount every period', + 'auto_budget_rollover' => 'Add an amount every period', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Daily', + 'auto_budget_period_weekly' => 'Weekly', + 'auto_budget_period_monthly' => 'Monthly', + 'auto_budget_period_quarterly' => 'Quarterly', + 'auto_budget_period_half_year' => 'Every half year', + 'auto_budget_period_yearly' => 'Yearly', + 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', + 'auto_budget_reset_icon' => 'This budget will be set periodically', + 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Not expected this period', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Not (yet)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Bill matches transactions between :low and :high.', - 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', - 'bill_related_rules' => 'Rules related to this bill', - 'repeats' => 'Repeats', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Connected transactions', - 'auto_match_on' => 'Automatically matched by Firefly III', - 'auto_match_off' => 'Not automatically matched by Firefly III', - 'next_expected_match' => 'Next expected match', - 'delete_bill' => 'Delete bill ":name"', - 'deleted_bill' => 'Deleted bill ":name"', - 'edit_bill' => 'Edit bill ":name"', - 'more' => 'More', - 'rescan_old' => 'Run rules again, on all transactions', - 'update_bill' => 'Update bill', - 'updated_bill' => 'Updated bill ":name"', - 'store_new_bill' => 'Store new bill', - 'stored_new_bill' => 'Stored new bill ":name"', - 'cannot_scan_inactive_bill' => 'Inactive bills cannot be scanned.', - 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', - 'average_bill_amount_year' => 'Average bill amount (:year)', - 'average_bill_amount_overall' => 'Average bill amount (overall)', - 'bill_is_active' => 'Bill is active', - 'bill_expected_between' => 'Expected between :start and :end', - 'bill_will_automatch' => 'Bill will automatically linked to matching transactions', - 'skips_over' => 'skips over', - 'bill_store_error' => 'An unexpected error occurred while storing your new bill. Please check the log files', - 'list_inactive_rule' => 'inactive rule', - 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', - 'bill_expected_date' => 'Expected :date', - 'bill_expected_date_js' => 'Expected {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'จ่ายเมื่อ {date}', - 'bill_repeats_weekly' => 'Repeats weekly', - 'bill_repeats_monthly' => 'Repeats monthly', - 'bill_repeats_quarterly' => 'Repeats quarterly', - 'bill_repeats_half-year' => 'Repeats every half year', - 'bill_repeats_yearly' => 'Repeats yearly', - 'bill_repeats_weekly_other' => 'Repeats every other week', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Repeats yearly', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Subscriptions', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Forever', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Not expected this period', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Not (yet)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Bill matches transactions between :low and :high.', + 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', + 'bill_related_rules' => 'Rules related to this bill', + 'repeats' => 'Repeats', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Connected transactions', + 'auto_match_on' => 'Automatically matched by Firefly III', + 'auto_match_off' => 'Not automatically matched by Firefly III', + 'next_expected_match' => 'Next expected match', + 'delete_bill' => 'Delete bill ":name"', + 'deleted_bill' => 'Deleted bill ":name"', + 'edit_bill' => 'Edit bill ":name"', + 'more' => 'More', + 'rescan_old' => 'Run rules again, on all transactions', + 'update_bill' => 'Update bill', + 'updated_bill' => 'Updated bill ":name"', + 'store_new_bill' => 'Store new bill', + 'stored_new_bill' => 'Stored new bill ":name"', + 'cannot_scan_inactive_bill' => 'Inactive bills cannot be scanned.', + 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', + 'average_bill_amount_year' => 'Average bill amount (:year)', + 'average_bill_amount_overall' => 'Average bill amount (overall)', + 'bill_is_active' => 'Bill is active', + 'bill_expected_between' => 'Expected between :start and :end', + 'bill_will_automatch' => 'Bill will automatically linked to matching transactions', + 'skips_over' => 'skips over', + 'bill_store_error' => 'An unexpected error occurred while storing your new bill. Please check the log files', + 'list_inactive_rule' => 'inactive rule', + 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', + 'bill_expected_date' => 'Expected :date', + 'bill_expected_date_js' => 'Expected {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'จ่ายเมื่อ {date}', + 'bill_repeats_weekly' => 'Repeats weekly', + 'bill_repeats_monthly' => 'Repeats monthly', + 'bill_repeats_quarterly' => 'Repeats quarterly', + 'bill_repeats_half-year' => 'Repeats every half year', + 'bill_repeats_yearly' => 'Repeats yearly', + 'bill_repeats_weekly_other' => 'Repeats every other week', + 'bill_repeats_monthly_other' => 'Repeats every other month', + 'bill_repeats_quarterly_other' => 'Repeats every other quarter', + 'bill_repeats_half-year_other' => 'Repeats yearly', + 'bill_repeats_yearly_other' => 'Repeats every other year', + 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', + 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', + 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', + 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', + 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', + 'subscriptions' => 'Subscriptions', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Forever', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', - 'all_accounts_inactive' => 'These are your inactive accounts.', - 'active_account_link' => 'This link goes back to your active accounts.', - 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', - 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', - 'details_for_asset' => 'Details for asset account ":name"', - 'details_for_expense' => 'Details for expense account ":name"', - 'details_for_revenue' => 'Details for revenue account ":name"', - 'details_for_cash' => 'Details for cash account ":name"', - 'store_new_asset_account' => 'Store new asset account', - 'store_new_expense_account' => 'Store new expense account', - 'store_new_revenue_account' => 'Store new revenue account', - 'edit_asset_account' => 'Edit asset account ":name"', - 'edit_expense_account' => 'Edit expense account ":name"', - 'edit_revenue_account' => 'Edit revenue account ":name"', - 'delete_asset_account' => 'Delete asset account ":name"', - 'delete_expense_account' => 'Delete expense account ":name"', - 'delete_revenue_account' => 'Delete revenue account ":name"', - 'delete_liabilities_account' => 'Delete liability ":name"', - 'asset_deleted' => 'Successfully deleted asset account ":name"', - 'account_deleted' => 'Successfully deleted account ":name"', - 'expense_deleted' => 'Successfully deleted expense account ":name"', - 'revenue_deleted' => 'Successfully deleted revenue account ":name"', - 'update_asset_account' => 'Update asset account', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => 'Update liability', - 'update_expense_account' => 'Update expense account', - 'update_revenue_account' => 'Update revenue account', - 'make_new_asset_account' => 'Create a new asset account', - 'make_new_expense_account' => 'Create a new expense account', - 'make_new_revenue_account' => 'Create a new revenue account', - 'make_new_liabilities_account' => 'Create a new liability', - 'asset_accounts' => 'Asset accounts', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Asset accounts (inactive)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Expense accounts', - 'expense_accounts_inactive' => 'Expense accounts (inactive)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Revenue accounts', - 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', - 'cash_accounts' => 'Cash accounts', - 'Cash account' => 'Cash account', - 'liabilities_accounts' => 'Liabilities', - 'liabilities_accounts_inactive' => 'Liabilities (inactive)', - 'reconcile_account' => 'Reconcile account ":account"', - 'overview_of_reconcile_modal' => 'Overview of reconciliation', - 'delete_reconciliation' => 'Delete reconciliation', - 'update_reconciliation' => 'Update reconciliation', - 'amount_cannot_be_zero' => 'The amount cannot be zero', - 'end_of_reconcile_period' => 'End of reconcile period: :period', - 'start_of_reconcile_period' => 'Start of reconcile period: :period', - 'start_balance' => 'Start balance', - 'end_balance' => 'End balance', - 'update_balance_dates_instruction' => 'Match the amounts and dates above to your bank statement, and press "Start reconciling"', - 'select_transactions_instruction' => 'Select the transactions that appear on your bank statement.', - 'select_range_and_balance' => 'First verify the date-range and balances. Then press "Start reconciling"', - 'date_change_instruction' => 'If you change the date range now, any progress will be lost.', - 'update_selection' => 'Update selection', - 'store_reconcile' => 'Store reconciliation', - 'reconciliation_transaction' => 'Reconciliation transaction', - 'Reconciliation' => 'Reconciliation', - 'reconciliation' => 'Reconciliation', - 'reconcile_options' => 'Reconciliation options', - 'reconcile_range' => 'Reconciliation range', - 'start_reconcile' => 'Start reconciling', - 'cash_account_type' => 'Cash', - 'cash' => 'cash', - 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', - 'account_type' => 'Account type', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'New account ":name" stored!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => 'Updated account ":name"', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Credit card options', - 'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".', - 'no_transactions_period' => 'There are no transactions (in this period).', - 'no_data_for_chart' => 'There is not enough information (yet) to generate this chart.', - 'select_at_least_one_account' => 'Please select at least one asset account', - 'select_at_least_one_category' => 'Please select at least one category', - 'select_at_least_one_budget' => 'Please select at least one budget', - 'select_at_least_one_tag' => 'Please select at least one tag', - 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', - 'account_default_currency' => 'This will be the default currency associated with this account.', - 'reconcile_has_more' => 'Your Firefly III ledger has more money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', - 'reconcile_has_less' => 'Your Firefly III ledger has less money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', - 'reconcile_is_equal' => 'Your Firefly III ledger and your bank statements match. There is nothing to do. Please press "Confirm reconciliation" to confirm your input.', - 'create_pos_reconcile_transaction' => 'Clear the selected transactions, and create a correction adding :amount to this asset account.', - 'create_neg_reconcile_transaction' => 'Clear the selected transactions, and create a correction removing :amount from this asset account.', - 'reconcile_do_nothing' => 'Clear the selected transactions, but do not correct.', - 'reconcile_go_back' => 'You can always edit or delete a correction later.', - 'must_be_asset_account' => 'You can only reconcile asset accounts', - 'reconciliation_stored' => 'Reconciliation stored', - 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', - 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', - 'sum_of_reconciliation' => 'Sum of reconciliation', - 'reconcile_this_account' => 'Reconcile this account', - 'reconcile' => 'Reconcile', - 'show' => 'Show', - 'confirm_reconciliation' => 'Confirm reconciliation', - 'submitted_start_balance' => 'Submitted start balance', - 'selected_transactions' => 'Selected transactions (:count)', - 'already_cleared_transactions' => 'Already cleared transactions (:count)', - 'submitted_end_balance' => 'Submitted end balance', - 'initial_balance_description' => 'Initial balance for ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'unknown', - 'interest_calc_daily' => 'Per day', - 'interest_calc_monthly' => 'Per month', - 'interest_calc_yearly' => 'Per year', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half year', - 'interest_calc_quarterly' => 'Per quarter', - 'initial_balance_account' => 'Initial balance account of :account', - 'list_options' => 'List options', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', + 'all_accounts_inactive' => 'These are your inactive accounts.', + 'active_account_link' => 'This link goes back to your active accounts.', + 'account_missing_transaction' => 'Account #:id (":name") cannot be viewed directly, but Firefly is missing redirect information.', + 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', + 'details_for_asset' => 'Details for asset account ":name"', + 'details_for_expense' => 'Details for expense account ":name"', + 'details_for_revenue' => 'Details for revenue account ":name"', + 'details_for_cash' => 'Details for cash account ":name"', + 'store_new_asset_account' => 'Store new asset account', + 'store_new_expense_account' => 'Store new expense account', + 'store_new_revenue_account' => 'Store new revenue account', + 'edit_asset_account' => 'Edit asset account ":name"', + 'edit_expense_account' => 'Edit expense account ":name"', + 'edit_revenue_account' => 'Edit revenue account ":name"', + 'delete_asset_account' => 'Delete asset account ":name"', + 'delete_expense_account' => 'Delete expense account ":name"', + 'delete_revenue_account' => 'Delete revenue account ":name"', + 'delete_liabilities_account' => 'Delete liability ":name"', + 'asset_deleted' => 'Successfully deleted asset account ":name"', + 'account_deleted' => 'Successfully deleted account ":name"', + 'expense_deleted' => 'Successfully deleted expense account ":name"', + 'revenue_deleted' => 'Successfully deleted revenue account ":name"', + 'update_asset_account' => 'Update asset account', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => 'Update liability', + 'update_expense_account' => 'Update expense account', + 'update_revenue_account' => 'Update revenue account', + 'make_new_asset_account' => 'Create a new asset account', + 'make_new_expense_account' => 'Create a new expense account', + 'make_new_revenue_account' => 'Create a new revenue account', + 'make_new_liabilities_account' => 'Create a new liability', + 'asset_accounts' => 'Asset accounts', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Asset accounts (inactive)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Expense accounts', + 'expense_accounts_inactive' => 'Expense accounts (inactive)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Revenue accounts', + 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', + 'cash_accounts' => 'Cash accounts', + 'Cash account' => 'Cash account', + 'liabilities_accounts' => 'Liabilities', + 'liabilities_accounts_inactive' => 'Liabilities (inactive)', + 'reconcile_account' => 'Reconcile account ":account"', + 'overview_of_reconcile_modal' => 'Overview of reconciliation', + 'delete_reconciliation' => 'Delete reconciliation', + 'update_reconciliation' => 'Update reconciliation', + 'amount_cannot_be_zero' => 'The amount cannot be zero', + 'end_of_reconcile_period' => 'End of reconcile period: :period', + 'start_of_reconcile_period' => 'Start of reconcile period: :period', + 'start_balance' => 'Start balance', + 'end_balance' => 'End balance', + 'update_balance_dates_instruction' => 'Match the amounts and dates above to your bank statement, and press "Start reconciling"', + 'select_transactions_instruction' => 'Select the transactions that appear on your bank statement.', + 'select_range_and_balance' => 'First verify the date-range and balances. Then press "Start reconciling"', + 'date_change_instruction' => 'If you change the date range now, any progress will be lost.', + 'update_selection' => 'Update selection', + 'store_reconcile' => 'Store reconciliation', + 'reconciliation_transaction' => 'Reconciliation transaction', + 'Reconciliation' => 'Reconciliation', + 'reconciliation' => 'Reconciliation', + 'reconcile_options' => 'Reconciliation options', + 'reconcile_range' => 'Reconciliation range', + 'start_reconcile' => 'Start reconciling', + 'cash_account_type' => 'Cash', + 'cash' => 'cash', + 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', + 'account_type' => 'Account type', + 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => 'New account ":name" stored!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => 'Updated account ":name"', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Credit card options', + 'no_transactions_account' => 'There are no transactions (in this period) for asset account ":name".', + 'no_transactions_period' => 'There are no transactions (in this period).', + 'no_data_for_chart' => 'There is not enough information (yet) to generate this chart.', + 'select_at_least_one_account' => 'Please select at least one asset account', + 'select_at_least_one_category' => 'Please select at least one category', + 'select_at_least_one_budget' => 'Please select at least one budget', + 'select_at_least_one_tag' => 'Please select at least one tag', + 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', + 'account_default_currency' => 'This will be the default currency associated with this account.', + 'reconcile_has_more' => 'Your Firefly III ledger has more money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', + 'reconcile_has_less' => 'Your Firefly III ledger has less money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', + 'reconcile_is_equal' => 'Your Firefly III ledger and your bank statements match. There is nothing to do. Please press "Confirm reconciliation" to confirm your input.', + 'create_pos_reconcile_transaction' => 'Clear the selected transactions, and create a correction adding :amount to this asset account.', + 'create_neg_reconcile_transaction' => 'Clear the selected transactions, and create a correction removing :amount from this asset account.', + 'reconcile_do_nothing' => 'Clear the selected transactions, but do not correct.', + 'reconcile_go_back' => 'You can always edit or delete a correction later.', + 'must_be_asset_account' => 'You can only reconcile asset accounts', + 'reconciliation_stored' => 'Reconciliation stored', + 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', + 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', + 'sum_of_reconciliation' => 'Sum of reconciliation', + 'reconcile_this_account' => 'Reconcile this account', + 'reconcile' => 'Reconcile', + 'show' => 'Show', + 'confirm_reconciliation' => 'Confirm reconciliation', + 'submitted_start_balance' => 'Submitted start balance', + 'selected_transactions' => 'Selected transactions (:count)', + 'already_cleared_transactions' => 'Already cleared transactions (:count)', + 'submitted_end_balance' => 'Submitted end balance', + 'initial_balance_description' => 'Initial balance for ":account"', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'unknown', + 'interest_calc_daily' => 'Per day', + 'interest_calc_monthly' => 'Per month', + 'interest_calc_yearly' => 'Per year', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half year', + 'interest_calc_quarterly' => 'Per quarter', + 'initial_balance_account' => 'Initial balance account of :account', + 'list_options' => 'List options', // categories: - 'new_category' => 'New category', - 'create_new_category' => 'Create a new category', - 'without_category' => 'Without a category', - 'update_category' => 'Update category', - 'updated_category' => 'Updated category ":name"', - 'categories' => 'Categories', - 'edit_category' => 'Edit category ":name"', - 'no_category' => '(no category)', - 'unknown_category_plain' => 'No category', - 'category' => 'Category', - 'delete_category' => 'Delete category ":name"', - 'deleted_category' => 'Deleted category ":name"', - 'store_category' => 'Store new category', - 'stored_category' => 'Stored new category ":name"', - 'without_category_between' => 'Without category between :start and :end', + 'new_category' => 'New category', + 'create_new_category' => 'Create a new category', + 'without_category' => 'Without a category', + 'update_category' => 'Update category', + 'updated_category' => 'Updated category ":name"', + 'categories' => 'Categories', + 'edit_category' => 'Edit category ":name"', + 'no_category' => '(no category)', + 'unknown_category_plain' => 'No category', + 'category' => 'Category', + 'delete_category' => 'Delete category ":name"', + 'deleted_category' => 'Deleted category ":name"', + 'store_category' => 'Store new category', + 'stored_category' => 'Stored new category ":name"', + 'without_category_between' => 'Without category between :start and :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Update withdrawal', - 'update_deposit' => 'Update deposit', - 'update_transaction' => 'Update transaction', - 'update_transfer' => 'Update transfer', - 'updated_withdrawal' => 'Updated withdrawal ":description"', - 'updated_deposit' => 'Updated deposit ":description"', - 'updated_transfer' => 'Updated transfer ":description"', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => 'Delete withdrawal ":description"', - 'delete_deposit' => 'Delete deposit ":description"', - 'delete_transfer' => 'Delete transfer ":description"', - 'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"', - 'deleted_deposit' => 'Successfully deleted deposit ":description"', - 'deleted_transfer' => 'Successfully deleted transfer ":description"', - 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', - 'stored_journal' => 'Successfully created new transaction ":description"', - 'stored_journal_no_descr' => 'Successfully created your new transaction', - 'updated_journal_no_descr' => 'Successfully updated your transaction', - 'select_transactions' => 'Select transactions', - 'rule_group_select_transactions' => 'Apply ":title" to transactions', - 'rule_select_transactions' => 'Apply ":title" to transactions', - 'stop_selection' => 'Stop selecting transactions', - 'reconcile_selected' => 'Reconcile', - 'mass_delete_journals' => 'Delete a number of transactions', - 'mass_edit_journals' => 'Edit a number of transactions', - 'mass_bulk_journals' => 'Bulk edit a number of transactions', - 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', - 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', - 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', - 'no_bulk_category' => 'Don\'t update category', - 'no_bulk_budget' => 'Don\'t update budget', - 'no_bulk_tags' => 'Don\'t update tag(s)', - 'replace_with_these_tags' => 'Replace with these tags', - 'append_these_tags' => 'Add these tags', - 'mass_edit' => 'Edit selected individually', - 'bulk_edit' => 'Edit selected in bulk', - 'mass_delete' => 'Delete selected', - 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', - 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', - 'no_budget' => '(no budget)', - 'no_bill' => '(no bill)', - 'account_per_budget' => 'Account per budget', - 'account_per_category' => 'Account per category', - 'create_new_object' => 'Create', - 'empty' => '(empty)', - 'all_other_budgets' => '(all other budgets)', - 'all_other_accounts' => '(all other accounts)', - 'expense_per_source_account' => 'Expenses per source account', - 'expense_per_destination_account' => 'Expenses per destination account', - 'income_per_destination_account' => 'Income per destination account', - 'spent_in_specific_category' => 'Spent in category ":category"', - 'earned_in_specific_category' => 'Earned in category ":category"', - 'spent_in_specific_tag' => 'Spent in tag ":tag"', - 'earned_in_specific_tag' => 'Earned in tag ":tag"', - 'income_per_source_account' => 'Income per source account', - 'average_spending_per_destination' => 'Average expense per destination account', - 'average_spending_per_source' => 'Average expense per source account', - 'average_earning_per_source' => 'Average earning per source account', - 'average_earning_per_destination' => 'Average earning per destination account', - 'account_per_tag' => 'Account per tag', - 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', - 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', - 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', - 'tag' => 'Tag', - 'no_budget_squared' => '(no budget)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(no account type)', - 'opt_group_no_account_type' => '(no account type)', - 'opt_group_defaultAsset' => 'Default asset accounts', - 'opt_group_savingAsset' => 'Savings accounts', - 'opt_group_sharedAsset' => 'Shared asset accounts', - 'opt_group_ccAsset' => 'Credit cards', - 'opt_group_cashWalletAsset' => 'Cash wallets', - 'opt_group_expense_account' => 'Expense accounts', - 'opt_group_revenue_account' => 'Revenue accounts', - 'opt_group_l_Loan' => 'Liability: Loan', - 'opt_group_cash_account' => 'Cash account', - 'opt_group_l_Debt' => 'Liability: Debt', - 'opt_group_l_Mortgage' => 'Liability: Mortgage', - 'opt_group_l_Credit card' => 'Liability: Credit card', - 'notes' => 'Notes', - 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.', - 'attachment_not_found' => 'This attachment could not be found.', - 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', - 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', - 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Update withdrawal', + 'update_deposit' => 'Update deposit', + 'update_transaction' => 'Update transaction', + 'update_transfer' => 'Update transfer', + 'updated_withdrawal' => 'Updated withdrawal ":description"', + 'updated_deposit' => 'Updated deposit ":description"', + 'updated_transfer' => 'Updated transfer ":description"', + 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', + 'no_changes_deposit' => 'Deposit ":description" was not changed.', + 'no_changes_transfer' => 'Transfer ":description" was not changed.', + 'delete_withdrawal' => 'Delete withdrawal ":description"', + 'delete_deposit' => 'Delete deposit ":description"', + 'delete_transfer' => 'Delete transfer ":description"', + 'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"', + 'deleted_deposit' => 'Successfully deleted deposit ":description"', + 'deleted_transfer' => 'Successfully deleted transfer ":description"', + 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', + 'stored_journal' => 'Successfully created new transaction ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Successfully created your new transaction', + 'updated_journal_no_descr' => 'Successfully updated your transaction', + 'select_transactions' => 'Select transactions', + 'rule_group_select_transactions' => 'Apply ":title" to transactions', + 'rule_select_transactions' => 'Apply ":title" to transactions', + 'stop_selection' => 'Stop selecting transactions', + 'reconcile_selected' => 'Reconcile', + 'mass_delete_journals' => 'Delete a number of transactions', + 'mass_edit_journals' => 'Edit a number of transactions', + 'mass_bulk_journals' => 'Bulk edit a number of transactions', + 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', + 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', + 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', + 'no_bulk_category' => 'Don\'t update category', + 'no_bulk_budget' => 'Don\'t update budget', + 'no_bulk_tags' => 'Don\'t update tag(s)', + 'replace_with_these_tags' => 'Replace with these tags', + 'append_these_tags' => 'Add these tags', + 'mass_edit' => 'Edit selected individually', + 'bulk_edit' => 'Edit selected in bulk', + 'mass_delete' => 'Delete selected', + 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', + 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', + 'no_budget' => '(no budget)', + 'no_bill' => '(no bill)', + 'account_per_budget' => 'Account per budget', + 'account_per_category' => 'Account per category', + 'create_new_object' => 'Create', + 'empty' => '(empty)', + 'all_other_budgets' => '(all other budgets)', + 'all_other_accounts' => '(all other accounts)', + 'expense_per_source_account' => 'Expenses per source account', + 'expense_per_destination_account' => 'Expenses per destination account', + 'income_per_destination_account' => 'Income per destination account', + 'spent_in_specific_category' => 'Spent in category ":category"', + 'earned_in_specific_category' => 'Earned in category ":category"', + 'spent_in_specific_tag' => 'Spent in tag ":tag"', + 'earned_in_specific_tag' => 'Earned in tag ":tag"', + 'income_per_source_account' => 'Income per source account', + 'average_spending_per_destination' => 'Average expense per destination account', + 'average_spending_per_source' => 'Average expense per source account', + 'average_earning_per_source' => 'Average earning per source account', + 'average_earning_per_destination' => 'Average earning per destination account', + 'account_per_tag' => 'Account per tag', + 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', + 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', + 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', + 'tag' => 'Tag', + 'no_budget_squared' => '(no budget)', + 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', + 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', + 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', + 'opt_group_' => '(no account type)', + 'opt_group_no_account_type' => '(no account type)', + 'opt_group_defaultAsset' => 'Default asset accounts', + 'opt_group_savingAsset' => 'Savings accounts', + 'opt_group_sharedAsset' => 'Shared asset accounts', + 'opt_group_ccAsset' => 'Credit cards', + 'opt_group_cashWalletAsset' => 'Cash wallets', + 'opt_group_expense_account' => 'Expense accounts', + 'opt_group_revenue_account' => 'Revenue accounts', + 'opt_group_l_Loan' => 'Liability: Loan', + 'opt_group_cash_account' => 'Cash account', + 'opt_group_l_Debt' => 'Liability: Debt', + 'opt_group_l_Mortgage' => 'Liability: Mortgage', + 'opt_group_l_Credit card' => 'Liability: Credit card', + 'notes' => 'Notes', + 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.', + 'attachment_not_found' => 'This attachment could not be found.', + 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', + 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', + 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => 'Welcome to Firefly III!', - 'submit' => 'Submit', - 'submission' => 'Submission', - 'submit_yes_really' => 'Submit (I know what I\'m doing)', - 'getting_started' => 'Getting started', - 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main checking account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', - 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', - 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', - 'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.', - 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', - 'language' => 'Language', - 'new_savings_account' => ':bank_name savings account', - 'cash_wallet' => 'Cash wallet', - 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', + 'welcome' => 'Welcome to Firefly III!', + 'submit' => 'Submit', + 'submission' => 'Submission', + 'submit_yes_really' => 'Submit (I know what I\'m doing)', + 'getting_started' => 'Getting started', + 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main checking account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', + 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', + 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', + 'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.', + 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', + 'language' => 'Language', + 'new_savings_account' => ':bank_name savings account', + 'cash_wallet' => 'Cash wallet', + 'currency_not_present' => 'If the currency you normally use is not listed do not worry. You can create your own currencies under Options > Currencies.', // home page: - 'transaction_table_description' => 'A table containing your transactions', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => 'Your accounts', - 'your_accounts' => 'Your account overview', - 'category_overview' => 'Category overview', - 'expense_overview' => 'Expense account overview', - 'revenue_overview' => 'Revenue account overview', - 'budgetsAndSpending' => 'Budgets and spending', - 'budgets_and_spending' => 'Budgets and spending', - 'go_to_budget' => 'Go to budget "{budget}"', - 'go_to_deposits' => 'Go to deposits', - 'go_to_expenses' => 'Go to expenses', - 'savings' => 'Savings', - 'newWithdrawal' => 'New expense', - 'newDeposit' => 'New deposit', - 'newTransfer' => 'New transfer', - 'bills_to_pay' => 'Bills to pay', - 'per_day' => 'Per day', - 'left_to_spend_per_day' => 'Left to spend per day', - 'bills_paid' => 'Bills paid', - 'custom_period' => 'Custom period', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Select a period', + 'transaction_table_description' => 'A table containing your transactions', + 'opposing_account' => 'Opposing account', + 'yourAccounts' => 'Your accounts', + 'your_accounts' => 'Your account overview', + 'category_overview' => 'Category overview', + 'expense_overview' => 'Expense account overview', + 'revenue_overview' => 'Revenue account overview', + 'budgetsAndSpending' => 'Budgets and spending', + 'budgets_and_spending' => 'Budgets and spending', + 'go_to_budget' => 'Go to budget "{budget}"', + 'go_to_deposits' => 'Go to deposits', + 'go_to_expenses' => 'Go to expenses', + 'savings' => 'Savings', + 'newWithdrawal' => 'New expense', + 'newDeposit' => 'New deposit', + 'newTransfer' => 'New transfer', + 'bills_to_pay' => 'Bills to pay', + 'per_day' => 'Per day', + 'left_to_spend_per_day' => 'Left to spend per day', + 'bills_paid' => 'Bills paid', + 'custom_period' => 'Custom period', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Select a period', // menu and titles, should be recycled as often as possible: - 'currency' => 'Currency', - 'preferences' => 'Preferences', - 'logout' => 'Logout', - 'logout_other_sessions' => 'Logout all other sessions', - 'toggleNavigation' => 'Toggle navigation', - 'searchPlaceholder' => 'Search...', - 'version' => 'Version', - 'dashboard' => 'Dashboard', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Available budget ({currency})', - 'currencies' => 'Currencies', - 'activity' => 'Activity', - 'usage' => 'Usage', - 'accounts' => 'Accounts', - 'Asset account' => 'Asset account', - 'Default account' => 'Asset account', - 'Expense account' => 'Expense account', - 'Revenue account' => 'Revenue account', - 'Initial balance account' => 'Initial balance account', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Debt', - 'account_type_Loan' => 'Loan', - 'account_type_Mortgage' => 'Mortgage', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Credit card', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Budgets', - 'tags' => 'Tags', - 'reports' => 'Reports', - 'transactions' => 'Transactions', - 'expenses' => 'Expenses', - 'income' => 'Revenue / income', - 'transfers' => 'Transfers', - 'moneyManagement' => 'Money management', - 'money_management' => 'Money management', - 'tools' => 'Tools', - 'piggyBanks' => 'Piggy banks', - 'piggy_banks' => 'Piggy banks', - 'amount_x_of_y' => '{current} of {total}', - 'bills' => 'Bills', - 'withdrawal' => 'Withdrawal', - 'opening_balance' => 'Opening balance', - 'deposit' => 'Deposit', - 'account' => 'Account', - 'transfer' => 'Transfer', - 'Withdrawal' => 'Withdrawal', - 'Deposit' => 'Deposit', - 'Transfer' => 'Transfer', - 'bill' => 'Bill', - 'yes' => 'Yes', - 'no' => 'No', - 'amount' => 'Amount', - 'overview' => 'Overview', - 'saveOnAccount' => 'Save on account', - 'unknown' => 'Unknown', - 'monthly' => 'Monthly', - 'profile' => 'Profile', - 'errors' => 'Errors', - 'debt_start_date' => 'Start date of debt', - 'debt_start_amount' => 'Start amount of debt', - 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', - 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', - 'store_new_liabilities_account' => 'Store new liability', - 'edit_liabilities_account' => 'Edit liability ":name"', - 'financial_control' => 'Financial control', - 'accounting' => 'Accounting', - 'automation' => 'Automation', - 'others' => 'Others', - 'classification' => 'Classification', - 'store_transaction' => 'Store transaction', + 'currency' => 'Currency', + 'preferences' => 'Preferences', + 'logout' => 'Logout', + 'logout_other_sessions' => 'Logout all other sessions', + 'toggleNavigation' => 'Toggle navigation', + 'searchPlaceholder' => 'Search...', + 'version' => 'Version', + 'dashboard' => 'Dashboard', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Available budget ({currency})', + 'currencies' => 'Currencies', + 'activity' => 'Activity', + 'usage' => 'Usage', + 'accounts' => 'Accounts', + 'Asset account' => 'Asset account', + 'Default account' => 'Asset account', + 'Expense account' => 'Expense account', + 'Revenue account' => 'Revenue account', + 'Initial balance account' => 'Initial balance account', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Debt', + 'account_type_Loan' => 'Loan', + 'account_type_Mortgage' => 'Mortgage', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Credit card', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'I am owed this debt', + 'liability_direction_debit' => 'I owe this debt to somebody else', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Budgets', + 'tags' => 'Tags', + 'reports' => 'Reports', + 'transactions' => 'Transactions', + 'expenses' => 'Expenses', + 'income' => 'Revenue / income', + 'transfers' => 'Transfers', + 'moneyManagement' => 'Money management', + 'money_management' => 'Money management', + 'tools' => 'Tools', + 'piggyBanks' => 'Piggy banks', + 'piggy_banks' => 'Piggy banks', + 'amount_x_of_y' => '{current} of {total}', + 'bills' => 'Bills', + 'withdrawal' => 'Withdrawal', + 'opening_balance' => 'Opening balance', + 'deposit' => 'Deposit', + 'account' => 'Account', + 'transfer' => 'Transfer', + 'Withdrawal' => 'Withdrawal', + 'Deposit' => 'Deposit', + 'Transfer' => 'Transfer', + 'bill' => 'Bill', + 'yes' => 'Yes', + 'no' => 'No', + 'amount' => 'Amount', + 'overview' => 'Overview', + 'saveOnAccount' => 'Save on account', + 'unknown' => 'Unknown', + 'monthly' => 'Monthly', + 'profile' => 'Profile', + 'errors' => 'Errors', + 'debt_start_date' => 'Start date of debt', + 'debt_start_amount' => 'Start amount of debt', + 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', + 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', + 'store_new_liabilities_account' => 'Store new liability', + 'edit_liabilities_account' => 'Edit liability ":name"', + 'financial_control' => 'Financial control', + 'accounting' => 'Accounting', + 'automation' => 'Automation', + 'others' => 'Others', + 'classification' => 'Classification', + 'store_transaction' => 'Store transaction', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Default financial report between :start and :end', - 'report_audit' => 'Transaction history overview between :start and :end', - 'report_category' => 'Category report between :start and :end', - 'report_double' => 'Expense/revenue account report between :start and :end', - 'report_budget' => 'Budget report between :start and :end', - 'report_tag' => 'Tag report between :start and :end', - 'quick_link_reports' => 'Quick links', - 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', - 'quick_link_default_report' => 'Default financial report', - 'quick_link_audit_report' => 'Transaction history overview', - 'report_this_month_quick' => 'Current month, all accounts', - 'report_last_month_quick' => 'Last month, all accounts', - 'report_this_year_quick' => 'Current year, all accounts', - 'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts', - 'report_all_time_quick' => 'All-time, all accounts', - 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', - 'incomeVsExpenses' => 'Income vs. expenses', - 'accountBalances' => 'Account balances', - 'balanceStart' => 'Balance at start of period', - 'balanceEnd' => 'Balance at end of period', - 'splitByAccount' => 'Split by account', - 'coveredWithTags' => 'Covered with tags', - 'leftInBudget' => 'Left in budget', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Sum of sums', - 'noCategory' => '(no category)', - 'notCharged' => 'Not charged (yet)', - 'inactive' => 'Inactive', - 'active' => 'Active', - 'difference' => 'Difference', - 'money_flowing_in' => 'In', - 'money_flowing_out' => 'Out', - 'topX' => 'top :number', - 'show_full_list' => 'Show entire list', - 'show_only_top' => 'Show only top :number', - 'report_type' => 'Report type', - 'report_type_default' => 'Default financial report', - 'report_type_audit' => 'Transaction history overview (audit)', - 'report_type_category' => 'Category report', - 'report_type_budget' => 'Budget report', - 'report_type_tag' => 'Tag report', - 'report_type_double' => 'Expense/revenue account report', - 'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.', - 'report_included_accounts' => 'Included accounts', - 'report_date_range' => 'Date range', - 'report_preset_ranges' => 'Pre-set ranges', - 'shared' => 'Shared', - 'fiscal_year' => 'Fiscal year', - 'income_entry' => 'Income from account ":name" between :start and :end', - 'expense_entry' => 'Expenses to account ":name" between :start and :end', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => 'Expenses in budget ":budget" between :start and :end', - 'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end', - 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', - 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', - 'reports_extra_options' => 'Extra options', - 'report_has_no_extra_options' => 'This report has no extra options', - 'reports_submit' => 'View report', - 'end_after_start_date' => 'End date of report must be after start date.', - 'select_category' => 'Select category(ies)', - 'select_budget' => 'Select budget(s).', - 'select_tag' => 'Select tag(s).', - 'income_per_category' => 'Income per category', - 'expense_per_category' => 'Expense per category', - 'expense_per_budget' => 'Expense per budget', - 'income_per_account' => 'Income per account', - 'expense_per_account' => 'Expense per account', - 'expense_per_tag' => 'Expense per tag', - 'income_per_tag' => 'Income per tag', - 'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)', - 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', - 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', - 'include_income_not_in_category' => 'Included income not in the selected category(ies)', - 'include_income_not_in_account' => 'Included income not in the selected account(s)', - 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', - 'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)', - 'everything_else' => 'Everything else', - 'income_and_expenses' => 'Income and expenses', - 'spent_average' => 'Spent (average)', - 'income_average' => 'Income (average)', - 'transaction_count' => 'Transaction count', - 'average_spending_per_account' => 'Average spending per account', - 'average_income_per_account' => 'Average income per account', - 'total' => 'Total', - 'description' => 'Description', - 'sum_of_period' => 'Sum of period', - 'average_in_period' => 'Average in period', - 'account_role_defaultAsset' => 'Default asset account', - 'account_role_sharedAsset' => 'Shared asset account', - 'account_role_savingAsset' => 'Savings account', - 'account_role_ccAsset' => 'Credit card', - 'account_role_cashWalletAsset' => 'Cash wallet', - 'budget_chart_click' => 'Please click on a budget name in the table above to see a chart.', - 'category_chart_click' => 'Please click on a category name in the table above to see a chart.', - 'in_out_accounts' => 'Earned and spent per combination', - 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', - 'in_out_per_category' => 'Earned and spent per category', - 'out_per_budget' => 'Spent per budget', - 'select_expense_revenue' => 'Select expense/revenue account', - 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', - 'sum_in_default_currency' => 'The sum will always be in your default currency.', - 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', + 'report_default' => 'Default financial report between :start and :end', + 'report_audit' => 'Transaction history overview between :start and :end', + 'report_category' => 'Category report between :start and :end', + 'report_double' => 'Expense/revenue account report between :start and :end', + 'report_budget' => 'Budget report between :start and :end', + 'report_tag' => 'Tag report between :start and :end', + 'quick_link_reports' => 'Quick links', + 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', + 'quick_link_default_report' => 'Default financial report', + 'quick_link_audit_report' => 'Transaction history overview', + 'report_this_month_quick' => 'Current month, all accounts', + 'report_last_month_quick' => 'Last month, all accounts', + 'report_this_year_quick' => 'Current year, all accounts', + 'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts', + 'report_all_time_quick' => 'All-time, all accounts', + 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', + 'incomeVsExpenses' => 'Income vs. expenses', + 'accountBalances' => 'Account balances', + 'balanceStart' => 'Balance at start of period', + 'balanceEnd' => 'Balance at end of period', + 'splitByAccount' => 'Split by account', + 'coveredWithTags' => 'Covered with tags', + 'leftInBudget' => 'Left in budget', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Sum of sums', + 'noCategory' => '(no category)', + 'notCharged' => 'Not charged (yet)', + 'inactive' => 'Inactive', + 'active' => 'Active', + 'difference' => 'Difference', + 'money_flowing_in' => 'In', + 'money_flowing_out' => 'Out', + 'topX' => 'top :number', + 'show_full_list' => 'Show entire list', + 'show_only_top' => 'Show only top :number', + 'report_type' => 'Report type', + 'report_type_default' => 'Default financial report', + 'report_type_audit' => 'Transaction history overview (audit)', + 'report_type_category' => 'Category report', + 'report_type_budget' => 'Budget report', + 'report_type_tag' => 'Tag report', + 'report_type_double' => 'Expense/revenue account report', + 'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.', + 'report_included_accounts' => 'Included accounts', + 'report_date_range' => 'Date range', + 'report_preset_ranges' => 'Pre-set ranges', + 'shared' => 'Shared', + 'fiscal_year' => 'Fiscal year', + 'income_entry' => 'Income from account ":name" between :start and :end', + 'expense_entry' => 'Expenses to account ":name" between :start and :end', + 'category_entry' => 'Expenses and income in category ":name" between :start and :end', + 'budget_spent_amount' => 'Expenses in budget ":budget" between :start and :end', + 'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end', + 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', + 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', + 'reports_extra_options' => 'Extra options', + 'report_has_no_extra_options' => 'This report has no extra options', + 'reports_submit' => 'View report', + 'end_after_start_date' => 'End date of report must be after start date.', + 'select_category' => 'Select category(ies)', + 'select_budget' => 'Select budget(s).', + 'select_tag' => 'Select tag(s).', + 'income_per_category' => 'Income per category', + 'expense_per_category' => 'Expense per category', + 'expense_per_budget' => 'Expense per budget', + 'income_per_account' => 'Income per account', + 'expense_per_account' => 'Expense per account', + 'expense_per_tag' => 'Expense per tag', + 'income_per_tag' => 'Income per tag', + 'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)', + 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', + 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', + 'include_income_not_in_category' => 'Included income not in the selected category(ies)', + 'include_income_not_in_account' => 'Included income not in the selected account(s)', + 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', + 'include_expense_not_in_tags' => 'Included expenses not in the selected tag(s)', + 'everything_else' => 'Everything else', + 'income_and_expenses' => 'Income and expenses', + 'spent_average' => 'Spent (average)', + 'income_average' => 'Income (average)', + 'transaction_count' => 'Transaction count', + 'average_spending_per_account' => 'Average spending per account', + 'average_income_per_account' => 'Average income per account', + 'total' => 'Total', + 'description' => 'Description', + 'sum_of_period' => 'Sum of period', + 'average_in_period' => 'Average in period', + 'account_role_defaultAsset' => 'Default asset account', + 'account_role_sharedAsset' => 'Shared asset account', + 'account_role_savingAsset' => 'Savings account', + 'account_role_ccAsset' => 'Credit card', + 'account_role_cashWalletAsset' => 'Cash wallet', + 'budget_chart_click' => 'Please click on a budget name in the table above to see a chart.', + 'category_chart_click' => 'Please click on a category name in the table above to see a chart.', + 'in_out_accounts' => 'Earned and spent per combination', + 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', + 'in_out_per_category' => 'Earned and spent per category', + 'out_per_budget' => 'Spent per budget', + 'select_expense_revenue' => 'Select expense/revenue account', + 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', + 'sum_in_default_currency' => 'The sum will always be in your default currency.', + 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Chart', - 'month' => 'Month', - 'budget' => 'Budget', - 'spent' => 'Spent', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => 'Spent in budget', - 'left_to_spend' => 'Left to spend', - 'earned' => 'Earned', - 'overspent' => 'Overspent', - 'left' => 'Left', - 'max-amount' => 'Maximum amount', - 'min-amount' => 'Minimum amount', - 'journal-amount' => 'Current bill entry', - 'name' => 'Name', - 'date' => 'Date', - 'date_and_time' => 'Date and time', - 'time' => 'Time', - 'paid' => 'Paid', - 'unpaid' => 'Unpaid', - 'day' => 'Day', - 'budgeted' => 'Budgeted', - 'period' => 'Period', - 'balance' => 'Balance', - 'in_out_period' => 'In + out this period', - 'sum' => 'Sum', - 'summary' => 'Summary', - 'average' => 'Average', - 'balanceFor' => 'Balance for :name', - 'no_tags' => '(no tags)', + 'chart' => 'Chart', + 'month' => 'Month', + 'budget' => 'Budget', + 'spent' => 'Spent', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => 'Spent in budget', + 'left_to_spend' => 'Left to spend', + 'earned' => 'Earned', + 'overspent' => 'Overspent', + 'left' => 'Left', + 'max-amount' => 'Maximum amount', + 'min-amount' => 'Minimum amount', + 'journal-amount' => 'Current bill entry', + 'name' => 'Name', + 'date' => 'Date', + 'date_and_time' => 'Date and time', + 'time' => 'Time', + 'paid' => 'Paid', + 'unpaid' => 'Unpaid', + 'day' => 'Day', + 'budgeted' => 'Budgeted', + 'period' => 'Period', + 'balance' => 'Balance', + 'in_out_period' => 'In + out this period', + 'sum' => 'Sum', + 'summary' => 'Summary', + 'average' => 'Average', + 'balanceFor' => 'Balance for :name', + 'no_tags' => '(no tags)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Add money to piggy bank ":name"', - 'piggy_bank' => 'Piggy bank', - 'new_piggy_bank' => 'New piggy bank', - 'store_piggy_bank' => 'Store new piggy bank', - 'stored_piggy_bank' => 'Store new piggy bank ":name"', - 'account_status' => 'Account status', - 'left_for_piggy_banks' => 'Left for piggy banks', - 'sum_of_piggy_banks' => 'Sum of piggy banks', - 'saved_so_far' => 'Saved so far', - 'left_to_save' => 'Left to save', - 'suggested_amount' => 'Suggested monthly amount to save', - 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', - 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', - 'add' => 'Add', - 'no_money_for_piggy' => 'You have no money to put in this piggy bank.', - 'suggested_savings_per_month' => 'Suggested per month', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Add money to piggy bank ":name"', + 'piggy_bank' => 'Piggy bank', + 'new_piggy_bank' => 'New piggy bank', + 'store_piggy_bank' => 'Store new piggy bank', + 'stored_piggy_bank' => 'Store new piggy bank ":name"', + 'account_status' => 'Account status', + 'left_for_piggy_banks' => 'Left for piggy banks', + 'sum_of_piggy_banks' => 'Sum of piggy banks', + 'saved_so_far' => 'Saved so far', + 'left_to_save' => 'Left to save', + 'suggested_amount' => 'Suggested monthly amount to save', + 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', + 'remove_money_from_piggy_title' => 'Remove money from piggy bank ":name"', + 'add' => 'Add', + 'no_money_for_piggy' => 'You have no money to put in this piggy bank.', + 'suggested_savings_per_month' => 'Suggested per month', - 'remove' => 'Remove', - 'max_amount_add' => 'The maximum amount you can add is', - 'max_amount_remove' => 'The maximum amount you can remove is', - 'update_piggy_button' => 'Update piggy bank', - 'update_piggy_title' => 'Update piggy bank ":name"', - 'updated_piggy_bank' => 'Updated piggy bank ":name"', - 'details' => 'Details', - 'events' => 'Events', - 'target_amount' => 'Target amount', - 'start_date' => 'Start date', - 'no_start_date' => 'No start date', - 'target_date' => 'Target date', - 'no_target_date' => 'No target date', - 'table' => 'Table', - 'delete_piggy_bank' => 'Delete piggy bank ":name"', - 'cannot_add_amount_piggy' => 'Could not add :amount to ":name".', - 'cannot_remove_from_piggy' => 'Could not remove :amount from ":name".', - 'deleted_piggy_bank' => 'Deleted piggy bank ":name"', - 'added_amount_to_piggy' => 'Added :amount to ":name"', - 'removed_amount_from_piggy' => 'Removed :amount from ":name"', - 'piggy_events' => 'Related piggy banks', + 'remove' => 'Remove', + 'max_amount_add' => 'The maximum amount you can add is', + 'max_amount_remove' => 'The maximum amount you can remove is', + 'update_piggy_button' => 'Update piggy bank', + 'update_piggy_title' => 'Update piggy bank ":name"', + 'updated_piggy_bank' => 'Updated piggy bank ":name"', + 'details' => 'Details', + 'events' => 'Events', + 'target_amount' => 'Target amount', + 'start_date' => 'Start date', + 'no_start_date' => 'No start date', + 'target_date' => 'Target date', + 'no_target_date' => 'No target date', + 'table' => 'Table', + 'delete_piggy_bank' => 'Delete piggy bank ":name"', + 'cannot_add_amount_piggy' => 'Could not add :amount to ":name".', + 'cannot_remove_from_piggy' => 'Could not remove :amount from ":name".', + 'deleted_piggy_bank' => 'Deleted piggy bank ":name"', + 'added_amount_to_piggy' => 'Added :amount to ":name"', + 'removed_amount_from_piggy' => 'Removed :amount from ":name"', + 'piggy_events' => 'Related piggy banks', // tags - 'delete_tag' => 'Delete tag ":tag"', - 'deleted_tag' => 'Deleted tag ":tag"', - 'new_tag' => 'Make new tag', - 'edit_tag' => 'Edit tag ":tag"', - 'updated_tag' => 'Updated tag ":tag"', - 'created_tag' => 'Tag ":tag" has been created!', + 'delete_tag' => 'Delete tag ":tag"', + 'deleted_tag' => 'Deleted tag ":tag"', + 'new_tag' => 'Make new tag', + 'edit_tag' => 'Edit tag ":tag"', + 'updated_tag' => 'Updated tag ":tag"', + 'created_tag' => 'Tag ":tag" has been created!', - 'transaction_journal_information' => 'Transaction information', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta information', - 'transaction_journal_more' => 'More information', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Stored under ":journal"', - 'total_amount' => 'Total amount', - 'number_of_decimals' => 'Number of decimals', + 'transaction_journal_information' => 'Transaction information', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Meta information', + 'transaction_journal_more' => 'More information', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => 'Stored under ":journal"', + 'total_amount' => 'Total amount', + 'number_of_decimals' => 'Number of decimals', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Administration', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'User administration', - 'list_all_users' => 'All users', - 'all_users' => 'All users', - 'instance_configuration' => 'Configuration', - 'firefly_instance_configuration' => 'Configuration options for Firefly III', - 'setting_single_user_mode' => 'Single user mode', - 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', - 'store_configuration' => 'Store configuration', - 'single_user_administration' => 'User administration for :email', - 'edit_user' => 'Edit user :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'User data', - 'user_information' => 'User information', - 'total_size' => 'total size', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'The configuration has been updated', - 'setting_is_demo_site' => 'Demo site', - 'setting_is_demo_site_explain' => 'If you check this box, this installation will behave as if it is the demo site, which can have weird side effects.', - 'block_code_bounced' => 'Email message(s) bounced', - 'block_code_expired' => 'Demo account expired', - 'no_block_code' => 'No reason for block or user not blocked', - 'block_code_email_changed' => 'User has not yet confirmed new email address', - 'admin_update_email' => 'Contrary to the profile page, the user will NOT be notified their email address has changed!', - 'update_user' => 'Update user', - 'updated_user' => 'User data has been changed.', - 'delete_user' => 'Delete user :email', - 'user_deleted' => 'The user has been deleted', - 'send_test_email' => 'Send test email message', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Send message', - 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', - 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', - 'admin_maintanance_title' => 'Maintenance', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Clear cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Description of the split transaction', - 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'you_create_transfer' => 'You\'re creating a transfer.', - 'you_create_withdrawal' => 'You\'re creating a withdrawal.', - 'you_create_deposit' => 'You\'re creating a deposit.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Administration', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'User administration', + 'list_all_users' => 'All users', + 'all_users' => 'All users', + 'instance_configuration' => 'Configuration', + 'firefly_instance_configuration' => 'Configuration options for Firefly III', + 'setting_single_user_mode' => 'Single user mode', + 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', + 'store_configuration' => 'Store configuration', + 'single_user_administration' => 'User administration for :email', + 'edit_user' => 'Edit user :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'User data', + 'user_information' => 'User information', + 'total_size' => 'total size', + 'budget_or_budgets' => ':count budget|:count budgets', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'The configuration has been updated', + 'setting_is_demo_site' => 'Demo site', + 'setting_is_demo_site_explain' => 'If you check this box, this installation will behave as if it is the demo site, which can have weird side effects.', + 'block_code_bounced' => 'Email message(s) bounced', + 'block_code_expired' => 'Demo account expired', + 'no_block_code' => 'No reason for block or user not blocked', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'User has not yet confirmed new email address', + 'admin_update_email' => 'Contrary to the profile page, the user will NOT be notified their email address has changed!', + 'update_user' => 'Update user', + 'updated_user' => 'User data has been changed.', + 'delete_user' => 'Delete user :email', + 'user_deleted' => 'The user has been deleted', + 'send_test_email' => 'Send test email message', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Send message', + 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', + 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', + 'admin_maintanance_title' => 'Maintenance', + 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', + 'admin_maintenance_clear_cache' => 'Clear cache', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Description of the split transaction', + 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'you_create_transfer' => 'You\'re creating a transfer.', + 'you_create_withdrawal' => 'You\'re creating a withdrawal.', + 'you_create_deposit' => 'You\'re creating a deposit.', // links - 'journal_link_configuration' => 'Transaction links configuration', - 'create_new_link_type' => 'Create new link type', - 'store_new_link_type' => 'Store new link type', - 'update_link_type' => 'Update link type', - 'edit_link_type' => 'Edit link type ":name"', - 'updated_link_type' => 'Updated link type ":name"', - 'delete_link_type' => 'Delete link type ":name"', - 'deleted_link_type' => 'Deleted link type ":name"', - 'stored_new_link_type' => 'Store new link type ":name"', - 'cannot_edit_link_type' => 'Cannot edit link type ":name"', - 'link_type_help_name' => 'Ie. "Duplicates"', - 'link_type_help_inward' => 'Ie. "duplicates"', - 'link_type_help_outward' => 'Ie. "is duplicated by"', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(do not save connection)', - 'link_transaction' => 'Link transaction', - 'link_to_other_transaction' => 'Link this transaction to another transaction', - 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', - 'this_transaction' => 'This transaction', - 'transaction' => 'Transaction', - 'comments' => 'Comments', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Cannot link these transactions', - 'selected_transaction' => 'Selected transaction', - 'journals_linked' => 'Transactions are linked.', - 'journals_error_linked' => 'These transactions are already linked.', - 'journals_link_to_self' => 'You cannot link a transaction to itself', - 'journal_links' => 'Transaction links', - 'this_withdrawal' => 'This withdrawal', - 'this_deposit' => 'This deposit', - 'this_transfer' => 'This transfer', - 'overview_for_link' => 'Overview for link type ":name"', - 'source_transaction' => 'Source transaction', - 'link_description' => 'Link description', - 'destination_transaction' => 'Destination transaction', - 'delete_journal_link' => 'Delete the link between :source and :destination', - 'deleted_link' => 'Deleted link', + 'journal_link_configuration' => 'Transaction links configuration', + 'create_new_link_type' => 'Create new link type', + 'store_new_link_type' => 'Store new link type', + 'update_link_type' => 'Update link type', + 'edit_link_type' => 'Edit link type ":name"', + 'updated_link_type' => 'Updated link type ":name"', + 'delete_link_type' => 'Delete link type ":name"', + 'deleted_link_type' => 'Deleted link type ":name"', + 'stored_new_link_type' => 'Store new link type ":name"', + 'cannot_edit_link_type' => 'Cannot edit link type ":name"', + 'link_type_help_name' => 'Ie. "Duplicates"', + 'link_type_help_inward' => 'Ie. "duplicates"', + 'link_type_help_outward' => 'Ie. "is duplicated by"', + 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', + 'do_not_save_connection' => '(do not save connection)', + 'link_transaction' => 'Link transaction', + 'link_to_other_transaction' => 'Link this transaction to another transaction', + 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', + 'this_transaction' => 'This transaction', + 'transaction' => 'Transaction', + 'comments' => 'Comments', + 'link_notes' => 'Any notes you wish to store with the link.', + 'invalid_link_selection' => 'Cannot link these transactions', + 'selected_transaction' => 'Selected transaction', + 'journals_linked' => 'Transactions are linked.', + 'journals_error_linked' => 'These transactions are already linked.', + 'journals_link_to_self' => 'You cannot link a transaction to itself', + 'journal_links' => 'Transaction links', + 'this_withdrawal' => 'This withdrawal', + 'this_deposit' => 'This deposit', + 'this_transfer' => 'This transfer', + 'overview_for_link' => 'Overview for link type ":name"', + 'source_transaction' => 'Source transaction', + 'link_description' => 'Link description', + 'destination_transaction' => 'Destination transaction', + 'delete_journal_link' => 'Delete the link between :source and :destination', + 'deleted_link' => 'Deleted link', // link translations: - 'Paid_name' => 'Paid', - 'Refund_name' => 'Refund', - 'Reimbursement_name' => 'Reimbursement', - 'Related_name' => 'Related', - 'relates to_inward' => 'relates to', - 'is (partially) refunded by_inward' => 'is (partially) refunded by', - 'is (partially) paid for by_inward' => 'is (partially) paid for by', - 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', - 'inward_transaction' => 'Inward transaction', - 'outward_transaction' => 'Outward transaction', - 'relates to_outward' => 'relates to', - '(partially) refunds_outward' => '(partially) refunds', - '(partially) pays for_outward' => '(partially) pays for', - '(partially) reimburses_outward' => '(partially) reimburses', - 'is (partially) refunded by' => 'is (partially) refunded by', - 'is (partially) paid for by' => 'is (partially) paid for by', - 'is (partially) reimbursed by' => 'is (partially) reimbursed by', - 'relates to' => 'relates to', - '(partially) refunds' => '(partially) refunds', - '(partially) pays for' => '(partially) pays for', - '(partially) reimburses' => '(partially) reimburses', + 'Paid_name' => 'Paid', + 'Refund_name' => 'Refund', + 'Reimbursement_name' => 'Reimbursement', + 'Related_name' => 'Related', + 'relates to_inward' => 'relates to', + 'is (partially) refunded by_inward' => 'is (partially) refunded by', + 'is (partially) paid for by_inward' => 'is (partially) paid for by', + 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', + 'inward_transaction' => 'Inward transaction', + 'outward_transaction' => 'Outward transaction', + 'relates to_outward' => 'relates to', + '(partially) refunds_outward' => '(partially) refunds', + '(partially) pays for_outward' => '(partially) pays for', + '(partially) reimburses_outward' => '(partially) reimburses', + 'is (partially) refunded by' => 'is (partially) refunded by', + 'is (partially) paid for by' => 'is (partially) paid for by', + 'is (partially) reimbursed by' => 'is (partially) reimbursed by', + 'relates to' => 'relates to', + '(partially) refunds' => '(partially) refunds', + '(partially) pays for' => '(partially) pays for', + '(partially) reimburses' => '(partially) reimburses', // split a transaction: - 'splits' => 'Splits', - 'add_another_split' => 'Add another split', - 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', - 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', - 'breadcrumb_convert_group' => 'Convert transaction', - 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', - 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', - 'create_another' => 'After storing, return here to create another one.', - 'after_update_create_another' => 'After updating, return here to continue editing.', - 'store_as_new' => 'Store as a new transaction instead of updating.', - 'reset_after' => 'Reset form after submission', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Splits', + 'add_another_split' => 'Add another split', + 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', + 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', + 'breadcrumb_convert_group' => 'Convert transaction', + 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', + 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', + 'create_another' => 'After storing, return here to create another one.', + 'after_update_create_another' => 'After updating, return here to continue editing.', + 'store_as_new' => 'Store as a new transaction instead of updating.', + 'reset_after' => 'Reset form after submission', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(ungrouped)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ungrouped)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Let\'s create an asset account!', - 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.', - 'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:', - 'no_accounts_create_asset' => 'Create an asset account', - 'no_accounts_title_expense' => 'Let\'s create an expense account!', - 'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.', - 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_expense' => 'Create an expense account', - 'no_accounts_title_revenue' => 'Let\'s create a revenue account!', - 'no_accounts_intro_revenue' => 'You have no revenue accounts yet. Revenue accounts are the places where you receive money from, such as your employer.', - 'no_accounts_imperative_revenue' => 'Revenue accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_revenue' => 'Create a revenue account', - 'no_accounts_title_liabilities' => 'Let\'s create a liability!', - 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', - 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', - 'no_accounts_create_liabilities' => 'Create a liability', - 'no_budgets_title_default' => 'Let\'s create a budget', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Budgets are the basic tools of financial management. Let\'s create one now:', - 'no_budgets_create_default' => 'Create a budget', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Let\'s create a category!', - 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', - 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_categories_create_default' => 'Create a category', - 'no_tags_title_default' => 'Let\'s create a tag!', - 'no_tags_intro_default' => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.', - 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_tags_create_default' => 'Create a tag', - 'no_transactions_title_withdrawal' => 'Let\'s create an expense!', - 'no_transactions_intro_withdrawal' => 'You have no expenses yet. You should create expenses to start managing your finances.', - 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', - 'no_transactions_create_withdrawal' => 'Create an expense', - 'no_transactions_title_deposit' => 'Let\'s create some income!', - 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', - 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', - 'no_transactions_create_deposit' => 'Create a deposit', - 'no_transactions_title_transfers' => 'Let\'s create a transfer!', - 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', - 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', - 'no_transactions_create_transfers' => 'Create a transfer', - 'no_piggies_title_default' => 'Let\'s create a piggy bank!', - 'no_piggies_intro_default' => 'You have no piggy banks yet. You can create piggy banks to divide your savings and keep track of what you\'re saving up for.', - 'no_piggies_imperative_default' => 'Do you have things you\'re saving money for? Create a piggy bank and keep track:', - 'no_piggies_create_default' => 'Create a new piggy bank', - 'no_bills_title_default' => 'Let\'s create a bill!', - 'no_bills_intro_default' => 'You have no bills yet. You can create bills to keep track of regular expenses, like your rent or insurance.', - 'no_bills_imperative_default' => 'Do you have such regular bills? Create a bill and keep track of your payments:', - 'no_bills_create_default' => 'Create a bill', + 'no_accounts_title_asset' => 'Let\'s create an asset account!', + 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.', + 'no_accounts_imperative_asset' => 'To start using Firefly III you must create at least one asset account. Let\'s do so now:', + 'no_accounts_create_asset' => 'Create an asset account', + 'no_accounts_title_expense' => 'Let\'s create an expense account!', + 'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.', + 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_expense' => 'Create an expense account', + 'no_accounts_title_revenue' => 'Let\'s create a revenue account!', + 'no_accounts_intro_revenue' => 'You have no revenue accounts yet. Revenue accounts are the places where you receive money from, such as your employer.', + 'no_accounts_imperative_revenue' => 'Revenue accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_revenue' => 'Create a revenue account', + 'no_accounts_title_liabilities' => 'Let\'s create a liability!', + 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', + 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', + 'no_accounts_create_liabilities' => 'Create a liability', + 'no_budgets_title_default' => 'Let\'s create a budget', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Budgets are the basic tools of financial management. Let\'s create one now:', + 'no_budgets_create_default' => 'Create a budget', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Let\'s create a category!', + 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', + 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_categories_create_default' => 'Create a category', + 'no_tags_title_default' => 'Let\'s create a tag!', + 'no_tags_intro_default' => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.', + 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_tags_create_default' => 'Create a tag', + 'no_transactions_title_withdrawal' => 'Let\'s create an expense!', + 'no_transactions_intro_withdrawal' => 'You have no expenses yet. You should create expenses to start managing your finances.', + 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', + 'no_transactions_create_withdrawal' => 'Create an expense', + 'no_transactions_title_deposit' => 'Let\'s create some income!', + 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', + 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', + 'no_transactions_create_deposit' => 'Create a deposit', + 'no_transactions_title_transfers' => 'Let\'s create a transfer!', + 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', + 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', + 'no_transactions_create_transfers' => 'Create a transfer', + 'no_piggies_title_default' => 'Let\'s create a piggy bank!', + 'no_piggies_intro_default' => 'You have no piggy banks yet. You can create piggy banks to divide your savings and keep track of what you\'re saving up for.', + 'no_piggies_imperative_default' => 'Do you have things you\'re saving money for? Create a piggy bank and keep track:', + 'no_piggies_create_default' => 'Create a new piggy bank', + 'no_bills_title_default' => 'Let\'s create a bill!', + 'no_bills_intro_default' => 'You have no bills yet. You can create bills to keep track of regular expenses, like your rent or insurance.', + 'no_bills_imperative_default' => 'Do you have such regular bills? Create a bill and keep track of your payments:', + 'no_bills_create_default' => 'Create a bill', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Recurring transactions', - 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', - 'recurring_calendar_view' => 'Calendar', - 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', - 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', - 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', - 'no_recurring_create_default' => 'Create a recurring transaction', - 'make_new_recurring' => 'Create a recurring transaction', - 'recurring_daily' => 'Every day', - 'recurring_weekly' => 'Every week on :weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => 'Every year on :date', - 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', - 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', - 'created_transactions' => 'Related transactions', - 'expected_withdrawals' => 'Expected withdrawals', - 'expected_deposits' => 'Expected deposits', - 'expected_transfers' => 'Expected transfers', - 'created_withdrawals' => 'Created withdrawals', - 'created_deposits' => 'Created deposits', - 'created_transfers' => 'Created transfers', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', - 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Recurring transactions', + 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', + 'recurring_calendar_view' => 'Calendar', + 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', + 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', + 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', + 'no_recurring_create_default' => 'Create a recurring transaction', + 'make_new_recurring' => 'Create a recurring transaction', + 'recurring_daily' => 'Every day', + 'recurring_weekly' => 'Every week on :weekday', + 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', + 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => 'Every year on :date', + 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', + 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', + 'created_transactions' => 'Related transactions', + 'expected_withdrawals' => 'Expected withdrawals', + 'expected_deposits' => 'Expected deposits', + 'expected_transfers' => 'Expected transfers', + 'created_withdrawals' => 'Created withdrawals', + 'created_deposits' => 'Created deposits', + 'created_transfers' => 'Created transfers', + 'recurring_info' => 'Recurring transaction :count / :total', + 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', + 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'create_new_recurrence' => 'Create new recurring transaction', - 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', - 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', - 'no_currency' => '(no currency)', - 'mandatory_for_recurring' => 'Mandatory recurrence information', - 'mandatory_for_transaction' => 'Mandatory transaction information', - 'optional_for_recurring' => 'Optional recurrence information', - 'optional_for_transaction' => 'Optional transaction information', - 'change_date_other_options' => 'Change the "first date" to see more options.', - 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', - 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', - 'repeat_forever' => 'Repeat forever', - 'repeat_until_date' => 'Repeat until date', - 'repeat_times' => 'Repeat a number of times', - 'recurring_skips_one' => 'Every other', - 'recurring_skips_more' => 'Skips :count occurrences', - 'store_new_recurrence' => 'Store recurring transaction', - 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', - 'edit_recurrence' => 'Edit recurring transaction ":title"', - 'recurring_repeats_until' => 'Repeats until :date', - 'recurring_repeats_forever' => 'Repeats forever', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Update recurring transaction', - 'updated_recurrence' => 'Updated recurring transaction ":title"', - 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', - 'delete_recurring' => 'Delete recurring transaction ":title"', - 'new_recurring_transaction' => 'New recurring transaction', - 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', - 'do_nothing' => 'Just create the transaction', - 'skip_transaction' => 'Skip the occurrence', - 'jump_to_friday' => 'Create the transaction on the previous Friday instead', - 'jump_to_monday' => 'Create the transaction on the next Monday instead', - 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', - 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', - 'except_weekends' => 'Except weekends', - 'recurrence_deleted' => 'Recurring transaction ":title" deleted', + 'create_new_recurrence' => 'Create new recurring transaction', + 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', + 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', + 'no_currency' => '(no currency)', + 'mandatory_for_recurring' => 'Mandatory recurrence information', + 'mandatory_for_transaction' => 'Mandatory transaction information', + 'optional_for_recurring' => 'Optional recurrence information', + 'optional_for_transaction' => 'Optional transaction information', + 'change_date_other_options' => 'Change the "first date" to see more options.', + 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', + 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', + 'repeat_forever' => 'Repeat forever', + 'repeat_until_date' => 'Repeat until date', + 'repeat_times' => 'Repeat a number of times', + 'recurring_skips_one' => 'Every other', + 'recurring_skips_more' => 'Skips :count occurrences', + 'store_new_recurrence' => 'Store recurring transaction', + 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', + 'edit_recurrence' => 'Edit recurring transaction ":title"', + 'recurring_repeats_until' => 'Repeats until :date', + 'recurring_repeats_forever' => 'Repeats forever', + 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', + 'update_recurrence' => 'Update recurring transaction', + 'updated_recurrence' => 'Updated recurring transaction ":title"', + 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', + 'delete_recurring' => 'Delete recurring transaction ":title"', + 'new_recurring_transaction' => 'New recurring transaction', + 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', + 'do_nothing' => 'Just create the transaction', + 'skip_transaction' => 'Skip the occurrence', + 'jump_to_friday' => 'Create the transaction on the previous Friday instead', + 'jump_to_monday' => 'Create the transaction on the next Monday instead', + 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', + 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', + 'except_weekends' => 'Except weekends', + 'recurrence_deleted' => 'Recurring transaction ":title" deleted', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balance (:currency)', - 'box_spent_in_currency' => 'Spent (:currency)', - 'box_earned_in_currency' => 'Earned (:currency)', - 'box_budgeted_in_currency' => 'Budgeted (:currency)', - 'box_bill_paid_in_currency' => 'Bills paid (:currency)', - 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', - 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', - 'box_net_worth_in_currency' => 'Net worth (:currency)', - 'box_spend_per_day' => 'Left to spend per day: :amount', + 'box_balance_in_currency' => 'Balance (:currency)', + 'box_spent_in_currency' => 'Spent (:currency)', + 'box_earned_in_currency' => 'Earned (:currency)', + 'box_budgeted_in_currency' => 'Budgeted (:currency)', + 'box_bill_paid_in_currency' => 'Bills paid (:currency)', + 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', + 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', + 'box_net_worth_in_currency' => 'Net worth (:currency)', + 'box_spend_per_day' => 'Left to spend per day: :amount', // debug page - 'debug_page' => 'Debug page', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Debug page', + 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', + 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', + 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', // object groups - 'object_groups_menu_bar' => 'Groups', - 'object_groups_page_title' => 'Groups', - 'object_groups_breadcrumb' => 'Groups', - 'object_groups_index' => 'Overview', - 'object_groups' => 'Groups', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Title', - 'edit_object_group' => 'Edit group ":title"', - 'delete_object_group' => 'Delete group ":title"', - 'update_object_group' => 'Update group', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Group', + 'object_groups_menu_bar' => 'Groups', + 'object_groups_page_title' => 'Groups', + 'object_groups_breadcrumb' => 'Groups', + 'object_groups_index' => 'Overview', + 'object_groups' => 'Groups', + 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', + 'object_group_title' => 'Title', + 'edit_object_group' => 'Edit group ":title"', + 'delete_object_group' => 'Delete group ":title"', + 'update_object_group' => 'Update group', + 'updated_object_group' => 'Successfully updated group ":title"', + 'deleted_object_group' => 'Successfully deleted group ":title"', + 'object_group' => 'Group', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/th_TH/form.php b/resources/lang/th_TH/form.php index 7c00e1e48b..8cccd2522d 100644 --- a/resources/lang/th_TH/form.php +++ b/resources/lang/th_TH/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'ชื่อธนาคาร', - 'bank_balance' => 'Balance', - 'savings_balance' => 'Savings balance', - 'credit_card_limit' => 'Credit card limit', - 'automatch' => 'Match automatically', - 'skip' => 'ข้าม', - 'enabled' => 'เปิดใช้งาน', - 'name' => 'ชื่อ', - 'active' => 'ใช้งานอยู่', - 'amount_min' => 'จำนวนขั้นต่ำ', - 'amount_max' => 'จำนวนสูงสุด', - 'match' => 'Matches on', - 'strict' => 'Strict mode', - 'repeat_freq' => 'Repeats', - 'object_group' => 'กลุ่ม', - 'location' => 'สถานที่', - 'update_channel' => 'Update channel', - 'currency_id' => 'Currency', - 'transaction_currency_id' => 'Currency', - 'auto_budget_currency_id' => 'Currency', - 'external_ip' => 'Your server\'s external IP', - 'attachments' => 'Attachments', - 'BIC' => 'BIC', - 'verify_password' => 'Verify password security', - 'source_account' => 'บัญชีต้นทาง', - 'destination_account' => 'บัญชีปลายทาง', - 'asset_destination_account' => 'บัญชีปลายทาง', - 'include_net_worth' => 'Include in net worth', - 'asset_source_account' => 'Source account', - 'journal_description' => 'รายละเอียด', - 'note' => 'หมายเหตุ', - 'currency' => 'Currency', - 'account_id' => 'Asset account', - 'budget_id' => 'งบประมาณ', - 'bill_id' => 'Bill', - 'opening_balance' => 'Opening balance', - 'tagMode' => 'Tag mode', - 'virtual_balance' => 'Virtual balance', + 'bank_name' => 'ชื่อธนาคาร', + 'bank_balance' => 'Balance', + 'savings_balance' => 'Savings balance', + 'credit_card_limit' => 'Credit card limit', + 'automatch' => 'Match automatically', + 'skip' => 'ข้าม', + 'enabled' => 'เปิดใช้งาน', + 'name' => 'ชื่อ', + 'active' => 'ใช้งานอยู่', + 'amount_min' => 'จำนวนขั้นต่ำ', + 'amount_max' => 'จำนวนสูงสุด', + 'match' => 'Matches on', + 'strict' => 'Strict mode', + 'repeat_freq' => 'Repeats', + 'object_group' => 'กลุ่ม', + 'location' => 'สถานที่', + 'update_channel' => 'Update channel', + 'currency_id' => 'Currency', + 'transaction_currency_id' => 'Currency', + 'auto_budget_currency_id' => 'Currency', + 'external_ip' => 'Your server\'s external IP', + 'attachments' => 'Attachments', + 'BIC' => 'BIC', + 'verify_password' => 'Verify password security', + 'source_account' => 'บัญชีต้นทาง', + 'destination_account' => 'บัญชีปลายทาง', + 'asset_destination_account' => 'บัญชีปลายทาง', + 'include_net_worth' => 'Include in net worth', + 'asset_source_account' => 'Source account', + 'journal_description' => 'รายละเอียด', + 'note' => 'หมายเหตุ', + 'currency' => 'Currency', + 'account_id' => 'Asset account', + 'budget_id' => 'งบประมาณ', + 'bill_id' => 'Bill', + 'opening_balance' => 'Opening balance', + 'tagMode' => 'Tag mode', + 'virtual_balance' => 'Virtual balance', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Target amount', 'account_role' => 'Account role', 'opening_balance_date' => 'Opening balance date', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Are you sure you want to delete the transaction described ":description"?', 'mass_journal_are_you_sure' => 'Are you sure you want to delete these transactions?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Are you sure you want to delete the tag ":tag"?', 'journal_link_areYouSure' => 'Are you sure you want to delete the link between :source and :destination?', 'linkType_areYouSure' => 'Are you sure you want to delete the link type ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Song', - // admin 'domain' => 'Domain', 'single_user_mode' => 'Disable user registration', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS account', 'local_account' => 'Firefly III account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Date from', - 'to_date' => 'Date to', - 'due_date' => 'Due date', - 'payment_date' => 'Payment date', - 'invoice_date' => 'Invoice date', - 'internal_reference' => 'Internal reference', - 'inward' => 'Inward description', - 'outward' => 'Outward description', - 'rule_group_id' => 'Rule group', - 'transaction_description' => 'Transaction description', - 'first_date' => 'First date', - 'transaction_type' => 'Transaction type', - 'repeat_until' => 'Repeat until', - 'recurring_description' => 'Recurring transaction description', - 'repetition_type' => 'Type of repetition', - 'foreign_currency_id' => 'Foreign currency', - 'repetition_end' => 'Repetition ends', - 'repetitions' => 'Repetitions', - 'calendar' => 'Calendar', - 'weekend' => 'Weekend', - 'client_secret' => 'Client secret', - 'withdrawal_destination_id' => 'Destination account', - 'deposit_source_id' => 'Source account', - 'expected_on' => 'Expected on', - 'paid' => 'Paid', - 'auto_budget_type' => 'Auto-budget', - 'auto_budget_amount' => 'Auto-budget amount', - 'auto_budget_period' => 'Auto-budget period', - 'collected' => 'Collected', - 'submitted' => 'Submitted', - 'key' => 'Key', - 'value' => 'Content of record', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Date from', + 'to_date' => 'Date to', + 'due_date' => 'Due date', + 'payment_date' => 'Payment date', + 'invoice_date' => 'Invoice date', + 'internal_reference' => 'Internal reference', + 'inward' => 'Inward description', + 'outward' => 'Outward description', + 'rule_group_id' => 'Rule group', + 'transaction_description' => 'Transaction description', + 'first_date' => 'First date', + 'transaction_type' => 'Transaction type', + 'repeat_until' => 'Repeat until', + 'recurring_description' => 'Recurring transaction description', + 'repetition_type' => 'Type of repetition', + 'foreign_currency_id' => 'Foreign currency', + 'repetition_end' => 'Repetition ends', + 'repetitions' => 'Repetitions', + 'calendar' => 'Calendar', + 'weekend' => 'Weekend', + 'client_secret' => 'Client secret', + 'withdrawal_destination_id' => 'Destination account', + 'deposit_source_id' => 'Source account', + 'expected_on' => 'Expected on', + 'paid' => 'Paid', + 'auto_budget_type' => 'Auto-budget', + 'auto_budget_amount' => 'Auto-budget amount', + 'auto_budget_period' => 'Auto-budget period', + 'collected' => 'Collected', + 'submitted' => 'Submitted', + 'key' => 'Key', + 'value' => 'Content of record', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/th_TH/intro.php b/resources/lang/th_TH/intro.php index a10d3b7659..bc16497288 100644 --- a/resources/lang/th_TH/intro.php +++ b/resources/lang/th_TH/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Welcome to the index page of Firefly III. Please take the time to walk through this intro to get a feeling of how Firefly III works.', - 'index_accounts-chart' => 'This chart shows the current balance of your asset accounts. You can select the accounts visible here in your preferences.', - 'index_box_out_holder' => 'This little box and the boxes next to this one will give you a quick overview of your financial situation.', - 'index_help' => 'If you ever need help with a page or a form, press this button.', - 'index_outro' => 'Most pages of Firefly III will start with a little tour like this one. Please contact me when you have questions or comments. Enjoy!', - 'index_sidebar-toggle' => 'To create new transactions, accounts or other things, use the menu under this icon.', - 'index_cash_account' => 'These are the accounts created so far. You can use the cash account to track cash expenses but it\'s not mandatory of course.', + 'index_intro' => 'ยินดีต้อนรับสู่หน้าหลักของ Firefly III โปรดสละเวลาอ่านบทแนะนำนี้เพื่อทำความเข้าใจว่า Firefly III ทำงานอย่างไร', + 'index_accounts-chart' => 'กราฟนี้แสดงยอดคงเหลือปัจจุบันของบัญชีสินทรัพย์ของคุณ คุณสามารถเลือกบัญชีที่แสดงได้ที่นี่ในการตั้งค่าของคุณ', + 'index_box_out_holder' => 'กล่องเล็กๆ นี้และกล่องข้างๆ จะทำให้คุณเห็นภาพรวมโดยย่อเกี่ยวกับสถานการณ์ทางการเงินของคุณ', + 'index_help' => 'If you ever need help with a page or a form, press this button.', + 'index_outro' => 'Most pages of Firefly III will start with a little tour like this one. Please contact me when you have questions or comments. Enjoy!', + 'index_sidebar-toggle' => 'To create new transactions, accounts or other things, use the menu under this icon.', + 'index_cash_account' => 'These are the accounts created so far. You can use the cash account to track cash expenses but it\'s not mandatory of course.', // transactions - 'transactions_create_basic_info' => 'Enter the basic information of your transaction. Source, destination, date and description.', - 'transactions_create_amount_info' => 'Enter the amount of the transaction. If necessary the fields will auto-update for foreign amount info.', - 'transactions_create_optional_info' => 'All of these fields are optional. Adding meta-data here will make your transactions better organised.', - 'transactions_create_split' => 'If you want to split a transaction, add more splits with this button', + 'transactions_create_basic_info' => 'Enter the basic information of your transaction. Source, destination, date and description.', + 'transactions_create_amount_info' => 'Enter the amount of the transaction. If necessary the fields will auto-update for foreign amount info.', + 'transactions_create_optional_info' => 'All of these fields are optional. Adding meta-data here will make your transactions better organised.', + 'transactions_create_split' => 'If you want to split a transaction, add more splits with this button', // create account: - 'accounts_create_iban' => 'Give your accounts a valid IBAN. This could make a data import very easy in the future.', - 'accounts_create_asset_opening_balance' => 'Assets accounts may have an "opening balance", indicating the start of this account\'s history in Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III supports multiple currencies. Asset accounts have one main currency, which you must set here.', - 'accounts_create_asset_virtual' => 'It can sometimes help to give your account a virtual balance: an extra amount always added to or removed from the actual balance.', + 'accounts_create_iban' => 'Give your accounts a valid IBAN. This could make a data import very easy in the future.', + 'accounts_create_asset_opening_balance' => 'Assets accounts may have an "opening balance", indicating the start of this account\'s history in Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III supports multiple currencies. Asset accounts have one main currency, which you must set here.', + 'accounts_create_asset_virtual' => 'It can sometimes help to give your account a virtual balance: an extra amount always added to or removed from the actual balance.', // budgets index - 'budgets_index_intro' => 'Budgets are used to manage your finances and form one of the core functions of Firefly III.', - 'budgets_index_set_budget' => 'Set your total budget for every period so Firefly III can tell you if you have budgeted all available money.', - 'budgets_index_see_expenses_bar' => 'Spending money will slowly fill this bar.', - 'budgets_index_navigate_periods' => 'Navigate through periods to easily set budgets ahead of time.', - 'budgets_index_new_budget' => 'Create new budgets as you see fit.', - 'budgets_index_list_of_budgets' => 'Use this table to set the amounts for each budget and see how you are doing.', - 'budgets_index_outro' => 'To learn more about budgeting, checkout the help icon in the top right corner.', + 'budgets_index_intro' => 'Budgets are used to manage your finances and form one of the core functions of Firefly III.', + 'budgets_index_see_expenses_bar' => 'Spending money will slowly fill this bar.', + 'budgets_index_navigate_periods' => 'Navigate through periods to easily set budgets ahead of time.', + 'budgets_index_new_budget' => 'Create new budgets as you see fit.', + 'budgets_index_list_of_budgets' => 'Use this table to set the amounts for each budget and see how you are doing.', + 'budgets_index_outro' => 'To learn more about budgeting, checkout the help icon in the top right corner.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Use these reports to get detailed insights in your finances.', - 'reports_index_inputReportType' => 'Pick a report type. Check out the help pages to see what each report shows you.', - 'reports_index_inputAccountsSelect' => 'You can exclude or include asset accounts as you see fit.', - 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years.', - 'reports_index_extra-options-box' => 'Depending on the report you have selected, you can select extra filters and options here. Watch this box when you change report types.', + 'reports_index_intro' => 'Use these reports to get detailed insights in your finances.', + 'reports_index_inputReportType' => 'Pick a report type. Check out the help pages to see what each report shows you.', + 'reports_index_inputAccountsSelect' => 'You can exclude or include asset accounts as you see fit.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Depending on the report you have selected, you can select extra filters and options here. Watch this box when you change report types.', // reports (reports) - 'reports_report_default_intro' => 'This report will give you a quick and comprehensive overview of your finances. If you wish to see anything else, please don\'t hestitate to contact me!', - 'reports_report_audit_intro' => 'This report will give you detailed insights in your asset accounts.', - 'reports_report_audit_optionsBox' => 'Use these check boxes to show or hide the columns you are interested in.', + 'reports_report_default_intro' => 'This report will give you a quick and comprehensive overview of your finances. If you wish to see anything else, please don\'t hestitate to contact me!', + 'reports_report_audit_intro' => 'This report will give you detailed insights in your asset accounts.', + 'reports_report_audit_optionsBox' => 'Use these check boxes to show or hide the columns you are interested in.', - 'reports_report_category_intro' => 'This report will give you insight in one or multiple categories.', - 'reports_report_category_pieCharts' => 'These charts will give you insight in expenses and income per category or per account.', - 'reports_report_category_incomeAndExpensesChart' => 'This chart shows your expenses and income per category.', + 'reports_report_category_intro' => 'This report will give you insight in one or multiple categories.', + 'reports_report_category_pieCharts' => 'These charts will give you insight in expenses and income per category or per account.', + 'reports_report_category_incomeAndExpensesChart' => 'This chart shows your expenses and income per category.', - 'reports_report_tag_intro' => 'This report will give you insight in one or multiple tags.', - 'reports_report_tag_pieCharts' => 'These charts will give you insight in expenses and income per tag, account, category or budget.', - 'reports_report_tag_incomeAndExpensesChart' => 'This chart shows your expenses and income per tag.', + 'reports_report_tag_intro' => 'This report will give you insight in one or multiple tags.', + 'reports_report_tag_pieCharts' => 'These charts will give you insight in expenses and income per tag, account, category or budget.', + 'reports_report_tag_incomeAndExpensesChart' => 'This chart shows your expenses and income per tag.', 'reports_report_budget_intro' => 'This report will give you insight in one or multiple budgets.', 'reports_report_budget_pieCharts' => 'These charts will give you insight in expenses per budget or per account.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Next to this progress bar are two buttons (+ and -) to add or remove money from each piggy bank.', 'piggy-banks_index_accountStatus' => 'For each asset account with at least one piggy bank the status is listed in this table.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'What is your goal? A new couch, a camera, money for emergencies?', 'piggy-banks_create_date' => 'You can set a target date or a deadline for your piggy bank.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Use bills to track the amount of money you\'re due every period. Think about expenses like rent, insurance or mortgage payments.', 'bills_create_name' => 'Use a descriptive name such as "Rent" or "Health insurance".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Select a minimum and maximum amount for this bill.', 'bills_create_repeat_freq_holder' => 'Most bills repeat monthly, but you can set another frequency here.', 'bills_create_skip_holder' => 'If a bill repeats every 2 weeks, the "skip"-field should be set to "1" to skip every other week.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Use this button to see which transactions would match your rule.', 'rules_create_actions' => 'Set as many actions as you like.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'More options are available behind these tabs.', diff --git a/resources/lang/th_TH/list.php b/resources/lang/th_TH/list.php index 73269e8eab..e3a2e2562f 100644 --- a/resources/lang/th_TH/list.php +++ b/resources/lang/th_TH/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'ปุ่ม', - 'icon' => 'ไอคอน', - 'id' => 'ไอดี', - 'create_date' => 'สร้างเมื่อ', - 'update_date' => 'อัปเดตเมื่อ', - 'updated_at' => 'อัปเดตเมื่อ', - 'balance_before' => 'Balance before', - 'balance_after' => 'Balance after', - 'name' => 'ชื่อ', - 'role' => 'Role', - 'currentBalance' => 'Current balance', - 'linked_to_rules' => 'Relevant rules', - 'active' => 'Is active?', - 'percentage' => 'pct.', - 'recurring_transaction' => 'Recurring transaction', - 'next_due' => 'Next due', - 'transaction_type' => 'ประเภท', - 'lastActivity' => 'Last activity', - 'balanceDiff' => 'Balance difference', - 'other_meta_data' => 'Other meta data', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'ประเภทบัญชี', - 'created_at' => 'สร้างเมื่อ', - 'account' => 'บัญชี', - 'external_url' => 'External URL', - 'matchingAmount' => 'จำนวน', - 'destination' => 'ปลายทาง', - 'source' => 'แหล่งที่มา', - 'next_expected_match' => 'Next expected match', - 'automatch' => 'Auto match?', + 'buttons' => 'ปุ่ม', + 'icon' => 'ไอคอน', + 'id' => 'ไอดี', + 'create_date' => 'สร้างเมื่อ', + 'update_date' => 'อัปเดตเมื่อ', + 'updated_at' => 'อัปเดตเมื่อ', + 'balance_before' => 'Balance before', + 'balance_after' => 'Balance after', + 'name' => 'ชื่อ', + 'role' => 'Role', + 'currentBalance' => 'Current balance', + 'linked_to_rules' => 'Relevant rules', + 'active' => 'Is active?', + 'percentage' => 'pct.', + 'recurring_transaction' => 'Recurring transaction', + 'next_due' => 'Next due', + 'transaction_type' => 'ประเภท', + 'lastActivity' => 'Last activity', + 'balanceDiff' => 'Balance difference', + 'other_meta_data' => 'Other meta data', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => 'ประเภทบัญชี', + 'created_at' => 'สร้างเมื่อ', + 'account' => 'บัญชี', + 'external_url' => 'External URL', + 'matchingAmount' => 'จำนวน', + 'destination' => 'ปลายทาง', + 'source' => 'แหล่งที่มา', + 'next_expected_match' => 'Next expected match', + 'automatch' => 'Auto match?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Repeats', 'description' => 'รายละเอียด', 'amount' => 'จำนวน', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Account with bunq', 'file_name' => 'File name', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'File size', - 'file_type' => 'File type', - 'attached_to' => 'Attached to', - 'file_exists' => 'File exists', - 'spectre_bank' => 'Bank', - 'spectre_last_use' => 'Last login', - 'spectre_status' => 'Status', - 'bunq_payment_id' => 'bunq payment ID', - 'repetitions' => 'Repetitions', - 'title' => 'Title', - 'transaction_s' => 'Transaction(s)', - 'field' => 'Field', - 'value' => 'Value', - 'interest' => 'Interest', - 'interest_period' => 'Interest period', - 'liability_type' => 'Type of liability', - 'liability_direction' => 'Liability in/out', - 'end_date' => 'End date', - 'payment_info' => 'Payment information', - 'expected_info' => 'Next expected transaction', - 'start_date' => 'Start date', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'File size', + 'file_type' => 'File type', + 'attached_to' => 'Attached to', + 'file_exists' => 'File exists', + 'spectre_bank' => 'Bank', + 'spectre_last_use' => 'Last login', + 'spectre_status' => 'Status', + 'bunq_payment_id' => 'bunq payment ID', + 'repetitions' => 'Repetitions', + 'title' => 'Title', + 'transaction_s' => 'Transaction(s)', + 'field' => 'Field', + 'value' => 'Value', + 'interest' => 'Interest', + 'interest_period' => 'Interest period', + 'liability_type' => 'Type of liability', + 'liability_direction' => 'Liability in/out', + 'end_date' => 'End date', + 'payment_info' => 'Payment information', + 'expected_info' => 'Next expected transaction', + 'start_date' => 'Start date', + 'trigger' => 'Trigger', + 'response' => 'Response', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/th_TH/pagination.php b/resources/lang/th_TH/pagination.php index 16d48dc882..548907afb7 100644 --- a/resources/lang/th_TH/pagination.php +++ b/resources/lang/th_TH/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/th_TH/passwords.php b/resources/lang/th_TH/passwords.php index 059e1a9ebc..36c0462ab6 100644 --- a/resources/lang/th_TH/passwords.php +++ b/resources/lang/th_TH/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/th_TH/rules.php b/resources/lang/th_TH/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/th_TH/rules.php +++ b/resources/lang/th_TH/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/th_TH/validation.php b/resources/lang/th_TH/validation.php index e0fa90363e..824ac954db 100644 --- a/resources/lang/th_TH/validation.php +++ b/resources/lang/th_TH/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'This is not a valid IBAN.', - 'zero_or_more' => 'The value cannot be negative.', - 'date_or_time' => 'The value must be a valid date or time value (ISO 8601).', - 'source_equals_destination' => 'The source account equals the destination account.', - 'unique_account_number_for_user' => 'It looks like this account number is already in use.', - 'unique_iban_for_user' => 'It looks like this IBAN is already in use.', - 'deleted_user' => 'Due to security constraints, you cannot register using this email address.', - 'rule_trigger_value' => 'This value is invalid for the selected trigger.', - 'rule_action_value' => 'This value is invalid for the selected action.', - 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', - 'file_attached' => 'Successfully uploaded file ":name".', - 'must_exist' => 'The ID in field :attribute does not exist in the database.', - 'all_accounts_equal' => 'All accounts in this field must be equal.', - 'group_title_mandatory' => 'A group title is mandatory when there is more than one transaction.', - 'transaction_types_equal' => 'All splits must be of the same type.', - 'invalid_transaction_type' => 'Invalid transaction type.', - 'invalid_selection' => 'Your selection is invalid.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Need at least one transaction.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Need at least one repetition.', - 'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.', - 'require_currency_info' => 'The content of this field is invalid without currency information.', - 'not_transfer_account' => 'This account is not an account that can be used for transfers.', - 'require_currency_amount' => 'The content of this field is invalid without foreign amount information.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Transaction description should not equal global description.', - 'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.', - 'file_too_large' => 'File ":name" is too large.', - 'belongs_to_user' => 'The value of :attribute is unknown.', - 'accepted' => 'The :attribute must be accepted.', - 'bic' => 'This is not a valid BIC.', - 'at_least_one_trigger' => 'Rule must have at least one trigger.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'Rule must have at least one action.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'This is not valid base64 encoded data.', - 'model_id_invalid' => 'The given ID seems invalid for this model.', - 'less' => ':attribute must be less than 10,000,000', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'date_after' => 'The start date must be before the end date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'unique_for_user' => 'There already is an entry with this :attribute.', - 'before' => 'The :attribute must be a date before :date.', - 'unique_object_for_user' => 'This name is already in use.', - 'unique_account_for_user' => 'This account name is already in use.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => 'This is not a valid IBAN.', + 'zero_or_more' => 'The value cannot be negative.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'The value must be a valid date or time value (ISO 8601).', + 'source_equals_destination' => 'The source account equals the destination account.', + 'unique_account_number_for_user' => 'It looks like this account number is already in use.', + 'unique_iban_for_user' => 'It looks like this IBAN is already in use.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Due to security constraints, you cannot register using this email address.', + 'rule_trigger_value' => 'This value is invalid for the selected trigger.', + 'rule_action_value' => 'This value is invalid for the selected action.', + 'file_already_attached' => 'Uploaded file ":name" is already attached to this object.', + 'file_attached' => 'Successfully uploaded file ":name".', + 'must_exist' => 'The ID in field :attribute does not exist in the database.', + 'all_accounts_equal' => 'All accounts in this field must be equal.', + 'group_title_mandatory' => 'A group title is mandatory when there is more than one transaction.', + 'transaction_types_equal' => 'All splits must be of the same type.', + 'invalid_transaction_type' => 'Invalid transaction type.', + 'invalid_selection' => 'Your selection is invalid.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Need at least one transaction.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Need at least one repetition.', + 'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.', + 'require_currency_info' => 'The content of this field is invalid without currency information.', + 'not_transfer_account' => 'This account is not an account that can be used for transfers.', + 'require_currency_amount' => 'The content of this field is invalid without foreign amount information.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'Transaction description should not equal global description.', + 'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.', + 'file_too_large' => 'File ":name" is too large.', + 'belongs_to_user' => 'The value of :attribute is unknown.', + 'accepted' => 'The :attribute must be accepted.', + 'bic' => 'This is not a valid BIC.', + 'at_least_one_trigger' => 'Rule must have at least one trigger.', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => 'Rule must have at least one action.', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => 'This is not valid base64 encoded data.', + 'model_id_invalid' => 'The given ID seems invalid for this model.', + 'less' => ':attribute must be less than 10,000,000', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'date_after' => 'The start date must be before the end date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'unique_for_user' => 'There already is an entry with this :attribute.', + 'before' => 'The :attribute must be a date before :date.', + 'unique_object_for_user' => 'This name is already in use.', + 'unique_account_for_user' => 'This account name is already in use.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => 'The :attribute must be between :min and :max.', + 'between.file' => 'The :attribute must be between :min and :max kilobytes.', + 'between.string' => 'The :attribute must be between :min and :max characters.', + 'between.array' => 'The :attribute must have between :min and :max items.', + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'email' => 'The :attribute must be a valid email address.', + 'filled' => 'The :attribute field is required.', + 'exists' => 'The selected :attribute is invalid.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max.numeric' => 'The :attribute may not be greater than :max.', + 'max.file' => 'The :attribute may not be greater than :max kilobytes.', + 'max.string' => 'The :attribute may not be greater than :max characters.', + 'max.array' => 'The :attribute may not have more than :max items.', + 'mimes' => 'The :attribute must be a file of type: :values.', + 'min.numeric' => 'The :attribute must be at least :min.', + 'lte.numeric' => 'The :attribute must be less than or equal :value.', + 'min.file' => 'The :attribute must be at least :min kilobytes.', + 'min.string' => 'The :attribute must be at least :min characters.', + 'min.array' => 'The :attribute must have at least :min items.', + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'The native amount must be a number.', + 'numeric_destination' => 'The destination amount must be a number.', + 'numeric_source' => 'The source amount must be a number.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size.numeric' => 'The :attribute must be :size.', + 'amount_min_over_max' => 'The minimum amount cannot be larger than the maximum amount.', + 'size.file' => 'The :attribute must be :size kilobytes.', + 'size.string' => 'The :attribute must be :size characters.', + 'size.array' => 'The :attribute must contain :size items.', + 'unique' => 'The :attribute has already been taken.', + 'string' => 'The :attribute must be a string.', + 'url' => 'The :attribute format is invalid.', + 'timezone' => 'The :attribute must be a valid zone.', + '2fa_code' => 'The :attribute field is invalid.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'file' => 'The :attribute must be a file.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'present' => 'The :attribute field must be present.', + 'amount_zero' => 'The total amount cannot be zero.', + 'current_target_amount' => 'The current amount must be less than the target amount.', + 'unique_piggy_bank_for_user' => 'The name of the piggy bank must be unique.', + 'unique_object_group' => 'The group name must be unique', + 'starts_with' => 'The value must start with :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Both accounts must be of the same account type', + 'same_account_currency' => 'Both accounts must have the same currency setting', - 'between.numeric' => 'The :attribute must be between :min and :max.', - 'between.file' => 'The :attribute must be between :min and :max kilobytes.', - 'between.string' => 'The :attribute must be between :min and :max characters.', - 'between.array' => 'The :attribute must have between :min and :max items.', - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'email' => 'The :attribute must be a valid email address.', - 'filled' => 'The :attribute field is required.', - 'exists' => 'The selected :attribute is invalid.', - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'json' => 'The :attribute must be a valid JSON string.', - 'max.numeric' => 'The :attribute may not be greater than :max.', - 'max.file' => 'The :attribute may not be greater than :max kilobytes.', - 'max.string' => 'The :attribute may not be greater than :max characters.', - 'max.array' => 'The :attribute may not have more than :max items.', - 'mimes' => 'The :attribute must be a file of type: :values.', - 'min.numeric' => 'The :attribute must be at least :min.', - 'lte.numeric' => 'The :attribute must be less than or equal :value.', - 'min.file' => 'The :attribute must be at least :min kilobytes.', - 'min.string' => 'The :attribute must be at least :min characters.', - 'min.array' => 'The :attribute must have at least :min items.', - 'not_in' => 'The selected :attribute is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'numeric_native' => 'The native amount must be a number.', - 'numeric_destination' => 'The destination amount must be a number.', - 'numeric_source' => 'The source amount must be a number.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values is present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'size.numeric' => 'The :attribute must be :size.', - 'amount_min_over_max' => 'The minimum amount cannot be larger than the maximum amount.', - 'size.file' => 'The :attribute must be :size kilobytes.', - 'size.string' => 'The :attribute must be :size characters.', - 'size.array' => 'The :attribute must contain :size items.', - 'unique' => 'The :attribute has already been taken.', - 'string' => 'The :attribute must be a string.', - 'url' => 'The :attribute format is invalid.', - 'timezone' => 'The :attribute must be a valid zone.', - '2fa_code' => 'The :attribute field is invalid.', - 'dimensions' => 'The :attribute has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'file' => 'The :attribute must be a file.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'present' => 'The :attribute field must be present.', - 'amount_zero' => 'The total amount cannot be zero.', - 'current_target_amount' => 'The current amount must be less than the target amount.', - 'unique_piggy_bank_for_user' => 'The name of the piggy bank must be unique.', - 'unique_object_group' => 'The group name must be unique', - 'starts_with' => 'The value must start with :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Both accounts must be of the same account type', - 'same_account_currency' => 'Both accounts must have the same currency setting', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'This is not a secure password. Please try again. For more information, visit https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.', - 'valid_recurrence_rep_moment' => 'Invalid repetition moment for this type of repetition.', - 'invalid_account_info' => 'Invalid account information.', - 'attributes' => [ + 'secure_password' => 'This is not a secure password. Please try again. For more information, visit https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.', + 'valid_recurrence_rep_moment' => 'Invalid repetition moment for this type of repetition.', + 'invalid_account_info' => 'Invalid account information.', + 'attributes' => [ 'email' => 'email address', 'description' => 'description', 'amount' => 'amount', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'withdrawal_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', + 'deposit_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'need_id_in_edit' => 'Each split must have transaction_journal_id (either valid ID or 0).', - 'transfer_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'need_id_in_edit' => 'Each split must have transaction_journal_id (either valid ID or 0).', + 'ob_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'You can\'t use this account as the source account.', + 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', - 'generic_invalid_source' => 'You can\'t use this account as the source account.', - 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', - 'gt.numeric' => 'The :attribute must be greater than :value.', - 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', - 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', - 'gte.array' => 'The :attribute must have :value items or more.', + 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', + 'gt.numeric' => 'The :attribute must be greater than :value.', + 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', + 'gte.array' => 'The :attribute must have :value items or more.', 'amount_required_for_auto_budget' => 'The amount is required.', 'auto_budget_amount_positive' => 'The amount must be more than zero.', + 'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.', // no access to administration: diff --git a/resources/lang/tr_TR/api.php b/resources/lang/tr_TR/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/tr_TR/api.php +++ b/resources/lang/tr_TR/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/tr_TR/auth.php b/resources/lang/tr_TR/auth.php index 46ebcda889..6c12cd6268 100644 --- a/resources/lang/tr_TR/auth.php +++ b/resources/lang/tr_TR/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Bu kimlik bilgileri kayıtlarımızla uyuşmuyor.', 'throttle' => 'Fazla sayıda oturum açma girişimi. Lütfen :seconds saniye sonra tekrar deneyiniz.', diff --git a/resources/lang/tr_TR/breadcrumbs.php b/resources/lang/tr_TR/breadcrumbs.php index 8930a9b177..e96ac477ee 100644 --- a/resources/lang/tr_TR/breadcrumbs.php +++ b/resources/lang/tr_TR/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Ana Sayfa', - 'budgets' => 'Bütçeler', - 'subscriptions' => 'Abonelik', - 'transactions' => 'İşlemler', - 'title_expenses' => 'Masraflar', - 'title_withdrawal' => 'Masraflar', - 'title_revenue' => 'Gelir / kazanç', - 'title_deposit' => 'Gelir /kazanç', - 'title_transfer' => 'Aktarmalar', - 'title_transfers' => 'Aktarmalar', - 'edit_currency' => '":name" para birimini düzenle', - 'delete_currency' => '":name" para birimini sil', - 'newPiggyBank' => 'Yeni bir kumbara oluştur', - 'edit_piggyBank' => '":name" kumbarasını düzenle', - 'preferences' => 'Tercihler', - 'profile' => 'Profil', - 'accounts' => 'Hesaplar', - 'changePassword' => 'Şifrenizi değiştirin', - 'change_email' => 'E-posta adresini değiştir', - 'bills' => 'Fatura', - 'newBill' => 'Yeni Fatura', - 'edit_bill' => 'Faturayı düzenle ":name"', - 'delete_bill' => '":name" faturasını sil', - 'reports' => 'Raporlar', - 'search_result' => '":query" için arama sonuçları', - 'withdrawal_list' => 'Giderler', - 'Withdrawal_list' => 'Giderler', - 'deposit_list' => 'Varlık, gelir ve mevduatlar', - 'transfer_list' => 'Transferler', - 'transfers_list' => 'Transferler', + 'home' => 'Ana Sayfa', + 'budgets' => 'Bütçeler', + 'subscriptions' => 'Abonelik', + 'transactions' => 'İşlemler', + 'title_expenses' => 'Masraflar', + 'title_withdrawal' => 'Masraflar', + 'title_revenue' => 'Gelir / kazanç', + 'title_deposit' => 'Gelir /kazanç', + 'title_transfer' => 'Aktarmalar', + 'title_transfers' => 'Aktarmalar', + 'edit_currency' => '":name" para birimini düzenle', + 'delete_currency' => '":name" para birimini sil', + 'newPiggyBank' => 'Yeni bir kumbara oluştur', + 'edit_piggyBank' => '":name" kumbarasını düzenle', + 'preferences' => 'Tercihler', + 'profile' => 'Profil', + 'accounts' => 'Hesaplar', + 'changePassword' => 'Şifrenizi değiştirin', + 'change_email' => 'E-posta adresini değiştir', + 'bills' => 'Fatura', + 'newBill' => 'Yeni Fatura', + 'edit_bill' => '":name" faturasını düzenle', + 'delete_bill' => '":name" faturasını sil', + 'reports' => 'Raporlar', + 'search_result' => '":query" için arama sonuçları', + 'withdrawal_list' => 'Giderler', + 'Withdrawal_list' => 'Giderler', + 'deposit_list' => 'Varlık, gelir ve mevduatlar', + 'transfer_list' => 'Transferler', + 'transfers_list' => 'Transferler', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Mutabakatlar', 'create_withdrawal' => 'Yeni para çekme oluştur', 'create_deposit' => 'Yeni mevduat oluştur', diff --git a/resources/lang/tr_TR/components.php b/resources/lang/tr_TR/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/tr_TR/components.php +++ b/resources/lang/tr_TR/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/tr_TR/config.php b/resources/lang/tr_TR/config.php index 1310ff3509..33836c9dad 100644 --- a/resources/lang/tr_TR/config.php +++ b/resources/lang/tr_TR/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'tr', - 'locale' => 'tr, Turkish, tr_TR, tr_TR.utf8, tr_TR.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'tr', + 'locale' => 'tr, Turkish, tr_TR, tr_TR.utf8, tr_TR.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM D, YYYY', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM D, YYYY', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'MMMM Do, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => '', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Hafta' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Hafta' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Pazartesi', - 'dow_2' => 'Salı', - 'dow_3' => 'Çarşamba', - 'dow_4' => 'Perşembe', - 'dow_5' => 'Cuma', - 'dow_6' => 'Cumartesi', - 'dow_7' => 'Pazar', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Pazartesi', + 'dow_2' => 'Salı', + 'dow_3' => 'Çarşamba', + 'dow_4' => 'Perşembe', + 'dow_5' => 'Cuma', + 'dow_6' => 'Cumartesi', + 'dow_7' => 'Pazar', ]; /* diff --git a/resources/lang/tr_TR/demo.php b/resources/lang/tr_TR/demo.php index 0496d7af01..d44be766ee 100644 --- a/resources/lang/tr_TR/demo.php +++ b/resources/lang/tr_TR/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/tr_TR/email.php b/resources/lang/tr_TR/email.php index 7dab22317d..c89f8a1124 100644 --- a/resources/lang/tr_TR/email.php +++ b/resources/lang/tr_TR/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Firefly III kurulumunuzdan bir test mesajı', 'admin_test_body' => 'Bu, Firefly III örneğinizden gelen bir test mesajıdır. Şu adrese gönderildi: e-posta.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'An invitation has been created', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Şifre sıfırlama:', 'registered_doc_link' => 'Belge:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'A new Firefly III version is available', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'İsterseniz, yeni bir sayı da açabilirsiniz https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Tam stacktrace aşağıdadır:', 'error_headers' => 'Aşağıdaki başlıklar da alakalı olabilir:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III yeni bir işlem yarattı / Firefly III yarattı :count yeni işlemler', 'new_journals_header' => 'Firefly III sizin için bir anlaşma yaptı. Firefly III kurulumunuzda bulabilirsiniz: / Firefly III sizin için :count sayım işlemleri. Bunları Firefly III kurulumunuzda bulabilirsiniz:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/tr_TR/errors.php b/resources/lang/tr_TR/errors.php index f1b7213ea1..f636e24ac8 100644 --- a/resources/lang/tr_TR/errors.php +++ b/resources/lang/tr_TR/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Yığın izleme', 'more_info' => 'Daha çok bilgi', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Lütfen günlük dosyalarını bulacağınız storage/logs dizininde daha fazla bilgi toplayın. Eğer Docker kullanıyorsanız, docker logs -f [container] komutunu kullanın.', - 'collect_info_more' => 'Hata bilgilerini toplama hakkında daha fazla bilgi için the FAQ.', - 'github_help' => 'Github\'dan yardım alın', - 'github_instructions' => 'Yeni bir sayı açmaktan memnuniyet duyarızon GitHub.', - 'use_search' => 'Aramayı kullan!', - 'include_info' => 'Bilgileri ekleyinbu hata ayıklama sayfasından.', - 'tell_more' => 'Bize daha fazlasını anlat "diyor Whoops!"', - 'include_logs' => '(Bakınız) hata günlükleri vardır.', - 'what_did_you_do' => 'Bize ne yaptığınızI anlatın.', - 'offline_header' => 'Muhtemelen çevrimdışısınız', - 'offline_unreachable' => 'Firefly III\'e ulaşılamıyor. Cihazınız şu anda çevrimdışı veya sunucu çalışmıyor.', - 'offline_github' => 'Hem cihazınızın hem de sunucunuzun çevrimiçi olduğundan eminseniz, lütfen bir bilet açınGitHub.', - + 'collect_info' => 'Lütfen günlük dosyalarını bulacağınız storage/logs dizininde daha fazla bilgi toplayın. Eğer Docker kullanıyorsanız, docker logs -f [container] komutunu kullanın.', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Github\'dan yardım alın', + 'github_instructions' => 'Yeni bir sayı açmaktan memnuniyet duyarızon GitHub.', + 'use_search' => 'Aramayı kullan!', + 'include_info' => 'Bilgileri ekleyinbu hata ayıklama sayfasından.', + 'tell_more' => 'Bize daha fazlasını anlat "diyor Whoops!"', + 'include_logs' => '(Bakınız) hata günlükleri vardır.', + 'what_did_you_do' => 'Bize ne yaptığınızI anlatın.', + 'offline_header' => 'Muhtemelen çevrimdışısınız', + 'offline_unreachable' => 'Firefly III\'e ulaşılamıyor. Cihazınız şu anda çevrimdışı veya sunucu çalışmıyor.', + 'offline_github' => 'Hem cihazınızın hem de sunucunuzun çevrimiçi olduğundan eminseniz, lütfen bir bilet açınGitHub.', ]; diff --git a/resources/lang/tr_TR/firefly.php b/resources/lang/tr_TR/firefly.php index 60ecd18a17..395140c4bb 100644 --- a/resources/lang/tr_TR/firefly.php +++ b/resources/lang/tr_TR/firefly.php @@ -33,313 +33,315 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Kapat', - 'actions' => 'Eylemler', - 'edit' => 'Düzenle', - 'delete' => 'Sil', - 'split' => 'Böl', - 'single_split' => 'Böl', - 'clone' => 'Klonla', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => 'Son yedi gün', - 'last_thirty_days' => 'Son otuz gün', - 'last_180_days' => 'Son 180 gün', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'Son 2 Ay', - 'welcome_back' => 'Neler oluyor?', - 'everything' => 'Her şey', - 'today' => 'bugün', - 'customRange' => 'Özel menzil', - 'date_range' => 'Tarih Aralığı', - 'apply' => 'Uygula', - 'select_date' => 'Tarih Seç..', - 'cancel' => 'İptal', - 'from' => 'Gönderen', - 'to' => 'Alıcı', - 'structure' => 'Yapı', - 'help_translating' => 'Bu yardım metni henüz sizin dilinizde bulunmamaktadır. Çeviriye katkı sağlamak ister misiniz?', - 'showEverything' => 'Her şeyi göster', - 'never' => 'Asla', - 'no_results_for_empty_search' => 'Aramanız boştu, bu nedenle hiçbir şey bulunamadı.', - 'removed_amount' => '" :amount" kaldırıldı', - 'added_amount' => ':amount eklendi', - 'asset_account_role_help' => 'Seçiminizden kaynaklanan ekstra seçenekler daha sonra ayarlanabilir.', - 'Opening balance' => 'Açılış bakiyesi', - 'create_new_stuff' => 'Yeni bir şey oluştur', - 'new_withdrawal' => 'Yeni para çekme', - 'create_new_transaction' => 'Yeni Transfer Oluştur', - 'sidebar_frontpage_create' => 'Yeni', - 'new_transaction' => 'Yeni işlem', - 'no_rules_for_bill' => 'Bu faturaya bağlı bir kural yok.', - 'go_to_asset_accounts' => 'Varlık hesaplarınızı görüntüleyin + 'close' => 'Kapat', + 'actions' => 'Eylemler', + 'edit' => 'Düzenle', + 'delete' => 'Sil', + 'split' => 'Böl', + 'single_split' => 'Böl', + 'clone' => 'Klonla', + 'clone_and_edit' => 'Clone and edit', + 'confirm_action' => 'Confirm action', + 'last_seven_days' => 'Son yedi gün', + 'last_thirty_days' => 'Son otuz gün', + 'last_180_days' => 'Son 180 gün', + 'month_to_date' => 'Month to date', + 'year_to_date' => 'Year to date', + 'YTD' => 'Son 2 Ay', + 'welcome_back' => 'Neler oluyor?', + 'everything' => 'Her şey', + 'today' => 'bugün', + 'customRange' => 'Özel menzil', + 'date_range' => 'Tarih Aralığı', + 'apply' => 'Uygula', + 'select_date' => 'Tarih Seç..', + 'cancel' => 'İptal', + 'from' => 'Gönderen', + 'to' => 'Alıcı', + 'structure' => 'Yapı', + 'help_translating' => 'Bu yardım metni henüz sizin dilinizde bulunmamaktadır. Çeviriye katkı sağlamak ister misiniz?', + 'showEverything' => 'Her şeyi göster', + 'never' => 'Asla', + 'no_results_for_empty_search' => 'Aramanız boştu, bu nedenle hiçbir şey bulunamadı.', + 'removed_amount' => '" :amount" kaldırıldı', + 'added_amount' => ':amount eklendi', + 'asset_account_role_help' => 'Seçiminizden kaynaklanan ekstra seçenekler daha sonra ayarlanabilir.', + 'Opening balance' => 'Açılış bakiyesi', + 'create_new_stuff' => 'Yeni bir şey oluştur', + 'new_withdrawal' => 'Yeni para çekme', + 'create_new_transaction' => 'Yeni Transfer Oluştur', + 'sidebar_frontpage_create' => 'Yeni', + 'new_transaction' => 'Yeni işlem', + 'no_rules_for_bill' => 'Bu faturaya bağlı bir kural yok.', + 'go_to_asset_accounts' => 'Varlık hesaplarınızı görüntüleyin ', - 'go_to_budgets' => 'Bütçelerine git', - 'go_to_withdrawals' => 'Para çekme işlemlerine gidin', - 'clones_journal_x' => 'Bu işlem ":description" (#:id) kopyasıdır', - 'go_to_categories' => 'Kategorilerinize gidin', - 'go_to_bills' => 'Faturalarına git', - 'go_to_expense_accounts' => 'Gider hesaplarınızı görün', - 'go_to_revenue_accounts' => 'Gelir hesaplarınızı görün', - 'go_to_piggies' => 'Kumbaranıza gidin', - 'new_deposit' => 'Yeni Depozito', - 'new_transfer' => 'Yeni transfer', - 'new_transfers' => 'Yeni transfer', - 'new_asset_account' => 'Yeni varlık hesabı', - 'new_expense_account' => 'Yeni gider hesabı', - 'new_revenue_account' => 'Yeni Gelir Hesabı', - 'new_liabilities_account' => 'Yeni sorumluluk', - 'new_budget' => 'Yeni bütçe', - 'new_bill' => 'Yeni Fatura', - 'block_account_logout' => 'Çıkış yaptınız. Engellenen hesaplar bu siteyi kullanamaz. Geçerli bir e-posta adresiyle kayıt oldunuz mu?', - 'flash_success' => 'Başarılı!', - 'flash_info' => 'İleti', - 'flash_warning' => 'Uyarı!', - 'flash_error' => 'Hata!', - 'flash_danger' => 'Tehlike!', - 'flash_info_multiple' => 'Bir ileti var|:count ileti var', - 'flash_error_multiple' => 'Bir hata var|:count hata var', - 'net_worth' => 'Net değer', - 'help_for_this_page' => 'Bu sayfa için yardım', - 'help_for_this_page_body' => 'Bu sayfa hakkında daha fazla bilgi bulabilirsiniz belgelerde.', - 'two_factor_welcome' => 'Merhaba!', - 'two_factor_enter_code' => 'Devam etmek için lütfen iki faktörlü kimlik doğrulama kodunuzu girin. Uygulamanız sizin için oluşturabilir.', - 'two_factor_code_here' => 'Kodu buraya girin', - 'two_factor_title' => 'İki faktörlü kimlik doğrulaması', - 'authenticate' => 'Kimliği doğrula', - 'two_factor_forgot_title' => 'Kayıp iki faktörlü kimlik doğrulaması', - 'two_factor_forgot' => 'İki faktörlü kimlik doğrulama cihazını unuttum.', - 'two_factor_lost_header' => 'İki faktörlü kimlik doğrulamanızı mı kaybettiniz?', - 'two_factor_lost_intro' => 'Eğer yedek kodlarınızı da kayıp ettiyseniz, şansınız kötü. Bu web arayüzünden düzeltebileceğiniz bir şey değil. İki seçeneğiniz var.', - 'two_factor_lost_fix_self' => 'Kendi Firefly III örneğinizi çalıştırıyorsanız, SSS bölümündeki bu giriş talimatlar için.', - 'two_factor_lost_fix_owner' => 'Aksi takdirde, site sahibine (:site_owner) e-posta gönderin ve iki faktörlü kimlik doğrulamasını sıfırlamasını isteyin.', - 'mfa_backup_code' => 'Firefly III giriş yapmak için yedek kullandınız. Bu kod tekrar kullanılamaz, o yüzden listenizden çıkartın.', - 'pref_two_factor_new_backup_codes' => 'Yeni yedek kodları alın', - 'pref_two_factor_backup_code_count' => 'Geçerli :count yedek kodunuz var.|Sizin :count geçerli yedek kodunuz var.', - '2fa_i_have_them' => 'Hepsini sakladım!', - 'warning_much_data' => ':days günlük verinin yüklenmesi biraz zaman alabilir.', - 'registered' => 'Başarıyla kaydoldunuz!', - 'Default asset account' => 'Varsayılan varlık hesabı', - 'no_budget_pointer' => 'Henüz bütçeniz yok gibi görünüyor. bütçeler sayfasında biraz oluşturmalısınız. Bütçeler, giderleri takip etmenize yardımcı olabilir.', - 'no_bill_pointer' => 'Henüz faturanız yok gibi görünüyor. faturalar sayfasında biraz oluşturmalısınız. Faturalar, harcamaları takip etmenize yardımcı olabilir.', - 'Savings account' => 'Birikim Hesabı', - 'Credit card' => 'Kredi Kartı', - 'source_accounts' => 'Kaynak hesap|Kaynak hesaplar', - 'destination_accounts' => 'Hedef hesap|Hedef hesaplar', - 'user_id_is' => 'Kullanıcı kimliğiniz :user', - 'field_supports_markdown' => 'Bu alan Markdown\'u destekliyor.', - 'need_more_help' => 'Firefly III kullanımında daha fazla yardıma ihtiyacınız olursa, lütfen Github\'da bir talep açın.', - 'reenable_intro_text' => 'Ayni zamanda giriş rehberi yeniden aktive edebilirsin.', - 'intro_boxes_after_refresh' => 'Sayfayı yenilediğinizde tanıtım kutuları yeniden görünecektir.', - 'show_all_no_filter' => 'Tüm işlemleri, tarihe göre gruplamadan gösterin.', - 'expenses_by_category' => 'Kategoriye göre giderler', - 'expenses_by_budget' => 'Bütçeye göre giderler', - 'income_by_category' => 'Kategoriye göre gelir', - 'expenses_by_asset_account' => 'Varlık hesabına göre giderler', - 'expenses_by_expense_account' => 'Gider hesabına göre giderler', - 'cannot_redirect_to_account' => 'Firefly III sizi doğru sayfaya yönlendiremiyor. Özür dileriz.', - 'sum_of_expenses' => 'Giderlerin Toplamı', - 'sum_of_income' => 'Gelirin Toplamı', - 'liabilities' => 'Yükümlülükler', - 'spent_in_specific_budget' => 'Miktar ":budget" harcandı', - 'spent_in_specific_double' => '":account" hesabında harcandı', - 'earned_in_specific_double' => '":account" tarafından kazanıldı', - 'source_account' => 'Kaynak hesap', - 'source_account_reconciliation' => 'Bir mutabakat işleminin kaynak hesabını düzenleyemezsiniz.', - 'destination_account' => 'Hedef hesap', - 'destination_account_reconciliation' => 'Bir mutabakat işleminin hedef hesabını düzenleyemezsiniz.', - 'sum_of_expenses_in_budget' => 'Harcanan toplam bütçe ":budget"', - 'left_in_budget_limit' => 'Bütçeye göre harcama ayrıldı', - 'current_period' => 'Cari dönem', - 'show_the_current_period_and_overview' => 'Geçerli periyodu ve genel bakışı göster', - 'pref_languages_locale' => 'İngilizce dışındaki bir dilin düzgün çalışması için, işletim sisteminizin doğru yerel ayar bilgileri ile donatılmış olmalıdır. Aksi halde, tarih, para birim verileri ve tutarı yanlış gösterilebilir.', - 'budget_in_period' => '":name" bütçesi için :start ve :end aralığında yapılan :currency işlemleri', - 'chart_budget_in_period' => '":name" bütçesi için :start ve :end aralığında yapılan :currency işlemlerin grafiği', - 'chart_budget_in_period_only_currency' => 'Bütçe miktarı :currency dövizinde, dolayısı ile bu grafik sadece :currency dövizinde yapılan işlemleri gösterir.', - 'chart_account_in_period' => '":name" (:balance) hesabı için :start ve :end arasındaki tüm işlemler için grafik', - 'chart_category_in_period' => ':start ve :end arasında ":name" kategorisindeki bütün işlemler için grafik', - 'chart_category_all' => '":name" kategorisinde bütün işlemler çizelgesi', - 'clone_withdrawal' => 'Bu para çekimini klonla', - 'clone_deposit' => 'Bu depozitoyu klonla', - 'clone_transfer' => 'Bu transferi kopyala', - 'multi_select_no_selection' => 'Hiçbiri seçilmedi', - 'multi_select_select_all' => 'Tümünü seç', - 'multi_select_n_selected' => 'seçili', - 'multi_select_all_selected' => 'Tümü seçildi', - 'multi_select_filter_placeholder' => 'Bul..', - 'intro_next_label' => 'Sonraki', - 'intro_prev_label' => 'Önceki', - 'intro_skip_label' => 'Atla', - 'intro_done_label' => 'Bitti', - 'between_dates_breadcrumb' => ':start ve :end arasında', - 'all_journals_without_budget' => 'Bütçesiz tüm işlemler', - 'journals_without_budget' => 'Bütçesiz İşlemler', - 'all_journals_without_category' => 'Kategorisiz tüm işlemler', - 'journals_without_category' => 'Kategorisiz işlemler', - 'all_journals_for_account' => ':name hesabındaki tüm işlemler', - 'chart_all_journals_for_account' => ':name hesabındaki tüm işlemlerin grafiği', - 'journals_in_period_for_account' => ':start ile :end tarihleri arasında :name hesabından yapılan tüm işlemler', - 'journals_in_period_for_account_js' => '{title} hesabı için {start} ile {end} arasındaki tüm işlemler', - 'transferred' => 'Transfer yapıldı', - 'all_withdrawal' => 'Tüm giderler', - 'all_transactions' => 'Tüm işlemler', - 'title_withdrawal_between' => 'Başlangıç ve Bitiş arasındaki tüm harcamalar', - 'all_deposit' => 'Toplam varlık', - 'title_deposit_between' => 'Başlangıç ve Bitiş arasındaki tüm gelir', - 'all_transfers' => 'Tüm transferler', - 'title_transfers_between' => ':start ile :end tarihleri arasındaki tüm işlemler', - 'all_transfer' => 'Tüm transferler', - 'all_journals_for_tag' => '":tag" etiketiyle yapılan tüm işlemler', - 'title_transfer_between' => ':start ile :end tarihleri arasındaki tüm işlemler', - 'all_journals_for_category' => '":name" kategorisindeki tüm işlemler', - 'all_journals_for_budget' => '":name" bütçesindeki tüm işlemler', - 'chart_all_journals_for_budget' => ':name bütçesindeki tüm işlemlerin grafiği', - 'journals_in_period_for_category' => ':start ile :end tarihleri arasında :name kategorisinde yapılan tüm işlemler', - 'journals_in_period_for_tag' => ':start ile :end tarihleri arasında :tag etiketiyle yapılan tüm işlemler', - 'not_available_demo_user' => 'Erişmeye çalıştığınız özellik, demo kullanıcıları tarafından kullanılamaz.', - 'exchange_rate_instructions' => '"@name" varlık hesabı yalnızca @native_currency\'daki işlemleri kabul eder. Bunun yerine @foreign_currency\'u kullanmak istiyorsanız, @native_currency\'daki karşılığının da bilinmesini sağlayın:', - 'transfer_exchange_rate_instructions' => 'Kaynak varlık hesabı "@source_name" sadece @soruce_currency işlemlerini kabul eder. Hedef varlık hesabı "@dest_name" sadece @dest_currency işlemlerini kabul eder. Aktarılan tutarı her iki para biriminde de doğru olarak girmeniz gerekir.', - 'transaction_data' => 'İşlem Verileri', - 'invalid_server_configuration' => 'Geçersiz sunucu yapılandırması', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Hızlı anahtar', - 'sign_in_to_start' => 'Oturumu başlatmak için giriş yapın', - 'sign_in' => 'Oturum aç', - 'register_new_account' => 'Yeni hesap kaydı', - 'forgot_my_password' => 'Şifremi unuttum', - 'problems_with_input' => 'Girişinizle ilgili bazı problemler var.', - 'reset_password' => 'Şifreni sıfırla', - 'button_reset_password' => 'Parolayı Sıfırla', - 'reset_button' => 'Sıfırla', - 'want_to_login' => 'Giriş yapmak istiyorum', - 'login_page_title' => 'Firefly III\'e giriş yapın', - 'register_page_title' => 'Firefly III\'e kayıt olun', - 'forgot_pw_page_title' => 'Firefly III için şifrenizi mi unuttunuz', - 'reset_pw_page_title' => 'Firefly III şifrenizi sıfırlayın', - 'cannot_reset_demo_user' => 'Demo kullanıcısının şifresini sıfırlayamazsınız.', - 'no_att_demo_user' => 'Demo kullanıcısı ekleri yükleyemez.', - 'button_register' => 'Kayıt ol', - 'authorization' => 'Yetkilendirme', - 'active_bills_only' => 'sadece aktif faturalar', - 'active_bills_only_total' => 'tüm aktif faturalar', - 'active_exp_bills_only' => 'sadece aktif ve beklenen faturalar', - 'active_exp_bills_only_total' => 'yalnızca tüm etkin beklenen faturalar', - 'per_period_sum_1D' => 'Beklenen günlük maliyetler', - 'per_period_sum_1W' => 'Beklenen haftalık maliyetler', - 'per_period_sum_1M' => 'Beklenen aylık maliyetler', - 'per_period_sum_3M' => 'Beklenen üç aylık maliyetler', - 'per_period_sum_6M' => 'Beklenen yarı yıllık maliyetler', - 'per_period_sum_1Y' => 'Beklenen yıllık maliyetler', - 'average_per_bill' => 'fatura başına ortalama', - 'expected_total' => 'beklenen toplam', - 'reconciliation_account_name' => ':name mutabakatı (:currency)', - 'saved' => 'Kaydedildi', - 'advanced_options' => 'Gelişmiş Ayarlar', - 'advanced_options_explain' => 'Firefly III\'teki bazı sayfalarda bu düğmenin arkasına gizlenmiş gelişmiş seçenekler bulunur. Bu sayfanın burada süslü bir yanı yok, ama diğerlerine bir göz atın!', - 'here_be_dragons' => 'İşte ejderhalar', + 'go_to_budgets' => 'Bütçelerine git', + 'go_to_withdrawals' => 'Para çekme işlemlerine gidin', + 'clones_journal_x' => 'Bu işlem ":description" (#:id) kopyasıdır', + 'go_to_categories' => 'Kategorilerinize gidin', + 'go_to_bills' => 'Faturalarına git', + 'go_to_expense_accounts' => 'Gider hesaplarınızı görün', + 'go_to_revenue_accounts' => 'Gelir hesaplarınızı görün', + 'go_to_piggies' => 'Kumbaranıza gidin', + 'new_deposit' => 'Yeni Depozito', + 'new_transfer' => 'Yeni transfer', + 'new_transfers' => 'Yeni transfer', + 'new_asset_account' => 'Yeni varlık hesabı', + 'new_expense_account' => 'Yeni gider hesabı', + 'new_revenue_account' => 'Yeni Gelir Hesabı', + 'new_liabilities_account' => 'Yeni sorumluluk', + 'new_budget' => 'Yeni bütçe', + 'new_bill' => 'Yeni Fatura', + 'block_account_logout' => 'Çıkış yaptınız. Engellenen hesaplar bu siteyi kullanamaz. Geçerli bir e-posta adresiyle kayıt oldunuz mu?', + 'flash_success' => 'Başarılı!', + 'flash_info' => 'İleti', + 'flash_warning' => 'Uyarı!', + 'flash_error' => 'Hata!', + 'flash_danger' => 'Tehlike!', + 'flash_info_multiple' => 'Bir ileti var|:count ileti var', + 'flash_error_multiple' => 'Bir hata var|:count hata var', + 'net_worth' => 'Net değer', + 'help_for_this_page' => 'Bu sayfa için yardım', + 'help_for_this_page_body' => 'Bu sayfa hakkında daha fazla bilgi bulabilirsiniz belgelerde.', + 'two_factor_welcome' => 'Merhaba!', + 'two_factor_enter_code' => 'Devam etmek için lütfen iki faktörlü kimlik doğrulama kodunuzu girin. Uygulamanız sizin için oluşturabilir.', + 'two_factor_code_here' => 'Kodu buraya girin', + 'two_factor_title' => 'İki faktörlü kimlik doğrulaması', + 'authenticate' => 'Kimliği doğrula', + 'two_factor_forgot_title' => 'Kayıp iki faktörlü kimlik doğrulaması', + 'two_factor_forgot' => 'İki faktörlü kimlik doğrulama cihazını unuttum.', + 'two_factor_lost_header' => 'İki faktörlü kimlik doğrulamanızı mı kaybettiniz?', + 'two_factor_lost_intro' => 'Eğer yedek kodlarınızı da kayıp ettiyseniz, şansınız kötü. Bu web arayüzünden düzeltebileceğiniz bir şey değil. İki seçeneğiniz var.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner) e-posta gönderin ve iki faktörlü kimlik doğrulamasını sıfırlamasını isteyin.', + 'mfa_backup_code' => 'Firefly III giriş yapmak için yedek kullandınız. Bu kod tekrar kullanılamaz, o yüzden listenizden çıkartın.', + 'pref_two_factor_new_backup_codes' => 'Yeni yedek kodları alın', + 'pref_two_factor_backup_code_count' => 'Geçerli :count yedek kodunuz var.|Sizin :count geçerli yedek kodunuz var.', + '2fa_i_have_them' => 'Hepsini sakladım!', + 'warning_much_data' => ':days günlük verinin yüklenmesi biraz zaman alabilir.', + 'registered' => 'Başarıyla kaydoldunuz!', + 'Default asset account' => 'Varsayılan varlık hesabı', + 'no_budget_pointer' => 'Henüz bütçeniz yok gibi görünüyor. bütçeler sayfasında biraz oluşturmalısınız. Bütçeler, giderleri takip etmenize yardımcı olabilir.', + 'no_bill_pointer' => 'Henüz faturanız yok gibi görünüyor. faturalar sayfasında biraz oluşturmalısınız. Faturalar, harcamaları takip etmenize yardımcı olabilir.', + 'Savings account' => 'Birikim Hesabı', + 'Credit card' => 'Kredi Kartı', + 'source_accounts' => 'Kaynak hesap|Kaynak hesaplar', + 'destination_accounts' => 'Hedef hesap|Hedef hesaplar', + 'user_id_is' => 'Kullanıcı kimliğiniz :user', + 'field_supports_markdown' => 'Bu alan Markdown\'u destekliyor.', + 'need_more_help' => 'Firefly III kullanımında daha fazla yardıma ihtiyacınız olursa, lütfen Github\'da bir talep açın.', + 'reenable_intro_text' => 'Ayni zamanda giriş rehberi yeniden aktive edebilirsin.', + 'intro_boxes_after_refresh' => 'Sayfayı yenilediğinizde tanıtım kutuları yeniden görünecektir.', + 'show_all_no_filter' => 'Tüm işlemleri, tarihe göre gruplamadan gösterin.', + 'expenses_by_category' => 'Kategoriye göre giderler', + 'expenses_by_budget' => 'Bütçeye göre giderler', + 'income_by_category' => 'Kategoriye göre gelir', + 'expenses_by_asset_account' => 'Varlık hesabına göre giderler', + 'expenses_by_expense_account' => 'Gider hesabına göre giderler', + 'cannot_redirect_to_account' => 'Firefly III sizi doğru sayfaya yönlendiremiyor. Özür dileriz.', + 'sum_of_expenses' => 'Giderlerin Toplamı', + 'sum_of_income' => 'Gelirin Toplamı', + 'liabilities' => 'Yükümlülükler', + 'spent_in_specific_budget' => 'Miktar ":budget" harcandı', + 'spent_in_specific_double' => '":account" hesabında harcandı', + 'earned_in_specific_double' => '":account" tarafından kazanıldı', + 'source_account' => 'Kaynak hesap', + 'source_account_reconciliation' => 'Bir mutabakat işleminin kaynak hesabını düzenleyemezsiniz.', + 'destination_account' => 'Hedef hesap', + 'destination_account_reconciliation' => 'Bir mutabakat işleminin hedef hesabını düzenleyemezsiniz.', + 'sum_of_expenses_in_budget' => 'Harcanan toplam bütçe ":budget"', + 'left_in_budget_limit' => 'Bütçeye göre harcama ayrıldı', + 'current_period' => 'Cari dönem', + 'show_the_current_period_and_overview' => 'Geçerli periyodu ve genel bakışı göster', + 'pref_languages_locale' => 'İngilizce dışındaki bir dilin düzgün çalışması için, işletim sisteminizin doğru yerel ayar bilgileri ile donatılmış olmalıdır. Aksi halde, tarih, para birim verileri ve tutarı yanlış gösterilebilir.', + 'budget_in_period' => '":name" bütçesi için :start ve :end aralığında yapılan :currency işlemleri', + 'chart_budget_in_period' => '":name" bütçesi için :start ve :end aralığında yapılan :currency işlemlerin grafiği', + 'chart_budget_in_period_only_currency' => 'Bütçe miktarı :currency dövizinde, dolayısı ile bu grafik sadece :currency dövizinde yapılan işlemleri gösterir.', + 'chart_account_in_period' => '":name" (:balance) hesabı için :start ve :end arasındaki tüm işlemler için grafik', + 'chart_category_in_period' => ':start ve :end arasında ":name" kategorisindeki bütün işlemler için grafik', + 'chart_category_all' => '":name" kategorisinde bütün işlemler çizelgesi', + 'clone_withdrawal' => 'Bu para çekimini klonla', + 'clone_deposit' => 'Bu depozitoyu klonla', + 'clone_transfer' => 'Bu transferi kopyala', + 'multi_select_no_selection' => 'Hiçbiri seçilmedi', + 'multi_select_select_all' => 'Tümünü seç', + 'multi_select_n_selected' => 'seçili', + 'multi_select_all_selected' => 'Tümü seçildi', + 'multi_select_filter_placeholder' => 'Bul..', + 'intro_next_label' => 'Sonraki', + 'intro_prev_label' => 'Önceki', + 'intro_skip_label' => 'Atla', + 'intro_done_label' => 'Bitti', + 'between_dates_breadcrumb' => ':start ve :end arasında', + 'all_journals_without_budget' => 'Bütçesiz tüm işlemler', + 'journals_without_budget' => 'Bütçesiz İşlemler', + 'all_journals_without_category' => 'Kategorisiz tüm işlemler', + 'journals_without_category' => 'Kategorisiz işlemler', + 'all_journals_for_account' => ':name hesabındaki tüm işlemler', + 'chart_all_journals_for_account' => ':name hesabındaki tüm işlemlerin grafiği', + 'journals_in_period_for_account' => ':start ile :end tarihleri arasında :name hesabından yapılan tüm işlemler', + 'journals_in_period_for_account_js' => '{title} hesabı için {start} ile {end} arasındaki tüm işlemler', + 'transferred' => 'Transfer yapıldı', + 'all_withdrawal' => 'Tüm giderler', + 'all_transactions' => 'Tüm işlemler', + 'title_withdrawal_between' => 'Başlangıç ve Bitiş arasındaki tüm harcamalar', + 'all_deposit' => 'Toplam varlık', + 'title_deposit_between' => 'Başlangıç ve Bitiş arasındaki tüm gelir', + 'all_transfers' => 'Tüm transferler', + 'title_transfers_between' => ':start ile :end tarihleri arasındaki tüm işlemler', + 'all_transfer' => 'Tüm transferler', + 'all_journals_for_tag' => '":tag" etiketiyle yapılan tüm işlemler', + 'title_transfer_between' => ':start ile :end tarihleri arasındaki tüm işlemler', + 'all_journals_for_category' => '":name" kategorisindeki tüm işlemler', + 'all_journals_for_budget' => '":name" bütçesindeki tüm işlemler', + 'chart_all_journals_for_budget' => ':name bütçesindeki tüm işlemlerin grafiği', + 'journals_in_period_for_category' => ':start ile :end tarihleri arasında :name kategorisinde yapılan tüm işlemler', + 'journals_in_period_for_tag' => ':start ile :end tarihleri arasında :tag etiketiyle yapılan tüm işlemler', + 'not_available_demo_user' => 'Erişmeye çalıştığınız özellik, demo kullanıcıları tarafından kullanılamaz.', + 'exchange_rate_instructions' => '"@name" varlık hesabı yalnızca @native_currency\'daki işlemleri kabul eder. Bunun yerine @foreign_currency\'u kullanmak istiyorsanız, @native_currency\'daki karşılığının da bilinmesini sağlayın:', + 'transfer_exchange_rate_instructions' => 'Kaynak varlık hesabı "@source_name" sadece @soruce_currency işlemlerini kabul eder. Hedef varlık hesabı "@dest_name" sadece @dest_currency işlemlerini kabul eder. Aktarılan tutarı her iki para biriminde de doğru olarak girmeniz gerekir.', + 'transaction_data' => 'İşlem Verileri', + 'invalid_server_configuration' => 'Geçersiz sunucu yapılandırması', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Hızlı anahtar', + 'sign_in_to_start' => 'Oturumu başlatmak için giriş yapın', + 'sign_in' => 'Oturum aç', + 'register_new_account' => 'Yeni hesap kaydı', + 'forgot_my_password' => 'Şifremi unuttum', + 'problems_with_input' => 'Girişinizle ilgili bazı problemler var.', + 'reset_password' => 'Şifreni sıfırla', + 'button_reset_password' => 'Parolayı Sıfırla', + 'reset_button' => 'Sıfırla', + 'want_to_login' => 'Giriş yapmak istiyorum', + 'login_page_title' => 'Firefly III\'e giriş yapın', + 'register_page_title' => 'Firefly III\'e kayıt olun', + 'forgot_pw_page_title' => 'Firefly III için şifrenizi mi unuttunuz', + 'reset_pw_page_title' => 'Firefly III şifrenizi sıfırlayın', + 'cannot_reset_demo_user' => 'Demo kullanıcısının şifresini sıfırlayamazsınız.', + 'no_att_demo_user' => 'Demo kullanıcısı ekleri yükleyemez.', + 'button_register' => 'Kayıt ol', + 'authorization' => 'Yetkilendirme', + 'active_bills_only' => 'sadece aktif faturalar', + 'active_bills_only_total' => 'tüm aktif faturalar', + 'active_exp_bills_only' => 'sadece aktif ve beklenen faturalar', + 'active_exp_bills_only_total' => 'yalnızca tüm etkin beklenen faturalar', + 'per_period_sum_1D' => 'Beklenen günlük maliyetler', + 'per_period_sum_1W' => 'Beklenen haftalık maliyetler', + 'per_period_sum_1M' => 'Beklenen aylık maliyetler', + 'per_period_sum_3M' => 'Beklenen üç aylık maliyetler', + 'per_period_sum_6M' => 'Beklenen yarı yıllık maliyetler', + 'per_period_sum_1Y' => 'Beklenen yıllık maliyetler', + 'average_per_bill' => 'fatura başına ortalama', + 'expected_total' => 'beklenen toplam', + 'reconciliation_account_name' => ':name mutabakatı (:currency)', + 'saved' => 'Kaydedildi', + 'advanced_options' => 'Gelişmiş Ayarlar', + 'advanced_options_explain' => 'Firefly III\'teki bazı sayfalarda bu düğmenin arkasına gizlenmiş gelişmiş seçenekler bulunur. Bu sayfanın burada süslü bir yanı yok, ama diğerlerine bir göz atın!', + 'here_be_dragons' => 'İşte ejderhalar', // Webhooks - 'webhooks' => 'Web kancaları', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Web kancaları', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', + 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', + 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', + 'webhook_response_TRANSACTIONS' => 'Transaction details', + 'webhook_response_ACCOUNTS' => 'Account details', + 'webhook_response_none_NONE' => 'No details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Inspect', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => 'View message', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => 'Logs', + 'response' => 'Response', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Firefly III v: version Yetkilendirme İsteği', - 'authorization_request_intro' => '":client" uygulaması, mali yönetiminize erişmek için izin istiyor. Bu kayıtlara erişmesi için :client\'e yetki vermek ister misiniz?', - 'authorization_request_site' => 'Firefly III verilerinize erişebilecek olan :url adresine yönlendirileceksiniz.', - 'authorization_request_invalid' => 'Bu erişim isteği geçersiz. Lütfen bu bağlantıyı bir daha asla takip etmeyin.', - 'scopes_will_be_able' => 'Bu uygulama şunları yapabilir:', - 'button_authorize' => 'İzin ver', - 'none_in_select_list' => '(Yok)', - 'no_piggy_bank' => '(kumbara bankası yok)', - 'name_in_currency' => ':name :currency', - 'paid_in_currency' => ':currency olarak ödenen', - 'unpaid_in_currency' => ':currency olarak ödenmeyen', - 'is_alpha_warning' => 'Bir ALPHA sürümü çalıştırıyorsunuz. Hatalara ve sorunlara karşı dikkatli olun.', - 'is_beta_warning' => 'Bir BETA sürümünü çalıştırıyorsunuz. Hatalara ve sorunlara karşı dikkatli olun.', - 'all_destination_accounts' => 'Hedef Hesap(lar)', - 'all_source_accounts' => 'Kaynak Hesap', - 'back_to_index' => 'Dizine geri dön', - 'cant_logout_guard' => 'Firefly III oturumunuzu kapatamaz.', - 'internal_reference' => 'Dahili referans', + 'authorization_request' => 'Firefly III v: version Yetkilendirme İsteği', + 'authorization_request_intro' => '":client" uygulaması, mali yönetiminize erişmek için izin istiyor. Bu kayıtlara erişmesi için :client\'e yetki vermek ister misiniz?', + 'authorization_request_site' => 'Firefly III verilerinize erişebilecek olan :url adresine yönlendirileceksiniz.', + 'authorization_request_invalid' => 'Bu erişim isteği geçersiz. Lütfen bu bağlantıyı bir daha asla takip etmeyin.', + 'scopes_will_be_able' => 'Bu uygulama şunları yapabilir:', + 'button_authorize' => 'İzin ver', + 'none_in_select_list' => '(Yok)', + 'no_piggy_bank' => '(kumbara bankası yok)', + 'name_in_currency' => ':name :currency', + 'paid_in_currency' => ':currency olarak ödenen', + 'unpaid_in_currency' => ':currency olarak ödenmeyen', + 'is_alpha_warning' => 'Bir ALPHA sürümü çalıştırıyorsunuz. Hatalara ve sorunlara karşı dikkatli olun.', + 'is_beta_warning' => 'Bir BETA sürümünü çalıştırıyorsunuz. Hatalara ve sorunlara karşı dikkatli olun.', + 'all_destination_accounts' => 'Hedef Hesap(lar)', + 'all_source_accounts' => 'Kaynak Hesap', + 'back_to_index' => 'Dizine geri dön', + 'cant_logout_guard' => 'Firefly III oturumunuzu kapatamaz.', + 'internal_reference' => 'Dahili referans', // check for updates: - 'update_check_title' => 'Güncellemeleri kontrol et', - 'admin_update_check_title' => 'Güncellemeleri otomatik olarak kontrol et', - 'admin_update_check_explain' => 'Firefly III, güncellemeleri otomatik olarak kontrol edebilir. Bu ayarı etkinleştirdiğinizde, Firefly III\'ün yeni bir sürümünün mevcut olup olmadığını görmek için Firefly III güncelleme sunucusuyla iletişime geçecektir. Olduğunda, bir bildirim alacaksınız. Bu bildirimi sağdaki düğmeyi kullanarak test edebilirsiniz. Firefly III\'ün güncellemeleri kontrol etmesini istiyorsanız lütfen aşağıda belirtin.', - 'check_for_updates_permission' => 'Firefly III güncellemeleri kontrol edebilir, ancak bunu yapmak için izniniz gerekir. Bu özelliğin etkinleştirilmesini isteyip istemediğinizi belirtmek için lütfen yönetim bölümüne gidin.', - 'updates_ask_me_later' => 'Daha sonra sor', - 'updates_do_not_check' => 'Güncelleştirmeleri kontrol ETME', - 'updates_enable_check' => 'Güncelleme kontrolünü etkinleştir', - 'admin_update_check_now_title' => 'Güncellemeleri kontrol et', - 'admin_update_check_now_explain' => 'Düğmeye basarsanız, Firefly III geçerli sürümünüzün en son olup olmadığını görür.', - 'check_for_updates_button' => 'Kontrol Et!', - 'update_new_version_alert' => 'Firefly III\'ün yeni versiyonu mevcut. Şuan kullandığınız :your_version, son versiyon ise :date tarihinde yayınlanan :new_version versiyonu.', - 'update_version_beta' => 'Bu bir BETA versiyonudur. Bazı hatalar ile karşılaşabilirsiniz.', - 'update_version_alpha' => 'Bu bir ALPHA versiyonudur. Bazı hatalar ile karşılaşabilirsiniz.', - 'update_current_version_alert' => 'En son mevcut olan :version versiyonunu kullanıyorsunuz.', - 'update_newer_version_alert' => 'Son mevcut olan :new_version versiyonundan daha yeni olan :your_version versiyonu kullanıyorsunuz.', - 'update_check_error' => 'Güncellemeler kontrol edilirken bir hata oluştu: :error', - 'unknown_error' => 'Bilinmeyen hata. Bunun için üzgünüm.', - 'just_new_release' => 'Eni bir sürüm mevcut! Sürüm :version yayınlandı :date. Bu sürüm çok taze. Yeni sürümün stabilize olması için birkaç gün bekleyin.', - 'disabled_but_check' => 'Güncelleme kontrolünü devre dışı bıraktınız. Bu nedenle, ara sıra güncellemeleri kendiniz kontrol etmeyi unutmayın. Teşekkürler!', - 'admin_update_channel_title' => 'Güncelleme kanalı', - 'admin_update_channel_explain' => 'Firefly III 3 adet güncelleme kanalına sahiptir. Bu kanallar sizin özellikler, geliştirmeler ve hatalar ile ilgili ne kadar önde olduğunuzu belirler. Maceracası iseniz "beta", tehlikeli yaşamayı seviyorsanız "alpha" versiyonunu kullanın.', - 'update_channel_stable' => 'Stabil. Herşey olması gerektiği gibi.', - 'update_channel_beta' => 'Beta. Yeni özellikler fakat bazı şeyler bozulabilir.', - 'update_channel_alpha' => 'Alpha. İçine ne bulursak atıp, uygun olanı kullanıyoruz.', + 'update_check_title' => 'Güncellemeleri kontrol et', + 'admin_update_check_title' => 'Güncellemeleri otomatik olarak kontrol et', + 'admin_update_check_explain' => 'Firefly III, güncellemeleri otomatik olarak kontrol edebilir. Bu ayarı etkinleştirdiğinizde, Firefly III\'ün yeni bir sürümünün mevcut olup olmadığını görmek için Firefly III güncelleme sunucusuyla iletişime geçecektir. Olduğunda, bir bildirim alacaksınız. Bu bildirimi sağdaki düğmeyi kullanarak test edebilirsiniz. Firefly III\'ün güncellemeleri kontrol etmesini istiyorsanız lütfen aşağıda belirtin.', + 'check_for_updates_permission' => 'Firefly III güncellemeleri kontrol edebilir, ancak bunu yapmak için izniniz gerekir. Bu özelliğin etkinleştirilmesini isteyip istemediğinizi belirtmek için lütfen yönetim bölümüne gidin.', + 'updates_ask_me_later' => 'Daha sonra sor', + 'updates_do_not_check' => 'Güncelleştirmeleri kontrol ETME', + 'updates_enable_check' => 'Güncelleme kontrolünü etkinleştir', + 'admin_update_check_now_title' => 'Güncellemeleri kontrol et', + 'admin_update_check_now_explain' => 'Düğmeye basarsanız, Firefly III geçerli sürümünüzün en son olup olmadığını görür.', + 'check_for_updates_button' => 'Kontrol Et!', + 'update_new_version_alert' => 'Firefly III\'ün yeni versiyonu mevcut. Şuan kullandığınız :your_version, son versiyon ise :date tarihinde yayınlanan :new_version versiyonu.', + 'update_version_beta' => 'Bu bir BETA versiyonudur. Bazı hatalar ile karşılaşabilirsiniz.', + 'update_version_alpha' => 'Bu bir ALPHA versiyonudur. Bazı hatalar ile karşılaşabilirsiniz.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'En son mevcut olan :version versiyonunu kullanıyorsunuz.', + 'update_newer_version_alert' => 'Son mevcut olan :new_version versiyonundan daha yeni olan :your_version versiyonu kullanıyorsunuz.', + 'update_check_error' => 'Güncellemeler kontrol edilirken bir hata oluştu: :error', + 'unknown_error' => 'Bilinmeyen hata. Bunun için üzgünüm.', + 'disabled_but_check' => 'Güncelleme kontrolünü devre dışı bıraktınız. Bu nedenle, ara sıra güncellemeleri kendiniz kontrol etmeyi unutmayın. Teşekkürler!', + 'admin_update_channel_title' => 'Güncelleme kanalı', + 'admin_update_channel_explain' => 'Firefly III 3 adet güncelleme kanalına sahiptir. Bu kanallar sizin özellikler, geliştirmeler ve hatalar ile ilgili ne kadar önde olduğunuzu belirler. Maceracası iseniz "beta", tehlikeli yaşamayı seviyorsanız "alpha" versiyonunu kullanın.', + 'update_channel_stable' => 'Stabil. Herşey olması gerektiği gibi.', + 'update_channel_beta' => 'Beta. Yeni özellikler fakat bazı şeyler bozulabilir.', + 'update_channel_alpha' => 'Alpha. İçine ne bulursak atıp, uygun olanı kullanıyoruz.', // search - 'search' => 'Ara', - 'search_query' => 'Sorgu', - 'search_found_transactions' => 'Firefly III bulundu :count :time saniye cinsinden sayar.|Firefly III bulundu :count :time saniye cinsinden sayar.', - 'search_found_more_transactions' => 'Firefly III, :time saniye cinsinden :count işlemlerinden fazlasını buldu.', - 'search_for_query' => 'Firefly III şu kelimelerin hepsini içeren hareketleri arıyor: :query', - 'invalid_operators_list' => 'Bu arama parametreleri geçerli değil ve yok sayıldı.', + 'search' => 'Ara', + 'search_query' => 'Sorgu', + 'search_found_transactions' => 'Firefly III bulundu :count :time saniye cinsinden sayar.|Firefly III bulundu :count :time saniye cinsinden sayar.', + 'search_found_more_transactions' => 'Firefly III, :time saniye cinsinden :count işlemlerinden fazlasını buldu.', + 'search_for_query' => 'Firefly III şu kelimelerin hepsini içeren hareketleri arıyor: :query', + 'invalid_operators_list' => 'Bu arama parametreleri geçerli değil ve yok sayıldı.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -350,7 +352,6 @@ return [ * */ - 'search_modifier_date_on' => 'Transaction date is ":value"', 'search_modifier_not_date_on' => 'Transaction date is not ":value"', 'search_modifier_reconciled' => 'Transaction is reconciled', @@ -469,6 +470,10 @@ return [ 'search_modifier_transaction_type' => 'İşlem türü ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Etiket şu şekildedir:value', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -483,7 +488,6 @@ return [ 'search_modifier_date_after_month' => 'İşlem ay içinde veya sonrasında ":value"', 'search_modifier_date_after_day' => 'İşlem, ayın sonunda veya gününde gerçekleşir ":value"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -711,7 +715,7 @@ return [ 'create_rule_from_query' => 'Arama sorgusundan yeni kural oluşturma', 'rule_from_search_words' => 'Kural altyapısı ":string" işlemekte zorlanıyor. Arama sorgunuza uyan önerilen kural farklı sonuçlar verebilir. Lütfen kural tetikleyicilerini dikkatlice doğrulayın.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -722,7 +726,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Aşağıdaki değiştiriciler arama için de uygulanır:', 'general_search_error' => 'Arama yaparken hata oluştu. Lütfen daha fazla bilgi için kütük dosyalarına göz atınız.', @@ -748,6 +751,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'Etkin olmayan kuralları yürütemezsiniz.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Kurallar', 'rule_name' => 'Kural adı', 'rule_triggers' => 'Kural ne zaman etkinleşir', @@ -815,7 +820,6 @@ return [ 'rule_trigger_update_journal' => 'Bir işlem güncellendiğinde', 'rule_trigger_user_action' => 'Kullanıcı işlemi ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Kaynak hesap adı ile başlar..', 'rule_trigger_source_account_starts' => 'Kaynak hesap adı şununla başlar ":trigger_value"', @@ -893,6 +897,12 @@ return [ 'rule_trigger_budget_is' => 'Bütçe ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'İşlem dövizi..', 'rule_trigger_currency_is' => 'İşlem dövizi ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'İşlem dövizdir..', @@ -1194,7 +1204,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1210,7 +1220,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1221,7 +1231,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1278,6 +1287,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Fatura kuralı grubu', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1287,252 +1298,253 @@ return [ 'new_rule_for_bill_title' => 'Fatura için kural ":name"', 'new_rule_for_bill_description' => 'Bu kural fatura işlemlerini işaretler ":name".', - 'new_rule_for_journal_title' => 'İşleme dayalı kural ":description"', - 'new_rule_for_journal_description' => 'Bu kural işleme dayanmaktadır ":description". Tam olarak aynı olan işlemlerle eşleşecektir.', + 'new_rule_for_journal_title' => 'İşleme dayalı kural ":description"', + 'new_rule_for_journal_description' => 'Bu kural işleme dayanmaktadır ":description". Tam olarak aynı olan işlemlerle eşleşecektir.', // tags - 'store_new_tag' => 'Yeni etiket kaydet', - 'update_tag' => 'Etiketi Güncelle', - 'no_location_set' => 'Konum ayarlanamadı.', - 'meta_data' => 'Meta veri', - 'location' => 'Konum', - 'without_date' => 'Tarihsiz', - 'result' => 'Sonuç', - 'sums_apply_to_range' => 'Tüm toplamlar seçili aralıkta geçerlidir', - 'mapbox_api_key' => 'Map\'i kullanmak için şu adresten bir API anahtarı alın: Mapbox. Seninkini aç .env dosyalayın ve sonra bu kodu girin MAPBOX_API_KEY=.', - 'press_object_location' => 'Nesnenin konumunu ayarlamak için sağ tıklayın veya uzun basın.', - 'clear_location' => 'Konumu temizle', - 'delete_all_selected_tags' => 'Seçili tüm etiketleri sil', - 'select_tags_to_delete' => 'Bazı etiketler seçmeyi unutmayın.', - 'deleted_x_tags' => 'Silmek :count etiket.|Silmek :count etiket.', - 'create_rule_from_transaction' => 'İşleme dayalı kural oluşturma', - 'create_recurring_from_transaction' => 'İşleme dayalı yinelenen işlem oluşturma', - + 'store_new_tag' => 'Yeni etiket kaydet', + 'update_tag' => 'Etiketi Güncelle', + 'no_location_set' => 'Konum ayarlanamadı.', + 'meta_data' => 'Meta veri', + 'location' => 'Konum', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Tarihsiz', + 'result' => 'Sonuç', + 'sums_apply_to_range' => 'Tüm toplamlar seçili aralıkta geçerlidir', + 'mapbox_api_key' => 'Map\'i kullanmak için şu adresten bir API anahtarı alın: Mapbox. Seninkini aç .env dosyalayın ve sonra bu kodu girin MAPBOX_API_KEY=.', + 'press_object_location' => 'Nesnenin konumunu ayarlamak için sağ tıklayın veya uzun basın.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Konumu temizle', + 'delete_all_selected_tags' => 'Seçili tüm etiketleri sil', + 'select_tags_to_delete' => 'Bazı etiketler seçmeyi unutmayın.', + 'deleted_x_tags' => 'Silmek :count etiket.|Silmek :count etiket.', + 'create_rule_from_transaction' => 'İşleme dayalı kural oluşturma', + 'create_recurring_from_transaction' => 'İşleme dayalı yinelenen işlem oluşturma', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(dile eşit)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Ana ekran hesapları', - 'pref_home_screen_accounts_help' => 'Giriş sayfasında hangi hesaplar görüntülensin?', - 'pref_view_range' => 'Görüş Mesafesi', - 'pref_view_range_help' => 'Bazı grafikler otomatik olarak dönemler halinde gruplandırılır. Bütçeleriniz de dönemlere göre gruplandırılacaktır. Hangi dönemi tercih edersin?', - 'pref_1D' => 'Bir gün', - 'pref_1W' => 'Bir hafta', - 'pref_1M' => 'Bir ay', - 'pref_3M' => 'Üç ay (çeyrek)', - 'pref_6M' => 'Altı ay', - 'pref_1Y' => 'Bir yıl', - 'pref_last365' => 'Geçen yıl', - 'pref_last90' => 'Son 90 gün', - 'pref_last30' => 'Son 30 gün', - 'pref_last7' => 'Son 7 gün', - 'pref_YTD' => 'Yıldan bugüne', - 'pref_QTD' => 'Bugüne kadar tarih', - 'pref_MTD' => 'Bugüne kadar ay', - 'pref_languages' => 'Diller', - 'pref_locale' => 'Yerel ayarlar', - 'pref_languages_help' => 'Firefly III birçok dili destekliyor. Hangisini tercih edersiniz?', - 'pref_locale_help' => 'Firefly III, para birimlerinin, sayıların ve tarihlerin nasıl biçimlendirildiği gibi diğer yerel ayarları ayarlamanıza olanak tanır. Bu listedeki girdiler sisteminiz tarafından desteklenmeyebilir. Firefly III her yerel ayar için doğru tarih ayarlarına sahip değil; iyileştirmeler için bana ulaşın.', - 'pref_locale_no_demo' => 'Bu özellik demo kullanıcısı için çalışmaz.', - 'pref_custom_fiscal_year' => 'Mali yıl ayarları', - 'pref_custom_fiscal_year_label' => 'Etkin', - 'pref_custom_fiscal_year_help' => '1 Ocak - 31 Aralık arasındaki bir mali yılı kullanan ülkelerde bu ayarı açabilir ve mali yılın başlangıç / bitiş günlerini belirleyebilirsiniz', - 'pref_fiscal_year_start_label' => 'Mali yıl başlangıç tarihi', - 'pref_two_factor_auth' => '2 adımlı doğrulama', - 'pref_two_factor_auth_help' => '2 adımlı doğrulamayı etkinleştirdiğinizde (iki faktörlü kimlik doğrulama olarak da bilinir) hesabınıza fazladan bir güvenlik katmanı eklersiniz. Bildiğiniz bir şeyle (şifreniz) ve sahip olduğunuz bir şeyle(doğrulama kodu) ile giriş yaparsınız. Doğrulama kodları telefonunuzda Authy ya da Google Authenticator gibi bir uygulama tarafından oluşturulur.', - 'pref_enable_two_factor_auth' => '2 adımlı doğrulamayı etkinleştir', - 'pref_two_factor_auth_disabled' => '2 adımlı doğrulama kodu kaldırıldı ve devre dışı bırakıldı', - 'pref_two_factor_auth_remove_it' => 'Kimlik hesabı doğrulama uygulaması için çıkış yapmayı unutmayın!', - 'pref_two_factor_auth_code' => 'Doğrulama kodu', - 'pref_two_factor_auth_code_help' => 'QR kodunu, telefonunuzda Authy veya Authenticator uygulamalarında bulun ve oluşturulan kodu girin.', - 'pref_two_factor_auth_reset_code' => 'Doğrulama kodunu sıfırla', - 'pref_two_factor_auth_disable_2fa' => '2FA\'yı kapatın', - '2fa_use_secret_instead' => 'QR kodunu tarayamıyorsanız, bunun yerine sırrı kullanmaktan çekinmeyin: :secret.', - '2fa_backup_codes' => 'Cihazınızı kaybetmeniz durumunda erişim için bu yedekleme kodlarını saklayın.', - '2fa_already_enabled' => '2 adımlı doğrulama zaten etkindir.', - 'wrong_mfa_code' => 'Bu MFA kodu geçerli değil.', - 'pref_save_settings' => 'Ayarları kaydet', - 'saved_preferences' => 'Tercihler kaydedildi!', - 'preferences_general' => 'Genel', - 'preferences_frontpage' => 'Ana ekran', - 'preferences_security' => 'Güvenlik', - 'preferences_layout' => 'Düzen', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Ana ekranda mevduat göster', - 'pref_home_show_deposits_info' => 'Ana ekranınızda hesaplarınız zaten görüntülenir. Gelir hesaplarınız da görüntülensin mi?', - 'pref_home_do_show_deposits' => 'Evet, onlara göster', - 'successful_count' => ':count bunlar başarılı oldu', - 'list_page_size_title' => 'Sayfa boyutu', - 'list_page_size_help' => 'Herhangi bir şeyin listesi (hesaplar, işlemler, vb) sayfa başına en fazla bu kadar gösterebilir.', - 'list_page_size_label' => 'Sayfa boyutu', - 'between_dates' => '(:start ​ve :end)', - 'pref_optional_fields_transaction' => 'İşlemler için bağlı alanlar', - 'pref_optional_fields_transaction_help' => 'Yeni bir işlem oluşturulurken (dağınıklık nedeniyle) varsayılan olarak tüm alanlar ektinleştirilmez. Aşağıdan, eğer işinize yarayacağını düşünüyorsanız bu alanları ektinleştirebilirsiniz. Tabii ki, devre dışı bırakılmış ama zaten doldurulmuş alanlar ayarlar ne olursa olsun görünecektir.', - 'optional_tj_date_fields' => 'Tarih alanları', - 'optional_tj_other_fields' => 'Diğer alanlar', - 'optional_tj_attachment_fields' => 'Ek alanları', - 'pref_optional_tj_interest_date' => 'Faiz tarihi', - 'pref_optional_tj_book_date' => 'Kitap tarihi', - 'pref_optional_tj_process_date' => 'İşlem tarihi', - 'pref_optional_tj_due_date' => 'Bitiş tarihi', - 'pref_optional_tj_payment_date' => 'Ödeme tarihi', - 'pref_optional_tj_invoice_date' => 'Fatura tarihi', - 'pref_optional_tj_internal_reference' => 'Dahili referans', - 'pref_optional_tj_notes' => 'Notlar', - 'pref_optional_tj_attachments' => 'Ekler', - 'pref_optional_tj_external_url' => 'Dış URL', - 'pref_optional_tj_location' => 'Konum', - 'pref_optional_tj_links' => 'İşlem bağlantıları', - 'optional_field_meta_dates' => 'Tarih', - 'optional_field_meta_business' => 'İş', - 'optional_field_attachments' => 'Ekler', - 'optional_field_meta_data' => 'İsteğe bağlı meta veriler', - 'external_url' => 'Harici URL', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(dile eşit)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Ana ekran hesapları', + 'pref_home_screen_accounts_help' => 'Giriş sayfasında hangi hesaplar görüntülensin?', + 'pref_view_range' => 'Görüş Mesafesi', + 'pref_view_range_help' => 'Bazı grafikler otomatik olarak dönemler halinde gruplandırılır. Bütçeleriniz de dönemlere göre gruplandırılacaktır. Hangi dönemi tercih edersin?', + 'pref_1D' => 'Bir gün', + 'pref_1W' => 'Bir hafta', + 'pref_1M' => 'Bir ay', + 'pref_3M' => 'Üç ay (çeyrek)', + 'pref_6M' => 'Altı ay', + 'pref_1Y' => 'Bir yıl', + 'pref_last365' => 'Geçen yıl', + 'pref_last90' => 'Son 90 gün', + 'pref_last30' => 'Son 30 gün', + 'pref_last7' => 'Son 7 gün', + 'pref_YTD' => 'Yıldan bugüne', + 'pref_QTD' => 'Bugüne kadar tarih', + 'pref_MTD' => 'Bugüne kadar ay', + 'pref_languages' => 'Diller', + 'pref_locale' => 'Yerel ayarlar', + 'pref_languages_help' => 'Firefly III birçok dili destekliyor. Hangisini tercih edersiniz?', + 'pref_locale_help' => 'Firefly III, para birimlerinin, sayıların ve tarihlerin nasıl biçimlendirildiği gibi diğer yerel ayarları ayarlamanıza olanak tanır. Bu listedeki girdiler sisteminiz tarafından desteklenmeyebilir. Firefly III her yerel ayar için doğru tarih ayarlarına sahip değil; iyileştirmeler için bana ulaşın.', + 'pref_locale_no_demo' => 'Bu özellik demo kullanıcısı için çalışmaz.', + 'pref_custom_fiscal_year' => 'Mali yıl ayarları', + 'pref_custom_fiscal_year_label' => 'Etkin', + 'pref_custom_fiscal_year_help' => '1 Ocak - 31 Aralık arasındaki bir mali yılı kullanan ülkelerde bu ayarı açabilir ve mali yılın başlangıç / bitiş günlerini belirleyebilirsiniz', + 'pref_fiscal_year_start_label' => 'Mali yıl başlangıç tarihi', + 'pref_two_factor_auth' => '2 adımlı doğrulama', + 'pref_two_factor_auth_help' => '2 adımlı doğrulamayı etkinleştirdiğinizde (iki faktörlü kimlik doğrulama olarak da bilinir) hesabınıza fazladan bir güvenlik katmanı eklersiniz. Bildiğiniz bir şeyle (şifreniz) ve sahip olduğunuz bir şeyle(doğrulama kodu) ile giriş yaparsınız. Doğrulama kodları telefonunuzda Authy ya da Google Authenticator gibi bir uygulama tarafından oluşturulur.', + 'pref_enable_two_factor_auth' => '2 adımlı doğrulamayı etkinleştir', + 'pref_two_factor_auth_disabled' => '2 adımlı doğrulama kodu kaldırıldı ve devre dışı bırakıldı', + 'pref_two_factor_auth_remove_it' => 'Kimlik hesabı doğrulama uygulaması için çıkış yapmayı unutmayın!', + 'pref_two_factor_auth_code' => 'Doğrulama kodu', + 'pref_two_factor_auth_code_help' => 'QR kodunu, telefonunuzda Authy veya Authenticator uygulamalarında bulun ve oluşturulan kodu girin.', + 'pref_two_factor_auth_reset_code' => 'Doğrulama kodunu sıfırla', + 'pref_two_factor_auth_disable_2fa' => '2FA\'yı kapatın', + '2fa_use_secret_instead' => 'QR kodunu tarayamıyorsanız, bunun yerine sırrı kullanmaktan çekinmeyin: :secret.', + '2fa_backup_codes' => 'Cihazınızı kaybetmeniz durumunda erişim için bu yedekleme kodlarını saklayın.', + '2fa_already_enabled' => '2 adımlı doğrulama zaten etkindir.', + 'wrong_mfa_code' => 'Bu MFA kodu geçerli değil.', + 'pref_save_settings' => 'Ayarları kaydet', + 'saved_preferences' => 'Tercihler kaydedildi!', + 'preferences_general' => 'Genel', + 'preferences_frontpage' => 'Ana ekran', + 'preferences_security' => 'Güvenlik', + 'preferences_layout' => 'Düzen', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Ana ekranda mevduat göster', + 'pref_home_show_deposits_info' => 'Ana ekranınızda hesaplarınız zaten görüntülenir. Gelir hesaplarınız da görüntülensin mi?', + 'pref_home_do_show_deposits' => 'Evet, onlara göster', + 'successful_count' => ':count bunlar başarılı oldu', + 'list_page_size_title' => 'Sayfa boyutu', + 'list_page_size_help' => 'Herhangi bir şeyin listesi (hesaplar, işlemler, vb) sayfa başına en fazla bu kadar gösterebilir.', + 'list_page_size_label' => 'Sayfa boyutu', + 'between_dates' => "(:start \u{200b}ve :end)", + 'pref_optional_fields_transaction' => 'İşlemler için bağlı alanlar', + 'pref_optional_fields_transaction_help' => 'Yeni bir işlem oluşturulurken (dağınıklık nedeniyle) varsayılan olarak tüm alanlar ektinleştirilmez. Aşağıdan, eğer işinize yarayacağını düşünüyorsanız bu alanları ektinleştirebilirsiniz. Tabii ki, devre dışı bırakılmış ama zaten doldurulmuş alanlar ayarlar ne olursa olsun görünecektir.', + 'optional_tj_date_fields' => 'Tarih alanları', + 'optional_tj_other_fields' => 'Diğer alanlar', + 'optional_tj_attachment_fields' => 'Ek alanları', + 'pref_optional_tj_interest_date' => 'Faiz tarihi', + 'pref_optional_tj_book_date' => 'Kitap tarihi', + 'pref_optional_tj_process_date' => 'İşlem tarihi', + 'pref_optional_tj_due_date' => 'Bitiş tarihi', + 'pref_optional_tj_payment_date' => 'Ödeme tarihi', + 'pref_optional_tj_invoice_date' => 'Fatura tarihi', + 'pref_optional_tj_internal_reference' => 'Dahili referans', + 'pref_optional_tj_notes' => 'Notlar', + 'pref_optional_tj_attachments' => 'Ekler', + 'pref_optional_tj_external_url' => 'Dış URL', + 'pref_optional_tj_location' => 'Konum', + 'pref_optional_tj_links' => 'İşlem bağlantıları', + 'optional_field_meta_dates' => 'Tarih', + 'optional_field_meta_business' => 'İş', + 'optional_field_attachments' => 'Ekler', + 'optional_field_meta_data' => 'İsteğe bağlı meta veriler', + 'external_url' => 'Harici URL', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'Diğer tüm oturumlarınız kapatıldı.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Diğer tüm seanslarınız kapatıldı', - 'delete_all_categories' => 'TÜM kategorilerinizi silme', - 'delete_all_tags' => 'TÜM etiketlerinizi silin', - 'delete_all_bills' => 'TÜM faturalarınızı silin', - 'delete_all_piggy_banks' => 'TÜM kumbaralarınızı silin', - 'delete_all_rules' => 'TÜM kurallarınızı silin', - 'delete_all_recurring' => 'Yinelenen tüm işlemlerinizi silme', - 'delete_all_object_groups' => 'TÜM nesne gruplarınızı silme', - 'delete_all_accounts' => 'TÜM hesaplarınızı silin', - 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', - 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', - 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', - 'delete_all_liabilities' => 'Delete ALL your liabilities', - 'delete_all_transactions' => 'Delete ALL your transactions', - 'delete_all_withdrawals' => 'Delete ALL your withdrawals', - 'delete_all_deposits' => 'Delete ALL your deposits', - 'delete_all_transfers' => 'Delete ALL your transfers', - 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', - 'deleted_all_budgets' => 'All budgets have been deleted', - 'deleted_all_categories' => 'All categories have been deleted', - 'deleted_all_tags' => 'All tags have been deleted', - 'deleted_all_bills' => 'All bills have been deleted', - 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', - 'deleted_all_rules' => 'All rules and rule groups have been deleted', - 'deleted_all_object_groups' => 'All groups have been deleted', - 'deleted_all_accounts' => 'All accounts have been deleted', - 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', - 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', - 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', - 'deleted_all_liabilities' => 'All liabilities have been deleted', - 'deleted_all_transactions' => 'All transactions have been deleted', - 'deleted_all_withdrawals' => 'All withdrawals have been deleted', - 'deleted_all_deposits' => 'All deposits have been deleted', - 'deleted_all_transfers' => 'All transfers have been deleted', - 'deleted_all_recurring' => 'All recurring transactions have been deleted', - 'change_your_password' => 'Şifrenizi değiştirin', - 'delete_account' => 'Hesabı Sil', - 'current_password' => 'Güncel Şifre', - 'new_password' => 'Yeni Şifre', - 'new_password_again' => 'Yeni Şifre (Tekrar)', - 'delete_your_account' => 'Hesabını Sil', - 'delete_your_account_help' => 'Hesabınızı silmeniz aynı zamanda Firefly III\'e kaydetmiş olabileceğiniz hesapları, işlemleri, her şeyi de silecektir. YOK OLACAK.', - 'delete_your_account_password' => 'Devam etmek için şifrenizi girin.', - 'password' => 'Şifre', - 'are_you_sure' => 'Emin misiniz? Bunu geri alamazsınız.', - 'delete_account_button' => 'Hesabını Sil', - 'invalid_current_password' => 'Geçersiz Şifre!', - 'password_changed' => 'Şifre değiştirildi!', - 'should_change' => 'Amaç, şifrenizi değiştirmenizdir.', - 'invalid_password' => 'Geçersiz şifre!', - 'what_is_pw_security' => '\'\'Doğrulama şifresi güvenliği\'\' nedir?', - 'secure_pw_title' => 'Güvenli şifre nasıl seçilir?', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => 'Not a week goes by that you read in the news about a site losing the passwords of its users. Hackers and thieves use these passwords to try to steal your private information. This information is valuable.', - 'secure_pw_ff' => 'Do you use the same password all over the internet? If one site loses your password, hackers have access to all your data. Firefly III relies on you to choose a strong and unique password to protect your financial records.', - 'secure_pw_check_box' => 'To help you do that Firefly III can check if the password you want to use has been stolen in the past. If this is the case, Firefly III advises you NOT to use that password.', - 'secure_pw_working_title' => 'How does it work?', - 'secure_pw_working' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', - 'secure_pw_should' => 'Kutuyu kontrol etmeli miyim?', - 'secure_pw_long_password' => 'Yes. Always verify your password is safe.', - 'command_line_token' => 'Command line token', - 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', - 'regenerate_command_line_token' => 'Regenerate command line token', - 'token_regenerated' => 'A new command line token was generated', - 'change_your_email' => 'E-posta adresini değiştir', - 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', - 'email_changed_logout' => 'E-posta adresinizi doğrulayana kadar giriş yapamazsınız.', - 'login_with_new_email' => 'Artık yeni e-posta adresinizle giriş yapabilirsiniz.', - 'login_with_old_email' => 'Artık eski e-posta adresinizle yeniden giriş yapabilirsiniz.', - 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', - 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', - 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', - 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Clients', - 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Client ID', - 'profile_oauth_client_name' => 'Name', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Create New Client', - 'profile_oauth_create_client' => 'Müşteri Oluştur', - 'profile_oauth_edit_client' => 'İstemciyi Düzenle', - 'profile_oauth_name_help' => 'Kullanıcılarınızın tanıyacağı ve güveneceği bir şey.', - 'profile_oauth_redirect_url' => 'URL\'yi yönlendir', - 'profile_oauth_redirect_url_help' => 'Uygulamanızın yetkilendirme geri arama URL\'si.', - 'profile_authorized_apps' => 'Yetkili uygulamalar', - 'profile_authorized_clients' => 'Yetkili müşteriler', - 'profile_scopes' => 'Kapsamalar', - 'profile_revoke' => 'İptal etmek', - 'profile_oauth_client_secret_title' => 'Müşteri Sırrı', - 'profile_oauth_client_secret_expl' => 'İşte yeni müşteri sırrın. Bu gösterilecek tek zaman, bu yüzden onu kaybetme! Artık API istekleri yapmak için bu sırrı kullanabilirsiniz.', - 'profile_personal_access_tokens' => 'Kişisel Erişim Belirteçleri', - 'profile_personal_access_token' => 'Kişisel Erişim Belirteci', - 'profile_oauth_confidential' => 'Gizli', - 'profile_oauth_confidential_help' => 'İstemcinin bir sır ile kimlik doğrulaması yapmasını isteyin. Gizli müşteriler, kimlik bilgilerini yetkisiz taraflara ifşa etmeden güvenli bir şekilde saklayabilir. Yerel masaüstü veya JavaScript SPA uygulamaları gibi genel uygulamalar sırları güvenli bir şekilde saklayamaz.', - 'profile_personal_access_token_explanation' => 'İşte yeni kişisel erişim belirteciniz. Bu gösterilecek tek zaman, bu yüzden onu kaybetme! Artık API istekleri yapmak için bu belirtecini kullanabilirsiniz.', - 'profile_no_personal_access_token' => 'Herhangi bir kişisel erişim belirteci oluşturmadınız.', - 'profile_create_new_token' => 'Yeni belirteç oluştur', - 'profile_create_token' => 'Belirteç oluştur', - 'profile_create' => 'Belirteç oluşturma', - 'profile_save_changes' => 'Değişiklikleri kaydet', - 'profile_whoops' => 'Hoppala!', - 'profile_something_wrong' => 'Bir şeyler ters gitti!', - 'profile_try_again' => 'Bir şeyler yanlış gitti. Lütfen tekrar deneyin.', - 'amounts' => 'Miktarlar', - 'multi_account_warning_unknown' => 'Oluşturduğunuz işlemin türüne bağlı olarak, sonraki bölünmelerin kaynak ve / veya hedef hesabı, işlemin ilk bölünmesinde tanımlanan her şey tarafından geçersiz kılınabilir.', - 'multi_account_warning_withdrawal' => 'Sonraki bölünmelerin kaynak hesabının, geri çekilmenin ilk bölünmesinde tanımlanan herhangi bir şey tarafından reddedileceğini unutmayın.', - 'multi_account_warning_deposit' => 'Sonraki bölünmelerin hedef hesabının, mevduatın ilk bölünmesinde tanımlanan herhangi bir şey tarafından iptal edileceğini unutmayın.', - 'multi_account_warning_transfer' => 'Sonraki bölünmelerin kaynak + hedef hesabının, aktarımın ilk bölünmesinde tanımlanan her şey tarafından geçersiz kılınacağını unutmayın.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'Diğer tüm oturumlarınız kapatıldı.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Diğer tüm seanslarınız kapatıldı', + 'delete_all_categories' => 'TÜM kategorilerinizi silme', + 'delete_all_tags' => 'TÜM etiketlerinizi silin', + 'delete_all_bills' => 'TÜM faturalarınızı silin', + 'delete_all_piggy_banks' => 'TÜM kumbaralarınızı silin', + 'delete_all_rules' => 'TÜM kurallarınızı silin', + 'delete_all_recurring' => 'Yinelenen tüm işlemlerinizi silme', + 'delete_all_object_groups' => 'TÜM nesne gruplarınızı silme', + 'delete_all_accounts' => 'TÜM hesaplarınızı silin', + 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', + 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', + 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', + 'delete_all_liabilities' => 'Delete ALL your liabilities', + 'delete_all_transactions' => 'Delete ALL your transactions', + 'delete_all_withdrawals' => 'Delete ALL your withdrawals', + 'delete_all_deposits' => 'Delete ALL your deposits', + 'delete_all_transfers' => 'Delete ALL your transfers', + 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', + 'deleted_all_budgets' => 'All budgets have been deleted', + 'deleted_all_categories' => 'All categories have been deleted', + 'deleted_all_tags' => 'All tags have been deleted', + 'deleted_all_bills' => 'All bills have been deleted', + 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', + 'deleted_all_rules' => 'All rules and rule groups have been deleted', + 'deleted_all_object_groups' => 'All groups have been deleted', + 'deleted_all_accounts' => 'All accounts have been deleted', + 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', + 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', + 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', + 'deleted_all_liabilities' => 'All liabilities have been deleted', + 'deleted_all_transactions' => 'All transactions have been deleted', + 'deleted_all_withdrawals' => 'All withdrawals have been deleted', + 'deleted_all_deposits' => 'All deposits have been deleted', + 'deleted_all_transfers' => 'All transfers have been deleted', + 'deleted_all_recurring' => 'All recurring transactions have been deleted', + 'change_your_password' => 'Şifrenizi değiştirin', + 'delete_account' => 'Hesabı Sil', + 'current_password' => 'Güncel Şifre', + 'new_password' => 'Yeni Şifre', + 'new_password_again' => 'Yeni Şifre (Tekrar)', + 'delete_your_account' => 'Hesabını Sil', + 'delete_your_account_help' => 'Hesabınızı silmeniz aynı zamanda Firefly III\'e kaydetmiş olabileceğiniz hesapları, işlemleri, her şeyi de silecektir. YOK OLACAK.', + 'delete_your_account_password' => 'Devam etmek için şifrenizi girin.', + 'password' => 'Şifre', + 'are_you_sure' => 'Emin misiniz? Bunu geri alamazsınız.', + 'delete_account_button' => 'Hesabını Sil', + 'invalid_current_password' => 'Geçersiz Şifre!', + 'password_changed' => 'Şifre değiştirildi!', + 'should_change' => 'Amaç, şifrenizi değiştirmenizdir.', + 'invalid_password' => 'Geçersiz şifre!', + 'what_is_pw_security' => '\'\'Doğrulama şifresi güvenliği\'\' nedir?', + 'secure_pw_title' => 'Güvenli şifre nasıl seçilir?', + 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', + 'secure_pw_history' => 'Not a week goes by that you read in the news about a site losing the passwords of its users. Hackers and thieves use these passwords to try to steal your private information. This information is valuable.', + 'secure_pw_ff' => 'Do you use the same password all over the internet? If one site loses your password, hackers have access to all your data. Firefly III relies on you to choose a strong and unique password to protect your financial records.', + 'secure_pw_check_box' => 'To help you do that Firefly III can check if the password you want to use has been stolen in the past. If this is the case, Firefly III advises you NOT to use that password.', + 'secure_pw_working_title' => 'How does it work?', + 'secure_pw_working' => 'By checking the box, Firefly III will send the first five characters of the SHA1 hash of your password to the website of Troy Hunt to see if it is on the list. This will stop you from using unsafe passwords as is recommended in the latest NIST Special Publication on this subject.', + 'secure_pw_should' => 'Kutuyu kontrol etmeli miyim?', + 'secure_pw_long_password' => 'Yes. Always verify your password is safe.', + 'command_line_token' => 'Command line token', + 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', + 'regenerate_command_line_token' => 'Regenerate command line token', + 'token_regenerated' => 'A new command line token was generated', + 'change_your_email' => 'E-posta adresini değiştir', + 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', + 'email_changed_logout' => 'E-posta adresinizi doğrulayana kadar giriş yapamazsınız.', + 'login_with_new_email' => 'Artık yeni e-posta adresinizle giriş yapabilirsiniz.', + 'login_with_old_email' => 'Artık eski e-posta adresinizle yeniden giriş yapabilirsiniz.', + 'login_provider_local_only' => 'This action is not available when authenticating through ":login_provider".', + 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', + 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', + 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Clients', + 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'Client ID', + 'profile_oauth_client_name' => 'Name', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Create New Client', + 'profile_oauth_create_client' => 'Müşteri Oluştur', + 'profile_oauth_edit_client' => 'İstemciyi Düzenle', + 'profile_oauth_name_help' => 'Kullanıcılarınızın tanıyacağı ve güveneceği bir şey.', + 'profile_oauth_redirect_url' => 'URL\'yi yönlendir', + 'profile_oauth_redirect_url_help' => 'Uygulamanızın yetkilendirme geri arama URL\'si.', + 'profile_authorized_apps' => 'Yetkili uygulamalar', + 'profile_authorized_clients' => 'Yetkili müşteriler', + 'profile_scopes' => 'Kapsamalar', + 'profile_revoke' => 'İptal etmek', + 'profile_oauth_client_secret_title' => 'Müşteri Sırrı', + 'profile_oauth_client_secret_expl' => 'İşte yeni müşteri sırrın. Bu gösterilecek tek zaman, bu yüzden onu kaybetme! Artık API istekleri yapmak için bu sırrı kullanabilirsiniz.', + 'profile_personal_access_tokens' => 'Kişisel Erişim Belirteçleri', + 'profile_personal_access_token' => 'Kişisel Erişim Belirteci', + 'profile_oauth_confidential' => 'Gizli', + 'profile_oauth_confidential_help' => 'İstemcinin bir sır ile kimlik doğrulaması yapmasını isteyin. Gizli müşteriler, kimlik bilgilerini yetkisiz taraflara ifşa etmeden güvenli bir şekilde saklayabilir. Yerel masaüstü veya JavaScript SPA uygulamaları gibi genel uygulamalar sırları güvenli bir şekilde saklayamaz.', + 'profile_personal_access_token_explanation' => 'İşte yeni kişisel erişim belirteciniz. Bu gösterilecek tek zaman, bu yüzden onu kaybetme! Artık API istekleri yapmak için bu belirtecini kullanabilirsiniz.', + 'profile_no_personal_access_token' => 'Herhangi bir kişisel erişim belirteci oluşturmadınız.', + 'profile_create_new_token' => 'Yeni belirteç oluştur', + 'profile_create_token' => 'Belirteç oluştur', + 'profile_create' => 'Belirteç oluşturma', + 'profile_save_changes' => 'Değişiklikleri kaydet', + 'profile_whoops' => 'Hoppala!', + 'profile_something_wrong' => 'Bir şeyler ters gitti!', + 'profile_try_again' => 'Bir şeyler yanlış gitti. Lütfen tekrar deneyin.', + 'amounts' => 'Miktarlar', + 'multi_account_warning_unknown' => 'Oluşturduğunuz işlemin türüne bağlı olarak, sonraki bölünmelerin kaynak ve / veya hedef hesabı, işlemin ilk bölünmesinde tanımlanan her şey tarafından geçersiz kılınabilir.', + 'multi_account_warning_withdrawal' => 'Sonraki bölünmelerin kaynak hesabının, geri çekilmenin ilk bölünmesinde tanımlanan herhangi bir şey tarafından reddedileceğini unutmayın.', + 'multi_account_warning_deposit' => 'Sonraki bölünmelerin hedef hesabının, mevduatın ilk bölünmesinde tanımlanan herhangi bir şey tarafından iptal edileceğini unutmayın.', + 'multi_account_warning_transfer' => 'Sonraki bölünmelerin kaynak + hedef hesabının, aktarımın ilk bölünmesinde tanımlanan her şey tarafından geçersiz kılınacağını unutmayın.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1543,396 +1555,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Export data from Firefly III', - 'export_data_menu' => 'Verileri dışa aktar', - 'export_data_bc' => 'Firefly III \'ten veri dışa aktarma', - 'export_data_main_title' => 'Firefly III \'ten veri dışa aktarma', - 'export_data_expl' => 'Bu bağlantı, tüm işlemleri + meta verilerini Firefly ııı\'ten dışa aktarmanıza olanak tanır. Lütfen yardıma bakın (sağ üstte (?)-simge) işlem hakkında daha fazla bilgi için.', - 'export_data_all_transactions' => 'Tüm işlemleri dışa aktar', - 'export_data_advanced_expl' => 'Daha gelişmiş veya belirli bir dışa aktarma türüne ihtiyacınız varsa, konsol komutunun nasıl kullanılacağına ilişkin yardımı okuyun php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Export data from Firefly III', + 'export_data_menu' => 'Verileri dışa aktar', + 'export_data_bc' => 'Firefly III \'ten veri dışa aktarma', + 'export_data_main_title' => 'Firefly III \'ten veri dışa aktarma', + 'export_data_expl' => 'Bu bağlantı, tüm işlemleri + meta verilerini Firefly ııı\'ten dışa aktarmanıza olanak tanır. Lütfen yardıma bakın (sağ üstte (?)-simge) işlem hakkında daha fazla bilgi için.', + 'export_data_all_transactions' => 'Tüm işlemleri dışa aktar', + 'export_data_advanced_expl' => 'Daha gelişmiş veya belirli bir dışa aktarma türüne ihtiyacınız varsa, konsol komutunun nasıl kullanılacağına ilişkin yardımı okuyun php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Bir eklenti |:count eklenti', - 'attachments' => 'Ekler', - 'edit_attachment' => 'Ek ":name" düzenle', - 'update_attachment' => 'Eki güncelle', - 'delete_attachment' => '":name" Eki sil', - 'attachment_deleted' => '":name" eki silindi', - 'liabilities_deleted' => 'Silinen sorumluluk ":name"', - 'attachment_updated' => '":name" Ek güncellendi', - 'upload_max_file_size' => 'Maksimum dosya boyutu: :size', - 'list_all_attachments' => 'Tüm eklerin listesi', + 'nr_of_attachments' => 'Bir eklenti |:count eklenti', + 'attachments' => 'Ekler', + 'edit_attachment' => 'Ek ":name" düzenle', + 'update_attachment' => 'Eki güncelle', + 'delete_attachment' => '":name" Eki sil', + 'attachment_deleted' => '":name" eki silindi', + 'liabilities_deleted' => 'Silinen sorumluluk ":name"', + 'attachment_updated' => '":name" Ek güncellendi', + 'upload_max_file_size' => 'Maksimum dosya boyutu: :size', + 'list_all_attachments' => 'Tüm eklerin listesi', // transaction index - 'title_expenses' => 'Giderler', - 'title_withdrawal' => 'Giderler', - 'title_revenue' => 'Gelir / Gelir', - 'title_deposit' => 'Gelir / Gelir', - 'title_transfer' => 'Transferler', - 'title_transfers' => 'Transferler', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Giderler', + 'title_withdrawal' => 'Giderler', + 'title_revenue' => 'Gelir / Gelir', + 'title_deposit' => 'Gelir / Gelir', + 'title_transfer' => 'Transferler', + 'title_transfers' => 'Transferler', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Bu işlem zaten bir para çekme işlemidir', - 'convert_is_already_type_Deposit' => 'Bu işlem zaten bir para çekme işlemidir', - 'convert_is_already_type_Transfer' => 'Bu işlem zaten bir transfer işlemidir', - 'convert_to_Withdrawal' => '":description" yı bir para çekme işlemine dönüştür', - 'convert_to_Deposit' => '":description" yı mevduata dönüştür', - 'convert_to_Transfer' => '":description" yı bir aktarıma dönüştür', - 'convert_options_WithdrawalDeposit' => 'Para çekme işlemini çekime dönüştür', - 'convert_options_WithdrawalTransfer' => 'Para çekim işlemini aktarmaya dönüştür', - 'convert_options_DepositTransfer' => 'Para yatırma işlemini bir aktarmaya dönüştür', - 'convert_options_DepositWithdrawal' => 'Para yatırma işlemini çekime dönüştür', - 'convert_options_TransferWithdrawal' => 'Bir transferi çekime dönüştür', - 'convert_options_TransferDeposit' => 'Bir transferi çekime dönüştür', - 'convert_Withdrawal_to_deposit' => 'Bu para çekme işlemini para yatırma işlemine çevir', - 'convert_Withdrawal_to_transfer' => 'Bu para çekim işlemini havaleye çevir', - 'convert_Deposit_to_withdrawal' => 'Bu para yatırma işlemini para çekme işlemine dönüştür', - 'convert_Deposit_to_transfer' => 'Bu yatırımı bir havale olarak değiştir', - 'convert_Transfer_to_deposit' => 'Bu havaleyi birikime dönüştürün', - 'convert_Transfer_to_withdrawal' => 'Bu transferi bir para çekme işlemine dönüştür', - 'convert_please_set_revenue_source' => 'Lütfen paranın geleceği bir gelir hesabı seçiniz.', - 'convert_please_set_asset_destination' => 'Lütfen paranın gideceği varlık hesabını seçin.', - 'convert_please_set_expense_destination' => 'Lütfen paranın gideceği masraf hesaplarını seçin.', - 'convert_please_set_asset_source' => 'Lütfen paranın geleceği bir varlık hesabı seçiniz.', - 'convert_expl_w_d' => 'Para çekme işleminden para yatırma işlemine dönüştürülürken, para çekilmek yerine görüntülenen hedef hesaba yatırılır./ Para çekme işleminden para yatırma işlemine dönüştürülürken, para onlardan çekilmek yerine görüntülenen hedef hesaplara yatırılır.', - 'convert_expl_w_t' => 'Para çekme işlemini aktarıma dönüştürürken, para orijinal gider hesabına harcanmak yerine kaynak hesaptan başka bir varlık veya yükümlülük hesabına aktarılır./ Para çekme işlemini aktarıma dönüştürürken, para orijinal gider hesaplarına harcanmak yerine kaynak hesaplardan diğer varlık veya yükümlülük hesaplarına aktarılır.', - 'convert_expl_d_w' => 'Para yatırma işlemini para çekme işlemine dönüştürürken, para yatırılmak yerine görüntülenen kaynak hesaptan çekilir./ Para yatırma işlemini para çekme işlemine dönüştürürken, para yatırılmak yerine görüntülenen kaynak hesaplardan çekilir.', - 'convert_expl_d_t' => 'Para yatırma işlemini aktarıma dönüştürdüğünüzde, para, varlık veya yükümlülük hesabınızdan herhangi birinden listelenen hedef hesaba yatırılır./ Bir depozitoyu aktarıma dönüştürdüğünüzde, para, varlık veya yükümlülük hesaplarınızdan herhangi birinden listelenen hedef hesaplara yatırılır.', - 'convert_expl_t_w' => 'Bir transferi para çekme işlemine dönüştürdüğünüzde, para transfer edilmek yerine burada belirlediğiniz hedef hesaba harcanacaktır./ Bir transferi para çekme işlemine dönüştürdüğünüzde, para transfer edilmek yerine burada belirlediğiniz hedef hesaplara harcanacaktır.', - 'convert_expl_t_d' => 'Bir havaleyi para yatırma işlemine dönüştürdüğünüzde, para buraya aktarılmak yerine burada gördüğünüz hedef hesaba yatırılır./ Bir havaleyi para yatırma işlemine dönüştürdüğünüzde, para transfer edilmek yerine burada gördüğünüz hedef hesaplara yatırılır.', - 'convert_select_sources' => 'Dönüşümü tamamlamak için lütfen aşağıdaki yeni kaynak hesabı ayarlayın./ Dönüşümü tamamlamak için lütfen aşağıdaki yeni kaynak hesaplarını ayarlayın.', - 'convert_select_destinations' => 'Dönüşümü tamamlamak için lütfen aşağıdaki yeni hedef hesabı seçin./ Dönüşümü tamamlamak için lütfen aşağıdaki yeni hedef hesapları seçin.', - 'converted_to_Withdrawal' => 'İşlem çekime dönüştürüldü', - 'converted_to_Deposit' => 'İşlem depozitoya dönüştürüldü', - 'converted_to_Transfer' => 'İşlem aktarıma dönüştürüldü', - 'invalid_convert_selection' => 'Seçtiğiniz hesap zaten bu işlemde kullanılmış veya mevcut değil.', - 'source_or_dest_invalid' => 'Doğru işlem ayrıntıları bulunamıyor. Dönüşüm mümkün değildir.', - 'convert_to_withdrawal' => 'Para çekme işlemine dönüştür', - 'convert_to_deposit' => 'Depozitoya dönüştür', - 'convert_to_transfer' => 'Aktarıma dönüştür', + 'convert_is_already_type_Withdrawal' => 'Bu işlem zaten bir para çekme işlemidir', + 'convert_is_already_type_Deposit' => 'Bu işlem zaten bir para çekme işlemidir', + 'convert_is_already_type_Transfer' => 'Bu işlem zaten bir transfer işlemidir', + 'convert_to_Withdrawal' => '":description" yı bir para çekme işlemine dönüştür', + 'convert_to_Deposit' => '":description" yı mevduata dönüştür', + 'convert_to_Transfer' => '":description" yı bir aktarıma dönüştür', + 'convert_options_WithdrawalDeposit' => 'Para çekme işlemini çekime dönüştür', + 'convert_options_WithdrawalTransfer' => 'Para çekim işlemini aktarmaya dönüştür', + 'convert_options_DepositTransfer' => 'Para yatırma işlemini bir aktarmaya dönüştür', + 'convert_options_DepositWithdrawal' => 'Para yatırma işlemini çekime dönüştür', + 'convert_options_TransferWithdrawal' => 'Bir transferi çekime dönüştür', + 'convert_options_TransferDeposit' => 'Bir transferi çekime dönüştür', + 'convert_Withdrawal_to_deposit' => 'Bu para çekme işlemini para yatırma işlemine çevir', + 'convert_Withdrawal_to_transfer' => 'Bu para çekim işlemini havaleye çevir', + 'convert_Deposit_to_withdrawal' => 'Bu para yatırma işlemini para çekme işlemine dönüştür', + 'convert_Deposit_to_transfer' => 'Bu yatırımı bir havale olarak değiştir', + 'convert_Transfer_to_deposit' => 'Bu havaleyi birikime dönüştürün', + 'convert_Transfer_to_withdrawal' => 'Bu transferi bir para çekme işlemine dönüştür', + 'convert_please_set_revenue_source' => 'Lütfen paranın geleceği bir gelir hesabı seçiniz.', + 'convert_please_set_asset_destination' => 'Lütfen paranın gideceği varlık hesabını seçin.', + 'convert_please_set_expense_destination' => 'Lütfen paranın gideceği masraf hesaplarını seçin.', + 'convert_please_set_asset_source' => 'Lütfen paranın geleceği bir varlık hesabı seçiniz.', + 'convert_expl_w_d' => 'Para çekme işleminden para yatırma işlemine dönüştürülürken, para çekilmek yerine görüntülenen hedef hesaba yatırılır./ Para çekme işleminden para yatırma işlemine dönüştürülürken, para onlardan çekilmek yerine görüntülenen hedef hesaplara yatırılır.', + 'convert_expl_w_t' => 'Para çekme işlemini aktarıma dönüştürürken, para orijinal gider hesabına harcanmak yerine kaynak hesaptan başka bir varlık veya yükümlülük hesabına aktarılır./ Para çekme işlemini aktarıma dönüştürürken, para orijinal gider hesaplarına harcanmak yerine kaynak hesaplardan diğer varlık veya yükümlülük hesaplarına aktarılır.', + 'convert_expl_d_w' => 'Para yatırma işlemini para çekme işlemine dönüştürürken, para yatırılmak yerine görüntülenen kaynak hesaptan çekilir./ Para yatırma işlemini para çekme işlemine dönüştürürken, para yatırılmak yerine görüntülenen kaynak hesaplardan çekilir.', + 'convert_expl_d_t' => 'Para yatırma işlemini aktarıma dönüştürdüğünüzde, para, varlık veya yükümlülük hesabınızdan herhangi birinden listelenen hedef hesaba yatırılır./ Bir depozitoyu aktarıma dönüştürdüğünüzde, para, varlık veya yükümlülük hesaplarınızdan herhangi birinden listelenen hedef hesaplara yatırılır.', + 'convert_expl_t_w' => 'Bir transferi para çekme işlemine dönüştürdüğünüzde, para transfer edilmek yerine burada belirlediğiniz hedef hesaba harcanacaktır./ Bir transferi para çekme işlemine dönüştürdüğünüzde, para transfer edilmek yerine burada belirlediğiniz hedef hesaplara harcanacaktır.', + 'convert_expl_t_d' => 'Bir havaleyi para yatırma işlemine dönüştürdüğünüzde, para buraya aktarılmak yerine burada gördüğünüz hedef hesaba yatırılır./ Bir havaleyi para yatırma işlemine dönüştürdüğünüzde, para transfer edilmek yerine burada gördüğünüz hedef hesaplara yatırılır.', + 'convert_select_sources' => 'Dönüşümü tamamlamak için lütfen aşağıdaki yeni kaynak hesabı ayarlayın./ Dönüşümü tamamlamak için lütfen aşağıdaki yeni kaynak hesaplarını ayarlayın.', + 'convert_select_destinations' => 'Dönüşümü tamamlamak için lütfen aşağıdaki yeni hedef hesabı seçin./ Dönüşümü tamamlamak için lütfen aşağıdaki yeni hedef hesapları seçin.', + 'converted_to_Withdrawal' => 'İşlem çekime dönüştürüldü', + 'converted_to_Deposit' => 'İşlem depozitoya dönüştürüldü', + 'converted_to_Transfer' => 'İşlem aktarıma dönüştürüldü', + 'invalid_convert_selection' => 'Seçtiğiniz hesap zaten bu işlemde kullanılmış veya mevcut değil.', + 'source_or_dest_invalid' => 'Doğru işlem ayrıntıları bulunamıyor. Dönüşüm mümkün değildir.', + 'convert_to_withdrawal' => 'Para çekme işlemine dönüştür', + 'convert_to_deposit' => 'Depozitoya dönüştür', + 'convert_to_transfer' => 'Aktarıma dönüştür', // create new stuff: - 'create_new_withdrawal' => 'Yeni çekim oluştur', - 'create_new_deposit' => 'Yeni mevduat oluştur', - 'create_new_transfer' => 'Yeni transfer oluştur', - 'create_new_asset' => 'Yeni varlık hesabı oluştur', - 'create_new_liabilities' => 'Yeni sorumluluk oluşturma', - 'create_new_expense' => 'Yeni gider hesabı oluştur', - 'create_new_revenue' => 'Yeni gelir hesabı oluştur', - 'create_new_piggy_bank' => 'Yeni bir kumbara oluştur', - 'create_new_bill' => 'Yeni fatura oluştur', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Yeni çekim oluştur', + 'create_new_deposit' => 'Yeni mevduat oluştur', + 'create_new_transfer' => 'Yeni transfer oluştur', + 'create_new_asset' => 'Yeni varlık hesabı oluştur', + 'create_new_liabilities' => 'Yeni sorumluluk oluşturma', + 'create_new_expense' => 'Yeni gider hesabı oluştur', + 'create_new_revenue' => 'Yeni gelir hesabı oluştur', + 'create_new_piggy_bank' => 'Yeni bir kumbara oluştur', + 'create_new_bill' => 'Yeni fatura oluştur', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Yeni para birimi oluştur', - 'store_currency' => 'Yeni para birimini sakla', - 'update_currency' => 'Para birimini güncelle', - 'new_default_currency' => ':name artık varsayılan para birimi.', - 'cannot_delete_currency' => ':name hala kullanıldığı için silinemiyor.', - 'cannot_delete_fallback_currency' => ':name sistem geri dönüş para birimidir ve silinemez.', - 'cannot_disable_currency_journals' => 'Devre dışı bırakılamıyor :name çünkü işlemler hala kullanıyor.', - 'cannot_disable_currency_last_left' => 'Devre dışı bırakılamıyor :name çünkü en son etkinleştirilen para birimidir.', - 'cannot_disable_currency_account_meta' => 'Devre dışı bırakılamıyor :name çünkü varlık hesaplarında kullanılır.', - 'cannot_disable_currency_bills' => 'Devre dışı bırakılamıyor :name çünkü faturalarda kullanılıyor.', - 'cannot_disable_currency_recurring' => 'Devre dışı bırakılamıyor :name çünkü yinelenen işlemlerde kullanılır.', - 'cannot_disable_currency_available_budgets' => 'Devre dışı bırakılamıyor :name çünkü mevcut bütçelerde kullanılıyor.', - 'cannot_disable_currency_budget_limits' => 'Devre dışı bırakılamıyor :name çünkü bütçe sınırlarında kullanılıyor.', - 'cannot_disable_currency_current_default' => 'Devre dışı bırakılamıyor :name çünkü geçerli varsayılan para birimidir.', - 'cannot_disable_currency_system_fallback' => 'Devre dışı bırakılamıyor :name çünkü sistem varsayılan para birimidir.', - 'disable_EUR_side_effects' => 'Euro, sistemin acil durum geri dönüş para birimidir. Devre dışı bırakmanın istenmeyen yan etkileri olabilir ve garantinizi geçersiz kılabilir.', - 'deleted_currency' => 'Para birimi :name silindi', - 'created_currency' => 'Para birimi :name oluşturuldu', - 'could_not_store_currency' => 'Yeni para birimi depolanamadı.', - 'updated_currency' => 'Para birimi :name güncellendi', - 'ask_site_owner' => 'Lütfen para birimleri eklemek, kaldırmak veya düzenlemek için :owner\'a danışın.', - 'currencies_intro' => 'Firefly III, burada ayarlayabileceğiniz ve etkinleştirebileceğiniz çeşitli para birimlerini destekliyor.', - 'make_default_currency' => 'Varsayılanı yap', - 'default_currency' => 'varsayılan', - 'currency_is_disabled' => 'Engelli', - 'enable_currency' => 'Etkinleştirmek', - 'disable_currency' => 'Devre dışı bırakmak', - 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', - 'currency_is_now_enabled' => 'Currency ":name" has been enabled', - 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'create_currency' => 'Yeni para birimi oluştur', + 'store_currency' => 'Yeni para birimini sakla', + 'update_currency' => 'Para birimini güncelle', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => ':name hala kullanıldığı için silinemiyor.', + 'cannot_delete_fallback_currency' => ':name sistem geri dönüş para birimidir ve silinemez.', + 'cannot_disable_currency_journals' => 'Devre dışı bırakılamıyor :name çünkü işlemler hala kullanıyor.', + 'cannot_disable_currency_last_left' => 'Devre dışı bırakılamıyor :name çünkü en son etkinleştirilen para birimidir.', + 'cannot_disable_currency_account_meta' => 'Devre dışı bırakılamıyor :name çünkü varlık hesaplarında kullanılır.', + 'cannot_disable_currency_bills' => 'Devre dışı bırakılamıyor :name çünkü faturalarda kullanılıyor.', + 'cannot_disable_currency_recurring' => 'Devre dışı bırakılamıyor :name çünkü yinelenen işlemlerde kullanılır.', + 'cannot_disable_currency_available_budgets' => 'Devre dışı bırakılamıyor :name çünkü mevcut bütçelerde kullanılıyor.', + 'cannot_disable_currency_budget_limits' => 'Devre dışı bırakılamıyor :name çünkü bütçe sınırlarında kullanılıyor.', + 'cannot_disable_currency_current_default' => 'Devre dışı bırakılamıyor :name çünkü geçerli varsayılan para birimidir.', + 'cannot_disable_currency_system_fallback' => 'Devre dışı bırakılamıyor :name çünkü sistem varsayılan para birimidir.', + 'disable_EUR_side_effects' => 'Euro, sistemin acil durum geri dönüş para birimidir. Devre dışı bırakmanın istenmeyen yan etkileri olabilir ve garantinizi geçersiz kılabilir.', + 'deleted_currency' => 'Para birimi :name silindi', + 'created_currency' => 'Para birimi :name oluşturuldu', + 'could_not_store_currency' => 'Yeni para birimi depolanamadı.', + 'updated_currency' => 'Para birimi :name güncellendi', + 'ask_site_owner' => 'Lütfen para birimleri eklemek, kaldırmak veya düzenlemek için :owner\'a danışın.', + 'currencies_intro' => 'Firefly III, burada ayarlayabileceğiniz ve etkinleştirebileceğiniz çeşitli para birimlerini destekliyor.', + 'make_default_currency' => 'Varsayılanı yap', + 'default_currency' => 'varsayılan', + 'currency_is_disabled' => 'Engelli', + 'enable_currency' => 'Etkinleştirmek', + 'disable_currency' => 'Devre dışı bırakmak', + 'currencies_default_disabled' => 'Most of these currencies are disabled by default. To use them, you must enable them first.', + 'currency_is_now_enabled' => 'Currency ":name" has been enabled', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Currency ":name" has been disabled', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Zorunlu alanlar', - 'optionalFields' => 'İsteğe bağlı alanlar', - 'options' => 'Seçenekler', + 'mandatoryFields' => 'Zorunlu alanlar', + 'optionalFields' => 'İsteğe bağlı alanlar', + 'options' => 'Seçenekler', // budgets: - 'daily_budgets' => 'Daily budgets', - 'weekly_budgets' => 'Weekly budgets', - 'monthly_budgets' => 'Monthly budgets', - 'quarterly_budgets' => 'Quarterly budgets', - 'half_year_budgets' => 'Half-yearly budgets', - 'yearly_budgets' => 'Yearly budgets', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', - 'total_available_budget' => 'Total available budget (between :start and :end)', - 'total_available_budget_in_currency' => 'Total available budget in :currency', - 'see_below' => 'see below', - 'create_new_budget' => 'Yeni bir bütçe oluştur', - 'store_new_budget' => 'Yeni bütçeyi sakla', - 'stored_new_budget' => 'Yeni bütçe ":name" kaydedildi', - 'available_between' => ':start ve :end arasında kullanılabilir', - 'transactionsWithoutBudget' => 'Bütçesiz Giderler', - 'transactions_no_budget' => ':start ve :end arasındaki bütçe dışı harcamalar', - 'spent_between' => 'Already spent between :start and :end', - 'set_available_amount' => 'Set available amount', - 'update_available_amount' => 'Update available amount', - 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', - 'createBudget' => 'Yeni bütçe', - 'invalid_currency' => 'This is an invalid currency', - 'invalid_amount' => 'Please enter an amount', - 'set_ab' => 'The available budget amount has been set', - 'updated_ab' => 'The available budget amount has been updated', - 'deleted_ab' => 'The available budget amount has been deleted', - 'deleted_bl' => 'The budgeted amount has been removed', - 'alt_currency_ab_create' => 'Set the available budget in another currency', - 'bl_create_btn' => 'Set budget in another currency', - 'inactiveBudgets' => 'Etkin olmayan bütçeler', - 'without_budget_between' => ':start ve :end arasında bütçesiz işlemler', - 'delete_budget' => '":name" bütçesini sil', - 'deleted_budget' => 'Silinen bütçe ":name"', - 'edit_budget' => '":name" bütçesini düzenle', - 'updated_budget' => 'Güncellenmiş bütçe ":name"', - 'update_amount' => 'Güncelleme miktarı', - 'update_budget' => 'Bütçeyi güncelle', - 'update_budget_amount_range' => ':start ve :end arasında (beklenen) mevcut miktarı güncelleyiniz', - 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', - 'set_budget_limit' => 'Set budgeted amount', - 'budget_period_navigator' => 'Devreden sayacı', - 'info_on_available_amount' => 'Elimde ne var?', - 'available_amount_indication' => 'Toplam bütçenizin ne olabileceğinin bir göstergesi olarak bu tutarı kullanın.', - 'suggested' => 'Önerilen', - 'average_between' => ':start ve :end arasında Averaj', - 'transferred_in' => 'Transferred (in)', - 'transferred_away' => 'Transferred (away)', - 'auto_budget_none' => 'No auto-budget', - 'auto_budget_reset' => 'Set a fixed amount every period', - 'auto_budget_rollover' => 'Add an amount every period', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Günlük', - 'auto_budget_period_weekly' => 'Haftalık', - 'auto_budget_period_monthly' => 'Aylık', - 'auto_budget_period_quarterly' => 'Üç aylık', - 'auto_budget_period_half_year' => 'Her yarım yılda bir', - 'auto_budget_period_yearly' => 'Yıllık', - 'auto_budget_help' => 'Bu özellik hakkında daha fazla bilgiyi yardım\'da okuyabilirsiniz. Sağ üst köşedeki sembolu (?) tıklayın.', - 'auto_budget_reset_icon' => 'Bu bütçe periyodik olarak belirlenecektir', - 'auto_budget_rollover_icon' => 'Bütçe tutarı periyodik olarak artacaktır', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Bütçelenmiş tutarı kaldır :currency', + 'daily_budgets' => 'Daily budgets', + 'weekly_budgets' => 'Weekly budgets', + 'monthly_budgets' => 'Monthly budgets', + 'quarterly_budgets' => 'Quarterly budgets', + 'half_year_budgets' => 'Half-yearly budgets', + 'yearly_budgets' => 'Yearly budgets', + 'other_budgets' => 'Custom timed budgets', + 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', + 'total_available_budget' => 'Total available budget (between :start and :end)', + 'total_available_budget_in_currency' => 'Total available budget in :currency', + 'see_below' => 'see below', + 'create_new_budget' => 'Yeni bir bütçe oluştur', + 'store_new_budget' => 'Yeni bütçeyi sakla', + 'stored_new_budget' => 'Yeni bütçe ":name" kaydedildi', + 'available_between' => ':start ve :end arasında kullanılabilir', + 'transactionsWithoutBudget' => 'Bütçesiz Giderler', + 'transactions_no_budget' => ':start ve :end arasındaki bütçe dışı harcamalar', + 'spent_between' => 'Already spent between :start and :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Set available amount', + 'update_available_amount' => 'Update available amount', + 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', + 'createBudget' => 'Yeni bütçe', + 'invalid_currency' => 'This is an invalid currency', + 'invalid_amount' => 'Please enter an amount', + 'set_ab' => 'The available budget amount has been set', + 'updated_ab' => 'The available budget amount has been updated', + 'deleted_ab' => 'The available budget amount has been deleted', + 'deleted_bl' => 'The budgeted amount has been removed', + 'alt_currency_ab_create' => 'Set the available budget in another currency', + 'bl_create_btn' => 'Set budget in another currency', + 'inactiveBudgets' => 'Etkin olmayan bütçeler', + 'without_budget_between' => ':start ve :end arasında bütçesiz işlemler', + 'delete_budget' => '":name" bütçesini sil', + 'deleted_budget' => 'Silinen bütçe ":name"', + 'edit_budget' => '":name" bütçesini düzenle', + 'updated_budget' => 'Güncellenmiş bütçe ":name"', + 'update_amount' => 'Güncelleme miktarı', + 'update_budget' => 'Bütçeyi güncelle', + 'update_budget_amount_range' => ':start ve :end arasında (beklenen) mevcut miktarı güncelleyiniz', + 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', + 'set_budget_limit' => 'Set budgeted amount', + 'budget_period_navigator' => 'Devreden sayacı', + 'info_on_available_amount' => 'Elimde ne var?', + 'available_amount_indication' => 'Toplam bütçenizin ne olabileceğinin bir göstergesi olarak bu tutarı kullanın.', + 'suggested' => 'Önerilen', + 'average_between' => ':start ve :end arasında Averaj', + 'transferred_in' => 'Transferred (in)', + 'transferred_away' => 'Transferred (away)', + 'auto_budget_none' => 'No auto-budget', + 'auto_budget_reset' => 'Set a fixed amount every period', + 'auto_budget_rollover' => 'Add an amount every period', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Günlük', + 'auto_budget_period_weekly' => 'Haftalık', + 'auto_budget_period_monthly' => 'Aylık', + 'auto_budget_period_quarterly' => 'Üç aylık', + 'auto_budget_period_half_year' => 'Her yarım yılda bir', + 'auto_budget_period_yearly' => 'Yıllık', + 'auto_budget_help' => 'Bu özellik hakkında daha fazla bilgiyi yardım\'da okuyabilirsiniz. Sağ üst köşedeki sembolu (?) tıklayın.', + 'auto_budget_reset_icon' => 'Bu bütçe periyodik olarak belirlenecektir', + 'auto_budget_rollover_icon' => 'Bütçe tutarı periyodik olarak artacaktır', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Bütçelenmiş tutarı kaldır :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Bu süre beklenmiyor', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => '(Henüz)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Fatura arasındaki işlemlerle eşleşir :low ve :high.', - 'running_again_loss' => 'Bu tasarı daha önce bağlantılı hareketleri, bağlantı kesilirse, eğer daha uzun (no) (s) kuralına uyarlarsa olabilir.', - 'bill_related_rules' => 'Bu tasarıya ilişkin kurallar', - 'repeats' => 'Tekrarlar', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'İlişkili işlemler', - 'auto_match_on' => 'Firefly III tarafından otomatik olarak eşleştirildi', - 'auto_match_off' => 'Firefly III tarafından otomatik olarak eşleşmiyor', - 'next_expected_match' => 'Beklenen sonraki eşleşme', - 'delete_bill' => 'Faturayı sil ":name"', - 'deleted_bill' => 'Silinmiş fatura ":name"', - 'edit_bill' => 'Fatura düzenle ":name"', - 'more' => 'Daha', - 'rescan_old' => 'Tüm işlemlerde kuralları yeniden çalıştırın', - 'update_bill' => 'Faturayı güncelle', - 'updated_bill' => 'Güncellenmiş fatura ":name"', - 'store_new_bill' => 'Yeni fatura kaydet', - 'stored_new_bill' => 'Yeni fatura ":name" kaydedildi', - 'cannot_scan_inactive_bill' => 'Etkin olmayan faturalar taranamaz.', - 'rescanned_bill' => 'Her şeyi yeniden taradım ve bağlantı kurdum :count faturaya işlem./ Her şeyi yeniden taradı ve bağlantılı :count faturaya yapılan işlemler.', - 'average_bill_amount_year' => 'Ortalama fatura tutarı (:year)', - 'average_bill_amount_overall' => 'Ortalama fatura tutarı (genel)', - 'bill_is_active' => 'Fatura aktif', - 'bill_expected_between' => ':start ve :end arasında beklenen', - 'bill_will_automatch' => 'Fatura uygun işlemlere otomatik olarak bağlandı', - 'skips_over' => 'atla', - 'bill_store_error' => 'Yeni faturanızı saklarken beklenmeyen bir hata oluştu. Lütfen günlük dosyalarını kontrol edin', - 'list_inactive_rule' => 'Etkin Olmayan Kurallar', - 'bill_edit_rules' => 'Firefly III, bu tasarıyla ilgili kuralı da düzenlemeye çalışacaktır. Ancak, bu kuralı kendiniz düzenlediyseniz, Firefly III hiçbir şeyi değiştirmez.|Firefly III, bu tasarıyla ilgili :count kurallarını da düzenlemeye çalışacaktır. Ancak, bu kuralları kendiniz düzenlediyseniz, Firefly III hiçbir şeyi değiştirmez.', - 'bill_expected_date' => 'Beklenen :date', - 'bill_expected_date_js' => 'Beklenen {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Ödeme Tarihi {date}', - 'bill_repeats_weekly' => 'Haftalık tekrarlar', - 'bill_repeats_monthly' => 'Aylık tekrarlar', - 'bill_repeats_quarterly' => 'Üç ayda bir tekrarlar', - 'bill_repeats_half-year' => 'Her yarım yılda bir tekrarlar', - 'bill_repeats_yearly' => 'Yıllık tekrarlar', - 'bill_repeats_weekly_other' => 'Her hafta tekrarlar', - 'bill_repeats_monthly_other' => 'Her ay tekrarlar', - 'bill_repeats_quarterly_other' => 'Her çeyrekte tekrarlar', - 'bill_repeats_half-year_other' => 'Yıllık tekrarlar', - 'bill_repeats_yearly_other' => 'Her yıl tekrarlar', - 'bill_repeats_weekly_skip' => 'Her birini tekrarlar {skip} haftalar', - 'bill_repeats_monthly_skip' => 'Her {skip} ayda bir tekrarlar', - 'bill_repeats_quarterly_skip' => 'Her{skip} çeyreğini tekrarlar', - 'bill_repeats_half-year_skip' => 'Her {skip} yarım yılda bir tekrarlar', - 'bill_repeats_yearly_skip' => 'Her {skip} yılda bir tekrarlar', - 'subscriptions' => 'Abonelik', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Sonsuza dek', - 'extension_date_is' => 'Uzantı tarihi {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Bu süre beklenmiyor', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => '(Henüz)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Fatura arasındaki işlemlerle eşleşir :low ve :high.', + 'running_again_loss' => 'Bu tasarı daha önce bağlantılı hareketleri, bağlantı kesilirse, eğer daha uzun (no) (s) kuralına uyarlarsa olabilir.', + 'bill_related_rules' => 'Bu tasarıya ilişkin kurallar', + 'repeats' => 'Tekrarlar', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'İlişkili işlemler', + 'auto_match_on' => 'Firefly III tarafından otomatik olarak eşleştirildi', + 'auto_match_off' => 'Firefly III tarafından otomatik olarak eşleşmiyor', + 'next_expected_match' => 'Beklenen sonraki eşleşme', + 'delete_bill' => 'Faturayı sil ":name"', + 'deleted_bill' => 'Silinmiş fatura ":name"', + 'edit_bill' => 'Fatura düzenle ":name"', + 'more' => 'Daha', + 'rescan_old' => 'Tüm işlemlerde kuralları yeniden çalıştırın', + 'update_bill' => 'Faturayı güncelle', + 'updated_bill' => 'Güncellenmiş fatura ":name"', + 'store_new_bill' => 'Yeni fatura kaydet', + 'stored_new_bill' => 'Yeni fatura ":name" kaydedildi', + 'cannot_scan_inactive_bill' => 'Etkin olmayan faturalar taranamaz.', + 'rescanned_bill' => 'Her şeyi yeniden taradım ve bağlantı kurdum :count faturaya işlem./ Her şeyi yeniden taradı ve bağlantılı :count faturaya yapılan işlemler.', + 'average_bill_amount_year' => 'Ortalama fatura tutarı (:year)', + 'average_bill_amount_overall' => 'Ortalama fatura tutarı (genel)', + 'bill_is_active' => 'Fatura aktif', + 'bill_expected_between' => ':start ve :end arasında beklenen', + 'bill_will_automatch' => 'Fatura uygun işlemlere otomatik olarak bağlandı', + 'skips_over' => 'atla', + 'bill_store_error' => 'Yeni faturanızı saklarken beklenmeyen bir hata oluştu. Lütfen günlük dosyalarını kontrol edin', + 'list_inactive_rule' => 'Etkin Olmayan Kurallar', + 'bill_edit_rules' => 'Firefly III, bu tasarıyla ilgili kuralı da düzenlemeye çalışacaktır. Ancak, bu kuralı kendiniz düzenlediyseniz, Firefly III hiçbir şeyi değiştirmez.|Firefly III, bu tasarıyla ilgili :count kurallarını da düzenlemeye çalışacaktır. Ancak, bu kuralları kendiniz düzenlediyseniz, Firefly III hiçbir şeyi değiştirmez.', + 'bill_expected_date' => 'Beklenen :date', + 'bill_expected_date_js' => 'Beklenen {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Ödeme Tarihi {date}', + 'bill_repeats_weekly' => 'Haftalık tekrarlar', + 'bill_repeats_monthly' => 'Aylık tekrarlar', + 'bill_repeats_quarterly' => 'Üç ayda bir tekrarlar', + 'bill_repeats_half-year' => 'Her yarım yılda bir tekrarlar', + 'bill_repeats_yearly' => 'Yıllık tekrarlar', + 'bill_repeats_weekly_other' => 'Her hafta tekrarlar', + 'bill_repeats_monthly_other' => 'Her ay tekrarlar', + 'bill_repeats_quarterly_other' => 'Her çeyrekte tekrarlar', + 'bill_repeats_half-year_other' => 'Yıllık tekrarlar', + 'bill_repeats_yearly_other' => 'Her yıl tekrarlar', + 'bill_repeats_weekly_skip' => 'Her birini tekrarlar {skip} haftalar', + 'bill_repeats_monthly_skip' => 'Her {skip} ayda bir tekrarlar', + 'bill_repeats_quarterly_skip' => 'Her{skip} çeyreğini tekrarlar', + 'bill_repeats_half-year_skip' => 'Her {skip} yarım yılda bir tekrarlar', + 'bill_repeats_yearly_skip' => 'Her {skip} yılda bir tekrarlar', + 'subscriptions' => 'Abonelik', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Sonsuza dek', + 'extension_date_is' => 'Uzantı tarihi {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'Sahipsin :count bu ayrı sayfada görüntüleyebileceğiniz etkin olmayan (arşivlenmiş) hesap.|Sahipsin:count inactive (archived) accounts, which you can view on this separate page.Bu ayrı sayfada görüntüleyebileceğiniz etkin olmayan (arşivlenmiş) hesaplar.', - 'all_accounts_inactive' => 'Bunlar aktif olmayan hesaplarınız.', - 'active_account_link' => 'Bu bağlantı etkin hesaplarınıza geri döner.', - 'account_missing_transaction' => 'Hesap #: ıd (": name") doğrudan görüntülenemiyor, ancak Firefly yönlendirme bilgileri eksik.', - 'cc_monthly_payment_date_help' => 'Herhangi bir yılı ve herhangi bir ayı seçin, yine de göz ardı edilecektir. Sadece ayın günü geçerlidir.', - 'details_for_asset' => '":name" Varlık hesabı ayrıntıları', - 'details_for_expense' => '":name" Harcama hesabı ayrıntıları', - 'details_for_revenue' => '":name" Gelir hesabı ayrıntıları', - 'details_for_cash' => '":name" Nakit hesabı ayrıntıları', - 'store_new_asset_account' => 'Yeni varlık hesabını kaydet', - 'store_new_expense_account' => 'Yeni gider hesabını sakla', - 'store_new_revenue_account' => 'Yeni gelir hesabını kaydet', - 'edit_asset_account' => '":name" Öğe hesabını düzenle', - 'edit_expense_account' => '":name" Harcama hesabını düzenle', - 'edit_revenue_account' => '":name" Gelir hesabını düzenle', - 'delete_asset_account' => '":name" Öğe hesabını sil', - 'delete_expense_account' => '":name" Masraf hesaplarını sil', - 'delete_revenue_account' => '":name" Gelir hesabını sil', - 'delete_liabilities_account' => 'Sorumluluğu sil:name', - 'asset_deleted' => '":name" Adlı varlık hesabı başarıyla silindi', - 'account_deleted' => ':name hesabı başarıyla silindi', - 'expense_deleted' => '":name" gider hesabı başarıyla silindi', - 'revenue_deleted' => '":name" gelir hesabı başarıyla silindi', - 'update_asset_account' => 'Varlık hesabını güncelle', - 'update_undefined_account' => 'Hesabı güncelle', - 'update_liabilities_account' => 'Güncelleme sorumluluğu', - 'update_expense_account' => 'Gider hesabını güncelle', - 'update_revenue_account' => 'Gelir hesabı güncelleme', - 'make_new_asset_account' => 'Yeni varlık hesabı oluştur', - 'make_new_expense_account' => 'Yeni gider hesabı oluştur', - 'make_new_revenue_account' => 'Yeni gelir hesabı oluştur', - 'make_new_liabilities_account' => 'Create a new liability', - 'asset_accounts' => 'Varlık hesapları', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Asset accounts (inactive)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Gider hesapları', - 'expense_accounts_inactive' => 'Expense accounts (inactive)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Gelir hesapları', - 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', - 'cash_accounts' => 'Nakit Hesabı', - 'Cash account' => 'Nakit Hesabı', - 'liabilities_accounts' => 'Liabilities', - 'liabilities_accounts_inactive' => 'Liabilities (inactive)', - 'reconcile_account' => 'Hesabı ":account" dengeleyin', - 'overview_of_reconcile_modal' => 'Overview of reconciliation', - 'delete_reconciliation' => 'Mutabakatı sil', - 'update_reconciliation' => 'Mutabakatı güncelle', - 'amount_cannot_be_zero' => 'Miktar sıfır olamaz', - 'end_of_reconcile_period' => 'Uzlaştırma dönemi sonu: :period', - 'start_of_reconcile_period' => 'Uzlaştırma dönemi başlangıcı: :period', - 'start_balance' => 'Başlangıç bakiyesi', - 'end_balance' => 'Son bakiye', - 'update_balance_dates_instruction' => 'Yukarıdaki tutarlar ve tarihleri banka ekstrenizle esşleştirin ve "Mutabakatı başlat" düğmesine basın', - 'select_transactions_instruction' => 'Banka ekstrenizde görünen işlemleri seçin.', - 'select_range_and_balance' => 'Önce tarih aralığını ve bakiyeleri doğrulayın. Daha sonra "Mutabakatı başlat" tuşuna basın', - 'date_change_instruction' => 'Tarih aralığını şim değiştirdiniz, ilerleme kaydedilemez.', - 'update_selection' => 'Güncelleme seç', - 'store_reconcile' => 'Mutabakatı sakla', - 'reconciliation_transaction' => 'Mutabakat işlemi', - 'Reconciliation' => 'Mutabakat', - 'reconciliation' => 'Mutabakat', - 'reconcile_options' => 'Mutabakat Seçenekleri', - 'reconcile_range' => 'Mutabakat aralığı', - 'start_reconcile' => 'Mutabakatı başlat', - 'cash_account_type' => 'Cash', - 'cash' => 'nakit', - 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', - 'account_type' => 'Hesap Türü', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'Yeni hesap ":name" kaydedildi!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => 'Güncellenmiş hesap ismi ":name"', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Kredi kart seçenekleri', - 'no_transactions_account' => 'Aktif hesapta herhangi bir işlem yok (bu dönem için) ":name".', - 'no_transactions_period' => 'There are no transactions (in this period).', - 'no_data_for_chart' => 'Bu grafiği oluşturmak için yeterli bilgi (henüz) yok.', - 'select_at_least_one_account' => 'Please select at least one asset account', - 'select_at_least_one_category' => 'Please select at least one category', - 'select_at_least_one_budget' => 'Please select at least one budget', - 'select_at_least_one_tag' => 'Please select at least one tag', - 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', - 'account_default_currency' => 'This will be the default currency associated with this account.', - 'reconcile_has_more' => 'Firefly III hesabınızda bankanızın iddia ettiğinden daha fazla para var. Birkaç seçenek var. Lütfen ne yapılacağını seçin. Daha sonra "Uzlaşmayı onayla" ya basın.', - 'reconcile_has_less' => 'Firefly III\'de bankanızın iddia ettiğinden daha az para var. Birkaç seçenek var. Lütfen ne yapılacağını seçin. Daha sonra "Uzlaşmayı onayla"\'ya basın.', - 'reconcile_is_equal' => 'Firefly III hesabınızdaki para ile banka ekstreniz eşleşiyor. Yapılacak bir şey yok. Lütfen girdinizi onaylamak için "Uzlaşmayı onayla"\'ya basın.', - 'create_pos_reconcile_transaction' => 'Seçilen işlemleri temizleyiniz ve varlık hesabına :amount ekleyerek bir düzeltme oluşturun.', - 'create_neg_reconcile_transaction' => 'Seçilen işlemleri temizleyiniz ve varlık hesabından :amount kaldırarak bir düzeltme oluşturun.', - 'reconcile_do_nothing' => 'Seçilen işlemleri temizleyin, ama düzeltmeyiniz.', - 'reconcile_go_back' => 'Bir düzeltmeyi daha sonra her zaman düzenleyebilir ya da silebilirsiniz.', - 'must_be_asset_account' => 'Sadece varlık hesapları bağdaştırabilirsiniz', - 'reconciliation_stored' => 'Depolanmış Mutabakat', - 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', - 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', - 'sum_of_reconciliation' => 'Sum of reconciliation', - 'reconcile_this_account' => 'Bu hesabı bağdaştırınız', - 'reconcile' => 'Reconcile', - 'show' => 'Show', - 'confirm_reconciliation' => 'Mutabakatı onayla', - 'submitted_start_balance' => 'Gönderilen başlangıç bakiyesi', - 'selected_transactions' => 'Seçilen İşlemler (:count)', - 'already_cleared_transactions' => 'Halihazırda temizlenmiş işlemler (:count)', - 'submitted_end_balance' => 'Gönderilen bitiş bakiyesi', - 'initial_balance_description' => 'Initial balance for ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'unknown', - 'interest_calc_daily' => 'Per day', - 'interest_calc_monthly' => 'Per month', - 'interest_calc_yearly' => 'Per year', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half year', - 'interest_calc_quarterly' => 'Per quarter', - 'initial_balance_account' => 'Initial balance account of :account', - 'list_options' => 'List options', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'Sahipsin :count bu ayrı sayfada görüntüleyebileceğiniz etkin olmayan (arşivlenmiş) hesap.|Sahipsin:count inactive (archived) accounts, which you can view on this separate page.Bu ayrı sayfada görüntüleyebileceğiniz etkin olmayan (arşivlenmiş) hesaplar.', + 'all_accounts_inactive' => 'Bunlar aktif olmayan hesaplarınız.', + 'active_account_link' => 'Bu bağlantı etkin hesaplarınıza geri döner.', + 'account_missing_transaction' => 'Hesap #: ıd (": name") doğrudan görüntülenemiyor, ancak Firefly yönlendirme bilgileri eksik.', + 'cc_monthly_payment_date_help' => 'Herhangi bir yılı ve herhangi bir ayı seçin, yine de göz ardı edilecektir. Sadece ayın günü geçerlidir.', + 'details_for_asset' => '":name" Varlık hesabı ayrıntıları', + 'details_for_expense' => '":name" Harcama hesabı ayrıntıları', + 'details_for_revenue' => '":name" Gelir hesabı ayrıntıları', + 'details_for_cash' => '":name" Nakit hesabı ayrıntıları', + 'store_new_asset_account' => 'Yeni varlık hesabını kaydet', + 'store_new_expense_account' => 'Yeni gider hesabını sakla', + 'store_new_revenue_account' => 'Yeni gelir hesabını kaydet', + 'edit_asset_account' => '":name" Öğe hesabını düzenle', + 'edit_expense_account' => '":name" Harcama hesabını düzenle', + 'edit_revenue_account' => '":name" Gelir hesabını düzenle', + 'delete_asset_account' => '":name" Öğe hesabını sil', + 'delete_expense_account' => '":name" Masraf hesaplarını sil', + 'delete_revenue_account' => '":name" Gelir hesabını sil', + 'delete_liabilities_account' => 'Sorumluluğu sil:name', + 'asset_deleted' => '":name" Adlı varlık hesabı başarıyla silindi', + 'account_deleted' => ':name hesabı başarıyla silindi', + 'expense_deleted' => '":name" gider hesabı başarıyla silindi', + 'revenue_deleted' => '":name" gelir hesabı başarıyla silindi', + 'update_asset_account' => 'Varlık hesabını güncelle', + 'update_undefined_account' => 'Hesabı güncelle', + 'update_liabilities_account' => 'Güncelleme sorumluluğu', + 'update_expense_account' => 'Gider hesabını güncelle', + 'update_revenue_account' => 'Gelir hesabı güncelleme', + 'make_new_asset_account' => 'Yeni varlık hesabı oluştur', + 'make_new_expense_account' => 'Yeni gider hesabı oluştur', + 'make_new_revenue_account' => 'Yeni gelir hesabı oluştur', + 'make_new_liabilities_account' => 'Create a new liability', + 'asset_accounts' => 'Varlık hesapları', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Asset accounts (inactive)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Gider hesapları', + 'expense_accounts_inactive' => 'Expense accounts (inactive)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Gelir hesapları', + 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', + 'cash_accounts' => 'Nakit Hesabı', + 'Cash account' => 'Nakit Hesabı', + 'liabilities_accounts' => 'Liabilities', + 'liabilities_accounts_inactive' => 'Liabilities (inactive)', + 'reconcile_account' => 'Hesabı ":account" dengeleyin', + 'overview_of_reconcile_modal' => 'Overview of reconciliation', + 'delete_reconciliation' => 'Mutabakatı sil', + 'update_reconciliation' => 'Mutabakatı güncelle', + 'amount_cannot_be_zero' => 'Miktar sıfır olamaz', + 'end_of_reconcile_period' => 'Uzlaştırma dönemi sonu: :period', + 'start_of_reconcile_period' => 'Uzlaştırma dönemi başlangıcı: :period', + 'start_balance' => 'Başlangıç bakiyesi', + 'end_balance' => 'Son bakiye', + 'update_balance_dates_instruction' => 'Yukarıdaki tutarlar ve tarihleri banka ekstrenizle esşleştirin ve "Mutabakatı başlat" düğmesine basın', + 'select_transactions_instruction' => 'Banka ekstrenizde görünen işlemleri seçin.', + 'select_range_and_balance' => 'Önce tarih aralığını ve bakiyeleri doğrulayın. Daha sonra "Mutabakatı başlat" tuşuna basın', + 'date_change_instruction' => 'Tarih aralığını şim değiştirdiniz, ilerleme kaydedilemez.', + 'update_selection' => 'Güncelleme seç', + 'store_reconcile' => 'Mutabakatı sakla', + 'reconciliation_transaction' => 'Mutabakat işlemi', + 'Reconciliation' => 'Mutabakat', + 'reconciliation' => 'Mutabakat', + 'reconcile_options' => 'Mutabakat Seçenekleri', + 'reconcile_range' => 'Mutabakat aralığı', + 'start_reconcile' => 'Mutabakatı başlat', + 'cash_account_type' => 'Cash', + 'cash' => 'nakit', + 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', + 'account_type' => 'Hesap Türü', + 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => 'Yeni hesap ":name" kaydedildi!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => 'Güncellenmiş hesap ismi ":name"', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Kredi kart seçenekleri', + 'no_transactions_account' => 'Aktif hesapta herhangi bir işlem yok (bu dönem için) ":name".', + 'no_transactions_period' => 'There are no transactions (in this period).', + 'no_data_for_chart' => 'Bu grafiği oluşturmak için yeterli bilgi (henüz) yok.', + 'select_at_least_one_account' => 'Please select at least one asset account', + 'select_at_least_one_category' => 'Please select at least one category', + 'select_at_least_one_budget' => 'Please select at least one budget', + 'select_at_least_one_tag' => 'Please select at least one tag', + 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', + 'account_default_currency' => 'This will be the default currency associated with this account.', + 'reconcile_has_more' => 'Firefly III hesabınızda bankanızın iddia ettiğinden daha fazla para var. Birkaç seçenek var. Lütfen ne yapılacağını seçin. Daha sonra "Uzlaşmayı onayla" ya basın.', + 'reconcile_has_less' => 'Firefly III\'de bankanızın iddia ettiğinden daha az para var. Birkaç seçenek var. Lütfen ne yapılacağını seçin. Daha sonra "Uzlaşmayı onayla"\'ya basın.', + 'reconcile_is_equal' => 'Firefly III hesabınızdaki para ile banka ekstreniz eşleşiyor. Yapılacak bir şey yok. Lütfen girdinizi onaylamak için "Uzlaşmayı onayla"\'ya basın.', + 'create_pos_reconcile_transaction' => 'Seçilen işlemleri temizleyiniz ve varlık hesabına :amount ekleyerek bir düzeltme oluşturun.', + 'create_neg_reconcile_transaction' => 'Seçilen işlemleri temizleyiniz ve varlık hesabından :amount kaldırarak bir düzeltme oluşturun.', + 'reconcile_do_nothing' => 'Seçilen işlemleri temizleyin, ama düzeltmeyiniz.', + 'reconcile_go_back' => 'Bir düzeltmeyi daha sonra her zaman düzenleyebilir ya da silebilirsiniz.', + 'must_be_asset_account' => 'Sadece varlık hesapları bağdaştırabilirsiniz', + 'reconciliation_stored' => 'Depolanmış Mutabakat', + 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', + 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', + 'sum_of_reconciliation' => 'Sum of reconciliation', + 'reconcile_this_account' => 'Bu hesabı bağdaştırınız', + 'reconcile' => 'Reconcile', + 'show' => 'Show', + 'confirm_reconciliation' => 'Mutabakatı onayla', + 'submitted_start_balance' => 'Gönderilen başlangıç bakiyesi', + 'selected_transactions' => 'Seçilen İşlemler (:count)', + 'already_cleared_transactions' => 'Halihazırda temizlenmiş işlemler (:count)', + 'submitted_end_balance' => 'Gönderilen bitiş bakiyesi', + 'initial_balance_description' => 'Initial balance for ":account"', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'unknown', + 'interest_calc_daily' => 'Per day', + 'interest_calc_monthly' => 'Per month', + 'interest_calc_yearly' => 'Per year', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half year', + 'interest_calc_quarterly' => 'Per quarter', + 'initial_balance_account' => 'Initial balance account of :account', + 'list_options' => 'List options', // categories: - 'new_category' => 'Yeni Kategori', - 'create_new_category' => 'Yeni bir kategori oluştur', - 'without_category' => 'Kategori olmaksızın', - 'update_category' => 'Kategoriyi güncelle', - 'updated_category' => '":name" kategorisi güncellendi', - 'categories' => 'Kategoriler', - 'edit_category' => '":name" kategorisini düzenle', - 'no_category' => '(Kategori yok)', - 'unknown_category_plain' => 'No category', - 'category' => 'Kategori', - 'delete_category' => '":name" kategorisini sil', - 'deleted_category' => ' kategorisi silindi', - 'store_category' => 'Yeni kategoriyi kaydet', - 'stored_category' => 'Kaydedilen yeni kategori ":name"', - 'without_category_between' => ':start ve :end arasında kategorisiz', + 'new_category' => 'Yeni Kategori', + 'create_new_category' => 'Yeni bir kategori oluştur', + 'without_category' => 'Kategori olmaksızın', + 'update_category' => 'Kategoriyi güncelle', + 'updated_category' => '":name" kategorisi güncellendi', + 'categories' => 'Kategoriler', + 'edit_category' => '":name" kategorisini düzenle', + 'no_category' => '(Kategori yok)', + 'unknown_category_plain' => 'No category', + 'category' => 'Kategori', + 'delete_category' => '":name" kategorisini sil', + 'deleted_category' => ' kategorisi silindi', + 'store_category' => 'Yeni kategoriyi kaydet', + 'stored_category' => 'Kaydedilen yeni kategori ":name"', + 'without_category_between' => ':start ve :end arasında kategorisiz', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1943,235 +1961,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Geri çekmeyi güncelle', - 'update_deposit' => 'Depozitoyu güncelle', - 'update_transaction' => 'Update transaction', - 'update_transfer' => 'Aktarımı güncelle', - 'updated_withdrawal' => 'Para çekme güncellendi ":description"', - 'updated_deposit' => 'Güncellenmiş depozito ":description"', - 'updated_transfer' => 'Güncellenmiş ":description"', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => 'Çekimi sil ":description"', - 'delete_deposit' => 'Mevduat sil ":description"', - 'delete_transfer' => 'Aktarımı sil ":description"', - 'deleted_withdrawal' => 'Çekilme başarıyla silindi ":description"', - 'deleted_deposit' => '":description" Para yatırma başarıyla silindi', - 'deleted_transfer' => '":description" Aktarım başarıyla silindi', - 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', - 'stored_journal' => '":description" Yeni işlem başarıyla oluşturuldu', - 'stored_journal_no_descr' => 'Successfully created your new transaction', - 'updated_journal_no_descr' => 'Successfully updated your transaction', - 'select_transactions' => 'İşlemleri Seç', - 'rule_group_select_transactions' => 'İşlemlere "başlık" uygula', - 'rule_select_transactions' => 'İşlemlere "başlık" uygula', - 'stop_selection' => 'İşlemleri seçmeyi durdur', - 'reconcile_selected' => 'Onaylanmış', - 'mass_delete_journals' => 'Bir dizi işlemi sil', - 'mass_edit_journals' => 'Bir dizi işlem düzenle', - 'mass_bulk_journals' => 'Bulk edit a number of transactions', - 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', - 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', - 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', - 'no_bulk_category' => 'Don\'t update category', - 'no_bulk_budget' => 'Don\'t update budget', - 'no_bulk_tags' => 'Etiket (ler) i güncelleme', - 'replace_with_these_tags' => 'Bu etiketlerle değiştirin', - 'append_these_tags' => 'Bu etiketleri ekle', - 'mass_edit' => 'Seçilenleri tek tek düzenle', - 'bulk_edit' => 'Toplu olarak seçilenleri düzenle', - 'mass_delete' => 'Seçileni sil', - 'cannot_edit_other_fields' => 'Gösterecek yer olmadığı için, bu dosya dışındaki dosyaları toplu olarak düzenleyemezsiniz. Eğer o alanları düzenlemeniz gerekliyse lütfen linki takip edin ve onları teker teker düzenleyin.', - 'cannot_change_amount_reconciled' => 'Mutabakat işlemlerinin miktarını değiştiremezsiniz.', - 'no_budget' => '(bütçe yok)', - 'no_bill' => '(hayır bill)', - 'account_per_budget' => 'Bütçe başına hesap', - 'account_per_category' => 'Kategori başına hesap', - 'create_new_object' => 'Yaratmak', - 'empty' => '(boş)', - 'all_other_budgets' => '(diğer tüm bütçeler)', - 'all_other_accounts' => '(diğer tüm hesaplar)', - 'expense_per_source_account' => 'Kaynak hesap başına giderler', - 'expense_per_destination_account' => 'Hedef hesap başına giderler', - 'income_per_destination_account' => 'Hedef hesap başına gelir', - 'spent_in_specific_category' => ':category kategorisinde harcandı', - 'earned_in_specific_category' => ':category kategorisinde kazanılan', - 'spent_in_specific_tag' => 'Etikette harcanan:tag', - 'earned_in_specific_tag' => ':tag etiketinde kazanıldı', - 'income_per_source_account' => 'Kaynak hesap başına gelir', - 'average_spending_per_destination' => 'Hedef hesap başına ortalama gider', - 'average_spending_per_source' => 'Kaynak hesap başına ortalama gider', - 'average_earning_per_source' => 'Kaynak hesap başına ortalama kazanç', - 'average_earning_per_destination' => 'Hedef hesap başına ortalama kazanç', - 'account_per_tag' => 'Etiket başına hesap', - 'tag_report_expenses_listed_once' => 'Giderler ve gelirler asla iki kez listelenmez. Bir işlemin birden çok etiketi varsa, yalnızca etiketlerinden birinin altında görünebilir. Bu liste eksik veri gibi görünebilir, ancak tutarlar doğru olacaktır.', - 'double_report_expenses_charted_once' => 'Giderler ve gelirler hiçbir zaman iki kez görüntülenmez. Bir işlemin birden çok etiketi varsa, yalnızca etiketlerinden birinin altında görünebilir. Bu grafikte veri eksik gibi görünebilir, ancak tutarlar doğru olacaktır.', - 'tag_report_chart_single_tag' => 'Bu grafik tek bir etiket için geçerlidir. Bir işlemin birden çok etiketi varsa, burada gördükleriniz diğer etiketlerin grafiklerine de yansıtılabilir.', - 'tag' => 'Etiket', - 'no_budget_squared' => '(Bütçe yok)', - 'perm-delete-many' => 'Bir seferde birçok öğeyi silmek çok yıkıcı olabilir. Lütfen dikkatli olun. Bölünmüş bir işlemin bir bölümünü bu sayfadan silebilirsiniz, bu nedenle dikkatli olun.', - 'mass_deleted_transactions_success' => 'Silmek :count işlem.|Silmek :count işlemler.', - 'mass_edited_transactions_success' => 'Updated :count işlem.|Silmek :count işlemler.', - 'opt_group_' => '(hesap türü yok)', - 'opt_group_no_account_type' => '(hesap türü yok)', - 'opt_group_defaultAsset' => 'Varsayılan varlık hesapları', - 'opt_group_savingAsset' => 'Tasarruf Hesapları', - 'opt_group_sharedAsset' => 'Paylaşılan varlık hesapları', - 'opt_group_ccAsset' => 'Kredi Kartı', - 'opt_group_cashWalletAsset' => 'Nakit cüzdan', - 'opt_group_expense_account' => 'Gider hesapları', - 'opt_group_revenue_account' => 'Gelir hesapları', - 'opt_group_l_Loan' => 'Sorumluluk: Kredi', - 'opt_group_cash_account' => 'Nakit hesabı', - 'opt_group_l_Debt' => 'Sorumluluk: Borç', - 'opt_group_l_Mortgage' => 'Sorumluluk: İpotek', - 'opt_group_l_Credit card' => 'Sorumluluk: Kredi kartı', - 'notes' => 'Notlar', - 'unknown_journal_error' => 'İşlem depolanamadı. Lütfen günlük dosyalarını kontrol edin.', - 'attachment_not_found' => 'Bu ek bulunamadı.', - 'journal_link_bill' => 'Bu işlem fatura ile bağlantılıdır :name. Bağlantıyı kaldırmak için onay kutusunun işaretini kaldırın. Başka bir faturaya bağlamak için kuralları kullanın.', - 'transaction_stored_link' => 'İşlem #{ID} ("{title}") saklı olmuştur.', - 'transaction_new_stored_link' => 'İşlem #{ID}saklı olmuştur.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Geri çekmeyi güncelle', + 'update_deposit' => 'Depozitoyu güncelle', + 'update_transaction' => 'Update transaction', + 'update_transfer' => 'Aktarımı güncelle', + 'updated_withdrawal' => 'Para çekme güncellendi ":description"', + 'updated_deposit' => 'Güncellenmiş depozito ":description"', + 'updated_transfer' => 'Güncellenmiş ":description"', + 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', + 'no_changes_deposit' => 'Deposit ":description" was not changed.', + 'no_changes_transfer' => 'Transfer ":description" was not changed.', + 'delete_withdrawal' => 'Çekimi sil ":description"', + 'delete_deposit' => 'Mevduat sil ":description"', + 'delete_transfer' => 'Aktarımı sil ":description"', + 'deleted_withdrawal' => 'Çekilme başarıyla silindi ":description"', + 'deleted_deposit' => '":description" Para yatırma başarıyla silindi', + 'deleted_transfer' => '":description" Aktarım başarıyla silindi', + 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', + 'stored_journal' => '":description" Yeni işlem başarıyla oluşturuldu', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Successfully created your new transaction', + 'updated_journal_no_descr' => 'Successfully updated your transaction', + 'select_transactions' => 'İşlemleri Seç', + 'rule_group_select_transactions' => 'İşlemlere "başlık" uygula', + 'rule_select_transactions' => 'İşlemlere "başlık" uygula', + 'stop_selection' => 'İşlemleri seçmeyi durdur', + 'reconcile_selected' => 'Onaylanmış', + 'mass_delete_journals' => 'Bir dizi işlemi sil', + 'mass_edit_journals' => 'Bir dizi işlem düzenle', + 'mass_bulk_journals' => 'Bulk edit a number of transactions', + 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', + 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', + 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', + 'no_bulk_category' => 'Don\'t update category', + 'no_bulk_budget' => 'Don\'t update budget', + 'no_bulk_tags' => 'Etiket (ler) i güncelleme', + 'replace_with_these_tags' => 'Bu etiketlerle değiştirin', + 'append_these_tags' => 'Bu etiketleri ekle', + 'mass_edit' => 'Seçilenleri tek tek düzenle', + 'bulk_edit' => 'Toplu olarak seçilenleri düzenle', + 'mass_delete' => 'Seçileni sil', + 'cannot_edit_other_fields' => 'Gösterecek yer olmadığı için, bu dosya dışındaki dosyaları toplu olarak düzenleyemezsiniz. Eğer o alanları düzenlemeniz gerekliyse lütfen linki takip edin ve onları teker teker düzenleyin.', + 'cannot_change_amount_reconciled' => 'Mutabakat işlemlerinin miktarını değiştiremezsiniz.', + 'no_budget' => '(bütçe yok)', + 'no_bill' => '(hayır bill)', + 'account_per_budget' => 'Bütçe başına hesap', + 'account_per_category' => 'Kategori başına hesap', + 'create_new_object' => 'Yaratmak', + 'empty' => '(boş)', + 'all_other_budgets' => '(diğer tüm bütçeler)', + 'all_other_accounts' => '(diğer tüm hesaplar)', + 'expense_per_source_account' => 'Kaynak hesap başına giderler', + 'expense_per_destination_account' => 'Hedef hesap başına giderler', + 'income_per_destination_account' => 'Hedef hesap başına gelir', + 'spent_in_specific_category' => ':category kategorisinde harcandı', + 'earned_in_specific_category' => ':category kategorisinde kazanılan', + 'spent_in_specific_tag' => 'Etikette harcanan:tag', + 'earned_in_specific_tag' => ':tag etiketinde kazanıldı', + 'income_per_source_account' => 'Kaynak hesap başına gelir', + 'average_spending_per_destination' => 'Hedef hesap başına ortalama gider', + 'average_spending_per_source' => 'Kaynak hesap başına ortalama gider', + 'average_earning_per_source' => 'Kaynak hesap başına ortalama kazanç', + 'average_earning_per_destination' => 'Hedef hesap başına ortalama kazanç', + 'account_per_tag' => 'Etiket başına hesap', + 'tag_report_expenses_listed_once' => 'Giderler ve gelirler asla iki kez listelenmez. Bir işlemin birden çok etiketi varsa, yalnızca etiketlerinden birinin altında görünebilir. Bu liste eksik veri gibi görünebilir, ancak tutarlar doğru olacaktır.', + 'double_report_expenses_charted_once' => 'Giderler ve gelirler hiçbir zaman iki kez görüntülenmez. Bir işlemin birden çok etiketi varsa, yalnızca etiketlerinden birinin altında görünebilir. Bu grafikte veri eksik gibi görünebilir, ancak tutarlar doğru olacaktır.', + 'tag_report_chart_single_tag' => 'Bu grafik tek bir etiket için geçerlidir. Bir işlemin birden çok etiketi varsa, burada gördükleriniz diğer etiketlerin grafiklerine de yansıtılabilir.', + 'tag' => 'Etiket', + 'no_budget_squared' => '(Bütçe yok)', + 'perm-delete-many' => 'Bir seferde birçok öğeyi silmek çok yıkıcı olabilir. Lütfen dikkatli olun. Bölünmüş bir işlemin bir bölümünü bu sayfadan silebilirsiniz, bu nedenle dikkatli olun.', + 'mass_deleted_transactions_success' => 'Silmek :count işlem.|Silmek :count işlemler.', + 'mass_edited_transactions_success' => 'Updated :count işlem.|Silmek :count işlemler.', + 'opt_group_' => '(hesap türü yok)', + 'opt_group_no_account_type' => '(hesap türü yok)', + 'opt_group_defaultAsset' => 'Varsayılan varlık hesapları', + 'opt_group_savingAsset' => 'Tasarruf Hesapları', + 'opt_group_sharedAsset' => 'Paylaşılan varlık hesapları', + 'opt_group_ccAsset' => 'Kredi Kartı', + 'opt_group_cashWalletAsset' => 'Nakit cüzdan', + 'opt_group_expense_account' => 'Gider hesapları', + 'opt_group_revenue_account' => 'Gelir hesapları', + 'opt_group_l_Loan' => 'Sorumluluk: Kredi', + 'opt_group_cash_account' => 'Nakit hesabı', + 'opt_group_l_Debt' => 'Sorumluluk: Borç', + 'opt_group_l_Mortgage' => 'Sorumluluk: İpotek', + 'opt_group_l_Credit card' => 'Sorumluluk: Kredi kartı', + 'notes' => 'Notlar', + 'unknown_journal_error' => 'İşlem depolanamadı. Lütfen günlük dosyalarını kontrol edin.', + 'attachment_not_found' => 'Bu ek bulunamadı.', + 'journal_link_bill' => 'Bu işlem fatura ile bağlantılıdır :name. Bağlantıyı kaldırmak için onay kutusunun işaretini kaldırın. Başka bir faturaya bağlamak için kuralları kullanın.', + 'transaction_stored_link' => 'İşlem #{ID} ("{title}") saklı olmuştur.', + 'transaction_new_stored_link' => 'İşlem #{ID}saklı olmuştur.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => 'Firefly III\'e hoşgeldiniz!', - 'submit' => 'Gönder', - 'submission' => 'Submission', - 'submit_yes_really' => 'Submit (I know what I\'m doing)', - 'getting_started' => 'Başla', - 'to_get_started' => 'Firefly III\'ü başarılı şekilde yüklediğinizi görmek güzel. Bu aracı kullanmak için lütfen banka adınızı ve ana hesabınızın bakiyesini girin. Birden fazla hesabınız varsa endişelenmeyin. Onları daha sonra ekleyebilirsiniz. Bu adım sadece Firefly III\'ün bir yerden başlaması gerektiği içindir.', - 'savings_balance_text' => 'Firefly III sizin için otomatik olarak bir birikim hesabı oluşturacaktır. Varsayılan olarak birikim hesabınızda hiç para olmayacaktır ama Firefly III\'e dengelemesini söylerseniz o şekilde saklayacaktır.', - 'finish_up_new_user' => 'İşte bu! Submit tıklayarak devam edebilirsiniz. Firefly III Anasayfasına yönlendirileceksiniz.', - 'stored_new_accounts_new_user' => 'Yuppi! Yeni hesabınız kaydedildi.', - 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', - 'language' => 'Dil', - 'new_savings_account' => ':bank_name tasarruf hesabı', - 'cash_wallet' => 'Nakit cüzdan', - 'currency_not_present' => 'Normalde kullandığınız para birimi listelenmiyorsa endişelenmeyin. Seçenekler> Para Birimleri altında kendi para birimlerini oluşturabilirsiniz.', + 'welcome' => 'Firefly III\'e hoşgeldiniz!', + 'submit' => 'Gönder', + 'submission' => 'Submission', + 'submit_yes_really' => 'Submit (I know what I\'m doing)', + 'getting_started' => 'Başla', + 'to_get_started' => 'Firefly III\'ü başarılı şekilde yüklediğinizi görmek güzel. Bu aracı kullanmak için lütfen banka adınızı ve ana hesabınızın bakiyesini girin. Birden fazla hesabınız varsa endişelenmeyin. Onları daha sonra ekleyebilirsiniz. Bu adım sadece Firefly III\'ün bir yerden başlaması gerektiği içindir.', + 'savings_balance_text' => 'Firefly III sizin için otomatik olarak bir birikim hesabı oluşturacaktır. Varsayılan olarak birikim hesabınızda hiç para olmayacaktır ama Firefly III\'e dengelemesini söylerseniz o şekilde saklayacaktır.', + 'finish_up_new_user' => 'İşte bu! Submit tıklayarak devam edebilirsiniz. Firefly III Anasayfasına yönlendirileceksiniz.', + 'stored_new_accounts_new_user' => 'Yuppi! Yeni hesabınız kaydedildi.', + 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', + 'language' => 'Dil', + 'new_savings_account' => ':bank_name tasarruf hesabı', + 'cash_wallet' => 'Nakit cüzdan', + 'currency_not_present' => 'Normalde kullandığınız para birimi listelenmiyorsa endişelenmeyin. Seçenekler> Para Birimleri altında kendi para birimlerini oluşturabilirsiniz.', // home page: - 'transaction_table_description' => 'A table containing your transactions', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => 'Hesaplarınız', - 'your_accounts' => 'Your account overview', - 'category_overview' => 'Category overview', - 'expense_overview' => 'Expense account overview', - 'revenue_overview' => 'Revenue account overview', - 'budgetsAndSpending' => 'Bütçe ve Harcama', - 'budgets_and_spending' => 'Budgets and spending', - 'go_to_budget' => 'Go to budget "{budget}"', - 'go_to_deposits' => 'Go to deposits', - 'go_to_expenses' => 'Go to expenses', - 'savings' => 'Birikim', - 'newWithdrawal' => 'Yeni gider', - 'newDeposit' => 'Yeni mevduat', - 'newTransfer' => 'Yeni Transfer', - 'bills_to_pay' => 'Ödenecek fatura', - 'per_day' => 'Hergün', - 'left_to_spend_per_day' => 'Günlük harcama için bırakıldı', - 'bills_paid' => 'Ödenen Faturalar', - 'custom_period' => 'Custom period', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Select a period', + 'transaction_table_description' => 'A table containing your transactions', + 'opposing_account' => 'Opposing account', + 'yourAccounts' => 'Hesaplarınız', + 'your_accounts' => 'Your account overview', + 'category_overview' => 'Category overview', + 'expense_overview' => 'Expense account overview', + 'revenue_overview' => 'Revenue account overview', + 'budgetsAndSpending' => 'Bütçe ve Harcama', + 'budgets_and_spending' => 'Budgets and spending', + 'go_to_budget' => 'Go to budget "{budget}"', + 'go_to_deposits' => 'Go to deposits', + 'go_to_expenses' => 'Go to expenses', + 'savings' => 'Birikim', + 'newWithdrawal' => 'Yeni gider', + 'newDeposit' => 'Yeni mevduat', + 'newTransfer' => 'Yeni Transfer', + 'bills_to_pay' => 'Ödenecek fatura', + 'per_day' => 'Hergün', + 'left_to_spend_per_day' => 'Günlük harcama için bırakıldı', + 'bills_paid' => 'Ödenen Faturalar', + 'custom_period' => 'Custom period', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Select a period', // menu and titles, should be recycled as often as possible: - 'currency' => 'Para birimi', - 'preferences' => 'Tercihler', - 'logout' => 'Çıkış Yap', - 'logout_other_sessions' => 'Logout all other sessions', - 'toggleNavigation' => 'Navigasyonu aç / kapat', - 'searchPlaceholder' => 'Aranıyor...', - 'version' => 'Versiyon', - 'dashboard' => 'Gösterge paneli', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Available budget ({currency})', - 'currencies' => 'Kurlar', - 'activity' => 'Activity', - 'usage' => 'Usage', - 'accounts' => 'Hesaplar', - 'Asset account' => 'Varlık hesabı', - 'Default account' => 'Varlık hesabı', - 'Expense account' => 'Gider hesabı', - 'Revenue account' => 'Gelir hesabı', - 'Initial balance account' => 'Başlangıç bakiye hesabı', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Debt', - 'account_type_Loan' => 'Loan', - 'account_type_Mortgage' => 'Mortgage', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Credit card', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Bütçeler', - 'tags' => 'Etiketler', - 'reports' => 'Raporlar', - 'transactions' => 'İşlemler', - 'expenses' => 'Giderler', - 'income' => 'Gelir / gelir', - 'transfers' => 'Transferler', - 'moneyManagement' => 'Para Yönetimi', - 'money_management' => 'Money management', - 'tools' => 'Tools', - 'piggyBanks' => 'Kumbara', - 'piggy_banks' => 'Piggy banks', - 'amount_x_of_y' => '{current} of {total}', - 'bills' => 'Fatura', - 'withdrawal' => 'Para Çekme', - 'opening_balance' => 'Açılış bakiyesi', - 'deposit' => 'Mevduat', - 'account' => 'Hesap', - 'transfer' => 'Havale', - 'Withdrawal' => 'Para Çekme', - 'Deposit' => 'Mevduat', - 'Transfer' => 'Havale', - 'bill' => 'Fatura', - 'yes' => 'Evet', - 'no' => 'Hayır', - 'amount' => 'Miktar', - 'overview' => 'Genel Bakış', - 'saveOnAccount' => 'Hesabı Kaydet', - 'unknown' => 'Bilinmeyen', - 'monthly' => 'Aylık', - 'profile' => 'Profil', - 'errors' => 'Hatalar', - 'debt_start_date' => 'Start date of debt', - 'debt_start_amount' => 'Start amount of debt', - 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', - 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', - 'store_new_liabilities_account' => 'Store new liability', - 'edit_liabilities_account' => 'Edit liability ":name"', - 'financial_control' => 'Financial control', - 'accounting' => 'Accounting', - 'automation' => 'Automation', - 'others' => 'Others', - 'classification' => 'Classification', - 'store_transaction' => 'Store transaction', + 'currency' => 'Para birimi', + 'preferences' => 'Tercihler', + 'logout' => 'Çıkış Yap', + 'logout_other_sessions' => 'Logout all other sessions', + 'toggleNavigation' => 'Navigasyonu aç / kapat', + 'searchPlaceholder' => 'Aranıyor...', + 'version' => 'Versiyon', + 'dashboard' => 'Gösterge paneli', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Available budget ({currency})', + 'currencies' => 'Kurlar', + 'activity' => 'Activity', + 'usage' => 'Usage', + 'accounts' => 'Hesaplar', + 'Asset account' => 'Varlık hesabı', + 'Default account' => 'Varlık hesabı', + 'Expense account' => 'Gider hesabı', + 'Revenue account' => 'Gelir hesabı', + 'Initial balance account' => 'Başlangıç bakiye hesabı', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Debt', + 'account_type_Loan' => 'Loan', + 'account_type_Mortgage' => 'Mortgage', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Credit card', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'I am owed this debt', + 'liability_direction_debit' => 'I owe this debt to somebody else', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Bütçeler', + 'tags' => 'Etiketler', + 'reports' => 'Raporlar', + 'transactions' => 'İşlemler', + 'expenses' => 'Giderler', + 'income' => 'Gelir / gelir', + 'transfers' => 'Transferler', + 'moneyManagement' => 'Para Yönetimi', + 'money_management' => 'Money management', + 'tools' => 'Tools', + 'piggyBanks' => 'Kumbara', + 'piggy_banks' => 'Piggy banks', + 'amount_x_of_y' => '{current} of {total}', + 'bills' => 'Fatura', + 'withdrawal' => 'Para Çekme', + 'opening_balance' => 'Açılış bakiyesi', + 'deposit' => 'Mevduat', + 'account' => 'Hesap', + 'transfer' => 'Havale', + 'Withdrawal' => 'Para Çekme', + 'Deposit' => 'Mevduat', + 'Transfer' => 'Havale', + 'bill' => 'Fatura', + 'yes' => 'Evet', + 'no' => 'Hayır', + 'amount' => 'Miktar', + 'overview' => 'Genel Bakış', + 'saveOnAccount' => 'Hesabı Kaydet', + 'unknown' => 'Bilinmeyen', + 'monthly' => 'Aylık', + 'profile' => 'Profil', + 'errors' => 'Hatalar', + 'debt_start_date' => 'Start date of debt', + 'debt_start_amount' => 'Start amount of debt', + 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', + 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', + 'store_new_liabilities_account' => 'Store new liability', + 'edit_liabilities_account' => 'Edit liability ":name"', + 'financial_control' => 'Financial control', + 'accounting' => 'Accounting', + 'automation' => 'Automation', + 'others' => 'Others', + 'classification' => 'Classification', + 'store_transaction' => 'Store transaction', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2182,112 +2208,111 @@ return [ * */ - // reports: - 'report_default' => ':start ve :end arasında varsayılan finans raporu', - 'report_audit' => ':start ve :end arasında işlem geçmişine genel bakış', - 'report_category' => ':start ve :end arasında kategori raporu', - 'report_double' => 'Expense/revenue account report between :start and :end', - 'report_budget' => ':start ve :end arasında bütçe raporu', - 'report_tag' => ':start ve :end arasında etiket raporu', - 'quick_link_reports' => 'Hızlı Erişim', - 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', - 'quick_link_default_report' => 'Varsayılan finansal rapor', - 'quick_link_audit_report' => 'İşlem geçmişine genel bakış', - 'report_this_month_quick' => 'Cari ay, tüm hesaplar', - 'report_last_month_quick' => 'Last month, all accounts', - 'report_this_year_quick' => 'Cari yıl, tüm hesaplar', - 'report_this_fiscal_year_quick' => 'Cari mali yıl, bütün hesaplar', - 'report_all_time_quick' => 'Bütün zaman, bütün hesaplar', - 'reports_can_bookmark' => 'Raporların yer imlerine eklenebileceğini unutmayın.', - 'incomeVsExpenses' => 'Gelir ve giderler', - 'accountBalances' => 'Hesap bakiyeleri', - 'balanceStart' => 'Dönem Başında Bakiye', - 'balanceEnd' => 'Dönem Sonunda Bakiye', - 'splitByAccount' => 'Hesaplara göre bölünmüş', - 'coveredWithTags' => 'Etiketler kapatılmıştır', - 'leftInBudget' => 'Bütçede bırakıldı', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Hesap toplamı', - 'noCategory' => '(Kategori yok)', - 'notCharged' => 'Ücret alınmadı (henüz)', - 'inactive' => 'Etkisiz', - 'active' => 'Aktif', - 'difference' => 'Fark', - 'money_flowing_in' => 'İçeri', - 'money_flowing_out' => 'Dışarı', - 'topX' => 'üst :number', - 'show_full_list' => 'Tüm listeyi göster', - 'show_only_top' => 'Sadece üst :number göster', - 'report_type' => 'Rapor Türü', - 'report_type_default' => 'Varsayılan finansal rapor', - 'report_type_audit' => 'İşlem geçmişine genel bakış (denetim)', - 'report_type_category' => 'Kategori raporu', - 'report_type_budget' => 'Bütçe raporu', - 'report_type_tag' => 'Etiket raporu', - 'report_type_double' => 'Expense/revenue account report', - 'more_info_help' => 'Bu tür raporlar hakkında daha fazla bilgi yardım sayfalarında bulunabilir. Sağ üst köşedeki (?) simgesine basın.', - 'report_included_accounts' => 'Dahil edilen hesaplar', - 'report_date_range' => 'Tarih aralığı', - 'report_preset_ranges' => 'Önceden ayarlanmış aralıklar', - 'shared' => 'Paylaşılan', - 'fiscal_year' => 'Mali yıl', - 'income_entry' => ':start ve :end arasında ":name" hesabının geliri', - 'expense_entry' => ':start ve :end arasında ":name" hesabının giderleri', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => '":budget" bütçesindeki :start ve :end arası harcamalar', - 'balance_amount' => '":budget" bütçesindeki, ":account" hesabından :start ve :end arası ödenen giderler', - 'no_audit_activity' => ':account_name hesabında :start ve :end arasında hiç bir hareket kaydedilmedi.', - 'audit_end_balance' => ':end sonunda :account_name hesabının bakiyesi: :balance', - 'reports_extra_options' => 'Ekstra Seçenekler', - 'report_has_no_extra_options' => 'Bu raporda ekstra bir seçenek yok', - 'reports_submit' => 'Raporu görüntüle', - 'end_after_start_date' => 'Raporun bitiş tarihi, başlangıç tarihinden sonra olmalıdır.', - 'select_category' => 'Kategori (ler) seçin', - 'select_budget' => 'Bütçe (ler) seçin.', - 'select_tag' => 'Etiket (ler) seçin.', - 'income_per_category' => 'Kategori başına gelir', - 'expense_per_category' => 'Kategori başına harcama', - 'expense_per_budget' => 'Bütçe başına harcama', - 'income_per_account' => 'Hesap başına gelir', - 'expense_per_account' => 'Hesap başına gider', - 'expense_per_tag' => 'Etiket başına harcama', - 'income_per_tag' => 'Etiket başına gelir', - 'include_expense_not_in_budget' => 'Dahil edilen masraflar seçili bütçe(ler) içinde değil', - 'include_expense_not_in_account' => 'Dahil edilen masraflar seçili hesaplar(lar) içinde değil', - 'include_expense_not_in_category' => 'Dahil edilen masraflar seçili kategori(ler) içinde değil', - 'include_income_not_in_category' => 'Dahil edilen gelirler seçili kategori(ler) içinde değil', - 'include_income_not_in_account' => 'Dahil edilen gelirler seçili hesap(lar) içinde değil', - 'include_income_not_in_tags' => 'Dahil edilen gelirler seçili etiket(ler) içinde değil', - 'include_expense_not_in_tags' => 'Dahil edilen giderler seçili etiket(ler) içinde değil', - 'everything_else' => 'Geri kalan her şey', - 'income_and_expenses' => 'Gelir ve gider', - 'spent_average' => 'Harcanan (ortalama)', - 'income_average' => 'Gelir (ortalama)', - 'transaction_count' => 'İşlem sayısı', - 'average_spending_per_account' => 'Hesap başına ortalama harcama', - 'average_income_per_account' => 'Hesap başına ortalama gelir', - 'total' => 'Genel Toplam', - 'description' => 'Açıklama', - 'sum_of_period' => 'Dönemin toplamı', - 'average_in_period' => 'Dönem içinde ortalama', - 'account_role_defaultAsset' => 'Varsayılan varlık hesabı', - 'account_role_sharedAsset' => 'Paylaşılan varlık hesabı', - 'account_role_savingAsset' => 'Birikim hesabı', - 'account_role_ccAsset' => 'Kredi Kartı', - 'account_role_cashWalletAsset' => 'Nakit cüzdan', - 'budget_chart_click' => 'Bir grafik görmek için lütfen yukarıdaki tabloda bir bütçe adına tıklayın.', - 'category_chart_click' => 'Bir grafik görmek için lütfen yukarıdaki tabloda bir kategori adına tıklayın.', - 'in_out_accounts' => 'Kazanılan ve kombinasyon başına harcanan', - 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', - 'in_out_per_category' => 'Kazanılan ve kategori başına harcanan', - 'out_per_budget' => 'Bütçe başına harcama', - 'select_expense_revenue' => 'Harcama / gelir hesabı seçin', - 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', - 'sum_in_default_currency' => 'The sum will always be in your default currency.', - 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', + 'report_default' => ':start ve :end arasında varsayılan finans raporu', + 'report_audit' => ':start ve :end arasında işlem geçmişine genel bakış', + 'report_category' => ':start ve :end arasında kategori raporu', + 'report_double' => 'Expense/revenue account report between :start and :end', + 'report_budget' => ':start ve :end arasında bütçe raporu', + 'report_tag' => ':start ve :end arasında etiket raporu', + 'quick_link_reports' => 'Hızlı Erişim', + 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', + 'quick_link_default_report' => 'Varsayılan finansal rapor', + 'quick_link_audit_report' => 'İşlem geçmişine genel bakış', + 'report_this_month_quick' => 'Cari ay, tüm hesaplar', + 'report_last_month_quick' => 'Last month, all accounts', + 'report_this_year_quick' => 'Cari yıl, tüm hesaplar', + 'report_this_fiscal_year_quick' => 'Cari mali yıl, bütün hesaplar', + 'report_all_time_quick' => 'Bütün zaman, bütün hesaplar', + 'reports_can_bookmark' => 'Raporların yer imlerine eklenebileceğini unutmayın.', + 'incomeVsExpenses' => 'Gelir ve giderler', + 'accountBalances' => 'Hesap bakiyeleri', + 'balanceStart' => 'Dönem Başında Bakiye', + 'balanceEnd' => 'Dönem Sonunda Bakiye', + 'splitByAccount' => 'Hesaplara göre bölünmüş', + 'coveredWithTags' => 'Etiketler kapatılmıştır', + 'leftInBudget' => 'Bütçede bırakıldı', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Hesap toplamı', + 'noCategory' => '(Kategori yok)', + 'notCharged' => 'Ücret alınmadı (henüz)', + 'inactive' => 'Etkisiz', + 'active' => 'Aktif', + 'difference' => 'Fark', + 'money_flowing_in' => 'İçeri', + 'money_flowing_out' => 'Dışarı', + 'topX' => 'üst :number', + 'show_full_list' => 'Tüm listeyi göster', + 'show_only_top' => 'Sadece üst :number göster', + 'report_type' => 'Rapor Türü', + 'report_type_default' => 'Varsayılan finansal rapor', + 'report_type_audit' => 'İşlem geçmişine genel bakış (denetim)', + 'report_type_category' => 'Kategori raporu', + 'report_type_budget' => 'Bütçe raporu', + 'report_type_tag' => 'Etiket raporu', + 'report_type_double' => 'Expense/revenue account report', + 'more_info_help' => 'Bu tür raporlar hakkında daha fazla bilgi yardım sayfalarında bulunabilir. Sağ üst köşedeki (?) simgesine basın.', + 'report_included_accounts' => 'Dahil edilen hesaplar', + 'report_date_range' => 'Tarih aralığı', + 'report_preset_ranges' => 'Önceden ayarlanmış aralıklar', + 'shared' => 'Paylaşılan', + 'fiscal_year' => 'Mali yıl', + 'income_entry' => ':start ve :end arasında ":name" hesabının geliri', + 'expense_entry' => ':start ve :end arasında ":name" hesabının giderleri', + 'category_entry' => 'Expenses and income in category ":name" between :start and :end', + 'budget_spent_amount' => '":budget" bütçesindeki :start ve :end arası harcamalar', + 'balance_amount' => '":budget" bütçesindeki, ":account" hesabından :start ve :end arası ödenen giderler', + 'no_audit_activity' => ':account_name hesabında :start ve :end arasında hiç bir hareket kaydedilmedi.', + 'audit_end_balance' => ':end sonunda :account_name hesabının bakiyesi: :balance', + 'reports_extra_options' => 'Ekstra Seçenekler', + 'report_has_no_extra_options' => 'Bu raporda ekstra bir seçenek yok', + 'reports_submit' => 'Raporu görüntüle', + 'end_after_start_date' => 'Raporun bitiş tarihi, başlangıç tarihinden sonra olmalıdır.', + 'select_category' => 'Kategori (ler) seçin', + 'select_budget' => 'Bütçe (ler) seçin.', + 'select_tag' => 'Etiket (ler) seçin.', + 'income_per_category' => 'Kategori başına gelir', + 'expense_per_category' => 'Kategori başına harcama', + 'expense_per_budget' => 'Bütçe başına harcama', + 'income_per_account' => 'Hesap başına gelir', + 'expense_per_account' => 'Hesap başına gider', + 'expense_per_tag' => 'Etiket başına harcama', + 'income_per_tag' => 'Etiket başına gelir', + 'include_expense_not_in_budget' => 'Dahil edilen masraflar seçili bütçe(ler) içinde değil', + 'include_expense_not_in_account' => 'Dahil edilen masraflar seçili hesaplar(lar) içinde değil', + 'include_expense_not_in_category' => 'Dahil edilen masraflar seçili kategori(ler) içinde değil', + 'include_income_not_in_category' => 'Dahil edilen gelirler seçili kategori(ler) içinde değil', + 'include_income_not_in_account' => 'Dahil edilen gelirler seçili hesap(lar) içinde değil', + 'include_income_not_in_tags' => 'Dahil edilen gelirler seçili etiket(ler) içinde değil', + 'include_expense_not_in_tags' => 'Dahil edilen giderler seçili etiket(ler) içinde değil', + 'everything_else' => 'Geri kalan her şey', + 'income_and_expenses' => 'Gelir ve gider', + 'spent_average' => 'Harcanan (ortalama)', + 'income_average' => 'Gelir (ortalama)', + 'transaction_count' => 'İşlem sayısı', + 'average_spending_per_account' => 'Hesap başına ortalama harcama', + 'average_income_per_account' => 'Hesap başına ortalama gelir', + 'total' => 'Genel Toplam', + 'description' => 'Açıklama', + 'sum_of_period' => 'Dönemin toplamı', + 'average_in_period' => 'Dönem içinde ortalama', + 'account_role_defaultAsset' => 'Varsayılan varlık hesabı', + 'account_role_sharedAsset' => 'Paylaşılan varlık hesabı', + 'account_role_savingAsset' => 'Birikim hesabı', + 'account_role_ccAsset' => 'Kredi Kartı', + 'account_role_cashWalletAsset' => 'Nakit cüzdan', + 'budget_chart_click' => 'Bir grafik görmek için lütfen yukarıdaki tabloda bir bütçe adına tıklayın.', + 'category_chart_click' => 'Bir grafik görmek için lütfen yukarıdaki tabloda bir kategori adına tıklayın.', + 'in_out_accounts' => 'Kazanılan ve kombinasyon başına harcanan', + 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', + 'in_out_per_category' => 'Kazanılan ve kategori başına harcanan', + 'out_per_budget' => 'Bütçe başına harcama', + 'select_expense_revenue' => 'Harcama / gelir hesabı seçin', + 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', + 'sum_in_default_currency' => 'The sum will always be in your default currency.', + 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2298,98 +2323,98 @@ return [ * */ - // charts: - 'chart' => 'Grafik', - 'month' => 'Ay', - 'budget' => 'Bütçe', - 'spent' => 'Harcanan', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => 'Bütçede harcama', - 'left_to_spend' => 'Harcama için bırakıldı', - 'earned' => 'Kazanılan', - 'overspent' => 'Fazladan', - 'left' => 'Ayrıldı', - 'max-amount' => 'En yüksek miktar', - 'min-amount' => 'Minimum amount', - 'journal-amount' => 'Geçerli fatura girişi', - 'name' => 'İsim', - 'date' => 'Tarih', - 'date_and_time' => 'Date and time', - 'time' => 'Time', - 'paid' => 'Ödendi', - 'unpaid' => 'Ödenmedi', - 'day' => 'Gün', - 'budgeted' => 'Bütçelenen', - 'period' => 'Dönem', - 'balance' => 'Denge', - 'in_out_period' => 'In + out this period', - 'sum' => 'Toplam', - 'summary' => 'Summary', - 'average' => 'Ortalama', - 'balanceFor' => ':name için bakiye', - 'no_tags' => '(no tags)', + 'chart' => 'Grafik', + 'month' => 'Ay', + 'budget' => 'Bütçe', + 'spent' => 'Harcanan', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => 'Bütçede harcama', + 'left_to_spend' => 'Harcama için bırakıldı', + 'earned' => 'Kazanılan', + 'overspent' => 'Fazladan', + 'left' => 'Ayrıldı', + 'max-amount' => 'En yüksek miktar', + 'min-amount' => 'Minimum amount', + 'journal-amount' => 'Geçerli fatura girişi', + 'name' => 'İsim', + 'date' => 'Tarih', + 'date_and_time' => 'Date and time', + 'time' => 'Time', + 'paid' => 'Ödendi', + 'unpaid' => 'Ödenmedi', + 'day' => 'Gün', + 'budgeted' => 'Bütçelenen', + 'period' => 'Dönem', + 'balance' => 'Denge', + 'in_out_period' => 'In + out this period', + 'sum' => 'Toplam', + 'summary' => 'Summary', + 'average' => 'Ortalama', + 'balanceFor' => ':name için bakiye', + 'no_tags' => '(no tags)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => '":name" kumbarasına paraa ekle', - 'piggy_bank' => 'Kumbara', - 'new_piggy_bank' => 'Yeni kumbara', - 'store_piggy_bank' => 'Yeni bir kumbara kaydet', - 'stored_piggy_bank' => '":name" isimli yeni bir kumbara kaydet', - 'account_status' => 'Hesap Durumu', - 'left_for_piggy_banks' => 'Kumbara için sola', - 'sum_of_piggy_banks' => 'Kumbaranın toplamı', - 'saved_so_far' => 'Şimdiye kadar biriktirilmiş', - 'left_to_save' => 'Kaydetmek için sola', - 'suggested_amount' => 'Birikim için önerilen aylık tutar', - 'add_money_to_piggy_title' => '":name" kumbarasına para ekle', - 'remove_money_from_piggy_title' => '":name" kumbarasından para çek', - 'add' => 'Ekle', - 'no_money_for_piggy' => 'Bu kumbaraya koyacak paran yok.', - 'suggested_savings_per_month' => 'Aylık önerildi', + 'event_history' => 'Event history', + 'add_money_to_piggy' => '":name" kumbarasına paraa ekle', + 'piggy_bank' => 'Kumbara', + 'new_piggy_bank' => 'Yeni kumbara', + 'store_piggy_bank' => 'Yeni bir kumbara kaydet', + 'stored_piggy_bank' => '":name" isimli yeni bir kumbara kaydet', + 'account_status' => 'Hesap Durumu', + 'left_for_piggy_banks' => 'Kumbara için sola', + 'sum_of_piggy_banks' => 'Kumbaranın toplamı', + 'saved_so_far' => 'Şimdiye kadar biriktirilmiş', + 'left_to_save' => 'Kaydetmek için sola', + 'suggested_amount' => 'Birikim için önerilen aylık tutar', + 'add_money_to_piggy_title' => '":name" kumbarasına para ekle', + 'remove_money_from_piggy_title' => '":name" kumbarasından para çek', + 'add' => 'Ekle', + 'no_money_for_piggy' => 'Bu kumbaraya koyacak paran yok.', + 'suggested_savings_per_month' => 'Aylık önerildi', - 'remove' => 'Kaldır', - 'max_amount_add' => 'Ekleyebileceğiniz azami tutar', - 'max_amount_remove' => 'Kaldırabileceğiniz maksimum tutar', - 'update_piggy_button' => 'Kumbarayı güncelle', - 'update_piggy_title' => '":name" kumbarasını güncelle', - 'updated_piggy_bank' => '":name" kumbarası güncellenmiş', - 'details' => 'Detaylar', - 'events' => 'Etkinlikler', - 'target_amount' => 'Hedef miktar', - 'start_date' => 'Başlangıç Tarihi', - 'no_start_date' => 'başlangıç tarihi yok', - 'target_date' => 'Hedeflenen tarih', - 'no_target_date' => 'Hedef tarihi yok', - 'table' => 'Tablo', - 'delete_piggy_bank' => '":name" (adlı) kumbarayı sil', - 'cannot_add_amount_piggy' => '":name" değerine "amount:" eklenemedi.', - 'cannot_remove_from_piggy' => '":name" adresinden miktar kaldırılamadı.', - 'deleted_piggy_bank' => '":name" kumbarası silinmiş', - 'added_amount_to_piggy' => '":name" e kadar olan miktar eklendi', - 'removed_amount_from_piggy' => '":name"\'den :amount" silindi', - 'piggy_events' => 'Related piggy banks', + 'remove' => 'Kaldır', + 'max_amount_add' => 'Ekleyebileceğiniz azami tutar', + 'max_amount_remove' => 'Kaldırabileceğiniz maksimum tutar', + 'update_piggy_button' => 'Kumbarayı güncelle', + 'update_piggy_title' => '":name" kumbarasını güncelle', + 'updated_piggy_bank' => '":name" kumbarası güncellenmiş', + 'details' => 'Detaylar', + 'events' => 'Etkinlikler', + 'target_amount' => 'Hedef miktar', + 'start_date' => 'Başlangıç Tarihi', + 'no_start_date' => 'başlangıç tarihi yok', + 'target_date' => 'Hedeflenen tarih', + 'no_target_date' => 'Hedef tarihi yok', + 'table' => 'Tablo', + 'delete_piggy_bank' => '":name" (adlı) kumbarayı sil', + 'cannot_add_amount_piggy' => '":name" değerine "amount:" eklenemedi.', + 'cannot_remove_from_piggy' => '":name" adresinden miktar kaldırılamadı.', + 'deleted_piggy_bank' => '":name" kumbarası silinmiş', + 'added_amount_to_piggy' => '":name" e kadar olan miktar eklendi', + 'removed_amount_from_piggy' => '":name"\'den :amount" silindi', + 'piggy_events' => 'Related piggy banks', // tags - 'delete_tag' => '":tag" etiketi sil', - 'deleted_tag' => '":tag" etiketi silinmiş', - 'new_tag' => 'Yeni etiket yap', - 'edit_tag' => '":tag" etiketi düzenle', - 'updated_tag' => 'Güncellenmiş etiket ":tag"', - 'created_tag' => 'Tag ":tag" oluşturuldu!', + 'delete_tag' => '":tag" etiketi sil', + 'deleted_tag' => '":tag" etiketi silinmiş', + 'new_tag' => 'Yeni etiket yap', + 'edit_tag' => '":tag" etiketi düzenle', + 'updated_tag' => 'Güncellenmiş etiket ":tag"', + 'created_tag' => 'Tag ":tag" oluşturuldu!', - 'transaction_journal_information' => 'İşlem Bilgileri', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta Bilgisi', - 'transaction_journal_more' => 'More information', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Stored under ":journal"', - 'total_amount' => 'Toplam Tutar', - 'number_of_decimals' => 'Ondalık Sayı', + 'transaction_journal_information' => 'İşlem Bilgileri', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Meta Bilgisi', + 'transaction_journal_more' => 'More information', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => 'Stored under ":journal"', + 'total_amount' => 'Toplam Tutar', + 'number_of_decimals' => 'Ondalık Sayı', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2400,282 +2425,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Yönetim', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Kullanıcı Yönetimi', - 'list_all_users' => 'Tüm kullanıcılar', - 'all_users' => 'Tüm kullanıcılar', - 'instance_configuration' => 'Yapılandırma', - 'firefly_instance_configuration' => 'Firefly III için yapılandırma seçenekleri', - 'setting_single_user_mode' => 'Tek kullanıcı modu', - 'setting_single_user_mode_explain' => 'Varsayılan olarak Firefly III sadece bir kayıt kabul eder: sizi. Bu başkalarının sizin isteklerinizi kontrol etmemesi için bir güvenlik önlemidir. Gelecekteki kayıtlar engellendi. Bu kutunun işaretini kaldırdığınızda erişebildiklerini var sayarsak (internete bağlı olduğunda) başkaları da sizin isteklerinizi kullanabilir.', - 'store_configuration' => 'Mağaza yapılandırması', - 'single_user_administration' => ':email için kullanıcı yönetimi', - 'edit_user' => ':email kullanıcısını düzenle', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'Kullanıcı bilgisi', - 'user_information' => 'Kullanıcı bilgisi', - 'total_size' => 'toplam boyut', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_groups kural gruplarındaki :count_rules kuralları', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'Yapılandırma güncellendi', - 'setting_is_demo_site' => 'Tanıtım videosu', - 'setting_is_demo_site_explain' => 'Bu kutuyu işaretlediniz, bu yükleme, demo sitesinin sanki garip yan etkilere sahipmiş gibi davranır.', - 'block_code_bounced' => 'E-posta mesajı geri çevrildi', - 'block_code_expired' => 'Demo hesabı doldu', - 'no_block_code' => 'Engellemek için bir neden yok ya da kullanıcı engellenmemiş', - 'block_code_email_changed' => 'Kullanıcı henüz yeni bir e-posta adresi teyit etmedi', - 'admin_update_email' => 'Profil sayfasının aksine kullanıcı e-posta adresleri değiştirildiğinde bildirim ALMAYACAKLAR!', - 'update_user' => 'Kullanıcıyı güncelle', - 'updated_user' => 'Kullanıcı verileri değiştirildi.', - 'delete_user' => 'Kullanıcıyı sil :email', - 'user_deleted' => 'Kullanıcı silindi', - 'send_test_email' => 'E-posta adresine test mesajı gönder', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Mesaj gönder', - 'send_test_triggered' => 'Test tetiklendi. Gelen kutunuzu ve kayıt dosyalarınızı kontrol ediniz.', - 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', - 'admin_maintanance_title' => 'Maintenance', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Clear cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Description of the split transaction', - 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'you_create_transfer' => 'You\'re creating a transfer.', - 'you_create_withdrawal' => 'You\'re creating a withdrawal.', - 'you_create_deposit' => 'You\'re creating a deposit.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Yönetim', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'Kullanıcı Yönetimi', + 'list_all_users' => 'Tüm kullanıcılar', + 'all_users' => 'Tüm kullanıcılar', + 'instance_configuration' => 'Yapılandırma', + 'firefly_instance_configuration' => 'Firefly III için yapılandırma seçenekleri', + 'setting_single_user_mode' => 'Tek kullanıcı modu', + 'setting_single_user_mode_explain' => 'Varsayılan olarak Firefly III sadece bir kayıt kabul eder: sizi. Bu başkalarının sizin isteklerinizi kontrol etmemesi için bir güvenlik önlemidir. Gelecekteki kayıtlar engellendi. Bu kutunun işaretini kaldırdığınızda erişebildiklerini var sayarsak (internete bağlı olduğunda) başkaları da sizin isteklerinizi kullanabilir.', + 'store_configuration' => 'Mağaza yapılandırması', + 'single_user_administration' => ':email için kullanıcı yönetimi', + 'edit_user' => ':email kullanıcısını düzenle', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'Kullanıcı bilgisi', + 'user_information' => 'Kullanıcı bilgisi', + 'total_size' => 'toplam boyut', + 'budget_or_budgets' => ':count budget|:count budgets', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_groups kural gruplarındaki :count_rules kuralları', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'Yapılandırma güncellendi', + 'setting_is_demo_site' => 'Tanıtım videosu', + 'setting_is_demo_site_explain' => 'Bu kutuyu işaretlediniz, bu yükleme, demo sitesinin sanki garip yan etkilere sahipmiş gibi davranır.', + 'block_code_bounced' => 'E-posta mesajı geri çevrildi', + 'block_code_expired' => 'Demo hesabı doldu', + 'no_block_code' => 'Engellemek için bir neden yok ya da kullanıcı engellenmemiş', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Kullanıcı henüz yeni bir e-posta adresi teyit etmedi', + 'admin_update_email' => 'Profil sayfasının aksine kullanıcı e-posta adresleri değiştirildiğinde bildirim ALMAYACAKLAR!', + 'update_user' => 'Kullanıcıyı güncelle', + 'updated_user' => 'Kullanıcı verileri değiştirildi.', + 'delete_user' => 'Kullanıcıyı sil :email', + 'user_deleted' => 'Kullanıcı silindi', + 'send_test_email' => 'E-posta adresine test mesajı gönder', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Mesaj gönder', + 'send_test_triggered' => 'Test tetiklendi. Gelen kutunuzu ve kayıt dosyalarınızı kontrol ediniz.', + 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', + 'admin_maintanance_title' => 'Maintenance', + 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', + 'admin_maintenance_clear_cache' => 'Clear cache', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Description of the split transaction', + 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'you_create_transfer' => 'You\'re creating a transfer.', + 'you_create_withdrawal' => 'You\'re creating a withdrawal.', + 'you_create_deposit' => 'You\'re creating a deposit.', // links - 'journal_link_configuration' => 'İşlem bağlantıları yapılandırması', - 'create_new_link_type' => 'Yeni bağlantı türü oluştur', - 'store_new_link_type' => 'Yeni bağlantı türünü kaydet', - 'update_link_type' => 'Bağlantı türünü güncelle', - 'edit_link_type' => '":name" bağlantı türünü düzenleyin', - 'updated_link_type' => '":name" bağlantı türünü güncelleyin', - 'delete_link_type' => '":name" bağlantı türünü silin', - 'deleted_link_type' => '":name" bağlantı türü silinmiş', - 'stored_new_link_type' => '":name" yeni bağlantı türünü kaydet', - 'cannot_edit_link_type' => '":name" bağlantı türü düzenlenemiyor', - 'link_type_help_name' => 'Yani "Kopyalar"', - 'link_type_help_inward' => 'Yani "kopyalar"', - 'link_type_help_outward' => 'Yani "tarafından çoğaltılmış"', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(bağlantıyı kaydetme)', - 'link_transaction' => 'Bağlantı işlemi', - 'link_to_other_transaction' => 'Bu işlemi başka bir işlemle bağlantılandır', - 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', - 'this_transaction' => 'Bu işlem', - 'transaction' => 'İşlem', - 'comments' => 'Yorumlar', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Bu işlemler bağlantılanamıyor', - 'selected_transaction' => 'Selected transaction', - 'journals_linked' => 'İşlemler bağlantıları oluşturuldu.', - 'journals_error_linked' => 'Bu işlemler zaten bağlantılı.', - 'journals_link_to_self' => 'Kendisi için bir ilişki ekleyemezsiniz.', - 'journal_links' => 'İşlem bağlantıları', - 'this_withdrawal' => 'Bu çekim', - 'this_deposit' => 'Bu depozito', - 'this_transfer' => 'Bu transfer', - 'overview_for_link' => '":name" bağlantı tipine genel bakış', - 'source_transaction' => 'İşlem kaynağı', - 'link_description' => 'Bağlantı açıklaması', - 'destination_transaction' => 'Hedef işlem', - 'delete_journal_link' => ':sourceve:destination arasında bağlantıyı sil', - 'deleted_link' => 'Bağlantı silindi', + 'journal_link_configuration' => 'İşlem bağlantıları yapılandırması', + 'create_new_link_type' => 'Yeni bağlantı türü oluştur', + 'store_new_link_type' => 'Yeni bağlantı türünü kaydet', + 'update_link_type' => 'Bağlantı türünü güncelle', + 'edit_link_type' => '":name" bağlantı türünü düzenleyin', + 'updated_link_type' => '":name" bağlantı türünü güncelleyin', + 'delete_link_type' => '":name" bağlantı türünü silin', + 'deleted_link_type' => '":name" bağlantı türü silinmiş', + 'stored_new_link_type' => '":name" yeni bağlantı türünü kaydet', + 'cannot_edit_link_type' => '":name" bağlantı türü düzenlenemiyor', + 'link_type_help_name' => 'Yani "Kopyalar"', + 'link_type_help_inward' => 'Yani "kopyalar"', + 'link_type_help_outward' => 'Yani "tarafından çoğaltılmış"', + 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', + 'do_not_save_connection' => '(bağlantıyı kaydetme)', + 'link_transaction' => 'Bağlantı işlemi', + 'link_to_other_transaction' => 'Bu işlemi başka bir işlemle bağlantılandır', + 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', + 'this_transaction' => 'Bu işlem', + 'transaction' => 'İşlem', + 'comments' => 'Yorumlar', + 'link_notes' => 'Any notes you wish to store with the link.', + 'invalid_link_selection' => 'Bu işlemler bağlantılanamıyor', + 'selected_transaction' => 'Selected transaction', + 'journals_linked' => 'İşlemler bağlantıları oluşturuldu.', + 'journals_error_linked' => 'Bu işlemler zaten bağlantılı.', + 'journals_link_to_self' => 'Kendisi için bir ilişki ekleyemezsiniz.', + 'journal_links' => 'İşlem bağlantıları', + 'this_withdrawal' => 'Bu çekim', + 'this_deposit' => 'Bu depozito', + 'this_transfer' => 'Bu transfer', + 'overview_for_link' => '":name" bağlantı tipine genel bakış', + 'source_transaction' => 'İşlem kaynağı', + 'link_description' => 'Bağlantı açıklaması', + 'destination_transaction' => 'Hedef işlem', + 'delete_journal_link' => ':sourceve:destination arasında bağlantıyı sil', + 'deleted_link' => 'Bağlantı silindi', // link translations: - 'Paid_name' => 'Paid', - 'Refund_name' => 'Refund', - 'Reimbursement_name' => 'Reimbursement', - 'Related_name' => 'Related', - 'relates to_inward' => 'ile ilişkili', - 'is (partially) refunded by_inward' => 'tarafından (kısmen) geri ödendi', - 'is (partially) paid for by_inward' => 'tarafından (kısmen) ödendi', - 'is (partially) reimbursed by_inward' => 'tarafından (kısmen) iade edildi', - 'inward_transaction' => 'Içe işlem', - 'outward_transaction' => 'Dış işlem', - 'relates to_outward' => 'ile ilişkili', - '(partially) refunds_outward' => '(kısmen) geri ödeme', - '(partially) pays for_outward' => 'için (kısmen) öder', - '(partially) reimburses_outward' => '(kısmen) iade edilir', - 'is (partially) refunded by' => 'is (partially) refunded by', - 'is (partially) paid for by' => 'is (partially) paid for by', - 'is (partially) reimbursed by' => 'is (partially) reimbursed by', - 'relates to' => 'relates to', - '(partially) refunds' => '(partially) refunds', - '(partially) pays for' => '(partially) pays for', - '(partially) reimburses' => '(partially) reimburses', + 'Paid_name' => 'Paid', + 'Refund_name' => 'Refund', + 'Reimbursement_name' => 'Reimbursement', + 'Related_name' => 'Related', + 'relates to_inward' => 'ile ilişkili', + 'is (partially) refunded by_inward' => 'tarafından (kısmen) geri ödendi', + 'is (partially) paid for by_inward' => 'tarafından (kısmen) ödendi', + 'is (partially) reimbursed by_inward' => 'tarafından (kısmen) iade edildi', + 'inward_transaction' => 'Içe işlem', + 'outward_transaction' => 'Dış işlem', + 'relates to_outward' => 'ile ilişkili', + '(partially) refunds_outward' => '(kısmen) geri ödeme', + '(partially) pays for_outward' => 'için (kısmen) öder', + '(partially) reimburses_outward' => '(kısmen) iade edilir', + 'is (partially) refunded by' => 'is (partially) refunded by', + 'is (partially) paid for by' => 'is (partially) paid for by', + 'is (partially) reimbursed by' => 'is (partially) reimbursed by', + 'relates to' => 'relates to', + '(partially) refunds' => '(partially) refunds', + '(partially) pays for' => '(partially) pays for', + '(partially) reimburses' => '(partially) reimburses', // split a transaction: - 'splits' => 'Bölmeler', - 'add_another_split' => 'Başka bir bölme ekle', - 'cannot_edit_opening_balance' => 'Bir hesabın açılış bakiyesini düzenleyemezsiniz.', - 'no_edit_multiple_left' => 'Düzenlemek için geçerli İşlemler seçmediniz.', - 'breadcrumb_convert_group' => 'Convert transaction', - 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', - 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', - 'create_another' => 'After storing, return here to create another one.', - 'after_update_create_another' => 'After updating, return here to continue editing.', - 'store_as_new' => 'Store as a new transaction instead of updating.', - 'reset_after' => 'Reset form after submission', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Bölmeler', + 'add_another_split' => 'Başka bir bölme ekle', + 'cannot_edit_opening_balance' => 'Bir hesabın açılış bakiyesini düzenleyemezsiniz.', + 'no_edit_multiple_left' => 'Düzenlemek için geçerli İşlemler seçmediniz.', + 'breadcrumb_convert_group' => 'Convert transaction', + 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', + 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', + 'create_another' => 'After storing, return here to create another one.', + 'after_update_create_another' => 'After updating, return here to continue editing.', + 'store_as_new' => 'Store as a new transaction instead of updating.', + 'reset_after' => 'Reset form after submission', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(ungrouped)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ungrouped)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Bir varlık hesabı oluşturalım!', - 'no_accounts_intro_asset' => 'Henüz varlık hesabınız yok. Varlık hesapları ana hesaplarınızdır: çek hesabı, birikim hesabı, paylaşılan hesabınız veya kredi kartınız.', - 'no_accounts_imperative_asset' => 'Firefly III kullanmaya başlamak için en az bir varlık hesabı açmanız gerekir. Hadi şimdi yapalım:', - 'no_accounts_create_asset' => 'Yeni varlık hesabı oluştur', - 'no_accounts_title_expense' => 'Haydi bir gider hesabı oluşturalım!', - 'no_accounts_intro_expense' => 'Henüz gider hesaplarınız yok. Gider hesapları parayı harcadığınız yerdir, dükkanlar ve süpermarketler gibi.', - 'no_accounts_imperative_expense' => 'Gider hesapları işlemler oluşturduğunuzda otomatik olarak oluşturulur, ama eğer isterseniz manuel olarak da bir tane oluşturabilirsiniz. Haydi şimdi bir tane oluşturalım:', - 'no_accounts_create_expense' => 'Bir masraf hesabı oluştur', - 'no_accounts_title_revenue' => 'Gelir hesabı oluşturalım!', - 'no_accounts_intro_revenue' => 'Henüz gelir hesaplarınız yok. Gelir hesapları para almanızı sağlayan yerdir, tıpkı işvereniniz gibi.', - 'no_accounts_imperative_revenue' => 'Gelir hesapları, işlemler oluşturduğunuzda otomatikmen oluşturulur, ama isterseniz manuel olarak da bir tane oluşturabilirsiniz. Hadi şimdi bir tane oluşturalım:', - 'no_accounts_create_revenue' => 'Bir gelir hesabı oluşturun', - 'no_accounts_title_liabilities' => 'Let\'s create a liability!', - 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', - 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', - 'no_accounts_create_liabilities' => 'Create a liability', - 'no_budgets_title_default' => 'Bütçe oluşturalım', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Bütçeler, finansal yönetimin temel araçlarıdır. Şimdi bir tane oluşturalım:', - 'no_budgets_create_default' => 'Bir bütçe oluştur', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Bir kategori oluşturalım!', - 'no_categories_intro_default' => 'Henüz kategorileriniz yok. Kategoriler işlemlerinizi ayrıntılı ayarlamak ve onları belirlenmiş olan kategorilere etiketlemenize yarar.', - 'no_categories_imperative_default' => 'Kategoriler, işlemler oluşturduğunuzda otomatikmen oluşturulur, ama siz manuel olarak da oluşturabilirsiniz. Hadi bir tane oluşturalım:', - 'no_categories_create_default' => 'Bir kategori oluştur', - 'no_tags_title_default' => 'Bir etiket oluşturalım!', - 'no_tags_intro_default' => 'Henüz etiketler yok. Etiketler, işlemlerinizi ayrıntılı ayarlamak ve onları özel anahtar kelimelerle etiketlemenize yarar.', - 'no_tags_imperative_default' => 'Etiketler, işlemler oluşturduğunuzda otomatikmen oluşturulur, ama siz manuel olarak da oluşturabilirsiniz. Haydi bir tane oluşturalım şimdi:', - 'no_tags_create_default' => 'Etiket oluştur', - 'no_transactions_title_withdrawal' => 'Hadi bir gider oluşturalım!', - 'no_transactions_intro_withdrawal' => 'Henüz giderleriniz yok. Maliyenizi yönetmek için giderler oluşturmanız gerekir.', - 'no_transactions_imperative_withdrawal' => 'Biraz para harcadın mı? O zaman şunu yazmalısın:', - 'no_transactions_create_withdrawal' => 'Bir gider oluştur', - 'no_transactions_title_deposit' => 'Bir kaç gelir oluşturalım!', - 'no_transactions_intro_deposit' => 'Kayıtlı bir geliriniz henüz yok. Giderlerinizi yönetmeye başlamak için gelir girdileri oluşturmalısınız.', - 'no_transactions_imperative_deposit' => 'Biraz para aldınız mı? Ozaman aşağıya yazmanız gerekir:', - 'no_transactions_create_deposit' => 'Para yatırma', - 'no_transactions_title_transfers' => 'Bir transfer oluşturalım!', - 'no_transactions_intro_transfers' => 'Henüz bir transferiniz yok. Varlık hesapları arasında para taşıdığınızda, bir transfer olarak kaydedilir.', - 'no_transactions_imperative_transfers' => 'Biraz para mı harcadın? O zaman onu aşağıya yazmalısın:', - 'no_transactions_create_transfers' => 'Aktarma oluştur', - 'no_piggies_title_default' => 'Bir kumbara oluşturalım!', - 'no_piggies_intro_default' => 'Henüz kumbaranız yok. Kazançlarınızı bölmek ve ne kazandığınızı izlemek için kumbaralar oluşturabilirsiniz.', - 'no_piggies_imperative_default' => 'Para biriktirdiğiniz birşeyler var mı? Bir kumbara oluşturun ve takip edin:', - 'no_piggies_create_default' => 'Yeni bir kumbara yarat', - 'no_bills_title_default' => 'Bir fatura oluşturalım!', - 'no_bills_intro_default' => 'Henüz bir faturanız yok. Kira veya sigortanız gibi düzenli giderleri takip etmek için faturalar oluşturabilirsiniz.', - 'no_bills_imperative_default' => 'Böyle düzenli faturalarınız var mı? Bir fatura oluşturun ve ödemelerinizi takip edin:', - 'no_bills_create_default' => 'Fatura oluştur', + 'no_accounts_title_asset' => 'Bir varlık hesabı oluşturalım!', + 'no_accounts_intro_asset' => 'Henüz varlık hesabınız yok. Varlık hesapları ana hesaplarınızdır: çek hesabı, birikim hesabı, paylaşılan hesabınız veya kredi kartınız.', + 'no_accounts_imperative_asset' => 'Firefly III kullanmaya başlamak için en az bir varlık hesabı açmanız gerekir. Hadi şimdi yapalım:', + 'no_accounts_create_asset' => 'Yeni varlık hesabı oluştur', + 'no_accounts_title_expense' => 'Haydi bir gider hesabı oluşturalım!', + 'no_accounts_intro_expense' => 'Henüz gider hesaplarınız yok. Gider hesapları parayı harcadığınız yerdir, dükkanlar ve süpermarketler gibi.', + 'no_accounts_imperative_expense' => 'Gider hesapları işlemler oluşturduğunuzda otomatik olarak oluşturulur, ama eğer isterseniz manuel olarak da bir tane oluşturabilirsiniz. Haydi şimdi bir tane oluşturalım:', + 'no_accounts_create_expense' => 'Bir masraf hesabı oluştur', + 'no_accounts_title_revenue' => 'Gelir hesabı oluşturalım!', + 'no_accounts_intro_revenue' => 'Henüz gelir hesaplarınız yok. Gelir hesapları para almanızı sağlayan yerdir, tıpkı işvereniniz gibi.', + 'no_accounts_imperative_revenue' => 'Gelir hesapları, işlemler oluşturduğunuzda otomatikmen oluşturulur, ama isterseniz manuel olarak da bir tane oluşturabilirsiniz. Hadi şimdi bir tane oluşturalım:', + 'no_accounts_create_revenue' => 'Bir gelir hesabı oluşturun', + 'no_accounts_title_liabilities' => 'Let\'s create a liability!', + 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', + 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', + 'no_accounts_create_liabilities' => 'Create a liability', + 'no_budgets_title_default' => 'Bütçe oluşturalım', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Bütçeler, finansal yönetimin temel araçlarıdır. Şimdi bir tane oluşturalım:', + 'no_budgets_create_default' => 'Bir bütçe oluştur', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Bir kategori oluşturalım!', + 'no_categories_intro_default' => 'Henüz kategorileriniz yok. Kategoriler işlemlerinizi ayrıntılı ayarlamak ve onları belirlenmiş olan kategorilere etiketlemenize yarar.', + 'no_categories_imperative_default' => 'Kategoriler, işlemler oluşturduğunuzda otomatikmen oluşturulur, ama siz manuel olarak da oluşturabilirsiniz. Hadi bir tane oluşturalım:', + 'no_categories_create_default' => 'Bir kategori oluştur', + 'no_tags_title_default' => 'Bir etiket oluşturalım!', + 'no_tags_intro_default' => 'Henüz etiketler yok. Etiketler, işlemlerinizi ayrıntılı ayarlamak ve onları özel anahtar kelimelerle etiketlemenize yarar.', + 'no_tags_imperative_default' => 'Etiketler, işlemler oluşturduğunuzda otomatikmen oluşturulur, ama siz manuel olarak da oluşturabilirsiniz. Haydi bir tane oluşturalım şimdi:', + 'no_tags_create_default' => 'Etiket oluştur', + 'no_transactions_title_withdrawal' => 'Hadi bir gider oluşturalım!', + 'no_transactions_intro_withdrawal' => 'Henüz giderleriniz yok. Maliyenizi yönetmek için giderler oluşturmanız gerekir.', + 'no_transactions_imperative_withdrawal' => 'Biraz para harcadın mı? O zaman şunu yazmalısın:', + 'no_transactions_create_withdrawal' => 'Bir gider oluştur', + 'no_transactions_title_deposit' => 'Bir kaç gelir oluşturalım!', + 'no_transactions_intro_deposit' => 'Kayıtlı bir geliriniz henüz yok. Giderlerinizi yönetmeye başlamak için gelir girdileri oluşturmalısınız.', + 'no_transactions_imperative_deposit' => 'Biraz para aldınız mı? Ozaman aşağıya yazmanız gerekir:', + 'no_transactions_create_deposit' => 'Para yatırma', + 'no_transactions_title_transfers' => 'Bir transfer oluşturalım!', + 'no_transactions_intro_transfers' => 'Henüz bir transferiniz yok. Varlık hesapları arasında para taşıdığınızda, bir transfer olarak kaydedilir.', + 'no_transactions_imperative_transfers' => 'Biraz para mı harcadın? O zaman onu aşağıya yazmalısın:', + 'no_transactions_create_transfers' => 'Aktarma oluştur', + 'no_piggies_title_default' => 'Bir kumbara oluşturalım!', + 'no_piggies_intro_default' => 'Henüz kumbaranız yok. Kazançlarınızı bölmek ve ne kazandığınızı izlemek için kumbaralar oluşturabilirsiniz.', + 'no_piggies_imperative_default' => 'Para biriktirdiğiniz birşeyler var mı? Bir kumbara oluşturun ve takip edin:', + 'no_piggies_create_default' => 'Yeni bir kumbara yarat', + 'no_bills_title_default' => 'Bir fatura oluşturalım!', + 'no_bills_intro_default' => 'Henüz bir faturanız yok. Kira veya sigortanız gibi düzenli giderleri takip etmek için faturalar oluşturabilirsiniz.', + 'no_bills_imperative_default' => 'Böyle düzenli faturalarınız var mı? Bir fatura oluşturun ve ödemelerinizi takip edin:', + 'no_bills_create_default' => 'Fatura oluştur', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Tekrar Eden İşlemler', - 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', - 'recurring_calendar_view' => 'Calendar', - 'no_recurring_title_default' => 'Yinelenen bir işlem yapalım!', - 'no_recurring_intro_default' => 'Henüz yinelenen işleminiz yok. Firefly III\'ün sizin için otomatik olarak işlemler oluşturmasını sağlamak için bunları kullanabilirsiniz.', - 'no_recurring_imperative_default' => 'Bu oldukça gelişmiş bir özelliktir ve son derece kullanışlı olabilir. Devam etmeden önce, (?) - sağ üst köşedeki dokümanları okuduğunuzdan emin olun.', - 'no_recurring_create_default' => 'Yinelenen bir işlem oluştur', - 'make_new_recurring' => 'Yinelenen bir işlem oluştur', - 'recurring_daily' => 'Her gün', - 'recurring_weekly' => 'Every week on :weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => 'Every year on :date', - 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', - 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', - 'created_transactions' => 'İlişkili işlemler', - 'expected_withdrawals' => 'Expected withdrawals', - 'expected_deposits' => 'Expected deposits', - 'expected_transfers' => 'Expected transfers', - 'created_withdrawals' => 'Created withdrawals', - 'created_deposits' => 'Created deposits', - 'created_transfers' => 'Created transfers', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', - 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Tekrar Eden İşlemler', + 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', + 'recurring_calendar_view' => 'Calendar', + 'no_recurring_title_default' => 'Yinelenen bir işlem yapalım!', + 'no_recurring_intro_default' => 'Henüz yinelenen işleminiz yok. Firefly III\'ün sizin için otomatik olarak işlemler oluşturmasını sağlamak için bunları kullanabilirsiniz.', + 'no_recurring_imperative_default' => 'Bu oldukça gelişmiş bir özelliktir ve son derece kullanışlı olabilir. Devam etmeden önce, (?) - sağ üst köşedeki dokümanları okuduğunuzdan emin olun.', + 'no_recurring_create_default' => 'Yinelenen bir işlem oluştur', + 'make_new_recurring' => 'Yinelenen bir işlem oluştur', + 'recurring_daily' => 'Her gün', + 'recurring_weekly' => 'Every week on :weekday', + 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', + 'recurring_monthly' => 'Every month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => 'Every year on :date', + 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', + 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', + 'created_transactions' => 'İlişkili işlemler', + 'expected_withdrawals' => 'Expected withdrawals', + 'expected_deposits' => 'Expected deposits', + 'expected_transfers' => 'Expected transfers', + 'created_withdrawals' => 'Created withdrawals', + 'created_deposits' => 'Created deposits', + 'created_transfers' => 'Created transfers', + 'recurring_info' => 'Recurring transaction :count / :total', + 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', + 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'create_new_recurrence' => 'Yinelenen bir işlem oluştur', - 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', - 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', - 'no_currency' => '(no currency)', - 'mandatory_for_recurring' => 'Mandatory recurrence information', - 'mandatory_for_transaction' => 'Mandatory transaction information', - 'optional_for_recurring' => 'Optional recurrence information', - 'optional_for_transaction' => 'Optional transaction information', - 'change_date_other_options' => 'Change the "first date" to see more options.', - 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', - 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', - 'repeat_forever' => 'Repeat forever', - 'repeat_until_date' => 'Repeat until date', - 'repeat_times' => 'Repeat a number of times', - 'recurring_skips_one' => 'Every other', - 'recurring_skips_more' => 'Skips :count occurrences', - 'store_new_recurrence' => 'Store recurring transaction', - 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', - 'edit_recurrence' => 'Edit recurring transaction ":title"', - 'recurring_repeats_until' => 'Repeats until :date', - 'recurring_repeats_forever' => 'Repeats forever', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Update recurring transaction', - 'updated_recurrence' => 'Updated recurring transaction ":title"', - 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', - 'delete_recurring' => 'Delete recurring transaction ":title"', - 'new_recurring_transaction' => 'New recurring transaction', - 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', - 'do_nothing' => 'Just create the transaction', - 'skip_transaction' => 'Skip the occurrence', - 'jump_to_friday' => 'Create the transaction on the previous Friday instead', - 'jump_to_monday' => 'Create the transaction on the next Monday instead', - 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', - 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', - 'except_weekends' => 'Except weekends', - 'recurrence_deleted' => 'Recurring transaction ":title" deleted', + 'create_new_recurrence' => 'Yinelenen bir işlem oluştur', + 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', + 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', + 'no_currency' => '(no currency)', + 'mandatory_for_recurring' => 'Mandatory recurrence information', + 'mandatory_for_transaction' => 'Mandatory transaction information', + 'optional_for_recurring' => 'Optional recurrence information', + 'optional_for_transaction' => 'Optional transaction information', + 'change_date_other_options' => 'Change the "first date" to see more options.', + 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', + 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', + 'repeat_forever' => 'Repeat forever', + 'repeat_until_date' => 'Repeat until date', + 'repeat_times' => 'Repeat a number of times', + 'recurring_skips_one' => 'Every other', + 'recurring_skips_more' => 'Skips :count occurrences', + 'store_new_recurrence' => 'Store recurring transaction', + 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', + 'edit_recurrence' => 'Edit recurring transaction ":title"', + 'recurring_repeats_until' => 'Repeats until :date', + 'recurring_repeats_forever' => 'Repeats forever', + 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', + 'update_recurrence' => 'Update recurring transaction', + 'updated_recurrence' => 'Updated recurring transaction ":title"', + 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', + 'delete_recurring' => 'Delete recurring transaction ":title"', + 'new_recurring_transaction' => 'New recurring transaction', + 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', + 'do_nothing' => 'Just create the transaction', + 'skip_transaction' => 'Skip the occurrence', + 'jump_to_friday' => 'Create the transaction on the previous Friday instead', + 'jump_to_monday' => 'Create the transaction on the next Monday instead', + 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', + 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', + 'except_weekends' => 'Except weekends', + 'recurrence_deleted' => 'Recurring transaction ":title" deleted', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2686,71 +2710,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balance (:currency)', - 'box_spent_in_currency' => 'Spent (:currency)', - 'box_earned_in_currency' => 'Earned (:currency)', - 'box_budgeted_in_currency' => 'Budgeted (:currency)', - 'box_bill_paid_in_currency' => 'Bills paid (:currency)', - 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', - 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', - 'box_net_worth_in_currency' => 'Net worth (:currency)', - 'box_spend_per_day' => 'Left to spend per day: :amount', + 'box_balance_in_currency' => 'Balance (:currency)', + 'box_spent_in_currency' => 'Spent (:currency)', + 'box_earned_in_currency' => 'Earned (:currency)', + 'box_budgeted_in_currency' => 'Budgeted (:currency)', + 'box_bill_paid_in_currency' => 'Bills paid (:currency)', + 'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)', + 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', + 'box_net_worth_in_currency' => 'Net worth (:currency)', + 'box_spend_per_day' => 'Left to spend per day: :amount', // debug page - 'debug_page' => 'Debug page', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Debug page', + 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', + 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', + 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', // object groups - 'object_groups_menu_bar' => 'Groups', - 'object_groups_page_title' => 'Groups', - 'object_groups_breadcrumb' => 'Groups', - 'object_groups_index' => 'Overview', - 'object_groups' => 'Groups', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Title', - 'edit_object_group' => 'Edit group ":title"', - 'delete_object_group' => 'Delete group ":title"', - 'update_object_group' => 'Update group', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Group', + 'object_groups_menu_bar' => 'Groups', + 'object_groups_page_title' => 'Groups', + 'object_groups_breadcrumb' => 'Groups', + 'object_groups_index' => 'Overview', + 'object_groups' => 'Groups', + 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', + 'object_group_title' => 'Title', + 'edit_object_group' => 'Edit group ":title"', + 'delete_object_group' => 'Delete group ":title"', + 'update_object_group' => 'Update group', + 'updated_object_group' => 'Successfully updated group ":title"', + 'deleted_object_group' => 'Successfully deleted group ":title"', + 'object_group' => 'Group', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/tr_TR/form.php b/resources/lang/tr_TR/form.php index 97c63b4d81..8ceb6d66a2 100644 --- a/resources/lang/tr_TR/form.php +++ b/resources/lang/tr_TR/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Banka adı', - 'bank_balance' => 'Bakiye', - 'savings_balance' => 'Tasarruf bakiyesi', - 'credit_card_limit' => 'Kredi kartı limiti', - 'automatch' => 'Otomatik olarak eşleştir', - 'skip' => 'Atla', - 'enabled' => 'Enabled', - 'name' => 'İsim', - 'active' => 'Aktif', - 'amount_min' => 'Minimum tutar', - 'amount_max' => 'Minimum tutar', - 'match' => 'Eşleşti', - 'strict' => 'Sıkı mod', - 'repeat_freq' => 'Tekrarlar', - 'object_group' => 'Group', - 'location' => 'Location', - 'update_channel' => 'Update channel', - 'currency_id' => 'Para birimi', - 'transaction_currency_id' => 'Para birimi', - 'auto_budget_currency_id' => 'Currency', - 'external_ip' => 'Sunucunuzun dış IP adresi', - 'attachments' => 'Ekler', - 'BIC' => 'BIC', - 'verify_password' => 'Parola güvenliğini doğrula', - 'source_account' => 'Kaynak hesap', - 'destination_account' => 'Hedef Hesap', - 'asset_destination_account' => 'Destination account', - 'include_net_worth' => 'Include in net worth', - 'asset_source_account' => 'Source account', - 'journal_description' => 'Tanımlama', - 'note' => 'Notlar', - 'currency' => 'Para birimi', - 'account_id' => 'Varlık hesabı', - 'budget_id' => 'Bütçe', - 'bill_id' => 'Bill', - 'opening_balance' => 'Opening balance', - 'tagMode' => 'Etiket modu', - 'virtual_balance' => 'Virtual balance', + 'bank_name' => 'Banka adı', + 'bank_balance' => 'Bakiye', + 'savings_balance' => 'Tasarruf bakiyesi', + 'credit_card_limit' => 'Kredi kartı limiti', + 'automatch' => 'Otomatik olarak eşleştir', + 'skip' => 'Atla', + 'enabled' => 'Enabled', + 'name' => 'İsim', + 'active' => 'Aktif', + 'amount_min' => 'Minimum tutar', + 'amount_max' => 'Minimum tutar', + 'match' => 'Eşleşti', + 'strict' => 'Sıkı mod', + 'repeat_freq' => 'Tekrarlar', + 'object_group' => 'Group', + 'location' => 'Location', + 'update_channel' => 'Update channel', + 'currency_id' => 'Para birimi', + 'transaction_currency_id' => 'Para birimi', + 'auto_budget_currency_id' => 'Currency', + 'external_ip' => 'Sunucunuzun dış IP adresi', + 'attachments' => 'Ekler', + 'BIC' => 'BIC', + 'verify_password' => 'Parola güvenliğini doğrula', + 'source_account' => 'Kaynak hesap', + 'destination_account' => 'Hedef Hesap', + 'asset_destination_account' => 'Destination account', + 'include_net_worth' => 'Include in net worth', + 'asset_source_account' => 'Source account', + 'journal_description' => 'Tanımlama', + 'note' => 'Notlar', + 'currency' => 'Para birimi', + 'account_id' => 'Varlık hesabı', + 'budget_id' => 'Bütçe', + 'bill_id' => 'Bill', + 'opening_balance' => 'Opening balance', + 'tagMode' => 'Etiket modu', + 'virtual_balance' => 'Virtual balance', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Hedef tutar', 'account_role' => 'Account role', 'opening_balance_date' => 'Opening balance date', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => ':description" açıklamalı işlemi silmek istediğinizden emin misiniz?', 'mass_journal_are_you_sure' => 'Bu işlemi silmek istediğinizden emin misiniz?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => '":tag" etiketini silmek istediğinizden emin misiniz?', 'journal_link_areYouSure' => ':source and :destination arasındaki bağlantıyı silmek istediğinizden emin misiniz?', 'linkType_areYouSure' => '":name" (":inward" / ":outward") bağlantı türünü silmek istediğinizden emin misiniz?', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Song', - // admin 'domain' => 'Alan adı', 'single_user_mode' => 'Kullanıcı kaydını devre dışı bırak', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS account', 'local_account' => 'Firefly III account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Date from', - 'to_date' => 'Date to', - 'due_date' => 'Bitiş Tarihi', - 'payment_date' => 'Ödeme Tarihi', - 'invoice_date' => 'Fatura Tarihi', - 'internal_reference' => 'Dahili referans', - 'inward' => 'Dahili açıklama', - 'outward' => 'Harici açıklama', - 'rule_group_id' => 'Kural grubu', - 'transaction_description' => 'Transaction description', - 'first_date' => 'First date', - 'transaction_type' => 'Transaction type', - 'repeat_until' => 'Repeat until', - 'recurring_description' => 'Recurring transaction description', - 'repetition_type' => 'Type of repetition', - 'foreign_currency_id' => 'Foreign currency', - 'repetition_end' => 'Repetition ends', - 'repetitions' => 'Repetitions', - 'calendar' => 'Calendar', - 'weekend' => 'Weekend', - 'client_secret' => 'Client secret', - 'withdrawal_destination_id' => 'Destination account', - 'deposit_source_id' => 'Source account', - 'expected_on' => 'Expected on', - 'paid' => 'Paid', - 'auto_budget_type' => 'Auto-budget', - 'auto_budget_amount' => 'Auto-budget amount', - 'auto_budget_period' => 'Auto-budget period', - 'collected' => 'Collected', - 'submitted' => 'Submitted', - 'key' => 'Key', - 'value' => 'Content of record', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Date from', + 'to_date' => 'Date to', + 'due_date' => 'Bitiş Tarihi', + 'payment_date' => 'Ödeme Tarihi', + 'invoice_date' => 'Fatura Tarihi', + 'internal_reference' => 'Dahili referans', + 'inward' => 'Dahili açıklama', + 'outward' => 'Harici açıklama', + 'rule_group_id' => 'Kural grubu', + 'transaction_description' => 'Transaction description', + 'first_date' => 'First date', + 'transaction_type' => 'Transaction type', + 'repeat_until' => 'Repeat until', + 'recurring_description' => 'Recurring transaction description', + 'repetition_type' => 'Type of repetition', + 'foreign_currency_id' => 'Foreign currency', + 'repetition_end' => 'Repetition ends', + 'repetitions' => 'Repetitions', + 'calendar' => 'Calendar', + 'weekend' => 'Weekend', + 'client_secret' => 'Client secret', + 'withdrawal_destination_id' => 'Destination account', + 'deposit_source_id' => 'Source account', + 'expected_on' => 'Expected on', + 'paid' => 'Paid', + 'auto_budget_type' => 'Auto-budget', + 'auto_budget_amount' => 'Auto-budget amount', + 'auto_budget_period' => 'Auto-budget period', + 'collected' => 'Collected', + 'submitted' => 'Submitted', + 'key' => 'Key', + 'value' => 'Content of record', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/tr_TR/intro.php b/resources/lang/tr_TR/intro.php index 6ec5ab1af0..8858afecfa 100644 --- a/resources/lang/tr_TR/intro.php +++ b/resources/lang/tr_TR/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Firefly III indeks sayfasına hoşgeldiniz. Firefly III\'nin nasıl çalıştığını öğrenmek için lütfen bu tanıtımı izleyin.', - 'index_accounts-chart' => 'Bu grafik, varlık hesaplarınızın geçerli bakiyesini gösterir. Burada görünen hesapları tercihlerinizde seçebilirsiniz.', - 'index_box_out_holder' => 'Bu küçük kutu ve bunun yanındaki kutular size finansal durumunuza hızlı bir bakış sunar.', - 'index_help' => 'Bir sayfa veya formla ilgili yardıma ihtiyacınız varsa, bu düğmeye basın.', - 'index_outro' => 'Firefly III\'ün çoğu sayfası bunun gibi küçük bir turla başlayacak. Sorularınız ve yorumlarınız olursa lütfen benimle iletişime geçin. Keyfini çıkarın!', - 'index_sidebar-toggle' => 'Yeni işlemler, hesaplar veya başka şeyler oluşturmak için bu simgenin altındaki menüyü kullanın.', - 'index_cash_account' => 'Bunlar şimdiye kadar oluşturulmuş hesaplardır. Nakit harcamaları takip etmek için nakit hesabını kullanabilirsiniz ancak elbette zorunlu değildir.', + 'index_intro' => 'Firefly III indeks sayfasına hoşgeldiniz. Firefly III\'nin nasıl çalıştığını öğrenmek için lütfen bu tanıtımı izleyin.', + 'index_accounts-chart' => 'Bu grafik, varlık hesaplarınızın geçerli bakiyesini gösterir. Burada görünen hesapları tercihlerinizde seçebilirsiniz.', + 'index_box_out_holder' => 'Bu küçük kutu ve bunun yanındaki kutular size finansal durumunuza hızlı bir bakış sunar.', + 'index_help' => 'Bir sayfa veya formla ilgili yardıma ihtiyacınız varsa, bu düğmeye basın.', + 'index_outro' => 'Firefly III\'ün çoğu sayfası bunun gibi küçük bir turla başlayacak. Sorularınız ve yorumlarınız olursa lütfen benimle iletişime geçin. Keyfini çıkarın!', + 'index_sidebar-toggle' => 'Yeni işlemler, hesaplar veya başka şeyler oluşturmak için bu simgenin altındaki menüyü kullanın.', + 'index_cash_account' => 'Bunlar şimdiye kadar oluşturulmuş hesaplardır. Nakit harcamaları takip etmek için nakit hesabını kullanabilirsiniz ancak elbette zorunlu değildir.', // transactions - 'transactions_create_basic_info' => 'İşleminizin temel bilgilerini giriniz. Gönderen, alıcı, tarih ve tanım.', - 'transactions_create_amount_info' => 'İşlem tutarını girin. Gerekirse alanlar diğer para birimi için otomatik olarak güncellenir.', - 'transactions_create_optional_info' => 'Bu alanların tümü isteğe bağlıdır. Buraya meta veri eklemek, işlemlerinizi daha iyi organize edecektir.', - 'transactions_create_split' => 'Bir işlemi bölmek istiyorsanız, bu buton ile daha fazla bölüm ekleyin', + 'transactions_create_basic_info' => 'İşleminizin temel bilgilerini giriniz. Gönderen, alıcı, tarih ve tanım.', + 'transactions_create_amount_info' => 'İşlem tutarını girin. Gerekirse alanlar diğer para birimi için otomatik olarak güncellenir.', + 'transactions_create_optional_info' => 'Bu alanların tümü isteğe bağlıdır. Buraya meta veri eklemek, işlemlerinizi daha iyi organize edecektir.', + 'transactions_create_split' => 'Bir işlemi bölmek istiyorsanız, bu buton ile daha fazla bölüm ekleyin', // create account: - 'accounts_create_iban' => 'Hesaplarınıza geçerli IBAN girin. Bu, ileride veri aktarma işlemini kolaylaştırabilir.', - 'accounts_create_asset_opening_balance' => 'Aktif hesapların, Firefly\'da bu hesap geçmişinin başlangıcını gösteren bir "açılış bakiyesi" olabilir.', - 'accounts_create_asset_currency' => 'Firefly III, birden fazla para birimini destekliyor. Varlık hesaplarının bir ana para birimi var, burada ayarlamanız gerekir.', - 'accounts_create_asset_virtual' => 'Bazen hesabınıza sanal bir bakiye sağlamanıza yardımcı olabilir: ek bir miktar her zaman gerçek bakiyeye eklenir veya gerçek bakiyeden çıkarılır.', + 'accounts_create_iban' => 'Hesaplarınıza geçerli IBAN girin. Bu, ileride veri aktarma işlemini kolaylaştırabilir.', + 'accounts_create_asset_opening_balance' => 'Aktif hesapların, Firefly\'da bu hesap geçmişinin başlangıcını gösteren bir "açılış bakiyesi" olabilir.', + 'accounts_create_asset_currency' => 'Firefly III, birden fazla para birimini destekliyor. Varlık hesaplarının bir ana para birimi var, burada ayarlamanız gerekir.', + 'accounts_create_asset_virtual' => 'Bazen hesabınıza sanal bir bakiye sağlamanıza yardımcı olabilir: ek bir miktar her zaman gerçek bakiyeye eklenir veya gerçek bakiyeden çıkarılır.', // budgets index - 'budgets_index_intro' => 'Bütçeler, finansmanınızı yönetmek ve Firefly III\'nin temel işlevlerinden birini oluşturmak için kullanılır.', - 'budgets_index_set_budget' => 'Toplam bütçenizi her dönem için belirleyin, böylelikle Firefly size mevcut tüm parayı bütçelendirdiğinizde söyleyebilir.', - 'budgets_index_see_expenses_bar' => 'Para harcamak yavaşça bu çubuğu dolduracaktır.', - 'budgets_index_navigate_periods' => 'Bütçeleri önceden kolayca ayarlamak için dönemleri gezinin.', - 'budgets_index_new_budget' => 'Uygun gördüğünüz yeni bütçeler oluşturun.', - 'budgets_index_list_of_budgets' => 'Her bütçe için tutarları ayarlamak ve ne durumda olduğunuzu görmek için bu tabloyu kullanın.', - 'budgets_index_outro' => 'Bütçeleme hakkında daha fazla bilgi almak için sağ üst köşedeki yardım simgesini kontrol edin.', + 'budgets_index_intro' => 'Bütçeler, finansmanınızı yönetmek ve Firefly III\'nin temel işlevlerinden birini oluşturmak için kullanılır.', + 'budgets_index_see_expenses_bar' => 'Para harcamak yavaşça bu çubuğu dolduracaktır.', + 'budgets_index_navigate_periods' => 'Bütçeleri önceden kolayca ayarlamak için dönemleri gezinin.', + 'budgets_index_new_budget' => 'Uygun gördüğünüz yeni bütçeler oluşturun.', + 'budgets_index_list_of_budgets' => 'Her bütçe için tutarları ayarlamak ve ne durumda olduğunuzu görmek için bu tabloyu kullanın.', + 'budgets_index_outro' => 'Bütçeleme hakkında daha fazla bilgi almak için sağ üst köşedeki yardım simgesini kontrol edin.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Maliyetlerinizde ayrıntılı bilgi edinmek için bu raporları kullanın.', - 'reports_index_inputReportType' => 'Bir rapor türü seçin. Her bir raporun neyi gösterdiğini görmek için yardım sayfalarına göz atın.', - 'reports_index_inputAccountsSelect' => 'Varlık hesaplarını uygun gördüğünüz gibi hariç tutabilir veya ekleyebilirsiniz.', - 'reports_index_inputDateRange' => 'Seçilen tarih aralığı tamamen size kalmış: 1 günden 10 yıla kadar.', - 'reports_index_extra-options-box' => 'Seçtiğiniz rapora bağlı olarak, burada ekstra filtre ve seçenekleri belirleyebilirsiniz. Rapor türlerini değiştirirken bu kutuya dikkat edin.', + 'reports_index_intro' => 'Maliyetlerinizde ayrıntılı bilgi edinmek için bu raporları kullanın.', + 'reports_index_inputReportType' => 'Bir rapor türü seçin. Her bir raporun neyi gösterdiğini görmek için yardım sayfalarına göz atın.', + 'reports_index_inputAccountsSelect' => 'Varlık hesaplarını uygun gördüğünüz gibi hariç tutabilir veya ekleyebilirsiniz.', + 'reports_index_inputDateRange' => '', + 'reports_index_extra-options-box' => 'Seçtiğiniz rapora bağlı olarak, burada ekstra filtre ve seçenekleri belirleyebilirsiniz. Rapor türlerini değiştirirken bu kutuya dikkat edin.', // reports (reports) - 'reports_report_default_intro' => 'Bu rapor size mali durumunuz hakkında hızlı ve kapsamlı bir bilgi verecektir. Başka bir şey görmek isterseniz, lütfen benimle iletişime geçmekten çekinmeyin!', - 'reports_report_audit_intro' => 'Bu rapor size aktif hesaplarınızla ilgili ayrıntılı bilgiler verecektir.', - 'reports_report_audit_optionsBox' => 'İlgilendiğiniz sütunları göstermek veya gizlemek için bu onay kutularını kullanın.', + 'reports_report_default_intro' => 'Bu rapor size mali durumunuz hakkında hızlı ve kapsamlı bir bilgi verecektir. Başka bir şey görmek isterseniz, lütfen benimle iletişime geçmekten çekinmeyin!', + 'reports_report_audit_intro' => 'Bu rapor size aktif hesaplarınızla ilgili ayrıntılı bilgiler verecektir.', + 'reports_report_audit_optionsBox' => 'İlgilendiğiniz sütunları göstermek veya gizlemek için bu onay kutularını kullanın.', - 'reports_report_category_intro' => 'Bu rapor size bir veya birden fazla kategoride fikir verecektir.', - 'reports_report_category_pieCharts' => 'Bu grafikler, size her bir kategori veya hesaptaki gelir ve giderler konusunda fikir verecektir.', - 'reports_report_category_incomeAndExpensesChart' => 'Bu grafik her bir kategori için gelir ve giderlerinizi gösterir.', + 'reports_report_category_intro' => 'Bu rapor size bir veya birden fazla kategoride fikir verecektir.', + 'reports_report_category_pieCharts' => 'Bu grafikler, size her bir kategori veya hesaptaki gelir ve giderler konusunda fikir verecektir.', + 'reports_report_category_incomeAndExpensesChart' => 'Bu grafik her bir kategori için gelir ve giderlerinizi gösterir.', - 'reports_report_tag_intro' => 'Bu rapor size bir veya birden fazla etikette fikir verecektir.', - 'reports_report_tag_pieCharts' => 'Bu grafikler, her bir etiket, hesap, kategori veya bütçe için gelir ve giderler konusunda size fikir verecektir.', - 'reports_report_tag_incomeAndExpensesChart' => 'Bu grafik her bir etiket için gelir ve giderlerinizi gösterir.', + 'reports_report_tag_intro' => 'Bu rapor size bir veya birden fazla etikette fikir verecektir.', + 'reports_report_tag_pieCharts' => 'Bu grafikler, her bir etiket, hesap, kategori veya bütçe için gelir ve giderler konusunda size fikir verecektir.', + 'reports_report_tag_incomeAndExpensesChart' => 'Bu grafik her bir etiket için gelir ve giderlerinizi gösterir.', 'reports_report_budget_intro' => 'Bu rapor size bir veya birden fazla bütçede fikir verecektir.', 'reports_report_budget_pieCharts' => 'Bu grafikler her bir bütçe veya hesaptaki giderler konusunda size fikir verecektir.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Her bir kumbaraya para eklemek veya çıkarmak için bu ilerleme çubuğunun yanında iki düğme (+ ve -) bulunur.', 'piggy-banks_index_accountStatus' => 'En az bir kumbarası olan her bir aktif hesap için durum bu tabloda listelenir.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Hedefin nedir? Yeni bir kanepe, bir kamera ya da acil durumlar için para mı?', 'piggy-banks_create_date' => 'Kumbaranız için bir hedef tarih ya da bitiş tarihi belirleyebilirsiniz.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Use bills to track the amount of money you\'re due every period. Think about expenses like rent, insurance or mortgage payments.', 'bills_create_name' => '"Kira" veya "Sağlık sigortası" gibi açıklayıcı bir isim kullanın.', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Bu fatura için minimum ve maksimum bir tutar seçin.', 'bills_create_repeat_freq_holder' => 'Birçok fatura aylık yinelenir, fakat burada başka bir sıklık ayarlayabilirsiniz.', 'bills_create_skip_holder' => 'If a bill repeats every 2 weeks, the "skip"-field should be set to "1" to skip every other week.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Hangi işlemlerin kurallarınıza uyacağını görmek için bu tuşu kullanın.', 'rules_create_actions' => 'İstediğiniz kadar eylem belirleyin.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Bu sekmelerin arkasında daha fazla seçenek bulunmaktadır.', diff --git a/resources/lang/tr_TR/list.php b/resources/lang/tr_TR/list.php index 9c2f6056d8..ced6ba262c 100644 --- a/resources/lang/tr_TR/list.php +++ b/resources/lang/tr_TR/list.php @@ -31,46 +31,45 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Tuşlar', - 'icon' => 'Simge', - 'id' => 'Kimlik', - 'create_date' => 'Tarihinde oluşturuldu', - 'update_date' => 'Tarihinde güncellendi', - 'updated_at' => 'Tarihinde güncellendi', - 'balance_before' => 'Önceki bakiye', - 'balance_after' => 'Sonraki bakiye', - 'name' => 'İsim', - 'role' => 'Rol', - 'currentBalance' => 'Cari bakiye', - 'linked_to_rules' => ' + 'buttons' => 'Tuşlar', + 'icon' => 'Simge', + 'id' => 'Kimlik', + 'create_date' => 'Tarihinde oluşturuldu', + 'update_date' => 'Tarihinde güncellendi', + 'updated_at' => 'Tarihinde güncellendi', + 'balance_before' => 'Önceki bakiye', + 'balance_after' => 'Sonraki bakiye', + 'name' => 'İsim', + 'role' => 'Rol', + 'currentBalance' => 'Cari bakiye', + 'linked_to_rules' => ' İlgili kurallar', - 'active' => 'Aktif mi?', - 'percentage' => 'yzd.', - 'recurring_transaction' => 'Tekrar Eden İşlemler', - 'next_due' => 'Sonraki ödeme', - 'transaction_type' => 'Tip', - 'lastActivity' => 'Son Etkinlik', - 'balanceDiff' => 'Bakiye farkı', - 'other_meta_data' => 'Diğer meta verisi', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Hesap Türü', - 'created_at' => 'Tarihinde oluşturuldu', - 'account' => 'Hesap', - 'external_url' => 'External URL', - 'matchingAmount' => 'Miktar', - 'destination' => 'Hedef', - 'source' => 'Kaynak', - 'next_expected_match' => 'Beklenen sonraki eşleşme', - 'automatch' => 'Otomatik eşleştir?', + 'active' => 'Aktif mi?', + 'percentage' => 'yzd.', + 'recurring_transaction' => 'Tekrar Eden İşlemler', + 'next_due' => 'Sonraki ödeme', + 'transaction_type' => 'Tip', + 'lastActivity' => 'Son Etkinlik', + 'balanceDiff' => 'Bakiye farkı', + 'other_meta_data' => 'Diğer meta verisi', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => 'Hesap Türü', + 'created_at' => 'Tarihinde oluşturuldu', + 'account' => 'Hesap', + 'external_url' => 'External URL', + 'matchingAmount' => 'Miktar', + 'destination' => 'Hedef', + 'source' => 'Kaynak', + 'next_expected_match' => 'Beklenen sonraki eşleşme', + 'automatch' => 'Otomatik eşleştir?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -81,7 +80,6 @@ return [ * */ - 'repeat_freq' => 'Tekrarlar', 'description' => 'Açıklama', 'amount' => 'Miktar', @@ -148,7 +146,7 @@ return [ 'account_at_bunq' => 'Bunq hesapları', 'file_name' => 'Dosya adı', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -159,34 +157,32 @@ return [ * */ - - 'file_size' => 'Dosya boyutu', - 'file_type' => 'Dosya tipi', - 'attached_to' => 'Şuraya Bağlı', - 'file_exists' => 'Dosya var', - 'spectre_bank' => 'Banka', - 'spectre_last_use' => 'Son giriş', - 'spectre_status' => 'Durum', - 'bunq_payment_id' => 'bunq ödeme kimliği', - 'repetitions' => 'Tekrarlar', - 'title' => 'Başlık', - 'transaction_s' => 'İşlemler', - 'field' => 'Alan', - 'value' => 'Değer', - 'interest' => 'Faiz', - 'interest_period' => 'Interest period', - 'liability_type' => 'Borç tipi', - 'liability_direction' => 'Liability in/out', - 'end_date' => 'End date', - 'payment_info' => 'Payment information', - 'expected_info' => 'Next expected transaction', - 'start_date' => 'Start date', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Dosya boyutu', + 'file_type' => 'Dosya tipi', + 'attached_to' => 'Şuraya Bağlı', + 'file_exists' => 'Dosya var', + 'spectre_bank' => 'Banka', + 'spectre_last_use' => 'Son giriş', + 'spectre_status' => 'Durum', + 'bunq_payment_id' => 'bunq ödeme kimliği', + 'repetitions' => 'Tekrarlar', + 'title' => 'Başlık', + 'transaction_s' => 'İşlemler', + 'field' => 'Alan', + 'value' => 'Değer', + 'interest' => 'Faiz', + 'interest_period' => 'Interest period', + 'liability_type' => 'Borç tipi', + 'liability_direction' => 'Liability in/out', + 'end_date' => 'End date', + 'payment_info' => 'Payment information', + 'expected_info' => 'Next expected transaction', + 'start_date' => 'Start date', + 'trigger' => 'Trigger', + 'response' => 'Response', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/tr_TR/pagination.php b/resources/lang/tr_TR/pagination.php index 49359aaf52..93776c0668 100644 --- a/resources/lang/tr_TR/pagination.php +++ b/resources/lang/tr_TR/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/tr_TR/passwords.php b/resources/lang/tr_TR/passwords.php index 0697d8d854..316c74c0e5 100644 --- a/resources/lang/tr_TR/passwords.php +++ b/resources/lang/tr_TR/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/tr_TR/rules.php b/resources/lang/tr_TR/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/tr_TR/rules.php +++ b/resources/lang/tr_TR/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/tr_TR/validation.php b/resources/lang/tr_TR/validation.php index 9600539986..4f03da2144 100644 --- a/resources/lang/tr_TR/validation.php +++ b/resources/lang/tr_TR/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'Bu geçerli bir IBAN değil.', - 'zero_or_more' => 'Değer negatif olamaz.', - 'date_or_time' => 'Değer geçerli tarih veya zaman formatı olmalıdır (ISO 8601).', - 'source_equals_destination' => 'Kaynak hesabın hedef hesap eşittir.', - 'unique_account_number_for_user' => 'Bu hesap numarası zaten kullanılmaktadır.', - 'unique_iban_for_user' => 'Bu IBAN numarası zaten kullanılmaktadır.', - 'deleted_user' => 'Güvenlik kısıtlamaları nedeniyle, bu e-posta adresini kullanarak kayıt yapamazsınız.', - 'rule_trigger_value' => 'Bu eylem, seçili işlem için geçersizdir.', - 'rule_action_value' => 'Bu eylem seçili işlem için geçersizdir.', - 'file_already_attached' => 'Yüklenen dosya ":name" zaten bu nesneye bağlı.', - 'file_attached' => '":name" dosyası başarıyla yüklendi.', - 'must_exist' => 'ID alanı :attribute veritabanın içinde yok.', - 'all_accounts_equal' => 'Bu alandaki tüm hesapları eşit olmalıdır.', - 'group_title_mandatory' => 'Birden fazla işlem olduğunda grup başlığı zorunludur.', - 'transaction_types_equal' => 'Tüm bölümlemeler aynı türde olmalıdır.', - 'invalid_transaction_type' => 'Geçersiz işlem türü.', - 'invalid_selection' => 'Seçiminiz geçersiz.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'En az bir işlem gerekir.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'En az bir tekrarı gerekir.', - 'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.', - 'require_currency_info' => 'Bu alanın içeriği para birimi bilgileri geçersiz.', - 'not_transfer_account' => 'This account is not an account that can be used for transfers.', - 'require_currency_amount' => 'The content of this field is invalid without foreign amount information.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'İşlem açıklaması genel açıklama eşit değildir.', - 'file_invalid_mime' => '":name" dosyası ":mime" türünde olup yeni bir yükleme olarak kabul edilemez.', - 'file_too_large' => '":name" dosyası çok büyük.', - 'belongs_to_user' => ':attribute\'nin değeri bilinmiyor', - 'accepted' => ':attribute kabul edilmek zorunda.', - 'bic' => 'Bu BIC geçerli değilrdir.', - 'at_least_one_trigger' => 'Kural en az bir tetikleyiciye sahip olması gerekir.', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => 'Kural en az bir eylem olması gerekir.', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => 'Bu geçerli Base64 olarak kodlanmış veri değildir.', - 'model_id_invalid' => 'Verilen kimlik bu model için geçersiz görünüyor.', - 'less' => ':attribute 10.000.000 den daha az olmalıdır', - 'active_url' => ':attribute geçerli bir URL değil.', - 'after' => ':attribute :date tarihinden sonrası için tarihlendirilmelidir.', - 'date_after' => 'The start date must be before the end date.', - 'alpha' => ':attribute sadece harf içerebilir.', - 'alpha_dash' => ':attribute sadece harf, sayı ve kısa çizgi içerebilir.', - 'alpha_num' => ':attribute sadece harf ve sayı içerebilir.', - 'array' => ':attribute bir dizi olmalıdır.', - 'unique_for_user' => ':attribute\'de zaten bir girdi var.', - 'before' => ':attribute :date tarihinden öncesi için tarihlendirilmelidir.', - 'unique_object_for_user' => 'Bu isim zaten kullanılıyor.', - 'unique_account_for_user' => 'Bu hesap adı zaten kullanılıyor.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => 'Bu geçerli bir IBAN değil.', + 'zero_or_more' => 'Değer negatif olamaz.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Değer geçerli tarih veya zaman formatı olmalıdır (ISO 8601).', + 'source_equals_destination' => 'Kaynak hesabın hedef hesap eşittir.', + 'unique_account_number_for_user' => 'Bu hesap numarası zaten kullanılmaktadır.', + 'unique_iban_for_user' => 'Bu IBAN numarası zaten kullanılmaktadır.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Güvenlik kısıtlamaları nedeniyle, bu e-posta adresini kullanarak kayıt yapamazsınız.', + 'rule_trigger_value' => 'Bu eylem, seçili işlem için geçersizdir.', + 'rule_action_value' => 'Bu eylem seçili işlem için geçersizdir.', + 'file_already_attached' => 'Yüklenen dosya ":name" zaten bu nesneye bağlı.', + 'file_attached' => '":name" dosyası başarıyla yüklendi.', + 'must_exist' => 'ID alanı :attribute veritabanın içinde yok.', + 'all_accounts_equal' => 'Bu alandaki tüm hesapları eşit olmalıdır.', + 'group_title_mandatory' => 'Birden fazla işlem olduğunda grup başlığı zorunludur.', + 'transaction_types_equal' => 'Tüm bölümlemeler aynı türde olmalıdır.', + 'invalid_transaction_type' => 'Geçersiz işlem türü.', + 'invalid_selection' => 'Seçiminiz geçersiz.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'En az bir işlem gerekir.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'En az bir tekrarı gerekir.', + 'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.', + 'require_currency_info' => 'Bu alanın içeriği para birimi bilgileri geçersiz.', + 'not_transfer_account' => 'This account is not an account that can be used for transfers.', + 'require_currency_amount' => 'The content of this field is invalid without foreign amount information.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'İşlem açıklaması genel açıklama eşit değildir.', + 'file_invalid_mime' => '":name" dosyası ":mime" türünde olup yeni bir yükleme olarak kabul edilemez.', + 'file_too_large' => '":name" dosyası çok büyük.', + 'belongs_to_user' => ':attribute\'nin değeri bilinmiyor', + 'accepted' => ':attribute kabul edilmek zorunda.', + 'bic' => 'Bu BIC geçerli değilrdir.', + 'at_least_one_trigger' => 'Kural en az bir tetikleyiciye sahip olması gerekir.', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => 'Kural en az bir eylem olması gerekir.', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => 'Bu geçerli Base64 olarak kodlanmış veri değildir.', + 'model_id_invalid' => 'Verilen kimlik bu model için geçersiz görünüyor.', + 'less' => ':attribute 10.000.000 den daha az olmalıdır', + 'active_url' => ':attribute geçerli bir URL değil.', + 'after' => ':attribute :date tarihinden sonrası için tarihlendirilmelidir.', + 'date_after' => 'The start date must be before the end date.', + 'alpha' => ':attribute sadece harf içerebilir.', + 'alpha_dash' => ':attribute sadece harf, sayı ve kısa çizgi içerebilir.', + 'alpha_num' => ':attribute sadece harf ve sayı içerebilir.', + 'array' => ':attribute bir dizi olmalıdır.', + 'unique_for_user' => ':attribute\'de zaten bir girdi var.', + 'before' => ':attribute :date tarihinden öncesi için tarihlendirilmelidir.', + 'unique_object_for_user' => 'Bu isim zaten kullanılıyor.', + 'unique_account_for_user' => 'Bu hesap adı zaten kullanılıyor.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute :min ve :max arasında olmalıdır.', + 'between.file' => ':attribute, :min kilobayt ve :max kilobayt arasında olmalıdır.', + 'between.string' => ':attribute :min karakter ve :max karakter olmalıdır.', + 'between.array' => ':attribute :min öğe ve :max öğe olmalıdır.', + 'boolean' => ':attribute alanının doğru veya yanlış olması gerekir.', + 'confirmed' => ':attribute doğrulaması eşleşmiyor.', + 'date' => ':attribute geçerli bir tarih değil.', + 'date_format' => ':attribute :format formatına uymuyor.', + 'different' => ':attribute ve :other farklı olmalı.', + 'digits' => ':attribute :digits basamak olmalıdır.', + 'digits_between' => ':attribute en az :min basamak en fazla :max basamak olmalı.', + 'email' => ':attribute geçerli bir e-posta adresi olmalıdır.', + 'filled' => ':attribute alanı gereklidir.', + 'exists' => 'Seçili :attribute geçersiz.', + 'image' => ':attribute bir resim olmalı.', + 'in' => 'Seçili :attribute geçersiz.', + 'integer' => ':attribute bir tamsayı olmalı.', + 'ip' => ':attribute geçerli bir IP adresi olmalı.', + 'json' => ':attribute geçerli bir JSON dizini olmalı.', + 'max.numeric' => ':attribute, :max değerinden daha büyük olamamalıdır.', + 'max.file' => ':attribute :max kilobayttan büyük olmamalıdır.', + 'max.string' => ':attribute :max karakterden büyük olmamalıdır.', + 'max.array' => ':attribute :max öğeden daha fazlasına sahip olamaz.', + 'mimes' => ':attribute :values türünde bir dosya olmalı.', + 'min.numeric' => ':attribute en az :min olmalıdır.', + 'lte.numeric' => ':attribute küçük veya eşit olması gerekir :value.', + 'min.file' => ':attribute en az :min kilobayt olmalıdır.', + 'min.string' => ':attribute en az :min karakter olmalıdır.', + 'min.array' => ':attribute en az :min öğe içermelidir.', + 'not_in' => 'Seçili :attribute geçersiz.', + 'numeric' => ':attribute sayı olmalıdır.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Yerli tutar bir sayı olması gerekir.', + 'numeric_destination' => 'Hedef tutar bir sayı olması gerekir.', + 'numeric_source' => 'Kaynak tutarın bir sayı olması gerekir.', + 'regex' => ':attribute biçimi geçersiz.', + 'required' => ':attribute alanı gereklidir.', + 'required_if' => ':other :value iken :attribute alanı gereklidir.', + 'required_unless' => ':other :values içinde değilse :attribute alanı gereklidir.', + 'required_with' => ':values mevcutken :attribute alanı gereklidir.', + 'required_with_all' => ':values mevcutken :attribute alanı gereklidir.', + 'required_without' => ':values mevcut değilken :attribute alanı gereklidir.', + 'required_without_all' => 'Hiçbir :values mevcut değilken :attribute alanı gereklidir.', + 'same' => ':attribute ve :other eşleşmelidir.', + 'size.numeric' => ':attribute :size olmalıdır.', + 'amount_min_over_max' => 'En az tutar en fazla tutardan büyük olamaz.', + 'size.file' => ':attribute :size kilobyte olmalıdır.', + 'size.string' => ':attribute :size karakter olmalıdır.', + 'size.array' => ':attribute :size öğeye sahip olmalıdır.', + 'unique' => ':attribute zaten alınmış.', + 'string' => ':attribute bir dizi olmalıdır.', + 'url' => ':attribute biçimi geçersiz.', + 'timezone' => ':attribute geçerli bir bölge olmalıdır.', + '2fa_code' => ':attribute alanı geçersiz.', + 'dimensions' => ':attribute geçersiz görüntü boyutlarına sahip.', + 'distinct' => ':attribute alanı yinelenen bir değere sahip.', + 'file' => ':attribute bir dosya olmalıdır.', + 'in_array' => ':attribute alanı :other içinde olamaz.', + 'present' => ':attribute alanı mevcut olmalıdır.', + 'amount_zero' => 'Toplam tutarı sıfır olamaz.', + 'current_target_amount' => 'The current amount must be less than the target amount.', + 'unique_piggy_bank_for_user' => 'Kumbara adı benzersiz olmalıdır.', + 'unique_object_group' => 'Grup adı benzersiz olmalıdır', + 'starts_with' => 'Değer şununla başlamalıdır :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Both accounts must be of the same account type', + 'same_account_currency' => 'Both accounts must have the same currency setting', - 'between.numeric' => ':attribute :min ve :max arasında olmalıdır.', - 'between.file' => ':attribute, :min kilobayt ve :max kilobayt arasında olmalıdır.', - 'between.string' => ':attribute :min karakter ve :max karakter olmalıdır.', - 'between.array' => ':attribute :min öğe ve :max öğe olmalıdır.', - 'boolean' => ':attribute alanının doğru veya yanlış olması gerekir.', - 'confirmed' => ':attribute doğrulaması eşleşmiyor.', - 'date' => ':attribute geçerli bir tarih değil.', - 'date_format' => ':attribute :format formatına uymuyor.', - 'different' => ':attribute ve :other farklı olmalı.', - 'digits' => ':attribute :digits basamak olmalıdır.', - 'digits_between' => ':attribute en az :min basamak en fazla :max basamak olmalı.', - 'email' => ':attribute geçerli bir e-posta adresi olmalıdır.', - 'filled' => ':attribute alanı gereklidir.', - 'exists' => 'Seçili :attribute geçersiz.', - 'image' => ':attribute bir resim olmalı.', - 'in' => 'Seçili :attribute geçersiz.', - 'integer' => ':attribute bir tamsayı olmalı.', - 'ip' => ':attribute geçerli bir IP adresi olmalı.', - 'json' => ':attribute geçerli bir JSON dizini olmalı.', - 'max.numeric' => ':attribute, :max değerinden daha büyük olamamalıdır.', - 'max.file' => ':attribute :max kilobayttan büyük olmamalıdır.', - 'max.string' => ':attribute :max karakterden büyük olmamalıdır.', - 'max.array' => ':attribute :max öğeden daha fazlasına sahip olamaz.', - 'mimes' => ':attribute :values türünde bir dosya olmalı.', - 'min.numeric' => ':attribute en az :min olmalıdır.', - 'lte.numeric' => ':attribute küçük veya eşit olması gerekir :value.', - 'min.file' => ':attribute en az :min kilobayt olmalıdır.', - 'min.string' => ':attribute en az :min karakter olmalıdır.', - 'min.array' => ':attribute en az :min öğe içermelidir.', - 'not_in' => 'Seçili :attribute geçersiz.', - 'numeric' => ':attribute sayı olmalıdır.', - 'numeric_native' => 'Yerli tutar bir sayı olması gerekir.', - 'numeric_destination' => 'Hedef tutar bir sayı olması gerekir.', - 'numeric_source' => 'Kaynak tutarın bir sayı olması gerekir.', - 'regex' => ':attribute biçimi geçersiz.', - 'required' => ':attribute alanı gereklidir.', - 'required_if' => ':other :value iken :attribute alanı gereklidir.', - 'required_unless' => ':other :values içinde değilse :attribute alanı gereklidir.', - 'required_with' => ':values mevcutken :attribute alanı gereklidir.', - 'required_with_all' => ':values mevcutken :attribute alanı gereklidir.', - 'required_without' => ':values mevcut değilken :attribute alanı gereklidir.', - 'required_without_all' => 'Hiçbir :values mevcut değilken :attribute alanı gereklidir.', - 'same' => ':attribute ve :other eşleşmelidir.', - 'size.numeric' => ':attribute :size olmalıdır.', - 'amount_min_over_max' => 'En az tutar en fazla tutardan büyük olamaz.', - 'size.file' => ':attribute :size kilobyte olmalıdır.', - 'size.string' => ':attribute :size karakter olmalıdır.', - 'size.array' => ':attribute :size öğeye sahip olmalıdır.', - 'unique' => ':attribute zaten alınmış.', - 'string' => ':attribute bir dizi olmalıdır.', - 'url' => ':attribute biçimi geçersiz.', - 'timezone' => ':attribute geçerli bir bölge olmalıdır.', - '2fa_code' => ':attribute alanı geçersiz.', - 'dimensions' => ':attribute geçersiz görüntü boyutlarına sahip.', - 'distinct' => ':attribute alanı yinelenen bir değere sahip.', - 'file' => ':attribute bir dosya olmalıdır.', - 'in_array' => ':attribute alanı :other içinde olamaz.', - 'present' => ':attribute alanı mevcut olmalıdır.', - 'amount_zero' => 'Toplam tutarı sıfır olamaz.', - 'current_target_amount' => 'The current amount must be less than the target amount.', - 'unique_piggy_bank_for_user' => 'Kumbara adı benzersiz olmalıdır.', - 'unique_object_group' => 'Grup adı benzersiz olmalıdır', - 'starts_with' => 'Değer şununla başlamalıdır :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Both accounts must be of the same account type', - 'same_account_currency' => 'Both accounts must have the same currency setting', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'This is not a secure password. Please try again. For more information, visit https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.', - 'valid_recurrence_rep_moment' => 'Invalid repetition moment for this type of repetition.', - 'invalid_account_info' => 'Geçersiz hesap bilgileri.', - 'attributes' => [ + 'secure_password' => 'This is not a secure password. Please try again. For more information, visit https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.', + 'valid_recurrence_rep_moment' => 'Invalid repetition moment for this type of repetition.', + 'invalid_account_info' => 'Geçersiz hesap bilgileri.', + 'attributes' => [ 'email' => 'E-posta adresi', 'description' => 'Açıklama', 'amount' => 'Tutar', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'withdrawal_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', + 'deposit_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'need_id_in_edit' => 'Each split must have transaction_journal_id (either valid ID or 0).', - 'transfer_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'need_id_in_edit' => 'Each split must have transaction_journal_id (either valid ID or 0).', + 'ob_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', + 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'You can\'t use this account as the source account.', + 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', - 'generic_invalid_source' => 'You can\'t use this account as the source account.', - 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', - 'gt.numeric' => 'The :attribute must be greater than :value.', - 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', - 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', - 'gte.array' => 'The :attribute must have :value items or more.', + 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', + 'gt.numeric' => 'The :attribute must be greater than :value.', + 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', + 'gte.array' => 'The :attribute must have :value items or more.', 'amount_required_for_auto_budget' => 'The amount is required.', 'auto_budget_amount_positive' => 'The amount must be more than zero.', + 'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.', // no access to administration: diff --git a/resources/lang/uk_UA/api.php b/resources/lang/uk_UA/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/uk_UA/api.php +++ b/resources/lang/uk_UA/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/uk_UA/auth.php b/resources/lang/uk_UA/auth.php index 8d23b8836a..fdc0cc0c49 100644 --- a/resources/lang/uk_UA/auth.php +++ b/resources/lang/uk_UA/auth.php @@ -31,11 +31,9 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Невірний логін або пароль.', - 'throttle' => 'Занадто багато невдалих спроб входу в систему. Будь ласка, повторіть спробу через :seconds секунд.', + 'throttle' => 'Забагато спроб входу. Повторіть спробу через :seconds секунд.', ]; diff --git a/resources/lang/uk_UA/breadcrumbs.php b/resources/lang/uk_UA/breadcrumbs.php index 219528b2fa..d92e554f0c 100644 --- a/resources/lang/uk_UA/breadcrumbs.php +++ b/resources/lang/uk_UA/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Головна', - 'budgets' => 'Бюджет', - 'subscriptions' => 'Підписка', - 'transactions' => 'Операції', - 'title_expenses' => 'Витрати', - 'title_withdrawal' => 'Витрати', - 'title_revenue' => 'Дохід / прибуток', - 'title_deposit' => 'Дохід / прибуток', - 'title_transfer' => 'Перекази', - 'title_transfers' => 'Перекази', - 'edit_currency' => 'Редагування валюти ":name"', - 'delete_currency' => 'Видалення валюти ":name"', - 'newPiggyBank' => 'Створити нову скарбничку', - 'edit_piggyBank' => 'Редагувати скарбничку ":name"', - 'preferences' => 'Налаштування', - 'profile' => 'Профіль', - 'accounts' => 'Рахунки', - 'changePassword' => 'Змінити пароль', - 'change_email' => 'Змінити електронну адресу', - 'bills' => 'Рахунки до оплати', - 'newBill' => 'Нових рахунок до оплати', - 'edit_bill' => 'Редагувати рахунок до сплати ":name"', - 'delete_bill' => 'Видалити рахунок до сплати ":name"', - 'reports' => 'Звіти', - 'search_result' => 'Результати пошуку для ":query"', - 'withdrawal_list' => 'Витрати', - 'Withdrawal_list' => 'Витрати', - 'deposit_list' => 'Доходи, прибутки та депозити', - 'transfer_list' => 'Перекази', - 'transfers_list' => 'Перекази', + 'home' => 'Головна', + 'budgets' => 'Бюджет', + 'subscriptions' => 'Підписка', + 'transactions' => 'Операції', + 'title_expenses' => 'Витрати', + 'title_withdrawal' => 'Витрати', + 'title_revenue' => 'Дохід / прибуток', + 'title_deposit' => 'Дохід / прибуток', + 'title_transfer' => 'Перекази', + 'title_transfers' => 'Перекази', + 'edit_currency' => 'Редагування валюти ":name"', + 'delete_currency' => 'Видалення валюти ":name"', + 'newPiggyBank' => 'Створити нову скарбничку', + 'edit_piggyBank' => 'Редагувати скарбничку ":name"', + 'preferences' => 'Налаштування', + 'profile' => 'Профіль', + 'accounts' => 'Рахунки', + 'changePassword' => 'Змінити пароль', + 'change_email' => 'Змінити електронну адресу', + 'bills' => 'Рахунки до оплати', + 'newBill' => 'Новий рахунок', + 'edit_bill' => 'Змінити рахунок ":name"', + 'delete_bill' => 'Видалити рахунок ":name"', + 'reports' => 'Звіти', + 'search_result' => 'Результати пошуку для ":query"', + 'withdrawal_list' => 'Витрати', + 'Withdrawal_list' => 'Витрати', + 'deposit_list' => 'Прибутки, доходи та вклади', + 'transfer_list' => 'Перекази', + 'transfers_list' => 'Перекази', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,24 +76,23 @@ return [ * */ - 'reconciliation_list' => 'Звірка', 'create_withdrawal' => 'Створити нову витрату', 'create_deposit' => 'Створити новий дохід', 'create_transfer' => 'Створити новий переказ', - 'create_new_transaction' => 'Створити нову операцію', - 'edit_journal' => 'Редагувати операцію ":description"', + 'create_new_transaction' => 'Створити нову транзакцію', + 'edit_journal' => 'Редагувати транзакцію ":description"', 'edit_reconciliation' => 'Редагувати ":description"', - 'delete_journal' => 'Видалити операцію ":description"', - 'delete_group' => 'Видалити операцію ":description"', + 'delete_journal' => 'Видалити транзакцію ":description"', + 'delete_group' => 'Видалення транзакції ":description"', 'tags' => 'Мітки', 'createTag' => 'Створити нову мітку', 'edit_tag' => 'Редагувати мітку ":tag"', 'delete_tag' => 'Видалити мітку ":tag"', - 'delete_journal_link' => 'Видалити зв‘язок між операціями', + 'delete_journal_link' => 'Видалити зв‘язок між транзакціями', 'edit_object_group' => 'Редагувати групу ":title"', 'delete_object_group' => 'Видалити групу ":title"', - 'logout_others' => 'Завершити інші сесії', + 'logout_others' => 'Вийти з решти сеансів', 'asset_accounts' => 'Основні рахунки', 'expense_accounts' => 'Рахунки витрат', 'revenue_accounts' => 'Джерела доходів', diff --git a/resources/lang/uk_UA/components.php b/resources/lang/uk_UA/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/uk_UA/components.php +++ b/resources/lang/uk_UA/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/uk_UA/config.php b/resources/lang/uk_UA/config.php index b25e5a11be..60d7a95fcf 100644 --- a/resources/lang/uk_UA/config.php +++ b/resources/lang/uk_UA/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'uk', - 'locale' => 'uk, Ukrainian, uk_UA.utf8, uk_UA.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'uk', + 'locale' => 'uk, Ukrainian, uk_UA.utf8, uk_UA.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'D MMM YYYY', - 'month_and_day_fns' => 'd MMMM y', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'місяць день рік', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'MMMM Do, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'дд MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'dd MMMM', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'MMMM Do', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'ММММ do, рік @ ГГ:хв:сек', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Тиждень] W, GGG', + 'week_in_year_fns' => "'Тиждень' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Тиждень' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'Рік', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Чверть'Q, yyyу", - 'half_year_fns' => "'{half}-е півріччя', yyyy", - 'dow_1' => 'Понеділок', - 'dow_2' => 'Вівторок', - 'dow_3' => 'Середа', - 'dow_4' => 'Четвер', - 'dow_5' => 'П\'ятниця', - 'dow_6' => 'Субота', - 'dow_7' => 'Неділя', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Понеділок', + 'dow_2' => 'Вівторок', + 'dow_3' => 'Середа', + 'dow_4' => 'Четвер', + 'dow_5' => 'П\'ятниця', + 'dow_6' => 'Субота', + 'dow_7' => 'Неділя', ]; /* diff --git a/resources/lang/uk_UA/demo.php b/resources/lang/uk_UA/demo.php index ad87194bdb..fc5a5f1481 100644 --- a/resources/lang/uk_UA/demo.php +++ b/resources/lang/uk_UA/demo.php @@ -31,21 +31,20 @@ * */ - declare(strict_types=1); return [ - 'no_demo_text' => 'Вибачте, але для цієї сторінки немає додаткових пояснень.', + 'no_demo_text' => 'На жаль, немає додаткового тексту, що пояснює демонстрацію для цього сайту.', 'see_help_icon' => 'Однак, - іконка у верхньому правому куті може розповісти вам більше.', - 'index' => 'Вітаємо у Firefly III! На цій сторінці ви отримаєте короткий огляд ваших фінансів. Для отримання додаткової інформації, перевірте рахунки → Основні рахунки і, звичайно ж, Бюджети та Звіти. Або просто озирніться навколо і подивіться, де ви опинитесь.', - 'accounts-index' => 'Основні рахунки - це ваші особисті банківські рахунки. Рахунки витрат - це рахунки, на які ви витрачаєте гроші, наприклад магазини та друзі. Джерела доходів - це рахунки, з яких ви отримуєте гроші, такі як ваша робота, уряд або інші джерела доходу. Зобов\'язання - це борги та кредити, такі як старі борги кредитних карток або студентські позики. На цій сторінці ви можете змінити або видалити їх.', - 'budgets-index' => 'На цій сторінці відображається огляд ваших бюджетів. Головна панель показує суму, яку можна бюджетувати. Це може бути налаштовано для будь-якого періоду, натиснувши на суму праворуч. Сума, яку ви витратили, показана в рядку нижче. Нижче наведені витрати за бюджет і те, що ви бюджетували для них.', - 'reports-index-start' => 'Firefly III підтримує кілька типів звітів. Дізнайтеся більше, натиснувши на значок -іконку у верхньому правому куті.', - 'reports-index-examples' => 'Обов\'язково перевірте ці приклади: щомісячний фінансовий звіт, щорічний фінансовий звіт та огляд бюджету.', - 'currencies-index' => 'Firefly III підтримує декілька валют. Незважаючи на те, що за замовчуванням встановлена валюта Євро, ви може встановити долар США та багато інших валют. Як бачите, невеликий вибір валюти був включений, але ви можете додати свою власну, якщо хочете. Зміна валюти за замовчуванням не змінить валюту існуючих операцій: Firefly III підтримує використання декілька валют одночасно.', - 'transactions-index' => 'Ці витрати, доходи і перекази не дуже інформативні. Вони були сформовані автоматично.', - 'piggy-banks-index' => 'Як бачите, є три скарбнички. Використовуйте кнопки плюс та мінус, щоб змінтити суму грошей у скарбничках. Натисніть на назву скарбнички, щоб побачити налаштування для кожної скарбнички.', - 'profile-index' => 'Майте на увазі, що демо-сайт відновлюється кожні чотири години. Доступ може бути відкликаний в будь-який час. Це відбувається автоматично і не є помилкою.', + 'index' => 'Ласкаво просимо доFirefly III! Ця сторінка дає вам короткий огляд ваших фінансів. Для отримання додаткової інформації, перевірте рахунки → Рахунки активів і, звичайно ж, Бюджети та Звіти. Або просто озирніться навколо і подивіться, де ви опинитесь.', + 'accounts-index' => 'Рахунки активів – це ваші особисті банківські рахунки. Видаткові рахунки – це рахунки, з яких ви витрачаєте гроші в магазинах та інших місцях. Дохідні рахунки – це рахунки, з яких ви отримуєте гроші – свою роботу, відшкодування податків або інші джерела доходу. Зобов\'язання - це ваші борги та позики - овердрафт по старій кредитній картці або студентська позика. На цій сторінці ви можете змінювати та видаляти їх.', + 'budgets-index' => 'На цій сторінці представлено огляд бюджетів. Верхня панель показує суму, доступну для бюджету. Ви можете скоригувати її на будь-який період, натиснувши суму праворуч. Сума, яку ви фактично витратили, показана на панелі нижче. Під цим ваші бюджетні витрати та те, що ви на них виділили.', + 'reports-index-start' => 'Firefly III підтримує багато типів звітів. Ви можете прочитати про них, натиснувши іконку у верхньому правому куті.', + 'reports-index-examples' => 'Перегляньте ці приклади: місячний фінансовий огляд, річний фінансовий огляд і бюджетний огляд .', + 'currencies-index' => 'Firefly підтримує кілька валют. Хоча за замовчуванням є євро, його можна встановити на долар США та багато інших валют. Як бачите, включено невеликий вибір валют, але ви можете додати свою власну, якщо хочете. Однак зміна валюти за замовчуванням не змінить валюту існуючих транзакцій: Firefly III підтримує використання кількох валют одночасно.', + 'transactions-index' => 'Ці витрати, вклади та перекази не відрізняються особливою винахідливістю. Вони були згенеровані автоматично.', + 'piggy-banks-index' => 'Як бачите, скарбничок три. Використовуйте кнопки плюс і мінус, щоб змінити кількість грошей у кожній скарбничці. Натисніть на назву скарбнички, щоб побачити налаштування кожної скарбнички.', + 'profile-index' => 'Зверніть увагу, що демонстраційна сторінка скидається кожні чотири години. Доступ може бути скасований у будь-який час. Це відбувається автоматично і не є помилкою.', ]; /* diff --git a/resources/lang/uk_UA/email.php b/resources/lang/uk_UA/email.php index c506cf4db2..85d4095685 100644 --- a/resources/lang/uk_UA/email.php +++ b/resources/lang/uk_UA/email.php @@ -31,21 +31,20 @@ * */ - declare(strict_types=1); return [ // common items 'greeting' => 'Привіт,', - 'closing' => 'Біп боп,', + 'closing' => 'Я тут по роботі', 'signature' => 'Поштовий робот Firefly III', - 'footer_ps' => 'PS: Це повідомлення було надіслано, оскільки надійшов запит з IP :ipAddress.', + 'footer_ps' => 'PS: Це повідомлення було надіслано, оскільки надійшов запит з IP-адреси :ipAddress.', // admin test 'admin_test_subject' => 'Тестове повідомлення з вашого додатку Firefly III', 'admin_test_body' => 'Це тестове повідомлення з вашого додатку Firefly III. Воно було надіслано на :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,20 +55,19 @@ return [ * */ - // invite 'invitation_created_subject' => 'Запрошення створено', 'invitation_created_body' => 'Адміністратор ":email" створив запрошення для користувача з адресою електронної пошти ":invitee. Запрошення буде дійсне протягом 48 годин.', 'invite_user_subject' => 'Вас запросили створити обліковий запис Firefly III.', - 'invitation_introduction' => 'Вас запросили створити обліковий запис Firefly III на **:host**. Firefly III - персональний, приватний менеджер фінансів, розміщуваний на власному сервері. Всі круті хлопці використовують його.', + 'invitation_introduction' => 'Вас запросили створити обліковий запис Firefly III на **:host**. Firefly III — це персональний приватний фінансовий менеджер, який розміщується на власному сервері. Всі круті хлопці ним користуються.', 'invitation_invited_by' => 'Ви були запрошені ":admin" і це запрошення було відправлено ":invitee". Це ви, так?', 'invitation_url' => 'Запрошення дійсне протягом 48 годин і може бути використане на [Firefly III](:url). Насолоджуйтесь!', // new IP 'login_from_new_ip' => 'Новий вхід в Firefly III', 'slack_login_from_new_ip' => 'Новий вхід на Firefly III з IP :ip (:host)', - 'new_ip_body' => 'Firefly III зафіксував новий вхід в ваш аккаунт з невідомої IP-адреси. Якщо ви не авторизовувались в системі з IP-адреси, вказаної нижче, або з часу останньої авторизації пройшло більше шести місяців, Firefly III попередить вас.', - 'new_ip_warning' => 'Якщо ви впізнаєте цю IP-адресу або цей логін, ви можете проігнорувати це повідомлення. Якщо ви не увійшли, якщо не маєте жодного уявлення про те, що відбувається, перевірте чи в безпеці ваш пароль, змініть його та закрийте всі інші сесії. Для цього перейдіть на сторінку вашого профілю. Звичайно, ви вже увімкнули двофакторну авторизацію, чи не так? Залишайтеся у безпеці!', + 'new_ip_body' => 'Firefly III виявив новий вхід до вашого облікового запису з невідомої IP-адреси. Якщо ви ніколи не входили з IP-адреси, наведеної нижче, або після вашого останнього входу минуло більше шести місяців, Firefly III попередить вас про це.', + 'new_ip_warning' => 'Якщо ви впізнаєте цю IP-адресу або логін, ви можете проігнорувати це повідомлення. Якщо ви не ввійшли або не знаєте, про що йдеться, перевірте надійність свого пароля, змініть його та вийдіть із усіх інших сеансів. Для цього перейдіть на сторінку свого профілю. Звичайно, у вас уже ввімкнено двофакторна авторизація, чи не так? Будьте обережними!', 'ip_address' => 'IP-адреса', 'host_name' => 'Хост', 'date_time' => 'Дата + час', @@ -77,22 +75,22 @@ return [ // access token created 'access_token_created_subject' => 'Створено новий токен доступу', 'access_token_created_body' => 'Хтось (сподіваюся, ви) щойно створив новий токен доступу Firefly III API для вашого облікового запису.', - 'access_token_created_explanation' => 'З цим токеном вони отримають доступ до **всіх** ваших фінансових операцій через Firefly III API.', - 'access_token_created_revoke' => 'Якщо це були не ви, будь ласка, відкличте цей токен якомога швидше через :url', + 'access_token_created_explanation' => 'За допомогою цього токена ви можете отримати доступ до **всіх** своїх фінансових записів через Firefly III API.', + 'access_token_created_revoke' => 'Якщо це не ви, якнайшвидше анулюйте цей токен через :url', // registered - 'registered_subject' => 'Вітаємо у Firefly III!', - 'registered_subject_admin' => 'Зареєстровано нового користувача', - 'admin_new_user_registered' => 'Зареєстровано нового користувача. Користувачу **:email** був наданий ID користувача #:id.', - 'registered_welcome' => 'Ласкаво просимо до [Firefly III](:address). Цей лист підтверджує, що ваша реєстрація була успішною. Ура!', + 'registered_subject' => 'Ласкаво просимо у Firefly III!', + 'registered_subject_admin' => 'Зареєструвався новий користувач', + 'admin_new_user_registered' => 'Зареєструвався новий користувач. Користувач **:email** отримав ідентифікатор користувача #:id.', + 'registered_welcome' => 'Ласкаво просимо до [Firefly III](:address). Ваша реєстрація пройшла успішно, цей лист надіслано для підтвердження. Ура!', 'registered_pw' => 'Якщо ви забули пароль, то відновіть його за допомогою [засобу скидання пароля](:address/password/reset).', - 'registered_help' => 'У правому верхньому куті кожної сторінки є іконка довідки. Якщо вам потрібна допомога, натисніть на неї!', + 'registered_help' => 'У верхньому правому куті кожної сторінки є іконка довідки. Якщо вам потрібна допомога, натисніть її!', 'registered_closing' => 'Насолоджуйтесь!', 'registered_firefly_iii_link' => 'Firefly III:', - 'registered_pw_reset_link' => 'Зміна пароля:', + 'registered_pw_reset_link' => 'Скидання пароля:', 'registered_doc_link' => 'Документація:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,51 +101,51 @@ return [ * */ - // new version 'new_version_email_subject' => 'Доступна нова версія Firefly III', // email change - 'email_change_subject' => 'Вашу електронну адресу змінено', - 'email_change_body_to_new' => 'Ви або хтось, хто має доступ до вашого облікового запису Firefly III змінив/-ла вашу адресу електронної пошти. Якщо ви не очікували цього повідомлення, проігноруйте та видаліть його.', - 'email_change_body_to_old' => 'Ви або хтось, хто має доступ до вашого облікового запису Firefly III змінив/-ла вашу адресу електронної пошти. Якщо ви цього не очікували, ви **повинні** перейти на "undo"-link нижче, щоб захистити свій обліковий запис!', - 'email_change_ignore' => 'Якщо ви викликали ці зміни, ви можете проігнорувати це повідомлення.', - 'email_change_old' => 'Попередня адреса електронної пошти: :email', - 'email_change_old_strong' => 'Попередня адреса електронної пошти::email', + 'email_change_subject' => 'Вашу електронну адресу Firefly III було змінено', + 'email_change_body_to_new' => 'Ви або хтось із доступом до вашого облікового запису Firefly III змінили вашу електронну адресу. Якщо ви очікували це повідомлення, проігноруйте його та видаліть.', + 'email_change_body_to_old' => 'Ви або хтось із доступом до вашого облікового запису Firefly III змінили вашу електронну адресу. Якщо це не ви або зміни небажані, ви **має** скористатись посиланням «скасувати» нижче, щоб захистити свій обліковий запис!', + 'email_change_ignore' => 'Якщо ви ініціювали цю зміну, можете сміливо ігнорувати це повідомлення.', + 'email_change_old' => 'Стара електронна адреса: :email', + 'email_change_old_strong' => 'Стара електронна адреса: **:email**', 'email_change_new' => 'Нова адреса електронної пошти::email', 'email_change_new_strong' => 'Нова адреса електронної пошти:**:email**', - 'email_change_instructions' => 'Ви не можете користуватися Firefly III, доки не підтвердите зміни. Будь ласка, перейдіть за посиланням нижче, щоб це зробити.', - 'email_change_undo_link' => 'Щоб скасувати зміни, перейдіть за цим посиланням:', + 'email_change_instructions' => 'Ви не можете використовувати Firefly III, доки не підтвердите цю зміну. Натисніть посилання нижче, щоб зробити це.', + 'email_change_undo_link' => 'Щоб скасувати зміни, натисніть це посилання:', // OAuth token created - 'oauth_created_subject' => 'Новий обліковий запис було створено', - 'oauth_created_body' => 'Хтось (сподіваюся, ви) щойно створив новий клієнт API Firefly III для вашого облікового запису. Зазначено ":name" та має посилання `:url`.', - 'oauth_created_explanation' => 'З цим токеном вони мають доступ до **всіх** ваших фінансових операцій через Firefly III API.', - 'oauth_created_undo' => 'Якщо це були не ви, будь ласка, відкличте цей токен якомога швидше через:url', + 'oauth_created_subject' => 'Створено новий обліковий запис OAuth', + 'oauth_created_body' => 'Хтось (сподіваємось, ви) щойно створив новий клієнт Firefly III OAuth API для вашого облікового запису користувача. Він позначений «:name» і має зворотну URL-адресу «:url».', + 'oauth_created_explanation' => 'За допомогою цього клієнта ви можете отримати доступ до **всіх** своїх фінансових записів через Firefly III API.', + 'oauth_created_undo' => 'Якщо це не ви, відкликайте цей клієнт якомога швидше на `:url`', // reset password - 'reset_pw_subject' => 'Запит скидання пароля', - 'reset_pw_instructions' => 'Хтось намагався скинути ваш пароль. Якщо це були ви, будь ласка, перейдіть за посиланням нижче для зміни пароля.', - 'reset_pw_warning' => '**Будь ласка** переконайться, що посилання дійсно переходить до Firefly III!', + 'reset_pw_subject' => 'Запит на зміну пароля', + 'reset_pw_instructions' => 'Хтось намагався змінити ваш пароль. Якщо це ви, натисніть посилання нижче, щоб зробити це.', + 'reset_pw_warning' => '**БУДЬ ЛАСКА** переконайтеся, що посилання справді веде до сервера Firefly III, який ви очікували!', // error 'error_subject' => 'Помилка у Firefly III', - 'error_intro' => 'У Firefly III v:version отримано помилку: :errorMessage.', - 'error_type' => 'Помилка типу ":class".', + 'error_intro' => 'Firefly III v:version виявив помилку: :errorMessage.', + 'error_type' => 'Помилка була типу ":class".', 'error_timestamp' => 'Сталася помилка о :time.', - 'error_location' => 'Ця помилка сталася у файлі :file в рядку :line з кодом :code.', - 'error_user' => 'Сталася помилка користувача #:id, :email.', + 'error_location' => 'Сталася помилка у файлі ":file" line :line with :code.', + 'error_user' => 'Користувач #:id, :email виявив помилку.', 'error_no_user' => 'Не знайдено жодного користувача, пов\'язвного з цією помилкою, або ж користувача не виявлено.', 'error_ip' => 'IP-адреса, пов\'язана з цією помилкою: :ip', 'error_url' => 'URL-адреса: :url', 'error_user_agent' => 'Користувач: :userAgent', - 'error_stacktrace' => 'Вся інформація про помилку нижче. Якщо ви вважаєте, що це помилка у Firefly III, ви можете переслати це повідомлення до james@firefly-ii. rg. Це може допомогти виправити помилку, з якою ви щойно стикнулися.', - 'error_github_html' => 'Якщо бажаєте, ви також можете відкрити нове звернення в GitHub.', + 'error_stacktrace' => 'Повний опис помилки наведено нижче. Якщо ви вважаєте, що це помилка у Firefly III, ви можете переслати це повідомлення на james@firefly-iii. rg. Це може допомогти вам виправити помилку, з якою ви щойно зіткнулися.', + 'error_github_html' => 'За бажанням ви також можете відкрити нове звернення на GitHub.', 'error_github_text' => 'Якщо бажаєте, ви також можете відкрити нове звернення на https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Повна інформація про помилку нижче:', - 'error_headers' => 'Наступні заголовки також можуть підходити:', + 'error_headers' => 'Наступні заголовки також можуть бути актуальними:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,22 +156,20 @@ return [ * */ - // report new journals - 'new_journals_subject' => 'Firefly III створив нову операцію|Firefly III створив :count нових операцій', - 'new_journals_header' => 'Firefly III створив для вас операцію. Ви можете знайти його у вашому додатку Firefly III:|Firefly III створив для вас :count операцій. Ви можете знайти їх у вашому додатку Firefly ІІІ:', + 'new_journals_subject' => 'Firefly III створив нову транзакцію|Firefly III створив :count нових транзакцій', + 'new_journals_header' => 'Firefly III створив для вас транзакцію. Ви можете знайти її у Firefly III:|Firefly III створив :count транзакції для вас. Ви можете знайти їх у Firefly III:', // bill warning - 'bill_warning_subject_end_date' => 'Сплатіть ваш рахунок ":name" не пізніше :diff днів', - 'bill_warning_subject_now_end_date' => 'Сплатіть ваш рахунок ":name" СЬОГОДНІ', - 'bill_warning_subject_extension_date' => 'Строк сплати вашого рахунку ":name" має бути подовжений або скасований через :diff днів', - 'bill_warning_subject_now_extension_date' => 'Строк сплати вашого рахунку ":name" має бути подовжений або скасований СЬОГОДНІ', - 'bill_warning_end_date' => 'Строк сплати вашого рахунку **":name"** :date. Залишилося приблизно **:diff днів**.', - 'bill_warning_extension_date' => 'Строк сплати вашого рахунку **":name"** має бути продовжений або скасований до :date. Залишилося приблизно **:diff днів**.', - 'bill_warning_end_date_zero' => 'Строк сплати вашого рахунку **":name"** :date. Це **СЬОГОДНІ!**', - 'bill_warning_extension_date_zero' => 'Строк сплати вашого рахунку **":name"** має бути подовжено або скасовано до :date. Це **СЬОГОДНІ!**', - 'bill_warning_please_action' => 'Будь ласка, оберіть відповідну дію.', - + 'bill_warning_subject_end_date' => 'Термін дії вашого рахунку ":name" закінчується через :diff днів', + 'bill_warning_subject_now_end_date' => 'Термін дії вашого рахунку ":name" закінчується СЬОГОДНІ', + 'bill_warning_subject_extension_date' => 'Ваш рахунок ":name" буде продовжено або скасовано протягом :diff днів', + 'bill_warning_subject_now_extension_date' => 'Ваш рахунок ":name" буде продовжено або скасовано СЬОГОДНІ', + 'bill_warning_end_date' => 'Ваш рахунок **":name"** має дату завершення :date. Цей момент мине приблизно через **:diff days**.', + 'bill_warning_extension_date' => 'Ваш рахунок **":name"** буде продовжено або скасовано :date. Цей момент мине приблизно через **:diff days**.', + 'bill_warning_end_date_zero' => 'Ваш рахунок **":name"** має дату завершення :date. Цей момент мине **СЬОГОДНІ!**', + 'bill_warning_extension_date_zero' => 'Ваш рахунок **":name"** буде продовжено або скасовано :date. Цей момент мине **СЬОГОДНІ!**', + 'bill_warning_please_action' => 'Будь ласка, вживіть відповідних заходів.', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/uk_UA/errors.php b/resources/lang/uk_UA/errors.php index 498382e553..b0f1bbcdb4 100644 --- a/resources/lang/uk_UA/errors.php +++ b/resources/lang/uk_UA/errors.php @@ -31,28 +31,27 @@ * */ - declare(strict_types=1); return [ '404_header' => 'Firefly III не може знайти цю сторінку.', '404_page_does_not_exist' => 'Запитувана сторінка не існує. Будь ласка, перевірте, правильність URL. Можливо зробили помилку при наборі?', - '404_send_error' => 'Якщо ви автоматично перенаправлені на цю сторінку, будь ласка, прийміть мої вибачення. У вашому лог файлі буде запис про цю помилку, та я б був дуже вдячний, якби ви відправили мені її.', + '404_send_error' => 'Якщо ви були автоматично перенаправлені на цю сторінку, прийміть мої вибачення. Помилка була записана до файлів журналу, і я буду вдячний, якщо ви надішлете мені повідомлення про помилку.', '404_github_link' => 'Якщо ви впевнені, що ця сторінка має існувати, створіть звернення GitHub.', - 'whoops' => 'Ой-йой', - 'fatal_error' => 'Відбулася критична помилка. Будь ласка, перевірте файли журналів у "storage/logs" або використайте "docker logs -f - [container]", щоб побачити, що сталось.', - 'maintenance_mode' => 'Firefly III знаходиться на обслуговуванні.', - 'be_right_back' => 'Скоро повернусь!', - 'check_back' => 'Firefly III вимкнувся для необхідного обслуговування. Будь ласка, повторіть спробу через секунду.', - 'error_occurred' => 'Ой-йой! Сталася помилка.', - 'db_error_occurred' => 'Ой-йой! Сталася помилка бази даних.', + 'whoops' => 'Ой', + 'fatal_error' => 'Сталася фатальна помилка. Перевірте файли журналів у «storage/logs» або скористайтеся «docker logs -f [container]», щоб побачити, що відбувається.', + 'maintenance_mode' => 'Firefly III знаходиться в режимі обслуговування.', + 'be_right_back' => 'Незабаром повернусь!', + 'check_back' => 'Firefly III вимкнено для необхідного обслуговування. Перевірте за секунду.', + 'error_occurred' => 'Ой! Сталася помилка.', + 'db_error_occurred' => 'Ой! Сталася помилка бази даних.', 'error_not_recoverable' => 'На жаль, цю помилку не можна виправити :(. Firefly III пошкоджено. Помилка:', 'error' => 'Помилка', 'error_location' => 'Ця помилка сталася у файлі :file в рядку :line з кодом :code.', - 'stacktrace' => 'Інформація про помилку', + 'stacktrace' => 'Трасування стека', 'more_info' => 'Дізнатися більше', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Будь ласка, знайдіть більше інформації в директорії storage/logs де знаходяться файли журналу. Якщо ви використовуєте Docker, скористайтесь docker logs -f [container].', - 'collect_info_more' => 'Дізнатись більше зібраної інформації щодо помилок у розділізапитань, які часто задають.', - 'github_help' => 'Отримати допомогу на GitHub', - 'github_instructions' => 'Запрошуємо відкрити нове звернення через проблему на GitHub.', - 'use_search' => 'Скористайтеся пошуком!', - 'include_info' => 'Додайте інформацію з цієї сторінки налагодження.', - 'tell_more' => 'Дайте нам більше інформації, ніж "Сервіс не працює!"', - 'include_logs' => 'Додайте журнал помилок (див. вище).', - 'what_did_you_do' => 'Розкажіть нам, що ви робили.', - 'offline_header' => 'Ви, ймовірно, не в мережі', - 'offline_unreachable' => 'Firefly III недоступний. Ваш пристрій наразі в не в мережі або сервер не працює.', - 'offline_github' => 'Якщо ви впевнені, що ваш пристрій та сервер в мережі, створіть звернення на GitHub.', - + 'collect_info' => 'Для отримання додаткової інформації перегляньте каталог storage/logs, який містить файли журналів. Якщо ви використовуєте Docker, скористайтесь docker logs -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Отримати допомогу на GitHub', + 'github_instructions' => 'Запрошуємо відкрити нове звернення через проблему на GitHub.', + 'use_search' => 'Скористайтеся пошуком!', + 'include_info' => 'Додайте інформацію з цієї сторінки налагодження.', + 'tell_more' => 'Дайте нам більше інформації, ніж "Сервіс не працює!"', + 'include_logs' => 'Додайте журнали помилок (див. вище).', + 'what_did_you_do' => 'Розкажіть нам, що ви робили.', + 'offline_header' => 'Ймовірно, ви не в мережі', + 'offline_unreachable' => 'Firefly III недоступний. Ваш пристрій наразі не в мережі або сервер не працює.', + 'offline_github' => 'Якщо ви впевнені, що ваш пристрій та сервер підключені до мережі, створіть звернення на GitHub.', ]; diff --git a/resources/lang/uk_UA/firefly.php b/resources/lang/uk_UA/firefly.php index 98366e99c8..16dd660f94 100644 --- a/resources/lang/uk_UA/firefly.php +++ b/resources/lang/uk_UA/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Закрити', - 'actions' => 'Дії', - 'edit' => 'Редагувати', - 'delete' => 'Видалити', - 'split' => 'Розділити', - 'single_split' => 'Розділити', - 'clone' => 'Клонувати', - 'confirm_action' => 'Підтвердити дію', - 'last_seven_days' => 'Останні сім днів', - 'last_thirty_days' => 'Останні тридцять днів', - 'last_180_days' => 'Останні 180 днів', - 'month_to_date' => 'Місяць до дати', - 'year_to_date' => 'Рік до дати', - 'YTD' => 'З початку року', - 'welcome_back' => 'Що в гаманці?', - 'everything' => 'Все', - 'today' => 'сьогодні', - 'customRange' => 'Власний діапазон', - 'date_range' => 'Період', - 'apply' => 'Застосувати', - 'select_date' => 'Оберіть дату..', - 'cancel' => 'Скасувати', - 'from' => 'Від', - 'to' => 'До', - 'structure' => 'Структура', - 'help_translating' => 'Цей текст довідки поки що не доступний українською мовою. Ви допоможете перекласти?', - 'showEverything' => 'Показати все', - 'never' => 'Ніколи', - 'no_results_for_empty_search' => 'Ваш пошук був порожнім, тому нічого не знайдено.', - 'removed_amount' => 'Видалено :amount', - 'added_amount' => 'Додано :amount', - 'asset_account_role_help' => 'Будь-які додаткові параметри, що виникли з вашого вибору, можна додати пізніше.', - 'Opening balance' => 'Початковий баланс', - 'create_new_stuff' => 'Створити новий матеріал', - 'new_withdrawal' => 'Нове зняття коштів', - 'create_new_transaction' => 'Створити нову операцію', - 'sidebar_frontpage_create' => 'Створити', - 'new_transaction' => 'Нова операція', - 'no_rules_for_bill' => 'Цей рахунок до сплати не має правил, пов\'язаних з ним.', - 'go_to_asset_accounts' => 'Переглянути ваші активи рахунків', - 'go_to_budgets' => 'Перейти до ваших бюджетів', - 'go_to_withdrawals' => 'Перейти до зняття коштів', - 'clones_journal_x' => 'Операція є копією ":description" (#:id)', - 'go_to_categories' => 'Перейти до ваших категорій', - 'go_to_bills' => 'Відкрити рахунки до сплати', - 'go_to_expense_accounts' => 'Переглянь свої рахунки витрат', - 'go_to_revenue_accounts' => 'Перегляньте свої рахунки доходу', - 'go_to_piggies' => 'Відкрити скарбнички', - 'new_deposit' => 'Новий внесок', - 'new_transfer' => 'Новий переказ', - 'new_transfers' => 'Новий переказ', - 'new_asset_account' => 'Новий рахунок активів', - 'new_expense_account' => 'Новий рахунок витрат', - 'new_revenue_account' => 'Новий рахунок доходів', - 'new_liabilities_account' => 'Нове боргове зобов\'язання', - 'new_budget' => 'Новий бюджет', - 'new_bill' => 'Новий рахунок до сплати', - 'block_account_logout' => 'Ви вийшли з системи. Заблоковані облікові записи не можуть використовувати цей сервіс. Ви зареєструвалися з дійсною електронною адресою?', - 'flash_success' => 'Успішно!', - 'flash_info' => 'Повідомлення', - 'flash_warning' => 'Увага!', - 'flash_error' => 'Помилка!', - 'flash_danger' => 'Небезпека!', - 'flash_info_multiple' => 'Є одне повідомлення|Є :count повідомлень', - 'flash_error_multiple' => 'Є одна помилка|Є :count помилок', - 'net_worth' => 'Чисті активи', - 'help_for_this_page' => 'Довідка до сторінки', - 'help_for_this_page_body' => 'Ви можете знайти більше інформації про цю сторінку в документації.', - 'two_factor_welcome' => 'Доброго дня!', - 'two_factor_enter_code' => 'Для продовження, введіть свій код двофакторної аутентифікації. Його може згенерувати ваш додаток.', - 'two_factor_code_here' => 'Введіть код тут', - 'two_factor_title' => 'Двофакторна аутентифікація', - 'authenticate' => 'Аутентифікація', - 'two_factor_forgot_title' => 'Втрачено двофакторну автентифікацію', - 'two_factor_forgot' => 'Я забув свій двофакторний ключ.', - 'two_factor_lost_header' => 'Чи втрачено двофакторну аутентифікацію?', - 'two_factor_lost_intro' => 'Якщо ви втратили резервні копії, вам не пощастило. Через вебінтерфейс це неможливо виправити. Ви маєте виходи.', - 'two_factor_lost_fix_self' => 'Якщо ви запускаєте власний екземпляр Firefly III, прочитайте цей запис у розділі поширених запитань для отримання інструкцій.', - 'two_factor_lost_fix_owner' => 'В іншому випадку надішліть електронний лист адміністратору сервісу, :site_owner та попросіть його створити новий ключ двофакторної автентифікації.', - 'mfa_backup_code' => 'Ви використали резервний код для входу в Firefly III. Його не можна використати повторно, тому видаліть його зі свого списку.', - 'pref_two_factor_new_backup_codes' => 'Отримати нові резервні коди', - 'pref_two_factor_backup_code_count' => 'У вас є :count дійсний резервний код.|У вас :count дійсних резервних кодів.', - '2fa_i_have_them' => 'Я їх зберіг!', - 'warning_much_data' => ':days днів для завантаження даних, може знадобитися деякий час.', - 'registered' => 'Ви успішно зареєструвалися!', - 'Default asset account' => 'Рахунок активів за замовчуванням', - 'no_budget_pointer' => 'Здається, не створили жодного бюджету. Створіть один на сторінці бюджетів. Бюджети можуть допомогти вам стежити за витратами.', - 'no_bill_pointer' => 'У вас, здається, ще немає рахунків до сплати. Створіть кілька на сторінці рахунків. Рахунки можуть допомогти вам стежити за витратами.', - 'Savings account' => 'Рахунок для накопичення', - 'Credit card' => 'Кредитна картка', - 'source_accounts' => 'Джерело рахунку|Джерела рахунків', - 'destination_accounts' => 'Рахунок-одержувач|Рахунки-одержувачі', - 'user_id_is' => 'Ідентифікатор користувача :user', - 'field_supports_markdown' => 'Це поле підтримує Уцінку.', - 'need_more_help' => 'Якщо вам потрібна додаткова допомога щодо Firefly III, створіть звернення на Github.', - 'reenable_intro_text' => 'Ви можете повторно увімкнути вступне керівництво.', - 'intro_boxes_after_refresh' => 'Вступне керівництво з\'явиться знову після оновлення сторінки.', - 'show_all_no_filter' => 'Показати всі операції без групування за датою.', - 'expenses_by_category' => 'Витрати за категоріями', - 'expenses_by_budget' => 'Витрати за бюджетом', - 'income_by_category' => 'Дохід за категоріями', - 'expenses_by_asset_account' => 'Витрати з основного рахунку', - 'expenses_by_expense_account' => 'Витрати з рахунку витрат', - 'cannot_redirect_to_account' => 'Firefly III не може перенаправити вас на правильну сторінку. Вибачте.', - 'sum_of_expenses' => 'Сума витрат', - 'sum_of_income' => 'Сума доходу', - 'liabilities' => 'Зобов\'язання', - 'spent_in_specific_budget' => 'Витрати в бюджеті ":budget"', - 'spent_in_specific_double' => 'Витрати з рахунку ":account"', - 'earned_in_specific_double' => 'Зароблено у рахунок ":account"', - 'source_account' => 'Вихідний рахунок', - 'source_account_reconciliation' => 'Ви не можете редагувати операції звірки, рахунка джерела.', - 'destination_account' => 'Рахунок призначення', - 'destination_account_reconciliation' => 'Ви не можете редагувати операції погодження, рахунку призначення.', - 'sum_of_expenses_in_budget' => 'Загальна сума витрат у бюджеті ":budget"', - 'left_in_budget_limit' => 'Залишилося витратити відповідно до бюджету', - 'current_period' => 'Поточний період', - 'show_the_current_period_and_overview' => 'Показати поточний період та огляд', - 'pref_languages_locale' => 'Щоб мова, відмінна від англійської, працювала належним чином, ваша операційна система має мати правильну інформацію про мову. Якщо їх немає, дані про валюту, дати та суми можуть мати неправильний формат.', - 'budget_in_period' => 'Усі транзакції для бюджету ":name" між :start та :end у :currency', - 'chart_budget_in_period' => 'Графік всіх операцій для бюджету ":name" між :start та :end у :currency', - 'chart_budget_in_period_only_currency' => 'Сума бюджету була у :currency, тому цей графік відображатиме лише транзакції у :currency.', - 'chart_account_in_period' => 'Діаграма для всіх транзакцій по рахунку ":name" (:balance) між :start і :end', - 'chart_category_in_period' => 'Діаграма всіх операцій для категорії ":name" між :start і :end', - 'chart_category_all' => 'Діаграма всіх операцій для категорії ":name"', - 'clone_withdrawal' => 'Клонувати цю витрату', - 'clone_deposit' => 'Клонувати цей дохід', - 'clone_transfer' => 'Клонувати цей переказ', - 'multi_select_no_selection' => 'Нічого не вибрано', - 'multi_select_select_all' => 'Обрати все', - 'multi_select_n_selected' => 'обрано', - 'multi_select_all_selected' => 'Усе обрано', - 'multi_select_filter_placeholder' => 'Знайти..', - 'intro_next_label' => 'Далі', - 'intro_prev_label' => 'Попередній', - 'intro_skip_label' => 'Пропустити', - 'intro_done_label' => 'Готово', - 'between_dates_breadcrumb' => 'Між :start і :end', - 'all_journals_without_budget' => 'Всі транзакції без бюджету', - 'journals_without_budget' => 'Транзакції без бюджету', - 'all_journals_without_category' => 'Усі транзакції без категорії', - 'journals_without_category' => 'Транзакції без категорії', - 'all_journals_for_account' => 'Всі транзакції для рахунку :name', - 'chart_all_journals_for_account' => 'Діаграма всіх операцій для рахунку :name', - 'journals_in_period_for_account' => 'Всі транзакції для рахунку :name між :start і :end', - 'journals_in_period_for_account_js' => 'Всі транзакції для облікового запису {title} між {start} і {end}', - 'transferred' => 'Передано', - 'all_withdrawal' => 'Усі витрати', - 'all_transactions' => 'Всі транзакції', - 'title_withdrawal_between' => 'Всі витрати між :start і :end', - 'all_deposit' => 'Всі доходи', - 'title_deposit_between' => 'Всі доходи між :start і :end', - 'all_transfers' => 'Всі перекази', - 'title_transfers_between' => 'Всі перекази між :start і :end', - 'all_transfer' => 'Всі перекази', - 'all_journals_for_tag' => 'Всі транзакції для тегу ":tag"', - 'title_transfer_between' => 'Всі перекази між :start і :end', - 'all_journals_for_category' => 'Всі транзакції для категорії :name', - 'all_journals_for_budget' => 'Всі транзакції для бюджету :name', - 'chart_all_journals_for_budget' => 'Діаграма всіх операцій для бюджету: :name', - 'journals_in_period_for_category' => 'Всі транзакції для категорії :name між :start і :end', - 'journals_in_period_for_tag' => 'Всі транзакції для тегу: :tag між :start і :end', - 'not_available_demo_user' => 'Дана функція недоступна для демо-користувачів.', - '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' => 'Невірна конфігурація сервера', - 'invalid_locale_settings' => 'Firefly III не може форматувати грошові суми, оскільки на вашому сервері відсутні необхідні пакети. Існує інструкція як це зробити.', - 'quickswitch' => 'Швидке перемикання', - 'sign_in_to_start' => 'Увійдіть щоб розпочати сеанс', - 'sign_in' => 'Ввійти', - 'register_new_account' => 'Зареєструвати новий обліковий запис', - 'forgot_my_password' => 'Я забув пароль', - 'problems_with_input' => 'Є деякі проблеми з введеними вами даними.', - 'reset_password' => 'Відновити ваш пароль', - 'button_reset_password' => 'Відновити пароль', - 'reset_button' => 'Скинути', - 'want_to_login' => 'Я хочу увійти', - 'login_page_title' => 'Вхід у Firefly III', - 'register_page_title' => 'Реєстрація у Firefly III', - 'forgot_pw_page_title' => 'Забув пароль для Firefly III', - 'reset_pw_page_title' => 'Скинути пароль для Firefly III', - 'cannot_reset_demo_user' => 'Ви не можете скинути пароль демо-користувача.', - 'no_att_demo_user' => 'Демо-користувач не може завантажувати вкладені файли.', - 'button_register' => 'Реєєстрація', - 'authorization' => 'Авторизація', - 'active_bills_only' => 'тільки активні рахунки', - 'active_bills_only_total' => 'всі активні виплати', - 'active_exp_bills_only' => 'тільки активні і очікувані рахунки для сплати', - 'active_exp_bills_only_total' => 'всі активні очікувані виплати', - 'per_period_sum_1D' => 'Очікувані щоденні витрати', - 'per_period_sum_1W' => 'Очікувані щотижневі витрати', - 'per_period_sum_1M' => 'Очікувані щомісячні витрати', - 'per_period_sum_3M' => 'Очікувані квартальні витрати', - 'per_period_sum_6M' => 'Очікувані піврічні витрати', - 'per_period_sum_1Y' => 'Очікувані річні витрати', - 'average_per_bill' => 'у середньому на рахунок', - 'expected_total' => 'очікується загалом', - 'reconciliation_account_name' => ':name погодження (:currency)', - 'saved' => 'Збережено', - 'advanced_options' => 'Додаткові налаштування', - 'advanced_options_explain' => 'Деякі сторінки у Firefly III мають додаткові опції, приховані за цією кнопкою. Ця сторінка не має тут нічого цікавого, але перевірте інші!', - 'here_be_dragons' => 'Тут живуть дракони', + 'close' => 'Закрити', + 'actions' => 'Дії', + 'edit' => 'Редагувати', + 'delete' => 'Видалити', + 'split' => 'Розділити', + 'single_split' => 'Розділити', + 'clone' => 'Клонувати', + 'clone_and_edit' => 'Клонувати та редагувати', + 'confirm_action' => 'Підтвердити дію', + 'last_seven_days' => 'Останні сім днів', + 'last_thirty_days' => 'Останні тридцять днів', + 'last_180_days' => 'Останні 180 днів', + 'month_to_date' => 'Місяць до дати', + 'year_to_date' => 'Рік до дати', + 'YTD' => 'З початку року', + 'welcome_back' => 'Що в гаманці?', + 'everything' => 'Все', + 'today' => 'сьогодні', + 'customRange' => 'Власний діапазон', + 'date_range' => 'Період', + 'apply' => 'Застосувати', + 'select_date' => 'Оберіть дату..', + 'cancel' => 'Скасувати', + 'from' => 'Від', + 'to' => 'До', + 'structure' => 'Структура', + 'help_translating' => 'Цей текст довідки поки що не доступний українською мовою. Ви допоможете перекласти?', + 'showEverything' => 'Показати все', + 'never' => 'Ніколи', + 'no_results_for_empty_search' => 'Ваш пошук був порожнім, тому нічого не знайдено.', + 'removed_amount' => 'Видалено :amount', + 'added_amount' => 'Додано :amount', + 'asset_account_role_help' => 'Будь-які додаткові параметри, що виникли з вашого вибору, можна додати пізніше.', + 'Opening balance' => 'Початковий баланс', + 'create_new_stuff' => 'Створити новий матеріал', + 'new_withdrawal' => 'Нове зняття коштів', + 'create_new_transaction' => 'Створити нову операцію', + 'sidebar_frontpage_create' => 'Створити', + 'new_transaction' => 'Нова операція', + 'no_rules_for_bill' => 'Цей рахунок до сплати не має правил, пов\'язаних з ним.', + 'go_to_asset_accounts' => 'Переглянути ваші активи рахунків', + 'go_to_budgets' => 'Перейти до ваших бюджетів', + 'go_to_withdrawals' => 'Перейти до зняття коштів', + 'clones_journal_x' => 'Операція є копією ":description" (#:id)', + 'go_to_categories' => 'Перейти до ваших категорій', + 'go_to_bills' => 'Відкрити рахунки до сплати', + 'go_to_expense_accounts' => 'Переглянь свої рахунки витрат', + 'go_to_revenue_accounts' => 'Перегляньте свої рахунки доходу', + 'go_to_piggies' => 'Відкрити скарбнички', + 'new_deposit' => 'Новий внесок', + 'new_transfer' => 'Новий переказ', + 'new_transfers' => 'Новий переказ', + 'new_asset_account' => 'Новий рахунок активів', + 'new_expense_account' => 'Новий рахунок витрат', + 'new_revenue_account' => 'Новий рахунок доходів', + 'new_liabilities_account' => 'Нове боргове зобов\'язання', + 'new_budget' => 'Новий бюджет', + 'new_bill' => 'Новий рахунок до сплати', + 'block_account_logout' => 'Ви вийшли з системи. Заблоковані облікові записи не можуть використовувати цей сервіс. Ви зареєструвалися з дійсною електронною адресою?', + 'flash_success' => 'Успішно!', + 'flash_info' => 'Повідомлення', + 'flash_warning' => 'Увага!', + 'flash_error' => 'Помилка!', + 'flash_danger' => 'Небезпека!', + 'flash_info_multiple' => 'Є одне повідомлення|Є :count повідомлень', + 'flash_error_multiple' => 'Є одна помилка|Є :count помилок', + 'net_worth' => 'Чисті активи', + 'help_for_this_page' => 'Довідка до сторінки', + 'help_for_this_page_body' => 'Ви можете знайти більше інформації про цю сторінку в документації.', + 'two_factor_welcome' => 'Доброго дня!', + 'two_factor_enter_code' => 'Для продовження, введіть свій код двофакторної аутентифікації. Його може згенерувати ваш додаток.', + 'two_factor_code_here' => 'Введіть код тут', + 'two_factor_title' => 'Двофакторна аутентифікація', + 'authenticate' => 'Аутентифікація', + 'two_factor_forgot_title' => 'Втрачено двофакторну автентифікацію', + 'two_factor_forgot' => 'Я забув свій двофакторний ключ.', + 'two_factor_lost_header' => 'Чи втрачено двофакторну аутентифікацію?', + 'two_factor_lost_intro' => 'Якщо ви втратили резервні копії, вам не пощастило. Через вебінтерфейс це неможливо виправити. Ви маєте виходи.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner та попросіть його створити новий ключ двофакторної автентифікації.', + 'mfa_backup_code' => 'Ви використали резервний код для входу в Firefly III. Його не можна використати повторно, тому видаліть його зі свого списку.', + 'pref_two_factor_new_backup_codes' => 'Отримати нові резервні коди', + 'pref_two_factor_backup_code_count' => 'У вас є :count дійсний резервний код.|У вас :count дійсних резервних кодів.', + '2fa_i_have_them' => 'Я їх зберіг!', + 'warning_much_data' => ':days днів для завантаження даних, може знадобитися деякий час.', + 'registered' => 'Ви успішно зареєструвалися!', + 'Default asset account' => 'Рахунок активів за замовчуванням', + 'no_budget_pointer' => 'Здається, не створили жодного бюджету. Створіть один на сторінці бюджетів. Бюджети можуть допомогти вам стежити за витратами.', + 'no_bill_pointer' => 'У вас, здається, ще немає рахунків до сплати. Створіть кілька на сторінці рахунків. Рахунки можуть допомогти вам стежити за витратами.', + 'Savings account' => 'Рахунок для накопичення', + 'Credit card' => 'Кредитна картка', + 'source_accounts' => 'Джерело рахунку|Джерела рахунків', + 'destination_accounts' => 'Рахунок-одержувач|Рахунки-одержувачі', + 'user_id_is' => 'Ідентифікатор користувача :user', + 'field_supports_markdown' => 'Це поле підтримує Уцінку.', + 'need_more_help' => 'Якщо вам потрібна додаткова допомога щодо Firefly III, створіть звернення на Github.', + 'reenable_intro_text' => 'Ви можете повторно увімкнути вступне керівництво.', + 'intro_boxes_after_refresh' => 'Вступне керівництво з\'явиться знову після оновлення сторінки.', + 'show_all_no_filter' => 'Показати всі операції без групування за датою.', + 'expenses_by_category' => 'Витрати за категоріями', + 'expenses_by_budget' => 'Витрати за бюджетом', + 'income_by_category' => 'Дохід за категоріями', + 'expenses_by_asset_account' => 'Витрати з основного рахунку', + 'expenses_by_expense_account' => 'Витрати з рахунку витрат', + 'cannot_redirect_to_account' => 'Firefly III не може перенаправити вас на правильну сторінку. Вибачте.', + 'sum_of_expenses' => 'Сума витрат', + 'sum_of_income' => 'Сума доходу', + 'liabilities' => 'Зобов\'язання', + 'spent_in_specific_budget' => 'Витрати в бюджеті ":budget"', + 'spent_in_specific_double' => 'Витрати з рахунку ":account"', + 'earned_in_specific_double' => 'Зароблено у рахунок ":account"', + 'source_account' => 'Вихідний рахунок', + 'source_account_reconciliation' => 'Ви не можете редагувати операції звірки, рахунка джерела.', + 'destination_account' => 'Рахунок призначення', + 'destination_account_reconciliation' => 'Ви не можете редагувати операції погодження, рахунку призначення.', + 'sum_of_expenses_in_budget' => 'Загальна сума витрат у бюджеті ":budget"', + 'left_in_budget_limit' => 'Залишилося витратити відповідно до бюджету', + 'current_period' => 'Поточний період', + 'show_the_current_period_and_overview' => 'Показати поточний період та огляд', + 'pref_languages_locale' => 'Щоб мова, відмінна від англійської, працювала належним чином, ваша операційна система має мати правильну інформацію про мову. Якщо їх немає, дані про валюту, дати та суми можуть мати неправильний формат.', + 'budget_in_period' => 'Усі транзакції для бюджету ":name" між :start та :end у :currency', + 'chart_budget_in_period' => 'Графік всіх операцій для бюджету ":name" між :start та :end у :currency', + 'chart_budget_in_period_only_currency' => 'Сума бюджету була у :currency, тому цей графік відображатиме лише транзакції у :currency.', + 'chart_account_in_period' => 'Діаграма для всіх транзакцій по рахунку ":name" (:balance) між :start і :end', + 'chart_category_in_period' => 'Діаграма всіх операцій для категорії ":name" між :start і :end', + 'chart_category_all' => 'Діаграма всіх операцій для категорії ":name"', + 'clone_withdrawal' => 'Клонувати цю витрату', + 'clone_deposit' => 'Клонувати цей дохід', + 'clone_transfer' => 'Клонувати цей переказ', + 'multi_select_no_selection' => 'Нічого не вибрано', + 'multi_select_select_all' => 'Обрати все', + 'multi_select_n_selected' => 'обрано', + 'multi_select_all_selected' => 'Усе обрано', + 'multi_select_filter_placeholder' => 'Знайти..', + 'intro_next_label' => 'Далі', + 'intro_prev_label' => 'Попередній', + 'intro_skip_label' => 'Пропустити', + 'intro_done_label' => 'Готово', + 'between_dates_breadcrumb' => 'Між :start і :end', + 'all_journals_without_budget' => 'Всі транзакції без бюджету', + 'journals_without_budget' => 'Транзакції без бюджету', + 'all_journals_without_category' => 'Усі транзакції без категорії', + 'journals_without_category' => 'Транзакції без категорії', + 'all_journals_for_account' => 'Всі транзакції для рахунку :name', + 'chart_all_journals_for_account' => 'Діаграма всіх операцій для рахунку :name', + 'journals_in_period_for_account' => 'Всі транзакції для рахунку :name між :start і :end', + 'journals_in_period_for_account_js' => 'Всі транзакції для облікового запису {title} між {start} і {end}', + 'transferred' => 'Передано', + 'all_withdrawal' => 'Усі витрати', + 'all_transactions' => 'Всі транзакції', + 'title_withdrawal_between' => 'Всі витрати між :start і :end', + 'all_deposit' => 'Всі доходи', + 'title_deposit_between' => 'Всі доходи між :start і :end', + 'all_transfers' => 'Всі перекази', + 'title_transfers_between' => 'Всі перекази між :start і :end', + 'all_transfer' => 'Всі перекази', + 'all_journals_for_tag' => 'Всі транзакції для тегу ":tag"', + 'title_transfer_between' => 'Всі перекази між :start і :end', + 'all_journals_for_category' => 'Всі транзакції для категорії :name', + 'all_journals_for_budget' => 'Всі транзакції для бюджету :name', + 'chart_all_journals_for_budget' => 'Діаграма всіх операцій для бюджету: :name', + 'journals_in_period_for_category' => 'Всі транзакції для категорії :name між :start і :end', + 'journals_in_period_for_tag' => 'Всі транзакції для тегу: :tag між :start і :end', + 'not_available_demo_user' => 'Дана функція недоступна для демо-користувачів.', + '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' => 'Невірна конфігурація сервера', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Швидке перемикання', + 'sign_in_to_start' => 'Увійдіть щоб розпочати сеанс', + 'sign_in' => 'Ввійти', + 'register_new_account' => 'Зареєструвати новий обліковий запис', + 'forgot_my_password' => 'Я забув пароль', + 'problems_with_input' => 'Є деякі проблеми з введеними вами даними.', + 'reset_password' => 'Відновити ваш пароль', + 'button_reset_password' => 'Відновити пароль', + 'reset_button' => 'Скинути', + 'want_to_login' => 'Я хочу увійти', + 'login_page_title' => 'Вхід у Firefly III', + 'register_page_title' => 'Реєстрація у Firefly III', + 'forgot_pw_page_title' => 'Забув пароль для Firefly III', + 'reset_pw_page_title' => 'Скинути пароль для Firefly III', + 'cannot_reset_demo_user' => 'Ви не можете скинути пароль демо-користувача.', + 'no_att_demo_user' => 'Демо-користувач не може завантажувати вкладені файли.', + 'button_register' => 'Реєєстрація', + 'authorization' => 'Авторизація', + 'active_bills_only' => 'тільки активні рахунки', + 'active_bills_only_total' => 'всі активні виплати', + 'active_exp_bills_only' => 'тільки активні і очікувані рахунки для сплати', + 'active_exp_bills_only_total' => 'всі активні очікувані виплати', + 'per_period_sum_1D' => 'Очікувані щоденні витрати', + 'per_period_sum_1W' => 'Очікувані щотижневі витрати', + 'per_period_sum_1M' => 'Очікувані щомісячні витрати', + 'per_period_sum_3M' => 'Очікувані квартальні витрати', + 'per_period_sum_6M' => 'Очікувані піврічні витрати', + 'per_period_sum_1Y' => 'Очікувані річні витрати', + 'average_per_bill' => 'у середньому на рахунок', + 'expected_total' => 'очікується загалом', + 'reconciliation_account_name' => ':name погодження (:currency)', + 'saved' => 'Збережено', + 'advanced_options' => 'Додаткові налаштування', + 'advanced_options_explain' => 'Деякі сторінки у Firefly III мають додаткові опції, приховані за цією кнопкою. Ця сторінка не має тут нічого цікавого, але перевірте інші!', + 'here_be_dragons' => 'Тут живуть дракони', // Webhooks - 'webhooks' => 'Веб-гаки', - 'webhooks_breadcrumb' => 'Веб-хуки', - 'no_webhook_messages' => 'Повідомлення відсутні', - 'webhook_trigger_STORE_TRANSACTION' => 'Після створення операції', - 'webhook_trigger_UPDATE_TRANSACTION' => 'Після оновлення операції', - 'webhook_trigger_DESTROY_TRANSACTION' => 'Після видалення операції', - 'webhook_response_TRANSACTIONS' => 'Деталі операції', - 'webhook_response_ACCOUNTS' => 'Дані рахунку', - 'webhook_response_none_NONE' => 'Немає даних', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Дослідити', - 'create_new_webhook' => 'Створити новий веб-хук', - 'webhooks_create_breadcrumb' => 'Створити новий веб-хук', - 'webhook_trigger_form_help' => 'Укажіть, за якої події запускатиметься вебхук', - 'webhook_response_form_help' => 'Укажіть, що веб-хук має передати в URL-адресу.', - 'webhook_delivery_form_help' => 'У якому форматі веб-хук має надавати дані.', - 'webhook_active_form_help' => 'Веб-хук має бути активним, інакше його не буде викликано.', - 'stored_new_webhook' => 'Збережено новий веб-хук ":title"', - 'delete_webhook' => 'Видалити веб-хук', - 'deleted_webhook' => 'Видалено веб-хук', - 'edit_webhook' => 'Редагувати веб-хук ":title"', - 'updated_webhook' => 'Оновлено веб-хук ":title"', - 'edit_webhook_js' => 'Редагувати веб-хук "{title}"', - 'show_webhook' => 'Веб-хук ":title"', - 'webhook_was_triggered' => 'Вебхук був запущений в зазначеній транзакції. Будь ласка, зачекайте на отримання результатів.', - 'webhook_messages' => 'Повідомлення веб-хука', - 'view_message' => 'Переглянути повідомлення', - 'view_attempts' => 'Переглянути невдалі спроби', - 'message_content_title' => 'Вміст веб-хук повідомлення', - 'message_content_help' => 'Це вміст повідомлення, яке було надіслано (або зроблено спробу) за допомогою цього вебхука.', - 'attempt_content_title' => 'Спроби веб-хуку', - 'attempt_content_help' => 'Це всі невдалі спроби цього повідомлення вебхуку надіслати налаштовану URL-адресу. Через деякий час Firefly III припинить спроби.', - 'no_attempts' => 'Безуспішних спроб нема. Це добре!', - 'webhook_attempt_at' => 'Спроба {moment}', - 'logs' => 'Журнали', - 'response' => 'Відповідь', - 'visit_webhook_url' => 'Відвідайте URL-адресу веб-хуку', - 'reset_webhook_secret' => 'Відновити сікрет веб-хука', - 'webhook_stored_link' => 'Вебхук #{ID} ("{title}") був збережений.', - 'webhook_updated_link' => 'Вебхук #{ID} ("{title}") був оновлений.', + 'webhooks' => 'Веб-гаки', + 'webhooks_breadcrumb' => 'Веб-хуки', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'Повідомлення відсутні', + 'webhook_trigger_STORE_TRANSACTION' => 'Після створення операції', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Після оновлення операції', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Після видалення операції', + 'webhook_response_TRANSACTIONS' => 'Деталі операції', + 'webhook_response_ACCOUNTS' => 'Дані рахунку', + 'webhook_response_none_NONE' => 'Немає даних', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Дослідити', + 'create_new_webhook' => 'Створити новий веб-хук', + 'webhooks_create_breadcrumb' => 'Створити новий веб-хук', + 'webhook_trigger_form_help' => 'Укажіть, за якої події запускатиметься вебхук', + 'webhook_response_form_help' => 'Укажіть, що веб-хук має передати в URL-адресу.', + 'webhook_delivery_form_help' => 'У якому форматі веб-хук має надавати дані.', + 'webhook_active_form_help' => 'Веб-хук має бути активним, інакше його не буде викликано.', + 'stored_new_webhook' => 'Збережено новий веб-хук ":title"', + 'delete_webhook' => 'Видалити веб-хук', + 'deleted_webhook' => 'Видалено веб-хук', + 'edit_webhook' => 'Редагувати веб-хук ":title"', + 'updated_webhook' => 'Оновлено веб-хук ":title"', + 'edit_webhook_js' => 'Редагувати веб-хук "{title}"', + 'show_webhook' => 'Веб-хук ":title"', + 'webhook_was_triggered' => 'Вебхук був запущений в зазначеній транзакції. Будь ласка, зачекайте на отримання результатів.', + 'webhook_messages' => 'Повідомлення веб-хука', + 'view_message' => 'Переглянути повідомлення', + 'view_attempts' => 'Переглянути невдалі спроби', + 'message_content_title' => 'Вміст веб-хук повідомлення', + 'message_content_help' => 'Це вміст повідомлення, яке було надіслано (або зроблено спробу) за допомогою цього вебхука.', + 'attempt_content_title' => 'Спроби веб-хуку', + 'attempt_content_help' => 'Це всі невдалі спроби цього повідомлення вебхуку надіслати налаштовану URL-адресу. Через деякий час Firefly III припинить спроби.', + 'no_attempts' => 'Безуспішних спроб нема. Це добре!', + 'webhook_attempt_at' => 'Спроба {moment}', + 'logs' => 'Журнали', + 'response' => 'Відповідь', + 'visit_webhook_url' => 'Відвідайте URL-адресу веб-хуку', + 'reset_webhook_secret' => 'Відновити сікрет веб-хука', + 'webhook_stored_link' => 'Вебхук #{ID} ("{title}") був збережений.', + 'webhook_updated_link' => 'Вебхук #{ID} ("{title}") був оновлений.', // API access - 'authorization_request' => 'Firefly III v:version запит авторизації', - 'authorization_request_intro' => 'Додаток ":client" вимагає дозволу на доступ до фінансового управління. Бажаєте авторизувати :client для доступу до цих записів?', - 'authorization_request_site' => 'Ви будете перенаправлені на :url, куди згодом надасться доступ до даних Firefly III.', - 'authorization_request_invalid' => 'Цей запит доступу є недійсним. Будь ласка, ніколи не переходіть за цим посиланням знову.', - 'scopes_will_be_able' => 'Цей додаток матиме змогу:', - 'button_authorize' => 'Авторизувати', - 'none_in_select_list' => '(немає)', - 'no_piggy_bank' => '(немає скарбнички)', - 'name_in_currency' => ':name в :currency', - 'paid_in_currency' => 'Сплачено в :currency', - 'unpaid_in_currency' => 'Неоплачено в :currency', - 'is_alpha_warning' => 'Ви використовуєте ALPHA - версію. Можуть зустрічатись баги та недопрацювання.', - 'is_beta_warning' => 'Ви використовуєте BETA - версію. Можуть зустрічатись баги та недопрацювання.', - 'all_destination_accounts' => 'Рахунки-одержувачі', - 'all_source_accounts' => 'Вихідні рахунки', - 'back_to_index' => 'Назад до змісту', - 'cant_logout_guard' => 'Firefly III не може вийти з вашого облікового запису.', - 'internal_reference' => 'Внутрішнє посилання', + 'authorization_request' => 'Firefly III v:version запит авторизації', + 'authorization_request_intro' => 'Додаток ":client" вимагає дозволу на доступ до фінансового управління. Бажаєте авторизувати :client для доступу до цих записів?', + 'authorization_request_site' => 'Ви будете перенаправлені на :url, куди згодом надасться доступ до даних Firefly III.', + 'authorization_request_invalid' => 'Цей запит доступу є недійсним. Будь ласка, ніколи не переходіть за цим посиланням знову.', + 'scopes_will_be_able' => 'Цей додаток матиме змогу:', + 'button_authorize' => 'Авторизувати', + 'none_in_select_list' => '(немає)', + 'no_piggy_bank' => '(немає скарбнички)', + 'name_in_currency' => ':name в :currency', + 'paid_in_currency' => 'Сплачено в :currency', + 'unpaid_in_currency' => 'Неоплачено в :currency', + 'is_alpha_warning' => 'Ви використовуєте ALPHA - версію. Можуть зустрічатись баги та недопрацювання.', + 'is_beta_warning' => 'Ви використовуєте BETA - версію. Можуть зустрічатись баги та недопрацювання.', + 'all_destination_accounts' => 'Рахунки-одержувачі', + 'all_source_accounts' => 'Вихідні рахунки', + 'back_to_index' => 'Назад до змісту', + 'cant_logout_guard' => 'Firefly III не може вийти з вашого облікового запису.', + 'internal_reference' => 'Внутрішнє посилання', // check for updates: - 'update_check_title' => 'Перевірити оновлення', - 'admin_update_check_title' => 'Автоматично перевіряти оновлення', - 'admin_update_check_explain' => 'Firefly III може автоматично перевіряти наявність оновлень. Коли ви вмикаєте цей параметр, програма зв\'яжеться з сервером, щоб перевірити наявність нової версії Firefly III. Коли це станеться, ви отримаєте сповіщення. Також Ви можете перевірити наявність оновлення за допомогою кнопки справа. Будь ласка, зазначте нижче, чи хочете Ви щоб Firefly III перевіряв наявність оновлень.', - 'check_for_updates_permission' => 'Firefly III може перевіряти наявність оновлень, але для цього потрібен Ваш дозвіл. Будь ласка, перейдіть у розділ управління, щоб увімкнути цю можливість.', - 'updates_ask_me_later' => 'Запитати пізніше', - 'updates_do_not_check' => 'Не перевіряти наявність оновлень', - 'updates_enable_check' => 'Увімкнути перевірку оновлень', - 'admin_update_check_now_title' => 'Перевірити наявність оновлень', - 'admin_update_check_now_explain' => 'Якщо ви натиснете кнопку, Firefly III перевірить, чи ваша поточна версія остання.', - 'check_for_updates_button' => 'Перевірити зараз!', - 'update_new_version_alert' => 'Доступна нова версія Firefly III. Ви працюєте з :your_version, остання версія :new_version яка була випущена на :date.', - 'update_version_beta' => 'Це бета-версія. Ви можете зіткнутися з проблемами.', - 'update_version_alpha' => 'Це альфа-версія. Може містити баги та недоліки.', - 'update_current_version_alert' => 'Ви працюєте в найновішій версії :version.', - 'update_newer_version_alert' => 'Ви працюєте з :your_version версією, яка є новішою за останній реліз, :new_version.', - 'update_check_error' => 'Сталася помилка під час перевірки наявності оновлень: :error', - 'unknown_error' => 'Невідома помилка. Вибачте.', - 'just_new_release' => 'Доступна нова версія! Версія :version була випущена :date. Ця версія дуже свіжа. Почекайте кілька днів щоб нова версія стабілізувалась.', - 'disabled_but_check' => 'Ви відключили перевірку оновлення. Тому не забудьте перевіряти наявність оновлень особисто час від часу. Дякуємо!', - 'admin_update_channel_title' => 'Канал оновлень', - 'admin_update_channel_explain' => 'Firefly III має три "канали" оновлення, які визначають як швидко ви можете отримати нові функції. Використовуйте канал "бета", якщо ви любителі пригоди та "альфа", коли вам подобається ризикувати.', - 'update_channel_stable' => 'Стабільний. Все працює, як і очікувалося.', - 'update_channel_beta' => 'Бета. Нові функції, але дані можуть бути зіпсовані.', - 'update_channel_alpha' => 'Альфа. Ми додаємо нові функції, але вони працюють на милицях.', + 'update_check_title' => 'Перевірити оновлення', + 'admin_update_check_title' => 'Автоматично перевіряти оновлення', + 'admin_update_check_explain' => 'Firefly III може автоматично перевіряти наявність оновлень. Коли ви вмикаєте цей параметр, програма зв\'яжеться з сервером, щоб перевірити наявність нової версії Firefly III. Коли це станеться, ви отримаєте сповіщення. Також Ви можете перевірити наявність оновлення за допомогою кнопки справа. Будь ласка, зазначте нижче, чи хочете Ви щоб Firefly III перевіряв наявність оновлень.', + 'check_for_updates_permission' => 'Firefly III може перевіряти наявність оновлень, але для цього потрібен Ваш дозвіл. Будь ласка, перейдіть у розділ управління, щоб увімкнути цю можливість.', + 'updates_ask_me_later' => 'Запитати пізніше', + 'updates_do_not_check' => 'Не перевіряти наявність оновлень', + 'updates_enable_check' => 'Увімкнути перевірку оновлень', + 'admin_update_check_now_title' => 'Перевірити наявність оновлень', + 'admin_update_check_now_explain' => 'Якщо ви натиснете кнопку, Firefly III перевірить, чи ваша поточна версія остання.', + 'check_for_updates_button' => 'Перевірити зараз!', + 'update_new_version_alert' => 'Доступна нова версія Firefly III. Ви працюєте з :your_version, остання версія :new_version яка була випущена на :date.', + 'update_version_beta' => 'Це бета-версія. Ви можете зіткнутися з проблемами.', + 'update_version_alpha' => 'Це альфа-версія. Може містити баги та недоліки.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Ви працюєте в найновішій версії :version.', + 'update_newer_version_alert' => 'Ви працюєте з :your_version версією, яка є новішою за останній реліз, :new_version.', + 'update_check_error' => 'Сталася помилка під час перевірки наявності оновлень: :error', + 'unknown_error' => 'Невідома помилка. Вибачте.', + 'disabled_but_check' => 'Ви відключили перевірку оновлення. Тому не забудьте перевіряти наявність оновлень особисто час від часу. Дякуємо!', + 'admin_update_channel_title' => 'Канал оновлень', + 'admin_update_channel_explain' => 'Firefly III має три "канали" оновлення, які визначають як швидко ви можете отримати нові функції. Використовуйте канал "бета", якщо ви любителі пригоди та "альфа", коли вам подобається ризикувати.', + 'update_channel_stable' => 'Стабільний. Все працює, як і очікувалося.', + 'update_channel_beta' => 'Бета. Нові функції, але дані можуть бути зіпсовані.', + 'update_channel_alpha' => 'Альфа. Ми додаємо нові функції, але вони працюють на милицях.', // search - 'search' => 'Пошук', - 'search_query' => 'Запит', - 'search_found_transactions' => 'Firefly III знайшов :count транзакцію за :time секунд.|Firefly III знайшов :count транзакцій за :time секунд.', - 'search_found_more_transactions' => 'Firefly III знайшов більше, ніж :count транзакцій за :time секунд.', - 'search_for_query' => 'Firefly III шукає транзакції з усіма цими словами в них: :query', - 'invalid_operators_list' => 'Ці параметри пошуку є недійсними і були проігноровані.', + 'search' => 'Пошук', + 'search_query' => 'Запит', + 'search_found_transactions' => 'Firefly III знайшов :count транзакцію за :time секунд.|Firefly III знайшов :count транзакцій за :time секунд.', + 'search_found_more_transactions' => 'Firefly III знайшов більше, ніж :count транзакцій за :time секунд.', + 'search_for_query' => 'Firefly III шукає транзакції з усіма цими словами в них: :query', + 'invalid_operators_list' => 'Ці параметри пошуку є недійсними і були проігноровані.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => 'Дата операції ":value"', 'search_modifier_not_date_on' => 'Дата операції не ":value"', 'search_modifier_reconciled' => 'Операція узгоджена', @@ -447,8 +448,8 @@ return [ 'search_modifier_not_destination_account_id' => 'Ідентифікатор цільового рахунку не :value', 'search_modifier_destination_is_cash' => 'Рахунок призначення – "(cash)" рахунок', 'search_modifier_not_destination_is_cash' => 'Рахунок призначення – не "(cash)" рахунок', - 'search_modifier_source_is_cash' => 'Джерело рахунка - "(cash)" ​​рахунок', - 'search_modifier_not_source_is_cash' => 'Джерелом рахунка - не "(cash)" ​​рахунок', + 'search_modifier_source_is_cash' => "Джерело рахунка - \"(cash)\" \u{200b}\u{200b}рахунок", + 'search_modifier_not_source_is_cash' => "Джерелом рахунка - не \"(cash)\" \u{200b}\u{200b}рахунок", 'search_modifier_destination_account_nr_is' => 'Номер рахунку-одержувача (IBAN) дорівнює ":value"', 'search_modifier_not_destination_account_nr_is' => 'Номер цільового рахунку (IBAN) - ":value"', 'search_modifier_destination_account_nr_contains' => 'Номер рахунку-одержувача (IBAN) містить ":value"', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Тип транзакції дорівнює ":value"', 'search_modifier_not_transaction_type' => 'Тип операції не ":value"', 'search_modifier_tag_is' => 'Мітка дорівнює ":value"', + 'search_modifier_tag_contains' => 'Мітка містить ":value"', + 'search_modifier_not_tag_contains' => 'Мітка не містить ":value"', + 'search_modifier_tag_ends' => 'Мітка закінчується на ":value"', + 'search_modifier_tag_starts' => 'Мітка починається з ":value"', 'search_modifier_not_tag_is' => 'Жодної мітки зі значенням ":value"', 'search_modifier_date_on_year' => 'Рік операції ":value"', 'search_modifier_not_date_on_year' => 'Операція не в ":value" році', @@ -482,7 +487,6 @@ return [ 'search_modifier_date_after_month' => 'Дата операції до чи після місяця ":value"', 'search_modifier_date_after_day' => 'Дата операції до чи після дня ":value"', - // new 'search_modifier_tag_is_not' => 'Помітка ":value"', 'search_modifier_not_tag_is_not' => 'Мітка ":value"', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => 'Створити нове правило з пошукового запиту', 'rule_from_search_words' => 'Рушію правил важко обробити ":string". Пропоноване правило, яке відповідає вашому запиту, може дати різні результати. Будь ласка, уважно перевіряйте умови.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Наступні модифікатори застосовуються до пошуку:', 'general_search_error' => 'Під час пошуку виникла помилка. Будь-ласка, перевірте файл журналу для отримання додаткової інформації.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Не', 'cannot_fire_inactive_rules' => 'Ви не можете виконати неактивні правила.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Правила', 'rule_name' => 'Назва правила', 'rule_triggers' => 'Виконується правило коли', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Коли транзакція оновлена', 'rule_trigger_user_action' => 'Дія користувача ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Ім\'я вихідного рахунку починається з ": value"..', 'rule_trigger_source_account_starts' => 'Назва джерела рахунку починається з ":trigger_value"', @@ -832,10 +836,10 @@ return [ 'rule_trigger_destination_account_id' => 'Ідентифікатор рахунку призначення є саме :trigger_value', 'rule_trigger_account_is_cash_choice' => 'Будь-який рахунок є готівковим', 'rule_trigger_account_is_cash' => 'Будь-який рахунок є готівковим', - 'rule_trigger_source_is_cash_choice' => 'Джерелом рахунком є ​​(готівковий) рахунок', - 'rule_trigger_source_is_cash' => 'Джерелом рахунком є ​​(готівковий) рахунок', - 'rule_trigger_destination_is_cash_choice' => 'Рахунком призначення є ​​(готівковий) рахунок', - 'rule_trigger_destination_is_cash' => 'Рахунком призначення є ​​(готівковий) рахунок', + 'rule_trigger_source_is_cash_choice' => "Джерелом рахунком є \u{200b}\u{200b}(готівковий) рахунок", + 'rule_trigger_source_is_cash' => "Джерелом рахунком є \u{200b}\u{200b}(готівковий) рахунок", + 'rule_trigger_destination_is_cash_choice' => "Рахунком призначення є \u{200b}\u{200b}(готівковий) рахунок", + 'rule_trigger_destination_is_cash' => "Рахунком призначення є \u{200b}\u{200b}(готівковий) рахунок", 'rule_trigger_source_account_nr_starts_choice' => 'Номер джерела рахунку / IBAN починається з..', 'rule_trigger_source_account_nr_starts' => 'Номер джерела рахунку / IBAN починається з ":trigger_value"', 'rule_trigger_source_account_nr_ends_choice' => 'Номер рахунку призначення / IBAN закінчується на..', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Бюджет ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Будь-яка мітка..', 'rule_trigger_tag_is' => 'Будь-яка мітка ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Валюти транзакцій є..', 'rule_trigger_currency_is' => 'Валюта цієї транзакції ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Валюта транзакції є..', @@ -945,7 +955,7 @@ return [ 'rule_trigger_id_choice' => 'Ідентифікатор операції..', 'rule_trigger_id' => 'Ідентифікатор операції: ":trigger_value"', 'rule_trigger_sepa_ct_is_choice' => 'SEPA CT дорівнює..', - 'rule_trigger_sepa_ct_is' => 'SEPA CT is ":trigger_value"', + 'rule_trigger_sepa_ct_is' => 'SEPA CT це ":trigger_value"', // new values: 'rule_trigger_user_action_choice' => 'Дія користувача: ":trigger_value"', @@ -1119,14 +1129,14 @@ return [ 'rule_trigger_not_account_nr_contains' => 'Жодного рахунку з номером / IBAN який містить ":trigger_value"', 'rule_trigger_not_account_nr_ends' => 'Жодного рахунку з номером / IBAN який закінчується ":trigger_value"', 'rule_trigger_not_account_nr_starts' => 'Жодного рахунку з номером / IBAN який починається ":trigger_value"', - 'rule_trigger_not_category_is' => 'Category is not ":trigger_value"', - 'rule_trigger_not_category_contains' => 'Category does not contain ":trigger_value"', - 'rule_trigger_not_category_ends' => 'Category does not end on ":trigger_value"', - 'rule_trigger_not_category_starts' => 'Category does not start with ":trigger_value"', - 'rule_trigger_not_budget_is' => 'Budget is not ":trigger_value"', - 'rule_trigger_not_budget_contains' => 'Budget does not contain ":trigger_value"', - 'rule_trigger_not_budget_ends' => 'Budget does not end on ":trigger_value"', - 'rule_trigger_not_budget_starts' => 'Budget does not start with ":trigger_value"', + 'rule_trigger_not_category_is' => 'Категорія не є ":trigger_value"', + 'rule_trigger_not_category_contains' => 'Категорія не містить ":trigger_value"', + 'rule_trigger_not_category_ends' => 'Категорія не закінчується на ":trigger_value"', + 'rule_trigger_not_category_starts' => 'Категорія не починається з ":trigger_value"', + 'rule_trigger_not_budget_is' => 'Бюджет не ":trigger_value"', + 'rule_trigger_not_budget_contains' => 'Бюджет не включає ":trigger_value"', + 'rule_trigger_not_budget_ends' => 'Бюджет не закінчується на ":trigger_value"', + 'rule_trigger_not_budget_starts' => 'Бюджет не починається з ":trigger_value"', 'rule_trigger_not_bill_is' => 'Рахунок до сплати не ":trigger_value"', 'rule_trigger_not_bill_contains' => 'Рахунок до сплати не містить ":trigger_value"', 'rule_trigger_not_bill_ends' => 'Рахунок до сплати не закінчується ":trigger_value"', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Операція не існує', 'rule_trigger_not_has_attachments' => 'Операція не має вкладень', 'rule_trigger_not_has_any_category' => 'Операція не має категорії', - 'rule_trigger_not_has_any_budget' => 'Операція не має категорії', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Операція не має рахунків до сплати', 'rule_trigger_not_has_any_tag' => 'Операція не має тегів', 'rule_trigger_not_any_notes' => 'Операція не містить приміток', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Рахунком призначення не є готівковий рахунок', 'rule_trigger_not_account_is_cash' => 'Жоден рахунок не є готівковим', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'ВИДАЛИТИ операцію(!)', @@ -1243,12 +1252,12 @@ return [ 'rule_action_remove_tag_choice' => 'Видалити тег..', 'rule_action_remove_all_tags_choice' => 'Видалити усі теги', 'rule_action_set_description_choice' => 'Встановити опис на..', - 'rule_action_update_piggy_choice' => 'Add / remove transaction amount in piggy bank ..', + 'rule_action_update_piggy_choice' => 'Додати / видалити суму транзакції в скарбничці ..', 'rule_action_update_piggy' => 'Додати/видалити суму транзакції в скарбничці ":action_value"', - 'rule_action_append_description_choice' => 'Append description with ..', - 'rule_action_prepend_description_choice' => 'Prepend description with ..', - 'rule_action_set_source_account_choice' => 'Set source account to ..', - 'rule_action_set_source_account' => 'Set source account to :action_value', + 'rule_action_append_description_choice' => 'Доповнити опис з ..', + 'rule_action_prepend_description_choice' => 'Перед описом додати з ..', + 'rule_action_set_source_account_choice' => 'Встановити вихідний обліковий запис на ..', + 'rule_action_set_source_account' => 'Встановити вихідний обліковий запис на :action_value', 'rule_action_set_destination_account_choice' => 'Вибрати цільовий рахунок..', 'rule_action_set_destination_account' => 'Вибрати цільовий рахунок :action_value', 'rule_action_append_notes_choice' => 'Додайте нотатки за допомогою ..', @@ -1260,8 +1269,8 @@ return [ 'rule_action_set_notes_choice' => 'Виберіть нотатки до ..', 'rule_action_link_to_bill_choice' => 'Посилання на рахунок до сплати ..', 'rule_action_link_to_bill' => 'Посилання на рахунок до сплати ":action_value"', - 'rule_action_switch_accounts_choice' => 'Switch source and destination accounts (transfers only!)', - 'rule_action_switch_accounts' => 'Switch source and destination', + 'rule_action_switch_accounts_choice' => 'Поміняти місцями рахунки джерела та призначення (лише перекази!)', + 'rule_action_switch_accounts' => 'Поміняти місцями рахунки джерела та призначення', 'rule_action_set_notes' => 'Вказати примітки до ":action_value"', 'rule_action_convert_deposit_choice' => 'Перетворити операцію в депозит', 'rule_action_convert_deposit' => 'Перетворити операцію в депозит з ":action_value"', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Додайте примітки до опису', 'rule_action_move_descr_to_notes' => 'Замініть примітки в описі', 'rule_action_move_notes_to_descr' => 'Замініть примітки в описі', + 'rule_action_set_destination_to_cash_choice' => 'Налаштувати цільовий рахунок як (готівковий)', + 'rule_action_set_source_to_cash_choice' => 'Налаштувати вихідний рахунок як (готівковий)', 'rulegroup_for_bills_title' => 'Група правил для рахунків до сплати', 'rulegroup_for_bills_description' => 'Спеціальна група правил для всіх правил, які стосуються рахунків до сплати.', 'rule_for_bill_title' => 'Автоматично створене правило для рахунку до сплати ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Правило для рахунку до сплати ":name"', 'new_rule_for_bill_description' => 'Це правило позначає операції для рахунку до сплати ":name".', - 'new_rule_for_journal_title' => 'Правило на основі операції ":description"', - 'new_rule_for_journal_description' => 'Це правило базується на операції ":description". Він відповідатиме операціям, які абсолютно однакові.', + 'new_rule_for_journal_title' => 'Правило на основі операції ":description"', + 'new_rule_for_journal_description' => 'Це правило базується на операції ":description". Він відповідатиме операціям, які абсолютно однакові.', // tags - 'store_new_tag' => 'Зберегти новий тег', - 'update_tag' => 'Оновити тег', - 'no_location_set' => 'Місцезаходження не вказано.', - 'meta_data' => 'Мета-дані', - 'location' => 'Місцерозташування', - 'without_date' => 'Без дати', - 'result' => 'Результат', - 'sums_apply_to_range' => 'Усі суми стосуються вибраного діапазону', - 'mapbox_api_key' => 'Щоб використовувати карту, отримайте ключ API від Mapbox. Відкрийте файл .env і додайте цей код після MAPBOX_API_KEY=.', - 'press_object_location' => 'Клацніть правою кнопкою миші або натисніть і утримуйте, щоб установити розташування об’єкта.', - 'clear_location' => 'Видалити розташування', - 'delete_all_selected_tags' => 'Видалити всі вибрані теги', - 'select_tags_to_delete' => 'Не забудьте вибрати деякі теги.', - 'deleted_x_tags' => 'Видалено тег :count.|Видалено теги :count.', - 'create_rule_from_transaction' => 'Створення правила на основі операції', - 'create_recurring_from_transaction' => 'Створення повторюваної операції на основі операції', - + 'store_new_tag' => 'Зберегти новий тег', + 'update_tag' => 'Оновити тег', + 'no_location_set' => 'Місцезаходження не вказано.', + 'meta_data' => 'Мета-дані', + 'location' => 'Місцерозташування', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Без дати', + 'result' => 'Результат', + 'sums_apply_to_range' => 'Усі суми стосуються вибраного діапазону', + 'mapbox_api_key' => 'Щоб використовувати карту, отримайте ключ API від Mapbox. Відкрийте файл .env і додайте цей код після MAPBOX_API_KEY=.', + 'press_object_location' => 'Клацніть правою кнопкою миші або натисніть і утримуйте, щоб установити розташування об’єкта.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Видалити розташування', + 'delete_all_selected_tags' => 'Видалити всі вибрані теги', + 'select_tags_to_delete' => 'Не забудьте вибрати деякі теги.', + 'deleted_x_tags' => 'Видалено тег :count.|Видалено теги :count.', + 'create_rule_from_transaction' => 'Створення правила на основі операції', + 'create_recurring_from_transaction' => 'Створення повторюваної операції на основі операції', // preferences - 'dark_mode_option_browser' => 'Дозвольте браузеру вирішити', - 'dark_mode_option_light' => 'Завжди світла', - 'dark_mode_option_dark' => 'Завжди темна', - 'equal_to_language' => '(прирівнюється до мови)', - 'dark_mode_preference' => 'Темний режим', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Головна сторінка рахунків', - 'pref_home_screen_accounts_help' => 'Which accounts should be displayed on the home page?', - 'pref_view_range' => 'Діапазон перегляду', - 'pref_view_range_help' => 'Some charts are automatically grouped in periods. Your budgets will also be grouped in periods. What period would you prefer?', - 'pref_1D' => 'Один день', - 'pref_1W' => 'Один тиждень', - 'pref_1M' => 'Один місяць', - 'pref_3M' => 'Три місяці (квартал)', - 'pref_6M' => 'Шість місяців', - 'pref_1Y' => 'Один рік', - 'pref_last365' => 'Минулий рік', - 'pref_last90' => 'Останні 90 днів', - 'pref_last30' => 'Останні 30 днів', - 'pref_last7' => 'Останні 7 днів', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Мови', - 'pref_locale' => 'Налаштування локалі', - 'pref_languages_help' => 'Firefly III підтримує декілька мов. Якій ви віддаєте перевагу?', - 'pref_locale_help' => 'Firefly III дозволяє встановлювати інші локальні налаштування, такі як валюти, числа та дати. Записи в цьому списку можуть не підтримуватися вашою системою. Firefly III не має правильних параметрів дати для кожної локалі; зв\'яжіться зі мною для вдосконалення.', - 'pref_locale_no_demo' => 'Ця функція не працюватиме для демо-користувача.', - 'pref_custom_fiscal_year' => 'Налаштування фінансового року', - 'pref_custom_fiscal_year_label' => 'Увiмкнено', - 'pref_custom_fiscal_year_help' => 'У країнах, які використовують фінансовий рік, крім 1 січня до 31 грудня, ви можете увімкнути це і вказати початкові/кінцеві дні фіскального року', - 'pref_fiscal_year_start_label' => 'Дата початку фіскального року', - 'pref_two_factor_auth' => 'Двоетапна перевірка', - 'pref_two_factor_auth_help' => 'При включенні двохетапної перевірки (також відомої як двофакторна автентифікація), ви додаєте додатковий шар безпеки для вашого облікового запису. Ви здійснюєте вхід за допомогою того, що знаєте (свій пароль) і того, що ви маєте (код підтвердження). Коди для підтвердження генерується додатком на вашому телефоні, таким як Authy або Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Увімкнути двоетапну перевірку', - 'pref_two_factor_auth_disabled' => 'Код двоетапної перевірки видалено та вимкнуто', - 'pref_two_factor_auth_remove_it' => 'Не забудьте видалити обліковий запис з вашого додатка для автентифікації!', - 'pref_two_factor_auth_code' => 'Підтвердити код', - 'pref_two_factor_auth_code_help' => 'Скануйте QR-код за допомогою додатку на вашому телефоні, наприклад, Authy чи Google Authenticator і введіть згенерований код.', - 'pref_two_factor_auth_reset_code' => 'Скинути код підтвердження', - 'pref_two_factor_auth_disable_2fa' => 'Вимкнути 2FA', - '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', - '2fa_backup_codes' => 'Збережіть ці резервні коди доступу на випадок втрати вашого пристрій.', - '2fa_already_enabled' => 'Двоетапну перевірку вже увімкнено.', - 'wrong_mfa_code' => 'Цей MFA код не дійсний.', - 'pref_save_settings' => 'Зберегти налаштування', - 'saved_preferences' => 'Налаштування збережено!', - 'preferences_general' => 'Загальні', - 'preferences_frontpage' => 'Головний екран', - 'preferences_security' => 'Безпека', - 'preferences_layout' => 'Зовнішній вигляд', - 'preferences_notifications' => 'Сповіщення', - 'pref_home_show_deposits' => 'Показувати надходження на головному екрані', - 'pref_home_show_deposits_info' => 'The home screen already shows your expense accounts. Should it also show your revenue accounts?', - 'pref_home_do_show_deposits' => 'Так, показати їх', - 'successful_count' => 'of which :count successful', - 'list_page_size_title' => 'Розмір сторінки', - 'list_page_size_help' => 'Any list of things (accounts, transactions, etc) shows at most this many per page.', - 'list_page_size_label' => 'Розмір сторінки', - 'between_dates' => '(:start і :end)', - 'pref_optional_fields_transaction' => 'Необов\'язкові поля для операцій', - 'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.', - 'optional_tj_date_fields' => 'Поле дати', - 'optional_tj_other_fields' => 'Інші поля', - 'optional_tj_attachment_fields' => 'Поля вкладення', - 'pref_optional_tj_interest_date' => 'Дата нарахування відсотку', - 'pref_optional_tj_book_date' => 'Дата обліку', - 'pref_optional_tj_process_date' => 'Дата опрацювання', - 'pref_optional_tj_due_date' => 'Дата закінчення', - 'pref_optional_tj_payment_date' => 'Дата оплати', - 'pref_optional_tj_invoice_date' => 'Дата рахунку', - 'pref_optional_tj_internal_reference' => 'Внутрішнє посилання', - 'pref_optional_tj_notes' => 'Нотатки', - 'pref_optional_tj_attachments' => 'Вкладення', - 'pref_optional_tj_external_url' => 'Зовнішній URL', - 'pref_optional_tj_location' => 'Розташування', - 'pref_optional_tj_links' => 'Transaction links', - 'optional_field_meta_dates' => 'Дати', - 'optional_field_meta_business' => 'Business', - 'optional_field_attachments' => 'Вкладення', - 'optional_field_meta_data' => 'Optional meta data', - 'external_url' => 'Зовнішній URL', - 'pref_notification_bill_reminder' => 'Нагадування про термін дії рахунків', - 'pref_notification_new_access_token' => 'Попереджати, коли створюється новий токен доступу до API', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Сповіщення', - 'pref_notifications_help' => 'Укажіть, чи хотіли б ви отримувати ці сповіщення. Деякі сповіщення можуть містити конфіденційну фінансову інформацію.', - 'slack_webhook_url' => 'URL-адреса Slack Webhook', - 'slack_webhook_url_help' => 'Якщо ви хочете, щоб Firefly III повідомляв вас за допомогою Slack, введіть тут URL-адресу вебхука. В іншому випадку залиште поле порожнім. Якщо ви адміністратор, вам також потрібно встановити цю URL-адресу в панелі адміністрування.', - 'slack_url_label' => 'URL-адреса Slack "вхідного вебхуку"', + 'dark_mode_option_browser' => 'Дозвольте браузеру вирішити', + 'dark_mode_option_light' => 'Завжди світла', + 'dark_mode_option_dark' => 'Завжди темна', + 'equal_to_language' => '(прирівнюється до мови)', + 'dark_mode_preference' => 'Темний режим', + 'dark_mode_preference_help' => 'Скажіть Firefly III, коли використовувати темний режим.', + 'pref_home_screen_accounts' => 'Головна сторінка рахунків', + 'pref_home_screen_accounts_help' => 'Які рахунки слід відображати на головній сторінці?', + 'pref_view_range' => 'Діапазон перегляду', + 'pref_view_range_help' => 'Деякі діаграми автоматично згруповані в періоди. Ваші бюджети також будуть згруповані за періодами. Якому періоду ви віддаєте перевагу?', + 'pref_1D' => 'Один день', + 'pref_1W' => 'Один тиждень', + 'pref_1M' => 'Один місяць', + 'pref_3M' => 'Три місяці (квартал)', + 'pref_6M' => 'Шість місяців', + 'pref_1Y' => 'Один рік', + 'pref_last365' => 'Минулий рік', + 'pref_last90' => 'Останні 90 днів', + 'pref_last30' => 'Останні 30 днів', + 'pref_last7' => 'Останні 7 днів', + 'pref_YTD' => 'Рік до дати', + 'pref_QTD' => 'Квартал до дати', + 'pref_MTD' => 'Місяць до дати', + 'pref_languages' => 'Мови', + 'pref_locale' => 'Налаштування локалі', + 'pref_languages_help' => 'Firefly III підтримує декілька мов. Якій ви віддаєте перевагу?', + 'pref_locale_help' => 'Firefly III дозволяє встановлювати інші локальні налаштування, такі як валюти, числа та дати. Записи в цьому списку можуть не підтримуватися вашою системою. Firefly III не має правильних параметрів дати для кожної локалі; зв\'яжіться зі мною для вдосконалення.', + 'pref_locale_no_demo' => 'Ця функція не працюватиме для демо-користувача.', + 'pref_custom_fiscal_year' => 'Налаштування фінансового року', + 'pref_custom_fiscal_year_label' => 'Увiмкнено', + 'pref_custom_fiscal_year_help' => 'У країнах, які використовують фінансовий рік, крім 1 січня до 31 грудня, ви можете увімкнути це і вказати початкові/кінцеві дні фіскального року', + 'pref_fiscal_year_start_label' => 'Дата початку фіскального року', + 'pref_two_factor_auth' => 'Двоетапна перевірка', + 'pref_two_factor_auth_help' => 'При включенні двохетапної перевірки (також відомої як двофакторна автентифікація), ви додаєте додатковий шар безпеки для вашого облікового запису. Ви здійснюєте вхід за допомогою того, що знаєте (свій пароль) і того, що ви маєте (код підтвердження). Коди для підтвердження генерується додатком на вашому телефоні, таким як Authy або Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Увімкнути двоетапну перевірку', + 'pref_two_factor_auth_disabled' => 'Код двоетапної перевірки видалено та вимкнуто', + 'pref_two_factor_auth_remove_it' => 'Не забудьте видалити обліковий запис з вашого додатка для автентифікації!', + 'pref_two_factor_auth_code' => 'Підтвердити код', + 'pref_two_factor_auth_code_help' => 'Скануйте QR-код за допомогою додатку на вашому телефоні, наприклад, Authy чи Google Authenticator і введіть згенерований код.', + 'pref_two_factor_auth_reset_code' => 'Скинути код підтвердження', + 'pref_two_factor_auth_disable_2fa' => 'Вимкнути 2FA', + '2fa_use_secret_instead' => 'Якщо ви не можете відсканувати QR-код, використовуйте секретний код: :secret.', + '2fa_backup_codes' => 'Збережіть ці резервні коди доступу на випадок втрати вашого пристрій.', + '2fa_already_enabled' => 'Двоетапну перевірку вже увімкнено.', + 'wrong_mfa_code' => 'Цей MFA код не дійсний.', + 'pref_save_settings' => 'Зберегти налаштування', + 'saved_preferences' => 'Налаштування збережено!', + 'preferences_general' => 'Загальні', + 'preferences_frontpage' => 'Головний екран', + 'preferences_security' => 'Безпека', + 'preferences_layout' => 'Зовнішній вигляд', + 'preferences_notifications' => 'Сповіщення', + 'pref_home_show_deposits' => 'Показувати надходження на головному екрані', + 'pref_home_show_deposits_info' => 'На головному екрані тепер відображаються ваші рахунки витрат. Бажаєте також переглянути рахунки доходів?', + 'pref_home_do_show_deposits' => 'Так, показати їх', + 'successful_count' => 'з яких :count успішно завершено', + 'list_page_size_title' => 'Розмір сторінки', + 'list_page_size_help' => 'Будь-який список речей (рахунки, транзакції тощо) показує максимум стільки на сторінці.', + 'list_page_size_label' => 'Розмір сторінки', + 'between_dates' => '(:start і :end)', + 'pref_optional_fields_transaction' => 'Необов\'язкові поля для операцій', + 'pref_optional_fields_transaction_help' => 'За замовчуванням не всі поля активні під час створення нової транзакції (щоб уникнути безладу). Нижче ви можете включити ці поля, якщо вважаєте, що вони можуть бути корисними для вас. Звичайно, будь-яке поле, що відключене, але вже заповнене, буде видимим незалежно від налаштувань.', + 'optional_tj_date_fields' => 'Поле дати', + 'optional_tj_other_fields' => 'Інші поля', + 'optional_tj_attachment_fields' => 'Поля вкладення', + 'pref_optional_tj_interest_date' => 'Дата нарахування відсотку', + 'pref_optional_tj_book_date' => 'Дата обліку', + 'pref_optional_tj_process_date' => 'Дата опрацювання', + 'pref_optional_tj_due_date' => 'Дата закінчення', + 'pref_optional_tj_payment_date' => 'Дата оплати', + 'pref_optional_tj_invoice_date' => 'Дата рахунку', + 'pref_optional_tj_internal_reference' => 'Внутрішнє посилання', + 'pref_optional_tj_notes' => 'Нотатки', + 'pref_optional_tj_attachments' => 'Вкладення', + 'pref_optional_tj_external_url' => 'Зовнішній URL', + 'pref_optional_tj_location' => 'Розташування', + 'pref_optional_tj_links' => 'Пов\'язані транзакції', + 'optional_field_meta_dates' => 'Дати', + 'optional_field_meta_business' => 'Бізнес', + 'optional_field_attachments' => 'Вкладення', + 'optional_field_meta_data' => 'Додаткові метадані', + 'external_url' => 'Зовнішній URL', + 'pref_notification_bill_reminder' => 'Нагадування про термін дії рахунків', + 'pref_notification_new_access_token' => 'Попереджати, коли створюється новий токен доступу до API', + 'pref_notification_transaction_creation' => 'Попереджати про автоматичне створення транзакції', + 'pref_notification_user_login' => 'Попереджати, коли ви входите з нового місця', + 'pref_notification_rule_action_failures' => 'Попереджати, коли правило не виконується (лише Slack або Discord)', + 'pref_notifications' => 'Сповіщення', + 'pref_notifications_help' => 'Укажіть, чи хотіли б ви отримувати ці сповіщення. Деякі сповіщення можуть містити конфіденційну фінансову інформацію.', + 'slack_webhook_url' => 'URL-адреса Slack Webhook', + 'slack_webhook_url_help' => 'Якщо ви хочете, щоб Firefly III повідомляв вас за допомогою Slack, введіть тут URL-адресу вебхука. В іншому випадку залиште поле порожнім. Якщо ви адміністратор, вам також потрібно встановити цю URL-адресу в панелі адміністрування.', + 'slack_url_label' => 'URL-адреса Slack "вхідного вебхуку"', // Financial administrations - 'administration_index' => 'Фінансове управління', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Фінансове управління', + 'administrations_index_menu' => 'Управління фінансами', // profile: - 'purge_data_title' => 'Очистити дані з Firefly III', - 'purge_data_expl' => '«Очищення» означає «видалення того, що вже видалено». За звичайних обставин Firefly III нічого не видаляє остаточно. Це просто приховує це. Кнопка нижче видаляє всі ці раніше "видалені" записи НАЗАВЖДИ.', - 'delete_stuff_header' => 'Видалити та очистити дані', - 'purge_all_data' => 'Знищити всі видалені записи', - 'purge_data' => 'Очистити дані', - 'purged_all_records' => 'Всі видалені записи були очищені.', - 'delete_data_title' => 'Видалити дані з Firefly III', - 'permanent_delete_stuff' => 'Ви можете видалити вміст з Firefly III. Використання кнопок нижче означає, що ваші елементи будуть видалені з поля зору та приховані. Для цього немає кнопки скасування, але елементи можуть залишатися в базі даних, де ви можете їх зберегти, якщо це необхідно.', - 'other_sessions_logged_out' => 'Усі інші ваші сеанси вийшли з системи.', - 'delete_unused_accounts' => 'Видалення невикористаних облікових записів очистить ваші списки автозаповнення.', - 'delete_all_unused_accounts' => 'Видалити невикористані облікові записи', - 'deleted_all_unused_accounts' => 'Усі невикористовувані облікові записи видаляються', - 'delete_all_budgets' => 'Видалити УСІ свої бюджети', - 'delete_all_categories' => 'Видалити ВСІ ваші категорії', - 'delete_all_tags' => 'Видалити УСІ свої теги', - 'delete_all_bills' => 'Видалити УСІ свої рахунки до сплати', - 'delete_all_piggy_banks' => 'Видалити УСІ свої скарбнички', - 'delete_all_rules' => 'Видалити УСІ свої правила', - 'delete_all_recurring' => 'Видалити УСІ повторювані операції', - 'delete_all_object_groups' => 'Видалити УСІ ваші групи', - 'delete_all_accounts' => 'Видалити ВСІ свої рахунки', - 'delete_all_asset_accounts' => 'Видалити УСІ свої рахунки активів', - 'delete_all_expense_accounts' => 'Видалити УСІ свої рахунки витрат', - 'delete_all_revenue_accounts' => 'Видалити УСІ свої рахунки доходів', - 'delete_all_liabilities' => 'Видалити УСІ свої зобов\'язання', - 'delete_all_transactions' => 'Видалити ВСІ операції', - 'delete_all_withdrawals' => 'Видалити УСІ свої зняття', - 'delete_all_deposits' => 'Видалити УСІ свої депозити', - 'delete_all_transfers' => 'Видалити ВСІ перекази', - 'also_delete_transactions' => 'Видалення рахунків також призведе до видалення ВСІХ пов’язаних зняття коштів, депозитів і переказів!', - 'deleted_all_budgets' => 'Усі бюджети видалено', - 'deleted_all_categories' => 'Всі категорії видалено', - 'deleted_all_tags' => 'Усі теги видалено', - 'deleted_all_bills' => 'Усі рахунки видалено', - 'deleted_all_piggy_banks' => 'Всі скарбнички видалені', - 'deleted_all_rules' => 'Усі правила та групи правил видалено', - 'deleted_all_object_groups' => 'Усі групи видалено', - 'deleted_all_accounts' => 'Усі рахунки видалено', - 'deleted_all_asset_accounts' => 'Усі рахунки активів видалено', - 'deleted_all_expense_accounts' => 'Усі рахунки витрат видалено', - 'deleted_all_revenue_accounts' => 'Усі прибуткові рахунки видалено', - 'deleted_all_liabilities' => 'Усі зобов’язання видалено', - 'deleted_all_transactions' => 'Усі операції видалено', - 'deleted_all_withdrawals' => 'Усі зняття було видалено', - 'deleted_all_deposits' => 'Усі депозити видалено', - 'deleted_all_transfers' => 'Усі перекази видалено', - 'deleted_all_recurring' => 'Усі повторювані транзакції видалено', - 'change_your_password' => 'Змінити пароль', - 'delete_account' => 'Видалити обліковий запис', - 'current_password' => 'Поточний пароль', - 'new_password' => 'Новий пароль', - 'new_password_again' => 'Новий пароль (іще раз)', - 'delete_your_account' => 'Видалити ваш обліковий запис', - 'delete_your_account_help' => 'Видалення вашого облікового запису також призведе до видалення всіх облікових записів, транзакцій, всього, що ви зберігали у Firefly III. Все буде втрачено.', - 'delete_your_account_password' => 'Введіть свій пароль, щоб продовжити.', - 'password' => 'Пароль', - 'are_you_sure' => 'Ви впевнені? Скасовувати видалення не можливо.', - 'delete_account_button' => 'Видалити ваш обліковий запис', - 'invalid_current_password' => 'Невірний поточний пароль!', - 'password_changed' => 'Пароль змінено!', - 'should_change' => 'Ідея в тому, щоб змінити пароль.', - 'invalid_password' => 'Невірний пароль!', - 'what_is_pw_security' => 'Що таке "перевірити надійність паролю"?', - 'secure_pw_title' => 'Як вибрати безпечний пароль', - 'forgot_password_response' => 'Дякуємо. Якщо обліковий запис існує з цією електронною адресою, ви знайдете інструкції у вашій поштовій скриньці.', - 'secure_pw_history' => 'Не проходить і тижня, щоб ви не прочитали в новинах про те, що сервіси втрачають паролі своїх користувачів. Хакери та злодії використовують ці паролі, щоб спробувати викрасти вашу особисту інформацію. Ця інформація є цінною.', - 'secure_pw_ff' => 'Ви використовуєте один і той самий пароль в Інтернеті? Якщо один сайт втратить ваш пароль, хакери отримають доступ до всіх ваших даних. Firefly III покладається на те, що ви виберете надійний і унікальний пароль для захисту своїх фінансових записів.', - 'secure_pw_check_box' => 'Щоб допомогти вам у цьому, Firefly III може перевірити, чи пароль, який ви хочете використати, був викрадений у минулому. Якщо це так, Firefly III радить вам НЕ використовувати цей пароль.', - 'secure_pw_working_title' => 'Як це працює?', - 'secure_pw_working' => 'Якщо поставити прапорець, Firefly III надішле перші п’ять символів хешу SHA1 вашого пароля на веб-сайт Troy Hunt, щоб перевірити, чи є він у списку. Це дозволить вам не використовувати небезпечні паролі, як рекомендовано в останній спеціальній публікації NIST на цю тему.', - 'secure_pw_should' => 'Чи варто поставити прапорець?', - 'secure_pw_long_password' => 'Так. Завжди перевіряйте надійність свого пароля.', - 'command_line_token' => 'Токен командного рядка', - 'explain_command_line_token' => 'Цей токен потрібен для виконання параметрів командного рядка, наприклад експорту даних. Без нього ця чутлива команда не працюватиме. Не повідомляйте свій токен командного рядка. Ніхто не буде просити у вас цей токен, навіть я. Якщо ви боїтеся втратити його, або коли Ви параноїдні, відновіть цей токен за допомогою кнопки.', - 'regenerate_command_line_token' => 'Відновити токен командного рядка', - 'token_regenerated' => 'Було створено новий токен командного рядка', - 'change_your_email' => 'Змінити електронну адресу', - 'email_verification' => 'Електронне повідомлення буде надіслано на вашу стару ТА нову адресу електронної пошти. З міркувань безпеки ви не зможете увійти, доки не підтвердите свою нову адресу електронної пошти. Якщо ви не впевнені, що ваша сервіс Firefly III здатен надсилати електронну пошту, не використовуйте цю функцію. Якщо ви адміністратор, ви можете перевірити це в розділі Адміністрування.', - 'email_changed_logout' => 'Доки ви не підтвердите свою електронну адресу, ви не зможете увійти.', - 'login_with_new_email' => 'Тепер ви можете увійти за допомогою нової електронної адреси.', - 'login_with_old_email' => 'Тепер ви можете знову увійти зі своєю старою електронною адресою.', - 'login_provider_local_only' => 'Ця дія недоступна під час автентифікації через ":login_provider".', - 'external_user_mgt_disabled' => 'Ця дія недоступна, якщо Firefly III не відповідає за керування користувачами чи обробку автентифікації.', - 'external_auth_disabled' => 'Ця дія недоступна, якщо Firefly III не відповідає за обробку автентифікації.', - 'delete_local_info_only' => "Оскільки Firefly III не відповідає за керування користувачами чи обробку автентифікації, ця функція видалятиме лише локальну інформацію Firefly III.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'Клієнти OAuth', - 'profile_oauth_no_clients' => 'Ви не створили жодних клієнтів OAuth.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Клієнти', - 'profile_oauth_client_id' => 'ID клієнта', - 'profile_oauth_client_name' => 'Ім\'я', - 'profile_oauth_client_secret' => 'Секретний ключ', - 'profile_oauth_create_new_client' => 'Створити нового клієнта', - 'profile_oauth_create_client' => 'Створити клієнта', - 'profile_oauth_edit_client' => 'Редагувати клієнта', - 'profile_oauth_name_help' => 'Щось, що ваші користувачі впізнають і довірятимуть.', - 'profile_oauth_redirect_url' => 'URL-адреса перенаправлення', - 'profile_oauth_redirect_url_help' => 'Зовнішній URL для авторизації додатка.', - 'profile_authorized_apps' => 'Авторизовані додатки', - 'profile_authorized_clients' => 'Авторизовані клієнти', - 'profile_scopes' => 'Області застосування', - 'profile_revoke' => 'Відкликати', - 'profile_oauth_client_secret_title' => 'Секретний ключ клієнта', - 'profile_oauth_client_secret_expl' => 'Ось новий секретний ключ клієнта. Це єдиний раз, коли він буде показаний, тому не втрачайте його! Тепер ви можете використовувати цей секретний ключ для надсилання запитів API.', - 'profile_personal_access_tokens' => 'Токени особистого доступу', - 'profile_personal_access_token' => 'Токен персонального доступу', - 'profile_oauth_confidential' => 'Конфіденційно', - 'profile_oauth_confidential_help' => 'Вимагайте від клієнта автентифікації за допомогою секретного ключа. Конфіденційні клієнти можуть безпечно зберігати облікові дані, без надання їх неавторизованим особам. Публічні додатки, такі як native desktop програми або програми JavaScript SPA, не можуть надійно зберігати секрети.', - 'profile_personal_access_token_explanation' => 'Ось ваш новий особистий токен. Це єдиний раз, коли він буде показаний, тому не втрачайте його! Тепер ви можете використовувати цей токен для надсилання запитів API.', - 'profile_no_personal_access_token' => 'Ви не створили особистих токенів доступу.', - 'profile_create_new_token' => 'Створити новий токен', - 'profile_create_token' => 'Створити токен', - 'profile_create' => 'Створити', - 'profile_save_changes' => 'Зберегти зміни', - 'profile_whoops' => 'Лишенько!', - 'profile_something_wrong' => 'Щось пішло не так!', - 'profile_try_again' => 'Щось пішло не так. Будь ласка, спробуйте ще раз.', - 'amounts' => 'Суми', - 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', - 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', - 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', - 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', + 'purge_data_title' => 'Очистити дані з Firefly III', + 'purge_data_expl' => '«Очищення» означає «видалення того, що вже видалено». За звичайних обставин Firefly III нічого не видаляє остаточно. Це просто приховує це. Кнопка нижче видаляє всі ці раніше "видалені" записи НАЗАВЖДИ.', + 'delete_stuff_header' => 'Видалити та очистити дані', + 'purge_all_data' => 'Знищити всі видалені записи', + 'purge_data' => 'Очистити дані', + 'purged_all_records' => 'Всі видалені записи були очищені.', + 'delete_data_title' => 'Видалити дані з Firefly III', + 'permanent_delete_stuff' => 'Ви можете видалити вміст з Firefly III. Використання кнопок нижче означає, що ваші елементи будуть видалені з поля зору та приховані. Для цього немає кнопки скасування, але елементи можуть залишатися в базі даних, де ви можете їх зберегти, якщо це необхідно.', + 'other_sessions_logged_out' => 'Усі інші ваші сеанси вийшли з системи.', + 'delete_unused_accounts' => 'Видалення невикористаних облікових записів очистить ваші списки автозаповнення.', + 'delete_all_unused_accounts' => 'Видалити невикористані облікові записи', + 'deleted_all_unused_accounts' => 'Усі невикористовувані облікові записи видаляються', + 'delete_all_budgets' => 'Видалити УСІ свої бюджети', + 'delete_all_categories' => 'Видалити ВСІ ваші категорії', + 'delete_all_tags' => 'Видалити УСІ свої теги', + 'delete_all_bills' => 'Видалити УСІ свої рахунки до сплати', + 'delete_all_piggy_banks' => 'Видалити УСІ свої скарбнички', + 'delete_all_rules' => 'Видалити УСІ свої правила', + 'delete_all_recurring' => 'Видалити УСІ повторювані операції', + 'delete_all_object_groups' => 'Видалити УСІ ваші групи', + 'delete_all_accounts' => 'Видалити ВСІ свої рахунки', + 'delete_all_asset_accounts' => 'Видалити УСІ свої рахунки активів', + 'delete_all_expense_accounts' => 'Видалити УСІ свої рахунки витрат', + 'delete_all_revenue_accounts' => 'Видалити УСІ свої рахунки доходів', + 'delete_all_liabilities' => 'Видалити УСІ свої зобов\'язання', + 'delete_all_transactions' => 'Видалити ВСІ операції', + 'delete_all_withdrawals' => 'Видалити УСІ свої зняття', + 'delete_all_deposits' => 'Видалити УСІ свої депозити', + 'delete_all_transfers' => 'Видалити ВСІ перекази', + 'also_delete_transactions' => 'Видалення рахунків також призведе до видалення ВСІХ пов’язаних зняття коштів, депозитів і переказів!', + 'deleted_all_budgets' => 'Усі бюджети видалено', + 'deleted_all_categories' => 'Всі категорії видалено', + 'deleted_all_tags' => 'Усі теги видалено', + 'deleted_all_bills' => 'Усі рахунки видалено', + 'deleted_all_piggy_banks' => 'Всі скарбнички видалені', + 'deleted_all_rules' => 'Усі правила та групи правил видалено', + 'deleted_all_object_groups' => 'Усі групи видалено', + 'deleted_all_accounts' => 'Усі рахунки видалено', + 'deleted_all_asset_accounts' => 'Усі рахунки активів видалено', + 'deleted_all_expense_accounts' => 'Усі рахунки витрат видалено', + 'deleted_all_revenue_accounts' => 'Усі прибуткові рахунки видалено', + 'deleted_all_liabilities' => 'Усі зобов’язання видалено', + 'deleted_all_transactions' => 'Усі операції видалено', + 'deleted_all_withdrawals' => 'Усі зняття було видалено', + 'deleted_all_deposits' => 'Усі депозити видалено', + 'deleted_all_transfers' => 'Усі перекази видалено', + 'deleted_all_recurring' => 'Усі повторювані транзакції видалено', + 'change_your_password' => 'Змінити пароль', + 'delete_account' => 'Видалити обліковий запис', + 'current_password' => 'Поточний пароль', + 'new_password' => 'Новий пароль', + 'new_password_again' => 'Новий пароль (іще раз)', + 'delete_your_account' => 'Видалити ваш обліковий запис', + 'delete_your_account_help' => 'Видалення вашого облікового запису також призведе до видалення всіх облікових записів, транзакцій, всього, що ви зберігали у Firefly III. Все буде втрачено.', + 'delete_your_account_password' => 'Введіть свій пароль, щоб продовжити.', + 'password' => 'Пароль', + 'are_you_sure' => 'Ви впевнені? Скасовувати видалення не можливо.', + 'delete_account_button' => 'Видалити ваш обліковий запис', + 'invalid_current_password' => 'Невірний поточний пароль!', + 'password_changed' => 'Пароль змінено!', + 'should_change' => 'Ідея в тому, щоб змінити пароль.', + 'invalid_password' => 'Невірний пароль!', + 'what_is_pw_security' => 'Що таке "перевірити надійність паролю"?', + 'secure_pw_title' => 'Як вибрати безпечний пароль', + 'forgot_password_response' => 'Дякуємо. Якщо обліковий запис існує з цією електронною адресою, ви знайдете інструкції у вашій поштовій скриньці.', + 'secure_pw_history' => 'Не проходить і тижня, щоб ви не прочитали в новинах про те, що сервіси втрачають паролі своїх користувачів. Хакери та злодії використовують ці паролі, щоб спробувати викрасти вашу особисту інформацію. Ця інформація є цінною.', + 'secure_pw_ff' => 'Ви використовуєте один і той самий пароль в Інтернеті? Якщо один сайт втратить ваш пароль, хакери отримають доступ до всіх ваших даних. Firefly III покладається на те, що ви виберете надійний і унікальний пароль для захисту своїх фінансових записів.', + 'secure_pw_check_box' => 'Щоб допомогти вам у цьому, Firefly III може перевірити, чи пароль, який ви хочете використати, був викрадений у минулому. Якщо це так, Firefly III радить вам НЕ використовувати цей пароль.', + 'secure_pw_working_title' => 'Як це працює?', + 'secure_pw_working' => 'Якщо поставити прапорець, Firefly III надішле перші п’ять символів хешу SHA1 вашого пароля на веб-сайт Troy Hunt, щоб перевірити, чи є він у списку. Це дозволить вам не використовувати небезпечні паролі, як рекомендовано в останній спеціальній публікації NIST на цю тему.', + 'secure_pw_should' => 'Чи варто поставити прапорець?', + 'secure_pw_long_password' => 'Так. Завжди перевіряйте надійність свого пароля.', + 'command_line_token' => 'Токен командного рядка', + 'explain_command_line_token' => 'Цей токен потрібен для виконання параметрів командного рядка, наприклад експорту даних. Без нього ця чутлива команда не працюватиме. Не повідомляйте свій токен командного рядка. Ніхто не буде просити у вас цей токен, навіть я. Якщо ви боїтеся втратити його, або коли Ви параноїдні, відновіть цей токен за допомогою кнопки.', + 'regenerate_command_line_token' => 'Відновити токен командного рядка', + 'token_regenerated' => 'Було створено новий токен командного рядка', + 'change_your_email' => 'Змінити електронну адресу', + 'email_verification' => 'Електронне повідомлення буде надіслано на вашу стару ТА нову адресу електронної пошти. З міркувань безпеки ви не зможете увійти, доки не підтвердите свою нову адресу електронної пошти. Якщо ви не впевнені, що ваша сервіс Firefly III здатен надсилати електронну пошту, не використовуйте цю функцію. Якщо ви адміністратор, ви можете перевірити це в розділі Адміністрування.', + 'email_changed_logout' => 'Доки ви не підтвердите свою електронну адресу, ви не зможете увійти.', + 'login_with_new_email' => 'Тепер ви можете увійти за допомогою нової електронної адреси.', + 'login_with_old_email' => 'Тепер ви можете знову увійти зі своєю старою електронною адресою.', + 'login_provider_local_only' => 'Ця дія недоступна під час автентифікації через ":login_provider".', + 'external_user_mgt_disabled' => 'Ця дія недоступна, якщо Firefly III не відповідає за керування користувачами чи обробку автентифікації.', + 'external_auth_disabled' => 'Ця дія недоступна, якщо Firefly III не відповідає за обробку автентифікації.', + 'delete_local_info_only' => 'Оскільки Firefly III не відповідає за керування користувачами чи обробку автентифікації, ця функція видалятиме лише локальну інформацію Firefly III.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'Клієнти OAuth', + 'profile_oauth_no_clients' => 'Ви не створили жодних клієнтів OAuth.', + 'profile_oauth_clients_external_auth' => 'Якщо ви використовуєте стороннього постачальника автентифікації, наприклад Authelia, клієнти OAuth не працюватимуть. Ви можете використовувати лише особисті токени доступу.', + 'profile_oauth_clients_header' => 'Клієнти', + 'profile_oauth_client_id' => 'ID клієнта', + 'profile_oauth_client_name' => 'Ім\'я', + 'profile_oauth_client_secret' => 'Секретний ключ', + 'profile_oauth_create_new_client' => 'Створити нового клієнта', + 'profile_oauth_create_client' => 'Створити клієнта', + 'profile_oauth_edit_client' => 'Редагувати клієнта', + 'profile_oauth_name_help' => 'Щось, що ваші користувачі впізнають і довірятимуть.', + 'profile_oauth_redirect_url' => 'URL-адреса перенаправлення', + 'profile_oauth_redirect_url_help' => 'Зовнішній URL для авторизації додатка.', + 'profile_authorized_apps' => 'Авторизовані додатки', + 'profile_authorized_clients' => 'Авторизовані клієнти', + 'profile_scopes' => 'Області застосування', + 'profile_revoke' => 'Відкликати', + 'profile_oauth_client_secret_title' => 'Секретний ключ клієнта', + 'profile_oauth_client_secret_expl' => 'Ось новий секретний ключ клієнта. Це єдиний раз, коли він буде показаний, тому не втрачайте його! Тепер ви можете використовувати цей секретний ключ для надсилання запитів API.', + 'profile_personal_access_tokens' => 'Токени особистого доступу', + 'profile_personal_access_token' => 'Токен персонального доступу', + 'profile_oauth_confidential' => 'Конфіденційно', + 'profile_oauth_confidential_help' => 'Вимагайте від клієнта автентифікації за допомогою секретного ключа. Конфіденційні клієнти можуть безпечно зберігати облікові дані, без надання їх неавторизованим особам. Публічні додатки, такі як native desktop програми або програми JavaScript SPA, не можуть надійно зберігати секрети.', + 'profile_personal_access_token_explanation' => 'Ось ваш новий особистий токен. Це єдиний раз, коли він буде показаний, тому не втрачайте його! Тепер ви можете використовувати цей токен для надсилання запитів API.', + 'profile_no_personal_access_token' => 'Ви не створили особистих токенів доступу.', + 'profile_create_new_token' => 'Створити новий токен', + 'profile_create_token' => 'Створити токен', + 'profile_create' => 'Створити', + 'profile_save_changes' => 'Зберегти зміни', + 'profile_whoops' => 'Лишенько!', + 'profile_something_wrong' => 'Щось пішло не так!', + 'profile_try_again' => 'Щось пішло не так. Будь ласка, спробуйте ще раз.', + 'amounts' => 'Суми', + 'multi_account_warning_unknown' => 'Залежно від типу транзакції, яку ви створюєте, вихідним і/або цільовим рахунком наступних поділів може бути рахунок, визначений у першому поділі транзакції.', + 'multi_account_warning_withdrawal' => 'Зауважте, що вихідним рахунком для наступних розподілів буде встановлено рахунок, визначений у першому розподілі виплат.', + 'multi_account_warning_deposit' => 'Зауважте, що цільовим рахунком для наступних розподілів буде встановлено рахунок, визначений у першому розподілі депозиту.', + 'multi_account_warning_transfer' => 'Зауважте, що облікові записи джерела та призначення наступних поділів буде встановлено на рахунок, визначений у першому поділі переказу.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Експорт даних з Firefly III', - 'export_data_menu' => 'Експорт даних', - 'export_data_bc' => 'Експорт даних з Firefly III', - 'export_data_main_title' => 'Експорт даних з Firefly III', - 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', - 'export_data_all_transactions' => 'Експорт всіх транзакцій', - 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Експорт даних з Firefly III', + 'export_data_menu' => 'Експорт даних', + 'export_data_bc' => 'Експорт даних з Firefly III', + 'export_data_main_title' => 'Експорт даних з Firefly III', + 'export_data_expl' => 'Це посилання дозволяє експортувати всі транзакції та метадані з Firefly III. Додаткову інформацію про процес можна знайти в довідці (значок (?) у верхньому правому куті).', + 'export_data_all_transactions' => 'Експорт всіх транзакцій', + 'export_data_advanced_expl' => 'Якщо вам потрібен розширений або спеціальний тип експорту, прочитайте довідку про використання консольної команди php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'One attachment|:count attachments', - 'attachments' => 'Вкладення', - 'edit_attachment' => 'Редагувати вкладення ":name"', - 'update_attachment' => 'Оновлення вкладення', - 'delete_attachment' => 'Видалити вкладення":name"', - 'attachment_deleted' => 'Видалено вкладення":name"', - 'liabilities_deleted' => 'Deleted liability ":name"', - 'attachment_updated' => 'Оновлено вкладення":name"', - 'upload_max_file_size' => 'Максимальний розмір файлу: :size', - 'list_all_attachments' => 'Список всіх вкладень', + 'nr_of_attachments' => 'Один вкладений файл |:count вкладених файлів', + 'attachments' => 'Вкладення', + 'edit_attachment' => 'Редагувати вкладення ":name"', + 'update_attachment' => 'Оновлення вкладення', + 'delete_attachment' => 'Видалити вкладення":name"', + 'attachment_deleted' => 'Видалено вкладення":name"', + 'liabilities_deleted' => 'Видалено зобов\'язання ":name"', + 'attachment_updated' => 'Оновлено вкладення":name"', + 'upload_max_file_size' => 'Максимальний розмір файлу: :size', + 'list_all_attachments' => 'Список всіх вкладень', // transaction index - 'title_expenses' => 'Витрати', - 'title_withdrawal' => 'Витрати', - 'title_revenue' => 'Дохід / прихід', - 'title_deposit' => 'Дохід / прихід', - 'title_transfer' => 'Переказ', - 'title_transfers' => 'Перекази', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Застосувати правила', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Витрати', + 'title_withdrawal' => 'Витрати', + 'title_revenue' => 'Дохід / прихід', + 'title_deposit' => 'Дохід / прихід', + 'title_transfer' => 'Переказ', + 'title_transfers' => 'Перекази', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Застосувати правила', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Ця транзакція вже є витратою', - 'convert_is_already_type_Deposit' => 'Ця транзакція вже є надходженням', - 'convert_is_already_type_Transfer' => 'Ця транзакція вже є переказом', - 'convert_to_Withdrawal' => 'Перетворити ":description" на витрату', - 'convert_to_Deposit' => 'Перетворити ":description" у надходження', - 'convert_to_Transfer' => 'Перетворити ":description" у переказ', - 'convert_options_WithdrawalDeposit' => 'Перетворити витрату у надходження', - 'convert_options_WithdrawalTransfer' => 'Перетворити витрату у переказ', - 'convert_options_DepositTransfer' => 'Перетворити надходження у переказ', - 'convert_options_DepositWithdrawal' => 'Перетворити надходження у витрату', - 'convert_options_TransferWithdrawal' => 'Перетворити переказ у витрату', - 'convert_options_TransferDeposit' => 'Перетворити цй переказ у надходження', - 'convert_Withdrawal_to_deposit' => 'Перетворити цю витрату у надходження', - 'convert_Withdrawal_to_transfer' => 'Перетворити цю витрату у переказ', - 'convert_Deposit_to_withdrawal' => 'Перетворити цей депозит на витрату', - 'convert_Deposit_to_transfer' => 'Перетворити цей дохід у переказ', - 'convert_Transfer_to_deposit' => 'Перетворити цй переказ у надходження', - 'convert_Transfer_to_withdrawal' => 'Перетворити цй переказ у витрату', - 'convert_please_set_revenue_source' => 'Будь ласка, виберітьджерело, з якого надійдуть гроші.', - 'convert_please_set_asset_destination' => 'Будь ласка, оберіть рахунок, куди прямують гроші.', - 'convert_please_set_expense_destination' => 'Please pick the expense account where the money will go to.', - 'convert_please_set_asset_source' => 'Please pick the asset account where the money will come from.', - 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', - 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', - 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal', - 'converted_to_Deposit' => 'The transaction has been converted to a deposit', - 'converted_to_Transfer' => 'Транзакцію перетворено на переказ', - 'invalid_convert_selection' => 'The account you have selected is already used in this transaction or does not exist.', - 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', - 'convert_to_withdrawal' => 'Перетворити на витрату', - 'convert_to_deposit' => 'Перетворити у надходження', - 'convert_to_transfer' => 'Перетворити на переказ', + 'convert_is_already_type_Withdrawal' => 'Ця транзакція вже є витратою', + 'convert_is_already_type_Deposit' => 'Ця транзакція вже є надходженням', + 'convert_is_already_type_Transfer' => 'Ця транзакція вже є переказом', + 'convert_to_Withdrawal' => 'Перетворити ":description" на витрату', + 'convert_to_Deposit' => 'Перетворити ":description" у надходження', + 'convert_to_Transfer' => 'Перетворити ":description" у переказ', + 'convert_options_WithdrawalDeposit' => 'Перетворити витрату у надходження', + 'convert_options_WithdrawalTransfer' => 'Перетворити витрату у переказ', + 'convert_options_DepositTransfer' => 'Перетворити надходження у переказ', + 'convert_options_DepositWithdrawal' => 'Перетворити надходження у витрату', + 'convert_options_TransferWithdrawal' => 'Перетворити переказ у витрату', + 'convert_options_TransferDeposit' => 'Перетворити цй переказ у надходження', + 'convert_Withdrawal_to_deposit' => 'Перетворити цю витрату у надходження', + 'convert_Withdrawal_to_transfer' => 'Перетворити цю витрату у переказ', + 'convert_Deposit_to_withdrawal' => 'Перетворити цей депозит на витрату', + 'convert_Deposit_to_transfer' => 'Перетворити цей дохід у переказ', + 'convert_Transfer_to_deposit' => 'Перетворити цй переказ у надходження', + 'convert_Transfer_to_withdrawal' => 'Перетворити цй переказ у витрату', + 'convert_please_set_revenue_source' => 'Будь ласка, виберітьджерело, з якого надійдуть гроші.', + 'convert_please_set_asset_destination' => 'Будь ласка, оберіть рахунок, куди прямують гроші.', + 'convert_please_set_expense_destination' => 'Please pick the expense account where the money will go to.', + 'convert_please_set_asset_source' => 'Please pick the asset account where the money will come from.', + 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', + 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', + 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', + 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', + 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', + 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', + 'converted_to_Withdrawal' => 'The transaction has been converted to a withdrawal', + 'converted_to_Deposit' => 'The transaction has been converted to a deposit', + 'converted_to_Transfer' => 'Транзакцію перетворено на переказ', + 'invalid_convert_selection' => 'The account you have selected is already used in this transaction or does not exist.', + 'source_or_dest_invalid' => 'Cannot find the correct transaction details. Conversion is not possible.', + 'convert_to_withdrawal' => 'Перетворити на витрату', + 'convert_to_deposit' => 'Перетворити у надходження', + 'convert_to_transfer' => 'Перетворити на переказ', // create new stuff: - 'create_new_withdrawal' => 'Створити нову витрату', - 'create_new_deposit' => 'Створити новий дохід', - 'create_new_transfer' => 'Створити новий переказ', - 'create_new_asset' => 'Зберегти новий рахунок активів', - 'create_new_liabilities' => 'Створити нове зобов\'язання', - 'create_new_expense' => 'Створити новий рахунок витрат', - 'create_new_revenue' => 'Створити нове джерело доходу', - 'create_new_piggy_bank' => 'Створити нову скарбничку', - 'create_new_bill' => 'Створити новий рахунок', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Створити нову витрату', + 'create_new_deposit' => 'Створити новий дохід', + 'create_new_transfer' => 'Створити новий переказ', + 'create_new_asset' => 'Зберегти новий рахунок активів', + 'create_new_liabilities' => 'Створити нове зобов\'язання', + 'create_new_expense' => 'Створити новий рахунок витрат', + 'create_new_revenue' => 'Створити нове джерело доходу', + 'create_new_piggy_bank' => 'Створити нову скарбничку', + 'create_new_bill' => 'Створити новий рахунок', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Створити нову валюту', - 'store_currency' => 'Зберегти нову валюту', - 'update_currency' => 'Оновити валюту', - 'new_default_currency' => ':name тепер є валютою за замовчуванням.', - 'cannot_delete_currency' => 'Неможливо видалити валюту :name, оскільки вона використовується.', - 'cannot_delete_fallback_currency' => ':name є системною резервною валютою і не може бути видалена.', - 'cannot_disable_currency_journals' => 'Не вдалося вимкнути :name , тому що операції все ще використовують його.', - 'cannot_disable_currency_last_left' => 'Не можна вимкнути :name , оскільки вона є останньою ввімкненою валютою.', - 'cannot_disable_currency_account_meta' => 'Не вдається відключити :name , тому що він використовується в рахунках активів.', - 'cannot_disable_currency_bills' => 'Не вдається відключити :name тому що він використовується в рахунках до сплати.', - 'cannot_disable_currency_recurring' => 'Не вдається вимкнути :name , оскільки він використовується в повторюваних операціях.', - 'cannot_disable_currency_available_budgets' => 'Не вдалося відключити :name , тому що він використовується в доступних бюджетах.', - 'cannot_disable_currency_budget_limits' => 'Не вдалося вимкнути :name , тому що він використовується в бюджетних обмеженнях.', - 'cannot_disable_currency_current_default' => 'Не вдалося вимкнути :name , оскільки це поточна валюта за замовчуванням.', - 'cannot_disable_currency_system_fallback' => 'Не можна вимкнути :name , оскільки це валюта за замовчуванням.', - 'disable_EUR_side_effects' => 'Євро є резервною валютою системи для надзвичайних ситуацій. Його вимкнення може призвести до небажаних побічних ефектів і призвести до втрати гарантії.', - 'deleted_currency' => 'Валюта :name видалена', - 'created_currency' => 'Валюта :name створена', - 'could_not_store_currency' => 'Не вдалося зберегти нову валюту.', - 'updated_currency' => 'Валюта :name оновлена', - 'ask_site_owner' => 'Будь ласка, попросіть :owner додати, видалити або відредагувати валюти.', - 'currencies_intro' => 'Firefly III підтримує різні валюти, які ви можете встановити та ввімкнути тут.', - 'make_default_currency' => 'Зробити основним', - 'default_currency' => 'за замовчуванням', - 'currency_is_disabled' => 'Вимкнено', - 'enable_currency' => 'Увімкнути', - 'disable_currency' => 'Вимкнути', - 'currencies_default_disabled' => 'Більшість із цих валют вимкнено за замовчуванням. Щоб використовувати їх, ви повинні спочатку їх увімкнути.', - 'currency_is_now_enabled' => 'Валюту ":name" увімкнено', - 'currency_is_now_disabled' => 'Валюту ":name" вимкнено', + 'create_currency' => 'Створити нову валюту', + 'store_currency' => 'Зберегти нову валюту', + 'update_currency' => 'Оновити валюту', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Неможливо видалити валюту :name, оскільки вона використовується.', + 'cannot_delete_fallback_currency' => ':name є системною резервною валютою і не може бути видалена.', + 'cannot_disable_currency_journals' => 'Не вдалося вимкнути :name , тому що операції все ще використовують його.', + 'cannot_disable_currency_last_left' => 'Не можна вимкнути :name , оскільки вона є останньою ввімкненою валютою.', + 'cannot_disable_currency_account_meta' => 'Не вдається відключити :name , тому що він використовується в рахунках активів.', + 'cannot_disable_currency_bills' => 'Не вдається відключити :name тому що він використовується в рахунках до сплати.', + 'cannot_disable_currency_recurring' => 'Не вдається вимкнути :name , оскільки він використовується в повторюваних операціях.', + 'cannot_disable_currency_available_budgets' => 'Не вдалося відключити :name , тому що він використовується в доступних бюджетах.', + 'cannot_disable_currency_budget_limits' => 'Не вдалося вимкнути :name , тому що він використовується в бюджетних обмеженнях.', + 'cannot_disable_currency_current_default' => 'Не вдалося вимкнути :name , оскільки це поточна валюта за замовчуванням.', + 'cannot_disable_currency_system_fallback' => 'Не можна вимкнути :name , оскільки це валюта за замовчуванням.', + 'disable_EUR_side_effects' => 'Євро є резервною валютою системи для надзвичайних ситуацій. Його вимкнення може призвести до небажаних побічних ефектів і призвести до втрати гарантії.', + 'deleted_currency' => 'Валюта :name видалена', + 'created_currency' => 'Валюта :name створена', + 'could_not_store_currency' => 'Не вдалося зберегти нову валюту.', + 'updated_currency' => 'Валюта :name оновлена', + 'ask_site_owner' => 'Будь ласка, попросіть :owner додати, видалити або відредагувати валюти.', + 'currencies_intro' => 'Firefly III підтримує різні валюти, які ви можете встановити та ввімкнути тут.', + 'make_default_currency' => 'Зробити основним', + 'default_currency' => 'за замовчуванням', + 'currency_is_disabled' => 'Вимкнено', + 'enable_currency' => 'Увімкнути', + 'disable_currency' => 'Вимкнути', + 'currencies_default_disabled' => 'Більшість із цих валют вимкнено за замовчуванням. Щоб використовувати їх, ви повинні спочатку їх увімкнути.', + 'currency_is_now_enabled' => 'Валюту ":name" увімкнено', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Валюту ":name" вимкнено', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Обов\'язкові поля', - 'optionalFields' => 'Необов\'язкові поля', - 'options' => 'Опції', + 'mandatoryFields' => 'Обов\'язкові поля', + 'optionalFields' => 'Необов\'язкові поля', + 'options' => 'Опції', // budgets: - 'daily_budgets' => 'Щоденні бюджети', - 'weekly_budgets' => 'Тижневі бюджети', - 'monthly_budgets' => 'Місячні бюджети', - 'quarterly_budgets' => 'Квартальні бюджети', - 'half_year_budgets' => 'Піврічні бюджети', - 'yearly_budgets' => 'Річні бюджети', - 'other_budgets' => 'Спеціальні тимчасові бюджети', - 'budget_limit_not_in_range' => 'Ця сума застосовується від :start до :end:', - 'total_available_budget' => 'Загальний бюджет (між :start і :end)', - 'total_available_budget_in_currency' => 'Загальний обсяг бюджету в :currency', - 'see_below' => 'дивіться нижче', - 'create_new_budget' => 'Створити новий бюджет', - 'store_new_budget' => 'Зберегти новий бюджет', - 'stored_new_budget' => 'Збережено новий бюджет ":name"', - 'available_between' => 'Доступно між :start і :end', - 'transactionsWithoutBudget' => 'Витрати без бюджету', - 'transactions_no_budget' => 'Витрати без бюджету між :start і :end', - 'spent_between' => 'Уже витрачено між :start і :end', - 'set_available_amount' => 'Встановити доступну суму', - 'update_available_amount' => 'Оновити доступну суму', - 'ab_basic_modal_explain' => 'Скористайтеся цією формою, щоб вказати, скільки ви очікуєте від бюджету (загалом, у :currency) у вказаний період.', - 'createBudget' => 'Новий бюджет', - 'invalid_currency' => 'Ця валюта недійсна', - 'invalid_amount' => 'Будь ласка, введіть суму', - 'set_ab' => 'Доступна сума бюджету була встановлена', - 'updated_ab' => 'Доступну суму бюджету оновлено', - 'deleted_ab' => 'Доступну суму бюджету видалено', - 'deleted_bl' => 'Зазначену в бюджеті суму видалено', - 'alt_currency_ab_create' => 'Встановіть доступний бюджет в іншій валюті', - 'bl_create_btn' => 'Вказати бюджет в іншій валюті', - 'inactiveBudgets' => 'Неактивні бюджети', - 'without_budget_between' => 'Transactions without a budget between :start and :end', - 'delete_budget' => 'Видалити бюджет ":name"', - 'deleted_budget' => 'Видалений бюджет ":name"', - 'edit_budget' => 'Редагувати бюджет ":name"', - 'updated_budget' => 'Оновлений бюджет ":name"', - 'update_amount' => 'Оновити суму', - 'update_budget' => 'Оновити бюджет', - 'update_budget_amount_range' => 'Update (expected) available amount between :start and :end', - 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', - 'set_budget_limit' => 'Встановити суму в бюджеті', - 'budget_period_navigator' => 'Огляд періоду', - 'info_on_available_amount' => 'Що я маю в наявності?', - 'available_amount_indication' => 'Use these amounts to get an indication of what your total budget could be.', - 'suggested' => 'Suggested', - 'average_between' => 'В середньому між :start і :end', - 'transferred_in' => 'Переведено (у)', - 'transferred_away' => 'Transferred (away)', - 'auto_budget_none' => 'Без авто-бюджету', - 'auto_budget_reset' => 'Встановити фіксовану суму кожного періоду', - 'auto_budget_rollover' => 'Add an amount every period', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Щоденно', - 'auto_budget_period_weekly' => 'Щотижня', - 'auto_budget_period_monthly' => 'Щомісячно', - 'auto_budget_period_quarterly' => 'Щоквартально', - 'auto_budget_period_half_year' => 'Щопівроку', - 'auto_budget_period_yearly' => 'Щорічно', - 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', - 'auto_budget_reset_icon' => 'This budget will be set periodically', - 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', + 'daily_budgets' => 'Щоденні бюджети', + 'weekly_budgets' => 'Тижневі бюджети', + 'monthly_budgets' => 'Місячні бюджети', + 'quarterly_budgets' => 'Квартальні бюджети', + 'half_year_budgets' => 'Піврічні бюджети', + 'yearly_budgets' => 'Річні бюджети', + 'other_budgets' => 'Спеціальні тимчасові бюджети', + 'budget_limit_not_in_range' => 'Ця сума застосовується від :start до :end:', + 'total_available_budget' => 'Загальний бюджет (між :start і :end)', + 'total_available_budget_in_currency' => 'Загальний обсяг бюджету в :currency', + 'see_below' => 'дивіться нижче', + 'create_new_budget' => 'Створити новий бюджет', + 'store_new_budget' => 'Зберегти новий бюджет', + 'stored_new_budget' => 'Збережено новий бюджет ":name"', + 'available_between' => 'Доступно між :start і :end', + 'transactionsWithoutBudget' => 'Витрати без бюджету', + 'transactions_no_budget' => 'Витрати без бюджету між :start і :end', + 'spent_between' => 'Уже витрачено між :start і :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Встановити доступну суму', + 'update_available_amount' => 'Оновити доступну суму', + 'ab_basic_modal_explain' => 'Скористайтеся цією формою, щоб вказати, скільки ви очікуєте від бюджету (загалом, у :currency) у вказаний період.', + 'createBudget' => 'Новий бюджет', + 'invalid_currency' => 'Ця валюта недійсна', + 'invalid_amount' => 'Будь ласка, введіть суму', + 'set_ab' => 'Доступна сума бюджету була встановлена', + 'updated_ab' => 'Доступну суму бюджету оновлено', + 'deleted_ab' => 'Доступну суму бюджету видалено', + 'deleted_bl' => 'Зазначену в бюджеті суму видалено', + 'alt_currency_ab_create' => 'Встановіть доступний бюджет в іншій валюті', + 'bl_create_btn' => 'Вказати бюджет в іншій валюті', + 'inactiveBudgets' => 'Неактивні бюджети', + 'without_budget_between' => 'Transactions without a budget between :start and :end', + 'delete_budget' => 'Видалити бюджет ":name"', + 'deleted_budget' => 'Видалений бюджет ":name"', + 'edit_budget' => 'Редагувати бюджет ":name"', + 'updated_budget' => 'Оновлений бюджет ":name"', + 'update_amount' => 'Оновити суму', + 'update_budget' => 'Оновити бюджет', + 'update_budget_amount_range' => 'Update (expected) available amount between :start and :end', + 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', + 'set_budget_limit' => 'Встановити суму в бюджеті', + 'budget_period_navigator' => 'Огляд періоду', + 'info_on_available_amount' => 'Що я маю в наявності?', + 'available_amount_indication' => 'Use these amounts to get an indication of what your total budget could be.', + 'suggested' => 'Suggested', + 'average_between' => 'В середньому між :start і :end', + 'transferred_in' => 'Переведено (у)', + 'transferred_away' => 'Transferred (away)', + 'auto_budget_none' => 'Без авто-бюджету', + 'auto_budget_reset' => 'Встановити фіксовану суму кожного періоду', + 'auto_budget_rollover' => 'Add an amount every period', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Щоденно', + 'auto_budget_period_weekly' => 'Щотижня', + 'auto_budget_period_monthly' => 'Щомісячно', + 'auto_budget_period_quarterly' => 'Щоквартально', + 'auto_budget_period_half_year' => 'Щопівроку', + 'auto_budget_period_yearly' => 'Щорічно', + 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', + 'auto_budget_reset_icon' => 'This budget will be set periodically', + 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Not expected this period', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Not (yet)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Рахунок-фактура збігається з транзакціями між :low і :high.', - 'running_again_loss' => 'Раніше пов\'язані транзакції з цим рахунком-фактурою можуть втратити зв\'язок, якщо вони (не) співпадають з правилами.', - 'bill_related_rules' => 'Rules related to this bill', - 'repeats' => 'Repeats', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'Цей рахунок закінчується :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Підключені транзакції', - 'auto_match_on' => 'Automatically matched by Firefly III', - 'auto_match_off' => 'Not automatically matched by Firefly III', - 'next_expected_match' => 'Next expected match', - 'delete_bill' => 'Видалити рахунок::name"', - 'deleted_bill' => 'Видалено рахунок ":name"', - 'edit_bill' => 'Редагувати рахунок:name"', - 'more' => 'Докладніше', - 'rescan_old' => 'Run rules again, on all transactions', - 'update_bill' => 'Update bill', - 'updated_bill' => 'Updated bill ":name"', - 'store_new_bill' => 'Store new bill', - 'stored_new_bill' => 'Збережено новий рахунок до сплати ":name"', - 'cannot_scan_inactive_bill' => 'Неактивні рахунки до сплати неможливо сканувати.', - 'rescanned_bill' => 'Перескановано все та пов’язано :count операцію з рахунком до сплати.|Повторно відскановано все та пов’язано :count операції з рахунком до сплати.', - 'average_bill_amount_year' => 'Середня сума рахунку до сплати (:year)', - 'average_bill_amount_overall' => 'Середня сума рахунку до сплати (загалом)', - 'bill_is_active' => 'Рахунок до сплати активний', - 'bill_expected_between' => 'Очікується між :start і :end', - 'bill_will_automatch' => 'Рахунок до сплати буде автоматично пов’язано з відповідними операціями', - 'skips_over' => 'пропускає', - 'bill_store_error' => 'Під час зберігання вашого нового рахунку сталася неочікувана помилка. Будь ласка, перевірте файли журналів', - 'list_inactive_rule' => 'неактивне правило', - 'bill_edit_rules' => 'Firefly III також спробує відредагувати правило, пов’язане з цим рахунком до сплати. Проте, якщо ви редагували це правило самостійно, Firefly III нічого не змінить.|Firefly III також спробує відредагувати правила :count, пов’язані з цим рахунком до сплати. Проте, якщо ви редагували ці правила самостійно, Firefly III нічого не змінить.', - 'bill_expected_date' => 'Очікується :date', - 'bill_expected_date_js' => 'Очікується {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Сплачено {date}', - 'bill_repeats_weekly' => 'Повторюється щотижня', - 'bill_repeats_monthly' => 'Повторюється щомісяця', - 'bill_repeats_quarterly' => 'Повторюється щокварталу', - 'bill_repeats_half-year' => 'Повторюється кожні півроку', - 'bill_repeats_yearly' => 'Повторюється щороку', - 'bill_repeats_weekly_other' => 'Повторюється через тиждень', - 'bill_repeats_monthly_other' => 'Повторюється через місяць', - 'bill_repeats_quarterly_other' => 'Повторюється через квартал', - 'bill_repeats_half-year_other' => 'Повторюється щороку', - 'bill_repeats_yearly_other' => 'Повторюється через рік', - 'bill_repeats_weekly_skip' => 'Повторюється кожні {skip} тижнів', - 'bill_repeats_monthly_skip' => 'Повторює кожні {skip} місяців', - 'bill_repeats_quarterly_skip' => 'Повторюється кожні {skip} кварталів', - 'bill_repeats_half-year_skip' => 'Повторюється кожні {skip} півроку', - 'bill_repeats_yearly_skip' => 'Повторюється кожні {skip} років', - 'subscriptions' => 'Підписки', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Назавжди', - 'extension_date_is' => 'Дата подовження {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Not expected this period', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Not (yet)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Рахунок-фактура збігається з транзакціями між :low і :high.', + 'running_again_loss' => 'Раніше пов\'язані транзакції з цим рахунком-фактурою можуть втратити зв\'язок, якщо вони (не) співпадають з правилами.', + 'bill_related_rules' => 'Rules related to this bill', + 'repeats' => 'Repeats', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'Цей рахунок закінчується :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Підключені транзакції', + 'auto_match_on' => 'Automatically matched by Firefly III', + 'auto_match_off' => 'Not automatically matched by Firefly III', + 'next_expected_match' => 'Next expected match', + 'delete_bill' => 'Видалити рахунок::name"', + 'deleted_bill' => 'Видалено рахунок ":name"', + 'edit_bill' => 'Редагувати рахунок:name"', + 'more' => 'Докладніше', + 'rescan_old' => 'Повторно запустіть правила для всіх транзакцій', + 'update_bill' => 'Оновити рахунок-фактуру', + 'updated_bill' => 'Оновлено рахунок-фактуру ":name"', + 'store_new_bill' => 'Зберегти новий рахунок-фактуру', + 'stored_new_bill' => 'Збережено новий рахунок до сплати ":name"', + 'cannot_scan_inactive_bill' => 'Неактивні рахунки до сплати неможливо сканувати.', + 'rescanned_bill' => 'Перескановано все та пов’язано :count операцію з рахунком до сплати.|Повторно відскановано все та пов’язано :count операції з рахунком до сплати.', + 'average_bill_amount_year' => 'Середня сума рахунку до сплати (:year)', + 'average_bill_amount_overall' => 'Середня сума рахунку до сплати (загалом)', + 'bill_is_active' => 'Рахунок до сплати активний', + 'bill_expected_between' => 'Очікується між :start і :end', + 'bill_will_automatch' => 'Рахунок до сплати буде автоматично пов’язано з відповідними операціями', + 'skips_over' => 'пропускає', + 'bill_store_error' => 'Під час зберігання вашого нового рахунку сталася неочікувана помилка. Будь ласка, перевірте файли журналів', + 'list_inactive_rule' => 'неактивне правило', + 'bill_edit_rules' => 'Firefly III також спробує відредагувати правило, пов’язане з цим рахунком до сплати. Проте, якщо ви редагували це правило самостійно, Firefly III нічого не змінить.|Firefly III також спробує відредагувати правила :count, пов’язані з цим рахунком до сплати. Проте, якщо ви редагували ці правила самостійно, Firefly III нічого не змінить.', + 'bill_expected_date' => 'Очікується :date', + 'bill_expected_date_js' => 'Очікується {date}', + 'expected_amount' => '(Очікувана) сума', + 'bill_paid_on' => 'Сплачено {date}', + 'bill_repeats_weekly' => 'Повторюється щотижня', + 'bill_repeats_monthly' => 'Повторюється щомісяця', + 'bill_repeats_quarterly' => 'Повторюється щокварталу', + 'bill_repeats_half-year' => 'Повторюється кожні півроку', + 'bill_repeats_yearly' => 'Повторюється щороку', + 'bill_repeats_weekly_other' => 'Повторюється через тиждень', + 'bill_repeats_monthly_other' => 'Повторюється через місяць', + 'bill_repeats_quarterly_other' => 'Повторюється через квартал', + 'bill_repeats_half-year_other' => 'Повторюється щороку', + 'bill_repeats_yearly_other' => 'Повторюється через рік', + 'bill_repeats_weekly_skip' => 'Повторюється кожні {skip} тижнів', + 'bill_repeats_monthly_skip' => 'Повторює кожні {skip} місяців', + 'bill_repeats_quarterly_skip' => 'Повторюється кожні {skip} кварталів', + 'bill_repeats_half-year_skip' => 'Повторюється кожні {skip} півроку', + 'bill_repeats_yearly_skip' => 'Повторюється кожні {skip} років', + 'subscriptions' => 'Підписки', + 'go_to_subscriptions' => 'Перейти до своїх підписок', + 'forever' => 'Назавжди', + 'extension_date_is' => 'Дата подовження {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'Ви маєте :count неактивний (архівований) рахунок, який ви можете переглянути на цій окремій сторінці. У вас є :count неактивних (архівних) облікових записів, які ви можете переглядати на цій окремій сторінці.', - 'all_accounts_inactive' => 'Це ваші неактивні рахунки.', - 'active_account_link' => 'Це посилання повертається до ваших активних рахунків.', - 'account_missing_transaction' => 'Рахунок #:id (":name") не може бути переглянутий безпосередньо, але в Firefly відсутня інформація для перенаправлення.', - 'cc_monthly_payment_date_help' => 'Вибрані будь-який рік та будь-який місяць будуть проігноровані. Важливий лише день місяця.', - 'details_for_asset' => 'Деталі активів рахунку ":name"', - 'details_for_expense' => 'Деталі по рахунку витрат ":name"', - 'details_for_revenue' => 'Подробиці джерела доходу ":name"', - 'details_for_cash' => 'Деталі готівкового рахунку ":name"', - 'store_new_asset_account' => 'Зберегти новий рахунок активів', - 'store_new_expense_account' => 'Зберегти новий рахунок витрат', - 'store_new_revenue_account' => 'Зберегти нове джерело доходу', - 'edit_asset_account' => 'Редагувати рахунок активів ":name"', - 'edit_expense_account' => 'Редагувати рахунок витрат ":name"', - 'edit_revenue_account' => 'Редагувати джерело доходу ":name"', - 'delete_asset_account' => 'Видалити рахунок активів ":name"', - 'delete_expense_account' => 'Видалити рахунок витрат ":name"', - 'delete_revenue_account' => 'Видалити джерело доходу ":name"', - 'delete_liabilities_account' => 'Видалити відповідальність ":name"', - 'asset_deleted' => 'Рахунок активів ":name" успішно видалено', - 'account_deleted' => 'Успішно видалено рахунок ":name"', - 'expense_deleted' => 'Successfully deleted expense account ":name"', - 'revenue_deleted' => 'Успішно видалено джерело доходів ":name"', - 'update_asset_account' => 'Update asset account', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => 'Оновити зобов\'язання', - 'update_expense_account' => 'Update expense account', - 'update_revenue_account' => 'Оновити джерело доходу', - 'make_new_asset_account' => 'Create a new asset account', - 'make_new_expense_account' => 'Create a new expense account', - 'make_new_revenue_account' => 'Створити нове джерело доходу', - 'make_new_liabilities_account' => 'Створити нове зобов\'язання', - 'asset_accounts' => 'Основні рахунки', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Основні рахунки (неактивні)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Рахунки витрат', - 'expense_accounts_inactive' => 'Expense accounts (inactive)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Джерела доходів', - 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', - 'cash_accounts' => 'Cash accounts', - 'Cash account' => 'Готівка', - 'liabilities_accounts' => 'Пасиви', - 'liabilities_accounts_inactive' => 'Liabilities (inactive)', - 'reconcile_account' => 'Звірка рахунку ":account"', - 'overview_of_reconcile_modal' => 'Overview of reconciliation', - 'delete_reconciliation' => 'Delete reconciliation', - 'update_reconciliation' => 'Update reconciliation', - 'amount_cannot_be_zero' => 'The amount cannot be zero', - 'end_of_reconcile_period' => 'End of reconcile period: :period', - 'start_of_reconcile_period' => 'Start of reconcile period: :period', - 'start_balance' => 'Початковий баланс', - 'end_balance' => 'Кінцевий баланс', - 'update_balance_dates_instruction' => 'Match the amounts and dates above to your bank statement, and press "Start reconciling"', - 'select_transactions_instruction' => 'Select the transactions that appear on your bank statement.', - 'select_range_and_balance' => 'First verify the date-range and balances. Then press "Start reconciling"', - 'date_change_instruction' => 'If you change the date range now, any progress will be lost.', - 'update_selection' => 'Update selection', - 'store_reconcile' => 'Store reconciliation', - 'reconciliation_transaction' => 'Reconciliation transaction', - 'Reconciliation' => 'Reconciliation', - 'reconciliation' => 'Reconciliation', - 'reconcile_options' => 'Reconciliation options', - 'reconcile_range' => 'Reconciliation range', - 'start_reconcile' => 'Start reconciling', - 'cash_account_type' => 'Готівка', - 'cash' => 'готівка', - 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', - 'account_type' => 'Account type', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'New account ":name" stored!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => 'Updated account ":name"', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Налаштування кредитної картки', - 'no_transactions_account' => 'Немає транзакцій (у цьому періоді) для рахунку активу «:name».', - 'no_transactions_period' => 'There are no transactions (in this period).', - 'no_data_for_chart' => 'Недостатньо інформації (поки що) для створення цього графіку.', - 'select_at_least_one_account' => 'Please select at least one asset account', - 'select_at_least_one_category' => 'Будь ласка, оберіть хоча б одну категорію', - 'select_at_least_one_budget' => 'Будь ласка, оберіть хоча б один бюджет', - 'select_at_least_one_tag' => 'Будь ласка, виберіть принаймні один тег', - 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', - 'account_default_currency' => 'This will be the default currency associated with this account.', - 'reconcile_has_more' => 'Your Firefly III ledger has more money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', - 'reconcile_has_less' => 'Your Firefly III ledger has less money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', - 'reconcile_is_equal' => 'Your Firefly III ledger and your bank statements match. There is nothing to do. Please press "Confirm reconciliation" to confirm your input.', - 'create_pos_reconcile_transaction' => 'Clear the selected transactions, and create a correction adding :amount to this asset account.', - 'create_neg_reconcile_transaction' => 'Clear the selected transactions, and create a correction removing :amount from this asset account.', - 'reconcile_do_nothing' => 'Clear the selected transactions, but do not correct.', - 'reconcile_go_back' => 'You can always edit or delete a correction later.', - 'must_be_asset_account' => 'You can only reconcile asset accounts', - 'reconciliation_stored' => 'Reconciliation stored', - 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', - 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', - 'sum_of_reconciliation' => 'Sum of reconciliation', - 'reconcile_this_account' => 'Reconcile this account', - 'reconcile' => 'Reconcile', - 'show' => 'Показати', - 'confirm_reconciliation' => 'Confirm reconciliation', - 'submitted_start_balance' => 'Submitted start balance', - 'selected_transactions' => 'Вибрані транзакції (:count)', - 'already_cleared_transactions' => 'Already cleared transactions (:count)', - 'submitted_end_balance' => 'Submitted end balance', - 'initial_balance_description' => 'Initial balance for ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'unknown', - 'interest_calc_daily' => 'За день', - 'interest_calc_monthly' => 'За місяць', - 'interest_calc_yearly' => 'Per year', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half year', - 'interest_calc_quarterly' => 'Per quarter', - 'initial_balance_account' => 'Initial balance account of :account', - 'list_options' => 'List options', + 'i_am_owed_amount' => 'Мені заборгували суму', + 'i_owe_amount' => 'Я винен суму', + 'inactive_account_link' => 'Ви маєте :count неактивний (архівований) рахунок, який ви можете переглянути на цій окремій сторінці. У вас є :count неактивних (архівних) облікових записів, які ви можете переглядати на цій окремій сторінці.', + 'all_accounts_inactive' => 'Це ваші неактивні рахунки.', + 'active_account_link' => 'Це посилання повертається до ваших активних рахунків.', + 'account_missing_transaction' => 'Рахунок #:id (":name") не може бути переглянутий безпосередньо, але в Firefly відсутня інформація для перенаправлення.', + 'cc_monthly_payment_date_help' => 'Вибрані будь-який рік та будь-який місяць будуть проігноровані. Важливий лише день місяця.', + 'details_for_asset' => 'Деталі активів рахунку ":name"', + 'details_for_expense' => 'Деталі по рахунку витрат ":name"', + 'details_for_revenue' => 'Подробиці джерела доходу ":name"', + 'details_for_cash' => 'Деталі готівкового рахунку ":name"', + 'store_new_asset_account' => 'Зберегти новий рахунок активів', + 'store_new_expense_account' => 'Зберегти новий рахунок витрат', + 'store_new_revenue_account' => 'Зберегти нове джерело доходу', + 'edit_asset_account' => 'Редагувати рахунок активів ":name"', + 'edit_expense_account' => 'Редагувати рахунок витрат ":name"', + 'edit_revenue_account' => 'Редагувати джерело доходу ":name"', + 'delete_asset_account' => 'Видалити рахунок активів ":name"', + 'delete_expense_account' => 'Видалити рахунок витрат ":name"', + 'delete_revenue_account' => 'Видалити джерело доходу ":name"', + 'delete_liabilities_account' => 'Видалити відповідальність ":name"', + 'asset_deleted' => 'Рахунок активів ":name" успішно видалено', + 'account_deleted' => 'Успішно видалено рахунок ":name"', + 'expense_deleted' => 'Successfully deleted expense account ":name"', + 'revenue_deleted' => 'Успішно видалено джерело доходів ":name"', + 'update_asset_account' => 'Update asset account', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => 'Оновити зобов\'язання', + 'update_expense_account' => 'Update expense account', + 'update_revenue_account' => 'Оновити джерело доходу', + 'make_new_asset_account' => 'Create a new asset account', + 'make_new_expense_account' => 'Create a new expense account', + 'make_new_revenue_account' => 'Створити нове джерело доходу', + 'make_new_liabilities_account' => 'Створити нове зобов\'язання', + 'asset_accounts' => 'Основні рахунки', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Основні рахунки (неактивні)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Рахунки витрат', + 'expense_accounts_inactive' => 'Expense accounts (inactive)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Джерела доходів', + 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', + 'cash_accounts' => 'Cash accounts', + 'Cash account' => 'Готівка', + 'liabilities_accounts' => 'Пасиви', + 'liabilities_accounts_inactive' => 'Liabilities (inactive)', + 'reconcile_account' => 'Звірка рахунку ":account"', + 'overview_of_reconcile_modal' => 'Overview of reconciliation', + 'delete_reconciliation' => 'Delete reconciliation', + 'update_reconciliation' => 'Update reconciliation', + 'amount_cannot_be_zero' => 'The amount cannot be zero', + 'end_of_reconcile_period' => 'End of reconcile period: :period', + 'start_of_reconcile_period' => 'Start of reconcile period: :period', + 'start_balance' => 'Початковий баланс', + 'end_balance' => 'Кінцевий баланс', + 'update_balance_dates_instruction' => 'Match the amounts and dates above to your bank statement, and press "Start reconciling"', + 'select_transactions_instruction' => 'Select the transactions that appear on your bank statement.', + 'select_range_and_balance' => 'First verify the date-range and balances. Then press "Start reconciling"', + 'date_change_instruction' => 'If you change the date range now, any progress will be lost.', + 'update_selection' => 'Update selection', + 'store_reconcile' => 'Store reconciliation', + 'reconciliation_transaction' => 'Reconciliation transaction', + 'Reconciliation' => 'Reconciliation', + 'reconciliation' => 'Reconciliation', + 'reconcile_options' => 'Reconciliation options', + 'reconcile_range' => 'Reconciliation range', + 'start_reconcile' => 'Start reconciling', + 'cash_account_type' => 'Готівка', + 'cash' => 'готівка', + 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', + 'account_type' => 'Account type', + 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => 'New account ":name" stored!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => 'Updated account ":name"', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Налаштування кредитної картки', + 'no_transactions_account' => 'Немає транзакцій (у цьому періоді) для рахунку активу «:name».', + 'no_transactions_period' => 'There are no transactions (in this period).', + 'no_data_for_chart' => 'Недостатньо інформації (поки що) для створення цього графіку.', + 'select_at_least_one_account' => 'Please select at least one asset account', + 'select_at_least_one_category' => 'Будь ласка, оберіть хоча б одну категорію', + 'select_at_least_one_budget' => 'Будь ласка, оберіть хоча б один бюджет', + 'select_at_least_one_tag' => 'Будь ласка, виберіть принаймні один тег', + 'select_at_least_one_expense' => 'Please select at least one combination of expense/revenue accounts. If you have none (the list is empty) this report is not available.', + 'account_default_currency' => 'This will be the default currency associated with this account.', + 'reconcile_has_more' => 'Your Firefly III ledger has more money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', + 'reconcile_has_less' => 'Your Firefly III ledger has less money in it than your bank claims you should have. There are several options. Please choose what to do. Then, press "Confirm reconciliation".', + 'reconcile_is_equal' => 'Your Firefly III ledger and your bank statements match. There is nothing to do. Please press "Confirm reconciliation" to confirm your input.', + 'create_pos_reconcile_transaction' => 'Clear the selected transactions, and create a correction adding :amount to this asset account.', + 'create_neg_reconcile_transaction' => 'Clear the selected transactions, and create a correction removing :amount from this asset account.', + 'reconcile_do_nothing' => 'Clear the selected transactions, but do not correct.', + 'reconcile_go_back' => 'You can always edit or delete a correction later.', + 'must_be_asset_account' => 'You can only reconcile asset accounts', + 'reconciliation_stored' => 'Reconciliation stored', + 'reconciliation_error' => 'Due to an error the transactions were marked as reconciled but the correction has not been stored: :error.', + 'reconciliation_transaction_title' => 'Reconciliation (:from to :to)', + 'sum_of_reconciliation' => 'Sum of reconciliation', + 'reconcile_this_account' => 'Reconcile this account', + 'reconcile' => 'Reconcile', + 'show' => 'Показати', + 'confirm_reconciliation' => 'Confirm reconciliation', + 'submitted_start_balance' => 'Submitted start balance', + 'selected_transactions' => 'Вибрані транзакції (:count)', + 'already_cleared_transactions' => 'Already cleared transactions (:count)', + 'submitted_end_balance' => 'Submitted end balance', + 'initial_balance_description' => 'Initial balance for ":account"', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'unknown', + 'interest_calc_daily' => 'За день', + 'interest_calc_monthly' => 'За місяць', + 'interest_calc_yearly' => 'Per year', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half year', + 'interest_calc_quarterly' => 'Per quarter', + 'initial_balance_account' => 'Initial balance account of :account', + 'list_options' => 'List options', // categories: - 'new_category' => 'New category', - 'create_new_category' => 'Create a new category', - 'without_category' => 'Without a category', - 'update_category' => 'Update category', - 'updated_category' => 'Updated category ":name"', - 'categories' => 'Категорії', - 'edit_category' => 'Edit category ":name"', - 'no_category' => '(no category)', - 'unknown_category_plain' => 'No category', - 'category' => 'Category', - 'delete_category' => 'Delete category ":name"', - 'deleted_category' => 'Deleted category ":name"', - 'store_category' => 'Store new category', - 'stored_category' => 'Stored new category ":name"', - 'without_category_between' => 'Without category between :start and :end', + 'new_category' => 'New category', + 'create_new_category' => 'Create a new category', + 'without_category' => 'Without a category', + 'update_category' => 'Update category', + 'updated_category' => 'Updated category ":name"', + 'categories' => 'Категорії', + 'edit_category' => 'Edit category ":name"', + 'no_category' => '(no category)', + 'unknown_category_plain' => 'No category', + 'category' => 'Category', + 'delete_category' => 'Delete category ":name"', + 'deleted_category' => 'Deleted category ":name"', + 'store_category' => 'Store new category', + 'stored_category' => 'Stored new category ":name"', + 'without_category_between' => 'Without category between :start and :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Update withdrawal', - 'update_deposit' => 'Update deposit', - 'update_transaction' => 'Update transaction', - 'update_transfer' => 'Update transfer', - 'updated_withdrawal' => 'Updated withdrawal ":description"', - 'updated_deposit' => 'Updated deposit ":description"', - 'updated_transfer' => 'Updated transfer ":description"', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => 'Delete withdrawal ":description"', - 'delete_deposit' => 'Delete deposit ":description"', - 'delete_transfer' => 'Delete transfer ":description"', - 'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"', - 'deleted_deposit' => 'Successfully deleted deposit ":description"', - 'deleted_transfer' => 'Successfully deleted transfer ":description"', - 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', - 'stored_journal' => 'Successfully created new transaction ":description"', - 'stored_journal_no_descr' => 'Successfully created your new transaction', - 'updated_journal_no_descr' => 'Successfully updated your transaction', - 'select_transactions' => 'Вибрати транзакції', - 'rule_group_select_transactions' => 'Застосувати ":title" до транзакцій', - 'rule_select_transactions' => 'Застосувати ":title" до транзакцій', - 'stop_selection' => 'Stop selecting transactions', - 'reconcile_selected' => 'Reconcile', - 'mass_delete_journals' => 'Delete a number of transactions', - 'mass_edit_journals' => 'Edit a number of transactions', - 'mass_bulk_journals' => 'Bulk edit a number of transactions', - 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', - 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', - 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', - 'no_bulk_category' => 'Don\'t update category', - 'no_bulk_budget' => 'Don\'t update budget', - 'no_bulk_tags' => 'Don\'t update tag(s)', - 'replace_with_these_tags' => 'Replace with these tags', - 'append_these_tags' => 'Add these tags', - 'mass_edit' => 'Edit selected individually', - 'bulk_edit' => 'Edit selected in bulk', - 'mass_delete' => 'Видалити вибране', - 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', - 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', - 'no_budget' => '(поза бюджетом)', - 'no_bill' => '(no bill)', - 'account_per_budget' => 'Account per budget', - 'account_per_category' => 'Account per category', - 'create_new_object' => 'Створити', - 'empty' => '(порожньо)', - 'all_other_budgets' => '(всі інші бюджети)', - 'all_other_accounts' => '(all other accounts)', - 'expense_per_source_account' => 'Expenses per source account', - 'expense_per_destination_account' => 'Expenses per destination account', - 'income_per_destination_account' => 'Income per destination account', - 'spent_in_specific_category' => 'Spent in category ":category"', - 'earned_in_specific_category' => 'Earned in category ":category"', - 'spent_in_specific_tag' => 'Spent in tag ":tag"', - 'earned_in_specific_tag' => 'Earned in tag ":tag"', - 'income_per_source_account' => 'Income per source account', - 'average_spending_per_destination' => 'Average expense per destination account', - 'average_spending_per_source' => 'Average expense per source account', - 'average_earning_per_source' => 'Average earning per source account', - 'average_earning_per_destination' => 'Average earning per destination account', - 'account_per_tag' => 'Account per tag', - 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', - 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', - 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', - 'tag' => 'Тег', - 'no_budget_squared' => '(no budget)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Видалено :count транзакцій.|Видалено транзакції :count.', - 'mass_edited_transactions_success' => 'Оновлено :count транзакцій.|Оновлено :count транзакцій.', - 'opt_group_' => '(no account type)', - 'opt_group_no_account_type' => '(no account type)', - 'opt_group_defaultAsset' => 'Основний рахунок за замовчуванням', - 'opt_group_savingAsset' => 'Накопичувальні рахунки', - 'opt_group_sharedAsset' => 'Спільні рахунки', - 'opt_group_ccAsset' => 'Credit cards', - 'opt_group_cashWalletAsset' => 'Готівкові гаманці', - 'opt_group_expense_account' => 'Рахунки витрат', - 'opt_group_revenue_account' => 'Revenue accounts', - 'opt_group_l_Loan' => 'Зобов\'язання: Позика', - 'opt_group_cash_account' => 'Cash account', - 'opt_group_l_Debt' => 'Зобов\'язання: Борг', - 'opt_group_l_Mortgage' => 'Liability: Mortgage', - 'opt_group_l_Credit card' => 'Liability: Credit card', - 'notes' => 'Notes', - 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.', - 'attachment_not_found' => 'This attachment could not be found.', - 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', - 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', - 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Update withdrawal', + 'update_deposit' => 'Update deposit', + 'update_transaction' => 'Update transaction', + 'update_transfer' => 'Update transfer', + 'updated_withdrawal' => 'Updated withdrawal ":description"', + 'updated_deposit' => 'Updated deposit ":description"', + 'updated_transfer' => 'Updated transfer ":description"', + 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', + 'no_changes_deposit' => 'Deposit ":description" was not changed.', + 'no_changes_transfer' => 'Transfer ":description" was not changed.', + 'delete_withdrawal' => 'Delete withdrawal ":description"', + 'delete_deposit' => 'Delete deposit ":description"', + 'delete_transfer' => 'Delete transfer ":description"', + 'deleted_withdrawal' => 'Successfully deleted withdrawal ":description"', + 'deleted_deposit' => 'Successfully deleted deposit ":description"', + 'deleted_transfer' => 'Successfully deleted transfer ":description"', + 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', + 'stored_journal' => 'Successfully created new transaction ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Successfully created your new transaction', + 'updated_journal_no_descr' => 'Successfully updated your transaction', + 'select_transactions' => 'Вибрати транзакції', + 'rule_group_select_transactions' => 'Застосувати ":title" до транзакцій', + 'rule_select_transactions' => 'Застосувати ":title" до транзакцій', + 'stop_selection' => 'Stop selecting transactions', + 'reconcile_selected' => 'Reconcile', + 'mass_delete_journals' => 'Delete a number of transactions', + 'mass_edit_journals' => 'Edit a number of transactions', + 'mass_bulk_journals' => 'Bulk edit a number of transactions', + 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', + 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', + 'bulk_set_new_values' => 'Use the inputs below to set new values. If you leave them empty, they will be made empty for all. Also, note that only withdrawals will be given a budget.', + 'no_bulk_category' => 'Don\'t update category', + 'no_bulk_budget' => 'Don\'t update budget', + 'no_bulk_tags' => 'Don\'t update tag(s)', + 'replace_with_these_tags' => 'Replace with these tags', + 'append_these_tags' => 'Add these tags', + 'mass_edit' => 'Edit selected individually', + 'bulk_edit' => 'Edit selected in bulk', + 'mass_delete' => 'Видалити вибране', + 'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.', + 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', + 'no_budget' => '(поза бюджетом)', + 'no_bill' => '(no bill)', + 'account_per_budget' => 'Account per budget', + 'account_per_category' => 'Account per category', + 'create_new_object' => 'Створити', + 'empty' => '(порожньо)', + 'all_other_budgets' => '(всі інші бюджети)', + 'all_other_accounts' => '(all other accounts)', + 'expense_per_source_account' => 'Expenses per source account', + 'expense_per_destination_account' => 'Expenses per destination account', + 'income_per_destination_account' => 'Income per destination account', + 'spent_in_specific_category' => 'Spent in category ":category"', + 'earned_in_specific_category' => 'Earned in category ":category"', + 'spent_in_specific_tag' => 'Spent in tag ":tag"', + 'earned_in_specific_tag' => 'Earned in tag ":tag"', + 'income_per_source_account' => 'Income per source account', + 'average_spending_per_destination' => 'Average expense per destination account', + 'average_spending_per_source' => 'Average expense per source account', + 'average_earning_per_source' => 'Average earning per source account', + 'average_earning_per_destination' => 'Average earning per destination account', + 'account_per_tag' => 'Account per tag', + 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', + 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', + 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', + 'tag' => 'Тег', + 'no_budget_squared' => '(no budget)', + 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', + 'mass_deleted_transactions_success' => 'Видалено :count транзакцій.|Видалено транзакції :count.', + 'mass_edited_transactions_success' => 'Оновлено :count транзакцій.|Оновлено :count транзакцій.', + 'opt_group_' => '(no account type)', + 'opt_group_no_account_type' => '(no account type)', + 'opt_group_defaultAsset' => 'Основний рахунок за замовчуванням', + 'opt_group_savingAsset' => 'Накопичувальні рахунки', + 'opt_group_sharedAsset' => 'Спільні рахунки', + 'opt_group_ccAsset' => 'Credit cards', + 'opt_group_cashWalletAsset' => 'Готівкові гаманці', + 'opt_group_expense_account' => 'Рахунки витрат', + 'opt_group_revenue_account' => 'Revenue accounts', + 'opt_group_l_Loan' => 'Зобов\'язання: Позика', + 'opt_group_cash_account' => 'Cash account', + 'opt_group_l_Debt' => 'Зобов\'язання: Борг', + 'opt_group_l_Mortgage' => 'Liability: Mortgage', + 'opt_group_l_Credit card' => 'Liability: Credit card', + 'notes' => 'Notes', + 'unknown_journal_error' => 'Could not store the transaction. Please check the log files.', + 'attachment_not_found' => 'This attachment could not be found.', + 'journal_link_bill' => 'This transaction is linked to bill :name. To remove the connection, uncheck the checkbox. Use rules to connect it to another bill.', + 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', + 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => 'Welcome to Firefly III!', - 'submit' => 'Підтвердити', - 'submission' => 'Submission', - 'submit_yes_really' => 'Submit (I know what I\'m doing)', - 'getting_started' => 'Getting started', - 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main checking account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', - 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', - 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', - 'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.', - 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', - 'language' => 'Мова', - 'new_savings_account' => ':bank_name savings account', - 'cash_wallet' => 'Гаманець', - 'currency_not_present' => 'Якщо валюта, якою ви зазвичай користуєтесь відсутня, не хвилюйтеся. Ви можете створити власну валюту у розділі Опції > Валюти.', + 'welcome' => 'Welcome to Firefly III!', + 'submit' => 'Підтвердити', + 'submission' => 'Submission', + 'submit_yes_really' => 'Submit (I know what I\'m doing)', + 'getting_started' => 'Getting started', + 'to_get_started' => 'It is good to see you have successfully installed Firefly III. To get started with this tool please enter your bank\'s name and the balance of your main checking account. Do not worry yet if you have multiple accounts. You can add those later. It\'s just that Firefly III needs something to start with.', + 'savings_balance_text' => 'Firefly III will automatically create a savings account for you. By default, there will be no money in your savings account, but if you tell Firefly III the balance it will be stored as such.', + 'finish_up_new_user' => 'That\'s it! You can continue by pressing Submit. You will be taken to the index of Firefly III.', + 'stored_new_accounts_new_user' => 'Yay! Your new accounts have been stored.', + 'set_preferred_language' => 'If you prefer to use Firefly III in another language, please indicate so here.', + 'language' => 'Мова', + 'new_savings_account' => ':bank_name savings account', + 'cash_wallet' => 'Гаманець', + 'currency_not_present' => 'Якщо валюта, якою ви зазвичай користуєтесь відсутня, не хвилюйтеся. Ви можете створити власну валюту у розділі Опції > Валюти.', // home page: - 'transaction_table_description' => 'A table containing your transactions', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => 'Your accounts', - 'your_accounts' => 'Your account overview', - 'category_overview' => 'Category overview', - 'expense_overview' => 'Expense account overview', - 'revenue_overview' => 'Revenue account overview', - 'budgetsAndSpending' => 'Бюджети та витрати', - 'budgets_and_spending' => 'Budgets and spending', - 'go_to_budget' => 'Go to budget "{budget}"', - 'go_to_deposits' => 'Go to deposits', - 'go_to_expenses' => 'Перейти до витрат', - 'savings' => 'Заощадження', - 'newWithdrawal' => 'Нові витрати', - 'newDeposit' => 'Нові надходження', - 'newTransfer' => 'Новий переказ', - 'bills_to_pay' => 'Рахунки до сплати', - 'per_day' => 'За день', - 'left_to_spend_per_day' => 'Залишилося на день', - 'bills_paid' => 'Оплачені рахунки', - 'custom_period' => 'Custom period', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Select a period', + 'transaction_table_description' => 'A table containing your transactions', + 'opposing_account' => 'Opposing account', + 'yourAccounts' => 'Your accounts', + 'your_accounts' => 'Your account overview', + 'category_overview' => 'Category overview', + 'expense_overview' => 'Expense account overview', + 'revenue_overview' => 'Revenue account overview', + 'budgetsAndSpending' => 'Бюджети та витрати', + 'budgets_and_spending' => 'Budgets and spending', + 'go_to_budget' => 'Go to budget "{budget}"', + 'go_to_deposits' => 'Go to deposits', + 'go_to_expenses' => 'Перейти до витрат', + 'savings' => 'Заощадження', + 'newWithdrawal' => 'Нові витрати', + 'newDeposit' => 'Нові надходження', + 'newTransfer' => 'Новий переказ', + 'bills_to_pay' => 'Рахунки до сплати', + 'per_day' => 'За день', + 'left_to_spend_per_day' => 'Залишилося на день', + 'bills_paid' => 'Оплачені рахунки', + 'custom_period' => 'Custom period', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Select a period', // menu and titles, should be recycled as often as possible: - 'currency' => 'Валюта', - 'preferences' => 'Налаштування', - 'logout' => 'Вихід із системи', - 'logout_other_sessions' => 'Вийти з усіх інших сеансів', - 'toggleNavigation' => 'Переключити навігацію', - 'searchPlaceholder' => 'Пошук...', - 'version' => 'Версія', - 'dashboard' => 'Головна панель', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'Усі ваші гроші', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Доступний бюджет ({currency})', - 'currencies' => 'Валюти', - 'activity' => 'Активність', - 'usage' => 'Використання', - 'accounts' => 'Рахунки', - 'Asset account' => 'Активний рахунок', - 'Default account' => 'Основний рахунок', - 'Expense account' => 'Рахунок витрат', - 'Revenue account' => 'Джерело доходів', - 'Initial balance account' => 'Початковий баланс на рахунок', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Дебіт', - 'account_type_Loan' => 'Позика', - 'account_type_Mortgage' => 'Іпотека', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Кредитна картка', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Бюджети', - 'tags' => 'Теги', - 'reports' => 'Звіти', - 'transactions' => 'Транзакції', - 'expenses' => 'Витрати', - 'income' => 'Дохід / прихід', - 'transfers' => 'Перекази', - 'moneyManagement' => 'Money management', - 'money_management' => 'Money management', - 'tools' => 'Tools', - 'piggyBanks' => 'Скарбнички', - 'piggy_banks' => 'Скарбнички', - 'amount_x_of_y' => '{current} of {total}', - 'bills' => 'Рахунки', - 'withdrawal' => 'Витрата', - 'opening_balance' => 'Opening balance', - 'deposit' => 'Deposit', - 'account' => 'Account', - 'transfer' => 'Transfer', - 'Withdrawal' => 'Витрата', - 'Deposit' => 'Deposit', - 'Transfer' => 'Переказ', - 'bill' => 'Рахунок', - 'yes' => 'Так', - 'no' => 'Ні', - 'amount' => 'Сума', - 'overview' => 'Огляд', - 'saveOnAccount' => 'Save on account', - 'unknown' => 'Unknown', - 'monthly' => 'Monthly', - 'profile' => 'Профіль', - 'errors' => 'Помилки', - 'debt_start_date' => 'Start date of debt', - 'debt_start_amount' => 'Start amount of debt', - 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', - 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', - 'store_new_liabilities_account' => 'Зберегти нове зобов\'язання', - 'edit_liabilities_account' => 'Редагувати зобов\'язання ":name"', - 'financial_control' => 'Фінансовий контроль', - 'accounting' => 'Accounting', - 'automation' => 'Автоматизація', - 'others' => 'Others', - 'classification' => 'Класифікація', - 'store_transaction' => 'Store transaction', + 'currency' => 'Валюта', + 'preferences' => 'Налаштування', + 'logout' => 'Вихід із системи', + 'logout_other_sessions' => 'Вийти з усіх інших сеансів', + 'toggleNavigation' => 'Переключити навігацію', + 'searchPlaceholder' => 'Пошук...', + 'version' => 'Версія', + 'dashboard' => 'Головна панель', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'Усі ваші гроші', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Доступний бюджет ({currency})', + 'currencies' => 'Валюти', + 'activity' => 'Активність', + 'usage' => 'Використання', + 'accounts' => 'Рахунки', + 'Asset account' => 'Активний рахунок', + 'Default account' => 'Основний рахунок', + 'Expense account' => 'Рахунок витрат', + 'Revenue account' => 'Джерело доходів', + 'Initial balance account' => 'Початковий баланс на рахунок', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Дебіт', + 'account_type_Loan' => 'Позика', + 'account_type_Mortgage' => 'Іпотека', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Кредитна картка', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'I am owed this debt', + 'liability_direction_debit' => 'I owe this debt to somebody else', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Бюджети', + 'tags' => 'Теги', + 'reports' => 'Звіти', + 'transactions' => 'Транзакції', + 'expenses' => 'Витрати', + 'income' => 'Дохід / прихід', + 'transfers' => 'Перекази', + 'moneyManagement' => 'Money management', + 'money_management' => 'Money management', + 'tools' => 'Tools', + 'piggyBanks' => 'Скарбнички', + 'piggy_banks' => 'Скарбнички', + 'amount_x_of_y' => '{current} of {total}', + 'bills' => 'Рахунки', + 'withdrawal' => 'Витрата', + 'opening_balance' => 'Opening balance', + 'deposit' => 'Deposit', + 'account' => 'Account', + 'transfer' => 'Transfer', + 'Withdrawal' => 'Витрата', + 'Deposit' => 'Deposit', + 'Transfer' => 'Переказ', + 'bill' => 'Рахунок', + 'yes' => 'Так', + 'no' => 'Ні', + 'amount' => 'Сума', + 'overview' => 'Огляд', + 'saveOnAccount' => 'Save on account', + 'unknown' => 'Unknown', + 'monthly' => 'Monthly', + 'profile' => 'Профіль', + 'errors' => 'Помилки', + 'debt_start_date' => 'Start date of debt', + 'debt_start_amount' => 'Start amount of debt', + 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', + 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', + 'store_new_liabilities_account' => 'Зберегти нове зобов\'язання', + 'edit_liabilities_account' => 'Редагувати зобов\'язання ":name"', + 'financial_control' => 'Фінансовий контроль', + 'accounting' => 'Accounting', + 'automation' => 'Автоматизація', + 'others' => 'Others', + 'classification' => 'Класифікація', + 'store_transaction' => 'Store transaction', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Default financial report between :start and :end', - 'report_audit' => 'Transaction history overview between :start and :end', - 'report_category' => 'Category report between :start and :end', - 'report_double' => 'Expense/revenue account report between :start and :end', - 'report_budget' => 'Budget report between :start and :end', - 'report_tag' => 'Tag report between :start and :end', - 'quick_link_reports' => 'Швидкі посилання', - 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', - 'quick_link_default_report' => 'Default financial report', - 'quick_link_audit_report' => 'Transaction history overview', - 'report_this_month_quick' => 'Current month, all accounts', - 'report_last_month_quick' => 'Last month, all accounts', - 'report_this_year_quick' => 'Current year, all accounts', - 'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts', - 'report_all_time_quick' => 'All-time, all accounts', - 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', - 'incomeVsExpenses' => 'Порівняння доходів та витрат', - 'accountBalances' => 'Account balances', - 'balanceStart' => 'Balance at start of period', - 'balanceEnd' => 'Balance at end of period', - 'splitByAccount' => 'Split by account', - 'coveredWithTags' => 'Covered with tags', - 'leftInBudget' => 'Left in budget', - 'left_in_debt' => 'Сума боргу', - 'sumOfSums' => 'Sum of sums', - 'noCategory' => '(no category)', - 'notCharged' => 'Not charged (yet)', - 'inactive' => 'Inactive', - 'active' => 'Active', - 'difference' => 'Difference', - 'money_flowing_in' => 'In', - 'money_flowing_out' => 'Out', - 'topX' => 'top :number', - 'show_full_list' => 'Show entire list', - 'show_only_top' => 'Show only top :number', - 'report_type' => 'Report type', - 'report_type_default' => 'Default financial report', - 'report_type_audit' => 'Transaction history overview (audit)', - 'report_type_category' => 'Category report', - 'report_type_budget' => 'Budget report', - 'report_type_tag' => 'Tag report', - 'report_type_double' => 'Expense/revenue account report', - 'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.', - 'report_included_accounts' => 'Included accounts', - 'report_date_range' => 'Date range', - 'report_preset_ranges' => 'Pre-set ranges', - 'shared' => 'Shared', - 'fiscal_year' => 'Fiscal year', - 'income_entry' => 'Income from account ":name" between :start and :end', - 'expense_entry' => 'Expenses to account ":name" between :start and :end', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => 'Витрати в бюджеті ":budget" між :start і :end', - 'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end', - 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', - 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', - 'reports_extra_options' => 'Extra options', - 'report_has_no_extra_options' => 'This report has no extra options', - 'reports_submit' => 'Переглянути звіт', - 'end_after_start_date' => 'End date of report must be after start date.', - 'select_category' => 'Select category(ies)', - 'select_budget' => 'Select budget(s).', - 'select_tag' => 'Select tag(s).', - 'income_per_category' => 'Income per category', - 'expense_per_category' => 'Expense per category', - 'expense_per_budget' => 'Expense per budget', - 'income_per_account' => 'Income per account', - 'expense_per_account' => 'Expense per account', - 'expense_per_tag' => 'Expense per tag', - 'income_per_tag' => 'Income per tag', - 'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)', - 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', - 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', - 'include_income_not_in_category' => 'Included income not in the selected category(ies)', - 'include_income_not_in_account' => 'Included income not in the selected account(s)', - 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', - 'include_expense_not_in_tags' => 'Включені витрати не у вибраних тегах', - 'everything_else' => 'Everything else', - 'income_and_expenses' => 'Доходи і витрати', - 'spent_average' => 'Spent (average)', - 'income_average' => 'Income (average)', - 'transaction_count' => 'Transaction count', - 'average_spending_per_account' => 'Average spending per account', - 'average_income_per_account' => 'Average income per account', - 'total' => 'Всього', - 'description' => 'Опис', - 'sum_of_period' => 'Sum of period', - 'average_in_period' => 'Average in period', - 'account_role_defaultAsset' => 'Default asset account', - 'account_role_sharedAsset' => 'Спільний рахунок', - 'account_role_savingAsset' => 'Рахунок для накопичення', - 'account_role_ccAsset' => 'Кредитна картка', - 'account_role_cashWalletAsset' => 'Гаманець', - 'budget_chart_click' => 'Будь ласка, натисніть на назву бюджету в звітності, щоб побачити діаграму.', - 'category_chart_click' => 'Будь ласка, натисніть на назву категорії в наведеній таблиці, щоб побачити діаграму.', - 'in_out_accounts' => 'Earned and spent per combination', - 'in_out_accounts_per_asset' => 'Зароблено і витрачено (на рахунок)', - 'in_out_per_category' => 'Earned and spent per category', - 'out_per_budget' => 'Spent per budget', - 'select_expense_revenue' => 'Select expense/revenue account', - 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', - 'sum_in_default_currency' => 'The sum will always be in your default currency.', - 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', + 'report_default' => 'Default financial report between :start and :end', + 'report_audit' => 'Transaction history overview between :start and :end', + 'report_category' => 'Category report between :start and :end', + 'report_double' => 'Expense/revenue account report between :start and :end', + 'report_budget' => 'Budget report between :start and :end', + 'report_tag' => 'Tag report between :start and :end', + 'quick_link_reports' => 'Швидкі посилання', + 'quick_link_examples' => 'These are just some example links to get you started. Check out the help pages under the (?)-button for information on all reports and the magic words you can use.', + 'quick_link_default_report' => 'Default financial report', + 'quick_link_audit_report' => 'Transaction history overview', + 'report_this_month_quick' => 'Current month, all accounts', + 'report_last_month_quick' => 'Last month, all accounts', + 'report_this_year_quick' => 'Current year, all accounts', + 'report_this_fiscal_year_quick' => 'Current fiscal year, all accounts', + 'report_all_time_quick' => 'All-time, all accounts', + 'reports_can_bookmark' => 'Remember that reports can be bookmarked.', + 'incomeVsExpenses' => 'Порівняння доходів та витрат', + 'accountBalances' => 'Account balances', + 'balanceStart' => 'Balance at start of period', + 'balanceEnd' => 'Balance at end of period', + 'splitByAccount' => 'Split by account', + 'coveredWithTags' => 'Covered with tags', + 'leftInBudget' => 'Left in budget', + 'left_in_debt' => 'Сума боргу', + 'sumOfSums' => 'Sum of sums', + 'noCategory' => '(no category)', + 'notCharged' => 'Not charged (yet)', + 'inactive' => 'Inactive', + 'active' => 'Active', + 'difference' => 'Difference', + 'money_flowing_in' => 'In', + 'money_flowing_out' => 'Out', + 'topX' => 'top :number', + 'show_full_list' => 'Show entire list', + 'show_only_top' => 'Show only top :number', + 'report_type' => 'Report type', + 'report_type_default' => 'Default financial report', + 'report_type_audit' => 'Transaction history overview (audit)', + 'report_type_category' => 'Category report', + 'report_type_budget' => 'Budget report', + 'report_type_tag' => 'Tag report', + 'report_type_double' => 'Expense/revenue account report', + 'more_info_help' => 'More information about these types of reports can be found in the help pages. Press the (?) icon in the top right corner.', + 'report_included_accounts' => 'Included accounts', + 'report_date_range' => 'Date range', + 'report_preset_ranges' => 'Pre-set ranges', + 'shared' => 'Shared', + 'fiscal_year' => 'Fiscal year', + 'income_entry' => 'Income from account ":name" between :start and :end', + 'expense_entry' => 'Expenses to account ":name" between :start and :end', + 'category_entry' => 'Expenses and income in category ":name" between :start and :end', + 'budget_spent_amount' => 'Витрати в бюджеті ":budget" між :start і :end', + 'balance_amount' => 'Expenses in budget ":budget" paid from account ":account" between :start and :end', + 'no_audit_activity' => 'No activity was recorded on account :account_name between :start and :end.', + 'audit_end_balance' => 'Account balance of :account_name at the end of :end was: :balance', + 'reports_extra_options' => 'Extra options', + 'report_has_no_extra_options' => 'This report has no extra options', + 'reports_submit' => 'Переглянути звіт', + 'end_after_start_date' => 'End date of report must be after start date.', + 'select_category' => 'Select category(ies)', + 'select_budget' => 'Select budget(s).', + 'select_tag' => 'Select tag(s).', + 'income_per_category' => 'Income per category', + 'expense_per_category' => 'Expense per category', + 'expense_per_budget' => 'Expense per budget', + 'income_per_account' => 'Income per account', + 'expense_per_account' => 'Expense per account', + 'expense_per_tag' => 'Expense per tag', + 'income_per_tag' => 'Income per tag', + 'include_expense_not_in_budget' => 'Included expenses not in the selected budget(s)', + 'include_expense_not_in_account' => 'Included expenses not in the selected account(s)', + 'include_expense_not_in_category' => 'Included expenses not in the selected category(ies)', + 'include_income_not_in_category' => 'Included income not in the selected category(ies)', + 'include_income_not_in_account' => 'Included income not in the selected account(s)', + 'include_income_not_in_tags' => 'Included income not in the selected tag(s)', + 'include_expense_not_in_tags' => 'Включені витрати не у вибраних тегах', + 'everything_else' => 'Everything else', + 'income_and_expenses' => 'Доходи і витрати', + 'spent_average' => 'Spent (average)', + 'income_average' => 'Income (average)', + 'transaction_count' => 'Transaction count', + 'average_spending_per_account' => 'Average spending per account', + 'average_income_per_account' => 'Average income per account', + 'total' => 'Всього', + 'description' => 'Опис', + 'sum_of_period' => 'Sum of period', + 'average_in_period' => 'Average in period', + 'account_role_defaultAsset' => 'Default asset account', + 'account_role_sharedAsset' => 'Спільний рахунок', + 'account_role_savingAsset' => 'Рахунок для накопичення', + 'account_role_ccAsset' => 'Кредитна картка', + 'account_role_cashWalletAsset' => 'Гаманець', + 'budget_chart_click' => 'Будь ласка, натисніть на назву бюджету в звітності, щоб побачити діаграму.', + 'category_chart_click' => 'Будь ласка, натисніть на назву категорії в наведеній таблиці, щоб побачити діаграму.', + 'in_out_accounts' => 'Earned and spent per combination', + 'in_out_accounts_per_asset' => 'Зароблено і витрачено (на рахунок)', + 'in_out_per_category' => 'Earned and spent per category', + 'out_per_budget' => 'Spent per budget', + 'select_expense_revenue' => 'Select expense/revenue account', + 'multi_currency_report_sum' => 'Because this list contains accounts with multiple currencies, the sum(s) you see may not make sense. The report will always fall back to your default currency.', + 'sum_in_default_currency' => 'The sum will always be in your default currency.', + 'net_filtered_prefs' => 'This chart will never include accounts that have the "Include in net worth"-option unchecked.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Chart', - 'month' => 'Month', - 'budget' => 'Budget', - 'spent' => 'Spent', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => 'Spent in budget', - 'left_to_spend' => 'Left to spend', - 'earned' => 'Earned', - 'overspent' => 'Overspent', - 'left' => 'Left', - 'max-amount' => 'Maximum amount', - 'min-amount' => 'Minimum amount', - 'journal-amount' => 'Запис поточного рахунку', - 'name' => 'Name', - 'date' => 'Дата', - 'date_and_time' => 'Date and time', - 'time' => 'Time', - 'paid' => 'Paid', - 'unpaid' => 'Unpaid', - 'day' => 'День', - 'budgeted' => 'Budgeted', - 'period' => 'Period', - 'balance' => 'Balance', - 'in_out_period' => 'In + out this period', - 'sum' => 'Sum', - 'summary' => 'Summary', - 'average' => 'Average', - 'balanceFor' => 'Balance for :name', - 'no_tags' => '(no tags)', + 'chart' => 'Chart', + 'month' => 'Month', + 'budget' => 'Budget', + 'spent' => 'Spent', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => 'Spent in budget', + 'left_to_spend' => 'Left to spend', + 'earned' => 'Earned', + 'overspent' => 'Overspent', + 'left' => 'Left', + 'max-amount' => 'Maximum amount', + 'min-amount' => 'Minimum amount', + 'journal-amount' => 'Запис поточного рахунку', + 'name' => 'Name', + 'date' => 'Дата', + 'date_and_time' => 'Date and time', + 'time' => 'Time', + 'paid' => 'Paid', + 'unpaid' => 'Unpaid', + 'day' => 'День', + 'budgeted' => 'Budgeted', + 'period' => 'Period', + 'balance' => 'Balance', + 'in_out_period' => 'In + out this period', + 'sum' => 'Sum', + 'summary' => 'Summary', + 'average' => 'Average', + 'balanceFor' => 'Balance for :name', + 'no_tags' => '(no tags)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Додайте гроші в скарбничку ":name"', - 'piggy_bank' => 'Скарбничка', - 'new_piggy_bank' => 'Нова скарбничка', - 'store_piggy_bank' => 'Зберегти нову скарбничку', - 'stored_piggy_bank' => 'Зберегти нову скарбничку ":name"', - 'account_status' => 'Account status', - 'left_for_piggy_banks' => 'Left for piggy banks', - 'sum_of_piggy_banks' => 'Сума скарбничок', - 'saved_so_far' => 'Saved so far', - 'left_to_save' => 'Left to save', - 'suggested_amount' => 'Suggested monthly amount to save', - 'add_money_to_piggy_title' => 'Додайте гроші в скарбничку ":name"', - 'remove_money_from_piggy_title' => 'Зніміть гроші зі скарбнички ":name"', - 'add' => 'Add', - 'no_money_for_piggy' => 'У вас немає грошей, щоб покласти в цю скарбничку.', - 'suggested_savings_per_month' => 'Suggested per month', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Додайте гроші в скарбничку ":name"', + 'piggy_bank' => 'Скарбничка', + 'new_piggy_bank' => 'Нова скарбничка', + 'store_piggy_bank' => 'Зберегти нову скарбничку', + 'stored_piggy_bank' => 'Зберегти нову скарбничку ":name"', + 'account_status' => 'Account status', + 'left_for_piggy_banks' => 'Left for piggy banks', + 'sum_of_piggy_banks' => 'Сума скарбничок', + 'saved_so_far' => 'Saved so far', + 'left_to_save' => 'Left to save', + 'suggested_amount' => 'Suggested monthly amount to save', + 'add_money_to_piggy_title' => 'Додайте гроші в скарбничку ":name"', + 'remove_money_from_piggy_title' => 'Зніміть гроші зі скарбнички ":name"', + 'add' => 'Add', + 'no_money_for_piggy' => 'У вас немає грошей, щоб покласти в цю скарбничку.', + 'suggested_savings_per_month' => 'Suggested per month', - 'remove' => 'Remove', - 'max_amount_add' => 'The maximum amount you can add is', - 'max_amount_remove' => 'The maximum amount you can remove is', - 'update_piggy_button' => 'Оновити скарбничку', - 'update_piggy_title' => 'Оновити скарбничку "":name"', - 'updated_piggy_bank' => 'Оновлено скарбничку ":name"', - 'details' => 'Details', - 'events' => 'Events', - 'target_amount' => 'Target amount', - 'start_date' => 'Start date', - 'no_start_date' => 'No start date', - 'target_date' => 'Target date', - 'no_target_date' => 'No target date', - 'table' => 'Table', - 'delete_piggy_bank' => 'Видалити скарбничку ":name"', - 'cannot_add_amount_piggy' => 'Не вдалося додати :amount до ":name.', - 'cannot_remove_from_piggy' => 'Не вдалося зняти :amount з :name".', - 'deleted_piggy_bank' => 'Видалено скарбничку ":name"', - 'added_amount_to_piggy' => 'Додано :amount до ":name"', - 'removed_amount_from_piggy' => 'Знято :amount з ":name"', - 'piggy_events' => 'Пов\'язані скарбнички', + 'remove' => 'Remove', + 'max_amount_add' => 'The maximum amount you can add is', + 'max_amount_remove' => 'The maximum amount you can remove is', + 'update_piggy_button' => 'Оновити скарбничку', + 'update_piggy_title' => 'Оновити скарбничку "":name"', + 'updated_piggy_bank' => 'Оновлено скарбничку ":name"', + 'details' => 'Details', + 'events' => 'Events', + 'target_amount' => 'Target amount', + 'start_date' => 'Start date', + 'no_start_date' => 'No start date', + 'target_date' => 'Target date', + 'no_target_date' => 'No target date', + 'table' => 'Table', + 'delete_piggy_bank' => 'Видалити скарбничку ":name"', + 'cannot_add_amount_piggy' => 'Не вдалося додати :amount до ":name.', + 'cannot_remove_from_piggy' => 'Не вдалося зняти :amount з :name".', + 'deleted_piggy_bank' => 'Видалено скарбничку ":name"', + 'added_amount_to_piggy' => 'Додано :amount до ":name"', + 'removed_amount_from_piggy' => 'Знято :amount з ":name"', + 'piggy_events' => 'Пов\'язані скарбнички', // tags - 'delete_tag' => 'Delete tag ":tag"', - 'deleted_tag' => 'Deleted tag ":tag"', - 'new_tag' => 'Make new tag', - 'edit_tag' => 'Edit tag ":tag"', - 'updated_tag' => 'Updated tag ":tag"', - 'created_tag' => 'Tag ":tag" has been created!', + 'delete_tag' => 'Delete tag ":tag"', + 'deleted_tag' => 'Deleted tag ":tag"', + 'new_tag' => 'Make new tag', + 'edit_tag' => 'Edit tag ":tag"', + 'updated_tag' => 'Updated tag ":tag"', + 'created_tag' => 'Tag ":tag" has been created!', - 'transaction_journal_information' => 'Transaction information', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Meta information', - 'transaction_journal_more' => 'More information', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Stored under ":journal"', - 'total_amount' => 'Total amount', - 'number_of_decimals' => 'Number of decimals', + 'transaction_journal_information' => 'Transaction information', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Meta information', + 'transaction_journal_more' => 'More information', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => 'Stored under ":journal"', + 'total_amount' => 'Total amount', + 'number_of_decimals' => 'Number of decimals', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Administration', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'User administration', - 'list_all_users' => 'All users', - 'all_users' => 'All users', - 'instance_configuration' => 'Configuration', - 'firefly_instance_configuration' => 'Configuration options for Firefly III', - 'setting_single_user_mode' => 'Single user mode', - 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', - 'store_configuration' => 'Store configuration', - 'single_user_administration' => 'User administration for :email', - 'edit_user' => 'Edit user :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'User data', - 'user_information' => 'User information', - 'total_size' => 'total size', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => 'The configuration has been updated', - 'setting_is_demo_site' => 'Demo site', - 'setting_is_demo_site_explain' => 'If you check this box, this installation will behave as if it is the demo site, which can have weird side effects.', - 'block_code_bounced' => 'Email message(s) bounced', - 'block_code_expired' => 'Demo account expired', - 'no_block_code' => 'No reason for block or user not blocked', - 'block_code_email_changed' => 'User has not yet confirmed new email address', - 'admin_update_email' => 'Contrary to the profile page, the user will NOT be notified their email address has changed!', - 'update_user' => 'Update user', - 'updated_user' => 'User data has been changed.', - 'delete_user' => 'Delete user :email', - 'user_deleted' => 'The user has been deleted', - 'send_test_email' => 'Send test email message', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Send message', - 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', - 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', - 'admin_maintanance_title' => 'Maintenance', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Clear cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Description of the split transaction', - 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'you_create_transfer' => 'You\'re creating a transfer.', - 'you_create_withdrawal' => 'You\'re creating a withdrawal.', - 'you_create_deposit' => 'You\'re creating a deposit.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Administration', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'User administration', + 'list_all_users' => 'All users', + 'all_users' => 'All users', + 'instance_configuration' => 'Configuration', + 'firefly_instance_configuration' => 'Configuration options for Firefly III', + 'setting_single_user_mode' => 'Single user mode', + 'setting_single_user_mode_explain' => 'By default, Firefly III only accepts one (1) registration: you. This is a security measure, preventing others from using your instance unless you allow them to. Future registrations are blocked. When you uncheck this box, others can use your instance as well, assuming they can reach it (when it is connected to the internet).', + 'store_configuration' => 'Store configuration', + 'single_user_administration' => 'User administration for :email', + 'edit_user' => 'Edit user :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'User data', + 'user_information' => 'User information', + 'total_size' => 'total size', + 'budget_or_budgets' => ':count budget|:count budgets', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_rules rule(s) in :count_groups rule group(s)', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => 'The configuration has been updated', + 'setting_is_demo_site' => 'Demo site', + 'setting_is_demo_site_explain' => 'If you check this box, this installation will behave as if it is the demo site, which can have weird side effects.', + 'block_code_bounced' => 'Email message(s) bounced', + 'block_code_expired' => 'Demo account expired', + 'no_block_code' => 'No reason for block or user not blocked', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'User has not yet confirmed new email address', + 'admin_update_email' => 'Contrary to the profile page, the user will NOT be notified their email address has changed!', + 'update_user' => 'Update user', + 'updated_user' => 'User data has been changed.', + 'delete_user' => 'Delete user :email', + 'user_deleted' => 'The user has been deleted', + 'send_test_email' => 'Send test email message', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Send message', + 'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.', + 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', + 'admin_maintanance_title' => 'Maintenance', + 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', + 'admin_maintenance_clear_cache' => 'Clear cache', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Description of the split transaction', + 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'you_create_transfer' => 'You\'re creating a transfer.', + 'you_create_withdrawal' => 'You\'re creating a withdrawal.', + 'you_create_deposit' => 'You\'re creating a deposit.', // links - 'journal_link_configuration' => 'Transaction links configuration', - 'create_new_link_type' => 'Create new link type', - 'store_new_link_type' => 'Store new link type', - 'update_link_type' => 'Update link type', - 'edit_link_type' => 'Edit link type ":name"', - 'updated_link_type' => 'Updated link type ":name"', - 'delete_link_type' => 'Delete link type ":name"', - 'deleted_link_type' => 'Deleted link type ":name"', - 'stored_new_link_type' => 'Store new link type ":name"', - 'cannot_edit_link_type' => 'Cannot edit link type ":name"', - 'link_type_help_name' => 'Ie. "Duplicates"', - 'link_type_help_inward' => 'Ie. "duplicates"', - 'link_type_help_outward' => 'Ie. "is duplicated by"', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(do not save connection)', - 'link_transaction' => 'Link transaction', - 'link_to_other_transaction' => 'Link this transaction to another transaction', - 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', - 'this_transaction' => 'This transaction', - 'transaction' => 'Transaction', - 'comments' => 'Comments', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => 'Cannot link these transactions', - 'selected_transaction' => 'Selected transaction', - 'journals_linked' => 'Transactions are linked.', - 'journals_error_linked' => 'These transactions are already linked.', - 'journals_link_to_self' => 'You cannot link a transaction to itself', - 'journal_links' => 'Transaction links', - 'this_withdrawal' => 'This withdrawal', - 'this_deposit' => 'This deposit', - 'this_transfer' => 'This transfer', - 'overview_for_link' => 'Overview for link type ":name"', - 'source_transaction' => 'Source transaction', - 'link_description' => 'Link description', - 'destination_transaction' => 'Destination transaction', - 'delete_journal_link' => 'Delete the link between :source and :destination', - 'deleted_link' => 'Deleted link', + 'journal_link_configuration' => 'Transaction links configuration', + 'create_new_link_type' => 'Create new link type', + 'store_new_link_type' => 'Store new link type', + 'update_link_type' => 'Update link type', + 'edit_link_type' => 'Edit link type ":name"', + 'updated_link_type' => 'Updated link type ":name"', + 'delete_link_type' => 'Delete link type ":name"', + 'deleted_link_type' => 'Deleted link type ":name"', + 'stored_new_link_type' => 'Store new link type ":name"', + 'cannot_edit_link_type' => 'Cannot edit link type ":name"', + 'link_type_help_name' => 'Ie. "Duplicates"', + 'link_type_help_inward' => 'Ie. "duplicates"', + 'link_type_help_outward' => 'Ie. "is duplicated by"', + 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', + 'do_not_save_connection' => '(do not save connection)', + 'link_transaction' => 'Link transaction', + 'link_to_other_transaction' => 'Link this transaction to another transaction', + 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', + 'this_transaction' => 'This transaction', + 'transaction' => 'Transaction', + 'comments' => 'Comments', + 'link_notes' => 'Any notes you wish to store with the link.', + 'invalid_link_selection' => 'Cannot link these transactions', + 'selected_transaction' => 'Selected transaction', + 'journals_linked' => 'Transactions are linked.', + 'journals_error_linked' => 'These transactions are already linked.', + 'journals_link_to_self' => 'You cannot link a transaction to itself', + 'journal_links' => 'Transaction links', + 'this_withdrawal' => 'This withdrawal', + 'this_deposit' => 'This deposit', + 'this_transfer' => 'This transfer', + 'overview_for_link' => 'Overview for link type ":name"', + 'source_transaction' => 'Source transaction', + 'link_description' => 'Link description', + 'destination_transaction' => 'Destination transaction', + 'delete_journal_link' => 'Delete the link between :source and :destination', + 'deleted_link' => 'Deleted link', // link translations: - 'Paid_name' => 'Paid', - 'Refund_name' => 'Refund', - 'Reimbursement_name' => 'Reimbursement', - 'Related_name' => 'Related', - 'relates to_inward' => 'relates to', - 'is (partially) refunded by_inward' => 'is (partially) refunded by', - 'is (partially) paid for by_inward' => 'is (partially) paid for by', - 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', - 'inward_transaction' => 'Inward transaction', - 'outward_transaction' => 'Outward transaction', - 'relates to_outward' => 'relates to', - '(partially) refunds_outward' => '(partially) refunds', - '(partially) pays for_outward' => '(partially) pays for', - '(partially) reimburses_outward' => '(partially) reimburses', - 'is (partially) refunded by' => 'is (partially) refunded by', - 'is (partially) paid for by' => 'is (partially) paid for by', - 'is (partially) reimbursed by' => 'is (partially) reimbursed by', - 'relates to' => 'relates to', - '(partially) refunds' => '(partially) refunds', - '(partially) pays for' => '(partially) pays for', - '(partially) reimburses' => '(partially) reimburses', + 'Paid_name' => 'Paid', + 'Refund_name' => 'Refund', + 'Reimbursement_name' => 'Reimbursement', + 'Related_name' => 'Related', + 'relates to_inward' => 'relates to', + 'is (partially) refunded by_inward' => 'is (partially) refunded by', + 'is (partially) paid for by_inward' => 'is (partially) paid for by', + 'is (partially) reimbursed by_inward' => 'is (partially) reimbursed by', + 'inward_transaction' => 'Inward transaction', + 'outward_transaction' => 'Outward transaction', + 'relates to_outward' => 'relates to', + '(partially) refunds_outward' => '(partially) refunds', + '(partially) pays for_outward' => '(partially) pays for', + '(partially) reimburses_outward' => '(partially) reimburses', + 'is (partially) refunded by' => 'is (partially) refunded by', + 'is (partially) paid for by' => 'is (partially) paid for by', + 'is (partially) reimbursed by' => 'is (partially) reimbursed by', + 'relates to' => 'relates to', + '(partially) refunds' => '(partially) refunds', + '(partially) pays for' => '(partially) pays for', + '(partially) reimburses' => '(partially) reimburses', // split a transaction: - 'splits' => 'Splits', - 'add_another_split' => 'Add another split', - 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', - 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', - 'breadcrumb_convert_group' => 'Convert transaction', - 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', - 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', - 'create_another' => 'After storing, return here to create another one.', - 'after_update_create_another' => 'After updating, return here to continue editing.', - 'store_as_new' => 'Store as a new transaction instead of updating.', - 'reset_after' => 'Reset form after submission', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Splits', + 'add_another_split' => 'Add another split', + 'cannot_edit_opening_balance' => 'You cannot edit the opening balance of an account.', + 'no_edit_multiple_left' => 'You have selected no valid transactions to edit.', + 'breadcrumb_convert_group' => 'Convert transaction', + 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', + 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', + 'create_another' => 'After storing, return here to create another one.', + 'after_update_create_another' => 'After updating, return here to continue editing.', + 'store_as_new' => 'Store as a new transaction instead of updating.', + 'reset_after' => 'Reset form after submission', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(ungrouped)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ungrouped)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Let\'s create an asset account!', - 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.', - 'no_accounts_imperative_asset' => 'Щоб розпочати використання Firefly III, ви повинні створити принаймні один рахунок активів. Давайте зробимо це зараз:', - 'no_accounts_create_asset' => 'Create an asset account', - 'no_accounts_title_expense' => 'Let\'s create an expense account!', - 'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.', - 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', - 'no_accounts_create_expense' => 'Create an expense account', - 'no_accounts_title_revenue' => 'Створімо нове джерело доходу!', - 'no_accounts_intro_revenue' => 'У вас немає створених джерел доходів. Джерел доходів - це місця, де ви отримуєте гроші, напр. Ваш роботодавець, банківський депозит, рента тощо.', - 'no_accounts_imperative_revenue' => 'Джерела доходів створюються автоматично під час створення транзакцій, але їх можна створити вручну теж. Створімо одне зараз? :', - 'no_accounts_create_revenue' => 'Створити нове джерело доходу', - 'no_accounts_title_liabilities' => 'Let\'s create a liability!', - 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', - 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', - 'no_accounts_create_liabilities' => 'Create a liability', - 'no_budgets_title_default' => 'Let\'s create a budget', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'У вас поки що немає бюджетів. Бюджети використовуються для організації ваших витрат у логічні групи, яким ви можете надати м’яке обмеження, щоб обмежити свої витрати.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Budgets are the basic tools of financial management. Let\'s create one now:', - 'no_budgets_create_default' => 'Create a budget', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Let\'s create a category!', - 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', - 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_categories_create_default' => 'Create a category', - 'no_tags_title_default' => 'Let\'s create a tag!', - 'no_tags_intro_default' => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.', - 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', - 'no_tags_create_default' => 'Create a tag', - 'no_transactions_title_withdrawal' => 'Let\'s create an expense!', - 'no_transactions_intro_withdrawal' => 'У вас поки що немає витрат. Ви повинні створити витрати, щоб почати керувати своїми фінансами.', - 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', - 'no_transactions_create_withdrawal' => 'Створити витрату', - 'no_transactions_title_deposit' => 'Let\'s create some income!', - 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', - 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', - 'no_transactions_create_deposit' => 'Create a deposit', - 'no_transactions_title_transfers' => 'Let\'s create a transfer!', - 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', - 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', - 'no_transactions_create_transfers' => 'Create a transfer', - 'no_piggies_title_default' => 'Давайте створимо скарбничку!', - 'no_piggies_intro_default' => 'У вас поки що немає жодних скарбниць. Ви можете створити скарбниці, щоб розділити заощадження і відслідковувати ваші заощадження.', - 'no_piggies_imperative_default' => 'У вас є речі, на які ви відкладаєте гроші? Створіть скарбничку і стежте за цим:', - 'no_piggies_create_default' => 'Створити нову скарбничку', - 'no_bills_title_default' => 'Давайте створимо рахунок!', - 'no_bills_intro_default' => 'Ви поки що не маєте рахунків. Ви можете створювати рахунки для відстеження регулярних витрат, таких як оренда або страхування.', - 'no_bills_imperative_default' => 'У вас регулярні рахунки? Створіть рахунок і відстежуйте свої платежі:', - 'no_bills_create_default' => 'Створити рахунок', + 'no_accounts_title_asset' => 'Let\'s create an asset account!', + 'no_accounts_intro_asset' => 'You have no asset accounts yet. Asset accounts are your main accounts: your checking account, savings account, shared account or even your credit card.', + 'no_accounts_imperative_asset' => 'Щоб розпочати використання Firefly III, ви повинні створити принаймні один рахунок активів. Давайте зробимо це зараз:', + 'no_accounts_create_asset' => 'Create an asset account', + 'no_accounts_title_expense' => 'Let\'s create an expense account!', + 'no_accounts_intro_expense' => 'You have no expense accounts yet. Expense accounts are the places where you spend money, such as shops and supermarkets.', + 'no_accounts_imperative_expense' => 'Expense accounts are created automatically when you create transactions, but you can create one manually too, if you want. Let\'s create one now:', + 'no_accounts_create_expense' => 'Create an expense account', + 'no_accounts_title_revenue' => 'Створімо нове джерело доходу!', + 'no_accounts_intro_revenue' => 'У вас немає створених джерел доходів. Джерел доходів - це місця, де ви отримуєте гроші, напр. Ваш роботодавець, банківський депозит, рента тощо.', + 'no_accounts_imperative_revenue' => 'Джерела доходів створюються автоматично під час створення транзакцій, але їх можна створити вручну теж. Створімо одне зараз? :', + 'no_accounts_create_revenue' => 'Створити нове джерело доходу', + 'no_accounts_title_liabilities' => 'Let\'s create a liability!', + 'no_accounts_intro_liabilities' => 'You have no liabilities yet. Liabilities are the accounts that register your (student) loans and other debts.', + 'no_accounts_imperative_liabilities' => 'You don\'t have to use this feature, but it can be useful if you want to keep track of these things.', + 'no_accounts_create_liabilities' => 'Create a liability', + 'no_budgets_title_default' => 'Let\'s create a budget', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'У вас поки що немає бюджетів. Бюджети використовуються для організації ваших витрат у логічні групи, яким ви можете надати м’яке обмеження, щоб обмежити свої витрати.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Budgets are the basic tools of financial management. Let\'s create one now:', + 'no_budgets_create_default' => 'Create a budget', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Let\'s create a category!', + 'no_categories_intro_default' => 'You have no categories yet. Categories are used to fine tune your transactions and label them with their designated category.', + 'no_categories_imperative_default' => 'Categories are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_categories_create_default' => 'Create a category', + 'no_tags_title_default' => 'Let\'s create a tag!', + 'no_tags_intro_default' => 'You have no tags yet. Tags are used to fine tune your transactions and label them with specific keywords.', + 'no_tags_imperative_default' => 'Tags are created automatically when you create transactions, but you can create one manually too. Let\'s create one now:', + 'no_tags_create_default' => 'Create a tag', + 'no_transactions_title_withdrawal' => 'Let\'s create an expense!', + 'no_transactions_intro_withdrawal' => 'У вас поки що немає витрат. Ви повинні створити витрати, щоб почати керувати своїми фінансами.', + 'no_transactions_imperative_withdrawal' => 'Have you spent some money? Then you should write it down:', + 'no_transactions_create_withdrawal' => 'Створити витрату', + 'no_transactions_title_deposit' => 'Let\'s create some income!', + 'no_transactions_intro_deposit' => 'You have no recorded income yet. You should create income entries to start managing your finances.', + 'no_transactions_imperative_deposit' => 'Have you received some money? Then you should write it down:', + 'no_transactions_create_deposit' => 'Create a deposit', + 'no_transactions_title_transfers' => 'Let\'s create a transfer!', + 'no_transactions_intro_transfers' => 'You have no transfers yet. When you move money between asset accounts, it is recorded as a transfer.', + 'no_transactions_imperative_transfers' => 'Have you moved some money around? Then you should write it down:', + 'no_transactions_create_transfers' => 'Create a transfer', + 'no_piggies_title_default' => 'Давайте створимо скарбничку!', + 'no_piggies_intro_default' => 'У вас поки що немає жодних скарбниць. Ви можете створити скарбниці, щоб розділити заощадження і відслідковувати ваші заощадження.', + 'no_piggies_imperative_default' => 'У вас є речі, на які ви відкладаєте гроші? Створіть скарбничку і стежте за цим:', + 'no_piggies_create_default' => 'Створити нову скарбничку', + 'no_bills_title_default' => 'Давайте створимо рахунок!', + 'no_bills_intro_default' => 'Ви поки що не маєте рахунків. Ви можете створювати рахунки для відстеження регулярних витрат, таких як оренда або страхування.', + 'no_bills_imperative_default' => 'У вас регулярні рахунки? Створіть рахунок і відстежуйте свої платежі:', + 'no_bills_create_default' => 'Створити рахунок', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Recurring transactions', - 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', - 'recurring_calendar_view' => 'Calendar', - 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', - 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', - 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', - 'no_recurring_create_default' => 'Create a recurring transaction', - 'make_new_recurring' => 'Create a recurring transaction', - 'recurring_daily' => 'Щодня', - 'recurring_weekly' => 'Щотижня в :weekday', - 'recurring_weekly_skip' => 'Кожного :skip(st/nd/rd/th) тижня у :weekday', - 'recurring_monthly' => 'Щомісяця в день :dayOfMonth(st/nd/rd/th)', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', - 'recurring_yearly' => 'Every year on :date', - 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', - 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', - 'created_transactions' => 'Related transactions', - 'expected_withdrawals' => 'Очікувані витрати', - 'expected_deposits' => 'Expected deposits', - 'expected_transfers' => 'Expected transfers', - 'created_withdrawals' => 'Created withdrawals', - 'created_deposits' => 'Created deposits', - 'created_transfers' => 'Created transfers', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', - 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Recurring transactions', + 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', + 'recurring_calendar_view' => 'Calendar', + 'no_recurring_title_default' => 'Let\'s create a recurring transaction!', + 'no_recurring_intro_default' => 'You have no recurring transactions yet. You can use these to make Firefly III automatically create transactions for you.', + 'no_recurring_imperative_default' => 'This is a pretty advanced feature but it can be extremely useful. Make sure you read the documentation (?)-icon in the top right corner) before you continue.', + 'no_recurring_create_default' => 'Create a recurring transaction', + 'make_new_recurring' => 'Create a recurring transaction', + 'recurring_daily' => 'Щодня', + 'recurring_weekly' => 'Щотижня в :weekday', + 'recurring_weekly_skip' => 'Кожного :skip(st/nd/rd/th) тижня у :weekday', + 'recurring_monthly' => 'Щомісяця в день :dayOfMonth(st/nd/rd/th)', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => 'Every month on the :dayOfMonth(st/nd/rd/th) :weekday', + 'recurring_yearly' => 'Every year on :date', + 'overview_for_recurrence' => 'Overview for recurring transaction ":title"', + 'warning_duplicates_repetitions' => 'In rare instances, dates appear twice in this list. This can happen when multiple repetitions collide. Firefly III will always generate one transaction per day.', + 'created_transactions' => 'Related transactions', + 'expected_withdrawals' => 'Очікувані витрати', + 'expected_deposits' => 'Expected deposits', + 'expected_transfers' => 'Expected transfers', + 'created_withdrawals' => 'Created withdrawals', + 'created_deposits' => 'Created deposits', + 'created_transfers' => 'Created transfers', + 'recurring_info' => 'Recurring transaction :count / :total', + 'created_from_recurrence' => 'Created from recurring transaction ":title" (#:id)', + 'recurring_never_cron' => 'It seems the cron job that is necessary to support recurring transactions has never run. This is of course normal when you have just installed Firefly III, but this should be something to set up as soon as possible. Please check out the help-pages using the (?)-icon in the top right corner of the page.', + 'recurring_cron_long_ago' => 'It looks like it has been more than 36 hours since the cron job to support recurring transactions has fired for the last time. Are you sure it has been set up correctly? Please check out the help-pages using the (?)-icon in the top right corner of the page.', - 'create_new_recurrence' => 'Create new recurring transaction', - 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', - 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', - 'no_currency' => '(no currency)', - 'mandatory_for_recurring' => 'Mandatory recurrence information', - 'mandatory_for_transaction' => 'Mandatory transaction information', - 'optional_for_recurring' => 'Optional recurrence information', - 'optional_for_transaction' => 'Optional transaction information', - 'change_date_other_options' => 'Change the "first date" to see more options.', - 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', - 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', - 'repeat_forever' => 'Repeat forever', - 'repeat_until_date' => 'Repeat until date', - 'repeat_times' => 'Repeat a number of times', - 'recurring_skips_one' => 'Every other', - 'recurring_skips_more' => 'Skips :count occurrences', - 'store_new_recurrence' => 'Store recurring transaction', - 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', - 'edit_recurrence' => 'Edit recurring transaction ":title"', - 'recurring_repeats_until' => 'Repeats until :date', - 'recurring_repeats_forever' => 'Repeats forever', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => 'Update recurring transaction', - 'updated_recurrence' => 'Updated recurring transaction ":title"', - 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', - 'delete_recurring' => 'Delete recurring transaction ":title"', - 'new_recurring_transaction' => 'New recurring transaction', - 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', - 'do_nothing' => 'Just create the transaction', - 'skip_transaction' => 'Skip the occurrence', - 'jump_to_friday' => 'Create the transaction on the previous Friday instead', - 'jump_to_monday' => 'Create the transaction on the next Monday instead', - 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', - 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', - 'except_weekends' => 'Except weekends', - 'recurrence_deleted' => 'Recurring transaction ":title" deleted', + 'create_new_recurrence' => 'Create new recurring transaction', + 'help_first_date' => 'Indicate the first expected recurrence. This must be in the future.', + 'help_first_date_no_past' => 'Indicate the first expected recurrence. Firefly III will not create transactions in the past.', + 'no_currency' => '(no currency)', + 'mandatory_for_recurring' => 'Mandatory recurrence information', + 'mandatory_for_transaction' => 'Mandatory transaction information', + 'optional_for_recurring' => 'Optional recurrence information', + 'optional_for_transaction' => 'Optional transaction information', + 'change_date_other_options' => 'Change the "first date" to see more options.', + 'mandatory_fields_for_tranaction' => 'The values here will end up in the transaction(s) being created', + 'click_for_calendar' => 'Click here for a calendar that shows you when the transaction would repeat.', + 'repeat_forever' => 'Repeat forever', + 'repeat_until_date' => 'Repeat until date', + 'repeat_times' => 'Repeat a number of times', + 'recurring_skips_one' => 'Every other', + 'recurring_skips_more' => 'Skips :count occurrences', + 'store_new_recurrence' => 'Store recurring transaction', + 'stored_new_recurrence' => 'Recurring transaction ":title" stored successfully.', + 'edit_recurrence' => 'Edit recurring transaction ":title"', + 'recurring_repeats_until' => 'Repeats until :date', + 'recurring_repeats_forever' => 'Repeats forever', + 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', + 'update_recurrence' => 'Update recurring transaction', + 'updated_recurrence' => 'Updated recurring transaction ":title"', + 'recurrence_is_inactive' => 'This recurring transaction is not active and will not generate new transactions.', + 'delete_recurring' => 'Delete recurring transaction ":title"', + 'new_recurring_transaction' => 'New recurring transaction', + 'help_weekend' => 'What should Firefly III do when the recurring transaction falls on a Saturday or Sunday?', + 'do_nothing' => 'Just create the transaction', + 'skip_transaction' => 'Skip the occurrence', + 'jump_to_friday' => 'Create the transaction on the previous Friday instead', + 'jump_to_monday' => 'Create the transaction on the next Monday instead', + 'will_jump_friday' => 'Will be created on Friday instead of the weekends.', + 'will_jump_monday' => 'Will be created on Monday instead of the weekends.', + 'except_weekends' => 'Except weekends', + 'recurrence_deleted' => 'Recurring transaction ":title" deleted', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Balance (:currency)', - 'box_spent_in_currency' => 'Spent (:currency)', - 'box_earned_in_currency' => 'Earned (:currency)', - 'box_budgeted_in_currency' => 'Budgeted (:currency)', - 'box_bill_paid_in_currency' => 'Оплачені рахунки (:currency)', - 'box_bill_unpaid_in_currency' => 'Несплачені рахунки (:currency)', - 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', - 'box_net_worth_in_currency' => 'Net worth (:currency)', - 'box_spend_per_day' => 'Left to spend per day: :amount', + 'box_balance_in_currency' => 'Balance (:currency)', + 'box_spent_in_currency' => 'Spent (:currency)', + 'box_earned_in_currency' => 'Earned (:currency)', + 'box_budgeted_in_currency' => 'Budgeted (:currency)', + 'box_bill_paid_in_currency' => 'Оплачені рахунки (:currency)', + 'box_bill_unpaid_in_currency' => 'Несплачені рахунки (:currency)', + 'box_left_to_spend_in_currency' => 'Left to spend (:currency)', + 'box_net_worth_in_currency' => 'Net worth (:currency)', + 'box_spend_per_day' => 'Left to spend per day: :amount', // debug page - 'debug_page' => 'Debug page', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Debug page', + 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', + 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', + 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', // object groups - 'object_groups_menu_bar' => 'Groups', - 'object_groups_page_title' => 'Groups', - 'object_groups_breadcrumb' => 'Groups', - 'object_groups_index' => 'Overview', - 'object_groups' => 'Groups', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Title', - 'edit_object_group' => 'Edit group ":title"', - 'delete_object_group' => 'Delete group ":title"', - 'update_object_group' => 'Update group', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Group', + 'object_groups_menu_bar' => 'Groups', + 'object_groups_page_title' => 'Groups', + 'object_groups_breadcrumb' => 'Groups', + 'object_groups_index' => 'Overview', + 'object_groups' => 'Groups', + 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', + 'object_group_title' => 'Title', + 'edit_object_group' => 'Edit group ":title"', + 'delete_object_group' => 'Delete group ":title"', + 'update_object_group' => 'Update group', + 'updated_object_group' => 'Successfully updated group ":title"', + 'deleted_object_group' => 'Successfully deleted group ":title"', + 'object_group' => 'Group', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Додано :amount до скарбнички ":name"', - 'ale_action_log_remove' => 'Знято :amount зі скарбнички ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Скарбничка', - 'ale_action_remove_from_piggy' => 'Скарбничка', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Додано :amount до скарбнички ":name"', + 'ale_action_log_remove' => 'Знято :amount зі скарбнички ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Скарбничка', + 'ale_action_remove_from_piggy' => 'Скарбничка', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/uk_UA/form.php b/resources/lang/uk_UA/form.php index 79655fc383..7e39d4c41d 100644 --- a/resources/lang/uk_UA/form.php +++ b/resources/lang/uk_UA/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Назва банку', - 'bank_balance' => 'Баланс', - 'savings_balance' => 'Баланс заощаджень', - 'credit_card_limit' => 'Кредитний ліміт', - 'automatch' => 'Зіставляти автоматично', - 'skip' => 'Пропустити', - 'enabled' => 'Ввімкнено', - 'name' => 'Назва', - 'active' => 'Активно', - 'amount_min' => 'Мінімальна сума', - 'amount_max' => 'Максимальна сума', - 'match' => 'Зіставляти з', - 'strict' => 'Жорсткий режим', - 'repeat_freq' => 'Повторюється', - 'object_group' => 'Група', - 'location' => 'Розташування', - 'update_channel' => 'Канал оновлень', - 'currency_id' => 'Валюта', - 'transaction_currency_id' => 'Валюта', - 'auto_budget_currency_id' => 'Грошова одиниця', - 'external_ip' => 'Зовнішній IP Вашого сервера', - 'attachments' => 'Вкладення', - 'BIC' => 'BIC', - 'verify_password' => 'Перевіряти безпеку пароля', - 'source_account' => 'Вихідний рахунок', - 'destination_account' => 'Рахунок-одержувач', - 'asset_destination_account' => 'Рахунок-одержувач', - 'include_net_worth' => 'Включати в капітал', - 'asset_source_account' => 'Вихідний рахунок', - 'journal_description' => 'Опис', - 'note' => 'Нотатки', - 'currency' => 'Валюта', - 'account_id' => 'Рахунок активів', - 'budget_id' => 'Бюджет', - 'bill_id' => 'Рахунок', - 'opening_balance' => 'Початковий баланс', - 'tagMode' => 'Режим міток', - 'virtual_balance' => 'Віртуальний баланс', + 'bank_name' => 'Назва банку', + 'bank_balance' => 'Баланс', + 'savings_balance' => 'Баланс заощаджень', + 'credit_card_limit' => 'Ліміт кредитної картки', + 'automatch' => 'Визначати автоматично', + 'skip' => 'Пропустити', + 'enabled' => 'Увiмкнено', + 'name' => 'Назва', + 'active' => 'Активно', + 'amount_min' => 'Мінімальна сума', + 'amount_max' => 'Максимальна сума', + 'match' => 'Збігається з', + 'strict' => 'Суворий режим', + 'repeat_freq' => 'Повторюється', + 'object_group' => 'Група', + 'location' => 'Місцезнаходження', + 'update_channel' => 'Канал оновлень', + 'currency_id' => 'Валюта', + 'transaction_currency_id' => 'Валюта', + 'auto_budget_currency_id' => 'Валюта', + 'external_ip' => 'Зовнішній IP Вашого сервера', + 'attachments' => 'Вкладення', + 'BIC' => 'Код ідентифікатора банку', + 'verify_password' => 'Перевірка надійності пароля', + 'source_account' => 'Вихідний рахунок', + 'destination_account' => 'Рахунок-одержувач', + 'asset_destination_account' => 'Рахунок-одержувач', + 'include_net_worth' => 'Включати в капітал', + 'asset_source_account' => 'Вихідний рахунок', + 'journal_description' => 'Опис', + 'note' => 'Коментар', + 'currency' => 'Валюта', + 'account_id' => 'Рахунок активів', + 'budget_id' => 'Бюджет', + 'bill_id' => 'Рахунок', + 'opening_balance' => 'Початковий баланс', + 'tagMode' => 'Режим тегів', + 'virtual_balance' => 'Віртуальний баланс', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Сума накопичення', 'account_role' => 'Тип рахунку', 'opening_balance_date' => 'Дата початкового балансу', @@ -94,38 +92,38 @@ return [ 'cc_monthly_payment_date' => 'Дата оплати місячних платежів банківською карткою', 'piggy_bank_id' => 'Скарбничка', 'returnHere' => 'Повернутися сюди', - 'returnHereExplanation' => 'Після збереження, повернутися сюди, щоб створити ще один.', + 'returnHereExplanation' => 'Після збереження, повернутися сюди.', 'returnHereUpdateExplanation' => 'Після оновлення, повернутись сюди.', 'description' => 'Опис', 'expense_account' => 'Рахунок витрат', - 'revenue_account' => 'Рахунки доходів', + 'revenue_account' => 'Рахунок доходів', 'decimal_places' => 'Десяткові розряди', 'destination_amount' => 'Сума (призначення)', 'new_email_address' => 'Нова адреса електронної пошти', 'verification' => 'Перевірка', 'api_key' => 'Ключ API', 'remember_me' => 'Запам\'ятати мене', - 'liability_type_id' => 'Тип пасиву', - 'liability_type' => 'Liability type', - 'interest' => 'Відсоткова ставка', + 'liability_type_id' => 'Тип відповідальності', + 'liability_type' => 'Тип відповідальності', + 'interest' => 'Відсотки', 'interest_period' => 'Період нарахування відсотків', - 'extension_date' => 'Extension date', + 'extension_date' => 'Дата продовження', 'type' => 'Тип', - 'convert_Withdrawal' => 'Перетворити витрату', - 'convert_Deposit' => 'Перетворити депозит', - 'convert_Transfer' => 'Перетворити переказ', + 'convert_Withdrawal' => 'Конвертувати виплату', + 'convert_Deposit' => 'Конвертувати депозит', + 'convert_Transfer' => 'Конвертувати переказ', 'amount' => 'Сума', 'foreign_amount' => 'Іноземна сума', 'date' => 'Дата', - 'interest_date' => 'Дата нарахування відсотку', - 'book_date' => 'Дата обліку', + 'interest_date' => 'Дата нарахування відсотків', + 'book_date' => 'Дата бронювання', 'process_date' => 'Дата опрацювання', 'category' => 'Категорія', 'tags' => 'Мітки', - 'deletePermanently' => 'Видалити назавжди', - 'cancel' => 'Відміна', - 'targetdate' => 'Цільова дата', - 'startdate' => 'Дата початку', + 'deletePermanently' => 'Видалити остаточно', + 'cancel' => 'Скасувати', + 'targetdate' => 'Кінцева дата', + 'startdate' => 'Початкова дата', 'tag' => 'Мітка', 'under' => 'Під', 'symbol' => 'Знак', @@ -135,12 +133,12 @@ return [ 'creditCardNumber' => 'Номер кредитної картки', 'has_headers' => 'Заголовки', 'date_format' => 'Формат дати', - 'specifix' => 'Банк- або файл-специфічні податки', + 'specifix' => 'Банківські або файлові виправлення', 'attachments[]' => 'Вкладення', 'title' => 'Назва', 'notes' => 'Примітки', 'filename' => 'Ім\'я файлу', - 'mime' => 'Тип Mime', + 'mime' => 'Тип MIME', 'size' => 'Розмір', 'trigger' => 'Тригер', 'stop_processing' => 'Зупинити обробку', @@ -152,35 +150,35 @@ return [ 'end' => 'Кінець діапазону', 'delete_account' => 'Видалити акаунт ":name"', 'delete_webhook' => 'Видалити вебхук ":title"', - 'delete_bill' => 'Видалити квитанцію ":name"', + 'delete_bill' => 'Видалити рахунок ":name"', 'delete_budget' => 'Видалити бюджет ":name"', 'delete_category' => 'Видалити категорію ":name"', - 'delete_currency' => 'Видалення валюти ":name"', + 'delete_currency' => 'Видалити валюту ":name"', 'delete_journal' => 'Видалити транзакцію з описом ":description"', 'delete_attachment' => 'Видалити вкладення ":name"', 'delete_rule' => 'Видалити правило ":title"', 'delete_rule_group' => 'Видалити групу правил ":title"', 'delete_link_type' => 'Видалити тип посилання ":name"', 'delete_user' => 'Видалити користувача ":email"', - 'delete_recurring' => 'Видалити регулярні транзакцію ":title"', + 'delete_recurring' => 'Видалити повторювану транзакцію ":title"', 'user_areYouSure' => 'Якщо ви видалите користувача ":email", усе зникне. Не існує операції відміни. Якщо видалите себе, ви втратите доступ до цього екземпяру Firefly III.', - 'attachment_areYouSure' => 'Ви дійсно бажаєте видалити прикріплення з назвою ":name"?', - 'account_areYouSure' => 'Ви впевнені, що хочете видалити обліковий запис з назвою ":name"?', + 'attachment_areYouSure' => 'Ви впевнені, що хочете видалити вкладення під назвою ":name"?', + 'account_areYouSure' => 'Ви впевнені, що хочете видалити обліковий запис під назвою ":name"?', 'account_areYouSure_js' => 'Ви впевнені, що хочете видалити рахунок "{name}"?', - 'bill_areYouSure' => 'Ви впевнені, що хочете видалити квитанцію з назвою ":name"?', - 'rule_areYouSure' => 'Ви дійсно бажаєте видалити правило ":title"?', - 'object_group_areYouSure' => 'Ви дійсно бажаєте видалити групу з назвою ":title"?', - 'ruleGroup_areYouSure' => 'Ви дійсно бажаєте видалити групу правил ":title"?', - 'budget_areYouSure' => 'Ви впевнені, що хочете видалити бюджет ":name"?', - 'webhook_areYouSure' => 'Ви впевнені, що хочете видалити вебхук з назвою ":title"?', - 'category_areYouSure' => 'Ви впевнені, що хочете видалити категорію ":name"?', - 'recurring_areYouSure' => 'Ви впевнені, що хочете видалити регулфрну трансакцію ":title"?', - 'currency_areYouSure' => 'Ви впевнені, що хочете видалити валюту":name"?', - 'piggyBank_areYouSure' => 'Ви впевнені, що хочете видалити скарбничку ":name"?', - 'journal_areYouSure' => 'Ви впевнені, що хочете видалити транзакцію ":description"?', - 'mass_journal_are_you_sure' => 'Видалити ці транзакції?', + 'bill_areYouSure' => 'Ви впевнені, що хочете видалити рахунок під назвою ":name"?', + 'rule_areYouSure' => 'Ви впевнені, що хочете видалити правило під назвою ":title"?', + 'object_group_areYouSure' => 'Ви впевнені, що хочете видалити групу під назвою ":title"?', + 'ruleGroup_areYouSure' => 'Ви впевнені, що бажаєте видалити групу правил під назвою ":title"?', + 'budget_areYouSure' => 'Ви впевнені, що бажаєте видалити бюджет під назвою ":name"?', + 'webhook_areYouSure' => 'Ви впевнені, що хочете видалити вебхук під назвою ":title"?', + 'category_areYouSure' => 'Ви впевнені, що хочете видалити категорію під назвою ":name"?', + 'recurring_areYouSure' => 'Ви впевнені, що хочете видалити повторювану транзакцію під назвою ":title"?', + 'currency_areYouSure' => 'Ви впевнені, що хочете видалити валюту під назвою ":name"?', + 'piggyBank_areYouSure' => 'Ви впевнені, що хочете видалити скарбничку під назвою ":name"?', + 'journal_areYouSure' => 'Ви впевнені, що бажаєте видалити транзакцію з описом ":description"?', + 'mass_journal_are_you_sure' => 'Ви впевнені, що хочете видалити ці транзакції?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,28 +189,27 @@ return [ * */ - - 'tag_areYouSure' => 'Ви дійсно хочете видалити мітку ":tag"?', - 'journal_link_areYouSure' => 'Ви дійсно бажаєте видалити посилання між :source і :destination?', - 'linkType_areYouSure' => 'Ви дійсно хочете видалити тип посилання ":name" (":inward" / ":outward")?', - 'permDeleteWarning' => 'Ви не зможете повернути видалені з Firefly III дані.', - 'mass_make_selection' => 'Ви все ще можете запобігти видаленню елементів шляхом зняття чекбоксу.', - 'delete_all_permanently' => 'Видалити обране назавжди', + 'tag_areYouSure' => 'Ви впевнені, що хочете видалити мітку ":tag"?', + 'journal_link_areYouSure' => 'Ви впевнені, що хочете видалити посилання між :source і :destination?', + 'linkType_areYouSure' => 'Ви впевнені, що хочете видалити тип посилання ":name" (":inward" / ":outward")?', + 'permDeleteWarning' => 'Видалення елементів із Firefly III є остаточним і не може бути скасовано.', + 'mass_make_selection' => 'Ви все ще можете запобігти видаленню елементів, скасувавши їх вибір.', + 'delete_all_permanently' => 'Видалити вибране назавжди', 'update_all_journals' => 'Оновити ці транзакції', - 'also_delete_transactions' => 'Єдина транзакція, що пов\'язана з цим рахунком, буде видалена.|Усі :count транзакції, пов\'язані з цим рахунком, також будуть видалені.', - 'also_delete_transactions_js' => 'Немає операцій|Єдина операція, що повʼязана з цим рахунком, буде також видалена.|Всі операції {count}, повʼязані з цим рахунком, будуть також видалені.', - 'also_delete_connections' => 'Єдина транзакція, пов\'язана з цим типом посилання, втратить це з\'єднання. | Всі :count транзакції, пов\'язані з цим типом посилання втратять з\'єднання.', - 'also_delete_rules' => 'Єдине правило, що пов\'язане з цією групою правил, буде видалено.|Усі :count правила, пов\'язані з цією групою правил, також будуть видалені.', - 'also_delete_piggyBanks' => 'Єдина скарбничка, що пов\'язана з цим рахунком, буде видалена.|Усі :count скарбнички, пов\'язані з цим рахунком, також будуть видалені.', - 'also_delete_piggyBanks_js' => 'Немає скарбничок|Єдина скарбничка, що пов\'язана з цим рахунком, буде видалена.|Всі скарбнички {count}, що пов\'язані з цим рахунком, також будуть видалені.', + 'also_delete_transactions' => 'Єдина транзакція, пов’язана з цим обліковим записом, також буде видалена.|Усі :count транзакції, пов’язані з цим обліковим записом, також буде видалено.', + 'also_delete_transactions_js' => 'Жодних транзакцій|Єдину транзакцію, пов’язану з цим обліковим записом, також буде видалено.|Усі {count} транзакції, пов’язані з цим обліковим записом, також буде видалено.', + 'also_delete_connections' => 'Єдина транзакція, пов’язана з цим типом посилання, втрачає зв’язок.|Усі :count транзакції, пов’язані з цим типом посилання, втратять зв’язок.', + 'also_delete_rules' => 'Єдине правило, пов’язане з цією групою правил, також буде видалено.|Усі :count правила, пов’язані з цією групою правил, також буде видалено.', + 'also_delete_piggyBanks' => 'Єдина скарбничка, пов’язана з цим обліковим записом, також буде видалена.|Усі :count скарбнички, пов’язані з цим обліковим записом, також буде видалено.', + 'also_delete_piggyBanks_js' => 'Жодних скарбничок|Єдину скарбничку, пов’язану з цим обліковим записом, також буде видалено.|Усі {count} скарбнички, пов’язані з цим обліковим записом, також буде видалено.', 'not_delete_piggy_banks' => 'Скарбничка, що пов\'язана з цією групою не буде видалена.| Усі :count скарбнички, що пов\'язані з цією групою не будуть видалені.', - 'bill_keep_transactions' => 'Єдина транзакція, що пов\'язана з цією квитанцією, не буде видалена.|Усі :count транзакції, пов\'язані з цією квитанцією, уникнуть видалення.', - 'budget_keep_transactions' => 'Єдина транзакція, що пов\'язана з цим бюджетом, не буде видалена.|Усі :count транзакції, пов\'язані з цим бюджетом, також уникнуть видалення.', - 'category_keep_transactions' => 'Єдина транзакція, що пов\'язана з цією категорією, не буде видалена.|Усі :count транзакції, пов\'язані з цією категорією, уникнуть видалення.', - 'recurring_keep_transactions' => 'Єдина транзакція, що пов\'язана з цією періодичною транзакцією, не буде видалена.|Усі :count транзакції, пов\'язані з цією періодичною транзакцією, уникнуть видалення.', - 'tag_keep_transactions' => 'Єдина транзакція, що пов\'язана з цією міткою, не буде видалена.|Усі :count транзакцій, пов\'язані з цією міткою, уникнуть видалення.', + 'bill_keep_transactions' => 'Єдина транзакція, пов’язана з цим обліковим записом, не буде видалена.|Усі :count транзакції, пов’язані з цим обліковим записом, буде збережено.', + 'budget_keep_transactions' => 'Єдина трансакція, пов’язана з цим бюджетом, не буде видалена.|Усі :count транзакції, пов’язані з цим бюджетом, буде збережено.', + 'category_keep_transactions' => 'Єдина транзакція, пов’язана з цією категорією, не буде видалена.|Усі :count транзакції, пов’язані з цією категорією, будуть збережені.', + 'recurring_keep_transactions' => 'Єдина транзакція, створена цією повторюваною транзакцією, не буде видалена.|Усі :count транзакції, створені цією повторюваною транзакцією, буде збережено.', + 'tag_keep_transactions' => 'Єдина транзакція, пов’язана з цією міткою, не буде видалена.|Усі :count транзакції, пов’язані з цим тегом, не буде видалено.', 'check_for_updates' => 'Перевірити наявність оновлень', - 'liability_direction' => 'Liability in/out', + 'liability_direction' => 'Вхідні/вихідні зобов\'язання', 'delete_object_group' => 'Видалити групу ":title"', 'email' => 'Адреса електронної пошти', 'password' => 'Пароль', @@ -230,21 +227,20 @@ return [ 'album' => 'Альбом', 'song' => 'Пісня', - // admin 'domain' => 'Домен', - 'single_user_mode' => 'Відключити реєстрацію користувачів', - 'is_demo_site' => 'Це демо-сайт', + 'single_user_mode' => 'Вимкнути реєстрацію користувачів', + 'is_demo_site' => 'Це демонстраційний сайт', // import 'configuration_file' => 'Файл конфігурації', 'csv_comma' => 'Кома (,)', 'csv_semicolon' => 'Крапка з комою (;)', - 'csv_tab' => 'Табуляція (невидима)', - 'csv_delimiter' => 'Роздільник полів CSV', - 'client_id' => 'Ідентифікатор клієнта', + 'csv_tab' => 'Вкладка (невидима)', + 'csv_delimiter' => 'Роздільник поля CSV', + 'client_id' => 'ID клієнта', 'app_id' => 'ID додатку', - 'secret' => 'Таємний код', + 'secret' => 'Таємний ключ', 'public_key' => 'Публічний ключ', 'country_code' => 'Код країни', 'provider_code' => 'Банк або постачальник даних', @@ -252,11 +248,11 @@ return [ 'fints_port' => 'Порт', 'fints_bank_code' => 'Код банку', 'fints_username' => 'Ім\'я користувача', - 'fints_password' => 'PIN/Password', + 'fints_password' => 'PIN-код / Пароль', 'fints_account' => 'Обліковий запис FinTS', - 'local_account' => 'Акаунт Firefly III', + 'local_account' => 'Обліковий запис Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Дата від', - 'to_date' => 'Дата до', - 'due_date' => 'Дата закінчення', - 'payment_date' => 'Дата оплати', - 'invoice_date' => 'Дата рахунку', - 'internal_reference' => 'Внутрішнє посилання', - 'inward' => 'Внутрішній опис', - 'outward' => 'Зовнішній опис', - 'rule_group_id' => 'Група правил', - 'transaction_description' => 'Опис транзакції', - 'first_date' => 'Перша дата', - 'transaction_type' => 'Тип транзакції', - 'repeat_until' => 'Повторювати до', - 'recurring_description' => 'Опис регулярної транзакції', - 'repetition_type' => 'Тип повторення', - 'foreign_currency_id' => 'Іноземна валюта', - 'repetition_end' => 'Повторення закінчується', - 'repetitions' => 'Повторення', - 'calendar' => 'Календар', - 'weekend' => 'Вихідні дні', - 'client_secret' => 'Секретний ключ', - 'withdrawal_destination_id' => 'Рахунок-одержувач', - 'deposit_source_id' => 'Вихідний рахунок', - 'expected_on' => 'Очікується на', - 'paid' => 'Сплачено', - 'auto_budget_type' => 'Автоматичний бюджет', - 'auto_budget_amount' => 'Автобюджетна сума', - 'auto_budget_period' => 'Автобюджетний період', - 'collected' => 'Зібрано', - 'submitted' => 'Надіслано', - 'key' => 'Ключ', - 'value' => 'Вміст запису', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Дата від', + 'to_date' => 'Дата до', + 'due_date' => 'Дата закінчення', + 'payment_date' => 'Дата оплати', + 'invoice_date' => 'Дата рахунку-фактури', + 'internal_reference' => 'Внутрішнє посилання', + 'inward' => 'Внутрішній опис', + 'outward' => 'Зовнішній опис', + 'rule_group_id' => 'Група правил', + 'transaction_description' => 'Опис транзакції', + 'first_date' => 'Початкова дата', + 'transaction_type' => 'Тип транзакції', + 'repeat_until' => 'Повторювати до', + 'recurring_description' => 'Опис повторюваної операції', + 'repetition_type' => 'Тип повторення', + 'foreign_currency_id' => 'Іноземна валюта', + 'repetition_end' => 'Повторення закінчується', + 'repetitions' => 'Повторення', + 'calendar' => 'Календар', + 'weekend' => 'Вихідні', + 'client_secret' => 'Секретний ключ', + 'withdrawal_destination_id' => 'Рахунок-одержувач', + 'deposit_source_id' => 'Вихідний рахунок', + 'expected_on' => 'Очікується на', + 'paid' => 'Сплачено', + 'auto_budget_type' => 'Автоматичний бюджет', + 'auto_budget_amount' => 'Сума автоматичного бюджету', + 'auto_budget_period' => 'Період автоматичного бюджету', + 'collected' => 'Зібрано', + 'submitted' => 'Надіслано', + 'key' => 'Ключ', + 'value' => 'Вміст запису', + 'webhook_delivery' => 'Доставка', + 'webhook_response' => 'Відповідь', + 'webhook_trigger' => 'Тригер', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/uk_UA/intro.php b/resources/lang/uk_UA/intro.php index 457912942a..5e9b02591c 100644 --- a/resources/lang/uk_UA/intro.php +++ b/resources/lang/uk_UA/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Вітаємо на головній сторінці Firefly III. Будь ласка, знайдіть час, щоб пройти через цей вступ, та отримати уявлення про те, як працює Firefly II.', - 'index_accounts-chart' => 'Цей графік показує поточний баланс ваших активів. Ви можете вибрати рахунки, видимі тут, у ваших уподобаннях.', - 'index_box_out_holder' => 'Це невеличке віконце та сусідні, дасть вам швидкий огляд вашої фінансової ситуації.', - 'index_help' => 'Якщо вам коли-небудь знадобиться допомога зі сторінкою або формою, натисніть цю кнопку.', - 'index_outro' => 'Більшість сторінок Firefly III починаються з невеличкого огляду як цей. Будь ласка, зв\'яжіться зі мною, коли у вас виникнуть питання або коментарі. Насолоджуйтесь!', - 'index_sidebar-toggle' => 'Для того щоб створити транзакції, рахунки чи інші речі використовуйте меню під цією іконкою.', - 'index_cash_account' => 'Наразі доступні лише ці рахунки. Ви можете використовувати готівковий рахунок для відстеження грошових витрат, але це не обов\'язково.', + 'index_intro' => 'Вітаємо на головній сторінці Firefly III. Будь ласка, знайдіть час, щоб пройти через цей вступ, та отримати уявлення про те, як працює Firefly II.', + 'index_accounts-chart' => 'Цей графік показує поточний баланс ваших активів. Ви можете вибрати рахунки, видимі тут, у ваших уподобаннях.', + 'index_box_out_holder' => 'Це невеличке віконце та сусідні, дасть вам швидкий огляд вашої фінансової ситуації.', + 'index_help' => 'Якщо вам коли-небудь знадобиться допомога зі сторінкою або формою, натисніть цю кнопку.', + 'index_outro' => 'Більшість сторінок Firefly III починаються з невеличкого огляду як цей. Будь ласка, зв\'яжіться зі мною, коли у вас виникнуть питання або коментарі. Насолоджуйтесь!', + 'index_sidebar-toggle' => 'Для того щоб створити транзакції, рахунки чи інші речі використовуйте меню під цією іконкою.', + 'index_cash_account' => 'Наразі доступні лише ці рахунки. Ви можете використовувати готівковий рахунок для відстеження грошових витрат, але це не обов\'язково.', // transactions - 'transactions_create_basic_info' => 'Введіть базову інформацію про транзакцію. Джерело, місце призначення, дату і опис.', - 'transactions_create_amount_info' => 'Введіть суму транзакції. Якщо потрібно поля будуть автоматично оновлюватися для зовнішньої суми.', - 'transactions_create_optional_info' => 'Всі ці поля необов\'язкові. Додавання мета-даних зробить ваші транзакції більш організованими.', - 'transactions_create_split' => 'Якщо ви хочете розділити транзакцію, додайте більше розділень з цією кнопкою', + 'transactions_create_basic_info' => 'Введіть базову інформацію про транзакцію. Джерело, місце призначення, дату і опис.', + 'transactions_create_amount_info' => 'Введіть суму транзакції. Якщо потрібно поля будуть автоматично оновлюватися для зовнішньої суми.', + 'transactions_create_optional_info' => 'Всі ці поля необов\'язкові. Додавання мета-даних зробить ваші транзакції більш організованими.', + 'transactions_create_split' => 'Якщо ви хочете розділити транзакцію, додайте більше розділень з цією кнопкою', // create account: - 'accounts_create_iban' => 'Надайте вашим рахункам дійсний IBAN. Це допоможе дуже легко імпортувати дані в майбутньому.', - 'accounts_create_asset_opening_balance' => 'Рахунки в активах можуть мати "початковий баланс", що вказує на початок історії цього рахунку в Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III підтримує декілька валют. Рахунки активів мають одну основну валюту, яку потрібно встановити тут.', - 'accounts_create_asset_virtual' => 'Іноді стане в нагоді встановити вашому рахунку віртуальний баланс: зайва сума яка завжди додається або віднімається з реального балансу.', + 'accounts_create_iban' => 'Надайте вашим рахункам дійсний IBAN. Це допоможе дуже легко імпортувати дані в майбутньому.', + 'accounts_create_asset_opening_balance' => 'Рахунки в активах можуть мати "початковий баланс", що вказує на початок історії цього рахунку в Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III підтримує декілька валют. Рахунки активів мають одну основну валюту, яку потрібно встановити тут.', + 'accounts_create_asset_virtual' => 'Іноді стане в нагоді встановити вашому рахунку віртуальний баланс: зайва сума яка завжди додається або віднімається з реального балансу.', // budgets index - 'budgets_index_intro' => 'Бюджети використовуються для управління вашими фінансами та формування одної з основних функцій Firefly III.', - 'budgets_index_set_budget' => 'Встановлюйте загальний бюджет за кожен період для того, щоб Firefly III міг повідомити вам, що ви витратили усі наявні кошти.', - 'budgets_index_see_expenses_bar' => 'Витрати коштів повільно заповнять цю планку.', - 'budgets_index_navigate_periods' => 'Змінюйте періоди, щоб легко встановити відповідний бюджет.', - 'budgets_index_new_budget' => 'Створюйте новий бюджет за доречності.', - 'budgets_index_list_of_budgets' => 'Використовуте цю таблицю для встановлення розміру кожного бюджету і відстеження балансу по них.', - 'budgets_index_outro' => 'Щоб дізнатися більше про бюджет, оберіть іконку довідки у верхньому правому куті.', + 'budgets_index_intro' => 'Бюджети використовуються для управління вашими фінансами та формування одної з основних функцій Firefly III.', + 'budgets_index_see_expenses_bar' => 'Витрати коштів повільно заповнять цю планку.', + 'budgets_index_navigate_periods' => 'Змінюйте періоди, щоб легко встановити відповідний бюджет.', + 'budgets_index_new_budget' => 'Створюйте новий бюджет за доречності.', + 'budgets_index_list_of_budgets' => 'Використовуте цю таблицю для встановлення розміру кожного бюджету і відстеження балансу по них.', + 'budgets_index_outro' => 'Щоб дізнатися більше про бюджет, оберіть іконку довідки у верхньому правому куті.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Використовуйте ці звіти, щоб отримати докладне розуміння ваших фінансів.', - 'reports_index_inputReportType' => 'Виберіть тип звіту. Перевірте довідку, щоб зрозуміти, що відображає кожен звіт.', - 'reports_index_inputAccountsSelect' => 'Ви можете виключити або включити активи, як вважаєте за потрібне.', - 'reports_index_inputDateRange' => 'Обраний діапазон дат може бути будь який: від одного дня до 10 років.', - 'reports_index_extra-options-box' => 'Залежно від обраного звіту, можна вибрати додаткові фільтри та параметри. Зверніть увагу на це поле коли потрібно змінити тип звіту.', + 'reports_index_intro' => 'Використовуйте ці звіти, щоб отримати докладне розуміння ваших фінансів.', + 'reports_index_inputReportType' => 'Виберіть тип звіту. Перевірте довідку, щоб зрозуміти, що відображає кожен звіт.', + 'reports_index_inputAccountsSelect' => 'Ви можете виключити або включити активи, як вважаєте за потрібне.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Залежно від обраного звіту, можна вибрати додаткові фільтри та параметри. Зверніть увагу на це поле коли потрібно змінити тип звіту.', // reports (reports) - 'reports_report_default_intro' => 'Даний звіт швидко і вичерпно надасть вам огляд ваших фінансів. Якщо ви хочете бачити щось інше, будь ласка, не соромтесь - зв\'яжіться зі мною!', - 'reports_report_audit_intro' => 'Цей звіт дасть вам детальну інформацію про ваші активів.', - 'reports_report_audit_optionsBox' => 'Використовуйте ці прапорці для відображення або приховування запропонованих вам стовпців.', + 'reports_report_default_intro' => 'Даний звіт швидко і вичерпно надасть вам огляд ваших фінансів. Якщо ви хочете бачити щось інше, будь ласка, не соромтесь - зв\'яжіться зі мною!', + 'reports_report_audit_intro' => 'Цей звіт дасть вам детальну інформацію про ваші активів.', + 'reports_report_audit_optionsBox' => 'Використовуйте ці прапорці для відображення або приховування запропонованих вам стовпців.', - 'reports_report_category_intro' => 'Цей звіт надасть вам уявлення в одній або декількох категоріях.', - 'reports_report_category_pieCharts' => 'Ці діаграми дадуть вам розуміння витрат і доходів по категорії або по рахунку.', - 'reports_report_category_incomeAndExpensesChart' => 'Ця діаграма показує ваші витрати та доходи по кожній категорії.', + 'reports_report_category_intro' => 'Цей звіт надасть вам уявлення в одній або декількох категоріях.', + 'reports_report_category_pieCharts' => 'Ці діаграми дадуть вам розуміння витрат і доходів по категорії або по рахунку.', + 'reports_report_category_incomeAndExpensesChart' => 'Ця діаграма показує ваші витрати та доходи по кожній категорії.', - 'reports_report_tag_intro' => 'Цей звіт надасть вам інформацію по одномі або декількох мітках.', - 'reports_report_tag_pieCharts' => 'Ці діаграми дадуть вам розуміння витрат і доходів по мітці, рахунку, категорії чи бюджету.', - 'reports_report_tag_incomeAndExpensesChart' => 'Ця діаграма показує ваші витрати та доходи по кожній мітці.', + 'reports_report_tag_intro' => 'Цей звіт надасть вам інформацію по одномі або декількох мітках.', + 'reports_report_tag_pieCharts' => 'Ці діаграми дадуть вам розуміння витрат і доходів по мітці, рахунку, категорії чи бюджету.', + 'reports_report_tag_incomeAndExpensesChart' => 'Ця діаграма показує ваші витрати та доходи по кожній мітці.', 'reports_report_budget_intro' => 'Цей звіт надасть вам інформацію по одному або декількох бюджетах.', 'reports_report_budget_pieCharts' => 'Ці діаграми дадуть вам розуміння витрат і доходів по бюджету або по рахунку.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Поряд з стовпчиком прогресу є дві кнопки (+ і -) для додавання або зняття грошей з кожної скарбнички.', 'piggy-banks_index_accountStatus' => 'Для кожного активу з хоча б одною скарбничкою, статус відображено в цій табличці.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Яка ваша мета? Нова диван, камера, гроші на надзвичайні ситуації?', 'piggy-banks_create_date' => 'Ви можете встановити цільову дату або кінцевий термін для скарбнички.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Використовуйте рахунки, щоб відслідковувати кількість грошей у кожен період. Подумайте про такі витрати, як оренда, страхування або іпотечні платежі.', 'bills_create_name' => 'Використовуйте описове ім\'я на зразок "Оренда" або "Страхування здоров\'я".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Виберіть мінімальну і максимальну суму для цього рахунку на сплату.', 'bills_create_repeat_freq_holder' => 'Більшість рахунків на сплату повторюються щомісяця, але тут ви можете встановити іншу частоту.', 'bills_create_skip_holder' => 'Якщо рахунок повторюється кожні 2 тижні, "пропуск"-поле слід ставити "1", щоб пропустити кожен інший тиждень.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Використовуйте цю кнопку, щоб побачити, які транзакції будуть відповідати вашому правилу.', 'rules_create_actions' => 'Встановіть стільки дій, скільки забажаєте.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'За цими вкладками доступні додаткові опції.', diff --git a/resources/lang/uk_UA/list.php b/resources/lang/uk_UA/list.php index a739333bc7..cdb56c41be 100644 --- a/resources/lang/uk_UA/list.php +++ b/resources/lang/uk_UA/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Кнопки', - 'icon' => 'Піктограма', - 'id' => 'Ідентифікатор', - 'create_date' => 'Створено', - 'update_date' => 'Оновлено', - 'updated_at' => 'Оновлено о', - 'balance_before' => 'Баланс до', - 'balance_after' => 'Баланс після', - 'name' => 'Назва', - 'role' => 'Роль', - 'currentBalance' => 'Поточний баланс', - 'linked_to_rules' => 'Відповідні правила', - 'active' => 'Чи активний?', - 'percentage' => 'шт.', - 'recurring_transaction' => 'Регулярні транзакції', - 'next_due' => 'Далі до', - 'transaction_type' => 'Тип', - 'lastActivity' => 'Остання операція', - 'balanceDiff' => 'Різниця балансу', - 'other_meta_data' => 'Інші мета-дані', - 'invited_at' => 'Запрошено', - 'expires' => 'Термін запрошення минає', - 'invited_by' => 'Запросив', - 'invite_link' => 'Посилання із запрошенням', - 'account_type' => 'Тип рахунку', - 'created_at' => 'Створено в', - 'account' => 'Рахунок', - 'external_url' => 'Зовнішній URL', - 'matchingAmount' => 'Сума', - 'destination' => 'Призначення', - 'source' => 'Джерело', - 'next_expected_match' => 'Наступний очікуваний збіг', - 'automatch' => 'Автоматичний збіг?', + 'buttons' => 'Кнопки', + 'icon' => 'Піктограма', + 'id' => 'Ідентифікатор', + 'create_date' => 'Створено', + 'update_date' => 'Оновлено', + 'updated_at' => 'Оновлено о', + 'balance_before' => 'Баланс до', + 'balance_after' => 'Баланс після', + 'name' => 'Назва', + 'role' => 'Роль', + 'currentBalance' => 'Поточний баланс', + 'linked_to_rules' => 'Відповідні правила', + 'active' => 'Чи активний?', + 'percentage' => 'шт.', + 'recurring_transaction' => 'Регулярні транзакції', + 'next_due' => 'Далі до', + 'transaction_type' => 'Тип', + 'lastActivity' => 'Остання операція', + 'balanceDiff' => 'Різниця балансу', + 'other_meta_data' => 'Інші мета-дані', + 'invited_at' => 'Запрошено', + 'expires' => 'Термін запрошення минає', + 'invited_by' => 'Запросив', + 'invite_link' => 'Посилання із запрошенням', + 'account_type' => 'Тип рахунку', + 'created_at' => 'Створено в', + 'account' => 'Рахунок', + 'external_url' => 'Зовнішній URL', + 'matchingAmount' => 'Сума', + 'destination' => 'Призначення', + 'source' => 'Джерело', + 'next_expected_match' => 'Наступний очікуваний збіг', + 'automatch' => 'Автоматичний збіг?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Повтор', 'description' => 'Опис', 'amount' => 'Сума', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Рахунок з bunq', 'file_name' => 'Ім\'я файлу', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Розмір файлу', - 'file_type' => 'Тип файлу', - 'attached_to' => 'Прикріплено до', - 'file_exists' => 'Файл існує', - 'spectre_bank' => 'Банк', - 'spectre_last_use' => 'Останній вхід в систему', - 'spectre_status' => 'Стан', - 'bunq_payment_id' => 'ідентифікатор платежу bunq', - 'repetitions' => 'Повторення', - 'title' => 'Назва', - 'transaction_s' => 'Транзакція(ї)', - 'field' => 'Поле', - 'value' => 'Значення', - 'interest' => 'Відсотки', - 'interest_period' => 'Період нарахування відсотків', - 'liability_type' => 'Тип пасиву', - 'liability_direction' => 'Відповідальність в/без', - 'end_date' => 'Дата завершення', - 'payment_info' => 'Платіжна інформація', - 'expected_info' => 'Наступна очікувана операція', - 'start_date' => 'Дата початку', - 'trigger' => 'Тригер', - 'response' => 'Відповідь', - 'delivery' => 'Доставка', - 'url' => 'URL-адреса', - 'secret' => 'Секрет', - + 'file_size' => 'Розмір файлу', + 'file_type' => 'Тип файлу', + 'attached_to' => 'Прикріплено до', + 'file_exists' => 'Файл існує', + 'spectre_bank' => 'Банк', + 'spectre_last_use' => 'Останній вхід в систему', + 'spectre_status' => 'Стан', + 'bunq_payment_id' => 'ідентифікатор платежу bunq', + 'repetitions' => 'Повторення', + 'title' => 'Назва', + 'transaction_s' => 'Транзакція(ї)', + 'field' => 'Поле', + 'value' => 'Значення', + 'interest' => 'Відсотки', + 'interest_period' => 'Період нарахування відсотків', + 'liability_type' => 'Тип пасиву', + 'liability_direction' => 'Відповідальність в/без', + 'end_date' => 'Дата завершення', + 'payment_info' => 'Платіжна інформація', + 'expected_info' => 'Наступна очікувана операція', + 'start_date' => 'Дата початку', + 'trigger' => 'Тригер', + 'response' => 'Відповідь', + 'delivery' => 'Доставка', + 'url' => 'URL-адреса', + 'secret' => 'Секрет', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/uk_UA/pagination.php b/resources/lang/uk_UA/pagination.php index 85820a1b5f..32863c5308 100644 --- a/resources/lang/uk_UA/pagination.php +++ b/resources/lang/uk_UA/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/uk_UA/passwords.php b/resources/lang/uk_UA/passwords.php index 0f79355492..f717d4e863 100644 --- a/resources/lang/uk_UA/passwords.php +++ b/resources/lang/uk_UA/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/uk_UA/rules.php b/resources/lang/uk_UA/rules.php index 40b8656962..c23b6a89b3 100644 --- a/resources/lang/uk_UA/rules.php +++ b/resources/lang/uk_UA/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/uk_UA/validation.php b/resources/lang/uk_UA/validation.php index 5648a47f5e..85daa519c6 100644 --- a/resources/lang/uk_UA/validation.php +++ b/resources/lang/uk_UA/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => 'Це не коректний IBAN.', - 'zero_or_more' => 'Це значення не може бути від’ємним.', - 'date_or_time' => 'Значення має бути правильним датою або часом (ISO 8601).', - 'source_equals_destination' => 'Початковий рахунок дорівнює рахунку призначення.', - 'unique_account_number_for_user' => 'Схоже, цей номер рахунку вже використовується.', - 'unique_iban_for_user' => 'Схоже, цей номер рахунку (IBAN) вже використовується.', - 'deleted_user' => 'Через обмеження безпеки ви не можете зареєструвати цю електронну адресу.', - 'rule_trigger_value' => 'Це значення неправильне для вибраного тригера.', - 'rule_action_value' => 'Це значення є неприпустимим для вибраної дії.', - 'file_already_attached' => 'Файл ":name" вже прикріплено до цього об\'єкта.', - 'file_attached' => 'Успішно завантажено файл ":name".', - 'must_exist' => 'ID в полі :attribute не існує в базі даних.', - 'all_accounts_equal' => 'Всі рахунки в цьому полі повинні бути рівні.', - 'group_title_mandatory' => 'Назва групи є обов\'язковою при наявності більше однієї транзакції.', - 'transaction_types_equal' => 'Всі розділи повинні мати однаковий тип.', - 'invalid_transaction_type' => 'Некоректний тип транзакції.', - 'invalid_selection' => 'Ваш вибір є неприпустимим.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Потрібна хоча б одна транзакція.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Потрібно принаймні одне повторення.', - 'require_repeat_until' => 'Потрібно вказати або кількість повторювань, або кінцеву дату (repeat_until). Але не обидва параметри разом.', - 'require_currency_info' => 'Вміст цього поля є недійсним без інформації про валюту.', - 'not_transfer_account' => 'Цей рахунок не є рахунком, який може бути використаний для переказу.', - 'require_currency_amount' => 'Вміст цього поля є недійсним без інформації про валюту.', - 'require_foreign_currency' => 'Це поле має бути числом', - 'require_foreign_dest' => 'Це значення поля повинне відповідати валюті рахунку призначення.', - 'require_foreign_src' => 'Це значення поля повинне відповідати валюті вихідного рахунку.', - 'equal_description' => 'Опис транзакції має відрізнятися від глобального опису.', - 'file_invalid_mime' => 'Файл ":name" має заборонений для завантаження тип ":mime".', - 'file_too_large' => 'Файл ":name" надто великий.', - 'belongs_to_user' => 'Значення поля :attribute невідоме.', - 'accepted' => ':attribute має бути прийнятий.', - 'bic' => 'Це не коректний BIC.', - 'at_least_one_trigger' => 'Правило має мати принаймні одну умову.', - 'at_least_one_active_trigger' => 'Правило має мати принаймні одну умову.', - 'at_least_one_action' => 'Правило має мати принаймні одну дію.', - 'at_least_one_active_action' => 'Правило має мати принаймні одну дію.', - 'base64' => 'Base64 будьласка! Помилка розпізнавання.', - 'model_id_invalid' => 'Вказаний ID здається недійсним для цієї моделі.', - 'less' => 'Поле :attribute має бути менше 10,000,000', - 'active_url' => ':attribute є не допустимою URL-адресою.', - 'after' => ':attribute має бути після :date.', - 'date_after' => 'Дата початку має бути раніше дати завершення.', - 'alpha' => ':attribute має містити лише літери.', - 'alpha_dash' => ':attribute має містити лише букви, цифри та тире.', - 'alpha_num' => ':attribute має містити лише літери та цифри.', - 'array' => ':attribute має бути масивом.', - 'unique_for_user' => 'Запис :attribute уже існує.', - 'before' => ':attribute має бути датою до :date.', - 'unique_object_for_user' => 'Ім\'я вже використовується.', - 'unique_account_for_user' => 'Така назва рахунку вже існує.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => 'Це не коректний IBAN.', + 'zero_or_more' => 'Це значення не може бути від’ємним.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Значення має бути правильним датою або часом (ISO 8601).', + 'source_equals_destination' => 'Початковий рахунок дорівнює рахунку призначення.', + 'unique_account_number_for_user' => 'Схоже, цей номер рахунку вже використовується.', + 'unique_iban_for_user' => 'Схоже, цей номер рахунку (IBAN) вже використовується.', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => 'Через обмеження безпеки ви не можете зареєструвати цю електронну адресу.', + 'rule_trigger_value' => 'Це значення неправильне для вибраного тригера.', + 'rule_action_value' => 'Це значення є неприпустимим для вибраної дії.', + 'file_already_attached' => 'Файл ":name" вже прикріплено до цього об\'єкта.', + 'file_attached' => 'Успішно завантажено файл ":name".', + 'must_exist' => 'ID в полі :attribute не існує в базі даних.', + 'all_accounts_equal' => 'Всі рахунки в цьому полі повинні бути рівні.', + 'group_title_mandatory' => 'Назва групи є обов\'язковою при наявності більше однієї транзакції.', + 'transaction_types_equal' => 'Всі розділи повинні мати однаковий тип.', + 'invalid_transaction_type' => 'Некоректний тип транзакції.', + 'invalid_selection' => 'Ваш вибір є неприпустимим.', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => 'Потрібна хоча б одна транзакція.', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Потрібно принаймні одне повторення.', + 'require_repeat_until' => 'Потрібно вказати або кількість повторювань, або кінцеву дату (repeat_until). Але не обидва параметри разом.', + 'require_currency_info' => 'Вміст цього поля є недійсним без інформації про валюту.', + 'not_transfer_account' => 'Цей рахунок не є рахунком, який може бути використаний для переказу.', + 'require_currency_amount' => 'Вміст цього поля є недійсним без інформації про валюту.', + 'require_foreign_currency' => 'Це поле має бути числом', + 'require_foreign_dest' => 'Це значення поля повинне відповідати валюті рахунку призначення.', + 'require_foreign_src' => 'Це значення поля повинне відповідати валюті вихідного рахунку.', + 'equal_description' => 'Опис транзакції має відрізнятися від глобального опису.', + 'file_invalid_mime' => 'Файл ":name" має заборонений для завантаження тип ":mime".', + 'file_too_large' => 'Файл ":name" надто великий.', + 'belongs_to_user' => 'Значення поля :attribute невідоме.', + 'accepted' => ':attribute має бути прийнятий.', + 'bic' => 'Це не коректний BIC.', + 'at_least_one_trigger' => 'Правило має мати принаймні одну умову.', + 'at_least_one_active_trigger' => 'Правило має мати принаймні одну умову.', + 'at_least_one_action' => 'Правило має мати принаймні одну дію.', + 'at_least_one_active_action' => 'Правило має мати принаймні одну дію.', + 'base64' => 'Base64 будьласка! Помилка розпізнавання.', + 'model_id_invalid' => 'Вказаний ID здається недійсним для цієї моделі.', + 'less' => 'Поле :attribute має бути менше 10,000,000', + 'active_url' => ':attribute є не допустимою URL-адресою.', + 'after' => ':attribute має бути після :date.', + 'date_after' => 'Дата початку має бути раніше дати завершення.', + 'alpha' => ':attribute має містити лише літери.', + 'alpha_dash' => ':attribute має містити лише букви, цифри та тире.', + 'alpha_num' => ':attribute має містити лише літери та цифри.', + 'array' => ':attribute має бути масивом.', + 'unique_for_user' => 'Запис :attribute уже існує.', + 'before' => ':attribute має бути датою до :date.', + 'unique_object_for_user' => 'Ім\'я вже використовується.', + 'unique_account_for_user' => 'Така назва рахунку вже існує.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + '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 не збігається.', + 'date' => ':attribute не є коректною датою.', + 'date_format' => 'Значення :attribute не відповідає формату :format.', + 'different' => ':attribute має відрізнятися від :other.', + 'digits' => 'Довжина цифрового поля :attribute повинна бути :digits.', + 'digits_between' => ':attribute має містити від :min до :max цифр.', + 'email' => ':attribute має бути дійсною адресою e-mail.', + 'filled' => 'Поле :attribute обов\'язкове.', + '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' => 'Поле :attribute має бути принаймні :min символів.', + 'min.array' => 'Поле :attribute має містити принаймні :min елементів.', + 'not_in' => 'Обраний :attribute недійсний.', + 'numeric' => ':attribute має бути числом.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Сума повинна бути числом.', + 'numeric_destination' => 'Сума призначення повинна бути числом.', + 'numeric_source' => 'Вихідна сума повинна бути числом.', + 'regex' => 'Неприпустимий формат поля :attribute.', + 'required' => 'Поле :attribute обов\'язкове.', + 'required_if' => 'Поле :attribute є обов\'язковим для заповнення, коли :other є рівним :value.', + 'required_unless' => 'Поле :attribute є обов\'язковим для заповнення, коли :other відрізняється від :values.', + 'required_with' => 'Поле :attribute є обов\'язковим для заповнення, коли є :values.', + 'required_with_all' => 'Поле :attribute є обов\'язковим для заповнення, коли є :values.', + 'required_without' => 'Поле :attribute обов\'язкове коли :values відсутнє.', + 'required_without_all' => 'Поле :attribute обов\'язкове коли жодне зі значень :values не існує.', + 'same' => ':attribute i :other мають спiвпадати.', + 'size.numeric' => ':attribute має бути довжиною :size.', + 'amount_min_over_max' => 'Мінімальна сума не може бути більшою за максимальну суму.', + 'size.file' => ':attribute має бути :size кілобайт.', + 'size.string' => ':attribute має бути довжиною :size символів.', + 'size.array' => 'Поле :attribute повинно мати :size елементів.', + 'unique' => ':attribute вже зайнятий.', + 'string' => 'Поле :attribute повинне містити текст.', + 'url' => 'Неприпустимий формат поля :attribute.', + 'timezone' => ':attribute має знаходитися у відповідних межах.', + '2fa_code' => 'Поле :attribute неправильне.', + 'dimensions' => ':attribute містить неприпустимі розміри зображення.', + 'distinct' => ':attribute містить дубльоване значення.', + 'file' => ':attribute повинен бути файлом.', + 'in_array' => 'Поле :attribute не існує в :other.', + 'present' => ':attribute обов\'язкоове.', + 'amount_zero' => 'Загальна сума не може бути нульовою.', + 'current_target_amount' => 'Поточна сума повинна бути меншою, ніж цільова сума.', + 'unique_piggy_bank_for_user' => 'Назва скарбнички має бути унікальною.', + 'unique_object_group' => 'Назва групи повинна бути унікальною', + 'starts_with' => 'Значення має починатися з :values.', + 'unique_webhook' => 'У вас вже є веб хук з цією комбінацією URL, тригера, відповіді та доставкою.', + 'unique_existing_webhook' => 'У вас вже є інший веб хук з цією комбінацією URL, тригера, відповіді та доставкою.', + 'same_account_type' => 'Обидва рахунки повинні бути того самого типу', + 'same_account_currency' => 'Обидва рахунки повинні мати однакові налаштування валюти', - '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 не збігається.', - 'date' => ':attribute не є коректною датою.', - 'date_format' => 'Значення :attribute не відповідає формату :format.', - 'different' => ':attribute має відрізнятися від :other.', - 'digits' => 'Довжина цифрового поля :attribute повинна бути :digits.', - 'digits_between' => ':attribute має містити від :min до :max цифр.', - 'email' => ':attribute має бути дійсною адресою e-mail.', - 'filled' => 'Поле :attribute обов\'язкове.', - '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' => 'Поле :attribute має бути принаймні :min символів.', - 'min.array' => 'Поле :attribute має містити принаймні :min елементів.', - 'not_in' => 'Обраний :attribute недійсний.', - 'numeric' => ':attribute має бути числом.', - 'numeric_native' => 'Сума повинна бути числом.', - 'numeric_destination' => 'Сума призначення повинна бути числом.', - 'numeric_source' => 'Вихідна сума повинна бути числом.', - 'regex' => 'Неприпустимий формат поля :attribute.', - 'required' => 'Поле :attribute обов\'язкове.', - 'required_if' => 'Поле :attribute є обов\'язковим для заповнення, коли :other є рівним :value.', - 'required_unless' => 'Поле :attribute є обов\'язковим для заповнення, коли :other відрізняється від :values.', - 'required_with' => 'Поле :attribute є обов\'язковим для заповнення, коли є :values.', - 'required_with_all' => 'Поле :attribute є обов\'язковим для заповнення, коли є :values.', - 'required_without' => 'Поле :attribute обов\'язкове коли :values відсутнє.', - 'required_without_all' => 'Поле :attribute обов\'язкове коли жодне зі значень :values не існує.', - 'same' => ':attribute i :other мають спiвпадати.', - 'size.numeric' => ':attribute має бути довжиною :size.', - 'amount_min_over_max' => 'Мінімальна сума не може бути більшою за максимальну суму.', - 'size.file' => ':attribute має бути :size кілобайт.', - 'size.string' => ':attribute має бути довжиною :size символів.', - 'size.array' => 'Поле :attribute повинно мати :size елементів.', - 'unique' => ':attribute вже зайнятий.', - 'string' => 'Поле :attribute повинне містити текст.', - 'url' => 'Неприпустимий формат поля :attribute.', - 'timezone' => ':attribute має знаходитися у відповідних межах.', - '2fa_code' => 'Поле :attribute неправильне.', - 'dimensions' => ':attribute містить неприпустимі розміри зображення.', - 'distinct' => ':attribute містить дубльоване значення.', - 'file' => ':attribute повинен бути файлом.', - 'in_array' => 'Поле :attribute не існує в :other.', - 'present' => ':attribute обов\'язкоове.', - 'amount_zero' => 'Загальна сума не може бути нульовою.', - 'current_target_amount' => 'Поточна сума повинна бути меншою, ніж цільова сума.', - 'unique_piggy_bank_for_user' => 'Назва скарбнички має бути унікальною.', - 'unique_object_group' => 'Назва групи повинна бути унікальною', - 'starts_with' => 'Значення має починатися з :values.', - 'unique_webhook' => 'У вас вже є веб хук з цією комбінацією URL, тригера, відповіді та доставкою.', - 'unique_existing_webhook' => 'У вас вже є інший веб хук з цією комбінацією URL, тригера, відповіді та доставкою.', - 'same_account_type' => 'Обидва рахунки повинні бути того самого типу', - 'same_account_currency' => 'Обидва рахунки повинні мати однакові налаштування валюти', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Це не надійний пароль. Будь ласка, спробуйте інший. Для отримання додаткової інформації, відвідайте https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Неприпустимий тип для повторюваних транзакцій.', - 'valid_recurrence_rep_moment' => 'Невірний період повторення для цого типу повторення.', - 'invalid_account_info' => 'Невірні дані рахунка.', - 'attributes' => [ + 'secure_password' => 'Це не надійний пароль. Будь ласка, спробуйте інший. Для отримання додаткової інформації, відвідайте https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Неприпустимий тип для повторюваних транзакцій.', + 'valid_recurrence_rep_moment' => 'Невірний період повторення для цого типу повторення.', + 'invalid_account_info' => 'Невірні дані рахунка.', + 'attributes' => [ 'email' => 'eлектронна адреса', 'description' => 'опис', 'amount' => 'сума', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Щоб продовжити, необхідно вказати дійсний ID рахунку і/або його назву.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Не вдалося знайти дійсний рахунок з ID ":id" або іменем ":name".', + 'withdrawal_source_need_data' => 'Щоб продовжити, необхідно вказати дійсний ID рахунку і/або його назву.', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => 'Не вдалося знайти дійсний рахунок з ID ":id" або іменем ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Щоб продовжити, необхідно вказати дійсний ID вихідного рахунку і/або його назву.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Не вдалося знайти дійсний рахунок призначення з ID ":id" або іменем ":name".', - 'deposit_dest_wrong_type' => 'Збережений рахунок призначення - некоректний.', + 'deposit_source_need_data' => 'Щоб продовжити, необхідно вказати дійсний ID вихідного рахунку і/або його назву.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Не вдалося знайти дійсний рахунок призначення з ID ":id" або іменем ":name".', + 'deposit_dest_wrong_type' => 'Збережений рахунок призначення - некоректний.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Щоб продовжити, необхідно вказати дійсний ID вихідного рахунку і/або його назву.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Не вдалося знайти дійсний рахунок призначення з ID ":id" або іменем ":name".', + 'need_id_in_edit' => 'Кожна розділена транзакція повинна мати transaction_journal_id (дійсний ID або 0).', - 'transfer_source_need_data' => 'Щоб продовжити, необхідно вказати дійсний ID вихідного рахунку і/або його назву.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Не вдалося знайти дійсний рахунок призначення з ID ":id" або іменем ":name".', - 'need_id_in_edit' => 'Кожна розділена транзакція повинна мати transaction_journal_id (дійсний ID або 0).', + 'ob_source_need_data' => 'Щоб продовжити, необхідно вказати дійсний ID вихідного рахунку і/або його назву.', + 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Не вдалося знайти дійсний рахунок призначення з ID ":id" або іменем ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Щоб продовжити, необхідно вказати дійсний ID вихідного рахунку і/або його назву.', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Не вдалося знайти дійсний рахунок призначення з ID ":id" або іменем ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Ви не можете використовувати цей рахунок як вихідний.', + 'generic_invalid_destination' => 'Ви не можете використовувати цей рахунок як призначення.', - 'generic_invalid_source' => 'Ви не можете використовувати цей рахунок як вихідний.', - 'generic_invalid_destination' => 'Ви не можете використовувати цей рахунок як призначення.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'Поле :attribute має дорівнювати чи бути більше ніж :value.', - 'gt.numeric' => 'Значення :attribute має бути більше за :value.', - 'gte.file' => 'Поле :attribute має дорівнювати чи бути більше ніж :value кілобайт.', - 'gte.string' => 'Кількість символів поля :attribute повинно бути більше або дорівнювати :value.', - 'gte.array' => 'Поле :attribute має містити :value чи більше елементів.', + 'gte.numeric' => 'Поле :attribute має дорівнювати чи бути більше ніж :value.', + 'gt.numeric' => 'Значення :attribute має бути більше за :value.', + 'gte.file' => 'Поле :attribute має дорівнювати чи бути більше ніж :value кілобайт.', + 'gte.string' => 'Кількість символів поля :attribute повинно бути більше або дорівнювати :value.', + 'gte.array' => 'Поле :attribute має містити :value чи більше елементів.', 'amount_required_for_auto_budget' => 'Необхідно вказати суму.', 'auto_budget_amount_positive' => 'Сума має бути більше нуля.', + 'auto_budget_period_mandatory' => 'Автоматичний період бюджета - обов\'язкове поле.', // no access to administration: diff --git a/resources/lang/vi_VN/api.php b/resources/lang/vi_VN/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/vi_VN/api.php +++ b/resources/lang/vi_VN/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/vi_VN/auth.php b/resources/lang/vi_VN/auth.php index 30c8865ae4..ee2d55a6bc 100644 --- a/resources/lang/vi_VN/auth.php +++ b/resources/lang/vi_VN/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => 'Thông tin đăng nhập không đúng.', 'throttle' => 'Đăng nhập thất bại nhiều lần. Vui lòng thử lại sau :seconds.', diff --git a/resources/lang/vi_VN/breadcrumbs.php b/resources/lang/vi_VN/breadcrumbs.php index 66e04c573f..50827ceac9 100644 --- a/resources/lang/vi_VN/breadcrumbs.php +++ b/resources/lang/vi_VN/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => 'Trang chủ', - 'budgets' => 'Ngân sách', - 'subscriptions' => 'Đăng ký nhận thông tin', - 'transactions' => 'Giao dịch', - 'title_expenses' => 'Chi phí', - 'title_withdrawal' => 'Chi phí', - 'title_revenue' => 'Thu nhập doanh thu', - 'title_deposit' => 'Thu nhập doanh thu', - 'title_transfer' => 'Chuyển', - 'title_transfers' => 'Chuyển', - 'edit_currency' => 'Sửa tiền tệ ":name"', - 'delete_currency' => 'Xóa tiền tệ ":name"', - 'newPiggyBank' => 'Tạo mới heo đất', - 'edit_piggyBank' => 'Sửa heo đất ":name"', - 'preferences' => 'Quyền ưu tiên', - 'profile' => 'Hồ sơ', - 'accounts' => 'Tài khoản', - 'changePassword' => 'Đổi mật khẩu', - 'change_email' => 'Đổi địa chỉ email', - 'bills' => 'Hóa đơn', - 'newBill' => 'Hóa đơn mới', - 'edit_bill' => 'Sửa hóa đơn ":name"', - 'delete_bill' => 'Xóa hóa đơn ":name"', - 'reports' => 'Báo cáo', - 'search_result' => 'Tìm kết quả cho ":query"', - 'withdrawal_list' => 'Chi phí', - 'Withdrawal_list' => 'Chi phí', - 'deposit_list' => 'Doanh thu, thu nhập và tiền gửi', - 'transfer_list' => 'Chuyển', - 'transfers_list' => 'Chuyển', + 'home' => 'Trang chủ', + 'budgets' => 'Ngân sách', + 'subscriptions' => 'Đăng ký nhận thông tin', + 'transactions' => 'Giao dịch', + 'title_expenses' => 'Chi phí', + 'title_withdrawal' => 'Chi phí', + 'title_revenue' => 'Thu nhập doanh thu', + 'title_deposit' => 'Thu nhập doanh thu', + 'title_transfer' => 'Chuyển', + 'title_transfers' => 'Chuyển', + 'edit_currency' => 'Sửa tiền tệ ":name"', + 'delete_currency' => 'Xóa tiền tệ ":name"', + 'newPiggyBank' => 'Tạo mới heo đất', + 'edit_piggyBank' => 'Sửa heo đất ":name"', + 'preferences' => 'Quyền ưu tiên', + 'profile' => 'Hồ sơ', + 'accounts' => 'Tài khoản', + 'changePassword' => 'Đổi mật khẩu', + 'change_email' => 'Đổi địa chỉ email', + 'bills' => 'Hóa đơn', + 'newBill' => 'Hóa đơn mới', + 'edit_bill' => 'Sửa hóa đơn ":name"', + 'delete_bill' => 'Xóa hóa đơn ":name"', + 'reports' => 'Báo cáo', + 'search_result' => 'Tìm kết quả cho ":query"', + 'withdrawal_list' => 'Chi phí', + 'Withdrawal_list' => 'Chi phí', + 'deposit_list' => 'Doanh thu, thu nhập và tiền gửi', + 'transfer_list' => 'Chuyển', + 'transfers_list' => 'Chuyển', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => 'Hòa giải', 'create_withdrawal' => 'Tạo rút tiền mới', 'create_deposit' => 'Tạo gửi tiền mới', diff --git a/resources/lang/vi_VN/components.php b/resources/lang/vi_VN/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/vi_VN/components.php +++ b/resources/lang/vi_VN/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/vi_VN/config.php b/resources/lang/vi_VN/config.php index 2d2902a7b3..92e3e62860 100644 --- a/resources/lang/vi_VN/config.php +++ b/resources/lang/vi_VN/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'vi', - 'locale' => 'vi, Vietnamese, vi_VN.utf8, vi_VN.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'vi', + 'locale' => 'vi, Vietnamese, vi_VN.utf8, vi_VN.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'MMM YYYY', - 'month_and_day_fns' => 'MMMM d, y', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'MMM YYYY', + 'month_and_day_fns' => 'MMMM d, y', + 'month_and_day_js' => 'D MMMM YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'dddd MMMM Do, YYYY', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'dddd D MMMM YYYY', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'MMMM Do', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'D MMMM', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'D MMMM YYYY, @ HH:mm:ss', + 'date_time_fns' => 'd MMMM yyyy @ HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => '[Week] W, GGGG', + 'week_in_year_fns' => "'Tuần' w, yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => '[Week] W, GGGG', - 'week_in_year_fns' => "'Tuần' w, yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => 'Thứ 2', - 'dow_2' => 'Thứ 3', - 'dow_3' => 'Thứ 4', - 'dow_4' => 'Thứ 5', - 'dow_5' => 'Thứ 6', - 'dow_6' => 'Thứ 7', - 'dow_7' => 'Chủ nhật', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => 'Thứ 2', + 'dow_2' => 'Thứ 3', + 'dow_3' => 'Thứ 4', + 'dow_4' => 'Thứ 5', + 'dow_5' => 'Thứ 6', + 'dow_6' => 'Thứ 7', + 'dow_7' => 'Chủ nhật', ]; /* diff --git a/resources/lang/vi_VN/demo.php b/resources/lang/vi_VN/demo.php index 9b5cf26b85..06cb82e3db 100644 --- a/resources/lang/vi_VN/demo.php +++ b/resources/lang/vi_VN/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/vi_VN/email.php b/resources/lang/vi_VN/email.php index cac99c8dfe..f34c8040bb 100644 --- a/resources/lang/vi_VN/email.php +++ b/resources/lang/vi_VN/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => 'Một thông báo kiểm tra từ bản cài đặt Firefly III của bạn', 'admin_test_body' => 'Đây là một thông báo thử nghiệm từ Firefly III của bạn. Nó đã được gửi đến :email.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => 'An invitation has been created', 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => 'Thiết lập lại mật khẩu đăng nhập:', 'registered_doc_link' => 'Tài Liệu:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => 'A new Firefly III version is available', @@ -146,8 +143,9 @@ return [ 'error_github_text' => 'Nếu bạn thích, bạn cũng có thể mở một vấn đề mới trên https://github.com/firefly-iii/firefly-iii/issues.', 'error_stacktrace_below' => 'Các stacktrace đầy đủ bên dưới:', 'error_headers' => 'Các tiêu đề sau cũng có thể có liên quan:', + 'error_post' => 'This was submitted by the user:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III đã tạo một giao dịch mới | Firefly III đã tạo: :count các giao dịch mới', 'new_journals_header' => 'Firefly III đã tạo ra một giao dịch cho bạn. Bạn có thể tìm thấy nó trong bản cài đặt Firefly III: | Firefly III đã tạo :count giao dịch cho bạn. Bạn có thể tìm thấy chúng trong bản cài đặt Firefly III:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', 'bill_warning_please_action' => 'Please take the appropriate action.', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/vi_VN/errors.php b/resources/lang/vi_VN/errors.php index 7c75c18f81..c8a9fdb861 100644 --- a/resources/lang/vi_VN/errors.php +++ b/resources/lang/vi_VN/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,14 +44,14 @@ return [ 'be_right_back' => 'Sẽ quay lại ngay!', 'check_back' => 'Firefly III ngừng hoạt động để bảo trì. Vui lòng kiểm tra lại sau một giây.', 'error_occurred' => 'Rất tiếc! Lỗi xảy ra.', - 'db_error_occurred' => 'Whoops! A database error occurred.', + 'db_error_occurred' => 'Ây dà! Có lỗi trong cơ sở dữ liệu.', 'error_not_recoverable' => 'Thật không may, lỗi này không thể phục hồi :(. Firefly III đã bị hỏng. Lỗi là:', 'error' => 'Lỗi', 'error_location' => 'Lỗi này xảy ra trong tập tin :file dòng :line code :code.', 'stacktrace' => 'Stack trace', 'more_info' => 'Thông tin thêm', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Vui lòng thu thập thêm thông tin trong storage/logs nơi bạn lưu file log.', - 'collect_info_more' => 'Bạn có thể đọc thêm về việc thu thập thông tin lỗi trong the FAQ.', - 'github_help' => 'Nhận trợ giúp trên GitHub', - 'github_instructions' => 'Nếu bạn chắc chắn trang này tồn tại, vui lòng mở một yêu cầu trên GitHub.', - 'use_search' => 'Sử dụng tìm kiếm!', - 'include_info' => 'Bao gồm thông tin từ trang debug.', - 'tell_more' => 'Hãy nói với chúng tôi nhiều hơn "nó nói Rất tiếc!"', - 'include_logs' => 'Bao gồm các bản ghi lỗi (xem ở trên).', - 'what_did_you_do' => 'Hãy cho chúng tôi biết những gì bạn đã làm.', - 'offline_header' => 'Bạn có thể đang ngoại tuyến', - 'offline_unreachable' => 'Không thể truy cập Firefly III. Thiết bị của bạn hiện đang ngoại tuyến hoặc máy chủ không hoạt động.', - 'offline_github' => 'Nếu bạn chắc chắn cả thiết bị của mình và máy chủ đều trực tuyến, vui lòng tạo một yêu cầu hỗ trợ tại GitHub.', - + 'collect_info' => 'Vui lòng thu thập thêm thông tin trong storage/logs nơi bạn lưu file log.', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Nhận trợ giúp trên GitHub', + 'github_instructions' => 'Nếu bạn chắc chắn trang này tồn tại, vui lòng mở một yêu cầu trên GitHub.', + 'use_search' => 'Sử dụng tìm kiếm!', + 'include_info' => 'Bao gồm thông tin từ trang debug.', + 'tell_more' => 'Hãy nói với chúng tôi nhiều hơn "nó nói Rất tiếc!"', + 'include_logs' => 'Bao gồm các bản ghi lỗi (xem ở trên).', + 'what_did_you_do' => 'Hãy cho chúng tôi biết những gì bạn đã làm.', + 'offline_header' => 'Bạn có thể đang ngoại tuyến', + 'offline_unreachable' => 'Không thể truy cập Firefly III. Thiết bị của bạn hiện đang ngoại tuyến hoặc máy chủ không hoạt động.', + 'offline_github' => 'Nếu bạn chắc chắn cả thiết bị của mình và máy chủ đều trực tuyến, vui lòng tạo một yêu cầu hỗ trợ tại GitHub.', ]; diff --git a/resources/lang/vi_VN/firefly.php b/resources/lang/vi_VN/firefly.php index 6c6942af40..ce02422339 100644 --- a/resources/lang/vi_VN/firefly.php +++ b/resources/lang/vi_VN/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => 'Đóng', - 'actions' => 'Hành động', - 'edit' => 'Sửa', - 'delete' => 'Xóa', - 'split' => 'Chia ra', - 'single_split' => 'Chia ra', - 'clone' => 'Nhân ra', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => 'Bảy ngày gần đây', - 'last_thirty_days' => 'Ba mươi ngày gần đây', - 'last_180_days' => '180 ngày qua', - 'month_to_date' => 'Month to date', - 'year_to_date' => 'Year to date', - 'YTD' => 'YTD', - 'welcome_back' => 'Chào mừng trở lại?', - 'everything' => 'Tất cả mọi thứ', - 'today' => 'hôm nay', - 'customRange' => 'Chọn trong khoảng', - 'date_range' => 'Khoảng thời gian', - 'apply' => 'Áp dụng', - 'select_date' => 'Chọn ngày..', - 'cancel' => 'Hủy', - 'from' => 'Từ', - 'to' => 'Đến', - 'structure' => 'Kết cấu', - 'help_translating' => 'Văn bản trợ giúp này hiện chưa hỗ trợ ngôn ngữ của bạn. Bạn sẽ dịch giúp chứ?', - 'showEverything' => 'Hiện mọi thứ', - 'never' => 'Không bao giờ', - 'no_results_for_empty_search' => 'Không tìm gặp thứ bạn cần tìm.', - 'removed_amount' => 'Đã xóa :amount', - 'added_amount' => 'Đã thêm :amount', - 'asset_account_role_help' => 'Bất kỳ tùy chọn bổ sung nào do bạn chọn có thể được đặt sau.', - 'Opening balance' => 'Số dư đầu kỳ', - 'create_new_stuff' => 'Tạo công cụ mới', - 'new_withdrawal' => 'Rút tiền mới', - 'create_new_transaction' => 'Tạo giao dịch mới', - 'sidebar_frontpage_create' => 'Tạo', - 'new_transaction' => 'Giao dịch mới', - 'no_rules_for_bill' => 'Hóa đơn này không có quy tắc nào liên quan đến nó.', - 'go_to_asset_accounts' => 'Xem tài khoản của bạn', - 'go_to_budgets' => 'Chuyển đến ngân sách của bạn', - 'go_to_withdrawals' => 'Chuyển đến mục rút tiền của bạn', - 'clones_journal_x' => 'Giao dịch này là một bản sao của ":description" (#:id)', - 'go_to_categories' => 'Đi đến danh mục của bạn', - 'go_to_bills' => 'Đi đến hóa đơn của bạn', - 'go_to_expense_accounts' => 'Xem tài khoản chi phí của bạn', - 'go_to_revenue_accounts' => 'Xem tài khoản doanh thu của bạn', - 'go_to_piggies' => 'Tới heo đất của bạn', - 'new_deposit' => 'Tiền gửi mới', - 'new_transfer' => 'Chuyển khoản mới', - 'new_transfers' => 'Chuyển khoản mới', - 'new_asset_account' => 'tài khoản mới', - 'new_expense_account' => 'Tài khoản chi phí mới', - 'new_revenue_account' => 'Tài khoản doanh thu mới', - 'new_liabilities_account' => 'Nợ mới', - 'new_budget' => 'Ngân sách mới', - 'new_bill' => 'Hóa đơn mới', - 'block_account_logout' => 'Bạn đã đăng xuất. Tài khoản bị chặn không thể sử dụng. Bạn đã đăng ký với một địa chỉ email hợp lệ?', - 'flash_success' => 'Thành công!', - 'flash_info' => 'Tin nhắn', - 'flash_warning' => 'Cảnh báo!', - 'flash_error' => 'Lỗi!', - 'flash_danger' => 'Nguy hiểm!', - 'flash_info_multiple' => 'Có tin nhắn :tin nhắn', - 'flash_error_multiple' => 'Có lỗi :lỗi', - 'net_worth' => 'Tài sản thực', - 'help_for_this_page' => 'Trợ giúp cho trang này', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => 'Xin chào!', - 'two_factor_enter_code' => 'Để tiếp tục, vui lòng nhập mã xác thực hai yếu tố của bạn. Ứng dụng của bạn có thể tạo ra nó cho bạn.', - 'two_factor_code_here' => 'Nhập mã vào đây', - 'two_factor_title' => 'Xác thực hai yếu tố', - 'authenticate' => 'Xác thực', - 'two_factor_forgot_title' => 'Mất xác thực hai yếu tố', - 'two_factor_forgot' => 'Tôi quên mất hai yếu tố.', - 'two_factor_lost_header' => 'Mất xác thực hai yếu tố của bạn?', - 'two_factor_lost_intro' => 'Nếu bạn bị mất mã dự phòng. Bạn có hai lựa chọn.', - 'two_factor_lost_fix_self' => 'Nếu bạn chạy phiên bản Firefly III của riêng mình, hãy kiểm tra nhật ký trong storage/logs để được hướng dẫn, hoặc chạy docker logs <container_id> để xem hướng dẫn (làm mới trang này).', - 'two_factor_lost_fix_owner' => 'Nếu không, gửi email cho chủ sở hữu trang web, :site_owner và yêu cầu họ đặt lại xác thực hai yếu tố của bạn.', - 'mfa_backup_code' => 'Bạn đã sử dụng mã dự phòng để đăng nhập vào Firefly III. Nó không thể được sử dụng lại, vì vậy hãy gạch chéo nó khỏi danh sách của bạn.', - 'pref_two_factor_new_backup_codes' => 'Nhận mã dự phòng mới', - 'pref_two_factor_backup_code_count' => 'Bạn có :count mã dự phòng hợp lệ. | Bạn có :count mã dự phòng hợp lệ.', - '2fa_i_have_them' => 'Tôi đã lưu trữ chúng!', - 'warning_much_data' => ': ngày ngày dữ liệu có thể mất một lúc để tải.', - 'registered' => 'Bạn đã đăng ký thành công!', - 'Default asset account' => 'Mặc định tài khoản', - 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.', - 'no_bill_pointer' => 'You seem to have no bills yet. You should create some on the bills-page. Bills can help you keep track of expenses.', - 'Savings account' => 'Tài khoản tiết kiệm', - 'Credit card' => 'Thẻ tín dụng', - 'source_accounts' => 'Tài khoản gửi', - 'destination_accounts' => 'Tài khoản nhận', - 'user_id_is' => 'ID người dùng của bạn là :user', - 'field_supports_markdown' => 'Trường này hỗ trợ Markdown.', - 'need_more_help' => 'Nếu bạn cần thêm trợ giúp khi sử dụng Firefly III, vui lòng open a ticket on Github.', - 'reenable_intro_text' => 'Bạn cũng có thể kích hoạt lại the introduction guidance.', - 'intro_boxes_after_refresh' => 'Các giới thiệu sẽ xuất hiện lại khi bạn tải lại trang.', - 'show_all_no_filter' => 'Hiển thị tất cả các giao dịch mà không nhóm chúng theo ngày.', - 'expenses_by_category' => 'Chi phí theo danh mục', - 'expenses_by_budget' => 'Chi phí theo ngân sách', - 'income_by_category' => 'Thu nhập theo danh mục', - 'expenses_by_asset_account' => 'Chi phí bằng tài khoản', - 'expenses_by_expense_account' => 'Chi phí bằng tài khoản chi phí', - 'cannot_redirect_to_account' => 'Firefly III không thể chuyển hướng bạn đến đúng trang. Lời xin lỗi.', - 'sum_of_expenses' => 'Tổng chi phí', - 'sum_of_income' => 'Tổng thu nhập', - 'liabilities' => 'Nợ phải trả', - 'spent_in_specific_budget' => 'Chi ngân sách ":budget"', - 'spent_in_specific_double' => 'Đã chi trong tài khoản ":account"', - 'earned_in_specific_double' => 'Kiếm được trong tài khoản ":account"', - 'source_account' => 'Nguồn tài khoản', - 'source_account_reconciliation' => 'Bạn không thể chỉnh sửa tài khoản nguồn của giao dịch đối chiếu.', - 'destination_account' => 'Tài khoản đích', - 'destination_account_reconciliation' => 'Bạn không thể chỉnh sửa tài khoản đích của giao dịch đối chiếu.', - 'sum_of_expenses_in_budget' => 'Tổng chi trong ngân sách ":budget"', - 'left_in_budget_limit' => 'Còn lại để chi tiêu theo ngân sách', - 'current_period' => 'Giai đoạn hiện tại', - 'show_the_current_period_and_overview' => 'Hiển thị giai đoạn hiện tại và tổng quan', - 'pref_languages_locale' => 'Để một ngôn ngữ khác tiếng Anh hoạt động chính xác, hệ điều hành của bạn phải được cài đặt ngôn ngữ và đơn vị chính xác. Nếu không có, dữ liệu tiền tệ, ngày và số tiền có thể được định dạng sai.', - 'budget_in_period' => 'Tất cả các giao dịch cho ngân sách ":name" giữa :start và :end bằng :currency', - 'chart_budget_in_period' => 'Biểu đồ cho tất cả các giao dịch theo ngân sách ":name" giữa :start và :end bằng :currency', - 'chart_budget_in_period_only_currency' => 'Số tiền bạn đã lập ngân sách bằng :currency, vì vậy biểu đồ này sẽ chỉ hiển thị các giao dịch bằng :currency.', - 'chart_account_in_period' => 'Biểu đồ cho tất cả các giao dịch theo tài khoản ":name" (:balance) giữa :start và :end', - 'chart_category_in_period' => 'Biểu đồ cho tất cả các giao dịch theo danh mục ":name" giữa :start và :end', - 'chart_category_all' => 'Biểu đồ cho tất cả các giao dịch cho danh mục ":name"', - 'clone_withdrawal' => 'Nhân bản khoản rút tiền này', - 'clone_deposit' => 'Nhân bản khoản tiền gửi này', - 'clone_transfer' => 'Nhân bản chuyển khoản này', - 'multi_select_no_selection' => 'Không được chọn', - 'multi_select_select_all' => 'Chọn tất cả', - 'multi_select_n_selected' => 'đã chọn', - 'multi_select_all_selected' => 'Tất cả được chọn', - 'multi_select_filter_placeholder' => 'Tìm thấy..', - 'intro_next_label' => 'Kế tiếp', - 'intro_prev_label' => 'Trước', - 'intro_skip_label' => 'Bỏ qua', - 'intro_done_label' => 'Xong', - 'between_dates_breadcrumb' => 'Giữa: bắt đầu và: kết thúc', - 'all_journals_without_budget' => 'Tất cả các giao dịch không có ngân sách', - 'journals_without_budget' => 'Giao dịch không có ngân sách', - 'all_journals_without_category' => 'Tất cả các giao dịch không có danh mục', - 'journals_without_category' => 'Giao dịch không có danh mục', - 'all_journals_for_account' => 'Tất cả các giao dịch của tài khoản :name', - 'chart_all_journals_for_account' => 'Biểu đồ của tất cả các giao dịch cho tài khoản :name', - 'journals_in_period_for_account' => 'Tất cả các giao dịch cho tài khoản :name giữa :start và :end', - 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', - 'transferred' => 'Chuyển nhượng', - 'all_withdrawal' => 'Mọi chi phí', - 'all_transactions' => 'Tất cả các giao dịch', - 'title_withdrawal_between' => 'Tất cả các chi phí giữa :start và :end', - 'all_deposit' => 'Tất cả doanh thu', - 'title_deposit_between' => 'Tất cả doanh thu giữa :start và :end', - 'all_transfers' => 'Tất cả chuyển khoản', - 'title_transfers_between' => 'Tất cả chuyển giữa: bắt đầu và: kết thúc', - 'all_transfer' => 'Tất cả chuyển khoản', - 'all_journals_for_tag' => 'Tất cả các giao dịch cho nhãn":tag"', - 'title_transfer_between' => 'Tất cả chuyển giữa :start và :end', - 'all_journals_for_category' => 'Tất cả các giao dịch cho thể loại :name', - 'all_journals_for_budget' => 'Tất cả các giao dịch cho ngân sách :name', - 'chart_all_journals_for_budget' => 'Biểu đồ của tất cả các giao dịch cho ngân sách :name', - 'journals_in_period_for_category' => 'Tất cả các giao dịch cho danh mục :name giữa :start và :end', - 'journals_in_period_for_tag' => 'Tất cả các giao dịch cho nhãn :tag giữa :start và :end', - 'not_available_demo_user' => 'Tính năng bạn cố gắng truy cập không khả dụng cho người dùng demo.', - 'exchange_rate_instructions' => 'tài khoản "@name" chỉ chấp nhận giao dịch bằng tiền bản địa. Nếu bạn muốn sử dụng ngoại tệ, hãy đảm bảo rằng số tiền bằng tiền bản địa cũng được biết đến:', - 'transfer_exchange_rate_instructions' => 'Tài khoản nguồn tài sản "@source_name" chỉ chấp nhận giao dịch bằng tiền tệ nguồn. tài khoản đícht "@dest_name" chỉ chấp nhận giao dịch bằng tiền tệ. Bạn phải cung cấp số tiền được chuyển chính xác bằng cả hai loại tiền tệ.', - 'transaction_data' => 'Dữ liệu giao dịch', - 'invalid_server_configuration' => 'Cấu hình máy chủ không hợp lệ', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => 'Chuyển đổi nhanh', - 'sign_in_to_start' => 'Đăng nhập để bắt đầu', - 'sign_in' => 'Đăng nhập', - 'register_new_account' => 'Đăng ký tài khoản mới', - 'forgot_my_password' => 'Tôi quên mật khẩu của tôi', - 'problems_with_input' => 'Có một số vấn đề với đầu vào của bạn.', - 'reset_password' => 'Đặt lại mật khẩu của bạn', - 'button_reset_password' => 'Đặt lại mật khẩu', - 'reset_button' => 'Đặt lại', - 'want_to_login' => 'Tôi muốn đăng nhập', - 'login_page_title' => 'Đăng nhập vào Firefly III', - 'register_page_title' => 'Đăng ký tại Firefly III', - 'forgot_pw_page_title' => 'Quên mật khẩu của bạn cho Firefly III', - 'reset_pw_page_title' => 'Đặt lại mật khẩu của bạn cho Firefly III', - 'cannot_reset_demo_user' => 'Bạn không thể đặt lại mật khẩu của người dùng demo.', - 'no_att_demo_user' => 'Người dùng thử không được phép tải file lên.', - 'button_register' => 'Đăng ký', - 'authorization' => 'Ủy quyền', - 'active_bills_only' => 'Chỉ hóa đơn hoạt động', - 'active_bills_only_total' => 'tất cả hóa đơn đang hoạt động', - 'active_exp_bills_only' => 'hóa đơn hoạt động và dự kiến', - 'active_exp_bills_only_total' => 'chỉ tất cả các hóa đơn dự kiến đang hoạt động', - 'per_period_sum_1D' => 'Chi phí hàng ngày dự kiến', - 'per_period_sum_1W' => 'Chi phí hàng tuần dự kiến', - 'per_period_sum_1M' => 'Chi phí hàng tháng dự kiến', - 'per_period_sum_3M' => 'Chi phí hàng quý dự kiến', - 'per_period_sum_6M' => 'Chi phí nửa năm dự kiến', - 'per_period_sum_1Y' => 'Chi phí hàng năm dự kiến', - 'average_per_bill' => 'trung bình mỗi hóa đơn', - 'expected_total' => 'tổng dự kiến', - 'reconciliation_account_name' => ':name reconciliation (:currency)', - 'saved' => 'Đã lưu', - 'advanced_options' => 'Tùy chọn nâng cao', - 'advanced_options_explain' => 'Một số trang trong Firefly III có các tùy chọn nâng cao ẩn sau nút này. Trang này không có gì lạ mắt ở đây, nhưng hãy kiểm tra các trang khác!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => 'Đóng', + 'actions' => 'Hành động', + 'edit' => 'Sửa', + 'delete' => 'Xóa', + 'split' => 'Chia ra', + 'single_split' => 'Chia ra', + 'clone' => 'Nhân ra', + 'clone_and_edit' => 'Nhân bản và sửa', + 'confirm_action' => 'Xác nhận thao tác', + 'last_seven_days' => 'Bảy ngày gần đây', + 'last_thirty_days' => 'Ba mươi ngày gần đây', + 'last_180_days' => '180 ngày qua', + 'month_to_date' => 'Tháng đến ngày', + 'year_to_date' => 'Năm đến ngày', + 'YTD' => 'NĐN', + 'welcome_back' => 'Chào mừng trở lại?', + 'everything' => 'Tất cả mọi thứ', + 'today' => 'hôm nay', + 'customRange' => 'Chọn trong khoảng', + 'date_range' => 'Khoảng thời gian', + 'apply' => 'Áp dụng', + 'select_date' => 'Chọn ngày..', + 'cancel' => 'Hủy', + 'from' => 'Từ', + 'to' => 'Đến', + 'structure' => 'Kết cấu', + 'help_translating' => 'Văn bản trợ giúp này hiện chưa hỗ trợ ngôn ngữ của bạn. Bạn sẽ dịch giúp chứ?', + 'showEverything' => 'Hiện mọi thứ', + 'never' => 'Không bao giờ', + 'no_results_for_empty_search' => 'Không tìm gặp thứ bạn cần tìm.', + 'removed_amount' => 'Đã xóa :amount', + 'added_amount' => 'Đã thêm :amount', + 'asset_account_role_help' => 'Bất kỳ tùy chọn bổ sung nào do bạn chọn có thể được đặt sau.', + 'Opening balance' => 'Số dư đầu kỳ', + 'create_new_stuff' => 'Tạo công cụ mới', + 'new_withdrawal' => 'Rút tiền mới', + 'create_new_transaction' => 'Tạo giao dịch mới', + 'sidebar_frontpage_create' => 'Tạo', + 'new_transaction' => 'Giao dịch mới', + 'no_rules_for_bill' => 'Hóa đơn này không có quy tắc nào liên quan đến nó.', + 'go_to_asset_accounts' => 'Xem tài khoản của bạn', + 'go_to_budgets' => 'Chuyển đến ngân sách của bạn', + 'go_to_withdrawals' => 'Chuyển đến mục rút tiền của bạn', + 'clones_journal_x' => 'Giao dịch này là một bản sao của ":description" (#:id)', + 'go_to_categories' => 'Đi đến danh mục của bạn', + 'go_to_bills' => 'Đi đến hóa đơn của bạn', + 'go_to_expense_accounts' => 'Xem tài khoản chi phí của bạn', + 'go_to_revenue_accounts' => 'Xem tài khoản doanh thu của bạn', + 'go_to_piggies' => 'Tới heo đất của bạn', + 'new_deposit' => 'Tiền gửi mới', + 'new_transfer' => 'Chuyển khoản mới', + 'new_transfers' => 'Chuyển khoản mới', + 'new_asset_account' => 'tài khoản mới', + 'new_expense_account' => 'Tài khoản chi phí mới', + 'new_revenue_account' => 'Tài khoản doanh thu mới', + 'new_liabilities_account' => 'Nợ mới', + 'new_budget' => 'Ngân sách mới', + 'new_bill' => 'Hóa đơn mới', + 'block_account_logout' => 'Bạn đã đăng xuất. Tài khoản bị chặn không thể sử dụng. Bạn đã đăng ký với một địa chỉ email hợp lệ?', + 'flash_success' => 'Thành công!', + 'flash_info' => 'Tin nhắn', + 'flash_warning' => 'Cảnh báo!', + 'flash_error' => 'Lỗi!', + 'flash_danger' => 'Nguy hiểm!', + 'flash_info_multiple' => 'Có tin nhắn :tin nhắn', + 'flash_error_multiple' => 'Có lỗi :lỗi', + 'net_worth' => 'Tài sản thực', + 'help_for_this_page' => 'Trợ giúp cho trang này', + 'help_for_this_page_body' => 'Bạn có thể tìm thêm thông tin về trang này trong liên kết này.', + 'two_factor_welcome' => 'Xin chào!', + 'two_factor_enter_code' => 'Để tiếp tục, vui lòng nhập mã xác thực hai yếu tố của bạn. Ứng dụng của bạn có thể tạo ra nó cho bạn.', + 'two_factor_code_here' => 'Nhập mã vào đây', + 'two_factor_title' => 'Xác thực hai yếu tố', + 'authenticate' => 'Xác thực', + 'two_factor_forgot_title' => 'Mất xác thực hai yếu tố', + 'two_factor_forgot' => 'Tôi quên mất hai yếu tố.', + 'two_factor_lost_header' => 'Mất xác thực hai yếu tố của bạn?', + 'two_factor_lost_intro' => 'Nếu bạn bị mất mã dự phòng. Bạn có hai lựa chọn.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner và yêu cầu họ đặt lại xác thực hai yếu tố của bạn.', + 'mfa_backup_code' => 'Bạn đã sử dụng mã dự phòng để đăng nhập vào Firefly III. Nó không thể được sử dụng lại, vì vậy hãy gạch chéo nó khỏi danh sách của bạn.', + 'pref_two_factor_new_backup_codes' => 'Nhận mã dự phòng mới', + 'pref_two_factor_backup_code_count' => 'Bạn có :count mã dự phòng hợp lệ. | Bạn có :count mã dự phòng hợp lệ.', + '2fa_i_have_them' => 'Tôi đã lưu trữ chúng!', + 'warning_much_data' => ': ngày ngày dữ liệu có thể mất một lúc để tải.', + 'registered' => 'Bạn đã đăng ký thành công!', + 'Default asset account' => 'Mặc định tài khoản', + 'no_budget_pointer' => 'Dường như bạn chưa có ngân sách. Bạn nên tạo vài cái tại trang ngân sách-. Ngân sách có thể giúp bạn theo dõi chi tiêu.', + 'no_bill_pointer' => 'Dường như bạn chưa có hóa đơn. Bạn nên tạo vài cái tại trang hóa đơn-. Hóa đơn có thể giúp bạn theo dõi chi tiêu.', + 'Savings account' => 'Tài khoản tiết kiệm', + 'Credit card' => 'Thẻ tín dụng', + 'source_accounts' => 'Tài khoản gửi', + 'destination_accounts' => 'Tài khoản nhận', + 'user_id_is' => 'ID người dùng của bạn là :user', + 'field_supports_markdown' => 'Trường này hỗ trợ Markdown.', + 'need_more_help' => 'Nếu bạn cần thêm trợ giúp khi sử dụng Firefly III, vui lòng open a ticket on Github.', + 'reenable_intro_text' => 'Bạn cũng có thể kích hoạt lại the introduction guidance.', + 'intro_boxes_after_refresh' => 'Các giới thiệu sẽ xuất hiện lại khi bạn tải lại trang.', + 'show_all_no_filter' => 'Hiển thị tất cả các giao dịch mà không nhóm chúng theo ngày.', + 'expenses_by_category' => 'Chi phí theo danh mục', + 'expenses_by_budget' => 'Chi phí theo ngân sách', + 'income_by_category' => 'Thu nhập theo danh mục', + 'expenses_by_asset_account' => 'Chi phí bằng tài khoản', + 'expenses_by_expense_account' => 'Chi phí bằng tài khoản chi phí', + 'cannot_redirect_to_account' => 'Firefly III không thể chuyển hướng bạn đến đúng trang. Lời xin lỗi.', + 'sum_of_expenses' => 'Tổng chi phí', + 'sum_of_income' => 'Tổng thu nhập', + 'liabilities' => 'Nợ phải trả', + 'spent_in_specific_budget' => 'Chi ngân sách ":budget"', + 'spent_in_specific_double' => 'Đã chi trong tài khoản ":account"', + 'earned_in_specific_double' => 'Kiếm được trong tài khoản ":account"', + 'source_account' => 'Nguồn tài khoản', + 'source_account_reconciliation' => 'Bạn không thể chỉnh sửa tài khoản nguồn của giao dịch đối chiếu.', + 'destination_account' => 'Tài khoản đích', + 'destination_account_reconciliation' => 'Bạn không thể chỉnh sửa tài khoản đích của giao dịch đối chiếu.', + 'sum_of_expenses_in_budget' => 'Tổng chi trong ngân sách ":budget"', + 'left_in_budget_limit' => 'Còn lại để chi tiêu theo ngân sách', + 'current_period' => 'Giai đoạn hiện tại', + 'show_the_current_period_and_overview' => 'Hiển thị giai đoạn hiện tại và tổng quan', + 'pref_languages_locale' => 'Để một ngôn ngữ khác tiếng Anh hoạt động chính xác, hệ điều hành của bạn phải được cài đặt ngôn ngữ và đơn vị chính xác. Nếu không có, dữ liệu tiền tệ, ngày và số tiền có thể được định dạng sai.', + 'budget_in_period' => 'Tất cả các giao dịch cho ngân sách ":name" giữa :start và :end bằng :currency', + 'chart_budget_in_period' => 'Biểu đồ cho tất cả các giao dịch theo ngân sách ":name" giữa :start và :end bằng :currency', + 'chart_budget_in_period_only_currency' => 'Số tiền bạn đã lập ngân sách bằng :currency, vì vậy biểu đồ này sẽ chỉ hiển thị các giao dịch bằng :currency.', + 'chart_account_in_period' => 'Biểu đồ cho tất cả các giao dịch theo tài khoản ":name" (:balance) giữa :start và :end', + 'chart_category_in_period' => 'Biểu đồ cho tất cả các giao dịch theo danh mục ":name" giữa :start và :end', + 'chart_category_all' => 'Biểu đồ cho tất cả các giao dịch cho danh mục ":name"', + 'clone_withdrawal' => 'Nhân bản khoản rút tiền này', + 'clone_deposit' => 'Nhân bản khoản tiền gửi này', + 'clone_transfer' => 'Nhân bản chuyển khoản này', + 'multi_select_no_selection' => 'Không được chọn', + 'multi_select_select_all' => 'Chọn tất cả', + 'multi_select_n_selected' => 'đã chọn', + 'multi_select_all_selected' => 'Tất cả được chọn', + 'multi_select_filter_placeholder' => 'Tìm thấy..', + 'intro_next_label' => 'Kế tiếp', + 'intro_prev_label' => 'Trước', + 'intro_skip_label' => 'Bỏ qua', + 'intro_done_label' => 'Xong', + 'between_dates_breadcrumb' => 'Giữa: bắt đầu và: kết thúc', + 'all_journals_without_budget' => 'Tất cả các giao dịch không có ngân sách', + 'journals_without_budget' => 'Giao dịch không có ngân sách', + 'all_journals_without_category' => 'Tất cả các giao dịch không có danh mục', + 'journals_without_category' => 'Giao dịch không có danh mục', + 'all_journals_for_account' => 'Tất cả các giao dịch của tài khoản :name', + 'chart_all_journals_for_account' => 'Biểu đồ của tất cả các giao dịch cho tài khoản :name', + 'journals_in_period_for_account' => 'Tất cả các giao dịch cho tài khoản :name giữa :start và :end', + 'journals_in_period_for_account_js' => 'Tất cả giao dịch của tài khoản {title} giữa {start} và {end}', + 'transferred' => 'Chuyển nhượng', + 'all_withdrawal' => 'Mọi chi phí', + 'all_transactions' => 'Tất cả các giao dịch', + 'title_withdrawal_between' => 'Tất cả các chi phí giữa :start và :end', + 'all_deposit' => 'Tất cả doanh thu', + 'title_deposit_between' => 'Tất cả doanh thu giữa :start và :end', + 'all_transfers' => 'Tất cả chuyển khoản', + 'title_transfers_between' => 'Tất cả chuyển giữa: bắt đầu và: kết thúc', + 'all_transfer' => 'Tất cả chuyển khoản', + 'all_journals_for_tag' => 'Tất cả các giao dịch cho nhãn":tag"', + 'title_transfer_between' => 'Tất cả chuyển giữa :start và :end', + 'all_journals_for_category' => 'Tất cả các giao dịch cho thể loại :name', + 'all_journals_for_budget' => 'Tất cả các giao dịch cho ngân sách :name', + 'chart_all_journals_for_budget' => 'Biểu đồ của tất cả các giao dịch cho ngân sách :name', + 'journals_in_period_for_category' => 'Tất cả các giao dịch cho danh mục :name giữa :start và :end', + 'journals_in_period_for_tag' => 'Tất cả các giao dịch cho nhãn :tag giữa :start và :end', + 'not_available_demo_user' => 'Tính năng bạn cố gắng truy cập không khả dụng cho người dùng demo.', + 'exchange_rate_instructions' => 'tài khoản "@name" chỉ chấp nhận giao dịch bằng tiền bản địa. Nếu bạn muốn sử dụng ngoại tệ, hãy đảm bảo rằng số tiền bằng tiền bản địa cũng được biết đến:', + 'transfer_exchange_rate_instructions' => 'Tài khoản nguồn tài sản "@source_name" chỉ chấp nhận giao dịch bằng tiền tệ nguồn. tài khoản đícht "@dest_name" chỉ chấp nhận giao dịch bằng tiền tệ. Bạn phải cung cấp số tiền được chuyển chính xác bằng cả hai loại tiền tệ.', + 'transaction_data' => 'Dữ liệu giao dịch', + 'invalid_server_configuration' => 'Cấu hình máy chủ không hợp lệ', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => 'Chuyển đổi nhanh', + 'sign_in_to_start' => 'Đăng nhập để bắt đầu', + 'sign_in' => 'Đăng nhập', + 'register_new_account' => 'Đăng ký tài khoản mới', + 'forgot_my_password' => 'Tôi quên mật khẩu của tôi', + 'problems_with_input' => 'Có một số vấn đề với đầu vào của bạn.', + 'reset_password' => 'Đặt lại mật khẩu của bạn', + 'button_reset_password' => 'Đặt lại mật khẩu', + 'reset_button' => 'Đặt lại', + 'want_to_login' => 'Tôi muốn đăng nhập', + 'login_page_title' => 'Đăng nhập vào Firefly III', + 'register_page_title' => 'Đăng ký tại Firefly III', + 'forgot_pw_page_title' => 'Quên mật khẩu của bạn cho Firefly III', + 'reset_pw_page_title' => 'Đặt lại mật khẩu của bạn cho Firefly III', + 'cannot_reset_demo_user' => 'Bạn không thể đặt lại mật khẩu của người dùng demo.', + 'no_att_demo_user' => 'Người dùng thử không được phép tải file lên.', + 'button_register' => 'Đăng ký', + 'authorization' => 'Ủy quyền', + 'active_bills_only' => 'Chỉ hóa đơn hoạt động', + 'active_bills_only_total' => 'tất cả hóa đơn đang hoạt động', + 'active_exp_bills_only' => 'hóa đơn hoạt động và dự kiến', + 'active_exp_bills_only_total' => 'chỉ tất cả các hóa đơn dự kiến đang hoạt động', + 'per_period_sum_1D' => 'Chi phí hàng ngày dự kiến', + 'per_period_sum_1W' => 'Chi phí hàng tuần dự kiến', + 'per_period_sum_1M' => 'Chi phí hàng tháng dự kiến', + 'per_period_sum_3M' => 'Chi phí hàng quý dự kiến', + 'per_period_sum_6M' => 'Chi phí nửa năm dự kiến', + 'per_period_sum_1Y' => 'Chi phí hàng năm dự kiến', + 'average_per_bill' => 'trung bình mỗi hóa đơn', + 'expected_total' => 'tổng dự kiến', + 'reconciliation_account_name' => ':name reconciliation (:currency)', + 'saved' => 'Đã lưu', + 'advanced_options' => 'Tùy chọn nâng cao', + 'advanced_options_explain' => 'Một số trang trong Firefly III có các tùy chọn nâng cao ẩn sau nút này. Trang này không có gì lạ mắt ở đây, nhưng hãy kiểm tra các trang khác!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'Không có tin nhắn webhook', + 'webhook_trigger_STORE_TRANSACTION' => 'Sau khi tạo giao dịch', + 'webhook_trigger_UPDATE_TRANSACTION' => 'Sau khi cập nhật giao dịch', + 'webhook_trigger_DESTROY_TRANSACTION' => 'Sau khi xóa giao dịch', + 'webhook_response_TRANSACTIONS' => 'Chi tiết giao dịch', + 'webhook_response_ACCOUNTS' => 'Chi tiết tài khoản', + 'webhook_response_none_NONE' => 'Không có chi tiết', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => 'Kiểm tra', + 'create_new_webhook' => 'Tạo webhook mới', + 'webhooks_create_breadcrumb' => 'Tạo webhook mới', + 'webhook_trigger_form_help' => 'Chọn loại sự kiện nào webhook sẽ kích hoạt', + 'webhook_response_form_help' => 'Chọn URL nào webhook sẽ gửi thông tin.', + 'webhook_delivery_form_help' => 'Loại định dạng webhook gửi dữ liệu vào.', + 'webhook_active_form_help' => 'Webhook phải được kích hoạt hoặc nó sẽ được gọi.', + 'stored_new_webhook' => 'Lưu trữ webhook mới ":title"', + 'delete_webhook' => 'Xóa webhook', + 'deleted_webhook' => 'Webhook đã bị xóa ":title"', + 'edit_webhook' => 'Sửa webhook ":title"', + 'updated_webhook' => 'Cập nhật webhook ":title"', + 'edit_webhook_js' => 'Sửa webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'Webhook sẽ kích hoạt trên những giao dịch này. Xin đợi một lúc để kết quả hiện ra.', + 'webhook_messages' => 'Tin nhắn webhook', + 'view_message' => 'Xem tin nhắn', + 'view_attempts' => 'Xem những lần thử lỗi', + 'message_content_title' => 'Nội dung tin nhắn webhook', + 'message_content_help' => 'Đây là nội dung của tin nhắn đã được gửi (hay đã thử) bằng những webhook này.', + 'attempt_content_title' => 'Các lần thử webhook', + 'attempt_content_help' => 'Đây là tất cả những lần thử gửi các tin nhắn webhook đến URL chỉ định nhưng không thành công. Sau một khoảng thời gian Firefly III sẽ dừng thử.', + 'no_attempts' => 'Không có lần thử không thành công nào. Thật là tốt!', + 'webhook_attempt_at' => 'Thử lúc {moment}', + 'logs' => 'Nhật ký', + 'response' => 'Đáp lại', + 'visit_webhook_url' => 'Đi đến webhook URL', + 'reset_webhook_secret' => 'Cài lại khóa webhook', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") đã được lưu trữ.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") đã được cập nhật.', // API access - 'authorization_request' => 'Firefly III v: phiên bản Yêu cầu ủy quyền', - 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', - 'scopes_will_be_able' => 'Ứng dụng này sẽ có thể:', - 'button_authorize' => 'Ủy quyền', - 'none_in_select_list' => '(Trống)', - 'no_piggy_bank' => '(chưa có heo đất)', - 'name_in_currency' => ':name trong :currency', - 'paid_in_currency' => 'Được trả bằng :currency', - 'unpaid_in_currency' => 'Chưa thanh toán bằng :currency', - 'is_alpha_warning' => 'Bạn đang sử dụng phiên bản ALPHA.', - 'is_beta_warning' => 'Bạn đang sử dụng phiên bản BETA.', - 'all_destination_accounts' => 'Tài khoản nhận', - 'all_source_accounts' => 'Tài khoản gửi', - 'back_to_index' => 'Quay lại chỉ mục', - 'cant_logout_guard' => 'Firefly III không thể đăng xuất.', - 'internal_reference' => 'Tài liệu tham khảo nội bộ', + 'authorization_request' => 'Firefly III v: phiên bản Yêu cầu ủy quyền', + 'authorization_request_intro' => 'Ứng dụng :client đang yêu cầu sự cho phép truy cập quản trị tài chính của bạn. Bạn có muốn ủy quyền :client để truy cập những hồ sơ này?', + 'authorization_request_site' => 'Bạn sẽ được điều hướng đến :url nơi mà có thể truy cập thông tin Firefly III của bạn.', + 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', + 'scopes_will_be_able' => 'Ứng dụng này sẽ có thể:', + 'button_authorize' => 'Ủy quyền', + 'none_in_select_list' => '(Trống)', + 'no_piggy_bank' => '(chưa có heo đất)', + 'name_in_currency' => ':name trong :currency', + 'paid_in_currency' => 'Được trả bằng :currency', + 'unpaid_in_currency' => 'Chưa thanh toán bằng :currency', + 'is_alpha_warning' => 'Bạn đang sử dụng phiên bản ALPHA.', + 'is_beta_warning' => 'Bạn đang sử dụng phiên bản BETA.', + 'all_destination_accounts' => 'Tài khoản nhận', + 'all_source_accounts' => 'Tài khoản gửi', + 'back_to_index' => 'Quay lại chỉ mục', + 'cant_logout_guard' => 'Firefly III không thể đăng xuất.', + 'internal_reference' => 'Tài liệu tham khảo nội bộ', // check for updates: - 'update_check_title' => 'Kiểm tra cập nhật', - 'admin_update_check_title' => 'Tự động kiểm tra cập nhật', - 'admin_update_check_explain' => 'Firefly III có thể kiểm tra cập nhật tự động. Khi bạn bật cài đặt này, nó sẽ liên hệ với Github để xem có phiên bản mới của Firefly III không. Khi đó, bạn sẽ nhận được một thông báo. Bạn có thể kiểm tra thông báo này bằng nút bên phải. Vui lòng cho biết bên dưới nếu bạn muốn Firefly III kiểm tra cập nhật.', - 'check_for_updates_permission' => 'Firefly III có thể kiểm tra các bản cập nhật, nhưng nó cần sự cho phép của bạn để làm như vậy. Vui lòng truy cập administration nếu bạn muốn bật tính năng này.', - 'updates_ask_me_later' => 'Hãy hỏi tôi sau', - 'updates_do_not_check' => 'Không kiểm tra cập nhật', - 'updates_enable_check' => 'Cho phép kiểm tra cập nhật', - 'admin_update_check_now_title' => 'Kiểm tra cập nhật ngay bây giờ', - 'admin_update_check_now_explain' => 'Nếu bạn nhấn nút, Firefly III sẽ xem phiên bản hiện tại của bạn có phải là phiên bản mới nhất không.', - 'check_for_updates_button' => 'Kiểm tra ngay!', - 'update_new_version_alert' => 'Một phiên bản mới của Firefly III có sẵn. Bạn đang chạy :your_version, phiên bản mới nhất là :new_version được phát hành vào :date.', - 'update_version_beta' => 'Phiên bản này là phiên bản BETA. Bạn có thể gặp vấn đề.', - 'update_version_alpha' => 'Phiên bản này là phiên bản ALPHA. Bạn có thể gặp vấn đề.', - 'update_current_version_alert' => 'Bạn đang chạy :version , đây là phiên bản mới nhất có sẵn.', - 'update_newer_version_alert' => 'Bạn đang chạy :your_version, mới hơn bản phát hành mới nhất , :new_version.', - 'update_check_error' => 'Đã xảy ra lỗi trong khi kiểm tra cập nhật: :error', - 'unknown_error' => 'Không xác định được lỗi. Xin lỗi vì điều này.', - 'just_new_release' => 'Đã có phiên bản mới! Phiên bản :version đã hoàn thành :date. Chờ vài ngày nửa để có bản ổn định.', - 'disabled_but_check' => 'Bạn đã tắt kiểm tra cập nhật. Vì vậy, đừng quên kiểm tra cập nhật cho mình mọi lúc mọi nơi. Cảm ơn bạn!', - 'admin_update_channel_title' => 'Cập nhật kênh', - 'admin_update_channel_explain' => 'Firefly III có ba "kênh" cập nhật xác định mức độ vượt trội của bạn về các tính năng, cải tiến và lỗi. Sử dụng kênh "beta" nếu bạn thích phiêu lưu và "alpha" khi bạn muốn sống một cách nguy hiểm.', - 'update_channel_stable' => 'Ổn định. Mọi thứ hoạt động như mong đợi.', - 'update_channel_beta' => 'Beta. Các tính năng mới nhưng mọi thứ có thể bị lỗi.', - 'update_channel_alpha' => 'Alpha. Chúng tôi ném đồ vào, và sử dụng bất cứ thứ gì.', + 'update_check_title' => 'Kiểm tra cập nhật', + 'admin_update_check_title' => 'Tự động kiểm tra cập nhật', + 'admin_update_check_explain' => 'Firefly III có thể kiểm tra cập nhật tự động. Khi bạn bật cài đặt này, nó sẽ liên hệ với Github để xem có phiên bản mới của Firefly III không. Khi đó, bạn sẽ nhận được một thông báo. Bạn có thể kiểm tra thông báo này bằng nút bên phải. Vui lòng cho biết bên dưới nếu bạn muốn Firefly III kiểm tra cập nhật.', + 'check_for_updates_permission' => 'Firefly III có thể kiểm tra các bản cập nhật, nhưng nó cần sự cho phép của bạn để làm như vậy. Vui lòng truy cập administration nếu bạn muốn bật tính năng này.', + 'updates_ask_me_later' => 'Hãy hỏi tôi sau', + 'updates_do_not_check' => 'Không kiểm tra cập nhật', + 'updates_enable_check' => 'Cho phép kiểm tra cập nhật', + 'admin_update_check_now_title' => 'Kiểm tra cập nhật ngay bây giờ', + 'admin_update_check_now_explain' => 'Nếu bạn nhấn nút, Firefly III sẽ xem phiên bản hiện tại của bạn có phải là phiên bản mới nhất không.', + 'check_for_updates_button' => 'Kiểm tra ngay!', + 'update_new_version_alert' => 'Một phiên bản mới của Firefly III có sẵn. Bạn đang chạy :your_version, phiên bản mới nhất là :new_version được phát hành vào :date.', + 'update_version_beta' => 'Phiên bản này là phiên bản BETA. Bạn có thể gặp vấn đề.', + 'update_version_alpha' => 'Phiên bản này là phiên bản ALPHA. Bạn có thể gặp vấn đề.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'Bạn đang chạy :version , đây là phiên bản mới nhất có sẵn.', + 'update_newer_version_alert' => 'Bạn đang chạy :your_version, mới hơn bản phát hành mới nhất , :new_version.', + 'update_check_error' => 'Đã xảy ra lỗi trong khi kiểm tra cập nhật: :error', + 'unknown_error' => 'Không xác định được lỗi. Xin lỗi vì điều này.', + 'disabled_but_check' => 'Bạn đã tắt kiểm tra cập nhật. Vì vậy, đừng quên kiểm tra cập nhật cho mình mọi lúc mọi nơi. Cảm ơn bạn!', + 'admin_update_channel_title' => 'Cập nhật kênh', + 'admin_update_channel_explain' => 'Firefly III có ba "kênh" cập nhật xác định mức độ vượt trội của bạn về các tính năng, cải tiến và lỗi. Sử dụng kênh "beta" nếu bạn thích phiêu lưu và "alpha" khi bạn muốn sống một cách nguy hiểm.', + 'update_channel_stable' => 'Ổn định. Mọi thứ hoạt động như mong đợi.', + 'update_channel_beta' => 'Beta. Các tính năng mới nhưng mọi thứ có thể bị lỗi.', + 'update_channel_alpha' => 'Alpha. Chúng tôi ném đồ vào, và sử dụng bất cứ thứ gì.', // search - 'search' => 'Tìm kiếm', - 'search_query' => 'Truy vấn', - 'search_found_transactions' => 'Tìm thấy Firefly III :count giao dịch trong :time giây. | Firefly III được tìm thấy :count giao dịch trong :time giây.', - 'search_found_more_transactions' => 'Firefly III đã tìm thấy hơn :count giao dịch trong :time giây.', - 'search_for_query' => 'Firefly III đang tìm kiếm các giao dịch với tất cả những từ này trong đó: :query', - 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', + 'search' => 'Tìm kiếm', + 'search_query' => 'Truy vấn', + 'search_found_transactions' => 'Tìm thấy Firefly III :count giao dịch trong :time giây. | Firefly III được tìm thấy :count giao dịch trong :time giây.', + 'search_found_more_transactions' => 'Firefly III đã tìm thấy hơn :count giao dịch trong :time giây.', + 'search_for_query' => 'Firefly III đang tìm kiếm các giao dịch với tất cả những từ này trong đó: :query', + 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,76 +351,75 @@ return [ * */ - - 'search_modifier_date_on' => 'Transaction date is ":value"', - 'search_modifier_not_date_on' => 'Transaction date is not ":value"', - 'search_modifier_reconciled' => 'Transaction is reconciled', - 'search_modifier_not_reconciled' => 'Transaction is not reconciled', + 'search_modifier_date_on' => 'Ngày giao dịch là ":value"', + 'search_modifier_not_date_on' => 'Ngày giao dịch không phải ":value"', + 'search_modifier_reconciled' => 'Giao dịch đã đối chiếu', + 'search_modifier_not_reconciled' => 'Giao dịch chưa đối chiếu', 'search_modifier_id' => 'ID giao dịch là ":value"', - 'search_modifier_not_id' => 'Transaction ID is not ":value"', + 'search_modifier_not_id' => 'ID giao dịch không phải ":value"', 'search_modifier_date_before' => 'Ngày giao dịch phải trước hoặc ngay ":value"', 'search_modifier_date_after' => 'Ngày giao dịch phải sau hoặc ngay ":value"', - 'search_modifier_external_id_is' => 'External ID is ":value"', - 'search_modifier_not_external_id_is' => 'External ID is not ":value"', + 'search_modifier_external_id_is' => 'ID ngoài là ":value"', + 'search_modifier_not_external_id_is' => 'ID ngoài không phải ":value"', 'search_modifier_no_external_url' => 'Giao dịch không có URL bên ngoài', - 'search_modifier_no_external_id' => 'The transaction has no external ID', - 'search_modifier_not_any_external_url' => 'The transaction has no external URL', - 'search_modifier_not_any_external_id' => 'The transaction has no external ID', + 'search_modifier_no_external_id' => 'Giao dịch không có ID bên ngoài', + 'search_modifier_not_any_external_url' => 'Giao dịch không có URL bên ngoài', + 'search_modifier_not_any_external_id' => 'Giao dịch không có ID bên ngoài', 'search_modifier_any_external_url' => 'Giao dịch phải có 1 (hoặc nhiều) URL bên ngoài', - 'search_modifier_any_external_id' => 'The transaction must have a (any) external ID', - 'search_modifier_not_no_external_url' => 'The transaction must have a (any) external URL', - 'search_modifier_not_no_external_id' => 'The transaction must have a (any) external ID', - 'search_modifier_internal_reference_is' => 'Internal reference is ":value"', - 'search_modifier_not_internal_reference_is' => 'Internal reference is not ":value"', - 'search_modifier_description_starts' => 'Description starts with ":value"', - 'search_modifier_not_description_starts' => 'Description does not start with ":value"', - 'search_modifier_description_ends' => 'Description ends on ":value"', - 'search_modifier_not_description_ends' => 'Description does not end on ":value"', + 'search_modifier_any_external_id' => 'Giao dịch phải có 1 (hoặc nhiều) ID ngoài', + 'search_modifier_not_no_external_url' => 'Giao dịch phải có 1 (hoặc nhiều) URL bên ngoài', + 'search_modifier_not_no_external_id' => 'Giao dịch phải có 1 (bất kì) ID ngoài', + 'search_modifier_internal_reference_is' => 'Tham chiếu nội bộ là ":value"', + 'search_modifier_not_internal_reference_is' => 'Tham chiếu nội bộ không phải ":value"', + 'search_modifier_description_starts' => 'Mô tả bắt đầu bằng ":value"', + 'search_modifier_not_description_starts' => 'Mô tả không bắt đầu bằng ":value"', + 'search_modifier_description_ends' => 'Mô tả kết thúc bằng ":value"', + 'search_modifier_not_description_ends' => 'Mô tả không kết thúc bằng ":value"', 'search_modifier_description_contains' => 'Mô tả có chứa ":value"', - 'search_modifier_not_description_contains' => 'Description does not contain ":value"', + 'search_modifier_not_description_contains' => 'Mô tả không có chứa ":value"', 'search_modifier_description_is' => 'Mô tả chính xác ":value"', - 'search_modifier_not_description_is' => 'Description is exactly not ":value"', + 'search_modifier_not_description_is' => 'Mô tả chắc chắn không phải ":value"', 'search_modifier_currency_is' => 'Đơn vị tiền tệ của giao dịch (nước ngoài) là ":value"', - 'search_modifier_not_currency_is' => 'Transaction (foreign) currency is not ":value"', + 'search_modifier_not_currency_is' => 'Tiền (ngoại tệ) giao dịch không phải là ":value"', 'search_modifier_foreign_currency_is' => 'Ngoại tệ giao dịch là ":value"', - 'search_modifier_not_foreign_currency_is' => 'Transaction foreign currency is not ":value"', + 'search_modifier_not_foreign_currency_is' => 'Ngoại tệ của giao dịch không phải là ":value"', 'search_modifier_has_attachments' => 'Giao dịch phải có tệp đính kèm', 'search_modifier_has_no_category' => 'Giao dịch phải không có danh mục', - 'search_modifier_not_has_no_category' => 'The transaction must have a (any) category', - 'search_modifier_not_has_any_category' => 'The transaction must have no category', + 'search_modifier_not_has_no_category' => 'Giao dịch phải có 1 (bất kì) danh mục', + 'search_modifier_not_has_any_category' => 'Giao dịch phải không có danh mục', 'search_modifier_has_any_category' => 'Giao dịch phải có danh mục', 'search_modifier_has_no_budget' => 'Giao dịch phải không có ngân sách', - 'search_modifier_not_has_any_budget' => 'The transaction must have no budget', + 'search_modifier_not_has_any_budget' => 'Giao dịch phải không có ngân sách', 'search_modifier_has_any_budget' => 'Giao dịch có ngân sách (bất kỳ)', - 'search_modifier_not_has_no_budget' => 'The transaction must have a (any) budget', + 'search_modifier_not_has_no_budget' => 'Giao dịch có 1 (bất kỳ) ngân sách', 'search_modifier_has_no_bill' => 'Giao dịch phải không có hóa đơn', - 'search_modifier_not_has_no_bill' => 'The transaction must have a (any) bill', + 'search_modifier_not_has_no_bill' => 'Giao dịch phải có 1 (bất kì) hóa đơn', 'search_modifier_has_any_bill' => 'Giao dịch phải có 1 (hoặc nhiều) hóa đơn', - 'search_modifier_not_has_any_bill' => 'The transaction must have no bill', + 'search_modifier_not_has_any_bill' => 'Giao dịch phải không có hóa đơn', 'search_modifier_has_no_tag' => 'Giao dịch phải không có thẻ', - 'search_modifier_not_has_any_tag' => 'The transaction must have no tags', - 'search_modifier_not_has_no_tag' => 'The transaction must have a (any) tag', + 'search_modifier_not_has_any_tag' => 'Giao dịch phải không có thẻ', + 'search_modifier_not_has_no_tag' => 'Giao dịch phải có 1 (bất kì) thẻ', 'search_modifier_has_any_tag' => 'Giao dịch phải có thẻ', - 'search_modifier_notes_contains' => 'The transaction notes contain ":value"', - 'search_modifier_not_notes_contains' => 'The transaction notes do not contain ":value"', - 'search_modifier_notes_starts' => 'The transaction notes start with ":value"', - 'search_modifier_not_notes_starts' => 'The transaction notes do not start with ":value"', - 'search_modifier_notes_ends' => 'The transaction notes end with ":value"', - 'search_modifier_not_notes_ends' => 'The transaction notes do not end with ":value"', - 'search_modifier_notes_is' => 'The transaction notes are exactly ":value"', - 'search_modifier_not_notes_is' => 'The transaction notes are exactly not ":value"', + 'search_modifier_notes_contains' => 'Các ghi chú giao dịch chứa ":value"', + 'search_modifier_not_notes_contains' => 'Các ghi chú giao dịch không chứa ":value"', + 'search_modifier_notes_starts' => 'Các ghi chú giao dịch bắt đầu bằng ":value"', + 'search_modifier_not_notes_starts' => 'Các ghi chú giao dịch không bắt đầu bằng ":value"', + 'search_modifier_notes_ends' => 'Các ghi chú giao dịch kết thúc bằng ":value"', + 'search_modifier_not_notes_ends' => 'Các ghi chú giao dịch không kết thúc bằng ":value"', + 'search_modifier_notes_is' => 'Các ghi chú giao dịch chính xác là ":value"', + 'search_modifier_not_notes_is' => 'Các ghi chú giao dịch không chính xác là ":value"', 'search_modifier_no_notes' => 'Giao dịch không có ghi chú', - 'search_modifier_not_no_notes' => 'The transaction must have notes', + 'search_modifier_not_no_notes' => 'Giao dịch phải có ghi chú', 'search_modifier_any_notes' => 'Giao dịch phải có ghi chú', - 'search_modifier_not_any_notes' => 'The transaction has no notes', - 'search_modifier_amount_is' => 'Amount is exactly :value', - 'search_modifier_not_amount_is' => 'Amount is not :value', + 'search_modifier_not_any_notes' => 'Giao dịch không có ghi chú', + 'search_modifier_amount_is' => 'Số lượng chính xác là :value', + 'search_modifier_not_amount_is' => 'Số tiền không phải :value', 'search_modifier_amount_less' => 'Số tiền phải nhỏ hơn hoặc bằng :value', - 'search_modifier_not_amount_more' => 'Amount is less than or equal to :value', + 'search_modifier_not_amount_more' => 'Số tiền phải nhỏ hơn hoặc bằng :value', 'search_modifier_amount_more' => 'Số tiền phải lớn hơn hoặc bằng :value', - 'search_modifier_not_amount_less' => 'Amount is more than or equal to :value', + 'search_modifier_not_amount_less' => 'Số tiền phải lớn hơn hoặc bằng :value', 'search_modifier_source_account_is' => 'Tên tài khoản chính xác là ":value"', - 'search_modifier_not_source_account_is' => 'Source account name is not ":value"', + 'search_modifier_not_source_account_is' => 'Tên tài khoản gửi không phải ":value"', 'search_modifier_source_account_contains' => 'Tên tài khoản bao gồm ":value"', 'search_modifier_not_source_account_contains' => 'Source account name does not contain ":value"', 'search_modifier_source_account_starts' => 'Source account name starts with ":value"', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Transaction type is ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Nhãn là ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => 'Tạo quy tắc mới từ truy vấn tìm kiếm', '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => 'Các sửa đổi sau đây cũng được áp dụng cho tìm kiếm:', 'general_search_error' => 'Đã xảy ra lỗi trong khi tìm kiếm. Vui lòng kiểm tra các tệp nhật ký để biết thêm thông tin.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'Bạn không thể thực thi các quy tắc không hoạt động.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => 'Quy tắc', 'rule_name' => 'Tên của quy tắc', 'rule_triggers' => 'Quy tắc kích hoạt khi', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => 'Khi một giao dịch được cập nhật', 'rule_trigger_user_action' => 'Hành động của người dùng là ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Source account name starts with..', 'rule_trigger_source_account_starts' => 'Source account name starts with ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => 'Ngân sách là ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => 'Tiền tệ giao dịch là..', 'rule_trigger_currency_is' => 'Tiền tệ giao dịch là ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Giao dịch ngoại tệ là..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => 'Nhóm quy tắc cho hóa đơn', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => 'Quy tắc cho hóa đơn ":name"', 'new_rule_for_bill_description' => 'Quy tắc này đánh dấu các giao dịch cho hóa đơn ":name".', - 'new_rule_for_journal_title' => 'Quy tắc dựa trên giao dich ":description"', - 'new_rule_for_journal_description' => 'Quy tắc này dựa trên giao dịch ":description".', + 'new_rule_for_journal_title' => 'Quy tắc dựa trên giao dich ":description"', + 'new_rule_for_journal_description' => 'Quy tắc này dựa trên giao dịch ":description".', // tags - 'store_new_tag' => 'Lưu trữ nhãn mới', - 'update_tag' => 'Cập nhật nhãn', - 'no_location_set' => 'Không có vị trí được đặt.', - 'meta_data' => 'Meta data', - 'location' => 'Vị trí', - 'without_date' => 'Không có ngày', - 'result' => 'Kết quả', - 'sums_apply_to_range' => 'Tất cả các khoản tiền áp dụng cho phạm vi đã chọn', - 'mapbox_api_key' => 'Để sử dụng bản đồ, hãy lấy khóa API từ Mapbox. Open your .env tập tin và nhập mã này sau MAPBOX_API_KEY=.', - 'press_object_location' => 'Nhấp chuột phải hoặc nhấn lâu để đặt vị trí của đối tượng.', - 'clear_location' => 'Xóa vị trí', - 'delete_all_selected_tags' => 'Xóa tất cả các nhãn đã chọn', - 'select_tags_to_delete' => 'Đừng quên chọn một số nhãn.', - 'deleted_x_tags' => 'Xóa nhãn :count.', - 'create_rule_from_transaction' => 'Tạo quy tắc dựa trên giao dịch', - 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', - + 'store_new_tag' => 'Lưu trữ nhãn mới', + 'update_tag' => 'Cập nhật nhãn', + 'no_location_set' => 'Không có vị trí được đặt.', + 'meta_data' => 'Meta data', + 'location' => 'Vị trí', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => 'Không có ngày', + 'result' => 'Kết quả', + 'sums_apply_to_range' => 'Tất cả các khoản tiền áp dụng cho phạm vi đã chọn', + 'mapbox_api_key' => 'Để sử dụng bản đồ, hãy lấy khóa API từ Mapbox. Open your .env tập tin và nhập mã này sau MAPBOX_API_KEY=.', + 'press_object_location' => 'Nhấp chuột phải hoặc nhấn lâu để đặt vị trí của đối tượng.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => 'Xóa vị trí', + 'delete_all_selected_tags' => 'Xóa tất cả các nhãn đã chọn', + 'select_tags_to_delete' => 'Đừng quên chọn một số nhãn.', + 'deleted_x_tags' => 'Xóa nhãn :count.', + 'create_rule_from_transaction' => 'Tạo quy tắc dựa trên giao dịch', + 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(bằng ngôn ngữ)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => 'Tài khoản màn hình chính', - 'pref_home_screen_accounts_help' => 'Những tài khoản nào sẽ được hiển thị trên trang chủ?', - 'pref_view_range' => 'Xem nhiều', - 'pref_view_range_help' => 'Một số biểu đồ được tự động nhóm trong các giai đoạn. Ngân sách của bạn cũng sẽ được nhóm theo thời gian. Bạn thích thời gian nào?', - 'pref_1D' => 'Một ngày', - 'pref_1W' => 'Một tuần', - 'pref_1M' => 'Một tháng', - 'pref_3M' => 'Ba tháng (quý)', - 'pref_6M' => 'Sáu tháng', - 'pref_1Y' => 'Một năm', - 'pref_last365' => 'Năm trước', - 'pref_last90' => '90 ngày cuối', - 'pref_last30' => '30 ngày cuối', - 'pref_last7' => '7 ngày trước', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => 'Ngôn ngữ', - 'pref_locale' => 'Thiết lập địa phương', - 'pref_languages_help' => 'Firefly III hỗ trợ một số ngôn ngữ. Bạn thích cái nào hơn?', - 'pref_locale_help' => 'Firefly III cho phép bạn đặt các cài đặt cục bộ khác, như cách định dạng tiền tệ, số và ngày. Các mục trong danh sách này có thể không được hệ thống của bạn hỗ trợ. Firefly III không có cài đặt ngày chính xác cho mọi miền; liên hệ với tôi để cải thiện.', - 'pref_locale_no_demo' => 'Tính năng này sẽ không hoạt động cho người dùng demo.', - 'pref_custom_fiscal_year' => 'Cài đặt năm tài chính', - 'pref_custom_fiscal_year_label' => 'Đã bật', - 'pref_custom_fiscal_year_help' => 'Ở các quốc gia sử dụng năm tài chính khác từ ngày 1 tháng 1 đến ngày 31 tháng 12, bạn có thể bật tính năng này và chỉ định ngày bắt đầu / ngày kết thúc của năm tài chính', - 'pref_fiscal_year_start_label' => 'Ngày bắt đầu năm tài chính', - 'pref_two_factor_auth' => 'Xác minh 2 bước', - 'pref_two_factor_auth_help' => 'Khi bạn bật xác minh 2 bước (còn được gọi là xác thực hai yếu tố), bạn sẽ thêm một lớp bảo mật bổ sung cho tài khoản của mình. Bạn đăng nhập bằng thứ gì đó bạn biết (mật khẩu của bạn) và thứ bạn có (mã xác minh). Mã xác minh được tạo bởi một ứng dụng trên điện thoại của bạn, chẳng hạn như Authy hoặc Google Authenticator.', - 'pref_enable_two_factor_auth' => 'Cho phép xác minh 2 bước', - 'pref_two_factor_auth_disabled' => 'Mã xác minh 2 bước đã bị xóa và vô hiệu hóa', - 'pref_two_factor_auth_remove_it' => 'Đừng quên xóa tài khoản khỏi ứng dụng xác thực của bạn!', - 'pref_two_factor_auth_code' => 'Mã xác minh', - 'pref_two_factor_auth_code_help' => 'Quét mã QR bằng một ứng dụng trên điện thoại của bạn như Authy hoặc Google Authenticator và nhập mã được tạo.', - 'pref_two_factor_auth_reset_code' => 'Đặt lại mã xác minh', - 'pref_two_factor_auth_disable_2fa' => 'Vô hiệu hóa 2FA', - '2fa_use_secret_instead' => 'Nếu bạn không thể quét mã QR, thay vào đó hãy sử dụng bí mật: :secret.', - '2fa_backup_codes' => 'Lưu trữ các mã dự phòng này để truy cập trong trường hợp bạn mất thiết bị.', - '2fa_already_enabled' => 'Xác minh 2 bước đã được bật.', - 'wrong_mfa_code' => 'Mã MFA này không hợp lệ.', - 'pref_save_settings' => 'Lưu các thiết lập', - 'saved_preferences' => 'Đã lưu tùy chọn!', - 'preferences_general' => 'Chung', - 'preferences_frontpage' => 'Màn hình chính', - 'preferences_security' => 'Bảo mật', - 'preferences_layout' => 'Bố trí', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => 'Hiển thị tiền gửi trên màn hình chính', - 'pref_home_show_deposits_info' => 'Màn hình chính đã hiển thị các tài khoản chi phí của bạn. Nó cũng sẽ hiển thị tài khoản doanh thu của bạn?', - 'pref_home_do_show_deposits' => 'Vâng, hiện chúng', - 'successful_count' => 'trong :count thành công', - 'list_page_size_title' => 'Kích thước trang', - 'list_page_size_help' => 'Bất kỳ danh sách các thứ (tài khoản, giao dịch, v.v.) đều hiển thị nhiều nhất trên mỗi trang.', - 'list_page_size_label' => 'Kích thước trang', - 'between_dates' => '(:start và :end)', - 'pref_optional_fields_transaction' => 'Các trường tùy chọn cho giao dịch', - 'pref_optional_fields_transaction_help' => 'Theo mặc định, không phải tất cả các trường đều được bật khi tạo giao dịch mới (vì sự lộn xộn). Dưới đây, bạn có thể kích hoạt các trường này nếu bạn nghĩ rằng chúng có thể hữu ích cho bạn. Tất nhiên, bất kỳ trường nào bị vô hiệu hóa, nhưng đã được điền vào, sẽ hiển thị bất kể cài đặt.', - 'optional_tj_date_fields' => 'Trường ngày', - 'optional_tj_other_fields' => 'Các dữ liệu khác', - 'optional_tj_attachment_fields' => 'Trường đính kèm', - 'pref_optional_tj_interest_date' => 'Ngày lãi', - 'pref_optional_tj_book_date' => 'Ngày đặt sách', - 'pref_optional_tj_process_date' => 'Ngày xử lý', - 'pref_optional_tj_due_date' => 'Ngày đáo hạn', - 'pref_optional_tj_payment_date' => 'Ngày thanh toán', - 'pref_optional_tj_invoice_date' => 'Ngày hóa đơn', - 'pref_optional_tj_internal_reference' => 'Tài liệu tham khảo nội bộ', - 'pref_optional_tj_notes' => 'Ghi chú', - 'pref_optional_tj_attachments' => 'Tài liệu đính kèm', - 'pref_optional_tj_external_url' => 'URL bên ngoài', - 'pref_optional_tj_location' => 'Vị trí', - 'pref_optional_tj_links' => 'Liên kết giao dịch', - 'optional_field_meta_dates' => 'Ngày', - 'optional_field_meta_business' => 'Kinh doanh', - 'optional_field_attachments' => 'Tài liệu đính kèm', - 'optional_field_meta_data' => 'Dữ liệu meta tùy chọn', - 'external_url' => 'URL bên ngoài', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(bằng ngôn ngữ)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => 'Tài khoản màn hình chính', + 'pref_home_screen_accounts_help' => 'Những tài khoản nào sẽ được hiển thị trên trang chủ?', + 'pref_view_range' => 'Xem nhiều', + 'pref_view_range_help' => 'Một số biểu đồ được tự động nhóm trong các giai đoạn. Ngân sách của bạn cũng sẽ được nhóm theo thời gian. Bạn thích thời gian nào?', + 'pref_1D' => 'Một ngày', + 'pref_1W' => 'Một tuần', + 'pref_1M' => 'Một tháng', + 'pref_3M' => 'Ba tháng (quý)', + 'pref_6M' => 'Sáu tháng', + 'pref_1Y' => 'Một năm', + 'pref_last365' => 'Năm trước', + 'pref_last90' => '90 ngày cuối', + 'pref_last30' => '30 ngày cuối', + 'pref_last7' => '7 ngày trước', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => 'Ngôn ngữ', + 'pref_locale' => 'Thiết lập địa phương', + 'pref_languages_help' => 'Firefly III hỗ trợ một số ngôn ngữ. Bạn thích cái nào hơn?', + 'pref_locale_help' => 'Firefly III cho phép bạn đặt các cài đặt cục bộ khác, như cách định dạng tiền tệ, số và ngày. Các mục trong danh sách này có thể không được hệ thống của bạn hỗ trợ. Firefly III không có cài đặt ngày chính xác cho mọi miền; liên hệ với tôi để cải thiện.', + 'pref_locale_no_demo' => 'Tính năng này sẽ không hoạt động cho người dùng demo.', + 'pref_custom_fiscal_year' => 'Cài đặt năm tài chính', + 'pref_custom_fiscal_year_label' => 'Đã bật', + 'pref_custom_fiscal_year_help' => 'Ở các quốc gia sử dụng năm tài chính khác từ ngày 1 tháng 1 đến ngày 31 tháng 12, bạn có thể bật tính năng này và chỉ định ngày bắt đầu / ngày kết thúc của năm tài chính', + 'pref_fiscal_year_start_label' => 'Ngày bắt đầu năm tài chính', + 'pref_two_factor_auth' => 'Xác minh 2 bước', + 'pref_two_factor_auth_help' => 'Khi bạn bật xác minh 2 bước (còn được gọi là xác thực hai yếu tố), bạn sẽ thêm một lớp bảo mật bổ sung cho tài khoản của mình. Bạn đăng nhập bằng thứ gì đó bạn biết (mật khẩu của bạn) và thứ bạn có (mã xác minh). Mã xác minh được tạo bởi một ứng dụng trên điện thoại của bạn, chẳng hạn như Authy hoặc Google Authenticator.', + 'pref_enable_two_factor_auth' => 'Cho phép xác minh 2 bước', + 'pref_two_factor_auth_disabled' => 'Mã xác minh 2 bước đã bị xóa và vô hiệu hóa', + 'pref_two_factor_auth_remove_it' => 'Đừng quên xóa tài khoản khỏi ứng dụng xác thực của bạn!', + 'pref_two_factor_auth_code' => 'Mã xác minh', + 'pref_two_factor_auth_code_help' => 'Quét mã QR bằng một ứng dụng trên điện thoại của bạn như Authy hoặc Google Authenticator và nhập mã được tạo.', + 'pref_two_factor_auth_reset_code' => 'Đặt lại mã xác minh', + 'pref_two_factor_auth_disable_2fa' => 'Vô hiệu hóa 2FA', + '2fa_use_secret_instead' => 'Nếu bạn không thể quét mã QR, thay vào đó hãy sử dụng bí mật: :secret.', + '2fa_backup_codes' => 'Lưu trữ các mã dự phòng này để truy cập trong trường hợp bạn mất thiết bị.', + '2fa_already_enabled' => 'Xác minh 2 bước đã được bật.', + 'wrong_mfa_code' => 'Mã MFA này không hợp lệ.', + 'pref_save_settings' => 'Lưu các thiết lập', + 'saved_preferences' => 'Đã lưu tùy chọn!', + 'preferences_general' => 'Chung', + 'preferences_frontpage' => 'Màn hình chính', + 'preferences_security' => 'Bảo mật', + 'preferences_layout' => 'Bố trí', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => 'Hiển thị tiền gửi trên màn hình chính', + 'pref_home_show_deposits_info' => 'Màn hình chính đã hiển thị các tài khoản chi phí của bạn. Nó cũng sẽ hiển thị tài khoản doanh thu của bạn?', + 'pref_home_do_show_deposits' => 'Vâng, hiện chúng', + 'successful_count' => 'trong :count thành công', + 'list_page_size_title' => 'Kích thước trang', + 'list_page_size_help' => 'Bất kỳ danh sách các thứ (tài khoản, giao dịch, v.v.) đều hiển thị nhiều nhất trên mỗi trang.', + 'list_page_size_label' => 'Kích thước trang', + 'between_dates' => '(:start và :end)', + 'pref_optional_fields_transaction' => 'Các trường tùy chọn cho giao dịch', + 'pref_optional_fields_transaction_help' => 'Theo mặc định, không phải tất cả các trường đều được bật khi tạo giao dịch mới (vì sự lộn xộn). Dưới đây, bạn có thể kích hoạt các trường này nếu bạn nghĩ rằng chúng có thể hữu ích cho bạn. Tất nhiên, bất kỳ trường nào bị vô hiệu hóa, nhưng đã được điền vào, sẽ hiển thị bất kể cài đặt.', + 'optional_tj_date_fields' => 'Trường ngày', + 'optional_tj_other_fields' => 'Các dữ liệu khác', + 'optional_tj_attachment_fields' => 'Trường đính kèm', + 'pref_optional_tj_interest_date' => 'Ngày lãi', + 'pref_optional_tj_book_date' => 'Ngày đặt sách', + 'pref_optional_tj_process_date' => 'Ngày xử lý', + 'pref_optional_tj_due_date' => 'Ngày đáo hạn', + 'pref_optional_tj_payment_date' => 'Ngày thanh toán', + 'pref_optional_tj_invoice_date' => 'Ngày hóa đơn', + 'pref_optional_tj_internal_reference' => 'Tài liệu tham khảo nội bộ', + 'pref_optional_tj_notes' => 'Ghi chú', + 'pref_optional_tj_attachments' => 'Tài liệu đính kèm', + 'pref_optional_tj_external_url' => 'URL bên ngoài', + 'pref_optional_tj_location' => 'Vị trí', + 'pref_optional_tj_links' => 'Liên kết giao dịch', + 'optional_field_meta_dates' => 'Ngày', + 'optional_field_meta_business' => 'Kinh doanh', + 'optional_field_attachments' => 'Tài liệu đính kèm', + 'optional_field_meta_data' => 'Dữ liệu meta tùy chọn', + 'external_url' => 'URL bên ngoài', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'All your other sessions have been logged out.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Xóa TẤT CẢ ngân sách của bạn', - 'delete_all_categories' => 'Xóa TẤT CẢ danh mục của bạn', - 'delete_all_tags' => 'Xóa TẤT CẢ các nhãn của bạn', - 'delete_all_bills' => 'Xóa TẤT CẢ các hóa đơn của bạn', - 'delete_all_piggy_banks' => 'Xóa TẤT CẢ các ống heo của bạn', - 'delete_all_rules' => 'Xóa TẤT CẢ các luật của bạn', - 'delete_all_recurring' => 'Xóa TẤT CẢ các giao dịch định kỳ của bạn', - 'delete_all_object_groups' => 'Xóa TẤT CẢ các nhóm đối tượng của bạn', - 'delete_all_accounts' => 'Xóa TẤT CẢ các tài khoản của bạn', - 'delete_all_asset_accounts' => 'Xóa TẤT CẢ các tài khoản của bạn', - 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', - 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', - 'delete_all_liabilities' => 'Delete ALL your liabilities', - 'delete_all_transactions' => 'Xóa TẤT CẢ giao dịch của bạn', - 'delete_all_withdrawals' => 'Delete ALL your withdrawals', - 'delete_all_deposits' => 'Delete ALL your deposits', - 'delete_all_transfers' => 'Delete ALL your transfers', - 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', - 'deleted_all_budgets' => 'Tất cả ngân sách đã bị xóa', - 'deleted_all_categories' => 'Tất cả các danh mục đã bị xóa', - 'deleted_all_tags' => 'Tất cả các nhãn bị xóa', - 'deleted_all_bills' => 'Tất cả các hóa đơn đã được xóa', - 'deleted_all_piggy_banks' => 'Tất cả heo đất đã bị xóa', - 'deleted_all_rules' => 'Tất cả các quy tắc và nhóm quy tắc đã bị xóa', - 'deleted_all_object_groups' => 'Tất cả các nhóm đã bị xóa', - 'deleted_all_accounts' => 'Tất cả các tài khoản đã bị xóa', - 'deleted_all_asset_accounts' => 'Tất cả các tài khoản đã bị xóa', - 'deleted_all_expense_accounts' => 'Tất cả các tài khoản chi phí đã bị xóa', - 'deleted_all_revenue_accounts' => 'Tất cả các tài khoản doanh thu đã bị xóa', - 'deleted_all_liabilities' => 'Tất cả các khoản nợ đã được xóa', - 'deleted_all_transactions' => 'Tất cả các giao dịch đã bị xóa', - 'deleted_all_withdrawals' => 'Tất cả các lần rút tiền đã bị xóa', - 'deleted_all_deposits' => 'Tất cả các khoản tiền gửi đã bị xóa', - 'deleted_all_transfers' => 'Tất cả các chuyển khoản đã bị xóa', - 'deleted_all_recurring' => 'Tất cả các giao dịch định kỳ đã bị xóa', - 'change_your_password' => 'Thay đổi mật khẩu của bạn', - 'delete_account' => 'Xóa tài khoản', - 'current_password' => 'Mật khẩu hiện tại', - 'new_password' => 'Mật khẩu mới', - 'new_password_again' => 'Mật khẩu mới (một lần nữa)', - 'delete_your_account' => 'Xóa tài khoản của bạn', - 'delete_your_account_help' => 'Xóa tài khoản của bạn cũng sẽ xóa mọi tài khoản, giao dịch, anything bạn đã lưu vào Firefly III.', - 'delete_your_account_password' => 'Nhập mật khẩu của bạn để tiếp tục.', - 'password' => 'Mật khẩu', - 'are_you_sure' => 'Bạn có chắc không? Bạn không thể hoàn tác điều này.', - 'delete_account_button' => 'Xóa tài khoản của bạn', - 'invalid_current_password' => 'Mật khẩu hiện tại không hợp lệ!', - 'password_changed' => 'Mật khẩu đã được thay đổi!', - 'should_change' => 'Ý tưởng là thay đổi mật khẩu của bạn.', - 'invalid_password' => 'Mật khẩu không hợp lệ!', - 'what_is_pw_security' => '"Xác minh bảo mật mật khẩu" là gì?', - 'secure_pw_title' => 'Cách chọn mật khẩu an toàn', - 'forgot_password_response' => 'Cảm ơn bạn. Nếu tài khoản tồn tại với địa chỉ email này, bạn sẽ tìm thấy hướng dẫn trong hộp thư đến của mình.', - 'secure_pw_history' => 'Không có một tuần trôi qua mà bạn đọc trong tin tức về một trang web bị mất mật khẩu của người dùng. Tin tặc và kẻ trộm sử dụng các mật khẩu này để cố lấy cắp thông tin cá nhân của bạn. Thông tin này có giá trị.', - 'secure_pw_ff' => 'Bạn có sử dụng cùng một mật khẩu trên internet không? Nếu một trang web mất mật khẩu, tin tặc có quyền truy cập vào tất cả dữ liệu của bạn. Firefly III dựa vào bạn để chọn một mật khẩu mạnh và duy nhất để bảo vệ hồ sơ tài chính của bạn.', - 'secure_pw_check_box' => 'Để giúp bạn làm điều đó, Firefly III có thể kiểm tra xem mật khẩu bạn muốn sử dụng có bị đánh cắp trong quá khứ không. Nếu đây là trường hợp, Firefly III khuyên bạn KHÔNG nên sử dụng mật khẩu đó.', - 'secure_pw_working_title' => 'Làm thế nào nó hoạt động?', - 'secure_pw_working' => 'Bằng cách chọn hộp, Firefly III sẽ gửi năm ký tự đầu tiên của hàm băm SHA1 của mật khẩu của bạn tới trang web của Troy Hunt để xem nó có trong danh sách không. Điều này sẽ ngăn bạn sử dụng mật khẩu không an toàn như được khuyến nghị trong phần mới nhất Ấn phẩm đặc biệt của NIST về chủ đề này.', - 'secure_pw_should' => 'Tôi có nên check vào hộp không?', - 'secure_pw_long_password' => 'Đúng. Luôn xác minh mật khẩu của bạn an toàn.', - 'command_line_token' => 'Mã thông báo dòng lệnh', - 'explain_command_line_token' => 'Bạn cần token này để thực hiện các tùy chọn dòng lệnh, chẳng hạn như xuất dữ liệu. Không có nó, lệnh nhạy cảm đó sẽ không hoạt động. Không chia sẻ mã thông báo dòng lệnh của bạn. Không ai sẽ yêu cầu bạn cho mã thông báo này, ngay cả tôi. Nếu bạn sợ bạn mất thứ này, hãy tạo lại mã thông báo này bằng nút.', - 'regenerate_command_line_token' => 'Tạo lại mã thông báo dòng lệnh', - 'token_regenerated' => 'Một mã thông báo dòng lệnh mới đã được tạo', - 'change_your_email' => 'Thay đổi địa chỉ email của bạn', - 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', - 'email_changed_logout' => 'Cho đến khi bạn xác minh địa chỉ email của mình, bạn không thể đăng nhập.', - 'login_with_new_email' => 'Bây giờ bạn có thể đăng nhập bằng địa chỉ email mới của bạn.', - 'login_with_old_email' => 'Bây giờ bạn có thể đăng nhập lại với địa chỉ email cũ của bạn.', - 'login_provider_local_only' => 'Hành động này không khả dụng khi xác thực thông qua ": login_provider".', - 'external_user_mgt_disabled' => 'Hành động này không khả dụng khi Firefly III không chịu trách nhiệm quản lý người dùng hoặc xử lý xác thực.', - 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', - 'delete_local_info_only' => "Vì Firefly III không chịu trách nhiệm quản lý người dùng hoặc xử lý xác thực, nên chức năng này sẽ chỉ xóa thông tin Firefly III cục bộ.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Clients', - 'profile_oauth_no_clients' => 'Bạn đã không tạo ra bất kỳ OAuth clients nào.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Client ID', - 'profile_oauth_client_name' => 'Tên', - 'profile_oauth_client_secret' => 'Mã bí mật', - 'profile_oauth_create_new_client' => 'Tạo mới Client', - 'profile_oauth_create_client' => 'Tạo Client', - 'profile_oauth_edit_client' => 'Sửa Client', - 'profile_oauth_name_help' => 'Một cái gì đó người dùng của bạn sẽ nhận ra và tin tưởng.', - 'profile_oauth_redirect_url' => 'URL chuyển tiếp', - 'profile_oauth_redirect_url_help' => 'URL gọi lại ủy quyền của ứng dụng của bạn.', - 'profile_authorized_apps' => 'Uỷ quyền ứng dụng', - 'profile_authorized_clients' => 'Client ủy quyền', - 'profile_scopes' => 'Phạm vi', - 'profile_revoke' => 'Thu hồi', - 'profile_oauth_client_secret_title' => 'Client Secret', - 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', - 'profile_personal_access_tokens' => 'Mã truy cập cá nhân', - 'profile_personal_access_token' => 'Mã truy cập cá nhân', - 'profile_oauth_confidential' => 'Confidential', - 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', - 'profile_personal_access_token_explanation' => 'Đây là mã thông báo truy cập cá nhân mới của bạn. Đây là lần duy nhất nó sẽ được hiển thị vì vậy đừng đánh mất nó! Bây giờ bạn có thể sử dụng mã thông báo này để thực hiện API.', - 'profile_no_personal_access_token' => 'Bạn chưa tạo bất kỳ mã thông báo truy cập cá nhân nào.', - 'profile_create_new_token' => 'Tạo mã mới', - 'profile_create_token' => 'Tạo mã', - 'profile_create' => 'Tạo', - 'profile_save_changes' => 'Lưu thay đổi', - 'profile_whoops' => 'Rất tiếc!', - 'profile_something_wrong' => 'Có lỗi xảy ra!', - 'profile_try_again' => 'Xảy ra lỗi. Vui lòng thử lại.', - 'amounts' => 'Amounts', - 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', - 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', - 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', - 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'All your other sessions have been logged out.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Xóa TẤT CẢ ngân sách của bạn', + 'delete_all_categories' => 'Xóa TẤT CẢ danh mục của bạn', + 'delete_all_tags' => 'Xóa TẤT CẢ các nhãn của bạn', + 'delete_all_bills' => 'Xóa TẤT CẢ các hóa đơn của bạn', + 'delete_all_piggy_banks' => 'Xóa TẤT CẢ các ống heo của bạn', + 'delete_all_rules' => 'Xóa TẤT CẢ các luật của bạn', + 'delete_all_recurring' => 'Xóa TẤT CẢ các giao dịch định kỳ của bạn', + 'delete_all_object_groups' => 'Xóa TẤT CẢ các nhóm đối tượng của bạn', + 'delete_all_accounts' => 'Xóa TẤT CẢ các tài khoản của bạn', + 'delete_all_asset_accounts' => 'Xóa TẤT CẢ các tài khoản của bạn', + 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', + 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', + 'delete_all_liabilities' => 'Delete ALL your liabilities', + 'delete_all_transactions' => 'Xóa TẤT CẢ giao dịch của bạn', + 'delete_all_withdrawals' => 'Delete ALL your withdrawals', + 'delete_all_deposits' => 'Delete ALL your deposits', + 'delete_all_transfers' => 'Delete ALL your transfers', + 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', + 'deleted_all_budgets' => 'Tất cả ngân sách đã bị xóa', + 'deleted_all_categories' => 'Tất cả các danh mục đã bị xóa', + 'deleted_all_tags' => 'Tất cả các nhãn bị xóa', + 'deleted_all_bills' => 'Tất cả các hóa đơn đã được xóa', + 'deleted_all_piggy_banks' => 'Tất cả heo đất đã bị xóa', + 'deleted_all_rules' => 'Tất cả các quy tắc và nhóm quy tắc đã bị xóa', + 'deleted_all_object_groups' => 'Tất cả các nhóm đã bị xóa', + 'deleted_all_accounts' => 'Tất cả các tài khoản đã bị xóa', + 'deleted_all_asset_accounts' => 'Tất cả các tài khoản đã bị xóa', + 'deleted_all_expense_accounts' => 'Tất cả các tài khoản chi phí đã bị xóa', + 'deleted_all_revenue_accounts' => 'Tất cả các tài khoản doanh thu đã bị xóa', + 'deleted_all_liabilities' => 'Tất cả các khoản nợ đã được xóa', + 'deleted_all_transactions' => 'Tất cả các giao dịch đã bị xóa', + 'deleted_all_withdrawals' => 'Tất cả các lần rút tiền đã bị xóa', + 'deleted_all_deposits' => 'Tất cả các khoản tiền gửi đã bị xóa', + 'deleted_all_transfers' => 'Tất cả các chuyển khoản đã bị xóa', + 'deleted_all_recurring' => 'Tất cả các giao dịch định kỳ đã bị xóa', + 'change_your_password' => 'Thay đổi mật khẩu của bạn', + 'delete_account' => 'Xóa tài khoản', + 'current_password' => 'Mật khẩu hiện tại', + 'new_password' => 'Mật khẩu mới', + 'new_password_again' => 'Mật khẩu mới (một lần nữa)', + 'delete_your_account' => 'Xóa tài khoản của bạn', + 'delete_your_account_help' => 'Xóa tài khoản của bạn cũng sẽ xóa mọi tài khoản, giao dịch, anything bạn đã lưu vào Firefly III.', + 'delete_your_account_password' => 'Nhập mật khẩu của bạn để tiếp tục.', + 'password' => 'Mật khẩu', + 'are_you_sure' => 'Bạn có chắc không? Bạn không thể hoàn tác điều này.', + 'delete_account_button' => 'Xóa tài khoản của bạn', + 'invalid_current_password' => 'Mật khẩu hiện tại không hợp lệ!', + 'password_changed' => 'Mật khẩu đã được thay đổi!', + 'should_change' => 'Ý tưởng là thay đổi mật khẩu của bạn.', + 'invalid_password' => 'Mật khẩu không hợp lệ!', + 'what_is_pw_security' => '"Xác minh bảo mật mật khẩu" là gì?', + 'secure_pw_title' => 'Cách chọn mật khẩu an toàn', + 'forgot_password_response' => 'Cảm ơn bạn. Nếu tài khoản tồn tại với địa chỉ email này, bạn sẽ tìm thấy hướng dẫn trong hộp thư đến của mình.', + 'secure_pw_history' => 'Không có một tuần trôi qua mà bạn đọc trong tin tức về một trang web bị mất mật khẩu của người dùng. Tin tặc và kẻ trộm sử dụng các mật khẩu này để cố lấy cắp thông tin cá nhân của bạn. Thông tin này có giá trị.', + 'secure_pw_ff' => 'Bạn có sử dụng cùng một mật khẩu trên internet không? Nếu một trang web mất mật khẩu, tin tặc có quyền truy cập vào tất cả dữ liệu của bạn. Firefly III dựa vào bạn để chọn một mật khẩu mạnh và duy nhất để bảo vệ hồ sơ tài chính của bạn.', + 'secure_pw_check_box' => 'Để giúp bạn làm điều đó, Firefly III có thể kiểm tra xem mật khẩu bạn muốn sử dụng có bị đánh cắp trong quá khứ không. Nếu đây là trường hợp, Firefly III khuyên bạn KHÔNG nên sử dụng mật khẩu đó.', + 'secure_pw_working_title' => 'Làm thế nào nó hoạt động?', + 'secure_pw_working' => 'Bằng cách chọn hộp, Firefly III sẽ gửi năm ký tự đầu tiên của hàm băm SHA1 của mật khẩu của bạn tới trang web của Troy Hunt để xem nó có trong danh sách không. Điều này sẽ ngăn bạn sử dụng mật khẩu không an toàn như được khuyến nghị trong phần mới nhất Ấn phẩm đặc biệt của NIST về chủ đề này.', + 'secure_pw_should' => 'Tôi có nên check vào hộp không?', + 'secure_pw_long_password' => 'Đúng. Luôn xác minh mật khẩu của bạn an toàn.', + 'command_line_token' => 'Mã thông báo dòng lệnh', + 'explain_command_line_token' => 'Bạn cần token này để thực hiện các tùy chọn dòng lệnh, chẳng hạn như xuất dữ liệu. Không có nó, lệnh nhạy cảm đó sẽ không hoạt động. Không chia sẻ mã thông báo dòng lệnh của bạn. Không ai sẽ yêu cầu bạn cho mã thông báo này, ngay cả tôi. Nếu bạn sợ bạn mất thứ này, hãy tạo lại mã thông báo này bằng nút.', + 'regenerate_command_line_token' => 'Tạo lại mã thông báo dòng lệnh', + 'token_regenerated' => 'Một mã thông báo dòng lệnh mới đã được tạo', + 'change_your_email' => 'Thay đổi địa chỉ email của bạn', + 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', + 'email_changed_logout' => 'Cho đến khi bạn xác minh địa chỉ email của mình, bạn không thể đăng nhập.', + 'login_with_new_email' => 'Bây giờ bạn có thể đăng nhập bằng địa chỉ email mới của bạn.', + 'login_with_old_email' => 'Bây giờ bạn có thể đăng nhập lại với địa chỉ email cũ của bạn.', + 'login_provider_local_only' => 'Hành động này không khả dụng khi xác thực thông qua ": login_provider".', + 'external_user_mgt_disabled' => 'Hành động này không khả dụng khi Firefly III không chịu trách nhiệm quản lý người dùng hoặc xử lý xác thực.', + 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', + 'delete_local_info_only' => 'Vì Firefly III không chịu trách nhiệm quản lý người dùng hoặc xử lý xác thực, nên chức năng này sẽ chỉ xóa thông tin Firefly III cục bộ.', + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Clients', + 'profile_oauth_no_clients' => 'Bạn đã không tạo ra bất kỳ OAuth clients nào.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'Client ID', + 'profile_oauth_client_name' => 'Tên', + 'profile_oauth_client_secret' => 'Mã bí mật', + 'profile_oauth_create_new_client' => 'Tạo mới Client', + 'profile_oauth_create_client' => 'Tạo Client', + 'profile_oauth_edit_client' => 'Sửa Client', + 'profile_oauth_name_help' => 'Một cái gì đó người dùng của bạn sẽ nhận ra và tin tưởng.', + 'profile_oauth_redirect_url' => 'URL chuyển tiếp', + 'profile_oauth_redirect_url_help' => 'URL gọi lại ủy quyền của ứng dụng của bạn.', + 'profile_authorized_apps' => 'Uỷ quyền ứng dụng', + 'profile_authorized_clients' => 'Client ủy quyền', + 'profile_scopes' => 'Phạm vi', + 'profile_revoke' => 'Thu hồi', + 'profile_oauth_client_secret_title' => 'Client Secret', + 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', + 'profile_personal_access_tokens' => 'Mã truy cập cá nhân', + 'profile_personal_access_token' => 'Mã truy cập cá nhân', + 'profile_oauth_confidential' => 'Confidential', + 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', + 'profile_personal_access_token_explanation' => 'Đây là mã thông báo truy cập cá nhân mới của bạn. Đây là lần duy nhất nó sẽ được hiển thị vì vậy đừng đánh mất nó! Bây giờ bạn có thể sử dụng mã thông báo này để thực hiện API.', + 'profile_no_personal_access_token' => 'Bạn chưa tạo bất kỳ mã thông báo truy cập cá nhân nào.', + 'profile_create_new_token' => 'Tạo mã mới', + 'profile_create_token' => 'Tạo mã', + 'profile_create' => 'Tạo', + 'profile_save_changes' => 'Lưu thay đổi', + 'profile_whoops' => 'Rất tiếc!', + 'profile_something_wrong' => 'Có lỗi xảy ra!', + 'profile_try_again' => 'Xảy ra lỗi. Vui lòng thử lại.', + 'amounts' => 'Amounts', + 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', + 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', + 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', + 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Xuất dữ liệu từ Firefly III', - 'export_data_menu' => 'Xuất dữ liệu', - 'export_data_bc' => 'Xuất dữ liệu từ Firefly III', - 'export_data_main_title' => 'Xuất dữ liệu từ Firefly III', - 'export_data_expl' => 'Liên kết này cho phép bạn xuất tất cả các giao dịch + dữ liệu meta từ Firefly III. Vui lòng tham khảo trợ giúp (trên cùng bên phải (?) - biểu tượng) để biết thêm thông tin về quy trình.', - 'export_data_all_transactions' => 'Xuất tất cả các giao dịch', - 'export_data_advanced_expl' => 'Nếu bạn cần một kiểu xuất nâng cao hoặc cụ thể hơn, hãy đọc trợ giúp về cách sử dụng lệnh console php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Xuất dữ liệu từ Firefly III', + 'export_data_menu' => 'Xuất dữ liệu', + 'export_data_bc' => 'Xuất dữ liệu từ Firefly III', + 'export_data_main_title' => 'Xuất dữ liệu từ Firefly III', + 'export_data_expl' => 'Liên kết này cho phép bạn xuất tất cả các giao dịch + dữ liệu meta từ Firefly III. Vui lòng tham khảo trợ giúp (trên cùng bên phải (?) - biểu tượng) để biết thêm thông tin về quy trình.', + 'export_data_all_transactions' => 'Xuất tất cả các giao dịch', + 'export_data_advanced_expl' => 'Nếu bạn cần một kiểu xuất nâng cao hoặc cụ thể hơn, hãy đọc trợ giúp về cách sử dụng lệnh console php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => 'Một tệp đính kèm |: đếm tệp đính kèm', - 'attachments' => 'Tệp đính kèm', - 'edit_attachment' => 'Chỉnh sửa tập tin đính kèm ":name"', - 'update_attachment' => 'Cập nhật tệp đính kèm', - 'delete_attachment' => 'Xóa tệp đính kèm ":name"', - 'attachment_deleted' => 'Đã xóa tệp đính kèm ":name"', - 'liabilities_deleted' => 'Xóa nợ ":name"', - 'attachment_updated' => 'Cập nhật tệp đính kèm ":name"', - 'upload_max_file_size' => 'Kích thước tệp tối đa: :size', - 'list_all_attachments' => 'Danh sách tất cả các tệp đính kèm', + 'nr_of_attachments' => 'Một tệp đính kèm |: đếm tệp đính kèm', + 'attachments' => 'Tệp đính kèm', + 'edit_attachment' => 'Chỉnh sửa tập tin đính kèm ":name"', + 'update_attachment' => 'Cập nhật tệp đính kèm', + 'delete_attachment' => 'Xóa tệp đính kèm ":name"', + 'attachment_deleted' => 'Đã xóa tệp đính kèm ":name"', + 'liabilities_deleted' => 'Xóa nợ ":name"', + 'attachment_updated' => 'Cập nhật tệp đính kèm ":name"', + 'upload_max_file_size' => 'Kích thước tệp tối đa: :size', + 'list_all_attachments' => 'Danh sách tất cả các tệp đính kèm', // transaction index - 'title_expenses' => 'Chi phí', - 'title_withdrawal' => 'Chi phí', - 'title_revenue' => 'Thu nhập doanh thu', - 'title_deposit' => 'Thu nhập doanh thu', - 'title_transfer' => 'Chuyển', - 'title_transfers' => 'Chuyển', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => 'Chi phí', + 'title_withdrawal' => 'Chi phí', + 'title_revenue' => 'Thu nhập doanh thu', + 'title_deposit' => 'Thu nhập doanh thu', + 'title_transfer' => 'Chuyển', + 'title_transfers' => 'Chuyển', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => 'Giao dịch này đã được rút tiền', - 'convert_is_already_type_Deposit' => 'Giao dịch này đã là một khoản tiền gửi', - 'convert_is_already_type_Transfer' => 'Giao dịch này đã được chuyển', - 'convert_to_Withdrawal' => 'Chuyển đôi ":description" thành rút tiền', - 'convert_to_Deposit' => 'Chuyển đôi ":description" thành gửi tiền', - 'convert_to_Transfer' => 'Chuyển đôi ":description" thành chuyển khoản', - 'convert_options_WithdrawalDeposit' => 'Chuyển đổi rút tiền thành tiền gửi', - 'convert_options_WithdrawalTransfer' => 'chuyển đổi rút tiền thành chuyển khoản', - 'convert_options_DepositTransfer' => 'Chuyển đôi tiền gửi thành chuyển khoản', - 'convert_options_DepositWithdrawal' => 'Chuyển đổi một khoản tiền gửi thành một khoản rút tiền', - 'convert_options_TransferWithdrawal' => 'Chuyển đổi chuyển khoản thành rút tiền', - 'convert_options_TransferDeposit' => 'Chuyển đổi chuyển khoản thành tiền gửi', - 'convert_Withdrawal_to_deposit' => 'Chuyển đổi khoản rút tiền thành tiền gửi', - 'convert_Withdrawal_to_transfer' => 'Chuyển đổi khoản rút tiền thành chuyển khoản', - 'convert_Deposit_to_withdrawal' => 'Chuyển đổi khoản tiền gửi thành một khoản rút tiền', - 'convert_Deposit_to_transfer' => 'Chuyển đổi khoản ký gửi thành chuyển khoản', - 'convert_Transfer_to_deposit' => 'Chuyển đổi chuyển khoản thành một khoản tiền gửi', - 'convert_Transfer_to_withdrawal' => 'Chuyển đổi chuyển khoản thành rút tiền', - 'convert_please_set_revenue_source' => 'Vui lòng chọn tài khoản doanh thu nơi tiền sẽ đến.', - 'convert_please_set_asset_destination' => 'Vui lòng chọn tài khoản nơi tiền sẽ đến.', - 'convert_please_set_expense_destination' => 'Vui lòng chọn tài khoản chi phí nơi tiền sẽ được chuyển đến.', - 'convert_please_set_asset_source' => 'Vui lòng chọn tài khoản nơi tiền sẽ đến.', - 'convert_expl_w_d' => 'Khi chuyển đổi từ rút tiền sang tiền gửi, tiền sẽ được gửi vào tài khoản đích được hiển thị, thay vì được rút từ đó. | Khi chuyển đổi từ rút tiền sang tiền gửi, tiền sẽ được gửi vào tài khoản đích được hiển thị, thay vì được rút từ họ.', - 'convert_expl_w_t' => 'Khi chuyển đổi rút tiền thành chuyển khoản, tiền sẽ được chuyển từ tài khoản nguồn sang tài khoản nợ hoặc tài khoản nợ khác thay vì được sử dụng cho tài khoản chi phí ban đầu. Khi chuyển đổi rút tiền thành chuyển khoản, tiền sẽ được chuyển đi từ các tài khoản nguồn vào các tài khoản tài sản hoặc nợ khác thay vì được sử dụng cho các tài khoản chi phí ban đầu.', - 'convert_expl_d_w' => 'Khi chuyển đổi một khoản tiền gửi thành một khoản rút tiền, tiền sẽ được rút từ tài khoản nguồn được hiển thị, thay vì được gửi vào đó. Khi chuyển đổi một khoản tiền gửi thành một khoản rút tiền, tiền sẽ được rút từ các tài khoản nguồn được hiển thị, thay vì được gửi vào chúng.', - 'convert_expl_d_t' => 'Khi bạn chuyển đổi tiền gửi thành chuyển khoản, tiền sẽ được gửi vào tài khoản đích được liệt kê từ bất kỳ tài khoản hoặc tài khoản nợ nào của bạn. Khi bạn chuyển đổi tiền gửi thành chuyển khoản, tiền sẽ được gửi vào tài khoản đích được liệt kê từ bất kỳ tài sản hoặc tài khoản nợ của bạn.', - 'convert_expl_t_w' => 'Khi bạn chuyển đổi chuyển khoản thành rút tiền, tiền sẽ được sử dụng cho tài khoản đích bạn đặt ở đây, thay vì được chuyển đi. Khi bạn chuyển đổi chuyển khoản thành rút tiền, tiền sẽ được sử dụng cho các tài khoản đích bạn đặt tại đây, thay vì bị chuyển đi.', - 'convert_expl_t_d' => 'Khi bạn chuyển đổi chuyển khoản thành tiền gửi, tiền sẽ được gửi vào tài khoản đích bạn thấy ở đây, thay vì được chuyển vào đó. Khi bạn chuyển đổi chuyển khoản thành tiền gửi, tiền sẽ được gửi vào tài khoản đích bạn thấy ở đây, thay vì được chuyển vào chúng.', - 'convert_select_sources' => 'Để hoàn thành chuyển đổi, vui lòng đặt tài khoản nguồn mới bên dưới. Để hoàn thành chuyển đổi, vui lòng đặt các tài khoản nguồn mới bên dưới.', - 'convert_select_destinations' => 'Để hoàn thành chuyển đổi, vui lòng chọn tài khoản đích mới bên dưới. Để hoàn thành chuyển đổi, vui lòng chọn các tài khoản đích mới bên dưới.', - 'converted_to_Withdrawal' => 'Giao dịch đã được chuyển đổi thành rút tiền', - 'converted_to_Deposit' => 'Giao dịch đã được chuyển đổi thành tiền gửi', - 'converted_to_Transfer' => 'Giao dịch đã được chuyển đổi thành chuyển khoản', - 'invalid_convert_selection' => 'Tài khoản bạn đã chọn đã được sử dụng trong giao dịch này hoặc không tồn tại.', - 'source_or_dest_invalid' => 'Không thể tìm thấy các chi tiết giao dịch chính xác. Chuyển đổi là không thể.', - 'convert_to_withdrawal' => 'Chuyển đổi thành rút tiền', - 'convert_to_deposit' => 'Chuyển đổi thành tiền gửi', - 'convert_to_transfer' => 'Chuyển đổi sang chuyển khoản', + 'convert_is_already_type_Withdrawal' => 'Giao dịch này đã được rút tiền', + 'convert_is_already_type_Deposit' => 'Giao dịch này đã là một khoản tiền gửi', + 'convert_is_already_type_Transfer' => 'Giao dịch này đã được chuyển', + 'convert_to_Withdrawal' => 'Chuyển đôi ":description" thành rút tiền', + 'convert_to_Deposit' => 'Chuyển đôi ":description" thành gửi tiền', + 'convert_to_Transfer' => 'Chuyển đôi ":description" thành chuyển khoản', + 'convert_options_WithdrawalDeposit' => 'Chuyển đổi rút tiền thành tiền gửi', + 'convert_options_WithdrawalTransfer' => 'chuyển đổi rút tiền thành chuyển khoản', + 'convert_options_DepositTransfer' => 'Chuyển đôi tiền gửi thành chuyển khoản', + 'convert_options_DepositWithdrawal' => 'Chuyển đổi một khoản tiền gửi thành một khoản rút tiền', + 'convert_options_TransferWithdrawal' => 'Chuyển đổi chuyển khoản thành rút tiền', + 'convert_options_TransferDeposit' => 'Chuyển đổi chuyển khoản thành tiền gửi', + 'convert_Withdrawal_to_deposit' => 'Chuyển đổi khoản rút tiền thành tiền gửi', + 'convert_Withdrawal_to_transfer' => 'Chuyển đổi khoản rút tiền thành chuyển khoản', + 'convert_Deposit_to_withdrawal' => 'Chuyển đổi khoản tiền gửi thành một khoản rút tiền', + 'convert_Deposit_to_transfer' => 'Chuyển đổi khoản ký gửi thành chuyển khoản', + 'convert_Transfer_to_deposit' => 'Chuyển đổi chuyển khoản thành một khoản tiền gửi', + 'convert_Transfer_to_withdrawal' => 'Chuyển đổi chuyển khoản thành rút tiền', + 'convert_please_set_revenue_source' => 'Vui lòng chọn tài khoản doanh thu nơi tiền sẽ đến.', + 'convert_please_set_asset_destination' => 'Vui lòng chọn tài khoản nơi tiền sẽ đến.', + 'convert_please_set_expense_destination' => 'Vui lòng chọn tài khoản chi phí nơi tiền sẽ được chuyển đến.', + 'convert_please_set_asset_source' => 'Vui lòng chọn tài khoản nơi tiền sẽ đến.', + 'convert_expl_w_d' => 'Khi chuyển đổi từ rút tiền sang tiền gửi, tiền sẽ được gửi vào tài khoản đích được hiển thị, thay vì được rút từ đó. | Khi chuyển đổi từ rút tiền sang tiền gửi, tiền sẽ được gửi vào tài khoản đích được hiển thị, thay vì được rút từ họ.', + 'convert_expl_w_t' => 'Khi chuyển đổi rút tiền thành chuyển khoản, tiền sẽ được chuyển từ tài khoản nguồn sang tài khoản nợ hoặc tài khoản nợ khác thay vì được sử dụng cho tài khoản chi phí ban đầu. Khi chuyển đổi rút tiền thành chuyển khoản, tiền sẽ được chuyển đi từ các tài khoản nguồn vào các tài khoản tài sản hoặc nợ khác thay vì được sử dụng cho các tài khoản chi phí ban đầu.', + 'convert_expl_d_w' => 'Khi chuyển đổi một khoản tiền gửi thành một khoản rút tiền, tiền sẽ được rút từ tài khoản nguồn được hiển thị, thay vì được gửi vào đó. Khi chuyển đổi một khoản tiền gửi thành một khoản rút tiền, tiền sẽ được rút từ các tài khoản nguồn được hiển thị, thay vì được gửi vào chúng.', + 'convert_expl_d_t' => 'Khi bạn chuyển đổi tiền gửi thành chuyển khoản, tiền sẽ được gửi vào tài khoản đích được liệt kê từ bất kỳ tài khoản hoặc tài khoản nợ nào của bạn. Khi bạn chuyển đổi tiền gửi thành chuyển khoản, tiền sẽ được gửi vào tài khoản đích được liệt kê từ bất kỳ tài sản hoặc tài khoản nợ của bạn.', + 'convert_expl_t_w' => 'Khi bạn chuyển đổi chuyển khoản thành rút tiền, tiền sẽ được sử dụng cho tài khoản đích bạn đặt ở đây, thay vì được chuyển đi. Khi bạn chuyển đổi chuyển khoản thành rút tiền, tiền sẽ được sử dụng cho các tài khoản đích bạn đặt tại đây, thay vì bị chuyển đi.', + 'convert_expl_t_d' => 'Khi bạn chuyển đổi chuyển khoản thành tiền gửi, tiền sẽ được gửi vào tài khoản đích bạn thấy ở đây, thay vì được chuyển vào đó. Khi bạn chuyển đổi chuyển khoản thành tiền gửi, tiền sẽ được gửi vào tài khoản đích bạn thấy ở đây, thay vì được chuyển vào chúng.', + 'convert_select_sources' => 'Để hoàn thành chuyển đổi, vui lòng đặt tài khoản nguồn mới bên dưới. Để hoàn thành chuyển đổi, vui lòng đặt các tài khoản nguồn mới bên dưới.', + 'convert_select_destinations' => 'Để hoàn thành chuyển đổi, vui lòng chọn tài khoản đích mới bên dưới. Để hoàn thành chuyển đổi, vui lòng chọn các tài khoản đích mới bên dưới.', + 'converted_to_Withdrawal' => 'Giao dịch đã được chuyển đổi thành rút tiền', + 'converted_to_Deposit' => 'Giao dịch đã được chuyển đổi thành tiền gửi', + 'converted_to_Transfer' => 'Giao dịch đã được chuyển đổi thành chuyển khoản', + 'invalid_convert_selection' => 'Tài khoản bạn đã chọn đã được sử dụng trong giao dịch này hoặc không tồn tại.', + 'source_or_dest_invalid' => 'Không thể tìm thấy các chi tiết giao dịch chính xác. Chuyển đổi là không thể.', + 'convert_to_withdrawal' => 'Chuyển đổi thành rút tiền', + 'convert_to_deposit' => 'Chuyển đổi thành tiền gửi', + 'convert_to_transfer' => 'Chuyển đổi sang chuyển khoản', // create new stuff: - 'create_new_withdrawal' => 'Tạo rút tiền mới', - 'create_new_deposit' => 'Tạo tiền gửi mới', - 'create_new_transfer' => 'Tạo chuyển khoản mới', - 'create_new_asset' => 'Tạo tài khoản mới', - 'create_new_liabilities' => 'Create new liability', - 'create_new_expense' => 'Tạo tài khoản chi phí mới', - 'create_new_revenue' => 'Tạo tài khoản doanh thu mới', - 'create_new_piggy_bank' => 'Tạo heo đất mới', - 'create_new_bill' => 'Tạo hóa đơn mới', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => 'Tạo rút tiền mới', + 'create_new_deposit' => 'Tạo tiền gửi mới', + 'create_new_transfer' => 'Tạo chuyển khoản mới', + 'create_new_asset' => 'Tạo tài khoản mới', + 'create_new_liabilities' => 'Create new liability', + 'create_new_expense' => 'Tạo tài khoản chi phí mới', + 'create_new_revenue' => 'Tạo tài khoản doanh thu mới', + 'create_new_piggy_bank' => 'Tạo heo đất mới', + 'create_new_bill' => 'Tạo hóa đơn mới', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => 'Tạo một loại tiền tệ mới', - 'store_currency' => 'Lưu trữ tiền tệ mới', - 'update_currency' => 'Cập nhật tiền tệ', - 'new_default_currency' => ':bây giờ là tiền tệ mặc định.', - 'cannot_delete_currency' => 'Không thể xóa: vì nó vẫn đang được sử dụng.', - 'cannot_delete_fallback_currency' => ':name là loại tiền dự phòng hệ thống và không thể xóa.', - 'cannot_disable_currency_journals' => 'Không thể tắt: vì các giao dịch vẫn đang sử dụng nó.', - 'cannot_disable_currency_last_left' => 'Không thể tắt: vì đây là loại tiền được kích hoạt lần cuối.', - 'cannot_disable_currency_account_meta' => 'Không thể tắt: vì nó được sử dụng trong tài khoản.', - 'cannot_disable_currency_bills' => 'Không thể vô hiệu hóa: tên vì nó được sử dụng trong các hóa đơn.', - 'cannot_disable_currency_recurring' => 'Không thể tắt: vì nó được sử dụng trong các giao dịch định kỳ.', - 'cannot_disable_currency_available_budgets' => 'Không thể tắt: vì nó được sử dụng trong ngân sách có sẵn.', - 'cannot_disable_currency_budget_limits' => 'Không thể tắt: vì nó được sử dụng trong giới hạn ngân sách.', - 'cannot_disable_currency_current_default' => 'Không thể tắt: vì đây là loại tiền mặc định hiện tại.', - 'cannot_disable_currency_system_fallback' => 'Không thể tắt: vì đây là loại tiền mặc định của hệ thống.', - 'disable_EUR_side_effects' => 'Euro là tiền tệ dự phòng khẩn cấp của hệ thống. Vô hiệu hóa nó có thể có tác dụng phụ ngoài ý muốn và có thể làm mất hiệu lực bảo hành của bạn.', - 'deleted_currency' => 'Tiền tệ :name đã xóa', - 'created_currency' => 'Tiền tệ :name được tạo', - 'could_not_store_currency' => 'Không thể lưu trữ tiền tệ mới.', - 'updated_currency' => 'Tiền tệ :name được cập nhật', - 'ask_site_owner' => 'Vui lòng hỏi :owner để thêm, xóa hoặc chỉnh sửa tiền tệ.', - 'currencies_intro' => 'Firefly III hỗ trợ nhiều loại tiền tệ khác nhau mà bạn có thể đặt và kích hoạt tại đây.', - 'make_default_currency' => 'Đặt làm mặc định', - 'default_currency' => 'mặc định', - 'currency_is_disabled' => 'Tắt', - 'enable_currency' => 'Kích hoạt', - 'disable_currency' => 'Tắt', - 'currencies_default_disabled' => 'Hầu hết các loại tiền tệ này bị tắt theo mặc định. Để sử dụng chúng, bạn phải kích hoạt chúng trước.', - 'currency_is_now_enabled' => 'Tiền tệ ":name" đã được kích hoạt', - 'currency_is_now_disabled' => 'Tiền tệ ":name" đã được tắt', + 'create_currency' => 'Tạo một loại tiền tệ mới', + 'store_currency' => 'Lưu trữ tiền tệ mới', + 'update_currency' => 'Cập nhật tiền tệ', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => 'Không thể xóa: vì nó vẫn đang được sử dụng.', + 'cannot_delete_fallback_currency' => ':name là loại tiền dự phòng hệ thống và không thể xóa.', + 'cannot_disable_currency_journals' => 'Không thể tắt: vì các giao dịch vẫn đang sử dụng nó.', + 'cannot_disable_currency_last_left' => 'Không thể tắt: vì đây là loại tiền được kích hoạt lần cuối.', + 'cannot_disable_currency_account_meta' => 'Không thể tắt: vì nó được sử dụng trong tài khoản.', + 'cannot_disable_currency_bills' => 'Không thể vô hiệu hóa: tên vì nó được sử dụng trong các hóa đơn.', + 'cannot_disable_currency_recurring' => 'Không thể tắt: vì nó được sử dụng trong các giao dịch định kỳ.', + 'cannot_disable_currency_available_budgets' => 'Không thể tắt: vì nó được sử dụng trong ngân sách có sẵn.', + 'cannot_disable_currency_budget_limits' => 'Không thể tắt: vì nó được sử dụng trong giới hạn ngân sách.', + 'cannot_disable_currency_current_default' => 'Không thể tắt: vì đây là loại tiền mặc định hiện tại.', + 'cannot_disable_currency_system_fallback' => 'Không thể tắt: vì đây là loại tiền mặc định của hệ thống.', + 'disable_EUR_side_effects' => 'Euro là tiền tệ dự phòng khẩn cấp của hệ thống. Vô hiệu hóa nó có thể có tác dụng phụ ngoài ý muốn và có thể làm mất hiệu lực bảo hành của bạn.', + 'deleted_currency' => 'Tiền tệ :name đã xóa', + 'created_currency' => 'Tiền tệ :name được tạo', + 'could_not_store_currency' => 'Không thể lưu trữ tiền tệ mới.', + 'updated_currency' => 'Tiền tệ :name được cập nhật', + 'ask_site_owner' => 'Vui lòng hỏi :owner để thêm, xóa hoặc chỉnh sửa tiền tệ.', + 'currencies_intro' => 'Firefly III hỗ trợ nhiều loại tiền tệ khác nhau mà bạn có thể đặt và kích hoạt tại đây.', + 'make_default_currency' => 'Đặt làm mặc định', + 'default_currency' => 'mặc định', + 'currency_is_disabled' => 'Tắt', + 'enable_currency' => 'Kích hoạt', + 'disable_currency' => 'Tắt', + 'currencies_default_disabled' => 'Hầu hết các loại tiền tệ này bị tắt theo mặc định. Để sử dụng chúng, bạn phải kích hoạt chúng trước.', + 'currency_is_now_enabled' => 'Tiền tệ ":name" đã được kích hoạt', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => 'Tiền tệ ":name" đã được tắt', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => 'Các trường bắt buộc', - 'optionalFields' => 'Các trường tùy chọn', - 'options' => 'Tùy chọn', + 'mandatoryFields' => 'Các trường bắt buộc', + 'optionalFields' => 'Các trường tùy chọn', + 'options' => 'Tùy chọn', // budgets: - 'daily_budgets' => 'Ngân sách hàng ngày', - 'weekly_budgets' => 'Ngân sách hàng tuần', - 'monthly_budgets' => 'Ngân sách hàng tháng', - 'quarterly_budgets' => 'Ngân sách hàng quý', - 'half_year_budgets' => 'Ngân sách nửa năm', - 'yearly_budgets' => 'Ngân sách hàng năm', - 'other_budgets' => 'Ngân sách theo thời gian tùy chỉnh', - 'budget_limit_not_in_range' => 'Số tiền này áp dụng từ :start đến :end:', - 'total_available_budget' => 'Tổng ngân sách có sẵn (giữa :start và :end)', - 'total_available_budget_in_currency' => 'Tổng ngân sách có sẵn bằng: tiền tệ', - 'see_below' => 'xem bên dưới', - 'create_new_budget' => 'Tạo ngân sách mới', - 'store_new_budget' => 'Lưu trữ ngân sách mới', - 'stored_new_budget' => 'Lưu trữ ngân sách mới... ":name"', - 'available_between' => 'Có sẵn giữa: bắt đầu và: kết thúc', - 'transactionsWithoutBudget' => 'Chi phí không có ngân sách', - 'transactions_no_budget' => 'Chi phí không có ngân sách giữa :start và :end', - 'spent_between' => 'Đã dành giữa :start và :end', - 'set_available_amount' => 'Đặt số lượng có sẵn', - 'update_available_amount' => 'Cập nhật số tiền hiện có', - 'ab_basic_modal_explain' => 'Sử dụng biểu mẫu này để cho biết số tiền bạn mong đợi có thể dự trù ngân sách (tổng cộng, bằng :currency) trong khoảng thời gian được chỉ định.', - 'createBudget' => 'Ngân sách mới', - 'invalid_currency' => 'Đây là một loại tiền tệ không hợp lệ', - 'invalid_amount' => 'Xin hãy nhập một số tiền', - 'set_ab' => 'Số tiền ngân sách có sẵn đã được đặt', - 'updated_ab' => 'Số tiền ngân sách có sẵn đã được cập nhật', - 'deleted_ab' => 'Số tiền ngân sách có sẵn đã bị xóa', - 'deleted_bl' => 'Số tiền ngân sách đã bị xóa', - 'alt_currency_ab_create' => 'Đặt ngân sách có sẵn bằng loại tiền khác', - 'bl_create_btn' => 'Đặt ngân sách bằng loại tiền khác', - 'inactiveBudgets' => 'Ngân sách không hoạt động', - 'without_budget_between' => 'Giao dịch không có ngân sách giữa: bắt đầu và: kết thúc', - 'delete_budget' => 'Xóa ngân sách ":name"', - 'deleted_budget' => 'Đã xóa ngân sách ":name"', - 'edit_budget' => 'Chỉnh sửa ngân sách ":name"', - 'updated_budget' => 'Đã cập nhật ngân sách ":name"', - 'update_amount' => 'Cập nhật số tiền', - 'update_budget' => 'Cập nhật ngân sách', - 'update_budget_amount_range' => 'Cập nhật (dự kiến) số tiền khả dụng giữa: bắt đầu và: kết thúc', - 'set_budget_limit_title' => 'Đặt số tiền được dự toán cho ngân sách: ngân sách giữa: bắt đầu và: kết thúc', - 'set_budget_limit' => 'Đặt số tiền ngân sách', - 'budget_period_navigator' => 'Điều hướng thời gian', - 'info_on_available_amount' => 'Tôi có sẵn cái gì?', - 'available_amount_indication' => 'Sử dụng những số tiền này để có được một dấu hiệu về tổng ngân sách của bạn có thể là bao nhiêu.', - 'suggested' => 'Đề xuất', - 'average_between' => 'Trung bình giữa :start và :end', - 'transferred_in' => 'Đã chuyển (vào)', - 'transferred_away' => 'Đã chuyển (ra)', - 'auto_budget_none' => ' Không có ngân sách tự động', - 'auto_budget_reset' => 'Đặt số tiền cố định mỗi kỳ', - 'auto_budget_rollover' => 'Thêm một số tiền mỗi kỳ', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Hàng ngày', - 'auto_budget_period_weekly' => 'Hàng tuần', - 'auto_budget_period_monthly' => 'Hàng tháng', - 'auto_budget_period_quarterly' => 'Hàng quý', - 'auto_budget_period_half_year' => 'Mỗi nửa năm', - 'auto_budget_period_yearly' => 'Hàng năm', - 'auto_budget_help' => 'Bạn có thể đọc thêm về tính năng này trong trợ giúp. Nhấp vào biểu tượng trên cùng bên phải (?).', - 'auto_budget_reset_icon' => 'Ngân sách này sẽ được đặt định kỳ', - 'auto_budget_rollover_icon' => 'Số tiền ngân sách sẽ tăng theo định kỳ', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Xóa số tiền ngân sách trong :currency', + 'daily_budgets' => 'Ngân sách hàng ngày', + 'weekly_budgets' => 'Ngân sách hàng tuần', + 'monthly_budgets' => 'Ngân sách hàng tháng', + 'quarterly_budgets' => 'Ngân sách hàng quý', + 'half_year_budgets' => 'Ngân sách nửa năm', + 'yearly_budgets' => 'Ngân sách hàng năm', + 'other_budgets' => 'Ngân sách theo thời gian tùy chỉnh', + 'budget_limit_not_in_range' => 'Số tiền này áp dụng từ :start đến :end:', + 'total_available_budget' => 'Tổng ngân sách có sẵn (giữa :start và :end)', + 'total_available_budget_in_currency' => 'Tổng ngân sách có sẵn bằng: tiền tệ', + 'see_below' => 'xem bên dưới', + 'create_new_budget' => 'Tạo ngân sách mới', + 'store_new_budget' => 'Lưu trữ ngân sách mới', + 'stored_new_budget' => 'Lưu trữ ngân sách mới... ":name"', + 'available_between' => 'Có sẵn giữa: bắt đầu và: kết thúc', + 'transactionsWithoutBudget' => 'Chi phí không có ngân sách', + 'transactions_no_budget' => 'Chi phí không có ngân sách giữa :start và :end', + 'spent_between' => 'Đã dành giữa :start và :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Đặt số lượng có sẵn', + 'update_available_amount' => 'Cập nhật số tiền hiện có', + 'ab_basic_modal_explain' => 'Sử dụng biểu mẫu này để cho biết số tiền bạn mong đợi có thể dự trù ngân sách (tổng cộng, bằng :currency) trong khoảng thời gian được chỉ định.', + 'createBudget' => 'Ngân sách mới', + 'invalid_currency' => 'Đây là một loại tiền tệ không hợp lệ', + 'invalid_amount' => 'Xin hãy nhập một số tiền', + 'set_ab' => 'Số tiền ngân sách có sẵn đã được đặt', + 'updated_ab' => 'Số tiền ngân sách có sẵn đã được cập nhật', + 'deleted_ab' => 'Số tiền ngân sách có sẵn đã bị xóa', + 'deleted_bl' => 'Số tiền ngân sách đã bị xóa', + 'alt_currency_ab_create' => 'Đặt ngân sách có sẵn bằng loại tiền khác', + 'bl_create_btn' => 'Đặt ngân sách bằng loại tiền khác', + 'inactiveBudgets' => 'Ngân sách không hoạt động', + 'without_budget_between' => 'Giao dịch không có ngân sách giữa: bắt đầu và: kết thúc', + 'delete_budget' => 'Xóa ngân sách ":name"', + 'deleted_budget' => 'Đã xóa ngân sách ":name"', + 'edit_budget' => 'Chỉnh sửa ngân sách ":name"', + 'updated_budget' => 'Đã cập nhật ngân sách ":name"', + 'update_amount' => 'Cập nhật số tiền', + 'update_budget' => 'Cập nhật ngân sách', + 'update_budget_amount_range' => 'Cập nhật (dự kiến) số tiền khả dụng giữa: bắt đầu và: kết thúc', + 'set_budget_limit_title' => 'Đặt số tiền được dự toán cho ngân sách: ngân sách giữa: bắt đầu và: kết thúc', + 'set_budget_limit' => 'Đặt số tiền ngân sách', + 'budget_period_navigator' => 'Điều hướng thời gian', + 'info_on_available_amount' => 'Tôi có sẵn cái gì?', + 'available_amount_indication' => 'Sử dụng những số tiền này để có được một dấu hiệu về tổng ngân sách của bạn có thể là bao nhiêu.', + 'suggested' => 'Đề xuất', + 'average_between' => 'Trung bình giữa :start và :end', + 'transferred_in' => 'Đã chuyển (vào)', + 'transferred_away' => 'Đã chuyển (ra)', + 'auto_budget_none' => ' Không có ngân sách tự động', + 'auto_budget_reset' => 'Đặt số tiền cố định mỗi kỳ', + 'auto_budget_rollover' => 'Thêm một số tiền mỗi kỳ', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Hàng ngày', + 'auto_budget_period_weekly' => 'Hàng tuần', + 'auto_budget_period_monthly' => 'Hàng tháng', + 'auto_budget_period_quarterly' => 'Hàng quý', + 'auto_budget_period_half_year' => 'Mỗi nửa năm', + 'auto_budget_period_yearly' => 'Hàng năm', + 'auto_budget_help' => 'Bạn có thể đọc thêm về tính năng này trong trợ giúp. Nhấp vào biểu tượng trên cùng bên phải (?).', + 'auto_budget_reset_icon' => 'Ngân sách này sẽ được đặt định kỳ', + 'auto_budget_rollover_icon' => 'Số tiền ngân sách sẽ tăng theo định kỳ', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Xóa số tiền ngân sách trong :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Không mong đợi ở giai đoạn này', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Không (chưa)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => 'Hóa đơn khớp với các giao dịch giữa: thấp và: cao.', - 'running_again_loss' => 'Các giao dịch được liên kết trước đây với hóa đơn này có thể mất kết nối, nếu chúng (không còn) khớp với (các) quy tắc.', - 'bill_related_rules' => 'Các quy tắc liên quan đến dự luật này', - 'repeats' => 'Lặp lại', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => 'Giao dịch được kết nối', - 'auto_match_on' => 'Tự động khớp với Firefly III', - 'auto_match_off' => 'Không tự động khớp với Firefly III', - 'next_expected_match' => 'Trận đấu dự kiến tiếp theo', - 'delete_bill' => 'Xóa hóa đơn ":name"', - 'deleted_bill' => 'Đã xóa hóa đơn ":name"', - 'edit_bill' => 'Chỉnh sửa hóa đơn ":name"', - 'more' => 'Nhiều hơn', - 'rescan_old' => 'Chạy lại quy tắc, trên tất cả các giao dịch', - 'update_bill' => 'Cập nhật hóa đơn', - 'updated_bill' => 'Đã cập nhật hóa đơn ":name"', - 'store_new_bill' => 'Lưu trữ hóa đơn mới', - 'stored_new_bill' => 'Hóa đơn mới được lưu trữ ":name"', - 'cannot_scan_inactive_bill' => 'Hóa đơn không hoạt động không thể quét.', - 'rescanned_bill' => 'Đã giải quyết mọi thứ và được liên kết :count giao dịch vào hóa đơn. Đã giải quyết mọi thứ và được liên kết :count giao dịch vào hóa đơn.', - 'average_bill_amount_year' => 'Số tiền hóa đơn trung bình (:year)', - 'average_bill_amount_overall' => 'Số tiền hóa đơn trung bình (tổng thể)', - 'bill_is_active' => 'Bill đang hoạt động', - 'bill_expected_between' => 'Dự kiến giữa :start và :end', - 'bill_will_automatch' => 'Bill sẽ tự động liên kết với các giao dịch', - 'skips_over' => 'bỏ qua', - 'bill_store_error' => 'Một lỗi không mong muốn đã xảy ra trong khi lưu trữ hóa đơn mới của bạn. Vui lòng kiểm tra các tệp nhật ký', - 'list_inactive_rule' => 'quy tắc không hoạt động', - 'bill_edit_rules' => 'Firefly III cũng sẽ cố gắng chỉnh sửa quy tắc liên quan đến dự luật này. Tuy nhiên, nếu bạn đã tự chỉnh sửa quy tắc này, Firefly III sẽ không thay đổi bất cứ điều gì. | Firefly III cũng sẽ cố gắng chỉnh sửa :count các quy tắc liên quan đến dự luật này. Tuy nhiên, nếu bạn đã tự chỉnh sửa các quy tắc này, Firefly III sẽ không thay đổi bất cứ điều gì.', - 'bill_expected_date' => 'Ngày đáo hạn :date', - 'bill_expected_date_js' => 'Expected {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Paid on {date}', - 'bill_repeats_weekly' => 'Lặp lại hàng tuần', - 'bill_repeats_monthly' => 'Lặp lại hàng tháng', - 'bill_repeats_quarterly' => 'Lặp lại hàng quý', - 'bill_repeats_half-year' => 'Lặp lại mỗi nửa năm', - 'bill_repeats_yearly' => 'Lặp lại hàng năm', - 'bill_repeats_weekly_other' => 'Lặp lại các tuần một lần', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Repeats yearly', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Subscriptions', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Forever', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Không mong đợi ở giai đoạn này', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Không (chưa)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => 'Hóa đơn khớp với các giao dịch giữa: thấp và: cao.', + 'running_again_loss' => 'Các giao dịch được liên kết trước đây với hóa đơn này có thể mất kết nối, nếu chúng (không còn) khớp với (các) quy tắc.', + 'bill_related_rules' => 'Các quy tắc liên quan đến dự luật này', + 'repeats' => 'Lặp lại', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => 'Giao dịch được kết nối', + 'auto_match_on' => 'Tự động khớp với Firefly III', + 'auto_match_off' => 'Không tự động khớp với Firefly III', + 'next_expected_match' => 'Trận đấu dự kiến tiếp theo', + 'delete_bill' => 'Xóa hóa đơn ":name"', + 'deleted_bill' => 'Đã xóa hóa đơn ":name"', + 'edit_bill' => 'Chỉnh sửa hóa đơn ":name"', + 'more' => 'Nhiều hơn', + 'rescan_old' => 'Chạy lại quy tắc, trên tất cả các giao dịch', + 'update_bill' => 'Cập nhật hóa đơn', + 'updated_bill' => 'Đã cập nhật hóa đơn ":name"', + 'store_new_bill' => 'Lưu trữ hóa đơn mới', + 'stored_new_bill' => 'Hóa đơn mới được lưu trữ ":name"', + 'cannot_scan_inactive_bill' => 'Hóa đơn không hoạt động không thể quét.', + 'rescanned_bill' => 'Đã giải quyết mọi thứ và được liên kết :count giao dịch vào hóa đơn. Đã giải quyết mọi thứ và được liên kết :count giao dịch vào hóa đơn.', + 'average_bill_amount_year' => 'Số tiền hóa đơn trung bình (:year)', + 'average_bill_amount_overall' => 'Số tiền hóa đơn trung bình (tổng thể)', + 'bill_is_active' => 'Bill đang hoạt động', + 'bill_expected_between' => 'Dự kiến giữa :start và :end', + 'bill_will_automatch' => 'Bill sẽ tự động liên kết với các giao dịch', + 'skips_over' => 'bỏ qua', + 'bill_store_error' => 'Một lỗi không mong muốn đã xảy ra trong khi lưu trữ hóa đơn mới của bạn. Vui lòng kiểm tra các tệp nhật ký', + 'list_inactive_rule' => 'quy tắc không hoạt động', + 'bill_edit_rules' => 'Firefly III cũng sẽ cố gắng chỉnh sửa quy tắc liên quan đến dự luật này. Tuy nhiên, nếu bạn đã tự chỉnh sửa quy tắc này, Firefly III sẽ không thay đổi bất cứ điều gì. | Firefly III cũng sẽ cố gắng chỉnh sửa :count các quy tắc liên quan đến dự luật này. Tuy nhiên, nếu bạn đã tự chỉnh sửa các quy tắc này, Firefly III sẽ không thay đổi bất cứ điều gì.', + 'bill_expected_date' => 'Ngày đáo hạn :date', + 'bill_expected_date_js' => 'Expected {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Paid on {date}', + 'bill_repeats_weekly' => 'Lặp lại hàng tuần', + 'bill_repeats_monthly' => 'Lặp lại hàng tháng', + 'bill_repeats_quarterly' => 'Lặp lại hàng quý', + 'bill_repeats_half-year' => 'Lặp lại mỗi nửa năm', + 'bill_repeats_yearly' => 'Lặp lại hàng năm', + 'bill_repeats_weekly_other' => 'Lặp lại các tuần một lần', + 'bill_repeats_monthly_other' => 'Repeats every other month', + 'bill_repeats_quarterly_other' => 'Repeats every other quarter', + 'bill_repeats_half-year_other' => 'Repeats yearly', + 'bill_repeats_yearly_other' => 'Repeats every other year', + 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', + 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', + 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', + 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', + 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', + 'subscriptions' => 'Subscriptions', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Forever', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'Tôi đang nợ số tiền', - 'i_owe_amount' => 'Tôi nợ số tiền', - 'inactive_account_link' => 'Bạn có :count tài khoản không hoạt động (được lưu trữ) mà bạn có thể xem trên trang này. Bạn có :count tài khoản không hoạt động (đã lưu trữ) mà bạn có thể xem trên trang này.', - 'all_accounts_inactive' => 'Đây là những tài khoản không hoạt động của bạn.', - 'active_account_link' => 'Liên kết này quay lại tài khoản đang hoạt động của bạn.', - 'account_missing_transaction' => 'Tài khoản #: id (": name") không thể được xem trực tiếp, nhưng Firefly thiếu thông tin chuyển hướng.', - 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', - 'details_for_asset' => 'Chi tiết cho tài khoản ":name"', - 'details_for_expense' => 'Chi tiết tài khoản chi phí ":name"', - 'details_for_revenue' => 'Chi tiết cho tài khoản doanh thu ":name"', - 'details_for_cash' => 'Chi tiết cho tài khoản tiền mặt ":name"', - 'store_new_asset_account' => 'Lưu trữ tài khoản mới', - 'store_new_expense_account' => 'Lưu trữ tài khoản chi phí mới', - 'store_new_revenue_account' => 'Lưu trữ tài khoản doanh thu mới', - 'edit_asset_account' => 'Chỉnh sửa tài khoản ":name"', - 'edit_expense_account' => 'Chỉnh sửa tài khoản chi phí ":name"', - 'edit_revenue_account' => 'Chỉnh sửa tài khoản doanh thu ":name"', - 'delete_asset_account' => 'Xóa tài khoản ":name"', - 'delete_expense_account' => 'Xóa tài khoản chi phí ":name"', - 'delete_revenue_account' => 'Xóa tài khoản doanh thu ":name"', - 'delete_liabilities_account' => 'Xóa tài khoản nợ ":name"', - 'asset_deleted' => 'Thành công tài khoản bị xóa ":name"', - 'account_deleted' => 'Successfully deleted account ":name"', - 'expense_deleted' => 'Thành công xóa tài khoản chi phí ":name"', - 'revenue_deleted' => 'Thành công xóa tài khoản doanh thu ":name"', - 'update_asset_account' => 'Cập nhật tài khoản', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => 'Cập nhật nợ', - 'update_expense_account' => 'Cập nhật tài khoản chi phí', - 'update_revenue_account' => 'Cập nhật tài khoản doanh thu', - 'make_new_asset_account' => 'Tạo một tài khoản mới', - 'make_new_expense_account' => 'Tạo một tài khoản chi phí mới', - 'make_new_revenue_account' => 'Tạo một tài khoản doanh thu mới', - 'make_new_liabilities_account' => 'Tạo một nợ mới', - 'asset_accounts' => 'tài khoản', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'tài khoản (không hoạt động)', - 'expense_account' => 'Expense account', - 'expense_accounts' => 'Tài khoản chi phí', - 'expense_accounts_inactive' => 'Tài khoản chi tiêu (không hoạt động)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => 'Tài khoản doanh thu', - 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', - 'cash_accounts' => 'Tài khoản tiền mặt', - 'Cash account' => 'Tài khoản tiền mặt', - 'liabilities_accounts' => 'Nợ', - 'liabilities_accounts_inactive' => 'Liabilities (inactive)', - 'reconcile_account' => 'Tài khoản đối chiếu ":account"', - 'overview_of_reconcile_modal' => 'Tổng quan về tài khoản đối chiếu', - 'delete_reconciliation' => 'Xóa tài khoản đối chiếu', - 'update_reconciliation' => 'Cập nhật tài khoản đối chiếu', - 'amount_cannot_be_zero' => 'Số lượng không thể bằng không', - 'end_of_reconcile_period' => 'Kết thúc chu kỳ đối chiếu: :period', - 'start_of_reconcile_period' => 'Bắt đầu chu kỳ đối chiếu::period', - 'start_balance' => 'Số dư bắt đầu', - 'end_balance' => 'Số dư cuối kỳ', - 'update_balance_dates_instruction' => 'Khớp số tiền và ngày ở trên với bảng sao kê ngân hàng của bạn và nhấn "Start reconciling"', - 'select_transactions_instruction' => 'Chọn các giao dịch xuất hiện trên bảng sao kê ngân hàng của bạn.', - 'select_range_and_balance' => 'Đầu tiên xác minh phạm vi ngày và số dư. Sau đó nhấn "Start reconciling"', - 'date_change_instruction' => 'Nếu bạn thay đổi phạm vi ngày bây giờ, mọi tiến trình sẽ bị mất.', - 'update_selection' => 'Cập nhật lựa chọn', - 'store_reconcile' => 'Lưu trữ đối chiếu', - 'reconciliation_transaction' => 'Giao dịch đối chiếu', - 'Reconciliation' => 'Đối chiếu', - 'reconciliation' => 'Đối chiếu', - 'reconcile_options' => 'Tùy chọn đối chiếu', - 'reconcile_range' => 'Vùng đối chiếu', - 'start_reconcile' => 'Bắt đầu đối chiếu', - 'cash_account_type' => 'Tiền mặt', - 'cash' => 'Tiền mặt', - 'cant_find_redirect_account' => 'Firefly III đã cố gắng chuyển hướng bạn nhưng không thể. Xin lỗi vì điều đó. Quay lại chỉ mục.', - 'account_type' => 'Loại tài khoản', - 'save_transactions_by_moving' => 'Lưu giao dịch này bằng cách di chuyển nó sang tài khoản khác: | Lưu các giao dịch này bằng cách chuyển chúng sang tài khoản khác:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => 'Tài khoản mới ":name" đã được lưu trữ!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => 'Đã cập nhật tài khoản ":name"', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => 'Tùy chọn thẻ tín dụng', - 'no_transactions_account' => 'Không có giao dịch (trong giai đoạn này) cho tài khoản ":name".', - 'no_transactions_period' => 'Không có giao dịch (trong giai đoạn này).', - 'no_data_for_chart' => 'Không có đủ thông tin (chưa) để tạo biểu đồ này.', - 'select_at_least_one_account' => 'Vui lòng chọn ít nhất một tài khoản', - 'select_at_least_one_category' => 'Vui lòng chọn ít nhất một danh mục', - 'select_at_least_one_budget' => 'Vui lòng chọn ít nhất một ngân sách', - 'select_at_least_one_tag' => 'Vui lòng chọn ít nhất một nhãn', - 'select_at_least_one_expense' => 'Vui lòng chọn ít nhất một sự kết hợp của các tài khoản chi phí / doanh thu. Nếu bạn không có (danh sách trống) thì báo cáo này không có sẵn.', - 'account_default_currency' => 'Đây sẽ là loại tiền mặc định được liên kết với tài khoản này.', - 'reconcile_has_more' => 'Sổ cái Firefly III của bạn có nhiều tiền hơn số tiền mà ngân hàng của bạn yêu cầu. Có một số lựa chọn. Hãy chọn những gì để làm. Sau đó, nhấn "Xác nhận đối chiếu".', - 'reconcile_has_less' => 'Sổ cái Firefly III của bạn có ít tiền hơn so với yêu cầu ngân hàng của bạn. Có một số lựa chọn. Hãy chọn những gì để làm. Sau đó, nhấn "Xác nhận đối chiếu".', - 'reconcile_is_equal' => 'Sổ cái Firefly III của bạn và báo cáo ngân hàng của bạn phù hợp. Không có gì phải làm. Vui lòng nhấn "Xác nhận đối chiếu" để xác nhận đầu vào của bạn.', - 'create_pos_reconcile_transaction' => 'Xóa các giao dịch đã chọn và tạo một hiệu chỉnh thêm: số tiền vào tài khoản này.', - 'create_neg_reconcile_transaction' => 'Xóa các giao dịch đã chọn và tạo một chỉnh sửa xóa: số tiền từ tài khoản này.', - 'reconcile_do_nothing' => 'Xóa các giao dịch đã chọn, nhưng không sửa.', - 'reconcile_go_back' => 'Bạn luôn có thể chỉnh sửa hoặc xóa một chỉnh sửa sau.', - 'must_be_asset_account' => 'Bạn chỉ có thể đối chiếu tài khoản', - 'reconciliation_stored' => 'Đối chiếu được lưu trữ', - 'reconciliation_error' => 'Do lỗi, các giao dịch được đánh dấu là đã được đối chiếu nhưng việc sửa lỗi chưa được lưu trữ :: lỗi.', - 'reconciliation_transaction_title' => 'Đối chiếu (:from đến :to)', - 'sum_of_reconciliation' => 'Tổng đối chiếu', - 'reconcile_this_account' => 'Điều chỉnh tài khoản này', - 'reconcile' => 'Đối chiếu', - 'show' => 'Hiển thị', - 'confirm_reconciliation' => 'Xác nhận đối chiếu', - 'submitted_start_balance' => 'Gửi số dư bắt đầu', - 'selected_transactions' => 'Giao dịch được chọn (:count)', - 'already_cleared_transactions' => 'Đã xóa giao dịch (:count)', - 'submitted_end_balance' => 'Gửi số dư cuối kỳ', - 'initial_balance_description' => 'Số dư ban đầu cho ":account"', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => 'không xác định', - 'interest_calc_daily' => 'Mỗi ngày', - 'interest_calc_monthly' => 'Mỗi tháng', - 'interest_calc_yearly' => 'Mỗi năm', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half year', - 'interest_calc_quarterly' => 'Per quarter', - 'initial_balance_account' => 'Tài khoản số dư ban đầu của: tài khoản', - 'list_options' => 'List options', + 'i_am_owed_amount' => 'Tôi đang nợ số tiền', + 'i_owe_amount' => 'Tôi nợ số tiền', + 'inactive_account_link' => 'Bạn có :count tài khoản không hoạt động (được lưu trữ) mà bạn có thể xem trên trang này. Bạn có :count tài khoản không hoạt động (đã lưu trữ) mà bạn có thể xem trên trang này.', + 'all_accounts_inactive' => 'Đây là những tài khoản không hoạt động của bạn.', + 'active_account_link' => 'Liên kết này quay lại tài khoản đang hoạt động của bạn.', + 'account_missing_transaction' => 'Tài khoản #: id (": name") không thể được xem trực tiếp, nhưng Firefly thiếu thông tin chuyển hướng.', + 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', + 'details_for_asset' => 'Chi tiết cho tài khoản ":name"', + 'details_for_expense' => 'Chi tiết tài khoản chi phí ":name"', + 'details_for_revenue' => 'Chi tiết cho tài khoản doanh thu ":name"', + 'details_for_cash' => 'Chi tiết cho tài khoản tiền mặt ":name"', + 'store_new_asset_account' => 'Lưu trữ tài khoản mới', + 'store_new_expense_account' => 'Lưu trữ tài khoản chi phí mới', + 'store_new_revenue_account' => 'Lưu trữ tài khoản doanh thu mới', + 'edit_asset_account' => 'Chỉnh sửa tài khoản ":name"', + 'edit_expense_account' => 'Chỉnh sửa tài khoản chi phí ":name"', + 'edit_revenue_account' => 'Chỉnh sửa tài khoản doanh thu ":name"', + 'delete_asset_account' => 'Xóa tài khoản ":name"', + 'delete_expense_account' => 'Xóa tài khoản chi phí ":name"', + 'delete_revenue_account' => 'Xóa tài khoản doanh thu ":name"', + 'delete_liabilities_account' => 'Xóa tài khoản nợ ":name"', + 'asset_deleted' => 'Thành công tài khoản bị xóa ":name"', + 'account_deleted' => 'Successfully deleted account ":name"', + 'expense_deleted' => 'Thành công xóa tài khoản chi phí ":name"', + 'revenue_deleted' => 'Thành công xóa tài khoản doanh thu ":name"', + 'update_asset_account' => 'Cập nhật tài khoản', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => 'Cập nhật nợ', + 'update_expense_account' => 'Cập nhật tài khoản chi phí', + 'update_revenue_account' => 'Cập nhật tài khoản doanh thu', + 'make_new_asset_account' => 'Tạo một tài khoản mới', + 'make_new_expense_account' => 'Tạo một tài khoản chi phí mới', + 'make_new_revenue_account' => 'Tạo một tài khoản doanh thu mới', + 'make_new_liabilities_account' => 'Tạo một nợ mới', + 'asset_accounts' => 'tài khoản', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'tài khoản (không hoạt động)', + 'expense_account' => 'Expense account', + 'expense_accounts' => 'Tài khoản chi phí', + 'expense_accounts_inactive' => 'Tài khoản chi tiêu (không hoạt động)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => 'Tài khoản doanh thu', + 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', + 'cash_accounts' => 'Tài khoản tiền mặt', + 'Cash account' => 'Tài khoản tiền mặt', + 'liabilities_accounts' => 'Nợ', + 'liabilities_accounts_inactive' => 'Liabilities (inactive)', + 'reconcile_account' => 'Tài khoản đối chiếu ":account"', + 'overview_of_reconcile_modal' => 'Tổng quan về tài khoản đối chiếu', + 'delete_reconciliation' => 'Xóa tài khoản đối chiếu', + 'update_reconciliation' => 'Cập nhật tài khoản đối chiếu', + 'amount_cannot_be_zero' => 'Số lượng không thể bằng không', + 'end_of_reconcile_period' => 'Kết thúc chu kỳ đối chiếu: :period', + 'start_of_reconcile_period' => 'Bắt đầu chu kỳ đối chiếu::period', + 'start_balance' => 'Số dư bắt đầu', + 'end_balance' => 'Số dư cuối kỳ', + 'update_balance_dates_instruction' => 'Khớp số tiền và ngày ở trên với bảng sao kê ngân hàng của bạn và nhấn "Start reconciling"', + 'select_transactions_instruction' => 'Chọn các giao dịch xuất hiện trên bảng sao kê ngân hàng của bạn.', + 'select_range_and_balance' => 'Đầu tiên xác minh phạm vi ngày và số dư. Sau đó nhấn "Start reconciling"', + 'date_change_instruction' => 'Nếu bạn thay đổi phạm vi ngày bây giờ, mọi tiến trình sẽ bị mất.', + 'update_selection' => 'Cập nhật lựa chọn', + 'store_reconcile' => 'Lưu trữ đối chiếu', + 'reconciliation_transaction' => 'Giao dịch đối chiếu', + 'Reconciliation' => 'Đối chiếu', + 'reconciliation' => 'Đối chiếu', + 'reconcile_options' => 'Tùy chọn đối chiếu', + 'reconcile_range' => 'Vùng đối chiếu', + 'start_reconcile' => 'Bắt đầu đối chiếu', + 'cash_account_type' => 'Tiền mặt', + 'cash' => 'Tiền mặt', + 'cant_find_redirect_account' => 'Firefly III đã cố gắng chuyển hướng bạn nhưng không thể. Xin lỗi vì điều đó. Quay lại chỉ mục.', + 'account_type' => 'Loại tài khoản', + 'save_transactions_by_moving' => 'Lưu giao dịch này bằng cách di chuyển nó sang tài khoản khác: | Lưu các giao dịch này bằng cách chuyển chúng sang tài khoản khác:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => 'Tài khoản mới ":name" đã được lưu trữ!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => 'Đã cập nhật tài khoản ":name"', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => 'Tùy chọn thẻ tín dụng', + 'no_transactions_account' => 'Không có giao dịch (trong giai đoạn này) cho tài khoản ":name".', + 'no_transactions_period' => 'Không có giao dịch (trong giai đoạn này).', + 'no_data_for_chart' => 'Không có đủ thông tin (chưa) để tạo biểu đồ này.', + 'select_at_least_one_account' => 'Vui lòng chọn ít nhất một tài khoản', + 'select_at_least_one_category' => 'Vui lòng chọn ít nhất một danh mục', + 'select_at_least_one_budget' => 'Vui lòng chọn ít nhất một ngân sách', + 'select_at_least_one_tag' => 'Vui lòng chọn ít nhất một nhãn', + 'select_at_least_one_expense' => 'Vui lòng chọn ít nhất một sự kết hợp của các tài khoản chi phí / doanh thu. Nếu bạn không có (danh sách trống) thì báo cáo này không có sẵn.', + 'account_default_currency' => 'Đây sẽ là loại tiền mặc định được liên kết với tài khoản này.', + 'reconcile_has_more' => 'Sổ cái Firefly III của bạn có nhiều tiền hơn số tiền mà ngân hàng của bạn yêu cầu. Có một số lựa chọn. Hãy chọn những gì để làm. Sau đó, nhấn "Xác nhận đối chiếu".', + 'reconcile_has_less' => 'Sổ cái Firefly III của bạn có ít tiền hơn so với yêu cầu ngân hàng của bạn. Có một số lựa chọn. Hãy chọn những gì để làm. Sau đó, nhấn "Xác nhận đối chiếu".', + 'reconcile_is_equal' => 'Sổ cái Firefly III của bạn và báo cáo ngân hàng của bạn phù hợp. Không có gì phải làm. Vui lòng nhấn "Xác nhận đối chiếu" để xác nhận đầu vào của bạn.', + 'create_pos_reconcile_transaction' => 'Xóa các giao dịch đã chọn và tạo một hiệu chỉnh thêm: số tiền vào tài khoản này.', + 'create_neg_reconcile_transaction' => 'Xóa các giao dịch đã chọn và tạo một chỉnh sửa xóa: số tiền từ tài khoản này.', + 'reconcile_do_nothing' => 'Xóa các giao dịch đã chọn, nhưng không sửa.', + 'reconcile_go_back' => 'Bạn luôn có thể chỉnh sửa hoặc xóa một chỉnh sửa sau.', + 'must_be_asset_account' => 'Bạn chỉ có thể đối chiếu tài khoản', + 'reconciliation_stored' => 'Đối chiếu được lưu trữ', + 'reconciliation_error' => 'Do lỗi, các giao dịch được đánh dấu là đã được đối chiếu nhưng việc sửa lỗi chưa được lưu trữ :: lỗi.', + 'reconciliation_transaction_title' => 'Đối chiếu (:from đến :to)', + 'sum_of_reconciliation' => 'Tổng đối chiếu', + 'reconcile_this_account' => 'Điều chỉnh tài khoản này', + 'reconcile' => 'Đối chiếu', + 'show' => 'Hiển thị', + 'confirm_reconciliation' => 'Xác nhận đối chiếu', + 'submitted_start_balance' => 'Gửi số dư bắt đầu', + 'selected_transactions' => 'Giao dịch được chọn (:count)', + 'already_cleared_transactions' => 'Đã xóa giao dịch (:count)', + 'submitted_end_balance' => 'Gửi số dư cuối kỳ', + 'initial_balance_description' => 'Số dư ban đầu cho ":account"', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => 'không xác định', + 'interest_calc_daily' => 'Mỗi ngày', + 'interest_calc_monthly' => 'Mỗi tháng', + 'interest_calc_yearly' => 'Mỗi năm', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half year', + 'interest_calc_quarterly' => 'Per quarter', + 'initial_balance_account' => 'Tài khoản số dư ban đầu của: tài khoản', + 'list_options' => 'List options', // categories: - 'new_category' => 'Danh muc mới', - 'create_new_category' => 'Tạo một danh mục mới', - 'without_category' => 'Không có danh mục', - 'update_category' => 'Cập nhật danh mục', - 'updated_category' => 'Đã cập nhật danh mục ":name"', - 'categories' => 'Danh mục', - 'edit_category' => 'Sửa danh mục ":name"', - 'no_category' => '(không danh mục)', - 'unknown_category_plain' => 'No category', - 'category' => 'Danh mục', - 'delete_category' => 'Xóa danh mục ":name"', - 'deleted_category' => 'Đã xóa danh mục ":name"', - 'store_category' => 'Lưu trữ danh mục mới', - 'stored_category' => 'Đã lưu trữ danh mục mới ":name"', - 'without_category_between' => 'Không có danh mục giữa :start và :end', + 'new_category' => 'Danh muc mới', + 'create_new_category' => 'Tạo một danh mục mới', + 'without_category' => 'Không có danh mục', + 'update_category' => 'Cập nhật danh mục', + 'updated_category' => 'Đã cập nhật danh mục ":name"', + 'categories' => 'Danh mục', + 'edit_category' => 'Sửa danh mục ":name"', + 'no_category' => '(không danh mục)', + 'unknown_category_plain' => 'No category', + 'category' => 'Danh mục', + 'delete_category' => 'Xóa danh mục ":name"', + 'deleted_category' => 'Đã xóa danh mục ":name"', + 'store_category' => 'Lưu trữ danh mục mới', + 'stored_category' => 'Đã lưu trữ danh mục mới ":name"', + 'without_category_between' => 'Không có danh mục giữa :start và :end', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => 'Cập nhật rút tiền', - 'update_deposit' => 'Cập nhật tiền gửi', - 'update_transaction' => 'Cập nhật giao dịch', - 'update_transfer' => 'Cập nhật chuyển', - 'updated_withdrawal' => 'Cập nhật rút tiền ":description"', - 'updated_deposit' => 'Tiền gửi cập nhật ":description"', - 'updated_transfer' => 'Chuyển khoản cập nhật ":description"', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => 'Xóa rút tiền ":description"', - 'delete_deposit' => 'Xóa tiền gửi ":description"', - 'delete_transfer' => 'Xóa chuyển ":description"', - 'deleted_withdrawal' => 'Đã xóa thành công rút tiền ":description"', - 'deleted_deposit' => 'Đã gửi thành công tiền gửi ":description"', - 'deleted_transfer' => 'Xóa thành công chuyển khoản ":description"', - 'deleted_reconciliation' => 'Tạo thành công giao dịch mới ":description"', - 'stored_journal' => 'Tạo thành công giao dịch mới ":description"', - 'stored_journal_no_descr' => 'Tạo thành công giao dịch mới của bạn', - 'updated_journal_no_descr' => 'Cập nhật thành công giao dịch của bạn', - 'select_transactions' => 'Chọn giao dịch', - 'rule_group_select_transactions' => 'Áp dụng ":title" vào giao dịch', - 'rule_select_transactions' => 'Áp dụng ":title" vào giao dịch', - 'stop_selection' => 'Dừng chọn giao dịch', - 'reconcile_selected' => 'Đối chiếu', - 'mass_delete_journals' => 'Xóa một số giao dịch', - 'mass_edit_journals' => 'Chỉnh sửa một số giao dịch', - 'mass_bulk_journals' => 'Chỉnh sửa hàng loạt một số giao dịch', - 'mass_bulk_journals_explain' => 'Biểu mẫu này cho phép bạn thay đổi thuộc tính của các giao dịch được liệt kê bên dưới trong một bản cập nhật quét. Tất cả các giao dịch trong bảng sẽ được cập nhật khi bạn thay đổi các tham số bạn thấy ở đây.', - 'part_of_split' => 'Giao dịch này là một phần của giao dịch phân chia. Nếu bạn chưa chọn tất cả các phần tách, bạn có thể chỉ thay đổi một nửa giao dịch.', - 'bulk_set_new_values' => 'Sử dụng các đầu vào bên dưới để đặt giá trị mới. Nếu bạn để trống, chúng sẽ được làm trống cho tất cả. Ngoài ra, lưu ý rằng chỉ rút tiền sẽ được cấp ngân sách.', - 'no_bulk_category' => 'Đừng cập nhật danh mục', - 'no_bulk_budget' => 'Đừng cập nhật ngân sách', - 'no_bulk_tags' => 'Đừng cập nhật nhãn', - 'replace_with_these_tags' => 'Replace with these tags', - 'append_these_tags' => 'Add these tags', - 'mass_edit' => 'Chỉnh sửa được chọn riêng', - 'bulk_edit' => 'Chỉnh sửa được chọn hàng loạt', - 'mass_delete' => 'Xóa đã chọn', - 'cannot_edit_other_fields' => 'Bạn không thể chỉnh sửa hàng loạt các trường khác ngoài các trường ở đây, vì không có chỗ để hiển thị chúng. Vui lòng theo liên kết và chỉnh sửa từng cái một, nếu bạn cần chỉnh sửa các trường này.', - 'cannot_change_amount_reconciled' => 'Bạn không thể thay đổi số lượng giao dịch được điều chỉnh.', - 'no_budget' => '(không có ngân sách)', - 'no_bill' => '(no bill)', - 'account_per_budget' => 'Tài khoản trên mỗi ngân sách', - 'account_per_category' => 'Tài khoản mỗi danh mục', - 'create_new_object' => 'Tạo', - 'empty' => '(trống)', - 'all_other_budgets' => '(tất cả các ngân sách khác)', - 'all_other_accounts' => '(tất cả các tài khoản khác)', - 'expense_per_source_account' => 'Chi phí cho mỗi tài khoản nguồn', - 'expense_per_destination_account' => 'Chi phí cho mỗi tài khoản đích', - 'income_per_destination_account' => 'Thu nhập trên tài khoản đích', - 'spent_in_specific_category' => 'Chi tiêu trong danh mục ":category"', - 'earned_in_specific_category' => 'Kiếm được trong danh mục ":category"', - 'spent_in_specific_tag' => 'Chi tiêu trong nhãn ":tag"', - 'earned_in_specific_tag' => 'Kiếm được trong nhãn ":tag"', - 'income_per_source_account' => 'Thu nhập trên mỗi tài khoản nguồn', - 'average_spending_per_destination' => 'Chi phí trung bình cho mỗi tài khoản nguồn tài khoản đích', - 'average_spending_per_source' => 'Chi phí trung bình trên mỗi tài khoản nguồn', - 'average_earning_per_source' => 'Thu nhập trung bình trên mỗi tài khoản nguồn', - 'average_earning_per_destination' => 'Thu nhập trung bình trên mỗi tài khoản đích', - 'account_per_tag' => 'Tài khoản trên mỗi nhãn', - 'tag_report_expenses_listed_once' => 'Chi phí và thu nhập không bao giờ được liệt kê hai lần. Nếu một giao dịch có nhiều nhãn, nó chỉ có thể hiển thị dưới một trong các nhãn của nó. Danh sách này có thể bị thiếu dữ liệu, nhưng số tiền sẽ chính xác.', - 'double_report_expenses_charted_once' => 'Chi phí và thu nhập không bao giờ được hiển thị hai lần. Nếu một giao dịch có nhiều nhãn, nó chỉ có thể hiển thị dưới một trong các nhãn của nó. Biểu đồ này có thể thiếu dữ liệu, nhưng số tiền sẽ chính xác.', - 'tag_report_chart_single_tag' => 'Biểu đồ này áp dụng cho một nhãn duy nhất. Nếu một giao dịch có nhiều nhãn, những gì bạn thấy ở đây cũng có thể được phản ánh trong biểu đồ của các nhãn khác.', - 'tag' => 'Nhãn', - 'no_budget_squared' => '(không có ngân sách)', - 'perm-delete-many' => 'Xóa nhiều mục trong một lần có thể rất khó chịu. Hãy thận trọng. Bạn có thể xóa một phần của giao dịch tách khỏi trang này, vì vậy hãy cẩn thận.', - 'mass_deleted_transactions_success' => 'Đã xóa :count giao dịch. | Đã xóa :count giao dịch.', - 'mass_edited_transactions_success' => 'Cập nhật :count giao dịch. | Cập nhật :count giao dịch.', - 'opt_group_' => '(không có loại tài khoản)', - 'opt_group_no_account_type' => '(không có loại tài khoản)', - 'opt_group_defaultAsset' => 'tài khoản mặc định', - 'opt_group_savingAsset' => 'Tài khoản tiết kiệm', - 'opt_group_sharedAsset' => 'tài khoản dùng chung', - 'opt_group_ccAsset' => 'Thẻ tín dụng', - 'opt_group_cashWalletAsset' => 'Ví tiền mặt', - 'opt_group_expense_account' => 'Tài khoản chi phí', - 'opt_group_revenue_account' => 'Tài khoản doanh thu', - 'opt_group_l_Loan' => 'Nợ: Cho vay', - 'opt_group_cash_account' => 'Tài khoản tiền mặt', - 'opt_group_l_Debt' => 'Nợ: Nợ', - 'opt_group_l_Mortgage' => 'Nợ: Thế chấp', - 'opt_group_l_Credit card' => 'Nợ: Thẻ tín dụng', - 'notes' => 'Ghi chú', - 'unknown_journal_error' => 'Không thể lưu trữ giao dịch. Vui lòng kiểm tra các tệp nhật ký.', - 'attachment_not_found' => 'Không thể tìm thấy tệp đính kèm này.', - 'journal_link_bill' => 'Giao dịch này được liên kết với hóa đơn :name. Để xóa kết nối, bỏ chọn hộp kiểm. Sử dụng quy tắc để kết nối nó với hóa đơn khác.', - 'transaction_stored_link' => 'Giao dịch #{ID} ("{title}") đã được lưu trữ.', - 'transaction_new_stored_link' => ' Giao dịch #{ID} đã được lưu trữ.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => 'Cập nhật rút tiền', + 'update_deposit' => 'Cập nhật tiền gửi', + 'update_transaction' => 'Cập nhật giao dịch', + 'update_transfer' => 'Cập nhật chuyển', + 'updated_withdrawal' => 'Cập nhật rút tiền ":description"', + 'updated_deposit' => 'Tiền gửi cập nhật ":description"', + 'updated_transfer' => 'Chuyển khoản cập nhật ":description"', + 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', + 'no_changes_deposit' => 'Deposit ":description" was not changed.', + 'no_changes_transfer' => 'Transfer ":description" was not changed.', + 'delete_withdrawal' => 'Xóa rút tiền ":description"', + 'delete_deposit' => 'Xóa tiền gửi ":description"', + 'delete_transfer' => 'Xóa chuyển ":description"', + 'deleted_withdrawal' => 'Đã xóa thành công rút tiền ":description"', + 'deleted_deposit' => 'Đã gửi thành công tiền gửi ":description"', + 'deleted_transfer' => 'Xóa thành công chuyển khoản ":description"', + 'deleted_reconciliation' => 'Tạo thành công giao dịch mới ":description"', + 'stored_journal' => 'Tạo thành công giao dịch mới ":description"', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => 'Tạo thành công giao dịch mới của bạn', + 'updated_journal_no_descr' => 'Cập nhật thành công giao dịch của bạn', + 'select_transactions' => 'Chọn giao dịch', + 'rule_group_select_transactions' => 'Áp dụng ":title" vào giao dịch', + 'rule_select_transactions' => 'Áp dụng ":title" vào giao dịch', + 'stop_selection' => 'Dừng chọn giao dịch', + 'reconcile_selected' => 'Đối chiếu', + 'mass_delete_journals' => 'Xóa một số giao dịch', + 'mass_edit_journals' => 'Chỉnh sửa một số giao dịch', + 'mass_bulk_journals' => 'Chỉnh sửa hàng loạt một số giao dịch', + 'mass_bulk_journals_explain' => 'Biểu mẫu này cho phép bạn thay đổi thuộc tính của các giao dịch được liệt kê bên dưới trong một bản cập nhật quét. Tất cả các giao dịch trong bảng sẽ được cập nhật khi bạn thay đổi các tham số bạn thấy ở đây.', + 'part_of_split' => 'Giao dịch này là một phần của giao dịch phân chia. Nếu bạn chưa chọn tất cả các phần tách, bạn có thể chỉ thay đổi một nửa giao dịch.', + 'bulk_set_new_values' => 'Sử dụng các đầu vào bên dưới để đặt giá trị mới. Nếu bạn để trống, chúng sẽ được làm trống cho tất cả. Ngoài ra, lưu ý rằng chỉ rút tiền sẽ được cấp ngân sách.', + 'no_bulk_category' => 'Đừng cập nhật danh mục', + 'no_bulk_budget' => 'Đừng cập nhật ngân sách', + 'no_bulk_tags' => 'Đừng cập nhật nhãn', + 'replace_with_these_tags' => 'Replace with these tags', + 'append_these_tags' => 'Add these tags', + 'mass_edit' => 'Chỉnh sửa được chọn riêng', + 'bulk_edit' => 'Chỉnh sửa được chọn hàng loạt', + 'mass_delete' => 'Xóa đã chọn', + 'cannot_edit_other_fields' => 'Bạn không thể chỉnh sửa hàng loạt các trường khác ngoài các trường ở đây, vì không có chỗ để hiển thị chúng. Vui lòng theo liên kết và chỉnh sửa từng cái một, nếu bạn cần chỉnh sửa các trường này.', + 'cannot_change_amount_reconciled' => 'Bạn không thể thay đổi số lượng giao dịch được điều chỉnh.', + 'no_budget' => '(không có ngân sách)', + 'no_bill' => '(no bill)', + 'account_per_budget' => 'Tài khoản trên mỗi ngân sách', + 'account_per_category' => 'Tài khoản mỗi danh mục', + 'create_new_object' => 'Tạo', + 'empty' => '(trống)', + 'all_other_budgets' => '(tất cả các ngân sách khác)', + 'all_other_accounts' => '(tất cả các tài khoản khác)', + 'expense_per_source_account' => 'Chi phí cho mỗi tài khoản nguồn', + 'expense_per_destination_account' => 'Chi phí cho mỗi tài khoản đích', + 'income_per_destination_account' => 'Thu nhập trên tài khoản đích', + 'spent_in_specific_category' => 'Chi tiêu trong danh mục ":category"', + 'earned_in_specific_category' => 'Kiếm được trong danh mục ":category"', + 'spent_in_specific_tag' => 'Chi tiêu trong nhãn ":tag"', + 'earned_in_specific_tag' => 'Kiếm được trong nhãn ":tag"', + 'income_per_source_account' => 'Thu nhập trên mỗi tài khoản nguồn', + 'average_spending_per_destination' => 'Chi phí trung bình cho mỗi tài khoản nguồn tài khoản đích', + 'average_spending_per_source' => 'Chi phí trung bình trên mỗi tài khoản nguồn', + 'average_earning_per_source' => 'Thu nhập trung bình trên mỗi tài khoản nguồn', + 'average_earning_per_destination' => 'Thu nhập trung bình trên mỗi tài khoản đích', + 'account_per_tag' => 'Tài khoản trên mỗi nhãn', + 'tag_report_expenses_listed_once' => 'Chi phí và thu nhập không bao giờ được liệt kê hai lần. Nếu một giao dịch có nhiều nhãn, nó chỉ có thể hiển thị dưới một trong các nhãn của nó. Danh sách này có thể bị thiếu dữ liệu, nhưng số tiền sẽ chính xác.', + 'double_report_expenses_charted_once' => 'Chi phí và thu nhập không bao giờ được hiển thị hai lần. Nếu một giao dịch có nhiều nhãn, nó chỉ có thể hiển thị dưới một trong các nhãn của nó. Biểu đồ này có thể thiếu dữ liệu, nhưng số tiền sẽ chính xác.', + 'tag_report_chart_single_tag' => 'Biểu đồ này áp dụng cho một nhãn duy nhất. Nếu một giao dịch có nhiều nhãn, những gì bạn thấy ở đây cũng có thể được phản ánh trong biểu đồ của các nhãn khác.', + 'tag' => 'Nhãn', + 'no_budget_squared' => '(không có ngân sách)', + 'perm-delete-many' => 'Xóa nhiều mục trong một lần có thể rất khó chịu. Hãy thận trọng. Bạn có thể xóa một phần của giao dịch tách khỏi trang này, vì vậy hãy cẩn thận.', + 'mass_deleted_transactions_success' => 'Đã xóa :count giao dịch. | Đã xóa :count giao dịch.', + 'mass_edited_transactions_success' => 'Cập nhật :count giao dịch. | Cập nhật :count giao dịch.', + 'opt_group_' => '(không có loại tài khoản)', + 'opt_group_no_account_type' => '(không có loại tài khoản)', + 'opt_group_defaultAsset' => 'tài khoản mặc định', + 'opt_group_savingAsset' => 'Tài khoản tiết kiệm', + 'opt_group_sharedAsset' => 'tài khoản dùng chung', + 'opt_group_ccAsset' => 'Thẻ tín dụng', + 'opt_group_cashWalletAsset' => 'Ví tiền mặt', + 'opt_group_expense_account' => 'Tài khoản chi phí', + 'opt_group_revenue_account' => 'Tài khoản doanh thu', + 'opt_group_l_Loan' => 'Nợ: Cho vay', + 'opt_group_cash_account' => 'Tài khoản tiền mặt', + 'opt_group_l_Debt' => 'Nợ: Nợ', + 'opt_group_l_Mortgage' => 'Nợ: Thế chấp', + 'opt_group_l_Credit card' => 'Nợ: Thẻ tín dụng', + 'notes' => 'Ghi chú', + 'unknown_journal_error' => 'Không thể lưu trữ giao dịch. Vui lòng kiểm tra các tệp nhật ký.', + 'attachment_not_found' => 'Không thể tìm thấy tệp đính kèm này.', + 'journal_link_bill' => 'Giao dịch này được liên kết với hóa đơn :name. Để xóa kết nối, bỏ chọn hộp kiểm. Sử dụng quy tắc để kết nối nó với hóa đơn khác.', + 'transaction_stored_link' => 'Giao dịch #{ID} ("{title}") đã được lưu trữ.', + 'transaction_new_stored_link' => ' Giao dịch #{ID} đã được lưu trữ.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => 'Chào mừng đến với Firefly III!', - 'submit' => 'Gửi', - 'submission' => 'Gửi', - 'submit_yes_really' => 'Gửi (Tôi biết những gì tôi đang làm)', - 'getting_started' => 'Bắt đầu', - 'to_get_started' => 'Thật tốt khi thấy bạn đã cài đặt thành công Firefly III. Để bắt đầu với công cụ này, vui lòng nhập tên ngân hàng của bạn và số dư tài khoản của bạn. Đừng lo lắng nếu bạn có nhiều tài khoản. Bạn có thể thêm chúng sau. Chỉ là Firefly III cần một cái gì đó để bắt đầu.', - 'savings_balance_text' => 'Firefly III sẽ tự động tạo một tài khoản tiết kiệm cho bạn. Theo mặc định, sẽ không có tiền trong tài khoản tiết kiệm của bạn, nhưng nếu bạn nói với Firefly III, số dư sẽ được lưu trữ như vậy.', - 'finish_up_new_user' => 'Đó là nó! Bạn có thể tiếp tục bằng cách nhấn Submit. Ybạn sẽ được đưa đến chỉ số của Firefly III.', - 'stored_new_accounts_new_user' => 'Yeah! Tài khoản mới của bạn đã được lưu trữ.', - 'set_preferred_language' => 'Nếu bạn thích sử dụng Firefly III trong một ngôn ngữ khác, vui lòng cho biết tại đây.', - 'language' => 'Ngôn ngữ', - 'new_savings_account' => ':bank_name tài khoản tiết kiệm', - 'cash_wallet' => 'Ví tiền mặt', - 'currency_not_present' => 'Nếu loại tiền bạn thường sử dụng không được liệt kê, đừng lo lắng. Bạn có thể tạo tiền tệ của riêng bạn trong Tùy chọn > Tiền tệ.', + 'welcome' => 'Chào mừng đến với Firefly III!', + 'submit' => 'Gửi', + 'submission' => 'Gửi', + 'submit_yes_really' => 'Gửi (Tôi biết những gì tôi đang làm)', + 'getting_started' => 'Bắt đầu', + 'to_get_started' => 'Thật tốt khi thấy bạn đã cài đặt thành công Firefly III. Để bắt đầu với công cụ này, vui lòng nhập tên ngân hàng của bạn và số dư tài khoản của bạn. Đừng lo lắng nếu bạn có nhiều tài khoản. Bạn có thể thêm chúng sau. Chỉ là Firefly III cần một cái gì đó để bắt đầu.', + 'savings_balance_text' => 'Firefly III sẽ tự động tạo một tài khoản tiết kiệm cho bạn. Theo mặc định, sẽ không có tiền trong tài khoản tiết kiệm của bạn, nhưng nếu bạn nói với Firefly III, số dư sẽ được lưu trữ như vậy.', + 'finish_up_new_user' => 'Đó là nó! Bạn có thể tiếp tục bằng cách nhấn Submit. Ybạn sẽ được đưa đến chỉ số của Firefly III.', + 'stored_new_accounts_new_user' => 'Yeah! Tài khoản mới của bạn đã được lưu trữ.', + 'set_preferred_language' => 'Nếu bạn thích sử dụng Firefly III trong một ngôn ngữ khác, vui lòng cho biết tại đây.', + 'language' => 'Ngôn ngữ', + 'new_savings_account' => ':bank_name tài khoản tiết kiệm', + 'cash_wallet' => 'Ví tiền mặt', + 'currency_not_present' => 'Nếu loại tiền bạn thường sử dụng không được liệt kê, đừng lo lắng. Bạn có thể tạo tiền tệ của riêng bạn trong Tùy chọn > Tiền tệ.', // home page: - 'transaction_table_description' => 'A table containing your transactions', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => 'Tài khoản của bạn', - 'your_accounts' => 'Tổng quan về tài khoản của bạn', - 'category_overview' => 'Tổng quan về danh mục', - 'expense_overview' => 'Tổng quan về tài khoản', - 'revenue_overview' => 'Tổng quan về tài khoản doanh thu', - 'budgetsAndSpending' => 'Ngân sách và chi tiêu', - 'budgets_and_spending' => 'Ngân sách và chi tiêu', - 'go_to_budget' => 'Đến ngân sách "{budget}"', - 'go_to_deposits' => 'Go to deposits', - 'go_to_expenses' => 'Go to expenses', - 'savings' => 'Tiết kiệm', - 'newWithdrawal' => 'Chi phí mới', - 'newDeposit' => 'Tiền gửi mới', - 'newTransfer' => 'Chuyển khoản mới', - 'bills_to_pay' => 'Hóa đơn phải trả', - 'per_day' => 'Mỗi ngày', - 'left_to_spend_per_day' => 'Còn lại để chi tiêu mỗi ngày', - 'bills_paid' => 'Hóa đơn thanh toán', - 'custom_period' => 'Custom period', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Select a period', + 'transaction_table_description' => 'A table containing your transactions', + 'opposing_account' => 'Opposing account', + 'yourAccounts' => 'Tài khoản của bạn', + 'your_accounts' => 'Tổng quan về tài khoản của bạn', + 'category_overview' => 'Tổng quan về danh mục', + 'expense_overview' => 'Tổng quan về tài khoản', + 'revenue_overview' => 'Tổng quan về tài khoản doanh thu', + 'budgetsAndSpending' => 'Ngân sách và chi tiêu', + 'budgets_and_spending' => 'Ngân sách và chi tiêu', + 'go_to_budget' => 'Đến ngân sách "{budget}"', + 'go_to_deposits' => 'Go to deposits', + 'go_to_expenses' => 'Go to expenses', + 'savings' => 'Tiết kiệm', + 'newWithdrawal' => 'Chi phí mới', + 'newDeposit' => 'Tiền gửi mới', + 'newTransfer' => 'Chuyển khoản mới', + 'bills_to_pay' => 'Hóa đơn phải trả', + 'per_day' => 'Mỗi ngày', + 'left_to_spend_per_day' => 'Còn lại để chi tiêu mỗi ngày', + 'bills_paid' => 'Hóa đơn thanh toán', + 'custom_period' => 'Custom period', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Select a period', // menu and titles, should be recycled as often as possible: - 'currency' => 'Tiền tệ', - 'preferences' => 'Cá nhân', - 'logout' => 'Đăng xuất', - 'logout_other_sessions' => 'Logout all other sessions', - 'toggleNavigation' => 'Chuyển đổi đổigle navigation', - 'searchPlaceholder' => 'Tìm kiếm...', - 'version' => 'Phiên bản', - 'dashboard' => 'Bảng điều khiển', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => 'Ngân sách có sẵn ({currency})', - 'currencies' => 'Tiền tệ', - 'activity' => 'Hoạt động', - 'usage' => 'Sử dụng', - 'accounts' => 'Tài khoản', - 'Asset account' => 'tài khoản', - 'Default account' => 'tài khoản', - 'Expense account' => 'Tài khoản chi phí', - 'Revenue account' => 'Tài khoản thu nhập', - 'Initial balance account' => 'Tài khoản số dư ban đầu', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => 'Món nợ', - 'account_type_Loan' => 'Tiền vay', - 'account_type_Mortgage' => 'Thế chấp', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => 'Thẻ tín dụng', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => 'Ngân sách', - 'tags' => 'Nhãn', - 'reports' => 'Báo cáo', - 'transactions' => 'Giao dịch', - 'expenses' => 'Chi phí', - 'income' => 'Thu nhập doanh thu', - 'transfers' => 'Chuyển', - 'moneyManagement' => 'Quản lý tiền bạc', - 'money_management' => 'Quản lý tiền bạc', - 'tools' => 'Công cụ', - 'piggyBanks' => 'Heo đất', - 'piggy_banks' => 'Heo đất', - 'amount_x_of_y' => '{current} của {total}', - 'bills' => 'Hóa đơn', - 'withdrawal' => 'Rút tiền', - 'opening_balance' => 'Số dư đầu kỳ', - 'deposit' => 'Tiền gửi', - 'account' => 'Tài khoản', - 'transfer' => 'Chuyển khoản', - 'Withdrawal' => 'Rút tiền', - 'Deposit' => 'Tiền gửi', - 'Transfer' => 'Chuyển khoản', - 'bill' => 'Hóa đơn', - 'yes' => 'Đúng', - 'no' => 'Không', - 'amount' => 'Số tiền', - 'overview' => 'Tổng quát', - 'saveOnAccount' => 'Lưu vào tài khoản', - 'unknown' => 'không xác định', - 'monthly' => 'Hàng tháng', - 'profile' => 'Hồ sơ', - 'errors' => 'Lỗi', - 'debt_start_date' => 'Ngày bắt đầu nợ', - 'debt_start_amount' => 'Số tiền bắt đầu nợ', - 'debt_start_amount_help' => 'Nếu bạn nợ một khoản tiền tốt nhất để nhập số tiền âm, vì nó ảnh hưởng đến giá trị ròng của bạn. Nếu bạn nợ một khoản tiền tương tự. Kiểm tra các trang trợ giúp để biết thêm thông tin.', - 'interest_period_help' => 'Trường này sẽ không được tính cho bạn.', - 'store_new_liabilities_account' => 'Lưu trữ nợ mới', - 'edit_liabilities_account' => 'Sửa nợ ":name"', - 'financial_control' => 'Kiểm soát tài chính', - 'accounting' => 'Tài khoản', - 'automation' => 'Tự động', - 'others' => 'Khác', - 'classification' => 'Phân loại', - 'store_transaction' => 'Store transaction', + 'currency' => 'Tiền tệ', + 'preferences' => 'Cá nhân', + 'logout' => 'Đăng xuất', + 'logout_other_sessions' => 'Logout all other sessions', + 'toggleNavigation' => 'Chuyển đổi đổigle navigation', + 'searchPlaceholder' => 'Tìm kiếm...', + 'version' => 'Phiên bản', + 'dashboard' => 'Bảng điều khiển', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => 'Ngân sách có sẵn ({currency})', + 'currencies' => 'Tiền tệ', + 'activity' => 'Hoạt động', + 'usage' => 'Sử dụng', + 'accounts' => 'Tài khoản', + 'Asset account' => 'tài khoản', + 'Default account' => 'tài khoản', + 'Expense account' => 'Tài khoản chi phí', + 'Revenue account' => 'Tài khoản thu nhập', + 'Initial balance account' => 'Tài khoản số dư ban đầu', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => 'Món nợ', + 'account_type_Loan' => 'Tiền vay', + 'account_type_Mortgage' => 'Thế chấp', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => 'Thẻ tín dụng', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'I am owed this debt', + 'liability_direction_debit' => 'I owe this debt to somebody else', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => 'Ngân sách', + 'tags' => 'Nhãn', + 'reports' => 'Báo cáo', + 'transactions' => 'Giao dịch', + 'expenses' => 'Chi phí', + 'income' => 'Thu nhập doanh thu', + 'transfers' => 'Chuyển', + 'moneyManagement' => 'Quản lý tiền bạc', + 'money_management' => 'Quản lý tiền bạc', + 'tools' => 'Công cụ', + 'piggyBanks' => 'Heo đất', + 'piggy_banks' => 'Heo đất', + 'amount_x_of_y' => '{current} của {total}', + 'bills' => 'Hóa đơn', + 'withdrawal' => 'Rút tiền', + 'opening_balance' => 'Số dư đầu kỳ', + 'deposit' => 'Tiền gửi', + 'account' => 'Tài khoản', + 'transfer' => 'Chuyển khoản', + 'Withdrawal' => 'Rút tiền', + 'Deposit' => 'Tiền gửi', + 'Transfer' => 'Chuyển khoản', + 'bill' => 'Hóa đơn', + 'yes' => 'Đúng', + 'no' => 'Không', + 'amount' => 'Số tiền', + 'overview' => 'Tổng quát', + 'saveOnAccount' => 'Lưu vào tài khoản', + 'unknown' => 'không xác định', + 'monthly' => 'Hàng tháng', + 'profile' => 'Hồ sơ', + 'errors' => 'Lỗi', + 'debt_start_date' => 'Ngày bắt đầu nợ', + 'debt_start_amount' => 'Số tiền bắt đầu nợ', + 'debt_start_amount_help' => 'Nếu bạn nợ một khoản tiền tốt nhất để nhập số tiền âm, vì nó ảnh hưởng đến giá trị ròng của bạn. Nếu bạn nợ một khoản tiền tương tự. Kiểm tra các trang trợ giúp để biết thêm thông tin.', + 'interest_period_help' => 'Trường này sẽ không được tính cho bạn.', + 'store_new_liabilities_account' => 'Lưu trữ nợ mới', + 'edit_liabilities_account' => 'Sửa nợ ":name"', + 'financial_control' => 'Kiểm soát tài chính', + 'accounting' => 'Tài khoản', + 'automation' => 'Tự động', + 'others' => 'Khác', + 'classification' => 'Phân loại', + 'store_transaction' => 'Store transaction', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => 'Báo cáo tài chính mặc định giữa: start và: end', - 'report_audit' => 'Tổng quan về lịch sử giao dịch giữa: start và: end', - 'report_category' => 'Báo cáo danh mục giữa: bắt đầu và: kết thúc', - 'report_double' => 'Báo cáo tài khoản chi phí / doanh thu giữa: bắt đầu và: kết thúc', - 'report_budget' => 'Báo cáo ngân sách giữa: bắt đầu và: kết thúc', - 'report_tag' => 'Nhãn báo cáo giữa: :start và :end', - 'quick_link_reports' => 'Đường dẫn nhanh', - 'quick_link_examples' => 'Đây chỉ là một số liên kết ví dụ để giúp bạn bắt đầu. Kiểm tra các trang trợ giúp dưới nút (?) - để biết thông tin về tất cả các báo cáo và các từ ma thuật bạn có thể sử dụng.', - 'quick_link_default_report' => 'Báo cáo tài chính mặc định', - 'quick_link_audit_report' => 'Tổng quan về lịch sử giao dịch', - 'report_this_month_quick' => 'Tháng hiện tại, tất cả các tài khoản', - 'report_last_month_quick' => 'Tháng trước, tất cả tài khoản, tất cả tài khoản', - 'report_this_year_quick' => 'Năm hiện tại, tất cả các tài khoản', - 'report_this_fiscal_year_quick' => 'Năm tài chính hiện tại, tất cả các tài khoản', - 'report_all_time_quick' => 'Mọi lúc, mọi tài khoản', - 'reports_can_bookmark' => 'Hãy nhớ rằng các báo cáo có thể được đánh dấu.', - 'incomeVsExpenses' => 'Thu nhập so với chi phí', - 'accountBalances' => 'Số dư tài khoản', - 'balanceStart' => 'Số dư đầu kỳ', - 'balanceEnd' => 'Số dư cuối kỳ', - 'splitByAccount' => 'Chia theo tài khoản', - 'coveredWithTags' => 'Được bao phủ bởi các nhãn', - 'leftInBudget' => 'Còn lại trong ngân sách', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => 'Tổng số tiền', - 'noCategory' => '(không danh mục)', - 'notCharged' => 'Không tính phí (chưa)', - 'inactive' => 'Không hoạt động', - 'active' => 'Hoạt động', - 'difference' => 'Sự khác biệt', - 'money_flowing_in' => 'Vào', - 'money_flowing_out' => 'Ra', - 'topX' => 'đầu: số', - 'show_full_list' => 'Hiển thị toàn bộ danh sách', - 'show_only_top' => 'Chỉ hiển thị đầu: số', - 'report_type' => 'Loại báo cáo', - 'report_type_default' => 'Báo cáo tài chính mặc định', - 'report_type_audit' => 'Tổng quan về lịch sử giao dịch (kiểm toán)', - 'report_type_category' => 'Báo cáo danh mục', - 'report_type_budget' => 'Báo cáo ngân sách', - 'report_type_tag' => 'Báo cáo nhãn', - 'report_type_double' => 'Báo cáo tài khoản chi phí / doanh thu', - 'more_info_help' => 'Thông tin thêm về các loại báo cáo này có thể được tìm thấy trong các trang trợ giúp. Nhấn biểu tượng (?) Ở góc trên bên phải.', - 'report_included_accounts' => 'Bao gồm các tài khoản', - 'report_date_range' => 'Phạm vi ngày', - 'report_preset_ranges' => 'Phạm vi đặt trước', - 'shared' => 'Đã chia sẻ', - 'fiscal_year' => 'Năm tài chính', - 'income_entry' => 'Thu nhập từ tài khoản ": name" giữa: start và: end', - 'expense_entry' => 'Chi phí cho tài khoản ": name" giữa: start và: end', - 'category_entry' => 'Chi phí và thu nhập trong danh mục ":name" giữa :start và :end', - 'budget_spent_amount' => 'Chi phí trong ngân sách ": ngân sách" giữa: bắt đầu và: kết thúc', - 'balance_amount' => 'Chi phí trong ngân sách ": ngân sách" được thanh toán từ tài khoản ": tài khoản" giữa: bắt đầu và: kết thúc', - 'no_audit_activity' => 'Không có hoạt động nào được ghi lại trên tài khoản :account_name giữa: bắt đầu và: kết thúc.', - 'audit_end_balance' => 'Số dư tài khoản của :account_name ở cuối: kết thúc là :: sự cân bằng', - 'reports_extra_options' => 'Tùy chọn bổ sung', - 'report_has_no_extra_options' => 'Báo cáo này không có tùy chọn bổ sung', - 'reports_submit' => 'Xem báo cáo', - 'end_after_start_date' => 'Ngày kết thúc báo cáo phải sau ngày bắt đầu.', - 'select_category' => 'Chọn danh mục', - 'select_budget' => 'Chọn ngân sách.', - 'select_tag' => 'Chọn nhãn.', - 'income_per_category' => 'Thu nhập trên mỗi danh mục', - 'expense_per_category' => 'Chi phí cho mỗi loại', - 'expense_per_budget' => 'Chi phí cho mỗi ngân sách', - 'income_per_account' => 'Thu nhập trên mỗi tài khoản', - 'expense_per_account' => 'Chi phí cho mỗi tài khoản', - 'expense_per_tag' => 'Chi phí cho mỗi nhãn', - 'income_per_tag' => 'Thu nhập trên mỗi nhãn', - 'include_expense_not_in_budget' => 'Bao gồm các chi phí không có trong ngân sách đã chọn', - 'include_expense_not_in_account' => 'Bao gồm các chi phí không có trong tài khoản đã chọn', - 'include_expense_not_in_category' => 'Bao gồm các chi phí không thuộc danh mục đã chọn', - 'include_income_not_in_category' => 'Thu nhập đã bao gồm không thuộc danh mục đã chọn', - 'include_income_not_in_account' => 'Thu nhập đã bao gồm không có trong tài khoản đã chọn', - 'include_income_not_in_tags' => 'Thu nhập đã bao gồm không có trong nhãn đã chọn', - 'include_expense_not_in_tags' => 'Bao gồm các chi phí không có trong (các) nhãn đã chọn', - 'everything_else' => 'Mọi thứ khác', - 'income_and_expenses' => 'Thu nhập và chi tiêu', - 'spent_average' => 'Chi tiêu (trung bình)', - 'income_average' => 'Thu nhập (trung bình)', - 'transaction_count' => 'Số lượng giao dịch', - 'average_spending_per_account' => 'Chi tiêu trung bình cho mỗi tài khoản', - 'average_income_per_account' => 'Thu nhập trung bình trên mỗi tài khoản', - 'total' => 'Toàn bộ', - 'description' => 'Sự miêu tả', - 'sum_of_period' => 'Tổng chu kỳ', - 'average_in_period' => 'Trung bình trong kỳ', - 'account_role_defaultAsset' => 'tài khoản mặc định', - 'account_role_sharedAsset' => 'tài khoản dùng chung', - 'account_role_savingAsset' => 'Tài khoản tiết kiệm', - 'account_role_ccAsset' => 'Thẻ tín dụng', - 'account_role_cashWalletAsset' => 'Ví tiền mặt', - 'budget_chart_click' => 'Vui lòng nhấp vào tên ngân sách trong bảng trên để xem biểu đồ.', - 'category_chart_click' => 'Vui lòng nhấp vào tên danh mục trong bảng trên để xem biểu đồ.', - 'in_out_accounts' => 'Kiếm được và chi tiêu cho mỗi kết hợp', - 'in_out_accounts_per_asset' => 'Kiếm được và chi tiêu (trên mỗi tài khoản)', - 'in_out_per_category' => 'Kiếm được và chi tiêu cho mỗi danh mục', - 'out_per_budget' => 'Chi tiêu cho mỗi ngân sách', - 'select_expense_revenue' => 'Chọn tài khoản chi phí / doanh thu', - 'multi_currency_report_sum' => 'Vì danh sách này chứa các tài khoản có nhiều loại tiền tệ, nên số tiền bạn nhìn thấy có thể không có ý nghĩa. Báo cáo sẽ luôn trở về loại tiền mặc định của bạn.', - 'sum_in_default_currency' => 'Tổng tiền sẽ luôn bằng tiền tệ mặc định của bạn.', - 'net_filtered_prefs' => 'Biểu đồ này sẽ không bao giờ bao gồm các tài khoản có phần "Bao gồm giá trị ròng" không được chọn.', + 'report_default' => 'Báo cáo tài chính mặc định giữa: start và: end', + 'report_audit' => 'Tổng quan về lịch sử giao dịch giữa: start và: end', + 'report_category' => 'Báo cáo danh mục giữa: bắt đầu và: kết thúc', + 'report_double' => 'Báo cáo tài khoản chi phí / doanh thu giữa: bắt đầu và: kết thúc', + 'report_budget' => 'Báo cáo ngân sách giữa: bắt đầu và: kết thúc', + 'report_tag' => 'Nhãn báo cáo giữa: :start và :end', + 'quick_link_reports' => 'Đường dẫn nhanh', + 'quick_link_examples' => 'Đây chỉ là một số liên kết ví dụ để giúp bạn bắt đầu. Kiểm tra các trang trợ giúp dưới nút (?) - để biết thông tin về tất cả các báo cáo và các từ ma thuật bạn có thể sử dụng.', + 'quick_link_default_report' => 'Báo cáo tài chính mặc định', + 'quick_link_audit_report' => 'Tổng quan về lịch sử giao dịch', + 'report_this_month_quick' => 'Tháng hiện tại, tất cả các tài khoản', + 'report_last_month_quick' => 'Tháng trước, tất cả tài khoản, tất cả tài khoản', + 'report_this_year_quick' => 'Năm hiện tại, tất cả các tài khoản', + 'report_this_fiscal_year_quick' => 'Năm tài chính hiện tại, tất cả các tài khoản', + 'report_all_time_quick' => 'Mọi lúc, mọi tài khoản', + 'reports_can_bookmark' => 'Hãy nhớ rằng các báo cáo có thể được đánh dấu.', + 'incomeVsExpenses' => 'Thu nhập so với chi phí', + 'accountBalances' => 'Số dư tài khoản', + 'balanceStart' => 'Số dư đầu kỳ', + 'balanceEnd' => 'Số dư cuối kỳ', + 'splitByAccount' => 'Chia theo tài khoản', + 'coveredWithTags' => 'Được bao phủ bởi các nhãn', + 'leftInBudget' => 'Còn lại trong ngân sách', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => 'Tổng số tiền', + 'noCategory' => '(không danh mục)', + 'notCharged' => 'Không tính phí (chưa)', + 'inactive' => 'Không hoạt động', + 'active' => 'Hoạt động', + 'difference' => 'Sự khác biệt', + 'money_flowing_in' => 'Vào', + 'money_flowing_out' => 'Ra', + 'topX' => 'đầu: số', + 'show_full_list' => 'Hiển thị toàn bộ danh sách', + 'show_only_top' => 'Chỉ hiển thị đầu: số', + 'report_type' => 'Loại báo cáo', + 'report_type_default' => 'Báo cáo tài chính mặc định', + 'report_type_audit' => 'Tổng quan về lịch sử giao dịch (kiểm toán)', + 'report_type_category' => 'Báo cáo danh mục', + 'report_type_budget' => 'Báo cáo ngân sách', + 'report_type_tag' => 'Báo cáo nhãn', + 'report_type_double' => 'Báo cáo tài khoản chi phí / doanh thu', + 'more_info_help' => 'Thông tin thêm về các loại báo cáo này có thể được tìm thấy trong các trang trợ giúp. Nhấn biểu tượng (?) Ở góc trên bên phải.', + 'report_included_accounts' => 'Bao gồm các tài khoản', + 'report_date_range' => 'Phạm vi ngày', + 'report_preset_ranges' => 'Phạm vi đặt trước', + 'shared' => 'Đã chia sẻ', + 'fiscal_year' => 'Năm tài chính', + 'income_entry' => 'Thu nhập từ tài khoản ": name" giữa: start và: end', + 'expense_entry' => 'Chi phí cho tài khoản ": name" giữa: start và: end', + 'category_entry' => 'Chi phí và thu nhập trong danh mục ":name" giữa :start và :end', + 'budget_spent_amount' => 'Chi phí trong ngân sách ": ngân sách" giữa: bắt đầu và: kết thúc', + 'balance_amount' => 'Chi phí trong ngân sách ": ngân sách" được thanh toán từ tài khoản ": tài khoản" giữa: bắt đầu và: kết thúc', + 'no_audit_activity' => 'Không có hoạt động nào được ghi lại trên tài khoản :account_name giữa: bắt đầu và: kết thúc.', + 'audit_end_balance' => 'Số dư tài khoản của :account_name ở cuối: kết thúc là :: sự cân bằng', + 'reports_extra_options' => 'Tùy chọn bổ sung', + 'report_has_no_extra_options' => 'Báo cáo này không có tùy chọn bổ sung', + 'reports_submit' => 'Xem báo cáo', + 'end_after_start_date' => 'Ngày kết thúc báo cáo phải sau ngày bắt đầu.', + 'select_category' => 'Chọn danh mục', + 'select_budget' => 'Chọn ngân sách.', + 'select_tag' => 'Chọn nhãn.', + 'income_per_category' => 'Thu nhập trên mỗi danh mục', + 'expense_per_category' => 'Chi phí cho mỗi loại', + 'expense_per_budget' => 'Chi phí cho mỗi ngân sách', + 'income_per_account' => 'Thu nhập trên mỗi tài khoản', + 'expense_per_account' => 'Chi phí cho mỗi tài khoản', + 'expense_per_tag' => 'Chi phí cho mỗi nhãn', + 'income_per_tag' => 'Thu nhập trên mỗi nhãn', + 'include_expense_not_in_budget' => 'Bao gồm các chi phí không có trong ngân sách đã chọn', + 'include_expense_not_in_account' => 'Bao gồm các chi phí không có trong tài khoản đã chọn', + 'include_expense_not_in_category' => 'Bao gồm các chi phí không thuộc danh mục đã chọn', + 'include_income_not_in_category' => 'Thu nhập đã bao gồm không thuộc danh mục đã chọn', + 'include_income_not_in_account' => 'Thu nhập đã bao gồm không có trong tài khoản đã chọn', + 'include_income_not_in_tags' => 'Thu nhập đã bao gồm không có trong nhãn đã chọn', + 'include_expense_not_in_tags' => 'Bao gồm các chi phí không có trong (các) nhãn đã chọn', + 'everything_else' => 'Mọi thứ khác', + 'income_and_expenses' => 'Thu nhập và chi tiêu', + 'spent_average' => 'Chi tiêu (trung bình)', + 'income_average' => 'Thu nhập (trung bình)', + 'transaction_count' => 'Số lượng giao dịch', + 'average_spending_per_account' => 'Chi tiêu trung bình cho mỗi tài khoản', + 'average_income_per_account' => 'Thu nhập trung bình trên mỗi tài khoản', + 'total' => 'Toàn bộ', + 'description' => 'Sự miêu tả', + 'sum_of_period' => 'Tổng chu kỳ', + 'average_in_period' => 'Trung bình trong kỳ', + 'account_role_defaultAsset' => 'tài khoản mặc định', + 'account_role_sharedAsset' => 'tài khoản dùng chung', + 'account_role_savingAsset' => 'Tài khoản tiết kiệm', + 'account_role_ccAsset' => 'Thẻ tín dụng', + 'account_role_cashWalletAsset' => 'Ví tiền mặt', + 'budget_chart_click' => 'Vui lòng nhấp vào tên ngân sách trong bảng trên để xem biểu đồ.', + 'category_chart_click' => 'Vui lòng nhấp vào tên danh mục trong bảng trên để xem biểu đồ.', + 'in_out_accounts' => 'Kiếm được và chi tiêu cho mỗi kết hợp', + 'in_out_accounts_per_asset' => 'Kiếm được và chi tiêu (trên mỗi tài khoản)', + 'in_out_per_category' => 'Kiếm được và chi tiêu cho mỗi danh mục', + 'out_per_budget' => 'Chi tiêu cho mỗi ngân sách', + 'select_expense_revenue' => 'Chọn tài khoản chi phí / doanh thu', + 'multi_currency_report_sum' => 'Vì danh sách này chứa các tài khoản có nhiều loại tiền tệ, nên số tiền bạn nhìn thấy có thể không có ý nghĩa. Báo cáo sẽ luôn trở về loại tiền mặc định của bạn.', + 'sum_in_default_currency' => 'Tổng tiền sẽ luôn bằng tiền tệ mặc định của bạn.', + 'net_filtered_prefs' => 'Biểu đồ này sẽ không bao giờ bao gồm các tài khoản có phần "Bao gồm giá trị ròng" không được chọn.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => 'Đồ thị', - 'month' => 'Tháng', - 'budget' => 'Ngân sách', - 'spent' => 'Đã chi', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => 'Đã chi trong ngân sách', - 'left_to_spend' => 'Còn lại để chi tiêu', - 'earned' => 'Kiếm được', - 'overspent' => 'Quá hạn', - 'left' => 'Còn lại', - 'max-amount' => 'Số lượng tối đa', - 'min-amount' => 'Số lượng tối thiểu', - 'journal-amount' => 'Nhập hóa đơn hiện tại', - 'name' => 'Tên', - 'date' => 'Ngày', - 'date_and_time' => 'Date and time', - 'time' => 'Time', - 'paid' => 'Đã thanh toán', - 'unpaid' => 'Chưa thanh toán', - 'day' => 'Ngày', - 'budgeted' => 'Ngân sách', - 'period' => 'Chu kỳ', - 'balance' => 'Tiền còn lại', - 'in_out_period' => 'In + out this period', - 'sum' => 'Tổng', - 'summary' => 'Tóm lược', - 'average' => 'Trung bình', - 'balanceFor' => 'Số dư cho: tên', - 'no_tags' => '(không có nhãn)', + 'chart' => 'Đồ thị', + 'month' => 'Tháng', + 'budget' => 'Ngân sách', + 'spent' => 'Đã chi', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => 'Đã chi trong ngân sách', + 'left_to_spend' => 'Còn lại để chi tiêu', + 'earned' => 'Kiếm được', + 'overspent' => 'Quá hạn', + 'left' => 'Còn lại', + 'max-amount' => 'Số lượng tối đa', + 'min-amount' => 'Số lượng tối thiểu', + 'journal-amount' => 'Nhập hóa đơn hiện tại', + 'name' => 'Tên', + 'date' => 'Ngày', + 'date_and_time' => 'Date and time', + 'time' => 'Time', + 'paid' => 'Đã thanh toán', + 'unpaid' => 'Chưa thanh toán', + 'day' => 'Ngày', + 'budgeted' => 'Ngân sách', + 'period' => 'Chu kỳ', + 'balance' => 'Tiền còn lại', + 'in_out_period' => 'In + out this period', + 'sum' => 'Tổng', + 'summary' => 'Tóm lược', + 'average' => 'Trung bình', + 'balanceFor' => 'Số dư cho: tên', + 'no_tags' => '(không có nhãn)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => 'Thêm tiền vào heo đất ":name"', - 'piggy_bank' => 'Heo đất', - 'new_piggy_bank' => 'Tạo heo đất mới', - 'store_piggy_bank' => 'Lưu trữ heo đất mới', - 'stored_piggy_bank' => 'Lưu trữ heo đất mới ":name"', - 'account_status' => 'Tình trạng tài khoản', - 'left_for_piggy_banks' => 'Còn lại cho heo đất', - 'sum_of_piggy_banks' => 'Tổng số heo đất', - 'saved_so_far' => 'Tiết kiệm cho đến nay', - 'left_to_save' => 'Còn lại để tiết kiệm', - 'suggested_amount' => 'Số tiền đề xuất hàng tháng để tiết kiệm', - 'add_money_to_piggy_title' => 'Thêm tiền vào heo đất ":name"', - 'remove_money_from_piggy_title' => 'Xóa tiền từ heo đất ":name"', - 'add' => 'Thêm vào', - 'no_money_for_piggy' => 'Bạn không có tiền để đặt vào heo đất.', - 'suggested_savings_per_month' => 'Đề xuất mỗi tháng', + 'event_history' => 'Event history', + 'add_money_to_piggy' => 'Thêm tiền vào heo đất ":name"', + 'piggy_bank' => 'Heo đất', + 'new_piggy_bank' => 'Tạo heo đất mới', + 'store_piggy_bank' => 'Lưu trữ heo đất mới', + 'stored_piggy_bank' => 'Lưu trữ heo đất mới ":name"', + 'account_status' => 'Tình trạng tài khoản', + 'left_for_piggy_banks' => 'Còn lại cho heo đất', + 'sum_of_piggy_banks' => 'Tổng số heo đất', + 'saved_so_far' => 'Tiết kiệm cho đến nay', + 'left_to_save' => 'Còn lại để tiết kiệm', + 'suggested_amount' => 'Số tiền đề xuất hàng tháng để tiết kiệm', + 'add_money_to_piggy_title' => 'Thêm tiền vào heo đất ":name"', + 'remove_money_from_piggy_title' => 'Xóa tiền từ heo đất ":name"', + 'add' => 'Thêm vào', + 'no_money_for_piggy' => 'Bạn không có tiền để đặt vào heo đất.', + 'suggested_savings_per_month' => 'Đề xuất mỗi tháng', - 'remove' => 'Xóa', - 'max_amount_add' => 'Số tiền tối đa bạn có thể thêm là', - 'max_amount_remove' => 'Số tiền tối đa bạn có thể loại bỏ là', - 'update_piggy_button' => 'Cập nhật heo đất', - 'update_piggy_title' => 'Cập nhật heo đất ":name"', - 'updated_piggy_bank' => 'Đã cập nhật heo đất ":name"', - 'details' => 'Chi tiết', - 'events' => 'Sự kiện', - 'target_amount' => 'Số lượng mục tiêu', - 'start_date' => 'Ngày bắt đầu', - 'no_start_date' => 'Không có ngày bắt đầu', - 'target_date' => 'Ngày mục tiêu', - 'no_target_date' => 'Không có ngày mục tiêu', - 'table' => 'Bàn', - 'delete_piggy_bank' => 'Xóa heo đất ":name"', - 'cannot_add_amount_piggy' => 'Không thể thêm: số tiền vào ":name".', - 'cannot_remove_from_piggy' => 'Không thể xóa :amount từ ":name".', - 'deleted_piggy_bank' => 'Xóa heo đất ":name"', - 'added_amount_to_piggy' => 'Đã thêm :amount vào ":name"', - 'removed_amount_from_piggy' => 'Đã xóa :amount từ ":name"', - 'piggy_events' => 'Liên quan heo đất ', + 'remove' => 'Xóa', + 'max_amount_add' => 'Số tiền tối đa bạn có thể thêm là', + 'max_amount_remove' => 'Số tiền tối đa bạn có thể loại bỏ là', + 'update_piggy_button' => 'Cập nhật heo đất', + 'update_piggy_title' => 'Cập nhật heo đất ":name"', + 'updated_piggy_bank' => 'Đã cập nhật heo đất ":name"', + 'details' => 'Chi tiết', + 'events' => 'Sự kiện', + 'target_amount' => 'Số lượng mục tiêu', + 'start_date' => 'Ngày bắt đầu', + 'no_start_date' => 'Không có ngày bắt đầu', + 'target_date' => 'Ngày mục tiêu', + 'no_target_date' => 'Không có ngày mục tiêu', + 'table' => 'Bàn', + 'delete_piggy_bank' => 'Xóa heo đất ":name"', + 'cannot_add_amount_piggy' => 'Không thể thêm: số tiền vào ":name".', + 'cannot_remove_from_piggy' => 'Không thể xóa :amount từ ":name".', + 'deleted_piggy_bank' => 'Xóa heo đất ":name"', + 'added_amount_to_piggy' => 'Đã thêm :amount vào ":name"', + 'removed_amount_from_piggy' => 'Đã xóa :amount từ ":name"', + 'piggy_events' => 'Liên quan heo đất ', // tags - 'delete_tag' => 'Xóa nhãn ":tag"', - 'deleted_tag' => 'Đã xóa nhãn ":tag"', - 'new_tag' => 'Tạo nhãn mới', - 'edit_tag' => 'Chỉnh sửa nhãn ":tag"', - 'updated_tag' => 'Đã cập nhật nhãn ":tag"', - 'created_tag' => 'Nhãn ":tag" đã được tạo!', + 'delete_tag' => 'Xóa nhãn ":tag"', + 'deleted_tag' => 'Đã xóa nhãn ":tag"', + 'new_tag' => 'Tạo nhãn mới', + 'edit_tag' => 'Chỉnh sửa nhãn ":tag"', + 'updated_tag' => 'Đã cập nhật nhãn ":tag"', + 'created_tag' => 'Nhãn ":tag" đã được tạo!', - 'transaction_journal_information' => 'Thông tin giao dịch', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => 'Thông tin tổng hợp', - 'transaction_journal_more' => 'Thêm thông tin', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => 'Được lưu trữ dưới ":journal"', - 'total_amount' => 'Tổng cộng', - 'number_of_decimals' => 'Số thập phân', + 'transaction_journal_information' => 'Thông tin giao dịch', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => 'Thông tin tổng hợp', + 'transaction_journal_more' => 'Thêm thông tin', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => 'Được lưu trữ dưới ":journal"', + 'total_amount' => 'Tổng cộng', + 'number_of_decimals' => 'Số thập phân', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => 'Quản trị', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => 'Quản lý người dùng', - 'list_all_users' => 'Tất cả người dùng', - 'all_users' => 'Tất cả người dùng', - 'instance_configuration' => 'Cấu hình', - 'firefly_instance_configuration' => 'Cấu hình tùy chọn cho Firefly III', - 'setting_single_user_mode' => 'Chế độ người dùng đơn', - 'setting_single_user_mode_explain' => 'Theo mặc định, Firefly III chỉ cho phép một (1) người đăng ký là bạn. Đây là một biện pháp bảo mật, ngăn người khác sử dụng trừ khi bạn cho phép họ sử dụng. Đăng ký bị chặn. Khi bạn bỏ chọn hộp này, những người khác cũng có thể sử dụng.', - 'store_configuration' => 'Lưu trữ cấu hình', - 'single_user_administration' => 'Người dùng quản lý :email', - 'edit_user' => 'Chỉnh sửa người dùng :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => 'Dữ liệu người dùng', - 'user_information' => 'Thông tin người dùng', - 'total_size' => 'tổng kích thước', - 'budget_or_budgets' => ':count ngân sách', - 'budgets_with_limits' => ':count ngân sách với số tiền được định cấu hình', - 'nr_of_rules_in_total_groups' => ':count_rules quy tắc trong :count_groups nhóm quy tắc', - 'tag_or_tags' => ':count nhãn', - 'configuration_updated' => 'Cấu hình đã được cập nhật', - 'setting_is_demo_site' => 'Trang web demo', - 'setting_is_demo_site_explain' => 'Nếu bạn chọn hộp này, cài đặt này sẽ hoạt động như trang demo, có thể có tác dụng phụ kỳ lạ.', - 'block_code_bounced' => 'Email (s) bị trả về', - 'block_code_expired' => 'Tài khoản demo đã hết hạn', - 'no_block_code' => 'Không có lý do chặn hoặc người dùng không bị chặn', - 'block_code_email_changed' => 'Người dùng chưa xác nhận địa chỉ email mới', - 'admin_update_email' => 'Trái với trang hồ sơ, người dùng sẽ KHÔNG được thông báo địa chỉ email của họ đã thay đổi!', - 'update_user' => 'Cập nhật người dùng', - 'updated_user' => 'Dữ liệu người dùng đã được thay đổi.', - 'delete_user' => 'Xóa người dùng :email', - 'user_deleted' => 'Người dùng đã bị xóa', - 'send_test_email' => 'Gửi tin nhắn email kiểm tra', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => 'Gửi tin nhắn', - 'send_test_triggered' => 'Kiểm tra đã được kích hoạt. Kiểm tra hộp thư đến của bạn và các tệp nhật ký.', - 'give_admin_careful' => 'Người dùng được trao quyền quản trị có thể lấy đi của bạn. Hãy cẩn thận.', - 'admin_maintanance_title' => 'Bảo trì', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Xóa bộ nhớ đệm', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => 'Mô tả giao dịch tách', - 'split_transaction_title_help' => 'Nếu bạn tạo một giao dịch phân tách, phải có một mô tả toàn cầu cho tất cả các phân chia của giao dịch.', - 'split_title_help' => 'Nếu bạn tạo một giao dịch phân tách, phải có một mô tả toàn cầu cho tất cả các phân chia của giao dịch.', - 'you_create_transfer' => 'Bạn đang tạo một chuyển khoản.', - 'you_create_withdrawal' => 'Bạn đang tạo một rút tiền.', - 'you_create_deposit' => 'Bạn đang tạo một tiền gửi.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => 'Quản trị', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => 'Quản lý người dùng', + 'list_all_users' => 'Tất cả người dùng', + 'all_users' => 'Tất cả người dùng', + 'instance_configuration' => 'Cấu hình', + 'firefly_instance_configuration' => 'Cấu hình tùy chọn cho Firefly III', + 'setting_single_user_mode' => 'Chế độ người dùng đơn', + 'setting_single_user_mode_explain' => 'Theo mặc định, Firefly III chỉ cho phép một (1) người đăng ký là bạn. Đây là một biện pháp bảo mật, ngăn người khác sử dụng trừ khi bạn cho phép họ sử dụng. Đăng ký bị chặn. Khi bạn bỏ chọn hộp này, những người khác cũng có thể sử dụng.', + 'store_configuration' => 'Lưu trữ cấu hình', + 'single_user_administration' => 'Người dùng quản lý :email', + 'edit_user' => 'Chỉnh sửa người dùng :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => 'Dữ liệu người dùng', + 'user_information' => 'Thông tin người dùng', + 'total_size' => 'tổng kích thước', + 'budget_or_budgets' => ':count ngân sách', + 'budgets_with_limits' => ':count ngân sách với số tiền được định cấu hình', + 'nr_of_rules_in_total_groups' => ':count_rules quy tắc trong :count_groups nhóm quy tắc', + 'tag_or_tags' => ':count nhãn', + 'configuration_updated' => 'Cấu hình đã được cập nhật', + 'setting_is_demo_site' => 'Trang web demo', + 'setting_is_demo_site_explain' => 'Nếu bạn chọn hộp này, cài đặt này sẽ hoạt động như trang demo, có thể có tác dụng phụ kỳ lạ.', + 'block_code_bounced' => 'Email (s) bị trả về', + 'block_code_expired' => 'Tài khoản demo đã hết hạn', + 'no_block_code' => 'Không có lý do chặn hoặc người dùng không bị chặn', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => 'Người dùng chưa xác nhận địa chỉ email mới', + 'admin_update_email' => 'Trái với trang hồ sơ, người dùng sẽ KHÔNG được thông báo địa chỉ email của họ đã thay đổi!', + 'update_user' => 'Cập nhật người dùng', + 'updated_user' => 'Dữ liệu người dùng đã được thay đổi.', + 'delete_user' => 'Xóa người dùng :email', + 'user_deleted' => 'Người dùng đã bị xóa', + 'send_test_email' => 'Gửi tin nhắn email kiểm tra', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => 'Gửi tin nhắn', + 'send_test_triggered' => 'Kiểm tra đã được kích hoạt. Kiểm tra hộp thư đến của bạn và các tệp nhật ký.', + 'give_admin_careful' => 'Người dùng được trao quyền quản trị có thể lấy đi của bạn. Hãy cẩn thận.', + 'admin_maintanance_title' => 'Bảo trì', + 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', + 'admin_maintenance_clear_cache' => 'Xóa bộ nhớ đệm', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => 'Mô tả giao dịch tách', + 'split_transaction_title_help' => 'Nếu bạn tạo một giao dịch phân tách, phải có một mô tả toàn cầu cho tất cả các phân chia của giao dịch.', + 'split_title_help' => 'Nếu bạn tạo một giao dịch phân tách, phải có một mô tả toàn cầu cho tất cả các phân chia của giao dịch.', + 'you_create_transfer' => 'Bạn đang tạo một chuyển khoản.', + 'you_create_withdrawal' => 'Bạn đang tạo một rút tiền.', + 'you_create_deposit' => 'Bạn đang tạo một tiền gửi.', // links - 'journal_link_configuration' => 'Cấu hình liên kết giao dịch', - 'create_new_link_type' => 'Tạo loại liên kết mới', - 'store_new_link_type' => 'Lưu trữ loại liên kết mới', - 'update_link_type' => 'Cập nhật loại liên kết', - 'edit_link_type' => 'Chỉnh sửa loại liên kết ":name"', - 'updated_link_type' => 'Cập nhật loại liên kết ":name"', - 'delete_link_type' => 'Xóa loại liên kết ":name"', - 'deleted_link_type' => 'Đã xóa loại liên kết ":name"', - 'stored_new_link_type' => 'Lưu trữ loại liên kết mới ":name"', - 'cannot_edit_link_type' => 'Không thể chỉnh sửa loại liên kết ":name"', - 'link_type_help_name' => 'Ie. "Bản sao"', - 'link_type_help_inward' => 'Ie. "bản sao"', - 'link_type_help_outward' => 'Ie. "được nhân đôi bởi"', - 'save_connections_by_moving' => 'Lưu liên kết giữa các giao dịch này bằng cách di chuyển chúng sang loại liên kết khác:', - 'do_not_save_connection' => '(không lưu kết nối)', - 'link_transaction' => 'Liên kết giao dịch', - 'link_to_other_transaction' => 'Liên kết giao dịch này với giao dịch khác', - 'select_transaction_to_link' => 'Chọn một giao dịch để liên kết giao dịch này với. Các liên kết hiện không được sử dụng trong Firefly III (ngoài việc được hiển thị), nhưng tôi dự định sẽ thay đổi điều này trong tương lai. Sử dụng hộp tìm kiếm để chọn giao dịch theo tiêu đề hoặc theo ID. Nếu bạn muốn thêm các loại liên kết tùy chỉnh, hãy xem phần quản trị.', - 'this_transaction' => 'Giao dịch này', - 'transaction' => 'Giao dịch', - 'comments' => 'Bình luận', - 'link_notes' => 'Bất kỳ ghi chú bạn muốn lưu trữ với các liên kết.', - 'invalid_link_selection' => 'Không thể liên kết các giao dịch này', - 'selected_transaction' => 'Giao dịch được chọn', - 'journals_linked' => 'Giao dịch được liên kết.', - 'journals_error_linked' => 'Các giao dịch này đã được liên kết.', - 'journals_link_to_self' => 'Bạn không thể liên kết một giao dịch với chính nó', - 'journal_links' => 'Liên kết giao dịch', - 'this_withdrawal' => 'Rút tiền này', - 'this_deposit' => 'Khoản tiền gửi này', - 'this_transfer' => 'Chuyển khoản này', - 'overview_for_link' => 'Tổng quan về loại liên kết ":name"', - 'source_transaction' => 'Giao dịch nguồn', - 'link_description' => 'Mô tả liên kết', - 'destination_transaction' => 'Giao dịch đích', - 'delete_journal_link' => 'Xóa liên kết giữa :source:destination', - 'deleted_link' => 'Xóa liên kết', + 'journal_link_configuration' => 'Cấu hình liên kết giao dịch', + 'create_new_link_type' => 'Tạo loại liên kết mới', + 'store_new_link_type' => 'Lưu trữ loại liên kết mới', + 'update_link_type' => 'Cập nhật loại liên kết', + 'edit_link_type' => 'Chỉnh sửa loại liên kết ":name"', + 'updated_link_type' => 'Cập nhật loại liên kết ":name"', + 'delete_link_type' => 'Xóa loại liên kết ":name"', + 'deleted_link_type' => 'Đã xóa loại liên kết ":name"', + 'stored_new_link_type' => 'Lưu trữ loại liên kết mới ":name"', + 'cannot_edit_link_type' => 'Không thể chỉnh sửa loại liên kết ":name"', + 'link_type_help_name' => 'Ie. "Bản sao"', + 'link_type_help_inward' => 'Ie. "bản sao"', + 'link_type_help_outward' => 'Ie. "được nhân đôi bởi"', + 'save_connections_by_moving' => 'Lưu liên kết giữa các giao dịch này bằng cách di chuyển chúng sang loại liên kết khác:', + 'do_not_save_connection' => '(không lưu kết nối)', + 'link_transaction' => 'Liên kết giao dịch', + 'link_to_other_transaction' => 'Liên kết giao dịch này với giao dịch khác', + 'select_transaction_to_link' => 'Chọn một giao dịch để liên kết giao dịch này với. Các liên kết hiện không được sử dụng trong Firefly III (ngoài việc được hiển thị), nhưng tôi dự định sẽ thay đổi điều này trong tương lai. Sử dụng hộp tìm kiếm để chọn giao dịch theo tiêu đề hoặc theo ID. Nếu bạn muốn thêm các loại liên kết tùy chỉnh, hãy xem phần quản trị.', + 'this_transaction' => 'Giao dịch này', + 'transaction' => 'Giao dịch', + 'comments' => 'Bình luận', + 'link_notes' => 'Bất kỳ ghi chú bạn muốn lưu trữ với các liên kết.', + 'invalid_link_selection' => 'Không thể liên kết các giao dịch này', + 'selected_transaction' => 'Giao dịch được chọn', + 'journals_linked' => 'Giao dịch được liên kết.', + 'journals_error_linked' => 'Các giao dịch này đã được liên kết.', + 'journals_link_to_self' => 'Bạn không thể liên kết một giao dịch với chính nó', + 'journal_links' => 'Liên kết giao dịch', + 'this_withdrawal' => 'Rút tiền này', + 'this_deposit' => 'Khoản tiền gửi này', + 'this_transfer' => 'Chuyển khoản này', + 'overview_for_link' => 'Tổng quan về loại liên kết ":name"', + 'source_transaction' => 'Giao dịch nguồn', + 'link_description' => 'Mô tả liên kết', + 'destination_transaction' => 'Giao dịch đích', + 'delete_journal_link' => 'Xóa liên kết giữa :source:destination', + 'deleted_link' => 'Xóa liên kết', // link translations: - 'Paid_name' => 'Đã thanh toán', - 'Refund_name' => 'Hoàn tiền', - 'Reimbursement_name' => 'Hoàn trả', - 'Related_name' => 'Liên quan', - 'relates to_inward' => 'liên quan tới', - 'is (partially) refunded by_inward' => 'được (một phần) hoàn lại tiền bởi', - 'is (partially) paid for by_inward' => 'được (một phần) thanh toán cho', - 'is (partially) reimbursed by_inward' => 'được (một phần) hoàn trả bởi', - 'inward_transaction' => 'Giao dịch trong', - 'outward_transaction' => 'Giao dịch bên ngoài', - 'relates to_outward' => 'liên quan tới', - '(partially) refunds_outward' => '(một phần) hoàn tiền', - '(partially) pays for_outward' => '(một phần) trả tiền cho', - '(partially) reimburses_outward' => '(một phần) hoàn trả', - 'is (partially) refunded by' => 'được hoàn tiền bởi', - 'is (partially) paid for by' => 'được thanh toán cho', - 'is (partially) reimbursed by' => 'được hoàn trả bởi', - 'relates to' => 'liên quan tới', - '(partially) refunds' => 'hoàn tiền *một phần(', - '(partially) pays for' => 'thanh toán cho *một phần(', - '(partially) reimburses' => 'hoàn trả *một phần)', + 'Paid_name' => 'Đã thanh toán', + 'Refund_name' => 'Hoàn tiền', + 'Reimbursement_name' => 'Hoàn trả', + 'Related_name' => 'Liên quan', + 'relates to_inward' => 'liên quan tới', + 'is (partially) refunded by_inward' => 'được (một phần) hoàn lại tiền bởi', + 'is (partially) paid for by_inward' => 'được (một phần) thanh toán cho', + 'is (partially) reimbursed by_inward' => 'được (một phần) hoàn trả bởi', + 'inward_transaction' => 'Giao dịch trong', + 'outward_transaction' => 'Giao dịch bên ngoài', + 'relates to_outward' => 'liên quan tới', + '(partially) refunds_outward' => '(một phần) hoàn tiền', + '(partially) pays for_outward' => '(một phần) trả tiền cho', + '(partially) reimburses_outward' => '(một phần) hoàn trả', + 'is (partially) refunded by' => 'được hoàn tiền bởi', + 'is (partially) paid for by' => 'được thanh toán cho', + 'is (partially) reimbursed by' => 'được hoàn trả bởi', + 'relates to' => 'liên quan tới', + '(partially) refunds' => 'hoàn tiền *một phần(', + '(partially) pays for' => 'thanh toán cho *một phần(', + '(partially) reimburses' => 'hoàn trả *một phần)', // split a transaction: - 'splits' => 'Tách', - 'add_another_split' => 'Thêm một phân chia khác', - 'cannot_edit_opening_balance' => 'Bạn không thể chỉnh sửa số dư mở của tài khoản.', - 'no_edit_multiple_left' => 'Bạn đã chọn không có giao dịch hợp lệ để chỉnh sửa.', - 'breadcrumb_convert_group' => 'Chuyển đổi giao dịch', - 'convert_invalid_source' => 'Thông tin nguồn không hợp lệ cho giao dịch #%d.', - 'convert_invalid_destination' => 'Thông tin đích không hợp lệ cho giao dịch #%d.', - 'create_another' => 'Sau khi lưu trữ, quay trở lại đây để tạo một cái khác.', - 'after_update_create_another' => 'Sau khi cập nhật, quay lại đây để tiếp tục chỉnh sửa.', - 'store_as_new' => 'Lưu trữ như một giao dịch mới thay vì cập nhật.', - 'reset_after' => 'Đặt lại mẫu sau khi gửi', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => 'Tách', + 'add_another_split' => 'Thêm một phân chia khác', + 'cannot_edit_opening_balance' => 'Bạn không thể chỉnh sửa số dư mở của tài khoản.', + 'no_edit_multiple_left' => 'Bạn đã chọn không có giao dịch hợp lệ để chỉnh sửa.', + 'breadcrumb_convert_group' => 'Chuyển đổi giao dịch', + 'convert_invalid_source' => 'Thông tin nguồn không hợp lệ cho giao dịch #%d.', + 'convert_invalid_destination' => 'Thông tin đích không hợp lệ cho giao dịch #%d.', + 'create_another' => 'Sau khi lưu trữ, quay trở lại đây để tạo một cái khác.', + 'after_update_create_another' => 'Sau khi cập nhật, quay lại đây để tiếp tục chỉnh sửa.', + 'store_as_new' => 'Lưu trữ như một giao dịch mới thay vì cập nhật.', + 'reset_after' => 'Đặt lại mẫu sau khi gửi', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(chưa nhóm)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(chưa nhóm)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => 'Hãy tạo một tài khoản!', - 'no_accounts_intro_asset' => 'Bạn chưa có tài khoản tài khoản là tài khoản chính của bạn: tài khoản kiểm tra, tài khoản tiết kiệm, tài khoản dùng chung hoặc thậm chí thẻ tín dụng của bạn.', - 'no_accounts_imperative_asset' => 'Để bắt đầu sử dụng Firefly III, bạn phải tạo ít nhất một tài khoản. Hãy làm như vậy ngay bây giờ:', - 'no_accounts_create_asset' => 'Tạo một tài khoản', - 'no_accounts_title_expense' => 'Hãy tạo một tài khoản chi phí!', - 'no_accounts_intro_expense' => 'Bạn chưa có tài khoản chi phí. Tài khoản chi tiêu là nơi bạn tiêu tiền, chẳng hạn như cửa hàng và siêu thị.', - 'no_accounts_imperative_expense' => 'Tài khoản chi phí được tạo tự động khi bạn tạo giao dịch, nhưng bạn cũng có thể tạo một tài khoản theo cách thủ công, nếu bạn muốn. Hãy tạo ngay bây giờ:', - 'no_accounts_create_expense' => 'Tạo một tài khoản chi phí', - 'no_accounts_title_revenue' => 'Hãy tạo một tài khoản doanh thu!', - 'no_accounts_intro_revenue' => 'Bạn chưa có tài khoản doanh thu. Tài khoản doanh thu là nơi bạn nhận được tiền, chẳng hạn như chủ nhân của bạn.', - 'no_accounts_imperative_revenue' => 'Tài khoản doanh thu được tạo tự động khi bạn tạo giao dịch, nhưng bạn cũng có thể tạo một giao dịch theo cách thủ công, nếu bạn muốn. Hãy tạo ngay bây giờ:', - 'no_accounts_create_revenue' => 'Tạo một tài khoản doanh thu', - 'no_accounts_title_liabilities' => 'Hãy tạo một tài khoản nợ!', - 'no_accounts_intro_liabilities' => 'Bạn chưa có tài khoản nợ. Nợ phải trả là các tài khoản đăng ký khoản vay (sinh viên) của bạn và các khoản nợ khác.', - 'no_accounts_imperative_liabilities' => 'Bạn không phải sử dụng tính năng này, nhưng nó có thể hữu ích nếu bạn muốn theo dõi những điều này.', - 'no_accounts_create_liabilities' => 'Tạo một tài khoản nợ', - 'no_budgets_title_default' => 'Hãy tạo một ngân sách', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'Bạn chưa có ngân sách. Ngân sách được sử dụng để sắp xếp chi tiêu của bạn thành các nhóm hợp lý, bạn có thể cung cấp giới hạn mềm để giới hạn chi phí của mình.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => 'Ngân sách là công cụ cơ bản của quản lý tài chính. Hãy tạo ngay bây giờ:', - 'no_budgets_create_default' => 'Tạo ngân sách', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => 'Hãy tạo một danh mục!', - 'no_categories_intro_default' => 'Bạn chưa có danh mục nào. Danh mục được sử dụng để tinh chỉnh các giao dịch của bạn và gắn nhãn chúng với danh mục được chỉ định của chúng.', - 'no_categories_imperative_default' => 'Danh mục được tạo tự động khi bạn tạo giao dịch, nhưng bạn cũng có thể tạo một giao dịch theo cách thủ công. Hãy tạo ngay bây giờ:', - 'no_categories_create_default' => 'Tạo một danh mục', - 'no_tags_title_default' => 'Hãy tạo một nhãn!', - 'no_tags_intro_default' => 'Bạn chưa có nhãn nào. Các nhãn được sử dụng để tinh chỉnh các giao dịch của bạn và gắn nhãn chúng với các từ khóa cụ thể.', - 'no_tags_imperative_default' => 'Nhãn được tạo tự động khi bạn tạo giao dịch, nhưng bạn cũng có thể tạo một nhãn theo cách thủ công. Hãy tạo ngay bây giờ:', - 'no_tags_create_default' => 'Tạo một nhãn', - 'no_transactions_title_withdrawal' => 'Hãy tạo ra một chi phí!', - 'no_transactions_intro_withdrawal' => 'Bạn chưa có chi phí nào. Bạn nên tạo chi phí để bắt đầu quản lý tài chính của mình.', - 'no_transactions_imperative_withdrawal' => 'Bạn đã tiêu một số tiền? Sau đó, bạn nên thêm nó vào:', - 'no_transactions_create_withdrawal' => 'Tạo một chi phí', - 'no_transactions_title_deposit' => 'Hãy tạo thu nhập!', - 'no_transactions_intro_deposit' => 'Bạn chưa có thu nhập được ghi nhận. Bạn nên tạo các mục thu nhập để bắt đầu quản lý tài chính của mình để tạo một số thu nhập.', - 'no_transactions_imperative_deposit' => 'Bạn đã nhận được một số tiền? Sau đó, bạn nên thêm nó vào:', - 'no_transactions_create_deposit' => 'Tạo một khoản tiền gửi', - 'no_transactions_title_transfers' => 'Hãy tạo một chuyển khoản!', - 'no_transactions_intro_transfers' => 'Bạn chưa có chuyển khoản nào. Khi bạn chuyển tiền giữa các tài khoản, nó được ghi lại dưới dạng chuyển khoản.', - 'no_transactions_imperative_transfers' => 'Bạn đã chuyển một số tiền xung quanh? Sau đó, bạn nên thêm nó vào:', - 'no_transactions_create_transfers' => 'Tạo chuyển khoản', - 'no_piggies_title_default' => 'Hãy tạo ra một con heo đất!', - 'no_piggies_intro_default' => 'Bạn chưa có con heo đất nào. Bạn có thể tạo con heo đất để chia tiền tiết kiệm của mình và theo dõi những gì bạn đang tiết kiệm.', - 'no_piggies_imperative_default' => 'Bạn có những thứ bạn đang tiết kiệm tiền không? Tạo một con heo đất và theo dõi:', - 'no_piggies_create_default' => 'Tạo một con heo đất mới', - 'no_bills_title_default' => 'Hãy tạo một hóa đơn!', - 'no_bills_intro_default' => 'Bạn chưa có hóa đơn. Bạn có thể tạo các hóa đơn để theo dõi các chi phí thường xuyên, như tiền thuê nhà hoặc bảo hiểm của bạn.', - 'no_bills_imperative_default' => 'Bạn thường có hóa đơn như vậy? Tạo hóa đơn và theo dõi các khoản thanh toán của bạn:', - 'no_bills_create_default' => 'Tạo hóa đơn', + 'no_accounts_title_asset' => 'Hãy tạo một tài khoản!', + 'no_accounts_intro_asset' => 'Bạn chưa có tài khoản tài khoản là tài khoản chính của bạn: tài khoản kiểm tra, tài khoản tiết kiệm, tài khoản dùng chung hoặc thậm chí thẻ tín dụng của bạn.', + 'no_accounts_imperative_asset' => 'Để bắt đầu sử dụng Firefly III, bạn phải tạo ít nhất một tài khoản. Hãy làm như vậy ngay bây giờ:', + 'no_accounts_create_asset' => 'Tạo một tài khoản', + 'no_accounts_title_expense' => 'Hãy tạo một tài khoản chi phí!', + 'no_accounts_intro_expense' => 'Bạn chưa có tài khoản chi phí. Tài khoản chi tiêu là nơi bạn tiêu tiền, chẳng hạn như cửa hàng và siêu thị.', + 'no_accounts_imperative_expense' => 'Tài khoản chi phí được tạo tự động khi bạn tạo giao dịch, nhưng bạn cũng có thể tạo một tài khoản theo cách thủ công, nếu bạn muốn. Hãy tạo ngay bây giờ:', + 'no_accounts_create_expense' => 'Tạo một tài khoản chi phí', + 'no_accounts_title_revenue' => 'Hãy tạo một tài khoản doanh thu!', + 'no_accounts_intro_revenue' => 'Bạn chưa có tài khoản doanh thu. Tài khoản doanh thu là nơi bạn nhận được tiền, chẳng hạn như chủ nhân của bạn.', + 'no_accounts_imperative_revenue' => 'Tài khoản doanh thu được tạo tự động khi bạn tạo giao dịch, nhưng bạn cũng có thể tạo một giao dịch theo cách thủ công, nếu bạn muốn. Hãy tạo ngay bây giờ:', + 'no_accounts_create_revenue' => 'Tạo một tài khoản doanh thu', + 'no_accounts_title_liabilities' => 'Hãy tạo một tài khoản nợ!', + 'no_accounts_intro_liabilities' => 'Bạn chưa có tài khoản nợ. Nợ phải trả là các tài khoản đăng ký khoản vay (sinh viên) của bạn và các khoản nợ khác.', + 'no_accounts_imperative_liabilities' => 'Bạn không phải sử dụng tính năng này, nhưng nó có thể hữu ích nếu bạn muốn theo dõi những điều này.', + 'no_accounts_create_liabilities' => 'Tạo một tài khoản nợ', + 'no_budgets_title_default' => 'Hãy tạo một ngân sách', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'Bạn chưa có ngân sách. Ngân sách được sử dụng để sắp xếp chi tiêu của bạn thành các nhóm hợp lý, bạn có thể cung cấp giới hạn mềm để giới hạn chi phí của mình.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => 'Ngân sách là công cụ cơ bản của quản lý tài chính. Hãy tạo ngay bây giờ:', + 'no_budgets_create_default' => 'Tạo ngân sách', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => 'Hãy tạo một danh mục!', + 'no_categories_intro_default' => 'Bạn chưa có danh mục nào. Danh mục được sử dụng để tinh chỉnh các giao dịch của bạn và gắn nhãn chúng với danh mục được chỉ định của chúng.', + 'no_categories_imperative_default' => 'Danh mục được tạo tự động khi bạn tạo giao dịch, nhưng bạn cũng có thể tạo một giao dịch theo cách thủ công. Hãy tạo ngay bây giờ:', + 'no_categories_create_default' => 'Tạo một danh mục', + 'no_tags_title_default' => 'Hãy tạo một nhãn!', + 'no_tags_intro_default' => 'Bạn chưa có nhãn nào. Các nhãn được sử dụng để tinh chỉnh các giao dịch của bạn và gắn nhãn chúng với các từ khóa cụ thể.', + 'no_tags_imperative_default' => 'Nhãn được tạo tự động khi bạn tạo giao dịch, nhưng bạn cũng có thể tạo một nhãn theo cách thủ công. Hãy tạo ngay bây giờ:', + 'no_tags_create_default' => 'Tạo một nhãn', + 'no_transactions_title_withdrawal' => 'Hãy tạo ra một chi phí!', + 'no_transactions_intro_withdrawal' => 'Bạn chưa có chi phí nào. Bạn nên tạo chi phí để bắt đầu quản lý tài chính của mình.', + 'no_transactions_imperative_withdrawal' => 'Bạn đã tiêu một số tiền? Sau đó, bạn nên thêm nó vào:', + 'no_transactions_create_withdrawal' => 'Tạo một chi phí', + 'no_transactions_title_deposit' => 'Hãy tạo thu nhập!', + 'no_transactions_intro_deposit' => 'Bạn chưa có thu nhập được ghi nhận. Bạn nên tạo các mục thu nhập để bắt đầu quản lý tài chính của mình để tạo một số thu nhập.', + 'no_transactions_imperative_deposit' => 'Bạn đã nhận được một số tiền? Sau đó, bạn nên thêm nó vào:', + 'no_transactions_create_deposit' => 'Tạo một khoản tiền gửi', + 'no_transactions_title_transfers' => 'Hãy tạo một chuyển khoản!', + 'no_transactions_intro_transfers' => 'Bạn chưa có chuyển khoản nào. Khi bạn chuyển tiền giữa các tài khoản, nó được ghi lại dưới dạng chuyển khoản.', + 'no_transactions_imperative_transfers' => 'Bạn đã chuyển một số tiền xung quanh? Sau đó, bạn nên thêm nó vào:', + 'no_transactions_create_transfers' => 'Tạo chuyển khoản', + 'no_piggies_title_default' => 'Hãy tạo ra một con heo đất!', + 'no_piggies_intro_default' => 'Bạn chưa có con heo đất nào. Bạn có thể tạo con heo đất để chia tiền tiết kiệm của mình và theo dõi những gì bạn đang tiết kiệm.', + 'no_piggies_imperative_default' => 'Bạn có những thứ bạn đang tiết kiệm tiền không? Tạo một con heo đất và theo dõi:', + 'no_piggies_create_default' => 'Tạo một con heo đất mới', + 'no_bills_title_default' => 'Hãy tạo một hóa đơn!', + 'no_bills_intro_default' => 'Bạn chưa có hóa đơn. Bạn có thể tạo các hóa đơn để theo dõi các chi phí thường xuyên, như tiền thuê nhà hoặc bảo hiểm của bạn.', + 'no_bills_imperative_default' => 'Bạn thường có hóa đơn như vậy? Tạo hóa đơn và theo dõi các khoản thanh toán của bạn:', + 'no_bills_create_default' => 'Tạo hóa đơn', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => 'Giao dịch định kỳ', - 'repeat_until_in_past' => 'Giao dịch định kỳ này đã dừng lặp lại vào :date.', - 'recurring_calendar_view' => 'Lịch', - 'no_recurring_title_default' => 'Hãy tạo một giao dịch định kỳ!', - 'no_recurring_intro_default' => 'Bạn chưa có giao dịch định kỳ. Bạn có thể sử dụng những thứ này để Firefly III tự động tạo giao dịch cho bạn.', - 'no_recurring_imperative_default' => 'Đây là một tính năng khá tiên tiến nhưng nó có thể cực kỳ hữu ích. Hãy chắc chắn rằng bạn đã đọc tài liệu (?) - biểu tượng ở góc trên bên phải) trước khi bạn tiếp tục.', - 'no_recurring_create_default' => 'Tạo giao dịch định kỳ', - 'make_new_recurring' => 'Tạo giao dịch định kỳ', - 'recurring_daily' => 'Hằng ngày', - 'recurring_weekly' => 'Mỗi tuần vào: ngày trong tuần', - 'recurring_weekly_skip' => 'Mỗi ngày: bỏ qua (st / nd / nd / th) tuần vào: ngày trong tuần', - 'recurring_monthly' => 'Hàng tháng vào ngày: dayOfMonth (st / nd / rd / th) ngày', - 'recurring_monthly_skip' => 'Mỗi: bỏ qua (st / nd / nd / th) tháng vào: dayOfMonth (st / nd / rd / th) ngày', - 'recurring_ndom' => 'Hàng tháng vào: dayOfMonth (st / nd / rd / th): ngày trong tuần', - 'recurring_yearly' => 'Hàng năm vào: ngày', - 'overview_for_recurrence' => 'Tổng quan về giao dịch định kỳ ":title"', - 'warning_duplicates_repetitions' => 'Trong các trường hợp hiếm hoi, ngày xuất hiện hai lần trong danh sách này. Điều này có thể xảy ra khi nhiều lần lặp lại va chạm. Firefly III sẽ luôn tạo một giao dịch mỗi ngày.', - 'created_transactions' => 'Giao dịch liên quan', - 'expected_withdrawals' => 'Rút tiền dự kiến', - 'expected_deposits' => 'Tiền gửi dự kiến', - 'expected_transfers' => 'Chuyển khoản dự kiến', - 'created_withdrawals' => 'Tạo rút tiền', - 'created_deposits' => 'Tạo tiền gửi', - 'created_transfers' => 'Tạo chuyển khoản', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => 'Được tạo từ giao dịch định kỳ ":title" (#:id)', - 'recurring_never_cron' => 'Có vẻ như công việc định kỳ cần thiết để hỗ trợ các giao dịch định kỳ chưa bao giờ chạy. Điều này là tất nhiên bình thường khi bạn vừa cài đặt Firefly III, nhưng đây sẽ là thứ cần thiết lập càng sớm càng tốt. Vui lòng kiểm tra các trang trợ giúp bằng biểu tượng (?) - ở góc trên cùng bên phải của trang.', - 'recurring_cron_long_ago' => 'Có vẻ như đã hơn 36 giờ kể từ khi công việc định kỳ hỗ trợ các giao dịch định kỳ được thực hiện lần cuối. Bạn có chắc chắn rằng nó đã được thiết lập chính xác? Vui lòng kiểm tra các trang trợ giúp bằng biểu tượng (?) - ở góc trên cùng bên phải của trang.', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => 'Giao dịch định kỳ', + 'repeat_until_in_past' => 'Giao dịch định kỳ này đã dừng lặp lại vào :date.', + 'recurring_calendar_view' => 'Lịch', + 'no_recurring_title_default' => 'Hãy tạo một giao dịch định kỳ!', + 'no_recurring_intro_default' => 'Bạn chưa có giao dịch định kỳ. Bạn có thể sử dụng những thứ này để Firefly III tự động tạo giao dịch cho bạn.', + 'no_recurring_imperative_default' => 'Đây là một tính năng khá tiên tiến nhưng nó có thể cực kỳ hữu ích. Hãy chắc chắn rằng bạn đã đọc tài liệu (?) - biểu tượng ở góc trên bên phải) trước khi bạn tiếp tục.', + 'no_recurring_create_default' => 'Tạo giao dịch định kỳ', + 'make_new_recurring' => 'Tạo giao dịch định kỳ', + 'recurring_daily' => 'Hằng ngày', + 'recurring_weekly' => 'Mỗi tuần vào: ngày trong tuần', + 'recurring_weekly_skip' => 'Mỗi ngày: bỏ qua (st / nd / nd / th) tuần vào: ngày trong tuần', + 'recurring_monthly' => 'Hàng tháng vào ngày: dayOfMonth (st / nd / rd / th) ngày', + 'recurring_monthly_skip' => 'Mỗi: bỏ qua (st / nd / nd / th) tháng vào: dayOfMonth (st / nd / rd / th) ngày', + 'recurring_ndom' => 'Hàng tháng vào: dayOfMonth (st / nd / rd / th): ngày trong tuần', + 'recurring_yearly' => 'Hàng năm vào: ngày', + 'overview_for_recurrence' => 'Tổng quan về giao dịch định kỳ ":title"', + 'warning_duplicates_repetitions' => 'Trong các trường hợp hiếm hoi, ngày xuất hiện hai lần trong danh sách này. Điều này có thể xảy ra khi nhiều lần lặp lại va chạm. Firefly III sẽ luôn tạo một giao dịch mỗi ngày.', + 'created_transactions' => 'Giao dịch liên quan', + 'expected_withdrawals' => 'Rút tiền dự kiến', + 'expected_deposits' => 'Tiền gửi dự kiến', + 'expected_transfers' => 'Chuyển khoản dự kiến', + 'created_withdrawals' => 'Tạo rút tiền', + 'created_deposits' => 'Tạo tiền gửi', + 'created_transfers' => 'Tạo chuyển khoản', + 'recurring_info' => 'Recurring transaction :count / :total', + 'created_from_recurrence' => 'Được tạo từ giao dịch định kỳ ":title" (#:id)', + 'recurring_never_cron' => 'Có vẻ như công việc định kỳ cần thiết để hỗ trợ các giao dịch định kỳ chưa bao giờ chạy. Điều này là tất nhiên bình thường khi bạn vừa cài đặt Firefly III, nhưng đây sẽ là thứ cần thiết lập càng sớm càng tốt. Vui lòng kiểm tra các trang trợ giúp bằng biểu tượng (?) - ở góc trên cùng bên phải của trang.', + 'recurring_cron_long_ago' => 'Có vẻ như đã hơn 36 giờ kể từ khi công việc định kỳ hỗ trợ các giao dịch định kỳ được thực hiện lần cuối. Bạn có chắc chắn rằng nó đã được thiết lập chính xác? Vui lòng kiểm tra các trang trợ giúp bằng biểu tượng (?) - ở góc trên cùng bên phải của trang.', - 'create_new_recurrence' => 'Tạo giao dịch định kỳ mới', - 'help_first_date' => 'Cho biết sự tái phát dự kiến đầu tiên. Điều này phải trong tương lai.', - 'help_first_date_no_past' => 'Cho biết sự tái phát dự kiến đầu tiên. Firefly III sẽ không tạo giao dịch trong quá khứ.', - 'no_currency' => '(không có tiền tệ)', - 'mandatory_for_recurring' => 'Thông tin tái phát bắt buộc', - 'mandatory_for_transaction' => 'Thông tin giao dịch bắt buộc', - 'optional_for_recurring' => 'Thông tin tái phát tùy chọn', - 'optional_for_transaction' => 'Thông tin giao dịch tùy chọn', - 'change_date_other_options' => 'Thay đổi "ngày đầu tiên" để xem thêm tùy chọn.', - 'mandatory_fields_for_tranaction' => 'Các giá trị ở đây sẽ kết thúc trong (các) giao dịch được tạo', - 'click_for_calendar' => 'Bấm vào đây để xem lịch cho bạn biết khi nào giao dịch sẽ lặp lại.', - 'repeat_forever' => 'Lặp lại mãi mãi', - 'repeat_until_date' => 'Lặp lại cho đến ngày', - 'repeat_times' => 'Lặp lại một số lần', - 'recurring_skips_one' => 'Mỗi cái khác', - 'recurring_skips_more' => 'Bỏ qua: số lần xuất hiện', - 'store_new_recurrence' => 'Lưu trữ giao dịch định kỳ', - 'stored_new_recurrence' => 'Giao dịch định kỳ ": title" được lưu trữ thành công.', - 'edit_recurrence' => 'Chỉnh sửa giao dịch định kỳ ":title"', - 'recurring_repeats_until' => 'Lặp lại cho đến: ngày', - 'recurring_repeats_forever' => 'Lặp lại mãi mãi', - 'recurring_repeats_x_times' => 'Lặp lại: :count lần', - 'update_recurrence' => 'Cập nhật giao dịch định kỳ', - 'updated_recurrence' => 'Cập nhật giao dịch định kỳ ":title"', - 'recurrence_is_inactive' => 'Giao dịch định kỳ này không hoạt động và sẽ không tạo giao dịch mới.', - 'delete_recurring' => 'Xóa giao dịch định kỳ ":title"', - 'new_recurring_transaction' => 'Giao dịch định kỳ mới', - 'help_weekend' => 'Firefly III nên làm gì khi giao dịch định kỳ rơi vào Thứ Bảy hoặc Chủ Nhật?', - 'do_nothing' => 'Chỉ cần tạo giao dịch', - 'skip_transaction' => 'Bỏ qua sự xuất hiện', - 'jump_to_friday' => 'Tạo giao dịch vào thứ Sáu trước đó thay thế', - 'jump_to_monday' => 'Tạo giao dịch vào thứ Hai tuần sau', - 'will_jump_friday' => 'Sẽ được tạo vào thứ Sáu thay vì cuối tuần.', - 'will_jump_monday' => 'Sẽ được tạo vào thứ Hai thay vì cuối tuần.', - 'except_weekends' => 'Trừ những ngày cuối tuần', - 'recurrence_deleted' => 'Đã xóa giao dịch định kỳ ":title"', + 'create_new_recurrence' => 'Tạo giao dịch định kỳ mới', + 'help_first_date' => 'Cho biết sự tái phát dự kiến đầu tiên. Điều này phải trong tương lai.', + 'help_first_date_no_past' => 'Cho biết sự tái phát dự kiến đầu tiên. Firefly III sẽ không tạo giao dịch trong quá khứ.', + 'no_currency' => '(không có tiền tệ)', + 'mandatory_for_recurring' => 'Thông tin tái phát bắt buộc', + 'mandatory_for_transaction' => 'Thông tin giao dịch bắt buộc', + 'optional_for_recurring' => 'Thông tin tái phát tùy chọn', + 'optional_for_transaction' => 'Thông tin giao dịch tùy chọn', + 'change_date_other_options' => 'Thay đổi "ngày đầu tiên" để xem thêm tùy chọn.', + 'mandatory_fields_for_tranaction' => 'Các giá trị ở đây sẽ kết thúc trong (các) giao dịch được tạo', + 'click_for_calendar' => 'Bấm vào đây để xem lịch cho bạn biết khi nào giao dịch sẽ lặp lại.', + 'repeat_forever' => 'Lặp lại mãi mãi', + 'repeat_until_date' => 'Lặp lại cho đến ngày', + 'repeat_times' => 'Lặp lại một số lần', + 'recurring_skips_one' => 'Mỗi cái khác', + 'recurring_skips_more' => 'Bỏ qua: số lần xuất hiện', + 'store_new_recurrence' => 'Lưu trữ giao dịch định kỳ', + 'stored_new_recurrence' => 'Giao dịch định kỳ ": title" được lưu trữ thành công.', + 'edit_recurrence' => 'Chỉnh sửa giao dịch định kỳ ":title"', + 'recurring_repeats_until' => 'Lặp lại cho đến: ngày', + 'recurring_repeats_forever' => 'Lặp lại mãi mãi', + 'recurring_repeats_x_times' => 'Lặp lại: :count lần', + 'update_recurrence' => 'Cập nhật giao dịch định kỳ', + 'updated_recurrence' => 'Cập nhật giao dịch định kỳ ":title"', + 'recurrence_is_inactive' => 'Giao dịch định kỳ này không hoạt động và sẽ không tạo giao dịch mới.', + 'delete_recurring' => 'Xóa giao dịch định kỳ ":title"', + 'new_recurring_transaction' => 'Giao dịch định kỳ mới', + 'help_weekend' => 'Firefly III nên làm gì khi giao dịch định kỳ rơi vào Thứ Bảy hoặc Chủ Nhật?', + 'do_nothing' => 'Chỉ cần tạo giao dịch', + 'skip_transaction' => 'Bỏ qua sự xuất hiện', + 'jump_to_friday' => 'Tạo giao dịch vào thứ Sáu trước đó thay thế', + 'jump_to_monday' => 'Tạo giao dịch vào thứ Hai tuần sau', + 'will_jump_friday' => 'Sẽ được tạo vào thứ Sáu thay vì cuối tuần.', + 'will_jump_monday' => 'Sẽ được tạo vào thứ Hai thay vì cuối tuần.', + 'except_weekends' => 'Trừ những ngày cuối tuần', + 'recurrence_deleted' => 'Đã xóa giao dịch định kỳ ":title"', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => 'Số dư (: tiền tệ)', - 'box_spent_in_currency' => 'Đã chi (: tiền tệ)', - 'box_earned_in_currency' => 'Kiếm được (: tiền tệ)', - 'box_budgeted_in_currency' => 'Ngân sách (: tiền tệ)', - 'box_bill_paid_in_currency' => 'Hóa đơn thanh toán (: tiền tệ)', - 'box_bill_unpaid_in_currency' => 'Hóa đơn chưa thanh toán (: tiền tệ)', - 'box_left_to_spend_in_currency' => 'Còn lại để chi tiêu (: tiền tệ)', - 'box_net_worth_in_currency' => 'Giá trị ròng (: tiền tệ)', - 'box_spend_per_day' => 'Còn lại để chi tiêu mỗi ngày: :amount', + 'box_balance_in_currency' => 'Số dư (: tiền tệ)', + 'box_spent_in_currency' => 'Đã chi (: tiền tệ)', + 'box_earned_in_currency' => 'Kiếm được (: tiền tệ)', + 'box_budgeted_in_currency' => 'Ngân sách (: tiền tệ)', + 'box_bill_paid_in_currency' => 'Hóa đơn thanh toán (: tiền tệ)', + 'box_bill_unpaid_in_currency' => 'Hóa đơn chưa thanh toán (: tiền tệ)', + 'box_left_to_spend_in_currency' => 'Còn lại để chi tiêu (: tiền tệ)', + 'box_net_worth_in_currency' => 'Giá trị ròng (: tiền tệ)', + 'box_spend_per_day' => 'Còn lại để chi tiêu mỗi ngày: :amount', // debug page - 'debug_page' => 'Trang debug', - 'debug_submit_instructions' => 'Nếu bạn đang gặp vấn đề, bạn có thể sử dụng thông tin trong hộp này làm thông tin gỡ lỗi. Vui lòng sao chép và dán vào một vấn đề GitHub mới hoặc hiện có . Nó sẽ tạo ra một bảng có thể được sử dụng để chẩn đoán nhanh vấn đề của bạn.', - 'debug_pretty_table' => 'Nếu bạn sao chép / dán hộp bên dưới vào GitHub, nó sẽ tạo ra một bảng. Xin vui lòng không bao quanh văn bản này với backticks hoặc dấu ngoặc kép.', - 'debug_additional_data' => 'Bạn cũng có thể chia sẻ nội dung của hộp bên dưới. Bạn cũng có thể sao chép và dán phần này vào một vấn đề GitHub mới hoặc hiện có . Tuy nhiên, nội dung của hộp này có thể chứa thông tin cá nhân như tên tài khoản, chi tiết giao dịch hoặc địa chỉ email.', + 'debug_page' => 'Trang debug', + 'debug_submit_instructions' => 'Nếu bạn đang gặp vấn đề, bạn có thể sử dụng thông tin trong hộp này làm thông tin gỡ lỗi. Vui lòng sao chép và dán vào một vấn đề GitHub mới hoặc hiện có . Nó sẽ tạo ra một bảng có thể được sử dụng để chẩn đoán nhanh vấn đề của bạn.', + 'debug_pretty_table' => 'Nếu bạn sao chép / dán hộp bên dưới vào GitHub, nó sẽ tạo ra một bảng. Xin vui lòng không bao quanh văn bản này với backticks hoặc dấu ngoặc kép.', + 'debug_additional_data' => 'Bạn cũng có thể chia sẻ nội dung của hộp bên dưới. Bạn cũng có thể sao chép và dán phần này vào một vấn đề GitHub mới hoặc hiện có . Tuy nhiên, nội dung của hộp này có thể chứa thông tin cá nhân như tên tài khoản, chi tiết giao dịch hoặc địa chỉ email.', // object groups - 'object_groups_menu_bar' => 'Các Nhóm', - 'object_groups_page_title' => 'Các Nhóm', - 'object_groups_breadcrumb' => 'Các Nhóm', - 'object_groups_index' => 'Tổng quan', - 'object_groups' => 'Các Nhóm', - 'object_groups_empty_explain' => 'Một số điều trong Firefly III có thể được chia thành các nhóm. Ví dụ, các ống heo, có trường "Nhóm" trong chỉnh sửa và tạo. Khi bạn đặt trường này, bạn có thể chỉnh sửa tên và thứ tự của các nhóm trên trang này. Để biết thêm thông tin, hãy xem các trang trợ giúp ở góc trên bên phải, dưới biểu tượng (?) -.', - 'object_group_title' => 'Tiêu đề', - 'edit_object_group' => 'Chỉnh sửa nhóm ":title"', - 'delete_object_group' => 'Delete group ":title"', - 'update_object_group' => 'Cập nhật nhóm', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Nhóm', + 'object_groups_menu_bar' => 'Các Nhóm', + 'object_groups_page_title' => 'Các Nhóm', + 'object_groups_breadcrumb' => 'Các Nhóm', + 'object_groups_index' => 'Tổng quan', + 'object_groups' => 'Các Nhóm', + 'object_groups_empty_explain' => 'Một số điều trong Firefly III có thể được chia thành các nhóm. Ví dụ, các ống heo, có trường "Nhóm" trong chỉnh sửa và tạo. Khi bạn đặt trường này, bạn có thể chỉnh sửa tên và thứ tự của các nhóm trên trang này. Để biết thêm thông tin, hãy xem các trang trợ giúp ở góc trên bên phải, dưới biểu tượng (?) -.', + 'object_group_title' => 'Tiêu đề', + 'edit_object_group' => 'Chỉnh sửa nhóm ":title"', + 'delete_object_group' => 'Delete group ":title"', + 'update_object_group' => 'Cập nhật nhóm', + 'updated_object_group' => 'Successfully updated group ":title"', + 'deleted_object_group' => 'Successfully deleted group ":title"', + 'object_group' => 'Nhóm', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/vi_VN/form.php b/resources/lang/vi_VN/form.php index 40ab63ec0a..005dc9c9cc 100644 --- a/resources/lang/vi_VN/form.php +++ b/resources/lang/vi_VN/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => 'Tên ngân hàng', - 'bank_balance' => 'Số dư', - 'savings_balance' => 'Số dư tiết kiệm', - 'credit_card_limit' => 'Hạn mức thẻ tín dụng', - 'automatch' => 'Tự động khớp', - 'skip' => 'Bỏ qua', - 'enabled' => 'Cho phép', - 'name' => 'Tên', - 'active' => 'Hành động', - 'amount_min' => 'Số tiền tối thiểu', - 'amount_max' => 'Số tiền tối đa', - 'match' => 'Giống', - 'strict' => 'Chế độ nghiêm ngặt', - 'repeat_freq' => 'Lặp lại', - 'object_group' => 'Nhóm', - 'location' => 'Vị trí', - 'update_channel' => 'Cập nhật kênh', - 'currency_id' => 'Tiền tệ', - 'transaction_currency_id' => 'Tiền tệ', - 'auto_budget_currency_id' => 'Tiền tệ', - 'external_ip' => 'IP của máy chủ bạn', - 'attachments' => 'Tài liệu đính kèm', - 'BIC' => 'BIC', - 'verify_password' => 'Xác minh bảo mật mật khẩu', - 'source_account' => 'Tài khoản gửi', - 'destination_account' => 'Tài khoản nhận', - 'asset_destination_account' => 'Tài khoản đích', - 'include_net_worth' => 'Bao gồm trong giá trị ròng', - 'asset_source_account' => 'Tài khoản nguồn', - 'journal_description' => 'Mô tả', - 'note' => 'Ghi chú', - 'currency' => 'Tiền tệ', - 'account_id' => 'tài khoản', - 'budget_id' => 'Ngân sách', - 'bill_id' => 'Hóa đơn', - 'opening_balance' => 'Số dư đầu kỳ', - 'tagMode' => 'Chế độ nhãn', - 'virtual_balance' => 'Cân bằng ảo', + 'bank_name' => 'Tên ngân hàng', + 'bank_balance' => 'Số dư', + 'savings_balance' => 'Số dư tiết kiệm', + 'credit_card_limit' => 'Hạn mức thẻ tín dụng', + 'automatch' => 'Tự động khớp', + 'skip' => 'Bỏ qua', + 'enabled' => 'Cho phép', + 'name' => 'Tên', + 'active' => 'Hành động', + 'amount_min' => 'Số tiền tối thiểu', + 'amount_max' => 'Số tiền tối đa', + 'match' => 'Giống', + 'strict' => 'Chế độ nghiêm ngặt', + 'repeat_freq' => 'Lặp lại', + 'object_group' => 'Nhóm', + 'location' => 'Vị trí', + 'update_channel' => 'Cập nhật kênh', + 'currency_id' => 'Tiền tệ', + 'transaction_currency_id' => 'Tiền tệ', + 'auto_budget_currency_id' => 'Tiền tệ', + 'external_ip' => 'IP của máy chủ bạn', + 'attachments' => 'Tài liệu đính kèm', + 'BIC' => 'BIC', + 'verify_password' => 'Xác minh bảo mật mật khẩu', + 'source_account' => 'Tài khoản gửi', + 'destination_account' => 'Tài khoản nhận', + 'asset_destination_account' => 'Tài khoản đích', + 'include_net_worth' => 'Bao gồm trong giá trị ròng', + 'asset_source_account' => 'Tài khoản nguồn', + 'journal_description' => 'Mô tả', + 'note' => 'Ghi chú', + 'currency' => 'Tiền tệ', + 'account_id' => 'tài khoản', + 'budget_id' => 'Ngân sách', + 'bill_id' => 'Hóa đơn', + 'opening_balance' => 'Số dư đầu kỳ', + 'tagMode' => 'Chế độ nhãn', + 'virtual_balance' => 'Cân bằng ảo', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => 'Số tiền mục tiêu', 'account_role' => 'Vai trò tài khoản', 'opening_balance_date' => 'Ngày mở số dư', @@ -106,7 +104,7 @@ return [ 'api_key' => 'Khóa API', 'remember_me' => 'Nhớ tôi', 'liability_type_id' => 'Loại trách nhiệm pháp lý', - 'liability_type' => 'Liability type', + 'liability_type' => 'Loại khoảng vay', 'interest' => 'Lãi', 'interest_period' => 'Chu kỳ lãi', 'extension_date' => 'Ngày gia hạn', @@ -147,11 +145,11 @@ return [ 'start_date' => 'Bắt đầu', 'end_date' => 'Kết thúc', 'enddate' => 'Ngày kết thúc', - 'move_rules_before_delete' => 'Rule group', + 'move_rules_before_delete' => 'Nhóm quy tắc', 'start' => 'Bắt đầu phạm vi', 'end' => 'Kết thúc phạm vi', 'delete_account' => 'Xóa tài khoản ":name"', - 'delete_webhook' => 'Delete webhook ":title"', + 'delete_webhook' => 'Xóa webhook ":title"', 'delete_bill' => 'Xóa hóa đơn ":name"', 'delete_budget' => 'Xóa ngân sách ":name"', 'delete_category' => 'Xóa danh mục ":name"', @@ -172,7 +170,7 @@ return [ 'object_group_areYouSure' => 'Bạn có chắc chắn muốn xóa nhóm có tiêu đề ":title"?', 'ruleGroup_areYouSure' => 'Bạn có chắc chắn muốn xóa nhóm quy tắc có tiêu đề ":title"?', 'budget_areYouSure' => 'Bạn có chắc chắn muốn xóa ngân sách có tên ":name"?', - 'webhook_areYouSure' => 'Are you sure you want to delete the webhook named ":title"?', + 'webhook_areYouSure' => 'Bạn có chắc chắn là muốn xóa webhook tên ":title"?', 'category_areYouSure' => 'Bạn có chắc chắn muốn xóa danh mục có tên ":name"?', 'recurring_areYouSure' => 'Bạn có chắc chắn muốn xóa giao dịch định kỳ có tiêu đề ":title"?', 'currency_areYouSure' => 'Bạn có chắc chắn muốn xóa loại tiền có tên ":name"?', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => 'Bạn có chắc chắn muốn xóa giao dịch được mô tả ":description"?', 'mass_journal_are_you_sure' => 'Bạn có chắc chắn muốn xóa những giao dịch này?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => 'Bạn có chắc chắn muốn xóa nhãn ":tag"?', 'journal_link_areYouSure' => 'Bạn có chắc chắn muốn xóa liên kết giữa :source:destination?', 'linkType_areYouSure' => 'Bạn có chắc chắn muốn xóa loại liên kết ":name" (":inward" / ":outward")?', @@ -212,7 +209,7 @@ return [ 'recurring_keep_transactions' => 'Giao dịch duy nhất được tạo bởi giao dịch định kỳ này sẽ không bị xóa. Các giao dịch được tạo bởi giao dịch định kỳ này sẽ được xóa bỏ.', 'tag_keep_transactions' => 'Giao dịch duy nhất được kết nối với thẻ này sẽ không bị xóa. :count các giao dịch được kết nối với thẻ này sẽ không bị xóa.', 'check_for_updates' => 'Kiểm tra cập nhật', - 'liability_direction' => 'Liability in/out', + 'liability_direction' => 'Vay vào/ra', 'delete_object_group' => 'Xóa nhóm ":title"', 'email' => 'Địa chỉ email', 'password' => 'Mật khẩu', @@ -222,7 +219,7 @@ return [ 'login_name' => 'Đăng nhập', 'is_owner' => 'Là quản trị viên?', 'url' => 'URL', - 'bill_end_date' => 'End date', + 'bill_end_date' => 'Ngày kết thúc', // import 'apply_rules' => 'Áp dụng quy tắc', @@ -230,7 +227,6 @@ return [ 'album' => 'Album', 'song' => 'Bài hát', - // admin 'domain' => 'Tên miền', 'single_user_mode' => 'Tắt chức năng đăng ký mới', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS account', 'local_account' => 'Tài khoản Firefly III', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => 'Từ ngày', - 'to_date' => 'Đến ngày', - 'due_date' => 'Ngày đáo hạn', - 'payment_date' => 'Ngày thanh toán', - 'invoice_date' => 'Ngày hóa đơn', - 'internal_reference' => 'Tài liệu tham khảo nội bộ', - 'inward' => 'Mô tả bên trong', - 'outward' => 'Mô tả bên ngoài', - 'rule_group_id' => 'Nhóm quy tắc', - 'transaction_description' => 'Mô tả giao dịch', - 'first_date' => 'Ngày đầu tiên', - 'transaction_type' => 'Loại giao dịch', - 'repeat_until' => 'Lặp lại đến', - 'recurring_description' => 'Mô tả giao dịch định kỳ', - 'repetition_type' => 'Loại lặp lại', - 'foreign_currency_id' => 'Ngoại tệ', - 'repetition_end' => 'Kết thúc lặp lại', - 'repetitions' => 'Sự lặp lại', - 'calendar' => 'Lịch', - 'weekend' => 'Ngày cuối tuần', - 'client_secret' => 'Bí mật máy khách', - 'withdrawal_destination_id' => 'Mô tả tài khoản', - 'deposit_source_id' => 'Tài khoản gốc', - 'expected_on' => 'Dự kiến vào', - 'paid' => 'Đã thanh toán', - 'auto_budget_type' => 'Ngân sách tự động', - 'auto_budget_amount' => 'Số tiền ngân sách tự động', - 'auto_budget_period' => 'Chu kỳ ngân sách tự động', - 'collected' => 'Thu thập', - 'submitted' => 'Đã gửi', - 'key' => 'Khóa', - 'value' => 'Nội dung của bản lưu trữ', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => 'Từ ngày', + 'to_date' => 'Đến ngày', + 'due_date' => 'Ngày đáo hạn', + 'payment_date' => 'Ngày thanh toán', + 'invoice_date' => 'Ngày hóa đơn', + 'internal_reference' => 'Tài liệu tham khảo nội bộ', + 'inward' => 'Mô tả bên trong', + 'outward' => 'Mô tả bên ngoài', + 'rule_group_id' => 'Nhóm quy tắc', + 'transaction_description' => 'Mô tả giao dịch', + 'first_date' => 'Ngày đầu tiên', + 'transaction_type' => 'Loại giao dịch', + 'repeat_until' => 'Lặp lại đến', + 'recurring_description' => 'Mô tả giao dịch định kỳ', + 'repetition_type' => 'Loại lặp lại', + 'foreign_currency_id' => 'Ngoại tệ', + 'repetition_end' => 'Kết thúc lặp lại', + 'repetitions' => 'Sự lặp lại', + 'calendar' => 'Lịch', + 'weekend' => 'Ngày cuối tuần', + 'client_secret' => 'Bí mật máy khách', + 'withdrawal_destination_id' => 'Mô tả tài khoản', + 'deposit_source_id' => 'Tài khoản gốc', + 'expected_on' => 'Dự kiến vào', + 'paid' => 'Đã thanh toán', + 'auto_budget_type' => 'Ngân sách tự động', + 'auto_budget_amount' => 'Số tiền ngân sách tự động', + 'auto_budget_period' => 'Chu kỳ ngân sách tự động', + 'collected' => 'Thu thập', + 'submitted' => 'Đã gửi', + 'key' => 'Khóa', + 'value' => 'Nội dung của bản lưu trữ', + 'webhook_delivery' => 'Phân phối', + 'webhook_response' => 'Đáp lại', + 'webhook_trigger' => 'Kích hoạt', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/vi_VN/intro.php b/resources/lang/vi_VN/intro.php index efa3e520c1..6e859c29ab 100644 --- a/resources/lang/vi_VN/intro.php +++ b/resources/lang/vi_VN/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => 'Chào mừng bạn đến trang chỉ mục của Firefly III. Hãy dành thời gian để đi qua phần giới thiệu này để hiểu cách Firefly III hoạt động.', - 'index_accounts-chart' => 'Biểu đồ này cho thấy số dư hiện tại của tài khoản của bạn. Bạn có thể chọn các tài khoản hiển thị ở đây trong tùy chọn của bạn.', - 'index_box_out_holder' => 'Chiếc hộp nhỏ này và những chiếc hộp bên cạnh sẽ cho bạn cái nhìn tổng quan nhanh về tình hình tài chính của bạn.', - 'index_help' => 'Nếu bạn cần trợ giúp với một trang hoặc một form, nhấn nút này.', - 'index_outro' => 'Hầu hết các trang của Firefly III sẽ bắt đầu với một chuyến tham quan nhỏ như thế này. Hãy liên hệ với tôi khi bạn có thắc mắc hoặc ý kiến.', - 'index_sidebar-toggle' => 'Để tạo giao dịch, tài khoản mới hoặc những thứ khác, hãy sử dụng menu dưới biểu tượng này.', - 'index_cash_account' => 'Đây là những tài khoản được tạo ra cho đến nay. Bạn có thể sử dụng tài khoản tiền mặt để theo dõi chi phí tiền mặt nhưng tất nhiên đó không phải là bắt buộc.', + 'index_intro' => 'Chào mừng bạn đến trang chỉ mục của Firefly III. Hãy dành thời gian để đi qua phần giới thiệu này để hiểu cách Firefly III hoạt động.', + 'index_accounts-chart' => 'Biểu đồ này cho thấy số dư hiện tại của tài khoản của bạn. Bạn có thể chọn các tài khoản hiển thị ở đây trong tùy chọn của bạn.', + 'index_box_out_holder' => 'Chiếc hộp nhỏ này và những chiếc hộp bên cạnh sẽ cho bạn cái nhìn tổng quan nhanh về tình hình tài chính của bạn.', + 'index_help' => 'Nếu bạn cần trợ giúp với một trang hoặc một form, nhấn nút này.', + 'index_outro' => 'Hầu hết các trang của Firefly III sẽ bắt đầu với một chuyến tham quan nhỏ như thế này. Hãy liên hệ với tôi khi bạn có thắc mắc hoặc ý kiến.', + 'index_sidebar-toggle' => 'Để tạo giao dịch, tài khoản mới hoặc những thứ khác, hãy sử dụng menu dưới biểu tượng này.', + 'index_cash_account' => 'Đây là những tài khoản được tạo ra cho đến nay. Bạn có thể sử dụng tài khoản tiền mặt để theo dõi chi phí tiền mặt nhưng tất nhiên đó không phải là bắt buộc.', // transactions - 'transactions_create_basic_info' => 'Nhập thông tin cơ bản của giao dịch. Nguồn, đích, ngày tháng và mô tả.', - 'transactions_create_amount_info' => 'Nhập số tiền của giao dịch. Nếu cần, các trường sẽ tự động cập nhật thông tin về ngoại tệ.', - 'transactions_create_optional_info' => 'Tất cả các trường là tùy chọn. Thêm siêu dữ liệu ở đây sẽ làm cho các giao dịch của bạn được tổ chức tốt hơn.', - 'transactions_create_split' => 'Nếu bạn muốn phân tách một giao dịch, hãy thêm nhiều lần chia tách bằng nút này', + 'transactions_create_basic_info' => 'Nhập thông tin cơ bản của giao dịch. Nguồn, đích, ngày tháng và mô tả.', + 'transactions_create_amount_info' => 'Nhập số tiền của giao dịch. Nếu cần, các trường sẽ tự động cập nhật thông tin về ngoại tệ.', + 'transactions_create_optional_info' => 'Tất cả các trường là tùy chọn. Thêm siêu dữ liệu ở đây sẽ làm cho các giao dịch của bạn được tổ chức tốt hơn.', + 'transactions_create_split' => 'Nếu bạn muốn phân tách một giao dịch, hãy thêm nhiều lần chia tách bằng nút này', // create account: - 'accounts_create_iban' => 'Cung cấp cho tài khoản của bạn một IBAN hợp lệ. Điều này có thể làm cho việc nhập dữ liệu rất dễ dàng trong tương lai.', - 'accounts_create_asset_opening_balance' => 'tài khoản có thể có "số dư mở", cho biết bắt đầu lịch sử của tài khoản này trong Firefly III.', - 'accounts_create_asset_currency' => 'Firefly III hỗ trợ nhiều loại tiền tệ. tài khoản có một loại tiền tệ chính mà bạn phải đặt ở đây.', - 'accounts_create_asset_virtual' => 'Đôi khi có thể giúp cung cấp cho tài khoản của bạn một số dư ảo: một số tiền bổ sung luôn được thêm vào hoặc xóa khỏi số dư thực tế.', + 'accounts_create_iban' => 'Cung cấp cho tài khoản của bạn một IBAN hợp lệ. Điều này có thể làm cho việc nhập dữ liệu rất dễ dàng trong tương lai.', + 'accounts_create_asset_opening_balance' => 'tài khoản có thể có "số dư mở", cho biết bắt đầu lịch sử của tài khoản này trong Firefly III.', + 'accounts_create_asset_currency' => 'Firefly III hỗ trợ nhiều loại tiền tệ. tài khoản có một loại tiền tệ chính mà bạn phải đặt ở đây.', + 'accounts_create_asset_virtual' => 'Đôi khi có thể giúp cung cấp cho tài khoản của bạn một số dư ảo: một số tiền bổ sung luôn được thêm vào hoặc xóa khỏi số dư thực tế.', // budgets index - 'budgets_index_intro' => 'Ngân sách được sử dụng để quản lý tài chính của bạn và tạo thành một trong những chức năng cốt lõi của Firefly III.', - 'budgets_index_set_budget' => 'Đặt tổng ngân sách của bạn cho mọi thời kỳ để Firefly III có thể cho bạn biết nếu bạn đã lập ngân sách tất cả số tiền có sẵn.', - 'budgets_index_see_expenses_bar' => 'Khi tiêu tiền thanh này sẽ được lấp đầy từ từ.', - 'budgets_index_navigate_periods' => 'Điều hướng qua các thời kỳ để dễ dàng đặt ngân sách trước thời hạn.', - 'budgets_index_new_budget' => 'Tạo ngân sách mới khi bạn thấy phù hợp.', - 'budgets_index_list_of_budgets' => 'Sử dụng bảng này để đặt số tiền cho từng ngân sách và xem bạn đang làm như thế nào.', - 'budgets_index_outro' => 'Để tìm hiểu thêm về lập ngân sách, hãy kiểm tra biểu tượng trợ giúp ở góc trên bên phải.', + 'budgets_index_intro' => 'Ngân sách được sử dụng để quản lý tài chính của bạn và tạo thành một trong những chức năng cốt lõi của Firefly III.', + 'budgets_index_see_expenses_bar' => 'Khi tiêu tiền thanh này sẽ được lấp đầy từ từ.', + 'budgets_index_navigate_periods' => 'Điều hướng qua các thời kỳ để dễ dàng đặt ngân sách trước thời hạn.', + 'budgets_index_new_budget' => 'Tạo ngân sách mới khi bạn thấy phù hợp.', + 'budgets_index_list_of_budgets' => 'Sử dụng bảng này để đặt số tiền cho từng ngân sách và xem bạn đang làm như thế nào.', + 'budgets_index_outro' => 'Để tìm hiểu thêm về lập ngân sách, hãy kiểm tra biểu tượng trợ giúp ở góc trên bên phải.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => 'Sử dụng các báo cáo này để có được thông tin chi tiết về tài chính của bạn.', - 'reports_index_inputReportType' => 'Chọn một loại báo cáo. Kiểm tra các trang trợ giúp để xem mỗi báo cáo hiển thị cho bạn.', - 'reports_index_inputAccountsSelect' => 'Bạn có thể loại trừ hoặc bao gồm các tài khoản khi bạn thấy phù hợp.', - 'reports_index_inputDateRange' => 'Phạm vi ngày đã chọn hoàn toàn tùy thuộc vào bạn: từ một ngày đến 10 năm.', - 'reports_index_extra-options-box' => 'Tùy thuộc vào báo cáo bạn đã chọn, bạn có thể chọn các bộ lọc và tùy chọn bổ sung tại đây. Xem hộp này khi bạn thay đổi loại báo cáo.', + 'reports_index_intro' => 'Sử dụng các báo cáo này để có được thông tin chi tiết về tài chính của bạn.', + 'reports_index_inputReportType' => 'Chọn một loại báo cáo. Kiểm tra các trang trợ giúp để xem mỗi báo cáo hiển thị cho bạn.', + 'reports_index_inputAccountsSelect' => 'Bạn có thể loại trừ hoặc bao gồm các tài khoản khi bạn thấy phù hợp.', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => 'Tùy thuộc vào báo cáo bạn đã chọn, bạn có thể chọn các bộ lọc và tùy chọn bổ sung tại đây. Xem hộp này khi bạn thay đổi loại báo cáo.', // reports (reports) - 'reports_report_default_intro' => 'Báo cáo này sẽ cung cấp cho bạn một cái nhìn tổng quan nhanh chóng và toàn diện về tài chính của bạn. Nếu bạn muốn thấy bất cứ điều gì khác, xin vui lòng không liên lạc với tôi!', - 'reports_report_audit_intro' => 'Báo cáo này sẽ cung cấp cho bạn thông tin chi tiết về tài khoản của bạn.', - 'reports_report_audit_optionsBox' => 'Sử dụng các hộp kiểm này để hiển thị hoặc ẩn các cột bạn quan tâm.', + 'reports_report_default_intro' => 'Báo cáo này sẽ cung cấp cho bạn một cái nhìn tổng quan nhanh chóng và toàn diện về tài chính của bạn. Nếu bạn muốn thấy bất cứ điều gì khác, xin vui lòng không liên lạc với tôi!', + 'reports_report_audit_intro' => 'Báo cáo này sẽ cung cấp cho bạn thông tin chi tiết về tài khoản của bạn.', + 'reports_report_audit_optionsBox' => 'Sử dụng các hộp kiểm này để hiển thị hoặc ẩn các cột bạn quan tâm.', - 'reports_report_category_intro' => 'Báo cáo này sẽ cung cấp cho bạn cái nhìn sâu sắc trong một hoặc nhiều danh mục.', - 'reports_report_category_pieCharts' => 'Những biểu đồ này sẽ cung cấp cho bạn cái nhìn sâu sắc về chi phí và thu nhập cho mỗi danh mục hoặc mỗi tài khoản.', - 'reports_report_category_incomeAndExpensesChart' => 'Biểu đồ này cho thấy chi phí và thu nhập của bạn trên mỗi danh mục.', + 'reports_report_category_intro' => 'Báo cáo này sẽ cung cấp cho bạn cái nhìn sâu sắc trong một hoặc nhiều danh mục.', + 'reports_report_category_pieCharts' => 'Những biểu đồ này sẽ cung cấp cho bạn cái nhìn sâu sắc về chi phí và thu nhập cho mỗi danh mục hoặc mỗi tài khoản.', + 'reports_report_category_incomeAndExpensesChart' => 'Biểu đồ này cho thấy chi phí và thu nhập của bạn trên mỗi danh mục.', - 'reports_report_tag_intro' => 'Báo cáo này sẽ cung cấp cho bạn cái nhìn sâu sắc trong một hoặc nhiều thẻ.', - 'reports_report_tag_pieCharts' => 'Những biểu đồ này sẽ cung cấp cho bạn cái nhìn sâu sắc về chi phí và thu nhập trên mỗi nhãn, tài khoản, danh mục hoặc ngân sách.', - 'reports_report_tag_incomeAndExpensesChart' => 'Biểu đồ này cho thấy chi phí và thu nhập của bạn trên mỗi nhãn.', + 'reports_report_tag_intro' => 'Báo cáo này sẽ cung cấp cho bạn cái nhìn sâu sắc trong một hoặc nhiều thẻ.', + 'reports_report_tag_pieCharts' => 'Những biểu đồ này sẽ cung cấp cho bạn cái nhìn sâu sắc về chi phí và thu nhập trên mỗi nhãn, tài khoản, danh mục hoặc ngân sách.', + 'reports_report_tag_incomeAndExpensesChart' => 'Biểu đồ này cho thấy chi phí và thu nhập của bạn trên mỗi nhãn.', 'reports_report_budget_intro' => 'Báo cáo này sẽ cung cấp cho bạn cái nhìn sâu sắc về một hoặc nhiều ngân sách.', 'reports_report_budget_pieCharts' => 'Những biểu đồ này sẽ cung cấp cho bạn cái nhìn sâu sắc về chi phí cho mỗi ngân sách hoặc mỗi tài khoản.', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => 'Bên cạnh thanh tiến trình này là hai nút (+ và -) để thêm hoặc xóa tiền từ mỗi ngân hàng heo.', 'piggy-banks_index_accountStatus' => 'Đối với mỗi tài khoản có ít nhất một ngân hàng heo, trạng thái được liệt kê trong bảng này.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => 'Mục tiêu của bạn là gì? Một chiếc ghế dài mới, một máy ảnh, tiền cho các trường hợp khẩn cấp?', 'piggy-banks_create_date' => 'Bạn có thể đặt ngày mục tiêu hoặc thời hạn cho ngân hàng heo của bạn.', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => 'Sử dụng các hóa đơn để theo dõi số tiền bạn đáo hạn mỗi kỳ. Hãy suy nghĩ về các chi phí như tiền thuê nhà, bảo hiểm hoặc thế chấp.', 'bills_create_name' => 'Sử dụng tên mô tả, chẳng hạn như "Thuê" hoặc "Bảo hiểm y tế".', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => 'Chọn số tiền tối thiểu và tối đa cho hóa đơn này.', 'bills_create_repeat_freq_holder' => 'Hầu hết các hóa đơn lặp lại hàng tháng, nhưng bạn có thể đặt tần suất khác tại đây.', 'bills_create_skip_holder' => 'Nếu hóa đơn lặp lại sau mỗi 2 tuần, trường "bỏ qua" phải được đặt thành "1" để bỏ qua mỗi tuần.', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => 'Sử dụng nút này để xem giao dịch nào sẽ phù hợp với quy tắc của bạn.', 'rules_create_actions' => 'Đặt bao nhiêu hành động tùy thích.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => 'Nhiều tùy chọn có sẵn đằng sau các tab này.', diff --git a/resources/lang/vi_VN/list.php b/resources/lang/vi_VN/list.php index 4d1f2c8760..ddf3ff84f9 100644 --- a/resources/lang/vi_VN/list.php +++ b/resources/lang/vi_VN/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => 'Nút', - 'icon' => 'Biểu tượng', - 'id' => 'ID', - 'create_date' => 'Đã tạo ngày', - 'update_date' => 'Đã cập nhật ngày', - 'updated_at' => 'Đã cập nhật tại', - 'balance_before' => 'Số dư trước', - 'balance_after' => 'Số dư sau', - 'name' => 'Tên', - 'role' => 'Quy tắc', - 'currentBalance' => 'Số dư hiện tại', - 'linked_to_rules' => 'Quy tắc liên quan', - 'active' => 'Đang hoạt động?', - 'percentage' => 'phần trăm.', - 'recurring_transaction' => 'Giao dịch định kỳ', - 'next_due' => 'Kỳ hạn tiếp theo', - 'transaction_type' => 'Loại giao dịch', - 'lastActivity' => 'Hoạt động cuối cùng', - 'balanceDiff' => 'Số dư chênh lệch', - 'other_meta_data' => 'Dữ liệu khác', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => 'Loại tài khoản', - 'created_at' => 'Được tạo tại', - 'account' => 'Tài khoản', - 'external_url' => 'URL bên ngoài', - 'matchingAmount' => 'Số tiền', - 'destination' => 'Nơi đến', - 'source' => 'Nơi gửi', - 'next_expected_match' => 'Trận đấu dự kiến tiếp theo', - 'automatch' => 'Tự động khớp?', + 'buttons' => 'Nút', + 'icon' => 'Biểu tượng', + 'id' => 'ID', + 'create_date' => 'Đã tạo ngày', + 'update_date' => 'Đã cập nhật ngày', + 'updated_at' => 'Đã cập nhật tại', + 'balance_before' => 'Số dư trước', + 'balance_after' => 'Số dư sau', + 'name' => 'Tên', + 'role' => 'Quy tắc', + 'currentBalance' => 'Số dư hiện tại', + 'linked_to_rules' => 'Quy tắc liên quan', + 'active' => 'Đang hoạt động?', + 'percentage' => 'phần trăm.', + 'recurring_transaction' => 'Giao dịch định kỳ', + 'next_due' => 'Kỳ hạn tiếp theo', + 'transaction_type' => 'Loại giao dịch', + 'lastActivity' => 'Hoạt động cuối cùng', + 'balanceDiff' => 'Số dư chênh lệch', + 'other_meta_data' => 'Dữ liệu khác', + 'invited_at' => 'Được mời lúc', + 'expires' => 'Lời mời đã quá hạn', + 'invited_by' => 'Được mời bởi', + 'invite_link' => 'Link mời', + 'account_type' => 'Loại tài khoản', + 'created_at' => 'Được tạo tại', + 'account' => 'Tài khoản', + 'external_url' => 'URL bên ngoài', + 'matchingAmount' => 'Số tiền', + 'destination' => 'Nơi đến', + 'source' => 'Nơi gửi', + 'next_expected_match' => 'Trận đấu dự kiến tiếp theo', + 'automatch' => 'Tự động khớp?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => 'Số lần lặp lại', 'description' => 'Mô tả', 'amount' => 'Số tiền', @@ -105,7 +103,7 @@ return [ 'type' => 'Loại', 'completed' => 'Đã hoàn thành', 'iban' => 'IBAN', - 'account_number' => 'Account number', + 'account_number' => 'Số tài khoản', 'paid_current_period' => 'Được trả ở thời gian này', 'email' => 'Thư điện tử', 'registered_at' => 'Đã đăng ký tại', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'Tài khoản với bunq', 'file_name' => 'Tên file', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => 'Kích thước file', - 'file_type' => 'Loại file', - 'attached_to' => 'Đính kèm vào', - 'file_exists' => 'File tồn tại', - 'spectre_bank' => 'Ngân hàng', - 'spectre_last_use' => 'Lần cuối đăng nhập', - 'spectre_status' => 'Trạng thái', - 'bunq_payment_id' => 'ID thanh toán bunq', - 'repetitions' => 'Sự lặp lại', - 'title' => 'Tiêu đề', - 'transaction_s' => 'Giao dịch(s)', - 'field' => 'Trường', - 'value' => 'Giá trị', - 'interest' => 'Lãi', - 'interest_period' => 'Chu kỳ lãi', - 'liability_type' => 'Loại trách nhiệm pháp lý', - 'liability_direction' => 'Liability in/out', - 'end_date' => 'Ngày kết thúc', - 'payment_info' => 'Thông tin thanh toán', - 'expected_info' => 'Giao dịch dự kiến tiếp theo', - 'start_date' => 'Ngày bắt đầu', - 'trigger' => 'Trigger', - 'response' => 'Response', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => 'Kích thước file', + 'file_type' => 'Loại file', + 'attached_to' => 'Đính kèm vào', + 'file_exists' => 'File tồn tại', + 'spectre_bank' => 'Ngân hàng', + 'spectre_last_use' => 'Lần cuối đăng nhập', + 'spectre_status' => 'Trạng thái', + 'bunq_payment_id' => 'ID thanh toán bunq', + 'repetitions' => 'Sự lặp lại', + 'title' => 'Tiêu đề', + 'transaction_s' => 'Giao dịch(s)', + 'field' => 'Trường', + 'value' => 'Giá trị', + 'interest' => 'Lãi', + 'interest_period' => 'Chu kỳ lãi', + 'liability_type' => 'Loại trách nhiệm pháp lý', + 'liability_direction' => 'Vay vào/ra', + 'end_date' => 'Ngày kết thúc', + 'payment_info' => 'Thông tin thanh toán', + 'expected_info' => 'Giao dịch dự kiến tiếp theo', + 'start_date' => 'Ngày bắt đầu', + 'trigger' => 'Kích hoạt', + 'response' => 'Đáp lại', + 'delivery' => 'Phân phối', + 'url' => 'URL', + 'secret' => 'Mã bí mật', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/vi_VN/pagination.php b/resources/lang/vi_VN/pagination.php index c393453d19..39a476ce93 100644 --- a/resources/lang/vi_VN/pagination.php +++ b/resources/lang/vi_VN/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/vi_VN/passwords.php b/resources/lang/vi_VN/passwords.php index 020ddaa218..d6e23adc10 100644 --- a/resources/lang/vi_VN/passwords.php +++ b/resources/lang/vi_VN/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/vi_VN/rules.php b/resources/lang/vi_VN/rules.php index 389fb335ff..db9b3d7abe 100644 --- a/resources/lang/vi_VN/rules.php +++ b/resources/lang/vi_VN/rules.php @@ -1,6 +1,5 @@ 'Inspect transaction ":title" @ Firefly III', 'inspect_rule' => 'Inspect rule ":title" @ Firefly III', 'journal_other_user' => 'This transaction doesn\'t belong to the user', - 'no_such_journal' => 'This transaction doesn\'t exist', - 'journal_already_no_budget' => 'This transaction has no budget, so it cannot be removed', + 'no_such_journal' => 'Giao dịch này không tồn tại', + 'journal_already_no_budget' => 'Giao dịch này không có ngân sách, vì vậy nó không thể bị xóa', 'journal_already_no_category' => 'This transaction had no category, so it cannot be removed', 'journal_already_no_notes' => 'This transaction had no notes, so they cannot be removed', 'journal_not_found' => 'Firefly III can\'t find the requested transaction', @@ -56,6 +55,8 @@ return [ 'cannot_find_subscription' => 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/vi_VN/validation.php b/resources/lang/vi_VN/validation.php index 6bd1fd730b..70e1244a25 100644 --- a/resources/lang/vi_VN/validation.php +++ b/resources/lang/vi_VN/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Mảng bị thiếu mệnh đề "where"', - 'missing_update' => 'Mảng bị thiếu mệnh đề "update"', - 'invalid_where_key' => 'JSON chứa một khóa không hợp lệ cho điều khoản "where"', - 'invalid_update_key' => 'JSON chứa khóa không hợp lệ cho điều khoản "update"', - 'invalid_query_data' => 'Có dữ liệu không hợp lệ trong trường %s:%s của truy vấn của bạn.', - 'invalid_query_account_type' => 'Truy vấn của bạn chứa các loại tài khoản khác nhau, điều này không được phép.', - 'invalid_query_currency' => 'Truy vấn của bạn chứa các tài khoản có cài đặt tiền tệ khác nhau, điều này không được phép.', - 'iban' => 'Đây không phải là một IBAN hợp lệ.', - 'zero_or_more' => 'Giá trị không thể âm.', - 'date_or_time' => 'Giá trị phải là giá trị ngày hoặc thời gian hợp lệ (ISO 8601).', - 'source_equals_destination' => 'Tài khoản nguồn bằng với tài khoản đích.', - 'unique_account_number_for_user' => 'Có vẻ như số tài khoản này đã được sử dụng.', - 'unique_iban_for_user' => 'Có vẻ như IBAN này đã được sử dụng.', - 'deleted_user' => 'Do những hạn chế về bảo mật, bạn không thể đăng ký bằng địa chỉ email này.', - 'rule_trigger_value' => 'Giá trị này không hợp lệ cho trình kích hoạt được chọn.', - 'rule_action_value' => 'Giá trị này không hợp lệ cho hành động đã chọn.', - 'file_already_attached' => 'Đã tải lên tập tin ":name" đã được gắn vào đối tượng này.', - 'file_attached' => 'Tải lên thành công tập tin ":name".', - 'must_exist' => 'Tải lên thành công tập tin....', - 'all_accounts_equal' => 'ID trong trường: thuộc tính không tồn tại trong cơ sở dữ liệu....', - 'group_title_mandatory' => 'Tiêu đề nhóm là bắt buộc khi có nhiều hơn một giao dịch.', - 'transaction_types_equal' => 'Tất cả các phần tách phải cùng loại.', - 'invalid_transaction_type' => 'Loại giao dịch không hợp lệ.', - 'invalid_selection' => 'Lựa chọn của bạn không hợp lệ.', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => 'Cần ít nhất một giao dịch.', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => 'Cần ít nhất một lần lặp lại.', - 'require_repeat_until' => 'Yêu cầu một số lần lặp lại hoặc ngày kết thúc (repeat_until). Không phải cả hai.', - 'require_currency_info' => 'Nội dung của trường này không hợp lệ nếu không có thông tin về tiền tệ.', - 'not_transfer_account' => 'Tài khoản này không phải là tài khoản có thể được sử dụng để chuyển khoản.', - 'require_currency_amount' => 'Nội dung của trường này không hợp lệ nếu không có thông tin về số lượng nước ngoài.', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => 'Mô tả giao dịch không nên bằng mô tả toàn cầu.', - 'file_invalid_mime' => 'File ":name" là loại ":mime" không được chấp nhận khi tải lên mới.', - 'file_too_large' => 'File ":name" quá lớn.', - 'belongs_to_user' => 'Giá trị của :attribute không xác định.', - 'accepted' => 'Thuộc tính: phải được chấp nhận.', - 'bic' => 'Đây không phải là BIC hợp lệ.', - 'at_least_one_trigger' => 'Quy tắc phải có ít nhất một kích hoạt.', - 'at_least_one_active_trigger' => 'Quy tắc phải có ít nhất một trình kích hoạt đang hoạt động.', - 'at_least_one_action' => 'Quy tắc phải có ít nhất một hành động.', - 'at_least_one_active_action' => 'Quy tắc phải có ít nhất một hành động đang hoạt động.', - 'base64' => 'Đây không phải là dữ liệu được mã hóa base64 hợp lệ.', - 'model_id_invalid' => 'ID đã cho có vẻ không hợp lệ cho mô hình này.', - 'less' => ':thuộc tính phải nhỏ hơn 10,000,000', - 'active_url' => 'Thuộc tính: không phải là một URL hợp lệ.', - 'after' => 'Thuộc tính: phải là một ngày sau: ngày.', - 'date_after' => '"Ngày bắt đầu" phải trước "Ngày kết thúc".', - 'alpha' => 'Thuộc tính: chỉ có thể chứa các chữ cái.', - 'alpha_dash' => 'Thuộc tính: chỉ có thể chứa chữ cái, số và dấu gạch ngang.', - 'alpha_num' => 'Thuộc tính: chỉ có thể chứa các chữ cái và số.', - 'array' => 'Thuộc tính: phải là một mảng.', - 'unique_for_user' => 'Đã có một mục với thuộc tính này:.', - 'before' => 'Thuộc tính: phải là một ngày trước: ngày.', - 'unique_object_for_user' => 'Tên này đã được sử dụng.', - 'unique_account_for_user' => 'Tên tài khoản này đã được sử dụng.', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Mảng bị thiếu mệnh đề "where"', + 'missing_update' => 'Mảng bị thiếu mệnh đề "update"', + 'invalid_where_key' => 'JSON chứa một khóa không hợp lệ cho điều khoản "where"', + 'invalid_update_key' => 'JSON chứa khóa không hợp lệ cho điều khoản "update"', + 'invalid_query_data' => 'Có dữ liệu không hợp lệ trong trường %s:%s của truy vấn của bạn.', + 'invalid_query_account_type' => 'Truy vấn của bạn chứa các loại tài khoản khác nhau, điều này không được phép.', + 'invalid_query_currency' => 'Truy vấn của bạn chứa các tài khoản có cài đặt tiền tệ khác nhau, điều này không được phép.', + 'iban' => 'Đây không phải là một IBAN hợp lệ.', + 'zero_or_more' => 'Giá trị không thể âm.', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => 'Giá trị phải là giá trị ngày hoặc thời gian hợp lệ (ISO 8601).', + 'source_equals_destination' => 'Tài khoản nguồn bằng với tài khoản đích.', + 'unique_account_number_for_user' => 'Có vẻ như số tài khoản này đã được sử dụng.', + 'unique_iban_for_user' => 'Có vẻ như IBAN này đã được sử dụng.', + 'reconciled_forbidden_field' => 'Giao dịch này đã được đối chiếu, bạn không thể thay đổi ":field"', + 'deleted_user' => 'Do những hạn chế về bảo mật, bạn không thể đăng ký bằng địa chỉ email này.', + 'rule_trigger_value' => 'Giá trị này không hợp lệ cho trình kích hoạt được chọn.', + 'rule_action_value' => 'Giá trị này không hợp lệ cho hành động đã chọn.', + 'file_already_attached' => 'Đã tải lên tập tin ":name" đã được gắn vào đối tượng này.', + 'file_attached' => 'Tải lên thành công tập tin ":name".', + 'must_exist' => 'Tải lên thành công tập tin....', + 'all_accounts_equal' => 'ID trong trường: thuộc tính không tồn tại trong cơ sở dữ liệu....', + 'group_title_mandatory' => 'Tiêu đề nhóm là bắt buộc khi có nhiều hơn một giao dịch.', + 'transaction_types_equal' => 'Tất cả các phần tách phải cùng loại.', + 'invalid_transaction_type' => 'Loại giao dịch không hợp lệ.', + 'invalid_selection' => 'Lựa chọn của bạn không hợp lệ.', + 'belongs_user' => 'Giá trị này liên kết đến thực thể dường như không tồn tại.', + 'belongs_user_or_user_group' => 'Giá trị này liên kết đến thực thể dường như không tồn tại trong phần quản trị tài chính hiện thời.', + 'at_least_one_transaction' => 'Cần ít nhất một giao dịch.', + 'recurring_transaction_id' => 'Cần ít nhất một giao dịch.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => 'Cần ít nhất một lần lặp lại.', + 'require_repeat_until' => 'Yêu cầu một số lần lặp lại hoặc ngày kết thúc (repeat_until). Không phải cả hai.', + 'require_currency_info' => 'Nội dung của trường này không hợp lệ nếu không có thông tin về tiền tệ.', + 'not_transfer_account' => 'Tài khoản này không phải là tài khoản có thể được sử dụng để chuyển khoản.', + 'require_currency_amount' => 'Nội dung của trường này không hợp lệ nếu không có thông tin về số lượng nước ngoài.', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => 'Mô tả giao dịch không nên bằng mô tả toàn cầu.', + 'file_invalid_mime' => 'File ":name" là loại ":mime" không được chấp nhận khi tải lên mới.', + 'file_too_large' => 'File ":name" quá lớn.', + 'belongs_to_user' => 'Giá trị của :attribute không xác định.', + 'accepted' => 'Thuộc tính: phải được chấp nhận.', + 'bic' => 'Đây không phải là BIC hợp lệ.', + 'at_least_one_trigger' => 'Quy tắc phải có ít nhất một kích hoạt.', + 'at_least_one_active_trigger' => 'Quy tắc phải có ít nhất một trình kích hoạt đang hoạt động.', + 'at_least_one_action' => 'Quy tắc phải có ít nhất một hành động.', + 'at_least_one_active_action' => 'Quy tắc phải có ít nhất một hành động đang hoạt động.', + 'base64' => 'Đây không phải là dữ liệu được mã hóa base64 hợp lệ.', + 'model_id_invalid' => 'ID đã cho có vẻ không hợp lệ cho mô hình này.', + 'less' => ':thuộc tính phải nhỏ hơn 10,000,000', + 'active_url' => 'Thuộc tính: không phải là một URL hợp lệ.', + 'after' => 'Thuộc tính: phải là một ngày sau: ngày.', + 'date_after' => '"Ngày bắt đầu" phải trước "Ngày kết thúc".', + 'alpha' => 'Thuộc tính: chỉ có thể chứa các chữ cái.', + 'alpha_dash' => 'Thuộc tính: chỉ có thể chứa chữ cái, số và dấu gạch ngang.', + 'alpha_num' => 'Thuộc tính: chỉ có thể chứa các chữ cái và số.', + 'array' => 'Thuộc tính: phải là một mảng.', + 'unique_for_user' => 'Đã có một mục với thuộc tính này:.', + 'before' => 'Thuộc tính: phải là một ngày trước: ngày.', + 'unique_object_for_user' => 'Tên này đã được sử dụng.', + 'unique_account_for_user' => 'Tên tài khoản này đã được sử dụng.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + 'between.numeric' => ':attribute phải nằm trong khoảng :min và :max.', + 'between.file' => ':attribute phải nằm trong khoảng :min và :max kilobyte.', + 'between.string' => ':attribute phải nằm giữa :min và :max ký tự.', + 'between.array' => ':attribute phải nằm giữa :min và :max phần tử.', + 'boolean' => 'Trường :attribute phải đúng hoặc sai.', + 'confirmed' => 'Xác nhận :attribute không khớp.', + 'date' => ':attribute không phải là ngày hợp lệ.', + 'date_format' => ':attribute không khớp với định dạng :format.', + 'different' => ':attribute và :other phải khác.', + 'digits' => ':attribute phải là :digits chữ số.', + 'digits_between' => ':attribute phải nằm giữa :min và :max chữ số.', + 'email' => ':attribute phải là một địa chỉ email hợp lệ.', + 'filled' => 'Trường :attribute là bắt buộc.', + 'exists' => ':attribute được chọn không hợp lệ.', + 'image' => ':attribute phải là một hình ảnh.', + 'in' => ':attribute được chọn không hợp lệ.', + 'integer' => ':attribute phải là một số nguyên.', + 'ip' => ':attribute phải là một địa chỉ IP hợp lệ.', + 'json' => ':attribute phải là một chuỗi JSON hợp lệ.', + 'max.numeric' => ':attribute có thể không lớn hơn :max.', + 'max.file' => ':attribute có thể không lớn hơn :max kilobytes.', + 'max.string' => ':attribute có thể không lớn hơn :max ký tự.', + 'max.array' => ':attribute có thể không có nhiều hơn :max các mục.', + 'mimes' => ':attribute phải là một tệp loại: :values.', + 'min.numeric' => ':attribute ít nhất phải là :min.', + 'lte.numeric' => ':attribute phải nhỏ hơn hoặc bằng :value.', + 'min.file' => ':attribute ít nhất phải là :min kilobytes.', + 'min.string' => ':attribute ít nhất phải là :min ký tự.', + 'min.array' => ':attribute phải có ít nhất :min mục.', + 'not_in' => ':attribute được chọn không hợp lệ.', + 'numeric' => ':attribute phải là một số.', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => 'Số tiền gốc phải là một số.', + 'numeric_destination' => 'Số lượng đích phải là một số.', + 'numeric_source' => 'Số lượng nguồn phải là một số.', + 'regex' => 'Định dạng :attribute không hợp lệ.', + 'required' => 'Trường :attribute là bắt buộc.', + 'required_if' => 'Trường :attribute được yêu cầu khi :other là :value.', + 'required_unless' => 'Trường :attribute được yêu cầu trừ khi :other nằm trong :values.', + 'required_with' => 'Trường :attribute được yêu cầu khi có :values.', + 'required_with_all' => 'Trường :attribute được yêu cầu khi có :values.', + 'required_without' => 'Trường :attribute được yêu cầu khi :values không có.', + 'required_without_all' => 'Trường :attribute được yêu cầu khi không có :values.', + 'same' => ':attribute và :other phải khớp.', + 'size.numeric' => ':attribute phải là :size.', + 'amount_min_over_max' => 'Số tiền tối thiểu không thể lớn hơn số tiền tối đa.', + 'size.file' => ':attribute phải là :size kilobyte.', + 'size.string' => ':attribute phải là :size ký tự.', + 'size.array' => ':attribute phải chứa :size mục.', + 'unique' => ':attribute đã được sử dụng.', + 'string' => ':attribute phải là một chuỗi.', + 'url' => 'Định dạng :attribute không hợp lệ.', + 'timezone' => ':attribute phải là vùng hợp lệ.', + '2fa_code' => ':attribute hợp lệ là không hợp lệ.', + 'dimensions' => ':attribute có kích thước hình ảnh không hợp lệ.', + 'distinct' => 'Trường :attribute có giá trị trùng lặp.', + 'file' => ':attribute phải là một tệp.', + 'in_array' => 'Trường :attribute không tồn tại trong :other.', + 'present' => 'Trường :attribute phải được đặt.', + 'amount_zero' => 'Tổng số tiền không thể bằng không.', + 'current_target_amount' => 'Số tiền hiện tại phải nhỏ hơn số tiền mục tiêu.', + 'unique_piggy_bank_for_user' => 'Tên của con heo đất phải là duy nhất.', + 'unique_object_group' => 'Tên nhóm phải không bị trùng', + 'starts_with' => 'Giá trị phải bắt đầu bằng :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Cả hai tài khoản phải thuộc cùng một loại tài khoản', + 'same_account_currency' => 'Cả hai tài khoản phải có cùng cài đặt đơn vị tiền tệ', - 'between.numeric' => ':attribute phải nằm trong khoảng :min và :max.', - 'between.file' => ':attribute phải nằm trong khoảng :min và :max kilobyte.', - 'between.string' => ':attribute phải nằm giữa :min và :max ký tự.', - 'between.array' => ':attribute phải nằm giữa :min và :max phần tử.', - 'boolean' => 'Trường :attribute phải đúng hoặc sai.', - 'confirmed' => 'Xác nhận :attribute không khớp.', - 'date' => ':attribute không phải là ngày hợp lệ.', - 'date_format' => ':attribute không khớp với định dạng :format.', - 'different' => ':attribute và :other phải khác.', - 'digits' => ':attribute phải là :digits chữ số.', - 'digits_between' => ':attribute phải nằm giữa :min và :max chữ số.', - 'email' => ':attribute phải là một địa chỉ email hợp lệ.', - 'filled' => 'Trường :attribute là bắt buộc.', - 'exists' => ':attribute được chọn không hợp lệ.', - 'image' => ':attribute phải là một hình ảnh.', - 'in' => ':attribute được chọn không hợp lệ.', - 'integer' => ':attribute phải là một số nguyên.', - 'ip' => ':attribute phải là một địa chỉ IP hợp lệ.', - 'json' => ':attribute phải là một chuỗi JSON hợp lệ.', - 'max.numeric' => ':attribute có thể không lớn hơn :max.', - 'max.file' => ':attribute có thể không lớn hơn :max kilobytes.', - 'max.string' => ':attribute có thể không lớn hơn :max ký tự.', - 'max.array' => ':attribute có thể không có nhiều hơn :max các mục.', - 'mimes' => ':attribute phải là một tệp loại: :values.', - 'min.numeric' => ':attribute ít nhất phải là :min.', - 'lte.numeric' => ':attribute phải nhỏ hơn hoặc bằng :value.', - 'min.file' => ':attribute ít nhất phải là :min kilobytes.', - 'min.string' => ':attribute ít nhất phải là :min ký tự.', - 'min.array' => ':attribute phải có ít nhất :min mục.', - 'not_in' => ':attribute được chọn không hợp lệ.', - 'numeric' => ':attribute phải là một số.', - 'numeric_native' => 'Số tiền gốc phải là một số.', - 'numeric_destination' => 'Số lượng đích phải là một số.', - 'numeric_source' => 'Số lượng nguồn phải là một số.', - 'regex' => 'Định dạng :attribute không hợp lệ.', - 'required' => 'Trường :attribute là bắt buộc.', - 'required_if' => 'Trường :attribute được yêu cầu khi :other là :value.', - 'required_unless' => 'Trường :attribute được yêu cầu trừ khi :other nằm trong :values.', - 'required_with' => 'Trường :attribute được yêu cầu khi có :values.', - 'required_with_all' => 'Trường :attribute được yêu cầu khi có :values.', - 'required_without' => 'Trường :attribute được yêu cầu khi :values không có.', - 'required_without_all' => 'Trường :attribute được yêu cầu khi không có :values.', - 'same' => ':attribute và :other phải khớp.', - 'size.numeric' => ':attribute phải là :size.', - 'amount_min_over_max' => 'Số tiền tối thiểu không thể lớn hơn số tiền tối đa.', - 'size.file' => ':attribute phải là :size kilobyte.', - 'size.string' => ':attribute phải là :size ký tự.', - 'size.array' => ':attribute phải chứa :size mục.', - 'unique' => ':attribute đã được sử dụng.', - 'string' => ':attribute phải là một chuỗi.', - 'url' => 'Định dạng :attribute không hợp lệ.', - 'timezone' => ':attribute phải là vùng hợp lệ.', - '2fa_code' => ':attribute hợp lệ là không hợp lệ.', - 'dimensions' => ':attribute có kích thước hình ảnh không hợp lệ.', - 'distinct' => 'Trường :attribute có giá trị trùng lặp.', - 'file' => ':attribute phải là một tệp.', - 'in_array' => 'Trường :attribute không tồn tại trong :other.', - 'present' => 'Trường :attribute phải được đặt.', - 'amount_zero' => 'Tổng số tiền không thể bằng không.', - 'current_target_amount' => 'Số tiền hiện tại phải nhỏ hơn số tiền mục tiêu.', - 'unique_piggy_bank_for_user' => 'Tên của con heo đất phải là duy nhất.', - 'unique_object_group' => 'Tên nhóm phải không bị trùng', - 'starts_with' => 'Giá trị phải bắt đầu bằng :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Cả hai tài khoản phải thuộc cùng một loại tài khoản', - 'same_account_currency' => 'Cả hai tài khoản phải có cùng cài đặt đơn vị tiền tệ', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => 'Đây không phải là một mật khẩu an toàn. Vui lòng thử lại. Để biết thêm thông tin, hãy truy cập https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => 'Loại lặp lại không hợp lệ cho các giao dịch định kỳ.', - 'valid_recurrence_rep_moment' => 'Khoảnh khắc lặp lại không hợp lệ cho loại lặp lại này.', - 'invalid_account_info' => 'Thông tin tài khoản không hợp lệ.', - 'attributes' => [ + 'secure_password' => 'Đây không phải là một mật khẩu an toàn. Vui lòng thử lại. Để biết thêm thông tin, hãy truy cập https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => 'Loại lặp lại không hợp lệ cho các giao dịch định kỳ.', + 'valid_recurrence_rep_moment' => 'Khoảnh khắc lặp lại không hợp lệ cho loại lặp lại này.', + 'invalid_account_info' => 'Thông tin tài khoản không hợp lệ.', + 'attributes' => [ 'email' => 'địa chỉ email', 'description' => 'mô tả', 'amount' => 'số tiền', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => 'Cần lấy ID tài khoản nguồn hợp lệ và / hoặc tên tài khoản nguồn hợp lệ để tiếp tục.', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => 'Không thể tìm thấy tài khoản đích hợp lệ khi tìm kiếm ID ":id" hoặc tên ":name".', + 'withdrawal_source_need_data' => 'Cần lấy ID tài khoản nguồn hợp lệ và / hoặc tên tài khoản nguồn hợp lệ để tiếp tục.', + 'withdrawal_source_bad_data' => '[a] Không thể tìm thấy tài khoản nguồn hợp lệ khi tìm kiếm ID ":id" hoặc tên ":name".', + 'withdrawal_dest_need_data' => '[a] Cần lấy ID tài khoản đích hợp lệ và / hoặc tên tài khoản đích hợp lệ để tiếp tục.', + 'withdrawal_dest_bad_data' => 'Không thể tìm thấy tài khoản đích hợp lệ khi tìm kiếm ID ":id" hoặc tên ":name".', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => 'Cần lấy ID tài khoản nguồn hợp lệ và / hoặc tên tài khoản nguồn hợp lệ để tiếp tục.', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => 'Không thể tìm thấy tài khoản đích hợp lệ khi tìm kiếm ID ":id" hoặc tên ":name".', - 'deposit_dest_wrong_type' => 'Tài khoản đích đã gửi không đúng loại.', + 'deposit_source_need_data' => 'Cần lấy ID tài khoản nguồn hợp lệ và / hoặc tên tài khoản nguồn hợp lệ để tiếp tục.', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => 'Không thể tìm thấy tài khoản đích hợp lệ khi tìm kiếm ID ":id" hoặc tên ":name".', + 'deposit_dest_wrong_type' => 'Tài khoản đích đã gửi không đúng loại.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => 'Cần lấy ID tài khoản nguồn hợp lệ và / hoặc tên tài khoản nguồn hợp lệ để tiếp tục.', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => 'Không thể tìm thấy tài khoản đích hợp lệ khi tìm kiếm ID ":id" hoặc tên ":name".', + 'need_id_in_edit' => 'Mỗi phân chia phải có giao dịch_journal_id (ID hợp lệ hoặc 0).', - 'transfer_source_need_data' => 'Cần lấy ID tài khoản nguồn hợp lệ và / hoặc tên tài khoản nguồn hợp lệ để tiếp tục.', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => 'Không thể tìm thấy tài khoản đích hợp lệ khi tìm kiếm ID ":id" hoặc tên ":name".', - 'need_id_in_edit' => 'Mỗi phân chia phải có giao dịch_journal_id (ID hợp lệ hoặc 0).', + 'ob_source_need_data' => 'Cần lấy ID tài khoản nguồn hợp lệ và / hoặc tên tài khoản nguồn hợp lệ để tiếp tục.', + 'lc_source_need_data' => 'Cần lấy ID tài khoản hợp lệ để tiếp tục.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => 'Không thể tìm thấy tài khoản đích hợp lệ khi tìm kiếm ID ":id" hoặc tên ":name".', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => 'Cần lấy ID tài khoản nguồn hợp lệ và / hoặc tên tài khoản nguồn hợp lệ để tiếp tục.', - 'lc_source_need_data' => 'Cần lấy ID tài khoản hợp lệ để tiếp tục.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => 'Không thể tìm thấy tài khoản đích hợp lệ khi tìm kiếm ID ":id" hoặc tên ":name".', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'Bạn không thể sử dụng tài khoản này làm tài khoản nguồn.', + 'generic_invalid_destination' => 'Bạn không thể sử dụng tài khoản này làm tài khoản đích.', - 'generic_invalid_source' => 'Bạn không thể sử dụng tài khoản này làm tài khoản nguồn.', - 'generic_invalid_destination' => 'Bạn không thể sử dụng tài khoản này làm tài khoản đích.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => ':attribute phải lớn hơn hoặc bằng :value.', - 'gt.numeric' => ':attribute phải lớn hơn :value.', - 'gte.file' => ':attribute phải lớn hơn hoặc bằng :value kilobyte.', - 'gte.string' => ':attribute phải lớn hơn hoặc bằng :value ký tự.', - 'gte.array' => ':attribute phải có :value mục trở lên.', + 'gte.numeric' => ':attribute phải lớn hơn hoặc bằng :value.', + 'gt.numeric' => ':attribute phải lớn hơn :value.', + 'gte.file' => ':attribute phải lớn hơn hoặc bằng :value kilobyte.', + 'gte.string' => ':attribute phải lớn hơn hoặc bằng :value ký tự.', + 'gte.array' => ':attribute phải có :value mục trở lên.', 'amount_required_for_auto_budget' => 'Tổng số tiền được yêu cầu.', 'auto_budget_amount_positive' => 'Số lượng phải lớn hơn 0.', + 'auto_budget_period_mandatory' => 'Ngân sách tự động là một trường bắt buộc.', // no access to administration: diff --git a/resources/lang/zh_CN/api.php b/resources/lang/zh_CN/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/zh_CN/api.php +++ b/resources/lang/zh_CN/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/zh_CN/auth.php b/resources/lang/zh_CN/auth.php index 28abca5188..f0b8adb0d9 100644 --- a/resources/lang/zh_CN/auth.php +++ b/resources/lang/zh_CN/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => '用户名或密码错误。', 'throttle' => '登录失败次数过多,请 :seconds 秒后再试。', diff --git a/resources/lang/zh_CN/breadcrumbs.php b/resources/lang/zh_CN/breadcrumbs.php index f8d6ec8c28..eb2516dd48 100644 --- a/resources/lang/zh_CN/breadcrumbs.php +++ b/resources/lang/zh_CN/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => '首页', - 'budgets' => '预算', - 'subscriptions' => '订阅列表', - 'transactions' => '交易', - 'title_expenses' => '支出', - 'title_withdrawal' => '支出', - 'title_revenue' => '收益/收入', - 'title_deposit' => '收益/收入', - 'title_transfer' => '转账', - 'title_transfers' => '转账', - 'edit_currency' => '编辑货币“:name”', - 'delete_currency' => '删除货币“:name”', - 'newPiggyBank' => '创建新存钱罐', - 'edit_piggyBank' => '编辑存钱罐“:name”', - 'preferences' => '偏好设定', - 'profile' => '个人档案', - 'accounts' => '账户', - 'changePassword' => '更改您的密码', - 'change_email' => '更改您的电子邮件地址', - 'bills' => '账单', - 'newBill' => '新账单', - 'edit_bill' => '编辑账单“:name”', - 'delete_bill' => '删除账单“:name”', - 'reports' => '报表', - 'search_result' => '“:query”的搜索结果', - 'withdrawal_list' => '支出', - 'Withdrawal_list' => '支出', - 'deposit_list' => '收入', - 'transfer_list' => '转账', - 'transfers_list' => '转账', + 'home' => '首页', + 'budgets' => '预算', + 'subscriptions' => '订阅列表', + 'transactions' => '交易', + 'title_expenses' => '支出', + 'title_withdrawal' => '支出', + 'title_revenue' => '收益/收入', + 'title_deposit' => '收益/收入', + 'title_transfer' => '转账', + 'title_transfers' => '转账', + 'edit_currency' => '编辑货币“:name”', + 'delete_currency' => '删除货币“:name”', + 'newPiggyBank' => '创建新存钱罐', + 'edit_piggyBank' => '编辑存钱罐“:name”', + 'preferences' => '偏好设定', + 'profile' => '个人档案', + 'accounts' => '账户', + 'changePassword' => '更改您的密码', + 'change_email' => '更改您的电子邮件地址', + 'bills' => '账单', + 'newBill' => '新账单', + 'edit_bill' => '编辑账单“:name”', + 'delete_bill' => '删除账单“:name”', + 'reports' => '报表', + 'search_result' => '“:query”的搜索结果', + 'withdrawal_list' => '支出', + 'Withdrawal_list' => '支出', + 'deposit_list' => '收入', + 'transfer_list' => '转账', + 'transfers_list' => '转账', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => '对账', 'create_withdrawal' => '创建新取款', 'create_deposit' => '创建新存款', diff --git a/resources/lang/zh_CN/components.php b/resources/lang/zh_CN/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/zh_CN/components.php +++ b/resources/lang/zh_CN/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/zh_CN/config.php b/resources/lang/zh_CN/config.php index 95cbb00832..8367dd53d1 100644 --- a/resources/lang/zh_CN/config.php +++ b/resources/lang/zh_CN/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'zh-cn', - 'locale' => 'zh_CN.utf8, zh_CN.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'YYYY年M月', + 'html_language' => 'zh-cn', + 'locale' => 'zh_CN.utf8, zh_CN.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'YYYY年M月', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'YYYY年M月D日', - 'month_and_day_fns' => 'YYYY年M月D日', - 'month_and_day_js' => 'YYYY年M月D日', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'YYYY年M月D日', + 'month_and_day_fns' => 'YYYY年M月D日', + 'month_and_day_js' => 'YYYY年M月D日', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'YYYY年M月D日 dddd', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'YYYY年M月D日 dddd', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'M月D日', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'M月D日', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'YYYY年M月D日 HH:mm:ss', + 'date_time_fns' => 'YYYY年M月D日 HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'YYYY年M月D日 HH:mm:ss', - 'date_time_fns' => 'YYYY年M月D日 HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'YYYY年M月D日', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'YYYY年M月D日', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => 'W周,GGGG', + 'week_in_year_fns' => "w'周',yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => 'W周,GGGG', - 'week_in_year_fns' => "w'周',yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => 'YYYY年 第Q季度', - //'half_year' => '%B %Y', - 'half_year_js' => 'YYYY年 第Q季度', - - 'quarter_fns' => "YYYY年 第Q季度", - 'half_year_fns' => "{half}小时,yyyy", - 'dow_1' => '星期一', - 'dow_2' => '星期二', - 'dow_3' => '星期三', - 'dow_4' => '星期四', - 'dow_5' => '星期五', - 'dow_6' => '星期六', - 'dow_7' => '星期日', + 'quarter_fns' => 'YYYY年 第Q季度', + 'half_year_fns' => '{half}小时,yyyy', + 'dow_1' => '星期一', + 'dow_2' => '星期二', + 'dow_3' => '星期三', + 'dow_4' => '星期四', + 'dow_5' => '星期五', + 'dow_6' => '星期六', + 'dow_7' => '星期日', ]; /* diff --git a/resources/lang/zh_CN/demo.php b/resources/lang/zh_CN/demo.php index 37dfaac781..2abda56e0b 100644 --- a/resources/lang/zh_CN/demo.php +++ b/resources/lang/zh_CN/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/zh_CN/email.php b/resources/lang/zh_CN/email.php index 98cabf3990..bb67ccb65a 100644 --- a/resources/lang/zh_CN/email.php +++ b/resources/lang/zh_CN/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => '来自 Firefly III 安装的测试消息', 'admin_test_body' => '这是来自 Firefly III 站点的测试消息,收件人是 :email。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,7 +55,6 @@ return [ * */ - // invite 'invitation_created_subject' => '邀请已发送', 'invitation_created_body' => '管理员用户:email创建了用户邀请,可以由电子邮件地址背后的任何人使用":invitee"。 邀请将对48小时有效。', @@ -92,7 +90,7 @@ return [ 'registered_pw_reset_link' => '密码已重置', 'registered_doc_link' => '文档', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,7 +101,6 @@ return [ * */ - // new version 'new_version_email_subject' => '有新的 Firefly III 版本可用', @@ -146,8 +143,9 @@ return [ 'error_github_text' => '如果您愿意,您也可以在 https://github.com/firefrechy-iii/firefrechy-iii/issues 上创建新工单。', 'error_stacktrace_below' => '完整的堆栈跟踪如下:', 'error_headers' => '以下标题也可能具有相关性:', + 'error_post' => '这是由用户提交的:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,7 +156,6 @@ return [ * */ - // report new journals 'new_journals_subject' => 'Firefly III 创建了一笔新的交易|Firefly III 创建了 :count 笔新的交易', 'new_journals_header' => 'Firefly III 为您创建了一笔交易,您可以在您的 Firefly III 站点中查看:|Firefly III 为您创建了 :count 笔交易,您可以在您的 Firefly III 站点中查看:', @@ -173,7 +170,6 @@ return [ 'bill_warning_end_date_zero' => '您的账单**":name"** 将于 :date结束。过期日 **今天!**', 'bill_warning_extension_date_zero' => '您的账单**":name"** 将在 :date延期或取消。过期日 **今天!**', 'bill_warning_please_action' => '请采取适当的行动。', - ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/zh_CN/errors.php b/resources/lang/zh_CN/errors.php index 4714d62888..d8432545f3 100644 --- a/resources/lang/zh_CN/errors.php +++ b/resources/lang/zh_CN/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => '堆栈跟踪', 'more_info' => '更多信息', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => '请在 storage/logs 目录中查找日志文件以获取更多信息。如果您正在使用 Docker,请使用 docker logs -f [container]。', - 'collect_info_more' => '您可以在FAQ页面了解更多有关收集错误信息的内容。', - 'github_help' => '在 GitHub 上获取帮助', - 'github_instructions' => '欢迎您在 GitHub 创建工单。', - 'use_search' => '请善用搜索功能!', - 'include_info' => '请包含该调试页面的相关信息。', - 'tell_more' => '请提交给我们更多信息,而不仅仅是“网页提示说很抱歉”。', - 'include_logs' => '请包含错误日志(见上文)。', - 'what_did_you_do' => '告诉我们您进行了哪些操作。', - 'offline_header' => '您可能处于离线状态', - 'offline_unreachable' => '无法访问 Firefly III。您的设备目前处于离线状态或服务器无法正常工作。', - 'offline_github' => '如果您确信您的设备和服务器均正常在线运行,请在 GitHub 上创建工单。', - + 'collect_info' => '请在 storage/logs 目录中查找日志文件以获取更多信息。如果您正在使用 Docker,请使用 docker logs -f [container]。', + 'collect_info_more' => '您可以在常见问题解答阅读更多有关错误收集的信息。', + 'github_help' => '在 GitHub 上获取帮助', + 'github_instructions' => '欢迎您在 GitHub 创建工单。', + 'use_search' => '请善用搜索功能!', + 'include_info' => '请包含该调试页面的相关信息。', + 'tell_more' => '请提交给我们更多信息,而不仅仅是“网页提示说很抱歉”。', + 'include_logs' => '请包含错误日志(见上文)。', + 'what_did_you_do' => '告诉我们您进行了哪些操作。', + 'offline_header' => '您可能处于离线状态', + 'offline_unreachable' => '无法访问 Firefly III。您的设备目前处于离线状态或服务器无法正常工作。', + 'offline_github' => '如果您确信您的设备和服务器均正常在线运行,请在 GitHub 上创建工单。', ]; diff --git a/resources/lang/zh_CN/firefly.php b/resources/lang/zh_CN/firefly.php index 6fb6ea93e4..40ff177654 100644 --- a/resources/lang/zh_CN/firefly.php +++ b/resources/lang/zh_CN/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => '关闭', - 'actions' => '操作', - 'edit' => '编辑', - 'delete' => '删除', - 'split' => '拆分', - 'single_split' => '拆分', - 'clone' => '复制', - 'confirm_action' => '确认操作', - 'last_seven_days' => '最近 7 天', - 'last_thirty_days' => '最近 30 天', - 'last_180_days' => '最近 180 天', - 'month_to_date' => '本月至今', - 'year_to_date' => '本年至今', - 'YTD' => '本年至今', - 'welcome_back' => '今天理财了吗?', - 'everything' => '所有', - 'today' => '今天', - 'customRange' => '自定义范围', - 'date_range' => '日期范围', - 'apply' => '应用', - 'select_date' => '选择日期..', - 'cancel' => '取消', - 'from' => '自', - 'to' => '至', - 'structure' => '结构', - 'help_translating' => '帮助文本尚未提供您的语言的版本,您愿意协助翻译吗?', - 'showEverything' => '全部显示', - 'never' => '永不', - 'no_results_for_empty_search' => '您的搜索结果为空,找不到任何内容。', - 'removed_amount' => '已移除 :amount', - 'added_amount' => '已新增 :amount', - 'asset_account_role_help' => '基于您的选择而产生的额外选项,均可于事后调整。', - 'Opening balance' => '初始余额', - 'create_new_stuff' => '创建新内容', - 'new_withdrawal' => '新支出', - 'create_new_transaction' => '创建新交易', - 'sidebar_frontpage_create' => '创建', - 'new_transaction' => '新交易', - 'no_rules_for_bill' => '此账单没有与之相关的规则。', - 'go_to_asset_accounts' => '查看您的资产账户', - 'go_to_budgets' => '前往您的预算', - 'go_to_withdrawals' => '前往支出', - 'clones_journal_x' => '此交易是“:description” (#:id) 的复制版本', - 'go_to_categories' => '前往您的分类', - 'go_to_bills' => '前往账单', - 'go_to_expense_accounts' => '查看您的支出账户', - 'go_to_revenue_accounts' => '查看您的收入账户', - 'go_to_piggies' => '前往您的存钱罐', - 'new_deposit' => '新收入', - 'new_transfer' => '新转账', - 'new_transfers' => '新转账', - 'new_asset_account' => '新资产账户', - 'new_expense_account' => '新支出账户', - 'new_revenue_account' => '新收入账户', - 'new_liabilities_account' => '新债务账户', - 'new_budget' => '新预算', - 'new_bill' => '新账单', - 'block_account_logout' => '您已被强制退出登录,被封禁的帐户无法使用此站点。请确认您使用了有效的电子邮件地址进行注册。', - 'flash_success' => '成功!', - 'flash_info' => '提示', - 'flash_warning' => '警告!', - 'flash_error' => '错误!', - 'flash_danger' => '危险!', - 'flash_info_multiple' => '有1条消息|有:count条消息', - 'flash_error_multiple' => '有1个错误|有 :count 个错误', - 'net_worth' => '净资产', - 'help_for_this_page' => '本页说明', - 'help_for_this_page_body' => '你可以在文档中找到关于这个页面的更多信息。', - 'two_factor_welcome' => '您好!', - 'two_factor_enter_code' => '若要继续,请输入您的手机 App 为您生成的两步验证代码。', - 'two_factor_code_here' => '在此输入代码', - 'two_factor_title' => '两步验证', - 'authenticate' => '验证', - 'two_factor_forgot_title' => '遗失两步验证', - 'two_factor_forgot' => '我忘记了两步验证码', - 'two_factor_lost_header' => '遗失了您的两步验证吗?', - 'two_factor_lost_intro' => '如果您同时遗失了备份代码,很抱歉,您无法通过网页进行恢复。您可以通过下述方式进行操作。', - 'two_factor_lost_fix_self' => '如果这是您自己的 Firefly III 站点,请阅读FAQ页面中的此条目以获取更多帮助。', - 'two_factor_lost_fix_owner' => '如果这不是您自己的 Firefly III 站点,请邮件联系站点管理员(:site_owner)协助您重置两步验证。', - 'mfa_backup_code' => '您已使用备用代码登录到 Firefly III 。 您不能再使用它,因此请将其划掉。', - 'pref_two_factor_new_backup_codes' => '获取新的备份代码', - 'pref_two_factor_backup_code_count' => '您还有 :count 个可用的备份代码|您还有 :count 个可用的备份代码', - '2fa_i_have_them' => '我存下来了!', - 'warning_much_data' => ':days 天的数据需要一段时间加载。', - 'registered' => '您已成功注册!', - 'Default asset account' => '默认资产账户', - 'no_budget_pointer' => '您还没有预算,您应该在预算页面进行创建。预算可以帮助您追踪支出。', - 'no_bill_pointer' => '您还没有账单,您应该在账单页面进行创建。账单可以帮助您追踪支出。', - 'Savings account' => '储蓄账户', - 'Credit card' => '信用卡', - 'source_accounts' => '来源账户|来源账户', - 'destination_accounts' => '目标账户|目标账户', - 'user_id_is' => '您的帐户 ID 为 :user', - 'field_supports_markdown' => '此字段支持 Markdown 语法。', - 'need_more_help' => '如果您在使用 Firefly III 时需要获取更多帮助,请提交 GitHub 工单。', - 'reenable_intro_text' => '您也可以重置 页面引导流程。', - 'intro_boxes_after_refresh' => '当您重新整理页面后,介绍框将会重新出现。', - 'show_all_no_filter' => '显示所有交易,不以日期分组', - 'expenses_by_category' => '按分类的支出', - 'expenses_by_budget' => '按预算的支出', - 'income_by_category' => '按分类的收入', - 'expenses_by_asset_account' => '按资产账户的支出', - 'expenses_by_expense_account' => '按支出账户的支出', - 'cannot_redirect_to_account' => 'Firefly III 无法重新指向您至正确页面,抱歉。', - 'sum_of_expenses' => '支出总和', - 'sum_of_income' => '收入总和', - 'liabilities' => '债务', - 'spent_in_specific_budget' => '预算“:budget”的支出', - 'spent_in_specific_double' => '账户“:account”的支出', - 'earned_in_specific_double' => '“:account” 中的收入', - 'source_account' => '来源账户', - 'source_account_reconciliation' => '您不能编辑对账交易的来源账户。', - 'destination_account' => '目标账户', - 'destination_account_reconciliation' => '您不能编辑对账交易的目标账户', - 'sum_of_expenses_in_budget' => '预算“:budget”的总支出', - 'left_in_budget_limit' => '依照预算的支出尚余', - 'current_period' => '目前区间', - 'show_the_current_period_and_overview' => '显示目前区间与概览', - 'pref_languages_locale' => '若要正常使用英语外的语言,您的操作系统必须配置了正确的区域信息(locale-information)。若上述信息不存在,则货币数据、日期与金额可能出现格式错误。', - 'budget_in_period' => ':start – :end 预算“:name” (:currency) 的所有交易', - 'chart_budget_in_period' => ':start – :end 预算“:name” (:currency) 的所有交易图表', - 'chart_budget_in_period_only_currency' => '您的预算金额以 :currency 显示 ,因此此图表将以 :currency 显示交易。', - 'chart_account_in_period' => ':start – :end 账户“:name” (:balance) 的所有交易图表', - 'chart_category_in_period' => ':start – :end 分类“:name”的所有交易图表', - 'chart_category_all' => '分类「:name」的所有交易图表', - 'clone_withdrawal' => '复制此支出', - 'clone_deposit' => '复制此收入', - 'clone_transfer' => '复制此转账', - 'multi_select_no_selection' => '未选取', - 'multi_select_select_all' => '选取全部', - 'multi_select_n_selected' => '选取', - 'multi_select_all_selected' => '全部选取', - 'multi_select_filter_placeholder' => '查找…', - 'intro_next_label' => '下一个', - 'intro_prev_label' => '上一个', - 'intro_skip_label' => '跳过', - 'intro_done_label' => '完成', - 'between_dates_breadcrumb' => ':start – :end', - 'all_journals_without_budget' => '没有预算的所有交易', - 'journals_without_budget' => '没有预算的交易', - 'all_journals_without_category' => '没有类别的所有交易', - 'journals_without_category' => '没有类别的交易', - 'all_journals_for_account' => '账户“:name”的所有交易', - 'chart_all_journals_for_account' => '账户“:name”的所有交易图表', - 'journals_in_period_for_account' => ':start – :end 账户“:name”的所有交易', - 'journals_in_period_for_account_js' => '在 {start} 和 {end} 之间 {title} 账户的所有交易', - 'transferred' => '已转账', - 'all_withdrawal' => '所有支出', - 'all_transactions' => '所有交易', - 'title_withdrawal_between' => ':start – :end 的所有支出', - 'all_deposit' => '所有收入', - 'title_deposit_between' => ':start – :end 的所有收入', - 'all_transfers' => '所有转账', - 'title_transfers_between' => ':start – :end 的所有转账', - 'all_transfer' => '所有转账', - 'all_journals_for_tag' => '标签「:tag」的所有交易', - 'title_transfer_between' => ':start – :end 的所有转账', - 'all_journals_for_category' => '分类 :name 的所有交易', - 'all_journals_for_budget' => '预算 :name 的所有交易', - 'chart_all_journals_for_budget' => '预算 :name 的所有交易图表', - 'journals_in_period_for_category' => ':start – :end 分类“:name”的所有交易', - 'journals_in_period_for_tag' => ':start – :end 标签“:tag”的所有交易', - 'not_available_demo_user' => '您尝试使用的功能对演示用户不可用。', - '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' => '无效服务器设置', - 'invalid_locale_settings' => 'Firefly III 无法格式化货币金额,因为您的服务器缺少必要的软件包。查看 说明以解决该问题。', - 'quickswitch' => '快速切换', - 'sign_in_to_start' => '登录即可开始您的理财规划', - 'sign_in' => '登录', - 'register_new_account' => '注册新帐号', - 'forgot_my_password' => '忘记密码', - 'problems_with_input' => '你的输入有一些问题。', - 'reset_password' => '重设密码', - 'button_reset_password' => '重设密码', - 'reset_button' => '重置', - 'want_to_login' => '我想登录', - 'login_page_title' => '登录到Firefly III', - 'register_page_title' => '在 Firefly III 注册', - 'forgot_pw_page_title' => '忘记您 Firefly III 的密码', - 'reset_pw_page_title' => '重设您 Firefly III 的密码', - 'cannot_reset_demo_user' => '您不能重置演示用户的密码。', - 'no_att_demo_user' => '演示用户不能上传附件。', - 'button_register' => '注册帐号', - 'authorization' => '认证', - 'active_bills_only' => '仅包括已启用账单', - 'active_bills_only_total' => '所有已启用账单', - 'active_exp_bills_only' => '仅包括已启用和预期的账单', - 'active_exp_bills_only_total' => '所有已启用的预期账单', - 'per_period_sum_1D' => '预期每日支出', - 'per_period_sum_1W' => '预期每周支出', - 'per_period_sum_1M' => '预期每月支出', - 'per_period_sum_3M' => '预期每季度支出', - 'per_period_sum_6M' => '预期每半年支出', - 'per_period_sum_1Y' => '预期每年支出', - 'average_per_bill' => '每张账单平均值', - 'expected_total' => '期望总数', - 'reconciliation_account_name' => ':name 对账 (:currency)', - 'saved' => '已保存', - 'advanced_options' => '高级选项', - 'advanced_options_explain' => 'Firefly III 的部分页面将高级选项隐藏于此按钮中。当前页面没有需要额外查看的内容,但请一定要留意其他页面!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => '关闭', + 'actions' => '操作', + 'edit' => '编辑', + 'delete' => '删除', + 'split' => '拆分', + 'single_split' => '拆分', + 'clone' => '复制', + 'clone_and_edit' => '复制并编辑', + 'confirm_action' => '确认操作', + 'last_seven_days' => '最近 7 天', + 'last_thirty_days' => '最近 30 天', + 'last_180_days' => '最近 180 天', + 'month_to_date' => '本月至今', + 'year_to_date' => '本年至今', + 'YTD' => '本年至今', + 'welcome_back' => '今天理财了吗?', + 'everything' => '所有', + 'today' => '今天', + 'customRange' => '自定义范围', + 'date_range' => '日期范围', + 'apply' => '应用', + 'select_date' => '选择日期..', + 'cancel' => '取消', + 'from' => '自', + 'to' => '至', + 'structure' => '结构', + 'help_translating' => '帮助文本尚未提供您的语言的版本,您愿意协助翻译吗?', + 'showEverything' => '全部显示', + 'never' => '永不', + 'no_results_for_empty_search' => '您的搜索结果为空,找不到任何内容。', + 'removed_amount' => '已移除 :amount', + 'added_amount' => '已新增 :amount', + 'asset_account_role_help' => '基于您的选择而产生的额外选项,均可于事后调整。', + 'Opening balance' => '初始余额', + 'create_new_stuff' => '创建新内容', + 'new_withdrawal' => '新支出', + 'create_new_transaction' => '创建新交易', + 'sidebar_frontpage_create' => '创建', + 'new_transaction' => '新交易', + 'no_rules_for_bill' => '此账单没有与之相关的规则。', + 'go_to_asset_accounts' => '查看您的资产账户', + 'go_to_budgets' => '前往您的预算', + 'go_to_withdrawals' => '前往支出', + 'clones_journal_x' => '此交易是“:description” (#:id) 的复制版本', + 'go_to_categories' => '前往您的分类', + 'go_to_bills' => '前往账单', + 'go_to_expense_accounts' => '查看您的支出账户', + 'go_to_revenue_accounts' => '查看您的收入账户', + 'go_to_piggies' => '前往您的存钱罐', + 'new_deposit' => '新收入', + 'new_transfer' => '新转账', + 'new_transfers' => '新转账', + 'new_asset_account' => '新资产账户', + 'new_expense_account' => '新支出账户', + 'new_revenue_account' => '新收入账户', + 'new_liabilities_account' => '新债务账户', + 'new_budget' => '新预算', + 'new_bill' => '新账单', + 'block_account_logout' => '您已被强制退出登录,被封禁的帐户无法使用此站点。请确认您使用了有效的电子邮件地址进行注册。', + 'flash_success' => '成功!', + 'flash_info' => '提示', + 'flash_warning' => '警告!', + 'flash_error' => '错误!', + 'flash_danger' => '危险!', + 'flash_info_multiple' => '有1条消息|有:count条消息', + 'flash_error_multiple' => '有1个错误|有 :count 个错误', + 'net_worth' => '净资产', + 'help_for_this_page' => '本页说明', + 'help_for_this_page_body' => '你可以在文档中找到关于这个页面的更多信息。', + 'two_factor_welcome' => '您好!', + 'two_factor_enter_code' => '若要继续,请输入您的手机 App 为您生成的两步验证代码。', + 'two_factor_code_here' => '在此输入代码', + 'two_factor_title' => '两步验证', + 'authenticate' => '验证', + 'two_factor_forgot_title' => '遗失两步验证', + 'two_factor_forgot' => '我忘记了两步验证码', + 'two_factor_lost_header' => '遗失了您的两步验证吗?', + 'two_factor_lost_intro' => '如果您同时遗失了备份代码,很抱歉,您无法通过网页进行恢复。您可以通过下述方式进行操作。', + 'two_factor_lost_fix_self' => '若您自行运行 Firefly III 服务,查看 :site_owner)协助您重置两步验证。', + 'mfa_backup_code' => '您已使用备用代码登录到 Firefly III 。 您不能再使用它,因此请将其划掉。', + 'pref_two_factor_new_backup_codes' => '获取新的备份代码', + 'pref_two_factor_backup_code_count' => '您还有 :count 个可用的备份代码|您还有 :count 个可用的备份代码', + '2fa_i_have_them' => '我存下来了!', + 'warning_much_data' => ':days 天的数据需要一段时间加载。', + 'registered' => '您已成功注册!', + 'Default asset account' => '默认资产账户', + 'no_budget_pointer' => '您还没有预算,您应该在预算页面进行创建。预算可以帮助您追踪支出。', + 'no_bill_pointer' => '您还没有账单,您应该在账单页面进行创建。账单可以帮助您追踪支出。', + 'Savings account' => '储蓄账户', + 'Credit card' => '信用卡', + 'source_accounts' => '来源账户|来源账户', + 'destination_accounts' => '目标账户|目标账户', + 'user_id_is' => '您的帐户 ID 为 :user', + 'field_supports_markdown' => '此字段支持 Markdown 语法。', + 'need_more_help' => '如果您在使用 Firefly III 时需要获取更多帮助,请提交 GitHub 工单。', + 'reenable_intro_text' => '您也可以重置 页面引导流程。', + 'intro_boxes_after_refresh' => '当您重新整理页面后,介绍框将会重新出现。', + 'show_all_no_filter' => '显示所有交易,不以日期分组', + 'expenses_by_category' => '按分类的支出', + 'expenses_by_budget' => '按预算的支出', + 'income_by_category' => '按分类的收入', + 'expenses_by_asset_account' => '按资产账户的支出', + 'expenses_by_expense_account' => '按支出账户的支出', + 'cannot_redirect_to_account' => 'Firefly III 无法重新指向您至正确页面,抱歉。', + 'sum_of_expenses' => '支出总和', + 'sum_of_income' => '收入总和', + 'liabilities' => '债务', + 'spent_in_specific_budget' => '预算“:budget”的支出', + 'spent_in_specific_double' => '账户“:account”的支出', + 'earned_in_specific_double' => '“:account” 中的收入', + 'source_account' => '来源账户', + 'source_account_reconciliation' => '您不能编辑对账交易的来源账户。', + 'destination_account' => '目标账户', + 'destination_account_reconciliation' => '您不能编辑对账交易的目标账户', + 'sum_of_expenses_in_budget' => '预算“:budget”的总支出', + 'left_in_budget_limit' => '依照预算的支出尚余', + 'current_period' => '目前区间', + 'show_the_current_period_and_overview' => '显示目前区间与概览', + 'pref_languages_locale' => '若要正常使用英语外的语言,您的操作系统必须配置了正确的区域信息(locale-information)。若上述信息不存在,则货币数据、日期与金额可能出现格式错误。', + 'budget_in_period' => ':start – :end 预算“:name” (:currency) 的所有交易', + 'chart_budget_in_period' => ':start – :end 预算“:name” (:currency) 的所有交易图表', + 'chart_budget_in_period_only_currency' => '您的预算金额以 :currency 显示 ,因此此图表将以 :currency 显示交易。', + 'chart_account_in_period' => ':start – :end 账户“:name” (:balance) 的所有交易图表', + 'chart_category_in_period' => ':start – :end 分类“:name”的所有交易图表', + 'chart_category_all' => '分类「:name」的所有交易图表', + 'clone_withdrawal' => '复制此支出', + 'clone_deposit' => '复制此收入', + 'clone_transfer' => '复制此转账', + 'multi_select_no_selection' => '未选取', + 'multi_select_select_all' => '选取全部', + 'multi_select_n_selected' => '选取', + 'multi_select_all_selected' => '全部选取', + 'multi_select_filter_placeholder' => '查找…', + 'intro_next_label' => '下一个', + 'intro_prev_label' => '上一个', + 'intro_skip_label' => '跳过', + 'intro_done_label' => '完成', + 'between_dates_breadcrumb' => ':start – :end', + 'all_journals_without_budget' => '没有预算的所有交易', + 'journals_without_budget' => '没有预算的交易', + 'all_journals_without_category' => '没有类别的所有交易', + 'journals_without_category' => '没有类别的交易', + 'all_journals_for_account' => '账户“:name”的所有交易', + 'chart_all_journals_for_account' => '账户“:name”的所有交易图表', + 'journals_in_period_for_account' => ':start – :end 账户“:name”的所有交易', + 'journals_in_period_for_account_js' => '在 {start} 和 {end} 之间 {title} 账户的所有交易', + 'transferred' => '已转账', + 'all_withdrawal' => '所有支出', + 'all_transactions' => '所有交易', + 'title_withdrawal_between' => ':start – :end 的所有支出', + 'all_deposit' => '所有收入', + 'title_deposit_between' => ':start – :end 的所有收入', + 'all_transfers' => '所有转账', + 'title_transfers_between' => ':start – :end 的所有转账', + 'all_transfer' => '所有转账', + 'all_journals_for_tag' => '标签「:tag」的所有交易', + 'title_transfer_between' => ':start – :end 的所有转账', + 'all_journals_for_category' => '分类 :name 的所有交易', + 'all_journals_for_budget' => '预算 :name 的所有交易', + 'chart_all_journals_for_budget' => '预算 :name 的所有交易图表', + 'journals_in_period_for_category' => ':start – :end 分类“:name”的所有交易', + 'journals_in_period_for_tag' => ':start – :end 标签“:tag”的所有交易', + 'not_available_demo_user' => '您尝试使用的功能对演示用户不可用。', + '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' => '无效服务器设置', + 'invalid_locale_settings' => 'Fifly III 无法格式化货币金额,因为您的服务器缺少所需的软件包。 操作指示', + 'quickswitch' => '快速切换', + 'sign_in_to_start' => '登录即可开始您的理财规划', + 'sign_in' => '登录', + 'register_new_account' => '注册新帐号', + 'forgot_my_password' => '忘记密码', + 'problems_with_input' => '你的输入有一些问题。', + 'reset_password' => '重设密码', + 'button_reset_password' => '重设密码', + 'reset_button' => '重置', + 'want_to_login' => '我想登录', + 'login_page_title' => '登录到Firefly III', + 'register_page_title' => '在 Firefly III 注册', + 'forgot_pw_page_title' => '忘记您 Firefly III 的密码', + 'reset_pw_page_title' => '重设您 Firefly III 的密码', + 'cannot_reset_demo_user' => '您不能重置演示用户的密码。', + 'no_att_demo_user' => '演示用户不能上传附件。', + 'button_register' => '注册帐号', + 'authorization' => '认证', + 'active_bills_only' => '仅包括已启用账单', + 'active_bills_only_total' => '所有已启用账单', + 'active_exp_bills_only' => '仅包括已启用和预期的账单', + 'active_exp_bills_only_total' => '所有已启用的预期账单', + 'per_period_sum_1D' => '预期每日支出', + 'per_period_sum_1W' => '预期每周支出', + 'per_period_sum_1M' => '预期每月支出', + 'per_period_sum_3M' => '预期每季度支出', + 'per_period_sum_6M' => '预期每半年支出', + 'per_period_sum_1Y' => '预期每年支出', + 'average_per_bill' => '每张账单平均值', + 'expected_total' => '期望总数', + 'reconciliation_account_name' => ':name 对账 (:currency)', + 'saved' => '已保存', + 'advanced_options' => '高级选项', + 'advanced_options_explain' => 'Firefly III 的部分页面将高级选项隐藏于此按钮中。当前页面没有需要额外查看的内容,但请一定要留意其他页面!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => '没有 Webhook 消息', - 'webhook_trigger_STORE_TRANSACTION' => '交易创建后', - 'webhook_trigger_UPDATE_TRANSACTION' => '交易更新后', - 'webhook_trigger_DESTROY_TRANSACTION' => '交易删除后', - 'webhook_response_TRANSACTIONS' => '交易详情', - 'webhook_response_ACCOUNTS' => '账户详情', - 'webhook_response_none_NONE' => '无详细信息', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => '检查', - 'create_new_webhook' => '创建新 Webhook', - 'webhooks_create_breadcrumb' => '创建新 Webhook', - 'webhook_trigger_form_help' => '推送事件发生时的触发条件', - 'webhook_response_form_help' => '推送必须提交给URL的内容', - 'webhook_delivery_form_help' => '推送采用哪种格式发送数据', - 'webhook_active_form_help' => 'Webhook 必须是激活状态,否则不会被调用。', - 'stored_new_webhook' => '新的 webhook “:title” 已保存', - 'delete_webhook' => '删除 Webhook', - 'deleted_webhook' => '已删除 webhook “:title”', - 'edit_webhook' => '编辑 webhook “:title”', - 'updated_webhook' => '已更新 webhook “:title”', - 'edit_webhook_js' => '编辑 webhook “{title}”', - 'show_webhook' => 'Webhook “:title”', - 'webhook_was_triggered' => '在指定的交易中触发了推送,请等待显示结果', - 'webhook_messages' => 'Webhook 消息', - 'view_message' => '查看消息', - 'view_attempts' => '查看失败的尝试', - 'message_content_title' => 'Webhook 消息内容', - 'message_content_help' => '这是使用推送发送(或尝试)的消息内容', - 'attempt_content_title' => 'Webhook 尝试', - 'attempt_content_help' => '这是提交至配置网址的webhook消息的所有失败请求,一段时间后,Firefly III 将停止尝试。', - 'no_attempts' => '所有尝试均已成功完成。好极了!', - 'webhook_attempt_at' => '尝试于 {moment}', - 'logs' => '日志', - 'response' => '响应', - 'visit_webhook_url' => '访问 webhook URL', - 'reset_webhook_secret' => '重置 webhook 密钥', - 'webhook_stored_link' => '推送 #{ID} ("{title}") 已保存.', - 'webhook_updated_link' => '推送 #{ID} ("{title}") 已更新.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => '已禁用', + 'no_webhook_messages' => '没有 Webhook 消息', + 'webhook_trigger_STORE_TRANSACTION' => '交易创建后', + 'webhook_trigger_UPDATE_TRANSACTION' => '交易更新后', + 'webhook_trigger_DESTROY_TRANSACTION' => '交易删除后', + 'webhook_response_TRANSACTIONS' => '交易详情', + 'webhook_response_ACCOUNTS' => '账户详情', + 'webhook_response_none_NONE' => '无详细信息', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => '检查', + 'create_new_webhook' => '创建新 Webhook', + 'webhooks_create_breadcrumb' => '创建新 Webhook', + 'webhook_trigger_form_help' => '推送事件发生时的触发条件', + 'webhook_response_form_help' => '推送必须提交给URL的内容', + 'webhook_delivery_form_help' => '推送采用哪种格式发送数据', + 'webhook_active_form_help' => 'Webhook 必须是激活状态,否则不会被调用。', + 'stored_new_webhook' => '新的 webhook “:title” 已保存', + 'delete_webhook' => '删除 Webhook', + 'deleted_webhook' => '已删除 webhook “:title”', + 'edit_webhook' => '编辑 webhook “:title”', + 'updated_webhook' => '已更新 webhook “:title”', + 'edit_webhook_js' => '编辑 webhook “{title}”', + 'show_webhook' => 'Webhook “:title”', + 'webhook_was_triggered' => '在指定的交易中触发了推送,请等待显示结果', + 'webhook_messages' => 'Webhook 消息', + 'view_message' => '查看消息', + 'view_attempts' => '查看失败的尝试', + 'message_content_title' => 'Webhook 消息内容', + 'message_content_help' => '这是使用推送发送(或尝试)的消息内容', + 'attempt_content_title' => 'Webhook 尝试', + 'attempt_content_help' => '这是提交至配置网址的webhook消息的所有失败请求,一段时间后,Firefly III 将停止尝试。', + 'no_attempts' => '所有尝试均已成功完成。好极了!', + 'webhook_attempt_at' => '尝试于 {moment}', + 'logs' => '日志', + 'response' => '响应', + 'visit_webhook_url' => '访问 webhook URL', + 'reset_webhook_secret' => '重置 webhook 密钥', + 'webhook_stored_link' => '推送 #{ID} ("{title}") 已保存.', + 'webhook_updated_link' => '推送 #{ID} ("{title}") 已更新.', // API access - 'authorization_request' => 'Firefly III :version 版授权请求', - 'authorization_request_intro' => '应用 ":client" 正在请求权限以访问您的财务管理功能。是否授权 :client 访问这些记录?', - 'authorization_request_site' => '您将被重定向到 :url ,然后就能够访问您的 Firefly III 数据。', - 'authorization_request_invalid' => '此访问请求无效。请不要再次使用此链接。', - 'scopes_will_be_able' => '此应用可以:', - 'button_authorize' => '授权', - 'none_in_select_list' => '(空)', - 'no_piggy_bank' => '(无存钱罐)', - 'name_in_currency' => ':name 于 :currency', - 'paid_in_currency' => '以 :currency 支付', - 'unpaid_in_currency' => '未以 :currency 支付', - 'is_alpha_warning' => '您正在运行 ALPHA 版本。请注意错误和问题。', - 'is_beta_warning' => '您正在运行 BETA 版本。请注意错误和问题。', - 'all_destination_accounts' => '目标账户', - 'all_source_accounts' => '来源账户', - 'back_to_index' => '返回列表 ', - 'cant_logout_guard' => 'Firefly III 无法退出登录。', - 'internal_reference' => '内部引用', + 'authorization_request' => 'Firefly III :version 版授权请求', + 'authorization_request_intro' => '应用 ":client" 正在请求权限以访问您的财务管理功能。是否授权 :client 访问这些记录?', + 'authorization_request_site' => '您将被重定向到 :url ,然后就能够访问您的 Firefly III 数据。', + 'authorization_request_invalid' => '此访问请求无效。请不要再次使用此链接。', + 'scopes_will_be_able' => '此应用可以:', + 'button_authorize' => '授权', + 'none_in_select_list' => '(空)', + 'no_piggy_bank' => '(无存钱罐)', + 'name_in_currency' => ':name 于 :currency', + 'paid_in_currency' => '以 :currency 支付', + 'unpaid_in_currency' => '未以 :currency 支付', + 'is_alpha_warning' => '您正在运行 ALPHA 版本。请注意错误和问题。', + 'is_beta_warning' => '您正在运行 BETA 版本。请注意错误和问题。', + 'all_destination_accounts' => '目标账户', + 'all_source_accounts' => '来源账户', + 'back_to_index' => '返回列表 ', + 'cant_logout_guard' => 'Firefly III 无法退出登录。', + 'internal_reference' => '内部引用', // check for updates: - 'update_check_title' => '检查更新', - 'admin_update_check_title' => '自动检查更新', - 'admin_update_check_explain' => 'Firefly III 可以自动检查更新。当您启用此设置时,它将与 Firefly III 更新服务器通讯,查看是否有新版本的 Firefly III。当有新版时,您将收到通知。您可以使用右边的按钮测试此通知。请在下面选择您是否希望 Firefly III 检查更新。', - 'check_for_updates_permission' => 'Firefly III 可自动检查更新,但此功能需要您的许可。请前往管理页面确认您是否需要启用此功能。', - 'updates_ask_me_later' => '稍后再次询问', - 'updates_do_not_check' => '不检查更新', - 'updates_enable_check' => '启用检查更新', - 'admin_update_check_now_title' => '立即检查更新', - 'admin_update_check_now_explain' => '如果您点击此按钮,Firefly III 将会检查您现在的版本是否为最新版。', - 'check_for_updates_button' => '立即检查!', - 'update_new_version_alert' => '发现可用的 Firefly III 新版本,您正在运行的版本是 :your_version,最新版本是 :new_version(发布于 :date)。', - 'update_version_beta' => '此版本是 BETA 版本。您可能会遇到问题。', - 'update_version_alpha' => '此版本是 ALPHA 版本。您可能会遇到问题。', - 'update_current_version_alert' => '您正在运行 :version,这是最新的可用版本。', - 'update_newer_version_alert' => '您正在运行 :your_version,它比最新发布的 :new_version 更新。', - 'update_check_error' => '检查更新时发生错误::error', - 'unknown_error' => '未知错误。抱歉。', - 'just_new_release' => '有新版本可用!版本 :version 发布于 :date。这个版本非常新,等待几天后新版本才能稳定。', - 'disabled_but_check' => '您已禁用更新检查。所以请不要忘记手动检查更新。谢谢!', - 'admin_update_channel_title' => '更新通道', - 'admin_update_channel_explain' => 'Firefly III 具有三个更新“通道”,其决定了您在功能、改进和错误修正方面的不同体验。如果您喜欢冒险,请使用“beta”通道;如果您不惧危险,请使用“alpha”通道。', - 'update_channel_stable' => '稳定版,所有功能可以正常运行', - 'update_channel_beta' => 'Beta版,拥有新功能但可能崩溃', - 'update_channel_alpha' => 'Alpha版,随时添加新功能,可能出现未知问题', + 'update_check_title' => '检查更新', + 'admin_update_check_title' => '自动检查更新', + 'admin_update_check_explain' => 'Firefly III 可以自动检查更新。当您启用此设置时,它将与 Firefly III 更新服务器通讯,查看是否有新版本的 Firefly III。当有新版时,您将收到通知。您可以使用右边的按钮测试此通知。请在下面选择您是否希望 Firefly III 检查更新。', + 'check_for_updates_permission' => 'Firefly III 可自动检查更新,但此功能需要您的许可。请前往管理页面确认您是否需要启用此功能。', + 'updates_ask_me_later' => '稍后再次询问', + 'updates_do_not_check' => '不检查更新', + 'updates_enable_check' => '启用检查更新', + 'admin_update_check_now_title' => '立即检查更新', + 'admin_update_check_now_explain' => '如果您点击此按钮,Firefly III 将会检查您现在的版本是否为最新版。', + 'check_for_updates_button' => '立即检查!', + 'update_new_version_alert' => '发现可用的 Firefly III 新版本,您正在运行的版本是 :your_version,最新版本是 :new_version(发布于 :date)。', + 'update_version_beta' => '此版本是 BETA 版本。您可能会遇到问题。', + 'update_version_alpha' => '此版本是 ALPHA 版本。您可能会遇到问题。', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => '您正在运行 :version,这是最新的可用版本。', + 'update_newer_version_alert' => '您正在运行 :your_version,它比最新发布的 :new_version 更新。', + 'update_check_error' => '检查更新时发生错误::error', + 'unknown_error' => '未知错误。抱歉。', + 'disabled_but_check' => '您已禁用更新检查。所以请不要忘记手动检查更新。谢谢!', + 'admin_update_channel_title' => '更新通道', + 'admin_update_channel_explain' => 'Firefly III 具有三个更新“通道”,其决定了您在功能、改进和错误修正方面的不同体验。如果您喜欢冒险,请使用“beta”通道;如果您不惧危险,请使用“alpha”通道。', + 'update_channel_stable' => '稳定版,所有功能可以正常运行', + 'update_channel_beta' => 'Beta版,拥有新功能但可能崩溃', + 'update_channel_alpha' => 'Alpha版,随时添加新功能,可能出现未知问题', // search - 'search' => '搜索', - 'search_query' => '搜索语句', - 'search_found_transactions' => 'Firefly III 找到 :count 条交易,用时 :time 秒。|Firefly III 找到 :count 条交易,用时 :time 秒。', - 'search_found_more_transactions' => 'Firefly III 找到超过 :count 条交易,用时 :time 秒。', - 'search_for_query' => 'Firefly III 正在搜索包含 :query 的交易', - 'invalid_operators_list' => '搜索参数无效,已忽略。', + 'search' => '搜索', + 'search_query' => '搜索语句', + 'search_found_transactions' => 'Firefly III 找到 :count 条交易,用时 :time 秒。|Firefly III 找到 :count 条交易,用时 :time 秒。', + 'search_found_more_transactions' => 'Firefly III 找到超过 :count 条交易,用时 :time 秒。', + 'search_for_query' => 'Firefly III 正在搜索包含 :query 的交易', + 'invalid_operators_list' => '搜索参数无效,已忽略。', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,7 +351,6 @@ return [ * */ - 'search_modifier_date_on' => '交易日期为 “:value”', 'search_modifier_not_date_on' => '交易日期不为 “:value”', 'search_modifier_reconciled' => '交易已对账', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => '交易类型是“:value”', 'search_modifier_not_transaction_type' => '交易类型不为“:value”', 'search_modifier_tag_is' => '标签是“:value”', + 'search_modifier_tag_contains' => '标签包含":value"', + 'search_modifier_not_tag_contains' => '标签不包含 ":value"', + 'search_modifier_tag_ends' => '标注以 ":value " 结束', + 'search_modifier_tag_starts' => '标签以“:value”开始', 'search_modifier_not_tag_is' => '标签不为":value"', 'search_modifier_date_on_year' => '交易年份是 ":value"', 'search_modifier_not_date_on_year' => '交易年份不是 ":value"', @@ -482,26 +487,25 @@ return [ 'search_modifier_date_after_month' => '交易在月内或月后“:value”', 'search_modifier_date_after_day' => '交易为月中第“:value”天或之后', - // new 'search_modifier_tag_is_not' => '没有标签是 ":value"', 'search_modifier_not_tag_is_not' => '标签是“:value”', 'search_modifier_account_is' => '其中一个账户为":value"', 'search_modifier_not_account_is' => '两个帐户都不是 ":value"', 'search_modifier_account_contains' => '其中一个账户包含":value"', - 'search_modifier_not_account_contains' => '两个帐户都包含 ":value"', + 'search_modifier_not_account_contains' => '两个帐户都不包含 ":value"', 'search_modifier_account_ends' => '其中一个账户结尾为 ":value"', - 'search_modifier_not_account_ends' => '其中一个账户结尾是":value"', + 'search_modifier_not_account_ends' => '两个账户的结尾都不是":value"', 'search_modifier_account_starts' => '其中一个账户开头为":value"', - 'search_modifier_not_account_starts' => '其中一个账户的开头是":value"', + 'search_modifier_not_account_starts' => '两个账户的开头都不是":value"', 'search_modifier_account_nr_is' => '其中一个账户编号/IBAN为":value"', - 'search_modifier_not_account_nr_is' => '其中一个账户编号/IBAN是":value"', + 'search_modifier_not_account_nr_is' => '两个账户的编号/IBAN都不是":value"', 'search_modifier_account_nr_contains' => '其中一个账户编号/IBAN包含":value"', - 'search_modifier_not_account_nr_contains' => '其中一个账户编号/IBAN包含":value"', + 'search_modifier_not_account_nr_contains' => '两个账户的编号/IBAN都不包含":value"', 'search_modifier_account_nr_ends' => '其中一个账户编号/IBAN结尾为":value"', - 'search_modifier_not_account_nr_ends' => '其中一个账户编号/IBAN结尾是":value"', + 'search_modifier_not_account_nr_ends' => '两个账户的编号/IBAN结尾都不是":value"', 'search_modifier_account_nr_starts' => '其中一个账户编号/IBAN开头为":value"', - 'search_modifier_not_account_nr_starts' => '其中一个账户编号/IBAN开头是":value"', + 'search_modifier_not_account_nr_starts' => '两个账户的编号/IBAN开头都不是":value"', 'search_modifier_category_contains' => '分类包含":value"', 'search_modifier_not_category_contains' => '分类不包含":value"', 'search_modifier_category_ends' => '分类结尾为“:value”', @@ -544,7 +548,7 @@ return [ 'search_modifier_not_has_no_attachments' => '交易包含附件', 'search_modifier_not_has_attachments' => '交易没有附件', 'search_modifier_account_is_cash' => '其中一个账户为现金账户', - 'search_modifier_not_account_is_cash' => '两个账户都不为现金账户', + 'search_modifier_not_account_is_cash' => '两个账户都不是现金账户', 'search_modifier_journal_id' => '日志ID是":value"', 'search_modifier_not_journal_id' => '日志ID不是":value"', 'search_modifier_recurrence_id' => '定期交易ID为":value"', @@ -710,7 +714,7 @@ return [ 'create_rule_from_query' => '从搜索语句创建新规则', 'rule_from_search_words' => '规则引擎无法处理“:string”。符合搜索语句的建议规则可能会给出不同的结果,请仔细确认规则触发条件。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => '搜索结果同时包含以下内容:', 'general_search_error' => '搜索时出错。请检查日志文件以获取更多信息。', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => '相反', 'cannot_fire_inactive_rules' => '您不能执行已停用的规则。', + 'show_triggers' => '显示触发器', + 'show_actions' => '显示动作', 'rules' => '规则', 'rule_name' => '规则名称', 'rule_triggers' => '规则触发于', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => '当交易更新时', 'rule_trigger_user_action' => '用户动作为“:trigger_value”', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => '来源账户名称开头为...', 'rule_trigger_source_account_starts' => '来源账户名称开头为“:trigger_value”', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => '预算为 ":trigger_value"', 'rule_trigger_tag_is_choice' => '其中一个标签为...', 'rule_trigger_tag_is' => '其中一个标签为":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => '交易货币为…', 'rule_trigger_currency_is' => '交易货币为“:trigger_value”', 'rule_trigger_foreign_currency_is_choice' => '交易外币为...', @@ -1111,14 +1121,14 @@ return [ 'rule_trigger_not_destination_account_nr_contains' => '目标账户编号 / IBAN 不含":trigger_value"', 'rule_trigger_not_destination_account_nr_ends' => '目标账户编号 / IBAN 结尾不为":trigger_value"', 'rule_trigger_not_destination_account_nr_starts' => '目标账户编号 / IBAN 开头不为":trigger_value"', - 'rule_trigger_not_account_is' => '其中一个账户为":trigger_value"', - 'rule_trigger_not_account_contains' => '其中一个账户包含":trigger_value"', - 'rule_trigger_not_account_ends' => '其中一个账户结尾为":trigger_value"', - 'rule_trigger_not_account_starts' => '其中一个账户开头为":trigger_value"', - 'rule_trigger_not_account_nr_is' => '其中一个账户编号 / IBAN 为":trigger_value"', - 'rule_trigger_not_account_nr_contains' => '其中一个账户编号 / IBAN 包含":trigger_value"', - 'rule_trigger_not_account_nr_ends' => '其中一个账户编号 / IBAN 结尾为":trigger_value"', - 'rule_trigger_not_account_nr_starts' => '其中一个账户编号 / IBAN 开头为":trigger_value"', + 'rule_trigger_not_account_is' => '两个账户都不是":trigger_value"', + 'rule_trigger_not_account_contains' => '两个账户都不包含":trigger_value"', + 'rule_trigger_not_account_ends' => '两个账户的结尾都不是":trigger_value"', + 'rule_trigger_not_account_starts' => '两个账户的开头都不是":trigger_value"', + 'rule_trigger_not_account_nr_is' => '两个账户的编号/IBAN都不是":trigger_value"', + 'rule_trigger_not_account_nr_contains' => '两个账户的编号/IBAN都不包含":trigger_value"', + 'rule_trigger_not_account_nr_ends' => '两个账户的编号/IBAN结尾都不是":trigger_value"', + 'rule_trigger_not_account_nr_starts' => '两个账户的编号/IBAN开头都不是":trigger_value"', 'rule_trigger_not_category_is' => '分类不为":trigger_value"', 'rule_trigger_not_category_contains' => '分类不含":trigger_value"', 'rule_trigger_not_category_ends' => '分类结尾不为":trigger_value"', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => '交易不存在', 'rule_trigger_not_has_attachments' => '交易不含附件', 'rule_trigger_not_has_any_category' => '交易不含分类', - 'rule_trigger_not_has_any_budget' => '交易不含分类', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => '交易不含账单', 'rule_trigger_not_has_any_tag' => '交易不含标签', 'rule_trigger_not_any_notes' => '交易不含备注', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => '目标账户不为现金账户', 'rule_trigger_not_account_is_cash' => '两个账户都不是现金账户', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => '删除交易!', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => '在描述后追加备注', 'rule_action_move_descr_to_notes' => '用描述替换备注', 'rule_action_move_notes_to_descr' => '用备注替换描述', + 'rule_action_set_destination_to_cash_choice' => '将目标帐户设置为 (现金)', + 'rule_action_set_source_to_cash_choice' => '将源账户设置为 (现金)', 'rulegroup_for_bills_title' => '账单规则组', 'rulegroup_for_bills_description' => '一个特殊的规则组,用于所有包含账单的规则。', 'rule_for_bill_title' => '自动生成账单规则“:name”', @@ -1286,252 +1297,254 @@ return [ 'new_rule_for_bill_title' => '账单“:name”的规则', 'new_rule_for_bill_description' => '此规则标记用于账单“:name”的交易。', - 'new_rule_for_journal_title' => '基于交易":description"的规则', - 'new_rule_for_journal_description' => '此规则基于交易“:description”,它将匹配完全相同的交易。', + 'new_rule_for_journal_title' => '基于交易":description"的规则', + 'new_rule_for_journal_description' => '此规则基于交易“:description”,它将匹配完全相同的交易。', // tags - 'store_new_tag' => '保存新标签', - 'update_tag' => '更新标签', - 'no_location_set' => '没有设定位置。', - 'meta_data' => '后设资料', - 'location' => '位置', - 'without_date' => '不含日期', - 'result' => '结果', - 'sums_apply_to_range' => '所有总和均应用至所选范围', - 'mapbox_api_key' => '若要使用地图,请从 Mapbox 获取 API 密钥。打开 .env 文件并在 MAPBOX_API_KEY= 后输入密钥。', - 'press_object_location' => '右键单击或长按设置对象的位置。', - 'clear_location' => '清除位置', - 'delete_all_selected_tags' => '删除所有选中的标签', - 'select_tags_to_delete' => '别忘了选择一些标签。', - 'deleted_x_tags' => '已删除 :count 个标签。|已删除 :count 个标签。', - 'create_rule_from_transaction' => '基于交易创建规则', - 'create_recurring_from_transaction' => '从交易创建定期交易', - + 'store_new_tag' => '保存新标签', + 'update_tag' => '更新标签', + 'no_location_set' => '没有设定位置。', + 'meta_data' => '后设资料', + 'location' => '位置', + 'location_first_split' => '交易的位置可以设置在此交易的第一个拆分。', + 'without_date' => '不含日期', + 'result' => '结果', + 'sums_apply_to_range' => '所有总和均应用至所选范围', + 'mapbox_api_key' => '若要使用地图,请从 Mapbox 获取 API 密钥。打开 .env 文件并在 MAPBOX_API_KEY= 后输入密钥。', + 'press_object_location' => '右键单击或长按设置对象的位置。', + 'click_tap_location' => '点击或点击地图添加位置', + 'clear_location' => '清除位置', + 'delete_all_selected_tags' => '删除所有选中的标签', + 'select_tags_to_delete' => '别忘了选择一些标签。', + 'deleted_x_tags' => '已删除 :count 个标签。|已删除 :count 个标签。', + 'create_rule_from_transaction' => '基于交易创建规则', + 'create_recurring_from_transaction' => '从交易创建定期交易', // preferences - 'dark_mode_option_browser' => '让您的浏览器决定', - 'dark_mode_option_light' => '始终使用亮色', - 'dark_mode_option_dark' => '始终使用暗色', - 'equal_to_language' => '(与语言相同)', - 'dark_mode_preference' => '暗色模式', - 'dark_mode_preference_help' => '告诉 Firefly III 何时使用暗色模式。', - 'pref_home_screen_accounts' => '主屏幕账户', - 'pref_home_screen_accounts_help' => '哪些账户应该显示在主屏幕上?', - 'pref_view_range' => '查看范围', - 'pref_view_range_help' => '部分图表自动按照周期分组,您的预算也将按照周期分组。请问您倾向于哪个周期?', - 'pref_1D' => '1天', - 'pref_1W' => '1周', - 'pref_1M' => '1个月', - 'pref_3M' => '3个月 (1季度)', - 'pref_6M' => '6个月', - 'pref_1Y' => '1年', - 'pref_last365' => '最近一年', - 'pref_last90' => '最近90天', - 'pref_last30' => '最近 30 天', - 'pref_last7' => '最近7天', - 'pref_YTD' => '今年至今', - 'pref_QTD' => '本季度至今', - 'pref_MTD' => '本月至今', - 'pref_languages' => '语言', - 'pref_locale' => '区域设置', - 'pref_languages_help' => 'Firefly III 支持多语言,请问您倾向于哪个语言?', - 'pref_locale_help' => 'Firefly III 允许您配置其他本地设置,例如货币、数字、日期的格式。您的系统可能不支持此列表中的某些条目。Firefly III 没有为每个区域设置正确的日期格式;请联系开发者进行改进。', - 'pref_locale_no_demo' => '此功能对演示用户无效。', - 'pref_custom_fiscal_year' => '财年设置', - 'pref_custom_fiscal_year_label' => '已启用', - 'pref_custom_fiscal_year_help' => '在不使用1月1日至12月31日作为财年的国家,您可开启此功能并指定财年的起止日期。', - 'pref_fiscal_year_start_label' => '财政年度开始日期', - 'pref_two_factor_auth' => '两步验证', - 'pref_two_factor_auth_help' => '启用两步验证 (或双重验证) 可为您的帐户增加一层额外的安全防护,您将以已知的信息 (您的密码) 和已有的信息 (验证码) 进行登录。验证码由您的手机 App 生成,例如 Authy 或 Google Authenticator。', - 'pref_enable_two_factor_auth' => '启用两步验证', - 'pref_two_factor_auth_disabled' => '两步验证码已删除且停用', - 'pref_two_factor_auth_remove_it' => '请不要忘记从您的身份验证 APP 上删除账户!', - 'pref_two_factor_auth_code' => '验证码', - 'pref_two_factor_auth_code_help' => '请使用手机 App(例如 Authy 或 Google Authenticator)扫描二维码,并输入生成的代码。', - 'pref_two_factor_auth_reset_code' => '重置验证码', - 'pref_two_factor_auth_disable_2fa' => '停用两步验证', - '2fa_use_secret_instead' => '如果您无法扫描 QR 码,请使用密钥: :secret。', - '2fa_backup_codes' => '保存这些备份代码,以便在您丢失设备时访问。', - '2fa_already_enabled' => '2步验证已启用。', - 'wrong_mfa_code' => '此MFA代码无效。', - 'pref_save_settings' => '保存设置', - 'saved_preferences' => '偏好设定已保存!', - 'preferences_general' => '通用', - 'preferences_frontpage' => '主屏幕', - 'preferences_security' => '安全性', - 'preferences_layout' => '布局', - 'preferences_notifications' => '通知', - 'pref_home_show_deposits' => '在主屏幕显示收入', - 'pref_home_show_deposits_info' => '主屏幕已显示您的支出账户,是否同时显示您的收入账户?', - 'pref_home_do_show_deposits' => '是,要显示', - 'successful_count' => ':count 项成功', - 'list_page_size_title' => '页面大小', - 'list_page_size_help' => '任何项目 (账户、交易等) 的列表每页最多显示此数量。', - 'list_page_size_label' => '页面大小', - 'between_dates' => '(:start – :end)', - 'pref_optional_fields_transaction' => '交易选填字段', - 'pref_optional_fields_transaction_help' => '默认情况下,建立一笔新交易 (由于丛集关系) 时,并非所有字段都是启用的。如下,您可启用您觉得对您有用的字段。当然,任何已停用但已填写的字段仍然可见,无论设置是否启用。', - 'optional_tj_date_fields' => '日期字段', - 'optional_tj_other_fields' => '其他字段', - 'optional_tj_attachment_fields' => '附件字段', - 'pref_optional_tj_interest_date' => '利息日期', - 'pref_optional_tj_book_date' => '登记日期', - 'pref_optional_tj_process_date' => '处理日期', - 'pref_optional_tj_due_date' => '截止日期', - 'pref_optional_tj_payment_date' => '付款日期', - 'pref_optional_tj_invoice_date' => '发票日期', - 'pref_optional_tj_internal_reference' => '内部引用', - 'pref_optional_tj_notes' => '备注', - 'pref_optional_tj_attachments' => '附件', - 'pref_optional_tj_external_url' => '外部链接', - 'pref_optional_tj_location' => '位置', - 'pref_optional_tj_links' => '交易关联', - 'optional_field_meta_dates' => '日期', - 'optional_field_meta_business' => '商务', - 'optional_field_attachments' => '附件', - 'optional_field_meta_data' => '可选后设资料', - 'external_url' => '外部链接', - 'pref_notification_bill_reminder' => '关于到期账单的提醒', - 'pref_notification_new_access_token' => '创建新 API 访问令牌时提醒', - 'pref_notification_transaction_creation' => '自动创建交易时提醒', - 'pref_notification_user_login' => '当您从一个新位置登录时提醒', - 'pref_notification_rule_action_failures' => '当规则操作失败时发出警告 (仅适用于Slack或者Discord)', - 'pref_notifications' => '通知', - 'pref_notifications_help' => '设置您想要接收的通知。一些通知可能包含敏感的财务信息。', - 'slack_webhook_url' => 'Slack Webhook 地址', - 'slack_webhook_url_help' => '如果您想要 Firefly III 使用 Slack 通知您,请在此处输入 webhook 地址。否则请留空该字段。 如果您是管理员,您还需要在管理设置中设置此地址。', - 'slack_url_label' => 'Slack“回传webhook”网址', + 'dark_mode_option_browser' => '让您的浏览器决定', + 'dark_mode_option_light' => '始终使用亮色', + 'dark_mode_option_dark' => '始终使用暗色', + 'equal_to_language' => '(与语言相同)', + 'dark_mode_preference' => '暗色模式', + 'dark_mode_preference_help' => '告诉 Firefly III 何时使用暗色模式。', + 'pref_home_screen_accounts' => '主屏幕账户', + 'pref_home_screen_accounts_help' => '哪些账户应该显示在主屏幕上?', + 'pref_view_range' => '查看范围', + 'pref_view_range_help' => '部分图表自动按照周期分组,您的预算也将按照周期分组。请问您倾向于哪个周期?', + 'pref_1D' => '1天', + 'pref_1W' => '1周', + 'pref_1M' => '1个月', + 'pref_3M' => '3个月 (1季度)', + 'pref_6M' => '6个月', + 'pref_1Y' => '1年', + 'pref_last365' => '最近一年', + 'pref_last90' => '最近90天', + 'pref_last30' => '最近 30 天', + 'pref_last7' => '最近7天', + 'pref_YTD' => '今年至今', + 'pref_QTD' => '本季度至今', + 'pref_MTD' => '本月至今', + 'pref_languages' => '语言', + 'pref_locale' => '区域设置', + 'pref_languages_help' => 'Firefly III 支持多语言,请问您倾向于哪个语言?', + 'pref_locale_help' => 'Firefly III 允许您配置其他本地设置,例如货币、数字、日期的格式。您的系统可能不支持此列表中的某些条目。Firefly III 没有为每个区域设置正确的日期格式;请联系开发者进行改进。', + 'pref_locale_no_demo' => '此功能对演示用户无效。', + 'pref_custom_fiscal_year' => '财年设置', + 'pref_custom_fiscal_year_label' => '已启用', + 'pref_custom_fiscal_year_help' => '在不使用1月1日至12月31日作为财年的国家,您可开启此功能并指定财年的起止日期。', + 'pref_fiscal_year_start_label' => '财政年度开始日期', + 'pref_two_factor_auth' => '两步验证', + 'pref_two_factor_auth_help' => '启用两步验证 (或双重验证) 可为您的帐户增加一层额外的安全防护,您将以已知的信息 (您的密码) 和已有的信息 (验证码) 进行登录。验证码由您的手机 App 生成,例如 Authy 或 Google Authenticator。', + 'pref_enable_two_factor_auth' => '启用两步验证', + 'pref_two_factor_auth_disabled' => '两步验证码已删除且停用', + 'pref_two_factor_auth_remove_it' => '请不要忘记从您的身份验证 APP 上删除账户!', + 'pref_two_factor_auth_code' => '验证码', + 'pref_two_factor_auth_code_help' => '请使用手机 App(例如 Authy 或 Google Authenticator)扫描二维码,并输入生成的代码。', + 'pref_two_factor_auth_reset_code' => '重置验证码', + 'pref_two_factor_auth_disable_2fa' => '停用两步验证', + '2fa_use_secret_instead' => '如果您无法扫描 QR 码,请使用密钥: :secret。', + '2fa_backup_codes' => '保存这些备份代码,以便在您丢失设备时访问。', + '2fa_already_enabled' => '2步验证已启用。', + 'wrong_mfa_code' => '此MFA代码无效。', + 'pref_save_settings' => '保存设置', + 'saved_preferences' => '偏好设定已保存!', + 'preferences_general' => '通用', + 'preferences_frontpage' => '主屏幕', + 'preferences_security' => '安全性', + 'preferences_layout' => '布局', + 'preferences_notifications' => '通知', + 'pref_home_show_deposits' => '在主屏幕显示收入', + 'pref_home_show_deposits_info' => '主屏幕已显示您的支出账户,是否同时显示您的收入账户?', + 'pref_home_do_show_deposits' => '是,要显示', + 'successful_count' => ':count 项成功', + 'list_page_size_title' => '页面大小', + 'list_page_size_help' => '任何项目 (账户、交易等) 的列表每页最多显示此数量。', + 'list_page_size_label' => '页面大小', + 'between_dates' => '(:start – :end)', + 'pref_optional_fields_transaction' => '交易选填字段', + 'pref_optional_fields_transaction_help' => '默认情况下,建立一笔新交易时 (由于太多字段比较杂乱) ,所有字段并非全部启用。如果您认为下面的这些字段对您有用,您可以启用它们。当然,任何已禁用但已填写的字段仍然可见,与设置无关。 +', + 'optional_tj_date_fields' => '日期字段', + 'optional_tj_other_fields' => '其他字段', + 'optional_tj_attachment_fields' => '附件字段', + 'pref_optional_tj_interest_date' => '利息日期', + 'pref_optional_tj_book_date' => '登记日期', + 'pref_optional_tj_process_date' => '处理日期', + 'pref_optional_tj_due_date' => '截止日期', + 'pref_optional_tj_payment_date' => '付款日期', + 'pref_optional_tj_invoice_date' => '发票日期', + 'pref_optional_tj_internal_reference' => '内部引用', + 'pref_optional_tj_notes' => '备注', + 'pref_optional_tj_attachments' => '附件', + 'pref_optional_tj_external_url' => '外部链接', + 'pref_optional_tj_location' => '位置', + 'pref_optional_tj_links' => '交易关联', + 'optional_field_meta_dates' => '日期', + 'optional_field_meta_business' => '商务', + 'optional_field_attachments' => '附件', + 'optional_field_meta_data' => '可选后设资料', + 'external_url' => '外部链接', + 'pref_notification_bill_reminder' => '关于到期账单的提醒', + 'pref_notification_new_access_token' => '创建新 API 访问令牌时提醒', + 'pref_notification_transaction_creation' => '自动创建交易时提醒', + 'pref_notification_user_login' => '当您从一个新位置登录时提醒', + 'pref_notification_rule_action_failures' => '当规则操作失败时发出警告 (仅适用于Slack或者Discord)', + 'pref_notifications' => '通知', + 'pref_notifications_help' => '设置您想要接收的通知。一些通知可能包含敏感的财务信息。', + 'slack_webhook_url' => 'Slack Webhook 地址', + 'slack_webhook_url_help' => '如果您想要 Firefly III 使用 Slack 通知您,请在此处输入 webhook 地址。否则请留空该字段。 如果您是管理员,您还需要在管理设置中设置此地址。', + 'slack_url_label' => 'Slack“回传webhook”网址', // Financial administrations - 'administration_index' => '财务管理', - 'administrations_index_menu' => '财务管理', + 'administration_index' => '财务管理', + 'administrations_index_menu' => '财务管理', // profile: - 'purge_data_title' => '从 Frefly III 清除数据', - 'purge_data_expl' => '“清除”是指“删除已经删除的内容”。在正常情况下,Firefly III 不会永久删除记录,只是将其隐藏。下面的按钮会将先前“已删除”的记录永久删除。', - 'delete_stuff_header' => '删除数据', - 'purge_all_data' => '彻底删除所有已删除的记录', - 'purge_data' => '彻底清除数据', - 'purged_all_records' => '所有已删除的记录已被彻底清除。', - 'delete_data_title' => '从 Firefly III 删除数据', - 'permanent_delete_stuff' => '你可以从 Firefly III 删除数据。使用下列按钮意味着你的数据会从视图中移除并隐藏。这些操作没有撤销按钮,但如果必要的话,你可以从数据库中找回数据,它们可能仍然存在于数据库中。', - 'other_sessions_logged_out' => '所有其他设备已退出登录。', - 'delete_unused_accounts' => '删除未使用的账户会清空您的自动补全列表。', - 'delete_all_unused_accounts' => '删除未使用的账户', - 'deleted_all_unused_accounts' => '所有未使用的账户都已删除', - 'delete_all_budgets' => '删除所有预算', - 'delete_all_categories' => '删除所有分类', - 'delete_all_tags' => '删除所有标签', - 'delete_all_bills' => '删除所有账单', - 'delete_all_piggy_banks' => '删除所有存钱罐', - 'delete_all_rules' => '删除所有规则', - 'delete_all_recurring' => '删除所有定期交易', - 'delete_all_object_groups' => '删除所有组', - 'delete_all_accounts' => '删除所有账户', - 'delete_all_asset_accounts' => '删除所有资产账户', - 'delete_all_expense_accounts' => '删除所有支出账户', - 'delete_all_revenue_accounts' => '删除所有收入账户', - 'delete_all_liabilities' => '删除所有债务', - 'delete_all_transactions' => '删除所有交易', - 'delete_all_withdrawals' => '删除所有支出', - 'delete_all_deposits' => '删除所有收入', - 'delete_all_transfers' => '删除所有转账', - 'also_delete_transactions' => '删除账户将同时删除所有关联的收入、支出和转账!', - 'deleted_all_budgets' => '所有预算已被删除', - 'deleted_all_categories' => '所有分类已被删除', - 'deleted_all_tags' => '所有标签已被删除', - 'deleted_all_bills' => '所有账单已被删除', - 'deleted_all_piggy_banks' => '所有存钱罐已被删除', - 'deleted_all_rules' => '所有规则和规则组已被删除', - 'deleted_all_object_groups' => '所有组已被删除', - 'deleted_all_accounts' => '所有账户已被删除', - 'deleted_all_asset_accounts' => '所有资产账户已被删除', - 'deleted_all_expense_accounts' => '所有支出账户已被删除', - 'deleted_all_revenue_accounts' => '所有收入账户已被删除', - 'deleted_all_liabilities' => '所有债务已被删除', - 'deleted_all_transactions' => '所有交易已被删除', - 'deleted_all_withdrawals' => '所有支出已被删除', - 'deleted_all_deposits' => '所有收入已被删除', - 'deleted_all_transfers' => '所有转账已被删除', - 'deleted_all_recurring' => '所有定期交易已被删除', - 'change_your_password' => '更改您的密码', - 'delete_account' => '删除账户', - 'current_password' => '当前密码', - 'new_password' => '新密码', - 'new_password_again' => '新密码 (再输入一次)', - 'delete_your_account' => '删除您的账户', - 'delete_your_account_help' => '删除您的账户亦将删除所有创建的账户、交易,包括所有您存在 Firefly III 的内容都将被清除!', - 'delete_your_account_password' => '输入您的密码以继续。', - 'password' => '密码', - 'are_you_sure' => '是否确定?您无法还原此操作。', - 'delete_account_button' => '删除您的账户', - 'invalid_current_password' => '无效的当前密码!', - 'password_changed' => '已变更密码!', - 'should_change' => '我们的想法是更改您的密码。', - 'invalid_password' => '无效密码!', - 'what_is_pw_security' => '什么是“验证密码安全”?', - 'secure_pw_title' => '如何选择安全密码', - 'forgot_password_response' => '谢谢,如果此电子邮件地址的账户存在,您将在收件箱中找到说明。', - 'secure_pw_history' => '每周都能看到有关网站泄漏用户密码的新闻,黑客与小偷会使用这些窃取您的个人信息,这些信息价值不菲。', - 'secure_pw_ff' => '您在网上使用的密码都一样吗?如果一个网站泄漏了您的密码,黑客将可获取您的所有资料。Firefly III 需要您选择强大且独特的密码以保护您的财务记录。', - 'secure_pw_check_box' => '为了协助您使用安全密码,Firefly III 可自动检查您的密码过去是否已被盗用。若如此,Firefly III 建议您不要使用此密码。', - 'secure_pw_working_title' => '它是如何运作的?', - 'secure_pw_working' => '勾选此复选框后,Firefly III 会发送您密码的 SHA1 哈希值的前5个字符至 Troy Hunt 网站 以检查是否被泄漏。根据 NIST 特殊刊物 的建议,我们将阻止您使用不安全的密码。', - 'secure_pw_should' => '我应该勾选此复选框吗?', - 'secure_pw_long_password' => '是的,请总是验证您的密码是安全的。', - 'command_line_token' => '命令行令牌', - 'explain_command_line_token' => '您需要此令牌进行命令行操作,例如导出数据等。若没有令牌,敏感操作将无法完成。请勿泄漏您的命令行令牌,包括开发者在内的任何人都无权向您索要。如果您不小心泄漏或遗失了令牌,请使用此按钮重新生成。', - 'regenerate_command_line_token' => '重新生成命令行令牌', - 'token_regenerated' => '已生成新的命令行令牌', - 'change_your_email' => '更改您的电子邮件地址', - 'email_verification' => '您的旧邮件地址和新邮件地址都将收到一封邮件。出于安全考虑,您在验证新的电子邮件地址前将无法登录。如果您不确定此 Firefly III 站点是否能发送邮件,请不要使用此功能。如果您是站点管理员,您可以在管理页面进行测试。', - 'email_changed_logout' => '在验证您的电子邮件地址之前,您无法登入。', - 'login_with_new_email' => '现在,您可以使用新的电子邮件地址登入。', - 'login_with_old_email' => '现在,您可以再次使用旧的电子邮件地址登入。', - 'login_provider_local_only' => '当藉由 ":login_provider" 验证时,此动作不可用。', - 'external_user_mgt_disabled' => '当 Firefly III 不负责用户管理或身份验证时,此操作不可用。', - 'external_auth_disabled' => '当 Firefly III 不负责身份验证时,此操作不可用。', - 'delete_local_info_only' => "由于 Firefly III 不负责用户管理和身份验证时,此操作将仅删除 Firefly III 本地的信息。", - 'oauth' => 'OAuth 授权', - 'profile_oauth_clients' => 'OAuth 客户端', - 'profile_oauth_no_clients' => '您尚未创建任何 OAuth 客户端。', - 'profile_oauth_clients_external_auth' => '如果您正在使用如 Authelia 的外部身份验证提供商,OAuth 客户端将无法工作。您只能使用个人访问令牌。', - 'profile_oauth_clients_header' => '客户端', - 'profile_oauth_client_id' => '客户端 ID', - 'profile_oauth_client_name' => '名称', - 'profile_oauth_client_secret' => '密钥', - 'profile_oauth_create_new_client' => '创建新客户端', - 'profile_oauth_create_client' => '创建客户端', - 'profile_oauth_edit_client' => '编辑客户端', - 'profile_oauth_name_help' => '您的用户可以识别并信任的信息', - 'profile_oauth_redirect_url' => '跳转网址', - 'profile_oauth_redirect_url_help' => '您的应用程序的授权回调网址', - 'profile_authorized_apps' => '已授权应用', - 'profile_authorized_clients' => '已授权客户端', - 'profile_scopes' => '范围', - 'profile_revoke' => '撤消', - 'profile_oauth_client_secret_title' => '客户端密钥', - 'profile_oauth_client_secret_expl' => '请妥善保存您的新客户端的密钥,此密钥仅会在这里展示一次。您现在已可以使用此密钥进行 API 请求。', - 'profile_personal_access_tokens' => '个人访问令牌', - 'profile_personal_access_token' => '个人访问令牌', - 'profile_oauth_confidential' => '使用加密', - 'profile_oauth_confidential_help' => '要求客户端使用密钥进行认证。加密客户端可以安全储存凭据且不将其泄露给未授权方,而公共应用程序(例如本地计算机或 JavaScript SPA 应用程序)无法保证凭据的安全性。', - 'profile_personal_access_token_explanation' => '请妥善保存您的新个人访问令牌,此令牌仅会在这里展示一次。您现在已可以使用此令牌进行 API 请求。', - 'profile_no_personal_access_token' => '您还没有创建个人访问令牌。', - 'profile_create_new_token' => '创建新令牌', - 'profile_create_token' => '创建令牌', - 'profile_create' => '创建', - 'profile_save_changes' => '保存更改', - 'profile_whoops' => '很抱歉!', - 'profile_something_wrong' => '发生错误!', - 'profile_try_again' => '发生错误,请稍后再试。', - 'amounts' => '金额', - 'multi_account_warning_unknown' => '根据您创建的交易类型,后续拆分的来源和/或目标账户可能被交易的首笔拆分的配置所覆盖。', - 'multi_account_warning_withdrawal' => '请注意,后续拆分的来源账户将会被支出的首笔拆分的配置所覆盖。', - 'multi_account_warning_deposit' => '请注意,后续拆分的目标账户将会被收入的首笔拆分的配置所覆盖。', - 'multi_account_warning_transfer' => '请注意,后续拆分的来源和目标账户将会被转账的首笔拆分的配置所覆盖。', + 'purge_data_title' => '从 Frefly III 清除数据', + 'purge_data_expl' => '“清除”是指“删除已经删除的内容”。在正常情况下,Firefly III 不会永久删除记录,只是将其隐藏。下面的按钮会将先前“已删除”的记录永久删除。', + 'delete_stuff_header' => '删除数据', + 'purge_all_data' => '彻底删除所有已删除的记录', + 'purge_data' => '彻底清除数据', + 'purged_all_records' => '所有已删除的记录已被彻底清除。', + 'delete_data_title' => '从 Firefly III 删除数据', + 'permanent_delete_stuff' => '你可以从 Firefly III 删除数据。使用下列按钮意味着你的数据会从视图中移除并隐藏。这些操作没有撤销按钮,但如果必要的话,你可以从数据库中找回数据,它们可能仍然存在于数据库中。', + 'other_sessions_logged_out' => '所有其他设备已退出登录。', + 'delete_unused_accounts' => '删除未使用的账户会清空您的自动补全列表。', + 'delete_all_unused_accounts' => '删除未使用的账户', + 'deleted_all_unused_accounts' => '所有未使用的账户都已删除', + 'delete_all_budgets' => '删除所有预算', + 'delete_all_categories' => '删除所有分类', + 'delete_all_tags' => '删除所有标签', + 'delete_all_bills' => '删除所有账单', + 'delete_all_piggy_banks' => '删除所有存钱罐', + 'delete_all_rules' => '删除所有规则', + 'delete_all_recurring' => '删除所有定期交易', + 'delete_all_object_groups' => '删除所有组', + 'delete_all_accounts' => '删除所有账户', + 'delete_all_asset_accounts' => '删除所有资产账户', + 'delete_all_expense_accounts' => '删除所有支出账户', + 'delete_all_revenue_accounts' => '删除所有收入账户', + 'delete_all_liabilities' => '删除所有债务', + 'delete_all_transactions' => '删除所有交易', + 'delete_all_withdrawals' => '删除所有支出', + 'delete_all_deposits' => '删除所有收入', + 'delete_all_transfers' => '删除所有转账', + 'also_delete_transactions' => '删除账户将同时删除所有关联的收入、支出和转账!', + 'deleted_all_budgets' => '所有预算已被删除', + 'deleted_all_categories' => '所有分类已被删除', + 'deleted_all_tags' => '所有标签已被删除', + 'deleted_all_bills' => '所有账单已被删除', + 'deleted_all_piggy_banks' => '所有存钱罐已被删除', + 'deleted_all_rules' => '所有规则和规则组已被删除', + 'deleted_all_object_groups' => '所有组已被删除', + 'deleted_all_accounts' => '所有账户已被删除', + 'deleted_all_asset_accounts' => '所有资产账户已被删除', + 'deleted_all_expense_accounts' => '所有支出账户已被删除', + 'deleted_all_revenue_accounts' => '所有收入账户已被删除', + 'deleted_all_liabilities' => '所有债务已被删除', + 'deleted_all_transactions' => '所有交易已被删除', + 'deleted_all_withdrawals' => '所有支出已被删除', + 'deleted_all_deposits' => '所有收入已被删除', + 'deleted_all_transfers' => '所有转账已被删除', + 'deleted_all_recurring' => '所有定期交易已被删除', + 'change_your_password' => '更改您的密码', + 'delete_account' => '删除账户', + 'current_password' => '当前密码', + 'new_password' => '新密码', + 'new_password_again' => '新密码 (再输入一次)', + 'delete_your_account' => '删除您的账户', + 'delete_your_account_help' => '删除您的账户亦将删除所有创建的账户、交易,包括所有您存在 Firefly III 的内容都将被清除!', + 'delete_your_account_password' => '输入您的密码以继续。', + 'password' => '密码', + 'are_you_sure' => '是否确定?您无法还原此操作。', + 'delete_account_button' => '删除您的账户', + 'invalid_current_password' => '无效的当前密码!', + 'password_changed' => '已变更密码!', + 'should_change' => '我们的想法是更改您的密码。', + 'invalid_password' => '无效密码!', + 'what_is_pw_security' => '什么是“验证密码安全”?', + 'secure_pw_title' => '如何选择安全密码', + 'forgot_password_response' => '谢谢,如果此电子邮件地址的账户存在,您将在收件箱中找到说明。', + 'secure_pw_history' => '每周都能看到有关网站泄漏用户密码的新闻,黑客与小偷会使用这些窃取您的个人信息,这些信息价值不菲。', + 'secure_pw_ff' => '您在网上使用的密码都一样吗?如果一个网站泄漏了您的密码,黑客将可获取您的所有资料。Firefly III 需要您选择强大且独特的密码以保护您的财务记录。', + 'secure_pw_check_box' => '为了协助您使用安全密码,Firefly III 可自动检查您的密码过去是否已被盗用。若如此,Firefly III 建议您不要使用此密码。', + 'secure_pw_working_title' => '它是如何运作的?', + 'secure_pw_working' => '勾选此复选框后,Firefly III 会发送您密码的 SHA1 哈希值的前5个字符至 Troy Hunt 网站 以检查是否被泄漏。根据 NIST 特殊刊物 的建议,我们将阻止您使用不安全的密码。', + 'secure_pw_should' => '我应该勾选此复选框吗?', + 'secure_pw_long_password' => '是的,请总是验证您的密码是安全的。', + 'command_line_token' => '命令行令牌', + 'explain_command_line_token' => '您需要此令牌进行命令行操作,例如导出数据等。若没有令牌,敏感操作将无法完成。请勿泄漏您的命令行令牌,包括开发者在内的任何人都无权向您索要。如果您不小心泄漏或遗失了令牌,请使用此按钮重新生成。', + 'regenerate_command_line_token' => '重新生成命令行令牌', + 'token_regenerated' => '已生成新的命令行令牌', + 'change_your_email' => '更改您的电子邮件地址', + 'email_verification' => '您的旧邮件地址和新邮件地址都将收到一封邮件。出于安全考虑,您在验证新的电子邮件地址前将无法登录。如果您不确定此 Firefly III 站点是否能发送邮件,请不要使用此功能。如果您是站点管理员,您可以在管理页面进行测试。', + 'email_changed_logout' => '在验证您的电子邮件地址之前,您无法登入。', + 'login_with_new_email' => '现在,您可以使用新的电子邮件地址登入。', + 'login_with_old_email' => '现在,您可以再次使用旧的电子邮件地址登入。', + 'login_provider_local_only' => '当藉由 ":login_provider" 验证时,此动作不可用。', + 'external_user_mgt_disabled' => '当 Firefly III 不负责用户管理或身份验证时,此操作不可用。', + 'external_auth_disabled' => '当 Firefly III 不负责身份验证时,此操作不可用。', + 'delete_local_info_only' => '由于 Firefly III 不负责用户管理和身份验证时,此操作将仅删除 Firefly III 本地的信息。', + 'oauth' => 'OAuth 授权', + 'profile_oauth_clients' => 'OAuth 客户端', + 'profile_oauth_no_clients' => '您尚未创建任何 OAuth 客户端。', + 'profile_oauth_clients_external_auth' => '如果您正在使用如 Authelia 的外部身份验证提供商,OAuth 客户端将无法工作。您只能使用个人访问令牌。', + 'profile_oauth_clients_header' => '客户端', + 'profile_oauth_client_id' => '客户端 ID', + 'profile_oauth_client_name' => '名称', + 'profile_oauth_client_secret' => '密钥', + 'profile_oauth_create_new_client' => '创建新客户端', + 'profile_oauth_create_client' => '创建客户端', + 'profile_oauth_edit_client' => '编辑客户端', + 'profile_oauth_name_help' => '您的用户可以识别并信任的信息', + 'profile_oauth_redirect_url' => '跳转网址', + 'profile_oauth_redirect_url_help' => '您的应用程序的授权回调网址', + 'profile_authorized_apps' => '已授权应用', + 'profile_authorized_clients' => '已授权客户端', + 'profile_scopes' => '范围', + 'profile_revoke' => '撤消', + 'profile_oauth_client_secret_title' => '客户端密钥', + 'profile_oauth_client_secret_expl' => '请妥善保存您的新客户端的密钥,此密钥仅会在这里展示一次。您现在已可以使用此密钥进行 API 请求。', + 'profile_personal_access_tokens' => '个人访问令牌', + 'profile_personal_access_token' => '个人访问令牌', + 'profile_oauth_confidential' => '使用加密', + 'profile_oauth_confidential_help' => '要求客户端使用密钥进行认证。加密客户端可以安全储存凭据且不将其泄露给未授权方,而公共应用程序(例如本地计算机或 JavaScript SPA 应用程序)无法保证凭据的安全性。', + 'profile_personal_access_token_explanation' => '请妥善保存您的新个人访问令牌,此令牌仅会在这里展示一次。您现在已可以使用此令牌进行 API 请求。', + 'profile_no_personal_access_token' => '您还没有创建个人访问令牌。', + 'profile_create_new_token' => '创建新令牌', + 'profile_create_token' => '创建令牌', + 'profile_create' => '创建', + 'profile_save_changes' => '保存更改', + 'profile_whoops' => '很抱歉!', + 'profile_something_wrong' => '发生错误!', + 'profile_try_again' => '发生错误,请稍后再试。', + 'amounts' => '金额', + 'multi_account_warning_unknown' => '根据您创建的交易类型,后续拆分的来源和/或目标账户可能被交易的首笔拆分的配置所覆盖。', + 'multi_account_warning_withdrawal' => '请注意,后续拆分的来源账户将会被支出的首笔拆分的配置所覆盖。', + 'multi_account_warning_deposit' => '请注意,后续拆分的目标账户将会被收入的首笔拆分的配置所覆盖。', + 'multi_account_warning_transfer' => '请注意,后续拆分的来源和目标账户将会被转账的首笔拆分的配置所覆盖。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1555,402 @@ return [ * */ - // export data: - 'export_data_title' => '从 Firefly III 导出数据', - 'export_data_menu' => '导出数据', - 'export_data_bc' => '从 Firefly III 导出数据', - 'export_data_main_title' => '从 Firefly III 导出数据', - 'export_data_expl' => '此链接允许您从 Firefly III 导出所有交易和元数据。请查看帮助 (右上角的问号 (?) 图标) 获取更多有关信息。', - 'export_data_all_transactions' => '导出所有交易', - 'export_data_advanced_expl' => '如果您需要更高级或特殊类型的导出功能,请阅读如何使用命令行 php artisan help firefly-iii:export-data 的帮助内容。', + 'export_data_title' => '从 Firefly III 导出数据', + 'export_data_menu' => '导出数据', + 'export_data_bc' => '从 Firefly III 导出数据', + 'export_data_main_title' => '从 Firefly III 导出数据', + 'export_data_expl' => '此链接允许您从 Firefly III 导出所有交易和元数据。请查看帮助 (右上角的问号 (?) 图标) 获取更多有关信息。', + 'export_data_all_transactions' => '导出所有交易', + 'export_data_advanced_expl' => '如果您需要更高级或特殊类型的导出功能,请阅读如何使用命令行 php artisan help firefly-iii:export-data 的帮助内容。', // attachments - 'nr_of_attachments' => '1个附件|:count个附件', - 'attachments' => '附件', - 'edit_attachment' => '编辑附件“:name”', - 'update_attachment' => '更新附件', - 'delete_attachment' => '删除附件“:name”', - 'attachment_deleted' => '已删除附件“:name”', - 'liabilities_deleted' => '已删除债务 ":name"', - 'attachment_updated' => '已更新附件“:name”', - 'upload_max_file_size' => '最大文件尺寸::size', - 'list_all_attachments' => '附件列表', + 'nr_of_attachments' => '1个附件|:count个附件', + 'attachments' => '附件', + 'edit_attachment' => '编辑附件“:name”', + 'update_attachment' => '更新附件', + 'delete_attachment' => '删除附件“:name”', + 'attachment_deleted' => '已删除附件“:name”', + 'liabilities_deleted' => '已删除债务 ":name"', + 'attachment_updated' => '已更新附件“:name”', + 'upload_max_file_size' => '最大文件尺寸::size', + 'list_all_attachments' => '附件列表', // transaction index - 'title_expenses' => '支出', - 'title_withdrawal' => '支出', - 'title_revenue' => '收入', - 'title_deposit' => '收入', - 'title_transfer' => '转账', - 'title_transfers' => '转账', - 'submission_options' => '提交选项', - 'apply_rules_checkbox' => '应用规则', - 'fire_webhooks_checkbox' => '触发 webhook', + 'is_reconciled_fields_dropped' => '这笔交易已经对账,您无法更新账户,也无法更新金额。', + 'title_expenses' => '支出', + 'title_withdrawal' => '支出', + 'title_revenue' => '收入', + 'title_deposit' => '收入', + 'title_transfer' => '转账', + 'title_transfers' => '转账', + 'submission_options' => '提交选项', + 'apply_rules_checkbox' => '应用规则', + 'fire_webhooks_checkbox' => '触发 webhook', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => '此交易已经为支出', - 'convert_is_already_type_Deposit' => '此交易已经为收入', - 'convert_is_already_type_Transfer' => '此交易已经为转账', - 'convert_to_Withdrawal' => '转换“:description”为支出', - 'convert_to_Deposit' => '转换“:description”为收入', - 'convert_to_Transfer' => '转换“:description”为转账', - 'convert_options_WithdrawalDeposit' => '将支出转换为收入', - 'convert_options_WithdrawalTransfer' => '将支出转换为转账', - 'convert_options_DepositTransfer' => '将收入转换为转账', - 'convert_options_DepositWithdrawal' => '将收入转换为支出', - 'convert_options_TransferWithdrawal' => '将转账转换为支出', - 'convert_options_TransferDeposit' => '将转账转换为收入', - 'convert_Withdrawal_to_deposit' => '将此支出转换为收入', - 'convert_Withdrawal_to_transfer' => '将此支出转换为转账', - 'convert_Deposit_to_withdrawal' => '将此收入转换为支出', - 'convert_Deposit_to_transfer' => '将此收入转换为转账', - 'convert_Transfer_to_deposit' => '将此转账转换为收入', - 'convert_Transfer_to_withdrawal' => '将此转账转换为支出', - 'convert_please_set_revenue_source' => '请选择资金来源的收入账户', - 'convert_please_set_asset_destination' => '请选择资金流向的资产账户', - 'convert_please_set_expense_destination' => '请选择资金流向的支出账户', - 'convert_please_set_asset_source' => '请选择资金来源的资产账户', - 'convert_expl_w_d' => '将支出转换为收入时,资金将会存入显示的目标账户,而不是取出。|将支出转换为收入时,资金将会存入显示的目标账户,而不是取出。', - 'convert_expl_w_t' => '将支出转换为转账时,资金将会从来源账户转到其他资产或债务账户,而不是在原支出账户上消费。|将支出转换为转账时,资金将会从来源账户转到其他资产或债务账户,而不是在原支出账户上消费。', - 'convert_expl_d_w' => '将收入转换为支出时,资金将会从显示的来源账户中取出,而不是存入。|将收入转换为支出时,资金将会从显示的来源账户中取出,而不是存入。', - 'convert_expl_d_t' => '将收入转换为转账时,资金将会从任意资产或债务账户存入列出的目标账户中。|将收入转换为转账时,资金将会从任意资产或债务账户存入列出的目标账户中。', - 'convert_expl_t_w' => '将转账转换为支出时,资金将会在此处设定的目标账户上被消费,而不是被转走。|将转账转换为支出时,资金将会在此处设定的目标账户上被消费,而不是被转走。', - 'convert_expl_t_d' => '将转账转换为收入时,资金将会被存入此处列出的目标账户,而不是转入。|将转账转换为收入时,资金将会被存入此处列出的目标账户,而不是转入。', - 'convert_select_sources' => '要完成转换,请在下方设置新的来源账户。|要完成转换,请在下方设置新的来源账户。', - 'convert_select_destinations' => '要完成转换,请在下方设置新的目标账户。|要完成转换,请在下方设置新的目标账户。', - 'converted_to_Withdrawal' => '此交易已被转换为支出', - 'converted_to_Deposit' => '此交易已被转换为收入', - 'converted_to_Transfer' => '此交易已被转换为转账', - 'invalid_convert_selection' => '您选择的账户已用于此交易或不存在。', - 'source_or_dest_invalid' => '找不到正确的交易细节,无法转换。', - 'convert_to_withdrawal' => '转换为支出', - 'convert_to_deposit' => '转换为收入', - 'convert_to_transfer' => '转换为转账', + 'convert_is_already_type_Withdrawal' => '此交易已经为支出', + 'convert_is_already_type_Deposit' => '此交易已经为收入', + 'convert_is_already_type_Transfer' => '此交易已经为转账', + 'convert_to_Withdrawal' => '转换“:description”为支出', + 'convert_to_Deposit' => '转换“:description”为收入', + 'convert_to_Transfer' => '转换“:description”为转账', + 'convert_options_WithdrawalDeposit' => '将支出转换为收入', + 'convert_options_WithdrawalTransfer' => '将支出转换为转账', + 'convert_options_DepositTransfer' => '将收入转换为转账', + 'convert_options_DepositWithdrawal' => '将收入转换为支出', + 'convert_options_TransferWithdrawal' => '将转账转换为支出', + 'convert_options_TransferDeposit' => '将转账转换为收入', + 'convert_Withdrawal_to_deposit' => '将此支出转换为收入', + 'convert_Withdrawal_to_transfer' => '将此支出转换为转账', + 'convert_Deposit_to_withdrawal' => '将此收入转换为支出', + 'convert_Deposit_to_transfer' => '将此收入转换为转账', + 'convert_Transfer_to_deposit' => '将此转账转换为收入', + 'convert_Transfer_to_withdrawal' => '将此转账转换为支出', + 'convert_please_set_revenue_source' => '请选择资金来源的收入账户', + 'convert_please_set_asset_destination' => '请选择资金流向的资产账户', + 'convert_please_set_expense_destination' => '请选择资金流向的支出账户', + 'convert_please_set_asset_source' => '请选择资金来源的资产账户', + 'convert_expl_w_d' => '将支出转换为收入时,资金将会存入显示的目标账户,而不是取出。|将支出转换为收入时,资金将会存入显示的目标账户,而不是取出。', + 'convert_expl_w_t' => '将支出转换为转账时,资金将会从来源账户转到其他资产或债务账户,而不是在原支出账户上消费。|将支出转换为转账时,资金将会从来源账户转到其他资产或债务账户,而不是在原支出账户上消费。', + 'convert_expl_d_w' => '将收入转换为支出时,资金将会从显示的来源账户中取出,而不是存入。|将收入转换为支出时,资金将会从显示的来源账户中取出,而不是存入。', + 'convert_expl_d_t' => '将收入转换为转账时,资金将会从任意资产或债务账户存入列出的目标账户中。|将收入转换为转账时,资金将会从任意资产或债务账户存入列出的目标账户中。', + 'convert_expl_t_w' => '将转账转换为支出时,资金将会在此处设定的目标账户上被消费,而不是被转走。|将转账转换为支出时,资金将会在此处设定的目标账户上被消费,而不是被转走。', + 'convert_expl_t_d' => '将转账转换为收入时,资金将会被存入此处列出的目标账户,而不是转入。|将转账转换为收入时,资金将会被存入此处列出的目标账户,而不是转入。', + 'convert_select_sources' => '要完成转换,请在下方设置新的来源账户。|要完成转换,请在下方设置新的来源账户。', + 'convert_select_destinations' => '要完成转换,请在下方设置新的目标账户。|要完成转换,请在下方设置新的目标账户。', + 'converted_to_Withdrawal' => '此交易已被转换为支出', + 'converted_to_Deposit' => '此交易已被转换为收入', + 'converted_to_Transfer' => '此交易已被转换为转账', + 'invalid_convert_selection' => '您选择的账户已用于此交易或不存在。', + 'source_or_dest_invalid' => '找不到正确的交易细节,无法转换。', + 'convert_to_withdrawal' => '转换为支出', + 'convert_to_deposit' => '转换为收入', + 'convert_to_transfer' => '转换为转账', // create new stuff: - 'create_new_withdrawal' => '创建新支出', - 'create_new_deposit' => '创建新收入', - 'create_new_transfer' => '创建新转账', - 'create_new_asset' => '创建新资产账户', - 'create_new_liabilities' => '创建新债务', - 'create_new_expense' => '创建新支出账户', - 'create_new_revenue' => '创建新收入账户', - 'create_new_piggy_bank' => '创建新存钱罐', - 'create_new_bill' => '创建新账单', - 'create_new_subscription' => '创建新订阅', - 'create_new_rule' => '创建新规则', + 'create_new_withdrawal' => '创建新支出', + 'create_new_deposit' => '创建新收入', + 'create_new_transfer' => '创建新转账', + 'create_new_asset' => '创建新资产账户', + 'create_new_liabilities' => '创建新债务', + 'create_new_expense' => '创建新支出账户', + 'create_new_revenue' => '创建新收入账户', + 'create_new_piggy_bank' => '创建新存钱罐', + 'create_new_bill' => '创建新账单', + 'create_new_subscription' => '创建新订阅', + 'create_new_rule' => '创建新规则', // currencies: - 'create_currency' => '创建新货币', - 'store_currency' => '保存新货币', - 'update_currency' => '更新货币', - 'new_default_currency' => ':name 现已为默认货币', - 'cannot_delete_currency' => '因为仍在使用中,无法删除 :name 。', - 'cannot_delete_fallback_currency' => ':name 是系统默认货币,无法删除', - 'cannot_disable_currency_journals' => '无法禁用 :name,因为仍有交易在使用。', - 'cannot_disable_currency_last_left' => '无法禁用 :name,因为它是目前唯一启用的货币。', - 'cannot_disable_currency_account_meta' => '无法禁用 :name,因为它已被用于资产账户。', - 'cannot_disable_currency_bills' => '无法禁用 :name,因为它仍在账单中使用。', - 'cannot_disable_currency_recurring' => '无法禁用 :name,定期交易正在使用此货币', - 'cannot_disable_currency_available_budgets' => '无法禁用 :name,因为它仍在预算中被使用。', - 'cannot_disable_currency_budget_limits' => '无法禁用 :name,因为它仍在预算中被使用。', - 'cannot_disable_currency_current_default' => '无法禁用 :name ,因为它是当前的默认货币。', - 'cannot_disable_currency_system_fallback' => '无法禁用 :name ,因为它是系统默认货币。', - 'disable_EUR_side_effects' => '欧元是此系统的紧急备用货币。禁用它可能会产生意外的副作用,并可能使您的修改无效。', - 'deleted_currency' => ':name 货币已删除', - 'created_currency' => '货币 :name 已创建', - 'could_not_store_currency' => '无法保存新货币。', - 'updated_currency' => ':name 货币已更新', - 'ask_site_owner' => '请询问 :owner 以新增、删除或编辑货币。', - 'currencies_intro' => 'Firefly III 支持多种货币,您可在此设置并启用。', - 'make_default_currency' => '设为默认', - 'default_currency' => '默认', - 'currency_is_disabled' => '已停用', - 'enable_currency' => '启用', - 'disable_currency' => '停用', - 'currencies_default_disabled' => '大多数的货币均默认为停用,若需使用,请先启用。', - 'currency_is_now_enabled' => '货币 ":name" 已被启用', - 'currency_is_now_disabled' => '货币 ":name" 已被停用', + 'create_currency' => '创建新货币', + 'store_currency' => '保存新货币', + 'update_currency' => '更新货币', + 'new_default_currency' => '当前默认货币为“:name”', + 'default_currency_failed' => '无法将“:name”设置为默认货币,请检查日志。', + 'cannot_delete_currency' => '因为仍在使用中,无法删除 :name 。', + 'cannot_delete_fallback_currency' => ':name 是系统默认货币,无法删除', + 'cannot_disable_currency_journals' => '无法禁用 :name,因为仍有交易在使用。', + 'cannot_disable_currency_last_left' => '无法禁用 :name,因为它是目前唯一启用的货币。', + 'cannot_disable_currency_account_meta' => '无法禁用 :name,因为它已被用于资产账户。', + 'cannot_disable_currency_bills' => '无法禁用 :name,因为它仍在账单中使用。', + 'cannot_disable_currency_recurring' => '无法禁用 :name,定期交易正在使用此货币', + 'cannot_disable_currency_available_budgets' => '无法禁用 :name,因为它仍在预算中被使用。', + 'cannot_disable_currency_budget_limits' => '无法禁用 :name,因为它仍在预算中被使用。', + 'cannot_disable_currency_current_default' => '无法禁用 :name ,因为它是当前的默认货币。', + 'cannot_disable_currency_system_fallback' => '无法禁用 :name ,因为它是系统默认货币。', + 'disable_EUR_side_effects' => '欧元是此系统的紧急备用货币。禁用它可能会产生意外的副作用,并可能使您的修改无效。', + 'deleted_currency' => ':name 货币已删除', + 'created_currency' => '货币 :name 已创建', + 'could_not_store_currency' => '无法保存新货币。', + 'updated_currency' => ':name 货币已更新', + 'ask_site_owner' => '请联系管理员 :owner 新增、删除或编辑货币。', + 'currencies_intro' => 'Firefly III 支持多种货币,您可在此设置并启用。', + 'make_default_currency' => '设为默认', + 'default_currency' => '默认', + 'currency_is_disabled' => '已停用', + 'enable_currency' => '启用', + 'disable_currency' => '停用', + 'currencies_default_disabled' => '大多数的货币均默认为停用,若需使用,请先启用。', + 'currency_is_now_enabled' => '货币 ":name" 已被启用', + 'could_not_enable_currency' => '无法启用货币“:name”,请检查日志。', + 'currency_is_now_disabled' => '货币 ":name" 已被停用', + 'could_not_disable_currency' => '无法禁用货币“:name”,可能仍在使用?', // forms: - 'mandatoryFields' => '必填字段', - 'optionalFields' => '选填字段', - 'options' => '选项', + 'mandatoryFields' => '必填字段', + 'optionalFields' => '选填字段', + 'options' => '选项', // budgets: - 'daily_budgets' => '每日预算', - 'weekly_budgets' => '每周预算', - 'monthly_budgets' => '每月预算', - 'quarterly_budgets' => '每季度预算', - 'half_year_budgets' => '每半年预算', - 'yearly_budgets' => '每年预算', - 'other_budgets' => '自定义区间预算', - 'budget_limit_not_in_range' => '此金额应用于 :start 至 :end:', - 'total_available_budget' => '可用预算总额 (:start – :end)', - 'total_available_budget_in_currency' => '可用预算总额 (:currency)', - 'see_below' => '见下方', - 'create_new_budget' => '创建新预算', - 'store_new_budget' => '保存新预算', - 'stored_new_budget' => '已保存新预算“:name”', - 'available_between' => ':start – :end 可用', - 'transactionsWithoutBudget' => '无预算支出', - 'transactions_no_budget' => ':start – :end 的无预算支出', - 'spent_between' => ':start – :end 的支出', - 'set_available_amount' => '设置可用金额', - 'update_available_amount' => '更新可用金额', - 'ab_basic_modal_explain' => '使用此表单来指定您预期在指定周期内的预算总额 (:currency)。', - 'createBudget' => '新预算', - 'invalid_currency' => '这是一个无效的货币', - 'invalid_amount' => '请输入金额', - 'set_ab' => '可用预算金额已设置', - 'updated_ab' => '可用预算金额已更新', - 'deleted_ab' => '可用预算金额已删除', - 'deleted_bl' => '预算金额已移除', - 'alt_currency_ab_create' => '以其他货币为单位设置可用预算', - 'bl_create_btn' => '以其他货币为单位设置预算', - 'inactiveBudgets' => '已停用预算', - 'without_budget_between' => ':start – :end 的无预算交易', - 'delete_budget' => '删除预算 ":name"', - 'deleted_budget' => '已删除预算 ":name"', - 'edit_budget' => '编辑预算 ":name"', - 'updated_budget' => '预算 ":name" 已更新', - 'update_amount' => '更新金额', - 'update_budget' => '更新预算', - 'update_budget_amount_range' => '更新 (预期) :start – :end 的可用金额', - 'set_budget_limit_title' => '为预算“:budget"设置 :start – :end 的预算金额', - 'set_budget_limit' => '设置预算金额', - 'budget_period_navigator' => '周期导航', - 'info_on_available_amount' => '我有甚麽可用?', - 'available_amount_indication' => '使用这些金额以获得您总预算可能为何的指标', - 'suggested' => '建议', - 'average_between' => ':start – :end 的平均值', - 'transferred_in' => '转账 (转入)', - 'transferred_away' => '转账 (转出)', - 'auto_budget_none' => '无自动预算', - 'auto_budget_reset' => '设置每个周期的固定金额', - 'auto_budget_rollover' => '每个周期添加金额', - 'auto_budget_adjusted' => '每周期增加一个金额并纠正超支', - 'auto_budget_period_daily' => '每日', - 'auto_budget_period_weekly' => '每周', - 'auto_budget_period_monthly' => '每月', - 'auto_budget_period_quarterly' => '每季度', - 'auto_budget_period_half_year' => '每半年', - 'auto_budget_period_yearly' => '每年', - 'auto_budget_help' => '您可以在帮助页面了解此功能的更多信息,点击右上角的问号 (?) 图标即可。', - 'auto_budget_reset_icon' => '此预算将周期性设置', - 'auto_budget_rollover_icon' => '此预算的金额将周期性增加', - 'auto_budget_adjusted_icon' => '预算金额将定期增加,并将纠正超支', - 'remove_budgeted_amount' => '移除预算上限 (:currency)', + 'daily_budgets' => '每日预算', + 'weekly_budgets' => '每周预算', + 'monthly_budgets' => '每月预算', + 'quarterly_budgets' => '每季度预算', + 'half_year_budgets' => '每半年预算', + 'yearly_budgets' => '每年预算', + 'other_budgets' => '自定义区间预算', + 'budget_limit_not_in_range' => '此金额应用于 :start 至 :end:', + 'total_available_budget' => '可用预算总额 (:start – :end)', + 'total_available_budget_in_currency' => '可用预算总额 (:currency)', + 'see_below' => '见下方', + 'create_new_budget' => '创建新预算', + 'store_new_budget' => '保存新预算', + 'stored_new_budget' => '已保存新预算“:name”', + 'available_between' => ':start – :end 可用', + 'transactionsWithoutBudget' => '无预算支出', + 'transactions_no_budget' => ':start – :end 的无预算支出', + 'spent_between' => ':start – :end 的支出', + 'spent_between_left' => '在 :start 和 :end之间消耗 :spent ,剩下 :left。', + 'set_available_amount' => '设置可用金额', + 'update_available_amount' => '更新可用金额', + 'ab_basic_modal_explain' => '使用此表单来指定您预期在指定周期内的预算总额 (:currency)。', + 'createBudget' => '新预算', + 'invalid_currency' => '这是一个无效的货币', + 'invalid_amount' => '请输入金额', + 'set_ab' => '可用预算金额已设置', + 'updated_ab' => '可用预算金额已更新', + 'deleted_ab' => '可用预算金额已删除', + 'deleted_bl' => '预算金额已移除', + 'alt_currency_ab_create' => '以其他货币为单位设置可用预算', + 'bl_create_btn' => '以其他货币为单位设置预算', + 'inactiveBudgets' => '已停用预算', + 'without_budget_between' => ':start – :end 的无预算交易', + 'delete_budget' => '删除预算 ":name"', + 'deleted_budget' => '已删除预算 ":name"', + 'edit_budget' => '编辑预算 ":name"', + 'updated_budget' => '预算 ":name" 已更新', + 'update_amount' => '更新金额', + 'update_budget' => '更新预算', + 'update_budget_amount_range' => '更新 (预期) :start – :end 的可用金额', + 'set_budget_limit_title' => '为预算“:budget"设置 :start – :end 的预算金额', + 'set_budget_limit' => '设置预算金额', + 'budget_period_navigator' => '周期导航', + 'info_on_available_amount' => '我有甚麽可用?', + 'available_amount_indication' => '使用这些金额以获得您总预算可能为何的指标', + 'suggested' => '建议', + 'average_between' => ':start – :end 的平均值', + 'transferred_in' => '转账 (转入)', + 'transferred_away' => '转账 (转出)', + 'auto_budget_none' => '无自动预算', + 'auto_budget_reset' => '设置每个周期的固定金额', + 'auto_budget_rollover' => '每个周期添加金额', + 'auto_budget_adjusted' => '每周期增加一个金额并纠正超支', + 'auto_budget_period_daily' => '每日', + 'auto_budget_period_weekly' => '每周', + 'auto_budget_period_monthly' => '每月', + 'auto_budget_period_quarterly' => '每季度', + 'auto_budget_period_half_year' => '每半年', + 'auto_budget_period_yearly' => '每年', + 'auto_budget_help' => '您可以在帮助页面了解此功能的更多信息,点击右上角的问号 (?) 图标即可。', + 'auto_budget_reset_icon' => '此预算将周期性设置', + 'auto_budget_rollover_icon' => '此预算的金额将周期性增加', + 'auto_budget_adjusted_icon' => '预算金额将定期增加,并将纠正超支', + 'remove_budgeted_amount' => '移除预算上限 (:currency)', // bills: - 'subscription' => '订阅', - 'not_expected_period' => '此周期没有预期支付', - 'subscriptions_in_group' => '分组“%{title}”订阅', - 'subscr_expected_x_times' => '此周期预计支付%{amount}%{times}次', - 'not_or_not_yet' => '尚未', - 'visit_bill' => '在Firefly III中访问名为“:name”的账单', - 'match_between_amounts' => '匹配:low至:high交易的账单。', - 'running_again_loss' => '如果与此账单已关联的交易 (不再) 与规则相符,其间的关联可能会丢失。', - 'bill_related_rules' => '与此账单相关的规则', - 'repeats' => '重复', - 'bill_end_date_help' => '可选字段,此账单延续至此日期结束。', - 'bill_extension_date_help' => '可选字段,此账单必须在此日期或之前延续 (或取消)。', - 'bill_end_index_line' => '此账单于 :date 结束', - 'bill_extension_index_line' => '此账单必须在 :date 延续或取消', - 'connected_journals' => '已关联交易', - 'auto_match_on' => '由 Firefly III 自动匹配', - 'auto_match_off' => '未由 Firefly III 自动匹配', - 'next_expected_match' => '预期下次支付', - 'delete_bill' => '删除账单“:name”', - 'deleted_bill' => '已删除账单“:name”', - 'edit_bill' => '编辑账单“:name”', - 'more' => '更多', - 'rescan_old' => '再次于所有交易执行规则', - 'update_bill' => '更新账单', - 'updated_bill' => '已更新账单“:name”', - 'store_new_bill' => '保存新账单', - 'stored_new_bill' => '已保存新账单“:name”', - 'cannot_scan_inactive_bill' => '已停用的账单无法被扫描。', - 'rescanned_bill' => '重新扫描了所有内容,并关联了:count笔交易到账单。|重新扫描了所有内容,并关联了:count笔交易到账单。', - 'average_bill_amount_year' => '平均账单金额 (:year)', - 'average_bill_amount_overall' => '平均账单金额 (全部)', - 'bill_is_active' => '账单为启用状态', - 'bill_expected_between' => ':start – :end 的预期值', - 'bill_will_automatch' => '账单将自动关联至符合的交易', - 'skips_over' => '跳过', - 'bill_store_error' => '保存您的新账单时发生错误,请检查日志文件', - 'list_inactive_rule' => '已停用的规则', - 'bill_edit_rules' => 'Firefly III 将同时尝试编辑关联于该账单的规则。如果您已自行编辑过该规则,Firefly III 将不会修改任何内容。|Firefly III 将同时尝试编辑关联于该账单的:count条规则。如果您已自行编辑过该规则,Firefly III 将不会修改任何内容。', - 'bill_expected_date' => '预期为:date', - 'bill_expected_date_js' => '已延续至{date}', - 'expected_amount' => '(预期) 金额', - 'bill_paid_on' => '支付于 {date}', - 'bill_repeats_weekly' => '每周', - 'bill_repeats_monthly' => '每月', - 'bill_repeats_quarterly' => '每季度', - 'bill_repeats_half-year' => '每半年', - 'bill_repeats_yearly' => '每年', - 'bill_repeats_weekly_other' => '每隔一周', - 'bill_repeats_monthly_other' => '每隔一个月重复', - 'bill_repeats_quarterly_other' => '每隔一季度重复', - 'bill_repeats_half-year_other' => '每年重复', - 'bill_repeats_yearly_other' => '每隔一年重复', - 'bill_repeats_weekly_skip' => '每 {skip} 周重复', - 'bill_repeats_monthly_skip' => '每 {skip} 个月重复', - 'bill_repeats_quarterly_skip' => '每 {skip} 个季度重复', - 'bill_repeats_half-year_skip' => '每 {skip} 半年重复', - 'bill_repeats_yearly_skip' => '每 {skip} 年重复', - 'subscriptions' => '订阅', - 'go_to_subscriptions' => '前往我的订阅', - 'forever' => '永久', - 'extension_date_is' => '延续日期是{date}', + 'subscription' => '订阅', + 'not_expected_period' => '此周期没有预期支付', + 'subscriptions_in_group' => '分组“%{title}”订阅', + 'subscr_expected_x_times' => '此周期预计支付%{amount}%{times}次', + 'not_or_not_yet' => '尚未', + 'visit_bill' => '在Firefly III中访问名为“:name”的账单', + 'match_between_amounts' => '匹配:low至:high交易的账单。', + 'running_again_loss' => '如果与此账单已关联的交易 (不再) 与规则相符,其间的关联可能会丢失。', + 'bill_related_rules' => '与此账单相关的规则', + 'repeats' => '重复', + 'bill_end_date_help' => '可选字段,此账单延续至此日期结束。', + 'bill_extension_date_help' => '可选字段,此账单必须在此日期或之前延续 (或取消)。', + 'bill_end_index_line' => '此账单于 :date 结束', + 'bill_extension_index_line' => '此账单必须在 :date 延续或取消', + 'connected_journals' => '已关联交易', + 'auto_match_on' => '由 Firefly III 自动匹配', + 'auto_match_off' => '未由 Firefly III 自动匹配', + 'next_expected_match' => '预期下次支付', + 'delete_bill' => '删除账单“:name”', + 'deleted_bill' => '已删除账单“:name”', + 'edit_bill' => '编辑账单“:name”', + 'more' => '更多', + 'rescan_old' => '再次于所有交易执行规则', + 'update_bill' => '更新账单', + 'updated_bill' => '已更新账单“:name”', + 'store_new_bill' => '保存新账单', + 'stored_new_bill' => '已保存新账单“:name”', + 'cannot_scan_inactive_bill' => '已停用的账单无法被扫描。', + 'rescanned_bill' => '重新扫描了所有内容,并关联了:count笔交易到账单。|重新扫描了所有内容,并关联了:count笔交易到账单。', + 'average_bill_amount_year' => '平均账单金额 (:year)', + 'average_bill_amount_overall' => '平均账单金额 (全部)', + 'bill_is_active' => '账单为启用状态', + 'bill_expected_between' => ':start – :end 的预期值', + 'bill_will_automatch' => '账单将自动关联至符合的交易', + 'skips_over' => '跳过', + 'bill_store_error' => '保存您的新账单时发生错误,请检查日志文件', + 'list_inactive_rule' => '已停用的规则', + 'bill_edit_rules' => 'Firefly III 将同时尝试编辑关联于该账单的规则。如果您已自行编辑过该规则,Firefly III 将不会修改任何内容。|Firefly III 将同时尝试编辑关联于该账单的:count条规则。如果您已自行编辑过该规则,Firefly III 将不会修改任何内容。', + 'bill_expected_date' => '预期为:date', + 'bill_expected_date_js' => '已延续至{date}', + 'expected_amount' => '(预期) 金额', + 'bill_paid_on' => '支付于 {date}', + 'bill_repeats_weekly' => '每周', + 'bill_repeats_monthly' => '每月', + 'bill_repeats_quarterly' => '每季度', + 'bill_repeats_half-year' => '每半年', + 'bill_repeats_yearly' => '每年', + 'bill_repeats_weekly_other' => '每隔一周', + 'bill_repeats_monthly_other' => '每隔一个月重复', + 'bill_repeats_quarterly_other' => '每隔一季度重复', + 'bill_repeats_half-year_other' => '每年重复', + 'bill_repeats_yearly_other' => '每隔一年重复', + 'bill_repeats_weekly_skip' => '每 {skip} 周重复', + 'bill_repeats_monthly_skip' => '每 {skip} 个月重复', + 'bill_repeats_quarterly_skip' => '每 {skip} 个季度重复', + 'bill_repeats_half-year_skip' => '每 {skip} 半年重复', + 'bill_repeats_yearly_skip' => '每 {skip} 年重复', + 'subscriptions' => '订阅', + 'go_to_subscriptions' => '前往我的订阅', + 'forever' => '永久', + 'extension_date_is' => '延续日期是{date}', // accounts: - 'i_am_owed_amount' => '借款金额', - 'i_owe_amount' => '欠款金额', - 'inactive_account_link' => '您有 :count 个已停用 (已归档) 的账户,您可以在此独立页面中查看。|您有 :count 个已停用 (已归档) 的账户,您可以在此独立页面中查看。', - 'all_accounts_inactive' => '这些是您的已停用账户。', - 'active_account_link' => '此链接返回到您的已启用账户。', - 'account_missing_transaction' => '账户 #:id (:name) 无法直接显示,因为 Firefly 找不到重定向信息。', - 'cc_monthly_payment_date_help' => '随便选择“年”和“月”,其数据都将被忽略,仅“日”会被使用。', - 'details_for_asset' => '资产账户“:name”的详细信息', - 'details_for_expense' => '支出账户“:name”的详细信息', - 'details_for_revenue' => '收入账户“:name”的详细信息', - 'details_for_cash' => '现金账户“:name”的详细信息', - 'store_new_asset_account' => '保存新资产账户', - 'store_new_expense_account' => '保存新支出账户', - 'store_new_revenue_account' => '保存新收入账户', - 'edit_asset_account' => '编辑资产账户“:name”', - 'edit_expense_account' => '编辑支出账户“:name”', - 'edit_revenue_account' => '编辑收入账户“:name”', - 'delete_asset_account' => '删除资产账户“:name”', - 'delete_expense_account' => '删除支出账户“:name”', - 'delete_revenue_account' => '删除收入账户“:name”', - 'delete_liabilities_account' => '删除债务账户“:name”', - 'asset_deleted' => '已成功删除资产账户“:name”', - 'account_deleted' => '已成功删除账户“:name”', - 'expense_deleted' => '已成功删除支出账户“:name”', - 'revenue_deleted' => '已成功删除收入账户“:name”', - 'update_asset_account' => '更新资产账户', - 'update_undefined_account' => '更新账户', - 'update_liabilities_account' => '更新债务账户', - 'update_expense_account' => '更新支出账户', - 'update_revenue_account' => '更新收入账户', - 'make_new_asset_account' => '创建新资产账户', - 'make_new_expense_account' => '创建新支出账户', - 'make_new_revenue_account' => '创建新收入账户', - 'make_new_liabilities_account' => '创建新债务账户', - 'asset_accounts' => '资产账户', - 'undefined_accounts' => '账户', - 'asset_accounts_inactive' => '资产账户 (已停用)', - 'expense_account' => '支出账户', - 'expense_accounts' => '支出账户', - 'expense_accounts_inactive' => '支出账户 (已停用)', - 'revenue_account' => '收入账户', - 'revenue_accounts' => '收入账户', - 'revenue_accounts_inactive' => '收入账户 (已停用)', - 'cash_accounts' => '现金账户', - 'Cash account' => '现金账户', - 'liabilities_accounts' => '债务账户', - 'liabilities_accounts_inactive' => '债务账户 (已停用)', - 'reconcile_account' => '对账账户“:account”', - 'overview_of_reconcile_modal' => '对帐概览', - 'delete_reconciliation' => '删除对帐', - 'update_reconciliation' => '更新对账', - 'amount_cannot_be_zero' => '金额不能为零', - 'end_of_reconcile_period' => '对帐区间结束: :period', - 'start_of_reconcile_period' => '对帐区间开始: :period', - 'start_balance' => '初始余额', - 'end_balance' => '结束余额', - 'update_balance_dates_instruction' => '将您的银行账单与金额和日期进行匹配,并点击“开始对账”', - 'select_transactions_instruction' => '选择您银行账单上显示的交易。', - 'select_range_and_balance' => '首先验证日期范围与余额,然后点击“开始对账”', - 'date_change_instruction' => '如果您现在变更日期范围,任何进度均将遗失。', - 'update_selection' => '更新所选项', - 'store_reconcile' => '保存对账', - 'reconciliation_transaction' => '对帐交易', - 'Reconciliation' => '对帐', - 'reconciliation' => '对帐', - 'reconcile_options' => '对帐选项', - 'reconcile_range' => '对账范围', - 'start_reconcile' => '开始对帐', - 'cash_account_type' => '现金账户', - 'cash' => '现金', - 'cant_find_redirect_account' => '很抱歉,Firefly III 无法跳转。正在返回主页...', - 'account_type' => '账户类型', - 'save_transactions_by_moving' => '将此交易移动到另一个账户并保存:|将这些交易移动到另一个账户并保存:', - 'save_transactions_by_moving_js' => '没有交易|将该交易转移到另一个账户,以保存该交易。|通过将它们转移到另一个账户保存这些交易。', - 'stored_new_account' => '新账户“:name”已保存!', - 'stored_new_account_js' => '新账户"{name}"已保存', - 'updated_account' => '账户“:name”已更新', - 'updated_account_js' => '已更新账户“”。', - 'credit_card_options' => '信用卡选项', - 'no_transactions_account' => '资产账户“:name”没有交易 (此周期内)。', - 'no_transactions_period' => '无交易 (此周期内)', - 'no_data_for_chart' => '目前还没有足够的信息以生成图表。', - 'select_at_least_one_account' => '选择至少一个资产账户', - 'select_at_least_one_category' => '选择至少一个分类', - 'select_at_least_one_budget' => '选择至少一个预算', - 'select_at_least_one_tag' => '选择至少一个标签', - 'select_at_least_one_expense' => '请选择至少一个支出/收入账户的组合,若无 (即列表为空) 则此报表不可用。', - 'account_default_currency' => '这将是与此账户关连的默认货币。', - 'reconcile_has_more' => '您的 Firefly III 帐目比您的银行有更多的金钱,有多个选项可应处,请选择并按下 "确认对帐"。', - 'reconcile_has_less' => '您的 Firefly III 帐目比您的银行有更少的金钱,有多个选项可应处,请选择并按下 "确认对帐"。', - 'reconcile_is_equal' => '您的 Firefly III 账目和您的银行账单相符,无须处理,点击“确认对账”来确认输入。', - 'create_pos_reconcile_transaction' => '清除已选交易,并从此资产账户增加 :amount 作为修正。', - 'create_neg_reconcile_transaction' => '清除已选交易,并从此资产账户移除 :amount 作为修正。', - 'reconcile_do_nothing' => '删除选择交易,但不校正。', - 'reconcile_go_back' => '您可之后再编辑或删除较正。', - 'must_be_asset_account' => '您只可以对账资产账户。', - 'reconciliation_stored' => '已保存对账', - 'reconciliation_error' => '由于一项错误,该笔交易虽被标记为已对账,但相应的修正却没有保存::error。', - 'reconciliation_transaction_title' => '对账 (:from 至 :to)', - 'sum_of_reconciliation' => '对账总和', - 'reconcile_this_account' => '对账此账户', - 'reconcile' => '对账', - 'show' => '显示', - 'confirm_reconciliation' => '确认对帐', - 'submitted_start_balance' => '初始余额已提交', - 'selected_transactions' => '已选择 (:count) 项交易', - 'already_cleared_transactions' => '以清空交易 (:count)', - 'submitted_end_balance' => '已提交结束余额', - 'initial_balance_description' => '“:account”的初始余额', - 'liability_credit_description' => '“:account”债务信用', - 'interest_calc_' => '未知', - 'interest_calc_daily' => '每日', - 'interest_calc_monthly' => '每月', - 'interest_calc_yearly' => '每年', - 'interest_calc_weekly' => '每周', - 'interest_calc_half-year' => '每半年', - 'interest_calc_quarterly' => '每季度', - 'initial_balance_account' => '初始余额账户“:account”', - 'list_options' => '列表选项', + 'i_am_owed_amount' => '借款金额', + 'i_owe_amount' => '欠款金额', + 'inactive_account_link' => '您有 :count 个已停用 (已归档) 的账户,您可以在此独立页面中查看。|您有 :count 个已停用 (已归档) 的账户,您可以在此独立页面中查看。', + 'all_accounts_inactive' => '这些是您的已停用账户。', + 'active_account_link' => '此链接返回到您的已启用账户。', + 'account_missing_transaction' => '账户 #:id (:name) 无法直接显示,因为 Firefly 找不到重定向信息。', + 'cc_monthly_payment_date_help' => '随便选择“年”和“月”,其数据都将被忽略,仅“日”会被使用。', + 'details_for_asset' => '资产账户“:name”的详细信息', + 'details_for_expense' => '支出账户“:name”的详细信息', + 'details_for_revenue' => '收入账户“:name”的详细信息', + 'details_for_cash' => '现金账户“:name”的详细信息', + 'store_new_asset_account' => '保存新资产账户', + 'store_new_expense_account' => '保存新支出账户', + 'store_new_revenue_account' => '保存新收入账户', + 'edit_asset_account' => '编辑资产账户“:name”', + 'edit_expense_account' => '编辑支出账户“:name”', + 'edit_revenue_account' => '编辑收入账户“:name”', + 'delete_asset_account' => '删除资产账户“:name”', + 'delete_expense_account' => '删除支出账户“:name”', + 'delete_revenue_account' => '删除收入账户“:name”', + 'delete_liabilities_account' => '删除债务账户“:name”', + 'asset_deleted' => '已成功删除资产账户“:name”', + 'account_deleted' => '已成功删除账户“:name”', + 'expense_deleted' => '已成功删除支出账户“:name”', + 'revenue_deleted' => '已成功删除收入账户“:name”', + 'update_asset_account' => '更新资产账户', + 'update_undefined_account' => '更新账户', + 'update_liabilities_account' => '更新债务账户', + 'update_expense_account' => '更新支出账户', + 'update_revenue_account' => '更新收入账户', + 'make_new_asset_account' => '创建新资产账户', + 'make_new_expense_account' => '创建新支出账户', + 'make_new_revenue_account' => '创建新收入账户', + 'make_new_liabilities_account' => '创建新债务账户', + 'asset_accounts' => '资产账户', + 'undefined_accounts' => '账户', + 'asset_accounts_inactive' => '资产账户 (已停用)', + 'expense_account' => '支出账户', + 'expense_accounts' => '支出账户', + 'expense_accounts_inactive' => '支出账户 (已停用)', + 'revenue_account' => '收入账户', + 'revenue_accounts' => '收入账户', + 'revenue_accounts_inactive' => '收入账户 (已停用)', + 'cash_accounts' => '现金账户', + 'Cash account' => '现金账户', + 'liabilities_accounts' => '债务账户', + 'liabilities_accounts_inactive' => '债务账户 (已停用)', + 'reconcile_account' => '对账账户“:account”', + 'overview_of_reconcile_modal' => '对帐概览', + 'delete_reconciliation' => '删除对帐', + 'update_reconciliation' => '更新对账', + 'amount_cannot_be_zero' => '金额不能为零', + 'end_of_reconcile_period' => '对帐区间结束: :period', + 'start_of_reconcile_period' => '对帐区间开始: :period', + 'start_balance' => '初始余额', + 'end_balance' => '结束余额', + 'update_balance_dates_instruction' => '将您的银行账单与金额和日期进行匹配,并点击“开始对账”', + 'select_transactions_instruction' => '选择您银行账单上显示的交易。', + 'select_range_and_balance' => '首先验证日期范围与余额,然后点击“开始对账”', + 'date_change_instruction' => '如果您现在变更日期范围,任何进度均将遗失。', + 'update_selection' => '更新所选项', + 'store_reconcile' => '保存对账', + 'reconciliation_transaction' => '对帐交易', + 'Reconciliation' => '对帐', + 'reconciliation' => '对帐', + 'reconcile_options' => '对帐选项', + 'reconcile_range' => '对账范围', + 'start_reconcile' => '开始对帐', + 'cash_account_type' => '现金账户', + 'cash' => '现金', + 'cant_find_redirect_account' => '很抱歉,Firefly III 无法跳转。正在返回主页...', + 'account_type' => '账户类型', + 'save_transactions_by_moving' => '将此交易移动到另一个账户并保存:|将这些交易移动到另一个账户并保存:', + 'save_transactions_by_moving_js' => '没有交易|将该交易转移到另一个账户,以保存该交易。|通过将它们转移到另一个账户保存这些交易。', + 'stored_new_account' => '新账户“:name”已保存!', + 'stored_new_account_js' => '新账户"{name}"已保存', + 'updated_account' => '账户“:name”已更新', + 'updated_account_js' => '已更新账户“”。', + 'credit_card_options' => '信用卡选项', + 'no_transactions_account' => '资产账户“:name”没有交易 (此周期内)。', + 'no_transactions_period' => '无交易 (此周期内)', + 'no_data_for_chart' => '目前还没有足够的信息以生成图表。', + 'select_at_least_one_account' => '选择至少一个资产账户', + 'select_at_least_one_category' => '选择至少一个分类', + 'select_at_least_one_budget' => '选择至少一个预算', + 'select_at_least_one_tag' => '选择至少一个标签', + 'select_at_least_one_expense' => '请选择至少一个支出/收入账户的组合,若无 (即列表为空) 则此报表不可用。', + 'account_default_currency' => '这将是与此账户关连的默认货币。', + 'reconcile_has_more' => '您的 Firefly III 帐目比您的银行有更多的金钱,有多个选项可应处,请选择并按下 "确认对帐"。', + 'reconcile_has_less' => '您的 Firefly III 帐目比您的银行有更少的金钱,有多个选项可应处,请选择并按下 "确认对帐"。', + 'reconcile_is_equal' => '您的 Firefly III 账目和您的银行账单相符,无须处理,点击“确认对账”来确认输入。', + 'create_pos_reconcile_transaction' => '清除已选交易,并从此资产账户增加 :amount 作为修正。', + 'create_neg_reconcile_transaction' => '清除已选交易,并从此资产账户移除 :amount 作为修正。', + 'reconcile_do_nothing' => '删除选择交易,但不校正。', + 'reconcile_go_back' => '您可之后再编辑或删除较正。', + 'must_be_asset_account' => '您只可以对账资产账户。', + 'reconciliation_stored' => '已保存对账', + 'reconciliation_error' => '由于一项错误,该笔交易虽被标记为已对账,但相应的修正却没有保存::error。', + 'reconciliation_transaction_title' => '对账 (:from 至 :to)', + 'sum_of_reconciliation' => '对账总和', + 'reconcile_this_account' => '对账此账户', + 'reconcile' => '对账', + 'show' => '显示', + 'confirm_reconciliation' => '确认对帐', + 'submitted_start_balance' => '初始余额已提交', + 'selected_transactions' => '已选择 (:count) 项交易', + 'already_cleared_transactions' => '以清空交易 (:count)', + 'submitted_end_balance' => '已提交结束余额', + 'initial_balance_description' => '“:account”的初始余额', + 'liability_credit_description' => '“:account”债务信用', + 'interest_calc_' => '未知', + 'interest_calc_daily' => '每日', + 'interest_calc_monthly' => '每月', + 'interest_calc_yearly' => '每年', + 'interest_calc_weekly' => '每周', + 'interest_calc_half-year' => '每半年', + 'interest_calc_quarterly' => '每季度', + 'initial_balance_account' => '初始余额账户“:account”', + 'list_options' => '列表选项', // categories: - 'new_category' => '新分类', - 'create_new_category' => '创建新分类', - 'without_category' => '没有分类', - 'update_category' => '更新分类', - 'updated_category' => '已更新分类“:name”', - 'categories' => '分类', - 'edit_category' => '编辑分类 “:name”', - 'no_category' => '(没有分类)', - 'unknown_category_plain' => '没有分类', - 'category' => '分类', - 'delete_category' => '删除分类 “:name”', - 'deleted_category' => '已删除分类 “:name”', - 'store_category' => '保存新分类', - 'stored_category' => '已保存新分类“:name”', - 'without_category_between' => ':start – :end 没有分类', + 'new_category' => '新分类', + 'create_new_category' => '创建新分类', + 'without_category' => '没有分类', + 'update_category' => '更新分类', + 'updated_category' => '已更新分类“:name”', + 'categories' => '分类', + 'edit_category' => '编辑分类 “:name”', + 'no_category' => '(没有分类)', + 'unknown_category_plain' => '没有分类', + 'category' => '分类', + 'delete_category' => '删除分类 “:name”', + 'deleted_category' => '已删除分类 “:name”', + 'store_category' => '保存新分类', + 'stored_category' => '已保存新分类“:name”', + 'without_category_between' => ':start – :end 没有分类', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1961,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => '更新支出', - 'update_deposit' => '更新收入', - 'update_transaction' => '更新交易', - 'update_transfer' => '更新转账', - 'updated_withdrawal' => '已更新支出“:description“', - 'updated_deposit' => '已更新收入“:description”', - 'updated_transfer' => '已更新转账“:description”', - 'no_changes_withdrawal' => '支出“:description”未更改。', - 'no_changes_deposit' => '收入“:description”未更改。', - 'no_changes_transfer' => '转账“:description”未更改。', - 'delete_withdrawal' => '删除支出“:description”', - 'delete_deposit' => '删除收入“:description”', - 'delete_transfer' => '删除转账“:description”', - 'deleted_withdrawal' => '已成功删除支出“:description”', - 'deleted_deposit' => '已成功删除收入“:description”', - 'deleted_transfer' => '已成功删除转账“:description”', - 'deleted_reconciliation' => '成功删除对账交易“:description”', - 'stored_journal' => '成功创建新交易“:description”', - 'stored_journal_no_descr' => '成功创建您的新交易', - 'updated_journal_no_descr' => '成功更新您的交易', - 'select_transactions' => '选择交易', - 'rule_group_select_transactions' => '应用“:title”至交易', - 'rule_select_transactions' => '应用“:title”至交易', - 'stop_selection' => '停止选取交易', - 'reconcile_selected' => '对帐', - 'mass_delete_journals' => '删除数个交易', - 'mass_edit_journals' => '编辑数个交易', - 'mass_bulk_journals' => '批次编辑数个交易', - 'mass_bulk_journals_explain' => '此表单允许您在单次更新中修改下列交易的属性。当您修改这里所看到的参数时,表格中的所有交易都将被更新。', - 'part_of_split' => '此交易是某笔拆分交易的一部分。 如果您没有选择所有的拆分,您最终可能只更改了半笔交易。', - 'bulk_set_new_values' => '用下方的输入框设定新值。若空留,则全部会为空值。此外,请注意仅支出会被赋予预算。', - 'no_bulk_category' => '不更新分类', - 'no_bulk_budget' => '不更新预算', - 'no_bulk_tags' => '不更新标签', - 'replace_with_these_tags' => '用这些标签替换', - 'append_these_tags' => '添加这些标签', - 'mass_edit' => '分开编辑所选项', - 'bulk_edit' => '批量编辑所选项', - 'mass_delete' => '删除所选项', - 'cannot_edit_other_fields' => '由于页面空间限制,除了此处所示的字段以外,您无法批量编辑其他字段。若您需要编辑其他字段,请点击链接并依次编辑。', - 'cannot_change_amount_reconciled' => '您不能修改已对账交易的金额。', - 'no_budget' => '(无预算)', - 'no_bill' => '(无账单)', - 'account_per_budget' => '每笔预算的账户', - 'account_per_category' => '每个分类的账户', - 'create_new_object' => '创建', - 'empty' => '(空)', - 'all_other_budgets' => '(所有其他预算)', - 'all_other_accounts' => '(所有其他账户)', - 'expense_per_source_account' => '每个来源账户的支出', - 'expense_per_destination_account' => '每个目标账户的支出', - 'income_per_destination_account' => '每个目标账户的收入', - 'spent_in_specific_category' => '分类“:category”的支出', - 'earned_in_specific_category' => '在 “:category” 中的收入', - 'spent_in_specific_tag' => '标签“:tag”的支出', - 'earned_in_specific_tag' => '标签“:tag”中的收入', - 'income_per_source_account' => '每个来源账户的收入', - 'average_spending_per_destination' => '每个目标账户的平均支出', - 'average_spending_per_source' => '每个来源账户的平均支出', - 'average_earning_per_source' => '每个来源账户的平均收入', - 'average_earning_per_destination' => '每个目标账户的平均收入', - 'account_per_tag' => '每个标签的账户', - 'tag_report_expenses_listed_once' => '支出和收入从未列出两次。如果交易有多个标签,它可能只显示在其标签中的一个标签。此列表可能似乎丢失数据,但数额是正确的。', - 'double_report_expenses_charted_once' => '支出和收入从未显示两次。如果交易有多个标签,它可能只显示在其标签中的一个标签。此图表可能似乎丢失数据,但数额是正确的。', - 'tag_report_chart_single_tag' => '此图表适用于单一标签。如果交易有多个标签,您可以在其他标签的图表中反映您看到的情况。', - 'tag' => '标签', - 'no_budget_squared' => '(无预算)', - 'perm-delete-many' => '一次删除多个项目可能非常混乱,请谨慎操作。请注意,您可能从这里删掉含有多笔拆分的交易的其中一部分。', - 'mass_deleted_transactions_success' => '已删除 :count 条交易。|已删除 :count 条交易。', - 'mass_edited_transactions_success' => '已更新 :count 条交易。|已更新 :count 条交易。', - 'opt_group_' => '(无账户类型)', - 'opt_group_no_account_type' => '(无账户类型)', - 'opt_group_defaultAsset' => '默认资产账户', - 'opt_group_savingAsset' => '储蓄账户', - 'opt_group_sharedAsset' => '共用资产账户', - 'opt_group_ccAsset' => '信用卡', - 'opt_group_cashWalletAsset' => '现金钱包', - 'opt_group_expense_account' => '支出账户', - 'opt_group_revenue_account' => '收入账户', - 'opt_group_l_Loan' => '债务: 贷款', - 'opt_group_cash_account' => '现金账户', - 'opt_group_l_Debt' => '债务: 欠款', - 'opt_group_l_Mortgage' => '债务: 抵押', - 'opt_group_l_Credit card' => '债务: 信用卡', - 'notes' => '备注', - 'unknown_journal_error' => '无法保存交易,请检查日志文件。', - 'attachment_not_found' => '找不到此附件。', - 'journal_link_bill' => '此交易已与帐单 :name 关联。若要移除关联,取消勾选复选框,使用规则将其与其他账单关联。', - 'transaction_stored_link' => '交易 #{ID} (“{title}”) 已保存。', - 'transaction_new_stored_link' => '交易 #{ID} 已保存。', - 'transaction_updated_link' => '交易 #{ID} (“{title}”) 已更新。', - 'transaction_updated_no_changes' => '交易#{ID}(“{title}”)未收到任何更改。', - 'first_split_decides' => '首笔拆分决定此字段的值', - 'first_split_overrules_source' => '首笔拆分可能覆盖来源账户', - 'first_split_overrules_destination' => '首笔拆分可能覆盖目标账户', - 'spent_x_of_y' => '花费{total}的{amount}', + 'wait_loading_transaction' => '请等待表单加载', + 'wait_loading_data' => '请等待您的信息加载...', + 'wait_attachments' => '请等待附件上传。', + 'errors_upload' => '上传失败。请检查您的浏览器控制台是否有错误。', + 'amount_foreign_if' => '外币金额(如果有的话)', + 'amount_destination_account' => '目标账户货币金额', + 'edit_transaction_title' => '编辑交易":description"', + 'unreconcile' => '撤销对账', + 'update_withdrawal' => '更新支出', + 'update_deposit' => '更新收入', + 'update_transaction' => '更新交易', + 'update_transfer' => '更新转账', + 'updated_withdrawal' => '已更新支出“:description“', + 'updated_deposit' => '已更新收入“:description”', + 'updated_transfer' => '已更新转账“:description”', + 'no_changes_withdrawal' => '支出“:description”未更改。', + 'no_changes_deposit' => '收入“:description”未更改。', + 'no_changes_transfer' => '转账“:description”未更改。', + 'delete_withdrawal' => '删除支出“:description”', + 'delete_deposit' => '删除收入“:description”', + 'delete_transfer' => '删除转账“:description”', + 'deleted_withdrawal' => '已成功删除支出“:description”', + 'deleted_deposit' => '已成功删除收入“:description”', + 'deleted_transfer' => '已成功删除转账“:description”', + 'deleted_reconciliation' => '成功删除对账交易“:description”', + 'stored_journal' => '成功创建新交易“:description”', + 'stored_journal_js' => '成功创建新交易 "%{description}"', + 'stored_journal_no_descr' => '成功创建您的新交易', + 'updated_journal_no_descr' => '成功更新您的交易', + 'select_transactions' => '选择交易', + 'rule_group_select_transactions' => '应用“:title”至交易', + 'rule_select_transactions' => '应用“:title”至交易', + 'stop_selection' => '停止选取交易', + 'reconcile_selected' => '对帐', + 'mass_delete_journals' => '删除数个交易', + 'mass_edit_journals' => '编辑数个交易', + 'mass_bulk_journals' => '批次编辑数个交易', + 'mass_bulk_journals_explain' => '此表单允许您在单次更新中修改下列交易的属性。当您修改这里所看到的参数时,表格中的所有交易都将被更新。', + 'part_of_split' => '此交易是某笔拆分交易的一部分。 如果您没有选择所有的拆分,您最终可能只更改了半笔交易。', + 'bulk_set_new_values' => '用下方的输入框设定新值。若空留,则全部会为空值。此外,请注意仅支出会被赋予预算。', + 'no_bulk_category' => '不更新分类', + 'no_bulk_budget' => '不更新预算', + 'no_bulk_tags' => '不更新标签', + 'replace_with_these_tags' => '用这些标签替换', + 'append_these_tags' => '添加这些标签', + 'mass_edit' => '分开编辑所选项', + 'bulk_edit' => '批量编辑所选项', + 'mass_delete' => '删除所选项', + 'cannot_edit_other_fields' => '由于页面空间限制,除了此处所示的字段以外,您无法批量编辑其他字段。若您需要编辑其他字段,请点击链接并依次编辑。', + 'cannot_change_amount_reconciled' => '您不能修改已对账交易的金额。', + 'no_budget' => '(无预算)', + 'no_bill' => '(无账单)', + 'account_per_budget' => '每笔预算的账户', + 'account_per_category' => '每个分类的账户', + 'create_new_object' => '创建', + 'empty' => '(空)', + 'all_other_budgets' => '(所有其他预算)', + 'all_other_accounts' => '(所有其他账户)', + 'expense_per_source_account' => '每个来源账户的支出', + 'expense_per_destination_account' => '每个目标账户的支出', + 'income_per_destination_account' => '每个目标账户的收入', + 'spent_in_specific_category' => '分类“:category”的支出', + 'earned_in_specific_category' => '在 “:category” 中的收入', + 'spent_in_specific_tag' => '标签“:tag”的支出', + 'earned_in_specific_tag' => '标签“:tag”中的收入', + 'income_per_source_account' => '每个来源账户的收入', + 'average_spending_per_destination' => '每个目标账户的平均支出', + 'average_spending_per_source' => '每个来源账户的平均支出', + 'average_earning_per_source' => '每个来源账户的平均收入', + 'average_earning_per_destination' => '每个目标账户的平均收入', + 'account_per_tag' => '每个标签的账户', + 'tag_report_expenses_listed_once' => '支出和收入从未列出两次。如果交易有多个标签,它可能只显示在其标签中的一个标签。此列表可能似乎丢失数据,但数额是正确的。', + 'double_report_expenses_charted_once' => '支出和收入从未显示两次。如果交易有多个标签,它可能只显示在其标签中的一个标签。此图表可能似乎丢失数据,但数额是正确的。', + 'tag_report_chart_single_tag' => '此图表适用于单一标签。如果交易有多个标签,您可以在其他标签的图表中反映您看到的情况。', + 'tag' => '标签', + 'no_budget_squared' => '(无预算)', + 'perm-delete-many' => '一次删除多个项目可能非常混乱,请谨慎操作。请注意,您可能从这里删掉含有多笔拆分的交易的其中一部分。', + 'mass_deleted_transactions_success' => '已删除 :count 条交易。|已删除 :count 条交易。', + 'mass_edited_transactions_success' => '已更新 :count 条交易。|已更新 :count 条交易。', + 'opt_group_' => '(无账户类型)', + 'opt_group_no_account_type' => '(无账户类型)', + 'opt_group_defaultAsset' => '默认资产账户', + 'opt_group_savingAsset' => '储蓄账户', + 'opt_group_sharedAsset' => '共用资产账户', + 'opt_group_ccAsset' => '信用卡', + 'opt_group_cashWalletAsset' => '现金钱包', + 'opt_group_expense_account' => '支出账户', + 'opt_group_revenue_account' => '收入账户', + 'opt_group_l_Loan' => '债务: 贷款', + 'opt_group_cash_account' => '现金账户', + 'opt_group_l_Debt' => '债务: 欠款', + 'opt_group_l_Mortgage' => '债务: 抵押', + 'opt_group_l_Credit card' => '债务: 信用卡', + 'notes' => '备注', + 'unknown_journal_error' => '无法保存交易,请检查日志文件。', + 'attachment_not_found' => '找不到此附件。', + 'journal_link_bill' => '此交易已与帐单 :name 关联。若要移除关联,取消勾选复选框,使用规则将其与其他账单关联。', + 'transaction_stored_link' => '交易 #{ID} (“{title}”) 已保存。', + 'transaction_new_stored_link' => '交易 #{ID} 已保存。', + 'transaction_updated_link' => '交易 #{ID} (“{title}”) 已更新。', + 'transaction_updated_no_changes' => '交易#{ID}(“{title}”)未收到任何更改。', + 'first_split_decides' => '首笔拆分决定此字段的值', + 'first_split_overrules_source' => '首笔拆分可能覆盖来源账户', + 'first_split_overrules_destination' => '首笔拆分可能覆盖目标账户', + 'spent_x_of_y' => '花费{total}的{amount}', // new user: - 'welcome' => '欢迎使用 Firefly III!', - 'submit' => '提交', - 'submission' => '提交', - 'submit_yes_really' => '提交 (我知道我在干什么)', - 'getting_started' => '开始使用', - 'to_get_started' => '很高兴看到您成功安装 Firefly III。要开始使用此工具,请输入您主要使用的的银行名称与支票账户余额。别担心,若您有多个账户,可以稍后添加,此处仅为让 Firefly III 进行初始化设置。', - 'savings_balance_text' => 'Firefly III 会自动为您创建储蓄账户。默认情况下,储蓄账户里没有任何资金。但如果您告诉 Firefly III 相关金额,程序则会按照您的要求进行保存。', - 'finish_up_new_user' => '就到这里了!您可按下 送出 继续,您将被带至 Firefly III 的首页。', - 'stored_new_accounts_new_user' => '太好了!您的新账户已保存。', - 'set_preferred_language' => '若您倾向在 Firefly III 使用其他语言,请于此表示。', - 'language' => '语系', - 'new_savings_account' => ':bank_name 储蓄账户', - 'cash_wallet' => '现金钱包', - 'currency_not_present' => '若您日常使用的货币未列出,请不要担心,您可以在 选项 > 货币 创建您自己的货币。', + 'welcome' => '欢迎使用 Firefly III!', + 'submit' => '提交', + 'submission' => '提交', + 'submit_yes_really' => '提交 (我知道我在干什么)', + 'getting_started' => '开始使用', + 'to_get_started' => '很高兴看到您成功安装 Firefly III。要开始使用此工具,请输入您主要使用的的银行名称与支票账户余额。别担心,若您有多个账户,可以稍后添加,此处仅为让 Firefly III 进行初始化设置。', + 'savings_balance_text' => 'Firefly III 会自动为您创建储蓄账户。默认情况下,储蓄账户里没有任何资金。但如果您告诉 Firefly III 相关金额,程序则会按照您的要求进行保存。', + 'finish_up_new_user' => '就到这里了!您可按下 送出 继续,您将被带至 Firefly III 的首页。', + 'stored_new_accounts_new_user' => '太好了!您的新账户已保存。', + 'set_preferred_language' => '若您倾向在 Firefly III 使用其他语言,请于此表示。', + 'language' => '语系', + 'new_savings_account' => ':bank_name 储蓄账户', + 'cash_wallet' => '现金钱包', + 'currency_not_present' => '若您日常使用的货币未列出,请不要担心,您可以在 选项 > 货币 创建您自己的货币。', // home page: - 'transaction_table_description' => '包含您交易的表格', - 'opposing_account' => '对方账户', - 'yourAccounts' => '您的账户', - 'your_accounts' => '账户概览', - 'category_overview' => '类别概述', - 'expense_overview' => '支出账户概览', - 'revenue_overview' => '收入账户概览', - 'budgetsAndSpending' => '预算与支出', - 'budgets_and_spending' => '预算与支出', - 'go_to_budget' => '转到预算 "{budget}"', - 'go_to_deposits' => '前往收入', - 'go_to_expenses' => '前往支出', - 'savings' => '储蓄', - 'newWithdrawal' => '新支出', - 'newDeposit' => '新收入', - 'newTransfer' => '新转账', - 'bills_to_pay' => '待付账单', - 'per_day' => '每日', - 'left_to_spend_per_day' => '每日剩余支出', - 'bills_paid' => '已付账单', - 'custom_period' => '自定义周期', - 'reset_to_current' => '重置为当前周期', - 'select_period' => '选择周期', + 'transaction_table_description' => '包含您交易的表格', + 'opposing_account' => '对方账户', + 'yourAccounts' => '您的账户', + 'your_accounts' => '账户概览', + 'category_overview' => '类别概述', + 'expense_overview' => '支出账户概览', + 'revenue_overview' => '收入账户概览', + 'budgetsAndSpending' => '预算与支出', + 'budgets_and_spending' => '预算与支出', + 'go_to_budget' => '转到预算 "{budget}"', + 'go_to_deposits' => '前往收入', + 'go_to_expenses' => '前往支出', + 'savings' => '储蓄', + 'newWithdrawal' => '新支出', + 'newDeposit' => '新收入', + 'newTransfer' => '新转账', + 'bills_to_pay' => '待付账单', + 'per_day' => '每日', + 'left_to_spend_per_day' => '每日剩余支出', + 'bills_paid' => '已付账单', + 'custom_period' => '自定义周期', + 'reset_to_current' => '重置为当前周期', + 'select_period' => '选择周期', // menu and titles, should be recycled as often as possible: - 'currency' => '货币', - 'preferences' => '偏好设定', - 'logout' => '退出登录', - 'logout_other_sessions' => '退出所有其他已登录设备', - 'toggleNavigation' => '切换导览', - 'searchPlaceholder' => '搜索…', - 'version' => '版本', - 'dashboard' => '仪表盘', - 'income_and_expense' => '收入与支出', - 'all_money' => '全部资金', - 'unknown_source_plain' => '未知来源账户', - 'unknown_dest_plain' => '未知目标账户', - 'unknown_any_plain' => '未知账户', - 'unknown_budget_plain' => '无预算', - 'available_budget' => '可用预算 ({currency})', - 'currencies' => '货币', - 'activity' => '活动', - 'usage' => '使用情况', - 'accounts' => '账户', - 'Asset account' => '资产账户', - 'Default account' => '资产账户', - 'Expense account' => '支出账户', - 'Revenue account' => '收入账户', - 'Initial balance account' => '初始余额账户', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => '欠款', - 'account_type_Loan' => '贷款', - 'account_type_Mortgage' => '抵押', - 'account_type_debt' => '负债', - 'account_type_loan' => '贷款', - 'account_type_mortgage' => '抵押', - 'account_type_Credit card' => '信用卡', - 'credit_card_type_monthlyFull' => '每月全额付款', - 'liability_direction_credit' => '别人欠我这笔钱', - 'liability_direction_debit' => '我欠别人这笔钱', - 'liability_direction_credit_short' => '借款', - 'liability_direction_debit_short' => '欠款', - 'liability_direction__short' => '未知', - 'liability_direction_null_short' => '未知', - 'Liability credit' => '债务信用', - 'budgets' => '预算', - 'tags' => '标签', - 'reports' => '报表', - 'transactions' => '交易', - 'expenses' => '支出', - 'income' => '收入', - 'transfers' => '转账', - 'moneyManagement' => '金钱管理', - 'money_management' => '金钱管理', - 'tools' => '工具', - 'piggyBanks' => '存钱罐', - 'piggy_banks' => '存钱罐', - 'amount_x_of_y' => '{total} 中的 {current}', - 'bills' => '账单', - 'withdrawal' => '支出', - 'opening_balance' => '开户余额', - 'deposit' => '收入', - 'account' => '账户', - 'transfer' => '转账', - 'Withdrawal' => '支出', - 'Deposit' => '收入', - 'Transfer' => '转账', - 'bill' => '账单', - 'yes' => '是', - 'no' => '否', - 'amount' => '金额', - 'overview' => '概览', - 'saveOnAccount' => '存至账户', - 'unknown' => '未知', - 'monthly' => '每月', - 'profile' => '个人档案', - 'errors' => '错误', - 'debt_start_date' => '欠款开始日期', - 'debt_start_amount' => '欠款开始金额', - 'debt_start_amount_help' => '最佳实践是永远将此值设为负,阅读帮助页面 (右上角问号 (?) 图标) 获取更多信息。', - 'interest_period_help' => '此字段纯粹是装饰性的,不会为您进行计算。事实证明,银行非常狡猾,Firefly III 永远无法计算正确。', - 'store_new_liabilities_account' => '保存新债务账户', - 'edit_liabilities_account' => '编辑债务账户“:name”', - 'financial_control' => '财务管控', - 'accounting' => '记账', - 'automation' => '自动化', - 'others' => '其他', - 'classification' => '归类整理', - 'store_transaction' => '保存交易', + 'currency' => '货币', + 'preferences' => '偏好设定', + 'logout' => '退出登录', + 'logout_other_sessions' => '退出所有其他已登录设备', + 'toggleNavigation' => '切换导览', + 'searchPlaceholder' => '搜索…', + 'version' => '版本', + 'dashboard' => '仪表盘', + 'income_and_expense' => '收入与支出', + 'all_money' => '全部资金', + 'unknown_source_plain' => '未知来源账户', + 'unknown_dest_plain' => '未知目标账户', + 'unknown_any_plain' => '未知账户', + 'unknown_budget_plain' => '无预算', + 'available_budget' => '可用预算 ({currency})', + 'currencies' => '货币', + 'activity' => '活动', + 'usage' => '使用情况', + 'accounts' => '账户', + 'Asset account' => '资产账户', + 'Default account' => '资产账户', + 'Expense account' => '支出账户', + 'Revenue account' => '收入账户', + 'Initial balance account' => '初始余额账户', + 'account_type_Asset account' => '资产账户', + 'account_type_Expense account' => '支出账户', + 'account_type_Revenue account' => '收入账户', + 'account_type_Debt' => '欠款', + 'account_type_Loan' => '贷款', + 'account_type_Mortgage' => '抵押', + 'account_type_debt' => '负债', + 'account_type_loan' => '贷款', + 'account_type_mortgage' => '抵押', + 'account_type_Credit card' => '信用卡', + 'credit_card_type_monthlyFull' => '每月全额付款', + 'liability_direction_credit' => '别人欠我这笔钱', + 'liability_direction_debit' => '我欠别人这笔钱', + 'liability_direction_credit_short' => '借款', + 'liability_direction_debit_short' => '欠款', + 'liability_direction__short' => '未知', + 'liability_direction_null_short' => '未知', + 'Liability credit' => '债务信用', + 'budgets' => '预算', + 'tags' => '标签', + 'reports' => '报表', + 'transactions' => '交易', + 'expenses' => '支出', + 'income' => '收入', + 'transfers' => '转账', + 'moneyManagement' => '金钱管理', + 'money_management' => '金钱管理', + 'tools' => '工具', + 'piggyBanks' => '存钱罐', + 'piggy_banks' => '存钱罐', + 'amount_x_of_y' => '{total} 中的 {current}', + 'bills' => '账单', + 'withdrawal' => '支出', + 'opening_balance' => '开户余额', + 'deposit' => '收入', + 'account' => '账户', + 'transfer' => '转账', + 'Withdrawal' => '支出', + 'Deposit' => '收入', + 'Transfer' => '转账', + 'bill' => '账单', + 'yes' => '是', + 'no' => '否', + 'amount' => '金额', + 'overview' => '概览', + 'saveOnAccount' => '存至账户', + 'unknown' => '未知', + 'monthly' => '每月', + 'profile' => '个人档案', + 'errors' => '错误', + 'debt_start_date' => '欠款开始日期', + 'debt_start_amount' => '欠款开始金额', + 'debt_start_amount_help' => '最佳实践是永远将此值设为负,阅读帮助页面 (右上角问号 (?) 图标) 获取更多信息。', + 'interest_period_help' => '此字段纯粹是装饰性的,不会为您进行计算。事实证明,银行非常狡猾,Firefly III 永远无法计算正确。', + 'store_new_liabilities_account' => '保存新债务账户', + 'edit_liabilities_account' => '编辑债务账户“:name”', + 'financial_control' => '财务管控', + 'accounting' => '记账', + 'automation' => '自动化', + 'others' => '其他', + 'classification' => '归类整理', + 'store_transaction' => '保存交易', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2208,111 @@ return [ * */ - // reports: - 'report_default' => ':start – :end 的默认财务报表', - 'report_audit' => ':start – :end 的交易历史概览', - 'report_category' => ':start – :end 的分类报表', - 'report_double' => ':start – :end 的支出/收入账户报表', - 'report_budget' => ':start – :end 的预算报表', - 'report_tag' => ':start – :end 的标签报表', - 'quick_link_reports' => '快捷链接', - 'quick_link_examples' => '这些是示例链接以帮助您开始使用。点击右上角问号 (?) 图标查看帮助页面,获取所有报表的信息和可以使用的“魔法词”。', - 'quick_link_default_report' => '默认财务报表', - 'quick_link_audit_report' => '交易历史概览', - 'report_this_month_quick' => '当前月份,全部账户', - 'report_last_month_quick' => '上一月份,全部账户', - 'report_this_year_quick' => '当前年份,全部账户', - 'report_this_fiscal_year_quick' => '当前财年,全部账户', - 'report_all_time_quick' => '所有时间,全部账户', - 'reports_can_bookmark' => '提示:可以将报表加入书签。', - 'incomeVsExpenses' => '收入 vs. 支出', - 'accountBalances' => '账户余额', - 'balanceStart' => '此周期起始余额', - 'balanceEnd' => '此周期结束余额', - 'splitByAccount' => '按账户拆分', - 'coveredWithTags' => '以标签涵盖', - 'leftInBudget' => '预算剩余', - 'left_in_debt' => '到期金额', - 'sumOfSums' => '总和', - 'noCategory' => '(没有分类)', - 'notCharged' => '(尚) 未开始', - 'inactive' => '已停用', - 'active' => '启用', - 'difference' => '差异', - 'money_flowing_in' => '流入', - 'money_flowing_out' => '流出', - 'topX' => '前 :number', - 'show_full_list' => '显示完整列表', - 'show_only_top' => '仅显示前 :number', - 'report_type' => '报表类型', - 'report_type_default' => '默认财务报表', - 'report_type_audit' => '交易历史概览 (审计)', - 'report_type_category' => '分类报表', - 'report_type_budget' => '预算报表', - 'report_type_tag' => '标签报表', - 'report_type_double' => '支出/收入账户报表', - 'more_info_help' => '可在帮助页面找到更多关于报表类型的信息,请点击右上角的问号 (?) 图标。', - 'report_included_accounts' => '已包含的账户', - 'report_date_range' => '日期范围', - 'report_preset_ranges' => '预设范围', - 'shared' => '共用', - 'fiscal_year' => '财政年度', - 'income_entry' => ':start – :end 账户“:name”的收入', - 'expense_entry' => ':start – :end 账户“:name”的支出', - 'category_entry' => ':start – :end 分类“:name”的收入', - 'budget_spent_amount' => ':start – :end 预算“:budget”的支出', - 'balance_amount' => ':start – :end 从账户“:account”支付的预算“:budget”的支出', - 'no_audit_activity' => ':start – :end 账户“:account_name”没有任何活动。', - 'audit_end_balance' => '账户“:account_name”在 :end 末的账户余额为::balance', - 'reports_extra_options' => '额外选项', - 'report_has_no_extra_options' => '此报表没有额外选项', - 'reports_submit' => '查看报表', - 'end_after_start_date' => '报表的结束日期必须在开始日期之后。', - 'select_category' => '选择类别', - 'select_budget' => '选择预算', - 'select_tag' => '选择标签', - 'income_per_category' => '每个类别的收入', - 'expense_per_category' => '每个类别的支出', - 'expense_per_budget' => '每个预算的费用', - 'income_per_account' => '每个账户的收入', - 'expense_per_account' => '每个账户的支出', - 'expense_per_tag' => '每个标签的支出', - 'income_per_tag' => '每个标签的收入', - 'include_expense_not_in_budget' => '包含的支出不在所选的预算内', - 'include_expense_not_in_account' => '包含的支出不在所选的账户内', - 'include_expense_not_in_category' => '包含的支出不在所选的份额里内', - 'include_income_not_in_category' => '未列入所选类别的收入', - 'include_income_not_in_account' => '未列入所选账户的收入', - 'include_income_not_in_tags' => '未包含在所选标记中的收入', - 'include_expense_not_in_tags' => '未包含在所选标记中的支出', - 'everything_else' => '其他', - 'income_and_expenses' => '收入与支出', - 'spent_average' => '支出 (平均)', - 'income_average' => '收入 (平均)', - 'transaction_count' => '交易数', - 'average_spending_per_account' => '每个账户的平均支出', - 'average_income_per_account' => '每个账户的平均收入', - 'total' => '总计', - 'description' => '描述', - 'sum_of_period' => '区间内的总和', - 'average_in_period' => '区间平均', - 'account_role_defaultAsset' => '默认资产账户', - 'account_role_sharedAsset' => '共用资产账户', - 'account_role_savingAsset' => '储蓄账户', - 'account_role_ccAsset' => '信用卡', - 'account_role_cashWalletAsset' => '现金钱包', - 'budget_chart_click' => '请点击上表中的预算名称查看图表。', - 'category_chart_click' => '请点击上表中的类别名称以查看图表。', - 'in_out_accounts' => '每个组合的收入与支出', - 'in_out_accounts_per_asset' => '收入与支出 (每个资产账户)', - 'in_out_per_category' => '每个分类的收入与支出', - 'out_per_budget' => '每个预算的支出', - 'select_expense_revenue' => '选择支出/收入账户', - 'multi_currency_report_sum' => '由于此列表包括多种货币,您所看到的总和可能无意义。报表会总是以您的默认货币为主。', - 'sum_in_default_currency' => '总额会总是以您的默认货币显示', - 'net_filtered_prefs' => '此图表永远不会包括未勾选“包含于净资产”选项的账户', + 'report_default' => ':start – :end 的默认财务报表', + 'report_audit' => ':start – :end 的交易历史概览', + 'report_category' => ':start – :end 的分类报表', + 'report_double' => ':start – :end 的支出/收入账户报表', + 'report_budget' => ':start – :end 的预算报表', + 'report_tag' => ':start – :end 的标签报表', + 'quick_link_reports' => '快捷链接', + 'quick_link_examples' => '这些是示例链接以帮助您开始使用。点击右上角问号 (?) 图标查看帮助页面,获取所有报表的信息和可以使用的“魔法词”。', + 'quick_link_default_report' => '默认财务报表', + 'quick_link_audit_report' => '交易历史概览', + 'report_this_month_quick' => '当前月份,全部账户', + 'report_last_month_quick' => '上一月份,全部账户', + 'report_this_year_quick' => '当前年份,全部账户', + 'report_this_fiscal_year_quick' => '当前财年,全部账户', + 'report_all_time_quick' => '所有时间,全部账户', + 'reports_can_bookmark' => '提示:可以将报表加入书签。', + 'incomeVsExpenses' => '收入 vs. 支出', + 'accountBalances' => '账户余额', + 'balanceStart' => '此周期起始余额', + 'balanceEnd' => '此周期结束余额', + 'splitByAccount' => '按账户拆分', + 'coveredWithTags' => '以标签涵盖', + 'leftInBudget' => '预算剩余', + 'left_in_debt' => '到期金额', + 'sumOfSums' => '总和', + 'noCategory' => '(没有分类)', + 'notCharged' => '(尚) 未开始', + 'inactive' => '已停用', + 'active' => '启用', + 'difference' => '差异', + 'money_flowing_in' => '流入', + 'money_flowing_out' => '流出', + 'topX' => '前 :number', + 'show_full_list' => '显示完整列表', + 'show_only_top' => '仅显示前 :number', + 'report_type' => '报表类型', + 'report_type_default' => '默认财务报表', + 'report_type_audit' => '交易历史概览 (审计)', + 'report_type_category' => '分类报表', + 'report_type_budget' => '预算报表', + 'report_type_tag' => '标签报表', + 'report_type_double' => '支出/收入账户报表', + 'more_info_help' => '可在帮助页面找到更多关于报表类型的信息,请点击右上角的问号 (?) 图标。', + 'report_included_accounts' => '已包含的账户', + 'report_date_range' => '日期范围', + 'report_preset_ranges' => '预设范围', + 'shared' => '共用', + 'fiscal_year' => '财政年度', + 'income_entry' => ':start – :end 账户“:name”的收入', + 'expense_entry' => ':start – :end 账户“:name”的支出', + 'category_entry' => ':start – :end 分类“:name”的收入', + 'budget_spent_amount' => ':start – :end 预算“:budget”的支出', + 'balance_amount' => ':start – :end 从账户“:account”支付的预算“:budget”的支出', + 'no_audit_activity' => ':start – :end 账户“:account_name”没有任何活动。', + 'audit_end_balance' => '账户“:account_name”在 :end 末的账户余额为::balance', + 'reports_extra_options' => '额外选项', + 'report_has_no_extra_options' => '此报表没有额外选项', + 'reports_submit' => '查看报表', + 'end_after_start_date' => '报表的结束日期必须在开始日期之后。', + 'select_category' => '选择类别', + 'select_budget' => '选择预算', + 'select_tag' => '选择标签', + 'income_per_category' => '每个类别的收入', + 'expense_per_category' => '每个类别的支出', + 'expense_per_budget' => '每个预算的费用', + 'income_per_account' => '每个账户的收入', + 'expense_per_account' => '每个账户的支出', + 'expense_per_tag' => '每个标签的支出', + 'income_per_tag' => '每个标签的收入', + 'include_expense_not_in_budget' => '包含的支出不在所选的预算内', + 'include_expense_not_in_account' => '包含的支出不在所选的账户内', + 'include_expense_not_in_category' => '包含的支出不在所选的份额里内', + 'include_income_not_in_category' => '未列入所选类别的收入', + 'include_income_not_in_account' => '未列入所选账户的收入', + 'include_income_not_in_tags' => '未包含在所选标记中的收入', + 'include_expense_not_in_tags' => '未包含在所选标记中的支出', + 'everything_else' => '其他', + 'income_and_expenses' => '收入与支出', + 'spent_average' => '支出 (平均)', + 'income_average' => '收入 (平均)', + 'transaction_count' => '交易数', + 'average_spending_per_account' => '每个账户的平均支出', + 'average_income_per_account' => '每个账户的平均收入', + 'total' => '总计', + 'description' => '描述', + 'sum_of_period' => '区间内的总和', + 'average_in_period' => '区间平均', + 'account_role_defaultAsset' => '默认资产账户', + 'account_role_sharedAsset' => '共用资产账户', + 'account_role_savingAsset' => '储蓄账户', + 'account_role_ccAsset' => '信用卡', + 'account_role_cashWalletAsset' => '现金钱包', + 'budget_chart_click' => '请点击上表中的预算名称查看图表。', + 'category_chart_click' => '请点击上表中的类别名称以查看图表。', + 'in_out_accounts' => '每个组合的收入与支出', + 'in_out_accounts_per_asset' => '收入与支出 (每个资产账户)', + 'in_out_per_category' => '每个分类的收入与支出', + 'out_per_budget' => '每个预算的支出', + 'select_expense_revenue' => '选择支出/收入账户', + 'multi_currency_report_sum' => '由于此列表包括多种货币,您所看到的总和可能无意义。报表会总是以您的默认货币为主。', + 'sum_in_default_currency' => '总额会总是以您的默认货币显示', + 'net_filtered_prefs' => '此图表永远不会包括未勾选“包含于净资产”选项的账户', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2323,98 @@ return [ * */ - // charts: - 'chart' => '图表', - 'month' => '月', - 'budget' => '预算', - 'spent' => '支出', - 'spent_capped' => '支出 (上限)', - 'spent_in_budget' => '预算内支出', - 'left_to_spend' => '剩余支出', - 'earned' => '收入', - 'overspent' => '超支', - 'left' => '剩余', - 'max-amount' => '最大', - 'min-amount' => '最小金额', - 'journal-amount' => '目前账单条目', - 'name' => '名称', - 'date' => '日期', - 'date_and_time' => '日期和时间', - 'time' => '时间', - 'paid' => '已付款', - 'unpaid' => '未付款', - 'day' => '日', - 'budgeted' => '预算上限', - 'period' => '区间', - 'balance' => '余额', - 'in_out_period' => '本周期流入流出', - 'sum' => '总计', - 'summary' => '概要', - 'average' => '平均', - 'balanceFor' => ':name 的余额', - 'no_tags' => '(无标签)', + 'chart' => '图表', + 'month' => '月', + 'budget' => '预算', + 'spent' => '支出', + 'spent_capped' => '支出 (上限)', + 'spent_in_budget' => '预算内支出', + 'left_to_spend' => '剩余支出', + 'earned' => '收入', + 'overspent' => '超支', + 'left' => '剩余', + 'max-amount' => '最大', + 'min-amount' => '最小金额', + 'journal-amount' => '目前账单条目', + 'name' => '名称', + 'date' => '日期', + 'date_and_time' => '日期和时间', + 'time' => '时间', + 'paid' => '已付款', + 'unpaid' => '未付款', + 'day' => '日', + 'budgeted' => '预算上限', + 'period' => '区间', + 'balance' => '余额', + 'in_out_period' => '本周期流入流出', + 'sum' => '总计', + 'summary' => '概要', + 'average' => '平均', + 'balanceFor' => ':name 的余额', + 'no_tags' => '(无标签)', + 'nothing_found' => '(没有找到)', // piggy banks: - 'event_history' => '事件历史', - 'add_money_to_piggy' => '存入存钱罐 “:name”', - 'piggy_bank' => '存钱罐', - 'new_piggy_bank' => '新存钱罐', - 'store_piggy_bank' => '保存新存钱罐', - 'stored_piggy_bank' => '保存新存钱罐“:name”', - 'account_status' => '账户状态', - 'left_for_piggy_banks' => '可用于存钱罐', - 'sum_of_piggy_banks' => '存钱罐总金额', - 'saved_so_far' => '已存金额', - 'left_to_save' => '剩余金额', - 'suggested_amount' => '建议每月储蓄金额', - 'add_money_to_piggy_title' => '存至存钱罐 “:name”', - 'remove_money_from_piggy_title' => '自存钱罐 “:name” 中取出', - 'add' => '新增', - 'no_money_for_piggy' => '您已没有钱可放至存钱罐', - 'suggested_savings_per_month' => '每月建议金额', + 'event_history' => '事件历史', + 'add_money_to_piggy' => '存入存钱罐 “:name”', + 'piggy_bank' => '存钱罐', + 'new_piggy_bank' => '新存钱罐', + 'store_piggy_bank' => '保存新存钱罐', + 'stored_piggy_bank' => '保存新存钱罐“:name”', + 'account_status' => '账户状态', + 'left_for_piggy_banks' => '可用于存钱罐', + 'sum_of_piggy_banks' => '存钱罐总金额', + 'saved_so_far' => '已存金额', + 'left_to_save' => '剩余金额', + 'suggested_amount' => '建议每月储蓄金额', + 'add_money_to_piggy_title' => '存至存钱罐 “:name”', + 'remove_money_from_piggy_title' => '自存钱罐 “:name” 中取出', + 'add' => '新增', + 'no_money_for_piggy' => '您已没有钱可放至存钱罐', + 'suggested_savings_per_month' => '每月建议金额', - 'remove' => '移除', - 'max_amount_add' => '可以增加的最大金额为', - 'max_amount_remove' => '所能移除之最大金额为', - 'update_piggy_button' => '更新存钱罐', - 'update_piggy_title' => '更新存钱罐“:name”', - 'updated_piggy_bank' => '已更新存钱罐“:name”', - 'details' => '详情', - 'events' => '事件', - 'target_amount' => '目标金额', - 'start_date' => '开始日期', - 'no_start_date' => '无开始日期', - 'target_date' => '目标日期', - 'no_target_date' => '无目标日期', - 'table' => '表格', - 'delete_piggy_bank' => '删除存钱罐 ":name"', - 'cannot_add_amount_piggy' => '无法增加 :amount 至 “:name”。', - 'cannot_remove_from_piggy' => '无法自 “:name” 移除 :amount。', - 'deleted_piggy_bank' => '删除存钱罐 ":name"', - 'added_amount_to_piggy' => '已新增 :amount 至 “:name”', - 'removed_amount_from_piggy' => '已自 “:name” 移除 :amount', - 'piggy_events' => '相关的存钱罐', + 'remove' => '移除', + 'max_amount_add' => '可以增加的最大金额为', + 'max_amount_remove' => '所能移除之最大金额为', + 'update_piggy_button' => '更新存钱罐', + 'update_piggy_title' => '更新存钱罐“:name”', + 'updated_piggy_bank' => '已更新存钱罐“:name”', + 'details' => '详情', + 'events' => '事件', + 'target_amount' => '目标金额', + 'start_date' => '开始日期', + 'no_start_date' => '无开始日期', + 'target_date' => '目标日期', + 'no_target_date' => '无目标日期', + 'table' => '表格', + 'delete_piggy_bank' => '删除存钱罐 ":name"', + 'cannot_add_amount_piggy' => '无法增加 :amount 至 “:name”。', + 'cannot_remove_from_piggy' => '无法自 “:name” 移除 :amount。', + 'deleted_piggy_bank' => '删除存钱罐 ":name"', + 'added_amount_to_piggy' => '已新增 :amount 至 “:name”', + 'removed_amount_from_piggy' => '已自 “:name” 移除 :amount', + 'piggy_events' => '相关的存钱罐', // tags - 'delete_tag' => '删除标签 ":tag"', - 'deleted_tag' => '已删除标签 ":tag"', - 'new_tag' => '建立新标签', - 'edit_tag' => '编辑标签 ":tag"', - 'updated_tag' => '已更新标签“:tag”', - 'created_tag' => '标签 “:tag” 已被建立!', + 'delete_tag' => '删除标签 ":tag"', + 'deleted_tag' => '已删除标签 ":tag"', + 'new_tag' => '建立新标签', + 'edit_tag' => '编辑标签 ":tag"', + 'updated_tag' => '已更新标签“:tag”', + 'created_tag' => '标签 “:tag” 已被建立!', - 'transaction_journal_information' => '交易信息', - 'transaction_journal_amount' => '金额信息', - 'transaction_journal_meta' => '元信息', - 'transaction_journal_more' => '更多信息', - 'basic_journal_information' => '基础交易信息', - 'transaction_journal_extra' => '额外信息', - 'att_part_of_journal' => '在“:journal”中存储', - 'total_amount' => '总金额', - 'number_of_decimals' => '小数位数', + 'transaction_journal_information' => '交易信息', + 'transaction_journal_amount' => '金额信息', + 'transaction_journal_meta' => '元信息', + 'transaction_journal_more' => '更多信息', + 'basic_journal_information' => '基础交易信息', + 'transaction_journal_extra' => '额外信息', + 'att_part_of_journal' => '在“:journal”中存储', + 'total_amount' => '总金额', + 'number_of_decimals' => '小数位数', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2425,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => '已撤回“:address”的邀请', - 'invite_is_deleted' => '已删除“:address”的邀请', - 'invite_new_user_title' => '邀请新用户', - 'invite_new_user_text' => '作为管理者,您可以邀请用户注册您的Firefly III,他们可以通过您分享的直链注册一个账户。被邀请的用户和邀请链接显示在下表中,您可以自由分享邀请链接。', - 'invited_user_mail' => '电子邮件地址', - 'invite_user' => '邀请用户', - 'user_is_invited' => '电子邮件地址“:address”已被邀请到 Fifrefly III', - 'administration' => '管理', - 'system_settings' => '系统设置', - 'code_already_used' => '邀请码已使用', - 'user_administration' => '用户管理', - 'list_all_users' => '所有用户', - 'all_users' => '所有用户', - 'instance_configuration' => '设置', - 'firefly_instance_configuration' => 'Firefly III 设置', - 'setting_single_user_mode' => '单用户模式', - 'setting_single_user_mode_explain' => '默认情况下,Firefly III 只接受一 (1) 次来自您自己的注册请求。这是一项安全防护措施,若没有您的批准,其他人将无法使用您的站点,所有的注册请求都将被拒绝。当您取消选中此复选框后,若站点可以访问 (站点接入外网),则其他人也可以使用您的站点。', - 'store_configuration' => '保存配置', - 'single_user_administration' => '管理用户 :email', - 'edit_user' => '编辑用户 :email', - 'hidden_fields_preferences' => '您可以在偏好设定中启用更多交易选项。', - 'user_data_information' => '用户数据', - 'user_information' => '用户信息', - 'total_size' => '总大小', - 'budget_or_budgets' => ':count 笔预算|:count 笔预算', - 'budgets_with_limits' => ':count 笔预算有上限|:count 笔预算有上限', - 'nr_of_rules_in_total_groups' => ':count_groups规则组中,包含:count_rules条规则', - 'tag_or_tags' => ':count 个标签|:count 个标签', - 'configuration_updated' => '已更新配置', - 'setting_is_demo_site' => '演示网站', - 'setting_is_demo_site_explain' => '若您勾选此选项,此安装将会以展示网站方式运作,会有奇怪的副作用。', - 'block_code_bounced' => '电子邮件被退回', - 'block_code_expired' => '演示账户已过期', - 'no_block_code' => '无封禁理由或用户未被封禁', - 'block_code_email_changed' => '用户尚未确认新的电子邮件地址', - 'admin_update_email' => '与个人档案页面相反,用户不会被通知他们的电子邮件地址已变更!', - 'update_user' => '更新用户', - 'updated_user' => '用户资料已更改。', - 'delete_user' => '删除用户 :email', - 'user_deleted' => '用户已被删除', - 'send_test_email' => '发送测试邮件消息', - 'send_test_email_text' => '要查看您的安装是否能够发送电子邮件或发布Slack消息,请按下此按钮。 您在这里不会看到任何错误(如果有的话), 日志文件将显示错误信息。 您可以多次点击这个按钮。这里没有垃圾邮件控制。 消息将发送到 :email 并应该很快到达。', - 'send_message' => '发送消息', - 'send_test_triggered' => '测试已触发,请检查您的收件箱与日志文件。', - 'give_admin_careful' => '被授予管理员权限的用户可以收回您的权限。请千万注意这点。', - 'admin_maintanance_title' => '维护', - 'admin_maintanance_expl' => '用于 Firefly III 维护的漂亮按钮', - 'admin_maintenance_clear_cache' => '清除缓存', - 'admin_notifications' => '管理操作通知', - 'admin_notifications_expl' => '管理员可以启用或禁用以下通知。 如果您也想要通过 Slack 获取这些消息,请设置“incoming Webhook” URL。', - 'admin_notification_check_user_new_reg' => '用户访问到注册后的欢迎消息', - 'admin_notification_check_admin_new_reg' => '管理员获取新用户注册通知', - 'admin_notification_check_new_version' => '有新版本可用', - 'admin_notification_check_invite_created' => '用户被邀请注册 Firefly III', - 'admin_notification_check_invite_redeemed' => '用户邀请已被激活', - 'all_invited_users' => '所有受邀用户', - 'save_notification_settings' => '保存设置', - 'notification_settings_saved' => '通知设置已保存', - - - 'split_transaction_title' => '拆分交易的描述', - 'split_transaction_title_help' => '如果您创建了一笔拆分交易,必须有一个所有拆分的全局描述。', - 'split_title_help' => '如果您创建了一笔拆分交易,必须有一个所有拆分的全局描述。', - 'you_create_transfer' => '您正在创建一笔转账', - 'you_create_withdrawal' => '您正在创建一笔支出', - 'you_create_deposit' => '您正在创建一笔收入', + 'invite_is_already_redeemed' => '已撤回“:address”的邀请', + 'invite_is_deleted' => '已删除“:address”的邀请', + 'invite_new_user_title' => '邀请新用户', + 'invite_new_user_text' => '作为管理者,您可以邀请用户注册您的Firefly III,他们可以通过您分享的直链注册一个账户。被邀请的用户和邀请链接显示在下表中,您可以自由分享邀请链接。', + 'invited_user_mail' => '电子邮件地址', + 'invite_user' => '邀请用户', + 'user_is_invited' => '电子邮件地址“:address”已被邀请到 Fifrefly III', + 'administration' => '管理', + 'system_settings' => '系统设置', + 'code_already_used' => '邀请码已使用', + 'user_administration' => '用户管理', + 'list_all_users' => '所有用户', + 'all_users' => '所有用户', + 'instance_configuration' => '设置', + 'firefly_instance_configuration' => 'Firefly III 设置', + 'setting_single_user_mode' => '单用户模式', + 'setting_single_user_mode_explain' => '默认情况下,Firefly III 只接受一 (1) 次来自您自己的注册请求。这是一项安全防护措施,若没有您的批准,其他人将无法使用您的站点,所有的注册请求都将被拒绝。当您取消选中此复选框后,若站点可以访问 (站点接入外网),则其他人也可以使用您的站点。', + 'store_configuration' => '保存配置', + 'single_user_administration' => '管理用户 :email', + 'edit_user' => '编辑用户 :email', + 'hidden_fields_preferences' => '您可以在偏好设定中启用更多交易选项。', + 'user_data_information' => '用户数据', + 'user_information' => '用户信息', + 'total_size' => '总大小', + 'budget_or_budgets' => ':count 笔预算|:count 笔预算', + 'budgets_with_limits' => ':count 笔预算有上限|:count 笔预算有上限', + 'nr_of_rules_in_total_groups' => ':count_groups规则组中,包含:count_rules条规则', + 'tag_or_tags' => ':count 个标签|:count 个标签', + 'configuration_updated' => '已更新配置', + 'setting_is_demo_site' => '演示网站', + 'setting_is_demo_site_explain' => '若您勾选此选项,此安装将会以展示网站方式运作,会有奇怪的副作用。', + 'block_code_bounced' => '电子邮件被退回', + 'block_code_expired' => '演示账户已过期', + 'no_block_code' => '无封禁理由或用户未被封禁', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => '用户尚未确认新的电子邮件地址', + 'admin_update_email' => '与个人档案页面相反,用户不会被通知他们的电子邮件地址已变更!', + 'update_user' => '更新用户', + 'updated_user' => '用户资料已更改。', + 'delete_user' => '删除用户 :email', + 'user_deleted' => '用户已被删除', + 'send_test_email' => '发送测试邮件消息', + 'send_test_email_text' => '要查看您的安装是否能够发送电子邮件或发布Slack消息,请按下此按钮。 您在这里不会看到任何错误(如果有的话), 日志文件将显示错误信息。 您可以多次点击这个按钮。这里没有垃圾邮件控制。 消息将发送到 :email 并应该很快到达。', + 'send_message' => '发送消息', + 'send_test_triggered' => '测试已触发,请检查您的收件箱与日志文件。', + 'give_admin_careful' => '被授予管理员权限的用户可以收回您的权限。请千万注意这点。', + 'admin_maintanance_title' => '维护', + 'admin_maintanance_expl' => '用于 Firefly III 维护的漂亮按钮', + 'admin_maintenance_clear_cache' => '清除缓存', + 'admin_notifications' => '管理操作通知', + 'admin_notifications_expl' => '管理员可以启用或禁用以下通知。 如果您也想要通过 Slack 获取这些消息,请设置“incoming Webhook” URL。', + 'admin_notification_check_user_new_reg' => '用户访问到注册后的欢迎消息', + 'admin_notification_check_admin_new_reg' => '管理员获取新用户注册通知', + 'admin_notification_check_new_version' => '有新版本可用', + 'admin_notification_check_invite_created' => '用户被邀请注册 Firefly III', + 'admin_notification_check_invite_redeemed' => '用户邀请已被激活', + 'all_invited_users' => '所有受邀用户', + 'save_notification_settings' => '保存设置', + 'notification_settings_saved' => '通知设置已保存', + 'split_transaction_title' => '拆分交易的描述', + 'split_transaction_title_help' => '如果您创建了一笔拆分交易,必须有一个所有拆分的全局描述。', + 'split_title_help' => '如果您创建了一笔拆分交易,必须有一个所有拆分的全局描述。', + 'you_create_transfer' => '您正在创建一笔转账', + 'you_create_withdrawal' => '您正在创建一笔支出', + 'you_create_deposit' => '您正在创建一笔收入', // links - 'journal_link_configuration' => '交易关联配置', - 'create_new_link_type' => '创建新关联类型', - 'store_new_link_type' => '保存新关联类型', - 'update_link_type' => '更新关联类型', - 'edit_link_type' => '编辑关联类型“:name”', - 'updated_link_type' => '更新关联类型“:name”', - 'delete_link_type' => '删除关联类型“:name”', - 'deleted_link_type' => '删除关联类型“:name”', - 'stored_new_link_type' => '保存关联类型“:name”', - 'cannot_edit_link_type' => '无法编辑连结类型 ":name"', - 'link_type_help_name' => '例如“复制”', - 'link_type_help_inward' => '例如“进行复制”', - 'link_type_help_outward' => '例如“的复制来源为”', - 'save_connections_by_moving' => '将此交易关联移动到另一个关联类型并保存:', - 'do_not_save_connection' => '(不保存连接)', - 'link_transaction' => '关联交易', - 'link_to_other_transaction' => '链结此交易至另一笔', - 'select_transaction_to_link' => '选择一笔交易来关联此交易。关联目前尚未在 Firefly III 中使用 (未显示),但开发者已计划在将来进行改动。您可以使用搜索框来用标题或 ID 选择一笔交易。如果您想要添加自定义关联类型,请访问管理页面。', - 'this_transaction' => '这笔交易', - 'transaction' => '交易', - 'comments' => '评论', - 'link_notes' => '任何您希望与关联一起保存的备注。', - 'invalid_link_selection' => '无法关联这些交易', - 'selected_transaction' => '已选交易', - 'journals_linked' => '交易已关联', - 'journals_error_linked' => '这些交易已互相链结', - 'journals_link_to_self' => '您无法将一笔交易关联至此交易本身', - 'journal_links' => '交易关联', - 'this_withdrawal' => '此支出', - 'this_deposit' => '这笔收入', - 'this_transfer' => '此传输', - 'overview_for_link' => '关联类型“:name”概览', - 'source_transaction' => '源交易记录', - 'link_description' => '关联描述', - 'destination_transaction' => '指定的交易', - 'delete_journal_link' => '删除 :source:destination之间的联繫', - 'deleted_link' => '已删除关联', + 'journal_link_configuration' => '交易关联配置', + 'create_new_link_type' => '创建新关联类型', + 'store_new_link_type' => '保存新关联类型', + 'update_link_type' => '更新关联类型', + 'edit_link_type' => '编辑关联类型“:name”', + 'updated_link_type' => '更新关联类型“:name”', + 'delete_link_type' => '删除关联类型“:name”', + 'deleted_link_type' => '删除关联类型“:name”', + 'stored_new_link_type' => '保存关联类型“:name”', + 'cannot_edit_link_type' => '无法编辑连结类型 ":name"', + 'link_type_help_name' => '例如“复制”', + 'link_type_help_inward' => '例如“进行复制”', + 'link_type_help_outward' => '例如“的复制来源为”', + 'save_connections_by_moving' => '将此交易关联移动到另一个关联类型并保存:', + 'do_not_save_connection' => '(不保存连接)', + 'link_transaction' => '关联交易', + 'link_to_other_transaction' => '链结此交易至另一笔', + 'select_transaction_to_link' => '选择一笔交易来关联此交易。关联目前尚未在 Firefly III 中使用 (未显示),但开发者已计划在将来进行改动。您可以使用搜索框来用标题或 ID 选择一笔交易。如果您想要添加自定义关联类型,请访问管理页面。', + 'this_transaction' => '这笔交易', + 'transaction' => '交易', + 'comments' => '评论', + 'link_notes' => '任何您希望与关联一起保存的备注。', + 'invalid_link_selection' => '无法关联这些交易', + 'selected_transaction' => '已选交易', + 'journals_linked' => '交易已关联', + 'journals_error_linked' => '这些交易已互相链结', + 'journals_link_to_self' => '您无法将一笔交易关联至此交易本身', + 'journal_links' => '交易关联', + 'this_withdrawal' => '此支出', + 'this_deposit' => '这笔收入', + 'this_transfer' => '此传输', + 'overview_for_link' => '关联类型“:name”概览', + 'source_transaction' => '源交易记录', + 'link_description' => '关联描述', + 'destination_transaction' => '指定的交易', + 'delete_journal_link' => '删除 :source:destination之间的联繫', + 'deleted_link' => '已删除关联', // link translations: - 'Paid_name' => '已付款', - 'Refund_name' => '退款', - 'Reimbursement_name' => '报销', - 'Related_name' => '相关', - 'relates to_inward' => '关联于', - 'is (partially) refunded by_inward' => '的 (部分) 退款方为', - 'is (partially) paid for by_inward' => '的 (部分) 付款目标为', - 'is (partially) reimbursed by_inward' => '的 (部分) 还款方为', - 'inward_transaction' => '内向交易', - 'outward_transaction' => '外向交易', - 'relates to_outward' => '关联于', - '(partially) refunds_outward' => '(部分) 退款', - '(partially) pays for_outward' => '(部分) 支付', - '(partially) reimburses_outward' => '(部分) 还款', - 'is (partially) refunded by' => '的 (部分) 退款方为', - 'is (partially) paid for by' => '的 (部分) 付款目标为', - 'is (partially) reimbursed by' => '的 (部分) 还款方为', - 'relates to' => '关联于', - '(partially) refunds' => '(部分) 退款', - '(partially) pays for' => '(部分) 支付', - '(partially) reimburses' => '(部分) 还款', + 'Paid_name' => '已付款', + 'Refund_name' => '退款', + 'Reimbursement_name' => '报销', + 'Related_name' => '相关', + 'relates to_inward' => '关联于', + 'is (partially) refunded by_inward' => '的 (部分) 退款方为', + 'is (partially) paid for by_inward' => '的 (部分) 付款目标为', + 'is (partially) reimbursed by_inward' => '的 (部分) 还款方为', + 'inward_transaction' => '内向交易', + 'outward_transaction' => '外向交易', + 'relates to_outward' => '关联于', + '(partially) refunds_outward' => '(部分) 退款', + '(partially) pays for_outward' => '(部分) 支付', + '(partially) reimburses_outward' => '(部分) 还款', + 'is (partially) refunded by' => '的 (部分) 退款方为', + 'is (partially) paid for by' => '的 (部分) 付款目标为', + 'is (partially) reimbursed by' => '的 (部分) 还款方为', + 'relates to' => '关联于', + '(partially) refunds' => '(部分) 退款', + '(partially) pays for' => '(部分) 支付', + '(partially) reimburses' => '(部分) 还款', // split a transaction: - 'splits' => '拆分', - 'add_another_split' => '增加另一笔拆分', - 'cannot_edit_opening_balance' => '您无法编辑一个账户的开户余额。', - 'no_edit_multiple_left' => '您没有选择有效的交易进行编辑。', - 'breadcrumb_convert_group' => '转换交易', - 'convert_invalid_source' => '交易 #%d 的来源信息无效。', - 'convert_invalid_destination' => '交易 #%d 的目标信息无效。', - 'create_another' => '保存后,返回此页面以创建新记录', - 'after_update_create_another' => '更新后,返回此页面继续编辑。', - 'store_as_new' => '保存为新交易而不是更新此交易。', - 'reset_after' => '提交后重置表单', - 'errors_submission' => '您提交的内容有误,请检查错误信息。', - 'transaction_expand_split' => '展开拆分', - 'transaction_collapse_split' => '折叠拆分', + 'splits' => '拆分', + 'add_another_split' => '增加另一笔拆分', + 'cannot_edit_opening_balance' => '您无法编辑一个账户的开户余额。', + 'no_edit_multiple_left' => '您没有选择有效的交易进行编辑。', + 'breadcrumb_convert_group' => '转换交易', + 'convert_invalid_source' => '交易 #%d 的来源信息无效。', + 'convert_invalid_destination' => '交易 #%d 的目标信息无效。', + 'create_another' => '保存后,返回此页面以创建新记录', + 'after_update_create_another' => '更新后,返回此页面继续编辑。', + 'store_as_new' => '保存为新交易而不是更新此交易。', + 'reset_after' => '提交后重置表单', + 'errors_submission' => '您的提交有误,请查看下面输出的错误信息。', + 'errors_submission_v2' => '您的提交有误,请查看下面输出的错误信息: %{errorMessage}', + 'transaction_expand_split' => '展开拆分', + 'transaction_collapse_split' => '折叠拆分', // object groups - 'default_group_title_name' => '(未分组)', - 'default_group_title_name_plain' => '未分组', + 'default_group_title_name' => '(未分组)', + 'default_group_title_name_plain' => '未分组', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => '创建一个资产账户!', - 'no_accounts_intro_asset' => '您目前还没有资产账户。资产账户是您的主要账户,包括:您的支票账户、储蓄账户、共用账户,甚至信用卡等。', - 'no_accounts_imperative_asset' => '要开始使用 Firefly III,您需要至少一个资产账户。我们现在就来:', - 'no_accounts_create_asset' => '创建资产账户', - 'no_accounts_title_expense' => '创建一个支出账户!', - 'no_accounts_intro_expense' => '您目前还没有支出账户。支出账户用于记录您消费的地方,如商店或超市。', - 'no_accounts_imperative_expense' => '当您创建交易时会自动创建支出账户,但您也可以手动创建,我们现在就来:', - 'no_accounts_create_expense' => '创建支出账户', - 'no_accounts_title_revenue' => '创建一个收入账户!', - 'no_accounts_intro_revenue' => '您目前还没有收入账户。收入账户用于记录向您付款的各方,比如您的雇主。', - 'no_accounts_imperative_revenue' => '当您创建交易时会自动创建收入账户,但您也可以手动创建,我们现在就来:', - 'no_accounts_create_revenue' => '创建收入账户', - 'no_accounts_title_liabilities' => '创建一个债务账户!', - 'no_accounts_intro_liabilities' => '您目前还没有债务账户。债务账户用于注册您的 (学生) 贷款或其他负债。', - 'no_accounts_imperative_liabilities' => '您不用必须使用此功能,但若您要追踪这些东西的话,此功能十分有用。', - 'no_accounts_create_liabilities' => '创建债务账户', - 'no_budgets_title_default' => '创建一笔预算!', - 'no_rules_title_default' => '创建一个规则!', - 'no_budgets_intro_default' => '您目前还没有预算。预算用于将您的支出归为具有逻辑性的组,为您的支出添加一个软性上限。', - 'no_rules_intro_default' => '你还没有创建任何规则。规则是一种强大的自动化功能,可以帮助你处理交易。', - 'no_rules_imperative_default' => '规则可以帮助你更好地管理交易。现在就创建一个吧:', - 'no_budgets_imperative_default' => '预算是财务管理的基本工具,我们现在就来:', - 'no_budgets_create_default' => '创建预算', - 'no_rules_create_default' => '创建规则', - 'no_categories_title_default' => '创建一个分类!', - 'no_categories_intro_default' => '您目前还没有分类。分类用于微调您的交易,并依指定分类标示。', - 'no_categories_imperative_default' => '当您创建交易时会自动创建分类,但您也可以手动创建,我们现在就来:', - 'no_categories_create_default' => '创建分类', - 'no_tags_title_default' => '创建一个标签!', - 'no_tags_intro_default' => '您目前还没有标签。标签用于微调您的交易,并依指定关键字标示。', - 'no_tags_imperative_default' => '当您创建交易时会自动创建标签,但您也可以手动创建,我们现在就来:', - 'no_tags_create_default' => '创建标签', - 'no_transactions_title_withdrawal' => '创建一笔支出!', - 'no_transactions_intro_withdrawal' => '您目前还没有支出,您应该创建支出以开始管理您的财务。', - 'no_transactions_imperative_withdrawal' => '您消费了一些钱吗?那么您应该记下来:', - 'no_transactions_create_withdrawal' => '创建支出', - 'no_transactions_title_deposit' => '创建一些收入!', - 'no_transactions_intro_deposit' => '您目前还没有收入记录,您应该创建收入记录以开始管理您的财务。', - 'no_transactions_imperative_deposit' => '您收到了一些钱吗?那么您应该记下来:', - 'no_transactions_create_deposit' => '创建收入', - 'no_transactions_title_transfers' => '创建一笔转账!', - 'no_transactions_intro_transfers' => '您目前还没有转账。当您在资产账户之间移动资金时,将自动记录为转账。', - 'no_transactions_imperative_transfers' => '您有移动这些钱吗?那么您应该记下来:', - 'no_transactions_create_transfers' => '创建转账', - 'no_piggies_title_default' => '创建一个存钱罐!', - 'no_piggies_intro_default' => '您目前还没有存钱罐,您可以创建存钱罐来划分您的储蓄,并追踪您存钱的目标。', - 'no_piggies_imperative_default' => '您有想要为之攒钱的东西吗?创建一个存钱罐然后开始追踪:', - 'no_piggies_create_default' => '创建新存钱罐', - 'no_bills_title_default' => '创建一笔账单!', - 'no_bills_intro_default' => '您目前还没有账单,您可以创建账单以追踪您的日常支出,比如房租或保险。', - 'no_bills_imperative_default' => '您有这样的常规账单吗?创建账单并追踪您的付款:', - 'no_bills_create_default' => '创建账单', + 'no_accounts_title_asset' => '创建一个资产账户!', + 'no_accounts_intro_asset' => '您目前还没有资产账户。资产账户是您的主要账户,包括:您的支票账户、储蓄账户、共用账户,甚至信用卡等。', + 'no_accounts_imperative_asset' => '要开始使用 Firefly III,您需要至少一个资产账户。我们现在就来:', + 'no_accounts_create_asset' => '创建资产账户', + 'no_accounts_title_expense' => '创建一个支出账户!', + 'no_accounts_intro_expense' => '您目前还没有支出账户。支出账户用于记录您消费的地方,如商店或超市。', + 'no_accounts_imperative_expense' => '当您创建交易时会自动创建支出账户,但您也可以手动创建,我们现在就来:', + 'no_accounts_create_expense' => '创建支出账户', + 'no_accounts_title_revenue' => '创建一个收入账户!', + 'no_accounts_intro_revenue' => '您目前还没有收入账户。收入账户用于记录向您付款的各方,比如您的雇主。', + 'no_accounts_imperative_revenue' => '当您创建交易时会自动创建收入账户,但您也可以手动创建,我们现在就来:', + 'no_accounts_create_revenue' => '创建收入账户', + 'no_accounts_title_liabilities' => '创建一个债务账户!', + 'no_accounts_intro_liabilities' => '您目前还没有债务账户。债务账户用于注册您的 (学生) 贷款或其他负债。', + 'no_accounts_imperative_liabilities' => '您不用必须使用此功能,但若您要追踪这些东西的话,此功能十分有用。', + 'no_accounts_create_liabilities' => '创建债务账户', + 'no_budgets_title_default' => '创建一笔预算!', + 'no_rules_title_default' => '创建一个规则!', + 'no_budgets_intro_default' => '您目前还没有预算。预算用于将您的支出归为具有逻辑性的组,为您的支出添加一个软性上限。', + 'no_rules_intro_default' => '你还没有创建任何规则。规则是一种强大的自动化功能,可以帮助你处理交易。', + 'no_rules_imperative_default' => '规则可以帮助你更好地管理交易。现在就创建一个吧:', + 'no_budgets_imperative_default' => '预算是财务管理的基本工具,我们现在就来:', + 'no_budgets_create_default' => '创建预算', + 'no_rules_create_default' => '创建规则', + 'no_categories_title_default' => '创建一个分类!', + 'no_categories_intro_default' => '您目前还没有分类。分类用于微调您的交易,并依指定分类标示。', + 'no_categories_imperative_default' => '当您创建交易时会自动创建分类,但您也可以手动创建,我们现在就来:', + 'no_categories_create_default' => '创建分类', + 'no_tags_title_default' => '创建一个标签!', + 'no_tags_intro_default' => '您目前还没有标签。标签用于微调您的交易,并依指定关键字标示。', + 'no_tags_imperative_default' => '当您创建交易时会自动创建标签,但您也可以手动创建,我们现在就来:', + 'no_tags_create_default' => '创建标签', + 'no_transactions_title_withdrawal' => '创建一笔支出!', + 'no_transactions_intro_withdrawal' => '您目前还没有支出,您应该创建支出以开始管理您的财务。', + 'no_transactions_imperative_withdrawal' => '您消费了一些钱吗?那么您应该记下来:', + 'no_transactions_create_withdrawal' => '创建支出', + 'no_transactions_title_deposit' => '创建一些收入!', + 'no_transactions_intro_deposit' => '您目前还没有收入记录,您应该创建收入记录以开始管理您的财务。', + 'no_transactions_imperative_deposit' => '您收到了一些钱吗?那么您应该记下来:', + 'no_transactions_create_deposit' => '创建收入', + 'no_transactions_title_transfers' => '创建一笔转账!', + 'no_transactions_intro_transfers' => '您目前还没有转账。当您在资产账户之间移动资金时,将自动记录为转账。', + 'no_transactions_imperative_transfers' => '您有移动这些钱吗?那么您应该记下来:', + 'no_transactions_create_transfers' => '创建转账', + 'no_piggies_title_default' => '创建一个存钱罐!', + 'no_piggies_intro_default' => '您目前还没有存钱罐,您可以创建存钱罐来划分您的储蓄,并追踪您存钱的目标。', + 'no_piggies_imperative_default' => '您有想要为之攒钱的东西吗?创建一个存钱罐然后开始追踪:', + 'no_piggies_create_default' => '创建新存钱罐', + 'no_bills_title_default' => '创建一笔账单!', + 'no_bills_intro_default' => '您目前还没有账单,您可以创建账单以追踪您的日常支出,比如房租或保险。', + 'no_bills_imperative_default' => '您有这样的常规账单吗?创建账单并追踪您的付款:', + 'no_bills_create_default' => '创建账单', // recurring transactions - 'create_right_now' => '立即创建', - 'no_new_transaction_in_recurrence' => '未创建新交易,可能已经在此日期取消?', - 'recurrences' => '定期交易', - 'repeat_until_in_past' => '此定期交易已于 :date 停止重复。', - 'recurring_calendar_view' => '日历', - 'no_recurring_title_default' => '创建一笔定期交易!', - 'no_recurring_intro_default' => '您还目前没有定期交易,使用此功能可以让 Firefly III 自动为您创建交易。', - 'no_recurring_imperative_default' => '此功能适合高级用户,同时也极为有用。请在继续操作前,确认您已阅读右上角问号 (?) 图标) 里的帮助文档。', - 'no_recurring_create_default' => '创建定期交易', - 'make_new_recurring' => '创建定期交易', - 'recurring_daily' => '每天', - 'recurring_weekly' => '每周的:weekday', - 'recurring_weekly_skip' => '每:skip个周的:weekday', - 'recurring_monthly' => '每月的第:dayOfMonth天', - 'recurring_monthly_skip' => '每:skip个月的第:dayOfMonth天', - 'recurring_ndom' => '每月的第:dayOfMonth个:weekday', - 'recurring_yearly' => '每年的:date', - 'overview_for_recurrence' => '定期交易“:title”概览', - 'warning_duplicates_repetitions' => '在极少数情况下,日期在此列表上会显示两次,这是由多个重复项目的冲突造成的。Firefly III 每天只会产生一条交易。', - 'created_transactions' => '相关交易', - 'expected_withdrawals' => '预期支出', - 'expected_deposits' => '预期收入', - 'expected_transfers' => '预期转账', - 'created_withdrawals' => '已创建支出', - 'created_deposits' => '已创建收入', - 'created_transfers' => '已创建转账', - 'recurring_info' => '定期交易 :count / :total', - 'created_from_recurrence' => '从定期交易“:title” (#:id) 创建', - 'recurring_never_cron' => '用于支持定期交易的计划任务尚未运行。全新安装 Firefly III 后出现此提示为正常情况,请尽快按照说明进行操作。点击页面右上角的问号 (?) 图标查看帮助页面。', - 'recurring_cron_long_ago' => '距离上次运行用于支持定期交易的计划任务已超过36小时,请确认您的配置正确无误。点击页面右上角的问号 (?) 图标查看帮助页面。', + 'create_right_now' => '立即创建', + 'no_new_transaction_in_recurrence' => '未创建新交易,可能已经在此日期取消?', + 'recurrences' => '定期交易', + 'repeat_until_in_past' => '此定期交易已于 :date 停止重复。', + 'recurring_calendar_view' => '日历', + 'no_recurring_title_default' => '创建一笔定期交易!', + 'no_recurring_intro_default' => '您还目前没有定期交易,使用此功能可以让 Firefly III 自动为您创建交易。', + 'no_recurring_imperative_default' => '此功能适合高级用户,同时也极为有用。请在继续操作前,确认您已阅读右上角问号 (?) 图标) 里的帮助文档。', + 'no_recurring_create_default' => '创建定期交易', + 'make_new_recurring' => '创建定期交易', + 'recurring_daily' => '每天', + 'recurring_weekly' => '每周的:weekday', + 'recurring_weekly_skip' => '每:skip个周的:weekday', + 'recurring_monthly' => '每月的第:dayOfMonth天', + 'recurring_monthly_skip' => '每:skip个月的第:dayOfMonth天', + 'recurring_ndom' => '每月的第:dayOfMonth个:weekday', + 'recurring_yearly' => '每年的:date', + 'overview_for_recurrence' => '定期交易“:title”概览', + 'warning_duplicates_repetitions' => '在极少数情况下,日期在此列表上会显示两次,这是由多个重复项目的冲突造成的。Firefly III 每天只会产生一条交易。', + 'created_transactions' => '相关交易', + 'expected_withdrawals' => '预期支出', + 'expected_deposits' => '预期收入', + 'expected_transfers' => '预期转账', + 'created_withdrawals' => '已创建支出', + 'created_deposits' => '已创建收入', + 'created_transfers' => '已创建转账', + 'recurring_info' => '定期交易 :count / :total', + 'created_from_recurrence' => '从定期交易“:title” (#:id) 创建', + 'recurring_never_cron' => '用于支持定期交易的计划任务尚未运行。全新安装 Firefly III 后出现此提示为正常情况,请尽快按照说明进行操作。点击页面右上角的问号 (?) 图标查看帮助页面。', + 'recurring_cron_long_ago' => '距离上次运行用于支持定期交易的计划任务已超过36小时,请确认您的配置正确无误。点击页面右上角的问号 (?) 图标查看帮助页面。', - 'create_new_recurrence' => '创建新定期交易', - 'help_first_date' => '第一笔预期的定期交易的日期,必须位于将来。', - 'help_first_date_no_past' => '表示第一次预计的定期,Firefly III 不会创建已经过去的交易。', - 'no_currency' => '(没有货币)', - 'mandatory_for_recurring' => '必填定期信息', - 'mandatory_for_transaction' => '必填交易信息', - 'optional_for_recurring' => '选填定期信息', - 'optional_for_transaction' => '选填交易信息', - 'change_date_other_options' => '更改“初次日期”以查看更多选项。', - 'mandatory_fields_for_tranaction' => '这里的数值最终会出现在创建的交易中', - 'click_for_calendar' => '点这裡开启显示定期重复交易的行事曆', - 'repeat_forever' => '永远重复', - 'repeat_until_date' => '重复至特定日期', - 'repeat_times' => '一定次数后重复', - 'recurring_skips_one' => '每隔一个', - 'recurring_skips_more' => '跳过:count次', - 'store_new_recurrence' => '保存定期交易', - 'stored_new_recurrence' => '定期交易“:title”保存成功', - 'edit_recurrence' => '编辑定期交易“:title”', - 'recurring_repeats_until' => '重复至 :date', - 'recurring_repeats_forever' => '永远重复', - 'recurring_repeats_x_times' => '重复:count次|重复:count次', - 'update_recurrence' => '更新定期交易', - 'updated_recurrence' => '定期交易“:title”已更新', - 'recurrence_is_inactive' => '此定期交易已停用,不会自动生成新交易', - 'delete_recurring' => '删除定期交易“:title”', - 'new_recurring_transaction' => '新定期交易', - 'help_weekend' => '当定期交易发生于周六或周日时,Firefly III 要如何处理?', - 'do_nothing' => '仅创建交易', - 'skip_transaction' => '跳过此次', - 'jump_to_friday' => '在上个星期五创建交易', - 'jump_to_monday' => '在下个星期一创建交易', - 'will_jump_friday' => '将提前到星期五创建而不是周末', - 'will_jump_monday' => '将推迟到星期一创建而不是周末', - 'except_weekends' => '例外的周末', - 'recurrence_deleted' => '定期交易“:title”已删除', + 'create_new_recurrence' => '创建新定期交易', + 'help_first_date' => '第一笔预期的定期交易的日期,必须位于将来。', + 'help_first_date_no_past' => '表示第一次预计的定期,Firefly III 不会创建已经过去的交易。', + 'no_currency' => '(没有货币)', + 'mandatory_for_recurring' => '必填定期信息', + 'mandatory_for_transaction' => '必填交易信息', + 'optional_for_recurring' => '选填定期信息', + 'optional_for_transaction' => '选填交易信息', + 'change_date_other_options' => '更改“初次日期”以查看更多选项。', + 'mandatory_fields_for_tranaction' => '这里的数值最终会出现在创建的交易中', + 'click_for_calendar' => '点这裡开启显示定期重复交易的行事曆', + 'repeat_forever' => '永远重复', + 'repeat_until_date' => '重复至特定日期', + 'repeat_times' => '一定次数后重复', + 'recurring_skips_one' => '每隔一个', + 'recurring_skips_more' => '跳过:count次', + 'store_new_recurrence' => '保存定期交易', + 'stored_new_recurrence' => '定期交易“:title”保存成功', + 'edit_recurrence' => '编辑定期交易“:title”', + 'recurring_repeats_until' => '重复至 :date', + 'recurring_repeats_forever' => '永远重复', + 'recurring_repeats_x_times' => '重复:count次|重复:count次', + 'update_recurrence' => '更新定期交易', + 'updated_recurrence' => '定期交易“:title”已更新', + 'recurrence_is_inactive' => '此定期交易已停用,不会自动生成新交易', + 'delete_recurring' => '删除定期交易“:title”', + 'new_recurring_transaction' => '新定期交易', + 'help_weekend' => '当定期交易发生于周六或周日时,Firefly III 要如何处理?', + 'do_nothing' => '仅创建交易', + 'skip_transaction' => '跳过此次', + 'jump_to_friday' => '在上个星期五创建交易', + 'jump_to_monday' => '在下个星期一创建交易', + 'will_jump_friday' => '将提前到星期五创建而不是周末', + 'will_jump_monday' => '将推迟到星期一创建而不是周末', + 'except_weekends' => '例外的周末', + 'recurrence_deleted' => '定期交易“:title”已删除', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2710,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => '余额(:currency)', - 'box_spent_in_currency' => '支出 (:currency)', - 'box_earned_in_currency' => '收入 (:currency)', - 'box_budgeted_in_currency' => '预算 (:currency)', - 'box_bill_paid_in_currency' => '已付账单 (:currency)', - 'box_bill_unpaid_in_currency' => '未付账单 (:currency)', - 'box_left_to_spend_in_currency' => '剩余支出 (:currency)', - 'box_net_worth_in_currency' => '净资产 (:currency)', - 'box_spend_per_day' => '每日剩余支出::amount', + 'box_balance_in_currency' => '余额(:currency)', + 'box_spent_in_currency' => '支出 (:currency)', + 'box_earned_in_currency' => '收入 (:currency)', + 'box_budgeted_in_currency' => '预算 (:currency)', + 'box_bill_paid_in_currency' => '已付账单 (:currency)', + 'box_bill_unpaid_in_currency' => '未付账单 (:currency)', + 'box_left_to_spend_in_currency' => '剩余支出 (:currency)', + 'box_net_worth_in_currency' => '净资产 (:currency)', + 'box_spend_per_day' => '每日剩余支出::amount', // debug page - 'debug_page' => '调试页面', - 'debug_submit_instructions' => '如果您遇到问题,您可以使用此框内的信息协助调试,请将其复制并粘贴到新的或已存在的 GitHub 工单 中。系统将自动生成美观的表格,以方便快速诊断问题。', - 'debug_pretty_table' => '如果您复制/粘贴框中的内容到 GitHub 工单中,系统会自动生成表格。请不要在此文本前后加上引号或反引号。', - 'debug_additional_data' => '您还可以分享下方框中的内容,将其复制并粘贴至新的或已有的 GitHub 工单 中。然而,框中的内容可能包含隐私信息,例如账户名称、转账详情或电子邮件地址。', + 'debug_page' => '调试页面', + 'debug_submit_instructions' => '如果您遇到问题,您可以使用此框内的信息协助调试,请将其复制并粘贴到新的或已存在的 GitHub 工单 中。系统将自动生成美观的表格,以方便快速诊断问题。', + 'debug_pretty_table' => '如果您复制/粘贴框中的内容到 GitHub 工单中,系统会自动生成表格。请不要在此文本前后加上引号或反引号。', + 'debug_additional_data' => '您还可以分享下方框中的内容,将其复制并粘贴至新的或已有的 GitHub 工单 中。然而,框中的内容可能包含隐私信息,例如账户名称、转账详情或电子邮件地址。', // object groups - 'object_groups_menu_bar' => '组', - 'object_groups_page_title' => '组', - 'object_groups_breadcrumb' => '组', - 'object_groups_index' => '概览', - 'object_groups' => '组', - 'object_groups_empty_explain' => 'Firefly III 的一些项目可以分为组。例如,存钱罐的编辑和创建页面有“组”字段。当您设定了此字段,您可以在此页面编辑组名称和排列顺序。点击右上角的问号 (?) 图标查看帮助页面,获取更多信息。', - 'object_group_title' => '标题', - 'edit_object_group' => '编辑组“:title”', - 'delete_object_group' => '删除组“:title”', - 'update_object_group' => '更新组', - 'updated_object_group' => '成功更新组“:title”', - 'deleted_object_group' => '成功删除组“:title”', - 'object_group' => '组', + 'object_groups_menu_bar' => '组', + 'object_groups_page_title' => '组', + 'object_groups_breadcrumb' => '组', + 'object_groups_index' => '概览', + 'object_groups' => '组', + 'object_groups_empty_explain' => 'Firefly III 的一些项目可以分为组。例如,存钱罐的编辑和创建页面有“组”字段。当您设定了此字段,您可以在此页面编辑组名称和排列顺序。点击右上角的问号 (?) 图标查看帮助页面,获取更多信息。', + 'object_group_title' => '标题', + 'edit_object_group' => '编辑组“:title”', + 'delete_object_group' => '删除组“:title”', + 'update_object_group' => '更新组', + 'updated_object_group' => '成功更新组“:title”', + 'deleted_object_group' => '成功删除组“:title”', + 'object_group' => '组', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => '审计日志记录', - 'ale_action_log_add' => '向存钱罐“:name”中存入:amount', - 'ale_action_log_remove' => '自存钱罐 “:name” 中取出:amount', - 'ale_action_clear_budget' => '已从预算中移除', - 'ale_action_update_group_title' => '已更新交易的分组标题', - 'ale_action_update_date' => '已更新交易日期', - 'ale_action_update_order' => '已更新交易订单', - 'ale_action_clear_category' => '已从分类中删除', - 'ale_action_clear_notes' => '移除备注', - 'ale_action_clear_tag' => '清除标签', - 'ale_action_clear_all_tags' => '清除所有标签', - 'ale_action_set_bill' => '关联账单', - 'ale_action_switch_accounts' => '已切换来源账户或和目标账户', - 'ale_action_set_budget' => '设置预算', - 'ale_action_set_category' => '设置分类', - 'ale_action_set_source' => '设置来源账户', - 'ale_action_set_destination' => '设置目标账户', - 'ale_action_update_transaction_type' => '更改交易类型', - 'ale_action_update_notes' => '更改备注', - 'ale_action_update_description' => '更改描述', - 'ale_action_add_to_piggy' => '存钱罐', - 'ale_action_remove_from_piggy' => '存钱罐', - 'ale_action_add_tag' => '添加标签', + 'audit_log_entries' => '审计日志记录', + 'ale_action_log_add' => '向存钱罐“:name”中存入:amount', + 'ale_action_log_remove' => '自存钱罐 “:name” 中取出:amount', + 'ale_action_clear_budget' => '已从预算中移除', + 'ale_action_update_group_title' => '已更新交易的分组标题', + 'ale_action_update_date' => '已更新交易日期', + 'ale_action_update_order' => '已更新交易订单', + 'ale_action_clear_category' => '已从分类中删除', + 'ale_action_clear_notes' => '移除备注', + 'ale_action_clear_tag' => '清除标签', + 'ale_action_clear_all_tags' => '清除所有标签', + 'ale_action_set_bill' => '关联账单', + 'ale_action_switch_accounts' => '已切换来源账户或和目标账户', + 'ale_action_set_budget' => '设置预算', + 'ale_action_set_category' => '设置分类', + 'ale_action_set_source' => '设置来源账户', + 'ale_action_set_destination' => '设置目标账户', + 'ale_action_update_transaction_type' => '更改交易类型', + 'ale_action_update_notes' => '更改备注', + 'ale_action_update_description' => '更改描述', + 'ale_action_add_to_piggy' => '存钱罐', + 'ale_action_remove_from_piggy' => '存钱罐', + 'ale_action_add_tag' => '添加标签', // dashboard - 'enable_auto_convert' => '启用货币转换', - 'disable_auto_convert' => '禁用货币转换', - + 'enable_auto_convert' => '启用货币转换', + 'disable_auto_convert' => '禁用货币转换', ]; /* diff --git a/resources/lang/zh_CN/form.php b/resources/lang/zh_CN/form.php index 33b4bbabe4..c6dd8e5285 100644 --- a/resources/lang/zh_CN/form.php +++ b/resources/lang/zh_CN/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => '银行名称', - 'bank_balance' => '余额', - 'savings_balance' => '储蓄余额', - 'credit_card_limit' => '信用卡额度', - 'automatch' => '自动匹配', - 'skip' => '跳过', - 'enabled' => '已启用', - 'name' => '名称', - 'active' => '启用', - 'amount_min' => '最小金额', - 'amount_max' => '最大金额', - 'match' => '匹配于', - 'strict' => '精确模式', - 'repeat_freq' => '重复', - 'object_group' => '组', - 'location' => '位置', - 'update_channel' => '更新频道', - 'currency_id' => '货币', - 'transaction_currency_id' => '货币', - 'auto_budget_currency_id' => '货币', - 'external_ip' => '您的服务器外部IP', - 'attachments' => '附件', - 'BIC' => '银行识别代码 BIC', - 'verify_password' => '验证密码安全性', - 'source_account' => '来源账户', - 'destination_account' => '目标账户', - 'asset_destination_account' => '目标账户', - 'include_net_worth' => '包含于净资产', - 'asset_source_account' => '来源账户', - 'journal_description' => '说明', - 'note' => '备注', - 'currency' => '货币', - 'account_id' => '资产账户', - 'budget_id' => '预算', - 'bill_id' => '账单', - 'opening_balance' => '初始余额', - 'tagMode' => '标签模式', - 'virtual_balance' => '虚拟账户余额', + 'bank_name' => '银行名称', + 'bank_balance' => '余额', + 'savings_balance' => '储蓄余额', + 'credit_card_limit' => '信用卡额度', + 'automatch' => '自动匹配', + 'skip' => '跳过', + 'enabled' => '已启用', + 'name' => '名称', + 'active' => '启用', + 'amount_min' => '最小金额', + 'amount_max' => '最大金额', + 'match' => '匹配于', + 'strict' => '精确模式', + 'repeat_freq' => '重复', + 'object_group' => '组', + 'location' => '位置', + 'update_channel' => '更新频道', + 'currency_id' => '货币', + 'transaction_currency_id' => '货币', + 'auto_budget_currency_id' => '货币', + 'external_ip' => '您的服务器外部IP', + 'attachments' => '附件', + 'BIC' => '银行识别代码 BIC', + 'verify_password' => '验证密码安全性', + 'source_account' => '来源账户', + 'destination_account' => '目标账户', + 'asset_destination_account' => '目标账户', + 'include_net_worth' => '包含于净资产', + 'asset_source_account' => '来源账户', + 'journal_description' => '说明', + 'note' => '备注', + 'currency' => '货币', + 'account_id' => '资产账户', + 'budget_id' => '预算', + 'bill_id' => '账单', + 'opening_balance' => '初始余额', + 'tagMode' => '标签模式', + 'virtual_balance' => '虚拟账户余额', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => '目标金额', 'account_role' => '账户角色', 'opening_balance_date' => '开户日期', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => '您确定要删除描述为“:description”的交易吗?', 'mass_journal_are_you_sure' => '您确定要删除这些交易吗?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => '您确定要删除标签“:tag”吗?', 'journal_link_areYouSure' => '您确定要删除 :source:destination 之间的关联吗?', 'linkType_areYouSure' => '您确定要删除关联类型“:name” (“:inward”/“:outward”) 吗?', @@ -230,7 +227,6 @@ return [ 'album' => '专辑', 'song' => '曲目', - // admin 'domain' => '域名', 'single_user_mode' => '禁止新用户注册', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS 帐户', 'local_account' => 'Firefly III 账户', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => '日期自', - 'to_date' => '日期至', - 'due_date' => '到期日', - 'payment_date' => '付款日期', - 'invoice_date' => '发票日期', - 'internal_reference' => '内部引用', - 'inward' => '内向描述', - 'outward' => '外向描述', - 'rule_group_id' => '规则组', - 'transaction_description' => '交易描述', - 'first_date' => '初次日期', - 'transaction_type' => '交易类型', - 'repeat_until' => '重复直到', - 'recurring_description' => '定期交易描述', - 'repetition_type' => '重复类型', - 'foreign_currency_id' => '外币', - 'repetition_end' => '重复结束', - 'repetitions' => '重复', - 'calendar' => '日历', - 'weekend' => '周末', - 'client_secret' => '客户端密钥', - 'withdrawal_destination_id' => '目标账户', - 'deposit_source_id' => '来源账户', - 'expected_on' => '预计日期', - 'paid' => '已付款', - 'auto_budget_type' => '自动预算', - 'auto_budget_amount' => '自动预算金额', - 'auto_budget_period' => '自动预算周期', - 'collected' => '已收藏', - 'submitted' => '已提交', - 'key' => '按键', - 'value' => '记录内容', - 'webhook_delivery' => '发送格式', - 'webhook_response' => '响应内容', - 'webhook_trigger' => '触发条件', + 'from_date' => '日期自', + 'to_date' => '日期至', + 'due_date' => '到期日', + 'payment_date' => '付款日期', + 'invoice_date' => '发票日期', + 'internal_reference' => '内部引用', + 'inward' => '内向描述', + 'outward' => '外向描述', + 'rule_group_id' => '规则组', + 'transaction_description' => '交易描述', + 'first_date' => '初次日期', + 'transaction_type' => '交易类型', + 'repeat_until' => '重复直到', + 'recurring_description' => '定期交易描述', + 'repetition_type' => '重复类型', + 'foreign_currency_id' => '外币', + 'repetition_end' => '重复结束', + 'repetitions' => '重复', + 'calendar' => '日历', + 'weekend' => '周末', + 'client_secret' => '客户端密钥', + 'withdrawal_destination_id' => '目标账户', + 'deposit_source_id' => '来源账户', + 'expected_on' => '预计日期', + 'paid' => '已付款', + 'auto_budget_type' => '自动预算', + 'auto_budget_amount' => '自动预算金额', + 'auto_budget_period' => '自动预算周期', + 'collected' => '已收藏', + 'submitted' => '已提交', + 'key' => '按键', + 'value' => '记录内容', + 'webhook_delivery' => '发送格式', + 'webhook_response' => '响应内容', + 'webhook_trigger' => '触发条件', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/zh_CN/intro.php b/resources/lang/zh_CN/intro.php index bf7de886ed..b14372ebef 100644 --- a/resources/lang/zh_CN/intro.php +++ b/resources/lang/zh_CN/intro.php @@ -31,41 +31,39 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => '欢迎来到 Firefly III 首页,请跟随系统引导,了解 Firefly III 的运作方式。', - 'index_accounts-chart' => '此图表显示您资产账户的当前余额,您可以在偏好设定中选择此处可见的账户。', - 'index_box_out_holder' => '此区块与旁侧区块提供您财务状况的快速概览。', - 'index_help' => '如果您需要有关页面或表单的说明,请点击此按钮。', - 'index_outro' => 'Firefly III 的大多数页面都有类似的引导流程,如果您有任何问题或意见,请与开发者联系。感谢您选择 Firefly III。', - 'index_sidebar-toggle' => '若要创建新的交易、账户或其他内容,请使用此图标下的菜单。', - 'index_cash_account' => '这些是迄今创建的账户。您可以使用现金账户追踪现金支出,但当然不是强制性的。', + 'index_intro' => '欢迎来到 Firefly III 首页,请跟随系统引导,了解 Firefly III 的运作方式。', + 'index_accounts-chart' => '此图表显示您资产账户的当前余额,您可以在偏好设定中选择此处可见的账户。', + 'index_box_out_holder' => '此区块与旁侧区块提供您财务状况的快速概览。', + 'index_help' => '如果您需要有关页面或表单的说明,请点击此按钮。', + 'index_outro' => 'Firefly III 的大多数页面都有类似的引导流程,如果您有任何问题或意见,请与开发者联系。感谢您选择 Firefly III。', + 'index_sidebar-toggle' => '若要创建新的交易、账户或其他内容,请使用此图标下的菜单。', + 'index_cash_account' => '这些是迄今创建的账户。您可以使用现金账户追踪现金支出,但当然不是强制性的。', // transactions - 'transactions_create_basic_info' => '输入您交易的基本信息,包括来源账户、目标账户、日期和描述。', - 'transactions_create_amount_info' => '输入交易金额。如有必要,这些字段会自动更新以获取外币信息。', - 'transactions_create_optional_info' => '这些字段都是可选项,在此处添加元数据会使您的交易更有条理。', - 'transactions_create_split' => '如果您要拆分一笔交易,点击此按钮即可', + 'transactions_create_basic_info' => '输入您交易的基本信息,包括来源账户、目标账户、日期和描述。', + 'transactions_create_amount_info' => '输入交易金额。如有必要,这些字段会自动更新以获取外币信息。', + 'transactions_create_optional_info' => '这些字段都是可选项,在此处添加元数据会使您的交易更有条理。', + 'transactions_create_split' => '如果您要拆分一笔交易,点击此按钮即可', // create account: - 'accounts_create_iban' => '为您的账户添加一个有效的 IBAN,将来可以更轻松地导入资料。', - 'accounts_create_asset_opening_balance' => '资产账户可以使用“初始余额”表示此账户在 Firefly III 中的初始状态。', - 'accounts_create_asset_currency' => 'Firefly III 支持多种货币,您必须在此设定资产账户的主要货币。', - 'accounts_create_asset_virtual' => '它有时可以协助赋予您的账户一个虚拟额度:一个总是增加/减少实际余额的额外金额。', + 'accounts_create_iban' => '为您的账户添加一个有效的 IBAN,将来可以更轻松地导入资料。', + 'accounts_create_asset_opening_balance' => '资产账户可以使用“初始余额”表示此账户在 Firefly III 中的初始状态。', + 'accounts_create_asset_currency' => 'Firefly III 支持多种货币,您必须在此设定资产账户的主要货币。', + 'accounts_create_asset_virtual' => '它有时可以协助赋予您的账户一个虚拟额度:一个总是增加/减少实际余额的额外金额。', // budgets index - 'budgets_index_intro' => '预算可以用来管理您的财务,是 Firefly III 的核心功能之一。', - 'budgets_index_set_budget' => '设定每个周期的总预算,让 Firefly III 来判断您是否已经将所有可用钱财加入预算。', - 'budgets_index_see_expenses_bar' => '进行消费会慢慢地填满这个横条。', - 'budgets_index_navigate_periods' => '前往不同的周期,可以方便地提前设定预算。', - 'budgets_index_new_budget' => '根据需要创建新预算。', - 'budgets_index_list_of_budgets' => '使用此表格可以设定每个预算的金额,并查看您的使用情况。', - 'budgets_index_outro' => '要了解更多有关预算的信息,请查看右上角的帮助图标。', + 'budgets_index_intro' => '预算可以用来管理您的财务,是 Firefly III 的核心功能之一。', + 'budgets_index_see_expenses_bar' => '进行消费会慢慢地填满这个横条。', + 'budgets_index_navigate_periods' => '前往不同的周期,可以方便地提前设定预算。', + 'budgets_index_new_budget' => '根据需要创建新预算。', + 'budgets_index_list_of_budgets' => '使用此表格可以设定每个预算的金额,并查看您的使用情况。', + 'budgets_index_outro' => '要了解更多有关预算的信息,请查看右上角的帮助图标。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -76,26 +74,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => '使用这些报表可以详细地了解您的财务状况。', - 'reports_index_inputReportType' => '选择报表类型,查看帮助页面以了解每个报表向您显示的内容。', - 'reports_index_inputAccountsSelect' => '您可以根据需要排除或包括资产账户。', - 'reports_index_inputDateRange' => '所选日期范围完全由您决定:从1天到10年不等。', - 'reports_index_extra-options-box' => '根据您选择的报表,您可以在此处选择额外的筛选标准和选项。更改报表类型时,请留意此区块。', + 'reports_index_intro' => '使用这些报表可以详细地了解您的财务状况。', + 'reports_index_inputReportType' => '选择报表类型,查看帮助页面以了解每个报表向您显示的内容。', + 'reports_index_inputAccountsSelect' => '您可以根据需要排除或包括资产账户。', + 'reports_index_inputDateRange' => '所选日期范围完全由您决定:从1天到10年不等。', + 'reports_index_extra-options-box' => '根据您选择的报表,您可以在此处选择额外的筛选标准和选项。更改报表类型时,请留意此区块。', // reports (reports) - 'reports_report_default_intro' => '这份报表将为您提供一个快速和全面的个人财务概览。如果您想看到更多的内容,欢迎联系开发者!', - 'reports_report_audit_intro' => '此报表可以让您详细地了解您的资产账户的情况。', - 'reports_report_audit_optionsBox' => '使用这些复选框可以显示或隐藏您感兴趣的列。', + 'reports_report_default_intro' => '这份报表将为您提供一个快速和全面的个人财务概览。如果您想看到更多的内容,欢迎联系开发者!', + 'reports_report_audit_intro' => '此报表可以让您详细地了解您的资产账户的情况。', + 'reports_report_audit_optionsBox' => '使用这些复选框可以显示或隐藏您感兴趣的列。', - 'reports_report_category_intro' => '此报表可以让您详细地了解一个或多个分类的情况。', - 'reports_report_category_pieCharts' => '这些图表可以让您详细地了解每个分类或每个账户中的支出和收入情况。', - 'reports_report_category_incomeAndExpensesChart' => '此图表显示您的每个分类的支出和收入情况。', + 'reports_report_category_intro' => '此报表可以让您详细地了解一个或多个分类的情况。', + 'reports_report_category_pieCharts' => '这些图表可以让您详细地了解每个分类或每个账户中的支出和收入情况。', + 'reports_report_category_incomeAndExpensesChart' => '此图表显示您的每个分类的支出和收入情况。', - 'reports_report_tag_intro' => '此报表可以让您详细地了解一个或多个标签的情况。', - 'reports_report_tag_pieCharts' => '这些图表可以让您详细地了解每个标签、账户、分类或预算中的支出和收入情况。', - 'reports_report_tag_incomeAndExpensesChart' => '此图表显示您的每个标签的支出和收入情况。', + 'reports_report_tag_intro' => '此报表可以让您详细地了解一个或多个标签的情况。', + 'reports_report_tag_pieCharts' => '这些图表可以让您详细地了解每个标签、账户、分类或预算中的支出和收入情况。', + 'reports_report_tag_incomeAndExpensesChart' => '此图表显示您的每个标签的支出和收入情况。', 'reports_report_budget_intro' => '此报表可以让您详细地了解一项或多项预算的情况。', 'reports_report_budget_pieCharts' => '这些图表可以让您详细地了解每项预算或每个账户中的支出情况。', @@ -114,7 +111,7 @@ return [ 'piggy-banks_index_button' => '此进度条旁边有两个按钮 (+ 和 -),用于从每个存钱罐中存入或取出资金。', 'piggy-banks_index_accountStatus' => '此表格中列出了所有至少拥有一个存钱罐的资产账户的状态。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -125,7 +122,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => '您的目标是什么?一张新沙发、一台相机,或是应急用金?', 'piggy-banks_create_date' => '您可以为存钱罐设定目标日期或截止日期。', @@ -148,7 +144,7 @@ return [ // create bill 'bills_create_intro' => '使用账单来追踪你每个区间要缴纳的费用,例如租金、保险或抵押贷款等支出。', 'bills_create_name' => '使用描述性名称, 如“租金”或“健康保险”。', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => '选择此账单的最小和最大金额。', 'bills_create_repeat_freq_holder' => '大多数账单每月重复,但你可以在这里设定另一个频次。', 'bills_create_skip_holder' => '如果账单每2周重复一次,则应将“跳过”栏位设定为“1”,以便每隔一周跳过一次。', @@ -168,7 +164,7 @@ return [ 'rules_create_test_rule_triggers' => '使用此按钮可以查看哪些交易记录将配对您的规则。', 'rules_create_actions' => '您可以设定任意数量的动作。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -179,7 +175,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => '这些标签页后还有更多可用选项。', diff --git a/resources/lang/zh_CN/list.php b/resources/lang/zh_CN/list.php index fa394862bf..b01925c8b9 100644 --- a/resources/lang/zh_CN/list.php +++ b/resources/lang/zh_CN/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => '按钮', - 'icon' => '图标', - 'id' => 'ID', - 'create_date' => '创建于', - 'update_date' => '更新于', - 'updated_at' => '更新于', - 'balance_before' => '交易前余额', - 'balance_after' => '交易后余额', - 'name' => '名称', - 'role' => '角色', - 'currentBalance' => '目前余额', - 'linked_to_rules' => '相关规则', - 'active' => '是否启用?', - 'percentage' => '%', - 'recurring_transaction' => '定期交易', - 'next_due' => '下个到期日', - 'transaction_type' => '类别', - 'lastActivity' => '上次活动', - 'balanceDiff' => '余额差', - 'other_meta_data' => '其它元信息', - 'invited_at' => '邀请于', - 'expires' => '邀请过期', - 'invited_by' => '邀请者', - 'invite_link' => '邀请链接', - 'account_type' => '账户类型', - 'created_at' => '创建于', - 'account' => '账户', - 'external_url' => '外部链接', - 'matchingAmount' => '金额', - 'destination' => '目标', - 'source' => '来源', - 'next_expected_match' => '预期下次支付', - 'automatch' => '自动匹配?', + 'buttons' => '按钮', + 'icon' => '图标', + 'id' => 'ID', + 'create_date' => '创建于', + 'update_date' => '更新于', + 'updated_at' => '更新于', + 'balance_before' => '交易前余额', + 'balance_after' => '交易后余额', + 'name' => '名称', + 'role' => '角色', + 'currentBalance' => '目前余额', + 'linked_to_rules' => '相关规则', + 'active' => '是否启用?', + 'percentage' => '%', + 'recurring_transaction' => '定期交易', + 'next_due' => '下个到期日', + 'transaction_type' => '类别', + 'lastActivity' => '上次活动', + 'balanceDiff' => '余额差', + 'other_meta_data' => '其它元信息', + 'invited_at' => '邀请于', + 'expires' => '邀请过期', + 'invited_by' => '邀请者', + 'invite_link' => '邀请链接', + 'account_type' => '账户类型', + 'created_at' => '创建于', + 'account' => '账户', + 'external_url' => '外部链接', + 'matchingAmount' => '金额', + 'destination' => '目标', + 'source' => '来源', + 'next_expected_match' => '预期下次支付', + 'automatch' => '自动匹配?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => '重复', 'description' => '描述', 'amount' => '金额', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'bunq 账户', 'file_name' => '文件名称', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => '文件大小', - 'file_type' => '文件类型', - 'attached_to' => '附加到', - 'file_exists' => '文件已存在', - 'spectre_bank' => '银行', - 'spectre_last_use' => '上次登录', - 'spectre_status' => '状态', - 'bunq_payment_id' => 'bunq 付款 ID', - 'repetitions' => '重复', - 'title' => '标题', - 'transaction_s' => '交易', - 'field' => '字段', - 'value' => '值', - 'interest' => '利息', - 'interest_period' => '计息期', - 'liability_type' => '债务类型', - 'liability_direction' => '债务增/减', - 'end_date' => '截止日期', - 'payment_info' => '付款信息', - 'expected_info' => '下一个预期的交易', - 'start_date' => '起始日期', - 'trigger' => '触发条件', - 'response' => '答复', - 'delivery' => '交付', - 'url' => '网址', - 'secret' => '密钥', - + 'file_size' => '文件大小', + 'file_type' => '文件类型', + 'attached_to' => '附加到', + 'file_exists' => '文件已存在', + 'spectre_bank' => '银行', + 'spectre_last_use' => '上次登录', + 'spectre_status' => '状态', + 'bunq_payment_id' => 'bunq 付款 ID', + 'repetitions' => '重复', + 'title' => '标题', + 'transaction_s' => '交易', + 'field' => '字段', + 'value' => '值', + 'interest' => '利息', + 'interest_period' => '计息期', + 'liability_type' => '债务类型', + 'liability_direction' => '债务增/减', + 'end_date' => '截止日期', + 'payment_info' => '付款信息', + 'expected_info' => '下一个预期的交易', + 'start_date' => '起始日期', + 'trigger' => '触发条件', + 'response' => '答复', + 'delivery' => '交付', + 'url' => '网址', + 'secret' => '密钥', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/zh_CN/pagination.php b/resources/lang/zh_CN/pagination.php index b3c2918ac5..e043265d5a 100644 --- a/resources/lang/zh_CN/pagination.php +++ b/resources/lang/zh_CN/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/zh_CN/passwords.php b/resources/lang/zh_CN/passwords.php index 5fe88c9fa9..a708798ee8 100644 --- a/resources/lang/zh_CN/passwords.php +++ b/resources/lang/zh_CN/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/zh_CN/rules.php b/resources/lang/zh_CN/rules.php index 4e2b8a3961..e95d5004ed 100644 --- a/resources/lang/zh_CN/rules.php +++ b/resources/lang/zh_CN/rules.php @@ -1,6 +1,5 @@ 'Firefly III 找不到订阅“:name”', 'no_notes_to_move' => '此交易没有备注可移动到描述字段', 'no_tags_to_remove' => '此交易没有要删除的标签', + 'not_withdrawal' => '此交易不是支出', + 'not_deposit' => '此交易不是收入', 'cannot_find_tag' => 'Firefly III 找不到标签“:tag”', 'cannot_find_asset' => 'Firefly III 找不到资产账户“:name”', 'cannot_find_accounts' => 'Firefly III 找不到来源账户或目标账户', diff --git a/resources/lang/zh_CN/validation.php b/resources/lang/zh_CN/validation.php index 5806928e6e..840b2a8f77 100644 --- a/resources/lang/zh_CN/validation.php +++ b/resources/lang/zh_CN/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => '数组中缺少"where"条目', - 'missing_update' => '数组中缺少 "update"条目', - 'invalid_where_key' => 'JSON包含一个无效的"where"子句', - 'invalid_update_key' => 'JSON包含一个无效的"update"子句', - 'invalid_query_data' => '查询中的%s:%s字段存在无效数据', - 'invalid_query_account_type' => '查询包含不同类型的账户,这是不允许的', - 'invalid_query_currency' => '查询包含不同货币的账户,这是不不允许的。', - 'iban' => '此 IBAN 无效', - 'zero_or_more' => '此值不能为负', - 'date_or_time' => '此值必须是有效的日期或时间 (ISO 8601)', - 'source_equals_destination' => '来源账户与目标账户相同', - 'unique_account_number_for_user' => '此账户号码已在使用中', - 'unique_iban_for_user' => '此 IBAN 已在使用中', - 'deleted_user' => '由于安全限制,您无法使用此电子邮件地址注册', - 'rule_trigger_value' => '此值不能用于所选触发条件', - 'rule_action_value' => '此值不能用于所选动作', - 'file_already_attached' => '上传的文件“:name”已添加到此对象', - 'file_attached' => '成功上传文件“:name”', - 'must_exist' => '数据库中不存在字段 :attribute 的 ID', - 'all_accounts_equal' => '此字段中的所有账户必须相同', - 'group_title_mandatory' => '在有超过一笔交易时,组标题为必填项', - 'transaction_types_equal' => '所有拆分的类型必须相同', - 'invalid_transaction_type' => '无效的交易类型', - 'invalid_selection' => '您的选择无效', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => '至少需要一笔交易', - 'recurring_transaction_id' => '至少需要一笔交易。', - 'need_id_to_match' => '您需要提交一个含有ID的条目,API才能匹配。', - 'too_many_unmatched' => '已提交的多个交易无法与其各自的数据库条目相匹配。请确保现有条目具有有效的ID。', - 'id_does_not_match' => '提交的ID与预期的ID不符,请确保匹配或省略该字段。', - 'at_least_one_repetition' => '至少需要一次重复', - 'require_repeat_until' => '仅需填写重复次数或结束日期 (repeat_until) 即可,不需两者全部填写', - 'require_currency_info' => '此字段需要货币信息', - 'not_transfer_account' => '此账户无法用于转账', - 'require_currency_amount' => '此字段需要外币信息', - 'require_foreign_currency' => '此字段要求为数字', - 'require_foreign_dest' => '此字段值必须与目标账户的货币相匹配', - 'require_foreign_src' => '此字段值必须与来源账户的货币相匹配', - 'equal_description' => '交易描述和全局描述不应相同', - 'file_invalid_mime' => '文件“:name”的类型为“:mime”,系统禁止上传此类型的文件', - 'file_too_large' => '文件“:name”过大', - 'belongs_to_user' => ':attribute 的值未知', - 'accepted' => ':attribute 必须接受', - 'bic' => '此 BIC 无效', - 'at_least_one_trigger' => '每条规则必须至少有一个触发条件', - 'at_least_one_active_trigger' => '规则必须至少有一个启用的触发条件。', - 'at_least_one_action' => '每条规则必须至少有一个动作', - 'at_least_one_active_action' => '规则必须至少有一个启用的动作。', - 'base64' => '此 base64 编码数据无效', - 'model_id_invalid' => '指定的 ID 不能用于此模型', - 'less' => ':attribute 必须小于 10,000,000', - 'active_url' => ':attribute 不是有效的网址', - 'after' => ':attribute 必须是一个在 :date 之后的日期', - 'date_after' => '开始日期必须早于结束日期。', - 'alpha' => ':attribute 只能包含英文字母', - 'alpha_dash' => ':attribute 只能包含英文字母、数字和减号', - 'alpha_num' => ':attribute 只能包含英文字母和数字', - 'array' => ':attribute 必须是一个数组', - 'unique_for_user' => '使用 :attribute 的项目已存在', - 'before' => ':attribute 必须是一个在 :date 之前的日期', - 'unique_object_for_user' => '此名称已在使用中', - 'unique_account_for_user' => '此账户名称已在使用中', + 'bad_type_source' => 'Firefly III 无法确定基于此源账户的交易类型。', + 'bad_type_destination' => 'Firefly III 无法确定基于此目标帐户的交易类型。', + 'missing_where' => '数组中缺少"where"条目', + 'missing_update' => '数组中缺少 "update"条目', + 'invalid_where_key' => 'JSON包含一个无效的"where"子句', + 'invalid_update_key' => 'JSON包含一个无效的"update"子句', + 'invalid_query_data' => '查询中的%s:%s字段存在无效数据', + 'invalid_query_account_type' => '查询包含不同类型的账户,这是不允许的', + 'invalid_query_currency' => '查询包含不同货币的账户,这是不不允许的。', + 'iban' => '此 IBAN 无效', + 'zero_or_more' => '此值不能为负', + 'more_than_zero' => '值必须大于零。', + 'more_than_zero_correct' => '值必须为零或更大。', + 'no_asset_account' => '这不是一个资产帐户。', + 'date_or_time' => '此值必须是有效的日期或时间 (ISO 8601)', + 'source_equals_destination' => '来源账户与目标账户相同', + 'unique_account_number_for_user' => '此账户号码已在使用中', + 'unique_iban_for_user' => '此 IBAN 已在使用中', + 'reconciled_forbidden_field' => '这笔交易已经对账,您无法更改“:field”', + 'deleted_user' => '由于安全限制,您无法使用此电子邮件地址注册', + 'rule_trigger_value' => '此值不能用于所选触发条件', + 'rule_action_value' => '此值不能用于所选动作', + 'file_already_attached' => '上传的文件“:name”已添加到此对象', + 'file_attached' => '成功上传文件“:name”', + 'must_exist' => '数据库中不存在字段 :attribute 的 ID', + 'all_accounts_equal' => '此字段中的所有账户必须相同', + 'group_title_mandatory' => '在有超过一笔交易时,组标题为必填项', + 'transaction_types_equal' => '所有拆分的类型必须相同', + 'invalid_transaction_type' => '无效的交易类型', + 'invalid_selection' => '您的选择无效', + 'belongs_user' => '此值关联至一个似乎不存在的对象。', + 'belongs_user_or_user_group' => '此值关联至当前财务管理中一个似乎不存在的对象。', + 'at_least_one_transaction' => '至少需要一笔交易', + 'recurring_transaction_id' => '至少需要一笔交易。', + 'need_id_to_match' => '您需要提交一个含有ID的条目,API才能匹配。', + 'too_many_unmatched' => '已提交的多个交易无法与其各自的数据库条目相匹配。请确保现有条目具有有效的ID。', + 'id_does_not_match' => '提交的ID与预期的ID不符,请确保匹配或省略该字段。', + 'at_least_one_repetition' => '至少需要一次重复', + 'require_repeat_until' => '仅需填写重复次数或结束日期 (repeat_until) 即可,不需两者全部填写', + 'require_currency_info' => '此字段需要货币信息', + 'not_transfer_account' => '此账户无法用于转账', + 'require_currency_amount' => '此字段需要外币信息', + 'require_foreign_currency' => '此字段要求为数字', + 'require_foreign_dest' => '此字段值必须与目标账户的货币相匹配', + 'require_foreign_src' => '此字段值必须与来源账户的货币相匹配', + 'equal_description' => '交易描述和全局描述不应相同', + 'file_invalid_mime' => '文件“:name”的类型为“:mime”,系统禁止上传此类型的文件', + 'file_too_large' => '文件“:name”过大', + 'belongs_to_user' => ':attribute 的值未知', + 'accepted' => ':attribute 必须接受', + 'bic' => '此 BIC 无效', + 'at_least_one_trigger' => '每条规则必须至少有一个触发条件', + 'at_least_one_active_trigger' => '规则必须至少有一个启用的触发条件。', + 'at_least_one_action' => '每条规则必须至少有一个动作', + 'at_least_one_active_action' => '规则必须至少有一个启用的动作。', + 'base64' => '此 base64 编码数据无效', + 'model_id_invalid' => '指定的 ID 不能用于此模型', + 'less' => ':attribute 必须小于 10,000,000', + 'active_url' => ':attribute 不是有效的网址', + 'after' => ':attribute 必须是一个在 :date 之后的日期', + 'date_after' => '开始日期必须早于结束日期。', + 'alpha' => ':attribute 只能包含英文字母', + 'alpha_dash' => ':attribute 只能包含英文字母、数字和减号', + 'alpha_num' => ':attribute 只能包含英文字母和数字', + 'array' => ':attribute 必须是一个数组', + 'unique_for_user' => '使用 :attribute 的项目已存在', + 'before' => ':attribute 必须是一个在 :date 之前的日期', + 'unique_object_for_user' => '此名称已在使用中', + 'unique_account_for_user' => '此账户名称已在使用中', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + '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 不能相同', + 'digits' => ':attribute 必须是 :digits 位数字', + 'digits_between' => ':attribute 必须介于 :min 和 :max 位数字之间', + 'email' => ':attribute 必须是一个有效的电子邮件地址', + 'filled' => ':attribute 字段是必填项', + 'exists' => '所选的 :attribute 无效', + 'image' => ':attribute 必须是图片', + 'in' => '所选的 :attribute 无效', + 'integer' => ':attribute 必须是整数', + 'ip' => ':attribute 必须是一个有效的 IP 地址', + 'json' => ':attribute 必须是一个有效的 JSON 字符串', + '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' => '所选的 :attribute 无效', + 'numeric' => ':attribute 必须是数字', + 'scientific_notation' => ':attribute 不能使用科学记号。', + 'numeric_native' => '原始金额必须是数字', + 'numeric_destination' => '目标金额必须是数字', + 'numeric_source' => '来源金额必须是数字', + 'regex' => ':attribute 格式无效', + 'required' => ':attribute 字段为必填项', + 'required_if' => ':attribute 字段在 :other 为 :value 时是必填项', + 'required_unless' => '除非 :other 是 :values,否则 :attribute 字段是必填项', + 'required_with' => "当 :values\u{200b}\u{200b} 存在时, :attribute 字段是必填项", + 'required_with_all' => "当 :values\u{200b}\u{200b} 存在时, :attribute 字段是必填项", + 'required_without' => "当 :values\u{200b}\u{200b} 不存在时, :attribute 字段是必填项", + 'required_without_all' => "当没有任何 :values\u{200b}\u{200b} 存在时, :attribute 字段为必填项", + 'same' => ':attribute 和 :other 必须相符', + 'size.numeric' => ':attribute 必须是 :size', + 'amount_min_over_max' => '最小金额不能超过最大金额', + 'size.file' => ':attribute 必须为 :size kB', + 'size.string' => ':attribute 必须为 :size 个字符', + 'size.array' => ':attribute 必须包含 :size 个项目', + 'unique' => ':attribute 已被使用', + 'string' => ':attribute 必须是字符串', + 'url' => ':attribute 格式无效', + 'timezone' => ':attribute 必须是有效的区域', + '2fa_code' => ':attribute 字段无效', + 'dimensions' => ':attribute 的图片尺寸无效', + 'distinct' => ':attribute 字段有重复值', + 'file' => ':attribute 必须是文件', + 'in_array' => ':attribute 字段不存在于 :other', + 'present' => ':attribute 栏位必须存在', + 'amount_zero' => '总金额不能为零', + 'current_target_amount' => '当前金额必须小于目标金额', + 'unique_piggy_bank_for_user' => '存钱罐名称必须唯一', + 'unique_object_group' => '组名称必须唯一', + 'starts_with' => '此值必须以 :values 开头', + 'unique_webhook' => '您已经有一个 与 URL 绑定的 webhook、触发、响应和送达。', + 'unique_existing_webhook' => '您已经有了另一个与 URL 组合、触发、响应和交付的Webhook。', + 'same_account_type' => '两个账户必须是相同类型的账户', + 'same_account_currency' => '两个账户必须设置有相同的货币', - '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 不能相同', - 'digits' => ':attribute 必须是 :digits 位数字', - 'digits_between' => ':attribute 必须介于 :min 和 :max 位数字之间', - 'email' => ':attribute 必须是一个有效的电子邮件地址', - 'filled' => ':attribute 字段是必填项', - 'exists' => '所选的 :attribute 无效', - 'image' => ':attribute 必须是图片', - 'in' => '所选的 :attribute 无效', - 'integer' => ':attribute 必须是整数', - 'ip' => ':attribute 必须是一个有效的 IP 地址', - 'json' => ':attribute 必须是一个有效的 JSON 字符串', - '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' => '所选的 :attribute 无效', - 'numeric' => ':attribute 必须是数字', - 'numeric_native' => '原始金额必须是数字', - 'numeric_destination' => '目标金额必须是数字', - 'numeric_source' => '来源金额必须是数字', - 'regex' => ':attribute 格式无效', - 'required' => ':attribute 字段为必填项', - 'required_if' => ':attribute 字段在 :other 为 :value 时是必填项', - 'required_unless' => '除非 :other 是 :values,否则 :attribute 字段是必填项', - 'required_with' => '当 :values​​ 存在时, :attribute 字段是必填项', - 'required_with_all' => '当 :values​​ 存在时, :attribute 字段是必填项', - 'required_without' => '当 :values​​ 不存在时, :attribute 字段是必填项', - 'required_without_all' => '当没有任何 :values​​ 存在时, :attribute 字段为必填项', - 'same' => ':attribute 和 :other 必须相符', - 'size.numeric' => ':attribute 必须是 :size', - 'amount_min_over_max' => '最小金额不能超过最大金额', - 'size.file' => ':attribute 必须为 :size kB', - 'size.string' => ':attribute 必须为 :size 个字符', - 'size.array' => ':attribute 必须包含 :size 个项目', - 'unique' => ':attribute 已被使用', - 'string' => ':attribute 必须是字符串', - 'url' => ':attribute 格式无效', - 'timezone' => ':attribute 必须是有效的区域', - '2fa_code' => ':attribute 字段无效', - 'dimensions' => ':attribute 的图片尺寸无效', - 'distinct' => ':attribute 字段有重复值', - 'file' => ':attribute 必须是文件', - 'in_array' => ':attribute 字段不存在于 :other', - 'present' => ':attribute 栏位必须存在', - 'amount_zero' => '总金额不能为零', - 'current_target_amount' => '当前金额必须小于目标金额', - 'unique_piggy_bank_for_user' => '存钱罐名称必须唯一', - 'unique_object_group' => '组名称必须唯一', - 'starts_with' => '此值必须以 :values 开头', - 'unique_webhook' => '您已经有一个 与 URL 绑定的 webhook、触发、响应和送达。', - 'unique_existing_webhook' => '您已经有了另一个与 URL 组合、触发、响应和交付的Webhook。', - 'same_account_type' => '两个账户必须是相同类型的账户', - 'same_account_currency' => '两个账户必须设置有相同的货币', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => '此密码不安全,请重试。访问 https://bit.ly/FF3-password-security 获取更多信息。', - 'valid_recurrence_rep_type' => '此重复类型不能用于定期交易', - 'valid_recurrence_rep_moment' => '此重复时刻不能用于此重复类型', - 'invalid_account_info' => '无效的账户信息', - 'attributes' => [ + 'secure_password' => '此密码不安全,请重试。访问 https://bit.ly/FF3-password-security 获取更多信息。', + 'valid_recurrence_rep_type' => '此重复类型不能用于定期交易', + 'valid_recurrence_rep_moment' => '此重复时刻不能用于此重复类型', + 'invalid_account_info' => '无效的账户信息', + 'attributes' => [ 'email' => '电子邮件地址', 'description' => '描述', 'amount' => '金额', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => '需要一个有效的来源账户 ID 和/或来源账户名称才能继续', - 'withdrawal_source_bad_data' => '[a] 搜索ID“:id”或名称“:name”时,没有找到有效的来源账户。', - 'withdrawal_dest_need_data' => '[a] 需要一个有效的目标账户ID和/或有效的目标账户名称才能继续。', - 'withdrawal_dest_bad_data' => '搜索 ID “:id”或名称“:name”时找不到有效的目标账户', + 'withdrawal_source_need_data' => '需要一个有效的来源账户 ID 和/或来源账户名称才能继续', + 'withdrawal_source_bad_data' => '[a] 搜索ID“:id”或名称“:name”时,没有找到有效的来源账户。', + 'withdrawal_dest_need_data' => '[a] 需要一个有效的目标账户ID和/或有效的目标账户名称才能继续。', + 'withdrawal_dest_bad_data' => '搜索 ID “:id”或名称“:name”时找不到有效的目标账户', - 'withdrawal_dest_iban_exists' => '此目标账户的 IBAN 已经用于资产账户或债务账户,无法用作支出目标。', - 'deposit_src_iban_exists' => '此来源账户的 IBAN 已经用于资产账户或债务账户,无法用作收入来源。', + 'withdrawal_dest_iban_exists' => '此目标账户的 IBAN 已经用于资产账户或债务账户,无法用作支出目标。', + 'deposit_src_iban_exists' => '此来源账户的 IBAN 已经用于资产账户或债务账户,无法用作收入来源。', - 'reconciliation_source_bad_data' => '在搜索ID“:id”或名称“:name”时,没有找到有效的对账帐户', + 'reconciliation_source_bad_data' => '在搜索ID“:id”或名称“:name”时,没有找到有效的对账帐户', - 'generic_source_bad_data' => '[e] 搜索ID“:id”或名称“:name”时,没有找到有效的来源账户。', + 'generic_source_bad_data' => '[e] 搜索ID“:id”或名称“:name”时,没有找到有效的来源账户。', - 'deposit_source_need_data' => '需要一个有效的来源账户 ID 和/或来源账户名称才能继续', - 'deposit_source_bad_data' => '[b] 搜索ID“:id”或名称“:name”时,没有找到有效的来源账户。', - 'deposit_dest_need_data' => '[b] 需要一个有效的目标账户ID和/或有效的目标账户名称才能继续。', - 'deposit_dest_bad_data' => '搜索 ID “:id”或名称“:name”时找不到有效的目标账户', - 'deposit_dest_wrong_type' => '提交的目标账户的类型不正确', + 'deposit_source_need_data' => '需要一个有效的来源账户 ID 和/或来源账户名称才能继续', + 'deposit_source_bad_data' => '[b] 搜索ID“:id”或名称“:name”时,没有找到有效的来源账户。', + 'deposit_dest_need_data' => '[b] 需要一个有效的目标账户ID和/或有效的目标账户名称才能继续。', + 'deposit_dest_bad_data' => '搜索 ID “:id”或名称“:name”时找不到有效的目标账户', + 'deposit_dest_wrong_type' => '提交的目标账户的类型不正确', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => '需要一个有效的来源账户 ID 和/或来源账户名称才能继续', + 'transfer_source_bad_data' => '[c]搜索ID“:id”或名称“:name”时,没有找到有效的来源账户。', + 'transfer_dest_need_data' => '[c] 需要一个有效的目标账户ID和/或有效的目标账户名称才能继续。', + 'transfer_dest_bad_data' => '搜索 ID “:id”或名称“:name”时找不到有效的目标账户', + 'need_id_in_edit' => '每笔拆分必须有 transaction_journal_id (有效的 ID 或 0)。', - 'transfer_source_need_data' => '需要一个有效的来源账户 ID 和/或来源账户名称才能继续', - 'transfer_source_bad_data' => '[c]搜索ID“:id”或名称“:name”时,没有找到有效的来源账户。', - 'transfer_dest_need_data' => '[c] 需要一个有效的目标账户ID和/或有效的目标账户名称才能继续。', - 'transfer_dest_bad_data' => '搜索 ID “:id”或名称“:name”时找不到有效的目标账户', - 'need_id_in_edit' => '每笔拆分必须有 transaction_journal_id (有效的 ID 或 0)。', + 'ob_source_need_data' => '需要一个有效的来源账户ID和/或来源账户名称才能继续。', + 'lc_source_need_data' => '需要获取一个有效的来源账户 ID 才能继续。', + 'ob_dest_need_data' => '[d] 需要一个有效的目标账户ID和/或有效的目标账户名称才能继续。', + 'ob_dest_bad_data' => '搜索 ID “:id”或名称“:name”时找不到有效的目标账户', + 'reconciliation_either_account' => '要提交对账,您必须提交来源或目标帐户。不要都提交,也不要都不提交。', - 'ob_source_need_data' => '需要一个有效的来源账户ID和/或来源账户名称才能继续。', - 'lc_source_need_data' => '需要获取一个有效的来源账户 ID 才能继续。', - 'ob_dest_need_data' => '[d] 需要一个有效的目标账户ID和/或有效的目标账户名称才能继续。', - 'ob_dest_bad_data' => '搜索 ID “:id”或名称“:name”时找不到有效的目标账户', - 'reconciliation_either_account' => '要提交对账,您必须提交来源或目标帐户。不要都提交,也不要都不提交。', + 'generic_invalid_source' => '您不能使用此账户作为来源账户', + 'generic_invalid_destination' => '您不能使用此账户作为目标账户', - 'generic_invalid_source' => '您不能使用此账户作为来源账户', - 'generic_invalid_destination' => '您不能使用此账户作为目标账户', + 'generic_no_source' => '必须提供来源账户或者交易ID', + 'generic_no_destination' => '必须提供目标账户或者交易ID', - 'generic_no_source' => '必须提供来源账户或者交易ID', - 'generic_no_destination' => '必须提供目标账户或者交易ID', - - 'gte.numeric' => ':attribute 必须大于或等于 :value', - 'gt.numeric' => ':attribute 必须大于 :value', - 'gte.file' => ':attribute 必须大于或等于 :value kB', - 'gte.string' => ':attribute 必须大于或等于 :value 字符', - 'gte.array' => ':attribute 必须有 :value 个或更多项目', + 'gte.numeric' => ':attribute 必须大于或等于 :value', + 'gt.numeric' => ':attribute 必须大于 :value', + 'gte.file' => ':attribute 必须大于或等于 :value kB', + 'gte.string' => ':attribute 必须大于或等于 :value 字符', + 'gte.array' => ':attribute 必须有 :value 个或更多项目', 'amount_required_for_auto_budget' => '金额是必填项', 'auto_budget_amount_positive' => '金额必须大于零', + 'auto_budget_period_mandatory' => '自动预算周期是必填项', // no access to administration: diff --git a/resources/lang/zh_TW/api.php b/resources/lang/zh_TW/api.php index d65d2de715..ffd15f7fc1 100644 --- a/resources/lang/zh_TW/api.php +++ b/resources/lang/zh_TW/api.php @@ -32,7 +32,5 @@ declare(strict_types=1); * */ - return [ - ]; diff --git a/resources/lang/zh_TW/auth.php b/resources/lang/zh_TW/auth.php index 87802bc284..89c70fc6ab 100644 --- a/resources/lang/zh_TW/auth.php +++ b/resources/lang/zh_TW/auth.php @@ -31,10 +31,8 @@ * */ - declare(strict_types=1); - return [ 'failed' => '憑證與系統記錄不符。', 'throttle' => '登入失敗次數過多,請等待 :seconds 秒後再試。', diff --git a/resources/lang/zh_TW/breadcrumbs.php b/resources/lang/zh_TW/breadcrumbs.php index 9f8974d5a8..bee4feeff6 100644 --- a/resources/lang/zh_TW/breadcrumbs.php +++ b/resources/lang/zh_TW/breadcrumbs.php @@ -31,42 +31,41 @@ * */ - declare(strict_types=1); return [ - 'home' => '首頁', - 'budgets' => '預算', - 'subscriptions' => '訂閱', - 'transactions' => '交易', - 'title_expenses' => '支出', - 'title_withdrawal' => '支出', - 'title_revenue' => '收入', - 'title_deposit' => '收入', - 'title_transfer' => '轉帳', - 'title_transfers' => '轉帳', - 'edit_currency' => '編輯貨幣 ":name"', - 'delete_currency' => '刪除貨幣 ":name"', - 'newPiggyBank' => '創建一個新的小豬撲滿', - 'edit_piggyBank' => '編輯小豬撲滿 ":name"', - 'preferences' => '偏好設定', - 'profile' => '個人檔案', - 'accounts' => '帳戶', - 'changePassword' => '更改您的密碼', - 'change_email' => '更改您的電子郵件地址', - 'bills' => '帳單', - 'newBill' => '新增帳單', - 'edit_bill' => '編輯帳單 ":name"', - 'delete_bill' => '刪除帳單 ":name"', - 'reports' => '報表', - 'search_result' => '":query" 的搜尋結果', - 'withdrawal_list' => '支出', - 'Withdrawal_list' => '支出', - 'deposit_list' => '收入、所得與存款', - 'transfer_list' => '轉帳', - 'transfers_list' => '轉帳', + 'home' => '首頁', + 'budgets' => '預算', + 'subscriptions' => '訂閱', + 'transactions' => '交易', + 'title_expenses' => '支出', + 'title_withdrawal' => '支出', + 'title_revenue' => '收入', + 'title_deposit' => '收入', + 'title_transfer' => '轉帳', + 'title_transfers' => '轉帳', + 'edit_currency' => '編輯貨幣 ":name"', + 'delete_currency' => '刪除貨幣 ":name"', + 'newPiggyBank' => '創建一個新的小豬撲滿', + 'edit_piggyBank' => '編輯小豬撲滿 ":name"', + 'preferences' => '偏好設定', + 'profile' => '個人檔案', + 'accounts' => '帳戶', + 'changePassword' => '更改您的密碼', + 'change_email' => '更改您的電子郵件地址', + 'bills' => '帳單', + 'newBill' => '新增帳單', + 'edit_bill' => '編輯帳單 ":name"', + 'delete_bill' => '刪除帳單 ":name"', + 'reports' => '報表', + 'search_result' => '":query" 的搜尋結果', + 'withdrawal_list' => '支出', + 'Withdrawal_list' => '支出', + 'deposit_list' => '收入、所得與存款', + 'transfer_list' => '轉帳', + 'transfers_list' => '轉帳', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,7 +76,6 @@ return [ * */ - 'reconciliation_list' => '對帳', 'create_withdrawal' => '新增提款', 'create_deposit' => '新增存款', diff --git a/resources/lang/zh_TW/components.php b/resources/lang/zh_TW/components.php index 4c5d8fd345..c0ab405800 100644 --- a/resources/lang/zh_TW/components.php +++ b/resources/lang/zh_TW/components.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/zh_TW/config.php b/resources/lang/zh_TW/config.php index a66c035b46..0c60849e8c 100644 --- a/resources/lang/zh_TW/config.php +++ b/resources/lang/zh_TW/config.php @@ -31,27 +31,26 @@ * */ - declare(strict_types=1); return [ - 'html_language' => 'zh-tw', - 'locale' => 'zh_TW, Chinese Traditional (Taiwan), zh_TW.utf8, zh_TW.UTF-8', - //'month' => '%B %Y', - 'month_js' => 'MMMM YYYY', + 'html_language' => 'zh-tw', + 'locale' => 'zh_TW, Chinese Traditional (Taiwan), zh_TW.utf8, zh_TW.UTF-8', + // 'month' => '%B %Y', + 'month_js' => 'MMMM YYYY', - //'month_and_day' => '%B %e, %Y', - 'month_and_day_moment_js' => 'YYYY 年 MMM D 日', - 'month_and_day_fns' => 'YYYY年 M月 d日', - 'month_and_day_js' => 'MMMM Do, YYYY', + // 'month_and_day' => '%B %e, %Y', + 'month_and_day_moment_js' => 'YYYY 年 MMM D 日', + 'month_and_day_fns' => 'YYYY年 M月 d日', + 'month_and_day_js' => 'MMMM Do, YYYY', - //'month_and_date_day' => '%A %B %e, %Y', - 'month_and_date_day_js' => 'YYYY年 M月 D日 dddd', + // 'month_and_date_day' => '%A %B %e, %Y', + 'month_and_date_day_js' => 'YYYY年 M月 D日 dddd', - //'month_and_day_no_year' => '%B %e', - 'month_and_day_no_year_js' => 'M月 D日', + // 'month_and_day_no_year' => '%B %e', + 'month_and_day_no_year_js' => 'M月 D日', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -62,33 +61,33 @@ return [ * */ + // 'date_time' => '%B %e, %Y, @ %T', + 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', + 'date_time_fns' => 'YYYY年 M月 D日 dddd 於 HH:mm:ss', + 'date_time_fns_short' => 'MMMM do, yyyy @ HH:mm', - //'date_time' => '%B %e, %Y, @ %T', - 'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss', - 'date_time_fns' => 'YYYY年 M月 D日 dddd 於 HH:mm:ss', + // 'specific_day' => '%e %B %Y', + 'specific_day_js' => 'D MMMM YYYY', - //'specific_day' => '%e %B %Y', - 'specific_day_js' => 'D MMMM YYYY', + // 'week_in_year' => 'Week %V, %G', + 'week_in_year_js' => 'GGGG年 第W週', + 'week_in_year_fns' => "'週' w,yyyy", - //'week_in_year' => 'Week %V, %G', - 'week_in_year_js' => 'GGGG年 第W週', - 'week_in_year_fns' => "'週' w,yyyy", + // 'year' => '%Y', + 'year_js' => 'YYYY', - //'year' => '%Y', - 'year_js' => 'YYYY', + // 'half_year' => '%B %Y', + 'half_year_js' => '\QQ YYYY', - //'half_year' => '%B %Y', - 'half_year_js' => '\QQ YYYY', - - 'quarter_fns' => "'Q'Q, yyyy", - 'half_year_fns' => "'H{half}', yyyy", - 'dow_1' => '週一', - 'dow_2' => '週二', - 'dow_3' => '週三', - 'dow_4' => '週四', - 'dow_5' => '週五', - 'dow_6' => '週六', - 'dow_7' => '週日', + 'quarter_fns' => "'Q'Q, yyyy", + 'half_year_fns' => "'H{half}', yyyy", + 'dow_1' => '週一', + 'dow_2' => '週二', + 'dow_3' => '週三', + 'dow_4' => '週四', + 'dow_5' => '週五', + 'dow_6' => '週六', + 'dow_7' => '週日', ]; /* diff --git a/resources/lang/zh_TW/demo.php b/resources/lang/zh_TW/demo.php index 74489d0d0d..75a2a886de 100644 --- a/resources/lang/zh_TW/demo.php +++ b/resources/lang/zh_TW/demo.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/zh_TW/email.php b/resources/lang/zh_TW/email.php index 51591f3683..8975a607a1 100644 --- a/resources/lang/zh_TW/email.php +++ b/resources/lang/zh_TW/email.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -45,7 +44,7 @@ return [ 'admin_test_subject' => '來自 Firefly III 安裝程式的測試訊息', 'admin_test_body' => '這是您 Firefly III 載體的測試訊息,是寄給 :email 的。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -56,43 +55,42 @@ return [ * */ - // invite - 'invitation_created_subject' => 'An invitation has been created', - 'invitation_created_body' => 'Admin user ":email" created a user invitation which can be used by whoever is behind email address ":invitee". The invite will be valid for 48hrs.', - 'invite_user_subject' => 'You\'ve been invited to create a Firefly III account.', - 'invitation_introduction' => 'You\'ve been invited to create a Firefly III account on **:host**. Firefly III is a personal, self-hosted, private personal finance manager. All the cool kids are using it.', - 'invitation_invited_by' => 'You\'ve been invited by ":admin" and this invitation was sent to ":invitee". That\'s you, right?', - 'invitation_url' => 'The invitation is valid for 48 hours and can be redeemed by surfing to [Firefly III](:url). Enjoy!', + 'invitation_created_subject' => '已建立邀請', + 'invitation_created_body' => '管理員 ":email" 已透過電郵 ":invitee" 邀請用戶建立一個新的帳戶。該邀請有效期為48小時。', + 'invite_user_subject' => '你已被邀請建立Firefly III 帳戶', + 'invitation_introduction' => '你已經被邀請在 **:host** 建立一個Firefly III 帳戶。 Firefly III 是一個私隱、自架、個人的財富管理。', + 'invitation_invited_by' => '你已被:admin 邀請,而該邀請已發送到:invitee', + 'invitation_url' => '此邀請有效期為48 小時,並可在 [Firefly III](:url) 兌換。祝您使用愉快!', // new IP 'login_from_new_ip' => '自 Firefly III 的新登入', - 'slack_login_from_new_ip' => 'New Firefly III login from IP :ip (:host)', + 'slack_login_from_new_ip' => '從 IP :ip (:host) 新的 Firefly III 登入', 'new_ip_body' => 'Firefly III 監測到未知 IP 位址在您帳號的1筆新登入訊息,若您未曾使用下列 IP 位址,或是使用該位址登入已超過6個月餘,Firefly III 會警示您。', - 'new_ip_warning' => 'If you recognize this IP address or the login, you can ignore this message. If you didn\'t login, of if you have no idea what this is about, verify your password security, change it, and log out all other sessions. To do this, go to your profile page. Of course you have 2FA enabled already, right? Stay safe!', - 'ip_address' => 'IP address', - 'host_name' => 'Host', - 'date_time' => 'Date + time', + 'new_ip_warning' => '如果你知道這個IP 地址或登入紀錄,你可以無視這個訊息。如果你沒有登入或不知道在發生什麼事,請到你的個人資料頁面,確認你的密碼強度、更改密碼並登出所有其他登入階段。我們強烈建議你啟用多重要素驗證以確保你的資料安全。', + 'ip_address' => 'IP 地址', + 'host_name' => '主機', + 'date_time' => '日期和時間', // access token created - 'access_token_created_subject' => 'A new access token was created', - 'access_token_created_body' => 'Somebody (hopefully you) just created a new Firefly III API Access Token for your user account.', - 'access_token_created_explanation' => 'With this token, they can access **all** of your financial records through the Firefly III API.', - 'access_token_created_revoke' => 'If this wasn\'t you, please revoke this token as soon as possible at :url', + 'access_token_created_subject' => '已建立新的存取權杖', + 'access_token_created_body' => '有人(希望是你)剛剛在你的Firefly III 帳戶中建立了新的 Firefly III API 存取權杖。', + 'access_token_created_explanation' => '你可以利用這個權杖透過Firefly 應用程式介面(API) 存取你**所有**的財務紀錄', + 'access_token_created_revoke' => '如果你沒有建立權杖,請盡快到 :url 撤銷權杖。', // registered - 'registered_subject' => 'Welcome to Firefly III!', - 'registered_subject_admin' => 'A new user has registered', - 'admin_new_user_registered' => 'A new user has registered. User **:email** was given user ID #:id.', - 'registered_welcome' => 'Welcome to [Firefly III](:address). Your registration has made it, and this email is here to confirm it. Yay!', - 'registered_pw' => 'If you have forgotten your password already, please reset it using [the password reset tool](:address/password/reset).', - 'registered_help' => 'There is a help-icon in the top right corner of each page. If you need help, click it!', - 'registered_closing' => 'Enjoy!', - 'registered_firefly_iii_link' => 'Firefly III:', - 'registered_pw_reset_link' => 'Password reset:', - 'registered_doc_link' => 'Documentation:', + 'registered_subject' => '歡迎使用 Firefly III!', + 'registered_subject_admin' => '一名新用戶已經註冊', + 'admin_new_user_registered' => '一名新用戶已經註冊。用戶 **:email** 的ID為 #:id', + 'registered_welcome' => '歡迎使用 [Firefly III](:address)!此電郵用於確認你已經成功註冊!', + 'registered_pw' => '如果你忘記了你的密碼,請使用[密碼重設工具](:address/password/reset)重設你的密碼。', + 'registered_help' => '求助按鈕在畫面的右上方。如需協助時,請按一下按鈕。', + 'registered_closing' => '祝您使用愉快!', + 'registered_firefly_iii_link' => 'Firefly III:', + 'registered_pw_reset_link' => '重置密碼:', + 'registered_doc_link' => '說明文件:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -103,51 +101,51 @@ return [ * */ - // new version - 'new_version_email_subject' => 'A new Firefly III version is available', + 'new_version_email_subject' => '有新的Firefly III 版本', // email change - 'email_change_subject' => 'Your Firefly III email address has changed', - 'email_change_body_to_new' => 'You or somebody with access to your Firefly III account has changed your email address. If you did not expect this message, please ignore and delete it.', - 'email_change_body_to_old' => 'You or somebody with access to your Firefly III account has changed your email address. If you did not expect this to happen, you **must** follow the "undo"-link below to protect your account!', - 'email_change_ignore' => 'If you initiated this change, you may safely ignore this message.', - 'email_change_old' => 'The old email address was: :email', - 'email_change_old_strong' => 'The old email address was: **:email**', - 'email_change_new' => 'The new email address is: :email', - 'email_change_new_strong' => 'The new email address is: **:email**', - 'email_change_instructions' => 'You cannot use Firefly III until you confirm this change. Please follow the link below to do so.', - 'email_change_undo_link' => 'To undo the change, follow this link:', + 'email_change_subject' => '你的Firefly III 電郵地址已被更變', + 'email_change_body_to_new' => '你或其他人在你的 Firefly III 帳戶更改了你的電郵地址。如果你沒有提出該請求,請無視並刪除此電郵。', + 'email_change_body_to_old' => '你或其他人於你的 Firefly III 帳戶更改你的電郵你的電郵地址。如果這不是你,你**必須**使用以下的「撤消」連結保護你的帳戶!', + 'email_change_ignore' => '如果你提出了這項更變,你可以無視這段訊息。', + 'email_change_old' => '舊的電郵地址為::email', + 'email_change_old_strong' => '舊的電郵地址為:**:email**', + 'email_change_new' => '新的電郵地址為:**:email**', + 'email_change_new_strong' => '新的電郵地址為:**:email**', + 'email_change_instructions' => '在確認這項更變前你不能使用你的Firefly III 帳戶。請使用以下連結確認。', + 'email_change_undo_link' => '如要重設這個變更,請使用以下連結:', // OAuth token created - 'oauth_created_subject' => 'A new OAuth client has been created', - 'oauth_created_body' => 'Somebody (hopefully you) just created a new Firefly III API OAuth Client for your user account. It\'s labeled ":name" and has callback URL `:url`.', - 'oauth_created_explanation' => 'With this client, they can access **all** of your financial records through the Firefly III API.', - 'oauth_created_undo' => 'If this wasn\'t you, please revoke this client as soon as possible at `:url`', + 'oauth_created_subject' => '已建立新的 OAuth 客戶端', + 'oauth_created_body' => '有人 (希望是你) 剛剛在你的 Firefly III 帳戶建立了新的 Firefly III API OAuth 客戶端。該標籤為 ":name"、回調連結為 `:url`。', + 'oauth_created_explanation' => '你可以利用這個客戶端透過Firefly 應用程式介面(API) 存取你**所有**的財務紀錄', + 'oauth_created_undo' => '如果這不是你,請盡快在 `:url` 撤消這個客戶端', // reset password - 'reset_pw_subject' => 'Your password reset request', - 'reset_pw_instructions' => 'Somebody tried to reset your password. If it was you, please follow the link below to do so.', - 'reset_pw_warning' => '**PLEASE** verify that the link actually goes to the Firefly III you expect it to go!', + 'reset_pw_subject' => '你的密碼重設請求', + 'reset_pw_instructions' => '有人嘗試重設你的密碼。如果你發送到重設請求,請透過以下連結繼續:', + 'reset_pw_warning' => '請**確認該連結**為你所想造訪的Firefly III 站台!', // error - 'error_subject' => 'Caught an error in Firefly III', - 'error_intro' => 'Firefly III v:version ran into an error: :errorMessage.', - 'error_type' => 'The error was of type ":class".', - 'error_timestamp' => 'The error occurred on/at: :time.', - 'error_location' => 'This error occurred in file ":file" on line :line with code :code.', - 'error_user' => 'The error was encountered by user #:id, :email.', - 'error_no_user' => 'There was no user logged in for this error or no user was detected.', - 'error_ip' => 'The IP address related to this error is: :ip', - 'error_url' => 'URL is: :url', - 'error_user_agent' => 'User agent: :userAgent', + 'error_subject' => '偵測到Firefly III 發生錯誤', + 'error_intro' => 'Firefly III v:version 發生了錯誤::errorMessage.', + 'error_type' => '錯誤類別為 ":class"', + 'error_timestamp' => '錯誤發生在 :time', + 'error_location' => '該錯誤發生在檔案 ":file" 於第 :line 行;代碼為 :code.', + 'error_user' => '用戶#:id, :email 遭遇了該錯誤', + 'error_no_user' => '在錯誤發生時,未偵測到有用戶在登入', + 'error_ip' => '有關該錯誤的IP 地址: :ip', + 'error_url' => '連結為 :url', + 'error_user_agent' => '使用者代理: :userAgent', 'error_stacktrace' => 'The full stacktrace is below. If you think this is a bug in Firefly III, you can forward this message to james@firefly-iii.org. This can help fix the bug you just encountered.', - 'error_github_html' => 'If you prefer, you can also open a new issue on GitHub.', - 'error_github_text' => 'If you prefer, you can also open a new issue on https://github.com/firefly-iii/firefly-iii/issues.', + 'error_github_html' => '你亦可以在GitHub 建立新的問題 (issue)。', + 'error_github_text' => '你亦可以在 https://github.com/firefly-iii/firefly-iii/issues 建立新的問題 (issue)。', 'error_stacktrace_below' => 'The full stacktrace is below:', - 'error_headers' => 'The following headers may also be relevant:', + 'error_headers' => '有關的HTTP頭欄位如下:', + 'error_post' => '提交此的用戶:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,22 +156,20 @@ return [ * */ - // report new journals - 'new_journals_subject' => 'Firefly III has created a new transaction|Firefly III has created :count new transactions', + 'new_journals_subject' => 'Firefly III 已建立了一項新的交易|Firefly III 已建立了 :count項新的交易', 'new_journals_header' => 'Firefly III has created a transaction for you. You can find it in your Firefly III installation:|Firefly III has created :count transactions for you. You can find them in your Firefly III installation:', // bill warning - 'bill_warning_subject_end_date' => 'Your bill ":name" is due to end in :diff days', - 'bill_warning_subject_now_end_date' => 'Your bill ":name" is due to end TODAY', - 'bill_warning_subject_extension_date' => 'Your bill ":name" is due to be extended or cancelled in :diff days', - 'bill_warning_subject_now_extension_date' => 'Your bill ":name" is due to be extended or cancelled TODAY', - 'bill_warning_end_date' => 'Your bill **":name"** is due to end on :date. This moment will pass in about **:diff days**.', - 'bill_warning_extension_date' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass in about **:diff days**.', - 'bill_warning_end_date_zero' => 'Your bill **":name"** is due to end on :date. This moment will pass **TODAY!**', - 'bill_warning_extension_date_zero' => 'Your bill **":name"** is due to be extended or cancelled on :date. This moment will pass **TODAY!**', - 'bill_warning_please_action' => 'Please take the appropriate action.', - + 'bill_warning_subject_end_date' => '你的帳單 ":name" 將於 :diff 日內到期', + 'bill_warning_subject_now_end_date' => '你的帳單 ":name" 將於今天到期', + 'bill_warning_subject_extension_date' => '你的帳單 ":name" 將於 :diff 日內延期或取消', + 'bill_warning_subject_now_extension_date' => '你的帳單 ":name" 將於今天延期或取消', + 'bill_warning_end_date' => '你的帳單 ":name" 將於 :date 到期,即大約 **:diff 日**', + 'bill_warning_extension_date' => '你的帳單 ":name" 將於 :date 延期或取消,即大約 **:diff 日**', + 'bill_warning_end_date_zero' => '你的帳單 ":name" 將於 :date ,即**今天**到期', + 'bill_warning_extension_date_zero' => '你的帳單 ":name" 將於 :date 即**今天**延期或消取', + 'bill_warning_please_action' => '請採取適當的行動。', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/zh_TW/errors.php b/resources/lang/zh_TW/errors.php index 62b14a5fd4..62511b57e6 100644 --- a/resources/lang/zh_TW/errors.php +++ b/resources/lang/zh_TW/errors.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ @@ -52,7 +51,7 @@ return [ 'stacktrace' => 'Stack trace', 'more_info' => 'More information', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -63,18 +62,16 @@ return [ * */ - - 'collect_info' => 'Please collect more information in the storage/logs directory where you will find log files. If you\'re running Docker, use docker logs -f [container].', - 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', - 'github_help' => 'Get help on GitHub', - 'github_instructions' => 'You\'re more than welcome to open a new issue on GitHub.', - 'use_search' => 'Use the search!', - 'include_info' => 'Include the information from this debug page.', - 'tell_more' => 'Tell us more than "it says Whoops!"', - 'include_logs' => 'Include error logs (see above).', - 'what_did_you_do' => 'Tell us what you were doing.', - 'offline_header' => 'You are probably offline', - 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', - 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', - + 'collect_info' => 'Please collect more information in the storage/logs directory where you will find log files. If you\'re running Docker, use docker logs -f [container].', + 'collect_info_more' => 'You can read more about collecting error information in the FAQ.', + 'github_help' => 'Get help on GitHub', + 'github_instructions' => 'You\'re more than welcome to open a new issue on GitHub.', + 'use_search' => 'Use the search!', + 'include_info' => 'Include the information from this debug page.', + 'tell_more' => 'Tell us more than "it says Whoops!"', + 'include_logs' => 'Include error logs (see above).', + 'what_did_you_do' => 'Tell us what you were doing.', + 'offline_header' => 'You are probably offline', + 'offline_unreachable' => 'Firefly III is unreachable. Your device is currently offline or the server is not working.', + 'offline_github' => 'If you are sure both your device and the server are online, please open a ticket on GitHub.', ]; diff --git a/resources/lang/zh_TW/firefly.php b/resources/lang/zh_TW/firefly.php index b13479d6f8..8bb9b7b653 100644 --- a/resources/lang/zh_TW/firefly.php +++ b/resources/lang/zh_TW/firefly.php @@ -33,312 +33,314 @@ declare(strict_types=1); * */ - return [ // general stuff: - 'close' => '關閉', - 'actions' => '操作', - 'edit' => '編輯', - 'delete' => '刪除', - 'split' => '分割', - 'single_split' => 'Split', - 'clone' => '複製', - 'confirm_action' => 'Confirm action', - 'last_seven_days' => '最近7天', - 'last_thirty_days' => '最近30天', - 'last_180_days' => '最近 180 天', - 'month_to_date' => '本月至今', - 'year_to_date' => '今年迄今為止', - 'YTD' => '本年至今', - 'welcome_back' => 'What\'s playing?', - 'everything' => '所有', - 'today' => '今天', - 'customRange' => '自訂範圍', - 'date_range' => '日期範圍', - 'apply' => '套用', - 'select_date' => '選擇日期..', - 'cancel' => '取消', - 'from' => '自', - 'to' => '至', - 'structure' => '結構', - 'help_translating' => '此說明尚欠奉中文版,要協助翻譯嗎?', - 'showEverything' => '全部顯示', - 'never' => '未有資料', - 'no_results_for_empty_search' => '您的搜尋空白,結果也是空白。', - 'removed_amount' => '已移除 :amount', - 'added_amount' => '已新增 :amount', - 'asset_account_role_help' => '選擇後如有額外選項,可稍後設定。', - 'Opening balance' => '初始餘額', - 'create_new_stuff' => '建立新內容', - 'new_withdrawal' => '新提款', - 'create_new_transaction' => '建立新交易', - 'sidebar_frontpage_create' => '建立', - 'new_transaction' => '新交易', - 'no_rules_for_bill' => '此帳單未設定相關的規則。', - 'go_to_asset_accounts' => '檢視您的資產帳戶', - 'go_to_budgets' => '前往您的預算', - 'go_to_withdrawals' => 'Go to your withdrawals', - 'clones_journal_x' => 'This transaction is a clone of ":description" (#:id)', - 'go_to_categories' => '前往您的分類', - 'go_to_bills' => '前往您的帳單', - 'go_to_expense_accounts' => '查看您的支出帳戶', - 'go_to_revenue_accounts' => '查看您的收入帳戶', - 'go_to_piggies' => '前往您的小豬撲滿', - 'new_deposit' => '新存款', - 'new_transfer' => '新轉帳', - 'new_transfers' => '新轉帳', - 'new_asset_account' => '新資產帳戶', - 'new_expense_account' => '新支出帳戶', - 'new_revenue_account' => '新收入帳戶', - 'new_liabilities_account' => '新債務', - 'new_budget' => '新預算', - 'new_bill' => '新帳單', - 'block_account_logout' => '您已被登出。被封鎖的帳號無法使用本網站,您是以有效的電子郵件地址註冊嗎?', - 'flash_success' => '成功!', - 'flash_info' => '訊息', - 'flash_warning' => '警告!', - 'flash_error' => '錯誤!', - 'flash_danger' => '危險!', - 'flash_info_multiple' => '有 1 個訊息|有 :count 個訊息', - 'flash_error_multiple' => '有 1 個錯誤|有 :count 個錯誤', - 'net_worth' => '淨值', - 'help_for_this_page' => '本頁說明', - 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', - 'two_factor_welcome' => '您好!', - 'two_factor_enter_code' => '如要繼續,請輸入您的兩步驟驗證 (two factor authentication) 代碼,您的應用程式可為您產生。', - 'two_factor_code_here' => '在此輸入代碼', - 'two_factor_title' => '兩步驟驗證', - 'authenticate' => '驗證', - 'two_factor_forgot_title' => '遺失兩步驟驗證', - 'two_factor_forgot' => '啥兩步驟我忘了。', - 'two_factor_lost_header' => '遺失您的兩步驟驗證嗎?', - 'two_factor_lost_intro' => 'If you lost your backup codes as well, you have bad luck. This is not something you can fix from the web interface. You have two choices.', - 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read this entry in the FAQ for instructions.', - 'two_factor_lost_fix_owner' => '否則,請寄送電子郵件至網站擁有者 :site_owner 要求重設您的兩步驟驗證。', - 'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.', - 'pref_two_factor_new_backup_codes' => 'Get new backup codes', - 'pref_two_factor_backup_code_count' => 'You have :count valid backup code.|You have :count valid backup codes.', - '2fa_i_have_them' => 'I stored them!', - 'warning_much_data' => '載入 :days 天的資料或會相當耗時。', - 'registered' => '您已成功註冊!', - 'Default asset account' => '預設資產帳戶', - 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.', - 'no_bill_pointer' => 'You seem to have no bills yet. You should create some on the bills-page. Bills can help you keep track of expenses.', - 'Savings account' => '儲蓄帳戶', - 'Credit card' => '信用卡', - 'source_accounts' => 'Source account|Source accounts', - 'destination_accounts' => 'Destination account|Destination accounts', - 'user_id_is' => '您的使用者 ID 是 :user', - 'field_supports_markdown' => '此欄位支援 Markdown 語法。', - 'need_more_help' => '如果您需要更多 Firefly III 的協助,請 於 GitHub 建立提問。', - 'reenable_intro_text' => 'You can also re-enable the introduction guidance.', - 'intro_boxes_after_refresh' => '當您重新整理頁面後,介紹框將會重新出現。', - 'show_all_no_filter' => '不以日期分組,顯示所有交易紀錄', - 'expenses_by_category' => '按分類的支出', - 'expenses_by_budget' => '按預算的支出', - 'income_by_category' => '按分類的收入', - 'expenses_by_asset_account' => '按資產帳戶的支出', - 'expenses_by_expense_account' => '按支出帳戶的支出', - 'cannot_redirect_to_account' => 'Firefly III 無法重新導向正確頁面,抱歉。', - 'sum_of_expenses' => '支出總和', - 'sum_of_income' => '收入總和', - 'liabilities' => '債務', - 'spent_in_specific_budget' => '預算「:budget」中的花費', - 'spent_in_specific_double' => 'Spent in account ":account"', - 'earned_in_specific_double' => 'Earned in account ":account"', - 'source_account' => '來源帳戶', - 'source_account_reconciliation' => 'You can\'t edit the source account of a reconciliation transaction.', - 'destination_account' => '目標帳戶', - 'destination_account_reconciliation' => 'You can\'t edit the destination account of a reconciliation transaction.', - 'sum_of_expenses_in_budget' => '預算「:budget」中的總花費', - 'left_in_budget_limit' => '依照預算的支出尚餘', - 'current_period' => '目前區間', - 'show_the_current_period_and_overview' => '顯示目前區間與概覽', - 'pref_languages_locale' => '英文以外的語言,須搭配作業系統內對應的地區資訊 (locale-information) 才能正常運作,否則貨幣資料、日期與金額或會格式有誤。', - 'budget_in_period' => 'All transactions for budget ":name" between :start and :end in :currency', - 'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency', - 'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.', - 'chart_account_in_period' => 'Chart for all transactions for account ":name" (:balance) between :start and :end', - 'chart_category_in_period' => '分類「:name」自 :start 至 :end 的所有交易圖表', - 'chart_category_all' => '分類「:name」的所有交易圖表', - 'clone_withdrawal' => '複製此提款', - 'clone_deposit' => '複製此存款', - 'clone_transfer' => '複製此轉帳', - 'multi_select_no_selection' => '未選取', - 'multi_select_select_all' => '選取全部', - 'multi_select_n_selected' => '選取', - 'multi_select_all_selected' => '全部選取', - 'multi_select_filter_placeholder' => '搜尋…', - 'intro_next_label' => '下一步', - 'intro_prev_label' => '上一步', - 'intro_skip_label' => '略過', - 'intro_done_label' => '完成', - 'between_dates_breadcrumb' => '自 :start 至 :end', - 'all_journals_without_budget' => '沒有預算的所有交易', - 'journals_without_budget' => '沒有預算的交易', - 'all_journals_without_category' => '沒有分類的所有交易', - 'journals_without_category' => '沒有分類的交易', - 'all_journals_for_account' => ':name 帳戶的所有交易', - 'chart_all_journals_for_account' => ':name 帳戶的所有交易圖表', - 'journals_in_period_for_account' => ':name 帳戶自 :start 至 :end 的所有交易', - 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', - 'transferred' => '已轉帳', - 'all_withdrawal' => '所有支出', - 'all_transactions' => '所有交易', - 'title_withdrawal_between' => '自 :start 至 :end 的所有支出', - 'all_deposit' => '所有收入', - 'title_deposit_between' => '自 :start 至 :end 的所有收入', - 'all_transfers' => '所有轉帳', - 'title_transfers_between' => '自 :start 至 :end 的所有轉帳', - 'all_transfer' => '所有轉帳', - 'all_journals_for_tag' => '標籤「:tag」的所有交易', - 'title_transfer_between' => '自 :start 至 :end 的所有轉帳', - 'all_journals_for_category' => '分類 :name 的所有交易', - 'all_journals_for_budget' => '預算 :name 的所有交易', - 'chart_all_journals_for_budget' => '預算 :name 的所有交易圖表', - 'journals_in_period_for_category' => '分類 :name 自 :start 至 :end 的所有交易', - 'journals_in_period_for_tag' => '標籤 :tag 自 :start 至 :end 的所有交易', - 'not_available_demo_user' => '此功能未開放予展示使用者。', - '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' => '伺服器組態無效', - 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', - 'quickswitch' => '快速切換', - 'sign_in_to_start' => '登入以開始您的連線階段', - 'sign_in' => '登入', - 'register_new_account' => '註冊新帳號', - 'forgot_my_password' => '我忘記了密碼', - 'problems_with_input' => '輸入有誤。', - 'reset_password' => '重設密碼', - 'button_reset_password' => '重設密碼', - 'reset_button' => '重設', - 'want_to_login' => '我想登入', - 'login_page_title' => '登入 Firefly III', - 'register_page_title' => '在 Firefly III 註冊', - 'forgot_pw_page_title' => '忘記您 Firefly III 的密碼', - 'reset_pw_page_title' => '重設您 Firefly III 的密碼', - 'cannot_reset_demo_user' => '您不能重設 展示使用者 的密碼。', - 'no_att_demo_user' => 'The demo user can\'t upload attachments.', - 'button_register' => '註冊帳號', - 'authorization' => '身份認證', - 'active_bills_only' => '僅限使用中帳單', - 'active_bills_only_total' => 'all active bills', - 'active_exp_bills_only' => 'active and expected bills only', - 'active_exp_bills_only_total' => 'all active expected bills only', - 'per_period_sum_1D' => 'Expected daily costs', - 'per_period_sum_1W' => 'Expected weekly costs', - 'per_period_sum_1M' => 'Expected monthly costs', - 'per_period_sum_3M' => 'Expected quarterly costs', - 'per_period_sum_6M' => 'Expected half-yearly costs', - 'per_period_sum_1Y' => 'Expected yearly costs', - 'average_per_bill' => '每張帳單的平均數', - 'expected_total' => '預期總數', - 'reconciliation_account_name' => ':name reconciliation (:currency)', - 'saved' => '已儲存', - 'advanced_options' => '進階選項', - 'advanced_options_explain' => 'Some pages in Firefly III have advanced options hidden behind this button. This page doesn\'t have anything fancy here, but do check out the others!', - 'here_be_dragons' => 'Hic sunt dracones', + 'close' => '關閉', + 'actions' => '操作', + 'edit' => '編輯', + 'delete' => '刪除', + 'split' => '分割', + 'single_split' => '拆分', + 'clone' => '複製', + 'clone_and_edit' => '複制並編輯', + 'confirm_action' => '確認', + 'last_seven_days' => '最近7天', + 'last_thirty_days' => '最近30天', + 'last_180_days' => '最近 180 天', + 'month_to_date' => '本月至今', + 'year_to_date' => '今年迄今為止', + 'YTD' => '本年至今', + 'welcome_back' => 'What\'s playing?', + 'everything' => '所有', + 'today' => '今天', + 'customRange' => '自訂範圍', + 'date_range' => '日期範圍', + 'apply' => '套用', + 'select_date' => '選擇日期..', + 'cancel' => '取消', + 'from' => '自', + 'to' => '至', + 'structure' => '結構', + 'help_translating' => '此說明尚欠奉中文版,要協助翻譯嗎?', + 'showEverything' => '全部顯示', + 'never' => '未有資料', + 'no_results_for_empty_search' => '您的搜尋空白,結果也是空白。', + 'removed_amount' => '已移除 :amount', + 'added_amount' => '已新增 :amount', + 'asset_account_role_help' => '選擇後如有額外選項,可稍後設定。', + 'Opening balance' => '初始餘額', + 'create_new_stuff' => '建立新內容', + 'new_withdrawal' => '新提款', + 'create_new_transaction' => '建立新交易', + 'sidebar_frontpage_create' => '建立', + 'new_transaction' => '新交易', + 'no_rules_for_bill' => '此帳單未設定相關的規則。', + 'go_to_asset_accounts' => '檢視您的資產帳戶', + 'go_to_budgets' => '前往您的預算', + 'go_to_withdrawals' => 'Go to your withdrawals', + 'clones_journal_x' => '這項交易是從":description" (#:id) 複制出來', + 'go_to_categories' => '前往您的分類', + 'go_to_bills' => '前往您的帳單', + 'go_to_expense_accounts' => '查看您的支出帳戶', + 'go_to_revenue_accounts' => '查看您的收入帳戶', + 'go_to_piggies' => '前往您的小豬撲滿', + 'new_deposit' => '新存款', + 'new_transfer' => '新轉帳', + 'new_transfers' => '新轉帳', + 'new_asset_account' => '新資產帳戶', + 'new_expense_account' => '新支出帳戶', + 'new_revenue_account' => '新收入帳戶', + 'new_liabilities_account' => '新債務', + 'new_budget' => '新預算', + 'new_bill' => '新帳單', + 'block_account_logout' => '您已被登出。被封鎖的帳號無法使用本網站,您是以有效的電子郵件地址註冊嗎?', + 'flash_success' => '成功!', + 'flash_info' => '訊息', + 'flash_warning' => '警告!', + 'flash_error' => '錯誤!', + 'flash_danger' => '危險!', + 'flash_info_multiple' => '有 1 個訊息|有 :count 個訊息', + 'flash_error_multiple' => '有 1 個錯誤|有 :count 個錯誤', + 'net_worth' => '淨值', + 'help_for_this_page' => '本頁說明', + 'help_for_this_page_body' => 'You can find more information about this page in the documentation.', + 'two_factor_welcome' => '您好!', + 'two_factor_enter_code' => '如要繼續,請輸入您的兩步驟驗證 (two factor authentication) 代碼,您的應用程式可為您產生。', + 'two_factor_code_here' => '在此輸入代碼', + 'two_factor_title' => '兩步驟驗證', + 'authenticate' => '驗證', + 'two_factor_forgot_title' => '遺失兩步驟驗證', + 'two_factor_forgot' => '啥兩步驟我忘了。', + 'two_factor_lost_header' => '遺失您的兩步驟驗證嗎?', + 'two_factor_lost_intro' => 'If you lost your backup codes as well, you have bad luck. This is not something you can fix from the web interface. You have two choices.', + 'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read :site_owner 要求重設您的兩步驟驗證。', + 'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.', + 'pref_two_factor_new_backup_codes' => 'Get new backup codes', + 'pref_two_factor_backup_code_count' => 'You have :count valid backup code.|You have :count valid backup codes.', + '2fa_i_have_them' => 'I stored them!', + 'warning_much_data' => '載入 :days 天的資料或會相當耗時。', + 'registered' => '您已成功註冊!', + 'Default asset account' => '預設資產帳戶', + 'no_budget_pointer' => 'You seem to have no budgets yet. You should create some on the budgets-page. Budgets can help you keep track of expenses.', + 'no_bill_pointer' => 'You seem to have no bills yet. You should create some on the bills-page. Bills can help you keep track of expenses.', + 'Savings account' => '儲蓄帳戶', + 'Credit card' => '信用卡', + 'source_accounts' => 'Source account|Source accounts', + 'destination_accounts' => 'Destination account|Destination accounts', + 'user_id_is' => '您的使用者 ID 是 :user', + 'field_supports_markdown' => '此欄位支援 Markdown 語法。', + 'need_more_help' => '如果您需要更多 Firefly III 的協助,請 於 GitHub 建立提問。', + 'reenable_intro_text' => 'You can also re-enable the introduction guidance.', + 'intro_boxes_after_refresh' => '當您重新整理頁面後,介紹框將會重新出現。', + 'show_all_no_filter' => '不以日期分組,顯示所有交易紀錄', + 'expenses_by_category' => '按分類的支出', + 'expenses_by_budget' => '按預算的支出', + 'income_by_category' => '按分類的收入', + 'expenses_by_asset_account' => '按資產帳戶的支出', + 'expenses_by_expense_account' => '按支出帳戶的支出', + 'cannot_redirect_to_account' => 'Firefly III 無法重新導向正確頁面,抱歉。', + 'sum_of_expenses' => '支出總和', + 'sum_of_income' => '收入總和', + 'liabilities' => '債務', + 'spent_in_specific_budget' => '預算「:budget」中的花費', + 'spent_in_specific_double' => '於帳戶 ":account" 花費了', + 'earned_in_specific_double' => '於帳戶 ":account" 賺取了', + 'source_account' => '來源帳戶', + 'source_account_reconciliation' => 'You can\'t edit the source account of a reconciliation transaction.', + 'destination_account' => '目標帳戶', + 'destination_account_reconciliation' => 'You can\'t edit the destination account of a reconciliation transaction.', + 'sum_of_expenses_in_budget' => '預算「:budget」中的總花費', + 'left_in_budget_limit' => '依照預算的支出尚餘', + 'current_period' => '目前區間', + 'show_the_current_period_and_overview' => '顯示目前區間與概覽', + 'pref_languages_locale' => '英文以外的語言,須搭配作業系統內對應的地區資訊 (locale-information) 才能正常運作,否則貨幣資料、日期與金額或會格式有誤。', + 'budget_in_period' => 'All transactions for budget ":name" between :start and :end in :currency', + 'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency', + 'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.', + 'chart_account_in_period' => 'Chart for all transactions for account ":name" (:balance) between :start and :end', + 'chart_category_in_period' => '分類「:name」自 :start 至 :end 的所有交易圖表', + 'chart_category_all' => '分類「:name」的所有交易圖表', + 'clone_withdrawal' => '複製此提款', + 'clone_deposit' => '複製此存款', + 'clone_transfer' => '複製此轉帳', + 'multi_select_no_selection' => '未選取', + 'multi_select_select_all' => '選取全部', + 'multi_select_n_selected' => '選取', + 'multi_select_all_selected' => '全部選取', + 'multi_select_filter_placeholder' => '搜尋…', + 'intro_next_label' => '下一步', + 'intro_prev_label' => '上一步', + 'intro_skip_label' => '略過', + 'intro_done_label' => '完成', + 'between_dates_breadcrumb' => '自 :start 至 :end', + 'all_journals_without_budget' => '沒有預算的所有交易', + 'journals_without_budget' => '沒有預算的交易', + 'all_journals_without_category' => '沒有分類的所有交易', + 'journals_without_category' => '沒有分類的交易', + 'all_journals_for_account' => ':name 帳戶的所有交易', + 'chart_all_journals_for_account' => ':name 帳戶的所有交易圖表', + 'journals_in_period_for_account' => ':name 帳戶自 :start 至 :end 的所有交易', + 'journals_in_period_for_account_js' => 'All transactions for account {title} between {start} and {end}', + 'transferred' => '已轉帳', + 'all_withdrawal' => '所有支出', + 'all_transactions' => '所有交易', + 'title_withdrawal_between' => '自 :start 至 :end 的所有支出', + 'all_deposit' => '所有收入', + 'title_deposit_between' => '自 :start 至 :end 的所有收入', + 'all_transfers' => '所有轉帳', + 'title_transfers_between' => '自 :start 至 :end 的所有轉帳', + 'all_transfer' => '所有轉帳', + 'all_journals_for_tag' => '標籤「:tag」的所有交易', + 'title_transfer_between' => '自 :start 至 :end 的所有轉帳', + 'all_journals_for_category' => '分類 :name 的所有交易', + 'all_journals_for_budget' => '預算 :name 的所有交易', + 'chart_all_journals_for_budget' => '預算 :name 的所有交易圖表', + 'journals_in_period_for_category' => '分類 :name 自 :start 至 :end 的所有交易', + 'journals_in_period_for_tag' => '標籤 :tag 自 :start 至 :end 的所有交易', + 'not_available_demo_user' => '此功能未開放予展示使用者。', + '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' => '伺服器組態無效', + 'invalid_locale_settings' => 'Firefly III is unable to format monetary amounts because your server is missing the required packages. There are instructions how to do this.', + 'quickswitch' => '快速切換', + 'sign_in_to_start' => '登入以開始您的連線階段', + 'sign_in' => '登入', + 'register_new_account' => '註冊新帳號', + 'forgot_my_password' => '我忘記了密碼', + 'problems_with_input' => '輸入有誤。', + 'reset_password' => '重設密碼', + 'button_reset_password' => '重設密碼', + 'reset_button' => '重設', + 'want_to_login' => '我想登入', + 'login_page_title' => '登入 Firefly III', + 'register_page_title' => '在 Firefly III 註冊', + 'forgot_pw_page_title' => '忘記您 Firefly III 的密碼', + 'reset_pw_page_title' => '重設您 Firefly III 的密碼', + 'cannot_reset_demo_user' => '您不能重設 展示使用者 的密碼。', + 'no_att_demo_user' => 'The demo user can\'t upload attachments.', + 'button_register' => '註冊帳號', + 'authorization' => '身份認證', + 'active_bills_only' => '僅限使用中帳單', + 'active_bills_only_total' => 'all active bills', + 'active_exp_bills_only' => 'active and expected bills only', + 'active_exp_bills_only_total' => 'all active expected bills only', + 'per_period_sum_1D' => '預期每日開支', + 'per_period_sum_1W' => '預期每週開支', + 'per_period_sum_1M' => '預期每月開支', + 'per_period_sum_3M' => '預期每季度開支', + 'per_period_sum_6M' => '預期每半年開支', + 'per_period_sum_1Y' => '預期每年開支', + 'average_per_bill' => '每張帳單的平均數', + 'expected_total' => '預期總數', + 'reconciliation_account_name' => ':name reconciliation (:currency)', + 'saved' => '已儲存', + 'advanced_options' => '進階選項', + 'advanced_options_explain' => 'Some pages in Firefly III have advanced options hidden behind this button. This page doesn\'t have anything fancy here, but do check out the others!', + 'here_be_dragons' => 'Hic sunt dracones', // Webhooks - 'webhooks' => 'Webhooks', - 'webhooks_breadcrumb' => 'Webhooks', - 'no_webhook_messages' => 'There are no webhook messages', - 'webhook_trigger_STORE_TRANSACTION' => 'After transaction creation', - 'webhook_trigger_UPDATE_TRANSACTION' => 'After transaction update', - 'webhook_trigger_DESTROY_TRANSACTION' => 'After transaction delete', - 'webhook_response_TRANSACTIONS' => 'Transaction details', - 'webhook_response_ACCOUNTS' => 'Account details', - 'webhook_response_none_NONE' => 'No details', - 'webhook_delivery_JSON' => 'JSON', - 'inspect' => 'Inspect', - 'create_new_webhook' => 'Create new webhook', - 'webhooks_create_breadcrumb' => 'Create new webhook', - 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', - 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', - 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', - 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', - 'stored_new_webhook' => 'Stored new webhook ":title"', - 'delete_webhook' => 'Delete webhook', - 'deleted_webhook' => 'Deleted webhook ":title"', - 'edit_webhook' => 'Edit webhook ":title"', - 'updated_webhook' => 'Updated webhook ":title"', - 'edit_webhook_js' => 'Edit webhook "{title}"', - 'show_webhook' => 'Webhook ":title"', - 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', - 'webhook_messages' => 'Webhook message', - 'view_message' => 'View message', - 'view_attempts' => 'View failed attempts', - 'message_content_title' => 'Webhook message content', - 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', - 'attempt_content_title' => 'Webhook attempts', - 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', - 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', - 'webhook_attempt_at' => 'Attempt at {moment}', - 'logs' => 'Logs', - 'response' => 'Response', - 'visit_webhook_url' => 'Visit webhook URL', - 'reset_webhook_secret' => 'Reset webhook secret', - 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', - 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', + 'webhooks' => 'Webhooks', + 'webhooks_breadcrumb' => 'Webhooks', + 'webhooks_menu_disabled' => 'disabled', + 'no_webhook_messages' => 'There are no webhook messages', + 'webhook_trigger_STORE_TRANSACTION' => '在交易建立後', + 'webhook_trigger_UPDATE_TRANSACTION' => '在交易更新後', + 'webhook_trigger_DESTROY_TRANSACTION' => '在交易刪除後', + 'webhook_response_TRANSACTIONS' => '交易詳情', + 'webhook_response_ACCOUNTS' => '帳號詳情', + 'webhook_response_none_NONE' => 'No details', + 'webhook_delivery_JSON' => 'JSON', + 'inspect' => '檢查', + 'create_new_webhook' => 'Create new webhook', + 'webhooks_create_breadcrumb' => 'Create new webhook', + 'webhook_trigger_form_help' => 'Indicate on what event the webhook will trigger', + 'webhook_response_form_help' => 'Indicate what the webhook must submit to the URL.', + 'webhook_delivery_form_help' => 'Which format the webhook must deliver data in.', + 'webhook_active_form_help' => 'The webhook must be active or it won\'t be called.', + 'stored_new_webhook' => 'Stored new webhook ":title"', + 'delete_webhook' => 'Delete webhook', + 'deleted_webhook' => 'Deleted webhook ":title"', + 'edit_webhook' => 'Edit webhook ":title"', + 'updated_webhook' => 'Updated webhook ":title"', + 'edit_webhook_js' => 'Edit webhook "{title}"', + 'show_webhook' => 'Webhook ":title"', + 'webhook_was_triggered' => 'The webhook was triggered on the indicated transaction. Please wait for results to appear.', + 'webhook_messages' => 'Webhook message', + 'view_message' => '查看訊息', + 'view_attempts' => 'View failed attempts', + 'message_content_title' => 'Webhook message content', + 'message_content_help' => 'This is the content of the message that was sent (or tried) using this webhook.', + 'attempt_content_title' => 'Webhook attempts', + 'attempt_content_help' => 'These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.', + 'no_attempts' => 'There are no unsuccessful attempts. That\'s a good thing!', + 'webhook_attempt_at' => 'Attempt at {moment}', + 'logs' => '紀錄日誌', + 'response' => '回覆', + 'visit_webhook_url' => 'Visit webhook URL', + 'reset_webhook_secret' => 'Reset webhook secret', + 'webhook_stored_link' => 'Webhook #{ID} ("{title}") has been stored.', + 'webhook_updated_link' => 'Webhook #{ID} ("{title}") has been updated.', // API access - 'authorization_request' => 'Firefly III :version 版授權請求', - 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', - 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', - 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', - 'scopes_will_be_able' => '此應用程式可以:', - 'button_authorize' => '授權', - 'none_in_select_list' => '(空)', - 'no_piggy_bank' => '(no piggy bank)', - 'name_in_currency' => ':name 於 :currency', - 'paid_in_currency' => '以 :currency 支付', - 'unpaid_in_currency' => '未以 :currency 支付', - 'is_alpha_warning' => 'You are running an ALPHA version. Be wary of bugs and issues.', - 'is_beta_warning' => 'You are running an BETA version. Be wary of bugs and issues.', - 'all_destination_accounts' => 'Destination accounts', - 'all_source_accounts' => '來源帳戶', - 'back_to_index' => 'Back to the index', - 'cant_logout_guard' => 'Firefly III can\'t log you out.', - 'internal_reference' => 'Internal reference', + 'authorization_request' => 'Firefly III :version 版授權請求', + 'authorization_request_intro' => 'Application ":client" is requesting permission to access your financial administration. Would you like to authorize :client to access these records?', + 'authorization_request_site' => 'You will be redirected to :url which will then be able to access your Firefly III data.', + 'authorization_request_invalid' => 'This access request is invalid. Please never follow this link again.', + 'scopes_will_be_able' => '此應用程式可以:', + 'button_authorize' => '授權', + 'none_in_select_list' => '(空)', + 'no_piggy_bank' => '(無小豬撲滿)', + 'name_in_currency' => ':name 於 :currency', + 'paid_in_currency' => '以 :currency 支付', + 'unpaid_in_currency' => '未以 :currency 支付', + 'is_alpha_warning' => 'You are running an ALPHA version. Be wary of bugs and issues.', + 'is_beta_warning' => 'You are running an BETA version. Be wary of bugs and issues.', + 'all_destination_accounts' => '目標帳戶', + 'all_source_accounts' => '來源帳戶', + 'back_to_index' => 'Back to the index', + 'cant_logout_guard' => 'Firefly III can\'t log you out.', + 'internal_reference' => 'Internal reference', // check for updates: - 'update_check_title' => '檢查更新', - 'admin_update_check_title' => '自動檢查更新', - 'admin_update_check_explain' => 'Firefly III can check for updates automatically. When you enable this setting, it will contact the Firefly III update server to see if a new version of Firefly III is available. When it is, you will get a notification. You can test this notification using the button on the right. Please indicate below if you want Firefly III to check for updates.', - 'check_for_updates_permission' => 'Firefly III 可以自動檢查更新,但需要您先許可。請前往 系統管理 表示您是否想啟用此功能。', - 'updates_ask_me_later' => '稍後再詢問', - 'updates_do_not_check' => '不檢查更新', - 'updates_enable_check' => '啟用更新檢查', - 'admin_update_check_now_title' => '立刻檢查更新', - 'admin_update_check_now_explain' => '如果您按下此按鈕,Firefly III 將會檢查您現在的版本是否為最新版。', - 'check_for_updates_button' => '馬上檢查!', - 'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.', - 'update_version_beta' => 'This version is a BETA version. You may run into issues.', - 'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.', - 'update_current_version_alert' => 'You are running :version, which is the latest available release.', - 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', - 'update_check_error' => 'An error occurred while checking for updates: :error', - 'unknown_error' => 'Unknown error. Sorry about that.', - 'just_new_release' => 'A new version is available! Version :version was released :date. This release is very fresh. Wait a few days for the new release to stabilize.', - 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', - 'admin_update_channel_title' => 'Update channel', - 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.', - 'update_channel_stable' => 'Stable. Everything should work as expected.', - 'update_channel_beta' => 'Beta. New features but things may be broken.', - 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', + 'update_check_title' => '檢查更新', + 'admin_update_check_title' => '自動檢查更新', + 'admin_update_check_explain' => 'Firefly III can check for updates automatically. When you enable this setting, it will contact the Firefly III update server to see if a new version of Firefly III is available. When it is, you will get a notification. You can test this notification using the button on the right. Please indicate below if you want Firefly III to check for updates.', + 'check_for_updates_permission' => 'Firefly III 可以自動檢查更新,但需要您先許可。請前往 系統管理 表示您是否想啟用此功能。', + 'updates_ask_me_later' => '稍後再詢問', + 'updates_do_not_check' => '不檢查更新', + 'updates_enable_check' => '啟用更新檢查', + 'admin_update_check_now_title' => '立刻檢查更新', + 'admin_update_check_now_explain' => '如果您按下此按鈕,Firefly III 將會檢查您現在的版本是否為最新版。', + 'check_for_updates_button' => '馬上檢查!', + 'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.', + 'update_version_beta' => 'This version is a BETA version. You may run into issues.', + 'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.', + 'update_current_dev_older' => 'You are running development release ":version", which is older than the latest release :new_version. Please update!', + 'update_current_dev_newer' => 'You are running development release ":version", which is newer than the latest release :new_version.', + 'update_current_version_alert' => 'You are running :version, which is the latest available release.', + 'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.', + 'update_check_error' => 'An error occurred while checking for updates: :error', + 'unknown_error' => 'Unknown error. Sorry about that.', + 'disabled_but_check' => 'You disabled update checking. So don\'t forget to check for updates yourself every now and then. Thank you!', + 'admin_update_channel_title' => '更新頻道', + 'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.', + 'update_channel_stable' => 'Stable. Everything should work as expected.', + 'update_channel_beta' => 'Beta. New features but things may be broken.', + 'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.', // search - 'search' => '搜尋', - 'search_query' => '查詢', - 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', - 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', - 'search_for_query' => 'Firefly III 正搜尋包含所有這些字詞的交易::query', - 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', + 'search' => '搜尋', + 'search_query' => '查詢', + 'search_found_transactions' => 'Firefly III found :count transaction in :time seconds.|Firefly III found :count transactions in :time seconds.', + 'search_found_more_transactions' => 'Firefly III found more than :count transactions in :time seconds.', + 'search_for_query' => 'Firefly III 正搜尋包含所有這些字詞的交易::query', + 'invalid_operators_list' => 'These search parameters are not valid and have been ignored.', // old -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -349,12 +351,11 @@ return [ * */ - - 'search_modifier_date_on' => 'Transaction date is ":value"', + 'search_modifier_date_on' => '交易日期為 ":value"', 'search_modifier_not_date_on' => 'Transaction date is not ":value"', 'search_modifier_reconciled' => 'Transaction is reconciled', 'search_modifier_not_reconciled' => 'Transaction is not reconciled', - 'search_modifier_id' => 'Transaction ID is ":value"', + 'search_modifier_id' => '交易ID為 ":value"', 'search_modifier_not_id' => 'Transaction ID is not ":value"', 'search_modifier_date_before' => 'Transaction date is before or on ":value"', 'search_modifier_date_after' => 'Transaction date is after or on ":value"', @@ -468,6 +469,10 @@ return [ 'search_modifier_transaction_type' => 'Transaction type is ":value"', 'search_modifier_not_transaction_type' => 'Transaction type is not ":value"', 'search_modifier_tag_is' => 'Tag is ":value"', + 'search_modifier_tag_contains' => 'Tag contains ":value"', + 'search_modifier_not_tag_contains' => 'Tag does not contain ":value"', + 'search_modifier_tag_ends' => 'Tag ends with ":value"', + 'search_modifier_tag_starts' => 'Tag starts with ":value"', 'search_modifier_not_tag_is' => 'No tag is ":value"', 'search_modifier_date_on_year' => 'Transaction is in year ":value"', 'search_modifier_not_date_on_year' => 'Transaction is not in year ":value"', @@ -482,7 +487,6 @@ return [ '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"', - // new 'search_modifier_tag_is_not' => 'No tag is ":value"', 'search_modifier_not_tag_is_not' => 'Tag is ":value"', @@ -710,7 +714,7 @@ return [ '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.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -721,7 +725,6 @@ return [ * */ - // END 'modifiers_applies_are' => '搜尋也套用以下條件:', 'general_search_error' => 'An error occurred while searching. Please check the log files for more information.', @@ -747,6 +750,8 @@ return [ // rules 'is_not_rule_trigger' => 'Not', 'cannot_fire_inactive_rules' => 'You cannot execute inactive rules.', + 'show_triggers' => 'Show triggers', + 'show_actions' => 'Show actions', 'rules' => '規則', 'rule_name' => '規則名稱', 'rule_triggers' => '規則觸發於', @@ -814,7 +819,6 @@ return [ 'rule_trigger_update_journal' => '當更新一筆交易', 'rule_trigger_user_action' => '使用者動作為 ":trigger_value"', - // OLD values (remove non-doubles later): 'rule_trigger_source_account_starts_choice' => 'Source account name starts with..', 'rule_trigger_source_account_starts' => 'Source account name starts with ":trigger_value"', @@ -892,6 +896,12 @@ return [ 'rule_trigger_budget_is' => '預算為 ":trigger_value"', 'rule_trigger_tag_is_choice' => 'Any tag is..', 'rule_trigger_tag_is' => 'Any tag is ":trigger_value"', + 'rule_trigger_tag_contains_choice' => 'Any tag contains..', + 'rule_trigger_tag_contains' => 'Any tag contains ":trigger_value"', + 'rule_trigger_tag_ends_choice' => 'Any tag ends with..', + 'rule_trigger_tag_ends' => 'Any tag ends with ":trigger_value"', + 'rule_trigger_tag_starts_choice' => 'Any tag starts with..', + 'rule_trigger_tag_starts' => 'Any tag starts with ":trigger_value"', 'rule_trigger_currency_is_choice' => '轉帳貨幣為…', 'rule_trigger_currency_is' => '轉帳貨幣為 ":trigger_value"', 'rule_trigger_foreign_currency_is_choice' => 'Transaction foreign currency is..', @@ -1193,7 +1203,7 @@ return [ 'rule_trigger_not_exists' => 'Transaction does not exist', 'rule_trigger_not_has_attachments' => 'Transaction has no attachments', 'rule_trigger_not_has_any_category' => 'Transaction has no category', - 'rule_trigger_not_has_any_budget' => 'Transaction has no category', + 'rule_trigger_not_has_any_budget' => 'Transaction has no budget', 'rule_trigger_not_has_any_bill' => 'Transaction has no bill', 'rule_trigger_not_has_any_tag' => 'Transaction has no tags', 'rule_trigger_not_any_notes' => 'Transaction has no notes', @@ -1209,7 +1219,7 @@ return [ 'rule_trigger_not_destination_is_cash' => 'Destination account is not a cash account', 'rule_trigger_not_account_is_cash' => 'Neither account is a cash account', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1220,7 +1230,6 @@ return [ * */ - // actions // set, clear, add, remove, append/prepend 'rule_action_delete_transaction_choice' => 'DELETE transaction(!)', @@ -1277,6 +1286,8 @@ return [ 'rule_action_append_notes_to_descr' => 'Append notes to description', 'rule_action_move_descr_to_notes' => 'Replace notes with description', 'rule_action_move_notes_to_descr' => 'Replace description with notes', + 'rule_action_set_destination_to_cash_choice' => 'Set destination account to (cash)', + 'rule_action_set_source_to_cash_choice' => 'Set source account to (cash)', 'rulegroup_for_bills_title' => '供帳單的規則群組', 'rulegroup_for_bills_description' => 'A special rule group for all the rules that involve bills.', 'rule_for_bill_title' => 'Auto-generated rule for bill ":name"', @@ -1286,252 +1297,253 @@ return [ 'new_rule_for_bill_title' => '供帳單 ":name" 的規則', 'new_rule_for_bill_description' => '此規則標記給帳單 ":name" 的交易。', - 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', - 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', + 'new_rule_for_journal_title' => 'Rule based on transaction ":description"', + 'new_rule_for_journal_description' => 'This rule is based on transaction ":description". It will match transactions that are exactly the same.', // tags - 'store_new_tag' => '儲存新標籤', - 'update_tag' => '更新標籤', - 'no_location_set' => '沒有設定位置。', - 'meta_data' => '中繼資料', - 'location' => '位置', - 'without_date' => '不含日期', - 'result' => '結果', - 'sums_apply_to_range' => '所有總和均套用至所選範圍', - 'mapbox_api_key' => '若要使用地圖,請自 Mapbox 獲得一組 API 金鑰。開啟您的 .env 檔案並於 MAPBOX_API_KEY= 句後輸入金鑰代碼。', - 'press_object_location' => 'Right click or long press to set the object\'s location.', - 'clear_location' => '清除位置', - 'delete_all_selected_tags' => 'Delete all selected tags', - 'select_tags_to_delete' => 'Don\'t forget to select some tags.', - 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', - 'create_rule_from_transaction' => 'Create rule based on transaction', - 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', - + 'store_new_tag' => '儲存新標籤', + 'update_tag' => '更新標籤', + 'no_location_set' => '沒有設定位置。', + 'meta_data' => '中繼資料', + 'location' => '位置', + 'location_first_split' => 'The location for this transaction can be set on the first split of this transaction.', + 'without_date' => '不含日期', + 'result' => '結果', + 'sums_apply_to_range' => '所有總和均套用至所選範圍', + 'mapbox_api_key' => '若要使用地圖,請自 Mapbox 獲得一組 API 金鑰。開啟您的 .env 檔案並於 MAPBOX_API_KEY= 句後輸入金鑰代碼。', + 'press_object_location' => 'Right click or long press to set the object\'s location.', + 'click_tap_location' => 'Click or tap the map to add a location', + 'clear_location' => '清除位置', + 'delete_all_selected_tags' => 'Delete all selected tags', + 'select_tags_to_delete' => 'Don\'t forget to select some tags.', + 'deleted_x_tags' => 'Deleted :count tag.|Deleted :count tags.', + 'create_rule_from_transaction' => 'Create rule based on transaction', + 'create_recurring_from_transaction' => 'Create recurring transaction based on transaction', // preferences - 'dark_mode_option_browser' => 'Let your browser decide', - 'dark_mode_option_light' => 'Always light', - 'dark_mode_option_dark' => 'Always dark', - 'equal_to_language' => '(equal to language)', - 'dark_mode_preference' => 'Dark mode', - 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', - 'pref_home_screen_accounts' => '主畫面帳戶', - 'pref_home_screen_accounts_help' => '哪些帳戶應該顯示在主頁面上?', - 'pref_view_range' => '檢視範圍', - 'pref_view_range_help' => '部分圖表在此區間為自動群組化,您的預算亦將在此區間群組化,您傾向的區間為何?', - 'pref_1D' => '1 天', - 'pref_1W' => '1 週', - 'pref_1M' => '1 個月', - 'pref_3M' => '3個月 (季)', - 'pref_6M' => '6個月', - 'pref_1Y' => '1年', - 'pref_last365' => 'Last year', - 'pref_last90' => 'Last 90 days', - 'pref_last30' => 'Last 30 days', - 'pref_last7' => 'Last 7 days', - 'pref_YTD' => 'Year to date', - 'pref_QTD' => 'Quarter to date', - 'pref_MTD' => 'Month to date', - 'pref_languages' => '語言', - 'pref_locale' => 'Locale settings', - 'pref_languages_help' => 'Firefly III 支援多種語言,您想顯示哪一種?', - 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', - 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', - 'pref_custom_fiscal_year' => '財政年度設定', - 'pref_custom_fiscal_year_label' => '已啟用', - 'pref_custom_fiscal_year_help' => '有些國家/地區採用的會計年度有別於每年 1 月 1 日至 12 月 31 日,您可開啟此功能並指定財政年度的起迄日。', - 'pref_fiscal_year_start_label' => '財政年度開始日期', - 'pref_two_factor_auth' => '兩步驟驗證', - 'pref_two_factor_auth_help' => '啟用兩步驟驗證 (亦稱為雙重驗證) 可為您的帳號增添一重安全保障,登入時需憑您腦海的記憶 (密碼) 加上一個手持的憑證 (認證碼),認證碼由手機應用程式產生,例如 Authy 或 Google Authenticator。', - 'pref_enable_two_factor_auth' => '啟用兩步驟驗證', - 'pref_two_factor_auth_disabled' => '兩步驟驗證碼已移除並停用', - 'pref_two_factor_auth_remove_it' => '別忘記在您的驗證應用程式上刪除此帳號!', - 'pref_two_factor_auth_code' => '驗證碼', - 'pref_two_factor_auth_code_help' => '使用您手機上的應用程式 (如 Authy 或 Google Authenticator) 掃描 QR 碼並輸入自動產生之代碼。', - 'pref_two_factor_auth_reset_code' => '重設認證碼', - 'pref_two_factor_auth_disable_2fa' => '停用兩步驟驗證', - '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', - '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', - '2fa_already_enabled' => '2-step verification is already enabled.', - 'wrong_mfa_code' => 'This MFA code is not valid.', - 'pref_save_settings' => '儲存設定', - 'saved_preferences' => '偏好設定已儲存!', - 'preferences_general' => '一般', - 'preferences_frontpage' => '主畫面', - 'preferences_security' => '安全性', - 'preferences_layout' => '版面配置', - 'preferences_notifications' => 'Notifications', - 'pref_home_show_deposits' => '在主畫面顯示存款', - 'pref_home_show_deposits_info' => '主畫面已顯示您的支出帳戶,是否亦顯示您的收入帳戶?', - 'pref_home_do_show_deposits' => '是,要顯示', - 'successful_count' => ':count 項成功', - 'list_page_size_title' => '頁面大小', - 'list_page_size_help' => '任何物品 (帳戶、交易…等) 清單在每頁至多顯示此數量', - 'list_page_size_label' => '頁面大小', - 'between_dates' => '(:start 與 :end)', - 'pref_optional_fields_transaction' => '交易的選填欄位', - 'pref_optional_fields_transaction_help' => '建立新交易時,預設不會啟用全部欄位 (以免版面空間不敷應用)。您可在下方啟用您覺得有用的欄位。當然,若欄位本身停用卻已填入資料,則不論設定如何均會顯示。', - 'optional_tj_date_fields' => '日期欄位', - 'optional_tj_other_fields' => 'Other fields', - 'optional_tj_attachment_fields' => '附加檔案欄位', - 'pref_optional_tj_interest_date' => '利率日期', - 'pref_optional_tj_book_date' => '登記日期', - 'pref_optional_tj_process_date' => '處理日期', - 'pref_optional_tj_due_date' => '截止日期', - 'pref_optional_tj_payment_date' => '付款日期', - 'pref_optional_tj_invoice_date' => '發票日期', - 'pref_optional_tj_internal_reference' => '內部參照', - 'pref_optional_tj_notes' => '備註', - 'pref_optional_tj_attachments' => '附加檔案', - 'pref_optional_tj_external_url' => 'External URL', - 'pref_optional_tj_location' => 'Location', - 'pref_optional_tj_links' => 'Transaction links', - 'optional_field_meta_dates' => '日期', - 'optional_field_meta_business' => '商務', - 'optional_field_attachments' => '附加檔案', - 'optional_field_meta_data' => '可選中繼資料', - 'external_url' => 'External URL', - 'pref_notification_bill_reminder' => 'Reminder about expiring bills', - 'pref_notification_new_access_token' => 'Alert when a new API access token is created', - 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', - 'pref_notification_user_login' => 'Alert when you login from a new location', - 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', - 'pref_notifications' => 'Notifications', - 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', - 'slack_webhook_url' => 'Slack Webhook URL', - 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', - 'slack_url_label' => 'Slack "incoming webhook" URL', + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', + 'equal_to_language' => '(equal to language)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', + 'pref_home_screen_accounts' => '主畫面帳戶', + 'pref_home_screen_accounts_help' => '哪些帳戶應該顯示在主頁面上?', + 'pref_view_range' => '檢視範圍', + 'pref_view_range_help' => '部分圖表在此區間為自動群組化,您的預算亦將在此區間群組化,您傾向的區間為何?', + 'pref_1D' => '1 天', + 'pref_1W' => '1 週', + 'pref_1M' => '1 個月', + 'pref_3M' => '3個月 (季)', + 'pref_6M' => '6個月', + 'pref_1Y' => '1年', + 'pref_last365' => 'Last year', + 'pref_last90' => 'Last 90 days', + 'pref_last30' => 'Last 30 days', + 'pref_last7' => 'Last 7 days', + 'pref_YTD' => 'Year to date', + 'pref_QTD' => 'Quarter to date', + 'pref_MTD' => 'Month to date', + 'pref_languages' => '語言', + 'pref_locale' => 'Locale settings', + 'pref_languages_help' => 'Firefly III 支援多種語言,您想顯示哪一種?', + 'pref_locale_help' => 'Firefly III allows you to set other local settings, like how currencies, numbers and dates are formatted. Entries in this list may not be supported by your system. Firefly III doesn\'t have the correct date settings for every locale; contact me for improvements.', + 'pref_locale_no_demo' => 'This feature won\'t work for the demo user.', + 'pref_custom_fiscal_year' => '財政年度設定', + 'pref_custom_fiscal_year_label' => '已啟用', + 'pref_custom_fiscal_year_help' => '有些國家/地區採用的會計年度有別於每年 1 月 1 日至 12 月 31 日,您可開啟此功能並指定財政年度的起迄日。', + 'pref_fiscal_year_start_label' => '財政年度開始日期', + 'pref_two_factor_auth' => '兩步驟驗證', + 'pref_two_factor_auth_help' => '啟用兩步驟驗證 (亦稱為雙重驗證) 可為您的帳號增添一重安全保障,登入時需憑您腦海的記憶 (密碼) 加上一個手持的憑證 (認證碼),認證碼由手機應用程式產生,例如 Authy 或 Google Authenticator。', + 'pref_enable_two_factor_auth' => '啟用兩步驟驗證', + 'pref_two_factor_auth_disabled' => '兩步驟驗證碼已移除並停用', + 'pref_two_factor_auth_remove_it' => '別忘記在您的驗證應用程式上刪除此帳號!', + 'pref_two_factor_auth_code' => '驗證碼', + 'pref_two_factor_auth_code_help' => '使用您手機上的應用程式 (如 Authy 或 Google Authenticator) 掃描 QR 碼並輸入自動產生之代碼。', + 'pref_two_factor_auth_reset_code' => '重設認證碼', + 'pref_two_factor_auth_disable_2fa' => '停用兩步驟驗證', + '2fa_use_secret_instead' => 'If you cannot scan the QR code, feel free to use the secret instead: :secret.', + '2fa_backup_codes' => 'Store these backup codes for access in case you lose your device.', + '2fa_already_enabled' => '2-step verification is already enabled.', + 'wrong_mfa_code' => 'This MFA code is not valid.', + 'pref_save_settings' => '儲存設定', + 'saved_preferences' => '偏好設定已儲存!', + 'preferences_general' => '一般', + 'preferences_frontpage' => '主畫面', + 'preferences_security' => '安全性', + 'preferences_layout' => '版面配置', + 'preferences_notifications' => 'Notifications', + 'pref_home_show_deposits' => '在主畫面顯示存款', + 'pref_home_show_deposits_info' => '主畫面已顯示您的支出帳戶,是否亦顯示您的收入帳戶?', + 'pref_home_do_show_deposits' => '是,要顯示', + 'successful_count' => ':count 項成功', + 'list_page_size_title' => '頁面大小', + 'list_page_size_help' => '任何物品 (帳戶、交易…等) 清單在每頁至多顯示此數量', + 'list_page_size_label' => '頁面大小', + 'between_dates' => '(:start 與 :end)', + 'pref_optional_fields_transaction' => '交易的選填欄位', + 'pref_optional_fields_transaction_help' => '建立新交易時,預設不會啟用全部欄位 (以免版面空間不敷應用)。您可在下方啟用您覺得有用的欄位。當然,若欄位本身停用卻已填入資料,則不論設定如何均會顯示。', + 'optional_tj_date_fields' => '日期欄位', + 'optional_tj_other_fields' => 'Other fields', + 'optional_tj_attachment_fields' => '附加檔案欄位', + 'pref_optional_tj_interest_date' => '利率日期', + 'pref_optional_tj_book_date' => '登記日期', + 'pref_optional_tj_process_date' => '處理日期', + 'pref_optional_tj_due_date' => '截止日期', + 'pref_optional_tj_payment_date' => '付款日期', + 'pref_optional_tj_invoice_date' => '發票日期', + 'pref_optional_tj_internal_reference' => '內部參照', + 'pref_optional_tj_notes' => '備註', + 'pref_optional_tj_attachments' => '附加檔案', + 'pref_optional_tj_external_url' => 'External URL', + 'pref_optional_tj_location' => 'Location', + 'pref_optional_tj_links' => 'Transaction links', + 'optional_field_meta_dates' => '日期', + 'optional_field_meta_business' => '商務', + 'optional_field_attachments' => '附加檔案', + 'optional_field_meta_data' => '可選中繼資料', + 'external_url' => 'External URL', + 'pref_notification_bill_reminder' => 'Reminder about expiring bills', + 'pref_notification_new_access_token' => 'Alert when a new API access token is created', + 'pref_notification_transaction_creation' => 'Alert when a transaction is created automatically', + 'pref_notification_user_login' => 'Alert when you login from a new location', + 'pref_notification_rule_action_failures' => 'Alert when rule actions fail to execute (Slack or Discord only)', + 'pref_notifications' => 'Notifications', + 'pref_notifications_help' => 'Indicate if these are notifications you would like to get. Some notifications may contain sensitive financial information.', + 'slack_webhook_url' => 'Slack Webhook URL', + 'slack_webhook_url_help' => 'If you want Firefly III to notify you using Slack, enter the webhook URL here. Otherwise leave the field blank. If you are an admin, you need to set this URL in the administration as well.', + 'slack_url_label' => 'Slack "incoming webhook" URL', // Financial administrations - 'administration_index' => 'Financial administration', - 'administrations_index_menu' => 'Financial administration(s)', + 'administration_index' => 'Financial administration', + 'administrations_index_menu' => 'Financial administration(s)', // profile: - 'purge_data_title' => 'Purge data from Firefly III', - 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', - 'delete_stuff_header' => 'Delete and purge data', - 'purge_all_data' => 'Purge all deleted records', - 'purge_data' => 'Purge data', - 'purged_all_records' => 'All deleted records have been purged.', - 'delete_data_title' => 'Delete data from Firefly III', - 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', - 'other_sessions_logged_out' => 'All your other sessions have been logged out.', - 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', - 'delete_all_unused_accounts' => 'Delete unused accounts', - 'deleted_all_unused_accounts' => 'All unused accounts are deleted', - 'delete_all_budgets' => 'Delete ALL your budgets', - 'delete_all_categories' => 'Delete ALL your categories', - 'delete_all_tags' => 'Delete ALL your tags', - 'delete_all_bills' => 'Delete ALL your bills', - 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', - 'delete_all_rules' => 'Delete ALL your rules', - 'delete_all_recurring' => 'Delete ALL your recurring transactions', - 'delete_all_object_groups' => 'Delete ALL your object groups', - 'delete_all_accounts' => 'Delete ALL your accounts', - 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', - 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', - 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', - 'delete_all_liabilities' => 'Delete ALL your liabilities', - 'delete_all_transactions' => 'Delete ALL your transactions', - 'delete_all_withdrawals' => 'Delete ALL your withdrawals', - 'delete_all_deposits' => 'Delete ALL your deposits', - 'delete_all_transfers' => 'Delete ALL your transfers', - 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', - 'deleted_all_budgets' => 'All budgets have been deleted', - 'deleted_all_categories' => 'All categories have been deleted', - 'deleted_all_tags' => 'All tags have been deleted', - 'deleted_all_bills' => 'All bills have been deleted', - 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', - 'deleted_all_rules' => 'All rules and rule groups have been deleted', - 'deleted_all_object_groups' => 'All groups have been deleted', - 'deleted_all_accounts' => 'All accounts have been deleted', - 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', - 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', - 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', - 'deleted_all_liabilities' => 'All liabilities have been deleted', - 'deleted_all_transactions' => 'All transactions have been deleted', - 'deleted_all_withdrawals' => 'All withdrawals have been deleted', - 'deleted_all_deposits' => 'All deposits have been deleted', - 'deleted_all_transfers' => 'All transfers have been deleted', - 'deleted_all_recurring' => 'All recurring transactions have been deleted', - 'change_your_password' => '更改您的密碼', - 'delete_account' => '移除帳號', - 'current_password' => '目前密碼', - 'new_password' => '新密碼', - 'new_password_again' => '新密碼 (再輸入一次)', - 'delete_your_account' => '刪除您的帳號', - 'delete_your_account_help' => '刪除您的帳號,將一併刪除任何帳戶、交易,一切 您可能儲存在 Firefly III 上的資料,都將一去不復返。', - 'delete_your_account_password' => '輸入您的密碼以繼續。', - 'password' => '密碼', - 'are_you_sure' => '您確定嗎?您無法還原此操作。', - 'delete_account_button' => '*刪除* 您的帳號', - 'invalid_current_password' => '無效的目前密碼!', - 'password_changed' => '已變更密碼!', - 'should_change' => '建議您變更密碼。', - 'invalid_password' => '無效密碼!', - 'what_is_pw_security' => '何謂 "驗證密碼安全"?', - 'secure_pw_title' => '如何選擇安全的密碼', - 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', - 'secure_pw_history' => '翻閱新聞,屢屢可見有網站遺失使用者密碼,駭客與竊賊利用這些密碼企圖竊取個人資料,這些資訊是有價的。', - 'secure_pw_ff' => '您在網路上都用同一個密碼走天涯嗎?如果一個網站遺失您的密碼,駭客就可存取您所有的資料。Firefly III 倚賴您選擇一個強而獨特的密碼以保護您的財務紀錄。', - 'secure_pw_check_box' => '為此,Firefly III 可協助您檢查選用的密碼過去是否曾被竊取。若然如此,Firefly III 建議您避免使用此密碼。', - 'secure_pw_working_title' => '這是如何運作?', - 'secure_pw_working' => '若您勾選此方塊,Firefly III 將以您的密碼產生一個 SHA1 湊合,並將首 5 個字元傳送到 Troy Hunt 的網站 比對一個清單,避免您使用一些已知不安全的密碼,遵從最近 NIST Special Publication 有關此課題的建議。', - 'secure_pw_should' => '我該勾選此方塊嗎?', - 'secure_pw_long_password' => '是,好以驗證您的密碼是安全的。', - 'command_line_token' => '指令列權杖', - 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', - 'regenerate_command_line_token' => '重新產生指令列權杖', - 'token_regenerated' => '產生了新的指令列權杖', - 'change_your_email' => '更改您的電子郵件地址', - 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', - 'email_changed_logout' => '在驗證您的電子郵件地址之前,您將無法登入。', - 'login_with_new_email' => '現在,您可以使用新的電子郵件地址登入。', - 'login_with_old_email' => '現在,您可以再次使用舊的電子郵件地址登入。', - 'login_provider_local_only' => '當藉由 ":login_provider" 驗證時,此動作不可用。', - 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', - 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', - 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", - 'oauth' => 'OAuth', - 'profile_oauth_clients' => 'OAuth Clients', - 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', - 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', - 'profile_oauth_clients_header' => 'Clients', - 'profile_oauth_client_id' => 'Client ID', - 'profile_oauth_client_name' => 'Name', - 'profile_oauth_client_secret' => 'Secret', - 'profile_oauth_create_new_client' => 'Create New Client', - 'profile_oauth_create_client' => 'Create Client', - 'profile_oauth_edit_client' => 'Edit Client', - 'profile_oauth_name_help' => 'Something your users will recognize and trust.', - 'profile_oauth_redirect_url' => 'Redirect URL', - 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', - 'profile_authorized_apps' => 'Authorized applications', - 'profile_authorized_clients' => 'Authorized clients', - 'profile_scopes' => 'Scopes', - 'profile_revoke' => 'Revoke', - 'profile_oauth_client_secret_title' => 'Client Secret', - 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', - 'profile_personal_access_tokens' => 'Personal Access Tokens', - 'profile_personal_access_token' => 'Personal Access Token', - 'profile_oauth_confidential' => 'Confidential', - 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', - 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', - 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', - 'profile_create_new_token' => 'Create new token', - 'profile_create_token' => 'Create token', - 'profile_create' => 'Create', - 'profile_save_changes' => 'Save changes', - 'profile_whoops' => 'Whoops!', - 'profile_something_wrong' => 'Something went wrong!', - 'profile_try_again' => 'Something went wrong. Please try again.', - 'amounts' => 'Amounts', - 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', - 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', - 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', - 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', + 'purge_data_title' => 'Purge data from Firefly III', + 'purge_data_expl' => '"Purging" means "deleting that which is already deleted". In normal circumstances, Firefly III deletes nothing permanently. It just hides it. The button below deletes all of these previously "deleted" records FOREVER.', + 'delete_stuff_header' => 'Delete and purge data', + 'purge_all_data' => 'Purge all deleted records', + 'purge_data' => 'Purge data', + 'purged_all_records' => 'All deleted records have been purged.', + 'delete_data_title' => 'Delete data from Firefly III', + 'permanent_delete_stuff' => 'You can delete stuff from Firefly III. Using the buttons below means that your items will be removed from view and hidden. There is no undo-button for this, but the items may remain in the database where you can salvage them if necessary.', + 'other_sessions_logged_out' => 'All your other sessions have been logged out.', + 'delete_unused_accounts' => 'Deleting unused accounts will clean your auto-complete lists.', + 'delete_all_unused_accounts' => 'Delete unused accounts', + 'deleted_all_unused_accounts' => 'All unused accounts are deleted', + 'delete_all_budgets' => 'Delete ALL your budgets', + 'delete_all_categories' => 'Delete ALL your categories', + 'delete_all_tags' => 'Delete ALL your tags', + 'delete_all_bills' => 'Delete ALL your bills', + 'delete_all_piggy_banks' => 'Delete ALL your piggy banks', + 'delete_all_rules' => 'Delete ALL your rules', + 'delete_all_recurring' => 'Delete ALL your recurring transactions', + 'delete_all_object_groups' => 'Delete ALL your object groups', + 'delete_all_accounts' => 'Delete ALL your accounts', + 'delete_all_asset_accounts' => 'Delete ALL your asset accounts', + 'delete_all_expense_accounts' => 'Delete ALL your expense accounts', + 'delete_all_revenue_accounts' => 'Delete ALL your revenue accounts', + 'delete_all_liabilities' => 'Delete ALL your liabilities', + 'delete_all_transactions' => 'Delete ALL your transactions', + 'delete_all_withdrawals' => 'Delete ALL your withdrawals', + 'delete_all_deposits' => 'Delete ALL your deposits', + 'delete_all_transfers' => 'Delete ALL your transfers', + 'also_delete_transactions' => 'Deleting accounts will also delete ALL associated withdrawals, deposits and transfers!', + 'deleted_all_budgets' => 'All budgets have been deleted', + 'deleted_all_categories' => 'All categories have been deleted', + 'deleted_all_tags' => 'All tags have been deleted', + 'deleted_all_bills' => 'All bills have been deleted', + 'deleted_all_piggy_banks' => 'All piggy banks have been deleted', + 'deleted_all_rules' => 'All rules and rule groups have been deleted', + 'deleted_all_object_groups' => 'All groups have been deleted', + 'deleted_all_accounts' => 'All accounts have been deleted', + 'deleted_all_asset_accounts' => 'All asset accounts have been deleted', + 'deleted_all_expense_accounts' => 'All expense accounts have been deleted', + 'deleted_all_revenue_accounts' => 'All revenue accounts have been deleted', + 'deleted_all_liabilities' => 'All liabilities have been deleted', + 'deleted_all_transactions' => 'All transactions have been deleted', + 'deleted_all_withdrawals' => 'All withdrawals have been deleted', + 'deleted_all_deposits' => 'All deposits have been deleted', + 'deleted_all_transfers' => 'All transfers have been deleted', + 'deleted_all_recurring' => 'All recurring transactions have been deleted', + 'change_your_password' => '更改您的密碼', + 'delete_account' => '移除帳號', + 'current_password' => '目前密碼', + 'new_password' => '新密碼', + 'new_password_again' => '新密碼 (再輸入一次)', + 'delete_your_account' => '刪除您的帳號', + 'delete_your_account_help' => '刪除您的帳號,將一併刪除任何帳戶、交易,一切 您可能儲存在 Firefly III 上的資料,都將一去不復返。', + 'delete_your_account_password' => '輸入您的密碼以繼續。', + 'password' => '密碼', + 'are_you_sure' => '您確定嗎?您無法還原此操作。', + 'delete_account_button' => '*刪除* 您的帳號', + 'invalid_current_password' => '無效的目前密碼!', + 'password_changed' => '已變更密碼!', + 'should_change' => '建議您變更密碼。', + 'invalid_password' => '無效密碼!', + 'what_is_pw_security' => '何謂 "驗證密碼安全"?', + 'secure_pw_title' => '如何選擇安全的密碼', + 'forgot_password_response' => 'Thank you. If an account exists with this email address, you will find instructions in your inbox.', + 'secure_pw_history' => '翻閱新聞,屢屢可見有網站遺失使用者密碼,駭客與竊賊利用這些密碼企圖竊取個人資料,這些資訊是有價的。', + 'secure_pw_ff' => '您在網路上都用同一個密碼走天涯嗎?如果一個網站遺失您的密碼,駭客就可存取您所有的資料。Firefly III 倚賴您選擇一個強而獨特的密碼以保護您的財務紀錄。', + 'secure_pw_check_box' => '為此,Firefly III 可協助您檢查選用的密碼過去是否曾被竊取。若然如此,Firefly III 建議您避免使用此密碼。', + 'secure_pw_working_title' => '這是如何運作?', + 'secure_pw_working' => '若您勾選此方塊,Firefly III 將以您的密碼產生一個 SHA1 湊合,並將首 5 個字元傳送到 Troy Hunt 的網站 比對一個清單,避免您使用一些已知不安全的密碼,遵從最近 NIST Special Publication 有關此課題的建議。', + 'secure_pw_should' => '我該勾選此方塊嗎?', + 'secure_pw_long_password' => '是,好以驗證您的密碼是安全的。', + 'command_line_token' => '指令列權杖', + 'explain_command_line_token' => 'You need this token to perform command line options, such as exporting data. Without it, that sensitive command will not work. Do not share your command line token. Nobody will ask you for this token, not even me. If you fear you lost this, or when you\'re paranoid, regenerate this token using the button.', + 'regenerate_command_line_token' => '重新產生指令列權杖', + 'token_regenerated' => '產生了新的指令列權杖', + 'change_your_email' => '更改您的電子郵件地址', + 'email_verification' => 'An email message will be sent to your old AND new email address. For security purposes, you will not be able to login until you verify your new email address. If you are unsure if your Firefly III installation is capable of sending email, please do not use this feature. If you are an administrator, you can test this in the Administration.', + 'email_changed_logout' => '在驗證您的電子郵件地址之前,您將無法登入。', + 'login_with_new_email' => '現在,您可以使用新的電子郵件地址登入。', + 'login_with_old_email' => '現在,您可以再次使用舊的電子郵件地址登入。', + 'login_provider_local_only' => '當藉由 ":login_provider" 驗證時,此動作不可用。', + 'external_user_mgt_disabled' => 'This action is not available when Firefly III isn\'t responsible for user management or authentication handling.', + 'external_auth_disabled' => 'This action is not available when Firefly III isn\'t responsible for authentication handling.', + 'delete_local_info_only' => "Because Firefly III isn't responsible for user management or authentication handling, this function will only delete local Firefly III information.", + 'oauth' => 'OAuth', + 'profile_oauth_clients' => 'OAuth Clients', + 'profile_oauth_no_clients' => 'You have not created any OAuth clients.', + 'profile_oauth_clients_external_auth' => 'If you\'re using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.', + 'profile_oauth_clients_header' => 'Clients', + 'profile_oauth_client_id' => 'Client ID', + 'profile_oauth_client_name' => 'Name', + 'profile_oauth_client_secret' => 'Secret', + 'profile_oauth_create_new_client' => 'Create New Client', + 'profile_oauth_create_client' => 'Create Client', + 'profile_oauth_edit_client' => 'Edit Client', + 'profile_oauth_name_help' => 'Something your users will recognize and trust.', + 'profile_oauth_redirect_url' => 'Redirect URL', + 'profile_oauth_redirect_url_help' => 'Your application\'s authorization callback URL.', + 'profile_authorized_apps' => 'Authorized applications', + 'profile_authorized_clients' => 'Authorized clients', + 'profile_scopes' => 'Scopes', + 'profile_revoke' => 'Revoke', + 'profile_oauth_client_secret_title' => 'Client Secret', + 'profile_oauth_client_secret_expl' => 'Here is your new client secret. This is the only time it will be shown so don\'t lose it! You may now use this secret to make API requests.', + 'profile_personal_access_tokens' => 'Personal Access Tokens', + 'profile_personal_access_token' => 'Personal Access Token', + 'profile_oauth_confidential' => 'Confidential', + 'profile_oauth_confidential_help' => 'Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.', + 'profile_personal_access_token_explanation' => 'Here is your new personal access token. This is the only time it will be shown so don\'t lose it! You may now use this token to make API requests.', + 'profile_no_personal_access_token' => 'You have not created any personal access tokens.', + 'profile_create_new_token' => 'Create new token', + 'profile_create_token' => 'Create token', + 'profile_create' => 'Create', + 'profile_save_changes' => 'Save changes', + 'profile_whoops' => 'Whoops!', + 'profile_something_wrong' => 'Something went wrong!', + 'profile_try_again' => 'Something went wrong. Please try again.', + 'amounts' => 'Amounts', + 'multi_account_warning_unknown' => 'Depending on the type of transaction you create, the source and/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.', + 'multi_account_warning_withdrawal' => 'Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.', + 'multi_account_warning_deposit' => 'Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.', + 'multi_account_warning_transfer' => 'Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1542,396 +1554,402 @@ return [ * */ - // export data: - 'export_data_title' => 'Export data from Firefly III', - 'export_data_menu' => 'Export data', - 'export_data_bc' => 'Export data from Firefly III', - 'export_data_main_title' => 'Export data from Firefly III', - 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', - 'export_data_all_transactions' => 'Export all transactions', - 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', + 'export_data_title' => 'Export data from Firefly III', + 'export_data_menu' => 'Export data', + 'export_data_bc' => 'Export data from Firefly III', + 'export_data_main_title' => 'Export data from Firefly III', + 'export_data_expl' => 'This link allows you to export all transactions + meta data from Firefly III. Please refer to the help (top right (?)-icon) for more information about the process.', + 'export_data_all_transactions' => 'Export all transactions', + 'export_data_advanced_expl' => 'If you need a more advanced or specific type of export, read the help on how to use the console command php artisan help firefly-iii:export-data.', // attachments - 'nr_of_attachments' => '̇1 個附加檔案|:count 個附加檔案', - 'attachments' => '附加檔案', - 'edit_attachment' => '編輯附加檔案 ":name"', - 'update_attachment' => '更新附加檔案', - 'delete_attachment' => '刪除附加檔案 ":name"', - 'attachment_deleted' => '已刪除附加檔案 ":name"', - 'liabilities_deleted' => 'Deleted liability ":name"', - 'attachment_updated' => '已更新附加檔案 ":name', - 'upload_max_file_size' => '最大檔案大小: :size', - 'list_all_attachments' => '全部附加檔案清單', + 'nr_of_attachments' => '̇1 個附加檔案|:count 個附加檔案', + 'attachments' => '附加檔案', + 'edit_attachment' => '編輯附加檔案 ":name"', + 'update_attachment' => '更新附加檔案', + 'delete_attachment' => '刪除附加檔案 ":name"', + 'attachment_deleted' => '已刪除附加檔案 ":name"', + 'liabilities_deleted' => 'Deleted liability ":name"', + 'attachment_updated' => '已更新附加檔案 ":name', + 'upload_max_file_size' => '最大檔案大小: :size', + 'list_all_attachments' => '全部附加檔案清單', // transaction index - 'title_expenses' => '支出', - 'title_withdrawal' => '支出', - 'title_revenue' => '收入', - 'title_deposit' => '收入', - 'title_transfer' => '轉帳', - 'title_transfers' => '轉帳', - 'submission_options' => 'Submission options', - 'apply_rules_checkbox' => 'Apply rules', - 'fire_webhooks_checkbox' => 'Fire webhooks', + 'is_reconciled_fields_dropped' => 'Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).', + 'title_expenses' => '支出', + 'title_withdrawal' => '支出', + 'title_revenue' => '收入', + 'title_deposit' => '收入', + 'title_transfer' => '轉帳', + 'title_transfers' => '轉帳', + 'submission_options' => 'Submission options', + 'apply_rules_checkbox' => 'Apply rules', + 'fire_webhooks_checkbox' => 'Fire webhooks', + 'select_source_account' => 'Please select or type a valid source account name', + 'select_dest_account' => 'Please select or type a valid destination account name', // convert stuff: - 'convert_is_already_type_Withdrawal' => '此交易已是一筆提款', - 'convert_is_already_type_Deposit' => '此交易已是一筆存款', - 'convert_is_already_type_Transfer' => '此交易已是一筆轉帳', - 'convert_to_Withdrawal' => '轉換 ":description" 成一筆提款', - 'convert_to_Deposit' => '轉換 ":description" 成一筆存款', - 'convert_to_Transfer' => '轉換 ":description" 成一筆轉帳', - 'convert_options_WithdrawalDeposit' => '將一筆提款轉為存款', - 'convert_options_WithdrawalTransfer' => '將一筆提款轉為轉帳', - 'convert_options_DepositTransfer' => '將一筆存款轉為轉帳', - 'convert_options_DepositWithdrawal' => '將一筆存款轉為提款', - 'convert_options_TransferWithdrawal' => '將一筆轉帳轉為提款', - 'convert_options_TransferDeposit' => '將一筆轉帳轉為存款', - 'convert_Withdrawal_to_deposit' => '將此提款轉為存款', - 'convert_Withdrawal_to_transfer' => '將此提款轉為轉帳', - 'convert_Deposit_to_withdrawal' => '將此存款轉為提款', - 'convert_Deposit_to_transfer' => '將此存款轉為轉帳', - 'convert_Transfer_to_deposit' => '將此轉帳轉為存款', - 'convert_Transfer_to_withdrawal' => '將此轉帳轉為提款', - 'convert_please_set_revenue_source' => '請選擇金錢來源的收入帳戶', - 'convert_please_set_asset_destination' => '請選擇金錢要去資產帳戶', - 'convert_please_set_expense_destination' => '請選擇金錢要去的支出帳戶', - 'convert_please_set_asset_source' => '請選擇金錢來源的資產帳戶', - 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', - 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', - 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', - 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', - 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', - 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', - 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', - 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', - 'converted_to_Withdrawal' => '此交易已被轉換為一筆提款', - 'converted_to_Deposit' => '此交易已被轉換為一筆存款', - 'converted_to_Transfer' => '此交易已被轉換為一筆轉帳', - 'invalid_convert_selection' => '您選擇的帳戶已用於此交易或不存在', - 'source_or_dest_invalid' => '找不到正確的交易細節,無法轉換。', - 'convert_to_withdrawal' => '轉換成提款', - 'convert_to_deposit' => '轉換成存款', - 'convert_to_transfer' => '轉換成轉帳', + 'convert_is_already_type_Withdrawal' => '此交易已是一筆提款', + 'convert_is_already_type_Deposit' => '此交易已是一筆存款', + 'convert_is_already_type_Transfer' => '此交易已是一筆轉帳', + 'convert_to_Withdrawal' => '轉換 ":description" 成一筆提款', + 'convert_to_Deposit' => '轉換 ":description" 成一筆存款', + 'convert_to_Transfer' => '轉換 ":description" 成一筆轉帳', + 'convert_options_WithdrawalDeposit' => '將一筆提款轉為存款', + 'convert_options_WithdrawalTransfer' => '將一筆提款轉為轉帳', + 'convert_options_DepositTransfer' => '將一筆存款轉為轉帳', + 'convert_options_DepositWithdrawal' => '將一筆存款轉為提款', + 'convert_options_TransferWithdrawal' => '將一筆轉帳轉為提款', + 'convert_options_TransferDeposit' => '將一筆轉帳轉為存款', + 'convert_Withdrawal_to_deposit' => '將此提款轉為存款', + 'convert_Withdrawal_to_transfer' => '將此提款轉為轉帳', + 'convert_Deposit_to_withdrawal' => '將此存款轉為提款', + 'convert_Deposit_to_transfer' => '將此存款轉為轉帳', + 'convert_Transfer_to_deposit' => '將此轉帳轉為存款', + 'convert_Transfer_to_withdrawal' => '將此轉帳轉為提款', + 'convert_please_set_revenue_source' => '請選擇金錢來源的收入帳戶', + 'convert_please_set_asset_destination' => '請選擇金錢要去資產帳戶', + 'convert_please_set_expense_destination' => '請選擇金錢要去的支出帳戶', + 'convert_please_set_asset_source' => '請選擇金錢來源的資產帳戶', + 'convert_expl_w_d' => 'When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination account, instead of being withdrawn from it.|When converting from a withdrawal to a deposit, the money will be deposited into the displayed destination accounts, instead of being withdrawn from them.', + 'convert_expl_w_t' => 'When converting a withdrawal into a transfer, the money will be transferred away from the source account into other asset or liability account instead of being spent on the original expense account.|When converting a withdrawal into a transfer, the money will be transferred away from the source accounts into other asset or liability accounts instead of being spent on the original expense accounts.', + 'convert_expl_d_w' => 'When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source account, instead of being deposited into it.|When converting a deposit into a withdrawal, the money will be withdrawn from the displayed source accounts, instead of being deposited into them.', + 'convert_expl_d_t' => 'When you convert a deposit into a transfer, the money will be deposited into the listed destination account from any of your asset or liability account.|When you convert a deposit into a transfer, the money will be deposited into the listed destination accounts from any of your asset or liability accounts.', + 'convert_expl_t_w' => 'When you convert a transfer into a withdrawal, the money will be spent on the destination account you set here, instead of being transferred away.|When you convert a transfer into a withdrawal, the money will be spent on the destination accounts you set here, instead of being transferred away.', + 'convert_expl_t_d' => 'When you convert a transfer into a deposit, the money will be deposited into the destination account you see here, instead of being transferred into it.|When you convert a transfer into a deposit, the money will be deposited into the destination accounts you see here, instead of being transferred into them.', + 'convert_select_sources' => 'To complete the conversion, please set the new source account below.|To complete the conversion, please set the new source accounts below.', + 'convert_select_destinations' => 'To complete the conversion, please select the new destination account below.|To complete the conversion, please select the new destination accounts below.', + 'converted_to_Withdrawal' => '此交易已被轉換為一筆提款', + 'converted_to_Deposit' => '此交易已被轉換為一筆存款', + 'converted_to_Transfer' => '此交易已被轉換為一筆轉帳', + 'invalid_convert_selection' => '您選擇的帳戶已用於此交易或不存在', + 'source_or_dest_invalid' => '找不到正確的交易細節,無法轉換。', + 'convert_to_withdrawal' => '轉換成提款', + 'convert_to_deposit' => '轉換成存款', + 'convert_to_transfer' => '轉換成轉帳', // create new stuff: - 'create_new_withdrawal' => '建立新提款', - 'create_new_deposit' => '建立新存款', - 'create_new_transfer' => '建立新轉帳', - 'create_new_asset' => '建立新資產帳戶', - 'create_new_liabilities' => 'Create new liability', - 'create_new_expense' => '建立新支出帳戶', - 'create_new_revenue' => '建立新收入帳戶', - 'create_new_piggy_bank' => '建立新小豬撲滿', - 'create_new_bill' => '建立新帳單', - 'create_new_subscription' => 'Create new subscription', - 'create_new_rule' => 'Create new rule', + 'create_new_withdrawal' => '建立新提款', + 'create_new_deposit' => '建立新存款', + 'create_new_transfer' => '建立新轉帳', + 'create_new_asset' => '建立新資產帳戶', + 'create_new_liabilities' => 'Create new liability', + 'create_new_expense' => '建立新支出帳戶', + 'create_new_revenue' => '建立新收入帳戶', + 'create_new_piggy_bank' => '建立新小豬撲滿', + 'create_new_bill' => '建立新帳單', + 'create_new_subscription' => 'Create new subscription', + 'create_new_rule' => 'Create new rule', // currencies: - 'create_currency' => '建立新貨幣', - 'store_currency' => '儲存新貨幣', - 'update_currency' => '更新貨幣', - 'new_default_currency' => ':name 現已為預設貨幣', - 'cannot_delete_currency' => '因為仍在使用中,無法刪除 :name 。', - 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', - 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', - 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', - 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', - 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', - 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', - 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', - 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', - 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', - 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', - 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', - 'deleted_currency' => ':name 貨幣已刪除', - 'created_currency' => ':name 貨幣已建立', - 'could_not_store_currency' => '無法儲存新貨幣', - 'updated_currency' => ':name 貨幣已更新', - 'ask_site_owner' => '請要求 :owner 新增、刪除或編輯貨幣。', - 'currencies_intro' => 'Firefly III 支援多種貨幣,您可在此設定並啟用。', - 'make_default_currency' => '設為預設', - 'default_currency' => '預設', - 'currency_is_disabled' => '已停用', - 'enable_currency' => '啟用', - 'disable_currency' => '停用', - 'currencies_default_disabled' => '大多數的貨幣均預設為停用,如欲使用,請先啟用。', - 'currency_is_now_enabled' => '貨幣 ":name" 已被啟用', - 'currency_is_now_disabled' => '貨幣 ":name" 已被停用', + 'create_currency' => '建立新貨幣', + 'store_currency' => '儲存新貨幣', + 'update_currency' => '更新貨幣', + 'new_default_currency' => '":name" is now the default currency.', + 'default_currency_failed' => 'Could not make ":name" the default currency. Please check the logs.', + 'cannot_delete_currency' => '因為仍在使用中,無法刪除 :name 。', + 'cannot_delete_fallback_currency' => ':name is the system fallback currency and can\'t be deleted.', + 'cannot_disable_currency_journals' => 'Cannot disable :name because transactions are still using it.', + 'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.', + 'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.', + 'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.', + 'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.', + 'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.', + 'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.', + 'cannot_disable_currency_current_default' => 'Cannot disable :name because it is the current default currency.', + 'cannot_disable_currency_system_fallback' => 'Cannot disable :name because it is the system default currency.', + 'disable_EUR_side_effects' => 'The Euro is the system\'s emergency fallback currency. Disabling it may have unintended side-effects and may void your warranty.', + 'deleted_currency' => ':name 貨幣已刪除', + 'created_currency' => ':name 貨幣已建立', + 'could_not_store_currency' => '無法儲存新貨幣', + 'updated_currency' => ':name 貨幣已更新', + 'ask_site_owner' => '請要求 :owner 新增、刪除或編輯貨幣。', + 'currencies_intro' => 'Firefly III 支援多種貨幣,您可在此設定並啟用。', + 'make_default_currency' => '設為預設', + 'default_currency' => '預設', + 'currency_is_disabled' => '已停用', + 'enable_currency' => '啟用', + 'disable_currency' => '停用', + 'currencies_default_disabled' => '大多數的貨幣均預設為停用,如欲使用,請先啟用。', + 'currency_is_now_enabled' => '貨幣 ":name" 已被啟用', + 'could_not_enable_currency' => 'Could not enable currency ":name". Please review the logs.', + 'currency_is_now_disabled' => '貨幣 ":name" 已被停用', + 'could_not_disable_currency' => 'Could not disable currency ":name". Perhaps it is still in use?', // forms: - 'mandatoryFields' => '必要欄位', - 'optionalFields' => '選填欄位', - 'options' => '選項', + 'mandatoryFields' => '必要欄位', + 'optionalFields' => '選填欄位', + 'options' => '選項', // budgets: - 'daily_budgets' => 'Daily budgets', - 'weekly_budgets' => 'Weekly budgets', - 'monthly_budgets' => 'Monthly budgets', - 'quarterly_budgets' => 'Quarterly budgets', - 'half_year_budgets' => 'Half-yearly budgets', - 'yearly_budgets' => 'Yearly budgets', - 'other_budgets' => 'Custom timed budgets', - 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', - 'total_available_budget' => 'Total available budget (between :start and :end)', - 'total_available_budget_in_currency' => 'Total available budget in :currency', - 'see_below' => 'see below', - 'create_new_budget' => '建立新預算', - 'store_new_budget' => '儲存新預算', - 'stored_new_budget' => '已儲存新預算 ":name"', - 'available_between' => '自 :start 至 :end 間可用', - 'transactionsWithoutBudget' => '無預算支出', - 'transactions_no_budget' => '自 :start 至 :end 的無預算支出', - 'spent_between' => 'Already spent between :start and :end', - 'set_available_amount' => 'Set available amount', - 'update_available_amount' => 'Update available amount', - 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', - 'createBudget' => '新預算', - 'invalid_currency' => 'This is an invalid currency', - 'invalid_amount' => 'Please enter an amount', - 'set_ab' => 'The available budget amount has been set', - 'updated_ab' => 'The available budget amount has been updated', - 'deleted_ab' => 'The available budget amount has been deleted', - 'deleted_bl' => 'The budgeted amount has been removed', - 'alt_currency_ab_create' => 'Set the available budget in another currency', - 'bl_create_btn' => 'Set budget in another currency', - 'inactiveBudgets' => '未使用預算', - 'without_budget_between' => '自 :start 至 :end 無預算的交易', - 'delete_budget' => '刪除預算 ":name"', - 'deleted_budget' => '已刪除預算 ":name"', - 'edit_budget' => '編輯預算 ":name"', - 'updated_budget' => '預算 ":name" 已更新', - 'update_amount' => '更新金額', - 'update_budget' => '更新預算', - 'update_budget_amount_range' => '更新 (預期) 自 :start 至 :end 的可用金額', - 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', - 'set_budget_limit' => 'Set budgeted amount', - 'budget_period_navigator' => '期間導覽', - 'info_on_available_amount' => '我有甚麼可用?', - 'available_amount_indication' => '使用這些金額以獲得您總預算可能為何的指標', - 'suggested' => '建議', - 'average_between' => '自 :start 至 :end 的平均', - 'transferred_in' => '轉帳 (轉入)', - 'transferred_away' => '轉帳 (轉出)', - 'auto_budget_none' => 'No auto-budget', - 'auto_budget_reset' => 'Set a fixed amount every period', - 'auto_budget_rollover' => 'Add an amount every period', - 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', - 'auto_budget_period_daily' => 'Daily', - 'auto_budget_period_weekly' => 'Weekly', - 'auto_budget_period_monthly' => 'Monthly', - 'auto_budget_period_quarterly' => 'Quarterly', - 'auto_budget_period_half_year' => 'Every half year', - 'auto_budget_period_yearly' => 'Yearly', - 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', - 'auto_budget_reset_icon' => 'This budget will be set periodically', - 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', - 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', - 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', + 'daily_budgets' => 'Daily budgets', + 'weekly_budgets' => 'Weekly budgets', + 'monthly_budgets' => 'Monthly budgets', + 'quarterly_budgets' => 'Quarterly budgets', + 'half_year_budgets' => 'Half-yearly budgets', + 'yearly_budgets' => 'Yearly budgets', + 'other_budgets' => 'Custom timed budgets', + 'budget_limit_not_in_range' => 'This amount applies from :start to :end:', + 'total_available_budget' => 'Total available budget (between :start and :end)', + 'total_available_budget_in_currency' => 'Total available budget in :currency', + 'see_below' => 'see below', + 'create_new_budget' => '建立新預算', + 'store_new_budget' => '儲存新預算', + 'stored_new_budget' => '已儲存新預算 ":name"', + 'available_between' => '自 :start 至 :end 間可用', + 'transactionsWithoutBudget' => '無預算支出', + 'transactions_no_budget' => '自 :start 至 :end 的無預算支出', + 'spent_between' => 'Already spent between :start and :end', + 'spent_between_left' => 'Spent :spent between :start and :end, leaving :left.', + 'set_available_amount' => 'Set available amount', + 'update_available_amount' => 'Update available amount', + 'ab_basic_modal_explain' => 'Use this form to indicate how much you expect to be able to budget (in total, in :currency) in the indicated period.', + 'createBudget' => '新預算', + 'invalid_currency' => 'This is an invalid currency', + 'invalid_amount' => 'Please enter an amount', + 'set_ab' => 'The available budget amount has been set', + 'updated_ab' => 'The available budget amount has been updated', + 'deleted_ab' => 'The available budget amount has been deleted', + 'deleted_bl' => 'The budgeted amount has been removed', + 'alt_currency_ab_create' => 'Set the available budget in another currency', + 'bl_create_btn' => 'Set budget in another currency', + 'inactiveBudgets' => '未使用預算', + 'without_budget_between' => '自 :start 至 :end 無預算的交易', + 'delete_budget' => '刪除預算 ":name"', + 'deleted_budget' => '已刪除預算 ":name"', + 'edit_budget' => '編輯預算 ":name"', + 'updated_budget' => '預算 ":name" 已更新', + 'update_amount' => '更新金額', + 'update_budget' => '更新預算', + 'update_budget_amount_range' => '更新 (預期) 自 :start 至 :end 的可用金額', + 'set_budget_limit_title' => 'Set budgeted amount for budget :budget between :start and :end', + 'set_budget_limit' => 'Set budgeted amount', + 'budget_period_navigator' => '期間導覽', + 'info_on_available_amount' => '我有甚麼可用?', + 'available_amount_indication' => '使用這些金額以獲得您總預算可能為何的指標', + 'suggested' => '建議', + 'average_between' => '自 :start 至 :end 的平均', + 'transferred_in' => '轉帳 (轉入)', + 'transferred_away' => '轉帳 (轉出)', + 'auto_budget_none' => 'No auto-budget', + 'auto_budget_reset' => 'Set a fixed amount every period', + 'auto_budget_rollover' => 'Add an amount every period', + 'auto_budget_adjusted' => 'Add an amount every period and correct for overspending', + 'auto_budget_period_daily' => 'Daily', + 'auto_budget_period_weekly' => 'Weekly', + 'auto_budget_period_monthly' => 'Monthly', + 'auto_budget_period_quarterly' => 'Quarterly', + 'auto_budget_period_half_year' => 'Every half year', + 'auto_budget_period_yearly' => 'Yearly', + 'auto_budget_help' => 'You can read more about this feature in the help. Click the top-right (?) icon.', + 'auto_budget_reset_icon' => 'This budget will be set periodically', + 'auto_budget_rollover_icon' => 'The budget amount will increase periodically', + 'auto_budget_adjusted_icon' => 'The budget amount will increase periodically and will correct for overspending', + 'remove_budgeted_amount' => 'Remove budgeted amount in :currency', // bills: - 'subscription' => 'Subscription', - 'not_expected_period' => 'Not expected this period', - 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', - 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', - 'not_or_not_yet' => 'Not (yet)', - 'visit_bill' => 'Visit bill ":name" at Firefly III', - 'match_between_amounts' => '帳單配合自 :low 至 :high 的交易。', - 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', - 'bill_related_rules' => '與此帳單相關的規則', - 'repeats' => '重複', - 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', - 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', - 'bill_end_index_line' => 'This bill ends on :date', - 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', - 'connected_journals' => '已連接交易', - 'auto_match_on' => '由 Firefly III 自動配對', - 'auto_match_off' => '不由 Firefly III 自動配對', - 'next_expected_match' => '下一個預期配對', - 'delete_bill' => '刪除帳單 ":name"', - 'deleted_bill' => '已刪除帳單 ":name"', - 'edit_bill' => '編輯帳單 ":name"', - 'more' => '更多', - 'rescan_old' => '再次於所有交易執行規則', - 'update_bill' => '更新帳單', - 'updated_bill' => '已更新帳單 ":name"', - 'store_new_bill' => '儲存新帳單', - 'stored_new_bill' => '已儲存新帳單 ":name"', - 'cannot_scan_inactive_bill' => '未啟用的帳單無法被掃描。', - 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', - 'average_bill_amount_year' => '平均帳單數 (:year)', - 'average_bill_amount_overall' => '平均帳單數 (總體)', - 'bill_is_active' => '帳單為啟用狀態', - 'bill_expected_between' => '期待自 :start 至 :end', - 'bill_will_automatch' => '帳單將自動鏈結至相符的交易', - 'skips_over' => '略過', - 'bill_store_error' => '儲存您的新帳單時發生錯誤,請檢查日誌檔', - 'list_inactive_rule' => '未啟用的規則', - 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', - 'bill_expected_date' => 'Expected :date', - 'bill_expected_date_js' => 'Expected {date}', - 'expected_amount' => '(Expected) amount', - 'bill_paid_on' => 'Paid on {date}', - 'bill_repeats_weekly' => 'Repeats weekly', - 'bill_repeats_monthly' => 'Repeats monthly', - 'bill_repeats_quarterly' => 'Repeats quarterly', - 'bill_repeats_half-year' => 'Repeats every half year', - 'bill_repeats_yearly' => 'Repeats yearly', - 'bill_repeats_weekly_other' => 'Repeats every other week', - 'bill_repeats_monthly_other' => 'Repeats every other month', - 'bill_repeats_quarterly_other' => 'Repeats every other quarter', - 'bill_repeats_half-year_other' => 'Repeats yearly', - 'bill_repeats_yearly_other' => 'Repeats every other year', - 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', - 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', - 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', - 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', - 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', - 'subscriptions' => 'Subscriptions', - 'go_to_subscriptions' => 'Go to your subscriptions', - 'forever' => 'Forever', - 'extension_date_is' => 'Extension date is {date}', + 'subscription' => 'Subscription', + 'not_expected_period' => 'Not expected this period', + 'subscriptions_in_group' => 'Subscriptions in group "%{title}"', + 'subscr_expected_x_times' => 'Expect to pay %{amount} %{times} times this period', + 'not_or_not_yet' => 'Not (yet)', + 'visit_bill' => 'Visit bill ":name" at Firefly III', + 'match_between_amounts' => '帳單配合自 :low 至 :high 的交易。', + 'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).', + 'bill_related_rules' => '與此帳單相關的規則', + 'repeats' => '重複', + 'bill_end_date_help' => 'Optional field. The bill is expected to end on this date.', + 'bill_extension_date_help' => 'Optional field. The bill must be extended (or cancelled) on or before this date.', + 'bill_end_index_line' => 'This bill ends on :date', + 'bill_extension_index_line' => 'This bill must be extended or cancelled on :date', + 'connected_journals' => '已連接交易', + 'auto_match_on' => '由 Firefly III 自動配對', + 'auto_match_off' => '不由 Firefly III 自動配對', + 'next_expected_match' => '下一個預期配對', + 'delete_bill' => '刪除帳單 ":name"', + 'deleted_bill' => '已刪除帳單 ":name"', + 'edit_bill' => '編輯帳單 ":name"', + 'more' => '更多', + 'rescan_old' => '再次於所有交易執行規則', + 'update_bill' => '更新帳單', + 'updated_bill' => '已更新帳單 ":name"', + 'store_new_bill' => '儲存新帳單', + 'stored_new_bill' => '已儲存新帳單 ":name"', + 'cannot_scan_inactive_bill' => '未啟用的帳單無法被掃描。', + 'rescanned_bill' => 'Rescanned everything, and linked :count transaction to the bill.|Rescanned everything, and linked :count transactions to the bill.', + 'average_bill_amount_year' => '平均帳單數 (:year)', + 'average_bill_amount_overall' => '平均帳單數 (總體)', + 'bill_is_active' => '帳單為啟用狀態', + 'bill_expected_between' => '期待自 :start 至 :end', + 'bill_will_automatch' => '帳單將自動鏈結至相符的交易', + 'skips_over' => '略過', + 'bill_store_error' => '儲存您的新帳單時發生錯誤,請檢查日誌檔', + 'list_inactive_rule' => '未啟用的規則', + 'bill_edit_rules' => 'Firefly III will attempt to edit the rule related to this bill as well. If you\'ve edited this rule yourself however, Firefly III won\'t change anything.|Firefly III will attempt to edit the :count rules related to this bill as well. If you\'ve edited these rules yourself however, Firefly III won\'t change anything.', + 'bill_expected_date' => 'Expected :date', + 'bill_expected_date_js' => 'Expected {date}', + 'expected_amount' => '(Expected) amount', + 'bill_paid_on' => 'Paid on {date}', + 'bill_repeats_weekly' => 'Repeats weekly', + 'bill_repeats_monthly' => 'Repeats monthly', + 'bill_repeats_quarterly' => 'Repeats quarterly', + 'bill_repeats_half-year' => 'Repeats every half year', + 'bill_repeats_yearly' => 'Repeats yearly', + 'bill_repeats_weekly_other' => 'Repeats every other week', + 'bill_repeats_monthly_other' => 'Repeats every other month', + 'bill_repeats_quarterly_other' => 'Repeats every other quarter', + 'bill_repeats_half-year_other' => 'Repeats yearly', + 'bill_repeats_yearly_other' => 'Repeats every other year', + 'bill_repeats_weekly_skip' => 'Repeats every {skip} weeks', + 'bill_repeats_monthly_skip' => 'Repeats every {skip} months', + 'bill_repeats_quarterly_skip' => 'Repeats every {skip} quarters', + 'bill_repeats_half-year_skip' => 'Repeats every {skip} half years', + 'bill_repeats_yearly_skip' => 'Repeats every {skip} years', + 'subscriptions' => 'Subscriptions', + 'go_to_subscriptions' => 'Go to your subscriptions', + 'forever' => 'Forever', + 'extension_date_is' => 'Extension date is {date}', // accounts: - 'i_am_owed_amount' => 'I am owed amount', - 'i_owe_amount' => 'I owe amount', - 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', - 'all_accounts_inactive' => 'These are your inactive accounts.', - 'active_account_link' => 'This link goes back to your active accounts.', - 'account_missing_transaction' => '帳戶 #:id (":name") 無法直接檢視,惟 Firefly 找不到重新導向資訊。', - 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', - 'details_for_asset' => '資產帳戶 ":name" 的詳細資訊', - 'details_for_expense' => '支出帳戶 ":name" 的詳細資訊', - 'details_for_revenue' => '收入帳戶 ":name" 的詳細資訊', - 'details_for_cash' => '現金帳戶 ":name" 的詳細資訊', - 'store_new_asset_account' => '儲存新資產帳戶', - 'store_new_expense_account' => '儲存新支出帳戶', - 'store_new_revenue_account' => '儲存新收入帳戶', - 'edit_asset_account' => '編輯資產帳戶 ":name"', - 'edit_expense_account' => '編輯支出帳戶 ":name"', - 'edit_revenue_account' => '編輯收入帳戶 ":name"', - 'delete_asset_account' => '刪除資產帳戶 ":name"', - 'delete_expense_account' => '刪除支出帳戶 ":name"', - 'delete_revenue_account' => '刪除收入帳戶 ":name"', - 'delete_liabilities_account' => '刪除債務 ":name"', - 'asset_deleted' => '已成功刪除資產帳戶 ":name"', - 'account_deleted' => 'Successfully deleted account ":name"', - 'expense_deleted' => '已成功刪除支出帳戶 ":name"', - 'revenue_deleted' => '已成功刪除收入帳戶 ":name"', - 'update_asset_account' => '更新資產帳戶', - 'update_undefined_account' => 'Update account', - 'update_liabilities_account' => '更新債務', - 'update_expense_account' => '更新支出帳戶', - 'update_revenue_account' => '更新收入帳戶', - 'make_new_asset_account' => '建立新資產帳戶', - 'make_new_expense_account' => '建立新支出帳戶', - 'make_new_revenue_account' => '建立新收入帳戶', - 'make_new_liabilities_account' => '建立新債務', - 'asset_accounts' => '資產帳戶', - 'undefined_accounts' => 'Accounts', - 'asset_accounts_inactive' => 'Asset accounts (inactive)', - 'expense_account' => 'Expense account', - 'expense_accounts' => '支出帳戶', - 'expense_accounts_inactive' => 'Expense accounts (inactive)', - 'revenue_account' => 'Revenue account', - 'revenue_accounts' => '收入帳戶', - 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', - 'cash_accounts' => '現金帳戶', - 'Cash account' => '現金帳戶', - 'liabilities_accounts' => '債務', - 'liabilities_accounts_inactive' => 'Liabilities (inactive)', - 'reconcile_account' => '核對帳戶 ":account"', - 'overview_of_reconcile_modal' => '對帳概覽', - 'delete_reconciliation' => '刪除對帳', - 'update_reconciliation' => '更新對帳', - 'amount_cannot_be_zero' => '金額不能為零', - 'end_of_reconcile_period' => '對帳區間結束: :period', - 'start_of_reconcile_period' => '對帳區間開始: :period', - 'start_balance' => '初始餘額', - 'end_balance' => '結束餘額', - 'update_balance_dates_instruction' => '與您的銀行帳單配對上述金額及日期,並按一下 "開始對帳"', - 'select_transactions_instruction' => '選擇您銀行帳單上顯示的交易', - 'select_range_and_balance' => '請驗證日期範圍與餘額,然後按下 "開始對帳"', - 'date_change_instruction' => '如果您現在變更日期範圍,任何進度均將遺失。', - 'update_selection' => '更新選擇', - 'store_reconcile' => '儲存對帳', - 'reconciliation_transaction' => '對帳交易', - 'Reconciliation' => '對帳', - 'reconciliation' => '對帳', - 'reconcile_options' => '對帳選項', - 'reconcile_range' => '對帳範圍', - 'start_reconcile' => '開始對帳', - 'cash_account_type' => 'Cash', - 'cash' => '現金', - 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', - 'account_type' => '帳戶類型', - 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', - 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', - 'stored_new_account' => '新帳戶 ":name" 已儲存!', - 'stored_new_account_js' => 'New account "{name}" stored!', - 'updated_account' => '帳戶 ":name" 已更新', - 'updated_account_js' => 'Updated account "{title}".', - 'credit_card_options' => '信用卡選項', - 'no_transactions_account' => '資產帳戶 ":name" 沒有交易 (在此區間)。', - 'no_transactions_period' => '沒有交易記錄 (在此期間)。', - 'no_data_for_chart' => '目前 (尚) 沒有足夠資訊以產生此圖表。', - 'select_at_least_one_account' => '選擇至少一個資產帳戶', - 'select_at_least_one_category' => '選擇至少一個分類', - 'select_at_least_one_budget' => '選擇至少一個預算', - 'select_at_least_one_tag' => '選擇至少一個標籤', - 'select_at_least_one_expense' => '選擇至少一個支出/收入帳戶組合,若無 (清單為空) 則此報表不可用。', - 'account_default_currency' => '此將為與此帳戶關連的預設貨幣。', - 'reconcile_has_more' => '您的 Firefly III 帳目比您的銀行有更多的金錢,有多個選項可應處,請選擇並按下 "確認對帳"。', - 'reconcile_has_less' => '您的 Firefly III 帳目比您的銀行有更少的金錢,有多個選項可應處,請選擇並按下 "確認對帳"。', - 'reconcile_is_equal' => '您的 Firefly III 帳目和您的銀行相符,無須處理,請按下 "確認對帳" 確認匯入。', - 'create_pos_reconcile_transaction' => '清除選擇交易,並建立校正,新增 :amount 至此資產帳戶。', - 'create_neg_reconcile_transaction' => '清除選擇交易,並建立校正,自此資產帳戶移除 :amount。', - 'reconcile_do_nothing' => '刪除選擇交易,但不校正。', - 'reconcile_go_back' => '您可稍後再編輯或刪除校正。', - 'must_be_asset_account' => '您只可以對帳資產帳戶。', - 'reconciliation_stored' => '已儲存對帳', - 'reconciliation_error' => '發生錯誤,交易已標記為已對帳,惟修正未能儲存: :error。', - 'reconciliation_transaction_title' => '對帳 (:from 至 :to)', - 'sum_of_reconciliation' => '對帳加總', - 'reconcile_this_account' => '對帳此帳戶', - 'reconcile' => 'Reconcile', - 'show' => 'Show', - 'confirm_reconciliation' => '確認對帳', - 'submitted_start_balance' => '初始餘額已送出', - 'selected_transactions' => '已選擇交易 (:count)', - 'already_cleared_transactions' => '以清空交易 (:count)', - 'submitted_end_balance' => '已送出結束餘額', - 'initial_balance_description' => '“:account” 的初始餘額', - 'liability_credit_description' => 'Liability credit for ":account"', - 'interest_calc_' => '未知', - 'interest_calc_daily' => '每日', - 'interest_calc_monthly' => '每月', - 'interest_calc_yearly' => '每年', - 'interest_calc_weekly' => 'Per week', - 'interest_calc_half-year' => 'Per half year', - 'interest_calc_quarterly' => 'Per quarter', - 'initial_balance_account' => ':account 初始餘額帳戶', - 'list_options' => 'List options', + 'i_am_owed_amount' => 'I am owed amount', + 'i_owe_amount' => 'I owe amount', + 'inactive_account_link' => 'You have :count inactive (archived) account, which you can view on this separate page.|You have :count inactive (archived) accounts, which you can view on this separate page.', + 'all_accounts_inactive' => 'These are your inactive accounts.', + 'active_account_link' => 'This link goes back to your active accounts.', + 'account_missing_transaction' => '帳戶 #:id (":name") 無法直接檢視,惟 Firefly 找不到重新導向資訊。', + 'cc_monthly_payment_date_help' => 'Select any year and any month, it will be ignored anyway. Only the day of the month is relevant.', + 'details_for_asset' => '資產帳戶 ":name" 的詳細資訊', + 'details_for_expense' => '支出帳戶 ":name" 的詳細資訊', + 'details_for_revenue' => '收入帳戶 ":name" 的詳細資訊', + 'details_for_cash' => '現金帳戶 ":name" 的詳細資訊', + 'store_new_asset_account' => '儲存新資產帳戶', + 'store_new_expense_account' => '儲存新支出帳戶', + 'store_new_revenue_account' => '儲存新收入帳戶', + 'edit_asset_account' => '編輯資產帳戶 ":name"', + 'edit_expense_account' => '編輯支出帳戶 ":name"', + 'edit_revenue_account' => '編輯收入帳戶 ":name"', + 'delete_asset_account' => '刪除資產帳戶 ":name"', + 'delete_expense_account' => '刪除支出帳戶 ":name"', + 'delete_revenue_account' => '刪除收入帳戶 ":name"', + 'delete_liabilities_account' => '刪除債務 ":name"', + 'asset_deleted' => '已成功刪除資產帳戶 ":name"', + 'account_deleted' => 'Successfully deleted account ":name"', + 'expense_deleted' => '已成功刪除支出帳戶 ":name"', + 'revenue_deleted' => '已成功刪除收入帳戶 ":name"', + 'update_asset_account' => '更新資產帳戶', + 'update_undefined_account' => 'Update account', + 'update_liabilities_account' => '更新債務', + 'update_expense_account' => '更新支出帳戶', + 'update_revenue_account' => '更新收入帳戶', + 'make_new_asset_account' => '建立新資產帳戶', + 'make_new_expense_account' => '建立新支出帳戶', + 'make_new_revenue_account' => '建立新收入帳戶', + 'make_new_liabilities_account' => '建立新債務', + 'asset_accounts' => '資產帳戶', + 'undefined_accounts' => 'Accounts', + 'asset_accounts_inactive' => 'Asset accounts (inactive)', + 'expense_account' => 'Expense account', + 'expense_accounts' => '支出帳戶', + 'expense_accounts_inactive' => 'Expense accounts (inactive)', + 'revenue_account' => 'Revenue account', + 'revenue_accounts' => '收入帳戶', + 'revenue_accounts_inactive' => 'Revenue accounts (inactive)', + 'cash_accounts' => '現金帳戶', + 'Cash account' => '現金帳戶', + 'liabilities_accounts' => '債務', + 'liabilities_accounts_inactive' => 'Liabilities (inactive)', + 'reconcile_account' => '核對帳戶 ":account"', + 'overview_of_reconcile_modal' => '對帳概覽', + 'delete_reconciliation' => '刪除對帳', + 'update_reconciliation' => '更新對帳', + 'amount_cannot_be_zero' => '金額不能為零', + 'end_of_reconcile_period' => '對帳區間結束: :period', + 'start_of_reconcile_period' => '對帳區間開始: :period', + 'start_balance' => '初始餘額', + 'end_balance' => '結束餘額', + 'update_balance_dates_instruction' => '與您的銀行帳單配對上述金額及日期,並按一下 "開始對帳"', + 'select_transactions_instruction' => '選擇您銀行帳單上顯示的交易', + 'select_range_and_balance' => '請驗證日期範圍與餘額,然後按下 "開始對帳"', + 'date_change_instruction' => '如果您現在變更日期範圍,任何進度均將遺失。', + 'update_selection' => '更新選擇', + 'store_reconcile' => '儲存對帳', + 'reconciliation_transaction' => '對帳交易', + 'Reconciliation' => '對帳', + 'reconciliation' => '對帳', + 'reconcile_options' => '對帳選項', + 'reconcile_range' => '對帳範圍', + 'start_reconcile' => '開始對帳', + 'cash_account_type' => 'Cash', + 'cash' => '現金', + 'cant_find_redirect_account' => 'Firefly III tried to redirect you but couldn\'t. Sorry about that. Back to the index.', + 'account_type' => '帳戶類型', + 'save_transactions_by_moving' => 'Save this transaction by moving it to another account:|Save these transactions by moving them to another account:', + 'save_transactions_by_moving_js' => 'No transactions|Save this transaction by moving it to another account. |Save these transactions by moving them to another account.', + 'stored_new_account' => '新帳戶 ":name" 已儲存!', + 'stored_new_account_js' => 'New account "{name}" stored!', + 'updated_account' => '帳戶 ":name" 已更新', + 'updated_account_js' => 'Updated account "{title}".', + 'credit_card_options' => '信用卡選項', + 'no_transactions_account' => '資產帳戶 ":name" 沒有交易 (在此區間)。', + 'no_transactions_period' => '沒有交易記錄 (在此期間)。', + 'no_data_for_chart' => '目前 (尚) 沒有足夠資訊以產生此圖表。', + 'select_at_least_one_account' => '選擇至少一個資產帳戶', + 'select_at_least_one_category' => '選擇至少一個分類', + 'select_at_least_one_budget' => '選擇至少一個預算', + 'select_at_least_one_tag' => '選擇至少一個標籤', + 'select_at_least_one_expense' => '選擇至少一個支出/收入帳戶組合,若無 (清單為空) 則此報表不可用。', + 'account_default_currency' => '此將為與此帳戶關連的預設貨幣。', + 'reconcile_has_more' => '您的 Firefly III 帳目比您的銀行有更多的金錢,有多個選項可應處,請選擇並按下 "確認對帳"。', + 'reconcile_has_less' => '您的 Firefly III 帳目比您的銀行有更少的金錢,有多個選項可應處,請選擇並按下 "確認對帳"。', + 'reconcile_is_equal' => '您的 Firefly III 帳目和您的銀行相符,無須處理,請按下 "確認對帳" 確認匯入。', + 'create_pos_reconcile_transaction' => '清除選擇交易,並建立校正,新增 :amount 至此資產帳戶。', + 'create_neg_reconcile_transaction' => '清除選擇交易,並建立校正,自此資產帳戶移除 :amount。', + 'reconcile_do_nothing' => '刪除選擇交易,但不校正。', + 'reconcile_go_back' => '您可稍後再編輯或刪除校正。', + 'must_be_asset_account' => '您只可以對帳資產帳戶。', + 'reconciliation_stored' => '已儲存對帳', + 'reconciliation_error' => '發生錯誤,交易已標記為已對帳,惟修正未能儲存: :error。', + 'reconciliation_transaction_title' => '對帳 (:from 至 :to)', + 'sum_of_reconciliation' => '對帳加總', + 'reconcile_this_account' => '對帳此帳戶', + 'reconcile' => 'Reconcile', + 'show' => 'Show', + 'confirm_reconciliation' => '確認對帳', + 'submitted_start_balance' => '初始餘額已送出', + 'selected_transactions' => '已選擇交易 (:count)', + 'already_cleared_transactions' => '以清空交易 (:count)', + 'submitted_end_balance' => '已送出結束餘額', + 'initial_balance_description' => '“:account” 的初始餘額', + 'liability_credit_description' => 'Liability credit for ":account"', + 'interest_calc_' => '未知', + 'interest_calc_daily' => '每日', + 'interest_calc_monthly' => '每月', + 'interest_calc_yearly' => '每年', + 'interest_calc_weekly' => 'Per week', + 'interest_calc_half-year' => 'Per half year', + 'interest_calc_quarterly' => 'Per quarter', + 'initial_balance_account' => ':account 初始餘額帳戶', + 'list_options' => 'List options', // categories: - 'new_category' => '新分類', - 'create_new_category' => '建立新分類', - 'without_category' => '沒有分類', - 'update_category' => '更新分類', - 'updated_category' => '已更新分類 “:name”', - 'categories' => '分類', - 'edit_category' => '編輯分類 “:name”', - 'no_category' => '(沒有分類)', - 'unknown_category_plain' => 'No category', - 'category' => '分類', - 'delete_category' => '刪除分類 “:name”', - 'deleted_category' => '已刪除分類 “:name”', - 'store_category' => '儲存新分類', - 'stored_category' => '已儲存新分類 “:name”', - 'without_category_between' => '自 :start 至 :end 之間沒有分類', + 'new_category' => '新分類', + 'create_new_category' => '建立新分類', + 'without_category' => '沒有分類', + 'update_category' => '更新分類', + 'updated_category' => '已更新分類 “:name”', + 'categories' => '分類', + 'edit_category' => '編輯分類 “:name”', + 'no_category' => '(沒有分類)', + 'unknown_category_plain' => 'No category', + 'category' => '分類', + 'delete_category' => '刪除分類 “:name”', + 'deleted_category' => '已刪除分類 “:name”', + 'store_category' => '儲存新分類', + 'stored_category' => '已儲存新分類 “:name”', + 'without_category_between' => '自 :start 至 :end 之間沒有分類', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -1942,235 +1960,243 @@ return [ * */ - // transactions: - 'update_withdrawal' => '更新提款', - 'update_deposit' => '更新存款', - 'update_transaction' => 'Update transaction', - 'update_transfer' => '更新轉帳', - 'updated_withdrawal' => '已更新提款 “:description“', - 'updated_deposit' => '已更新存款 ”:description“', - 'updated_transfer' => '已更新轉帳 “:description”', - 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', - 'no_changes_deposit' => 'Deposit ":description" was not changed.', - 'no_changes_transfer' => 'Transfer ":description" was not changed.', - 'delete_withdrawal' => '刪除提款 “:description”', - 'delete_deposit' => '刪除存款 “:description”', - 'delete_transfer' => '刪除轉帳 “:description”', - 'deleted_withdrawal' => '已成功刪除提款 “:description”', - 'deleted_deposit' => '已成功刪除存款 “:description”', - 'deleted_transfer' => '已成功刪除轉帳 “:description”', - 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', - 'stored_journal' => '已成功建立新交易 “:description”', - 'stored_journal_no_descr' => '已成功建立新交易', - 'updated_journal_no_descr' => '已成功更新您的交易', - 'select_transactions' => '選擇交易', - 'rule_group_select_transactions' => '套用 ”:title“ 至交易', - 'rule_select_transactions' => '套用 ”:title“ 至交易', - 'stop_selection' => '停止選取交易', - 'reconcile_selected' => '對帳', - 'mass_delete_journals' => '刪除數個交易', - 'mass_edit_journals' => '編輯數個交易', - 'mass_bulk_journals' => '批次編輯數個交易', - 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', - 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', - 'bulk_set_new_values' => '在下方的輸入欄位設定新值。若您留空,則全部皆會為空白值。此外,請注意僅有提款會被賦予預算。', - 'no_bulk_category' => '不更新分類', - 'no_bulk_budget' => '不更新預算', - 'no_bulk_tags' => '不更新標籤', - 'replace_with_these_tags' => 'Replace with these tags', - 'append_these_tags' => 'Add these tags', - 'mass_edit' => 'Edit selected individually', - 'bulk_edit' => 'Edit selected in bulk', - 'mass_delete' => 'Delete selected', - 'cannot_edit_other_fields' => '受版面空間所限,您僅能大量編輯此處顯示的欄位。若您需要編輯其他欄位,請按一下連結並逐一編輯。', - 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', - 'no_budget' => '(無預算)', - 'no_bill' => '(no bill)', - 'account_per_budget' => 'Account per budget', - 'account_per_category' => 'Account per category', - 'create_new_object' => 'Create', - 'empty' => '(empty)', - 'all_other_budgets' => '(all other budgets)', - 'all_other_accounts' => '(all other accounts)', - 'expense_per_source_account' => 'Expenses per source account', - 'expense_per_destination_account' => 'Expenses per destination account', - 'income_per_destination_account' => 'Income per destination account', - 'spent_in_specific_category' => 'Spent in category ":category"', - 'earned_in_specific_category' => 'Earned in category ":category"', - 'spent_in_specific_tag' => 'Spent in tag ":tag"', - 'earned_in_specific_tag' => 'Earned in tag ":tag"', - 'income_per_source_account' => 'Income per source account', - 'average_spending_per_destination' => 'Average expense per destination account', - 'average_spending_per_source' => 'Average expense per source account', - 'average_earning_per_source' => 'Average earning per source account', - 'average_earning_per_destination' => 'Average earning per destination account', - 'account_per_tag' => 'Account per tag', - 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', - 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', - 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', - 'tag' => 'Tag', - 'no_budget_squared' => '(無預算)', - 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', - 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', - 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', - 'opt_group_' => '(沒有帳戶類型)', - 'opt_group_no_account_type' => '(沒有帳戶類型)', - 'opt_group_defaultAsset' => '預設資產帳戶', - 'opt_group_savingAsset' => '儲蓄帳戶', - 'opt_group_sharedAsset' => '共用資產帳戶', - 'opt_group_ccAsset' => '信用卡', - 'opt_group_cashWalletAsset' => '現金皮夾', - 'opt_group_expense_account' => 'Expense accounts', - 'opt_group_revenue_account' => 'Revenue accounts', - 'opt_group_l_Loan' => '債務: 貸款', - 'opt_group_cash_account' => 'Cash account', - 'opt_group_l_Debt' => '債務: 欠款', - 'opt_group_l_Mortgage' => '債務: 抵押', - 'opt_group_l_Credit card' => '債務: 信用卡', - 'notes' => '備註', - 'unknown_journal_error' => '無法儲存交易,請檢視日誌檔。', - 'attachment_not_found' => '此附加檔案無法被找到。', - 'journal_link_bill' => '此交易已與帳單 :name 鏈結。如要移除鏈結,取消核選方塊,使用規則將它與其他帳單鏈結。', - 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', - 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', - 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', - 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', - 'first_split_decides' => 'The first split determines the value of this field', - 'first_split_overrules_source' => 'The first split may overrule the source account', - 'first_split_overrules_destination' => 'The first split may overrule the destination account', - 'spent_x_of_y' => 'Spent {amount} of {total}', + 'wait_loading_transaction' => 'Please wait for the form to load', + 'wait_loading_data' => 'Please wait for your information to load...', + 'wait_attachments' => 'Please wait for the attachments to upload.', + 'errors_upload' => 'The upload has failed. Please check your browser console for the error.', + 'amount_foreign_if' => 'Amount in foreign currency, if any', + 'amount_destination_account' => 'Amount in the currency of the destination account', + 'edit_transaction_title' => 'Edit transaction ":description"', + 'unreconcile' => 'Undo reconciliation', + 'update_withdrawal' => '更新提款', + 'update_deposit' => '更新存款', + 'update_transaction' => 'Update transaction', + 'update_transfer' => '更新轉帳', + 'updated_withdrawal' => '已更新提款 “:description“', + 'updated_deposit' => '已更新存款 ”:description“', + 'updated_transfer' => '已更新轉帳 “:description”', + 'no_changes_withdrawal' => 'Withdrawal ":description" was not changed.', + 'no_changes_deposit' => 'Deposit ":description" was not changed.', + 'no_changes_transfer' => 'Transfer ":description" was not changed.', + 'delete_withdrawal' => '刪除提款 “:description”', + 'delete_deposit' => '刪除存款 “:description”', + 'delete_transfer' => '刪除轉帳 “:description”', + 'deleted_withdrawal' => '已成功刪除提款 “:description”', + 'deleted_deposit' => '已成功刪除存款 “:description”', + 'deleted_transfer' => '已成功刪除轉帳 “:description”', + 'deleted_reconciliation' => 'Successfully deleted reconciliation transaction ":description"', + 'stored_journal' => '已成功建立新交易 “:description”', + 'stored_journal_js' => 'Successfully created new transaction "%{description}"', + 'stored_journal_no_descr' => '已成功建立新交易', + 'updated_journal_no_descr' => '已成功更新您的交易', + 'select_transactions' => '選擇交易', + 'rule_group_select_transactions' => '套用 ”:title“ 至交易', + 'rule_select_transactions' => '套用 ”:title“ 至交易', + 'stop_selection' => '停止選取交易', + 'reconcile_selected' => '對帳', + 'mass_delete_journals' => '刪除數個交易', + 'mass_edit_journals' => '編輯數個交易', + 'mass_bulk_journals' => '批次編輯數個交易', + 'mass_bulk_journals_explain' => 'This form allows you to change properties of the transactions listed below in one sweeping update. All the transactions in the table will be updated when you change the parameters you see here.', + 'part_of_split' => 'This transaction is part of a split transaction. If you have not selected all the splits, you may end up with changing only half the transaction.', + 'bulk_set_new_values' => '在下方的輸入欄位設定新值。若您留空,則全部皆會為空白值。此外,請注意僅有提款會被賦予預算。', + 'no_bulk_category' => '不更新分類', + 'no_bulk_budget' => '不更新預算', + 'no_bulk_tags' => '不更新標籤', + 'replace_with_these_tags' => 'Replace with these tags', + 'append_these_tags' => 'Add these tags', + 'mass_edit' => 'Edit selected individually', + 'bulk_edit' => 'Edit selected in bulk', + 'mass_delete' => 'Delete selected', + 'cannot_edit_other_fields' => '受版面空間所限,您僅能大量編輯此處顯示的欄位。若您需要編輯其他欄位,請按一下連結並逐一編輯。', + 'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.', + 'no_budget' => '(無預算)', + 'no_bill' => '(no bill)', + 'account_per_budget' => 'Account per budget', + 'account_per_category' => 'Account per category', + 'create_new_object' => 'Create', + 'empty' => '(empty)', + 'all_other_budgets' => '(all other budgets)', + 'all_other_accounts' => '(all other accounts)', + 'expense_per_source_account' => 'Expenses per source account', + 'expense_per_destination_account' => 'Expenses per destination account', + 'income_per_destination_account' => 'Income per destination account', + 'spent_in_specific_category' => 'Spent in category ":category"', + 'earned_in_specific_category' => 'Earned in category ":category"', + 'spent_in_specific_tag' => 'Spent in tag ":tag"', + 'earned_in_specific_tag' => 'Earned in tag ":tag"', + 'income_per_source_account' => 'Income per source account', + 'average_spending_per_destination' => 'Average expense per destination account', + 'average_spending_per_source' => 'Average expense per source account', + 'average_earning_per_source' => 'Average earning per source account', + 'average_earning_per_destination' => 'Average earning per destination account', + 'account_per_tag' => 'Account per tag', + 'tag_report_expenses_listed_once' => 'Expenses and income are never listed twice. If a transaction has multiple tags, it may only show up under one of its tags. This list may appear to be missing data, but the amounts will be correct.', + 'double_report_expenses_charted_once' => 'Expenses and income are never displayed twice. If a transaction has multiple tags, it may only show up under one of its tags. This chart may appear to be missing data, but the amounts will be correct.', + 'tag_report_chart_single_tag' => 'This chart applies to a single tag. If a transaction has multiple tags, what you see here may be reflected in the charts of other tags as well.', + 'tag' => 'Tag', + 'no_budget_squared' => '(無預算)', + 'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.', + 'mass_deleted_transactions_success' => 'Deleted :count transaction.|Deleted :count transactions.', + 'mass_edited_transactions_success' => 'Updated :count transaction.|Updated :count transactions.', + 'opt_group_' => '(沒有帳戶類型)', + 'opt_group_no_account_type' => '(沒有帳戶類型)', + 'opt_group_defaultAsset' => '預設資產帳戶', + 'opt_group_savingAsset' => '儲蓄帳戶', + 'opt_group_sharedAsset' => '共用資產帳戶', + 'opt_group_ccAsset' => '信用卡', + 'opt_group_cashWalletAsset' => '現金皮夾', + 'opt_group_expense_account' => 'Expense accounts', + 'opt_group_revenue_account' => 'Revenue accounts', + 'opt_group_l_Loan' => '債務: 貸款', + 'opt_group_cash_account' => 'Cash account', + 'opt_group_l_Debt' => '債務: 欠款', + 'opt_group_l_Mortgage' => '債務: 抵押', + 'opt_group_l_Credit card' => '債務: 信用卡', + 'notes' => '備註', + 'unknown_journal_error' => '無法儲存交易,請檢視日誌檔。', + 'attachment_not_found' => '此附加檔案無法被找到。', + 'journal_link_bill' => '此交易已與帳單 :name 鏈結。如要移除鏈結,取消核選方塊,使用規則將它與其他帳單鏈結。', + 'transaction_stored_link' => 'Transaction #{ID} ("{title}") has been stored.', + 'transaction_new_stored_link' => 'Transaction #{ID} has been stored.', + 'transaction_updated_link' => 'Transaction #{ID} ("{title}") has been updated.', + 'transaction_updated_no_changes' => 'Transaction #{ID} ("{title}") did not receive any changes.', + 'first_split_decides' => 'The first split determines the value of this field', + 'first_split_overrules_source' => 'The first split may overrule the source account', + 'first_split_overrules_destination' => 'The first split may overrule the destination account', + 'spent_x_of_y' => 'Spent {amount} of {total}', // new user: - 'welcome' => '歡迎使用 Firefly III!', - 'submit' => '送出', - 'submission' => 'Submission', - 'submit_yes_really' => '送出 (我知道我在幹嘛)', - 'getting_started' => '開始使用', - 'to_get_started' => '很高興看到您成功安裝 Firefly III。要開始使用此工具,請輸入您主要使用的的銀行名稱與餘額。別擔心,如您有多個帳戶,可以稍後新增,這儘是為了 Firefly III 需要初始使用而設。', - 'savings_balance_text' => 'Firefly III 會自動為您建立儲蓄帳戶。預設下,儲蓄帳戶會沒有金錢,但若您告訴 Firefly III 餘額為何,亦可以此儲存。', - 'finish_up_new_user' => '這就對了!您可按下 送出 繼續,您將被帶至 Firefly III 的首頁。', - 'stored_new_accounts_new_user' => '太好了!您的帳戶已被儲存。', - 'set_preferred_language' => '若您傾向在 Firefly III 使用其他語言,請於此表示。', - 'language' => '語系', - 'new_savings_account' => ':bank_name 儲蓄帳戶', - 'cash_wallet' => '現金皮夾', - 'currency_not_present' => '若您日常使用的貨幣未在表上,請別擔心,您可在 選項 > 貨幣 建立自己的貨幣', + 'welcome' => '歡迎使用 Firefly III!', + 'submit' => '送出', + 'submission' => 'Submission', + 'submit_yes_really' => '送出 (我知道我在幹嘛)', + 'getting_started' => '開始使用', + 'to_get_started' => '很高興看到您成功安裝 Firefly III。要開始使用此工具,請輸入您主要使用的的銀行名稱與餘額。別擔心,如您有多個帳戶,可以稍後新增,這儘是為了 Firefly III 需要初始使用而設。', + 'savings_balance_text' => 'Firefly III 會自動為您建立儲蓄帳戶。預設下,儲蓄帳戶會沒有金錢,但若您告訴 Firefly III 餘額為何,亦可以此儲存。', + 'finish_up_new_user' => '這就對了!您可按下 送出 繼續,您將被帶至 Firefly III 的首頁。', + 'stored_new_accounts_new_user' => '太好了!您的帳戶已被儲存。', + 'set_preferred_language' => '若您傾向在 Firefly III 使用其他語言,請於此表示。', + 'language' => '語系', + 'new_savings_account' => ':bank_name 儲蓄帳戶', + 'cash_wallet' => '現金皮夾', + 'currency_not_present' => '若您日常使用的貨幣未在表上,請別擔心,您可在 選項 > 貨幣 建立自己的貨幣', // home page: - 'transaction_table_description' => 'A table containing your transactions', - 'opposing_account' => 'Opposing account', - 'yourAccounts' => '您的帳戶', - 'your_accounts' => '您的帳戶概覽', - 'category_overview' => '分類概覽', - 'expense_overview' => '支出帳戶概覽', - 'revenue_overview' => '收入帳戶概覽', - 'budgetsAndSpending' => '預算與花費', - 'budgets_and_spending' => '預算與花費', - 'go_to_budget' => '前往預算 “{budget}”', - 'go_to_deposits' => 'Go to deposits', - 'go_to_expenses' => 'Go to expenses', - 'savings' => '儲蓄', - 'newWithdrawal' => '新支出', - 'newDeposit' => '新存款', - 'newTransfer' => '新轉帳', - 'bills_to_pay' => '待付帳單', - 'per_day' => '每日', - 'left_to_spend_per_day' => '每日剩餘花費', - 'bills_paid' => '已繳帳單', - 'custom_period' => 'Custom period', - 'reset_to_current' => 'Reset to current period', - 'select_period' => 'Select a period', + 'transaction_table_description' => 'A table containing your transactions', + 'opposing_account' => 'Opposing account', + 'yourAccounts' => '您的帳戶', + 'your_accounts' => '您的帳戶概覽', + 'category_overview' => '分類概覽', + 'expense_overview' => '支出帳戶概覽', + 'revenue_overview' => '收入帳戶概覽', + 'budgetsAndSpending' => '預算與花費', + 'budgets_and_spending' => '預算與花費', + 'go_to_budget' => '前往預算 “{budget}”', + 'go_to_deposits' => 'Go to deposits', + 'go_to_expenses' => 'Go to expenses', + 'savings' => '儲蓄', + 'newWithdrawal' => '新支出', + 'newDeposit' => '新存款', + 'newTransfer' => '新轉帳', + 'bills_to_pay' => '待付帳單', + 'per_day' => '每日', + 'left_to_spend_per_day' => '每日剩餘花費', + 'bills_paid' => '已繳帳單', + 'custom_period' => 'Custom period', + 'reset_to_current' => 'Reset to current period', + 'select_period' => 'Select a period', // menu and titles, should be recycled as often as possible: - 'currency' => '貨幣', - 'preferences' => '偏好設定', - 'logout' => '登出', - 'logout_other_sessions' => 'Logout all other sessions', - 'toggleNavigation' => '切換導覽', - 'searchPlaceholder' => '搜尋…', - 'version' => '版本', - 'dashboard' => '監控面板', - 'income_and_expense' => 'Income and expense', - 'all_money' => 'All your money', - 'unknown_source_plain' => 'Unknown source account', - 'unknown_dest_plain' => 'Unknown destination account', - 'unknown_any_plain' => 'Unknown account', - 'unknown_budget_plain' => 'No budget', - 'available_budget' => '可用預算 ({currency})', - 'currencies' => '貨幣', - 'activity' => '活動', - 'usage' => '使用', - 'accounts' => '帳戶', - 'Asset account' => '資產帳戶', - 'Default account' => '資產帳戶', - 'Expense account' => '支出帳戶', - 'Revenue account' => '收入帳戶', - 'Initial balance account' => '初始餘額帳戶', - 'account_type_Asset account' => 'Asset account', - 'account_type_Expense account' => 'Expense account', - 'account_type_Revenue account' => 'Revenue account', - 'account_type_Debt' => '負債', - 'account_type_Loan' => '貸款', - 'account_type_Mortgage' => '抵押', - 'account_type_debt' => 'Debt', - 'account_type_loan' => 'Loan', - 'account_type_mortgage' => 'Mortgage', - 'account_type_Credit card' => '信用卡', - 'credit_card_type_monthlyFull' => 'Full payment every month', - 'liability_direction_credit' => 'I am owed this debt', - 'liability_direction_debit' => 'I owe this debt to somebody else', - 'liability_direction_credit_short' => 'Owed this debt', - 'liability_direction_debit_short' => 'Owe this debt', - 'liability_direction__short' => 'Unknown', - 'liability_direction_null_short' => 'Unknown', - 'Liability credit' => 'Liability credit', - 'budgets' => '預算', - 'tags' => '標籤', - 'reports' => '報表', - 'transactions' => '交易', - 'expenses' => '支出', - 'income' => '收入 / 所得', - 'transfers' => '轉帳', - 'moneyManagement' => '金錢管理', - 'money_management' => '金錢管理', - 'tools' => '工具', - 'piggyBanks' => '小豬撲滿', - 'piggy_banks' => '小豬撲滿', - 'amount_x_of_y' => '{current} 分之 {total}', - 'bills' => '帳單', - 'withdrawal' => '提款', - 'opening_balance' => '開戶餘額', - 'deposit' => '存款', - 'account' => '帳戶', - 'transfer' => '轉帳', - 'Withdrawal' => '提款', - 'Deposit' => '存款', - 'Transfer' => '轉帳', - 'bill' => '帳單', - 'yes' => '是', - 'no' => '否', - 'amount' => '金額', - 'overview' => '概覽', - 'saveOnAccount' => '存於帳戶', - 'unknown' => '未知', - 'monthly' => '逐月', - 'profile' => '個人檔案', - 'errors' => '錯誤', - 'debt_start_date' => '負債開始日期', - 'debt_start_amount' => '負債開始金額', - 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', - 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', - 'store_new_liabilities_account' => '儲存新債務', - 'edit_liabilities_account' => '編輯債務 “:name”', - 'financial_control' => 'Financial control', - 'accounting' => 'Accounting', - 'automation' => 'Automation', - 'others' => 'Others', - 'classification' => 'Classification', - 'store_transaction' => 'Store transaction', + 'currency' => '貨幣', + 'preferences' => '偏好設定', + 'logout' => '登出', + 'logout_other_sessions' => 'Logout all other sessions', + 'toggleNavigation' => '切換導覽', + 'searchPlaceholder' => '搜尋…', + 'version' => '版本', + 'dashboard' => '監控面板', + 'income_and_expense' => 'Income and expense', + 'all_money' => 'All your money', + 'unknown_source_plain' => 'Unknown source account', + 'unknown_dest_plain' => 'Unknown destination account', + 'unknown_any_plain' => 'Unknown account', + 'unknown_budget_plain' => 'No budget', + 'available_budget' => '可用預算 ({currency})', + 'currencies' => '貨幣', + 'activity' => '活動', + 'usage' => '使用', + 'accounts' => '帳戶', + 'Asset account' => '資產帳戶', + 'Default account' => '資產帳戶', + 'Expense account' => '支出帳戶', + 'Revenue account' => '收入帳戶', + 'Initial balance account' => '初始餘額帳戶', + 'account_type_Asset account' => 'Asset account', + 'account_type_Expense account' => 'Expense account', + 'account_type_Revenue account' => 'Revenue account', + 'account_type_Debt' => '負債', + 'account_type_Loan' => '貸款', + 'account_type_Mortgage' => '抵押', + 'account_type_debt' => 'Debt', + 'account_type_loan' => 'Loan', + 'account_type_mortgage' => 'Mortgage', + 'account_type_Credit card' => '信用卡', + 'credit_card_type_monthlyFull' => 'Full payment every month', + 'liability_direction_credit' => 'I am owed this debt', + 'liability_direction_debit' => 'I owe this debt to somebody else', + 'liability_direction_credit_short' => 'Owed this debt', + 'liability_direction_debit_short' => 'Owe this debt', + 'liability_direction__short' => 'Unknown', + 'liability_direction_null_short' => 'Unknown', + 'Liability credit' => 'Liability credit', + 'budgets' => '預算', + 'tags' => '標籤', + 'reports' => '報表', + 'transactions' => '交易', + 'expenses' => '支出', + 'income' => '收入 / 所得', + 'transfers' => '轉帳', + 'moneyManagement' => '金錢管理', + 'money_management' => '金錢管理', + 'tools' => '工具', + 'piggyBanks' => '小豬撲滿', + 'piggy_banks' => '小豬撲滿', + 'amount_x_of_y' => '{current} 分之 {total}', + 'bills' => '帳單', + 'withdrawal' => '提款', + 'opening_balance' => '開戶餘額', + 'deposit' => '存款', + 'account' => '帳戶', + 'transfer' => '轉帳', + 'Withdrawal' => '提款', + 'Deposit' => '存款', + 'Transfer' => '轉帳', + 'bill' => '帳單', + 'yes' => '是', + 'no' => '否', + 'amount' => '金額', + 'overview' => '概覽', + 'saveOnAccount' => '存於帳戶', + 'unknown' => '未知', + 'monthly' => '逐月', + 'profile' => '個人檔案', + 'errors' => '錯誤', + 'debt_start_date' => '負債開始日期', + 'debt_start_amount' => '負債開始金額', + 'debt_start_amount_help' => 'It\'s always best to set this value to a negative amount. Read the help pages (top right (?)-icon) for more information.', + 'interest_period_help' => 'This field is purely cosmetic and won\'t be calculated for you. As it turns out banks are very sneaky so Firefly III never gets it right.', + 'store_new_liabilities_account' => '儲存新債務', + 'edit_liabilities_account' => '編輯債務 “:name”', + 'financial_control' => 'Financial control', + 'accounting' => 'Accounting', + 'automation' => 'Automation', + 'others' => 'Others', + 'classification' => 'Classification', + 'store_transaction' => 'Store transaction', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2181,112 +2207,111 @@ return [ * */ - // reports: - 'report_default' => '自 :start 至 :end 的預設財務報表', - 'report_audit' => '自 :start 至 :end 的交易歷史概覽', - 'report_category' => '自 :start 至 :end 的分類報表', - 'report_double' => 'Expense/revenue account report between :start and :end', - 'report_budget' => '自 :start 至 :end 的預算報表', - 'report_tag' => '自 :start 至 :end 的標籤報表', - 'quick_link_reports' => '快速連結', - 'quick_link_examples' => '以下為供您啟程的範例連結,查看 (?) 按鈕下的協助頁面以獲得所有報表以及可用魔術詞彙的資訊。', - 'quick_link_default_report' => '預設財務報表', - 'quick_link_audit_report' => '交易歷史概覽', - 'report_this_month_quick' => '目前月份之全部帳戶', - 'report_last_month_quick' => '上月,所有帳戶', - 'report_this_year_quick' => '目前年份之全部帳戶', - 'report_this_fiscal_year_quick' => '目前財政年度之全部帳戶', - 'report_all_time_quick' => '所有時間之全部帳戶', - 'reports_can_bookmark' => '請記得可以加入報表至我的最愛', - 'incomeVsExpenses' => '所得 vs. 支出', - 'accountBalances' => '帳戶餘額', - 'balanceStart' => '此區間起始餘額', - 'balanceEnd' => '此區間結束餘額', - 'splitByAccount' => '以帳戶分割', - 'coveredWithTags' => '以標籤涵蓋', - 'leftInBudget' => '預算剩餘', - 'left_in_debt' => 'Amount due', - 'sumOfSums' => '總和', - 'noCategory' => '(沒有分類)', - 'notCharged' => '(尚) 未開始', - 'inactive' => '未啟用', - 'active' => '啟用', - 'difference' => '差異', - 'money_flowing_in' => '在', - 'money_flowing_out' => '外', - 'topX' => '前 :number', - 'show_full_list' => '顯示所有清單', - 'show_only_top' => '僅顯示前 :number', - 'report_type' => '報表類型', - 'report_type_default' => '預設財務報表', - 'report_type_audit' => '交易歷史概覽 (稽核)', - 'report_type_category' => '分類報表', - 'report_type_budget' => '預算報表', - 'report_type_tag' => '標籤報表', - 'report_type_double' => 'Expense/revenue account report', - 'more_info_help' => '可在協助頁面找到更多關於報表類型的資訊,請點選右上角的 (?) 圖示。', - 'report_included_accounts' => '已包含的帳戶', - 'report_date_range' => '日期範圍', - 'report_preset_ranges' => '預設範圍', - 'shared' => '共用', - 'fiscal_year' => '財政年度', - 'income_entry' => '帳戶 “:name” 自 :start 至 :end 的所得', - 'expense_entry' => '帳戶 “:name” 自 :start 至 :end 的支出', - 'category_entry' => 'Expenses and income in category ":name" between :start and :end', - 'budget_spent_amount' => '預算 “:budget” 自 :start 至 :end 的支出', - 'balance_amount' => '自 :start 至 :end 間由帳戶 ":account" 於預算 “:budget” 的支出', - 'no_audit_activity' => '帳戶 :account_name 自 :start 至 :end 沒有任何交易紀錄。', - 'audit_end_balance' => ':account_name 帳戶於 :end 終點的帳戶餘額為: :balance', - 'reports_extra_options' => '額外選項', - 'report_has_no_extra_options' => '此報表沒有額外選項', - 'reports_submit' => '檢視報表', - 'end_after_start_date' => '報表的結束日期必須在開始日期之後。', - 'select_category' => '選擇類別', - 'select_budget' => '選擇預算。', - 'select_tag' => '選擇標籤', - 'income_per_category' => '每個類別的收入', - 'expense_per_category' => '每個類別的支出', - 'expense_per_budget' => '每個預算的費用', - 'income_per_account' => '每個帳戶的收入', - 'expense_per_account' => '每個帳戶的支出', - 'expense_per_tag' => '每個標籤的支出', - 'income_per_tag' => '每個標籤的收入', - 'include_expense_not_in_budget' => '包含的支出不在所选的预算内', - 'include_expense_not_in_account' => '包含的支出不在所选的账户内', - 'include_expense_not_in_category' => '包含的支出不在所选的份额里内', - 'include_income_not_in_category' => '未列入所選類別的收入', - 'include_income_not_in_account' => '未列入所選帳戶的收入', - 'include_income_not_in_tags' => '未包含在所選標記中的收入', - 'include_expense_not_in_tags' => '未包含在所選標記中的支出', - 'everything_else' => '其他', - 'income_and_expenses' => '收入與支出', - 'spent_average' => '支出(平均)', - 'income_average' => '所得(平均)', - 'transaction_count' => '交易數', - 'average_spending_per_account' => '每個帳戶的平均支出', - 'average_income_per_account' => '每個帳戶的平均收入', - 'total' => '總共', - 'description' => '描述', - 'sum_of_period' => '区间内的总和', - 'average_in_period' => '區間平均', - 'account_role_defaultAsset' => '預設資產帳戶', - 'account_role_sharedAsset' => '共用資產帳戶', - 'account_role_savingAsset' => '儲蓄帳戶', - 'account_role_ccAsset' => '信用卡', - 'account_role_cashWalletAsset' => '現金錢包', - 'budget_chart_click' => '請點擊上表中的預算名稱查看圖表。', - 'category_chart_click' => '請點擊上表中的類別名稱以查看圖表。', - 'in_out_accounts' => '每個組合的所賺取與花費', - 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', - 'in_out_per_category' => '每個分類的所賺取與花費', - 'out_per_budget' => '每個預算的費用', - 'select_expense_revenue' => '選擇 支出/收入 帳戶', - 'multi_currency_report_sum' => '由於此清單包括多種貨幣,您所看到的總額並非合理的。報表會總是以您的預設貨幣為主。', - 'sum_in_default_currency' => '總額會總是以您的預設貨幣顯示', - 'net_filtered_prefs' => '此圖表永遠不會囊括未勾選 “包含於淨值" 選項的帳戶', + 'report_default' => '自 :start 至 :end 的預設財務報表', + 'report_audit' => '自 :start 至 :end 的交易歷史概覽', + 'report_category' => '自 :start 至 :end 的分類報表', + 'report_double' => 'Expense/revenue account report between :start and :end', + 'report_budget' => '自 :start 至 :end 的預算報表', + 'report_tag' => '自 :start 至 :end 的標籤報表', + 'quick_link_reports' => '快速連結', + 'quick_link_examples' => '以下為供您啟程的範例連結,查看 (?) 按鈕下的協助頁面以獲得所有報表以及可用魔術詞彙的資訊。', + 'quick_link_default_report' => '預設財務報表', + 'quick_link_audit_report' => '交易歷史概覽', + 'report_this_month_quick' => '目前月份之全部帳戶', + 'report_last_month_quick' => '上月,所有帳戶', + 'report_this_year_quick' => '目前年份之全部帳戶', + 'report_this_fiscal_year_quick' => '目前財政年度之全部帳戶', + 'report_all_time_quick' => '所有時間之全部帳戶', + 'reports_can_bookmark' => '請記得可以加入報表至我的最愛', + 'incomeVsExpenses' => '所得 vs. 支出', + 'accountBalances' => '帳戶餘額', + 'balanceStart' => '此區間起始餘額', + 'balanceEnd' => '此區間結束餘額', + 'splitByAccount' => '以帳戶分割', + 'coveredWithTags' => '以標籤涵蓋', + 'leftInBudget' => '預算剩餘', + 'left_in_debt' => 'Amount due', + 'sumOfSums' => '總和', + 'noCategory' => '(沒有分類)', + 'notCharged' => '(尚) 未開始', + 'inactive' => '未啟用', + 'active' => '啟用', + 'difference' => '差異', + 'money_flowing_in' => '流入', + 'money_flowing_out' => '流出', + 'topX' => '前 :number', + 'show_full_list' => '顯示所有清單', + 'show_only_top' => '僅顯示前 :number', + 'report_type' => '報表類型', + 'report_type_default' => '預設財務報表', + 'report_type_audit' => '交易歷史概覽 (稽核)', + 'report_type_category' => '分類報表', + 'report_type_budget' => '預算報表', + 'report_type_tag' => '標籤報表', + 'report_type_double' => 'Expense/revenue account report', + 'more_info_help' => '可在協助頁面找到更多關於報表類型的資訊,請點選右上角的 (?) 圖示。', + 'report_included_accounts' => '已包含的帳戶', + 'report_date_range' => '日期範圍', + 'report_preset_ranges' => '預設範圍', + 'shared' => '共用', + 'fiscal_year' => '財政年度', + 'income_entry' => '帳戶 “:name” 自 :start 至 :end 的所得', + 'expense_entry' => '帳戶 “:name” 自 :start 至 :end 的支出', + 'category_entry' => 'Expenses and income in category ":name" between :start and :end', + 'budget_spent_amount' => '預算 “:budget” 自 :start 至 :end 的支出', + 'balance_amount' => '自 :start 至 :end 間由帳戶 ":account" 於預算 “:budget” 的支出', + 'no_audit_activity' => '帳戶 :account_name 自 :start 至 :end 沒有任何交易紀錄。', + 'audit_end_balance' => ':account_name 帳戶於 :end 終點的帳戶餘額為: :balance', + 'reports_extra_options' => '額外選項', + 'report_has_no_extra_options' => '此報表沒有額外選項', + 'reports_submit' => '檢視報表', + 'end_after_start_date' => '報表的結束日期必須在開始日期之後。', + 'select_category' => '選擇類別', + 'select_budget' => '選擇預算。', + 'select_tag' => '選擇標籤', + 'income_per_category' => '每個類別的收入', + 'expense_per_category' => '每個類別的支出', + 'expense_per_budget' => '每個預算的費用', + 'income_per_account' => '每個帳戶的收入', + 'expense_per_account' => '每個帳戶的支出', + 'expense_per_tag' => '每個標籤的支出', + 'income_per_tag' => '每個標籤的收入', + 'include_expense_not_in_budget' => '包含的支出不在所选的预算内', + 'include_expense_not_in_account' => '包含的支出不在所选的账户内', + 'include_expense_not_in_category' => '包含的支出不在所选的份额里内', + 'include_income_not_in_category' => '未列入所選類別的收入', + 'include_income_not_in_account' => '未列入所選帳戶的收入', + 'include_income_not_in_tags' => '未包含在所選標記中的收入', + 'include_expense_not_in_tags' => '未包含在所選標記中的支出', + 'everything_else' => '其他', + 'income_and_expenses' => '收入與支出', + 'spent_average' => '支出(平均)', + 'income_average' => '所得(平均)', + 'transaction_count' => '交易數', + 'average_spending_per_account' => '每個帳戶的平均支出', + 'average_income_per_account' => '每個帳戶的平均收入', + 'total' => '總共', + 'description' => '描述', + 'sum_of_period' => '区间内的总和', + 'average_in_period' => '區間平均', + 'account_role_defaultAsset' => '預設資產帳戶', + 'account_role_sharedAsset' => '共用資產帳戶', + 'account_role_savingAsset' => '儲蓄帳戶', + 'account_role_ccAsset' => '信用卡', + 'account_role_cashWalletAsset' => '現金錢包', + 'budget_chart_click' => '請點擊上表中的預算名稱查看圖表。', + 'category_chart_click' => '請點擊上表中的類別名稱以查看圖表。', + 'in_out_accounts' => '每個組合的所賺取與花費', + 'in_out_accounts_per_asset' => 'Earned and spent (per asset account)', + 'in_out_per_category' => '每個分類的所賺取與花費', + 'out_per_budget' => '每個預算的費用', + 'select_expense_revenue' => '選擇 支出/收入 帳戶', + 'multi_currency_report_sum' => '由於此清單包括多種貨幣,您所看到的總額並非合理的。報表會總是以您的預設貨幣為主。', + 'sum_in_default_currency' => '總額會總是以您的預設貨幣顯示', + 'net_filtered_prefs' => '此圖表永遠不會囊括未勾選 “包含於淨值" 選項的帳戶', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2297,98 +2322,98 @@ return [ * */ - // charts: - 'chart' => '圖表', - 'month' => '月', - 'budget' => '預算', - 'spent' => '支出', - 'spent_capped' => 'Spent (capped)', - 'spent_in_budget' => '預算內支出', - 'left_to_spend' => '剩餘可花費', - 'earned' => '已賺得', - 'overspent' => '超支', - 'left' => '剩餘', - 'max-amount' => '最小金額', - 'min-amount' => 'Minimum amount', - 'journal-amount' => '目前帳單條目', - 'name' => '名稱', - 'date' => '日期', - 'date_and_time' => 'Date and time', - 'time' => 'Time', - 'paid' => '已付款', - 'unpaid' => '未付款', - 'day' => '日', - 'budgeted' => '已列入預算', - 'period' => '區間', - 'balance' => '餘額', - 'in_out_period' => 'In + out this period', - 'sum' => '總計', - 'summary' => '概要', - 'average' => '平均', - 'balanceFor' => ':name 的餘額', - 'no_tags' => '(no tags)', + 'chart' => '圖表', + 'month' => '月', + 'budget' => '預算', + 'spent' => '支出', + 'spent_capped' => 'Spent (capped)', + 'spent_in_budget' => '預算內支出', + 'left_to_spend' => '剩餘可花費', + 'earned' => '已賺得', + 'overspent' => '超支', + 'left' => '剩餘', + 'max-amount' => '最小金額', + 'min-amount' => 'Minimum amount', + 'journal-amount' => '目前帳單條目', + 'name' => '名稱', + 'date' => '日期', + 'date_and_time' => 'Date and time', + 'time' => 'Time', + 'paid' => '已付款', + 'unpaid' => '未付款', + 'day' => '日', + 'budgeted' => '已列入預算', + 'period' => '區間', + 'balance' => '餘額', + 'in_out_period' => 'In + out this period', + 'sum' => '總計', + 'summary' => '概要', + 'average' => '平均', + 'balanceFor' => ':name 的餘額', + 'no_tags' => '(no tags)', + 'nothing_found' => '(nothing found)', // piggy banks: - 'event_history' => 'Event history', - 'add_money_to_piggy' => '新增金錢至小豬撲滿 “:name”', - 'piggy_bank' => '小豬撲滿', - 'new_piggy_bank' => '新小豬撲滿', - 'store_piggy_bank' => '儲存新小豬撲滿', - 'stored_piggy_bank' => '儲存新小豬撲滿 “:name”', - 'account_status' => '帳戶狀態', - 'left_for_piggy_banks' => '留給小豬撲滿', - 'sum_of_piggy_banks' => '小豬撲滿總和', - 'saved_so_far' => '保存到目前為止', - 'left_to_save' => '剩餘可供儲蓄', - 'suggested_amount' => '建議每月儲蓄金額', - 'add_money_to_piggy_title' => '新增金錢至小豬撲滿 “:name”', - 'remove_money_from_piggy_title' => '自小豬撲滿 “:name” 中移走金錢', - 'add' => '新增', - 'no_money_for_piggy' => '您已沒有錢可放至小豬撲滿', - 'suggested_savings_per_month' => '每月建議', + 'event_history' => 'Event history', + 'add_money_to_piggy' => '新增金錢至小豬撲滿 “:name”', + 'piggy_bank' => '小豬撲滿', + 'new_piggy_bank' => '新小豬撲滿', + 'store_piggy_bank' => '儲存新小豬撲滿', + 'stored_piggy_bank' => '儲存新小豬撲滿 “:name”', + 'account_status' => '帳戶狀態', + 'left_for_piggy_banks' => '留給小豬撲滿', + 'sum_of_piggy_banks' => '小豬撲滿總和', + 'saved_so_far' => '保存到目前為止', + 'left_to_save' => '剩餘可供儲蓄', + 'suggested_amount' => '建議每月儲蓄金額', + 'add_money_to_piggy_title' => '新增金錢至小豬撲滿 “:name”', + 'remove_money_from_piggy_title' => '自小豬撲滿 “:name” 中移走金錢', + 'add' => '新增', + 'no_money_for_piggy' => '您已沒有錢可放至小豬撲滿', + 'suggested_savings_per_month' => '每月建議', - 'remove' => '移除', - 'max_amount_add' => '所能增加之最大金額為', - 'max_amount_remove' => '所能移除之最大金額為', - 'update_piggy_button' => '更新小豬撲滿', - 'update_piggy_title' => '更新小豬撲滿 ":name"', - 'updated_piggy_bank' => '更新小豬撲滿 ":name"', - 'details' => '明細', - 'events' => '事件', - 'target_amount' => '目標金額', - 'start_date' => '開始日期', - 'no_start_date' => '無開始日期', - 'target_date' => '目標日期', - 'no_target_date' => '無目標日期', - 'table' => '表格', - 'delete_piggy_bank' => '删除小豬撲滿 ":name"', - 'cannot_add_amount_piggy' => '無法增加 :amount 至 “:name”。', - 'cannot_remove_from_piggy' => '無法自 “:name” 移除 :amount。', - 'deleted_piggy_bank' => '删除小豬撲滿 ":name"', - 'added_amount_to_piggy' => '已新增 :amount 至 “:name”', - 'removed_amount_from_piggy' => '已自 “:name” 移除 :amount', - 'piggy_events' => '相關的小豬撲滿', + 'remove' => '移除', + 'max_amount_add' => '所能增加之最大金額為', + 'max_amount_remove' => '所能移除之最大金額為', + 'update_piggy_button' => '更新小豬撲滿', + 'update_piggy_title' => '更新小豬撲滿 ":name"', + 'updated_piggy_bank' => '更新小豬撲滿 ":name"', + 'details' => '明細', + 'events' => '事件', + 'target_amount' => '目標金額', + 'start_date' => '開始日期', + 'no_start_date' => '無開始日期', + 'target_date' => '目標日期', + 'no_target_date' => '無目標日期', + 'table' => '表格', + 'delete_piggy_bank' => '删除小豬撲滿 ":name"', + 'cannot_add_amount_piggy' => '無法增加 :amount 至 “:name”。', + 'cannot_remove_from_piggy' => '無法自 “:name” 移除 :amount。', + 'deleted_piggy_bank' => '删除小豬撲滿 ":name"', + 'added_amount_to_piggy' => '已新增 :amount 至 “:name”', + 'removed_amount_from_piggy' => '已自 “:name” 移除 :amount', + 'piggy_events' => '相關的小豬撲滿', // tags - 'delete_tag' => '刪除標籤 ":tag"', - 'deleted_tag' => '已刪除標籤 ":tag"', - 'new_tag' => '建立新標籤', - 'edit_tag' => '編輯標籤 ":tag"', - 'updated_tag' => '已更新標籤 “:tag”', - 'created_tag' => '標籤 “:tag” 已被建立!', + 'delete_tag' => '刪除標籤 ":tag"', + 'deleted_tag' => '已刪除標籤 ":tag"', + 'new_tag' => '建立新標籤', + 'edit_tag' => '編輯標籤 ":tag"', + 'updated_tag' => '已更新標籤 “:tag”', + 'created_tag' => '標籤 “:tag” 已被建立!', - 'transaction_journal_information' => '交易資訊', - 'transaction_journal_amount' => 'Amount information', - 'transaction_journal_meta' => '後設資訊', - 'transaction_journal_more' => '更多資訊', - 'basic_journal_information' => 'Basic transaction information', - 'transaction_journal_extra' => 'Extra information', - 'att_part_of_journal' => '儲存在 ":journal"', - 'total_amount' => '總金額', - 'number_of_decimals' => '小數位數:', + 'transaction_journal_information' => '交易資訊', + 'transaction_journal_amount' => 'Amount information', + 'transaction_journal_meta' => '後設資訊', + 'transaction_journal_more' => '更多資訊', + 'basic_journal_information' => 'Basic transaction information', + 'transaction_journal_extra' => 'Extra information', + 'att_part_of_journal' => '儲存在 ":journal"', + 'total_amount' => '總金額', + 'number_of_decimals' => '小數位數:', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2399,282 +2424,281 @@ return [ * */ - // administration - 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', - 'invite_is_deleted' => 'The invite to ":address" has been deleted.', - 'invite_new_user_title' => 'Invite new user', - 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', - 'invited_user_mail' => 'Email address', - 'invite_user' => 'Invite user', - 'user_is_invited' => 'Email address ":address" was invited to Firefly III', - 'administration' => '管理', - 'system_settings' => 'System settings', - 'code_already_used' => 'Invite code has been used', - 'user_administration' => '使用者管理', - 'list_all_users' => '所有使用者', - 'all_users' => '所有使用者', - 'instance_configuration' => '組態設定', - 'firefly_instance_configuration' => 'Firefly III 的組態設定選項', - 'setting_single_user_mode' => '單使用者模式', - 'setting_single_user_mode_explain' => '預設下,Firefly III 只接受一個 (1) 註冊,即您本人。此為安全措施,在除經你同意外,防止其他人使用您的空間,目前註冊功能已關閉。當您取消此核選方塊後,若他們能連接到此空間 (在已聯網狀態),其他人也可以使用。', - 'store_configuration' => '儲存設定', - 'single_user_administration' => ':email 的使用者管理後臺', - 'edit_user' => '編輯使用者 :email', - 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', - 'user_data_information' => '使用者資料', - 'user_information' => '使用者資訊', - 'total_size' => '總大小', - 'budget_or_budgets' => ':count budget|:count budgets', - 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', - 'nr_of_rules_in_total_groups' => ':count_groups规则组中,包含:count_rules条规则', - 'tag_or_tags' => ':count tag|:count tags', - 'configuration_updated' => '已更新組態設定', - 'setting_is_demo_site' => '演示網站', - 'setting_is_demo_site_explain' => '若您勾選此選項,此安裝將會以展示網站方式運作,會有奇怪的副作用。', - 'block_code_bounced' => '電子郵件被退回', - 'block_code_expired' => '演示帳戶已過期', - 'no_block_code' => '無封鎖原因或使用者未被封鎖', - 'block_code_email_changed' => '使用者尚未確認新的電子郵件地址', - 'admin_update_email' => '與個人資料頁面相反,使用者不會被通知他們的電子郵件地址已變更!', - 'update_user' => '更新使用者', - 'updated_user' => '使用者資料已更改。', - 'delete_user' => '刪除使用者 :email', - 'user_deleted' => '使用者已被刪除', - 'send_test_email' => '寄送測試郵件訊息', - 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', - 'send_message' => '發送消息', - 'send_test_triggered' => '測試已觸發,請檢視您的收件匣與日誌檔。', - 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', - 'admin_maintanance_title' => 'Maintenance', - 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', - 'admin_maintenance_clear_cache' => 'Clear cache', - 'admin_notifications' => 'Admin notifications', - 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', - 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', - 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', - 'admin_notification_check_new_version' => 'A new version is available', - 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', - 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', - 'all_invited_users' => 'All invited users', - 'save_notification_settings' => 'Save settings', - 'notification_settings_saved' => 'The notification settings have been saved', - - - 'split_transaction_title' => '拆分交易的描述', - 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', - 'split_title_help' => '若您建立一筆拆分交易,須有一個有關交易所有拆分的整體描述。', - 'you_create_transfer' => 'You\'re creating a transfer.', - 'you_create_withdrawal' => 'You\'re creating a withdrawal.', - 'you_create_deposit' => 'You\'re creating a deposit.', + 'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.', + 'invite_is_deleted' => 'The invite to ":address" has been deleted.', + 'invite_new_user_title' => 'Invite new user', + 'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.', + 'invited_user_mail' => 'Email address', + 'invite_user' => 'Invite user', + 'user_is_invited' => 'Email address ":address" was invited to Firefly III', + 'administration' => '管理', + 'system_settings' => 'System settings', + 'code_already_used' => 'Invite code has been used', + 'user_administration' => '使用者管理', + 'list_all_users' => '所有使用者', + 'all_users' => '所有使用者', + 'instance_configuration' => '組態設定', + 'firefly_instance_configuration' => 'Firefly III 的組態設定選項', + 'setting_single_user_mode' => '單使用者模式', + 'setting_single_user_mode_explain' => '預設下,Firefly III 只接受一個 (1) 註冊,即您本人。此為安全措施,在除經你同意外,防止其他人使用您的空間,目前註冊功能已關閉。當您取消此核選方塊後,若他們能連接到此空間 (在已聯網狀態),其他人也可以使用。', + 'store_configuration' => '儲存設定', + 'single_user_administration' => ':email 的使用者管理後臺', + 'edit_user' => '編輯使用者 :email', + 'hidden_fields_preferences' => 'You can enable more transaction options in your preferences.', + 'user_data_information' => '使用者資料', + 'user_information' => '使用者資訊', + 'total_size' => '總大小', + 'budget_or_budgets' => ':count budget|:count budgets', + 'budgets_with_limits' => ':count budget with configured amount|:count budgets with configured amount', + 'nr_of_rules_in_total_groups' => ':count_groups规则组中,包含:count_rules条规则', + 'tag_or_tags' => ':count tag|:count tags', + 'configuration_updated' => '已更新組態設定', + 'setting_is_demo_site' => '演示網站', + 'setting_is_demo_site_explain' => '若您勾選此選項,此安裝將會以展示網站方式運作,會有奇怪的副作用。', + 'block_code_bounced' => '電子郵件被退回', + 'block_code_expired' => '演示帳戶已過期', + 'no_block_code' => '無封鎖原因或使用者未被封鎖', + 'demo_user_export' => 'The demo user cannot export data', + 'block_code_email_changed' => '使用者尚未確認新的電子郵件地址', + 'admin_update_email' => '與個人資料頁面相反,使用者不會被通知他們的電子郵件地址已變更!', + 'update_user' => '更新使用者', + 'updated_user' => '使用者資料已更改。', + 'delete_user' => '刪除使用者 :email', + 'user_deleted' => '使用者已被刪除', + 'send_test_email' => '寄送測試郵件訊息', + 'send_test_email_text' => 'To see if your installation is capable of sending email or posting Slack messages, please press this button. You will not see an error here (if any), the log files will reflect any errors. You can press this button as many times as you like. There is no spam control. The message will be sent to :email and should arrive shortly.', + 'send_message' => '發送消息', + 'send_test_triggered' => '測試已觸發,請檢視您的收件匣與日誌檔。', + 'give_admin_careful' => 'Users who are given admin rights can take away yours. Be careful.', + 'admin_maintanance_title' => 'Maintenance', + 'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance', + 'admin_maintenance_clear_cache' => 'Clear cache', + 'admin_notifications' => 'Admin notifications', + 'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.', + 'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message', + 'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification', + 'admin_notification_check_new_version' => 'A new version is available', + 'admin_notification_check_invite_created' => 'A user is invited to Firefly III', + 'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed', + 'all_invited_users' => 'All invited users', + 'save_notification_settings' => 'Save settings', + 'notification_settings_saved' => 'The notification settings have been saved', + 'split_transaction_title' => '拆分交易的描述', + 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', + 'split_title_help' => '若您建立一筆拆分交易,須有一個有關交易所有拆分的整體描述。', + 'you_create_transfer' => 'You\'re creating a transfer.', + 'you_create_withdrawal' => 'You\'re creating a withdrawal.', + 'you_create_deposit' => 'You\'re creating a deposit.', // links - 'journal_link_configuration' => '交易鏈結設定', - 'create_new_link_type' => '建立新連結類型', - 'store_new_link_type' => '儲存新連結類型', - 'update_link_type' => '更新連結類型', - 'edit_link_type' => '編輯連結類型 ":name"', - 'updated_link_type' => '更新連結類型 ":name"', - 'delete_link_type' => '刪除連結類型 ":name"', - 'deleted_link_type' => '刪除連結類型 ":name"', - 'stored_new_link_type' => '新建連結類型 ":name"', - 'cannot_edit_link_type' => '無法編輯連結類型 ":name"', - 'link_type_help_name' => '即 "重複"', - 'link_type_help_inward' => '即 "重複"', - 'link_type_help_outward' => '即 "為重複,因“', - 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', - 'do_not_save_connection' => '(不保存連接)', - 'link_transaction' => '連結交易', - 'link_to_other_transaction' => '鏈結此交易至另一筆', - 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', - 'this_transaction' => '这笔交易', - 'transaction' => '交易', - 'comments' => '評論', - 'link_notes' => 'Any notes you wish to store with the link.', - 'invalid_link_selection' => '無法連結這些交易', - 'selected_transaction' => 'Selected transaction', - 'journals_linked' => '交易是連結的。', - 'journals_error_linked' => '這些交易已互相鏈結', - 'journals_link_to_self' => '您無法將一筆交易鏈結至該交易本身', - 'journal_links' => '交易連結', - 'this_withdrawal' => '此取款', - 'this_deposit' => '這筆存款', - 'this_transfer' => '此傳輸', - 'overview_for_link' => '連結類型 “:name” 概覽', - 'source_transaction' => '源交易記錄', - 'link_description' => '連結說明', - 'destination_transaction' => '指定的交易', - 'delete_journal_link' => '刪除 :source:destination之間的聯繫', - 'deleted_link' => '刪除連結', + 'journal_link_configuration' => '交易鏈結設定', + 'create_new_link_type' => '建立新連結類型', + 'store_new_link_type' => '儲存新連結類型', + 'update_link_type' => '更新連結類型', + 'edit_link_type' => '編輯連結類型 ":name"', + 'updated_link_type' => '更新連結類型 ":name"', + 'delete_link_type' => '刪除連結類型 ":name"', + 'deleted_link_type' => '刪除連結類型 ":name"', + 'stored_new_link_type' => '新建連結類型 ":name"', + 'cannot_edit_link_type' => '無法編輯連結類型 ":name"', + 'link_type_help_name' => '即 "重複"', + 'link_type_help_inward' => '即 "重複"', + 'link_type_help_outward' => '即 "為重複,因“', + 'save_connections_by_moving' => 'Save the link between these transactions by moving them to another link type:', + 'do_not_save_connection' => '(不保存連接)', + 'link_transaction' => '連結交易', + 'link_to_other_transaction' => '鏈結此交易至另一筆', + 'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.', + 'this_transaction' => '这笔交易', + 'transaction' => '交易', + 'comments' => '評論', + 'link_notes' => 'Any notes you wish to store with the link.', + 'invalid_link_selection' => '無法連結這些交易', + 'selected_transaction' => 'Selected transaction', + 'journals_linked' => '交易是連結的。', + 'journals_error_linked' => '這些交易已互相鏈結', + 'journals_link_to_self' => '您無法將一筆交易鏈結至該交易本身', + 'journal_links' => '交易連結', + 'this_withdrawal' => '此取款', + 'this_deposit' => '這筆存款', + 'this_transfer' => '此傳輸', + 'overview_for_link' => '連結類型 “:name” 概覽', + 'source_transaction' => '源交易記錄', + 'link_description' => '連結說明', + 'destination_transaction' => '指定的交易', + 'delete_journal_link' => '刪除 :source:destination之間的聯繫', + 'deleted_link' => '刪除連結', // link translations: - 'Paid_name' => '已付款', - 'Refund_name' => '退款', - 'Reimbursement_name' => '報銷', - 'Related_name' => '相關', - 'relates to_inward' => '關聯於', - 'is (partially) refunded by_inward' => '被 (部分) 退還, 由', - 'is (partially) paid for by_inward' => '被 (部分) 付款, 由', - 'is (partially) reimbursed by_inward' => '被 (部分) 核銷, 由', - 'inward_transaction' => '內向交易', - 'outward_transaction' => '外向交易', - 'relates to_outward' => '關聯於', - '(partially) refunds_outward' => '(部分) 退還', - '(partially) pays for_outward' => '(部分) 支付', - '(partially) reimburses_outward' => '(部分) 核銷', - 'is (partially) refunded by' => 'is (partially) refunded by', - 'is (partially) paid for by' => 'is (partially) paid for by', - 'is (partially) reimbursed by' => 'is (partially) reimbursed by', - 'relates to' => 'relates to', - '(partially) refunds' => '(partially) refunds', - '(partially) pays for' => '(partially) pays for', - '(partially) reimburses' => '(partially) reimburses', + 'Paid_name' => '已付款', + 'Refund_name' => '退款', + 'Reimbursement_name' => '報銷', + 'Related_name' => '相關', + 'relates to_inward' => '關聯於', + 'is (partially) refunded by_inward' => '被 (部分) 退還, 由', + 'is (partially) paid for by_inward' => '被 (部分) 付款, 由', + 'is (partially) reimbursed by_inward' => '被 (部分) 核銷, 由', + 'inward_transaction' => '內向交易', + 'outward_transaction' => '外向交易', + 'relates to_outward' => '關聯於', + '(partially) refunds_outward' => '(部分) 退還', + '(partially) pays for_outward' => '(部分) 支付', + '(partially) reimburses_outward' => '(部分) 核銷', + 'is (partially) refunded by' => 'is (partially) refunded by', + 'is (partially) paid for by' => 'is (partially) paid for by', + 'is (partially) reimbursed by' => 'is (partially) reimbursed by', + 'relates to' => 'relates to', + '(partially) refunds' => '(partially) refunds', + '(partially) pays for' => '(partially) pays for', + '(partially) reimburses' => '(partially) reimburses', // split a transaction: - 'splits' => '拆分', - 'add_another_split' => '增加拆分', - 'cannot_edit_opening_balance' => '您無法編輯一個帳戶的開戶餘額。', - 'no_edit_multiple_left' => '您沒有選擇有效的交易紀錄以供編輯。', - 'breadcrumb_convert_group' => 'Convert transaction', - 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', - 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', - 'create_another' => 'After storing, return here to create another one.', - 'after_update_create_another' => 'After updating, return here to continue editing.', - 'store_as_new' => 'Store as a new transaction instead of updating.', - 'reset_after' => 'Reset form after submission', - 'errors_submission' => 'There was something wrong with your submission. Please check out the errors.', - 'transaction_expand_split' => 'Expand split', - 'transaction_collapse_split' => 'Collapse split', + 'splits' => '拆分', + 'add_another_split' => '增加拆分', + 'cannot_edit_opening_balance' => '您無法編輯一個帳戶的開戶餘額。', + 'no_edit_multiple_left' => '您沒有選擇有效的交易紀錄以供編輯。', + 'breadcrumb_convert_group' => 'Convert transaction', + 'convert_invalid_source' => 'Source information is invalid for transaction #%d.', + 'convert_invalid_destination' => 'Destination information is invalid for transaction #%d.', + 'create_another' => 'After storing, return here to create another one.', + 'after_update_create_another' => 'After updating, return here to continue editing.', + 'store_as_new' => 'Store as a new transaction instead of updating.', + 'reset_after' => 'Reset form after submission', + 'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.', + 'errors_submission_v2' => 'There was something wrong with your submission. Please check out the errors below: %{errorMessage}', + 'transaction_expand_split' => 'Expand split', + 'transaction_collapse_split' => 'Collapse split', // object groups - 'default_group_title_name' => '(ungrouped)', - 'default_group_title_name_plain' => 'ungrouped', + 'default_group_title_name' => '(ungrouped)', + 'default_group_title_name_plain' => 'ungrouped', // empty lists? no objects? instructions: - 'no_accounts_title_asset' => '建立新資產帳戶', - 'no_accounts_intro_asset' => '您還沒有資產帳戶。資產帳戶可以包括: 你的支票帳戶、儲蓄帳戶、共用帳戶甚至信用卡。', - 'no_accounts_imperative_asset' => '要使用 Firefly III ,您至少需要一个資產帳戶。現在開始吧:', - 'no_accounts_create_asset' => '建立新資產帳戶', - 'no_accounts_title_expense' => '建立新支出帳戶', - 'no_accounts_intro_expense' => '您目前沒有支出帳戶。支出帳戶係供您花錢的地方,如商店或超市。', - 'no_accounts_imperative_expense' => '當您建立交易時支出帳戶會自動被建立,但您也可以手動建立,現在就新增一個:', - 'no_accounts_create_expense' => '建立新支出帳戶', - 'no_accounts_title_revenue' => '建立新收入帳戶', - 'no_accounts_intro_revenue' => '您還沒有收入帳戶,收入帳戶是您收款的地方,比如您的雇主。', - 'no_accounts_imperative_revenue' => '當您建立交易時收入帳戶會自動被建立,但您也可以手動建立,現在就新增一個:', - 'no_accounts_create_revenue' => '建立新收入帳戶', - 'no_accounts_title_liabilities' => '一起建立一筆債務!', - 'no_accounts_intro_liabilities' => '您目前沒有債務,債務係用來註冊您 (學生) 貸款或其他借貸的帳戶。', - 'no_accounts_imperative_liabilities' => '您不需使用此功能,但若您要追蹤這些東西,此功能可是很有用的。', - 'no_accounts_create_liabilities' => '建立新債務', - 'no_budgets_title_default' => '一起建立一筆預算', - 'no_rules_title_default' => 'Let\'s create a rule', - 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', - 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', - 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', - 'no_budgets_imperative_default' => '預算是財務管理的基本工具,現在就建立一筆:', - 'no_budgets_create_default' => '建立新預算', - 'no_rules_create_default' => 'Create a rule', - 'no_categories_title_default' => '一起建立一個分類!', - 'no_categories_intro_default' => '您還沒有分類。分類是用來微調您的交易紀錄,並依指定分類標示。', - 'no_categories_imperative_default' => '當您建立交易時分類會自動被建立,但您也可以手動建立,現在就新增一個:', - 'no_categories_create_default' => '建立分類', - 'no_tags_title_default' => '我們來建立一個標籤吧!', - 'no_tags_intro_default' => '您還沒有標籤。標籤是用來微調您的交易紀錄,並依指定關鍵字標示。', - 'no_tags_imperative_default' => '當您建立交易時標籤會自動被建立,但您也可以手動建立,現在就新增一個:', - 'no_tags_create_default' => '建立標籤', - 'no_transactions_title_withdrawal' => '建立新支出', - 'no_transactions_intro_withdrawal' => '您目前沒有支出,您應該建立支出以開始管理您的財務。', - 'no_transactions_imperative_withdrawal' => '你花了一些錢嗎?然後你應該把它寫下來:', - 'no_transactions_create_withdrawal' => '建立一筆支出', - 'no_transactions_title_deposit' => '建立新收入', - 'no_transactions_intro_deposit' => '目前沒有所得紀錄,您應該建立所得資料以開始管理您的財務。', - 'no_transactions_imperative_deposit' => '你收了一些錢嗎?然後你應該把它寫下來:', - 'no_transactions_create_deposit' => '新增存款', - 'no_transactions_title_transfers' => '我們來建立一筆轉帳!', - 'no_transactions_intro_transfers' => '您還沒有轉帳。當您自資產帳戶之前移動金錢,會自動記錄為一筆轉帳。', - 'no_transactions_imperative_transfers' => '你已動用了一些錢嗎?那麼把它寫下來:', - 'no_transactions_create_transfers' => '新增轉帳', - 'no_piggies_title_default' => '我們來建立一個小豬撲滿!', - 'no_piggies_intro_default' => '您目前沒有小豬撲滿。您可以建立小豬撲滿來分別您的儲蓄,並追蹤您儲蓄的目標。', - 'no_piggies_imperative_default' => '您有想要儲蓄的東西嗎?建立一個小豬撲滿然後開始追蹤:', - 'no_piggies_create_default' => '創建一個新小豬撲滿', - 'no_bills_title_default' => '我們來建立一筆帳單!', - 'no_bills_intro_default' => '您目前沒有帳單。您可以建立帳單以追蹤您的日常支出,如房租與保險。', - 'no_bills_imperative_default' => '你們有這樣的普通帳單嗎?創建帳單並跟蹤您的付款:', - 'no_bills_create_default' => '建立新帳單', + 'no_accounts_title_asset' => '建立新資產帳戶', + 'no_accounts_intro_asset' => '您還沒有資產帳戶。資產帳戶可以包括: 你的支票帳戶、儲蓄帳戶、共用帳戶甚至信用卡。', + 'no_accounts_imperative_asset' => '要使用 Firefly III ,您至少需要一个資產帳戶。現在開始吧:', + 'no_accounts_create_asset' => '建立新資產帳戶', + 'no_accounts_title_expense' => '建立新支出帳戶', + 'no_accounts_intro_expense' => '您目前沒有支出帳戶。支出帳戶係供您花錢的地方,如商店或超市。', + 'no_accounts_imperative_expense' => '當您建立交易時支出帳戶會自動被建立,但您也可以手動建立,現在就新增一個:', + 'no_accounts_create_expense' => '建立新支出帳戶', + 'no_accounts_title_revenue' => '建立新收入帳戶', + 'no_accounts_intro_revenue' => '您還沒有收入帳戶,收入帳戶是您收款的地方,比如您的雇主。', + 'no_accounts_imperative_revenue' => '當您建立交易時收入帳戶會自動被建立,但您也可以手動建立,現在就新增一個:', + 'no_accounts_create_revenue' => '建立新收入帳戶', + 'no_accounts_title_liabilities' => '一起建立一筆債務!', + 'no_accounts_intro_liabilities' => '您目前沒有債務,債務係用來註冊您 (學生) 貸款或其他借貸的帳戶。', + 'no_accounts_imperative_liabilities' => '您不需使用此功能,但若您要追蹤這些東西,此功能可是很有用的。', + 'no_accounts_create_liabilities' => '建立新債務', + 'no_budgets_title_default' => '一起建立一筆預算', + 'no_rules_title_default' => 'Let\'s create a rule', + 'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.', + 'no_rules_intro_default' => 'You have no rules yet. Rules are powerful automations that can handle transactions for you.', + 'no_rules_imperative_default' => 'Rules can be very useful when you\'re managing transactions. Let\'s create one now:', + 'no_budgets_imperative_default' => '預算是財務管理的基本工具,現在就建立一筆:', + 'no_budgets_create_default' => '建立新預算', + 'no_rules_create_default' => 'Create a rule', + 'no_categories_title_default' => '一起建立一個分類!', + 'no_categories_intro_default' => '您還沒有分類。分類是用來微調您的交易紀錄,並依指定分類標示。', + 'no_categories_imperative_default' => '當您建立交易時分類會自動被建立,但您也可以手動建立,現在就新增一個:', + 'no_categories_create_default' => '建立分類', + 'no_tags_title_default' => '我們來建立一個標籤吧!', + 'no_tags_intro_default' => '您還沒有標籤。標籤是用來微調您的交易紀錄,並依指定關鍵字標示。', + 'no_tags_imperative_default' => '當您建立交易時標籤會自動被建立,但您也可以手動建立,現在就新增一個:', + 'no_tags_create_default' => '建立標籤', + 'no_transactions_title_withdrawal' => '建立新支出', + 'no_transactions_intro_withdrawal' => '您目前沒有支出,您應該建立支出以開始管理您的財務。', + 'no_transactions_imperative_withdrawal' => '你花了一些錢嗎?然後你應該把它寫下來:', + 'no_transactions_create_withdrawal' => '建立一筆支出', + 'no_transactions_title_deposit' => '建立新收入', + 'no_transactions_intro_deposit' => '目前沒有所得紀錄,您應該建立所得資料以開始管理您的財務。', + 'no_transactions_imperative_deposit' => '你收了一些錢嗎?然後你應該把它寫下來:', + 'no_transactions_create_deposit' => '新增存款', + 'no_transactions_title_transfers' => '我們來建立一筆轉帳!', + 'no_transactions_intro_transfers' => '您還沒有轉帳。當您自資產帳戶之前移動金錢,會自動記錄為一筆轉帳。', + 'no_transactions_imperative_transfers' => '你已動用了一些錢嗎?那麼把它寫下來:', + 'no_transactions_create_transfers' => '新增轉帳', + 'no_piggies_title_default' => '我們來建立一個小豬撲滿!', + 'no_piggies_intro_default' => '您目前沒有小豬撲滿。您可以建立小豬撲滿來分別您的儲蓄,並追蹤您儲蓄的目標。', + 'no_piggies_imperative_default' => '您有想要儲蓄的東西嗎?建立一個小豬撲滿然後開始追蹤:', + 'no_piggies_create_default' => '創建一個新小豬撲滿', + 'no_bills_title_default' => '我們來建立一筆帳單!', + 'no_bills_intro_default' => '您目前沒有帳單。您可以建立帳單以追蹤您的日常支出,如房租與保險。', + 'no_bills_imperative_default' => '你們有這樣的普通帳單嗎?創建帳單並跟蹤您的付款:', + 'no_bills_create_default' => '建立新帳單', // recurring transactions - 'create_right_now' => 'Create right now', - 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', - 'recurrences' => '週期性交易', - 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', - 'recurring_calendar_view' => '月曆', - 'no_recurring_title_default' => '一起建立一筆週期性交易!', - 'no_recurring_intro_default' => '您目前沒有週期性交易。您可使用此功能讓 Firefly III 自動為您建立交易。', - 'no_recurring_imperative_default' => '這是一個非常進階的功能,也極為有用。請確定在繼續之前,您已閱讀右上角 (?) 圖示的文件說明。', - 'no_recurring_create_default' => '建立一筆週期性交易', - 'make_new_recurring' => '建立一筆週期性交易', - 'recurring_daily' => '每天', - 'recurring_weekly' => '每星期:weekday', - 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', - 'recurring_monthly' => '每月第 :dayOfMonth 天', - 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', - 'recurring_ndom' => '每月第 :dayOfMonth 個 :weekday', - 'recurring_yearly' => '每年的:date', - 'overview_for_recurrence' => '週期性交易 ":title" 概覽', - 'warning_duplicates_repetitions' => '在少數情況下,日期在此清單上會顯示兩次,這在多個重複衝突之下會發生。Firefly III 每天只會產生一條紀錄。', - 'created_transactions' => '關聯交易', - 'expected_withdrawals' => '預期提款', - 'expected_deposits' => '預期存款', - 'expected_transfers' => '預期轉帳', - 'created_withdrawals' => '已建立提款', - 'created_deposits' => '已建立存款', - 'created_transfers' => '已建立轉帳', - 'recurring_info' => 'Recurring transaction :count / :total', - 'created_from_recurrence' => '由週期性交易 ":title" (#:id) 所建立', - 'recurring_never_cron' => '用來支援週期性交易的 cron job 似乎沒有運行過,這在您剛安裝 Firefly III 沒多久時是非常正常的,但能越快處理越好。請使用本頁右上角的 (?)-圖示查閱說明頁面。', - 'recurring_cron_long_ago' => '用來支援週期性交易的 cron job 自上次運行已超過了 36 小時,您確定您已正確設定了嗎?請使用本頁右上角的 (?)-圖示查閱說明頁面。', + 'create_right_now' => 'Create right now', + 'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?', + 'recurrences' => '週期性交易', + 'repeat_until_in_past' => 'This recurring transaction stopped repeating on :date.', + 'recurring_calendar_view' => '月曆', + 'no_recurring_title_default' => '一起建立一筆週期性交易!', + 'no_recurring_intro_default' => '您目前沒有週期性交易。您可使用此功能讓 Firefly III 自動為您建立交易。', + 'no_recurring_imperative_default' => '這是一個非常進階的功能,也極為有用。請確定在繼續之前,您已閱讀右上角 (?) 圖示的文件說明。', + 'no_recurring_create_default' => '建立一筆週期性交易', + 'make_new_recurring' => '建立一筆週期性交易', + 'recurring_daily' => '每天', + 'recurring_weekly' => '每星期:weekday', + 'recurring_weekly_skip' => 'Every :skip(st/nd/rd/th) week on :weekday', + 'recurring_monthly' => '每月第 :dayOfMonth 天', + 'recurring_monthly_skip' => 'Every :skip(st/nd/rd/th) month on the :dayOfMonth(st/nd/rd/th) day', + 'recurring_ndom' => '每月第 :dayOfMonth 個 :weekday', + 'recurring_yearly' => '每年的:date', + 'overview_for_recurrence' => '週期性交易 ":title" 概覽', + 'warning_duplicates_repetitions' => '在少數情況下,日期在此清單上會顯示兩次,這在多個重複衝突之下會發生。Firefly III 每天只會產生一條紀錄。', + 'created_transactions' => '關聯交易', + 'expected_withdrawals' => '預期提款', + 'expected_deposits' => '預期存款', + 'expected_transfers' => '預期轉帳', + 'created_withdrawals' => '已建立提款', + 'created_deposits' => '已建立存款', + 'created_transfers' => '已建立轉帳', + 'recurring_info' => 'Recurring transaction :count / :total', + 'created_from_recurrence' => '由週期性交易 ":title" (#:id) 所建立', + 'recurring_never_cron' => '用來支援週期性交易的 cron job 似乎沒有運行過,這在您剛安裝 Firefly III 沒多久時是非常正常的,但能越快處理越好。請使用本頁右上角的 (?)-圖示查閱說明頁面。', + 'recurring_cron_long_ago' => '用來支援週期性交易的 cron job 自上次運行已超過了 36 小時,您確定您已正確設定了嗎?請使用本頁右上角的 (?)-圖示查閱說明頁面。', - 'create_new_recurrence' => '建立新週期性交易', - 'help_first_date' => '表示第一筆預期的週期性交易,應於未來發生。', - 'help_first_date_no_past' => '表示第一筆預期的週期交易,Firefly III 不會建立過去的交易。', - 'no_currency' => '(沒有貨幣)', - 'mandatory_for_recurring' => '必填週期性資訊', - 'mandatory_for_transaction' => '必填交易資訊', - 'optional_for_recurring' => '選擇性週期性資訊', - 'optional_for_transaction' => '選擇性交易資訊', - 'change_date_other_options' => '更改 "第一個日期" 以查看更多選項。', - 'mandatory_fields_for_tranaction' => '當交易建立完後這裡的數值會結束', - 'click_for_calendar' => '點這裡開啟顯示週期性交易的行事曆', - 'repeat_forever' => '永遠重複', - 'repeat_until_date' => '重複至特定日期', - 'repeat_times' => '重複一定次數', - 'recurring_skips_one' => '每隔一個', - 'recurring_skips_more' => '略過 :count 個情況', - 'store_new_recurrence' => '儲存週期交易', - 'stored_new_recurrence' => '週期性交易 ":title" 已成功儲存', - 'edit_recurrence' => '編輯週期性交易 ":title"', - 'recurring_repeats_until' => '重複至 :date', - 'recurring_repeats_forever' => '永遠重複', - 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', - 'update_recurrence' => '更新定期交易記錄', - 'updated_recurrence' => '更新了定期交易記錄:title', - 'recurrence_is_inactive' => '此週期性交易並未啟用亦不會自動產生新交易。', - 'delete_recurring' => '刪除定期交易 ":title"', - 'new_recurring_transaction' => '新週期性交易', - 'help_weekend' => '當週期性交易落於週六及週日時, Firefly III 該如何應處?', - 'do_nothing' => '仍建立交易', - 'skip_transaction' => 'Skip the occurrence', - 'jump_to_friday' => '於前一個週五建立交易', - 'jump_to_monday' => '於次一個週一建立交易', - 'will_jump_friday' => '將於週五建立交易,而非週末。', - 'will_jump_monday' => '將於週一建立交易,而非週末。', - 'except_weekends' => '例外的周末', - 'recurrence_deleted' => '週期性交易 ":title" 已刪除', + 'create_new_recurrence' => '建立新週期性交易', + 'help_first_date' => '表示第一筆預期的週期性交易,應於未來發生。', + 'help_first_date_no_past' => '表示第一筆預期的週期交易,Firefly III 不會建立過去的交易。', + 'no_currency' => '(沒有貨幣)', + 'mandatory_for_recurring' => '必填週期性資訊', + 'mandatory_for_transaction' => '必填交易資訊', + 'optional_for_recurring' => '選擇性週期性資訊', + 'optional_for_transaction' => '選擇性交易資訊', + 'change_date_other_options' => '更改 "第一個日期" 以查看更多選項。', + 'mandatory_fields_for_tranaction' => '當交易建立完後這裡的數值會結束', + 'click_for_calendar' => '點這裡開啟顯示週期性交易的行事曆', + 'repeat_forever' => '永遠重複', + 'repeat_until_date' => '重複至特定日期', + 'repeat_times' => '重複一定次數', + 'recurring_skips_one' => '每隔一個', + 'recurring_skips_more' => '略過 :count 個情況', + 'store_new_recurrence' => '儲存週期交易', + 'stored_new_recurrence' => '週期性交易 ":title" 已成功儲存', + 'edit_recurrence' => '編輯週期性交易 ":title"', + 'recurring_repeats_until' => '重複至 :date', + 'recurring_repeats_forever' => '永遠重複', + 'recurring_repeats_x_times' => 'Repeats :count time|Repeats :count times', + 'update_recurrence' => '更新定期交易記錄', + 'updated_recurrence' => '更新了定期交易記錄:title', + 'recurrence_is_inactive' => '此週期性交易並未啟用亦不會自動產生新交易。', + 'delete_recurring' => '刪除定期交易 ":title"', + 'new_recurring_transaction' => '新週期性交易', + 'help_weekend' => '當週期性交易落於週六及週日時, Firefly III 該如何應處?', + 'do_nothing' => '仍建立交易', + 'skip_transaction' => 'Skip the occurrence', + 'jump_to_friday' => '於前一個週五建立交易', + 'jump_to_monday' => '於次一個週一建立交易', + 'will_jump_friday' => '將於週五建立交易,而非週末。', + 'will_jump_monday' => '將於週一建立交易,而非週末。', + 'except_weekends' => '例外的周末', + 'recurrence_deleted' => '週期性交易 ":title" 已刪除', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -2685,71 +2709,69 @@ return [ * */ - // new lines for summary controller. - 'box_balance_in_currency' => '餘額 (:currency)', - 'box_spent_in_currency' => '已花費 (:currency)', - 'box_earned_in_currency' => '盈利 (:currency)', - 'box_budgeted_in_currency' => 'Budgeted (:currency)', - 'box_bill_paid_in_currency' => '已付帳單 (:currency)', - 'box_bill_unpaid_in_currency' => '未付帳單 (:currency)', - 'box_left_to_spend_in_currency' => '可供花費 (:currency)', - 'box_net_worth_in_currency' => '淨值 (:currency)', - 'box_spend_per_day' => '每日可供花費: :amount', + 'box_balance_in_currency' => '餘額 (:currency)', + 'box_spent_in_currency' => '已花費 (:currency)', + 'box_earned_in_currency' => '盈利 (:currency)', + 'box_budgeted_in_currency' => 'Budgeted (:currency)', + 'box_bill_paid_in_currency' => '已付帳單 (:currency)', + 'box_bill_unpaid_in_currency' => '未付帳單 (:currency)', + 'box_left_to_spend_in_currency' => '可供花費 (:currency)', + 'box_net_worth_in_currency' => '淨值 (:currency)', + 'box_spend_per_day' => '每日可供花費: :amount', // debug page - 'debug_page' => 'Debug page', - 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', - 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', - 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', + 'debug_page' => 'Debug page', + 'debug_submit_instructions' => 'If you are running into problems, you can use the information in this box as debug information. Please copy-and-paste into a new or existing GitHub issue. It will generate a beautiful table that can be used to quickly diagnose your problem.', + 'debug_pretty_table' => 'If you copy/paste the box below into a GitHub issue it will generate a table. Please do not surround this text with backticks or quotes.', + 'debug_additional_data' => 'You may also share the content of the box below. You can also copy-and-paste this into a new or existing GitHub issue. However, the content of this box may contain private information such as account names, transaction details or email addresses.', // object groups - 'object_groups_menu_bar' => 'Groups', - 'object_groups_page_title' => 'Groups', - 'object_groups_breadcrumb' => 'Groups', - 'object_groups_index' => 'Overview', - 'object_groups' => 'Groups', - 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', - 'object_group_title' => 'Title', - 'edit_object_group' => 'Edit group ":title"', - 'delete_object_group' => 'Delete group ":title"', - 'update_object_group' => 'Update group', - 'updated_object_group' => 'Successfully updated group ":title"', - 'deleted_object_group' => 'Successfully deleted group ":title"', - 'object_group' => 'Group', + 'object_groups_menu_bar' => 'Groups', + 'object_groups_page_title' => 'Groups', + 'object_groups_breadcrumb' => 'Groups', + 'object_groups_index' => 'Overview', + 'object_groups' => 'Groups', + 'object_groups_empty_explain' => 'Some things in Firefly III can be divided into groups. Piggy banks for example, feature a "Group" field in the edit and create screens. When you set this field, you can edit the names and the order of the groups on this page. For more information, check out the help-pages in the top right corner, under the (?)-icon.', + 'object_group_title' => 'Title', + 'edit_object_group' => 'Edit group ":title"', + 'delete_object_group' => 'Delete group ":title"', + 'update_object_group' => 'Update group', + 'updated_object_group' => 'Successfully updated group ":title"', + 'deleted_object_group' => 'Successfully deleted group ":title"', + 'object_group' => 'Group', // other stuff - 'placeholder' => '[Placeholder]', + 'placeholder' => '[Placeholder]', // audit log entries - 'audit_log_entries' => 'Audit log entries', - 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', - 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', - 'ale_action_clear_budget' => 'Removed from budget', - 'ale_action_update_group_title' => 'Updated transaction group title', - 'ale_action_update_date' => 'Updated transaction date', - 'ale_action_update_order' => 'Updated transaction order', - 'ale_action_clear_category' => 'Removed from category', - 'ale_action_clear_notes' => 'Removed notes', - 'ale_action_clear_tag' => 'Cleared tag', - 'ale_action_clear_all_tags' => 'Cleared all tags', - 'ale_action_set_bill' => 'Linked to bill', - 'ale_action_switch_accounts' => 'Switched source and destination account', - 'ale_action_set_budget' => 'Set budget', - 'ale_action_set_category' => 'Set category', - 'ale_action_set_source' => 'Set source account', - 'ale_action_set_destination' => 'Set destination account', - 'ale_action_update_transaction_type' => 'Changed transaction type', - 'ale_action_update_notes' => 'Changed notes', - 'ale_action_update_description' => 'Changed description', - 'ale_action_add_to_piggy' => 'Piggy bank', - 'ale_action_remove_from_piggy' => 'Piggy bank', - 'ale_action_add_tag' => 'Added tag', + 'audit_log_entries' => 'Audit log entries', + 'ale_action_log_add' => 'Added :amount to piggy bank ":name"', + 'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"', + 'ale_action_clear_budget' => 'Removed from budget', + 'ale_action_update_group_title' => 'Updated transaction group title', + 'ale_action_update_date' => 'Updated transaction date', + 'ale_action_update_order' => 'Updated transaction order', + 'ale_action_clear_category' => 'Removed from category', + 'ale_action_clear_notes' => 'Removed notes', + 'ale_action_clear_tag' => 'Cleared tag', + 'ale_action_clear_all_tags' => 'Cleared all tags', + 'ale_action_set_bill' => 'Linked to bill', + 'ale_action_switch_accounts' => 'Switched source and destination account', + 'ale_action_set_budget' => 'Set budget', + 'ale_action_set_category' => 'Set category', + 'ale_action_set_source' => 'Set source account', + 'ale_action_set_destination' => 'Set destination account', + 'ale_action_update_transaction_type' => 'Changed transaction type', + 'ale_action_update_notes' => 'Changed notes', + 'ale_action_update_description' => 'Changed description', + 'ale_action_add_to_piggy' => 'Piggy bank', + 'ale_action_remove_from_piggy' => 'Piggy bank', + 'ale_action_add_tag' => 'Added tag', // dashboard - 'enable_auto_convert' => 'Enable currency conversion', - 'disable_auto_convert' => 'Disable currency conversion', - + 'enable_auto_convert' => 'Enable currency conversion', + 'disable_auto_convert' => 'Disable currency conversion', ]; /* diff --git a/resources/lang/zh_TW/form.php b/resources/lang/zh_TW/form.php index 9e61185aa0..118cf8cecb 100644 --- a/resources/lang/zh_TW/form.php +++ b/resources/lang/zh_TW/form.php @@ -31,51 +31,50 @@ * */ - declare(strict_types=1); return [ // new user: - 'bank_name' => '銀行名稱', - 'bank_balance' => '餘額', - 'savings_balance' => '儲蓄餘額', - 'credit_card_limit' => '信用卡額度', - 'automatch' => '自動配對', - 'skip' => '略過', - 'enabled' => '已啟用', - 'name' => '名稱', - 'active' => '啟用', - 'amount_min' => '最小金額', - 'amount_max' => '最大金額', - 'match' => '配對於', - 'strict' => '嚴謹模式', - 'repeat_freq' => '重複', - 'object_group' => 'Group', - 'location' => 'Location', - 'update_channel' => 'Update channel', - 'currency_id' => '貨幣', - 'transaction_currency_id' => '貨幣', - 'auto_budget_currency_id' => 'Currency', - 'external_ip' => '您的伺服器外部IP', - 'attachments' => '附加檔案', - 'BIC' => 'BIC', - 'verify_password' => '驗證密碼安全性', - 'source_account' => '來源帳戶', - 'destination_account' => '目標帳戶', - 'asset_destination_account' => '目標帳戶', - 'include_net_worth' => '包括淨值', - 'asset_source_account' => '來源帳戶', - 'journal_description' => '說明', - 'note' => '備註', - 'currency' => '貨幣', - 'account_id' => '資產帳戶', - 'budget_id' => '預算', - 'bill_id' => 'Bill', - 'opening_balance' => '初始餘額', - 'tagMode' => '標籤模式', - 'virtual_balance' => '虛擬餘額', + 'bank_name' => '銀行名稱', + 'bank_balance' => '餘額', + 'savings_balance' => '儲蓄餘額', + 'credit_card_limit' => '信用卡額度', + 'automatch' => '自動配對', + 'skip' => '略過', + 'enabled' => '已啟用', + 'name' => '名稱', + 'active' => '啟用', + 'amount_min' => '最小金額', + 'amount_max' => '最大金額', + 'match' => '配對於', + 'strict' => '嚴謹模式', + 'repeat_freq' => '重複', + 'object_group' => 'Group', + 'location' => 'Location', + 'update_channel' => 'Update channel', + 'currency_id' => '貨幣', + 'transaction_currency_id' => '貨幣', + 'auto_budget_currency_id' => 'Currency', + 'external_ip' => '您的伺服器外部IP', + 'attachments' => '附加檔案', + 'BIC' => 'BIC', + 'verify_password' => '驗證密碼安全性', + 'source_account' => '來源帳戶', + 'destination_account' => '目標帳戶', + 'asset_destination_account' => '目標帳戶', + 'include_net_worth' => '包括淨值', + 'asset_source_account' => '來源帳戶', + 'journal_description' => '說明', + 'note' => '備註', + 'currency' => '貨幣', + 'account_id' => '資產帳戶', + 'budget_id' => '預算', + 'bill_id' => 'Bill', + 'opening_balance' => '初始餘額', + 'tagMode' => '標籤模式', + 'virtual_balance' => '虛擬餘額', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -86,7 +85,6 @@ return [ * */ - 'targetamount' => '目標金額', 'account_role' => '帳戶角色', 'opening_balance_date' => '初始餘額日期', @@ -180,7 +178,7 @@ return [ 'journal_areYouSure' => '你真的要刪除這個描述為 ":description" 的交易嗎?', 'mass_journal_are_you_sure' => '確定刪除這些交易?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -191,7 +189,6 @@ return [ * */ - 'tag_areYouSure' => '你真的要要刪除標籤 ":tag" 嗎?', 'journal_link_areYouSure' => '您確定您要刪除 :source:destination 間的連結嗎?', 'linkType_areYouSure' => '您確定您要刪除連結類型 ":name" (":inward" / ":outward")?', @@ -230,7 +227,6 @@ return [ 'album' => '專輯', 'song' => '歌曲', - // admin 'domain' => '網域', 'single_user_mode' => '關閉使用者註冊', @@ -256,7 +252,7 @@ return [ 'fints_account' => 'FinTS 帳戶', 'local_account' => 'Firefly III 帳戶', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -267,42 +263,41 @@ return [ * */ - - 'from_date' => '開始自', - 'to_date' => '日期至', - 'due_date' => '到期日', - 'payment_date' => '付款日期', - 'invoice_date' => '發票日期', - 'internal_reference' => '內部參考', - 'inward' => '向內描述', - 'outward' => '外向描述', - 'rule_group_id' => '規則群組', - 'transaction_description' => '交易描述', - 'first_date' => '初次日期', - 'transaction_type' => '交易類型', - 'repeat_until' => '重複直到', - 'recurring_description' => '定期交易描述', - 'repetition_type' => '重複類型', - 'foreign_currency_id' => '外幣', - 'repetition_end' => '重複結束', - 'repetitions' => '重複', - 'calendar' => '日曆', - 'weekend' => '週末', - 'client_secret' => '客戶端金鑰', - 'withdrawal_destination_id' => 'Destination account', - 'deposit_source_id' => 'Source account', - 'expected_on' => 'Expected on', - 'paid' => 'Paid', - 'auto_budget_type' => 'Auto-budget', - 'auto_budget_amount' => 'Auto-budget amount', - 'auto_budget_period' => 'Auto-budget period', - 'collected' => 'Collected', - 'submitted' => 'Submitted', - 'key' => 'Key', - 'value' => 'Content of record', - 'webhook_delivery' => 'Delivery', - 'webhook_response' => 'Response', - 'webhook_trigger' => 'Trigger', + 'from_date' => '開始自', + 'to_date' => '日期至', + 'due_date' => '到期日', + 'payment_date' => '付款日期', + 'invoice_date' => '發票日期', + 'internal_reference' => '內部參考', + 'inward' => '向內描述', + 'outward' => '外向描述', + 'rule_group_id' => '規則群組', + 'transaction_description' => '交易描述', + 'first_date' => '初次日期', + 'transaction_type' => '交易類型', + 'repeat_until' => '重複直到', + 'recurring_description' => '定期交易描述', + 'repetition_type' => '重複類型', + 'foreign_currency_id' => '外幣', + 'repetition_end' => '重複結束', + 'repetitions' => '重複', + 'calendar' => '日曆', + 'weekend' => '週末', + 'client_secret' => '客戶端金鑰', + 'withdrawal_destination_id' => 'Destination account', + 'deposit_source_id' => 'Source account', + 'expected_on' => 'Expected on', + 'paid' => 'Paid', + 'auto_budget_type' => 'Auto-budget', + 'auto_budget_amount' => 'Auto-budget amount', + 'auto_budget_period' => 'Auto-budget period', + 'collected' => 'Collected', + 'submitted' => 'Submitted', + 'key' => 'Key', + 'value' => 'Content of record', + 'webhook_delivery' => 'Delivery', + 'webhook_response' => 'Response', + 'webhook_trigger' => 'Trigger', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/zh_TW/intro.php b/resources/lang/zh_TW/intro.php index 67374ad1dd..de399635ac 100644 --- a/resources/lang/zh_TW/intro.php +++ b/resources/lang/zh_TW/intro.php @@ -31,42 +31,40 @@ * */ - declare(strict_types=1); return [ // index - 'index_intro' => '歡迎來到 Firefly III 首頁。誠邀您花一點時間,看看這介紹,瞭解一下 Firefly III 如何運作。', - 'index_accounts-chart' => '此圖表顯示資產帳戶的目前餘額,哪些帳戶在此顯示,可在偏好設定中選擇。', - 'index_box_out_holder' => '這小方塊 (以及旁邊的) 給您一個財務狀況的快速概覽。', - 'index_help' => '如果您需要有關頁面或表單的説明,請按此按鈕。', - 'index_outro' => 'Firefly III 大部分頁面會以這樣的小介紹開始,如有問題或意見,不妨與我聯繫。祝您使用得心應手!', - 'index_sidebar-toggle' => '若要建立新的交易記錄、帳戶或其他內容,請使用此圖示下的選單。', - 'index_cash_account' => '目前為止就建立了這些帳戶。您可以用現金帳戶來追蹤現金支出,如果您喜歡。', + 'index_intro' => '歡迎來到 Firefly III 首頁。誠邀您花一點時間,看看這介紹,瞭解一下 Firefly III 如何運作。', + 'index_accounts-chart' => '此圖表顯示資產帳戶的目前餘額,哪些帳戶在此顯示,可在偏好設定中選擇。', + 'index_box_out_holder' => '這小方塊 (以及旁邊的) 給您一個財務狀況的快速概覽。', + 'index_help' => '如果您需要有關頁面或表單的説明,請按此按鈕。', + 'index_outro' => 'Firefly III 大部分頁面會以這樣的小介紹開始,如有問題或意見,不妨與我聯繫。祝您使用得心應手!', + 'index_sidebar-toggle' => '若要建立新的交易記錄、帳戶或其他內容,請使用此圖示下的選單。', + 'index_cash_account' => '目前為止就建立了這些帳戶。您可以用現金帳戶來追蹤現金支出,如果您喜歡。', // transactions - 'transactions_create_basic_info' => 'Enter the basic information of your transaction. Source, destination, date and description.', - 'transactions_create_amount_info' => 'Enter the amount of the transaction. If necessary the fields will auto-update for foreign amount info.', - 'transactions_create_optional_info' => 'All of these fields are optional. Adding meta-data here will make your transactions better organised.', - 'transactions_create_split' => 'If you want to split a transaction, add more splits with this button', + 'transactions_create_basic_info' => 'Enter the basic information of your transaction. Source, destination, date and description.', + 'transactions_create_amount_info' => 'Enter the amount of the transaction. If necessary the fields will auto-update for foreign amount info.', + 'transactions_create_optional_info' => 'All of these fields are optional. Adding meta-data here will make your transactions better organised.', + 'transactions_create_split' => 'If you want to split a transaction, add more splits with this button', // create account: - 'accounts_create_iban' => '帳戶若設定有效的 IBAN,有助日後匯入資料。', - 'accounts_create_asset_opening_balance' => '資產帳戶可以設定一個 "初始餘額",表示此帳戶在 Firefly III 中開始時的紀錄。', - 'accounts_create_asset_currency' => 'Fireflly III 支援多種貨幣。資產帳戶有一種主要貨幣,須在此設定。', - 'accounts_create_asset_virtual' => '有時,您或會想給予帳戶一個虛擬額度:即在實際餘額之上加減一個定額。', + 'accounts_create_iban' => '帳戶若設定有效的 IBAN,有助日後匯入資料。', + 'accounts_create_asset_opening_balance' => '資產帳戶可以設定一個 "初始餘額",表示此帳戶在 Firefly III 中開始時的紀錄。', + 'accounts_create_asset_currency' => 'Fireflly III 支援多種貨幣。資產帳戶有一種主要貨幣,須在此設定。', + 'accounts_create_asset_virtual' => '有時,您或會想給予帳戶一個虛擬額度:即在實際餘額之上加減一個定額。', // budgets index - 'budgets_index_intro' => '預算用來管理您的財務,是 Firefly III 的 + 'budgets_index_intro' => '預算用來管理您的財務,是 Firefly III 的 核心功能之一。', - 'budgets_index_set_budget' => '設定每個時期的總預算,讓 Firefly III 能告訴您,所有可用的錢是否都已設定預算。', - 'budgets_index_see_expenses_bar' => '消費金額會慢慢地填滿這個橫條。', - 'budgets_index_navigate_periods' => '往前後不同時期,輕鬆預先設定預算。', - 'budgets_index_new_budget' => '隨意建立新預算。', - 'budgets_index_list_of_budgets' => '在此表上設定每個預算的金額,查看表現如何。', - 'budgets_index_outro' => '要瞭解有關預算的詳細資訊,請查看右上角的説明圖示。', + 'budgets_index_see_expenses_bar' => '消費金額會慢慢地填滿這個橫條。', + 'budgets_index_navigate_periods' => '往前後不同時期,輕鬆預先設定預算。', + 'budgets_index_new_budget' => '隨意建立新預算。', + 'budgets_index_list_of_budgets' => '在此表上設定每個預算的金額,查看表現如何。', + 'budgets_index_outro' => '要瞭解有關預算的詳細資訊,請查看右上角的説明圖示。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -77,26 +75,25 @@ return [ * */ - // reports (index) - 'reports_index_intro' => '從這些報表洞察您的詳細財務狀況。', - 'reports_index_inputReportType' => '挑一種報表。查看說明頁面瞭解各報表展示的內容。', - 'reports_index_inputAccountsSelect' => '您可以根據需要排除或包括資產帳戶。', - 'reports_index_inputDateRange' => '所選日期範圍完全由您決定:從1天到10年不等。', - 'reports_index_extra-options-box' => '根據您選擇的報表,您可以在此處選擇額外的篩選標準和選項。更改報表類型時,請查看此區塊。', + 'reports_index_intro' => '從這些報表洞察您的詳細財務狀況。', + 'reports_index_inputReportType' => '挑一種報表。查看說明頁面瞭解各報表展示的內容。', + 'reports_index_inputAccountsSelect' => '您可以根據需要排除或包括資產帳戶。', + 'reports_index_inputDateRange' => 'The selected date range is entirely up to you: from one day to 10 years or more.', + 'reports_index_extra-options-box' => '根據您選擇的報表,您可以在此處選擇額外的篩選標準和選項。更改報表類型時,請查看此區塊。', // reports (reports) - 'reports_report_default_intro' => '這份報表可快速全面概覽您的個人財務狀況。如有未羅列的項目,歡迎與我聯繫!', - 'reports_report_audit_intro' => '這份報表可讓您洞悉資產帳戶的詳細狀況。', - 'reports_report_audit_optionsBox' => '在這些選取方塊勾選您感興趣想顯示的欄。', + 'reports_report_default_intro' => '這份報表可快速全面概覽您的個人財務狀況。如有未羅列的項目,歡迎與我聯繫!', + 'reports_report_audit_intro' => '這份報表可讓您洞悉資產帳戶的詳細狀況。', + 'reports_report_audit_optionsBox' => '在這些選取方塊勾選您感興趣想顯示的欄。', - 'reports_report_category_intro' => '此報表可讓您洞悉一或多個分類的詳細狀況。', - 'reports_report_category_pieCharts' => '這些圖表可讓您洞悉按分類或帳戶的收支詳細狀況。', - 'reports_report_category_incomeAndExpensesChart' => '此圖表按分類顯示您的收支。', + 'reports_report_category_intro' => '此報表可讓您洞悉一或多個分類的詳細狀況。', + 'reports_report_category_pieCharts' => '這些圖表可讓您洞悉按分類或帳戶的收支詳細狀況。', + 'reports_report_category_incomeAndExpensesChart' => '此圖表按分類顯示您的收支。', - 'reports_report_tag_intro' => '此報表可讓您洞悉一或多個標籤的詳細狀況。', - 'reports_report_tag_pieCharts' => '這些圖表可讓您洞悉按標籤、帳戶、分類或預算的收支詳細狀況。', - 'reports_report_tag_incomeAndExpensesChart' => '此圖表按標籤顯示您的收支。', + 'reports_report_tag_intro' => '此報表可讓您洞悉一或多個標籤的詳細狀況。', + 'reports_report_tag_pieCharts' => '這些圖表可讓您洞悉按標籤、帳戶、分類或預算的收支詳細狀況。', + 'reports_report_tag_incomeAndExpensesChart' => '此圖表按標籤顯示您的收支。', 'reports_report_budget_intro' => '此報表可讓您洞悉一或多個預算的詳細狀況。', 'reports_report_budget_pieCharts' => '這些圖表可讓您洞悉按預算或帳戶的支出詳細狀況。', @@ -115,7 +112,7 @@ return [ 'piggy-banks_index_button' => '進度橫條旁有兩個按鈕 (+ 和-),可以在每個小豬撲滿中加減金額。', 'piggy-banks_index_accountStatus' => '有小豬撲滿的資產帳戶,會在此表格中列出狀態。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -126,7 +123,6 @@ return [ * */ - // create piggy 'piggy-banks_create_name' => '您的目標為何?一張新沙發、一台相機,還是應急備用?', 'piggy-banks_create_date' => '您可以設定小豬撲滿的目標日期或期限。', @@ -149,7 +145,7 @@ return [ // create bill 'bills_create_intro' => '使用帳單來追蹤您每段時期到期的金額,比如是租金、保險或抵押貸款等支出。', 'bills_create_name' => '訂下一個顧名思義的名稱,如 "租金" 或 "健康保險"。', - //'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', + // 'bills_create_match' => 'To match transactions, use terms from those transactions or the expense account involved. All words must match.', 'bills_create_amount_min_holder' => '選擇此帳單的最小和最大金額。', 'bills_create_repeat_freq_holder' => '大部分帳單每月重複一次,但頻率可在此另設。', 'bills_create_skip_holder' => '如果帳單每兩週重複一次,"略過" 欄位則應設為 "1",以便每隔一週跳一次。', @@ -169,7 +165,7 @@ return [ 'rules_create_test_rule_triggers' => '使用此按鈕可以查看哪些交易記錄將配對您的規則。', 'rules_create_actions' => '隨您設定多少動作。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -180,7 +176,6 @@ return [ * */ - // preferences 'preferences_index_tabs' => '這些標籤頁尚有更多可用選項。', diff --git a/resources/lang/zh_TW/list.php b/resources/lang/zh_TW/list.php index f4554aa780..37ecec4f54 100644 --- a/resources/lang/zh_TW/list.php +++ b/resources/lang/zh_TW/list.php @@ -31,45 +31,44 @@ * */ - declare(strict_types=1); return [ - 'buttons' => '按鈕', - 'icon' => '圖示', - 'id' => 'ID', - 'create_date' => '建立於', - 'update_date' => '更新於', - 'updated_at' => '更新於', - 'balance_before' => '交易前餘額', - 'balance_after' => '交易後餘額', - 'name' => '名稱', - 'role' => '角色', - 'currentBalance' => '目前餘額', - 'linked_to_rules' => '相關規則', - 'active' => '是否啟用?', - 'percentage' => '百分比', - 'recurring_transaction' => '週期性交易', - 'next_due' => 'Next due', - 'transaction_type' => '類型', - 'lastActivity' => '上次活動', - 'balanceDiff' => '餘額差', - 'other_meta_data' => 'Other meta data', - 'invited_at' => 'Invited at', - 'expires' => 'Invitation expires', - 'invited_by' => 'Invited by', - 'invite_link' => 'Invite link', - 'account_type' => '帳戶類型', - 'created_at' => '建立於', - 'account' => '帳戶', - 'external_url' => '外部網址', - 'matchingAmount' => '金額', - 'destination' => '目標', - 'source' => '來源', - 'next_expected_match' => '下一個預期的配對', - 'automatch' => '自動配對?', + 'buttons' => '按鈕', + 'icon' => '圖示', + 'id' => 'ID', + 'create_date' => '建立於', + 'update_date' => '更新於', + 'updated_at' => '更新於', + 'balance_before' => '交易前餘額', + 'balance_after' => '交易後餘額', + 'name' => '名稱', + 'role' => '角色', + 'currentBalance' => '目前餘額', + 'linked_to_rules' => '相關規則', + 'active' => '是否啟用?', + 'percentage' => '百分比', + 'recurring_transaction' => '週期性交易', + 'next_due' => 'Next due', + 'transaction_type' => '類型', + 'lastActivity' => '上次活動', + 'balanceDiff' => '餘額差', + 'other_meta_data' => 'Other meta data', + 'invited_at' => 'Invited at', + 'expires' => 'Invitation expires', + 'invited_by' => 'Invited by', + 'invite_link' => 'Invite link', + 'account_type' => '帳戶類型', + 'created_at' => '建立於', + 'account' => '帳戶', + 'external_url' => '外部網址', + 'matchingAmount' => '金額', + 'destination' => '目標', + 'source' => '來源', + 'next_expected_match' => '下一個預期的配對', + 'automatch' => '自動配對?', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -80,7 +79,6 @@ return [ * */ - 'repeat_freq' => '重複', 'description' => '描述', 'amount' => '金額', @@ -147,7 +145,7 @@ return [ 'account_at_bunq' => 'bunq 帳戶', 'file_name' => '檔案名稱', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -158,34 +156,32 @@ return [ * */ - - 'file_size' => '檔案大小', - 'file_type' => '檔案類型', - 'attached_to' => '附加到', - 'file_exists' => '檔案已存在', - 'spectre_bank' => '銀行', - 'spectre_last_use' => '上次登錄', - 'spectre_status' => '狀態', - 'bunq_payment_id' => 'bunq 付款 ID', - 'repetitions' => '重複', - 'title' => '標題', - 'transaction_s' => '交易', - 'field' => '欄位', - 'value' => '值', - 'interest' => '利率', - 'interest_period' => 'Interest period', - 'liability_type' => '負債類型', - 'liability_direction' => 'Liability in/out', - 'end_date' => '結束日期', - 'payment_info' => 'Payment information', - 'expected_info' => 'Next expected transaction', - 'start_date' => '開始日期', - 'trigger' => '觸發器', - 'response' => '回應', - 'delivery' => 'Delivery', - 'url' => 'URL', - 'secret' => 'Secret', - + 'file_size' => '檔案大小', + 'file_type' => '檔案類型', + 'attached_to' => '附加到', + 'file_exists' => '檔案已存在', + 'spectre_bank' => '銀行', + 'spectre_last_use' => '上次登錄', + 'spectre_status' => '狀態', + 'bunq_payment_id' => 'bunq 付款 ID', + 'repetitions' => '重複', + 'title' => '標題', + 'transaction_s' => '交易', + 'field' => '欄位', + 'value' => '值', + 'interest' => '利率', + 'interest_period' => 'Interest period', + 'liability_type' => '負債類型', + 'liability_direction' => 'Liability in/out', + 'end_date' => '結束日期', + 'payment_info' => 'Payment information', + 'expected_info' => 'Next expected transaction', + 'start_date' => '開始日期', + 'trigger' => '觸發器', + 'response' => '回應', + 'delivery' => 'Delivery', + 'url' => 'URL', + 'secret' => 'Secret', ]; /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. diff --git a/resources/lang/zh_TW/pagination.php b/resources/lang/zh_TW/pagination.php index 6bf68f1737..3447d880e7 100644 --- a/resources/lang/zh_TW/pagination.php +++ b/resources/lang/zh_TW/pagination.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/zh_TW/passwords.php b/resources/lang/zh_TW/passwords.php index a20432bb50..8f7acc23d2 100644 --- a/resources/lang/zh_TW/passwords.php +++ b/resources/lang/zh_TW/passwords.php @@ -31,7 +31,6 @@ * */ - declare(strict_types=1); return [ diff --git a/resources/lang/zh_TW/rules.php b/resources/lang/zh_TW/rules.php index 389fb335ff..8d4b44ad76 100644 --- a/resources/lang/zh_TW/rules.php +++ b/resources/lang/zh_TW/rules.php @@ -1,6 +1,5 @@ 'Firefly III can\'t find subscription ":name"', 'no_notes_to_move' => 'The transaction has no notes to move to the description field', 'no_tags_to_remove' => 'The transaction has no tags to remove', + 'not_withdrawal' => 'The transaction is not a withdrawal', + 'not_deposit' => 'The transaction is not a deposit', 'cannot_find_tag' => 'Firefly III can\'t find tag ":tag"', 'cannot_find_asset' => 'Firefly III can\'t find asset account ":name"', 'cannot_find_accounts' => 'Firefly III can\'t find the source or destination account', diff --git a/resources/lang/zh_TW/validation.php b/resources/lang/zh_TW/validation.php index ddf01025fb..21464e3b1a 100644 --- a/resources/lang/zh_TW/validation.php +++ b/resources/lang/zh_TW/validation.php @@ -31,75 +31,80 @@ * */ - declare(strict_types=1); return [ - 'missing_where' => 'Array is missing "where"-clause', - 'missing_update' => 'Array is missing "update"-clause', - 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', - 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', - 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', - 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', - 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', - 'iban' => '這不是有效的 IBAN。', - 'zero_or_more' => '此數值不能為負數。', - 'date_or_time' => '此數值須為有效的日期或時間值 (ISO 8601)。', - 'source_equals_destination' => '來源帳戶與目標帳戶相同。', - 'unique_account_number_for_user' => '此帳戶號碼似乎已在使用。', - 'unique_iban_for_user' => '此 IBAN 似乎已在使用。', - 'deleted_user' => '受安全限制,您無法使用此電子郵件地址註冊。', - 'rule_trigger_value' => '此值不適用於選取的觸發器。', - 'rule_action_value' => '此值不適用於選取的動作。', - 'file_already_attached' => '上傳的檔案 ":name" 已附加到該物件上。', - 'file_attached' => '已成功上傳檔案 ":name"。', - 'must_exist' => '欄位 :attribute 的 ID 不存在於資料庫。', - 'all_accounts_equal' => '此欄位中的所有帳戶必須相等。', - 'group_title_mandatory' => '多於一筆交易時,須要群組標題。', - 'transaction_types_equal' => '所有拆分須為同一類型。', - 'invalid_transaction_type' => '交易類型無效。', - 'invalid_selection' => '您的選擇無效。', - 'belongs_user' => 'This value is linked to an object that does not seem to exist.', - 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', - 'at_least_one_transaction' => '至少需要一個交易。', - 'recurring_transaction_id' => 'Need at least one transaction.', - 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', - 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', - 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', - 'at_least_one_repetition' => '至少需要一次重複。', - 'require_repeat_until' => '要嘛重複次數,要嘛結束日期 (repeat_until),須二擇其一。', - 'require_currency_info' => '此欄位內容須要貨幣資訊。', - 'not_transfer_account' => 'This account is not an account that can be used for transfers.', - 'require_currency_amount' => '此欄位內容須要外幣資訊。', - 'require_foreign_currency' => 'This field requires a number', - 'require_foreign_dest' => 'This field value must match the currency of the destination account.', - 'require_foreign_src' => 'This field value must match the currency of the source account.', - 'equal_description' => '交易描述不應等同全域描述。', - 'file_invalid_mime' => '檔案 ":name" 類型為 ":mime",不允許上載。', - 'file_too_large' => '檔案 ":name" 過大。', - 'belongs_to_user' => ':attribute 的值未知。', - 'accepted' => ':attribute 必須被接受。', - 'bic' => '這不是有效的 BIC。', - 'at_least_one_trigger' => '規則必須至少有一個觸發器。', - 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', - 'at_least_one_action' => '規則必須至少有一個動作。', - 'at_least_one_active_action' => 'Rule must have at least one active action.', - 'base64' => '這不是有效的 base64 編碼資料。', - 'model_id_invalid' => '指定的 ID 對於此模型似乎無效。', - 'less' => ':attribute 必須小於 10,000,000。', - 'active_url' => ':attribute 不是有效的 URL。', - 'after' => ':attribute 必須是一個在 :date 之後的日期。', - 'date_after' => 'The start date must be before the end date.', - 'alpha' => ':attribute 只能包含字母。', - 'alpha_dash' => ':attribute 只能包含字母、數字和破折號。', - 'alpha_num' => ':attribute 只能包含數字和字母。', - 'array' => ':attribute 必須是一個陣列。', - 'unique_for_user' => '包括 :attribute 的紀錄已存在。', - 'before' => ':attribute 必須是一個在 :date 之前的日期。', - 'unique_object_for_user' => '這個名稱已被使用。', - 'unique_account_for_user' => '這個帳戶名稱已被使用。', + 'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.', + 'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.', + 'missing_where' => 'Array is missing "where"-clause', + 'missing_update' => 'Array is missing "update"-clause', + 'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause', + 'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause', + 'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.', + 'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.', + 'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.', + 'iban' => '這不是有效的 IBAN。', + 'zero_or_more' => '此數值不能為負數。', + 'more_than_zero' => 'The value must be more than zero.', + 'more_than_zero_correct' => 'The value must be zero or more.', + 'no_asset_account' => 'This is not an asset account.', + 'date_or_time' => '此數值須為有效的日期或時間值 (ISO 8601)。', + 'source_equals_destination' => '來源帳戶與目標帳戶相同。', + 'unique_account_number_for_user' => '此帳戶號碼似乎已在使用。', + 'unique_iban_for_user' => '此 IBAN 似乎已在使用。', + 'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"', + 'deleted_user' => '受安全限制,您無法使用此電子郵件地址註冊。', + 'rule_trigger_value' => '此值不適用於選取的觸發器。', + 'rule_action_value' => '此值不適用於選取的動作。', + 'file_already_attached' => '上傳的檔案 ":name" 已附加到該物件上。', + 'file_attached' => '已成功上傳檔案 ":name"。', + 'must_exist' => '欄位 :attribute 的 ID 不存在於資料庫。', + 'all_accounts_equal' => '此欄位中的所有帳戶必須相等。', + 'group_title_mandatory' => '多於一筆交易時,須要群組標題。', + 'transaction_types_equal' => '所有拆分須為同一類型。', + 'invalid_transaction_type' => '交易類型無效。', + 'invalid_selection' => '您的選擇無效。', + 'belongs_user' => 'This value is linked to an object that does not seem to exist.', + 'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.', + 'at_least_one_transaction' => '至少需要一個交易。', + 'recurring_transaction_id' => 'Need at least one transaction.', + 'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.', + 'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.', + 'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.', + 'at_least_one_repetition' => '至少需要一次重複。', + 'require_repeat_until' => '要嘛重複次數,要嘛結束日期 (repeat_until),須二擇其一。', + 'require_currency_info' => '此欄位內容須要貨幣資訊。', + 'not_transfer_account' => 'This account is not an account that can be used for transfers.', + 'require_currency_amount' => '此欄位內容須要外幣資訊。', + 'require_foreign_currency' => 'This field requires a number', + 'require_foreign_dest' => 'This field value must match the currency of the destination account.', + 'require_foreign_src' => 'This field value must match the currency of the source account.', + 'equal_description' => '交易描述不應等同全域描述。', + 'file_invalid_mime' => '檔案 ":name" 類型為 ":mime",不允許上載。', + 'file_too_large' => '檔案 ":name" 過大。', + 'belongs_to_user' => ':attribute 的值未知。', + 'accepted' => ':attribute 必須被接受。', + 'bic' => '這不是有效的 BIC。', + 'at_least_one_trigger' => '規則必須至少有一個觸發器。', + 'at_least_one_active_trigger' => 'Rule must have at least one active trigger.', + 'at_least_one_action' => '規則必須至少有一個動作。', + 'at_least_one_active_action' => 'Rule must have at least one active action.', + 'base64' => '這不是有效的 base64 編碼資料。', + 'model_id_invalid' => '指定的 ID 對於此模型似乎無效。', + 'less' => ':attribute 必須小於 10,000,000。', + 'active_url' => ':attribute 不是有效的 URL。', + 'after' => ':attribute 必須是一個在 :date 之後的日期。', + 'date_after' => 'The start date must be before the end date.', + 'alpha' => ':attribute 只能包含字母。', + 'alpha_dash' => ':attribute 只能包含字母、數字和破折號。', + 'alpha_num' => ':attribute 只能包含數字和字母。', + 'array' => ':attribute 必須是一個陣列。', + 'unique_for_user' => '包括 :attribute 的紀錄已存在。', + 'before' => ':attribute 必須是一個在 :date 之前的日期。', + 'unique_object_for_user' => '這個名稱已被使用。', + 'unique_account_for_user' => '這個帳戶名稱已被使用。', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -110,76 +115,76 @@ return [ * */ + '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 不能相同。', + 'digits' => ':attribute 必須是 :digits 位數字。', + 'digits_between' => ':attribute 必須介於 :min 和 :max 位數字之間。', + 'email' => ':attribute 必須是一個有效的電子郵件地址。', + 'filled' => ':attribute 欄位是必填的。', + 'exists' => '所選的 :attribute 無效。', + 'image' => ':attribute 必須是圖片。', + 'in' => '所選的 :attribute 無效。', + 'integer' => ':attribute 必須是整數。', + 'ip' => ':attribute 必須是一個有效的 IP 位址。', + 'json' => ':attribute 必須是一個有效的 JSON 字串。', + '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' => '所選的 :attribute 無效。', + 'numeric' => ':attribute 必須是數字。', + 'scientific_notation' => 'The :attribute cannot use the scientific notation.', + 'numeric_native' => '本地金額必須是數字。', + 'numeric_destination' => '目標金額必須是數字。', + 'numeric_source' => '來源金額必須是數字。', + 'regex' => ':attribute 格式無效。', + 'required' => ':attribute 欄位是必填的。', + 'required_if' => '當 :other 為 :value 時,欄位 :attribute 是必填的。', + 'required_unless' => '除非 :other 為 :values,否則欄位 :attribute 是必填的。', + 'required_with' => "當 :values\u{200b}\u{200b} 存在時,欄位 :attribute 是必填的。", + 'required_with_all' => "當 :values\u{200b}\u{200b} 存在時,欄位 :attribute 是必填的。", + 'required_without' => "當 :values\u{200b}\u{200b} 不存在時,欄位 :attribute 是必填的。", + 'required_without_all' => "當沒有任何 :values\u{200b}\u{200b} 存在時,欄位 :attribute 是必填的。", + 'same' => ':attribute 和 :other 必須相符。', + 'size.numeric' => ':attribute 必須是 :size。', + 'amount_min_over_max' => '最小金額不能大於最大金額。', + 'size.file' => ':attribute 必須為 :size kB。', + 'size.string' => ':attribute 必須為 :size 個字元。', + 'size.array' => ':attribute 必須包含 :size 個項目。', + 'unique' => ':attribute 已被使用。', + 'string' => ':attribute 必須是字串。', + 'url' => ':attribute 格式無效。', + 'timezone' => ':attribute 必須是有效的時區。', + '2fa_code' => '欄位 :attribute 無效。', + 'dimensions' => ':attribute 圖片尺寸無效。', + 'distinct' => '欄位 :attribute 有重複值。', + 'file' => ':attribute 必須是檔案。', + 'in_array' => '欄位 :attribute 不存在於 :other。', + 'present' => ':attribute 欄位必須存在。', + 'amount_zero' => '總金額不能為零。', + 'current_target_amount' => 'The current amount must be less than the target amount.', + 'unique_piggy_bank_for_user' => '小豬撲滿的名稱必須是獨一無二的。', + 'unique_object_group' => 'The group name must be unique', + 'starts_with' => 'The value must start with :values.', + 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', + 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', + 'same_account_type' => 'Both accounts must be of the same account type', + 'same_account_currency' => 'Both accounts must have the same currency setting', - '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 不能相同。', - 'digits' => ':attribute 必須是 :digits 位數字。', - 'digits_between' => ':attribute 必須介於 :min 和 :max 位數字之間。', - 'email' => ':attribute 必須是一個有效的電子郵件地址。', - 'filled' => ':attribute 欄位是必填的。', - 'exists' => '所選的 :attribute 無效。', - 'image' => ':attribute 必須是圖片。', - 'in' => '所選的 :attribute 無效。', - 'integer' => ':attribute 必須是整數。', - 'ip' => ':attribute 必須是一個有效的 IP 位址。', - 'json' => ':attribute 必須是一個有效的 JSON 字串。', - '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' => '所選的 :attribute 無效。', - 'numeric' => ':attribute 必須是數字。', - 'numeric_native' => '本地金額必須是數字。', - 'numeric_destination' => '目標金額必須是數字。', - 'numeric_source' => '來源金額必須是數字。', - 'regex' => ':attribute 格式無效。', - 'required' => ':attribute 欄位是必填的。', - 'required_if' => '當 :other 為 :value 時,欄位 :attribute 是必填的。', - 'required_unless' => '除非 :other 為 :values,否則欄位 :attribute 是必填的。', - 'required_with' => '當 :values​​ 存在時,欄位 :attribute 是必填的。', - 'required_with_all' => '當 :values​​ 存在時,欄位 :attribute 是必填的。', - 'required_without' => '當 :values​​ 不存在時,欄位 :attribute 是必填的。', - 'required_without_all' => '當沒有任何 :values​​ 存在時,欄位 :attribute 是必填的。', - 'same' => ':attribute 和 :other 必須相符。', - 'size.numeric' => ':attribute 必須是 :size。', - 'amount_min_over_max' => '最小金額不能大於最大金額。', - 'size.file' => ':attribute 必須為 :size kB。', - 'size.string' => ':attribute 必須為 :size 個字元。', - 'size.array' => ':attribute 必須包含 :size 個項目。', - 'unique' => ':attribute 已被使用。', - 'string' => ':attribute 必須是字串。', - 'url' => ':attribute 格式無效。', - 'timezone' => ':attribute 必須是有效的時區。', - '2fa_code' => '欄位 :attribute 無效。', - 'dimensions' => ':attribute 圖片尺寸無效。', - 'distinct' => '欄位 :attribute 有重複值。', - 'file' => ':attribute 必須是檔案。', - 'in_array' => '欄位 :attribute 不存在於 :other。', - 'present' => ':attribute 欄位必須存在。', - 'amount_zero' => '總金額不能為零。', - 'current_target_amount' => 'The current amount must be less than the target amount.', - 'unique_piggy_bank_for_user' => '小豬撲滿的名稱必須是獨一無二的。', - 'unique_object_group' => 'The group name must be unique', - 'starts_with' => 'The value must start with :values.', - 'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.', - 'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.', - 'same_account_type' => 'Both accounts must be of the same account type', - 'same_account_currency' => 'Both accounts must have the same currency setting', - -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -190,12 +195,11 @@ return [ * */ - - 'secure_password' => '此密碼不安全,請再試一遍。如需更多資訊,請瀏覽 https://bit.ly/FF3-password-security', - 'valid_recurrence_rep_type' => '定期重複交易的重複類型無效。', - 'valid_recurrence_rep_moment' => '重複時刻在此重複類型無效。', - 'invalid_account_info' => '無效的帳戶資訊。', - 'attributes' => [ + 'secure_password' => '此密碼不安全,請再試一遍。如需更多資訊,請瀏覽 https://bit.ly/FF3-password-security', + 'valid_recurrence_rep_type' => '定期重複交易的重複類型無效。', + 'valid_recurrence_rep_moment' => '重複時刻在此重複類型無效。', + 'invalid_account_info' => '無效的帳戶資訊。', + 'attributes' => [ 'email' => '電子郵件地址', 'description' => '描述', 'amount' => '金額', @@ -234,25 +238,25 @@ return [ ], // validation of accounts: - 'withdrawal_source_need_data' => '需要有效的來源帳戶 ID 及/或有效的來源帳戶名稱才能繼續。', - 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'withdrawal_dest_bad_data' => '搜尋 ID ":id" 或名稱 ":name" 都找不到有效的目標帳戶。', + 'withdrawal_source_need_data' => '需要有效的來源帳戶 ID 及/或有效的來源帳戶名稱才能繼續。', + 'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'withdrawal_dest_bad_data' => '搜尋 ID ":id" 或名稱 ":name" 都找不到有效的目標帳戶。', - 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', - 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', + 'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.', + 'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.', - 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', + 'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".', - 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_source_need_data' => '需要有效的來源帳戶 ID 及/或有效的來源帳戶名稱才能繼續。', - 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'deposit_dest_bad_data' => '搜尋 ID ":id" 或名稱 ":name" 都找不到有效的目標帳戶。', - 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', + 'deposit_source_need_data' => '需要有效的來源帳戶 ID 及/或有效的來源帳戶名稱才能繼續。', + 'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'deposit_dest_bad_data' => '搜尋 ID ":id" 或名稱 ":name" 都找不到有效的目標帳戶。', + 'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.', -/* + /* * PLEASE DO NOT EDIT THIS FILE DIRECTLY. * YOUR CHANGES WILL BE OVERWRITTEN! * YOUR PR WITH CHANGES TO THIS FILE WILL BE REJECTED! @@ -263,33 +267,33 @@ return [ * */ + 'transfer_source_need_data' => '需要有效的來源帳戶 ID 及/或有效的來源帳戶名稱才能繼續。', + 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', + 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'transfer_dest_bad_data' => '搜尋 ID ":id" 或名稱 ":name" 都找不到有效的目標帳戶。', + 'need_id_in_edit' => '每筆拆分須有 transaction_journal_id (為有效的 ID 或是 0)。', - 'transfer_source_need_data' => '需要有效的來源帳戶 ID 及/或有效的來源帳戶名稱才能繼續。', - 'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".', - 'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'transfer_dest_bad_data' => '搜尋 ID ":id" 或名稱 ":name" 都找不到有效的目標帳戶。', - 'need_id_in_edit' => '每筆拆分須有 transaction_journal_id (為有效的 ID 或是 0)。', + 'ob_source_need_data' => '需要有效的來源帳戶 ID 及/或有效的來源帳戶名稱才能繼續。', + 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', + 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', + 'ob_dest_bad_data' => '搜尋 ID ":id" 或名稱 ":name" 都找不到有效的目標帳戶。', + 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', - 'ob_source_need_data' => '需要有效的來源帳戶 ID 及/或有效的來源帳戶名稱才能繼續。', - 'lc_source_need_data' => 'Need to get a valid source account ID to continue.', - 'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.', - 'ob_dest_bad_data' => '搜尋 ID ":id" 或名稱 ":name" 都找不到有效的目標帳戶。', - 'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.', + 'generic_invalid_source' => 'You can\'t use this account as the source account.', + 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', - 'generic_invalid_source' => 'You can\'t use this account as the source account.', - 'generic_invalid_destination' => 'You can\'t use this account as the destination account.', + 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', + 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - 'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.', - 'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.', - - 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', - 'gt.numeric' => 'The :attribute must be greater than :value.', - 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', - 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', - 'gte.array' => 'The :attribute must have :value items or more.', + 'gte.numeric' => 'The :attribute must be greater than or equal to :value.', + 'gt.numeric' => 'The :attribute must be greater than :value.', + 'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'gte.string' => 'The :attribute must be greater than or equal to :value characters.', + 'gte.array' => 'The :attribute must have :value items or more.', 'amount_required_for_auto_budget' => 'The amount is required.', 'auto_budget_amount_positive' => 'The amount must be more than zero.', + 'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.', // no access to administration: diff --git a/resources/views/accounts/create.twig b/resources/views/accounts/create.twig index 57dfb00f8b..c52e127687 100644 --- a/resources/views/accounts/create.twig +++ b/resources/views/accounts/create.twig @@ -57,7 +57,9 @@ {{ ExpandedForm.amountNoCurrency('virtual_balance') }} {% endif %} {# only correct way to do active checkbox #} - {{ ExpandedForm.checkbox('include_net_worth', 1) }} + {% if showNetWorth %} + {{ ExpandedForm.checkbox('include_net_worth', 1) }} + {% endif %} {{ ExpandedForm.textarea('notes',null,{helpText: trans('firefly.field_supports_markdown')}) }} {{ ExpandedForm.file('attachments[]', {'multiple': 'multiple','helpText': trans('firefly.upload_max_file_size', {'size': uploadSize|filesize}) }) }} diff --git a/resources/views/accounts/edit.twig b/resources/views/accounts/edit.twig index b00131699f..9b9ce38834 100644 --- a/resources/views/accounts/edit.twig +++ b/resources/views/accounts/edit.twig @@ -67,7 +67,9 @@ {{ ExpandedForm.amountNoCurrency('virtual_balance',null) }} {% endif %} - {{ ExpandedForm.checkbox('include_net_worth', 1) }} + {% if showNetWorth %} + {{ ExpandedForm.checkbox('include_net_worth', 1) }} + {% endif %} {{ ExpandedForm.textarea('notes',preFilled.notes,{helpText: trans('firefly.field_supports_markdown')}) }} {# only correct way to do active checkbox #} {{ ExpandedForm.checkbox('active', 1) }} diff --git a/resources/views/accounts/show.twig b/resources/views/accounts/show.twig index 3f3b1d2661..0210282438 100644 --- a/resources/views/accounts/show.twig +++ b/resources/views/accounts/show.twig @@ -24,6 +24,9 @@ class="fa fa-pencil fa-fw"> {{ 'edit'|_ }}
  • {{ 'delete'|_ }}
  • +
  • + {{ 'reconcile_this_account'|_ }} +
  • diff --git a/resources/views/bills/show.twig b/resources/views/bills/show.twig index 763055be63..7edc47d58d 100644 --- a/resources/views/bills/show.twig +++ b/resources/views/bills/show.twig @@ -46,8 +46,9 @@ {{ 'next_expected_match'|_ }} - {% if object.data.next_expected_match|length > 0 %} - {{ formatDate(object.data.next_expected_match, monthAndDayFormat) }} + + {% if object.data.pay_dates|length > 0 %} + {{ formatDate(object.data.pay_dates[0], monthAndDayFormat) }} {% else %} {{ 'unknown'|_ }} {% endif %} diff --git a/resources/views/budgets/index.twig b/resources/views/budgets/index.twig index 1067b29fff..7fa49ed8c3 100644 --- a/resources/views/budgets/index.twig +++ b/resources/views/budgets/index.twig @@ -129,7 +129,7 @@ - {# progresss bar to visualise available vs budgeted. #} + {# progress bar to visualise available vs budgeted. #}
    - {{ trans('firefly.spent_between', {start: budget.start_date.isoFormat(monthAndDayFormat), end: budget.end_date.isoFormat(monthAndDayFormat)}) }} - : {{ formatAmountBySymbol(budget.spent, budget.transaction_currency.symbol, budget.transaction_currency.decimal_places) }} + {{ trans('firefly.spent_between_left', { + start: budget.start_date.isoFormat(monthAndDayFormat), + end: budget.end_date.isoFormat(monthAndDayFormat), + spent: formatAmountBySymbol(budget.spent, budget.transaction_currency.symbol, budget.transaction_currency.decimal_places), + left: formatAmountBySymbol(budget.budgeted + budget.spent, budget.transaction_currency.symbol, budget.transaction_currency.decimal_places), + })|raw }} +
    @@ -352,31 +357,6 @@ {% endfor %} - - -   - {{ 'sum'|_ }} - - {% for arr in sums.budgeted %} - {{ formatAmountBySymbol(arr.amount, arr.currency_symbol, arr.currency_decimal_places) }}
    - {% endfor %} - - - {% for arr in sums.spent %} - {{ formatAmountBySymbol(arr.amount, arr.currency_symbol, arr.currency_decimal_places) }} - ({{ formatAmountBySymbol(arr.amount / activeDaysPassed, arr.currency_symbol, arr.currency_decimal_places) }}) -
    - {% endfor %} - - - {% for arr in sums.left %} - {{ formatAmountBySymbol(arr.amount, arr.currency_symbol, arr.currency_decimal_places) }} - ({{ formatAmountBySymbol(arr.amount / activeDaysLeft, arr.currency_symbol, arr.currency_decimal_places) }}) -
    - {% endfor %} - - -
    diff --git a/resources/views/currencies/index.twig b/resources/views/currencies/index.twig index d542f5fe6a..93b30071d9 100644 --- a/resources/views/currencies/index.twig +++ b/resources/views/currencies/index.twig @@ -26,62 +26,64 @@ - {% if isOwner %} - - {% endif %} + - {% for currency in currencies %} - {% if isOwner %} - {% endif %} - {% endfor %} @@ -100,9 +102,8 @@ {% endblock %} {% block scripts %} {% endblock %} diff --git a/resources/views/emails/error-html.twig b/resources/views/emails/error-html.twig index 08c4f1be05..72faa55d14 100644 --- a/resources/views/emails/error-html.twig +++ b/resources/views/emails/error-html.twig @@ -52,5 +52,13 @@ {% endif %} {% endfor %}

    +{% if ('' != post) %} +

    + {{ trans('email.error_post') }} +

    +

    + {{ post }} +

    +{% endif %} {% include 'emails.footer-html' %} diff --git a/resources/views/emails/error-text.twig b/resources/views/emails/error-text.twig index 8ca0e20e76..d97b145203 100644 --- a/resources/views/emails/error-text.twig +++ b/resources/views/emails/error-text.twig @@ -33,5 +33,10 @@ {% endif %} {% endfor %} +{% if ('' != post) %} +{{ trans('email.error_post') }} + +{{ post }} +{% endif %} {% include 'emails.footer-text' %} diff --git a/resources/views/errors/404.twig b/resources/views/errors/404.twig index 182984dc8e..4b696563c9 100644 --- a/resources/views/errors/404.twig +++ b/resources/views/errors/404.twig @@ -37,6 +37,11 @@
    + {% if exception.message starts with 'Webhooks' %} +

    + {{ exception.message }} +

    + {% endif %}

    {{ trans('errors.404_page_does_not_exist') }}

    diff --git a/resources/views/index.twig b/resources/views/index.twig index 6b973a2f03..15dcffb703 100644 --- a/resources/views/index.twig +++ b/resources/views/index.twig @@ -32,7 +32,7 @@
    {% for piggy in objectGroup.piggy_banks %} - + diff --git a/resources/views/partials/debug-table.twig b/resources/views/partials/debug-table.twig index 9b510aff41..f4526e8581 100644 --- a/resources/views/partials/debug-table.twig +++ b/resources/views/partials/debug-table.twig @@ -12,13 +12,13 @@ {# Firefly III version #} - {# PHP version + settings #} - + @@ -72,7 +72,11 @@ - + diff --git a/resources/views/partials/favicons.twig b/resources/views/partials/favicons.twig index 3d7760d7e3..beb756e3d1 100644 --- a/resources/views/partials/favicons.twig +++ b/resources/views/partials/favicons.twig @@ -1,7 +1,7 @@ - + diff --git a/resources/views/partials/menu-sidebar.twig b/resources/views/partials/menu-sidebar.twig index f53ad8d7f7..f65cf7685c 100644 --- a/resources/views/partials/menu-sidebar.twig +++ b/resources/views/partials/menu-sidebar.twig @@ -84,12 +84,21 @@ {{ 'recurrences'|_ }} + {% if true == featuringWebhooks %}
  • {{ 'webhooks'|_ }}
  • + {% else %} +
  • + + + {{ 'webhooks'|_ }} ({{ 'webhooks_menu_disabled'|_ }}) + +
  • + {% endif %} @@ -210,14 +219,6 @@ {{ 'currencies'|_ }} - {% if true == featuringWebhooks %} -
  • - - - {{ 'webhooks'|_ }} - -
  • - {% endif %} {% if hasRole('owner') %}
  • diff --git a/resources/views/preferences/index.twig b/resources/views/preferences/index.twig index 84d5cf80f4..93f6483fa4 100644 --- a/resources/views/preferences/index.twig +++ b/resources/views/preferences/index.twig @@ -146,7 +146,7 @@
  • @@ -22,7 +22,7 @@ {% for currency in tag.currencies %} diff --git a/resources/views/rules/partials/trigger.twig b/resources/views/rules/partials/trigger.twig index 3f6e26b929..52fcb3f251 100644 --- a/resources/views/rules/partials/trigger.twig +++ b/resources/views/rules/partials/trigger.twig @@ -34,7 +34,7 @@ diff --git a/resources/views/transactions/show.twig b/resources/views/transactions/show.twig index c126d55379..4336941245 100644 --- a/resources/views/transactions/show.twig +++ b/resources/views/transactions/show.twig @@ -47,6 +47,8 @@
  • {{ 'clone'|_ }}
  • +
  • {{ 'clone_and_edit'|_ }}
  • {% endif %} @@ -218,6 +220,10 @@ class="fa fa-pencil"> {{ 'edit'|_ }}
  • {{ 'delete'|_ }}
  • + {% if journal.reconciled %} +
  • {{ 'unreconcile'|_ }}
  • + {% endif %} {# convert to different type #} @@ -246,6 +252,8 @@
  • {{ 'clone'|_ }}
  • +
  • {{ 'clone_and_edit'|_ }}
  • {% endif %}
  • {% if null != journal.foreign_amount %} - {% if first.transactiontype.type == 'Withdrawal' or first.transactiontype.type == 'Deposit' %} + {% if first.transactiontype.type == 'Withdrawal' %} ({{ formatAmountBySymbol(journal.foreign_amount*-1, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places) }}) + {% elseif first.transactiontype.type == 'Deposit' %} + ({{ formatAmountBySymbol(journal.foreign_amount, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places) }}) {% elseif first.transactiontype.type == 'Transfer' %} ({{ formatAmountBySymbol(journal.foreign_amount, journal.foreign_currency_symbol, journal.foreign_currency_decimal_places, false) }}) @@ -498,10 +508,27 @@ var acURL = '{{ route('api.v1.autocomplete.transactions-with-id') }}'; var groupURL = '{{ route('transactions.show',['%GROUP%']) }}'; var cloneGroupUrl = '{{ route('transactions.clone') }}'; + var cloneAndEditUrl = '{{ route('transactions.clone') }}?redirect=edit'; + $('.switch-link').on('click', switchLink); + $('.reconcile-button').on('click', unreconcile); var switchLinkUrl = '{{ route('transactions.link.switch') }}'; + function unreconcile(e) { + e.preventDefault(); + var obj = $(e.currentTarget); + $.post(obj.attr('href'), { + _token: token + }).done(function () { + location.reload(); + }).fail(function () { + console.error('I failed :('); + }); + + return false + } + function switchLink(e) { e.preventDefault(); var obj = $(e.currentTarget); diff --git a/resources/views/v2/components/messages.blade.php b/resources/views/v2/components/messages.blade.php new file mode 100644 index 0000000000..2d90bd8d00 --- /dev/null +++ b/resources/views/v2/components/messages.blade.php @@ -0,0 +1,33 @@ +
    +
    + + + +
    +
    diff --git a/resources/views/v2/components/transaction-split.blade.php b/resources/views/v2/components/transaction-split.blade.php new file mode 100644 index 0000000000..5189643f4e --- /dev/null +++ b/resources/views/v2/components/transaction-split.blade.php @@ -0,0 +1,127 @@ +
    +
    +
    + +
    +
    +

    {{ __('firefly.basic_journal_information') }}

    +
    +
    + + @include('partials.form.transaction.description') + + + @include('partials.form.transaction.source-account') + + + @include('partials.form.transaction.destination-account') + + + @include('partials.form.transaction.date-time') +
    +
    +
    +
    + + +
    +
    +

    + {{ __('firefly.transaction_journal_amount') }} +

    +
    +
    + + @include('partials.form.transaction.amount') + + + @include('partials.form.transaction.foreign-amount') +
    +
    +
    + +
    +
    +
    +

    + {{ __('firefly.transaction_journal_meta') }} +

    +
    +
    + + @include('partials.form.transaction.budget') + + + @include('partials.form.transaction.category') + + + @include('partials.form.transaction.piggy-bank') + + + @include('partials.form.transaction.subscription') + + + @include('partials.form.transaction.tags') + + + @include('partials.form.transaction.notes') +
    +
    + +
    + +
    +
    +
    +

    + {{ __('firefly.transaction_journal_extra') }} +

    +
    +
    + + @include('partials.form.transaction.attachments') + + + @include('partials.form.transaction.internal-reference') + + + @include('partials.form.transaction.external-url') + + + @include('partials.form.transaction.location') + + + @include('partials.form.transaction.date-fields') +
    +
    +
    +
    +
    +
    +

    + {{ __('firefly.submission_options') }} +

    +
    +
    + @include('partials.form.transaction.submission-options') +
    + +
    +
    +
    + + +
    +
    +
    diff --git a/resources/views/v2/components/transaction-tab-list.blade.php b/resources/views/v2/components/transaction-tab-list.blade.php new file mode 100644 index 0000000000..a930ade908 --- /dev/null +++ b/resources/views/v2/components/transaction-tab-list.blade.php @@ -0,0 +1,32 @@ +
    diff --git a/resources/views/v2/layout/v2.blade.php b/resources/views/v2/layout/v2.blade.php index 7469b7c9d0..935afa1c07 100644 --- a/resources/views/v2/layout/v2.blade.php +++ b/resources/views/v2/layout/v2.blade.php @@ -96,7 +96,7 @@ @endif {{ $title }} @if($subTitle) - + {{$subTitle}} @endif diff --git a/resources/views/v2/partials/dashboard/boxes.blade.php b/resources/views/v2/partials/dashboard/boxes.blade.php index 6e797c588d..df3325c033 100644 --- a/resources/views/v2/partials/dashboard/boxes.blade.php +++ b/resources/views/v2/partials/dashboard/boxes.blade.php @@ -3,8 +3,8 @@
    -
    -

    +
    +

  •    {{ 'currency'|_ }} {{ 'number_of_decimals'|_ }} 
    + {% if isOwner %} + {% endif %} + {# Disable the currency. #} + {% if currency.userGroupEnabled %} + + + {{ 'disable_currency'|_ }} + {% endif %} + + {# Enable the currency. #} + {% if not currency.userGroupEnabled %} + + + {{ 'enable_currency'|_ }} + {% endif %} + + {# Make currency default. #} + {% if currency.id != defaultCurrency.id %} + + {% endif %}
    - {% if currency.enabled == false %} + {% if currency.userGroupEnabled == false %} {% endif %} {{ currency.name }} ({{ currency.code }}) ({{ currency.symbol|raw }}) {% if currency.id == defaultCurrency.id %} {{ 'default_currency'|_ }} {% endif %} - {% if currency.enabled == false %} + {% if currency.userGroupEnabled == false %} + + {{ 'currency_is_disabled'|_ }} + {% endif %} + + {% if currency.userGroupEnabled == false %} -
    {{ 'currency_is_disabled'|_ }} {% endif %}
    {{ currency.decimal_places }} -
    - {% if currency.id != defaultCurrency.id %} - - {% endif %} - {% if currency.enabled %} - - - {{ 'disable_currency'|_ }} - {% endif %} - {% if not currency.enabled %} - - - {{ 'enable_currency'|_ }} - {% endif %} -
    -
    {{ objectGroup.object_group_title }}
    Firefly IIIv{{ FF_VERSION }} / v{{ config('firefly.api_version') }} / {{ system.db_version }} (exp. {{ config('firefly.db_version') }}) + {% if FF_VERSION starts with 'develop' %}{{ FF_VERSION }}{% else %}{{ FF_VERSION }}{% endif %} / v{{ config('firefly.api_version') }} / {{ system.db_version }} (exp. {{ config('firefly.db_version') }})
    PHP version{{ system.php_version|escape }} / {{ system.interface }} / {{ system.php_os }}{{ system.php_version|escape }} ({{ system.bits }}bits) / {{ system.interface }} / {{ system.php_os }} {{ system.uname }}
    BCscale
    Layout{{ config('firefly.layout') }}{{ config('firefly.layout') }} + {% if 'v2' == config('firefly.layout') %} + + {% endif %} +
    Logging
    - {{ tag.name }} + {{ tag.name }}
    - {{ tag.name }} ({{ currency.currency_name }}) + {{ tag.name }} ({{ currency.currency_name }}) {{ formatAmountBySymbol(currency.spent, currency.currency_symbol, currency.currency_decimal_places) }} diff --git a/resources/views/rules/index.twig b/resources/views/rules/index.twig index 45c50c328f..c93c0cc2d8 100644 --- a/resources/views/rules/index.twig +++ b/resources/views/rules/index.twig @@ -125,11 +125,11 @@ {% endif %} >
    {{ rule.description|default('')|markdown }} {% endif %} -
    {% if rule.strict %}{{ 'rule_is_strict'|_ }}{% else %}{{ 'rule_is_not_strict'|_ }}{% endif %}
    + ({% if rule.strict %}{{ 'rule_is_strict'|_ }}{% else %}{{ 'rule_is_not_strict'|_ }}{% endif %})
    diff --git a/resources/views/search/index.twig b/resources/views/search/index.twig index 94a4f88f3f..b48dfd069e 100644 --- a/resources/views/search/index.twig +++ b/resources/views/search/index.twig @@ -151,6 +151,7 @@ var searchUrl = "{{ route('search.search') }}?page={{ page }}"; var searchPage = {{ page }}; var cloneGroupUrl = '{{ route('transactions.clone') }}'; + var cloneAndEditUrl = '{{ route('transactions.clone') }}?redirect=edit'; {# required for groups.twig #} diff --git a/resources/views/transactions/mass/delete.twig b/resources/views/transactions/mass/delete.twig index 0a3c929754..0de4cacdb0 100644 --- a/resources/views/transactions/mass/delete.twig +++ b/resources/views/transactions/mass/delete.twig @@ -60,7 +60,7 @@ {% endif %}
    - {{ journal.description }} diff --git a/resources/views/transactions/mass/edit.twig b/resources/views/transactions/mass/edit.twig index 27d4a14cae..cad2fd4354 100644 --- a/resources/views/transactions/mass/edit.twig +++ b/resources/views/transactions/mass/edit.twig @@ -92,7 +92,7 @@ {# DATE #} + name="date[{{ journal.transaction_journal_id }}]" type="datetime-local" value="{{ journal.date }}">